You are not logged in.

#51 2012-12-06 10:16:55

Harey
Member
From: Bavaria, Germany
Registered: 2007-03-24
Posts: 292

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

rfkrocktk wrote:

Ok, I actually found it! w00t.

P:  Vendor=0b05 ProdID=17b5 Rev=01.12

This is all you need wink

I use this script in rc.d (which will not work with pure systemd systems - but it gives you the idea)

#!/bin/bash

. /etc/rc.conf
. /etc/rc.d/functions

#
# BCM20702A0 BT Adapter upload rampatch
#
stat_busy "applying Rampatch to BCM20702A0 Bluetooth adapter"
# put your path in here!Put the hexfile in same folder!
cd /path/to/bcmfwup 
./bcmfwup.py
modprobe btusb
# adapted for BCM43228:                   
echo "0b05 17b5" >> /sys/bus/usb/drivers/btusb/new_id
stat_done

The bcmfwup python script for you should look like this:

#!/usr/bin/python2
# -*- coding: utf-8 -*-

import sys
import usb.core
import usb.util
import threading
import time

ID_VENDOR = 0x0b05
ID_PRODUCT = 0x17b5

class bcm_fw_up:

  def __init__(self):
    self.dev = usb.core.find(idVendor = ID_VENDOR, idProduct = ID_PRODUCT)

    if self.dev is None:
      raise ValueError('Device not found')

    self.cfg = self.dev.get_active_configuration()
    self.detach_drivers()

  def detach_drivers(self):
    for intf in self.cfg:
      if self.dev.is_kernel_driver_active(intf.bInterfaceNumber):
        self.dev.detach_kernel_driver(intf.bInterfaceNumber)

  def attach_drivers(self):
    for intf in self.cfg:
      if not self.dev.is_kernel_driver_active(intf.bInterfaceNumber):
        self.dev.attach_kernel_driver(intf.bInterfaceNumber)
  
  def init_upload(self):
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x79, 0xfc, 0x00])
    re.join()
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x2e, 0xfc, 0x00])
    re.join()

  def finish_upload(self):
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x4e, 0xfc, 0x04, 0xff, 0xff, 0xff, 0xff])
    re.join()
    re = read_event_thread(self.dev)
    re.read()
    re.join()
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x79, 0xfc, 0x00])
    re.join()
    re = read_event_thread(self.dev)
    re.read()
    #re2 = read_event_thread(self.dev, 0x82)
    #re2.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x53, 0xfc, 0x01, 0x13])
    re.join()
    #re2.join()

  def upload(self, address, data):
    re = read_event_thread(self.dev)
    re.read()
    self.dev.write(2, '\x4c\xfc' + chr(len(data) + 4) + chr(address & 0xFF) +
      chr((address >> 8) & 0xFF) + chr((address >> 16) & 0xFF) + chr((address >> 24) & 0xFF) + data)
    re.join()

  def reset(self):
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x03, 0x0c, 0x00])
    re.join()
    usb.util.dispose_resources(self.dev)
    self.cfg = self.dev.get_active_configuration()


class read_event_thread(threading.Thread):
  def __init__(self, dev, endpoint = 0x81):
    super(read_event_thread, self).__init__()
    self.daemon = True
    self.dev = dev
    self.endpoint = endpoint

  def run(self):
    try:
      self.result = self.dev.read(self.endpoint, 0xff)
    except usb.core.USBError as (errno, strerror):
      print "read event error({0}): {1}".format(errno, strerror)
    print 'event:', self.result

  def read(self):
    self.start()
    time.sleep(0.1)


class intelhex:

  data = []

  def __init__(self, filename = None):
    self.offset = 0
    if filename is None:
      return
    self.load_from_file(filename)

  def load_from_file(self, filename):
    for line in open(filename):
      self.append(line)

  def append(self, line):
    if not line[0] == ':':
      return
    line = line.rstrip()
    length = int(line[1:3], 16)
    address = int(line[3:7], 16)
    rectype = int(line[7:9], 16)
    checksum = int(line[-2:], 16)
    if rectype == 1:
      return
    if rectype == 4:
      self.offset = int(line[9:13], 16) * 0x10000
      return
    self.data.append((length, address + self.offset, line[9:-2].decode('hex'), checksum))


def main():
  hex = intelhex('Yourhexfilenamehere.hex')
  up = bcm_fw_up()
  up.init_upload()
  for line in hex.data:
    up.upload(line[1], line[2])
  up.finish_upload()
  up.reset()
  #up.attach_drivers()
  return 0

if __name__ == '__main__':
  sys.exit(main())

You need python2 and your firmware hex file from the windows driver. Rename in def main() hex = intelhex('Yourhexfilenamehere.hex') to the name of your hexfile and give it a try. This should be done before the initialization of bluetooth.

This is the way I do this. But keep in mind: this doesn't survice any suspend to disk/ram. You would have to do it again to resurrect it. I still hope for the bluez guys to accept the patch for my hardware hmm

Hope this helps

Harvey


Linux is like a wigwam: No Gates, no Windows and an Apache inside

Offline

#52 2013-04-02 08:45:27

Ephraim
Member
Registered: 2012-08-22
Posts: 5

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

Ubuntu 12.10 finally had support for the firmware upload by itself.

Upgraded to Ubuntu 13.04 pre ... stopped working sad .... BUT your script still does the trick smile.

Greetings
Ephraim

Offline

#53 2013-08-14 09:51:12

Harey
Member
From: Bavaria, Germany
Registered: 2007-03-24
Posts: 292

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

Just in case anybody is interested - I changed it to work with systemd.
See https://bbs.archlinux.org/viewtopic.php … 9#p1259289

Harvey


Linux is like a wigwam: No Gates, no Windows and an Apache inside

Offline

#54 2013-10-14 04:13:58

Vash63
Member
Registered: 2012-09-22
Posts: 17

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

Sad to see this still isn't any easier. I have the same adapter, though my vendor and device ID's don't match. I tried using the hex->hcd with the hex file found in the LD directory of Asus' installer (BCM20702A0_001.001.024.0156.0204.hex), renamed it w/ the vendor and prodid given by usb-devices (P:  Vendor=0b05 ProdID=17cb Rev=01.12) using that systemd service. No go unfortunately, the script and service both seem to run fine but bluetoothctl and gnome-bluetooth both report no bluetooth adapters present.

I'm probably just going to find another BT adapter that's got firmware already provided w/ the kernel or doesn't need the firmware loaded into it like this.

Edit: I should probably just create a new thread for this as it seems my case is sufficiently different. It's still listed as a BCM20702A0 though.

usb-devices is similar

T:  Bus=06 Lev=02 Prnt=02 Port=05 Cnt=04 Dev#=  6 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0b05 ProdID=17cb Rev=01.12
S:  Manufacturer=Broadcom Corp
S:  Product=BCM20702A0
S:  SerialNumber=000272C698E7
C:  #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=100mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

Strangely, after running hciconfig hci0 up it's working... should this be necessary? hcitool dev still only shows its MAC/Serial number but it did attach to my phone now.

Edit: Though it also seems I need to echo my vendor/productID into /sys/bus/usb/drivers/btusb/new_id on every boot also and run hciconfig hci0 up...

Edit3 (i promise this is the last edit):

Looks like this may be a good time for it. Seems my device just hit the kernel. http://lkml.indiana.edu/hypermail/linux … 01887.html

Last edited by Vash63 (2013-10-14 05:27:14)

Offline

#55 2013-10-14 07:11:49

Harey
Member
From: Bavaria, Germany
Registered: 2007-03-24
Posts: 292

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

Bluetooth in KDE is broken completely in the moment at least for me due to the transition bluez4 -> bluez5 (see here)  'hciconfig hci0 up' is necessary for a longer time now. Looking at the bugtracker you will see some entries also mentioning this. I have decided to stop fiddling around with this at least until the transition to bluez5 has been completed and looks stable. And don't be too happy about kernel inclusion of your device. Mine was included before and got removed because of this firmware thing sad

Harvey


Linux is like a wigwam: No Gates, no Windows and an Apache inside

Offline

#56 2013-11-14 18:16:01

Steve_White
Member
Registered: 2013-04-07
Posts: 2

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

Maybe this was explained in one of the postings, but I didn't see it.

To determine which of the driver files corresponds to a given device,
look at the ProdID entry in the 'usb-devices' output.

For instance, mine is
    P:  Vendor=0489 ProdID=e032 Rev=01.12

The vendor's driver directory has an 'inf' file, in this case
    bcbtums-win7x64-brcm.inf
with a section labelled according to the ProdID:
    RAMUSBE032
In this section is a reference to the file for the device:
    BCM20702A1_001.002.014.0187.0194.hex

Offline

#57 2014-06-28 06:34:04

nhurtt
Member
Registered: 2012-03-30
Posts: 10

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

wow, what a great thread. With the help of everyone here I managed to get my own card working as well.

I deviated from some of the advice posted in here in that I manually edited the btusb kernel driver so that it contains my Product and Vendor IDs; this means I didn't have to manually echo my PID VID combo to /sys/bus/usb/drivers/btusb/new_id.

Anyways, for those who find themselves here by google, here is my setup

MOTHERBOARD INFO
Asus Maximus VI Formula + mPCIe wireless / bluetooth combo card (included with motherboard)

WIRELESS INFO (probably not relevant, but posted for others who have the same combo card and want to know if it can work)
/>$ sudo lspci -vvnn

03:00.0 Network controller [0280]: Broadcom Corporation BCM4352 802.11ac Wireless Network Adapter [14e4:43b1] (rev 03)
        Subsystem: ASUSTeK Computer Inc. Device [1043:855c]
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort+ <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0, Cache Line Size: 64 bytes
        Interrupt: pin A routed to IRQ 17
        Region 0: Memory at df400000 (64-bit, non-prefetchable) [size=32K]
        Region 2: Memory at df200000 (64-bit, non-prefetchable) [size=2M]
        Capabilities: [48] Power Management version 3
                Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
                Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=2 PME-
        Capabilities: [58] MSI: Enable- Count=1/1 Maskable- 64bit+
                Address: 0000000000000000  Data: 0000
        Capabilities: [68] Vendor Specific Information: Len=44 <?>
        Capabilities: [ac] Express (v2) Endpoint, MSI 00
                DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
                        ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
                        RlxdOrd- ExtTag- PhantFunc- AuxPwr+ NoSnoop+
                        MaxPayload 128 bytes, MaxReadReq 1024 bytes
                DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq- AuxPwr+ TransPend-
                LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <2us, L1 <32us
                        ClockPM+ Surprise- LLActRep- BwNot-
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk+
                        ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
                DevCap2: Completion Timeout: Range ABCD, TimeoutDis+, LTR+, OBFF Via WAKE#
                DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR+, OBFF Disabled
                LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
                         Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
                         Compliance De-emphasis: -6dB
                LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-, EqualizationPhase1-
                         EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
        Capabilities: [100 v1] Advanced Error Reporting
                UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt+ UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq+ ACSViol-
                UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
                CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
                AERCap: First Error Pointer: 0f, GenCap+ CGenEn- ChkCap+ ChkEn-
        Capabilities: [13c v1] Device Serial Number 54-27-00-ff-ff-00-00-01
        Capabilities: [150 v1] Power Budgeting <?>
        Capabilities: [160 v1] Virtual Channel
                Caps:   LPEVC=0 RefClk=100ns PATEntryBits=1
                Arb:    Fixed- WRR32- WRR64- WRR128-
                Ctrl:   ArbSelect=Fixed
                Status: InProgress-
                VC0:    Caps:   PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
                        Arb:    Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
                        Ctrl:   Enable+ ID=0 ArbSelect=Fixed TC/VC=01
                        Status: NegoPending- InProgress-
        Capabilities: [1b0 v1] Latency Tolerance Reporting
                Max snoop latency: 71680ns
                Max no snoop latency: 71680ns
        Capabilities: [220 v1] #15
        Kernel driver in use: wl

BLUETOOTH INFO
/>$ usb-devices

T:  Bus=03 Lev=01 Prnt=01 Port=03 Cnt=03 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0b05 ProdID=17cf Rev=01.12
S:  Manufacturer=Broadcom Corp
S:  Product=BCM20702A0
S:  SerialNumber=54271E328D4F
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

As you can see, my vendor id is 0b05 and my product id is 17cf.

I'm on Kubuntu 14.04, so I followed the instructions posted at:

https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel

to get kernel sources, edit btusb, recompile, and reinstall. The *CRUX* of this step is pretty distribution agnostic, so just follow the download / edit / recompile / install documentation for your own distro to edit btusb.c and things should go swimmingly; below are ubuntu-specific steps. The change I made was simple, and probably not worth it, but basically I just did

mkdir ~/LINUX_SOURCE
cd ~/LINUX_SOURCE
sudo apt-get build-dep linux-image-$(uname -r)
apt-get source linux-image-$(uname -r)
cd linux-3.13.0/drivers/bluetooth/

I then navigated to ~/LINUX_SOURCE/linux-3.13.0/drivers/bluetooth/btusb.c, and found the section with the comment  heading:

/* Broadcom BCM20702A0 */

which looked like:

/* Broadcom BCM20702A0 */
    { USB_DEVICE(0x0b05, 0x17b5) },
    { USB_DEVICE(0x0b05, 0x17cb) },
    { USB_DEVICE(0x04ca, 0x2003) },
    { USB_DEVICE(0x0489, 0xe042) },
    { USB_DEVICE(0x13d3, 0x3388), .driver_info = BTUSB_BCM_PATCHRAM },
    { USB_DEVICE(0x13d3, 0x3389), .driver_info = BTUSB_BCM_PATCHRAM },
    { USB_DEVICE(0x413c, 0x8197), .driver_info = BTUSB_BCM_PATCHRAM },
    { USB_DEVICE(0x413c, 0x8143), .driver_info = BTUSB_BCM_PATCHRAM },

and I changed it to:

/* Broadcom BCM20702A0 */
    { USB_DEVICE(0x0b05, 0x17b5) },
    { USB_DEVICE(0x0b05, 0x17cb) },
    { USB_DEVICE(0x0b05, 0x17cf) },
    { USB_DEVICE(0x04ca, 0x2003) },
    { USB_DEVICE(0x0489, 0xe042) },
    { USB_DEVICE(0x13d3, 0x3388), .driver_info = BTUSB_BCM_PATCHRAM },
    { USB_DEVICE(0x13d3, 0x3389), .driver_info = BTUSB_BCM_PATCHRAM },
    { USB_DEVICE(0x413c, 0x8197), .driver_info = BTUSB_BCM_PATCHRAM },
    { USB_DEVICE(0x413c, 0x8143), .driver_info = BTUSB_BCM_PATCHRAM },

Then:

cd ~/LINUX_SOURCE/linux-3.13.0
fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic
cd ~/LINUX_SOURCE
sudo dpkg -i linux*.deb
sudo reboot

This alone wasn't enough to get things working, and shortly after getting to this point, I found this topic. After reading through it I headed over to:

