From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v7 03/24] libxc: Implementation of XEN_XSPLICE_op in libxc Date: Sun, 10 Apr 2016 17:14:35 -0400 Message-ID: <1460322896-1115-4-git-send-email-konrad.wilk@oracle.com> References: <1460322896-1115-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1apMhR-00084y-Ax for xen-devel@lists.xenproject.org; Sun, 10 Apr 2016 21:15:17 +0000 In-Reply-To: <1460322896-1115-1-git-send-email-konrad.wilk@oracle.com> 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, konrad@kernel.org, sasha.levin@oracle.com, andrew.cooper3@citrix.com, ross.lagerwall@citrix.com, mpohlack@amazon.de Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org VGhlIHVuZGVybGF5aW5nIHRvb2xzdGFjayBjb2RlIHRvIGRvIHRoZSBiYXNpYwpvcGVyYXRpb25z IHdoZW4gdXNpbmcgdGhlIFhFTl9YU1BMSUNFX29wIHN5c2NhbGxzOgogLSB1cGxvYWQgdGhlIHBh eWxvYWQsCiAtIGdldCBzdGF0dXMgb2YgYW4gcGF5bG9hZCwKIC0gbGlzdCBhbGwgdGhlIHBheWxv YWRzLAogLSBhcHBseSwgY2hlY2ssIHJlcGxhY2UsIGFuZCByZXZlcnQgdGhlIHBheWxvYWQuCgpT aWduZWQtb2ZmLWJ5OiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5j b20+ClNpZ25lZC1vZmYtYnk6IFJvc3MgTGFnZXJ3YWxsIDxyb3NzLmxhZ2Vyd2FsbEBjaXRyaXgu Y29tPgpBY2tlZC1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KUmV2aWV3ZWQtYnk6 IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+CgotLS0KQ2M6IElhbiBK YWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5p IDxzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbT4KQ2M6IFdlaSBMaXUgPHdlaS5saXUy QGNpdHJpeC5jb20+Cgp2MjogQWN0dWFsbHkgc2V0IHplcm8gZm9yIHRoZSBfcGFkIGVudHJpZXMu CnYzOiBTcGxpdCBzdGF0dXMgaW50byBzdGF0ZSBhbmQgZXJyb3IgY29kZS4KICAgIEFkZCBSRVBM QUNFIGFjdGlvbi4KIC0gVXNlIHRpbWVvdXQgYW5kIHV0aWxpemUgcGFkcy4KIC0gVXBkYXRlIHBl ciBXZWkncyByZXZpZXcuCiAtIEV4dHJhIHNwYWNlIHNsaXBwZWQgaW4sIHJlbW92ZSBpdAp2NDog QWRkIFdlaSdzIHJldmlldywgdXBkYXRlIGNvbW1lbnQgYW5kIEFjay4Kdjc6IFNwcmlua2xlIGVy cm5vPS1FSU5WQUwgb24gYWxsIHRoZSAnaWYgKCFsZW4pJywgZXRjIGNoZWNrcy4KICAgIEFkZGVk IFJldmlld2VkLWJ5IGZyb20gQW5kcmV3LgotLS0KLS0tCiB0b29scy9saWJ4Yy9pbmNsdWRlL3hl bmN0cmwuaCB8ICA2MiArKysrKysrKwogdG9vbHMvbGlieGMveGNfbWlzYy5jICAgICAgICAgfCAz NTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNo YW5nZWQsIDQxNyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMvaW5jbHVk ZS94ZW5jdHJsLmggYi90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwuaAppbmRleCBmNWEwMzRh Li5hNzkzN2ZhIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwuaAorKysg Yi90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwuaApAQCAtMjY0MCw2ICsyNjQwLDY4IEBAIGNv bnN0IHVpbnQzMl90ICp4Y19nZXRfZmVhdHVyZV9kZWVwX2RlcHModWludDMyX3QgZmVhdHVyZSk7 CiAKICNlbmRpZgogCitpbnQgeGNfeHNwbGljZV91cGxvYWQoeGNfaW50ZXJmYWNlICp4Y2gsCisg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqcGF5bG9hZCwg dWludDMyX3Qgc2l6ZSk7CisKK2ludCB4Y194c3BsaWNlX2dldCh4Y19pbnRlcmZhY2UgKnhjaCwK KyAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgIHhlbl94 c3BsaWNlX3N0YXR1c190ICpzdGF0dXMpOworCisvKgorICogVGhlIGhlYXJ0IG9mIHRoaXMgZnVu Y3Rpb24gaXMgdG8gZ2V0IGFuIGFycmF5IG9mIHhlbl94c3BsaWNlX3N0YXR1c190LgorICoKKyAq IEhvd2V2ZXIgaXQgaXMgY29tcGxleCBiZWNhdXNlIGl0IGhhcyB0byBkZWFsIHdpdGggdGhlIGh5 cGVydmlzb3IKKyAqIHJldHVybmluZyBzb21lIG9mIHRoZSByZXF1ZXN0ZWQgZGF0YSBvciBkYXRh IGJlaW5nIHN0YWxlCisgKiAoYW5vdGhlciBoeXBlcmNhbGwgbWlnaHQgYWx0ZXIgdGhlIGxpc3Qp LgorICoKKyAqIFRoZSBwYXJhbWV0ZXJzIHRoYXQgdGhlIGZ1bmN0aW9uIGV4cGVjdHMgdG8gY29u dGFpbiBkYXRhIGZyb20KKyAqIHRoZSBoeXBlcnZpc29yIGFyZTogJ2luZm8nLCAnbmFtZScsIGFu ZCAnbGVuJy4gVGhlICdkb25lJyBhbmQKKyAqICdsZWZ0JyBhcmUgYWxzbyB1cGRhdGVkIHdpdGgg dGhlIG51bWJlciBvZiBlbnRyaWVzIGZpbGxlZCBvdXQKKyAqIGFuZCByZXNwZWN0aXZlbHkgdGhl IG51bWJlciBvZiBlbnRyaWVzIGxlZnQgdG8gZ2V0IGZyb20gaHlwZXJ2aXNvci4KKyAqCisgKiBJ dCBpcyBleHBlY3RlZCB0aGF0IHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2Ug dGhlCisgKiAnbGVmdCcgYW5kIHVzZSB0aGUgdmFsdWUgZm9yICdzdGFydCcuIFRoaXMgd2F5IHdl IGhhdmUgYW4KKyAqIGN1cnNvciBpbiB0aGUgYXJyYXkuIE5vdGUgdGhhdCB0aGUgJ2luZm8nLCdu YW1lJywgYW5kICdsZW4nIHdpbGwKKyAqIGJlIHVwZGF0ZWQgYXQgdGhlIHN1YnNlcXVlbnQgY2Fs bHMuCisgKgorICogVGhlICdtYXgnIGlzIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIgd2l0 aCB0aGUgbWF4aW11bQorICogbnVtYmVyIG9mIGVudHJpZXMgdGhhdCAnaW5mbycsICduYW1lJywg YW5kICdsZW4nIGFycmF5cyBjYW4KKyAqIGJlIGZpbGxlZCB1cCB3aXRoLgorICoKKyAqIEVhY2gg ZW50cnkgaW4gdGhlICduYW1lJyBhcnJheSBpcyBleHBlY3RlZCB0byBiZSBvZiBYRU5fWFNQTElD RV9OQU1FX1NJWkUKKyAqIGxlbmd0aC4KKyAqCisgKiBFYWNoIGVudHJ5IGluIHRoZSAnaW5mbycg YXJyYXkgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgeGVuX3hzcGxpY2Vfc3RhdHVzX3QKKyAqIHN0cnVj dHVyZSBzaXplLgorICoKKyAqIEVhY2ggZW50cnkgaW4gdGhlICdsZW4nIGFycmF5IGlzIGV4cGVj dGVkIHRvIGJlIG9mIHVpbnQzMl90IHNpemUuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB6 ZXJvIGlmIHRoZSBoeXBlcmNhbGwgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4KKyAqIE5vdGUgdGhh dCB0aGUgcmV0dXJuIHZhbHVlIGlzIF9ub3RfIHRoZSBhbW91bnQgb2YgZW50cmllcyBmaWxsZWQK KyAqIG91dCAtIHRoYXQgaXMgc2F2ZWQgaW4gJ2RvbmUnLgorICoKKyAqIElmIHRoZXJlIHdhcyBh biBlcnJvciBwZXJmb3JtaW5nIHRoZSBvcGVyYXRpb24sIHRoZSByZXR1cm4gdmFsdWUKKyAqIHdp bGwgY29udGFpbiBhbiBuZWdhdGl2ZSAtRVhYIHR5cGUgdmFsdWUuIFRoZSAnZG9uZScgYW5kICds ZWZ0JworICogd2lsbCBjb250YWluIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGF0IGhhZCBiZWVu IHN1Y2Nlc2Z1bGx5CisgKiByZXRyaWV2ZWQgKGlmIGFueSkuCisgKi8KK2ludCB4Y194c3BsaWNl X2xpc3QoeGNfaW50ZXJmYWNlICp4Y2gsIHVuc2lnbmVkIGludCBtYXgsIHVuc2lnbmVkIGludCBz dGFydCwKKyAgICAgICAgICAgICAgICAgICAgeGVuX3hzcGxpY2Vfc3RhdHVzX3QgKmluZm8sIGNo YXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpsZW4sIHVuc2lnbmVkIGlu dCAqZG9uZSwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpsZWZ0KTsKKworLyoK KyAqIFRoZSBvcGVyYXRpb25zIGFyZSBhc3luY2hyb25vdXMgYW5kIHRoZSBoeXBlcnZpc29yIG1h eSB0YWtlIGEgd2hpbGUKKyAqIHRvIGNvbXBsZXRlIHRoZW0uIFRoZSBgdGltZW91dGAgb2ZmZXJz IGFuIG9wdGlvbiB0byBleHBpcmUgdGhlCisgKiBvcGVyYXRpb24gaWYgaXQgY291bGQgbm90IGJl IGNvbXBsZXRlZCB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lCisgKiAoaW4gbXMpLiBWYWx1ZSBv ZiAwIG1lYW5zIGxldCBoeXBlcnZpc29yIGRlY2lkZSB0aGUgYmVzdCB0aW1lb3V0LgorICovCitp bnQgeGNfeHNwbGljZV9hcHBseSh4Y19pbnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwgdWludDMy X3QgdGltZW91dCk7CitpbnQgeGNfeHNwbGljZV9yZXZlcnQoeGNfaW50ZXJmYWNlICp4Y2gsIGNo YXIgKm5hbWUsIHVpbnQzMl90IHRpbWVvdXQpOworaW50IHhjX3hzcGxpY2VfdW5sb2FkKHhjX2lu dGVyZmFjZSAqeGNoLCBjaGFyICpuYW1lLCB1aW50MzJfdCB0aW1lb3V0KTsKK2ludCB4Y194c3Bs aWNlX2NoZWNrKHhjX2ludGVyZmFjZSAqeGNoLCBjaGFyICpuYW1lLCB1aW50MzJfdCB0aW1lb3V0 KTsKK2ludCB4Y194c3BsaWNlX3JlcGxhY2UoeGNfaW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5hbWUs IHVpbnQzMl90IHRpbWVvdXQpOworCiAvKiBDb21wYXQgc2hpbXMgKi8KICNpbmNsdWRlICJ4ZW5j dHJsX2NvbXBhdC5oIgogCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y19taXNjLmMgYi90b29s cy9saWJ4Yy94Y19taXNjLmMKaW5kZXggN2Q5OTdkOS4uOGNkMzk4YiAxMDA2NDQKLS0tIGEvdG9v bHMvbGlieGMveGNfbWlzYy5jCisrKyBiL3Rvb2xzL2xpYnhjL3hjX21pc2MuYwpAQCAtNjk2LDYg KzY5NiwzNjEgQEAgaW50IHhjX2h2bV9pbmplY3RfdHJhcCgKICAgICByZXR1cm4gcmM7CiB9CiAK K2ludCB4Y194c3BsaWNlX3VwbG9hZCh4Y19pbnRlcmZhY2UgKnhjaCwKKyAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg KnBheWxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSkKK3sKKyAgICBp bnQgcmM7CisgICAgREVDTEFSRV9TWVNDVEw7CisgICAgREVDTEFSRV9IWVBFUkNBTExfQlVGRkVS KGNoYXIsIGxvY2FsKTsKKyAgICBERUNMQVJFX0hZUEVSQ0FMTF9CT1VOQ0UobmFtZSwgMCAvKiBs YXRlciAqLywgWENfSFlQRVJDQUxMX0JVRkZFUl9CT1VOQ0VfSU4pOworICAgIHhlbl94c3BsaWNl X25hbWVfdCBkZWZfbmFtZSA9IHsgLnBhZCA9IHsgMCwgMCwgMCB9IH07CisKKyAgICBpZiAoICFu YW1lIHx8ICFwYXlsb2FkICkKKyAgICB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAg ICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZGVmX25hbWUuc2l6ZSA9IHN0cmxlbihuYW1lKSAr IDE7CisgICAgaWYgKCBkZWZfbmFtZS5zaXplID4gWEVOX1hTUExJQ0VfTkFNRV9TSVpFICkKKyAg ICB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor CisgICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShuYW1lLCBkZWZfbmFtZS5zaXplKTsKKwor ICAgIGlmICggeGNfaHlwZXJjYWxsX2JvdW5jZV9wcmUoeGNoLCBuYW1lKSApCisgICAgICAgIHJl dHVybiAtMTsKKworICAgIGxvY2FsID0geGNfaHlwZXJjYWxsX2J1ZmZlcl9hbGxvYyh4Y2gsIGxv Y2FsLCBzaXplKTsKKyAgICBpZiAoICFsb2NhbCApCisgICAgeworICAgICAgICB4Y19oeXBlcmNh bGxfYm91bmNlX3Bvc3QoeGNoLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg ICBtZW1jcHkobG9jYWwsIHBheWxvYWQsIHNpemUpOworCisgICAgc3lzY3RsLmNtZCA9IFhFTl9T WVNDVExfeHNwbGljZV9vcDsKKyAgICBzeXNjdGwudS54c3BsaWNlLmNtZCA9IFhFTl9TWVNDVExf WFNQTElDRV9VUExPQUQ7CisgICAgc3lzY3RsLnUueHNwbGljZS5wYWQgPSAwOworICAgIHN5c2N0 bC51LnhzcGxpY2UudS51cGxvYWQuc2l6ZSA9IHNpemU7CisgICAgc2V0X3hlbl9ndWVzdF9oYW5k bGUoc3lzY3RsLnUueHNwbGljZS51LnVwbG9hZC5wYXlsb2FkLCBsb2NhbCk7CisKKyAgICBzeXNj dGwudS54c3BsaWNlLnUudXBsb2FkLm5hbWUgPSBkZWZfbmFtZTsKKyAgICBzZXRfeGVuX2d1ZXN0 X2hhbmRsZShzeXNjdGwudS54c3BsaWNlLnUudXBsb2FkLm5hbWUubmFtZSwgbmFtZSk7CisKKyAg ICByYyA9IGRvX3N5c2N0bCh4Y2gsICZzeXNjdGwpOworCisgICAgeGNfaHlwZXJjYWxsX2J1ZmZl cl9mcmVlKHhjaCwgbG9jYWwpOworICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIG5h bWUpOworCisgICAgcmV0dXJuIHJjOworfQorCitpbnQgeGNfeHNwbGljZV9nZXQoeGNfaW50ZXJm YWNlICp4Y2gsCisgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAg ICAgICB4ZW5feHNwbGljZV9zdGF0dXNfdCAqc3RhdHVzKQoreworICAgIGludCByYzsKKyAgICBE RUNMQVJFX1NZU0NUTDsKKyAgICBERUNMQVJFX0hZUEVSQ0FMTF9CT1VOQ0UobmFtZSwgMCAvKmFk anVzdCBsYXRlciAqLywgWENfSFlQRVJDQUxMX0JVRkZFUl9CT1VOQ0VfSU4pOworICAgIHhlbl94 c3BsaWNlX25hbWVfdCBkZWZfbmFtZSA9IHsgLnBhZCA9IHsgMCwgMCwgMCB9IH07CisKKyAgICBp ZiAoICFuYW1lICkKKyAgICB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1 cm4gLTE7CisgICAgfQorCisgICAgZGVmX25hbWUuc2l6ZSA9IHN0cmxlbihuYW1lKSArIDE7Cisg ICAgaWYgKCBkZWZfbmFtZS5zaXplID4gWEVOX1hTUExJQ0VfTkFNRV9TSVpFICkKKyAgICB7Cisg ICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg SFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShuYW1lLCBkZWZfbmFtZS5zaXplKTsKKworICAgIGlm ICggeGNfaHlwZXJjYWxsX2JvdW5jZV9wcmUoeGNoLCBuYW1lKSApCisgICAgICAgIHJldHVybiAt MTsKKworICAgIHN5c2N0bC5jbWQgPSBYRU5fU1lTQ1RMX3hzcGxpY2Vfb3A7CisgICAgc3lzY3Rs LnUueHNwbGljZS5jbWQgPSBYRU5fU1lTQ1RMX1hTUExJQ0VfR0VUOworICAgIHN5c2N0bC51Lnhz cGxpY2UucGFkID0gMDsKKworICAgIHN5c2N0bC51LnhzcGxpY2UudS5nZXQuc3RhdHVzLnN0YXRl ID0gMDsKKyAgICBzeXNjdGwudS54c3BsaWNlLnUuZ2V0LnN0YXR1cy5yYyA9IDA7CisKKyAgICBz eXNjdGwudS54c3BsaWNlLnUuZ2V0Lm5hbWUgPSBkZWZfbmFtZTsKKyAgICBzZXRfeGVuX2d1ZXN0 X2hhbmRsZShzeXNjdGwudS54c3BsaWNlLnUuZ2V0Lm5hbWUubmFtZSwgbmFtZSk7CisKKyAgICBy YyA9IGRvX3N5c2N0bCh4Y2gsICZzeXNjdGwpOworCisgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9w b3N0KHhjaCwgbmFtZSk7CisKKyAgICBtZW1jcHkoc3RhdHVzLCAmc3lzY3RsLnUueHNwbGljZS51 LmdldC5zdGF0dXMsIHNpemVvZigqc3RhdHVzKSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8q CisgKiBUaGUgaGVhcnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBnZXQgYW4gYXJyYXkgb2YgeGVu X3hzcGxpY2Vfc3RhdHVzX3QuCisgKgorICogSG93ZXZlciBpdCBpcyBjb21wbGV4IGJlY2F1c2Ug aXQgaGFzIHRvIGRlYWwgd2l0aCB0aGUgaHlwZXJ2aXNvcgorICogcmV0dXJuaW5nIHNvbWUgb2Yg dGhlIHJlcXVlc3RlZCBkYXRhIG9yIGRhdGEgYmVpbmcgc3RhbGUKKyAqIChhbm90aGVyIGh5cGVy Y2FsbCBtaWdodCBhbHRlciB0aGUgbGlzdCkuCisgKgorICogVGhlIHBhcmFtZXRlcnMgdGhhdCB0 aGUgZnVuY3Rpb24gZXhwZWN0cyB0byBjb250YWluIGRhdGEgZnJvbQorICogdGhlIGh5cGVydmlz b3IgYXJlOiAnaW5mbycsICduYW1lJywgYW5kICdsZW4nLiBUaGUgJ2RvbmUnIGFuZAorICogJ2xl ZnQnIGFyZSBhbHNvIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgZmlsbGVkIG91 dAorICogYW5kIHJlc3BlY3RpdmVseSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgbGVmdCB0byBnZXQg ZnJvbSBoeXBlcnZpc29yLgorICoKKyAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGNhbGxlciBv ZiB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSB0aGUKKyAqICdsZWZ0JyBhbmQgdXNlIHRoZSB2YWx1 ZSBmb3IgJ3N0YXJ0Jy4gVGhpcyB3YXkgd2UgaGF2ZSBhbgorICogY3Vyc29yIGluIHRoZSBhcnJh eS4gTm90ZSB0aGF0IHRoZSAnaW5mbycsJ25hbWUnLCBhbmQgJ2xlbicgd2lsbAorICogYmUgdXBk YXRlZCBhdCB0aGUgc3Vic2VxdWVudCBjYWxscy4KKyAqCisgKiBUaGUgJ21heCcgaXMgdG8gYmUg cHJvdmlkZWQgYnkgdGhlIGNhbGxlciB3aXRoIHRoZSBtYXhpbXVtCisgKiBudW1iZXIgb2YgZW50 cmllcyB0aGF0ICdpbmZvJywgJ25hbWUnLCBhbmQgJ2xlbicgYXJyYXlzIGNhbgorICogYmUgZmls bGVkIHVwIHdpdGguCisgKgorICogRWFjaCBlbnRyeSBpbiB0aGUgJ25hbWUnIGFycmF5IGlzIGV4 cGVjdGVkIHRvIGJlIG9mIFhFTl9YU1BMSUNFX05BTUVfU0laRQorICogbGVuZ3RoLgorICoKKyAq IEVhY2ggZW50cnkgaW4gdGhlICdpbmZvJyBhcnJheSBpcyBleHBlY3RlZCB0byBiZSBvZiB4ZW5f eHNwbGljZV9zdGF0dXNfdAorICogc3RydWN0dXJlIHNpemUuCisgKgorICogRWFjaCBlbnRyeSBp biB0aGUgJ2xlbicgYXJyYXkgaXMgZXhwZWN0ZWQgdG8gYmUgb2YgdWludDMyX3Qgc2l6ZS4KKyAq CisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHplcm8gaWYgdGhlIGh5cGVyY2FsbCBjb21wbGV0ZWQg c3VjY2Vzc2Z1bGx5LgorICogTm90ZSB0aGF0IHRoZSByZXR1cm4gdmFsdWUgaXMgX25vdF8gdGhl IGFtb3VudCBvZiBlbnRyaWVzIGZpbGxlZAorICogb3V0IC0gdGhhdCBpcyBzYXZlZCBpbiAnZG9u ZScuCisgKgorICogSWYgdGhlcmUgd2FzIGFuIGVycm9yIHBlcmZvcm1pbmcgdGhlIG9wZXJhdGlv biwgdGhlIHJldHVybiB2YWx1ZQorICogd2lsbCBjb250YWluIGFuIG5lZ2F0aXZlIC1FWFggdHlw ZSB2YWx1ZS4gVGhlICdkb25lJyBhbmQgJ2xlZnQnCisgKiB3aWxsIGNvbnRhaW4gdGhlIG51bWJl ciBvZiBlbnRyaWVzIHRoYXQgaGFkIGJlZW4gc3VjY2VzZnVsbHkKKyAqIHJldHJpZXZlZCAoaWYg YW55KS4KKyAqLworaW50IHhjX3hzcGxpY2VfbGlzdCh4Y19pbnRlcmZhY2UgKnhjaCwgdW5zaWdu ZWQgaW50IG1heCwgdW5zaWduZWQgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICB4ZW5f eHNwbGljZV9zdGF0dXNfdCAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwg dWludDMyX3QgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkb25lLAor ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmxlZnQpCit7CisgICAgaW50IHJjOwor ICAgIERFQ0xBUkVfU1lTQ1RMOworICAgIC8qIFRoZSBzaXplcyBhcmUgYWRqdXN0ZWQgbGF0ZXIg LSBoZW5jZSB6ZXJvLiAqLworICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JPVU5DRShpbmZvLCAwLCBY Q19IWVBFUkNBTExfQlVGRkVSX0JPVU5DRV9PVVQpOworICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JP VU5DRShuYW1lLCAwLCBYQ19IWVBFUkNBTExfQlVGRkVSX0JPVU5DRV9PVVQpOworICAgIERFQ0xB UkVfSFlQRVJDQUxMX0JPVU5DRShsZW4sIDAsIFhDX0hZUEVSQ0FMTF9CVUZGRVJfQk9VTkNFX09V VCk7CisgICAgdWludDMyX3QgbWF4X2JhdGNoX3N6LCBucjsKKyAgICB1aW50MzJfdCB2ZXJzaW9u ID0gMCwgcmV0cmllcyA9IDA7CisgICAgdWludDMyX3QgYWRqdXN0ID0gMDsKKyAgICBzc2l6ZV90 IHN6OworCisgICAgaWYgKCAhbWF4IHx8ICFpbmZvIHx8ICFuYW1lIHx8ICFsZW4gKQorICAgIHsK KyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAg ICBzeXNjdGwuY21kID0gWEVOX1NZU0NUTF94c3BsaWNlX29wOworICAgIHN5c2N0bC51LnhzcGxp Y2UuY21kID0gWEVOX1NZU0NUTF9YU1BMSUNFX0xJU1Q7CisgICAgc3lzY3RsLnUueHNwbGljZS5w YWQgPSAwOworICAgIHN5c2N0bC51LnhzcGxpY2UudS5saXN0LnZlcnNpb24gPSAwOworICAgIHN5 c2N0bC51LnhzcGxpY2UudS5saXN0LmlkeCA9IHN0YXJ0OworICAgIHN5c2N0bC51LnhzcGxpY2Uu dS5saXN0LnBhZCA9IDA7CisKKyAgICBtYXhfYmF0Y2hfc3ogPSBtYXg7CisgICAgLyogQ29udmll bmNlIHZhbHVlLiAqLworICAgIHN6ID0gc2l6ZW9mKCpuYW1lKSAqIFhFTl9YU1BMSUNFX05BTUVf U0laRTsKKyAgICAqZG9uZSA9IDA7CisgICAgKmxlZnQgPSAwOworICAgIGRvIHsKKyAgICAgICAg LyoKKyAgICAgICAgICogVGhlIGZpcnN0IHRpbWUgd2UgZ28gaW4gdGhpcyBsb29wIG91ciAnbWF4 JyBtYXkgYmUgYmlnZ2VyCisgICAgICAgICAqIHRoYW4gd2hhdCB0aGUgaHlwZXJ2aXNvciBpcyBj b21mb3J0YWJsZSB3aXRoIC0gaGVuY2UgdGhlIGZpcnN0CisgICAgICAgICAqIGNvdXBsZSBvZiBs b29wcyBtYXkgYWRqdXN0IHRoZSBudW1iZXIgb2YgZW50cmllcyB3ZSB3aWxsCisgICAgICAgICAq IHdhbnQgZmlsbGVkICh0cmFja2VkIGJ5ICducicpLgorICAgICAgICAgKgorICAgICAgICAgKiBO LkIuIFRoaXMgaXMgYSBkbyB7IH0gd2hpbGUgbG9vcCBhbmQgdGhlIHJpZ2h0IGhhbmQgc2lkZSBv ZgorICAgICAgICAgKiB0aGUgY29uZGl0aW9uYWwgd2hlbiBhZGp1c3Rpbmcgd2lsbCBldmFsdWF0 ZSB0byBmYWxzZSAoYXMKKyAgICAgICAgICogKmxlZnQgaXMgc2V0IHRvIHplcm8gYmVmb3JlIHRo ZSBsb29wLiBIZW5jZSB3ZSBuZWVkIHRoaXMKKyAgICAgICAgICogYWRqdXN0IC0gZXZlbiBpZiB3 ZSByZXNldCBpdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxvb3AuCisgICAgICAgICAqLworICAgICAg ICBpZiAoIGFkanVzdCApCisgICAgICAgICAgICBhZGp1c3QgPSAwOyAvKiBVc2VkIHdoZW4gYWRq dXN0aW5nIHRoZSAnbWF4X2JhdGNoX3N6JyBvciAncmV0cmllcycuICovCisKKyAgICAgICAgbnIg PSBtaW4obWF4IC0gKmRvbmUsIG1heF9iYXRjaF9zeik7CisKKyAgICAgICAgc3lzY3RsLnUueHNw bGljZS51Lmxpc3QubnIgPSBucjsKKyAgICAgICAgLyogRml4IHRoZSBzaXplIChtYXkgdmFyeSBi ZXR3ZWVuIGh5cGVyY2FsbHMpLiAqLworICAgICAgICBIWVBFUkNBTExfQk9VTkNFX1NFVF9TSVpF KGluZm8sIG5yICogc2l6ZW9mKCppbmZvKSk7CisgICAgICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VU X1NJWkUobmFtZSwgbnIgKiBucik7CisgICAgICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUo bGVuLCBuciAqIHNpemVvZigqbGVuKSk7CisgICAgICAgIC8qIE1vdmUgdGhlIHBvaW50ZXIgdG8g cHJvcGVyIG9mZnNldCBpbnRvICdpbmZvJy4gKi8KKyAgICAgICAgKEhZUEVSQ0FMTF9CVUZGRVIo aW5mbykpLT51YnVmID0gaW5mbyArICpkb25lOworICAgICAgICAoSFlQRVJDQUxMX0JVRkZFUihu YW1lKSktPnVidWYgPSBuYW1lICsgKHN6ICogKmRvbmUpOworICAgICAgICAoSFlQRVJDQUxMX0JV RkZFUihsZW4pKS0+dWJ1ZiA9IGxlbiArICpkb25lOworICAgICAgICAvKiBBbGxvY2F0ZSBtZW1v cnkuICovCisgICAgICAgIHJjID0geGNfaHlwZXJjYWxsX2JvdW5jZV9wcmUoeGNoLCBpbmZvKTsK KyAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByYyA9IHhj X2h5cGVyY2FsbF9ib3VuY2VfcHJlKHhjaCwgbmFtZSk7CisgICAgICAgIGlmICggcmMgKQorICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcmMgPSB4Y19oeXBlcmNhbGxfYm91bmNlX3ByZSh4 Y2gsIGxlbik7CisgICAgICAgIGlmICggcmMgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUoc3lzY3RsLnUueHNwbGljZS51Lmxpc3Quc3RhdHVzLCBp bmZvKTsKKyAgICAgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUoc3lzY3RsLnUueHNwbGljZS51Lmxp c3QubmFtZSwgbmFtZSk7CisgICAgICAgIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKHN5c2N0bC51Lnhz cGxpY2UudS5saXN0LmxlbiwgbGVuKTsKKworICAgICAgICByYyA9IGRvX3N5c2N0bCh4Y2gsICZz eXNjdGwpOworICAgICAgICAvKgorICAgICAgICAgKiBGcm9tIGhlcmUgb24gd2UgTVVTVCBjYWxs IHhjX2h5cGVyY2FsbF9ib3VuY2UuIElmIHJjIDwgMCB3ZQorICAgICAgICAgKiBlbmQgdXAgZG9p bmcgaXQgKG91dHNpZGUgdGhlIGxvb3ApLCBzbyB1c2luZyBhIGJyZWFrIGlzIE9LLgorICAgICAg ICAgKi8KKyAgICAgICAgaWYgKCByYyA8IDAgJiYgZXJybm8gPT0gRTJCSUcgKQorICAgICAgICB7 CisgICAgICAgICAgICBpZiAoIG1heF9iYXRjaF9zeiA8PSAxICkKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIG1heF9iYXRjaF9zeiA+Pj0gMTsKKyAgICAgICAgICAgIGFkanVz dCA9IDE7IC8qIEZvciB0aGUgbG9vcCBjb25kaXRpb25hbCB0byBsZXQgdXMgbG9vcCBhZ2Fpbi4g Ki8KKyAgICAgICAgICAgIC8qIE5vIG1lbW9yeSBsZWFrcyEgKi8KKyAgICAgICAgICAgIHhjX2h5 cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIGluZm8pOworICAgICAgICAgICAgeGNfaHlwZXJjYWxs X2JvdW5jZV9wb3N0KHhjaCwgbmFtZSk7CisgICAgICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNl X3Bvc3QoeGNoLCBsZW4pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZSBpZiAoIHJjIDwgMCApIC8qIEZvciBhbGwgb3RoZXIgZXJyb3JzIHdlIGJhaWwgb3V0 LiAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCAhdmVyc2lvbiApCisgICAg ICAgICAgICB2ZXJzaW9uID0gc3lzY3RsLnUueHNwbGljZS51Lmxpc3QudmVyc2lvbjsKKworICAg ICAgICBpZiAoIHN5c2N0bC51LnhzcGxpY2UudS5saXN0LnZlcnNpb24gIT0gdmVyc2lvbiApCisg ICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdlIGNvdWxkIG1ha2UgdGhpcyBjb25maWd1cmFibGUg YXMgcGFyYW1ldGVyPyAqLworICAgICAgICAgICAgaWYgKCByZXRyaWVzKysgPiAzICkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgIGVycm5v ID0gRUJVU1k7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICAqZG9uZSA9IDA7IC8qIFJldHJ5IGZyb20gc2NyYXRjaC4gKi8KKyAgICAgICAgICAgIHZl cnNpb24gPSBzeXNjdGwudS54c3BsaWNlLnUubGlzdC52ZXJzaW9uOworICAgICAgICAgICAgYWRq dXN0ID0gMTsgLyogQW5kIG1ha2Ugc3VyZSB3ZSBjb250aW51ZSBpbiB0aGUgbG9vcC4gKi8KKyAg ICAgICAgICAgIC8qIE5vIG1lbW9yeSBsZWFrcy4gKi8KKyAgICAgICAgICAgIHhjX2h5cGVyY2Fs bF9ib3VuY2VfcG9zdCh4Y2gsIGluZm8pOworICAgICAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5j ZV9wb3N0KHhjaCwgbmFtZSk7CisgICAgICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3Qo eGNoLCBsZW4pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAv KiBXZSBzaG91bGQgbmV2ZXIgaGl0IHRoaXMsIGJ1dCBqdXN0IGluIGNhc2UuICovCisgICAgICAg IGlmICggcmMgPiBuciApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm5vID0gRU9WRVJGTE9X OyAvKiBPdmVyZmxvdyEgKi8KKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorICAgICAgICAqbGVmdCA9IHN5c2N0bC51LnhzcGxpY2UudS5saXN0Lm5y OyAvKiBUb3RhbCByZW1haW5pbmcgY291bnQuICovCisgICAgICAgIC8qIENvcHkgb25seSB1cCAn cmMnIG9mIGRhdGEnIC0gd2UgY291bGQgYWRkICdtaW4ocmMsbnIpIGlmIGRlc2lyZWQuICovCisg ICAgICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUoaW5mbywgKHJjICogc2l6ZW9mKCppbmZv KSkpOworICAgICAgICBIWVBFUkNBTExfQk9VTkNFX1NFVF9TSVpFKG5hbWUsIChyYyAqIHN6KSk7 CisgICAgICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUobGVuLCAocmMgKiBzaXplb2YoKmxl bikpKTsKKyAgICAgICAgLyogQm91bmNlIHRoZSBkYXRhIGFuZCBmcmVlIHRoZSBib3VuY2UgYnVm ZmVyLiAqLworICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBpbmZvKTsKKyAg ICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgbmFtZSk7CisgICAgICAgIHhjX2h5 cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIGxlbik7CisgICAgICAgIC8qIEFuZCB1cGRhdGUgaG93 IG1hbnkgZWxlbWVudHMgb2YgaW5mbyB3ZSBoYXZlIGNvcGllZCBpbnRvLiAqLworICAgICAgICAq ZG9uZSArPSByYzsKKyAgICAgICAgLyogVXBkYXRlIGlkeC4gKi8KKyAgICAgICAgc3lzY3RsLnUu eHNwbGljZS51Lmxpc3QuaWR4ID0gKmRvbmU7CisgICAgfSB3aGlsZSAoIGFkanVzdCB8fCAoKmRv bmUgPCBtYXggJiYgKmxlZnQgIT0gMCkgKTsKKworICAgIGlmICggcmMgPCAwICkKKyAgICB7Cisg ICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIGxlbik7CisgICAgICAgIHhjX2h5 cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIG5hbWUpOworICAgICAgICB4Y19oeXBlcmNhbGxfYm91 bmNlX3Bvc3QoeGNoLCBpbmZvKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJj OworfQorCitzdGF0aWMgaW50IF94Y194c3BsaWNlX2FjdGlvbih4Y19pbnRlcmZhY2UgKnhjaCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWN0aW9uLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDMyX3QgdGltZW91dCkKK3sKKyAgICBpbnQgcmM7CisgICAgREVDTEFS RV9TWVNDVEw7CisgICAgLyogVGhlIHNpemUgaXMgZmlndXJlZCBvdXQgd2hlbiB3ZSBzdHJsZW4o bmFtZSkgKi8KKyAgICBERUNMQVJFX0hZUEVSQ0FMTF9CT1VOQ0UobmFtZSwgMCwgWENfSFlQRVJD QUxMX0JVRkZFUl9CT1VOQ0VfSU4pOworICAgIHhlbl94c3BsaWNlX25hbWVfdCBkZWZfbmFtZSA9 IHsgLnBhZCA9IHsgMCwgMCwgMCB9IH07CisKKyAgICBkZWZfbmFtZS5zaXplID0gc3RybGVuKG5h bWUpICsgMTsKKworICAgIGlmICggZGVmX25hbWUuc2l6ZSA+IFhFTl9YU1BMSUNFX05BTUVfU0la RSApCisgICAgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgIH0KKworICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUobmFtZSwgZGVmX25hbWUuc2l6 ZSk7CisKKyAgICBpZiAoIHhjX2h5cGVyY2FsbF9ib3VuY2VfcHJlKHhjaCwgbmFtZSkgKQorICAg ICAgICByZXR1cm4gLTE7CisKKyAgICBzeXNjdGwuY21kID0gWEVOX1NZU0NUTF94c3BsaWNlX29w OworICAgIHN5c2N0bC51LnhzcGxpY2UuY21kID0gWEVOX1NZU0NUTF9YU1BMSUNFX0FDVElPTjsK KyAgICBzeXNjdGwudS54c3BsaWNlLnBhZCA9IDA7CisgICAgc3lzY3RsLnUueHNwbGljZS51LmFj dGlvbi5jbWQgPSBhY3Rpb247CisgICAgc3lzY3RsLnUueHNwbGljZS51LmFjdGlvbi50aW1lb3V0 ID0gdGltZW91dDsKKworICAgIHN5c2N0bC51LnhzcGxpY2UudS5hY3Rpb24ubmFtZSA9IGRlZl9u YW1lOworICAgIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKHN5c2N0bC51LnhzcGxpY2UudS5hY3Rpb24u bmFtZS5uYW1lLCBuYW1lKTsKKworICAgIHJjID0gZG9fc3lzY3RsKHhjaCwgJnN5c2N0bCk7CisK KyAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBuYW1lKTsKKworICAgIHJldHVybiBy YzsKK30KKworaW50IHhjX3hzcGxpY2VfYXBwbHkoeGNfaW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5h bWUsIHVpbnQzMl90IHRpbWVvdXQpCit7CisgICAgcmV0dXJuIF94Y194c3BsaWNlX2FjdGlvbih4 Y2gsIG5hbWUsIFhTUExJQ0VfQUNUSU9OX0FQUExZLCB0aW1lb3V0KTsKK30KKworaW50IHhjX3hz cGxpY2VfcmV2ZXJ0KHhjX2ludGVyZmFjZSAqeGNoLCBjaGFyICpuYW1lLCB1aW50MzJfdCB0aW1l b3V0KQoreworICAgIHJldHVybiBfeGNfeHNwbGljZV9hY3Rpb24oeGNoLCBuYW1lLCBYU1BMSUNF X0FDVElPTl9SRVZFUlQsIHRpbWVvdXQpOworfQorCitpbnQgeGNfeHNwbGljZV91bmxvYWQoeGNf aW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5hbWUsIHVpbnQzMl90IHRpbWVvdXQpCit7CisgICAgcmV0 dXJuIF94Y194c3BsaWNlX2FjdGlvbih4Y2gsIG5hbWUsIFhTUExJQ0VfQUNUSU9OX1VOTE9BRCwg dGltZW91dCk7Cit9CisKK2ludCB4Y194c3BsaWNlX2NoZWNrKHhjX2ludGVyZmFjZSAqeGNoLCBj aGFyICpuYW1lLCB1aW50MzJfdCB0aW1lb3V0KQoreworICAgIHJldHVybiBfeGNfeHNwbGljZV9h Y3Rpb24oeGNoLCBuYW1lLCBYU1BMSUNFX0FDVElPTl9DSEVDSywgdGltZW91dCk7Cit9CisKK2lu dCB4Y194c3BsaWNlX3JlcGxhY2UoeGNfaW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5hbWUsIHVpbnQz Ml90IHRpbWVvdXQpCit7CisgICAgcmV0dXJuIF94Y194c3BsaWNlX2FjdGlvbih4Y2gsIG5hbWUs IFhTUExJQ0VfQUNUSU9OX1JFUExBQ0UsIHRpbWVvdXQpOworfQorCiAvKgogICogTG9jYWwgdmFy aWFibGVzOgogICogbW9kZTogQwotLSAKMi41LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=