Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1luKob-0002Zt-Qs for pgadmin-hackers@arkaria.postgresql.org; Fri, 18 Jun 2021 20:10:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1luKoa-0000Nd-IB for pgadmin-hackers@arkaria.postgresql.org; Fri, 18 Jun 2021 20:10:08 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1luKoa-0000NV-45 for pgadmin-hackers@lists.postgresql.org; Fri, 18 Jun 2021 20:10:08 +0000 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1luKoT-0000kJ-6R for pgadmin-hackers@postgresql.org; Fri, 18 Jun 2021 20:10:06 +0000 Received: by mail-pg1-x535.google.com with SMTP id e33so8716351pgm.3 for ; Fri, 18 Jun 2021 13:10:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to:cc; bh=uaWrr7/WdcevHp7UWeidHM94VtcPT7yv+/gB6hq0xi0=; b=qjE6oXyeIvvB1AGzSzBYSeIGMYHzU3QWYY781Zb+UkAaG07vbvQFDuJFeea6XYbxmh QlLWTiaQSfUgW55RBHAuTczKgRxwwdkb83ZrG6K3PWt0OyTMHePWjsUpygOn7xORRlvr oKazOe52rayWx5PFX2GLNl7LjOqBgPuQxDTsHwYEErkJpo4/RRYDSl80yYDnOLhgSpKA 9eVX/wE+MaA+WqDfVL3I4H5207P1OyLVGzI1GrKIs+JSFbHVM1sEHlR1vrTpuVohGOOs RmBn0NofSrUD/CIy7CJZtEGtvPP77GBDqw0pIjVSzatsCxpFAxPv769sZn8zyw7ymDPH EXXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=uaWrr7/WdcevHp7UWeidHM94VtcPT7yv+/gB6hq0xi0=; b=VcrKyOS4S/XXQ/NJpp45LgDYEsEtYBgX4OcPRooTWcbmj1pQJ/0wSs3mjsfN+okN7O qySC/YO0i8dHiG9ob90ZNG+/M4LbEbSV0Amd50riewT4H/7cZDP2VzWs4U7TogJJ/xuF NRBAMxDkQo9JL/lpGjkVeObc+6J4pXEQMoGp1145oEorfMusaNaxOfmmgzSgzUfFDmHz byIO1ZMrZsgNcW+h+Wnr5diBAEzVePxNmee6cciROEX9V+9STIfW3OotXSth39lKh+9c UM556tNL/oFR12/mRZEROca5Mn9WuiUHI0ovEQolAQRSkXc+fCvLzjixtbFQ5D4G7TXv fQKg== X-Gm-Message-State: AOAM531NSlmfsYoDc+LKpRPa3Mjid520EcZ8RetKjlMctLO3HC7hidI3 fXjz47xWRW2xnTur9JpNOteaur1eYHuiq3TLvGyBnKz3kMgs4wLv1mSy/476aXCzD1v9ofRsx9h /zWJoZcGGKmvti6+K+d8Ab6W80SxwxygpkA09fSVbh8vZ9mSGC5kSzWB7cHzMQ6pyt8hWiGdZ5F H3sciifVvotEImHQv9B82Mk8moNdAWkP4YUpMmRLeTACIf4ic7alI7/cTSNDHD5+M= X-Google-Smtp-Source: ABdhPJwA15pQHV9j42GUcluTZFB18kc+zYoMM4hFRR0KsauLLeoTyQdSDxmhoPMHhUz3Mgzu0W4cnHfSR5+aFn8Y/4M= X-Received: by 2002:a62:6490:0:b029:2f7:2fba:4d79 with SMTP id y138-20020a6264900000b02902f72fba4d79mr6707887pfb.29.1624046998889; Fri, 18 Jun 2021 13:09:58 -0700 (PDT) MIME-Version: 1.0 From: Ashesh Vashi Date: Sat, 19 Jun 2021 01:39:47 +0530 Message-ID: Subject: Refactor: Registry Classes To: Akshay Joshi Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary="000000000000784c6c05c50fe8d7" X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000784c6c05c50fe8d7 Content-Type: multipart/alternative; boundary="000000000000784c6a05c50fe8d5" --000000000000784c6a05c50fe8d5 Content-Type: text/plain; charset="UTF-8" Hi Akshay, We do have a couple of classes, which does automatic registration of the base classes, and which creates single-ton objects for these base classes, when needed. I would be working on a patch sooner, which will be using similar functionality for loading the multi-factor authentication. I realized - it will be a duplicate code at three places for the same functionalities. Hence - I worked on refactoring this registry class. Please find the patch for the same. -- Thanks & Regards, Ashesh Vashi EnterpriseDB INDIA: Enterprise PostgreSQL Company *http://www.linkedin.com/in/asheshvashi* --000000000000784c6a05c50fe8d5 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Akshay,

We do have a couple of class= es, which does automatic registration of the base classes,
and wh= ich creates single-ton objects for these base classes, when needed.

I would be working on a patch sooner, which will be using= similar functionality for loading
the multi-factor authenticatio= n.

I realized - it will be a duplicate code at thr= ee places for the same functionalities.
Hence - I worked on refac= toring this registry class.

Please find the patch = for the same.=C2=A0

--

Thanks & Regards,

Ashesh V= ashi
EnterpriseDB INDIA: Enterprise PostgreSQL Company

<= br>

<= a href=3D"http://www.linkedin.com/in/asheshvashi" target=3D"_blank">http= ://www.linkedin.com/in/asheshvashi