http://support.asus.com/download.aspx?S … Jz1yusKO7u

Downloaded the latest bluetooth drivers, opened up bcbtums-win7x64-brcm.inf, searched for '17cf', found the relevant section, which referenced the file:

BCM20702A1_001.002.014.1443.1469.hex

I found this file in the bluetooth drivers for Windows that I just downloaded from support.asus.com, the contents were:

:020000040009F1
:280000000108006999994204204EB1FD0400FFFFFFFF4006000000A0027020020A00280009000000000000001D
:FB002800411A0042726F6164636F6D20426C7565746F6F74682044657669636500980100035C0100017206000300000800019304002400000068040012000C006A3600030011000000B0000000A0000000420000005310080480000000900000006200000072000000C0000000D000000022000000320000007C04000100000209080068000F00030000006F210002331F05CF000000AA147F8C00AA00800A9200000000140000000000006C584E6CA1040000000080690200BD055D0C000A64E6B000008898425A33435F09003C280100040004F70C0A6F0098160800C600F3025D0066033000C900E10268005C033600C300E2026A0053033C00C200E10254
:FB0123006C004E034100C500D60272004A034300C300CE02790042034800C500C00283003A034E00C800BF0282003B034E00C900BC028400370352000808070707070707060606060505050502C05C0194FC0E00FFFF00005E02000030FC0E00FFFF0F006304000000FD0E00FFFF0F006802000088FC0E00FFFF0000000200002CFC0E00FFFF00004904000070FC0E00FFFF00000B09000074FC0E00FFFF00002E010000D8FF0E00FFFF000062190000D0FC0E00FFFF000020C90000C8FC0E00FFFF000038850000DCFC0E00FFFF00001CC80000CCFD0E00FFFF0000048000005CFC0E00FFFF00000200000020FC0E00FFFF000019210000E0FC0E00008000EE
:FB021E000000000000C0FC0E00FFFF000022000000948F0800FFFFFFFF00100010988F0800FFFF0000001000009C8F080000FFFFFF00040404CCFC0E00FFFF00002B45000078000F00FF0000FF0500000030010F00FF000000050000008C000F0000F0FF0F0000800034010F000F000000070000001C010F000000FF000000250074000F00000000FF000000300C010F00000000FF00000030B0010800FF0000000500000068000F00FFFF000003000000D07B0001040A08FC0E00FFFF00002E3600000CFC0E00FFFF00002CAE000010FC0E00FFFF00002AAC000014FC0E00FFFF0000A222000018FC0E00FFFF00001D2000001CFC0E00FFFF00000D15000007
:FB03190020FC0E00FFFF0000858D000024FC0E00FFFF00008311000028FC0E00FFFF00000001000098FF0E00FFFF00003E410000C3180012691418310870047836047430607180764A3108290B7E07CF0900100F0C6EF0B009F060D10900010403036B1420206B1A2400FF0108080410000EFC0CF80AF408F006EC04E8020410000EFC0CF80AF408F006EC04E8020301000182D600040602020A233C5A6E7D80008000800080008000800080028002800280028002800214FF18880AFF610000000000000000000000000014FF18820AFF610000000000000000000000000014FF18000AFF610000000000000000000000000014FF18080AFF610000000000D2
:FB041400000000000000000014FF180B0AFF610000000000000000000000000014FF18100AFF610000000000000000000000000040FFFF68027B0000000040FFFF68027B0000000040FFFF68027B0000000040FFFF68027B0000000040FFFF69027B0000000040FFFF69027B0000000082D600FF0602020A233C5A6E7D80008000800080008000800080028002800280028002800214FF18880AFF200000000000000000000000000014FF18820AFF430000000000000000000000000014FF18000AFF660000000000000000000000000014FF18080AFF660000000000000000000000000014FF180B0AFF430000000000000000000000000014FF18100AFFE2
:FB050F00200000000000000000000000000041000000007B0000000041000000007B0000000041000000007B0000000041000000007B0000000041000000007B0000000041000000007B000000008612000413004008000040130001000180FF000113C15E0044041422A244041422A23B04B104B204B304B404B504B604B704B804B904BA04BB04BC04BD04BE04BF04C004C104C204C304C404C504C604C704C804C904CA04CB04CC04CD04CE04CF04D004D104D204D304D404D504D604D704D8280C000B0400143A09000B0400043B09000B04004C3D0900081D00005018010082F002FD0E005842090030B4201CFFF7C8FF30BC7DF704FB0819000108658F
:FB060A0001007DF0ADFE0A0066420900FFF7A7FF82F767F9000008250002B0DB010077F03AFD160028560900281CFEF72BFE281C5F3000210170391C321D88F7BBFA080F000384E0000030BD00B50000000000000817000488E0000086F0AEF90800E843090000F002F800BD0000081D0005C46200008EF0BFFB0E00464A090001B4FFF769FF01BC71F743FC000008150006586600008EF0F2F90600404A0900FFF796FF30BD0B0400E64B0900081F00074848000090F07EFD100048530900A56498231D53201C00F002F86FF77BFA0B0400104C090008150008C08400008CF000FF0600C4520900FFF7A6FF30BD08350009B47702006DF089FD2600CA5209DA
:FB0705000002B421684907002905D061684907C90F301C92F7F1FB02BC002902D0F06992F766FA92F768FA080F000A24B500000FE0C046000000000000080F000BC44F000010E0C0460000000000000867000C1CF0030056F068F95800F052090070B5061C0C1C151C002B21D104A8008840281DD105A80088202819D15A2917D8081C15D005F0CAFC002811D1032D0FD02204121408210748002305F0C7FC002806D1221C291C301CA9F72FFF012000E0002070BD18650800080F000D988000005808042B0000000000000817000E680C040054F086FB08007853090000F002F870BD00000819000F64D4000088F00AF80A007C540900281CFEF77FFE78F7C9
:FB08000004F80813001008D6000087F03DFF04008654090078F7C2F8080F001180DA0000C046C046000000000000081500122452000090F031F906008A54090000F001F8F0BD0B0400EC55090008190013845C02006FF0DBFC0A003E5609009B005859EF1890F720FB0817001464F8000085F0F0FE08004856090000F002F8F0BD0000081700153CF5000086F0F0F808002057090000F002F830BD0000082F0016C4F6010076F06AF820009C570900054B30B4054CE57949190C06211630BC195489F78BFFC046903408008C03080008170017487C02006DF0B8FD0800BC57090000F002F870BD0000082B0018D4BA000089F0AEFE1C00345809000AB4201C02
:FB08FB00311C00F009F80ABC012803D0042B01D176F746F976F747F9081F00192CF0000086F01DFC10006A58090001B484F723FB01BC00F024F879F7DBFB0825001AE4A203005BF0C9FA16007A580900002803D000F007F8002802D10120A4F758FDA4F72EFD0817001BC06A02006EF006FF0800D058090000F002F830BD00000823001CC47202006EF0A4FB1400105A090008B4301C0122012300F004F808BC91F755FC00000817001D2C6A01007FF0CEF80800CC5B0900FFF7DDFF00BD0000080F001E587B02006EF050F80000FC5B0900087B001F0C7702006EF098FA6C00405C0900F0B5061C0F1C93300078002803D00B795B08072B24D17CF7F8FE049C
:FB09F6001C0C301422391D051CBEF78EFE7268002A03D0291C301CC5F71DFE3368E3770023A37709490868002804D00368236004600C6001E00C6024600121890403480022B7F7F0FDF0BDC046ECC40800FC4408000815002098AE02006AF008FF0600AC5C090000F00AF870BD081700210C13010084F0D1FC0800B25C090000F035F87BF72CFB08190022FCBE020069F0DDFE0A00BA5C0900281C00F03BF896F721F908230023B47102006EF0CAFD14004C5D090002D0E86991F732FA281C211C00F002F891F744FA081F00249C6E02006EF074FF1000885D09000FB4201C00F004F80FBC91F787F80000081300251CF0000086F0C8FE0400B05D090079F73F
:FB0AF1003BF9081700262453000090F0F0FD0800085F0900FFF75AFF30BD0000920600A3008000141908270027A06D020071F0FAFB1800988509000198311C3A1CFFF7C1FFFF2801D18EF713FC8EF7A8FC0000080F002834C40100C046201C000000000000081700295845020073F0FCFE080054830900FDF73BFF8CF739F90817002A6847020071F057FC08001A60090000F0AFFB8EF7B2FB0817002B7854020072F058FF08002C830900FFF737FA8DF7B3F80817002C0C57020072F012FE080034830900FFF760FA8DF736FA0817002D4C58020072F076FD08003C830900FFF706FF8DF79DFB0817002E5C46020073F07EFE08005C830900FDF7E6FE8CF744
:FB0BEC008BF90817002F34AE01007DF04AFB0800CC84090002B0FFF757FF70BD08170030086E000091F09CFA080044830900FFF7D3FB6EF79AFD08170031B8AC02006DF022FC080000850900FEF790F892F710FC08170032884B020071F04BFA08002260090000F04FFC8EF7DDFD08170033C449020071F031FB08002A60090000F06FFD8EF7CFFC08170034202E010083F007F908003260090002F0D3F87CF716FF08230035BC65010082F02CF81400188609000FB5201CFFF7D4FF0FBD37490B687DF7CBFF0000082B00363CBB02006CF0E4FC1C00088509000FB4201C311CFEF7E4F8002802D00FBC93F71AFB0FBC93F71AFB000008170037A46301007FF2
:FB0CE700F035FE08001260090000F0EAFE80F7D2F9081D003808F0000086F0F4FF0E00F45F09000FB4201C00F0A8FD0FBC79F70CF8081F00396CE8000087F0C9FB1000026009000FB4381C00F0A1FD0FBC3C1C78F737FC0817003AB473020070F0CAFF08004C830900FFF701FD8FF7C1F80815003B2C6B01007FF085FA06003A60090002F0F8F830BD0817003CD0ED000087F036F908004060090002F011F978F708FF082B003D1871010081F024F91C00648309000FB4FFF7D2FF002803D00FBC00207EF71EFF0FBC041C436B7EF7CEFE087F013EA444000094F0CAF970013C88090000B528490B6826490B6024490B6822490B601E490B682D490B60434B79
:FB0DE20043490B6034490B680120C00303430B6040490B78002B04D02F490B68400303430B602D4A13685B085B0013603A4B3B4A1360B0F766FDB1F78FF9B1F7DEFCB1F784FE0D21364802F02DFA364A9068002803D098F78FFEB0F72BFC2448244A11684160244A60E0C046C0B00800FFF2011AA8AF0900848FB002D08B0E00A0800E00A8B00900148B0E00ACB009006CE50500B0B009008C15080023870900538709002D880900A9870900158809005C000F0094830E00FF00FFFF608B0E0040230001E08A0E00E02C0800A4860E0088B2080005000080850000801C800E0014800E00848F080004830E00108B0E00C8FC0E00C42C0800CC2C0800D02C0825
:FB0EDD0000C82C0800D42C0800D4FF0E00BC8B0E00AD020000CC8B0E001CCD080010325476D48B0E00009D0800ECCC080011684161054A11688160054A13680360044A1368044A136000BDC046D02C0800C82C0800D42C0800D4FF0E000861003F0044000094F014F952002C86090010B5A448002383700423437001230370A14BA2480360A24BA24C2360A24C2368A24C2360A24C2368A24C23602C22A249A248BCF791F9A148A14C2060A149C160A1494162A1490161A14B8361A14BC36110BD080F0040D0B80400A5F809E00000000000000817004120BA04004DF084FA08002C8F0900FFF7D4FF30BD0000081700423069040052F008FC08004491090054
:FB0FD800FFF7C4FFADF710FC08190043545D040053F0FAF90A004C910900B3F788FEFFF7B2FF30BD08190044E0A504004EF0B9FD0A005691090000F003F803B0F0BD000008170045E882040050F088FF0800FC91090000F002F830BD000008170046B0B104004EF0A2F80800F892090000F002F830BD0000082B0047DCC004004DF06EF91C00BC930900FF233D3343430448C0189F300078002800D101207047C046349D0800081B004894AC04004EF0AAFB0C00EC930900201C00F003F8B1F752FC0000081B0049ACAC04004EF0EAFB0C0084940900201C00F003F8B1F712FC00000823004A3CC104004DF04CF91400D893090029187F231B02FF339D42003B
:FB10D300D35D1EFF23B2F7AAFE0817004B981B030067F0ECFC080074950900FFF7D2FF30BD0000082B004C1C7B040051F046FD1C00AC95090004910FB4301CFFF7E3FF012802D10FBC05B0F0BD0FBC062DAEF7ACFA081F004D18AC04004EF012FD10004096090003D1FFF7C1FFB1F7EAFAB1F7E9FA0000080F004E1C730400C046C0460000000000000817004F807A040051F0ACFE0800DC9709000420AEF75AFD10BD081700509882040051F0A4FA0800E4970900FFF7CAFF30BD0000081700516CA804004FF072F8080054990900FFF74AFFF0BD00000815005294A304004FF07EFC0600949C0900FFF7E8FF10BD080F00530CA3040000F01DF80000000030
:FB11CE000000082300544894000090F027FC14009A9C0900012B02D10020287001E06FF7DCFB62686FF718FC081D0055A4CC04004DF003F80E00AE9C09002878B1F779FF201C00F001F830BD080F0056C4A904005E4A2068000000000000080F0057A4630400FE23F533000000000000081F0058D472000092F0FCFC1000D09C0900301C049900F004F8009988426DF7FCFA081700599897040050F0C8FA08002C9D0900FFF79FFEF0BD00000817005AE49D040050F088F90800F8A0090000F002F8F0BD00000815005BD099010080F0DCFC06008CA30900FFF7B2FF00BD0815005C68E901007BF013FD060092A30900FFF7C2FF00BD0821005DA4E901007B1E
:FB12C900F0F8FC120098A309000FB4301CFFF7C6FF0FBC0A22311C84F7FFFA0825005EE896040050F05FFE1600AAA30900281C00F008F8237E002B01D0AFF79AF9AFF7AAF900000817005F70EF00008BF07CFA08006CA40900FFF7C2FF74F784FD081D0060645F040054F086FA0E0074A40900607D01386075FFF7C7FFABF774FD0817006114FF00008AF0B5FA080082A40900FFF7E2FF75F74AFD08290062D07E000092F0DBFA1A008AA4090009D5281C112806D0082804D0002087F712FD6BF726FF30BD000008170063EC6B040053F09CFC080028A50900FFF7BCFF10BD0000087700647461030064F0DCF9680030A5090010B500248BF7C4FD012803D3B5
:FB13C40009D0022820D102E09EF70EFA01E0A3F776FD041C18E00D490B78002B14D00C4A106803680B4A13600B4A1378002B0BD08B784978002B03D04B00FF21013101E04B00802199400160201C10BD481B0800E40A0800AC5808003A010800080F00657C640200131C036000000000000008570066B462020074F070F9480098A5090000B50D490868002804D003280FD0052811D104E009480378002B0CD007E0084B18680122002199F7E0F89BF7B2FC05490B680120186000BDB0C80800D1CA0800F40A0800E40A0800081B0067C0B903005EF00EFE0C00E0A50900211C00F00BF8061CA1F7EEF9081F0068B49D030060F01AFC1000ECA5090002B40008
:FB14BF00F015F802BC0C68E3069FF7DEFB081900697847000096F0EAF80A0050A90900381CF9F711FA69F712FF0819006AAC47000096F0D5F80A005AA90900281CF9F72AFA69F72BFF081B006B3CDB00008CF012FF0C0064A9090081B000F003F873F74CF900000827006C405B010084F086FD180050A60900002E02D00020E05504E0E35D002B01D0013BE3557BF785FA081B006D50A704004FF00AF80C0068970900381CFFF7E7F902B0B0F7F0FF0817006E58A704004FF00CF8080074970900FFF705FAB0F7FDFF0821006FB03C010086F0D4FE12005CAA090001B4301C00F010F801BC74F72DFB79F723F9081D00705CB503005FF087FA0E006EAA0900E3
:FB15BA0001B400F00FF820BC6B01A0F772FD08170071A8A0030060F0E8FC08007CAA090000F015F89FF72EFB082B0072CCB203005FF004FC1C00D8AA09001378002B07D103B400F008F8012803BC01D1A0F7F2FBA0F7FCFB0000081B007374B403005FF04AFB0C000CAB090000232B7500F02CF8A0F7B0FC081D00741C69020074F0FCF80E0018AB090003D100F027F8A1F763FE8BF7FEFE0827007530BB03005EF0F9FF180026AB0900012D03D1002E01D100F05BF8A068A1F77EFD0021A0F7FCFF082700760862020074F099FC18003EAB0900201C08B4019900F01BF808BC9C4201D08BF75DFB8BF767FB082500779CBC03005EF05BFF160056AB09001B9D
:6416B5000705D400F049F8002801D1A1F79DF8A1F7C8F800000A05002DCB080001081B007830AB030060F068F80C0004AC090005B400F003F805BC9FF792FF0817007998C803005EF0CCF9080034AC090000F002F8A1F756FE5B0900FD0344042804080803FE0000F9
:FB38E000F0B5514C514B52480360524B52480360524B5348036002F00BFBFF232D335148038000F0B5FC00F069FA00F019FC00234D48037000F074FB00F086FB05F0FEF84A4A151CE4354A4B2B604A4E336802263343484E33604848036880218B4303600023464E337046490B1C2333454E3360454B464E3360464B464E33600B1C1233454E3360454B464E33604648464B474E3360031C0E33464E33601223454E33700B1C1133444E3360444B454E3360454B454E3360454E3160454B464E3360464E3368464E3360464B464E3360464B6B67464B061C071DC8C40E36454FC8C4991C0E30061CC2C4434BD3620023424E336006F03AF9414B6B65E4209F4C
:FB39DB00F743FC0007000F042805D13F20C0433D4A5073000A907300233B490B703B48E8623B490B683B490B6002F0F0F800233A490B70F0BC08BC184700B538483849086038480B49C86400F0A1F900BD2CAE0900BD420900BCC80800D1420900F0C40800B94209000CC508008002080081B10900A0190800114409006C010F0040150800FD0708001E45000098AE090020C900009CAE09001CC80000A0AE0900A4AE090038850000A8AE09005E04000044050000881308008C13080090130800781308000EC90000801308000AC800007C130800841308002685000074130800D8FF0E00ACAE090062160000B0AE0900C54909004205000062190000519683
:FB3AD600090094AE090085570900B813080020B1090041A2090028FC0E00E803080021B10900E138090090000800B155090070B500200F49104B4B6114E06B099C00EB06DB0E01259D400B592B430B5143004C69C50052195268012632432725AD03AA1A1A530130054AC3009D58922DE5D370BDC0464C1B08000CB109001CAD0900002070470020704700B5002812D0AC231A581204D20E0F290ED1012A03D0042A01D0062A02D178F70BF803E0002A01D0032A01D1012000E0002008BC184700000020704710B5037814490B700620AAF739FE041E10D00E230370042343700023437101238370F723C370FC230371AAF753FE201CAAF72AFE012010BC089E
:FB3BD100BC18478105890D030AFC201840FC2803D1F72901D1034800E000207047C04620B10900993B090004280AD106480378002B06D0054803785B065B0E0370012000E000207047C04620B1090039C3080030B582781202437813439A05920D1B0AFC252B400C2B0CD1032A03D01A2A00D080E003E006F045FD01207CE002F078FC78E00124FC2B63D1342A49D0B52A20D0B62A21D0C22A22D0C32A23D0C62A66D32CD0C82A2DD32FD0CB2A30D9D02A1FD0E62A0BD0F52A18D0FA2A1CD0FF2302339A4227D003339A4251D126E004F086FE4EE002F0BFFACFE702F0F6FACCE702F032FBC9E702F072FBC6E702F0DBFBC3E702F09AFBC0E702F000FCBDE7D4
:FB3CCC0006F037FDBAE706F071FDB7E706F0AEFDB4E797F7A7FDB1E704F064FCAEE702F02AFCABE718490869C00122D5174A106920431061101C117D8B0706D5FD231940017500207EF74BF813E0002103207DF7A8FF0EE0202B0FD0042B0DD1132A02D0192A06D102E002F025FC03E002F03AFC00E00024201C00E0002030BC08BC1847034804490860704754200800CC2F0800213C090018C90800002070470148024988607047653D0900201A080030B5051C7BF7A2F9041C281C8BF731FA8749201C2830062206F07CFF00280BD1844C2560012363717F21C943A01D072206F078FF00232371002030BD10B5041C0120A040C1437C4803680B4003608A80
:FB3DC700F765F978480368A34203D1FF2303600023437110BD75487649C8607047F0B583B0041C012906D164300023C372251C9435AB73EB736F4803689B079B0F032B02D072F770FAC8E00023A381E07B484000D1B6E071F70BFD002803D1674803691B0101D5012100E00021271C64373E1CFB6880208343C8010343F3600C365F4A1078431006D0C3071B0E31688020814319433160594803691B0102D4381C95F7E8F9BB69002B02D03B681B063BD4338868460380E37B012B0DD0251C94356B7B002B10D02B88042B0DD3EB7C022B0AD3AB7D002B07D1A72303201855009B78208343002106E00121E974009B78208343082003431F2080028343880236
:FB3EC200034300931B041B0C3F4A1360012030723B4A13691B0152D400984006010F00231A1C012095F7C8FB45E0E07B002802D1A72301221A55012804D1E37C042B01D073F7BBFCF37A002B06D00023F372336801204002434033600121B172251C9435A97326480369DB0002D5201C88F7CBFD338824490B60B0884860381C71F7EBFC30684006030F2048C05C3072431EA381E37B002B0FD10121387F81401C4A1068084008D1E37C042B05D019480378AB7519480378EB75114803691B010FD5201C95F721FF0BE0271C64373B727B7271F779FC636C002B02D05A231B5BA38103B0F0BC08BC184709C10800B4AE090000040800E53D090000020800181E
:FB3FBD008B0E0054200800DCC80800CC8A0E009EBB0500B4010800F5010800F601080030B50D1C041C76F7BFFE6B075B0F012B05D1E37B002B02D1A07B9DF7FEFD30BC08BC184700B52C2204490548C0F7BCFC034804494161044B186000BD0CBD0500C4AE0900DD3F0900E402080010B53F4C3F4B1C602C223F49201CC0F7A5FC3E48606210BDF0B5041C051C876A28353B4B42331878002866D1201C012173F719FA061E4BDD022804DB201C78F793FA002859D1618C8B1F9E4223DA304A13689C420BD0391CAB310878013800D30870731C5910201C78F720F830E0731C5810E37B002B05D07B6C002B02D06B7F002B25D02F89B84222D36A89002A06D1AE
:FB40B800A389002B03D1201C72F727FE18E0BA4200DA3A1C904201D90C2310E04B23A27C1B5D9A420CD102280AD36B7F002B05D014480378994201D9282300E03823A374211C4D31087800280FD00238087000060BD1E37B012B02D0237D0C2B05D0321C201C0523022178F77CF9F0BC08BC1847F0AE09000003080074BD0500414009006C210800F402080000B52C2216491748C0F71CFC1548164B18601649016100BD30B50D1C041C79F764F8022D09D16B23185D002805D0201C88F74DFB201C88F785FB30BC08BC184700B5011C6831CB78002B07D04B7A002B04D18B78002B01D088F75CFB00BDC0462CBE05001CAF0900300308005941090000B57D73
:A541B300F79AFA00BD10B5041C031C9A3313201870E3691B06DB0E0A2B03D10A21201C7CF774FA201C82F749FA201C82F774FB201C82F760FA20687AF7BCFE10BD30B5011C2831041C7AF7CBFC051C1ED0F82043595B0703D5281C02F06CFC06E0EB699B021AD40E490B681B0403D5281CFFF7CAFF12E0E369834310200343E36199230B201855201C82F751F906E05023044988881853201C93F7C6FB30BDC0468C070800D420080027
:FB42700000B52C220B490C48C0F784FB0A4B0B48036000BD0A49CB6ADB0007D5094AD3885B00418C8B4201DC012100E000215A3001707047B0CB050048AF0900F4030800542008009420080000207047087B4008072801D10148886000207047355B090030B5041C002964D0012953D140051BD421E0344D291C3448B8F7A9FF2988281C262902D104F015FF0EE0042902D17DF7F4F909E00F2902D105F014FD04E089002A4A8958C7F7CFFA2748B8F7A8FF0028DFD0274B1C4020020AD57BF7D1FE0121C905244800230122B8F769FF224B1C4020042ED521490868037921490B7000230371B3F710FF7AF79DFE002803D11D48437D002B09D01C487BF7CF36
:7D436B00FE82F718F81321162006F056F801E07BF786FE174B1C400EE002290CD1C00308D510490878012804D10D490B681871B3F7E1FE7CF774FF201C30BC08BC18470D480D4908607047C046F4440800284508009CBE0500FFFBFFFFFC440800FFFF7FFFC04F080021B10900E44E08001C450800FF7FFFFFD1420900F0C4080009
:FB43F00000B5431E04490B6004490B78032B01D1C0F782FF00BDC046E08A0E0038080800F0B587B0061C0491081C00210391A34C2064211C4431009100238B70A0488568002D00D16EE2AB7D002B09D0012203920023AB756361237810208343237006E06069002803D0012E01D971F79BFE22691D27FF03002A50D0607A012803D19389002B4AD047E08F4B1B5C002B43D1BB68DB0742D4137D092B3DD204281AD1012E18D196756261237810200343237023683B6085490B687233187802282DD0002382490B608249086882490B6803600B68036022E002280AD1012E08D196756261237810200343237023683B6015E0032803D179498B78022B0FD0067A
:FB44EB002801D0032805D1012E03D1BB689B0600D5C0E1122803D0102801D071F7C5FD6A4B985D029000287DD00123DB07334301936B4B6C490868986301236B490B606B490B689B0C9B040B600B6869490868034366490B6001230099CB7066490B6866490B6066490B6866490B60287C1A281DD164490B6864490B6064490B6864490B6064490B6864490B6064490B6864490B6064490B6864490B6064490B6850490B60634908686349086063492DE063490B6855490B6062490B6855490B6061490B6855490B6060490B6855490B605F490B6855490B6019280ED1FF2017302B562A3309DD5B490B683E490B605A49086851490860594908E059490B688A
:FB45E60039490B60584908684C4908605749086857490860A87B2318042801D3187800E0205C6F2290431870C2E0A87B225C0F218A433107090F0A43225423180428049802D38107101C01E081071878490E6022904308431870234B464908689863009AD378002B00D1A1E022490B689B0C9B040B600B684049086803431D490B600023D3703D490B681D490B603C490B681D490B603B490B681D490B603A490B6821490B6039490B681B490B6038490B681B490B6037490B681D490B6036490B6809490B6035496BE0642C08006C210800ECBB0500DC02080060000F00AC2C080044020800882B08002CFC0E0060020800E08A0E00B88A0E005C0208006CBE
:FB46E100130800D8FC0E0070130800E0FC0E0098AE0900CCFC0E00A0AE0900DCFC0E009CAE0900D0FC0E00A8AE0900C8FC0E00A4AE0900D4FF0E0044AE090048AE090030FC0E004CAE0900781308007C1308008013080074130800841308002CAE090030AE090034AE090038AE09003CAE090040AE0900D8FF0E00B82C080048020800BC2C0800C02C0800C42C0800C82C0800CC2C0800D02C0800D42C0800D82C0800DC2C080008689349086093490B6893490B60002101912868826A281C0021C7F787F8002810D026231A5C002A0CD08368002B09D00298002804D0802301981843019001E0012200E00022237880208343D001034323702020049908402A
:FB47DC0001D00120C0037F4908600499090704D47D490B68802083430B600499880801214140A27880208243C8010243A2702868826A281C0321C7F74DF874490B78012B01D077F7EDFF05A9714A13687020034018099DF73AF82369002B14D0637A032B11D189F79BFB002806D16A480368032B02D00368062B06D12B7C122B03D101230098837058E005988007800F06D003280ED1069B60490888834209D30398012800D1656171F708FC012300994B7043E00820B860A87B786223683B603B1C1833221D03929207920F02D1039909680FE00399891A0391D2000968D140049120218A1A03994968914001B40598014301BC1960BA69331C103B042B0D41
:FB48D700D2474B1340FF22013282401343BB61102E07D1444908684449086002E040481040B8610198002800D07861E5602672002300990B704B70281C8DF74FFC012007B0F0BC08BC1847394B3949087A185C39490B68002814D00120800303430B60364A136836480340364A117849020B43354A1360354A1368302083431020184308E0324803400B602C490B682E490B602E4908682F490860704710B5254C234B607A185C002802D071F7F9FE15E06069002801D071F703FC27490868637A012B01D1254A00E0254A13680360116801600023234A136071F70EFE002322490B60E3602361637244340120207010BD002803D10348036803480360002028
:6E49D200704730FC0E00ACAE0900D8FF0E00648B0E00A4860E00D4C1080024860E001C840E00E4B60800FFF0FFFF9406080064FC0E00ECBB0500642C0800808B0E00B02C0800FFC1FFFF9013080088FC0E00B42C0800FFBFFFFFCCFD0E00AC2C0800400208004402080060000F0018800E0023
:FB4A540070B582B0061C65480168890602D5022073F7B9FB624C2568A3682360002D26D0002E18D19FF78EF9002814D0C30703D52A68916900290BD1430703D52A68D169002905D1830706D52A68116A002902D0281CC6F706FF9FF792F9011C2A685269002A04D0002802D0281CC6F7F7FEA0680026A84218D0002D21D02A681269002A03D0281C0521C6F7E9FEAE8123699D4200D126612B7D092B11D3281C74F782FD281C74F707F90AE0002808D06369984205D166613B4800220121B8F7B7FE3A48C16E002904D0A368002B01D1C6F7C9FE71F750FBA06800284BD08681037D092B20D26369984205D166612E4800220121B8F79CFEA068A84206D101E8
:FB4B4F00684968002902D00523037508E0017D032901D0042905D101684968002901D0C6F7A2FEA0680223037501680A69002A02D00221C6F795FEA068807B1D4A136870210B401909884216D169469CF784FE71F7FAFB002801D0174800E01748028800998907890F04D0032905D1019B934202D33F2301201855A0688DF77AF901208DF78AF9A66066603C3426716671012002B070BC08BC18470948044988617047C046C4C408006C2108000C2D0800201A080024860E006602080064020800554A0900A248A3498865704700B5A24A9007800F01D1116808E0121AC0001368C3402021081A516881401943C90F9B4801709B4A1068002817D09A4A02603B
:FB4C4A009A4A82609A4AC2600123994A13700023994A1360994A1360994A1360012902D100F007F802E04068C6F71FFE08BC1847000000B500F003F808BC1847000010B564238F48037000238F4803608F4803608F4C236000F04FF8804A9007800F01D1116808E0121AC0001368C3402021081A51688140194301204007014015D084490B68001403430B6083490B68834803400B6004390B680120800303430B607F4B80490B6003037F490B606B4A9007800F01D1116808E0121AC0001368C3402021081A516881401943C90011D5774C2368002B02D0201CB8F79FFB7449201C00231A1CB8F77AFB72480168201CB8F780FB8FF7FCF910BD10B56F4C2395
:FB4D450068012423436D4C236001239B036C4C2360534A9007800F01D1116808E0121AC0001368C3402021081A516881401943090105D561480368022003435F480360604800218160F421C16020210161E8218161E9214161102141624021C161016205239B04036010BDF0B585B0061C0C1C554D021C002100910190031C02AF19C70F1C01235B02514C23604E4C2068000C000468602960049C242C02D0252C1FD102E008240A230AE070321278022A02D10824474A01E00124464A1178012322011B031A432A600B071B0D18436860F37B002B00D139E10122D20302436A6034E1049B5B003C481C5A3C498C4211D180239A5D3B48135C1B013A48181858
:FB4E40008388002B07D0364C1034837A012B06D1334C203403E0002C01D12C6017E1301C8DF72CFB002800D0402430480368002B07D0602C01D1E024B0E0702C0BD1D024ACE00498042801D0022804D12B680120000403432B60302C51D149E0194C0900A0190800C005080030C80800440608007D4C0900AD4D0900A1500900B805080034C8080038C808003CC80800D005080040C8080048C808004CC808009C800E0010800E00FFBFFFFFFF030000BC820E0010000C0068500800673D0200D405080070010F005C000F0074820E0034B109000C800E009806080090060800D8050800100100009005080024500800D4C408007023985D002802D0A74C70E3
:FB4F3B00344EE0502C0BD1336FDB052B6804D50120400403432B6043E0A1480340FAE79F4B30339C420DD101992031C87A002801D1071C31E00128FBD00228F9D003282BD1F6E7964B60339C4213D1039880304278002A01D1171C02E0022A00D10127837E012B00D10227437E012B00D103273B06D0E78A4B40339C4212D1029B28335879012801D0002800D1071C02990B8D58107F2801DC43062B603B062868184328602A6822437D4B70339C4203D023097D48C15C0091302C0BD17023985D002807D1301C2830037D807A19180906090E0091009803031A432A60F37B002B04D06B680120C00303436B60F37C032B06D1708CC306180F03026868184355
:FB5036006860402C28D169480378002B08D0301C8EF7B3FD03071A0A2B6813432B601BE00120C00410432860B07B9CF73BFC400860490860604A11689CF7CFFB5F4908605F490B68984204D2301C8EF776FD002802D00123564803702B68594803606B68436005B0F0BC08BC1847F0B582B00F1C051C0022009201908DF705FA514E002844D034684A48017800291AD1A87B9CF709FC4008474A1060474A11689CF79DFB464A1060464A1368984204D2281C8EF744FD00281BD001233D480370424B1C4015E06B6E1B0612D4012910D1281C8EF734FD00280BD1A87B9CF7E4FB4108354A11600023324A13700123DB041C432F480378002B03D001988DF76E56
:FB513100FE0090324B1C40009803071B0A1C433460042F01D0022F05D13368012109040B43012107E02B480378002B06D0336829490B40002133602648017002B0F0BC08BC18472549C37B002B04D1FF220632805C012806D108680002000A0122920602430A600B681848036070471C480378002B18D01448C16BCB0714D581691022114381610521C26BD20708D503680822134303600368934303600139F3D18169102291438161704710010000FFFFFDFF24060800B805080038C8080034C808003CC80800CC05080070820E00FFFFF7FFFFFF0FFF45C80800FFFFFEFF34B1090030C8080030B5041CC37C032B27D1037D0C2B24D11830437B002B20D1F5
:98522C0021490B699C4202D18B68002B13D0418900680B1858010509A07B9CF748FB854201D3281A03E0431B01200007C01A831F1648834205D3201C74F7C8F9201C73F756FE237D022B03D0032B01D0042B07D10F480379002B16D0201C71F79FFC12E00C480369002B02D0201C70F734FF06494123585C012804D0002804D10B689C4201D173F7C2F930BD6C210800FBFFFF07A42C0800642C0800A5
:20535800A823195C002903D0011C64318B8ECB86011CC36F6431002B01D08B8E0B8770479B
:FB53800070B5041C00253848436912219B0708D5364A1068364A106050304079122800D8011C43209DF750FF324BA360324B2361201C0830ABF7F1FD2168086063681D60ABF75AFE201C1030ABF7E7FD216808600420ABF769FE6061062801DAABF74CFE201C0830ABF7D9FD216808606368002018600420ABF758FEE060201C1030ABF7CCFD216808606368002018600420ABF74BFE6061E368C61A301CABF79BFE042817DD01350C2D14D0301C042E08DDABF791FE8100081A2169081802382061CFE7ABF788FE8100081AA168081A0230A060C6E7A16820690B1AE3614018C30F18184310236270BDC046181B0800D4CC08003CB10900FF03000001FCFF9C
:01547B00FF31
:FB549000F0B5444D2B68987B9CF71FFA46082B68996C301C9CF7B4F9041C2868011C94314A88002A10D094420ED9037D0B2B0BD00D2B09D071F783FA2B686433197F012000037BF755FF64E00B7D002B06D0CB88F31A1B041B0C9C4200D81C1CC36F6430002B06D00B89F31A1B041B0C9C4200D81C1C8A88B31A1A04120C944200D8141C0B881F1FBA4204D3CB7C022B01D30023CB74214E33889C4204D80020BA422ED303202CE073889C4201D8042228E0B3889C420BD9007F75F7A5FD002814D0037C112B11D115494B889C4203D829689431052215E08B889C420DD82968943106224A745E2383740CE0F3889C4203D829689431062204E029689431077D
:9D558B002200E0021C4A740B7E012B04D1531F012B01D804234B74F0BDB421080034020800EC02080010B5A4F7B7FA0B494B699B070FD50A48036801200343084803600A249CF734FC013CFBD1044803685B085B00036010BC08BC1847181B0800F0FC0E0010B5094C2C220949201CBFF7C5F90849E160084B1C6010BDC27B4A4002D0838C05490B607047C04640B1090034CC05000556090010040800CC8A0E00FB
:D0565000F0B581B0041C00210091C56D8726F600002D04D1301C9BF78AFF051E03D0301C9BF785FF0090264F3B68002B08D1301C08309BF77CFF3860311C0831BFF79CFC20480368002B0DD1301C08309BF76FFF1C4A1060311C0831BFF78EFC19480368002B07D03B68002B04D0002D02D00098002817D1E02300201851E565E4210B59DB0208D46358104803430B515022206807217EF7BAF90D480368002B0DD19BF752FF0AE0E5656060E4221359064883431351206807217EF7C9F9002001B0F0BD444408009C4408000000100060030800B7
:7457280030B5E4221358012109058B431350051C7AF70EF90024002800D0EC65E86D002802D09BF73FFFEC656868002802D09BF739FF6C60074D2868002802D09BF732FF2C60054D2868002802D09BF72BFF2C6030BDC046444408009C44080000231360012805D10123DB040B6007239B03136070470000CF
:7057C400B0B503685B011948C21880270F404906490E9068002827D00568281C041C002F06D0437B8B4201D0002300E0012306E0037B5B088B4201D0002300E00123002B0FD0A84205D1137C002B02D1D37F022B0AD0111C08319CF7A0FC201C9BF78EFE02E00068A842D9D1B0BDC0467C290800D9
:1A58500010B5002907D0041C71F77CF8201C6EF7E7FF012000E0081C10BD04
:4058900000B50D48B7F7EBFC00BD30B5051C00240A49A300C818C378AB4204D1A300C8180421BFF789FB0134082CF1D330BD00B50068FFF7EAFF00BDB85208005047080019
:FB58D80030B5104D0D24281C0022111C91F704F9281C91F7F7F82035013CF4D130236343094818182C23195C022904D1406A002801D09BF75FFE0134022CEFD391F7ACF830BDC0467C29080080590800F0B582B0051C0E1C041CB0346946207B9BF7B7FF2C482D4A1178431AF6000198991940182A4B984201D3032005E00121284B984200D30221081C009943185808031D5808860176092188301C9BF74EFF6788391C78F7CAF9381A4308AB80831958014009A0601422291C1B4805F09CF902B0F0BD10B5041C184908680007000F01280BD80B683F2000020340190A144A906EFFF7B5FF134A9378A37410BC08BC184710B5041CB3F79BFF0F498B7800C5
:3D59D3002B07D1A37C0B498878834202D0201CB4F76BFD10BC08BC18470E02000050AE0900A90300007102000000980E00A88B0E0038B0080074150800AC210800D9
:FB5A2400F0B584B0061C181C01AB07C300252C1C05F052F900902F1C0199002918D0F37F022B15D1337C351C002B01D00C3500E008352A68101E00D01068002A07D01168914201D12C6001E00B6813600C6014E0357412E00A6801928A4201D1F76001E013680B6001990F60002C04D0236813602260141C01E0141C1260F1680029E9D115E01A680193111C9A4201D1B76004E0136801B40298036001BC0F60002C04D0236813602260141C01E0141C1260B368002BE6D1002D0BD02A68002A05D0136803602B681860286007E02860006004E0F37F022B01D10323F377009805F0F4F812E02068051CA04201D1002401E0036823602F600399002904D00215
:AD5B1F009900229DF715FD01E09BF70AFD002CEAD104B0F0BD00B591F719FF08BC1847000070B5C369DB021AD5061C041C9034E278002A16D1002914D180F737FE051CB66C002E0BD0A0880C214843124941431248BFF744FB011C301CB7F75FFCE570012000E0002070BC08BC184700B50B48072105F0B4F80A48B7F764FC0A4A1368002B00D00123002B01D075F772F88B230648036000BD71020000D43000002C2D080020C50800EC2F0800EC8A0E00EC
:6C5BD40000B50121C90505480022B7F74FFE08BC184700000248034948607047FC440800D55B09009C45080000F002F891F7C3FF10B5041C8168002917D00868002814D0037B5B08132B10D1E37F022B0DD10A688A4202D10023A36001E013680B60002313609BF783FC0323E37710BDE7
:885CC40070B5041C0E1CEC300068002807D5E069C00104D5211C3C31201C95F793FCE06940021AD5656C07232B70FF236B70AE70211C2831E81C0622BEF742FE00236364E069012189058843E061EC210859400040080851281C94F7DFFE70BDC169012292051143C161EC2319585A07114319507047C169032252051143C161EC2319585A0711431950704764
:285D600010B50C1C0368002B0AD190F749FF002806D00121207F8140024803688B43036010BDC0467429080010
:185D980010B5041C04F09EFFE369012189048B43E36104F09FFF10BD11
:FB5DB40000B5FFF7F1F908BC18470000F0B5464A464C21685368994203D000231370537051604348434DAB78022B0DD1CB7B012B0AD180235B5C5B013F4D5B19DB699B059B0F01D05B252AE065683C4E33682B4021D03B4F3B683B4F3E6833432B4003D1A5235B5C002B09D04B6E1B0606D51378082B03D201331370857810E0304F3B68304F3E6833432B4005D05378013353705378042B02D300231370537045780A1CA4325378002B03D0C35CAB4200D91D1C5379002B02D183799D4201D1042209E083789D4201D1132204E0012203799D4200D103220A741C4A13681B0700D5C57890235858013015D0887B9BF71CFD40082368903319689BF7B8FC00F8
:595EAF002805DB236890330021C943196004E010490878854200D2051C291C206871F70FFF0C4803782B200355F0BDC0466CB10900B42108002C020800882B08007C290800B4010800B8C40800742908008C070800F4010800FC0108009B
:E45F100000231C490B701C490B70FF2341331B490B601B481B4908601B481C4908601C481C4908601C4B1D490B601D4B1D490B601D4B1E490B601E4B1E494B601E4B1F490B601F4B1F490B601F4B20490B6000231F490B700323DB021E490B800123DB021D490B805A231D490B6000231C490B707047C04684AE090085AE09008CAE09008369090064C808008F67090068C80800AF60090054C808002B67090070C80800DD74090078C808007CAD0900B0060800D584090000020800FF6A090060C80800A8AD0900AC060800777109007CC8080077B1090064AE090066AE090074AF090022B1090066
:FB60480030B5041C7CF7FDFC011C021CE0690004C00F1073032353730C32664B186800090225800704D5F42003599B0700D5957000234B60201C91F798F930BD30B5041C0D1C7CF7DEFC5C494B681A7BD207D20F0273052343738573584A4260011C201C91F783F930BD10B5041C0321FFF7E6FF201C00F028FD10BC08BC184770B5041C7CF7BFFC011CE2691204D20F027304234373F8231D59837B0126B34335402B438373F8263559AD07ED0F0226B3436D002B4383730C30002A0CD1414A537815785B199578EB18D578EB181579EB185279D31800E00023C3703A484860201C91F744F970BDF0B5041C374D00232B70C0690004314A51683DD534484211
:FB614300780378D3188278D218C3789B180279D218407983181806000ECB7B834220D020686EF73EFB071C04F0B7FD061C381C6FF7C6FF012120688140264803688B430360301C04F0B1FD20686EF7FAFA2878224A1378984218D2013028708FF77DF913E08B7BD807C00F9B07DB0F590001436970201CFFF785FF07E0897B8B07DA0FC907C90F201C8EF740FCF0BD00B5406800280ED0F82319580A04520ED30708D50F4B13407F22520291435A021143F82211508EF776FB00BDC046641B0800F4440800B36A0900E85008007B6B090074B1090064000800B4C4080051AE0900FEFF000010B5041CB34A1068C00702D4112323702FE00123B04A137008792C
:FB623E000002C9780843191C78F7C6FC002810D0F82319580A04520ED30716D4012313437F22520291435A021143F8221150490701D51223DEE7A04B19684906490FF42212589207920F914201D00C23D2E7283401212170FFF7D9FE10BD70B5051C0C1C0123964A1370031C283301201870924A10684006400F02281FD101F07DFC00281BD020790002E1780843012178F784FC061E12D0F830006840070ED5002388480370FF2388480360611D87480622BEF74AFB8FF7D4F8002802D10C232B700AE0F82290590122920210430821884303221043F822905170BD30B50123784A13708B7B002B01D1122337E00C1C734DCB782868002B05D00121084328BA
:FB6339006000F0EFF907E00122904328607148036871490B40036070482379037063794370A3798370607A0002217A084340106B4A1060C0006880E07A0002A17A0843684A1080607B0002217B0843664A1080A37B664A1380E37B654A1370237C6548037030BD0123574A1370554A1168194081735A490B78C3734B7803748B7843745D4A1168090A8174554A11684900C174090A0175534A11884175090A8175524A1188C175090A017650490B88437650490B7883764F490B78C3760E23C370704730B5051C0C1C01233E4A1370031C28330120187001F0D3FB002818D0E01C78F77DFB002801D00B2312E0FF2337480360E11C37480622BEF7A9FA3149FB
:FB64340008684006400F022819D18FF72DF8002802D10C232B7012E0E01C78F761FBF82319588822114303239943F8231950A17A0902627A1143324A51405E30018030BD30B5051C041C01231F4A137008790002C9780843191C78F7A4FB002802D112232B7017E05C21095AA173090AE1730834F4300068211C08318A07920F01D1086006E00870000A4870000A8870000AC8700623EB7030BD00B501230B4A1370C878002806D0174A1370022100208EF75EFA06E014490870002313490B708FF70BF900BDC046641B080022B10900BDC1080088060800B7C10800301B0800CDFEFFFFA8060800900608007EAE09007CAE090068AE090084AE090085AE0936
:FB652F0000940608000633000078B10900BFC10800704730B5051C041C0123234A137008790002C9780843191C78F73DFB002802D112232B700BE05C21095AA173090AE173F83000684007C00F20740323EB7030BD30B5051C0C1C08790002C9780843012178F721FB002806D0F8300068400702D50C232B7003E0211C281C95F7DFFB30BD30B5041C0D1CC81C78F7ACFA002806D0F8210A58520702D50C23237003E0291C201C95F724FC30BD22B1090030B5041C0D1CFF20062194F7EEFA002807D016238370C470210A0171457194F76FFA30BD30B5041C0D1CFF20062194F7DCFA002807D018238370C470210A0171457194F75DFA30BDF0B582B0041CFC
:FB662A000F1C00230193081C78F747FD061CC069400409D56B4601AA311C4C31301C283097F7C4FD002831D0032094F7C3FA051E2CD0381C78F72AFEE8725C239F5B311C2831681D0622BEF788F92006000EA870EF703F0A2F7198218959C900C90F2973011C301C00F089FA012803D1281C9AF752FF0BE0281C94F71CFAAB78002B05D1194A506F012109048843506702B0F0BD10B5041CFF20052194F780FA002806D039238370C470210A017194F702FA10BD10B583B00C1C417AE0690004C00F88420DD0094B684603800723837002A84170074A6946201C82F71CFE002000E0012003B010BDC046D42008000B0800009B6A0100B6480368FF2103310B1C
:FB672500430360704710B5B34CB4490A68D00705D55006400F022801D1FFF7EDFFAF494888C310AE490B600023AE490B706378002B08D101236370AB49AC4800231A1CB6F75EFE02E0A948B6F779FE0023A848037010BC08BC1847704700B513225C300188002094F759FB00BDF0B583B00E1CA04D041C00F0E6F9F8210859C0075DD5002E55D0201C6EF79BF8E069F822904340221043E061F821085904218843F8210851201C91F755F9206800216EF7C3F82068002101F010FA8A480378002B0AD0E069000430D48C4A90798C4A1178014001D1002826D1F821085900050CD5E069000418D4864B69460B8007238B70854A201C82F791FD0EE0261C5C3616
:FB682000318800231A1C181C94F765FC30880021FFF7E6FE201C00F008FA00232B70724803707748037038E001232B70201C00F0FCF932E00859400502D4201CFFF78FFF201C78F77CFDE269012000068243E261E06C40004008F8210B596C4F3B40EC273D5901263607B5433D5108210B43F8273B5198273B59B3433B5103239B069843E0641204D20F301C002A01D1331500E080235F490B6079F701FA012003B0F0BC08BC184710B5041CF830006859490840F8210851400626D5E06900040CD48DF742FF206801218140CA4353490B6813400B606DF747FF19E050490B7850490878834210D2206801218140CA434A490B6813400B606DF736FF48480317
:FB691B0078013303708EF7BCFD2CE0002344480370E069000426D5211CF8310A6810060ED5101C0C218843F82210513F4A1168042094F7B2F9FF21201C00F062F912E0101C3A4A1040086008215C23185BFFF74AFEF822105904221043F82210510821201C7FF738FD10BD70B5041C244D03685B012F48C618E069000403D4201C00218EF79DF920687DF754F8201C00F0D1F8E0690006C00E0A2817D1012120688140254803688B430360201C75F766F8E069F821884340210843E061206884F789FB201CA030042104F08CF9E069F821884318210843E061F821085907212DE0301B080076B10900641B08009006080084AE0900F345020080AF090022B1C4
:FB6A1600090076B1090078AF090085AE09000B0800009B6A0100FFF5FFFFD4500800FFF7FFFFB4C4080074B1090051AE090088060800FFFBFFFF7C290800E4C70800084340218843F8210851206801218140CA439F490B6813400B606DF789FE211C301C012290F73AF8E069000402D42B78012B05D05C23185B0021FFF7A5FD01E000232B70F821085992490840F8210851201C82F764FD012070BC08BC184700B5011C1D2079F774F908BC1847000030B5051C89480378002B0AD0884C884A11688848BEF791FB011C201CB6F7ACFCA56030BD002808D0F8221158490704D5C169914340221143C161704700B58EF79BFD012008BC18470000704770B5063A
:FB6B11001C051CFC352C68002C0DD114209AF7F9FC2860002810D07449321C0023B6F779FC2C68002C08D0714A11686E48BEF75DFB011C201CB6F778FC70BD10B5041CFC342068002806D0B6F783FC20689AF7EFFC0023236010BD00B560480378002B02D05F48B6F775FC00BD10B5041CC16909040CD50068002101F038F85D4908788307DA0FC107C90F201C8DF757FF10BC08BC184710B5041C002935D1F830006880218843F8221051011C0007800F15D0081C0C218843504A1040F8221051400503D4201C002194F778FAE069000405D4201C28308EF7C9F88DF7BDFDF82210590104490E8B070FD5444A0A407F214902884351020843F82318511321A2
:FB6C0C005C342088FFF7F6FC012000E0002010BD10B5041C9A231954C0690006C00E0A2803D10B21201C79F744FD201C7FF747FE201C7FF733FD206878F78FF910BD10B582B0041CF83000682E490840F8210851E06900041CD48DF780FD98210859C00020D5E06C28498843E064284B69460B8003238B705C23185BC870000A01A9087001234B70224A6946201C82F751FB09E098210859C00003D5E06C1B498843E0648DF789FEA36B1B070AD5E069000407D418494B681B0503D5201C01218EF706F8E069012189058843C9018843E0619C340020207002B010BDB4C40800FFFDFFFF77B1090080AF090054AE0900D4300000D345020058AE090075B109F3
:FB6D070000FFF7FFFFFDFF0000FFFBFFFF0000000C13040000AB750100181B080070B5041E3CD0F83000680104490E4B0736D5000734D43448437E002B18D08069C0032DD58B070ED530480A1C0240F82319592F48814350020143195108215C23185BFFF74BFC0821201C7FF73FFB17E028480A1C0240F826315925488143500201433151251C5C3529880022101C94F7B0F928880021FFF731FC201CFFF753FF70BD10B582B0041C00230193C069C00819490840042814D16B4601AA211C4C31201C283097F705FA002806D0019B002B03D0201C7BF764FE03E0211C002078F7DFFF02B010BD10B50124201C78F768F9C1690906C90E022902D313217FF778
:FB6E0200F6FA01340B2CF1D910BD2C2D0800FDFF000000FE0000FBFF00001F10000070B5041C061C037D022B36D1807B9AF754FD251C1835A74A13685900884201D2091AA548401AA54A1368618C49005918884206D90123DB06984202D23723A3741BE0201C72F7EBFB002816D170363078042812D0A07B9AF730FD2B685900884201D2091A9448401A431F9548834204D201236B73201C6FF73CFF70BC08BC184730B5904A9049006843075B0D1078C407240D2343181C8D4D2B681B0418430860686800042B681B0C18434860507888600020C860012030BDB0B5041C837B844A13600123834A1360834D844A106878F761F92860686880210843686080F1
:FB6EFD00480168C94361674368A3672964A06F6904084368647C4AD07828627023185D022829D0042844D1784A1368180A4300D91C774A1160031F764A1360764A1160744A1368754A13600023754A1360606FA861A06FE86173484178CB0101781943807883030B4351070B436F4A13601021081C6EF716FE1CE04923684A13606B4A136880200343664A1360282112206EF708FE674A1368674803401360634A13685B065B0E802018430302614A106818431060614C0027E0577EF752FF03061B0E5E4D2868000A000218432860E0577EF747FF0006010C2868564A104008432860B0BD10B5041C00290AD1FFF777FF7034207804281ED152484379012B3F
:FB6FF8001AD115E002290DD1807B9AF76AFC80084000324908606D23185D77F738F80023A38109E0052907D100F0B1FB002803D18DF7D4FE00F04CFE10BC08BC184700B53049086878F742F8C2693F4B1968072399431A4011433C4A11602A490B680360C16901221205114352119143C161F822115804221143F822115000BD3348C3890360704710B5324C208A2189884203D36068884200D9081C208020882D4941431B4A1068000A0430BEF7ACF8E1690818294A10609FF7FCF9011C0320BEF7BEF8638A21898B4206D9E368984203D1411C0320BEF7B3F8E06010BDC04680AE0900000000108CAE0900FBFFFF0784AE0900B8890E0038800E0000830EF7
:FB70F3000098830E0000820E008C0608000C47080064000800940608009C060800A0060800108B0E00148B0E00A4860E00A8060800009A0E00E4500800648B0E00FF00FFFF9203080004830E00A42C0800ACAF090070AE09006CAE0900710200009C830E0002234377C368012149020B4380210B43C3600023C37503680B430360012383777047F0B5B24CB34E301C77F7C9FCB24D002802D0C16909040AD4012077F752FD2860FF2801D1002050E077F791FF01E003682B60C169F822914318221143C161F822115804221143F8221150311C28300622BDF7DDFB0123A0480360A0480370FFF74EFF0123E3749E4F3968201C6FF776FB2423237402236374A0
:FB71EE003523A374201C60300023037001234370002383702362286877F7D5FFA0730123E373211C6431301C8DF728FE286877F7CAFF211C64316FF7CAF9201C4030FFF792FF3968201C6FF75CFB002000F0CFFC0120F0BC08BC184710B5037D092B0ED1834C7E4A106877F7AEFF20606068802188436060794AD0782062FFF708FF10BC08BC184700B5002902D100F045FB16E0022907D1012376490B604030407F76F7FBFE0CE005290AD1002371490B6000F073FA002803D18DF796FD00F00EFD08BC1847000030B5041C051C61352878012803D102232B7051230FE002281ED165490B680120C004186064490B68002B09D0FFF7CDFE01232B703523A339
:FB72E90074201C6FF711FD0BE0201C6FF76BFB042355490B60980678F7DCFC012000F069FC30BC08BC184710B585B0041C1422E92109036846BDF731FB00984207520F21680723994311432160010A6170010CA170039B1B0609D4030EE37001982071010A6171000CA071062200E00222611C3B4803F097FC002801D0002000E0012005B010BD30B5041C6034A3780133A370051C6EF7C2FEA378281C032B13D90023A37037490B68002B08D16FF71CFB04232D490B60980678F78DFC08E0012363706FF7B3FC03E0022363706FF709FC30BD30B5051C041C60346378022B24D1294A1168043A1068CB0719D4430317D54A0315D50722D2040A4011D14306D5
:FB73E400180F03280FD18B05D80E11280BD11F48FFF78CFF002806D00023A3700323637004E0CB0702D4281CFFF7AEFF30BC08BC184710B5041C011C6131087803283ED10949086877F74CFE002821D00F4B1A68C169072399431A401143C16118E0C046C0AF0900B7C1080088060800D4500800BEC10800AC06080000820E00F0FC0E00AC2C080070AE09002C8B0E00ACAF09000223B04A1360D80678F71EFC211C6431AD487CF715F9AD4A106877F791FE211C64316FF791F8201C6FF797FA0CE0A84A1388002B08D1012806D102230B705123A374201C6FF72BFC10BC08BC1847A049037D022B07D14868431E00D34B600888013800D30880704730B59A92
:FB74DF004C9A4D2B68FF2B49D1002077F7A5FB2860FF2843D00123904A1360954A13700323E374944A1168201C6FF7E3F925232374022363743323A374201C70300423037000234380236323848B4A13685B006384242000230355286877F73CFEA0730023E373FFF778FD286877F7BCFD6C2103680B55C169E06D0722904311400843E065201C5030FFF7F6FD211C74317B488DF77CFC784A1168201C6FF7BAF9012030BC08BC1847F0B5021C73490D6874490B8859088D4200D8291C724F3B68C918041C7034668873438B4213D96B005384252101230B540423237033239374002363806FF7A7FB20235C480360D80578F776FB01E06FF79EFBF0BD30B539
:FB75DA00051C041C5B49086877F76FFD002808D0C1695E4A106807229043114008435B4A10605B490868430E5B490B605848FFF74AFC7023022058554823A37453490B685B006384183401236373281C6FF774FB30BD70B5444D2B68FF2B1FD04F4E4049301C062203F025FB002817D1286877F73CFD041E0DD0C069C0020AD5301C77F75CFA002805D0844203D0FF21201CFFF7D8FAFF232B6041486FF76FF970BD10B5041C10232E4A1360180678F71AFB334A13685B006384252001230355211C703104230B7000234B80201C6FF793F910BD70B5051C041C324A1368324803401360254A1378002B06D140231C490B60980578F7F7FA2FE04B0711D5702C
:FB76D50023585D042829D1332600F06AFA002800D13126A674183401236373281C6FF70EFB1BE08B0704D570342078022815D10DE0CB0712D57034207802280ED306D0042808D30AD1281CFFF75CFF06E0281CFFF72EFF02E0281CFFF7A4FF70BC08BC1847C046D4500800B7C10800880608006CAE09002CB009008C060800BEC10800B0060800900608006400080074AE090098060800ACAF090098830E00E4500800E8500800C0AF090018800E00FFF0FFFF70479F498868002805D0007C2438012801D8012000E00020704700B51F21994803F0AAFA1B21984803F0A6FAFF23974A1360974A13600023964A13708DF708FB00F080FA00BD10B583B0041CD7
:FB77D0000C22E92109036846BDF7D4F8694600200A78013122548D4B1A5401300628F7D34B78A37103B010BD00B5002388490B7081486FF723F983490868FF2804D077F7AAFBFF237F490B600123824803607E480378012B04D18DF708FF00237A490B7000BD10B5041C70342378022B27D17A4B1968043B1A68CB0717D4530315D54B0313D50723DB040B400FD153061A0F032A0BD18B05DA0E082A01D00C2A05D16F48FFF7ABFF0323237009E0CB07638804D4013363806FF745FA01E00133638010BC08BC1847664A13681802664A1060664A13681802043A11680B0E1843634A1060704710B562480368180A62490143624C216003021918614A8B1861A1
:FB78CB004C2360614C236861490B4023602368032189040B43236000235D4C236003040B2109045918FD221202114303242143594C21600F30584C206010BDF0B5041C574D574F404A106877F74FFC38607868802188437860534AD0783862A37B524A13602B68524AD05C0843514A1060261C606E3864A06E60361521890608437864707801281BD12C48416A002902D1836A022B09D9032904D1836AFF203630834202D2201C6FF789FA301DFFF79DFF0023414A1360082113206EF70CF999E0022800D096E03D4B2F4A13603C4B2C4A13600123304A1360201C002170F7F7F8384A106838490B1C4343591821624300581CA081E36C7820834318200343F4
:FB79C6001F2080028343032080020343E364236D2F4883436322134323654034A3892C4A1360238A5360EB23DB00234A1360FFF74EFF282101206EF7CFF8264A4DE06C2108002CB00900C0AF0900880608008C060800BFC10800E8500800BEC10800D45008002C8B0E0078AF090038800E00B8890E003C800E00BC890E009406080000D07DC0D4890E00043E00008C800E00B88A0E00FFFFC3FF94830E0098830E00C8890E0078AE090000820E00B7C1080000830E00A8060800A4860E00F8800E00447E000040C07DC098060800E2040000F81F0000CC8A0E00648B0E0013688C48034013602B688B4AD05C802101430902894A13680B431360884C002020CB
:FB7AC100567EF7CBF903061B0E864E3068000A000218433060002020567EF7BFF90006010C30687B4A104008433060F0BD30B582B0041C7C490B7E002B5AD17B490B68702003401D09A37BAB4252D078490B68FE20034000D00123002B47D10020B2F72BFE002842D173490B689B063ED48BF761FD00283AD16946281C99F7C6FF68466FF74DFE684699F7F3FF00209AF753F86948002343628362009B9B089B00416B59180B011B0943636448016819E0251F237B212B15D1281C71F73EFD00984308606918184308990149096161E08BBDF751FBA083281C71F78DFB281C71F7FAF807E00C1C09688442E1D102E0A07B9AF722F802B030BD52480368002BCB
:FB7BBC0000D00123002B09D0007D002806D0072801D0002000E00120002800D0012070473121002800D0332147488174704700B59AF758F8430818335B089B01580900BD30B50D1C6CF7DCFD041E14D0002D0BD05C23A3743D4A1370807BFFF7E8FF011C201C6CF7BDFE06E090340021C9432160362336490B7030BD00B532486EF708FF00BD334A1368180A32490143324A11600023324A1360704710B5041C304B2E490B603048FFF71EF90723DB012B490B60E36D7F208343182003431F2080028343032080020343E365236E274883438820034323665034A38924490B60238A4B6010BD00B5C37B4B400BD07022115C022904D0042907D1FFF7C4FF04E6
:FB7CB700E0FFF7CCFF01E08DF769FA08BC1847000018480368184803607047C046FF00FFFFA8060800648B0E009203080004830E002C2D080024860E00B4C4080008800E006C210800A8020800C0AF09002CB00900F40108009406080000D07DC0D4890E00F8800E0040C07DC0ACAF0900F81F0000CC8A0E00A8AF090094830E00037B0C30FF2B02D14378202B05D0F8225058400A0422104000D001207047F0B582B00C1C01D1042097E0051C4C480268002A08D0281CC3F7A1FD002803D0FF300006000E89E0F82148590007800F012821D1237B5B081ED0291C201CFFF7D0FF002818D13F490B78201C002B06D099F7CDFB5C352888FEF786FC6DE0F8220C
:FB7DB200515902229143F822515199F7C0FB0821281C7EF714FBC7E72F687B0133481E18F37F012B55D0237B5B080ED1637B052B02D12E4900910DE02E490091042B09D0DB002C48C218009204E0201C0C307AF7F2FB009000990B7963770023236002F064FF01900099486840010BD4B068002805D003682360B3681C60B46011E0B46024600EE0F068002805D003682360F3681C60F46001E0F4602460211C281C8FF724FF0123BB401449086818430860019802F043FFE8690006C00E0A2803D1381C73F73DFE09E0082807D1381C6CF7F0FC03E0201C99F75BFB66E7002002B0F0BDC046BCC8080022B109007C2908006CAD090074AD09006CCF050074BA
:FB7EAD0029080070B5041C0D1CF82253580122D2021343F8225350C3699343E361061C5C36308876F7F1FF20233380291C201C76F776FF291C201C8FF707FE286877F73CF870BD70B5FFF79FFEB04E30687BF7A7FDAF4876F708FE041C306877F7DCF8051C002C0AD0F8210B5904210B4340208343F8210B51201C8CF72EFE002D07D0002C05D0A54203D0FF21281CFEF770FEFF23336070BD30B59D4876F7E5FD9B4D041E09D0C3691B0406D4286877F7B4F8211CFFF7A7FF05E0F820035995480340F8200351286877F7A7F8041C2B682360FF232B6002F0ACFE012321688B408E4A11681943116002F0ABFE20686CF771FB20686CF70DFC9423195B6CF71D
:607FA8000DFD20680121FFF725FEE369F820834310200343E361206801216CF7CAFC201C8FF706FD201CFEF778FDFFF72FFE30BDF0B581B00026FFF725FB7949086877F76DF8051C774F381C76F790FD041E3FD0C3691B06DB0E083B062B02D2FCF7D8F8BC
:FB80080036E0F82003595B0732D50126235803200343F8200351E3691B0405D5211C281CFFF742FF2C1C36E05C23585B195B884201D076F73CFF2F68E8690090FF221132211C281CBCF79AFC2F60EB690720834300984007400F0343EB61381C8FF7E2F8206876F77CFF2C1C281C8FF7B1FC12E05349086877F722F8391C041C28300622BCF77CFCF820035903208343F820035120688FF7C7F8201CFEF70FFD201CFEF70DF802F017FE012321688B40434A11681943116002F016FE20686CF7DCFA20686CF778FB9423195B6CF778FC20680121FFF790FD002E05D1E369F820834310200343E361206801216CF733FCFF23344A1360354A1378012B03D1021E
:FB8103002100208CF74BFC01B0F0BD10B52E4876F7FFFC041E17D0C369F8218B4320210B43C36100217BF7F2F9201C00217BF749FA274A1368012B06D1E3691B0403D40021081C8CF72BFC10BD00B522490868042802D1FFF7CBFE2BE0022802D1FFF7EFFE26E080280BD1144876F7D2FC00281FD0C369F8218B4328210B43C36118E0202816D0102802D1FFF725FF11E0FF230133984202D1FFF7B9FF0AE0402802D18DF7B2FA05E001235B02984201D18DF743FA012000BD88060800B7C10800FFF7FFFFB4C408008C060800E850080078B1090088C80800D450080010B5C1698B0203D500217BF7D1F91FE0041C0806C00E08281AD2F8210B591B0703D59E
:FB81FE00201CFEF7D1FD12E0E3691B0409D4201C7AF7E2FDE369F820834328200343E36105E0042803D1211C002077F7BCFD10BD30B5051C3A4CF82043591B0709D4A369DB0302D4637E002B03D1617E281C92F73DFFA369DB03D90F281C012281F75AF9281CFEF760FD30BDF0B502232D4A1360C7690568F12301221A541A1C0E1C041CBCF781FB1E22311CF231201CF230BCF77AFB201C0023836448302560E36907218B437907490F1943E161F369DB135A1C0B1C0121C9038B43D107090C0B43E361F82109590B0507D4174A1188818101829423154A10881853E3693F2000028343092000020343E361EC2213590720000683430120000603431351984D
:3382F900221059400F0021002800D10121281C81F7F8FFF0BDF8300068430A04201840800870472C2D080040440800560308005803080093
:FB83800070B582B0051C0024200123181B0145481E18F821885940071AD4306876F70AFF6968884214D1301C77F730F800280FD03D4B69460B8002238B705C23985BC870000A01A90870394A6946301C80F7B6FF01340B2CD8D30123354A1376686872F75EFD686873F772FA6868B2F79FF8696830486EF754FD69682F486EF750FD69682E486EF74CFD69682D486EF748FD6C68002C45D10C2363432A481D18A87A022831D304280ED32ED1281C82F730FE061C288000236B72E87976F744FEA03006810C3028E0281C82F722FE288000236B72EB7999005B189B011B495E18311CB831487100230B71C436B379002B15D073792B80B3796B8033796B7228DC
:51847B001C82F707FE7071301D07E0002807D0281C82F7FFFD2880281C09300023037001340E2CB9D302B070BD88380800530C000043720100CC2F0800B42E0800682E08001C2E0800D037080040490800140B080033
:2C84D40010B5041C6CF7C0FC237D072B01D0082B06D190340021C9432160362302490B7010BC08BC1847C046F401080048
:7485240070B5061C0C1C151CF82043585B0728D5CB691B0425D4144803689B0721D513480378002B09D01104090C301C8EF7D8FC281CFEF7B0F8002014E0081C28308CF7ECFB2904090C301C8EF7CAFC0821201C7DF73CFF8CF723FA0123054A1370042000E0FF2070BDC046641B080022B10900BFC108003E
:6885B000044A137883730123C3702830022101707047C04678B1090010B5041CF8210B581804400E83071BD50E4B011C1940F82213597F204002834348020343135122215C23185BFEF704F8E369F820834340200343E361F822135904229343F822135110BDC046FDFF000024
:FB867E00F0B5051C13235B049F4F3B60082105206DF786FA9D4F3B689D4803403B603B68C00703433B608B4F3B6802273B43894F3B60974C984820620123974F3B60974FB868606278686065A8692430C17880220A43934F3A60934E8378B07B002B0ED1924D0021AFF7AFFFB169081C243042781302007B18430022B0F7BCF909E00121AFF7A1FF8A4D8A4A13680120400603431360884805608848838A8848036000232360F0BD0523838183692633187801280FD10021CB4382490B6000234B607D490B68802003430B607A490B68800403430B60704700B5C369002B23D013235B04694A13605F4A13685D4A13605B4A1368594A1360554A1368644A131C
:C3877900607248724A11684160724A11684161714A11688160714A13680360704A1368704A136061486EF78FF908BC1847000030B5052383816C4A116806220A40062A02D181692A3108E08B0702D481692C3103E04B0704D481692E310B8801330B8013235B0449490B605049CB69002B12D1524C2568C37B012B0CD12368802083432360022099F7C7FA80231D43A06899040843A060256030BC08BC184713235B043A4803604148C369002B02D1434803680360704700B5002901D1FFF724FF08BC18470000FE
:FB89AC00F0B581B0051C0C1C08790002C978084352D00020ADF718FAFF2801D109234CE0071CADF7D2F90023038121790902E27811438186C186051C82F71BFF2E1CB03673885808E8806379252B0ED2394800900521BCF7E3FA6179C8084907490F01228A40009B195C11431954B07BFF233D334343314819180091281CAFF7CEFB2F4885662521281CFCF777FF307B0021AFF703FE0523AB80381CAFF74EFC00999E3101200870381C002100F035F8A279E179381C00F005F801E012232B7001B0F0BDF0B50C1C171CADF780F9061C201DB4F75FFA051E1ED0B18D0B051B0D012040031843210408432B1CA907890F01D1186006E01870000A5870000A981C
:FB8AA70070000AD8703A06120E2104090C281D90F7DBFF281CB2F7CAFDF0BD30B50C1CFF233D3343430548C51802F004F9A2352C8002F008F930BDC046F44E0800349D080038B0080000B5FCF741FB00BD10B5041CC37B012B05D1A9480378002B01D101230370201CB2F7D3F8201CFFF7EBFF10BC08BC184700B52C22A149A248BBF72EFFA048A14B1860A1494160A1498161A149C16100BD30B5041CBE342178FF233D334B439D495918FF2208328B18FF2119709A493C30062202F095F800280CD1984D23782B6002236B717F21C943A81D072202F090F800232B7130BD30B5041CBE342078FF233D3343438B495D18203082F7A9FA281C6DF756FF85F7CA
:FB8BA20078FA8848036821788B4203D1FF2303600023437130BD00B5017D032901D0042902D1B2F7DBF809E0037D062B02D100F008F803E0092B01D1B2F701F908BC1847000070B582B0051C041C8034E37A002B08D0036DBE3319780820AEF740FB0023A376E3726378032B28D0A87B98F764FE4008218C431A1E04360C618C00291DD08E421BD36078012806D1688CBCF70DFB062803D13E2002E0042803D008202B6DAF33187003236370281C6DF7BFFE2B6DBE3319780520AEF712FB31E06068002808D00090002301936946A87B98F786FF002363606378032B11D0FF201930285A864209D8A87B85F7A6F9002804D1281CB2F7E0FB002802D04C49C829
:FB8C9D00780CE06378002B07D14A4BA87B185C032802D24649887801E045494878A874281CB2F7BCFA02B070BD70B5041C0E1C354D2878002802D0013828702878012804D83D4A13683D490B401360002816D0201C9830C378002B02D18188CA060ED58379002B11D0311C201CB0F70AF82B78012B0AD9311C201CAFF7D6FF05E0201CAFF79BFC201CB2F744FA70BDF0B581B0041C051C80350027AF81EF76FF230533C618F37D0133F375C37B012B13D17378002B19D1224803689B0715D5A07B98F7BEFD80084100A06981420DD098F752FD4000686008E00123737015480378A3740123DB07B361B77015480068009083075CD514490B685B0602D4009821
:FB8D9800430731D5A07B98F79CFD1FE0FDCC080078E40500DCB0090078150800B98B0900298D0900F58A0900349D080009C10800B4AE090074150800E3C008001C800E00FFBFFFFFBC8B0E0040150800400828846B78012B08D102236B70236D588900016884201CB2F7C2F8F37D012B07D17DF721F8011C201CAEF7B8FA01F0F1F92C484379022B14D1236DBE330068197888420ED17DF70FF8264B991D1A7988541879411C0720BCF71AFA214B1871214B1F707DF700F8B074009906220A40062A1ED1236DBE33187885F7ECF8201C00F0A6F8F078012804D8184980000B5C01330B54E37B0099201C002B02D1FFF720FF01E000F054F8201CAFF7E2FBAF3F
:998E93007214E0B7758B070AD5A87A0D490B78984205D2E37B002B02D00130A87206E02B7E002B00D02F76201CB2F777F901B0F0BC08BC1847B4AE090086030800ECB008001CCD0800F0B5061E20D00768002F1DD0407CACF746FF051C707C182141430C484418786890F7E5FB98F766FB381C98F71DFB00233360217A01312172217A05480278A88D90F71AFB00232372F0BDC046F4B008007C150800CF
:FB8F340070B5051C0E1C041C8034A37F002B1ED0AFF7EBFE184A537C012B09D9E37E002B02D1A08BC10603D5311C281CAFF7B0FECD23585D00280AD0FF230533E818837D002B04D04378002B01D1012383700B490B681B070FD56378022B0CD1FF201630285C002807D0A0898004800E0023002800D10123237670BDECCC0800E02C0800F0B5041C051C3A4806689835A8880712F306D90FE9707307D90F0307DA0F002F04D0344803685B0300D5111CFF231533E0184378002B03D1002901D0012343708A4216D0AB79002B15D1002F08D0D0231859C168C91BC16002D48368DB1983600122AA71201CB2F705FA201CAFF7F8F901E0002383713307DA0FA8E7
:FB902F00884307D90F8A4234D11C4F397C0A0702D5B304990E2DD1184A13689B0303D5B3079B0F032B25D004214840A880251C5035AE87B304980E1CD020221149BB68181D01F02CFECC342078800712D50D490B68012080030340580B0BD02B68BE331878ACF771FEAF303D210170012028870023AB87F0BDA88B0E00E02C0800ECCC080080980E00BC8B0E0010B51F4C2068002805D08008800098F73BFA0023236010BDF0B5051CC668B469002C16D0AFF7AFFF002812D1154F3A1C211C1331E01CAFF787FE381C00F00AF80023AB60EB60A008800098F71DFA0023B361F0BD00B582B0262369460B800190081C76F7A1FD02B000BD00B54368002B04D0EA
:1A912A0010220448002191F780FF00BDC046E49C080023B109001720000026
:9C916000F0B583B00291FF233D3343432248C618356D01F0B3FD371C90372C1CB0348E239A5B02998A1A1204120C638853433A6FD21851014909019101F0A8FDF37B012B0ED16B8B5B000093288B4000019A101841014909181CBCF73DF8A0800098E080281C82F72CFBF37B002B0ED1E68870086883A188019898F71BFBE288011C101CBCF728F8301A400828830298431E3B800123BB7203B0F0BD349D0800B4
:F4920400F0B581B00090ACF7B4FD041C0027364E336BDB071FD5B4421DD0251C2C354223A97D9A5D914216D1291C1031301C3C30062201F029FD00280DD101F04DFD051CBE36307800F036F8281C01F04DFD3078AFF76AF803E0C03601370F2FD8DB0098B2F7BBF9251C0123EB852C35201C80F7A3FC00980021ADF7A3FE1C4A13681021DB0603D5A971201CB3F72FF8201CB1F7EDF9BE342178FF223D325143144BC9187F23FF2023300B54A623FF2017300B5401B0F0BD10B5FF233D3343430C48C418201C80304178012907D1418C608CBBF7BBFF062803D13E2002E0042903D00820236DAF33187010BD2890080040150800349D08006D
:BC930000F0B5061C046D2B4803689E4201D1AFF703FF301CAFF73FFD351C8035288901380ED32881288904236B70002808D1301C6DF74DFBBE3421780520ADF7A1FF38E0687800281FD1B07B98F7C7FA4008B034A16898F75DFA01239B0698420CD267883B1859014909381CBBF748FF7843A168081840014009A060A06800236B700223F374B06112E0022810D1AB7E002B0DD0E889298A431A1804000C074B984205D2EB7A002B02D1301CB1F797FE301C6DF7B0FCF0BD6C210800FF7F0000A8
:8C93F800F0B5051C1F49FF230533C418E378980000230B544318581C00230370AF692B6D1889421C267C688C5043B04063681B1858014009381A01239B06984220D2B31D20789840A368D901EB7B002B00D15143E268824200D3101CBBF7D4FE011C802800D980219F352970074803789E4202D2701C207404E000230434191C381C0BC4F0BDC046ECB008006F150800F0
:E4949000F0B5061C071C9C373888102101401D490BD01D4BF518EB7898000A5C9301AA68D218AA604318597811E0174BF518EB7898004118487800280DD08C78097861438901BBF793FEA9680918A960211C8B01E868C018E8602B7C002B11D1E86800280ED0AB68D901F37B002B03D1336D1A8901325143BBF77AFE802800D98020F870F0BDC046ECB0080004010000F0B50D1C114C20600B68DB0701D598F770F90F4E0020706637680E483840306098F77CFC98F77AFC2868E0606868A0600220706698F772FC98F770FC98F76EFC37600020E060A060F0BDC04600820E001C800E00FFFFFFFD3B
:30957C0000B54068084A13681979002909D1074A13681B0605D4002801D097F7D3FF012000E0002000BDC046C04F0800E02C0800D2
:7895C80030B5041C80304378002B1BD10323E374252101230B55837E002B07D0236DD98B09014184A36903840123C372618CA06974F78AFB238C984204D02084216DB03188800880FF230133E158E518A06998F7FBF8216DB2310A88011C101CBBF7EAFD011C201CB1F73EFEA3692B60201CAFF74CFD00236B7130BDDE
:FB965000F0B581B0344806683448056834480378002B5CD133480368AB4209D132480368B34205D131490B683149086883424ED0304C314FFE20284007D1002D03D02F480368DB0301D5002E1CD063681B071B0F022B02D0022098F74BFC29480078606328480078A06366F7C9FD01F027FB822141432068642250436430BBF797FD431C3B6018E063681B0702D0002098F730FC00206063A0631C4A136800931B4A1088392109014143181CBBF780FD386018490098BBF77BFD174908603868A06109490D6009490E600A490B6808490B6001B0F0BC08BC1847C04614CD0800B4C4080008C30800B8CA080094AE090074AF09008C0608000C000F00DC5E087C
:91974B0000FC0A080009C308000AC30800C02D0800E80A080020CF01009C000F00381CFFF7E7F902B0B0F7F0FFFFF705FAB0F7FDFF30B5041C13490B685D78B0F75DFD022C01D0042C16D1281C203081F7A9FC042C07D10D4800231A1C191C91F745FC022102E0022C03D10821281CADF705FC281CACF782FB05490B689879012801D1ACF7E4FB30BDC49C08000E200000C89C080062
:FB97EC00F0B5041C00216DF74CFE002803DA01234E4843716FE0061C251C7835687A00280DD1A07B98F763F84008236DB833196897F7FFFF002804DC687A002805D0002E03DD201CB1F7BDFC55E0E37B012B03D1002801D101236B72A878802101433C4A1160082105206CF7A4F9384A5379002B41D1AFF75BFC374F381C052101F048FA03233B74201C00F037F8AFF70CFCEB8A002B0AD1FF201630205C002805D1AFF745FC3B7C082003433B740023AB74FF230533E6180023F375201CB1F788FD264A13780021002B00D101211170F078FF2806D16B7A022B03D1081CF070A3697360012805D8F1708B001C48C0187B7C8370201CAEF7ADFDF0BD30B58496
:6D98E7007C18490B788374051C012200216DF769FCAC742C6DB223195B0239884200DB081C11494143E5208000BBF774FCFF210531695C884200D3081C32342178490701D5012801D8002800D101200349487430BDA42C0800A4860E00ECCC08006C150800ECB008007415080071020000F1
:FB995C00F0B583B0012100910027C0237B431A481C18206BC00729D5251CBC356B78002B24D1261CE38D2C36002B1FD0B379002B02D00021009119E0211C0C310F48052201F076F9002811D00223B371201CB2F72AFC01A9201CB2F712FC01A9A878B1F7ACFC082201A9A878B2F72EFD01370F2FCBD3009803B0F0BD28900800004F080010B5002912D140498B79002B0BD03F490B69834207D13E4C2368DB0603D54631012008700EE0AFF751FD0BE0022909D1011C48318A880B7E9B18013383814B889B1A4B8010BC08BC184730B5314A11680B06D90F884218D12F4D2C68ACF798FAC1780B02817819430279130419434279130619438C4208D12A1F13B8
:FB9A5700681A0C41780B0200781843824201D0002000E0012030BDF0B583B0051C00910026041C58342379002B2CD0012601A8B0F723F8071C6379002B13D0E378012B07D13023585DFFF7C3FF002801D1061C19E02835AB79012B04D101A9381CAFF7C1FE061C0F480378002B0CD0012F0AD1029B03208003034001208003834202D1012300980360301C03B0F0BDC046AC210800642C080008800E00A88B0E0088980E006C9C0800F0B50D1C041C002D14D14B488379002B0CD04A480369A34208D1494A1368DB0604D5031C46330120187036E0201CB0F7B5FB32E0FFF754FF022D2ED1414A131C5421085B0004271C52373988084318644433251C56359E
:FB9B5200A807800F01D12E6808E02D1AC0002968C1402026301A6E6886400E431E60A36B002B0CD1A06EC16B91603C30457908212D0200792843D06013680B431360A06E806A9064F0BC08BC1847F0B582B0041C051CAFF75BFE58352B79002B31D0EB78012B10D1201C28308379012B0BD16B79002B08D1007AFFF72DFF002803D1201C6CF796FA1DE0EB78012B1AD8A66E6846AFF775FF6B79002B0CD1071C6946301C3C300622BAF7C5FE423637706C340120207012E02E231B5D012B02D16946AFF713FEA37C0B498878834202D1201CB0F768FC201C0121AFF712FD02B0F0BC08BC1847AC210800642C080008800E00808B0E0074150800034B044803D1
:479C4D0060044B044803607047C046D4AD09005015080000AE09006415080010B5041C6CF749FA201C6CF7ACFE4A23002018536523195D0220ADF7FDFAA36EBC3318780021AEF7D9FC10BD07
:149CBC0000B5011C32310B78FB2213400B70ADF7E5FE00BDAD
:4C9CE000F0B5061C0F1C104D2C68A07B97F7F5FD80084300991C608CA26983185801400997F786FD041C002F0BD0B17B2B68987B6DF7BBFD002804D1032C01D8002400E0033C201CF0BDC0466C21080011
:FB9D3400F0B586B0061C4568039581780A07120F0092C07802908F0943191A79059200200490C74A13681879002804D1C5490B681B0600D4BCE10098062800D9BDE10598002808D0122806D0301CAEF783F8002800D1ADE1B1E1BC4C2378BC490879834202D3201CADF772F8B8484188002923D00378002B10D06378002B04D0B44898F75DF9002818D000236370A370AF4A508850214143AE4805E02378AD48002B04D15022514398F7FFF806E098F747F9002802D0201CADF74AF820782923191C41430191E11C8807800F01D10A6808E0091AC0000B68C3402022101A4A6882401A4301989C4B0099C95C815480180099032901D0052957D1934A13681B0D
:FB9E2F000600D441E1477002998B1F0372291C09300622BAF79FFD0635E11C8807800F01D10A6808E0091AC0000B68C3402022101A4A6882401A43019880180230291C0622BAF788FD0098052817D10635E11C8807800F01D10B6808E0091AC0000A68C2402023181A4B68834013430199C8180F30029A0C3A291CBAF76DFDE11C8807800F01D10B6808E0091AC0000A68C2402023181A4B68834013430199C8182830F17872688918C9780170F1E0FF07FF0F0098042806D0634A1368F07871684018C078587260490868C379012B18D1391C281CADF7F0FA009A042A05D1ADF70DFB002800D1D7E03BE0FF2803D1391C281CADF736FBADF716FB002800D1B0
:FB9F2A00CBE02FE057490B78002B2BD0009A042A18D1291C54481030062200F0A2FE002800D0BAE05049887D03071B0FBB4200D0B3E08023034000D1AFE04006400E494988750FE00922835601200856834200DAA3E0291C45480622BAF7FFFC80233B434148837501210491E11C8807800F01D10A6808E0091AC0000B68C3402022101A4A6882401A43019880184770291C02300622BAF7E2FC2F480378002B19D0E11C8807800F01D10A6808E0091AC0000B68C3402022101A4A6882401A4301998818F17872688918ADF7E8FB0006000EFF2863D106350298FA300006000E02900098E11C012812D18807800F01D10B6808E0091AC0000A68C240202318C2
:D3A025001A4B68834013430199C8180021017215E08807800F01D10B6808E0091AC0000A68C2402023181A4B68834013430199C818029A0272291C0930BAF791FCE11C8807800F01D10B681CE0091A12E0C046C04F0800E02C08005DC30800BC9C080093C3080014E3050068C30800B8AF0800C8AF0800C0000A68C2402023181A4B68834013430199C8182830F17872688918C97801700498002802D023780133237023780B490879834202D3201CACF7D6FE0598122804D1ADF78EFFADF7C3FF04E00398002801D097F729FA06B0F0BDC046BC9C0800EA
:FBA10000F0B586B0041C012203920292002200923249051C08682035EB7A012B02D1304A117801E02E4A5178A17406220240062A51D12C4A16683207120F019201070BD529490B68987B002805D0301CAFF7FCFD0090029000E00390244F019805282BD1EB7A012B28D83306D90F287B414023D1ABF7FCFE79680491B968059104A90231062200F083FD002816D10398002813D00298002810D0201CAFF7C1FE009900290AD0201C6BF7ADFF11490B68DB0703D4201C0021AFF76AFD0E490B681B060AD50198052801D0032805D1391C3004000C0022ADF700F906B0F0BDC046BC8B0E005C150800A88B0E00B89C080080980E0008800E00E02C080010B556ED
:FBA1FB004C822099F731F8000600160022A15600290ED0CB10CA1AC310D2187F23DB439A4201DA181C04E07F207F2A01DC10060016010609162170494A1368002B01D14848C17710BD70B5002644480368002B01D184F790FB434C4449201C0F300522BAF793FB00252819C07B97F756FD36180135052DF7D33D48C36A5B011CD53C4803685B0518D400253B4803789E4213D001200A2D00D9022040194100374885F7E0FA002805D0291C201C0F3085F7EBFA013E0135252DE7D3211C0F313048052200F0E7FC002809D0211C0F312C480522BAF75BFB63690120834363616369DB0707D4FFF73EFB616901229143104001436161002070BC08BC184700B595
:96A2F60075F70FF900280BD11F480368002B07D114490B681D490868834201D1012000E0002000BD00B5B821194800F0ECFC00230B4A137000BD10B5041C15480368002B0BD0201C002185F7A0FA1821201C85F79CFA4E21201C85F798FA10BDC04680B10900B4C4080050370800F4460800F44E08005420080020040800A4030800E0340800004F080010CD0800E4C708009034080014CD0800C6
:ACA3C00030B5041C0A4D2B78002B0FD07BF73EFD01216956884209DA251C5C356B78002B04D1201C6BF78DFE00232B7030BDC04668C3080000B574F74DFE002805D11848437D002B01D175F78CFE00BD00B574F741FE002805D11248437D002B01D175F780FE00BD70B5051C0E1C0024C02363430C481818036BDB0703D5321C291CB1F725FE01340F2CF1D370BD00B5064875F75CFE7BF7A5FF13211620FFF7E3FF00BDE44E0800289008009C4508004E
:84A4A40070B5041C08790002C9780843ABF786FC051C01D1122331E0006BC0051ED40026281C3030817810220A40296B09D0890502D50C23237012E0286B1149084328630DE00F4A1143402211432963C37810210B43C370281CADF7CDFA00E00126A078000261780843217890F7B5FD002E03D0281C0021ACF718FE28340023237070BD00020000EA
:FBA5FC00002809D1104A1068104A1368984201D1012801D1002002E08800411AC81E70470B4A1068C306990F01290BD14007400F052801D8002801D1002001E002490868024908607047C046901C080008B1090004300E00002E02D00020E05504E0E35D002B01D0013BE3557BF785FA10B5A44C201C042100F044FB7F21C943A01D072200F00EFBFF23236000239E4803709E4803709E4803709E4803709E4803709E4B9E4803600123DB029D48038080239D48037000239C4803709C4803709C480621BAF784FC14219B48BAF780FC14219A48BAF77CFC10BD30B5041C98480368002B04D000230360282300201855944D00216962A96277F75DF99248038A
:FBA6F70068002B07D174F7CAFC002807D18F48437D002B03D1012090F793F904E075F7F9FB2834042020700023894A137089480378012213430370FFF79BFF281C8A300621BAF746FC30BDF0B5061C051C081C08356C4C2368FF2B20D076490330062200F099FA002819D16079022807D12068ABF706FBC38D012B10D1002711E001280FD1206874F7A3FCC1690906C90E0839062903D2FF210931475C02E0122333700EE0A11DE81D0722BAF7F1F88021A01D072200F078FA00232371AF710823F370F0BD30B50C1C5B4D0331281C0622BAF7DEF8637A564803701422211C0A315648BAF7D5F81422211C1E315448BAF7CFF8002347480370434CFF232360BF
:FBA7F200281C0021ABF7C7FA002803D1281C0121ABF7C1FA002806D0C38D012B12D1BE30007802210CE0281C74F77BF9002809D0C2691206D20E083A062A03D2006801212060617130BD0B7935480370CB78304803707047F0B5052630480378002B50D12A4C2768FF2F4CD02079811D0720BAF708FD05062D0E607902280CD1381CABF781FAC38D012B3CD1A31DEA560024012622490E7016E0012833D1381C74F719FCC1690906C90E0B1C083B062B29D2A31DEA56FF230933C45C0123174803700A2900D10326144800211D4B1B579A420DDA0278013202700278B24212D301700F4A1378002B0DD090F71FFF0AE0154B1B5701709A4205DD06480378001D
:FBA8ED002B01D090F7F8FE0120F0BC08BC1847B4AE090002C108000FC10800840308008603080010C10800C05D00009C070800A007080099070800D8C20800ADC9080009C1080011C1080025C1080024C9080054200800DCCC0800E44E0800EEC00800E00A0800381CF9F711FA69F712FF281CF9F72AFA69F72BFF81B000F003F873F74CF90000F0B5041C0D1C7BF769FA324E7379012B12D180213368095D8B420DD1A02210553179891988713079411C0720BAF76AFC30710023284A1370271C261C6436317F9F2038569F377BF7F8F93870371CB37D0C37002B15D03368DB0508D41F4803691B010ED5301C8FF7D3F9002809D00023B3610123FB7200233D
:74A9E800BB727B72301C8DF7F8F933685806000F295C002904D0144B185CB072431E0DE010490B69DB000BD5104A11680A6853031B0F984204D193025B0F013BA3810CE0012333723B68FF20013083433B600D2307490B70301C73F775F9F0BDB4AE090086030800542008009EBB05001C2B0800E8C008004E
:54AA840083780F2B02D1032311480360704700B50F480368002B05D0002303600F21181C78F7FAFF00BD00B5094902060CD40868012807D102230B6018220F21002078F7CAFF03E0032801D1022000E0002000BD90AE09009F
:18AAF400044A1088012149020140480A012250407047C046E8C4080040
:98AB6C0000B500F0B5F8002320490B7000F0B8F800BD00B51E4B984202D1081C00F001F800BD00B5012100F006F800BD00B5002100F001F800BD30B50C1C144D15490B78012B1AD10178032901D0082915D18378002B12D100F08CF8002C03D02B7801332B7008E0041C2878013803D3287002208BF7C5FD201C00F083F830BD00B5FFF7D5FF00BD014908787047C04681B10900B85208005400080072
:24AC10000F2304480360044803600448036004480360704730300E0030340E0030380E000C200E00EB
:FBAC3C0010B5041C10480368052B02D19BF7B2F903E09FF7FFF9022801D0012012E0201CA1F74FF9041C9FF71FFC9FF73AFC204007D006490B7823430B70012080028BF776FD002010BDC046B0C808003BC308007847000000C09FE51CFF2FE1FC4005007847000000C09FE51CFF2FE1CC4805007847000000C09FE51CFF2FE1E05105007847000000C09FE51CFF2FE1741005007847000000C09FE51CFF2FE160E801007847000000C09FE51CFF2FE17CD704007847000000C09FE51CFF2FE190D704007847000000C09FE51CFF2FE1304F05007847000000C09FE51CFF2FE1CC51050023000000593B090024000000553B0900250000005D3B09002800002F
:FBAD370000415B09002E000000B55D090035000000953B090088000000D53B09008D000000F93B09009100000047A809009200000000000000000000000300000259460200040001040000000085770900000000009F7C0900DF6F0900AB760900337809000000000000000000216E0900675402000000000047720900000000000000000073720900B3720900B97309001774090000000000C3740900875102009F9504006D9904007F93040000000000DD99090000000000A7960400000000000000000005990400C39304009F9504006D99040091A2040000000000FD9A0900000000009D9B090093A3040099590900C7590900C3930400420500005E04AD
:62AE3200000062040000420500006C04000062190000440500006C040000621900000A060000A0860100C47A0200A861000021000C0000180008010000003C000000001800003C000000000000000008001800000000000000001E000000400100000100000014
:00000001FF

