From: "Kasatkin, Dmitry" Subject: Re: [RFC v2.0 3/3] evm: digital signature support Date: Tue, 6 Sep 2011 16:15:52 +0300 Message-ID: References: <850024352ce936b429c82aaf26b437b7332344dc.1315313377.git.dmitry.kasatkin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Cc: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, zohar@linux.vnet.ibm.com To: linux-security-module@vger.kernel.org Return-path: In-Reply-To: <850024352ce936b429c82aaf26b437b7332344dc.1315313377.git.dmitry.kasatkin@intel.com> Sender: linux-security-module-owner@vger.kernel.org List-Id: linux-crypto.vger.kernel.org UGxlYXNlIGlnbm9yZSB0aGlzIHBhdGNoLiBJdCB3YXMgc2VudCBieSBtaXN0YWtlLi4uCkNoZWNr Ogpldm06IGRpZ2l0YWwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBzdXBwb3J0CgotIERtaXRyeQoK T24gVHVlLCBTZXAgNiwgMjAxMSBhdCA0OjExIFBNLCBEbWl0cnkgS2FzYXRraW4KPGRtaXRyeS5r YXNhdGtpbkBpbnRlbC5jb20+IHdyb3RlOgo+IFdoZW4gYnVpbGRpbmcgYW4gaW1hZ2UsIHdoaWNo IGhhcyB0byBiZSBmbGFzaGVkIHRvIGRpZmZlcmVudCBkZXZpY2VzLAo+IGFuIEhNQUMgY2Fubm90 IGJlIHVzZWQgdG8gc2lnbiBmaWxlIG1ldGFkYXRhLCBhcyB0aGUgSE1BQyBrZXkgaXMgZGlmZmVy ZW50Cj4gb24gZXZlcnkgZGV2aWNlLiBGaWxlIG1ldGFkYXRhIGNhbiBiZSBwcm90ZWN0ZWQgdXNp bmcgZGlnaXRhbCBzaWduYXR1cmUuCj4gVGhpcyBwYXRjaCBlbmFibGVzIFJTQSBzaWduYXR1cmUg YmFzZWQgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbi4KPgo+IFNpZ25lZC1vZmYtYnk6IERtaXRyeSBL YXNhdGtpbiA8ZG1pdHJ5Lmthc2F0a2luQGludGVsLmNvbT4KPiBBY2tlZC1ieTogTWltaSBab2hh ciA8em9oYXJAdXMuaWJtLmNvbT4KPiAtLS0KPiDCoHNlY3VyaXR5L2ludGVncml0eS9ldm0vS2Nv bmZpZyDCoCDCoCDCoHwgwqAgMTQgKysrKwo+IMKgc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm0u aCDCoCDCoCDCoCDCoHwgwqAgMTIgKysrKwo+IMKgc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1f Y3J5cHRvLmMgfCDCoCA2NiArKysrKysrKysrKysrKy0tLS0tCj4gwqBzZWN1cml0eS9pbnRlZ3Jp dHkvZXZtL2V2bV9tYWluLmMgwqAgfCDCoDEyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLS0tLQo+IMKgNCBmaWxlcyBjaGFuZ2VkLCAxODcgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRp b25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnIGIv c2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9LY29uZmlnCj4gaW5kZXggODg0NjE3ZC4uODRlZWE3NSAx MDA2NDQKPiAtLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWcKPiArKysgYi9zZWN1 cml0eS9pbnRlZ3JpdHkvZXZtL0tjb25maWcKPiBAQCAtMTIsMyArMTIsMTcgQEAgY29uZmlnIEVW TQo+IMKgIMKgIMKgIMKgIMKgaW50ZWdyaXR5IGF0dGFja3MuCj4KPiDCoCDCoCDCoCDCoCDCoElm IHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCj4g Kwo+ICtjb25maWcgRVZNX0RJR1NJRwo+ICsgwqAgwqAgwqAgYm9vbGVhbiAiRVZNIERpZ2l0YWwg U2lnbmF0dXJlIHN1cHBvcnQiCj4gKyDCoCDCoCDCoCBkZXBlbmRzIG9uIEVWTQo+ICsgwqAgwqAg wqAgZGVmYXVsdCBuCj4gKyDCoCDCoCDCoCBzZWxlY3QgQ1JZUFRPX0tTSUdOX1JTQQo+ICsgwqAg wqAgwqAgaGVscAo+ICsgwqAgwqAgwqAgwqAgV2hlbiBidWlsZGluZyBhbiBpbWFnZSwgd2hpY2gg aGFzIHRvIGJlIGZsYXNoZWQgdG8gZGlmZmVyZW50Cj4gKyDCoCDCoCDCoCDCoCBkZXZpY2VzLCBh biBITUFDIGNhbm5vdCBiZSB1c2VkIHRvIHNpZ24gZmlsZSBtZXRhZGF0YSwgYXMKPiArIMKgIMKg IMKgIMKgIHRoZSBITUFDIGtleSBpcyBkaWZmZXJlbnQgb24gZXZlcnkgZGV2aWNlLgo+ICsgwqAg wqAgwqAgwqAgRmlsZSBtZXRhZGF0YSBjYW4gYmUgcHJvdGVjdGVkIHVzaW5nIGRpZ2l0YWwgc2ln bmF0dXJlLgo+ICsgwqAgwqAgwqAgwqAgVGhpcyBvcHRpb24gZW5hYmxlcyBSU0Egc2lnbmF0dXJl IGJhc2VkIGludGVncml0eSB2ZXJpZmljYXRpb24uCj4gKwo+ICsgwqAgwqAgwqAgwqAgSWYgdW5z dXJlLCBzYXkgTi4KPiBkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm0uaCBi L3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtLmgKPiBpbmRleCBkMzIwZjUxLi5jODg1MjQ3IDEw MDY0NAo+IC0tLSBhL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZtLmgKPiArKysgYi9zZWN1cml0 eS9pbnRlZ3JpdHkvZXZtL2V2bS5oCj4gQEAgLTEyLDE0ICsxMiwyMSBAQAo+IMKgKiBGaWxlOiBl dm0uaAo+IMKgKgo+IMKgKi8KPiArCj4gKyNpZm5kZWYgX19JTlRFR1JJVFlfRVZNX0gKPiArI2Rl ZmluZSBfX0lOVEVHUklUWV9FVk1fSAo+ICsKPiDCoCNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgo+ IMKgI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+Cj4gKwo+IMKgI2luY2x1ZGUgIi4uL2ludGVn cml0eS5oIgo+Cj4gwqBleHRlcm4gaW50IGV2bV9pbml0aWFsaXplZDsKPiDCoGV4dGVybiBjaGFy ICpldm1faG1hYzsKPiArZXh0ZXJuIGNoYXIgKmV2bV9oYXNoOwo+Cj4gwqBleHRlcm4gc3RydWN0 IGNyeXB0b19zaGFzaCAqaG1hY190Zm07Cj4gK2V4dGVybiBzdHJ1Y3QgY3J5cHRvX3NoYXNoICpo YXNoX3RmbTsKPgo+IMKgLyogTGlzdCBvZiBFVk0gcHJvdGVjdGVkIHNlY3VyaXR5IHhhdHRycyAq Lwo+IMKgZXh0ZXJuIGNoYXIgKmV2bV9jb25maWdfeGF0dHJuYW1lc1tdOwo+IEBAIC0zMiw3ICsz OSwxMiBAQCBleHRlcm4gaW50IGV2bV91cGRhdGVfZXZteGF0dHIoc3RydWN0IGRlbnRyeSAqZGVu dHJ5LAo+IMKgZXh0ZXJuIGludCBldm1fY2FsY19obWFjKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwg Y29uc3QgY2hhciAqcmVxX3hhdHRyX25hbWUsCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgY29uc3QgY2hhciAqcmVxX3hhdHRyX3ZhbHVlLAo+IMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHNpemVfdCByZXFfeGF0dHJfdmFsdWVfbGVuLCBjaGFyICpkaWdl c3QpOwo+ICtleHRlcm4gaW50IGV2bV9jYWxjX2hhc2goc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBj b25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgY29uc3QgY2hhciAqcmVxX3hhdHRyX3ZhbHVlLAo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBzaXplX3QgcmVxX3hhdHRyX3ZhbHVlX2xlbiwgY2hhciAqZGln ZXN0KTsKPiDCoGV4dGVybiBpbnQgZXZtX2luaXRfaG1hYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBj b25zdCBzdHJ1Y3QgeGF0dHIgKnhhdHRyLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGNoYXIgKmhtYWNfdmFsKTsKPiDCoGV4dGVybiBpbnQgZXZtX2luaXRfc2VjZnModm9p ZCk7Cj4gwqBleHRlcm4gdm9pZCBldm1fY2xlYW51cF9zZWNmcyh2b2lkKTsKPiArCj4gKyNlbmRp Zgo+IGRpZmYgLS1naXQgYS9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9jcnlwdG8uYyBiL3Nl Y3VyaXR5L2ludGVncml0eS9ldm0vZXZtX2NyeXB0by5jCj4gaW5kZXggNWRkNWIxNDAuLjg0N2Ey ZDcgMTAwNjQ0Cj4gLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9ldm1fY3J5cHRvLmMKPiAr KysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvZXZtL2V2bV9jcnlwdG8uYwo+IEBAIC0yNiwzNCArMjYs NDggQEAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXZta2V5W01BWF9LRVlfU0laRV07Cj4gwqBzdGF0 aWMgaW50IGV2bWtleV9sZW4gPSBNQVhfS0VZX1NJWkU7Cj4KPiDCoHN0cnVjdCBjcnlwdG9fc2hh c2ggKmhtYWNfdGZtOwo+ICtzdHJ1Y3QgY3J5cHRvX3NoYXNoICpoYXNoX3RmbTsKPgo+IC1zdGF0 aWMgc3RydWN0IHNoYXNoX2Rlc2MgKmluaXRfZGVzYyh2b2lkKQo+ICtzdGF0aWMgc3RydWN0IHNo YXNoX2Rlc2MgKmluaXRfZGVzYyhjb25zdCBjaGFyIHR5cGUpCj4gwqB7Cj4gwqAgwqAgwqAgwqBp bnQgcmM7Cj4gKyDCoCDCoCDCoCBjaGFyICphbGdvOwo+ICsgwqAgwqAgwqAgc3RydWN0IGNyeXB0 b19zaGFzaCAqKnRmbTsKPiDCoCDCoCDCoCDCoHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjOwo+Cj4g LSDCoCDCoCDCoCBpZiAoaG1hY190Zm0gPT0gTlVMTCkgewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgaG1hY190Zm0gPSBjcnlwdG9fYWxsb2Nfc2hhc2goZXZtX2htYWMsIDAsIENSWVBUT19BTEdf QVNZTkMpOwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKElTX0VSUihobWFjX3RmbSkpIHsK PiArIMKgIMKgIMKgIGlmICh0eXBlID09IEVWTV9YQVRUUl9ITUFDKSB7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCB0Zm0gPSAmaG1hY190Zm07Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhbGdv ID0gZXZtX2htYWM7Cj4gKyDCoCDCoCDCoCB9IGVsc2Ugewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgdGZtID0gJmhhc2hfdGZtOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYWxnbyA9IGV2bV9o YXNoOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIGlmICgqdGZtID09IE5VTEwpIHsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgICp0Zm0gPSBjcnlwdG9fYWxsb2Nfc2hhc2goYWxnbywg MCwgQ1JZUFRPX0FMR19BU1lOQyk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoSVNfRVJS KCp0Zm0pKSB7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBwcl9lcnIoIkNh biBub3QgYWxsb2NhdGUgJXMgKHJlYXNvbjogJWxkKVxuIiwKPiAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZXZtX2htYWMsIFBUUl9FUlIoaG1hY190Zm0pKTsK PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJjID0gUFRSX0VSUihobWFjX3Rm bSk7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBobWFjX3RmbSA9IE5VTEw7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGFsZ28sIFBU Ul9FUlIoKnRmbSkpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmMgPSBQ VFJfRVJSKCp0Zm0pOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKnRmbSA9 IE5VTEw7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gRVJSX1BU UihyYyk7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9Cj4gwqAgwqAgwqAgwqB9Cj4KPiAtIMKg IMKgIMKgIGRlc2MgPSBrbWFsbG9jKHNpemVvZigqZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3Np emUoaG1hY190Zm0pLAo+ICsgwqAgwqAgwqAgZGVzYyA9IGttYWxsb2Moc2l6ZW9mKCpkZXNjKSAr IGNyeXB0b19zaGFzaF9kZXNjc2l6ZSgqdGZtKSwKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoEdGUF9LRVJORUwpOwo+IMKgIMKgIMKgIMKgaWYgKCFkZXNjKQo+IMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4KPiAtIMKgIMKgIMKgIGRl c2MtPnRmbSA9IGhtYWNfdGZtOwo+ICsgwqAgwqAgwqAgZGVzYy0+dGZtID0gKnRmbTsKPiDCoCDC oCDCoCDCoGRlc2MtPmZsYWdzID0gQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQOwo+Cj4gLSDCoCDC oCDCoCByYyA9IGNyeXB0b19zaGFzaF9zZXRrZXkoaG1hY190Zm0sIGV2bWtleSwgZXZta2V5X2xl bik7Cj4gLSDCoCDCoCDCoCBpZiAocmMpCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIG91 dDsKPiArIMKgIMKgIMKgIGlmICh0eXBlID09IEVWTV9YQVRUUl9ITUFDKSB7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCByYyA9IGNyeXB0b19zaGFzaF9zZXRrZXkoKnRmbSwgZXZta2V5LCBldm1r ZXlfbGVuKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChyYykKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gb3V0Owo+ICsgwqAgwqAgwqAgfQo+ICsKPiDCoCDC oCDCoCDCoHJjID0gY3J5cHRvX3NoYXNoX2luaXQoZGVzYyk7Cj4gwqBvdXQ6Cj4gwqAgwqAgwqAg wqBpZiAocmMpIHsKPiBAQCAtOTcsOSArMTExLDExIEBAIHN0YXRpYyB2b2lkIGhtYWNfYWRkX21p c2Moc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCj4gwqAqIHRo ZSBobWFjIHVzaW5nIHRoZSByZXF1ZXN0ZWQgeGF0dHIgdmFsdWUuIERvbid0IGFsbG9jL2ZyZWUg bWVtb3J5IGZvcgo+IMKgKiBlYWNoIHhhdHRyLCBidXQgYXR0ZW1wdCB0byByZS11c2UgdGhlIHBy ZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeS4KPiDCoCovCj4gLWludCBldm1fY2FsY19obWFjKHN0 cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqcmVxX3hhdHRyX25hbWUsCj4gLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBjb25zdCBjaGFyICpyZXFfeGF0dHJfdmFsdWUsIHNpemVfdCBy ZXFfeGF0dHJfdmFsdWVfbGVuLAo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2hhciAqZGln ZXN0KQo+ICtzdGF0aWMgaW50IGV2bV9jYWxjX2htYWNfb3JfaGFzaChzdHJ1Y3QgZGVudHJ5ICpk ZW50cnksCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBj b25zdCBjaGFyICpyZXFfeGF0dHJfbmFtZSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGNvbnN0IGNoYXIgKnJlcV94YXR0cl92YWx1ZSwKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNpemVfdCByZXFfeGF0dHJf dmFsdWVfbGVuLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgY2hhciB0eXBlLCBjaGFyICpkaWdlc3QpCj4gwqB7Cj4gwqAgwqAgwqAgwqBzdHJ1Y3QgaW5v ZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwo+IMKgIMKgIMKgIMKgc3RydWN0IHNoYXNoX2Rl c2MgKmRlc2M7Cj4gQEAgLTExMSw3ICsxMjcsNyBAQCBpbnQgZXZtX2NhbGNfaG1hYyhzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lLAo+Cj4gwqAgwqAgwqAg wqBpZiAoIWlub2RlLT5pX29wIHx8ICFpbm9kZS0+aV9vcC0+Z2V0eGF0dHIpCj4gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqByZXR1cm4gLUVPUE5PVFNVUFA7Cj4gLSDCoCDCoCDCoCBkZXNjID0gaW5p dF9kZXNjKCk7Cj4gKyDCoCDCoCDCoCBkZXNjID0gaW5pdF9kZXNjKHR5cGUpOwo+IMKgIMKgIMKg IMKgaWYgKElTX0VSUihkZXNjKSkKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHJldHVybiBQVFJf RVJSKGRlc2MpOwo+Cj4gQEAgLTE0NSw2ICsxNjEsMjIgQEAgb3V0Ogo+IMKgIMKgIMKgIMKgcmV0 dXJuIGVycm9yOwo+IMKgfQo+Cj4gK2ludCBldm1fY2FsY19obWFjKHN0cnVjdCBkZW50cnkgKmRl bnRyeSwgY29uc3QgY2hhciAqcmVxX3hhdHRyX25hbWUsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBjb25zdCBjaGFyICpyZXFfeGF0dHJfdmFsdWUsIHNpemVfdCByZXFfeGF0dHJfdmFsdWVf bGVuLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2hhciAqZGlnZXN0KQo+ICt7Cj4gKyDC oCDCoCDCoCByZXR1cm4gZXZtX2NhbGNfaG1hY19vcl9oYXNoKGRlbnRyeSwgcmVxX3hhdHRyX25h bWUsIHJlcV94YXR0cl92YWx1ZSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHJlcV94YXR0cl92YWx1ZV9sZW4sIEVWTV9YQVRUUl9ITUFDLCBkaWdlc3Qp Owo+ICt9Cj4gKwo+ICtpbnQgZXZtX2NhbGNfaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNv bnN0IGNoYXIgKnJlcV94YXR0cl9uYW1lLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY29u c3QgY2hhciAqcmVxX3hhdHRyX3ZhbHVlLCBzaXplX3QgcmVxX3hhdHRyX3ZhbHVlX2xlbiwKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNoYXIgKmRpZ2VzdCkKPiArewo+ICsgwqAgwqAgwqAg cmV0dXJuIGV2bV9jYWxjX2htYWNfb3JfaGFzaChkZW50cnksIHJlcV94YXR0cl9uYW1lLCByZXFf eGF0dHJfdmFsdWUsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCByZXFfeGF0dHJfdmFsdWVfbGVuLCBJTUFfWEFUVFJfRElHRVNULCBkaWdlc3QpOwo+ICt9 Cj4gKwo+IMKgLyoKPiDCoCogQ2FsY3VsYXRlIHRoZSBobWFjIGFuZCB1cGRhdGUgc2VjdXJpdHku ZXZtIHhhdHRyCj4gwqAqCj4gQEAgLTE3NSw3ICsyMDcsNyBAQCBpbnQgZXZtX2luaXRfaG1hYyhz dHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgeGF0dHIgKmxzbV94YXR0ciwKPiDCoHsK PiDCoCDCoCDCoCDCoHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjOwo+Cj4gLSDCoCDCoCDCoCBkZXNj ID0gaW5pdF9kZXNjKCk7Cj4gKyDCoCDCoCDCoCBkZXNjID0gaW5pdF9kZXNjKEVWTV9YQVRUUl9I TUFDKTsKPiDCoCDCoCDCoCDCoGlmIChJU19FUlIoZGVzYykpIHsKPiDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHByaW50ayhLRVJOX0lORk8gImluaXRfZGVzYyBmYWlsZWRcbiIpOwo+IMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgcmV0dXJuIFBUUl9FUlIoZGVzYyk7Cj4gZGlmZiAtLWdpdCBhL3NlY3Vy aXR5L2ludGVncml0eS9ldm0vZXZtX21haW4uYyBiL3NlY3VyaXR5L2ludGVncml0eS9ldm0vZXZt X21haW4uYwo+IGluZGV4IDhiMmVmZjkuLmQ4YWMxMDkgMTAwNjQ0Cj4gLS0tIGEvc2VjdXJpdHkv aW50ZWdyaXR5L2V2bS9ldm1fbWFpbi5jCj4gKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2V2bS9l dm1fbWFpbi5jCj4gQEAgLTE4LDYgKzE4LDggQEAKPiDCoCNpbmNsdWRlIDxsaW51eC9jcnlwdG8u aD4KPiDCoCNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgo+IMKgI2luY2x1ZGUgPGxpbnV4L2ludGVn cml0eS5oPgo+ICsjaW5jbHVkZSA8bGludXgva2V5LXR5cGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2NyeXB0by9rc2lnbi5oPgo+IMKgI2luY2x1ZGUgPGxpbnV4L2V2bS5oPgo+IMKgI2luY2x1ZGUg PGNyeXB0by9oYXNoLmg+Cj4gwqAjaW5jbHVkZSAiZXZtLmgiCj4gQEAgLTI1LDYgKzI3LDcgQEAK PiDCoGludCBldm1faW5pdGlhbGl6ZWQ7Cj4KPiDCoGNoYXIgKmV2bV9obWFjID0gImhtYWMoc2hh MSkiOwo+ICtjaGFyICpldm1faGFzaCA9ICJzaGExIjsKPgo+IMKgY2hhciAqZXZtX2NvbmZpZ194 YXR0cm5hbWVzW10gPSB7Cj4gwqAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVgKPiBAQCAt NDAsNiArNDMsOCBAQCBjaGFyICpldm1fY29uZmlnX3hhdHRybmFtZXNbXSA9IHsKPiDCoCDCoCDC oCDCoE5VTEwKPiDCoH07Cj4KPiArc3RhdGljIHN0cnVjdCBrZXkgKmV2bV9rZXlyaW5nOwo+ICsK PiDCoHN0YXRpYyBpbnQgZXZtX2ZpeG1vZGU7Cj4gwqBzdGF0aWMgaW50IF9faW5pdCBldm1fc2V0 X2ZpeG1vZGUoY2hhciAqc3RyKQo+IMKgewo+IEBAIC00OSw2ICs1NCw1NiBAQCBzdGF0aWMgaW50 IF9faW5pdCBldm1fc2V0X2ZpeG1vZGUoY2hhciAqc3RyKQo+IMKgfQo+IMKgX19zZXR1cCgiZXZt PSIsIGV2bV9zZXRfZml4bW9kZSk7Cj4KPiArc3RhdGljIGludCBldm1fZmluZF9wcm90ZWN0ZWRf eGF0dHJzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IGlu b2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKPiArIMKgIMKgIMKgIGNoYXIgKip4YXR0cjsK PiArIMKgIMKgIMKgIGludCBlcnJvcjsKPiArIMKgIMKgIMKgIGludCBjb3VudCA9IDA7Cj4gKwo+ ICsgwqAgwqAgwqAgaWYgKCFpbm9kZS0+aV9vcCB8fCAhaW5vZGUtPmlfb3AtPmdldHhhdHRyKQo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICsKPiArIMKgIMKg IMKgIGZvciAoeGF0dHIgPSBldm1fY29uZmlnX3hhdHRybmFtZXM7ICp4YXR0ciAhPSBOVUxMOyB4 YXR0cisrKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcnJvciA9IGlub2RlLT5pX29wLT5n ZXR4YXR0cihkZW50cnksICp4YXR0ciwgTlVMTCwgMCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBpZiAoZXJyb3IgPCAwKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBp ZiAoZXJyb3IgPT0gLUVOT0RBVEEpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBjb250aW51ZTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHJldHVybiBlcnJvcjsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGNvdW50Kys7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgcmV0 dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0VWTV9ESUdTSUcKPiArCj4gK2lu dCBldm1fc2lnbl92ZXJpZnkoY29uc3QgY2hhciAqc2lnLCBpbnQgc2lnbGVuLAo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb25zdCBjaGFyICpkaWdlc3QsIGludCBkaWdlc3Rs ZW4pCj4gK3sKPiArIMKgIMKgIMKgIGlmICghZXZtX2tleXJpbmcpIHsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGV2bV9rZXlyaW5nID0gcmVxdWVzdF9rZXkoJmtleV90eXBlX2tleXJpbmcsICJf ZXZtIiwgTlVMTCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoSVNfRVJSKGV2bV9rZXly aW5nKSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJfZXJyKCJubyBl dm0ga2V5cmluZzogJWxkXG4iLCBQVFJfRVJSKGV2bV9rZXlyaW5nKSk7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBldm1fa2V5cmluZyA9IE5VTEw7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gUFRSX0VSUihldm1fa2V5cmluZyk7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgcmV0 dXJuIGtzaWduX3ZlcmlmeShldm1fa2V5cmluZywgc2lnLCBzaWdsZW4sIGRpZ2VzdCwgZGlnZXN0 bGVuKTsKPiArfQo+ICsKPiArI2Vsc2UKPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGV2bV9zaWdu X3ZlcmlmeShjb25zdCBjaGFyICpzaWcsIGludCBzaWdsZW4sCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoGNvbnN0IGNoYXIgKmRpZ2VzdCwgaW50IGRpZ2VzdGxlbikKPiArewo+ ICsgwqAgwqAgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICt9Cj4gKwo+ICsjZW5kaWYgLyogQ09O RklHX0VWTV9ESUdTSUcgKi8KPiArCj4gwqAvKgo+IMKgKiBldm1fdmVyaWZ5X2htYWMgLSBjYWxj dWxhdGUgYW5kIGNvbXBhcmUgdGhlIEhNQUMgd2l0aCB0aGUgRVZNIHhhdHRyCj4gwqAqCj4gQEAg LTY4LDMyICsxMjMsNzEgQEAgc3RhdGljIGVudW0gaW50ZWdyaXR5X3N0YXR1cyBldm1fdmVyaWZ5 X2htYWMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNpemVfdCB4YXR0cl92YWx1 ZV9sZW4sCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgc3RydWN0IGludGVncml0eV9paW50X2NhY2hlICppaW50KQo+IMKg ewo+IC0gwqAgwqAgwqAgc3RydWN0IGV2bV9pbWFfeGF0dHJfZGF0YSB4YXR0cl9kYXRhOwo+ICsg wqAgwqAgwqAgc3RydWN0IGV2bV9pbWFfeGF0dHJfZGF0YSAqeGF0dHJfZGF0YSA9IE5VTEw7Cj4g KyDCoCDCoCDCoCBzdHJ1Y3QgZXZtX2ltYV94YXR0cl9kYXRhIGNhbGM7Cj4gwqAgwqAgwqAgwqBl bnVtIGludGVncml0eV9zdGF0dXMgZXZtX3N0YXR1cyA9IElOVEVHUklUWV9QQVNTOwo+IC0gwqAg wqAgwqAgaW50IHJjOwo+ICsgwqAgwqAgwqAgaW50IHJjLCB4YXR0cl9sZW47Cj4KPiDCoCDCoCDC oCDCoGlmIChpaW50ICYmIGlpbnQtPmV2bV9zdGF0dXMgPT0gSU5URUdSSVRZX1BBU1MpCj4gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqByZXR1cm4gaWludC0+ZXZtX3N0YXR1czsKPgo+IMKgIMKgIMKg IMKgLyogaWYgc3RhdHVzIGlzIG5vdCBQQVNTLCB0cnkgdG8gY2hlY2sgYWdhaW4gLSBhZ2FpbnN0 IC1FTk9NRU0gKi8KPgo+IC0gwqAgwqAgwqAgcmMgPSBldm1fY2FsY19obWFjKGRlbnRyeSwgeGF0 dHJfbmFtZSwgeGF0dHJfdmFsdWUsCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHhhdHRyX3ZhbHVlX2xlbiwgeGF0dHJfZGF0YS5kaWdlc3QpOwo+IC0gwqAgwqAgwqAg aWYgKHJjIDwgMCkgewo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXZtX3N0YXR1cyA9IChyYyA9 PSAtRU5PREFUQSkKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgID8gSU5URUdSSVRZX05P WEFUVFJTIDogSU5URUdSSVRZX0ZBSUw7Cj4gKyDCoCDCoCDCoCAvKiBmaXJzdCBuZWVkIHRvIGtu b3cgdGhlIHNpZyB0eXBlICovCj4gKyDCoCDCoCDCoCByYyA9IHZmc19nZXR4YXR0cl9hbGxvYyhk ZW50cnksIFhBVFRSX05BTUVfRVZNLCAoY2hhciAqKikmeGF0dHJfZGF0YSwgMCwKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIEdGUF9OT0ZTKTsKPiArIMKg IMKgIMKgIGlmIChyYyA8PSAwKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocmMgPT0g MCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV2bV9zdGF0dXMgPSBJTlRF R1JJVFlfRkFJTDsgLyogZW1wdHkgKi8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVsc2UgaWYg KHJjID09IC1FTk9EQVRBKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBy YyA9IGV2bV9maW5kX3Byb3RlY3RlZF94YXR0cnMoZGVudHJ5KTsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGlmIChyYyA+IDApCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBldm1fc3RhdHVzID0gSU5URUdSSVRZX05PTEFCRUw7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlbHNlIGlmIChyYyA9PSAwKQo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXZtX3N0YXR1cyA9 IElOVEVHUklUWV9OT1hBVFRSUzsgLyogbmV3IGZpbGUgKi8KPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIH0KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdvdG8gb3V0Owo+IMKgIMKgIMKgIMKgfQo+ Cj4gLSDCoCDCoCDCoCB4YXR0cl9kYXRhLnR5cGUgPSBFVk1fWEFUVFJfSE1BQzsKPiAtIMKgIMKg IMKgIHJjID0gdmZzX3hhdHRyX2NtcChkZW50cnksIFhBVFRSX05BTUVfRVZNLCAodTggKikmeGF0 dHJfZGF0YSwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2l6ZW9m IHhhdHRyX2RhdGEsIEdGUF9OT0ZTKTsKPiAtIMKgIMKgIMKgIGlmIChyYyA8IDApCj4gLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCBldm1fc3RhdHVzID0gKHJjID09IC1FTk9EQVRBKQo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgPyBJTlRFR1JJVFlfTk9MQUJFTCA6IElOVEVHUklUWV9GQUlM Owo+ICsgwqAgwqAgwqAgeGF0dHJfbGVuID0gcmMgLSAxOwo+ICsKPiArIMKgIMKgIMKgIC8qIGNo ZWNrIHZhbHVlIHR5cGUgKi8KPiArIMKgIMKgIMKgIHN3aXRjaCAoeGF0dHJfZGF0YS0+dHlwZSkg ewo+ICsgwqAgwqAgwqAgY2FzZSBFVk1fWEFUVFJfSE1BQzoKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHJjID0gZXZtX2NhbGNfaG1hYyhkZW50cnksIHhhdHRyX25hbWUsIHhhdHRyX3ZhbHVlLAo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB4YXR0 cl92YWx1ZV9sZW4sIGNhbGMuZGlnZXN0KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChy YykKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcmMgPSBtZW1jbXAoeGF0dHJfZGF0YS0+ZGlnZXN0LCBjYWxjLmRpZ2Vz dCwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNpemVvZihjYWxj LmRpZ2VzdCkpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHJjKQo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmMgPSAtRUlOVkFMOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgYnJlYWs7Cj4gKyDCoCDCoCDCoCBjYXNlIEVWTV9JTUFfWEFUVFJfRElHU0lHOgo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgcmMgPSBldm1fY2FsY19oYXNoKGRlbnRyeSwgeGF0dHJfbmFt ZSwgeGF0dHJfdmFsdWUsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCB4YXR0cl92YWx1ZV9sZW4sIGNhbGMuZGlnZXN0KTsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGlmIChyYykKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFr Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmMgPSBldm1fc2lnbl92ZXJpZnkoeGF0dHJfZGF0 YS0+ZGlnZXN0LCB4YXR0cl9sZW4sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNhbGMuZGlnZXN0LCBzaXplb2YoY2FsYy5kaWdlc3QpKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghcmMpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIC8qIHdlIHByb2JhYmx5IHdhbnQgdG8gcmVwbGFjZSByc2Egd2l0aCBo bWFjIGhlcmUgKi8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV2bV91cGRh dGVfZXZteGF0dHIoZGVudHJ5LCB4YXR0cl9uYW1lLCB4YXR0cl92YWx1ZSwKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgeGF0dHJfdmFsdWVfbGVu KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJy ZWFrOwo+ICsgwqAgwqAgwqAgZGVmYXVsdDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJjID0g LUVJTlZBTDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsgwqAgwqAgwqAgfQo+ ICsKPiArIMKgIMKgIMKgIGlmIChyYykKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV2bV9zdGF0 dXMgPSAocmMgPT0gLUVOT0RBVEEpID8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIElOVEVHUklUWV9OT1hBVFRSUyA6IElOVEVHUklUWV9GQUlMOwo+IMKg b3V0Ogo+IMKgIMKgIMKgIMKgaWYgKGlpbnQpCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpaW50 LT5ldm1fc3RhdHVzID0gZXZtX3N0YXR1czsKPiArIMKgIMKgIMKgIGtmcmVlKHhhdHRyX2RhdGEp Owo+IMKgIMKgIMKgIMKgcmV0dXJuIGV2bV9zdGF0dXM7Cj4gwqB9Cj4KPiBAQCAtMzU3LDYgKzQ1 MSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZXZtKHZvaWQpCj4gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBwcmludGsoS0VSTl9JTkZPICJFVk06IEVycm9yIHJlZ2lzdGVyaW5nIHNlY2ZzXG4i KTsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGdvdG8gZXJyOwo+IMKgIMKgIMKgIMKgfQo+ICsK PiArIMKgIMKgIMKgIHJldHVybiAwOwo+IMKgZXJyOgo+IMKgIMKgIMKgIMKgcmV0dXJuIGVycm9y Owo+IMKgfQo+IEBAIC0zNjQsOCArNDYwLDExIEBAIGVycjoKPiDCoHN0YXRpYyB2b2lkIF9fZXhp dCBjbGVhbnVwX2V2bSh2b2lkKQo+IMKgewo+IMKgIMKgIMKgIMKgZXZtX2NsZWFudXBfc2VjZnMo KTsKPiArIMKgIMKgIMKgIGtleV9wdXQoZXZtX2tleXJpbmcpOwo+IMKgIMKgIMKgIMKgaWYgKGht YWNfdGZtKQo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY3J5cHRvX2ZyZWVfc2hhc2goaG1hY190 Zm0pOwo+ICsgwqAgwqAgwqAgaWYgKGhhc2hfdGZtKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg Y3J5cHRvX2ZyZWVfc2hhc2goaGFzaF90Zm0pOwo+IMKgfQo+Cj4gwqAvKgo+IC0tCj4gMS43LjQu MQo+Cj4K