From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [4/6] usb: gadget: add functions to signal udc driver to delay status stage From: Laurent Pinchart Message-Id: <1864168.qYyPzk9PJV@avalon> Date: Fri, 02 Nov 2018 16:36:19 +0200 To: Felipe Balbi Cc: Paul Elder , Alan Stern , Bin Liu , kieran.bingham@ideasonboard.com, gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, rogerq@ti.com List-ID: SGkgRmVsaXBlLAoKT24gRnJpZGF5LCAyIE5vdmVtYmVyIDIwMTggMTU6MTc6MjAgRUVUIEZlbGlw ZSBCYWxiaSB3cm90ZToKPiBMYXVyZW50IFBpbmNoYXJ0IHdyaXRlczoKPiA+Pj4+PiArdm9pZCB1 c2JfZXBfZGVsYXlfc3RhdHVzKHN0cnVjdCB1c2JfZXAgKmVwKQo+ID4+Pj4+IAo+ID4+Pj4+ICt7 Cj4gPj4+Pj4gKwllcC0+ZGVsYXllZF9zdGF0dXMgPSB0cnVlOwo+ID4+Pj4+ICt9Cj4gPj4+Pj4g K0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9lcF9kZWxheV9zdGF0dXMpOwo+ID4+Pj4gCj4gPj4+PiBJ cyB1c2JfZXBfc2V0X2RlbGF5X3N0YXR1cygpIGJldHRlcj8gSSB0aG91Z2h0IGl0IGltcGxpZXMg Z2V0L3JldHVybgo+ID4+Pj4gYWN0aW9uIGlmIGEgdmVyYiBpcyBtaXNzaW5nIGluIHRoZSBmdW5j dGlvbiBuYW1lLgo+ID4+PiAKPiA+Pj4gRm9yIHdoYXQgaXQncyB3b3J0aCwgSSB1bmRlcnN0YW5k IHRoZSBmdW5jdGlvbiBuYW1lIGFzICJkZWxheSB0aGUKPiA+Pj4gc3RhdHVzIHN0YWdlIiwgd2l0 aCAiZGVsYXkiIGJlaW5nIGEgdmVyYi4gTWF5YmUgdGhlIHNob3J0IGRlc2NyaXB0aW9uCj4gPj4+ IGNvdWxkIGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCj4gPj4+IAo+ID4+PiBJcyB0aGVyZSBhIHJl YXNvbiBmb3IgYWRkaW5nIGEgbmV3IGZ1bmN0aW9uIGZvciB0aGlzPyAgVGhpcyBpcyBleGFjdGx5 Cj4gPj4+IHdoYXQgdGhlIFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMgcmV0dXJuIHZhbHVlIGZy b20gdGhlIHNldHVwIGNhbGxiYWNrCj4gPj4+IGlzIG1lYW50IGZvciAoYW5kIGl0IGlzIGFscmVh ZHkgdXNlZCBieSBzb21lIGdhZGdldCBkcml2ZXJzKS4KPiA+PiAKPiA+PiBJbiB0aGVvcnksIHdl IG1pZ2h0IGJlIGFibGUgdG8gdXNlIFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMgZm9yIHRoaXMu Cj4gPj4gSG93ZXZlciwgdGhlcmUgYXJlIGEgZmV3IGFtYmlndWl0aWVzIHRoYXQgcHJldmVudCB1 cyBmcm9tIGRvaW5nIHNvLgo+ID4+IAo+ID4+IEZpcnN0IG9mIGFsbCwgd2Ugd2FudCB0byBkZWxh eSBvbmx5IHRoZSBzdGF0dXMgc3RhZ2UgZm9yIGNvbnRyb2wgT1VUCj4gPj4gcmVxdWVzdHM7IGFj Y29yZGluZyB0byBjb21wb3NpdGUuaCwgVVNCX0dBREdFVF9ERUxBWUVEX1NUQVRVUyBpcyBmb3IK PiA+PiBkZWxheWluZyB0aGUgImRhdGEvc3RhdHVzIHN0YWdlcyIuIERvZXMgdGhpcyBtZWFuIHRo YXQgaXQgZGVsYXlzIHRoZQo+ID4+IHN0YXR1cyBzdGFnZSBvbmx5IG9yIGRvZXMgaXQgZGVsYXkg Ym90aCBzdGFnZXM/IElmIHRoZSBzbGFzaCBtZWFucwo+ID4+ICJhbmQiLCB0aGVuIHdlIGNhbm5v dCB1c2UgVVNCX0dBREdFVF9ERUxBWUVEX1NUQVRVUy4KPiA+PiAKPiA+PiBGdXJ0aGVybW9yZSwg d2UgaGF2ZSBmb3VuZCB0aGF0IFVTQl9HQURHRVRfREVMQVlFRF9TVEFUVVMgaXMgcmFjZXksCj4g Pj4gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBvYnNlcnZlZCBpbiB0aGUgVVZDIGdhZGdldCBkcml2 ZXIgcHJldmlvdXNseSBbMF0uCj4gPj4gVGhlIHJhY2VpbmVzcyBzdGVtcyBmcm9tIHRoZSBmYWN0 IHRoYXQgdGhpbmdzIGNhbiBoYXBwZW4gaW4gYmV0d2Vlbgo+ID4+IHJldHVybmluZyBVU0JfR0FE R0VUX0RFTEFZRURfU1RBVFVTIGFuZCB0aGUgY29tcG9zaXRlIGxheWVyIHJlYWN0aW5nIHRvCj4g Pj4gaXQgLSBlc3BlY2lhbGx5IGlmIHVzYl9jb21wb3NpdGVfc2V0dXBfY29udGludWUgaXMgY2Fs bGVkIHdpdGhpbiB0aGF0Cj4gPj4gd2luZG93IGl0IGNhdXNlcyBhIFdBUk4uIEluIGFueSBjYXNl LCB0aGUgZmFjdCB0aGF0IHRoZSBtZWNoYW5pc20gaXRzZWxmCj4gPj4gaXMgcmFjZXkgc3VnZ2Vz dHMgdGhhdCBpdCBuZWVkcyBpbXByb3ZlbWVudCwgYW5kIHVzaW5nIGl0IHdvdWxkbid0IGJlIGEK PiA+PiBnb29kIHNvbHV0aW9uIGluIHRoaXMgY2FzZS4KPiA+PiAKPiA+Pj4gSXMgaXQgYSBxdWVz dGlvbiBvZiB3aGVuIHRoZSBnYWRnZXQgZHJpdmVyIGxlYXJucyB0aGF0IGl0IHdpbGwgbmVlZCB0 bwo+ID4+PiBkZWxheSB0aGUgc3RhdHVzIHN0YWdlPyAgSWYgdGhhdCdzIHRoZSBjYXNlLAo+ID4+ IAo+ID4+IE5vdCByZWFsbHkuCj4gPj4gCj4gPj4+IHdoeSBub3QgYWx3YXlzIHJldHVybgo+ID4+ PiBVU0JfR0FER0VUX0RFTEFZRURfU1RBVFVTIGZyb20gdGhlIHNldHVwIGNhbGxiYWNrPyAgVGhl biBpbnN0ZWFkIG9mCj4gPj4+IGNhbGxpbmcgdXNiX2VwX2RlbGF5X3N0YXR1cygpIHdoZW4gYSBk ZWxheSBpcyBuZWVkZWQsIHlvdSBjb3VsZCBxdWV1ZQo+ID4+PiB0aGUgc3RhdHVzIHJlcXVlc3Qg d2hlbiBhIGRlbGF5IGlzbid0IG5lZWRlZC4KPiA+PiAKPiA+PiBUaGVvcmV0aWNhbGx5IHRoaXMg bWlnaHQgd29yaywgYnV0IHNlZSB0aGUgcHJvYmxlbXMgbWVudGlvbmVkIGFib3ZlLgo+ID4+IAo+ ID4+PiBBcyBhIG1vcmUgZ2VuZXJhbCBzb2x1dGlvbiwgRmVsaXBlIGhhcyBzYWlkIHRoYXQgYSBV REMgZHJpdmVyIHNob3VsZAo+ID4+PiBfbmV2ZXJfIGNhcnJ5IG91dCB0aGUgc3RhdHVzIHN0YWdl IHRyYW5zYWN0aW9uIHVudGlsIHRoZSBnYWRnZXQgZHJpdmVyCj4gPj4+IGhhcyB0b2xkIGl0IHRv IGRvIHNvLiAgVGhlbiB0aGVyZSB3b3VsZCBiZSBubyBuZWVkIGZvciBhbnkgc29ydCBvZgo+ID4+ PiBkZWxheSBpbmRpY2F0b3IuCj4gPj4gCj4gPj4gWWVhaCwgYnV0LAo+ID4+IAo+ID4+PiAoQnV0 IGltcGxlbWVudGluZyB0aGlzIHdvdWxkIHJlcXVpcmUgc2lnbmlmaWNhbnQKPiA+Pj4gY2hhbmdl cyB0byBhIGJ1bmNoIG9mIGRpZmZlcmVudCBkcml2ZXJzLi4uKQo+ID4+IAo+ID4+IGV4YWN0bHkg Oi8KPiAKPiBhZGQgYSBmbGFnIHRvIGdhZGdldCBzdHJ1Y3R1cmUuIFNvbWV0aGluZyBsaWtlCj4g InN1cHBvcnRzX2V4cGxpY2l0X3N0YXR1c19zdGFnZSIgYW5kIGFkZCBhIG5ldyByZXR1cm4gdmFs dWUKPiBVU0JfRVhQTElDSVRfU1RBVFVTX1NUQUdFLgo+IAo+IFRoZW4sIHRha2UgdXZjIGZvciBl eGFtcGxlLCBpbXBsZW1lbnQgdGhlIG5ldyBzZXR1cDoKPiAKPiBpZiAoc3VwcG9ydHNfZXhwbGlj aXRfc3RhdHVzX3N0YWdlKQo+IAlyZXR1cm4gVVNCX0VYUExJQ0lUX1NUQVRVU19TVEFHRTsKPiAK PiB0aGVuIG9uIGR3YzMgeW91IHdvdWxkOgo+IAo+IHN3aXRjaCAocmV0KSB7Cj4gY2FzZSBVU0Jf RVhQTElDSVRfU1RBVFVTX1NUQUdFOgo+IGNhc2UgVVNCX0dBREdFVF9ERUxBWUVEX1NUQVRVUzoK PiAJd2FpdF9mb3Jfc3RhdHVzX3JlcXVlc3RfcXVldWUoKTsKPiAgICAgICAgIGJyZWFrOwo+IGRl ZmF1bHQ6Cj4gCXN0YXJ0X3N0YXR1c19zdGFnZSgpOwo+IH0KPiAKPiBJZiB0aGlzIHdvcmtzIHdp dGggZHdjMyArIHV2YywgdGhlbiB3ZSBoYXZlIGEgZ29vZCByZWNpcGUgb24gaG93IHRvCj4gaW1w bGVtZW50IGZvciB0aGUgb3RoZXIgZHJpdmVycy4KCkdpdmVuIHRoYXQgd2UgbmVlZCB0byBkZWxh eSB0aGUgc3RhdHVzIHN0YWdlIGFuZCBub3QgdGhlIGRhdGEgc3RhZ2UsIHdlIGNhbid0IApleHBs aWNpdGx5IHJlcXVlc3QgdGhlIHN0YXR1cyBzdGFnZSB0aHJvdWdoIGEgdXNiIHJlcXVlc3QgcXVl dWUuIFdvdWxkIGEgbmV3IApleHBsaWNpdCBmdW5jdGlvbiBjYWxsIHdvcmsgZm9yIHlvdSBmb3Ig dGhhdCBwdXJwb3NlID8KCj4gPiBBbGFuLCBGZWxpcGUsIGhvdyBkbyB3ZSBtb3ZlIGZvcndhcmQg d2l0aCB0aGlzID8gVGhlcmUgYXJlIHNldmVyYWwgaXNzdWVzCj4gPiB3aXRoIHRoZSBleGlzdGlu ZyBjb250cm9sIHJlcXVlc3QgaGFuZGxpbmcgbWVjaGFuaXNtIGluIHRoZSBVU0IgZ2FkZ2V0Cj4g PiBzdGFjaywgYW5kIHdoaWxlIFBhdWwgY291bGQgd29yayBvbiBpbXByb3ZpbmcgdGhlIG1lY2hh bmlzbSwgd2UgbmVlZCB0bwo+ID4gcHJvdmlkZSBjbGVhciBndWlkYW5jZSByZWdhcmRpbmcgdGhl IGRpcmVjdGlvbiB3ZSB3YW50IHRvIHRha2UuCj4gPiAKPiA+IEZvciByZWZlcmVuY2UsIHRoZSBp c3N1ZXMgSSBrbm93IGFib3V0IGZvciB0aGUgVVNCX0dBREdFVF9ERUxBWUVEX1NUQVRVUwo+ID4g bWVjaGFuaXNtIGFyZQo+ID4gCj4gPiAtIFRoZSBtZWNoYW5pc20gaXMgaW5oZXJlbnRseSByYWN5 LiBJdCByZWxpZXMgb24gc2lnbmFsaW5nIHRoZSBkZWxheSBhdAo+ID4gdGhlIHZlcnkgZW5kIG9m IHRoZSBwcm9jZXNzaW5nIGluIHRoZSBzZXR1cCBoYW5kbGVyLCB3aGljaCBieSBkZWZpbml0aW9u Cj4gPiBvY2N1cnMgYWZ0ZXIgdGhlIHdvcmsgdG8gcHJvY2VzcyB0aGUgY29udHJvbCByZXF1ZXN0 IGlzIHF1ZXVlZCAoaW4gdGhlCj4gPiBnZW5lcmljIHNlbnNlLCByZWdhcmRsZXNzIG9mIHdoZXRo ZXIgdGhpcyBpbnZvbHZlcyBhIGtlcm5lbCB3b3JrcXVldWUgb3IKPiA+IHBhc3NpbmcgdGhlIHdv cmsgdG8gdXNlcnNwYWNlKS4gVGhlcmUgaXMgdGh1cyBhIHJhY2Ugd2luZG93IGFmdGVyIHF1ZXVp bmcKPiA+IHRoZSB3b3JrIGFuZCBiZWZvcmUgc2lnbmFsaW5nIHRoZSBkZWxheSBkdXJpbmcgd2hp Y2ggdGhlIHdvcmsgaGFuZGxlcgo+ID4gY291bGQgc2lnbmFsIGNvbXBsZXRpb24uCj4gCj4gV2Ug d29uJ3QgZml4IHRoaXMgdW50aWwgYWxsIGZ1bmN0aW9ucyBhbmQgVURDcyBhcmUgY29udmVydGVk IG92ZXIsIGJ1dAo+IGl0J3MgZG9hYmxlLgoKSXQgY291bGQgYmUgZml4ZWQgYnkgc2lnbmFsaW5n IHRoZSBkZWxheSB0aHJvdWdoIGFuIGV4cGxpY2l0IGZ1bmN0aW9uIGNhbGwgCmJlZm9yZSBxdWV1 ZWluZyB0aGUgd29yayBpbnN0ZWFkIG9mIHRocm91Z2ggYSByZXR1cm4gdmFsdWUgdGhvdWdoLCBi dXQgSSBhZ3JlZSAKdGhhdCBsb25nIHRlcm0gcmVxdWVzdGluZyB0aGUgc3RhdHVzIHN0YWdlIGV4 cGxpY2l0bHkgd291bGQgbGlrZWx5IGJlIGNsZWFuZXIuCgo+ID4gLSBUaGUgbWVjaGFuaXNtIGlz IHBvb3JseSBkb2N1bWVudGVkLiBBcyBQYXVsIG1lbnRpb25lZCwgY29tbWVudHMgaW4gdGhlCj4g PiBjb2RlIHN0YXRlIHRoYXQgVVNCX0dBREdFVF9ERUxBWUVEX1NUQVRVUyBkZWxheSB0aGUgImRh dGEvc3RhdHVzIHN0YWdlcyIuCj4gPiBUaGlzIGlzIHZlcnkgdW5jbGVhciwgYW5kIHRoZSBvbmx5 IHRocmVlIFVEQ3MgdGhhdCBpbXBsZW1lbnQgdGhlCj4gPiBtZWNoYW5pc20gc2VlbSB0byBkbyBz byBpbiBkaWZmZXJlbnQgd2F5czoKPiA+IAo+ID4gICAtIFRoZSBtdHUgZHJpdmVyIHN0YXRlcyBp biBhIGNvbW1lbnQgdGhhdCBpdCB3aWxsICJoYW5kbGUgdGhlIGRlbGF5Cj4gPiAgIFNUQVRVUyBw aGFzZSB0aWxsIHJlY2VpdmUgZXBfcXVldWUgb24gZXAwIi4KPiA+IAo+ID4gICAtIFRoZSBiZGMg ZHJpdmVyIHN0YXRlcyBpbiBhIGNvbW1lbnQgdGhhdCAiVGhlIGVwMCBzdGF0ZSB3aWxsIHJlbWFp bgo+ID4gICBXQUlUX0ZPUl9EQVRBX1NUQVJUIHRpbGwgd2UgcmVjZWl2ZWQgZXBfcXVldWUgb24g ZXAwIi4KPiA+IAo+ID4gICAtIFRoZSBkd2MzIGRyaXZlciBzZWVtcyB0byBoYW5kbGUgVVNCX0dB REdFVF9ERUxBWUVEX1NUQVRVUyBmb3IgdGhlCj4gPiAgIFNFVF9DT05GSUcgcmVxdWVzdCBvbmx5 Lgo+IAo+IHRoYXQncyB0aGUgb25seSBvbmUgdGhhdCBoYXMgbmVlZGVkIGl0IHNvIGZhci4gSSdt IGFsbCBmb3IgbWFraW5nIHN0YXR1cwo+IHN0YWdlIEFMV0FZUyBleHBsaWNpdCwgdGhhdCB3aWxs LCBpbiB0aGUgbG9uZyBydW4sIHNpbXBsaWZ5IFVEQwo+IGRyaXZlcnMgYW5kIG1ha2UgdGhlIEFQ SSBlYXNpZXIgdG8gdW5kZXJzdGFuZC4KPiAKPiA+IC0gVGhlIG1lY2hhbmlzbSByZWxpZXMgb24g cXVldWVpbmcgYSByZXF1ZXN0IHRvIHRoZSBVREMgdG8gc2lnbmFsIHRoYXQgaXQKPiA+IHNob3Vs ZCBjb250aW51ZSB3aXRoIHRoZSBzdGF0dXMgc3RhZ2UuIFRoYXQgcmVxdWVzdCBjYW4gYmUgcXVl dWVkIGVpdGhlcgo+ID4gYnkgdGhlIFVTQiBnYWRnZXQgZnVuY3Rpb24gZHJpdmVyIGRpcmVjdGx5 LCBvciBieSB0aGUgY29tcG9zaXRlIGxheWVyIGluCj4gPiB1c2JfY29tcG9zaXRlX3NldHVwX2Nv bnRpbnVlKCkgKHRoZSBsYXR0ZXIgaXMgcmVzdHJpY3RlZCB0byByZXF1ZXN0cyB0aGF0Cj4gPiBj YXJyeSBubyBkYXRhIGFzIGl0IHNldHMgdGhlIHJlcXVlc3QgbGVuZ3RoIHRvIDApLiBUaGlzIGlz IHByb2JsZW1hdGljIGlmCj4gPiB3ZSB3YW50IHRvIGRlbGF5IHRoZSBzdGF0dXMgcGhhc2UgYWZ0 ZXIgY29tcGxldGluZyB0aGUgZGF0YSBwaGFzZSwgaW4KPiA+IG9yZGVyIHRvIHZhbGlkYXRlIHRo ZSBzZXR1cCBwaGFzZSBkYXRhIGFuZCB0aGUgZGF0YSBwaGFzZSBkYXRhIChmb3IgYQo+ID4gY29u dHJvbCBPVVQgcmVxdWVzdCkgdG9nZXRoZXIuCj4gCj4gSXQgc2hvdWxkbid0IGNhdXNlIHByb2Js ZW1zLCBhY3R1YWxseS4gTW9zdCBvZiB0aGUgaXNzdWVzIGNvbWUgZnJvbSB0aGUKPiBmYWN0IHRo YXQgc29tZXRpbWVzIGdhZGdldCBkcml2ZXIganVzdCByZXR1cm5zIGEgc3VjY2VzcyBhbmQgZXhw ZWN0cyBVREMKPiB0byBpbml0aWF0ZSBzdGF0dXMgc3RhZ2UgYW5kIHNvbWV0aW1lcyBnYWRnZXQg ZHJpdmVyIHdhbnRzIHRvIGhhbmRsZQo+IHN0YXR1cyBzdGFnZSBleHBsaWNpdGx5LgoKUmVxdWVz dGluZyB0aGUgc3RhdHVzIHN0YWdlIGV4cGxpY2l0bHkgcmVxdWlyZXMgYW4gQVBJIHRvIGRvIHNv IChxdWl0ZSAKb2J2aW91c2x5KS4gWW91ciBwcm9wb3NhbCBpcyB0byB1c2UgdGhlIHVzYiByZXF1 ZXN0IHF1ZXVlIGFzIGEgc2lnbmFsIHRvIApjb250aW51ZSB0byB0aGUgbmV4dCBzdGFnZS4gTXkg cG9pbnQgaXMgdGhhdCB0aGlzIGNhbid0IHdvcmsgZm9yIGNvbnRyb2wgT1VUIApyZXF1ZXN0cywg d2hlcmUgd2UgbWF5IHdhbnQgdG8gZGVsYXkgdGhlIHN0YXR1cyBzdGFnZSBhZnRlciB0aGUgZGF0 YSBpcyAKcmVjZWl2ZWQgYnkgdGhlIFVEQywgYW5kIHRodXMgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMg cXVldWVkLiBXZSBuZWVkIGEgZGlmZmVyZW50IApBUEkgZm9yIHRoYXQuCgpGb3IgY29udHJvbCBJ Tiwgd2UgbWF5IHdhbnQgdG8gZGVsYXkgdGhlIGRhdGEgc3RhZ2UgaWYgd2UgY2FuJ3QgcmVzcG9u ZCAKZGlyZWN0bHksIG9yIHByb2NlZWQgd2l0aCB0aGUgZGF0YSBzdGFnZSBpbW1lZGlhdGVseS4g SW4gYm90aCBjYXNlcyB0aGlzIGNhbiAKYmUgc2lnbmFsZWQgYnkgYSByZXF1ZXN0IGJlaW5nIHF1 ZXVlZC4gVGhlcmUgaXMgbm8gbmVlZCB0byBkZWxheSB0aGUgc3RhdHVzIApzdGFnZSBhcyBpdCdz IGluaXRpYXRlZCBieSB0aGUgaG9zdC4KCkZvciBjb250cm9sIE9VVCwgd2UgbWF5IHdhbnQgdG8g ZGVsYXkgdGhlIGRhdGEgc3RhZ2UgaWYgd2UgbmVlZCB0byB2YWxpZGF0ZSAKdGhlIHNldHVwIHN0 YWdlIGRhdGEgYXN5bmNocm9ub3VzbHkuIFByb2NlZWRpbmcgdG8gdGhlIGRhdGEgc3RhZ2UgY2Fu IGJlIApzaWduYWxlZCBieSBxdWV1ZWluZyBhIHJlcXVlc3QuIFdlIG1heSBhbHNvIHdhbnQgdG8g ZGVsYXkgdGhlIHN0YXR1cyBzdGFnZSBpZiAKd2UgbmVlZCB0byB2YWxpZGF0ZSB0aGUgZGF0YSBz dGFnZSBkYXRhIGFzeW5jaHJvbm91c2x5LiBUaGlzIGNhbid0IGJlIHNpZ25hbGVkIApieSBxdWV1 ZWluZyBhIHJlcXVlc3QuCgpJIHdvbmRlciBpZiB0aGVyZSdzIHJlYWxseSBhIHVzZSBjYXNlIGZv ciBkZWxheWluZyB0aGUgZGF0YSBzdGFnZSBvZiBjb250cm9sIApPVVQgcmVxdWVzdHMsIGFzIGl0 IHNlZW1zIHRvIG1lIHRoYXQgd2UgY2FuIHBlcmZvcm0gdGhlIGFzeW5jaHJvbm91cyAKdmFsaWRh dGlvbiBvZiB0aGUgc2V0dXAgYW5kIGRhdGEgc3RhZ2VzIHRvZ2V0aGVyLCBpbiB3aGljaCBjYXNl IHdlIHdvdWxkIAphbHdheXMgcHJvY2VlZCB0byB0aGUgZGF0YSBzdGFnZSwgYW5kIG9ubHkgcG90 ZW50aWFsbHkgZGVsYXkgdGhlIHN0YXR1cyBzdGFnZS4gCkhvd2V2ZXIsIGlmIHdlIHN3aXRjaCB0 byBhbiBleHBsaWNpdCBBUEkgd2hlcmUgdGhlIHRyYW5zaXRpb24gZnJvbSB0aGUgc2V0dXAgCnRv IHRoZSBkYXRhIHN0YWdlIGlzIHRyaWdnZXJlZCBieSBxdWV1ZWluZyBhIHJlcXVlc3QsIGFuZCBn aXZlbiB0aGF0IHN1Y2ggYSAKdHJhbnNpdGlvbiBtYXkgbmVlZCB0byBiZSBkZWxheWVkIGZvciB0 aGUgY29udHJvbCBJTiBjYXNlLCBkZWxheWluZyB0aGUgZGF0YSAKc3RhZ2UgZm9yIGNvbnRyb2wg T1VUIHdvdWxkIGVzc2VudGlhbGx5IGNvbWUgZm9yIGZyZWUuCgpJbiBhbnkgY2FzZSB3ZSBuZWVk IGFuIEFQSSB0byBkZWxheSB0aGUgc3RhdHVzIHN0YWdlIG9mIGEgY29udHJvbCBPVVQgcmVxdWVz dC4gClRoZXJlIGFyZSB0d28gb3B0aW9ucyBoZXJlLiBXZSBjYW4gY29uc2lkZXIgdGhhdCB0aGUg c3RhdHVzIHN0YWdlIHNob3VsZG4ndCBiZSAKZGVsYXllZCBieSBkZWZhdWx0IGFuZCBhZGQgYSBu ZXcgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZyb20gdGhlIGRhdGEgc3RhZ2UgCmNvbXBsZXRpb24g aGFuZGxlciB0byByZXF1ZXN0IGEgc3RhdHVzIHN0YWdlIGRlbGF5ICh1c2luZyB0aGUgcmV0dXJu IHZhbHVlIG9mIAp0aGUgY29tcGxldGlvbiBoYW5kbGVyIGlzbid0IGEgZ29vZCBpZGVhIGFzIGl0 IHdvdWxkIGJlIHJhY3kgYXMgZXhwbGFpbmVkIAphYm92ZSkuIEEgc2Vjb25kIGZ1bmN0aW9uIHdv dWxkIGJlIG5lZWRlZCB0byByZXF1ZXN0IHRoZSBzdGF0dXMgc3RhZ2UgKHdoaWNoLCAKYXMgZXhw bGFpbmVkIGFib3ZlIHRvbywgY2FuJ3QgYmUgZG9uZSBieSBxdWV1ZWluZyBhIHJlcXVlc3QpLiBB IHNlY29uZCBvcHRpb24gCmlzIHRvIGNvbnNpZGVyIHRoYXQgdGhlIHN0YXR1cyBzdGFnZSBpcyBk ZWxheWVkIGJ5IGRlZmF1bHQgdW50aWwgZXhwbGNpdGx5IApyZXF1aXJlZC4gSW4gYm90aCBjYXNl cyB0aGUgc2FtZSBuZXcgZnVuY3Rpb24gaXMgbmVlZGVkIHRvIHJlcXVlc3QgdGhlIHN0YXR1cyAK c3RhZ2UuCgpOb3RlIHRoYXQgZGVsYXlpbmcgdGhlIGRhdGEgc3RhZ2UgYW5kIGRlbGF5aW5nIHRo ZSBzdGF0dXMgc3RhZ2UgYXJlIHR3byAKZGlmZmVyZW50IHByb2JsZW1zLCBhbmQgZG9uJ3QgbmVj ZXNzYXJpbHkgbmVlZCB0byBiZSBzb2x2ZWQgdG9nZXRoZXIuIEhvd2V2ZXIsIAppZiBJIHVuZGVy c3RhbmQgdGhpbmdzIGNvcnJlY3RseSwgd2UgY3VycmVudGx5IGRlbGF5IHRoZSBkYXRhIHN0YWdl IG9mIGEgZmV3IApjb250cm9sIE9VVCByZXF1ZXN0cyAodGhleSBhbGwgaGF2ZSBhIDAgYnl0ZXMg ZGF0YSBzdGFnZSkgYXMgYSBtZWFuIHRvIApjb21wbGV0aW9uIG9mIHRoZSByZXF1ZXN0LiBJIGJl bGlldmUgdGhhdCB0aGlzIHVzZSBjYXNlIGNvdWxkIGJlIGltcGxlbWVudGVkIApieSBkZWxheWlu ZyB0aGUgc3RhdHVzIHN0YWdlIGluc3RlYWQsIHNvIHRoZSB0d28gYXJlIHN0aWxsIHJlbGF0ZWQg aW4gYSB3YXkuCgpJZiB3ZSBlbmQgdXAgbW92aW5nIHRvIGV4cGxpY2l0IHN0YXRlIGhhbmRsaW5n LCB3aXRoIHRoZSBkYXRhIHN0YWdlIGJlaW5nIAplbnRlcmVkIGJ5IHF1ZXVlaW5nIGEgcmVxdWVz dCwgYW5kIHRoZSBzdGF0dXMgc3RhZ2UgYmVpbmcgZW50ZXJlZCBieSBjYWxsaW5nIGEgCm5ldyBm dW5jdGlvbiwgY29udHJvbCBPVVQgcmVxdWVzdHMgd2l0aCAwIGJ5dGVzIG9mIGRhdGEgdGhhdCBj YW4gYmUgaGFuZGxlZCAKc3luY2hyb25vdXNseSBpbiB0aGUgc2V0dXAgaGFuZGxlciB3b3VsZCBy ZXF1aXJlIGZ1bmN0aW9uIGRyaXZlcnMgdG8gYm90aCAKcXVldWUgYSB6ZXJvLWxlbmd0aCByZXF1 ZXN0IGFuZCBjYWxsIHRoZSBzdGF0dXMgZnVuY3Rpb24uIFRoaXMgd291bGQgbWFrZSB0aGUgCmZ1 bmN0aW9uIGNvZGUgbW9yZSBjb21wbGV4LCBhbmQgSSB3b25kZXIgd2hldGhlciBhIHNob3J0Y3V0 IHdvdWxkIGJlIGEgZ29vZCAKaWRlYSwgcGVyaGFwcyBpbiB0aGUgZm9ybSBvZiBhIGZsYWcgaW4g dGhlIHJlcXVlc3QgdGhhdCB0ZWxscyB0aGUgVURDIHRvIAphdXRvbWF0aWNhbGx5IHByb2NlZWQg dG8gdGhlIHN0YXR1cyBzdGFnZSBpbW1lZGlhdGVseSBhZnRlciB0aGUgZGF0YSBzdGFnZS4gT3Ig CndlIGNvdWxkIG1ha2UgdGhhdCBiZWhhdmlvdXIgdGhlIGRlZmF1bHQgd2hlbiB0aGUgcmVxdWVz dCBkb2Vzbid0IGhhdmUgYSAKY29tcGxldGlvbiBoYW5kbGVyIChhcyBtb3ZpbmcgZXhwbGljaXRs eSB0byB0aGUgc3RhdHVzIHN0YWdlIHNob3VsZCBiZSBkb25lIGF0IAp0aGUgZWFybGllc3QgZnJv bSB0aGUgZGF0YSBzdGFnZSBjb21wbGV0aW9uIGhhbmRsZXIpLgoKPiA+IEZvciB0aG9zZSByZWFz b25zIEkgdGhpbmsgYSBuZXcgbWVjaGFuaXNtIGlzIG5lZWRlZC4gSXQgc2hvdWxkIGVpdGhlcgo+ ID4gc2lnbmFsIHRoZSBzdGF0dXMgcGhhc2UgZGVsYXkgdGhyb3VnaCBhbiBleHBsaWNpdCBmdW5j dGlvbiBjYWxsIGluc3RlYWQKPiA+IG9mIGEgcmV0dXJuIHZhbHVlICh0byBzb2x2ZSB0aGUgcmFj ZSBtZW50aW9uZWQgYWJvdmUpLCBvciBieSByZXF1aXJpbmcKPiA+IGFsbCByZXF1ZXN0cyB0byBi ZSBleHBsaWNpdGx5IGNvbXBsZXRlZCAoYnV0IHRoYXQgd2lsbCByZXF1aXJlIGNoYW5naW5nCj4g PiBhbGwgVVNCIGZ1bmN0aW9uIGRyaXZlcnMpLiBGdXJ0aGVybW9yZSwgdGhlIG1lY2hhbmlzbSBu ZWVkIHRvIHN1cHBvcnQKPiA+IGRlbGF5aW5nIHRoZSBzdGF0dXMgcGhhc2UgYWZ0ZXIgcXVldWlu ZyB0aGUgcmVxdWVzdCBmb3IgdGhlIGRhdGEgcGhhc2UsCj4gPiBzbyB3ZSBuZWVkIGFuIGV4cGxp Y2l0IHdheSB0byBzaWduYWwgdGhhdCB0aGUgVURDIHNob3VsZCBwcm9jZWVkIHdpdGggdGhlCj4g PiBzdGF0dXMgcGhhc2UsIG90aGVyIHRoYW4gcXVldWVpbmcgdGhlIHJlcXVlc3QuCj4gPiAKPiA+ IFRob3VnaHRzID8gUHJlZmVyZW5jZXMgPwo+IAo+IGhvdyBhYm91dCBtYWtpbmcgc3RhdHVzIHN0 YWdlIGFsd2F5cyBleHBsaWNpdD8KCklmIHdlIGltcGxlbWVudCBhIHByb29mIG9mIGNvbmNlcHQs IGNvdWxkIHlvdSBoZWxwIHVzIGNvbnZlcnRpbmcgZHJpdmVycyBvdmVyIAp0byB0aGUgbmV3IEFQ SSA/IEknbGwgYXNzdW1lIHdlJ2xsIGhhdmUgdG8gYWRkcmVzcyBhbGwgVURDcyBmaXJzdCwgYW5k IHRoZW4gCnRoZSBmdW5jdGlvbiBkcml2ZXJzLgo=