so I placed the hex file in the folder with bcmfwup.py, and edited bcmfwup.py to:

#!/usr/bin/python2
# -*- coding: utf-8 -*-

import sys
import usb.core
import usb.util
import threading
import time

ID_VENDOR = 0x0b05
ID_PRODUCT = 0x17cf

class bcm_fw_up:

  def __init__(self):
    self.dev = usb.core.find(idVendor = ID_VENDOR, idProduct = ID_PRODUCT)

    if self.dev is None:
      raise ValueError('Device not found')

    self.cfg = self.dev.get_active_configuration()
    self.detach_drivers()

  def detach_drivers(self):
    for intf in self.cfg:
      if self.dev.is_kernel_driver_active(intf.bInterfaceNumber):
        self.dev.detach_kernel_driver(intf.bInterfaceNumber)

  def attach_drivers(self):
    for intf in self.cfg:
      if not self.dev.is_kernel_driver_active(intf.bInterfaceNumber):
        self.dev.attach_kernel_driver(intf.bInterfaceNumber)
  
  def init_upload(self):
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x79, 0xfc, 0x00])
    re.join()
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x2e, 0xfc, 0x00])
    re.join()

  def finish_upload(self):
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x4e, 0xfc, 0x04, 0xff, 0xff, 0xff, 0xff])
    re.join()
    re = read_event_thread(self.dev)
    re.read()
    re.join()
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x79, 0xfc, 0x00])
    re.join()
    re = read_event_thread(self.dev)
    re.read()
    #re2 = read_event_thread(self.dev, 0x82)
    #re2.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x53, 0xfc, 0x01, 0x13])
    re.join()
    #re2.join()

  def upload(self, address, data):
    re = read_event_thread(self.dev)
    re.read()
    self.dev.write(2, '\x4c\xfc' + chr(len(data) + 4) + chr(address & 0xFF) +
      chr((address >> 8) & 0xFF) + chr((address >> 16) & 0xFF) + chr((address >> 24) & 0xFF) + data)
    re.join()

  def reset(self):
    re = read_event_thread(self.dev)
    re.read()
    self.dev.ctrl_transfer(0x20, 0, data_or_wLength = [0x03, 0x0c, 0x00])
    re.join()
    usb.util.dispose_resources(self.dev)
    self.cfg = self.dev.get_active_configuration()


