X-Original-To: alpine-aports@lists.alpinelinux.org Received: from mail.bitmessage.ch (mail.bitmessage.ch [146.228.112.252]) by lists.alpinelinux.org (Postfix) with ESMTP id DB7BC5C4AED for ; Wed, 7 Jun 2017 17:52:21 +0000 (GMT) dkim-signature: v=1; a=rsa-sha256; d=bitmessage.ch; s=mail; c=relaxed/relaxed; q=dns/txt; h=From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:Content-Transfer-Encoding; bh=TqrreglpGeA/fldyTQpiTTfzcQ7bs4xcwCCrPTBMbhA=; b=PnP4Av9HvRgNSrIUzWfnEomkX/KcrnwwZ7u5ipIixCFiBSiukvuak7GvyoCZPaO5xedtutHizdHefnyLTfhDsf3b/ahDFonT+X6xwgIWjZY5g5eyRVmlbVU4E+LsvP2kqHCa/BVRd2q2+NDqQMfTyGvGt+Dbwxgs4fdcHu5ttxo= Received: from localhost.localdomain (95-55-117-223.dynamic.avangarddsl.ru [95.55.117.223]) by mail.bitmessage.ch with ESMTPSA (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128) ; Wed, 7 Jun 2017 19:51:40 +0200 From: =?UTF-8?q?C=C3=A1g?= To: alpine-aports@lists.alpinelinux.org Subject: [alpine-aports] [PATCH] main/mg: upgrade to 20170401 and add unicode support Date: Wed, 7 Jun 2017 18:49:50 +0100 Message-Id: <20170607174950.27986-1-ca6c@bitmessage.ch> X-Mailer: git-send-email 2.13.0 X-Mailinglist: alpine-aports Precedence: list List-Id: Alpine Development List-Unsubscribe: List-Post: List-Help: List-Subscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 LS0tDQogbWFpbi9tZy9taXNzaW5nLWRlZmluZXMucGF0Y2ggfCAgIDM0ICsrDQogbWFpbi9tZy91 bmljb2RlLnBhdGNoICAgICAgICAgfCAxMzQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrDQogMiBmaWxlcyBjaGFuZ2VkLCAxMzgxIGluc2VydGlvbnMoKykNCiBjcmVh dGUgbW9kZSAxMDA2NDQgbWFpbi9tZy9taXNzaW5nLWRlZmluZXMucGF0Y2gNCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbWFpbi9tZy91bmljb2RlLnBhdGNoDQoNCmRpZmYgLS1naXQgYS9tYWluL21nL21p c3NpbmctZGVmaW5lcy5wYXRjaCBiL21haW4vbWcvbWlzc2luZy1kZWZpbmVzLnBhdGNoDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMC4uNThmNWUxMDlmYQ0KLS0tIC9kZXYv bnVsbA0KKysrIGIvbWFpbi9tZy9taXNzaW5nLWRlZmluZXMucGF0Y2gNCkBAIC0wLDAgKzEsMzQg QEANCitkaWZmIC0tZ2l0IGEvZmlsZWlvLmMgYi9maWxlaW8uYw0KK2luZGV4IDRiYjFmNDYuLmM5 MzdlYjAgMTAwNjQ0DQorLS0tIGEvZmlsZWlvLmMNCisrKysgYi9maWxlaW8uYw0KK0BAIC0yNyw2 ICsyNywxNCBAQA0KKyAjaW5jbHVkZSAia2JkLmgiDQorICNpbmNsdWRlICJwYXRobmFtZXMuaCIN CisgDQorKyNpZm5kZWYgTUFYTkFNTEVODQorKyNkZWZpbmUgTUFYTkFNTEVOIDI1NQ0KKysjZW5k aWYNCisrDQorKyNpZm5kZWYgREVGRklMRU1PREUNCisrI2RlZmluZSBERUZGSUxFTU9ERSAwNjY2 DQorKyNlbmRpZg0KKysNCisgc3RhdGljIGNoYXIgKmJrdXBsb2NhdGlvbihjb25zdCBjaGFyICop Ow0KKyBzdGF0aWMgaW50ICAgYmt1cGxlYXZldG1wKGNvbnN0IGNoYXIgKik7DQorIA0KK2RpZmYg LS1naXQgYS9yZV9zZWFyY2guYyBiL3JlX3NlYXJjaC5jDQoraW5kZXggMjg3MDMwYS4uZGE0NGYw MCAxMDA2NDQNCistLS0gYS9yZV9zZWFyY2guYw0KKysrKyBiL3JlX3NlYXJjaC5jDQorQEAgLTM0 LDYgKzM0LDEwIEBADQorICNkZWZpbmUgUkVfTk1BVENICTEwCQkvKiBtYXggbnVtYmVyIG9mIG1h dGNoZXMJICAgICovDQorICNkZWZpbmUgUkVQTEVOCQkyNTYJCS8qIG1heCBsZW5ndGggb2YgcmVw bGFjZW1lbnQgc3RyaW5nICovDQorIA0KKysjaWZuZGVmIFJFR19TVEFSVEVORA0KKysjZGVmaW5l IFJFR19TVEFSVEVORCA0DQorKyNlbmRpZg0KKysNCisgY2hhcglyZV9wYXRbTlBBVF07CQkJLyog cmVnZXggcGF0dGVybgkJICAgICovDQorIGludAlyZV9zcmNoX2xhc3RkaXIgPSBTUkNIX05PUFI7 CS8qIGxhc3Qgc2VhcmNoIGZsYWdzCQkgICAgKi8NCisgaW50CWNhc2Vmb2xkc2VhcmNoID0gVFJV RTsJCS8qIGRvZXMgc2VhcmNoIGlnbm9yZSBjYXNlPwkgICAgKi8NCmRpZmYgLS1naXQgYS9tYWlu L21nL3VuaWNvZGUucGF0Y2ggYi9tYWluL21nL3VuaWNvZGUucGF0Y2gNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi4zOWQ4ODMxZjY4DQotLS0gL2Rldi9udWxsDQorKysg Yi9tYWluL21nL3VuaWNvZGUucGF0Y2gNCkBAIC0wLDAgKzEsMTM0NyBAQA0KK2RpZmYgLS1naXQg YS9SRUFETUUubWQgYi9SRUFETUUubWQNCitpbmRleCA5OTRkNmJlLi4yZjVkMmMxIDEwMDY0NA0K Ky0tLSBhL1JFQURNRS5tZA0KKysrKyBiL1JFQURNRS5tZA0KK0BAIC0xLDQ5ICsxLDUwIEBADQor LSMgUE9SVElORyBNRyBBTkQgVVNJTkcgTElCQlNEDQorKyMgbWcgd2l0aCB3aWRlIGRpc3BsYXkg c3VwcG9ydC4NCisgDQorLUkndmUgbWFpbnRhaW5lZCBhbmQgcG9ydGVkIG1nIGZvciBxdWl0ZSBz b21lIHRpbWUgbm93IGFuZCBhdCBmaXJzdCBpdA0KKy13YXMgZWFzeSByZWNlbnRseSBpdCBnb3Qg aGFyZGVyIGFuZCBoYXJkZXIgc2luY2UgaXQgd2FzIGEgbW92aW5nDQorLXRhcmdldC4gRXNwZWNp YWxseSB0aGUgaW5jbHVzaW9uIG9mIHNvbWUgc3lzdGVtIHNwZWNpZmljIGxpYnJhcmllcyBzaW5j ZQ0KKy1hYm91dCAyIHllYXJzIGFnbyBtYWRlIGl0IHRvbyBtdWNoIG9mIGFuIGVmZm9ydCBmb3Ig bXkgaHVtYmxlIGNvZGluZw0KKy1za2lsbHMuDQorLQ0KKy1TbyByZWNlbnRseSBKYXNwZXIgTGll dmlzc2UgQWRyaWFhbnNlIGFza2VkIG1lIHRvIHRyeSBpdCBhZ2FpbiBhbmQgSQ0KKy1yZXN0YXJ0 ZWQgd29ya2luZyBvbiB0aGUgcHJvamVjdCBhbmQgcmFuIGludG8gZXhhY3RseSB0aGUgc2FtZSBw cm9ibGVtcw0KKy1hZ2Fpbi4gV2hpbGUgZ29vZ2xpbmcgZm9yIHNvbHV0aW9ucyBJIHJhbiBpbnRv IGxpYmJzZDoNCistDQorLSAgaHR0cDovL2xpYmJzZC5mcmVlZGVza3RvcC5vcmcvd2lraS8NCist DQorLUl0J3MgYSBwb3J0aW5nIGxpYnJhcnkgZm9yIE9wZW5CU0QgY29kZSEgQW5kIGFmdGVyIGlu c3RhbGxpbmcgdGhhdCBpdA0KKy13YXMgYSBwaWVjZSBvZiBwaWUgdG8gZ2V0IG1nIHBvcnRlZCBh Z2Fpbi4NCistDQorLSMjIFBPUlRJTkcgVE8gQUxMIE9USEVSIFBMQVRGT1JNUw0KKy0NCistT2th eSwgdGhhdCB3YXMgZGViaWFuLiBOb3cgSSBoYXZlIHRvIGdldCB0aGUgcmVzdCBvZiBhbGwgdGhl IHByZXZpb3VzbHkNCistc3Vwb3J0ZWQgcGxhdGZvcm1zIHdvcmtpbmcgYWdhaW4uIEFsbCBoZWxw IGlzIHdlbGNvbWUgYW5kIGFzIGFsd2F5czoNCistUGxlYXNlIHByb3ZpZGUgcGF0Y2hlcyB0aGF0 IGRvIG5vdCBicmVhayBzdHVmZiBmb3Igb3RoZXIgcGxhdGZvcm1zLg0KKy0NCistIyMgQlVJTERJ TkcgTUcNCistDQorLVNvLCBiYXNpYyBpbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIG1nOg0KKy0N CistIC0gR2V0IGxpYmJzZCBpbnN0YWxsZWQuDQorLSAtIFJ1biB0aGUgZm9sbG93aW5nIGNvbW1h bmRzOg0KKytJIGp1c3QgcmVjZWl2ZWQgdGhpcyBhbWF6aW5nIHBhdGNoIGZyb20gUy4gR2lsZXMu IEZvciB0aG9zZSBpbXBhdGllbnQNCisrcGVvcGxlOiBjaGVjayBpdCBvdXQgKHRpaGloaSkgYW5k IGFkZCB0aGlzIGxpbmUgdG8geW91ciBgLm1nYA0KKyANCisgYGBgDQorLW1ha2UNCistc3VkbyBt YWtlIGluc3RhbGwNCisrc2V0LWRlZmF1bHQtbW9kZSAid2lkZSINCisgYGBgDQorIA0KKy0jIyBV U0lORyBDVlMNCistDQorLVRoaXMgY29kZSBpcyB0aGUgY3ZzIGNoZWNrb3V0IGZyb20gdGhlIE9w ZW5CU0QgcHJvamVjdCBzbyBpZiB5b3UgaW5zdGFsbA0KKy1jdnMgeW91IGNhbiBzZWUgd2hhdCBJ IGNoYW5nZWQgdG8gcG9ydCBtZy4gTGlrZSB0aGlzOg0KKy0NCistYGBgDQorLWN2cyBkaWZmIC11 dw0KKy1gYGANCistDQorLSMjIEFCT1VUIGZnZXRsbigpDQorLQ0KKy1JbmNhc2UgeW91IGFyZSB3 b25kZXJpbmcgYWJvdXQgdGhhdCBkZXByZWNhdGlvbiB3YXJuaW5nLCBoZXJlIGlzIGEgbmljZSBl eHBsYW5hdGlvbiBhYm91dCB3aHkgaXQgaXMgaGFyZCB0byBmaXg6DQorLQ0KKy0gIGh0dHA6Ly9u aWFsbG9oaWdnaW5zLmNvbS8yMDA5LzEwLzAzL3JlYWQtYS1maWxlLWxpbmUtYnktbGluZS1pbi1j LXNlY3VyZS1mZ2V0cy1pZGlvbS8NCisrIyMgSW50cm9kdWN0aW9uIGJ5IFMuIEdpbGVzDQorKw0K KytIaSwNCisrDQorK0kndmUgZ290IGEgcGF0Y2ggdGhhdCBhbGxvd3MgbWcgdG8gZGlzcGxheSB3 aWRlIGNoYXJhY3RlcnMsIGlmIHlvdSdyZQ0KKytpbnRlcmVzdGVkLg0KKysNCisrSXQgY2FuIGJl IHR1cm5lZCBvbiBieSBzaG93LXdpZGUtbW9kZSAoYmV0dGVyIG5hbWUgd2VsY29tZSksIGFuZCBp cw0KKytmYWlybHkgbGltaXRlZCBpbiByZWdhcmQgdG8gd2hhdCB0eXBlcyBvZiB3aWRlIGNoYXJh Y3RlcnMgYXJlDQorK2Rpc3BsYXllZC4gRXZlcnl0aGluZyBnb2VzIHRocm91Z2ggbWJydG93Yygz KSwgc28geW91IGdldCBleGFjdGx5IG9uZQ0KKytzdXBwb3J0ZWQgZW5jb2Rpbmc6IHdoYXRldmVy IExDXyogc2F5cy4gRXZlcnl0aGluZyBlbHNlIGlzIGRpc3BsYXllZA0KKythcyBvY3RhbCBlc2Nh cGUgc2VxdWVuY2VzIChhcyBub3JtYWwgY3VycmVudCBiZWhhdmlvcikuIE1vdGlvbiBpcw0KKytz dGlsbCBvbiBhIGJ5dGUgbGV2ZWwsIHNvIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGFyZSBzbG93IHRv IHRyYXZlbA0KKyt0aHJvdWdoLCBhbmQgeW91IGNhbiBpbnNlcnQgYnl0ZXMgaW4gdGhlIG1pZGRs ZSBvZiB0aGVtICh3aGljaCB3b3Jrcw0KKytmaW5lKS4gQSBsaW1pdGVkIHZlcnNpb24gb2YgaW5z ZXJ0LWNoYXIgaXMgYWxzbyBpbmNsdWRlZCwgd2hpY2ggd29ya3MNCisrdGhyb3VnaCB3Y2hhcl90 LCBzbyB0aGF0IG9uIGFueSBzeXN0ZW0gd2l0aCBfX1NURENfSVNPXzEwNjQ2X18gc2V0LA0KKytp bnNlcnRpbmcgdW5pY29kZSBjb2RlcG9pbnRzIGJ5IG51bWJlciBpcyBwb3NzaWJsZS4NCisrDQor K0l0IGFsc28gZml4ZXMgc29tZSBvZGQgYnVncyByZWxhdGVkIHRvIHdpZGUgY2hhcmFjdGVyIGRp c3BsYXkgYW5kDQorK2V4dGVuZGVkIGxpbmVzLiBGb3IgZXhhbXBsZTogaW4gYSBmaWxlIHdpdGgg ZW5vdWdoIHdpZGUgY2hhcmFjdGVycw0KKysoc3VjaCBhcyDvvKHvvKLvvKMpIHRvIG1ha2UgYSBs aW5lIGV4dGVuZCBmYXIgKHNheSwgMjAwIGNoYXJhY3RlcnMgb24gYW4NCisrODAtd2lkZSBkaXNw bGF5KSwgbW92aW5nIHRvIHRoZSByaWdodCBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSB3aWxsIChp bg0KKysyMDE2MDExOCkgY29ycnVwdCB0aGUgZGlzcGxheSwgdGhlbiBldmVudHVhbGx5IHNlZ2Zh dWx0LCBiZWNhdXNlDQorK3Z0cHV0ZSBkb2Vzbid0IHBlcmZvcm0gdGhlIHNhbWUgb2N0YWwgZXhw YW5zaW9uIGFzIHZ0cHV0YyBhbmQgdGhlDQorK2NvbHVtbnMgZ2V0IG91dCBvZiBzeW5jLiBUaGlz IHBhdGNoIG1ha2VzIGRpc3BsYXkuYyBhd2FyZSBvZiB0aGUNCisrcG9zc2liaWxpdHkgdGhhdCB0 aGUgYnl0ZXMgYW5kIGdseXBocyBvZiB0aGUgYnVmZmVycyBhcmVuJ3QgMToxLCBzbw0KKytwcm90 ZWN0cyBhZ2FpbnN0IHRoYXQuDQorKw0KKytUaGF0IHNhaWQsIHdpZGUgY2hhcmFjdGVyIHN1cHBv cnQgY29tcGxpY2F0ZXMgYSBsb3Qgb2YgYWxyZWFkeQ0KKytjb21wbGljYXRlZCBsb2dpYyAoZm9y IGV4YW1wbGUsIHZ0cHV0cykgYW5kIHJlbGllcyBvbiB3Y2hhcl90IGZvcg0KKythbG1vc3QgZXZl cnl0aGluZywgYWRkaW5nIHNvbWUgdW5lc2NhcGFibGUgb3ZlcmhlYWQuDQorKw0KKytJZiB5b3Ug d2FudCB0byB0YWtlIHRoaXMgcGF0Y2gsIHBsZWFzZSBkbyBzby4gSWYgeW91IHRoaW5rIGl0J3Mg dG9vDQorK3VnbHkgb3Igbm90IHVzZWZ1bCwgdGhhdCdzIGFsc28gZmluZS4gIExldCBtZSBrbm93 IGlmIHlvdSB3YW50IG1lIHRvDQorK3Jld3JpdGUgcGFydHMgb2YgaXQgKG9yIGlmIHlvdSBzZWUg YW55IGJ1Z3MpIG9yIGlmIHRoZXJlIGFyZSBzdHlsZQ0KKytjb252ZW50aW9ucyBJIGRpZG4ndCBm b2xsb3cuIEl0IGFwcGxpZXMgY2xlYW5seSB3aXRoIHBhdGNoIC1pLCBwbGVhc2UNCisrZm9yZ2l2 ZSB0aGUgZ2l0LWlzbXMuDQorKw0KKysoQW5kLCBvZiBjb3Vyc2UsIG1hbnkgdGhhbmtzIGZvciB5 b3VyIHdvcmsgaW4gbWFpbnRhaW5pbmcgdGhlIHBvcnQuKQ0KKysNCisrUy4gR2lsbGVzDQorZGlm ZiAtLWdpdCBhL2Jhc2ljLmMgYi9iYXNpYy5jDQoraW5kZXggODVkOWY3MC4uMTIzZTExNSAxMDA2 NDQNCistLS0gYS9iYXNpYy5jDQorKysrIGIvYmFzaWMuYw0KK0BAIC0xOCw2ICsxOCw3IEBADQor ICNpbmNsdWRlIDxzaWduYWwuaD4NCisgI2luY2x1ZGUgPHN0ZGlvLmg+DQorICNpbmNsdWRlIDxz dGRsaWIuaD4NCisrI2luY2x1ZGUgPHdjaGFyLmg+DQorIA0KKyAjaW5jbHVkZSAiZGVmLmgiDQor IA0KK0BAIC0yNjksMTIgKzI3MCwyNSBAQCBzZXRnb2FsKHZvaWQpDQorIGludA0KKyBnZXRnb2Fs KHN0cnVjdCBsaW5lICpkbHApDQorIHsNCistCWludCBjLCBpLCBjb2wgPSAwOw0KKy0JY2hhciB0 bXBbNV07DQorKwlyZXR1cm4gZ2V0Ynl0ZW9mY29sKGRscCwgMCwgY3VyZ29hbCk7DQorK30NCisg DQorKy8qDQorKyAqIFJldHVybiB0aGUgYnl0ZSBvZmZzZXQgd2l0aGluIGxwIHRoYXQgaXMgdGFy Z2V0Y29sIGNvbHVtbnMgYmV5b25kDQorKyAqIHN0YXJ0Ynl0ZQ0KKysgKi8NCisrc2l6ZV90DQor K2dldGJ5dGVvZmNvbChjb25zdCBzdHJ1Y3QgbGluZSAqbHAsIGNvbnN0IHNpemVfdCBzdGFydGJ5 dGUsDQorKyAgICAgICAgICAgICBjb25zdCBzaXplX3QgdGFyZ2V0Y29sKQ0KKyt7DQorKwlpbnQg YzsNCisrCXNpemVfdCBpLCBjb2wgPSAwOw0KKysJY2hhciB0bXBbNV07DQorKwlzaXplX3QgYWR2 YW5jZV9ieSA9IDE7DQorIA0KKy0JZm9yIChpID0gMDsgaSA8IGxsZW5ndGgoZGxwKTsgaSsrKSB7 DQorLQkJYyA9IGxnZXRjKGRscCwgaSk7DQorKwlmb3IgKGkgPSBzdGFydGJ5dGU7IGkgPCBsbGVu Z3RoKGxwKTsgaSArPSBhZHZhbmNlX2J5KSB7DQorKwkJYWR2YW5jZV9ieSA9IDE7DQorKwkJYyA9 IGxnZXRjKGxwLCBpKTsNCisgCQlpZiAoYyA9PSAnXHQnDQorICNpZmRlZglOT1RBQg0KKyAJCSAg ICAmJiAhKGN1cmJwLT5iX2ZsYWcgJiBCRk5PVEFCKQ0KK0BAIC0yODQsMTggKzI5OCw4NiBAQCBn ZXRnb2FsKHN0cnVjdCBsaW5lICpkbHApDQorIAkJCWNvbCsrOw0KKyAJCX0gZWxzZSBpZiAoSVND VFJMKGMpICE9IEZBTFNFKSB7DQorIAkJCWNvbCArPSAyOw0KKy0JCX0gZWxzZSBpZiAoaXNwcmlu dChjKSkNCisrCQl9IGVsc2UgaWYgKGlzcHJpbnQoYykpIHsNCisgCQkJY29sKys7DQorLQkJZWxz ZSB7DQorKwkJfSBlbHNlIGlmICghKGN1cmJwLT5iX2ZsYWcgJiBCRlNIT1dSQVcpKSB7DQorKwkJ CW1ic3RhdGVfdCBtYnMgPSB7IDAgfTsNCisrCQkJd2NoYXJfdCB3YyA9IDA7DQorKwkJCXNpemVf dCBjb25zdW1lZCA9IG1icnRvd2MoJndjLCAmbHAtPmxfdGV4dFtpXSwNCisrCQkJICAgICAgICAg ICAgICAgICAgICAgICAgICBsbGVuZ3RoKGxwKSAtIGksICZtYnMpOw0KKysJCQlpbnQgd2lkdGgg PSAtMTsNCisrCQkJaWYgKGNvbnN1bWVkIDwgKHNpemVfdCkgLTIpIHsNCisrCQkJCXdpZHRoID0g d2N3aWR0aCh3Yyk7DQorKwkJCX0NCisrCQkJaWYgKHdpZHRoID49IDApIHsNCisrCQkJCWNvbCAr PSB3aWR0aDsNCisrCQkJCWFkdmFuY2VfYnkgPSBjb25zdW1lZDsNCisrCQkJfSBlbHNlIHsNCisr CQkJCWNvbCArPSBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiXFwlbyIsIGMpOw0KKysJCQl9 DQorKwkJfSBlbHNlIHsNCisgCQkJY29sICs9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICJc XCVvIiwgYyk7DQorIAkJfQ0KKy0JCWlmIChjb2wgPiBjdXJnb2FsKQ0KKysJCWlmIChjb2wgPiB0 YXJnZXRjb2wpDQorIAkJCWJyZWFrOw0KKyAJfQ0KKyAJcmV0dXJuIChpKTsNCisgfQ0KKyANCisg LyoNCisrICogUmV0dXJuIHRoZSBjb2x1bW4gYXQgd2hpY2ggc3BlY2lmaWVkIG9mZnNldCBieXRl IHdvdWxkIGFwcGVhciwgaWYNCisrICogdGhpcyB3ZXJlIHBhcnQgb2YgYSBsb25nZXIgc3RyaW5n IHByaW50ZWQgYnkgdnRwdXRzLCBzdGFydGluZyBhdA0KKysgKiBpbnRpYWxfY29sDQorKyAqLw0K KytzaXplX3QNCisrZ2V0Y29sb2ZieXRlKGNvbnN0IHN0cnVjdCBsaW5lICpscCwgY29uc3Qgc2l6 ZV90IHN0YXJ0Ynl0ZSwNCisrICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBpbml0aWFsX2NvbCwg Y29uc3Qgc2l6ZV90IHRhcmdldG9mZnNldCkNCisrew0KKysJaW50IGM7DQorKwlzaXplX3QgaSwg Y29sID0gaW5pdGlhbF9jb2w7DQorKwljaGFyIHRtcFs1XTsNCisrCXNpemVfdCBhZHZhbmNlX2J5 ID0gMTsNCisrDQorKwlmb3IgKGkgPSBzdGFydGJ5dGU7IGkgPCBsbGVuZ3RoKGxwKTsgaSArPSBh ZHZhbmNlX2J5KSB7DQorKwkJaWYgKGkgPj0gdGFyZ2V0b2Zmc2V0KQ0KKysJCQlicmVhazsNCisr CQlhZHZhbmNlX2J5ID0gMTsNCisrCQljID0gbGdldGMobHAsIGkpOw0KKysJCWlmIChjID09ICdc dCcNCisrI2lmZGVmCU5PVEFCDQorKwkJICAgICYmICEoY3VyYnAtPmJfZmxhZyAmIEJGTk9UQUIp DQorKyNlbmRpZg0KKysJCQkpIHsNCisrCQkJY29sIHw9IDB4MDc7DQorKwkJCWNvbCsrOw0KKysJ CX0gZWxzZSBpZiAoSVNDVFJMKGMpICE9IEZBTFNFKSB7DQorKwkJCWNvbCArPSAyOw0KKysJCX0g ZWxzZSBpZiAoaXNwcmludChjKSkgew0KKysJCQljb2wrKzsNCisrCQl9IGVsc2UgaWYgKCEoY3Vy YnAtPmJfZmxhZyAmIEJGU0hPV1JBVykpIHsNCisrCQkJbWJzdGF0ZV90IG1icyA9IHsgMCB9Ow0K KysJCQl3Y2hhcl90IHdjID0gMDsNCisrCQkJc2l6ZV90IGNvbnN1bWVkID0gbWJydG93Yygmd2Ms ICZscC0+bF90ZXh0W2ldLA0KKysJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGxsZW5ndGgo bHApIC0gaSwgJm1icyk7DQorKwkJCWludCB3aWR0aCA9IC0xOw0KKysJCQlpZiAoY29uc3VtZWQg PCAoc2l6ZV90KSAtMikgew0KKysJCQkJd2lkdGggPSB3Y3dpZHRoKHdjKTsNCisrCQkJfQ0KKysJ CQlpZiAod2lkdGggPj0gMCkgew0KKysJCQkJY29sICs9IHdpZHRoOw0KKysJCQkJYWR2YW5jZV9i eSA9IGNvbnN1bWVkOw0KKysJCQl9IGVsc2Ugew0KKysJCQkJY29sICs9IHNucHJpbnRmKHRtcCwg c2l6ZW9mKHRtcCksICJcXCVvIiwgYyk7DQorKwkJCX0NCisrCQl9IGVsc2Ugew0KKysJCQljb2wg Kz0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIlxcJW8iLCBjKTsNCisrCQl9DQorKwl9DQor KwlyZXR1cm4gKGNvbCk7DQorK30NCisrDQorKw0KKysvKg0KKyAgKiBTY3JvbGwgZm9yd2FyZCBi eSBhIHNwZWNpZmllZCBudW1iZXINCisgICogb2YgbGluZXMsIG9yIGJ5IGEgZnVsbCBwYWdlIGlm IG5vIGFyZ3VtZW50Lg0KKyAgKiBUaGUgIjIiIGlzIHRoZSB3aW5kb3cgb3ZlcmxhcCAodGhpcyBp cyB0aGUgZGVmYXVsdA0KK2RpZmYgLS1naXQgYS9jbW9kZS5jIGIvY21vZGUuYw0KK2luZGV4IGEy MzgyODUuLjlkNGNhYzMgMTAwNjQ0DQorLS0tIGEvY21vZGUuYw0KKysrKyBiL2Ntb2RlLmMNCitA QCAtMTQsNiArMTQsNyBAQA0KKyAjaW5jbHVkZSA8Y3R5cGUuaD4NCisgI2luY2x1ZGUgPHNpZ25h bC5oPg0KKyAjaW5jbHVkZSA8c3RkaW8uaD4NCisrI2luY2x1ZGUgPHdjaGFyLmg+DQorIA0KKyAj aW5jbHVkZSAiZGVmLmgiDQorICNpbmNsdWRlICJmdW5tYXAuaCINCitAQCAtNDE5LDEwICs0MjAs MjUgQEAgZmluZGNvbHBvcyhjb25zdCBzdHJ1Y3QgYnVmZmVyICpicCwgY29uc3Qgc3RydWN0IGxp bmUgKmxwLCBpbnQgbG8pDQorIAkJCSkgew0KKyAJCQljb2wgfD0gMHgwNzsNCisgCQkJY29sKys7 DQorLQkJfSBlbHNlIGlmIChJU0NUUkwoYykgIT0gRkFMU0UpDQorKwkJfSBlbHNlIGlmIChJU0NU UkwoYykgIT0gRkFMU0UpIHsNCisgCQkJY29sICs9IDI7DQorLQkJZWxzZSBpZiAoaXNwcmludChj KSkgew0KKysJCX0gZWxzZSBpZiAoaXNwcmludChjKSkgew0KKyAJCQljb2wrKzsNCisrCQl9IGVs c2UgaWYgKCEoYnAtPmJfZmxhZyAmIEJGU0hPV1JBVykpIHsNCisrCQkJbWJzdGF0ZV90IG1icyA9 IHsgMCB9Ow0KKysJCQl3Y2hhcl90IHdjID0gMDsNCisrCQkJc2l6ZV90IGNvbnN1bWVkID0gbWJy dG93Yygmd2MsICZscC0+bF90ZXh0W2ldLA0KKysJCQkgICAgICAgICAgICAgICAgICAgICAgICAg IGxsZW5ndGgobHApIC0gaSwgJm1icyk7DQorKwkJCWludCB3aWR0aCA9IC0xOw0KKysJCQlpZiAo Y29uc3VtZWQgPCAoc2l6ZV90KSAtMikgew0KKysJCQkJd2lkdGggPSB3Y3dpZHRoKHdjKTsNCisr CQkJfQ0KKysJCQlpZiAod2lkdGggPj0gMCkgew0KKysJCQkJY29sICs9IHdpZHRoOw0KKysJCQkJ aSArPSAoY29uc3VtZWQgLSAxKTsNCisrCQkJfSBlbHNlIHsNCisrCQkJCWNvbCArPSBzbnByaW50 Zih0bXAsIHNpemVvZih0bXApLCAiXFwlbyIsIGMpOw0KKysJCQl9DQorIAkJfSBlbHNlIHsNCisg CQkJY29sICs9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICJcXCVvIiwgYyk7DQorIAkJfQ0K K2RpZmYgLS1naXQgYS9kZWYuaCBiL2RlZi5oDQoraW5kZXggNTRiNzRjZS4uMmZiMjg5ZCAxMDA2 NDQNCistLS0gYS9kZWYuaA0KKysrKyBiL2RlZi5oDQorQEAgLTI3MCw3ICsyNzAsNyBAQCBzdHJ1 Y3QgYnVmZmVyIHsNCisgCWludAkJIGJfbWFya287CS8qIGRpdHRvIGZvciB0aGUgIm1hcmsiCQkg Ki8NCisgCXNob3J0CQkgYl9ubW9kZXM7CS8qIG51bWJlciBvZiBub24tZnVuZGFtZW50YWwgbW9k ZXMgKi8NCisgCWNoYXIJCSBiX253bmQ7CS8qIENvdW50IG9mIHdpbmRvd3Mgb24gYnVmZmVyCSAq Lw0KKy0JY2hhcgkJIGJfZmxhZzsJLyogRmxhZ3MJCQkgKi8NCisrCXNob3J0CQkgYl9mbGFnOwkv KiBGbGFncwkJCSAqLw0KKyAJY2hhcgkJIGJfZm5hbWVbTkZJTEVOXTsgLyogRmlsZSBuYW1lCQkJ ICovDQorIAljaGFyCQkgYl9jd2RbTkZJTEVOXTsgLyogd29ya2luZyBkaXJlY3RvcnkJCSAqLw0K KyAJc3RydWN0IGZpbGVpbmZvCSBiX2ZpOwkJLyogRmlsZSBhdHRyaWJ1dGVzCQkgKi8NCitAQCAt Mjk3LDYgKzI5Nyw3IEBAIHN0cnVjdCBidWZmZXIgew0KKyAjZGVmaW5lIEJGRElSVFkgICAgIDB4 MjAJCS8qIEJ1ZmZlciB3YXMgbW9kaWZpZWQgZWxzZXdoZXJlICovDQorICNkZWZpbmUgQkZJR05E SVJUWSAgMHg0MAkJLyogSWdub3JlIG1vZGlmaWNhdGlvbnMgCSAqLw0KKyAjZGVmaW5lIEJGRElS RURERUwgIDB4ODAJCS8qIERpcmVkIGhhcyBhIGRlbGV0ZWQgJ0QnIGZpbGUJICovDQorKyNkZWZp bmUgQkZTSE9XUkFXICAgMHgxMDAJCS8qIFNob3cgdW5wcmludGFibGUgYXMgb2N0YWwJICovDQor IC8qDQorICAqIFRoaXMgc3RydWN0dXJlIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHJlY2VudCBh Y3Rpb25zIGZvciB0aGUgVW5kbyBjb21tYW5kLg0KKyAgKi8NCitAQCAtNDk3LDYgKzQ5OCw3IEBA IGludAkJIGRpZ2l0X2FyZ3VtZW50KGludCwgaW50KTsNCisgaW50CQkgbmVnYXRpdmVfYXJndW1l bnQoaW50LCBpbnQpOw0KKyBpbnQJCSBzZWxmaW5zZXJ0KGludCwgaW50KTsNCisgaW50CQkgcXVv dGUoaW50LCBpbnQpOw0KKytpbnQJCSBpbnNlcnRfY2hhcihpbnQsIGludCk7DQorIA0KKyAvKiBt YWluLmMgKi8NCisgaW50CQkgY3RybGcoaW50LCBpbnQpOw0KK0BAIC01MTksNiArNTIxLDggQEAg aW50CQkgZm9yd2xpbmUoaW50LCBpbnQpOw0KKyBpbnQJCSBiYWNrbGluZShpbnQsIGludCk7DQor IHZvaWQJCSBzZXRnb2FsKHZvaWQpOw0KKyBpbnQJCSBnZXRnb2FsKHN0cnVjdCBsaW5lICopOw0K KytzaXplX3QJCSBnZXRieXRlb2Zjb2woY29uc3Qgc3RydWN0IGxpbmUgKiwgc2l6ZV90LCBzaXpl X3QpOw0KKytzaXplX3QJCSBnZXRjb2xvZmJ5dGUoY29uc3Qgc3RydWN0IGxpbmUgKiwgc2l6ZV90 LCBzaXplX3QsIHNpemVfdCk7DQorIGludAkJIGZvcndwYWdlKGludCwgaW50KTsNCisgaW50CQkg YmFja3BhZ2UoaW50LCBpbnQpOw0KKyBpbnQJCSBmb3J3MXBhZ2UoaW50LCBpbnQpOw0KK0BAIC02 NjUsNiArNjY5LDcgQEAgaW50CQkgbm90YWJtb2RlKGludCwgaW50KTsNCisgI2VuZGlmCS8qIE5P VEFCICovDQorIGludAkJIG92ZXJ3cml0ZV9tb2RlKGludCwgaW50KTsNCisgaW50CQkgc2V0X2Rl ZmF1bHRfbW9kZShpbnQsaW50KTsNCisraW50CQkgc2hvd19yYXdfbW9kZShpbnQsIGludCk7DQor IA0KKyAjaWZkZWYgUkVHRVgNCisgLyogcmVfc2VhcmNoLmMgWCAqLw0KK2RpZmYgLS1naXQgYS9k aXNwbGF5LmMgYi9kaXNwbGF5LmMNCitpbmRleCA3YWY3MjNjLi4xMDRmODczIDEwMDY0NA0KKy0t LSBhL2Rpc3BsYXkuYw0KKysrKyBiL2Rpc3BsYXkuYw0KK0BAIC03LDcgKzcsNyBAQA0KKyAgKiBy ZWRpc3BsYXkgc3lzdGVtIGtub3dzIGFsbW9zdCBub3RoaW5nIGFib3V0IHRoZSBlZGl0aW5nDQor ICAqIHByb2Nlc3M7IHRoZSBlZGl0aW5nIGZ1bmN0aW9ucyBkbywgaG93ZXZlciwgc2V0IHNvbWUN CisgICogaGludHMgdG8gZWxpbWluYXRlIGEgbG90IG9mIHRoZSBncmluZGluZy4gVGhlcmUgaXMg bW9yZQ0KKy0gKiB0aGF0IGNhbiBiZSBkb25lOyB0aGUgInZ0cHV0YyIgaW50ZXJmYWNlIGlzIGEg cmVhbA0KKysgKiB0aGF0IGNhbiBiZSBkb25lOyB0aGUgInZ0cHV0cyIgaW50ZXJmYWNlIGlzIGEg cmVhbA0KKyAgKiBwaWcuDQorICAqLw0KKyANCitAQCAtMTgsNiArMTgsNyBAQA0KKyAjaW5jbHVk ZSA8c3RkbGliLmg+DQorICNpbmNsdWRlIDxzdHJpbmcuaD4NCisgI2luY2x1ZGUgPHRlcm0uaD4N CisrI2luY2x1ZGUgPHdjaGFyLmg+DQorIA0KKyAjaW5jbHVkZSAiZGVmLmgiDQorICNpbmNsdWRl ICJrYmQuaCINCitAQCAtNTIsMTEgKzUzLDEwIEBAIHN0cnVjdCBzY29yZSB7DQorIH07DQorIA0K KyB2b2lkCXZ0bW92ZShpbnQsIGludCk7DQorLXZvaWQJdnRwdXRjKGludCk7DQorIHZvaWQJdnRw dXRlKGludCk7DQorLWludAl2dHB1dHMoY29uc3QgY2hhciAqKTsNCisraW50CXZ0cHV0cyhjb25z dCBjaGFyICosIHNpemVfdCwgc2l6ZV90KTsNCisgdm9pZAl2dGVlb2wodm9pZCk7DQorLXZvaWQJ dXBkZXh0KGludCwgaW50KTsNCisraW50CXVwZGV4dChpbnQsIGludCk7DQorIHZvaWQJbW9kZWxp bmUoc3RydWN0IG1nd2luICosIGludCk7DQorIHZvaWQJc2V0c2NvcmVzKGludCwgaW50KTsNCisg dm9pZAl0cmFjZWJhY2soaW50LCBpbnQsIGludCwgaW50KTsNCitAQCAtMjE2LDggKzIxNiw4IEBA IHZ0cmVzaXplKGludCBmb3JjZSwgaW50IG5ld3JvdywgaW50IG5ld2NvbCkNCisgCX0NCisgCWlm IChyb3djaGFuZ2VkIHx8IGNvbGNoYW5nZWQgfHwgZmlyc3RfcnVuKSB7DQorIAkJZm9yIChpID0g MDsgaSA8IDIgKiAobmV3cm93IC0gMSk7IGkrKykNCistCQkJVFJZUkVBTExPQyh2aWRlb1tpXS52 X3RleHQsIG5ld2NvbCk7DQorLQkJVFJZUkVBTExPQyhibGFua3Mudl90ZXh0LCBuZXdjb2wpOw0K KysJCQlUUllSRUFMTE9DKHZpZGVvW2ldLnZfdGV4dCwgbmV3Y29sICogTUJfQ1VSX01BWCk7DQor KwkJVFJZUkVBTExPQyhibGFua3Mudl90ZXh0LCBuZXdjb2wgKiBNQl9DVVJfTUFYKTsNCisgCX0N CisgDQorIAlucm93ID0gbmV3cm93Ow0KK0BAIC0yNjAsNyArMjYwLDcgQEAgdnRpbml0KHZvaWQp DQorIAkgKi8NCisgDQorIAlibGFua3Mudl9jb2xvciA9IENURVhUOw0KKy0JZm9yIChpID0gMDsg aSA8IG5jb2w7ICsraSkNCisrCWZvciAoaSA9IDA7IGkgPCBuY29sICogTUJfQ1VSX01BWDsgKytp KQ0KKyAJCWJsYW5rcy52X3RleHRbaV0gPSAnICc7DQorIH0NCisgDQorQEAgLTI4Nyw3ICsyODcs NyBAQCB2dHRpZHkodm9pZCkNCisgICogTW92ZSB0aGUgdmlydHVhbCBjdXJzb3IgdG8gYW4gb3Jp Z2luDQorICAqIDAgc3BvdCBvbiB0aGUgdmlydHVhbCBkaXNwbGF5IHNjcmVlbi4gSSBjb3VsZA0K KyAgKiBzdG9yZSB0aGUgY29sdW1uIGFzIGEgY2hhcmFjdGVyIHBvaW50ZXIgdG8gdGhlIHNwb3QN CistICogb24gdGhlIGxpbmUsIHdoaWNoIHdvdWxkIG1ha2UgInZ0cHV0YyIgYSBsaXR0bGUgYml0 DQorKyAqIG9uIHRoZSBsaW5lLCB3aGljaCB3b3VsZCBtYWtlICJ2dHB1dHMiIGEgbGl0dGxlIGJp dA0KKyAgKiBtb3JlIGVmZmljaWVudC4gTm8gY2hlY2tpbmcgZm9yIGVycm9ycy4NCisgICovDQor IHZvaWQNCitAQCAtMjk4LDgyICsyOTgsNiBAQCB2dG1vdmUoaW50IHJvdywgaW50IGNvbCkNCisg fQ0KKyANCisgLyoNCistICogV3JpdGUgYSBjaGFyYWN0ZXIgdG8gdGhlIHZpcnR1YWwgZGlzcGxh eSwNCistICogZGVhbGluZyB3aXRoIGxvbmcgbGluZXMgYW5kIHRoZSBkaXNwbGF5IG9mIHVucHJp bnRhYmxlDQorLSAqIHRoaW5ncyBsaWtlIGNvbnRyb2wgY2hhcmFjdGVycy4gQWxzbyBleHBhbmQg dGFicyBldmVyeSA4DQorLSAqIGNvbHVtbnMuIFRoaXMgY29kZSBvbmx5IHB1dHMgcHJpbnRpbmcg Y2hhcmFjdGVycyBpbnRvDQorLSAqIHRoZSB2aXJ0dWFsIGRpc3BsYXkgaW1hZ2UuIFNwZWNpYWwg Y2FyZSBtdXN0IGJlIHRha2VuIHdoZW4NCistICogZXhwYW5kaW5nIHRhYnMuIE9uIGEgc2NyZWVu IHdob3NlIHdpZHRoIGlzIG5vdCBhIG11bHRpcGxlDQorLSAqIG9mIDgsIGl0IGlzIHBvc3NpYmxl IGZvciB0aGUgdmlydHVhbCBjdXJzb3IgdG8gaGl0IHRoZQ0KKy0gKiByaWdodCBtYXJnaW4gYmVm b3JlIHRoZSBuZXh0IHRhYiBzdG9wIGlzIHJlYWNoZWQuIFRoaXMNCistICogbWFrZXMgdGhlIHRh YiBjb2RlIGxvb3AgaWYgeW91IGFyZSBub3QgY2FyZWZ1bC4NCistICogVGhyZWUgZ3Vlc3NlcyBo b3cgd2UgZm91bmQgdGhpcy4NCistICovDQorLXZvaWQNCistdnRwdXRjKGludCBjKQ0KKy17DQor LQlzdHJ1Y3QgdmlkZW8JKnZwOw0KKy0NCistCWMgJj0gMHhmZjsNCistDQorLQl2cCA9IHZzY3Jl ZW5bdnRyb3ddOw0KKy0JaWYgKHZ0Y29sID49IG5jb2wpDQorLQkJdnAtPnZfdGV4dFtuY29sIC0g MV0gPSAnJCc7DQorLQllbHNlIGlmIChjID09ICdcdCcNCistI2lmZGVmCU5PVEFCDQorLQkgICAg JiYgIShjdXJicC0+Yl9mbGFnICYgQkZOT1RBQikNCistI2VuZGlmDQorLQkgICAgKSB7DQorLQkJ ZG8gew0KKy0JCQl2dHB1dGMoJyAnKTsNCistCQl9IHdoaWxlICh2dGNvbCA8IG5jb2wgJiYgKHZ0 Y29sICYgMHgwNykgIT0gMCk7DQorLQl9IGVsc2UgaWYgKElTQ1RSTChjKSkgew0KKy0JCXZ0cHV0 YygnXicpOw0KKy0JCXZ0cHV0YyhDQ0hSKGMpKTsNCistCX0gZWxzZSBpZiAoaXNwcmludChjKSkN CistCQl2cC0+dl90ZXh0W3Z0Y29sKytdID0gYzsNCistCWVsc2Ugew0KKy0JCWNoYXIgYmZbNV07 DQorLQ0KKy0JCXNucHJpbnRmKGJmLCBzaXplb2YoYmYpLCAiXFwlbyIsIGMpOw0KKy0JCXZ0cHV0 cyhiZik7DQorLQl9DQorLX0NCistDQorLS8qDQorLSAqIFB1dCBhIGNoYXJhY3RlciB0byB0aGUg dmlydHVhbCBzY3JlZW4gaW4gYW4gZXh0ZW5kZWQgbGluZS4gIElmIHdlIGFyZSBub3QNCistICog eWV0IG9uIGxlZnQgZWRnZSwgZG9uJ3QgcHJpbnQgaXQgeWV0LiAgQ2hlY2sgZm9yIG92ZXJmbG93 IG9uIHRoZSByaWdodA0KKy0gKiBtYXJnaW4uDQorLSAqLw0KKy12b2lkDQorLXZ0cHV0ZShpbnQg YykNCistew0KKy0Jc3RydWN0IHZpZGVvICp2cDsNCistDQorLQljICY9IDB4ZmY7DQorLQ0KKy0J dnAgPSB2c2NyZWVuW3Z0cm93XTsNCistCWlmICh2dGNvbCA+PSBuY29sKQ0KKy0JCXZwLT52X3Rl eHRbbmNvbCAtIDFdID0gJyQnOw0KKy0JZWxzZSBpZiAoYyA9PSAnXHQnDQorLSNpZmRlZglOT1RB Qg0KKy0JICAgICYmICEoY3VyYnAtPmJfZmxhZyAmIEJGTk9UQUIpDQorLSNlbmRpZg0KKy0JICAg ICkgew0KKy0JCWRvIHsNCistCQkJdnRwdXRlKCcgJyk7DQorLQkJfSB3aGlsZSAoKCh2dGNvbCAr IGxib3VuZCkgJiAweDA3KSAhPSAwICYmIHZ0Y29sIDwgbmNvbCk7DQorLQl9IGVsc2UgaWYgKElT Q1RSTChjKSAhPSBGQUxTRSkgew0KKy0JCXZ0cHV0ZSgnXicpOw0KKy0JCXZ0cHV0ZShDQ0hSKGMp KTsNCistCX0gZWxzZSB7DQorLQkJaWYgKHZ0Y29sID49IDApDQorLQkJCXZwLT52X3RleHRbdnRj b2xdID0gYzsNCistCQkrK3Z0Y29sOw0KKy0JfQ0KKy19DQorLQ0KKy0vKg0KKyAgKiBFcmFzZSBm cm9tIHRoZSBlbmQgb2YgdGhlIHNvZnR3YXJlIGN1cnNvciB0byB0aGUgZW5kIG9mIHRoZSBsaW5l IG9uIHdoaWNoDQorICAqIHRoZSBzb2Z0d2FyZSBjdXJzb3IgaXMgbG9jYXRlZC4gVGhlIGRpc3Bs YXkgcm91dGluZXMgd2lsbCBkZWNpZGUgaWYgYQ0KKyAgKiBoYXJkd2FyZSBlcmFzZSB0byBlbmQg b2YgbGluZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIHRvIGRpc3BsYXkgdGhpcy4NCitAQCAtMzg0 LDcgKzMwOCw3IEBAIHZ0ZWVvbCh2b2lkKQ0KKyAJc3RydWN0IHZpZGVvICp2cDsNCisgDQorIAl2 cCA9IHZzY3JlZW5bdnRyb3ddOw0KKy0Jd2hpbGUgKHZ0Y29sIDwgbmNvbCkNCisrCXdoaWxlICh2 dGNvbCA8IG5jb2wgKiBNQl9DVVJfTUFYKQ0KKyAJCXZwLT52X3RleHRbdnRjb2wrK10gPSAnICc7 DQorIH0NCisgDQorQEAgLTQwNCw3ICszMjgsNyBAQCB1cGRhdGUoaW50IG1vZGVsaW5lY29sb3Ip DQorIAlzdHJ1Y3QgbWd3aW4JKndwOw0KKyAJc3RydWN0IHZpZGVvCSp2cDE7DQorIAlzdHJ1Y3Qg dmlkZW8JKnZwMjsNCistCWludAkgYywgaSwgajsNCisrCWludAkgYywgaTsNCisgCWludAkgaGZs YWc7DQorIAlpbnQJIGN1cnJvdywgY3VyY29sOw0KKyAJaW50CSBvZmZzLCBzaXplOw0KK0BAIC00 NzksOCArNDAzLDkgQEAgdXBkYXRlKGludCBtb2RlbGluZWNvbG9yKQ0KKyAJCQl2c2NyZWVuW2ld LT52X2NvbG9yID0gQ1RFWFQ7DQorIAkJCXZzY3JlZW5baV0tPnZfZmxhZyB8PSAoVkZDSEcgfCBW RkhCQUQpOw0KKyAJCQl2dG1vdmUoaSwgMCk7DQorLQkJCWZvciAoaiA9IDA7IGogPCBsbGVuZ3Ro KGxwKTsgKytqKQ0KKy0JCQkJdnRwdXRjKGxnZXRjKGxwLCBqKSk7DQorKwkJCWlmIChsbGVuZ3Ro KGxwKSkgew0KKysJCQkJdnRwdXRzKGxwLT5sX3RleHQsIGxsZW5ndGgobHApLCAwKTsNCisrCQkJ fQ0KKyAJCQl2dGVlb2woKTsNCisgCQl9IGVsc2UgaWYgKCh3cC0+d19yZmxhZyAmIChXRkVESVQg fCBXRkZVTEwpKSAhPSAwKSB7DQorIAkJCWhmbGFnID0gVFJVRTsNCitAQCAtNDg5LDggKzQxNCwx MCBAQCB1cGRhdGUoaW50IG1vZGVsaW5lY29sb3IpDQorIAkJCQl2c2NyZWVuW2ldLT52X2ZsYWcg fD0gKFZGQ0hHIHwgVkZIQkFEKTsNCisgCQkJCXZ0bW92ZShpLCAwKTsNCisgCQkJCWlmIChscCAh PSB3cC0+d19idWZwLT5iX2hlYWRwKSB7DQorLQkJCQkJZm9yIChqID0gMDsgaiA8IGxsZW5ndGgo bHApOyArK2opDQorLQkJCQkJCXZ0cHV0YyhsZ2V0YyhscCwgaikpOw0KKysJCQkJCWlmIChsbGVu Z3RoKGxwKSkgew0KKysJCQkJCQl2dHB1dHMobHAtPmxfdGV4dCwgbGxlbmd0aChscCksDQorKwkJ CQkJCSAgICAwKTsNCisrCQkJCQl9DQorIAkJCQkJbHAgPSBsZm9ydyhscCk7DQorIAkJCQl9DQor IAkJCQl2dGVlb2woKTsNCitAQCAtNTA4LDMyICs0MzUsNTMgQEAgdXBkYXRlKGludCBtb2RlbGlu ZWNvbG9yKQ0KKyAJCSsrY3Vycm93Ow0KKyAJCWxwID0gbGZvcncobHApOw0KKyAJfQ0KKysNCisg CWN1cmNvbCA9IDA7DQorIAlpID0gMDsNCisgCXdoaWxlIChpIDwgY3Vyd3AtPndfZG90bykgew0K Ky0JCWMgPSBsZ2V0YyhscCwgaSsrKTsNCisrCQljaGFyIHRtcFs1XTsNCisrCQljID0gbGdldGMo bHAsIGkpOw0KKyAJCWlmIChjID09ICdcdCcNCisgI2lmZGVmCU5PVEFCDQorIAkJICAgICYmICEo Y3VyYnAtPmJfZmxhZyAmIEJGTk9UQUIpDQorICNlbmRpZg0KKyAJCQkpIHsNCistCQkJY3VyY29s IHw9IDB4MDc7DQorIAkJCWN1cmNvbCsrOw0KKysJCQl3aGlsZSAoKGN1cmNvbCAtIGxib3VuZCkg JiAweDA3KSB7DQorKwkJCQljdXJjb2wrKzsNCisrCQkJfQ0KKyAJCX0gZWxzZSBpZiAoSVNDVFJM KGMpICE9IEZBTFNFKQ0KKyAJCQljdXJjb2wgKz0gMjsNCistCQllbHNlIGlmIChpc3ByaW50KGMp KQ0KKysJCWVsc2UgaWYgKGlzcHJpbnQoYykpIHsNCisgCQkJY3VyY29sKys7DQorLQkJZWxzZSB7 DQorLQkJCWNoYXIgYmZbNV07DQorLQ0KKy0JCQlzbnByaW50ZihiZiwgc2l6ZW9mKGJmKSwgIlxc JW8iLCBjKTsNCistCQkJY3VyY29sICs9IHN0cmxlbihiZik7DQorKwkJfSBlbHNlIGlmICghKGN1 cmJwLT5iX2ZsYWcgJiBCRlNIT1dSQVcpKSB7DQorKwkJCW1ic3RhdGVfdCBtYnMgPSB7IDAgfTsN CisrCQkJd2NoYXJfdCB3YyA9IDA7DQorKwkJCXNpemVfdCBjb25zdW1lZCA9IG1icnRvd2MoJndj LCAmbHAtPmxfdGV4dFtpXSwNCisrCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBsbGVuZ3Ro KGxwKSAtIGksICZtYnMpOw0KKysJCQlpbnQgd2lkdGggPSAtMTsNCisrCQkJaWYgKGNvbnN1bWVk IDwgKHNpemVfdCkgLTIpIHsNCisrCQkJCXdpZHRoID0gd2N3aWR0aCh3Yyk7DQorKwkJCX0gZWxz ZSB7DQorKwkJCQltZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7DQorKwkJCX0NCisrCQkJaWYg KHdpZHRoID49IDApIHsNCisrCQkJCWN1cmNvbCArPSB3aWR0aDsNCisrCQkJCWkgKz0gKGNvbnN1 bWVkIC0gMSk7DQorKwkJCX0gZWxzZSB7DQorKwkJCQlzbnByaW50Zih0bXAsIHNpemVvZih0bXAp LCAiXFwlbyIsIGMpOw0KKysJCQkJY3VyY29sICs9IHN0cmxlbih0bXApOw0KKysJCQl9DQorKwkJ fSBlbHNlIHsNCisrCQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIlxcJW8iLCBjKTsNCisr CQkJY3VyY29sICs9IHN0cmxlbih0bXApOw0KKyAJCX0NCisrCQlpKys7DQorIAl9DQorIAlpZiAo Y3VyY29sID49IG5jb2wgLSAxKSB7CS8qIGV4dGVuZGVkIGxpbmUuICovDQorIAkJLyogZmxhZyB3 ZSBhcmUgZXh0ZW5kZWQgYW5kIGNoYW5nZWQgKi8NCisgCQl2c2NyZWVuW2N1cnJvd10tPnZfZmxh ZyB8PSBWRkVYVCB8IFZGQ0hHOw0KKy0JCXVwZGV4dChjdXJyb3csIGN1cmNvbCk7CS8qIGFuZCBv dXRwdXQgZXh0ZW5kZWQgbGluZSAqLw0KKysJCWN1cmNvbCA9IHVwZGV4dChjdXJyb3csIGN1cmNv bCk7DQorIAl9IGVsc2UNCisgCQlsYm91bmQgPSAwOwkvKiBub3QgZXh0ZW5kZWQgbGluZSAqLw0K KyANCitAQCAtNTUyLDggKzUwMCwxMCBAQCB1cGRhdGUoaW50IG1vZGVsaW5lY29sb3IpDQorIAkJ CQlpZiAoKHdwICE9IGN1cndwKSB8fCAobHAgIT0gd3AtPndfZG90cCkgfHwNCisgCQkJCSAgICAo Y3VyY29sIDwgbmNvbCAtIDEpKSB7DQorIAkJCQkJdnRtb3ZlKGksIDApOw0KKy0JCQkJCWZvciAo aiA9IDA7IGogPCBsbGVuZ3RoKGxwKTsgKytqKQ0KKy0JCQkJCQl2dHB1dGMobGdldGMobHAsIGop KTsNCisrCQkJCQlpZiAobGxlbmd0aChscCkpIHsNCisrCQkJCQkJdnRwdXRzKGxwLT5sX3RleHQs IGxsZW5ndGgobHApLA0KKysJCQkJCQkgICAgMCk7DQorKwkJCQkJfQ0KKyAJCQkJCXZ0ZWVvbCgp Ow0KKyAJCQkJCS8qIHRoaXMgbGluZSBubyBsb25nZXIgaXMgZXh0ZW5kZWQgKi8NCisgCQkJCQl2 c2NyZWVuW2ldLT52X2ZsYWcgJj0gflZGRVhUOw0KK0BAIC02NTUsMzkgKzYwNSw0NCBAQCB1Y29w eShzdHJ1Y3QgdmlkZW8gKnZ2cCwgc3RydWN0IHZpZGVvICpwdnApDQorIAlwdnAtPnZfaGFzaCA9 IHZ2cC0+dl9oYXNoOw0KKyAJcHZwLT52X2Nvc3QgPSB2dnAtPnZfY29zdDsNCisgCXB2cC0+dl9j b2xvciA9IHZ2cC0+dl9jb2xvcjsNCistCWJjb3B5KHZ2cC0+dl90ZXh0LCBwdnAtPnZfdGV4dCwg bmNvbCk7DQorKwliY29weSh2dnAtPnZfdGV4dCwgcHZwLT52X3RleHQsIG5jb2wgKiBNQl9DVVJf TUFYKTsNCisgfQ0KKyANCisgLyoNCistICogdXBkZXh0OiB1cGRhdGUgdGhlIGV4dGVuZGVkIGxp bmUgd2hpY2ggdGhlIGN1cnNvciBpcyBjdXJyZW50bHkgb24gYXQgYQ0KKy0gKiBjb2x1bW4gZ3Jl YXRlciB0aGFuIHRoZSB0ZXJtaW5hbCB3aWR0aC4gVGhlIGxpbmUgd2lsbCBiZSBzY3JvbGxlZCBy aWdodCBvcg0KKy0gKiBsZWZ0IHRvIGxldCB0aGUgdXNlciBzZWUgd2hlcmUgdGhlIGN1cnNvciBp cy4NCisrICogdXBkZXh0OiB1cGRhdGUgdGhlIGV4dGVuZGVkIGxpbmUgd2hpY2ggdGhlIGN1cnNv ciBpcyBjdXJyZW50bHkgb24NCisrICogYXQgYSBjb2x1bW4gZ3JlYXRlciB0aGFuIHRoZSB0ZXJt aW5hbCB3aWR0aC4gVGhlIGxpbmUgd2lsbCBiZQ0KKysgKiBzY3JvbGxlZCByaWdodCBvciBsZWZ0 IHRvIGxldCB0aGUgdXNlciBzZWUgd2hlcmUgdGhlIGN1cnNvcg0KKysgKiBpcy4gY3VyY29sIG1h eSBuZWVkIHRvIGJlIGFkanVzdGVkLCBkZXBlbmRpbmcgb24gaG93IHdpZGUNCisrICogY2hhcmFj dGVycyBhbmQgbGJvdW5kIGludGVyYWN0LCB0aGF0IGFkanVzdGVkIHBvc2l0aW9uIGlzIHJldHVy bmVkLg0KKyAgKi8NCistdm9pZA0KKytpbnQNCisgdXBkZXh0KGludCBjdXJyb3csIGludCBjdXJj b2wpDQorIHsNCistCXN0cnVjdCBsaW5lCSpscDsJCQkvKiBwb2ludGVyIHRvIGN1cnJlbnQgbGlu ZSAqLw0KKy0JaW50CSBqOwkJCS8qIGluZGV4IGludG8gbGluZSAqLw0KKysJc3RydWN0IGxpbmUg KmxwID0gY3Vyd3AtPndfZG90cDsJLyogcG9pbnRlciB0byBjdXJyZW50IGxpbmUgKi8NCisrCXNp emVfdCBzdGFydGJ5dGU7DQorKwlpbnQgYmV0dGVyY29sID0gY3VyY29sOw0KKysJc2l6ZV90IGZ1 bGxleHRlbnQ7DQorIA0KKyAJaWYgKG5jb2wgPCAyKQ0KKy0JCXJldHVybjsNCisrCQlyZXR1cm4g Y3VyY29sOw0KKyANCisgCS8qDQorLQkgKiBjYWxjdWxhdGUgd2hhdCBjb2x1bW4gdGhlIGxlZnQg Ym91bmQgc2hvdWxkIGJlDQorLQkgKiAoZm9yY2UgY3Vyc29yIGludG8gbWlkZGxlIGhhbGYgb2Yg c2NyZWVuKQ0KKysJICogY2FsY3VsYXRlIHdoYXQgY29sdW1uIHRoZSBsZWZ0IGJvdW5kIHNob3Vs ZCBiZSAoZm9yY2UNCisrCSAqIGN1cnNvciBpbnRvIG1pZGRsZSBoYWxmIG9mIHNjcmVlbikuIEVu c3VyaW5nIHRoYXQgaXQgaXMgYXQNCisrCSAqIGEgdGFic3RvcCBhbGxvd3MgdXBkYXRlKCkgdG8g Y2FsY3VsYXRlIGN1cmNvbCB3aXRob3V0DQorKwkgKiB3b25kZXJpbmcgaG93IHRhYnN0b3BzIGFy ZSBjYWxjdWxhdGVkIGJlZm9yZSB0aGUgZmlyc3QgJyQnLg0KKyAJICovDQorIAlsYm91bmQgPSBj dXJjb2wgLSAoY3VyY29sICUgKG5jb2wgPj4gMSkpIC0gKG5jb2wgPj4gMik7DQorLQ0KKy0JLyoN CistCSAqIHNjYW4gdGhyb3VnaCB0aGUgbGluZSBvdXRwdXRpbmcgY2hhcmFjdGVycyB0byB0aGUg dmlydHVhbCBzY3JlZW4NCistCSAqIG9uY2Ugd2UgcmVhY2ggdGhlIGxlZnQgZWRnZQ0KKy0JICov DQorLQl2dG1vdmUoY3Vycm93LCAtbGJvdW5kKTsJCS8qIHN0YXJ0IHNjYW5uaW5nIG9mZnNjcmVl biAqLw0KKy0JbHAgPSBjdXJ3cC0+d19kb3RwOwkJCS8qIGxpbmUgdG8gb3V0cHV0ICovDQorLQlm b3IgKGogPSAwOyBqIDwgbGxlbmd0aChscCk7ICsraikJLyogdW50aWwgdGhlIGVuZC1vZi1saW5l ICovDQorLQkJdnRwdXRlKGxnZXRjKGxwLCBqKSk7DQorLQl2dGVlb2woKTsJCQkJLyogdHJ1bmNh dGUgdGhlIHZpcnR1YWwgbGluZSAqLw0KKy0JdnNjcmVlbltjdXJyb3ddLT52X3RleHRbMF0gPSAn JCc7CS8qIGFuZCBwdXQgYSAnJCcgaW4gY29sdW1uIDEgKi8NCisrCWxib3VuZCA9IChsYm91bmQg fCAweDA3KSArIDE7DQorKwl2c2NyZWVuW2N1cnJvd10tPnZfdGV4dFswXSA9ICckJzsNCisrCXZ0 bW92ZShjdXJyb3csIDEpOw0KKysJc3RhcnRieXRlID0gZ2V0Ynl0ZW9mY29sKGxwLCAwLCBsYm91 bmQgKyAxKTsNCisrCWZ1bGxleHRlbnQgPSBnZXRieXRlb2Zjb2wobHAsIHN0YXJ0Ynl0ZSwgbmNv bCArIDEpOw0KKysJdnRwdXRzKGxwLT5sX3RleHQgKyBzdGFydGJ5dGUsIGZ1bGxleHRlbnQgLSBz dGFydGJ5dGUsIDEpOw0KKysJdnRlZW9sKCk7DQorKw0KKysJYmV0dGVyY29sID0gbGJvdW5kICsg Z2V0Y29sb2ZieXRlKGxwLCBzdGFydGJ5dGUsIDEsIGN1cndwLT53X2RvdG8pOw0KKysJcmV0dXJu IChiZXR0ZXJjb2wpOw0KKyB9DQorIA0KKyAvKg0KK0BAIC03MDIsMTIgKzY1NywzNSBAQCB1cGRl eHQoaW50IGN1cnJvdywgaW50IGN1cmNvbCkNCisgdm9pZA0KKyB1bGluZShpbnQgcm93LCBzdHJ1 Y3QgdmlkZW8gKnZ2cCwgc3RydWN0IHZpZGVvICpwdnApDQorIHsNCistCWNoYXIgICpjcDE7DQor LQljaGFyICAqY3AyOw0KKy0JY2hhciAgKmNwMzsNCistCWNoYXIgICpjcDQ7DQorLQljaGFyICAq Y3A1Ow0KKysJY2hhciAgKmNwMTsgLyogUG9pbnRlciB0byB0aGUgc3RhcnQgb2YgZGlydHkgcmVn aW9uICovDQorKwljaGFyICAqY3AyOyAvKiBwdnAncyBjb3VudGVycGFydCBmb3IgY3AxICovDQor KwljaGFyICAqY3AzOyAvKiBQb2ludGVyIHRvIGVuZCBvZiBkaXJ0eSByZWdpb24gKi8NCisrCWNo YXIgICpjcDQ7IC8qIHB2cCdzIGNvdW50ZXJwYXJ0IGZvciBjcDMgKi8NCisrCWNoYXIgICpjcDU7 IC8qIEFmdGVyIHRoaXMsIHdpdGhpbiBkaXJ0eSByZWdpb24sIGFsbCBpcyAnICcgKi8NCisrCWNo YXIgICptYmNvdW50ZXI7DQorIAlpbnQgICAgbmJmbGFnOw0KKysJaW50ICAgIHN0YXJ0Y29sOyAv KiBvbnNjcmVlbiBjb2x1bW4gbWF0Y2hpbmcgY3AxICovDQorKwljaGFyICAqbGFzdGJ5dGU7IC8q IGJ5dGUgd2hpY2ggaGFuZGxlcyBsYXN0IG9uc2NyZWVuIGNvbHVtbiAgKi8NCisrCWludCAgICBz ZWVuY29scyA9IDA7DQorKwltYnN0YXRlX3QgbWJzID0geyAwIH07DQorKwl3Y2hhcl90IHdjID0g MDsNCisrDQorKwlsYXN0Ynl0ZSA9IHZ2cC0+dl90ZXh0Ow0KKysJd2hpbGUgKHNlZW5jb2xzIDwg bmNvbCAmJiAqbGFzdGJ5dGUpIHsNCisrCQlzaXplX3QgY29uc3VtZWQgPSBtYnJ0b3djKCZ3Yywg bGFzdGJ5dGUsDQorKwkJICAgICh2dnAtPnZfdGV4dCArIG5jb2wgKiBNQl9DVVJfTUFYIC0gbGFz dGJ5dGUpLCAmbWJzKTsNCisrCQlpZiAoY29uc3VtZWQgPCAoc2l6ZV90KSAtMikgew0KKysJCQls YXN0Ynl0ZSArPSBjb25zdW1lZDsNCisrCQkJc2VlbmNvbHMgKz0gd2N3aWR0aCh3Yyk7DQorKwkJ fSBlbHNlIHsNCisrCQkJbGFzdGJ5dGUrKzsNCisrCQkJc2VlbmNvbHMrKzsNCisrCQkJbWVtc2V0 KCZtYnMsIDAsIHNpemVvZiBtYnMpOw0KKysJCX0NCisrCX0NCisrCWlmIChsYXN0Ynl0ZSAtIHZ2 cC0+dl90ZXh0IDwgbmNvbCkgew0KKysJCWxhc3RieXRlID0gJnZ2cC0+dl90ZXh0W25jb2xdOw0K KysJfQ0KKyANCisgCWlmICh2dnAtPnZfY29sb3IgIT0gcHZwLT52X2NvbG9yKSB7CS8qIFdyb25n IGNvbG9yLCBkbyBhCSAqLw0KKyAJCXR0bW92ZShyb3csIDApOwkJCS8qIGZ1bGwgcmVkcmF3LgkJ ICovDQorQEAgLTcyMywxMSArNzAxLDEyIEBAIHVsaW5lKGludCByb3csIHN0cnVjdCB2aWRlbyAq dnZwLCBzdHJ1Y3QgdmlkZW8gKnB2cCkNCisgCQkgKiBwdXR0aW5nIHRoZSBpbnZpc2libGUgZ2xp dGNoIGNoYXJhY3RlciBvbiB0aGUgbmV4dCBsaW5lLg0KKyAJCSAqIChIYXplbHRpbmUgZXhlY3V0 aXZlIDgwIG1vZGVsIDMwKQ0KKyAJCSAqLw0KKy0JCWNwMiA9ICZ2dnAtPnZfdGV4dFtuY29sIC0g KG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggPj0gMCA/DQorLQkJICAgIChtYWdpY19jb29raWVfZ2xpdGNo ICE9IDAgPyBtYWdpY19jb29raWVfZ2xpdGNoIDogMSkgOiAwKV07DQorKwkJY3AyID0gbGFzdGJ5 dGUgLQ0KKysJCSAgICAobWFnaWNfY29va2llX2dsaXRjaCA+PSAwID8gKG1hZ2ljX2Nvb2tpZV9n bGl0Y2ggIT0gMCA/DQorKwkJICAgIG1hZ2ljX2Nvb2tpZV9nbGl0Y2ggOiAxKSA6IDApOw0KKyAj ZWxzZQ0KKyAJCWNwMSA9ICZ2dnAtPnZfdGV4dFswXTsNCistCQljcDIgPSAmdnZwLT52X3RleHRb bmNvbF07DQorKwkJY3AyID0gbGFzdGJ5dGU7DQorICNlbmRpZg0KKyAJCXdoaWxlIChjcDEgIT0g Y3AyKSB7DQorIAkJCXR0cHV0YygqY3AxKyspOw0KK0BAIC03MzgsMjEgKzcxNywzMSBAQCB1bGlu ZShpbnQgcm93LCBzdHJ1Y3QgdmlkZW8gKnZ2cCwgc3RydWN0IHZpZGVvICpwdnApDQorIAl9DQor IAljcDEgPSAmdnZwLT52X3RleHRbMF07CQkvKiBDb21wdXRlIGxlZnQgbWF0Y2guCSAqLw0KKyAJ Y3AyID0gJnB2cC0+dl90ZXh0WzBdOw0KKy0Jd2hpbGUgKGNwMSAhPSAmdnZwLT52X3RleHRbbmNv bF0gJiYgY3AxWzBdID09IGNwMlswXSkgew0KKysJd2hpbGUgKGNwMSAhPSBsYXN0Ynl0ZSAmJiBj cDFbMF0gPT0gY3AyWzBdKSB7DQorIAkJKytjcDE7DQorIAkJKytjcDI7DQorIAl9DQorLQlpZiAo Y3AxID09ICZ2dnAtPnZfdGV4dFtuY29sXSkJLyogQWxsIGVxdWFsLgkJICovDQorKwlpZiAoY3Ax ID09IGxhc3RieXRlKQkvKiBBbGwgZXF1YWwuCQkgKi8NCisgCQlyZXR1cm47DQorKwl3aGlsZSAo Y3AxICE9IHZ2cC0+dl90ZXh0ICYmICFpc3ByaW50KCpjcDEpICYmDQorKwkgICAgICAgbWJydG93 Yygmd2MsIGNwMSwgKGxhc3RieXRlIC0gY3AxKSwgJm1icykgPj0gKHNpemVfdCkgLTIpIHsNCisr CQktLWNwMTsNCisrCQktLWNwMjsNCisrCX0NCisgCW5iZmxhZyA9IEZBTFNFOw0KKy0JY3AzID0g JnZ2cC0+dl90ZXh0W25jb2xdOwkvKiBDb21wdXRlIHJpZ2h0IG1hdGNoLiAgKi8NCistCWNwNCA9 ICZwdnAtPnZfdGV4dFtuY29sXTsNCisrCWNwMyA9IGxhc3RieXRlOwkvKiBDb21wdXRlIHJpZ2h0 IG1hdGNoLiAgKi8NCisrCWNwNCA9ICZwdnAtPnZfdGV4dFtsYXN0Ynl0ZSAtIHZ2cC0+dl90ZXh0 XTsNCisgCXdoaWxlIChjcDNbLTFdID09IGNwNFstMV0pIHsNCisgCQktLWNwMzsNCisgCQktLWNw NDsNCisgCQlpZiAoY3AzWzBdICE9ICcgJykJLyogTm90ZSBub24tYmxhbmtzIGluCSAqLw0KKyAJ CQluYmZsYWcgPSBUUlVFOwkvKiB0aGUgcmlnaHQgbWF0Y2guCSAqLw0KKyAJfQ0KKysJd2hpbGUg KGNwMyAhPSBsYXN0Ynl0ZSAmJiAhaXNwcmludCgqY3AzKSAmJg0KKysJICAgICAgICBtYnJ0b3dj KCZ3YywgY3AzLCAobGFzdGJ5dGUgLSBjcDMpLCAmbWJzKSA+PSAoc2l6ZV90KSAtMikgew0KKysJ CSsrY3AzOw0KKysJCSsrY3A0Ow0KKysJfQ0KKyAJY3A1ID0gY3AzOwkJCS8qIElzIGVyYXNlIGdv b2Q/CSAqLw0KKyAJaWYgKG5iZmxhZyA9PSBGQUxTRSAmJiB2dnAtPnZfY29sb3IgPT0gQ1RFWFQp IHsNCisgCQl3aGlsZSAoY3A1ICE9IGNwMSAmJiBjcDVbLTFdID09ICcgJykNCitAQCAtNzYyLDEz ICs3NTEsMjcgQEAgdWxpbmUoaW50IHJvdywgc3RydWN0IHZpZGVvICp2dnAsIHN0cnVjdCB2aWRl byAqcHZwKQ0KKyAJCQljcDUgPSBjcDM7DQorIAl9DQorIAkvKiBBbGN5b24gaGFjayAqLw0KKy0J dHRtb3ZlKHJvdywgKGludCkgKGNwMSAtICZ2dnAtPnZfdGV4dFswXSkpOw0KKysJc3RhcnRjb2wg PSAwOw0KKysJbWJjb3VudGVyID0gdnZwLT52X3RleHQ7DQorKwl3aGlsZSAoKGNwMSAtIG1iY291 bnRlcikgPiAwKSB7DQorKwkJc2l6ZV90IGNvbnN1bWVkID0gbWJydG93Yygmd2MsIG1iY291bnRl ciwgKGNwMSAtIG1iY291bnRlciksDQorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAmbWJz KTsNCisrCQlpZiAoY29uc3VtZWQgPCAoc2l6ZV90KSAtMikgew0KKysJCQltYmNvdW50ZXIgKz0g Y29uc3VtZWQ7DQorKwkJCXN0YXJ0Y29sICs9IHdjd2lkdGgod2MpOw0KKysJCX0gZWxzZSB7DQor KwkJCW1iY291bnRlcisrOw0KKysJCQlzdGFydGNvbCsrOw0KKysJCQltZW1zZXQoJm1icywgMCwg c2l6ZW9mIG1icyk7DQorKwkJfQ0KKysJfQ0KKysJdHRtb3ZlKHJvdywgc3RhcnRjb2wpOw0KKyAj aWZkZWYJU1RBTkRPVVRfR0xJVENIDQorIAlpZiAodnZwLT52X2NvbG9yICE9IENURVhUICYmIG1h Z2ljX2Nvb2tpZV9nbGl0Y2ggPiAwKSB7DQorIAkJaWYgKGNwMSA8ICZ2dnAtPnZfdGV4dFttYWdp Y19jb29raWVfZ2xpdGNoXSkNCisgCQkJY3AxID0gJnZ2cC0+dl90ZXh0W21hZ2ljX2Nvb2tpZV9n bGl0Y2hdOw0KKy0JCWlmIChjcDUgPiAmdnZwLT52X3RleHRbbmNvbCAtIG1hZ2ljX2Nvb2tpZV9n bGl0Y2hdKQ0KKy0JCQljcDUgPSAmdnZwLT52X3RleHRbbmNvbCAtIG1hZ2ljX2Nvb2tpZV9nbGl0 Y2hdOw0KKysJCWlmIChjcDUgPiBsYXN0Ynl0ZSAtIG1hZ2ljX2Nvb2tpZV9nbGl0Y2gpDQorKwkJ CWNwNSA9IGxhc3RieXRlIC0gbWFnaWNfY29va2llX2dsaXRjaDsNCisgCX0gZWxzZSBpZiAobWFn aWNfY29va2llX2dsaXRjaCA8IDApDQorICNlbmRpZg0KKyAJCXR0Y29sb3IodnZwLT52X2NvbG9y KTsNCitAQCAtODAxLDQ2ICs4MDQsMzkgQEAgbW9kZWxpbmUoc3RydWN0IG1nd2luICp3cCwgaW50 IG1vZGVsaW5lY29sb3IpDQorIAl2c2NyZWVuW25dLT52X2ZsYWcgfD0gKFZGQ0hHIHwgVkZIQkFE KTsJLyogUmVjb21wdXRlLCBkaXNwbGF5LgkgKi8NCisgCXZ0bW92ZShuLCAwKTsJCQkJLyogU2Vl ayB0byByaWdodCBsaW5lLgkgKi8NCisgCWJwID0gd3AtPndfYnVmcDsNCistCXZ0cHV0YygnLScp Ow0KKy0JdnRwdXRjKCctJyk7DQorKwluID0gdnRwdXRzKCItLSIsIDAsIDApOw0KKyAJaWYgKChi cC0+Yl9mbGFnICYgQkZSRUFET05MWSkgIT0gMCkgew0KKy0JCXZ0cHV0YygnJScpOw0KKysJCW4g Kz0gdnRwdXRzKCIlIiwgMCwgbik7DQorIAkJaWYgKChicC0+Yl9mbGFnICYgQkZDSEcpICE9IDAp DQorLQkJCXZ0cHV0YygnKicpOw0KKysJCQluICs9IHZ0cHV0cygiKiIsIDAsIG4pOw0KKyAJCWVs c2UNCistCQkJdnRwdXRjKCclJyk7DQorKwkJCW4gKz0gdnRwdXRzKCIlIiwgMCwgbik7DQorIAl9 IGVsc2UgaWYgKChicC0+Yl9mbGFnICYgQkZDSEcpICE9IDApIHsJLyogIioiIGlmIGNoYW5nZWQu CSAqLw0KKy0JCXZ0cHV0YygnKicpOw0KKy0JCXZ0cHV0YygnKicpOw0KKysJCW4gKz0gdnRwdXRz KCIqKiIsIDAsIG4pOw0KKyAJfSBlbHNlIHsNCistCQl2dHB1dGMoJy0nKTsNCistCQl2dHB1dGMo Jy0nKTsNCisrCQluICs9IHZ0cHV0cygiLS0iLCAwLCBuKTsNCisgCX0NCistCXZ0cHV0YygnLScp Ow0KKysJbiArPSB2dHB1dHMoIi0iLCAwLCBuKTsNCisgCW4gPSA1Ow0KKy0JbiArPSB2dHB1dHMo Ik1nOiAiKTsNCisrCW4gKz0gdnRwdXRzKCJNZzogIiwgMCwgbik7DQorIAlpZiAoYnAtPmJfYm5h bWVbMF0gIT0gJ1wwJykNCistCQluICs9IHZ0cHV0cygmKGJwLT5iX2JuYW1lWzBdKSk7DQorKwkJ biArPSB2dHB1dHMoJihicC0+Yl9ibmFtZVswXSksIDAsIG4pOw0KKyAJd2hpbGUgKG4gPCA0Mikg ewkJCS8qIFBhZCBvdXQgd2l0aCBibGFua3MuCSAqLw0KKy0JCXZ0cHV0YygnICcpOw0KKy0JCSsr bjsNCisrCQluICs9IHZ0cHV0cygiICIsIDAsIG4pOw0KKyAJfQ0KKy0JdnRwdXRjKCcoJyk7DQor LQkrK247DQorKwluICs9IHZ0cHV0cygiKCIsIDAsIG4pOw0KKyAJZm9yIChtZCA9IDA7IDsgKSB7 DQorLQkJbiArPSB2dHB1dHMoYnAtPmJfbW9kZXNbbWRdLT5wX25hbWUpOw0KKysJCW4gKz0gdnRw dXRzKGJwLT5iX21vZGVzW21kXS0+cF9uYW1lLCAwLCBuKTsNCisgCQlpZiAoKyttZCA+IGJwLT5i X25tb2RlcykNCisgCQkJYnJlYWs7DQorLQkJdnRwdXRjKCctJyk7DQorLQkJKytuOw0KKysJCW4g Kz0gdnRwdXRzKCItIiwgMCwgbik7DQorIAl9DQorIAkvKiBYWFggVGhlc2Ugc2hvdWxkIGV2ZW50 dWFsbHkgbW92ZSB0byBhIHJlYWwgbW9kZSAqLw0KKyAJaWYgKG1hY3JvZGVmID09IFRSVUUpDQor LQkJbiArPSB2dHB1dHMoIi1kZWYiKTsNCisrCQluICs9IHZ0cHV0cygiLWRlZiIsIDAsIG4pOw0K KyAJaWYgKGdsb2JhbHdkID09IFRSVUUpDQorLQkJbiArPSB2dHB1dHMoIi1nd2QiKTsNCistCXZ0 cHV0YygnKScpOw0KKy0JKytuOw0KKysJCW4gKz0gdnRwdXRzKCItZ3dkIiwgMCwgbik7DQorKwlu ICs9IHZ0cHV0cygiKSIsIDAsIG4pOw0KKyANCisgCWlmIChsaW5lbm9zICYmIGNvbG5vcykNCisg CQlsZW4gPSBzbnByaW50ZihzbCwgc2l6ZW9mKHNsKSwgIi0tTCVkLS1DJWQiLCB3cC0+d19kb3Rs aW5lLA0KK0BAIC04NTAsMjcgKzg0NiwxMzIgQEAgbW9kZWxpbmUoc3RydWN0IG1nd2luICp3cCwg aW50IG1vZGVsaW5lY29sb3IpDQorIAllbHNlIGlmIChjb2xub3MpDQorIAkJbGVuID0gc25wcmlu dGYoc2wsIHNpemVvZihzbCksICItLUMlZCIsIGdldGNvbHBvcyh3cCkpOw0KKyAJaWYgKChsaW5l bm9zIHx8IGNvbG5vcykgJiYgbGVuIDwgc2l6ZW9mKHNsKSAmJiBsZW4gIT0gLTEpDQorLQkJbiAr PSB2dHB1dHMoc2wpOw0KKysJCW4gKz0gdnRwdXRzKHNsLCAwLCBuKTsNCisgDQorIAl3aGlsZSAo biA8IG5jb2wpIHsJCQkvKiBQYWQgb3V0LgkJICovDQorLQkJdnRwdXRjKCctJyk7DQorLQkJKytu Ow0KKysJCW4gKz0gdnRwdXRzKCItIiwgMCwgbik7DQorIAl9DQorIH0NCisgDQorIC8qDQorLSAq IE91dHB1dCBhIHN0cmluZyB0byB0aGUgbW9kZSBsaW5lLCByZXBvcnQgaG93IGxvbmcgaXQgd2Fz Lg0KKysgKiBPdXRwdXQgYSBzdHJpbmcgdG8gdGhlIG1vZGUgbGluZSwgcmVwb3J0IGhvdyBsb25n IGl0IHdhcywNCisrICogZGVhbGluZyB3aXRoIGxvbmcgbGluZXMgYW5kIHRoZSBkaXNwbGF5IG9m IHVucHJpbnRhYmxlDQorKyAqIHRoaW5ncyBsaWtlIGNvbnRyb2wgY2hhcmFjdGVycy4gQWxzbyBl eHBhbmQgdGFicyBldmVyeSA4DQorKyAqIGNvbHVtbnMuIFRoaXMgY29kZSBvbmx5IHB1dHMgcHJp bnRpbmcgY2hhcmFjdGVycyBpbnRvDQorKyAqIHRoZSB2aXJ0dWFsIGRpc3BsYXkgaW1hZ2UuIFNw ZWNpYWwgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4NCisrICogZXhwYW5kaW5nIHRhYnMuIE9uIGEg c2NyZWVuIHdob3NlIHdpZHRoIGlzIG5vdCBhIG11bHRpcGxlDQorKyAqIG9mIDgsIGl0IGlzIHBv c3NpYmxlIGZvciB0aGUgdmlydHVhbCBjdXJzb3IgdG8gaGl0IHRoZQ0KKysgKiByaWdodCBtYXJn aW4gYmVmb3JlIHRoZSBuZXh0IHRhYiBzdG9wIGlzIHJlYWNoZWQuIFRoaXMNCisrICogbWFrZXMg dGhlIHRhYiBjb2RlIGxvb3AgaWYgeW91IGFyZSBub3QgY2FyZWZ1bC4NCisrICogVGhyZWUgZ3Vl c3NlcyBob3cgd2UgZm91bmQgdGhpcy4NCisgICovDQorIGludA0KKy12dHB1dHMoY29uc3QgY2hh ciAqcykNCisrdnRwdXRzKGNvbnN0IGNoYXIgKnMsIGNvbnN0IHNpemVfdCBtYXhfYnl0ZXMsIGNv bnN0IHNpemVfdCBpbml0aWFsX2NvbCkNCisgew0KKy0JaW50IG4gPSAwOw0KKysJY29uc3QgdW5z aWduZWQgY2hhciAqdXMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzOw0KKysJc3RydWN0IHZp ZGVvICp2cCA9IHZzY3JlZW5bdnRyb3ddOw0KKysJc2l6ZV90IGJ5dGVzX2hhbmRsZWQgPSAwOw0K KysJc2l6ZV90IGxhc3RfZnVsbF9ieXRlX3N0YXJ0ID0gdnRjb2w7DQorKwlzaXplX3Qgc3BhY2Vf cHJpbnRlZCA9IDA7DQorKw0KKysJaWYgKCFzKSB7DQorKwkJcmV0dXJuICgwKTsNCisrCX0NCisr DQorKwl3aGlsZSAoKnVzICYmICghbWF4X2J5dGVzIHx8IGJ5dGVzX2hhbmRsZWQgPCBtYXhfYnl0 ZXMpKSB7DQorKwkJaWYgKHNwYWNlX3ByaW50ZWQgKyBpbml0aWFsX2NvbCA+PSBuY29sKSB7DQor KwkJCWJyZWFrOw0KKysJCX0gZWxzZSBpZiAoKnVzID09ICdcdCcNCisrI2lmZGVmCU5PVEFCDQor KwkJICAgICAgICAgICAmJiAhKGN1cmJwLT5iX2ZsYWcgJiBCRk5PVEFCKQ0KKysjZW5kaWYNCisr CQkgICAgICAgICAgICkgew0KKysJCQlsYXN0X2Z1bGxfYnl0ZV9zdGFydCA9IHZ0Y29sOw0KKysJ CQlkbyB7DQorKwkJCQlpZiAodnRjb2wgPj0gMCkgew0KKysJCQkJCWxhc3RfZnVsbF9ieXRlX3N0 YXJ0ID0gdnRjb2w7DQorKwkJCQkJdnAtPnZfdGV4dFt2dGNvbF0gPSAnICc7DQorKwkJCQl9DQor KwkJCQl2dGNvbCsrOw0KKysJCQkJc3BhY2VfcHJpbnRlZCsrOw0KKysJCQl9IHdoaWxlIChzcGFj ZV9wcmludGVkICsgaW5pdGlhbF9jb2wgPCBuY29sICYmDQorKwkJCSAgICAgICAgICgoc3BhY2Vf cHJpbnRlZCArIGluaXRpYWxfY29sKSAmIDB4MDcpKTsNCisrCQkJdXMrKzsNCisrCQkJYnl0ZXNf aGFuZGxlZCsrOw0KKysJCX0gZWxzZSBpZiAoSVNDVFJMKCp1cykpIHsNCisrCQkJbGFzdF9mdWxs X2J5dGVfc3RhcnQgPSB2dGNvbDsNCisrCQkJaWYgKHZ0Y29sID49IDApIHsNCisrCQkJCXZwLT52 X3RleHRbdnRjb2xdID0gJ14nOw0KKysJCQl9DQorKwkJCXZ0Y29sKys7DQorKwkJCWlmICh2dGNv bCA+PSAwKSB7DQorKwkJCQl2cC0+dl90ZXh0W3Z0Y29sXSA9IENDSFIoKnVzKTsNCisrCQkJfQ0K KysJCQl2dGNvbCsrOw0KKysJCQlieXRlc19oYW5kbGVkKys7DQorKwkJCXNwYWNlX3ByaW50ZWQg Kz0gMjsNCisrCQkJdXMrKzsNCisrCQl9IGVsc2UgaWYgKGlzcHJpbnQoKnVzKSkgew0KKysJCQls YXN0X2Z1bGxfYnl0ZV9zdGFydCA9IHZ0Y29sOw0KKysJCQlpZiAodnRjb2wgPj0gMCkgew0KKysJ CQkJdnAtPnZfdGV4dFt2dGNvbF0gPSAqdXMrKzsNCisrCQkJfQ0KKysJCQl2dGNvbCsrOw0KKysJ CQlieXRlc19oYW5kbGVkKys7DQorKwkJCXNwYWNlX3ByaW50ZWQrKzsNCisrCQl9IGVsc2UgaWYg KCEoY3VyYnAtPmJfZmxhZyAmIEJGU0hPV1JBVykpIHsNCisrCQkJbWJzdGF0ZV90IG1icyA9IHsg MCB9Ow0KKysJCQl3Y2hhcl90IHdjID0gMDsNCisrCQkJc2l6ZV90IGNvbnN1bWFibGUgPSBtYXhf Ynl0ZXMgPw0KKysJCQkgICAgICAgIChtYXhfYnl0ZXMgLSBieXRlc19oYW5kbGVkKSA6IC0xOw0K KysJCQlzaXplX3QgY29uc3VtZWQgPSBtYnJ0b3djKCZ3YywgKGNvbnN0IGNoYXIgKil1cywNCisr CQkJICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1hYmxlLCAmbWJzKTsNCisrCQkJaW50 IHdpZHRoID0gLTE7DQorKwkJCWxhc3RfZnVsbF9ieXRlX3N0YXJ0ID0gdnRjb2w7DQorKwkJCWlm IChjb25zdW1lZCA8IChzaXplX3QpIC0yKSB7DQorKwkJCQl3aWR0aCA9IHdjd2lkdGgod2MpOw0K KysJCQl9DQorKwkJCWlmICh3aWR0aCA+PSAwKSB7DQorKwkJCQlieXRlc19oYW5kbGVkICs9IGNv bnN1bWVkOw0KKysJCQkJc3BhY2VfcHJpbnRlZCArPSB3aWR0aDsNCisrCQkJCWRvIHsNCisrCQkJ CQlpZiAodnRjb2wgPj0gMCkgew0KKysJCQkJCQl2cC0+dl90ZXh0W3Z0Y29sXSA9ICp1cysrOw0K KysJCQkJCX0NCisrCQkJCQl2dGNvbCsrOw0KKysJCQkJfSB3aGlsZSAoLS1jb25zdW1lZCk7DQor KwkJCX0gZWxzZSB7DQorKwkJCQljaGFyIGJmWzVdOw0KKysJCQkJc25wcmludGYoYmYsIHNpemVv ZihiZiksICJcXCVvIiwgKnVzKTsNCisrCQkJCWJ5dGVzX2hhbmRsZWQrKzsNCisrCQkJCXNwYWNl X3ByaW50ZWQgKz0gdnRwdXRzKGJmLCAwLA0KKysJCQkJICAgIHNwYWNlX3ByaW50ZWQgKyBpbml0 aWFsX2NvbCk7DQorKwkJCQl1cysrOw0KKysJCQl9DQorKwkJfSBlbHNlIHsNCisrCQkJY2hhciBi Zls1XTsNCisrCQkJbGFzdF9mdWxsX2J5dGVfc3RhcnQgPSB2dGNvbDsNCisrCQkJc25wcmludGYo YmYsIHNpemVvZihiZiksICJcXCVvIiwgKnVzKTsNCisrCQkJYnl0ZXNfaGFuZGxlZCsrOw0KKysJ CQlzcGFjZV9wcmludGVkICs9IHZ0cHV0cyhiZiwgMCwNCisrCQkJICAgIHNwYWNlX3ByaW50ZWQg KyBpbml0aWFsX2NvbCk7DQorKwkJCXVzKys7DQorKwkJfQ0KKysJfQ0KKyANCistCXdoaWxlICgq cyAhPSAnXDAnKSB7DQorLQkJdnRwdXRjKCpzKyspOw0KKy0JCSsrbjsNCisrCWlmICgoc3BhY2Vf cHJpbnRlZCArIGluaXRpYWxfY29sID4gbmNvbCkgfHwNCisrCSAgICAoc3BhY2VfcHJpbnRlZCAr IGluaXRpYWxfY29sID09IG5jb2wgJiYNCisrCSAgICAoKnVzICYmICghbWF4X2J5dGVzIHx8IGJ5 dGVzX2hhbmRsZWQgPCBtYXhfYnl0ZXMpKSkpIHsNCisrCQl2cC0+dl90ZXh0W2xhc3RfZnVsbF9i eXRlX3N0YXJ0XSA9ICckJzsNCisrCQl3aGlsZSAoKytsYXN0X2Z1bGxfYnl0ZV9zdGFydCA8PSB2 dGNvbCkgew0KKysJCQl2cC0+dl90ZXh0W2xhc3RfZnVsbF9ieXRlX3N0YXJ0XSA9ICcgJzsNCisr CQl9DQorKwkJYnl0ZXNfaGFuZGxlZCsrOw0KKysJCXNwYWNlX3ByaW50ZWQrKzsNCisrCQl1cysr Ow0KKyAJfQ0KKy0JcmV0dXJuIChuKTsNCisrDQorKwlyZXR1cm4gKHNwYWNlX3ByaW50ZWQpOw0K KyB9DQorIA0KKyAvKg0KK0BAIC04ODgsMTEgKzk4OSwxMSBAQCBoYXNoKHN0cnVjdCB2aWRlbyAq dnApDQorIAljaGFyICAgKnM7DQorIA0KKyAJaWYgKCh2cC0+dl9mbGFnICYgVkZIQkFEKSAhPSAw KSB7CS8qIEhhc2ggYmFkLgkJICovDQorLQkJcyA9ICZ2cC0+dl90ZXh0W25jb2wgLSAxXTsNCist CQlmb3IgKGkgPSBuY29sOyBpICE9IDA7IC0taSwgLS1zKQ0KKysJCXMgPSAmdnAtPnZfdGV4dFtu Y29sICogTUJfQ1VSX01BWCAtIDFdOw0KKysJCWZvciAoaSA9IG5jb2wgKiBNQl9DVVJfTUFYOyBp ICE9IDA7IC0taSwgLS1zKQ0KKyAJCQlpZiAoKnMgIT0gJyAnKQ0KKyAJCQkJYnJlYWs7DQorLQkJ biA9IG5jb2wgLSBpOwkJCS8qIEVyYXNlIGNoZWFwZXI/CSAqLw0KKysJCW4gPSBuY29sICogTUJf Q1VSX01BWCAtIGk7CQkJLyogRXJhc2UgY2hlYXBlcj8JICovDQorIAkJaWYgKG4gPiB0Y2Vlb2wp DQorIAkJCW4gPSB0Y2Vlb2w7DQorIAkJdnAtPnZfY29zdCA9IGkgKyBuOwkJLyogQnl0ZXMgKyBi bGFua3MuCSAqLw0KK2RpZmYgLS1naXQgYS9lY2hvLmMgYi9lY2hvLmMNCitpbmRleCA2OTY2YzAw Li4yMmI4MzMzIDEwMDY0NA0KKy0tLSBhL2VjaG8uYw0KKysrKyBiL2VjaG8uYw0KK0BAIC04NDQs OSArODQ0LDExIEBAIGV3cHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KKyAgKiAlayBwcmlu dHMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQga2V5IChhbmQgdGFrZXMgbm8gYXJndW1lbnRzKS4N CisgICogJWQgcHJpbnRzIGEgZGVjaW1hbCBpbnRlZ2VyDQorICAqICVvIHByaW50cyBhbiBvY3Rh bCBpbnRlZ2VyDQorKyAqICV4IHByaW50cyBhIGhleGFkZWNpbWFsIGludGVnZXINCisgICogJXAg cHJpbnRzIGEgcG9pbnRlcg0KKyAgKiAlcyBwcmludHMgYSBzdHJpbmcNCisgICogJWxkIHByaW50 cyBhIGxvbmcgd29yZA0KKysgKiAlbHggcHJpbnRzIGEgaGV4YWRlY2ltYWwgbG9uZyB3b3JkDQor ICAqIEFueXRoaW5nIGVsc2UgaXMgZWNob2VkIHZlcmJhdGltDQorICAqLw0KKyBzdGF0aWMgdm9p ZA0KK0BAIC04ODUsNiArODg3LDEwIEBAIGVmb3JtYXQoY29uc3QgY2hhciAqZnAsIHZhX2xpc3Qg YXApDQorIAkJCQllcHV0aSh2YV9hcmcoYXAsIGludCksIDgpOw0KKyAJCQkJYnJlYWs7DQorIA0K KysJCQljYXNlICd4JzoNCisrCQkJCWVwdXRpKHZhX2FyZyhhcCwgaW50KSwgMTYpOw0KKysJCQkJ YnJlYWs7DQorKw0KKyAJCQljYXNlICdwJzoNCisgCQkJCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRt cCksICIlcCIsDQorIAkJCQkgICAgdmFfYXJnKGFwLCB2b2lkICopKTsNCitAQCAtOTAyLDYgKzkw OCw5IEBAIGVmb3JtYXQoY29uc3QgY2hhciAqZnAsIHZhX2xpc3QgYXApDQorIAkJCQljYXNlICdk JzoNCisgCQkJCQllcHV0bCh2YV9hcmcoYXAsIGxvbmcpLCAxMCk7DQorIAkJCQkJYnJlYWs7DQor KwkJCQljYXNlICd4JzoNCisrCQkJCQllcHV0bCh2YV9hcmcoYXAsIGxvbmcpLCAxNik7DQorKwkJ CQkJYnJlYWs7DQorIAkJCQlkZWZhdWx0Og0KKyAJCQkJCWVwdXRjKGMpOw0KKyAJCQkJCWJyZWFr Ow0KK0BAIC05MzksNiArOTQ4LDcgQEAgc3RhdGljIHZvaWQNCisgZXB1dGwobG9uZyBsLCBpbnQg cikNCisgew0KKyAJbG9uZwkgcTsNCisrCWludAkgYzsNCisgDQorIAlpZiAobCA8IDApIHsNCisg CQllcHV0YygnLScpOw0KK0BAIC05NDYsNyArOTU2LDEwIEBAIGVwdXRsKGxvbmcgbCwgaW50IHIp DQorIAl9DQorIAlpZiAoKHEgPSBsIC8gcikgIT0gMCkNCisgCQllcHV0bChxLCByKTsNCistCWVw dXRjKChpbnQpKGwgJSByKSArICcwJyk7DQorKwljID0gKGludCkobCAlIHIpICsgJzAnOw0KKysJ aWYgKGMgPiAnOScpDQorKwkJYyArPSAnYScgLSAnOScgLSAxOw0KKysJZXB1dGMoYyk7DQorIH0N CisgDQorIC8qDQorZGlmZiAtLWdpdCBhL2Z1bm1hcC5jIGIvZnVubWFwLmMNCitpbmRleCBiZDU1 NWQ2Li43ZDg4Yjc1IDEwMDY0NA0KKy0tLSBhL2Z1bm1hcC5jDQorKysrIGIvZnVubWFwLmMNCitA QCAtMTE0LDYgKzExNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZnVubWFwIGZ1bmN0bmFtZXNbXSA9IHsN CisgCXtidWZmZXJpbnNlcnQsICJpbnNlcnQtYnVmZmVyIix9LA0KKyAJe2ZpbGVpbnNlcnQsICJp bnNlcnQtZmlsZSIsfSwNCisgCXtmaWxsd29yZCwgImluc2VydC13aXRoLXdyYXAiLH0sDQorKwl7 aW5zZXJ0X2NoYXIsICJpbnNlcnQtY2hhciIsfSwNCisgCXtiYWNraXNlYXJjaCwgImlzZWFyY2gt YmFja3dhcmQiLH0sDQorIAl7Zm9yd2lzZWFyY2gsICJpc2VhcmNoLWZvcndhcmQiLH0sDQorIAl7 am9pbmxpbmUsICJqb2luLWxpbmUiLH0sDQorQEAgLTE5MSw2ICsxOTIsNyBAQCBzdGF0aWMgc3Ry dWN0IGZ1bm1hcCBmdW5jdG5hbWVzW10gPSB7DQorIAl7c2hlbGxjb21tYW5kLCAic2hlbGwtY29t bWFuZCIsfSwNCisgCXtwaXBlcmVnaW9uLCAic2hlbGwtY29tbWFuZC1vbi1yZWdpb24iLH0sDQor IAl7c2hyaW5rd2luZCwgInNocmluay13aW5kb3ciLH0sDQorKwl7c2hvd19yYXdfbW9kZSwgInNo b3ctcmF3LW1vZGUiLH0sDQorICNpZmRlZiBOT1RBQg0KKyAJe3NwYWNlX3RvX3RhYnN0b3AsICJz cGFjZS10by10YWJzdG9wIix9LA0KKyAjZW5kaWYgLyogTk9UQUIgKi8NCitkaWZmIC0tZ2l0IGEv a2JkLmMgYi9rYmQuYw0KK2luZGV4IDFkN2ExYTIuLmY2MTNiMTAgMTAwNjQ0DQorLS0tIGEva2Jk LmMNCisrKysgYi9rYmQuYw0KK0BAIC05LDYgKzksOCBAQA0KKyAjaW5jbHVkZSA8c3lzL3F1ZXVl Lmg+DQorICNpbmNsdWRlIDxzaWduYWwuaD4NCisgI2luY2x1ZGUgPHN0ZGlvLmg+DQorKyNpbmNs dWRlIDxzdGRsaWIuaD4NCisrI2luY2x1ZGUgPHdjaGFyLmg+DQorIA0KKyAjaW5jbHVkZSAiZGVm LmgiDQorICNpbmNsdWRlICJrYmQuaCINCitAQCAtNDA2LDYgKzQwOCw0MyBAQCBxdW90ZShpbnQg ZiwgaW50IG4pDQorIH0NCisgDQorIC8qDQorKyAqIFByb21wdCBmb3IgYSBjb2RlcG9pbnQgaW4g d2hhdGV2ZXIgdGhlIG5hdGl2ZSBzeXN0ZW0ncyBlbmNvZGluZyBpcywNCisrICogaW5zZXJ0IGl0 IGludG8gdGhlIGZpbGUNCisrICovDQorK2ludA0KKytpbnNlcnRfY2hhcihpbnQgZiwgaW50IG4p DQorK3sNCisrCWNoYXIgKmJ1ZnA7DQorKwljaGFyIGlucGJ1ZlszMl07DQorKwl3Y2hhcl90IHdj Ow0KKysJY2hhciBtYltNQl9DVVJfTUFYICsgMV07DQorKwltYnN0YXRlX3QgbWJzID0geyAwIH07 DQorKwlzaXplX3QgbWJzbGVuOw0KKysJc2l6ZV90IGk7DQorKw0KKysJaWYgKChidWZwID0gZXJl YWQoIkluc2VydCBjaGFyYWN0ZXIgKGhleCk6ICIsIGlucGJ1Ziwgc2l6ZW9mIGlucGJ1ZiwNCisr CSAgICAgRUZORVcpKSA9PSBOVUxMKSB7DQorKwkJcmV0dXJuIChBQk9SVCk7DQorKwl9IGVsc2Ug aWYgKGJ1ZnBbMF0gPT0gJ1wwJykgew0KKysJCXJldHVybiAoRkFMU0UpOw0KKysJfQ0KKysNCisr CXdjID0gKHdjaGFyX3QpIHN0cnRvbGwoYnVmcCwgTlVMTCwgMTYpOw0KKysJbWJzbGVuID0gd2Ny dG9tYihtYiwgd2MsICZtYnMpOw0KKysJaWYgKG1ic2xlbiA9PSAoc2l6ZV90KSAtMSkgew0KKysJ CXJldHVybiAoRkFMU0UpOw0KKysJfQ0KKysNCisrCWZvciAoaSA9IDA7IGkgPCBtYnNsZW47ICsr aSkgew0KKysJCWlmIChsaW5zZXJ0KDEsIG1iW2ldKSA9PSBGQUxTRSkgew0KKysJCQlyZXR1cm4g KEZBTFNFKTsNCisrCQl9DQorKwl9DQorKw0KKysJcmV0dXJuIChUUlVFKTsNCisrfQ0KKysNCisr LyoNCisgICogV3JhcGVyIGZ1bmN0aW9uIHRvIGNvdW50IGludm9jYXRpb24gcmVwZWF0cy4NCisg ICogV2UgaWdub3JlIGFueSBmdW5jdGlvbiB3aG9zZSBzb2xlIHB1cnBvc2UgaXMgdG8gZ2V0IHVz DQorICAqIHRvIHRoZSBpbnRlbmRlZCBmdW5jdGlvbi4NCitkaWZmIC0tZ2l0IGEva2V5bWFwLmMg Yi9rZXltYXAuYw0KK2luZGV4IGVmNzFmODQuLmFiMjMxODIgMTAwNjQ0DQorLS0tIGEva2V5bWFw LmMNCisrKysgYi9rZXltYXAuYw0KK0BAIC0xMjAsNiArMTIwLDIxIEBAIHN0YXRpYyBzdHJ1Y3Qg S0VZTUFQRSAoMikgY1g0bWFwID0gew0KKyAJfQ0KKyB9Ow0KKyANCisrc3RhdGljIFBGIGNYOEpb XSA9IHsNCisrCWluc2VydF9jaGFyCQkvKiBeTSAqLw0KKyt9Ow0KKysNCisrc3RhdGljIHN0cnVj dCBLRVlNQVBFICgxKSBjWDhtYXAgPSB7DQorKwkxLA0KKysJMSwNCisrCXJlc2NhbiwNCisrCXsN CisrCQl7DQorKwkJCUNDSFIoJ00nKSwgQ0NIUignTScpLCBjWDhKLCBOVUxMDQorKwkJfQ0KKysJ fQ0KKyt9Ow0KKysNCisgc3RhdGljIFBGIGNYY0JbXSA9IHsNCisgCWxpc3RidWZmZXJzLAkJLyog XkIgKi8NCisgCXF1aXQsCQkJLyogXkMgKi8NCitAQCAtMTU4LDYgKzE3MywxMCBAQCBzdGF0aWMg UEYgY1gwW10gPSB7DQorIAlOVUxMCQkJLyogNCAqLw0KKyB9Ow0KKyANCisrc3RhdGljIFBGIGNY OFtdID0gew0KKysJTlVMTAkJCS8qIDQgKi8NCisrfTsNCisrDQorIHN0YXRpYyBQRiBjWGVxW10g PSB7DQorIAlzaG93Y3BvcwkJLyogPSAqLw0KKyB9Ow0KK0BAIC0xODksOSArMjA4LDkgQEAgc3Rh dGljIFBGIGNYY2FyW10gPSB7DQorIAl1bmRvCQkJLyogdSAqLw0KKyB9Ow0KKyANCistc3RydWN0 IEtFWU1BUEUgKDYpIGNYbWFwID0gew0KKy0JNiwNCistCTYsDQorK3N0cnVjdCBLRVlNQVBFICg3 KSBjWG1hcCA9IHsNCisrCTcsDQorKwk3LA0KKyAJcmVzY2FuLA0KKyAJew0KKyAJCXsNCitAQCAt MjA3LDYgKzIyNiw5IEBAIHN0cnVjdCBLRVlNQVBFICg2KSBjWG1hcCA9IHsNCisgCQkJJzAnLCAn NCcsIGNYMCwgKEtFWU1BUCAqKSAmIGNYNG1hcA0KKyAJCX0sDQorIAkJew0KKysJCQknOCcsICc4 JywgY1g4LCAoS0VZTUFQICopICYgY1g4bWFwDQorKwkJfSwNCisrCQl7DQorIAkJCSc9JywgJz0n LCBjWGVxLCBOVUxMDQorIAkJfSwNCisgCQl7DQorQEAgLTQ5MSw2ICs1MTMsMTggQEAgc3RhdGlj IHN0cnVjdCBLRVlNQVBFICgxKSBvdmVyd21hcCA9IHsNCisgCX0NCisgfTsNCisgDQorK3N0YXRp YyBzdHJ1Y3QgS0VZTUFQRSAoMSkgcmF3bWFwID0gew0KKysJMCwNCisrCTEsCQkvKiAxIHRvIGF2 b2lkIDAgc2l6ZWQgYXJyYXkgKi8NCisrCXJlc2NhbiwNCisrCXsNCisrCQkvKiB1bnVzZWQgZHVt bXkgZW50cnkgZm9yIFZNUyBDICovDQorKwkJew0KKysJCQkoS0NIQVIpMCwgKEtDSEFSKTAsIE5V TEwsIE5VTEwNCisrCQl9DQorKwl9DQorK307DQorKw0KKyANCisgLyoNCisgICogVGhlIGJhc2lj IChyb290KSBrZXlib2FyZCBtYXANCitAQCAtNTEzLDYgKzU0Nyw3IEBAIHN0YXRpYyBzdHJ1Y3Qg bWFwc19zIG1hcF90YWJsZVtdID0gew0KKyAJeyhLRVlNQVAgKikgJm5vdGFibWFwLCAibm90YWIi LH0sDQorICNlbmRpZiAvKiBOT1RBQiAqLw0KKyAJeyhLRVlNQVAgKikgJm92ZXJ3bWFwLCAib3Zl cndyaXRlIix9LA0KKysJeyhLRVlNQVAgKikgJnJhd21hcCwgInJhdyIsfSwNCisgCXsoS0VZTUFQ ICopICZtZXRhbWFwLCAiZXNjIHByZWZpeCIsfSwNCisgCXsoS0VZTUFQICopICZjWG1hcCwgImMt eCBwcmVmaXgiLH0sDQorIAl7KEtFWU1BUCAqKSAmY1g0bWFwLCAiYy14IDQgcHJlZml4Iix9LA0K K2RpZmYgLS1naXQgYS9tb2Rlcy5jIGIvbW9kZXMuYw0KK2luZGV4IDAyN2E1Y2QuLjIwMTNiY2Ig MTAwNjQ0DQorLS0tIGEvbW9kZXMuYw0KKysrKyBiL21vZGVzLmMNCitAQCAtMTExLDYgKzExMSwy MyBAQCBvdmVyd3JpdGVfbW9kZShpbnQgZiwgaW50IG4pDQorIH0NCisgDQorIGludA0KKytzaG93 X3Jhd19tb2RlKGludCBmLCBpbnQgbikNCisrew0KKysJaWYgKGNoYW5nZW1vZGUoZiwgbiwgInJh dyIpID09IEZBTFNFKQ0KKysJCXJldHVybiAoRkFMU0UpOw0KKysJaWYgKGYgJiBGRkFSRykgew0K KysJCWlmIChuIDw9IDApDQorKwkJCWN1cmJwLT5iX2ZsYWcgJj0gfkJGU0hPV1JBVzsNCisrCQll bHNlDQorKwkJCWN1cmJwLT5iX2ZsYWcgfD0gQkZTSE9XUkFXOw0KKysJfSBlbHNlDQorKwkJY3Vy YnAtPmJfZmxhZyBePSBCRlNIT1dSQVc7DQorKw0KKysJc2dhcmJmID0gVFJVRTsNCisrCXJldHVy biAoVFJVRSk7DQorK30NCisrDQorK2ludA0KKyBzZXRfZGVmYXVsdF9tb2RlKGludCBmLCBpbnQg bikNCisgew0KKyAJaW50CSBpOw0KK0BAIC0xNzAsNSArMTg3LDExIEBAIHNldF9kZWZhdWx0X21v ZGUoaW50IGYsIGludCBuKQ0KKyAJCQlkZWZiX2ZsYWcgfD0gQkZOT1RBQjsNCisgCX0NCisgI2Vu ZGlmCS8qIE5PVEFCICovDQorKwlpZiAoc3RyY21wKG1vZGVidWYsICJyYXciKSA9PSAwKSB7DQor KwkJaWYgKG4gPD0gMCkNCisrCQkJZGVmYl9mbGFnICY9IH5CRlNIT1dSQVc7DQorKwkJZWxzZQ0K KysJCQlkZWZiX2ZsYWcgfD0gQkZTSE9XUkFXOw0KKysJfQ0KKyAJcmV0dXJuIChUUlVFKTsNCisg fQ0KK2RpZmYgLS1naXQgYS91dGlsLmMgYi91dGlsLmMNCitpbmRleCA5MzU3ZDRkLi5kYmZjMDU4 IDEwMDY0NA0KKy0tLSBhL3V0aWwuYw0KKysrKyBiL3V0aWwuYw0KK0BAIC0xMyw2ICsxMyw4IEBA DQorICNpbmNsdWRlIDxjdHlwZS5oPg0KKyAjaW5jbHVkZSA8c2lnbmFsLmg+DQorICNpbmNsdWRl IDxzdGRpby5oPg0KKysjaW5jbHVkZSA8c3RkbGliLmg+DQorKyNpbmNsdWRlIDx3Y2hhci5oPg0K KyANCisgI2luY2x1ZGUgImRlZi5oIg0KKyANCitAQCAtMzMsNiArMzUsOSBAQCBzaG93Y3Bvcyhp bnQgZiwgaW50IG4pDQorIAlpbnQJIG5saW5lLCByb3c7DQorIAlpbnQJIGNsaW5lLCBjYnl0ZTsJ CS8qIEN1cnJlbnQgbGluZS9jaGFyL2J5dGUgKi8NCisgCWludAkgcmF0aW87DQorKwljaGFyCSBp c21iID0gMDsNCisrCXdjaGFyX3QJIHdjID0gMDsNCisrCWNoYXIJIG1iY1tNQl9DVVJfTUFYICsg MV07DQorIA0KKyAJLyogY29sbGVjdCB0aGUgZGF0YSAqLw0KKyAJY2xwID0gYmZpcnN0bHAoY3Vy YnApOw0KK0BAIC02OSw4ICs3NCw0MyBAQCBzaG93Y3BvcyhpbnQgZiwgaW50IG4pDQorIAkJY2xw ID0gbGZvcncoY2xwKTsNCisgCX0NCisgCXJhdGlvID0gbmNoYXIgPyAoMTAwTCAqIGNjaGFyKSAv IG5jaGFyIDogMTAwOw0KKy0JZXdwcmludGYoIkNoYXI6ICVjICgwJW8pICBwb2ludD0lbGQoJWQl JSkgIGxpbmU9JWQgIHJvdz0lZCAgY29sPSVkIiwNCistCSAgICBjYnl0ZSwgY2J5dGUsIGNjaGFy LCByYXRpbywgY2xpbmUsIHJvdywgZ2V0Y29scG9zKGN1cndwKSk7DQorKw0KKysJaWYgKCEoY3Vy YnAtPmJfZmxhZyAmIEJGU0hPV1JBVykpIHsNCisrCQltYnN0YXRlX3QgbWJzID0geyAwIH07DQor KwkJc2l6ZV90IGNvbnN1bWVkID0gMDsNCisrCQlzaXplX3Qgb2Zmc2V0ID0gMDsNCisrCQl3aGls ZSAoY2J5dGUgIT0gJ1xuJyAmJiBvZmZzZXQgPD0gY3Vyd3AtPndfZG90bykgew0KKysJCQlpbnQg YyA9IGxnZXRjKGNscCwgY3Vyd3AtPndfZG90byAtIG9mZnNldCk7DQorKwkJCWlmIChpc3ByaW50 KGMpIHx8IChJU0NUUkwoYykgIT0gRkFMU0UpKSB7DQorKwkJCQlicmVhazsNCisrCQkJfQ0KKysJ CQljb25zdW1lZCA9IG1icnRvd2MoJndjLA0KKysJCQkgICAgICAgICAgICAgICAgICAgJmNscC0+ bF90ZXh0W2N1cndwLT53X2RvdG8gLSBvZmZzZXRdLA0KKysJCQkgICAgICAgICAgICAgICAgICAg bGxlbmd0aChjbHApIC0gY3Vyd3AtPndfZG90byArIG9mZnNldCwNCisrCQkJICAgICAgICAgICAg ICAgICAgICZtYnMpOw0KKysJCQlpZiAoY29uc3VtZWQgPCAoc2l6ZV90KSAtMikgew0KKysJCQkJ aXNtYiA9IChvZmZzZXQgPCBjb25zdW1lZCk7DQorKwkJCQlzbnByaW50ZihtYmMsIGNvbnN1bWVk ICsgMSwgIiVzIiwNCisrCQkJCSAgICAgICAgICZjbHAtPmxfdGV4dFtjdXJ3cC0+d19kb3RvIC0g b2Zmc2V0XSk7DQorKwkJCQltYmNbY29uc3VtZWQgKyAxXSA9ICdcMCc7DQorKwkJCQlicmVhazsN CisrCQkJfSBlbHNlIHsNCisrCQkJCW1lbXNldCgmbWJzLCAwLCBzaXplb2YgbWJzKTsNCisrCQkJ fQ0KKysJCQlvZmZzZXQrKzsNCisrCQl9DQorKwl9DQorKw0KKysJaWYgKGlzbWIpIHsNCisrCQll d3ByaW50ZigiQ2hhcjogJXMgKGNvZGVwb2ludCAweCVseCkgQnl0ZTogJWMgKDAlbykgICINCisr CQkgICAgICAgICAicG9pbnQ9JWxkKCVkJSUpICBsaW5lPSVkICByb3c9JWQgY29sPSVkIiwgbWJj LA0KKysJCSAgICAgICAgIChsb25nKSB3YywgY2J5dGUsIGNieXRlLCBjY2hhciwgcmF0aW8sIGNs aW5lLCByb3csDQorKwkJICAgICAgICAgZ2V0Y29scG9zKGN1cndwKSk7DQorKwl9IGVsc2Ugew0K KysJCWV3cHJpbnRmKCJDaGFyOiAlYyAoMCVvKSAgcG9pbnQ9JWxkKCVkJSUpICBsaW5lPSVkICBy b3c9JWQiDQorKwkJICAgICAgICAgImNvbD0lZCIsIGNieXRlLCBjYnl0ZSwgY2NoYXIsIHJhdGlv LCBjbGluZSwgcm93LA0KKysJCSAgICAgICAgIGdldGNvbHBvcyhjdXJ3cCkpOw0KKysJfQ0KKyAJ cmV0dXJuIChUUlVFKTsNCisgfQ0KKyANCitAQCAtOTYsNiArMTM2LDIyIEBAIGdldGNvbHBvcyhz dHJ1Y3QgbWd3aW4gKndwKQ0KKyAJCQljb2wgKz0gMjsNCisgCQllbHNlIGlmIChpc3ByaW50KGMp KSB7DQorIAkJCWNvbCsrOw0KKysJCX0gZWxzZSBpZiAoISh3cC0+d19idWZwLT5iX2ZsYWcgJiBC RlNIT1dSQVcpKSB7DQorKwkJCW1ic3RhdGVfdCBtYnMgPSB7IDAgfTsNCisrCQkJd2NoYXJfdCB3 YyA9IDA7DQorKwkJCXNpemVfdCBjb25zdW1lZCA9IG1icnRvd2MoJndjLCAmd3AtPndfZG90cC0+ bF90ZXh0W2ldLA0KKysJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGxsZW5ndGgod3AtPndf ZG90cCkgLSBpLA0KKysJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICZtYnMpOw0KKysJCQlp bnQgd2lkdGggPSAtMTsNCisrCQkJaWYgKGNvbnN1bWVkIDwgKHNpemVfdCkgLTIpIHsNCisrCQkJ CXdpZHRoID0gd2N3aWR0aCh3Yyk7DQorKwkJCX0NCisrCQkJaWYgKHdpZHRoID49IDApIHsNCisr CQkJCWNvbCArPSB3aWR0aDsNCisrCQkJCWkgKz0gKGNvbnN1bWVkIC0gMSk7DQorKwkJCX0gZWxz ZSB7DQorKwkJCQljb2wgKz0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIlxcJW8iLCBjKTsN CisrCQkJfQ0KKyAJCX0gZWxzZSB7DQorIAkJCWNvbCArPSBzbnByaW50Zih0bXAsIHNpemVvZih0 bXApLCAiXFwlbyIsIGMpOw0KKyAJCX0NCi0tIA0KMi4xMy4wDQoNCg0KDQoNCi0tLQ0KVW5zdWJz Y3JpYmU6ICBhbHBpbmUtYXBvcnRzK3Vuc3Vic2NyaWJlQGxpc3RzLmFscGluZWxpbnV4Lm9yZw0K SGVscDogICAgICAgICBhbHBpbmUtYXBvcnRzK2hlbHBAbGlzdHMuYWxwaW5lbGludXgub3JnDQot LS0NCg==