From b1ad2eee9e3c4cc79a4571da0335b8099af9b873 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Thu, 5 Apr 2018 11:00:55 -0500 Subject: [PATCH 01/25] Working on GATT unit tests --- .../AttributeProtocolTests.swift | 53 +++++++++++++++++++ Tests/BluetoothTests/L2CAPSocket.swift | 14 +++-- 2 files changed, 62 insertions(+), 5 deletions(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index 1d5333669..439ae9157 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -542,6 +542,59 @@ final class AttributeProtocolTests: XCTestCase { XCTAssertEqual(decodedDump, testDump) } + + // server + let serverSocket = TestL2CAPSocket() + serverSocket.forceTarget = false + let server = GATTServer(socket: serverSocket, maximumPreparedWrites: .max) + server.log = { print("GATT Server: " + $0) } + server.connection.log = { print("Server ATT: " + $0) } + //server.database = database + + // client + let clientSocket = TestL2CAPSocket() + serverSocket.forceTarget = false + let client = GATTClient(socket: clientSocket) + client.log = { print("GATT Client: " + $0) } + client.connection.log = { print("Client ATT: " + $0) } + + // fake sockets + do { + + var didWrite = false + repeat { + + didWrite = false + + while try client.write() { + + didWrite = true + } + + while serverSocket.receivedData.isEmpty == false { + + try server.read() + } + + while try server.write() { + + didWrite = true + } + + while clientSocket.receivedData.isEmpty == false { + + try client.read() + } + + } while didWrite + } + + catch { XCTFail("Error: \(error)") } + + XCTAssertEqual(server.connection.maximumTransmissionUnit, 512) + XCTAssertNotEqual(server.connection.maximumTransmissionUnit, ATT.MaximumTransmissionUnit.LowEnergy.default) + XCTAssertEqual(client.connection.maximumTransmissionUnit, 512) + XCTAssertNotEqual(client.connection.maximumTransmissionUnit, ATT.MaximumTransmissionUnit.LowEnergy.default) } func testServiceDiscovery() { diff --git a/Tests/BluetoothTests/L2CAPSocket.swift b/Tests/BluetoothTests/L2CAPSocket.swift index 0f97709bd..4d1e793b6 100644 --- a/Tests/BluetoothTests/L2CAPSocket.swift +++ b/Tests/BluetoothTests/L2CAPSocket.swift @@ -35,6 +35,9 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { /// Target socket. weak var target: TestL2CAPSocket? + /// Target must not be nil or else an error is thrown. + var forceTarget: Bool = true + private(set) var receivedData = Data() { didSet { print("L2CAP Socket buffer \([UInt8](receivedData))") } @@ -52,10 +55,13 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { /// Write to the socket. func send(_ data: Data) throws { - guard let target = self.target - else { throw POSIXError(code: .ECONNRESET) } + if forceTarget { + + guard self.target != nil + else { throw POSIXError(code: .ECONNRESET) } + } - target.receivedData.append(data) + self.target?.receivedData.append(data) } /// Reads from the socket. @@ -80,6 +86,4 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { return data } - - } From 4da285504aa49dbb96c2bbf4ec5bb36d4ad90647 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sat, 7 Apr 2018 23:26:06 -0500 Subject: [PATCH 02/25] Updated unit tests --- .../AttributeProtocolTests.swift | 336 +----------------- Xcode/Bluetooth.xcodeproj/project.pbxproj | 4 + 2 files changed, 8 insertions(+), 332 deletions(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index 439ae9157..849dcf453 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -16,8 +16,8 @@ final class AttributeProtocolTests: XCTestCase { ("testATTOpcode", testATTOpcode), ("testATTProtocolDataUnit", testATTProtocolDataUnit), ("testGATTClientData", testGATTClientData), - ("testGATT", testGATT), - ("testMTUExchange", testMTUExchange) + ("testMTUExchange", testMTUExchange), + ("testDiscoverPrimaryServices", testDiscoverPrimaryServices) ] func testATTOpcode() { @@ -265,257 +265,7 @@ final class AttributeProtocolTests: XCTestCase { XCTAssert(characteristicDeclaration.properties == characteristic.properties) } } - - func testGATT() { - - func generateDB() -> GATTDatabase { - - var database = GATTDatabase() - - for service in TestProfile.services { - - let _ = database.add(service: service) - } - - return database - } - - func dumpGATT(database: GATTDatabase) { - - print("GATT Database:") - - for attribute in database.attributes { - - let type: Any = GATT.UUID.init(uuid: attribute.uuid as BluetoothUUID) ?? attribute.uuid - - let value: Any = BluetoothUUID(data: attribute.value)?.littleEndian ?? String(data: attribute.value, encoding: .utf8) ?? attribute.value - - print("\(attribute.handle) - \(type)") - print("Permissions: \(attribute.permissions)") - print("Value: \(value)") - } - } - - let database = generateDB() - - dumpGATT(database: database) - - // server - let serverSocket = TestL2CAPSocket() - let server = GATTServer(socket: serverSocket, maximumPreparedWrites: .max) - server.log = { print("GATT Server: " + $0) } - server.connection.log = { print("Server ATT: " + $0) } - server.database = database - - // client - let clientSocket = TestL2CAPSocket() - let client = GATTClient(socket: clientSocket) - client.log = { print("GATT Client: " + $0) } - client.connection.log = { print("Client ATT: " + $0) } - - clientSocket.target = serverSocket - serverSocket.target = clientSocket // weak references - - var writtenValues = [UInt16: Data]() - - func clientWillWriteServer(uuid: BluetoothUUID, handle: UInt16, value: Data, newValue: Data) -> ATT.Error? { - - print("\(#function) \(uuid) (\(handle))") - - writtenValues[handle] = newValue - - print(value.map { $0.toHexadecimal() }) - - return nil - } - - server.willWrite = clientWillWriteServer - - func discoverAllPrimaryServices() { - - client.discoverAllPrimaryServices { - - print("Discover All Primary Services") - dump($0) - - switch $0 { - case let .error(error): - - XCTFail("\(error)") - - case let .value(services): - - XCTAssert(services.map({ $0.uuid }) == TestProfile.services.map { $0.uuid }) - - for service in services { - - guard let testService = TestProfile.services.first(where: { $0.uuid == service.uuid }) - else { XCTFail("Invalid service \(service.uuid)"); return } - - discoverAllCharacteristics(of: service, test: testService) - - testService.characteristics.forEach { - discoverCharacteristics(of: service, by: $0.uuid, test: testService) - } - } - } - } - } - func discoverAllCharacteristics(of service: GATTClient.Service, test testService: TestProfile.Service) { - - client.discoverAllCharacteristics(of: service) { - - print("Discover All Characteristics of a Service") - dump($0) - - switch $0 { - case let .error(error): - - XCTFail("\(error)") - - case let .value(characteristics): - - XCTAssert(characteristics.map({ $0.uuid }) == testService.characteristics.map { $0.uuid }) - - for characteristic in characteristics { - - guard let testCharacteristic = testService.characteristics.first(where: { $0.uuid == characteristic.uuid }) - else { XCTFail("Invalid characteristic \(characteristic.uuid)"); return } - - validateCharacteristic(characteristic, test: testCharacteristic) - } - } - } - } - - func discoverCharacteristics(of service: GATTClient.Service, - by uuid: BluetoothUUID, - test testService: TestProfile.Service) { - - client.discoverCharacteristics(of: service, by: uuid) { - - print("Discover Characteristics by UUID") - dump($0) - - switch $0 { - case let .error(error): - - XCTFail("\(error)") - - case .value: break - - /* - case let .value(characteristics): - - // TODO: Investigate Discover Characteristics by UUID - //XCTAssert(value.count == 1, "\(uuid) \(value.map { $0.uuid })") - - for characteristic in characteristics { - - guard let testCharacteristic = testService.characteristics.first(where: { $0.uuid == characteristic.uuid }) - else { XCTFail("Invalid characteristic \(characteristic.uuid)"); return } - - validateCharacteristic(characteristic, test: testCharacteristic) - }*/ - } - } - } - - func validateCharacteristic(_ characteristic: GATTClient.Characteristic, - test testCharacteristic: TestProfile.Characteristic) { - - XCTAssert(characteristic.uuid == testCharacteristic.uuid) - XCTAssert(characteristic.properties == testCharacteristic.properties) - - if testCharacteristic.properties.contains(.read), testCharacteristic.permissions.contains(.read) { - - guard characteristic.properties.contains(.read) - else { XCTFail("Cannot read charactertistic \(characteristic.uuid)"); return } - - client.readCharacteristic(characteristic) { - - print("Read Characteristic") - dump($0) - - switch $0 { - case let .error(error): - - XCTFail("\(error)") - - case let .value(value): - - XCTAssert(value == testCharacteristic.value) - } - } - } - - if testCharacteristic.properties.contains(.write), testCharacteristic.permissions.contains(.write) { - - guard characteristic.properties.contains(.write) - else { XCTFail("Cannot write to charactertistic \(characteristic.uuid)"); return } - - guard let (data, reliableWrites) = TestProfile.WriteValues[testCharacteristic.uuid] - else { fatalError("missing test data") } - - client.writeCharacteristic(characteristic, data: data, reliableWrites: reliableWrites) { - - print("Write Characteristic") - dump($0) - - switch $0 { - case let .error(error): - - XCTFail("\(error)") - - case .value: - - guard let writtenValue = writtenValues[characteristic.handle.value] - else { XCTFail("Did not write \(characteristic.uuid)"); return } - - XCTAssert(writtenValue == data, "\(characteristic.uuid) \(writtenValue) == \(data)") - } - } - } - } - - // queue operations - discoverAllPrimaryServices() - - // fake sockets - do { - - var didWrite = false - repeat { - - didWrite = false - - while try client.write() { - - didWrite = true - } - - while serverSocket.receivedData.isEmpty == false { - - try server.read() - } - - while try server.write() { - - didWrite = true - } - - while clientSocket.receivedData.isEmpty == false { - - try client.read() - } - - } while didWrite - } - - catch { XCTFail("Error: \(error)") } - } - func testMTUExchange() { let testPDUs: [(ATTProtocolDataUnit, [UInt8])] = [ @@ -597,15 +347,11 @@ final class AttributeProtocolTests: XCTestCase { XCTAssertNotEqual(client.connection.maximumTransmissionUnit, ATT.MaximumTransmissionUnit.LowEnergy.default) } - func testServiceDiscovery() { + func testDiscoverPrimaryServices() { let testPDUs: [(ATTProtocolDataUnit, [UInt8])] = [ - (ATTMaximumTransmissionUnitRequest(clientMTU: 512), - [0x02, 0x00, 0x02]), - (ATTMaximumTransmissionUnitResponse(serverMTU: 512), - [0x03, 0x00, 0x02]), (ATTReadByGroupTypeRequest(startHandle: 0x01, endHandle: .max, type: GATT.UUID.primaryService.uuid), - [0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28]) + [0x40, 0x20, 0x0B, 0x00, 0x07, 0x00, 0x04, 0x00, 0x10, 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x28]) ] // decode and compare @@ -627,77 +373,3 @@ final class AttributeProtocolTests: XCTestCase { } } } - -public struct TestProfile { - - public typealias Service = GATT.Service - public typealias Characteristic = GATT.Characteristic - - public static let services: [Service] = [ - TestService, - TestDefinedService - ] - - public static let TestService = Service(uuid: BluetoothUUID(rawValue: "60F14FE2-F972-11E5-B84F-23E070D5A8C7")!, - primary: true, - characteristics: [ - TestProfile.Read, - TestProfile.ReadBlob, - TestProfile.Write, - TestProfile.WriteBlob, - TestProfile.WriteWithoutResponse, - TestProfile.WriteBlobWithoutResponse - ]) - - public static let Read = Characteristic(uuid: BluetoothUUID(rawValue: "E77D264C-F96F-11E5-80E0-23E070D5A8C7")!, - value: "Test Read-Only".data(using: .utf8)!, - permissions: [.read], - properties: [.read]) - - public static let ReadBlob = Characteristic(uuid: BluetoothUUID(rawValue: "0615FF6C-0E37-11E6-9E58-75D7DC50F6B1")!, - value: Data(bytes: [UInt8](repeating: UInt8.max, count: 512)), - permissions: [.read], - properties: [.read]) - - public static let Write = Characteristic(uuid: BluetoothUUID(rawValue: "37BBD7D0-F96F-11E5-8EC1-23E070D5A8C7")!, - value: Data(), - permissions: [.write], - properties: [.write]) - - public static let WriteValue = "Test Write".data(using: .utf8)! - - public static let WriteWithoutResponse = Characteristic(uuid: BluetoothUUID(rawValue: "AFE458FE-55BE-4D99-8C22-82FACE077D86")!, - value: Data(), - permissions: [.write], - properties: [.write, .writeWithoutResponse]) - - public static let WriteBlob = Characteristic(uuid: BluetoothUUID(rawValue: "2FDDB448-F96F-11E5-A891-23E070D5A8C7")!, - value: Data(), - permissions: [.write], - properties: [.write]) - - public static let WriteBlobValue = Data(bytes: [UInt8](repeating: 0xAA, count: 512)) - - public static let WriteBlobWithoutResponse = Characteristic(uuid: BluetoothUUID(rawValue: "D4A6E516-C867-4582-BF66-0A02BD854613")!, - value: Data(), - permissions: [.write], - properties: [.write, .writeWithoutResponse]) - - public static let TestDefinedService = Service(uuid: BluetoothUUID.bit16(0xFEA9), - primary: true, - characteristics: [ - TestProfile.Read, - TestProfile.ReadBlob, - TestProfile.Write, - TestProfile.WriteBlob, - TestProfile.WriteWithoutResponse, - TestProfile.WriteBlobWithoutResponse - ]) - - public static let WriteValues: [BluetoothUUID: (data: Data, reliableWrites: Bool)] = [ - Write.uuid: (WriteValue, true), - WriteBlob.uuid: (WriteBlobValue, true), - WriteWithoutResponse.uuid: (WriteValue, false), - WriteBlobWithoutResponse.uuid: (WriteBlobValue, false) - ] -} diff --git a/Xcode/Bluetooth.xcodeproj/project.pbxproj b/Xcode/Bluetooth.xcodeproj/project.pbxproj index e51586ffd..a4a2dcbc7 100644 --- a/Xcode/Bluetooth.xcodeproj/project.pbxproj +++ b/Xcode/Bluetooth.xcodeproj/project.pbxproj @@ -124,6 +124,7 @@ 6E65DF912075CD9F005BD2A0 /* UUIDTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E65DF902075CD9F005BD2A0 /* UUIDTests.swift */; }; 6E65DF932075D29C005BD2A0 /* iBeaconTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E65DF922075D29C005BD2A0 /* iBeaconTests.swift */; }; 6E65DF952075D568005BD2A0 /* XCTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E65DF942075D568005BD2A0 /* XCTest.swift */; }; + 6E65DF9A2077C7BB005BD2A0 /* GATTTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E65DF992077C7BB005BD2A0 /* GATTTests.swift */; }; 6E6AD98D1FCE8E4F007F0250 /* BluetoothTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6AD98B1FCE8E4F007F0250 /* BluetoothTests.swift */; }; 6E704C771E95C32D00484A22 /* BitMaskOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E704C761E95C32D00484A22 /* BitMaskOption.swift */; }; 6E704C781E95C32D00484A22 /* BitMaskOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E704C761E95C32D00484A22 /* BitMaskOption.swift */; }; @@ -316,6 +317,7 @@ 6E65DF902075CD9F005BD2A0 /* UUIDTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UUIDTests.swift; sourceTree = ""; }; 6E65DF922075D29C005BD2A0 /* iBeaconTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iBeaconTests.swift; sourceTree = ""; }; 6E65DF942075D568005BD2A0 /* XCTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCTest.swift; sourceTree = ""; }; + 6E65DF992077C7BB005BD2A0 /* GATTTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GATTTests.swift; path = ../../../../Documents/GATTTests.swift; sourceTree = ""; }; 6E6AD9891FCE8E4F007F0250 /* LinuxMain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinuxMain.swift; sourceTree = ""; }; 6E6AD98B1FCE8E4F007F0250 /* BluetoothTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BluetoothTests.swift; sourceTree = ""; }; 6E704C761E95C32D00484A22 /* BitMaskOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BitMaskOption.swift; sourceTree = ""; }; @@ -460,6 +462,7 @@ 6E65DF922075D29C005BD2A0 /* iBeaconTests.swift */, 6E740C5D206586D3006589F6 /* HCITests.swift */, 6E740C5E206586D3006589F6 /* AttributeProtocolTests.swift */, + 6E65DF992077C7BB005BD2A0 /* GATTTests.swift */, 6E14247F206CFFC500BF72BC /* HostController.swift */, 6ECBCF0A206E683C00312117 /* L2CAPSocket.swift */, 6E65DF942075D568005BD2A0 /* XCTest.swift */, @@ -1054,6 +1057,7 @@ 6ECBCF0B206E683C00312117 /* L2CAPSocket.swift in Sources */, 6E6AD98D1FCE8E4F007F0250 /* BluetoothTests.swift in Sources */, 6E65DF812075135E005BD2A0 /* BluetoothUUIDTests.swift in Sources */, + 6E65DF9A2077C7BB005BD2A0 /* GATTTests.swift in Sources */, 6E65DF85207552EE005BD2A0 /* AddressTests.swift in Sources */, 6E740C6820659CEF006589F6 /* AttributeProtocolTests.swift in Sources */, ); From 5f93dd78600036685191b08dceb465d2552fa075 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sat, 7 Apr 2018 23:50:16 -0500 Subject: [PATCH 03/25] Updated unit tests --- Tests/BluetoothTests/AttributeProtocolTests.swift | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index 082505f4c..2bf00e293 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -18,8 +18,7 @@ final class AttributeProtocolTests: XCTestCase { ("testMTU", testMTU), ("testReadByGroupType", testReadByGroupType), ("testFindByType", testFindByType), - ("testReadByType", testReadByType), - ("testDiscoverPrimaryServices", testDiscoverPrimaryServices) + ("testReadByType", testReadByType) ] func testATTOpcode() { From 601808c506bcc7d3e3c369d36c4133c5d2b94a1c Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 10:47:51 -0500 Subject: [PATCH 04/25] Added `ATTMaximumTransmissionUnit` --- Assets/ATTExchangeMTU.png | Bin 0 -> 377487 bytes Sources/ATT.swift | 15 +- Sources/ATTConnection.swift | 18 +-- Sources/ATTMaximumTransmissionUnit.swift | 99 +++++++++++++ Sources/ATTProtocolDataUnit.swift | 26 ++-- Sources/GATTClient.swift | 22 +-- Sources/GATTServer.swift | 32 ++--- .../AttributeProtocolTests.swift | 4 +- Tests/BluetoothTests/L2CAPSocket.swift | 135 ++++++++++++++++-- Xcode/Bluetooth.xcodeproj/project.pbxproj | 10 ++ 10 files changed, 289 insertions(+), 72 deletions(-) create mode 100644 Assets/ATTExchangeMTU.png create mode 100644 Sources/ATTMaximumTransmissionUnit.swift diff --git a/Assets/ATTExchangeMTU.png b/Assets/ATTExchangeMTU.png new file mode 100644 index 0000000000000000000000000000000000000000..a04809b701ba1e427bc2fe09efb05f92d9921508 GIT binary patch literal 377487 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

#EAOy+z!Aw0Z;w$MfHX0n}~9HJloq#$5f%Y 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 z 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

9iFzjs3N!db`Sl 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%0A@4rDs3%iCVx zPad+8wSW|c{A(rFn{SUE?MB2XYgUT`&)xj5~V25SM6BEc|0A7ofbu*`d;(347;#@msm z^jHwo=dqrxJe`_eAvn=|bQ}_`LFDnbfIdh}IC|z$bj}+wrh*Y9o7)Cjlc<(b;9!pT z;|FpvlGuY^5&_OLd9!A)@`UK7^EI78NO_M(i%~wEO)_+H79LU9fcZ#NJNYik2k*(n zhE{Y*Vham#&6`6qzXyYIYXig3x+&qaSs#|ulCQWv1j+jyFS^c?-UiF|yvHO!yKe>~ zaz~HT#(n!k$tmBdbz`{&1Jh=L$`}W%>OK`iUHJ@we)4=S+)E91M&2I#+lbw=So^s+ z=UqN`?|Vg3ik&fG#sL5mq81+%P`_5%cIfbXZTgUsTZojqTaC?Jds<(lD;i z>@*7YD(#I47GGh;BKQ9A1sD{Y2;a#cX$u%$6h%i<6yg;Ng)-mOE9nzZ=LuN@4CmHd z_gY{sh`Mi9!uGKba5$C%JS&)LD@8w$I$qY4xE(L{;I+L7h@f~Co7 zdPgG?wW7eSO>#$@QH4Q{%r+l~08y5gwyHsDK{jcJ#&L-uW@V)sn8B`ukcv*`$3}AW z14X8r3EoiCfEy8>k`(_N-CGoed}K`uAirZymnp|6!-x#NB!lCo>m;yzE-=8%3nqO( z(m2sFNuP=*yBNTT;JxXW1a)Jghj~6cJUk}L16h2bZez^}((jOjKji7}xNYGe@dT*^ z>1nHY#R9xwy!`O?c{`W(8(VXZUSh31##ZDfo3RSRs#6sig>6Eukt{zGXyfM~oFE_E zpm$6j8{p7Kg`*YtQWBye^`4>^`dW0nfom?c(IuMId$M8!E3+L1JQQz1;`Kh ze|4x?+nb@xAx#r9?u7ww+Ob@$d>DO7k6+3Zq8j#>tPn5=h~Po@9cT!LeOaUlMv^ck zVxeEi%3eM0Rtf{Fc5^A59YUU%bHAu9-+xvk}9>-@Z*bt;e;y2=aL zSKpqqt;SKP*H9nE;c}n;<3cX!Sj_Fx=Ir)L9F`8k*5uev|9Lk_A|P-e=Z=R*owOu= z=p4>WcNtc#C2&^n<;ndzGmO$SYb;IRQg6Fr5Ba&9n>x=13tr~3d$HT1sII|0 z0<16*{?q!6UZPrJ~2!ZL{u8HLii7qzU z))O##Z8$fi=~&TIUH{sNgY6id`z700B@lmju$G)Wm4f`oNvjfWUZ}7!OR2ZXJr1DS z0x%ywmd?T=jn1e#UjYu9U*+wya(P1(B07s>vL;5!Ji+x<#f2!MZsU+sO60QLmGGz0dD!|0d&eVyD%dH-kyl_wk^q5-pak zzlT=47t~AR!*83AU@}7a30N1w!2A?%^w}&pmUR}A%fsZp^O%Ue_Yx}(Fhp)Zq@hR) zspF%tjlOjQ(1L55DHE_&Q^qmtUbfeOD`kAh$qBgo3PLOj4K zb|yD^pf&J#YjU)~*YGO*E&Vm|dl2||DLBM3vrC@kC#rYgrp>kQ)HD%sqQAeu6Gwjv zp${g30E&g~_u@U#YCbEw-qy?930&oc8e(*Oo+6TC8@M%~T@QQYJ(25q;;yX14;O&L z6YIG0$rC%o(hN>taVJEK1V;w_>MDG97uPhoZDg)0bN^UxzxpTW{4c$qpx=p{JMMVR zv65PBws_WLq@Mlee59cF^a}Fgvhn@Uui6Lf$%zN-so;WvsmTqyNsU+NE^-HgLZxw* zq`zWFS}af+p(KjIO2kM1J<~c-0WlGct4k2)`LU+N2JSS0}dMa7dA|F zJg()?Ch@sU_I{WqO6kiy9Xukn+DHL$RTxwle%oE&uj$B+06`B564Vm(3r8?@BQ8M@ zSXy3R-z%62kpjrEs9l9;TULVj-Lkwf##wRom{0)9+s<<@R3(cF>a$HYCri z4u!^y@RnAP}fZ0>Hq0j4mV@)tGG5U=(ug*^g zFA&r~;g=+65VSU2l;P;V@tgq--JBDKx%M5C6oM%KM{NkdMFJHS?3r`TJBLS6uA1O!Evr-cJ|*(s1l5qgUs=T+P=R?t1$!D6cRdnOhKX`*+KdFE(UyC z5ul?2EgfkC*5b}HiX8x}tEq5Mqg>F?E{$4DGZkM_#>VbplbQA_Ge5D1g8>;eWx@mP z)sOcym*sZ^KPu7nb})VL=FEJe^ZM4?uqEk#)^gA-@gfz!2|@2Q@Xbo03c-Q zI4@h7Z5{3}k5;t)9uxgdK)v|>*rV!m$-H9R?Em1s`n{Cn7vLS>UE^9M*)6RvZjt8Q&o=acvbZOJyrJupT5^>Ml zB^?{U(H{ygpyOGTP0~>Pp{&}+WK6W4|L!fqmFYTX!bY6w@?TxPd8k^1$qFnv&F@pd(+`vE}0}}#? zn-E6f$LPw74JQCR2M`0f1j$^rct$x_JXI8Oe+eB~#p9)zbq6CMWQ=5hxJL*qOWK3! zaQV{H+j*E{7jueJ!kR@Y{^4eB@*&`KLGazJQwuC^cid(5%a}8RN)I++(fUL9l-OCG z$0ITkgpl7a*y4>rDS_D=DF=^_nC(x6M2Ub?)_`9=LQqo>M6_19AZCz=u$BCH`Nq9kN}cXf z|I(6npkBMcfCD}H=Enccs`F_4L-05G!HEuyn^F#E_6UxAUyI$$w#*w>nf0dxTwe<_ z`EVvXA>X5XFt4zgb`)G~+n1S3@jMGhcsjIhy!>zjVhZEmQ%-g z*+ThtS@6UVv^>}rybz;${8I9+Wxo~6`>a8ekZn!w&8*hBj$S-G8DJ85?UR@wl z2{pLh6u(wqKMwD?8F9y}0^99(?1!su9Bn6y+vls}l1Y~tjh%Dt*G14n!o=M0}^ddcklT^a~CogN^`@y|8$zs2X!%+}b*+cD(PEH4cQ+I6O zjXGp_@1vbsRSgn}9s@iKlYIntKlZi*#LjvCp7OkXH|QTeOLVtbU|Tn`qPUVab=lZ4 zRdWAyGPG&$Vm?C;=fDFfeBhVB0}^Z{v-)T~-%!fS2JhX`3{9{*Z?o*dVs$?ze$JrR zYMt2ql`oJH&Ugt+jmBVMmf(|2l*}{M+8_W zQi*i-PgR!~w$-PXOXWe^nfogPEsB9#bBi>`B@md<=`hBsqMt+qa}TUF*DJ<|bqJNC z)`pb9t5yi=)AF!r)N-&S76ugRm!s&E};jN6MPS}T<@DO)zy&7WZod12? z`->_DHT$j8>DrG$Nd}ECliD=~4}+(Jr6K$f*=HUKlV6FU+sVTi`lgJQ}3l_oWay3RF8< zPfXY$(Z20FKQ9Z=Y%=w**c1z8BE;rK#C^Ew#Gs;Y?VKwo&SLLnT&OJ*jMw@_4~`OG zl~xnoiuPUInAMC}i72oVK(U1yk(o9~ac=x;e6Zc8q~PLEyaB+FpVR{1!{!8sZGgU# z;fip@X82G(qpaTU!Qjt2jSFnd1v+I6~Q!SNvzn z4azz?I!>Z)7p`?`MTpDWKj=P|kwCfA#PE8If3v3Tjw}f5e!Us>p3->UaaR?f?vfrk z9+LC;{&pk&UWaN)Z{INHD06^!f%>LibS;!}huo6nfX!{3+_ z!FxALiwKvG;-kczb7Bv8X2DY;4Ns`q=(cc&X`|{ z%@=yfeTB6mJSbks)o-S~nGG=q8G;-~a5P_Q2pCnH?m~?}%Qx$U`veYh+*?GtlI|8G z7No~p(rW%NcFTGEV5n`QA~2XC{-*MJk9Y=qfAoy%yTNh$@Gb3B{GQ`|YgPZtpSB*S zxBnpojJVN9+jll=2LO2`5_Pp)G9>g+X74FfsM=VxbcPs6>wKa{OjPY3^H( z9X_t;57wLlg@J;5OFNb#{&0-`frD+YDPvg<$HVl7vH*jCJ&~@OIUuhJFERg39|w@@ zoyNRdo$^664j+&~i6u*bph~_t@8XqD!$Z>c@{RM|4&D1D5Z90<45+_qVEI= z7BcYdOnH_2C^eb|f)J$jJ&Y2yW*o+PP&Mab&}b%NE!J4RWb3;Q zqq>`CIVW7_O|1Tv&0_k)R}C%($tacQ(S3jWpC;SOG4pG=nZ8%2NjI)p>Bvgi5FE1~ zr6G$hHv3WG|a){4Xm0C_5(J3^1#aMzQgjGhNC%>Atq0sh~0%* zi)E<*vg}&~Rz?et7~P3ETKp-5Vi$)h%=SF`t{}dG_kl4Oa-qfKi`M)M*6{WkF+O!cSIzWDuYcg#hm9#7>x1ha>} z)VLRU(ah+)(%suK*84Bg#ft8`T5%V683;x!o}~|zqX!uRO~)RjfmMd3O8$q$YkA_V z2vOzvb=&CNuA0Yd+pgtMt5a#`boCFYg$#J~({nXvFcJ{4{ztu8uBPQ*#gV>V&z~}$ zuVLW*!doYp#B=6BkVGK1QhXOtuM#Om@hUOEJQ)Rlfo>i|+GMKQyH=zGwC+B>Ec3kA{u!}eYlMAn3hrXXm7$w6%9l!&cgf@~_Z;H2exv9Fq|xGm$7Dfs@CBb@*24UgTC^{Sy* zO0b{As(Bm3UAvX83RN%pos@f@2JIwncdSsZ&9K-O$ol>XqciV~uywUU1ZSEO&v*c~#*pR`aJTfQ^69E!>Hs)UC)_i2A1ShE z*7^Xl#Nx+0#UrQ^a-4l;rW*e(c6);ejRm$2rb64>Ey?kefx;q)%hV49(W-kQY1Q$z zhjw-f)x89hUspDaH1=k8)8sYS&5fO>6GO+PFRT~q{a$$=tcOqCjt6jicrxQtPgvWE z|A=50tZ~v|%MwreB<2&=$^T3nhy_v%RQEe3!?5M=Yc7YHmrp=awaLFRfcvs>L;vsWKDS zNUiLyCv`OEsw;LUc*pg3f`WPTP>T6qILW?ZOgJKkKJ}7=;l!f&o?9^TBYkTBrx0X1 z7Hp!>3<%x?kGO_B2Umif7_Y%E*PlMx$@omHyl<938A#35u6};VkwG$#=v>aeaw#gw z_8t-{1&x86fafJIg7Dr%ncw`_q4e8h8uYtvBr3U}nJrm*+ct_x(0&f|LCCK`zzX&I z|I{q^qmdt0{hFGJ{ES56V)86NO1MFVCnC&me03kO-$h^)PFhn#OD5k=A-zX62y*=2 zSyA(%U7Xa&WD2Jy_u*@RHNgUb8s0)oc$WQeM%G&Jx6YV(%YoNQPHq}P%ymk9VuDGs z|l6NTRF)AF@(oY%Nsn;DZpM2Vx**lqSO%WUMK zECbngKR;ORsVMf;06l+&Z;6G9Urj4kD)}YauFT54!NR5e@{nYZEW-ZT*oVO?c3N~& zc8w?sHPZ#jGUh=5q&}bEM3;1za=HykL@ZpvzL%PpEM}P}HK@fKS`Kn6Uq2+0?521# zRVzHoUdwM=B?EB)mWp(`mr4=f!Doy7$%qV3)}u@{#v&JyllpH6rCEhzA}_I*is#eP zt5h9zpj8F;k-FRYyg#L<+Y^(|wtc&$sr;E}sp$sf{x#8&Kp4Z=6~^g&kG%Z8T5CSv zj;zJ)e-I=e9Ef9igyI8~u`@*-p8U2I2p&>y?y~3euR%`#@;FXVy_S*7U8uKFk{QqDrc z30uD5J#;ug^aNbiI`=*t^pNN~Svh1R-WJ zyIuGRs$NSpp_q?8Vm`T=ekG5X zr=y#dpS|+l5Qd>ye`$+C3ZiLjR4fg0^jP%X&o}3A@xJ4)IELCty?XfY$>dXzapc7$ z81+DDOQlW|F*HjM3yqzRfoRJM1I)u29c892J+y7Lv!$w|UQm8pwA1(0uzsW+PR5bm zyZSF0p7>;3Hr)q7dJ}Y6RKF#eTuO~Lc$UgDl*HEv+c1nKP+_BXVmU5OXI4c-_Bc7 z>z&8nFb{|pcbtt$&`3jZ$)DS~W%jTMHaH2f_}td2aPbM>Kn|}FqXC`wJx(YY7fw}{ zaKBZ&KUbCcU)gl2fsrtcvs`dZ43b0+kfsPfsTG~HggCLX$SU!F+4z>WQi@aL|F&!{ zw3CTC5jHOxX)^$`k^30go6n!`PJcK(z8eFyeO*_=ulBEw?ScEzFqU;5BNeTfI2&`N0=h;^W#k zhC+siYvuOU+7Gogapv=Fu_D@F9mDPZPoG@pCW3hq8V^Y<^B4>n`gnj zZ~iJc#x$?4jI_A?Z4dhf?xm4oN5)?|Y%`rkF|d;@L@$)Eg`^fp>zqBeaXC8V3ozcs zMr}EcOHa`qV*Zz`!7o_>^MBJ1W948oyLuo;0st;*{1AHqthy${MCU@yw(OSjP_#^D z-V=4HEucke$#EkWkjp>MycOow@({Q5b64UJIK7_Yk0UihBf8B6)cyCqooO_hrF~Br z!5FDdjIz43)dHrXsbD7oqeo2Y(jK@gAQP5 zs5Fz@wS68}J~G80f^>+4lHCV^EVLQxI$$-!CHa25<5O-IXbN{M&JiH<1Zc<2>T02p znO~nOy9(1to{bui@7bAzE}dhJzWIobd!G5Wnwo{_rOc)6-pi}Zw$fh*-|ACfR<(9@ ztL$|y`HD*Ij&B#1fNoESRQseyByDa-eTD2U4QIRB@x7i0^9+2F97?qlf@y9#W_9a2 zRyIbSp;#VNvx$RtDSj9LrSv-3`CrLcV0KV({UWL}3xOiaFwyVT;$7h{(TPJ}cE?hz zYe02j#JNFzON4w^Af+t8C2y}swwW3VF_Nd#(4P*Sc?n*_fh~rbxzxF;=@=KCx0+$vj za^&4MR%74y_RaC#DZ8n+tOzr8ZK;RPq)_vK^ThKtEI|Yq;jI}`KK<(}_ivx+%-cog z$ap!s-%u1!>NS4PRS-Ln0D{spHXJ;4s6-CwzP{zvV{JevDVitC<&qAA%dlob22U?F z*@f!##r8Mp3Jnd5I`%I_&T~3oG zUHA?ZgYBYIQe;*C+bos+zav9Gj0n7xy_CZ|MF|e5{|OG{z^mBBEqnjlN;6eo2XDbC zM4&gij5$^-S`lX-n9>cKmfuB_ssoi%XHbJ_nE4~|9}6>$d$)C5NK8cT#Z=Ct;7O5! zYcTTmx3bJ$aTtsj41QOj477fGy|ZY!sGBj`M6Q*>=h3=boS_>K(9!V|gckn|0$Zoc z@*w+*`))Aa9il!GYcSrECa}%wboGd^8Ft)NWkq-v*JOmvV$jeFqEx5dCfoB1)SwHM z?!|YIiY0h6m0?|LqWbI7j3fv5u4T1!V9ajf90Q{4#`lKZqGDz6h|9Sw%=r+L`i zXYYkR%;ZVNZ|>|H;UqF zq@{JBR)A-+TOy`EKe91{*T6BB?ZH^x95t=KwgZ3~*U+x>qsFDT?&~VldO!&TquRCn z{Kg>^wRCuVsy~*djf*Axp9VDxB>%!%V>>uEH1HDTk{MDd=30rXllarzGfF^}5wR92 z+!>KZ6Zd{Tqm%mYJJdn+XHLJ-`BXGS261d6h1S@?XPI|{cp$I~lx`@5l2V*e(H$aZ z7fY-xHER@))60FC9N=qQ;m9L#-nbWHDHQrT25vUKE6{7Jc3RU2}~W=P_1Tu2;0K| z`g~SlzkF`bFDEM}t|}1it#F$>OR^)z`1y*!EmVo)?%6YPYjW!HgHVvo=Fw8qcvegO z9EqZmY7cHciqr&uozD?V7N$6Rv)bygVnC2%blydaq<8;#&}?$-VT@Mxhj_+2R=km@ z&J1(LNUeRZT&oaOn@~72Gy3SI#%c2h_zz17vlC-IFp?TAJERyTEAMK zKlZBE-y8F|0%gNrs=U_tfLfJdUMRBaI~6Lh5*Fe0tEy>b5fmowdhA3^B>#i<`76|@ zhy2JsZpy*I+F-2jWj~BM8I-dQ;W4~#UtkYAoDT|1CWgXbqla#g3S>3=;)F&b?IkO1 z-PJq|mS063KEtfm#|cI_g|(p;Y(fi-jv$}PS3J*V$hI#7*AH}8(ADbRFf_>@&`hd) z);C{OUT#o-TI?n4S?_ym|Kn8yC-OHcmvjUGSnj}G*~;JZfa8bj&ApDT*fOb{NnMk#}iav=T_DiWT1$Xu z?}3S4MT`{C*{7~j4@Nq~YJLWw#|6HvUbevTT?YjMf#x7+Ci6$j+i)syA%%-j?Iis{ufMZ1&|dS9T@uNd588rsArEM$^b=Lri)c49H2J=Y`*5vZIk}rJv z$p%+Fwl|7qMIjD7qC|klCn!EsF1QV8Rc7-{H>#0;cxt+AXI1$QsW(Qi{^kmI=)3`#Inu7;BUQ)0kDP_Rzzm+HOiBHxa94L|3!O{PA z3$hm`F!l;Uh$A~p@h6n26LnvV-_`*DZ0#QtUIHENC&$IQ=hu6}Ur$9f5$y?`h%CE? zkV0X)jPF&ilT`8jCPjj&6QzlX-)hp3<70mRB1?K^| zwr$$dDfG2qLg)3BcBF+d>ux*-T25|%1dFT}5;Yp*?gxBk8Kh~I}=$A{JhEa`q3Lxd6Z{#N7U4L*=l1Bda5k8z~o zD~t%|c^&R)lphf(MDXkNgvHj-7lQm~F}6Cp=*~AtU#Z2_AC54Xjfd~2E$Hcm!Ch{S zFFr#!UC~U~8ePYkwgAd%#_{f7lMQOFBetlqVi>(LI2@3Jyi4Gw#m$b)KNlj7(_mWcU!|df`Rg<1T92e?rsvAPLDWI6A@t8P@Qe#xu zXH7ckn?na?^ggcAW2yaaC{C zMGZaX-HZq8>4BmRT^i^O(+g)k6%LJhz5-hp<{SpJ`M-jcm*Np#nLk7Xt4FTLA8R5u ze@wJyelK|5XIjWr^tn|%xJv%aO7hE&<7BPw-ezs>3Q36iEsyqe&7`fzpjFI2rw|A@ zjfr+Cc~}A!@LD$iUty?4zFpzTOCZEi@_l~gEKncw=@{czAV~u9DcBrBV6HSqjO0!1 zvcH?HdPPGRGm#4^$o+?p;E0BI<}(1KHEckWPnB&&L^G5f(f;xQ;KGR3j}_~v^p!~_ zpIbmgk1p8Me;+%t$4kzZvIVZXf6^8A87Cgq(%@k^3hqXPaJ*DnYCWoIF=^}hn8#hqWz zw6o9r5(HhhG3T~L`}O=_|NBTjWf3q%zaw_JPD$J==0gORR3N*6@o4H49Yh{jg3b@@ zV3{P^S(00eCZCBHI_60iuqQgZi6|D0PJ@I39({SH;?WM$(iz-YRb-iFTE$pO<8nR+ zl-oc9gbZk6Q%cy+{N^sjAK5m~bj<1z3(M&<(XIcjGHCyfCH`LqYeON3i6{io8=Pxb z`~UR1;ZMx@-_`-&0&wVWPZPC!;h-S=E<#;g8D0fJV$ce>3<=34gkr-OkYSw!v}lo% zi_FWa82EVv>x3o!Ku?lWa8s#v0O$=ONjR0BM0|O+2K=iq4^wIb5tS$z%E-`7@5p)f zfS*V1uIw|MM+|+{NJb6)t_E=oA%?miaD~^S{_4m_n)CB(8+hhvdL?$vP3YMT;ctvN z>fL*q7}0Oh0yv`{`1;GQORAlPs2uh6>pPO?MCoa|Rq6>d(5ko2bXoX>75q)7Pu~z2 zXOj^K8WqJtiY-`=26@tpxarrZzifa(ACJImcjeB8SfIM4tx&u zK!(?y;sJkJGf3*jYgg%{tpT$W%zs+xoH^4hE3_|pm=t90Xf`E%nBnAb8EWInUXn;f zvAg0+aZsTQ4uqCtoM=eqv*Xd&u-`zbFPnjp{Yw0Hb_u)D-x<%*y>bG3GxM|Y;SJIM zw8)>OhFP}wqBySC~^+d-}0SSrcyv8Aq20BWc}sY zsrVm|8DVAW7uC1i$9YxyFk3l?wC}d8KDn5lN(OcSL+9pd(=YOWLaQ#D36#MF6>cqK$WHi{jyR!_gyYA>bP%f|zP8Lee&^8AHj z82h#f;hI5I)G5f;gnnq-(`nD5K=h2kQE&RAotChsftNCF%C=thXT(qmHLkrJ%-~7% z)D=GZVv~wTB{u%pLQ2GB3zN;b<=-9!>h37AddNtj;&pw80uFbRaW{%JnDJ1PC6k zCSVAh32GnQFb$>@vBq3f^N~ZRKP1K)&y-Hm%97rCMz#n9Mo$+J_>tO#Mf~Lg$Ot|a zWVtw7I}`j=KDDx~oHkxIeEuosrNba>_QMw>|Ie>jc?O_Ym?rY8B@@WS`X(?U+gm&@ z?;q0ITfH(>NDIh6Dg3BK9Yw{L(`&BaD#;wa$ zXW@>jZzoyEq7SnywBNwQxL7gZ_p9s9YzpNUp>iH+E_CAdB<0^mRjM5HG@cJszyDTV zS0HKLqca`rS`mZF0#`tE5>7$7L(4)+9-cSQRRar#-8CmyP|p)N5SJ6B-pamsgUbs?ow z?w?Ad*FlzX?i!Az2SGv~=qSol(k?x&jL4<+>c|(+0Tlq!i-vW+PMnp^IH2dBy z=!=ZmFl@w|pEScP(Sh|g!~80kt) z&8<Qg+&hWKj%6INB=heUDvY6mQ@<>;1$PZGg2hZ5L+Rn zKV0G0@AbcJZqB8BRk-A3Hy8m|K@E#ipwvI^6u$v^2Jz!6mG7v5u6kdvJ_GREot9yI zN6d;~`6n4px!O4D=b^bEH&ge$Jhhems&k#u|VXpae+efC*AP)!J8)-x8RSu^zPO6K58uoY@7OtwS#-Po~Pcm1y?fVhbp!UsxKIIsyxUS%Uk>~1u@YRa4HJcAv>A!V~g6V z_^|Ijt))aucYX1zF+qNe^)!r>R9xJ&5jR|{9Ct9Y!oQ3<_-od!Nj{*KrxJ*e|L90m5@0rD=mU&DVFn*m#2 zLE_&o-w?d^W1iO}(@*gp6-FP@^mibJQkX)zGllC1e}4b4^op>lutZpDiy9iAPE>V4 z!z-3K1^yLPi)$IXai59fDt*K2_H$c^`}I_jT@r(o!z^}C=H^7X;{0YWg$;|1f0Vgs`rOxmmed-+i!dj^2-QBA^q ziwJ7Vf%Kf1Aqh|eD`?p35f9?X4^+;Q&Fu%0!Dj>QVa}?k^$coDO)lE;(hmQ0blaUK z={7eZI0H9g$8IQ-$VVQ=CwUk?!x{JQ&`k>Cfee10ibF3(=O9_F?Qvy2n(4x7d?Lx0 z@q%0)%&enU9{BwezV9{EXa*a7>DULRsYtCe8%T@1LJcW&2$#!JlxJlFKX-FNrN1H( zBx!wD47zw{kO*#s=EQuy^Z+z^Ht(BzwO0k_KdZn$j^-Ae>+|Fa2lKS~3Wb~gU*j=~ z-}mT~gK3i2mNEdR@q@q!2hT3YI#VgZvo+4DioMA)J%Z7<&C|^J6VI!-bsH$rlyJp* zKc35f^Idn-8rc_SEqid8LUQZm2q(d>#&~l3wtfnOoRjQk=}oRPEn+2{|2$j&mq@dgd6Qlzo&6|0+=Rb#sqiTTFJeJ`i@GD0)MdJ(aKnP?ExLk;dbZd2}MWl$i8 z8pEvCN9edJm$j44p32E646-sU8p15)pg+7M*wT$auRoL8s0~69{@Zf0clfa)gPd_) z39?c%&u!Yg^yzA71O7ARq0oBzpnJ32zE1;wC_~EsI2&mt|JT_Fe#s07MwULW z=msbxG#4s7fpU|OGLmft$&L~OAr;#Ufx>3eL}Tzhj0QWXPW9_TZ!fjGRw5U>fYW>1 zEozt6jHcVb2nU$a0v@$ij@Tj8cr!~TU`6O_9G%3r3)7~lf9;DBE;wm%1k51M>x-kg z+}j^z62+kjCJ9C`qeK!#aeHSqA(<){{tG4L{s;*~bGc|KPb~3&;q@TdJEqR;n!7+l zRWnpq^k0zy?~1^Q!V45&OAOJW2Ts%e3yeoJ*v6Lm*l0Z)=X0F?9#I7nqU|Ve7^`z} z)^w%J;v4=59L99RyUW8f5zr|G#MfNTdi^fS9mok}2Xd^4M_^GrBlrLMK2Dfoi=S@f zN5%5$7gwD{r?*L?Rs?WUd5(c#{@8++O~wDjD=J&K0Orp;WRPnApY0P;cv^PB`xe_!>!*0FKAY(>&tmn8r+&M^4HXk;J5*&sU7+q(h`Cp(!g)1yBL_1GSvVnt}t z$|P!Kai30fe(K=7cbUL`$PW_oxpbOqhBmwA-E}hcC4OH~Q4zDI*d*7HJ2NW3Khdp9 z{QUCus})0!&$=uJUp}Rzxc|qahKf*>jl*KRX63^m9;Cvr#;cMO1PhgYl$#*=?EMxbdZ_*RfSehvL6KrmG_Ah{qq8J3j2KkVyakYm$fn z4q>t=&iVVA5VZPjHj}Q32R?p+M0wBft&);5iGQw&;^s>&IMRN)q0#$=at7`whhPP` zSiwS-87~R4qEzZW$fd%0Z%M2uEN3QX`y){TmAH+fDY(>zQ+Td?w`D(LC9ANE>ZBO% zPt#Uxc}WGRTJHWf+t*W*TAwM8Z>_#{PA<=}wMnG>?>8g;fnSe|j_6u=P}RbJPQs83 z7!%%UokN*%K@2w(&}ZU7Wj1Qm&pQ*yM7W5L_EWN`tWbZLOs>#fTm4P66@4ozc{3y` zm#b50Eu6TA5^*A`kS(9K$!}WI5(Hu<0!BPB-nKA+GDeD|~ha7@+;F`^m z*TF$5U)6zPnw6jUwS(cn$@^xx<%NA3x6SOU(b~oGEW3FI%L*~J4imMd|KcA2^b1H} zTZeZ%@_`jt@2Kg*D}4y&%QE44M~&>8AMkFNX#` zV{HWgbFv^MA7ZyXb$frYwD0I!xU?0V<^_%gUmT08Crk(+(ZU9Gl@r1=;hrL~t3qJr1o-%cQa+c>N)#?k@YdjKNHlKv z0m_z;3nATa*{?o(k&mm3_e;%%=`%(0y@j0h%{{*^dxyRlUvDc8f6}HX&-mT?|DozC zu(lvy1hcpb`-9v{;NH9Z_BOuZ-v?9_WAPv&+{<-)1-sgVs zhaYFooU`}ZYwf*u`m$psS)pnDvLiG>qep3N5(R2{DKsNd_8ks#s4KS50(jxSzC!ac zzQujbB8`Uzn)L3_r_Q<%hy^R!Phk&MM_oZ6S^O2;_~n2jFRqn+P65u#DnTRFSaDTW zqn+#GyCzqo{A$jgqQ6 ze$T(Y%%f}>j!F3K3(pp>VR)A=sP#A`lOYz z%`3yMgQsQ(TH(1S_ID1>3&4X1uzgxeAR&kDxyM>Rfpysc^(bucqgDriyJa7e2mCP* z)G~VrG8}^;^;snmq}up;?Xbh;?$GV7J0!cMyMVi=(h+R@wGrt!(z5w_;jdF0YT>;} zmwDMO!yb4^n3KwxMk6TFZ%WsmpH%dWg?=j7slXje?e}|}iEs8cC6m1ls1=PrzWg7gb_MX9fdQZSqfirWx(oeqV%Ft+oayo$-tX$?JP{=OVVk1A zdy|{{c3zSEMZ2%9IN^+Ived{Uj^n4&{MGQz9#ze|TKLBv+}X%A;?V{?4t7AV4rzvE zC*4<+(|a?0sP1GOeW!CV5OP7s+m!8-Int`jq`||~iGi->I?v2jsYN3 zL9pV7xbirSO@!~0U4&+We5_)`ja2fL+Th!fx7v#@R9uv`Sr6LuOm~=n8nRqUl;F@S zj_9ggD$k7Vrn*;-;kx%EGmXd|_PPS$+?j5n&AX;w<_%7ZJkY_ro;r(*AAaIxr)SCf zb#88J?E7HobPpFXi|3%bTID`jSw-9Mk|J81u&YjvfyDVBwV-K}X}zS!z?Q(GNSUD7 zC5;~y&%-PQ@G-mE;)8$R`QI}EbJ5;3yFYpGd}`={UrQ&);cwS4RFHrS@CJT=S{8%s z&?ccO#St}k3!z)DCyHK-DYDOKUEgF||HxJphZ<+cZrvK}mf>p8=-gkn%-aRpmxxqa z`}lkvMI6tS1dtLi?g&88a3GBn<4;NR*LjTb`0ij5VCqP9zz)lO4O;qUCW};Z;B+*r z7$6k}eRUIb)KQ*4kQtJjPif^{|E0ZcKp zw!@o(%s_zGuZ$&~aX7S4k#Zw(6F2)3Tj9+2V&wf*9;fpLVN0?Dqtw%lGhHT{x7IUS z_Y%b!-|8M6`&`p>mL7MOg$jcUi8ez}aVTA4*%qZEe$Uid_lwbhFbSpShjRfC0{;-w zH56dE;mnvaI}`JcOx;FrJVPfgc{ab%g;VuJ?D+3)o`*B`galvb?uSFUd>6idUf29* z5^Bf&L|2~*nAU_xwZb6S4=}ESQv^4fPOBU@X(m^&hT_I53oqCp3n1 zGwY=RD?Q8QtiJx^593co}XlN5*4KX27128ityREOs^mt8v?i}De~ z`UWL-S)QIxshb5z%u8aWFfvfQK8n8XyM-Dej55e zQ1D+PG9Xih0GZ0sFTa1mM!?)6`Fbc!kYZOyR(-K-o~4ML$*uhIx0nODi41!Go~@ab z^58iURBwHEFSI|N#=8ngv)mlAgqR%c{0*g;_$W%@xfODlBtiyh}$|R00N;x?zy7Q)ebfQ zdeM>Dv2(gKITqfA8QXa}Ube&;8B<65yD%&AjBUq@{K@?w7)wyS?jJ9JR@$!H8b9+V zT>K3?zm+1+9)YT=AdI1Ec+g}imK^}L$Unr7whJ+c`V*mTZF}>woGVS`PX4#02afC- zxE0EJxEyQ)%#BinyFJU{{63cO5p>k4qqXogFGcptPa$2ad!gwB1u!{TB+Qd86ij0N z8*>h`_OAgJ`KjT2-UIAt>^r|le!A96;p=BI*>w_cmVxihF3ELg%heWZ;!b|sm++pE z{3%tynyAPgOEb3#0?9yw2~~AqB@bTnV?g+8Zm?Oc2aro2vpq7X@$b)kliXn^^vz0^ z*!gkq64AX6{AKY3vNGKZMbGSbIqE&y`oka;;qX2pXY%#EP(P%ViTC}Lzf#_+tVQz_ zg@>=5U7l<)MX)tg9!ARTKn)Eth|{RpXkr17tBNu6rrK6QV?#j2NT%L1fr&k{kzPY+ zePgEc_`{zY0D!Dug!6v=^Eqze%Fj&TSyHqZ+5}08_zm@apdoN@<#8hjHcy8arhjdE zwWIc4xwX_JEWV*sXe-?JdT4yB(?eJ^Nm2nwO=lQ$@QB)4Qu`;_{xM?o1>&w=wi9&jYvBT6K z#@nZrUY$`quK)n&zo8%?-0hdN-rJA*y+)J%XV4Q-{DsDg#{bk=^Ve3W~8T9W=@v#QU+N*8$Wset4s%1a= z2djb{fnpjWE@_*;eq@68|3ibxzD`cz0J^S9h`a%!oeRJO*e~IRpb-^8?amOVPWVO{ z{mt>uxTA>mt0OnUW{wEA2PWw6Hi4y@o9aJ&9cT;Fvzuhp@kuzK>&0Q1B%B_(hIAiF z6@KmTk5)|9i7@B{B2CxLCYLzz+Tjk})i5*_4t}{R9hTuQiwh5p;7Zi%QSwwG(p7Lw zHCH=%I`iQVGzCBu72 zy_mlZR+`=5HzEwASnU_;Sv2ggC}_zI6Z8vZ{jC5?7e72xJcAf|E5Q1Mzvj>v2vDEB z@D0{kg2sLcmw7)wcmmMF{sMx>9;%syI<0l;a6u@V_6i=IZ=-7H?er{+AhGPMw95G;YL{{)uF^2tc zw2+CXsAAli30a&K~bA16pXZf8`2WnFP zEsrWr%{m)}J1%l@96+MJ1uOtP+uzH9HQ63M{-@zlB>Ma-uo5+HQi5KBw$Mw1UM*4I zt+AXFv9XECf=*SOGnc4G#83k|AdI;DjN42-_Kd^jOf;k<^w60SOZBt-&6FEd4U-Fy zJ1dbmd0L*_q<8x=U5Tok>rm5z9p89}zKHWok#?UuKjzP;Lz_lN+=pF?XEg5K0iGf` z66kfa5Q|^mf+eI`~LY>()e>TIBBi8J57 z@8Z_b`6{COt7k+@)MQeyNZGlr22lhyOuyExE9E&dPgM4$u`d$K(O`V`t|#g0w41z9 z{kVac=2h?POB;PN^_)LdE$pGE@3z)&X*K{5XuLjM)pbIawULWY7OJQLou2^cp}I#! zQ}l84`rN0~_(ofpzDB0)xufU%eiPNWIsr%Y$#VKCl2i>rM?q;7iehf!GDHdN5fwfj zQ$mgU_H8R+OVPG!uMLVB{#<$a4KUaEpkP(v&Lz)QI?j*{o}_`0ivlKQ62^z9QbGJx zB)0R=qNBrC;U8zRh20lWi2;W!gBBY0p$I>=eEvFqnzJw2#|c|o{nLZvx0$4tg?WLV z65n(K)SCi4DX)gFU(VF*=*?;Eas90ZKHMQM+2Cu7GipWZ@n^teT_cJYcxc74J!@ZR z{bHzu2emfr)dC+@(}VMguw!nbS&t(TJ^2ij-#Ps(v{w<{vYpU9v6Bg;o_Hrk{~B_; z{o0GJ;n)Fzu@$FBS16LQ$Ij=4f$N?}z_CPF+5C2PgHcC&`%K+cdGX8@t3hD>QK`(d zNLjQntuuw}=bgiq&(#3}+}z6&weY^47EuP`UJ|HYg27~0NN-3xw9U)W?_TXd!+mS? zY@D=^2tU^d&%por$#_-ml!;OWpfRuhtug<3*YA+Z$5H*BqXXEqCZLiNuapk18do-J z=Sdx=&t^j>iRbecf8bLo9##S~veP2ky{#@wf`afFH{yHB5R8y#Hq-v6T^f3ne$fq@ z77kJ~Ld+2kYLNK~}Oey`nJYDm2oL_?;viq4@MiYmUYTQhm$h4kj z1~66Gd3?vBBhgP6E2N)C6TwXRVM_u?WDhKy#D*^~nXG8EU%5uPCnSu3wkE>X4B$7q z<$Bv)j#j^@TOGCNuJf_K*w56Fc(Eb({|O6VTI7Sbki=2Z(T{zI(f{NuSUEd?svhv@ zi5d!=z}(o#vai?G6kf-|c?sl@rAzSje*7@SUJdo{FvaQr?mx)0l+>rU_%^PhSE`do zcX;|auU#7+)B;R-itr>R#r%uR#*F{WTY1VkmARx=^Hqs*7cJ0&;L144E%(cU#sw>qY#T?gJn?RDT zzO+U}dFIXJ^Ep}1)MH=RvTQv@J*2}`lYvNGTm0p3c~@A4TQR_7 z?fq3h1`>=CHk^na0v}3@S%WN_$_8ig+JNvSW$Ryzc7{<}G7lgsKEgM~Lry>{)FXiC zgsSFAB!WLkZH!Lp2MAOck2;V@M|-Lfzu74+cdsVGKYs1Nucay4_rz^XlD|^-sTK{Z z0ZoFgt>MZ+RI}svr}4+3a>6zwTFme?kkM=Vw-ta z^&AMLihPsoZ!?osdAp_0bmfP#&%TYFP@%kPGp~Q@+wm{d1HpdF<{g>n-VJ10D&ysDd>Z*@j2&usO~?J^ll_{^GZn$)v{dp-+6pFj4-Oh7Ro7O#MUop4csct&8gu)O?-R{c*yU;lF1(1Fk0* zJ6_$Yg)ymTE2a}C1pzde^zJzSy$hU^X%A2D;&abEQ7;kDuhQb)&RJM4!B?1>yGd`7 za&Yo|pZElbu($eUE}G?j$&NKwK%)9n6hi=$pso0umSCVLoIU zH4O*`CP3+FXn4`xgPJxpfhCI+JuV|L=WqH=_g2%PqS|0Lq0F+;G_d;ar2T)d8Uz8^ zM|~idF9kqs{t|#1NeljFEy9K??I2Prmj$s%LW4jcRuN%&Mtbl!wgV@p;rj2!V?HVmW~rC5<)fta=#-&JTViy!O7!T@y>X9IQ1~?`&qq=ef3h`Jl3b$R zN<5oLuV8XwKmJZUvN`DfPL>*(IE+O0ac32{gc~<3uSe@TQ@~+zzR{tBvWjhodFKn_ z@#nO0gA=}R-dx#eYXgS$N+XAbY1f5 z7{o1lR{lPfg3BQE(~*_qqLeF8G}1el=U1U|@ZEiu<;Jy8Ds?JcXA5zSYvCr^WZi;F z%j?}5OKA^s5i^F{T5F+Vv)fr|jcvgkV&#EAH=%~QHyVlu?ImK<_Zg9-@HZ1W*x^rN zsV|?tIXU}q6UT`2t-`bMY5$k`;H;g5w?V}NObLDgqWU{1YImh-$pr%#e*iWJ_EZ7b z2K?7|(*dN6O%lm85;Wb13#U90RsvL6Xj-~x$eg&ao7Wt%9EoJSe4&TIBg@0ToU^k8 zhHt4yKcu+Z?Ls_$V%B7J4)6@YziKVR5TvnJ5kFYB=I5YsSR!~KYg2_fP)B3DB@nhy z_Bbx>O?fIqGD->ee>XTjlP~jz+?lp_i%5NeMMrop(_!d4m+Lg=YLp;8tC=+eaiUv6 z-#VX^ao@`irDrQb_mx8*T^bmcNGkSgF>=b;{Oc3|C=q~{L|p+hL-#_UQ4d@B;- zXUf(8_eXpM{D_b-@bJ5X0(AOmx#X52sU0Q-%^XfIe710Foq$hjaCF66sv zBjVY5m=UHQH^4r?)H#Aj;>Sj3lctC}G8U0Qv%VdzA*#rMPmPBsoA_8=(WH-YLOpCY zMKMK{EmB3zn7_7APXU8=uu-wfF+ml_j=Ng3lZkmX?Hs`*1_wK3 zTk;OM3_x58)O$bQ+1|4=aW*}_Su63>(-{@jI3rtg&-b6-(6atn|K8m>;dZcpYQD50 zU5`qX-IZ!M;{8878t|u-0wgA*n@jQ__c`T;89IZx>z?)dkfP)ZP>TRUn+YRmasXI> z*L1B!PD-lS=C$VrLZ%Dr8a3%f+@dQ`oM;WXfH=GWjHw@*i8UU4Th~m68J(y8qLobU zzGG)#=9{8%Byv@vj~Jtfs{-O_kj1X=@6AE?EzBt?e^dOHcP7S*@`@=e`HD(tEQ)M^ z#HxApyZhO2nsDS3H8FexTT}ds&0_zjvJxBa&(%i@c7D=ol^rV?pDB<9V9*q;v-$Xz z)#*{0TeIk8iRooM57;{U4`w7m6n9=9M_NBxAOa+cS3j(u!61AOqP5Yb4^Yg;zEMv> z0lkGGWa_wG1Y8_iGC>Y=!ye%ZI&?O>?O;bD4njIr(UgRlq!S=sc^y-8b8oBL_C@A? zO0}U{A+JUsMNCc)MTQQ4W0+5cms^3nfRTyI?xf`3-6x^@aH>(Z2sXMo9f>+2RQKxl z5$twmu0O!Qpl!2Pf{BTHwPfOMzo)hOO{ikUmMVo{C;i4y}%mZ;@;rR?!|xIz~oqClV+zy=ArW)!<(DY+dk zOP%-k8Xtms(`k^P|^o46Q9$BOBMCV z8xSL1Bz=}GL_97Mwq#_JG+H8Qz|1 zq=^Qd)ExASFU63q!bair;O>U!G-HkAMBUZeiSo7Brem1`RfJ5O-0G(1|Nf|e)He?D zdk&8}tNfQdnM#xjQw0Dd9bg-W0$MP^??G=pVja!W#O1~KWN2$6714e?#I`+SV6FyO zNmeODFb}Y6uf_oCM7@J5A0{j}q89f^%KWt6`@l@lag9_v`iMu$q|@K`p-R~~I0!JURWYrN^YmK! zrKW}r))_dlfjUBjKXp1SCGY9bdHdwL+M3@N^gBhQXonOBD;Q6r?=n&}vzmw^`z#j+ z$NXe`1iPYAVlt&QIY1=aWe^%w2ZZmZR^^tl<;BWD=!d7=Mxn3XZ4v#_NQGDB#F|2eo4~ZK5rsttU~MnNczMhI;9Klpje{-Qv1fIXl&eJg;pljgn>0an6&+P zMwLV#q9rm2eF!EhSLb;Y0B1scW932XPGCJd&hJX!g07oIcbJ`q74+(*>hIQ$tywa{ z|H*K}Kt%@IsYmb?+eOLu{B|gh3izOe15oiPFrK0HR)q2TT0WSIq!+`vZ0!-7w2G`; zApPqE=~vs{pRP^kZ+13MzY7Lt%~l#s0k*Jo?%+6s~90WJsIe02PtwitN5clv$lZgzA@;y5wB(Ac?SM&Kj-YLc?M{M+XqT^<{= z1obRIXLSleCsk3eUy4gNn}Sm^xZ>-DvHT6`f`x=yFtLdImHZVC*HXAsfyp|7M4ut1 z4gM}<4T}!Vgq9#fk^w&;7&{TXux-9&!ju?4*}B>)rJ0E9g=b_j&T}Dymz4C@+!~E_ zKp+E;S5g)2`uh6E8!}Qt_hSr4(S`~BT(M_Vy<+1Us~Ud`GJoe20olB7e5`++mfmMv zS@xD$H1KydL4Xu8T`w>N=ER4e#L_x_z++yQ8cK+&&BsbwC;4;{o<&wpNn;>8f;7=w zfGxNKyiAVUO~FsDqfClaXhe$C5hOh~4x1$#0pY?cqk>D>`hdMwA@1JMN*MYoFk{gn z9)@c(?AY`pP2!>(SA-TBv3EiC!es1=v<%iH_S9g|byJW#-5%H7D%YgJr{fuZ??sb2 zZE1o2;!OwZJ@U6H!l5gN1GUKt?NoRid=cz)$W+dE*Ed^|2fdVx{J#1v=mqFpw0_H^87-t;EqK- z%LeA_@s}AfrI2`Fv$$K6j3K8mF<>`D;A+?`w%|g7evR3la|0kKlV%8dzsn+#u5G_q zjowy}yh=>gv3+#(K$QJ_m>Vsk`*72m15J1suz>>^dL-dK+XT1HPp zMnd49!|-FDj@&u5AN8G<1YMPEuhHB$CmUDl1lWa!MkEmv_tG@yM?T?T$2ahM&(KS@ zPDB1&wwf#eqRQjkP;>aI2rcn7F1xThsthnStrnxP?haWe$M-b*V(0)S%9k^(DuYV? zOKUyg6(o=t#kP^w?#zky|Et_4aW5Z->5EIy*A3axb;YJ8EV&(o~{K=yhd}uw($Ax!p6Vr*2po?5N~>z4{^<(%M=z!A;v*QByF4NE6>|nWH<~nL zDx3EIvR0`BV8K7uDzSP}f~HOl*dM+q;x@$lWYNlEJ0tb}+N;mKeR(xqA~6GB%$Kks z$~59?KMct_u;jhS#|>bvGH&9u)Q^bgxaw271a@Gmcz5AMhO*Gg&H#q2i4WEtVQ43< z+&e*&0~?BFYV4DYpjB<<0=<6|;09`+W!P)4$2NGG z&>lr{UBF_EVt4M-U86N}9ST|aBcgN&rIhW13DB{?sz=TpxD?)HRdtG5_j()50PF%1 z$|vgQ$uyh}ed*>XL|=9KTPg!jI;G06u15_$Ja&N1&dBcWx6jPs8!ergTmw2?c zs8X!A2lsc*Q0^cp=m!s_zvk~5u-8!#CsF7&zrDy+(~!JvAQVnuNzl!`J1xnv?Z&@} zIP?Aei;O7{+-dtpA77Suog@rv4{X!CB6FBW^g4)bfNL{Mo@CzAPtgJ=v)_YrVOytU z%4@24zWq{<=^J?O?wIR-5}mn^J_MGcle%acZZj-pG-WQIQ5}j37^LRkUJ!5*Uy#7jcgsap}gi)q1gTJ3JCgw zL=DW$%*21or%Lv`ei=t3BKnJOA`?}o@n0bxc#yWn$UaZYC0--~2l(CW*w7FRCxDqO z+8dS00bCwOaO5wbu)lC~wU$ec0IN|a5~Zw=>;T#Aql3~462_Ed1QUO(tW92`?9JkN z=i7I{LL5OZ*^?arVY~5(qLE%%i765{#Gew&pwZljuaLfLBHe__*+Qg9^Ushi!|cGB zI_4KWB>tVJCBm=z`0pTeQdarlzkeJA3R<#W%mv-fZ9nXr{LCKjL>7ISrxrfWF&mvh zx3}njq9*u0EcktPBL>C18Q^WF{&j^V#Q{)eqyVlK@Zy@d&i zzWeveg{jp~>?$A`be@@1@pBRfO?47$A7Xx=6bybGy^dV_I}`pRLSZAmOFrIWpH-k9 zkFa$6`e!r*i0+C&*%9xUGD`{Is|7<^%jQ94q(~1RTcI2Y>v z+FjU$1jDchyX#%oX%a=u6w@|^SsCeinMr;F9HvKOv^T$|Ae>>(8N zSLabUge`nl5?5d1DGR&l2?8`4sQ$$;9hyR%-J9Q!ZK&pL(;pR>7I}uC?{@i$hRuvD zX4q|3W?*x$?+{G%7SP}alFK-hNYZtmET?C>7^jqByXzEE1@PvUAi)EU_4Tp z;H~#J8PNpCKKeip7FLN62B0km+th4V0zC)+Zr!L%&=w{OnSJa`A?9)z?4TgUDD^U6 z&%xZCHv&P}!#ua8c|C>+@Hh=U)g(DOo2 z6Qn;GN=6gU<>K@Ij3Gg&6KaCh>a0-3cP-eXZtgP(& zK~wjxX9J&&r)v>FHR9HmM3o=X`P|VpnS*IJ<;j9^EM_JqR)~!utYGS^S{(+bNW;$5 zrY+$xRbk;9DXjilr#>mRAsL)=Avbex&QOzlYz1C-oD)uG(G2&iNETK+q6iFGlmd_z zthCERKX_b*P%>Vt??oe8L-7e4eRY5cEBDc>?>77q5C>lSFRfGBh>IqJ2xQBTKe-qp zBD$cZjg5r|Q?geEi}m)djtU`gR94|oNvtpLhLe~bk^RRb)MUOtY zNcKu&g8NOHfV*$r=Z(YsH`KhdSP4k>TIw&^ z*_#o}R&c57N`=O4xSC2a0^G48>q;>XG0OaJ+yeTpxhhn$;0nz&S1gi&3muv@{*{`< z@xU=abix0eN^vsC;L1eK2pKxHt%o;9PNewwf?+AYx>yexYM{fIrhrlixy<6whklls z_tdx#X75b{0eCv<$L~_ik=FCYSEg-;#aM+sw>ZO3Li(*o!?RX^x3zGLxy!on2)zJ@ z0SUn}5v83L@5VY_{JFziW#eYrb5x7=iDZ}zA{-(0XO`(>*KhPw#N4NLcaU1VyvHt4 z0?WLSm@Dytr}Ry-)<1fOtWae_R%yh1;Cv2fX*P(@Ck$$f3$Vl|B6|H``hW!_u%3O- z^-JwYPdK+262v^%vcb~yX3bZV>6B>fb7E_@sA>hCYBE0Y+(`b-Knt)!u_lt(Jf9}c zKxO33y#yzZy6S(Aq#m@9+ZKYe;%)>O@JIDp>st6RAKG=+$ma=&o6)geX(j1qIB z6y{?ggv!kV#+C=fPzcRXuo1=6m!wUy7|tW#KRUWEpIk59FT!R+P%wW1=!dEa(nE)N z4hbesgF@&kvx7yNnXD#Ikm=#=p~OZ^h;E8EhzPbFS34C>1+jXBvua)W+;25b6hJPh zy`TYn8O#d)%KH6J_jgAY2gpSw*@i|o7DRrDa4^FrjvY}+s~hFhCiK} zlB1u-F(R_3p3Af)$Seg;Yf6#qym?9~BRP$^p=ii%N}VS$61kQ->0|t(eU-9$y0o&g zJ;2CSEcVY+dAK9oj*pj5;JxEoDMy#wpenl)-U!TCjAoF*_2QY*dL(2wx%Ba_sxivY z(#vQRlsDr{-79s(J!*$Pyq7%lP};i#5~y(MqCoIv0>uK{uDLW0W2`(m#;!}CuTY%J z=tHk1QCE~9zh^4Iuj732#Mk1RM?aOf z5ZZfA&*DsJERH-%&Np2ZTmT+&LX;=td<|hg?LtY6p|%XHlw9Y2<1*SFvO#nr8(ITI zOq}7bdw5O5%TTf_OqxJOYMG@Cg+AKwwO+}z6_JG!CuTNh!J}*k?Q|Kpv#p>sfGc@Wje5s=o)H|Pj96jQBK;gN{OF3iH-PBxI<{blq|o4VwOwMW z5KNOj|H!Kh#n6^8&cHtOjAYg-pF?3M=w%k0 z*JI504*~Q~h4C&VT+pJ6uwO*4B8HDTwJ|+z7D9x6lk z&l`9Kih0yzO|qMK%R~s#?qHI-?&f$RqpuuEuTo-T@RlX&Hm%H>Y?(eYz4Pf2Feyej zLjGJ+tyKBLEh=au!3ETRj4L_G&M-?cYhor)RL63E;+zE(z@JYd3`o+ zKe2HrA`TN$)m`4y0{aVQ4aLyGGo$S5MjJG{q+~IadnlYPxhQHMor{L_Am!C+TfLQ8 zIC9Y#AvxYxM-A)VNKl1)@xmV{BUkU9XCXqKjh;@Ugke8E1%2wcIUc5#K^SH>d5j1> zRXaRg9wXgEp#<3i9q$hELF*6d2WPJP&mdj}h%N&3!HZ7JY4*XnA5{Z^wXzDqa2-#S z&CovlIDZA%#j+)Jt~y?3Ct28?a<)UO#ch*l*nYF}X_LJ5el#%y=Ns&(Dm{9(D)#%w zqF4wUN+nNn2+Jx;w|XU_Y(C{A66H80dG17#e~Ga#m3~@VK=+eJO@w77L)a`&XD4-| zFhe5Pw?mcJ%P1gfkd|l~@-zT2M9`t+@-)lu>%^%k?DVjq#AE)3x{f#2e|;`(ZVio2 z(^XAA=U)*sGIwK|R=Yy4TIKmqc0bbxgQ|9`d?>kCT~1j4j@h0k5_3ZJ6qN{!uO6fwY?)#$OCsjx+U##nDswk)(epe?1B10dFbC zWKgrTq{whBs4{JcGi^aT;=>=A@$Eftm(2X~_+Nwt(Oni{!-LIw5{u!G5H&{2L z1BG1ebInm0p|*&2wGcY|IgGDg)Zg?bTAfR>H-62JztCRb!u9HOUXsA2jwd4WjBG@K z1I%-kvDVD&^p(@AQ*5En$I(8nTH!&%ULV*u{bCQV_{hMne1#> z3mNTH7{vrTb-f|FUKS9BP`YsP`VRjl@$8e^j7iA!385+uzc4T%GL6%swj zlNX0m@A2*_oRt#^8fi)*NEKbw!RSDZ3XM_lUh|%cE@Zxo`A?)VeK_#eAu7~pjD=|o z|ICAm3F+P9zy?=0K`89lyt;0Jhk}ya!zVQSao!`gs`vA$cm`q?1hYoXD4;y3v2lON z(zkDRhAy`k{gNL6&)oat<^5*LMc=I)Y6VQ@$Cce^!8nw!j=qpkX|I$EIWLM`_Xpi5 zyaKi~a8Y{HZD z9h!+jkpcQ{)x}B%fh1VOI{%NCAF2q7_Yh>Lp!~Uzz3%dJ01Jwq+ia1*W^IU~&q`83 zH*P52B9-+6DV71@XZUkJnA-NjmpYdrm?V&m0YT- zM}Pto(!5@b$Vn442iHhlwqr#P|df}os`E1~Ym#KP}}&xt0n*b6Xb5bYUW z7)iX4*9*vLLrEK(8QF^Q)K7IPUKoCpr*TEkl%RB`H{Mn-vOD$u!>n(a7j!dv)>kAV ze&3;(Q9TNMgtc5cr0i$LUGhZI`>1w)vKncDZO-EVhY=5DnV>Wbt-&d5$91H%Yqad) zXt&%W>#slnmLf^hLFU87Ls#q-j=XNBBG`>u-s_^-cV2A&_Tw&Cy^CvAHZkaO*nECG z=+6BBw@E5^_CXE6i=n!G^oa1hvuV+9_`$i3RFs7ifSV7ycbgt+vr!=nq%|K(f?U2Ls~gj$iw;OPUCik^QVQv*7T9;t1tVL+|x+U^(tHupn%QtQjFAW0IF(?3S%sdXHPbz1rL%_iYZ^jRq*Et zXHdPNw?0H;KdqIlvT;%?sm?Zq|BU{}I)7ZfI9H_PUnT7yL}p@+LI-c{^y{Ahjw$b-en5S|a1P)9)^~nXZ^tbgOC}FaF zsp7W`+^zCt;!7S{mA6CN;3|2&;Ms^cL|YzHU3cmtdio@#eB&J#b*dfxatlh^@Xje5 zg1ppf1|*3SyIo@MhTRUF(CPBS>Gr z?7x1nrXP>(OsC+CZ$PqF6EM{Qs!1)3`71fF9E6pnqSk` zM*p&FcP*9T`W1rarCeFq%ok|D)GS7@o&(;`7cPIop=%I6&GhEFTP?}Y#<8HZ>rly* z6|v6cnMXA14<;=xkLBA5GRJnYj^$Oq*9yH50U$r?-LXF$F3slO&sEAnr3ZZ&ku z_n=%F6p7LE8MFoo$#LPaQxP_V zc94By$T0P@jX4Ca#RNnXITWyDz-9wtMr|j^39+EI8Cq)r<1lH4)9N`mRGce_dU5yK zV|INJK7$#Jj*c$k46|+q8`IS_Mr6$RR!+rvQ=L0(x-A8q3&RW4babYC+Bqvbe#T4U z2(6V!7p=Rn%X30;htoTEG>boh+(&gmY_|u;VY}q9a#Z@E|oD2sV8~M4K)c>XM zs^0^LWvWoOrU|@F6PU({sQ{=d>t>~I`-dTlPd&DCGo=iO-&LHKcU9lGnPl@ZIMBwU zmm{;bphp|C)bl5t)|;%?(FNF|^$w}F0Cxc`a_|d2_oFaSo-1xb_?iBT7bPoJ1BtEE zpI0%X*;iizEziAMh%TQwCcOn!nO^Di!b5&q+%YtDhfUS0e_F%4PWnQv^2_z= zo7|tJy}gQS3hK3Et-6N#Sv@K&9r&=>CrYbE|AXD;%n>EF)NgXDQ;v+Dwo;niZ{aJ% zU@Ry;WX{B${<=?ajKg6f_C}v%6r4n*6r_A1P=j=^Pvu7!`rZw^T9j#w0E9dd5s}LL z{O-_B0|Nt!jK_<;WfZ)#T87W-=vTG&{1p#<7x1=5GS={-?+}cenO2X{e)aH1OUTe{ zxc`PRUas-g!3pw|g7rax%ZA9Ww$MspZOxu(_K1y9clipf!_t^yvJK2udV1QX3QK4S zLN9DIb_%sU-9hmmZrt*8%M%(&I0*8-Xr9WOTaFZnsC41+Dcbu{5os?mrRgpYS?Yf) zIwxUovF#$?J|Tb?tbk^I;XCWM{X)I zi6z5JRbUW%V$`3jkGNzGVW(}luLZy2tAO9)66r$4UHT?=jKgAu2CPAMpVkMrJ{v&%Qg z`=Bi}mnbZ>dSXqwHOXV=vOT|5is&*I^Ith3Ruk+mzj5NIm~td(^FCZ(lY#m@Xi5fl z{0S-9)YU^cyV9!eu0acID1`WSz)%D+?joFRU2hX{;0v*b8cv!fC6X%Wb!=?hw>P2^ z4SV04+C=G=(H&TM_roC^^QbP5QVIfUFIF>M5zY7Z_HgRaC^g{Tm37iqai@svm|Za~ z2|u07w*jQ3E#;y>M(`O*g&bL_*)#0|TU(2HGck$o9kp*?$|td)DUI@MDPO~p6`82M znLBQP)j=12bb~^nQw(&RWbRbD$-nQ?PkmN#wxAqhgtCnSr?VS5qSwWm{G5$oJOVo! z8cZ~P^CTI~FqVA!q+CR!RdL@9cfRkJ5kAYeaPG((qIvFEmv{P@GaYKj^f_!K`EGvf z${Gli0s}Gf7<11!IM67alei1||G8llc?h`&JuiN8w+C%TL)ZrJfyid}9w7*` zI1}K+%H8UIkeDGt2;hndgIMS=G`KaBrG~z7rS07QMUtqbJn&!lhliFwpyHM60vNn-px@Z160?y6K zOkderngi+}Umf0z_^7&f#1-Z)D0Iu=KFnCv4lXe>U>iwn?#t+RrViH=7?Rn7H4yw21u9 zdxmM9&t^Yzm|oETW9##eN(CuwTt{1oQ042*0e5XIZaLwTK+-t=Kvm8TC83U;#O@Tz z_H8t{vI0de?vFRWJTLQmcj)16EUWSVlPR4NK>l8_0E~_N3&z?!z}RH*1fd)N#%@3` zgOMp$M+FVFUDbv0Fy6`zA!;JZOA*$tf(8;Uq3+`UJb?t!{pK0dn$0c?}d90rG zU0CA8^ivMTXmAdRRDerS5PGnNVQK0=$dw)IKlBZ`O!xNXCm^%?N;Z4$bgo)XcP+C%9;5&#L~^avU1GmBX0?hN13ZCoP&qNS{nY|=J^PxQRvkn70HwX^~cSF?%6UN z@RVmrhR+>3loiy#tJi9U(~vJpiRZb_G&9*dKatWK&^KHxksRqB`hSY71vHc)Nx|1gENds$9>Q4vh(lfH`DMkn`2u?k{Pl4*@DBZcaKany|yLP%@(S{Hb{ey@JR0S-C*)>3cu32ODSQw$$vh1MdeX&f7 zbJ7bl&d)Pf5`KS4NXS+q!1^oIo&K&NRXdiK^;FWccaWSqS?HI0Dda#Q&ge+7B%r|| zKA_=MZspGFmmV*t=ihRE_)_uKcq;0de$y)P@a)qvK9uDbZBnsxiT@+( ztplQZxAyOuAq52kQ0Y`@0YN$irE>;m=#HV0kPZQ*r5hxqhMu7t0qLPTl}-sk5O}xW z=RD^;=l%UV^XK0CzSp|eb$ymYne-t#GLC=BrZ7p?;|u;sB1eQZLhIJCG4xFw^(jj-HTJA z^fI4-H8XDs3g#>yFxfEaFum+<*T1xLJTnk^cV3tw`gR&+AXPaPcoTK*azl_1F^ZLz)!vYMv6T_0KNgj6`9r~c2x=M`RA zC@>g((CGmbPcI>**>6PU@V3c9!Qkh|%(26r3t z@&n0_$XRD)e3&tuysvVR(U$_IR!6M?Y)1C+Y3>>7K!jiS_Z&KPaX4D$iGrSYlYSIl zl=JUw?=CoJa^m!-kW)7se|sKFTRG$GF5T6~_)SETz0wPEQ22zNo##Mbk%~D zu<7(f_oq^{tHYe}g02L*Y1N9Hi^L}BoA?rImEDS-ZiUImK^?y|{)PHQ=RwYGRW3iB z?mK$ueWp;mr5aMy*?{$9^EH%QTQTggxU8X@a{K<(4i#Pl8Crt9b~qwxGMnQtVZ>!T zNZFsl-v2J+HHo&BudPe6aak236ArpC_adJNZfU+_mhq$_y6_Y5!~W|2f%nAX746@q#0G zmqd9UPRMX0P~t~Fz1#DFXkL^k{)Q%b7X{pq|EexPoWAXVqW!aJ2A>#3k8f_~Pj(vQ zN+wCPJPrV9W=icf-pI|}6(P><68diR6Bo<4DZLM4OHEun9a(#l>o%RyMCIg3=KMjT{-*!P}GNuVXe%dQ9$ zM{~hdJb5kvs_$wxk;-QzpQsO0XDVcwlJig82PJgy-0{hZFA}~VGa6)(;Ju0S_MXFS zjs#^1LW5s#gWMK*+t^Q6E#P`cCHT41|5L{K4-b0#vV^{RoMp)L@1eiiwYyOjdz2)y zDy-{bOfCRa)RAU)E{mfOe69`3GqMYQ4mJa)OMh7?(kwtVHqNPJiQ8EYr8{{9n@RzN+TxfD|JzX9vMXl_&*)mA}HZ9F~<4<8Um9+?6j+b6vpy+-GstAEqI=oveBUP%GA9$us zY`*b~xzbV{qaH)5uf8fy?#6bi%z_8Y|Y5 z7JS9B@5BFnZ@>c%e`Ef*2$=sh8c2K))YDpiqL%&Vpv|n{!M~?eYpr@sy|G|9(9=c7 zAYBIRH?T4hqo=3mJmxTnRQx%wQ>DMQBnL;)`cMY)czy5~xoSRA^CvQ+rLs)eeLtNh z;d1^posU^h6pc&8#O&<$o;FIym?jWWM?dP2j0D+$V}jo)pSJ5OX5(e|isalo8A*-v z8^siA1f)hxW{mmF@YcH`DCB~IVX3b#$p(CO+(b@SR75zHJTWyxgq!1`icI;OY%K9n;}vyJk$OjF*}<$ ztf;udEX%U<0v=n!U>{lv(cdfOLw#;hNkmK}W{g+}czrUbq707vFqpWV{cENH(Ler; z<U!=y<8{KNEDKX@H*DCWlY_u^qI?h*hlo+Cpp$$OK~rjbM( zj_vo(9G?Z3fL;s`d6A+P6co^KJY56=A&OJ^O_Gb(D1vPHfe#4Xu^$SshA~4!D&If2 zK5}WN48InzpSMCzmATSW_*0$9J8eNsP0)wxb;jhm`ccVeyFAB zSL3hQ!g+;i8@{tlFT2S-Dzet%Z2uFygaY`mi4shAnNbfv6yMA4FlV0Z(sj4hi2uT9 zl9@0eL3U!g0@YfKES=`XV($#t;(GM?ZLS z6OUUzt$$Dc5pinQJCjc=CwL%Dx1sz?YHqx6z$=iu3@<{I7T9A7R7}GD?@0Z*IdIaY zR=uq>)>)_V$S84)R&(UXp@B)?HO{Q^jB=#W1P$7ntf+#|lZWI3j{+*>B}1zj>T8i+ySeE_(yw?xu%PBpQBQ5gu{vXi$0k z?)Ud-3H!4pzngQC592I+a_Y~&efPfQ8|>;)5O?mx$pP@qoU`-attA9-?mr=jxmU(Y zcpedT`<4;;gX#BOR5wL2eVJ-Z7<_6z#O=g*tbm1ftua3pv?Gk*GPEo9)wvK6$DhQnDZyT(CKQi@9)#l$luta~3@ zMQJ`yV)|bX&hhH67vcg*`&Z*d5hS@W z2Seg6gF-(75C=50R(_FL&e+`3G&)D573f$++LgjIl*)OmN0R6&jcH2O2hbPw zF1Ei`WhZNlTA;NrgyuV>6~WbJ6^RHF#IR;qD?auZW?0saf26#RPTS0}eea{G+$<2)Mu=gW6@+;r2q67O5YDo>f z7F3F_(xbX2xr_ui_9F$31>gbqmK4+!Kkvwf#q)@C>Z>1zFx?|o^8E;lch#4V86$I1 zoa02SSQV_D?P4?uqNf8)drIlq%ik#qqYOltNeY#RvHq@o#XElvvnPf$l+buCb~6o_ z$;x$DN!pyfD+I~H^P-MwKZQgBuZ}G_nm%EFQ$o3Wu)7X_pGC62C{dv)YO2dloh$O5 zRXy9!*Z(zy2{;;_HaK&@6~_R;n2+q$)J0HHmv9CN7y{kw3DORsL(C%!f1IQ+IZiRI^gtIN$0F1 zo!Q7c)gwXs^ZcO`n!pbE*l3G9-cfeYNmAL-A>Q9j(&nsU-*`+(7TUiof;5=kaH)_D)BF@2#F8z&2nB3q`B zkU+J}A0Y=6JTs8vHpSSk1g5jM3x6M@jRA`+ESURT z`M^fzjWEt4dh|vwEw}EMXsG>G=$c%0m3;0ouTgC_$P|>u7DE)n^30~nnf=!7#N;3Y z)yGoYRewa{dPq-3=M{yzs7lm87ynNK&?kWty22Vxfsl&yh#*p;`+HA{4-1!_2(z`N zv89mtQ%rrWVN4{SRILMixH;%9n3x z0w0t07z9O4m&-n29$xX%+J}QmfjV;>r+w_{cT@6Tf5XA0E$hQs4!BuM6~;jeW%OIj z7ptVNbV47h9Q9yu5&K*(foCU~P4AzmDgfpSM34kspmUe4>p}ZMMwV{-m7NE67`{uA zInljs!Ge6K?X6nb73#`Vz^h`DMsC)c-`D9PWQe%-4H1P5lK;^CJ)H}C8eT9u znr{)NoY3XD#haZks3khqOt7~bwNRtn$ej6!e4*j;07LG+WImxNg0fkG5Fl8EZc$WF^HPKR!|GN)FVc zy_-4pARCJ0E|ie82)^ip6-i7G1PYzszl)xI^4MxZ1;#&>6| z%yYc`^gyM{o`^zw{IQ1Pp-UBQ$3l$o$-~7ur(0irKJjk*0?+x^pX1?1mWPc@CO)Ur zrqT6y6jJM8qw%g$;;BykS@lnDd7-qP-xf%Jciz1gd_Dvmr4aP13TK_i)=`d$O38Ho zs{Vz~N{_-UU4Q1P>|A^gb+bPJ_h;@@7q2u)4oe4Qy7k{SKo4ML@hs@#k*nF}NV0b& zh+)$=6zUCt*89t4!!C*gm1yrfZG)l8>D^`>n@`r^H@+9r&yc7bsA_6CG@WfUSwz!l zn{;wOLtSx4Rn(@0*1OGlubKn6lXFlxAjCV_-+ee}X7+#`unWlsZZB^j;;|T2Rd3|T z(An(Av)b8~rDm(g_4HiHtyl{-+E-Vz{4jpMOe>3g@h0o3S9@WCPuxctD~eSb4F&k& z7&q~+j1lMXUgQ@+T1#c7OQx>o%0f3Eh{uL%IvOlh$pH6+7Ax!f1i5M2R>uBoc zPUX&%?U-lqS1+KX)Y$*~)_f`X&v|-&STEQ>jV}vWqMwVA5iY?Cs%C+NQx3wG&klI1 zYY?-@h=}tWA&9uSc|zxY$Wu((0uZn__d46h;1QiPzmfV{S;+W-<)e6?@uMrF3B0eA z?(K2;cMikr5Cs^jMJk6TV~OjZ(O1`FsuFfU@~8Z-5x}CiYp4fywS4iRks(n}@;OIa zrsp>6WmsUgDYRSgBY3<3gs6HVvN&Tc;VbxPPUlaPrYrN*oNkdcsdxrF^>>SjOeD{?qQSE>!3aLC}FN*vI) zA`c6OGGr)*37K!Gq@A9ABie3?OeEt&30n9xH&3!-U(Qb}+VJsG_WyKi+fC%Aan9*DQpVOn`c zZ75z|IYm<{!!rS-MF|F3&}|Wlz`%+GO==uJ%|r+ggk4ikA+@;2Um)o-VjpqmDO!I1 z${w#DpOFZ?uG2PvW2(9h|BN{+e<{H?{8K=!{lCK#I-qCS=vIravieLu{^9S;MExJn zsy5BP)PPb*Q#&NrqZ*IG>Ff4(oeAgF^;v7JSl}(7328m(;ME0vE>&KpR~~17VOa82TBFr)}{onz(yZ-^dbgAPH@hiH6ZFEKz>=_?ggSyLjc^ zk5@6IP?gF?c>hxmwf@#)o4!|-8ial{@Poo3Ib5_^Crho2Ca|y@P&9r|dR1XPWx4!M zYkquwje^?8@CQ1R6M-DUuAukZVsF!)FRUcuaAk(RxX(%zs?y+gC*L%m@&{Q=%iFRk zq5^K64LXSm8Ayqbj;H*%o^t+#&5-M?R(4B+oWEkD$WcQ{X?400jK3^846MC`wIVlz zJ3po{j)cTdY}fMUx`v%vD;Z_jj-gegH1wa2Y(Y0c8awzQ;3W@r`LWncpg{ZlwZDKg zRz<8@CHCOO7Q0f}t>S|{Xt;|34Z7Zj=p}y*X-U}IPs~>>`Iet4-5)4QF8sWP228O- zRNs8&>~W+W>Tpdq)S2?gGWU7s1+5#87B4LD3Gwx~!%}yo(W&Ut;yIJBtyf%{9}Mmz zE_W9H>Cg@>?ppn~W~Il6cb>kPMfLmkrzd^q=?^&3fsDZ5FPWC;{XwlJ+zuC^sm@uG zLP2!+MVQ3=e6_^STlvfF3fU(uYX>&JVopEY565rD2SV*3_?bHY)Y+1b932xGuJ-*x93(By?#G< z_XHfs<3K>V7AG$u@}9eDO_JXGH_1}ygKXD%w>`kp1_ZRoK3pgJY|Jf93TIVX1l-Mr zy+NIi_QaxJyv<|U;S$1jY`)>IFQCD{(rppFQD}BfBg5UEasT#<7?L6G_^r4~2&r{= z67^JIuIX|=RyNKyr+7Rud41w-_CR%qtD0l+^t(Oq?W<;^w_3?cJr!aZ!s+XTZnYQL!XS6Sxmamtu zR}_iM8@`@AI29G99H@Q=-uP^sw~(hKpQpYmZ>p$|7jH0R**rJ(X9aJ$YqPId(M{lc zRxR!6!hypO%%jQRNl|Com!x{^uoRB9w+SP}*y_o6_11LD1e#2BG3N4ggS?IF*@?q8 zzV4s<{ZaB5GK*Vg7NSqdt32(@<7Lejp%ljGFrH0se#Ag}dJ zQj4vjup<7wZ#nK#%&HAyW%u4Qm5Z{8d0yD<3N}*GVsdreb+Q5*hOO)?C-II^r;8$} z-!&7Agxf(J*}*L8a?iW;k8zQGkWL3=i8(wxqps;9nq4f@zf&SmT03u7az7hdUT02% z{vll~3qs%T&;L407@nKs4_gc=l@3^8KcQsZ6E+I2twk((&Fu{kh;Y<;6k&W0LSfw5 z(2?wSMp94JU>dvJ7dYN^O0hBneQVCiM_zCP2uT@N8?Djes$SO_-8TrzJjNL02qu9WzYvHM{#5$G}TGJo= zCu3$!zCrUhUZwM7Z1c13@!aV-7&ej->OUjh~X zHTk0(1Hs_@SHz{PA1Km*Ca&zHA5X2VILt#^N29W21-R&G-WV%)sl0zMhvyN@4+Uu! zeoGVD%3h@#A$T(Rb=c;U$TU;5=<0qrz`*0xBbCV_dGUhazWK>5>;(qp@;6JM3$W}r zqM}H2f!@94&-Ts%ZZ>&K)5Syk1J>U;nVBI6m%hEi(X>J)B4oKc!5fAZDy6@@mafYD zC;28B*>j)3t%WKNc}B};Q?-v=CAQQ*Wxl|xKVPxNv6voy$Vy$*qaMeETQw zlt#?HfYc}NTn$IS&%SXG!F<-VMw6(UN54%jjYA&xl4UG8r$gC%4U$Z*!~#3B;X`*IwJL^^lkOoFofAAm}kP0c$^E%3SHqt89W*j1j+F#4yS16*lk z%o&pDkRO(zKd`lz9};TlG!Flix@l42zTi}+uI09?65cZ3E4^h!IoX7d{+_dJChyd& zu)#h3A#nXH6ZqK3zL%U02*KYc*lu;t*{$gBa5R>6^0Ggij`1Ik!T;r9l&TiV(P)EK zTouGh<5o$MJ>URLTpxA{P}5;VqY__M889x{EQg39VNp+^T{h%3D|WO*2g$etSCBKH zNg=6OjkyyN~(= zzsPvDey2dZpbutBNRH+`mVV-k?A5v@)D$wh-4MrIRv!OkGI!|j%X^`4rNlw(_uxrl z&(6Q=1#b$#<#q}$q`ZtE@)jp2TyiPkz5I8hQ#Z=3?XL;=b~Aj#qNY^1;vafsQB1RHNlJdqeGsfC zkaF82^*awD_+kj`lLL2rE7lUHkvKb;H}6_oYVTn$2)?SK6=Afhb-5(DTp;H5@IOEB zJM;Pl9W4J`*@e>?Zn8<$xDKFIzw3sa5-)A0xWfnwrDwJR%b>fGQWA=i_?XfdjJlK2 zw44{02Q_MOC=OO9Xj}cmewy))?T}J?A;l>}Hp{j;>J6{|-8;AIa`l8=+dof^BrRfa zTHg)MrdrG%kt0#p*BFcFvPvbdI1tFxW(b1l$`oh!e%mqRS2sn{bQE<5>E5-5bg0JL z!L6Povf$itJl85Njb({T)xTx6m0~4~D9zTFJAQOeRD-%~g>!CiHQcYF(kHZZ+-Im* zyBr;IaGd~MDr-TSnZQ_IiggXMS>O4#7h6Ed$U3I=2O$41yQ7;d=S0;;Q!wAlkxF86rAZBKtgYy${v^`^39;t=5bO$KiHD6W7XmO5& z3FB{VljFr-!kvx(;R2DjHYFqfZk{M%01EX41O1av6eEQ@4Ke3mLE!h5o}bd z#gEqcE4jO$euv5XF+|rkcieJ)vy!a0l^WGI`gNyDS6d7)VHS^mrTW)U@9^<6AOdSi zZ?ntGb|?hR{?qu=ED8AKUlBp=i?!7|k7`@1Er(};osZNu`q(m0|AfJ`myJ*;NEK{^ zmo4kJCN$0@FwuH7*E-W1_q0@s%Nr1#s~mif(`qbEDf@dpEpwm`_oQ=LrP|{Fa@-(i zQ>r;XFp9OQWj#Ec^xK(q$jDGa z_Wcp}4`?7WJRllHuX(+ieTR^P9M_QYhqDe2wxs+Me;nv8vs8VyZ-q@qVgcy2=SGAwlriGsL!dM{h-G+Jo3&!Q~YSVI` zlSLA$Ju0+0QHO+~)FxjoN9^T--qObk=I6Lr$}uBEq-FOh3h!ezs~j2l2E)tonairS ztMR;itv=Z(~ku=h0O6bA+`ddU*QPLYa{uSEp#xtD61PDVmg=Sjj5 zmOu5fbUSIhFMULO4nJT9vygm%m9j>;b}mB1d}NZInD?#aeHGF7>En2h6!@^J?XO~# z6zn|oA>~A#Pl6R>DaO>RwY>QP57;ddDWSbNWzrOSk0+OT&^qz4+oMc%QKr9_K6 zC2|xmgb%mpRa2c3Hk7KgaSW&jD`bcSL^vgL3W??*!tk4e0*=?Zc3G=L2`e zAB48V4d3H==8gSl6fFzBrcmOS&Hl&RYW*4Tb#N_O^@2D}48Uk$b+A>lPcumdt>-4g zT%A*HBeMo+wrtzkAwJD3;wuBP^Ub|I%m&(PxfSTLyhQZyXE=ZM8(vra6^@p6t+nqz zd(#pUYH-3LdbQTG79(ijV4Wl~PYy=txPMYim2vE980Y;Bp)2c5S|ckFR66ADx>y%0 z6v{j=9CPbsIZC>@beSv9c+~oHp!(N&5-mo!y>?dEyvwKB0tmee)Tc zrAAhq%|QD8wkU`7=Uqb9aP+6z+L=T41BBnyt(^yEcJZzgyHDxR+xZZuL1!d@7Fu|t zgJ5m^0kNHwFvF?B3ZHE2PBy!gPuN)YcDEE%O(bp3X2eZ5|k#~P2N zJyRbPBepi(-v$<@`9)G_txu{JZ}=-9EXlnk3Z@)Y93yGC)_MwkC*HU==|)*!;o9&d z_KiPHDUJZP6I!i~DWr}C6U7GA%B%Wlq+k9R2h(eQ-0x-{)On1R&evis_INp-i`Nq) zEk*`-5nlVwB!6Zcd+H)0#w%+mgD7Aw)!|;FODc0~Z7RoJE10h=PDBlG|407Rf$+J%zP z-ftB=aQOB&hq=JAlc^3)Y2wgeTPy3@4`vAdwbD>h(ofQRv4vNERH?{7PZZ+{6b&-~ z+0PhAVi@o@wY%Jg8Ga^Rf0JIabhYpP3jmn_>G`xqR{U()2zri`vc$Tshi{{NhiV;$ z#vG2Ahs5}+k>sG_;z^bF zL~i>_Kg@^YG;K@R%)iAs%S+}mQ-ZLRngc8#c@_Vs?9(ffQrIugb1se=`=PM@wl|aN zInQ-&%ziK?N(u*n+Cjn3+zasr`ktwIZl#-;WE|9v9oW|HPu1#}iX-<4!QW+)b13pmozie`#&{^|3(W^jN* zBYrS0t+?aT&jBut;9W%Wj#sZ1X~H%|?Vm1rPeontLrap@rbpiqm;SczD!AD8Nrbnk z-9c-Zs0zswZcy_#$GE0~L{&WK`#kMttSGsazA00a{8mf|+z&}UjhLAdcm+@nJ$L^;Xl`Vs02?oBS z9q|IS2Xfr(o~P#6PUn9v)t79LdgM9y39QR(pqNlKuer&08q-1LPcg#|5u62WNnF15*LmfOd-P;%$*{_CJ;f$iJ?V95RM z*FNM(j%>)K(Icvo=d<4d6(*T(0|1yc8TkG--`U)($X869MRfW9g>8`I@_j{gx2lEK zA2xfL{Ng_0(4A=|+Yv-%{PZ;ILVL}*UHaYZNZ9Tqp6#iFOTG4|ttKEe&^}lD&rp_! zU*(1qFs`tC|BVEM$eFp3Ih6OL*JeY+L=GPLJRX(#!7%UcDoG)m*04K=na0I)&2g>( zYId`&gpt&6M57E|zrR%p5$g^Nd85wcYIkf1=`$9vhyG!vAUWCe=92M!i1_BRZw(&q_x z@YJYY$i?ZAxB!~g#OK;^dBdQ5$P?Rb_7cgHh?2G=oTn-?pOPj*{b8{EQvN~Zn$5+? znq{u~5&<@UUop}sA!~d8hr6P%dIxuKX4L{a&8CT>f-$)R>l^J40 ze%AbcO8Y3)baotK_vz7-kLN7meB?X@CopGCa%p7(lPyMtItS2JW`9*!B%oQnedY#8 zTho8pZ_$3T9Gs{|NE?wP`^n>rRm$w(;D;~-gWF^nIXiU>nEWf^n)&AyMl@W)pQF3g zHk5lS=<4BKJaE1{B=oNg`&wMO?bVcvUYL6sjfugiX)!zj@!+m-O0{gK8;Ww*mxM(8 zME3kf?JP;{iHV3bp4=g}k3FxR2x!Jher$uO56I3f-D)6gvf@-qzV}8p9X8RK$$Fehyoz*vCV8=V- zg7X0uG7paQ7ae#pBBfGz3mw1AR*#E*yH6Ux#0uA&;Sptt+$i{?c7$W4@N;f-BP9a= zMdt+@^Lhs#p&EPr7o6><u8s_Z5Ns4I-qhT}Vag)+I3@c;;^z18g7nU! z*8%?#fCY?LAUURdy(xF|$E#+zedCkCrTgJYdilh6*z;>U11bUt8dvO>byDYs?=`Uq z`oLf8@`UeKJ^}40H7;H^(d2N{yFdh}EQe#F_yn(681HdggeOnllQkkRD%S0+|HUM$ zfMzq4(B2$~0%!#EySRq6LQ9Zc%g*5_txJ@y{g$G{wfFW^dtxTu-S^xp{&>E^5k^C_ z>56Bb7o~4uBD8@rKWcPFJ@Qkk1Y^k`(9<&|b&qy2hGtHzAElB7*$ysL z#pu>6R952#eYh189Qzj6id^$on;MAIJ;;TalTI(6WoM~z%2Pas>U*fj?!b`Pq_9^M z=R=U~Y(<~K&O=tNq~%m>FA!K9_&hYm50P;M|CqUDXia_#TO7{?m7T$42qN>#_$Ghv zXzy)u`#HEeZy}L3HQT!Dx^Awa#=n%-4`*|vUX z)*^YQSzEhkfkBtaoM3^SeG$9$i@6tIPPOv>k!vuO=6dX1t!x^to?WY71C>O* z$6}pI`WS*Cx}oBmyjVTyY7(^bA7L>1q*1MSR9T8M^K%egRNu*Nb8gVAJj=~TVKeeC zAXcG*Z*j91d3A3H<5Wg1I}T_Ie1C}k_Gy!jp?OTBQk2XU7@Vl0=@{=Xu)e9kX~|1g zE|i&ER(}tF3J;l+SgvSE9jA`QkIX>HB>V}vn`AKT$HijGjQQhwV0v8-%laek)BPXP z)=oZv%9&E!5>x>|a@zFXmYID@xxtfKTH$tIf+7Bl^bcB%z*d!qYEj_~;033bUnfY< zI{)#~G&~>O6?-&zPhy=w$FxUw)p4ce{2NpBG;ogFtq-JR;$V+d`h1xU`{K%1R?x>R*{Di*u8tcs+czn&kGQjp1^As?}Ik{MUPv7q?8F-SswbWabuAs5)n5le{WK zVdU0gg`V|Sg29zaOYi!BWod>&9K&8G;2H2w=$dN=LD>&I^cAZoYHOZd!>XZugH_T_ z=|9R-bO_{eV&v}Q$P?6G*H6Usee6o`CY@3hE01^!<`KMj^k~%kN8;=IUs;KE$taNv z+l1LM_jG!#lG=#FNGIPJwVtL6?U{_fd^y{Zz;0LLpWPG1XrOgrmsMxDDCWbfCC!2B z^PW3C1?O0__PdNosio6O8yGI>iYU22e386SMkeW62kU`#$!#yW}^NHar(m z#0TBb*g>-`Z!6d9Cn;fEQxr)!qmFGC zWP&ZNC3A9SkuP~gSF`yGHZ(ckz@WMg7{1ifn$ihpK5`dSX;)ZaJl^kztFmx1Ebcti zh6hggFr0DgCw_L9%qs;md|VbGp^cfiAnDD0M}n*VxY^O+{Irw8uSn_PuY51K248Go z-q@lKJGirIA$7hoC}-&FOc)8FGk6V_z5muiUogunC)tbPy4G zXcW;Olj|t0%zjCikJeEE2Y7e15fAk`w;zMH<9lbHmj8MO_un#pq9&z@Z*%8X%juiW zfbgrT+i_Ab{Zb6uBfrjw$Hg(l_X}}XV`Mah7OD#)CZqWu)O*drM1HOBxc&4fAU6}6 zszG-qvSIzc7w20Xk2?f$q`Y|gfmE%(H`*QLGDwr%#RudSD@HZG^6+Hm2!wM8Vkzf+ z+Cto@D;_x5R(^MA;wBx!M`pFQ5h?S#sndqw5Iu8K4>+mZH!%istD2e{%O!B9?qXbw z9G<7#D>Jzdc26E+Q^Fr2c2;F!OchWu%bG|wH_G~rO{c~~^`v=8@?^sqPJ(=Yiz}9d#!YSyI-CQnR)|WwC&eCHz$_7Rrr2xbK1m%7?4EpM*CIc!oFaLxCWTi$~YAvC>cqsVN0< z6>VGsNoDo4wbRY@l|3i^Gt1tXyLWHNNx3f>Id!{aOA4ToVU6dAh`Os-L4 z-kST*#gyBhO`gkZ_ZFmK!kjTwCJx$r(X$0g?h)7RdK+x>n+UlF~WsUL# zIkZTYi77emv0MTHd9{tCy~9IHR5+!j)?d0yzidVQ=b6-TzvecWPi|DTh3=kGSDOOE z`(BLld%3ALP5`TumZh>FHj5bk@xgv6;X~s zsjmyfsJCI9uFM%kh|BsgtcA6J@q1*Xhi#cDoo(e+d9z8bm}RL#dw~VFp#{yET~#+r zIBt}gPsm*UFk>)Wl2e$#`IZHse(&-bQNUH5se!}uuKu}E=xNi<=TqA`Q?a=-_*|fD zjnUO!V%({A3nHfYg@sJ8I^5{Ap9Q1JvxIM}Lji*lB};5HnFL2}x-xHS@l^M2CvsLb z=u#jCbAH44%NN+lUfwpEu06{>Wz+F3ck^p}I1hfEZigmAlCm7 z3GFF>*R=tj`6~Uj)^azy+O>~+RrN=%(0}?c*uQu--@9gu|2&N1J_YpJzW_mCD^b?z z$w?jmB!FtR0|0Q2#6`mG0n4->f+>D~`^4mS*d}$^x^X=mRPX-w?et&sR%N->)Z~}! zm21u`=XxA$$3%?y;{#wT4SFvu;C)%rQIMJirTP-*lv-gy!*o$HVqmvYH*zRKQ zVi_NK`C3iOnGXhwn6w%xW}%Wj$wQGkQ!MQj3O_^S_HOHxpDRI$1PxegyV;~#753Va zjHhIzIOp%PSZOYGqElL5vQOs_3w|< z^uL?{8+aVL)8i6nTW{}D_)}!mKmXuTL@Rx(*2)gz7HAr}z%g%3kolsc@v2a4&r)ALYQ;zk%$dEvs0U5OA_GsI4 z$E3keX+}LVq&lv;)!CogEWczsLQP4~o@g&qZZ*XV*xRhylu%W;{;(`n$^H4X1zWqc zNqGMSG!gz>`)Bj)D-$ztq2)NnyoBcFyFfoXNUYw~t#L42YzpV=#;IPoC(ZpPKclzb zF1kZd);~qlYV9$MYv)}5%L3rP6$9l?=A0U}VSm<*kTQ*=m0*9^&9fIMB=d9hM1+C3 z)Fl7ygRgy64E~wg!A3a)KkvW6=jin85$a=leST(;aWJ92mcntU5KG%p=aTOQlzkdS4Ve~}QzG|&*sR{6j9A^SWa^}F!q^!qfREhq-C`y5>5 z@kIb^X*Tj5WktO6HKONipweZzN4|hHh_O(lk;ZMCo2XTOR1EBdIsA z@n#P*WpI41TgL_r&X&+32Tf!4^=lN-uCH#4Be0o5plS%Vqi?5vBlEZgfciP?I2bx8 zI>2p!^y%XJ3x@399(2Mh;lIAV&F5{AAnmK#sDp$YEY|l2zzR%4e9q>UY6@D9;wO+# zJB91hjZY!-o%wz4drbRek{w$?E%iybRp^6^wO~t-ULPJuJ?^7!N1q2@DWSGs{`haR zTEyv7qfyRMJQX2k&HQ;DK*#tLfO+A5EWb;J`h+x5mT3m2a@w5m%5odTkFsaPg?hQD z?0A3!x3$S-S%qaIw35H;9?);K8?n9;0Xma4aru}}CQH+e4yUKD)}W9VGNBgwe3)ue z&h%EApcH{1O8sD?W)=u%0k>W0E@JE;h{y0Z7@|jmy7dDTc6AGs>uBWdd0K$oa^X(Q z=}MR~0tWFEi<6reG8FhbvEXz;x8AMelXWW8A4j_HPVYF(O@HL0{o}je9Xa{)+!V&A z%N041nv|G#hZaxgxJoikHXTGRqA@#SU-HhYfSlCZOiTs>9h?x@SP?0Os`Y~q)w-p5 zf>x#*UU+MZ=mm!s)5vWUtERb&gRaA|{nUPFn0!bAOx`}91x}T@DQpoc60LJOV1aCP zt;du$bp3x!y=7Ee;npoo(Bdw|DK5bZ6xRa9-GY09yR<-&Qi{7n3GN=eXmNL^xVsf8 z^5wkmJ>R`QcgEO1GR9iZp3hus&I#HzQGmYkNWr8|1%1sI@KKIv8XMD3bwA|yeLvcX zFl2`^ow|luSq3V4K|RV@#h6?2T5nVBgE@y@0s$mJ1%n5D^r$RHO*#{F07LW_MDXEl zn03m}4?!0yDG(=xPxJ=bHssa{a$BU(r&P(N-}M)UM(nOX|G1^`+ygIQ`>{tx8WjD16bo{gGizpk+L;hup>jQ0hr`nk>5~-u)WRTe(-qXdpgZW6?}O9#JX9S-I-TBy1bee&j`}jyG68MT`sbr^(X~jOki)IuJD*9q#~_aRmq> zdeeqBb`Wrhe^hd!{aQfQwh|CsYV)Mn;B?*;@!3oR15FPcDQhkDeo=Vp`J;xHN7S%M zvBOOcr44#!A;g|sFfq%puJY%wv$O}pCtAR06KYVazsF4*HucsUMhBxjo4gEwQ12pP>qwp8#9+|JtdK>u4 z8{Sk5%_jB`@pp*#Q$Cek&I?I3Q4+nU&RAo7$&$NE?l+h#x-p>~yPzWCAx-Y&k8b#< z;SSvml}pz8>HR~AI!OpQdq%Q4XXaZ7cOfpi)7Pk=`O{qj(`ZIKCE658j-b~s1V4i2 zU&WRN_y-8?9TU6u_|FF*rdTlX7}yrb$Cv?lx$O^6QS0Qc>Xa zs_^HV5_{tzN_8I5ic~IBFXk&5usHg+A=~)?<^Inu{XjAujczAD(4rFtCis;lHZQAN zNk-{ZDSzypmMr8mYxTww>g04?n|exhm`u7KoYb_u^xX{5?-H48n3oMsO$ulx?WuilZmn@RmSlj0GX~l*O5#FXk`eK>?#tZX zt3h=c-6~JcP`z^Fk=`WIFfSk?=8@4dX`ph)uW)#wj^@hczoa4$Cgs1+L*&KX2DzAU zp0Wb4TEw}`sTt-vl06O6GHTxTGX*&sw3ZQJ^Lim#eHdU^b`VMz!vH(J5l1vo2vk9I z*`D5rg+`N+-}eCI(8(Pc!G=p5MVaqM{=R5UEG?OeJ4PohP0cz)-_g|d%TvR&-LYS) zq0Bh2gG|`2RaKabhmgmFX**sYNKx_W6QUBYF0 z>cg_G&nqVCz87^a*!<Qjxx=r)Skv zVXJmk9;^%5i;0Q(WUDXIBoGBw4~q_~}wJLZN~idVCCu$&%&RugiO(-6jn8nKw!Kqtepv;ypV zLLjqLks(viGy%b61T+Qqjfl!7=zRiMiV=atmv3svR8h5+0D<>(Z@&*p#RNrpiTDVp zjd+=HN<#!Cn9&ib8u30UD3<@ItKWW~(k^6a`_uoAs>E}JXJg}{K!3-}WI(yl=g9THJ)}o4Om=Lp)7;@%rl`sog85V5Lbn?e1 z>j1KcD;PT?v=1jzd;?eK0{}SQ5((^D z^(x?^A|BF0{8EPDhBd|_J{aK)W^Z+d;lidc0P4p=jlGOdp!8ij123wQp zat!b&DZBja+Sf(=s=YwJysRQH5Z zh^q>R*)~~t@vTG)bP8$H7=O?b@>|5LJp}t^B1HJPU)o0vPPLDRm`%t>mLs9tQdA4s(VUW>+Er z{ep4}8~8-+FcC^ANI94AYBk$bEgF|*=gr5csC3br+3b@hIQfc85M^0*A|Duwz7yXU z4lc z+CjS2y7`^hY4WKd**smti5A?%?PBk2rl<29aWZ|sI?U#w=MFwiuMS_G?E9o(5~5U! zAdulHTer$FFe4f%w&6#peyCy!*T<8C zc$t$RxfaBGAYM$OL4sci21bGUIBizbAAN%j>IMIhuq1}(LgDcvl6q*7Pk;WH+_f>v zUkz6`e$rBgca2rV6k8j(p={1x|DFWsL4Pek(s6{TAukK4q%->s0RZ`6sA%-iTkOCT zKQJ*85Wpb?3}SgE6(6DGpd+R;X6Gwxe%ngj%@I@~ov2Xq`t);$6N&u_^ z?iy@Wn@!V(Sw%2qA+5v?SR9^l^5(`>S2iR0AS`CB$0X;%Il&nbi2Sh5CSwCp-bnz1 z8OwOkD#~lDsBDtlcw=8HuN3`+k~hOJ-}f^t>o7*?X@dB761}iOq1ZZs7)N-Ln74G~ zItQVFy6BeZqr=kD1n9$`5XN0Iy@Iv&rVN^R{c8gi0E$6be zSN1QDqbN_uHH(!qB=Fgq`P>)osq#`YG^s#V$I)r0?q&i$*t^BSf#Wpkj?eQX>*Cf6 z6CL)EX_Q_P0i(;*!e-%BUP`cyeatsj^^t?_eRYCRnijV{IaE|fbW0AiO}aM(NwH12&}+$fA}^gpLw>7e=4WZ$HdAWlc)arTQQo&JkdCDw&blFqH*yVC&8XVZS}&ROJbq1wFV*_S$iK8chwn zB5(C<)_SkS5%k}a|Na{T^t^`*>@VFD6&cQW@ir9>`R@h}RsS#Kce-q%`VT2iBY=J0$wZDx)s9w4Rz5n!=!7p@M?aR_otIZBm>n-LTt;;(Uq^E4 zW8`Df8tUkoUpgE-dK@g4)rWXz7af9He$kGVvLgw2`y$Y2?@0e-g{{Iyto-HM8q~e5 zy-CS+vQv=l6mSyZT9rOiam&cmY7jPeb#3V!=y;jRu!w2dm}u zr4kd8jL~o3qYJ%H#B@>keICT4Mg2i&=b&x@n}9_n(1aBMT)J1?)eNi0NZyMN=Ywgd z@-m>H1Io5cssJT~yHYqB;glG@LjNQev0&O?T`vNNO@B=MzaU;8@i8DWXx>?W(Dkww zS)87rc`f5#=gJKk_}QD0xVWvDvF3s98pUxlQXj6v_P-q3uX&$GS;DSZuBhRn2vssu z>Qay_56WIeZZ4>0q-8o~>*kQEfL;~~C+WuQqSO>*GjNxSZt2f zt>#y;Mo;4QTcY%lP5W9uP4PT#aI+(VjIJrz)M_sbn5^kA-mp|BbrC(a&NlrBP?J<) zvWDUUxYF5paYjBcJ5ZlCL10aLfpM5%j3F#O*%w~0EU>aduAC)0Mav)}o9)tFm(%Bm zu3lc2zVR840eV3XsUEsn`A3@oc%Vx`ODJz@GQea*&uu$<5Fu6fk^^PYjf{?4>xYvZ zX@3YTp*XlXl(QItg)yzX(n6pq*zy|USEFM72ehzeQ@QfF5=$jtTPegEK$Fn)D z&@OhRAoIymrX{u7V9%Co`Q(_{!R0;!i0In*_0+raxYiP<{t8T4i2$AFo?$;eX>?P5 zxf;!<1gTvkls&)=CHxM)uTj43-X{jRjy5pCV8V?z`p;EVx^1@A$@BFy?+77Srf#+Y zkM9k;JzSN%V;h{;>~z3J$w*~TC9pd@q_^VQ-~r9Bp<(H*$iJHzugg$V19}lUfoV7qpV7UM7ehO~^xz>gw%?AQD?{VmuR#wBf!%W+$)Nc52lkf7d#}vW=L3 z+VfxMrdCIAz31IKMpTvwWg|U_LDS!hI>m?VaT>RHe&ZTH?VEWRs#N+kCL+w{$(MbC zO@)FOu~YWxjOk*Z${%#7!mEY~ZwhAkRO*o|TVRh#3%Mln)*C{9KT(gNGLa+(GRx;! zkC)v#&dn$*&{h6f&*iHrO#cn@EUh>QBP;gQlNCvdbuEbs{x3XPIH4 z1iGIbBLKwMaKBhq3Uh;H443ohScwuTl_Bs)bj2g{P}-XG|ZY4@hsi2O#O51yOpwkKEaT>9y>T(x)c z@|AZ}0~`j?0y;we9tR=nA7vrcu=9e=J_L4x98&fSKH~KBF#mpe~d<;v1MJv*@(;l;O}JUNc~}Q@jFCoGfuuQDw~YCI5<>#j%Ilyg z4BRm2=d>-0AMoKDJ@&lC0%=QV{v#eqJB4I9G}qIyW`jr^0l0jO>1-96l=qq8Ln;-@ zI}rd-Ho0{74lR%*j?qFdR1_typ_YZ&G|-R+0TgT)48jmTK#MP)! zJ|b8YCf(c-UF>SfA2FvN`8SYp$KBrPkK29Za9!lqBSS#`VT#a;^R*b#Vc$h7*caDY|(Rr^7VfyKzQgNxBF zzj5_~RNg>#!EG{csu;NqlDuLAQ!;gjtq5Ea>6y5{C?iZ17$jT1Ov-ToeEcDh#s_2R z?WQw8f$4G@)uz*kThBP>z)A~IM)gRF|p!^iG#s zRur2Y8;E#t8Irl`MdQ?%GJi9xEzjwh%JA5A=NcV%_&46x4pg9;G1O1Q-%Tu)!e<|p zOxgcv{3ly4Zj-@Mzp>@7(7m{N^MwhKPFVoJ$1H%T@#n|46p}LR06fLKpxM{OeaGW{ zaon16_g5nym%B?(G8QPxH=?fKD?zN`sbY=|$KWwS&Mco5o5`q(-6e=*e(mw(^E}KF z?J5QL{Z3<`*Sy30UbRVWU%Y+FkzJj(_xqSLd*GOAqwN58zP43#tF+fCKOLdX z=XWzU594lxwp_7Tqo(P!t(3o{c4nURSSXQtF$NB7ZkmaHX0Zs-@ZE0xACmn)*jpTk zejws>?Rrh5+&K%`xEAY zBdf1ZvX2kd#0sdiQYFjdgCQPF^A~F1r6qW!DB~5L(l-}w+c00{IxGw#dK|d>ye+{- zG@gD^RM0{W+cS?pPX2~cE&k0t2DC%M<>A@!rh<&ThxN$@dOH@Zbq~#DJSDc;LD7^5 z-r#%uHEw6nw$6GG5tt$}q)QM)(%F~e;z8EuiDG?05s$i3If1`3WvoV2#uP+y!N$h1 z)4s?r`J2~w=l;j;ms!4X&pf5!O?6DO-#%n6jFDQG92+)NgAJ&B1}V<#x>{4_hi+!*OvR{piA<@` zBoWcn^gP7Va4-J?l@5`2sENGqwfyDJs1>s}Fot1I>{@h%$o8s7;gSSfXbotNO~1SbOQPm>l`2SV1! zVi1?#cq`8N2m7if;soc4g3B?%e*m7hUGL)`BLo+o3Myc zBHM`Hr|5T`o7Qcvd&U$k9`j}1e?hlrK;4CvO$|JSqRdf}G7E>De8=Pmx+P3b-Xhe= zB!yBl;`g)rS#IEB+3t_&zxKj~&Xi=>*^95OLgp{SqS48k-Nb0cErpu<4R(~A(}kFU zV;*lelDwr81`mX3uWc*!Wg;u4L_0iJ(_Z;xx^qJE@=bSQ_vFm?LX|Fg{xd!L-%I6_ z93ynSEc2`3F{mQ@mtjjohO zV-~|OPF8iQ!D3z>hk~13o1BevaD}4c8%Aipy}Cl*4@|ozPUZvsqy`tMNPpEeQxxyG-Z znQxeoxmnfBT=r(a2s}Jy3Wnz(7424=@0H3+9=Cr8aP;k(2&#UG@uU$! zn3SHukiWtcN2eyx<`zPJSCvcbjhguTn(NmOIg3R8Et&G|Ahe3@?rjEnlj-qk&O}i{ zJR@?cq;NX3sey0-4lL}Yv8F#YwUPUd9uA9|bIIT^F^hIIT>ZNCzAMiLZdO<+$$aGr z#L0X5;f0{i5T+N;65NUo9PXjkJ~x~+zeT* zQ^lsg=z9}ajG*?GcgRGR#fD6&aO}$HQz|?5C>vZu{xdS0{4JpsPprZrAG9XvMRzL9 zt)I@=kgy$-4=vf~9A!7MF5sZ#kq8cL@7SAS9$Ds z68xOklVbtB)e4-S>o#Nx(?P&Zmvlk^nkH!po?hzTXW8~;5%#?+v1^uL&^5-04tJ9O zAR|phoTOkq{Z?r1ulhZua=msGDIjYa#|M9wfbT~Y+%^tkF$9M!A9S*GuOm$OgtQxF zfL(y?AsWu1iFAb2QIh(Uoo2)nL#Yr)-x%Z9A3}VsSJ&(*T_5xi$EuKB-o>KEKQY6V zlOvW+DZf{1v_S^D_n|%Oy8gr3d=3NC3h!%Fqi&Y{k7&{&t{fVgz@z9G%CP%87mit#qDHF`v$xE>cvC} z=?ik|JOZnXb5>W@1z*SSNlin8db=)7{!IKN1U6c+A|zXTa-k&Z8QMRxXd zE+7m$7?dA6)St$RA;zuP`|f1R6qOIswIwy&7(CfzQ`cWR17PDnVSmGLYgV@D%Gduy zZr=k_@VMVq!W9V>DRKh<8+vd8aQeivTymwNDmI&nN8=+lK^Kuq-nZpY12BvZuz=F% zXQF9@0anqjeM%ZYCO&BI7et@LUwE6tuWS?+7Ita;0l8Dj5SzBVG&`H2O?a(|tcM;f zr;h6u$7FzPoi8#a8k2FxS~?Q@L>Ct3G8;w)mgNn9?f>uKvzR&P;)}pjiq2Ro2~wq+ zGuBpy1^QFtC+NM{h3g6tQe`ZAt>Cj5W6&6Uz6p+$xqQB0G{S;Og9-_wmMIZ`O+Rmu zRVf)NK^5;b?=M)pUsVIG%G5OOk^-;?YuR!XLt6`$3J>g;@@(wsDmPO7H2nX`R!y^% zK7AQt{ly2P1OvD`eshMc-#>nE(Z!u~i>6XcbSPPIKZNhz`Rm>g*LSIFY&4=d$6euL zgyCkp(<#PeJr$L)gJHz9d4kELDB3OqD+RrHGuH~LtYuuJlbTX&R$4bjUzQl&oO-{P zfXK>9vS$KRYw2_B{{TdiM!V@%_pa0OcTJH77A=b7tfGqJhQ<zY7MpEa#KW-S|s~L&g{_{nArS(f{rn|7< zOcrt(8v}9`W*e{5sC|{Q=<#emZ9FU6xBPKSC?jhx-G9-DxC;8W^_s^u^5Ck&4~`YN z#0&)Rng1#U0ZRa`-zxQh>%xCY6-XhOqcdfhA-tA{$oL9>$0Mnuh+ONz zHpab^22t(G96wHaiiF@+=Dak2k|`$xE2sj@AhO0!1`^s<*G!2OTN|CGH)t(aA7zv^Z9)9XzWI6$VGm zUBY%QVa+PNGdAH_z-Yo!?uZf28ta5%(BBxn{uobR$R39|YSXtvvZC;-?qn$>1rZj` zZF%F{LyS)eCAzaQsjzJQ@Q_!%L{c*(Wc^R+&XvH(Dl zzb(Oez|W(b2V!9@RM^ZCj7UEc?p^H;PJ2E&XX-S1>qBJffu^l??>qg5ir_?Ycx~nh zs)2PoE@jPLNLxik^?;)A;%*J4ekvkjrDZ?b50KA!(pa{TbqG@GN&l^V<6V51qeO;I zI8GNqKsBXBE?o+cZp+2^nhr3j;MN;4v1r}xU^V-FT?|s3<4+RZ^7eS8eNFi9Sz|`X zKcEW5`_bPVW~{~VWZ8hDPq%*68HkCw!oH68dRO zARu>@9KMzowBR=f04U_cT=g!JKX8e0ML23KJ>a=y`O0)k8KeH42P{4(GqqdOW2Kt;E29rtj+uxziW_KA?i6-oYVw zS34cRbY;z4&l2hx793f>_Dt}`vxT^WxH>iuMddF<$mr;#X9C0ZeRqs>3qskWA8srZ&B zYuPUVgvQn(T-0oAi7F0Ei(BB%GQL2Y;7DRcrJxxS6-Noi_Z7k=8up){kpu;(JJw< zfv47R>kDW3(!8aP$ft#w=)JcAy=-O5Z3H$<1CErPdRoluwGV|tJ{!Dk6yhgE!SlT_ zKRyzE%lm47k7}s(CEgj4EESQd=umEJuX(o`>wY}4*yQt&ir5{Mh($KqUxT5)0V7QU zJT!q_QSDy(%2fzG0XN^5-U~M7Ay++ z1l*W}2>yQ@9Bm19&=#Mq$T(D-SL@s>UBpJW15oA$Q(T?)IU ztHu$>PvGz|4JA1K&ja2j{c2$i;1afFDdC>I0WWB%x16NT-L8b z+R?JesNT_x9PCyw_DLk13a#EZE0>u%Sqx1hyF>zjmg6FTTwDqoJo&QTPf9O3?K7~S|W2k;o4L>S43=uYcf zCL5nzEzTqI*+Fq3hG__Uo4@?eu4D~c#lifJW4a;emfN|{^L_^%Z!Gnm+=S zqLQC{k^#rlqmg{q@4_ZZNB`|R+`vT!JrvH5HK$?$qrzt^w&5L4BTal$U-u9}PC~F% zH}`wAe+&D-yO{+CaTMBqkNSr@>RKD9uCz_oZj4Yo#(r1D(^dv{Ubg31>cr+XnL>Mi$98z^&afHb-g!uX@ehp-k#T~(l1Vl12|Jo^HEs{w ze*~KgFL)+go=?>B;;}=#IicSaS5%(#4@NaDxe3s1XK?4BScWdD42AShb_$*R& z)7p)BKIR%eswTRYX+nd>ff4$712PK_7dKL;n%nwx7ns4M) zLx#-F6#JrBr)8vnRtYmYkR+F!u&L!}M(Mn@{FzYs?iv4M;vPW{bAqCH93M&^qzk>f zn^^vK-5RfoSW%}#+O$27gBIc$)4ye@K&B#|+nf{Dv#Y^8lKa*=66P1=%bdvnkQHeitSfaesa_Sm{V#vAOvDr}b`UnCUyLPnXFVqzPoRr&?gUahuB(pzNf z;!Ig$!Eua}3?oSGSTyF_)!B6;5&_)_`R?-z(@wi-YO27A6}Dw_YtQ(vHC8Io_Mm7S zKnti0~{Bx58;*mud;ky zc9Us#HOpKQ4xXmIX_q!w3A7qk^eP`9wr@f1NL=kswgG>mg3v3giwDSgY%7Gnp^`nD z(ood1!s@HCf4`F1WH9cO_Szb1L6SFL*1b8he(x``Su$c*I>L8}Uw)&JW$MCCF4*@v zx~DnqRZcke%7pwP4_lpS5#p5JsJ?fnJ)QcsRX?F(Odq?Bbq#FYTHs6eR2#s%RsM#D zR7o3tPxilCDabv}M$ZA*QVTaLLjM&yjlqHOy=2 zNu_z2O^SR;i#tJ39X&p-x5H18}@nbWs+%4E0ZxsJ?seUPDhVL?M{Zp zNhXbb^XD@D5$=Kq*6p#rQOAO5mdi}bu-00zYac>|j}1vq*hy0x$r&+HWe$-tPG>th z*p~)FQt6Z!A(xOKrpc6m^zBj!^OF}VWq#Yvwc>9TQcv^0vI&^pJNtI|6_e^Q6oFCh z0AL}yhV7>?b__PwB$8|e8TP*G6rwbYbUtstQ6b)&h|t3VX$-oX)L1qXU!BJNUF`=9 zI=VO%n0Xw=uJizM`=r1XYWdW36bPkgBV^>F)B3);=el(_h)&3hYIZ!L+{n-pP4>Y7 zBzbJl*|ev+>HF5q_{Rhjta;j+IOSc61v&G;wSt#wl9pRKSIT@X5>p#<(Wg{~J?jLF ztlO6Fs2QX8R##-VGTAYz?Q2H`k9##S$45EuQs@e@+f)Kf8y&2 z95&!u2n6X=+%jMG%vgJrf%+p&AeEn#`bGn9f9PWv<>oa}M#|n8(snL`_Qi$!K2LQJ&}Y zx%%?p8}5fyQjcBZO84r(P6pRhA4SloDj_Hb%en8;>;YCFN{? zR0u-z?wDYxOb#Yiez*ThQKYXT(I{PZo|L`U2LW$X5H~~0q^V!9;WQT|5*!O4TXQG zqA6NQ177vKFK%cN|*>l)_Rh(vFSN#iRDhTlJwKV=tqv&Pg07n=2Syz(UL1+ z3CY9gr@G|Hg~zR?e#SX-dy}ZiUy7xySxcyBm|4~b#;!GXxe(NI@^mA&2$8x775Our0d~o zvFT(#miICsFsX0S(bp(GVDHTm6cNv{bux42E+v7_mvz|2+a=prxa;g|^b9=|0)6`F&MyVO5qd{V3d>&SM$(q>_ zY_s@vWB<6X$$_FM`nk8a3YfCG#GZ@KN{Nt$a09fIZsrpNBf-sDm+n*z<&`qwVIhm; zpFgcHS{x6WE}PdQAqj|!LB2oOE`-QWZY+2EkD{|H0wcZFmhTJJeD;&pME!q`A#yXy z+O&UtLTlW`?F@&ouJz8kAEleFFyP$Uv$IzKqT6PFQY%rOAPwfChkv?CD>JLS3a^(M0hH(92NN z(;cRD5pbz>d^R6OXo_)A^xva{pdGgrCK^YJ+Kf8LILa>34X3{KsxFUKvV_C~%8W

