From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jennifer Herbert Subject: Re: [PATCH RFC 07/20] migration: defer precopy policy to libxl Date: Wed, 29 Mar 2017 19:54:15 +0100 Message-ID: <58DC02D7.2030701@citrix.com> References: <1490605592-12189-1-git-send-email-jtotto@uwaterloo.ca> <1490605592-12189-8-git-send-email-jtotto@uwaterloo.ca> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 1ctIje-0002xv-4u for xen-devel@lists.xenproject.org; Wed, 29 Mar 2017 18:54:22 +0000 In-Reply-To: <1490605592-12189-8-git-send-email-jtotto@uwaterloo.ca> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Joshua Otto , xen-devel@lists.xenproject.org Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, czylin@uwaterloo.ca, imhy.yang@gmail.com, hjarmstr@uwaterloo.ca List-Id: xen-devel@lists.xenproject.org SGksCgpJIHdvdWxkIGxpa2UgdG8gZW5jb3VyYWdlIHRoaXMgcGF0Y2ggLSBhcyBJIGhhdmUgdXNl IGZvciBpdCBvdXRzaWRlCm9mIHlvdXIgcG9zdGNvcHkgd29yay4KClNvbWUgdGhpbmdzIHBlb3Bs ZSB3aWxsIGNvbW1lbnQgb246CllvdSd2ZSB1c2VkICd1bnNpZ25lZCcgd2l0aG91dCB0aGUgaW50 IGtleXdvcmQsIHdoaWNoIHBlb3BsZSBkb24ndCBsaWtlLgpBbHNvIG9uIGxpbmUgMzI0LCB5b3Vy IG1pc3Npbmcgc3BhY2UgYmV0d2VlbiAnaWYgKCcgYW5kIAonY3R4LT5zYXZlLnBvbGljeV9kZWNp c2lvbicuCgpBbHNvLCBJJ20gbm90IGEgZmFuIG9mIHlvdXIgQ09OU1VMVF9QT0xJQ1kgbWFjcm8s IHdoaWNoIHlvdSd2ZSBkZWZpbmVkIGF0CmEgb2RkIHBvaW50IGluIHlvdXIgZnVuY3Rpb24sIGFu ZCBJIHRoaW5rIGNvdWxkIGJlIGRvbmUgbW9yZSBlbGVnYW50bHkuCldvcnN0IG9mIGFsbCAuLi4g aXRzIGEgbWFjcm8gLSB3aGljaCBJIHRoaW5rIHNob3VsZCBnZW5lcmFsbHkgYmUgYXZvaWRlZCAK dW5sZXNzCnRoZXJlIGlzIGxpdHRsZSBjaG9pY2UuICAgSSdtIHN1cmUgeW91IGNvdWxkIHdyaXRl IGEgaGVscGVyIGZ1bmN0aW9uIHRvIApyZXBsYWNlIHRoaXMuCgpDaGVlcnMsCgotamVubnkKCk9u IDI3LzAzLzE3IDEwOjA2LCBKb3NodWEgT3R0byB3cm90ZToKPiBUaGUgcHJlY29weSBwaGFzZSBv ZiB0aGUgeGNfZG9tYWluX3NhdmUoKSBsaXZlIG1pZ3JhdGlvbiBhbGdvcml0aG0gaGFzCj4gaGlz dG9yaWNhbGx5IGJlZW4gaW1wbGVtZW50ZWQgdG8gcnVuIHVudGlsIGVpdGhlciBhKSAoYWxtb3N0 KSBubyBwYWdlcwo+IGFyZSBkaXJ0eSBvciBiKSBzb21lIGZpeGVkLCBoYXJkLWNvZGVkIG1heGlt dW0gbnVtYmVyIG9mIHByZWNvcHkKPiBpdGVyYXRpb25zIGhhcyBiZWVuIGV4Y2VlZGVkLiAgVGhp cyBwb2xpY3kgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhcmUKPiBsZXNzIHRoYW4gaWRlYWwgZm9y IGEgZmV3IHJlYXNvbnM6Cj4gLSB0aGUgbG9naWMgb2YgdGhlIHBvbGljeSBpcyBpbnRlcnR3aW5l ZCB3aXRoIHRoZSBjb250cm9sIGZsb3cgb2YgdGhlCj4gICAgbWVjaGFuaXNtIG9mIHRoZSBwcmVj b3B5IHN0YWdlCj4gLSBpdCBjYW4ndCB0YWtlIGludG8gYWNjb3VudCBmYWN0cyBleHRlcm5hbCB0 byB0aGUgaW1tZWRpYXRlCj4gICAgbWlncmF0aW9uIGNvbnRleHQsIHN1Y2ggYXMgaW50ZXJhY3Rp dmUgdXNlciBpbnB1dCBvciB0aGUgcGFzc2FnZSBvZgo+ICAgIHdhbGwtY2xvY2sgdGltZQo+IC0g aXQgZG9lcyBub3QgcGVybWl0IHRoZSB1c2VyIHRvIGNoYW5nZSB0aGVpciBtaW5kLCBvdmVyIHRp bWUsIGFib3V0Cj4gICAgd2hhdCB0byBkbyBhdCB0aGUgZW5kIG9mIHRoZSBwcmVjb3B5ICh0aGV5 IGdldCBhbiB1bmNvbmRpdGlvbmFsCj4gICAgdHJhbnNpdGlvbiBpbnRvIHRoZSBzdG9wLWFuZC1j b3B5IHBoYXNlIG9mIHRoZSBtaWdyYXRpb24pCj4KPiBUbyBwZXJtaXQgdXNlcnMgdG8gaW1wbGVt ZW50IGFyYml0cmFyeSBoaWdoZXItbGV2ZWwgcG9saWNpZXMgZ292ZXJuaW5nCj4gd2hlbiB0aGUg bGl2ZSBtaWdyYXRpb24gcHJlY29weSBwaGFzZSBzaG91bGQgZW5kLCBhbmQgd2hhdCBzaG91bGQg YmUKPiBkb25lIG5leHQ6Cj4gLSBhZGQgYSBwcmVjb3B5X3BvbGljeSgpIGNhbGxiYWNrIHRvIHRo ZSB4Y19kb21haW5fc2F2ZSgpIHVzZXItc3VwcGxpZWQKPiAgICBjYWxsYmFja3MKPiAtIGR1cmlu ZyB0aGUgcHJlY29weSBwaGFzZSBvZiBsaXZlIG1pZ3JhdGlvbnMsIGNvbnN1bHQgdGhpcyBwb2xp Y3kgYWZ0ZXIKPiAgICBlYWNoIGJhdGNoIG9mIHBhZ2VzIHRyYW5zbWl0dGVkIGFuZCB0YWtlIHRo ZSBkaWN0YXRlZCBhY3Rpb24sIHdoaWNoCj4gICAgbWF5IGJlIHRvIGEpIGFib3J0IHRoZSBtaWdy YXRpb24gZW50aXJlbHksIGIpIGNvbnRpbnVlIHdpdGggdGhlCj4gICAgcHJlY29weSwgb3IgYykg cHJvY2VlZCB0byB0aGUgc3RvcC1hbmQtY29weSBwaGFzZS4KPiAtIHByb3ZpZGUgYW4gaW1wbGVt ZW50YXRpb24gb2YgdGhlIG9sZCBwb2xpY3kgYXMgc3VjaCBhIGNhbGxiYWNrIGluCj4gICAgbGli eGwgYW5kIHBsdW1iIGl0IHRocm91Z2ggdGhlIElQQyBtYWNoaW5lcnkgdG8gbGlieGMsIGVmZmVj dGl2ZWx5Cj4gICAgbWFpbnRhaW5nIHRoZSBvbGQgcG9saWN5IGZvciBub3cKPgo+IFNpZ25lZC1v ZmYtYnk6IEpvc2h1YSBPdHRvIDxqdG90dG9AdXdhdGVybG9vLmNhPgo+IC0tLQo+ICAgdG9vbHMv bGlieGMvaW5jbHVkZS94ZW5ndWVzdC5oICAgICB8ICAyMyArKysrLQo+ICAgdG9vbHMvbGlieGMv eGNfbm9taWdyYXRlLmMgICAgICAgICB8ICAgMyArLQo+ICAgdG9vbHMvbGlieGMveGNfc3JfY29t bW9uLmggICAgICAgICB8ICAgNyArLQo+ICAgdG9vbHMvbGlieGMveGNfc3Jfc2F2ZS5jICAgICAg ICAgICB8IDE5NCArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4gICB0b29s cy9saWJ4bC9saWJ4bF9kb21fc2F2ZS5jICAgICAgIHwgIDIwICsrKysKPiAgIHRvb2xzL2xpYnhs L2xpYnhsX3NhdmVfY2FsbG91dC5jICAgfCAgIDMgKy0KPiAgIHRvb2xzL2xpYnhsL2xpYnhsX3Nh dmVfaGVscGVyLmMgICAgfCAgIDcgKy0KPiAgIHRvb2xzL2xpYnhsL2xpYnhsX3NhdmVfbXNnc19n ZW4ucGwgfCAgIDQgKy0KPiAgIDggZmlsZXMgY2hhbmdlZCwgMTg5IGluc2VydGlvbnMoKyksIDcy IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuZ3Vl c3QuaCBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuZ3Vlc3QuaAo+IGluZGV4IGFhOGNjOGIuLjMw ZmZiNmYgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5ndWVzdC5oCj4gKysr IGIvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5ndWVzdC5oCj4gQEAgLTM5LDYgKzM5LDE0IEBACj4g ICAgKi8KPiAgIHN0cnVjdCB4ZW5ldnRjaG5faGFuZGxlOwo+ICAgCj4gKy8qIEZvciBzYXZlJ3Mg cHJlY29weV9wb2xpY3koKS4gKi8KPiArc3RydWN0IHByZWNvcHlfc3RhdHMKPiArewo+ICsgICAg dW5zaWduZWQgaXRlcmF0aW9uOwo+ICsgICAgdW5zaWduZWQgdG90YWxfd3JpdHRlbjsKPiArICAg IGxvbmcgZGlydHlfY291bnQ7IC8qIC0xIGlmIHVua25vd24gKi8KPiArfTsKPiArCj4gICAvKiBj YWxsYmFja3MgcHJvdmlkZWQgYnkgeGNfZG9tYWluX3NhdmUgKi8KPiAgIHN0cnVjdCBzYXZlX2Nh bGxiYWNrcyB7Cj4gICAgICAgLyogQ2FsbGVkIGFmdGVyIGV4cGlyYXRpb24gb2YgY2hlY2twb2lu dCBpbnRlcnZhbCwKPiBAQCAtNDYsNiArNTQsMTcgQEAgc3RydWN0IHNhdmVfY2FsbGJhY2tzIHsK PiAgICAgICAgKi8KPiAgICAgICBpbnQgKCpzdXNwZW5kKSh2b2lkKiBkYXRhKTsKPiAgIAo+ICsg ICAgLyogQ2FsbGVkIGFmdGVyIGV2ZXJ5IGJhdGNoIG9mIHBhZ2UgZGF0YSBzZW50IGR1cmluZyB0 aGUgcHJlY29weSBwaGFzZSBvZiBhCj4gKyAgICAgKiBsaXZlIG1pZ3JhdGlvbiB0byBhc2sgdGhl IGNhbGxlciB3aGF0IHRvIGRvIG5leHQgYmFzZWQgb24gdGhlIGN1cnJlbnQKPiArICAgICAqIHN0 YXRlIG9mIHRoZSBwcmVjb3B5IG1pZ3JhdGlvbi4KPiArICAgICAqLwo+ICsjZGVmaW5lIFhHU19Q T0xJQ1lfQUJPUlQgICAgICAgICAgKC0xKSAvKiBBYmFuZG9uIHRoZSBtaWdyYXRpb24gZW50aXJl bHkgYW5kCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRpZHkg dXAuICovCj4gKyNkZWZpbmUgWEdTX1BPTElDWV9DT05USU5VRV9QUkVDT1BZIDAgIC8qIFJlbWFp biBpbiB0aGUgcHJlY29weSBwaGFzZS4gKi8KPiArI2RlZmluZSBYR1NfUE9MSUNZX1NUT1BfQU5E X0NPUFkgICAgMSAgLyogSW1tZWRpYXRlbHkgc3VzcGVuZCBhbmQgdHJhbnNtaXQgdGhlCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlbWFpbmluZyBkaXJ0eSBw YWdlcy4gKi8KPiArICAgIGludCAoKnByZWNvcHlfcG9saWN5KShzdHJ1Y3QgcHJlY29weV9zdGF0 cyBzdGF0cywgdm9pZCAqZGF0YSk7Cj4gKwo+ICAgICAgIC8qIENhbGxlZCBhZnRlciB0aGUgZ3Vl c3QncyBkaXJ0eSBwYWdlcyBoYXZlIGJlZW4KPiAgICAgICAgKiAgY29waWVkIGludG8gYW4gb3V0 cHV0IGJ1ZmZlci4KPiAgICAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiByZXN1bWVzIHRoZSBndWVz dCAmIHRoZSBkZXZpY2UgbW9kZWwsCj4gQEAgLTEwMCw4ICsxMTksOCBAQCB0eXBlZGVmIGVudW0g ewo+ICAgICogICAgICAgIGRvZXNuJ3QgdXNlIGNoZWNrcG9pbnRpbmcKPiAgICAqIEByZXR1cm4g MCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlCj4gICAgKi8KPiAtaW50IHhjX2RvbWFpbl9zYXZl KHhjX2ludGVyZmFjZSAqeGNoLCBpbnQgaW9fZmQsIHVpbnQzMl90IGRvbSwgdWludDMyX3QgbWF4 X2l0ZXJzLAo+IC0gICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWF4X2ZhY3RvciwgdWludDMy X3QgZmxhZ3MgLyogWENGTEFHU194eHggKi8sCj4gK2ludCB4Y19kb21haW5fc2F2ZSh4Y19pbnRl cmZhY2UgKnhjaCwgaW50IGlvX2ZkLCB1aW50MzJfdCBkb20sCj4gKyAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBmbGFncyAvKiBYQ0ZMQUdTX3h4eCAqLywKPiAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc2F2ZV9jYWxsYmFja3MqIGNhbGxiYWNrcywgaW50IGh2bSwKPiAgICAgICAgICAg ICAgICAgICAgICB4Y19taWdyYXRpb25fc3RyZWFtX3Qgc3RyZWFtX3R5cGUsIGludCByZWN2X2Zk KTsKPiAgIAo+IGRpZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y19ub21pZ3JhdGUuYyBiL3Rvb2xz L2xpYnhjL3hjX25vbWlncmF0ZS5jCj4gaW5kZXggMTVjODM4Zi4uMmFmNjRlNCAxMDA2NDQKPiAt LS0gYS90b29scy9saWJ4Yy94Y19ub21pZ3JhdGUuYwo+ICsrKyBiL3Rvb2xzL2xpYnhjL3hjX25v bWlncmF0ZS5jCj4gQEAgLTIwLDggKzIwLDcgQEAKPiAgICNpbmNsdWRlIDx4ZW5jdHJsLmg+Cj4g ICAjaW5jbHVkZSA8eGVuZ3Vlc3QuaD4KPiAgIAo+IC1pbnQgeGNfZG9tYWluX3NhdmUoeGNfaW50 ZXJmYWNlICp4Y2gsIGludCBpb19mZCwgdWludDMyX3QgZG9tLCB1aW50MzJfdCBtYXhfaXRlcnMs Cj4gLSAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtYXhfZmFjdG9yLCB1aW50MzJfdCBmbGFn cywKPiAraW50IHhjX2RvbWFpbl9zYXZlKHhjX2ludGVyZmFjZSAqeGNoLCBpbnQgaW9fZmQsIHVp bnQzMl90IGRvbSwgdWludDMyX3QgZmxhZ3MsCj4gICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHNhdmVfY2FsbGJhY2tzKiBjYWxsYmFja3MsIGludCBodm0sCj4gICAgICAgICAgICAgICAgICAg ICAgeGNfbWlncmF0aW9uX3N0cmVhbV90IHN0cmVhbV90eXBlLCBpbnQgcmVjdl9mZCkKPiAgIHsK PiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfc3JfY29tbW9uLmggYi90b29scy9saWJ4Yy94 Y19zcl9jb21tb24uaAo+IGluZGV4IGIxYWE4OGUuLmE5MTYwYmQgMTAwNjQ0Cj4gLS0tIGEvdG9v bHMvbGlieGMveGNfc3JfY29tbW9uLmgKPiArKysgYi90b29scy9saWJ4Yy94Y19zcl9jb21tb24u aAo+IEBAIC0xOTgsMTIgKzE5OCwxMSBAQCBzdHJ1Y3QgeGNfc3JfY29udGV4dAo+ICAgICAgICAg ICAgICAgLyogRnVydGhlciBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gaW4gdGhlIHN0cmVhbS4gKi8K PiAgICAgICAgICAgICAgIGJvb2wgZGVidWc7Cj4gICAKPiAtICAgICAgICAgICAgLyogUGFyYW1l dGVycyBmb3IgdHdlYWtpbmcgbGl2ZSBtaWdyYXRpb24uICovCj4gLSAgICAgICAgICAgIHVuc2ln bmVkIG1heF9pdGVyYXRpb25zOwo+IC0gICAgICAgICAgICB1bnNpZ25lZCBkaXJ0eV90aHJlc2hv bGQ7Cj4gLQo+ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwMm1fc2l6ZTsKPiAgIAo+ICsg ICAgICAgICAgICBzdHJ1Y3QgcHJlY29weV9zdGF0cyBzdGF0czsKPiArICAgICAgICAgICAgaW50 IHBvbGljeV9kZWNpc2lvbjsKPiArCj4gICAgICAgICAgICAgICB4ZW5fcGZuX3QgKmJhdGNoX3Bm bnM7Cj4gICAgICAgICAgICAgICB1bnNpZ25lZCBucl9iYXRjaF9wZm5zOwo+ICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyAqZGVmZXJyZWRfcGFnZXM7Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xp YnhjL3hjX3NyX3NhdmUuYyBiL3Rvb2xzL2xpYnhjL3hjX3NyX3NhdmUuYwo+IGluZGV4IDc5N2Fl YzUuLmViOTUzMzQgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGMveGNfc3Jfc2F2ZS5jCj4gKysr IGIvdG9vbHMvbGlieGMveGNfc3Jfc2F2ZS5jCj4gQEAgLTI3MSwxMyArMjcxLDI5IEBAIHN0YXRp YyBpbnQgd3JpdGVfYmF0Y2goc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCkKPiAgIH0KPiAgIAo+ ICAgLyoKPiArICogVGVzdCBpZiB0aGUgYmF0Y2ggaXMgZnVsbC4KPiArICovCj4gK3N0YXRpYyBi b29sIGJhdGNoX2Z1bGwoc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCkKPiArewo+ICsgICAgcmV0 dXJuIGN0eC0+c2F2ZS5ucl9iYXRjaF9wZm5zID09IE1BWF9CQVRDSF9TSVpFOwo+ICt9Cj4gKwo+ ICsvKgo+ICsgKiBUZXN0IGlmIHRoZSBiYXRjaCBpcyBlbXB0eS4KPiArICovCj4gK3N0YXRpYyBi b29sIGJhdGNoX2VtcHR5KHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgpCj4gK3sKPiArICAgIHJl dHVybiBjdHgtPnNhdmUubnJfYmF0Y2hfcGZucyA9PSAwOwo+ICt9Cj4gKwo+ICsvKgo+ICAgICog Rmx1c2ggYSBiYXRjaCBvZiBwZm5zIGludG8gdGhlIHN0cmVhbS4KPiAgICAqLwo+ICAgc3RhdGlj IGludCBmbHVzaF9iYXRjaChzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4KQo+ICAgewo+ICAgICAg IGludCByYyA9IDA7Cj4gICAKPiAtICAgIGlmICggY3R4LT5zYXZlLm5yX2JhdGNoX3BmbnMgPT0g MCApCj4gKyAgICBpZiAoIGJhdGNoX2VtcHR5KGN0eCkgKQo+ICAgICAgICAgICByZXR1cm4gcmM7 Cj4gICAKPiAgICAgICByYyA9IHdyaXRlX2JhdGNoKGN0eCk7Cj4gQEAgLTI5MywxOSArMzA5LDEy IEBAIHN0YXRpYyBpbnQgZmx1c2hfYmF0Y2goc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCkKPiAg IH0KPiAgIAo+ICAgLyoKPiAtICogQWRkIGEgc2luZ2xlIHBmbiB0byB0aGUgYmF0Y2gsIGZsdXNo aW5nIHRoZSBiYXRjaCBpZiBmdWxsLgo+ICsgKiBBZGQgYSBzaW5nbGUgcGZuIHRvIHRoZSBiYXRj aC4KPiAgICAqLwo+IC1zdGF0aWMgaW50IGFkZF90b19iYXRjaChzdHJ1Y3QgeGNfc3JfY29udGV4 dCAqY3R4LCB4ZW5fcGZuX3QgcGZuKQo+ICtzdGF0aWMgdm9pZCBhZGRfdG9fYmF0Y2goc3RydWN0 IHhjX3NyX2NvbnRleHQgKmN0eCwgeGVuX3Bmbl90IHBmbikKPiAgIHsKPiAtICAgIGludCByYyA9 IDA7Cj4gLQo+IC0gICAgaWYgKCBjdHgtPnNhdmUubnJfYmF0Y2hfcGZucyA9PSBNQVhfQkFUQ0hf U0laRSApCj4gLSAgICAgICAgcmMgPSBmbHVzaF9iYXRjaChjdHgpOwo+IC0KPiAtICAgIGlmICgg cmMgPT0gMCApCj4gLSAgICAgICAgY3R4LT5zYXZlLmJhdGNoX3BmbnNbY3R4LT5zYXZlLm5yX2Jh dGNoX3BmbnMrK10gPSBwZm47Cj4gLQo+IC0gICAgcmV0dXJuIHJjOwo+ICsgICAgYXNzZXJ0KGN0 eC0+c2F2ZS5ucl9iYXRjaF9wZm5zIDwgTUFYX0JBVENIX1NJWkUpOwo+ICsgICAgY3R4LT5zYXZl LmJhdGNoX3BmbnNbY3R4LT5zYXZlLm5yX2JhdGNoX3BmbnMrK10gPSBwZm47Cj4gICB9Cj4gICAK PiAgIC8qCj4gQEAgLTM1MiwxMCArMzYxLDE1IEBAIHN0YXRpYyBpbnQgc3VzcGVuZF9kb21haW4o c3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCkKPiAgICAqIFNlbmQgYSBzdWJzZXQgb2YgcGFnZXMg aW4gdGhlIGd1ZXN0cyBwMm0sIGFjY29yZGluZyB0byB0aGUgZGlydHkgYml0bWFwLgo+ICAgICog VXNlZCBmb3IgZWFjaCBzdWJzZXF1ZW50IGl0ZXJhdGlvbiBvZiB0aGUgbGl2ZSBtaWdyYXRpb24g bG9vcC4KPiAgICAqCj4gKyAqIER1cmluZyB0aGUgcHJlY29weSBzdGFnZSBvZiBhIGxpdmUgbWln cmF0aW9uLCB0ZXN0IHRoZSB1c2VyLXN1cHBsaWVkCj4gKyAqIHBvbGljeSBmdW5jdGlvbiBhZnRl ciBlYWNoIGJhdGNoIG9mIHBhZ2VzIGFuZCBjdXQgb2ZmIHRoZSBvcGVyYXRpb24KPiArICogZWFy bHkgaWYgaW5kaWNhdGVkLiAgVW5sZXNzIGFib3J0aW5nLCB0aGUgZGlydHkgcGFnZXMgcmVtYWlu aW5nIGluIHRoaXMgcm91bmQKPiArICogYXJlIHRyYW5zZmVycmVkIGludG8gdGhlIGRlZmVycmVk X3BhZ2VzIGJpdG1hcC4KPiArICoKPiAgICAqIEJpdG1hcCBpcyBib3VuZGVkIGJ5IHAybV9zaXpl Lgo+ICAgICovCj4gICBzdGF0aWMgaW50IHNlbmRfZGlydHlfcGFnZXMoc3RydWN0IHhjX3NyX2Nv bnRleHQgKmN0eCwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg ZW50cmllcykKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZW50 cmllcywgYm9vbCBwcmVjb3B5KQo+ICAgewo+ICAgICAgIHhjX2ludGVyZmFjZSAqeGNoID0gY3R4 LT54Y2g7Cj4gICAgICAgeGVuX3Bmbl90IHA7Cj4gQEAgLTM2NCwzMSArMzc4LDU3IEBAIHN0YXRp YyBpbnQgc2VuZF9kaXJ0eV9wYWdlcyhzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4LAo+ICAgICAg IERFQ0xBUkVfSFlQRVJDQUxMX0JVRkZFUl9TSEFET1codW5zaWduZWQgbG9uZywgZGlydHlfYml0 bWFwLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+c2F2ZS5k aXJ0eV9iaXRtYXBfaGJ1Zik7Cj4gICAKPiAtICAgIGZvciAoIHAgPSAwLCB3cml0dGVuID0gMDsg cCA8IGN0eC0+c2F2ZS5wMm1fc2l6ZTsgKytwICkKPiArICAgIGludCAoKnByZWNvcHlfcG9saWN5 KShzdHJ1Y3QgcHJlY29weV9zdGF0cywgdm9pZCAqKSA9Cj4gKyAgICAgICAgY3R4LT5zYXZlLmNh bGxiYWNrcy0+cHJlY29weV9wb2xpY3k7Cj4gKyAgICB2b2lkICpkYXRhID0gY3R4LT5zYXZlLmNh bGxiYWNrcy0+ZGF0YTsKPiArCj4gKyAgICBhc3NlcnQoYmF0Y2hfZW1wdHkoY3R4KSk7Cj4gKyAg ICBmb3IgKCBwID0gMCwgd3JpdHRlbiA9IDA7IHAgPCBjdHgtPnNhdmUucDJtX3NpemU7ICkKPiAg ICAgICB7Cj4gLSAgICAgICAgaWYgKCAhdGVzdF9iaXQocCwgZGlydHlfYml0bWFwKSApCj4gLSAg ICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIGlmICggY3R4LT5zYXZlLmxpdmUgJiYgcHJl Y29weSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBjdHgtPnNhdmUucG9saWN5X2RlY2lz aW9uID0gcHJlY29weV9wb2xpY3koY3R4LT5zYXZlLnN0YXRzLCBkYXRhKTsKPiArICAgICAgICAg ICAgaWYgKCBjdHgtPnNhdmUucG9saWN5X2RlY2lzaW9uID09IFhHU19QT0xJQ1lfQUJPUlQgKQo+ ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cj4gKyAgICAgICAg ICAgIH0KPiArICAgICAgICAgICAgZWxzZSBpZiAoIGN0eC0+c2F2ZS5wb2xpY3lfZGVjaXNpb24g IT0gWEdTX1BPTElDWV9DT05USU5VRV9QUkVDT1BZICkKPiArICAgICAgICAgICAgewo+ICsgICAg ICAgICAgICAgICAgLyogQW55IG91dHN0YW5kaW5nIGRpcnR5IHBhZ2VzIGFyZSBub3cgZGVmZXJy ZWQgdW50aWwgdGhlIG5leHQKPiArICAgICAgICAgICAgICAgICAqIHBoYXNlIG9mIHRoZSBtaWdy YXRpb24uICovCj4gKyAgICAgICAgICAgICAgICBiaXRtYXBfb3IoY3R4LT5zYXZlLmRlZmVycmVk X3BhZ2VzLCBkaXJ0eV9iaXRtYXAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5z YXZlLnAybV9zaXplKTsKPiArICAgICAgICAgICAgICAgIGlmICggZW50cmllcyA+IHdyaXR0ZW4g KQo+ICsgICAgICAgICAgICAgICAgICAgIGN0eC0+c2F2ZS5ucl9kZWZlcnJlZF9wYWdlcyArPSBl bnRyaWVzIC0gd3JpdHRlbjsKPiArCj4gKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7Cj4gKyAg ICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gICAKPiAtICAgICAgICByYyA9IGFkZF90b19iYXRj aChjdHgsIHApOwo+ICsgICAgICAgIGZvciAoIDsgcCA8IGN0eC0+c2F2ZS5wMm1fc2l6ZSAmJiAh YmF0Y2hfZnVsbChjdHgpOyArK3AgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgaWYgKCB0 ZXN0X2FuZF9jbGVhcl9iaXQocCwgZGlydHlfYml0bWFwKSApCj4gKyAgICAgICAgICAgIHsKPiAr ICAgICAgICAgICAgICAgIGFkZF90b19iYXRjaChjdHgsIHApOwo+ICsgICAgICAgICAgICAgICAg Kyt3cml0dGVuOwo+ICsgICAgICAgICAgICAgICAgKytjdHgtPnNhdmUuc3RhdHMudG90YWxfd3Jp dHRlbjsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgcmMgPSBm bHVzaF9iYXRjaChjdHgpOwo+ICAgICAgICAgICBpZiAoIHJjICkKPiAgICAgICAgICAgICAgIHJl dHVybiByYzsKPiAgIAo+IC0gICAgICAgIC8qIFVwZGF0ZSBwcm9ncmVzcyBldmVyeSA0TUIgd29y dGggb2YgbWVtb3J5IHNlbnQuICovCj4gLSAgICAgICAgaWYgKCAod3JpdHRlbiAmICgoMVUgPDwg KDIyIC0gMTIpKSAtIDEpKSA9PSAwICkKPiAtICAgICAgICAgICAgeGNfcmVwb3J0X3Byb2dyZXNz X3N0ZXAoeGNoLCB3cml0dGVuLCBlbnRyaWVzKTsKPiAtCj4gLSAgICAgICAgKyt3cml0dGVuOwo+ ICsgICAgICAgIC8qIFVwZGF0ZSBwcm9ncmVzcyBhZnRlciBldmVyeSBiYXRjaCAoNE1CKSB3b3J0 aCBvZiBtZW1vcnkgc2VudC4gKi8KPiArICAgICAgICB4Y19yZXBvcnRfcHJvZ3Jlc3Nfc3RlcCh4 Y2gsIHdyaXR0ZW4sIGVudHJpZXMpOwo+ICAgICAgIH0KPiAgIAo+IC0gICAgcmMgPSBmbHVzaF9i YXRjaChjdHgpOwo+IC0gICAgaWYgKCByYyApCj4gLSAgICAgICAgcmV0dXJuIHJjOwo+IC0KPiAg ICAgICBpZiAoIHdyaXR0ZW4gPiBlbnRyaWVzICkKPiAgICAgICAgICAgRFBSSU5URigiQml0bWFw IGNvbnRhaW5lZCBtb3JlIGVudHJpZXMgdGhhbiBleHBlY3RlZC4uLiIpOwo+ICAgCj4gICAgICAg eGNfcmVwb3J0X3Byb2dyZXNzX3N0ZXAoeGNoLCBlbnRyaWVzLCBlbnRyaWVzKTsKPiAgIAo+ICsg ZG9uZToKPiAgICAgICByZXR1cm4gY3R4LT5zYXZlLm9wcy5jaGVja192bV9zdGF0ZShjdHgpOwo+ ICAgfQo+ICAgCj4gQEAgLTM5NiwxNCArNDM2LDE0IEBAIHN0YXRpYyBpbnQgc2VuZF9kaXJ0eV9w YWdlcyhzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4LAo+ICAgICogU2VuZCBhbGwgcGFnZXMgaW4g dGhlIGd1ZXN0cyBwMm0uICBVc2VkIGFzIHRoZSBmaXJzdCBpdGVyYXRpb24gb2YgdGhlIGxpdmUK PiAgICAqIG1pZ3JhdGlvbiBsb29wLCBhbmQgZm9yIGEgbm9uLWxpdmUgc2F2ZS4KPiAgICAqLwo+ IC1zdGF0aWMgaW50IHNlbmRfYWxsX3BhZ2VzKHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgpCj4g K3N0YXRpYyBpbnQgc2VuZF9hbGxfcGFnZXMoc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCwgYm9v bCBwcmVjb3B5KQo+ICAgewo+ICAgICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JVRkZFUl9TSEFET1co dW5zaWduZWQgbG9uZywgZGlydHlfYml0bWFwLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmN0eC0+c2F2ZS5kaXJ0eV9iaXRtYXBfaGJ1Zik7Cj4gICAKPiAgICAgICBi aXRtYXBfc2V0KGRpcnR5X2JpdG1hcCwgY3R4LT5zYXZlLnAybV9zaXplKTsKPiAgIAo+IC0gICAg cmV0dXJuIHNlbmRfZGlydHlfcGFnZXMoY3R4LCBjdHgtPnNhdmUucDJtX3NpemUpOwo+ICsgICAg cmV0dXJuIHNlbmRfZGlydHlfcGFnZXMoY3R4LCBjdHgtPnNhdmUucDJtX3NpemUsIHByZWNvcHkp Owo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGVuYWJsZV9sb2dkaXJ0eShzdHJ1Y3QgeGNfc3Jf Y29udGV4dCAqY3R4KQo+IEBAIC00NDYsOCArNDg2LDcgQEAgc3RhdGljIGludCB1cGRhdGVfcHJv Z3Jlc3Nfc3RyaW5nKHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgsCj4gICAgICAgeGNfaW50ZXJm YWNlICp4Y2ggPSBjdHgtPnhjaDsKPiAgICAgICBjaGFyICpuZXdfc3RyID0gTlVMTDsKPiAgIAo+ IC0gICAgaWYgKCBhc3ByaW50ZigmbmV3X3N0ciwgIkZyYW1lcyBpdGVyYXRpb24gJXUgb2YgJXUi LAo+IC0gICAgICAgICAgICAgICAgICBpdGVyLCBjdHgtPnNhdmUubWF4X2l0ZXJhdGlvbnMpID09 IC0xICkKPiArICAgIGlmICggYXNwcmludGYoJm5ld19zdHIsICJGcmFtZXMgaXRlcmF0aW9uICV1 IiwgaXRlcikgPT0gLTEgKQo+ICAgICAgIHsKPiAgICAgICAgICAgUEVSUk9SKCJVbmFibGUgdG8g YWxsb2NhdGUgbmV3IHByb2dyZXNzIHN0cmluZyIpOwo+ICAgICAgICAgICByZXR1cm4gLTE7Cj4g QEAgLTQ2OCwyMCArNTA3LDQ3IEBAIHN0YXRpYyBpbnQgc2VuZF9tZW1vcnlfbGl2ZShzdHJ1Y3Qg eGNfc3JfY29udGV4dCAqY3R4KQo+ICAgICAgIHhjX2ludGVyZmFjZSAqeGNoID0gY3R4LT54Y2g7 Cj4gICAgICAgeGNfc2hhZG93X29wX3N0YXRzX3Qgc3RhdHMgPSB7IDAsIGN0eC0+c2F2ZS5wMm1f c2l6ZSB9Owo+ICAgICAgIGNoYXIgKnByb2dyZXNzX3N0ciA9IE5VTEw7Cj4gLSAgICB1bnNpZ25l ZCB4Owo+ICAgICAgIGludCByYzsKPiAgIAo+ICsgICAgREVDTEFSRV9IWVBFUkNBTExfQlVGRkVS X1NIQURPVyh1bnNpZ25lZCBsb25nLCBkaXJ0eV9iaXRtYXAsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZjdHgtPnNhdmUuZGlydHlfYml0bWFwX2hidWYpOwo+ICsKPiAr ICAgIGludCAoKnByZWNvcHlfcG9saWN5KShzdHJ1Y3QgcHJlY29weV9zdGF0cywgdm9pZCAqKSA9 Cj4gKyAgICAgICAgY3R4LT5zYXZlLmNhbGxiYWNrcy0+cHJlY29weV9wb2xpY3k7Cj4gKyAgICB2 b2lkICpkYXRhID0gY3R4LT5zYXZlLmNhbGxiYWNrcy0+ZGF0YTsKPiArCj4gICAgICAgcmMgPSB1 cGRhdGVfcHJvZ3Jlc3Nfc3RyaW5nKGN0eCwgJnByb2dyZXNzX3N0ciwgMCk7Cj4gICAgICAgaWYg KCByYyApCj4gICAgICAgICAgIGdvdG8gb3V0Owo+ICAgCj4gLSAgICByYyA9IHNlbmRfYWxsX3Bh Z2VzKGN0eCk7Cj4gKyNkZWZpbmUgQ09OU1VMVF9QT0xJQ1kgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIGRvIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICsgICAgICAgIGlmICggY3R4LT5zYXZlLnBvbGljeV9kZWNpc2lvbiA9PSBYR1NfUE9M SUNZX0FCT1JUICkgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgICAgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK PiArICAgICAgICAgICAgcmMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICBnb3RvIG91dDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAg ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICBlbHNlIGlmICggY3R4LT5zYXZlLnBvbGlj eV9kZWNpc2lvbiAhPSBYR1NfUE9MSUNZX0NPTlRJTlVFX1BSRUNPUFkgKSAgXAo+ICsgICAgICAg IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gKyAgICAgICAgICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAg Z290byBvdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+ICsgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICB9IHdoaWxlICgwKQo+ ICsKPiArICAgIGN0eC0+c2F2ZS5zdGF0cyA9IChzdHJ1Y3QgcHJlY29weV9zdGF0cykKPiArICAg ICAgICB7Cj4gKyAgICAgICAgICAgIC5pdGVyYXRpb24gICAgID0gMCwKPiArICAgICAgICAgICAg LnRvdGFsX3dyaXR0ZW4gPSAwLAo+ICsgICAgICAgICAgICAuZGlydHlfY291bnQgICA9IC0xCj4g KyAgICAgICAgfTsKPiArICAgIHJjID0gc2VuZF9hbGxfcGFnZXMoY3R4LCAvKiBwcmVjb3B5ICov IHRydWUpOwo+ICAgICAgIGlmICggcmMgKQo+ICAgICAgICAgICBnb3RvIG91dDsKPiAgIAo+IC0g ICAgZm9yICggeCA9IDE7Cj4gLSAgICAgICAgICAoKHggPCBjdHgtPnNhdmUubWF4X2l0ZXJhdGlv bnMpICYmCj4gLSAgICAgICAgICAgKHN0YXRzLmRpcnR5X2NvdW50ID4gY3R4LT5zYXZlLmRpcnR5 X3RocmVzaG9sZCkpOyArK3ggKQo+ICsgICAgLyogc2VuZF9hbGxfcGFnZXMoKSBoYXMgdXBkYXRl ZCB0aGUgc3RhdHMgKi8KPiArICAgIENPTlNVTFRfUE9MSUNZOwo+ICsKPiArICAgIGZvciAoIGN0 eC0+c2F2ZS5zdGF0cy5pdGVyYXRpb24gPSAxOyA7ICsrY3R4LT5zYXZlLnN0YXRzLml0ZXJhdGlv biApCj4gICAgICAgewo+ICAgICAgICAgICBpZiAoIHhjX3NoYWRvd19jb250cm9sKAo+ICAgICAg ICAgICAgICAgICAgICB4Y2gsIGN0eC0+ZG9taWQsIFhFTl9ET01DVExfU0hBRE9XX09QX0NMRUFO LAo+IEBAIC00OTMsMTggKzU1OSw0MiBAQCBzdGF0aWMgaW50IHNlbmRfbWVtb3J5X2xpdmUoc3Ry dWN0IHhjX3NyX2NvbnRleHQgKmN0eCkKPiAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ICAgICAg ICAgICB9Cj4gICAKPiAtICAgICAgICBpZiAoIHN0YXRzLmRpcnR5X2NvdW50ID09IDAgKQo+IC0g ICAgICAgICAgICBicmVhazsKPiArICAgICAgICAvKiBDaGVjayB0aGUgbmV3IGRpcnR5X2NvdW50 IGFnYWluc3QgdGhlIHBvbGljeS4gKi8KPiArICAgICAgICBjdHgtPnNhdmUuc3RhdHMuZGlydHlf Y291bnQgPSBzdGF0cy5kaXJ0eV9jb3VudDsKPiArICAgICAgICBjdHgtPnNhdmUucG9saWN5X2Rl Y2lzaW9uID0gcHJlY29weV9wb2xpY3koY3R4LT5zYXZlLnN0YXRzLCBkYXRhKTsKPiArICAgICAg ICBpZiAoIGN0eC0+c2F2ZS5wb2xpY3lfZGVjaXNpb24gPT0gWEdTX1BPTElDWV9BQk9SVCApCj4g KyAgICAgICAgewo+ICsgICAgICAgICAgICByYyA9IC0xOwo+ICsgICAgICAgICAgICBnb3RvIG91 dDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZWxzZSBpZiAoY3R4LT5zYXZlLnBvbGljeV9kZWNp c2lvbiAhPSBYR1NfUE9MSUNZX0NPTlRJTlVFX1BSRUNPUFkgKQo+ICsgICAgICAgIHsKPiArICAg ICAgICAgICAgYml0bWFwX29yKGN0eC0+c2F2ZS5kZWZlcnJlZF9wYWdlcywgZGlydHlfYml0bWFw LAo+ICsgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zYXZlLnAybV9zaXplKTsKPiArICAgICAg ICAgICAgY3R4LT5zYXZlLm5yX2RlZmVycmVkX3BhZ2VzICs9IHN0YXRzLmRpcnR5X2NvdW50Owo+ ICsgICAgICAgICAgICByYyA9IDA7Cj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAg IH0KPiArCj4gKyAgICAgICAgLyogQWZ0ZXIgdGhpcyBwb2ludCB3ZSB3b24ndCBrbm93IGhvdyBt YW55IHBhZ2VzIGFyZSByZWFsbHkgZGlydHkgdW50aWwKPiArICAgICAgICAgKiB0aGUgbmV4dCBp dGVyYXRpb24uICovCj4gKyAgICAgICAgY3R4LT5zYXZlLnN0YXRzLmRpcnR5X2NvdW50ID0gLTE7 Cj4gICAKPiAtICAgICAgICByYyA9IHVwZGF0ZV9wcm9ncmVzc19zdHJpbmcoY3R4LCAmcHJvZ3Jl c3Nfc3RyLCB4KTsKPiArICAgICAgICByYyA9IHVwZGF0ZV9wcm9ncmVzc19zdHJpbmcoY3R4LCAm cHJvZ3Jlc3Nfc3RyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgt PnNhdmUuc3RhdHMuaXRlcmF0aW9uKTsKPiAgICAgICAgICAgaWYgKCByYyApCj4gICAgICAgICAg ICAgICBnb3RvIG91dDsKPiAgIAo+IC0gICAgICAgIHJjID0gc2VuZF9kaXJ0eV9wYWdlcyhjdHgs IHN0YXRzLmRpcnR5X2NvdW50KTsKPiArICAgICAgICByYyA9IHNlbmRfZGlydHlfcGFnZXMoY3R4 LCBzdGF0cy5kaXJ0eV9jb3VudCwgLyogcHJlY29weSAqLyB0cnVlKTsKPiAgICAgICAgICAgaWYg KCByYyApCj4gICAgICAgICAgICAgICBnb3RvIG91dDsKPiArCj4gKyAgICAgICAgLyogc2VuZF9k aXJ0eV9wYWdlcygpIGhhcyB1cGRhdGVkIHRoZSBzdGF0cyAqLwo+ICsgICAgICAgIENPTlNVTFRf UE9MSUNZOwo+ICAgICAgIH0KPiAgIAo+ICsjdW5kZWYgQ09OU1VMVF9QT0xJQ1kKPiArCj4gICAg b3V0Ogo+ICAgICAgIHhjX3NldF9wcm9ncmVzc19wcmVmaXgoeGNoLCBOVUxMKTsKPiAgICAgICBm cmVlKHByb2dyZXNzX3N0cik7Cj4gQEAgLTU5NSw3ICs2ODUsNyBAQCBzdGF0aWMgaW50IHN1c3Bl bmRfYW5kX3NlbmRfZGlydHkoc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCkKPiAgICAgICBpZiAo IGN0eC0+c2F2ZS5saXZlICkKPiAgICAgICB7Cj4gICAgICAgICAgIHJjID0gdXBkYXRlX3Byb2dy ZXNzX3N0cmluZyhjdHgsICZwcm9ncmVzc19zdHIsCj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN0eC0+c2F2ZS5tYXhfaXRlcmF0aW9ucyk7Cj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGN0eC0+c2F2ZS5zdGF0cy5pdGVyYXRpb24pOwo+ICAgICAg ICAgICBpZiAoIHJjICkKPiAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ICAgICAgIH0KPiBAQCAt NjE0LDcgKzcwNCw4IEBAIHN0YXRpYyBpbnQgc3VzcGVuZF9hbmRfc2VuZF9kaXJ0eShzdHJ1Y3Qg eGNfc3JfY29udGV4dCAqY3R4KQo+ICAgICAgICAgICB9Cj4gICAgICAgfQo+ICAgCj4gLSAgICBy YyA9IHNlbmRfZGlydHlfcGFnZXMoY3R4LCBzdGF0cy5kaXJ0eV9jb3VudCArIGN0eC0+c2F2ZS5u cl9kZWZlcnJlZF9wYWdlcyk7Cj4gKyAgICByYyA9IHNlbmRfZGlydHlfcGFnZXMoY3R4LCBzdGF0 cy5kaXJ0eV9jb3VudCArIGN0eC0+c2F2ZS5ucl9kZWZlcnJlZF9wYWdlcywKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBwcmVjb3B5ICovIGZhbHNlKTsKPiAgICAgICBpZiAoIHJjICkK PiAgICAgICAgICAgZ290byBvdXQ7Cj4gICAKPiBAQCAtNjQ1LDcgKzczNiw3IEBAIHN0YXRpYyBp bnQgdmVyaWZ5X2ZyYW1lcyhzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4KQo+ICAgICAgICAgICBn b3RvIG91dDsKPiAgIAo+ICAgICAgIHhjX3NldF9wcm9ncmVzc19wcmVmaXgoeGNoLCAiRnJhbWVz IHZlcmlmeSIpOwo+IC0gICAgcmMgPSBzZW5kX2FsbF9wYWdlcyhjdHgpOwo+ICsgICAgcmMgPSBz ZW5kX2FsbF9wYWdlcyhjdHgsIC8qIHByZWNvcHkgKi8gZmFsc2UpOwo+ICAgICAgIGlmICggcmMg KQo+ICAgICAgICAgICBnb3RvIG91dDsKPiAgIAo+IEBAIC03MTksNyArODEwLDcgQEAgc3RhdGlj IGludCBzZW5kX2RvbWFpbl9tZW1vcnlfbm9ubGl2ZShzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4 KQo+ICAgCj4gICAgICAgeGNfc2V0X3Byb2dyZXNzX3ByZWZpeCh4Y2gsICJGcmFtZXMiKTsKPiAg IAo+IC0gICAgcmMgPSBzZW5kX2FsbF9wYWdlcyhjdHgpOwo+ICsgICAgcmMgPSBzZW5kX2FsbF9w YWdlcyhjdHgsIC8qIHByZWNvcHkgKi8gZmFsc2UpOwo+ICAgICAgIGlmICggcmMgKQo+ICAgICAg ICAgICBnb3RvIGVycjsKPiAgIAo+IEBAIC05MTAsOCArMTAwMSw3IEBAIHN0YXRpYyBpbnQgc2F2 ZShzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4LCB1aW50MTZfdCBndWVzdF90eXBlKQo+ICAgfTsK PiAgIAo+ICAgaW50IHhjX2RvbWFpbl9zYXZlKHhjX2ludGVyZmFjZSAqeGNoLCBpbnQgaW9fZmQs IHVpbnQzMl90IGRvbSwKPiAtICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1heF9pdGVycywg dWludDMyX3QgbWF4X2ZhY3RvciwgdWludDMyX3QgZmxhZ3MsCj4gLSAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc2F2ZV9jYWxsYmFja3MqIGNhbGxiYWNrcywgaW50IGh2bSwKPiArICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IGZsYWdzLCBzdHJ1Y3Qgc2F2ZV9jYWxsYmFja3MqIGNhbGxiYWNr cywgaW50IGh2bSwKPiAgICAgICAgICAgICAgICAgICAgICB4Y19taWdyYXRpb25fc3RyZWFtX3Qg c3RyZWFtX3R5cGUsIGludCByZWN2X2ZkKQo+ICAgewo+ICAgICAgIHN0cnVjdCB4Y19zcl9jb250 ZXh0IGN0eCA9Cj4gQEAgLTkzMiwyNSArMTAyMiwxNyBAQCBpbnQgeGNfZG9tYWluX3NhdmUoeGNf aW50ZXJmYWNlICp4Y2gsIGludCBpb19mZCwgdWludDMyX3QgZG9tLAo+ICAgICAgICAgICAgICBz dHJlYW1fdHlwZSA9PSBYQ19NSUdfU1RSRUFNX1JFTVVTIHx8Cj4gICAgICAgICAgICAgIHN0cmVh bV90eXBlID09IFhDX01JR19TVFJFQU1fQ09MTyk7Cj4gICAKPiAtICAgIC8qCj4gLSAgICAgKiBU T0RPOiBGaW5kIHNvbWUgdGltZSB0byBiZXR0ZXIgdHdlYWsgdGhlIGxpdmUgbWlncmF0aW9uIGFs Z29yaXRobS4KPiAtICAgICAqCj4gLSAgICAgKiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBiZXR0ZXIg dGhhbiB0aGUgbGVnYWN5IGFsZ29yaXRobSBlc3BlY2lhbGx5IGZvcgo+IC0gICAgICogYnVzeSBn dWVzdHMuCj4gLSAgICAgKi8KPiAtICAgIGN0eC5zYXZlLm1heF9pdGVyYXRpb25zID0gNTsKPiAt ICAgIGN0eC5zYXZlLmRpcnR5X3RocmVzaG9sZCA9IDUwOwo+IC0KPiAgICAgICAvKiBTYW5pdHkg Y2hlY2tzIGZvciBjYWxsYmFja3MuICovCj4gICAgICAgaWYgKCBodm0gKQo+ICAgICAgICAgICBh c3NlcnQoY2FsbGJhY2tzLT5zd2l0Y2hfcWVtdV9sb2dkaXJ0eSk7Cj4gKyAgICBpZiAoIGN0eC5z YXZlLmxpdmUgKQo+ICsgICAgICAgIGFzc2VydChjYWxsYmFja3MtPnByZWNvcHlfcG9saWN5KTsK PiAgICAgICBpZiAoIGN0eC5zYXZlLmNoZWNrcG9pbnRlZCApCj4gICAgICAgICAgIGFzc2VydChj YWxsYmFja3MtPmNoZWNrcG9pbnQgJiYgY2FsbGJhY2tzLT5hZnRlcmNvcHkpOwo+ICAgICAgIGlm ICggY3R4LnNhdmUuY2hlY2twb2ludGVkID09IFhDX01JR19TVFJFQU1fQ09MTyApCj4gICAgICAg ICAgIGFzc2VydChjYWxsYmFja3MtPndhaXRfY2hlY2twb2ludCk7Cj4gICAKPiAtICAgIERQUklO VEYoImZkICVkLCBkb20gJXUsIG1heF9pdGVycyAldSwgbWF4X2ZhY3RvciAldSwgZmxhZ3MgJXUs IGh2bSAlZCIsCj4gLSAgICAgICAgICAgIGlvX2ZkLCBkb20sIG1heF9pdGVycywgbWF4X2ZhY3Rv ciwgZmxhZ3MsIGh2bSk7Cj4gKyAgICBEUFJJTlRGKCJmZCAlZCwgZG9tICV1LCBmbGFncyAldSwg aHZtICVkIiwgaW9fZmQsIGRvbSwgZmxhZ3MsIGh2bSk7Cj4gICAKPiAgICAgICBpZiAoIHhjX2Rv bWFpbl9nZXRpbmZvKHhjaCwgZG9tLCAxLCAmY3R4LmRvbWluZm8pICE9IDEgKQo+ICAgICAgIHsK PiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfZG9tX3NhdmUuYyBiL3Rvb2xzL2xpYnhs L2xpYnhsX2RvbV9zYXZlLmMKPiBpbmRleCA3N2ZlMzBlLi42ZDI4Y2NlIDEwMDY0NAo+IC0tLSBh L3Rvb2xzL2xpYnhsL2xpYnhsX2RvbV9zYXZlLmMKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF9k b21fc2F2ZS5jCj4gQEAgLTMyOCw2ICszMjgsMjUgQEAgaW50IGxpYnhsX19zYXZlX2VtdWxhdG9y X3hlbnN0b3JlX2RhdGEobGlieGxfX2RvbWFpbl9zYXZlX3N0YXRlICpkc3MsCj4gICAgICAgcmV0 dXJuIHJjOwo+ICAgfQo+ICAgCj4gKy8qCj4gKyAqIFRoaXMgaXMgdGhlIGxpdmUgbWlncmF0aW9u IHByZWNvcHkgcG9saWN5IC0gaXQncyBjYWxsZWQgcGVyaW9kaWNhbGx5IGR1cmluZwo+ICsgKiB0 aGUgcHJlY29weSBwaGFzZSBvZiBsaXZlIG1pZ3JhdGlvbnMsIGFuZCBpcyByZXNwb25zaWJsZSBm b3IgZGVjaWRpbmcgd2hlbgo+ICsgKiB0aGUgcHJlY29weSBwaGFzZSBzaG91bGQgdGVybWluYXRl IGFuZCB3aGF0IHNob3VsZCBiZSBkb25lIG5leHQuCj4gKyAqCj4gKyAqIFRoZSBwb2xpY3kgaW1w bGVtZW50ZWQgaGVyZSBiZWhhdmVzIGlkZW50aWNhbGx5IHRvIHRoZSBwb2xpY3kgcHJldmlvdXNs eQo+ICsgKiBoYXJkLWNvZGVkIGludG8geGNfZG9tYWluX3NhdmUoKSAtIGl0IHByb2NlZWRzIHRv IHRoZSBzdG9wLWFuZC1jb3B5IHBoYXNlIG9mCj4gKyAqIHRoZSBsaXZlIG1pZ3JhdGlvbiB3aGVu IHRoZXJlIGFyZSBlaXRoZXIgZmV3ZXIgdGhhbiA1MCBkaXJ0eSBwYWdlcywgb3IgbW9yZQo+ICsg KiB0aGFuIDUgcHJlY29weSByb3VuZHMgaGF2ZSBjb21wbGV0ZWQuCj4gKyAqLwo+ICtzdGF0aWMg aW50IGxpYnhsX19zYXZlX2xpdmVfbWlncmF0aW9uX3NpbXBsZV9wcmVjb3B5X3BvbGljeSgKPiAr ICAgIHN0cnVjdCBwcmVjb3B5X3N0YXRzIHN0YXRzLCB2b2lkICp1c2VyKQo+ICt7Cj4gKyAgICBy ZXR1cm4gKChzdGF0cy5kaXJ0eV9jb3VudCA+PSAwICYmIHN0YXRzLmRpcnR5X2NvdW50IDwgNTAp IHx8Cj4gKyAgICAgICAgICAgIHN0YXRzLml0ZXJhdGlvbiA+PSA1KQo+ICsgICAgICAgID8gWEdT X1BPTElDWV9TVE9QX0FORF9DT1BZCj4gKyAgICAgICAgOiBYR1NfUE9MSUNZX0NPTlRJTlVFX1BS RUNPUFk7Cj4gK30KPiArCj4gICAvKi0tLS0tIG1haW4gY29kZSBmb3Igc2F2aW5nLCBpbiBvcmRl ciBvZiBleGVjdXRpb24gLS0tLS0qLwo+ICAgCj4gICB2b2lkIGxpYnhsX19kb21haW5fc2F2ZShs aWJ4bF9fZWdjICplZ2MsIGxpYnhsX19kb21haW5fc2F2ZV9zdGF0ZSAqZHNzKQo+IEBAIC00MDEs NiArNDIwLDcgQEAgdm9pZCBsaWJ4bF9fZG9tYWluX3NhdmUobGlieGxfX2VnYyAqZWdjLCBsaWJ4 bF9fZG9tYWluX3NhdmVfc3RhdGUgKmRzcykKPiAgICAgICBpZiAoZHNzLT5jaGVja3BvaW50ZWRf c3RyZWFtID09IExJQlhMX0NIRUNLUE9JTlRFRF9TVFJFQU1fTk9ORSkKPiAgICAgICAgICAgY2Fs bGJhY2tzLT5zdXNwZW5kID0gbGlieGxfX2RvbWFpbl9zdXNwZW5kX2NhbGxiYWNrOwo+ICAgCj4g KyAgICBjYWxsYmFja3MtPnByZWNvcHlfcG9saWN5ID0gbGlieGxfX3NhdmVfbGl2ZV9taWdyYXRp b25fc2ltcGxlX3ByZWNvcHlfcG9saWN5Owo+ICAgICAgIGNhbGxiYWNrcy0+c3dpdGNoX3FlbXVf bG9nZGlydHkgPSBsaWJ4bF9fZG9tYWluX3N1c3BlbmRfY29tbW9uX3N3aXRjaF9xZW11X2xvZ2Rp cnR5Owo+ICAgCj4gICAgICAgZHNzLT5zd3MuYW8gID0gZHNzLT5hbzsKPiBkaWZmIC0tZ2l0IGEv dG9vbHMvbGlieGwvbGlieGxfc2F2ZV9jYWxsb3V0LmMgYi90b29scy9saWJ4bC9saWJ4bF9zYXZl X2NhbGxvdXQuYwo+IGluZGV4IDQ2Yjg5MmMuLjAyNmI1NzIgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMv bGlieGwvbGlieGxfc2F2ZV9jYWxsb3V0LmMKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF9zYXZl X2NhbGxvdXQuYwo+IEBAIC04OSw4ICs4OSw3IEBAIHZvaWQgbGlieGxfX3hjX2RvbWFpbl9zYXZl KGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2RvbWFpbl9zYXZlX3N0YXRlICpkc3MsCj4gICAgICAg ICAgIGxpYnhsX19zcm1fY2FsbG91dF9lbnVtY2FsbGJhY2tzX3NhdmUoJnNocy0+Y2FsbGJhY2tz LnNhdmUuYSk7Cj4gICAKPiAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGFyZ251bXNbXSA9IHsK PiAtICAgICAgICBkc3MtPmRvbWlkLCAwLCAwLCBkc3MtPnhjZmxhZ3MsIGRzcy0+aHZtLAo+IC0g ICAgICAgIGNiZmxhZ3MsIGRzcy0+Y2hlY2twb2ludGVkX3N0cmVhbSwKPiArICAgICAgICBkc3Mt PmRvbWlkLCBkc3MtPnhjZmxhZ3MsIGRzcy0+aHZtLCBjYmZsYWdzLCBkc3MtPmNoZWNrcG9pbnRl ZF9zdHJlYW0sCj4gICAgICAgfTsKPiAgIAo+ICAgICAgIHNocy0+YW8gPSBhbzsKPiBkaWZmIC0t Z2l0IGEvdG9vbHMvbGlieGwvbGlieGxfc2F2ZV9oZWxwZXIuYyBiL3Rvb2xzL2xpYnhsL2xpYnhs X3NhdmVfaGVscGVyLmMKPiBpbmRleCBkM2RlZjZiLi4wMjQxYTZiIDEwMDY0NAo+IC0tLSBhL3Rv b2xzL2xpYnhsL2xpYnhsX3NhdmVfaGVscGVyLmMKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF9z YXZlX2hlbHBlci5jCj4gQEAgLTI1MSw4ICsyNTEsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCj4gICAgICAgICAgIGlvX2ZkID0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IGF0b2koTkVYVEFSRyk7Cj4gICAgICAgICAgIHJlY3ZfZmQgPSAgICAgICAgICAgICAgICAgICAg ICAgICAgIGF0b2koTkVYVEFSRyk7Cj4gICAgICAgICAgIHVpbnQzMl90IGRvbSA9ICAgICAgICAg ICAgICAgICAgICAgIHN0cnRvdWwoTkVYVEFSRywwLDEwKTsKPiAtICAgICAgICB1aW50MzJfdCBt YXhfaXRlcnMgPSAgICAgICAgICAgICAgICBzdHJ0b3VsKE5FWFRBUkcsMCwxMCk7Cj4gLSAgICAg ICAgdWludDMyX3QgbWF4X2ZhY3RvciA9ICAgICAgICAgICAgICAgc3RydG91bChORVhUQVJHLDAs MTApOwo+ICAgICAgICAgICB1aW50MzJfdCBmbGFncyA9ICAgICAgICAgICAgICAgICAgICBzdHJ0 b3VsKE5FWFRBUkcsMCwxMCk7Cj4gICAgICAgICAgIGludCBodm0gPSAgICAgICAgICAgICAgICAg ICAgICAgICAgIGF0b2koTkVYVEFSRyk7Cj4gICAgICAgICAgIHVuc2lnbmVkIGNiZmxhZ3MgPSAg ICAgICAgICAgICAgICAgIHN0cnRvdWwoTkVYVEFSRywwLDEwKTsKPiBAQCAtMjY0LDkgKzI2Miw4 IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKPiAgICAgICAgICAgc3RhcnR1cCgi c2F2ZSIpOwo+ICAgICAgICAgICBzZXR1cF9zaWduYWxzKHNhdmVfc2lnbmFsX2hhbmRsZXIpOwo+ ICAgCj4gLSAgICAgICAgciA9IHhjX2RvbWFpbl9zYXZlKHhjaCwgaW9fZmQsIGRvbSwgbWF4X2l0 ZXJzLCBtYXhfZmFjdG9yLCBmbGFncywKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhl bHBlcl9zYXZlX2NhbGxiYWNrcywgaHZtLCBzdHJlYW1fdHlwZSwKPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVjdl9mZCk7Cj4gKyAgICAgICAgciA9IHhjX2RvbWFpbl9zYXZlKHhjaCwg aW9fZmQsIGRvbSwgZmxhZ3MsICZoZWxwZXJfc2F2ZV9jYWxsYmFja3MsIGh2bSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RyZWFtX3R5cGUsIHJlY3ZfZmQpOwo+ICAgICAgICAgICBj b21wbGV0ZShyKTsKPiAgIAo+ICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChtb2RlLCItLXJlc3Rv cmUtZG9tYWluIikpIHsKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfc2F2ZV9tc2dz X2dlbi5wbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3NhdmVfbXNnc19nZW4ucGwKPiBpbmRleCAyNzg0 NWJiLi41MGM5N2I0IDEwMDc1NQo+IC0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3NhdmVfbXNnc19n ZW4ucGwKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF9zYXZlX21zZ3NfZ2VuLnBsCj4gQEAgLTMz LDYgKzMzLDcgQEAgb3VyIEBtc2dzID0gKAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICd4ZW5fcGZuX3QnLCAnY29uc29sZV9nZm4nXSBdLAo+ICAgICAg IFsgIDksICdzclcnLCAgICAiY29tcGxldGUiLCAgICAgICAgICAgICAgW3F3KGludCByZXR2YWwK PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg ZXJybm92YWwpXSBdLAo+ICsgICAgWyAxMCwgJ3NjeFcnLCAgICJwcmVjb3B5X3BvbGljeSIsIFsn c3RydWN0IHByZWNvcHlfc3RhdHMnLCAnc3RhdHMnXSBdCj4gICApOwo+ICAgCj4gICAjLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IEBAIC0xNDEsNyArMTQyLDggQEAg c3RhdGljIHZvaWQgYnl0ZXNfcHV0KHVuc2lnbmVkIGNoYXIgKmNvbnN0IGJ1ZiwgaW50ICpsZW4s Cj4gICAKPiAgIEVORAo+ICAgCj4gLWZvcmVhY2ggbXkgJHNpbXBsZXR5cGUgKHF3KGludCB1aW50 MTZfdCB1aW50MzJfdCB1bnNpZ25lZCksICd1bnNpZ25lZCBsb25nJywgJ3hlbl9wZm5fdCcpIHsK PiArZm9yZWFjaCBteSAkc2ltcGxldHlwZSAocXcoaW50IHVpbnQxNl90IHVpbnQzMl90IHVuc2ln bmVkKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgJ3Vuc2lnbmVkIGxvbmcnLCAneGVuX3Bm bl90JywgJ3N0cnVjdCBwcmVjb3B5X3N0YXRzJykgewo+ICAgICAgIG15ICR0eXBlaWQgPSB0eXBl aWQoJHNpbXBsZXR5cGUpOwo+ICAgICAgICRvdXRfYm9keXsnY2FsbG91dCd9IC49IDw8RU5EOwo+ ICAgc3RhdGljIGludCAke3R5cGVpZH1fZ2V0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKiptc2csCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==