<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugzilla.yoctoproject.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugzilla.yoctoproject.org/"
          
          maintainer="it-coreprojects-helpdesk@linuxfoundation.org"
>

    <bug>
          <bug_id>10320</bug_id>
          
          <creation_ts>2016-09-22 13:24:27 +0000</creation_ts>
          <short_desc>nativesdk signatures changing between certain MACHINE settings</short_desc>
          <delta_ts>2016-10-03 13:53:46 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>7</classification_id>
          <classification>Build System, Metadata &amp; Runtime</classification>
          <product>OE-Core</product>
          <component>core</component>
          <version>2.2</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Multiple</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>Medium+</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>2.2 M4</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Lock">joshuagloe</reporter>
          <assigned_to name="Joshua Lock">joshuagloe</assigned_to>
          <cc>meta.mr.watcher</cc>
    
    <cc>meta.watcher</cc>
          
          
          <cf_os>---</cf_os>
          <cf_regression_type>---</cf_regression_type>
          
          <cf_docchange>No (bug/feature does not impact docs)</cf_docchange>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>66482</commentid>
    <comment_count>0</comment_count>
      <attachid>3438</attachid>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-09-22 13:24:27 +0000</bug_when>
    <thetext>Created attachment 3438
sigdata for qemux86-64 &amp; qemuarm uninative-tarball:do_populate_sdk

When debugging signature related issues with uninative-tarball and buildtools-tarball I observed various tasks for nativesdk recipes being rerun (packagedata, populate_sysroot, write_rpm) resulting in the need to re-run the populate_sdk task due to changed signatures.

Reproduction steps:

$ MACHINE=qemux86-64 bitbake uninative-tarball
$ MACHINE=qemuarm bitbake uninative-tarball
$ MACHINE=qemumips64 bitbake uninative-tarball

One the initial uninative-tarball build has completed we wouldn&apos;t expect any work to be done for the 2nd and 3rd bitbake run, however on the 3rd (qemumips64) we observe nativesdk tasks being run and uninative-tarball:do_populate_sdk being run again.

Attached are sigdata files for do_populate_sdk:

For qemux86-64 and qemuarm:
1.0-r0.do_populate_sdk.sigdata.f55cc46a5dbc96434e9070615fd01c37

For qemumips64:
1.0-r0.do_populate_sdk.sigdata.c00b68f90b4f6e7997ec6d11c62cd2bf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66483</commentid>
    <comment_count>1</comment_count>
      <attachid>3439</attachid>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-09-22 13:25:02 +0000</bug_when>
    <thetext>Created attachment 3439
sigdata for qemumips64 uninative-tarball:do_populate_sdk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66495</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-09-22 15:01:31 +0000</bug_when>
    <thetext>This is related to failures we&apos;re seeing on the buildtools autobuilder and needs fixing quickly to enable uninative and buildtools tarballs to be built.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66499</commentid>
    <comment_count>3</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-09-22 15:12:42 +0000</bug_when>
    <thetext>We should add a selftest for this case so that we detect the breakage in future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66520</commentid>
    <comment_count>4</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-09-22 21:02:35 +0000</bug_when>
    <thetext>This is specific to mips machines which include a variable MIPSPKGSFX_ABI in their values for the target TUNE_PKGARCH.

bitbake-diffsigs tmp/stamps/x86_64-nativesdk-pokysdk-linux/nativesdk-glibc-initial/2.24-r0.do_install.sigdata.0a4c775cc30ecd9e0484741d12829713 tmp/stamps/x86_64-nativesdk-pokysdk-linux/nativesdk-glibc-initial/2.24-r0.do_install.sigdata.0e50e80f6d1c3ab02c4c61de99b576e5                       basehash changed from 18d262a7dd0189dfa8df63a7915417db to 5ef4c25ef31eece9f00f5a670a092182               Variable MIPSPKGSFX_ABI value changed from &apos;None&apos; to &apos;${@bb.utils.contains(&apos;TUNE_FEATURES&apos;, &apos;n32&apos;, &apos;-n32&apos;, &apos;&apos;, d)}                                                                                                TUNE_FEATURES{n32} = Unset&apos;

I think we need to set the TUNE_PKGARCH for nativesdk recipes to SDK_ARCH, as is already done for crosssdk recipes, but this alone isn&apos;t enough to prevent the signature of nativesdk-glibc-initial:do_install from changing, the same bitbake-diffsigs output is generated with `TUNE_PKGARCH = &quot;${SDK_ARCH}&quot;` added to nativesdk.bbclass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66582</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-09-26 15:13:36 +0000</bug_when>
    <thetext>The only way I&apos;ve been able to prevent MIPSPKGSFX_ABI from influencing do_install of nativesdk recipes is to add it to BB_HASHBASE_WHITELIST. I&apos;ve yet to determine how to test whether this has any adverse effects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66745</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-09-30 08:55:33 +0000</bug_when>
    <thetext>Thanks to some signature analysis tips from Richard we&apos;ve discovered that oe_multilib_header depends on the MIPSPKGSFX_ABI variable which changes when the target is mips.

multilib_header.bbclass is an empty function for -native variants, because &quot;Dependencies on arch variables like MIPSPKGSFX_ABI can be problematic.&quot;

We clearly need a similar empty function for nativesdk too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66746</commentid>
    <comment_count>7</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-09-30 09:10:11 +0000</bug_when>
    <thetext>http://lists.openembedded.org/pipermail/openembedded-core/2016-September/127105.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66801</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Lock">joshuagloe</who>
    <bug_when>2016-10-03 13:53:46 +0000</bug_when>
    <thetext>Patch merged to OE-Core &amp; Poky:

http://git.openembedded.org/openembedded-core/commit/?id=f1c7b4f16dc9a7e5155108641fed8b3d98c931f3

http://git.yoctoproject.org/cgit/cgit.cgi/poky/commit/?id=debb7bb86fff5e26505bedf6bc7baa05b8a545e7</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>3438</attachid>
            <date>2016-09-22 13:24:27 +0000</date>
            <delta_ts>2016-09-22 13:24:27 +0000</delta_ts>
            <desc>sigdata for qemux86-64 &amp; qemuarm uninative-tarball:do_populate_sdk</desc>
            <filename>1.0-r0.do_populate_sdk.sigdata.f55cc46a5dbc96434e9070615fd01c37</filename>
            <type>application/octet-stream</type>
            <size>26587</size>
            <attacher name="Joshua Lock">joshuagloe</attacher>
            
              <data encoding="base64">gASV0GcAAAAAAAB9lCiMDXRhc2t3aGl0ZWxpc3SUTowHZ2VuZGVwc5R9lCiME1NTVEFURVBPU1RJ