class read_event_thread(threading.Thread):
  def __init__(self, dev, endpoint = 0x81):
    super(read_event_thread, self).__init__()
    self.daemon = True
    self.dev = dev
    self.endpoint = endpoint

  def run(self):
    try:
      self.result = self.dev.read(self.endpoint, 0xff)
    except usb.core.USBError as (errno, strerror):
      print "read event error({0}): {1}".format(errno, strerror)
    print 'event:', self.result

  def read(self):
    self.start()
    time.sleep(0.1)


class intelhex:

  data = []

  def __init__(self, filename = None):
    self.offset = 0
    if filename is None:
      return
    self.load_from_file(filename)

  def load_from_file(self, filename):
    for line in open(filename):
      self.append(line)

  def append(self, line):
    if not line[0] == ':':
      return
    line = line.rstrip()
    length = int(line[1:3], 16)
    address = int(line[3:7], 16)
    rectype = int(line[7:9], 16)
    checksum = int(line[-2:], 16)
    if rectype == 1:
      return
    if rectype == 4:
      self.offset = int(line[9:13], 16) * 0x10000
      return
    self.data.append((length, address + self.offset, line[9:-2].decode('hex'), checksum))


def main():
  #hex = intelhex('BCM20702A0_001.001.024.0156.0204.hex')
  hex = intelhex('BCM20702A1_001.002.014.1443.1469.hex')
  up = bcm_fw_up()
  up.init_upload()
  for line in hex.data:
    up.upload(line[1], line[2])
  up.finish_upload()
  up.reset()
  #up.attach_drivers()
  return 0

