From mboxrd@z Thu Jan 1 00:00:00 1970 From: Smilen Dimitrov Subject: Re: Questions about virtual ALSA driver (dummy), PortAudio and full-duplex drops (full-duplex: latency.c) Date: Fri, 13 Sep 2013 08:23:15 +0200 Message-ID: <5232AF53.2000104@imi.aau.dk> References: <51EF41C8.2040701@imi.aau.dk> <201307241403.28873.gineera@aspect135.co.uk> <51F07150.1060004@imi.aau.dk> <51F0E3C5.4020400@ladisch.de> Reply-To: ALSA Development Mailing List Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asmtp.www1.dk (asmtp.www1.dk [91.144.243.214]) by alsa0.perex.cz (Postfix) with ESMTP id 4AB882607C8 for ; Fri, 13 Sep 2013 08:23:21 +0200 (CEST) Received: from [31.193.237.139] (helo=cp6.danhost.dk) by asmtp.www1.dk with esmtps (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.80 (FreeBSD)) (envelope-from ) id 1VKMmm-0001wK-VA for alsa-devel@alsa-project.org; Fri, 13 Sep 2013 08:23:21 +0200 Received: from [62.199.57.204] (port=61901 helo=[192.168.1.12]) by cp6.danhost.dk with esmtpa (Exim 4.80.1) (envelope-from ) id 1VKMmm-0002Jk-Tp for alsa-devel@alsa-project.org; Fri, 13 Sep 2013 08:23:21 +0200 In-Reply-To: <51F0E3C5.4020400@ladisch.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org SGkgYWxsLAoKU2luY2UgdGhlIFBvcnRBdWRpbyBmdWxsLWR1cGxleCBwcm9ibGVtIEkgaGF2ZSwg ZGVwZW5kcyBvbiBib3RoIHRoZSBjYXB0dXJlIGFuZCBwbGF5YmFjayBkaXJlY3Rpb24gLSBJIHRo b3VnaHQgSSdkIGFsc28gbG9vayBpbnRvIGZ1bGwtZHVwbGV4LCBhdCBsZWFzdCBmcm9tIHRoZSBw ZXJzcGVjdGl2ZSBvZiBBTFNBLCBhbmQgcG9zdCBhIHdyaXRldXAgb24gdGhhdC4gVGhpcyBpcyBh Z2FpbiBkb25lIGJ5IGNvbXBhcmluZyB0aGUgYGhkYV9pbnRlbGAgYW5kIGBkdW1teWAgQUxTQSBk cml2ZXJzLCBidXQgcmFuIHVuZGVyIGEgZGlmZmVyZW50IHNldCBvZiB1c2Vyc3BhY2UgcHJvZ3Jh bXMuIEV2ZW4gdGhvdWdoIEknbGwgaGF2ZSBzcGVjaWZpYyBxdWVzdGlvbnMsIHBsZWFzZSBsZXQg bWUga25vdyBpZiBhbnl0aGluZyBwb2tlcyB5b3VyIGV5ZSBhcyB3cm9uZyBpbiB0aGlzIGVtYWls OyBhbmQgYXMgYWx3YXlzLCBhcG9sb2dpZXMgZm9yIHRoZSB2ZXJib3NpdHkuCgoKRmlyc3Qgb2Yg YWxsLCBJIHdvbmRlcmVkIGlmIHRoZXJlIGlzIGEgInBsYWluIEFMU0EiIHByb2dyYW0sIHdoaWNo IHdvdWxkIGJlIGFuIGVxdWl2YWxlbnQgdG8gUG9ydEF1ZGlvJ3MgYHBhdGVzdChfZHVwbGV4KV93 aXJlLmNgLCBhbmQgY291bGQgYmUgdXNlZCB0byBkbyBhIGZ1bGwtZHVwbGV4IHRlc3QuIEkgbmV2 ZXIgd291bGQgaGF2ZSBndWVzc2VkIGJ5IHRoZSBuYW1lIGFsb25lLCBidXQgaXQgc2VlbXMgdGhl cmUgaXMgLSBpbiBmb3JtIG9mIGBhbHNhLWxpYmAncyBgdGVzdC9sYXRlbmN5LmNgLiBJIGhhZCBx dWl0ZSBhIGhhcmQgdGltZSBmaWd1cmluZyBvdXQgZXhhY3RseSBob3cgdGhpcyBgbGF0ZW5jeS5j YCBpcyBzdXBwb3NlZCB0byBiZWhhdmUgLSBzbyBhZnRlciBwbGF5aW5nIHdpdGggaXQgYSBiaXQs IEkgdG9vayB0aGUgbGliZXJ0eSB0byBwb3N0IGEgcGFnZSBhYm91dCBpdCBvbiB0aGUgd2lraToK CiAgICBodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvbWFpbi9pbmRleC5waHAvVGVzdF9sYXRl bmN5LmMKCi4uLiB3aGljaCBhbHNvIGluY2x1ZGVzIHNvbWUgdmFsdWFibGUgc25pcHBldHMgZnJv bSBgYWxzYS1kZXZlbGAgZGlzY3Vzc2lvbnMgLSBob3BlIHRoYXQncyBPSy4gV2hpbGUgdGhlIHNu aXBwZXRzIGdvIGEgbG9uZyB3YXkgaW4gZXhwbGFpbmluZyBhIGxvdCAoc3VjaCBhcyB0aGUgbGF0 ZW5jeSBiZWluZyB2aXNpYmxlIGFzIHRoZSBwbGF5YmFjayBzdHJlYW0gYmVpbmcgYSBudW1iZXIg b2YgZnJhbWVzIGFoZWFkIG9mIHRoZSBjYXB0dXJlIG9uZSksIHdoYXQgY29uZnVzZXMgbWUgaXMg dGhpczoKCiogSSBzcGVjaWZ5IGAtbSAxMjggLU0gMTI4YCBhcyBhcmd1bWVudHMsIHdoaWNoIGZv cmNlcyBsYXRlbmN5PTEyOCAoZnJhbWVzKSBpbiB0aGUgY29kZQoqIFRoZSBwcm9ncmFtIGNvbmZp cm1zIHRoYXQsIHNheWluZzogIlRyeWluZyBsYXRlbmN5IDEyOCBmcmFtZXMgLi4uIgoqIEJlZm9y ZSB0aGUgcmVhZC93cml0ZSBsb29wLCBgd3JpdGVidWYocGhhbmRsZSwgYnVmZmVyLCBsYXRlbmN5 IC4uLilgIGlzIGNhbGxlZCAqKnR3aWNlKiosIGFuZCB5ZXQ6CioqIHRoZSB2ZXJ5IGZpcnN0IGBh cHBsX3B0cmAgb2J0YWluZWQgZnJvbSBhIHBsYXliYWNrIC5wb2ludGVyIGlzIDEyOCAoaW4gbW9z dCBvZiBteSBjYXB0dXJlcykKKiogQXQgIlN1Y2Nlc3MiIGVuZCwgd2UgbWF5IGhhdmUgUGxheWJh Y2s6ICoqKiBmcmFtZXMgPSA0NDI4OCAqKiogYW5kIENhcHR1cmU6ICoqKiBmcmFtZXMgPSA0NDE2 MCAqKiogKGxpa2UgaW4gdGhlIG91dHB1dCB1bmRlciAjVXNhZ2Ugb24gdGhlIHdpa2kgcGFnZSk7 IGFuZCB0aGVpciBkaWZmZXJlbmNlIGlzIDQ0Mjg4LTQ0MTYwID0gMTI4CgpTbyBteSBxdWVzdGlv biBpczogaG93IGlzIGl0IHBvc3NpYmxlIHRvIGRvIGEgd3JpdGUgb2YgMTI4IGZyYW1lcyAqdHdp Y2UqOyBhbmQgeWV0IHN0aWxsIGdldCBib3RoIHRoZSBmaXJzdCBgYXBwbF9wdHJgLCBhbmQgcC9j IHN0cmVhbSBkaWZmZXJlbmNlIHRvIGJlIDEyOD8gU2hvdWxkbid0IGl0IGJlIDIqMTI4ID0gMjU2 LCBpZiB3ZSBzdGFydGVkIHdpdGggd3JpdGluZyAxMjggZnJhbWVzIHR3aWNlPwoKClRoZW4sIEkg d29uZGVyZWQgaWYgdGhlcmUgaXMgYW4gQUxTQSBlcXVpdmFsZW50IHRvIFBvcnRBdWRpbydzIHVz ZSBvZiBhIHNpbmdsZS8id2lyZSIgY2FsbGJhY2sgdG8gc3BlY2lmeSAicHJvcGVyIi8iaGFyZCIg ZnVsbC1kdXBsZXggb3BlcmF0aW9uLiBUbyBtZSwgaXQgc2VlbXMgdGhhdCBpdCBpcyB0aGUgY29t bWFuZCBgc25kX3BjbV9saW5rYCwgZm9yIHdoaWNoIHRoZSBkb2NzIHNheTogIlRoZSB0d28gUENN cyB3aWxsIHN0YXJ0L3N0b3AvcHJlcGFyZSBpbiBzeW5jIi4gSXMgdGhpcyB3aGF0IGRlZmluZXMg YSBwcm9wZXIgZnVsbC1kdXBsZXggb3BlcmF0aW9uIC0gdGhhdCB0aGUgcGxheWJhY2sgYW5kIGNh cHR1cmUgc3RyZWFtcyBhcmUgcnVubmluZyBpbiBzeW5jPyBBIGNvbmZpcm1hdGlvbiBmb3IgdGhp cyBjYW4gYmUgc2VlbiB0byBjb21lIGZyb20gcG9ydGF1ZGlvLXYxOS9zcmMvaG9zdGFwaS9hbHNh L3BhX2xpbnV4X2Fsc2EuYzoKCgogICAgLyogdGhpcyB3aWxsIGNhdXNlIHRoZSB0d28gc3RyZWFt cyB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0L3N0b3AvcHJlcGFyZSBpbiBzeW5jLgogICAgICogV2Ug b25seSBuZWVkIHRvIGV4ZWN1dGUgdGhlc2Ugb3BlcmF0aW9ucyBvbiBvbmUgb2YgdGhlIHBhaXIu CiAgICAgKiBBOiBXZSBkb24ndCB3YW50IHRvIGRvIHRoaXMgb24gYSBibG9ja2luZyBzdHJlYW0u CiAgICAgKi8KICAgIGlmKCBzZWxmLT5jYWxsYmFja01vZGUgJiYgc2VsZi0+Y2FwdHVyZS5wY20g JiYgc2VsZi0+cGxheWJhY2sucGNtICkKICAgIHsKICAgICAgICBpbnQgZXJyID0gc25kX3BjbV9s aW5rKCBzZWxmLT5jYXB0dXJlLnBjbSwgc2VsZi0+cGxheWJhY2sucGNtICk7CiAgICAgICAgaWYo IGVyciA9PSAwICkKICAgICAgICAgICAgc2VsZi0+cGNtc1N5bmNlZCA9IDE7CiAgICAgICAgZWxz ZQogICAgICAgICAgICBQQV9ERUJVRygoICIlczogVW5hYmxlIHRvIHN5bmMgcGNtczogJXNcbiIs IF9fRlVOQ1RJT05fXywgc25kX3N0cmVycm9yKCBlcnIgKSApKTsKICAgIH0KCi4uLiB3aGVyZSB3 ZSBoYXZlIHRoZSBvbmx5IGluc3RhbmNlIG9mIGBzbmRfcGNtX2xpbmtgLCBiZWluZyB1c2VkIG9u bHkgd2hlbiBjYXB0dXJlIGFuZCBwbGF5YmFjayBzdHJlYW1zIGJvdGggZXhpc3QgaW4gdGhlIHNh bWUgY29udGV4dCAoYmVzaWRlcyB0aGUgY2FsbGJhY2tNb2RlKSAtIHdoaWNoLCBJIGdhdGhlciwg aXMgb25seSBwb3NzaWJsZSB3aGVuIGEgc2luZ2xlLyJ3aXJlIiBjYWxsYmFjayBpcyB1c2VkOyBp cyB0aGlzIGNvcnJlY3Q/IEJ1dCB0aGVuLCB3aHkgd291bGRuJ3Qgd2Ugd2FudCB0byBkbyB0aGF0 IG9uIGEgYmxvY2tpbmcgc3RyZWFtPyBBbHNvLCB3b3VsZCB0aGF0ICJibG9ja2luZyIgcmVmZXIg dG8gYWN0dWFsIGJsb2NraW5nIGZpbGUgZGVzY3JpcHRvcnMgb25seSAtIG9yIGNhbiBpdCBhbHNv IGJlIHVuZGVyc3Rvb2QgdG8gaW5jbHVkZSBwb2xsaW5nIHdhaXRzIGFzIHdlbGw/CgoKQW55d2F5 cywgSSBoYXZlIGFnYWluIHBvc3RlZCB0aGUgc2NyaXB0cyBmb3IsIGFuZCBkZWJ1ZyBsb2cgYWNx dWlzaXRpb25zICsgdmlzdWFsaXNhdGlvbnMgb2YsIHRoZSBgbGF0ZW5jeWAgdGVzdHMgaW46Cgog ICAgaHR0cDovL3NkYWF1YmNrcC5zb3VyY2Vmb3JnZS5uZXQvcG9zdC9hbHNhLWNhcHR0ZXN0LwoK VGhlcmUgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGBsYXRlbmN5LmNgIHVzZWQgdGhlcmUsIGNh bGxlZCBgbGF0ZW5jeS1tb2QuY2A7IHRoZSBkcml2ZXJzIGFyZSBzdXBwb3NlZCB0byBoYXZlIGB0 cmFjZV9wcmludGtgcyBhcyBwZXIgYGxhdGVuY3ktZHJ2LnBhdGNoYDsgdGhlIHJlbGF0ZWQgc2Ny aXB0cyBhcmUgYHJ1bi1hbHNhLWxhdHRlc3Quc2hgLCBgdHJhY2VGR0xhdExvZ2ZpbGUyQ3N2LnB5 YCwgYHRyYWNlRkdMYXRMb2dHcmFwaC5ncGAgYW5kIGBsYXQtYW5pbS5wbGAuIFRoZSBkZWJ1ZyBs b2dzIGFyZSBpbiBgY2FwdHVyZXMtYWxzYS1jYXB0bGF0LnRhci54emAsIGFuZCB0aGVpciBQREYg cGxvdHMgYXJlIGluIHRoZSBgX2NhcHBpY3MwNS9gIHN1YmZvbGRlci4gUGxlYXNlIHNlZSB0aGUg ZW5kIG9mIHRoZSB1cGRhdGVkIGBSZWFkbWVgLCBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIGZvciBt b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlLgoKClRvIGJlZ2luIHdpdGgsIEkgdHJpZWQgYWNx dWlyaW5nIHRoZSBvcGVyYXRpb24gb2YgYGhkYS1pbnRlbGAgdW5kZXIgYGxhdGVuY3ktbW9kLmNg IHdpdGggdmFyaW91cyBwYXJhbWV0ZXJzLCB0byBzZWUgaG93IGl0IHdvdWxkIGJlaGF2ZSAtIHRo ZXNlIHBhcmFtZXRlcnMgYXJlIGVuY29kZWQgaW4gdGhlIHJlc3BlY3RpdmUgZmlsZS9kaXJlY3Rv cnkgbmFtZXMuIEZpcnN0LCBoZXJlIGlzIGBoZGEtaW50ZWxgIGRyaXZlciAoYW5kIGNhcmQpLCB1 bmRlciBgbGF0ZW5jeS1tb2QuY2Agd2l0aG91dCBwb2xsIChgbnBgKSwgd2l0aG91dCBSb3VuZCBS b2JpbiBzY2hlZHVsaW5nIChgbnNgKSBhbmQgd2l0aG91dCBibG9ja2luZyAoYG5iYCksIHdpdGgg bGF0ZW5jeSAxMjggZnJhbWVzLCBhbmQgZHVyYXRpb24gb2YgdGVzdCAyNTYgZnJhbWVzOgoKICAg IGh0dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0bGF0LWhkYS0x MjgtMjU2LW5wLTAtbnMtbmIuZ2lmCgooKCBOb3RlIHRoYXQgYWxsIG9mIHRoZSBwcm92aWRlZCBh Y3F1aXNpdGlvbnMgYXJlIHdpdGhvdXQgUm91bmQgUm9iaW4gc2NoZWR1bGluZyAoYG5zYCksIHdp dGggbGF0ZW5jeSAxMjggZnJhbWVzLCBhbmQgZHVyYXRpb24gb2YgdGVzdCAyNTYgZnJhbWVzLiBB bHNvIG1vc3Qgb2YgdGhlIGFjcXVpc2l0aW9ucyByZXByZXNlbnQgc3VjY2Vzc2Z1bGx5IGNvbXBs ZXRlZCBgbGF0ZW5jeWAgcnVucyAtIGV4Y2VwdCBmb3IgdGhlIGxhc3QgdHdvLCB3aGljaCBhcmUg aW5kaWNhdGVkIHdpdGggYW4gYC1mYCBpbiB0aGVpciBuYW1lcyApKQoKVGhlIC5naWYsIGFzIHVz dWFsLCBpcyBub3QgdmVyeSBsZWdpYmxlIC0gYnV0IHlvdSBjYW4gdmlldyB0aGUgUERGcyBvZiB0 aGUgaW5kaXZpZHVhbCBmcmFtZXMgZ2l2ZW4gaW4gdGhlIGBfY2FwcGljczA1YCBzdWJmb2xkZXIu IFdoYXQgaXMgY2xlYXIgdGhvdWdoLCBpcyB0aGF0IC5wb2ludGVyIGlzIGJlaW5nIGNhbGxlZCB2 ZXJ5IGZyZXF1ZW50bHkgLSBhbmQgdGhlIHJlYXNvbiBmb3IgdGhpcywgYXJlIHRoZSB2ZXJ5IGZy ZXF1ZW50IGNhbGxzIHRvIGBzbmRfcGNtX3JlYWRpYDsgd2hpY2ggYXJlIGZyZXF1ZW50IGJlY2F1 c2UgbmVpdGhlciBibG9ja2luZywgbm9yIHBvbGxpbmcgaXMgdXNlZCAoYW5kIHNvIGByZWFkYnVm YCBpbiBgbGF0ZW5jeS1tb2QuY2Agc3BpbnMgaW4gaXRzIGxvb3AgYXMgZmFzdCBhcyBpdCBjYW4p LgoKT25jZSB3ZSBzdGFydCB1c2luZyBwb2xsaW5nIChgeXBgKSB3aXRoIGBsYXRlbmN5YCwgdGhl IHNpdHVhdGlvbiBzZXR0bGVzIGRvd247IG5vdGUgdGhhdCAicG9sbGluZyIgaW4gYGxhdGVuY3ku Y2AgdXNlcyBhIGBzbmRfcGNtX3dhaXRgIHRvIHdhaXQgYSBnaXZlbiB0aW1lIChpbiBtaWxsaXNl Y29uZHMpIG9uIHRoZSBjYXB0dXJlIGZpbGUgaGFuZGxlLiBBcyBJIGhhZCBzb21lIHByb2JsZW1z IHdpdGggcG9sbCBhdCBmaXJzdCwgSSB0aG91Z2h0IGl0IHdhcyBkdWUgdG8gdGhlIHBvbGwgd2Fp dGluZyB0aW1lLCB3aGljaCB3YXMgZml4ZWQgdG8gMTAwMCBtcyBpbiB0aGUgb3JpZ2luYWwgYGxh dGVuY3kuY2AgLSBzbyBJIGFkZGVkIGEgYC0tcG9sbHRpbWVgIG9wdGlvbiBpbiBgbGF0ZW5jeS1t b2QuY2AuIEFmdGVyIHNvbWUgcmVib290cywgSSBjb3VsZG4ndCByZXByb2R1Y2UgdGhhdCBwcm9i bGVtIGFueSBtb3JlLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgb3BlcmF0aW9uIHdpdGggcG9sbGlu ZyBpcyBtb3JlLWxlc3MgdGhlIHNhbWUgd2l0aCAxIG1zIHdhaXQgdGltZSB2cy4gMTAwMCBtcyB3 YWl0IHRpbWU6CgogICAgaHR0cDovL3NkYWF1YmNrcC5zZi5uZXQvcG9zdC9hbHNhLWNhcHR0ZXN0 L2NhcHRsYXQtaGRhLTEyOC0yNTYteXAtMS1ucy1uYi5naWYKICAgIGh0dHA6Ly9zZGFhdWJja3Au c2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0bGF0LWhkYS0xMjgtMjU2LXlwLTEwMDAtbnMt bmIuZ2lmCgpGaW5hbGx5LCBJIHRyaWVkIHVzaW5nIGJsb2NraW5nIChgeWJgKSB3aXRoIGBsYXRl bmN5YCBpbnN0ZWFkIC0gYW5kIGl0IHR1cm5zIG91dCwgaXQgZG9lc24ndCBsb29rIGFsbCB0aGF0 IG11Y2ggZGlmZmVyZW50IGZyb20gcG9sbGluZyB3aXRoIGBoZGEtaW50ZWxgOgoKICAgIGh0dHA6 Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0bGF0LWhkYS0xMjgtMjU2 LW5wLTAtbnMteWIuZ2lmCgouLi4gYW5kIHNvIEkgZmluYWxseSBzZXR0bGVkIG9uIHVzaW5nIHRo ZXNlIGBsYXRlbmN5YCBzZXR0aW5ncyAoMTI4LTI1Ni1ucC0wLW5zLXliKSBmb3IgbGF0ZXIgYWNx dWlzaXRpb24gb2YgYGR1bW15YCBvcGVyYXRpb24gYXMgd2VsbC4gQW55d2F5cywgaW4gdGVybXMg b2YgYGhkYS1pbnRlbGAsIEkgZ2F0aGVyIHRoZSBmb2xsb3dpbmcgY2FuIGJlIHNhaWQgZ2VuZXJh bGx5IGZvciB0aGUgb3BlcmF0aW9uIHVuZGVyIGBsYXRlbmN5KC1tb2QpLmNgOgoKKiBUaGUgb3Bl cmF0aW9uIHN0YXJ0cyB3aXRoIHR3byBvciB0aHJlZSB2aW9sZXQgIkNhcmRJUlE/InMsIHNwYW5u aW5nIGFwcHJveCBhIHF1YXJ0ZXIgb2YgdGhlIGJ1ZmZlciBwZXJpb2QgKHRoZSB0aW1lIGNvcnJl c3BvbmRpbmcgdG8gcGVyaW9kX3NpemUpCioqICh2aW9sZXQgIkNhcmRJUlE/IiBtZWFucyB0aGF0 IGFuIGF1ZGlvIGRyaXZlciBpbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbiwgaGVyZSBgYXp4X2lu dGVycnVwdGAsIGhhcyBiZWVuIGRldGVjdGVkIC0gYnV0IG5vIC5wb2ludGVyIHdhcyBjYWxsZWQg aW4gaXRzIGNvbnRleHQpCiogQXBwcm94IGEgd2hvbGUgYnVmZmVyIHBlcmlvZCBsYXRlciBmcm9t IHRoZSB2ZXJ5IGZpcnN0IHZpb2xldCAiQ2FyZElSUT8iLCB0aGUgZmlyc3QgInByb3BlciIgIkNh cmRJUlE/IiBpcyBmaXJlZCwgYW5kIGl0IGlzIGNhcHR1cmUgKGJsdWUpCiogQXBwcm94IGEgcXVh cnRlciBvZiB0aGUgYnVmZmVyIHBlcmlvZCBsYXRlciBmcm9tIHRoZSBmaXJzdCBjYXB0dXJlICJD YXJkSVJRPyIsIHRoZSBmaXJzdCBwbGF5YmFjayAocmVkKSAiQ2FyZElSUT8iIGZpcmVzCiogVGhl IGNhcHR1cmUvcGxheWJhY2sgIkNhcmRJUlE/IiB0aGVuIHJlcGVhdCBhZnRlciBhIGJ1ZmZlciBw ZXJpb2QgcmVzcGVjdGl2ZWx5IChrZWVwaW5nIHRoZSBxdWFydGVyIGJ1ZmZlciBwZXJpb2QgcGhh c2UgYmV0d2VlbiB0aGVtKSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwcm9ncmFtCgpUaGlzIHNlZW1z IHRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiB0aGUgc2VwYXJhdGUgY2FwdHVyZSBhbmQgcGxheWJh Y2sgIm1vbnRhZ2UicyBmb3IgYGhkYS1pbnRlbGAsIGRpc2N1c3NlZCBlYXJsaWVyIGluIHRoZSB0 aHJlYWQuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBmb3IgbWUgaGVyZSBpczogZXZlbiBpZiB0aGUg YGxhdGVuY3lgIHByb2dyYW0gc3RhcnRzIGJ5IGRvaW5nIHR3byBgc25kX3BjbV93cml0ZWlgcyAt IHRoZSBkcml2ZXIgb3BlcmF0aW9uIHN0aWxsIHN0YXJ0cyB3aXRoIGEgY2FwdHVyZSBJUlEsIGFu ZCB0aGUgcGxheWJhY2sgc2VyaWVzIGlzIGRlbGF5ZWQgaW4gcmVzcGVjdCB0byBjYXB0dXJlIGZv ciBhIHF1YXJ0ZXIgYnVmZmVyIHBlcmlvZDsgaXMgdGhpcyBjb3JyZWN0bHkgc3VybWlzZWQ/CgoK Rm9yIGEgbW9yZSBkZXRhaWxlZCBhbmFseXNpcywgdGhlIGBsYXQtYW5pbS5wbGAgc2NyaXB0IGNh biBiZSB1c2VkIHRvIHJlbmRlciBhIHNpbmdsZSBkZWJ1ZyBhY3F1aXNpdGlvbiBhcyBhbiBhbmlt YXRpb247IGhlcmUgaXMgb25lIHN1Y2ggZXhhbXBsZSBmb3IgYGhkYS1pbnRlbGAgdW5kZXIgYGxh dGVuY3lgOgoKICAgIGh0dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9j YXB0bGF0LTIwMTMtMDktMDItMjMtMzAtMzgtaGRhLTEyOC0yNTYtbnAtMC1ucy15Yi5tcGcKCi4u LiB0cnkgaXQgd2l0aDoKCiAgICB2bGMgLS1yZXBlYXQgLS1yYXRlIDMuMCBjYXB0bGF0LTIwMTMt MDktMDItMjMtMzAtMzgtaGRhLTEyOC0yNTYtbnAtMC1ucy15Yi5tcGcKCkFnYWluLCB0aGUgc3Vw cGxpZWQgYC5tcGdgcyBhcmUgbm90IHZlcnkgbGVnaWJsZSAtIGhvd2V2ZXIsIHlvdSBjYW4gdXNl IGBsYXQtYW5pbS5wbGAgYW5kIHRoZSBwcm92aWRlZCBkZWJ1ZyBsb2dzIHRvIGdlbmVyYXRlIHRo ZSBoaWdoLXJlcyBhbmltYXRpb24gZnJhbWVzIChhbmQgdmlkZW9zKSB5b3Vyc2VsZjsgYWx0aG91 Z2ggbm90ZSB0aGF0IHJlbmRlcmluZyBmcmFtZXMgZnJvbSBhIGRlYnVnIGFjcXVpc2l0aW9uIGxp a2UgdGhlIGFib3ZlIHRha2VzIGFib3V0IGFuIGhvdXIgb24gbXkgbWFjaGluZSAoc2VlIHRoZSBg UmVhZG1lYCBmb3IgbW9yZSkuIEJ5IGRlZmF1bHQsIGFuIGFuaW1hdGlvbiBmcmFtZSBpcyA4MDB4 NjAwLCBhbmQgaW4gdGhhdCBmb3JtYXQgbG9va3MgbGlrZSB0aGlzOgoKICAgIGh0dHA6Ly9zZGFh dWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0bGF0LTIwMTMtMDktMTEtMDAtMzYt MTctZHVNLTEyOC0yNTYtbnAtMC1ucy15Yl9mcmFtZV8wMDI2OS5wbmcKCgpPbiB0aGUgbGVmdCBo YW5kIHNpZGUsIHRoZXJlIGlzIHZpc3VhbGl6YXRpb24gb2YgcGxheWJhY2sgKGxlZnQgYmxvY2sp IGFuZCBjYXB0dXJlIChyaWdodCBibG9jaykgcG9pbnRlcnMgLSBmcm9tIHRvcCB0byBib3R0b206 CgoqIEZvciBwbGF5YmFjaywgYGFwcGxfcHRyYCBjaGFuZ2VzIGZpcnN0IC0gYF9wb2ludGVyYCBh bmQgdGhlbiBgaHdfcHRyYCB0cnkgdG8gZm9sbG93IGl0CiogRm9yIGNhcHR1cmUsIGBfcG9pbnRl cmAgY2hhbmdlcyBmaXJzdCAtIGBod19wdHJgIGFuZCB0aGVuIGBhcHBsX3B0cmAgdHJ5IHRvIGZv bGxvdyBpdAoKT24gdGhlIHJpZ2h0IGhhbmQgc2lkZSwgdGhlcmUgaXMgdGhlICJDYXJkIFRpbWUi IGxhbmUgb3ZlcmxheSwgc2hvd2luZyB0aGUgYSByZXBlYXQgb2YgdGhlIGBfcG9pbnRlcmAgdmFs dWVzICh2aW9sZXQpOyBhbmQgaW50ZXJwb2xhdGVkIHBsYXliYWNrIChyZWQpIGFuZCBjYXB0dXJl IChibHVlKSBwb3NpdGlvbiAoYWdhaW4sIHNlZSBgUmVhZG1lYCBmb3IgbW9yZSkuIFRoZSBpbnRl cnBvbGF0ZWQgcG9zaXRpb25zIHN0YXJ0IHdpdGggdGhlIGZpcnN0IHByb3BlciBjYXB0dXJlIG9y IHBsYXliYWNrICJjYXJkSVJRPyIsIGFuZCB0aGVuIGdyb3cgYXMgcGVyIHNhbXBsaW5nIHJhdGUg cGVyaW9kIChoZXJlIDEvNDQxMDApLCBzbyB0aGV5IHNpbXVsYXRlIHRoZSBjYXJkIHNhbXBsaW5n IGNsb2NrLiBUaGUgYW5pbWF0aW9uIGluIHRoaXMgbGFuZSBzaG93cyB0aGF0OgoKKiBUaGUgY2Fw dHVyZSBhbmQgcGxheWJhY2sgc3RyZWFtcyBpbmRlZWQgc2VlbSB0byBiZSBjbG9zZSB0byBzeW5j aHJvbml6ZWQgLSBhcyBleHBlY3RlZCBmcm9tIGBzbmRfcGNtX2xpbmtgIC0gYnkgbG9va2luZyBh dCB0aGVpciBpbnRlcnBvbGF0ZWQgcG9zaXRpb25zICh0aGUgc21hbGwgZGVsdGEgYmV0d2VlbiB0 aG9zZSB2YWx1ZXMgaXMgbGlrZWx5IGR1ZSB0byBjYWxjdWxhdGlvbiBlcnJvcnMpCiogVGhlIHJl c3BlY3RpdmUgYF9wb2ludGVyc2AgZG8gc2VlbSB0byB0cmFjayBjbG9zZWx5IHRoZSBpbnRlcnBv bGF0ZWQgcG9zaXRpb25zIC0gYW5kIHRoZXkgdHlwaWNhbGx5IGNyb3NzIGFib3V0IGhhbGYgYSBi dWZmZXIgKGluIHRoaXMgY2FzZSwgYSBwZXJpb2Rfc2l6ZSksIHdoZW4gdGhleSB1cGRhdGUgKGNs b3NlIHRvIHRoZWlyIHJlc3BlY3RpdmUgImNhcmRJUlE/InMpCgpUaGUgaW50ZXJlc3RpbmcgdGhp bmcgaGVyZSBmb3IgbWUsIGlzIHRoZSBmYWN0IHRoYXQgdGhlIF9wb2ludGVyL2ludGVycG9sYXRl ZCBwb3NpdGlvbnMgaW5kZWVkIHNlZW0gdG8gYmUgc3luY2hyb25pemVkIC0gZXZlbiBpZiB0aGUg Y2FwdHVyZSBhbmQgcGxheWJhY2sgSVJRIHNlcXVlbmNlcyBhcmUgcXVhcnRlciBidWZmZXIgcGVy aW9kIGFwYXJ0ISBBdCBmaXJzdCwgSSBleHBlY3RlZCB0aGF0IHNpbmNlIHRoZSBjL3AgSVJRIHNl cXVlbmNlcyBhcmUgcXVhcnRlciBidWZmZXIgcGVyaW9kIGFwYXJ0IC0gdGhlbiBhbHNvIHRoZSBy ZXNwZWN0aXZlIGludGVycG9sYXRlZC9fcG9pbnRlciB2YWx1ZXMgd291bGQgYWxzbyBoYXZlIHRv IGJlIHF1YXJ0ZXIgYnVmZmVyX3NpemUgKGhhbGYgcGVyaW9kX3NpemUpIGFwYXJ0IT8gQnV0IHNl ZW4gbGlrZSB0aGlzLCBpdCBzZWVtcyB0aGF0IGF0IHRoZSB2ZXJ5IGZpcnN0ICh2aW9sZXQpIGNh cmRJUlEsIHRoZSBzYW1wbGluZyBjbG9jayBpcyBzdGFydGVkIHN5bmNocm9ub3VzbHkgZm9yIGJv dGggcGxheWJhY2sgYW5kIGNhcHR1cmUgb24gdGhlIGNhcmQgLSBhbmQgc28sIF9ldmVuXyBpZiB0 aGUgcGxheWJhY2sgSVJRcyBoaXQgYSBsaXR0bGUgYml0IGxhdGVyLCB0aGUgUEMgc3RpbGwgaXMg aW5mb3JtZWQgb2YgcmVsYXRpdmVseSBhY2N1cmF0ZSBjYXJkIHZhbHVlcyAoZXNwLiBnaXZlbiB0 aGF0LCBhcyBzdXJtaXNlZCBlYXJsaWVyIGluIHRoZSB0aHJlYWQsIHRoZSBgX3BvaW50ZXJgIHZh bHVlcyBzZWVtIHRvIHByb3BhZ2F0ZSBmcm9tIHRoZSBjYXJkIHRvIHRoZSBQQyB2aWEgRE1BLCBh bmQgdGh1cyBkbyBub3QgcmVseSBvbiBpbnRlcnJ1cHRzICJyZXBvcnRpbmciIHRoZW0pLiBJcyB0 aGlzIHNvbWV3aGF0IGNvcnJlY3RseSB1bmRlcnN0b29kPwoKW1sgVGhpcyBjb25mdXNlZCBtZSBn cmVhdGx5LCBlc3BlY2lhbGx5IHNpbmNlIG9uZSBvZiB0aGUgdmVyeSBmaXJzdCBjYXB0dXJlcyAo d2hpY2ggSSBhbHNvIHVzZWQgZm9yIGRldmVsb3BpbmcgdGhlIHNjcmlwdHMpIHdhcyB0aGlzOgoK ICAgIGh0dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9fY2FwcGljczA1 L2NhcHRsYXQtMjAxMy0wOC0yMC0wOS0zMy0xMi10cmFjZS1oZGEtaW50ZWwucGRmCgpUaGVyZSB0 aGUgdmVyeSBmaXJzdCBwbGF5YmFjayBfcG9pbnRlciBoYXMgYSB2YWx1ZSBvZiA0OCAtIGJhcmVs eSAyMDAgzrxzIChkdXJhdGlvbiBvZiBzb21lIDggZnJhbWVzKSBhZnRlciB0aGUgYHNuZF9wY21f c3RhcnRgISBIb3dldmVyLCBpdCBpcyBhYm91dCA0OC8xMjggPSAoMS8yLjY2NjY3KXRoIG9mIHRo ZSBidWZmZXJfc2l6ZSwgd2hlcmVhcyBhIHF1YXJ0ZXIgYnVmZmVyX3NpemUgaXMgMzIgZnJhbWVz IC0gYW5kIHNpbmNlIEkgZ290IHRoaXMgaW4gbm8gb3RoZXIgZGVidWcgbG9nLCBJIGd1ZXNzIHRo aXMgd2FzIGFuIGFub21hbHkvZXJyb3Igb2Ygc29ydHMgKGV2ZW4gaWYgYGxhdGVuY3lgIHJlcG9y dGVkIHN1Y2Nlc3NmdWwgY29tcGxldGlvbikuIF1dCgoKRnVydGhlciBvbiB0byB0aGUgYGR1bW15 YCBkcml2ZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uICh3aXRoIHRoZSBleHRyYSBgdHJhY2VfcHJp bnRrYCksIGJlaGF2ZXMgbGlrZSB0aGlzIGZvciBhIGJsb2NraW5nIGBsYXRlbmN5YCB0ZXN0OgoK ICAgIGh0dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bvc3QvYWxzYS1jYXB0dGVzdC9jYXB0bGF0LWR1 bS0xMjgtMjU2LW5wLTAtbnMteWIuZ2lmCgpIZXJlLCBldmVuIHdpdGggYmxvY2tpbmcsIC5wb2lu dGVyIGlzIHF1aXRlIGZyZXF1ZW50bHkgY2FsbGVkIC0gaG93ZXZlciwgYXMgbm90ZWQgZWFybGll ciBpbiB0aGlzIHRocmVhZCwgdGhhdCBpcyBiZWNhdXNlIHRoaXMgZHJpdmVyIHZlcnNpb24gcmUt Y2FsY3VsYXRlcyB0aGUgX3BvaW50ZXIgdmFsdWUgaW4gdGhlIC5wb2ludGVyIGZ1bmN0aW9uOyBh bmQgc28gdGhlIHZhbHVlIG9mIF9wb2ludGVyIGNoYW5nZXMgYnkgdGhlIHRpbWUgYGh3X3B0cmAg aXMgc2V0IHRvIF9wb2ludGVyJ3MgbGFzdCB2YWx1ZS4gQW5kIHNpbmNlIGluIHRoZSBjYXB0dXJl IGRpcmVjdGlvbiwgQUxTQSBpbnNpc3RzIGhhdmluZyBgaHdfcHRyYCBzZXQgdG8gX3BvaW50ZXIs IGl0IHJlcGVhdHMgdGhpcyBwcm9jZXNzLgoKClRoZSBiZWhhdmlvciBvZiB0aGUgbW9kaWZpZWQg YGR1bW15YCBkcml2ZXIgKGBkdW1teS0yLjYuMzItcGF0ZXN0LmNgIHdpdGggYSByZXNwZWN0aXZl IGB0cmFjZV9wcmludGtgKSBsb29rcyBsaWtlIHRoaXM6CgogICAgaHR0cDovL3NkYWF1YmNrcC5z Zi5uZXQvcG9zdC9hbHNhLWNhcHR0ZXN0L2NhcHRsYXQtZHVNLTEyOC0yNTYtbnAtMC1ucy15Yi5n aWYKClNpbmNlIGBkdW1teS0yLjYuMzItcGF0ZXN0YCByZWNhbGN1bGF0ZXMgX3BvaW50ZXIgdmFs dWVzIGluIHRoZSBocnRpbWVyIGNhbGxiYWNrcyAoYW5kIHRoZSAucG9pbnRlciBmdW5jdGlvbiBz aW1wbHkgcmV0dXJucyBpdCkgLSB0aGUgQUxTQSBlbmdpbmUgY2FuIHF1aWNrbHkgdXBkYXRlIGBo d19wdHJgIHRvIHRoZSBfcG9pbnRlciB2YWx1ZSB3aXRob3V0IG1hbnkgcmVwZXRpdGlvbnM7IGFu ZCBzbyBpdCByZXNlbWJsZXMgdGhlIGJlaGF2aW9yIGBoZGEtaW50ZWxgIGEgYml0IG1vcmUuIEFw cGFyZW50bHksIGR1ZSB0byB0aGUgYHNuZF9wY21fbGlua2AsIHRoZSBocnRpbWVyIGNhbGxiYWNr cyBmb3IgcGxheWJhY2sgYW5kIGNhcHR1cmUgc2NoZWR1bGUgdmVyeSBjbG9zZSB0byBvbmUgYW5v dGhlciAtIGNhdXNpbmcgdGhlIGZ1dHVyZSBjYWxsYmFja3MgdG8gYmUgYW5zd2VyZWQgaW4gdGhl IGNvbnRleHQgb2YgYSBzaW5nbGUgSVJROyBob3dldmVyLCBhbHNvIGhlcmUsIHRoZSBjYXB0dXJl IGNhbGxiYWNrIHNlZW1zIHRvIGJlIGFuc3dlcmVkIGZpcnN0LiBMb29raW5nIGF0IG9uZSBvZiBp dHMgZGVidWcgbG9ncyBhcyBhbiBhbmltYXRpb246CgogICAgaHR0cDovL3NkYWF1YmNrcC5zZi5u ZXQvcG9zdC9hbHNhLWNhcHR0ZXN0L2NhcHRsYXQtMjAxMy0wOS0xMS0wMi0yMS0wOC1kdU0tMTI4 LTI1Ni1ucC0wLW5zLXliLm1wZwoKLi4uIGFsc28gdGhlIHVwZGF0ZSBiZWhhdmlvciBvZiB0aGUg cG9pbnRlcnMgYW5kIHRoZSBpbnRlcnBvbGF0ZWQgcG9zaXRpb25zIHNlZW1zIGNsb3NlIHRvIHRo ZSBiZWhhdmlvciBvZiBgaGRhLWludGVsYC4KCgpXaGlsZSBhbHNvIGBoZGEtaW50ZWxgY2FuIGZh aWwgKHdpdGggYW4gWFJVTikgaW4gYSBgbGF0ZW5jeWAgdGVzdCBsaWtlIGFib3ZlLCBJIHdhcyBt b3JlIGludGVyZXN0ZWQgaW4gYSBmYWlsdXJlIG9mIHRoZSBtb2RpZmllZCBgZHVtbXktMi42LjMy LXBhdGVzdGAgLSBzbyBoZXJlIGlzIG9uZSBzdWNoIGRlYnVnIHBsb3Q6CgogICAgaHR0cDovL3Nk YWF1YmNrcC5zZi5uZXQvcG9zdC9hbHNhLWNhcHR0ZXN0L19jYXBwaWNzMDUvY2FwdGxhdC0yMDEz LTA5LTExLTEzLTQ2LTQzLWR1TS0xMjgtMjU2LW5wLTAtbnMteWItZi10cmFjZS1kdW1teS5wZGYK Ci4uLiBhbmQgYXMgYW4gYW5pbWF0aW9uOgoKICAgIGh0dHA6Ly9zZGFhdWJja3Auc2YubmV0L3Bv c3QvYWxzYS1jYXB0dGVzdC9jYXB0bGF0LTIwMTMtMDktMTEtMTMtNDYtNDMtZHVNLTEyOC0yNTYt bnAtMC1ucy15Yi1mLm1wZwoKQXQgZW5kIG9mIHRoaXMgcnVuLCBgbGF0ZW5jeS1tb2QuY2Agd291 bGQgaGF2ZSByZXBvcnRlZCBwbGF5YmFjay9jYXB0dXJlIGZyYW1lcyBhdCBlbmQsIGFuZCBhbiBh cnJheSBsb2dnaW5nIHRoZSBzdGF0dXMgb2YgZWFjaCBgcmVhZGJ1ZmAvYHdyaXRlYnVmYCBjYWxs IGluIGBsYXRlbmN5LW1vZC5jYDoKCiogMTkyLzEyOCB4cnVuOiBbcmQgd3JdIDA6IFs2NCA2NF0g MTogWzY0IC0zMl0gMjogWzAgMF0gMzogWzAgMF0gICAuLi4KCi4uLiB3aGljaCB3b3VsZCBtZWFu IHRoYXQgdGhlIHNlY29uZCBgd3JpdGVidWZgIGZhaWxlZC4gSG93ZXZlciwgaW4gdGhlIFBERiBw bG90LCB3ZSBjYW4gc2VlIHRoZSBmaXJzdCBgX3JlYWRpYCBjYWxsZWQgcmlnaHQgYXQgc3RhcnQ7 IGFmdGVyIHRoZSBmaXJzdCAiY2FyZElSUT8iLCBmaXJzdCBgX3dyaXRlaWAgYW5kIHNlY29uZCBg X3JlYWRpYCBhcmUgY2FsbGVkLiBJbiB0aGUgc3VjY2Vzc2Z1bCBhY3F1aXNpdGlvbnMsIHRoaXMg cGF0dGVybiByZXBlYXRzIHRvIHRoZSBlbmQgLSBidXQgaW4gdGhpcyBmYWlsaW5nIG9uZSwgdGhl IGZhaWxpbmcgYF93cml0ZWlgIGlzIGNhbGxlZCBhZnRlciBhbiBgeHJ1bigpYCBpcyBkZWNpZGVk IGluIGNvbnRleHQgb2YgdGhlIHRoaXJkIHBsYXliYWNrICJjYXJkSVJRPyIgKHRoaXMgaXMgbm90 IHNob3duIG9uIHRoZSBQREYgLSB5b3UnbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBgLmNzdmAgZmls ZSB0byBzZWUgdGhlIGB4cnVuKClgKS4gVGhpcyBtZWFucyB0aGF0IC0gZm9yIHNvbWUgcmVhc29u IC0gYm90aCBgX3dyaXRlaSBhbmQgYF9yZWFkaWAgYXJlICpza2lwcGVkKiBhZnRlciB0aGUgc2Vj b25kICJjYXJkSVJRPyI7IGFuZCBJIGNhbm5vdCByZWFsbHkgdGVsbCB3aGF0IHdvdWxkIGJlIHRo ZSByZWFzb24gZm9yIGl0LiBJIG1heSB0cnkgdG8gbG9vayBpbnRvIHRoaXMgZnVydGhlciAtIGJ1 dCBhcyBJIHJlbWVtYmVyLCB0aGUgUG9ydEF1ZGlvIGZ1bGwtZHVwbGV4IHByb2JsZW0gd2FzIG5v dCBhIHR5cGljYWwgWFJVTiwgc28gbWF5YmUgSSdsbCBnbyBiYWNrIGRpcmVjdGx5IHRvIFBvcnRB dWRpbyBmcm9tIHRoaXMgcG9pbnQuCgoKVGhhbmtzIGZvciBiZWFyaW5nIHdpdGggbWUgc28gZmFy IC0gYW5kIEknbSBsb29raW5nIGZvcndhcmQgdG8gYW55IGFuc3dlcnMvY29ycmVjdGlvbnMsCkNo ZWVycyEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB bHNhLWRldmVsIG1haWxpbmcgbGlzdApBbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKaHR0cDov L21haWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2ZWwK