From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail137.messagelabs.com (mail137.messagelabs.com [216.82.249.19]) by kanga.kvack.org (Postfix) with ESMTP id 541DC900086 for ; Sun, 17 Apr 2011 22:11:37 -0400 (EDT) Received: by iwg8 with SMTP id 8so5299178iwg.14 for ; Sun, 17 Apr 2011 19:11:33 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1302909815-4362-5-git-send-email-yinghan@google.com> References: <1302909815-4362-1-git-send-email-yinghan@google.com> <1302909815-4362-5-git-send-email-yinghan@google.com> Date: Mon, 18 Apr 2011 11:11:33 +0900 Message-ID: Subject: Re: [PATCH V5 04/10] Infrastructure to support per-memcg reclaim. From: Minchan Kim Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Sender: owner-linux-mm@kvack.org List-ID: To: Ying Han Cc: KOSAKI Motohiro , Daisuke Nishimura , Balbir Singh , Tejun Heo , Pavel Emelyanov , KAMEZAWA Hiroyuki , Andrew Morton , Li Zefan , Mel Gorman , Christoph Lameter , Johannes Weiner , Rik van Riel , Hugh Dickins , Michal Hocko , Dave Hansen , Zhu Yanhai , linux-mm@kvack.org T24gU2F0LCBBcHIgMTYsIDIwMTEgYXQgODoyMyBBTSwgWWluZyBIYW4gPHlpbmdoYW5AZ29vZ2xl LmNvbT4gd3JvdGU6Cj4gQWRkIHRoZSBrc3dhcGRfbWVtIGZpZWxkIGluIGtzd2FwZCBkZXNjcmlw dG9yIHdoaWNoIGxpbmtzIHRoZSBrc3dhcGQKPiBrZXJuZWwgdGhyZWFkIHRvIGEgbWVtY2cuIFRo ZSBwZXItbWVtY2cga3N3YXBkIGlzIHNsZWVwaW5nIGluIHRoZSB3YWl0Cj4gcXVldWUgaGVhZGVk IGF0IGtzd2FwZF93YWl0IGZpZWxkIG9mIHRoZSBrc3dhcGQgZGVzY3JpcHRvci4KPgo+IFRoZSBr c3dhcGQoKSBmdW5jdGlvbiBpcyBub3cgc2hhcmVkIGJldHdlZW4gZ2xvYmFsIGFuZCBwZXItbWVt Y2cga3N3YXBkLiBJdAo+IGlzIHBhc3NlZCBpbiB3aXRoIHRoZSBrc3dhcGQgZGVzY3JpcHRvciB3 aGljaCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gb2YKPiBlaXRoZXIgbm9kZSBvciBtZW1jZy4g VGhlbiB0aGUgbmV3IGZ1bmN0aW9uIGJhbGFuY2VfbWVtX2Nncm91cF9wZ2RhdCBpcwo+IGludm9r ZWQgaWYgaXQgaXMgcGVyLW1lbSBrc3dhcGQgdGhyZWFkLCBhbmQgdGhlIGltcGxlbWVudGF0aW9u IG9mIHRoZSBmdW5jdGlvbgo+IGlzIG9uIHRoZSBmb2xsb3dpbmcgcGF0Y2guCj4KPiBjaGFuZ2Vs b2cgdjQuLnYzOgo+IDEuIGZpeCB1cCB0aGUga3N3YXBkX3J1biBhbmQga3N3YXBkX3N0b3AgZm9y IG9ubGluZV9wYWdlcygpIGFuZCBvZmZsaW5lX3BhZ2VzLgo+IDIuIGRyb3AgdGhlIFBGX01FTUFM TE9DIGZsYWcgZm9yIG1lbWNnIGtzd2FwZCBmb3Igbm93IHBlciBLQU1BWkFXQSdzIHJlcXVlc3Qu Cj4KPiBjaGFuZ2Vsb2cgdjMuLnYyOgo+IDEuIHNwbGl0IG9mZiBmcm9tIHRoZSBpbml0aWFsIHBh dGNoIHdoaWNoIGluY2x1ZGVzIGFsbCBjaGFuZ2VzIG9mIHRoZSBmb2xsb3dpbmcKPiB0aHJlZSBw YXRjaGVzLgo+Cj4gU2lnbmVkLW9mZi1ieTogWWluZyBIYW4gPHlpbmdoYW5AZ29vZ2xlLmNvbT4K PiAtLS0KPiDCoGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIHwgwqAgwqA1ICsrCj4gwqBpbmNs dWRlL2xpbnV4L3N3YXAuaCDCoCDCoCDCoCB8IMKgIMKgNSArLQo+IMKgbW0vbWVtY29udHJvbC5j IMKgIMKgIMKgIMKgIMKgIMKgfCDCoCAyOSArKysrKysrKwo+IMKgbW0vbWVtb3J5X2hvdHBsdWcu YyDCoCDCoCDCoCDCoHwgwqAgwqA0ICstCj4gwqBtbS92bXNjYW4uYyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHwgwqAxNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0KPiDCoDUgZmlsZXMgY2hhbmdlZCwgMTQ3IGluc2VydGlvbnMoKyksIDUyIGRlbGV0aW9ucygt KQo+Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9s aW51eC9tZW1jb250cm9sLmgKPiBpbmRleCAzZWNlMzZkLi5mN2ZmZDFmIDEwMDY0NAo+IC0tLSBh L2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250 cm9sLmgKPiBAQCAtMjQsNiArMjQsNyBAQCBzdHJ1Y3QgbWVtX2Nncm91cDsKPiDCoHN0cnVjdCBw YWdlX2Nncm91cDsKPiDCoHN0cnVjdCBwYWdlOwo+IMKgc3RydWN0IG1tX3N0cnVjdDsKPiArc3Ry dWN0IGtzd2FwZDsKPgo+IMKgLyogU3RhdHMgdGhhdCBjYW4gYmUgdXBkYXRlZCBieSBrZXJuZWwu ICovCj4gwqBlbnVtIG1lbV9jZ3JvdXBfcGFnZV9zdGF0X2l0ZW0gewo+IEBAIC04Myw2ICs4NCwx MCBAQCBpbnQgdGFza19pbl9tZW1fY2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29u c3Qgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSk7Cj4gwqBleHRlcm4gc3RydWN0IG1lbV9jZ3JvdXAg KnRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwo+IMKgZXh0 ZXJuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdGFzayhzdHJ1Y3QgdGFza19z dHJ1Y3QgKnApOwo+IMKgZXh0ZXJuIGludCBtZW1fY2dyb3VwX3dhdGVybWFya19vayhzdHJ1Y3Qg bWVtX2Nncm91cCAqbWVtLCBpbnQgY2hhcmdlX2ZsYWdzKTsKPiArZXh0ZXJuIGludCBtZW1fY2dy b3VwX2luaXRfa3N3YXBkKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzdHJ1Y3Qga3N3YXBkICprc3dhcGRf cCk7Cj4gK2V4dGVybiB2b2lkIG1lbV9jZ3JvdXBfY2xlYXJfa3N3YXBkKHN0cnVjdCBtZW1fY2dy b3VwICptZW0pOwo+ICtleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgKm1lbV9jZ3JvdXBfa3N3YXBk X3dhaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSk7Cj4KPiDCoHN0YXRpYyBpbmxpbmUKPiDCoGlu dCBtbV9tYXRjaF9jZ3JvdXAoY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHN0cnVj dCBtZW1fY2dyb3VwICpjZ3JvdXApCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5o IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKPiBpbmRleCBmNDNkNDA2Li4xN2UwNTExIDEwMDY0NAo+ IC0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgK PiBAQCAtMzAsNiArMzAsNyBAQCBzdHJ1Y3Qga3N3YXBkIHsKPiDCoCDCoCDCoCDCoHN0cnVjdCB0 YXNrX3N0cnVjdCAqa3N3YXBkX3Rhc2s7Cj4gwqAgwqAgwqAgwqB3YWl0X3F1ZXVlX2hlYWRfdCBr c3dhcGRfd2FpdDsKPiDCoCDCoCDCoCDCoHBnX2RhdGFfdCAqa3N3YXBkX3BnZGF0Owo+ICsgwqAg wqAgwqAgc3RydWN0IG1lbV9jZ3JvdXAgKmtzd2FwZF9tZW07Cj4gwqB9Owo+Cj4gwqBpbnQga3N3 YXBkKHZvaWQgKnApOwo+IEBAIC0zMDMsOCArMzA0LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHNj YW5fdW5ldmljdGFibGVfdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKQo+IMKgfQo+ IMKgI2VuZGlmCj4KPiAtZXh0ZXJuIGludCBrc3dhcGRfcnVuKGludCBuaWQpOwo+IC1leHRlcm4g dm9pZCBrc3dhcGRfc3RvcChpbnQgbmlkKTsKPiArZXh0ZXJuIGludCBrc3dhcGRfcnVuKGludCBu aWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwo+ICtleHRlcm4gdm9pZCBrc3dhcGRfc3RvcChp bnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKPgo+IMKgI2lmZGVmIENPTkZJR19NTVUK PiDCoC8qIGxpbnV4L21tL3NobWVtLmMgKi8KPiBkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5j IGIvbW0vbWVtY29udHJvbC5jCj4gaW5kZXggNzZhZDAwOS4uODc2MWE2ZiAxMDA2NDQKPiAtLS0g YS9tbS9tZW1jb250cm9sLmMKPiArKysgYi9tbS9tZW1jb250cm9sLmMKPiBAQCAtMjc4LDYgKzI3 OCw4IEBAIHN0cnVjdCBtZW1fY2dyb3VwIHsKPiDCoCDCoCDCoCDCoCAqLwo+IMKgIMKgIMKgIMKg dTY0IGhpZ2hfd21hcmtfZGlzdGFuY2U7Cj4gwqAgwqAgwqAgwqB1NjQgbG93X3dtYXJrX2Rpc3Rh bmNlOwo+ICsKPiArIMKgIMKgIMKgIHdhaXRfcXVldWVfaGVhZF90ICprc3dhcGRfd2FpdDsKCgpM aWtlIEkgbWVudGlvbmVkIGluIFsxLzEwXSwgcGVyc29uYWxseSwgSSBsaWtlIGluY2x1ZGluZyBr c3dhcGQKaW5zdGVhZCBvZiBrc3dhcGRfd2FpdC4gSnVzdCBwZXJzb25hbCBvcGluaW9uLiBGZWVs IGZyZWUgdG8gaWdub3JlLgoKPiDCoH07Cj4KPiDCoC8qIFN0dWZmcyBmb3IgbW92ZSBjaGFyZ2Vz IGF0IHRhc2sgbWlncmF0aW9uLiAqLwo+IEBAIC00NjcwLDYgKzQ2NzIsMzMgQEAgaW50IG1lbV9j Z3JvdXBfd2F0ZXJtYXJrX29rKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCj4gwqAgwqAgwqAgwqBy ZXR1cm4gcmV0Owo+IMKgfQo+Cj4gK2ludCBtZW1fY2dyb3VwX2luaXRfa3N3YXBkKHN0cnVjdCBt ZW1fY2dyb3VwICptZW0sIHN0cnVjdCBrc3dhcGQgKmtzd2FwZF9wKQo+ICt7Cj4gKyDCoCDCoCDC oCBpZiAoIW1lbSB8fCAha3N3YXBkX3ApCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4g MDsKPiArCj4gKyDCoCDCoCDCoCBtZW0tPmtzd2FwZF93YWl0ID0gJmtzd2FwZF9wLT5rc3dhcGRf d2FpdDsKPiArIMKgIMKgIMKgIGtzd2FwZF9wLT5rc3dhcGRfbWVtID0gbWVtOwo+ICsKPiArIMKg IMKgIMKgIHJldHVybiBjc3NfaWQoJm1lbS0+Y3NzKTsKPiArfQo+ICsKPiArdm9pZCBtZW1fY2dy b3VwX2NsZWFyX2tzd2FwZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQo+ICt7Cj4gKyDCoCDCoCDC oCBpZiAobWVtKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbWVtLT5rc3dhcGRfd2FpdCA9IE5V TEw7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJuOwo+ICt9Cj4gKwo+ICt3YWl0X3F1ZXVlX2hlYWRf dCAqbWVtX2Nncm91cF9rc3dhcGRfd2FpdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQo+ICt7Cj4g KyDCoCDCoCDCoCBpZiAoIW1lbSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBOVUxM Owo+ICsKPiArIMKgIMKgIMKgIHJldHVybiBtZW0tPmtzd2FwZF93YWl0Owo+ICt9Cj4gKwo+IMKg c3RhdGljIGludCBtZW1fY2dyb3VwX3NvZnRfbGltaXRfdHJlZV9pbml0KHZvaWQpCj4gwqB7Cj4g wqAgwqAgwqAgwqBzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl9ub2RlICpydHBuOwo+IGRpZmYg LS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwo+IGluZGV4 IDMyMWZjNzQuLjJmNzhmZjYgMTAwNjQ0Cj4gLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYwo+ICsr KyBiL21tL21lbW9yeV9ob3RwbHVnLmMKPiBAQCAtNDYyLDcgKzQ2Miw3IEBAIGludCBvbmxpbmVf cGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCj4gwqAgwqAg wqAgwqBzZXR1cF9wZXJfem9uZV93bWFya3MoKTsKPiDCoCDCoCDCoCDCoGNhbGN1bGF0ZV96b25l X2luYWN0aXZlX3JhdGlvKHpvbmUpOwo+IMKgIMKgIMKgIMKgaWYgKG9ubGluZWRfcGFnZXMpIHsK PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGtzd2FwZF9ydW4oem9uZV90b19uaWQoem9uZSkpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAga3N3YXBkX3J1bih6b25lX3RvX25pZCh6b25lKSwgTlVM TCk7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBub2RlX3NldF9zdGF0ZSh6b25lX3RvX25pZCh6 b25lKSwgTl9ISUdIX01FTU9SWSk7Cj4gwqAgwqAgwqAgwqB9Cj4KPiBAQCAtODk3LDcgKzg5Nyw3 IEBAIHJlcGVhdDoKPiDCoCDCoCDCoCDCoGNhbGN1bGF0ZV96b25lX2luYWN0aXZlX3JhdGlvKHpv bmUpOwo+IMKgIMKgIMKgIMKgaWYgKCFub2RlX3ByZXNlbnRfcGFnZXMobm9kZSkpIHsKPiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoG5vZGVfY2xlYXJfc3RhdGUobm9kZSwgTl9ISUdIX01FTU9SWSk7 Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBrc3dhcGRfc3RvcChub2RlKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGtzd2FwZF9zdG9wKG5vZGUsIE5VTEwpOwo+IMKgIMKgIMKgIMKgfQo+Cj4g wqAgwqAgwqAgwqB2bV90b3RhbF9wYWdlcyA9IG5yX2ZyZWVfcGFnZWNhY2hlX3BhZ2VzKCk7Cj4g ZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKPiBpbmRleCA2MWZiOTZlLi4w NjAzNmQyIDEwMDY0NAo+IC0tLSBhL21tL3Ztc2Nhbi5jCj4gKysrIGIvbW0vdm1zY2FuLmMKPiBA QCAtMjI0MSw2ICsyMjQxLDggQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90 ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBiYWxhbmNlZF9wYWdlcywKPiDCoCDCoCDCoCDCoHJldHVy biBiYWxhbmNlZF9wYWdlcyA+IChwcmVzZW50X3BhZ2VzID4+IDIpOwo+IMKgfQo+Cj4gKyNkZWZp bmUgaXNfbm9kZV9rc3dhcGQoa3N3YXBkX3ApICghKGtzd2FwZF9wKS0+a3N3YXBkX21lbSkKCklu IG1lbWNnLCB3ZSBhbHJlYWR5IGhhdmUgYSBzaW1pbGFyIHRoaW5nICJzY2FubmluZ19nbG9iYWxf bHJ1Ii4KSG93IGFib3V0IHVzaW5nICJnbG9iYWwiIHRlcm0/Cgo+ICsKPiDCoC8qIGlzIGtzd2Fw ZCBzbGVlcGluZyBwcmVtYXR1cmVseT8gKi8KPiDCoHN0YXRpYyBpbnQgc2xlZXBpbmdfcHJlbWF0 dXJlbHkoc3RydWN0IGtzd2FwZCAqa3N3YXBkLCBpbnQgb3JkZXIsCj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBsb25nIHJlbWFpbmluZywgaW50IGNsYXNz em9uZV9pZHgpCj4gQEAgLTIyNDksMTEgKzIyNTEsMTYgQEAgc3RhdGljIGludCBzbGVlcGluZ19w cmVtYXR1cmVseShzdHJ1Y3Qga3N3YXBkICprc3dhcGQsIGludCBvcmRlciwKPiDCoCDCoCDCoCDC oHVuc2lnbmVkIGxvbmcgYmFsYW5jZWQgPSAwOwo+IMKgIMKgIMKgIMKgYm9vbCBhbGxfem9uZXNf b2sgPSB0cnVlOwo+IMKgIMKgIMKgIMKgcGdfZGF0YV90ICpwZ2RhdCA9IGtzd2FwZC0+a3N3YXBk X3BnZGF0Owo+ICsgwqAgwqAgwqAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IGtzd2FwZC0+a3N3 YXBkX21lbTsKPgo+IMKgIMKgIMKgIMKgLyogSWYgYSBkaXJlY3QgcmVjbGFpbWVyIHdva2Uga3N3 YXBkIHdpdGhpbiBIWi8xMCwgaXQncyBwcmVtYXR1cmUgKi8KPiDCoCDCoCDCoCDCoGlmIChyZW1h aW5pbmcpCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gdHJ1ZTsKPgo+ICsgwqAgwqAg wqAgLyogRG9lc24ndCBzdXBwb3J0IGZvciBwZXItbWVtY2cgcmVjbGFpbSAqLwo+ICsgwqAgwqAg wqAgaWYgKG1lbSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBmYWxzZTsKPiArCgpI b3cgYWJvdXQgaXNfZ2xvYmFsX2tzd2FwZCBpbnN0ZWFkIG9mIGNoZWNraW5nIHdoZXRlcmggbWVt IGZpZWxkIGlzIE5VTEwgb3Igbm90PwoKPiDCoCDCoCDCoCDCoC8qIENoZWNrIHRoZSB3YXRlcm1h cmsgbGV2ZWxzICovCj4gwqAgwqAgwqAgwqBmb3IgKGkgPSAwOyBpIDwgcGdkYXQtPm5yX3pvbmVz OyBpKyspIHsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHN0cnVjdCB6b25lICp6b25lID0gcGdk YXQtPm5vZGVfem9uZXMgKyBpOwo+IEBAIC0yNTk2LDE5ICsyNjAzLDI1IEBAIHN0YXRpYyB2b2lk IGtzd2FwZF90cnlfdG9fc2xlZXAoc3RydWN0IGtzd2FwZCAqa3N3YXBkX3AsIGludCBvcmRlciwK PiDCoCDCoCDCoCDCoCAqIGdvIGZ1bGx5IHRvIHNsZWVwIHVudGlsIGV4cGxpY2l0bHkgd29rZW4g dXAuCj4gwqAgwqAgwqAgwqAgKi8KPiDCoCDCoCDCoCDCoGlmICghc2xlZXBpbmdfcHJlbWF0dXJl bHkoa3N3YXBkX3AsIG9yZGVyLCByZW1haW5pbmcsIGNsYXNzem9uZV9pZHgpKSB7Cj4gLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCB0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3NsZWVwKHBnZGF0LT5ub2Rl X2lkKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChpc19ub2RlX2tzd2FwZChrc3dhcGRf cCkpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRyYWNlX21tX3Ztc2Nh bl9rc3dhcGRfc2xlZXAocGdkYXQtPm5vZGVfaWQpOwo+Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDC oCAvKgo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqIHZtc3RhdCBjb3VudGVycyBhcmUgbm90 IHBlcmZlY3RseSBhY2N1cmF0ZSBhbmQgdGhlIGVzdGltYXRlZAo+IC0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAqIHZhbHVlIGZvciBjb3VudGVycyBzdWNoIGFzIE5SX0ZSRUVfUEFHRVMgY2FuIGRl dmlhdGUgZnJvbSB0aGUKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiB0cnVlIHZhbHVlIGJ5 IG5yX29ubGluZV9jcHVzICogdGhyZXNob2xkLiBUbyBhdm9pZCB0aGUgem9uZQo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAqIHdhdGVybWFya3MgYmVpbmcgYnJlYWNoZWQgd2hpbGUgdW5kZXIg cHJlc3N1cmUsIHdlIHJlZHVjZSB0aGUKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiBwZXIt Y3B1IHZtc3RhdCB0aHJlc2hvbGQgd2hpbGUga3N3YXBkIGlzIGF3YWtlIGFuZCByZXN0b3JlCj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogdGhlbSBiZWZvcmUgZ29pbmcgYmFjayB0byBzbGVl cC4KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKi8KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHNldF9wZ2RhdF9wZXJjcHVfdGhyZXNob2xkKHBnZGF0LCBjYWxjdWxhdGVfbm9ybWFsX3RocmVz aG9sZCk7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzY2hlZHVsZSgpOwo+IC0gwqAgwqAgwqAg wqAgwqAgwqAgwqAgc2V0X3BnZGF0X3BlcmNwdV90aHJlc2hvbGQocGdkYXQsIGNhbGN1bGF0ZV9w cmVzc3VyZV90aHJlc2hvbGQpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg LyoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiB2bXN0YXQgY291bnRl cnMgYXJlIG5vdCBwZXJmZWN0bHkgYWNjdXJhdGUgYW5kIHRoZQo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAqIGVzdGltYXRlZCB2YWx1ZSBmb3IgY291bnRlcnMgc3VjaCBh cyBOUl9GUkVFX1BBR0VTCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCog Y2FuIGRldmlhdGUgZnJvbSB0aGUgdHJ1ZSB2YWx1ZSBieSBucl9vbmxpbmVfY3B1cyAqCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogdGhyZXNob2xkLiBUbyBhdm9pZCB0 aGUgem9uZSB3YXRlcm1hcmtzIGJlaW5nCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCogYnJlYWNoZWQgd2hpbGUgdW5kZXIgcHJlc3N1cmUsIHdlIHJlZHVjZSB0aGUgcGVy LWNwdQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqIHZtc3RhdCB0aHJl c2hvbGQgd2hpbGUga3N3YXBkIGlzIGF3YWtlIGFuZCByZXN0b3JlCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogdGhlbSBiZWZvcmUgZ29pbmcgYmFjayB0byBzbGVlcC4K PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKi8KPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNldF9wZ2RhdF9wZXJjcHVfdGhyZXNob2xkKHBnZGF0LAo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBjYWxjdWxhdGVfbm9ybWFsX3RocmVzaG9sZCk7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzY2hlZHVsZSgpOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0X3BnZGF0X3BlcmNwdV90aHJlc2hvbGQocGdkYXQsCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBjYWxjdWxhdGVfcHJlc3N1cmVfdGhyZXNob2xkKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH0gZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg c2NoZWR1bGUoKTsKPiDCoCDCoCDCoCDCoH0gZWxzZSB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBpZiAocmVtYWluaW5nKQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY291 bnRfdm1fZXZlbnQoS1NXQVBEX0xPV19XTUFSS19ISVRfUVVJQ0tMWSk7Cj4gQEAgLTI2MTgsNiAr MjYzMSwxMiBAQCBzdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHN0cnVjdCBrc3dhcGQg Kmtzd2FwZF9wLCBpbnQgb3JkZXIsCj4gwqAgwqAgwqAgwqBmaW5pc2hfd2FpdCh3YWl0X2gsICZ3 YWl0KTsKPiDCoH0KPgo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxhbmNlX21lbV9jZ3JvdXBf cGdkYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgaW50IG9yZGVyKQo+ICt7Cj4gKyDCoCDCoCDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiDC oC8qCj4gwqAqIFRoZSBiYWNrZ3JvdW5kIHBhZ2VvdXQgZGFlbW9uLCBzdGFydGVkIGFzIGEga2Vy bmVsIHRocmVhZAo+IMKgKiBmcm9tIHRoZSBpbml0IHByb2Nlc3MuCj4gQEAgLTI2MzcsNiArMjY1 Niw3IEBAIGludCBrc3dhcGQodm9pZCAqcCkKPiDCoCDCoCDCoCDCoGludCBjbGFzc3pvbmVfaWR4 Owo+IMKgIMKgIMKgIMKgc3RydWN0IGtzd2FwZCAqa3N3YXBkX3AgPSAoc3RydWN0IGtzd2FwZCAq KXA7Cj4gwqAgwqAgwqAgwqBwZ19kYXRhX3QgKnBnZGF0ID0ga3N3YXBkX3AtPmtzd2FwZF9wZ2Rh dDsKPiArIMKgIMKgIMKgIHN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBrc3dhcGRfcC0+a3N3YXBk X21lbTsKPiDCoCDCoCDCoCDCoHdhaXRfcXVldWVfaGVhZF90ICp3YWl0X2ggPSAma3N3YXBkX3At Pmtzd2FwZF93YWl0Owo+IMKgIMKgIMKgIMKgc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJy ZW50Owo+Cj4gQEAgLTI2NDcsMTAgKzI2NjcsMTIgQEAgaW50IGtzd2FwZCh2b2lkICpwKQo+Cj4g wqAgwqAgwqAgwqBsb2NrZGVwX3NldF9jdXJyZW50X3JlY2xhaW1fc3RhdGUoR0ZQX0tFUk5FTCk7 Cj4KPiAtIMKgIMKgIMKgIEJVR19PTihwZ2RhdC0+a3N3YXBkX3dhaXQgIT0gd2FpdF9oKTsKPiAt IMKgIMKgIMKgIGNwdW1hc2sgPSBjcHVtYXNrX29mX25vZGUocGdkYXQtPm5vZGVfaWQpOwo+IC0g wqAgwqAgwqAgaWYgKCFjcHVtYXNrX2VtcHR5KGNwdW1hc2spKQo+IC0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgc2V0X2NwdXNfYWxsb3dlZF9wdHIodHNrLCBjcHVtYXNrKTsKPiArIMKgIMKgIMKgIGlm IChpc19ub2RlX2tzd2FwZChrc3dhcGRfcCkpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEJV R19PTihwZ2RhdC0+a3N3YXBkX3dhaXQgIT0gd2FpdF9oKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGNwdW1hc2sgPSBjcHVtYXNrX29mX25vZGUocGdkYXQtPm5vZGVfaWQpOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaWYgKCFjcHVtYXNrX2VtcHR5KGNwdW1hc2spKQo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0X2NwdXNfYWxsb3dlZF9wdHIodHNrLCBjcHVtYXNr KTsKPiArIMKgIMKgIMKgIH0KPiDCoCDCoCDCoCDCoGN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPSAm cmVjbGFpbV9zdGF0ZTsKPgo+IMKgIMKgIMKgIMKgLyoKPiBAQCAtMjY2NSw3ICsyNjg3LDEwIEBA IGludCBrc3dhcGQodm9pZCAqcCkKPiDCoCDCoCDCoCDCoCAqIHVzIGZyb20gcmVjdXJzaXZlbHkg dHJ5aW5nIHRvIGZyZWUgbW9yZSBtZW1vcnkgYXMgd2UncmUKPiDCoCDCoCDCoCDCoCAqIHRyeWlu ZyB0byBmcmVlIHRoZSBmaXJzdCBwaWVjZSBvZiBtZW1vcnkgaW4gdGhlIGZpcnN0IHBsYWNlKS4K PiDCoCDCoCDCoCDCoCAqLwo+IC0gwqAgwqAgwqAgdHNrLT5mbGFncyB8PSBQRl9NRU1BTExPQyB8 IFBGX1NXQVBXUklURSB8IFBGX0tTV0FQRDsKPiArIMKgIMKgIMKgIGlmIChpc19ub2RlX2tzd2Fw ZChrc3dhcGRfcCkpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0c2stPmZsYWdzIHw9IFBGX01F TUFMTE9DIHwgUEZfU1dBUFdSSVRFIHwgUEZfS1NXQVBEOwo+ICsgwqAgwqAgwqAgZWxzZQo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgdHNrLT5mbGFncyB8PSBQRl9TV0FQV1JJVEUgfCBQRl9LU1dB UEQ7Cj4gwqAgwqAgwqAgwqBzZXRfZnJlZXphYmxlKCk7Cj4KPiDCoCDCoCDCoCDCoG9yZGVyID0g MDsKPiBAQCAtMjY3NSwyNCArMjcwMCwyOSBAQCBpbnQga3N3YXBkKHZvaWQgKnApCj4gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBpbnQgbmV3X2NsYXNzem9uZV9pZHg7Cj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBpbnQgcmV0Owo+Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBuZXdfb3JkZXIgPSBw Z2RhdC0+a3N3YXBkX21heF9vcmRlcjsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG5ld19jbGFz c3pvbmVfaWR4ID0gcGdkYXQtPmNsYXNzem9uZV9pZHg7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDC oCBwZ2RhdC0+a3N3YXBkX21heF9vcmRlciA9IDA7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBw Z2RhdC0+Y2xhc3N6b25lX2lkeCA9IE1BWF9OUl9aT05FUyAtIDE7Cj4gLSDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZiAob3JkZXIgPCBuZXdfb3JkZXIgfHwgY2xhc3N6b25lX2lkeCA+IG5ld19jbGFz c3pvbmVfaWR4KSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKgo+IC0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqIERvbid0IHNsZWVwIGlmIHNvbWVv bmUgd2FudHMgYSBsYXJnZXIgJ29yZGVyJwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAqIGFsbG9jYXRpb24gb3IgaGFzIHRpZ2hlciB6b25lIGNvbnN0cmFpbnRzCj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCovCj4gLSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBvcmRlciA9IG5ld19vcmRlcjsKPiAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGNsYXNzem9uZV9pZHggPSBuZXdfY2xhc3N6b25lX2lkeDsKPiAtIMKg IMKgIMKgIMKgIMKgIMKgIMKgIH0gZWxzZSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBrc3dhcGRfdHJ5X3RvX3NsZWVwKGtzd2FwZF9wLCBvcmRlciwgY2xhc3N6b25lX2lk eCk7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvcmRlciA9IHBnZGF0LT5r c3dhcGRfbWF4X29yZGVyOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xh c3N6b25lX2lkeCA9IHBnZGF0LT5jbGFzc3pvbmVfaWR4Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgaWYgKGlzX25vZGVfa3N3YXBkKGtzd2FwZF9wKSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgbmV3X29yZGVyID0gcGdkYXQtPmtzd2FwZF9tYXhfb3JkZXI7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBuZXdfY2xhc3N6b25lX2lkeCA9IHBnZGF0 LT5jbGFzc3pvbmVfaWR4Owo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcGdk YXQtPmtzd2FwZF9tYXhfb3JkZXIgPSAwOwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgcGdkYXQtPmNsYXNzem9uZV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxOwo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYg KG9yZGVyIDwgbmV3X29yZGVyIHx8Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbGFzc3pvbmVfaWR4ID4gbmV3X2NsYXNzem9uZV9p ZHgpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8q Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogRG9u J3Qgc2xlZXAgaWYgc29tZW9uZSB3YW50cyBhIGxhcmdlciAnb3JkZXInCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogYWxsb2NhdGlvbiBvciBoYXMg dGlnaGVyIHpvbmUgY29uc3RyYWludHMKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgKi8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIG9yZGVyID0gbmV3X29yZGVyOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xhc3N6b25lX2lkeCA9IG5ld19jbGFzc3pvbmVfaWR4 Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfSBlbHNlIHsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGtzd2FwZF90cnlfdG9fc2xl ZXAoa3N3YXBkX3AsIG9yZGVyLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xhc3N6b25lX2lkeCk7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvcmRlciA9 IHBnZGF0LT5rc3dhcGRfbWF4X29yZGVyOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgY2xhc3N6b25lX2lkeCA9IHBnZGF0LT5jbGFzc3pvbmVfaWR4Owo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcGdkYXQtPmtz d2FwZF9tYXhfb3JkZXIgPSAwOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgcGdkYXQtPmNsYXNzem9uZV9pZHggPSBNQVhfTlJfWk9ORVMgLSAxOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgfSBlbHNlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBrc3dhcGRfdHJ5 X3RvX3NsZWVwKGtzd2FwZF9wLCBvcmRlciwgY2xhc3N6b25lX2lkeCk7Cj4KPiDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoHJldCA9IHRyeV90b19mcmVlemUoKTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCj4gQEAgLTI3MDMsOCArMjczMywxMyBAQCBp bnQga3N3YXBkKHZvaWQgKnApCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKiBhZnRlciByZXR1 cm5pbmcgZnJvbSB0aGUgcmVmcmlnZXJhdG9yCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKi8K PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmICghcmV0KSB7Cj4gLSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCB0cmFjZV9tbV92bXNjYW5fa3N3YXBkX3dha2UocGdkYXQtPm5vZGVf aWQsIG9yZGVyKTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9yZGVyID0g YmFsYW5jZV9wZ2RhdChwZ2RhdCwgb3JkZXIsICZjbGFzc3pvbmVfaWR4KTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChpc19ub2RlX2tzd2FwZChrc3dhcGRfcCkpIHsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRyYWNlX21t X3Ztc2Nhbl9rc3dhcGRfd2FrZShwZ2RhdC0+bm9kZV9pZCwKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIG9yZGVyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIG9yZGVyID0gYmFsYW5jZV9wZ2RhdChwZ2RhdCwgb3JkZXIsCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmY2xhc3N6b25lX2lkeCk7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9IGVsc2UKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJhbGFuY2VfbWVtX2Nncm91cF9wZ2RhdChtZW0sIG9yZGVy KTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KPiDCoCDCoCDCoCDCoH0KPiDCoCDCoCDCoCDC oHJldHVybiAwOwo+IEBAIC0yODQ5LDMwICsyODg0LDUzIEBAIHN0YXRpYyBpbnQgX19kZXZpbml0 IGNwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKPiDCoCogVGhpcyBrc3dh cGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRk Lgo+IMKgKiBPbiBub2RlLWhvdC1hZGQsIGtzd2FwZCB3aWxsIG1vdmVkIHRvIHByb3BlciBjcHVz IGlmIGNwdXMgYXJlIGhvdC1hZGRlZC4KPiDCoCovCj4gLWludCBrc3dhcGRfcnVuKGludCBuaWQp Cj4gK2ludCBrc3dhcGRfcnVuKGludCBuaWQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCj4gwqB7 Cj4gLSDCoCDCoCDCoCBwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7Cj4gwqAgwqAg wqAgwqBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtzd2FwZF90aHI7Cj4gKyDCoCDCoCDCoCBwZ19kYXRh X3QgKnBnZGF0ID0gTlVMTDsKPiDCoCDCoCDCoCDCoHN0cnVjdCBrc3dhcGQgKmtzd2FwZF9wOwo+ ICsgwqAgwqAgwqAgc3RhdGljIGNoYXIgbmFtZVtUQVNLX0NPTU1fTEVOXTsKPiArIMKgIMKgIMKg IGludCBtZW1jZ19pZDsKPiDCoCDCoCDCoCDCoGludCByZXQgPSAwOwo+Cj4gLSDCoCDCoCDCoCBp ZiAocGdkYXQtPmtzd2FwZF93YWl0KQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIDA7 Cj4gKyDCoCDCoCDCoCBpZiAoIW1lbSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcGdkYXQg PSBOT0RFX0RBVEEobmlkKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChwZ2RhdC0+a3N3 YXBkX3dhaXQpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gcmV0 Owo+ICsgwqAgwqAgwqAgfQo+Cj4gwqAgwqAgwqAgwqBrc3dhcGRfcCA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBrc3dhcGQpLCBHRlBfS0VSTkVMKTsKPiDCoCDCoCDCoCDCoGlmICgha3N3YXBkX3Ap Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gLUVOT01FTTsKPgo+IMKgIMKgIMKgIMKg aW5pdF93YWl0cXVldWVfaGVhZCgma3N3YXBkX3AtPmtzd2FwZF93YWl0KTsKPiAtIMKgIMKgIMKg IHBnZGF0LT5rc3dhcGRfd2FpdCA9ICZrc3dhcGRfcC0+a3N3YXBkX3dhaXQ7Cj4gLSDCoCDCoCDC oCBrc3dhcGRfcC0+a3N3YXBkX3BnZGF0ID0gcGdkYXQ7Cj4KPiAtIMKgIMKgIMKgIGtzd2FwZF90 aHIgPSBrdGhyZWFkX3J1bihrc3dhcGQsIGtzd2FwZF9wLCAia3N3YXBkJWQiLCBuaWQpOwo+ICsg wqAgwqAgwqAgaWYgKCFtZW0pIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBnZGF0LT5rc3dh cGRfd2FpdCA9ICZrc3dhcGRfcC0+a3N3YXBkX3dhaXQ7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBrc3dhcGRfcC0+a3N3YXBkX3BnZGF0ID0gcGdkYXQ7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBzbnByaW50ZihuYW1lLCBUQVNLX0NPTU1fTEVOLCAia3N3YXBkXyVkIiwgbmlkKTsKPiArIMKg IMKgIMKgIH0gZWxzZSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBtZW1jZ19pZCA9IG1lbV9j Z3JvdXBfaW5pdF9rc3dhcGQobWVtLCBrc3dhcGRfcCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBpZiAoIW1lbWNnX2lkKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBr ZnJlZShrc3dhcGRfcCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1 cm4gcmV0Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgc25wcmludGYobmFtZSwgVEFTS19DT01NX0xFTiwgIm1lbWNnXyVkIiwgbWVtY2dfaWQpOwo+ ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIGtzd2FwZF90aHIgPSBrdGhyZWFkX3J1bihr c3dhcGQsIGtzd2FwZF9wLCBuYW1lKTsKPiDCoCDCoCDCoCDCoGlmIChJU19FUlIoa3N3YXBkX3Ro cikpIHsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qIGZhaWx1cmUgYXQgYm9vdCBpcyBmYXRh bCAqLwo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgQlVHX09OKHN5c3RlbV9zdGF0ZSA9PSBTWVNU RU1fQk9PVElORyk7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcmludGsoIkZhaWxlZCB0byBz dGFydCBrc3dhcGQgb24gbm9kZSAlZFxuIixuaWQpOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAg cGdkYXQtPmtzd2FwZF93YWl0ID0gTlVMTDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICgh bWVtKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcmludGsoS0VSTl9F UlIgIkZhaWxlZCB0byBzdGFydCBrc3dhcGQgb24gbm9kZSAlZFxuIiwKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG5pZCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBwZ2RhdC0+a3N3YXBkX3dhaXQgPSBOVUxMOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgfSBlbHNlIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHByaW50 ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHN0YXJ0IGtzd2FwZCBvbiBtZW1jZyAlZFxuIiwKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1lbWNnX2lkKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1lbV9jZ3JvdXBfY2xlYXJfa3N3YXBkKG1lbSk7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBrZnJlZShr c3dhcGRfcCk7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXQgPSAtMTsKPiDCoCDCoCDCoCDC oH0gZWxzZQo+IEBAIC0yODgzLDE1ICsyOTQxLDE3IEBAIGludCBrc3dhcGRfcnVuKGludCBuaWQp Cj4gwqAvKgo+IMKgKiBDYWxsZWQgYnkgbWVtb3J5IGhvdHBsdWcgd2hlbiBhbGwgbWVtb3J5IGlu IGEgbm9kZSBpcyBvZmZsaW5lZC4KPiDCoCovCj4gLXZvaWQga3N3YXBkX3N0b3AoaW50IG5pZCkK PiArdm9pZCBrc3dhcGRfc3RvcChpbnQgbmlkLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQo+IMKg ewo+IMKgIMKgIMKgIMKgc3RydWN0IHRhc2tfc3RydWN0ICprc3dhcGRfdGhyID0gTlVMTDsKPiDC oCDCoCDCoCDCoHN0cnVjdCBrc3dhcGQgKmtzd2FwZF9wID0gTlVMTDsKPiDCoCDCoCDCoCDCoHdh aXRfcXVldWVfaGVhZF90ICp3YWl0Owo+Cj4gLSDCoCDCoCDCoCBwZ19kYXRhX3QgKnBnZGF0ID0g Tk9ERV9EQVRBKG5pZCk7Cj4gKyDCoCDCoCDCoCBpZiAoIW1lbSkKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHdhaXQgPSBOT0RFX0RBVEEobmlkKS0+a3N3YXBkX3dhaXQ7Cj4gKyDCoCDCoCDCoCBl bHNlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3YWl0ID0gbWVtX2Nncm91cF9rc3dhcGRfd2Fp dChtZW0pOwo+Cj4gLSDCoCDCoCDCoCB3YWl0ID0gcGdkYXQtPmtzd2FwZF93YWl0Owo+IMKgIMKg IMKgIMKgaWYgKHdhaXQpIHsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGtzd2FwZF9wID0gY29u dGFpbmVyX29mKHdhaXQsIHN0cnVjdCBrc3dhcGQsIGtzd2FwZF93YWl0KTsKPiDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGtzd2FwZF90aHIgPSBrc3dhcGRfcC0+a3N3YXBkX3Rhc2s7Cj4gQEAgLTI5 MTAsNyArMjk3MCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGtzd2FwZF9pbml0KHZvaWQpCj4KPiDC oCDCoCDCoCDCoHN3YXBfc2V0dXAoKTsKPiDCoCDCoCDCoCDCoGZvcl9lYWNoX25vZGVfc3RhdGUo bmlkLCBOX0hJR0hfTUVNT1JZKQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAga3N3YXBkX3J1bihu aWQpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAga3N3YXBkX3J1bihuaWQsIE5VTEwpOwo+IMKg IMKgIMKgIMKgaG90Y3B1X25vdGlmaWVyKGNwdV9jYWxsYmFjaywgMCk7Cj4gwqAgwqAgwqAgwqBy ZXR1cm4gMDsKPiDCoH0KPiAtLQo+IDEuNy4zLjEKPgo+CgpMZXQgbWUgYXNrIGEgcXVlc3Rpb24u CgpXaGF0J3MgdGhlIGVmZmVjdCBvZiBrc3dhcGRfdHJ5X3RvX3NsZWVwIGluIG1lbWNnPwoKQXMg SSBsb29rIGNvZGUsIHNsZWVwaW5nX3ByZW1hdHVyZWx5IGFsd2F5cyByZXR1cm4gZmFsc2UgaW4g Y2FzZSBvZgptZW1jZy4gU28ga3N3YXBkX3RyeV90b19zbGVlcCBjYW4gc2xlZXAgc2hvcnQgdGlt ZSBhbmQgdGhlbiBzbGVlcAp1bnRpbCBuZXh0IHdha2V1cC4gSXQgbWVhbnMgaXQgZG9lc24ndCBo YXZlIGFueSByZWxhdGVkIHRvCmtzd2FwZF90cnlfdG9fc2xlZXAncyBnb2FsLiBTbyBJIGhvcGUg eW91IHJlbW92ZSBoYWNrIG9mIG1lbWNnIGluCmtzd2FwZF90cnlfdG9fc2xlZXAgYW5kIGp1c3Qg Y2FsbGluZyBzY2hlZHVsZSBpbiBrc3dhcGQgZnVuY3Rpb24gZm9yCnNsZWVwaW5nIG1lbWNnX2tz d2FwZC4KQnV0IEkgZG9uJ3QgbG9vayBhdCBmdXJ0aGVyIHBhdGNoZXMgaW4gc2VyaWVzIHNvIEkg bWF5IG1pc3Mgc29tZXRoaW5nLgoKLS0gCktpbmQgcmVnYXJkcywKTWluY2hhbiBLaW0K -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: email@kvack.org