TlNURlVOQ1OUj5SME3NzdGF0ZV90YXNrX3ByZWZ1bmOUj5QojAxzc3RhdGVfY2xlYW6UjBVzc3Rh
dGVfc3RhdGVfZnJvbXZhcnOUkIwIRVhURU5EUEWUj5QojAJQRZSQjA1UQVJHRVRfVkVORE9SlI+U
jA1DTEFTU09WRVJSSURFlI+UjAdTREtQQVRIlI+UKIwGRElTVFJPlIwLU0RLX1ZFUlNJT06UkIwO
U1NUQVRFX1BLR1NQRUOUj5QojAxQQUNLQUdFX0FSQ0iUjA5TU1RBVEVfVkVSU0lPTpSMCVRBUkdF
VF9PU5SMDVRBUkdFVF9WRU5ET1KUjAJQUpSMAlBOlIwCUFaUkIwHU0RLX1NZU5SPlCiMCFNES19B
UkNIlIwGU0RLX09TlIwKU0RLX1ZFTkRPUpSQjAJQTpSPlIwOc3N0YXRlX3BhY2thZ2WUj5QojBVT
U1RBVEVQT1NUQ1JFQVRFRlVOQ1OUjBFTU1RBVEVDUkVBVEVGVU5DU5SMFFNTVEFURV9TS0lQX0NS
RUFUSU9OlIwKU1NUQVRFX1BLR5SQjAxTREtfUkRFUEVORFOUj5QojBNUT09MQ0hBSU5fSE9TVF9U
QVNLlIwVVE9PTENIQUlOX1RBUkdFVF9UQVNLlJBoCY+UKIwOQkJfQ1VSUkVOVFRBU0uUjApzc3Rh
dGVfYWRklIwLc3N0YXRlX2luaXSUkIwFU1RBTVCUj5QojApTVEFNUFNfRElSlGgKjAJQUpSMAlBW
lIwUTVVMVElNQUNIX1RBUkdFVF9TWVOUjAJQTpSQjBBTU1RBVEVfTUFOSUZFU1RTlI+UjBhSUE1f
UE9TVFBST0NFU1NfQ09NTUFORFOUj5RoMo+UjAlNVUxUSUxJQlOUj5SMH1RPT0xDSEFJTl9IT1NU
X1RBU0tfQVRURU1QVE9OTFmUj5SMGE9QS0dfUFJFUFJPQ0VTU19DT01NQU5EU5SPlIwOU1NUQVRF
X1BLR05BTUWUj5QoaBWMEFNTVEFURV9FWFRSQVBBVEiUjBFnZW5lcmF0ZV9zc3RhdGVmbpSQjCFk
b19wb3B1bGF0ZV9zZGtbc3N0YXRlLWlucHV0ZGlyc12Uj5QojAxTREtERVBMT1lESVKUkIwZZG9f
cG9wdWxhdGVfc2RrW2Zha2Vyb290XZSPlGgYj5SMDVNES1BBVEhOQVRJVkWUj5QoaB6MB1NES1BB
VEiUkIwXUlBNX1BSRVBST0NFU1NfQ09NTUFORFOUj5SMB1NES19ESVKUj5SMCEJVSUxEX09TlI+U
jBRzc3RhdGVfdGFza19wb3N0ZnVuY5SPlChoJWgJjA5zc3RhdGVfaW5zdGFsbJSQjA5TU1RBVEVf
TUFOTUFDSJSPlIwZT1BLR19QT1NUUFJPQ0VTU19DT01NQU5EU5SPlGgpj5SMFXNzdGF0ZV9jbGVh
bl9tYW5pZmVzdJSPlIwXRkVFRF9ERVBMT1lESVJfQkFTRV9VUkmUj5RoMI+UjAhTREtfQVJDSJSP
lGg4j5QojAhTREtfQVJDSJSMBlNES19PU5SMClNES19WRU5ET1KUkIwTVE9PTENIQUlOX0hPU1Rf
VEFTS5SPlGgMj5SMElNES19QQUNLQUdJTkdfRlVOQ5SPlIweU0RLSU1BR0VfSU5TVEFMTF9DT01Q
TEVNRU5UQVJZlI+UKIwTY29tcGxlbWVudGFyeV9nbG9ic5SQjA1QQUNLQUdFX0FSQ0hTlI+UaDWP
lIwXU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkSUj5QojBVTREtfUEFDS0FHSU5HX0NPTU1BTkSUkGhy
j5RoFI+UjA9ESVNUUk9PVkVSUklERVOUj5QojAZESVNUUk+UkGgXj5QojAhTREtfQVJDSJSQjAtU
QVJHRVRfQVJDSJSPlIwGU0RLX09TlI+UKGhWkGgnj5SMEk5PX1JFQ09NTUVOREFUSU9OU5SPlIwQ
U0RLVEFSR0VUU1lTUk9PVJSPlCiMGVJFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVOUaBGQaCqPlCho
RZCMClNES19PVVRQVVSUj5QojAdTREtfRElSlJCMHlBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09N
TUFORJSPlGguj5SMEU1VTFRJTElCX1ZBUklBTlRTlI+UaDaPlIwYYWxsX211bHRpbGliX3R1bmVf
dmFsdWVzlI+UKIwRTVVMVElMSUJfVkFSSUFOVFOUjAlPVkVSUklERVOUkGgxj5RoE4+UjBNCQURf
UkVDT01NRU5EQVRJT05TlI+UjBhNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFOUj5SMF0JVSUxEX0lN
QUdFU19GUk9NX0ZFRURTlI+UjAxMSUJDT1ZFUlJJREWUj5SMCVRBUkdFVF9PU5SPlGhaj5QoaARo
M2hbaCNoOpCMFnJ1bnRpbWVfbWFwcGluZ19yZW5hbWWUj5QojBNnZXRfcGFja2FnZV9tYXBwaW5n
lJCMGWRvX3BvcHVsYXRlX3Nka1tyZGVwZW5kc12Uj5QoaCuQaEiPlIwKU0RLX1ZFTkRPUpSPlIwa
QUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFOUj5QoaJSQaEePlIwKU0RLTUFDSElORZSPlIwQU1NU
QVRFQ0xFQU5GVU5DU5SPlGhLj5QoaLCMAlBOlJBoCI+UKGiyaGCQaHiPlChobpBop4+UaDePlGgo
j5SMD0JCRVhURU5EVkFSSUFOVJSPlIwWVFJBTlNMQVRFRF9UQVJHRVRfQVJDSJSPlCiMC1RBUkdF
VF9BUkNIlJBoiY+UjCBQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORJSPlIwTcG9wdWxh
dGVfc2RrX2NvbW1vbpSPlCiMB1NES19ESVKUaEFopWhraCOQjBFTREtfUEFDS0FHRV9BUkNIU5SP
lChoZZCMD1BBQ0tBR0VfQ0xBU1NFU5SPlGiXj5QojAlUQVJHRVRfT1OUaA+MCEJVSUxEX09TlGi9
jAJQTpRooGh7kHWMC3J1bnRhc2tkZXBzlF2UKIx0dmlydHVhbDpuYXRpdmU6L2hvbWUvam9zaHVh
Z2wvUHJvamVjdHMvcG9reS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJl
cG9fMC40LjExLmJiLmRvX3BvcHVsYXRlX3N5c3Jvb3SUjHB2aXJ0dWFsOm5hdGl2ZXNkazovaG9t
ZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1
bnRpbWVfNi4yLmJiLmRvX3BhY2thZ2Vfd3JpdGVfcnBtlIxqdmlydHVhbDpuYXRpdmVzZGs6L2hv
bWUvam9zaHVhZ2wvUHJvamVjdHMvcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1y
dW50aW1lXzYuMi5iYi5kb19wYWNrYWdlZGF0YZSMa3ZpcnR1YWw6bmF0aXZlc2RrOi9ob21lL2pv
c2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2NfNi4y
LmJiLmRvX3BhY2thZ2Vfd3JpdGVfcnBtlIxldmlydHVhbDpuYXRpdmVzZGs6L2hvbWUvam9zaHVh
Z2wvUHJvamVjdHMvcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY182LjIuYmIu
ZG9fcGFja2FnZWRhdGGUjHB2aXJ0dWFsOm5hdGl2ZXNkazovaG9tZS9qb3NodWFnbC9Qcm9qZWN0
cy9wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjI0LmJiLmRvX3Bh
Y2thZ2Vfd3JpdGVfcnBtlIxqdmlydHVhbDpuYXRpdmVzZGs6L2hvbWUvam9zaHVhZ2wvUHJvamVj
dHMvcG9reS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGVfMi4yNC5iYi5kb19w
YWNrYWdlZGF0YZSMb3ZpcnR1YWw6bmF0aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bv
a3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjQuYmIuZG9fcG9wdWxh
dGVfc3lzcm9vdJSMaXZpcnR1YWw6bmF0aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bv
a3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yNC5iYi5kb19wYWNrYWdlX3dyaXRl
X3JwbZSMY3ZpcnR1YWw6bmF0aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0
YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yNC5iYi5kb19wYWNrYWdlZGF0YZSMaHZpcnR1
YWw6bmF0aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVzLWNv
cmUvZ2xpYmMvZ2xpYmNfMi4yNC5iYi5kb19wb3B1bGF0ZV9zeXNyb290lIyEdmlydHVhbDpuYXRp
dmVzZGs6L2hvbWUvam9zaHVhZ2wvUHJvamVjdHMvcG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xp
bnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC44LmJiLmRvX3BhY2thZ2Vfd3Jp
dGVfcnBtlIx+dmlydHVhbDpuYXRpdmVzZGs6L2hvbWUvam9zaHVhZ2wvUHJvamVjdHMvcG9reS9t
ZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNf
NC44LmJiLmRvX3BhY2thZ2VkYXRhlIxlL2hvbWUvam9zaHVhZ2wvUHJvamVjdHMvcG9reS9tZXRh
L3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQxLmJiLmRvX3BvcHVs
YXRlX3N5c3Jvb3SUjGh2aXJ0dWFsOm5hdGl2ZTovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5
L21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjMuYmIuZG9fcG9wdWxhdGVfc3lz
cm9vdJSMcnZpcnR1YWw6bmF0aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0
YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOS5iYi5kb19wYWNrYWdlX3dy
aXRlX3JwbZSMbHZpcnR1YWw6bmF0aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kv
bWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOS5iYi5kb19wYWNrYWdl
ZGF0YZSMbnZpcnR1YWw6bmF0aXZlOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9y
ZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOS5iYi5kb19wb3B1bGF0ZV9zeXNy
b290lIxxdmlydHVhbDpuYXRpdmVzZGs6L2hvbWUvam9zaHVhZ2wvUHJvamVjdHMvcG9reS9tZXRh
L3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC45LmJiLmRvX3BvcHVsYXRlX3N5
c3Jvb3SUjGh2aXJ0dWFsOm5hdGl2ZTovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21ldGEv
cmVjaXBlcy1leHRlbmRlZC9waXh6L3BpeHpfMS4wLjYuYmIuZG9fcG9wdWxhdGVfc3lzcm9vdJSM
bHZpcnR1YWw6bmF0aXZlOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVz
LWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS44LjEuYmIuZG9fcG9wdWxhdGVfc3lzcm9vdJSMcnZp
cnR1YWw6bmF0aXZlOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVzLWRl
dnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbV9naXQuYmIuZG9fcG9wdWxhdGVfc3lzcm9vdJSM
Z3ZpcnR1YWw6bmF0aXZlOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVz
LWRldnRvb2xzL3JwbS9ycG1fNS40LjE2LmJiLmRvX3BvcHVsYXRlX3N5c3Jvb3SUjGt2aXJ0dWFs
Om5hdGl2ZTovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29s
cy9ycG0vcnBtcmVzb2x2ZV8xLjAuYmIuZG9fcG9wdWxhdGVfc3lzcm9vdJRljAh0YXNrZGVwc5Rd
lChorWiaaLtoMGieaFZoD2gTaHtoCmhiaKBoP2icaJFoOGiFaF1oQ2iXaBdoc2jIaAxoI2iOaMFo
Nmg3aIloPGhSaEtocGiwaBFoT2iHaGVoVGiCaItoxmh4aG5odmgraB5oq2gUaLJoKGgnaARoR2g6
aFtoKmhFaBVoKWgYaDNoNWiAaKJoDWhraEFoLmi9aJRocmhMaKhoSWhIaKdow2ilaDFoCGhgaDJo
WmglaAloWGgGZYwNYmFzZXdoaXRlbGlzdJSPlCiMBEhPTUWUjAtQS0dEQVRBX0RJUpSMB0xPR05B
TUWUjARVU0VSlIwPUFJTRVJWX0RVTVBGSUxFlIwKQ0NBQ0hFX0RJUpSMB1dBUk5fUUGUjAtQUlNF
UlZfSE9TVJSMDVBBUkFMTEVMX01BS0WUjA5DQ0FDSEVfRElTQUJMRZSMBVNIRUxMlIwGRExfRElS
lIwLQkJfVEFTS0hBU0iUjAhDT1JFQkFTRZSMD1BSU0VSVl9MT0NLRE9XTpSMDFNES1BLR1NVRkZJ
WJSMEEJCX1dPUktFUkNPTlRFWFSUjARGSUxFlIwMTElDRU5TRV9QQVRIlIwOUFJTRVJWX0RVTVBE
SVKUjAdXT1JLRElSlIwSRVhURVJOQUxfVE9PTENIQUlOlIwEVEVSTZSMD0ZJTEVTRVhUUkFQQVRI
U5SMBFBBVEiUjA5TU1RBVEVfUEtHQVJDSJSMElNUQUdJTkdfRElSX1RBUkdFVJSMA1BXRJSMBkJC
UEFUSJSMCEJCU0VSVkVSlIwKU1NUQVRFX0RJUpSMCUZJTEVTUEFUSJSMBlRNUERJUpSMDEZJTEVf
RElSTkFNRZSMClNUQU1QQ0xFQU6UjAhFUlJPUl9RQZSMCkJVSUxEX0FSQ0iUjBBTVEFHSU5HX0RJ
Ul9IT1NUlIwHVEhJU0RJUpSMBkNDQUNIRZSQjA1ydW50YXNraGFzaGVzlH2UKGjSjCBkZGI4MDlj
NTUxYjU0N2MzYWNlMzZiNTg4MzZkZDQ5NJRo24wgMWJlYjI1MWZjYzJiZjM4MTE5OTA2YjhjYWMw
N2VjMmKUaNqMIDNkY2FkMzg0YTg5NTMxOGQ4MGZhODMyMTE5YTFmM2Q4lGjljCBjYjlmODUzMDYx
NGQ2YTg0N2ZiNTBlZjliODRhYWYxMZRo4IwgY2JmMTI3OGYwNTYyYTE3YjNmZjFkYjg2N2FjYWQ5
MGaUaOOMIDViMmRhM2JjNjQ2YjM1M2Y3NmVjZDBhYjJiMmU5MWQ0lGjVjCBiMTM3NDhjNTU4MWY1
ZjVhOTQ0NjU3NTFmN2I5OTFhM5Ro2YwgN2M2ODFhMTExYmQ2ZWUyZDY1NGI0YTE1ZWQ2MDA1NjmU
aNiMIDEyYzcxNGJkYzkyMjVmMzY4NGFkN2M0ZmM3ZWFiYTNjlGjhjCA0NTFlYzkwZDk4OWNhNTYy
NjNmMThhOWVjZGZhYTA3M5Ro0YwgYjJlYWFmZjU5MGU2ZmI0ZjIyOWIzOGJjOWI2NjY5OTWUaNSM
IDRkZjBmODM3YzMyMGEyMjc2YjkyNmNmYWI1MDIyOTI5lGjTjCA1MzMzOTRiNzY3ZTIxMjNiNjVj
OGViOTNlZjllMWUyMZRo4owgMjUxNjMzODc3YTg3OWI3MjZkOWRhMTExOTg2MzJmZTaUaNeMIGVj
YjI2OGE1ZjEwZGVkOWJiNzc5ZGMwYWU0NTFlNjFklGjWjCA2Yjc3MWJjNjMxZGI5MjZlMzZkODA5
NTBlNjg2ODgxZZRo3owgYjVmNTFmNjkyYzg0NzczMjhhYzNiNjljNGU5ZDA4ZmKUaOeMIDAwZjlm
M2VjZjI0YzgyZTdiNzNmYzI0ZGVkZDJiYjcxlGjQjCBiNDBkMDliMWZlN2Q2MDU5YzViMDcxOTA0
MzcxZjkzMJRo3YwgNDdjMGU5MmZmZmU5ZDM1ZDkwM2M0YzBkZmU2MTYxMGGUaNyMIGQwMzc1ODYx
ZjEwNWRmNzY2M2JjNmE1MDE2OTcxMDZhlGjkjCA3MjI4MWYyZWFkNjljNDA5OGFmMTlkZTU4MjZj
Y2YxNpRo34wgOTRkYjg1NzMyOTEyMDU2OWZlNDEzNzgxMTQyMmZmZTCUaOaMIDU0ZjFmN2IzYWQy
MWFlOGVhMWE4ZjgxYmYxZTY3NGVmlHWMBHRhc2uUjA9kb19wb3B1bGF0ZV9zZGuUjAhiYXNlaGFz
aJSMIGM4ZjRhNDVhNjYyM2NjMGE3YTMzZDUwZjVjNDhjOGFjlIwIdGFza2hhc2iUjCBmNTVjYzQ2
YTVkYmM5NjQzNGU5MDcwNjE1ZmQwMWMzN5SMFGZpbGVfY2hlY2tzdW1fdmFsdWVzlF2UKIwadG9v
bGNoYWluLXNoYXItcmVsb2NhdGUuc2iUjCA5Mjg1NzM0M2MwZTJmNjQxYjA3N2E5NzIwZjM3ZTkx
ZZSGlIwZdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaJSMIGZlN2VjNmJjNjkyOWNlYWJjNmNlYWQx
MDBhOGZkM2FilIaUZYwHdmFydmFsc5R9lChoBIwAlGgGjE4gICAgc2hhcmVkX3N0YXRlID0gc3N0
YXRlX3N0YXRlX2Zyb212YXJzKGQpCiAgICBzc3RhdGVfY2xlYW4oc2hhcmVkX3N0YXRlLCBkKQqU
aAqMNSR7QFsnJywnJHtQRX1fJ11baW50KGQuZ2V0VmFyKCdQRScsIFRydWUpIG9yIDApID4gMF19
lGgNjAUtcG9reZRoD4wMY2xhc3MtdGFyZ2V0lGgRjB0vb3B0LyR7RElTVFJPfS8ke1NES19WRVJT
SU9OfZRoFYxqc3N0YXRlOiR7UE59OiR7UEFDS0FHRV9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtU
QVJHRVRfT1N9OiR7UFZ9OiR7UFJ9OiR7U1NUQVRFX1BLR0FSQ0h9OiR7U1NUQVRFX1ZFUlNJT059
OpRoHoxuJHtTREtfQVJDSH0ke1NES19WRU5ET1J9JHtAWyctJyArIGQuZ2V0VmFyKCdTREtfT1Mn
LCBUcnVlKSwgJyddW2QuZ2V0VmFyKCdTREtfT1MnLCBUcnVlKSA9PSAoJycgb3IgJ2N1c3RvbScp
XX2UaCOMVyR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklM
RScsIEZhbHNlKSxkKVswXSBvciAnZGVmYXVsdHBrZ25hbWUnfZRoJVhFCgAAZGVmIHNzdGF0ZV9w
YWNrYWdlKHNzLCBkKToKICAgIGltcG9ydCBvZS5wYXRoCgogICAgZGVmIG1ha2VfcmVsYXRpdmVf
c3ltbGluayhwYXRoLCBvdXRwdXRwYXRoLCBkKToKICAgICAgICAjIFJlcGxhY2Ugb3V0IGFic29s
dXRlIFRNUERJUiBwYXRocyBpbiBzeW1saW5rcyB3aXRoIHJlbGF0aXZlIG9uZXMKICAgICAgICBp
ZiBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CiAgICAgICAgICAgIHJldHVybgogICAgICAgIGxp
bmsgPSBvcy5yZWFkbGluayhwYXRoKQogICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGxpbmsp
OgogICAgICAgICAgICByZXR1cm4KICAgICAgICBpZiBub3QgbGluay5zdGFydHN3aXRoKHRtcGRp
cik6CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBkZXB0aCA9IG91dHB1dHBhdGgucnBhcnRp
dGlvbih0bXBkaXIpWzJdLmNvdW50KCcvJykKICAgICAgICBiYXNlID0gbGluay5wYXJ0aXRpb24o
dG1wZGlyKVsyXS5zdHJpcCgpCiAgICAgICAgd2hpbGUgZGVwdGggPiAxOgogICAgICAgICAgICBi
YXNlID0gIi8uLiIgKyBiYXNlCiAgICAgICAgICAgIGRlcHRoIC09IDEKICAgICAgICBiYXNlID0g
Ii4iICsgYmFzZQoKICAgICAgICBiYi5kZWJ1ZygyLCAiUmVwbGFjaW5nIGFic29sdXRlIHBhdGgg
JXMgd2l0aCByZWxhdGl2ZSBwYXRoICVzIGZvciAlcyIgJSAobGluaywgYmFzZSwgb3V0cHV0cGF0
aCkpCiAgICAgICAgb3MucmVtb3ZlKHBhdGgpCiAgICAgICAgb3Muc3ltbGluayhiYXNlLCBwYXRo
KQoKICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQoKICAgIHNzdGF0ZWJ1aWxk
ID0gZC5leHBhbmQoIiR7V09SS0RJUn0vc3N0YXRlLWJ1aWxkLSVzLyIgJSBzc1sndGFzayddKQog
ICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKSArICdfJysgc3NbJ3Rh
c2snXSArICIudGd6IgogICAgYmIudXRpbHMucmVtb3ZlKHNzdGF0ZWJ1aWxkLCByZWN1cnNlPVRy
dWUpCiAgICBiYi51dGlscy5ta2RpcmhpZXIoc3N0YXRlYnVpbGQpCiAgICBiYi51dGlscy5ta2Rp
cmhpZXIob3MucGF0aC5kaXJuYW1lKHNzdGF0ZXBrZykpCiAgICBmb3Igc3RhdGUgaW4gc3NbJ2Rp
cnMnXToKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3RhdGVbMV0pOgogICAgICAgICAg
ICBjb250aW51ZQogICAgICAgIGlmIGQuZ2V0VmFyKCdTU1RBVEVfU0tJUF9DUkVBVElPTicsIFRy
dWUpID09ICcxJzoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBzcmNiYXNlID0gc3RhdGVb
MF0ucnN0cmlwKCIvIikucnNwbGl0KCcvJywgMSlbMF0KICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRp
cnMsIGZpbGVzIGluIG9zLndhbGsoc3RhdGVbMV0pOgogICAgICAgICAgICBmb3IgZmlsZSBpbiBm
aWxlczoKICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGZp
bGUpCiAgICAgICAgICAgICAgICBkc3RwYXRoID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBz
dGF0ZVsyXSkKICAgICAgICAgICAgICAgIG1ha2VfcmVsYXRpdmVfc3ltbGluayhzcmNwYXRoLCBk
c3RwYXRoLCBkKQogICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAgICAgICAgICAgICBz
cmNwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBkaXIpCiAgICAgICAgICAgICAgICBkc3Rw
YXRoID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKICAgICAgICAgICAgICAg
IG1ha2VfcmVsYXRpdmVfc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCBkKQogICAgICAgIGJiLmRl
YnVnKDIsICJQcmVwYXJpbmcgdHJlZSAlcyBmb3IgcGFja2FnaW5nIGF0ICVzIiAlIChzdGF0ZVsx
XSwgc3N0YXRlYnVpbGQgKyBzdGF0ZVswXSkpCiAgICAgICAgb2UucGF0aC5jb3B5aGFyZGxpbmt0
cmVlKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKQoKICAgIHdvcmtkaXIgPSBkLmdl
dFZhcignV09SS0RJUicsIFRydWUpCiAgICBmb3IgcGxhaW4gaW4gc3NbJ3BsYWluZGlycyddOgog
ICAgICAgIHBkaXIgPSBwbGFpbi5yZXBsYWNlKHdvcmtkaXIsIHNzdGF0ZWJ1aWxkKQogICAgICAg
IGJiLnV0aWxzLm1rZGlyaGllcihwbGFpbikKICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGRp
cikKICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUocGxhaW4sIHBkaXIpCgogICAgZC5z
ZXRWYXIoJ1NTVEFURV9CVUlMRERJUicsIHNzdGF0ZWJ1aWxkKQogICAgZC5zZXRWYXIoJ1NTVEFU
RV9QS0cnLCBzc3RhdGVwa2cpCgogICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdTU1RBVEVDUkVBVEVG
VU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpICsgXAogICAgICAgICAgICAgWydzc3RhdGVfY3Jl
YXRlX3BhY2thZ2UnLCAnc3N0YXRlX3NpZ25fcGFja2FnZSddICsgXAogICAgICAgICAgICAgKGQu
Z2V0VmFyKCdTU1RBVEVQT1NUQ1JFQVRFRlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKICAg
ICAgICAjIEFsbCBob29rcyBzaG91bGQgcnVuIGluIFNTVEFURV9CVUlMRERJUi4KICAgICAgICBi
Yi5idWlsZC5leGVjX2Z1bmMoZiwgZCwgKHNzdGF0ZWJ1aWxkLCkpCgogICAgYmIuc2lnZ2VuLmR1
bXBfdGhpc190YXNrKHNzdGF0ZXBrZyArICIuc2lnaW5mbyIsIGQpCgogICAgcmV0dXJuCpRoK4wv
JHtUT09MQ0hBSU5fVEFSR0VUX1RBU0t9ICR7VE9PTENIQUlOX0hPU1RfVEFTS32UaAlYbgUAAGRl
ZiBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCwgdGFzayA9IE5vbmUpOgogICAgaWYgdGFzayBpcyBO
b25lOgogICAgICAgIHRhc2sgPSBkLmdldFZhcignQkJfQ1VSUkVOVFRBU0snLCBUcnVlKQogICAg
ICAgIGlmIG5vdCB0YXNrOgogICAgICAgICAgICBiYi5mYXRhbCgic3N0YXRlIGNvZGUgcnVubmlu
ZyB3aXRob3V0IHRhc2sgY29udGV4dD8hIikKICAgICAgICB0YXNrID0gdGFzay5yZXBsYWNlKCJf
c2V0c2NlbmUiLCAiIikKCiAgICBpZiB0YXNrLnN0YXJ0c3dpdGgoImRvXyIpOgogICAgICAgIHRh
c2sgPSB0YXNrWzM6XQogICAgaW5wdXRzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdz
c3RhdGUtaW5wdXRkaXJzJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKICAgIG91dHB1dHMgPSAoZC5n
ZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1vdXRwdXRkaXJzJywgVHJ1ZSkgb3IgIiIp
LnNwbGl0KCkKICAgIHBsYWluZGlycyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0
YXRlLXBsYWluZGlycycsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBsb2NrZmlsZXMgPSAoZC5n
ZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1sb2NrZmlsZScsIFRydWUpIG9yICIiKS5z
cGxpdCgpCiAgICBsb2NrZmlsZXNzaGFyZWQgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywg
J3NzdGF0ZS1sb2NrZmlsZS1zaGFyZWQnLCBUcnVlKSBvciAiIikuc3BsaXQoKQogICAgaW50ZXJj
ZXB0ZnVuY3MgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1pbnRlcmNlcHRm
dW5jcycsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBpZiBub3QgdGFzayBvciBsZW4oaW5wdXRz
KSAhPSBsZW4ob3V0cHV0cyk6CiAgICAgICAgYmIuZmF0YWwoInNzdGF0ZSB2YXJpYWJsZXMgbm90
IHNldHVwIGNvcnJlY3RseT8hIikKCiAgICBpZiB0YXNrID09ICJwb3B1bGF0ZV9saWMiOgogICAg
ICAgIGQuc2V0VmFyKCJTU1RBVEVfUEtHU1BFQyIsICIke1NTVEFURV9TV1NQRUN9IikKICAgICAg
ICBkLnNldFZhcigiU1NUQVRFX0VYVFJBUEFUSCIsICIiKQogICAgICAgIGQuc2V0VmFyKCdTU1RB
VEVfRVhUUkFQQVRIV0lMRENBUkQnLCAiIikKCiAgICBzcyA9IHNzdGF0ZV9pbml0KHRhc2ssIGQp
CiAgICBmb3IgaSBpbiByYW5nZShsZW4oaW5wdXRzKSk6CiAgICAgICAgc3N0YXRlX2FkZChzcywg
aW5wdXRzW2ldLCBvdXRwdXRzW2ldLCBkKQogICAgc3NbJ2xvY2tmaWxlcyddID0gbG9ja2ZpbGVz
CiAgICBzc1snbG9ja2ZpbGVzLXNoYXJlZCddID0gbG9ja2ZpbGVzc2hhcmVkCiAgICBzc1sncGxh
aW5kaXJzJ10gPSBwbGFpbmRpcnMKICAgIHNzWydpbnRlcmNlcHRmdW5jcyddID0gaW50ZXJjZXB0
ZnVuY3MKICAgIHJldHVybiBzcwqUaDOMQiR7U1RBTVBTX0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VU
X1NZU30vJHtQTn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfZRoOowYJHtUTVBESVJ9L3NzdGF0ZS1j
b250cm9slGg8TmgyjLBkZWYgc3N0YXRlX2luaXQodGFzaywgZCk6CiAgICBzcyA9IHt9CiAgICBz
c1sndGFzayddID0gdGFzawogICAgc3NbJ2RpcnMnXSA9IFtdCiAgICBzc1sncGxhaW5kaXJzJ10g
PSBbXQogICAgc3NbJ2xvY2tmaWxlcyddID0gW10KICAgIHNzWydsb2NrZmlsZXMtc2hhcmVkJ10g
PSBbXQogICAgcmV0dXJuIHNzCpRoP05oQWo+AQAAaENOaEWMbCR7U1NUQVRFX0VYVFJBUEFUSH0k
e0BnZW5lcmF0ZV9zc3RhdGVmbihkLmdldFZhcignU1NUQVRFX1BLR1NQRUMnLCBUcnVlKSwgZC5n
ZXRWYXIoJ0JCX1RBU0tIQVNIJywgVHJ1ZSksIGQpfZRoSYwPJHtTREtERVBMT1lESVJ9lGhMjAEx
lGgYjAEzlGhPjB4ke1NES1BBVEh9L3N5c3Jvb3RzLyR7U0RLX1NZU32UaFJOaFSMDiR7V09SS0RJ
Un0vc2RrlGhWjAVsaW51eJRoWFiDAQAAICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9m
cm9tdmFycyhkKQoKICAgIHNzdGF0ZV9pbnN0YWxsKHNoYXJlZF9zdGF0ZSwgZCkKICAgIGZvciBp
bnRlcmNlcHQgaW4gc2hhcmVkX3N0YXRlWydpbnRlcmNlcHRmdW5jcyddOgogICAgICAgIGJiLmJ1
aWxkLmV4ZWNfZnVuYyhpbnRlcmNlcHQsIGQsIChkLmdldFZhcigiV09SS0RJUiIsIFRydWUpLCkp
CiAgICBvbWFzayA9IG9zLnVtYXNrKDBvMDAyKQogICAgaWYgb21hc2sgIT0gMG8wMDI6CiAgICAg
ICBiYi5ub3RlKCJVc2luZyB1bWFzayAwbzAwMiAobm90ICUwbykgZm9yIHNzdGF0ZSBwYWNrYWdp
bmciICUgb21hc2spCiAgICBzc3RhdGVfcGFja2FnZShzaGFyZWRfc3RhdGUsIGQpCiAgICBvcy51
bWFzayhvbWFzaykKlGhbjAZ4ODZfNjSUaF1OaClOaGBYygMAAGRlZiBzc3RhdGVfY2xlYW5fbWFu
aWZlc3QobWFuaWZlc3QsIGQpOgogICAgaW1wb3J0IG9lLnBhdGgKCiAgICBtZmlsZSA9IG9wZW4o
bWFuaWZlc3QpCiAgICBlbnRyaWVzID0gbWZpbGUucmVhZGxpbmVzKCkKICAgIG1maWxlLmNsb3Nl
KCkKCiAgICBmb3IgZW50cnkgaW4gZW50cmllczoKICAgICAgICBlbnRyeSA9IGVudHJ5LnN0cmlw
KCkKICAgICAgICBiYi5kZWJ1ZygyLCAiUmVtb3ZpbmcgbWFuaWZlc3Q6ICVzIiAlIGVudHJ5KQog
ICAgICAgICMgV2UgY2FuIHJhY2UgYWdhaW5zdCBhbm90aGVyIHBhY2thZ2UgcG9wdWxhdGluZyBk
aXJlY3RvcmllcyBhcyB3ZSdyZSByZW1vdmluZyB0aGVtCiAgICAgICAgIyBzbyB3ZSBpZ25vcmUg
ZXJyb3JzIGhlcmUuCiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBlbnRyeS5lbmRzd2l0aCgi
LyIpOgogICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZW50cnlbOi0xXSk6CiAgICAg
ICAgICAgICAgICAgICAgb3MucmVtb3ZlKGVudHJ5WzotMV0pCiAgICAgICAgICAgICAgICBlbGlm
IG9zLnBhdGguZXhpc3RzKGVudHJ5KSBhbmQgbGVuKG9zLmxpc3RkaXIoZW50cnkpKSA9PSAwOgog
ICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGVudHJ5WzotMV0pCiAgICAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShlbnRyeSkKICAgICAgICBleGNlcHQgT1NF
cnJvcjoKICAgICAgICAgICAgcGFzcwoKICAgIHBvc3RybSA9IG1hbmlmZXN0ICsgIi5wb3N0cm0i
CiAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5pZmVzdCArICIucG9zdHJtIik6CiAgICAgICAgaW1w
b3J0IHN1YnByb2Nlc3MKICAgICAgICBvcy5jaG1vZChwb3N0cm0sIDBvNzU1KQogICAgICAgIHN1
YnByb2Nlc3MuY2FsbChwb3N0cm0sIHNoZWxsPVRydWUpCiAgICAgICAgb2UucGF0aC5yZW1vdmUo
cG9zdHJtKQoKICAgIG9lLnBhdGgucmVtb3ZlKG1hbmlmZXN0KQqUaGJOaDBOaGVqVQEAAGg4jCwk
e1NES19BUkNIfS1uYXRpdmVzZGske1NES19WRU5ET1J9LSR7U0RLX09TfZRoa4x0ICAgIG5hdGl2
ZXNkay1nbGliYyAgICAgbmF0aXZlc2RrLWdsaWJjLWdjb252LWlibTg1MCAgICAgbmF0aXZlc2Rr
LWdsaWJjLWdjb252LWlzbzg4NTktMSAgICAgbmF0aXZlc2RrLXBhdGNoZWxmICAgICCUaAxqPgEA
AGhwjC8ke0Bjb21wbGVtZW50YXJ5X2dsb2JzKCJTREtJTUFHRV9GRUFUVVJFUyIsIGQpfZRoc2o+
AQAAaDWMECR7VE1QRElSfS9zdGFtcHOUaHaMSSBjcmVhdGVfc2RrX2ZpbGVzOyBjaGVja19zZGtf
c3lzcm9vdHM7IHRhcl9zZGs7ICR7U0RLX1BBQ0tBR0lOR19DT01NQU5EfSCUaHJYKgEAAGRlZiBj
b21wbGVtZW50YXJ5X2dsb2JzKGZlYXR1cmV2YXIsIGQpOgogICAgYWxsX2dsb2JzID0gZC5nZXRW
YXJGbGFncygnQ09NUExFTUVOVEFSWV9HTE9CJykKICAgIGdsb2JzID0gW10KICAgIGZlYXR1cmVz
ID0gc2V0KChkLmdldFZhcihmZWF0dXJldmFyLCBUcnVlKSBvciAnJykuc3BsaXQoKSkKICAgIGZv
ciBuYW1lLCBnbG9iIGluIGFsbF9nbG9icy5pdGVtcygpOgogICAgICAgIGlmIG5hbWUgaW4gZmVh
dHVyZXM6CiAgICAgICAgICAgIGdsb2JzLmFwcGVuZChnbG9iKQogICAgcmV0dXJuICcgJy5qb2lu
KGdsb2JzKQqUaBSMDDIuMStzbmFwc2hvdJRoe4wiJHtAZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUp
IG9yICcnfZRoF4wLJHtTREtfQVJDSH2UaICMBG5vbmWUaIKMCyR7QlVJTERfT1N9lGgnaj4BAABo
Wli/FgAAZGVmIHNzdGF0ZV9pbnN0YWxsKHNzLCBkKToKICAgIGltcG9ydCBvZS5wYXRoCiAgICBp
bXBvcnQgb2Uuc3N0YXRlc2lnCiAgICBpbXBvcnQgc3VicHJvY2VzcwoKICAgIHNoYXJlZGZpbGVz
ID0gW10KICAgIHNoYXJlZGRpcnMgPSBbXQogICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZXhwYW5k
KCIke1NTVEFURV9NQU5JRkVTVFN9IikpCgogICAgc3N0YXRlaW5zdCA9IGQuZXhwYW5kKCIke1dP
UktESVJ9L3NzdGF0ZS1pbnN0YWxsLSVzLyIgJSBzc1sndGFzayddKQoKICAgIG1hbmlmZXN0LCBk
MiA9IG9lLnNzdGF0ZXNpZy5zc3RhdGVfZ2V0X21hbmlmZXN0X2ZpbGVuYW1lKHNzWyd0YXNrJ10s
IGQpCgogICAgaWYgb3MuYWNjZXNzKG1hbmlmZXN0LCBvcy5SX09LKToKICAgICAgICBiYi5mYXRh
bCgiUGFja2FnZSBhbHJlYWR5IHN0YWdlZCAoJXMpPyEiICUgbWFuaWZlc3QpCgogICAgZC5zZXRW
YXIoIlNTVEFURV9JTlNUX1BPU1RSTSIsIG1hbmlmZXN0ICsgIi5wb3N0cm0iKQoKICAgIGxvY2tz
ID0gW10KICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMtc2hhcmVkJ106CiAgICAgICAgbG9j
a3MuYXBwZW5kKGJiLnV0aWxzLmxvY2tmaWxlKGxvY2ssIFRydWUpKQogICAgZm9yIGxvY2sgaW4g
c3NbJ2xvY2tmaWxlcyddOgogICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShs
b2NrKSkKCiAgICBmb3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKICAgICAgICBiYi5kZWJ1ZygyLCAi
U3RhZ2luZyBmaWxlcyBmcm9tICVzIHRvICVzIiAlIChzdGF0ZVsxXSwgc3RhdGVbMl0pKQogICAg
ICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzdGF0ZVsxXSk6CiAgICAg
ICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgogICAgICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBh
dGguam9pbih3YWxrcm9vdCwgZmlsZSkKICAgICAgICAgICAgICAgIGRzdHBhdGggPSBzcmNwYXRo
LnJlcGxhY2Uoc3RhdGVbMV0sIHN0YXRlWzJdKQogICAgICAgICAgICAgICAgI2JiLmRlYnVnKDIs
ICJTdGFnaW5nICVzIHRvICVzIiAlIChzcmNwYXRoLCBkc3RwYXRoKSkKICAgICAgICAgICAgICAg
IHNoYXJlZGZpbGVzLmFwcGVuZChkc3RwYXRoKQogICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6
CiAgICAgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGRpcikKICAg
ICAgICAgICAgICAgIGRzdGRpciA9IHNyY2Rpci5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkK
ICAgICAgICAgICAgICAgICNiYi5kZWJ1ZygyLCAiU3RhZ2luZyAlcyB0byAlcyIgJSAoc3JjZGly
LCBkc3RkaXIpKQogICAgICAgICAgICAgICAgaWYgbm90IGRzdGRpci5lbmRzd2l0aCgiLyIpOgog
ICAgICAgICAgICAgICAgICAgIGRzdGRpciA9IGRzdGRpciArICIvIgogICAgICAgICAgICAgICAg
c2hhcmVkZGlycy5hcHBlbmQoZHN0ZGlyKQoKICAgICMgQ2hlY2sgdGhlIGZpbGUgbGlzdCBmb3Ig
Y29uZmxpY3RzIGFnYWluc3QgZmlsZXMgd2hpY2ggYWxyZWFkeSBleGlzdAogICAgd2hpdGVsaXN0
ID0gKGQuZ2V0VmFyKCJTU1RBVEVfRFVQV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkK
ICAgIG1hdGNoID0gW10KICAgIGZvciBmIGluIHNoYXJlZGZpbGVzOgogICAgICAgIGlmIG9zLnBh
dGguZXhpc3RzKGYpOgogICAgICAgICAgICBmID0gb3MucGF0aC5ub3JtcGF0aChmKQogICAgICAg
ICAgICByZWFsbWF0Y2ggPSBUcnVlCiAgICAgICAgICAgIGZvciB3IGluIHdoaXRlbGlzdDoKICAg
ICAgICAgICAgICAgIHcgPSBvcy5wYXRoLm5vcm1wYXRoKHcpCiAgICAgICAgICAgICAgICBpZiBm
LnN0YXJ0c3dpdGgodyk6CiAgICAgICAgICAgICAgICAgICAgcmVhbG1hdGNoID0gRmFsc2UKICAg
ICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBpZiByZWFsbWF0Y2g6CiAgICAgICAg
ICAgICAgICBtYXRjaC5hcHBlbmQoZikKICAgICAgICAgICAgICAgIHNzdGF0ZV9zZWFyY2hfY21k
ID0gImdyZXAgLXJsICclcycgJXMgLS1leGNsdWRlPW1hc3Rlci5saXN0IHwgc2VkIC1lICdzOl4u
Ki86OicgLWUgJ3M6XC5wb3B1bGF0ZS1zeXNyb290OjonIiAlIChmLCBkLmV4cGFuZCgiJHtTU1RB
VEVfTUFOSUZFU1RTfSIpKQogICAgICAgICAgICAgICAgc2VhcmNoX291dHB1dCA9IHN1YnByb2Nl
c3MuUG9wZW4oc3N0YXRlX3NlYXJjaF9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNz
LlBJUEUpLmNvbW11bmljYXRlKClbMF0KICAgICAgICAgICAgICAgIGlmIHNlYXJjaF9vdXRwdXQg
IT0gIiI6CiAgICAgICAgICAgICAgICAgICAgbWF0Y2guYXBwZW5kKCJNYXRjaGVkIGluICVzIiAl
IHNlYXJjaF9vdXRwdXQucnN0cmlwKCkpCiAgICBpZiBtYXRjaDoKICAgICAgICBiYi5lcnJvcigi
VGhlIHJlY2lwZSAlcyBpcyB0cnlpbmcgdG8gaW5zdGFsbCBmaWxlcyBpbnRvIGEgc2hhcmVkICIg
XAogICAgICAgICAgImFyZWEgd2hlbiB0aG9zZSBmaWxlcyBhbHJlYWR5IGV4aXN0LiBUaG9zZSBm
aWxlcyBhbmQgdGhlaXIgbWFuaWZlc3QgIiBcCiAgICAgICAgICAibG9jYXRpb24gYXJlOlxuICAg
JXNcblBsZWFzZSB2ZXJpZnkgd2hpY2ggcmVjaXBlIHNob3VsZCBwcm92aWRlIHRoZSAiIFwKICAg
ICAgICAgICJhYm92ZSBmaWxlcy5cblRoZSBidWlsZCBoYXMgc3RvcHBlZCBhcyBjb250aW51aW5n
IGluIHRoaXMgc2NlbmFyaW8gV0lMTCAiIFwKICAgICAgICAgICJicmVhayB0aGluZ3MsIGlmIG5v
dCBub3csIHBvc3NpYmx5IGluIHRoZSBmdXR1cmUgKHdlJ3ZlIHNlZW4gYnVpbGRzIGZhaWwgIiBc
CiAgICAgICAgICAic2V2ZXJhbCBtb250aHMgbGF0ZXIpLiBJZiB0aGUgc3lzdGVtIGtuZXcgaG93
IHRvIHJlY292ZXIgZnJvbSB0aGlzICIgXAogICAgICAgICAgImF1dG9tYXRpY2FsbHkgaXQgd291
bGQgaG93ZXZlciB0aGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgc2NlbmFyaW9zICIgXAogICAg
ICAgICAgIndoaWNoIGNhbiByZXN1bHQgaW4gdGhpcyBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaCBv
bmUgdGhpcyBpcy4gSXQgbWF5IGJlICIgXAogICAgICAgICAgInlvdSBoYXZlIHN3aXRjaGVkIHBy
b3ZpZGVycyBvZiBzb21ldGhpbmcgbGlrZSB2aXJ0dWFsL2tlcm5lbCAoZS5nLiBmcm9tICIgXAog
ICAgICAgICAgImxpbnV4LXlvY3RvIHRvIGxpbnV4LXlvY3RvLWRldiksIGluIHRoYXQgY2FzZSB5
b3UgbmVlZCB0byBleGVjdXRlIHRoZSAiIFwKICAgICAgICAgICJjbGVhbiB0YXNrIGZvciBib3Ro
IHJlY2lwZXMgYW5kIGl0IHdpbGwgcmVzb2x2ZSB0aGlzIGVycm9yLiBJdCBtYXkgYmUgIiBcCiAg
ICAgICAgICAieW91IGNoYW5nZWQgRElTVFJPX0ZFQVRVUkVTIGZyb20gc3lzdGVtZCB0byB1ZGV2
IG9yIHZpY2UgdmVyc2EuIENsZWFuaW5nICIgXAogICAgICAgICAgInRob3NlIHJlY2lwZXMgc2hv
dWxkIGFnYWluIHJlc29sdmUgdGhpcyBlcnJvciBob3dldmVyIHN3aXRjaGluZyAiIFwKICAgICAg
ICAgICJESVNUUk9fRkVBVFVSRVMgb24gYW4gZXhpc3RpbmcgYnVpbGQgZGlyZWN0b3J5IGlzIG5v
dCBzdXBwb3J0ZWQsIHlvdSAiIFwKICAgICAgICAgICJzaG91bGQgcmVhbGx5IGNsZWFuIG91dCB0
bXAgYW5kIHJlYnVpbGQgKHJldXNpbmcgc3N0YXRlIHNob3VsZCBiZSBzYWZlKS4gIiBcCiAgICAg
ICAgICAiSXQgY291bGQgYmUgdGhlIG92ZXJsYXBwaW5nIGZpbGVzIGRldGVjdGVkIGFyZSBoYXJt
bGVzcyBpbiB3aGljaCBjYXNlICIgXAogICAgICAgICAgImFkZGluZyB0aGVtIHRvIFNTVEFURV9E
VVBXSElURUxJU1QgbWF5IGJlIHRoZSBjb3JyZWN0IHNvbHV0aW9uLiBJdCBjb3VsZCAiIFwKICAg
ICAgICAgICJhbHNvIGJlIHlvdXIgYnVpbGQgaXMgaW5jbHVkaW5nIHR3byBkaWZmZXJlbnQgY29u
ZmxpY3RpbmcgdmVyc2lvbnMgb2YgIiBcCiAgICAgICAgICAidGhpbmdzIChlLmcuIGJsdWV6IDQg
YW5kIGJsdWV6IDUgYW5kIHRoZSBjb3JyZWN0IHNvbHV0aW9uIGZvciB0aGF0IHdvdWxkICIgXAog
ICAgICAgICAgImJlIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LiBJZiBpbiBkb3VidCwgcGxlYXNl
IGFzayBvbiB0aGUgbWFpbGluZyBsaXN0LCAiIFwKICAgICAgICAgICJzaGFyaW5nIHRoZSBlcnJv
ciBhbmQgZmlsZWxpc3QgYWJvdmUuIiAlIFwKICAgICAgICAgIChkLmdldFZhcignUE4nLCBUcnVl
KSwgIlxuICIuam9pbihtYXRjaCkpKQogICAgICAgIGJiLmZhdGFsKCJJZiB0aGUgYWJvdmUgbWVz
c2FnZSBpcyB0b28gbXVjaCwgdGhlIHNpbXBsZXIgdmVyc2lvbiBpcyB5b3UncmUgYWR2aXNlZCB0
byB3aXBlIG91dCB0bXAgYW5kIHJlYnVpbGQgKHJldXNpbmcgc3N0YXRlIGlzIGZpbmUpLiBUaGF0
IHdpbGwgbGlrZWx5IGZpeCB0aGluZ3MgaW4gbW9zdCAoYnV0IG5vdCBhbGwpIGNhc2VzLiIpCgog
ICAgIyBXcml0ZSBvdXQgdGhlIG1hbmlmZXN0CiAgICBmID0gb3BlbihtYW5pZmVzdCwgInciKQog
ICAgZm9yIGZpbGUgaW4gc2hhcmVkZmlsZXM6CiAgICAgICAgZi53cml0ZShmaWxlICsgIlxuIikK
CiAgICAjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgZGlyZWN0b3JpZXMgYXBwZWFyIGF0IHRoZSBl
bmQgb2YgdGhlIG1hbmlmZXN0CiAgICAjIHNvIHRoYXQgd2hlbiB3ZSB0ZXN0IHRvIHNlZSBpZiB0
aGV5IHNob3VsZCBiZSBkZWxldGVkIGFueSBjb250ZW50cwogICAgIyBhZGRlZCBieSB0aGUgdGFz
ayB3aWxsIGhhdmUgYmVlbiByZW1vdmVkIGZpcnN0LgogICAgZGlycyA9IHNvcnRlZChzaGFyZWRk
aXJzLCBrZXk9bGVuKQogICAgIyBNdXN0IHJlbW92ZSBjaGlsZHJlbiBmaXJzdCwgd2hpY2ggd2ls
bCBoYXZlIGEgbG9uZ2VyIHBhdGggdGhhbiB0aGUgcGFyZW50CiAgICBmb3IgZGkgaW4gcmV2ZXJz
ZWQoZGlycyk6CiAgICAgICAgZi53cml0ZShkaSArICJcbiIpCiAgICBmLmNsb3NlKCkKCiAgICAj
IEFwcGVuZCB0byB0aGUgbGlzdCBvZiBtYW5pZmVzdHMgZm9yIHRoaXMgUEFDS0FHRV9BUkNICgog
ICAgaSA9IGQyLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9pbmRleC0ke1NTVEFURV9NQU5N
QUNIfSIpCiAgICBsID0gYmIudXRpbHMubG9ja2ZpbGUoaSArICIubG9jayIpCiAgICBmaWxlZGF0
YSA9IGQuZ2V0VmFyKCJTVEFNUCIsIFRydWUpICsgIiAiICsgZDIuZ2V0VmFyKCJTU1RBVEVfTUFO
RklMRVBSRUZJWCIsIFRydWUpICsgIiAiICsgZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKSArICJc
biIKICAgIG1hbmlmZXN0cyA9IFtdCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhpKToKICAgICAgICB3
aXRoIG9wZW4oaSwgInIiKSBhcyBmOgogICAgICAgICAgICBtYW5pZmVzdHMgPSBmLnJlYWRsaW5l
cygpCiAgICBpZiBmaWxlZGF0YSBub3QgaW4gbWFuaWZlc3RzOgogICAgICAgIHdpdGggb3Blbihp
LCAiYSsiKSBhcyBmOgogICAgICAgICAgICBmLndyaXRlKGZpbGVkYXRhKQogICAgYmIudXRpbHMu
dW5sb2NrZmlsZShsKQoKICAgICMgUnVuIHRoZSBhY3R1YWwgZmlsZSBpbnN0YWxsCiAgICBmb3Ig
c3RhdGUgaW4gc3NbJ2RpcnMnXToKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzdGF0ZVsxXSk6
CiAgICAgICAgICAgIG9lLnBhdGguY29weWhhcmRsaW5rdHJlZShzdGF0ZVsxXSwgc3RhdGVbMl0p
CgogICAgZm9yIHBvc3RpbnN0IGluIChkLmdldFZhcignU1NUQVRFUE9TVElOU1RGVU5DUycsIFRy
dWUpIG9yICcnKS5zcGxpdCgpOgogICAgICAgICMgQWxsIGhvb2tzIHNob3VsZCBydW4gaW4gdGhl
IFNTVEFURV9JTlNURElSCiAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKHBvc3RpbnN0LCBkLCAo
c3N0YXRlaW5zdCwpKQoKICAgIGZvciBsb2NrIGluIGxvY2tzOgogICAgICAgIGJiLnV0aWxzLnVu
bG9ja2ZpbGUobG9jaykKlGiFaj4BAABoh4wwJHtTREtQQVRIfS9zeXNyb290cy8ke1JFQUxfTVVM
VElNQUNIX1RBUkdFVF9TWVN9lGgqjB8ke1NTVEFURV9ESVJ9LyR7U1NUQVRFX1BLR05BTUV9lGiL
jBAke1NES19ESVJ9L2ltYWdllGiOjBogd3JpdGVfaG9zdF9zZGtfbWFuaWZlc3Q7IJRoLmo+AQAA
aJFqPgEAAGg2jEske0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIo
J0ZJTEUnLCBGYWxzZSksZClbMl0gb3IgJ3IwJ32Uai8BAACMGyAgICBwb3B1bGF0ZV9zZGtfY29t
bW9uKGQpCpRolFjIBAAAZGVmIGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCB2YXIsIHVuaXF1
ZSA9IFRydWUsIG5lZWRfc3BsaXQgPSBUcnVlLCBkZWxpbSA9ICcgJyk6CiAgICAiIiJSZXR1cm4g
YSBzdHJpbmcgb2YgYWxsICR7dmFyfSBpbiBhbGwgbXVsdGlsaWIgdHVuZSBjb25maWd1cmF0aW9u
IiIiCiAgICB2YWx1ZXMgPSBbXQogICAgdmFsdWUgPSBkLmdldFZhcih2YXIsIFRydWUpIG9yICIi
CiAgICBpZiB2YWx1ZSAhPSAiIjoKICAgICAgICBpZiBuZWVkX3NwbGl0OgogICAgICAgICAgICBm
b3IgaXRlbSBpbiB2YWx1ZS5zcGxpdChkZWxpbSk6CiAgICAgICAgICAgICAgICB2YWx1ZXMuYXBw
ZW5kKGl0ZW0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkK
ICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIK
ICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CiAgICAgICAgbG9jYWxkYXRhID0gYmIu
ZGF0YS5jcmVhdGVDb3B5KGQpCiAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcigi
T1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGl0ZW0KICAgICAg
ICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCiAgICAgICAgbG9jYWxk
YXRhLnNldFZhcigiTUxQUkVGSVgiLCBpdGVtICsgIi0iKQogICAgICAgIGJiLmRhdGEudXBkYXRl
X2RhdGEobG9jYWxkYXRhKQogICAgICAgIHZhbHVlID0gbG9jYWxkYXRhLmdldFZhcih2YXIsIFRy
dWUpIG9yICIiCiAgICAgICAgaWYgdmFsdWUgIT0gIiI6CiAgICAgICAgICAgIGlmIG5lZWRfc3Bs
aXQ6CiAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiB2YWx1ZS5zcGxpdChkZWxpbSk6CiAgICAg
ICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChpdGVtKQogICAgICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKICAgIGlmIHVuaXF1ZToKICAgICAgICAj
d2UgZG8gdGhpcyB0byBrZWVwIG9yZGVyIGFzIG11Y2ggYXMgcG9zc2libGUKICAgICAgICByZXQg
PSBbXQogICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXM6CiAgICAgICAgICAgIGlmIG5vdCB2YWx1
ZSBpbiByZXQ6CiAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHZhbHVlKQogICAgZWxzZToKICAg
ICAgICByZXQgPSB2YWx1ZXMKICAgIHJldHVybiAiICIuam9pbihyZXQplGgxWEsBAABkZWYgc3N0
YXRlX2FkZChzcywgc291cmNlLCBkZXN0LCBkKToKICAgIGlmIG5vdCBzb3VyY2UuZW5kc3dpdGgo
Ii8iKToKICAgICAgICAgc291cmNlID0gc291cmNlICsgIi8iCiAgICBpZiBub3QgZGVzdC5lbmRz
d2l0aCgiLyIpOgogICAgICAgICBkZXN0ID0gZGVzdCArICIvIgogICAgc291cmNlID0gb3MucGF0
aC5ub3JtcGF0aChzb3VyY2UpCiAgICBkZXN0ID0gb3MucGF0aC5ub3JtcGF0aChkZXN0KQogICAg
c3JjYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoc291cmNlKQogICAgc3NbJ2RpcnMnXS5hcHBlbmQo
W3NyY2Jhc2UsIHNvdXJjZSwgZGVzdF0pCiAgICByZXR1cm4gc3MKlGgTjARwb2t5lGiaaj4BAABo
nE5onk5ooIwLOmxpYmMtZ2xpYmOUaKKMBG5vbmWUaG5qPgEAAGilWB0CAABkZWYgcnVudGltZV9t
YXBwaW5nX3JlbmFtZSAodmFybmFtZSwgcGtnLCBkKToKICAgICNiYi5ub3RlKCIlcyBiZWZvcmU6
ICVzIiAlICh2YXJuYW1lLCBkLmdldFZhcih2YXJuYW1lLCBUcnVlKSkpCgogICAgaWYgYmIuZGF0
YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCk6CiAgICAgICAgcmV0dXJuCgogICAg
bmV3X2RlcGVuZHMgPSB7fQogICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25z
MihkLmdldFZhcih2YXJuYW1lLCBUcnVlKSBvciAiIikKICAgIGZvciBkZXBlbmQgaW4gZGVwczoK
ICAgICAgICBuZXdfZGVwZW5kID0gZ2V0X3BhY2thZ2VfbWFwcGluZyhkZXBlbmQsIHBrZywgZCkK
ICAgICAgICBuZXdfZGVwZW5kc1tuZXdfZGVwZW5kXSA9IGRlcHNbZGVwZW5kXQoKICAgIGQuc2V0
VmFyKHZhcm5hbWUsIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdfZGVwZW5kcywgY29tbWFzZXA9RmFs
c2UpKQoKICAgICNiYi5ub3RlKCIlcyBhZnRlcjogJXMiICUgKHZhcm5hbWUsIGQuZ2V0VmFyKHZh
cm5hbWUsIFRydWUpKSkKlGiojFoke0AnICcuam9pbihbeCArICc6ZG9fcG9wdWxhdGVfc3lzcm9v
dCcgZm9yIHggaW4gZC5nZXRWYXIoJ1NES19SREVQRU5EUycsIFRydWUpLnNwbGl0KCldKX2UaEiM
eGRlZiBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBoYXNoLCBkKToKICAgIGlmIG5vdCBoYXNoOgog
ICAgICAgIGhhc2ggPSAiSU5WQUxJRCIKICAgIHJldHVybiBoYXNoWzoyXSArICIvIiArIHNwZWMg
KyBoYXNoCpRoq4wILXBva3lzZGuUaK2MMCR7QGFsbF9tdWx0aWxpYl90dW5lX3ZhbHVlcyhkLCAn
UEFDS0FHRV9BUkNIUycpfZRoR2o+AQAAaLCMBng4Nl82NJRosmo+AQAAaEuMMiR7V09SS0RJUn0v
JHtTREtNQUNISU5FfS1kZXBsb3ktJHtQTn0tcG9wdWxhdGUtc2RrlGgIWB0HAABkZWYgc3N0YXRl
X2NsZWFuKHNzLCBkKToKICAgIGltcG9ydCBvZS5wYXRoCiAgICBpbXBvcnQgZ2xvYgoKICAgIGQy
ID0gZC5jcmVhdGVDb3B5KCkKICAgIHN0YW1wX2NsZWFuID0gZC5nZXRWYXIoIlNUQU1QQ0xFQU4i
LCBUcnVlKQogICAgZXh0cmFpbmYgPSBkLmdldFZhckZsYWcoImRvXyIgKyBzc1sndGFzayddLCAn
c3RhbXAtZXh0cmEtaW5mbycsIFRydWUpCiAgICBpZiBleHRyYWluZjoKICAgICAgICBkMi5zZXRW
YXIoIlNTVEFURV9NQU5NQUNIIiwgZXh0cmFpbmYpCiAgICAgICAgd2lsZGNhcmRfc3RmaWxlID0g
IiVzLmRvXyVzKi4lcyIgJSAoc3RhbXBfY2xlYW4sIHNzWyd0YXNrJ10sIGV4dHJhaW5mKQogICAg
ZWxzZToKICAgICAgICB3aWxkY2FyZF9zdGZpbGUgPSAiJXMuZG9fJXMqIiAlIChzdGFtcF9jbGVh
biwgc3NbJ3Rhc2snXSkKCiAgICBtYW5pZmVzdCA9IGQyLmV4cGFuZCgiJHtTU1RBVEVfTUFORklM
RVBSRUZJWH0uJXMiICUgc3NbJ3Rhc2snXSkKCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5pZmVz
dCk6CiAgICAgICAgbG9ja3MgPSBbXQogICAgICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMt
c2hhcmVkJ106CiAgICAgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2Nr
KSkKICAgICAgICBmb3IgbG9jayBpbiBzc1snbG9ja2ZpbGVzJ106CiAgICAgICAgICAgIGxvY2tz
LmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKCiAgICAgICAgc3N0YXRlX2NsZWFuX21h
bmlmZXN0KG1hbmlmZXN0LCBkKQoKICAgICAgICBmb3IgbG9jayBpbiBsb2NrczoKICAgICAgICAg
ICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQoKICAgICMgUmVtb3ZlIHRoZSBjdXJyZW50IGFu
ZCBwcmV2aW91cyBzdGFtcHMsIGJ1dCBrZWVwIHRoZSBzaWdkYXRhLgogICAgIwogICAgIyBUaGUg
Z2xvYigpIG1hdGNoZXMgZG9fdGFzayogd2hpY2ggbWF5IG1hdGNoIG11bHRpcGxlIHRhc2tzLCBm
b3IKICAgICMgZXhhbXBsZTogZG9fcGFja2FnZSBhbmQgZG9fcGFja2FnZV93cml0ZV9pcGssIHNv
IHdlIG5lZWQgdG8KICAgICMgZXhhY3RseSBtYXRjaCAqLmRvX3Rhc2suKiBhbmQgKi5kb190YXNr
X3NldHNjZW5lLioKICAgIHJtX3N0YW1wID0gJy5kb18lcy4nICUgc3NbJ3Rhc2snXQogICAgcm1f
c2V0c2NlbmUgPSAnLmRvXyVzX3NldHNjZW5lLicgJSBzc1sndGFzayddCiAgICAjIEZvciBCQl9T
SUdOQVRVUkVfSEFORExFUiA9ICJub29wIgogICAgcm1fbm9oYXNoID0gIi5kb18lcyIgJSBzc1sn
dGFzayddCiAgICBmb3Igc3RmaWxlIGluIGdsb2IuZ2xvYih3aWxkY2FyZF9zdGZpbGUpOgogICAg
ICAgICMgS2VlcCB0aGUgc2lnZGF0YQogICAgICAgIGlmICIuc2lnZGF0YS4iIGluIHN0ZmlsZToK
ICAgICAgICAgICAgY29udGludWUKICAgICAgICAjIFByZXNlcnZlIHRhaW50IGZpbGVzIGluIHRo
ZSBzdGFtcHMgZGlyZWN0b3J5CiAgICAgICAgaWYgc3RmaWxlLmVuZHN3aXRoKCcudGFpbnQnKToK
ICAgICAgICAgICAgY29udGludWUKICAgICAgICBpZiBybV9zdGFtcCBpbiBzdGZpbGUgb3Igcm1f
c2V0c2NlbmUgaW4gc3RmaWxlIG9yIFwKICAgICAgICAgICAgICAgIHN0ZmlsZS5lbmRzd2l0aChy
bV9ub2hhc2gpOgogICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShzdGZpbGUpCgogICAgIyBSZW1v
dmVzIHRoZSB1c2Vycy9ncm91cHMgY3JlYXRlZCBieSB0aGUgcGFja2FnZQogICAgZm9yIGNsZWFu
ZnVuYyBpbiAoZC5nZXRWYXIoJ1NTVEFURUNMRUFORlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQo
KToKICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoY2xlYW5mdW5jLCBkKQqUaHiMPyR7QCcke1NE
S19QQUNLQUdJTkdfRlVOQ307JyBpZiAnJHtTREtfUEFDS0FHSU5HX0ZVTkN9JyBlbHNlICcnfZRo
p1h5AQAAZGVmIGdldF9wYWNrYWdlX21hcHBpbmcgKHBrZywgYmFzZXBrZywgZCk6CiAgICBpbXBv
cnQgb2UucGFja2FnZWRhdGEKCiAgICBkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dk
YXRhKHBrZywgZCkKICAgIGtleSA9ICJQS0dfJXMiICUgcGtnCgogICAgaWYga2V5IGluIGRhdGE6
CiAgICAgICAgIyBIYXZlIHRvIGF2b2lkIHVuZG9pbmcgdGhlIHdyaXRlX2V4dHJhX3BrZ3MoZ2xv
YmFsX3ZhcmlhbnRzLi4uKQogICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFy
Y2gnLCBkKSBhbmQgZGF0YVtrZXldID09IGJhc2Vwa2c6CiAgICAgICAgICAgIHJldHVybiBwa2cK
ICAgICAgICByZXR1cm4gZGF0YVtrZXldCgogICAgcmV0dXJuIHBrZwqUaDeMAzEuMJRoKIwUc3N0
YXRlX2hhcmRjb2RlX3BhdGiUaLtOaL2MMyR7QGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUp
LnJlcGxhY2UoIl8iLCAiLSIpfZRoiYwEbm9uZZRowYwdIHdyaXRlX3RhcmdldF9zZGtfbWFuaWZl
c3QgOyCUaMNYFAQAAGRlZiBwb3B1bGF0ZV9zZGtfY29tbW9uKGQpOgogICAgZnJvbSBvZS5zZGsg
aW1wb3J0IHBvcHVsYXRlX3NkawogICAgZnJvbSBvZS5tYW5pZmVzdCBpbXBvcnQgY3JlYXRlX21h
bmlmZXN0LCBNYW5pZmVzdAoKICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKICAgIHJ1bnRp
bWVfbWFwcGluZ19yZW5hbWUoIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyIsIHBuLCBkKQogICAgcnVu
dGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIiwg
cG4sIGQpCgogICAgbGQgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKICAgIGxkLnNldFZhcigiUEtH
REFUQV9ESVIiLCAiJHtTVEFHSU5HX0RJUn0vJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9JHtT
REtfVkVORE9SfS0ke1NES19PU30vcGtnZGF0YSIpCiAgICBydW50aW1lX21hcHBpbmdfcmVuYW1l
KCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgcG4sIGxkKQogICAgcnVudGltZV9tYXBwaW5nX3JlbmFt
ZSgiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSIsIHBuLCBsZCkKICAgIGQuc2V0VmFy
KCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgbGQuZ2V0VmFyKCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwg
VHJ1ZSkpCiAgICBkLnNldFZhcigiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSIsIGxk
LmdldFZhcigiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSIsIFRydWUpKQoKICAgICMg
Y3JlYXRlIHRhcmdldC9ob3N0IFNESyBtYW5pZmVzdHMKICAgIGNyZWF0ZV9tYW5pZmVzdChkLCBt
YW5pZmVzdF9kaXI9ZC5nZXRWYXIoJ1NES19ESVInLCBUcnVlKSwKICAgICAgICAgICAgICAgICAg
ICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCiAgICBjcmVh
dGVfbWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyPWQuZ2V0VmFyKCdTREtfRElSJywgVHJ1ZSksCiAg
ICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfdHlwZT1NYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NE
S19UQVJHRVQpCgogICAgcG9wdWxhdGVfc2RrKGQpCpRoxowqYWxsIGFueSBub2FyY2ggJHtTREtf
QVJDSH0tJHtTREtQS0dTVUZGSVh9lGjIjAtwYWNrYWdlX3JwbZRol4yWJHtUQVJHRVRfT1N9OiR7
VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH06YnVpbGQtJHtCVUlMRF9PU306cG4tJHtQTn06JHtNQUNI
SU5FT1ZFUlJJREVTfToke0RJU1RST09WRVJSSURFU306JHtDTEFTU09WRVJSSURFfTpmb3JjZXZh
cmlhYmxlJHtMSUJDT1ZFUlJJREV9lHV1Lg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>3439</attachid>
            <date>2016-09-22 13:25:02 +0000</date>
            <delta_ts>2016-09-22 13:25:02 +0000</delta_ts>
            <desc>sigdata for qemumips64 uninative-tarball:do_populate_sdk</desc>
            <filename>1.0-r0.do_populate_sdk.sigdata.c00b68f90b4f6e7997ec6d11c62cd2bf</filename>
            <type>application/octet-stream</type>
            <size>26620</size>
            <attacher name="Joshua Lock">joshuagloe</attacher>
            
              <data encoding="base64">gASV8WcAAAAAAAB9lCiMCHRhc2toYXNolIwgYzAwYjY4ZjkwYjRmNmU3OTk3ZWM2ZDExYzYyY2Qy