if __name__ == '__main__':
  sys.exit(main())

NOTE: the version of pyusb in the ubuntu repos is too old in 14.04, since removing it would break other packages that depend on it, I did the following:

cd ~
git clone https://github.com/walac/pyusb.git
cd pyusb
sudo python setup.py install

Which overwrote the pyusb installed by the package python-usb using apt-get without causing dependency errors.

I then went back to the directory containing BCM20702A1_001.002.014.1443.1469.hex AND bcmfwup.py and ran:

./bcmfwup.py

Which printed a bunch of python lists to my terminal, just as it did for others in this topic, only it exited without generating any exceptions. I was then able to pair both my HTC One cellphone and a bluetooth beatbox, and played music on Amarok through the beatbox.

EDIT: Though it appears that I'm able to pair my phone with this chip, that's about where the usefulness ends. I've tried transferring numerous small files with no success at all. On the plus side of things, I can at least pair to my bluetooth speakers, but I have no other devices to test with ATM.

Last edited by nhurtt (2014-06-28 09:34:14)

Offline

#58 2014-06-28 06:44:33

nhurtt
Member
Registered: 2012-03-30
Posts: 10

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

I don't know how permanent any of my steps are, or how necessary. I don't pretend to understand what all happened to get me here, but I wanted to document it for my future use, and maybe others who find themselves in the same situation. I see that Harey has posted some modifications to system startup, but I haven't done any of this yet. I actually did restart my computer once before pairing any devices but after running the bcmfwup.py utility written by laloch (without rerunning bcmfwup.py after reboot), and things still paired correctly despite not working at all prior to running bcmfwup.py. I haven't tried restarting since or suspending / resuming though, so I don't know how permanent my current settings are. If anyone can advise me from this point, or direct me to someone who can make these changes to the kernel / btusb permanent, I'd love to follow up on this some more to help others.