--000000000000784c6a05c50fe8d5-- --000000000000784c6c05c50fe8d7 Content-Type: application/octet-stream; name="refactor_registry_class.patch" Content-Disposition: attachment; filename="refactor_registry_class.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kq2rjd250 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9fX2luaXRfXy5weSBiL3dlYi9w Z2FkbWluL2F1dGhlbnRpY2F0ZS9fX2luaXRfXy5weQppbmRleCBkMzI4YjBkMjQuLjEwMWQ1NzY1 NiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL19faW5pdF9fLnB5CisrKyBi L3dlYi9wZ2FkbWluL2F1dGhlbnRpY2F0ZS9fX2luaXRfXy5weQpAQCAtMjIzLDcgKzIyMyw3IEBA IGRlZiBnZXRfYXV0aF9zb3VyY2VzKHR5cGUpOgogICAgIGlmIHR5cGUgaW4gYXV0aF9zb3VyY2Vz OgogICAgICAgICByZXR1cm4gYXV0aF9zb3VyY2VzW3R5cGVdCiAKLSAgICBhdXRoX3NvdXJjZSA9 IEF1dGhTb3VyY2VSZWdpc3RyeS5jcmVhdGUodHlwZSkKKyAgICBhdXRoX3NvdXJjZSA9IEF1dGhT b3VyY2VSZWdpc3RyeS5nZXQodHlwZSkKIAogICAgIGlmIGF1dGhfc291cmNlIGlzIG5vdCBOb25l OgogICAgICAgICBhdXRoX3NvdXJjZXNbdHlwZV0gPSBhdXRoX3NvdXJjZQpAQCAtMjM2LDcgKzIz Niw3IEBAIGRlZiBpbml0X2FwcChhcHApOgogICAgIGF1dGhfc291cmNlcyA9IGRpY3QoKQogCiAg ICAgc2V0YXR0cihhcHAsICdfcGdhZG1pbl9hdXRoX3NvdXJjZXMnLCBhdXRoX3NvdXJjZXMpCi0g ICAgQXV0aFNvdXJjZVJlZ2lzdHJ5LmxvYWRfYXV0aF9zb3VyY2VzKCkKKyAgICBBdXRoU291cmNl UmVnaXN0cnkubG9hZF9tb2R1bGVzKGFwcCkKIAogICAgIHJldHVybiBhdXRoX3NvdXJjZXMKIApk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL3JlZ2lzdHJ5LnB5IGIvd2ViL3Bn YWRtaW4vYXV0aGVudGljYXRlL3JlZ2lzdHJ5LnB5CmluZGV4IDdkNzk3ZTY1OC4uZmRmOWI0MDBl IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9hdXRoZW50aWNhdGUvcmVnaXN0cnkucHkKKysrIGIv d2ViL3BnYWRtaW4vYXV0aGVudGljYXRlL3JlZ2lzdHJ5LnB5CkBAIC0xMCw1NiArMTAsOSBAQAog IiIiRXh0ZXJuYWwgQXV0aGVudGljYXRpb24gUmVnaXN0cnkuIiIiCiAKIAotZnJvbSBmbGFza19i YWJlbGV4IGltcG9ydCBnZXR0ZXh0Ci1mcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQorZnJvbSBwZ2Fk bWluLnV0aWxzLmR5bmFtaWNfcmVnaXN0cnkgaW1wb3J0IENyZWF0ZVJlZ2lzdHJ5TWV0YUNsYXNz CiAKIAotZGVmIF9kZWNvcmF0ZV9jbHNfbmFtZShtb2R1bGVfbmFtZSk6Ci0gICAgbGVuZ3RoID0g bGVuKF9fcGFja2FnZV9fKSArIDEKLQotICAgIGlmIGxlbihtb2R1bGVfbmFtZSkgPiBsZW5ndGgg YW5kIG1vZHVsZV9uYW1lLnN0YXJ0c3dpdGgoX19wYWNrYWdlX18pOgotICAgICAgICByZXR1cm4g bW9kdWxlX25hbWVbbGVuZ3RoOl0KLQotICAgIHJldHVybiBtb2R1bGVfbmFtZQotCi0KLWNsYXNz IEF1dGhTb3VyY2VSZWdpc3RyeShBQkNNZXRhKToKLSAgICByZWdpc3RyeSA9IE5vbmUKLSAgICBh dXRoX3NvdXJjZXMgPSBkaWN0KCkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBiYXNl cywgZCk6Ci0KLSAgICAgICAgIyBSZWdpc3RlciB0aGlzIHR5cGUgb2YgYXV0aF9zb3VyY2VzLCBi YXNlZCBvbiB0aGUgbW9kdWxlIG5hbWUKLSAgICAgICAgIyBBdm9pZCByZWdpc3RlcmluZyB0aGUg QmFzZUF1dGhlbnRpY2F0aW9uIGl0c2VsZgotCi0gICAgICAgIEF1dGhTb3VyY2VSZWdpc3RyeS5y ZWdpc3RyeVtfZGVjb3JhdGVfY2xzX25hbWUoZFsnX19tb2R1bGVfXyddKV0gPSBzZWxmCi0gICAg ICAgIEFCQ01ldGEuX19pbml0X18oc2VsZiwgbmFtZSwgYmFzZXMsIGQpCi0KLSAgICBAY2xhc3Nt ZXRob2QKLSAgICBkZWYgY3JlYXRlKGNscywgbmFtZSwgKiprd2FyZ3MpOgotCi0gICAgICAgIGlm IG5hbWUgaW4gQXV0aFNvdXJjZVJlZ2lzdHJ5LmF1dGhfc291cmNlczoKLSAgICAgICAgICAgIHJl dHVybiBBdXRoU291cmNlUmVnaXN0cnkuYXV0aF9zb3VyY2VzW25hbWVdCi0KLSAgICAgICAgaWYg bmFtZSBpbiBBdXRoU291cmNlUmVnaXN0cnkucmVnaXN0cnk6Ci0gICAgICAgICAgICBBdXRoU291 cmNlUmVnaXN0cnkuYXV0aF9zb3VyY2VzW25hbWVdID0gXAotICAgICAgICAgICAgICAgIChBdXRo U291cmNlUmVnaXN0cnkucmVnaXN0cnlbbmFtZV0pKCoqa3dhcmdzKQotICAgICAgICAgICAgcmV0 dXJuIEF1dGhTb3VyY2VSZWdpc3RyeS5hdXRoX3NvdXJjZXNbbmFtZV0KLQotICAgICAgICByYWlz ZSBOb3RJbXBsZW1lbnRlZEVycm9yKAotICAgICAgICAgICAgZ2V0dGV4dCgKLSAgICAgICAgICAg ICAgICAiQXV0aGVudGljYXRpb24gc291cmNlICd7MH0nIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRl ZC4iCi0gICAgICAgICAgICApLmZvcm1hdChuYW1lKQotICAgICAgICApCi0KLSAgICBAY2xhc3Nt ZXRob2QKLSAgICBkZWYgbG9hZF9hdXRoX3NvdXJjZXMoY2xzKToKLSAgICAgICAgIyBJbml0aWFs aXplIHRoZSByZWdpc3RyeSBvbmx5IGlmIGl0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQK LSAgICAgICAgaWYgQXV0aFNvdXJjZVJlZ2lzdHJ5LnJlZ2lzdHJ5IGlzIE5vbmU6Ci0gICAgICAg ICAgICBBdXRoU291cmNlUmVnaXN0cnkucmVnaXN0cnkgPSBkaWN0KCkKLQotICAgICAgICBmcm9t IGltcG9ydGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZQotICAgICAgICBmcm9tIHdlcmt6ZXVnLnV0 aWxzIGltcG9ydCBmaW5kX21vZHVsZXMKLQotICAgICAgICBmb3IgbW9kdWxlX25hbWUgaW4gZmlu ZF9tb2R1bGVzKF9fcGFja2FnZV9fLCBUcnVlKToKLSAgICAgICAgICAgIGltcG9ydF9tb2R1bGUo bW9kdWxlX25hbWUpCitBdXRoU291cmNlUmVnaXN0cnkgPSBDcmVhdGVSZWdpc3RyeU1ldGFDbGFz cygKKyAgICAnQXV0aFNvdXJjZVJlZ2lzdHJ5JywgX19wYWNrYWdlX18sIGRlY29yYXRlX2FzX21v ZHVsZT1UcnVlCispCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvX19pbml0 X18ucHkgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvX19pbml0X18ucHkKaW5kZXggNWM2ZDY5 NDVhLi5kNzc0OGM4MzkgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9fX2lu aXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvX19pbml0X18ucHkKQEAgLTEy LDMyICsxMiwxOSBAQCBmcm9tIGZsYXNrIGltcG9ydCBjdXJyZW50X2FwcAogZnJvbSAucmVnaXN0 cnkgaW1wb3J0IERyaXZlclJlZ2lzdHJ5CiAKIAotZGVmIGdldF9kcml2ZXIodHlwZSwgYXBwPU5v bmUpOgotICAgIGlmIGFwcCBpcyBub3QgTm9uZToKLSAgICAgICAgRHJpdmVyUmVnaXN0cnkubG9h ZF9kcml2ZXJzKCkKLQotICAgIGRyaXZlcnMgPSBnZXRhdHRyKGFwcCBvciBjdXJyZW50X2FwcCwg J19wZ2FkbWluX3NlcnZlcl9kcml2ZXJzJywgTm9uZSkKLQotICAgIGlmIGRyaXZlcnMgaXMgTm9u ZSBvciBub3QgaXNpbnN0YW5jZShkcml2ZXJzLCBkaWN0KToKLSAgICAgICAgZHJpdmVycyA9IGRp Y3QoKQorZGVmIGdldF9kcml2ZXIoX3R5cGUsIGFwcD1Ob25lKToKIAotICAgIGlmIHR5cGUgaW4g ZHJpdmVyczoKLSAgICAgICAgcmV0dXJuIGRyaXZlcnNbdHlwZV0KLQotICAgIGRyaXZlciA9IERy aXZlclJlZ2lzdHJ5LmNyZWF0ZSh0eXBlKQotCi0gICAgaWYgZHJpdmVyIGlzIG5vdCBOb25lOgot ICAgICAgICBkcml2ZXJzW3R5cGVdID0gZHJpdmVyCi0gICAgICAgIHNldGF0dHIoYXBwIG9yIGN1 cnJlbnRfYXBwLCAnX3BnYWRtaW5fc2VydmVyX2RyaXZlcnMnLCBkcml2ZXJzKQorICAgIGlmIGFw cCBpcyBub3QgTm9uZToKKyAgICAgICAgRHJpdmVyUmVnaXN0cnkubG9hZF9tb2R1bGVzKGFwcCkK IAotICAgIHJldHVybiBkcml2ZXIKKyAgICByZXR1cm4gRHJpdmVyUmVnaXN0cnkuZ2V0KF90eXBl KQogCiAKIGRlZiBpbml0X2FwcChhcHApOgogICAgIGRyaXZlcnMgPSBkaWN0KCkKIAogICAgIHNl dGF0dHIoYXBwLCAnX3BnYWRtaW5fc2VydmVyX2RyaXZlcnMnLCBkcml2ZXJzKQotICAgIERyaXZl clJlZ2lzdHJ5LmxvYWRfZHJpdmVycygpCisgICAgRHJpdmVyUmVnaXN0cnkubG9hZF9tb2R1bGVz KGFwcCkKIAogICAgIHJldHVybiBkcml2ZXJzCiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3V0 aWxzL2RyaXZlci9yZWdpc3RyeS5weSBiL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9yZWdpc3Ry eS5weQppbmRleCBhZTUzNTQyOWIuLmM4MmI2NzA3YiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4v dXRpbHMvZHJpdmVyL3JlZ2lzdHJ5LnB5CisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9y ZWdpc3RyeS5weQpAQCAtMTAsNzkgKzEwLDkgQEAKIGZyb20gYWJjIGltcG9ydCBBQkNNZXRhCiAK IGZyb20gZmxhc2tfYmFiZWxleCBpbXBvcnQgZ2V0dGV4dAorZnJvbSBwZ2FkbWluLnV0aWxzLmR5 bmFtaWNfcmVnaXN0cnkgIGltcG9ydCBDcmVhdGVSZWdpc3RyeU1ldGFDbGFzcwogCiAKLWRlZiBf ZGVjb3JhdGVfY2xzX25hbWUobW9kdWxlX25hbWUpOgotICAgIGxlbmd0aCA9IGxlbihfX3BhY2th Z2VfXykgKyAxCi0KLSAgICBpZiBsZW4obW9kdWxlX25hbWUpID4gbGVuZ3RoIGFuZCBtb2R1bGVf bmFtZS5zdGFydHN3aXRoKF9fcGFja2FnZV9fKToKLSAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1l W2xlbmd0aDpdCi0KLSAgICByZXR1cm4gbW9kdWxlX25hbWUKLQotCi1jbGFzcyBEcml2ZXJSZWdp c3RyeShBQkNNZXRhKToKLSAgICAiIiIKLSAgICBjbGFzcyBEcml2ZXJSZWdpc3RyeShvYmplY3Qp Ci0gICAgICAgIEV2ZXJ5IERyaXZlciB3aWxsIGJlIHJlZ2lzdGVyZWQgYXV0b21hdGljYWxseSBi eSBpdHMgbW9kdWxlIG5hbWUuCi0KLSAgICAgICAgVGhpcyB1c2VzIGZhY3RvcnkgcGF0dGVybiB0 byBnZW5yZWF0ZSBkcml2ZXIgb2JqZWN0IGJhc2VkIG9uIGl0cyBuYW1lCi0gICAgICAgIGF1dG9t YXRpY2FsbHkuCi0KLSAgICBDbGFzcy1sZXZlbCBNZXRob2RzOgotICAgIC0tLS0tLS0tLS0tIC0t LS0tLS0KLSAgICAqIF9faW5pdF9fKC4uLikKLSAgICAgIC0gSXQgd2lsbCBiZSB1c2VkIHRvIHJl Z2lzdGVyIHR5cGUgb2YgZHJpdmVycy4gWW91IGRvbid0IG5lZWQgdG8gY2FsbAotICAgICAgICB0 aGlzIGZ1bmN0aW9uIGV4cGxpY2l0bHkuIFRoaXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGV4ZWN1 dGVkLCB3aGVuZXZlcgotICAgICAgICB3ZSBjcmVhdGUgY2xhc3MgYW5kIGluaGVyaXQgZnJvbSBC YXNlRHJpdmVyLCBpdCB3aWxsIHJlZ2lzdGVyIGl0IGFzCi0gICAgICAgIGF2YWlsYWJsZSBkcml2 ZXIgaW4gRHJpdmVyUmVnaXN0cnkuIEJlY2F1c2UgLSB0aGUgX19tZXRhY2xhc3NfXyBmb3IKLSAg ICAgICAgQmFzZURyaXZlciBpcyBzZXQgaXQgdG8gRHJpdmVyUmVnaXN0cnksIGFuZCBpdCB3aWxs IGNyZWF0ZSBuZXcgaW5zdGFuY2UKLSAgICAgICAgb2YgdGhpcyBEcml2ZXJSZWdpc3RyeSBwZXIg Y2xhc3MuCi0KLSAgICAqIGNyZWF0ZSh0eXBlLCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAtIENy ZWF0ZSB0eXBlIG9mIGRyaXZlciBvYmplY3QgZm9yIHRoaXMgc2VydmVyLCBmcm9tIHRoZSBhdmFp bGFibGUKLSAgICAgICAgZHJpdmVyIGxpc3QgKGlmIGF2YWlsYWJsZSwgb3IgcmFpc2UgZXhjZXB0 aW9uKS4KLQotICAgICogbG9hZF9kcml2ZXJzKCk6Ci0gICAgICAtIFVzZSB0aGlzIGZ1bmN0aW9u IGZyb20gaW5pdF9hcHAoLi4uKSB0byBsb2FkIGFsbCBhdmFpbGFibGUgZHJpdmVycyBpbgotICAg ICAgICB0aGUgcmVnaXN0cnkuCi0gICAgIiIiCi0gICAgcmVnaXN0cnkgPSBOb25lCi0gICAgZHJp dmVycyA9IGRpY3QoKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGJhc2VzLCBkKToK LQotICAgICAgICAjIFJlZ2lzdGVyIHRoaXMgdHlwZSBvZiBkcml2ZXIsIGJhc2VkIG9uIHRoZSBt b2R1bGUgbmFtZQotICAgICAgICAjIEF2b2lkIHJlZ2lzdGVyaW5nIHRoZSBCYXNlRHJpdmVyIGl0 c2VsZgotCi0gICAgICAgIGlmIG5hbWUgIT0gJ0Jhc2VEcml2ZXInOgotICAgICAgICAgICAgRHJp dmVyUmVnaXN0cnkucmVnaXN0cnlbX2RlY29yYXRlX2Nsc19uYW1lKGRbJ19fbW9kdWxlX18nXSld ID0gc2VsZgotCi0gICAgICAgIEFCQ01ldGEuX19pbml0X18oc2VsZiwgbmFtZSwgYmFzZXMsIGQp Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgY3JlYXRlKGNscywgbmFtZSwgKiprd2FyZ3Mp OgotCi0gICAgICAgIGlmIG5hbWUgaW4gRHJpdmVyUmVnaXN0cnkuZHJpdmVyczoKLSAgICAgICAg ICAgIHJldHVybiBEcml2ZXJSZWdpc3RyeS5kcml2ZXJzW25hbWVdCi0KLSAgICAgICAgaWYgbmFt ZSBpbiBEcml2ZXJSZWdpc3RyeS5yZWdpc3RyeToKLSAgICAgICAgICAgIERyaXZlclJlZ2lzdHJ5 LmRyaXZlcnNbbmFtZV0gPSBcCi0gICAgICAgICAgICAgICAgKERyaXZlclJlZ2lzdHJ5LnJlZ2lz dHJ5W25hbWVdKSgqKmt3YXJncykKLSAgICAgICAgICAgIHJldHVybiBEcml2ZXJSZWdpc3RyeS5k cml2ZXJzW25hbWVdCi0KLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKLSAgICAg ICAgICAgIGdldHRleHQoIkRyaXZlciAnezB9JyBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQuIiku Zm9ybWF0KG5hbWUpCi0gICAgICAgICkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBsb2Fk X2RyaXZlcnMoY2xzKToKLSAgICAgICAgIyBJbml0aWFsaXplIHRoZSByZWdpc3RyeSBvbmx5IGlm IGl0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQKLSAgICAgICAgaWYgRHJpdmVyUmVnaXN0 cnkucmVnaXN0cnkgaXMgTm9uZToKLSAgICAgICAgICAgIERyaXZlclJlZ2lzdHJ5LnJlZ2lzdHJ5 ID0gZGljdCgpCi0KLSAgICAgICAgZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGltcG9ydF9tb2R1bGUK LSAgICAgICAgZnJvbSB3ZXJremV1Zy51dGlscyBpbXBvcnQgZmluZF9tb2R1bGVzCi0KLSAgICAg ICAgZm9yIG1vZHVsZV9uYW1lIGluIGZpbmRfbW9kdWxlcyhfX3BhY2thZ2VfXywgVHJ1ZSk6Ci0g ICAgICAgICAgICBpbXBvcnRfbW9kdWxlKG1vZHVsZV9uYW1lKQorRHJpdmVyUmVnaXN0cnkgPSBD cmVhdGVSZWdpc3RyeU1ldGFDbGFzcygKKyAgICAnRHJpdmVyUmVnaXN0cnknLCBfX3BhY2thZ2Vf XywgZGVjb3JhdGVfYXNfbW9kdWxlPVRydWUKKykKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3V0 aWxzL2R5bmFtaWNfcmVnaXN0cnkvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi91dGlscy9keW5h bWljX3JlZ2lzdHJ5L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMC4uOWJjYTE0NTEwCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMvZHlu YW1pY19yZWdpc3RyeS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDEwNSBAQAorIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQg KEMpIDIwMTMgLSAyMDIxLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29m dHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworCisiIiJUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIGZvciBjcmVhdGlu ZyBkeW5hbWljIHJlZ2lzdHJ5IG1ldGEgY2xhc3MuIiIiCisKK2Zyb20gYWJjIGltcG9ydCBBQkNN ZXRhCisKKworIyBDb25zdHJ1Y3RvcgorZGVmIF9jb25zdHJ1Y3RvcihzZWxmLCBuYW1lLCBiYXNl cywga3dhcmdzKToKKworICAgICMgUmVnaXN0ZXIgdGhpcyB0eXBlIG9mIGF1dGhfc291cmNlcywg YmFzZWQgb24gdGhlIG1vZHVsZSBuYW1lCisgICAgIyBBdm9pZCByZWdpc3RlcmluZyB0aGUgQmFz ZUF1dGhlbnRpY2F0aW9uIGl0c2VsZgorICAgIGNscyA9IHNlbGYuX19jbGFzc19fCisgICAgZW50 cnkgPSBzZWxmLl9kZWNvcmF0ZV9jbHNfbmFtZShuYW1lLCBrd2FyZ3MpCisKKyAgICBpZiBjbHMu X3JlZ2lzdHJ5IGlzIE5vbmU6CisgICAgICAgIGNscy5fcmVnaXN0cnkgPSBkaWN0KCkKKyAgICBl bHNlOgorICAgICAgICBpZiBlbnRyeSBpbiBjbHMuX3JlZ2lzdHJ5OgorICAgICAgICAgICAgcmFp c2UgUnVudGltZUVycm9yKCgKKyAgICAgICAgICAgICAgICAne30gY2xhc3MgaXMgYWxyZWFkeSBi ZWVuIHJlZ2lzdGVyZWQgd2l0aCB7fSAnCisgICAgICAgICAgICAgICAgJyhwYWNrYWdlOiB7fSkn CisgICAgICAgICAgICApLmZvcm1hdChlbnRyeSwgY2xzLl9uYW1lXywgY2xzLl9wYWNrYWdlXykp CisKKyAgICBpZiBjbHMuX2luaXRpYWxpemVkIGlzIFRydWU6CisgICAgICAgIGNscy5fcmVnaXN0 cnlbZW50cnldID0gc2VsZgorICAgIGNscy5faW5pdGlhbGl6ZWQgPSBUcnVlCisKKyAgICBBQkNN ZXRhLl9faW5pdF9fKHNlbGYsIG5hbWUsIGJhc2VzLCBrd2FyZ3MpCisKKworQGNsYXNzbWV0aG9k CitkZWYgX2dldChjbHMsIG5hbWUsICoqa3dhcmdzKToKKworICAgIGlmIG5hbWUgaW4gY2xzLl9v YmplY3RzOgorICAgICAgICByZXR1cm4gY2xzLl9vYmplY3RzW25hbWVdCisKKyAgICBpZiBjbHMu X3JlZ2lzdHJ5IGlzIG5vdCBOb25lIGFuZCBuYW1lIGluIGNscy5fcmVnaXN0cnk6CisgICAgICAg IGNscy5fb2JqZWN0c1tuYW1lXSA9IChjbHMuX3JlZ2lzdHJ5W25hbWVdKSgqKmt3YXJncykKKwor ICAgICAgICByZXR1cm4gY2xzLl9vYmplY3RzW25hbWVdCisKKyAgICByYWlzZSBOb3RJbXBsZW1l bnRlZEVycm9yKAorICAgICAgICAie30gJ3t9JyBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQuIi5m b3JtYXQoY2xzLl9fbmFtZV9fLCBuYW1lKQorICAgICkKKworCitAY2xhc3NtZXRob2QKK2RlZiBf bG9hZF9tb2R1bGVzKGNscywgYXBwPU5vbmUpOgorICAgICMgSW5pdGlhbGl6ZSB0aGUgcmVnaXN0 cnkgb25seSBpZiBpdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkCisgICAgaWYgY2xzLl9y ZWdpc3RyeSBpcyBOb25lOgorICAgICAgICBjbHMuX3JlZ2lzdHJ5ID0gZGljdCgpCisKKyAgICBm cm9tIGltcG9ydGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZQorICAgIGZyb20gd2Vya3pldWcudXRp bHMgaW1wb3J0IGZpbmRfbW9kdWxlcworCisgICAgZm9yIG1vZHVsZV9uYW1lIGluIGZpbmRfbW9k dWxlcyhjbHMuX3BhY2thZ2VfLCBUcnVlKToKKyAgICAgICAgbW9kdWxlID0gaW1wb3J0X21vZHVs ZShtb2R1bGVfbmFtZSkKKworICAgICAgICBpZiAnaW5pdF9hcHAnIGluIG1vZHVsZS5fX2RpY3Rf Xy5rZXlzKCk6CisgICAgICAgICAgICBtb2R1bGUuX19kaWN0X19bJ2luaXRfYXBwJ10oYXBwKQor CisKK2RlZiBfZ2V0X21vZHVsZV9uYW1lKHNlbGYsIG5hbWUsIGt3YXJncyk6CisgICAgbW9kdWxl X25hbWUgPSBrd2FyZ3NbJ19fbW9kdWxlX18nXQorICAgIGxlbmd0aCA9IGxlbihzZWxmLl9wYWNr YWdlXykgKyAxCisKKyAgICBpZiBsZW4obW9kdWxlX25hbWUpID4gbGVuZ3RoIGFuZCBtb2R1bGVf bmFtZS5zdGFydHN3aXRoKHNlbGYuX3BhY2thZ2VfKToKKyAgICAgICAgcmV0dXJuIG1vZHVsZV9u YW1lW2xlbmd0aDpdCisKKyAgICByZXR1cm4gbW9kdWxlX25hbWUKKworZGVmIF9nZXRfY2xhc3Nf bmFtZShzZWxmLCBuYW1lLCBrd2FyZ3MpOgorICAgIHJldHVybiBuYW1lCisKKworZGVmIENyZWF0 ZVJlZ2lzdHJ5TWV0YUNsYXNzKG5hbWUsIHBhY2thZ2UsIGRlY29yYXRlX2FzX21vZHVsZT1UcnVl KToKKworICAgIGNsYXNzX3BhcmFtcyA9IHsKKyAgICAgICAgIyBjb25zdHJ1Y3RvcgorICAgICAg ICAiX19pbml0X18iOiBfY29uc3RydWN0b3IsCisKKyAgICAgICAgIyBDbGFzcyBtZW1iZXJzCisg ICAgICAgICJfcmVnaXN0cnkiOiBOb25lLAorICAgICAgICAiX29iamVjdHMiOiBkaWN0KCksCisg ICAgICAgICJfcGFja2FnZV8iOiBwYWNrYWdlLAorCisgICAgICAgICMgTWVtYmVyIGZ1bmN0aW9u cworICAgICAgICAiZ2V0IjogX2dldCwKKyAgICAgICAgImxvYWRfbW9kdWxlcyI6IF9sb2FkX21v ZHVsZXMsCisgICAgICAgICdfbmFtZV8nOiBuYW1lLAorICAgICAgICAnX2RlY29yYXRlX2Nsc19u YW1lJzogX2dldF9tb2R1bGVfbmFtZQorICAgICAgICBpZiBkZWNvcmF0ZV9hc19tb2R1bGUgaXMg VHJ1ZSBlbHNlIF9nZXRfY2xhc3NfbmFtZSwKKyAgICAgICAgJ19pbml0aWFsaXplZCc6IEZhbHNl LAorICAgIH0KKworICAgICMgQ3JlYXRpbmcgY2xhc3MgZHluYW1pY2FsbHkKKyAgICByZXR1cm4g dHlwZShwYWNrYWdlICsgIi4iICsgbmFtZSwgKEFCQ01ldGEsICksIGNsYXNzX3BhcmFtcykKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNfcmVnaXN0cnkvdGVzdHMvX19pbml0 X18ucHkgYi93ZWIvcGdhZG1pbi91dGlscy9keW5hbWljX3JlZ2lzdHJ5L3Rlc3RzL19faW5pdF9f LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uODkxOTBiMzE2Ci0tLSAv ZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1pY19yZWdpc3RyeS90ZXN0cy9f X2luaXRfXy5weQpAQCAtMCwwICsxLDggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4g NCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMSwgVGhl IHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVu ZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi91dGlscy9keW5hbWljX3JlZ2lzdHJ5L3Rlc3RzL3JlZ2lzdHJ5L19f aW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1pY19yZWdpc3RyeS90ZXN0cy9yZWdp c3RyeS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmM1 NzY1NDE4ZQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNfcmVn aXN0cnkvdGVzdHMvcmVnaXN0cnkvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJp Z2h0IChDKSAyMDEzIC0gMjAyMSwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlz IHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCitpbXBvcnQgc2l4Citmcm9tIHBnYWRtaW4udXRpbHMuZHluYW1pY19y ZWdpc3RyeSBpbXBvcnQgQ3JlYXRlUmVnaXN0cnlNZXRhQ2xhc3MKK2Zyb20gLnJlZ2lzdHJ5IGlt cG9ydCBUZXN0TW9kdWxlUmVnaXN0cnksIFRlc3ROYW1lZFJlZ2lzdHJ5LCBUZXN0TmFtZUJhc2UK K2Zyb20gLnRlc3QxIGltcG9ydCBUZXN0TW9kdWxlMQorCisKK2RlZiB0ZXN0X2xvYWRfbW9kdWxl c19iYXNlZF9yZWdpc3RyeSgpOgorICAgIFRlc3RNb2R1bGVSZWdpc3RyeS5sb2FkX21vZHVsZXMo KQorCisgICAgaWYgbGVuKFRlc3RNb2R1bGVSZWdpc3RyeS5fcmVnaXN0cnkpICE9IDI6CisgICAg ICAgIHJldHVybiAiTGVuZ3RoIG9mIHRoZSByZWdpc3RyeSBzaG91bGQgaGF2ZSBiZWVuIDIiCisK KyAgICBpZiAndGVzdDEnIG5vdCBpbiBUZXN0TW9kdWxlUmVnaXN0cnkuX3JlZ2lzdHJ5OgorICAg ICAgICByZXR1cm4gIid0ZXN0MScgaXMgbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeSIKKworICAg IGlmICd0ZXN0Micgbm90IGluIFRlc3RNb2R1bGVSZWdpc3RyeS5fcmVnaXN0cnk6CisgICAgICAg IHJldHVybiAiJ3Rlc3QyJyBpcyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5IgorCisgICAgb2Jq X3Rlc3QxXzEgPSBUZXN0TW9kdWxlUmVnaXN0cnkuZ2V0KCd0ZXN0MScpCisgICAgb2JqX3Rlc3Qx XzIgPSBUZXN0TW9kdWxlUmVnaXN0cnkuZ2V0KCd0ZXN0MScpCisgICAgb2JqX3Rlc3QyXzEgPSBU ZXN0TW9kdWxlUmVnaXN0cnkuZ2V0KCd0ZXN0MicpCisKKyAgICBpZiBpZChvYmpfdGVzdDFfMSkg IT0gaWQob2JqX3Rlc3QxXzIpOgorICAgICAgICByZXR1cm4gIlJlZ2lzdHJ5IGhhcyBjcmVhdGVk IHR3byBzZXBhcmF0ZSBpbnN0YW5jZXMiCisKKyAgICBpZiBpc2luc3RhbmNlKG9ial90ZXN0MV8x LCBUZXN0TW9kdWxlMSkgaXMgRmFsc2U6CisgICAgICAgIHJldHVybiAiUmVnaXN0cnkgY3JlYXRl ZCB3cm9uZyBvYmplY3QiCisKKyAgICBpZiBpZChvYmpfdGVzdDFfMSkgPT0gaWQob2JqX3Rlc3Qy XzEpOgorICAgICAgICByZXR1cm4gIlJlZ2lzdHJ5IHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBzZXBh cmF0ZSBpbnN0YW5jZXMgZm9yICIgXAorICAgICAgICAgICAgICAgICJkaWZmZXJlbnQgY2xhc3Nl cyIKKworCitkZWYgdGVzdF9sb2FkX2NsYXNzbmFtZV9yZWdpc3RyeSgpOgorICAgIFRlc3ROYW1l ZFJlZ2lzdHJ5LmxvYWRfbW9kdWxlcygpCisKKyAgICBpZiAnQ2xhc3NUZXN0TmFtZTEnIG5vdCBp biBUZXN0TmFtZWRSZWdpc3RyeS5fcmVnaXN0cnk6CisgICAgICAgIHJldHVybiAiJ0NsYXNzVGVz dE5hbWUxJyBpcyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5IgorCisgICAgaWYgJ0NsYXNzVGVz dE5hbWUyJyBub3QgaW4gVGVzdE5hbWVkUmVnaXN0cnkuX3JlZ2lzdHJ5OgorICAgICAgICByZXR1 cm4gIidDbGFzc1Rlc3ROYW1lMicgaXMgbm90IGZvdW5kIGluIHRoZSByZWdpc3RyeSIKKworICAg IG9ial90ZXN0MV8xID0gVGVzdE5hbWVkUmVnaXN0cnkuZ2V0KCdDbGFzc1Rlc3ROYW1lMScpCisg ICAgb2JqX3Rlc3QxXzIgPSBUZXN0TmFtZWRSZWdpc3RyeS5nZXQoJ0NsYXNzVGVzdE5hbWUxJykK KyAgICBvYmpfdGVzdDJfMSA9IFRlc3ROYW1lZFJlZ2lzdHJ5LmdldCgnQ2xhc3NUZXN0TmFtZTIn KQorCisgICAgaWYgaWQob2JqX3Rlc3QxXzEpICE9IGlkKG9ial90ZXN0MV8yKToKKyAgICAgICAg cmV0dXJuICJSZWdpc3RyeSBoYXMgY3JlYXRlZCB0d28gc2VwYXJhdGUgaW5zdGFuY2VzIgorCisg ICAgaWYgaWQob2JqX3Rlc3QxXzEpID09IGlkKG9ial90ZXN0Ml8xKToKKyAgICAgICAgcmV0dXJu ICJSZWdpc3RyeSBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgc2VwYXJhdGUgaW5zdGFuY2VzIGZvciBk aWZmZXJlbnQgY2xhc3NlcyIKKworICAgIHRyeToKKyAgICAgICAgY2xhc3MgQ2xhc3NUZXN0TmFt ZTEoVGVzdE5hbWVCYXNlKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gIkV4 cGVjdGVkIGFuIHJ1bnRpbWUgZXJyb3Igd2hlbiB1c2luZyB0aGUgc2FtZSBjbGFzc25hbWUiCisg ICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgcGFzcworCisKK2RlZiB0ZXN0X2VtcHR5 X3JlZ2lzdHJ5KCk6CisKKyAgICBFbXB0eU1vZHVsZVJlZ2lzdHJ5ID0gQ3JlYXRlUmVnaXN0cnlN ZXRhQ2xhc3MoCisgICAgICAgICdFbXB0eU1vZHVsZVJlZ2lzdHJ5JywgX19wYWNrYWdlX18sIGRl Y29yYXRlX2FzX21vZHVsZT1UcnVlCisgICAgKQorCisgICAgaWYgRW1wdHlNb2R1bGVSZWdpc3Ry eS5fcmVnaXN0cnkgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiAiUmVnaXN0cnkgd2FzIHN1 cHBvc2VkIHRvIGJlIE5vbmUiCisKKyAgICBpZiBFbXB0eU1vZHVsZVJlZ2lzdHJ5Ll9pbml0aWFs aXplZCBpcyBub3QgRmFsc2U6CisgICAgICAgIHJldHVybiAiUmVnaXN0cnkgaW5pdGlhbGl6ZWQg ZmxhZyBzaG91bGQgYmUgZmFsc2UiCisKKworZGVmIHRlc3RfY3JlYXRlX2Jhc2VfY2xhc3MoKToK KworICAgIFJlZ2lzdHJ5V2l0aEJhc2VDbGFzcyA9IENyZWF0ZVJlZ2lzdHJ5TWV0YUNsYXNzKAor ICAgICAgICAnUmVnaXN0cnlXaXRoQmFzZUNsYXNzJywgX19wYWNrYWdlX18sIGRlY29yYXRlX2Fz X21vZHVsZT1GYWxzZQorICAgICkKKworICAgIEBzaXguYWRkX21ldGFjbGFzcyhSZWdpc3RyeVdp dGhCYXNlQ2xhc3MpCisgICAgY2xhc3MgVGVzdEJhc2Uob2JqZWN0KToKKyAgICAgICAgcGFzcwor CisgICAgZmFpbGVkID0gRmFsc2UKKworICAgIHJlZ2lzdHJ5ID0gUmVnaXN0cnlXaXRoQmFzZUNs YXNzLl9yZWdpc3RyeQorCisgICAgaWYgcmVnaXN0cnkgaXMgTm9uZSBvciBsZW4ocmVnaXN0cnkp ICE9IDA6CisgICAgICAgIHJldHVybiAiUmVnaXN0cnkgd2FzIG5vdCBzdXBwb3NlZCB0byBiZSBO b25lLCBhbmQgZW1wdHkiCisKKyAgICBpZiBSZWdpc3RyeVdpdGhCYXNlQ2xhc3MuX2luaXRpYWxp emVkIGlzIEZhbHNlOgorICAgICAgICByZXR1cm4gIlJlZ2lzdHJ5IGluaXRpYWxpemVkIGZsYWcg c2hvdWxkIG5vdCBiZSB0cnVlIgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1p Y19yZWdpc3RyeS90ZXN0cy9yZWdpc3RyeS9yZWdpc3RyeS5weSBiL3dlYi9wZ2FkbWluL3V0aWxz L2R5bmFtaWNfcmVnaXN0cnkvdGVzdHMvcmVnaXN0cnkvcmVnaXN0cnkucHkKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4yZmI1MzBmZjkKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi91dGlscy9keW5hbWljX3JlZ2lzdHJ5L3Rlc3RzL3JlZ2lzdHJ5L3JlZ2lzdHJ5 LnB5CkBAIC0wLDAgKzEsMzggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBv c3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAyMSwgVGhlIHBnQWRt aW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRo ZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitpbXBvcnQgc2l4Citm cm9tIHBnYWRtaW4udXRpbHMuZHluYW1pY19yZWdpc3RyeSBpbXBvcnQgQ3JlYXRlUmVnaXN0cnlN ZXRhQ2xhc3MKKworCitUZXN0TW9kdWxlUmVnaXN0cnkgPSBDcmVhdGVSZWdpc3RyeU1ldGFDbGFz cygKKyAgICAnVGVzdE1vZHVsZVJlZ2lzdHJ5JywgX19wYWNrYWdlX18sIGRlY29yYXRlX2FzX21v ZHVsZT1UcnVlCispCisKKworVGVzdE5hbWVkUmVnaXN0cnkgPSBDcmVhdGVSZWdpc3RyeU1ldGFD bGFzcygKKyAgICAnVGVzdFJlZ2lzdHJ5JywgX19wYWNrYWdlX18sIGRlY29yYXRlX2FzX21vZHVs ZT1GYWxzZQorKQorCisKK0BzaXguYWRkX21ldGFjbGFzcyhUZXN0TW9kdWxlUmVnaXN0cnkpCitj bGFzcyBUZXN0TW9kdWxlQmFzZShvYmplY3QpOgorICAgIHBhc3MKKworCitAc2l4LmFkZF9tZXRh Y2xhc3MoVGVzdE5hbWVkUmVnaXN0cnkpCitjbGFzcyBUZXN0TmFtZUJhc2Uob2JqZWN0KToKKyAg ICBwYXNzCisKKworY2xhc3MgQ2xhc3NUZXN0TmFtZTEoVGVzdE5hbWVCYXNlKToKKyAgICBwYXNz CisKKworY2xhc3MgQ2xhc3NUZXN0TmFtZTIoVGVzdE5hbWVCYXNlKToKKyAgICBwYXNzCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi91dGlscy9keW5hbWljX3JlZ2lzdHJ5L3Rlc3RzL3JlZ2lzdHJ5 L3Rlc3QxLnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1pY19yZWdpc3RyeS90ZXN0cy9yZWdp c3RyeS90ZXN0MS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjY1NjMx OGZkZgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNfcmVnaXN0 cnkvdGVzdHMvcmVnaXN0cnkvdGVzdDEucHkKQEAgLTAsMCArMSwxNCBAQAorIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMp IDIwMTMgLSAyMDIxLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdh cmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKK2Zyb20gLnJlZ2lzdHJ5IGltcG9ydCBUZXN0TW9kdWxlQmFzZSAjLCBUZXN0TW9k dWxlUmVnaXN0cnkKKworCisjIFRoaXMgY2xhc3Mgd2lsbCBiZSByZWdpc3RlcmVkIHdpdGggVGVz dE1vZHVsZVJlZ2lzdHJ5IChyZWdpc3RyeSkKK2NsYXNzIFRlc3RNb2R1bGUxKFRlc3RNb2R1bGVC YXNlKToKKyAgICBwYXNzCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi91dGlscy9keW5hbWljX3Jl Z2lzdHJ5L3Rlc3RzL3JlZ2lzdHJ5L3Rlc3QyLnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1p Y19yZWdpc3RyeS90ZXN0cy9yZWdpc3RyeS90ZXN0Mi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAuLjk2YzlhZTUzOAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L3V0aWxzL2R5bmFtaWNfcmVnaXN0cnkvdGVzdHMvcmVnaXN0cnkvdGVzdDIucHkKQEAgLTAsMCAr MSwxNCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29s cworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDIxLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVu dCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwg TGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2Zyb20gLnJlZ2lzdHJ5IGltcG9ydCBUZXN0 TW9kdWxlQmFzZSAjLCBUZXN0TW9kdWxlUmVnaXN0cnkKKworCisjIFRoaXMgY2xhc3Mgd2lsbCBi ZSByZWdpc3RlcmVkIHdpdGggVGVzdE1vZHVsZVJlZ2lzdHJ5IChyZWdpc3RyeSkKK2NsYXNzIFRl c3RNb2R1bGUyKFRlc3RNb2R1bGVCYXNlKToKKyAgICBwYXNzCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi91dGlscy9keW5hbWljX3JlZ2lzdHJ5L3Rlc3RzL3Rlc3RfZHluYW1pY19yZWdpc3RyeS5w eSBiL3dlYi9wZ2FkbWluL3V0aWxzL2R5bmFtaWNfcmVnaXN0cnkvdGVzdHMvdGVzdF9keW5hbWlj X3JlZ2lzdHJ5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNDcyYWEy ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMvZHluYW1pY19yZWdpc3Ry eS90ZXN0cy90ZXN0X2R5bmFtaWNfcmVnaXN0cnkucHkKQEAgLTAsMCArMSwzOSBAQAorIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmln aHQgKEMpIDIwMTMgLSAyMDIxLCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMg c29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKK2Zyb20gcGdhZG1pbi51dGlscy5yb3V0ZSBpbXBvcnQgQmFzZVRlc3RH ZW5lcmF0b3IKK2Zyb20gLnJlZ2lzdHJ5IGltcG9ydCB0ZXN0X2xvYWRfbW9kdWxlc19iYXNlZF9y ZWdpc3RyeSwgdGVzdF9lbXB0eV9yZWdpc3RyeSwgXAorICAgICAgICB0ZXN0X2NyZWF0ZV9iYXNl X2NsYXNzLCB0ZXN0X2xvYWRfY2xhc3NuYW1lX3JlZ2lzdHJ5CisKKworY2xhc3MgVGVzdER5bmFt aWNSZWdpc3RyeShCYXNlVGVzdEdlbmVyYXRvcik6CisKKyAgICBzY2VuYXJpb3MgPSBbCisgICAg ICAgICgKKyAgICAgICAgICAgICJDaGVjayBlbXB0eSByZWdpc3RyeSIsCisgICAgICAgICAgICBk aWN0KHRlc3Q9dGVzdF9lbXB0eV9yZWdpc3RyeSksCisgICAgICAgICksCisgICAgICAgICgKKyAg ICAgICAgICAgICdMb2FkIHRoZSByZWdpc3RyeSBiYXNlZCBvbiB0aGUgbW9kdWxlcycsCisgICAg ICAgICAgICBkaWN0KHRlc3Q9dGVzdF9sb2FkX21vZHVsZXNfYmFzZWRfcmVnaXN0cnkpLAorICAg ICAgICApLAorICAgICAgICAoCisgICAgICAgICAgICAnTG9hZCB0aGUgcmVnaXN0cnkgYmFzZWQg b24gdGhlIG5hbWUgb2YgdGhlIGNsYXNzZXMnLAorICAgICAgICAgICAgZGljdCh0ZXN0PXRlc3Rf bG9hZF9jbGFzc25hbWVfcmVnaXN0cnkpLAorICAgICAgICApLAorICAgICAgICAoCisgICAgICAg ICAgICAiV2hlbiBjcmVhdGVkIGEgYmFzZSBjbGFzcyByZWdpc3RyeSBpcyBpbml0aWFsaXplZCIs CisgICAgICAgICAgICBkaWN0KHRlc3Q9dGVzdF9jcmVhdGVfYmFzZV9jbGFzcyksCisgICAgICAg ICksCisgICAgXQorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgIGVycm9yID0gc2Vs Zi50ZXN0KCkKKworICAgICAgICBpZiBlcnJvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNl bGYuZmFpbChlcnJvcikK --000000000000784c6c05c50fe8d7--