From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 7B12149ED1 for ; Fri, 14 Jun 2024 18:38:55 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C1E3C68D6C1; Fri, 14 Jun 2024 21:38:51 +0300 (EEST) Received: from sender-op-o18.zoho.eu (sender-op-o18.zoho.eu [136.143.169.18]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E0A6668D4BF for ; Fri, 14 Jun 2024 21:38:44 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; t=1718390322; cv=none; d=zohomail.eu; s=zohoarc; b=I0S7fXIxS9dmIcLa3R41i8UaL0cH4kZAEKI1UKH+eJ7biCMMSDsXKBXEz/Xx8xkXtlqmI0++s/Kr26ALRfnuy21SJlC6idl9i29LIJJsANIpj4M4yvfIl+4fsEDz8h+D6o6rqo4uYhQuViHFJQvpBOs8wTUSWuQRFVBjdNBtMR0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.eu; s=zohoarc; t=1718390322; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=xOt8lvu9XPQmKtSCh4WU2XjVgERm2yyqpZORI2n7J4U=; b=V/9jyCOwbqsYGGBeqCMRvntWujf35M6fEVE5pn1MPD3eRYJK8hUsbuE56AvHviqfIaQZC0yvZ/nb2m8b7RiYzoHfiu0zY9XWDc2jYmD76zVKKurq+E0W70oQjBAKGmFaQczCtF9vrtQohqqYXBeplVWuIPiGzPaFTEWOjsn9Dso= ARC-Authentication-Results: i=1; mx.zohomail.eu; dkim=pass header.i=frankplowman.com; spf=pass smtp.mailfrom=post@frankplowman.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1718390322; s=zmail; d=frankplowman.com; i=post@frankplowman.com; h=Message-ID:Date:Date:MIME-Version:From:From:Subject:Subject:To:To:References:In-Reply-To:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To:Cc; bh=xOt8lvu9XPQmKtSCh4WU2XjVgERm2yyqpZORI2n7J4U=; b=b5THmBhloXCPQhdaxm3CVNyO8C2VdfEkivEeXqiv6nnwav0vkY7jc+RNEbKoH7eu eKohfocHqD9YeBcDmEFDJqzHfcnoIukHJuUCVrws3aeAcWy8HgmN86nFFtJgPDBzjEZ SEFJLhNgTJbeARZz+sHLvLEsAB/6cT38UPYt0o3s= Received: by mx.zoho.eu with SMTPS id 1718390319648697.2461964969248; Fri, 14 Jun 2024 20:38:39 +0200 (CEST) Message-ID: <79f412d6-74b1-49bc-a2c4-3e5a479e934b@frankplowman.com> Date: Fri, 14 Jun 2024 19:38:39 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Frank Plowman To: ffmpeg-devel@ffmpeg.org References: Content-Language: en-GB In-Reply-To: X-ZohoMailClient: External Subject: Re: [FFmpeg-devel] [PATCH] rtp enc/dec update for vvc X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: SGksCgpUaGFua3MgZm9yIHRoZSBwYXRjaC4gIFVuZm9ydHVuYXRlbHkgaXQgbG9va3MgdG8gYmUg Y29ycnVwdGVkIGFuZCBkb2VzCm5vdCBhcHBseS4gIEFsc28sIGl0IGxvb2tzIGFzIHRob3VnaCB5 b3Ugc3VibWl0dGVkIGZpdmUgbmVhci1pZGVudGljYWwKcGF0Y2hlcy4gIEkgd291bGQgc3VnZ2Vz dCB5b3UgdHJ5IGRpcmVjdGluZyBwYXRjaGVzIHRvIHlvdXIgb3duIG1haWxib3gKYW5kIHJlLWFw cGx5aW5nIHRoZW0gd2hpbGUgZGVidWdnaW5nIHRoZSBmb3JtYXR0aW5nIGlzc3VlcywgcmF0aGVy IHRoYW4Kc2VuZGluZyBsb3RzIG9mIGNvcnJ1cHRlZCBwYXRjaGVzIHRvIHRoZSBNTC4KCkEgY291 cGxlIG1vcmUgY29tbWVudHMgaW5saW5lLgoKQ2hlZXJzLApGcmFuawoKT24gMTQvMDYvMjAyNCAw MzozNSwgZnRhZnQyMDAwIHdyb3RlOgo+IFNpZ25lZC1vZmYtYnk6IGZ0YWZ0MjAwMCA8ZnRhZnQy MDAwQG1zbi5jb20+Cj4gLS0tCj4gwqAuZ2l0aWdub3JlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiDCoGNvbmZpZ3VyZcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCA0ICsKPiDCoGxpYmF2Y29kZWMvTWFrZWZp bGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+IMKgbGliYXZjb2RlYy9hbGxjb2Rl Y3MuY8KgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBsaWJhdmNvZGVjL2xpYnZ2ZW5jLmPC oMKgwqDCoMKgwqDCoMKgwqAgfCA1NjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gwqBsaWJhdmZvcm1hdC9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+ IMKgbGliYXZmb3JtYXQvcnRwZGVjLmPCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiDC oGxpYmF2Zm9ybWF0L3J0cGRlY19mb3JtYXRzLmjCoMKgIHzCoMKgIDEgKwo+IMKgbGliYXZmb3Jt YXQvcnRwZGVjX3Z2Yy5jwqDCoMKgwqDCoMKgIHwgMzQ5ICsrKysrKysrKysrKysrKysrKysrCj4g wqBsaWJhdmZvcm1hdC9ydHBlbmMuY8KgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKwo+IMKg bGliYXZmb3JtYXQvcnRwZW5jX2gyNjRfaGV2Yy5jIHzCoCA5NCArKysrKy0KPiDCoGxpYmF2Zm9y bWF0L3NkcC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAxODIgKysrKysrKysrKysKPiDC oDEyIGZpbGVzIGNoYW5nZWQsIDExOTcgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2xpYnZ2ZW5jLmMKPiDCoGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWJhdmZvcm1hdC9ydHBkZWNfdnZjLmMKPiAKPiBkaWZmIC0tZ2l0IGEvLmdpdGln bm9yZSBiLy5naXRpZ25vcmUKPiBpbmRleCBlODEwZDExMTA3Li5kNzQ0MWE2Y2RjIDEwMDY0NAo+ IC0tLSBhLy5naXRpZ25vcmUKPiArKysgYi8uZ2l0aWdub3JlCj4gQEAgLTQxLDMgKzQxLDQgQEAK PiDCoC9zcmMKPiDCoC9tYXBmaWxlCj4gwqAvdG9vbHMvcHl0aG9uL19fcHljYWNoZV9fLwo+ICsv YnVpbGQKCkkgZG9uJ3QgdGhpbmsgdGhpcyBzaG91bGQgYmUgaGVyZSAtIHRoaXMgaXMgc3BlY2lm aWMgdG8geW91cgplbnZpcm9ubWVudC4gIElmIHlvdSB3YW50IHRvIGlnbm9yZSBzb21ldGhpbmcg bG9jYWxseSwgeW91IGNhbiB1c2UKLmdpdC9pbmZvL2V4Y2x1ZGUKCj4gXCBObyBuZXdsaW5lIGF0 IGVuZCBvZiBmaWxlCj4gZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQo+IGluZGV4 IDgzMjg0NDI3ZGYuLmQzMzE2ODhlYjQgMTAwNzU1Cj4gLS0tIGEvY29uZmlndXJlCj4gKysrIGIv Y29uZmlndXJlCj4gQEAgLTI5Niw2ICsyOTYsNyBAQCBFeHRlcm5hbCBsaWJyYXJ5IHN1cHBvcnQ6 Cj4gwqDCoCAtLWVuYWJsZS1saWJ3ZWJwwqDCoMKgwqDCoMKgwqDCoCBlbmFibGUgV2ViUCBlbmNv ZGluZyB2aWEgbGlid2VicCBbbm9dCj4gwqDCoCAtLWVuYWJsZS1saWJ4MjY0wqDCoMKgwqDCoMKg wqDCoCBlbmFibGUgSC4yNjQgZW5jb2RpbmcgdmlhIHgyNjQgW25vXQo+IMKgwqAgLS1lbmFibGUt bGlieDI2NcKgwqDCoMKgwqDCoMKgwqAgZW5hYmxlIEhFVkMgZW5jb2RpbmcgdmlhIHgyNjUgW25v XQo+ICvCoCAtLWVuYWJsZS1saWJ2dmVuY8KgwqDCoMKgwqDCoMKgIGVuYWJsZSBILjI2Ni9WVkMg ZW5jb2RpbmcgdmlhIHZ2ZW5jIFtub10KClRoaXMgbG9va3MgbGlrZSB5b3UgaGFkIHRoZSBWVmVu QyBwYXRjaHNldCBhcHBsaWVkIHdoZW4geW91IGNyZWF0ZWQgdGhpcwpjb21taXQuICBJZiB5b3Vy IHBhdGNoIGRlcGVuZHMgb24gdGhlIFZWZW5DIHBhdGNoc2V0LCBpdCB3aWxsIGhhdmUgdG8Kd2Fp dCB1bnRpbCB0aGF0IGlzIGFwcGxpZWQgKHdoaWNoIGNvdWxkIHdlbGwgYmUgaW4gdGhlIG5leHQg ZGF5IG9yIHR3bykuCgo+IMKgwqAgLS1lbmFibGUtbGlieGV2ZcKgwqDCoMKgwqDCoMKgwqAgZW5h YmxlIEVWQyBlbmNvZGluZyB2aWEgbGlieGV2ZSBbbm9dCj4gwqDCoCAtLWVuYWJsZS1saWJ4ZXZk wqDCoMKgwqDCoMKgwqDCoCBlbmFibGUgRVZDIGRlY29kaW5nIHZpYSBsaWJ4ZXZkIFtub10KPiDC oMKgIC0tZW5hYmxlLWxpYnhhdnPCoMKgwqDCoMKgwqDCoMKgIGVuYWJsZSBBVlMgZW5jb2Rpbmcg dmlhIHhhdnMgW25vXQo+IEBAIC0xODY3LDYgKzE4NjgsNyBAQCBFWFRFUk5BTF9MSUJSQVJZX0dQ TF9MSVNUPSIKPiDCoMKgwqDCoCBsaWJ2aWRzdGFiCj4gwqDCoMKgwqAgbGlieDI2NAo+IMKgwqDC oMKgIGxpYngyNjUKPiArwqDCoMKgIGxpYnZ2ZW5jCj4gwqDCoMKgwqAgbGlieGF2cwo+IMKgwqDC oMKgIGxpYnhhdnMyCj4gwqDCoMKgwqAgbGlieHZpZAo+IEBAIC0zNTY5LDYgKzM1NzEsNyBAQCBs aWJ4MjY0cmdiX2VuY29kZXJfZGVwcz0ibGlieDI2NCIKPiDCoGxpYngyNjRyZ2JfZW5jb2Rlcl9z ZWxlY3Q9ImxpYngyNjRfZW5jb2RlciIKPiDCoGxpYngyNjVfZW5jb2Rlcl9kZXBzPSJsaWJ4MjY1 Igo+IMKgbGlieDI2NV9lbmNvZGVyX3NlbGVjdD0iYXRzY19hNTMgZG92aV9ycHVlbmMiCj4gK2xp YnZ2ZW5jX2VuY29kZXJfZGVwcz0ibGlidnZlbmMiCj4gwqBsaWJ4YXZzX2VuY29kZXJfZGVwcz0i bGlieGF2cyIKPiDCoGxpYnhhdnMyX2VuY29kZXJfZGVwcz0ibGlieGF2czIiCj4gwqBsaWJ4ZXZk X2RlY29kZXJfZGVwcz0ibGlieGV2ZCIKPiBAQCAtNzA0MSw2ICs3MDQ0LDcgQEAgZW5hYmxlZCBs aWJ4MjY0wqDCoMKgwqDCoMKgwqDCoMKgwqAgJiYgcmVxdWlyZV9wa2dfY29uZmlnCj4gbGlieDI2 NCB4MjY0ICJzdGRpbnQuaCB4MjY0LmgiIHgKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNoZWNrX2NwcF9jb25kaXRpb24gbGlieDI2 MiB4MjY0LmgKPiAiWDI2NF9NUEVHMiIKPiDCoGVuYWJsZWQgbGlieDI2NcKgwqDCoMKgwqDCoMKg wqDCoMKgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4MjY1IHgyNjUgeDI2NS5oCj4geDI2NV9h cGlfZ2V0ICYmCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXF1aXJlX2NwcF9jb25kaXRpb24gbGlieDI2NSB4MjY1LmgKPiAiWDI2 NV9CVUlMRCA+PSA4OSIKPiArZW5hYmxlZCBsaWJ2dmVuY8KgwqDCoMKgwqDCoMKgwqDCoCAmJiBy ZXF1aXJlX3BrZ19jb25maWcgbGlidnZlbmMgImxpYnZ2ZW5jID49Cj4gMS42LjEiICJ2dmVuYy92 dmVuYy5oIiB2dmVuY19nZXRfdmVyc2lvbgo+IMKgZW5hYmxlZCBsaWJ4YXZzwqDCoMKgwqDCoMKg wqDCoMKgwqAgJiYgcmVxdWlyZSBsaWJ4YXZzICJzdGRpbnQuaCB4YXZzLmgiCj4geGF2c19lbmNv ZGVyX2VuY29kZSAiLWx4YXZzICRwdGhyZWFkc19leHRyYWxpYnMgJGxpYm1fZXh0cmFsaWJzIgo+ IMKgZW5hYmxlZCBsaWJ4YXZzMsKgwqDCoMKgwqDCoMKgwqDCoCAmJiByZXF1aXJlX3BrZ19jb25m aWcgbGlieGF2czIgInhhdnMyID49Cj4gMS4zLjAiICJzdGRpbnQuaCB4YXZzMi5oIiB4YXZzMl9h cGlfZ2V0Cj4gwqBlbmFibGVkIGxpYnhldmTCoMKgwqDCoMKgwqDCoMKgwqDCoCAmJiByZXF1aXJl X3BrZ19jb25maWcgbGlieGV2ZCAieGV2ZCA+PSAwLjQuMSIKPiAieGV2ZC5oIiB4ZXZkX2RlY29k ZQo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtlZmls ZQo+IGluZGV4IDFhNDQzNTI5MDYuLjJlOThlMWM3MmYgMTAwNjQ0Cj4gLS0tIGEvbGliYXZjb2Rl Yy9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiBAQCAtMTE1NSw2ICsxMTU1 LDcgQEAgT0JKUy0kKENPTkZJR19MSUJXRUJQX0FOSU1fRU5DT0RFUinCoMKgwqDCoMKgwqAgKz0K PiBsaWJ3ZWJwZW5jX2NvbW1vbi5vIGxpYndlYnBlbmNfYW5pbQo+IMKgT0JKUy0kKENPTkZJR19M SUJYMjYyX0VOQ09ERVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBsaWJ4MjY0Lm8KPiDCoE9C SlMtJChDT05GSUdfTElCWDI2NF9FTkNPREVSKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gbGli eDI2NC5vCj4gwqBPQkpTLSQoQ09ORklHX0xJQlgyNjVfRU5DT0RFUinCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICs9IGxpYngyNjUubwo+ICtPQkpTLSQoQ09ORklHX0xJQlZWRU5DX0VOQ09ERVIpwqDC oMKgwqDCoMKgwqDCoMKgwqAgKz0gbGlidnZlbmMubwo+IMKgT0JKUy0kKENPTkZJR19MSUJYQVZT X0VOQ09ERVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBsaWJ4YXZzLm8KPiDCoE9CSlMtJChD T05GSUdfTElCWEFWUzJfRU5DT0RFUinCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBsaWJ4YXZzMi5v Cj4gwqBPQkpTLSQoQ09ORklHX0xJQlhFVkRfREVDT0RFUinCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICs9IGxpYnhldmQubwo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jIGIvbGli YXZjb2RlYy9hbGxjb2RlY3MuYwo+IGluZGV4IGIxMDJhODA2OWUuLjc2NTBhYmViZTQgMTAwNjQ0 Cj4gLS0tIGEvbGliYXZjb2RlYy9hbGxjb2RlY3MuYwo+ICsrKyBiL2xpYmF2Y29kZWMvYWxsY29k ZWNzLmMKPiBAQCAtODA3LDYgKzgwNyw3IEBAIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYngy NjJfZW5jb2RlcjsKPiDCoGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYngyNjRfZW5jb2RlcjsK PiDCoGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYngyNjRyZ2JfZW5jb2RlcjsKPiDCoGV4dGVy biBGRkNvZGVjIGZmX2xpYngyNjVfZW5jb2RlcjsKPiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZf bGlidnZlbmNfZW5jb2RlcjsKPiDCoGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnhldmVfZW5j b2RlcjsKPiDCoGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnhldmRfZGVjb2RlcjsKPiDCoGV4 dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYnhhdnNfZW5jb2RlcjsKPiBkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9saWJ2dmVuYy5jIGIvbGliYXZjb2RlYy9saWJ2dmVuYy5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi43OGQ0ZjU1YTJhCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2xpYmF2Y29kZWMvbGlidnZlbmMuYwo+IEBAIC0wLDAgKzEsNTY2IEBACj4gKy8qCj4g KyAqIEguMjY2IGVuY29kaW5nIHVzaW5nIHRoZSBWVmVuQyBsaWJyYXJ5Cj4gKyAqCj4gKyAqIENv cHlyaWdodCAoQykgMjAyMiwgVGhvbWFzIFNpZWRlbAo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKPiArICogdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBHTlUKPiArICogTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjExMC0xMzAxIFVTQQo+ICsgKi8KPiArCj4g KyNpbmNsdWRlICJjb25maWdfY29tcG9uZW50cy5oIgo+ICsKPiArI2luY2x1ZGUgPHZ2ZW5jL3Z2 ZW5jLmg+Cj4gKyNpbmNsdWRlIDx2dmVuYy92dmVuY0NmZy5oPgo+ICsjaW5jbHVkZSA8dnZlbmMv dmVyc2lvbi5oPgo+ICsKPiArI2luY2x1ZGUgImF2Y29kZWMuaCIKPiArI2luY2x1ZGUgImNvZGVj X2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJlbmNvZGUuaCIKPiArI2luY2x1ZGUgImludGVybmFs LmgiCj4gKyNpbmNsdWRlICJwYWNrZXRfaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgInByb2ZpbGVz LmgiCj4gKwo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2dXRpbC5oIgo+ICsjaW5jbHVkZSAibGli YXZ1dGlsL21lbS5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKPiArI2luY2x1 ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC9jb21tb24uaCIKPiAr I2luY2x1ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2Zy YW1lLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbG9nLmgiCj4gKwo+ICt0eXBlZGVmIHN0cnVj dCBWVmVuQ09wdGlvbnMgewo+ICvCoMKgwqAgaW50IHByZXNldDvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvLyBwcmVzZXQgMDogZmFzdGVywqAgNDogc2xvd2VyCj4gK8KgwqDCoCBp bnQgcXA7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBxdWFudGl6 YXRpb24gcGFyYW1ldGVyIDAtNjMKPiArwqDCoMKgIGludCBzdWJqZWN0aXZlT3B0aW1pemF0aW9u OyAvLyBwZXJjZXB0dWFsbHkgbW90aXZhdGVkIFFQCj4gYWRhcHRhdGlvbiwgWFBTTlIgYmFzZWQK PiArwqDCoMKgIGludCBmbGFnOGJpdENvZGluZzvCoMKgwqDCoMKgwqDCoMKgIC8vIGVuY29kZSBp biA4Yml0IGluc3RlYWQgb2YgMTBiaXQKPiArwqDCoMKgIGludCBpbnRyYVJlZnJlc2hTZWM7wqDC oMKgwqDCoMKgwqAgLy8gaW50cmEgcGVyaW9kL3JlZnJlc2ggaW4gc2Vjb25kcwo+ICvCoMKgwqAg aW50IGxldmVsSWRjO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gdnZjIGxldmVsX2lk Ywo+ICvCoMKgwqAgaW50IHRpZXI7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC8vIHZ2YyB0aWVyCj4gK8KgwqDCoCBBVkRpY3Rpb25hcnkgKnZ2ZW5jX29wdHM7Cj4gK30gVlZl bkNPcHRpb25zOwo+ICsKPiArdHlwZWRlZiBzdHJ1Y3QgVlZlbkNDb250ZXh0IHsKPiArwqDCoMKg IEFWQ2xhc3PCoMKgwqDCoMKgwqDCoMKgICphdl9jbGFzczsKPiArwqDCoMKgIFZWZW5DT3B0aW9u c8KgwqDCoCBvcHRpb25zO8KgwqDCoMKgwqAgLy8gZW5jb2RlciBvcHRpb25zCj4gK8KgwqDCoCB2 dmVuY0VuY29kZXLCoMKgwqAgKnZ2ZW5jRW5jOwo+ICvCoMKgwqAgdnZlbmNBY2Nlc3NVbml0ICpw QVU7Cj4gK8KgwqDCoCBib29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmNvZGVEb25lOwo+ICt9 IFZWZW5DQ29udGV4dDsKPiArCj4gKwo+ICtzdGF0aWMgYXZfY29sZCB2b2lkIGZmX3Z2ZW5jX2xv Z19jYWxsYmFjayh2b2lkICpjdHgsIGludCBsZXZlbCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKPiArewo+ICvCoMKgwqAgdnZlbmNf Y29uZmlnIHBhcmFtczsKPiArwqDCoMKgIHZ2ZW5jRW5jb2RlciAqdnZlbmNFbmMgPSAodnZlbmNF bmNvZGVyICopY3R4Owo+ICvCoMKgwqAgaWYgKHZ2ZW5jRW5jKXsKPiArwqDCoMKgwqDCoMKgwqAg dnZlbmNfY29uZmlnX2RlZmF1bHQoJnBhcmFtcyk7Cj4gK8KgwqDCoMKgwqDCoMKgIHZ2ZW5jX2dl dF9jb25maWcodnZlbmNFbmMsICZwYXJhbXMpOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoKGludClw YXJhbXMubV92ZXJib3NpdHkgPj0gbGV2ZWwpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmZw cmludGYobGV2ZWwgPT0gMSA/IHN0ZGVyciA6IHN0ZG91dCwgZm10LCBhcmdzKTsKPiArwqDCoMKg IH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZmZfdnZlbmNfc2V0X3ZlcmJvc2l0b3J5KHZ2ZW5j X2NvbmZpZyogcGFyYW1zICkKPiArewo+ICvCoMKgwqAgcGFyYW1zLT5tX3ZlcmJvc2l0eSA9IFZW RU5DX1ZFUkJPU0U7Cj4gK8KgwqDCoCBpZiAoYXZfbG9nX2dldF9sZXZlbCgpID49IEFWX0xPR19E RUJVRykKPiArwqDCoMKgwqDCoMKgwqAgcGFyYW1zLT5tX3ZlcmJvc2l0eSA9IFZWRU5DX0RFVEFJ TFM7Cj4gK8KgwqDCoCBlbHNlIGlmIChhdl9sb2dfZ2V0X2xldmVsKCkgPj0gQVZfTE9HX1ZFUkJP U0UpCj4gK8KgwqDCoMKgwqDCoMKgIHBhcmFtcy0+bV92ZXJib3NpdHkgPSBWVkVOQ19OT1RJQ0U7 wqDCoMKgwqDCoCAvLyBvdXRwdXQgcGVyIHBpY3R1cmUKPiBpbmZvCj4gK8KgwqDCoCBlbHNlIGlm IChhdl9sb2dfZ2V0X2xldmVsKCkgPj0gQVZfTE9HX0lORk8pCj4gK8KgwqDCoMKgwqDCoMKgIHBh cmFtcy0+bV92ZXJib3NpdHkgPSBWVkVOQ19XQVJOSU5HO8KgwqDCoMKgIC8vIGZmbXBlZyBkZWZh dWx0Cj4gZmZtcGVnIGxvZ2xldmVsCj4gK8KgwqDCoCBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgIHBh cmFtcy0+bV92ZXJib3NpdHkgPSBWVkVOQ19TSUxFTlQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZmZfdnZlbmNfc2V0X3BpY19mb3JtYXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB2dmVuY19jb25m aWcqCj4gcGFyYW1zICkKPiArewo+ICvCoMKgwqAgVlZlbkNDb250ZXh0ICpzID0oVlZlbkNDb250 ZXh0ICopIGF2Y3R4LT5wcml2X2RhdGE7Cj4gKwo+ICvCoMKgwqAgcGFyYW1zLT5tX2ludGVybkNo cm9tYUZvcm1hdCA9IFZWRU5DX0NIUk9NQV80MjA7Cj4gK8KgwqDCoCBwYXJhbXMtPm1faW5wdXRC aXREZXB0aFswXcKgwqAgPSAxMDsKPiArCj4gK8KgwqDCoCBpZiAoYXZjdHgtPnBpeF9mbXQgIT0g QVZfUElYX0ZNVF9ZVVY0MjBQMTBMRSl7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJ1bnN1cHBvcnRl ZCBwaXhlbCBmb3JtYXQgJXMsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgZm9yCj4geXV2NDIwcDEw bGVcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9nZXRfcGl4X2ZtdF9u YW1lKGF2Y3R4LT5waXhfZm10KSk7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgaWYgKHMtPm9wdGlvbnMuZmxhZzhiaXRD b2RpbmcpIHsKPiArI2lmIFZWRU5DX1ZFUlNJT05fTUFKT1IgPiAxIHx8IChWVkVOQ19WRVJTSU9O X01BSk9SID09IDEgJiYKPiBWVkVOQ19WRVJTSU9OX01JTk9SID4gOSkgfHwgKFZWRU5DX1ZFUlNJ T05fTUFKT1IgPT0gMSAmJgo+IFZWRU5DX1ZFUlNJT05fTUlOT1IgPj0gOSAmJiBWVkVOQ19WRVJT SU9OX1BBVENIID49IDEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFyYW1zLT5tX2ludGVy bmFsQml0RGVwdGhbMF0gPSA4Owo+ICsjZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgInVuc3VwcG9ydGVkIDhiaXQgY29kaW5nIG1vZGUuIDhiaXQgY29kaW5nIG5lZWRzIGF0Cj4g bGVhc3QgdnZlbmMgdmVyc2lvbiA+PSAxLjkuMSAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAiKGN1cnJlbnQgdmVyc2lvbiAlcylcbiIsIHZ2ZW5jX2dldF92ZXJzaW9uKCkgKTsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICsjZW5k aWYKPiArwqDCoMKgIH0KPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBmZl92dmVuY19zZXRfY29sb3JfZm9ybWF0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiB2dmVu Y19jb25maWcqIHBhcmFtcyApCj4gK3sKPiArwqDCoMKgIGlmIChhdmN0eC0+Y29sb3JfcHJpbWFy aWVzICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRCkKPiArwqDCoMKgwqDCoMKgwqAgcGFyYW1zLT5t X2NvbG91clByaW1hcmllcyA9IChpbnQpIGF2Y3R4LT5jb2xvcl9wcmltYXJpZXM7Cj4gK8KgwqDC oCBpZiAoYXZjdHgtPmNvbG9yc3BhY2UgIT0gQVZDT0xfU1BDX1VOU1BFQ0lGSUVEKQo+ICvCoMKg wqDCoMKgwqDCoCBwYXJhbXMtPm1fbWF0cml4Q29lZmZpY2llbnRzID0gKGludCkgYXZjdHgtPmNv bG9yc3BhY2U7Cj4gK8KgwqDCoCBpZiAoYXZjdHgtPmNvbG9yX3RyYyAhPSBBVkNPTF9UUkNfVU5T UEVDSUZJRUQpIHsKPiArwqDCoMKgwqDCoMKgwqAgcGFyYW1zLT5tX3RyYW5zZmVyQ2hhcmFjdGVy aXN0aWNzID0gKGludCkgYXZjdHgtPmNvbG9yX3RyYzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGlm IChhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RSQ19TTVBURTIwODQpCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcGFyYW1zLT5tX0hkck1vZGUgPSAoYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9 PQo+IEFWQ09MX1BSSV9CVDIwMjApID8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFZWRU5DX0hEUl9QUV9CVDIwMjAgOiBWVkVOQ19IRFJfUFE7Cj4gK8KgwqDCoMKgwqDCoMKgIGVs c2UgaWYgKGF2Y3R4LT5jb2xvcl90cmMgPT0gQVZDT0xfVFJDX0JUMjAyMF8xMAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBhdmN0eC0+Y29sb3JfdHJjID09IEFWQ09MX1RS Q19BUklCX1NURF9CNjcpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFyYW1zLT5tX0hkck1v ZGUgPSAoYXZjdHgtPmNvbG9yX3RyYyA9PQo+IEFWQ09MX1RSQ19CVDIwMjBfMTAgfHwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXZjdHgtPmNvbG9yX3ByaW1hcmllcyA9PQo+IEFWQ09MX1BSSV9CVDIwMjAgfHwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXZjdHgtPmNvbG9yc3BhY2UgPT0KPiBBVkNPTF9TUENfQlQyMDIwX05DTCB8fAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhdmN0eC0+Y29sb3JzcGFjZSA9PQo+IEFWQ09MX1NQQ19CVDIwMjBfQ0wpID8KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZW RU5DX0hEUl9ITEdfQlQyMDIwIDogVlZFTkNfSERSX0hMRzsKPiArwqDCoMKgIH0KPiArCj4gK8Kg wqDCoCBpZiAocGFyYW1zLT5tX0hkck1vZGUgPT0gVlZFTkNfSERSX09GRgo+ICvCoMKgwqDCoMKg wqDCoCAmJiAoYXZjdHgtPmNvbG9yX3ByaW1hcmllcyAhPSBBVkNPTF9QUklfVU5TUEVDSUZJRUQK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8fCBhdmN0eC0+Y29sb3JzcGFjZSAhPSBBVkNPTF9T UENfVU5TUEVDSUZJRUQpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIHBhcmFtcy0+bV92dWlQYXJhbWV0 ZXJzUHJlc2VudCA9IDE7Cj4gK8KgwqDCoMKgwqDCoMKgIHBhcmFtcy0+bV9jb2xvdXJEZXNjcmlw dGlvblByZXNlbnQgPSB0cnVlOwo+ICvCoMKgwqAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBm Zl92dmVuY19zZXRfZnJhbWVyYXRlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgdnZlbmNfY29uZmln Kgo+IHBhcmFtcyApCj4gK3sKPiArwqDCoMKgIHBhcmFtcy0+bV9GcmFtZVJhdGUgPSBhdmN0eC0+ dGltZV9iYXNlLmRlbjsKPiArwqDCoMKgIHBhcmFtcy0+bV9GcmFtZVNjYWxlID0gYXZjdHgtPnRp bWVfYmFzZS5udW07Cj4gKwo+ICtGRl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCj4gKwo+ ICsjaWYgRkZfQVBJX1RJQ0tTX1BFUl9GUkFNRQo+ICvCoMKgwqAgaWYgKGF2Y3R4LT50aWNrc19w ZXJfZnJhbWUgPT0gMSkgewo+ICsjZW5kaWYKPiArwqDCoMKgwqDCoMKgwqAgcGFyYW1zLT5tX1Rp Y2tzUGVyU2Vjb25kID0gLTE7wqDCoCAvLyBhdXRvIG1vZGUgZm9yIHRpY2tzIHBlcgo+IGZyYW1l ID0gMQo+ICsjaWYgRkZfQVBJX1RJQ0tTX1BFUl9GUkFNRQo+ICvCoMKgwqAgfSBlbHNlIHsKPiAr wqDCoMKgwqDCoMKgwqAgcGFyYW1zLT5tX1RpY2tzUGVyU2Vjb25kID0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjZWlsKChhdmN0eC0+dGltZV9iYXNlLmRlbiAvIChkb3VibGUpIGF2Y3R4LT50 aW1lX2Jhc2UubnVtKSAqCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChkb3Vi bGUpIGF2Y3R4LT50aWNrc19wZXJfZnJhbWUpOwo+ICvCoMKgwqAgfQo+ICsjZW5kaWYKPiArRkZf RU5BQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZmZfdnZl bmNfcGFyc2VfdnZlbmNfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiB2dmVuY19jb25m aWcqIHBhcmFtcywgY2hhciogc3RhdHNmaWxlICkKPiArewo+ICvCoMKgwqAgaW50IHBhcnNlX3Jl dCwgcmV0Owo+ICvCoMKgwqAgVlZlbkNDb250ZXh0ICpzOwo+ICvCoMKgwqAgQVZEaWN0aW9uYXJ5 RW50cnkgKmVuID0gTlVMTDsKPiArwqDCoMKgIHMgPShWVmVuQ0NvbnRleHQgKikgYXZjdHgtPnBy aXZfZGF0YTsKPiArwqDCoMKgIHJldCA9IDA7Cj4gKwo+ICvCoMKgwqAgd2hpbGUgKChlbiA9IGF2 X2RpY3RfZ2V0KHMtPm9wdGlvbnMudnZlbmNfb3B0cywgIiIsIGVuLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBVl9ESUNUX0lHTk9S RV9TVUZGSVgpKSkgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJV RywgInZ2ZW5jX3NldF9wYXJhbTogJyVzOiVzJ1xuIiwgZW4tPmtleSwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBlbi0+dmFsdWUpOwo+ICvCoMKgwqDCoMKgwqDCoCBwYXJzZV9yZXQg PSB2dmVuY19zZXRfcGFyYW0ocGFyYW1zLCBlbi0+a2V5LCBlbi0+dmFsdWUpOwo+ICvCoMKgwqDC oMKgwqDCoCBzd2l0Y2ggKHBhcnNlX3JldCkgewo+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIFZWRU5D X1BBUkFNX0JBRF9OQU1FOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiVW5rbm93biB2dmVuYyBvcHRpb246ICVzLlxuIiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuLT5rZXkpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBWVkVOQ19QQVJBTV9CQURfVkFMVUU6Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiSW52YWxpZCB2dmVuYyB2YWx1ZSBmb3Ig JXM6ICVzLlxuIiwgZW4tPmtleSwKPiBlbi0+dmFsdWUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldCA9IEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVh azsKPiArwqDCoMKgwqDCoMKgwqAgZGVmYXVsdDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKG1lbWNt cChlbi0+a2V5LCAicmNzdGF0c2ZpbGUiLCAxMSkgPT0gMCB8fAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIG1lbWNtcChlbi0+a2V5LCAiUkNTdGF0c0ZpbGUiLCAxMSkgPT0gMCkgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cm5jcHkoc3RhdHNmaWxlLCBlbi0+dmFsdWUsIHN0cmxlbihz dGF0c2ZpbGUpKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdGF0c2ZpbGVbc3RybGVuKHN0 YXRzZmlsZSldID0gJ1wwJzsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAgfQo+ICvCoMKg wqAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBmZl92dmVuY19zZXRfcmNfbW9k ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIHZ2ZW5jX2NvbmZpZyoKPiBwYXJhbXMpCj4gK3sKPiAr wqDCoMKgIGlmIChwYXJhbXMtPm1fUkNQYXNzICE9IC0xICYmIHBhcmFtcy0+bV9SQ051bVBhc3Nl cyA9PSAxKQo+ICvCoMKgwqDCoMKgwqDCoCBwYXJhbXMtPm1fUkNOdW1QYXNzZXMgPSAyO8KgwqDC oMKgwqDCoCAvKiBlbmFibGUgMnBhc3MgbW9kZSAqLwo+ICsKPiArwqDCoMKgIGlmKGF2Y3R4LT5y Y19tYXhfcmF0ZSkgewo+ICsjaWYgVlZFTkNfVkVSU0lPTl9NQUpPUiA+IDEgfHwgKFZWRU5DX1ZF UlNJT05fTUFKT1IgPT0gMSAmJgo+IFZWRU5DX1ZFUlNJT05fTUlOT1IgPiA4KQo+ICvCoMKgwqDC oMKgwqDCoCBwYXJhbXMtPm1fUkNNYXhCaXRyYXRlID0gYXZjdHgtPnJjX21heF9yYXRlOwo+ICsj ZW5kaWYKPiArCj4gKyNpZiBWVkVOQ19WRVJTSU9OX01BSk9SID09IDEgJiYgVlZFTkNfVkVSU0lP Tl9NSU5PUiA8IDExCj4gK8KgwqDCoMKgwqDCoMKgIC8qIHJjX21heF9yYXRlIHdpdGhvdXQgYSBi aXRfcmF0ZSBlbmFibGVzIGNhcHBlZCBDUUYgbW9kZS4KPiArwqDCoMKgwqDCoMKgwqAgKFFQICsg c3Viai4gb3B0aW1pemF0aW9uICsgbWF4LiBiaXRyYXRlKSAqLwo+ICvCoMKgwqDCoMKgwqDCoCBp ZighYXZjdHgtPmJpdF9yYXRlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKCBh dmN0eCwgQVZfTE9HX0VSUk9SLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkNh cHBlZCBDb25zdGFudCBRdWFsaXR5IEZhY3RvciBtb2RlIChjYXBwZWQgQ1FGKSBuZWVkcwo+IGF0 ICIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJsZWFzdCB2dmVuYyB2ZXJzaW9u ID49IDEuMTEuMCAoY3VycmVudCB2ZXJzaW9uICVzKVxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHZ2ZW5jX2dldF92ZXJzaW9uKCkpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArI2VuZGlm Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBm Zl92dmVuY19pbml0X2V4dHJhZGF0YShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIFZWZW5DQ29udGV4 dCAqcykKPiArewo+ICvCoMKgwqAgaW50IHJldDsKPiArwqDCoMKgIGlmIChhdmN0eC0+ZmxhZ3Mg JiBBVl9DT0RFQ19GTEFHX0dMT0JBTF9IRUFERVIpIHsKPiArwqDCoMKgwqDCoMKgwqAgcmV0ID0g dnZlbmNfZ2V0X2hlYWRlcnMocy0+dnZlbmNFbmMsIHMtPnBBVSk7Cj4gK8KgwqDCoMKgwqDCoMKg IGlmICgwICE9IHJldCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImNh bm5vdCBnZXQgaGVhZGVycyAoU1BTLFBQUykgZnJvbSB2dmMKPiBlbmNvZGVyKHZ2ZW5jKTogJXNc biIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dmVuY19nZXRfbGFz dF9lcnJvcihzLT52dmVuY0VuYykpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZ2ZW5jX2Vu Y29kZXJfY2xvc2Uocy0+dnZlbmNFbmMpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiArCj4gK8KgwqDCoMKgwqDC oMKgIGlmIChzLT5wQVUtPnBheWxvYWRVc2VkU2l6ZSA8PSAwKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdnZlbmNfZW5jb2Rlcl9jbG9zZShzLT52dmVuY0VuYyk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gK8KgwqDCoMKgwqDCoMKg IH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSA9IHMtPnBBVS0+ cGF5bG9hZFVzZWRTaXplOwo+ICvCoMKgwqDCoMKgwqDCoCBhdmN0eC0+ZXh0cmFkYXRhID0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9tYWxsb2N6KGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSAr Cj4gQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICgh YXZjdHgtPmV4dHJhZGF0YSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg IkNhbm5vdCBhbGxvY2F0ZSBWVkMgaGVhZGVyIG9mIHNpemUgJWQuXG4iLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZjdHgtPmV4dHJhZGF0YV9zaXplKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB2dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5jKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICvCoMKgwqDC oMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBtZW1jcHkoYXZjdHgtPmV4dHJhZGF0YSwg cy0+cEFVLT5wYXlsb2FkLCBhdmN0eC0+ZXh0cmFkYXRhX3NpemUpOwo+ICvCoMKgwqDCoMKgwqDC oCBtZW1zZXQoYXZjdHgtPmV4dHJhZGF0YSArIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSwgMCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpF KTsKPiArwqDCoMKgIH0KPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYXZf Y29sZCBpbnQgZmZfdnZlbmNfZW5jb2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQo+ICt7 Cj4gK8KgwqDCoCBpbnQgcmV0Owo+ICvCoMKgwqAgaW50IGZyYW1lcmF0ZSwgcXA7Cj4gK8KgwqDC oCBWVmVuQ0NvbnRleHQgKnM7Cj4gK8KgwqDCoCB2dmVuY19jb25maWcgcGFyYW1zOwo+ICvCoMKg wqAgdnZlbmNQcmVzZXRNb2RlIHByZXNldDsKPiArwqDCoMKgIGNoYXIgc3RhdHNmaWxlWzEwMjRd ID0gInZ2ZW5jLXJjc3RhdHMuanNvbiI7Cj4gKwo+ICvCoMKgwqAgcyA9IChWVmVuQ0NvbnRleHQg KikgYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIHFwID0gcy0+b3B0aW9ucy5xcDsKPiArwqDC oMKgIHByZXNldCA9ICh2dmVuY1ByZXNldE1vZGUpIHMtPm9wdGlvbnMucHJlc2V0Owo+ICsKPiAr wqDCoMKgIGlmIChhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0lOVEVSTEFDRURfRENUKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICJmZl92dmVuY19lbmNvZGVfaW5pdDo6aW5pdCgpIGludGVy bGFjZWQgZW5jb2Rpbmcgbm90Cj4gc3VwcG9ydGVkIHlldFxuIik7Cj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHZ2 ZW5jX2NvbmZpZ19kZWZhdWx0KCZwYXJhbXMpOwo+ICsKPiArwqDCoMKgIGZyYW1lcmF0ZSA9IGF2 Y3R4LT50aW1lX2Jhc2UuZGVuIC8gYXZjdHgtPnRpbWVfYmFzZS5udW07Cj4gK8KgwqDCoCB2dmVu Y19pbml0X2RlZmF1bHQoJnBhcmFtcywgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0LCBmcmFt ZXJhdGUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChx cCA+PSAwKSA/IDAgOiBhdmN0eC0+Yml0X3JhdGUsIChxcCA8IDApID8gMzIgOgo+IHFwLCBwcmVz ZXQpOwo+ICsKPiArwqDCoMKgIGZmX3Z2ZW5jX3NldF92ZXJib3NpdG9yeSgmcGFyYW1zKTsKPiAr Cj4gK8KgwqDCoCBpZiAoYXZjdHgtPnRocmVhZF9jb3VudCA+IDApCj4gK8KgwqDCoMKgwqDCoMKg IHBhcmFtcy5tX251bVRocmVhZHMgPSBhdmN0eC0+dGhyZWFkX2NvdW50Owo+ICsKPiArwqDCoMKg IC8qIEdPUCBzZXR0aW5ncyAoSURSL0NSQSkgKi8KPiArwqDCoMKgIGlmIChhdmN0eC0+ZmxhZ3Mg JiBBVl9DT0RFQ19GTEFHX0NMT1NFRF9HT1ApCj4gK8KgwqDCoMKgwqDCoMKgIHBhcmFtcy5tX0Rl Y29kaW5nUmVmcmVzaFR5cGUgPSBWVkVOQ19EUlRfSURSOwo+ICsKPiArwqDCoMKgIGlmIChhdmN0 eC0+Z29wX3NpemUgPT0gMSkgewo+ICvCoMKgwqDCoMKgwqDCoCBwYXJhbXMubV9HT1BTaXplID0g MTsKPiArwqDCoMKgwqDCoMKgwqAgcGFyYW1zLm1fSW50cmFQZXJpb2QgPSAxOwo+ICvCoMKgwqAg fSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqAgcGFyYW1zLm1fSW50cmFQZXJpb2RTZWMgPSBzLT5v cHRpb25zLmludHJhUmVmcmVzaFNlYzsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBwYXJhbXMu bV9BY2Nlc3NVbml0RGVsaW1pdGVyID0gdHJ1ZTsKPiArwqDCoMKgIHBhcmFtcy5tX1JDTnVtUGFz c2VzID0gMTsKPiArCj4gK8KgwqDCoCBwYXJhbXMubV91c2VQZXJjZXB0UVBBID0gcy0+b3B0aW9u cy5zdWJqZWN0aXZlT3B0aW1pemF0aW9uOwo+ICvCoMKgwqAgcGFyYW1zLm1fbGV2ZWzCoMKgwqDC oMKgwqDCoMKgID0gKHZ2ZW5jTGV2ZWwpIHMtPm9wdGlvbnMubGV2ZWxJZGM7Cj4gK8KgwqDCoCBw YXJhbXMubV9sZXZlbFRpZXLCoMKgwqDCoCA9ICh2dmVuY1RpZXIpIHMtPm9wdGlvbnMudGllcjsK PiArCj4gK8KgwqDCoCBmZl92dmVuY19zZXRfZnJhbWVyYXRlKGF2Y3R4LCAmcGFyYW1zKTsKPiAr Cj4gK8KgwqDCoCByZXQgPSBmZl92dmVuY19zZXRfcGljX2Zvcm1hdChhdmN0eCwgJnBhcmFtcyk7 Cj4gK8KgwqDCoCBpZiggcmV0ICE9IDAgKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ ICsKPiArwqDCoMKgIGZmX3Z2ZW5jX3NldF9jb2xvcl9mb3JtYXQoYXZjdHgsICZwYXJhbXMpOwo+ ICsKPiArwqDCoMKgIHJldCA9IGZmX3Z2ZW5jX3BhcnNlX3Z2ZW5jX3BhcmFtcyhhdmN0eCwgJnBh cmFtcywgJnN0YXRzZmlsZVswXSk7Cj4gK8KgwqDCoCBpZiggcmV0ICE9IDAgKQo+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+ICsKPiArCj4gK8KgwqDCoCByZXQgPSBmZl92dmVuY19zZXRf cmNfbW9kZShhdmN0eCwgJnBhcmFtcyk7Cj4gK8KgwqDCoCBpZiggcmV0ICE9IDAgKQo+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgIHMtPnZ2ZW5jRW5jID0gdnZlbmNf ZW5jb2Rlcl9jcmVhdGUoKTsKPiArwqDCoMKgIGlmIChOVUxMID09IHMtPnZ2ZW5jRW5jKSB7Cj4g K8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiY2Fubm90IGNyZWF0 ZSB2dmMgZW5jb2Rlcgo+ICh2dmVuYylcbiIpOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKgIHZ2ZW5jX3NldF9tc2dfY2Fs bGJhY2soJnBhcmFtcywgcy0+dnZlbmNFbmMsIGZmX3Z2ZW5jX2xvZ19jYWxsYmFjayk7Cj4gK8Kg wqDCoCByZXQgPSB2dmVuY19lbmNvZGVyX29wZW4ocy0+dnZlbmNFbmMsICZwYXJhbXMpOwo+ICvC oMKgwqAgaWYgKDAgIT0gcmV0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiY2Fubm90IG9wZW4gdnZjIGVuY29kZXIgKHZ2ZW5jKToKPiAlc1xuIiwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dmVuY19nZXRfbGFzdF9lcnJvcihzLT52dmVu Y0VuYykpOwo+ICvCoMKgwqDCoMKgwqDCoCB2dmVuY19lbmNvZGVyX2Nsb3NlKHMtPnZ2ZW5jRW5j KTsKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgIH0K PiArCj4gK8KgwqDCoCB2dmVuY19nZXRfY29uZmlnKHMtPnZ2ZW5jRW5jLCAmcGFyYW1zKTvCoMKg wqDCoCAvKiBnZXQgdGhlIGFkYXB0ZWQKPiBjb25maWcgKi8KPiArCj4gK8KgwqDCoCBhdl9sb2co YXZjdHgsIGF2X2xvZ19nZXRfbGV2ZWwoKSwgInZ2ZW5jIHZlcnNpb246ICVzXG4iLAo+IHZ2ZW5j X2dldF92ZXJzaW9uKCkpOwo+ICvCoMKgwqAgYXZfbG9nKGF2Y3R4LCBhdl9sb2dfZ2V0X2xldmVs KCksICIlc1xuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dmVuY19nZXRfY29uZmlnX2Fz X3N0cmluZygmcGFyYW1zLCBwYXJhbXMubV92ZXJib3NpdHkpKTsKPiArCj4gK8KgwqDCoCBpZiAo cGFyYW1zLm1fUkNOdW1QYXNzZXMgPT0gMikgewo+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSB2dmVu Y19pbml0X3Bhc3Mocy0+dnZlbmNFbmMsIHBhcmFtcy5tX1JDUGFzcyAtIDEsCj4gJnN0YXRzZmls ZVswXSk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICgwICE9IHJldCkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgImNhbm5vdCBpbml0IHBhc3MgJWQgZm9yIHZ2YyBlbmNvZGVy ICh2dmVuYyk6ICVzXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cGFyYW1zLm1fUkNQYXNzLCB2dmVuY19nZXRfbGFzdF9lcnJvcihzLT52dmVuY0VuYykpOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZ2ZW5jX2VuY29kZXJfY2xvc2Uocy0+dnZlbmNFbmMpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cj4gK8KgwqDC oMKgwqDCoMKgIH0KPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCBzLT5wQVUgPSB2dmVuY19hY2Nl c3NVbml0X2FsbG9jKCk7Cj4gK8KgwqDCoCBpZiggIXMtPnBBVSApewo+ICvCoMKgwqDCoMKgwqDC oCBhdl9sb2coYXZjdHgsIEFWX0xPR19GQVRBTCwgImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9y IEFVCj4gcGF5bG9hZFxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCB2dmVuY19hY2Nlc3NVbml0X2FsbG9jX3BheWxvYWQo cy0+cEFVLCBhdmN0eC0+d2lkdGggKiBhdmN0eC0+aGVpZ2h0KTsKPiArwqDCoMKgIGlmKCAhcy0+ cEFVICl7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0ZBVEFMLCAiY2Fu bm90IGFsbG9jYXRlIHBheWxvYWQgbWVtb3J5IG9mCj4gc2l6ZSAlZFxuIiwKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2Y3R4LT53aWR0aCAqIGF2Y3R4LT5oZWlnaHQgKTsKPiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArwqDCoMKgIH0KPiArCj4g K8KgwqDCoCByZXQgPSBmZl92dmVuY19pbml0X2V4dHJhZGF0YShhdmN0eCwgcyk7Cj4gK8KgwqDC oCBpZiggcmV0ICE9IDAgKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ICsKPiArwqDC oMKgIHMtPmVuY29kZURvbmUgPSBmYWxzZTsKPiArwqDCoMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgYXZfY29sZCBpbnQgZmZfdnZlbmNfZW5jb2RlX2Nsb3NlKEFWQ29kZWNDb250ZXh0 ICogYXZjdHgpCj4gK3sKPiArwqDCoMKgIFZWZW5DQ29udGV4dCAqcyA9IChWVmVuQ0NvbnRleHQg KikgYXZjdHgtPnByaXZfZGF0YTsKPiArwqDCoMKgIGlmIChzLT52dmVuY0VuYykgewo+ICvCoMKg wqDCoMKgwqDCoCBpZiAoYXZfbG9nX2dldF9sZXZlbCgpID49IEFWX0xPR19WRVJCT1NFKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZ2ZW5jX3ByaW50X3N1bW1hcnkocy0+dnZlbmNFbmMpOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKDAgIT0gdnZlbmNfZW5jb2Rlcl9jbG9zZShzLT52dmVu Y0VuYykpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgImNhbm5vdCBjbG9zZSB2dmVuY1xuIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC0xOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAg dnZlbmNfYWNjZXNzVW5pdF9mcmVlKHMtPnBBVSwgdHJ1ZSk7Cj4gKwo+ICvCoMKgwqAgcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBhdl9jb2xkIGludCBmZl92dmVuY19lbmNvZGVfZnJhbWUo QVZDb2RlY0NvbnRleHQgKmF2Y3R4LAo+IEFWUGFja2V0ICpwa3QsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnN0IEFWRnJhbWUgKmZyYW1lLCBpbnQKPiAqZ290X3BhY2tldCkKPiArewo+ ICvCoMKgwqAgVlZlbkNDb250ZXh0ICpzID0gKFZWZW5DQ29udGV4dCAqKSBhdmN0eC0+cHJpdl9k YXRhOwo+ICvCoMKgwqAgdnZlbmNZVVZCdWZmZXIgKnB5dXZidWY7Cj4gK8KgwqDCoCB2dmVuY1lV VkJ1ZmZlciB5dXZidWY7Cj4gK8KgwqDCoCBpbnQgcGljdF90eXBlOwo+ICvCoMKgwqAgaW50IHJl dDsKPiArCj4gK8KgwqDCoCBweXV2YnVmID0gTlVMTDsKPiArwqDCoMKgIGlmIChmcmFtZSkgewo+ ICvCoMKgwqDCoMKgwqDCoCBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gQVZfUElYX0ZNVF9ZVVY0MjBQ MTBMRSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZ2ZW5jX1lVVkJ1ZmZlcl9kZWZhdWx0 KCZ5dXZidWYpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHl1dmJ1Zi5wbGFuZXNbMF0ucHRy ID0gKGludDE2X3QgKikgZnJhbWUtPmRhdGFbMF07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg eXV2YnVmLnBsYW5lc1sxXS5wdHIgPSAoaW50MTZfdCAqKSBmcmFtZS0+ZGF0YVsxXTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB5dXZidWYucGxhbmVzWzJdLnB0ciA9IChpbnQxNl90ICopIGZy YW1lLT5kYXRhWzJdOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB5dXZidWYucGxhbmVz WzBdLndpZHRoID0gZnJhbWUtPndpZHRoOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHl1dmJ1 Zi5wbGFuZXNbMF0uaGVpZ2h0ID0gZnJhbWUtPmhlaWdodDsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAvKiBzdHJpZGUgaXMgdXNlZCBpbiAxNmJpdHNhbXBsZXMgKDE2Yml0KSBpbiB2dmVuYywg ZmZtcGVnCj4gdXNlcyBzdHJpZGUgaW4gYnl0ZXMgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB5dXZidWYucGxhbmVzWzBdLnN0cmlkZSA9IGZyYW1lLT5saW5lc2l6ZVswXSA+PiAxOwo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB5dXZidWYucGxhbmVzWzFdLndpZHRoID0gZnJhbWUt PndpZHRoID4+IDE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeXV2YnVmLnBsYW5lc1sxXS5o ZWlnaHQgPSBmcmFtZS0+aGVpZ2h0ID4+IDE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeXV2 YnVmLnBsYW5lc1sxXS5zdHJpZGUgPSBmcmFtZS0+bGluZXNpemVbMV0gPj4gMTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgeXV2YnVmLnBsYW5lc1syXS53aWR0aCA9IGZyYW1lLT53aWR0 aCA+PiAxOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHl1dmJ1Zi5wbGFuZXNbMl0uaGVpZ2h0 ID0gZnJhbWUtPmhlaWdodCA+PiAxOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHl1dmJ1Zi5w bGFuZXNbMl0uc3RyaWRlID0gZnJhbWUtPmxpbmVzaXplWzJdID4+IDE7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHl1dmJ1Zi5jdHMgPSBmcmFtZS0+cHRzOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHl1dmJ1Zi5jdHNWYWxpZCA9IHRydWU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcHl1dmJ1ZiA9ICZ5dXZidWY7Cj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAidW5zdXBwb3J0ZWQgaW5wdXQgY29sb3JzcGFj ZSEgaW5wdXQgbXVzdCBiZQo+IHl1djQyMHAxMGxlIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAg fQo+ICsKPiArwqDCoMKgIGlmICghcy0+ZW5jb2RlRG9uZSkgewo+ICvCoMKgwqDCoMKgwqDCoCBy ZXQgPSB2dmVuY19lbmNvZGUocy0+dnZlbmNFbmMsIHB5dXZidWYsIHMtPnBBVSwgJnMtPmVuY29k ZURvbmUpOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0ICE9IDApIHsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImVycm9yIGluIHZ2ZW5jOjpl bmNvZGUgLQo+IHJldDolZFxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFM KTsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKg wqAgKmdvdF9wYWNrZXQgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiArwqDCoMKg IH0KPiArCj4gK8KgwqDCoCBpZiAocy0+cEFVLT5wYXlsb2FkVXNlZFNpemUgPiAwKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgIHJldCA9IGZmX2dldF9lbmNvZGVfYnVmZmVyKGF2Y3R4LCBwa3QsIHMtPnBB VS0+cGF5bG9hZFVzZWRTaXplLAo+IDApOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi RXJyb3IgZ2V0dGluZyBvdXRwdXQgcGFja2V0LlxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHJldDsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAg bWVtY3B5KHBrdC0+ZGF0YSwgcy0+cEFVLT5wYXlsb2FkLCBzLT5wQVUtPnBheWxvYWRVc2VkU2l6 ZSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocy0+cEFVLT5jdHNWYWxpZCkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwa3QtPnB0cyA9IHMtPnBBVS0+Y3RzOwo+ICvCoMKgwqDCoMKgwqDC oCBpZiAocy0+cEFVLT5kdHNWYWxpZCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwa3QtPmR0 cyA9IHMtPnBBVS0+ZHRzOwo+ICvCoMKgwqDCoMKgwqDCoCBwa3QtPmZsYWdzIHw9IEFWX1BLVF9G TEFHX0tFWSAqIHMtPnBBVS0+cmFwOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgc3dpdGNoIChzLT5w QVUtPnNsaWNlVHlwZSkgewo+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIFZWRU5DX0lfU0xJQ0U6Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGljdF90eXBlID0gQVZfUElDVFVSRV9UWVBFX0k7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgVlZF TkNfUF9TTElDRToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaWN0X3R5cGUgPSBBVl9QSUNU VVJFX1RZUEVfUDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgwqDC oMKgwqAgY2FzZSBWVkVOQ19CX1NMSUNFOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBpY3Rf dHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9COwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Owo+ICvCoMKgwqDCoMKgwqDCoCBkZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBwaWN0dXJlIHR5cGUKPiBlbmNvdW50 ZXJlZC5cbiIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBmZl9zaWRlX2Rh dGFfc2V0X2VuY29kZXJfc3RhdHMocGt0LCAwLCBOVUxMLCAwLCBwaWN0X3R5cGUpOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqAgKmdvdF9wYWNrZXQgPSAxOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIDA7Cj4gK8KgwqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoCAqZ290X3BhY2tldCA9 IDA7Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ICvCoMKgwqAgfQo+ICsKPiArwqDCoMKg IHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0IHBp eF9mbXRzX3Z2ZW5jW10gPSB7Cj4gK8KgwqDCoCBBVl9QSVhfRk1UX1lVVjQyMFAxMExFLAo+ICvC oMKgwqAgQVZfUElYX0ZNVF9OT05FCj4gK307Cj4gKwo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZz ZXRvZihWVmVuQ0NvbnRleHQsIHgpCj4gKyNkZWZpbmUgVkUgQVZfT1BUX0ZMQUdfVklERU9fUEFS QU0gfCBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJBTQo+ICtzdGF0aWMgY29uc3QgQVZPcHRpb24g bGlidnZlbmNfb3B0aW9uc1tdID0gewo+ICvCoMKgwqAgeyJwcmVzZXQiLCAic2V0IGVuY29kaW5n IHByZXNldCgwOiBmYXN0ZXIgLSA0OiBzbG93ZXIiLCBPRkZTRVQoCj4gb3B0aW9ucy5wcmVzZXQp LCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gMn0gLCAwICwgNCAsIFZFLCAicHJlc2V0In0sCj4g K8KgwqDCoMKgwqDCoMKgIHsgImZhc3RlciIsICIwIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsu aTY0ID0gVlZFTkNfRkFTVEVSfSwKPiBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgInByZXNldCIgfSwK PiArwqDCoMKgwqDCoMKgwqAgeyAiZmFzdCIswqDCoCAiMSIsIDAsIEFWX09QVF9UWVBFX0NPTlNU LCB7Lmk2NCA9IFZWRU5DX0ZBU1R9LAo+IElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJlc2V0IiB9 LAo+ICvCoMKgwqDCoMKgwqDCoCB7ICJtZWRpdW0iLCAiMiIsIDAsIEFWX09QVF9UWVBFX0NPTlNU LCB7Lmk2NCA9IFZWRU5DX01FRElVTX0sCj4gSU5UX01JTiwgSU5UX01BWCwgVkUsICJwcmVzZXQi IH0sCj4gK8KgwqDCoMKgwqDCoMKgIHsgInNsb3ciLMKgwqAgIjMiLCAwLCBBVl9PUFRfVFlQRV9D T05TVCwgey5pNjQgPSBWVkVOQ19TTE9XfSwKPiBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgInByZXNl dCIgfSwKPiArwqDCoMKgwqDCoMKgwqAgeyAic2xvd2VyIiwgIjQiLCAwLCBBVl9PUFRfVFlQRV9D T05TVCwgey5pNjQgPSBWVkVOQ19TTE9XRVJ9LAo+IElOVF9NSU4sIElOVF9NQVgsIFZFLCAicHJl c2V0IiB9LAo+ICvCoMKgwqAgeyAicXAiwqDCoMKgwqAgLCAic2V0IHF1YW50aXphdGlvbiIsIE9G RlNFVChvcHRpb25zLnFwKSwKPiBBVl9PUFRfVFlQRV9JTlQswqAgey5pNjQgPSAtMX0sIC0xICwg NjMgLFZFLCAicXBfbW9kZSIgfSwKPiArwqDCoMKgIHsgInBlcmlvZCIgLCAic2V0IChpbnRyYSkg cmVmcmVzaCBwZXJpb2QgaW4gc2Vjb25kcyIsCj4gT0ZGU0VUKG9wdGlvbnMuaW50cmFSZWZyZXNo U2VjKSwgQVZfT1BUX1RZUEVfSU5ULMKgIHsuaTY0ID0gMX0swqAgMSAsCj4gSU5UX01BWCAsVkUs ImlyZWZyZXNoc2VjIiB9LAo+ICvCoMKgwqAgeyAic3Viam9wdCIsICJzZXQgc3ViamVjdGl2ZSAo cGVyY2VwdHVhbGx5IG1vdGl2YXRlZCkKPiBvcHRpbWl6YXRpb24iLCBPRkZTRVQob3B0aW9ucy5z dWJqZWN0aXZlT3B0aW1pemF0aW9uKSwgQVZfT1BUX1RZUEVfQk9PTCwKPiB7Lmk2NCA9IDF9LMKg IDAgLCAxLCBWRX0sCj4gK8KgwqDCoCB7ICJiaXRkZXB0aDgiLCAic2V0IDhiaXQgY29kaW5nIG1v ZGUiLAo+IE9GRlNFVChvcHRpb25zLmZsYWc4Yml0Q29kaW5nKSwgQVZfT1BUX1RZUEVfQk9PTCwg ey5pNjQgPSAwfSzCoCAwICwgMSwgVkV9LAo+ICvCoMKgwqAgeyAidnZlbmMtcGFyYW1zIiwgInNl dCB0aGUgdnZlbmMgY29uZmlndXJhdGlvbiB1c2luZyBhIDotc2VwYXJhdGVkCj4gbGlzdCBvZiBr ZXk9dmFsdWUgcGFyYW1ldGVycyIsIE9GRlNFVChvcHRpb25zLnZ2ZW5jX29wdHMpLAo+IEFWX09Q VF9UWVBFX0RJQ1QsIHsgMCB9LCAwLCAwLCBWRSB9LAo+ICvCoMKgwqAgeyAibGV2ZWxpZGMiLCAi dnZjIGxldmVsX2lkYyIsIE9GRlNFVCggb3B0aW9ucy5sZXZlbElkYyksCj4gQVZfT1BUX1RZUEVf SU5ULCB7Lmk2NCA9IDB9LCAwLCAxMDUsIFZFLCAibGV2ZWxpZGMifSwKPiArwqDCoMKgwqDCoMKg wqAgeyAiMCIswqDCoCAiYXV0byIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDB9LMKg IElOVF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ICvCoMKgwqDCoMKgwqDCoCB7 ICIxIizCoMKgICIxIsKgwqAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSAxNn0sIElO VF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ICvCoMKgwqDCoMKgwqDCoCB7ICIy IizCoMKgICIyIsKgwqAgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSAzMn0sIElOVF9N SU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ICvCoMKgwqDCoMKgwqDCoCB7ICIyLjEi LCAiMi4xIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDM1fSwgSU5UX01JTiwKPiBJ TlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gK8KgwqDCoMKgwqDCoMKgIHsgIjMiLMKgwqAgIjMi wqDCoCAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDQ4fSwgSU5UX01JTiwKPiBJTlRf TUFYLCBWRSwgImxldmVsaWRjIn0sCj4gK8KgwqDCoMKgwqDCoMKgIHsgIjMuMSIsICIzLjEiICwg MCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gNTF9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZF LCAibGV2ZWxpZGMifSwKPiArwqDCoMKgwqDCoMKgwqAgeyAiNCIswqDCoCAiNCLCoMKgICwgMCwg QVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gNjR9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAi bGV2ZWxpZGMifSwKPiArwqDCoMKgwqDCoMKgwqAgeyAiNC4xIiwgIjQuMSIgLCAwLCBBVl9PUFRf VFlQRV9DT05TVCwgey5pNjQgPSA2N30sIElOVF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlk YyJ9LAo+ICvCoMKgwqDCoMKgwqDCoCB7ICI1IizCoMKgICI1IsKgwqAgLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgey5pNjQgPSA4MH0sIElOVF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9 LAo+ICvCoMKgwqDCoMKgwqDCoCB7ICI1LjEiLCAiNS4xIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNU LCB7Lmk2NCA9IDgzfSwgSU5UX01JTiwKPiBJTlRfTUFYLCBWRSwgImxldmVsaWRjIn0sCj4gK8Kg wqDCoMKgwqDCoMKgIHsgIjUuMiIsICI1LjIiICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0 ID0gODZ9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiArwqDCoMKgwqDC oMKgwqAgeyAiNiIswqDCoCAiNiLCoMKgICwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0g OTZ9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZFLCAibGV2ZWxpZGMifSwKPiArwqDCoMKgwqDCoMKg wqAgeyAiNi4xIiwgIjYuMSIgLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSA5OX0sIElO VF9NSU4sCj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ICvCoMKgwqDCoMKgwqDCoCB7ICI2 LjIiLCAiNi4yIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDEwMn0sIElOVF9NSU4s Cj4gSU5UX01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ICvCoMKgwqDCoMKgwqDCoCB7ICI2LjMiLCAi Ni4zIiAsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDEwNX0sIElOVF9NSU4sCj4gSU5U X01BWCwgVkUsICJsZXZlbGlkYyJ9LAo+ICvCoMKgwqAgeyAidGllciIsICJzZXQgdnZjIHRpZXIi LCBPRkZTRVQoIG9wdGlvbnMudGllciksIEFWX09QVF9UWVBFX0lOVCwKPiB7Lmk2NCA9IDB9LMKg IDAgLCAxICwgVkUsICJ0aWVyIn0sCj4gK8KgwqDCoMKgwqDCoMKgIHsgIm1haW4iLCAibWFpbiIs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IDB9LCBJTlRfTUlOLAo+IElOVF9NQVgsIFZF LCAidGllciJ9LAo+ICvCoMKgwqDCoMKgwqDCoCB7ICJoaWdoIiwgImhpZ2giLCAwLCBBVl9PUFRf VFlQRV9DT05TVCwgey5pNjQgPSAxfSwgSU5UX01JTiwKPiBJTlRfTUFYLCBWRSwgInRpZXIifSwK PiArwqDCoMKgIHtOVUxMfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IEFWQ2xhc3MgY2xhc3Nf bGlidnZlbmMgPSB7Cj4gK8KgwqDCoCAuY2xhc3NfbmFtZSA9ICJsaWJ2dmVuYy12dmMgZW5jb2Rl ciIsCj4gK8KgwqDCoCAuaXRlbV9uYW1lwqAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKPiArwqDC oMKgIC5vcHRpb27CoMKgwqDCoCA9IGxpYnZ2ZW5jX29wdGlvbnMsCj4gK8KgwqDCoCAudmVyc2lv bsKgwqDCoCA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25z dCBGRkNvZGVjRGVmYXVsdCB2dmVuY19kZWZhdWx0c1tdID0gewo+ICvCoMKgwqAgeyAiYiIsICIw IiB9LAo+ICvCoMKgwqAgeyAiZyIsICItMSIgfSwKPiArwqDCoMKgIHsgTlVMTCB9LAo+ICt9Owo+ ICsKPiArRkZDb2RlYyBmZl9saWJ2dmVuY19lbmNvZGVyID0gewo+ICvCoMKgwqAgLnAubmFtZcKg wqDCoMKgwqDCoMKgwqAgPSAibGlidnZlbmMiLAo+ICvCoMKgwqAgQ09ERUNfTE9OR19OQU1FKCJI LjI2NiAvIFZWQyBFbmNvZGVyIFZWZW5DIiksCj4gK8KgwqDCoCAucC50eXBlwqDCoMKgwqDCoMKg wqDCoCA9IEFWTUVESUFfVFlQRV9WSURFTywKPiArwqDCoMKgIC5wLmlkwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSBBVl9DT0RFQ19JRF9WVkMsCj4gK8KgwqDCoCAucC5jYXBhYmlsaXRpZXMgPSBBVl9D T0RFQ19DQVBfREVMQVkgfCBBVl9DT0RFQ19DQVBfT1RIRVJfVEhSRUFEUywKPiArwqDCoMKgIC5w LnByb2ZpbGVzwqDCoMKgwqAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTChmZl92dmNfcHJvZmlsZXMp LAo+ICvCoMKgwqAgLnAucHJpdl9jbGFzc8KgwqAgPSAmY2xhc3NfbGlidnZlbmMsCj4gK8KgwqDC oCAucC53cmFwcGVyX25hbWUgPSAibGlidnZlbmMiLAo+ICvCoMKgwqAgLnByaXZfZGF0YV9zaXpl ID0gc2l6ZW9mKFZWZW5DQ29udGV4dCksCj4gK8KgwqDCoCAucC5waXhfZm10c8KgwqDCoMKgID0g cGl4X2ZtdHNfdnZlbmMsCj4gK8KgwqDCoCAuaW5pdMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gZmZf dnZlbmNfZW5jb2RlX2luaXQsCj4gK8KgwqDCoCBGRl9DT0RFQ19FTkNPREVfQ0IoZmZfdnZlbmNf ZW5jb2RlX2ZyYW1lKSwKPiArwqDCoMKgIC5jbG9zZcKgwqDCoMKgwqDCoMKgwqDCoCA9IGZmX3Z2 ZW5jX2VuY29kZV9jbG9zZSwKPiArwqDCoMKgIC5kZWZhdWx0c8KgwqDCoMKgwqDCoMKgwqAgPSB2 dmVuY19kZWZhdWx0cywKPiArwqDCoMKgIC5jYXBzX2ludGVybmFswqAgPSBGRl9DT0RFQ19DQVBf QVVUT19USFJFQURTLAo+ICt9Owo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9NYWtlZmlsZSBi L2xpYmF2Zm9ybWF0L01ha2VmaWxlCj4gaW5kZXggYWYzMWQ2Zjc5NS4uN2Y2ZGIzZDZkNiAxMDA2 NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQo+ICsrKyBiL2xpYmF2Zm9ybWF0L01ha2Vm aWxlCj4gQEAgLTU0LDYgKzU0LDcgQEAgT0JKUy0kKENPTkZJR19SVFBERUMpwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gcmR0Lm8KPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydHBkZWNf aDI2M19yZmMyMTkwLm/CoMKgwqDCoMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcnRwZGVjX2gyNjQub8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnRwZGVjX2hldmMub8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgXAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydHBkZWNfdnZj Lm/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcnRwZGVjX2lsYmMub8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnRwZGVjX2pwZWcub8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgXAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcnRw ZGVjX2xhdG0ub8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+IGRpZmYgLS1naXQgYS9s aWJhdmZvcm1hdC9ydHBkZWMuYyBiL2xpYmF2Zm9ybWF0L3J0cGRlYy5jCj4gaW5kZXggNzI5YmY4 MzY4NS4uMzRlZjkyYTJhMCAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9ydHBkZWMuYwo+ICsr KyBiL2xpYmF2Zm9ybWF0L3J0cGRlYy5jCj4gQEAgLTk4LDYgKzk4LDcgQEAgc3RhdGljIGNvbnN0 IFJUUER5bmFtaWNQcm90b2NvbEhhbmRsZXIgKmNvbnN0Cj4gcnRwX2R5bmFtaWNfcHJvdG9jb2xf aGFuZGxlcl9saXN0Wwo+IMKgwqDCoMKgICZmZl9oMjYzX3JmYzIxOTBfZHluYW1pY19oYW5kbGVy LAo+IMKgwqDCoMKgICZmZl9oMjY0X2R5bmFtaWNfaGFuZGxlciwKPiDCoMKgwqDCoCAmZmZfaGV2 Y19keW5hbWljX2hhbmRsZXIsCj4gK8KgwqDCoCAmZmZfdnZjX2R5bmFtaWNfaGFuZGxlciwKPiDC oMKgwqDCoCAmZmZfaWxiY19keW5hbWljX2hhbmRsZXIsCj4gwqDCoMKgwqAgJmZmX2pwZWdfZHlu YW1pY19oYW5kbGVyLAo+IMKgwqDCoMKgICZmZl9tcDRhX2xhdG1fZHluYW1pY19oYW5kbGVyLAo+ IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9ydHBkZWNfZm9ybWF0cy5oIGIvbGliYXZmb3JtYXQv cnRwZGVjX2Zvcm1hdHMuaAo+IGluZGV4IGRhZDJiOGFjMWIuLmFmMmUxN2ZiOTkgMTAwNjQ0Cj4g LS0tIGEvbGliYXZmb3JtYXQvcnRwZGVjX2Zvcm1hdHMuaAo+ICsrKyBiL2xpYmF2Zm9ybWF0L3J0 cGRlY19mb3JtYXRzLmgKPiBAQCAtNjUsNiArNjUsNyBAQCBleHRlcm4gY29uc3QgUlRQRHluYW1p Y1Byb3RvY29sSGFuZGxlcgo+IGZmX2gyNjNfMjAwMF9keW5hbWljX2hhbmRsZXI7Cj4gwqBleHRl cm4gY29uc3QgUlRQRHluYW1pY1Byb3RvY29sSGFuZGxlciBmZl9oMjYzX3JmYzIxOTBfZHluYW1p Y19oYW5kbGVyOwo+IMKgZXh0ZXJuIGNvbnN0IFJUUER5bmFtaWNQcm90b2NvbEhhbmRsZXIgZmZf aDI2NF9keW5hbWljX2hhbmRsZXI7Cj4gwqBleHRlcm4gY29uc3QgUlRQRHluYW1pY1Byb3RvY29s SGFuZGxlciBmZl9oZXZjX2R5bmFtaWNfaGFuZGxlcjsKPiArZXh0ZXJuIGNvbnN0IFJUUER5bmFt aWNQcm90b2NvbEhhbmRsZXIgZmZfdnZjX2R5bmFtaWNfaGFuZGxlcjsKPiDCoGV4dGVybiBjb25z dCBSVFBEeW5hbWljUHJvdG9jb2xIYW5kbGVyIGZmX2lsYmNfZHluYW1pY19oYW5kbGVyOwo+IMKg ZXh0ZXJuIGNvbnN0IFJUUER5bmFtaWNQcm90b2NvbEhhbmRsZXIgZmZfanBlZ19keW5hbWljX2hh bmRsZXI7Cj4gwqBleHRlcm4gY29uc3QgUlRQRHluYW1pY1Byb3RvY29sSGFuZGxlciBmZl9tcDRh X2xhdG1fZHluYW1pY19oYW5kbGVyOwo+IGRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9ydHBkZWNf dnZjLmMgYi9saWJhdmZvcm1hdC9ydHBkZWNfdnZjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAuLjg2ZjAxODJiMDEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGli YXZmb3JtYXQvcnRwZGVjX3Z2Yy5jCj4gQEAgLTAsMCArMSwzNDkgQEAKPiArLyoKPiArICogUlRQ IHBhcnNlciBmb3IgVlZDL0guMjY2IHBheWxvYWQgZm9ybWF0IChkcmFmdCB2ZXJzaW9uIDAuMSkK PiArICogQ29weXJpZ2h0IChjKSAyMDI0IFJvYmluU2hpIDxzaGlxaWZlbmdAZ21haWwuY29tPgo+ ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCj4gKyAqCj4gKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp Ywo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAg U2VlIHRoZSBHTlUKPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKPiAwMjEx MC0xMzAxIFVTQQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIK PiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGls L21lbS5oIgo+ICsKPiArI2luY2x1ZGUgImF2Zm9ybWF0LmgiCj4gKyNpbmNsdWRlICJpbnRlcm5h bC5oIgo+ICsjaW5jbHVkZSAicnRwZGVjLmgiCj4gKyNpbmNsdWRlICJydHBkZWNfZm9ybWF0cy5o Igo+ICsKPiArI2RlZmluZSBSVFBfVlZDX1BBWUxPQURfSEVBREVSX1NJWkXCoMKgwqDCoMKgwqAg Mgo+ICsjZGVmaW5lIFJUUF9WVkNfRlVfSEVBREVSX1NJWkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDEKPiArI2RlZmluZSBSVFBfVlZDX0RPTkxfRklFTERfU0laRcKgwqDCoMKgwqDCoMKgwqDCoMKg IDIKPiArI2RlZmluZSBSVFBfVlZDX0RPTkRfRklFTERfU0laRcKgwqDCoMKgwqDCoMKgwqDCoMKg IDEKPiArI2RlZmluZSBSVFBfVlZDX0FQX05BTFVfTEVOR1RIX0ZJRUxEX1NJWkUgMgo+ICsjZGVm aW5lIFZWQ19TUEVDSUZJRURfTkFMX1VOSVRfVFlQRVPCoMKgwqDCoMKgIDI4Cj4gKwo+ICsvKiBT RFAgb3V0LW9mLWJhbmQgc2lnbmFsaW5nIGRhdGEgKi8KPiArc3RydWN0IFBheWxvYWRDb250ZXh0 IHsKPiArwqDCoMKgIGludCB1c2luZ19kb25sX2ZpZWxkOwo+ICvCoMKgwqAgaW50IHByb2ZpbGVf aWQ7Cj4gK8KgwqDCoCB1aW50OF90ICpzcHMsICpwcHMsICp2cHMsICpzZWk7Cj4gK8KgwqDCoCBp bnQgc3BzX3NpemUsIHBwc19zaXplLCB2cHNfc2l6ZSwgc2VpX3NpemU7Cj4gK307Cj4gKwo+ICtz dGF0aWMgY29uc3QgdWludDhfdCBzdGFydF9zZXF1ZW5jZVtdID0geyAweDAwLCAweDAwLCAweDAw LCAweDAxIH07Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgdnZjX3NkcF9wYXJzZV9mbXRwX2Nv bmZpZyhBVkZvcm1hdENvbnRleHQgKnMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBBVlN0cmVhbSAqc3RyZWFtLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgUGF5bG9hZENvbnRleHQgKnZ2Y19kYXRhLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY29uc3QgY2hhciAqYXR0ciwgY29uc3QKPiBjaGFyICp2YWx1ZSkKPiArewo+ICvC oMKgwqAgLyogcHJvZmlsZS1zcGFjZTogMC0zICovCj4gK8KgwqDCoCAvKiBwcm9maWxlLWlkOiAw LTMxICovCj4gK8KgwqDCoCBpZiAoIXN0cmNtcChhdHRyLCAicHJvZmlsZS1pZCIpKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgIHZ2Y19kYXRhLT5wcm9maWxlX2lkID0gYXRvaSh2YWx1ZSk7Cj4gK8KgwqDC oMKgwqDCoMKgIGF2X2xvZyhzLCBBVl9MT0dfVFJBQ0UsICJTRFA6IGZvdW5kIHByb2ZpbGUtaWQ6 ICVkXG4iLAo+IHZ2Y19kYXRhLT5wcm9maWxlX2lkKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDC oCAvKiB0aWVyLWZsYWc6IDAtMSAqLwo+ICvCoMKgwqAgLyogbGV2ZWwtaWQ6IDAtMjU1ICovCj4g K8KgwqDCoCAvKiBpbnRlcm9wLWNvbnN0cmFpbnRzOiBbYmFzZTE2XSAqLwo+ICvCoMKgwqAgLyog cHJvZmlsZS1jb21wYXRpYmlsaXR5LWluZGljYXRvcjogW2Jhc2UxNl0gKi8KPiArwqDCoMKgIC8q IHNwcm9wLXN1Yi1sYXllci1pZDogMC02LCBkZWZpbmVzIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUg Zm9yIFRJRCwKPiBkZWZhdWx0OiA2ICovCj4gK8KgwqDCoCAvKiByZWN2LXN1Yi1sYXllci1pZDog MC02ICovCj4gK8KgwqDCoCAvKiBtYXgtcmVjdi1sZXZlbC1pZDogMC0yNTUgKi8KPiArwqDCoMKg IC8qIHR4LW1vZGU6IE1TTSxTU00gKi8KPiArwqDCoMKgIC8qIHNwcm9wLXZwczogW2Jhc2U2NF0g Ki8KPiArwqDCoMKgIC8qIHNwcm9wLXNwczogW2Jhc2U2NF0gKi8KPiArwqDCoMKgIC8qIHNwcm9w LXBwczogW2Jhc2U2NF0gKi8KPiArwqDCoMKgIC8qIHNwcm9wLXNlaTogW2Jhc2U2NF0gKi8KPiAr wqDCoMKgIGlmICghc3RyY21wKGF0dHIsICJzcHJvcC12cHMiKSB8fCAhc3RyY21wKGF0dHIsICJz cHJvcC1zcHMiKSB8fAo+ICvCoMKgwqDCoMKgwqDCoCAhc3RyY21wKGF0dHIsICJzcHJvcC1wcHMi KSB8fCAhc3RyY21wKGF0dHIsICJzcHJvcC1zZWkiKSkgewo+ICvCoMKgwqDCoMKgwqDCoCB1aW50 OF90ICoqZGF0YV9wdHIgPSBOVUxMOwo+ICvCoMKgwqDCoMKgwqDCoCBpbnQgKnNpemVfcHRyID0g TlVMTDsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKCFzdHJjbXAoYXR0ciwgInNwcm9wLXZwcyIpKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YV9wdHIgPSAmdnZjX2RhdGEtPnZwczsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3B0ciA9ICZ2dmNfZGF0YS0+dnBzX3NpemU7Cj4g K8KgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAoIXN0cmNtcChhdHRyLCAic3Byb3Atc3BzIikpIHsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhX3B0ciA9ICZ2dmNfZGF0YS0+c3BzOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNpemVfcHRyID0gJnZ2Y19kYXRhLT5zcHNfc2l6ZTsKPiAr wqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlmICghc3RyY21wKGF0dHIsICJzcHJvcC1wcHMiKSkgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGFfcHRyID0gJnZ2Y19kYXRhLT5wcHM7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV9wdHIgPSAmdnZjX2RhdGEtPnBwc19zaXplOwo+ICvC oMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKCFzdHJjbXAoYXR0ciwgInNwcm9wLXNlaSIpKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YV9wdHIgPSAmdnZjX2RhdGEtPnNlaTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3B0ciA9ICZ2dmNfZGF0YS0+c2VpX3NpemU7Cj4gK8Kg wqDCoMKgwqDCoMKgIH0gZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAo MCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBmZl9oMjY0X3BhcnNlX3Nwcm9wX3BhcmFtZXRlcl9z ZXRzKHMsIGRhdGFfcHRyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZV9wdHIs IHZhbHVlKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCAvKiBtYXgtbHNyLCBtYXgtbHBzLCBt YXgtY3BiLCBtYXgtZHBiLCBtYXgtYnIsIG1heC10ciwgbWF4LXRjICovCj4gK8KgwqDCoCAvKiBt YXgtZnBzICovCj4gKwo+ICvCoMKgwqAgLyogc3Byb3AtbWF4LWRvbi1kaWZmOiAwLTMyNzY3Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgIFdoZW4gdGhlIFJUUCBzdHJlYW0gZGVwZW5kcyBvbiBvbmUg b3IgbW9yZSBvdGhlciBSVFAKPiArwqDCoMKgwqDCoMKgwqDCoCBzdHJlYW1zIChpbiB0aGlzIGNh c2UgdHgtbW9kZSBNVVNUIGJlIGVxdWFsIHRvICJNU00iIGFuZAo+ICvCoMKgwqDCoMKgwqDCoMKg IE1TTSBpcyBpbiB1c2UpLCB0aGlzIHBhcmFtZXRlciBNVVNUIGJlIHByZXNlbnQgYW5kIHRoZQo+ ICvCoMKgwqDCoMKgwqDCoMKgIHZhbHVlIE1VU1QgYmUgZ3JlYXRlciB0aGFuIDAuCj4gK8KgwqDC oCAqLwo+ICvCoMKgwqAgaWYgKCFzdHJjbXAoYXR0ciwgInNwcm9wLW1heC1kb24tZGlmZiIpKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChhdG9pKHZhbHVlKSA+IDApCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdnZjX2RhdGEtPnVzaW5nX2RvbmxfZmllbGQgPSAxOwo+ICvCoMKgwqDCoMKgwqDC oCBhdl9sb2cocywgQVZfTE9HX1RSQUNFLCAiRm91bmQgc3Byb3AtbWF4LWRvbi1kaWZmIGluIFNE UCwgRE9OCj4gZmllbGQgdXNhZ2UgaXM6ICVkXG4iLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdnZjX2RhdGEtPnVzaW5nX2RvbmxfZmllbGQpOwo+ICvCoMKgwqAgfQo+ICvCoMKg wqAgLy8gVlZDIGRvbnQgaGF2ZSBzcHJvcC1kZXBhY2stYnVmLW5hbHVzIHNldHRpbmcgYWNjb3Jk aW5nIHRvCj4gcmZjOTMyOCArwqDCoMKgIC8qIHNwcm9wLWRlcGFjay1idWYtYnl0ZXM6IDAtNDI5 NDk2NzI5NSAqLwo+ICvCoMKgwqAgLyogZGVwYWNrLWJ1Zi1jYXAgKi8KPiArwqDCoMKgIC8qIHNw cm9wLXNlZ21lbnRhdGlvbi1pZDogMC0zICovCj4gK8KgwqDCoCAvKiBzcHJvcC1zcGF0aWFsLXNl Z21lbnRhdGlvbi1pZGM6IFtiYXNlMTZdICovCj4gK8KgwqDCoCAvKiBkZWMtcGFyYWxsZWwtY2E6 ICovCj4gK8KgwqDCoCAvKiBpbmNsdWRlLWRwaCAqLwo+ICsKPiArwqDCoMKgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYXZfY29sZCBpbnQgdnZjX3BhcnNlX3NkcF9saW5lKEFWRm9ybWF0 Q29udGV4dCAqY3R4LCBpbnQgc3RfaW5kZXgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUGF5bG9h ZENvbnRleHQgKnZ2Y19kYXRhLCBjb25zdAo+IGNoYXIgKmxpbmUpCj4gK3sKPiArwqDCoMKgIEFW U3RyZWFtICpjdXJyZW50X3N0cmVhbTsKPiArwqDCoMKgIEFWQ29kZWNQYXJhbWV0ZXJzICpwYXI7 Cj4gK8KgwqDCoCBjb25zdCBjaGFyICpzZHBfbGluZV9wdHIgPSBsaW5lOwo+ICsKPiArwqDCoMKg IGlmIChzdF9pbmRleCA8IDApCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+ICsKPiArwqDC oMKgIGN1cnJlbnRfc3RyZWFtID0gY3R4LT5zdHJlYW1zW3N0X2luZGV4XTsKPiArwqDCoMKgIHBh csKgID0gY3VycmVudF9zdHJlYW0tPmNvZGVjcGFyOwo+ICsKPiArwqDCoMKgIGlmIChhdl9zdHJz dGFydChzZHBfbGluZV9wdHIsICJmcmFtZXNpemU6IiwgJnNkcF9saW5lX3B0cikpIHsKPiArwqDC oMKgwqDCoMKgwqAgZmZfaDI2NF9wYXJzZV9mcmFtZXNpemUocGFyLCBzZHBfbGluZV9wdHIpOwo+ ICvCoMKgwqAgfSBlbHNlIGlmIChhdl9zdHJzdGFydChzZHBfbGluZV9wdHIsICJmbXRwOiIsICZz ZHBfbGluZV9wdHIpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGludCByZXQgPSBmZl9wYXJzZV9mbXRw KGN0eCwgY3VycmVudF9zdHJlYW0sIHZ2Y19kYXRhLAo+IHNkcF9saW5lX3B0ciwKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dnZjX3NkcF9wYXJzZV9mbXRwX2NvbmZpZyk7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmICh2dmNfZGF0 YS0+dnBzX3NpemUgfHwgdnZjX2RhdGEtPnNwc19zaXplIHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdnZjX2RhdGEtPnBwc19zaXplIHx8IHZ2Y19kYXRhLT5zZWlfc2l6ZSkgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHBhci0+ZXh0cmFkYXRhX3NpemUgPSB2dmNfZGF0YS0+dnBzX3Np emUgKwo+IHZ2Y19kYXRhLT5zcHNfc2l6ZSArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dmNfZGF0YS0+cHBzX3Np emUgKyB2dmNfZGF0YS0+c2VpX3NpemU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKChy ZXQgPSBmZl9hbGxvY19leHRyYWRhdGEocGFyLCBwYXItPmV4dHJhZGF0YV9zaXplKSkgPj0KPiAw KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgcG9zID0gMDsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweShwYXItPmV4dHJhZGF0YSArIHBvcywg dnZjX2RhdGEtPnZwcywKPiB2dmNfZGF0YS0+dnBzX3NpemUpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcG9zICs9IHZ2Y19kYXRhLT52cHNfc2l6ZTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweShwYXItPmV4dHJhZGF0YSArIHBvcywgdnZjX2RhdGEt PnNwcywKPiB2dmNfZGF0YS0+c3BzX3NpemUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcG9zICs9IHZ2Y19kYXRhLT5zcHNfc2l6ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG1lbWNweShwYXItPmV4dHJhZGF0YSArIHBvcywgdnZjX2RhdGEtPnBwcywKPiB2 dmNfZGF0YS0+cHBzX3NpemUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG9z ICs9IHZ2Y19kYXRhLT5wcHNfc2l6ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG1lbWNweShwYXItPmV4dHJhZGF0YSArIHBvcywgdnZjX2RhdGEtPnNlaSwKPiB2dmNfZGF0YS0+ c2VpX3NpemUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiArCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYXZfZnJlZXAoJnZ2Y19kYXRhLT52cHMpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGF2X2ZyZWVwKCZ2dmNfZGF0YS0+c3BzKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhdl9mcmVlcCgmdnZjX2RhdGEtPnBwcyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZf ZnJlZXAoJnZ2Y19kYXRhLT5zZWkpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZ2Y19kYXRh LT52cHNfc2l6ZSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnZjX2RhdGEtPnNwc19z aXplID0gMDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2dmNfZGF0YS0+cHBzX3NpemUgPSAw Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZ2Y19kYXRhLT5zZWlfc2l6ZSA9IDA7Cj4gK8Kg wqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArwqDCoMKgIH0K PiArCj4gK8KgwqDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB2dmNfaGFuZGxl X3BhY2tldChBVkZvcm1hdENvbnRleHQgKmN0eCwgUGF5bG9hZENvbnRleHQKPiAqcnRwX3Z2Y19j dHgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQVZTdHJlYW0gKnN0LCBBVlBhY2tldCAqcGt0LCB1aW50MzJfdAo+ICp0aW1lc3Rh bXAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuLCB1aW50MTZfdCBzZXEsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aW50IGZsYWdzKQo+ICt7Cj4gK8KgwqDCoCBjb25zdCB1aW50OF90ICpydHBfcGwgPSBidWY7Cj4g K8KgwqDCoCBpbnQgdGlkLCBsaWQsIG5hbF90eXBlOwo+ICvCoMKgwqAgaW50IGZpcnN0X2ZyYWdt ZW50LCBsYXN0X2ZyYWdtZW50LCBwaWNfZnJhZ21lbnQsIGZ1X3R5cGU7Cj4gK8KgwqDCoCB1aW50 OF90IG5ld19uYWxfaGVhZGVyWzJdOwo+ICvCoMKgwqAgaW50IHJlcyA9IDA7Cj4gKwo+ICvCoMKg wqAgLyogc2FuaXR5IGNoZWNrIGZvciBzaXplIG9mIGlucHV0IHBhY2tldDogMSBieXRlIHBheWxv YWQgYXQgbGVhc3QgKi8KPiArwqDCoMKgIGlmIChsZW4gPCBSVFBfVlZDX1BBWUxPQURfSEVBREVS X1NJWkUgKyAxKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IlRvbyBzaG9ydCBSVFAvVlZDIHBhY2tldCwgZ290ICVkCj4gYnl0ZXNcbiIsIGxlbik7Cj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICvCoMKgwqAgfQo+ICsK PiArwqDCoMKgIC8qCj4gK8KgwqDCoMKgICogZGVjb2RlIHRoZSBWVkMgcGF5bG9hZCBoZWFkZXIg YWNjb3JkaW5nIHRvIHNlY3Rpb24gNCBvZiBkcmFmdAo+IHZlcnNpb24gNjoKPiArwqDCoMKgwqAg Kgo+ICvCoMKgwqDCoCAqwqDCoCArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKPiAr wqDCoMKgwqAgKsKgwqAgfDB8MXwyfDN8NHw1fDZ8N3wwfDF8MnwzfDR8NXw2fDd8Cj4gK8KgwqDC oMKgICrCoMKgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwo+ICvCoMKgwqDCoCAq wqDCoCB8RnxafCBMYXllcklEwqDCoCB8IFR5cGXCoMKgwqAgfCBUSUQgfAo+ICvCoMKgwqDCoCAq wqDCoCArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKPiArwqDCoMKgwqAgKgo+ICvC oMKgwqDCoCAqwqDCoMKgwqDCoCBGb3JiaWRkZW4gemVybyAoRik6IDEgYml0Cj4gK8KgwqDCoMKg ICrCoMKgwqDCoMKgIFJlc2VydmVkIChaKTogMSBiaXRzCj4gK8KgwqDCoMKgICrCoMKgwqDCoMKg IE5VSCBsYXllciBJRCAoTGF5ZXJJZCk6IDYgYml0cwo+ICvCoMKgwqDCoCAqwqDCoMKgwqDCoCBO QUwgdW5pdCB0eXBlIChUeXBlKTogNSBiaXRzCj4gK8KgwqDCoMKgICrCoMKgwqDCoMKgIE5VSCB0 ZW1wb3JhbCBJRCBwbHVzIDEgKFRJRCk6IDMgYml0cwo+ICvCoMKgwqDCoCAqLwo+ICvCoMKgwqAg bmFsX3R5cGUgPcKgIChidWZbMV0gPj4gMykgJiAweDFmOwo+ICvCoMKgwqAgbGlkwqAgPSBidWZb MF0gJiAweDNmOwo+ICvCoMKgwqAgdGlkwqAgPSBidWZbMV0gJiAweDA3Owo+ICsKPiArwqDCoMKg IC8qIHNhbml0eSBjaGVjayBmb3IgY29ycmVjdCBsYXllciBJRCAqLwo+ICvCoMKgwqAgaWYgKGxp ZCkgewo+ICvCoMKgwqDCoMKgwqDCoCAvKiBmdXR1cmUgc2NhbGFibGUgb3IgM0QgdmlkZW8gY29k aW5nIGV4dGVuc2lvbnMgKi8KPiArwqDCoMKgwqDCoMKgwqAgYXZwcml2X3JlcG9ydF9taXNzaW5n X2ZlYXR1cmUoY3R4LCAiTXVsdGktbGF5ZXIgVlZDIGNvZGluZyIpOwo+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAg Lyogc2FuaXR5IGNoZWNrIGZvciBjb3JyZWN0IHRlbXBvcmFsIElEICovCj4gK8KgwqDCoCBpZiAo IXRpZCkgewo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbGxl Z2FsIHRlbXBvcmFsIElEIGluIFJUUC9WVkMKPiBwYWNrZXRcbiIpOwo+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCAv KiBzYW5pdHkgY2hlY2sgZm9yIGNvcnJlY3QgTkFMIHVuaXQgdHlwZSAqLwo+ICvCoMKgwqAgaWYg KG5hbF90eXBlID4gMzEpIHsKPiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiVW5zdXBwb3J0ZWQgKFZWQykgTkFMIHR5cGUgKCVkKVxuIiwKPiBuYWxfdHlwZSk7Cj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwo+ICvCoMKgwqAgfQo+ ICsKPiArwqDCoMKgIHN3aXRjaCAobmFsX3R5cGUpIHsKPiArwqDCoMKgIC8qIHZpZGVvIHBhcmFt ZXRlciBzZXQgKFZQUykgKi8KPiArwqDCoMKgIGNhc2UgMTQ6Cj4gK8KgwqDCoCAvKiBzZXF1ZW5j ZSBwYXJhbWV0ZXIgc2V0IChTUFMpICovCj4gK8KgwqDCoCBjYXNlIDE1Ogo+ICvCoMKgwqAgLyog cGljdHVyZSBwYXJhbWV0ZXIgc2V0IChQUFMpICovCj4gK8KgwqDCoCBjYXNlIDE2Ogo+ICvCoMKg wqAgLyrCoCBzdXBwbGVtZW50YWwgZW5oYW5jZW1lbnQgaW5mb3JtYXRpb24gKFNFSSkgKi8KPiAr wqDCoMKgIGNhc2UgMjM6Cj4gK8KgwqDCoCBjYXNlIDI0Ogo+ICvCoMKgwqAgLyogc2luZ2xlIE5B TCB1bml0IHBhY2tldCAqLwo+ICvCoMKgwqAgZGVmYXVsdDoKPiArwqDCoMKgwqDCoMKgwqAgLyog Y3JlYXRlIEEvViBwYWNrZXQgKi8KPiArwqDCoMKgwqDCoMKgwqAgaWYgKChyZXMgPSBhdl9uZXdf cGFja2V0KHBrdCwgc2l6ZW9mKHN0YXJ0X3NlcXVlbmNlKSArIGxlbikpIDwgMCkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmVzOwo+ICvCoMKgwqDCoMKgwqDCoCAvKiBBL1YgcGFj a2V0OiBjb3B5IHN0YXJ0IHNlcXVlbmNlICovCj4gK8KgwqDCoMKgwqDCoMKgIG1lbWNweShwa3Qt PmRhdGEsIHN0YXJ0X3NlcXVlbmNlLCBzaXplb2Yoc3RhcnRfc2VxdWVuY2UpKTsKPiArwqDCoMKg wqDCoMKgwqAgLyogQS9WIHBhY2tldDogY29weSBOQUwgdW5pdCBkYXRhICovCj4gK8KgwqDCoMKg wqDCoMKgIG1lbWNweShwa3QtPmRhdGEgKyBzaXplb2Yoc3RhcnRfc2VxdWVuY2UpLCBidWYsIGxl bik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKgIC8qIGFnZ3JlZ2F0ZWQg cGFja2V0IChBUCkgLSB3aXRoIHR3byBvciBtb3JlIE5BTCB1bml0cyAqLwo+ICvCoMKgwqAgY2Fz ZSAyODoKPiArwqDCoMKgwqDCoMKgwqAgLyogcGFzcyB0aGUgVlZDIHBheWxvYWQgaGVhZGVyICov Cj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZiArPSBSVFBfVlZDX1BBWUxPQURfSEVBREVSX1NJWkU7Cj4g K8KgwqDCoMKgwqDCoMKgIGxlbiAtPSBSVFBfVlZDX1BBWUxPQURfSEVBREVSX1NJWkU7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoCAvKiBwYXNzIHRoZSBWVkMgRE9OTCBmaWVsZCAqLwo+ICvCoMKgwqDC oMKgwqDCoCBpZiAocnRwX3Z2Y19jdHgtPnVzaW5nX2RvbmxfZmllbGQpIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBidWYgKz0gUlRQX1ZWQ19ET05MX0ZJRUxEX1NJWkU7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbGVuIC09IFJUUF9WVkNfRE9OTF9GSUVMRF9TSVpFOwo+ICvCoMKgwqDC oMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCByZXMgPSBmZl9oMjY0X2hhbmRsZV9hZ2dy ZWdhdGVkX3BhY2tldChjdHgsIHJ0cF92dmNfY3R4LCBwa3QsCj4gYnVmLCBsZW4sCj4gKyBydHBf dnZjX2N0eC0+dXNpbmdfZG9ubF9maWVsZCA/Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFJUUF9WVkNfRE9ORF9GSUVMRF9TSVpFCj4gOiAwLAo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMLCAwKTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJl cyA8IDApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJlczsKPiArwqDCoMKgwqDC oMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCAvKiBmcmFnbWVudGF0aW9uIHVuaXQgKEZVKSAqLwo+ICvC oMKgwqAgY2FzZSAyOToKPiArwqDCoMKgwqDCoMKgwqAgLyogcGFzcyB0aGUgVlZDIHBheWxvYWQg aGVhZGVyICovCj4gK8KgwqDCoMKgwqDCoMKgIGJ1ZiArPSBSVFBfVlZDX1BBWUxPQURfSEVBREVS X1NJWkU7Cj4gK8KgwqDCoMKgwqDCoMKgIGxlbiAtPSBSVFBfVlZDX1BBWUxPQURfSEVBREVSX1NJ WkU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCAvKgo+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqAg Y3JlYXRlIHRoZSBGVSBoZWFkZXIKPiArwqDCoMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDC oCAqwqDCoMKgwqAgMCAxIDIgMyA0IDUgNiA3Cj4gK8KgwqDCoMKgwqDCoMKgICrCoMKgwqDCoCAr LS0tLS0tLS0tLS0tLS0tKwo+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqAgfDB8MXwyfDN8NHw1 fDZ8N3wKPiArwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgICstKy0rLSstKy0rLSstKy0rCj4gK8Kg wqDCoMKgwqDCoMKgICrCoMKgwqDCoCB8U3xFfFB8IEZ1VHlwZSB8Cj4gK8KgwqDCoMKgwqDCoMKg ICrCoMKgwqDCoCArLS0tLS0tLS0tLS0tLS0tKwo+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqDC oMKgIFPCoMKgwqDCoMKgwqAgPSB2YXJpYWJsZQo+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqDC oMKgIEXCoMKgwqDCoMKgwqAgPSB2YXJpYWJsZQo+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqDC oMKgIFDCoMKgwqDCoMKgwqAgPSB2YXJpYWJsZQo+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqDC oMKgIEZ1VHlwZcKgID0gTkFMIHVuaXQgdHlwZQo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKg wqDCoMKgwqDCoCBmaXJzdF9mcmFnbWVudCA9IGJ1ZlswXSAmIDB4ODA7Cj4gK8KgwqDCoMKgwqDC oMKgIGxhc3RfZnJhZ21lbnTCoCA9IGJ1ZlswXSAmIDB4NDA7Cj4gK8KgwqDCoMKgwqDCoMKgIHBp Y19mcmFnbWVudMKgwqAgPSBidWZbMF0gJiAweDEwOwo+ICvCoMKgwqDCoMKgwqDCoCBmdV90eXBl wqDCoMKgwqDCoMKgwqAgPSBidWZbMF0gJiAweDNmOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgLyog cGFzcyB0aGUgVlZDIEZVIGhlYWRlciAqLwo+ICvCoMKgwqDCoMKgwqDCoCBidWYgKz0gUlRQX1ZW Q19GVV9IRUFERVJfU0laRTsKPiArwqDCoMKgwqDCoMKgwqAgbGVuIC09IFJUUF9WVkNfRlVfSEVB REVSX1NJWkU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCAvKiBwYXNzIHRoZSBWVkMgRE9OTCBmaWVs ZCAqLwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocnRwX3Z2Y19jdHgtPnVzaW5nX2RvbmxfZmllbGQp IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWYgKz0gUlRQX1ZWQ19ET05MX0ZJRUxEX1NJ WkU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGVuIC09IFJUUF9WVkNfRE9OTF9GSUVMRF9T SVpFOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4 LCBBVl9MT0dfVFJBQ0UsICIgRlUgdHlwZSAlZCB3aXRoICVkIGJ5dGVzXG4iLAo+IGZ1X3R5cGUs IGxlbik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCAvKiBzYW5pdHkgY2hlY2sgZm9yIHNpemUgb2Yg aW5wdXQgcGFja2V0OiAxIGJ5dGUgcGF5bG9hZCBhdAo+IGxlYXN0ICovCj4gK8KgwqDCoMKgwqDC oMKgIGlmIChsZW4gPD0gMCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChsZW4gPCAw KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJU b28gc2hvcnQgUlRQL1ZWQyBwYWNrZXQsIGdvdCAlZCBieXRlcyBvZiBOQUwKPiB1bml0IHR5cGUg JWRcbiIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxl biwgbmFsX3R5cGUpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVBR0FJTik7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoCBpZiAoZmlyc3RfZnJhZ21lbnQgJiYgbGFzdF9mcmFnbWVudCkgewo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIklsbGVnYWwgY29t YmluYXRpb24gb2YgUyBhbmQgRQo+IGJpdCBpbiBSVFAvVlZDIHBhY2tldFxuIik7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gK8KgwqDCoMKg wqDCoMKgIH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgIG5ld19uYWxfaGVhZGVyWzBdID0gcnRwX3Bs WzBdOwo+ICvCoMKgwqDCoMKgwqDCoCBuZXdfbmFsX2hlYWRlclsxXSA9IHJ0cF9wbFsxXTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgIG5ld19uYWxfaGVhZGVyWzFdID0gKG5ld19uYWxfaGVhZGVyWzFd ICYgMHgwNykgfCAoZnVfdHlwZSA8PCAzKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIHJlcyA9IGZm X2gyNjRfaGFuZGxlX2ZyYWdfcGFja2V0KHBrdCwgYnVmLCBsZW4sIGZpcnN0X2ZyYWdtZW50LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZXdfbmFsX2hlYWRlciwKPiBzaXplb2YobmV3X25h bF9oZWFkZXIpKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ICvCoMKgwqAgLyogUEFD SSBwYWNrZXQgKi8KPiArwqDCoMKgIGNhc2UgMzA6Cj4gK8KgwqDCoMKgwqDCoMKgIC8qIFRlbXBv cmFsIHNjYWxhYmlsaXR5IGNvbnRyb2wgaW5mb3JtYXRpb24gKFRTQ0kpICovCj4gK8KgwqDCoMKg wqDCoMKgIGF2cHJpdl9yZXBvcnRfbWlzc2luZ19mZWF0dXJlKGN0eCwgIlBBQ0kgcGFja2V0cyBm b3IgUlRQL1ZWQyIpOwo+ICvCoMKgwqDCoMKgwqDCoCByZXMgPSBBVkVSUk9SX1BBVENIV0VMQ09N RTsKPiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvCoMKgwqAgcGt0 LT5zdHJlYW1faW5kZXggPSBzdC0+aW5kZXg7Cj4gKwo+ICvCoMKgwqAgcmV0dXJuIHJlczsKPiAr fQo+ICsKPiArY29uc3QgUlRQRHluYW1pY1Byb3RvY29sSGFuZGxlciBmZl92dmNfZHluYW1pY19o YW5kbGVyID0gewo+ICvCoMKgwqAgLmVuY19uYW1lwqDCoMKgwqDCoMKgwqDCoCA9ICJIMjY2IiwK PiArwqDCoMKgIC5jb2RlY190eXBlwqDCoMKgwqDCoMKgID0gQVZNRURJQV9UWVBFX1ZJREVPLAo+ ICvCoMKgwqAgLmNvZGVjX2lkwqDCoMKgwqDCoMKgwqDCoCA9IEFWX0NPREVDX0lEX1ZWQywKPiAr wqDCoMKgIC5uZWVkX3BhcnNpbmfCoMKgwqDCoCA9IEFWU1RSRUFNX1BBUlNFX0ZVTEwsCj4gK8Kg wqDCoCAucHJpdl9kYXRhX3NpemXCoMKgID0gc2l6ZW9mKFBheWxvYWRDb250ZXh0KSwKPiArwqDC oMKgIC5wYXJzZV9zZHBfYV9saW5lID0gdnZjX3BhcnNlX3NkcF9saW5lLAo+ICvCoMKgwqAgLnBh cnNlX3BhY2tldMKgwqDCoMKgID0gdnZjX2hhbmRsZV9wYWNrZXQsCj4gK307Cj4gZGlmZiAtLWdp dCBhL2xpYmF2Zm9ybWF0L3J0cGVuYy5jIGIvbGliYXZmb3JtYXQvcnRwZW5jLmMKPiBpbmRleCA3 YjRhZTM3ZDEzLi44NDhiMjQ1YWQ3IDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L3J0cGVuYy5j Cj4gKysrIGIvbGliYXZmb3JtYXQvcnRwZW5jLmMKPiBAQCAtNTcsNiArNTcsNyBAQCBzdGF0aWMg aW50IGlzX3N1cHBvcnRlZChlbnVtIEFWQ29kZWNJRCBpZCkKPiDCoMKgwqDCoCBjYXNlIEFWX0NP REVDX0lEX0gyNjNQOgo+IMKgwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfSDI2NDoKPiDCoMKgwqDC oCBjYXNlIEFWX0NPREVDX0lEX0hFVkM6Cj4gK8KgwqDCoCBjYXNlIEFWX0NPREVDX0lEX1ZWQzoK PiDCoMKgwqDCoCBjYXNlIEFWX0NPREVDX0lEX01QRUcxVklERU86Cj4gwqDCoMKgwqAgY2FzZSBB Vl9DT0RFQ19JRF9NUEVHMlZJREVPOgo+IMKgwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfTVBFRzQ6 Cj4gQEAgLTYwNSw2ICs2MDYsNyBAQCBzdGF0aWMgaW50IHJ0cF93cml0ZV9wYWNrZXQoQVZGb3Jt YXRDb250ZXh0ICpzMSwKPiBBVlBhY2tldCAqcGt0KQo+IMKgwqDCoMKgwqDCoMKgwqAgZmZfcnRw X3NlbmRfaDI2MyhzMSwgcGt0LT5kYXRhLCBzaXplKTsKPiDCoMKgwqDCoMKgwqDCoMKgIGJyZWFr Owo+IMKgwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfSEVWQzoKPiArwqDCoMKgIGNhc2UgQVZfQ09E RUNfSURfVlZDOgo+IMKgwqDCoMKgwqDCoMKgwqAgZmZfcnRwX3NlbmRfaDI2NF9oZXZjKHMxLCBw a3QtPmRhdGEsIHNpemUpOwo+IMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gwqDCoMKgwqAgY2Fz ZSBBVl9DT0RFQ19JRF9WT1JCSVM6Cj4gZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3J0cGVuY19o MjY0X2hldmMuYwo+IGIvbGliYXZmb3JtYXQvcnRwZW5jX2gyNjRfaGV2Yy5jCj4gaW5kZXggMGM4 OGZjMmEyMy4uN2RiZDlmM2UxMSAxMDA2NDQKPiAtLS0gYS9saWJhdmZvcm1hdC9ydHBlbmNfaDI2 NF9oZXZjLmMKPiArKysgYi9saWJhdmZvcm1hdC9ydHBlbmNfaDI2NF9oZXZjLmMKPiBAQCAtODQs OSArODQsMzggQEAgc3RhdGljIHZvaWQgbmFsX3NlbmQoQVZGb3JtYXRDb250ZXh0ICpzMSwgY29u c3QKPiB1aW50OF90ICpidWYsIGludCBzaXplLCBpbnQgbGFzdAo+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoYnVmZmVyZWRfc2l6ZSA9PSAwKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKGNvZGVjID09IEFWX0NPREVDX0lEX0gyNjQpIHsKPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpzLT5idWZfcHRyKysgPSAyNDsKPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKGNvZGVjID09IEFWX0NPREVDX0lEX0hFVkMpIHsKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpzLT5idWZfcHRyKysgPSA0 OCA8PCAxOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnMtPmJ1 Zl9wdHIrKyA9IDE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBWVkMgY2FzZSwgcmZj OTMyOCwgcGFnZSAyMAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 aW50OF90IGZpcnN0X25hbF90eXBlID0gYnVmWzBdOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1aW50OF90IGxhc3RfbmFsX3R5cGUgPSBidWZbMV07Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZpcnN0X25hbF90eXBlICY9IH4oMTw8 Nyk7IC8vIGNsZWFyIHRoZSBGIGJpdCwKPiBpbml0aWFsbHkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbGFzdF9uYWxfdHlwZSA9IChsYXN0X25hbF90eXBlICYgMHgw NykgfCAoMjggPDwgMyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICpzLT5idWZfcHRyKysgPSBmaXJzdF9uYWxfdHlwZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKnMtPmJ1Zl9wdHIrKyA9IGxhc3RfbmFsX3R5cGU7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBl bHNlIGlmIChjb2RlYyA9PSBBVl9DT0RFQ19JRF9WVkMpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC8vIFZWQyBjYXNlLCByZmM5MzI4LCBwYWdlIDIwLCB1c2UgbG93ZXN0IGxh eWVyaWQvdGlkCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50OF90IGZpcnN0 X25hbF90eXBlID0gcy0+YnVmWzBdOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dWludDhfdCBsYXN0X25hbF90eXBlID0gcy0+YnVmWzFdOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdWludDhfdCBuZXdfZmlyc3RfbmFsX3R5cGUgPSBidWZbMF07Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1aW50OF90IG5ld19sYXN0X25hbF90eXBlID0gYnVm WzFdOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGN1cl9mID0gZmlyc3Rf bmFsX3R5cGUgPj4gNzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBuZXdf ZiA9IG5ld19maXJzdF9uYWxfdHlwZSA+PiA3Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKCFjdXJfZiAmJiBuZXdfZikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzLT5idWZbMF0gfD0gMSA8PCA3Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGN1cl9s aWQgPSBmaXJzdF9uYWxfdHlwZSAmIDB4M2Y7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpbnQgbmV3X2xpZCA9IG5ld19maXJzdF9uYWxfdHlwZSAmIDB4M2Y7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoY3VyX2xpZCA+IG5ld19saWQpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcy0+YnVmWzBdIHw9IG5ld19saWQ7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpbnQgY3VyX3RpZCA9IGxhc3RfbmFsX3R5cGUgJiAweDA3Owo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IG5ld190aWQgPSBuZXdfbGFzdF9uYWxfdHlwZSAm IDB4MDc7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoY3VyX3RpZCA+IG5l d190aWQpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcy0+YnVm WzFdIHw9IG5ld190aWQ7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWX1dC MTYocy0+YnVmX3B0ciwgc2l6ZSk7Cj4gQEAgLTEwMCw2ICsxMjksNyBAQCBzdGF0aWMgdm9pZCBu YWxfc2VuZChBVkZvcm1hdENvbnRleHQgKnMxLCBjb25zdAo+IHVpbnQ4X3QgKmJ1ZiwgaW50IHNp emUsIGludCBsYXN0Cj4gwqDCoMKgwqDCoMKgwqDCoCB9Cj4gwqDCoMKgwqAgfSBlbHNlIHsKPiDC oMKgwqDCoMKgwqDCoMKgIGludCBmbGFnX2J5dGUsIGhlYWRlcl9zaXplOwo+ICvCoMKgwqDCoMKg wqDCoCB1aW50OF90IG5hbF90eXBlOwo+IMKgwqDCoMKgwqDCoMKgwqAgZmx1c2hfYnVmZmVyZWQo czEsIDApOwo+IMKgwqDCoMKgwqDCoMKgwqAgaWYgKGNvZGVjID09IEFWX0NPREVDX0lEX0gyNjQg JiYgKHMtPmZsYWdzICYKPiBGRl9SVFBfRkxBR19IMjY0X01PREUwKSkgewo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhdl9sb2coczEsIEFWX0xPR19FUlJPUiwKPiBAQCAtMTA5LDIwICsxMzks MjAgQEAgc3RhdGljIHZvaWQgbmFsX3NlbmQoQVZGb3JtYXRDb250ZXh0ICpzMSwgY29uc3QKPiB1 aW50OF90ICpidWYsIGludCBzaXplLCBpbnQgbGFzdAo+IMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKg wqDCoMKgwqDCoMKgwqAgYXZfbG9nKHMxLCBBVl9MT0dfREVCVUcsICJOQUwgc2l6ZSAlZCA+ICVk XG4iLCBzaXplLAo+IHMtPm1heF9wYXlsb2FkX3NpemUpOwo+IMKgwqDCoMKgwqDCoMKgwqAgaWYg KGNvZGVjID09IEFWX0NPREVDX0lEX0gyNjQpIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 aW50OF90IHR5cGUgPSBidWZbMF0gJiAweDFGOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5h bF90eXBlID0gYnVmWzBdICYgMHgxRjsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDhf dCBucmkgPSBidWZbMF0gJiAweDYwOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMtPmJ1 ZlswXSA9IDI4O8KgwqDCoMKgwqDCoMKgIC8qIEZVIEluZGljYXRvcjsgVHlwZSA9IDI4IC0tLT4K PiBGVS1BICovCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMtPmJ1ZlswXSB8PSBucmk7Cj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcy0+YnVmWzFdID0gdHlwZTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzLT5idWZbMV0gPSBuYWxfdHlwZTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcy0+YnVmWzFdIHw9IDEgPDwgNzsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnVmwqAg Kz0gMTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2l6ZSAtPSAxOwo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGZsYWdfYnl0ZcKgwqAgPSAxOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBoZWFkZXJfc2l6ZSA9IDI7Cj4gLcKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdWludDhfdCBuYWxfdHlwZSA9IChidWZbMF0gPj4gMSkgJiAweDNG Owo+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKGNvZGVjID09IEFWX0NPREVDX0lEX0hFVkMp IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYWxfdHlwZSA9IChidWZbMF0gPj4gMSkgJiAw eDNGOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICogY3JlYXRlIHRoZSBIRVZDIHBheWxvYWQgaGVhZGVyIGFuZCB0cmFuc21pdCB0aGUg YnVmZmVyCj4gYXMgZnJhZ21lbnRhdGlvbiB1bml0cyAoRlUpCj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKgo+IEBAIC0xNTQsOCArMTg0LDU0IEBAIHN0YXRpYyB2b2lkIG5hbF9zZW5kKEFW Rm9ybWF0Q29udGV4dCAqczEsIGNvbnN0Cj4gdWludDhfdCAqYnVmLCBpbnQgc2l6ZSwgaW50IGxh c3QKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzLT5idWZbMl3CoCA9IG5hbF90eXBlOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAv KiBzZXQgdGhlIFMgYml0OiBtYXJrIGFzIHN0YXJ0IGZyYWdtZW50ICovCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcy0+YnVmWzJdIHw9IDEgPDwgNzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzLT5idWZbMV0gPSAocy0+YnVmWzFdICYgMHgwNykgfCAoMjkgPDwgMyk7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIC8qIHBhc3MgdGhlIG9yaWdpbmFsIE5BTCBoZWFkZXIgKi8KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWbCoCArPSAyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHNpemUgLT0gMjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmxhZ19ieXRlwqDC oCA9IDI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGVhZGVyX3NpemUgPSAzOwo+ICvCoMKg wqDCoMKgwqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMtPmJ1ZlswXSA9 IGJ1ZlswXTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzLT5idWZbMV0gPSBidWZbMV07Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICog Y3JlYXRlIHRoZSBWVkMgcGF5bG9hZCBoZWFkZXIgYW5kIHRyYW5zbWl0IHRoZSBidWZmZXIgYXMK PiBmcmFnbWVudGF0aW9uIHVuaXRzIChGVSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICoK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrCoMKgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKsKgwqAgfDB8MXwyfDN8NHw1 fDZ8N3wwfDF8MnwzfDR8NXw2fDd8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoCAr LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICrCoMKgIHxGfFp8IExheWVySUTCoMKgIHwgVHlwZcKgwqDCoCB8IFRJRCB8Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoCArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LSsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrCoMKgwqDCoMKgIEbCoMKgwqDCoMKgwqAg PSAwCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqDCoCBUeXBlwqDCoMKgID0g MjkgKGZyYWdtZW50YXRpb24gdW5pdCAoRlUpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KsKgwqDCoMKgwqAgTGF5ZXJJZCA9IDAKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrCoMKg wqDCoMKgIFRJRMKgwqDCoMKgID0gMQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYWxfdHlwZSA9IChidWZbMV0gPj4gMykgJiAweDFGOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMtPmJ1ZlsxXSA9IChzLT5idWZbMV0gJiAweDA3KSB8 ICgyOSA8PCAzKTsKPiDCoCvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqwqDCoMKgwqAgY3JlYXRlIHRoZSBGVSBoZWFkZXIKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrCoMKgwqDCoCAw IDEgMiAzIDQgNSA2IDcKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrCoMKgwqDCoCArLS0t LS0tLS0tLS0tLS0tKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgIHwwfDF8 MnwzfDR8NXw2fDd8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqAgKy0rLSst Ky0rLSstKy0rLSsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrCoMKgwqDCoCB8U3xFfFB8 IEZ1VHlwZSB8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqAgKy0tLS0tLS0t LS0tLS0tLSsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrCoMKgwqDCoMKgwqAgU8KgwqDC oMKgwqDCoCA9IHZhcmlhYmxlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqDC oMKgIEXCoMKgwqDCoMKgwqAgPSB2YXJpYWJsZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KsKgwqDCoMKgwqDCoCBQwqDCoMKgwqDCoMKgID0gdmFyaWFibGUKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICrCoMKgwqDCoMKgwqAgRnVUeXBlwqAgPSBOQUwgdW5pdCB0eXBlCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMtPmJ1Zlsy XcKgID0gbmFsX3R5cGU7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogc2V0IHRoZSBTIGJp dDogbWFyayBhcyBzdGFydCBmcmFnbWVudCAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMt PmJ1ZlsyXSB8PSAxIDw8IDc7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gU2V0IHRoZSBQ IGJpdCBpZiBpdCdzIHRoZSBsYXN0IGZyYWdtZW50IGFuZCBpZiBpdCdzIGEKPiBWQ0wgTkFMIHVu aXQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobmFsX3R5cGUgPD0gMTEpIHsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHMtPmJ1ZlsyXSAmPSB+KDEgPDwgNSk7wqAgLy8g Q2xlYXIgdGhlIFAgYml0IG90aGVyd2lzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogcGFzcyB0aGUgb3JpZ2luYWwgTkFMIGhlYWRlciAq Lwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWbCoCArPSAyOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzaXplIC09IDI7Cj4gQEAgLTE3MCw4ICsyNDYsMTQgQEAgc3RhdGljIHZvaWQg bmFsX3NlbmQoQVZGb3JtYXRDb250ZXh0ICpzMSwgY29uc3QKPiB1aW50OF90ICpidWYsIGludCBz aXplLCBpbnQgbGFzdAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBidWbCoCArPSBzLT5tYXhf cGF5bG9hZF9zaXplIC0gaGVhZGVyX3NpemU7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNp emUgLT0gcy0+bWF4X3BheWxvYWRfc2l6ZSAtIGhlYWRlcl9zaXplOwo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzLT5idWZbZmxhZ19ieXRlXSAmPSB+KDEgPDwgNyk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKGNvZGVjID09IEFWX0NPREVDX0lEX1ZWQyAmJiBuYWxfdHlwZSA8PSAx MSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcy0+YnVmW2ZsYWdfYnl0ZV0g Jj0gfigxIDw8IDUpO8KgIC8vIENsZWFyIHRoZSBQIGJpdAo+IG90aGVyd2lzZQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0KPiDCoMKgwqDCoMKgwqDCoMKgIH0KPiDCoMKgwqDCoMKgwqDCoMKg IHMtPmJ1ZltmbGFnX2J5dGVdIHw9IDEgPDwgNjsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGNvZGVj ID09IEFWX0NPREVDX0lEX1ZWQyAmJiBuYWxfdHlwZSA8PSAxMSkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHMtPmJ1ZltmbGFnX2J5dGVdIHw9IDEgPDwgNTvCoCAvLyBTZXQgdGhlIFAgYml0 Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweSgmcy0+YnVmW2hl YWRlcl9zaXplXSwgYnVmLCBzaXplKTsKPiDCoMKgwqDCoMKgwqDCoMKgIGZmX3J0cF9zZW5kX2Rh dGEoczEsIHMtPmJ1Ziwgc2l6ZSArIGhlYWRlcl9zaXplLCBsYXN0KTsKPiDCoMKgwqDCoCB9Cj4g ZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3NkcC5jIGIvbGliYXZmb3JtYXQvc2RwLmMKPiBpbmRl eCBjY2ZhYThhZmY1Li4yZmJmMTczZTQxIDEwMDY0NAo+IC0tLSBhL2xpYmF2Zm9ybWF0L3NkcC5j Cj4gKysrIGIvbGliYXZmb3JtYXQvc2RwLmMKPiBAQCAtMzMsNiArMzMsNyBAQAo+IMKgI2luY2x1 ZGUgImludGVybmFsLmgiCj4gwqAjaW5jbHVkZSAiYXZjLmgiCj4gwqAjaW5jbHVkZSAiaGV2Yy5o Igo+ICsjaW5jbHVkZSAidnZjLmgiCj4gwqAjaW5jbHVkZSAicnRwLmgiCj4gwqAjaW5jbHVkZSAi dmVyc2lvbi5oIgo+IMKgI2lmIENPTkZJR19ORVRXT1JLCj4gQEAgLTM0Nyw2ICszNDgsMTc2IEBA IGVycjoKPiDCoMKgwqDCoCByZXR1cm4gcmV0Owo+IMKgfQo+IMKgKwo+ICtzdGF0aWMgaW50IGNh bGN1bGF0ZV9wdGxfc2l6ZSh1aW50OF90ICpleHRyYWRhdGEpIHsKPiArwqDCoMKgIGludCBvZmZz ZXQgPSAwOwo+ICvCoMKgwqAgLyoKPiArwqDCoMKgwqDCoMKgwqAgKiB1bnNpZ25lZCBpbnQoOSkg b2xzX2lkeDsKPiArwqDCoMKgwqDCoMKgwqAgKiB1bnNpZ25lZCBpbnQoMykgbnVtX3N1YmxheWVy czsKPiArwqDCoMKgwqDCoMKgwqAgKiB1bnNpZ25lZCBpbnQoMikgY29uc3RhbnRfZnJhbWVfcmF0 ZTsKPiArwqDCoMKgwqDCoMKgwqAgKiB1bnNpZ25lZCBpbnQoMikgY2hyb21hX2Zvcm1hdF9pZGM7 wqDCoMKgwqAgKi8KPiArwqDCoMKgIHVpbnQ4X3QgbnVtX3N1YmxheWVycyA9IChBVl9SQjE2KCZl eHRyYWRhdGFbb2Zmc2V0XSkgPj4gNCkgJiAweDA3Owo+ICvCoMKgwqAgb2Zmc2V0ICs9IDI7Cj4g K8KgwqDCoCAvKsKgIHVuc2lnbmVkIGludCgzKSBiaXRfZGVwdGhfbWludXM4Owo+ICvCoMKgwqDC oMKgwqDCoCBiaXQoNSkgcmVzZXJ2ZWQgPSDigJgxMTExMeKAmWI7ICovCj4gK8KgwqDCoCBvZmZz ZXQgKz0gMTsKPiArwqDCoMKgIC8qwqAgYml0KDIpIHJlc2VydmVkID0g4oCYMDDigJliOwo+ICvC oMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgKDYpIG51bV9ieXRlc19jb25zdHJhaW50X2luZm8g Ki8KPiArwqDCoMKgIHVpbnQ4X3QgbnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IEFWX1JCOCgm ZXh0cmFkYXRhW29mZnNldF0pICYgMHgzZjsKPiArwqDCoMKgIG9mZnNldCArPSAxOwo+ICvCoMKg wqAgLyrCoCB1bnNpZ25lZCBpbnQgKDcpIGdlbmVyYWxfcHJvZmlsZV9pZGMKPiArwqDCoMKgwqDC oMKgwqAgdW5zaWduZWQgaW50ICgxKSBnZW5lcmFsX3RpZXJfZmxhZyAqLwo+ICvCoMKgwqAgb2Zm c2V0ICs9IDE7Cj4gK8KgwqDCoCAvKsKgIHVuc2lnbmVkIGludCAoOCkgZ2VuZXJhbF9sZXZlbF9p ZGMgKi8KPiArwqDCoMKgIG9mZnNldCArPSAxOwo+ICvCoMKgwqAgLyoKPiArwqDCoMKgICrCoMKg IHVuc2lnbmVkIGludCAoMSkgcHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnCj4gK8KgwqDC oCAqwqDCoCB1bnNpZ25lZCBpbnQgKDEpIHB0bF9tdWx0aWxheWVyX2VuYWJsZWRfZmxhZwo+ICvC oMKgwqAgKsKgwqAgdW5zaWduZWQgaW50ICg4Km51bV9ieXRlc19jb25zdHJhaW50X2luZm8gLTIp Cj4gZ2VuZXJhbF9jb25zdHJhaW50X2luZm8gKi8KPiArwqDCoMKgIG9mZnNldCArPSBudW1fYnl0 ZXNfY29uc3RyYWludF9pbmZvOwo+ICsKPiArwqDCoMKgIGlmIChudW1fc3VibGF5ZXJzID4gMSkg ewo+ICvCoMKgwqDCoMKgwqDCoCAvLyBwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFncwo+ ICvCoMKgwqDCoMKgwqDCoCB1aW50OF90IHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdz ID0gZXh0cmFkYXRhW29mZnNldF07Cj4gK8KgwqDCoMKgwqDCoMKgIG9mZnNldCArPSAxOwo+ICvC oMKgwqDCoMKgwqDCoCAvLyBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBzdWJsYXllcl9sZXZlbF9p ZGMgYnl0ZXMKPiArwqDCoMKgwqDCoMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fc3VibGF5 ZXJzIC0gMTsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHB0bF9zdWJsYXll cl9sZXZlbF9wcmVzZW50X2ZsYWdzICYgKDEgPDwgaSkpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIG9mZnNldCArPSAxOyAvLyBBZGQgYSBieXRlIGZvciBlYWNoIHN1YmxheWVy X2xldmVsX2lkYwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqAg fQo+ICvCoMKgwqAgfQo+ICvCoMKgwqAgLyrCoCB1bnNpZ25lZCBpbnQoOCkgbnVtX3N1Yl9wcm9m aWxlczsgKi8KPiArwqDCoMKgIHVpbnQ4X3QgcHRsX251bV9zdWJfcHJvZmlsZXMgPSBleHRyYWRh dGFbb2Zmc2V0XTsKPiArwqDCoMKgIG9mZnNldCArPSAxOwo+ICvCoMKgwqAgLyrCoCB1bnNpZ25l ZCBpbnQoMzIpIGdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjW2pdOyAqLwo+ICvCoMKgwqAgb2Zmc2V0 ICs9IDQgKiBwdGxfbnVtX3N1Yl9wcm9maWxlczsKPiArwqDCoMKgIC8vRW5kIG9mIFZ2Y1BUTFJl Y29yZAo+ICvCoMKgwqAgLyoKPiArwqDCoMKgICrCoMKgIHVuc2lnbmVkIGludCgxNikgbWF4X3Bp Y3R1cmVfd2lkdGg7Ki8KPiArwqDCoMKgIG9mZnNldCArPSAyOwo+ICvCoMKgwqAgLyoKPiArwqDC oMKgICrCoMKgIHVuc2lnbmVkIGludCgxNikgbWF4X3BpY3R1cmVfaGVpZ2h0OyovCj4gK8KgwqDC oCBvZmZzZXQgKz0gMjsKPiArwqDCoMKgIC8qCj4gK8KgwqDCoCAqwqDCoCB1bnNpZ25lZCBpbnQo MTYpIGF2Z19mcmFtZV9yYXRlOyAqLwo+ICvCoMKgwqAgb2Zmc2V0ICs9IDI7Cj4gK8KgwqDCoCBy ZXR1cm4gb2Zmc2V0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGV4dHJhZGF0YTJwc2V0c192dmNj KGNvbnN0IEFWQ29kZWNQYXJhbWV0ZXJzICpwYXIsIGNoYXIgKipvdXQpCj4gK3sKPiArwqDCoMKg IGNoYXIgKnBzZXRzOwo+ICvCoMKgwqAgdWludDhfdCAqZXh0cmFkYXRhID0gcGFyLT5leHRyYWRh dGE7Cj4gK8KgwqDCoCBpbnQgZXh0cmFkYXRhX3NpemUgPSBwYXItPmV4dHJhZGF0YV9zaXplOwo+ ICvCoMKgwqAgdWludDhfdCAqdG1wYnVmID0gTlVMTDsKPiArwqDCoMKgIGludCBwc19wb3NbM10g PSB7IDAgfTsKPiArwqDCoMKgIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHNfbmFtZXNbM10g PSB7ICJ2cHMiLCAic3BzIiwgInBwcyIgfTsKPiArwqDCoMKgIGludCBudW1fYXJyYXlzLCBudW1f bmFsdXM7Cj4gK8KgwqDCoCBpbnQgcG9zLCBpLCBqLCByZXQgPSAwOwo+ICsKPiArwqDCoMKgICpv dXQgPSBOVUxMOwo+ICsKPiArwqDCoMKgIGlmIChwYXItPmV4dHJhZGF0YVswXSAhPSAxKSB7Cj4g K8KgwqDCoMKgwqDCoMKgIEFWSU9Db250ZXh0ICpwYjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIHJl dCA9IGF2aW9fb3Blbl9keW5fYnVmKCZwYik7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAw KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoCByZXQgPSBmZl9pc29tX3dyaXRlX3Z2Y2MocGIsIHBhci0+ZXh0cmFkYXRhLAo+IHBhci0+ ZXh0cmFkYXRhX3NpemUsIDApOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2aW9fY2xvc2VfZHluX2J1ZihwYiwgJnRtcGJ1Zik7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnI7Cj4gK8KgwqDCoMKgwqDCoMKgIH0KPiAr wqDCoMKgwqDCoMKgwqAgZXh0cmFkYXRhX3NpemUgPSBhdmlvX2Nsb3NlX2R5bl9idWYocGIsICZl eHRyYWRhdGEpOwo+ICvCoMKgwqDCoMKgwqDCoCB0bXBidWYgPSBleHRyYWRhdGE7Cj4gK8KgwqDC oCB9Cj4gKwo+ICvCoMKgwqAgaW50IHB0bF9wcmVzZW50X2ZsYWcgPSAoZXh0cmFkYXRhWzBdICYg MHgwMSk7Cj4gKwo+ICvCoMKgwqAgcG9zID0gMTsgLy8gU3RhcnQgYWZ0ZXIgdGhlIGluaXRpYWwg Y29uZmlndXJhdGlvbiBieXRlCj4gK8KgwqDCoCBpZiAocHRsX3ByZXNlbnRfZmxhZykgewo+ICvC oMKgwqDCoMKgwqDCoCAvLyBQVEwgaXMgcHJlc2VudCwgc28gcGFyc2UgUFRMIGZpZWxkcyAodGhl IG51bWJlciBvZiBieXRlcwo+IGRlcGVuZHMgb24gUFRMIHN0cnVjdHVyZSkKPiArwqDCoMKgwqDC oMKgwqAgcG9zICs9IGNhbGN1bGF0ZV9wdGxfc2l6ZShleHRyYWRhdGEgKyAxKTsKPiArwqDCoMKg IH0KPiArwqDCoMKgIGlmIChwb3MgKyAxID4gZXh0cmFkYXRhX3NpemUpCj4gK8KgwqDCoMKgwqDC oMKgIGdvdG8gZXJyOwo+ICvCoMKgwqAgbnVtX2FycmF5cyA9IGV4dHJhZGF0YVtwb3MrK107Cj4g K8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbnVtX2FycmF5czsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDC oMKgIGludCBudW1fbmFsdXMsIG5hbHVfdHlwZTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHBvcyAr IDMgPiBleHRyYWRhdGFfc2l6ZSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycjsK PiArwqDCoMKgwqDCoMKgwqAgbmFsdV90eXBlID0gZXh0cmFkYXRhW3Bvc10gJiAweDFmOwo+ICvC oMKgwqDCoMKgwqDCoCBpZiAobmFsdV90eXBlID09IDE0KSAvLyBWUFMKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBwc19wb3NbMF0gPSBwb3M7Cj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKG5h bHVfdHlwZSA9PSAxNSkgLy8gU1BTCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHNfcG9zWzFd ID0gcG9zOwo+ICvCoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChuYWx1X3R5cGUgPT0gMTYpIC8vIFBQ Uwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBzX3Bvc1syXSA9IHBvczsKPiArwqDCoMKgwqDC oMKgwqAgbnVtX25hbHVzID0gQVZfUkIxNigmZXh0cmFkYXRhW3BvcyArIDFdKTsKPiArwqDCoMKg wqDCoMKgwqAgcG9zICs9IDM7Cj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaiA9IDA7IGogPCBudW1f bmFsdXM7IGorKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBsZW47Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKHBvcyArIDIgPiBleHRyYWRhdGFfc2l6ZSkKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGxlbiA9IEFWX1JCMTYoJmV4dHJhZGF0YVtwb3NdKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwb3MgKz0gMjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocG9zICsgbGVuID4g ZXh0cmFkYXRhX3NpemUpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVy cjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwb3MgKz0gbGVuOwo+ICvCoMKgwqDCoMKgwqDC oCB9Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCBpZiAoIXBzX3Bvc1sxXSB8fCAhcHNfcG9zWzJdKQo+ ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycjsKPiArwqDCoMKgIHBzZXRzID0gYXZfbWFsbG9jeihN QVhfUFNFVF9TSVpFKTsKPiArwqDCoMKgIGlmICghcHNldHMpIHsKPiArwqDCoMKgwqDCoMKgwqAg cmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycjsKPiArwqDC oMKgIH0KPiArCj4gK8KgwqDCoCBwc2V0c1swXSA9ICdcMCc7Cj4gKwo+ICvCoMKgwqAgZm9yIChp ID0gMDsgaSA8IDM7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXBzX3Bvc1tpXSkgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4g K8KgwqDCoMKgwqDCoMKgIHBvcyA9IHBzX3Bvc1tpXTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGlm IChpID4gMCAmJiBwc19wb3NbaS0xXSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9zdHJs Y2F0KHBzZXRzLCAiOyAiLCBNQVhfUFNFVF9TSVpFKTsKPiArwqDCoMKgwqDCoMKgwqAgYXZfc3Ry bGNhdGYocHNldHMsIE1BWF9QU0VUX1NJWkUsICJzcHJvcC0lcz0iLCBwc19uYW1lc1tpXSk7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoCAvLyBTa2lwcGluZyBib3VuZGFyeSBjaGVja3MgaW4gdGhlIGlu cHV0IGhlcmU7IHdlJ3ZlIGFscmVhZHkKPiB0cmF2ZXJzZWQKPiArwqDCoMKgwqDCoMKgwqAgLy8g dGhlIHdob2xlIGh2Y2Mgc3RydWN0dXJlIGFib3ZlIHdpdGhvdXQgaXNzdWVzCj4gK8KgwqDCoMKg wqDCoMKgIG51bV9uYWx1cyA9IEFWX1JCMTYoJmV4dHJhZGF0YVtwb3MgKyAxXSk7Cj4gK8KgwqDC oMKgwqDCoMKgIHBvcyArPSAzOwo+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGogPSAwOyBqIDwgbnVt X25hbHVzOyBqKyspIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgbGVuID0gQVZfUkIx NigmZXh0cmFkYXRhW3Bvc10pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBzdHJwb3M7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG9zICs9IDI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKGogPiAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfc3Ry bGNhdChwc2V0cywgIiwiLCBNQVhfUFNFVF9TSVpFKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBzdHJwb3MgPSBzdHJsZW4ocHNldHMpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgh YXZfYmFzZTY0X2VuY29kZShwc2V0cyArIHN0cnBvcywgTUFYX1BTRVRfU0laRSAtIHN0cnBvcywK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICZleHRyYWRhdGFbcG9zXSwgbGVuKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXZfZnJlZShwc2V0cyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBnb3RvIGVycjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcG9zICs9IGxlbjsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAg fQo+ICvCoMKgwqAgYXZfZnJlZSh0bXBidWYpOwo+ICsKPiArwqDCoMKgICpvdXQgPSBwc2V0czsK PiArwqDCoMKgIHJldHVybiAwOwo+ICtlcnI6Cj4gK8KgwqDCoCBpZiAocmV0ID49IDApCj4gK8Kg wqDCoMKgwqDCoMKgIHJldCA9IEFWRVJST1JfSU5WQUxJRERBVEE7Cj4gK8KgwqDCoCBhdl9mcmVl KHRtcGJ1Zik7Cj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+IMKgc3RhdGljIGludCBl eHRyYWRhdGEyY29uZmlnKEFWRm9ybWF0Q29udGV4dCAqcywgY29uc3QgQVZDb2RlY1BhcmFtZXRl cnMKPiAqcGFyLAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNoYXIgKipvdXQpCj4gwqB7Cj4gQEAgLTU3OSw2ICs3NTAsMTcgQEAgc3Rh dGljIGludCBzZHBfd3JpdGVfbWVkaWFfYXR0cmlidXRlcyhjaGFyICpidWZmLAo+IGludCBzaXpl LCBjb25zdCBBVlN0cmVhbSAqc3QsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X3N0cmxj YXRmKGJ1ZmYsIHNpemUsICJhPWZtdHA6JWQgJXNcclxuIiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw YXlsb2FkX3R5cGUsIGNvbmZpZyk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiArwqDCoMKg IGNhc2UgQVZfQ09ERUNfSURfVlZDOgo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocC0+ZXh0cmFkYXRh X3NpemUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBleHRyYWRhdGEycHNldHNf dnZjYyhwLCAmY29uZmlnKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gK8KgwqDCoMKg wqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqAgYXZfc3RybGNhdGYoYnVmZiwgc2l6ZSwgImE9cnRw bWFwOiVkIEgyNjYvOTAwMDBcclxuIiwKPiBwYXlsb2FkX3R5cGUpOwo+ICvCoMKgwqDCoMKgwqDC oCBpZiAoY29uZmlnKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X3N0cmxjYXRmKGJ1ZmYs IHNpemUsICJhPWZtdHA6JWQgJXNcclxuIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBheWxvYWRfdHlw ZSwgY29uZmlnKTsKPiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gwqDCoMKgwqAgY2FzZSBBVl9D T0RFQ19JRF9NUEVHNDoKPiDCoMKgwqDCoMKgwqDCoMKgIGlmIChwLT5leHRyYWRhdGFfc2l6ZSkg ewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBleHRyYWRhdGEyY29uZmlnKGZtdCwg cCwgJmNvbmZpZyk7Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0 cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNj cmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZt cGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K