@q 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 K6iK~$_x}Jn1g?<) literal 0 HcmV?d00001 diff --git a/Sources/ATT.swift b/Sources/ATT.swift index e7035c3b8..54a8c03b2 100644 --- a/Sources/ATT.swift +++ b/Sources/ATT.swift @@ -11,7 +11,7 @@ import Foundation // MARK: - Protocol Definitions /// Bluetooth ATT protocol -public struct ATT { +public enum ATT { public static let PSM: ProtocolServiceMultiplexer = .att @@ -27,17 +27,6 @@ public struct ATT { public static let maximumValueLength = 512 - /// ATT MTU constants - public struct MaximumTransmissionUnit { - - public struct LowEnergy { - - public static let `default` = 23 - - public static let `maximum` = 517 - } - } - // Namespace Typealiases public typealias Error = ATTError @@ -47,6 +36,8 @@ public struct ATT { public typealias OpcodeType = ATTOpcodeType public typealias AttributePermission = ATTAttributePermission + + public typealias MaximumTransmissionUnit = ATTMaximumTransmissionUnit } /// Error codes for Error response PDU. diff --git a/Sources/ATTConnection.swift b/Sources/ATTConnection.swift index 299004ea7..6eff3957f 100755 --- a/Sources/ATTConnection.swift +++ b/Sources/ATTConnection.swift @@ -14,15 +14,7 @@ public final class ATTConnection { // MARK: - Properties /// Actual number of bytes for PDU ATT exchange. - public var maximumTransmissionUnit: Int = ATT.MaximumTransmissionUnit.LowEnergy.default { - - willSet { - - // enforce value range - assert(newValue >= ATT.MaximumTransmissionUnit.LowEnergy.default) - assert(newValue <= ATT.MaximumTransmissionUnit.LowEnergy.maximum) - } - } + public var maximumTransmissionUnit: ATTMaximumTransmissionUnit = .default public let socket: L2CAPSocketProtocol @@ -74,7 +66,7 @@ public final class ATTConnection { log?("Attempt read") - let recievedData = try socket.recieve(maximumTransmissionUnit) + let recievedData = try socket.recieve(Int(maximumTransmissionUnit.rawValue)) log?("Recieved data (\(recievedData.count) bytes)") @@ -122,7 +114,7 @@ public final class ATTConnection { guard let sendOperation = pickNextSendOpcode() else { return false } - assert(sendOperation.data.count <= maximumTransmissionUnit, "Trying to send \(sendOperation.data.count) bytes when MTU is \(maximumTransmissionUnit)") + assert(sendOperation.data.count <= Int(maximumTransmissionUnit.rawValue), "Trying to send \(sendOperation.data.count) bytes when MTU is \(maximumTransmissionUnit)") log?("Sending data... (\(sendOperation.data.count) bytes)") @@ -284,7 +276,7 @@ public final class ATTConnection { // MARK: - Private Methods - private func encode(PDU: T) -> [UInt8]? { + private func encode (PDU: T) -> [UInt8]? { let data = PDU.byteValue @@ -292,7 +284,7 @@ public final class ATTConnection { let length = data.count /// MTU must be large enough to hold PDU. - guard length <= maximumTransmissionUnit else { return nil } + guard length <= Int(maximumTransmissionUnit.rawValue) else { return nil } // TODO: Sign (encrypt) data diff --git a/Sources/ATTMaximumTransmissionUnit.swift b/Sources/ATTMaximumTransmissionUnit.swift new file mode 100644 index 000000000..bd737c522 --- /dev/null +++ b/Sources/ATTMaximumTransmissionUnit.swift @@ -0,0 +1,99 @@ +// +// ATTMaximumTransmissionUnit.swift +// Bluetooth +// +// Created by Alsey Coleman Miller on 4/8/18. +// Copyright © 2018 PureSwift. All rights reserved. +// + +/// ATT Maximum Transmission Unit +public struct ATTMaximumTransmissionUnit: RawRepresentable { + + public let rawValue: UInt16 + + public init?(rawValue: UInt16) { + + guard rawValue <= ATTMaximumTransmissionUnit.max.rawValue, + rawValue >= ATTMaximumTransmissionUnit.min.rawValue + else { return nil } + + self.rawValue = rawValue + + assert(validate()) + } + + fileprivate init(_ unsafe: UInt16) { + + self.rawValue = unsafe + } +} + +private extension ATTMaximumTransmissionUnit { + + func validate() -> Bool { + + return (ATTMaximumTransmissionUnit.min.rawValue ... ATTMaximumTransmissionUnit.max.rawValue).contains(rawValue) + } +} + +public extension ATTMaximumTransmissionUnit { + + static var `default`: ATTMaximumTransmissionUnit { return ATTMaximumTransmissionUnit(23) } + + static var min: ATTMaximumTransmissionUnit { return .default } + + static var max: ATTMaximumTransmissionUnit { return ATTMaximumTransmissionUnit(517) } + + init(server: ATTMaximumTransmissionUnit, + client: ATTMaximumTransmissionUnit) { + + assert(server.validate()) + assert(client.validate()) + + let mtu = Swift.max(Swift.min(client, server), .default) + + assert(mtu.validate()) + + self = mtu + } +} + +// MARK: - Equatable + +extension ATTMaximumTransmissionUnit: Equatable { + + public static func == (lhs: ATTMaximumTransmissionUnit, rhs: ATTMaximumTransmissionUnit) -> Bool { + + return lhs.rawValue == rhs.rawValue + } +} + +// MARK: - Hashable + +extension ATTMaximumTransmissionUnit: Hashable { + + public var hashValue: Int { + + return Int(rawValue) + } +} + +// MARK: - CustomStringConvertible + +extension ATTMaximumTransmissionUnit: CustomStringConvertible { + + public var description: String { + + return rawValue.description + } +} + +// MARK: - Comparable + +extension ATTMaximumTransmissionUnit: Comparable { + + public static func < (lhs: ATTMaximumTransmissionUnit, rhs: ATTMaximumTransmissionUnit) -> Bool { + + return lhs.rawValue < rhs.rawValue + } +} diff --git a/Sources/ATTProtocolDataUnit.swift b/Sources/ATTProtocolDataUnit.swift index 4aaa9a8d4..c2fa405e5 100644 --- a/Sources/ATTProtocolDataUnit.swift +++ b/Sources/ATTProtocolDataUnit.swift @@ -101,9 +101,9 @@ public struct ATTMaximumTransmissionUnitRequest: ATTProtocolDataUnit { public static let length = 3 /// Client Rx MTU - public var clientMTU: UInt16 + public var clientMTU: ATTMaximumTransmissionUnit - public init(clientMTU: UInt16 = 0) { + public init(clientMTU: ATTMaximumTransmissionUnit) { self.clientMTU = clientMTU } @@ -118,7 +118,12 @@ public struct ATTMaximumTransmissionUnitRequest: ATTProtocolDataUnit { guard attributeOpcodeByte == type(of: self).attributeOpcode.rawValue else { return nil } - self.clientMTU = UInt16(bytes: (byteValue[1], byteValue[2])).littleEndian + let rawValue = UInt16(littleEndian: UInt16(bytes: (byteValue[1], byteValue[2]))) + + guard let clientMTU = ATTMaximumTransmissionUnit(rawValue: rawValue) + else { return nil } + + self.clientMTU = clientMTU } public var byteValue: [UInt8] { @@ -127,7 +132,7 @@ public struct ATTMaximumTransmissionUnitRequest: ATTProtocolDataUnit { bytes[0] = type(of: self).attributeOpcode.rawValue - let mtuBytes = self.clientMTU.littleEndian.bytes + let mtuBytes = self.clientMTU.rawValue.littleEndian.bytes bytes[1] = mtuBytes.0 bytes[2] = mtuBytes.1 @@ -145,9 +150,9 @@ public struct ATTMaximumTransmissionUnitResponse: ATTProtocolDataUnit { public static let length = 3 /// Server Rx MTU - public var serverMTU: UInt16 + public var serverMTU: ATTMaximumTransmissionUnit - public init(serverMTU: UInt16 = 0) { + public init(serverMTU: ATTMaximumTransmissionUnit) { self.serverMTU = serverMTU } @@ -162,7 +167,12 @@ public struct ATTMaximumTransmissionUnitResponse: ATTProtocolDataUnit { guard attributeOpcodeByte == type(of: self).attributeOpcode.rawValue else { return nil } - self.serverMTU = UInt16(bytes: (byteValue[1], byteValue[2])).littleEndian + let rawValue = UInt16(littleEndian: UInt16(bytes: (byteValue[1], byteValue[2]))) + + guard let serverMTU = ATTMaximumTransmissionUnit(rawValue: rawValue) + else { return nil } + + self.serverMTU = serverMTU } public var byteValue: [UInt8] { @@ -171,7 +181,7 @@ public struct ATTMaximumTransmissionUnitResponse: ATTProtocolDataUnit { bytes[0] = type(of: self).attributeOpcode.rawValue - let mtuBytes = self.serverMTU.littleEndian.bytes + let mtuBytes = self.serverMTU.rawValue.littleEndian.bytes bytes[1] = mtuBytes.0 bytes[2] = mtuBytes.1 diff --git a/Sources/GATTClient.swift b/Sources/GATTClient.swift index 45089d196..2f21a0232 100755 --- a/Sources/GATTClient.swift +++ b/Sources/GATTClient.swift @@ -30,7 +30,7 @@ public final class GATTClient { } public init(socket: L2CAPSocketProtocol, - maximumTransmissionUnit: Int = ATT.MaximumTransmissionUnit.LowEnergy.default, + maximumTransmissionUnit: ATT.MaximumTransmissionUnit = .default, log: ((String) -> ())? = nil) { self.connection = ATTConnection(socket: socket) @@ -235,7 +235,7 @@ public final class GATTClient { completion: ((GATTClientResponse<()>) -> ())?) { // short value - if data.count <= connection.maximumTransmissionUnit - 3 { + if data.count <= Int(connection.maximumTransmissionUnit.rawValue) - 3 { if let completion = completion { @@ -306,7 +306,7 @@ public final class GATTClient { private func exchangeMTU() { - let clientMTU = UInt16(self.connection.maximumTransmissionUnit) + let clientMTU = self.connection.maximumTransmissionUnit let pdu = ATTMaximumTransmissionUnitRequest(clientMTU: clientMTU) @@ -421,7 +421,7 @@ public final class GATTClient { // The Attribute Handle parameter shall be set to the Characteristic Value Handle. // The Attribute Value parameter shall be set to the new Characteristic Value. - let data = [UInt8](data.prefix(connection.maximumTransmissionUnit - 3)) + let data = [UInt8](data.prefix(Int(connection.maximumTransmissionUnit.rawValue) - 3)) let pdu = ATTWriteCommand(handle: characteristic.handle.value, value: data) @@ -452,7 +452,7 @@ public final class GATTClient { // Section 10.2 then, a Write Without Response as defined in Section 4.9.1 shall be used instead of // a Signed Write Without Response. - let data = [UInt8](data.prefix(connection.maximumTransmissionUnit - 15)) + let data = [UInt8](data.prefix(Int(connection.maximumTransmissionUnit.rawValue) - 15)) // TODO: Sign Data @@ -476,7 +476,7 @@ public final class GATTClient { // The Attribute Handle parameter shall be set to the Characteristic Value Handle. // The Attribute Value parameter shall be set to the new characteristic. - let data = [UInt8](data.prefix(connection.maximumTransmissionUnit - 3)) + let data = [UInt8](data.prefix(Int(connection.maximumTransmissionUnit.rawValue) - ATTWriteRequest.length)) let pdu = ATTWriteRequest(handle: characteristic.handle.value, value: data) @@ -511,7 +511,7 @@ public final class GATTClient { let bytes = [UInt8](data) - let firstValuePart = [UInt8](bytes.prefix(connection.maximumTransmissionUnit - 5)) + let firstValuePart = [UInt8](bytes.prefix(Int(connection.maximumTransmissionUnit.rawValue) - ATTPrepareWriteRequest.length)) let pdu = ATTPrepareWriteRequest(handle: characteristic.handle.value, offset: 0x00, @@ -538,7 +538,7 @@ public final class GATTClient { case let .value(pdu): - let finalMTU = Int(pdu.serverMTU) + let finalMTU = pdu.serverMTU let currentMTU = self.connection.maximumTransmissionUnit @@ -746,7 +746,7 @@ public final class GATTClient { operation.data = pdu.attributeValue // short value - if pdu.attributeValue.count < (self.connection.maximumTransmissionUnit - 1) { + if pdu.attributeValue.count < (Int(connection.maximumTransmissionUnit.rawValue) - 1) { operation.success() @@ -774,7 +774,7 @@ public final class GATTClient { operation.data += pdu.partAttributeValue // short value - if pdu.partAttributeValue.count < (self.connection.maximumTransmissionUnit - 1) { + if pdu.partAttributeValue.count < (Int(connection.maximumTransmissionUnit.rawValue) - 1) { operation.success() @@ -876,7 +876,7 @@ public final class GATTClient { if offset < operation.data.count { // write next part - let maxLength = connection.maximumTransmissionUnit - ATTPrepareWriteRequest.length // 5 + let maxLength = Int(connection.maximumTransmissionUnit.rawValue) - ATTPrepareWriteRequest.length // 5 let endIndex = min(offset + maxLength, operation.data.count) let attributeValuePart = [UInt8](operation.data[offset ..< endIndex]) diff --git a/Sources/GATTServer.swift b/Sources/GATTServer.swift index 57ac84847..e31dc54a0 100644 --- a/Sources/GATTServer.swift +++ b/Sources/GATTServer.swift @@ -38,7 +38,7 @@ public final class GATTServer { } public init(socket: L2CAPSocketProtocol, - maximumTransmissionUnit: Int = ATT.MaximumTransmissionUnit.LowEnergy.default, + maximumTransmissionUnit: ATT.MaximumTransmissionUnit = .default, maximumPreparedWrites: Int = 50) { // set initial MTU and register handlers @@ -243,7 +243,7 @@ public final class GATTServer { // // If the Characteristic Value is not longer than (ATT_MTU – 1) an Error Response with // the Error Code set to Attribute Not Long shall be received on the first Read Blob Request. - guard isBlob == false || attribute.value.count > (connection.maximumTransmissionUnit - 1) + guard isBlob == false || attribute.value.count > (Int(connection.maximumTransmissionUnit.rawValue) - 1) else { errorResponse(opcode, .attributeNotLong, handle); return nil } // check boundary @@ -267,7 +267,7 @@ public final class GATTServer { } // adjust value for MTU - value = Array(value.prefix(connection.maximumTransmissionUnit - 1)) + value = Array(value.prefix(Int(connection.maximumTransmissionUnit.rawValue) - 1)) // validate application errors with read callback if let error = willRead?(attribute.uuid, handle, Data(bytes: value), Int(offset)) { @@ -283,15 +283,15 @@ public final class GATTServer { private func exchangeMTU(pdu: ATTMaximumTransmissionUnitRequest) { - let serverMTU = UInt16(connection.maximumTransmissionUnit) + let serverMTU = connection.maximumTransmissionUnit - let finalMTU = max(min(pdu.clientMTU, serverMTU), UInt16(ATT.MaximumTransmissionUnit.LowEnergy.default)) + let finalMTU = ATTMaximumTransmissionUnit(server: serverMTU, client: pdu.clientMTU) // Respond with the server MTU - let _ = connection.send(ATTMaximumTransmissionUnitResponse(serverMTU: serverMTU)) + let _ = connection.send(ATTMaximumTransmissionUnitResponse(serverMTU: finalMTU)) // Set MTU to minimum - connection.maximumTransmissionUnit = Int(finalMTU) + connection.maximumTransmissionUnit = finalMTU log?("MTU Exchange (\(pdu.clientMTU) -> \(finalMTU))") } @@ -346,9 +346,9 @@ public final class GATTServer { var response = ATTReadByGroupTypeResponse(data: limitedAttributes)! // limit for MTU if first handle is too large - if response.byteValue.count > connection.maximumTransmissionUnit { + if response.byteValue.count > Int(connection.maximumTransmissionUnit.rawValue) { - let maxLength = min(min(connection.maximumTransmissionUnit - 6, 251), limitedAttributes[0].value.count) + let maxLength = min(min(Int(connection.maximumTransmissionUnit.rawValue) - 6, 251), limitedAttributes[0].value.count) limitedAttributes[0].value = Array(limitedAttributes[0].value.prefix(maxLength)) @@ -364,13 +364,13 @@ public final class GATTServer { guard let limitedResponse = ATTReadByGroupTypeResponse(data: limitedAttributes) else { fatalErrorResponse("Could not create ATTReadByGroupTypeResponse. Attribute Data: \(attributeData)", opcode, pdu.startHandle) } - guard limitedResponse.byteValue.count <= connection.maximumTransmissionUnit else { break } + guard limitedResponse.byteValue.count <= Int(connection.maximumTransmissionUnit.rawValue) else { break } response = limitedResponse } } - assert(response.byteValue.count <= connection.maximumTransmissionUnit, + assert(response.byteValue.count <= Int(connection.maximumTransmissionUnit.rawValue), "Response \(response.byteValue.count) bytes > MTU (\(connection.maximumTransmissionUnit))") respond(response) @@ -416,9 +416,9 @@ public final class GATTServer { var response = ATTReadByTypeResponse(data: limitedAttributes)! // limit for MTU if first handle is too large - if response.byteValue.count > connection.maximumTransmissionUnit { + if response.byteValue.count > Int(connection.maximumTransmissionUnit.rawValue) { - let maxLength = min(min(connection.maximumTransmissionUnit - 4, 253), limitedAttributes[0].value.count) + let maxLength = min(min(Int(connection.maximumTransmissionUnit.rawValue) - 4, 253), limitedAttributes[0].value.count) limitedAttributes[0].value = Array(limitedAttributes[0].value.prefix(maxLength)) @@ -434,13 +434,13 @@ public final class GATTServer { guard let limitedResponse = ATTReadByTypeResponse(data: limitedAttributes) else { fatalErrorResponse("Could not create ATTReadByTypeResponse. Attribute Data: \(attributeData)", opcode, pdu.startHandle) } - guard limitedResponse.byteValue.count <= connection.maximumTransmissionUnit else { break } + guard limitedResponse.byteValue.count <= Int(connection.maximumTransmissionUnit.rawValue) else { break } response = limitedResponse } } - assert(response.byteValue.count <= connection.maximumTransmissionUnit, + assert(response.byteValue.count <= Int(connection.maximumTransmissionUnit.rawValue), "Response \(response.byteValue.count) bytes > MTU (\(connection.maximumTransmissionUnit))") respond(response) @@ -479,7 +479,7 @@ public final class GATTServer { // truncate if bigger than MTU let encodedLength = 2 + ((index + 1) * format.length) - guard encodedLength <= connection.maximumTransmissionUnit + guard encodedLength <= Int(connection.maximumTransmissionUnit.rawValue) else { break } // encode attribute diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index 2bf00e293..d6d23c5cb 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -85,7 +85,7 @@ final class AttributeProtocolTests: XCTestCase { guard let pdu = ATTMaximumTransmissionUnitRequest(byteValue: data) else { XCTFail("Could not parse"); return } - XCTAssert(pdu.clientMTU == 23) + XCTAssert(pdu.clientMTU.rawValue == 23) XCTAssert(pdu.byteValue == data) } @@ -96,7 +96,7 @@ final class AttributeProtocolTests: XCTestCase { guard let pdu = ATTMaximumTransmissionUnitResponse(byteValue: data) else { XCTFail("Could not parse"); return } - XCTAssert(pdu.serverMTU == 23) + XCTAssert(pdu.serverMTU.rawValue == 23) XCTAssert(pdu.byteValue == data) } } diff --git a/Tests/BluetoothTests/L2CAPSocket.swift b/Tests/BluetoothTests/L2CAPSocket.swift index 4d1e793b6..307d83dd5 100644 --- a/Tests/BluetoothTests/L2CAPSocket.swift +++ b/Tests/BluetoothTests/L2CAPSocket.swift @@ -35,10 +35,7 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { /// Target socket. weak var target: TestL2CAPSocket? - /// Target must not be nil or else an error is thrown. - var forceTarget: Bool = true - - private(set) var receivedData = Data() { + fileprivate(set) var receivedData = Data() { didSet { print("L2CAP Socket buffer \([UInt8](receivedData))") } } @@ -55,13 +52,10 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { /// Write to the socket. func send(_ data: Data) throws { - if forceTarget { - - guard self.target != nil - else { throw POSIXError(code: .ECONNRESET) } - } + guard let target = self.target + else { throw POSIXError(code: .ECONNRESET) } - self.target?.receivedData.append(data) + target.receivedData.append(data) } /// Reads from the socket. @@ -87,3 +81,124 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { return data } } + +// MARK: - Mocked Data + +/// Test L2CAP socket with mocked data. +internal final class MockedL2CAPSocket: L2CAPSocketProtocol { + + // MARK: - Properties + + /// Protocol/Service Multiplexer (PSM) + let protocolServiceMultiplexer: UInt16 + + /// Channel Identifier (CID) + /// + /// L2CAP channel endpoints are identified to their clients by a Channel Identifier (CID). + /// This is assigned by L2CAP, and each L2CAP channel endpoint on any device has a different CID. + let channelIdentifier: UInt16 + + /// The socket's security level. + private(set) var securityLevel: SecurityLevel = .low + + /// Attempts to change the socket's security level. + func setSecurityLevel(_ securityLevel: SecurityLevel) throws { + + self.securityLevel = securityLevel + } + + fileprivate(set) var queue = [Data]() { + + didSet { print("L2CAP queue: \(queue.count)") } + } + + private(set) var recieved = [Data]() + + /// Target socket. + weak var target: MockedL2CAPSocket? + + init(protocolServiceMultiplexer: UInt16 = UInt16(ATT.PSM.rawValue), + channelIdentifier: UInt16 = ATT.CID) { + + self.protocolServiceMultiplexer = protocolServiceMultiplexer + self.channelIdentifier = channelIdentifier + } + + // MARK: - Methods + + /// Write to the socket. + func send(_ data: Data) throws { + + target?.recieved.append(data) + } + + /// Reads from the socket. + func recieve(_ bufferSize: Int) throws -> Data { + + guard let pdu = queue.popFirst() + else { throw POSIXError(code: .EWOULDBLOCK) } + + guard pdu.count <= bufferSize + else { throw POSIXError(code: .EPIPE) } + + return pdu + } +} + +extension MockedL2CAPSocket { + + static func from(mock data: [[UInt8]]) -> (server: MockedL2CAPSocket, client: MockedL2CAPSocket) { + + let serverSocket = MockedL2CAPSocket() + let clientSocket = MockedL2CAPSocket() + + for pduData in data { + + guard let opcodeByte = pduData.first + else { fatalError("Empty data \(pduData)") } + + guard let opcode = ATTOpcode(rawValue: opcodeByte) + else { fatalError("Invalid opcode \(opcodeByte)") } + + switch opcode.type.destination { + + case .client: + + clientSocket.queue.append(Data(pduData)) + + case .server: + + serverSocket.queue.append(Data(pduData)) + } + } + + return (serverSocket, clientSocket) + } +} + +fileprivate extension ATTOpcodeType { + + enum Destination { + + case client + case server + } + + var destination: Destination { + + switch self { + + case .command, + .request: + + return .server + + case .response, + .confirmation, + .indication, + .notification: + + return .client + } + } +} diff --git a/Xcode/Bluetooth.xcodeproj/project.pbxproj b/Xcode/Bluetooth.xcodeproj/project.pbxproj index a4a2dcbc7..dd339b692 100644 --- a/Xcode/Bluetooth.xcodeproj/project.pbxproj +++ b/Xcode/Bluetooth.xcodeproj/project.pbxproj @@ -208,6 +208,10 @@ 6EB45EF02001398100AE5A42 /* DefinedUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB45EEF2001398100AE5A42 /* DefinedUUID.swift */; }; 6EB45EF12001398100AE5A42 /* DefinedUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB45EEF2001398100AE5A42 /* DefinedUUID.swift */; }; 6EB45EF22001398100AE5A42 /* DefinedUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB45EEF2001398100AE5A42 /* DefinedUUID.swift */; }; + 6EBD96B9207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */; }; + 6EBD96BA207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */; }; + 6EBD96BB207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */; }; + 6EBD96BC207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */; }; 6ECBCF0B206E683C00312117 /* L2CAPSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ECBCF0A206E683C00312117 /* L2CAPSocket.swift */; }; 6ECBCF18206FBD0F00312117 /* HCICommandTimeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ECBCF17206FBD0F00312117 /* HCICommandTimeout.swift */; }; 6ECBCF19206FBD0F00312117 /* HCICommandTimeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ECBCF17206FBD0F00312117 /* HCICommandTimeout.swift */; }; @@ -340,6 +344,7 @@ 6E9E4E82206DB68600D489E9 /* LowEnergyChannelMap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LowEnergyChannelMap.swift; sourceTree = ""; }; 6EB2EA1D1CD5A8A7000CF975 /* Bluetooth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bluetooth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6EB45EEF2001398100AE5A42 /* DefinedUUID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefinedUUID.swift; sourceTree = ""; }; + 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ATTMaximumTransmissionUnit.swift; sourceTree = ""; }; 6ECBCF0A206E683C00312117 /* L2CAPSocket.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L2CAPSocket.swift; sourceTree = ""; }; 6ECBCF17206FBD0F00312117 /* HCICommandTimeout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HCICommandTimeout.swift; sourceTree = ""; }; 6ECBCF20206FC3A200312117 /* Array.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Array.swift; sourceTree = ""; }; @@ -430,6 +435,7 @@ isa = PBXGroup; children = ( 6EE84DE51CAF828800A40C4D /* ATT.swift */, + 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */, 6E60A30920695FFA00E42351 /* ATTConnection.swift */, 6EE84DEC1CAF881B00A40C4D /* ATTProtocolDataUnit.swift */, 6EE84DE81CAF85AE00A40C4D /* GATT.swift */, @@ -889,6 +895,7 @@ 6E60A31C20696D3E00E42351 /* HostControllerLocalName.swift in Sources */, 6E60A2F920695B6500E42351 /* LowEnergyConnection.swift in Sources */, 6E49B25220532D45002EA5DC /* UUID.swift in Sources */, + 6EBD96BC207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */, 6E49B25320532D45002EA5DC /* GATTAttributes.swift in Sources */, 6E49B25420532D45002EA5DC /* HCIError.swift in Sources */, 6E49B25520532D45002EA5DC /* UInt128.swift in Sources */, @@ -955,6 +962,7 @@ 6E60A31B20696D3E00E42351 /* HostControllerLocalName.swift in Sources */, 6E60A2F820695B6500E42351 /* LowEnergyConnection.swift in Sources */, 6E704C9A1E95C6A500484A22 /* UUID.swift in Sources */, + 6EBD96BB207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */, 6EB2EA101CD5A8A7000CF975 /* GATTAttributes.swift in Sources */, 6E3229121FCDCB790035605D /* HCIError.swift in Sources */, 6EE910271FDE5841007AD3EA /* UInt128.swift in Sources */, @@ -994,6 +1002,7 @@ 6E60A30A20695FFB00E42351 /* ATTConnection.swift in Sources */, 6EE84E001CAF891E00A40C4D /* LowEnergyCommand.swift in Sources */, 6E740C6A2065A2D1006589F6 /* HostControllerBasebandCommandParameter.swift in Sources */, + 6EBD96B9207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */, 6EE84DFD1CAF891E00A40C4D /* HCICommand.swift in Sources */, 6EE84DED1CAF881B00A40C4D /* ATTProtocolDataUnit.swift in Sources */, 6EE84DE61CAF828800A40C4D /* ProtocolServiceMultiplexer.swift in Sources */, @@ -1107,6 +1116,7 @@ 6E60A31A20696D3E00E42351 /* HostControllerLocalName.swift in Sources */, 6E60A2F720695B6500E42351 /* LowEnergyConnection.swift in Sources */, 6E704C991E95C6A500484A22 /* UUID.swift in Sources */, + 6EBD96BA207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */, 6EF45FB01CC6D04D001F7A39 /* GATTAttributes.swift in Sources */, 6E3229111FCDCB780035605D /* HCIError.swift in Sources */, 6EE910261FDE5841007AD3EA /* UInt128.swift in Sources */, From dc63f5923e063800f5c8f0be6aa2c362efe80392 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 11:25:01 -0500 Subject: [PATCH 05/25] Fixed ATT Exchange MTU --- Sources/ATTConnection.swift | 1 + Sources/ATTMaximumTransmissionUnit.swift | 17 ++++------ Sources/ATTProtocolDataUnit.swift | 30 +++++++++-------- Sources/GATTClient.swift | 8 ++--- Sources/GATTServer.swift | 6 ++-- .../AttributeProtocolTests.swift | 33 ++++++++++++++++--- 6 files changed, 60 insertions(+), 35 deletions(-) diff --git a/Sources/ATTConnection.swift b/Sources/ATTConnection.swift index 6eff3957f..f131cfaa5 100755 --- a/Sources/ATTConnection.swift +++ b/Sources/ATTConnection.swift @@ -202,6 +202,7 @@ public final class ATTConnection { /// Adds a PDU to the queue to send. /// /// - Returns: Identifier of queued send operation or `nil` if the PDU cannot be sent. + @discardableResult public func send (_ pdu: PDU, response: (callback: (AnyResponse) -> (), ATTProtocolDataUnit.Type)? = nil) -> UInt? { let attributeOpcode = PDU.attributeOpcode diff --git a/Sources/ATTMaximumTransmissionUnit.swift b/Sources/ATTMaximumTransmissionUnit.swift index bd737c522..15522f302 100644 --- a/Sources/ATTMaximumTransmissionUnit.swift +++ b/Sources/ATTMaximumTransmissionUnit.swift @@ -19,7 +19,7 @@ public struct ATTMaximumTransmissionUnit: RawRepresentable { self.rawValue = rawValue - assert(validate()) + assert(isValid) } fileprivate init(_ unsafe: UInt16) { @@ -30,7 +30,7 @@ public struct ATTMaximumTransmissionUnit: RawRepresentable { private extension ATTMaximumTransmissionUnit { - func validate() -> Bool { + var isValid: Bool { return (ATTMaximumTransmissionUnit.min.rawValue ... ATTMaximumTransmissionUnit.max.rawValue).contains(rawValue) } @@ -44,17 +44,14 @@ public extension ATTMaximumTransmissionUnit { static var max: ATTMaximumTransmissionUnit { return ATTMaximumTransmissionUnit(517) } - init(server: ATTMaximumTransmissionUnit, - client: ATTMaximumTransmissionUnit) { + init(server: UInt16, + client: UInt16) { - assert(server.validate()) - assert(client.validate()) + let mtu = Swift.min(Swift.max(Swift.min(client, server), ATTMaximumTransmissionUnit.default.rawValue), ATTMaximumTransmissionUnit.max.rawValue) - let mtu = Swift.max(Swift.min(client, server), .default) + self.init(mtu) - assert(mtu.validate()) - - self = mtu + assert(isValid) } } diff --git a/Sources/ATTProtocolDataUnit.swift b/Sources/ATTProtocolDataUnit.swift index c2fa405e5..3575aa7b2 100644 --- a/Sources/ATTProtocolDataUnit.swift +++ b/Sources/ATTProtocolDataUnit.swift @@ -97,13 +97,17 @@ public struct ATTErrorResponse: ATTProtocolDataUnit, Error { /// The *Client Rx MTU* parameter shall be set to the maximum size of the attribute protocol PDU that the client can receive. public struct ATTMaximumTransmissionUnitRequest: ATTProtocolDataUnit { + /// 0x02 = Exchange MTU Request public static let attributeOpcode = ATT.Opcode.maximumTransmissionUnitRequest + public static let length = 3 /// Client Rx MTU - public var clientMTU: ATTMaximumTransmissionUnit + /// + /// Client receive MTU size + public var clientMTU: UInt16 - public init(clientMTU: ATTMaximumTransmissionUnit) { + public init(clientMTU: UInt16) { self.clientMTU = clientMTU } @@ -118,10 +122,7 @@ public struct ATTMaximumTransmissionUnitRequest: ATTProtocolDataUnit { guard attributeOpcodeByte == type(of: self).attributeOpcode.rawValue else { return nil } - let rawValue = UInt16(littleEndian: UInt16(bytes: (byteValue[1], byteValue[2]))) - - guard let clientMTU = ATTMaximumTransmissionUnit(rawValue: rawValue) - else { return nil } + let clientMTU = UInt16(littleEndian: UInt16(bytes: (byteValue[1], byteValue[2]))) self.clientMTU = clientMTU } @@ -132,7 +133,7 @@ public struct ATTMaximumTransmissionUnitRequest: ATTProtocolDataUnit { bytes[0] = type(of: self).attributeOpcode.rawValue - let mtuBytes = self.clientMTU.rawValue.littleEndian.bytes + let mtuBytes = self.clientMTU.littleEndian.bytes bytes[1] = mtuBytes.0 bytes[2] = mtuBytes.1 @@ -146,13 +147,17 @@ public struct ATTMaximumTransmissionUnitRequest: ATTProtocolDataUnit { /// The *Exchange MTU Response* is sent in reply to a received *Exchange MTU Request*. public struct ATTMaximumTransmissionUnitResponse: ATTProtocolDataUnit { + /// 0x03 = Exchange MTU Response public static let attributeOpcode = ATT.Opcode.maximumTransmissionUnitResponse + public static let length = 3 /// Server Rx MTU - public var serverMTU: ATTMaximumTransmissionUnit + /// + /// Attribute server receive MTU size + public var serverMTU: UInt16 - public init(serverMTU: ATTMaximumTransmissionUnit) { + public init(serverMTU: UInt16) { self.serverMTU = serverMTU } @@ -167,10 +172,7 @@ public struct ATTMaximumTransmissionUnitResponse: ATTProtocolDataUnit { guard attributeOpcodeByte == type(of: self).attributeOpcode.rawValue else { return nil } - let rawValue = UInt16(littleEndian: UInt16(bytes: (byteValue[1], byteValue[2]))) - - guard let serverMTU = ATTMaximumTransmissionUnit(rawValue: rawValue) - else { return nil } + let serverMTU = UInt16(littleEndian: UInt16(bytes: (byteValue[1], byteValue[2]))) self.serverMTU = serverMTU } @@ -181,7 +183,7 @@ public struct ATTMaximumTransmissionUnitResponse: ATTProtocolDataUnit { bytes[0] = type(of: self).attributeOpcode.rawValue - let mtuBytes = self.serverMTU.rawValue.littleEndian.bytes + let mtuBytes = self.serverMTU.littleEndian.bytes bytes[1] = mtuBytes.0 bytes[2] = mtuBytes.1 diff --git a/Sources/GATTClient.swift b/Sources/GATTClient.swift index 2f21a0232..dd10d7301 100755 --- a/Sources/GATTClient.swift +++ b/Sources/GATTClient.swift @@ -308,7 +308,7 @@ public final class GATTClient { let clientMTU = self.connection.maximumTransmissionUnit - let pdu = ATTMaximumTransmissionUnitRequest(clientMTU: clientMTU) + let pdu = ATTMaximumTransmissionUnitRequest(clientMTU: clientMTU.rawValue) send(pdu) { [unowned self] in self.exchangeMTUResponse($0) } } @@ -538,11 +538,11 @@ public final class GATTClient { case let .value(pdu): - let finalMTU = pdu.serverMTU + let clientMTU = self.connection.maximumTransmissionUnit - let currentMTU = self.connection.maximumTransmissionUnit + let finalMTU = ATTMaximumTransmissionUnit(server: pdu.serverMTU, client: clientMTU.rawValue) - log?("MTU Exchange (\(currentMTU) -> \(finalMTU))") + log?("MTU Exchange (\(clientMTU) -> \(finalMTU))") self.connection.maximumTransmissionUnit = finalMTU } diff --git a/Sources/GATTServer.swift b/Sources/GATTServer.swift index e31dc54a0..87dd8d29d 100644 --- a/Sources/GATTServer.swift +++ b/Sources/GATTServer.swift @@ -283,12 +283,12 @@ public final class GATTServer { private func exchangeMTU(pdu: ATTMaximumTransmissionUnitRequest) { - let serverMTU = connection.maximumTransmissionUnit + let serverMTU = connection.maximumTransmissionUnit.rawValue let finalMTU = ATTMaximumTransmissionUnit(server: serverMTU, client: pdu.clientMTU) - // Respond with the server MTU - let _ = connection.send(ATTMaximumTransmissionUnitResponse(serverMTU: finalMTU)) + // Respond with the server MTU (not final MTU) + connection.send(ATTMaximumTransmissionUnitResponse(serverMTU: serverMTU)) // Set MTU to minimum connection.maximumTransmissionUnit = finalMTU diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index d6d23c5cb..f4f77814f 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -78,6 +78,31 @@ final class AttributeProtocolTests: XCTestCase { func testMTU() { + do { + + XCTAssertEqual(ATTMaximumTransmissionUnit.default, .min) + XCTAssertEqual(ATTMaximumTransmissionUnit.default.hashValue, Int(ATTMaximumTransmissionUnit.default.rawValue)) + XCTAssertNotEqual(ATTMaximumTransmissionUnit.min, .max) + XCTAssertLessThan(ATTMaximumTransmissionUnit.min, .max) + XCTAssertGreaterThan(ATTMaximumTransmissionUnit.max, .min) + + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: 23)) + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: 517)) + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.min.rawValue)) + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.max.rawValue)) + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.default.rawValue)) + + XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: 20)) + XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.min.rawValue - 1)) + XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.max.rawValue + 1)) + + XCTAssertEqual(ATTMaximumTransmissionUnit(server: 23, client: 512).rawValue, 23) + XCTAssertEqual(ATTMaximumTransmissionUnit(server: 512, client: 23).rawValue, 23) + XCTAssertEqual(ATTMaximumTransmissionUnit(server: 512, client: 256).rawValue, 256) + XCTAssertEqual(ATTMaximumTransmissionUnit(server: 20, client: 23).rawValue, ATTMaximumTransmissionUnit.min.rawValue) + XCTAssertEqual(ATTMaximumTransmissionUnit(server: .max, client: .max).rawValue, ATTMaximumTransmissionUnit.max.rawValue) + } + do { let data: [UInt8] = [2, 23, 0] @@ -85,8 +110,8 @@ final class AttributeProtocolTests: XCTestCase { guard let pdu = ATTMaximumTransmissionUnitRequest(byteValue: data) else { XCTFail("Could not parse"); return } - XCTAssert(pdu.clientMTU.rawValue == 23) - XCTAssert(pdu.byteValue == data) + XCTAssertEqual(pdu.clientMTU, 23) + XCTAssertEqual(pdu.byteValue, data) } do { @@ -96,8 +121,8 @@ final class AttributeProtocolTests: XCTestCase { guard let pdu = ATTMaximumTransmissionUnitResponse(byteValue: data) else { XCTFail("Could not parse"); return } - XCTAssert(pdu.serverMTU.rawValue == 23) - XCTAssert(pdu.byteValue == data) + XCTAssertEqual(pdu.serverMTU, 23) + XCTAssertEqual(pdu.byteValue, data) } } From f7ec51ca3cf25f5a44d9159c84f0d647196c8b98 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 11:30:42 -0500 Subject: [PATCH 06/25] Updated unit tests --- .../AttributeProtocolTests.swift | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index f4f77814f..6f78d5a4f 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -69,10 +69,10 @@ final class AttributeProtocolTests: XCTestCase { guard let errorResponse = ATTErrorResponse(byteValue: data) else { XCTFail("Could not parse"); return } - XCTAssert(errorResponse.requestOpcode == .readByGroupTypeRequest) - XCTAssert(errorResponse.attributeHandle == 49) - XCTAssert(errorResponse.errorCode == .attributeNotFound) - XCTAssert(errorResponse.byteValue == data) + XCTAssertEqual(errorResponse.requestOpcode, .readByGroupTypeRequest) + XCTAssertEqual(errorResponse.attributeHandle, 49) + XCTAssertEqual(errorResponse.errorCode, .attributeNotFound) + XCTAssertEqual(errorResponse.byteValue, data) } } @@ -80,27 +80,27 @@ final class AttributeProtocolTests: XCTestCase { do { - XCTAssertEqual(ATTMaximumTransmissionUnit.default, .min) - XCTAssertEqual(ATTMaximumTransmissionUnit.default.hashValue, Int(ATTMaximumTransmissionUnit.default.rawValue)) - XCTAssertNotEqual(ATTMaximumTransmissionUnit.min, .max) - XCTAssertLessThan(ATTMaximumTransmissionUnit.min, .max) - XCTAssertGreaterThan(ATTMaximumTransmissionUnit.max, .min) - - XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: 23)) - XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: 517)) - XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.min.rawValue)) - XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.max.rawValue)) - XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.default.rawValue)) - - XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: 20)) - XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.min.rawValue - 1)) - XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.max.rawValue + 1)) - - XCTAssertEqual(ATTMaximumTransmissionUnit(server: 23, client: 512).rawValue, 23) - XCTAssertEqual(ATTMaximumTransmissionUnit(server: 512, client: 23).rawValue, 23) - XCTAssertEqual(ATTMaximumTransmissionUnit(server: 512, client: 256).rawValue, 256) - XCTAssertEqual(ATTMaximumTransmissionUnit(server: 20, client: 23).rawValue, ATTMaximumTransmissionUnit.min.rawValue) - XCTAssertEqual(ATTMaximumTransmissionUnit(server: .max, client: .max).rawValue, ATTMaximumTransmissionUnit.max.rawValue) + XCTAssertEqual(ATTMaximumTransmissionUnit.default, .min, "Default MTU is the minimum MTU") + XCTAssertEqual(ATTMaximumTransmissionUnit.default.hashValue, Int(ATTMaximumTransmissionUnit.default.rawValue), "MTU hash is raw value") + XCTAssertNotEqual(ATTMaximumTransmissionUnit.min, .max, "ATT MTU minimum value is less than maximum value") + XCTAssertLessThan(ATTMaximumTransmissionUnit.min, .max, "ATT MTU maximum value is greater than minimum value") + XCTAssertGreaterThan(ATTMaximumTransmissionUnit.max, .min, "ATT MTU maximum value is not equal to minimum value") + + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: 23), "Valid MTU value") + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: 517), "Valid MTU value") + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.min.rawValue), "Valid MTU value") + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.max.rawValue), "Valid MTU value") + XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.default.rawValue), "Valid MTU value") + + XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: 20), "Invalid MTU value") + XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.min.rawValue - 1), "Invalid MTU value") + XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.max.rawValue + 1), "Invalid MTU value") + + XCTAssertEqual(ATTMaximumTransmissionUnit(server: 23, client: 512).rawValue, 23, "The server and client shall set ATT_MTU to the minimum of the Client Rx MTU and the Server Rx MTU.") + XCTAssertEqual(ATTMaximumTransmissionUnit(server: 512, client: 23).rawValue, 23, "The server and client shall set ATT_MTU to the minimum of the Client Rx MTU and the Server Rx MTU.") + XCTAssertEqual(ATTMaximumTransmissionUnit(server: 512, client: 256).rawValue, 256, "The server and client shall set ATT_MTU to the minimum of the Client Rx MTU and the Server Rx MTU.") + XCTAssertEqual(ATTMaximumTransmissionUnit(server: 20, client: 23), .default, "If either Client Rx MTU or Service Rx MTU are incorrectly less than the default ATT_MTU, then the ATT_MTU shall not be changed and the ATT_MTU shall be the default ATT_MTU.") + XCTAssertEqual(ATTMaximumTransmissionUnit(server: .max, client: .max), .max, "Cannot be larger than max ATT_MTU") } do { From 607b936a6bb80c68a263bb9ac433d1100c6df623 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 12:11:17 -0500 Subject: [PATCH 07/25] Updated unit tests --- Tests/BluetoothTests/BluetoothTests.swift | 7 +++++++ Tests/BluetoothTests/L2CAPSocket.swift | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Tests/BluetoothTests/BluetoothTests.swift b/Tests/BluetoothTests/BluetoothTests.swift index f1c406901..0dc6e638e 100755 --- a/Tests/BluetoothTests/BluetoothTests.swift +++ b/Tests/BluetoothTests/BluetoothTests.swift @@ -64,10 +64,17 @@ final class BluetoothTests: XCTestCase { func testHCIVersion() { + XCTAssertEqual(HCIVersion.v4_2.rawValue, 0x8, "HCI Version: 4.2 (0x8)") + XCTAssertEqual(HCIVersion.v4_0.description, "4.0") XCTAssertEqual(HCIVersion.v4_1.description, "4.1") XCTAssertEqual(HCIVersion.v4_2.description, "4.2") XCTAssertEqual(HCIVersion.v5_0.description, "5.0") + + XCTAssertEqual(HCIVersion.v4_0, .v4_0) + XCTAssertNotEqual(HCIVersion.v4_0, .v5_0) + XCTAssertLessThan(HCIVersion.v4_0, .v4_2) + XCTAssertGreaterThan(HCIVersion.v5_0, .v4_2) } func testLowEnergyAdvertisingFilterPolicy() { diff --git a/Tests/BluetoothTests/L2CAPSocket.swift b/Tests/BluetoothTests/L2CAPSocket.swift index 307d83dd5..c4d63d41f 100644 --- a/Tests/BluetoothTests/L2CAPSocket.swift +++ b/Tests/BluetoothTests/L2CAPSocket.swift @@ -24,7 +24,7 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { let channelIdentifier: UInt16 /// The socket's security level. - private(set) var securityLevel: SecurityLevel = .low + private(set) var securityLevel: SecurityLevel = .sdp /// Attempts to change the socket's security level. func setSecurityLevel(_ securityLevel: SecurityLevel) throws { @@ -99,7 +99,7 @@ internal final class MockedL2CAPSocket: L2CAPSocketProtocol { let channelIdentifier: UInt16 /// The socket's security level. - private(set) var securityLevel: SecurityLevel = .low + private(set) var securityLevel: SecurityLevel = .sdp /// Attempts to change the socket's security level. func setSecurityLevel(_ securityLevel: SecurityLevel) throws { From 3bb45a4525e9b4ce81c8237c66132d5bc5e32114 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 16:19:53 -0500 Subject: [PATCH 08/25] Updated unit tests --- Sources/ATTProtocolDataUnit.swift | 10 +- Tests/BluetoothTests/GATTTests.swift | 577 ++++++++++++++++++++++ Xcode/Bluetooth.xcodeproj/project.pbxproj | 8 +- 3 files changed, 588 insertions(+), 7 deletions(-) create mode 100644 Tests/BluetoothTests/GATTTests.swift diff --git a/Sources/ATTProtocolDataUnit.swift b/Sources/ATTProtocolDataUnit.swift index 3575aa7b2..ab38b5e82 100644 --- a/Sources/ATTProtocolDataUnit.swift +++ b/Sources/ATTProtocolDataUnit.swift @@ -1266,6 +1266,8 @@ public struct ATTReadByGroupTypeResponse: ATTProtocolDataUnit { } self.data = attributeDataList + + assert(length == (data[0].byteValue.count)) } public var byteValue: [UInt8] { @@ -1298,7 +1300,9 @@ public struct ATTReadByGroupTypeResponse: ATTProtocolDataUnit { /// Attribute Value public var value: [UInt8] - public init(attributeHandle: UInt16 = 0, endGroupHandle: UInt16 = 0, value: [UInt8] = []) { + public init(attributeHandle: UInt16 = 0, + endGroupHandle: UInt16 = 0, + value: [UInt8] = []) { self.attributeHandle = attributeHandle self.endGroupHandle = endGroupHandle @@ -1313,9 +1317,9 @@ public struct ATTReadByGroupTypeResponse: ATTProtocolDataUnit { self.attributeHandle = UInt16(bytes: (byteValue[0], byteValue[1])).littleEndian self.endGroupHandle = UInt16(bytes: (byteValue[2], byteValue[3])).littleEndian - if byteValue.count > 4 { + if byteValue.count > type(of: self).length { - self.value = Array(byteValue.suffix(from: 4)) + self.value = Array(byteValue.suffix(from: type(of: self).length)) } else { diff --git a/Tests/BluetoothTests/GATTTests.swift b/Tests/BluetoothTests/GATTTests.swift new file mode 100644 index 000000000..8c0d5cb03 --- /dev/null +++ b/Tests/BluetoothTests/GATTTests.swift @@ -0,0 +1,577 @@ +// +// GATTTests.swift +// BluetoothTests +// +// Created by Alsey Coleman Miller on 4/6/18. +// Copyright © 2018 PureSwift. All rights reserved. +// + +import XCTest +import Foundation +@testable import Bluetooth + +final class GATTTests: XCTestCase { + + static let allTests = [ + ("testGATT", testGATT), + ("testMTUExchange", testMTUExchange), + ("testDiscoverPrimaryServices", testDiscoverPrimaryServices) + ] + + func testMTUExchange() { + + guard let mtu = ATTMaximumTransmissionUnit(rawValue: 512) + else { XCTFail(); return } + + let testPDUs: [(ATTProtocolDataUnit, [UInt8])] = [ + (ATTMaximumTransmissionUnitRequest(clientMTU: mtu.rawValue), + [0x02, 0x00, 0x02]), + (ATTMaximumTransmissionUnitResponse(serverMTU: mtu.rawValue), + [0x03, 0x00, 0x02]) + ] + + test(testPDUs) + + let l2capSocket = MockedL2CAPSocket.from(mock: testPDUs.map { $0.1 }) + + // server + let server = GATTServer(socket: l2capSocket.server, maximumTransmissionUnit: mtu, maximumPreparedWrites: .max) + server.log = { print("GATT Server: " + $0) } + server.connection.log = { print("Server ATT: " + $0) } + + // client + let client = GATTClient(socket: l2capSocket.client, maximumTransmissionUnit: mtu) + client.log = { print("GATT Client: " + $0) } + client.connection.log = { print("Client ATT: " + $0) } + + // fake sockets + do { try run(server: server, client: client, l2capSocket: l2capSocket) } + catch { XCTFail("Error: \(error)"); return } + + XCTAssertEqual(server.connection.maximumTransmissionUnit, client.connection.maximumTransmissionUnit) + XCTAssertEqual(server.connection.maximumTransmissionUnit, mtu) + XCTAssertNotEqual(server.connection.maximumTransmissionUnit, .default) + XCTAssertEqual(client.connection.maximumTransmissionUnit, mtu) + XCTAssertNotEqual(client.connection.maximumTransmissionUnit, .default) + } + + func testDiscoverPrimaryServices() { + + let testPDUs: [(ATTProtocolDataUnit, [UInt8])] = [ + + /** + Read By Group Type Request - Start Handle:0x0001 - End Handle:0xffff - UUID:2800 (GATT Primary Service Declaration) + Opcode: 0x10 + Starting Handle: 0x0001 + Ending Handle: 0xffff + Attribute Group Type: 2800 (GATT Primary Service Declaration) + + L2CAP Send 0x0041 SEND Channel ID: 0x0004 Length: 0x0007 (07) [ 10 01 00 FF FF 00 28 ] + */ + (ATTReadByGroupTypeRequest(startHandle: 0x01, endHandle: .max, type: GATT.UUID.primaryService.uuid), + [0x10, 0x01, 0x00, 0xFF, 0xFF, 0x00, 0x28]), + + /** + Read By Group Type Response + Opcode: 0x11 + List Length: 0006 + Attribute Handle: 0x0001 End Group Handle: 0x0005 UUID: 1800 (Generic Access) + Attribute Handle: 0x0006 End Group Handle: 0x0009 UUID: 1801 (Generic Attribute) + + L2CAP Receive 0x0041 RECV Channel ID: 0x0004 Length: 0x000E (14) [ 11 06 01 00 05 00 00 18 06 00 09 00 01 18 ] + */ + (ATTReadByGroupTypeResponse(data: [ + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x0001, + endGroupHandle: 0x0005, + value: [UInt8](BluetoothUUID.bit16(0x1800).littleEndian.data) + ), + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x0006, + endGroupHandle: 0x0009, + value: [UInt8](BluetoothUUID.bit16(0x1801).littleEndian.data) + ) + ])!, + + [0x11, 0x06, 0x01, 0x00, 0x05, 0x00, 0x00, 0x18, 0x06, 0x00, 0x09, 0x00, 0x01, 0x18] + ), + + /** + Read By Group Type Request - Start Handle:0x000a - End Handle:0xffff - UUID:2800 (GATT Primary Service Declaration) + Opcode: 0x10 + Starting Handle: 0x000a + Ending Handle: 0xffff + Attribute Group Type: 2800 (GATT Primary Service Declaration) + + L2CAP Send 0x0041 SEND Channel ID: 0x0004 Length: 0x0007 (07) [ 10 0A 00 FF FF 00 28 ] + */ + (ATTReadByGroupTypeRequest(startHandle: 0x000a, endHandle: .max, type: GATT.UUID.primaryService.uuid), + [0x10, 0x0A, 0x00, 0xFF, 0xFF, 0x00, 0x28]), + + /** + Read By Group Type Response + Opcode: 0x11 + List Length: 0014 + Attribute Handle: 0x000A End Group Handle: 0x000E UUID: D0611E78-BBB4-4591-A5F8-487910AE4366 + Attribute Handle: 0x000F End Group Handle: 0x0013 UUID: 9FA480E0-4967-4542-9390-D343DC5D04AE + + L2CAP Receive 0x0041 RECV Channel ID: 0x0004 Length: 0x002A (42) [ 11 14 0A 00 0E 00 66 43 AE 10 79 48 F8 A5 91 45 ... ] + */ + (ATTReadByGroupTypeResponse(data: [ + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x000A, + endGroupHandle: 0x000E, + value: [UInt8](BluetoothUUID(uuid: UUID(uuidString: "D0611E78-BBB4-4591-A5F8-487910AE4366")!).littleEndian.data) + ), + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x000F, + endGroupHandle: 0x0013, + value: [UInt8](BluetoothUUID(uuid: UUID(uuidString: "9FA480E0-4967-4542-9390-D343DC5D04AE")!).littleEndian.data) + ) + ])!, + + [/* 0x41, 0x20, 0x1B, 0x00, 0x2A, 0x00, 0x04, 0x00, */ 0x11, 0x14, 0x0A, 0x00, 0x0E, 0x00, 0x66, 0x43, 0xAE, 0x10, 0x79, 0x48, 0xF8, 0xA5, 0x91, 0x45, 0xB4, 0xBB, 0x78, 0x1E, 0x61, 0xD0, 0x0F, 0x00, 0x13, 0x00, 0xAE, 0x04, 0x5D, 0xDC, 0x43, 0xD3, 0x90, 0x93, 0x42, 0x45, 0x67, 0x49, 0xE0, 0x80, 0xA4, 0x9F] + ), + + /** + Read By Group Type Request - Start Handle:0x0014 - End Handle:0xffff - UUID:2800 (GATT Primary Service Declaration) + Opcode: 0x10 + Starting Handle: 0x0014 + Ending Handle: 0xffff + Attribute Group Type: 2800 (GATT Primary Service Declaration) + + L2CAP Send 0x0041 SEND Channel ID: 0x0004 Length: 0x0007 (07) [ 10 14 00 FF FF 00 28 ] + */ + (ATTReadByGroupTypeRequest(startHandle: 0x0014, endHandle: .max, type: GATT.UUID.primaryService.uuid), + [0x10, 0x14, 0x00, 0xFF, 0xFF, 0x00, 0x28]), + + /** + Read By Group Type Response + Opcode: 0x11 + List Length: 0006 + Attribute Handle: 0x0014 End Group Handle: 0x0017 UUID: 180F (Battery Service) + Attribute Handle: 0x0018 End Group Handle: 0x001D UUID: 1805 (Current Time Service) + Attribute Handle: 0x001E End Group Handle: 0x0022 UUID: 180A (Device Information) + + L2CAP Receive 0x0041 RECV Channel ID: 0x0004 Length: 0x0014 (20) [ 11 06 14 00 17 00 0F 18 18 00 1D 00 05 18 1E 00 ... ] + */ + (ATTReadByGroupTypeResponse(data: [ + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x0014, + endGroupHandle: 0x0017, + value: [UInt8](BluetoothUUID.bit16(0x180F).littleEndian.data) + ), + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x0018, + endGroupHandle: 0x001D, + value: [UInt8](BluetoothUUID.bit16(0x1805).littleEndian.data) + ), + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x001E, + endGroupHandle: 0x0022, + value: [UInt8](BluetoothUUID.bit16(0x180A).littleEndian.data) + ) + ])!, + + [/* 0x41, 0x20, 0x18, 0x00, 0x14, 0x00, 0x04, 0x00, */ 0x11, 0x06, 0x14, 0x00, 0x17, 0x00, 0x0F, 0x18, 0x18, 0x00, 0x1D, 0x00, 0x05, 0x18, 0x1E, 0x00, 0x22, 0x00, 0x0A, 0x18] + ), + + /** + Read By Group Type Request - Start Handle:0x0023 - End Handle:0xffff - UUID:2800 (GATT Primary Service Declaration) + Opcode: 0x10 + Starting Handle: 0x0023 + Ending Handle: 0xffff + Attribute Group Type: 2800 (GATT Primary Service Declaration) + + L2CAP Send 0x0041 SEND Channel ID: 0x0004 Length: 0x0007 (07) [ 10 23 00 FF FF 00 28 ] + */ + (ATTReadByGroupTypeRequest(startHandle: 0x0023, endHandle: .max, type: GATT.UUID.primaryService.uuid), + [0x10, 0x23, 0x00, 0xFF, 0xFF, 0x00, 0x28]), + ] + + test(testPDUs) + } + + func testGATT() { + + let database = generateDB() + + dumpGATT(database: database) + + // server + let serverSocket = TestL2CAPSocket() + let server = GATTServer(socket: serverSocket, maximumPreparedWrites: .max) + server.log = { print("GATT Server: " + $0) } + server.connection.log = { print("Server ATT: " + $0) } + server.database = database + + // client + let clientSocket = TestL2CAPSocket() + let client = GATTClient(socket: clientSocket) + client.log = { print("GATT Client: " + $0) } + client.connection.log = { print("Client ATT: " + $0) } + + clientSocket.target = serverSocket + serverSocket.target = clientSocket // weak references + + var writtenValues = [UInt16: Data]() + + func clientWillWriteServer(uuid: BluetoothUUID, handle: UInt16, value: Data, newValue: Data) -> ATT.Error? { + + print("\(#function) \(uuid) (\(handle))") + + writtenValues[handle] = newValue + + print(value.map { $0.toHexadecimal() }) + + return nil + } + + server.willWrite = clientWillWriteServer + + func discoverAllPrimaryServices() { + + client.discoverAllPrimaryServices { + + print("Discover All Primary Services") + dump($0) + + switch $0 { + case let .error(error): + + XCTFail("\(error)") + + case let .value(services): + + XCTAssert(services.map({ $0.uuid }) == TestProfile.services.map { $0.uuid }) + + for service in services { + + guard let testService = TestProfile.services.first(where: { $0.uuid == service.uuid }) + else { XCTFail("Invalid service \(service.uuid)"); return } + + discoverAllCharacteristics(of: service, test: testService) + + testService.characteristics.forEach { + discoverCharacteristics(of: service, by: $0.uuid, test: testService) + } + } + } + } + } + + func discoverAllCharacteristics(of service: GATTClient.Service, test testService: TestProfile.Service) { + + client.discoverAllCharacteristics(of: service) { + + print("Discover All Characteristics of a Service") + dump($0) + + switch $0 { + case let .error(error): + + XCTFail("\(error)") + + case let .value(characteristics): + + XCTAssert(characteristics.map({ $0.uuid }) == testService.characteristics.map { $0.uuid }) + + for characteristic in characteristics { + + guard let testCharacteristic = testService.characteristics.first(where: { $0.uuid == characteristic.uuid }) + else { XCTFail("Invalid characteristic \(characteristic.uuid)"); return } + + validateCharacteristic(characteristic, test: testCharacteristic) + } + } + } + } + + func discoverCharacteristics(of service: GATTClient.Service, + by uuid: BluetoothUUID, + test testService: TestProfile.Service) { + + client.discoverCharacteristics(of: service, by: uuid) { + + print("Discover Characteristics by UUID") + dump($0) + + switch $0 { + case let .error(error): + + XCTFail("\(error)") + + case .value: break + + /* + case let .value(characteristics): + + // TODO: Investigate Discover Characteristics by UUID + //XCTAssert(value.count == 1, "\(uuid) \(value.map { $0.uuid })") + + for characteristic in characteristics { + + guard let testCharacteristic = testService.characteristics.first(where: { $0.uuid == characteristic.uuid }) + else { XCTFail("Invalid characteristic \(characteristic.uuid)"); return } + + validateCharacteristic(characteristic, test: testCharacteristic) + }*/ + } + } + } + + func validateCharacteristic(_ characteristic: GATTClient.Characteristic, + test testCharacteristic: TestProfile.Characteristic) { + + XCTAssert(characteristic.uuid == testCharacteristic.uuid) + XCTAssert(characteristic.properties == testCharacteristic.properties) + + if testCharacteristic.properties.contains(.read), testCharacteristic.permissions.contains(.read) { + + guard characteristic.properties.contains(.read) + else { XCTFail("Cannot read charactertistic \(characteristic.uuid)"); return } + + client.readCharacteristic(characteristic) { + + print("Read Characteristic") + dump($0) + + switch $0 { + case let .error(error): + + XCTFail("\(error)") + + case let .value(value): + + XCTAssert(value == testCharacteristic.value) + } + } + } + + if testCharacteristic.properties.contains(.write), testCharacteristic.permissions.contains(.write) { + + guard characteristic.properties.contains(.write) + else { XCTFail("Cannot write to charactertistic \(characteristic.uuid)"); return } + + guard let (data, reliableWrites) = TestProfile.WriteValues[testCharacteristic.uuid] + else { fatalError("missing test data") } + + client.writeCharacteristic(characteristic, data: data, reliableWrites: reliableWrites) { + + print("Write Characteristic") + dump($0) + + switch $0 { + case let .error(error): + + XCTFail("\(error)") + + case .value: + + guard let writtenValue = writtenValues[characteristic.handle.value] + else { XCTFail("Did not write \(characteristic.uuid)"); return } + + XCTAssert(writtenValue == data, "\(characteristic.uuid) \(writtenValue) == \(data)") + } + } + } + } + + // queue operations + discoverAllPrimaryServices() + + // run fake sockets + do { try run(server: (server, serverSocket), client: (client, clientSocket)) } + catch { XCTFail("Error: \(error)") } + } + +} + +extension GATTTests { + + func generateDB() -> GATTDatabase { + + var database = GATTDatabase() + + for service in TestProfile.services { + + let _ = database.add(service: service) + } + + return database + } + + func dumpGATT(database: GATTDatabase) { + + print("GATT Database:") + + for attribute in database.attributes { + + let type: Any = GATT.UUID.init(uuid: attribute.uuid as BluetoothUUID) ?? attribute.uuid + + let value: Any = BluetoothUUID(data: attribute.value)?.littleEndian ?? String(data: attribute.value, encoding: .utf8) ?? attribute.value + + print("\(attribute.handle) - \(type)") + print("Permissions: \(attribute.permissions)") + print("Value: \(value)") + } + } + + func test(_ testPDUs: [(ATTProtocolDataUnit, [UInt8])]) { + + // decode and compare + for (testPDU, testData) in testPDUs { + + guard let decodedPDU = type(of: testPDU).init(byteValue: testData) + else { XCTFail("Could not decode \(type(of: testPDU))"); return } + + dump(decodedPDU) + + XCTAssertEqual(decodedPDU.byteValue, testData) + + var decodedDump = "" + dump(decodedPDU, to: &decodedDump) + var testDump = "" + dump(testPDU, to: &testDump) + + XCTAssertEqual(decodedDump, testDump) + } + } + + func run(server: (gatt: GATTServer, socket: TestL2CAPSocket), client: (gatt: GATTClient, socket: TestL2CAPSocket)) throws { + + var didWrite = false + repeat { + + didWrite = false + + while try client.gatt.write() { + + didWrite = true + } + + while server.socket.receivedData.isEmpty == false { + + try server.gatt.read() + } + + while try server.gatt.write() { + + didWrite = true + } + + while client.socket.receivedData.isEmpty == false { + + try client.gatt.read() + } + + } while didWrite + } + + func run(server: GATTServer, client: GATTClient, l2capSocket: (server: MockedL2CAPSocket, client: MockedL2CAPSocket)) throws { + + var didWrite = false + repeat { + + didWrite = false + + while try client.write() { + + didWrite = true + } + + while l2capSocket.server.queue.isEmpty == false { + + try server.read() + } + + while try server.write() { + + didWrite = true + } + + while l2capSocket.client.queue.isEmpty == false { + + try client.read() + } + + } while didWrite + + XCTAssert(l2capSocket.client.queue.isEmpty) + XCTAssert(l2capSocket.server.queue.isEmpty) + } +} + +public struct TestProfile { + + public typealias Service = GATT.Service + public typealias Characteristic = GATT.Characteristic + + public static let services: [Service] = [ + TestService, + TestDefinedService + ] + + public static let TestService = Service(uuid: BluetoothUUID(rawValue: "60F14FE2-F972-11E5-B84F-23E070D5A8C7")!, + primary: true, + characteristics: [ + TestProfile.Read, + TestProfile.ReadBlob, + TestProfile.Write, + TestProfile.WriteBlob, + TestProfile.WriteWithoutResponse, + TestProfile.WriteBlobWithoutResponse + ]) + + public static let Read = Characteristic(uuid: BluetoothUUID(rawValue: "E77D264C-F96F-11E5-80E0-23E070D5A8C7")!, + value: "Test Read-Only".data(using: .utf8)!, + permissions: [.read], + properties: [.read]) + + public static let ReadBlob = Characteristic(uuid: BluetoothUUID(rawValue: "0615FF6C-0E37-11E6-9E58-75D7DC50F6B1")!, + value: Data(bytes: [UInt8](repeating: UInt8.max, count: 512)), + permissions: [.read], + properties: [.read]) + + public static let Write = Characteristic(uuid: BluetoothUUID(rawValue: "37BBD7D0-F96F-11E5-8EC1-23E070D5A8C7")!, + value: Data(), + permissions: [.write], + properties: [.write]) + + public static let WriteValue = "Test Write".data(using: .utf8)! + + public static let WriteWithoutResponse = Characteristic(uuid: BluetoothUUID(rawValue: "AFE458FE-55BE-4D99-8C22-82FACE077D86")!, + value: Data(), + permissions: [.write], + properties: [.write, .writeWithoutResponse]) + + public static let WriteBlob = Characteristic(uuid: BluetoothUUID(rawValue: "2FDDB448-F96F-11E5-A891-23E070D5A8C7")!, + value: Data(), + permissions: [.write], + properties: [.write]) + + public static let WriteBlobValue = Data(bytes: [UInt8](repeating: 0xAA, count: 512)) + + public static let WriteBlobWithoutResponse = Characteristic(uuid: BluetoothUUID(rawValue: "D4A6E516-C867-4582-BF66-0A02BD854613")!, + value: Data(), + permissions: [.write], + properties: [.write, .writeWithoutResponse]) + + public static let TestDefinedService = Service(uuid: BluetoothUUID.bit16(0xFEA9), + primary: true, + characteristics: [ + TestProfile.Read, + TestProfile.ReadBlob, + TestProfile.Write, + TestProfile.WriteBlob, + TestProfile.WriteWithoutResponse, + TestProfile.WriteBlobWithoutResponse + ]) + + public static let WriteValues: [BluetoothUUID: (data: Data, reliableWrites: Bool)] = [ + Write.uuid: (WriteValue, true), + WriteBlob.uuid: (WriteBlobValue, true), + WriteWithoutResponse.uuid: (WriteValue, false), + WriteBlobWithoutResponse.uuid: (WriteBlobValue, false) + ] +} diff --git a/Xcode/Bluetooth.xcodeproj/project.pbxproj b/Xcode/Bluetooth.xcodeproj/project.pbxproj index dd339b692..f5f44baa6 100644 --- a/Xcode/Bluetooth.xcodeproj/project.pbxproj +++ b/Xcode/Bluetooth.xcodeproj/project.pbxproj @@ -124,7 +124,6 @@ 6E65DF912075CD9F005BD2A0 /* UUIDTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E65DF902075CD9F005BD2A0 /* UUIDTests.swift */; }; 6E65DF932075D29C005BD2A0 /* iBeaconTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E65DF922075D29C005BD2A0 /* iBeaconTests.swift */; }; 6E65DF952075D568005BD2A0 /* XCTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E65DF942075D568005BD2A0 /* XCTest.swift */; }; - 6E65DF9A2077C7BB005BD2A0 /* GATTTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E65DF992077C7BB005BD2A0 /* GATTTests.swift */; }; 6E6AD98D1FCE8E4F007F0250 /* BluetoothTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E6AD98B1FCE8E4F007F0250 /* BluetoothTests.swift */; }; 6E704C771E95C32D00484A22 /* BitMaskOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E704C761E95C32D00484A22 /* BitMaskOption.swift */; }; 6E704C781E95C32D00484A22 /* BitMaskOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E704C761E95C32D00484A22 /* BitMaskOption.swift */; }; @@ -212,6 +211,7 @@ 6EBD96BA207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */; }; 6EBD96BB207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */; }; 6EBD96BC207A600B0037D253 /* ATTMaximumTransmissionUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */; }; + 6EBD96C2207ABEE00037D253 /* GATTTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EBD96BD207ABED60037D253 /* GATTTests.swift */; }; 6ECBCF0B206E683C00312117 /* L2CAPSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ECBCF0A206E683C00312117 /* L2CAPSocket.swift */; }; 6ECBCF18206FBD0F00312117 /* HCICommandTimeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ECBCF17206FBD0F00312117 /* HCICommandTimeout.swift */; }; 6ECBCF19206FBD0F00312117 /* HCICommandTimeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ECBCF17206FBD0F00312117 /* HCICommandTimeout.swift */; }; @@ -321,7 +321,6 @@ 6E65DF902075CD9F005BD2A0 /* UUIDTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UUIDTests.swift; sourceTree = ""; }; 6E65DF922075D29C005BD2A0 /* iBeaconTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iBeaconTests.swift; sourceTree = ""; }; 6E65DF942075D568005BD2A0 /* XCTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCTest.swift; sourceTree = ""; }; - 6E65DF992077C7BB005BD2A0 /* GATTTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = GATTTests.swift; path = ../../../../Documents/GATTTests.swift; sourceTree = ""; }; 6E6AD9891FCE8E4F007F0250 /* LinuxMain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinuxMain.swift; sourceTree = ""; }; 6E6AD98B1FCE8E4F007F0250 /* BluetoothTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BluetoothTests.swift; sourceTree = ""; }; 6E704C761E95C32D00484A22 /* BitMaskOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BitMaskOption.swift; sourceTree = ""; }; @@ -345,6 +344,7 @@ 6EB2EA1D1CD5A8A7000CF975 /* Bluetooth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bluetooth.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6EB45EEF2001398100AE5A42 /* DefinedUUID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefinedUUID.swift; sourceTree = ""; }; 6EBD96B8207A600B0037D253 /* ATTMaximumTransmissionUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ATTMaximumTransmissionUnit.swift; sourceTree = ""; }; + 6EBD96BD207ABED60037D253 /* GATTTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GATTTests.swift; sourceTree = ""; }; 6ECBCF0A206E683C00312117 /* L2CAPSocket.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L2CAPSocket.swift; sourceTree = ""; }; 6ECBCF17206FBD0F00312117 /* HCICommandTimeout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HCICommandTimeout.swift; sourceTree = ""; }; 6ECBCF20206FC3A200312117 /* Array.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Array.swift; sourceTree = ""; }; @@ -468,7 +468,7 @@ 6E65DF922075D29C005BD2A0 /* iBeaconTests.swift */, 6E740C5D206586D3006589F6 /* HCITests.swift */, 6E740C5E206586D3006589F6 /* AttributeProtocolTests.swift */, - 6E65DF992077C7BB005BD2A0 /* GATTTests.swift */, + 6EBD96BD207ABED60037D253 /* GATTTests.swift */, 6E14247F206CFFC500BF72BC /* HostController.swift */, 6ECBCF0A206E683C00312117 /* L2CAPSocket.swift */, 6E65DF942075D568005BD2A0 /* XCTest.swift */, @@ -1066,7 +1066,7 @@ 6ECBCF0B206E683C00312117 /* L2CAPSocket.swift in Sources */, 6E6AD98D1FCE8E4F007F0250 /* BluetoothTests.swift in Sources */, 6E65DF812075135E005BD2A0 /* BluetoothUUIDTests.swift in Sources */, - 6E65DF9A2077C7BB005BD2A0 /* GATTTests.swift in Sources */, + 6EBD96C2207ABEE00037D253 /* GATTTests.swift in Sources */, 6E65DF85207552EE005BD2A0 /* AddressTests.swift in Sources */, 6E740C6820659CEF006589F6 /* AttributeProtocolTests.swift in Sources */, ); From 02e3d99df3994fd32b66f52ccb8be70c05a0a165 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 16:52:18 -0500 Subject: [PATCH 09/25] #27 Updated unit tests --- Tests/BluetoothTests/GATTTests.swift | 94 ++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/Tests/BluetoothTests/GATTTests.swift b/Tests/BluetoothTests/GATTTests.swift index 8c0d5cb03..1a35004b8 100644 --- a/Tests/BluetoothTests/GATTTests.swift +++ b/Tests/BluetoothTests/GATTTests.swift @@ -187,6 +187,100 @@ final class GATTTests: XCTestCase { */ (ATTReadByGroupTypeRequest(startHandle: 0x0023, endHandle: .max, type: GATT.UUID.primaryService.uuid), [0x10, 0x23, 0x00, 0xFF, 0xFF, 0x00, 0x28]), + + /** + Read By Group Type Response + Opcode: 0x11 + List Length: 0014 + Attribute Handle: 0x0023 End Group Handle: 0x002C UUID: 7905F431-B5CE-4E99-A40F-4B1E122D00D0 (Apple Notification Center Service) + Attribute Handle: 0x002D End Group Handle: 0x0038 UUID: 89D3502B-0F36-433A-8EF4-C502AD55F8DC + + L2CAP Receive 0x0041 RECV Channel ID: 0x0004 Length: 0x002A (42) [ 11 14 23 00 2C 00 D0 00 2D 12 1E 4B 0F A4 99 4E ... ] + */ + (ATTReadByGroupTypeResponse(data: [ + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x0023, + endGroupHandle: 0x002C, + value: [UInt8](BluetoothUUID(uuid: UUID(uuidString: "7905F431-B5CE-4E99-A40F-4B1E122D00D0")!).littleEndian.data) + ), + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x002D, + endGroupHandle: 0x0038, + value: [UInt8](BluetoothUUID(uuid: UUID(uuidString: "89D3502B-0F36-433A-8EF4-C502AD55F8DC")!).littleEndian.data) + ) + ])!, + + [/* 0x41, 0x20, 0x1B, 0x00, 0x2A, 0x00, 0x04, 0x00, */ 0x11, 0x14, 0x23, 0x00, 0x2C, 0x00, 0xD0, 0x00, 0x2D, 0x12, 0x1E, 0x4B, 0x0F, 0xA4, 0x99, 0x4E, 0xCE, 0xB5, 0x31, 0xF4, 0x05, 0x79, 0x2D, 0x00, 0x38, 0x00, 0xDC, 0xF8, 0x55, 0xAD, 0x02, 0xC5, 0xF4, 0x8E, 0x3A, 0x43, 0x36, 0x0F, 0x2B, 0x50, 0xD3, 0x89] + ), + + /** + Read By Group Type Request - Start Handle:0x0039 - End Handle:0xffff - UUID:2800 (GATT Primary Service Declaration) + Opcode: 0x10 + Starting Handle: 0x0039 + Ending Handle: 0xffff + Attribute Group Type: 2800 (GATT Primary Service Declaration) + + L2CAP Send 0x0041 SEND Channel ID: 0x0004 Length: 0x0007 (07) [ 10 39 00 FF FF 00 28 ] + */ + (ATTReadByGroupTypeRequest(startHandle: 0x0039, endHandle: .max, type: GATT.UUID.primaryService.uuid), + [0x10, 0x39, 0x00, 0xFF, 0xFF, 0x00, 0x28]), + + /** + Read By Group Type Response + Opcode: 0x11 + List Length: 0006 + Attribute Handle: 0x0039 End Group Handle: 0x003C UUID: 1803 (Link Loss) + Attribute Handle: 0x003D End Group Handle: 0x003F UUID: 1804 (Tx Power) + Attribute Handle: 0x0040 End Group Handle: 0x0042 UUID: 1802 (Immediate Alert) + + L2CAP Receive 0x0041 RECV Channel ID: 0x0004 Length: 0x0014 (20) [ 11 06 39 00 3C 00 03 18 3D 00 3F 00 04 18 40 00 ... ] + */ + (ATTReadByGroupTypeResponse(data: [ + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x0039, + endGroupHandle: 0x003C, + value: [UInt8](BluetoothUUID.bit16(0x1803).littleEndian.data) + ), + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x003D, + endGroupHandle: 0x003F, + value: [UInt8](BluetoothUUID.bit16(0x1804).littleEndian.data) + ), + ATTReadByGroupTypeResponse.AttributeData( + attributeHandle: 0x0040, + endGroupHandle: 0x0042, + value: [UInt8](BluetoothUUID.bit16(0x1802).littleEndian.data) + ) + ])!, + + [/* 0x41, 0x20, 0x18, 0x00, 0x14, 0x00, 0x04, 0x00, */ 0x11, 0x06, 0x39, 0x00, 0x3C, 0x00, 0x03, 0x18, 0x3D, 0x00, 0x3F, 0x00, 0x04, 0x18, 0x40, 0x00, 0x42, 0x00, 0x02, 0x18] + ), + + /** + Read By Group Type Request - Start Handle:0x0043 - End Handle:0xffff - UUID:2800 (GATT Primary Service Declaration) + Opcode: 0x10 + Starting Handle: 0x0043 + Ending Handle: 0xffff + Attribute Group Type: 2800 (GATT Primary Service Declaration) + + L2CAP Send 0x0041 SEND Channel ID: 0x0004 Length: 0x0007 (07) [ 10 43 00 FF FF 00 28 ] + */ + (ATTReadByGroupTypeRequest(startHandle: 0x0043, endHandle: .max, type: GATT.UUID.primaryService.uuid), + [0x10, 0x43, 0x00, 0xFF, 0xFF, 0x00, 0x28]), + + /** + Error Response - Attribute Handle: 0x0043 - Error Code: 0x0A - Attribute Not Found + Opcode: 0x01 + Request Opcode In Error: 0x10 (Read By Group Type Request) + Attribute Handle In Error: 0x0043 (67) + Error Code: 0x0a (Attribute Not Found) + + L2CAP Receive 0x0041 RECV Channel ID: 0x0004 Length: 0x0005 (05) [ 01 10 43 00 0A ] + */ + (ATTErrorResponse(requestOpcode: ATTOpcode.readByGroupTypeRequest, + attributeHandle: 0x0043, + error: .attributeNotFound), + [0x01, 0x10, 0x43, 0x00, 0x0A]) ] test(testPDUs) From aec386facc61331d5a893c75efc4574696ae5e96 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 17:48:39 -0500 Subject: [PATCH 10/25] Updated documentation --- Sources/LowEnergyCommandParameter.swift | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Sources/LowEnergyCommandParameter.swift b/Sources/LowEnergyCommandParameter.swift index 413a825fc..1f77ad4ee 100644 --- a/Sources/LowEnergyCommandParameter.swift +++ b/Sources/LowEnergyCommandParameter.swift @@ -167,7 +167,19 @@ public extension LowEnergyCommand { } } - /// LE Set Advertise Enable Command + /** + LE Set Advertising Enable + + The LE Set Advertising Enable command is used to request the Controller to start or stop advertising. The Controller manages the timing of advertisements as per the advertising parameters given in the LE Set Advertising Parameters command. + + The Controller shall continue advertising until the Host issues an LE_Set_Advertising_Enable command with Advertising_Enable set to 0x00 (Advertising is disabled) or until a connection is created or until the Advertising is timed out due to high duty cycle Directed Advertising. In these cases, advertising is then disabled. + + If the advertising parameters' Own_Address_Type parameter is set to 0x01 and the random address for the device has not been initialized, the Controller shall return the error code Invalid HCI Command Parameters (0x12). + + If the advertising parameters' Own_Address_Type parameter is set to 0x03, the controller's resolving list did not contain a matching entry, and the random address for the device has not been initialized, the Controller shall return the error code Invalid HCI Command Parameters (0x12). + + - Note: Enabling advertising when it is already enabled can cause the random address to change. Disabling advertising when it is already disabled has no effect. + */ public struct SetAdvertiseEnableParameter: HCICommandParameter { public static let command = LowEnergyCommand.setAdvertiseEnable From 845aac56de6a0c108358916d3cb2c287adfe3aa1 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 20:37:38 -0500 Subject: [PATCH 11/25] Fixed Linux compilation error --- Tests/BluetoothTests/AttributeProtocolTests.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index 6f78d5a4f..1d5eef997 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -93,8 +93,12 @@ final class AttributeProtocolTests: XCTestCase { XCTAssertNotNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.default.rawValue), "Valid MTU value") XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: 20), "Invalid MTU value") + + #if os(Linux) && swift(>=3.2) + #else XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.min.rawValue - 1), "Invalid MTU value") XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.max.rawValue + 1), "Invalid MTU value") + #endif XCTAssertEqual(ATTMaximumTransmissionUnit(server: 23, client: 512).rawValue, 23, "The server and client shall set ATT_MTU to the minimum of the Client Rx MTU and the Server Rx MTU.") XCTAssertEqual(ATTMaximumTransmissionUnit(server: 512, client: 23).rawValue, 23, "The server and client shall set ATT_MTU to the minimum of the Client Rx MTU and the Server Rx MTU.") From 9479cacc9d544779a85acba483383bffa2d9ad8a Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 20:39:26 -0500 Subject: [PATCH 12/25] Fixed Linux compilation error --- Tests/BluetoothTests/AttributeProtocolTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index 1d5eef997..d2c7674f3 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -94,7 +94,7 @@ final class AttributeProtocolTests: XCTestCase { XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: 20), "Invalid MTU value") - #if os(Linux) && swift(>=3.2) + #if os(Linux) && swift(>=3.0) && !swift(>=3.2) #else XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.min.rawValue - 1), "Invalid MTU value") XCTAssertNil(ATTMaximumTransmissionUnit(rawValue: ATTMaximumTransmissionUnit.max.rawValue + 1), "Invalid MTU value") From dc075b668d0dd051c506c2f67b49c56f43943758 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 21:36:29 -0500 Subject: [PATCH 13/25] #27 Updated unit tests --- Sources/GATTClient.swift | 3 +- Sources/GATTDatabase.swift | 1 + Tests/BluetoothTests/GATTTests.swift | 254 +++++++++++++++++++++---- Tests/BluetoothTests/L2CAPSocket.swift | 121 ------------ 4 files changed, 221 insertions(+), 158 deletions(-) diff --git a/Sources/GATTClient.swift b/Sources/GATTClient.swift index dd10d7301..c33659a92 100755 --- a/Sources/GATTClient.swift +++ b/Sources/GATTClient.swift @@ -1015,8 +1015,7 @@ fileprivate final class DiscoveryOperation { @inline(__always) func error(_ responseError: ATTErrorResponse) { - if responseError.errorCode == .attributeNotFound, - foundData.isEmpty == false { + if responseError.errorCode == .attributeNotFound { success() diff --git a/Sources/GATTDatabase.swift b/Sources/GATTDatabase.swift index f6d7d9499..7da4def8f 100644 --- a/Sources/GATTDatabase.swift +++ b/Sources/GATTDatabase.swift @@ -45,6 +45,7 @@ public struct GATTDatabase { // MARK: - Methods + @discardableResult public mutating func add(service: Service) -> UInt16 { let newHandle = self.newHandle() diff --git a/Tests/BluetoothTests/GATTTests.swift b/Tests/BluetoothTests/GATTTests.swift index 1a35004b8..636fceff4 100644 --- a/Tests/BluetoothTests/GATTTests.swift +++ b/Tests/BluetoothTests/GATTTests.swift @@ -32,21 +32,25 @@ final class GATTTests: XCTestCase { test(testPDUs) - let l2capSocket = MockedL2CAPSocket.from(mock: testPDUs.map { $0.1 }) - // server - let server = GATTServer(socket: l2capSocket.server, maximumTransmissionUnit: mtu, maximumPreparedWrites: .max) + let serverSocket = TestL2CAPSocket() + let server = GATTServer(socket: serverSocket, maximumTransmissionUnit: mtu, maximumPreparedWrites: .max) server.log = { print("GATT Server: " + $0) } server.connection.log = { print("Server ATT: " + $0) } + //server.database = database // client - let client = GATTClient(socket: l2capSocket.client, maximumTransmissionUnit: mtu) + let clientSocket = TestL2CAPSocket() + let client = GATTClient(socket: clientSocket, maximumTransmissionUnit: mtu) client.log = { print("GATT Client: " + $0) } client.connection.log = { print("Client ATT: " + $0) } - // fake sockets - do { try run(server: server, client: client, l2capSocket: l2capSocket) } - catch { XCTFail("Error: \(error)"); return } + clientSocket.target = serverSocket + serverSocket.target = clientSocket // weak references + + // run fake sockets + do { try run(server: (server, serverSocket), client: (client, clientSocket)) } + catch { XCTFail("Error: \(error)") } XCTAssertEqual(server.connection.maximumTransmissionUnit, client.connection.maximumTransmissionUnit) XCTAssertEqual(server.connection.maximumTransmissionUnit, mtu) @@ -57,8 +61,123 @@ final class GATTTests: XCTestCase { func testDiscoverPrimaryServices() { + struct ProximityProfile { + + static let services: [GATT.Service] = [ + GenericAccessService, + GenericAttributeService, + BatteryService, + CurrentTimeService, + DeviceInformationService, + LinkLossService, + TXPowerService, + ImmediateAlertService, + Apple1Service, + Apple2Service, + Apple3Service, + Apple4Service + ] + + static let GenericAccessService = GATT.Service(uuid: .bit16(0x1800), + primary: true, + characteristics: [ + ] + ) + + static let GenericAttributeService = GATT.Service(uuid: .bit16(0x1801), + primary: true, + characteristics: [ + ] + ) + + static let BatteryService = GATT.Service(uuid: .bit16(0x180F), + primary: true, + characteristics: [ + ] + ) + + static let CurrentTimeService = GATT.Service(uuid: .bit16(0x1805), + primary: true, + characteristics: [ + ] + ) + + static let DeviceInformationService = GATT.Service(uuid: .bit16(0x180A), + primary: true, + characteristics: [ + ] + ) + + static let LinkLossService = GATT.Service(uuid: .bit16(0x1803), + primary: true, + characteristics: [ + ] + ) + + static let TXPowerService = GATT.Service(uuid: .bit16(0x1804), + primary: true, + characteristics: [ + ] + ) + + static let ImmediateAlertService = GATT.Service(uuid: .bit16(0x1802), + primary: true, + characteristics: [ + ] + ) + + static let Apple1Service = GATT.Service(uuid: BluetoothUUID(uuid: UUID(uuidString: "D0611E78-BBB4-4591-A5F8-487910AE4366")!), + primary: true, + characteristics: [ + ] + ) + + static let Apple2Service = GATT.Service(uuid: BluetoothUUID(uuid: UUID(uuidString: "9FA480E0-4967-4542-9390-D343DC5D04AE")!), + primary: true, + characteristics: [ + ] + ) + + static let Apple3Service = GATT.Service(uuid: BluetoothUUID(uuid: UUID(uuidString: "7905F431-B5CE-4E99-A40F-4B1E122D00D0")!), + primary: true, + characteristics: [ + ] + ) + + static let Apple4Service = GATT.Service(uuid: BluetoothUUID(uuid: UUID(uuidString: "89D3502B-0F36-433A-8EF4-C502AD55F8DC")!), + primary: true, + characteristics: [ + ] + ) + } + + guard let mtu = ATTMaximumTransmissionUnit(rawValue: 104) + else { XCTFail(); return } + let testPDUs: [(ATTProtocolDataUnit, [UInt8])] = [ + /** + Apr 08 15:32:49.824 ATT Send 0x0041 SEND Exchange MTU Request - MTU:104 + Exchange MTU Request - MTU:104 + Opcode: 0x02 + Client Rx MTU: 0x0068 + + L2CAP Send 0x0041 SEND Channel ID: 0x0004 Length: 0x0003 (03) [ 02 68 00 ] + */ + (ATTMaximumTransmissionUnitRequest(clientMTU: mtu.rawValue), + [0x02, 0x68, 0x00]), + + /** + Apr 08 15:32:49.845 ATT Receive 0x0041 RECV Exchange MTU Response - MTU:104 + Exchange MTU Response - MTU:104 + Opcode: 0x03 + Client Rx MTU: 0x0068 + + L2CAP Receive 0x0041 RECV Channel ID: 0x0004 Length: 0x0003 (03) [ 03 68 00 ] + */ + (ATTMaximumTransmissionUnitResponse(serverMTU: mtu.rawValue), + [0x03, 0x68, 0x00]), + /** Read By Group Type Request - Start Handle:0x0001 - End Handle:0xffff - UUID:2800 (GATT Primary Service Declaration) Opcode: 0x10 @@ -284,11 +403,57 @@ final class GATTTests: XCTestCase { ] test(testPDUs) + + // server + let serverSocket = TestL2CAPSocket() + let server = GATTServer(socket: serverSocket, maximumTransmissionUnit: mtu, maximumPreparedWrites: .max) + server.log = { print("GATT Server: " + $0) } + server.connection.log = { print("Server ATT: " + $0) } + server.database = generateDB(ProximityProfile.services) + + // client + let clientSocket = TestL2CAPSocket() + let client = GATTClient(socket: clientSocket, maximumTransmissionUnit: mtu) + client.log = { print("GATT Client: " + $0) } + client.connection.log = { print("Client ATT: " + $0) } + + clientSocket.target = serverSocket + serverSocket.target = clientSocket // weak references + + // run fake sockets + do { try run(server: (server, serverSocket), client: (client, clientSocket)) } + catch { XCTFail("Error: \(error)") } + + client.discoverAllPrimaryServices { + + switch $0 { + + case let .error(error): + XCTFail("\(error)") + + case let .value(services): + + XCTAssertEqual(services.map { $0.uuid }, ProximityProfile.services.map { $0.uuid }) + } + } + + // run fake sockets + do { try run(server: (server, serverSocket), client: (client, clientSocket)) } + catch { XCTFail("Error: \(error)") } + + // MTU + XCTAssertEqual(server.connection.maximumTransmissionUnit, client.connection.maximumTransmissionUnit) + XCTAssertEqual(server.connection.maximumTransmissionUnit, mtu) + XCTAssertEqual(client.connection.maximumTransmissionUnit, mtu) + + // validate GATT PDUs + let mockData = split(pdu: testPDUs.map { $0.1 }) + } func testGATT() { - let database = generateDB() + let database = generateDB(TestProfile.services) dumpGATT(database: database) @@ -483,14 +648,11 @@ final class GATTTests: XCTestCase { extension GATTTests { - func generateDB() -> GATTDatabase { + func generateDB(_ services: [GATT.Service]) -> GATTDatabase { var database = GATTDatabase() - for service in TestProfile.services { - - let _ = database.add(service: service) - } + services.forEach { database.add(service: $0) } return database } @@ -562,37 +724,59 @@ extension GATTTests { } while didWrite } - func run(server: GATTServer, client: GATTClient, l2capSocket: (server: MockedL2CAPSocket, client: MockedL2CAPSocket)) throws { + func split(pdu data: [[UInt8]]) -> (server: [Data], client: [Data]) { - var didWrite = false - repeat { + var serverSocketData = [Data]() + var clientSocketData = [Data]() + + for pduData in data { - didWrite = false + guard let opcodeByte = pduData.first + else { fatalError("Empty data \(pduData)") } - while try client.write() { - - didWrite = true - } + guard let opcode = ATTOpcode(rawValue: opcodeByte) + else { fatalError("Invalid opcode \(opcodeByte)") } - while l2capSocket.server.queue.isEmpty == false { + switch opcode.type.destination { - try server.read() - } - - while try server.write() { + case .client: - didWrite = true - } - - while l2capSocket.client.queue.isEmpty == false { + clientSocketData.append(Data(pduData)) + + case .server: - try client.read() + serverSocketData.append(Data(pduData)) } - - } while didWrite + } + + return (serverSocketData, clientSocketData) + } +} + +fileprivate extension ATTOpcodeType { + + enum Destination { + + case client + case server + } + + var destination: Destination { - XCTAssert(l2capSocket.client.queue.isEmpty) - XCTAssert(l2capSocket.server.queue.isEmpty) + switch self { + + case .command, + .request: + + return .server + + case .response, + .confirmation, + .indication, + .notification: + + return .client + } } } diff --git a/Tests/BluetoothTests/L2CAPSocket.swift b/Tests/BluetoothTests/L2CAPSocket.swift index c4d63d41f..bb4e50aa6 100644 --- a/Tests/BluetoothTests/L2CAPSocket.swift +++ b/Tests/BluetoothTests/L2CAPSocket.swift @@ -81,124 +81,3 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { return data } } - -// MARK: - Mocked Data - -/// Test L2CAP socket with mocked data. -internal final class MockedL2CAPSocket: L2CAPSocketProtocol { - - // MARK: - Properties - - /// Protocol/Service Multiplexer (PSM) - let protocolServiceMultiplexer: UInt16 - - /// Channel Identifier (CID) - /// - /// L2CAP channel endpoints are identified to their clients by a Channel Identifier (CID). - /// This is assigned by L2CAP, and each L2CAP channel endpoint on any device has a different CID. - let channelIdentifier: UInt16 - - /// The socket's security level. - private(set) var securityLevel: SecurityLevel = .sdp - - /// Attempts to change the socket's security level. - func setSecurityLevel(_ securityLevel: SecurityLevel) throws { - - self.securityLevel = securityLevel - } - - fileprivate(set) var queue = [Data]() { - - didSet { print("L2CAP queue: \(queue.count)") } - } - - private(set) var recieved = [Data]() - - /// Target socket. - weak var target: MockedL2CAPSocket? - - init(protocolServiceMultiplexer: UInt16 = UInt16(ATT.PSM.rawValue), - channelIdentifier: UInt16 = ATT.CID) { - - self.protocolServiceMultiplexer = protocolServiceMultiplexer - self.channelIdentifier = channelIdentifier - } - - // MARK: - Methods - - /// Write to the socket. - func send(_ data: Data) throws { - - target?.recieved.append(data) - } - - /// Reads from the socket. - func recieve(_ bufferSize: Int) throws -> Data { - - guard let pdu = queue.popFirst() - else { throw POSIXError(code: .EWOULDBLOCK) } - - guard pdu.count <= bufferSize - else { throw POSIXError(code: .EPIPE) } - - return pdu - } -} - -extension MockedL2CAPSocket { - - static func from(mock data: [[UInt8]]) -> (server: MockedL2CAPSocket, client: MockedL2CAPSocket) { - - let serverSocket = MockedL2CAPSocket() - let clientSocket = MockedL2CAPSocket() - - for pduData in data { - - guard let opcodeByte = pduData.first - else { fatalError("Empty data \(pduData)") } - - guard let opcode = ATTOpcode(rawValue: opcodeByte) - else { fatalError("Invalid opcode \(opcodeByte)") } - - switch opcode.type.destination { - - case .client: - - clientSocket.queue.append(Data(pduData)) - - case .server: - - serverSocket.queue.append(Data(pduData)) - } - } - - return (serverSocket, clientSocket) - } -} - -fileprivate extension ATTOpcodeType { - - enum Destination { - - case client - case server - } - - var destination: Destination { - - switch self { - - case .command, - .request: - - return .server - - case .response, - .confirmation, - .indication, - .notification: - - return .client - } - } -} From 7598e1e714d15291b9ac7fffe785c9bae0ab8ebe Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 21:49:22 -0500 Subject: [PATCH 14/25] #27 Updated unit tests --- Tests/BluetoothTests/GATTTests.swift | 28 +++++++++++++++++++------- Tests/BluetoothTests/L2CAPSocket.swift | 6 +++++- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/Tests/BluetoothTests/GATTTests.swift b/Tests/BluetoothTests/GATTTests.swift index 636fceff4..fd1db7801 100644 --- a/Tests/BluetoothTests/GATTTests.swift +++ b/Tests/BluetoothTests/GATTTests.swift @@ -30,6 +30,7 @@ final class GATTTests: XCTestCase { [0x03, 0x00, 0x02]) ] + // decode and validate bytes test(testPDUs) // server @@ -37,7 +38,6 @@ final class GATTTests: XCTestCase { let server = GATTServer(socket: serverSocket, maximumTransmissionUnit: mtu, maximumPreparedWrites: .max) server.log = { print("GATT Server: " + $0) } server.connection.log = { print("Server ATT: " + $0) } - //server.database = database // client let clientSocket = TestL2CAPSocket() @@ -57,6 +57,12 @@ final class GATTTests: XCTestCase { XCTAssertNotEqual(server.connection.maximumTransmissionUnit, .default) XCTAssertEqual(client.connection.maximumTransmissionUnit, mtu) XCTAssertNotEqual(client.connection.maximumTransmissionUnit, .default) + + // validate GATT PDUs + let mockData = split(pdu: testPDUs.map { $0.1 }) + + XCTAssertEqual(serverSocket.cache, mockData.server) + XCTAssertEqual(clientSocket.cache, mockData.client) } func testDiscoverPrimaryServices() { @@ -64,18 +70,23 @@ final class GATTTests: XCTestCase { struct ProximityProfile { static let services: [GATT.Service] = [ + GenericAccessService, GenericAttributeService, + + Apple1Service, + Apple2Service, + BatteryService, CurrentTimeService, DeviceInformationService, + + AppleNotificationService, + Apple4Service, + LinkLossService, TXPowerService, - ImmediateAlertService, - Apple1Service, - Apple2Service, - Apple3Service, - Apple4Service + ImmediateAlertService ] static let GenericAccessService = GATT.Service(uuid: .bit16(0x1800), @@ -138,7 +149,7 @@ final class GATTTests: XCTestCase { ] ) - static let Apple3Service = GATT.Service(uuid: BluetoothUUID(uuid: UUID(uuidString: "7905F431-B5CE-4E99-A40F-4B1E122D00D0")!), + static let AppleNotificationService = GATT.Service(uuid: BluetoothUUID(uuid: UUID(uuidString: "7905F431-B5CE-4E99-A40F-4B1E122D00D0")!), primary: true, characteristics: [ ] @@ -410,6 +421,7 @@ final class GATTTests: XCTestCase { server.log = { print("GATT Server: " + $0) } server.connection.log = { print("Server ATT: " + $0) } server.database = generateDB(ProximityProfile.services) + dumpGATT(database: server.database) // client let clientSocket = TestL2CAPSocket() @@ -449,6 +461,8 @@ final class GATTTests: XCTestCase { // validate GATT PDUs let mockData = split(pdu: testPDUs.map { $0.1 }) + XCTAssertEqual(serverSocket.cache, mockData.server) + XCTAssertEqual(clientSocket.cache, mockData.client) } func testGATT() { diff --git a/Tests/BluetoothTests/L2CAPSocket.swift b/Tests/BluetoothTests/L2CAPSocket.swift index bb4e50aa6..73a2be0fc 100644 --- a/Tests/BluetoothTests/L2CAPSocket.swift +++ b/Tests/BluetoothTests/L2CAPSocket.swift @@ -40,6 +40,8 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { didSet { print("L2CAP Socket buffer \([UInt8](receivedData))") } } + private(set) var cache = [Data]() + init(protocolServiceMultiplexer: UInt16 = UInt16(ATT.PSM.rawValue), channelIdentifier: UInt16 = ATT.CID) { @@ -77,7 +79,9 @@ internal final class TestL2CAPSocket: L2CAPSocketProtocol { receivedData = Data(receivedData.suffix(from: data.count)) } } - + + cache.append(data) + return data } } From 78fd6b7b85d606b4544d2ab9ca24327175141f13 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Sun, 8 Apr 2018 22:59:07 -0500 Subject: [PATCH 15/25] #27 Updated unit tests --- Tests/BluetoothTests/GATTTests.swift | 39 ++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/Tests/BluetoothTests/GATTTests.swift b/Tests/BluetoothTests/GATTTests.swift index fd1db7801..56004be5a 100644 --- a/Tests/BluetoothTests/GATTTests.swift +++ b/Tests/BluetoothTests/GATTTests.swift @@ -92,12 +92,38 @@ final class GATTTests: XCTestCase { static let GenericAccessService = GATT.Service(uuid: .bit16(0x1800), primary: true, characteristics: [ + ] ) static let GenericAttributeService = GATT.Service(uuid: .bit16(0x1801), primary: true, characteristics: [ + GATT.Characteristic(uuid: BluetoothUUID(), + value: Data(), + permissions: [.read], + properties: [.read], + descriptors: []), + GATT.Characteristic(uuid: BluetoothUUID(), + value: Data(), + permissions: [.read], + properties: [.read], + descriptors: []), + GATT.Characteristic(uuid: BluetoothUUID(), + value: Data(), + permissions: [.read], + properties: [.read], + descriptors: []), + GATT.Characteristic(uuid: BluetoothUUID(), + value: Data(), + permissions: [.read], + properties: [.read], + descriptors: []), + GATT.Characteristic(uuid: BluetoothUUID(), + value: Data(), + permissions: [.read], + properties: [.read], + descriptors: []) ] ) @@ -461,8 +487,17 @@ final class GATTTests: XCTestCase { // validate GATT PDUs let mockData = split(pdu: testPDUs.map { $0.1 }) - XCTAssertEqual(serverSocket.cache, mockData.server) - XCTAssertEqual(clientSocket.cache, mockData.client) + //XCTAssertEqual(serverSocket.cache, mockData.server) + print("GATT Server PDUs") + serverSocket.cache.forEach { print($0.map { "0x" + $0.toHexadecimal() }) } + print("GATT Server Expected") + mockData.server.forEach { print($0.map { "0x" + $0.toHexadecimal() }) } + + //XCTAssertEqual(clientSocket.cache, mockData.client) + print("GATT Client PDUs") + clientSocket.cache.forEach { print($0.map { "0x" + $0.toHexadecimal() }) } + print("GATT Client Expected") + mockData.client.forEach { print($0.map { "0x" + $0.toHexadecimal() }) } } func testGATT() { From 5dcef0018e27a135b2922ab7ee204b52a2c63805 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 06:03:12 -0500 Subject: [PATCH 16/25] #27 Updated unit tests --- .../AttributeProtocolTests.swift | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index d2c7674f3..8d27c3b24 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -18,7 +18,8 @@ final class AttributeProtocolTests: XCTestCase { ("testMTU", testMTU), ("testReadByGroupType", testReadByGroupType), ("testFindByType", testFindByType), - ("testReadByType", testReadByType) + ("testReadByType", testReadByType), + ("testHandleValueIndication", testHandleValueIndication) ] func testATTOpcode() { @@ -306,4 +307,30 @@ final class AttributeProtocolTests: XCTestCase { XCTAssert(characteristicDeclaration.properties == characteristic.properties) } } + + func testHandleValueIndication() { + + do { + + /** + Apr 08 15:32:49.710 ATT Receive 0x0041 RECV Handle Value Indication + Handle Value Indication + Opcode: 0x1d + Attribute Handle: 0x0008 (8) + Value: 0a 00 ff ff + + L2CAP Receive 0x0041 RECV Channel ID: 0x0004 Length: 0x0007 (07) [ 1D 08 00 0A 00 FF FF ] + */ + + let data: [UInt8] = [0x1D, 0x08, 0x00, 0x0A, 0x00, 0xFF, 0xFF] + + guard let pdu = ATTHandleValueIndication(byteValue: data) + else { XCTFail("Could not parse"); return } + + XCTAssertEqual(pdu.byteValue, data) + + XCTAssertEqual(pdu.handle, 0x0008) + XCTAssertEqual(pdu.value, [0x0a, 0x00, 0xff, 0xff]) + } + } } From bfb8b3fe7994e6f84a90b469bc85e0c77682f2a7 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 06:05:43 -0500 Subject: [PATCH 17/25] #27 Updated unit tests --- Tests/BluetoothTests/iBeaconTests.swift | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Tests/BluetoothTests/iBeaconTests.swift b/Tests/BluetoothTests/iBeaconTests.swift index 7d64f7eec..028150d1a 100644 --- a/Tests/BluetoothTests/iBeaconTests.swift +++ b/Tests/BluetoothTests/iBeaconTests.swift @@ -13,7 +13,8 @@ import Foundation final class iBeaconTests: XCTestCase { static let allTests = [ - ("testData", testData) + ("testData", testData), + ("testCommand", testCommand) ] func testData() { @@ -92,4 +93,13 @@ final class iBeaconTests: XCTestCase { XCTAssertEqual(advertisingData.data.29, testData.29) XCTAssertEqual(advertisingData.data.30, testData.30) } + + func testCommand() { + + let beacon = iBeacon(uuid: UUID(), major: 0, minor: 0, rssi: -55, interval: 200) + + let hostController = TestHostController() + + XCTAssertNoThrow(try hostController.iBeacon(beacon)) + } } From 59d5aad18698f9a02e79c83047ad9f9a6829ede7 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 07:23:07 -0500 Subject: [PATCH 18/25] #27 Updated unit tests --- Tests/BluetoothTests/iBeaconTests.swift | 64 ++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/Tests/BluetoothTests/iBeaconTests.swift b/Tests/BluetoothTests/iBeaconTests.swift index 957541053..97a3b86ae 100644 --- a/Tests/BluetoothTests/iBeaconTests.swift +++ b/Tests/BluetoothTests/iBeaconTests.swift @@ -96,10 +96,72 @@ final class iBeaconTests: XCTestCase { func testCommand() { - let beacon = iBeacon(uuid: UUID(), major: 0, minor: 0, rssi: -55, interval: 200) + let uuid = UUID(rawValue: "E2C56DB5-DFFB-48D2-B060-D0F5A71096E0")! + + let beacon = iBeacon(uuid: uuid, major: 1, minor: 1, rssi: -29, interval: 100) let hostController = TestHostController() + // LE Set Advertising Parameters (15 bytes) + hostController.queue.append( + .command(LowEnergyCommand.setAdvertisingParameters.opcode, + [6, 32, 15, 100, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0]) + ) + + /** + RECV Command Complete [2006] - LE Set Advertising Parameters + Parameter Length: 4 (0x04) + Status: 0x00 - Success + Num HCI Command Packets: 0x01 + Opcode: 0x2006 (OGF: 0x08 OCF: 0x06) - [Low Energy] LE Set Advertising Parameters + */ + hostController.queue.append(.event([0x0e, 0x04, 0x01, 0x06, 0x20, 0x00])) + + /** + SEND [200A] LE Set Advertise Enable - 0x01 + [200A] Opcode: 0x200A (OGF: 0x08 OCF: 0x0A) + Parameter Length: 1 (0x01) + Advertising Enable: 01 + */ + + hostController.queue.append( + .command(LowEnergyCommand.setAdvertiseEnable.opcode, + [0x0a, 0x20, 0x01, 0x01] + ) + ) + + /** + RECV Command Complete [200A] - LE Set Advertise Enable + Parameter Length: 4 (0x04) + Status: 0x00 - Success + Num HCI Command Packets: 0x01 + Opcode: 0x200A (OGF: 0x08 OCF: 0x0A) - [Low Energy] LE Set Advertise Enable + */ + hostController.queue.append(.event([0x0e, 0x04, 0x01, 0x0a, 0x20, 0x00])) + + /** + SEND [2008] LE Set Advertising Data + [2008] Opcode: 0x2008 (OGF: 0x08 OCF: 0x08) + Parameter Length: 32 (0x20) + Advertising Data Length: 1E + Flags: 0X1A + Apple Manufacturing Data + Length: 26 (0x1A) + */ + hostController.queue.append( + .command(LowEnergyCommand.setAdvertisingData.opcode, [0x08, 0x20, 0x20, 0x1E, 0x02, 0x01, 0x1A, 0x1A, 0xFF, 0x4C, 0x00, 0x02, 0x15, 0xE2, 0xC5, 0x6D, 0xB5, 0xDF, 0xFB, 0x48, 0xD2, 0xB0, 0x60, 0xD0, 0xF5, 0xA7, 0x10, 0x96, 0xE0, 0x00, 0x01, 0x00, 0x01, 0xE3, 0x00] + ) + ) + + /** + Command Complete [2008] - LE Set Advertising Data + Parameter Length: 4 (0x04) + Status: 0x00 - Success + Num HCI Command Packets: 0x01 + Opcode: 0x2008 (OGF: 0x08 OCF: 0x08) - [Low Energy] LE Set Advertising Data + */ + hostController.queue.append(.event([0x0E, 0x04, 0x01, 0x08, 0x20, 0x00])) + XCTAssertNoThrow(try hostController.iBeacon(beacon)) } } From 8633ff6d54aadcdbc82acb8a5dd1b0879ea75c80 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 07:30:40 -0500 Subject: [PATCH 19/25] #27 Updated unit tests --- .../AttributeProtocolTests.swift | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index 8d27c3b24..a30752182 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -19,7 +19,8 @@ final class AttributeProtocolTests: XCTestCase { ("testReadByGroupType", testReadByGroupType), ("testFindByType", testFindByType), ("testReadByType", testReadByType), - ("testHandleValueIndication", testHandleValueIndication) + ("testHandleValueIndication", testHandleValueIndication), + ("testHandleValueNotification", testHandleValueNotification) ] func testATTOpcode() { @@ -333,4 +334,29 @@ final class AttributeProtocolTests: XCTestCase { XCTAssertEqual(pdu.value, [0x0a, 0x00, 0xff, 0xff]) } } + + func testHandleValueNotification() { + + do { + + /** + RECV Handle Value Notification - Handle:0x0016 - Value:64 + Handle Value Notification - Handle:0x0016 - Value:64 + Opcode: 0x1b + Attribute Handle: 0x0016 (22) + + L2CAP Receive 0x0042 RECV Channel ID: 0x0004 Length: 0x0004 (04) [ 1B 16 00 64 ] + */ + + let data: [UInt8] = [0x1B, 0x16, 0x00, 0x64] + + guard let pdu = ATTHandleValueNotification(byteValue: data) + else { XCTFail("Could not parse"); return } + + XCTAssertEqual(pdu.byteValue, data) + + XCTAssertEqual(pdu.handle, 0x0016) + XCTAssertEqual(pdu.value, [0x64]) + } + } } From 70b7b92639979365bbe5a921135275f8c9e11e7a Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 07:36:23 -0500 Subject: [PATCH 20/25] #27 Updated unit tests --- .../AttributeProtocolTests.swift | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index a30752182..a31376017 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -359,4 +359,47 @@ final class AttributeProtocolTests: XCTestCase { XCTAssertEqual(pdu.value, [0x64]) } } + + func testRead() { + + do { + + /** + ATT Send - Read Request - Handle:0x0016 + Read Request - Handle:0x0016 + Opcode: 0x0a + Attribute Handle: 0x0016 (22) + + L2CAP Send 0x0042 SEND Channel ID: 0x0004 Length: 0x0003 (03) [ 0A 16 00 ] + */ + let data: [UInt8] = [0x0A, 0x16, 0x00] + + guard let pdu = ATTReadRequest(byteValue: data) + else { XCTFail("Could not parse"); return } + + XCTAssertEqual(pdu.byteValue, data) + + XCTAssertEqual(pdu.handle, 0x0016) + } + + do { + + /** + ATT Receive - Read Response - Value:64 + Read Response - Value:64 + Opcode: 0x0b + Value: 64 + + L2CAP Receive 0x0042 RECV Channel ID: 0x0004 Length: 0x0002 (02) [ 0B 64 ] + */ + + let data: [UInt8] = [0x0B, 0x64] + + guard let pdu = ATTReadResponse(byteValue: data) + else { XCTFail("Could not parse"); return } + + XCTAssertEqual(pdu.byteValue, data) + XCTAssertEqual(pdu.attributeValue, [0x64]) + } + } } From ce2361aa4a6efd02cc0a0c21f6387895b5af49e9 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 07:36:37 -0500 Subject: [PATCH 21/25] Fixed ATT Read Response PDU --- Sources/ATTProtocolDataUnit.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/ATTProtocolDataUnit.swift b/Sources/ATTProtocolDataUnit.swift index ab38b5e82..544a3d482 100644 --- a/Sources/ATTProtocolDataUnit.swift +++ b/Sources/ATTProtocolDataUnit.swift @@ -873,15 +873,15 @@ public struct ATTReadResponse: ATTProtocolDataUnit { public init?(byteValue: [UInt8]) { - guard byteValue.count >= ATTReadRequest.length + guard byteValue.count >= type(of: self).length else { return nil } let attributeOpcodeByte = byteValue[0] - guard attributeOpcodeByte == ATTReadResponse.attributeOpcode.rawValue + guard attributeOpcodeByte == type(of: self).attributeOpcode.rawValue else { return nil } - if byteValue.count > ATTReadRequest.length { + if byteValue.count > type(of: self).length { self.attributeValue = Array(byteValue.suffix(from: 1)) From ac4eed1f675efceb9ba419da9a7d5f79c3498e38 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 07:49:11 -0500 Subject: [PATCH 22/25] Fixed ATT Read Response PDU --- .../AttributeProtocolTests.swift | 57 ++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index a31376017..48e498f13 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -20,7 +20,10 @@ final class AttributeProtocolTests: XCTestCase { ("testFindByType", testFindByType), ("testReadByType", testReadByType), ("testHandleValueIndication", testHandleValueIndication), - ("testHandleValueNotification", testHandleValueNotification) + ("testHandleValueNotification", testHandleValueNotification), + ("testRead", testRead), + ("testWrite", testWrite), + ] func testATTOpcode() { @@ -402,4 +405,56 @@ final class AttributeProtocolTests: XCTestCase { XCTAssertEqual(pdu.attributeValue, [0x64]) } } + + func testWrite() { + + + } + + func testFindInformation() { + + do { + + /** + Find Information Request - Start Handle:0x0017 - End Handle:0x0017 + Opcode: 0x04 + Start Handle: 0x0017 + End Handle: 0x0017 + L2CAP Send Channel ID: 0x0004 Length: 0x0005 (05) [ 04 17 00 17 00 ] + */ + + let data: [UInt8] = [0x04, 0x17, 0x00, 0x17, 0x00] + + guard let pdu = ATTFindInformationRequest(byteValue: data) + else { XCTFail("Could not parse"); return } + + XCTAssertEqual(pdu.byteValue, data) + XCTAssertEqual(type(of: pdu).attributeOpcode.rawValue, 0x04) + XCTAssertEqual(pdu.startHandle, 0x0017) + XCTAssertEqual(pdu.endHandle, 0x0017) + } + + do { + + /** + Find Information Response + Opcode: 0x05 + Format: 1 (Handles and 16 byte UUIDs) + Handle: 0x0017 UUID: 2902 (Client Characteristic Configuration) + + L2CAP Receive 0x0042 RECV Channel ID: 0x0004 Length: 0x0006 (06) [ 05 01 17 00 02 29 ] + */ + + let data: [UInt8] = [0x05, 0x01, 0x17, 0x00, 0x02, 0x29] + + guard let pdu = ATTFindInformationResponse(byteValue: data) + else { XCTFail("Could not parse"); return } + + let foundData = ATTFindInformationResponse.Data.bit16([(0x0017, 0x2902)]) + + XCTAssertEqual(pdu.byteValue, data) + XCTAssertEqual(pdu.data.byteValue, foundData.byteValue) + XCTAssertEqual("\(pdu.data)", "\(foundData.byteValue)") + } + } } From 6e7a7c22257b413bf7f7e0874ece3e964416cab3 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 07:53:41 -0500 Subject: [PATCH 23/25] Fixed ATT FInd Information PDU --- Sources/ATTProtocolDataUnit.swift | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Sources/ATTProtocolDataUnit.swift b/Sources/ATTProtocolDataUnit.swift index 544a3d482..731b1b623 100644 --- a/Sources/ATTProtocolDataUnit.swift +++ b/Sources/ATTProtocolDataUnit.swift @@ -252,10 +252,10 @@ public struct ATTFindInformationRequest: ATTProtocolDataUnit { /// and contains information about this server. public struct ATTFindInformationResponse: ATTProtocolDataUnit { - public static let attributeOpcode = ATT.Opcode.findInformationRequest + public static let attributeOpcode = ATTOpcode.findInformationResponse /// Length ranges from 6, to the maximum MTU size. - public static let length = 8 + public static let length = 6 /// The information data whose format is determined by the Format field. public var data: Data @@ -330,6 +330,22 @@ public struct ATTFindInformationResponse: ATTProtocolDataUnit { } } + /* + public static func == (lhs: Data, rhs: Data) -> Bool { + + switch (lhs, rhs) { + + case let (.bit16(lhsValue), .bit16(rhsValue)): + return lhsValue == rhsValue + + case let (.bit128(lhsValue), .bit128(rhsValue)): + return lhsValue == rhsValue + + default: + return false + } + }*/ + public init?(byteValue: [UInt8], format: Format) { let pairLength = format.length From 4dc0d5ed7ab7756b1ed6d0108359196796500c49 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 07:54:21 -0500 Subject: [PATCH 24/25] #27 Updated unit tests --- Tests/BluetoothTests/AttributeProtocolTests.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index 48e498f13..1a235b8e2 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -23,7 +23,7 @@ final class AttributeProtocolTests: XCTestCase { ("testHandleValueNotification", testHandleValueNotification), ("testRead", testRead), ("testWrite", testWrite), - + ("testFindInformation", testFindInformation) ] func testATTOpcode() { @@ -454,7 +454,7 @@ final class AttributeProtocolTests: XCTestCase { XCTAssertEqual(pdu.byteValue, data) XCTAssertEqual(pdu.data.byteValue, foundData.byteValue) - XCTAssertEqual("\(pdu.data)", "\(foundData.byteValue)") + XCTAssertEqual("\(pdu.data)", "\(foundData)") } } } From 01df31653e6e39e3e62d893dbd0883a2258771a0 Mon Sep 17 00:00:00 2001 From: Alsey Coleman Miller Date: Mon, 9 Apr 2018 08:01:13 -0500 Subject: [PATCH 25/25] #27 Updated unit tests --- .../AttributeProtocolTests.swift | 44 +++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/Tests/BluetoothTests/AttributeProtocolTests.swift b/Tests/BluetoothTests/AttributeProtocolTests.swift index 1a235b8e2..3671429d4 100644 --- a/Tests/BluetoothTests/AttributeProtocolTests.swift +++ b/Tests/BluetoothTests/AttributeProtocolTests.swift @@ -332,7 +332,6 @@ final class AttributeProtocolTests: XCTestCase { else { XCTFail("Could not parse"); return } XCTAssertEqual(pdu.byteValue, data) - XCTAssertEqual(pdu.handle, 0x0008) XCTAssertEqual(pdu.value, [0x0a, 0x00, 0xff, 0xff]) } @@ -357,7 +356,6 @@ final class AttributeProtocolTests: XCTestCase { else { XCTFail("Could not parse"); return } XCTAssertEqual(pdu.byteValue, data) - XCTAssertEqual(pdu.handle, 0x0016) XCTAssertEqual(pdu.value, [0x64]) } @@ -380,8 +378,8 @@ final class AttributeProtocolTests: XCTestCase { guard let pdu = ATTReadRequest(byteValue: data) else { XCTFail("Could not parse"); return } + XCTAssertEqual(type(of: pdu).attributeOpcode.rawValue, 0x0a) XCTAssertEqual(pdu.byteValue, data) - XCTAssertEqual(pdu.handle, 0x0016) } @@ -401,6 +399,7 @@ final class AttributeProtocolTests: XCTestCase { guard let pdu = ATTReadResponse(byteValue: data) else { XCTFail("Could not parse"); return } + XCTAssertEqual(type(of: pdu).attributeOpcode.rawValue, 0x0b) XCTAssertEqual(pdu.byteValue, data) XCTAssertEqual(pdu.attributeValue, [0x64]) } @@ -408,7 +407,45 @@ final class AttributeProtocolTests: XCTestCase { func testWrite() { + do { + + /** + Write Request - Handle:0x0017 - Value:0100 + Opcode: 0x12 + Attribute Handle: 0x0017 (23) + Value: 01 00 + + L2CAP Send 0x0042 SEND Channel ID: 0x0004 Length: 0x0005 (05) [ 12 17 00 01 00 ] + */ + + let data: [UInt8] = [0x12, 0x17, 0x00, 0x01, 0x00] + + guard let pdu = ATTWriteRequest(byteValue: data) + else { XCTFail("Could not parse"); return } + + XCTAssertEqual(type(of: pdu).attributeOpcode.rawValue, 0x12) + XCTAssertEqual(pdu.byteValue, data) + XCTAssertEqual(pdu.handle, 0x0017) + XCTAssertEqual(pdu.value, [0x01, 0x00]) + } + do { + + /** + Write Response + Opcode: 0x13 + + L2CAP Receive 0x0042 RECV Channel ID: 0x0004 Length: 0x0001 (01) [ 13 ] + */ + + let data: [UInt8] = [0x13] + + guard let pdu = ATTWriteResponse(byteValue: data) + else { XCTFail("Could not parse"); return } + + XCTAssertEqual(type(of: pdu).attributeOpcode.rawValue, 0x13) + XCTAssertEqual(pdu.byteValue, data) + } } func testFindInformation() { @@ -452,6 +489,7 @@ final class AttributeProtocolTests: XCTestCase { let foundData = ATTFindInformationResponse.Data.bit16([(0x0017, 0x2902)]) + XCTAssertEqual(type(of: pdu).attributeOpcode.rawValue, 0x05) XCTAssertEqual(pdu.byteValue, data) XCTAssertEqual(pdu.data.byteValue, foundData.byteValue) XCTAssertEqual("\(pdu.data)", "\(foundData)")