From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v2 1/3] [RESEND] ring.h: introduce macros to handle monodirectional rings with multiple req sizes Date: Mon, 20 Mar 2017 10:49:21 -0700 Message-ID: <1490032163-21657-1-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cq1Qx-000245-4K for xen-devel@lists.xenproject.org; Mon, 20 Mar 2017 17:49:31 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , sstabellini@kernel.org List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG1hY3Jvcywgc3RydWN0cyBhbmQgZnVuY3Rpb25zIHRvIGhh bmRsZSByaW5ncyBpbgp0aGUgZm9ybWF0IGRlc2NyaWJlZCBieSBkb2NzL21pc2MvcHZjYWxscy5t YXJrZG93biBhbmQKZG9jcy9taXNjLzlwZnMubWFya2Rvd24uIFRoZSBpbmRleCBwYWdlIChzdHJ1 Y3QgX19uYW1lIyNfZGF0YV9pbnRmKQpjb250YWlucyB0aGUgaW5kZXhlcyBhbmQgdGhlIGdyYW50 IHJlZnMgdG8gc2V0dXAgdHdvIHJpbmdzLgoKICAgICAgICAgICAgICAgSW5kZXhlcyBwYWdlCiAg ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgICAgICAgICAgICB8QDAg JE5BTUVfZGF0YV9pbnRmOiAgIHwKICAgICAgICAgICAgICAgfEA3NjogcmluZ19vcmRlciA9IDEg ICB8CiAgICAgICAgICAgICAgIHxAODA6IHJlZlswXSsgICAgICAgICAgfAogICAgICAgICAgICAg ICB8QDg0OiByZWZbMV0rICAgICAgICAgIHwKICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAg ICAgICAgICB8CiAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfAogICAgICAg ICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICB2IChkYXRhIHJpbmcpCiAgICAgICAgICAg ICAgICAgICArLS0tLS0tLSstLS0tLS0tLS0tLSsKICAgICAgICAgICAgICAgICAgIHwgIEAwLT40 MDk4OiBpbiAgICAgfAogICAgICAgICAgICAgICAgICAgfCAgcmVmWzBdICAgICAgICAgICB8CiAg ICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgICAgICAgICAg IHwgIEA0MDk5LT44MTk2OiBvdXQgfAogICAgICAgICAgICAgICAgICAgfCAgcmVmWzFdICAgICAg ICAgICB8CiAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsKCiROQU1FX3Jl YWRfcGFja2V0IGFuZCAkTkFNRV93cml0ZV9wYWNrZXQgYXJlIHByb3ZpZGVkIHRvIHJlYWQgb3Ig d3JpdGUKYW55IGRhdGEgc3RydWN0IGZyb20vdG8gdGhlIHJpbmcuIEluIHB2Y2FsbHMsIHRoZXkg YXJlIHVudXNlZC4gSW4geGVuCjlwZnMsIHRoZXkgYXJlIHVzZWQgdG8gcmVhZCBvciB3cml0ZSB0 aGUgOXBmcyBoZWFkZXIuIEluIG90aGVyIHByb3RvY29scwp0aGV5IGNvdWxkIGJlIHVzZWQgdG8g cmVhZC93cml0ZSB0aGUgd2hvbGUgcmVxdWVzdCBzdHJ1Y3R1cmUuIFNlZQpkb2NzL21pc2MvOXBm cy5tYXJrZG93bjpSaW5nIFVzYWdlIHRvIGxlYXJuIGhvdyB0byBjaGVjayBob3cgbXVjaCBkYXRh CmlzIG9uIHRoZSByaW5nLCBhbmQgaG93IHRvIGhhbmRsZSBub3RpZmljYXRpb25zLgoKVGhlcmUg aXMgYSByaW5nX3NpemUgcGFyYW1ldGVyIHRvIG1vc3QgZnVuY3Rpb25zIHNvIHRoYXQgcHJvdG9j b2xzIHVzaW5nCnRoZXNlIG1hY3JvcyBkb24ndCBoYXZlIHRvIGhhdmUgYSBzdGF0aWNhbGx5IGRl ZmluZWQgcmluZyBvcmRlciBhdCBidWlsZAp0aW1lLiBJbiBwdmNhbGxzIGZvciBleGFtcGxlLCBl YWNoIG5ldyByaW5nIGNvdWxkIGhhdmUgYSBkaWZmZXJlbnQKb3JkZXIuCgpUaGVzZSBtYWNyb3Mg ZG9uJ3QgaGVscCB5b3Ugc2hhcmUgdGhlIGluZGV4ZXMgcGFnZSBvciB0aGUgZXZlbnQgY2hhbm5l bHMKbmVlZGVkIGZvciBub3RpZmljYXRpb25zLiBZb3UgY2FuIGRvIHRoYXQgd2l0aCBvdGhlciBv dXQgb2YgYmFuZAptZWNoYW5pc21zLCBzdWNoIGFzIHhlbnN0b3JlIG9yIGFub3RoZXIgcmluZy4K Ckl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgYSBtYWNybyB0byBkZWZpbmUgYW5vdGhlciBtYWNy byB3aXRoIGEKdmFyaWFibGUgbmFtZS4gRm9yIHRoaXMgcmVhc29uLCB0aGlzIHBhdGNoIGludHJv ZHVjZXMgc3RhdGljIGlubGluZQpmdW5jdGlvbnMgaW5zdGVhZCwgdGhhdCBhcmUgbm90IEM4OSBj b21wbGlhbnQuIEFkZGl0aW9uYWxseSwgdGhlIG1hY3JvCmRlZmluZXMgYSBzdHJ1Y3Qgd2l0aCBh IHZhcmlhYmxlIHNpemVkIGFycmF5LCB3aGljaCBpcyBhbHNvIG5vdCBDODkKY29tcGxpYW50LgoK U2lnbmVkLW9mZi1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5vQGFwb3JldG8uY29tPgpD Qzoga29ucmFkLndpbGtAb3JhY2xlLmNvbQoKLS0tCkNoYW5nZXMgaW4gdjQ6Ci0gcmVtb3ZlIHBh Y2tldF90LCB1c2Ugdm9pZCogYW5kIHNpemUgaW5zdGVhZAoKQ2hhbmdlcyBpbiB2MzoKLSBtZW50 aW9uIEM4OSBjb21wbGlhbmNlIGJyZWFrYWdlcwotIGNvbnN0aWZ5IHBhcmFtZXRlcnMKLSB1c2Ug dW5zaWduZWQgY2hhcnMgZm9yIGJ1ZmZlcnMKLSBhZGQgdHdvIG1hY3Jvcywgb25lIGRvZXNuJ3Qg ZGVmaW5lIHRoZSBzdHJ1Y3QKCkNoYW5nZXMgaW4gdjI6Ci0gZml4IHR5cG8KLSByZW1vdmUgbGVh ZGluZyB1bmRlcnNjb3JlcyBmcm9tIG5hbWVzCi0gdXNlIFVMCi0gZG8gbm90IHBhcmVudGhlc2l6 ZSBwYXJhbWV0ZXJzCi0gY29kZSByZWFkYWJpbGl0eSBpbXByb3ZlbWVudHMKCkdpdmUgYSBsb29r IGF0IHRoZSBmb2xsb3dpbmcgYnJhbmNoIHRvIHNlZSBob3cgdGhleSBhcmUgdXNlZCB3aXRoCnB2 Y2FsbHMgYW5kIHhlbi05cGZzICh0aGUgZHJpdmVycyBhcmUgc3RpbGwgd29yayBpbiBwcm9ncmVz cyk6CgpnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvc3N0YWJl bGxpbmkveGVuLmdpdCA5cGZzLWFzeW5jLXY3Ci0tLQotLS0KIHhlbi9pbmNsdWRlL3B1YmxpYy9p by9yaW5nLmggfCAxMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMSBmaWxlIGNoYW5nZWQsIDEzMSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEveGVuL2lu Y2x1ZGUvcHVibGljL2lvL3JpbmcuaCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9pby9yaW5nLmgKaW5k ZXggODAxYzBkYS4uOGFjOWNhMyAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvcHVibGljL2lvL3Jp bmcuaAorKysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvaW8vcmluZy5oCkBAIC0zMTMsNiArMzEzLDEz NyBAQCB0eXBlZGVmIHN0cnVjdCBfX25hbWUjI19iYWNrX3JpbmcgX19uYW1lIyNfYmFja19yaW5n X3QKICAgICAoX3dvcmtfdG9fZG8pID0gUklOR19IQVNfVU5DT05TVU1FRF9SRVNQT05TRVMoX3Ip OyAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAKKworLyoKKyAqIERFRklORV9YRU5f RkxFWF9SSU5HX0FORF9JTlRGIGRlZmluZXMgdHdvIG1vbm9kaXJlY3Rpb25hbCByaW5ncyBhbmQK KyAqIGZ1bmN0aW9ucyB0byBjaGVjayBpZiB0aGVyZSBpcyBkYXRhIG9uIHRoZSByaW5nLCBhbmQg dG8gcmVhZCBhbmQKKyAqIHdyaXRlIHRvIHRoZW0uCisgKgorICogREVGSU5FX1hFTl9GTEVYX1JJ TkcgaXMgc2ltaWxhciB0byBERUZJTkVfWEVOX0ZMRVhfUklOR19BTkRfSU5URiwgYnV0CisgKiBk b2VzIG5vdCBkZWZpbmUgdGhlIGluZGV4ZXMgcGFnZS4gQXMgZGlmZmVyZW50IHByb3RvY29scyBj YW4gaGF2ZQorICogZXh0ZW5zaW9ucyB0byB0aGUgYmFzaWMgZm9ybWF0LCB0aGlzIG1hY3JvIGFs bG93IHRoZW0gdG8gZGVmaW5lIHRoZWlyCisgKiBvd24gc3RydWN0LgorICoKKyAqIFhFTl9GTEVY X1JJTkdfU0laRQorICogICBDb252ZW5pZW5jZSBtYWNybyB0byBjYWxjdWxhdGUgdGhlIHNpemUg b2Ygb25lIG9mIHRoZSB0d28gcmluZ3MKKyAqICAgZnJvbSB0aGUgb3ZlcmFsbCBvcmRlci4KKyAq CisgKiAkTkFNRV9tYXNrCisgKiAgIEZ1bmN0aW9uIHRvIGFwcGx5IHRoZSBzaXplIG1hc2sgdG8g YW4gaW5kZXgsIHRvIHJlZHVjZSB0aGUgaW5kZXgKKyAqICAgd2l0aGluIHRoZSByYW5nZSBbMC1z aXplXS4KKyAqCisgKiAkTkFNRV9yZWFkX3BhY2tldAorICogICBGdW5jdGlvbiB0byByZWFkIGRh dGEgZnJvbSB0aGUgcmluZy4gVGhlIGFtb3VudCBvZiBkYXRhIHRvIHJlYWQgaXMKKyAqICAgc3Bl Y2lmaWVkIGJ5IHRoZSAic2l6ZSIgYXJndW1lbnQuCisgKgorICogJE5BTUVfd3JpdGVfcGFja2V0 CisgKiAgIEZ1bmN0aW9uIHRvIHdyaXRlIGRhdGEgdG8gdGhlIHJpbmcuIFRoZSBhbW91bnQgb2Yg ZGF0YSB0byB3cml0ZSBpcworICogICBzcGVjaWZpZWQgYnkgdGhlICJzaXplIiBhcmd1bWVudC4K KyAqCisgKiAkTkFNRV9nZXRfcmluZ19wdHIKKyAqICAgQ29udmVuaWVuY2UgZnVuY3Rpb24gdGhh dCByZXR1cm5zIGEgcG9pbnRlciB0byByZWFkL3dyaXRlIHRvIHRoZQorICogICByaW5nIGF0IHRo ZSByaWdodCBsb2NhdGlvbi4KKyAqCisgKiAkTkFNRV9kYXRhX2ludGYKKyAqICAgSW5kZXhlcyBw YWdlLCBzaGFyZWQgYmV0d2VlbiBmcm9udGVuZCBhbmQgYmFja2VuZC4gSXQgYWxzbworICogICBj b250YWlucyB0aGUgYXJyYXkgb2YgZ3JhbnQgcmVmcy4KKyAqCisgKiAkTkFNRV9xdWV1ZWQKKyAq ICAgRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGhvdyBtYW55IGJ5dGVzIGFyZSBjdXJyZW50bHkgb24g dGhlIHJpbmcsCisgKiAgIHJlYWR5IHRvIGJlIHJlYWQuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8g Y2FsY3VsYXRlIGhvdyBtdWNoIGZyZWUKKyAqICAgc3BhY2UgaXMgY3VycmVudGx5IG9uIHRoZSBy aW5nIChyaW5nX3NpemUgLSAkTkFNRV9xdWV1ZWQoKSkuCisgKi8KKyNkZWZpbmUgWEVOX0ZMRVhf UklOR19TSVpFKG9yZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAoMVVMIDw8IChvcmRlciArIFBBR0VfU0hJRlQgLSAxKSkKKworI2RlZmluZSBE RUZJTkVfWEVOX0ZMRVhfUklOR19BTkRfSU5URihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorc3RydWN0IG5hbWUjI19kYXRhX2ludGYgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJJTkdfSURYIGluX2Nv bnMsIGluX3Byb2Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVpbnQ4X3QgcGFkMVs1Nl07ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIFJJTkdfSURYIG91dF9jb25zLCBvdXRfcHJvZDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIHVpbnQ4X3QgcGFkMls1Nl07ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIFJJTkdfSURYIHJpbmdfb3JkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGdyYW50X3JlZl90IHJlZltdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorREVGSU5FX1hFTl9GTEVYX1JJTkcobmFtZSk7CisKKyNkZWZpbmUg REVGSU5FX1hFTl9GTEVYX1JJTkcobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKK3N0YXRpYyBpbmxpbmUgUklOR19JRFggbmFtZSMjX21hc2soUklOR19J RFggaWR4LCBSSU5HX0lEWCByaW5nX3NpemUpICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICByZXR1cm4gKGlkeCAmIChyaW5nX3NpemUgLSAxKSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbmxpbmUgUklOR19JRFggbmFtZSMjX21hc2tf b3JkZXIoUklOR19JRFggaWR4LCBSSU5HX0lEWCByaW5nX29yZGVyKSAgIFwKK3sgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICByZXR1cm4gKGlkeCAmIChYRU5fRkxFWF9SSU5HX1NJWkUocmluZ19v cmRlcikgLSAxKSk7ICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciog bmFtZSMjX2dldF9yaW5nX3B0cih1bnNpZ25lZCBjaGFyICpidWYsICAgICAgICAgIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSSU5HX0lEWCBpZHgs ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSSU5HX0lEWCByaW5nX29yZGVyKSAgICAgICAgIFwKK3sgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICByZXR1cm4gYnVmICsgbmFtZSMjX21hc2tfb3JkZXIoaWR4LCByaW5nX29y ZGVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYW1lIyNfcmVhZF9w YWNrZXQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCAgICAgICAgICAgICAgIFwKKyAgICAgICAg UklOR19JRFggbWFza2VkX3Byb2QsIFJJTkdfSURYICptYXNrZWRfY29ucywgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgUklOR19JRFggcmluZ19zaXplLCB2b2lkICpvcGFxdWUs IHNpemVfdCBzaXplKSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKm1hc2tlZF9j b25zIDwgbWFza2VkX3Byb2QgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgIHNpemUgPD0gcmluZ19zaXplIC0gKm1hc2tlZF9jb25zKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWVtY3B5KG9wYXF1ZSwgYnVm ICsgKm1hc2tlZF9jb25zLCBzaXplKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWVtY3B5KG9wYXF1ZSwgYnVmICsgKm1hc2tl ZF9jb25zLCByaW5nX3NpemUgLSAqbWFza2VkX2NvbnMpOyAgICAgICAgIFwKKyAgICAgICAgbWVt Y3B5KCh1bnNpZ25lZCBjaGFyICopb3BhcXVlICsgcmluZ19zaXplIC0gKm1hc2tlZF9jb25zLCBi dWYsICAgICAgIFwKKyAgICAgICAgICAgICAgICBzaXplIC0gKHJpbmdfc2l6ZSAtICptYXNrZWRf Y29ucykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAqbWFza2VkX2NvbnMgPSBuYW1lIyNfbWFzaygqbWFza2VkX2NvbnMgKyBzaXplLCBy aW5nX3NpemUpOyAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbmxpbmUgdm9pZCBuYW1lIyNfd3JpdGVfcGFja2V0 KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUklOR19J RFggKm1hc2tlZF9wcm9kLCBSSU5HX0lEWCBtYXNrZWRfY29ucywgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgUklOR19JRFggcmluZ19zaXplLCBjb25zdCB2b2lkICpvcGFxdWUs IHNpemVfdCBzaXplKSB7ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKm1hc2tlZF9wcm9kIDwg bWFza2VkX2NvbnMgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgc2l6ZSA8PSByaW5nX3NpemUgLSAqbWFza2VkX3Byb2QpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWVtY3B5KGJ1ZiArICptYXNrZWRfcHJv ZCwgb3BhcXVlLCBzaXplKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgbWVtY3B5KGJ1ZiArICptYXNrZWRfcHJvZCwgb3BhcXVl LCByaW5nX3NpemUgLSAqbWFza2VkX3Byb2QpOyAgICAgICAgIFwKKyAgICAgICAgbWVtY3B5KGJ1 ZiwgKHVuc2lnbmVkIGNoYXIgKilvcGFxdWUgKyAocmluZ19zaXplIC0gKm1hc2tlZF9wcm9kKSwg ICAgIFwKKyAgICAgICAgICAgICAgICBzaXplIC0gKHJpbmdfc2l6ZSAtICptYXNrZWRfcHJvZCkp OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAqbWFza2VkX3Byb2QgPSBuYW1lIyNfbWFzaygqbWFza2VkX3Byb2QgKyBzaXplLCByaW5nX3Np emUpOyAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKK3N0cnVjdCBuYW1lIyNfZGF0YSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBjaGFyICpp bjsgLyogaGFsZiBvZiB0aGUgYWxsb2NhdGlvbiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICB1bnNpZ25lZCBjaGFyICpvdXQ7IC8qIGhhbGYgb2YgdGhlIGFsbG9jYXRpb24gKi8g ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbmxpbmUg UklOR19JRFggbmFtZSMjX3F1ZXVlZChSSU5HX0lEWCBwcm9kLCAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgUklOR19JRFggY29ucywgUklOR19JRFggcmluZ19zaXplKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICBSSU5HX0lEWCBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAo cHJvZCA9PSBjb25zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICBwcm9kID0gbmFtZSMjX21hc2socHJvZCwgcmluZ19zaXplKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb25zID0gbmFtZSMjX21hc2soY29u cywgcmluZ19zaXplKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocHJvZCA9PSBjb25zKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0 dXJuIHJpbmdfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocHJvZCA+IGNvbnMp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgc2l6ZSA9IHByb2QgLSBjb25zOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgc2l6ZSA9IHJpbmdfc2l6ZSAtIChjb25zIC0gcHJvZCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gc2l6ZTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisKICNlbmRpZiAv KiBfX1hFTl9QVUJMSUNfSU9fUklOR19IX18gKi8KIAogLyoKLS0gCjEuOS4xCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRl dmVsCg==