Special thanks to Harey, Steve_White, and laloch for all of your great posts.

Last edited by nhurtt (2014-06-28 07:10:15)

Offline

#59 2014-11-27 14:07:43

qiuyi
Member
Registered: 2014-11-27
Posts: 1

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

I have a better way in Ubuntu 14.04.

My bluetooth's vendor ID is 0x13d3, product ID is 0x3404.

cd ~
mkdir kernel
cd kernel
apt-get build-dep linux-image-`uname -r`
apt-get source linux-image-`uname -r`
cd linux-3.13.0/drivers/bluetooth/
vi btusb.c

Add my bluetooth device ID like this.

/* Broadcom BCM20702A0 */
{ USB_DEVICE(0x13d3, 0x3404), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x0b05, 0x17b5) },
{ USB_DEVICE(0x0b05, 0x17cb) },
{ USB_DEVICE(0x04ca, 0x2003) },
{ USB_DEVICE(0x0489, 0xe042) },
{ USB_DEVICE(0x13d3, 0x3388), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x13d3, 0x3389), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8197), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8143), .driver_info = BTUSB_BCM_PATCHRAM },

make -C /lib/modules/`uname -r`/build M=`pwd` modules

mv /lib/modules/`uname -r`/kernel/drivers/bluetooth/btusb.ko /
cp btusb.ko /lib/modules/`uname -r`/kernel/drivers/bluetooth/
depmod

git clone https://github.com/jessesung/hex2hcd.git
cd hex2hcd
make
./hex2hcd BCM20702A1_001.002.014.1443.1479.hex fw-13d3_3404.hcd
cp fw-13d3_3404.hcd /lib/firmware/
chown root:root /lib/firmware/fw-13d3_3404.hcd

OK, now run

rmmod btusb; modprobe btusb

or reboot OS.

rfkill list

should list your bluetooth information and bluetooth work well.

Last edited by qiuyi (2014-11-27 14:14:59)

Offline

#60 2014-12-01 09:09:02

Harey
Member
From: Bavaria, Germany
Registered: 2007-03-24
Posts: 292

Re: kernel 3.2 and Bluetooth Broadcom BCM20702A0

Well, sounds good. Why not ask upstream for incorporation of your device?

Edit: Said that, done that. I just managed to get a patch into bluetooth-next that enables patchram upload for the whole vendor ID 0489 (Foxconn - Hon Hai). lol

If you provide me the neccessary informations I will try to do this for you as well.

Last edited by Harey (2014-12-03 19:11:28)


Linux is like a wigwam: No Gates, no Windows and an Apache inside

Offline

Board footer

Powered by FluxBB