From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Disseldorp Subject: Re: [PATCH] Ceph RADOS cluster mutex helper for Samba CTDB Date: Tue, 6 Dec 2016 13:18:27 +0100 Message-ID: <20161206131827.273bd9b8@suse.de> References: <20161201151715.019228c1@suse.de> <20161206131404.38f737d0@suse.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/nZSbJIMSU/CZPYnFKN0N96H" Return-path: Received: from mx2.suse.de ([195.135.220.15]:37565 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752425AbcLFMSb (ORCPT ); Tue, 6 Dec 2016 07:18:31 -0500 In-Reply-To: <20161206131404.38f737d0@suse.de> Sender: ceph-devel-owner@vger.kernel.org List-ID: To: Amitay Isaacs Cc: Samba Technical , "ceph-devel@vger.kernel.org" --MP_/nZSbJIMSU/CZPYnFKN0N96H Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline This time with the patch-set attached... > ctdb/doc/Makefile | 3 +- > ctdb/doc/ctdb_mutex_ceph_rados_helper.7.xml | 90 +++++ > .../utils/ceph/ctdb_mutex_ceph_rados_helper.c | 334 ++++++++++++++++++ > ctdb/utils/ceph/test_ceph_rados_reclock.sh | 151 ++++++++ > ctdb/wscript | 19 + > 5 files changed, 596 insertions(+), 1 deletion(-) --MP_/nZSbJIMSU/CZPYnFKN0N96H Content-Type: text/x-patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=ctdb_reclock_ceph_v2.patchset RnJvbSBmNzIzNTIyYzI1OWY2YjQ2Y2VjMDg4Y2M5NTFjZTgwMWU0OTFhMDYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogRGF2aWQgRGlzc2VsZG9ycCA8ZGRpc3NAc2FtYmEub3JnPg0K RGF0ZTogVGh1LCAxIERlYyAyMDE2IDEzOjMzOjIyICswMTAwDQpTdWJqZWN0OiBbUEFUQ0ggMS8z XSBjdGRiOiBjbHVzdGVyIG11dGV4IGhlbHBlciB1c2luZyBDZXBoIFJBRE9TDQoNCmN0ZGJfbXV0 ZXhfY2VwaF9yYWRvc19oZWxwZXIgaW1wbGVtZW50cyB0aGUgY2x1c3RlciBtdXRleCBoZWxwZXIg QVBJDQphdG9wIENlcGggdXNpbmcgdGhlIGxpYnJhZG9zIHJhZG9zX2xvY2tfZXhjbHVzaXZlKCkv cmFkb3NfdW5sb2NrKCkNCmZ1bmN0aW9uYWxpdHkuDQoNCk9uY2UgY29uZmlndXJlZCwgc3BsaXQg YnJhaW4gYXZvaWRhbmNlIGR1cmluZyBDVERCIHJlY292ZXJ5IHdpbGwgYmUNCmhhbmRsZWQgdXNp bmcgbG9ja3MgYWdhaW5zdCBhbiBvYmplY3QgbG9jYXRlZCBpbiBhIENlcGggUkFET1MgcG9vbC4N Cg0KU2lnbmVkLW9mZi1ieTogRGF2aWQgRGlzc2VsZG9ycCA8ZGRpc3NAc2FtYmEub3JnPg0KLS0t DQogY3RkYi91dGlscy9jZXBoL2N0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXIuYyB8IDMzNCAr KysrKysrKysrKysrKysrKysrKysrKysrDQogY3RkYi93c2NyaXB0ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAxOSArKw0KIDIgZmlsZXMgY2hhbmdlZCwgMzUzIGluc2VydGlv bnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgY3RkYi91dGlscy9jZXBoL2N0ZGJfbXV0ZXhfY2Vw aF9yYWRvc19oZWxwZXIuYw0KDQpkaWZmIC0tZ2l0IGEvY3RkYi91dGlscy9jZXBoL2N0ZGJfbXV0 ZXhfY2VwaF9yYWRvc19oZWxwZXIuYyBiL2N0ZGIvdXRpbHMvY2VwaC9jdGRiX211dGV4X2NlcGhf cmFkb3NfaGVscGVyLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi44ZDE5 OTY1DQotLS0gL2Rldi9udWxsDQorKysgYi9jdGRiL3V0aWxzL2NlcGgvY3RkYl9tdXRleF9jZXBo X3JhZG9zX2hlbHBlci5jDQpAQCAtMCwwICsxLDMzNCBAQA0KKy8qDQorICAgQ1REQiBtdXRleCBo ZWxwZXIgdXNpbmcgQ2VwaCBsaWJyYWRvcyBsb2Nrcw0KKw0KKyAgIENvcHlyaWdodCAoQykgRGF2 aWQgRGlzc2VsZG9ycCAyMDE2DQorDQorICAgQmFzZWQgb24gY3RkYl9tdXRleF9mY250bF9oZWxw ZXIuYywgd2hpY2ggaXM6DQorICAgQ29weXJpZ2h0IChDKSBNYXJ0aW4gU2Nod2Vua2UgMjAxNQ0K Kw0KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgICB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAgIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorICAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YNCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlDQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCisNCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQorKi8NCisNCisjaW5jbHVk ZSAicmVwbGFjZS5oIg0KKyNpbmNsdWRlICJzeXN0ZW0vZmlsZXN5cy5oIg0KKyNpbmNsdWRlICJz eXN0ZW0vbmV0d29yay5oIg0KKw0KKy8qIHByb3RvY29sLmggaXMganVzdCBuZWVkZWQgZm9yIGN0 ZGJfc29ja19hZGRyLCB3aGljaCBpcyB1c2VkIGluIHN5c3RlbS5oICovDQorI2luY2x1ZGUgInBy b3RvY29sL3Byb3RvY29sLmgiDQorI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW0uaCINCisjaW5jbHVk ZSAibGliL3V0aWwvdGltZS5oIg0KKyNpbmNsdWRlICJ0ZXZlbnQuaCINCisjaW5jbHVkZSAidGFs bG9jLmgiDQorI2luY2x1ZGUgInJhZG9zL2xpYnJhZG9zLmgiDQorDQorI2RlZmluZSBDVERCX01V VEVYX0NFUEhfTE9DS19OQU1FCSJjdGRiX3JlY2xvY2tfbXV0ZXgiDQorI2RlZmluZSBDVERCX01V VEVYX0NFUEhfTE9DS19DT09LSUUJQ1REQl9NVVRFWF9DRVBIX0xPQ0tfTkFNRQ0KKyNkZWZpbmUg Q1REQl9NVVRFWF9DRVBIX0xPQ0tfREVTQwkiQ1REQiByZWNvdmVyeSBsb2NrIg0KKw0KKyNkZWZp bmUgQ1REQl9NVVRFWF9TVEFUVVNfSE9MRElORyAiMCINCisjZGVmaW5lIENUREJfTVVURVhfU1RB VFVTX0NPTlRFTkRFRCAiMSINCisjZGVmaW5lIENUREJfTVVURVhfU1RBVFVTX1RJTUVPVVQgIjIi DQorI2RlZmluZSBDVERCX01VVEVYX1NUQVRVU19FUlJPUiAiMyINCisNCitzdGF0aWMgY2hhciAq cHJvZ25hbWUgPSBOVUxMOw0KKw0KK3N0YXRpYyBpbnQgY3RkYl9tdXRleF9yYWRvc19jdHhfY3Jl YXRlKGNvbnN0IGNoYXIgKmNlcGhfY2x1c3Rlcl9uYW1lLA0KKwkJCQkgICAgICAgY29uc3QgY2hh ciAqY2VwaF9hdXRoX25hbWUsDQorCQkJCSAgICAgICBjb25zdCBjaGFyICpwb29sX25hbWUsDQor CQkJCSAgICAgICByYWRvc190ICpfY2VwaF9jbHVzdGVyLA0KKwkJCQkgICAgICAgcmFkb3NfaW9j dHhfdCAqX2lvY3R4KQ0KK3sNCisJcmFkb3NfdCBjZXBoX2NsdXN0ZXIgPSBOVUxMOw0KKwlyYWRv c19pb2N0eF90IGlvY3R4ID0gTlVMTDsNCisJaW50IHJldDsNCisNCisJcmV0ID0gcmFkb3NfY3Jl YXRlMigmY2VwaF9jbHVzdGVyLCBjZXBoX2NsdXN0ZXJfbmFtZSwgY2VwaF9hdXRoX25hbWUsIDAp Ow0KKwlpZiAocmV0IDwgMCkgew0KKwkJZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIGlu aXRpYWxpc2UgQ2VwaCBjbHVzdGVyICVzIGFzICVzIg0KKwkJCSIgLSAoJXMpXG4iLCBwcm9nbmFt ZSwgY2VwaF9jbHVzdGVyX25hbWUsIGNlcGhfYXV0aF9uYW1lLA0KKwkJCXN0cmVycm9yKC1yZXQp KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJLyogcGF0aD1OVUxMIHRlbGxzIGxpYnJhZG9z IHRvIHVzZSBkZWZhdWx0IGxvY2F0aW9ucyAqLw0KKwlyZXQgPSByYWRvc19jb25mX3JlYWRfZmls ZShjZXBoX2NsdXN0ZXIsIE5VTEwpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZnByaW50ZihzdGRl cnIsICIlczogZmFpbGVkIHRvIHBhcnNlIENlcGggY2x1c3RlciBjb25maWciDQorCQkJIiAtICgl cylcbiIsIHByb2duYW1lLCBzdHJlcnJvcigtcmV0KSk7DQorCQlyYWRvc19zaHV0ZG93bihjZXBo X2NsdXN0ZXIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQgPSByYWRvc19jb25uZWN0 KGNlcGhfY2x1c3Rlcik7DQorCWlmIChyZXQgPCAwKSB7DQorCQlmcHJpbnRmKHN0ZGVyciwgIiVz OiBmYWlsZWQgdG8gY29ubmVjdCB0byBDZXBoIGNsdXN0ZXIgJXMgYXMgJXMiDQorCQkJIiAtICgl cylcbiIsIHByb2duYW1lLCBjZXBoX2NsdXN0ZXJfbmFtZSwgY2VwaF9hdXRoX25hbWUsDQorCQkJ c3RyZXJyb3IoLXJldCkpOw0KKwkJcmFkb3Nfc2h1dGRvd24oY2VwaF9jbHVzdGVyKTsNCisJCXJl dHVybiByZXQ7DQorCX0NCisNCisNCisJcmV0ID0gcmFkb3NfaW9jdHhfY3JlYXRlKGNlcGhfY2x1 c3RlciwgcG9vbF9uYW1lLCAmaW9jdHgpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZnByaW50Zihz dGRlcnIsICIlczogZmFpbGVkIHRvIGNyZWF0ZSBDZXBoIGlvY3R4IGZvciBwb29sICVzIg0KKwkJ CSIgLSAoJXMpXG4iLCBwcm9nbmFtZSwgcG9vbF9uYW1lLCBzdHJlcnJvcigtcmV0KSk7DQorCQly YWRvc19zaHV0ZG93bihjZXBoX2NsdXN0ZXIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwkq X2NlcGhfY2x1c3RlciA9IGNlcGhfY2x1c3RlcjsNCisJKl9pb2N0eCA9IGlvY3R4Ow0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgY3RkYl9tdXRleF9yYWRvc19jdHhfZGVzdHJv eShyYWRvc190IGNlcGhfY2x1c3RlciwNCisJCQkJCSByYWRvc19pb2N0eF90IGlvY3R4KQ0KK3sN CisJcmFkb3NfaW9jdHhfZGVzdHJveShpb2N0eCk7DQorCXJhZG9zX3NodXRkb3duKGNlcGhfY2x1 c3Rlcik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgY3RkYl9tdXRleF9yYWRvc19sb2NrKHJhZG9zX2lv Y3R4X3QgKmlvY3R4LA0KKwkJCQkgY29uc3QgY2hhciAqb2lkKQ0KK3sNCisJaW50IHJldDsNCisN CisJcmV0ID0gcmFkb3NfbG9ja19leGNsdXNpdmUoaW9jdHgsIG9pZCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENUREJfTVVURVhfQ0VQSF9MT0NLX05BTUUsDQorCQkJCSAg IENUREJfTVVURVhfQ0VQSF9MT0NLX0NPT0tJRSwNCisJCQkJICAgQ1REQl9NVVRFWF9DRVBIX0xP Q0tfREVTQywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIGlu ZmluaXRlIGR1cmF0aW9uICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw KTsNCisJaWYgKChyZXQgPT0gLUVFWElTVCkgfHwgKHJldCA9PSAtRUJVU1kpKSB7DQorCQkvKiBs b2NrIGNvbnRlbnRpb24gKi8NCisJCXJldHVybiByZXQ7DQorCX0gZWxzZSBpZiAocmV0IDwgMCkg ew0KKwkJLyogdW5leHBlY3RlZCBmYWlsdXJlICovDQorCQlmcHJpbnRmKHN0ZGVyciwNCisJCQki JXM6IEZhaWxlZCB0byBnZXQgbG9jayBvbiBSQURPUyBvYmplY3QgJyVzJyAtICglcylcbiIsDQor CQkJcHJvZ25hbWUsIG9pZCwgc3RyZXJyb3IoLXJldCkpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0K Kw0KKwkvKiBsb2NrIG9idGFpbmVkICovDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50 IGN0ZGJfbXV0ZXhfcmFkb3NfdW5sb2NrKHJhZG9zX2lvY3R4X3QgKmlvY3R4LA0KKwkJCQkgICBj b25zdCBjaGFyICpvaWQpDQorew0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSByYWRvc191bmxvY2so aW9jdHgsIG9pZCwNCisJCQkgICBDVERCX01VVEVYX0NFUEhfTE9DS19OQU1FLA0KKwkJCSAgIENU REJfTVVURVhfQ0VQSF9MT0NLX0NPT0tJRSk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlmcHJpbnRm KHN0ZGVyciwNCisJCQkiJXM6IEZhaWxlZCB0byBkcm9wIGxvY2sgb24gUkFET1Mgb2JqZWN0ICcl cycgLSAoJXMpXG4iLA0KKwkJCXByb2duYW1lLCBvaWQsIHN0cmVycm9yKC1yZXQpKTsNCisJCXJl dHVybiByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0cnVjdCBjdGRiX211dGV4 X3JhZG9zX3N0YXRlIHsNCisJYm9vbCBob2xkaW5nX211dGV4Ow0KKwljb25zdCBjaGFyICpjZXBo X2NsdXN0ZXJfbmFtZTsNCisJY29uc3QgY2hhciAqY2VwaF9hdXRoX25hbWU7DQorCWNvbnN0IGNo YXIgKnBvb2xfbmFtZTsNCisJY29uc3QgY2hhciAqb2JqZWN0Ow0KKwlpbnQgcHBpZDsNCisJc3Ry dWN0IHRldmVudF9jb250ZXh0ICpldjsNCisJc3RydWN0IHRldmVudF9zaWduYWwgKnNpZ19ldjsN CisJc3RydWN0IHRldmVudF90aW1lciAqdGltZXJfZXY7DQorCXJhZG9zX3QgY2VwaF9jbHVzdGVy Ow0KKwlyYWRvc19pb2N0eF90IGlvY3R4Ow0KK307DQorDQorc3RhdGljIHZvaWQgY3RkYl9tdXRl eF9yYWRvc19zaWd0ZXJtX2NiKHN0cnVjdCB0ZXZlbnRfY29udGV4dCAqZXYsDQorCQkJCQlzdHJ1 Y3QgdGV2ZW50X3NpZ25hbCAqc2UsDQorCQkJCQlpbnQgc2lnbnVtLA0KKwkJCQkJaW50IGNvdW50 LA0KKwkJCQkJdm9pZCAqc2lnaW5mbywNCisJCQkJCXZvaWQgKnByaXZhdGVfZGF0YSkNCit7DQor CXN0cnVjdCBjdGRiX211dGV4X3JhZG9zX3N0YXRlICpjbXJfc3RhdGUgPSBwcml2YXRlX2RhdGE7 DQorCWludCByZXQ7DQorDQorCWlmICghY21yX3N0YXRlLT5ob2xkaW5nX211dGV4KSB7DQorCQlm cHJpbnRmKHN0ZGVyciwgIlNpZ3Rlcm0gY2FsbGJhY2sgaW52b2tlZCB3aXRob3V0IG11dGV4IVxu Iik7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJZ290byBlcnJfY3R4X2NsZWFudXA7DQorCX0NCisN CisJcmV0ID0gY3RkYl9tdXRleF9yYWRvc191bmxvY2soY21yX3N0YXRlLT5pb2N0eCwgY21yX3N0 YXRlLT5vYmplY3QpOw0KK2Vycl9jdHhfY2xlYW51cDoNCisJY3RkYl9tdXRleF9yYWRvc19jdHhf ZGVzdHJveShjbXJfc3RhdGUtPmNlcGhfY2x1c3RlciwNCisJCQkJICAgICBjbXJfc3RhdGUtPmlv Y3R4KTsNCisJdGFsbG9jX2ZyZWUoY21yX3N0YXRlKTsNCisJZXhpdChyZXQgPyAxIDogMCk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGN0ZGJfbXV0ZXhfcmFkb3NfdGltZXJfY2Ioc3RydWN0IHRldmVu dF9jb250ZXh0ICpldiwNCisJCQkJICAgICAgc3RydWN0IHRldmVudF90aW1lciAqdGUsDQorCQkJ CSAgICAgIHN0cnVjdCB0aW1ldmFsIGN1cnJlbnRfdGltZSwNCisJCQkJICAgICAgdm9pZCAqcHJp dmF0ZV9kYXRhKQ0KK3sNCisJc3RydWN0IGN0ZGJfbXV0ZXhfcmFkb3Nfc3RhdGUgKmNtcl9zdGF0 ZSA9IHByaXZhdGVfZGF0YTsNCisJaW50IHJldDsNCisNCisJaWYgKCFjbXJfc3RhdGUtPmhvbGRp bmdfbXV0ZXgpIHsNCisJCWZwcmludGYoc3RkZXJyLCAiVGltZXIgY2FsbGJhY2sgaW52b2tlZCB3 aXRob3V0IG11dGV4IVxuIik7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJZ290byBlcnJfY3R4X2Ns ZWFudXA7DQorCX0NCisNCisJaWYgKChraWxsKGNtcl9zdGF0ZS0+cHBpZCwgMCkgPT0gMCkgfHwg KGVycm5vICE9IEVTUkNIKSkgew0KKwkJLyogcGFyZW50IHN0aWxsIGFyb3VuZCwga2VlcCB3YWl0 aW5nICovDQorCQljbXJfc3RhdGUtPnRpbWVyX2V2ID0gdGV2ZW50X2FkZF90aW1lcihjbXJfc3Rh dGUtPmV2LCBjbXJfc3RhdGUsDQorCQkJCQkJICAgICAgIHRpbWV2YWxfY3VycmVudF9vZnMoNSww KSwNCisJCQkJCQkgICAgICBjdGRiX211dGV4X3JhZG9zX3RpbWVyX2NiLA0KKwkJCQkJCSAgICAg ICBjbXJfc3RhdGUpOw0KKwkJaWYgKGNtcl9zdGF0ZS0+dGltZXJfZXYgPT0gTlVMTCkgew0KKwkJ CWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSB0aW1lciBldmVudFxuIik7DQorCQkJ LyogcmVseSBvbiBzaWduYWwgY2IgKi8NCisJCX0NCisJCXJldHVybjsNCisJfQ0KKw0KKwkvKiBw YXJlbnQgZW5kZWQsIGRyb3AgbG9jayBhbmQgZXhpdCAqLw0KKwlyZXQgPSBjdGRiX211dGV4X3Jh ZG9zX3VubG9jayhjbXJfc3RhdGUtPmlvY3R4LCBjbXJfc3RhdGUtPm9iamVjdCk7DQorZXJyX2N0 eF9jbGVhbnVwOg0KKwljdGRiX211dGV4X3JhZG9zX2N0eF9kZXN0cm95KGNtcl9zdGF0ZS0+Y2Vw aF9jbHVzdGVyLA0KKwkJCQkgICAgIGNtcl9zdGF0ZS0+aW9jdHgpOw0KKwl0YWxsb2NfZnJlZShj bXJfc3RhdGUpOw0KKwlleGl0KHJldCA/IDEgOiAwKTsNCit9DQorDQoraW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkNCit7DQorCWludCByZXQ7DQorCXN0cnVjdCBjdGRiX211dGV4X3Jh ZG9zX3N0YXRlICpjbXJfc3RhdGU7DQorDQorCXByb2duYW1lID0gYXJndlswXTsNCisNCisJaWYg KGFyZ2MgIT0gNSkgew0KKwkJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgPENlcGggQ2x1c3Rl cj4gPENlcGggdXNlcj4gIg0KKwkJCQkiPFJBRE9TIHBvb2w+IDxSQURPUyBvYmplY3Q+XG4iLA0K KwkJCXByb2duYW1lKTsNCisJCXJldCA9IC1FSU5WQUw7DQorCQlnb3RvIGVycl9vdXQ7DQorCX0N CisNCisJcmV0ID0gc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT05CRiwgMCk7DQorCWlmIChyZXQg IT0gMCkgew0KKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gY29uZmlndXJlIHVuYnVmZmVy ZWQgc3Rkb3V0IEkvT1xuIik7DQorCX0NCisNCisJY21yX3N0YXRlID0gdGFsbG9jX3plcm8oTlVM TCwgc3RydWN0IGN0ZGJfbXV0ZXhfcmFkb3Nfc3RhdGUpOw0KKwlpZiAoY21yX3N0YXRlID09IE5V TEwpIHsNCisJCWZwcmludGYoc3Rkb3V0LCBDVERCX01VVEVYX1NUQVRVU19FUlJPUik7DQorCQly ZXQgPSAtRU5PTUVNOw0KKwkJZ290byBlcnJfb3V0Ow0KKwl9DQorDQorCWNtcl9zdGF0ZS0+Y2Vw aF9jbHVzdGVyX25hbWUgPSBhcmd2WzFdOw0KKwljbXJfc3RhdGUtPmNlcGhfYXV0aF9uYW1lID0g YXJndlsyXTsNCisJY21yX3N0YXRlLT5wb29sX25hbWUgPSBhcmd2WzNdOw0KKwljbXJfc3RhdGUt Pm9iamVjdCA9IGFyZ3ZbNF07DQorDQorCWNtcl9zdGF0ZS0+cHBpZCA9IGdldHBwaWQoKTsNCisJ aWYgKGNtcl9zdGF0ZS0+cHBpZCA9PSAxKSB7DQorCQkvKg0KKwkJICogVGhlIG9yaWdpbmFsIHBh cmVudCBpcyBnb25lIGFuZCB0aGUgcHJvY2VzcyBoYXMNCisJCSAqIGJlZW4gcmVwYXJlbnRlZCB0 byBpbml0LiAgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZQ0KKwkJICogaGVscGVyIGlzIHN0YXJ0ZWQg anVzdCBhcyB0aGUgcGFyZW50IGlzIGtpbGxlZA0KKwkJICogZHVyaW5nIHNodXRkb3duLiAgVGhl IGVycm9yIG1lc3NhZ2UgZG9lc24ndCBuZWVkIHRvDQorCQkgKiBiZSBzdGVsbGFyLCBzaW5jZSB0 aGVyZSB3b24ndCBiZSBhbnl0aGluZyBhcm91bmQgdG8NCisJCSAqIGNhcHR1cmUgYW5kIGxvZyBp dC4uLg0KKwkJICovDQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBQUElEID09IDFcbiIsIHByb2du YW1lKTsNCisJCXJldCA9IC1FUElQRTsNCisJCWdvdG8gZXJyX3N0YXRlX2ZyZWU7DQorCX0NCisN CisJY21yX3N0YXRlLT5ldiA9IHRldmVudF9jb250ZXh0X2luaXQoY21yX3N0YXRlKTsNCisJaWYg KGNtcl9zdGF0ZS0+ZXYgPT0gTlVMTCkgew0KKwkJZnByaW50ZihzdGRlcnIsICJ0ZXZlbnRfY29u dGV4dF9pbml0IGZhaWxlZFxuIik7DQorCQlmcHJpbnRmKHN0ZG91dCwgQ1REQl9NVVRFWF9TVEFU VVNfRVJST1IpOw0KKwkJcmV0ID0gLUVOT01FTTsNCisJCWdvdG8gZXJyX3N0YXRlX2ZyZWU7DQor CX0NCisNCisJLyogd2FpdCBmb3Igc2lndGVybSAqLw0KKwljbXJfc3RhdGUtPnNpZ19ldiA9IHRl dmVudF9hZGRfc2lnbmFsKGNtcl9zdGF0ZS0+ZXYsIGNtcl9zdGF0ZSwgU0lHVEVSTSwgMCwNCisJ CQkJCSAgICAgIGN0ZGJfbXV0ZXhfcmFkb3Nfc2lndGVybV9jYiwNCisJCQkJCSAgICAgIGNtcl9z dGF0ZSk7DQorCWlmIChjbXJfc3RhdGUtPnNpZ19ldiA9PSBOVUxMKSB7DQorCQlmcHJpbnRmKHN0 ZGVyciwgIkZhaWxlZCB0byBjcmVhdGUgc2lnbmFsIGV2ZW50XG4iKTsNCisJCWZwcmludGYoc3Rk b3V0LCBDVERCX01VVEVYX1NUQVRVU19FUlJPUik7DQorCQlyZXQgPSAtRU5PTUVNOw0KKwkJZ290 byBlcnJfc3RhdGVfZnJlZTsNCisJfQ0KKw0KKwkvKiBwZXJpb2RpY2FsbHkgY2hlY2sgcGFyZW50 ICovDQorCWNtcl9zdGF0ZS0+dGltZXJfZXYgPSB0ZXZlbnRfYWRkX3RpbWVyKGNtcl9zdGF0ZS0+ ZXYsIGNtcl9zdGF0ZSwNCisJCQkJCSAgICAgICB0aW1ldmFsX2N1cnJlbnRfb2ZzKDUsMCksDQor CQkJCQkgICAgICAgY3RkYl9tdXRleF9yYWRvc190aW1lcl9jYiwNCisJCQkJCSAgICAgICBjbXJf c3RhdGUpOw0KKwlpZiAoY21yX3N0YXRlLT50aW1lcl9ldiA9PSBOVUxMKSB7DQorCQlmcHJpbnRm KHN0ZGVyciwgIkZhaWxlZCB0byBjcmVhdGUgdGltZXIgZXZlbnRcbiIpOw0KKwkJZnByaW50Zihz dGRvdXQsIENUREJfTVVURVhfU1RBVFVTX0VSUk9SKTsNCisJCXJldCA9IC1FTk9NRU07DQorCQln b3RvIGVycl9zdGF0ZV9mcmVlOw0KKwl9DQorDQorCXJldCA9IGN0ZGJfbXV0ZXhfcmFkb3NfY3R4 X2NyZWF0ZShjbXJfc3RhdGUtPmNlcGhfY2x1c3Rlcl9uYW1lLA0KKwkJCQkJICBjbXJfc3RhdGUt PmNlcGhfYXV0aF9uYW1lLA0KKwkJCQkJICBjbXJfc3RhdGUtPnBvb2xfbmFtZSwNCisJCQkJCSAg JmNtcl9zdGF0ZS0+Y2VwaF9jbHVzdGVyLA0KKwkJCQkJICAmY21yX3N0YXRlLT5pb2N0eCk7DQor CWlmIChyZXQgPCAwKSB7DQorCQlmcHJpbnRmKHN0ZG91dCwgQ1REQl9NVVRFWF9TVEFUVVNfRVJS T1IpOw0KKwkJZ290byBlcnJfc3RhdGVfZnJlZTsNCisJfQ0KKw0KKwlyZXQgPSBjdGRiX211dGV4 X3JhZG9zX2xvY2soY21yX3N0YXRlLT5pb2N0eCwgY21yX3N0YXRlLT5vYmplY3QpOw0KKwlpZiAo KHJldCA9PSAtRUVYSVNUKSB8fCAocmV0ID09IC1FQlVTWSkpIHsNCisJCWZwcmludGYoc3Rkb3V0 LCBDVERCX01VVEVYX1NUQVRVU19DT05URU5ERUQpOw0KKwkJZ290byBlcnJfY3R4X2NsZWFudXA7 DQorCX0gZWxzZSBpZiAocmV0IDwgMCkgew0KKwkJZnByaW50ZihzdGRvdXQsIENUREJfTVVURVhf U1RBVFVTX0VSUk9SKTsNCisJCWdvdG8gZXJyX2N0eF9jbGVhbnVwOw0KKwl9DQorDQorCWNtcl9z dGF0ZS0+aG9sZGluZ19tdXRleCA9IHRydWU7DQorCWZwcmludGYoc3Rkb3V0LCBDVERCX01VVEVY X1NUQVRVU19IT0xESU5HKTsNCisNCisJLyogd2FpdCBmb3IgdGhlIHNpZ25hbCAvIHRpbWVyIGV2 ZW50cyB0byBkbyB0aGVpciB3b3JrICovDQorCXJldCA9IHRldmVudF9sb29wX3dhaXQoY21yX3N0 YXRlLT5ldik7DQorCWlmIChyZXQgPCAwKSB7DQorCQlnb3RvIGVycl9jdHhfY2xlYW51cDsNCisJ fQ0KK2Vycl9jdHhfY2xlYW51cDoNCisJY3RkYl9tdXRleF9yYWRvc19jdHhfZGVzdHJveShjbXJf c3RhdGUtPmNlcGhfY2x1c3RlciwNCisJCQkJICAgICBjbXJfc3RhdGUtPmlvY3R4KTsNCitlcnJf c3RhdGVfZnJlZToNCisJdGFsbG9jX2ZyZWUoY21yX3N0YXRlKTsNCitlcnJfb3V0Og0KKwlyZXR1 cm4gcmV0ID8gMSA6IDA7DQorfQ0KZGlmZiAtLWdpdCBhL2N0ZGIvd3NjcmlwdCBiL2N0ZGIvd3Nj cmlwdA0KaW5kZXggNjEzN2Y5Mi4uYzM0ZjYxOCAxMDA2NDQNCi0tLSBhL2N0ZGIvd3NjcmlwdA0K KysrIGIvY3RkYi93c2NyaXB0DQpAQCAtNzAsNiArNzAsOSBAQCBkZWYgc2V0X29wdGlvbnMob3B0 KToNCiAgICAgb3B0LmFkZF9vcHRpb24oJy0tZW5hYmxlLXBtZGEnLA0KICAgICAgICAgICAgICAg ICAgICBoZWxwPSgiVHVybiBvbiBQQ1AgcG1kYSBzdXBwb3J0IChkZWZhdWx0PW5vKSIpLA0KICAg ICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSdjdGRiX3BtZGEnLCBk ZWZhdWx0PUZhbHNlKQ0KKyAgICBvcHQuYWRkX29wdGlvbignLS1lbmFibGUtY2VwaC1yZWNsb2Nr JywNCisgICAgICAgICAgICAgICAgICAgaGVscD0oIkVuYWJsZSBDZXBoIENUREIgcmVjb3Zlcnkg bG9jayBoZWxwZXIgKGRlZmF1bHQ9bm8pIiksDQorICAgICAgICAgICAgICAgICAgIGFjdGlvbj0i c3RvcmVfdHJ1ZSIsIGRlc3Q9J2N0ZGJfY2VwaF9yZWNsb2NrJywgZGVmYXVsdD1GYWxzZSkNCiAN CiAgICAgb3B0LmFkZF9vcHRpb24oJy0td2l0aC1sb2dkaXInLA0KICAgICAgICAgICAgICAgICAg ICBoZWxwPSgiUGF0aCB0byBsb2cgZGlyZWN0b3J5IiksDQpAQCAtMTYwLDYgKzE2MywxNSBAQCBk ZWYgY29uZmlndXJlKGNvbmYpOg0KICAgICAgICAgY29uZi5lbnYuQ1REQl9QTURBRElSID0gb3Mu cGF0aC5qb2luKGNvbmYuZW52LkxPQ0FMU1RBVEVESVIsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYi9wY3AvcG1kYXMvY3RkYicpDQogDQorICAgIGlm IE9wdGlvbnMub3B0aW9ucy5jdGRiX2NlcGhfcmVjbG9jazoNCisgICAgICAgIGlmIChjb25mLkNI RUNLX0hFQURFUlMoJ3JhZG9zL2xpYnJhZG9zLmgnLCBGYWxzZSwgRmFsc2UsICdyYWRvcycpIGFu ZA0KKwkJCQkJY29uZi5DSEVDS19MSUIoJ3JhZG9zJywgc2hsaWI9VHJ1ZSkpOg0KKyAgICAgICAg ICAgIExvZ3MuaW5mbygnQnVpbGRpbmcgd2l0aCBDZXBoIGxpYnJhZG9zIHJlY292ZXJ5IGxvY2sg c3VwcG9ydCcpDQorICAgICAgICAgICAgY29uZi5kZWZpbmUoJ0hBVkVfTElCUkFET1MnLCAxKQ0K KyAgICAgICAgZWxzZToNCisgICAgICAgICAgICBMb2dzLmVycm9yKCJNaXNzaW5nIGxpYnJhZG9z IGZvciBDZXBoIHJlY292ZXJ5IGxvY2sgc3VwcG9ydCIpDQorICAgICAgICAgICAgc3lzLmV4aXQo MSkNCisNCiAgICAgaGF2ZV9pbmZpbmliYW5kID0gRmFsc2UNCiAgICAgaWYgT3B0aW9ucy5vcHRp b25zLmN0ZGJfaW5maW5pYmFuZDoNCiAgICAgICAgIGliX3N1cHBvcnQgPSBUcnVlDQpAQCAtNTE2 LDYgKzUyOCwxMyBAQCBkZWYgYnVpbGQoYmxkKToNCiAgICAgICAgIGJsZC5JTlNUQUxMX0ZJTEVT KCcke0NUREJfUE1EQURJUn0nLCAndXRpbHMvcG1kYS9SRUFETUUnLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGVzdG5hbWU9J1JFQURNRScpDQogDQorICAgIGlmIGJsZC5lbnYuSEFWRV9M SUJSQURPUzoNCisgICAgICAgIGJsZC5TQU1CQV9CSU5BUlkoJ2N0ZGJfbXV0ZXhfY2VwaF9yYWRv c19oZWxwZXInLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9J3V0aWxzL2NlcGgv Y3RkYl9tdXRleF9jZXBoX3JhZG9zX2hlbHBlci5jJywNCisJCQkgZGVwcz0nY3RkYi1zeXN0ZW0g cmFkb3MnLA0KKwkJCSBpbmNsdWRlcz0naW5jbHVkZScsDQorCQkJIGluc3RhbGxfcGF0aD0nJHtD VERCX0hFTFBFUl9CSU5ESVJ9JykNCisNCiAgICAgc2VkX2V4cHIxID0gJ3N8L3Vzci9sb2NhbC92 YXIvbGliL2N0ZGJ8JXN8ZycgICUgKGJsZC5lbnYuQ1REQl9WQVJESVIpDQogICAgIHNlZF9leHBy MiA9ICdzfC91c3IvbG9jYWwvZXRjL2N0ZGJ8JXN8ZycgICAgICAlIChibGQuZW52LkNUREJfRVRD RElSKQ0KICAgICBzZWRfZXhwcjMgPSAnc3wvdXNyL2xvY2FsL3Zhci9sb2d8JXN8ZycgICAgICAg JSAoYmxkLmVudi5DVERCX0xPR0RJUikNCi0tIA0KMi4xMC4yDQoNCg0KRnJvbSAyZTRlMTcwZGJh NGZkYmQ1YmRmMGM2MmM0YzcxZTM2MWQ5N2JmNmVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0K RnJvbTogRGF2aWQgRGlzc2VsZG9ycCA8ZGRpc3NAc2FtYmEub3JnPg0KRGF0ZTogVGh1LCAxIERl YyAyMDE2IDE0OjIyOjQ1ICswMTAwDQpTdWJqZWN0OiBbUEFUQ0ggMi8zXSBjdGRiL2RvYzogbWFu IHBhZ2UgZm9yIENlcGggUkFET1MgY2x1c3RlciBtdXRleCBoZWxwZXINCg0KU2lnbmVkLW9mZi1i eTogRGF2aWQgRGlzc2VsZG9ycCA8ZGRpc3NAc2FtYmEub3JnPg0KLS0tDQogY3RkYi9kb2MvTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzICstDQogY3RkYi9kb2MvY3RkYl9t dXRleF9jZXBoX3JhZG9zX2hlbHBlci43LnhtbCB8IDkwICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrDQogMiBmaWxlcyBjaGFuZ2VkLCA5MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGN0ZGIvZG9jL2N0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxw ZXIuNy54bWwNCg0KZGlmZiAtLWdpdCBhL2N0ZGIvZG9jL01ha2VmaWxlIGIvY3RkYi9kb2MvTWFr ZWZpbGUNCmluZGV4IDUwYWI3MTkuLjc1NmZlMjcgMTAwNjQ0DQotLS0gYS9jdGRiL2RvYy9NYWtl ZmlsZQ0KKysrIGIvY3RkYi9kb2MvTWFrZWZpbGUNCkBAIC05LDcgKzksOCBAQCBET0NTID0gY3Rk Yi4xIGN0ZGIuMS5odG1sIFwNCiAJY3RkYi43IGN0ZGIuNy5odG1sIFwNCiAJY3RkYi1zdGF0aXN0 aWNzLjcgY3RkYi1zdGF0aXN0aWNzLjcuaHRtbCBcDQogCWN0ZGItZXRjZC43IGN0ZGItZXRjZC43 Lmh0bWwgXA0KLQljdGRiLXR1bmFibGVzLjcgY3RkYi10dW5hYmxlcy43Lmh0bWwNCisJY3RkYi10 dW5hYmxlcy43IGN0ZGItdHVuYWJsZXMuNy5odG1sIFwNCisJY3RkYl9tdXRleF9jZXBoX3JhZG9z X2hlbHBlci43IGN0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXIuNy5odG1sDQogDQogYWxsOiAk KERPQ1MpDQogDQpkaWZmIC0tZ2l0IGEvY3RkYi9kb2MvY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hl bHBlci43LnhtbCBiL2N0ZGIvZG9jL2N0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXIuNy54bWwN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5lNWRlZGM3DQotLS0gL2Rldi9u dWxsDQorKysgYi9jdGRiL2RvYy9jdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyLjcueG1sDQpA QCAtMCwwICsxLDkwIEBADQorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTkt MSI/Pg0KKzwhRE9DVFlQRSByZWZlbnRyeQ0KKwlQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9v ayBYTUwgVjQuNS8vRU4iDQorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1s LzQuNS9kb2Nib29reC5kdGQiPg0KKzxyZWZlbnRyeSBpZD0iY3RkYl9tdXRleF9jZXBoX3JhZG9z X2hlbHBlci43Ij4NCisNCisgIDxyZWZtZXRhPg0KKyAgICA8cmVmZW50cnl0aXRsZT5DZXBoIFJB RE9TIE11dGV4PC9yZWZlbnRyeXRpdGxlPg0KKyAgICA8bWFudm9sbnVtPjc8L21hbnZvbG51bT4N CisgICAgPHJlZm1pc2NpbmZvIGNsYXNzPSJzb3VyY2UiPmN0ZGI8L3JlZm1pc2NpbmZvPg0KKyAg ICA8cmVmbWlzY2luZm8gY2xhc3M9Im1hbnVhbCI+Q1REQiAtIGNsdXN0ZXJlZCBUREIgZGF0YWJh c2U8L3JlZm1pc2NpbmZvPg0KKyAgPC9yZWZtZXRhPg0KKw0KKyAgPHJlZm5hbWVkaXY+DQorICAg IDxyZWZuYW1lPmN0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXI8L3JlZm5hbWU+DQorICAgIDxy ZWZwdXJwb3NlPkNlcGggUkFET1MgY2x1c3RlciBtdXRleCBoZWxwZXI8L3JlZnB1cnBvc2U+DQor ICA8L3JlZm5hbWVkaXY+DQorDQorICA8cmVmc2VjdDE+DQorICAgIDx0aXRsZT5ERVNDUklQVElP TjwvdGl0bGU+DQorICAgIDxwYXJhPg0KKyAgICAgIGN0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxw ZXJfbG9jayBjYW4gYmUgdXNlZCBhcyBhIHJlY292ZXJ5IGxvY2sgcHJvdmlkZXINCisgICAgICBm b3IgQ1REQi4gIFdoZW4gY29uZmlndXJlZCwgc3BsaXQgYnJhaW4gYXZvaWRhbmNlIGR1cmluZyBD VERCIHJlY292ZXJ5DQorICAgICAgd2lsbCBiZSBoYW5kbGVkIHVzaW5nIGxvY2tzIGFnYWluc3Qg YW4gb2JqZWN0IGxvY2F0ZWQgaW4gYSBDZXBoIFJBRE9TDQorICAgICAgcG9vbC4NCisgICAgICBU byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbGluZSBp biB5b3VyIENUREINCisgICAgICBjb25maWcgZmlsZToNCisgICAgPC9wYXJhPg0KKyAgICA8c2Ny ZWVuIGZvcm1hdD0ibGluZXNwZWNpZmljIj4NCitDVERCX1JFQ09WRVJZX0xPQ0s9IiFjdGRiX211 dGV4X2NlcGhfcmFkb3NfaGVscGVyX2xvY2sgW0NsdXN0ZXJdIFtVc2VyXSBbUG9vbF0gW09iamVj dF0iDQorDQorQ2x1c3RlcjogQ2VwaCBjbHVzdGVyIG5hbWUgKGUuZy4gY2VwaCkNCitVc2VyOiBD ZXBoIGNsdXN0ZXIgdXNlciBuYW1lIChlLmcuIGNsaWVudC5hZG1pbikNCitQb29sOiBDZXBoIFJB RE9TIHBvb2wgbmFtZQ0KK09iamVjdDogQ2VwaCBSQURPUyBvYmplY3QgbmFtZQ0KKyAgICA8L3Nj cmVlbj4NCisgICAgPHBhcmE+DQorICAgICAgVGhlIENlcGggY2x1c3RlciA8cGFyYW1ldGVyPkNs dXN0ZXI8L3BhcmFtZXRlcj4gbXVzdCBiZSB1cCBhbmQgcnVubmluZywNCisgICAgICB3aXRoIGEg Y29uZmlndXJhdGlvbiwgYW5kIGtleXJpbmcgZmlsZSBmb3IgPHBhcmFtZXRlcj5Vc2VyPC9wYXJh bWV0ZXI+DQorICAgICAgbG9jYXRlZCBpbiBhIGxpYnJhZG9zIGRlZmF1bHQgc2VhcmNoIHBhdGgg KGUuZy4gL2V0Yy9jZXBoLykuDQorICAgICAgPHBhcmFtZXRlcj5Qb29sPC9wYXJhbWV0ZXI+IG11 c3QgYWxyZWFkeSBleGlzdC4NCisgICAgPC9wYXJhPg0KKyAgPC9yZWZzZWN0MT4NCisNCisgIDxy ZWZzZWN0MT4NCisgICAgPHRpdGxlPlNFRSBBTFNPPC90aXRsZT4NCisgICAgPHBhcmE+DQorICAg ICAgPGNpdGVyZWZlbnRyeT48cmVmZW50cnl0aXRsZT5jdGRiPC9yZWZlbnRyeXRpdGxlPg0KKyAg ICAgIDxtYW52b2xudW0+NzwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiwNCisNCisgICAgICA8 Y2l0ZXJlZmVudHJ5PjxyZWZlbnRyeXRpdGxlPmN0ZGJkPC9yZWZlbnRyeXRpdGxlPg0KKyAgICAg IDxtYW52b2xudW0+MTwvbWFudm9sbnVtPjwvY2l0ZXJlZmVudHJ5PiwNCisNCisgICAgICA8dWxp bmsgdXJsPSJodHRwOi8vY3RkYi5zYW1iYS5vcmcvIi8+DQorICAgIDwvcGFyYT4NCisgIDwvcmVm c2VjdDE+DQorDQorICA8cmVmZW50cnlpbmZvPg0KKyAgICA8YXV0aG9yPg0KKyAgICAgIDxjb250 cmliPg0KKwlUaGlzIGRvY3VtZW50YXRpb24gd2FzIHdyaXR0ZW4gYnkgRGF2aWQgRGlzc2VsZG9y cA0KKyAgICAgIDwvY29udHJpYj4NCisgICAgPC9hdXRob3I+DQorDQorICAgIDxjb3B5cmlnaHQ+ DQorICAgICAgPHllYXI+MjAxNjwveWVhcj4NCisgICAgICA8aG9sZGVyPkRhdmlkIERpc3NlbGRv cnA8L2hvbGRlcj4NCisgICAgPC9jb3B5cmlnaHQ+DQorICAgIDxsZWdhbG5vdGljZT4NCisgICAg ICA8cGFyYT4NCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcg0KKwltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcw0KKwlwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZg0KKwl0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgICAgICA8L3BhcmE+DQorICAgICAg PHBhcmE+DQorCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUNCisJdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZA0KKwl3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSDQorCVBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICAgICAgPC9wYXJhPg0KKyAgICAgIDxwYXJhPg0K KwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMNCisJTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUNCisJPHVs aW5rIHVybD0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzIi8+Lg0KKyAgICAgIDwvcGFyYT4N CisgICAgPC9sZWdhbG5vdGljZT4NCisgIDwvcmVmZW50cnlpbmZvPg0KKw0KKzwvcmVmZW50cnk+ DQotLSANCjIuMTAuMg0KDQoNCkZyb20gYmEwNTgxZmJmY2QyZDU3MThlMjIyM2FiYTMxMjFmOWE5 YzBmOGE0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDENCkZyb206IERhdmlkIERpc3NlbGRvcnAg PGRkaXNzQHNhbWJhLm9yZz4NCkRhdGU6IFR1ZSwgNiBEZWMgMjAxNiAxMzowMzoyNyArMDEwMA0K U3ViamVjdDogW1BBVENIIDMvM10gY3RkYjogYWRkIHRlc3Qgc2NyaXB0IGZvciBjdGRiX211dGV4 X2NlcGhfcmFkb3NfaGVscGVyDQoNClRoaXMgc3RhbmRhbG9uZSB0ZXN0IHNjcmlwdCBwZXJmb3Jt cyB0aGUgZm9sbG93aW5nOg0KLSB1c2luZyBjdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyLCB0 YWtlIGEgbG9jayBvbiB0aGUgQ2VwaCBSQURPUw0KICBvYmplY3QgYSBDTFVTVEVSLyRQT09MLyRP QkpFQ1QgdXNpbmcgdGhlIENlcGgga2V5cmluZyBmb3IgJFVTRVINCiAgKyBjb25maXJtIHRoYXQg bG9jayBpcyBvYnRhaW5lZCwgdmlhIGN0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXIgIjAiDQog ICAgb3V0cHV0DQotIGNoZWNrIFJBRE9TIG9iamVjdCBsb2NrIHN0YXRlLCB1c2luZyB0aGUgInJh ZG9zIGxvY2sgaW5mbyIgY29tbWFuZA0KLSBhdHRlbXB0IHRvIG9idGFpbiB0aGUgbG9jayBhZ2Fp biwgdXNpbmcgY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hlbHBlcg0KICArIGNvbmZpcm0gdGhhdCB0 aGUgbG9jayBpcyBub3Qgc3VjY2Vzc2Z1bGx5IHRha2VuDQotIHRlbGwgdGhlIGZpcnN0IGxvY2tl ciB0byBkcm9wIHRoZSBsb2NrIGFuZCBleGl0LCB2aWEgU0lHVEVSTQ0KLSBvbmNlIHRoZSBmaXJz dCBsb2NrZXIgaGFzIGV4aXRlZCwgYXR0ZW1wdCB0byBnZXQgdGhlIGxvY2sgYWdhaW4NCiAgKyBj b25maXJtIHRoYXQgdGhpcyBhdHRlbXB0IHN1Y2NlZWRzDQoNClNpZ25lZC1vZmYtYnk6IERhdmlk IERpc3NlbGRvcnAgPGRkaXNzQHNhbWJhLm9yZz4NCi0tLQ0KIGN0ZGIvdXRpbHMvY2VwaC90ZXN0 X2NlcGhfcmFkb3NfcmVjbG9jay5zaCB8IDE1MSArKysrKysrKysrKysrKysrKysrKysrKysrKysr Kw0KIDEgZmlsZSBjaGFuZ2VkLCAxNTEgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDc1 NSBjdGRiL3V0aWxzL2NlcGgvdGVzdF9jZXBoX3JhZG9zX3JlY2xvY2suc2gNCg0KZGlmZiAtLWdp dCBhL2N0ZGIvdXRpbHMvY2VwaC90ZXN0X2NlcGhfcmFkb3NfcmVjbG9jay5zaCBiL2N0ZGIvdXRp bHMvY2VwaC90ZXN0X2NlcGhfcmFkb3NfcmVjbG9jay5zaA0KbmV3IGZpbGUgbW9kZSAxMDA3NTUN CmluZGV4IDAwMDAwMDAuLjFhZGFjZjYNCi0tLSAvZGV2L251bGwNCisrKyBiL2N0ZGIvdXRpbHMv Y2VwaC90ZXN0X2NlcGhfcmFkb3NfcmVjbG9jay5zaA0KQEAgLTAsMCArMSwxNTEgQEANCisjIS9i aW4vYmFzaA0KKyMgc3RhbmRhbG9uZSB0ZXN0IGZvciBjdGRiX211dGV4X2NlcGhfcmFkb3NfaGVs cGVyDQorIw0KKyMgQ29weXJpZ2h0IChDKSBEYXZpZCBEaXNzZWxkb3JwIDIwMTYNCisjDQorIyBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQ0KKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yDQorIyAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyMNCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyMgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisjIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUN CisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorIw0KKyMg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UNCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQorDQorIyBYWFggVGhlIGZvbGxvd2luZyBwYXJhbWV0 ZXJzIG1heSByZXF1aXJlIGNvbmZpZ3VyYXRpb246DQorQ0xVU1RFUj0iY2VwaCIJCQkJIyBOYW1l IG9mIHRoZSBDZXBoIGNsdXN0ZXIgdW5kZXIgdGVzdA0KK1VTRVI9ImNsaWVudC5hZG1pbiIJCQkj IENlcGggdXNlciAtIGEga2V5cmluZyBtdXN0IGV4aXN0DQorUE9PTD0icmJkIgkJCQkjIFJBRE9T IHBvb2wgLSBtdXN0IGV4aXN0DQorT0JKRUNUPSJjdGRiX3JlY2xvY2siCQkJIyBSQURPUyBvYmpl Y3Q6IHRhcmdldCBmb3IgbG9jayByZXF1ZXN0cw0KKw0KKyMgdGVzdCBwcm9jZWR1cmU6DQorIyAt IHVzaW5nIGN0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXIsIHRha2UgYSBsb2NrIG9uIHRoZSBD ZXBoIFJBRE9TIG9iamVjdCBhdA0KKyMgICBDTFVTVEVSLyRQT09MLyRPQkpFQ1QgdXNpbmcgdGhl IENlcGgga2V5cmluZyBmb3IgJFVTRVINCisjICAgKyBjb25maXJtIHRoYXQgbG9jayBpcyBvYnRh aW5lZCwgdmlhIGN0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXIgIjAiIG91dHB1dA0KKyMgLSBj aGVjayBSQURPUyBvYmplY3QgbG9jayBzdGF0ZSwgdXNpbmcgdGhlICJyYWRvcyBsb2NrIGluZm8i IGNvbW1hbmQNCisjIC0gYXR0ZW1wdCB0byBvYnRhaW4gdGhlIGxvY2sgYWdhaW4sIHVzaW5nIGN0 ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXINCisjICAgKyBjb25maXJtIHRoYXQgdGhlIGxvY2sg aXMgbm90IHN1Y2Nlc3NmdWxseSB0YWtlbiAoIjEiIG91dHB1dD1jb250ZW50aW9uKQ0KKyMgLSB0 ZWxsIHRoZSBmaXJzdCBsb2NrZXIgdG8gZHJvcCB0aGUgbG9jayBhbmQgZXhpdCwgdmlhIFNJR1RF Uk0NCisjIC0gb25jZSB0aGUgZmlyc3QgbG9ja2VyIGhhcyBleGl0ZWQsIGF0dGVtcHQgdG8gZ2V0 IHRoZSBsb2NrIGFnYWluDQorIyAgICsgY29uZmlybSB0aGF0IHRoaXMgYXR0ZW1wdCBzdWNjZWVk cw0KKw0KK2Z1bmN0aW9uIF9mYWlsKCkgew0KKwllY2hvICJGQUlMRUQ6ICQqIg0KKwlleGl0IDEN Cit9DQorDQorIyB0aGlzIHRlc3QgcmVxdWlyZXMgdGhlIENlcGggInJhZG9zIiBiaW5hcnksIGFu ZCAianEiIGpzb24gcGFyc2VyDQord2hpY2gganEgPiAvZGV2L251bGwgfHwgZXhpdCAxDQord2hp Y2ggcmFkb3MgPiAvZGV2L251bGwgfHwgZXhpdCAxDQord2hpY2ggY3RkYl9tdXRleF9jZXBoX3Jh ZG9zX2hlbHBlciB8fCBleGl0IDENCisNCitUTVBfRElSPSIkKG1rdGVtcCAtLWRpcmVjdG9yeSki IHx8IGV4aXQgMQ0KK3JhZG9zIC1wICIkUE9PTCIgcm0gIiRPQkpFQ1QiDQorDQorKGN0ZGJfbXV0 ZXhfY2VwaF9yYWRvc19oZWxwZXIgIiRDTFVTVEVSIiAiJFVTRVIiICIkUE9PTCIgIiRPQkpFQ1Qi IFwNCisJCQkJCQkJPiAke1RNUF9ESVJ9L2ZpcnN0KSAmDQorbG9ja2VyX3BpZD0kIQ0KKw0KKyMg VE9ETyB3YWl0IGZvciBjdGRiX211dGV4X2NlcGhfcmFkb3NfaGVscGVyIHRvIHdyaXRlIG9uZSBi eXRlIHRvIHN0ZG91dCwNCisjIGluZGljYXRpbmcgbG9jayBhY3F1aXNpdGlvbiBzdWNjZXNzL2Zh aWx1cmUNCitzbGVlcCAxDQorDQorZmlyc3Rfb3V0PSQoY2F0ICR7VE1QX0RJUn0vZmlyc3QpDQor WyAiJGZpcnN0X291dCIgPT0gIjAiIF0gXA0KKwl8fCBfZmFpbCAiZXhwZWN0ZWQgbG9jayBhY3F1 aXNpdGlvbiAoMCksIGJ1dCBnb3QgJGZpcnN0X291dCINCisNCityYWRvcyAtcCAiJFBPT0wiIGxv Y2sgaW5mbyAiJE9CSkVDVCIgY3RkYl9yZWNsb2NrX211dGV4IFwNCisJCQkJCQk+ICR7VE1QX0RJ Un0vbG9ja19zdGF0ZV9maXJzdA0KKw0KKyMgZWNobyAid2l0aCBsb2NrOiBgY2F0ICR7VE1QX0RJ Un0vbG9ja19zdGF0ZV9maXJzdGAiDQorDQorTE9DS19OQU1FPSIkKGpxIC1yICcubmFtZScgJHtU TVBfRElSfS9sb2NrX3N0YXRlX2ZpcnN0KSINCitbICIkTE9DS19OQU1FIiA9PSAiY3RkYl9yZWNs b2NrX211dGV4IiBdIFwNCisJfHwgX2ZhaWwgInVuZXhwZWN0ZWQgbG9jayBuYW1lOiAkTE9DS19O QU1FIg0KK0xPQ0tfVFlQRT0iJChqcSAtciAnLnR5cGUnICR7VE1QX0RJUn0vbG9ja19zdGF0ZV9m aXJzdCkiDQorWyAiJExPQ0tfVFlQRSIgPT0gImV4Y2x1c2l2ZSIgXSBcDQorCXx8IF9mYWlsICJ1 bmV4cGVjdGVkIGxvY2sgdHlwZTogJExPQ0tfVFlQRSINCisNCitMT0NLX0NPVU5UPSIkKGpxIC1y ICcubG9ja2VycyB8IGxlbmd0aCcgJHtUTVBfRElSfS9sb2NrX3N0YXRlX2ZpcnN0KSINCitbICRM T0NLX0NPVU5UIC1lcSAxIF0gfHwgX2ZhaWwgImV4cGVjdGVkIDEgbG9jayBpbiByYWRvcyBzdGF0 ZSwgZ290ICRMT0NLX0NPVU5UIg0KK0xPQ0tFUl9DT09LSUU9IiQoanEgLXIgJy5sb2NrZXJzWzBd LmNvb2tpZScgJHtUTVBfRElSfS9sb2NrX3N0YXRlX2ZpcnN0KSINCitbICIkTE9DS0VSX0NPT0tJ RSIgPT0gImN0ZGJfcmVjbG9ja19tdXRleCIgXSBcDQorCXx8IF9mYWlsICJ1bmV4cGVjdGVkIGxv Y2tlciBjb29raWU6ICRMT0NLRVJfQ09PS0lFIg0KK0xPQ0tFUl9ERVNDPSIkKGpxIC1yICcubG9j a2Vyc1swXS5kZXNjcmlwdGlvbicgJHtUTVBfRElSfS9sb2NrX3N0YXRlX2ZpcnN0KSINCitbICIk TE9DS0VSX0RFU0MiID09ICJDVERCIHJlY292ZXJ5IGxvY2siIF0gXA0KKwl8fCBfZmFpbCAidW5l eHBlY3RlZCBsb2NrZXIgZGVzY3JpcHRpb246ICRMT0NLRVJfREVTQyINCisNCisjIHNlY29uZCBh dHRlbXB0IHdoaWxlIGZpcnN0IGlzIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2sgLSBleHBlY3QgZmFp bHVyZQ0KK2N0ZGJfbXV0ZXhfY2VwaF9yYWRvc19oZWxwZXIgIiRDTFVTVEVSIiAiJFVTRVIiICIk UE9PTCIgIiRPQkpFQ1QiIFwNCisJCQkJCQkJPiAke1RNUF9ESVJ9L3NlY29uZA0KK3NlY29uZF9v dXQ9JChjYXQgJHtUTVBfRElSfS9zZWNvbmQpDQorWyAiJHNlY29uZF9vdXQiID09ICIxIiBdIFwN CisJfHwgX2ZhaWwgImV4cGVjdGVkIGxvY2sgY29udGVudGlvbiAoMSksIGJ1dCBnb3QgJHNlY29u ZF9vdXQiDQorDQorIyBjb25maXJtIGxvY2sgc3RhdGUgZGlkbid0IGNoYW5nZQ0KK3JhZG9zIC1w ICIkUE9PTCIgbG9jayBpbmZvICIkT0JKRUNUIiBjdGRiX3JlY2xvY2tfbXV0ZXggXA0KKwkJCQkJ CT4gJHtUTVBfRElSfS9sb2NrX3N0YXRlX3NlY29uZA0KKw0KK2RpZmYgJHtUTVBfRElSfS9sb2Nr X3N0YXRlX2ZpcnN0ICR7VE1QX0RJUn0vbG9ja19zdGF0ZV9zZWNvbmQgXA0KKwkJCQkJfHwgX2Zh aWwgInVuZXhwZWN0ZWQgbG9jayBzdGF0ZSBjaGFuZ2UiDQorDQorIyB0ZWxsIGZpcnN0IGxvY2tl ciB0byBkcm9wIHRoZSBsb2NrIGFuZCB0ZXJtaW5hdGUNCitraWxsICRsb2NrZXJfcGlkIHx8IGV4 aXQgMQ0KKw0KK3dhaXQgJGxvY2tlcl9waWQgJj4gL2Rldi9udWxsDQorDQorcmFkb3MgLXAgIiRQ T09MIiBsb2NrIGluZm8gIiRPQkpFQ1QiIGN0ZGJfcmVjbG9ja19tdXRleCBcDQorCQkJCQkJPiAk e1RNUF9ESVJ9L2xvY2tfc3RhdGVfdGhpcmQNCisjIGVjaG8gIndpdGhvdXQgbG9jazogYGNhdCAk e1RNUF9ESVJ9L2xvY2tfc3RhdGVfdGhpcmRgIg0KKw0KK0xPQ0tfTkFNRT0iJChqcSAtciAnLm5h bWUnICR7VE1QX0RJUn0vbG9ja19zdGF0ZV90aGlyZCkiDQorWyAiJExPQ0tfTkFNRSIgPT0gImN0 ZGJfcmVjbG9ja19tdXRleCIgXSBcDQorCXx8IF9mYWlsICJ1bmV4cGVjdGVkIGxvY2sgbmFtZTog JExPQ0tfTkFNRSINCitMT0NLX1RZUEU9IiQoanEgLXIgJy50eXBlJyAke1RNUF9ESVJ9L2xvY2tf c3RhdGVfdGhpcmQpIg0KK1sgIiRMT0NLX1RZUEUiID09ICJleGNsdXNpdmUiIF0gXA0KKwl8fCBf ZmFpbCAidW5leHBlY3RlZCBsb2NrIHR5cGU6ICRMT0NLX1RZUEUiDQorDQorTE9DS19DT1VOVD0i JChqcSAtciAnLmxvY2tlcnMgfCBsZW5ndGgnICR7VE1QX0RJUn0vbG9ja19zdGF0ZV90aGlyZCki DQorWyAkTE9DS19DT1VOVCAtZXEgMCBdIFwNCisJfHwgX2ZhaWwgImRpZG5cJ3QgZXhwZWN0IGFu eSBsb2NrcyBpbiByYWRvcyBzdGF0ZSwgZ290ICRMT0NLX0NPVU5UIg0KKw0KK2V4ZWMgPiR7VE1Q X0RJUn0vdGhpcmQgLS0gY3RkYl9tdXRleF9jZXBoX3JhZG9zX2hlbHBlciAiJENMVVNURVIiICIk VVNFUiIgIiRQT09MIiAiJE9CSkVDVCIgJg0KK2xvY2tlcl9waWQ9JCENCisNCitzbGVlcCAxDQor DQorcmFkb3MgLXAgIiRQT09MIiBsb2NrIGluZm8gIiRPQkpFQ1QiIGN0ZGJfcmVjbG9ja19tdXRl eCBcDQorCQkJCQkJPiAke1RNUF9ESVJ9L2xvY2tfc3RhdGVfZm91cnRoDQorIyBlY2hvICJ3aXRo IGxvY2sgYWdhaW46IGBjYXQgJHtUTVBfRElSfS9sb2NrX3N0YXRlX2ZvdXJ0aGAiDQorDQorTE9D S19OQU1FPSIkKGpxIC1yICcubmFtZScgJHtUTVBfRElSfS9sb2NrX3N0YXRlX2ZvdXJ0aCkiDQor WyAiJExPQ0tfTkFNRSIgPT0gImN0ZGJfcmVjbG9ja19tdXRleCIgXSBcDQorCXx8IF9mYWlsICJ1 bmV4cGVjdGVkIGxvY2sgbmFtZTogJExPQ0tfTkFNRSINCitMT0NLX1RZUEU9IiQoanEgLXIgJy50 eXBlJyAke1RNUF9ESVJ9L2xvY2tfc3RhdGVfZm91cnRoKSINCitbICIkTE9DS19UWVBFIiA9PSAi ZXhjbHVzaXZlIiBdIFwNCisJfHwgX2ZhaWwgInVuZXhwZWN0ZWQgbG9jayB0eXBlOiAkTE9DS19U WVBFIg0KKw0KK0xPQ0tfQ09VTlQ9IiQoanEgLXIgJy5sb2NrZXJzIHwgbGVuZ3RoJyAke1RNUF9E SVJ9L2xvY2tfc3RhdGVfZm91cnRoKSINCitbICRMT0NLX0NPVU5UIC1lcSAxIF0gfHwgX2ZhaWwg ImV4cGVjdGVkIDEgbG9jayBpbiByYWRvcyBzdGF0ZSwgZ290ICRMT0NLX0NPVU5UIg0KK0xPQ0tF Ul9DT09LSUU9IiQoanEgLXIgJy5sb2NrZXJzWzBdLmNvb2tpZScgJHtUTVBfRElSfS9sb2NrX3N0 YXRlX2ZvdXJ0aCkiDQorWyAiJExPQ0tFUl9DT09LSUUiID09ICJjdGRiX3JlY2xvY2tfbXV0ZXgi IF0gXA0KKwl8fCBfZmFpbCAidW5leHBlY3RlZCBsb2NrZXIgY29va2llOiAkTE9DS0VSX0NPT0tJ RSINCitMT0NLRVJfREVTQz0iJChqcSAtciAnLmxvY2tlcnNbMF0uZGVzY3JpcHRpb24nICR7VE1Q X0RJUn0vbG9ja19zdGF0ZV9mb3VydGgpIg0KK1sgIiRMT0NLRVJfREVTQyIgPT0gIkNUREIgcmVj b3ZlcnkgbG9jayIgXSBcDQorCXx8IF9mYWlsICJ1bmV4cGVjdGVkIGxvY2tlciBkZXNjcmlwdGlv bjogJExPQ0tFUl9ERVNDIg0KKw0KK2tpbGwgJGxvY2tlcl9waWQgfHwgZXhpdCAxDQord2FpdCAk bG9ja2VyX3BpZCAmPiAvZGV2L251bGwNCisNCit0aGlyZF9vdXQ9JChjYXQgJHtUTVBfRElSfS90 aGlyZCkNCitbICIkdGhpcmRfb3V0IiA9PSAiMCIgXSBcDQorCXx8IF9mYWlsICJleHBlY3RlZCBs b2NrIGFjcXVpc2l0aW9uICgwKSwgYnV0IGdvdCAkdGhpcmRfb3V0Ig0KKw0KK3JtICR7VE1QX0RJ Un0vKg0KK3JtZGlyICRUTVBfRElSDQorDQorZWNobyAiJDA6IGFsbCB0ZXN0cyBwYXNzZWQiDQot LSANCjIuMTAuMg0KDQo= --MP_/nZSbJIMSU/CZPYnFKN0N96H--