YmaUjA10YXNrd2hpdGVsaXN0lE6MBHRhc2uUjA9kb19wb3B1bGF0ZV9zZGuUjAdnZW5kZXBzlH2U
KIwHU0RLUEFUSJSPlCiMC1NES19WRVJTSU9OlIwGRElTVFJPlJCMEVNES19QQUNLQUdFX0FSQ0hT
lI+UKIwIU0RLX0FSQ0iUkIwMU0RLX1JERVBFTkRTlI+UKIwTVE9PTENIQUlOX0hPU1RfVEFTS5SM
FVRPT0xDSEFJTl9UQVJHRVRfVEFTS5SQjApTREtNQUNISU5FlI+UjBFNVUxUSUxJQl9WQVJJQU5U
U5SPlIwVc3N0YXRlX2NsZWFuX21hbmlmZXN0lI+UjBZUUkFOU0xBVEVEX1RBUkdFVF9BUkNIlI+U
KIwLVEFSR0VUX0FSQ0iUkIwNUEFDS0FHRV9BUkNIU5SPlIweUE9QVUxBVEVfU0RLX1BPU1RfSE9T
VF9DT01NQU5ElI+UjAdTREtfRElSlI+UaA6PlIwRZ2VuZXJhdGVfc3N0YXRlZm6Uj5SMFXNzdGF0
ZV9zdGF0ZV9mcm9tdmFyc5SPlCiMCnNzdGF0ZV9hZGSUjA5CQl9DVVJSRU5UVEFTS5SMC3NzdGF0
ZV9pbml0lJCMDVNES1BBVEhOQVRJVkWUj5QojAdTREtfU1lTlGgIkIwKU0RLX1ZFTkRPUpSPlIwe
U0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZlI+UKIwTY29tcGxlbWVudGFyeV9nbG9ic5SQ
jBlkb19wb3B1bGF0ZV9zZGtbcmRlcGVuZHNdlI+UKGgPkGgKj5SMClNUQU1QU19ESVKUj5SMDFBB
Q0tBR0VfQVJDSJSPlCiMCFNES19BUkNIlJCMFHNzdGF0ZV90YXNrX3Bvc3RmdW5jlI+UKIwOc3N0
YXRlX3BhY2thZ2WUaCWMDnNzdGF0ZV9pbnN0YWxslJCMFFNTVEFURV9TS0lQX0NSRUFUSU9OlI+U
jAZTREtfT1OUj5QojAhCVUlMRF9PU5SQjAtUQVJHRVRfQVJDSJSPlGg8j5QojBVTU1RBVEVQT1NU
Q1JFQVRFRlVOQ1OUjBFTU1RBVEVDUkVBVEVGVU5DU5SMClNTVEFURV9QS0eUaD6QjCBQT1BVTEFU
RV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORJSPlIwQU1NUQVRFX0VYVFJBUEFUSJSPlIwYT1BLR19Q
UkVQUk9DRVNTX0NPTU1BTkRTlI+UaCmPlIwCUEWUj5SMF0ZFRURfREVQTE9ZRElSX0JBU0VfVVJJ
lI+UaDGPlIwMc3N0YXRlX2NsZWFulI+UKIwQU1NUQVRFQ0xFQU5GVU5DU5RoF5CMFnJ1bnRpbWVf
bWFwcGluZ19yZW5hbWWUj5QojBNnZXRfcGFja2FnZV9tYXBwaW5nlJCMDExJQkNPVkVSUklERZSP
lGgnj5SMDlNTVEFURV9QS0dOQU1FlI+UKGgjaEuMDlNTVEFURV9QS0dTUEVDlJCMGWRvX3BvcHVs
YXRlX3Nka1tmYWtlcm9vdF2Uj5SME1RPT0xDSEFJTl9IT1NUX1RBU0uUj5RoYI+UKIwCUFaUjA1U
QVJHRVRfVkVORE9SlGg3jAJQTpSMDlNTVEFURV9WRVJTSU9OlIwCUFKUjAlUQVJHRVRfT1OUkIwX
UlBNX1BSRVBST0NFU1NfQ09NTUFORFOUj5SMF1NES19QT1NUUFJPQ0VTU19DT01NQU5ElI+UKIwV
U0RLX1BBQ0tBR0lOR19DT01NQU5ElJCMCU9WRVJSSURFU5SPlCiMCEJVSUxEX09TlIwPRElTVFJP
T1ZFUlJJREVTlIwCUE6UaBmMCVRBUkdFVF9PU5SMDUNMQVNTT1ZFUlJJREWUaFuQjBNCQURfUkVD
T01NRU5EQVRJT05TlI+UjA1UQVJHRVRfVkVORE9SlI+UjAlUQVJHRVRfT1OUj5RoKI+UaHePlGhC
j5RoaY+UjBhSUE1fUE9TVFBST0NFU1NfQ09NTUFORFOUj5SMGVJFQUxfTVVMVElNQUNIX1RBUkdF
VF9TWVOUj5SMFE1VTFRJTUFDSF9UQVJHRVRfU1lTlI+UKIwKU0RLX1ZFTkRPUpSMCFNES19BUkNI
lIwGU0RLX09TlJCMCEVYVEVORFBFlI+UKGhQkIwYYWxsX211bHRpbGliX3R1bmVfdmFsdWVzlI+U
KGhxjBFNVUxUSUxJQl9WQVJJQU5UU5SQaHCPlCiMElNES19QQUNLQUdJTkdfRlVOQ5SQaEaPlGhH
j5RoPY+UKIwCUE6UjAVTVEFNUJSMDlNTVEFURV9NQU5NQUNIlIwQU1NUQVRFX01BTklGRVNUU5SM
E1NTVEFURVBPU1RJTlNURlVOQ1OUkIwTc3N0YXRlX3Rhc2tfcHJlZnVuY5SPlChoVWglkIwaQUxM
X01VTFRJTElCX1BBQ0tBR0VfQVJDSFOUj5QoaI2QjApTREtfT1VUUFVUlI+UKIwHU0RLX0RJUpSQ
jB9UT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZlI+UaHSPlCiMBkRJU1RST5SQjBhNVUxU
SUxJQl9HTE9CQUxfVkFSSUFOVFOUj5RolY+UaEiPlChoXpCMEFNES1RBUkdFVFNZU1JPT1SUj5Qo
aISMB1NES1BBVEiUkGiXj5SMD1BBQ0tBR0VfQ0xBU1NFU5SPlIwPQkJFWFRFTkRWQVJJQU5UlI+U
aAuPlGiZj5SME3BvcHVsYXRlX3Nka19jb21tb26Uj5QoaJWMB1NES19ESVKUaKFoY2hYkIwhZG9f
cG9wdWxhdGVfc2RrW3NzdGF0ZS1pbnB1dGRpcnNdlI+UKIwMU0RLREVQTE9ZRElSlJBouI+UKIwC
UE6UaBOQaJaPlCiMAlBWlIwCUFKUaDWMAlBOlGiGaIuQjAlNVUxUSUxJQlOUj5RoLI+UKIwKU0RL
X1ZFTkRPUpSMCFNES19BUkNIlIwGU0RLX09TlJBomI+UaJGPlIwZT1BLR19QT1NUUFJPQ0VTU19D
T01NQU5EU5SPlIwSTk9fUkVDT01NRU5EQVRJT05TlI+UaLyPlIwXQlVJTERfSU1BR0VTX0ZST01f
RkVFRFOUj5RoWo+UaBKPlGi9j5RoV4+UdYwIYmFzZWhhc2iUjCBjOGY0YTQ1YTY2MjNjYzBhN2Ez
M2Q1MGY1YzQ4YzhhY5SMB3ZhcnZhbHOUfZQoaAiMHS9vcHQvJHtESVNUUk99LyR7U0RLX1ZFUlNJ
T059lGgMjCphbGwgYW55IG5vYXJjaCAke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH2UaA+MLyR7
VE9PTENIQUlOX1RBUkdFVF9UQVNLfSAke1RPT0xDSEFJTl9IT1NUX1RBU0t9lGgTjAZ4ODZfNjSU
aBWMAJRoF1jKAwAAZGVmIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChtYW5pZmVzdCwgZCk6CiAgICBp
bXBvcnQgb2UucGF0aAoKICAgIG1maWxlID0gb3BlbihtYW5pZmVzdCkKICAgIGVudHJpZXMgPSBt
ZmlsZS5yZWFkbGluZXMoKQogICAgbWZpbGUuY2xvc2UoKQoKICAgIGZvciBlbnRyeSBpbiBlbnRy
aWVzOgogICAgICAgIGVudHJ5ID0gZW50cnkuc3RyaXAoKQogICAgICAgIGJiLmRlYnVnKDIsICJS
ZW1vdmluZyBtYW5pZmVzdDogJXMiICUgZW50cnkpCiAgICAgICAgIyBXZSBjYW4gcmFjZSBhZ2Fp
bnN0IGFub3RoZXIgcGFja2FnZSBwb3B1bGF0aW5nIGRpcmVjdG9yaWVzIGFzIHdlJ3JlIHJlbW92
aW5nIHRoZW0KICAgICAgICAjIHNvIHdlIGlnbm9yZSBlcnJvcnMgaGVyZS4KICAgICAgICB0cnk6
CiAgICAgICAgICAgIGlmIGVudHJ5LmVuZHN3aXRoKCIvIik6CiAgICAgICAgICAgICAgICBpZiBv
cy5wYXRoLmlzbGluayhlbnRyeVs6LTFdKToKICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUo
ZW50cnlbOi0xXSkKICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoZW50cnkpIGFu
ZCBsZW4ob3MubGlzdGRpcihlbnRyeSkpID09IDA6CiAgICAgICAgICAgICAgICAgICAgb3Mucm1k
aXIoZW50cnlbOi0xXSkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIG9lLnBhdGgu
cmVtb3ZlKGVudHJ5KQogICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICBwYXNzCgog
ICAgcG9zdHJtID0gbWFuaWZlc3QgKyAiLnBvc3RybSIKICAgIGlmIG9zLnBhdGguZXhpc3RzKG1h
bmlmZXN0ICsgIi5wb3N0cm0iKToKICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgIG9z
LmNobW9kKHBvc3RybSwgMG83NTUpCiAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHBvc3RybSwgc2hl
bGw9VHJ1ZSkKICAgICAgICBvZS5wYXRoLnJlbW92ZShwb3N0cm0pCgogICAgb2UucGF0aC5yZW1v
dmUobWFuaWZlc3QpCpRoGYwzJHtAZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkucmVwbGFj
ZSgiXyIsICItIil9lGgcaNpoHowaIHdyaXRlX2hvc3Rfc2RrX21hbmlmZXN0OyCUaCCMDiR7V09S
S0RJUn0vc2RrlGgOjAZ4ODZfNjSUaCOMeGRlZiBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBoYXNo
LCBkKToKICAgIGlmIG5vdCBoYXNoOgogICAgICAgIGhhc2ggPSAiSU5WQUxJRCIKICAgIHJldHVy
biBoYXNoWzoyXSArICIvIiArIHNwZWMgKyBoYXNoCpRoJVhuBQAAZGVmIHNzdGF0ZV9zdGF0ZV9m
cm9tdmFycyhkLCB0YXNrID0gTm9uZSk6CiAgICBpZiB0YXNrIGlzIE5vbmU6CiAgICAgICAgdGFz
ayA9IGQuZ2V0VmFyKCdCQl9DVVJSRU5UVEFTSycsIFRydWUpCiAgICAgICAgaWYgbm90IHRhc2s6
CiAgICAgICAgICAgIGJiLmZhdGFsKCJzc3RhdGUgY29kZSBydW5uaW5nIHdpdGhvdXQgdGFzayBj
b250ZXh0PyEiKQogICAgICAgIHRhc2sgPSB0YXNrLnJlcGxhY2UoIl9zZXRzY2VuZSIsICIiKQoK
ICAgIGlmIHRhc2suc3RhcnRzd2l0aCgiZG9fIik6CiAgICAgICAgdGFzayA9IHRhc2tbMzpdCiAg
ICBpbnB1dHMgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1pbnB1dGRpcnMn
LCBUcnVlKSBvciAiIikuc3BsaXQoKQogICAgb3V0cHV0cyA9IChkLmdldFZhckZsYWcoImRvXyIg
KyB0YXNrLCAnc3N0YXRlLW91dHB1dGRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQogICAgcGxh
aW5kaXJzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtcGxhaW5kaXJzJywg
VHJ1ZSkgb3IgIiIpLnNwbGl0KCkKICAgIGxvY2tmaWxlcyA9IChkLmdldFZhckZsYWcoImRvXyIg
KyB0YXNrLCAnc3N0YXRlLWxvY2tmaWxlJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKICAgIGxvY2tm
aWxlc3NoYXJlZCA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWxvY2tmaWxl
LXNoYXJlZCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCiAgICBpbnRlcmNlcHRmdW5jcyA9IChkLmdl
dFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWludGVyY2VwdGZ1bmNzJywgVHJ1ZSkgb3Ig
IiIpLnNwbGl0KCkKICAgIGlmIG5vdCB0YXNrIG9yIGxlbihpbnB1dHMpICE9IGxlbihvdXRwdXRz
KToKICAgICAgICBiYi5mYXRhbCgic3N0YXRlIHZhcmlhYmxlcyBub3Qgc2V0dXAgY29ycmVjdGx5
PyEiKQoKICAgIGlmIHRhc2sgPT0gInBvcHVsYXRlX2xpYyI6CiAgICAgICAgZC5zZXRWYXIoIlNT
VEFURV9QS0dTUEVDIiwgIiR7U1NUQVRFX1NXU1BFQ30iKQogICAgICAgIGQuc2V0VmFyKCJTU1RB
VEVfRVhUUkFQQVRIIiwgIiIpCiAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9FWFRSQVBBVEhXSUxE
Q0FSRCcsICIiKQoKICAgIHNzID0gc3N0YXRlX2luaXQodGFzaywgZCkKICAgIGZvciBpIGluIHJh
bmdlKGxlbihpbnB1dHMpKToKICAgICAgICBzc3RhdGVfYWRkKHNzLCBpbnB1dHNbaV0sIG91dHB1
dHNbaV0sIGQpCiAgICBzc1snbG9ja2ZpbGVzJ10gPSBsb2NrZmlsZXMKICAgIHNzWydsb2NrZmls
ZXMtc2hhcmVkJ10gPSBsb2NrZmlsZXNzaGFyZWQKICAgIHNzWydwbGFpbmRpcnMnXSA9IHBsYWlu
ZGlycwogICAgc3NbJ2ludGVyY2VwdGZ1bmNzJ10gPSBpbnRlcmNlcHRmdW5jcwogICAgcmV0dXJu
IHNzCpRoKoweJHtTREtQQVRIfS9zeXNyb290cy8ke1NES19TWVN9lGgtjAgtcG9reXNka5RoL4wv
JHtAY29tcGxlbWVudGFyeV9nbG9icygiU0RLSU1BR0VfRkVBVFVSRVMiLCBkKX2UaDKMWiR7QCcg
Jy5qb2luKFt4ICsgJzpkb19wb3B1bGF0ZV9zeXNyb290JyBmb3IgeCBpbiBkLmdldFZhcignU0RL
X1JERVBFTkRTJywgVHJ1ZSkuc3BsaXQoKV0pfZRoCowMMi4xK3NuYXBzaG90lGg1jBAke1RNUERJ
Un0vc3RhbXBzlGg3jAske1NES19BUkNIfZRoOliDAQAAICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0
ZV9zdGF0ZV9mcm9tdmFycyhkKQoKICAgIHNzdGF0ZV9pbnN0YWxsKHNoYXJlZF9zdGF0ZSwgZCkK
ICAgIGZvciBpbnRlcmNlcHQgaW4gc2hhcmVkX3N0YXRlWydpbnRlcmNlcHRmdW5jcyddOgogICAg
ICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhpbnRlcmNlcHQsIGQsIChkLmdldFZhcigiV09SS0RJUiIs
IFRydWUpLCkpCiAgICBvbWFzayA9IG9zLnVtYXNrKDBvMDAyKQogICAgaWYgb21hc2sgIT0gMG8w
MDI6CiAgICAgICBiYi5ub3RlKCJVc2luZyB1bWFzayAwbzAwMiAobm90ICUwbykgZm9yIHNzdGF0
ZSBwYWNrYWdpbmciICUgb21hc2spCiAgICBzc3RhdGVfcGFja2FnZShzaGFyZWRfc3RhdGUsIGQp
CiAgICBvcy51bWFzayhvbWFzaykKlGg+TmhAjAske0JVSUxEX09TfZRoQ4wEbm9uZZRoPFhFCgAA
ZGVmIHNzdGF0ZV9wYWNrYWdlKHNzLCBkKToKICAgIGltcG9ydCBvZS5wYXRoCgogICAgZGVmIG1h
a2VfcmVsYXRpdmVfc3ltbGluayhwYXRoLCBvdXRwdXRwYXRoLCBkKToKICAgICAgICAjIFJlcGxh
Y2Ugb3V0IGFic29sdXRlIFRNUERJUiBwYXRocyBpbiBzeW1saW5rcyB3aXRoIHJlbGF0aXZlIG9u
ZXMKICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CiAgICAgICAgICAgIHJldHVy
bgogICAgICAgIGxpbmsgPSBvcy5yZWFkbGluayhwYXRoKQogICAgICAgIGlmIG5vdCBvcy5wYXRo
LmlzYWJzKGxpbmspOgogICAgICAgICAgICByZXR1cm4KICAgICAgICBpZiBub3QgbGluay5zdGFy
dHN3aXRoKHRtcGRpcik6CiAgICAgICAgICAgIHJldHVybgoKICAgICAgICBkZXB0aCA9IG91dHB1
dHBhdGgucnBhcnRpdGlvbih0bXBkaXIpWzJdLmNvdW50KCcvJykKICAgICAgICBiYXNlID0gbGlu
ay5wYXJ0aXRpb24odG1wZGlyKVsyXS5zdHJpcCgpCiAgICAgICAgd2hpbGUgZGVwdGggPiAxOgog
ICAgICAgICAgICBiYXNlID0gIi8uLiIgKyBiYXNlCiAgICAgICAgICAgIGRlcHRoIC09IDEKICAg
ICAgICBiYXNlID0gIi4iICsgYmFzZQoKICAgICAgICBiYi5kZWJ1ZygyLCAiUmVwbGFjaW5nIGFi
c29sdXRlIHBhdGggJXMgd2l0aCByZWxhdGl2ZSBwYXRoICVzIGZvciAlcyIgJSAobGluaywgYmFz
ZSwgb3V0cHV0cGF0aCkpCiAgICAgICAgb3MucmVtb3ZlKHBhdGgpCiAgICAgICAgb3Muc3ltbGlu
ayhiYXNlLCBwYXRoKQoKICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQoKICAg
IHNzdGF0ZWJ1aWxkID0gZC5leHBhbmQoIiR7V09SS0RJUn0vc3N0YXRlLWJ1aWxkLSVzLyIgJSBz
c1sndGFzayddKQogICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKSAr
ICdfJysgc3NbJ3Rhc2snXSArICIudGd6IgogICAgYmIudXRpbHMucmVtb3ZlKHNzdGF0ZWJ1aWxk
LCByZWN1cnNlPVRydWUpCiAgICBiYi51dGlscy5ta2RpcmhpZXIoc3N0YXRlYnVpbGQpCiAgICBi
Yi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHNzdGF0ZXBrZykpCiAgICBmb3Igc3Rh
dGUgaW4gc3NbJ2RpcnMnXToKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3RhdGVbMV0p
OgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIGQuZ2V0VmFyKCdTU1RBVEVfU0tJUF9D
UkVBVElPTicsIFRydWUpID09ICcxJzoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBzcmNi
YXNlID0gc3RhdGVbMF0ucnN0cmlwKCIvIikucnNwbGl0KCcvJywgMSlbMF0KICAgICAgICBmb3Ig
d2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3RhdGVbMV0pOgogICAgICAgICAgICBm
b3IgZmlsZSBpbiBmaWxlczoKICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4o
d2Fsa3Jvb3QsIGZpbGUpCiAgICAgICAgICAgICAgICBkc3RwYXRoID0gc3JjcGF0aC5yZXBsYWNl
KHN0YXRlWzFdLCBzdGF0ZVsyXSkKICAgICAgICAgICAgICAgIG1ha2VfcmVsYXRpdmVfc3ltbGlu
ayhzcmNwYXRoLCBkc3RwYXRoLCBkKQogICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAg
ICAgICAgICAgICBzcmNwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBkaXIpCiAgICAgICAg
ICAgICAgICBkc3RwYXRoID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKICAg
ICAgICAgICAgICAgIG1ha2VfcmVsYXRpdmVfc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCBkKQog
ICAgICAgIGJiLmRlYnVnKDIsICJQcmVwYXJpbmcgdHJlZSAlcyBmb3IgcGFja2FnaW5nIGF0ICVz
IiAlIChzdGF0ZVsxXSwgc3N0YXRlYnVpbGQgKyBzdGF0ZVswXSkpCiAgICAgICAgb2UucGF0aC5j
b3B5aGFyZGxpbmt0cmVlKHN0YXRlWzFdLCBzc3RhdGVidWlsZCArIHN0YXRlWzBdKQoKICAgIHdv
cmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCiAgICBmb3IgcGxhaW4gaW4gc3NbJ3Bs
YWluZGlycyddOgogICAgICAgIHBkaXIgPSBwbGFpbi5yZXBsYWNlKHdvcmtkaXIsIHNzdGF0ZWJ1
aWxkKQogICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwbGFpbikKICAgICAgICBiYi51dGlscy5t
a2RpcmhpZXIocGRpcikKICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUocGxhaW4sIHBk
aXIpCgogICAgZC5zZXRWYXIoJ1NTVEFURV9CVUlMRERJUicsIHNzdGF0ZWJ1aWxkKQogICAgZC5z
ZXRWYXIoJ1NTVEFURV9QS0cnLCBzc3RhdGVwa2cpCgogICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdT
U1RBVEVDUkVBVEVGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpICsgXAogICAgICAgICAgICAg
Wydzc3RhdGVfY3JlYXRlX3BhY2thZ2UnLCAnc3N0YXRlX3NpZ25fcGFja2FnZSddICsgXAogICAg
ICAgICAgICAgKGQuZ2V0VmFyKCdTU1RBVEVQT1NUQ1JFQVRFRlVOQ1MnLCBUcnVlKSBvciAnJyku
c3BsaXQoKToKICAgICAgICAjIEFsbCBob29rcyBzaG91bGQgcnVuIGluIFNTVEFURV9CVUlMRERJ
Ui4KICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCwgKHNzdGF0ZWJ1aWxkLCkpCgogICAg
YmIuc2lnZ2VuLmR1bXBfdGhpc190YXNrKHNzdGF0ZXBrZyArICIuc2lnaW5mbyIsIGQpCgogICAg
cmV0dXJuCpRoSYwdIHdyaXRlX3RhcmdldF9zZGtfbWFuaWZlc3QgOyCUaEto2mhNTmgpjLBkZWYg
c3N0YXRlX2luaXQodGFzaywgZCk6CiAgICBzcyA9IHt9CiAgICBzc1sndGFzayddID0gdGFzawog
ICAgc3NbJ2RpcnMnXSA9IFtdCiAgICBzc1sncGxhaW5kaXJzJ10gPSBbXQogICAgc3NbJ2xvY2tm
aWxlcyddID0gW10KICAgIHNzWydsb2NrZmlsZXMtc2hhcmVkJ10gPSBbXQogICAgcmV0dXJuIHNz
CpRoUGjaaFJOaDFYKgEAAGRlZiBjb21wbGVtZW50YXJ5X2dsb2JzKGZlYXR1cmV2YXIsIGQpOgog
ICAgYWxsX2dsb2JzID0gZC5nZXRWYXJGbGFncygnQ09NUExFTUVOVEFSWV9HTE9CJykKICAgIGds
b2JzID0gW10KICAgIGZlYXR1cmVzID0gc2V0KChkLmdldFZhcihmZWF0dXJldmFyLCBUcnVlKSBv
ciAnJykuc3BsaXQoKSkKICAgIGZvciBuYW1lLCBnbG9iIGluIGFsbF9nbG9icy5pdGVtcygpOgog
ICAgICAgIGlmIG5hbWUgaW4gZmVhdHVyZXM6CiAgICAgICAgICAgIGdsb2JzLmFwcGVuZChnbG9i
KQogICAgcmV0dXJuICcgJy5qb2luKGdsb2JzKQqUaFVYHQcAAGRlZiBzc3RhdGVfY2xlYW4oc3Ms
IGQpOgogICAgaW1wb3J0IG9lLnBhdGgKICAgIGltcG9ydCBnbG9iCgogICAgZDIgPSBkLmNyZWF0
ZUNvcHkoKQogICAgc3RhbXBfY2xlYW4gPSBkLmdldFZhcigiU1RBTVBDTEVBTiIsIFRydWUpCiAg
ICBleHRyYWluZiA9IGQuZ2V0VmFyRmxhZygiZG9fIiArIHNzWyd0YXNrJ10sICdzdGFtcC1leHRy
YS1pbmZvJywgVHJ1ZSkKICAgIGlmIGV4dHJhaW5mOgogICAgICAgIGQyLnNldFZhcigiU1NUQVRF
X01BTk1BQ0giLCBleHRyYWluZikKICAgICAgICB3aWxkY2FyZF9zdGZpbGUgPSAiJXMuZG9fJXMq
LiVzIiAlIChzdGFtcF9jbGVhbiwgc3NbJ3Rhc2snXSwgZXh0cmFpbmYpCiAgICBlbHNlOgogICAg
ICAgIHdpbGRjYXJkX3N0ZmlsZSA9ICIlcy5kb18lcyoiICUgKHN0YW1wX2NsZWFuLCBzc1sndGFz
ayddKQoKICAgIG1hbmlmZXN0ID0gZDIuZXhwYW5kKCIke1NTVEFURV9NQU5GSUxFUFJFRklYfS4l
cyIgJSBzc1sndGFzayddKQoKICAgIGlmIG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0KToKICAgICAg
ICBsb2NrcyA9IFtdCiAgICAgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcy1zaGFyZWQnXToK
ICAgICAgICAgICAgbG9ja3MuYXBwZW5kKGJiLnV0aWxzLmxvY2tmaWxlKGxvY2spKQogICAgICAg
IGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMnXToKICAgICAgICAgICAgbG9ja3MuYXBwZW5kKGJi
LnV0aWxzLmxvY2tmaWxlKGxvY2spKQoKICAgICAgICBzc3RhdGVfY2xlYW5fbWFuaWZlc3QobWFu
aWZlc3QsIGQpCgogICAgICAgIGZvciBsb2NrIGluIGxvY2tzOgogICAgICAgICAgICBiYi51dGls
cy51bmxvY2tmaWxlKGxvY2spCgogICAgIyBSZW1vdmUgdGhlIGN1cnJlbnQgYW5kIHByZXZpb3Vz
IHN0YW1wcywgYnV0IGtlZXAgdGhlIHNpZ2RhdGEuCiAgICAjCiAgICAjIFRoZSBnbG9iKCkgbWF0
Y2hlcyBkb190YXNrKiB3aGljaCBtYXkgbWF0Y2ggbXVsdGlwbGUgdGFza3MsIGZvcgogICAgIyBl
eGFtcGxlOiBkb19wYWNrYWdlIGFuZCBkb19wYWNrYWdlX3dyaXRlX2lwaywgc28gd2UgbmVlZCB0
bwogICAgIyBleGFjdGx5IG1hdGNoICouZG9fdGFzay4qIGFuZCAqLmRvX3Rhc2tfc2V0c2NlbmUu
KgogICAgcm1fc3RhbXAgPSAnLmRvXyVzLicgJSBzc1sndGFzayddCiAgICBybV9zZXRzY2VuZSA9
ICcuZG9fJXNfc2V0c2NlbmUuJyAlIHNzWyd0YXNrJ10KICAgICMgRm9yIEJCX1NJR05BVFVSRV9I
QU5ETEVSID0gIm5vb3AiCiAgICBybV9ub2hhc2ggPSAiLmRvXyVzIiAlIHNzWyd0YXNrJ10KICAg
IGZvciBzdGZpbGUgaW4gZ2xvYi5nbG9iKHdpbGRjYXJkX3N0ZmlsZSk6CiAgICAgICAgIyBLZWVw
IHRoZSBzaWdkYXRhCiAgICAgICAgaWYgIi5zaWdkYXRhLiIgaW4gc3RmaWxlOgogICAgICAgICAg
ICBjb250aW51ZQogICAgICAgICMgUHJlc2VydmUgdGFpbnQgZmlsZXMgaW4gdGhlIHN0YW1wcyBk
aXJlY3RvcnkKICAgICAgICBpZiBzdGZpbGUuZW5kc3dpdGgoJy50YWludCcpOgogICAgICAgICAg
ICBjb250aW51ZQogICAgICAgIGlmIHJtX3N0YW1wIGluIHN0ZmlsZSBvciBybV9zZXRzY2VuZSBp
biBzdGZpbGUgb3IgXAogICAgICAgICAgICAgICAgc3RmaWxlLmVuZHN3aXRoKHJtX25vaGFzaCk6
CiAgICAgICAgICAgIG9lLnBhdGgucmVtb3ZlKHN0ZmlsZSkKCiAgICAjIFJlbW92ZXMgdGhlIHVz
ZXJzL2dyb3VwcyBjcmVhdGVkIGJ5IHRoZSBwYWNrYWdlCiAgICBmb3IgY2xlYW5mdW5jIGluIChk
LmdldFZhcignU1NUQVRFQ0xFQU5GVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgogICAgICAg
IGJiLmJ1aWxkLmV4ZWNfZnVuYyhjbGVhbmZ1bmMsIGQpCpRoWFgdAgAAZGVmIHJ1bnRpbWVfbWFw
cGluZ19yZW5hbWUgKHZhcm5hbWUsIHBrZywgZCk6CiAgICAjYmIubm90ZSgiJXMgYmVmb3JlOiAl
cyIgJSAodmFybmFtZSwgZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkpKQoKICAgIGlmIGJiLmRhdGEu
aW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGQpOgogICAgICAgIHJldHVybgoKICAgIG5l
d19kZXBlbmRzID0ge30KICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIo
ZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkgb3IgIiIpCiAgICBmb3IgZGVwZW5kIGluIGRlcHM6CiAg
ICAgICAgbmV3X2RlcGVuZCA9IGdldF9wYWNrYWdlX21hcHBpbmcoZGVwZW5kLCBwa2csIGQpCiAg
ICAgICAgbmV3X2RlcGVuZHNbbmV3X2RlcGVuZF0gPSBkZXBzW2RlcGVuZF0KCiAgICBkLnNldFZh
cih2YXJuYW1lLCBiYi51dGlscy5qb2luX2RlcHMobmV3X2RlcGVuZHMsIGNvbW1hc2VwPUZhbHNl
KSkKCiAgICAjYmIubm90ZSgiJXMgYWZ0ZXI6ICVzIiAlICh2YXJuYW1lLCBkLmdldFZhcih2YXJu
YW1lLCBUcnVlKSkpCpRoW4wLOmxpYmMtZ2xpYmOUaCdYSwEAAGRlZiBzc3RhdGVfYWRkKHNzLCBz
b3VyY2UsIGRlc3QsIGQpOgogICAgaWYgbm90IHNvdXJjZS5lbmRzd2l0aCgiLyIpOgogICAgICAg
ICBzb3VyY2UgPSBzb3VyY2UgKyAiLyIKICAgIGlmIG5vdCBkZXN0LmVuZHN3aXRoKCIvIik6CiAg
ICAgICAgIGRlc3QgPSBkZXN0ICsgIi8iCiAgICBzb3VyY2UgPSBvcy5wYXRoLm5vcm1wYXRoKHNv
dXJjZSkKICAgIGRlc3QgPSBvcy5wYXRoLm5vcm1wYXRoKGRlc3QpCiAgICBzcmNiYXNlID0gb3Mu
cGF0aC5iYXNlbmFtZShzb3VyY2UpCiAgICBzc1snZGlycyddLmFwcGVuZChbc3JjYmFzZSwgc291
cmNlLCBkZXN0XSkKICAgIHJldHVybiBzcwqUaF6MbCR7U1NUQVRFX0VYVFJBUEFUSH0ke0BnZW5l
cmF0ZV9zc3RhdGVmbihkLmdldFZhcignU1NUQVRFX1BLR1NQRUMnLCBUcnVlKSwgZC5nZXRWYXIo
J0JCX1RBU0tIQVNIJywgVHJ1ZSksIGQpfZRoYYwBMZRoY4x0ICAgIG5hdGl2ZXNkay1nbGliYyAg
ICAgbmF0aXZlc2RrLWdsaWJjLWdjb252LWlibTg1MCAgICAgbmF0aXZlc2RrLWdsaWJjLWdjb252
LWlzbzg4NTktMSAgICAgbmF0aXZlc2RrLXBhdGNoZWxmICAgICCUaGCManNzdGF0ZToke1BOfTok
e1BBQ0tBR0VfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfToke1BWfToke1BSfTok
e1NTVEFURV9QS0dBUkNIfToke1NTVEFURV9WRVJTSU9OfTqUaGxOaG6MSSBjcmVhdGVfc2RrX2Zp
bGVzOyBjaGVja19zZGtfc3lzcm9vdHM7IHRhcl9zZGs7ICR7U0RLX1BBQ0tBR0lOR19DT01NQU5E
fSCUaHGMliR7VEFSR0VUX09TfToke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9OmJ1aWxkLSR7QlVJ
TERfT1N9OnBuLSR7UE59OiR7TUFDSElORU9WRVJSSURFU306JHtESVNUUk9PVkVSUklERVN9OiR7
Q0xBU1NPVkVSUklERX06Zm9yY2V2YXJpYWJsZSR7TElCQ09WRVJSSURFfZRoeGjaaHqMBS1wb2t5
lGh8jARub25llGgoTmh3jAxjbGFzcy10YXJnZXSUaEKMBWxpbnV4lGhpjAEzlGiCTmiEjARub25l
lGiGjCwke1NES19BUkNIfS1uYXRpdmVzZGske1NES19WRU5ET1J9LSR7U0RLX09TfZRoBYwbICAg
IHBvcHVsYXRlX3Nka19jb21tb24oZCkKlGiLjDUke0BbJycsJyR7UEV9XyddW2ludChkLmdldFZh
cignUEUnLCBUcnVlKSBvciAwKSA+IDBdfZRojVjIBAAAZGVmIGFsbF9tdWx0aWxpYl90dW5lX3Zh
bHVlcyhkLCB2YXIsIHVuaXF1ZSA9IFRydWUsIG5lZWRfc3BsaXQgPSBUcnVlLCBkZWxpbSA9ICcg
Jyk6CiAgICAiIiJSZXR1cm4gYSBzdHJpbmcgb2YgYWxsICR7dmFyfSBpbiBhbGwgbXVsdGlsaWIg
dHVuZSBjb25maWd1cmF0aW9uIiIiCiAgICB2YWx1ZXMgPSBbXQogICAgdmFsdWUgPSBkLmdldFZh
cih2YXIsIFRydWUpIG9yICIiCiAgICBpZiB2YWx1ZSAhPSAiIjoKICAgICAgICBpZiBuZWVkX3Nw
bGl0OgogICAgICAgICAgICBmb3IgaXRlbSBpbiB2YWx1ZS5zcGxpdChkZWxpbSk6CiAgICAgICAg
ICAgICAgICB2YWx1ZXMuYXBwZW5kKGl0ZW0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgdmFs
dWVzLmFwcGVuZCh2YWx1ZSkKICAgIHZhcmlhbnRzID0gZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklB
TlRTIiwgVHJ1ZSkgb3IgIiIKICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CiAgICAg
ICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCiAgICAgICAgb3ZlcnJpZGVzID0g
bG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGls
aWItIiArIGl0ZW0KICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlk
ZXMpCiAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiTUxQUkVGSVgiLCBpdGVtICsgIi0iKQogICAg
ICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQogICAgICAgIHZhbHVlID0gbG9jYWxk
YXRhLmdldFZhcih2YXIsIFRydWUpIG9yICIiCiAgICAgICAgaWYgdmFsdWUgIT0gIiI6CiAgICAg
ICAgICAgIGlmIG5lZWRfc3BsaXQ6CiAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiB2YWx1ZS5z
cGxpdChkZWxpbSk6CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChpdGVtKQogICAg
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKICAgIGlm
IHVuaXF1ZToKICAgICAgICAjd2UgZG8gdGhpcyB0byBrZWVwIG9yZGVyIGFzIG11Y2ggYXMgcG9z
c2libGUKICAgICAgICByZXQgPSBbXQogICAgICAgIGZvciB2YWx1ZSBpbiB2YWx1ZXM6CiAgICAg
ICAgICAgIGlmIG5vdCB2YWx1ZSBpbiByZXQ6CiAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHZh
bHVlKQogICAgZWxzZToKICAgICAgICByZXQgPSB2YWx1ZXMKICAgIHJldHVybiAiICIuam9pbihy
ZXQplGhwjD8ke0AnJHtTREtfUEFDS0FHSU5HX0ZVTkN9OycgaWYgJyR7U0RLX1BBQ0tBR0lOR19G
VU5DfScgZWxzZSAnJ32UaEZo2mhHjBRzc3RhdGVfaGFyZGNvZGVfcGF0aJRoPVi/FgAAZGVmIHNz
dGF0ZV9pbnN0YWxsKHNzLCBkKToKICAgIGltcG9ydCBvZS5wYXRoCiAgICBpbXBvcnQgb2Uuc3N0
YXRlc2lnCiAgICBpbXBvcnQgc3VicHJvY2VzcwoKICAgIHNoYXJlZGZpbGVzID0gW10KICAgIHNo
YXJlZGRpcnMgPSBbXQogICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZXhwYW5kKCIke1NTVEFURV9N
QU5JRkVTVFN9IikpCgogICAgc3N0YXRlaW5zdCA9IGQuZXhwYW5kKCIke1dPUktESVJ9L3NzdGF0
ZS1pbnN0YWxsLSVzLyIgJSBzc1sndGFzayddKQoKICAgIG1hbmlmZXN0LCBkMiA9IG9lLnNzdGF0
ZXNpZy5zc3RhdGVfZ2V0X21hbmlmZXN0X2ZpbGVuYW1lKHNzWyd0YXNrJ10sIGQpCgogICAgaWYg
b3MuYWNjZXNzKG1hbmlmZXN0LCBvcy5SX09LKToKICAgICAgICBiYi5mYXRhbCgiUGFja2FnZSBh
bHJlYWR5IHN0YWdlZCAoJXMpPyEiICUgbWFuaWZlc3QpCgogICAgZC5zZXRWYXIoIlNTVEFURV9J
TlNUX1BPU1RSTSIsIG1hbmlmZXN0ICsgIi5wb3N0cm0iKQoKICAgIGxvY2tzID0gW10KICAgIGZv
ciBsb2NrIGluIHNzWydsb2NrZmlsZXMtc2hhcmVkJ106CiAgICAgICAgbG9ja3MuYXBwZW5kKGJi
LnV0aWxzLmxvY2tmaWxlKGxvY2ssIFRydWUpKQogICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxl
cyddOgogICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKCiAgICBm
b3Igc3RhdGUgaW4gc3NbJ2RpcnMnXToKICAgICAgICBiYi5kZWJ1ZygyLCAiU3RhZ2luZyBmaWxl
cyBmcm9tICVzIHRvICVzIiAlIChzdGF0ZVsxXSwgc3RhdGVbMl0pKQogICAgICAgIGZvciB3YWxr
cm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzdGF0ZVsxXSk6CiAgICAgICAgICAgIGZvciBm
aWxlIGluIGZpbGVzOgogICAgICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBhdGguam9pbih3YWxr
cm9vdCwgZmlsZSkKICAgICAgICAgICAgICAgIGRzdHBhdGggPSBzcmNwYXRoLnJlcGxhY2Uoc3Rh
dGVbMV0sIHN0YXRlWzJdKQogICAgICAgICAgICAgICAgI2JiLmRlYnVnKDIsICJTdGFnaW5nICVz
IHRvICVzIiAlIChzcmNwYXRoLCBkc3RwYXRoKSkKICAgICAgICAgICAgICAgIHNoYXJlZGZpbGVz
LmFwcGVuZChkc3RwYXRoKQogICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAgICAgICAg
ICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGRpcikKICAgICAgICAgICAgICAg
IGRzdGRpciA9IHNyY2Rpci5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKICAgICAgICAgICAg
ICAgICNiYi5kZWJ1ZygyLCAiU3RhZ2luZyAlcyB0byAlcyIgJSAoc3JjZGlyLCBkc3RkaXIpKQog
ICAgICAgICAgICAgICAgaWYgbm90IGRzdGRpci5lbmRzd2l0aCgiLyIpOgogICAgICAgICAgICAg
ICAgICAgIGRzdGRpciA9IGRzdGRpciArICIvIgogICAgICAgICAgICAgICAgc2hhcmVkZGlycy5h
cHBlbmQoZHN0ZGlyKQoKICAgICMgQ2hlY2sgdGhlIGZpbGUgbGlzdCBmb3IgY29uZmxpY3RzIGFn
YWluc3QgZmlsZXMgd2hpY2ggYWxyZWFkeSBleGlzdAogICAgd2hpdGVsaXN0ID0gKGQuZ2V0VmFy
KCJTU1RBVEVfRFVQV0hJVEVMSVNUIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKICAgIG1hdGNoID0g
W10KICAgIGZvciBmIGluIHNoYXJlZGZpbGVzOgogICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGYp
OgogICAgICAgICAgICBmID0gb3MucGF0aC5ub3JtcGF0aChmKQogICAgICAgICAgICByZWFsbWF0
Y2ggPSBUcnVlCiAgICAgICAgICAgIGZvciB3IGluIHdoaXRlbGlzdDoKICAgICAgICAgICAgICAg
IHcgPSBvcy5wYXRoLm5vcm1wYXRoKHcpCiAgICAgICAgICAgICAgICBpZiBmLnN0YXJ0c3dpdGgo
dyk6CiAgICAgICAgICAgICAgICAgICAgcmVhbG1hdGNoID0gRmFsc2UKICAgICAgICAgICAgICAg
ICAgICBicmVhawogICAgICAgICAgICBpZiByZWFsbWF0Y2g6CiAgICAgICAgICAgICAgICBtYXRj
aC5hcHBlbmQoZikKICAgICAgICAgICAgICAgIHNzdGF0ZV9zZWFyY2hfY21kID0gImdyZXAgLXJs
ICclcycgJXMgLS1leGNsdWRlPW1hc3Rlci5saXN0IHwgc2VkIC1lICdzOl4uKi86OicgLWUgJ3M6
XC5wb3B1bGF0ZS1zeXNyb290OjonIiAlIChmLCBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RT
fSIpKQogICAgICAgICAgICAgICAgc2VhcmNoX291dHB1dCA9IHN1YnByb2Nlc3MuUG9wZW4oc3N0
YXRlX3NlYXJjaF9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11
bmljYXRlKClbMF0KICAgICAgICAgICAgICAgIGlmIHNlYXJjaF9vdXRwdXQgIT0gIiI6CiAgICAg
ICAgICAgICAgICAgICAgbWF0Y2guYXBwZW5kKCJNYXRjaGVkIGluICVzIiAlIHNlYXJjaF9vdXRw
dXQucnN0cmlwKCkpCiAgICBpZiBtYXRjaDoKICAgICAgICBiYi5lcnJvcigiVGhlIHJlY2lwZSAl
cyBpcyB0cnlpbmcgdG8gaW5zdGFsbCBmaWxlcyBpbnRvIGEgc2hhcmVkICIgXAogICAgICAgICAg
ImFyZWEgd2hlbiB0aG9zZSBmaWxlcyBhbHJlYWR5IGV4aXN0LiBUaG9zZSBmaWxlcyBhbmQgdGhl
aXIgbWFuaWZlc3QgIiBcCiAgICAgICAgICAibG9jYXRpb24gYXJlOlxuICAgJXNcblBsZWFzZSB2
ZXJpZnkgd2hpY2ggcmVjaXBlIHNob3VsZCBwcm92aWRlIHRoZSAiIFwKICAgICAgICAgICJhYm92
ZSBmaWxlcy5cblRoZSBidWlsZCBoYXMgc3RvcHBlZCBhcyBjb250aW51aW5nIGluIHRoaXMgc2Nl
bmFyaW8gV0lMTCAiIFwKICAgICAgICAgICJicmVhayB0aGluZ3MsIGlmIG5vdCBub3csIHBvc3Np
Ymx5IGluIHRoZSBmdXR1cmUgKHdlJ3ZlIHNlZW4gYnVpbGRzIGZhaWwgIiBcCiAgICAgICAgICAi
c2V2ZXJhbCBtb250aHMgbGF0ZXIpLiBJZiB0aGUgc3lzdGVtIGtuZXcgaG93IHRvIHJlY292ZXIg
ZnJvbSB0aGlzICIgXAogICAgICAgICAgImF1dG9tYXRpY2FsbHkgaXQgd291bGQgaG93ZXZlciB0
aGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgc2NlbmFyaW9zICIgXAogICAgICAgICAgIndoaWNo
IGNhbiByZXN1bHQgaW4gdGhpcyBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaCBvbmUgdGhpcyBpcy4g
SXQgbWF5IGJlICIgXAogICAgICAgICAgInlvdSBoYXZlIHN3aXRjaGVkIHByb3ZpZGVycyBvZiBz
b21ldGhpbmcgbGlrZSB2aXJ0dWFsL2tlcm5lbCAoZS5nLiBmcm9tICIgXAogICAgICAgICAgImxp
bnV4LXlvY3RvIHRvIGxpbnV4LXlvY3RvLWRldiksIGluIHRoYXQgY2FzZSB5b3UgbmVlZCB0byBl
eGVjdXRlIHRoZSAiIFwKICAgICAgICAgICJjbGVhbiB0YXNrIGZvciBib3RoIHJlY2lwZXMgYW5k
IGl0IHdpbGwgcmVzb2x2ZSB0aGlzIGVycm9yLiBJdCBtYXkgYmUgIiBcCiAgICAgICAgICAieW91
IGNoYW5nZWQgRElTVFJPX0ZFQVRVUkVTIGZyb20gc3lzdGVtZCB0byB1ZGV2IG9yIHZpY2UgdmVy
c2EuIENsZWFuaW5nICIgXAogICAgICAgICAgInRob3NlIHJlY2lwZXMgc2hvdWxkIGFnYWluIHJl
c29sdmUgdGhpcyBlcnJvciBob3dldmVyIHN3aXRjaGluZyAiIFwKICAgICAgICAgICJESVNUUk9f
RkVBVFVSRVMgb24gYW4gZXhpc3RpbmcgYnVpbGQgZGlyZWN0b3J5IGlzIG5vdCBzdXBwb3J0ZWQs
IHlvdSAiIFwKICAgICAgICAgICJzaG91bGQgcmVhbGx5IGNsZWFuIG91dCB0bXAgYW5kIHJlYnVp
bGQgKHJldXNpbmcgc3N0YXRlIHNob3VsZCBiZSBzYWZlKS4gIiBcCiAgICAgICAgICAiSXQgY291
bGQgYmUgdGhlIG92ZXJsYXBwaW5nIGZpbGVzIGRldGVjdGVkIGFyZSBoYXJtbGVzcyBpbiB3aGlj
aCBjYXNlICIgXAogICAgICAgICAgImFkZGluZyB0aGVtIHRvIFNTVEFURV9EVVBXSElURUxJU1Qg
bWF5IGJlIHRoZSBjb3JyZWN0IHNvbHV0aW9uLiBJdCBjb3VsZCAiIFwKICAgICAgICAgICJhbHNv
IGJlIHlvdXIgYnVpbGQgaXMgaW5jbHVkaW5nIHR3byBkaWZmZXJlbnQgY29uZmxpY3RpbmcgdmVy
c2lvbnMgb2YgIiBcCiAgICAgICAgICAidGhpbmdzIChlLmcuIGJsdWV6IDQgYW5kIGJsdWV6IDUg
YW5kIHRoZSBjb3JyZWN0IHNvbHV0aW9uIGZvciB0aGF0IHdvdWxkICIgXAogICAgICAgICAgImJl
IHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LiBJZiBpbiBkb3VidCwgcGxlYXNlIGFzayBvbiB0aGUg
bWFpbGluZyBsaXN0LCAiIFwKICAgICAgICAgICJzaGFyaW5nIHRoZSBlcnJvciBhbmQgZmlsZWxp
c3QgYWJvdmUuIiAlIFwKICAgICAgICAgIChkLmdldFZhcignUE4nLCBUcnVlKSwgIlxuICIuam9p
bihtYXRjaCkpKQogICAgICAgIGJiLmZhdGFsKCJJZiB0aGUgYWJvdmUgbWVzc2FnZSBpcyB0b28g
bXVjaCwgdGhlIHNpbXBsZXIgdmVyc2lvbiBpcyB5b3UncmUgYWR2aXNlZCB0byB3aXBlIG91dCB0
bXAgYW5kIHJlYnVpbGQgKHJldXNpbmcgc3N0YXRlIGlzIGZpbmUpLiBUaGF0IHdpbGwgbGlrZWx5
IGZpeCB0aGluZ3MgaW4gbW9zdCAoYnV0IG5vdCBhbGwpIGNhc2VzLiIpCgogICAgIyBXcml0ZSBv
dXQgdGhlIG1hbmlmZXN0CiAgICBmID0gb3BlbihtYW5pZmVzdCwgInciKQogICAgZm9yIGZpbGUg
aW4gc2hhcmVkZmlsZXM6CiAgICAgICAgZi53cml0ZShmaWxlICsgIlxuIikKCiAgICAjIFdlIHdh
bnQgdG8gZW5zdXJlIHRoYXQgZGlyZWN0b3JpZXMgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIG1h
bmlmZXN0CiAgICAjIHNvIHRoYXQgd2hlbiB3ZSB0ZXN0IHRvIHNlZSBpZiB0aGV5IHNob3VsZCBi
ZSBkZWxldGVkIGFueSBjb250ZW50cwogICAgIyBhZGRlZCBieSB0aGUgdGFzayB3aWxsIGhhdmUg
YmVlbiByZW1vdmVkIGZpcnN0LgogICAgZGlycyA9IHNvcnRlZChzaGFyZWRkaXJzLCBrZXk9bGVu
KQogICAgIyBNdXN0IHJlbW92ZSBjaGlsZHJlbiBmaXJzdCwgd2hpY2ggd2lsbCBoYXZlIGEgbG9u
Z2VyIHBhdGggdGhhbiB0aGUgcGFyZW50CiAgICBmb3IgZGkgaW4gcmV2ZXJzZWQoZGlycyk6CiAg
ICAgICAgZi53cml0ZShkaSArICJcbiIpCiAgICBmLmNsb3NlKCkKCiAgICAjIEFwcGVuZCB0byB0
aGUgbGlzdCBvZiBtYW5pZmVzdHMgZm9yIHRoaXMgUEFDS0FHRV9BUkNICgogICAgaSA9IGQyLmV4
cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9pbmRleC0ke1NTVEFURV9NQU5NQUNIfSIpCiAgICBs
ID0gYmIudXRpbHMubG9ja2ZpbGUoaSArICIubG9jayIpCiAgICBmaWxlZGF0YSA9IGQuZ2V0VmFy
KCJTVEFNUCIsIFRydWUpICsgIiAiICsgZDIuZ2V0VmFyKCJTU1RBVEVfTUFORklMRVBSRUZJWCIs
IFRydWUpICsgIiAiICsgZC5nZXRWYXIoIldPUktESVIiLCBUcnVlKSArICJcbiIKICAgIG1hbmlm
ZXN0cyA9IFtdCiAgICBpZiBvcy5wYXRoLmV4aXN0cyhpKToKICAgICAgICB3aXRoIG9wZW4oaSwg
InIiKSBhcyBmOgogICAgICAgICAgICBtYW5pZmVzdHMgPSBmLnJlYWRsaW5lcygpCiAgICBpZiBm
aWxlZGF0YSBub3QgaW4gbWFuaWZlc3RzOgogICAgICAgIHdpdGggb3BlbihpLCAiYSsiKSBhcyBm
OgogICAgICAgICAgICBmLndyaXRlKGZpbGVkYXRhKQogICAgYmIudXRpbHMudW5sb2NrZmlsZShs
KQoKICAgICMgUnVuIHRoZSBhY3R1YWwgZmlsZSBpbnN0YWxsCiAgICBmb3Igc3RhdGUgaW4gc3Nb
J2RpcnMnXToKICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzdGF0ZVsxXSk6CiAgICAgICAgICAg
IG9lLnBhdGguY29weWhhcmRsaW5rdHJlZShzdGF0ZVsxXSwgc3RhdGVbMl0pCgogICAgZm9yIHBv
c3RpbnN0IGluIChkLmdldFZhcignU1NUQVRFUE9TVElOU1RGVU5DUycsIFRydWUpIG9yICcnKS5z
cGxpdCgpOgogICAgICAgICMgQWxsIGhvb2tzIHNob3VsZCBydW4gaW4gdGhlIFNTVEFURV9JTlNU
RElSCiAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKHBvc3RpbnN0LCBkLCAoc3N0YXRlaW5zdCwp
KQoKICAgIGZvciBsb2NrIGluIGxvY2tzOgogICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9j
aykKlGiajE4gICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQpCiAgICBz
c3RhdGVfY2xlYW4oc2hhcmVkX3N0YXRlLCBkKQqUaJyMMCR7QGFsbF9tdWx0aWxpYl90dW5lX3Zh
bHVlcyhkLCAnUEFDS0FHRV9BUkNIUycpfZRonowQJHtTREtfRElSfS9pbWFnZZRooWjaaHSMIiR7
QGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKSBvciAnJ32UaKVOaJWMVyR7QGJiLnBhcnNlLkJCSGFu
ZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVswXSBvciAnZGVm
YXVsdHBrZ25hbWUnfZRoSIwfJHtTU1RBVEVfRElSfS8ke1NTVEFURV9QS0dOQU1FfZRoqYwwJHtT
REtQQVRIfS9zeXNyb290cy8ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9lGiXaN9orYwLcGFj
a2FnZV9ycG2UaK9OaAuMBHBva3mUaJlo2mizWBQEAABkZWYgcG9wdWxhdGVfc2RrX2NvbW1vbihk
KToKICAgIGZyb20gb2Uuc2RrIGltcG9ydCBwb3B1bGF0ZV9zZGsKICAgIGZyb20gb2UubWFuaWZl
c3QgaW1wb3J0IGNyZWF0ZV9tYW5pZmVzdCwgTWFuaWZlc3QKCiAgICBwbiA9IGQuZ2V0VmFyKCdQ
TicsIFRydWUpCiAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fVEFSR0VUX1RB
U0siLCBwbiwgZCkKICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlRPT0xDSEFJTl9UQVJHRVRf
VEFTS19BVFRFTVBUT05MWSIsIHBuLCBkKQoKICAgIGxkID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQp
CiAgICBsZC5zZXRWYXIoIlBLR0RBVEFfRElSIiwgIiR7U1RBR0lOR19ESVJ9LyR7U0RLX0FSQ0h9
LSR7U0RLUEtHU1VGRklYfSR7U0RLX1ZFTkRPUn0tJHtTREtfT1N9L3BrZ2RhdGEiKQogICAgcnVu
dGltZV9tYXBwaW5nX3JlbmFtZSgiVE9PTENIQUlOX0hPU1RfVEFTSyIsIHBuLCBsZCkKICAgIHJ1
bnRpbWVfbWFwcGluZ19yZW5hbWUoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiLCBw
biwgbGQpCiAgICBkLnNldFZhcigiVE9PTENIQUlOX0hPU1RfVEFTSyIsIGxkLmdldFZhcigiVE9P
TENIQUlOX0hPU1RfVEFTSyIsIFRydWUpKQogICAgZC5zZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RB
U0tfQVRURU1QVE9OTFkiLCBsZC5nZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9O
TFkiLCBUcnVlKSkKCiAgICAjIGNyZWF0ZSB0YXJnZXQvaG9zdCBTREsgbWFuaWZlc3RzCiAgICBj
cmVhdGVfbWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyPWQuZ2V0VmFyKCdTREtfRElSJywgVHJ1ZSks
CiAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3RfdHlwZT1NYW5pZmVzdC5NQU5JRkVTVF9UWVBF
X1NES19IT1NUKQogICAgY3JlYXRlX21hbmlmZXN0KGQsIG1hbmlmZXN0X2Rpcj1kLmdldFZhcign
U0RLX0RJUicsIFRydWUpLAogICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X3R5cGU9TWFuaWZl
c3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQoKICAgIHBvcHVsYXRlX3NkayhkKQqUaLaMDyR7
U0RLREVQTE9ZRElSfZRouIwyJHtXT1JLRElSfS8ke1NES01BQ0hJTkV9LWRlcGxveS0ke1BOfS1w
b3B1bGF0ZS1zZGuUaJaMQiR7U1RBTVBTX0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQ
Tn0vJHtFWFRFTkRQRX0ke1BWfS0ke1BSfZRov05oLIxuJHtTREtfQVJDSH0ke1NES19WRU5ET1J9
JHtAWyctJyArIGQuZ2V0VmFyKCdTREtfT1MnLCBUcnVlKSwgJyddW2QuZ2V0VmFyKCdTREtfT1Mn
LCBUcnVlKSA9PSAoJycgb3IgJ2N1c3RvbScpXX2UaJiMGCR7VE1QRElSfS9zc3RhdGUtY29udHJv
bJRokWjaaMdOaMlo2mi8jAMxLjCUaMxOaFpYeQEAAGRlZiBnZXRfcGFja2FnZV9tYXBwaW5nIChw
a2csIGJhc2Vwa2csIGQpOgogICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCgogICAgZGF0YSA9IG9l
LnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShwa2csIGQpCiAgICBrZXkgPSAiUEtHXyVzIiAl
IHBrZwoKICAgIGlmIGtleSBpbiBkYXRhOgogICAgICAgICMgSGF2ZSB0byBhdm9pZCB1bmRvaW5n
IHRoZSB3cml0ZV9leHRyYV9wa2dzKGdsb2JhbF92YXJpYW50cy4uLikKICAgICAgICBpZiBiYi5k
YXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZCkgYW5kIGRhdGFba2V5XSA9PSBiYXNlcGtn
OgogICAgICAgICAgICByZXR1cm4gcGtnCiAgICAgICAgcmV0dXJuIGRhdGFba2V5XQoKICAgIHJl
dHVybiBwa2cKlGgSaNpovYxLJHtAYmIucGFyc2UuQkJIYW5kbGVyLnZhcnNfZnJvbV9maWxlKGQu
Z2V0VmFyKCdGSUxFJywgRmFsc2UpLGQpWzJdIG9yICdyMCd9lGhXaNp1jA1ydW50YXNraGFzaGVz
lH2UKIxydmlydHVhbDpuYXRpdmVzZGs6L2hvbWUvam9zaHVhZ2wvUHJvamVjdHMvcG9reS9tZXRh
L3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC45LmJiLmRvX3BhY2thZ2Vfd3Jp
dGVfcnBtlIwgZTYzYTczMzYzNjJiMDlkYjMwNWM5Zjk1YTQxYjA1YWWUjGt2aXJ0dWFsOm5hdGl2
ZTovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0v
cnBtcmVzb2x2ZV8xLjAuYmIuZG9fcG9wdWxhdGVfc3lzcm9vdJSMIDAwZjlmM2VjZjI0YzgyZTdi
NzNmYzI0ZGVkZDJiYjcxlIxodmlydHVhbDpuYXRpdmU6L2hvbWUvam9zaHVhZ2wvUHJvamVjdHMv
cG9reS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGl4ei9waXh6XzEuMC42LmJiLmRvX3BvcHVsYXRl
X3N5c3Jvb3SUjCA1YjJkYTNiYzY0NmIzNTNmNzZlY2QwYWIyYjJlOTFkNJSMcXZpcnR1YWw6bmF0
aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xz
L3BhdGNoZWxmL3BhdGNoZWxmXzAuOS5iYi5kb19wb3B1bGF0ZV9zeXNyb290lIwgMTQ2YmFjM2I0
ZDdhZTFiZGYwYjk2ODZiMmQwYTA2OTCUjG52aXJ0dWFsOm5hdGl2ZTovaG9tZS9qb3NodWFnbC9Q
cm9qZWN0cy9wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaGVsZi9wYXRjaGVsZl8wLjku
YmIuZG9fcG9wdWxhdGVfc3lzcm9vdJSMIDQ1MWVjOTBkOTg5Y2E1NjI2M2YxOGE5ZWNkZmFhMDcz
lIxodmlydHVhbDpuYXRpdmU6L2hvbWUvam9zaHVhZ2wvUHJvamVjdHMvcG9reS9tZXRhL3JlY2lw
ZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy4zLmJiLmRvX3BvcHVsYXRlX3N5c3Jvb3SUjCBiNWY1
MWY2OTJjODQ3NzMyOGFjM2I2OWM0ZTlkMDhmYpSMaHZpcnR1YWw6bmF0aXZlc2RrOi9ob21lL2pv
c2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yNC5i
Yi5kb19wb3B1bGF0ZV9zeXNyb290lIwgOGNiMDc2ZjUxODg1ZWI0N2IwY2MwMTU3NTQ3YTQ0ZDCU
jG92aXJ0dWFsOm5hdGl2ZXNkazovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21ldGEvcmVj
aXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjI0LmJiLmRvX3BvcHVsYXRlX3N5c3Jvb3SU
jCAyNTRkNjY4OWNlMmY0NzVkYzA2YWIyOWFhOWJiMDFkZJSMZS9ob21lL2pvc2h1YWdsL1Byb2pl
Y3RzL3Bva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40
MS5iYi5kb19wb3B1bGF0ZV9zeXNyb290lIwgNDdjMGU5MmZmZmU5ZDM1ZDkwM2M0YzBkZmU2MTYx
MGGUjHJ2aXJ0dWFsOm5hdGl2ZTovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21ldGEvcmVj
aXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG1fZ2l0LmJiLmRvX3BvcHVsYXRlX3N5
c3Jvb3SUjCBjYjlmODUzMDYxNGQ2YTg0N2ZiNTBlZjliODRhYWYxMZSMa3ZpcnR1YWw6bmF0aXZl
c2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dj
Yy9saWJnY2NfNi4yLmJiLmRvX3BhY2thZ2Vfd3JpdGVfcnBtlIwgZDg2ODYwYjYyZjkwOGZhZDIw
ZGVhM2QzZjVhZmY3NTiUjGd2aXJ0dWFsOm5hdGl2ZTovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9w
b2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNi5iYi5kb19wb3B1bGF0ZV9z
eXNyb290lIwgNTRmMWY3YjNhZDIxYWU4ZWExYThmODFiZjFlNjc0ZWaUjGx2aXJ0dWFsOm5hdGl2
ZXNkazovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21ldGEvcmVjaXBlcy1kZXZ0b29scy9w
YXRjaGVsZi9wYXRjaGVsZl8wLjkuYmIuZG9fcGFja2FnZWRhdGGUjCBjNGNmMDMxNDcxZmUzYmNi
YTNkMzNmOGUxM2E4NDU0MZSMcHZpcnR1YWw6bmF0aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2pl
Y3RzL3Bva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV82LjIuYmIuZG9f
cGFja2FnZV93cml0ZV9ycG2UjCAwOGRhODkyNmQ5Mzc5YjQ4MDhkZjBlZWMwY2Y1NDdiYpSMcHZp
cnR1YWw6bmF0aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVz
LWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlXzIuMjQuYmIuZG9fcGFja2FnZV93cml0ZV9ycG2UjCBj
MWU5MWFhMmI3M2I3NmVkNmJhODAwNjExNDllYTU1ZpSMZXZpcnR1YWw6bmF0aXZlc2RrOi9ob21l
L2pvc2h1YWdsL1Byb2plY3RzL3Bva3kvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2Nf
Ni4yLmJiLmRvX3BhY2thZ2VkYXRhlIwgNTEyZWVkZTY3OTI0MjUzZDMzODk1ZWU3ODZkYzVlNGOU
jHR2aXJ0dWFsOm5hdGl2ZTovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21ldGEvcmVjaXBl
cy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwb18wLjQuMTEuYmIuZG9fcG9wdWxhdGVfc3lz
cm9vdJSMIGI0MGQwOWIxZmU3ZDYwNTljNWIwNzE5MDQzNzFmOTMwlIxsdmlydHVhbDpuYXRpdmU6
L2hvbWUvam9zaHVhZ2wvUHJvamVjdHMvcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRv
L3BzZXVkb18xLjguMS5iYi5kb19wb3B1bGF0ZV9zeXNyb290lIwgNzIyODFmMmVhZDY5YzQwOThh
ZjE5ZGU1ODI2Y2NmMTaUjGp2aXJ0dWFsOm5hdGl2ZXNkazovaG9tZS9qb3NodWFnbC9Qcm9qZWN0
cy9wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjI0LmJiLmRvX3Bh
Y2thZ2VkYXRhlIwgNjVjOTdlNDFlZDZiNTM5NTBkOGMyYzRhNDFiMGY4MGSUjGN2aXJ0dWFsOm5h
dGl2ZXNkazovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21ldGEvcmVjaXBlcy1jb3JlL2ds
aWJjL2dsaWJjXzIuMjQuYmIuZG9fcGFja2FnZWRhdGGUjCAzZDUzNGRkYTc5Mjg3MWU5YWJmNjRk
ZTVkYTEzZjczN5SMaXZpcnR1YWw6bmF0aXZlc2RrOi9ob21lL2pvc2h1YWdsL1Byb2plY3RzL3Bv
a3kvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yNC5iYi5kb19wYWNrYWdlX3dyaXRl
X3JwbZSMIDNiYzZlMWE3MWM1YmVlMjEwMjFkN2ZkZjFmNGYyOWMwlIxqdmlydHVhbDpuYXRpdmVz
ZGs6L2hvbWUvam9zaHVhZ2wvUHJvamVjdHMvcG9reS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2Nj
L2djYy1ydW50aW1lXzYuMi5iYi5kb19wYWNrYWdlZGF0YZSMIDRjOGVjNjE4ZmIzMWE0OGRjYzhi
OWFmZTFiZGRkMDI4lIx+dmlydHVhbDpuYXRpdmVzZGs6L2hvbWUvam9zaHVhZ2wvUHJvamVjdHMv
cG9reS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhl
YWRlcnNfNC44LmJiLmRvX3BhY2thZ2VkYXRhlIwgZDAzNzU4NjFmMTA1ZGY3NjYzYmM2YTUwMTY5
NzEwNmGUjIR2aXJ0dWFsOm5hdGl2ZXNkazovaG9tZS9qb3NodWFnbC9Qcm9qZWN0cy9wb2t5L21l
dGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVyc180
LjguYmIuZG9fcGFja2FnZV93cml0ZV9ycG2UjCAxYmViMjUxZmNjMmJmMzgxMTk5MDZiOGNhYzA3
ZWMyYpR1jAh0YXNrZGVwc5RdlChonGh4aK9oKGjMaEJod2gLaHRoi2hSaFtov2ilaBVohmjJaMdo
TWhxaDdoHGitaFBolWgeaElovWi8aIRogmhsaLhoL2gTaAhoKmipaA5oIGhAaJ5oDGhwaJFobmgP
aCxoLWgKaFdoR2hGaJloS2iYaJdoSGheaGBoPmhpaJZoNWhDaHxoemhjaKFoEmgZaI1oMWhhaDJo
tmgjaFpos2hYaCdoVWgXaCloPWg8aCVoOmiaZYwLcnVudGFza2RlcHOUXZQoajsBAABqNQEAAGpF
AQAAai8BAABqOQEAAGo3AQAAaj8BAABqKQEAAGpDAQAAakEBAABqJwEAAGpJAQAAakcBAABqKwEA
AGolAQAAahsBAABqMwEAAGojAQAAaiEBAABqHwEAAGo9AQAAai0BAABqMQEAAGodAQAAZYwNYmFz
ZXdoaXRlbGlzdJSPlCiMBkJCUEFUSJSMCENPUkVCQVNFlIwKQ0NBQ0hFX0RJUpSMD1BSU0VSVl9E
VU1QRklMRZSMBEZJTEWUjA5DQ0FDSEVfRElTQUJMRZSMC1BLR0RBVEFfRElSlIwSU1RBR0lOR19E
SVJfVEFSR0VUlIwHV09SS0RJUpSMB1RISVNESVKUjA5TU1RBVEVfUEtHQVJDSJSMEFNUQUdJTkdf
RElSX0hPU1SUjAlGSUxFU1BBVEiUjBJFWFRFUk5BTF9UT09MQ0hBSU6UjBBCQl9XT1JLRVJDT05U
RVhUlIwHTE9HTkFNRZSMCkJVSUxEX0FSQ0iUjAZDQ0FDSEWUjAhFUlJPUl9RQZSMDlBSU0VSVl9E
VU1QRElSlIwMTElDRU5TRV9QQVRIlIwHV0FSTl9RQZSMC1BSU0VSVl9IT1NUlIwKU1RBTVBDTEVB
TpSMDEZJTEVfRElSTkFNRZSMBkRMX0RJUpSMA1BXRJSMClNTVEFURV9ESVKUjAtCQl9UQVNLSEFT
SJSMCEJCU0VSVkVSlIwPUFJTRVJWX0xPQ0tET1dOlIwGVE1QRElSlIwPRklMRVNFWFRSQVBBVEhT
lIwEVVNFUpSMBFBBVEiUjARURVJNlIwNUEFSQUxMRUxfTUFLRZSMBVNIRUxMlIwESE9NRZSMDFNE
S1BLR1NVRkZJWJSQjBRmaWxlX2NoZWNrc3VtX3ZhbHVlc5RdlCiMGnRvb2xjaGFpbi1zaGFyLXJl
bG9jYXRlLnNolIwgOTI4NTczNDNjMGUyZjY0MWIwNzdhOTcyMGYzN2U5MWWUhpSMGXRvb2xjaGFp
bi1zaGFyLWV4dHJhY3Quc2iUjCBmZTdlYzZiYzY5MjljZWFiYzZjZWFkMTAwYThmZDNhYpSGlGV1
Lg==
</data>

          </attachment>
      

    </bug>

</bugzilla>