Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1YiRD5-0003lZ-6O for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2015 17:34:48 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1YiRD4-0002Em-Jr for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Apr 2015 17:34:46 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1YiRD0-0002Ee-S4 for pgsql-hackers@postgresql.org; Wed, 15 Apr 2015 17:34:43 +0000 Received: from linode.thelabyrinth.net ([2600:3c00::f03c:91ff:fe69:8d76] helo=mail.thelabyrinth.net) by makus.postgresql.org with esmtps (TLS1.1:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1YiRCo-000784-0y; Wed, 15 Apr 2015 17:34:40 +0000 Received: from theseus-media.home.thelabyrinth.net (unknown [206.222.178.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dsteele) by mail.thelabyrinth.net (Postfix) with ESMTPSA id 03D1A139C2; Wed, 15 Apr 2015 17:34:26 +0000 (UTC) Message-ID: <552EA121.1090603@pgmasters.net> Date: Wed, 15 Apr 2015 13:34:25 -0400 From: David Steele User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Sawada Masahiko CC: Tatsuo Ishii , Simon Riggs , PostgreSQL-development , Abhijit Menon-Sen , Fujii Masao Subject: Re: Auditing extension for PostgreSQL (Take 2) References: <552326EE.4060509@pgmasters.net> <552D2C1A.3060002@pgmasters.net> <20150415.081354.1167351714960358354.t-ishii@sraoss.co.jp> <552DA959.2010102@pgmasters.net> In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="oM4rWVeKeQ17ULCebTkfPqPELBeL0CjUu" X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --oM4rWVeKeQ17ULCebTkfPqPELBeL0CjUu Content-Type: multipart/mixed; boundary="------------050700060907060606010001" This is a multi-part message in MIME format. --------------050700060907060606010001 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 4/15/15 11:30 AM, Sawada Masahiko wrote: > On Wed, Apr 15, 2015 at 10:52 AM, Sawada Masahiko wrote: >> I tested v8 patch with CURSOR case I mentioned before, and got >> segmentation fault again. >> Here are log messages in my environment, >> >> =3D# select test(); >> LOG: server process (PID 29730) was terminated by signal 11: >> Segmentation fault >> DETAIL: Failed process was running: select test(); >> LOG: terminating any other active server processes >> WARNING: terminating connection because of crash of another server pr= ocess >> DETAIL: The postmaster has commanded this server process to roll back= >> the current transaction and exit, because another server process >> exited abnormally and possibly corrupted shared memory. >> HINT: In a moment you should be able to reconnect to the database and= >> repeat your command. >> FATAL: the database system is in recovery mode >=20 > I investigated this problem and inform you my result here. >=20 > When we execute test() function I mentioned, the three stack items in > total are stored into auditEventStack. > The two of them are freed by stack_pop() -> stack_free() (i.g, > stack_free() is called by stack_pop()). > One of them is freed by PortalDrop() -> .. -> > MemoryContextDeleteChildren() -> ... -> stack_free(). > And it is freed at the same time as deleting pg_audit memory context, > and stack will be completely empty. >=20 > But after freeing all items, finish_xact_command() function could call > PortalDrop(), so ExecutorEnd() function could be called again. > pg_audit has ExecutorEnd_hook, so postgres tries to free that item.. SE= GV. >=20 > In my environment, the following change fixes it. >=20 > --- pg_audit.c.org 2015-04-15 14:21:07.541866525 +0900 > +++ pg_audit.c 2015-04-15 11:36:53.758877339 +0900 > @@ -1291,7 +1291,7 @@ > standard_ExecutorEnd(queryDesc); >=20 > /* Pop the audit event off the stack */ > - if (!internalStatement) > + if (!internalStatement && auditEventStack !=3D NULL) > { > stack_pop(auditEventStack->stackId); > } >=20 > It might be good idea to add Assert() at before calling stack_pop(). >=20 > I'm not sure this change is exactly correct, but I hope this > information helps you. I appreciate you taking the time to look - this is the same conclusion I came to. I also hardened another area that I thought might be vulnerable= =2E I've seen this problem with explicit cursors before (and fixed it in another place a while ago). The memory context that is current in ExecutorStart is freed before ExecutorEnd is called only in this case as far as I can tell. I'm not sure this is very consistent behavior. I have attached patch v9 which fixes this issue as you suggested, but I'm not completely satisfied with it. It seems like there could be an unintentional pop from the stack in a case of deeper nesting. This might not be possible but it's hard to disprove. I'll think about it some more, but meanwhile this patch addresses the present issue. --=20 - David Steele david@pgmasters.net --------------050700060907060606010001 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pg_audit-v9.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pg_audit-v9.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4 IGQ2M2U0NDEuLmVkOWNmNmEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvTWFrZWZpbGUKKysrIGIv Y29udHJpYi9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQCBTVUJESVJTID0gXAogCQlvaWQy bmFtZQlcCiAJCXBhZ2VpbnNwZWN0CVwKIAkJcGFzc3dvcmRjaGVjawlcCisJCXBnX2F1ZGl0 CVwKIAkJcGdfYnVmZmVyY2FjaGUJXAogCQlwZ19mcmVlc3BhY2VtYXAgXAogCQlwZ19wcmV3 YXJtCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvLmdpdGlnbm9yZSBiL2NvbnRy aWIvcGdfYXVkaXQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hNTI2N2NmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19hdWRpdC8uZ2l0 aWdub3JlCkBAIC0wLDAgKzEsNSBAQAorbG9nLworcmVzdWx0cy8KK3RtcF9jaGVjay8KK3Jl Z3Jlc3Npb24uZGlmZnMKK3JlZ3Jlc3Npb24ub3V0CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X2F1ZGl0L01ha2VmaWxlIGIvY29udHJpYi9wZ19hdWRpdC9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM2MDExCi0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19hdWRpdC9NYWtlZmlsZQpAQCAtMCwwICsxLDIxIEBACisjIHBnX2F1ZGl0 L01ha2VmaWxlCisKK01PRFVMRSA9IHBnX2F1ZGl0CitNT0RVTEVfYmlnID0gcGdfYXVkaXQK K09CSlMgPSBwZ19hdWRpdC5vCisKK0VYVEVOU0lPTiA9IHBnX2F1ZGl0CitSRUdSRVNTID0g cGdfYXVkaXQKK1JFR1JFU1NfT1BUUyA9IC0tdGVtcC1jb25maWc9JCh0b3Bfc3JjZGlyKS9j b250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbmYKK0RBVEEgPSBwZ19hdWRpdC0tMS4wLjAu c3FsCisKK2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0g JChzaGVsbCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitz dWJkaXIgPSBjb250cmliL3BnX2F1ZGl0Cit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5jbHVk ZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9z cmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9j b250cmliL3BnX2F1ZGl0L2V4cGVjdGVkL3BnX2F1ZGl0LWRlcGFyc2Uub3V0IGIvY29udHJp Yi9wZ19hdWRpdC9leHBlY3RlZC9wZ19hdWRpdC1kZXBhcnNlLm91dApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzI2OTljCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19hdWRpdC9leHBlY3RlZC9wZ19hdWRpdC1kZXBhcnNlLm91dApAQCAtMCwwICsx LDkyMSBAQAorLS0gTG9hZCBwZ19hdWRpdCBtb2R1bGUKK2NyZWF0ZSBleHRlbnNpb24gcGdf YXVkaXQ7CistLQorLS0gQ3JlYXRlIGEgc3VwZXJ1c2VyIHJvbGUgdGhhdCB3ZSBrbm93IHRo ZSBuYW1lIG9mIGZvciB0ZXN0aW5nCitDUkVBVEUgVVNFUiBzdXBlciBTVVBFUlVTRVI7Citc Y29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXI7CistLQorLS0gQ3JlYXRlIGF1ZGl0 b3Igcm9sZQorQ1JFQVRFIFJPTEUgYXVkaXRvcjsKKy0tCistLSBDcmVhdGUgZmlyc3QgdGVz dCB1c2VyCitDUkVBVEUgVVNFUiB1c2VyMTsKK0FMVEVSIFJPTEUgdXNlcjEgU0VUIHBnX2F1 ZGl0LmxvZyA9ICdkZGwsIFJPTEUnOworQUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVkaXQu bG9nX25vdGljZSA9IG9uOworLS0KKy0tIENyZWF0ZSwgc2VsZWN0LCBkcm9wIChzZWxlY3Qg d2lsbCBub3QgYmUgYXVkaXRlZCkKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2Vy MQorQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0IChpZCBJTlQpOworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMSwxLERETCxDUkVBVEUgVEFCTEUsVEFCTEUscHVibGljLnRlc3QsQ1JFQVRF IFRBQkxFIHB1YmxpYy50ZXN0IChpZCBJTlQpOworU0VMRUNUICogRlJPTSB0ZXN0OworIGlk IAorLS0tLQorKDAgcm93cykKKworRFJPUCBUQUJMRSB0ZXN0OworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMiwxLERETCxEUk9QIFRBQkxFLFRBQkxFLHB1YmxpYy50ZXN0LERST1AgVEFC TEUgdGVzdDsKKy0tCistLSBDcmVhdGUgc2Vjb25kIHRlc3QgdXNlcgorXGNvbm5lY3QgY29u dHJpYl9yZWdyZXNzaW9uIHN1cGVyCitDUkVBVEUgVVNFUiB1c2VyMjsKK0FMVEVSIFJPTEUg dXNlcjIgU0VUIHBnX2F1ZGl0LmxvZyA9ICdSZWFkLCB3cml0RSc7CitBTFRFUiBST0xFIHVz ZXIyIFNFVCBwZ19hdWRpdC5sb2dfbm90aWNlID0gb247CitBTFRFUiBST0xFIHVzZXIyIFNF VCBwZ19hdWRpdC5yb2xlID0gYXVkaXRvcjsKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lv biB1c2VyMgorQ1JFQVRFIFRBQkxFIHRlc3QyIChpZCBJTlQpOworR1JBTlQgU0VMRUNUIE9O IFRBQkxFIHB1YmxpYy50ZXN0MiBUTyBhdWRpdG9yOworLS0KKy0tIFJvbGUtYmFzZWQgdGVz dHMKK0NSRUFURSBUQUJMRSB0ZXN0MworKAorCWlkIElOVAorKTsKK1NFTEVDVCBjb3VudCgq KQorICBGUk9NCisoCisJU0VMRUNUIHJlbG5hbWUKKwkgIEZST00gcGdfY2xhc3MKKwkgIExJ TUlUIDEKKykgU1VCUVVFUlk7CisgY291bnQgCistLS0tLS0tCisgICAgIDEKKygxIHJvdykK KworU0VMRUNUICoKKyAgRlJPTSB0ZXN0MywgdGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiwxLDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUICoKKyAgRlJPTSB0ZXN0MywgdGVzdDI7 IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGlj LnRlc3QyLCJTRUxFQ1QgKgorICBGUk9NIHRlc3QzLCB0ZXN0MjsiCisgaWQgfCBpZCAKKy0t LS0rLS0tLQorKDAgcm93cykKKworR1JBTlQgSU5TRVJUCisgICBPTiBUQUJMRSBwdWJsaWMu dGVzdDMKKyAgIFRPIGF1ZGl0b3I7CistLQorLS0gQ3JlYXRlIGEgdmlldyB0byB0ZXN0IGxv Z2dpbmcKK0NSRUFURSBWSUVXIHZ3X3Rlc3QzIEFTCitTRUxFQ1QgKgorICBGUk9NIHRlc3Qz OworR1JBTlQgU0VMRUNUCisgICBPTiB2d190ZXN0MworICAgVE8gYXVkaXRvcjsKKy0tCist LSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBzZWxlY3Qgb24gdndfdGVzdDMKKy0t IHNlbGVjdCBvbiB0ZXN0MgorU0VMRUNUICoKKyAgRlJPTSB2d190ZXN0MywgdGVzdDI7CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyLDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUICoKKyAg RlJPTSB2d190ZXN0MywgdGVzdDI7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwyLDEsUkVB RCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3QyLCJTRUxFQ1QgKgorICBGUk9NIHZ3X3Rlc3Qz LCB0ZXN0MjsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDIsMSxSRUFELFNFTEVDVCxWSUVX LHB1YmxpYy52d190ZXN0MywiU0VMRUNUICoKKyAgRlJPTSB2d190ZXN0MywgdGVzdDI7Igor IGlkIHwgaWQgCistLS0tKy0tLS0KKygwIHJvd3MpCisKKy0tCistLSBPYmplY3QgbG9nZ2Vk IGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24gdGVzdDMKKy0tIHNlbGVjdCBvbiB0ZXN0Mgor V0lUSCBDVEUgQVMKKygKKwlTRUxFQ1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJ TlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiwzLDEsV1JJVEUsSU5TRVJULCwsIldJVEggQ1RFIEFTCisoCisJU0VMRUNUIGlkCisJ ICBGUk9NIHRlc3QyCispCitJTlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00g Y3RlOyIKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMywxLFdSSVRFLElOU0VSVCxUQUJMRSxw dWJsaWMudGVzdDMsIldJVEggQ1RFIEFTCisoCisJU0VMRUNUIGlkCisJICBGUk9NIHRlc3Qy CispCitJTlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOyIKK05PVElD RTogIEFVRElUOiBPQkpFQ1QsMywxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy50ZXN0Miwi V0lUSCBDVEUgQVMKKygKKwlTRUxFQ1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJ TlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorLS0KKy0tIE9iamVjdCBsb2dn ZWQgYmVjYXVzZSBvZjoKKy0tIGluc2VydCBvbiB0ZXN0MworV0lUSCBDVEUgQVMKKygKKwlJ TlNFUlQgSU5UTyB0ZXN0MyBWQUxVRVMgKDEpCisJICAgICAgICAgICAgICAgUkVUVVJOSU5H IGlkCispCitJTlNFUlQgSU5UTyB0ZXN0MgorU0VMRUNUIGlkCisgIEZST00gY3RlOworTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sNCwxLFdSSVRFLElOU0VSVCwsLCJXSVRIIENURSBBUwor KAorCUlOU0VSVCBJTlRPIHRlc3QzIFZBTFVFUyAoMSkKKwkgICAgICAgICAgICAgICBSRVRV Uk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRlc3QyCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7 IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCw0LDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1Ymxp Yy50ZXN0MywiV0lUSCBDVEUgQVMKKygKKwlJTlNFUlQgSU5UTyB0ZXN0MyBWQUxVRVMgKDEp CisJICAgICAgICAgICAgICAgUkVUVVJOSU5HIGlkCispCitJTlNFUlQgSU5UTyB0ZXN0Mgor U0VMRUNUIGlkCisgIEZST00gY3RlOyIKK0dSQU5UIFVQREFURSBPTiBUQUJMRSBwdWJsaWMu dGVzdDIgVE8gYXVkaXRvcjsKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6Cist LSBpbnNlcnQgb24gdGVzdDMKKy0tIHVwZGF0ZSBvbiB0ZXN0MgorV0lUSCBDVEUgQVMKKygK KwlVUERBVEUgdGVzdDIKKwkgICBTRVQgaWQgPSAxCisJUkVUVVJOSU5HIGlkCispCitJTlNF UlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sNSwxLFdSSVRFLElOU0VSVCwsLCJXSVRIIENURSBBUworKAorCVVQREFURSB0 ZXN0MgorCSAgIFNFVCBpZCA9IDEKKwlSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRl c3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCw1 LDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0MywiV0lUSCBDVEUgQVMKKygKKwlV UERBVEUgdGVzdDIKKwkgICBTRVQgaWQgPSAxCisJUkVUVVJOSU5HIGlkCispCitJTlNFUlQg SU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOyIKK05PVElDRTogIEFVRElUOiBP QkpFQ1QsNSwxLFdSSVRFLFVQREFURSxUQUJMRSxwdWJsaWMudGVzdDIsIldJVEggQ1RFIEFT CisoCisJVVBEQVRFIHRlc3QyCisJICAgU0VUIGlkID0gMQorCVJFVFVSTklORyBpZAorKQor SU5TRVJUIElOVE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsiCistLQorLS0gT2Jq ZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gaW5zZXJ0IG9uIHRlc3QyCitXSVRIIENURSBB UworKAorCUlOU0VSVCBJTlRPIHRlc3QyIFZBTFVFUyAoMSkKKwkgICAgICAgICAgICAgICBS RVRVUk5JTkcgaWQKKykKK1VQREFURSB0ZXN0MworICAgU0VUIGlkID0gY3RlLmlkCisgIEZS T00gY3RlCisgV0hFUkUgdGVzdDMuaWQgPD4gY3RlLmlkOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sNiwxLFdSSVRFLFVQREFURSwsLCJXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRP IHRlc3QyIFZBTFVFUyAoMSkKKwkgICAgICAgICAgICAgICBSRVRVUk5JTkcgaWQKKykKK1VQ REFURSB0ZXN0MworICAgU0VUIGlkID0gY3RlLmlkCisgIEZST00gY3RlCisgV0hFUkUgdGVz dDMuaWQgPD4gY3RlLmlkOyIKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsNiwxLFdSSVRFLElO U0VSVCxUQUJMRSxwdWJsaWMudGVzdDIsIldJVEggQ1RFIEFTCisoCisJSU5TRVJUIElOVE8g dGVzdDIgVkFMVUVTICgxKQorCSAgICAgICAgICAgICAgIFJFVFVSTklORyBpZAorKQorVVBE QVRFIHRlc3QzCisgICBTRVQgaWQgPSBjdGUuaWQKKyAgRlJPTSBjdGUKKyBXSEVSRSB0ZXN0 My5pZCA8PiBjdGUuaWQ7IgorLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDIg c28gdGhhdCBvbmx5IG9iamVjdCBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29u dHJpYl9yZWdyZXNzaW9uIHN1cGVyCithbHRlciByb2xlIHVzZXIyIHNldCBwZ19hdWRpdC5s b2cgPSAnTk9ORSc7CitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNlcjIKKy0tCist LSBDcmVhdGUgdGVzdDQgYW5kIGFkZCBwZXJtaXNzaW9ucworQ1JFQVRFIFRBQkxFIHRlc3Q0 CisoCisJaWQgaW50LAorCW5hbWUgdGV4dAorKTsKK0dSQU5UIFNFTEVDVCAobmFtZSkKKyAg IE9OIFRBQkxFIHB1YmxpYy50ZXN0NAorICAgVE8gYXVkaXRvcjsKK0dSQU5UIFVQREFURSAo aWQpCisgICBPTiBUQUJMRSBwdWJsaWMudGVzdDQKKyAgIFRPIGF1ZGl0b3I7CitHUkFOVCBp bnNlcnQgKG5hbWUpCisgICBPTiBUQUJMRSBwdWJsaWMudGVzdDQKKyAgIFRPIGF1ZGl0b3I7 CistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK1NFTEVDVCBpZAorICBGUk9NIHB1YmxpYy50 ZXN0NDsKKyBpZCAKKy0tLS0KKygwIHJvd3MpCisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJl Y2F1c2Ugb2Y6CistLSBzZWxlY3QgKG5hbWUpIG9uIHRlc3Q0CitTRUxFQ1QgbmFtZQorICBG Uk9NIHB1YmxpYy50ZXN0NDsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMSwxLFJFQUQsU0VM RUNULFRBQkxFLHB1YmxpYy50ZXN0NCwiU0VMRUNUIG5hbWUKKyAgRlJPTSBwdWJsaWMudGVz dDQ7IgorIG5hbWUgCistLS0tLS0KKygwIHJvd3MpCisKKy0tCistLSBOb3Qgb2JqZWN0IGxv Z2dlZAorSU5TRVJUIElOVE8gcHVibGljLnRlc3Q0IChpZCkKKyAgICAgICAgICAgICAgICAg IFZBTFVFUyAoMSk7CistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gaW5z ZXJ0IChuYW1lKSBvbiB0ZXN0NAorSU5TRVJUIElOVE8gcHVibGljLnRlc3Q0IChuYW1lKQor ICAgICAgICAgICAgICAgICAgVkFMVUVTICgndGVzdCcpOworTk9USUNFOiAgQVVESVQ6IE9C SkVDVCwyLDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0NCwiSU5TRVJUIElOVE8g cHVibGljLnRlc3Q0IChuYW1lKQorICAgICAgICAgICAgICAgICAgVkFMVUVTICgndGVzdCcp OyIKKy0tCistLSBOb3Qgb2JqZWN0IGxvZ2dlZAorVVBEQVRFIHB1YmxpYy50ZXN0NAorICAg U0VUIG5hbWUgPSAnZm9vJzsKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6Cist LSB1cGRhdGUgKGlkKSBvbiB0ZXN0NAorVVBEQVRFIHB1YmxpYy50ZXN0NAorICAgU0VUIGlk ID0gMTsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMywxLFdSSVRFLFVQREFURSxUQUJMRSxw dWJsaWMudGVzdDQsIlVQREFURSBwdWJsaWMudGVzdDQKKyAgIFNFVCBpZCA9IDE7IgorLS0K Ky0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAobmFtZSkgb24gdGVz dDQKKy0tIHVwZGF0ZSAobmFtZSkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNlbGVjdCAobmFt ZSkgZHVlIHRvIG9yZGVyaW5nCit1cGRhdGUgcHVibGljLnRlc3Q0IHNldCBuYW1lID0gJ2Zv bycgd2hlcmUgbmFtZSA9ICdiYXInOworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCw0LDEsV1JJ VEUsVVBEQVRFLFRBQkxFLHB1YmxpYy50ZXN0NCx1cGRhdGUgcHVibGljLnRlc3Q0IHNldCBu YW1lID0gJ2Zvbycgd2hlcmUgbmFtZSA9ICdiYXInOworLS0KKy0tIERyb3AgdGVzdCB0YWJs ZXMKK0RST1AgVEFCTEUgdGVzdDI7CitEUk9QIFZJRVcgdndfdGVzdDM7CitEUk9QIFRBQkxF IHRlc3QzOworRFJPUCBUQUJMRSB0ZXN0NDsKKy0tCistLSBDaGFuZ2UgcGVybWlzc2lvbnMg b2YgdXNlciAxIHNvIHRoYXQgc2Vzc2lvbiBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5l Y3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVyCithbHRlciByb2xlIHVzZXIxIHNldCBwZ19h dWRpdC5sb2cgPSAnRERMLCBSRUFEJzsKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1 c2VyMQorLS0KKy0tIENyZWF0ZSB0YWJsZSBpcyBzZXNzaW9uIGxvZ2dlZAorQ1JFQVRFIFRB QkxFIHB1YmxpYy5hY2NvdW50CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlwYXNzd29y ZCBURVhULAorCWRlc2NyaXB0aW9uIFRFWFQKKyk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwxLDEsRERMLENSRUFURSBUQUJMRSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiQ1JFQVRFIFRB QkxFIHB1YmxpYy5hY2NvdW50CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlwYXNzd29y ZCBURVhULAorCWRlc2NyaXB0aW9uIFRFWFQKKyk7IgorLS0KKy0tIFNlbGVjdCBpcyBzZXNz aW9uIGxvZ2dlZAorU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50OworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMiwxLFJFQUQsU0VMRUNULCwsIlNFTEVDVCAqCisgIEZST00gYWNjb3VudDsi CisgaWQgfCBuYW1lIHwgcGFzc3dvcmQgfCBkZXNjcmlwdGlvbiAKKy0tLS0rLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorKDAgcm93cykKKworLS0KKy0tIEluc2VydCBpcyBu b3QgbG9nZ2VkCitJTlNFUlQgSU5UTyBhY2NvdW50IChpZCwgbmFtZSwgcGFzc3dvcmQsIGRl c2NyaXB0aW9uKQorCQkJIFZBTFVFUyAoMSwgJ3VzZXIxJywgJ0hBU0gxJywgJ2JsYWgsIGJs YWgnKTsKKy0tCistLSBDaGFuZ2UgcGVybWlzc2lvbnMgb2YgdXNlciAxIHNvIHRoYXQgb25s eSBvYmplY3QgbG9nZ2luZyB3aWxsIGJlIGRvbmUKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVz c2lvbiBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQubG9nID0gJ25vbmUn OworYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQucm9sZSA9ICdhdWRpdG9yJzsKK1xj b25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMQorLS0KKy0tIEF1ZGl0b3IgZ3JhbnRz IG5vdCBsb2dnZWQKK0dSQU5UIFNFTEVDVCAocGFzc3dvcmQpLAorCSAgVVBEQVRFIChuYW1l LCBwYXNzd29yZCkKKyAgIE9OIFRBQkxFIHB1YmxpYy5hY2NvdW50CisgICBUTyBhdWRpdG9y OworLS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCitTRUxFQ1QgaWQsCisJICAgbmFtZQorICBG Uk9NIGFjY291bnQ7CisgaWQgfCBuYW1lICAKKy0tLS0rLS0tLS0tLQorICAxIHwgdXNlcjEK KygxIHJvdykKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVj dCAocGFzc3dvcmQpIG9uIGFjY291bnQKK1NFTEVDVCBwYXNzd29yZAorICBGUk9NIGFjY291 bnQ7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDEsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJs aWMuYWNjb3VudCwiU0VMRUNUIHBhc3N3b3JkCisgIEZST00gYWNjb3VudDsiCisgcGFzc3dv cmQgCistLS0tLS0tLS0tCisgSEFTSDEKKygxIHJvdykKKworLS0KKy0tIE5vdCBvYmplY3Qg bG9nZ2VkCitVUERBVEUgYWNjb3VudAorICAgU0VUIGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlh ZGEnOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAocGFz c3dvcmQpIG9uIGFjY291bnQKK1VQREFURSBhY2NvdW50CisgICBTRVQgcGFzc3dvcmQgPSAn SEFTSDInOworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwyLDEsV1JJVEUsVVBEQVRFLFRBQkxF LHB1YmxpYy5hY2NvdW50LCJVUERBVEUgYWNjb3VudAorICAgU0VUIHBhc3N3b3JkID0gJ0hB U0gyJzsiCistLQorLS0gQ2hhbmdlIHBlcm1pc3Npb25zIG9mIHVzZXIgMSBzbyB0aGF0IHNl c3Npb24gcmVsYXRpb24gbG9nZ2luZyB3aWxsIGJlIGRvbmUKK1xjb25uZWN0IGNvbnRyaWJf cmVncmVzc2lvbiBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQubG9nX3Jl bGF0aW9uID0gb247CithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAncmVh ZCwgV1JJVEUnOworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIxCistLQorLS0g Tm90IGxvZ2dlZAorY3JlYXRlIHRhYmxlIEFDQ09VTlRfUk9MRV9NQVAKKygKKwlhY2NvdW50 X2lkIElOVCwKKwlyb2xlX2lkIElOVAorKTsKKy0tCistLSBBdWRpdG9yIGdyYW50cyBub3Qg bG9nZ2VkCitHUkFOVCBTRUxFQ1QKKyAgIE9OIFRBQkxFIHB1YmxpYy5hY2NvdW50X3JvbGVf bWFwCisgICBUTyBhdWRpdG9yOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoK Ky0tIHNlbGVjdCAocGFzc3dvcmQpIG9uIGFjY291bnQKKy0tIHNlbGVjdCBvbiBhY2NvdW50 X3JvbGVfbWFwCistLSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9n ID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9uID0gb24KK1NFTEVDVCBhY2NvdW50LnBhc3N3b3Jk LAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAorICBGUk9NIGFjY291bnQKKwkgICBJ Tk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAKKwkJCW9uIGFjY291bnQuaWQgPSBhY2NvdW50 X3JvbGVfbWFwLmFjY291bnRfaWQ7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDEsMSxSRUFE LFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCwiU0VMRUNUIGFjY291bnQucGFzc3dvcmQs CisJICAgYWNjb3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElO TkVSIEpPSU4gYWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRf cm9sZV9tYXAuYWNjb3VudF9pZDsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxLDEsUkVB RCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQsIlNFTEVDVCBhY2NvdW50LnBhc3N3b3Jk LAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAorICBGUk9NIGFjY291bnQKKwkgICBJ Tk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAKKwkJCW9uIGFjY291bnQuaWQgPSBhY2NvdW50 X3JvbGVfbWFwLmFjY291bnRfaWQ7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwxLDEsUkVB RCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnRfcm9sZV9tYXAsIlNFTEVDVCBhY2NvdW50 LnBhc3N3b3JkLAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAorICBGUk9NIGFjY291 bnQKKwkgICBJTk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAKKwkJCW9uIGFjY291bnQuaWQg PSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQ7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sMSwxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50X3JvbGVfbWFwLCJTRUxF Q1QgYWNjb3VudC5wYXNzd29yZCwKKwkgICBhY2NvdW50X3JvbGVfbWFwLnJvbGVfaWQKKyAg RlJPTSBhY2NvdW50CisJICAgSU5ORVIgSk9JTiBhY2NvdW50X3JvbGVfbWFwCisJCQlvbiBh Y2NvdW50LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2NvdW50X2lkOyIKKyBwYXNzd29yZCB8 IHJvbGVfaWQgCistLS0tLS0tLS0tKy0tLS0tLS0tLQorKDAgcm93cykKKworLS0KKy0tIE9i amVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAocGFzc3dvcmQpIG9uIGFjY291 bnQKKy0tIFNlc3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFk IGFuZCBsb2dfcmVsYXRpb24gPSBvbgorU0VMRUNUIHBhc3N3b3JkCisgIEZST00gYWNjb3Vu dDsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMiwxLFJFQUQsU0VMRUNULFRBQkxFLHB1Ymxp Yy5hY2NvdW50LCJTRUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50OyIKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDIsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCwi U0VMRUNUIHBhc3N3b3JkCisgIEZST00gYWNjb3VudDsiCisgcGFzc3dvcmQgCistLS0tLS0t LS0tCisgSEFTSDIKKygxIHJvdykKKworLS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCistLSBT ZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBhbmQgbG9n X3JlbGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAn eWFkYSwgeWFkYSc7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzLDEsV1JJVEUsVVBEQVRF LFRBQkxFLHB1YmxpYy5hY2NvdW50LCJVUERBVEUgYWNjb3VudAorICAgU0VUIGRlc2NyaXB0 aW9uID0gJ3lhZGEsIHlhZGEnOyIKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6 CistLSBzZWxlY3QgKHBhc3N3b3JkKSBvbiBhY2NvdW50IChpbiB0aGUgd2hlcmUgY2xhdXNl KQorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJlYWQg YW5kIGxvZ19yZWxhdGlvbiA9IG9uCitVUERBVEUgYWNjb3VudAorICAgU0VUIGRlc2NyaXB0 aW9uID0gJ3lhZGEsIHlhZGEnCisgd2hlcmUgcGFzc3dvcmQgPSAnSEFTSDInOworTk9USUNF OiAgQVVESVQ6IE9CSkVDVCw0LDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1YmxpYy5hY2NvdW50 LCJVUERBVEUgYWNjb3VudAorICAgU0VUIGRlc2NyaXB0aW9uID0gJ3lhZGEsIHlhZGEnCisg d2hlcmUgcGFzc3dvcmQgPSAnSEFTSDInOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQs MSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQsIlVQREFURSBhY2NvdW50Cisg ICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYScKKyB3aGVyZSBwYXNzd29yZCA9ICdI QVNIMic7IgorLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAo cGFzc3dvcmQpIG9uIGFjY291bnQKKy0tIFNlc3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMg YmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2dfcmVsYXRpb24gPSBvbgorVVBEQVRFIGFjY291 bnQKKyAgIFNFVCBwYXNzd29yZCA9ICdIQVNIMic7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNU LDUsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQsIlVQREFURSBhY2NvdW50 CisgICBTRVQgcGFzc3dvcmQgPSAnSEFTSDInOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDUsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQsIlVQREFURSBhY2NvdW50 CisgICBTRVQgcGFzc3dvcmQgPSAnSEFTSDInOyIKKy0tCistLSBDaGFuZ2UgYmFjayB0byBz dXBlcnVzZXIgdG8gZG8gZXhoYXVzdGl2ZSB0ZXN0cworXGNvbm5lY3QgY29udHJpYl9yZWdy ZXNzaW9uIHN1cGVyCitTRVQgcGdfYXVkaXQubG9nID0gJ0FMTCc7CitTRVQgcGdfYXVkaXQu bG9nX25vdGljZSA9IE9OOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMiwxLE1JU0MsU0VU LCwsU0VUIHBnX2F1ZGl0LmxvZ19ub3RpY2UgPSBPTjsKK1NFVCBwZ19hdWRpdC5sb2dfcmVs YXRpb24gPSBPTjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMsMSxNSVNDLFNFVCwsLFNF VCBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBPTjsKKy0tCistLSBTaW1wbGUgRE8gYmxvY2sK K0RPICQkCitCRUdJTgorCXJhaXNlIG5vdGljZSAndGVzdCc7CitFTkQgJCQ7CitOT1RJQ0U6 ICBBVURJVDogU0VTU0lPTiw0LDEsRlVOQ1RJT04sRE8sLCwiRE8gJCQKK0JFR0lOCisJcmFp c2Ugbm90aWNlICd0ZXN0JzsKK0VORCAkJDsiCitOT1RJQ0U6ICB0ZXN0CistLQorLS0gQ3Jl YXRlIHRlc3Qgc2NoZW1hCitDUkVBVEUgU0NIRU1BIHRlc3Q7CitOT1RJQ0U6ICBBVURJVDog U0VTU0lPTiw1LDEsRERMLENSRUFURSBTQ0hFTUEsU0NIRU1BLHRlc3QsQ1JFQVRFIFNDSEVN QSB0ZXN0OworLS0KKy0tIENvcHkgcGdfY2xhc3MgdG8gc3Rkb3V0CitDT1BZIGFjY291bnQg VE8gc3Rkb3V0OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNiwxLFJFQUQsU0VMRUNULFRB QkxFLHB1YmxpYy5hY2NvdW50LENPUFkgYWNjb3VudCBUTyBzdGRvdXQ7CisxCXVzZXIxCUhB U0gyCXlhZGEsIHlhZGEKKy0tCistLSBDcmVhdGUgYSB0YWJsZSBmcm9tIGEgcXVlcnkKK0NS RUFURSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBBUworU0VMRUNUICoKKyAgRlJPTSBhY2Nv dW50OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNywxLFJFQUQsU0VMRUNULFRBQkxFLHB1 YmxpYy5hY2NvdW50LCJDUkVBVEUgVEFCTEUgdGVzdC5hY2NvdW50X2NvcHkgQVMKK1NFTEVD VCAqCisgIEZST00gYWNjb3VudDsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw3LDEsV1JJ VEUsSU5TRVJULFRBQkxFLHRlc3QuYWNjb3VudF9jb3B5LCJDUkVBVEUgVEFCTEUgdGVzdC5h Y2NvdW50X2NvcHkgQVMKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudDsiCitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiw3LDIsRERMLENSRUFURSBUQUJMRSBBUyxUQUJMRSx0ZXN0LmFjY291 bnRfY29weSwiQ1JFQVRFIFRBQkxFIHRlc3QuYWNjb3VudF9jb3B5IEFTCitTRUxFQ1QgKgor ICBGUk9NIGFjY291bnQ7IgorLS0KKy0tIENvcHkgZnJvbSBzdGRpbiB0byBhY2NvdW50IGNv cHkKK0NPUFkgdGVzdC5hY2NvdW50X2NvcHkgZnJvbSBzdGRpbjsKK05PVElDRTogIEFVRElU OiBTRVNTSU9OLDgsMSxXUklURSxJTlNFUlQsVEFCTEUsdGVzdC5hY2NvdW50X2NvcHksQ09Q WSB0ZXN0LmFjY291bnRfY29weSBmcm9tIHN0ZGluOworLS0KKy0tIFRlc3QgcHJlcGFyZWQg c3RhdGVtZW50CitQUkVQQVJFIHBnY2xhc3NzdG10IChvaWQpIEFTCitTRUxFQ1QgKgorICBG Uk9NIGFjY291bnQKKyBXSEVSRSBpZCA9ICQxOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s OSwxLFJFQUQsUFJFUEFSRSwsLCJQUkVQQVJFIHBnY2xhc3NzdG10IChvaWQpIEFTCitTRUxF Q1QgKgorICBGUk9NIGFjY291bnQKKyBXSEVSRSBpZCA9ICQxOyIKK0VYRUNVVEUgcGdjbGFz c3N0bXQgKDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTAsMSxSRUFELFNFTEVDVCxU QUJMRSxwdWJsaWMuYWNjb3VudCwiUFJFUEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBBUworU0VM RUNUICoKKyAgRlJPTSBhY2NvdW50CisgV0hFUkUgaWQgPSAkMTsiLDEKK05PVElDRTogIEFV RElUOiBTRVNTSU9OLDEwLDIsUkVBRCxFWEVDVVRFLCwsRVhFQ1VURSBwZ2NsYXNzc3RtdCAo MSk7CisgaWQgfCBuYW1lICB8IHBhc3N3b3JkIHwgZGVzY3JpcHRpb24gCistLS0tKy0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgIDEgfCB1c2VyMSB8IEhBU0gyICAgIHwg eWFkYSwgeWFkYQorKDEgcm93KQorCitERUFMTE9DQVRFIHBnY2xhc3NzdG10OworTk9USUNF OiAgQVVESVQ6IFNFU1NJT04sMTEsMSxNSVNDLERFQUxMT0NBVEUsLCxERUFMTE9DQVRFIHBn Y2xhc3NzdG10OworLS0KKy0tIFRlc3QgY3Vyc29yIC0gbm8gdGFibGVzIHdpbGwgYmUgbG9n Z2VkIHNpbmNlIHBnX2NsYXNzIGlzIGEgc3lzdGVtIHRhYmxlCitCRUdJTjsKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDEyLDEsTUlTQyxCRUdJTiwsLEJFR0lOOworREVDTEFSRSBjdGVz dCBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIGNvdW50KCopCisgIEZST00KKygKKwlTRUxF Q1QgcmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSBMSU1JVCAxCisgKSBzdWJxdWVyeTsK K0ZFVENIIE5FWFQgRlJPTSBjdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEzLDEs TUlTQyxGRVRDSCwsLEZFVENIIE5FWFQgRlJPTSBjdGVzdDsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAgMQorKDEgcm93KQorCitDTE9TRSBjdGVzdDsKK0NPTU1JVDsKK05PVElDRTogIEFV RElUOiBTRVNTSU9OLDE0LDEsTUlTQyxDT01NSVQsLCxDT01NSVQ7CistLQorLS0gVGVzdCBw cmVwYXJlZCBpbnNlcnQKK0NSRUFURSBUQUJMRSB0ZXN0LnRlc3RfaW5zZXJ0CisoCisJaWQg SU5UCispOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTUsMSxEREwsQ1JFQVRFIFRBQkxF LFRBQkxFLHRlc3QudGVzdF9pbnNlcnQsIkNSRUFURSBUQUJMRSB0ZXN0LnRlc3RfaW5zZXJ0 CisoCisJaWQgSU5UCispOyIKK1BSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMKK0lOU0VS VCBJTlRPIHRlc3QudGVzdF9pbnNlcnQgKGlkKQorICAgICAgICAgICAgICAgICAgICAgIFZB TFVFUyAoJDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTYsMSxXUklURSxQUkVQQVJF LCwsIlBSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMKK0lOU0VSVCBJTlRPIHRlc3QudGVz dF9pbnNlcnQgKGlkKQorICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoJDEpOyIKK0VY RUNVVEUgcGdjbGFzc3N0bXQgKDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTcsMSxX UklURSxJTlNFUlQsVEFCTEUsdGVzdC50ZXN0X2luc2VydCwiUFJFUEFSRSBwZ2NsYXNzc3Rt dCAob2lkKSBBUworSU5TRVJUIElOVE8gdGVzdC50ZXN0X2luc2VydCAoaWQpCisgICAgICAg ICAgICAgICAgICAgICAgVkFMVUVTICgkMSk7IiwxCitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwxNywyLFdSSVRFLEVYRUNVVEUsLCxFWEVDVVRFIHBnY2xhc3NzdG10ICgxKTsKKy0tCist LSBDaGVjayB0aGF0IHByaW1hcnkga2V5IGNyZWF0aW9uIGlzIGxvZ2dlZAorQ1JFQVRFIFRB QkxFIHB1YmxpYy50ZXN0CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlkZXNjcmlwdGlv biBURVhULAorCUNPTlNUUkFJTlQgdGVzdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkKKyk7CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxOCwxLERETCxDUkVBVEUgSU5ERVgsSU5ERVgscHVi bGljLnRlc3RfcGtleSwiQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0CisoCisJaWQgSU5ULAor CW5hbWUgVEVYVCwKKwlkZXNjcmlwdGlvbiBURVhULAorCUNPTlNUUkFJTlQgdGVzdF9wa2V5 IFBSSU1BUlkgS0VZIChpZCkKKyk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTgsMixE REwsQ1JFQVRFIFRBQkxFLFRBQkxFLHB1YmxpYy50ZXN0LCJDUkVBVEUgVEFCTEUgcHVibGlj LnRlc3QKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAorCWRlc2NyaXB0aW9uIFRFWFQsCisJ Q09OU1RSQUlOVCB0ZXN0X3BrZXkgUFJJTUFSWSBLRVkgKGlkKQorKTsiCitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiwxOCwyLERETCxDUkVBVEUgVEFCTEUsSU5ERVgscHVibGljLnRlc3Rf cGtleSwiQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0CisoCisJaWQgSU5ULAorCW5hbWUgVEVY VCwKKwlkZXNjcmlwdGlvbiBURVhULAorCUNPTlNUUkFJTlQgdGVzdF9wa2V5IFBSSU1BUlkg S0VZIChpZCkKKyk7IgorLS0KKy0tIENoZWNrIHRoYXQgYW5hbHl6ZSBpcyBsb2dnZWQKK0FO QUxZWkUgdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDE5LDEsTUlTQyxBTkFMWVpF LCwsQU5BTFlaRSB0ZXN0OworLS0KKy0tIEdyYW50cyB0byBwdWJsaWMgc2hvdWxkIG5vdCBj YXVzZSBvYmplY3QgbG9nZ2luZyAoc2Vzc2lvbiBsb2dnaW5nIHdpbGwKKy0tIHN0aWxsIGhh cHBlbikKK0dSQU5UIFNFTEVDVAorICBPTiBUQUJMRSBwdWJsaWMudGVzdAorICBUTyBQVUJM SUM7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyMCwxLFJPTEUsR1JBTlQsVEFCTEUsLCJH UkFOVCBTRUxFQ1QKKyAgT04gVEFCTEUgcHVibGljLnRlc3QKKyAgVE8gUFVCTElDOyIKK1NF TEVDVCAqCisgIEZST00gdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIxLDEsUkVB RCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3QsIlNFTEVDVCAqCisgIEZST00gdGVzdDsiCisg aWQgfCBuYW1lIHwgZGVzY3JpcHRpb24gCistLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tCiso MCByb3dzKQorCistLSBDaGVjayB0aGF0IHN0YXRlbWVudHMgd2l0aG91dCBjb2x1bW5zIGxv ZworU0VMRUNUCisgIEZST00gdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIyLDEs UkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3QsIlNFTEVDVAorICBGUk9NIHRlc3Q7Igor LS0KKygwIHJvd3MpCisKK1NFTEVDVCAxLAorCSAgIGN1cnJlbnRfdXNlcjsKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDIzLDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUIDEsCisJICAgY3Vy cmVudF91c2VyOyIKKyA/Y29sdW1uPyB8IGN1cnJlbnRfdXNlciAKKy0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgMSB8IHN1cGVyCisoMSByb3cpCisKK0RPICQkCitERUNM QVJFCisJdGVzdCBJTlQ7CitCRUdJTgorCVNFTEVDVCAxCisJICBJTlRPIHRlc3Q7CitFTkQg JCQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyNCwxLEZVTkNUSU9OLERPLCwsIkRPICQk CitERUNMQVJFCisJdGVzdCBJTlQ7CitCRUdJTgorCVNFTEVDVCAxCisJICBJTlRPIHRlc3Q7 CitFTkQgJCQ7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjQsMixSRUFELFNFTEVDVCws LFNFTEVDVCAxCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiU0VMRUNUIDEiCitQTC9wZ1NR TCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDUgYXQgU1FMIHN0YXRlbWVudAor ZXhwbGFpbiBzZWxlY3QgMTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI1LDEsUkVBRCxT RUxFQ1QsLCxleHBsYWluIHNlbGVjdCAxOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjUs MixNSVNDLEVYUExBSU4sLCxleHBsYWluIHNlbGVjdCAxOworICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRo PTApCisoMSByb3cpCisKKy0tCistLSBUZXN0IHRoYXQgbG9va3MgaW5zaWRlIG9mIGRvIGJs b2NrcyBsb2cKK0lOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkgIFZBTFVFUyAoMSk7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwyNiwxLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVz dCwiSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgxKTsiCitJTlNFUlQgSU5U TyBURVNUIChpZCkKKwkJICBWQUxVRVMgKDIpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s MjcsMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3QsIklOU0VSVCBJTlRPIFRFU1Qg KGlkKQorCQkgIFZBTFVFUyAoMik7IgorSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFM VUVTICgzKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI4LDEsV1JJVEUsSU5TRVJULFRB QkxFLHB1YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxVRVMgKDMp OyIKK0RPICQkCitERUNMQVJFCisJcmVzdWx0IFJFQ09SRDsKK0JFR0lOCisJRk9SIHJlc3Vs dCBJTgorCQlTRUxFQ1QgaWQKKwkJICBGUk9NIHRlc3QKKwlMT09QCisJCUlOU0VSVCBJTlRP IHRlc3QgKGlkKQorCQkgICAgIFZBTFVFUyAocmVzdWx0LmlkICsgMTAwKTsKKwlFTkQgTE9P UDsKK0VORCAkJDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDEsRlVOQ1RJT04sRE8s LCwiRE8gJCQKK0RFQ0xBUkUKKwlyZXN1bHQgUkVDT1JEOworQkVHSU4KKwlGT1IgcmVzdWx0 IElOCisJCVNFTEVDVCBpZAorCQkgIEZST00gdGVzdAorCUxPT1AKKwkJSU5TRVJUIElOVE8g dGVzdCAoaWQpCisJCSAgICAgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApOworCUVORCBMT09Q OworRU5EICQkOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDIsUkVBRCxTRUxFQ1Qs VEFCTEUscHVibGljLnRlc3QsIlNFTEVDVCBpZAorCQkgIEZST00gdGVzdCIKK0NPTlRFWFQ6 ICBQTC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDUgYXQgRk9SIG92 ZXIgU0VMRUNUIHJvd3MKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDMsV1JJVEUsSU5T RVJULFRBQkxFLHB1YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJICAgICBW QUxVRVMgKHJlc3VsdC5pZCArIDEwMCkiLCwsCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAi SU5TRVJUIElOVE8gdGVzdCAoaWQpCisJCSAgICAgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDAp IgorUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA5IGF0IFNRTCBz dGF0ZW1lbnQKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDQsV1JJVEUsSU5TRVJULFRB QkxFLHB1YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJICAgICBWQUxVRVMg KHJlc3VsdC5pZCArIDEwMCkiLCwsCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiSU5TRVJU IElOVE8gdGVzdCAoaWQpCisJCSAgICAgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIgorUEwv cGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA5IGF0IFNRTCBzdGF0ZW1l bnQKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDUsV1JJVEUsSU5TRVJULFRBQkxFLHB1 YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJICAgICBWQUxVRVMgKHJlc3Vs dC5pZCArIDEwMCkiLCwsCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiSU5TRVJUIElOVE8g dGVzdCAoaWQpCisJCSAgICAgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIgorUEwvcGdTUUwg ZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA5IGF0IFNRTCBzdGF0ZW1lbnQKKy0t CistLSBUZXN0IG9iZnVzY2F0ZWQgZHluYW1pYyBzcWwgZm9yIGNsZWFuIGxvZ2dpbmcKK0RP ICQkCitERUNMQVJFCisJdGFibGVfbmFtZSBURVhUID0gJ2RvX3RhYmxlJzsKK0JFR0lOCisJ RVhFQ1VURSAnQ1JFQVRFIFRBQkxFICcgfHwgdGFibGVfbmFtZSB8fCAnICgid2VpcmQgbmFt ZSIgSU5UKSc7CisJRVhFQ1VURSAnRFJPUCB0YWJsZSAnIHx8IHRhYmxlX25hbWU7CitFTkQg JCQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzMCwxLEZVTkNUSU9OLERPLCwsIkRPICQk CitERUNMQVJFCisJdGFibGVfbmFtZSBURVhUID0gJ2RvX3RhYmxlJzsKK0JFR0lOCisJRVhF Q1VURSAnQ1JFQVRFIFRBQkxFICcgfHwgdGFibGVfbmFtZSB8fCAnICgiIndlaXJkIG5hbWUi IiBJTlQpJzsKKwlFWEVDVVRFICdEUk9QIHRhYmxlICcgfHwgdGFibGVfbmFtZTsKK0VORCAk JDsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzMCwyLERETCxDUkVBVEUgVEFCTEUsVEFC TEUscHVibGljLmRvX3RhYmxlLCJDUkVBVEUgVEFCTEUgZG9fdGFibGUgKCIid2VpcmQgbmFt ZSIiIElOVCkiCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiQ1JFQVRFIFRBQkxFIGRvX3Rh YmxlICgid2VpcmQgbmFtZSIgSU5UKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2Rl X2Jsb2NrIGxpbmUgNSBhdCBFWEVDVVRFIHN0YXRlbWVudAorTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMzAsMyxEREwsRFJPUCBUQUJMRSxUQUJMRSxwdWJsaWMuZG9fdGFibGUsRFJPUCB0 YWJsZSBkb190YWJsZQorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIkRST1AgdGFibGUgZG9f dGFibGUiCitQTC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDYgYXQg RVhFQ1VURSBzdGF0ZW1lbnQKKy0tCistLSBHZW5lcmF0ZSBhbiBlcnJvciBhbmQgbWFrZSBz dXJlIHRoZSBzdGFjayBnZXRzIGNsZWFyZWQKK0RPICQkCitCRUdJTgorCUNSRUFURSBUQUJM RSBib2d1cy50ZXN0X2Jsb2NrCisJKAorCQlpZCBJTlQKKwkpOworRU5EICQkOworTk9USUNF OiAgQVVESVQ6IFNFU1NJT04sMzEsMSxGVU5DVElPTixETywsLCJETyAkJAorQkVHSU4KKwlD UkVBVEUgVEFCTEUgYm9ndXMudGVzdF9ibG9jaworCSgKKwkJaWQgSU5UCisJKTsKK0VORCAk JDsiCitFUlJPUjogIHNjaGVtYSAiYm9ndXMiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IENS RUFURSBUQUJMRSBib2d1cy50ZXN0X2Jsb2NrCisgICAgICAgICAgICAgICAgICAgICBeCitR VUVSWTogIENSRUFURSBUQUJMRSBib2d1cy50ZXN0X2Jsb2NrCisJKAorCQlpZCBJTlQKKwkp CitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSAz IGF0IFNRTCBzdGF0ZW1lbnQKKy0tCistLSBUZXN0IGFsdGVyIHRhYmxlIHN0YXRlbWVudHMK K0FMVEVSIFRBQkxFIHB1YmxpYy50ZXN0CisJRFJPUCBDT0xVTU4gZGVzY3JpcHRpb24gOwor Tk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzIsMSxEREwsQUxURVIgVEFCTEUsVEFCTEUgQ09M VU1OLHB1YmxpYy50ZXN0LmRlc2NyaXB0aW9uLCJBTFRFUiBUQUJMRSBwdWJsaWMudGVzdAor CURST1AgQ09MVU1OIGRlc2NyaXB0aW9uIDsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwz MiwxLERETCxBTFRFUiBUQUJMRSxUQUJMRSxwdWJsaWMudGVzdCwiQUxURVIgVEFCTEUgcHVi bGljLnRlc3QKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlvbiA7IgorQUxURVIgVEFCTEUgcHVi bGljLnRlc3QKKwlSRU5BTUUgVE8gdGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwz MywxLERETCxBTFRFUiBUQUJMRSxUQUJMRSxwdWJsaWMudGVzdDIsIkFMVEVSIFRBQkxFIHB1 YmxpYy50ZXN0CisJUkVOQU1FIFRPIHRlc3QyOyIKK0FMVEVSIFRBQkxFIHB1YmxpYy50ZXN0 MgorCVNFVCBTQ0hFTUEgdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM0LDEsRERM LEFMVEVSIFRBQkxFLFRBQkxFLHRlc3QudGVzdDIsIkFMVEVSIFRBQkxFIHB1YmxpYy50ZXN0 MgorCVNFVCBTQ0hFTUEgdGVzdDsiCitBTFRFUiBUQUJMRSB0ZXN0LnRlc3QyCisJQUREIENP TFVNTiBkZXNjcmlwdGlvbiBURVhUOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzUsMSxE REwsQUxURVIgVEFCTEUsVEFCTEUsdGVzdC50ZXN0MiwiQUxURVIgVEFCTEUgdGVzdC50ZXN0 MgorCUFERCBDT0xVTU4gZGVzY3JpcHRpb24gVEVYVDsiCitBTFRFUiBUQUJMRSB0ZXN0LnRl c3QyCisJRFJPUCBDT0xVTU4gZGVzY3JpcHRpb247CitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwzNiwxLERETCxBTFRFUiBUQUJMRSxUQUJMRSBDT0xVTU4sdGVzdC50ZXN0Mi5kZXNjcmlw dGlvbiwiQUxURVIgVEFCTEUgdGVzdC50ZXN0MgorCURST1AgQ09MVU1OIGRlc2NyaXB0aW9u OyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM2LDEsRERMLEFMVEVSIFRBQkxFLFRBQkxF LHRlc3QudGVzdDIsIkFMVEVSIFRBQkxFIHRlc3QudGVzdDIKKwlEUk9QIENPTFVNTiBkZXNj cmlwdGlvbjsiCitEUk9QIFRBQkxFIHRlc3QudGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiwzNywxLERETCxEUk9QIFRBQkxFLFRBQkxFLHRlc3QudGVzdDIsRFJPUCBUQUJMRSB0 ZXN0LnRlc3QyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzcsMSxEREwsRFJPUCBUQUJM RSxUQUJMRSBDT05TVFJBSU5ULHRlc3RfcGtleSBvbiB0ZXN0LnRlc3QyLERST1AgVEFCTEUg dGVzdC50ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM3LDEsRERMLERST1AgVEFC TEUsSU5ERVgsdGVzdC50ZXN0X3BrZXksRFJPUCBUQUJMRSB0ZXN0LnRlc3QyOworLS0KKy0t IFRlc3QgbXVsdGlwbGUgc3RhdGVtZW50cyB3aXRoIG9uZSBzZW1pLWNvbG9uCitDUkVBVEUg U0NIRU1BIGZvbworCUNSRUFURSBUQUJMRSBmb28uYmFyIChpZCBpbnQpCisJQ1JFQVRFIFRB QkxFIGZvby5iYXogKGlkIGludCk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzOCwxLERE TCxDUkVBVEUgVEFCTEUsVEFCTEUsZm9vLmJhciwiQ1JFQVRFIFNDSEVNQSBmb28KKwlDUkVB VEUgVEFCTEUgZm9vLmJhciAoaWQgaW50KQorCUNSRUFURSBUQUJMRSBmb28uYmF6IChpZCBp bnQpOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM4LDIsRERMLENSRUFURSBUQUJMRSxU QUJMRSxmb28uYmF6LCJDUkVBVEUgU0NIRU1BIGZvbworCUNSRUFURSBUQUJMRSBmb28uYmFy IChpZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5iYXogKGlkIGludCk7IgorTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sMzgsMyxEREwsQ1JFQVRFIFNDSEVNQSxTQ0hFTUEsZm9vLCJDUkVB VEUgU0NIRU1BIGZvbworCUNSRUFURSBUQUJMRSBmb28uYmFyIChpZCBpbnQpCisJQ1JFQVRF IFRBQkxFIGZvby5iYXogKGlkIGludCk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzgs MyxEREwsQ1JFQVRFIFNDSEVNQSxUQUJMRSxmb28uYmFyLCJDUkVBVEUgU0NIRU1BIGZvbwor CUNSRUFURSBUQUJMRSBmb28uYmFyIChpZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5iYXog KGlkIGludCk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzgsMyxEREwsQ1JFQVRFIFND SEVNQSxUQUJMRSxmb28uYmF6LCJDUkVBVEUgU0NIRU1BIGZvbworCUNSRUFURSBUQUJMRSBm b28uYmFyIChpZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5iYXogKGlkIGludCk7IgorLS0K Ky0tIFRlc3QgYWdncmVnYXRlCitDUkVBVEUgRlVOQ1RJT04gcHVibGljLmludF9hZGQKKygK KwlhIElOVCwKKwliIElOVAorKQorCVJFVFVSTlMgSU5UIExBTkdVQUdFIHBscGdzcWwgQVMg JCQKK0JFR0lOCisJcmV0dXJuIGEgKyBiOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMzksMSxEREwsQ1JFQVRFIEZVTkNUSU9OLEZVTkNUSU9OLCJwdWJsaWMuaW50X2Fk ZChpbnRlZ2VyLGludGVnZXIpIiwiQ1JFQVRFIEZVTkNUSU9OIHB1YmxpYy5pbnRfYWRkCiso CisJYSBJTlQsCisJYiBJTlQKKykKKwlSRVRVUk5TIElOVCBMQU5HVUFHRSBwbHBnc3FsIEFT ICQkCitCRUdJTgorCXJldHVybiBhICsgYjsKK0VORCAkJDsiCitTRUxFQ1QgaW50X2FkZCgx LCAxKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQwLDEsUkVBRCxTRUxFQ1QsLCwiU0VM RUNUIGludF9hZGQoMSwgMSk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDAsMixGVU5D VElPTixFWEVDVVRFLEZVTkNUSU9OLHB1YmxpYy5pbnRfYWRkLCJTRUxFQ1QgaW50X2FkZCgx LCAxKTsiCisgaW50X2FkZCAKKy0tLS0tLS0tLQorICAgICAgIDIKKygxIHJvdykKKworQ1JF QVRFIEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoSU5UKSAoU0ZVTkM9cHVibGljLmludF9h ZGQsIFNUWVBFPUlOVCwgSU5JVENPTkQ9JzAnKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDQxLDEsRERMLENSRUFURSBBR0dSRUdBVEUsQUdHUkVHQVRFLHB1YmxpYy5zdW1fdGVzdChp bnRlZ2VyKSwiQ1JFQVRFIEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoSU5UKSAoU0ZVTkM9 cHVibGljLmludF9hZGQsIFNUWVBFPUlOVCwgSU5JVENPTkQ9JzAnKTsiCitBTFRFUiBBR0dS RUdBVEUgcHVibGljLnN1bV90ZXN0KGludGVnZXIpIFJFTkFNRSBUTyBzdW1fdGVzdDI7CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0MiwxLERETCxBTFRFUiBBR0dSRUdBVEUsQUdHUkVH QVRFLHB1YmxpYy5zdW1fdGVzdDIoaW50ZWdlciksQUxURVIgQUdHUkVHQVRFIHB1YmxpYy5z dW1fdGVzdChpbnRlZ2VyKSBSRU5BTUUgVE8gc3VtX3Rlc3QyOworLS0KKy0tIFRlc3QgY29u dmVyc2lvbgorQ1JFQVRFIENPTlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBGT1Ig J1NRTF9BU0NJSScgVE8gJ01VTEVfSU5URVJOQUwnIEZST00gcGdfY2F0YWxvZy5hc2NpaV90 b19taWM7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0MywxLERETCxDUkVBVEUgQ09OVkVS U0lPTixDT05WRVJTSU9OLHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QsQ1JFQVRFIENPTlZFUlNJ T04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBGT1IgJ1NRTF9BU0NJSScgVE8gJ01VTEVfSU5U RVJOQUwnIEZST00gcGdfY2F0YWxvZy5hc2NpaV90b19taWM7CitBTFRFUiBDT05WRVJTSU9O IHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QgUkVOQU1FIFRPIGNvbnZlcnNpb25fdGVzdDI7CitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0NCwxLERETCxBTFRFUiBDT05WRVJTSU9OLENPTlZF UlNJT04scHVibGljLmNvbnZlcnNpb25fdGVzdDIsQUxURVIgQ09OVkVSU0lPTiBwdWJsaWMu Y29udmVyc2lvbl90ZXN0IFJFTkFNRSBUTyBjb252ZXJzaW9uX3Rlc3QyOworLS0KKy0tIFRl c3QgY3JlYXRlL2FsdGVyL2Ryb3AgZGF0YWJhc2UKK0NSRUFURSBEQVRBQkFTRSBjb250cmli X3JlZ3Jlc3Npb25fcGdhdWRpdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQ1LDEsRERM LENSRUFURSBEQVRBQkFTRSwsLENSRUFURSBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25f cGdhdWRpdDsKK0FMVEVSIERBVEFCQVNFIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0IFJF TkFNRSBUTyBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDI7CitOT1RJQ0U6ICBBVURJVDog U0VTU0lPTiw0NiwxLERETCxBTFRFUiBEQVRBQkFTRSwsLEFMVEVSIERBVEFCQVNFIGNvbnRy aWJfcmVncmVzc2lvbl9wZ2F1ZGl0IFJFTkFNRSBUTyBjb250cmliX3JlZ3Jlc3Npb25fcGdh dWRpdDI7CitEUk9QIERBVEFCQVNFIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0MjsKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDQ3LDEsRERMLERST1AgREFUQUJBU0UsLCxEUk9QIERB VEFCQVNFIGNvbnRyaWJfcmVncmVzc2lvbl9wZ2F1ZGl0MjsKKy0tCistLSBUZXN0IHRoYXQg ZnJlZXMgYSBtZW1vcnkgY29udGV4dCBlYXJsaWVyIHRoYW4gZXhwZWN0ZWQKK0NSRUFURSBU QUJMRSBob2dlCisoCisJaWQgaW50CispOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDgs MSxEREwsQ1JFQVRFIFRBQkxFLFRBQkxFLHB1YmxpYy5ob2dlLCJDUkVBVEUgVEFCTEUgaG9n ZQorKAorCWlkIGludAorKTsiCitDUkVBVEUgRlVOQ1RJT04gdGVzdCgpCisJUkVUVVJOUyBJ TlQgQVMgJCQKK0RFQ0xBUkUKKyAgICBjdXIxIGN1cnNvciBmb3Igc2VsZWN0ICogZnJvbSBo b2dlOworICAgIHRtcCBpbnQ7CitCRUdJTgorICAgIE9QRU4gY3VyMTsKKyAgICBGRVRDSCBj dXIxIGludG8gdG1wOworICAgIFJFVFVSTiB0bXA7CitFTkQgJCQKK0xBTkdVQUdFIHBscGdz cWwgOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDksMSxEREwsQ1JFQVRFIEZVTkNUSU9O LEZVTkNUSU9OLHB1YmxpYy50ZXN0KCksIkNSRUFURSBGVU5DVElPTiB0ZXN0KCkKKwlSRVRV Uk5TIElOVCBBUyAkJAorREVDTEFSRQorICAgIGN1cjEgY3Vyc29yIGZvciBzZWxlY3QgKiBm cm9tIGhvZ2U7CisgICAgdG1wIGludDsKK0JFR0lOCisgICAgT1BFTiBjdXIxOworICAgIEZF VENIIGN1cjEgaW50byB0bXA7CisgICAgUkVUVVJOIHRtcDsKK0VORCAkJAorTEFOR1VBR0Ug cGxwZ3NxbCA7IgorU0VMRUNUIHRlc3QoKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDUw LDEsUkVBRCxTRUxFQ1QsLCxTRUxFQ1QgdGVzdCgpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sNTAsMixGVU5DVElPTixFWEVDVVRFLEZVTkNUSU9OLHB1YmxpYy50ZXN0LFNFTEVDVCB0 ZXN0KCk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw1MCwzLFJFQUQsU0VMRUNULFRBQkxF LHB1YmxpYy5ob2dlLHNlbGVjdCAqIGZyb20gaG9nZQorQ09OVEVYVDogIFBML3BnU1FMIGZ1 bmN0aW9uIHRlc3QoKSBsaW5lIDYgYXQgT1BFTgorIHRlc3QgCistLS0tLS0KKyAgICAgCiso MSByb3cpCisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvZXhwZWN0ZWQvcGdfYXVk aXQub3V0IGIvY29udHJpYi9wZ19hdWRpdC9leHBlY3RlZC9wZ19hdWRpdC5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3ZDg0OAotLS0gL2Rldi9udWxsCisr KyBiL2NvbnRyaWIvcGdfYXVkaXQvZXhwZWN0ZWQvcGdfYXVkaXQub3V0CkBAIC0wLDAgKzEs OTA0IEBACistLSBMb2FkIHBnX2F1ZGl0IG1vZHVsZQorY3JlYXRlIGV4dGVuc2lvbiBwZ19h dWRpdDsKKy0tCistLSBDcmVhdGUgYSBzdXBlcnVzZXIgcm9sZSB0aGF0IHdlIGtub3cgdGhl IG5hbWUgb2YgZm9yIHRlc3RpbmcKK0NSRUFURSBVU0VSIHN1cGVyIFNVUEVSVVNFUjsKK1xj b25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiBzdXBlcjsKKy0tCistLSBDcmVhdGUgYXVkaXRv ciByb2xlCitDUkVBVEUgUk9MRSBhdWRpdG9yOworLS0KKy0tIENyZWF0ZSBmaXJzdCB0ZXN0 IHVzZXIKK0NSRUFURSBVU0VSIHVzZXIxOworQUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVk aXQubG9nID0gJ2RkbCwgUk9MRSc7CitBTFRFUiBST0xFIHVzZXIxIFNFVCBwZ19hdWRpdC5s b2dfbm90aWNlID0gb247CistLQorLS0gQ3JlYXRlLCBzZWxlY3QsIGRyb3AgKHNlbGVjdCB3 aWxsIG5vdCBiZSBhdWRpdGVkKQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIx CitDUkVBVEUgVEFCTEUgcHVibGljLnRlc3QgKGlkIElOVCk7CitOT1RJQ0U6ICBBVURJVDog U0VTU0lPTiwxLDEsRERMLENSRUFURSBUQUJMRSxUQUJMRSxwdWJsaWMudGVzdCxDUkVBVEUg VEFCTEUgcHVibGljLnRlc3QgKGlkIElOVCk7CitTRUxFQ1QgKiBGUk9NIHRlc3Q7CisgaWQg CistLS0tCisoMCByb3dzKQorCitEUk9QIFRBQkxFIHRlc3Q7CitOT1RJQ0U6ICBBVURJVDog U0VTU0lPTiwyLDEsRERMLERST1AgVEFCTEUsVEFCTEUscHVibGljLnRlc3QsRFJPUCBUQUJM RSB0ZXN0OworLS0KKy0tIENyZWF0ZSBzZWNvbmQgdGVzdCB1c2VyCitcY29ubmVjdCBjb250 cmliX3JlZ3Jlc3Npb24gc3VwZXIKK0NSRUFURSBVU0VSIHVzZXIyOworQUxURVIgUk9MRSB1 c2VyMiBTRVQgcGdfYXVkaXQubG9nID0gJ1JlYWQsIHdyaXRFJzsKK0FMVEVSIFJPTEUgdXNl cjIgU0VUIHBnX2F1ZGl0LmxvZ19ub3RpY2UgPSBvbjsKK0FMVEVSIFJPTEUgdXNlcjIgU0VU IHBnX2F1ZGl0LnJvbGUgPSBhdWRpdG9yOworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9u IHVzZXIyCitDUkVBVEUgVEFCTEUgdGVzdDIgKGlkIElOVCk7CitHUkFOVCBTRUxFQ1QgT04g VEFCTEUgcHVibGljLnRlc3QyIFRPIGF1ZGl0b3I7CistLQorLS0gUm9sZS1iYXNlZCB0ZXN0 cworQ1JFQVRFIFRBQkxFIHRlc3QzCisoCisJaWQgSU5UCispOworU0VMRUNUIGNvdW50KCop CisgIEZST00KKygKKwlTRUxFQ1QgcmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSAgTElN SVQgMQorKSBTVUJRVUVSWTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQor CitTRUxFQ1QgKgorICBGUk9NIHRlc3QzLCB0ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNT SU9OLDEsMSxSRUFELFNFTEVDVCwsLCJTRUxFQ1QgKgorICBGUk9NIHRlc3QzLCB0ZXN0Mjsi CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDEsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMu dGVzdDIsIlNFTEVDVCAqCisgIEZST00gdGVzdDMsIHRlc3QyOyIKKyBpZCB8IGlkIAorLS0t LSstLS0tCisoMCByb3dzKQorCitHUkFOVCBJTlNFUlQKKyAgIE9OIFRBQkxFIHB1YmxpYy50 ZXN0MworICAgVE8gYXVkaXRvcjsKKy0tCistLSBDcmVhdGUgYSB2aWV3IHRvIHRlc3QgbG9n Z2luZworQ1JFQVRFIFZJRVcgdndfdGVzdDMgQVMKK1NFTEVDVCAqCisgIEZST00gdGVzdDM7 CitHUkFOVCBTRUxFQ1QKKyAgIE9OIHZ3X3Rlc3QzCisgICBUTyBhdWRpdG9yOworLS0KKy0t IE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCBvbiB2d190ZXN0MworLS0g c2VsZWN0IG9uIHRlc3QyCitTRUxFQ1QgKgorICBGUk9NIHZ3X3Rlc3QzLCB0ZXN0MjsKK05P VElDRTogIEFVRElUOiBTRVNTSU9OLDIsMSxSRUFELFNFTEVDVCwsLCJTRUxFQ1QgKgorICBG Uk9NIHZ3X3Rlc3QzLCB0ZXN0MjsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDIsMSxSRUFE LFNFTEVDVCxUQUJMRSxwdWJsaWMudGVzdDIsIlNFTEVDVCAqCisgIEZST00gdndfdGVzdDMs IHRlc3QyOyIKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMiwxLFJFQUQsU0VMRUNULFZJRVcs cHVibGljLnZ3X3Rlc3QzLCJTRUxFQ1QgKgorICBGUk9NIHZ3X3Rlc3QzLCB0ZXN0MjsiCisg aWQgfCBpZCAKKy0tLS0rLS0tLQorKDAgcm93cykKKworLS0KKy0tIE9iamVjdCBsb2dnZWQg YmVjYXVzZSBvZjoKKy0tIGluc2VydCBvbiB0ZXN0MworLS0gc2VsZWN0IG9uIHRlc3QyCitX SVRIIENURSBBUworKAorCVNFTEVDVCBpZAorCSAgRlJPTSB0ZXN0MgorKQorSU5TRVJUIElO VE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsKK05PVElDRTogIEFVRElUOiBTRVNT SU9OLDMsMSxXUklURSxJTlNFUlQsLCwiV0lUSCBDVEUgQVMKKygKKwlTRUxFQ1QgaWQKKwkg IEZST00gdGVzdDIKKykKK0lOU0VSVCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBj dGU7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwzLDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1 YmxpYy50ZXN0MywiV0lUSCBDVEUgQVMKKygKKwlTRUxFQ1QgaWQKKwkgIEZST00gdGVzdDIK KykKK0lOU0VSVCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNF OiAgQVVESVQ6IE9CSkVDVCwzLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLnRlc3QyLCJX SVRIIENURSBBUworKAorCVNFTEVDVCBpZAorCSAgRlJPTSB0ZXN0MgorKQorSU5TRVJUIElO VE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsiCistLQorLS0gT2JqZWN0IGxvZ2dl ZCBiZWNhdXNlIG9mOgorLS0gaW5zZXJ0IG9uIHRlc3QzCitXSVRIIENURSBBUworKAorCUlO U0VSVCBJTlRPIHRlc3QzIFZBTFVFUyAoMSkKKwkgICAgICAgICAgICAgICBSRVRVUk5JTkcg aWQKKykKK0lOU0VSVCBJTlRPIHRlc3QyCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiw0LDEsV1JJVEUsSU5TRVJULCwsIldJVEggQ1RFIEFTCiso CisJSU5TRVJUIElOVE8gdGVzdDMgVkFMVUVTICgxKQorCSAgICAgICAgICAgICAgIFJFVFVS TklORyBpZAorKQorSU5TRVJUIElOVE8gdGVzdDIKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsi CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDQsMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGlj LnRlc3QzLCJXSVRIIENURSBBUworKAorCUlOU0VSVCBJTlRPIHRlc3QzIFZBTFVFUyAoMSkK KwkgICAgICAgICAgICAgICBSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJTlRPIHRlc3QyCitT RUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorR1JBTlQgVVBEQVRFIE9OIFRBQkxFIHB1YmxpYy50 ZXN0MiBUTyBhdWRpdG9yOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0t IGluc2VydCBvbiB0ZXN0MworLS0gdXBkYXRlIG9uIHRlc3QyCitXSVRIIENURSBBUworKAor CVVQREFURSB0ZXN0MgorCSAgIFNFVCBpZCA9IDEKKwlSRVRVUk5JTkcgaWQKKykKK0lOU0VS VCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7CitOT1RJQ0U6ICBBVURJVDog U0VTU0lPTiw1LDEsV1JJVEUsSU5TRVJULCwsIldJVEggQ1RFIEFTCisoCisJVVBEQVRFIHRl c3QyCisJICAgU0VUIGlkID0gMQorCVJFVFVSTklORyBpZAorKQorSU5TRVJUIElOVE8gdGVz dDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDUs MSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3QzLCJXSVRIIENURSBBUworKAorCVVQ REFURSB0ZXN0MgorCSAgIFNFVCBpZCA9IDEKKwlSRVRVUk5JTkcgaWQKKykKK0lOU0VSVCBJ TlRPIHRlc3QzCitTRUxFQ1QgaWQKKyAgRlJPTSBjdGU7IgorTk9USUNFOiAgQVVESVQ6IE9C SkVDVCw1LDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1YmxpYy50ZXN0MiwiV0lUSCBDVEUgQVMK KygKKwlVUERBVEUgdGVzdDIKKwkgICBTRVQgaWQgPSAxCisJUkVUVVJOSU5HIGlkCispCitJ TlNFUlQgSU5UTyB0ZXN0MworU0VMRUNUIGlkCisgIEZST00gY3RlOyIKKy0tCistLSBPYmpl Y3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNlcnQgb24gdGVzdDIKK1dJVEggQ1RFIEFT CisoCisJSU5TRVJUIElOVE8gdGVzdDIgVkFMVUVTICgxKQorCSAgICAgICAgICAgICAgIFJF VFVSTklORyBpZAorKQorVVBEQVRFIHRlc3QzCisgICBTRVQgaWQgPSBjdGUuaWQKKyAgRlJP TSBjdGUKKyBXSEVSRSB0ZXN0My5pZCA8PiBjdGUuaWQ7CitOT1RJQ0U6ICBBVURJVDogU0VT U0lPTiw2LDEsV1JJVEUsVVBEQVRFLCwsIldJVEggQ1RFIEFTCisoCisJSU5TRVJUIElOVE8g dGVzdDIgVkFMVUVTICgxKQorCSAgICAgICAgICAgICAgIFJFVFVSTklORyBpZAorKQorVVBE QVRFIHRlc3QzCisgICBTRVQgaWQgPSBjdGUuaWQKKyAgRlJPTSBjdGUKKyBXSEVSRSB0ZXN0 My5pZCA8PiBjdGUuaWQ7IgorTk9USUNFOiAgQVVESVQ6IE9CSkVDVCw2LDEsV1JJVEUsSU5T RVJULFRBQkxFLHB1YmxpYy50ZXN0MiwiV0lUSCBDVEUgQVMKKygKKwlJTlNFUlQgSU5UTyB0 ZXN0MiBWQUxVRVMgKDEpCisJICAgICAgICAgICAgICAgUkVUVVJOSU5HIGlkCispCitVUERB VEUgdGVzdDMKKyAgIFNFVCBpZCA9IGN0ZS5pZAorICBGUk9NIGN0ZQorIFdIRVJFIHRlc3Qz LmlkIDw+IGN0ZS5pZDsiCistLQorLS0gQ2hhbmdlIHBlcm1pc3Npb25zIG9mIHVzZXIgMiBz byB0aGF0IG9ubHkgb2JqZWN0IGxvZ2dpbmcgd2lsbCBiZSBkb25lCitcY29ubmVjdCBjb250 cmliX3JlZ3Jlc3Npb24gc3VwZXIKK2FsdGVyIHJvbGUgdXNlcjIgc2V0IHBnX2F1ZGl0Lmxv ZyA9ICdOT05FJzsKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMgorLS0KKy0t IENyZWF0ZSB0ZXN0NCBhbmQgYWRkIHBlcm1pc3Npb25zCitDUkVBVEUgVEFCTEUgdGVzdDQK KygKKwlpZCBpbnQsCisJbmFtZSB0ZXh0CispOworR1JBTlQgU0VMRUNUIChuYW1lKQorICAg T04gVEFCTEUgcHVibGljLnRlc3Q0CisgICBUTyBhdWRpdG9yOworR1JBTlQgVVBEQVRFIChp ZCkKKyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0NAorICAgVE8gYXVkaXRvcjsKK0dSQU5UIGlu c2VydCAobmFtZSkKKyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0NAorICAgVE8gYXVkaXRvcjsK Ky0tCistLSBOb3Qgb2JqZWN0IGxvZ2dlZAorU0VMRUNUIGlkCisgIEZST00gcHVibGljLnRl c3Q0OworIGlkIAorLS0tLQorKDAgcm93cykKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVj YXVzZSBvZjoKKy0tIHNlbGVjdCAobmFtZSkgb24gdGVzdDQKK1NFTEVDVCBuYW1lCisgIEZS T00gcHVibGljLnRlc3Q0OworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwxLDEsUkVBRCxTRUxF Q1QsVEFCTEUscHVibGljLnRlc3Q0LCJTRUxFQ1QgbmFtZQorICBGUk9NIHB1YmxpYy50ZXN0 NDsiCisgbmFtZSAKKy0tLS0tLQorKDAgcm93cykKKworLS0KKy0tIE5vdCBvYmplY3QgbG9n Z2VkCitJTlNFUlQgSU5UTyBwdWJsaWMudGVzdDQgKGlkKQorICAgICAgICAgICAgICAgICAg VkFMVUVTICgxKTsKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNl cnQgKG5hbWUpIG9uIHRlc3Q0CitJTlNFUlQgSU5UTyBwdWJsaWMudGVzdDQgKG5hbWUpCisg ICAgICAgICAgICAgICAgICBWQUxVRVMgKCd0ZXN0Jyk7CitOT1RJQ0U6ICBBVURJVDogT0JK RUNULDIsMSxXUklURSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3Q0LCJJTlNFUlQgSU5UTyBw dWJsaWMudGVzdDQgKG5hbWUpCisgICAgICAgICAgICAgICAgICBWQUxVRVMgKCd0ZXN0Jyk7 IgorLS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCitVUERBVEUgcHVibGljLnRlc3Q0CisgICBT RVQgbmFtZSA9ICdmb28nOworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0t IHVwZGF0ZSAoaWQpIG9uIHRlc3Q0CitVUERBVEUgcHVibGljLnRlc3Q0CisgICBTRVQgaWQg PSAxOworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwzLDEsV1JJVEUsVVBEQVRFLFRBQkxFLHB1 YmxpYy50ZXN0NCwiVVBEQVRFIHB1YmxpYy50ZXN0NAorICAgU0VUIGlkID0gMTsiCistLQor LS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChuYW1lKSBvbiB0ZXN0 NAorLS0gdXBkYXRlIChuYW1lKSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgc2VsZWN0IChuYW1l KSBkdWUgdG8gb3JkZXJpbmcKK3VwZGF0ZSBwdWJsaWMudGVzdDQgc2V0IG5hbWUgPSAnZm9v JyB3aGVyZSBuYW1lID0gJ2Jhcic7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDQsMSxXUklU RSxVUERBVEUsVEFCTEUscHVibGljLnRlc3Q0LHVwZGF0ZSBwdWJsaWMudGVzdDQgc2V0IG5h bWUgPSAnZm9vJyB3aGVyZSBuYW1lID0gJ2Jhcic7CistLQorLS0gRHJvcCB0ZXN0IHRhYmxl cworRFJPUCBUQUJMRSB0ZXN0MjsKK0RST1AgVklFVyB2d190ZXN0MzsKK0RST1AgVEFCTEUg dGVzdDM7CitEUk9QIFRBQkxFIHRlc3Q0OworLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBv ZiB1c2VyIDEgc28gdGhhdCBzZXNzaW9uIGxvZ2dpbmcgd2lsbCBiZSBkb25lCitcY29ubmVj dCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIKK2FsdGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1 ZGl0LmxvZyA9ICdEREwsIFJFQUQnOworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVz ZXIxCistLQorLS0gQ3JlYXRlIHRhYmxlIGlzIHNlc3Npb24gbG9nZ2VkCitDUkVBVEUgVEFC TEUgcHVibGljLmFjY291bnQKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAorCXBhc3N3b3Jk IFRFWFQsCisJZGVzY3JpcHRpb24gVEVYVAorKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9O LDEsMSxEREwsQ1JFQVRFIFRBQkxFLFRBQkxFLHB1YmxpYy5hY2NvdW50LCJDUkVBVEUgVEFC TEUgcHVibGljLmFjY291bnQKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAorCXBhc3N3b3Jk IFRFWFQsCisJZGVzY3JpcHRpb24gVEVYVAorKTsiCistLQorLS0gU2VsZWN0IGlzIHNlc3Np b24gbG9nZ2VkCitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQ7CitOT1RJQ0U6ICBBVURJVDog U0VTU0lPTiwyLDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50OyIK KyBpZCB8IG5hbWUgfCBwYXNzd29yZCB8IGRlc2NyaXB0aW9uIAorLS0tLSstLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tCisoMCByb3dzKQorCistLQorLS0gSW5zZXJ0IGlzIG5v dCBsb2dnZWQKK0lOU0VSVCBJTlRPIGFjY291bnQgKGlkLCBuYW1lLCBwYXNzd29yZCwgZGVz Y3JpcHRpb24pCisJCQkgVkFMVUVTICgxLCAndXNlcjEnLCAnSEFTSDEnLCAnYmxhaCwgYmxh aCcpOworLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEgc28gdGhhdCBvbmx5 IG9iamVjdCBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNz aW9uIHN1cGVyCithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAnbm9uZSc7 CithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0b3InOworXGNv bm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIxCistLQorLS0gQXVkaXRvciBncmFudHMg bm90IGxvZ2dlZAorR1JBTlQgU0VMRUNUIChwYXNzd29yZCksCisJICBVUERBVEUgKG5hbWUs IHBhc3N3b3JkKQorICAgT04gVEFCTEUgcHVibGljLmFjY291bnQKKyAgIFRPIGF1ZGl0b3I7 CistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK1NFTEVDVCBpZCwKKwkgICBuYW1lCisgIEZS T00gYWNjb3VudDsKKyBpZCB8IG5hbWUgIAorLS0tLSstLS0tLS0tCisgIDEgfCB1c2VyMQor KDEgcm93KQorCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0 IChwYXNzd29yZCkgb24gYWNjb3VudAorU0VMRUNUIHBhc3N3b3JkCisgIEZST00gYWNjb3Vu dDsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMSwxLFJFQUQsU0VMRUNULFRBQkxFLHB1Ymxp Yy5hY2NvdW50LCJTRUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50OyIKKyBwYXNzd29y ZCAKKy0tLS0tLS0tLS0KKyBIQVNIMQorKDEgcm93KQorCistLQorLS0gTm90IG9iamVjdCBs b2dnZWQKK1VQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFk YSc7CistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChwYXNz d29yZCkgb24gYWNjb3VudAorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBwYXNzd29yZCA9ICdI QVNIMic7CitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDIsMSxXUklURSxVUERBVEUsVEFCTEUs cHVibGljLmFjY291bnQsIlVQREFURSBhY2NvdW50CisgICBTRVQgcGFzc3dvcmQgPSAnSEFT SDInOyIKKy0tCistLSBDaGFuZ2UgcGVybWlzc2lvbnMgb2YgdXNlciAxIHNvIHRoYXQgc2Vz c2lvbiByZWxhdGlvbiBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9y ZWdyZXNzaW9uIHN1cGVyCithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2dfcmVs YXRpb24gPSBvbjsKK2FsdGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZyA9ICdyZWFk LCBXUklURSc7CitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNlcjEKKy0tCistLSBO b3QgbG9nZ2VkCitjcmVhdGUgdGFibGUgQUNDT1VOVF9ST0xFX01BUAorKAorCWFjY291bnRf aWQgSU5ULAorCXJvbGVfaWQgSU5UCispOworLS0KKy0tIEF1ZGl0b3IgZ3JhbnRzIG5vdCBs b2dnZWQKK0dSQU5UIFNFTEVDVAorICAgT04gVEFCTEUgcHVibGljLmFjY291bnRfcm9sZV9t YXAKKyAgIFRPIGF1ZGl0b3I7CistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgor LS0gc2VsZWN0IChwYXNzd29yZCkgb24gYWNjb3VudAorLS0gc2VsZWN0IG9uIGFjY291bnRf cm9sZV9tYXAKKy0tIFNlc3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cg PSByZWFkIGFuZCBsb2dfcmVsYXRpb24gPSBvbgorU0VMRUNUIGFjY291bnQucGFzc3dvcmQs CisJICAgYWNjb3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElO TkVSIEpPSU4gYWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRf cm9sZV9tYXAuYWNjb3VudF9pZDsKK05PVElDRTogIEFVRElUOiBPQkpFQ1QsMSwxLFJFQUQs U0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50LCJTRUxFQ1QgYWNjb3VudC5wYXNzd29yZCwK KwkgICBhY2NvdW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAgSU5O RVIgSk9JTiBhY2NvdW50X3JvbGVfbWFwCisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3VudF9y b2xlX21hcC5hY2NvdW50X2lkOyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEsMSxSRUFE LFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCwiU0VMRUNUIGFjY291bnQucGFzc3dvcmQs CisJICAgYWNjb3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3VudAorCSAgIElO TkVSIEpPSU4gYWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9IGFjY291bnRf cm9sZV9tYXAuYWNjb3VudF9pZDsiCitOT1RJQ0U6ICBBVURJVDogT0JKRUNULDEsMSxSRUFE LFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudF9yb2xlX21hcCwiU0VMRUNUIGFjY291bnQu cGFzc3dvcmQsCisJICAgYWNjb3VudF9yb2xlX21hcC5yb2xlX2lkCisgIEZST00gYWNjb3Vu dAorCSAgIElOTkVSIEpPSU4gYWNjb3VudF9yb2xlX21hcAorCQkJb24gYWNjb3VudC5pZCA9 IGFjY291bnRfcm9sZV9tYXAuYWNjb3VudF9pZDsiCitOT1RJQ0U6ICBBVURJVDogU0VTU0lP TiwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnRfcm9sZV9tYXAsIlNFTEVD VCBhY2NvdW50LnBhc3N3b3JkLAorCSAgIGFjY291bnRfcm9sZV9tYXAucm9sZV9pZAorICBG Uk9NIGFjY291bnQKKwkgICBJTk5FUiBKT0lOIGFjY291bnRfcm9sZV9tYXAKKwkJCW9uIGFj Y291bnQuaWQgPSBhY2NvdW50X3JvbGVfbWFwLmFjY291bnRfaWQ7IgorIHBhc3N3b3JkIHwg cm9sZV9pZCAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisoMCByb3dzKQorCistLQorLS0gT2Jq ZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gc2VsZWN0IChwYXNzd29yZCkgb24gYWNjb3Vu dAorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJlYWQg YW5kIGxvZ19yZWxhdGlvbiA9IG9uCitTRUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50 OworTk9USUNFOiAgQVVESVQ6IE9CSkVDVCwyLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGlj LmFjY291bnQsIlNFTEVDVCBwYXNzd29yZAorICBGUk9NIGFjY291bnQ7IgorTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sMiwxLFJFQUQsU0VMRUNULFRBQkxFLHB1YmxpYy5hY2NvdW50LCJT RUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50OyIKKyBwYXNzd29yZCAKKy0tLS0tLS0t LS0KKyBIQVNIMgorKDEgcm93KQorCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKKy0tIFNl c3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSByZWFkIGFuZCBsb2df cmVsYXRpb24gPSBvbgorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBkZXNjcmlwdGlvbiA9ICd5 YWRhLCB5YWRhJzsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMsMSxXUklURSxVUERBVEUs VEFCTEUscHVibGljLmFjY291bnQsIlVQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRp b24gPSAneWFkYSwgeWFkYSc7IgorLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoK Ky0tIHNlbGVjdCAocGFzc3dvcmQpIG9uIGFjY291bnQgKGluIHRoZSB3aGVyZSBjbGF1c2Up CistLSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9nID0gcmVhZCBh bmQgbG9nX3JlbGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRp b24gPSAneWFkYSwgeWFkYScKKyB3aGVyZSBwYXNzd29yZCA9ICdIQVNIMic7CitOT1RJQ0U6 ICBBVURJVDogT0JKRUNULDQsMSxXUklURSxVUERBVEUsVEFCTEUscHVibGljLmFjY291bnQs IlVQREFURSBhY2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYScKKyB3 aGVyZSBwYXNzd29yZCA9ICdIQVNIMic7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNCwx LFdSSVRFLFVQREFURSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQKKyAg IFNFVCBkZXNjcmlwdGlvbiA9ICd5YWRhLCB5YWRhJworIHdoZXJlIHBhc3N3b3JkID0gJ0hB U0gyJzsiCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgorLS0gdXBkYXRlIChw YXNzd29yZCkgb24gYWNjb3VudAorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBi ZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlvbiA9IG9uCitVUERBVEUgYWNjb3Vu dAorICAgU0VUIHBhc3N3b3JkID0gJ0hBU0gyJzsKK05PVElDRTogIEFVRElUOiBPQkpFQ1Qs NSwxLFdSSVRFLFVQREFURSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQK KyAgIFNFVCBwYXNzd29yZCA9ICdIQVNIMic7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s NSwxLFdSSVRFLFVQREFURSxUQUJMRSxwdWJsaWMuYWNjb3VudCwiVVBEQVRFIGFjY291bnQK KyAgIFNFVCBwYXNzd29yZCA9ICdIQVNIMic7IgorLS0KKy0tIENoYW5nZSBiYWNrIHRvIHN1 cGVydXNlciB0byBkbyBleGhhdXN0aXZlIHRlc3RzCitcY29ubmVjdCBjb250cmliX3JlZ3Jl c3Npb24gc3VwZXIKK1NFVCBwZ19hdWRpdC5sb2cgPSAnQUxMJzsKK1NFVCBwZ19hdWRpdC5s b2dfbm90aWNlID0gT047CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwyLDEsTUlTQyxTRVQs LCxTRVQgcGdfYXVkaXQubG9nX25vdGljZSA9IE9OOworU0VUIHBnX2F1ZGl0LmxvZ19yZWxh dGlvbiA9IE9OOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMywxLE1JU0MsU0VULCwsU0VU IHBnX2F1ZGl0LmxvZ19yZWxhdGlvbiA9IE9OOworLS0KKy0tIFNpbXBsZSBETyBibG9jawor RE8gJCQKK0JFR0lOCisJcmFpc2Ugbm90aWNlICd0ZXN0JzsKK0VORCAkJDsKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDQsMSxGVU5DVElPTixETywsLCJETyAkJAorQkVHSU4KKwlyYWlz ZSBub3RpY2UgJ3Rlc3QnOworRU5EICQkOyIKK05PVElDRTogIHRlc3QKKy0tCistLSBDcmVh dGUgdGVzdCBzY2hlbWEKK0NSRUFURSBTQ0hFTUEgdGVzdDsKK05PVElDRTogIEFVRElUOiBT RVNTSU9OLDUsMSxEREwsQ1JFQVRFIFNDSEVNQSwsLENSRUFURSBTQ0hFTUEgdGVzdDsKKy0t CistLSBDb3B5IHBnX2NsYXNzIHRvIHN0ZG91dAorQ09QWSBhY2NvdW50IFRPIHN0ZG91dDsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDYsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMu YWNjb3VudCxDT1BZIGFjY291bnQgVE8gc3Rkb3V0OworMQl1c2VyMQlIQVNIMgl5YWRhLCB5 YWRhCistLQorLS0gQ3JlYXRlIGEgdGFibGUgZnJvbSBhIHF1ZXJ5CitDUkVBVEUgVEFCTEUg dGVzdC5hY2NvdW50X2NvcHkgQVMKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudDsKK05PVElD RTogIEFVRElUOiBTRVNTSU9OLDcsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3Vu dCwiQ1JFQVRFIFRBQkxFIHRlc3QuYWNjb3VudF9jb3B5IEFTCitTRUxFQ1QgKgorICBGUk9N IGFjY291bnQ7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNywxLFdSSVRFLElOU0VSVCxU QUJMRSx0ZXN0LmFjY291bnRfY29weSwiQ1JFQVRFIFRBQkxFIHRlc3QuYWNjb3VudF9jb3B5 IEFTCitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQ7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sNywyLERETCxDUkVBVEUgVEFCTEUgQVMsLCwiQ1JFQVRFIFRBQkxFIHRlc3QuYWNjb3Vu dF9jb3B5IEFTCitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQ7IgorLS0KKy0tIENvcHkgZnJv bSBzdGRpbiB0byBhY2NvdW50IGNvcHkKK0NPUFkgdGVzdC5hY2NvdW50X2NvcHkgZnJvbSBz dGRpbjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDgsMSxXUklURSxJTlNFUlQsVEFCTEUs dGVzdC5hY2NvdW50X2NvcHksQ09QWSB0ZXN0LmFjY291bnRfY29weSBmcm9tIHN0ZGluOwor LS0KKy0tIFRlc3QgcHJlcGFyZWQgc3RhdGVtZW50CitQUkVQQVJFIHBnY2xhc3NzdG10IChv aWQpIEFTCitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQKKyBXSEVSRSBpZCA9ICQxOworTk9U SUNFOiAgQVVESVQ6IFNFU1NJT04sOSwxLFJFQUQsUFJFUEFSRSwsLCJQUkVQQVJFIHBnY2xh c3NzdG10IChvaWQpIEFTCitTRUxFQ1QgKgorICBGUk9NIGFjY291bnQKKyBXSEVSRSBpZCA9 ICQxOyIKK0VYRUNVVEUgcGdjbGFzc3N0bXQgKDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sMTAsMSxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuYWNjb3VudCwiUFJFUEFSRSBwZ2Ns YXNzc3RtdCAob2lkKSBBUworU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50CisgV0hFUkUgaWQg PSAkMTsiLDEKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEwLDIsUkVBRCxFWEVDVVRFLCws RVhFQ1VURSBwZ2NsYXNzc3RtdCAoMSk7CisgaWQgfCBuYW1lICB8IHBhc3N3b3JkIHwgZGVz Y3JpcHRpb24gCistLS0tKy0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgIDEg fCB1c2VyMSB8IEhBU0gyICAgIHwgeWFkYSwgeWFkYQorKDEgcm93KQorCitERUFMTE9DQVRF IHBnY2xhc3NzdG10OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTEsMSxNSVNDLERFQUxM T0NBVEUsLCxERUFMTE9DQVRFIHBnY2xhc3NzdG10OworLS0KKy0tIFRlc3QgY3Vyc29yIC0g bm8gdGFibGVzIHdpbGwgYmUgbG9nZ2VkIHNpbmNlIHBnX2NsYXNzIGlzIGEgc3lzdGVtIHRh YmxlCitCRUdJTjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDEyLDEsTUlTQyxCRUdJTiws LEJFR0lOOworREVDTEFSRSBjdGVzdCBTQ1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIGNvdW50 KCopCisgIEZST00KKygKKwlTRUxFQ1QgcmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSBM SU1JVCAxCisgKSBzdWJxdWVyeTsKK0ZFVENIIE5FWFQgRlJPTSBjdGVzdDsKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDEzLDEsTUlTQyxGRVRDSCwsLEZFVENIIE5FWFQgRlJPTSBjdGVz dDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQorCitDTE9TRSBjdGVzdDsK K0NPTU1JVDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDE0LDEsTUlTQyxDT01NSVQsLCxD T01NSVQ7CistLQorLS0gVGVzdCBwcmVwYXJlZCBpbnNlcnQKK0NSRUFURSBUQUJMRSB0ZXN0 LnRlc3RfaW5zZXJ0CisoCisJaWQgSU5UCispOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s MTUsMSxEREwsQ1JFQVRFIFRBQkxFLFRBQkxFLHRlc3QudGVzdF9pbnNlcnQsIkNSRUFURSBU QUJMRSB0ZXN0LnRlc3RfaW5zZXJ0CisoCisJaWQgSU5UCispOyIKK1BSRVBBUkUgcGdjbGFz c3N0bXQgKG9pZCkgQVMKK0lOU0VSVCBJTlRPIHRlc3QudGVzdF9pbnNlcnQgKGlkKQorICAg ICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoJDEpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sMTYsMSxXUklURSxQUkVQQVJFLCwsIlBSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMK K0lOU0VSVCBJTlRPIHRlc3QudGVzdF9pbnNlcnQgKGlkKQorICAgICAgICAgICAgICAgICAg ICAgIFZBTFVFUyAoJDEpOyIKK0VYRUNVVEUgcGdjbGFzc3N0bXQgKDEpOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sMTcsMSxXUklURSxJTlNFUlQsVEFCTEUsdGVzdC50ZXN0X2luc2Vy dCwiUFJFUEFSRSBwZ2NsYXNzc3RtdCAob2lkKSBBUworSU5TRVJUIElOVE8gdGVzdC50ZXN0 X2luc2VydCAoaWQpCisgICAgICAgICAgICAgICAgICAgICAgVkFMVUVTICgkMSk7IiwxCitO T1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxNywyLFdSSVRFLEVYRUNVVEUsLCxFWEVDVVRFIHBn Y2xhc3NzdG10ICgxKTsKKy0tCistLSBDaGVjayB0aGF0IHByaW1hcnkga2V5IGNyZWF0aW9u IGlzIGxvZ2dlZAorQ1JFQVRFIFRBQkxFIHB1YmxpYy50ZXN0CisoCisJaWQgSU5ULAorCW5h bWUgVEVYVCwKKwlkZXNjcmlwdGlvbiBURVhULAorCUNPTlNUUkFJTlQgdGVzdF9wa2V5IFBS SU1BUlkgS0VZIChpZCkKKyk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwxOCwxLERETCxD UkVBVEUgSU5ERVgsSU5ERVgscHVibGljLnRlc3RfcGtleSwiQ1JFQVRFIFRBQkxFIHB1Ymxp Yy50ZXN0CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlkZXNjcmlwdGlvbiBURVhULAor CUNPTlNUUkFJTlQgdGVzdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkKKyk7IgorTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sMTgsMixEREwsQ1JFQVRFIFRBQkxFLFRBQkxFLHB1YmxpYy50ZXN0 LCJDUkVBVEUgVEFCTEUgcHVibGljLnRlc3QKKygKKwlpZCBJTlQsCisJbmFtZSBURVhULAor CWRlc2NyaXB0aW9uIFRFWFQsCisJQ09OU1RSQUlOVCB0ZXN0X3BrZXkgUFJJTUFSWSBLRVkg KGlkKQorKTsiCistLQorLS0gQ2hlY2sgdGhhdCBhbmFseXplIGlzIGxvZ2dlZAorQU5BTFla RSB0ZXN0OworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMTksMSxNSVNDLEFOQUxZWkUsLCxB TkFMWVpFIHRlc3Q7CistLQorLS0gR3JhbnRzIHRvIHB1YmxpYyBzaG91bGQgbm90IGNhdXNl IG9iamVjdCBsb2dnaW5nIChzZXNzaW9uIGxvZ2dpbmcgd2lsbAorLS0gc3RpbGwgaGFwcGVu KQorR1JBTlQgU0VMRUNUCisgIE9OIFRBQkxFIHB1YmxpYy50ZXN0CisgIFRPIFBVQkxJQzsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIwLDEsUk9MRSxHUkFOVCwsLCJHUkFOVCBTRUxF Q1QKKyAgT04gVEFCTEUgcHVibGljLnRlc3QKKyAgVE8gUFVCTElDOyIKK1NFTEVDVCAqCisg IEZST00gdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIxLDEsUkVBRCxTRUxFQ1Qs VEFCTEUscHVibGljLnRlc3QsIlNFTEVDVCAqCisgIEZST00gdGVzdDsiCisgaWQgfCBuYW1l IHwgZGVzY3JpcHRpb24gCistLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tCisoMCByb3dzKQor CistLSBDaGVjayB0aGF0IHN0YXRlbWVudHMgd2l0aG91dCBjb2x1bW5zIGxvZworU0VMRUNU CisgIEZST00gdGVzdDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDIyLDEsUkVBRCxTRUxF Q1QsVEFCTEUscHVibGljLnRlc3QsIlNFTEVDVAorICBGUk9NIHRlc3Q7IgorLS0KKygwIHJv d3MpCisKK1NFTEVDVCAxLAorCSAgIGN1cnJlbnRfdXNlcjsKK05PVElDRTogIEFVRElUOiBT RVNTSU9OLDIzLDEsUkVBRCxTRUxFQ1QsLCwiU0VMRUNUIDEsCisJICAgY3VycmVudF91c2Vy OyIKKyA/Y29sdW1uPyB8IGN1cnJlbnRfdXNlciAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgMSB8IHN1cGVyCisoMSByb3cpCisKK0RPICQkCitERUNMQVJFCisJdGVz dCBJTlQ7CitCRUdJTgorCVNFTEVDVCAxCisJICBJTlRPIHRlc3Q7CitFTkQgJCQ7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwyNCwxLEZVTkNUSU9OLERPLCwsIkRPICQkCitERUNMQVJF CisJdGVzdCBJTlQ7CitCRUdJTgorCVNFTEVDVCAxCisJICBJTlRPIHRlc3Q7CitFTkQgJCQ7 IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjQsMixSRUFELFNFTEVDVCwsLFNFTEVDVCAx CitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiU0VMRUNUIDEiCitQTC9wZ1NRTCBmdW5jdGlv biBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDUgYXQgU1FMIHN0YXRlbWVudAorZXhwbGFpbiBz ZWxlY3QgMTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI1LDEsUkVBRCxTRUxFQ1QsLCxl eHBsYWluIHNlbGVjdCAxOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjUsMixNSVNDLEVY UExBSU4sLCxleHBsYWluIHNlbGVjdCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTApCisoMSBy b3cpCisKKy0tCistLSBUZXN0IHRoYXQgbG9va3MgaW5zaWRlIG9mIGRvIGJsb2NrcyBsb2cK K0lOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkgIFZBTFVFUyAoMSk7CitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiwyNiwxLFdSSVRFLElOU0VSVCxUQUJMRSxwdWJsaWMudGVzdCwiSU5TRVJU IElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgxKTsiCitJTlNFUlQgSU5UTyBURVNUIChp ZCkKKwkJICBWQUxVRVMgKDIpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMjcsMSxXUklU RSxJTlNFUlQsVEFCTEUscHVibGljLnRlc3QsIklOU0VSVCBJTlRPIFRFU1QgKGlkKQorCQkg IFZBTFVFUyAoMik7IgorSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgzKTsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI4LDEsV1JJVEUsSU5TRVJULFRBQkxFLHB1Ymxp Yy50ZXN0LCJJTlNFUlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxVRVMgKDMpOyIKK0RPICQk CitERUNMQVJFCisJcmVzdWx0IFJFQ09SRDsKK0JFR0lOCisJRk9SIHJlc3VsdCBJTgorCQlT RUxFQ1QgaWQKKwkJICBGUk9NIHRlc3QKKwlMT09QCisJCUlOU0VSVCBJTlRPIHRlc3QgKGlk KQorCQkgICAgIFZBTFVFUyAocmVzdWx0LmlkICsgMTAwKTsKKwlFTkQgTE9PUDsKK0VORCAk JDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDEsRlVOQ1RJT04sRE8sLCwiRE8gJCQK K0RFQ0xBUkUKKwlyZXN1bHQgUkVDT1JEOworQkVHSU4KKwlGT1IgcmVzdWx0IElOCisJCVNF TEVDVCBpZAorCQkgIEZST00gdGVzdAorCUxPT1AKKwkJSU5TRVJUIElOVE8gdGVzdCAoaWQp CisJCSAgICAgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApOworCUVORCBMT09QOworRU5EICQk OyIKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDIsUkVBRCxTRUxFQ1QsVEFCTEUscHVi bGljLnRlc3QsIlNFTEVDVCBpZAorCQkgIEZST00gdGVzdCIKK0NPTlRFWFQ6ICBQTC9wZ1NR TCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDUgYXQgRk9SIG92ZXIgU0VMRUNU IHJvd3MKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDMsV1JJVEUsSU5TRVJULFRBQkxF LHB1YmxpYy50ZXN0LCJJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJICAgICBWQUxVRVMgKHJl c3VsdC5pZCArIDEwMCkiLCwsCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiSU5TRVJUIElO VE8gdGVzdCAoaWQpCisJCSAgICAgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIgorUEwvcGdT UUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA5IGF0IFNRTCBzdGF0ZW1lbnQK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDI5LDQsV1JJVEUsSU5TRVJULFRBQkxFLHB1Ymxp Yy50ZXN0LCJJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJICAgICBWQUxVRVMgKHJlc3VsdC5p ZCArIDEwMCkiLCwsCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiSU5TRVJUIElOVE8gdGVz dCAoaWQpCisJCSAgICAgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIgorUEwvcGdTUUwgZnVu Y3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA5IGF0IFNRTCBzdGF0ZW1lbnQKK05PVElD RTogIEFVRElUOiBTRVNTSU9OLDI5LDUsV1JJVEUsSU5TRVJULFRBQkxFLHB1YmxpYy50ZXN0 LCJJTlNFUlQgSU5UTyB0ZXN0IChpZCkKKwkJICAgICBWQUxVRVMgKHJlc3VsdC5pZCArIDEw MCkiLCwsCitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiSU5TRVJUIElOVE8gdGVzdCAoaWQp CisJCSAgICAgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApIgorUEwvcGdTUUwgZnVuY3Rpb24g aW5saW5lX2NvZGVfYmxvY2sgbGluZSA5IGF0IFNRTCBzdGF0ZW1lbnQKKy0tCistLSBUZXN0 IG9iZnVzY2F0ZWQgZHluYW1pYyBzcWwgZm9yIGNsZWFuIGxvZ2dpbmcKK0RPICQkCitERUNM QVJFCisJdGFibGVfbmFtZSBURVhUID0gJ2RvX3RhYmxlJzsKK0JFR0lOCisJRVhFQ1VURSAn Q1JFQVRFIFRBQkxFICcgfHwgdGFibGVfbmFtZSB8fCAnICgid2VpcmQgbmFtZSIgSU5UKSc7 CisJRVhFQ1VURSAnRFJPUCB0YWJsZSAnIHx8IHRhYmxlX25hbWU7CitFTkQgJCQ7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwzMCwxLEZVTkNUSU9OLERPLCwsIkRPICQkCitERUNMQVJF CisJdGFibGVfbmFtZSBURVhUID0gJ2RvX3RhYmxlJzsKK0JFR0lOCisJRVhFQ1VURSAnQ1JF QVRFIFRBQkxFICcgfHwgdGFibGVfbmFtZSB8fCAnICgiIndlaXJkIG5hbWUiIiBJTlQpJzsK KwlFWEVDVVRFICdEUk9QIHRhYmxlICcgfHwgdGFibGVfbmFtZTsKK0VORCAkJDsiCitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiwzMCwyLERETCxDUkVBVEUgVEFCTEUsVEFCTEUscHVibGlj LmRvX3RhYmxlLCJDUkVBVEUgVEFCTEUgZG9fdGFibGUgKCIid2VpcmQgbmFtZSIiIElOVCki CitDT05URVhUOiAgU1FMIHN0YXRlbWVudCAiQ1JFQVRFIFRBQkxFIGRvX3RhYmxlICgid2Vp cmQgbmFtZSIgSU5UKSIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxp bmUgNSBhdCBFWEVDVVRFIHN0YXRlbWVudAorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzAs MyxEREwsRFJPUCBUQUJMRSxUQUJMRSxwdWJsaWMuZG9fdGFibGUsRFJPUCB0YWJsZSBkb190 YWJsZQorQ09OVEVYVDogIFNRTCBzdGF0ZW1lbnQgIkRST1AgdGFibGUgZG9fdGFibGUiCitQ TC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDYgYXQgRVhFQ1VURSBz dGF0ZW1lbnQKKy0tCistLSBHZW5lcmF0ZSBhbiBlcnJvciBhbmQgbWFrZSBzdXJlIHRoZSBz dGFjayBnZXRzIGNsZWFyZWQKK0RPICQkCitCRUdJTgorCUNSRUFURSBUQUJMRSBib2d1cy50 ZXN0X2Jsb2NrCisJKAorCQlpZCBJTlQKKwkpOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6 IFNFU1NJT04sMzEsMSxGVU5DVElPTixETywsLCJETyAkJAorQkVHSU4KKwlDUkVBVEUgVEFC TEUgYm9ndXMudGVzdF9ibG9jaworCSgKKwkJaWQgSU5UCisJKTsKK0VORCAkJDsiCitFUlJP UjogIHNjaGVtYSAiYm9ndXMiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IENSRUFURSBUQUJM RSBib2d1cy50ZXN0X2Jsb2NrCisgICAgICAgICAgICAgICAgICAgICBeCitRVUVSWTogIENS RUFURSBUQUJMRSBib2d1cy50ZXN0X2Jsb2NrCisJKAorCQlpZCBJTlQKKwkpCitDT05URVhU OiAgUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSAzIGF0IFNRTCBz dGF0ZW1lbnQKKy0tCistLSBUZXN0IGFsdGVyIHRhYmxlIHN0YXRlbWVudHMKK0FMVEVSIFRB QkxFIHB1YmxpYy50ZXN0CisJRFJPUCBDT0xVTU4gZGVzY3JpcHRpb24gOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sMzIsMSxEREwsQUxURVIgVEFCTEUsVEFCTEUgQ09MVU1OLHB1Ymxp Yy50ZXN0LmRlc2NyaXB0aW9uLCJBTFRFUiBUQUJMRSBwdWJsaWMudGVzdAorCURST1AgQ09M VU1OIGRlc2NyaXB0aW9uIDsiCitBTFRFUiBUQUJMRSBwdWJsaWMudGVzdAorCVJFTkFNRSBU TyB0ZXN0MjsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDMzLDEsRERMLEFMVEVSIFRBQkxF LFRBQkxFLHB1YmxpYy50ZXN0LCJBTFRFUiBUQUJMRSBwdWJsaWMudGVzdAorCVJFTkFNRSBU TyB0ZXN0MjsiCitBTFRFUiBUQUJMRSBwdWJsaWMudGVzdDIKKwlTRVQgU0NIRU1BIHRlc3Q7 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzNCwxLERETCxBTFRFUiBUQUJMRSxJTkRFWCxw dWJsaWMudGVzdF9wa2V5LCJBTFRFUiBUQUJMRSBwdWJsaWMudGVzdDIKKwlTRVQgU0NIRU1B IHRlc3Q7IgorQUxURVIgVEFCTEUgdGVzdC50ZXN0MgorCUFERCBDT0xVTU4gZGVzY3JpcHRp b24gVEVYVDsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDM1LDEsRERMLEFMVEVSIFRBQkxF LFRBQkxFLHRlc3QudGVzdDIsIkFMVEVSIFRBQkxFIHRlc3QudGVzdDIKKwlBREQgQ09MVU1O IGRlc2NyaXB0aW9uIFRFWFQ7IgorQUxURVIgVEFCTEUgdGVzdC50ZXN0MgorCURST1AgQ09M VU1OIGRlc2NyaXB0aW9uOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzYsMSxEREwsQUxU RVIgVEFCTEUsVEFCTEUgQ09MVU1OLHRlc3QudGVzdDIuZGVzY3JpcHRpb24sIkFMVEVSIFRB QkxFIHRlc3QudGVzdDIKKwlEUk9QIENPTFVNTiBkZXNjcmlwdGlvbjsiCitEUk9QIFRBQkxF IHRlc3QudGVzdDI7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzNywxLERETCxEUk9QIFRB QkxFLFRBQkxFLHRlc3QudGVzdDIsRFJPUCBUQUJMRSB0ZXN0LnRlc3QyOworTk9USUNFOiAg QVVESVQ6IFNFU1NJT04sMzcsMSxEREwsRFJPUCBUQUJMRSxUQUJMRSBDT05TVFJBSU5ULHRl c3RfcGtleSBvbiB0ZXN0LnRlc3QyLERST1AgVEFCTEUgdGVzdC50ZXN0MjsKK05PVElDRTog IEFVRElUOiBTRVNTSU9OLDM3LDEsRERMLERST1AgVEFCTEUsSU5ERVgsdGVzdC50ZXN0X3Br ZXksRFJPUCBUQUJMRSB0ZXN0LnRlc3QyOworLS0KKy0tIFRlc3QgbXVsdGlwbGUgc3RhdGVt ZW50cyB3aXRoIG9uZSBzZW1pLWNvbG9uCitDUkVBVEUgU0NIRU1BIGZvbworCUNSRUFURSBU QUJMRSBmb28uYmFyIChpZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5iYXogKGlkIGludCk7 CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiwzOCwxLERETCxDUkVBVEUgVEFCTEUsVEFCTEUs Zm9vLmJhciwiQ1JFQVRFIFNDSEVNQSBmb28KKwlDUkVBVEUgVEFCTEUgZm9vLmJhciAoaWQg aW50KQorCUNSRUFURSBUQUJMRSBmb28uYmF6IChpZCBpbnQpOyIKK05PVElDRTogIEFVRElU OiBTRVNTSU9OLDM4LDIsRERMLENSRUFURSBUQUJMRSxUQUJMRSxmb28uYmF6LCJDUkVBVEUg U0NIRU1BIGZvbworCUNSRUFURSBUQUJMRSBmb28uYmFyIChpZCBpbnQpCisJQ1JFQVRFIFRB QkxFIGZvby5iYXogKGlkIGludCk7IgorTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sMzgsMyxE REwsQ1JFQVRFIFNDSEVNQSwsLCJDUkVBVEUgU0NIRU1BIGZvbworCUNSRUFURSBUQUJMRSBm b28uYmFyIChpZCBpbnQpCisJQ1JFQVRFIFRBQkxFIGZvby5iYXogKGlkIGludCk7IgorLS0K Ky0tIFRlc3QgYWdncmVnYXRlCitDUkVBVEUgRlVOQ1RJT04gcHVibGljLmludF9hZGQKKygK KwlhIElOVCwKKwliIElOVAorKQorCVJFVFVSTlMgSU5UIExBTkdVQUdFIHBscGdzcWwgQVMg JCQKK0JFR0lOCisJcmV0dXJuIGEgKyBiOworRU5EICQkOworTk9USUNFOiAgQVVESVQ6IFNF U1NJT04sMzksMSxEREwsQ1JFQVRFIEZVTkNUSU9OLCwsIkNSRUFURSBGVU5DVElPTiBwdWJs aWMuaW50X2FkZAorKAorCWEgSU5ULAorCWIgSU5UCispCisJUkVUVVJOUyBJTlQgTEFOR1VB R0UgcGxwZ3NxbCBBUyAkJAorQkVHSU4KKwlyZXR1cm4gYSArIGI7CitFTkQgJCQ7IgorU0VM RUNUIGludF9hZGQoMSwgMSk7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0MCwxLFJFQUQs U0VMRUNULCwsIlNFTEVDVCBpbnRfYWRkKDEsIDEpOyIKK05PVElDRTogIEFVRElUOiBTRVNT SU9OLDQwLDIsRlVOQ1RJT04sRVhFQ1VURSxGVU5DVElPTixwdWJsaWMuaW50X2FkZCwiU0VM RUNUIGludF9hZGQoMSwgMSk7IgorIGludF9hZGQgCistLS0tLS0tLS0KKyAgICAgICAyCiso MSByb3cpCisKK0NSRUFURSBBR0dSRUdBVEUgcHVibGljLnN1bV90ZXN0KElOVCkgKFNGVU5D PXB1YmxpYy5pbnRfYWRkLCBTVFlQRT1JTlQsIElOSVRDT05EPScwJyk7CitOT1RJQ0U6ICBB VURJVDogU0VTU0lPTiw0MSwxLERETCxDUkVBVEUgQUdHUkVHQVRFLCwsIkNSRUFURSBBR0dS RUdBVEUgcHVibGljLnN1bV90ZXN0KElOVCkgKFNGVU5DPXB1YmxpYy5pbnRfYWRkLCBTVFlQ RT1JTlQsIElOSVRDT05EPScwJyk7IgorQUxURVIgQUdHUkVHQVRFIHB1YmxpYy5zdW1fdGVz dChpbnRlZ2VyKSBSRU5BTUUgVE8gc3VtX3Rlc3QyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJ T04sNDIsMSxEREwsQUxURVIgQUdHUkVHQVRFLCwsQUxURVIgQUdHUkVHQVRFIHB1YmxpYy5z dW1fdGVzdChpbnRlZ2VyKSBSRU5BTUUgVE8gc3VtX3Rlc3QyOworLS0KKy0tIFRlc3QgY29u dmVyc2lvbgorQ1JFQVRFIENPTlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBGT1Ig J1NRTF9BU0NJSScgVE8gJ01VTEVfSU5URVJOQUwnIEZST00gcGdfY2F0YWxvZy5hc2NpaV90 b19taWM7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0MywxLERETCxDUkVBVEUgQ09OVkVS U0lPTiwsLENSRUFURSBDT05WRVJTSU9OIHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QgRk9SICdT UUxfQVNDSUknIFRPICdNVUxFX0lOVEVSTkFMJyBGUk9NIHBnX2NhdGFsb2cuYXNjaWlfdG9f bWljOworQUxURVIgQ09OVkVSU0lPTiBwdWJsaWMuY29udmVyc2lvbl90ZXN0IFJFTkFNRSBU TyBjb252ZXJzaW9uX3Rlc3QyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDQsMSxEREws QUxURVIgQ09OVkVSU0lPTiwsLEFMVEVSIENPTlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25f dGVzdCBSRU5BTUUgVE8gY29udmVyc2lvbl90ZXN0MjsKKy0tCistLSBUZXN0IGNyZWF0ZS9h bHRlci9kcm9wIGRhdGFiYXNlCitDUkVBVEUgREFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9u X3BnYXVkaXQ7CitOT1RJQ0U6ICBBVURJVDogU0VTU0lPTiw0NSwxLERETCxDUkVBVEUgREFU QUJBU0UsLCxDUkVBVEUgREFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQ7CitB TFRFUiBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdCBSRU5BTUUgVE8gY29u dHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQyOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04sNDYs MSxEREwsQUxURVIgREFUQUJBU0UsLCxBTFRFUiBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Np b25fcGdhdWRpdCBSRU5BTUUgVE8gY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQyOworRFJP UCBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDI7CitOT1RJQ0U6ICBBVURJ VDogU0VTU0lPTiw0NywxLERETCxEUk9QIERBVEFCQVNFLCwsRFJPUCBEQVRBQkFTRSBjb250 cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDI7CistLQorLS0gVGVzdCB0aGF0IGZyZWVzIGEgbWVt b3J5IGNvbnRleHQgZWFybGllciB0aGFuIGV4cGVjdGVkCitDUkVBVEUgVEFCTEUgaG9nZQor KAorCWlkIGludAorKTsKK05PVElDRTogIEFVRElUOiBTRVNTSU9OLDQ4LDEsRERMLENSRUFU RSBUQUJMRSxUQUJMRSxwdWJsaWMuaG9nZSwiQ1JFQVRFIFRBQkxFIGhvZ2UKKygKKwlpZCBp bnQKKyk7IgorQ1JFQVRFIEZVTkNUSU9OIHRlc3QoKQorCVJFVFVSTlMgSU5UIEFTICQkCitE RUNMQVJFCisgICAgY3VyMSBjdXJzb3IgZm9yIHNlbGVjdCAqIGZyb20gaG9nZTsKKyAgICB0 bXAgaW50OworQkVHSU4KKyAgICBPUEVOIGN1cjE7CisgICAgRkVUQ0ggY3VyMSBpbnRvIHRt cDsKKyAgICBSRVRVUk4gdG1wOworRU5EICQkCitMQU5HVUFHRSBwbHBnc3FsIDsKK05PVElD RTogIEFVRElUOiBTRVNTSU9OLDQ5LDEsRERMLENSRUFURSBGVU5DVElPTiwsLCJDUkVBVEUg RlVOQ1RJT04gdGVzdCgpCisJUkVUVVJOUyBJTlQgQVMgJCQKK0RFQ0xBUkUKKyAgICBjdXIx IGN1cnNvciBmb3Igc2VsZWN0ICogZnJvbSBob2dlOworICAgIHRtcCBpbnQ7CitCRUdJTgor ICAgIE9QRU4gY3VyMTsKKyAgICBGRVRDSCBjdXIxIGludG8gdG1wOworICAgIFJFVFVSTiB0 bXA7CitFTkQgJCQKK0xBTkdVQUdFIHBscGdzcWwgOyIKK1NFTEVDVCB0ZXN0KCk7CitOT1RJ Q0U6ICBBVURJVDogU0VTU0lPTiw1MCwxLFJFQUQsU0VMRUNULCwsU0VMRUNUIHRlc3QoKTsK K05PVElDRTogIEFVRElUOiBTRVNTSU9OLDUwLDIsRlVOQ1RJT04sRVhFQ1VURSxGVU5DVElP TixwdWJsaWMudGVzdCxTRUxFQ1QgdGVzdCgpOworTk9USUNFOiAgQVVESVQ6IFNFU1NJT04s NTAsMyxSRUFELFNFTEVDVCxUQUJMRSxwdWJsaWMuaG9nZSxzZWxlY3QgKiBmcm9tIGhvZ2UK K0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiB0ZXN0KCkgbGluZSA2IGF0IE9QRU4KKyB0 ZXN0IAorLS0tLS0tCisgICAgIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9jb250cmliL3Bn X2F1ZGl0L3BnX2F1ZGl0LS0xLjAuMC5zcWwgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0 LS0xLjAuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5ZWU4 MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQtLTEuMC4w LnNxbApAQCAtMCwwICsxLDIyIEBACisvKiBwZ19hdWRpdC9wZ19hdWRpdC0tMS4wLjAuc3Fs ICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhl ciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJ T04gcGdfYXVkaXQiIHRvIGxvYWQgdGhpcyBmaWxlLlxxdWl0CisKK0NSRUFURSBGVU5DVElP TiBwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQoKQorCVJFVFVSTlMgZXZlbnRfdHJpZ2dlcgor CUxBTkdVQUdFIEMKKwlBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2F1ZGl0X2RkbF9jb21t YW5kX2VuZCc7CisKK0NSRUFURSBFVkVOVCBUUklHR0VSIHBnX2F1ZGl0X2RkbF9jb21tYW5k X2VuZAorCU9OIGRkbF9jb21tYW5kX2VuZAorCUVYRUNVVEUgUFJPQ0VEVVJFIHBnX2F1ZGl0 X2RkbF9jb21tYW5kX2VuZCgpOworCitDUkVBVEUgRlVOQ1RJT04gcGdfYXVkaXRfc3FsX2Ry b3AoKQorCVJFVFVSTlMgZXZlbnRfdHJpZ2dlcgorCUxBTkdVQUdFIEMKKwlBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ3BnX2F1ZGl0X3NxbF9kcm9wJzsKKworQ1JFQVRFIEVWRU5UIFRSSUdH RVIgcGdfYXVkaXRfc3FsX2Ryb3AKKwlPTiBzcWxfZHJvcAorCUVYRUNVVEUgUFJPQ0VEVVJF IHBnX2F1ZGl0X3NxbF9kcm9wKCk7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX2F1ZGl0L3Bn X2F1ZGl0LmMgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkMmQ3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfYXVkaXQvcGdfYXVkaXQuYwpAQCAtMCwwICsxLDE3OTAgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKiBwZ19hdWRpdC5jCisgKgorICogQW4gYXVkaXRpbmcgZXh0 ZW5zaW9uIGZvciBQb3N0Z3JlU1FMLiBJbXByb3ZlcyBvbiBzdGFuZGFyZCBzdGF0ZW1lbnQg bG9nZ2luZworICogYnkgYWRkaW5nIG1vcmUgbG9nZ2luZyBjbGFzc2VzLCBvYmplY3QgbGV2 ZWwgbG9nZ2luZywgYW5kIHByb3ZpZGluZworICogZnVsbHktcXVhbGlmaWVkIG9iamVjdCBu YW1lcyBmb3IgYWxsIERNTCBhbmQgbWFueSBEREwgc3RhdGVtZW50cyAoU2VlCisgKiBwZ19h dWRpdC5zZ21sIGZvciBkZXRhaWxzKS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAx NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBJREVOVElG SUNBVElPTgorICoJCSAgY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5o IgorI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9jYXRhbG9n LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhY2Nlc3MuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNs dWRlICJjb21tYW5kcy9kYmNvbW1hbmRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9j LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgorI2luY2x1ZGUgImV4 ZWN1dG9yL2V4ZWN1dG9yLmgiCisjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCisjaW5jbHVk ZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibGlicHEvYXV0aC5oIgorI2luY2x1ZGUgIm5v ZGVzL25vZGVzLmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidXRp bHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGls cy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0aWxz L3N5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisKK1BHX01PRFVM RV9NQUdJQzsKKwordm9pZCBfUEdfaW5pdCh2b2lkKTsKKworLyoKKyAqIEV2ZW50IHRyaWdn ZXIgcHJvdG90eXBlcworICovCitEYXR1bSBwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQoUEdf RlVOQ1RJT05fQVJHUyk7CitEYXR1bSBwZ19hdWRpdF9zcWxfZHJvcChQR19GVU5DVElPTl9B UkdTKTsKKworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19hdWRpdF9kZGxfY29tbWFuZF9lbmQp OworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19hdWRpdF9zcWxfZHJvcCk7CisKKy8qCisgKiBh dWRpdFJvbGUgaXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcGdfYXVkaXQucm9sZSBHVUMs IHdoaWNoIGNvbnRhaW5zIHRoZQorICogcm9sZSBmb3IgZ3JhbnQtYmFzZWQgYXVkaXRpbmcu CisgKi8KK2NoYXIgKmF1ZGl0Um9sZSA9IE5VTEw7CisKKy8qCisgKiBhdWRpdExvZyBpcyB0 aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBwZ19hdWRpdC5sb2cgR1VDLCBlLmcuICJyZWFkLCB3 cml0ZSwgZGRsIgorICogKGl0J3Mgbm90IHVzZWQgYnkgdGhlIG1vZHVsZSBidXQgaXMgcmVx dWlyZWQgYnkgRGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUpLgorICogRWFjaCB0b2tlbiBj b3JyZXNwb25kcyB0byBhIGZsYWcgaW4gZW51bSBMb2dDbGFzcyBiZWxvdy4gV2UgY29udmVy dCB0aGUgbGlzdAorICogb2YgdG9rZW5zIGludG8gYSBiaXRtYXAgaW4gYXVkaXRMb2dCaXRt YXAgZm9yIGludGVybmFsIHVzZS4KKyAqLworY2hhciAqYXVkaXRMb2cgPSBOVUxMOworc3Rh dGljIHVpbnQ2NCBhdWRpdExvZ0JpdG1hcCA9IDA7CisKKy8qCisgKiBhdWRpdExvZ1JlbGF0 aW9uIGNvbnRyb2xzIHdoZXRoZXIgYWxsIHJlbGF0aW9ucyBhcmUgbG9nZ2VkIGZvciBSRUFE IGFuZAorICogV1JJVEUgY2xhc3NlcyBkdXJpbmcgc2Vzc2lvbiBsb2dnaW5nLgorICovCiti b29sIGF1ZGl0TG9nUmVsYXRpb24gPSBmYWxzZTsKKworLyoKKyAqIGF1ZGl0TG9nTm90aWNl IHJhaXNlcyBhIG5vdGljZSBhcyB3ZWxsIGFzIGxvZ2dpbmcgdmlhIHRoZSBzdGFuZGFyZCBm YWNpbGl0eS4KKyAqIFRoaXMgaXMgcHJpbWFyaWx5IGZvciB0aGUgYmVuZWZpdCBvZiB0ZXN0 aW5nLgorICovCitib29sIGF1ZGl0TG9nTm90aWNlID0gZmFsc2U7CisKKy8qCisgKiBTdHJp bmcgY29uc3RhbnRzIGZvciBhdWRpdCB0eXBlcyAtIHVzZWQgd2hlbiBsb2dnaW5nIHRvIGRp c3Rpbmd1aXNoIHNlc3Npb24KKyAqIHZzLiBvYmplY3QgYXVkaXRpbmcuCisgKi8KKyNkZWZp bmUgQVVESVRfVFlQRV9PQkpFQ1QJIk9CSkVDVCIKKyNkZWZpbmUgQVVESVRfVFlQRV9TRVNT SU9OCSJTRVNTSU9OIgorCisvKgorICogU3RyaW5nIGNvbnN0YW50cyBmb3IgbG9nIGNsYXNz ZXMgLSB1c2VkIHdoZW4gcHJvY2Vzc2luZyB0b2tlbnMgaW4gdGhlCisgKiBwZ19hdWRpdC5s b2cgR1VDLgorICovCisjZGVmaW5lIENMQVNTX0RETAkJCSJEREwiCisjZGVmaW5lIENMQVNT X0ZVTkNUSU9OCQkiRlVOQ1RJT04iCisjZGVmaW5lIENMQVNTX01JU0MJCQkiTUlTQyIKKyNk ZWZpbmUgQ0xBU1NfUEFSQU1FVEVSCQkiUEFSQU1FVEVSIgorI2RlZmluZSBDTEFTU19SRUFE CQkJIlJFQUQiCisjZGVmaW5lIENMQVNTX1JPTEUJCQkiUk9MRSIKKyNkZWZpbmUgQ0xBU1Nf V1JJVEUJCQkiV1JJVEUiCisKKyNkZWZpbmUgQ0xBU1NfQUxMCQkJIkFMTCIKKyNkZWZpbmUg Q0xBU1NfTk9ORQkJCSJOT05FIgorCisvKiBMb2cgY2xhc3MgZW51bSB1c2VkIHRvIHJlcHJl c2VudCBiaXRzIGluIGF1ZGl0TG9nQml0bWFwICovCitlbnVtIExvZ0NsYXNzCit7CisJTE9H X05PTkUgPSAwLAorCisJLyogRERMOiBDUkVBVEUvRFJPUC9BTFRFUiAqLworCUxPR19EREwg PSAoMSA8PCAxKSwKKworCS8qIEZ1bmN0aW9uIGV4ZWN1dGlvbiAqLworCUxPR19GVU5DVElP TiA9ICgxIDw8IDIpLAorCisJLyogU3RhdGVtZW50cyBub3QgY292ZXJlZCBieSBhbm90aGVy IGNsYXNzICovCisJTE9HX01JU0MgPSAoMSA8PCAzKSwKKworCS8qIEZ1bmN0aW9uIGV4ZWN1 dGlvbiAqLworCUxPR19QQVJBTUVURVIgPSAoMSA8PCA0KSwKKworCS8qIFNFTEVDVCAqLwor CUxPR19SRUFEID0gKDEgPDwgNSksCisKKwkvKiBHUkFOVCwgUkVWT0tFLCBDUkVBVEUvQUxU RVIvRFJPUCBST0xFICovCisJTE9HX1JPTEUgPSAoMSA8PCA2KSwKKworCS8qIElOU0VSVCwg VVBEQVRFLCBERUxFVEUsIFRSVU5DQVRFICovCisJTE9HX1dSSVRFID0gKDEgPDwgNyksCisK KwkvKiBBYnNvbHV0ZWx5IGV2ZXJ5dGhpbmcgKi8KKwlMT0dfQUxMID0gfih1aW50NjQpMAor fTsKKworLyogU3RyaW5nIGNvbnN0YW50cyBmb3IgbG9nZ2luZyBjb21tYW5kcyAqLworI2Rl ZmluZSBDT01NQU5EX0RFTEVURQkJIkRFTEVURSIKKyNkZWZpbmUgQ09NTUFORF9FWEVDVVRF CQkiRVhFQ1VURSIKKyNkZWZpbmUgQ09NTUFORF9JTlNFUlQJCSJJTlNFUlQiCisjZGVmaW5l IENPTU1BTkRfVVBEQVRFCQkiVVBEQVRFIgorI2RlZmluZSBDT01NQU5EX1NFTEVDVAkJIlNF TEVDVCIKKworI2RlZmluZSBDT01NQU5EX0FMVEVSX1JPTEUJIkFMVEVSIFJPTEUiCisjZGVm aW5lIENPTU1BTkRfRFJPUF9ST0xFCSJDUkVBVEUgUk9MRSIKKworI2RlZmluZSBDT01NQU5E X1VOS05PV04JCSJVTktOT1dOIgorCisvKiBTdHJpbmcgY29uc3RhbnRzIGZvciBsb2dnaW5n IG9iamVjdCB0eXBlcyAqLworI2RlZmluZSBPQkpFQ1RfVFlQRV9DT01QT1NJVEVfVFlQRQki Q09NUE9TSVRFIFRZUEUiCisjZGVmaW5lIE9CSkVDVF9UWVBFX0ZPUkVJR05fVEFCTEUJIkZP UkVJR04gVEFCTEUiCisjZGVmaW5lIE9CSkVDVF9UWVBFX0ZVTkNUSU9OCQkiRlVOQ1RJT04i CisjZGVmaW5lIE9CSkVDVF9UWVBFX0lOREVYCQkJIklOREVYIgorI2RlZmluZSBPQkpFQ1Rf VFlQRV9UQUJMRQkJCSJUQUJMRSIKKyNkZWZpbmUgT0JKRUNUX1RZUEVfVE9BU1RWQUxVRQkJ IlRPQVNUVkFMVUUiCisjZGVmaW5lIE9CSkVDVF9UWVBFX01BVFZJRVcJCQkiTUFURVJJQUxJ WkVEIFZJRVciCisjZGVmaW5lIE9CSkVDVF9UWVBFX1NFUVVFTkNFCQkiU0VRVUVOQ0UiCisj ZGVmaW5lIE9CSkVDVF9UWVBFX1ZJRVcJCQkiVklFVyIKKworI2RlZmluZSBPQkpFQ1RfVFlQ RV9VTktOT1dOCQkJIlVOS05PV04iCisKKy8qCisgKiBBbiBBdWRpdEV2ZW50IHJlcHJlc2Vu dHMgYW4gb3BlcmF0aW9uIHRoYXQgcG90ZW50aWFsbHkgYWZmZWN0cyBhIHNpbmdsZQorICog b2JqZWN0LiBJZiBhIHN0YXRlbWVudCBhZmZlY3RzIG11bHRpcGxlIG9iamVjdHMgbXVsdGlw bGUgQXVkaXRFdmVudHMgbXVzdCBiZQorICogY3JlYXRlZCB0byByZXByZXNlbnQgaXQuCisg Ki8KK3R5cGVkZWYgc3RydWN0Cit7CisJaW50NjQgc3RhdGVtZW50SWQ7CisJaW50NjQgc3Vi c3RhdGVtZW50SWQ7CisKKwlMb2dTdG10TGV2ZWwgbG9nU3RtdExldmVsOworCU5vZGVUYWcg Y29tbWFuZFRhZzsKKwljb25zdCBjaGFyICpjb21tYW5kOworCWNvbnN0IGNoYXIgKm9iamVj dFR5cGU7CisJY2hhciAqb2JqZWN0TmFtZTsKKwljb25zdCBjaGFyICpjb21tYW5kVGV4dDsK KwlQYXJhbUxpc3RJbmZvIHBhcmFtTGlzdDsKKworCWJvb2wgZ3JhbnRlZDsKKwlib29sIGxv Z2dlZDsKK30gQXVkaXRFdmVudDsKKworLyoKKyAqIEEgc2ltcGxlIEZJRk8gcXVldWUgdG8g a2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBzdGFjayBvZiBhdWRpdCBldmVudHMuCisgKi8K K3R5cGVkZWYgc3RydWN0IEF1ZGl0RXZlbnRTdGFja0l0ZW0KK3sKKwlzdHJ1Y3QgQXVkaXRF dmVudFN0YWNrSXRlbSAqbmV4dDsKKworCUF1ZGl0RXZlbnQgYXVkaXRFdmVudDsKKworCWlu dDY0IHN0YWNrSWQ7CisKKwlNZW1vcnlDb250ZXh0IGNvbnRleHRBdWRpdDsKKwlNZW1vcnlD b250ZXh0Q2FsbGJhY2sgY29udGV4dENhbGxiYWNrOworfSBBdWRpdEV2ZW50U3RhY2tJdGVt OworCitBdWRpdEV2ZW50U3RhY2tJdGVtICphdWRpdEV2ZW50U3RhY2sgPSBOVUxMOworCisv KgorICogVHJhY2sgd2hlbiBhbiBpbnRlcm5hbCBzdGF0ZW1lbnQgaXMgcnVubmluZyBzbyBp dCBpcyBub3QgbG9nZ2VkCisgKi8KK3N0YXRpYyBib29sIGludGVybmFsU3RhdGVtZW50ID0g ZmFsc2U7CisKKy8qCisgKiBUcmFjayBydW5uaW5nIHRvdGFsIGZvciBzdGF0ZW1lbnRzIGFu ZCBzdWJzdGF0ZW1lbnRzIGFuZCB3aGV0aGVyIG9yIG5vdAorICogYW55dGhpbmcgaGFzIGJl ZW4gbG9nZ2VkIHNpbmNlIHRoaXMgc3RhdGVtZW50IGJlZ2FuLgorICovCitzdGF0aWMgaW50 NjQgc3RhdGVtZW50VG90YWwgPSAwOworc3RhdGljIGludDY0IHN1YnN0YXRlbWVudFRvdGFs ID0gMDsKK3N0YXRpYyBpbnQ2NCBzdGFja1RvdGFsID0gMDsKKworc3RhdGljIGJvb2wgc3Rh dGVtZW50TG9nZ2VkID0gZmFsc2U7CisKKy8qCisgKiBTdGFjayBmdW5jdGlvbnMKKyAqCisg KiBBdWRpdCBldmVudHMgY2FuIGdvIGRvd24gdG8gbXVsdGlwbGUgbGV2ZWxzIHNvIGEgc3Rh Y2sgaXMgbWFpbnRhaW5lZCB0byBrZWVwCisgKiB0cmFjayBvZiB0aGVtLgorICovCisKKy8q CisgKiBSZXNwb25kIHRvIGNhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggTWVtb3J5Q29udGV4 dFJlZ2lzdGVyUmVzZXRDYWxsYmFjaygpLgorICogUmVtb3ZlcyB0aGUgZXZlbnQocykgb2Zm IHRoZSBzdGFjayB0aGF0IGhhdmUgYmVjb21lIG9ic29sZXRlIG9uY2UgdGhlCisgKiBNZW1v cnlDb250ZXh0IGhhcyBiZWVuIGZyZWVkLiAgVGhlIGNhbGxiYWNrIHNob3VsZCBhbHdheXMg YmUgZnJlZWluZyB0aGUgdG9wCisgKiBvZiB0aGUgc3RhY2ssIGJ1dCB0aGUgY29kZSBpcyB0 b2xlcmFudCBvZiBvdXQtb2Ytb3JkZXIgY2FsbGJhY2tzLgorICovCitzdGF0aWMgdm9pZAor c3RhY2tfZnJlZSh2b2lkICpzdGFja0ZyZWUpCit7CisJQXVkaXRFdmVudFN0YWNrSXRlbSAq bmV4dEl0ZW0gPSBhdWRpdEV2ZW50U3RhY2s7CisKKwkvKiBPbmx5IHByb2Nlc3MgaWYgdGhl IHN0YWNrIGNvbnRhaW5zIGl0ZW1zICovCisJd2hpbGUgKG5leHRJdGVtICE9IE5VTEwpCisJ eworCQkvKiBDaGVjayBpZiB0aGlzIGl0ZW0gbWF0Y2hlcyB0aGUgaXRlbSB0byBiZSBmcmVl ZCAqLworCQlpZiAobmV4dEl0ZW0gPT0gKEF1ZGl0RXZlbnRTdGFja0l0ZW0gKilzdGFja0Zy ZWUpCisJCXsKKwkJCS8qIE1vdmUgdG9wIG9mIHN0YWNrIHRvIHRoZSBpdGVtIGFmdGVyIHRo ZSBmcmVlZCBpdGVtICovCisJCQlhdWRpdEV2ZW50U3RhY2sgPSBuZXh0SXRlbS0+bmV4dDsK KworCQkJLyogSWYgdGhlIHN0YWNrIGlzIG5vdCBlbXB0eSAqLworCQkJaWYgKGF1ZGl0RXZl bnRTdGFjayA9PSBOVUxMKQorCQkJeworCQkJCS8qIFJlc2V0IGludGVybmFsIHN0YXRlbWVu dCBpbiBjYXNlIG9mIGVycm9yICovCisJCQkJaW50ZXJuYWxTdGF0ZW1lbnQgPSBmYWxzZTsK KworCQkJCS8qIFJlc2V0IHN1YiBzdGF0ZW1lbnQgdG90YWwgKi8KKwkJCQlzdWJzdGF0ZW1l bnRUb3RhbCA9IDA7CisKKwkJCQkvKiBSZXNldCBzdGF0ZW1lbnQgbG9nZ2VkIGZsYWcgdG90 YWwgKi8KKwkJCQlzdGF0ZW1lbnRMb2dnZWQgPSBmYWxzZTsKKwkJCX0KKworCQkJcmV0dXJu OworCQl9CisKKwkJLyogU3RpbGwgbG9va2luZywgdGVzdCB0aGUgbmV4dCBpdGVtICovCisJ CW5leHRJdGVtID0gbmV4dEl0ZW0tPm5leHQ7CisJfQorfQorCisvKgorICogUHVzaCBhIG5l dyBhdWRpdCBldmVudCBvbnRvIHRoZSBzdGFjayBhbmQgY3JlYXRlIGEgbmV3IG1lbW9yeSBj b250ZXh0IHRvCisgKiBzdG9yZSBpdC4KKyAqLworc3RhdGljIEF1ZGl0RXZlbnRTdGFja0l0 ZW0gKgorc3RhY2tfcHVzaCgpCit7CisJTWVtb3J5Q29udGV4dCBjb250ZXh0QXVkaXQ7CisJ TWVtb3J5Q29udGV4dCBjb250ZXh0T2xkOworCUF1ZGl0RXZlbnRTdGFja0l0ZW0gKnN0YWNr SXRlbTsKKworCS8qIENyZWF0ZSBhIG5ldyBtZW1vcnkgY29udGV4dCAqLworCWNvbnRleHRB dWRpdCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCQkgInBnX2F1ZGl0IHN0YWNrIGNvbnRleHQiLAorCQkJCQkJCQkJCSBBTExPQ1NF VF9ERUZBVUxUX01JTlNJWkUsCisJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJ WkUsCisJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJY29udGV4dE9s ZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjb250ZXh0QXVkaXQpOworCisJLyogQWxsb2Nh dGUgdGhlIHN0YWNrIGl0ZW0gKi8KKwlzdGFja0l0ZW0gPSBwYWxsb2MwKHNpemVvZihBdWRp dEV2ZW50U3RhY2tJdGVtKSk7CisKKwkvKiBTdG9yZSBtZW1vcnkgY29udGV4dHMgKi8KKwlz dGFja0l0ZW0tPmNvbnRleHRBdWRpdCA9IGNvbnRleHRBdWRpdDsKKworCS8qIElmIGl0ZW0g YWxyZWFkeSBvbiBzdGFjayB0aGVuIHB1c2ggaXQgZG93biAqLworCWlmIChhdWRpdEV2ZW50 U3RhY2sgIT0gTlVMTCkKKwkJc3RhY2tJdGVtLT5uZXh0ID0gYXVkaXRFdmVudFN0YWNrOwor CWVsc2UKKwkJc3RhY2tJdGVtLT5uZXh0ID0gTlVMTDsKKworCS8qCisJICogQ3JlYXRlIHRo ZSB1bmlxdWUgc3RhY2tJZCAtIHVzZWQgdG8ga2VlcCB0aGUgc3RhY2sgc2FuZSB3aGVuIG1l bW9yeQorCSAqIGNvbnRleHRzIGFyZSBmcmVlZCB1bmV4cGVjdGVkbHkuCisJICovCisJc3Rh Y2tJdGVtLT5zdGFja0lkID0gKytzdGFja1RvdGFsOworCisJLyoKKwkgKiBTZXR1cCBhIGNh bGxiYWNrIGluIGNhc2UgYW4gZXJyb3IgaGFwcGVucy4gIHN0YWNrX2ZyZWUoKSB3aWxsIHRy dW5jYXRlCisJICogdGhlIHN0YWNrIGF0IHRoaXMgaXRlbS4KKwkgKi8KKwlzdGFja0l0ZW0t PmNvbnRleHRDYWxsYmFjay5mdW5jID0gc3RhY2tfZnJlZTsKKwlzdGFja0l0ZW0tPmNvbnRl eHRDYWxsYmFjay5hcmcgPSAodm9pZCAqKXN0YWNrSXRlbTsKKwlNZW1vcnlDb250ZXh0UmVn aXN0ZXJSZXNldENhbGxiYWNrKGNvbnRleHRBdWRpdCwKKwkJCQkJCQkJCSAgICZzdGFja0l0 ZW0tPmNvbnRleHRDYWxsYmFjayk7CisKKwkvKiBQdXNoIGl0ZW0gb24gdGhlIHN0YWNrICov CisJYXVkaXRFdmVudFN0YWNrID0gc3RhY2tJdGVtOworCisJLyogUmV0dXJuIHRvIHRoZSBv bGQgbWVtb3J5IGNvbnRleHQgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dE9s ZCk7CisKKwkvKiBSZXR1cm4gdGhlIHN0YWNrIGl0ZW0gKi8KKwlyZXR1cm4gc3RhY2tJdGVt OworfQorCisvKgorICogUG9wIGFuIGF1ZGl0IGV2ZW50IGZyb20gdGhlIHN0YWNrIGJ5IGRl bGV0aW5nIHRoZSBtZW1vcnkgY29udGV4dCB0aGF0CisgKiBjb250YWlucyBpdC4gIFRoZSBj YWxsYmFjayB0byBzdGFja19mcmVlKCkgZG9lcyB0aGUgYWN0dWFsIHBvcC4KKyAqLworc3Rh dGljIHZvaWQKK3N0YWNrX3BvcChpbnQ2NCBzdGFja0lkKQoreworCS8qIE1ha2Ugc3VyZSB3 aGF0IHdlIHdhbnQgdG8gZGVsZXRlIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrICovCisJ aWYgKGF1ZGl0RXZlbnRTdGFjayAhPSBOVUxMICYmIGF1ZGl0RXZlbnRTdGFjay0+c3RhY2tJ ZCA9PSBzdGFja0lkKQorCXsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShhdWRpdEV2ZW50U3Rh Y2stPmNvbnRleHRBdWRpdCk7CisJfQorfQorCisvKgorICogQXBwZW5kcyBhIHByb3Blcmx5 IHF1b3RlZCBDU1YgZmllbGQgdG8gU3RyaW5nSW5mby4KKyAqLworc3RhdGljIHZvaWQKK2Fw cGVuZF92YWxpZF9jc3YoU3RyaW5nSW5mb0RhdGEgKmJ1ZmZlciwgY29uc3QgY2hhciAqYXBw ZW5kU3RyKQoreworCWNvbnN0IGNoYXIgKnBDaGFyOworCisJLyoKKwkgKiBJZiB0aGUgYXBw ZW5kIHN0cmluZyBpcyBudWxsIHRoZW4gcmV0dXJuLiAgTlVMTCBmaWVsZHMgYXJlIG5vdCBx dW90ZWQKKwkgKiBpbiBDU1YKKwkgKi8KKwlpZiAoYXBwZW5kU3RyID09IE5VTEwpCisJCXJl dHVybjsKKworCS8qIE9ubHkgZm9ybWF0IGZvciBDU1YgaWYgYXBwZW5kU3RyIGNvbnRhaW5z OiAiLCBjb21tYSwgXG4sIFxyICovCisJaWYgKHN0cnN0cihhcHBlbmRTdHIsICIsIikgfHwg c3Ryc3RyKGFwcGVuZFN0ciwgIlwiIikgfHwKKwkJc3Ryc3RyKGFwcGVuZFN0ciwgIlxuIikg fHwgc3Ryc3RyKGFwcGVuZFN0ciwgIlxyIikpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hh ck1hY3JvKGJ1ZmZlciwgJyInKTsKKworCQlmb3IgKHBDaGFyID0gYXBwZW5kU3RyOyAqcENo YXI7IHBDaGFyKyspCisJCXsKKwkJCWlmICgqcENoYXIgPT0gJyInKSAvKiBkb3VibGUgc2lu Z2xlIHF1b3RlcyAqLworCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmZmVyLCAq cENoYXIpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZmZlciwgKnBDaGFy KTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmZmVyLCAnIicpOwor CX0KKwkvKiBFbHNlIGp1c3QgYXBwZW5kICovCisJZWxzZQorCXsKKwkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWZmZXIsIGFwcGVuZFN0cik7CisJfQorfQorCisvKgorICogVGFrZXMg YW4gQXVkaXRFdmVudCwgY2xhc3NpZmllcyBpdCwgdGhlbiBsb2dzIGl0IGlmIHBlcm1pc3Np b25zIHdlcmUgZ3JhbnRlZAorICogdmlhIHJvbGVzIG9yIGlmIHRoZSBzdGF0ZW1lbnQgYmVs b25ncyBpbiBhIGNsYXNzIHRoYXQgaXMgYmVpbmcgbG9nZ2VkLgorICovCitzdGF0aWMgdm9p ZAorbG9nX2F1ZGl0X2V2ZW50KEF1ZGl0RXZlbnRTdGFja0l0ZW0gKnN0YWNrSXRlbSkKK3sK KwlNZW1vcnlDb250ZXh0IGNvbnRleHRPbGQ7CisJU3RyaW5nSW5mb0RhdGEgYXVkaXRTdHI7 CisKKwkvKiBCeSBkZWZhdWx0IHB1dCBldmVyeXRoaW5nIGluIHRoZSBNSVNDIGNsYXNzLiAq LworCWVudW0gTG9nQ2xhc3MgY2xhc3MgPSBMT0dfTUlTQzsKKwljb25zdCBjaGFyICpjbGFz c05hbWUgPSBDTEFTU19NSVNDOworCisJLyogQ2xhc3NpZnkgdGhlIHN0YXRlbWVudCB1c2lu ZyBsb2cgc3RtdCBsZXZlbCBhbmQgdGhlIGNvbW1hbmQgdGFnICovCisJc3dpdGNoIChzdGFj a0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsKQorCXsKKwkJLyogQWxsIG1vZHMgZ28g aW4gV1JJVEUgY2xhc3MgKi8KKwkJY2FzZSBMT0dTVE1UX01PRDoKKwkJCWNsYXNzTmFtZSA9 IENMQVNTX1dSSVRFOworCQkJY2xhc3MgPSBMT0dfV1JJVEU7CisJCQlicmVhazsKKworCQkv KiBTZXBhcmF0ZSBST0xFIGZyb20gb3RoZXIgRERMIHN0YXRlbWVudHMgKi8KKwkJY2FzZSBM T0dTVE1UX0RETDoKKwkJCS8qIElkZW50aWZ5IHJvbGUgc3RhdGVtZW50cyAqLworCQkJaWYg KHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID09IFRfR3JhbnRTdG10IHx8CisJ CQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9HcmFudFJvbGVTdG10 IHx8CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9DcmVhdGVS b2xlU3RtdCB8fAorCQkJCShzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9PSBU X1JlbmFtZVN0bXQgJiYKKwkJCQkgcGdfc3RyY2FzZWNtcChzdGFja0l0ZW0tPmF1ZGl0RXZl bnQuY29tbWFuZCwKKwkJCQkJCQkgICBDT01NQU5EX0FMVEVSX1JPTEUpID09IDApIHx8CisJ CQkJKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID09IFRfRHJvcFN0bXQgJiYK KwkJCQkgcGdfc3RyY2FzZWNtcChzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCwKKwkJ CQkJCQkgICBDT01NQU5EX0RST1BfUk9MRSkgPT0gMCkgfHwKKwkJCQlzdGFja0l0ZW0tPmF1 ZGl0RXZlbnQuY29tbWFuZFRhZyA9PSBUX0Ryb3BSb2xlU3RtdCB8fAorCQkJCXN0YWNrSXRl bS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID09IFRfQWx0ZXJSb2xlU3RtdCB8fAorCQkJCXN0 YWNrSXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID09IFRfQWx0ZXJSb2xlU2V0U3RtdCkK KwkJCXsKKwkJCQljbGFzc05hbWUgPSBDTEFTU19ST0xFOworCQkJCWNsYXNzID0gTE9HX1JP TEU7CisJCQl9CisJCQkvKiBFbHNlIGxvZyBhcyBEREwgKi8KKwkJCWVsc2UKKwkJCXsKKwkJ CQljbGFzc05hbWUgPSBDTEFTU19EREw7CisJCQkJY2xhc3MgPSBMT0dfRERMOworCQkJfQor CisJCS8qIEZpZ3VyZSBvdXQgdGhlIHJlc3QgKi8KKwkJY2FzZSBMT0dTVE1UX0FMTDoKKwkJ CXN3aXRjaCAoc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcpCisJCQl7CisJCQkJ LyogUkVBRCBzdGF0ZW1lbnRzICovCisJCQkJY2FzZSBUX0NvcHlTdG10OgorCQkJCWNhc2Ug VF9TZWxlY3RTdG10OgorCQkJCWNhc2UgVF9QcmVwYXJlU3RtdDoKKwkJCQljYXNlIFRfUGxh bm5lZFN0bXQ6CisJCQkJY2FzZSBUX0V4ZWN1dGVTdG10OgorCQkJCQljbGFzc05hbWUgPSBD TEFTU19SRUFEOworCQkJCQljbGFzcyA9IExPR19SRUFEOworCQkJCQlicmVhazsKKworCQkJ CS8qIFJlaW5kZXggaXMgRERMIChiZWNhdXNlIGNsdXN0ZXIgaXMgRERMKSAqLworCQkJCWNh c2UgVF9SZWluZGV4U3RtdDoKKwkJCQkJY2xhc3NOYW1lID0gQ0xBU1NfRERMOworCQkJCQlj bGFzcyA9IExPR19EREw7CisJCQkJCWJyZWFrOworCisJCQkJLyogRlVOQ1RJT04gc3RhdGVt ZW50cyAqLworCQkJCWNhc2UgVF9Eb1N0bXQ6CisJCQkJCWNsYXNzTmFtZSA9IENMQVNTX0ZV TkNUSU9OOworCQkJCQljbGFzcyA9IExPR19GVU5DVElPTjsKKwkJCQkJYnJlYWs7CisKKwkJ CQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgTE9H U1RNVF9OT05FOgorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBPbmx5IGxvZyB0aGUgc3Rh dGVtZW50IGlmOgorCSAqCisJICogMS4gSWYgcGVybWlzc2lvbnMgd2VyZSBncmFudGVkIHZp YSByb2xlcworCSAqIDIuIFRoZSBzdGF0ZW1lbnQgYmVsb25ncyB0byBhIGNsYXNzIHRoYXQg aXMgYmVpbmcgbG9nZ2VkCisJICovCisJaWYgKCFzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuZ3Jh bnRlZCAmJiAhKGF1ZGl0TG9nQml0bWFwICYgY2xhc3MpKQorCQlyZXR1cm47CisKKwkvKiBV c2UgYXVkaXQgbWVtb3J5IGNvbnRleHQgaW4gY2FzZSBzb21ldGhpbmcgaXMgbm90IGZyZWVk ICovCisJY29udGV4dE9sZCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGFja0l0ZW0tPmNv bnRleHRBdWRpdCk7CisKKwkvKiBTZXQgc3RhdGVtZW50IGFuZCBzdWJzdGF0ZW1lbnQgSWRz ICovCisJaWYgKHN0YWNrSXRlbS0+YXVkaXRFdmVudC5zdGF0ZW1lbnRJZCA9PSAwKQorCXsK KwkJLyogSWYgbm90aGluZyBoYXMgYmVlbiBsb2dnZWQgeWV0IHRoZW4gY3JlYXRlIGEgbmV3 IHN0YXRlbWVudCBJZCAqLworCQlpZiAoIXN0YXRlbWVudExvZ2dlZCkKKwkJeworCQkJc3Rh dGVtZW50VG90YWwrKzsKKwkJCXN0YXRlbWVudExvZ2dlZCA9IHRydWU7CisJCX0KKworCQlz dGFja0l0ZW0tPmF1ZGl0RXZlbnQuc3RhdGVtZW50SWQgPSBzdGF0ZW1lbnRUb3RhbDsKKwkJ c3RhY2tJdGVtLT5hdWRpdEV2ZW50LnN1YnN0YXRlbWVudElkID0gKytzdWJzdGF0ZW1lbnRU b3RhbDsKKwl9CisKKwkvKiBDcmVhdGUgdGhlIGF1ZGl0IHN0cmluZyAqLworCWluaXRTdHJp bmdJbmZvKCZhdWRpdFN0cik7CisKKwlhcHBlbmRfdmFsaWRfY3N2KCZhdWRpdFN0ciwgc3Rh Y2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmQpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFj cm8oJmF1ZGl0U3RyLCAnLCcpOworCisJYXBwZW5kX3ZhbGlkX2NzdigmYXVkaXRTdHIsIHN0 YWNrSXRlbS0+YXVkaXRFdmVudC5vYmplY3RUeXBlKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hh ck1hY3JvKCZhdWRpdFN0ciwgJywnKTsKKworCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3Ry LCBzdGFja0l0ZW0tPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSk7CisJYXBwZW5kU3RyaW5nSW5m b0NoYXJNYWNybygmYXVkaXRTdHIsICcsJyk7CisKKwlhcHBlbmRfdmFsaWRfY3N2KCZhdWRp dFN0ciwgc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUZXh0KTsKKworCS8qIElmIHBh cmFtZXRlciBsb2dnaW5nIGlzIHR1cm5lZCBvbiBhbmQgdGhlcmUgYXJlIHBhcmFtZXRlcnMg dG8gbG9nICovCisJaWYgKGF1ZGl0TG9nQml0bWFwICYgTE9HX1BBUkFNRVRFUiAmJgorCQlz dGFja0l0ZW0tPmF1ZGl0RXZlbnQucGFyYW1MaXN0ICE9IE5VTEwgJiYKKwkJc3RhY2tJdGVt LT5hdWRpdEV2ZW50LnBhcmFtTGlzdC0+bnVtUGFyYW1zID4gMCAmJgorCQkhSXNBYm9ydGVk VHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkpCisJeworCQlQYXJhbUxpc3RJbmZvIHBhcmFtTGlz dCA9IHN0YWNrSXRlbS0+YXVkaXRFdmVudC5wYXJhbUxpc3Q7CisJCWludCBwYXJhbUlkeDsK KworCQkvKiBJdGVyYXRlIHRocm91Z2ggYWxsIHBhcmFtcyAqLworCQlmb3IgKHBhcmFtSWR4 ID0gMDsgcGFyYW1JZHggPCBwYXJhbUxpc3QtPm51bVBhcmFtczsgcGFyYW1JZHgrKykKKwkJ eworCQkJUGFyYW1FeHRlcm5EYXRhICpwcm0gPSAmcGFyYW1MaXN0LT5wYXJhbXNbcGFyYW1J ZHhdOworCQkJT2lkIAkJCSB0eXBlT3V0cHV0OworCQkJYm9vbCAJCQkgdHlwZUlzVmFyTGVu YTsKKwkJCWNoYXIgCQkJKnBhcmFtU3RyOworCisJCQkvKiBBZGQgYSBjb21tYSBmb3IgZWFj aCBwYXJhbSAqLworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmYXVkaXRTdHIsICcs Jyk7CisKKwkJCS8qIFNraXAgdGhpcyBwYXJhbSBpZiBudWxsIG9yIGlmIG9pZCBpcyBpbnZh bGlkICovCisJCQlpZiAocHJtLT5pc251bGwgfHwgIU9pZElzVmFsaWQocHJtLT5wdHlwZSkp CisJCQl7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIE91dHB1dCB0aGUgc3RyaW5n ICovCisJCQlnZXRUeXBlT3V0cHV0SW5mbyhwcm0tPnB0eXBlLCAmdHlwZU91dHB1dCwgJnR5 cGVJc1ZhckxlbmEpOworCQkJcGFyYW1TdHIgPSBPaWRPdXRwdXRGdW5jdGlvbkNhbGwodHlw ZU91dHB1dCwgcHJtLT52YWx1ZSk7CisKKwkJCWFwcGVuZF92YWxpZF9jc3YoJmF1ZGl0U3Ry LCBwYXJhbVN0cik7CisJCQlwZnJlZShwYXJhbVN0cik7CisJCX0KKwl9CisKKwkvKiBMb2cg dGhlIGF1ZGl0IHN0cmluZyAqLworCWVsb2coYXVkaXRMb2dOb3RpY2UgPyBOT1RJQ0UgOiBM T0csCisJCSAiQVVESVQ6ICVzLCVsZCwlbGQsJXMsJXMiLAorCQkJc3RhY2tJdGVtLT5hdWRp dEV2ZW50LmdyYW50ZWQgPworCQkJCUFVRElUX1RZUEVfT0JKRUNUIDogQVVESVRfVFlQRV9T RVNTSU9OLAorCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LnN0YXRlbWVudElkLAorCQkJc3Rh Y2tJdGVtLT5hdWRpdEV2ZW50LnN1YnN0YXRlbWVudElkLAorCQkJY2xhc3NOYW1lLCBhdWRp dFN0ci5kYXRhKTsKKworCS8qIE1hcmsgdGhlIGF1ZGl0IGV2ZW50IGFzIGxvZ2dlZCAqLwor CXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dnZWQgPSB0cnVlOworCisJLyogU3dpdGNoIGJh Y2sgdG8gdGhlIG9sZCBtZW1vcnkgY29udGV4dCAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhjb250ZXh0T2xkKTsKK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSByb2xlIG9yIGFueSBp bmhlcml0ZWQgcm9sZSBoYXMgYW55IHBlcm1pc3Npb24gaW4gdGhlIG1hc2suICBUaGUKKyAq IHB1YmxpYyByb2xlIGlzIGV4Y2x1ZGVkIGZyb20gdGhpcyBjaGVjayBhbmQgc3VwZXJ1c2Vy IHBlcm1pc3Npb25zIGFyZSBub3QKKyAqIGNvbnNpZGVyZWQuCisgKi8KK3N0YXRpYyBib29s CithdWRpdF9vbl9hY2woRGF0dW0gYWNsRGF0dW0sCisJCQkgT2lkIGF1ZGl0T2lkLAorCQkJ IEFjbE1vZGUgbWFzaykKK3sKKwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKwlBY2wJCSAgICph Y2w7CisJQWNsSXRlbQkgICAqYWNsSXRlbURhdGE7CisJaW50CQkJYWNsSW5kZXg7CisJaW50 CQkJYWNsVG90YWw7CisKKwkvKiBEZXRvYXN0IGNvbHVtbidzIEFDTCBpZiBuZWNlc3Nhcnkg Ki8KKwlhY2wgPSBEYXR1bUdldEFjbFAoYWNsRGF0dW0pOworCisJLyogR2V0IHRoZSBhY2wg bGlzdCBhbmQgdG90YWwgKi8KKwlhY2xUb3RhbCA9IEFDTF9OVU0oYWNsKTsKKwlhY2xJdGVt RGF0YSA9IEFDTF9EQVQoYWNsKTsKKworCS8qIENoZWNrIHByaXZpbGVnZXMgZ3JhbnRlZCBk aXJlY3RseSB0byBhdWRpdE9pZCAqLworCWZvciAoYWNsSW5kZXggPSAwOyBhY2xJbmRleCA8 IGFjbFRvdGFsOyBhY2xJbmRleCsrKQorCXsKKwkJQWNsSXRlbSAqYWNsSXRlbSA9ICZhY2xJ dGVtRGF0YVthY2xJbmRleF07CisKKwkJaWYgKGFjbEl0ZW0tPmFpX2dyYW50ZWUgPT0gYXVk aXRPaWQgJiYKKwkJCWFjbEl0ZW0tPmFpX3ByaXZzICYgbWFzaykKKwkJeworCQkJcmVzdWx0 ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBDaGVjayBwcml2aWxl Z2VzIGdyYW50ZWQgaW5kaXJlY3RseSB2aWEgcm9sZSBtZW1iZXJzaGlwcy4gV2UgZG8gdGhp cyBpbgorCSAqIGEgc2VwYXJhdGUgcGFzcyB0byBtaW5pbWl6ZSBleHBlbnNpdmUgaW5kaXJl Y3QgbWVtYmVyc2hpcCB0ZXN0cy4gIEluCisJICogcGFydGljdWxhciwgaXQncyB3b3J0aCB0 ZXN0aW5nIHdoZXRoZXIgYSBnaXZlbiBBQ0wgZW50cnkgZ3JhbnRzIGFueQorCSAqIHByaXZp bGVnZXMgc3RpbGwgb2YgaW50ZXJlc3QgYmVmb3JlIHdlIHBlcmZvcm0gdGhlIGhhc19wcml2 c19vZl9yb2xlCisJICogdGVzdC4KKwkgKi8KKwlpZiAoIXJlc3VsdCkKKwl7CisJCWZvciAo YWNsSW5kZXggPSAwOyBhY2xJbmRleCA8IGFjbFRvdGFsOyBhY2xJbmRleCsrKQorCQl7CisJ CQlBY2xJdGVtICphY2xJdGVtID0gJmFjbEl0ZW1EYXRhW2FjbEluZGV4XTsKKworCQkJLyog RG9uJ3QgdGVzdCBwdWJsaWMgb3IgYXVkaXRPaWQgKGl0IGhhcyBiZWVuIHRlc3RlZCBhbHJl YWR5KSAqLworCQkJaWYgKGFjbEl0ZW0tPmFpX2dyYW50ZWUgPT0gQUNMX0lEX1BVQkxJQyB8 fAorCQkJCWFjbEl0ZW0tPmFpX2dyYW50ZWUgPT0gYXVkaXRPaWQpCisJCQkJY29udGludWU7 CisKKwkJCS8qCisJCQkgKiBDaGVjayB0aGF0IHRoZSByb2xlIGhhcyB0aGUgcmVxdWlyZWQg cHJpdmlsZWdlcyBhbmQgdGhhdCBpdCBpcworCQkJICogaW5oZXJpdGVkIGJ5IGF1ZGl0T2lk LgorCQkJICovCisJCQlpZiAoYWNsSXRlbS0+YWlfcHJpdnMgJiBtYXNrICYmCisJCQkJaGFz X3ByaXZzX29mX3JvbGUoYXVkaXRPaWQsIGFjbEl0ZW0tPmFpX2dyYW50ZWUpKQorCQkJewor CQkJCXJlc3VsdCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBp ZiB3ZSBoYXZlIGEgZGV0b2FzdGVkIGNvcHksIGZyZWUgaXQgKi8KKwlpZiAoYWNsICYmIChQ b2ludGVyKSBhY2wgIT0gRGF0dW1HZXRQb2ludGVyKGFjbERhdHVtKSkKKwkJcGZyZWUoYWNs KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHJvbGUgaGFz IGFueSBvZiB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIG1hc2sgb24gYSByZWxhdGlvbi4KKyAq Lworc3RhdGljIGJvb2wKK2F1ZGl0X29uX3JlbGF0aW9uKE9pZCByZWxPaWQsCisJCQkJICBP aWQgYXVkaXRPaWQsCisJCQkJICBBY2xNb2RlIG1hc2spCit7CisJYm9vbAkJcmVzdWx0ID0g ZmFsc2U7CisJSGVhcFR1cGxlCXR1cGxlOworCURhdHVtCQlhY2xEYXR1bTsKKwlib29sCQlp c051bGw7CisKKwkvKiBHZXQgcmVsYXRpb24gdHVwbGUgZnJvbSBwZ19jbGFzcyAqLworCXR1 cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShyZWxPaWQp KTsKKworCS8qIFJldHVybiBmYWxzZSBpZiB0dXBsZSBpcyBub3QgdmFsaWQgKi8KKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBHZXQg dGhlIHJlbGF0aW9uJ3MgQUNMICovCisJYWNsRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVM T0lELCB0dXBsZSwgQW51bV9wZ19jbGFzc19yZWxhY2wsCisJCQkJCQkJICAgJmlzTnVsbCk7 CisKKwkvKiBJZiBub3QgbnVsbCB0aGVuIHRlc3QgKi8KKwlpZiAoIWlzTnVsbCkKKwkJcmVz dWx0ID0gYXVkaXRfb25fYWNsKGFjbERhdHVtLCBhdWRpdE9pZCwgbWFzayk7CisKKwkvKiBG cmVlIHRoZSByZWxhdGlvbiB0dXBsZSAqLworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogQ2hlY2sgaWYgYSByb2xlIGhhcyBhbnkg b2YgdGhlIHBlcm1pc3Npb25zIGluIHRoZSBtYXNrIG9uIGFuIGF0dHJpYnV0ZS4KKyAqLwor c3RhdGljIGJvb2wKK2F1ZGl0X29uX2F0dHJpYnV0ZShPaWQgcmVsT2lkLAorCQkJCSAgIEF0 dHJOdW1iZXIgYXR0TnVtLAorCQkJCSAgIE9pZCBhdWRpdE9pZCwKKwkJCQkgICBBY2xNb2Rl IG1hc2spCit7CisJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisJSGVhcFR1cGxlCWF0dFR1cGxl OworCURhdHVtCQlhY2xEYXR1bTsKKwlib29sCQlpc051bGw7CisKKwkvKiBHZXQgdGhlIGF0 dHJpYnV0ZSdzIEFDTCAqLworCWF0dFR1cGxlID0gU2VhcmNoU3lzQ2FjaGUyKEFUVE5VTSwK KwkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHJlbE9pZCksCisJCQkJCQkJICAgSW50MTZH ZXREYXR1bShhdHROdW0pKTsKKworCS8qIFJldHVybiBmYWxzZSBpZiBhdHRyaWJ1dGUgaXMg aW52YWxpZCAqLworCWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRUdXBsZSkpCisJCXJldHVy biBmYWxzZTsKKworCS8qIE9ubHkgcHJvY2VzcyBhdHRyaWJ1dGUgdGhhdCBoYXZlIG5vdCBi ZWVuIGRyb3BwZWQgKi8KKwlpZiAoISgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChh dHRUdXBsZSkpLT5hdHRpc2Ryb3BwZWQpCisJeworCQlhY2xEYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihBVFROVU0sIGF0dFR1cGxlLCBBbnVtX3BnX2F0dHJpYnV0ZV9hdHRhY2wsCisJCQkJ CQkJCSAgICZpc051bGwpOworCisJCWlmICghaXNOdWxsKQorCQkJcmVzdWx0ID0gYXVkaXRf b25fYWNsKGFjbERhdHVtLCBhdWRpdE9pZCwgbWFzayk7CisJfQorCisJLyogRnJlZSBhdHRy aWJ1dGUgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoYXR0VHVwbGUpOworCisJcmV0dXJuIHJlc3Vs dDsKK30KKworLyoKKyAqIENoZWNrIGlmIGEgcm9sZSBoYXMgYW55IG9mIHRoZSBwZXJtaXNz aW9ucyBpbiB0aGUgbWFzayBvbiBhbiBhdHRyaWJ1dGUgaW4KKyAqIHRoZSBwcm92aWRlZCBz ZXQuICBJZiB0aGUgc2V0IGlzIGVtcHR5LCB0aGVuIGFsbCB2YWxpZCBhdHRyaWJ1dGVzIGlu IHRoZQorICogcmVsYXRpb24gd2lsbCBiZSB0ZXN0ZWQuCisgKi8KK3N0YXRpYyBib29sCith dWRpdF9vbl9hbnlfYXR0cmlidXRlKE9pZCByZWxPaWQsCisJCQkJCSAgIE9pZCBhdWRpdE9p ZCwKKwkJCQkJICAgQml0bWFwc2V0ICphdHRyaWJ1dGVTZXQsCisJCQkJCSAgIEFjbE1vZGUg bW9kZSkKK3sKKwlib29sIHJlc3VsdCA9IGZhbHNlOworCUF0dHJOdW1iZXIgY29sOworCUJp dG1hcHNldCAqdG1wU2V0OworCisJLyogSWYgYm1zIGlzIGVtcHR5IHRoZW4gY2hlY2sgZm9y IGFueSBjb2x1bW4gbWF0Y2ggKi8KKwlpZiAoYm1zX2lzX2VtcHR5KGF0dHJpYnV0ZVNldCkp CisJeworCQlIZWFwVHVwbGUJY2xhc3NUdXBsZTsKKwkJQXR0ck51bWJlcgluYXR0cnM7CisJ CUF0dHJOdW1iZXIJY3Vycl9hdHQ7CisKKwkJLyogR2V0IHJlbGF0aW9uIHRvIGRldGVybWlu ZSB0b3RhbCBhdHRyaWJ1dGUgKi8KKwkJY2xhc3NUdXBsZSA9IFNlYXJjaFN5c0NhY2hlMShS RUxPSUQsIE9iamVjdElkR2V0RGF0dW0ocmVsT2lkKSk7CisKKwkJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKGNsYXNzVHVwbGUpKQorCQkJcmV0dXJuIGZhbHNlOworCisJCW5hdHRycyA9ICgo Rm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKGNsYXNzVHVwbGUpKS0+cmVsbmF0dHM7CisJCVJl bGVhc2VTeXNDYWNoZShjbGFzc1R1cGxlKTsKKworCQkvKiBDaGVjayBlYWNoIGNvbHVtbiAq LworCQlmb3IgKGN1cnJfYXR0ID0gMTsgY3Vycl9hdHQgPD0gbmF0dHJzOyBjdXJyX2F0dCsr KQorCQl7CisJCQlpZiAoYXVkaXRfb25fYXR0cmlidXRlKHJlbE9pZCwgY3Vycl9hdHQsIGF1 ZGl0T2lkLCBtb2RlKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCS8qIGJtc19m aXJzdF9tZW1iZXIgaXMgZGVzdHJ1Y3RpdmUsIHNvIG1ha2UgYSBjb3B5IGJlZm9yZSB1c2lu ZyBpdC4gKi8KKwl0bXBTZXQgPSBibXNfY29weShhdHRyaWJ1dGVTZXQpOworCisJLyogQ2hl Y2sgZWFjaCBjb2x1bW4gKi8KKwl3aGlsZSAoKGNvbCA9IGJtc19maXJzdF9tZW1iZXIodG1w U2V0KSkgPj0gMCkKKwl7CisJCWNvbCArPSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRl TnVtYmVyOworCisJCWlmIChjb2wgIT0gSW52YWxpZEF0dHJOdW1iZXIgJiYKKwkJCWF1ZGl0 X29uX2F0dHJpYnV0ZShyZWxPaWQsIGNvbCwgYXVkaXRPaWQsIG1vZGUpKQorCQl7CisJCQly ZXN1bHQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBGcmVlIHRoZSBjb2x1 bW4gc2V0ICovCisJYm1zX2ZyZWUodG1wU2V0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisK Ky8qCisgKiBDcmVhdGUgQXVkaXRFdmVudHMgZm9yIFNFTEVDVC9ETUwgb3BlcmF0aW9ucyB2 aWEgZXhlY3V0b3IgcGVybWlzc2lvbnMgY2hlY2tzLgorICovCitzdGF0aWMgdm9pZAorbG9n X3NlbGVjdF9kbWwoT2lkIGF1ZGl0T2lkLCBMaXN0ICpyYW5nZVRhYmxzKQoreworCUxpc3RD ZWxsICpscjsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKKwlib29sIGZvdW5kID0gZmFsc2U7CisK KwkvKiBEbyBub3QgbG9nIGlmIHRoaXMgaXMgYW4gaW50ZXJuYWwgc3RhdGVtZW50ICovCisJ aWYgKGludGVybmFsU3RhdGVtZW50KQorCQlyZXR1cm47CisKKwlmb3JlYWNoKGxyLCByYW5n ZVRhYmxzKQorCXsKKwkJT2lkIHJlbE9pZDsKKwkJUmVsYXRpb24gcmVsOworCQlSYW5nZVRi bEVudHJ5ICpydGUgPSBsZmlyc3QobHIpOworCisJCS8qIFdlIG9ubHkgY2FyZSBhYm91dCB0 YWJsZXMsIGFuZCBjYW4gaWdub3JlIHN1YnF1ZXJpZXMgZXRjLiAqLworCQlpZiAocnRlLT5y dGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCWNvbnRpbnVlOworCisJCWZvdW5kID0gdHJ1 ZTsKKworCQkvKgorCQkgKiBGaWx0ZXIgb3V0IGFueSBzeXN0ZW0gcmVsYXRpb25zCisJCSAq LworCQlyZWxPaWQgPSBydGUtPnJlbGlkOworCQlyZWwgPSByZWxhdGlvbl9vcGVuKHJlbE9p ZCwgTm9Mb2NrKTsKKworCQlpZiAoSXNTeXN0ZW1OYW1lc3BhY2UoUmVsYXRpb25HZXROYW1l c3BhY2UocmVsKSkpCisJCXsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8g dGhlIHBhcnNldHJlZSBoZXJlLCBzbyB3ZSBoYXZlIHRvIGdlbmVyYXRlCisJCSAqIHRoZSBu b2RlIHR5cGUsIG9iamVjdCB0eXBlLCBhbmQgY29tbWFuZCB0YWcgYnkgZGVjb2RpbmcKKwkJ ICogcnRlLT5yZXF1aXJlZFBlcm1zIGFuZCBydGUtPnJlbGtpbmQuCisJCSAqLworCQlpZiAo cnRlLT5yZXF1aXJlZFBlcm1zICYgQUNMX0lOU0VSVCkKKwkJeworCQkJYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfTU9EOworCQkJYXVkaXRF dmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0luc2VydFN0bXQ7CisJCQlh dWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfSU5TRVJUOwor CQl9CisJCWVsc2UgaWYgKHJ0ZS0+cmVxdWlyZWRQZXJtcyAmIEFDTF9VUERBVEUpCisJCXsK KwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1U X01PRDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9V cGRhdGVTdG10OworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBD T01NQU5EX1VQREFURTsKKwkJfQorCQllbHNlIGlmIChydGUtPnJlcXVpcmVkUGVybXMgJiBB Q0xfREVMRVRFKQorCQl7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nU3Rt dExldmVsID0gTE9HU1RNVF9NT0Q7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQu Y29tbWFuZFRhZyA9IFRfRGVsZXRlU3RtdDsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRF dmVudC5jb21tYW5kID0gQ09NTUFORF9ERUxFVEU7CisJCX0KKwkJZWxzZSBpZiAocnRlLT5y ZXF1aXJlZFBlcm1zICYgQUNMX1NFTEVDVCkKKwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5h dWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfQUxMOworCQkJYXVkaXRFdmVudFN0 YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX1NlbGVjdFN0bXQ7CisJCQlhdWRpdEV2 ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfU0VMRUNUOworCQl9CisJ CWVsc2UKKwkJeworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZl bCA9IExPR1NUTVRfQUxMOworCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1h bmRUYWcgPSBUX0ludmFsaWQ7CisJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29t bWFuZCA9IENPTU1BTkRfVU5LTk9XTjsKKwkJfQorCisJCS8qCisJCSAqIEZpbGwgdmFsdWVz IGluIHRoZSBldmVudCBzdHJ1Y3QgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHNlc3Npb24KKwkJ ICogbG9nZ2luZy4KKwkJICovCisJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5ncmFu dGVkID0gZmFsc2U7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcnRlIHRo ZW4gc2Vzc2lvbiBsb2cgdW5sZXNzIGF1ZGl0TG9nUmVsYXRpb24KKwkJICogaXMgc2V0Lgor CQkgKi8KKwkJaWYgKGZpcnN0ICYmICFhdWRpdExvZ1JlbGF0aW9uKQorCQl7CisJCQlhdWRp dEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9ICIiOworCQkJYXVkaXRFdmVu dFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPSAiIjsKKworCQkJbG9nX2F1ZGl0X2V2 ZW50KGF1ZGl0RXZlbnRTdGFjayk7CisKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKworCQkv KiBHZXQgdGhlIHJlbGF0aW9uIHR5cGUgKi8KKwkJc3dpdGNoIChydGUtPnJlbGtpbmQpCisJ CXsKKwkJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1 ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1RBQkxFOworCQkJCWJy ZWFrOworCisJCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5h dWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9JTkRFWDsKKwkJCQli cmVhazsKKworCQkJY2FzZSBSRUxLSU5EX1NFUVVFTkNFOgorCQkJCWF1ZGl0RXZlbnRTdGFj ay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfU0VRVUVOQ0U7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9UT0FTVFZBTFVFOgorCQkJCWF1ZGl0 RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVf VE9BU1RWQUxVRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX1ZJRVc6CisJCQkJ YXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1Rf VFlQRV9WSUVXOworCQkJCWJyZWFrOworCisJCQljYXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZ UEU6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJ CQlPQkpFQ1RfVFlQRV9DT01QT1NJVEVfVFlQRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBS RUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50 Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9GT1JFSUdOX1RBQkxFOworCQkJCWJy ZWFrOworCisJCQljYXNlIFJFTEtJTkRfTUFUVklFVzoKKwkJCQlhdWRpdEV2ZW50U3RhY2st PmF1ZGl0RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX01BVFZJRVc7CisJ CQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2 ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9VTktOT1dOOworCQkJCWJyZWFr OworCQl9CisKKwkJLyogR2V0IHRoZSByZWxhdGlvbiBuYW1lICovCisJCWF1ZGl0RXZlbnRT dGFjay0+YXVkaXRFdmVudC5vYmplY3ROYW1lID0KKwkJCXF1b3RlX3F1YWxpZmllZF9pZGVu dGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZSgKKwkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0TmFt ZXNwYWNlKHJlbCkpLAorCQkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSk7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbCwgTm9Mb2NrKTsKKworCQkvKiBQZXJmb3JtIG9i amVjdCBhdWRpdGluZyBvbmx5IGlmIHRoZSBhdWRpdCByb2xlIGlzIHZhbGlkICovCisJCWlm IChhdWRpdE9pZCAhPSBJbnZhbGlkT2lkKQorCQl7CisJCQlBY2xNb2RlIGF1ZGl0UGVybXMg PSAoQUNMX1NFTEVDVCB8IEFDTF9VUERBVEUgfCBBQ0xfSU5TRVJUKSAmCisJCQkJCQkJCSBy dGUtPnJlcXVpcmVkUGVybXM7CisKKwkJCS8qCisJCQkgKiBJZiBhbnkgb2YgdGhlIHJlcXVp cmVkIHBlcm1pc3Npb25zIGZvciB0aGUgcmVsYXRpb24gYXJlIGdyYW50ZWQKKwkJCSAqIHRv IHRoZSBhdWRpdCByb2xlIHRoZW4gYXVkaXQgdGhlIHJlbGF0aW9uCisJCQkgKi8KKwkJCWlm IChhdWRpdF9vbl9yZWxhdGlvbihyZWxPaWQsIGF1ZGl0T2lkLCBhdWRpdFBlcm1zKSkKKwkJ CXsKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQuZ3JhbnRlZCA9IHRydWU7CisJ CQl9CisKKwkJCS8qCisJCQkgKiBFbHNlIGNoZWNrIGlmIHRoZSBhdWRpdCByb2xlIGhhcyBj b2x1bW4tbGV2ZWwgcGVybWlzc2lvbnMgZm9yCisJCQkgKiBzZWxlY3QsIGluc2VydCwgb3Ig dXBkYXRlLgorCQkJICovCisJCQllbHNlIGlmIChhdWRpdFBlcm1zICE9IDApCisJCQl7CisJ CQkJLyoKKwkJCQkgKiBDaGVjayB0aGUgc2VsZWN0IGNvbHVtbnMgdG8gc2VlIGlmIHRoZSBh dWRpdCByb2xlIGhhcworCQkJCSAqIHByaXZlbGVnZXMgb24gYW55IG9mIHRoZW0uCisJCQkJ ICovCisJCQkJaWYgKGF1ZGl0UGVybXMgJiBBQ0xfU0VMRUNUKQorCQkJCXsKKwkJCQkJYXVk aXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmdyYW50ZWQgPQorCQkJCQkJYXVkaXRfb25fYW55 X2F0dHJpYnV0ZShyZWxPaWQsIGF1ZGl0T2lkLAorCQkJCQkJCQkJCQkgICBydGUtPnNlbGVj dGVkQ29scywKKwkJCQkJCQkJCQkJICAgQUNMX1NFTEVDVCk7CisJCQkJfQorCisJCQkJLyoK KwkJCQkgKiBDaGVjayB0aGUgbW9kaWZpZWQgY29sdW1ucyB0byBzZWUgaWYgdGhlIGF1ZGl0 IHJvbGUgaGFzCisJCQkJICogcHJpdmlsZWdlcyBvbiBhbnkgb2YgdGhlbS4KKwkJCQkgKi8K KwkJCQlpZiAoIWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5ncmFudGVkKQorCQkJCXsK KwkJCQkJYXVkaXRQZXJtcyAmPSAoQUNMX0lOU0VSVCB8IEFDTF9VUERBVEUpOworCisJCQkJ CWlmIChhdWRpdFBlcm1zKQorCQkJCQl7CisJCQkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0 RXZlbnQuZ3JhbnRlZCA9CisJCQkJCQkJYXVkaXRfb25fYW55X2F0dHJpYnV0ZShyZWxPaWQs IGF1ZGl0T2lkLAorCQkJCQkJCQkJCQkJICAgcnRlLT5tb2RpZmllZENvbHMsCisJCQkJCQkJ CQkJCQkgICBhdWRpdFBlcm1zKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCS8q IERvIHJlbGF0aW9uIGxldmVsIGxvZ2dpbmcgaWYgYSBncmFudCB3YXMgZm91bmQgKi8KKwkJ aWYgKGF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5ncmFudGVkKQorCQl7CisJCQlhdWRp dEV2ZW50U3RhY2stPmF1ZGl0RXZlbnQubG9nZ2VkID0gZmFsc2U7CisJCQlsb2dfYXVkaXRf ZXZlbnQoYXVkaXRFdmVudFN0YWNrKTsKKwkJfQorCisJCS8qIERvIHJlbGF0aW9uIGxldmVs IGxvZ2dpbmcgaWYgYXVkaXRMb2dSZWxhdGlvbiBpcyBzZXQgKi8KKwkJaWYgKGF1ZGl0TG9n UmVsYXRpb24pCisJCXsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5sb2dnZWQg PSBmYWxzZTsKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5ncmFudGVkID0gZmFs c2U7CisJCQlsb2dfYXVkaXRfZXZlbnQoYXVkaXRFdmVudFN0YWNrKTsKKwkJfQorCisJCXBm cmVlKGF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3ROYW1lKTsKKwl9CisKKwkv KgorCSAqIElmIG5vIHRhYmxlcyB3ZXJlIGZvdW5kIHRoYXQgbWVhbnMgdGhhdCBSYW5nZVRi bHMgd2FzIGVtcHR5IG9yIGFsbAorCSAqIHJlbGF0aW9ucyB3ZXJlIGluIHRoZSBzeXN0ZW0g c2NoZW1hLiAgSW4gdGhhdCBjYXNlIHN0aWxsIGxvZyBhCisJICogc2Vzc2lvbiByZWNvcmQu CisJICovCisJaWYgKCFmb3VuZCkKKwl7CisJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVu dC5ncmFudGVkID0gZmFsc2U7CisJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5sb2dn ZWQgPSBmYWxzZTsKKworCQlsb2dfYXVkaXRfZXZlbnQoYXVkaXRFdmVudFN0YWNrKTsKKwl9 Cit9CisKKy8qCisgKiBDcmVhdGUgQXVkaXRFdmVudHMgZm9yIGNlcnRhaW4ga2luZHMgb2Yg Q1JFQVRFLCBBTFRFUiwgYW5kIERFTEVURSBzdGF0ZW1lbnRzCisgKiB3aGVyZSB0aGUgb2Jq ZWN0IGNhbiBiZSBsb2dnZWQuCisgKi8KK3N0YXRpYyB2b2lkCitsb2dfY3JlYXRlX2FsdGVy X2Ryb3AoT2lkIGNsYXNzSWQsCisJCQkJCSAgT2lkIG9iamVjdElkKQoreworCS8qIE9ubHkg cGVyZm9ybSB3aGVuIGNsYXNzIGlzIHJlbGF0aW9uICovCisJaWYgKGNsYXNzSWQgPT0gUmVs YXRpb25SZWxhdGlvbklkKQorCXsKKwkJUmVsYXRpb24gcmVsOworCQlGb3JtX3BnX2NsYXNz IGNsYXNzOworCisJCS8qIE9wZW4gdGhlIHJlbGF0aW9uICovCisJCXJlbCA9IHJlbGF0aW9u X29wZW4ob2JqZWN0SWQsIE5vTG9jayk7CisKKwkJLyogRmlsdGVyIG91dCBhbnkgc3lzdGVt IHJlbGF0aW9ucyAqLworCQlpZiAoSXNUb2FzdE5hbWVzcGFjZShSZWxhdGlvbkdldE5hbWVz cGFjZShyZWwpKSkKKwkJeworCQkJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCQkJ cmV0dXJuOworCQl9CisKKwkJLyogR2V0IHJlbCBpbmZvcm1hdGlvbiBhbmQgY2xvc2UgaXQg Ki8KKwkJY2xhc3MgPSBSZWxhdGlvbkdldEZvcm0ocmVsKTsKKwkJYXVkaXRFdmVudFN0YWNr LT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQkJcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZp ZXIoZ2V0X25hbWVzcGFjZV9uYW1lKAorCQkJCQkJCQkJICAgUmVsYXRpb25HZXROYW1lc3Bh Y2UocmVsKSksCisJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsK KwkJcmVsYXRpb25fY2xvc2UocmVsLCBOb0xvY2spOworCisJCS8qIFNldCBvYmplY3QgdHlw ZSBiYXNlZCBvbiByZWxraW5kICovCisJCXN3aXRjaCAoY2xhc3MtPnJlbGtpbmQpCisJCXsK KwkJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJCQlhdWRpdEV2ZW50U3RhY2stPmF1ZGl0 RXZlbnQub2JqZWN0VHlwZSA9CisJCQkJCU9CSkVDVF9UWVBFX1RBQkxFOworCQkJCWJyZWFr OworCisJCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRp dEV2ZW50Lm9iamVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9JTkRFWDsKKwkJCQlicmVh azsKKworCQkJY2FzZSBSRUxLSU5EX1NFUVVFTkNFOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+ YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfU0VRVUVOQ0U7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9WSUVXOgorCQkJCWF1ZGl0RXZlbnRTdGFj ay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVfVklFVzsKKwkJ CQlicmVhazsKKworCQkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9UWVBFOgorCQkJCWF1ZGl0 RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQkJT0JKRUNUX1RZUEVf Q09NUE9TSVRFX1RZUEU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkVMS0lORF9GT1JFSUdO X1RBQkxFOgorCQkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0K KwkJCQkJT0JKRUNUX1RZUEVfRk9SRUlHTl9UQUJMRTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBSRUxLSU5EX01BVFZJRVc6CisJCQkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50Lm9i amVjdFR5cGUgPQorCQkJCQlPQkpFQ1RfVFlQRV9NQVRWSUVXOworCQkJCWJyZWFrOworCisJ CQkvKgorCQkJICogQW55IG90aGVyIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBsb2dfdXRp bGl0eV9jb21tYW5kKCkuCisJCQkgKi8KKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuOworCQkJ CWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogQ3JlYXRlIEF1ZGl0RXZlbnRzIGZvciBu b24tY2F0YWxvZyBmdW5jdGlvbiBleGVjdXRpb24sIGFzIGRldGVjdGVkIGJ5CisgKiBsb2df b2JqZWN0X2FjY2VzcygpIGJlbG93LgorICovCitzdGF0aWMgdm9pZAorbG9nX2Z1bmN0aW9u X2V4ZWN1dGUoT2lkIG9iamVjdElkKQoreworCUhlYXBUdXBsZSBwcm9jdHVwOworCUZvcm1f cGdfcHJvYyBwcm9jOworCUF1ZGl0RXZlbnRTdGFja0l0ZW0gKnN0YWNrSXRlbTsKKworCS8q IEdldCBpbmZvIGFib3V0IHRoZSBmdW5jdGlvbi4gKi8KKwlwcm9jdHVwID0gU2VhcmNoU3lz Q2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKworCWlmICgh cHJvY3R1cCkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0 aW9uICV1Iiwgb2JqZWN0SWQpOworCXByb2MgPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1Qo cHJvY3R1cCk7CisKKwkvKgorCSAqIExvZ2dpbmcgZXhlY3V0aW9uIG9mIGFsbCBwZ19jYXRh bG9nIGZ1bmN0aW9ucyB3b3VsZCBtYWtlIHRoZSBsb2cKKwkgKiB1bnVzYWJseSBub2lzeS4K KwkgKi8KKwlpZiAoSXNTeXN0ZW1OYW1lc3BhY2UocHJvYy0+cHJvbmFtZXNwYWNlKSkKKwl7 CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFB1 c2ggYXVkaXQgZXZlbnQgb250byB0aGUgc3RhY2sgKi8KKwlzdGFja0l0ZW0gPSBzdGFja19w dXNoKCk7CisKKwkvKiBHZW5lcmF0ZSB0aGUgZnVsbHktcXVhbGlmaWVkIGZ1bmN0aW9uIG5h bWUuICovCisJc3RhY2tJdGVtLT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQlxdW90ZV9x dWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUocHJvYy0+cHJvbmFtZXNw YWNlKSwKKwkJCQkJCQkJICAgTmFtZVN0cihwcm9jLT5wcm9uYW1lKSk7CisJUmVsZWFzZVN5 c0NhY2hlKHByb2N0dXApOworCisJLyogTG9nIHRoZSBmdW5jdGlvbiBjYWxsICovCisJc3Rh Y2tJdGVtLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfQUxMOworCXN0YWNr SXRlbS0+YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9Eb1N0bXQ7CisJc3RhY2tJdGVtLT5h dWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX0VYRUNVVEU7CisJc3RhY2tJdGVtLT5hdWRp dEV2ZW50Lm9iamVjdFR5cGUgPSBPQkpFQ1RfVFlQRV9GVU5DVElPTjsKKwlzdGFja0l0ZW0t PmF1ZGl0RXZlbnQuY29tbWFuZFRleHQgPSBzdGFja0l0ZW0tPm5leHQtPmF1ZGl0RXZlbnQu Y29tbWFuZFRleHQ7CisKKwlsb2dfYXVkaXRfZXZlbnQoc3RhY2tJdGVtKTsKKworCS8qIFBv cCBhdWRpdCBldmVudCBmcm9tIHRoZSBzdGFjayAqLworCXN0YWNrX3BvcChzdGFja0l0ZW0t PnN0YWNrSWQpOworfQorCisvKgorICogTG9nIG9iamVjdCBhY2Nlc3NlcyAod2hpY2ggaXMg bW9yZSBhYm91dCBEREwgdGhhbiBETUwsIGV2ZW4gdGhvdWdoIGl0CisgKiBzb3VuZHMgbGlr ZSB0aGUgbGF0dGVyKS4KKyAqLworc3RhdGljIHZvaWQKK2xvZ19vYmplY3RfYWNjZXNzKE9i amVjdEFjY2Vzc1R5cGUgYWNjZXNzLAorCQkJCSAgT2lkIGNsYXNzSWQsCisJCQkJICBPaWQg b2JqZWN0SWQsCisJCQkJICBpbnQgc3ViSWQsCisJCQkJICB2b2lkICphcmcpCit7CisJc3dp dGNoIChhY2Nlc3MpCisJeworCQkvKiBMb2cgZXhlY3V0ZSAqLworCQljYXNlIE9BVF9GVU5D VElPTl9FWEVDVVRFOgorCQkJaWYgKGF1ZGl0TG9nQml0bWFwICYgTE9HX0ZVTkNUSU9OKQor CQkJCWxvZ19mdW5jdGlvbl9leGVjdXRlKG9iamVjdElkKTsKKwkJCWJyZWFrOworCisJCS8q IExvZyBjcmVhdGUgKi8KKwkJY2FzZSBPQVRfUE9TVF9DUkVBVEU6CisJCQlpZiAoYXVkaXRM b2dCaXRtYXAgJiBMT0dfRERMKQorCQkJeworCQkJCU9iamVjdEFjY2Vzc1Bvc3RDcmVhdGUg KnBjID0gYXJnOworCisJCQkJaWYgKHBjLT5pc19pbnRlcm5hbCkKKwkJCQkJcmV0dXJuOwor CisJCQkJbG9nX2NyZWF0ZV9hbHRlcl9kcm9wKGNsYXNzSWQsIG9iamVjdElkKTsKKwkJCX0K KwkJCWJyZWFrOworCisJCS8qIExvZyBhbHRlciAqLworCQljYXNlIE9BVF9QT1NUX0FMVEVS OgorCQkJaWYgKGF1ZGl0TG9nQml0bWFwICYgTE9HX0RETCkKKwkJCXsKKwkJCQlPYmplY3RB Y2Nlc3NQb3N0QWx0ZXIgKnBhID0gYXJnOworCisJCQkJaWYgKHBhLT5pc19pbnRlcm5hbCkK KwkJCQkJcmV0dXJuOworCisJCQkJbG9nX2NyZWF0ZV9hbHRlcl9kcm9wKGNsYXNzSWQsIG9i amVjdElkKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCS8qIExvZyBkcm9wICovCisJCWNhc2Ug T0FUX0RST1A6CisJCQlpZiAoYXVkaXRMb2dCaXRtYXAgJiBMT0dfRERMKQorCQkJeworCQkJ CU9iamVjdEFjY2Vzc0Ryb3AgKmRyb3AgPSBhcmc7CisKKwkJCQlpZiAoZHJvcC0+ZHJvcGZs YWdzICYgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCkKKwkJCQkJcmV0dXJuOworCisJCQkJ bG9nX2NyZWF0ZV9hbHRlcl9kcm9wKGNsYXNzSWQsIG9iamVjdElkKTsKKwkJCX0KKwkJCWJy ZWFrOworCisJCS8qIEFsbCBvdGhlcnMgcHJvY2Vzc2VkIGJ5IGxvZ191dGlsaXR5X2NvbW1h bmQoKSAqLworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorfQorCisvKgorICogSG9vayBm dW5jdGlvbnMKKyAqLworc3RhdGljIEV4ZWN1dG9yQ2hlY2tQZXJtc19ob29rX3R5cGUgbmV4 dF9FeGVjdXRvckNoZWNrUGVybXNfaG9vayA9IE5VTEw7CitzdGF0aWMgUHJvY2Vzc1V0aWxp dHlfaG9va190eXBlIG5leHRfUHJvY2Vzc1V0aWxpdHlfaG9vayA9IE5VTEw7CitzdGF0aWMg b2JqZWN0X2FjY2Vzc19ob29rX3R5cGUgbmV4dF9vYmplY3RfYWNjZXNzX2hvb2sgPSBOVUxM Oworc3RhdGljIEV4ZWN1dG9yU3RhcnRfaG9va190eXBlIG5leHRfRXhlY3V0b3JTdGFydF9o b29rID0gTlVMTDsKK3N0YXRpYyBFeGVjdXRvckVuZF9ob29rX3R5cGUgbmV4dF9FeGVjdXRv ckVuZF9ob29rID0gTlVMTDsKKworLyoKKyAqIEhvb2sgRXhlY3V0b3JTdGFydCB0byBnZXQg dGhlIHF1ZXJ5IHRleHQgYW5kIGJhc2ljIGNvbW1hbmQgdHlwZSBmb3IgcXVlcmllcworICog dGhhdCBkbyBub3QgY29udGFpbiBhIHRhYmxlIHNvIGNhbid0IGJlIGlkZW5pdGlmaWVkIGFj Y3VyYXRlbHkgaW4KKyAqIEV4ZWN1dG9yQ2hlY2tQZXJtcy4KKyAqLworc3RhdGljIHZvaWQK K3BnX2F1ZGl0X0V4ZWN1dG9yU3RhcnRfaG9vayhRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50 IGVmbGFncykKK3sKKwlBdWRpdEV2ZW50U3RhY2tJdGVtICpzdGFja0l0ZW0gPSBOVUxMOwor CisJaWYgKCFpbnRlcm5hbFN0YXRlbWVudCkKKwl7CisJCS8qIEFsbG9jYXRlIHRoZSBhdWRp dCBldmVudCAqLworCQlzdGFja0l0ZW0gPSBzdGFja19wdXNoKCk7CisKKwkJLyogSW5pdGlh bGl6ZSBjb21tYW5kICovCisJCXN3aXRjaCAocXVlcnlEZXNjLT5vcGVyYXRpb24pCisJCXsK KwkJCWNhc2UgQ01EX1NFTEVDVDoKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3Rt dExldmVsID0gTE9HU1RNVF9BTEw7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1h bmRUYWcgPSBUX1NlbGVjdFN0bXQ7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1h bmQgPSBDT01NQU5EX1NFTEVDVDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBDTURfSU5TRVJU OgorCQkJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBMT0dTVE1UX01P RDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9IFRfSW5zZXJ0U3Rt dDsKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZCA9IENPTU1BTkRfSU5TRVJU OworCQkJCWJyZWFrOworCisJCQljYXNlIENNRF9VUERBVEU6CisJCQkJc3RhY2tJdGVtLT5h dWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9IExPR1NUTVRfTU9EOworCQkJCXN0YWNrSXRlbS0+ YXVkaXRFdmVudC5jb21tYW5kVGFnID0gVF9VcGRhdGVTdG10OworCQkJCXN0YWNrSXRlbS0+ YXVkaXRFdmVudC5jb21tYW5kID0gQ09NTUFORF9VUERBVEU7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQ01EX0RFTEVURToKKwkJCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExl dmVsID0gTE9HU1RNVF9NT0Q7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRU YWcgPSBUX0RlbGV0ZVN0bXQ7CisJCQkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmQg PSBDT01NQU5EX0RFTEVURTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlzdGFj a0l0ZW0tPmF1ZGl0RXZlbnQubG9nU3RtdExldmVsID0gTE9HU1RNVF9BTEw7CisJCQkJc3Rh Y2tJdGVtLT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPSBUX0ludmFsaWQ7CisJCQkJc3RhY2tJ dGVtLT5hdWRpdEV2ZW50LmNvbW1hbmQgPSBDT01NQU5EX1VOS05PV047CisJCQkJYnJlYWs7 CisJCX0KKworCQkvKiBJbml0aWFsaXplIHRoZSBhdWRpdCBldmVudCAqLworCQlzdGFja0l0 ZW0tPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9ICIiOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZl bnQub2JqZWN0VHlwZSA9ICIiOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRl eHQgPSBxdWVyeURlc2MtPnNvdXJjZVRleHQ7CisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5w YXJhbUxpc3QgPSBxdWVyeURlc2MtPnBhcmFtczsKKwl9CisKKwkvKiBDYWxsIHRoZSBwcmV2 aW91cyBob29rIG9yIHN0YW5kYXJkIGZ1bmN0aW9uICovCisJaWYgKG5leHRfRXhlY3V0b3JT dGFydF9ob29rKQorCQluZXh0X0V4ZWN1dG9yU3RhcnRfaG9vayhxdWVyeURlc2MsIGVmbGFn cyk7CisJZWxzZQorCQlzdGFuZGFyZF9FeGVjdXRvclN0YXJ0KHF1ZXJ5RGVzYywgZWZsYWdz KTsKK30KKworLyoKKyAqIEhvb2sgRXhlY3V0b3JDaGVja1Blcm1zIHRvIGRvIHNlc3Npb24g YW5kIG9iamVjdCBhdWRpdGluZyBmb3IgRE1MLgorICovCitzdGF0aWMgYm9vbAorcGdfYXVk aXRfRXhlY3V0b3JDaGVja1Blcm1zX2hvb2soTGlzdCAqcmFuZ2VUYWJscywgYm9vbCBhYm9y dCkKK3sKKwlPaWQgYXVkaXRPaWQ7CisKKwkvKiBHZXQgdGhlIGF1ZGl0IG9pZCBpZiB0aGUg cm9sZSBleGlzdHMuICovCisJYXVkaXRPaWQgPSBnZXRfcm9sZV9vaWQoYXVkaXRSb2xlLCB0 cnVlKTsKKworCS8qIExvZyBETUwgaWYgdGhlIGF1ZGl0IHJvbGUgaXMgdmFsaWQgb3Igc2Vz c2lvbiBsb2dnaW5nIGlzIGVuYWJsZWQuICovCisJaWYgKChhdWRpdE9pZCAhPSBJbnZhbGlk T2lkIHx8IGF1ZGl0TG9nQml0bWFwICE9IDApICYmCisJCSFJc0Fib3J0ZWRUcmFuc2FjdGlv bkJsb2NrU3RhdGUoKSkKKwkJbG9nX3NlbGVjdF9kbWwoYXVkaXRPaWQsIHJhbmdlVGFibHMp OworCisJLyogQ2FsbCB0aGUgbmV4dCBob29rIGZ1bmN0aW9uLiAqLworCWlmIChuZXh0X0V4 ZWN1dG9yQ2hlY2tQZXJtc19ob29rICYmCisJCSEoKm5leHRfRXhlY3V0b3JDaGVja1Blcm1z X2hvb2spIChyYW5nZVRhYmxzLCBhYm9ydCkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVy biB0cnVlOworfQorCisvKgorICogSG9vayBFeGVjdXRvckVuZCB0byBwb3Agc3RhdGVtZW50 IGF1ZGl0IGV2ZW50IG9mZiB0aGUgc3RhY2suCisgKi8KK3N0YXRpYyB2b2lkCitwZ19hdWRp dF9FeGVjdXRvckVuZF9ob29rKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQoreworCS8qIENhbGwg dGhlIG5leHQgaG9vayBvciBzdGFuZGFyZCBmdW5jdGlvbiAqLworCWlmIChuZXh0X0V4ZWN1 dG9yRW5kX2hvb2spCisJCW5leHRfRXhlY3V0b3JFbmRfaG9vayhxdWVyeURlc2MpOworCWVs c2UKKwkJc3RhbmRhcmRfRXhlY3V0b3JFbmQocXVlcnlEZXNjKTsKKworCS8qIFBvcCB0aGUg YXVkaXQgZXZlbnQgb2ZmIHRoZSBzdGFjayAqLworCWlmICghaW50ZXJuYWxTdGF0ZW1lbnQg JiYgYXVkaXRFdmVudFN0YWNrKQorCXsKKwkJc3RhY2tfcG9wKGF1ZGl0RXZlbnRTdGFjay0+ c3RhY2tJZCk7CisJfQorfQorCisvKgorICogSG9vayBQcm9jZXNzVXRpbGl0eSB0byBkbyBz ZXNzaW9uIGF1ZGl0aW5nIGZvciBEREwgYW5kIHV0aWxpdHkgY29tbWFuZHMuCisgKi8KK3N0 YXRpYyB2b2lkCitwZ19hdWRpdF9Qcm9jZXNzVXRpbGl0eV9ob29rKE5vZGUgKnBhcnNldHJl ZSwKKwkJCQkJCQkgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCisJCQkJCQkJIFByb2Nlc3NV dGlsaXR5Q29udGV4dCBjb250ZXh0LAorCQkJCQkJCSBQYXJhbUxpc3RJbmZvIHBhcmFtcywK KwkJCQkJCQkgRGVzdFJlY2VpdmVyICpkZXN0LAorCQkJCQkJCSBjaGFyICpjb21wbGV0aW9u VGFnKQoreworCUF1ZGl0RXZlbnRTdGFja0l0ZW0gKnN0YWNrSXRlbSA9IE5VTEw7CisJaW50 NjQgc3RhY2tJZDsKKworCS8qIEFsbG9jYXRlIHRoZSBhdWRpdCBldmVudCAqLworCWlmICgh SXNBYm9ydGVkVHJhbnNhY3Rpb25CbG9ja1N0YXRlKCkpCisJeworCQkvKiBQcm9jZXNzIHRv cCBsZXZlbCB1dGlsaXR5IHN0YXRlbWVudCAqLworCQlpZiAoY29udGV4dCA9PSBQUk9DRVNT X1VUSUxJVFlfVE9QTEVWRUwpCisJCXsKKwkJCWlmIChhdWRpdEV2ZW50U3RhY2sgIT0gTlVM TCkKKwkJCQllbG9nKEVSUk9SLCAicGdfYXVkaXQgc3RhY2sgaXMgbm90IGVtcHR5Iik7CisK KwkJCS8qIFNldCBwYXJhbXMgKi8KKwkJCXN0YWNrSXRlbSA9IHN0YWNrX3B1c2goKTsKKwkJ CXN0YWNrSXRlbS0+YXVkaXRFdmVudC5wYXJhbUxpc3QgPSBwYXJhbXM7CisJCX0KKwkJZWxz ZQorCQkJc3RhY2tJdGVtID0gc3RhY2tfcHVzaCgpOworCisJCXN0YWNrSWQgPSBzdGFja0l0 ZW0tPnN0YWNrSWQ7CisJCXN0YWNrSXRlbS0+YXVkaXRFdmVudC5sb2dTdG10TGV2ZWwgPSBH ZXRDb21tYW5kTG9nTGV2ZWwocGFyc2V0cmVlKTsKKwkJc3RhY2tJdGVtLT5hdWRpdEV2ZW50 LmNvbW1hbmRUYWcgPSBub2RlVGFnKHBhcnNldHJlZSk7CisJCXN0YWNrSXRlbS0+YXVkaXRF dmVudC5jb21tYW5kID0gQ3JlYXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUpOworCQlzdGFja0l0 ZW0tPmF1ZGl0RXZlbnQub2JqZWN0TmFtZSA9ICIiOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZl bnQub2JqZWN0VHlwZSA9ICIiOworCQlzdGFja0l0ZW0tPmF1ZGl0RXZlbnQuY29tbWFuZFRl eHQgPSBxdWVyeVN0cmluZzsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgRE8gYmxvY2sg bG9nIGl0IGJlZm9yZSBjYWxsaW5nIHRoZSBuZXh0IFByb2Nlc3NVdGlsaXR5CisJCSAqIGhv b2suCisJCSAqLworCQlpZiAoYXVkaXRMb2dCaXRtYXAgIT0gMCAmJgorCQkJc3RhY2tJdGVt LT5hdWRpdEV2ZW50LmNvbW1hbmRUYWcgPT0gVF9Eb1N0bXQgJiYKKwkJCSFJc0Fib3J0ZWRU cmFuc2FjdGlvbkJsb2NrU3RhdGUoKSkKKwkJeworCQkJbG9nX2F1ZGl0X2V2ZW50KHN0YWNr SXRlbSk7CisJCX0KKwl9CisKKwkvKiBDYWxsIHRoZSBzdGFuZGFyZCBwcm9jZXNzIHV0aWxp dHkgY2hhaW4uICovCisJaWYgKG5leHRfUHJvY2Vzc1V0aWxpdHlfaG9vaykKKwkJKCpuZXh0 X1Byb2Nlc3NVdGlsaXR5X2hvb2spIChwYXJzZXRyZWUsIHF1ZXJ5U3RyaW5nLCBjb250ZXh0 LAorCQkJCQkJCQkJIHBhcmFtcywgZGVzdCwgY29tcGxldGlvblRhZyk7CisJZWxzZQorCQlz dGFuZGFyZF9Qcm9jZXNzVXRpbGl0eShwYXJzZXRyZWUsIHF1ZXJ5U3RyaW5nLCBjb250ZXh0 LAorCQkJCQkJCQlwYXJhbXMsIGRlc3QsIGNvbXBsZXRpb25UYWcpOworCisJLyoKKwkgKiBQ cm9jZXNzIHRoZSBhdWRpdCBldmVudCBpZiB0aGVyZSBpcyBvbmUuICBBbHNvIGNoZWNrIHRo YXQgdGhpcyBldmVudCB3YXMKKwkgKiBub3QgcG9wcGVkIG9mZiB0aGUgc3RhY2sgYnkgYSBt ZW1vcnkgY29udGV4dCBiZWluZyBmcmVlZCBlbHNld2hlcmUuCisJICovCisJaWYgKHN0YWNr SXRlbSAhPSBOVUxMICYmIGF1ZGl0RXZlbnRTdGFjayAhPSBOVUxMICYmCisJCWF1ZGl0RXZl bnRTdGFjay0+c3RhY2tJZCA9PSBzdGFja0lkKQorCXsKKwkJLyogTG9nIHRoZSB1dGlsaXR5 IGNvbW1hbmQgaWYgbG9nZ2luZyBpcyBvbiwgdGhlIGNvbW1hbmQgaGFzIG5vdCBhbHJlYWR5 CisJCSAqIGJlZW4gbG9nZ2VkIGJ5IGFub3RoZXIgaG9vaywgYW5kIHRoZSB0cmFuc2FjdGlv biBpcyBub3QgYWJvcnRlZC4gKi8KKwkJaWYgKGF1ZGl0TG9nQml0bWFwICE9IDAgJiYgIWF1 ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5sb2dnZWQgJiYKKwkJCSFJc0Fib3J0ZWRUcmFu c2FjdGlvbkJsb2NrU3RhdGUoKSkKKwkJCWxvZ19hdWRpdF9ldmVudChhdWRpdEV2ZW50U3Rh Y2spOworCisJCXN0YWNrX3BvcChzdGFja0lkKTsKKwl9Cit9CisKKy8qCisgKiBIb29rIG9i amVjdF9hY2Nlc3NfaG9vayB0byBwcm92aWRlIGZ1bGx5LXF1YWxpZmllZCBvYmplY3QgbmFt ZXMgZm9yIGV4ZWN1dGUsCisgKiBjcmVhdGUsIGRyb3AsIGFuZCBhbHRlciBjb21tYW5kcy4g IE1vc3Qgb2YgdGhlIGF1ZGl0IGluZm9ybWF0aW9uIGlzIGZpbGxlZCBpbgorICogYnkgbG9n X3V0aWxpdHlfY29tbWFuZCgpLgorICovCitzdGF0aWMgdm9pZAorcGdfYXVkaXRfb2JqZWN0 X2FjY2Vzc19ob29rKE9iamVjdEFjY2Vzc1R5cGUgYWNjZXNzLAorCQkJCQkJCU9pZCBjbGFz c0lkLAorCQkJCQkJCU9pZCBvYmplY3RJZCwKKwkJCQkJCQlpbnQgc3ViSWQsCisJCQkJCQkJ dm9pZCAqYXJnKQoreworCWlmIChhdWRpdExvZ0JpdG1hcCAhPSAwICYmICFJc0Fib3J0ZWRU cmFuc2FjdGlvbkJsb2NrU3RhdGUoKSAmJgorCQlhdWRpdExvZ0JpdG1hcCAmIChMT0dfRERM IHwgTE9HX0ZVTkNUSU9OKSAmJiBhdWRpdEV2ZW50U3RhY2spCisJCWxvZ19vYmplY3RfYWNj ZXNzKGFjY2VzcywgY2xhc3NJZCwgb2JqZWN0SWQsIHN1YklkLCBhcmcpOworCisJaWYgKG5l eHRfb2JqZWN0X2FjY2Vzc19ob29rKQorCQkoKm5leHRfb2JqZWN0X2FjY2Vzc19ob29rKSAo YWNjZXNzLCBjbGFzc0lkLCBvYmplY3RJZCwgc3ViSWQsIGFyZyk7Cit9CisKKy8qCisgKiBF dmVudCB0cmlnZ2VyIGZ1bmN0aW9ucworICovCisKKy8qCisgKiBTdXBwbHkgYWRkaXRpb25h bCBkYXRhIGZvciAobm9uIGRyb3ApIHN0YXRlbWVudHMgdGhhdCBoYXZlIGV2ZW50IHRyaWdn ZXIKKyAqIHN1cHBvcnQgYW5kIGNhbiBiZSBkZXBhcnNlZC4KKyAqLworRGF0dW0KK3BnX2F1 ZGl0X2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQoreworI2lmZGVmIERFUEFS U0UKKwkvKiBDb250aW51ZSBvbmx5IGlmIHNlc3Npb24gRERMIGxvZ2dpbmcgaXMgZW5hYmxl ZCAqLworCWlmIChhdWRpdExvZ0JpdG1hcCAmIExPR19EREwpCisJeworCQlFdmVudFRyaWdn ZXJEYXRhICpldmVudERhdGE7CisJCWludAkJCQkgIHJlc3VsdCwgcm93OworCQlUdXBsZURl c2MJCSAgc3BpVHVwRGVzYzsKKwkJY29uc3QgY2hhcgkJICpxdWVyeTsKKwkJTWVtb3J5Q29u dGV4dCAJICBjb250ZXh0UXVlcnk7CisJCU1lbW9yeUNvbnRleHQgCSAgY29udGV4dE9sZDsK KworCQkvKiBCZSBzdXJlIHRoZSBtb2R1bGUgd2FzIGxvYWRlZCAqLworCQlpZiAoIWF1ZGl0 RXZlbnRTdGFjaykKKwkJeworCQkJZWxvZyhFUlJPUiwgInBnX2F1ZGl0IG5vdCBsb2FkZWQg YmVmb3JlIGNhbGwgdG8gcGdfYXVkaXRfZGRsX2NvbW1hbmRfZW5kKCkiKTsKKwkJfQorCisJ CS8qIFRoaXMgaXMgYW4gaW50ZXJuYWwgc3RhdGVtZW50IC0gZG8gbm90IGxvZyBpdCAqLwor CQlpbnRlcm5hbFN0YXRlbWVudCA9IHRydWU7CisKKwkJLyogTWFrZSBzdXJlIHRoZSBmdWN0 aW9uIHdhcyBmaXJlZCBhcyBhIHRyaWdnZXIgKi8KKwkJaWYgKCFDQUxMRURfQVNfRVZFTlRf VFJJR0dFUihmY2luZm8pKQorCQkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0 cmlnZ2VyIG1hbmFnZXIiKTsKKworCQkvKiBTd2l0Y2ggbWVtb3J5IGNvbnRleHQgKi8KKwkJ Y29udGV4dFF1ZXJ5ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKAorCQkJCQkJQ3VycmVudE1l bW9yeUNvbnRleHQsCisJCQkJCQkicGdfYXVkaXRfZnVuY19kZGxfY29tbWFuZF9lbmQgdGVt cG9yYXJ5IGNvbnRleHQiLAorCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJ CQkJQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRf TUFYU0laRSk7CisJCWNvbnRleHRPbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4 dFF1ZXJ5KTsKKworCQkvKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdHJpZ2dlcmVkIGV2ZW50 cyAqLworCQlldmVudERhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRl eHQ7CisKKwkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmxvZ1N0bXRMZXZlbCA9CisJ CQlHZXRDb21tYW5kTG9nTGV2ZWwoZXZlbnREYXRhLT5wYXJzZXRyZWUpOworCQlhdWRpdEV2 ZW50U3RhY2stPmF1ZGl0RXZlbnQuY29tbWFuZFRhZyA9CisJCQlub2RlVGFnKGV2ZW50RGF0 YS0+cGFyc2V0cmVlKTsKKwkJYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50LmNvbW1hbmQg PQorCQkJQ3JlYXRlQ29tbWFuZFRhZyhldmVudERhdGEtPnBhcnNldHJlZSk7CisKKwkJLyog UmV0dXJuIG9iamVjdHMgYWZmZWN0ZWQgYnkgdGhlIChub24gZHJvcCkgRERMIHN0YXRlbWVu dCAqLworCQlxdWVyeSA9ICJTRUxFQ1QgVVBQRVIob2JqZWN0X3R5cGUpLCBpZGVudGl0eVxu IgorCQkJCSIgIEZST00gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKSI7CisKKwkJ LyogQXR0ZW1wdCB0byBjb25uZWN0ICovCisJCXJlc3VsdCA9IFNQSV9jb25uZWN0KCk7CisK KwkJaWYgKHJlc3VsdCA8IDApCisJCQllbG9nKEVSUk9SLCAicGdfYXVkaXRfZGRsX2NvbW1h bmRfZW5kOiBTUElfY29ubmVjdCByZXR1cm5lZCAlZCIsCisJCQkJCQlyZXN1bHQpOworCisJ CS8qIEV4ZWN1dGUgdGhlIHF1ZXJ5ICovCisJCXJlc3VsdCA9IFNQSV9leGVjdXRlKHF1ZXJ5 LCB0cnVlLCAwKTsKKworCQlpZiAocmVzdWx0ICE9IFNQSV9PS19TRUxFQ1QpCisJCQllbG9n KEVSUk9SLCAicGdfYXVkaXRfZGRsX2NvbW1hbmRfZW5kOiBTUElfZXhlY3V0ZSByZXR1cm5l ZCAlZCIsCisJCQkJCQlyZXN1bHQpOworCisJCS8qIEl0ZXJhdGUgcmV0dXJuZWQgcm93cyAq LworCQlzcGlUdXBEZXNjID0gU1BJX3R1cHRhYmxlLT50dXBkZXNjOworCisJCWZvciAocm93 ID0gMDsgcm93IDwgU1BJX3Byb2Nlc3NlZDsgcm93KyspCisJCXsKKwkJCUhlYXBUdXBsZSAg c3BpVHVwbGU7CisKKwkJCXNwaVR1cGxlID0gU1BJX3R1cHRhYmxlLT52YWxzW3Jvd107CisK KwkJCS8qIFN1cHBseSBvYmplY3QgbmFtZSBhbmQgdHlwZSBmb3IgYXVkaXQgZXZlbnQgKi8K KwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3RUeXBlID0KKwkJCQlTUElf Z2V0dmFsdWUoc3BpVHVwbGUsIHNwaVR1cERlc2MsIDEpOworCQkJYXVkaXRFdmVudFN0YWNr LT5hdWRpdEV2ZW50Lm9iamVjdE5hbWUgPQorCQkJCVNQSV9nZXR2YWx1ZShzcGlUdXBsZSwg c3BpVHVwRGVzYywgMik7CisKKwkJCS8qIExvZyB0aGUgYXVkaXQgZXZlbnQgKi8KKwkJCWxv Z19hdWRpdF9ldmVudChhdWRpdEV2ZW50U3RhY2spOworCQl9CisKKwkJLyogQ29tcGxldGUg dGhlIHF1ZXJ5ICovCisJCVNQSV9maW5pc2goKTsKKworCQkvKiBTd2l0Y2ggdG8gdGhlIG9s ZCBtZW1vcnkgY29udGV4dCAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dE9s ZCk7CisJCU1lbW9yeUNvbnRleHREZWxldGUoY29udGV4dFF1ZXJ5KTsKKworCQkvKiBObyBs b25nZXIgaW4gYW4gaW50ZXJuYWwgc3RhdGVtZW50ICovCisJCWludGVybmFsU3RhdGVtZW50 ID0gZmFsc2U7CisJfQorI2VuZGlmCisKKwlQR19SRVRVUk5fTlVMTCgpOworfQorCisvKgor ICogU3VwcGx5IGFkZGl0aW9uYWwgZGF0YSBmb3IgZHJvcCBzdGF0ZW1lbnRzIHRoYXQgaGF2 ZSBldmVudCB0cmlnZ2VyIHN1cHBvcnQuCisgKi8KK0RhdHVtCitwZ19hdWRpdF9zcWxfZHJv cChQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChhdWRpdExvZ0JpdG1hcCAmIExPR19EREwp CisJeworCQlpbnQJCQkJICByZXN1bHQsIHJvdzsKKwkJVHVwbGVEZXNjCQkgIHNwaVR1cERl c2M7CisJCWNvbnN0IGNoYXIJCSAqcXVlcnk7CisJCU1lbW9yeUNvbnRleHQgCSAgY29udGV4 dFF1ZXJ5OworCQlNZW1vcnlDb250ZXh0IAkgIGNvbnRleHRPbGQ7CisKKwkJLyogQmUgc3Vy ZSB0aGUgbW9kdWxlIHdhcyBsb2FkZWQgKi8KKwkJaWYgKCFhdWRpdEV2ZW50U3RhY2spCisJ CXsKKwkJCWVsb2coRVJST1IsICJwZ19hdWRpdCBub3QgbG9hZGVkIGJlZm9yZSBjYWxsIHRv IHBnX2F1ZGl0X3NxbF9kcm9wKCkiKTsKKwkJfQorCisJCS8qIFRoaXMgaXMgYW4gaW50ZXJu YWwgc3RhdGVtZW50IC0gZG8gbm90IGxvZyBpdCAqLworCQlpbnRlcm5hbFN0YXRlbWVudCA9 IHRydWU7CisKKwkJLyogTWFrZSBzdXJlIHRoZSBmdWN0aW9uIHdhcyBmaXJlZCBhcyBhIHRy aWdnZXIgKi8KKwkJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQkJ ZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFnZXIiKTsKKwor CQkvKiBTd2l0Y2ggbWVtb3J5IGNvbnRleHQgKi8KKwkJY29udGV4dFF1ZXJ5ID0gQWxsb2NT ZXRDb250ZXh0Q3JlYXRlKAorCQkJCQkJQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQki cGdfYXVkaXRfZnVuY19kZGxfY29tbWFuZF9lbmQgdGVtcG9yYXJ5IGNvbnRleHQiLAorCQkJ CQkJQUxMT0NTRVRfREVGQVVMVF9NSU5TSVpFLAorCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9J TklUU0laRSwKKwkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7CisJCWNvbnRleHRP bGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dFF1ZXJ5KTsKKworCQkvKiBSZXR1 cm4gb2JqZWN0cyBhZmZlY3RlZCBieSB0aGUgZHJvcCBzdGF0ZW1lbnQgKi8KKwkJcXVlcnkg PSAiU0VMRUNUIGNsYXNzaWQsIG9iamlkLCBvYmpzdWJpZCwgVVBQRVIob2JqZWN0X3R5cGUp LFxuIgorCQkJCSIgICAgICAgc2NoZW1hX25hbWUsIG9iamVjdF9uYW1lLCBvYmplY3RfaWRl bnRpdHlcbiIKKwkJCQkiICBGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZHJvcHBlZF9vYmplY3Rz KCkiOworCisJCS8qIEF0dGVtcHQgdG8gY29ubmVjdCAqLworCQlyZXN1bHQgPSBTUElfY29u bmVjdCgpOworCisJCWlmIChyZXN1bHQgPCAwKQorCQkJZWxvZyhFUlJPUiwgInBnX2F1ZGl0 X2RkbF9kcm9wOiBTUElfY29ubmVjdCByZXR1cm5lZCAlZCIsCisJCQkJCQlyZXN1bHQpOwor CisJCS8qIEV4ZWN1dGUgdGhlIHF1ZXJ5ICovCisJCXJlc3VsdCA9IFNQSV9leGVjdXRlKHF1 ZXJ5LCB0cnVlLCAwKTsKKworCQlpZiAocmVzdWx0ICE9IFNQSV9PS19TRUxFQ1QpCisJCQll bG9nKEVSUk9SLCAicGdfYXVkaXRfZGRsX2Ryb3A6IFNQSV9leGVjdXRlIHJldHVybmVkICVk IiwKKwkJCQkJCXJlc3VsdCk7CisKKwkJLyogSXRlcmF0ZSByZXR1cm5lZCByb3dzICovCisJ CXNwaVR1cERlc2MgPSBTUElfdHVwdGFibGUtPnR1cGRlc2M7CisKKwkJZm9yIChyb3cgPSAw OyByb3cgPCBTUElfcHJvY2Vzc2VkOyByb3crKykKKwkJeworCQkJSGVhcFR1cGxlICBzcGlU dXBsZTsKKwkJCWNoYXIgKnNjaGVtYU5hbWU7CisKKwkJCXNwaVR1cGxlID0gU1BJX3R1cHRh YmxlLT52YWxzW3Jvd107CisKKwkJCWF1ZGl0RXZlbnRTdGFjay0+YXVkaXRFdmVudC5vYmpl Y3RUeXBlID0KKwkJCQlTUElfZ2V0dmFsdWUoc3BpVHVwbGUsIHNwaVR1cERlc2MsIDQpOwor CQkJc2NoZW1hTmFtZSA9IFNQSV9nZXR2YWx1ZShzcGlUdXBsZSwgc3BpVHVwRGVzYywgNSk7 CisKKwkJCWlmICghKHBnX3N0cmNhc2VjbXAoYXVkaXRFdmVudFN0YWNrLT5hdWRpdEV2ZW50 Lm9iamVjdFR5cGUsCisJCQkJCQkJIlRZUEUiKSA9PSAwIHx8CisJCQkJICBwZ19zdHJjYXNl Y21wKHNjaGVtYU5hbWUsICJwZ190b2FzdCIpID09IDApKQorCQkJeworCQkJCWF1ZGl0RXZl bnRTdGFjay0+YXVkaXRFdmVudC5vYmplY3ROYW1lID0KKwkJCQkJCVNQSV9nZXR2YWx1ZShz cGlUdXBsZSwgc3BpVHVwRGVzYywgNyk7CisKKwkJCQlsb2dfYXVkaXRfZXZlbnQoYXVkaXRF dmVudFN0YWNrKTsKKwkJCX0KKwkJfQorCisJCS8qIENvbXBsZXRlIHRoZSBxdWVyeSAqLwor CQlTUElfZmluaXNoKCk7CisKKwkJLyogU3dpdGNoIHRvIHRoZSBvbGQgbWVtb3J5IGNvbnRl eHQgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHRPbGQpOworCQlNZW1vcnlD b250ZXh0RGVsZXRlKGNvbnRleHRRdWVyeSk7CisKKwkJLyogTm8gbG9uZ2VyIGluIGFuIGlu dGVybmFsIHN0YXRlbWVudCAqLworCQlpbnRlcm5hbFN0YXRlbWVudCA9IGZhbHNlOworCX0K KworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CisKKy8qCisgKiBHVUMgY2hlY2sgYW5kIGFzc2ln biBmdW5jdGlvbnMKKyAqLworCisvKgorICogVGFrZSBhIHBnX2F1ZGl0LmxvZyB2YWx1ZSBz dWNoIGFzICJyZWFkLCB3cml0ZSwgZG1sIiwgdmVyaWZ5IHRoYXQgZWFjaCBvZiB0aGUKKyAq IGNvbW1hLXNlcGFyYXRlZCB0b2tlbnMgY29ycmVzcG9uZHMgdG8gYSBMb2dDbGFzcyB2YWx1 ZSwgYW5kIGNvbnZlcnQgdGhlbSBpbnRvCisgKiBhIGJpdG1hcCB0aGF0IGxvZ19hdWRpdF9l dmVudCBjYW4gY2hlY2suCisgKi8KK3N0YXRpYyBib29sCitjaGVja19wZ19hdWRpdF9sb2co Y2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQoreworCUxp c3QgKmZsYWdzOworCWNoYXIgKnJhd3ZhbDsKKwlMaXN0Q2VsbCAqbHQ7CisJdWludDY0ICpm OworCisJLyogTWFrZSBzdXJlIG5ld3ZhbCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9m IHRva2Vucy4gKi8KKwlyYXd2YWwgPSBwc3RyZHVwKCpuZXd2YWwpOworCWlmICghU3BsaXRJ ZGVudGlmaWVyU3RyaW5nKHJhd3ZhbCwgJywnLCAmZmxhZ3MpKQorCXsKKwkJR1VDX2NoZWNr X2VycmRldGFpbCgiTGlzdCBzeW50YXggaXMgaW52YWxpZCIpOworCQlsaXN0X2ZyZWUoZmxh Z3MpOworCQlwZnJlZShyYXd2YWwpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoKKwkg KiBDaGVjayB0aGF0IHdlIHJlY29nbmlzZSBlYWNoIHRva2VuLCBhbmQgYWRkIGl0IHRvIHRo ZSBiaXRtYXAgd2UncmUKKwkgKiBidWlsZGluZyB1cCBpbiBhIG5ld2x5LWFsbG9jYXRlZCB1 aW50NjQgKmYuCisJICovCisJZiA9ICh1aW50NjQgKikgbWFsbG9jKHNpemVvZih1aW50NjQp KTsKKwlpZiAoIWYpCisJCXJldHVybiBmYWxzZTsKKwkqZiA9IDA7CisKKwlmb3JlYWNoKGx0 LCBmbGFncykKKwl7CisJCWJvb2wgc3VidHJhY3QgPSBmYWxzZTsKKwkJdWludDY0IGNsYXNz OworCisJCS8qIFJldHJpZXZlIGEgdG9rZW4gKi8KKwkJY2hhciAqdG9rZW4gPSAoY2hhciAq KWxmaXJzdChsdCk7CisKKwkJLyogSWYgdG9rZW4gaXMgcHJlY2VkZWQgYnkgLSwgdGhlbiB0 aGUgdG9rZW4gaXMgc3VidHJhY3RpdmUuICovCisJCWlmIChzdHJzdHIodG9rZW4sICItIikg PT0gdG9rZW4pCisJCXsKKwkJCXRva2VuID0gdG9rZW4gKyAxOworCQkJc3VidHJhY3QgPSB0 cnVlOworCQl9CisKKwkJLyogVGVzdCBlYWNoIHRva2VuLiAqLworCQlpZiAocGdfc3RyY2Fz ZWNtcCh0b2tlbiwgQ0xBU1NfTk9ORSkgPT0gMCkKKwkJCWNsYXNzID0gTE9HX05PTkU7CisJ CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIENMQVNTX0FMTCkgPT0gMCkKKwkJCWNs YXNzID0gTE9HX0FMTDsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcCh0b2tlbiwgQ0xBU1Nf RERMKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfRERMOworCQllbHNlIGlmIChwZ19zdHJjYXNl Y21wKHRva2VuLCBDTEFTU19GVU5DVElPTikgPT0gMCkKKwkJCWNsYXNzID0gTE9HX0ZVTkNU SU9OOworCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19NSVNDKSA9PSAw KQorCQkJY2xhc3MgPSBMT0dfTUlTQzsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcCh0b2tl biwgQ0xBU1NfUEFSQU1FVEVSKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfUEFSQU1FVEVSOwor CQllbHNlIGlmIChwZ19zdHJjYXNlY21wKHRva2VuLCBDTEFTU19SRUFEKSA9PSAwKQorCQkJ Y2xhc3MgPSBMT0dfUkVBRDsKKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcCh0b2tlbiwgQ0xB U1NfUk9MRSkgPT0gMCkKKwkJCWNsYXNzID0gTE9HX1JPTEU7CisJCWVsc2UgaWYgKHBnX3N0 cmNhc2VjbXAodG9rZW4sIENMQVNTX1dSSVRFKSA9PSAwKQorCQkJY2xhc3MgPSBMT0dfV1JJ VEU7CisJCWVsc2UKKwkJeworCQkJZnJlZShmKTsKKwkJCXBmcmVlKHJhd3ZhbCk7CisJCQls aXN0X2ZyZWUoZmxhZ3MpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLyogQWRkIG9y IHN1YnRyYWN0IGNsYXNzIGJpdHMgZnJvbSB0aGUgbG9nIGJpdG1hcC4gKi8KKwkJaWYgKHN1 YnRyYWN0KQorCQkJKmYgJj0gfmNsYXNzOworCQllbHNlCisJCQkqZiB8PSBjbGFzczsKKwl9 CisKKwlwZnJlZShyYXd2YWwpOworCWxpc3RfZnJlZShmbGFncyk7CisKKwkvKgorCSAqIFN0 b3JlIHRoZSBiaXRtYXAgZm9yIGFzc2lnbl9wZ19hdWRpdF9sb2cuCisJICovCisJKmV4dHJh ID0gZjsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogU2V0IHBnX2F1ZGl0X2xvZyBm cm9tIGV4dHJhIChpZ25vcmluZyBuZXd2YWwsIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4KKyAq IGNvbnZlcnRlZCB0byBhIGJpdG1hcCBhYm92ZSkuIE5vdGUgdGhhdCBleHRyYSBtYXkgbm90 IGJlIHNldCBpZiB0aGUKKyAqIGFzc2lnbm1lbnQgaXMgdG8gYmUgc3VwcHJlc3NlZC4KKyAq Lworc3RhdGljIHZvaWQKK2Fzc2lnbl9wZ19hdWRpdF9sb2coY29uc3QgY2hhciAqbmV3dmFs LCB2b2lkICpleHRyYSkKK3sKKwlpZiAoZXh0cmEpCisJCWF1ZGl0TG9nQml0bWFwID0gKih1 aW50NjQgKilleHRyYTsKK30KKworLyoKKyAqIERlZmluZSBHVUMgdmFyaWFibGVzIGFuZCBp bnN0YWxsIGhvb2tzIHVwb24gbW9kdWxlIGxvYWQuCisgKi8KK3ZvaWQKK19QR19pbml0KHZv aWQpCit7CisJaWYgKElzVW5kZXJQb3N0bWFzdGVyKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ KGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJ CQllcnJtc2coInBnX2F1ZGl0IG11c3QgYmUgbG9hZGVkIHZpYSBzaGFyZWRfcHJlbG9hZF9s aWJyYXJpZXMiKSkpOworCisJLyoKKwkgKiBwZ19hdWRpdC5yb2xlID0gImF1ZGl0IgorCSAq CisJICogRGVmaW5lcyBhIHJvbGUgdG8gYmUgdXNlZCBmb3IgYXVkaXRpbmcuCisJICovCisJ RGVmaW5lQ3VzdG9tU3RyaW5nVmFyaWFibGUoInBnX2F1ZGl0LnJvbGUiLAorCQkJCQkJCSAg ICJFbmFibGUgb2JqZWN0IGF1ZGl0aW5nIGZvciByb2xlIiwKKwkJCQkJCQkgICBOVUxMLAor CQkJCQkJCSAgICZhdWRpdFJvbGUsCisJCQkJCQkJICAgIiIsCisJCQkJCQkJICAgUEdDX1NV U0VULAorCQkJCQkJCSAgIEdVQ19OT1RfSU5fU0FNUExFLAorCQkJCQkJCSAgIE5VTEwsIE5V TEwsIE5VTEwpOworCisJLyoKKwkgKiBwZ19hdWRpdC5sb2cgPSAicmVhZCwgd3JpdGUsIGRk bCIKKwkgKgorCSAqIENvbnRyb2xzIHdoYXQgY2xhc3NlcyBvZiBjb21tYW5kcyBhcmUgbG9n Z2VkLgorCSAqLworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19hdWRpdC5sb2ci LAorCQkJCQkJCSAgICJFbmFibGUgc2Vzc2lvbiBhdWRpdGluZyBmb3IgY2xhc3NlcyBvZiBj b21tYW5kcyIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICAmYXVkaXRMb2csCisJCQkJ CQkJICAgIm5vbmUiLAorCQkJCQkJCSAgIFBHQ19TVVNFVCwKKwkJCQkJCQkgICBHVUNfTElT VF9JTlBVVCB8IEdVQ19OT1RfSU5fU0FNUExFLAorCQkJCQkJCSAgIGNoZWNrX3BnX2F1ZGl0 X2xvZywKKwkJCQkJCQkgICBhc3NpZ25fcGdfYXVkaXRfbG9nLAorCQkJCQkJCSAgIE5VTEwp OworCisJLyoKKwkgKiBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBvbgorCSAqCisJICogQ29u dHJvbHMgd2hldGhlciByZWxhdGlvbnMgZ2V0IHNlcGFyYXRlIGxvZyBlbnRyaWVzIGR1cmlu ZyBzZXNzaW9uCisJICogbG9nZ2luZyBvZiBSRUFEIGFuZCBXUklURSBjbGFzc2VzLiAgVGhp cyB3b3JrcyBhcyBpZiBhbGwgcmVsYXRpb25zIGluIHRoZQorCSAqIGRhdGFiYXNlIGhhZCBi ZWVuIGFkZGVkIHRvIHRoZSBhdWRpdCByb2xlIGFuZCBwcm92aWRlcyBhIHNob3J0Y3V0IHdo ZW4KKwkgKiByZWFsbHkgZGV0YWlsZWQgbG9nZ2luZyBvZiBhYnNvbHV0ZWx5IGV2ZXJ5IHJl bGF0aW9uIGlzIHJlcXVpcmVkLgorCSAqLworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgi cGdfYXVkaXQubG9nX3JlbGF0aW9uIiwKKwkJCQkJCQkgIkVuYWJsZSBzZXNzaW9uIHJlbGF0 aW9uIGxvZ2dpbmciLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmYXVkaXRMb2dSZWxhdGlv biwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19TVVNFVCwKKwkJCQkJCQkgR1VDX05P VF9JTl9TQU1QTEUsCisJCQkJCQkJIE5VTEwsIE5VTEwsIE5VTEwpOworCisKKwkvKgorCSAq IHBnX2F1ZGl0LmxvZ19ub3RpY2UgPSBvbgorCSAqCisJICogQXVkaXQgbG9nZ2luZyBpcyBy YWlzZWQgYXMgbm90aWNlcyB0aGF0IGNhbiBiZSBzZWVuIG9uIHRoZSBjbGllbnQuICBUaGlz IGlzCisJICogaW50ZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisJICovCisJRGVmaW5l Q3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19hdWRpdC5sb2dfbm90aWNlIiwKKwkJCQkJCQkgIlJh aXNlIGEgbm90aWNlIHdoZW4gbG9nZ2luZyIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZh dWRpdExvZ05vdGljZSwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19TVVNFVCwKKwkJ CQkJCQkgR1VDX05PVF9JTl9TQU1QTEUsCisJCQkJCQkJIE5VTEwsIE5VTEwsIE5VTEwpOwor CisJLyoKKwkgKiBJbnN0YWxsIG91ciBob29rIGZ1bmN0aW9ucyBhZnRlciBzYXZpbmcgdGhl IGV4aXN0aW5nIHBvaW50ZXJzIHRvIHByZXNlcnZlCisJICogdGhlIGNoYWluLgorCSAqLwor CW5leHRfRXhlY3V0b3JTdGFydF9ob29rID0gRXhlY3V0b3JTdGFydF9ob29rOworCUV4ZWN1 dG9yU3RhcnRfaG9vayA9IHBnX2F1ZGl0X0V4ZWN1dG9yU3RhcnRfaG9vazsKKworCW5leHRf RXhlY3V0b3JDaGVja1Blcm1zX2hvb2sgPSBFeGVjdXRvckNoZWNrUGVybXNfaG9vazsKKwlF eGVjdXRvckNoZWNrUGVybXNfaG9vayA9IHBnX2F1ZGl0X0V4ZWN1dG9yQ2hlY2tQZXJtc19o b29rOworCisJbmV4dF9FeGVjdXRvckVuZF9ob29rID0gRXhlY3V0b3JFbmRfaG9vazsKKwlF eGVjdXRvckVuZF9ob29rID0gcGdfYXVkaXRfRXhlY3V0b3JFbmRfaG9vazsKKworCW5leHRf UHJvY2Vzc1V0aWxpdHlfaG9vayA9IFByb2Nlc3NVdGlsaXR5X2hvb2s7CisJUHJvY2Vzc1V0 aWxpdHlfaG9vayA9IHBnX2F1ZGl0X1Byb2Nlc3NVdGlsaXR5X2hvb2s7CisKKwluZXh0X29i amVjdF9hY2Nlc3NfaG9vayA9IG9iamVjdF9hY2Nlc3NfaG9vazsKKwlvYmplY3RfYWNjZXNz X2hvb2sgPSBwZ19hdWRpdF9vYmplY3RfYWNjZXNzX2hvb2s7Cit9CmRpZmYgLS1naXQgYS9j b250cmliL3BnX2F1ZGl0L3BnX2F1ZGl0LmNvbmYgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1 ZGl0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmNGEyMgot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfYXVkaXQvcGdfYXVkaXQuY29uZgpAQCAt MCwwICsxIEBACitzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgPSBwZ19hdWRpdApkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19hdWRpdC9wZ19hdWRpdC5jb250cm9sIGIvY29udHJpYi9wZ19h dWRpdC9wZ19hdWRpdC5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjY3MzBjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX2F1ZGl0L3BnX2F1 ZGl0LmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIHBnX2F1ZGl0IGV4dGVuc2lvbgorY29t bWVudCA9ICdwcm92aWRlcyBhdWRpdGluZyBmdW5jdGlvbmFsaXR5JworZGVmYXVsdF92ZXJz aW9uID0gJzEuMC4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdfYXVkaXQnCity ZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfYXVkaXQvc3FsL3Bn X2F1ZGl0LnNxbCBiL2NvbnRyaWIvcGdfYXVkaXQvc3FsL3BnX2F1ZGl0LnNxbApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjExZDFhCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19hdWRpdC9zcWwvcGdfYXVkaXQuc3FsCkBAIC0wLDAgKzEsNTU2IEBA CistLSBMb2FkIHBnX2F1ZGl0IG1vZHVsZQorY3JlYXRlIGV4dGVuc2lvbiBwZ19hdWRpdDsK KworLS0KKy0tIENyZWF0ZSBhIHN1cGVydXNlciByb2xlIHRoYXQgd2Uga25vdyB0aGUgbmFt ZSBvZiBmb3IgdGVzdGluZworQ1JFQVRFIFVTRVIgc3VwZXIgU1VQRVJVU0VSOworXGNvbm5l Y3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVyOworCistLQorLS0gQ3JlYXRlIGF1ZGl0b3Ig cm9sZQorQ1JFQVRFIFJPTEUgYXVkaXRvcjsKKworLS0KKy0tIENyZWF0ZSBmaXJzdCB0ZXN0 IHVzZXIKK0NSRUFURSBVU0VSIHVzZXIxOworQUxURVIgUk9MRSB1c2VyMSBTRVQgcGdfYXVk aXQubG9nID0gJ2RkbCwgUk9MRSc7CitBTFRFUiBST0xFIHVzZXIxIFNFVCBwZ19hdWRpdC5s b2dfbm90aWNlID0gb247CisKKy0tCistLSBDcmVhdGUsIHNlbGVjdCwgZHJvcCAoc2VsZWN0 IHdpbGwgbm90IGJlIGF1ZGl0ZWQpCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNl cjEKK0NSRUFURSBUQUJMRSBwdWJsaWMudGVzdCAoaWQgSU5UKTsKK1NFTEVDVCAqIEZST00g dGVzdDsKK0RST1AgVEFCTEUgdGVzdDsKKworLS0KKy0tIENyZWF0ZSBzZWNvbmQgdGVzdCB1 c2VyCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gc3VwZXIKKworQ1JFQVRFIFVTRVIg dXNlcjI7CitBTFRFUiBST0xFIHVzZXIyIFNFVCBwZ19hdWRpdC5sb2cgPSAnUmVhZCwgd3Jp dEUnOworQUxURVIgUk9MRSB1c2VyMiBTRVQgcGdfYXVkaXQubG9nX25vdGljZSA9IG9uOwor QUxURVIgUk9MRSB1c2VyMiBTRVQgcGdfYXVkaXQucm9sZSA9IGF1ZGl0b3I7CisKK1xjb25u ZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMgorQ1JFQVRFIFRBQkxFIHRlc3QyIChpZCBJ TlQpOworR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHB1YmxpYy50ZXN0MiBUTyBhdWRpdG9yOwor CistLQorLS0gUm9sZS1iYXNlZCB0ZXN0cworQ1JFQVRFIFRBQkxFIHRlc3QzCisoCisJaWQg SU5UCispOworCitTRUxFQ1QgY291bnQoKikKKyAgRlJPTQorKAorCVNFTEVDVCByZWxuYW1l CisJICBGUk9NIHBnX2NsYXNzCisJICBMSU1JVCAxCispIFNVQlFVRVJZOworCitTRUxFQ1Qg KgorICBGUk9NIHRlc3QzLCB0ZXN0MjsKKworR1JBTlQgSU5TRVJUCisgICBPTiBUQUJMRSBw dWJsaWMudGVzdDMKKyAgIFRPIGF1ZGl0b3I7CisKKy0tCistLSBDcmVhdGUgYSB2aWV3IHRv IHRlc3QgbG9nZ2luZworQ1JFQVRFIFZJRVcgdndfdGVzdDMgQVMKK1NFTEVDVCAqCisgIEZS T00gdGVzdDM7CisKK0dSQU5UIFNFTEVDVAorICAgT04gdndfdGVzdDMKKyAgIFRPIGF1ZGl0 b3I7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBzZWxlY3Qgb24g dndfdGVzdDMKKy0tIHNlbGVjdCBvbiB0ZXN0MgorU0VMRUNUICoKKyAgRlJPTSB2d190ZXN0 MywgdGVzdDI7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBpbnNl cnQgb24gdGVzdDMKKy0tIHNlbGVjdCBvbiB0ZXN0MgorV0lUSCBDVEUgQVMKKygKKwlTRUxF Q1QgaWQKKwkgIEZST00gdGVzdDIKKykKK0lOU0VSVCBJTlRPIHRlc3QzCitTRUxFQ1QgaWQK KyAgRlJPTSBjdGU7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBp bnNlcnQgb24gdGVzdDMKK1dJVEggQ1RFIEFTCisoCisJSU5TRVJUIElOVE8gdGVzdDMgVkFM VUVTICgxKQorCSAgICAgICAgICAgICAgIFJFVFVSTklORyBpZAorKQorSU5TRVJUIElOVE8g dGVzdDIKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsKKworR1JBTlQgVVBEQVRFIE9OIFRBQkxF IHB1YmxpYy50ZXN0MiBUTyBhdWRpdG9yOworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNh dXNlIG9mOgorLS0gaW5zZXJ0IG9uIHRlc3QzCistLSB1cGRhdGUgb24gdGVzdDIKK1dJVEgg Q1RFIEFTCisoCisJVVBEQVRFIHRlc3QyCisJICAgU0VUIGlkID0gMQorCVJFVFVSTklORyBp ZAorKQorSU5TRVJUIElOVE8gdGVzdDMKK1NFTEVDVCBpZAorICBGUk9NIGN0ZTsKKworLS0K Ky0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIGluc2VydCBvbiB0ZXN0MgorV0lU SCBDVEUgQVMKKygKKwlJTlNFUlQgSU5UTyB0ZXN0MiBWQUxVRVMgKDEpCisJICAgICAgICAg ICAgICAgUkVUVVJOSU5HIGlkCispCitVUERBVEUgdGVzdDMKKyAgIFNFVCBpZCA9IGN0ZS5p ZAorICBGUk9NIGN0ZQorIFdIRVJFIHRlc3QzLmlkIDw+IGN0ZS5pZDsKKworLS0KKy0tIENo YW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDIgc28gdGhhdCBvbmx5IG9iamVjdCBsb2dnaW5n IHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHN1cGVyCithbHRl ciByb2xlIHVzZXIyIHNldCBwZ19hdWRpdC5sb2cgPSAnTk9ORSc7CisKK1xjb25uZWN0IGNv bnRyaWJfcmVncmVzc2lvbiB1c2VyMgorCistLQorLS0gQ3JlYXRlIHRlc3Q0IGFuZCBhZGQg cGVybWlzc2lvbnMKK0NSRUFURSBUQUJMRSB0ZXN0NAorKAorCWlkIGludCwKKwluYW1lIHRl eHQKKyk7CisKK0dSQU5UIFNFTEVDVCAobmFtZSkKKyAgIE9OIFRBQkxFIHB1YmxpYy50ZXN0 NAorICAgVE8gYXVkaXRvcjsKKworR1JBTlQgVVBEQVRFIChpZCkKKyAgIE9OIFRBQkxFIHB1 YmxpYy50ZXN0NAorICAgVE8gYXVkaXRvcjsKKworR1JBTlQgaW5zZXJ0IChuYW1lKQorICAg T04gVEFCTEUgcHVibGljLnRlc3Q0CisgICBUTyBhdWRpdG9yOworCistLQorLS0gTm90IG9i amVjdCBsb2dnZWQKK1NFTEVDVCBpZAorICBGUk9NIHB1YmxpYy50ZXN0NDsKKworLS0KKy0t IE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHNlbGVjdCAobmFtZSkgb24gdGVzdDQK K1NFTEVDVCBuYW1lCisgIEZST00gcHVibGljLnRlc3Q0OworCistLQorLS0gTm90IG9iamVj dCBsb2dnZWQKK0lOU0VSVCBJTlRPIHB1YmxpYy50ZXN0NCAoaWQpCisgICAgICAgICAgICAg ICAgICBWQUxVRVMgKDEpOworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgor LS0gaW5zZXJ0IChuYW1lKSBvbiB0ZXN0NAorSU5TRVJUIElOVE8gcHVibGljLnRlc3Q0IChu YW1lKQorICAgICAgICAgICAgICAgICAgVkFMVUVTICgndGVzdCcpOworCistLQorLS0gTm90 IG9iamVjdCBsb2dnZWQKK1VQREFURSBwdWJsaWMudGVzdDQKKyAgIFNFVCBuYW1lID0gJ2Zv byc7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRhdGUgKGlk KSBvbiB0ZXN0NAorVVBEQVRFIHB1YmxpYy50ZXN0NAorICAgU0VUIGlkID0gMTsKKworLS0K Ky0tIE9iamVjdCBsb2dnZWQgYmVjYXVzZSBvZjoKKy0tIHVwZGF0ZSAobmFtZSkgb24gdGVz dDQKKy0tIHVwZGF0ZSAobmFtZSkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNlbGVjdCAobmFt ZSkgZHVlIHRvIG9yZGVyaW5nCit1cGRhdGUgcHVibGljLnRlc3Q0IHNldCBuYW1lID0gJ2Zv bycgd2hlcmUgbmFtZSA9ICdiYXInOworCistLQorLS0gRHJvcCB0ZXN0IHRhYmxlcworRFJP UCBUQUJMRSB0ZXN0MjsKK0RST1AgVklFVyB2d190ZXN0MzsKK0RST1AgVEFCTEUgdGVzdDM7 CitEUk9QIFRBQkxFIHRlc3Q0OworCistLQorLS0gQ2hhbmdlIHBlcm1pc3Npb25zIG9mIHVz ZXIgMSBzbyB0aGF0IHNlc3Npb24gbG9nZ2luZyB3aWxsIGJlIGRvbmUKK1xjb25uZWN0IGNv bnRyaWJfcmVncmVzc2lvbiBzdXBlcgorYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQu bG9nID0gJ0RETCwgUkVBRCc7CitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24gdXNlcjEK KworLS0KKy0tIENyZWF0ZSB0YWJsZSBpcyBzZXNzaW9uIGxvZ2dlZAorQ1JFQVRFIFRBQkxF IHB1YmxpYy5hY2NvdW50CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlwYXNzd29yZCBU RVhULAorCWRlc2NyaXB0aW9uIFRFWFQKKyk7CisKKy0tCistLSBTZWxlY3QgaXMgc2Vzc2lv biBsb2dnZWQKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudDsKKworLS0KKy0tIEluc2VydCBp cyBub3QgbG9nZ2VkCitJTlNFUlQgSU5UTyBhY2NvdW50IChpZCwgbmFtZSwgcGFzc3dvcmQs IGRlc2NyaXB0aW9uKQorCQkJIFZBTFVFUyAoMSwgJ3VzZXIxJywgJ0hBU0gxJywgJ2JsYWgs IGJsYWgnKTsKKworLS0KKy0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEgc28gdGhh dCBvbmx5IG9iamVjdCBsb2dnaW5nIHdpbGwgYmUgZG9uZQorXGNvbm5lY3QgY29udHJpYl9y ZWdyZXNzaW9uIHN1cGVyCithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5sb2cgPSAn bm9uZSc7CithbHRlciByb2xlIHVzZXIxIHNldCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0b3In OworXGNvbm5lY3QgY29udHJpYl9yZWdyZXNzaW9uIHVzZXIxCisKKy0tCistLSBBdWRpdG9y IGdyYW50cyBub3QgbG9nZ2VkCitHUkFOVCBTRUxFQ1QgKHBhc3N3b3JkKSwKKwkgIFVQREFU RSAobmFtZSwgcGFzc3dvcmQpCisgICBPTiBUQUJMRSBwdWJsaWMuYWNjb3VudAorICAgVE8g YXVkaXRvcjsKKworLS0KKy0tIE5vdCBvYmplY3QgbG9nZ2VkCitTRUxFQ1QgaWQsCisJICAg bmFtZQorICBGUk9NIGFjY291bnQ7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ug b2Y6CistLSBzZWxlY3QgKHBhc3N3b3JkKSBvbiBhY2NvdW50CitTRUxFQ1QgcGFzc3dvcmQK KyAgRlJPTSBhY2NvdW50OworCistLQorLS0gTm90IG9iamVjdCBsb2dnZWQKK1VQREFURSBh Y2NvdW50CisgICBTRVQgZGVzY3JpcHRpb24gPSAneWFkYSwgeWFkYSc7CisKKy0tCistLSBP YmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRhdGUgKHBhc3N3b3JkKSBvbiBhY2Nv dW50CitVUERBVEUgYWNjb3VudAorICAgU0VUIHBhc3N3b3JkID0gJ0hBU0gyJzsKKworLS0K Ky0tIENoYW5nZSBwZXJtaXNzaW9ucyBvZiB1c2VyIDEgc28gdGhhdCBzZXNzaW9uIHJlbGF0 aW9uIGxvZ2dpbmcgd2lsbCBiZSBkb25lCitcY29ubmVjdCBjb250cmliX3JlZ3Jlc3Npb24g c3VwZXIKK2FsdGVyIHJvbGUgdXNlcjEgc2V0IHBnX2F1ZGl0LmxvZ19yZWxhdGlvbiA9IG9u OworYWx0ZXIgcm9sZSB1c2VyMSBzZXQgcGdfYXVkaXQubG9nID0gJ3JlYWQsIFdSSVRFJzsK K1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lvbiB1c2VyMQorCistLQorLS0gTm90IGxvZ2dl ZAorY3JlYXRlIHRhYmxlIEFDQ09VTlRfUk9MRV9NQVAKKygKKwlhY2NvdW50X2lkIElOVCwK Kwlyb2xlX2lkIElOVAorKTsKKworLS0KKy0tIEF1ZGl0b3IgZ3JhbnRzIG5vdCBsb2dnZWQK K0dSQU5UIFNFTEVDVAorICAgT04gVEFCTEUgcHVibGljLmFjY291bnRfcm9sZV9tYXAKKyAg IFRPIGF1ZGl0b3I7CisKKy0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSBz ZWxlY3QgKHBhc3N3b3JkKSBvbiBhY2NvdW50CistLSBzZWxlY3Qgb24gYWNjb3VudF9yb2xl X21hcAorLS0gU2Vzc2lvbiBsb2dnZWQgb24gYWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJl YWQgYW5kIGxvZ19yZWxhdGlvbiA9IG9uCitTRUxFQ1QgYWNjb3VudC5wYXNzd29yZCwKKwkg ICBhY2NvdW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgRlJPTSBhY2NvdW50CisJICAgSU5ORVIg Sk9JTiBhY2NvdW50X3JvbGVfbWFwCisJCQlvbiBhY2NvdW50LmlkID0gYWNjb3VudF9yb2xl X21hcC5hY2NvdW50X2lkOworCistLQorLS0gT2JqZWN0IGxvZ2dlZCBiZWNhdXNlIG9mOgor LS0gc2VsZWN0IChwYXNzd29yZCkgb24gYWNjb3VudAorLS0gU2Vzc2lvbiBsb2dnZWQgb24g YWxsIHRhYmxlcyBiZWNhdXNlIGxvZyA9IHJlYWQgYW5kIGxvZ19yZWxhdGlvbiA9IG9uCitT RUxFQ1QgcGFzc3dvcmQKKyAgRlJPTSBhY2NvdW50OworCistLQorLS0gTm90IG9iamVjdCBs b2dnZWQKKy0tIFNlc3Npb24gbG9nZ2VkIG9uIGFsbCB0YWJsZXMgYmVjYXVzZSBsb2cgPSBy ZWFkIGFuZCBsb2dfcmVsYXRpb24gPSBvbgorVVBEQVRFIGFjY291bnQKKyAgIFNFVCBkZXNj cmlwdGlvbiA9ICd5YWRhLCB5YWRhJzsKKworLS0KKy0tIE9iamVjdCBsb2dnZWQgYmVjYXVz ZSBvZjoKKy0tIHNlbGVjdCAocGFzc3dvcmQpIG9uIGFjY291bnQgKGluIHRoZSB3aGVyZSBj bGF1c2UpCistLSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2UgbG9nID0g cmVhZCBhbmQgbG9nX3JlbGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBTRVQgZGVz Y3JpcHRpb24gPSAneWFkYSwgeWFkYScKKyB3aGVyZSBwYXNzd29yZCA9ICdIQVNIMic7CisK Ky0tCistLSBPYmplY3QgbG9nZ2VkIGJlY2F1c2Ugb2Y6CistLSB1cGRhdGUgKHBhc3N3b3Jk KSBvbiBhY2NvdW50CistLSBTZXNzaW9uIGxvZ2dlZCBvbiBhbGwgdGFibGVzIGJlY2F1c2Ug bG9nID0gcmVhZCBhbmQgbG9nX3JlbGF0aW9uID0gb24KK1VQREFURSBhY2NvdW50CisgICBT RVQgcGFzc3dvcmQgPSAnSEFTSDInOworCistLQorLS0gQ2hhbmdlIGJhY2sgdG8gc3VwZXJ1 c2VyIHRvIGRvIGV4aGF1c3RpdmUgdGVzdHMKK1xjb25uZWN0IGNvbnRyaWJfcmVncmVzc2lv biBzdXBlcgorU0VUIHBnX2F1ZGl0LmxvZyA9ICdBTEwnOworU0VUIHBnX2F1ZGl0LmxvZ19u b3RpY2UgPSBPTjsKK1NFVCBwZ19hdWRpdC5sb2dfcmVsYXRpb24gPSBPTjsKKworLS0KKy0t IFNpbXBsZSBETyBibG9jaworRE8gJCQKK0JFR0lOCisJcmFpc2Ugbm90aWNlICd0ZXN0JzsK K0VORCAkJDsKKworLS0KKy0tIENyZWF0ZSB0ZXN0IHNjaGVtYQorQ1JFQVRFIFNDSEVNQSB0 ZXN0OworCistLQorLS0gQ29weSBwZ19jbGFzcyB0byBzdGRvdXQKK0NPUFkgYWNjb3VudCBU TyBzdGRvdXQ7CisKKy0tCistLSBDcmVhdGUgYSB0YWJsZSBmcm9tIGEgcXVlcnkKK0NSRUFU RSBUQUJMRSB0ZXN0LmFjY291bnRfY29weSBBUworU0VMRUNUICoKKyAgRlJPTSBhY2NvdW50 OworCistLQorLS0gQ29weSBmcm9tIHN0ZGluIHRvIGFjY291bnQgY29weQorQ09QWSB0ZXN0 LmFjY291bnRfY29weSBmcm9tIHN0ZGluOworMQl1c2VyMQlIQVNIMgl5YWRhLCB5YWRhCitc LgorCistLQorLS0gVGVzdCBwcmVwYXJlZCBzdGF0ZW1lbnQKK1BSRVBBUkUgcGdjbGFzc3N0 bXQgKG9pZCkgQVMKK1NFTEVDVCAqCisgIEZST00gYWNjb3VudAorIFdIRVJFIGlkID0gJDE7 CisKK0VYRUNVVEUgcGdjbGFzc3N0bXQgKDEpOworREVBTExPQ0FURSBwZ2NsYXNzc3RtdDsK KworLS0KKy0tIFRlc3QgY3Vyc29yIC0gbm8gdGFibGVzIHdpbGwgYmUgbG9nZ2VkIHNpbmNl IHBnX2NsYXNzIGlzIGEgc3lzdGVtIHRhYmxlCitCRUdJTjsKKworREVDTEFSRSBjdGVzdCBT Q1JPTEwgQ1VSU09SIEZPUgorU0VMRUNUIGNvdW50KCopCisgIEZST00KKygKKwlTRUxFQ1Qg cmVsbmFtZQorCSAgRlJPTSBwZ19jbGFzcworCSBMSU1JVCAxCisgKSBzdWJxdWVyeTsKKwor RkVUQ0ggTkVYVCBGUk9NIGN0ZXN0OworQ0xPU0UgY3Rlc3Q7CitDT01NSVQ7CisKKy0tCist LSBUZXN0IHByZXBhcmVkIGluc2VydAorQ1JFQVRFIFRBQkxFIHRlc3QudGVzdF9pbnNlcnQK KygKKwlpZCBJTlQKKyk7CisKK1BSRVBBUkUgcGdjbGFzc3N0bXQgKG9pZCkgQVMKK0lOU0VS VCBJTlRPIHRlc3QudGVzdF9pbnNlcnQgKGlkKQorICAgICAgICAgICAgICAgICAgICAgIFZB TFVFUyAoJDEpOworRVhFQ1VURSBwZ2NsYXNzc3RtdCAoMSk7CisKKy0tCistLSBDaGVjayB0 aGF0IHByaW1hcnkga2V5IGNyZWF0aW9uIGlzIGxvZ2dlZAorQ1JFQVRFIFRBQkxFIHB1Ymxp Yy50ZXN0CisoCisJaWQgSU5ULAorCW5hbWUgVEVYVCwKKwlkZXNjcmlwdGlvbiBURVhULAor CUNPTlNUUkFJTlQgdGVzdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkKKyk7CisKKy0tCistLSBD aGVjayB0aGF0IGFuYWx5emUgaXMgbG9nZ2VkCitBTkFMWVpFIHRlc3Q7CisKKy0tCistLSBH cmFudHMgdG8gcHVibGljIHNob3VsZCBub3QgY2F1c2Ugb2JqZWN0IGxvZ2dpbmcgKHNlc3Np b24gbG9nZ2luZyB3aWxsCistLSBzdGlsbCBoYXBwZW4pCitHUkFOVCBTRUxFQ1QKKyAgT04g VEFCTEUgcHVibGljLnRlc3QKKyAgVE8gUFVCTElDOworCitTRUxFQ1QgKgorICBGUk9NIHRl c3Q7CisKKy0tIENoZWNrIHRoYXQgc3RhdGVtZW50cyB3aXRob3V0IGNvbHVtbnMgbG9nCitT RUxFQ1QKKyAgRlJPTSB0ZXN0OworCitTRUxFQ1QgMSwKKwkgICBjdXJyZW50X3VzZXI7CisK K0RPICQkCitERUNMQVJFCisJdGVzdCBJTlQ7CitCRUdJTgorCVNFTEVDVCAxCisJICBJTlRP IHRlc3Q7CitFTkQgJCQ7CisKK2V4cGxhaW4gc2VsZWN0IDE7CisKKy0tCistLSBUZXN0IHRo YXQgbG9va3MgaW5zaWRlIG9mIGRvIGJsb2NrcyBsb2cKK0lOU0VSVCBJTlRPIFRFU1QgKGlk KQorCQkgIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBURVNUIChpZCkKKwkJICBWQUxVRVMg KDIpOworSU5TRVJUIElOVE8gVEVTVCAoaWQpCisJCSAgVkFMVUVTICgzKTsKKworRE8gJCQK K0RFQ0xBUkUKKwlyZXN1bHQgUkVDT1JEOworQkVHSU4KKwlGT1IgcmVzdWx0IElOCisJCVNF TEVDVCBpZAorCQkgIEZST00gdGVzdAorCUxPT1AKKwkJSU5TRVJUIElOVE8gdGVzdCAoaWQp CisJCSAgICAgVkFMVUVTIChyZXN1bHQuaWQgKyAxMDApOworCUVORCBMT09QOworRU5EICQk OworCistLQorLS0gVGVzdCBvYmZ1c2NhdGVkIGR5bmFtaWMgc3FsIGZvciBjbGVhbiBsb2dn aW5nCitETyAkJAorREVDTEFSRQorCXRhYmxlX25hbWUgVEVYVCA9ICdkb190YWJsZSc7CitC RUdJTgorCUVYRUNVVEUgJ0NSRUFURSBUQUJMRSAnIHx8IHRhYmxlX25hbWUgfHwgJyAoIndl aXJkIG5hbWUiIElOVCknOworCUVYRUNVVEUgJ0RST1AgdGFibGUgJyB8fCB0YWJsZV9uYW1l OworRU5EICQkOworCistLQorLS0gR2VuZXJhdGUgYW4gZXJyb3IgYW5kIG1ha2Ugc3VyZSB0 aGUgc3RhY2sgZ2V0cyBjbGVhcmVkCitETyAkJAorQkVHSU4KKwlDUkVBVEUgVEFCTEUgYm9n dXMudGVzdF9ibG9jaworCSgKKwkJaWQgSU5UCisJKTsKK0VORCAkJDsKKworLS0KKy0tIFRl c3QgYWx0ZXIgdGFibGUgc3RhdGVtZW50cworQUxURVIgVEFCTEUgcHVibGljLnRlc3QKKwlE Uk9QIENPTFVNTiBkZXNjcmlwdGlvbiA7CisKK0FMVEVSIFRBQkxFIHB1YmxpYy50ZXN0CisJ UkVOQU1FIFRPIHRlc3QyOworCitBTFRFUiBUQUJMRSBwdWJsaWMudGVzdDIKKwlTRVQgU0NI RU1BIHRlc3Q7CisKK0FMVEVSIFRBQkxFIHRlc3QudGVzdDIKKwlBREQgQ09MVU1OIGRlc2Ny aXB0aW9uIFRFWFQ7CisKK0FMVEVSIFRBQkxFIHRlc3QudGVzdDIKKwlEUk9QIENPTFVNTiBk ZXNjcmlwdGlvbjsKKworRFJPUCBUQUJMRSB0ZXN0LnRlc3QyOworCistLQorLS0gVGVzdCBt dWx0aXBsZSBzdGF0ZW1lbnRzIHdpdGggb25lIHNlbWktY29sb24KK0NSRUFURSBTQ0hFTUEg Zm9vCisJQ1JFQVRFIFRBQkxFIGZvby5iYXIgKGlkIGludCkKKwlDUkVBVEUgVEFCTEUgZm9v LmJheiAoaWQgaW50KTsKKworLS0KKy0tIFRlc3QgYWdncmVnYXRlCitDUkVBVEUgRlVOQ1RJ T04gcHVibGljLmludF9hZGQKKygKKwlhIElOVCwKKwliIElOVAorKQorCVJFVFVSTlMgSU5U IExBTkdVQUdFIHBscGdzcWwgQVMgJCQKK0JFR0lOCisJcmV0dXJuIGEgKyBiOworRU5EICQk OworCitTRUxFQ1QgaW50X2FkZCgxLCAxKTsKKworQ1JFQVRFIEFHR1JFR0FURSBwdWJsaWMu c3VtX3Rlc3QoSU5UKSAoU0ZVTkM9cHVibGljLmludF9hZGQsIFNUWVBFPUlOVCwgSU5JVENP TkQ9JzAnKTsKK0FMVEVSIEFHR1JFR0FURSBwdWJsaWMuc3VtX3Rlc3QoaW50ZWdlcikgUkVO QU1FIFRPIHN1bV90ZXN0MjsKKworLS0KKy0tIFRlc3QgY29udmVyc2lvbgorQ1JFQVRFIENP TlZFUlNJT04gcHVibGljLmNvbnZlcnNpb25fdGVzdCBGT1IgJ1NRTF9BU0NJSScgVE8gJ01V TEVfSU5URVJOQUwnIEZST00gcGdfY2F0YWxvZy5hc2NpaV90b19taWM7CitBTFRFUiBDT05W RVJTSU9OIHB1YmxpYy5jb252ZXJzaW9uX3Rlc3QgUkVOQU1FIFRPIGNvbnZlcnNpb25fdGVz dDI7CisKKy0tCistLSBUZXN0IGNyZWF0ZS9hbHRlci9kcm9wIGRhdGFiYXNlCitDUkVBVEUg REFUQUJBU0UgY29udHJpYl9yZWdyZXNzaW9uX3BnYXVkaXQ7CitBTFRFUiBEQVRBQkFTRSBj b250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdCBSRU5BTUUgVE8gY29udHJpYl9yZWdyZXNzaW9u X3BnYXVkaXQyOworRFJPUCBEQVRBQkFTRSBjb250cmliX3JlZ3Jlc3Npb25fcGdhdWRpdDI7 CisKKy0tCistLSBUZXN0IHRoYXQgZnJlZXMgYSBtZW1vcnkgY29udGV4dCBlYXJsaWVyIHRo YW4gZXhwZWN0ZWQKK0NSRUFURSBUQUJMRSBob2dlCisoCisJaWQgaW50CispOworCitDUkVB VEUgRlVOQ1RJT04gdGVzdCgpCisJUkVUVVJOUyBJTlQgQVMgJCQKK0RFQ0xBUkUKKyAgICBj dXIxIGN1cnNvciBmb3Igc2VsZWN0ICogZnJvbSBob2dlOworICAgIHRtcCBpbnQ7CitCRUdJ TgorICAgIE9QRU4gY3VyMTsKKyAgICBGRVRDSCBjdXIxIGludG8gdG1wOworICAgIFJFVFVS TiB0bXA7CitFTkQgJCQKK0xBTkdVQUdFIHBscGdzcWwgOworCitTRUxFQ1QgdGVzdCgpOwpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbCBiL2RvYy9zcmMvc2dtbC9j b250cmliLnNnbWwKaW5kZXggNTc3MzA5NS4uMjBhNGU2MiAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL2NvbnRyaWIuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sCkBA IC0xMjQsNiArMTI0LDcgQEAgQ1JFQVRFIEVYVEVOU0lPTiA8cmVwbGFjZWFibGU+bW9kdWxl X25hbWU8Lz4gRlJPTSB1bnBhY2thZ2VkOwogICZsdHJlZTsKICAmcGFnZWluc3BlY3Q7CiAg JnBhc3N3b3JkY2hlY2s7CisgJnBnYXVkaXQ7CiAgJnBnYnVmZmVyY2FjaGU7CiAgJnBnY3J5 cHRvOwogICZwZ2ZyZWVzcGFjZW1hcDsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9maWxl bGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKaW5kZXggYWI5MzVhNi4u N2YzOWY0MiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKQEAgLTEyNSw2ICsxMjUsNyBAQAogPCFFTlRJ VFkgb2lkMm5hbWUgICAgICAgIFNZU1RFTSAib2lkMm5hbWUuc2dtbCI+CiA8IUVOVElUWSBw YWdlaW5zcGVjdCAgICAgU1lTVEVNICJwYWdlaW5zcGVjdC5zZ21sIj4KIDwhRU5USVRZIHBh c3N3b3JkY2hlY2sgICBTWVNURU0gInBhc3N3b3JkY2hlY2suc2dtbCI+Cis8IUVOVElUWSBw Z2F1ZGl0ICAgICAgICAgU1lTVEVNICJwZ2F1ZGl0LnNnbWwiPgogPCFFTlRJVFkgcGdidWZm ZXJjYWNoZSAgIFNZU1RFTSAicGdidWZmZXJjYWNoZS5zZ21sIj4KIDwhRU5USVRZIHBnY3J5 cHRvICAgICAgICBTWVNURU0gInBnY3J5cHRvLnNnbWwiPgogPCFFTlRJVFkgcGdmcmVlc3Bh Y2VtYXAgIFNZU1RFTSAicGdmcmVlc3BhY2VtYXAuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcGdhdWRpdC5zZ21sIGIvZG9jL3NyYy9zZ21sL3BnYXVkaXQuc2dtbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTA0ZTdiCi0tLSAvZGV2L251bGwK KysrIGIvZG9jL3NyYy9zZ21sL3BnYXVkaXQuc2dtbApAQCAtMCwwICsxLDYxNCBAQAorPCEt LSBkb2Mvc3JjL3NnbWwvcGdhdWRpdC5zZ21sIC0tPgorCis8c2VjdDEgaWQ9InBnYXVkaXQi IHhyZWZsYWJlbD0icGdhdWRpdCI+CisgIDx0aXRsZT5wZ19hdWRpdDwvdGl0bGU+CisKKyAg PGluZGV4dGVybSB6b25lPSJwZ2F1ZGl0Ij4KKyAgICA8cHJpbWFyeT5wZ19hdWRpdDwvcHJp bWFyeT4KKyAgPC9pbmRleHRlcm0+CisKKyAgPHBhcmE+CisgICAgVGhlIDxmaWxlbmFtZT5w Z19hdWRpdDwvZmlsZW5hbWU+IGV4dGVuc3Rpb24gcHJvdmlkZXMgZGV0YWlsZWQgc2Vzc2lv bgorICAgIGFuZC9vciBvYmplY3QgYXVkaXQgbG9nZ2luZyB2aWEgdGhlIHN0YW5kYXJkIGxv Z2dpbmcgZmFjaWxpdHkuICBUaGUgZ29hbAorICAgIGlzIHRvIHByb3ZpZGUgdGhlIHRvb2xz IG5lZWRlZCB0byBwcm9kdWNlIGF1ZGl0IGxvZ3MgcmVxdWlyZWQgdG8gcGFzcyBhbnkKKyAg ICBnb3Zlcm1lbnQsIGZpbmFuY2lhbCwgb3IgSVNPIGNlcnRpZmljYXRpb24gYXVkaXQuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgICBBbiBhdWRpdCBpcyBhbiBvZmZpY2lhbCBpbnNw ZWN0aW9uIG9mIGFuIGluZGl2aWR1YWwncyBvciBvcmdhbml6YXRpb24ncworICAgIGFjY291 bnRzLCB0eXBpY2FsbHkgYnkgYW4gaW5kZXBlbmRlbnQgYm9keS4gIFRoZSBpbmZvcm1hdGlv biBnYXRoZXJlZCBieQorICAgIDxmaWxlbmFtZT5wZ19hdWRpdDwvZmlsZW5hbWU+IGlzIHBy b3Blcmx5IGNhbGxlZCBhbiBhdWRpdCB0cmFpbCBvciBhdWRpdAorICAgIGxvZy4gIFRoZSB0 ZXJtIGF1ZGl0IGxvZyBpcyB1c2VkIGluIHRoaXMgZG9jdW1lbnRhdGlvbi4KKyAgPC9wYXJh PgorCisgIDxzZWN0Mj4KKyAgICA8dGl0bGU+V2h5IDxsaXRlcmFsPnBnX2F1ZGl0PC8+Pzwv dGl0bGU+CisgIAorICAgIDxwYXJhPgorICAgICAgQmFzaWMgc3RhdGVtZW50IGxvZ2dpbmcg Y2FuIGJlIHByb3ZpZGVkIGJ5IHRoZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXR5CisgICAg ICB1c2luZyA8bGl0ZXJhbD5sb2dfc3RhdGVtZW50cyA9IGFsbDwvPi4gIFRoaXMgaXMgYWNj ZXB0YWJsZSBmb3IgbW9uaXRvcmluZworICAgICAgYW5kIG90aGVyIHVzYWdlcyBidXQgZG9l cyBub3QgcHJvdmlkZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIGdlbmVyYWxseQorICAgICAgcmVx dWlyZWQgZm9yIGFuIGF1ZGl0LiAgSXQgaXMgbm90IGVub3VnaCB0byBoYXZlIGEgbGlzdCBv ZiBhbGwgdGhlCisgICAgICBvcGVyYXRpb25zIHBlcmZvcm1lZCBhZ2FpbnN0IHRoZSBkYXRh YmFzZS4gSXQgbXVzdCBhbHNvIGJlIHBvc3NpYmxlIHRvCisgICAgICBmaW5kIHBhcnRpY3Vs YXIgc3RhdGVtZW50cyB0aGF0IGFyZSBvZiBpbnRlcmVzdCB0byBhbiBhdWRpdG9yLgorICAg IDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgRm9yIGV4YW1wbGUsIGFuIGF1ZGl0b3Ig bWF5IHdhbnQgdG8gdmVyaWZ5IHRoYXQgYSBwYXJ0aWN1bGFyIHRhYmxlIHdhcworICAgICAg Y3JlYXRlZCBpbnNpZGUgYSBkb2N1bWVudGVkIG1haW50ZW5jZSB3aW5kb3cuICBUaGlzIG1p Z2h0IHNlZW0gbGlrZSBhCisgICAgICBzaW1wbGUgam9iIGZvciBncmVwLCBidXQgd2hhdCBp ZiB5b3UgYXJlIHByZXNlbnRlZCB3aXRoIHNvbWV0aGluZyBsaWtlCisgICAgICB0aGlzIChp bnRlbnRpb25hbGx5IG9iZnVzY2F0ZWQpIGV4YW1wbGU6CisgICAgPC9wYXJhPgorCisgICAg PHByb2dyYW1saXN0aW5nPgorRE8gJCQKK0JFR0lOCisgICAgRVhFQ1VURSAnQ1JFQVRFIFRB QkxFIGltcG9ydCcgfHwgJ2FudF90YWJsZSAoaWQgSU5UKSc7CitFTkQgJCQ7CisgICAgPC9w cm9ncmFtbGlzdGluZz4KKyAgICAKKyAgICA8cGFyYT4KKyAgICAgIFN0YW5kYXJkIGxvZ2dp bmcgd2lsbCBnaXZlIHlvdSB0aGlzOgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlz dGluZz4KK0xPRzogIHN0YXRlbWVudDogRE8gJCQKK0JFR0lOCisgICAgRVhFQ1VURSAnQ1JF QVRFIFRBQkxFIGltcG9ydCcgfHwgJ2FudF90YWJsZSAoaWQgSU5UKSc7CitFTkQgJCQ7Cisg ICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAKKyAgICA8cGFyYT4KKyAgICAgIEl0IGFwcGVh cnMgdGhhdCBmaW5kaW5nIHRoZSB0YWJsZSBvZiBpbnRlcmVzdCBtYXkgcmVxdWlyZSBzb21l IGtub3dsZWRnZQorICAgICAgb2YgdGhlIGNvZGUgaW4gY2FzZXMgd2hlcmUgdGFibGVzIGFy ZSBjcmVhdGVkIGR5bmFtaWNhbGx5LiAgVGhpcyBpcyBub3QKKyAgICAgIGlkZWFsIHNpbmNl IGl0IHdvdWxkIGJlIHByZWZlcnJhYmxlIHRvIGp1c3Qgc2VhcmNoIG9uIHRoZSB0YWJsZSBu YW1lLgorICAgICAgVGhpcyBpcyB3aGVyZSA8bGl0ZXJhbD5wZ19hdWRpdDwvPiBjb21lcyBp bi4gIEZvciB0aGUgc2FtZSBpbnB1dCwKKyAgICAgIGl0IHdpbGwgcHJvZHVjZSB0aGlzIG91 dHB1dCBpbiB0aGUgbG9nOgorICAgIDwvcGFyYT4KKworICAgIDxwcm9ncmFtbGlzdGluZz4K K0FVRElUOiBTRVNTSU9OLDMzLDEsRlVOQ1RJT04sRE8sLCwiRE8gJCQKK0JFR0lOCisgICAg RVhFQ1VURSAnQ1JFQVRFIFRBQkxFIGltcG9ydCcgfHwgJ2FudF90YWJsZSAoaWQgSU5UKSc7 CitFTkQgJCQ7IgorQVVESVQ6IFNFU1NJT04sMzMsMixEREwsQ1JFQVRFIFRBQkxFLFRBQkxF LHB1YmxpYy5pbXBvcnRhbnRfdGFibGUsQ1JFQVRFIFRBQkxFIGltcG9ydGFudF90YWJsZSAo aWQgSU5UKQorICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgICA8cGFyYT4KKyAgICAgIE5v dCBvbmx5IGlzIHRoZSA8bGl0ZXJhbD5ETzwvPiBibG9jayBsb2dnZWQsIGJ1dCBzdWJzdGF0 ZW1lbnQgMiBjb250YWlucworICAgICAgdGhlIGZ1bGwgdGV4dCBvZiB0aGUgPGxpdGVyYWw+ Q1JFQVRFIFRBQkxFPC8+IHdpdGggdGhlIHN0YXRlbWVudCB0eXBlLAorICAgICAgb2JqZWN0 IHR5cGUsIGFuZCBmdWxsLXF1YWxpZmllZCBuYW1lIHRvIG1ha2Ugc2VhcmNoZXMgZWFzeS4K KyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFdoZW4gbG9nZ2luZyA8bGl0ZXJh bD5TRUxFQ1Q8Lz4gYW5kIDxsaXRlcmFsPkRNTDwvPiBzdGF0ZW1lbnRzLAorICAgICAgPGxp dGVyYWw+cGdfYXVkaXQ8Lz4gY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbG9nIGEgc2VwYXJhdGUg ZW50cnkgZm9yIGVhY2gKKyAgICAgIHJlbGF0aW9uIHJlZmVyZW5jZWQgaW4gYSBzdGF0ZW1l bnQuICBObyBwYXJzaW5nIGlzIHJlcXVpcmVkIHRvIGZpbmQgYWxsCisgICAgICBzdGF0ZW1l bnRzIHRoYXQgdG91Y2ggYSBwYXJ0aWN1bGFyIHRhYmxlLiAgSW4gZmFjdCwgdGhlIGdvYWwg aXMgdGhhdCB0aGUKKyAgICAgIHN0YXRlbWVudCB0ZXh0IGlzIHByb3ZpZGVkIHByaW1hcmls eSBmb3IgZGVlcCBmb3JlbnNpY3MgYW5kIHNob3VsZCBub3QgYmUKKyAgICAgIHRoZSBkaXJl Y3RseSByZXF1aXJlZCBmb3IgYW55IHNlYXJjaC4KKyAgICA8L3BhcmE+CisgIDwvc2VjdDI+ CisKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5Vc2FnZSBDb25zaWRlcmF0aW9uczwvdGl0bGU+ CisgICAgCisgICAgPHBhcmE+CisgICAgICBEZXBlbmRpbmcgb24gc2V0dGluZ3MsIGl0IGlz IHBvc3NpYmxlIGZvciA8bGl0ZXJhbD5wZ19hdWRpdDwvbGl0ZXJhbD4gdG8KKyAgICAgIGdl bmVyYXRlIGFuIGVub3Jtb3VzIHZvbHVtZSBvZiBsb2dnaW5nLiAgQmUgY2FyZWZ1bCB0byBk ZXRlcm1pbmUKKyAgICAgIGV4YWN0bHkgd2hhdCBuZWVkcyB0byBiZSBhdWRpdCBsb2dnZWQg aW4geW91ciBlbnZpcm9ubWVudCB0byBhdm9pZAorICAgICAgbG9nZ2luZyB0b28gbXVjaC4K KyAgICA8L3BhcmE+CisgICAgCisgICAgPHBhcmE+CisgICAgICBGb3IgZXhhbXBsZSwgd2hl biB3b3JraW5nIGluIGFuIE9MQVAgZW52aXJvbm1lbnQgaXQgd291bGQgcHJvYmFibHkgbm90 IGJlCisgICAgICB3aXNlIHRvIGF1ZGl0IGxvZyBpbnNlcnRzIGludG8gYSBsYXJnZSBmYWN0 IHRhYmxlLiAgVGhlIHNpemUgb2YgdGhlIGxvZworICAgICAgZmlsZSB3aWxsIGxpa2VseSBi ZSBtYW55IHRpbWVzIHRoZSBhY3R1YWwgZGF0YSBzaXplIG9mIHRoZSBpbnNlcnRzIGJlY2F1 c2UKKyAgICAgIHRoZSBsb2cgZmlsZSBpcyBleHByZXNzZWQgYXMgdGV4dC4gIFNpbmNlIGxv Z3MgYXJlIGdlbmVyYWxseSBzdG9yZWQgd2l0aAorICAgICAgdGhlIE9TIHRoaXMgbWF5IGxl YWQgdG8gZGlzayBzcGFjZSBiZWluZyBleGhhdXN0ZWQgdmVyeQorICAgICAgcXVpY2tseS4g IEluIGNhc2VzIHdoZXJlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBsaW1pdCBhdWRpdCBsb2dn aW5nIHRvCisgICAgICBjZXJ0YWluIHRhYmxlcywgYmUgc3VyZSB0byBhc3Nlc3MgdGhlIHBl cmZvcm1hbmNlIGltcGFjdCB3aGlsZSB0ZXN0aW5nCisgICAgICBhbmQgYWxsb2NhdGUgcGxl bnR5IG9mIHNwYWNlIG9uIHRoZSBsb2cgdm9sdW1lLiAgVGhpcyBtYXkgYWxzbyBiZSB0cnVl IGZvcgorICAgICAgT0xUUCBlbnZpcm9ubWVudHMuICBFdmVuIGlmIHRoZSBpbnNlcnQgdm9s dW1lIGlzIG5vdCBhcyBoaWdoLCB0aGUKKyAgICAgIHBlcmZvcm1hbmNlIGltcGFjdCBvZiBh dWRpdCBsb2dnaW5nIG1heSBzdGlsbCBub3RpY2VhYmx5IGFmZmVjdCBsYXRlbmN5LgorICAg IDwvcGFyYT4KKyAgICAKKyAgICA8cGFyYT4KKyAgICAgIFRvIGxpbWl0IHRoZSBudW1iZXIg b2YgcmVsYXRpb25zIGF1ZGl0IGxvZ2dlZCBmb3IgPGxpdGVyYWw+U0VMRUNUPC8+CisgICAg ICBhbmQgPGxpdGVyYWw+RE1MPC8+IHN0YXRtZW50cywgY29uc2lkZXIgdXNpbmcgb2JqZWN0 IGF1ZGl0IGxvZ2dpbmcKKyAgICAgIChzZWUgPHhyZWYgbGlua2VuZD0icGdhdWRpdC1vYmpl Y3QtYXVkaXQtbG9nZ2luZyI+KS4gIE9iamVjdCBhdWRpdCBsb2dnaW5nCisgICAgICBhbGxv d3Mgc2VsZWN0aW9uIG9mIHRoZSByZWxhdGlvbnMgdG8gYmUgbG9nZ2VkIGFsbG93aW5nIGZv ciByZWR1Y3Rpb24KKyAgICAgIG9mIHRoZSBvdmVyYWxsIGxvZyB2b2x1bWUuICBIb3dldmVy LCB3aGVuIG5ldyByZWxhdGlvbnMgYXJlIGFkZGVkIHRoZXkKKyAgICAgIG11c3QgYmUgZXhw bGljaXRseSBhZGRlZCB0byBvYmplY3QgYXVkaXQgbG9nZ2luZy4gIEEgcHJvZ3JhbW1hdGlj CisgICAgICBzb2x1dGlvbiB3aGVyZSBzcGVjaWZpZWQgdGFibGVzIGFyZSBleGNsdWRlZCBm cm9tIGxvZ2dpbmcgYW5kIGFsbCBvdGhlcnMKKyAgICAgIGFyZSBpbmNsdWRlZCBtYXkgYmUg YSBnb29kIG9wdGlvbiBpbiB0aGlzIGNhc2UuCisgICAgPC9wYXJhPgorICA8L3NlY3QyPgor ICAKKyAgPHNlY3QyPgorICAgIDx0aXRsZT5TZXR0aW5nczwvdGl0bGU+CisgICAgCisgICAg PHBhcmE+CisgICAgICBTZXR0aW5ncyBtYXkgYmUgbW9kaWZpZWQgb25seSBieSBhIHN1cGVy dXNlci4gQWxsb3dpbmcgbm9ybWFsIHVzZXJzIHRvCisgICAgICBjaGFuZ2UgdGhlaXIgc2V0 dGluZ3Mgd291bGQgZGVmZWF0IHRoZSBwb2ludCBvZiBhbiBhdWRpdCBsb2cuCisgICAgPC9w YXJhPgorICAgICAgCisgICAgPHBhcmE+CisgICAgICBTZXR0aW5ncyBjYW4gYmUgc3BlY2lm aWVkIGdsb2JhbGx5IChpbgorICAgICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmls ZW5hbWU+IG9yIHVzaW5nCisgICAgICA8bGl0ZXJhbD5BTFRFUiBTWVNURU0gLi4uIFNFVDwv PiksIGF0IHRoZSBkYXRhYmFzZSBsZXZlbCAodXNpbmcKKyAgICAgIDxsaXRlcmFsPkFMVEVS IERBVEFCQVNFIC4uLiBTRVQ8L2xpdGVyYWw+KSwgb3IgYXQgdGhlIHJvbGUgbGV2ZWwgKHVz aW5nCisgICAgICA8bGl0ZXJhbD5BTFRFUiBST0xFIC4uLiBTRVQ8L2xpdGVyYWw+KS4gIE5v dGUgdGhhdCBzZXR0aW5ncyBhcmUgbm90CisgICAgICBpbmhlcml0ZWQgdGhyb3VnaCBub3Jt YWwgcm9sZSBpbmhlcml0YW5jZSBhbmQgPGxpdGVyYWw+U0VUIFJPTEU8Lz4gd2lsbAorICAg ICAgbm90IGFsdGVyIGEgdXNlcidzIDxsaXRlcmFsPnBnX2F1ZGl0PC8+IHNldHRpbmdzLiAg VGhpcyBpcyBhIGxpbWl0YXRpb24KKyAgICAgIG9mIHRoZSByb2xlcyBzeXN0ZW0gYW5kIG5v dCBpbmhlcmVudCB0byA8bGl0ZXJhbD5wZ19hdWRpdDwvPi4KKyAgICA8L3BhcmE+CisgICAg ICAKKyAgICA8cGFyYT4KKyAgICAgIFRoZSA8bGl0ZXJhbD5wZ19hdWRpdDwvPiBleHRlbnNp b24gbXVzdCBiZSBsb2FkZWQgaW4KKyAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFyZWQt cHJlbG9hZC1saWJyYXJpZXMiPi4gIE90aGVyd2lzZSwgYW4gZXJyb3IKKyAgICAgIHdpbGwg YmUgcmFpc2VkIGF0IGxvYWQgdGltZSBhbmQgbm8gYXVkaXQgbG9nZ2luZyB3aWxsIG9jY3Vy LgorICAgIDwvcGFyYT4KKworICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICA8dmFybGlzdGVu dHJ5IGlkPSJndWMtcGdhdWRpdC1sb2ciIHhyZWZsYWJlbD0icGdfYXVkaXQubG9nIj4KKyAg ICAgICAgPHRlcm0+PHZhcm5hbWU+cGdfYXVkaXQubG9nPC92YXJuYW1lPiAoPHR5cGU+c3Ry aW5nPC90eXBlPikKKyAgICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgICAgPHByaW1h cnk+PHZhcm5hbWU+cGdfYXVkaXQubG9nPC8+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9w cmltYXJ5PgorICAgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8L3Rlcm0+CisgICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNwZWNpZmll cyB3aGljaCBjbGFzc2VzIG9mIHN0YXRlbWVudHMgd2lsbCBiZSBsb2dnZWQgYnkgc2Vzc2lv bgorICAgICAgICAgICAgYXVkaXQgbG9nZ2luZy4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6Cisg ICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAg PGxpdGVyYWw+UkVBRDwvbGl0ZXJhbD4gLSA8bGl0ZXJhbD5TRUxFQ1Q8L2xpdGVyYWw+IGFu ZAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPkNPUFk8L2xpdGVyYWw+IHdoZW4gdGhlIHNv dXJjZSBpcyBhIHJlbGF0aW9uIG9yIGEKKyAgICAgICAgICAgICAgICBxdWVyeS4KKyAgICAg ICAgICAgICAgPC9wYXJhPgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxp dGVyYWw+V1JJVEU8L2xpdGVyYWw+IC0gPGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPiwKKyAg ICAgICAgICAgICAgICA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5ERUxF VEU8L2xpdGVyYWw+LAorICAgICAgICAgICAgICAgIDxsaXRlcmFsPlRSVU5DQVRFPC9saXRl cmFsPiwgYW5kIDxsaXRlcmFsPkNPUFk8L2xpdGVyYWw+IHdoZW4gdGhlCisgICAgICAgICAg ICAgICAgZGVzdGluYXRpb24gaXMgYSByZWxhdGlvbi4KKyAgICAgICAgICAgICAgPC9wYXJh PgorICAgICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+RlVOQ1RJT048 L2xpdGVyYWw+IC0gRnVuY3Rpb24gY2FsbHMgYW5kCisgICAgICAgICAgICAgICAgPGxpdGVy YWw+RE88L2xpdGVyYWw+IGJsb2Nrcy4KKyAgICAgICAgICAgICAgPC9wYXJhPgorICAgICAg ICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICAg ICAgPHBhcmE+CisgICAgICAgICAgICAgICAgPGxpdGVyYWw+Uk9MRTwvbGl0ZXJhbD4gLSBT dGF0ZW1lbnRzIHJlbGF0ZWQgdG8gcm9sZXMgYW5kCisgICAgICAgICAgICAgICAgcHJpdmls ZWdlczogPGxpdGVyYWw+R1JBTlQ8L2xpdGVyYWw+LAorICAgICAgICAgICAgICAgIDxsaXRl cmFsPlJFVk9LRTwvbGl0ZXJhbD4sCisgICAgICAgICAgICAgICAgPGxpdGVyYWw+Q1JFQVRF L0FMVEVSL0RST1AgUk9MRTwvbGl0ZXJhbD4uCisgICAgICAgICAgICAgIDwvcGFyYT4KKyAg ICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAg ICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxsaXRlcmFsPkRETDwvbGl0ZXJhbD4g LSBBbGwgPGxpdGVyYWw+RERMPC8+IHRoYXQgaXMgbm90IGluY2x1ZGVkCisgICAgICAgICAg ICAgICAgaW4gdGhlIDxsaXRlcmFsPlJPTEU8Lz4gY2xhc3MgcGx1cyA8bGl0ZXJhbD5SRUlO REVYPC8+LgorICAgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8L2xpc3RpdGVt PgorICAgICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgICAgICA8cGFyYT4KKyAgICAg ICAgICAgICAgICA8bGl0ZXJhbD5QQVJBTUVURVI8L2xpdGVyYWw+IC0gUGFyYW1ldGVycyB0 aGF0IHdlcmUgcGFzc2VkIGZvciB0aGUKKyAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuICBQ YXJhbWV0ZXJzIGltbWVkaWF0ZWx5IGZvbGxvdyB0aGUgc3RhdGVtZW50IHRleHQuCisgICAg ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICAgIDxs aXRlcmFsPk1JU0M8L2xpdGVyYWw+IC0gTWlzY2VsbGFuZW91cyBjb21tYW5kcywgZS5nLgor ICAgICAgICAgICAgICAgIDxsaXRlcmFsPkRJU0NBUkQ8L2xpdGVyYWw+LCA8bGl0ZXJhbD5G RVRDSDwvbGl0ZXJhbD4sCisgICAgICAgICAgICAgICAgPGxpdGVyYWw+Q0hFQ0tQT0lOVDwv bGl0ZXJhbD4sIDxsaXRlcmFsPlZBQ1VVTTwvbGl0ZXJhbD4uCisgICAgICAgICAgICAgIDwv cGFyYT4KKyAgICAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgICAgPC9pdGVtaXplZGxp c3Q+CisgICAgICAgICAgICAKKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE11bHRp cGxlIGNsYXNzZXMgY2FuIGJlIHByb3ZpZGVkIHVzaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxp c3QgYW5kCisgICAgICAgICAgICBjbGFzc2VzIGNhbiBiZSBzdWJ0cmFjdGVkIGJ5IHByZWZh Y2luZyB0aGUgY2xhc3Mgd2l0aCBhCisgICAgICAgICAgICA8bGl0ZXJhbD4tPC8+IHNpZ24g KHNlZSA8eHJlZiBsaW5rZW5kPSJwZ2F1ZGl0LXNlc3Npb24tYXVkaXQtbG9nZ2luZyI+KS4K KyAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPm5vbmU8Lz4uCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1wZ2F1ZGl0LWxvZy1ub3RpY2UiIHhy ZWZsYWJlbD0icGdfYXVkaXQubG9nX25vdGljZSI+CisgICAgICAgIDx0ZXJtPjx2YXJuYW1l PnBnX2F1ZGl0LmxvZ19ub3RpY2U8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikK KyAgICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ cGdfYXVkaXQubG9nX25vdGljZTwvPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFy eT4KKyAgICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTcGVjaWZpZXMgdGhh dCB0aGUgYXVkaXQgbG9nIG1lc3NhZ2VzIHNob3VsZCBiZSByYWlzZWQgYXMKKyAgICAgICAg ICAgIDxsaXRlcmFsPk5PVElDRTwvPiBpbnN0ZWFkIG9mIDxsaXRlcmFsPkxPRzwvPi4gIFRo ZSBwcmltYXJ5CisgICAgICAgICAgICBhZHZhbnRhZ2UgaXMgdGhhdCA8bGl0ZXJhbD5OT1RJ Q0U8Lz4gbWVzc2FnZXMgY2FuIGJlIGV4cG9zZWQKKyAgICAgICAgICAgIHRocm91Z2ggdGhl IHVzZXIgaW50ZXJmYWNlLiAgVGhpcyBzZXR0aW5nIGlzIHVzZWQgZm9yIHJlZ3Jlc3Npb24K KyAgICAgICAgICAgIHRlc3RpbmcgYW5kIG1heSBhbHNvIGJlIHVzZWZ1bCB0byBlbmQgdXNl cnMgZm9yIHRlc3RpbmcuICBJdCBpcyBub3QKKyAgICAgICAgICAgIGludGVuZGVkIHRvIGJl IHVzZWQgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50IGFzIGl0IHdpbGwgbGVhaworICAg ICAgICAgICAgd2hpY2ggc3RhdGVtZW50cyBhcmUgYmVpbmcgbG9nZ2VkIHRvIHRoZSB1c2Vy LiBUaGUgZGVmYXVsdCBpcworICAgICAgICAgICAgPGxpdGVyYWw+b2ZmPC8+LgorICAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcGdhdWRpdC1sb2ctcmVsYXRpb24i IHhyZWZsYWJlbD0icGdfYXVkaXQubG9nX3JlbGF0aW9uIj4KKyAgICAgICAgPHRlcm0+PHZh cm5hbWU+cGdfYXVkaXQubG9nX3JlbGF0aW9uPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwv dHlwZT4pCisgICAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPnBnX2F1ZGl0LmxvZ19yZWxhdGlvbjwvPiBjb25maWd1cmF0aW9uIHBhcmFtZXRl cjwvcHJpbWFyeT4KKyAgICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPC90ZXJtPgor ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBTcGVj aWZpZXMgd2hldGhlciBzZXNzaW9uIGF1ZGl0IGxvZ2dpbmcgc2hvdWxkIGNyZWF0ZSBhIHNl cGFyYXRlCisgICAgICAgICAgICBsb2cgZW50cnkgZm9yIGVhY2ggcmVsYXRpb24gKDxsaXRl cmFsPlRBQkxFPC8+LCA8bGl0ZXJhbD5WSUVXPC8+LAorICAgICAgICAgICAgZXRjLikgcmVm ZXJlbmNlZCBpbiBhIDxsaXRlcmFsPlNFTEVDVDwvPiBvciA8bGl0ZXJhbD5ETUw8Lz4KKyAg ICAgICAgICAgIHN0YXRlbWVudC4gIFRoaXMgaXMgYSB1c2VmdWwgc2hvcnRjdXQgZm9yIGV4 aGF1c3RpdmUgbG9nZ2luZworICAgICAgICAgICAgd2l0aG91dCB1c2luZyBvYmplY3QgYXVk aXQgbG9nZ2luZy4gIFRoZSBkZWZhdWx0IGlzCisgICAgICAgICAgICA8bGl0ZXJhbD5vZmY8 Lz4uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92 YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1wZ2F1ZGl0LXJv bGUiIHhyZWZsYWJlbD0icGdfYXVkaXQucm9sZSI+CisgICAgICAgIDx0ZXJtPjx2YXJuYW1l PnBnX2F1ZGl0LnJvbGU8L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICAg ICAgIDxpbmRleHRlcm0+CisgICAgICAgICAgICA8cHJpbWFyeT48dmFybmFtZT5wZ19hdWRp dC5yb2xlPC8+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgICA8L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgbWFzdGVyIHJvbGUg dG8gdXNlIGZvciBvYmplY3QgYXVkaXQgbG9nZ2luZy4gIE11bGlwbGUKKyAgICAgICAgICAg IGF1ZGl0IHJvbGVzIGNhbiBiZSBkZWZpbmVkIGJ5IGdyYW50aW5nIHRoZW0gdG8gdGhlIG1h c3RlciByb2xlLgorICAgICAgICAgICAgVGhpcyBhbGxvd3MgbXVsdGlwbGUgZ3JvdXBzIHRv IGJlIGluIGNoYXJnZSBvZiBkaWZmZXJlbnQgYXNwZWN0cworICAgICAgICAgICAgb2YgYXVk aXQgbG9nZ2luZy4gIFRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgPC92YXJp YWJsZWxpc3Q+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyIGlkPSJwZ2F1ZGl0LXNlc3Npb24t YXVkaXQtbG9nZ2luZyI+CisgICAgPHRpdGxlPlNlc3Npb24gQXVkaXQgTG9nZ2luZzwvdGl0 bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFNlc3Npb24gYXVkaXQgbG9nZ2luZyBwcm92aWRl cyBkZXRhaWxlZCBsb2dzIG9mIGFsbCBzdGF0ZW1lbnRzIGV4ZWN1dGVkCisgICAgICBieSBh IHVzZXIgaW4gdGhlIGJhY2tlbmQuCisgICAgPC9wYXJhPgorCisgICAgPHNlY3QzPgorICAg ICAgPHRpdGxlPkNvbmZpZ3VyYXRpb248L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAg ICAgU2Vzc2lvbiBsb2dnaW5nIGlzIGVuYWJsZWQgd2l0aCB0aGUgPHhyZWYgbGlua2VuZD0i Z3VjLXBnYXVkaXQtbG9nIj4KKyAgICAgICAgc2V0dGluZy4KKworICAgICAgICBFbmFibGUg c2Vzc2lvbiBsb2dnaW5nIGZvciBhbGwgPGxpdGVyYWw+RE1MPC8+IGFuZCA8bGl0ZXJhbD5E REw8Lz4gYW5kCisgICAgICAgIGxvZyBhbGwgcmVsYXRpb25zIGluIDxsaXRlcmFsPkRNTDwv PiBzdGF0ZW1lbnRzOgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KK3NldCBwZ19hdWRp dC5sb2cgPSAnd3JpdGUsIGRkbCc7CitzZXQgcGdfYXVkaXQubG9nX3JlbGF0aW9uID0gb247 CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvcGFyYT4KKworICAgICAg PHBhcmE+CisgICAgICAgIEVuYWJsZSBzZXNzaW9uIGxvZ2dpbmcgZm9yIGFsbCBjb21tYW5k cyBleGNlcHQgPGxpdGVyYWw+TUlTQzwvPiBhbmQKKyAgICAgICAgcmFpc2UgYXVkaXQgbG9n IG1lc3NhZ2VzIGFzIDxsaXRlcmFsPk5PVElDRTwvPjoKKyAgICAgICAgICA8cHJvZ3JhbWxp c3Rpbmc+CitzZXQgcGdfYXVkaXQubG9nID0gJ2FsbCwgLW1pc2MnOworc2V0IHBnX2F1ZGl0 LmxvZ19ub3RpY2UgPSBvbjsKKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAg PC9wYXJhPgorICAgIDwvc2VjdDM+CisKKyAgICA8c2VjdDM+CisgICAgICA8dGl0bGU+RXhh bXBsZTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGlzIGV4YW1wbGUg c2Vzc2lvbiBhdWRpdCBsb2dnaW5nIGlzIHVzZWQgdG8gZm9yIGxvZ2dpbmcKKyAgICAgICAg PGxpdGVyYWw+RERMPC8+IGFuZCA8bGl0ZXJhbD5TRUxFQ1Q8Lz4gc3RhdGVtZW50cy4gIE5v dGUgdGhhdCB0aGUKKyAgICAgICAgaW5zZXJ0IHN0YXRlbWVudCBpcyBub3QgbG9nZ2VkIHNp bmNlIHRoZSA8bGl0ZXJhbD5XUklURTwvPiBjbGFzcworICAgICAgICBpcyBub3QgZW5hYmxl ZAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgU1FMOgorICAgICAg PC9wYXJhPgorICAgICAgPHByb2dyYW1saXN0aW5nPgorc2V0IHBnX2F1ZGl0LmxvZyA9ICdy ZWFkLCBkZGwnOworCitjcmVhdGUgdGFibGUgYWNjb3VudAorKAorICAgIGlkIGludCwKKyAg ICBuYW1lIHRleHQsCisgICAgcGFzc3dvcmQgdGV4dCwKKyAgICBkZXNjcmlwdGlvbiB0ZXh0 CispOworCitpbnNlcnQgaW50byBhY2NvdW50IChpZCwgbmFtZSwgcGFzc3dvcmQsIGRlc2Ny aXB0aW9uKQorICAgICAgICAgICAgIHZhbHVlcyAoMSwgJ3VzZXIxJywgJ0hBU0gxJywgJ2Js YWgsIGJsYWgnKTsKKworc2VsZWN0ICoKKyAgICBmcm9tIGFjY291bnQ7CisgICAgICA8L3By b2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTG9nIE91dHB1dDoKKyAg ICAgIDwvcGFyYT4KKworICAgICAgPHByb2dyYW1saXN0aW5nPgorQVVESVQ6IFNFU1NJT04s MSwxLERETCxDUkVBVEUgVEFCTEUsVEFCTEUscHVibGljLmFjY291bnQsY3JlYXRlIHRhYmxl IGFjY291bnQKKygKKyAgICBpZCBpbnQsCisgICAgbmFtZSB0ZXh0LAorICAgIHBhc3N3b3Jk IHRleHQsCisgICAgZGVzY3JpcHRpb24gdGV4dAorKTsKK0FVRElUOiBTRVNTSU9OLDIsMSxS RUFELFNFTEVDVCwsLHNlbGVjdCAqCisgICAgZnJvbSBhY2NvdW50CisgICAgICA8L3Byb2dy YW1saXN0aW5nPgorICAgIDwvc2VjdDM+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyIGlkPSJw Z2F1ZGl0LW9iamVjdC1hdWRpdC1sb2dnaW5nIj4KKyAgICA8dGl0bGU+T2JqZWN0IEF1ZGl0 aW5nPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgT2JqZWN0IGF1ZGl0IGxvZ2dpbmcg bG9ncyBzdGF0ZW1lbnRzIHRoYXQgYWZmZWN0IGEgcGFydGljdWxhciByZWxhdGlvbi4KKyAg ICAgIE9ubHkgPGxpdGVyYWw+U0VMRUNUPC8+LCA8bGl0ZXJhbD5JTlNFUlQ8Lz4sIDxsaXRl cmFsPlVQREFURTwvPiBhbmQKKyAgICAgIDxsaXRlcmFsPkRFTEVURTwvPiBjb21tYW5kcyBh cmUgc3VwcG9ydGVkLiAgPGxpdGVyYWw+VFJVTkNBVEU8Lz4gaXMgbm90CisgICAgICBpbmNs dWRlZCBiZWNhdXNlIHRoZXJlIGlzIG5vIHNwZWNpZmljIHByaXZpbGVnZSBmb3IgaXQuCisg ICAgPC9wYXJhPgorCisgICAgPHNlY3QzPgorICAgICAgPHRpdGxlPkNvbmZpZ3VyYXRpb248 L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgT2JqZWN0LWxldmVsIGF1ZGl0IGxv Z2dpbmcgaXMgaW1wbGVtZW50ZWQgdmlhIHRoZSByb2xlcyBzeXN0ZW0uICBUaGUKKyAgICAg ICAgPHhyZWYgbGlua2VuZD0iZ3VjLXBnYXVkaXQtcm9sZSI+IHNldHRpbmcgZGVmaW5lcyB0 aGUgcm9sZSB0aGF0CisgICAgICAgIHdpbGwgYmUgdXNlZCBmb3IgYXVkaXQgbG9nZ2luZy4g IEEgcmVsYXRpb24gKDxsaXRlcmFsPlRBQkxFPC8+LAorICAgICAgICA8bGl0ZXJhbD5WSUVX PC8+LCBldGMuKSB3aWxsIGJlIGF1ZGl0IGxvZ2dlZCB3aGVuIHRoZSBhdWRpdCByb2xlIGhh cworICAgICAgICBwZXJtaXNzaW9ucyBmb3IgdGhlIGNvbW1hbmQgZXhlY3V0ZWQgb3IgaW5o ZXJpdHMgdGhlIHBlcm1pc3Npb25zIGZyb20KKyAgICAgICAgYW5vdGhlciByb2xlLiAgVGhp cyBhbGxvd3MgeW91IHRvIGVmZmVjdGl2ZWx5IGhhdmUgbXVsdGlwbGUgYXVkaXQgcm9sZXMK KyAgICAgICAgZXZlbiB0aG91Z2ggdGhlcmUgaXMgYSBzaW5nbGUgbWFzdGVyIHJvbGUgaW4g YW55IGNvbnRleHQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgU2V0 IDx4cmVmIGxpbmtlbmQ9Imd1Yy1wZ2F1ZGl0LXJvbGUiPiB0byA8bGl0ZXJhbD5hdWRpdG9y PC8+IGFuZAorICAgICAgZ3JhbnQgPGxpdGVyYWw+U0VMRUNUPC8+IGFuZCA8bGl0ZXJhbD5E RUxFVEU8Lz4gcHJpdmlsZWdlcyBvbiB0aGUKKyAgICAgIDxsaXRlcmFsPmFjY291bnQ8Lz4g dGFibGUuICBBbnkgPGxpdGVyYWw+U0VMRUNUPC8+IG9yCisgICAgICA8bGl0ZXJhbD5ERUxF VEU8Lz4gc3RhdGVtZW50cyBvbiA8bGl0ZXJhbD5hY2NvdW50PC8+IHdpbGwgbm93IGJlCisg ICAgICBsb2dnZWQ6CisgICAgICA8L3BhcmE+CisgICAgICAKKyAgICAgIDxwcm9ncmFtbGlz dGluZz4KK3NldCBwZ19hdWRpdC5yb2xlID0gJ2F1ZGl0b3InOworCitncmFudCBzZWxlY3Qs IGRlbGV0ZQorICAgb24gcHVibGljLmFjY291bnQKKyAgIHRvIGF1ZGl0b3I7CisgICAgICA8 L3Byb2dyYW1saXN0aW5nPgorICAgIDwvc2VjdDM+CisKKyAgICA8c2VjdDM+CisgICAgICA8 dGl0bGU+RXhhbXBsZTwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGlz IGV4YW1wbGUgb2JqZWN0IGF1ZGl0IGxvZ2dpbmcgaXMgdXNlZCB0byBpbGx1c3RyYXRlIGhv dyBhCisgICAgICAgIGdyYW51bGFyIGFwcHJvYWNoIG1heSBiZSB0YWtlbiB0b3dhcmRzIGxv Z2dpbmcgb2YgPGxpdGVyYWw+U0VMRUNUPC8+CisgICAgICAgIGFuZCA8bGl0ZXJhbD5ETUw8 Lz4gc3RhdGVtZW50cy4gIE5vdGUgdGhhdCBsb2dnaW5nIG9uIHRoZQorICAgICAgICA8bGl0 ZXJhbD5hY2NvdW50PC8+IHRhYmxlIGlzIGNvbnRyb2xsZWQgYnkgY29sdW1uLWxldmVsIHBl cm1pc3Npb25zLAorICAgICAgICB3aGlsZSBsb2dnaW5nIG9uIDxsaXRlcmFsPmFjY291bnRf cm9sZV9tYXA8Lz4gaXMgdGFibGUtbGV2ZWwuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxw YXJhPgorICAgICAgICBTUUw6CisgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHByb2dyYW1s aXN0aW5nPgorc2V0IHBnX2F1ZGl0LnJvbGUgPSAnYXVkaXRvcic7CisKK2NyZWF0ZSB0YWJs ZSBhY2NvdW50CisoCisgICAgaWQgaW50LAorICAgIG5hbWUgdGV4dCwKKyAgICBwYXNzd29y ZCB0ZXh0LAorICAgIGRlc2NyaXB0aW9uIHRleHQKKyk7CisKK2dyYW50IHNlbGVjdCAocGFz c3dvcmQpCisgICBvbiBwdWJsaWMuYWNjb3VudAorICAgdG8gYXVkaXRvcjsKKworc2VsZWN0 IGlkLCBuYW1lCisgIGZyb20gYWNjb3VudDsKKworc2VsZWN0IHBhc3N3b3JkCisgIGZyb20g YWNjb3VudDsKKworZ3JhbnQgdXBkYXRlIChuYW1lLCBwYXNzd29yZCkKKyAgIG9uIHB1Ymxp Yy5hY2NvdW50CisgICB0byBhdWRpdG9yOworCit1cGRhdGUgYWNjb3VudAorICAgc2V0IGRl c2NyaXB0aW9uID0gJ3lhZGEsIHlhZGEnOworCit1cGRhdGUgYWNjb3VudAorICAgc2V0IHBh c3N3b3JkID0gJ0hBU0gyJzsKKworY3JlYXRlIHRhYmxlIGFjY291bnRfcm9sZV9tYXAKKygK KyAgICBhY2NvdW50X2lkIGludCwKKyAgICByb2xlX2lkIGludAorKTsKKworZ3JhbnQgc2Vs ZWN0CisgICBvbiBwdWJsaWMuYWNjb3VudF9yb2xlX21hcAorICAgdG8gYXVkaXRvcjsKKwor c2VsZWN0IGFjY291bnQucGFzc3dvcmQsCisgICAgICAgYWNjb3VudF9yb2xlX21hcC5yb2xl X2lkCisgIGZyb20gYWNjb3VudAorICAgICAgIGlubmVyIGpvaW4gYWNjb3VudF9yb2xlX21h cAorICAgICAgICAgICAgb24gYWNjb3VudC5pZCA9IGFjY291bnRfcm9sZV9tYXAuYWNjb3Vu dF9pZAorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorCisgICAgICA8cGFyYT4KKyAgICAg ICAgTG9nIE91dHB1dDoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHByb2dyYW1saXN0aW5n PgorQVVESVQ6IE9CSkVDVCwxLDEsUkVBRCxTRUxFQ1QsVEFCTEUscHVibGljLmFjY291bnQs c2VsZWN0IHBhc3N3b3JkCisgIGZyb20gYWNjb3VudAorQVVESVQ6IE9CSkVDVCwyLDEsV1JJ VEUsVVBEQVRFLFRBQkxFLHB1YmxpYy5hY2NvdW50LHVwZGF0ZSBhY2NvdW50CisgICBzZXQg cGFzc3dvcmQgPSAnSEFTSDInCitBVURJVDogT0JKRUNULDMsMSxSRUFELFNFTEVDVCxUQUJM RSxwdWJsaWMuYWNjb3VudCxzZWxlY3QgYWNjb3VudC5wYXNzd29yZCwKKyAgICAgICBhY2Nv dW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgZnJvbSBhY2NvdW50CisgICAgICAgaW5uZXIgam9p biBhY2NvdW50X3JvbGVfbWFwCisgICAgICAgICAgICBvbiBhY2NvdW50LmlkID0gYWNjb3Vu dF9yb2xlX21hcC5hY2NvdW50X2lkCitBVURJVDogT0JKRUNULDMsMSxSRUFELFNFTEVDVCxU QUJMRSxwdWJsaWMuYWNjb3VudF9yb2xlX21hcCxzZWxlY3QgYWNjb3VudC5wYXNzd29yZCwK KyAgICAgICBhY2NvdW50X3JvbGVfbWFwLnJvbGVfaWQKKyAgZnJvbSBhY2NvdW50CisgICAg ICAgaW5uZXIgam9pbiBhY2NvdW50X3JvbGVfbWFwCisgICAgICAgICAgICBvbiBhY2NvdW50 LmlkID0gYWNjb3VudF9yb2xlX21hcC5hY2NvdW50X2lkCisgICAgICA8L3Byb2dyYW1saXN0 aW5nPgorICAgIDwvc2VjdDM+CisgIDwvc2VjdDI+CisKKyAgPHNlY3QyPgorICAgIDx0aXRs ZT5Gb3JtYXQ8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBBdWRpdCBlbnRyaWVzIGFy ZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBsb2dnaW5nIGZhY2lsaXR5IGFuZCBjb250YWlu CisgICAgICB0aGUgZm9sbG93aW5nIGNvbHVtbnMgaW4gY29tbWEtc2VwYXJhdGVkIGZvcm1h dDoKKworICAgICAgPG5vdGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE91dHB1dCBp cyBjb21wbGlhbnQgQ1NWIGZvcm1hdCBvbmx5IGlmIHRoZSBsb2cgbGluZSBwcmVmaXggcG9y dGlvbgorICAgICAgICAgIG9mIGVhY2ggbG9nIGVudHJ5IGlzIHJlbW92ZWQuCisgICAgICAg IDwvcGFyYT4KKyAgICAgIDwvbm90ZT4KKworICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgPGxpdGVyYWw+ QVVESVRfVFlQRTwvPiAtIDxsaXRlcmFsPlNFU1NJT048Lz4gb3IKKyAgICAgICAgICAgIDxs aXRlcmFsPk9CSkVDVDwvPi4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0 ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg IDxsaXRlcmFsPlNUQVRFTUVOVF9JRDwvPiAtIFVuaXF1ZSBzdGF0ZW1lbnQgSUQgZm9yIHRo aXMgc2Vzc2lvbi4KKyAgICAgICAgICAgIEVhY2ggc3RhdGVtZW50IElEIHJlcHJlc2VudHMg YSBiYWNrZW5kIGNhbGwuICBTdGF0ZW1lbnQgSURzIGFyZQorICAgICAgICAgICAgc2VxdWVu dGFsIGV2ZW4gaWYgc29tZSBzdGF0ZW1lbnRzIGFyZSBub3QgbG9nZ2VkLiAgVGhlcmUgbWF5 IGJlCisgICAgICAgICAgICBtdWx0aXBsZSBlbnRyaWVzIGZvciBhIHN0YXRlbWVudCBJRCB3 aGVuIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24KKyAgICAgICAgICAgIGlzIGxvZ2dlZC4KKyAg ICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPlNVQlNUQVRFTUVO VF9JRDwvPiAtIFNlcXVlbnRpYWwgSUQgZm9yIGVhY2gKKyAgICAgICAgICAgIHN1YnN0YXRl bWVudCB3aXRoaW4gdGhlIG1haW4gc3RhdGVtZW50LiAgRm9yIGV4YW1wbGUsIGNhbGxpbmcK KyAgICAgICAgICAgIGEgZnVuY3Rpb24gZnJvbSBhIHF1ZXJ5LiAgU3Vic3RhdGVtZW50IElE cyBhcmUgY29udGludW91cworICAgICAgICAgICAgZXZlbiBpZiBzb21lIHN1YnN0YXRlbWVu dHMgYXJlIG5vdCBsb2dnZWQuICBUaGVyZSBtYXkgYmUgbXVsdGlwbGUKKyAgICAgICAgICAg IGVudHJpZXMgZm9yIGEgc3Vic3RhdGVtZW50IElEIHdoZW4gbW9yZSB0aGFuIG9uZSByZWxh dGlvbiBpcyBsb2dnZWQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVt PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8 bGl0ZXJhbD5DTEFTUzwvPiAtIGUuZy4gKDxsaXRlcmFsPlJFQUQ8Lz4sCisgICAgICAgICAg ICA8bGl0ZXJhbD5ST0xFPC8+KSAoc2VlIDx4cmVmIGxpbmtlbmQ9Imd1Yy1wZ2F1ZGl0LWxv ZyI+KS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPkNP TU1BTkQ8Lz4gLSBlLmcuIDxsaXRlcmFsPkFMVEVSIFRBQkxFPC8+LAorICAgICAgICAgICAg PGxpdGVyYWw+U0VMRUNUPC8+LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAg ICAgPGxpdGVyYWw+T0JKRUNUX1RZUEU8Lz4gLSA8bGl0ZXJhbD5UQUJMRTwvPiwKKyAgICAg ICAgICAgIDxsaXRlcmFsPklOREVYPC8+LCA8bGl0ZXJhbD5WSUVXPC8+LCBldGMuCisgICAg ICAgICAgICBBdmFpbGFibGUgZm9yIDxsaXRlcmFsPlNFTEVDVDwvPiwgPGxpdGVyYWw+RE1M PC8+IGFuZCBtb3N0CisgICAgICAgICAgICA8bGl0ZXJhbD5EREw8Lz4gc3RhdGVtZW50cy4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIDxsaXRlcmFsPk9CSkVDVF9O QU1FPC8+IC0gVGhlIGZ1bGx5LXF1YWxpZmllZCBvYmplY3QgbmFtZQorICAgICAgICAgICAg KGUuZy4gcHVibGljLmFjY291bnQpLiAgQXZhaWxhYmxlIGZvciA8bGl0ZXJhbD5TRUxFQ1Q8 Lz4sCisgICAgICAgICAgICA8bGl0ZXJhbD5ETUw8Lz4gYW5kIG1vc3QgPGxpdGVyYWw+RERM PC8+IHN0YXRlbWVudHMuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVt PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8 bGl0ZXJhbD5TVEFURU1FTlQ8Lz4gLSBTdGF0ZW1lbnQgZXhlY3V0ZWQgb24gdGhlIGJhY2tl bmQuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9p dGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBVc2UgPHhy ZWYgbGlua2VuZD0iZ3VjLWxvZy1saW5lLXByZWZpeCI+IHRvIGFkZCBhbnkgb3RoZXIgZmll bGRzIHRoYXQKKyAgICAgIGFyZSBuZWVkZWQgdG8gc2F0aXNmeSB5b3VyIGF1ZGl0IGxvZyBy ZXF1aXJlbWVudHMuICBBIHR5cGljYWwgbG9nIGxpbmUKKyAgICAgIHByZWZpeCBtaWdodCBi ZSA8bGl0ZXJhbD4nJW0gJXUgJWQ6ICc8Lz4gd2hpY2ggd291bGQgcHJvdmlkZSB0aGUgZGF0 ZS90aW1lLAorICAgICAgdXNlciBuYW1lLCBhbmQgZGF0YWJhc2UgbmFtZSBmb3IgZWFjaCBh dWRpdCBsb2cuCisgICAgPC9wYXJhPgorICA8L3NlY3QyPgorCisgIDxzZWN0Mj4KKyAgICA8 dGl0bGU+Q2F2ZWF0czwvdGl0bGU+CisgICAgCisgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgT2JqZWN0IHJlbmFtZXMg YXJlIGxvZ2dlZCB1bmRlciB0aGUgbmFtZSB0aGV5IHdlcmUgcmVuYW1lZCB0by4KKyAgICAg ICAgICBGb3IgZXhhbXBsZSwgcmVuYW1pbmcgYSB0YWJsZSB3aWxsIHByb2R1Y2UgdGhlIGZv bGxvd2luZyByZXN1bHQ6CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cHJvZ3JhbWxp c3Rpbmc+CitBTFRFUiBUQUJMRSB0ZXN0IFJFTkFNRSBUTyB0ZXN0MjsKKyAgICAgICAgICAK K0FVRElUOiBTRVNTSU9OLDM2LDEsRERMLEFMVEVSIFRBQkxFLFRBQkxFLHB1YmxpYy50ZXN0 MixBTFRFUiBUQUJMRSB0ZXN0IFJFTkFNRSBUTyB0ZXN0MgorICAgICAgICA8L3Byb2dyYW1s aXN0aW5nPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgIAorICAgICAgPGxpc3RpdGVtPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgY29t bWFuZCBsb2dnZWQgbW9yZSB0aGFuIG9uY2UuICBGb3IgZXhhbXBsZSwKKyAgICAgICAgICB3 aGVuIGEgdGFibGUgaXMgY3JlYXRlZCB3aXRoIGEgcHJpbWFyeSBrZXkgc3BlY2lmaWVkIGF0 IGNyZWF0aW9uIHRpbWUKKyAgICAgICAgICB0aGUgaW5kZXggZm9yIHRoZSBwcmltYXJ5IGtl eSB3aWxsIGJlIGxvZ2dlZCBpbmRlcGVuZGVudGx5IGFuZCBhbm90aGVyCisgICAgICAgICAg YXVkaXQgbG9nIHdpbGwgYmUgbWFkZSBmb3IgdGhlIGluZGV4IHVuZGVyIHRoZSBjcmVhdGUg ZW50cnkuICBUaGUKKyAgICAgICAgICBtdWx0aXBsZSBlbnRyaWVzIHdpbGwgaG93ZXZlciBi ZSBjb250YWluZWQgd2l0aGluIG9uZSBzdGF0ZW1lbnQgSUQuCisgICAgICAgIDwvcGFyYT4K KyAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+ CisgICAgICAgICAgQXV0b3ZhY3V1bSBhbmQgQXV0b2FuYWx5emUgYXJlIG5vdCBsb2dnZWQs IG5vciBhcmUgdGhleSBpbnRlbmRlZCB0byBiZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAg PC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0Mj4KKworICA8c2Vj dDI+CisgICAgPHRpdGxlPkF1dGhvcnM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBB Ymhpaml0IE1lbm9uLVNlbiA8ZW1haWw+YW1zQDJuZFF1YWRyYW50LmNvbTwvZW1haWw+LCBJ YW4gQmFyd2ljayA8ZW1haWw+aWFuQDJuZFF1YWRyYW50LmNvbTwvZW1haWw+LCBhbmQgRGF2 aWQgU3RlZWxlIDxlbWFpbD5kYXZpZEBwZ21hc3RlcnMubmV0PC9lbWFpbD4uCisgICAgPC9w YXJhPgorICA8L3NlY3QyPgorPC9zZWN0MT4K --------------050700060907060606010001-- --oM4rWVeKeQ17ULCebTkfPqPELBeL0CjUu Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJVLqEhAAoJEIA2uIJQ5SFAgaAP/isvjf8sxVVyUnvBVX/UmY+x C0CCHdJvNX4trnLvXelqaxv/C12jZIelXFrox9SUJ7gNvsnYYcQ8c0ctLH30nL+s m5whTIm2a4FONIRSDqr682in5ms+F7hJbTvQy4qFBZqvEGwOw9jMdOk94D9DwpBN XYI9HvtjASaQnEQraq+91kwca2tEC3afgJdq7EdKjw4o/wBq4QCXgFlOvvJ3sSFk UNylCQ55bgSsh+0M8Zk62CdtuAmjfKw7S3xooUfscEJdJPsT16RO2eUslrQIsE2q pZ/03/+7h6v+EN9OsFD1kiT6MhAZmgkZRBoRyeJiweMIeh7BIRzIEdjRIK+sfdc8 Eb381/Xbv62DQUhg/OJcRWckCuh4QJNF6Ci1kthT8s1zTZrQug16okEzgM4ZtCzl HRaegeTJXbfyxfiNOu7VVa4glBovJUbhBv3lkLtVkZC0NqJRzMjq2OMX1ym2UuAQ QiBahEfFmtDj4vtF+9Nz9Udppfpjiyeeq0eUMTJpHLLpR4jEYCl0vNp3fNrFbxKW z8qLHuoB0Q+ZYXOHrjwc+M93c4/D2P3bAeMkO6lb84HC4dgRdkbYqUOMsZUBAOm3 xHwBfldQRWOwi56U4IitY0sywOUDFcRq4VqDqQckgkBiPWXl5QcqW22MFU0VUH8F 6OXs/pljLU+pxV5KLPnl =jldF -----END PGP SIGNATURE----- --oM4rWVeKeQ17ULCebTkfPqPELBeL0CjUu--