From mboxrd@z Thu Jan 1 00:00:00 1970 From: bear Subject: Re: [KVM-AUTOTEST][PATCH] timedrift support Date: Sat, 16 May 2009 00:30:48 +0800 Message-ID: <4A0D98B8.2070705@redhat.com> References: <4A010BCD.8060307@redhat.com> <20090506130247.GA5048@amt.cnet> <4A08008E.8060105@redhat.com> <1242046789.2930.8.camel@localhost.localdomain> <4A096C28.1060900@redhat.com> <4A09748C.6040909@redhat.com> <1242239695.2620.18.camel@localhost.localdomain> Reply-To: byang@redhat.com Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040108000104010000040703" Cc: Marcelo Tosatti , uril@redhat.com, kvm@vger.kernel.org To: Lucas Meneghel Rodrigues Return-path: Received: from mx2.redhat.com ([66.187.237.31]:39091 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756411AbZEOQa7 (ORCPT ); Fri, 15 May 2009 12:30:59 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n4FGV0dJ003636 for ; Fri, 15 May 2009 12:31:00 -0400 In-Reply-To: <1242239695.2620.18.camel@localhost.localdomain> Sender: kvm-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------040108000104010000040703 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Good morning you all. :) Lucas: Very appreciated your help on try...except block implementation. I am finally understand your means when I read the mail. :( I modified the timedrift case in several place again. 1. add more comments in script. 2. functional the snippnet of script which get clock resource from guest and host. 3. using vm.get_command_status replace the sendline API when complie the stress program in guest area. If there is something need to be done by me for the script. feel free just kick me. Happy weekend. --------------040108000104010000040703 Content-Type: text/plain; name="timedrift-20090515-2.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="timedrift-20090515-2.patch" ZGlmZiAtdXJOIGt2bV9ydW50ZXN0XzIuYmFrL2dlbmxvYWQvTWFrZWZpbGUga3ZtX3J1bnRl c3RfMi9nZW5sb2FkL01ha2VmaWxlCi0tLSBrdm1fcnVudGVzdF8yLmJhay9nZW5sb2FkL01h a2VmaWxlCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKyBrdm1fcnVu dGVzdF8yL2dlbmxvYWQvTWFrZWZpbGUJMjAwOC0wOS0yOSAxMjoyMjoxNC4wMDAwMDAwMDAg LTA0MDAKQEAgLTAsMCArMSwxNCBAQAorQ0ZMQUdTKz0gLURQQUNLQUdFPVwic3RyZXNzXCIg LURWRVJTSU9OPVwiMC4xN3ByZTExXCIgCisKK0xETElCUys9IC1sbQorCitTUkNTPSQod2ls ZGNhcmQgKi5jKQorVEFSR0VUUz0kKHBhdHN1YnN0ICUuYywlLCQoU1JDUykpCisKK2FsbDog JChUQVJHRVRTKQorCitpbnN0YWxsOgorCUBsbiAtZiAkKFRBUkdFVFMpIC4uLy4uL3Rlc3Rj YXNlcy9iaW4vZ2VubG9hZAorCitjbGVhbjoKKwlybSAtZnIgJChUQVJHRVRTKQpkaWZmIC11 ck4ga3ZtX3J1bnRlc3RfMi5iYWsvZ2VubG9hZC9SRUFETUUga3ZtX3J1bnRlc3RfMi9nZW5s b2FkL1JFQURNRQotLS0ga3ZtX3J1bnRlc3RfMi5iYWsvZ2VubG9hZC9SRUFETUUJMTk2OS0x Mi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrIGt2bV9ydW50ZXN0XzIvZ2VubG9h ZC9SRUFETUUJMjAwMi0xMi0xMyAxNjozNDoxMy4wMDAwMDAwMDAgLTA1MDAKQEAgLTAsMCAr MSw3MiBAQAorVVNBR0UKKworU2VlIHRoZSBwcm9ncmFtJ3MgdXNhZ2Ugc3RhdGVtZW50IGJ5 IGludm9raW5nIHdpdGggLS1oZWxwLgorCitOT1RFUworCitUaGlzIHByb2dyYW0gd29ya3Mg cmVhbGx5IHdlbGwgZm9yIG1lLCBidXQgaXQgbWlnaHQgbm90IGhhdmUgc29tZSBvZiB0aGUK K2ZlYXR1cmVzIHRoYXQgeW91IHdhbnQuICBJZiB5b3Ugd291bGQgbGlrZSwgcGxlYXNlIGV4 dGVuZCB0aGUgY29kZSBhbmQgc2VuZAorbWUgdGhlIHBhdGNoWzFdLiAgRW5qb3kgdGhlIHBy b2dyYW0gOi0pCisKK1BsZWFzZSB1c2UgdGhlIGNvbnRleHQgZGlmZiBmb3JtYXQuICBUaGF0 IGlzOiBzYXZlIHRoZSBvcmlnaW5hbCBwcm9ncmFtCithcyBzdHJlc3MuYy5vcmlnLCB0aGVu IG1ha2UgYW5kIHRlc3QgeW91ciBkZXNpcmVkIGNoYW5nZXMgdG8gc3RyZXNzLmMsIHRoZW4K K3J1biAnZGlmZiAtdSBzdHJlc3MuYy5vcmlnIHN0cmVzcy5jJyB0byBwcm9kdWNlIGEgY29u dGV4dCBwYXRjaC4gIFRoYW5rcy4KKworQW1vcyBXYXRlcmxhbmQgPGFwd0Byb3NzYnkubWV0 ci5vdS5lZHU+CitOb3JtYW4sIE9rbGFob21hCisyNyBOb3YgMjAwMQorCitFWEFNUExFUwor W2V4YW1wbGVzXQorCitUaGUgc2ltcGxlIGNhc2UgaXMgdGhhdCB5b3UganVzdCB3YW50IHRv IGJyaW5nIHRoZSBzeXN0ZW0gbG9hZCBhdmVyYWdlIHVwIHRvCithbiBhcmJpdHJhcnkgdmFs dWUuICBUaGUgZm9sbG93aW5nIGZvcmtzIDEzIHByb2Nlc3NlcywgZWFjaCBvZiB3aGljaCBz cGlucworaW4gYSB0aWdodCBsb29wIGNhbGN1bGF0aW5nIHRoZSBzcXJ0KCkgb2YgYSByYW5k b20gbnVtYmVyIGFjcXVpcmVkIHdpdGgKK3JhbmQoKS4KKworICAlIHN0cmVzcyAtYyAxMwor CitMb25nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCwgYXMgd2VsbCBhcyBpcyBtYWtpbmcgdGhl IG91dHB1dCBsZXNzIHZlcmJvc2UuCitUaGUgZm9sbG93aW5nIGZvcmtzIDEwMjQgcHJvY2Vz c2VzLCBhbmQgb25seSByZXBvcnRzIGVycm9yIG1lc3NhZ2VzIGlmIGFueS4KKworICAlIHN0 cmVzcyAtLXF1aWV0IC0taG9nY3B1IDFrCisKK1RvIHNlZSBob3cgeW91ciBzeXN0ZW0gcGVy Zm9ybXMgd2hlbiBpdCBpcyBJL08gYm91bmQsIHVzZSB0aGUgLWkgc3dpdGNoLgorVGhlIGZv bGxvd2luZyBmb3JrcyA0IHByb2Nlc3NlcywgZWFjaCBvZiB3aGljaCBzcGlucyBpbiBhIHRp Z2h0IGxvb3AgY2FsbGluZworc3luYygpLCB3aGljaCBpcyBhIHN5c3RlbSBjYWxsIHRoYXQg Zmx1c2hlcyBtZW1vcnkgYnVmZmVycyB0byBkaXNrLgorCisgICUgc3RyZXNzIC1pIDQKKwor TXVsdGlwbGUgaG9ncyBtYXkgYmUgY29tYmluZWQgb24gdGhlIHNhbWUgY29tbWFuZCBsaW5l LiAgVGhlIGZvbGxvd2luZyBkb2VzCitldmVyeXRoaW5nIHRoZSBwcmVjZWRpbmcgZXhhbXBs ZXMgZGlkIGluIG9uZSBjb21tYW5kLCBidXQgYWxzbyB0dXJucyB1cCB0aGUKK3ZlcmJvc2l0 eSBsZXZlbCBhcyB3ZWxsIGFzIHNob3dpbmcgaG93IHRvIGNhdXNlIHRoZSBjb21tYW5kIHRv CitzZWxmLXRlcm1pbmF0ZSBhZnRlciAxIG1pbnV0ZS4KKworICAlIHN0cmVzcyAtYyAxMyAt aSA0IC0tdmVyYm9zZSAtLXRpbWVvdXQgMW0KKworQW4gdmFsdWUgb2YgMCBub3JtYWxseSBk ZW5vdGVzIGluZmluaXR5LiAgVGhlIGZvbGxvd2luZyBpcyBob3cgdG8gZG8gYSBmb3JrCiti b21iIChiZSBjYXJlZnVsIHdpdGggdGhpcykuCisKKyAgJSBzdHJlc3MgLWMgMAorCitGb3Ig dGhlIC1tIGFuZCAtZCBvcHRpb25zLCBhIHZhbHVlIG9mIDAgbWVhbnMgdG8gcmVkbyB0aGVp ciBvcGVyYXRpb24gYW4KK2luZmluaXRlIG51bWJlciBvZiB0aW1lcy4gIFRvIGFsbG9jYXRl IGFuZCBmcmVlIDEyOE1CIGluIGEgcmVkbyBsb29wIHVzZSB0aGUKK2ZvbGxvd2luZyBjb21t YW5kLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciAiYm91bmNpbmciIGFnYWluc3QgdGhlIHN5 c3RlbSBSQU0KK2NlaWxpbmcuCisKKyAgJSBzdHJlc3MgLW0gMCAtLWhvZ3ZtLWJ5dGVzIDEy OE0KKworRm9yIHRoZSAtbSBhbmQgLWQgb3B0aW9ucywgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBu IG1lYW5zIHRvIHJlZG8gdGhlIG9wZXJhdGlvbgorYWJzKG4pIHRpbWVzLiAgSGVyZSBpcyBu b3cgdG8gYWxsb2NhdGUgYW5kIGZyZWUgNU1CIHRocmVlIHRpbWVzIGluIGEgcm93LgorCisg ICUgc3RyZXNzIC1tIC0zIC0taG9ndm0tYnl0ZXMgNW0KKworWW91IGNhbiB3cml0ZSBhIGZp bGUgb2YgYXJiaXRyYXJ5IGxlbmd0aCB0byBkaXNrLiAgVGhlIGZpbGUgaXMgY3JlYXRlZCB3 aXRoCitta3N0ZW1wKCkgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGUgZGVmYXVsdCBp cyB0byB1bmxpbmsgaXQsIGJ1dAordW5saW5raW5nIGNhbiBiZSBvdmVycmlkZGVuIHdpdGgg dGhlIC0taG9naGRkLW5vY2xlYW4gZmxhZy4KKworICAlIHN0cmVzcyAtZCAxIC0taG9naGRk LW5vY2xlYW4gLS1ob2doZGQtYnl0ZXMgMTMKKworTGFyZ2UgZmlsZSBzdXBwb3J0IGlzIGVu YWJsZWQuCisKKyAgJSBzdHJlc3MgLWQgMSAtLWhvZ2hkZC1ub2NsZWFuIC0taG9naGRkLWJ5 dGVzIDNHCmRpZmYgLXVyTiBrdm1fcnVudGVzdF8yLmJhay9nZW5sb2FkL3N0cmVzcy5jIGt2 bV9ydW50ZXN0XzIvZ2VubG9hZC9zdHJlc3MuYwotLS0ga3ZtX3J1bnRlc3RfMi5iYWsvZ2Vu bG9hZC9zdHJlc3MuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysg a3ZtX3J1bnRlc3RfMi9nZW5sb2FkL3N0cmVzcy5jCTIwMDctMDctMjYgMDg6NDA6MTcuMDAw MDAwMDAwIC0wNDAwCkBAIC0wLDAgKzEsOTgzIEBACisvKiBBIHByb2dyYW0gdG8gcHV0IHN0 cmVzcyBvbiBhIFBPU0lYIHN5c3RlbSAoc3RyZXNzKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMp IDIwMDEsIDIwMDIgQW1vcyBXYXRlcmxhbmQgPGF3YXRlcmxAeWFob28uY29tPgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s IE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNs dWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPG1hdGguaD4K KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0 cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNs dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCisvKiBCeSBkZWZhdWx0 LCBwcmludCBhbGwgbWVzc2FnZXMgb2Ygc2V2ZXJpdHkgaW5mbyBhbmQgYWJvdmUuICAqLwor c3RhdGljIGludCBnbG9iYWxfZGVidWcgPSAyOworCisvKiBCeSBkZWZhdWx0LCBqdXN0IHBy aW50IHdhcm5pbmcgZm9yIG5vbi1jcml0aWNhbCBlcnJvcnMuICAqLworc3RhdGljIGludCBn bG9iYWxfaWdub3JlID0gMTsKKworLyogQnkgZGVmYXVsdCwgcmV0cnkgb24gbm9uLWNyaXRp Y2FsIGVycm9ycyBldmVyeSA1MG1zLiAgKi8KK3N0YXRpYyBpbnQgZ2xvYmFsX3JldHJ5ID0g NTAwMDA7CisKKy8qIEJ5IGRlZmF1bHQsIHVzZSB0aGlzIGFzIGJhY2tvZmYgY29lZmZpY2ll bnQgZm9yIGdvb2QgZm9yayB0aHJvdWdocHV0LiAgKi8KK3N0YXRpYyBpbnQgZ2xvYmFsX2Jh Y2tvZmYgPSAzMDAwOworCisvKiBCeSBkZWZhdWx0LCBkbyBub3QgdGltZW91dC4gICovCitz dGF0aWMgaW50IGdsb2JhbF90aW1lb3V0ID0gMDsKKworLyogTmFtZSBvZiB0aGlzIHByb2dy YW0gKi8KK3N0YXRpYyBjaGFyICpnbG9iYWxfcHJvZ25hbWUgPSBQQUNLQUdFOworCisvKiBC eSBkZWZhdWx0LCBkbyBub3QgaGFuZyBhZnRlciBhbGxvY2F0aW5nIG1lbW9yeS4gICovCitz dGF0aWMgaW50IGdsb2JhbF92bWhhbmcgPSAwOworCisvKiBJbXBsZW1lbnRpb24gb2YgcnVu dGltZS1zZWxlY3RhYmxlIHNldmVyaXR5IG1lc3NhZ2UgcHJpbnRpbmcuICAqLworI2RlZmlu ZSBkYmcgaWYgKGdsb2JhbF9kZWJ1ZyA+PSAzKSBcCisgICAgICAgICAgICBmcHJpbnRmIChz dGRvdXQsICIlczogZGVidWc6ICglZCkgIiwgZ2xvYmFsX3Byb2duYW1lLCBfX0xJTkVfXyks IFwKKyAgICAgICAgICAgIGZwcmludGYKKyNkZWZpbmUgb3V0IGlmIChnbG9iYWxfZGVidWcg Pj0gMikgXAorICAgICAgICAgICAgZnByaW50ZiAoc3Rkb3V0LCAiJXM6IGluZm86ICIsIGds b2JhbF9wcm9nbmFtZSksIFwKKyAgICAgICAgICAgIGZwcmludGYKKyNkZWZpbmUgd3JuIGlm IChnbG9iYWxfZGVidWcgPj0gMSkgXAorICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAi JXM6IHdhcm46ICglZCkgIiwgZ2xvYmFsX3Byb2duYW1lLCBfX0xJTkVfXyksIFwKKyAgICAg ICAgICAgIGZwcmludGYKKyNkZWZpbmUgZXJyIGlmIChnbG9iYWxfZGVidWcgPj0gMCkgXAor ICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IGVycm9yOiAoJWQpICIsIGdsb2Jh bF9wcm9nbmFtZSwgX19MSU5FX18pLCBcCisgICAgICAgICAgICBmcHJpbnRmCisKKy8qIElt cGxlbWVudGF0aW9uIG9mIGNoZWNrIGZvciBvcHRpb24gYXJndW1lbnQgY29ycmVjdG5lc3Mu ICAqLworI2RlZmluZSBhc3NlcnRfYXJnKEEpIFwKKyAgICAgICAgICBpZiAoKytpID09IGFy Z2MgfHwgKChhcmcgPSBhcmd2W2ldKVswXSA9PSAnLScgJiYgXAorICAgICAgICAgICAgICAh aXNkaWdpdCAoKGludClhcmdbMV0pICkpIFwKKyAgICAgICAgICAgIHsgXAorICAgICAgICAg ICAgICBlcnIgKHN0ZGVyciwgIm1pc3NpbmcgYXJndW1lbnQgdG8gb3B0aW9uICclcydcbiIs IEEpOyBcCisgICAgICAgICAgICAgIGV4aXQgKDEpOyBcCisgICAgICAgICAgICB9CisKKy8q IFByb3RvdHlwZXMgZm9yIHV0aWxpdHkgZnVuY3Rpb25zLiAgKi8KK2ludCB1c2FnZSAoaW50 IHN0YXR1cyk7CitpbnQgdmVyc2lvbiAoaW50IHN0YXR1cyk7Citsb25nIGxvbmcgYXRvbGxf cyAoY29uc3QgY2hhciAqbnB0cik7Citsb25nIGxvbmcgYXRvbGxfYiAoY29uc3QgY2hhciAq bnB0cik7CisKKy8qIFByb3RvdHlwZXMgZm9yIHRoZSB3b3JrZXIgZnVuY3Rpb25zLiAgKi8K K2ludCBob2djcHUgKGxvbmcgbG9uZyBmb3Jrcyk7CitpbnQgaG9naW8gKGxvbmcgbG9uZyBm b3Jrcyk7CitpbnQgaG9ndm0gKGxvbmcgbG9uZyBmb3JrcywgbG9uZyBsb25nIGNodW5rcywg bG9uZyBsb25nIGJ5dGVzKTsKK2ludCBob2doZGQgKGxvbmcgbG9uZyBmb3JrcywgaW50IGNs ZWFuLCBsb25nIGxvbmcgZmlsZXMsIGxvbmcgbG9uZyBieXRlcyk7CisKK2ludAorbWFpbiAo aW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgaSwgcGlkLCBjaGlsZHJlbiA9IDAs IHJldHZhbCA9IDA7CisgIGxvbmcgc3RhcnR0aW1lLCBzdG9wdGltZSwgcnVudGltZTsKKwor ICAvKiBWYXJpYWJsZXMgdGhhdCBpbmRpY2F0ZSB3aGljaCBvcHRpb25zIGhhdmUgYmVlbiBz ZWxlY3RlZC4gICovCisgIGludCBkb19kcnlydW4gPSAwOworICBpbnQgZG9fdGltZW91dCA9 IDA7CisgIGludCBkb19jcHUgPSAwOyAgICAgICAgICAgICAgIC8qIERlZmF1bHQgdG8gMSBm b3JrLiAqLworICBsb25nIGxvbmcgZG9fY3B1X2ZvcmtzID0gMTsKKyAgaW50IGRvX2lvID0g MDsgICAgICAgICAgICAgICAgLyogRGVmYXVsdCB0byAxIGZvcmsuICovCisgIGxvbmcgbG9u ZyBkb19pb19mb3JrcyA9IDE7CisgIGludCBkb192bSA9IDA7ICAgICAgICAgICAgICAgIC8q IERlZmF1bHQgdG8gMSBmb3JrLCAxIGNodW5rIG9mIDI1Nk1CLiAgKi8KKyAgbG9uZyBsb25n IGRvX3ZtX2ZvcmtzID0gMTsKKyAgbG9uZyBsb25nIGRvX3ZtX2NodW5rcyA9IDE7CisgIGxv bmcgbG9uZyBkb192bV9ieXRlcyA9IDI1NiAqIDEwMjQgKiAxMDI0OworICBpbnQgZG9faGRk ID0gMDsgICAgICAgICAgICAgICAvKiBEZWZhdWx0IHRvIDEgZm9yaywgY2xlYW4sIDEgZmls ZSBvZiAxR0IuICAqLworICBsb25nIGxvbmcgZG9faGRkX2ZvcmtzID0gMTsKKyAgaW50IGRv X2hkZF9jbGVhbiA9IDA7CisgIGxvbmcgbG9uZyBkb19oZGRfZmlsZXMgPSAxOworICBsb25n IGxvbmcgZG9faGRkX2J5dGVzID0gMTAyNCAqIDEwMjQgKiAxMDI0OworCisgIC8qIFJlY29y ZCBvdXIgc3RhcnQgdGltZS4gICovCisgIGlmICgoc3RhcnR0aW1lID0gdGltZSAoTlVMTCkp ID09IC0xKQorICAgIHsKKyAgICAgIGVyciAoc3RkZXJyLCAiZmFpbGVkIHRvIGFjcXVpcmUg Y3VycmVudCB0aW1lXG4iKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICAvKiBTdVN2 MyBkb2VzIG5vdCBkZWZpbmUgYW55IGVycm9yIGNvbmRpdGlvbnMgZm9yIHRoaXMgZnVuY3Rp b24uICAqLworICBnbG9iYWxfcHJvZ25hbWUgPSBiYXNlbmFtZSAoYXJndlswXSk7CisKKyAg LyogRm9yIHBvcnRhYmlsaXR5LCBwYXJzZSBjb21tYW5kIGxpbmUgb3B0aW9ucyB3aXRob3V0 IGdldG9wdF9sb25nLiAgKi8KKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7 CisgICAgICBjaGFyICphcmcgPSBhcmd2W2ldOworCisgICAgICBpZiAoc3RyY21wIChhcmcs ICItLWhlbHAiKSA9PSAwIHx8IHN0cmNtcCAoYXJnLCAiLT8iKSA9PSAwKQorICAgICAgICB7 CisgICAgICAgICAgdXNhZ2UgKDApOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChzdHJj bXAgKGFyZywgIi0tdmVyc2lvbiIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICB2ZXJz aW9uICgwKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICItLXZl cmJvc2UiKSA9PSAwIHx8IHN0cmNtcCAoYXJnLCAiLXYiKSA9PSAwKQorICAgICAgICB7Cisg ICAgICAgICAgZ2xvYmFsX2RlYnVnID0gMzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAo c3RyY21wIChhcmcsICItLXF1aWV0IikgPT0gMCB8fCBzdHJjbXAgKGFyZywgIi1xIikgPT0g MCkKKyAgICAgICAgeworICAgICAgICAgIGdsb2JhbF9kZWJ1ZyA9IDA7CisgICAgICAgIH0K KyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiLS1kcnktcnVuIikgPT0gMCB8fCBzdHJj bXAgKGFyZywgIi1uIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGRvX2RyeXJ1biA9 IDE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiLS1uby1yZXRy eSIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBnbG9iYWxfaWdub3JlID0gMDsKKyAg ICAgICAgICBkYmcgKHN0ZG91dCwgInR1cm5pbmcgb2ZmIGlnbm9yZSBvZiBub24tY3JpdGlj YWwgZXJyb3JzIik7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAi LS1yZXRyeS1kZWxheSIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBhc3NlcnRfYXJn ICgiLS1yZXRyeS1kZWxheSIpOworICAgICAgICAgIGdsb2JhbF9yZXRyeSA9IGF0b2xsIChh cmcpOworICAgICAgICAgIGRiZyAoc3Rkb3V0LCAic2V0dGluZyByZXRyeSBkZWxheSB0byAl ZHVzXG4iLCBnbG9iYWxfcmV0cnkpOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChzdHJj bXAgKGFyZywgIi0tYmFja29mZiIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBhc3Nl cnRfYXJnICgiLS1iYWNrb2ZmIik7CisgICAgICAgICAgZ2xvYmFsX2JhY2tvZmYgPSBhdG9s bCAoYXJnKTsKKyAgICAgICAgICBpZiAoZ2xvYmFsX2JhY2tvZmYgPCAwKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICBlcnIgKHN0ZGVyciwgImludmFsaWQgYmFja29mZiBmYWN0 b3I6ICVpXG4iLCBnbG9iYWxfYmFja29mZik7CisgICAgICAgICAgICAgIGV4aXQgKDEpOwor ICAgICAgICAgICAgfQorICAgICAgICAgIGRiZyAoc3Rkb3V0LCAic2V0dGluZyBiYWNrb2Zm IGNvZWZmaWVudCB0byAlZHVzXG4iLCBnbG9iYWxfYmFja29mZik7CisgICAgICAgIH0KKyAg ICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiLS10aW1lb3V0IikgPT0gMCB8fCBzdHJjbXAg KGFyZywgIi10IikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGRvX3RpbWVvdXQgPSAx OworICAgICAgICAgIGFzc2VydF9hcmcgKCItLXRpbWVvdXQiKTsKKyAgICAgICAgICBnbG9i YWxfdGltZW91dCA9IGF0b2xsX3MgKGFyZyk7CisgICAgICAgICAgZGJnIChzdGRvdXQsICJz ZXR0aW5nIHRpbWVvdXQgdG8gJWRzXG4iLCBnbG9iYWxfdGltZW91dCk7CisgICAgICAgIH0K KyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiLS1jcHUiKSA9PSAwIHx8IHN0cmNtcCAo YXJnLCAiLWMiKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgZG9fY3B1ID0gMTsKKyAg ICAgICAgICBhc3NlcnRfYXJnICgiLS1jcHUiKTsKKyAgICAgICAgICBkb19jcHVfZm9ya3Mg PSBhdG9sbF9iIChhcmcpOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChzdHJjbXAgKGFy ZywgIi0taW8iKSA9PSAwIHx8IHN0cmNtcCAoYXJnLCAiLWkiKSA9PSAwKQorICAgICAgICB7 CisgICAgICAgICAgZG9faW8gPSAxOworICAgICAgICAgIGFzc2VydF9hcmcgKCItLWlvIik7 CisgICAgICAgICAgZG9faW9fZm9ya3MgPSBhdG9sbF9iIChhcmcpOworICAgICAgICB9Cisg ICAgICBlbHNlIGlmIChzdHJjbXAgKGFyZywgIi0tdm0iKSA9PSAwIHx8IHN0cmNtcCAoYXJn LCAiLW0iKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgZG9fdm0gPSAxOworICAgICAg ICAgIGFzc2VydF9hcmcgKCItLXZtIik7CisgICAgICAgICAgZG9fdm1fZm9ya3MgPSBhdG9s bF9iIChhcmcpOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChzdHJjbXAgKGFyZywgIi0t dm0tY2h1bmtzIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGFzc2VydF9hcmcgKCIt LXZtLWNodW5rcyIpOworICAgICAgICAgIGRvX3ZtX2NodW5rcyA9IGF0b2xsX2IgKGFyZyk7 CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAoYXJnLCAiLS12bS1ieXRlcyIp ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBhc3NlcnRfYXJnICgiLS12bS1ieXRlcyIp OworICAgICAgICAgIGRvX3ZtX2J5dGVzID0gYXRvbGxfYiAoYXJnKTsKKyAgICAgICAgfQor ICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICItLXZtLWhhbmciKSA9PSAwKQorICAgICAg ICB7CisgICAgICAgICAgZ2xvYmFsX3ZtaGFuZyA9IDE7CisgICAgICAgIH0KKyAgICAgIGVs c2UgaWYgKHN0cmNtcCAoYXJnLCAiLS1oZGQiKSA9PSAwIHx8IHN0cmNtcCAoYXJnLCAiLWQi KSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgZG9faGRkID0gMTsKKyAgICAgICAgICBh c3NlcnRfYXJnICgiLS1oZGQiKTsKKyAgICAgICAgICBkb19oZGRfZm9ya3MgPSBhdG9sbF9i IChhcmcpOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChzdHJjbXAgKGFyZywgIi0taGRk LW5vY2xlYW4iKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgZG9faGRkX2NsZWFuID0g MjsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoc3RyY21wIChhcmcsICItLWhkZC1maWxl cyIpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBhc3NlcnRfYXJnICgiLS1oZGQtZmls ZXMiKTsKKyAgICAgICAgICBkb19oZGRfZmlsZXMgPSBhdG9sbF9iIChhcmcpOworICAgICAg ICB9CisgICAgICBlbHNlIGlmIChzdHJjbXAgKGFyZywgIi0taGRkLWJ5dGVzIikgPT0gMCkK KyAgICAgICAgeworICAgICAgICAgIGFzc2VydF9hcmcgKCItLWhkZC1ieXRlcyIpOworICAg ICAgICAgIGRvX2hkZF9ieXRlcyA9IGF0b2xsX2IgKGFyZyk7CisgICAgICAgIH0KKyAgICAg IGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGVyciAoc3RkZXJyLCAidW5yZWNvZ25pemVk IG9wdGlvbjogJXNcbiIsIGFyZyk7CisgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIH0K KyAgICB9CisKKyAgLyogSG9nIENQVSBvcHRpb24uICAqLworICBpZiAoZG9fY3B1KQorICAg IHsKKyAgICAgIG91dCAoc3Rkb3V0LCAiZGlzcGF0Y2hpbmcgJWxsaSBob2djcHUgZm9ya3Nc biIsIGRvX2NwdV9mb3Jrcyk7CisKKyAgICAgIHN3aXRjaCAocGlkID0gZm9yayAoKSkKKyAg ICAgICAgeworICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIGNoaWxkICovCisg ICAgICAgICAgaWYgKGRvX2RyeXJ1bikKKyAgICAgICAgICAgIGV4aXQgKDApOworICAgICAg ICAgIGV4aXQgKGhvZ2NwdSAoZG9fY3B1X2ZvcmtzKSk7CisgICAgICAgIGNhc2UgLTE6ICAg ICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgICBlcnIgKHN0ZGVyciwgImhvZ2Nw dSBkaXNwYXRjaGVyIGZvcmsgZmFpbGVkXG4iKTsKKyAgICAgICAgICBleGl0ICgxKTsKKyAg ICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAvKiBwYXJlbnQgKi8KKyAgICAgICAgICBj aGlsZHJlbisrOworICAgICAgICAgIGRiZyAoc3Rkb3V0LCAiLS0+IGhvZ2NwdSBkaXNwYXRj aGVyIGZvcmtlZCAoJWkpXG4iLCBwaWQpOworICAgICAgICB9CisgICAgfQorCisgIC8qIEhv ZyBJL08gb3B0aW9uLiAgKi8KKyAgaWYgKGRvX2lvKQorICAgIHsKKyAgICAgIG91dCAoc3Rk b3V0LCAiZGlzcGF0Y2hpbmcgJWxsaSBob2dpbyBmb3Jrc1xuIiwgZG9faW9fZm9ya3MpOwor CisgICAgICBzd2l0Y2ggKHBpZCA9IGZvcmsgKCkpCisgICAgICAgIHsKKyAgICAgICAgY2Fz ZSAwOiAgICAgICAgICAgICAgICAvKiBjaGlsZCAqLworICAgICAgICAgIGlmIChkb19kcnly dW4pCisgICAgICAgICAgICBleGl0ICgwKTsKKyAgICAgICAgICBleGl0IChob2dpbyAoZG9f aW9fZm9ya3MpKTsKKyAgICAgICAgY2FzZSAtMTogICAgICAgICAgICAgICAvKiBlcnJvciAq LworICAgICAgICAgIGVyciAoc3RkZXJyLCAiaG9naW8gZGlzcGF0Y2hlciBmb3JrIGZhaWxl ZFxuIik7CisgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAg ICAgICAgLyogcGFyZW50ICovCisgICAgICAgICAgY2hpbGRyZW4rKzsKKyAgICAgICAgICBk YmcgKHN0ZG91dCwgIi0tPiBob2dpbyBkaXNwYXRjaGVyIGZvcmtlZCAoJWkpXG4iLCBwaWQp OworICAgICAgICB9CisgICAgfQorCisgIC8qIEhvZyBWTSBvcHRpb24uICAqLworICBpZiAo ZG9fdm0pCisgICAgeworICAgICAgb3V0IChzdGRvdXQsCisgICAgICAgICAgICJkaXNwYXRj aGluZyAlbGxpIGhvZ3ZtIGZvcmtzLCBlYWNoICVsbGkgY2h1bmtzIG9mICVsbGkgYnl0ZXNc biIsCisgICAgICAgICAgIGRvX3ZtX2ZvcmtzLCBkb192bV9jaHVua3MsIGRvX3ZtX2J5dGVz KTsKKworICAgICAgc3dpdGNoIChwaWQgPSBmb3JrICgpKQorICAgICAgICB7CisgICAgICAg IGNhc2UgMDogICAgICAgICAgICAgICAgLyogY2hpbGQgKi8KKyAgICAgICAgICBpZiAoZG9f ZHJ5cnVuKQorICAgICAgICAgICAgZXhpdCAoMCk7CisgICAgICAgICAgZXhpdCAoaG9ndm0g KGRvX3ZtX2ZvcmtzLCBkb192bV9jaHVua3MsIGRvX3ZtX2J5dGVzKSk7CisgICAgICAgIGNh c2UgLTE6ICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgICBlcnIgKHN0ZGVy ciwgImhvZ3ZtIGRpc3BhdGNoZXIgZm9yayBmYWlsZWRcbiIpOworICAgICAgICAgIGV4aXQg KDEpOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgIC8qIHBhcmVudCAqLworICAg ICAgICAgIGNoaWxkcmVuKys7CisgICAgICAgICAgZGJnIChzdGRvdXQsICItLT4gaG9ndm0g ZGlzcGF0Y2hlciBmb3JrZWQgKCVpKVxuIiwgcGlkKTsKKyAgICAgICAgfQorICAgIH0KKwor ICAvKiBIb2cgSEREIG9wdGlvbi4gICovCisgIGlmIChkb19oZGQpCisgICAgeworICAgICAg b3V0IChzdGRvdXQsICJkaXNwYXRjaGluZyAlbGxpIGhvZ2hkZCBmb3JrcywgZWFjaCAlbGxp IGZpbGVzIG9mICIKKyAgICAgICAgICAgIiVsbGkgYnl0ZXNcbiIsIGRvX2hkZF9mb3Jrcywg ZG9faGRkX2ZpbGVzLCBkb19oZGRfYnl0ZXMpOworCisgICAgICBzd2l0Y2ggKHBpZCA9IGZv cmsgKCkpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiBj aGlsZCAqLworICAgICAgICAgIGlmIChkb19kcnlydW4pCisgICAgICAgICAgICBleGl0ICgw KTsKKyAgICAgICAgICBleGl0IChob2doZGQKKyAgICAgICAgICAgICAgICAoZG9faGRkX2Zv cmtzLCBkb19oZGRfY2xlYW4sIGRvX2hkZF9maWxlcywgZG9faGRkX2J5dGVzKSk7CisgICAg ICAgIGNhc2UgLTE6ICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgICBlcnIg KHN0ZGVyciwgImhvZ2hkZCBkaXNwYXRjaGVyIGZvcmsgZmFpbGVkXG4iKTsKKyAgICAgICAg ICBleGl0ICgxKTsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAvKiBwYXJlbnQg Ki8KKyAgICAgICAgICBjaGlsZHJlbisrOworICAgICAgICAgIGRiZyAoc3Rkb3V0LCAiLS0+ IGhvZ2hkZCBkaXNwYXRjaGVyIGZvcmtlZCAoJWkpXG4iLCBwaWQpOworICAgICAgICB9Cisg ICAgfQorCisgIC8qIFdlIGhhdmUgbm8gd29yayB0byBkbywgc28gYmFpbCBvdXQuICAqLwor ICBpZiAoY2hpbGRyZW4gPT0gMCkKKyAgICB1c2FnZSAoMCk7CisKKyAgLyogV2FpdCBmb3Ig b3VyIGNoaWxkcmVuIHRvIGV4aXQuICAqLworICB3aGlsZSAoY2hpbGRyZW4pCisgICAgewor ICAgICAgaW50IHN0YXR1cywgcmV0OworCisgICAgICBpZiAoKHBpZCA9IHdhaXQgKCZzdGF0 dXMpKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKFdJRkVYSVRFRCAoc3RhdHVz KSkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKChyZXQgPSBXRVhJ VFNUQVRVUyAoc3RhdHVzKSkgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICBlcnIgKHN0ZGVyciwgImRpc3BhdGNoZXIgJWkgcmV0dXJuZWQgZXJyb3IgJWlc biIsIHBpZCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgIHJldHZhbCArPSByZXQ7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgZGJnIChzdGRvdXQsICI8LS0gZGlzcGF0Y2hlciByZXR1cm4g KCVpKVxuIiwgcGlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgKHN0ZGVyciwg ImRpc3BhdGNoZXIgZGlkIG5vdCBleGl0IG5vcm1hbGx5XG4iKTsKKyAgICAgICAgICAgICAg KytyZXR2YWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAtLWNoaWxkcmVuOworICAg ICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBkYmcgKHN0ZG91dCwg IndhaXQoKSByZXR1cm5lZCBlcnJvcjogJXNcbiIsIHN0cmVycm9yIChlcnJubykpOworICAg ICAgICAgIGVyciAoc3RkZXJyLCAiZGV0ZWN0ZWQgbWlzc2luZyBkaXNwYXRjaGVyIGNoaWxk cmVuXG4iKTsKKyAgICAgICAgICArK3JldHZhbDsKKyAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgIH0KKworICAvKiBSZWNvcmQgb3VyIHN0b3AgdGltZS4gICovCisgIGlmICgo c3RvcHRpbWUgPSB0aW1lIChOVUxMKSkgPT0gLTEpCisgICAgeworICAgICAgZXJyIChzdGRl cnIsICJmYWlsZWQgdG8gYWNxdWlyZSBjdXJyZW50IHRpbWVcbiIpOworICAgICAgZXhpdCAo MSk7CisgICAgfQorCisgIC8qIENhbGN1bGF0ZSBvdXIgcnVudGltZS4gICovCisgIHJ1bnRp bWUgPSBzdG9wdGltZSAtIHN0YXJ0dGltZTsKKworICAvKiBQcmludCBmaW5hbCBzdGF0dXMg bWVzc2FnZS4gICovCisgIGlmIChyZXR2YWwpCisgICAgeworICAgICAgZXJyIChzdGRlcnIs ICJmYWlsZWQgcnVuIGNvbXBsZXRlZCBpbiAlbGlzXG4iLCBydW50aW1lKTsKKyAgICB9Cisg IGVsc2UKKyAgICB7CisgICAgICBvdXQgKHN0ZG91dCwgInN1Y2Nlc3NmdWwgcnVuIGNvbXBs ZXRlZCBpbiAlbGlzXG4iLCBydW50aW1lKTsKKyAgICB9CisKKyAgZXhpdCAocmV0dmFsKTsK K30KKworaW50Cit1c2FnZSAoaW50IHN0YXR1cykKK3sKKyAgY2hhciAqbWVzZyA9CisgICAg ImAlcycgaW1wb3NlcyBjZXJ0YWluIHR5cGVzIG9mIGNvbXB1dGUgc3RyZXNzIG9uIHlvdXIg c3lzdGVtXG5cbiIKKyAgICAiVXNhZ2U6ICVzIFtPUFRJT04gW0FSR11dIC4uLlxuXG4iCisg ICAgIiAtPywgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgc3RhdGVtZW50XG4i CisgICAgIiAgICAgLS12ZXJzaW9uICAgICAgICAgc2hvdyB2ZXJzaW9uIHN0YXRlbWVudFxu IgorICAgICIgLXYsIC0tdmVyYm9zZSAgICAgICAgIGJlIHZlcmJvc2VcbiIKKyAgICAiIC1x LCAtLXF1aWV0ICAgICAgICAgICBiZSBxdWlldFxuIgorICAgICIgLW4sIC0tZHJ5LXJ1biAg ICAgICAgIHNob3cgd2hhdCB3b3VsZCBoYXZlIGJlZW4gZG9uZVxuIgorICAgICIgICAgIC0t bm8tcmV0cnkgICAgICAgIGV4aXQgcmF0aGVyIHRoYW4gcmV0cnkgbm9uLWNyaXRpY2FsIGVy cm9yc1xuIgorICAgICIgICAgIC0tcmV0cnktZGVsYXkgbiAgIHdhaXQgbiB1cyBiZWZvcmUg Y29udGludWluZyBwYXN0IGVycm9yXG4iCisgICAgIiAtdCwgLS10aW1lb3V0IG4gICAgICAg dGltZW91dCBhZnRlciBuIHNlY29uZHNcbiIKKyAgICAiICAgICAtLWJhY2tvZmYgbiAgICAg ICB3YWl0IGZvciBmYWN0b3Igb2YgbiB1cyBiZWZvcmUgc3RhcnRpbmcgd29ya1xuIgorICAg ICIgLWMsIC0tY3B1IG4gICAgICAgICAgIHNwYXduIG4gcHJvY3Mgc3Bpbm5pbmcgb24gc3Fy dCgpXG4iCisgICAgIiAtaSwgLS1pbyBuICAgICAgICAgICAgc3Bhd24gbiBwcm9jcyBzcGlu bmluZyBvbiBzeW5jKClcbiIKKyAgICAiIC1tLCAtLXZtIG4gICAgICAgICAgICBzcGF3biBu IHByb2NzIHNwaW5uaW5nIG9uIG1hbGxvYygpXG4iCisgICAgIiAgICAgLS12bS1jaHVua3Mg YyAgICAgbWFsbG9jIGMgY2h1bmtzIChkZWZhdWx0IGlzIDEpXG4iCisgICAgIiAgICAgLS12 bS1ieXRlcyBiICAgICAgbWFsbG9jIGNodW5rcyBvZiBiIGJ5dGVzIChkZWZhdWx0IGlzIDI1 Nk1CKVxuIgorICAgICIgICAgIC0tdm0taGFuZyAgICAgICAgIGhhbmcgaW4gYSBzbGVlcCBs b29wIGFmdGVyIG1lbW9yeSBhbGxvY2F0ZWRcbiIKKyAgICAiIC1kLCAtLWhkZCBuICAgICAg ICAgICBzcGF3biBuIHByb2NzIHNwaW5uaW5nIG9uIHdyaXRlKClcbiIKKyAgICAiICAgICAt LWhkZC1ub2NsZWFuICAgICBkbyBub3QgdW5saW5rIGZpbGUgdG8gd2hpY2ggcmFuZG9tIGRh dGEgd3JpdHRlblxuIgorICAgICIgICAgIC0taGRkLWZpbGVzIGYgICAgIHdyaXRlIHRvIGYg ZmlsZXMgKGRlZmF1bHQgaXMgMSlcbiIKKyAgICAiICAgICAtLWhkZC1ieXRlcyBiICAgICB3 cml0ZSBiIGJ5dGVzIChkZWZhdWx0IGlzIDFHQilcblxuIgorICAgICJJbmZpbml0eSBpcyBk ZW5vdGVkIHdpdGggMC4gIEZvciAtbSwgLWQ6IG49MCBtZWFucyBpbmZpbml0ZSByZWRvLFxu IgorICAgICJuPDAgbWVhbnMgcmVkbyBhYnMobikgdGltZXMuIFZhbGlkIHN1ZmZpeGVzIGFy ZSBtLGgsZCx5IGZvciB0aW1lO1xuIgorICAgICJrLG0sZyBmb3Igc2l6ZS5cblxuIjsKKwor ICBmcHJpbnRmIChzdGRvdXQsIG1lc2csIGdsb2JhbF9wcm9nbmFtZSwgZ2xvYmFsX3Byb2du YW1lKTsKKworICBpZiAoc3RhdHVzIDw9IDApCisgICAgZXhpdCAoLTEgKiBzdGF0dXMpOwor CisgIHJldHVybiAwOworfQorCitpbnQKK3ZlcnNpb24gKGludCBzdGF0dXMpCit7CisgIGNo YXIgKm1lc2cgPSAiJXMgJXNcbiI7CisKKyAgZnByaW50ZiAoc3Rkb3V0LCBtZXNnLCBnbG9i YWxfcHJvZ25hbWUsIFZFUlNJT04pOworCisgIGlmIChzdGF0dXMgPD0gMCkKKyAgICBleGl0 ICgtMSAqIHN0YXR1cyk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIENvbnZlcnQgYSBzdHJp bmcgcmVwcmVzZW50YXRpb24gb2YgYSBudW1iZXIgd2l0aCBhbiBvcHRpb25hbCBzaXplIHN1 ZmZpeAorICogdG8gYSBsb25nIGxvbmcuCisgKi8KK2xvbmcgbG9uZworYXRvbGxfYiAoY29u c3QgY2hhciAqbnB0cikKK3sKKyAgaW50IHBvczsKKyAgY2hhciBzdWZmaXg7CisgIGxvbmcg bG9uZyBmYWN0b3IgPSAxOworCisgIGlmICgocG9zID0gc3RybGVuIChucHRyKSAtIDEpIDwg MCkKKyAgICB7CisgICAgICBlcnIgKHN0ZGVyciwgImludmFsaWQgc3RyaW5nXG4iKTsKKyAg ICAgIGV4aXQgKDEpOworICAgIH0KKworICBzd2l0Y2ggKHN1ZmZpeCA9IG5wdHJbcG9zXSkK KyAgICB7CisgICAgY2FzZSAnayc6CisgICAgY2FzZSAnSyc6CisgICAgICBmYWN0b3IgPSAx MDI0OworICAgICAgYnJlYWs7CisgICAgY2FzZSAnbSc6CisgICAgY2FzZSAnTSc6CisgICAg ICBmYWN0b3IgPSAxMDI0ICogMTAyNDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ2cnOgor ICAgIGNhc2UgJ0cnOgorICAgICAgZmFjdG9yID0gMTAyNCAqIDEwMjQgKiAxMDI0OworICAg ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChzdWZmaXggPCAnMCcgfHwgc3Vm Zml4ID4gJzknKQorICAgICAgICB7CisgICAgICAgICAgZXJyIChzdGRlcnIsICJ1bnJlY29n bml6ZWQgc3VmZml4OiAlY1xuIiwgc3VmZml4KTsKKyAgICAgICAgICBleGl0ICgxKTsKKyAg ICAgICAgfQorICAgIH0KKworICBmYWN0b3IgPSBhdG9sbCAobnB0cikgKiBmYWN0b3I7CisK KyAgcmV0dXJuIGZhY3RvcjsKK30KKworLyogQ29udmVydCBhIHN0cmluZyByZXByZXNlbnRh dGlvbiBvZiBhIG51bWJlciB3aXRoIGFuIG9wdGlvbmFsIHRpbWUgc3VmZml4CisgKiB0byBh IGxvbmcgbG9uZy4KKyAqLworbG9uZyBsb25nCithdG9sbF9zIChjb25zdCBjaGFyICpucHRy KQoreworICBpbnQgcG9zOworICBjaGFyIHN1ZmZpeDsKKyAgbG9uZyBsb25nIGZhY3RvciA9 IDE7CisKKyAgaWYgKChwb3MgPSBzdHJsZW4gKG5wdHIpIC0gMSkgPCAwKQorICAgIHsKKyAg ICAgIGVyciAoc3RkZXJyLCAiaW52YWxpZCBzdHJpbmdcbiIpOworICAgICAgZXhpdCAoMSk7 CisgICAgfQorCisgIHN3aXRjaCAoc3VmZml4ID0gbnB0cltwb3NdKQorICAgIHsKKyAgICBj YXNlICdzJzoKKyAgICBjYXNlICdTJzoKKyAgICAgIGZhY3RvciA9IDE7CisgICAgICBicmVh azsKKyAgICBjYXNlICdtJzoKKyAgICBjYXNlICdNJzoKKyAgICAgIGZhY3RvciA9IDYwOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSAnaCc6CisgICAgY2FzZSAnSCc6CisgICAgICBmYWN0 b3IgPSA2MCAqIDYwOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnZCc6CisgICAgY2FzZSAn RCc6CisgICAgICBmYWN0b3IgPSA2MCAqIDYwICogMjQ7CisgICAgICBicmVhazsKKyAgICBj YXNlICd5JzoKKyAgICBjYXNlICdZJzoKKyAgICAgIGZhY3RvciA9IDYwICogNjAgKiAyNCAq IDM2MDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBpZiAoc3VmZml4IDwg JzAnIHx8IHN1ZmZpeCA+ICc5JykKKyAgICAgICAgeworICAgICAgICAgIGVyciAoc3RkZXJy LCAidW5yZWNvZ25pemVkIHN1ZmZpeDogJWNcbiIsIHN1ZmZpeCk7CisgICAgICAgICAgZXhp dCAoMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgZmFjdG9yID0gYXRvbGwgKG5wdHIpICog ZmFjdG9yOworCisgIHJldHVybiBmYWN0b3I7Cit9CisKK2ludAoraG9nY3B1IChsb25nIGxv bmcgZm9ya3MpCit7CisgIGxvbmcgbG9uZyBpOworICBkb3VibGUgZDsKKyAgaW50IHBpZCwg cmV0dmFsID0gMDsKKworICAvKiBNYWtlIGxvY2FsIGNvcGllcyBvZiBnbG9iYWwgdmFyaWFi bGVzLiAgKi8KKyAgaW50IGlnbm9yZSA9IGdsb2JhbF9pZ25vcmU7CisgIGludCByZXRyeSA9 IGdsb2JhbF9yZXRyeTsKKyAgaW50IHRpbWVvdXQgPSBnbG9iYWxfdGltZW91dDsKKyAgbG9u ZyBiYWNrb2ZmID0gZ2xvYmFsX2JhY2tvZmYgKiBmb3JrczsKKworICBkYmcgKHN0ZG91dCwg InVzaW5nIGJhY2tvZmYgc2xlZXAgb2YgJWxpdXMgZm9yIGhvZ2NwdVxuIiwgYmFja29mZik7 CisKKyAgZm9yIChpID0gMDsgZm9ya3MgPT0gMCB8fCBpIDwgZm9ya3M7IGkrKykKKyAgICB7 CisgICAgICBzd2l0Y2ggKHBpZCA9IGZvcmsgKCkpCisgICAgICAgIHsKKyAgICAgICAgY2Fz ZSAwOiAgICAgICAgICAgICAgICAvKiBjaGlsZCAqLworICAgICAgICAgIGFsYXJtICh0aW1l b3V0KTsKKworICAgICAgICAgIC8qIFVzZSBhIGJhY2tvZmYgc2xlZXAgdG8gZW5zdXJlIHdl IGdldCBnb29kIGZvcmsgdGhyb3VnaHB1dC4gICovCisgICAgICAgICAgdXNsZWVwIChiYWNr b2ZmKTsKKworICAgICAgICAgIHdoaWxlICgxKQorICAgICAgICAgICAgZCA9IHNxcnQgKHJh bmQgKCkpOworCisgICAgICAgICAgLyogVGhpcyBjYXNlIG5ldmVyIGZhbGxzIHRocm91Z2g7 IGFsYXJtIHNpZ25hbCBjYW4gY2F1c2UgZXhpdC4gICovCisgICAgICAgIGNhc2UgLTE6ICAg ICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgICBpZiAoaWdub3JlKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICArK3JldHZhbDsKKyAgICAgICAgICAgICAgd3JuIChz dGRlcnIsICJob2djcHUgd29ya2VyIGZvcmsgZmFpbGVkLCBjb250aW51aW5nXG4iKTsKKyAg ICAgICAgICAgICAgdXNsZWVwIChyZXRyeSk7CisgICAgICAgICAgICAgIGNvbnRpbnVlOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgZXJyIChzdGRlcnIsICJob2djcHUgd29ya2Vy IGZvcmsgZmFpbGVkXG4iKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZGVmYXVs dDogICAgICAgICAgICAgICAvKiBwYXJlbnQgKi8KKyAgICAgICAgICBkYmcgKHN0ZG91dCwg Ii0tPiBob2djcHUgd29ya2VyIGZvcmtlZCAoJWkpXG4iLCBwaWQpOworICAgICAgICB9Cisg ICAgfQorCisgIC8qIFdhaXQgZm9yIG91ciBjaGlsZHJlbiB0byBleGl0LiAgKi8KKyAgd2hp bGUgKGkpCisgICAgeworICAgICAgaW50IHN0YXR1cywgcmV0OworCisgICAgICBpZiAoKHBp ZCA9IHdhaXQgKCZzdGF0dXMpKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKFdJ RkVYSVRFRCAoc3RhdHVzKSkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg aWYgKChyZXQgPSBXRVhJVFNUQVRVUyAoc3RhdHVzKSkgIT0gMCkKKyAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICBlcnIgKHN0ZGVyciwgImhvZ2NwdSB3b3JrZXIgJWkg ZXhpdGVkICVpXG4iLCBwaWQsIHJldCk7CisgICAgICAgICAgICAgICAgICByZXR2YWwgKz0g cmV0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGRiZyAoc3Rkb3V0LCAiPC0tIGhvZ2NwdSB3 b3JrZXIgZXhpdGVkICglaSlcbiIsIHBpZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ZGJnIChzdGRvdXQsICI8LS0gaG9nY3B1IHdvcmtlciBzaWduYWxsZWQgKCVpKVxuIiwgcGlk KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC0taTsKKyAgICAgICAgfQorICAgICAg ZWxzZQorICAgICAgICB7CisgICAgICAgICAgZGJnIChzdGRvdXQsICJ3YWl0KCkgcmV0dXJu ZWQgZXJyb3I6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICBlcnIgKHN0 ZGVyciwgImRldGVjdGVkIG1pc3NpbmcgaG9nY3B1IHdvcmtlciBjaGlsZHJlblxuIik7Cisg ICAgICAgICAgKytyZXR2YWw7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9 CisKKyAgcmV0dXJuIHJldHZhbDsKK30KKworaW50Citob2dpbyAobG9uZyBsb25nIGZvcmtz KQoreworICBsb25nIGxvbmcgaTsKKyAgaW50IHBpZCwgcmV0dmFsID0gMDsKKworICAvKiBN YWtlIGxvY2FsIGNvcGllcyBvZiBnbG9iYWwgdmFyaWFibGVzLiAgKi8KKyAgaW50IGlnbm9y ZSA9IGdsb2JhbF9pZ25vcmU7CisgIGludCByZXRyeSA9IGdsb2JhbF9yZXRyeTsKKyAgaW50 IHRpbWVvdXQgPSBnbG9iYWxfdGltZW91dDsKKyAgbG9uZyBiYWNrb2ZmID0gZ2xvYmFsX2Jh Y2tvZmYgKiBmb3JrczsKKworICBkYmcgKHN0ZG91dCwgInVzaW5nIGJhY2tvZmYgc2xlZXAg b2YgJWxpdXMgZm9yIGhvZ2lvXG4iLCBiYWNrb2ZmKTsKKworICBmb3IgKGkgPSAwOyBmb3Jr cyA9PSAwIHx8IGkgPCBmb3JrczsgaSsrKQorICAgIHsKKyAgICAgIHN3aXRjaCAocGlkID0g Zm9yayAoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8q IGNoaWxkICovCisgICAgICAgICAgYWxhcm0gKHRpbWVvdXQpOworCisgICAgICAgICAgLyog VXNlIGEgYmFja29mZiBzbGVlcCB0byBlbnN1cmUgd2UgZ2V0IGdvb2QgZm9yayB0aHJvdWdo cHV0LiAgKi8KKyAgICAgICAgICB1c2xlZXAgKGJhY2tvZmYpOworCisgICAgICAgICAgd2hp bGUgKDEpCisgICAgICAgICAgICBzeW5jICgpOworCisgICAgICAgICAgLyogVGhpcyBjYXNl IG5ldmVyIGZhbGxzIHRocm91Z2g7IGFsYXJtIHNpZ25hbCBjYW4gY2F1c2UgZXhpdC4gICov CisgICAgICAgIGNhc2UgLTE6ICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAg ICBpZiAoaWdub3JlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICArK3JldHZhbDsK KyAgICAgICAgICAgICAgd3JuIChzdGRlcnIsICJob2dpbyB3b3JrZXIgZm9yayBmYWlsZWQs IGNvbnRpbnVpbmdcbiIpOworICAgICAgICAgICAgICB1c2xlZXAgKHJldHJ5KTsKKyAgICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBlcnIgKHN0 ZGVyciwgImhvZ2lvIHdvcmtlciBmb3JrIGZhaWxlZFxuIik7CisgICAgICAgICAgcmV0dXJu IDE7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgLyogcGFyZW50ICovCisgICAg ICAgICAgZGJnIChzdGRvdXQsICItLT4gaG9naW8gd29ya2VyIGZvcmtlZCAoJWkpXG4iLCBw aWQpOworICAgICAgICB9CisgICAgfQorCisgIC8qIFdhaXQgZm9yIG91ciBjaGlsZHJlbiB0 byBleGl0LiAgKi8KKyAgd2hpbGUgKGkpCisgICAgeworICAgICAgaW50IHN0YXR1cywgcmV0 OworCisgICAgICBpZiAoKHBpZCA9IHdhaXQgKCZzdGF0dXMpKSA+IDApCisgICAgICAgIHsK KyAgICAgICAgICBpZiAoKFdJRkVYSVRFRCAoc3RhdHVzKSkgIT0gMCkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgaWYgKChyZXQgPSBXRVhJVFNUQVRVUyAoc3RhdHVzKSkgIT0g MCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBlcnIgKHN0ZGVyciwg ImhvZ2lvIHdvcmtlciAlaSBleGl0ZWQgJWlcbiIsIHBpZCwgcmV0KTsKKyAgICAgICAgICAg ICAgICAgIHJldHZhbCArPSByZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZGJnIChzdGRv dXQsICI8LS0gaG9naW8gd29ya2VyIGV4aXRlZCAoJWkpXG4iLCBwaWQpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGRiZyAoc3Rkb3V0LCAiPC0tIGhvZ2lvIHdvcmtlciBzaWduYWxs ZWQgKCVpKVxuIiwgcGlkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC0taTsKKyAg ICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZGJnIChzdGRvdXQs ICJ3YWl0KCkgcmV0dXJuZWQgZXJyb3I6ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAg ICAgICAgICBlcnIgKHN0ZGVyciwgImRldGVjdGVkIG1pc3NpbmcgaG9naW8gd29ya2VyIGNo aWxkcmVuXG4iKTsKKyAgICAgICAgICArK3JldHZhbDsKKyAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgIH0KKworICByZXR1cm4gcmV0dmFsOworfQorCitpbnQKK2hvZ3ZtIChs b25nIGxvbmcgZm9ya3MsIGxvbmcgbG9uZyBjaHVua3MsIGxvbmcgbG9uZyBieXRlcykKK3sK KyAgbG9uZyBsb25nIGksIGosIGs7CisgIGludCBwaWQsIHJldHZhbCA9IDA7CisgIGNoYXIg KipwdHI7CisKKyAgLyogTWFrZSBsb2NhbCBjb3BpZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4g ICovCisgIGludCBpZ25vcmUgPSBnbG9iYWxfaWdub3JlOworICBpbnQgcmV0cnkgPSBnbG9i YWxfcmV0cnk7CisgIGludCB0aW1lb3V0ID0gZ2xvYmFsX3RpbWVvdXQ7CisgIGxvbmcgYmFj a29mZiA9IGdsb2JhbF9iYWNrb2ZmICogZm9ya3M7CisKKyAgZGJnIChzdGRvdXQsICJ1c2lu ZyBiYWNrb2ZmIHNsZWVwIG9mICVsaXVzIGZvciBob2d2bVxuIiwgYmFja29mZik7CisKKyAg aWYgKGJ5dGVzID09IDApCisgICAgeworICAgICAgLyogNTEyTUIgaXMgZ3Vlc3MgYXQgdGhl IGxhcmdlc3QgdmFsdWUgY2FuIHRoYW4gYmUgbWFsbG9jZWQgYXQgb25jZS4gICovCisgICAg ICBieXRlcyA9IDUxMiAqIDEwMjQgKiAxMDI0OworICAgIH0KKworICBmb3IgKGkgPSAwOyBm b3JrcyA9PSAwIHx8IGkgPCBmb3JrczsgaSsrKQorICAgIHsKKyAgICAgIHN3aXRjaCAocGlk ID0gZm9yayAoKSkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAg IC8qIGNoaWxkICovCisgICAgICAgICAgYWxhcm0gKHRpbWVvdXQpOworCisgICAgICAgICAg LyogVXNlIGEgYmFja29mZiBzbGVlcCB0byBlbnN1cmUgd2UgZ2V0IGdvb2QgZm9yayB0aHJv dWdocHV0LiAgKi8KKyAgICAgICAgICB1c2xlZXAgKGJhY2tvZmYpOworCisgICAgICAgICAg d2hpbGUgKDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHB0ciA9IChjaGFyICoq KSBtYWxsb2MgKCBjaHVua3MgKiAyKTsKKyAgICAgICAgICAgICAgZm9yIChqID0gMDsgY2h1 bmtzID09IDAgfHwgaiA8IGNodW5rczsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgIGlmICgocHRyW2pdID0gKGNoYXIgKikgbWFsbG9jIChieXRlcyAqIHNp emVvZiAoY2hhcikpKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgIGZvciAoayA9IDA7IGsgPCBieXRlczsgaysrKQorICAgICAgICAgICAgICAgICAg ICAgICAgcHRyW2pdW2tdID0gJ1onOyAgIC8qIEVuc3VyZSB0aGF0IENPVyBoYXBwZW5zLiAg Ki8KKyAgICAgICAgICAgICAgICAgICAgICBkYmcgKHN0ZG91dCwgImhvZ3ZtIHdvcmtlciBt YWxsb2NlZCAlbGxpIGJ5dGVzXG4iLCBrKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgZWxzZSBpZiAoaWdub3JlKQorICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgKytyZXR2YWw7CisgICAgICAgICAgICAgICAgICAg ICAgd3JuIChzdGRlcnIsICJob2d2bSBtYWxsb2MgZmFpbGVkLCBjb250aW51aW5nXG4iKTsK KyAgICAgICAgICAgICAgICAgICAgICB1c2xlZXAgKHJldHJ5KTsKKyAgICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgKytyZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgZXJyIChzdGRlcnIsICJob2d2 bSBtYWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg aWYgKGdsb2JhbF92bWhhbmcgJiYgcmV0dmFsID09IDApCisgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgZGJnIChzdGRvdXQsICJzbGVlcGluZyBmb3JldmVyIHdpdGgg YWxsb2NhdGVkIG1lbW9yeVxuIik7CisgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkKKyAg ICAgICAgICAgICAgICAgICAgc2xlZXAgKDEwMjQpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgIGRiZyAoc3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAiaG9n dm0gd29ya2VyIGZyZWVpbmcgbWVtb3J5IGFuZCBzdGFydGluZyBvdmVyXG4iKTsKKyAgICAg ICAgICAgICAgICAgIGZvciAoaiA9IDA7IGNodW5rcyA9PSAwIHx8IGogPCBjaHVua3M7IGor KykgeworICAgICAgICAgICAgICAgICAgICAgIGZyZWUgKHB0cltqXSk7CisgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICBmcmVlKHB0cik7CisgICAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgZXhp dCAocmV0dmFsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIFRoaXMgY2FzZSBu ZXZlciBmYWxscyB0aHJvdWdoOyBhbGFybSBzaWduYWwgY2FuIGNhdXNlIGV4aXQuICAqLwor ICAgICAgICBjYXNlIC0xOiAgICAgICAgICAgICAgIC8qIGVycm9yICovCisgICAgICAgICAg aWYgKGlnbm9yZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKytyZXR2YWw7Cisg ICAgICAgICAgICAgIHdybiAoc3RkZXJyLCAiaG9ndm0gd29ya2VyIGZvcmsgZmFpbGVkLCBj b250aW51aW5nXG4iKTsKKyAgICAgICAgICAgICAgdXNsZWVwIChyZXRyeSk7CisgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgZXJyIChzdGRl cnIsICJob2d2bSB3b3JrZXIgZm9yayBmYWlsZWRcbiIpOworICAgICAgICAgIHJldHVybiAx OworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgIC8qIHBhcmVudCAqLworICAgICAg ICAgIGRiZyAoc3Rkb3V0LCAiLS0+IGhvZ3ZtIHdvcmtlciBmb3JrZWQgKCVpKVxuIiwgcGlk KTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBXYWl0IGZvciBvdXIgY2hpbGRyZW4gdG8g ZXhpdC4gICovCisgIHdoaWxlIChpKQorICAgIHsKKyAgICAgIGludCBzdGF0dXMsIHJldDsK KworICAgICAgaWYgKChwaWQgPSB3YWl0ICgmc3RhdHVzKSkgPiAwKQorICAgICAgICB7Cisg ICAgICAgICAgaWYgKChXSUZFWElURUQgKHN0YXR1cykpICE9IDApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGlmICgocmV0ID0gV0VYSVRTVEFUVVMgKHN0YXR1cykpICE9IDAp CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZXJyIChzdGRlcnIsICJo b2d2bSB3b3JrZXIgJWkgZXhpdGVkICVpXG4iLCBwaWQsIHJldCk7CisgICAgICAgICAgICAg ICAgICByZXR2YWwgKz0gcmV0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGRiZyAoc3Rkb3V0 LCAiPC0tIGhvZ3ZtIHdvcmtlciBleGl0ZWQgKCVpKVxuIiwgcGlkKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBkYmcgKHN0ZG91dCwgIjwtLSBob2d2bSB3b3JrZXIgc2lnbmFsbGVk ICglaSlcbiIsIHBpZCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAtLWk7CisgICAg ICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGRiZyAoc3Rkb3V0LCAi d2FpdCgpIHJldHVybmVkIGVycm9yOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAg ICAgICAgZXJyIChzdGRlcnIsICJkZXRlY3RlZCBtaXNzaW5nIGhvZ3ZtIHdvcmtlciBjaGls ZHJlblxuIik7CisgICAgICAgICAgKytyZXR2YWw7CisgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIHJldHZhbDsKK30KKworaW50Citob2doZGQgKGxv bmcgbG9uZyBmb3JrcywgaW50IGNsZWFuLCBsb25nIGxvbmcgZmlsZXMsIGxvbmcgbG9uZyBi eXRlcykKK3sKKyAgbG9uZyBsb25nIGksIGo7CisgIGludCBmZCwgcGlkLCByZXR2YWwgPSAw OworICBpbnQgY2h1bmsgPSAoMTAyNCAqIDEwMjQpIC0gMTsgICAgICAgIC8qIE1pbmltaXpl IHNsb3cgd3JpdGluZy4gICovCisgIGNoYXIgYnVmZltjaHVua107CisKKyAgLyogTWFrZSBs b2NhbCBjb3BpZXMgb2YgZ2xvYmFsIHZhcmlhYmxlcy4gICovCisgIGludCBpZ25vcmUgPSBn bG9iYWxfaWdub3JlOworICBpbnQgcmV0cnkgPSBnbG9iYWxfcmV0cnk7CisgIGludCB0aW1l b3V0ID0gZ2xvYmFsX3RpbWVvdXQ7CisgIGxvbmcgYmFja29mZiA9IGdsb2JhbF9iYWNrb2Zm ICogZm9ya3M7CisKKyAgLyogSW5pdGlhbGl6ZSBidWZmZXIgd2l0aCBzb21lIHJhbmRvbSBB U0NJSSBkYXRhLiAgKi8KKyAgZGJnIChzdGRvdXQsICJzZWVkaW5nIGJ1ZmZlciB3aXRoIHJh bmRvbSBkYXRhXG4iKTsKKyAgZm9yIChpID0gMDsgaSA8IGNodW5rIC0gMTsgaSsrKQorICAg IHsKKyAgICAgIGogPSByYW5kICgpOworICAgICAgaiA9IChqIDwgMCkgPyAtaiA6IGo7Cisg ICAgICBqICU9IDk1OworICAgICAgaiArPSAzMjsKKyAgICAgIGJ1ZmZbaV0gPSBqOworICAg IH0KKyAgYnVmZltpXSA9ICdcbic7CisKKyAgZGJnIChzdGRvdXQsICJ1c2luZyBiYWNrb2Zm IHNsZWVwIG9mICVsaXVzIGZvciBob2doZGRcbiIsIGJhY2tvZmYpOworCisgIGZvciAoaSA9 IDA7IGZvcmtzID09IDAgfHwgaSA8IGZvcmtzOyBpKyspCisgICAgeworICAgICAgc3dpdGNo IChwaWQgPSBmb3JrICgpKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDogICAgICAgICAg ICAgICAgLyogY2hpbGQgKi8KKyAgICAgICAgICBhbGFybSAodGltZW91dCk7CisKKyAgICAg ICAgICAvKiBVc2UgYSBiYWNrb2ZmIHNsZWVwIHRvIGVuc3VyZSB3ZSBnZXQgZ29vZCBmb3Jr IHRocm91Z2hwdXQuICAqLworICAgICAgICAgIHVzbGVlcCAoYmFja29mZik7CisKKyAgICAg ICAgICB3aGlsZSAoMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IGZpbGVzOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgY2hhciBuYW1lW10gPSAiLi9zdHJlc3MuWFhYWFhYIjsKKworICAgICAgICAgICAgICAg ICAgaWYgKChmZCA9IG1rc3RlbXAgKG5hbWUpKSA8IDApCisgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IgKCJta3N0ZW1wIik7CisgICAgICAg ICAgICAgICAgICAgICAgZXJyIChzdGRlcnIsICJta3N0ZW1wIGZhaWxlZFxuIik7CisgICAg ICAgICAgICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgICAgICAgaWYgKGNsZWFuID09IDApCisgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICBkYmcgKHN0ZG91dCwgInVubGlua2luZyAlc1xu IiwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHVubGluayAobmFtZSkpCisg ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVy ciAoc3RkZXJyLCAidW5saW5rIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIGV4aXQgKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIGRiZyAoc3Rkb3V0LCAiZmFzdCB3cml0 aW5nIHRvICVzXG4iLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGJ5 dGVzID09IDAgfHwgaiArIGNodW5rIDwgYnl0ZXM7IGogKz0gY2h1bmspCisgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGUgKGZkLCBidWZm LCBjaHVuaykgIT0gY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIGVyciAoc3RkZXJyLCAid3JpdGUgZmFpbGVkXG4iKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAoMSk7CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgZGJn IChzdGRvdXQsICJzbG93IHdyaXRpbmcgdG8gJXNcbiIsIG5hbWUpOworICAgICAgICAgICAg ICAgICAgZm9yICg7IGJ5dGVzID09IDAgfHwgaiA8IGJ5dGVzIC0gMTsgaisrKQorICAgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlIChmZCwg IloiLCAxKSAhPSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgICAgICBlcnIgKHN0ZGVyciwgIndyaXRlIGZhaWxlZFxuIik7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBpZiAod3JpdGUg KGZkLCAiXG4iLCAxKSAhPSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgZXJyIChzdGRlcnIsICJ3cml0ZSBmYWlsZWRcbiIpOworICAgICAgICAg ICAgICAgICAgICAgIGV4aXQgKDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICArK2o7CisKKyAgICAgICAgICAgICAgICAgIGRiZyAoc3Rkb3V0LCAiY2xv c2luZyAlcyBhZnRlciB3cml0aW5nICVsbGkgYnl0ZXNcbiIsIG5hbWUsCisgICAgICAgICAg ICAgICAgICAgICAgIGopOworICAgICAgICAgICAgICAgICAgY2xvc2UgKGZkKTsKKworICAg ICAgICAgICAgICAgICAgaWYgKGNsZWFuID09IDEpCisgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICBpZiAodW5saW5rIChuYW1lKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyIChzdGRlcnIs ICJ1bmxpbmsgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCAo MSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBkYmcgKHN0ZG91dCwgImhvZ2hk ZCB3b3JrZXIgc3RhcnRpbmcgb3ZlclxuIik7CisgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgZXhpdCAocmV0dmFsKTsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIFRoaXMgY2FzZSBuZXZlciBmYWxscyB0 aHJvdWdoOyBhbGFybSBzaWduYWwgY2FuIGNhdXNlIGV4aXQuICAqLworICAgICAgICBjYXNl IC0xOiAgICAgICAgICAgICAgIC8qIGVycm9yICovCisgICAgICAgICAgaWYgKGlnbm9yZSkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKytyZXR2YWw7CisgICAgICAgICAgICAg IHdybiAoc3RkZXJyLCAiaG9naGRkIHdvcmtlciBmb3JrIGZhaWxlZCwgY29udGludWluZ1xu Iik7CisgICAgICAgICAgICAgIHVzbGVlcCAocmV0cnkpOworICAgICAgICAgICAgICBjb250 aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGVyciAoc3RkZXJyLCAiaG9naGRk IHdvcmtlciBmb3JrIGZhaWxlZFxuIik7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg IGRlZmF1bHQ6ICAgICAgICAgICAgICAgLyogcGFyZW50ICovCisgICAgICAgICAgZGJnIChz dGRvdXQsICItLT4gaG9naGRkIHdvcmtlciBmb3JrZWQgKCVpKVxuIiwgcGlkKTsKKyAgICAg ICAgfQorICAgIH0KKworICAvKiBXYWl0IGZvciBvdXIgY2hpbGRyZW4gdG8gZXhpdC4gICov CisgIHdoaWxlIChpKQorICAgIHsKKyAgICAgIGludCBzdGF0dXMsIHJldDsKKworICAgICAg aWYgKChwaWQgPSB3YWl0ICgmc3RhdHVzKSkgPiAwKQorICAgICAgICB7CisgICAgICAgICAg aWYgKChXSUZFWElURUQgKHN0YXR1cykpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIGlmICgocmV0ID0gV0VYSVRTVEFUVVMgKHN0YXR1cykpICE9IDApCisgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgZXJyIChzdGRlcnIsICJob2doZGQgd29y a2VyICVpIGV4aXRlZCAlaVxuIiwgcGlkLCByZXQpOworICAgICAgICAgICAgICAgICAgcmV0 dmFsICs9IHJldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBkYmcgKHN0ZG91dCwgIjwtLSBo b2doZGQgd29ya2VyIGV4aXRlZCAoJWkpXG4iLCBwaWQpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIGRiZyAoc3Rkb3V0LCAiPC0tIGhvZ2hkZCB3b3JrZXIgc2lnbmFsbGVkICglaSlc biIsIHBpZCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAtLWk7CisgICAgICAgIH0K KyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGRiZyAoc3Rkb3V0LCAid2FpdCgp IHJldHVybmVkIGVycm9yOiAlc1xuIiwgc3RyZXJyb3IgKGVycm5vKSk7CisgICAgICAgICAg ZXJyIChzdGRlcnIsICJkZXRlY3RlZCBtaXNzaW5nIGhvZ2hkZCB3b3JrZXIgY2hpbGRyZW5c biIpOworICAgICAgICAgICsrcmV0dmFsOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisgICAgfQorCisgIHJldHVybiByZXR2YWw7Cit9CmRpZmYgLXVyTiBrdm1fcnVudGVzdF8y LmJhay9rdm1fcnVudGVzdF8yLnB5IGt2bV9ydW50ZXN0XzIva3ZtX3J1bnRlc3RfMi5weQot LS0ga3ZtX3J1bnRlc3RfMi5iYWsva3ZtX3J1bnRlc3RfMi5weQkyMDA5LTA0LTI5IDA2OjE3 OjI5LjAwMDAwMDAwMCAtMDQwMAorKysga3ZtX3J1bnRlc3RfMi9rdm1fcnVudGVzdF8yLnB5 CTIwMDktMDQtMjkgMDg6MDY6MzIuMDAwMDAwMDAwIC0wNDAwCkBAIC0zNiw2ICszNiw4IEBA CiAgICAgICAgICAgICAgICAgImF1dG90ZXN0IjogICAgIHRlc3Rfcm91dGluZSgia3ZtX3Rl c3RzIiwgICAgICAgICAgICJydW5fYXV0b3Rlc3QiKSwKICAgICAgICAgICAgICAgICAia3Zt X2luc3RhbGwiOiAgdGVzdF9yb3V0aW5lKCJrdm1faW5zdGFsbCIsICAgICAgICAgInJ1bl9r dm1faW5zdGFsbCIpLAogICAgICAgICAgICAgICAgICJsaW51eF9zMyI6ICAgICB0ZXN0X3Jv dXRpbmUoImt2bV90ZXN0cyIsICAgICAgICAgICAicnVuX2xpbnV4X3MzIiksCisgICAgICAg ICAgICAgICAgIm50cF9zZXJ2ZXJfc2V0dXAiOiB0ZXN0X3JvdXRpbmUoImt2bV90ZXN0cyIs ICAgICAgICJydW5fbnRwX3NlcnZlcl9zZXR1cCIpLAorICAgICAgICAgICAgICAgICJ0aW1l ZHJpZnQiOiAgICB0ZXN0X3JvdXRpbmUoImt2bV90ZXN0cyIsICAgICAgICAgICAicnVuX3Rp bWVkcmlmdCIpLAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAjIE1ha2UgaXQgcG9z c2libGUgdG8gaW1wb3J0IG1vZHVsZXMgZnJvbSB0aGUgdGVzdCdzIGJpbmRpcgpkaWZmIC11 ck4ga3ZtX3J1bnRlc3RfMi5iYWsva3ZtX3Rlc3RzLmNmZy5zYW1wbGUga3ZtX3J1bnRlc3Rf Mi9rdm1fdGVzdHMuY2ZnLnNhbXBsZQotLS0ga3ZtX3J1bnRlc3RfMi5iYWsva3ZtX3Rlc3Rz LmNmZy5zYW1wbGUJMjAwOS0wNC0yOSAwNjoxNzoyOS4wMDAwMDAwMDAgLTA0MDAKKysrIGt2 bV9ydW50ZXN0XzIva3ZtX3Rlc3RzLmNmZy5zYW1wbGUJMjAwOS0wNS0xNCAwMjoyMzozMS4w MDAwMDAwMDAgLTA0MDAKQEAgLTgxLDYgKzgxLDExIEBACiAgICAgLSBsaW51eF9zMzogICAg ICBpbnN0YWxsIHNldHVwCiAgICAgICAgIHR5cGUgPSBsaW51eF9zMwogCisgICAgLSBudHBf c2VydmVyX3NldHVwOgorICAgICAgICB0eXBlID0gbnRwX3NlcnZlcl9zZXR1cAorICAgIC0g dGltZWRyaWZ0OiAgICAgIG50cF9zZXJ2ZXJfc2V0dXAKKyAgICAgICAgdHlwZSA9IHRpbWVk cmlmdAorICAgICAgICBzdHJlc3NfdGVzdF9zcGVjaWZ5ID0gJy4vc3RyZXNzIC1jIDEwIC0t dGltZW91dCAyNDBtJwogIyBOSUNzCiB2YXJpYW50czoKICAgICAtIEBydGw4MTM5OgpkaWZm IC11ck4ga3ZtX3J1bnRlc3RfMi5iYWsva3ZtX3Rlc3RzLnB5IGt2bV9ydW50ZXN0XzIva3Zt X3Rlc3RzLnB5Ci0tLSBrdm1fcnVudGVzdF8yLmJhay9rdm1fdGVzdHMucHkJMjAwOS0wNC0y OSAwNjoxNzoyOS4wMDAwMDAwMDAgLTA0MDAKKysrIGt2bV9ydW50ZXN0XzIva3ZtX3Rlc3Rz LnB5CTIwMDktMDUtMTUgMDU6MDQ6MzUuMDAwMDAwMDAwIC0wNDAwCkBAIC0zOTQsMyArMzk0 LDI3OSBAQAogICAgIGt2bV9sb2cuaW5mbygiVk0gcmVzdW1lZCBhZnRlciBTMyIpCiAKICAg ICBzZXNzaW9uLmNsb3NlKCkKKworZGVmIHJ1bl9udHBfc2VydmVyX3NldHVwKHRlc3QsIHBh cmFtcywgZW52KToKKyAgICAKKyAgICAiIiJOVFAgc2VydmVyIGNvbmZpZ3VyYXRpb24gYW5k IHJlbGF0ZWQgbmV0d29yayBmaWxlIG1vZGlmaWNhdGlvbgorICAgICIiIgorCisgICAga3Zt X2xvZy5pbmZvKCJzdG9wIHRoZSBpcHRhYmxlcyBzZXJ2aWNlIGlmIGl0IGlzIHJ1bm5pbmcg Zm9yIHRpbWVkcmlmdCB0ZXN0aW5nIikKKworICAgIGlmIHV0aWxzLnN5c3RlbSgiL2V0Yy9p bml0LmQvaXB0YWJsZXMgc3RhdHVzIiwgaWdub3JlX3N0YXR1cz1UcnVlKSA9PSAwOgorICAg ICAgICB1dGlscy5zeXN0ZW0oIi9ldGMvaW5pdC5kL2lwdGFibGVzIHN0b3AiLCBpZ25vcmVf c3RhdHVzPVRydWUpCisKKworICAgICMgcHJldmVudCBkaGNwIGNsaWVudCBtb2RpZnkgdGhl IG50cC5jb25mCisgICAga3ZtX2xvZy5pbmZvKCJwcmV2ZW50IGRoY3AgY2xpZW50IG1vZGlm eSB0aGUgbnRwLmNvbmYiKQorCisgICAgY29uZmlnX2ZpbGUgPSAiL2V0Yy9zeXNjb25maWcv bmV0d29yayIKKyAgICBuZXR3b3JrX2ZpbGUgPSBvcGVuKCIvZXRjL3N5c2NvbmZpZy9uZXR3 b3JrIiwgImEiKQorICAgIHN0cmluZyA9ICJQRUVSTlRQPW5vIgorCisgICAgaWYgb3Muc3lz dGVtKCJncmVwICVzICVzIiAlIChzdHJpbmcsIGNvbmZpZ19maWxlKSk6CisgICAgICAgIG5l dHdvcmtfZmlsZS53cml0ZWxpbmVzKHN0cihzdHJpbmcpKydcbicpCisgICAgCisgICAgbmV0 d29ya19maWxlLmNsb3NlKCkKKyAgCisgICAgIyBzdG9wIHRoZSBudHAgc2VydmljZSBpZiBp dCBpcyBydW5uaW5nCisgICAga3ZtX2xvZy5pbmZvKCJzdG9wIG50cCBzZXJ2aWNlIGlmIGl0 IGlzIHJ1bm5pbmciKQorCisgICAgaWYgdXRpbHMuc3lzdGVtKCIvZXRjL2luaXQuZC9udHBk IHN0YXR1cyIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkgPT0gMDoKKyAgICAgICAgdXRpbHMuc3lz dGVtKCIvZXRjL2luaXQuZC9udHBkIHN0b3AiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisKKyAg ICBrdm1fbG9nLmluZm8oInN0YXJ0IG50cCBzZXJ2ZXIgb24gaG9zdCB3aXRoIHRoZSBjdXN0 b20gY29uZmlnIGZpbGUuIikKKworICAgIG50cF9jbWQgPSAnJycKKyAgICAgICAgZWNobyAi cmVzdHJpY3QgZGVmYXVsdCBrb2Qgbm9tb2RpZnkgbm90cmFwIG5vcGVlciBub3F1ZXJ5IiA+ IC9ldGMvdGltZWRyaWZ0Lm50cC5jb25mO1wKKyAgICAgICAgZWNobyAicmVzdHJpY3QgMTI3 LjAuMC4xIiA+PiAvZXRjL3RpbWVkcmlmdC5udHAuY29uZjtcCisgICAgICAgIGVjaG8gImRy aWZ0ZmlsZSAvdmFyL2xpYi9udHAvZHJpZnQiID4+IC9ldGMvdGltZWRyaWZ0Lm50cC5jb25m O1wKKyAgICAgICAgZWNobyAia2V5cyAvZXRjL250cC9rZXlzIiA+PiAvZXRjL3RpbWVkcmlm dC5udHAuY29uZjtcCisgICAgICAgIGVjaG8gInNlcnZlciAxMjcuMTI3LjEuMCIgPj4gL2V0 Yy90aW1lZHJpZnQubnRwLmNvbmY7XAorICAgICAgICBlY2hvICJmdWRnZSAxMjcuMTI3LjEu MCBzdHJhdHVtIDEiID4+IC9ldGMvdGltZWRyaWZ0Lm50cC5jb25mO1wKKyAgICAgICAgbnRw ZCAtYyAvZXRjL3RpbWVkcmlmdC5udHAuY29uZjsKKyAgICAgICAgJycnCisKKyAgICB0cnk6 CisgICAgICAgIHV0aWxzLnN5c3RlbShudHBfY21kKQorICAgIGV4Y2VwdDoKKyAgICAgICAg cmFpc2UgZXJyb3IuVGVzdEZhaWwsICJOVFAgc2VydmVyIGhhcyBub3Qgc3RhcnRpbmcgY29y cmVjdGx5Li4uIgorCitkZWYgcnVuX3RpbWVkcmlmdCh0ZXN0LCBwYXJhbXMsIGVudik6Cisg ICAgIiIianVkZ2Ugd2hldGhlciB0aGUgZ3Vlc3QgY2xvY2sgd2lsbCBlbmNvdW50ZXIgdGlt ZWRyaWZ0IHByYmxlbSBvciBub3QuIGluY2x1ZGluZyB0aHJlZSBzdGFnZXM6CisgICAgICAg MTogdHJ5IHRvIHN5bmMgdGhlIGNsb2NrIHdpdGggaG9zdCwgaWYgdGhlIG9mZnNldCB2YWx1 ZSBvZiBndWVzdCBjbG9jayBpcyBsYXJnZSB0aGFuIDEgc2VjLgorICAgICAgIDI6IHJ1bm5p bmcgdGhlIHN0cmVzcyB0ZXN0aW5nIHByb2dyYW0gd2hpY2ggaXMgaGFjayBmcm9tIExUUCBv biBndWVzdC4KKyAgICAgICAzOiB0aGVuIHJ1biBhbmFseXplIGxvb3AgdG90YWxseSAyMCB0 aW1lcyB0byBkZXRlcm1pbmUgaWYgdGhlIGNsb2NrIG9uIGd1ZXN0IGhhcyB0aW1lIGRyaWZ0 LgorICAgICIiIgorICAgICMgdmFyaWFibGVzIHVzaW5nIGluIHRpbWVkcmlmdCB0ZXN0Y2Fz ZQorICAgIGZsYWcgPSBUcnVlCisKKyAgICBjcHVfc3RyZXNzX3Byb2dyYW0gPSAnZ2VubG9h ZCcKKyAgICByZW1vdGVfZGlyID0gJy8nCisKKyAgICBjbG9ja19yZXNvdXJjZV91c2VkID0g J2NhdCAvc3lzL2RldmljZXMvc3lzdGVtL2Nsb2Nrc291cmNlL2Nsb2Nrc291cmNlMC9jdXJy ZW50X2Nsb2Nrc291cmNlJworICAgIGNsb2NrX3Jlc291cmNlX2F2YWlsYWJsZSA9ICdjYXQg L3N5cy9kZXZpY2VzL3N5c3RlbS9jbG9ja3NvdXJjZS9jbG9ja3NvdXJjZTAvYXZhaWxhYmxl X2Nsb2Nrc291cmNlJworCisgICAgcHdkID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bJ0FV VE9ESVInXSwndGVzdHMva3ZtX3J1bnRlc3RfMicpCisgICAgc3RyZXNzX3Rlc3RfZGlyID0g b3MucGF0aC5qb2luKHB3ZCwgY3B1X3N0cmVzc19wcm9ncmFtKQorCisgICAgc3RyZXNzX3Rl c3Rfc3BlY2lmeSA9IHBhcmFtcy5nZXQoJ3N0cmVzc190ZXN0X3NwZWNpZnknKQorICAgIGt2 bV9sb2cuaW5mbygic3RyZXNzIHRlc3Rpbmcgd2lsbCBydW5uaW5nIDolcyIgJSBzdHJlc3Nf dGVzdF9zcGVjaWZ5KQorICAgIHN0cmVzc19jbWRsaW5lID0gJ2NkICVzJXMmJm1ha2UmJiVz ICYnICUgKHJlbW90ZV9kaXIsIG9zLnBhdGguYmFzZW5hbWUoc3RyZXNzX3Rlc3RfZGlyKSwg c3RyZXNzX3Rlc3Rfc3BlY2lmeSkKKworICAgIHN0cmVzc19zZWFyY2hfY21kbGluZSA9ICJw cyAtZWZ8Z3JlcCAnc3RyZXNzJ3xncmVwIC12IGdyZXAiCisKKyAgICBob3N0bmFtZSA9IHNv Y2tldC5nZXRob3N0bmFtZSgpCisgICAgaWYgImxvY2FsaG9zdC5sb2NhbGRvbWFpbiIgPT0g aG9zdG5hbWU6CisgICAgICAgIGhvc3RuYW1lID0gb3MucG9wZW4oJ2hvc3RuYW1lJykucmVh ZCgpLnNwbGl0KCdcbicpWzBdCisgICAgICAgIGt2bV9sb2cuaW5mbygic2luY2UgZ2V0IHdy b25nIGhvc3RuYW1lIGZyb20gcHl0aG9uIGV2bmlyb25tZW50LCB0aGVuIHVzZSB0aGUgaG9z dG5hbWUgZ2V0IGZyb20gc3lzdGVtIGNhbGwoaG9zdG5hbWUpLiIpCisKKyAgICBrdm1fbG9n LmluZm8oImdldCBob3N0IG5hbWUgOiVzIiAlIGhvc3RuYW1lKQorCisgICAgIyBudHBkYXRl IGluZm8gY29tbWFuZCBhbmQgbnRwZGF0ZSBzeW5jIGNvbW1hbmQKKyAgICBudHBkYXRlX2lu Zm9fY21kID0gIm50cGRhdGUgLXEgJXMiICUgaG9zdG5hbWUKKyAgICBudHBkYXRlX3N5bmNf Y21kID0gIm50cGRhdGUgJXMiICUgaG9zdG5hbWUKKworICAgICMgZ2V0IHZtIGhhbmRsZQor ICAgIHZtID0ga3ZtX3V0aWxzLmVudl9nZXRfdm0oZW52LHBhcmFtcy5nZXQoIm1haW5fdm0i KSkKKyAgICBpZiBub3Qgdm06CisgICAgICAgIHJhaXNlIGVycm9yLlRlc3RFcnJvciwgIlZN IG9iamVjdCBub3QgZm91bmQgaW4gZW52aXJvbm1lbnQiCisgICAgaWYgbm90IHZtLmlzX2Fs aXZlKCk6CisgICAgICAgIHJhaXNlIGVycm9yLlRlc3RFcnJvciwgIlZNIHNlZW1zIHRvIGJl IGRlYWQ7IFRlc3QgcmVxdWlyZXMgYSBsaXZpbmcgVk0iCisKKyAgICBrdm1fbG9nLmluZm8o IldhaXRpbmcgZm9yIGd1ZXN0IHRvIGJlIHVwLi4uIikKKworICAgIHB4c3NoID0ga3ZtX3V0 aWxzLndhaXRfZm9yKHZtLnNzaF9sb2dpbiwgMjQwLCAwLCAyKQorICAgIGlmIG5vdCBweHNz aDoKKyAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWwsICJDb3VsZCBub3QgbG9nIGludG8g Z3Vlc3QiCisKKyAgICBrdm1fbG9nLmluZm8oIkxvZ2dlZCBpbnRvIGd1ZXN0IElOIHJ1bl90 aW1lZHJpZnQgZnVuY3Rpb24uIikKKworICAgICMgY2xvY2sgcmVzb3VyY2UgZ2V0IGZyb20g aG9zdCBhbmQgZ3Vlc3QKKyAgICBkZWYgY2xvY2tfc291cmNlX2luZm8ocHhzc2gsY2xvY2tf cmVzb3VyY2VfdXNlZCxmbGFnKToKKyAgICAgICAga3ZtX2xvZy5pbmZvKCIqKioqKioqKioq KioqKioqKiogY2xvY2sgcmVzb3VyY2UgaW5mbyAqKioqKioqKioqKioqKioqKioiKQorICAg ICAgICBob3N0X2Nsb2NrX3Jlc291cmNlID0gb3MucG9wZW4oY2xvY2tfcmVzb3VyY2VfdXNl ZCkucmVhZCgpLnNwbGl0KCdcbicpWzBdCisgICAgICAgIGt2bV9sb2cuaW5mbygidGhlIGNs b2NrIHJlc291cmNlIG9uIEhPU1QgaXMgOiVzIiAlIGhvc3RfY2xvY2tfcmVzb3VyY2UpCisg ICAgCisgICAgICAgIHB4c3NoLnNlbmRsaW5lKGNsb2NrX3Jlc291cmNlX3VzZWQpCisgICAg ICAgIHMsIG8gPSBweHNzaC5yZWFkX3VwX3RvX3Byb21wdCgpCisgICAgICAgIGd1ZXN0X2Ns b2NrX3Jlc291cmNlID0gby5zcGxpdGxpbmVzKClbLTJdCisgICAgICAgIGt2bV9sb2cuaW5m bygidGhlIGNsb2NrIHJlc291cmNlIHVzaW5nIG9uIEdVRVNUIDolcyIgJSBndWVzdF9jbG9j a19yZXNvdXJjZSkKKworICAgICAgICBweHNzaC5zZW5kbGluZShjbG9ja19yZXNvdXJjZV9h dmFpbGFibGUpCisgICAgICAgIHMsIG8gPSBweHNzaC5yZWFkX3VwX3RvX3Byb21wdCgpCisg ICAgICAgIGd1ZXN0X2Nsb2NrX3Jlc291cmNlX2F2YWlsYWJsZSA9IG8uc3BsaXRsaW5lcygp Wy0yXQorICAgICAgICBrdm1fbG9nLmluZm8oImNsb2NrIHJlc291cmNlIGF2YWlsYWJsZSBv biBHVUVTVCA6JXMiICUgZ3Vlc3RfY2xvY2tfcmVzb3VyY2VfYXZhaWxhYmxlKQorICAgICAg ICBrdm1fbG9nLmluZm8oIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiIpCisKKyAgICAgICAgaWYgaG9zdF9jbG9ja19yZXNvdXJj ZSAhPSBndWVzdF9jbG9ja19yZXNvdXJjZToKKyAgICAgICAgICAgICNyYWlzZSBlcnJvci5U ZXN0RmFpbCwgIkhvc3QgYW5kIEd1ZXN0IHVzaW5nIGRpZmZlcmVudCBjbG9jayByZXNvdXJj ZSIKKyAgICAgICAgICAgIGt2bV9sb2cuaW5mbygiSG9zdCBhbmQgR3Vlc3QgdXNpbmcgZGlm ZmVyZW50IGNsb2NrIHJlc291cmNlLExldCdzIG1vdmUgb24uIikKKyAgICAgICAgZWxzZToK KyAgICAgICAgICAgIGt2bV9sb2cuaW5mbygiSG9zdCBhbmQgR3Vlc3QgdXNpbmcgc2FtZSBj bG9jayByZXNvdXJjZSxMZXQncyBtb3ZlIG9uLiIpCisgICAgCisgICAgICAgIGlmIGZsYWc6 CisgICAgICAgICAgICBmbGFnID0gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBndWVzdF9j bG9ja19yZXNvdXJjZSwgZ3Vlc3RfY2xvY2tfcmVzb3VyY2VfYXZhaWxhYmxlLCBmbGFnCisg ICAgCisgICAgIyBhIGVudGlyZSBwcm9jZXNzIHRvIGdldCBudHBkYXRlIGNvbW1hbmQgbGlu ZSByZXN1bHQgZnJvbSBndWVzdC4KKyAgICBkZWYgbnRwZGF0ZV9vcChjb21tYW5kKToKKyAg ICAgICAgb3V0cHV0ID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHhzc2ggPSBr dm1fdXRpbHMud2FpdF9mb3Iodm0uc3NoX2xvZ2luLCAyNDAsIDAsIDIpCisgICAgICAgICAg ICBpZiBub3QgcHhzc2g6CisgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IuVGVzdEZhaWws ICJDb3VsZCBub3QgbG9nIGludG8gZ3Vlc3QiCisKKyAgICAgICAgICAgIGt2bV9sb2cuaW5m bygiTG9nZ2VkIGluOihudHBkYXRlX29wKSIpCisKKyAgICAgICAgICAgIHdoaWxlIFRydWU6 CisgICAgICAgICAgICAgICAgcHhzc2guc2VuZGxpbmUoY29tbWFuZCkKKyAgICAgICAgICAg ICAgICBzLCBvdXRwdXQgPSBweHNzaC5yZWFkX3VwX3RvX3Byb21wdCgpCisgICAgICAgICAg ICAgICAgaWYgInRpbWUgc2VydmVyIiBpbiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgICAg ICMgb3V0cHV0IGlzIGEgc3RyaW5nIGNvbnRhaW4gdGhlIChudHBkYXRlIC1xKSBpbmZvciBv biBndWVzdAorICAgICAgICAgICAgICAgICAgICBweHNzaC5jbG9zZSgpCisgICAgICAgICAg ICAgICAgICAgIHJldHVybiBUcnVlLCBvdXRwdXQKKyAgICAgICAgICAgICAgICBlbHNlOgor ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBleGNlcHQ6CisgICAgICAg ICAgICBweHNzaC5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIG91dHB1dAor ICAgICAgICByZXR1cm4gRmFsc2UsIG91dHB1dAorCisgICAgIyBnZXQgdGhlIG51bWVyaWMg aGFuZGluZyBieSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIG1ha2UgdGltZWRyaWZ0IGNhbHVs YXRpb24uCisgICAgZGVmIHRpbWVfZHJpZnRfb3Jfbm90KG91dHB1dCk6CisgICAgICAgIGRh dGVfc3RyaW5nID0gcmUuZmluZGFsbChyJ29mZnNldCBbKy1dPyguKikgc2VjJywgb3V0cHV0 LCByZS5NKQorICAgICAgICBudW0gPSBmbG9hdChkYXRlX3N0cmluZ1swXSkKKyAgICAgICAg aWYgbnVtID49IDE6CisgICAgICAgICAgICBrdm1fbG9nLmluZm8oImd1ZXN0IGNsb2NrIGhh cyBkcmlmdGVkIGluIHRoaXMgc2NlbmFyaW8gOiVzICVzIiAlIChkYXRlX3N0cmluZywgbnVt KSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAga3ZtX2xvZy5pbmZvKCJndWVzdCBjbG9jayBydW5uaW5nIHZlcmFjaW91cyBpbiBub3cg c3RhZ2UgOiVzICVzIiAlIChkYXRlX3N0cmluZywgbnVtKSkKKyAgICAgICAgICAgIHJldHVy biBUcnVlCisKKyAgICAjIGdldCBjbG9jayBzb3VyY2UgaW5mb3IgZnJvbSBmdW5jdGlvbgor ICAgIChndWVzdF9jbG9ja19yZXNvdXJjZSwgZ3Vlc3RfY2xvY2tfcmVzb3VyY2VfYXZhaWxh YmxlLCBmbGFnKSA9IGNsb2NrX3NvdXJjZV9pbmZvKHB4c3NoLCBjbG9ja19yZXNvdXJjZV91 c2VkLCBmbGFnKQorCisgICAgIyBzZW5kIHRoZSBjb21tYW5kIGFuZCBnZXQgdGhlIG91cHV0 IGZyb20gZ3Vlc3QKKyAgICAjIHRoaXMgbG9vcCB3aWxsIHBpY2sgb3V0IHNldmVyYWwgY29u ZGl0aW9ucyBuZWVkIHRvIGJlIHByb2Nlc3MKKyAgICAjIEFjdHVhbGx5LCB3ZSB3YW50IHRv IGdldCB0aGUgaW5mbyBtYXRjaCAidGltZSBzZXJ2ZXIiLCB0aGVuIHNjcmlwdCBjYW4gYW5h bHl6aW5nIGl0IHRvCisgICAgIyBkZXRlcm1pbmUgaWYgZ3Vlc3QncyBjbG9jayBuZWVkIHN5 bmMgd2l0aCBob3N0IG9yIG5vdC4KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBweHNzaC5z ZW5kbGluZShudHBkYXRlX2luZm9fY21kKQorICAgICAgICBzLCBvdXRwdXQgPSBweHNzaC5y ZWFkX3VwX3RvX3Byb21wdCgpCisgICAgICAgIGt2bV9sb2cuaW5mbygidGhlIG50cGRhdGUg cXVlcnkgaW5mbyBnZXQgZnJvbSBndWVzdCBpcyBiZWxvdzogXG4lcyIgJW91dHB1dCkKKyAg ICAgICAgaWYgKCJubyBzZXJ2ZXIgc3VpdGFibGUiIG5vdCBpbiBvdXRwdXQpIGFuZCAoInRp bWUgc2VydmVyIiBub3QgaW4gb3V0cHV0KToKKyAgICAgICAgICAgIGt2bV9sb2cuaW5mbygi dmVyeSBjcmVhenlpbmcgb3V0cHV0IGdvdC4gbGV0J3MgdHJ5IGFnYWluIikKKyAgICAgICAg ICAgIGNvbnRpbnVlCisgICAgICAgIGVsaWYgIm5vIHNlcnZlciBzdWl0YWJsZSIgaW4gb3V0 cHV0OgorICAgICAgICAgICAga3ZtX2xvZy5pbmZvKCJzZWVtcyBOVFAgc2VydmVyIGlzIG5v dCByZWFkeSBmb3Igc2VydmljaW5nIikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMzApCisg ICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbGlmICJ0aW1lIHNlcnZlciIgaW4gb3V0 cHV0OgorICAgICAgICAgICAgIyBnZXQgdGhlIG50cGRhdGUgaW5mbyBmcm9tIGd1ZXN0Cisg ICAgICAgICAgICAjIGt2bV9sb2cuaW5mbygiR290IHRoZSBjb3JyZWN0IG91dHB1dCBmb3Ig YW5hbHl6ZS4gVGhlIG91dHB1dCBpcyBiZWxvdzogXG4lcyIgJW91dHB1dCkgCisgICAgICAg ICAgICBicmVhaworCisgICAga3ZtX2xvZy5pbmZvKCJnZXQgdGhlIG50cGRhdGUgaW5mb21h dGlvbiBmcm9tIGd1ZXN0IHN1Y2Nlc3NmdWxseSA6JXMiICUgb3MucG9wZW4oJ2RhdGUnKS5y ZWFkKCkpCisKKyAgICAjIGp1ZGdlIHRoZSBjbG9jayBuZWVkIHRvIHN5bmMgd2l0aCBob3N0 IG9yIG5vdAorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGRhdGVfc3RyaW5nID0gcmUuZmlu ZGFsbChyJ29mZnNldCBbKy1dPyguKikgc2VjJywgb3V0cHV0LCByZS5NKQorICAgICAgICBu dW0gPSBmbG9hdChkYXRlX3N0cmluZ1swXSkKKyAgICAgICAgaWYgbnVtID49IDE6CisgICAg ICAgICAgICBrdm1fbG9nLmluZm8oImd1ZXN0IG5lZWQgc3luYyB3aXRoIHRoZSBzZXJ2ZXI6 ICVzIiAlIGhvc3RuYW1lKQorICAgICAgICAgICAgcywgb3V0cHV0ID0gbnRwZGF0ZV9vcChu dHBkYXRlX3N5bmNfY21kKQorICAgICAgICAgICAgI3ByaW50ICIkJCQkJCQkJCQkJCQkJCQk JCQkIgorICAgICAgICAgICAgI3ByaW50IG91dHB1dAorICAgICAgICAgICAgI3ByaW50ICIk JCQkJCQkJCQkJCQkJCQkJCQkIgorICAgICAgICAgICAgaWYgczoKKyAgICAgICAgICAgICAg ICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI3B4c3NoLnNlbmRsaW5l KCJod2Nsb2NrIC0tc3lzdG9oYyIpCisgICAgICAgICAgICAja3ZtX2xvZy5pbmZvKCJndWVz dCBjbG9jayBzeW5jIHByY2R1cmUgaXMgZmluaXNoZWQuIHRoZW4gc3luYyB0aGUgZ3Vlc3Qg Y2xvY2sgdG8gZ3Vlc3QgYmlvcy4iKQorICAgICAgICAgICAgI3B4c3NoLnNlbmRsaW5lKCJo d2Nsb2NrIC0tc2hvdyIpCisgICAgICAgICAgICAjcywgbyA9IHB4c3NoLnJlYWRfdXBfdG9f cHJvbXB0KCkKKyAgICAgICAgICAgICNrdm1fbG9nLmluZm8oInRoZSBkYXRlIGluZm9tYXRp b24gZ2V0IGZyb20gZ3Vlc3QgYmlvcyBpcyA6XG4lcyIgJSBvKQorCisgICAgICAgICAgICBw eHNzaC5zZW5kbGluZShudHBkYXRlX2luZm9fY21kKQorICAgICAgICAgICAgcywgbyA9IHB4 c3NoLnJlYWRfdXBfdG9fcHJvbXB0KCkKKyAgICAgICAgICAgIGt2bV9sb2cuaW5mbygiZ3Vl c3QgY2xvY2sgYWZ0ZXIgc3luYyB3aXRoIGhvc3QgaXMgOlxuJXMiICUgbykKKworICAgICAg ICAgICAgYnJlYWsKKworICAgIGt2bV9sb2cuaW5mbygiVGltZWRyaWZ0IFByZXBhcmF0aW9u ICpGaW5pc2hlZCogYXQgbGFzdCA6JXMiICUgb3MucG9wZW4oJ2RhdGUnKS5yZWFkKCkpCisK KyAgICBpZiBub3Qgdm0uc2NwX3RvX3JlbW90ZShzdHJlc3NfdGVzdF9kaXIsIHJlbW90ZV9k aXIpOgorICAgICAgICByYWlzZSBlcnJvci5UZXN0RXJyb3IsICJDb3VsZCBub3QgY29weSBw cm9ncmFtIHRvIGd1ZXN0LiIKKworICAgICMgcnVubmluZyB0aGUgbnRwIHF1ZXJ5IGNvbW1h bmQgYmVmb3JlIHRoZSBzdHJlc3MgcHJvY2VzcworICAgIHB4c3NoLnNlbmRsaW5lKG50cGRh dGVfaW5mb19jbWQpCisgICAgcywgbyA9IHB4c3NoLnJlYWRfdXBfdG9fcHJvbXB0KCkKKyAg ICBrdm1fbG9nLmluZm8oInRoZSBudHBkYXRlIHF1ZXJ5IGZyb20gaG9zdCAqQkVGT1JFKiBy dW5uaW5nIHRoZSBjcHUgc3RyZXNzIHByb2dyYW0uXG4lcyIgJSBvKQorCisgICAgIyBzdGFy dCBydW5uaW5nIHN0cmVzcyBwcm9jZXNzCisgICAgaWYgcHhzc2guZ2V0X2NvbW1hbmRfc3Rh dHVzKHN0cmVzc19jbWRsaW5lKSA9PSAwOgorICAgICAgICBzLCBvID0gcHhzc2gucmVhZF91 cF90b19wcm9tcHQoKQorICAgICAgICBrdm1fbG9nLmluZm8oInJ1bm5pbmcgY29tbWFuZCBs aW5lIG9uIGd1ZXN0IGFuZCBzbGVlcGluZyBmb3IgMTIwMCBzZWNzLlxuJXMiICUgbykKKyAg ICBlbHNlOgorICAgICAgICBzLCBvID0gcHhzc2gucmVhZF91cF90b19wcm9tcHQoKQorICAg ICAgICByYWlzZSBlcnJvci5UZXN0RXJyb3IsICJDb3VsZCBub3QgZm91bmQgR0NDIG9uIHRo ZSBndWVzdC5cbiVzIiAlIG8KKworICAgIHRpbWUuc2xlZXAoMTIwMCkKKworICAgICMgcXVl cnkgZm9yIHRoZSBzdHJlc3MgcHJvY2VzcyBldmVyeSA2MCBzZWNzIHRvIGluZGV0aWZ5IHdo ZXRoZXIgdGhlIHN0cmVzcyBwcm9jZXNzIGlzIGZpbmlzaGVkIG9yIG5vdAorICAgIHdoaWxl IFRydWU6CisgICAgICAgIGlmIHB4c3NoLmdldF9jb21tYW5kX3N0YXR1cyhzdHJlc3Nfc2Vh cmNoX2NtZGxpbmUpID09IDA6CisgICAgICAgICAgICBwcmludCAic3RyZXNzIHRlc3Rpbmcg b24gQ1BVIGhhcyBub3QgZmluaXNoZWQgeWV0LndhaXRpbmcgZm9yIG5leHQgZGV0ZWN0IGFm dGVyIHNsZWVwIDYwIHNlY3MuIgorICAgICAgICAgICAgdGltZS5zbGVlcCg2MCkKKyAgICAg ICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjKHMsIG8pID0g cHhzc2guZ2V0X2NvbW1hbmRfc3RhdHVzX291dHB1dChzdHJlc3Nfc2VhcmNoX2NtZGxpbmUp CisgICAgICAgICAgICAjcHJpbnQgInMgaXMgOiVzIiAlIHMKKyAgICAgICAgICAgICNwcmlu dCAibyBpcyA6JXMiICUgbworICAgICAgICAgICAgI3ByaW50ICItLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICAgICAgICAgICNhYWEgPSBweHNz aC5nZXRfY29tbWFuZF9zdGF0dXMoc3RyZXNzX3NlYXJjaF9jbWRsaW5lKQorICAgICAgICAg ICAgI3ByaW50ICJhYWEgaXMgOiVzIiAlIGFhYQorICAgICAgICAgICAgI3ByaW50ICItLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKworICAgICAgICAg ICAgcHJpbnQgInN0cmVzcyB0ZXN0aW5nIHByb2Nlc3MgaGFzIGJlZW4gY29tcGxldGVkIGFu ZCBxdWl0LiIKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAjIHJ1bmluZyB0aGUgbnRwIHF1 ZXJ5IGNvbW1uZCBhZnRlciB0aGUgc3RyZXNzIHByb2Nlc3MKKyAgICBweHNzaC5zZW5kbGlu ZShudHBkYXRlX2luZm9fY21kKQorICAgIHMsIG8gPSBweHNzaC5yZWFkX3VwX3RvX3Byb21w dCgpCisgICAga3ZtX2xvZy5pbmZvKCJ0aGUgbnRwZGF0ZSBxdWVyeSBmcm9tIGhvc3QgKkFG VEVSKiBydW5uaW5nIHRoZSBjcHUgc3RyZXNzIHByb2dyYW0uXG4lcyIgJSBvKQorCisgICAg IyBjbG9zZSB0aGUgdm0gaGFuZGxlIGZpbmFsbHkKKyAgICBweHNzaC5jbG9zZSgpCisKKyAg ICAjIFNsZWVwIGZvciBhbmFseXplLi4uCisgICAga3ZtX2xvZy5pbmZvKCJzbGVlcGluZygx ODAgc2VjcykgU3RhcnRpbmcuLi4gOiVzIiAlIG9zLnBvcGVuKCdkYXRlJykucmVhZCgpKQor ICAgIHRpbWUuc2xlZXAoMTgwKQorICAgIGt2bV9sb2cuaW5mbygid2FrZXVwIHRvIGdldCB0 aGUgYW5hbHl6aW5nLi4uIDolcyIgJSBvcy5wb3BlbignZGF0ZScpLnJlYWQoKSkKKyAgICBj b3VudCA9IDAKKyAgICBmb3IgaSBpbiByYW5nZSgxLCAyMSk6CisgICAgICAgIGt2bV9sb2cu aW5mbygidGhpcyBpcyAlcyB0aW1lIHRvIGdldCBjbG9jayBpbmZvIGZyb20gZ3Vlc3QuIiAl IGkpCisgICAgICAgIHMsIG8gPSBudHBkYXRlX29wKG50cGRhdGVfaW5mb19jbWQpCisgICAg ICAgIAorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yLlRlc3RG YWlsLCAiR3Vlc3Qgc2VlbXMgaGFuZyBvciBzc2ggc2VydmljZSBiYXNlZCBvbiBndWVzdCBo YXMgYmVlbiBjcmFzaCBkb3duIgorICAgICAgICAKKyAgICAgICAgaWYgbm90IHRpbWVfZHJp ZnRfb3Jfbm90KG8pOgorICAgICAgICAgICAgY291bnQgKz0gMQorCisgICAgICAgIGlmIGNv dW50ID09IDU6CisgICAgICAgICAgICByYWlzZSBlcnJvci5UZXN0RmFpbCwgIlRpbWVEcmlm dCB0ZXN0aW5nIEFib3J0IGJlY2F1c2UgZ3Vlc3QncyBjbG9jayBoYXMgZHJpZnQgdG9vIG11 Y2giCisKKyAgICAgICAga3ZtX2xvZy5pbmZvKCIqKioqKioqKioqKioqKioqKioqKioqKiBT bGVlcCA2MCBzZWNvbmRzIGZvciBuZXh0IGxvb3AgKioqKioqKioqKioqKioqKioqKioqKioq KiIpCisgICAgICAgIHRpbWUuc2xlZXAoNjApCisK --------------040108000104010000040703--