From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from emea01-am1-obe.outbound.protection.outlook.com (mail-am1on0077.outbound.protection.outlook.com [157.56.112.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by lists.bufferbloat.net (Postfix) with ESMTPS id EFAC23B25E for ; Tue, 10 May 2016 05:05:40 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=darbyshire-bryant.me.uk; s=selector1; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=4VmsFags1Ahh+FVE3eBmqD1ff2m5mxAHFexTxrLxYjs=; b=RVSKSCqQ+uDDt37jrgTunOSWSi0QrtUxL0IbguSxR2xfn4nZ8RnPu9JJSHGplfd2GX78cnV1SwFn4pya3STcpPl2AhnXNtWNL/EhNdKB4M0kqtuCJbkAfWMDxSACPxcy1hISuxtr4i0pCTYrPy4Z8EkCy1p+UHCdx+zCPq3OWGg= Authentication-Results: lists.bufferbloat.net; dkim=none (message not signed) header.d=none; lists.bufferbloat.net; dmarc=none action=none header.from=darbyshire-bryant.me.uk; Received: from [IPv6:2001:470:183f:da2b::4007:25d] (2001:470:183f:da2b::4007:25d) by DB5PR07MB0935.eurprd07.prod.outlook.com (10.161.200.142) with Microsoft SMTP Server (TLS) id 15.1.492.11; Tue, 10 May 2016 09:05:38 +0000 To: Dave Taht References: <0eca51dc-694b-6a85-d56d-1ed19e9fc2ef@darbyshire-bryant.me.uk> CC: From: Kevin Darbyshire-Bryant Message-ID: <5731A45F.5070109@darbyshire-bryant.me.uk> Date: Tue, 10 May 2016 10:05:35 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-512; boundary="------------ms070107030705050206040105" X-Originating-IP: [2001:470:183f:da2b::4007:25d] X-ClientProxiedBy: DB4PR07CA008.eurprd07.prod.outlook.com (10.242.229.18) To DB5PR07MB0935.eurprd07.prod.outlook.com (10.161.200.142) X-MS-Office365-Filtering-Correlation-Id: a9277de2-9065-4ce2-83c1-08d378b2414c X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB0935; 2:0jNWpTaOhjjkKCSjQJGPVGMYJapRWCkX84SMwT/wwNpc+SyjGnBxbMrlOCExX0rsymOT1UVS9ojKVSWHehk0/3mNbeoKwZ/o3i9QpMOwiNlBTop4hDKC6ClQaR2sow+ZF7U8vbcHzKz/gHMZTLTuFatPbOY3OZu953VM0SpTZQKZzazq4apdhC41ZAEDh3ph; 3:Qz33QPcA8k2qYDYaVFHY0BlA5F7/8f6uRtmau4rBFk+uT5b0Bcn8w8ydDKH9VKBgn2HjN5noN4xFe0QmItXlVd6WR1t4YwZjpAjJl37MeJpVADMEz9/crgdruOgAXWFP X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR07MB0935; X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB0935; 25:mZ7qh5GvW0jlqx/N53SZDZ1a/Ca3lbEmKw25WG/JAfNe4rdcCGBDSUHNz7n831AQnlqI6CLqbDsYvrgL0Z3aFWW992CxNPqGaql7g/j5X2cd5CcbTtndzf4lN5A3KL7LwTr+QggSeATgw4dVHNj3vtIzR6CV7Xo4Lsjd8tnkFT0ypvfNYhZoaq8dImlji+bioGSi8ffP7iFy+dq60Ot0U+rcVUuBgr/+B1dEFtmwTzkVIkDlQf07eBTrHRN1z3tQTr83cqNFy2H/Ei3zRkQlkyYb0HzK7mPxNX0+yczsXNBL/BLm9tzLmLDrRAhxtQkge6ELJtctp6tqo/iyQe4+un/evf0sy0ysxuLqV3i5y2tKHyPY2/+RZK78bMRFg2Oc37UnVcadsAy5BxfOOfmcGMn9KJ7VVQu42st0bYV8lpxjhsc6paQk0lrww7uunkVkhb+2IvOAGwUfUWzFZi5TkZzNXlUs0cNmbbtXM8zHL59n14OcrUoRsWb5VsXJDFitr/roXuZOCa2bMmisvsttDc2BbPBUsazbDZRPzkAf5g4gsVXkilO01p/l4OHo25vMQVLlNortwO+sson1sB9DYJUg0tnAILBZGUpAkQ8ia8NPXXQDqV9YGmXDNpiKGeYHn5MWeIrIAV+ble/Eyu/u458o38MINBb6Iv2Md46mniD4gOUnxt0CGSzwqk9Ja4A6E6Ywl0oQL+7iwZ8WCBTkIfoLD6wC1y/o+Q0wqb3jiXGoWGUA1LiRVp8NxkiwUNUnGikUZIlxEDLsw99MOhneuXwQN430PcIPxt1NazimZsL12lOe6Ngazxw3/JvMRk2jWKowCrUugWdw/w5OyImKHMDL78x8Y9WQeojEki0GmAwAnj063i3LO0VlZUZ51aYIn+QT7ku/oXlCbPXrE9SHmsjvdqRLtOfiVcYsFjxFKFA= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040130)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041072)(6043046); SRVR:DB5PR07MB0935; BCL:0; PCL:0; RULEID:; SRVR:DB5PR07MB0935; X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB0935; 4:zGJwPWtWjcwPv0LHmY6BXY9kSd28BY6LoV/LfxRw0hj9+ozVOqaSk1NSCSZbchueyQY3BpzKVogN1fZ6KPrAqjTjPoSiJBxBgvjuBfsnBZ1ih6alTm4QDBulsahb5sKNWkLCvnp3iv5qn7YAf1VikcAGh7BsNIdFXxyL8Y2kXBCMo0+NEqb/c+q4EDhQdiPHPvZpLsE/uFZ5+yLgeAWh8BL+ecW+sS4v0qXbcC6HJ5SIK5IuCz3DSt1sGx6TmlKQOMek84bwhmavw2Y1fTNRFY6lhVHE1+dMnwR8diKWzxEGns4zy7Q6EYnhXI/6TodSRNpz0cIi4bwbsG+89veY6Nw6u5uDpQhj36oqAiHfvUb9XCCPcLEbRN4A6KEf+6Njn5q4TvejdMGBqEBIoInbyb7rafGS5uDXGDOAGE2LGQI= X-Forefront-PRVS: 0938781D02 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(53754006)(377454003)(24454002)(80316001)(65956001)(19580395003)(19580405001)(33656002)(2906002)(83506001)(84326002)(36756003)(568964002)(5008740100001)(64126003)(5890100001)(86362001)(2950100001)(65816999)(50986999)(87266999)(76176999)(512874002)(54356999)(110136002)(92566002)(15975445007)(189998001)(77096005)(81166005)(42186005)(74482002)(586003)(4326007)(6116002)(3826002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR07MB0935; H:[IPv6:2001:470:183f:da2b::4007:25d]; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB5PR07MB0935; 23:/61nL47EoduMJIfbQ/WpHP2LlQ4BPzE9RQH+ANVj+?= =?us-ascii?Q?L+mMoUyIV1+rzzYhRsBbHmAnTywOTUTLZfzeXqzaUwnG6nuNNFY8rf7/qNsS?= =?us-ascii?Q?rT6hozA7P0gxKJvw0GoigueTWCWbE0qWk9AvjR5+vKgi8sXojiagGUTSZcKg?= =?us-ascii?Q?U2hNXHUEfiJuJ/xWcew4iGssGRw7vyCwxHdIuBqvbpLGNJvrqQHCbIYRi9nG?= =?us-ascii?Q?/T/HulGvqCz7A6yucOl158TxMIkgwVrLKZAV2V6HCNVkvcuxbscHdwzC9qlt?= =?us-ascii?Q?stVJdf/QH2AXAin4g/Ty/LFnLvdZOhoQ3JdCiegRnWMsM+16VvfcWEKDN95p?= =?us-ascii?Q?JJ4ePzfvw3VVhF7Fd2z6zsHRPXeamS7LCof4I7VSf0v+0RwwDYVBZxO8OwyU?= =?us-ascii?Q?zWnzES9JZD9jGxFyimq5M0jMd1zanDZv0XQmRAKGjn5rJYMUBAws5ecoHihY?= =?us-ascii?Q?XXUZ7mM1UVIcKTAWh7h2uFatAGiU1thS0UIcQ2AQ+BLLhdFSUIaFdZKZkBaX?= =?us-ascii?Q?T9enOiKspgfNQPPPCAfnHltqUIbwIHHdcxqodc7aftWbinF+NSA8ez8kVqXb?= =?us-ascii?Q?J3JKDtUJxi0ZRJzadGiPDHaXLey7yNFHz5VaWiV16IY8sRvxPBD2DY681s1O?= =?us-ascii?Q?CCQ53YyvDE+NmdDx/N+oX5jv1sry5ppwTBXGxJZJdOu092kgi+5jITyC2F2n?= =?us-ascii?Q?nDNMXFajDSCTYvf/JXmXuBhlXLfs+C061ZHE7S8a49DU0CiXXrlGgRcUQmB5?= =?us-ascii?Q?4XJprwTBFcugw3jZ7J8W+dvkfTf14OkK8OUfJKwN/Q+1eZ9cAzQuKDSUHWO+?= =?us-ascii?Q?TfG0mA+1y6WIZoY12RyNNzX3NEEkdjLiE2xCQP4RWWSwWIPXX7Tfi9rtOlwz?= =?us-ascii?Q?sEdiixhqcvd3IFxfZuWClgrDJz+V8y7SNz/nsZVquQmm+ID43MmaFRVJbmI0?= =?us-ascii?Q?C896AslEeNZ1WcPrTH8WIfgApc4W1TfMuQNEWNK2TQv7jQQSmpmVi2AosBLR?= =?us-ascii?Q?bJKCyYT0AmV8iJKz/EMSOzC?= X-Microsoft-Exchange-Diagnostics: 1; DB5PR07MB0935; 5:LQmkzP11DFGzeUboF7MePPw/B3ZgK1NjupdGZ31n/iP6+mRfLriJqk+24Y5HWneqRwcaoVkRAKbOXdoIqWfmxIk6NRMX87yRqfkCoPWyDgZDWUP2hoYj5WY6rZCpagL9PUPY1Rg15o7vzxgcef0X6A==; 24:AVrXDKoN5qRFQ8AedfSPoULSSw2UD5YqDc0O0OG0Dq3Jq8jKoypS7H/S2Ma3FUx9lnicvfyesY6wZcz6+OaQegMwvZDWhCS8t83WTXFxNjY=; 7:bS+Iz4DgEN/qiauYPlkPPAlLHAWDRIhKI6fTfsIBmaKLGx1xsJmhkNHaf/mvVvJmuganMGbuzPwz1l9poAwagwTnpJinKWEpXX04CvW25o50V7QrSMAKzQc/Kr7ohjR7wYsl+73uSPuJjFeIEV6SbvtrYEYemlNJ6fAZdT60eR3qvGK902hvRemN5GoUUQxa SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: darbyshire-bryant.me.uk X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 May 2016 09:05:38.3323 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR07MB0935 Subject: Re: [Cake] UDP floods and taking advantage of egress signalling at ingress X-BeenThere: cake@lists.bufferbloat.net X-Mailman-Version: 2.1.20 Precedence: list List-Id: Cake - FQ_codel the next generation List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 May 2016 09:05:41 -0000 --------------ms070107030705050206040105 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 06/05/16 08:38, Dave Taht wrote: > On Fri, May 6, 2016 at 12:29 AM, Kevin Darbyshire-Bryant > wrote: >> Hi All, >> >> My brain woke up with this idea rattling around in it this >> morning...obviously the subconscious has been busy. So here it is: >> >> Is there any way to use the egress drop signalling at ingress time to = drop >> stuff before it gets into the queue so then we don't have to drop it a= t >> egress? >> >> Something like: At enqueue if we've a matching flow check to see if th= at >> flow had been in egress 'fast dropping' state *and* know how much data= in >> terms of time it had to fast drop to get the queue back under the nomi= nal >> time threshold. If say it had to drop 10ms worth of packets to get ba= ck to >> the nominal 5ms threshold then it dropped 67% of the packets/data. I'= d like >> to think of that as an 'unresponsive flow'...hence could it be possibl= e to >> use that information at ingress time and in essence drop (some? 66%?) = of >> them there, we can also signal congestion to the stack at that point t= o >> (cake already does this signalling when getting to its buffer size lim= it) >> >> >> Probably a very silly idea. > No, actualy, I'd been thinking about the same thing myself for days. > :) I've always wanted a way to notify userspace that I was dropping > (the heck out of) something on egress to try and stuff it up on > ingress, or do something more intelligent like re-route the traffic > elsewhere. Hi Dave et al, There's a pretty rough sketch of the 'bright idea' (ha!) on https://github.com/kdarbyshirebryant/sch_cake/tree/ingressegresslink It doesn't even compile but there's a sort of framework there. Pointers (oh dear, unintended pun) assistance, encouragement, nudges welcome.=20 Laughter & derision less so but if I'm being dumb as opposed to ignorant for crying out loud tell me :-) I'm struggling (as you can probably tell) in codel5.h on how to obtain the number of bytes we 'fast dropped' in the 'do...while' loop. Kevin --------------ms070107030705050206040105 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgMFADCABgkqhkiG9w0BBwEAAKCC DYEwggY0MIIEHKADAgECAgEeMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNVBAYTAklMMRYwFAYD VQQKEw1TdGFydENvbSBMdGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0 ZSBTaWduaW5nMSkwJwYDVQQDEyBTdGFydENvbSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw0wNzEwMjQyMTAxNTVaFw0xNzEwMjQyMTAxNTVaMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UE ChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUg U2lnbmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0 ZSBDbGllbnQgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHCYPMzi3YGrEp pC4Tq5a+ijKDjKaIQZZVR63UbxIP6uq/I0fhCu+cQhoUfE6ERKKnu8zPf1Jwuk0tsvVCk6U9 b+0UjM0dLep3ZdE1gblK/1FwYT5Pipsu2yOMluLqwvsuz9/9f1+1PKHG/FaR/wpbfuIqu54q zHDYeqiUfsYzoVflR80DAC7hmJ+SmZnNTWyUGHJbBpA8Q89lGxahNvuryGaC/o2/ceD2uYDX 9U8Eg5DpIpGQdcbQeGarV04WgAUjjXX5r/2dabmtxWMZwhZna//jdiSyrrSMTGKkDiXm6/3/ 4ebfeZuCYKzN2P8O2F/Xe2AC/Y7zeEsnR7FOp+uXAgMBAAGjggGtMIIBqTAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUU3Ltkpzg2ssBXHx+ljVO8tS4UYIw HwYDVR0jBBgwFoAUTgvvGqRAW6UXaYcwyjRoQ9BBrvIwZgYIKwYBBQUHAQEEWjBYMCcGCCsG AQUFBzABhhtodHRwOi8vb2NzcC5zdGFydHNzbC5jb20vY2EwLQYIKwYBBQUHMAKGIWh0dHA6 Ly93d3cuc3RhcnRzc2wuY29tL3Nmc2NhLmNydDBbBgNVHR8EVDBSMCegJaAjhiFodHRwOi8v d3d3LnN0YXJ0c3NsLmNvbS9zZnNjYS5jcmwwJ6AloCOGIWh0dHA6Ly9jcmwuc3RhcnRzc2wu Y29tL3Nmc2NhLmNybDCBgAYDVR0gBHkwdzB1BgsrBgEEAYG1NwECATBmMC4GCCsGAQUFBwIB FiJodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9wb2xpY3kucGRmMDQGCCsGAQUFBwIBFihodHRw Oi8vd3d3LnN0YXJ0c3NsLmNvbS9pbnRlcm1lZGlhdGUucGRmMA0GCSqGSIb3DQEBBQUAA4IC AQAKgwh9eKssBly4Y4xerhy5I3dNoXHYfYa8PlVLL/qtXnkFgdtY1o95CfegFJTwqBBmf8py TUnFsukDFUI22zF5bVHzuJ+GxhnSqN2sD1qetbYwBYK2iyYA5Pg7Er1A+hKMIzEzcduRkIMm CeUTyMyikfbUFvIBivtvkR8ZFAk22BZy+pJfAoedO61HTz4qSfQoCRcLN5A0t4DkuVhTMXIz uQ8CnykhExD6x4e6ebIbrjZLb7L+ocR0y4YjCl/Pd4MXU91y0vTipgr/O75CDUHDRHCCKBVm z/Rzkc/b970MEeHt5LC3NiWTgBSvrLEuVzBKM586YoRD9Dy3OHQgWI270g+5MYA8GfgI/EPT 5G7xPbCDz+zjdH89PeR3U4So4lSXur6H6vp+m9TQXPF3a0LwZrp8MQ+Z77U1uL7TelWO5lAp sbAonrqASfTpaprFVkL4nyGH+NHST2ZJPWIBk81i6Vw0ny0qZW2Niy/QvVNKbb43A43ny076 khXO7cNbBIRdJ/6qQNq9Bqb5C0Q5nEsFcj75oxQRqlKf6TcvGbjxkJh8BYtv9ePsXklAxtm8 J7GCUBthHSQgepbkOexhJ0wP8imUkyiPHQ0GvEnd83129fZjoEhdGwXV27ioRKbj/cIq7JRX un0NbeY+UdMYu9jGfIpDLtUUGSgsg2zMGs5R4jCCB0UwggYtoAMCAQICAw5ySjANBgkqhkiG 9w0BAQsFADCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzApBgNV BAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNVBAMTL1N0YXJ0 Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENBMB4XDTE1MDYyMDIw MzA1MloXDTE2MDYyMDE0MjY0N1owVjEmMCQGA1UEAwwda2V2aW5AZGFyYnlzaGlyZS1icnlh bnQubWUudWsxLDAqBgkqhkiG9w0BCQEWHWtldmluQGRhcmJ5c2hpcmUtYnJ5YW50Lm1lLnVr MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAugCNtDhytCJ9HOfenUHr/vUGUECv PL1IJXgHMl4cIJmwgLOkXhIcTMxHnX+kFweqvT+eDWv1hzA9yMWhvjLFC4eLoFaV0xiAat8O XQ7t3MwKY5DW0mB1dOnjiFIcc/XMwyYI4KfEGnFMJQkzon0rDVpkl/Q1f/hu1sELO7Zc6TFL wuuDuiP7S73zrz50TRoq0+Ob3x0uOMW2uVwVzf6NLwHgBE2LFleMXblyUMx0IlIcLan2nWiI Vsa3XYd+C6KAGGwlmO4VAZ25KuX7hkj8f82lSapvtKTtvrSoDghXlHH2JXiIQX+Sn0UgOmbX 1KyOe9vN7WzQ+tpPRzpFRffnnnp1VQye3wVRPBumjDxQSFTOhUtslnvbefUQSPw6p5w9ZiXI GJICLkX/MkYN/TwGCvuUG2PxBybSR1A2I5ap+VI/zGSG3XGVEA69SOZQyD+8YjJZfaY2nCu+ DuM64JrJUi2CvX6fwcdHNschJNrrfetpnrx3JrGnG9o+pWuUG1phBg+KKN2bhrdzY79qm7ha 86EMKSUOn5nBdGY3YxdXq/naoUQeOCUV2JMFGOulu7sKpiWcz7HVFacXjd9ebisVLv+jOwll z14BWRb87s1+LBEJn/Ybn3ekhtgyEAhB4kgj0scl4hI8xCU6zrZyDnbXmxSvDXbClZA0PACt f/jhGvUCAwEAAaOCAuMwggLfMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdJQQWMBQG CCsGAQUFBwMCBggrBgEFBQcDBDAdBgNVHQ4EFgQULkW2CpDiQpRNumQ7wdspjFfgX+AwHwYD VR0jBBgwFoAUU3Ltkpzg2ssBXHx+ljVO8tS4UYIwKAYDVR0RBCEwH4Eda2V2aW5AZGFyYnlz aGlyZS1icnlhbnQubWUudWswggFMBgNVHSAEggFDMIIBPzCCATsGCysGAQQBgbU3AQIDMIIB KjAuBggrBgEFBQcCARYiaHR0cDovL3d3dy5zdGFydHNzbC5jb20vcG9saWN5LnBkZjCB9wYI KwYBBQUHAgIwgeowJxYgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwAwIBARqB vlRoaXMgY2VydGlmaWNhdGUgd2FzIGlzc3VlZCBhY2NvcmRpbmcgdG8gdGhlIENsYXNzIDEg VmFsaWRhdGlvbiByZXF1aXJlbWVudHMgb2YgdGhlIFN0YXJ0Q29tIENBIHBvbGljeSwgcmVs aWFuY2Ugb25seSBmb3IgdGhlIGludGVuZGVkIHB1cnBvc2UgaW4gY29tcGxpYW5jZSBvZiB0 aGUgcmVseWluZyBwYXJ0eSBvYmxpZ2F0aW9ucy4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDov L2NybC5zdGFydHNzbC5jb20vY3J0dTEtY3JsLmNybDCBjgYIKwYBBQUHAQEEgYEwfzA5Bggr BgEFBQcwAYYtaHR0cDovL29jc3Auc3RhcnRzc2wuY29tL3N1Yi9jbGFzczEvY2xpZW50L2Nh MEIGCCsGAQUFBzAChjZodHRwOi8vYWlhLnN0YXJ0c3NsLmNvbS9jZXJ0cy9zdWIuY2xhc3Mx LmNsaWVudC5jYS5jcnQwIwYDVR0SBBwwGoYYaHR0cDovL3d3dy5zdGFydHNzbC5jb20vMA0G CSqGSIb3DQEBCwUAA4IBAQBicQWe98eF/o09TXFsExc+WSyYjt3oSnXyocLzXQp82CQhIg21 5RqNZ1e+hsO7tq8S6hdItUDbKpecpIV59+57ke1zVl2slTRIT19fhYINHH78rVVRPzuHoiDt MXnGrp9hbq3Cz8P4mm8INKDiYK46kyplRAQ3ZMouPG1lsnDzgQAvbCj74H8yAp7fK8if6cxs 28BCUmdP8D3c6M1ffdNNaqNT+4Z3mtOujXXg7zOfmXN0Zg/mEtZ0NrWE2uICGdWjTv9KZiI7 fi4hk2CRpCL63qzmu6BwtcgtwhgYYtuAk2N43+SiyDkyLKGAcjEor3t5f9HivN29E0F0MXTH 1OdgMYIFDTCCBQkCAQEwgZQwgYwxCzAJBgNVBAYTAklMMRYwFAYDVQQKEw1TdGFydENvbSBM dGQuMSswKQYDVQQLEyJTZWN1cmUgRGlnaXRhbCBDZXJ0aWZpY2F0ZSBTaWduaW5nMTgwNgYD VQQDEy9TdGFydENvbSBDbGFzcyAxIFByaW1hcnkgSW50ZXJtZWRpYXRlIENsaWVudCBDQQID DnJKMA0GCWCGSAFlAwQCAwUAoIICSTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqG SIb3DQEJBTEPFw0xNjA1MTAwOTA1MzVaME8GCSqGSIb3DQEJBDFCBEA2GiY5cfcjIkEuFQ+7 zWHI8YtnBCNUMG9YGJCfMqda83ShhMmCzxEzM5ZO3CTrjuTl2UaeQ+eF+S70n5qeZA6mMGwG CSqGSIb3DQEJDzFfMF0wCwYJYIZIAWUDBAEqMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzAO BggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgw gaUGCSsGAQQBgjcQBDGBlzCBlDCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29t IEx0ZC4xKzApBgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2 BgNVBAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgQ2xpZW50IENB AgMOckowgacGCyqGSIb3DQEJEAILMYGXoIGUMIGMMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln bmluZzE4MDYGA1UEAxMvU3RhcnRDb20gQ2xhc3MgMSBQcmltYXJ5IEludGVybWVkaWF0ZSBD bGllbnQgQ0ECAw5ySjANBgkqhkiG9w0BAQEFAASCAgB1x2qRITtAabUv75lGzch8zRJxxqjq uFVxPWMQ/VzFELTlxI/6R+/pMf88j8tzQO6/3zbOp73JWhZepbPED5V0WcXu8Fy7JhOI+GPP KNjmDQizlT34jjuUAJnc3e96lYcE3dygG7cwDr073S2HE5i2VggU9Hk90hxzz+0zmLxYzS1Y WPWyMDDtezYIxAJy/OTBfCR6RcyyXVppkXcWQ9vqMK2ktr7nJTGQJTrIP7BNJuW/JVCRHxa9 gTs1lDjSI/dZjs0Fm8ixWLO4Q6b2eLa760J2PkMcynkU+6etM+VlB5OyuD768OwSwNyrivv6 r8gIJKUNHo5lyIDqRjdYelYmJwjGfj/zkpzCLGGObh/+VLlaqAiMqRrfmQXakPP1uOEsef0d 9MNib6CdWQU+ckSpllCaQePjJIFQ/Uu4VPhW3KU9B9RQu0E7U6XhHmwY8AkByZrcF1OatYnd LyLtJZARWmn23liUOyHFXavd/9078XNFOcJkzvA80AVdp3Hqod2GXYsfqENwVNKmtyL739W5 +O5So8fL/2oUNhfHE5+vjVr7fffPuqt4S7OoWVfinLyWPlL15QpiJnnn4/KDd8OJiAW7Fe+E TlgZJT8vEUOSrqVcEc86cCfQMhg8VFGDDaEYY5fjhre3q9Yv6m8vLMV4KdcQ2JGjb+ds847x u3tHfgAAAAAAAA== --------------ms070107030705050206040105--