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

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>196234</bug_id>
          
          <creation_ts>2019-03-25 17:43:28 -0700</creation_ts>
          <short_desc>Add a ValueRepReduction phase</short_desc>
          <delta_ts>2019-04-02 13:54:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>rniwa</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1521138</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-25 17:43:28 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521957</commentid>
    <comment_count>1</comment_count>
      <attachid>366140</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-27 18:26:47 -0700</bug_when>
    <thetext>Created attachment 366140
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521974</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-27 19:07:12 -0700</bug_when>
    <thetext>I broke out 22 subtests in JS2 that are affected by this optimization. If I run those 22 tests on their own on iOS, it appears to be a 1-2% progression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521987</commentid>
    <comment_count>3</comment_count>
      <attachid>366145</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-27 20:23:28 -0700</bug_when>
    <thetext>Created attachment 366145
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522197</commentid>
    <comment_count>4</comment_count>
      <attachid>366199</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-28 13:35:24 -0700</bug_when>
    <thetext>Created attachment 366199
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522200</commentid>
    <comment_count>5</comment_count>
      <attachid>366199</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-28 13:46:45 -0700</bug_when>
    <thetext>Comment on attachment 366199
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=366199&amp;action=review

&gt; PerformanceTests/JetStream2/cli.js:46
&gt; +//testList = [&quot;typescript&quot;, &quot;tagcloud-SP&quot;, &quot;stanford-crypto-sha256&quot;, &quot;stanford-crypto-pbkdf2&quot;, &quot;stanford-crypto-aes&quot;, &quot;raytrace&quot;, &quot;pdfjs&quot;, &quot;navier-stokes&quot;, &quot;n-body-SP&quot;, &quot;ML&quot;, &quot;mandreel&quot;, &quot;gbemu&quot;, &quot;gaussian-blur&quot;, &quot;float-mm.c&quot;, &quot;crypto-aes-SP&quot;, &quot;cdjs&quot;, &quot;Box2D&quot;, &quot;Basic&quot;, &quot;base64-SP&quot;, &quot;async-fs&quot;, &quot;3d-raytrace-SP&quot;, &quot;3d-cube-SP&quot;]
&gt; +
&gt;  load(&quot;./JetStreamDriver.js&quot;);
&gt;  
&gt; +

Oops: I&apos;ll revert this.

&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:473
&gt; +        case DoubleRep: {
&gt; +            break;
&gt; +
&gt; +            if (m_node-&gt;child1()-&gt;op() != ValueRep)
&gt; +                break;
&gt; +            // FIXME: If we added a PurifyNaN node, we could just convert to being Identity(PurifyNaN(resultNode))
&gt; +            if (m_node-&gt;child1().useKind() != RealNumberUse)
&gt; +                break;
&gt; +
&gt; +            Node* valueRep = m_node-&gt;child1().node();
&gt; +            if (valueRep-&gt;child1().useKind() != DoubleRepUse)
&gt; +                break;
&gt; +
&gt; +            Node* resultNode = valueRep-&gt;child1().node();
&gt; +            m_insertionSet.insertNode(
&gt; +                m_nodeIndex, SpecNone, Check, m_node-&gt;origin,
&gt; +                Edge(resultNode, DoubleRepRealUse));
&gt; +            m_node-&gt;convertToIdentityOn(resultNode);
&gt; +            m_changed = true;
&gt; +            break;
&gt; +        }
&gt; +
&gt; +        case MovHint: {
&gt; +            break;
&gt; +            if (m_node-&gt;child1()-&gt;op() != ValueRep)
&gt; +                break;
&gt; +            if (m_node-&gt;child1()-&gt;child1().useKind() != DoubleRepUse)
&gt; +                break;
&gt; +            m_node-&gt;child1() = Edge(m_node-&gt;child1()-&gt;child1().node(), DoubleRepUse);
&gt; +            m_changed = true;
&gt; +            break;
&gt; +        }

Oops. I&apos;ll never these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522240</commentid>
    <comment_count>6</comment_count>
      <attachid>366214</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-28 15:09:01 -0700</bug_when>
    <thetext>Created attachment 366214
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523328</commentid>
    <comment_count>7</comment_count>
      <attachid>366214</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-02 08:58:39 -0700</bug_when>
    <thetext>Comment on attachment 366214
patch

Clearing flags on attachment: 366214

Committed r243744: &lt;https://trac.webkit.org/changeset/243744&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523329</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-02 08:58:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523447</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-02 13:54:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/49532927&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366140</attachid>
            <date>2019-03-27 18:26:47 -0700</date>
            <delta_ts>2019-03-27 20:23:28 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>24760</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkocmV2aXNpb24gMjQzNDc0KQorKysg
UGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzks
OCArMzksMTIgQEAgaWYgKHR5cGVvZiBydW5Nb2RlICE9PSAidW5kZWZpbmVkIiAmJiBydQogZWxz
ZQogICAgIFJBTWlmaWNhdGlvbiA9IGZhbHNlOwogCisvL3Rlc3RMaXN0ID0gWyJ0eXBlc2NyaXB0
IiwgInRhZ2Nsb3VkLVNQIiwgInN0YW5mb3JkLWNyeXB0by1zaGEyNTYiLCAic3RhbmZvcmQtY3J5
cHRvLXBia2RmMiIsICJzdGFuZm9yZC1jcnlwdG8tYWVzIiwgInJheXRyYWNlIiwgInBkZmpzIiwg
Im5hdmllci1zdG9rZXMiLCAibi1ib2R5LVNQIiwgIk1MIiwgIm1hbmRyZWVsIiwgImdiZW11Iiwg
ImdhdXNzaWFuLWJsdXIiLCAiZmxvYXQtbW0uYyIsICJjcnlwdG8tYWVzLVNQIiwgImNkanMiLCAi
Qm94MkQiLCAiQmFzaWMiLCAiYmFzZTY0LVNQIiwgImFzeW5jLWZzIiwgIjNkLXJheXRyYWNlLVNQ
IiwgIjNkLWN1YmUtU1AiXQordGVzdExpc3QgPSBbInN0YW5mb3JkLWNyeXB0by1zaGEyNTYiLCAi
c3RhbmZvcmQtY3J5cHRvLXBia2RmMiIsICJzdGFuZm9yZC1jcnlwdG8tYWVzIl0KKwogbG9hZCgi
Li9KZXRTdHJlYW1Ecml2ZXIuanMiKTsKIAorCiBhc3luYyBmdW5jdGlvbiBydW5KZXRTdHJlYW0o
KSB7CiAgICAgdHJ5IHsKICAgICAgICAgYXdhaXQgSmV0U3RyZWFtLmluaXRpYWxpemUoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI0MzQ3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDE2LDYgKzQx
Niw3IEBAIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAogZGZnL0RGR1VuaWZpY2F0
aW9uUGhhc2UuY3BwCiBkZmcvREZHVXNlS2luZC5jcHAKIGRmZy9ERkdWYWxpZGF0ZS5jcHAKK2Rm
Zy9ERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmNwcAogZGZnL0RGR1ZhbHVlU291cmNlLmNwcAog
ZGZnL0RGR1ZhbHVlU3RyZW5ndGguY3BwCiBkZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5j
cHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDM0NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODgzLDYgKzg4Myw3IEBACiAJCTUyQjMxMEZCMTk3
NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMEZBMTk3NEFFNjEwMDgwODU3
QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyogVHlw
ZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzA2MTFG
MUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDMDYxMUQxQUE1MUUxQjAwQjRBREJBIC8qIFJ1bnRp
bWVUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzU1NTY1
MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggKi87IH07CiAJ
CTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4
NiAvKiBUeXBlUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1MkNEMEY1RDIyNDJGNTY5MDA0QTE4QTUgLyogRm91bmRhdGlvbi5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJ
CTUyQ0QwRjVFMjI0MkY1NjkwMDRBMThBNSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4
MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OwpAQCAtMzM4
OSw2ICszMzkwLDggQEAKIAkJNTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlv
bkNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVMb2NhdGlvbkNhY2hlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUyQjcxN0I0MUEwNTk3RTEwMDdBRjRGMyAvKiBDb250cm9sRmxv
d1Byb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRy
b2xGbG93UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkMwNjEx
RDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUnVudGltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTJDNTU1NjQyMjRDMkFFNzAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHA7IHBhdGgg
PSBkZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlv
blBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyQzk1MkI2MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVHlwZVByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyQzk1MkI4MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHlwZVByb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJDRDBGNjQyMjQyRjU2OTAwNEExOEE1IC8qIHRlc3RkZmcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7
IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RkZmc7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CkBAIC03NjUxLDYgKzc2NTQsOCBAQAogCQkJCTBGMzRCMTQ4MTZENDIw
MEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8sCiAJCQkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VE
MEZGIC8qIERGR1ZhbGlkYXRlLmNwcCAqLywKIAkJCQkwRjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYg
LyogREZHVmFsaWRhdGUuaCAqLywKKwkJCQk1MkM1NTU2NDIyNEMyQUU3MDA5OUY1Q0MgLyogREZH
VmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHAgKi8sCisJCQkJNTJDNTU1NjUyMjRDMkFFNzAwOTlG
NUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRjJCREM0RTE1MjI4
QkU3MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwICovLAogCQkJCTBGMkJEQzQwMTUyMjgw
MTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oICovLAogCQkJCTBGMDEyMzMwMTk0NEVBMUIw
MDg0M0EwQyAvKiBERkdWYWx1ZVN0cmVuZ3RoLmNwcCAqLywKQEAgLTkzNzksNiArOTM4NCw3IEBA
CiAJCQkJRDk3MjI3NTJEQzU0NDU5QjkxMjVCNTM5IC8qIEpTTW9kdWxlTG9hZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OTZCNzMyMDFCREEwOEVGMDAzMzFCODQgLyogSlNNb2R1bGVMb2FkZXIu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyQzU1NTY2MjI0QzJB
RUEwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzlEQTRBNzFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzM0U4RDFEMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05hdGl2ZVN0ZEZ1bmN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzhEOTk5QzIyMUI3OEJCMDBENTA0NzQgLyogSlNO
b25EZXN0cnVjdGlibGVQcm94eS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24gMjQzNDc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSw2ICsxMTksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy9zdGF0aWMgdW5zaWduZWQgY291bnQ7CisgICAgICAgICAgICAvL2lmIChub2Rl
LT5vcCgpID09IFZhbHVlUmVwKSB7CisgICAgICAgICAgICAvLyAgICArK2NvdW50OworICAgICAg
ICAgICAgLy8gICAgZGF0YUxvZ0xuKCJSZW1vdmVkIFZhbHVlUmVwOiAiLCBjb3VudCk7CisgICAg
ICAgICAgICAvL30KICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmly
c3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxk
cmVuKCk7IGNoaWxkSWR4KyspIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjQzNDc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQAogI2lu
Y2x1ZGUgIkRGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdVbmlmaWNh
dGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJERkdWYWx1
ZVJlcFJlZHVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCIKQEAgLTQyMyw2ICs0MjQsNyBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGlmIChP
cHRpb25zOjp1c2VPYmplY3RBbGxvY2F0aW9uU2lua2luZygpKSB7CiAgICAgICAgICAgICBSVU5f
UEhBU0UocGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKTsKICAgICAgICAgICAgIFJVTl9QSEFT
RShwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcpOworICAgICAgICAgICAgUlVOX1BIQVNF
KHBlcmZvcm1WYWx1ZVJlcFJlZHVjdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoYW5n
ZWQpIHsKICAgICAgICAgICAgIC8vIFN0YXRlLWF0LXRhaWwgYW5kIHN0YXRlLWF0LWhlYWQgd2ls
bCBiZSBpbnZhbGlkIGlmIHdlIGRpZCBzdHJlbmd0aCByZWR1Y3Rpb24gc2luY2UKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMjQzNDc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEg
KzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0LmV4ZWN1dGUobV9ibG9jayk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0
dXJuIG1fY2hhbmdlZDsKICAgICB9CiAKIHByaXZhdGU6CisKICAgICB2b2lkIGhhbmRsZU5vZGUo
KQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKQEAgLTQzNyw2ICs0Mzgs
MzkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwOiB7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgIT0gVmFsdWVSZXApCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2UgYWRkZWQg
YSBQdXJpZnlOYU4gbm9kZSwgd2UgY291bGQganVzdCBjb252ZXJ0IHRvIGJlaW5nIElkZW50aXR5
KFB1cmlmeU5hTihyZXN1bHROb2RlKSkKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSAhPSBSZWFsTnVtYmVyVXNlKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBOb2RlKiB2YWx1ZVJlcCA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICAgICAgaWYgKHZhbHVlUmVwLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gRG91YmxlUmVwVXNl
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBOb2RlKiByZXN1bHROb2Rl
ID0gdmFsdWVSZXAtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgbV9ub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVj
aywgbV9ub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgRWRnZShyZXN1bHROb2RlLCBEb3Vi
bGVSZXBSZWFsVXNlKSk7CisgICAgICAgICAgICBtX25vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24o
cmVzdWx0Tm9kZSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgIT0gVmFsdWVS
ZXApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobV9ub2RlLT5jaGls
ZDEoKS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IERvdWJsZVJlcFVzZSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKG1fbm9kZS0+Y2hp
bGQxKCktPmNoaWxkMSgpLm5vZGUoKSwgRG91YmxlUmVwVXNlKTsKKyAgICAgICAgICAgIG1fY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgTnVtYmVyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeENvbnN0YW50OiB7CiAgICAgICAgICAgICBF
ZGdlJiBjaGlsZDEgPSBtX25vZGUtPmNoaWxkMSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZXBSZWR1Y3Rp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQu
aCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVmFsdWVSZXBSZWR1Y3Rp
b25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworICAgIAorcHVibGljOgorICAgIFZhbHVlUmVwUmVkdWN0aW9uUGhhc2UoR3JhcGgm
IGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiVmFsdWVSZXAgcmVkdWN0aW9uIikKKyAg
ICAgICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJv
b2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwor
ICAgICAgICByZXR1cm4gY29udmVydFZhbHVlUmVwc1RvRG91YmxlKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIGJvb2wgY29udmVydFZhbHVlUmVwc1RvRG91YmxlKCkKKyAgICB7CisgICAgICAg
IGlmICghT3B0aW9uczo6dXNlVmFsdWVSZXBFbGltaW5hdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gc3RhcnQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
KworICAgICAgICBIYXNoU2V0PE5vZGUqPiBjYW5kaWRhdGVzOworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBWYWx1ZVJlcCAmJiBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91Ymxl
UmVwVXNlKQorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghY2FuZGlkYXRlcy5zaXplKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9y
PE5vZGUqPj4gdXNlcnNPZjsKKyAgICAgICAgYXV0byBnZXRVc2Vyc09mID0gWyZdIChOb2RlKiBj
YW5kaWRhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHVzZXJzT2YuZmluZChjYW5kaWRh
dGUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSB1c2Vyc09mLmVuZCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7
CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBQaGkgfHwgKG5vZGUtPm9wKCkgPT0gVmFsdWVSZXAgJiYgY2Fu
ZGlkYXRlcy5jb250YWlucyhub2RlKSkpCisgICAgICAgICAgICAgICAgICAgIHVzZXJzT2YuYWRk
KG5vZGUsIFZlY3RvcjxOb2RlKj4oKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRl
cigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8Tm9kZSo+IGFscmVhZHlBZGRlZDsKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLmRvVG9DaGlsZHJlbihub2RlLCBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIGl0ZXIgPSB1c2Vyc09mLmZpbmQoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXRlciA9PSB1c2Vyc09mLmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUFkZGVkLmNvbnRhaW5z
KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgICAgICAg
ICBhbHJlYWR5QWRkZWQuYXBwZW5kKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFBoaUNoaWxkcmVuIHBoaUNoaWxk
cmVuKG1fZ3JhcGgpOworCisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHRvUmVtb3ZlOworICAgICAg
ICBIYXNoU2V0PE5vZGUqPiBzZWVuOworICAgICAgICBmb3IgKE5vZGUqIGNhbmRpZGF0ZSA6IGNh
bmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gY2FuZGlkYXRlczsKKyAgICAg
ICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICBzZWVuLmFk
ZChjYW5kaWRhdGUpOworICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAgICB3
aGlsZSAoY2FuZGlkYXRlcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRh
dGUgPSBjYW5kaWRhdGVzLnRha2VMYXN0KCk7CisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiB1
c2VyIDogZ2V0VXNlcnNPZihjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAodXNlci0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9rICY9IHVzZXItPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBS
ZWFsTnVtYmVyVXNlIC8qfHwgdXNlci0+Y2hpbGQxKCkudXNlS2luZCgpID09IE51bWJlclVzZSov
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vZGF0YUxvZygiRXNjYXBlZDogIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy9tX2dyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiIiwgdXNlcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9kYXRhTG9nTG4oKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgUHV0SGludDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBV
cHNpbG9uOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSB1c2VyLT5waGko
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuLmNvbnRhaW5zKHBoaSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBoaUNoaWxkcmVuLmZvckFsbEluY29taW5nVmFsdWVzKHBoaSwgWyZdIChOb2RlKiBub2RlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gSlNDb25zdGFu
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFzSlNWYWx1
ZSgpLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9r
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gVmFsdWVSZXApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgJj0gbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IERvdWJsZVJlcFVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9r
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZGF0YUxvZygiRXNjYXBlZDog
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbV9ncmFwaC5kdW1wKFdURjo6
ZGF0YUZpbGUoKSwgIiIsIG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
L2RhdGFMb2dMbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9rKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBzZWVuLmFkZChwaGkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBl
bmQocGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vZGF0YUxvZygiRXNjYXBlZDogIik7CisgICAgICAgICAgICAgICAgICAgICAgICAv
L21fZ3JhcGguZHVtcChXVEY6OmRhdGFGaWxlKCksICIiLCB1c2VyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vZGF0YUxvZ0xuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAgICB0b1Jl
bW92ZS5hZGQoY2FuZGlkYXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgY2FuZGlkYXRlcy5yZW1vdmUobm9kZSk7CisKKyAg
ICAgICAgaWYgKCFjYW5kaWRhdGVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBhdXRvIGJsb2NrQW5kSW5kZXggPSBbJl0gKE5vZGUqIG5vZGUpIC0+IHN0ZDo6
cGFpcjxCYXNpY0Jsb2NrKiwgdW5zaWduZWQ+IHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSkgPT0gbm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihibG9jaywgaSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCAwKTsKKyAg
ICAgICAgfTsKKworICAgICAgICBzZWVuLmNsZWFyKCk7CisgICAgICAgIGZvciAoTm9kZSogY2Fu
ZGlkYXRlIDogY2FuZGlkYXRlcykgeworICAgICAgICAgICAgLy9kYXRhTG9nTG4oIm9wdGltaXpl
ZCBjYW5kaWRhdGUiKTsKKyAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4gY2FuZGlkYXRlczsKKyAg
ICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICBzZWVu
LmFkZChjYW5kaWRhdGUpOworCisgICAgICAgICAgICB3aGlsZSAoY2FuZGlkYXRlcy5zaXplKCkp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzLnRha2VMYXN0
KCk7CisKKyAgICAgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlOworICAgICAgICAgICAgICAg
IGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRO
b2RlID0gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhbmRpZGF0ZS0+b3Ao
KSA9PSBWYWx1ZVJlcCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Tm9kZSA9IGNhbmRpZGF0
ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICAgICAgICAgIGZv
ciAoTm9kZSogdXNlciA6IGdldFVzZXJzT2YoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHVzZXItPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3Vi
bGVSZXA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUkVMRUFTRV9BU1NFUlQodXNlci0+
Y2hpbGQxKCkudXNlS2luZCgpID09IFJlYWxOdW1iZXJVc2UpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGxvY2F0aW9uID0gYmxvY2tBbmRJbmRleCh1c2VyKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NhdGlvbi5zZWNvbmQsIFNwZWNOb25lLCBDaGVjaywgdXNlci0+b3Jp
Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UocmVzdWx0Tm9kZSwgRG91Ymxl
UmVwUmVhbFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgdXNlci0+Y29udmVydFRvSWRl
bnRpdHlPbihyZXN1bHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0LmV4ZWN1dGUobG9jYXRpb24uZmlyc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBjYXNlIFB1dEhpbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICB1
c2VyLT5jaGlsZDIoKSA9IEVkZ2UocmVzdWx0Tm9kZSwgRG91YmxlUmVwVXNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGlu
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXItPmNoaWxkMSgpID0gRWRnZShyZXN1bHRO
b2RlLCBEb3VibGVSZXBVc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwaGkgPSB1c2VyLT5waGkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZGF0
YUxvZ0xuKCJIYW5kbGluZyB1cHNpbG9uICIsIHVzZXIsICIgZm9yIHBoaSAiLCBwaGkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW4uY29udGFpbnMocGhpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChO
b2RlKiB1cHNpbG9uIDogcGhpQ2hpbGRyZW4udXBzaWxvbnNPZihwaGkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy9kYXRhTG9nTG4oIiAgIHVwc2lsb24gIiwgdXBzaWxvbik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmdWYWx1ZSA9IHVwc2lsb24t
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBuZXdD
aGlsZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5jb21pbmdWYWx1ZS0+b3Ao
KSA9PSBKU0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSBudW1iZXIgPSBpbmNvbWluZ1ZhbHVlLT5hc0pTVmFsdWUoKS5hc051bWJlcigpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGxvY2F0aW9uID0gYmxvY2tBbmRJbmRleChj
YW5kaWRhdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZCA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KGxvY2F0aW9uLnNlY29uZCwgY2FuZGlkYXRlLT5v
cmlnaW4sIGpzRG91YmxlTnVtYmVyKG51bWJlciksIERvdWJsZUNvbnN0YW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShsb2NhdGlvbi5m
aXJzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmNvbWluZ1Zh
bHVlLT5vcCgpID09IFZhbHVlUmVwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIE9PUFM6IE5vdCBmdWxseSBzb3VuZCBiZWNhdXNlIFBOYU4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5jb21pbmdWYWx1ZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IERvdWJsZVJlcFVzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0NoaWxkID0gaW5jb21pbmdWYWx1ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXBzaWxvbi0+Y2hpbGQxKCkgPSBFZGdlKG5ld0NoaWxkLCBEb3VibGVSZXBVc2UpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBwaGktPnNl
dFJlc3VsdChOb2RlUmVzdWx0RG91YmxlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgc2Vl
bi5hZGQocGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKHBo
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL2ZvciAoYXV0byYgcGFpciA6IHVzZXJzT2Yp
IHsKKyAgICAgICAgLy8gICAgZGF0YUxvZygiQCIsIHBhaXIua2V5LT5pbmRleCgpLCAiIC4uLiAi
KTsKKyAgICAgICAgLy8gICAgZm9yIChOb2RlKiB1c2VyIDogcGFpci52YWx1ZSkKKyAgICAgICAg
Ly8gICAgICAgIGRhdGFMb2coIkAiLCB1c2VyLT5pbmRleCgpLCAiICIpOworICAgICAgICAvLyAg
ICBkYXRhTG9nTG4oKTsKKyAgICAgICAgLy99CisgICAgICAgIC8vbV9ncmFwaC5kdW1wKCk7CisK
KworICAgICAgICBhdXRvIGVuZCA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICBib29s
IHByaW50ID0gZmFsc2U7CisgICAgICAgIGlmIChwcmludCkKKyAgICAgICAgICAgIGRhdGFMb2dM
bigiVG9vayAiLCAoZW5kIC0gc3RhcnQpLm1pbGxpc2Vjb25kcygpKTsKKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9Owor
ICAgIAorYm9vbCBwZXJmb3JtVmFsdWVSZXBSZWR1Y3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAg
IHJldHVybiBydW5QaGFzZTxWYWx1ZVJlcFJlZHVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVwUmVk
dWN0aW9uUGhhc2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFBlcmZvcm1zIHNpbXBsaWZpY2F0aW9ucyB0
aGF0IGRvbid0IGRlcGVuZCBvbiBDRkEgb3IgQ1NFIGJ1dCB0aGF0IHNob3VsZCBiZQorLy8gZml4
cG9pbnRlZCB3aXRoIENGQSBhbmQgQ1NFLgorCitib29sIHBlcmZvcm1WYWx1ZVJlcFJlZHVjdGlv
bihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHJldmlzaW9uIDI0MzQ3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksOCBAQAog
I2luY2x1ZGUgPHd0Zi9SZWN1cnNhYmxlTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFVub3Jk
ZXJlZFNldC5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKICN1bmRl
ZiBSRUxFQVNFX0FTU0VSVAogI2RlZmluZSBSRUxFQVNFX0FTU0VSVChhc3NlcnRpb24pIGRvIHsg
XAogICAgIGlmICghKGFzc2VydGlvbikpIHsgXApAQCAtMTYxNiw2ICsxNjE4LDI1IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
CiAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvKgorICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT5pbmZlcnJlZE5hbWUoKSA9
PSAiaW50ZXJzZWN0IikgeworICAgICAgICAgICAgICAgIHN0YXRpYyBIYXNoTWFwPHVuc2lnbmVk
LCB1bnNpZ25lZD4qIG1hcDsKKyAgICAgICAgICAgICAgICBpZiAoIW1hcCkKKyAgICAgICAgICAg
ICAgICAgICAgbWFwID0gbmV3IEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPigpOworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGtleSA9IG1fbm9kZS0+aW5kZXgoKTsKKyAgICAgICAgICAgICAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwor
ICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7Cisg
ICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgICAgICAgICBqaXQucHJvYmUoWz1dIChQcm9iZTo6Q29udGV4dCYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gKyttYXAtPmFkZChrZXksIDApLml0ZXJhdG9y
LT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiVmFsdWUgcmVwOiBA
Iiwga2V5LCAiID0gIiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICovCisKICAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2sobV9ub2RlLT5j
aGlsZDEoKSwgflNwZWNEb3VibGVJbXB1cmVOYU4pKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyNDM0NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw2ICsyODMs
NyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihib29s
LCB1c2VNb3ZIaW50UmVtb3ZhbCwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCB1c2VQdXRTdGFja1NpbmtpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgdXNlT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoYm9vbCwgdXNlVmFsdWVSZXBFbGltaW5hdGlvbiwgdHJ1ZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihib29sLCB1c2VBcml0eUZpeHVwSW5saW5pbmcsIHRydWUsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgbG9nRXhlY3V0YWJsZUFsbG9jYXRpb24sIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366145</attachid>
            <date>2019-03-27 20:23:28 -0700</date>
            <delta_ts>2019-03-28 13:35:24 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>23441</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkocmV2aXNpb24gMjQzNTU4KQorKysg
UGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzks
OCArMzksMTEgQEAgaWYgKHR5cGVvZiBydW5Nb2RlICE9PSAidW5kZWZpbmVkIiAmJiBydQogZWxz
ZQogICAgIFJBTWlmaWNhdGlvbiA9IGZhbHNlOwogCisvL3Rlc3RMaXN0ID0gWyJ0eXBlc2NyaXB0
IiwgInRhZ2Nsb3VkLVNQIiwgInN0YW5mb3JkLWNyeXB0by1zaGEyNTYiLCAic3RhbmZvcmQtY3J5
cHRvLXBia2RmMiIsICJzdGFuZm9yZC1jcnlwdG8tYWVzIiwgInJheXRyYWNlIiwgInBkZmpzIiwg
Im5hdmllci1zdG9rZXMiLCAibi1ib2R5LVNQIiwgIk1MIiwgIm1hbmRyZWVsIiwgImdiZW11Iiwg
ImdhdXNzaWFuLWJsdXIiLCAiZmxvYXQtbW0uYyIsICJjcnlwdG8tYWVzLVNQIiwgImNkanMiLCAi
Qm94MkQiLCAiQmFzaWMiLCAiYmFzZTY0LVNQIiwgImFzeW5jLWZzIiwgIjNkLXJheXRyYWNlLVNQ
IiwgIjNkLWN1YmUtU1AiXQorCiBsb2FkKCIuL0pldFN0cmVhbURyaXZlci5qcyIpOwogCisKIGFz
eW5jIGZ1bmN0aW9uIHJ1bkpldFN0cmVhbSgpIHsKICAgICB0cnkgewogICAgICAgICBhd2FpdCBK
ZXRTdHJlYW0uaW5pdGlhbGl6ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAko
cmV2aXNpb24gMjQzNTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC00MTYsNiArNDE2LDcgQEAgZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwCiBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKIGRmZy9ERkdVc2VLaW5kLmNw
cAogZGZnL0RGR1ZhbGlkYXRlLmNwcAorZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuY3Bw
CiBkZmcvREZHVmFsdWVTb3VyY2UuY3BwCiBkZmcvREZHVmFsdWVTdHJlbmd0aC5jcHAKIGRmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDI0MzU1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04ODMs
NiArODgzLDcgQEAKIAkJNTJCMzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQjMx
MTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzExMDAxOTc1QjQ2NzAwODA4NTdD
IC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjEx
RDFBQTUxRTFCMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkM1NTU2NjIyNEMyQUVBMDA5OUY1Q0MgLyog
REZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJDNTU1NjUyMjRDMkFFNzAwOTlGNUNDIC8qIERGR1ZhbHVlUmVw
UmVkdWN0aW9uUGhhc2UuaCAqLzsgfTsKIAkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5
cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQ0QwRjVEMjI0MkY1Njkw
MDRBMThBNSAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEph
dmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgKi87IH07CkBAIC0zMzg5LDYgKzMzOTAsOCBAQAogCQk1MkIzMTEwMDE5NzVC
NDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUxv
Y2F0aW9uQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNzE3QjQxQTA1
OTdFMTAwN0FGNEYzIC8qIENvbnRyb2xGbG93UHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29udHJvbEZsb3dQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdW50aW1lVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkM1NTU2NDIyNEMyQUU3MDA5OUY1Q0MgLyogREZH
VmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYWx1ZVJl
cFJlZHVjdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJDNTU1NjUyMjRDMkFFNzAwOTlG
NUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFs
dWVSZXBSZWR1Y3Rpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlC
Mzg2IC8qIFR5cGVQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5
cGVQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkNEMEY2NDIyNDJGNTY5MDA0QTE4QTUgLyogdGVz
dGRmZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVz
dGRmZzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTc2NTEsNiArNzY1
NCw4IEBACiAJCQkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLywK
IAkJCQkwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovLAogCQkJ
CTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovLAorCQkJCTUyQzU1
NTY0MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmNwcCAqLywK
KwkJCQk1MkM1NTU2NTIyNEMyQUU3MDA5OUY1Q0MgLyogREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFz
ZS5oICovLAogCQkJCTBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5j
cHAgKi8sCiAJCQkJMEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmgg
Ki8sCiAJCQkJMEYwMTIzMzAxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGguY3Bw
ICovLApAQCAtOTM3OSw2ICs5Mzg0LDcgQEAKIAkJCQlEOTcyMjc1MkRDNTQ0NTlCOTEyNUI1Mzkg
LyogSlNNb2R1bGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzIwMUJEQTA4RUYw
MDMzMUI4NCAvKiBKU01vZHVsZUxvYWRlci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMThD
QkMxMUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAv
KiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMUQxQjkwMTNDMzAw
MzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOEQ5
OTlDMjIxQjc4QkIwMEQ1MDQ3NCAvKiBKU05vbkRlc3RydWN0aWJsZVByb3h5LmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24g
MjQzNTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUgIkRGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuaCIKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZH
VmFsaWRhdGUuaCIKKyNpbmNsdWRlICJERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuaCIKQEAgLTQyMyw2ICs0MjQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxh
bjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VPYmplY3RBbGxvY2F0aW9u
U2lua2luZygpKSB7CiAgICAgICAgICAgICBSVU5fUEhBU0UocGVyZm9ybUNyaXRpY2FsRWRnZUJy
ZWFraW5nKTsKICAgICAgICAgICAgIFJVTl9QSEFTRShwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmcpOworICAgICAgICAgICAgUlVOX1BIQVNFKHBlcmZvcm1WYWx1ZVJlcFJlZHVjdGlvbik7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgICAgIC8vIFN0YXRl
LWF0LXRhaWwgYW5kIHN0YXRlLWF0LWhlYWQgd2lsbCBiZSBpbnZhbGlkIGlmIHdlIGRpZCBzdHJl
bmd0aCByZWR1Y3Rpb24gc2luY2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjQzNTU4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUobV9ibG9jayk7CiAgICAg
ICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1fY2hhbmdlZDsKICAgICB9CiAKIHBy
aXZhdGU6CisKICAgICB2b2lkIGhhbmRsZU5vZGUoKQogICAgIHsKICAgICAgICAgc3dpdGNoICht
X25vZGUtPm9wKCkpIHsKQEAgLTQzNyw2ICs0MzgsMzkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgCisgICAgICAgIGNhc2UgRG91
YmxlUmVwOiB7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKG1fbm9kZS0+
Y2hpbGQxKCktPm9wKCkgIT0gVmFsdWVSZXApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAvLyBGSVhNRTogSWYgd2UgYWRkZWQgYSBQdXJpZnlOYU4gbm9kZSwgd2UgY291bGQg
anVzdCBjb252ZXJ0IHRvIGJlaW5nIElkZW50aXR5KFB1cmlmeU5hTihyZXN1bHROb2RlKSkKKyAg
ICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBSZWFsTnVtYmVyVXNl
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBOb2RlKiB2YWx1ZVJlcCA9
IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgaWYgKHZhbHVlUmVwLT5jaGls
ZDEoKS51c2VLaW5kKCkgIT0gRG91YmxlUmVwVXNlKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlID0gdmFsdWVSZXAtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgbV9ub2RlSW5kZXgsIFNwZWNOb25lLCBDaGVjaywgbV9ub2RlLT5vcmlnaW4sCisgICAgICAg
ICAgICAgICAgRWRnZShyZXN1bHROb2RlLCBEb3VibGVSZXBSZWFsVXNlKSk7CisgICAgICAgICAg
ICBtX25vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24ocmVzdWx0Tm9kZSk7CisgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1f
bm9kZS0+Y2hpbGQxKCktPm9wKCkgIT0gVmFsdWVSZXApCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+Y2hpbGQxKCkudXNlS2luZCgpICE9
IERvdWJsZVJlcFVzZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1fbm9k
ZS0+Y2hpbGQxKCkgPSBFZGdlKG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpLm5vZGUoKSwgRG91
YmxlUmVwVXNlKTsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdXaXRoVmFsaWRS
YWRpeENvbnN0YW50OiB7CiAgICAgICAgICAgICBFZGdlJiBjaGlsZDEgPSBtX25vZGUtPmNoaWxk
MSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlcFJlZHVjdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bHVlUmVwUmVkdWN0aW9uUGhhc2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1ZhbHVlUmVwUmVkdWN0
aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgor
I2luY2x1ZGUgIkRGR1BoaUNoaWxkcmVuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorcHVibGljOgorICAg
IFZhbHVlUmVwUmVkdWN0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdy
YXBoLCAiVmFsdWVSZXAgcmVkdWN0aW9uIikKKyAgICAgICAgLCBtX2luc2VydGlvblNldChncmFw
aCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICByZXR1cm4gY29udmVydFZhbHVl
UmVwc1RvRG91YmxlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgY29udmVydFZhbHVl
UmVwc1RvRG91YmxlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlVmFsdWVSZXBF
bGltaW5hdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8g
c3RhcnQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKworICAgICAgICBIYXNoU2V0PE5vZGUqPiBj
YW5kaWRhdGVzOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9j
a3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxv
Y2spIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZVJlcCAmJiBub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKQorICAgICAgICAgICAgICAgICAg
ICBjYW5kaWRhdGVzLmFkZChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghY2FuZGlkYXRlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgSGFzaE1hcDxOb2RlKiwgVmVjdG9yPE5vZGUqPj4gdXNlcnNPZjsKKyAgICAgICAg
YXV0byBnZXRVc2Vyc09mID0gWyZdIChOb2RlKiBjYW5kaWRhdGUpIHsKKyAgICAgICAgICAgIGF1
dG8gaXRlciA9IHVzZXJzT2YuZmluZChjYW5kaWRhdGUpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXRlciAhPSB1c2Vyc09mLmVuZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT52
YWx1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9n
cmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5v
ZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkgfHwg
KG5vZGUtPm9wKCkgPT0gVmFsdWVSZXAgJiYgY2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkpCisg
ICAgICAgICAgICAgICAgICAgIHVzZXJzT2YuYWRkKG5vZGUsIFZlY3RvcjxOb2RlKj4oKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+IGFscmVh
ZHlBZGRlZDsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbihub2RlLCBbJl0g
KEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSB1c2Vyc09mLmZp
bmQoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSB1c2Vyc09m
LmVuZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICBpZiAoYWxyZWFkeUFkZGVkLmNvbnRhaW5zKGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBw
ZW5kKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5QWRkZWQuYXBwZW5kKGVkZ2Uu
bm9kZSgpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gZHVtcEVzY2FwZSA9IFsmXSAoY29uc3QgY2hhciogZGVzY3JpcHRpb24s
IE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAgIGRhdGFMb2coZGVzY3JpcHRpb24pOworICAgICAg
ICAgICAgbV9ncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiIsIG5vZGUpOworICAgICAgICAg
ICAgZGF0YUxvZ0xuKCk7CisgICAgICAgIH07CisKKyAgICAgICAgUGhpQ2hpbGRyZW4gcGhpQ2hp
bGRyZW4obV9ncmFwaCk7CisKKyAgICAgICAgSGFzaFNldDxOb2RlKj4gZWxpZ2libGVQaGlzOwor
ICAgICAgICBIYXNoU2V0PE5vZGUqPiBiYWRQaGlzOworICAgICAgICBmb3IgKE5vZGUqIGNhbmRp
ZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogdXNlciA6IGdldFVz
ZXJzT2YoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgICAgIGlmICh1c2VyLT5vcCgpICE9IFVw
c2lsb24pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAg
Ly9Ob2RlKiBwaGkgPSB1c2VyLT5waGkoKTsKKyAgICAgICAgICAgICAgICAvL2lmICghZWxpZ2li
bGVQaGlzLmFkZChwaGkpLmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgLy8gICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBzZWVuOworICAgICAgICAgICAg
ICAgIFZlY3RvcjxOb2RlKj4gd29ya2xpc3Q7CisgICAgICAgICAgICAgICAgc2Vlbi5hZGQodXNl
ci0+cGhpKCkpOworICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZCh1c2VyLT5waGkoKSk7
CisgICAgICAgICAgICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBo
aSA9IHdvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIGVsaWdpYmxlUGhp
cy5hZGQocGhpKTsKKyAgICAgICAgICAgICAgICAgICAgcGhpQ2hpbGRyZW4uZm9yQWxsSW5jb21p
bmdWYWx1ZXMocGhpLCBbJl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzZWVuLmFkZChub2RlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBKU0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFub2RlLT5hc0pTVmFsdWUoKS5pc051bWJlcigpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGR1bXBFc2NhcGUoIlVwc2lsb24gZXNjYXBlIGZyb20gaW5jb21pbmcgcGhpIHZh
bHVlOiAiLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gVmFsdWVSZXApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IERv
dWJsZVJlcFVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEVzY2FwZSgi
VXBzaWxvbiBlc2NhcGUgZnJvbSBpbmNvbWluZyBwaGkgdmFsdWU6ICIsIG5vZGUpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2sgJj0gbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IERvdWJsZVJlcFVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHVtcEVzY2FwZSgiVXBzaWxvbiBlc2NhcGUgZnJvbSBpbmNv
bWluZyBwaGkgdmFsdWU6ICIsIG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9r
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYmFkUGhpcy5hZGQocGhpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBiYWRQaGlzKQorICAgICAgICAg
ICAgZWxpZ2libGVQaGlzLnJlbW92ZShub2RlKTsKKworICAgICAgICBmb3IgKE5vZGUqIHBoaSA6
IGVsaWdpYmxlUGhpcykKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMuYWRkKHBoaSk7CisKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gdG9SZW1vdmU7CisKKyAgICAgICAg
ICAgIGF1dG8gaXNFc2NhcGVkID0gWyZdIChOb2RlKiBub2RlKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICFjYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpIHx8IHRvUmVtb3ZlLmNvbnRhaW5zKG5v
ZGUpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgZm9yIChOb2RlKiBjYW5kaWRhdGUg
OiBjYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJPcHRpbWl6ZWQ6ICIs
IGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAgICAgICAg
ICAgICAgZm9yIChOb2RlKiB1c2VyIDogZ2V0VXNlcnNPZihjYW5kaWRhdGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCAodXNlci0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIERvdWJsZVJlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLT5jaGlsZDEo
KS51c2VLaW5kKCkgIT0gUmVhbE51bWJlclVzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEVzY2FwZSgi
RG91YmxlUmVwIGVzY2FwZTogIiwgdXNlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNl
IFB1dEhpbnQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjog
eworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gdXNlci0+cGhpKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNFc2NhcGVkKHBoaSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkdW1wRXNjYXBlKCJVcHNpbG9uLT5QaGkgaXMgZXNjYXBlZCwgUGhpOiIs
IHBoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgcGhpQ2hpbGRyZW4uZm9yQWxsSW5jb21pbmdWYWx1ZXMo
cGhpLCBbJl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSAhPSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBKU0NvbnN0YW50IHx8IG5vZGUtPm9wKCkgPT0gVmFs
dWVSZXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
c0VzY2FwZWQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEVz
Y2FwZSgiSW5jb21pbmcgUGhpIGlzIGVzY2FwZWQ6ICIsIG5vZGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIW9rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBkdW1wRXNjYXBl
KCJOb3JtYWwgZXNjYXBlOiAiLCB1c2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9rID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghb2spCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW9r
KQorICAgICAgICAgICAgICAgICAgICB0b1JlbW92ZS5hZGQoY2FuZGlkYXRlKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHRvUmVtb3ZlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogdG9SZW1vdmUpCisg
ICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5yZW1vdmUobm9kZSk7CisKKyAgICAgICAgfSB3aGls
ZSAodHJ1ZSk7CisKKyAgICAgICAgaWYgKCFjYW5kaWRhdGVzLnNpemUoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIGJsb2NrQW5kSW5kZXggPSBbJl0gKE5vZGUq
IG5vZGUpIC0+IHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgdW5zaWduZWQ+IHsKKyAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+YXQoaSkgPT0gbm9kZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihibG9jaywgaSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihu
dWxscHRyLCAwKTsKKyAgICAgICAgfTsKKworICAgICAgICBIYXNoU2V0PE5vZGUqPiBoYW5kbGVk
UGhpczsKKyAgICAgICAgZm9yIChOb2RlKiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7CisgICAg
ICAgICAgICBOb2RlKiByZXN1bHROb2RlOworICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3Ao
KSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHROb2RlID0gY2FuZGlkYXRlOworCisg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiB1cHNpbG9uIDogcGhpQ2hpbGRyZW4udXBzaWxvbnNP
ZihjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nVmFsdWUg
PSB1cHNpbG9uLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5l
d0NoaWxkOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5jb21pbmdWYWx1ZS0+b3AoKSA9PSBK
U0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbnVtYmVyID0gaW5j
b21pbmdWYWx1ZS0+YXNKU1ZhbHVlKCkuYXNOdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gbG9jYXRpb24gPSBibG9ja0FuZEluZGV4KHVwc2lsb24pOworICAgICAgICAgICAg
ICAgICAgICAgICAgbmV3Q2hpbGQgPSBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudChsb2Nh
dGlvbi5zZWNvbmQsIGNhbmRpZGF0ZS0+b3JpZ2luLCBqc0RvdWJsZU51bWJlcihudW1iZXIpLCBE
b3VibGVDb25zdGFudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5l
eGVjdXRlKGxvY2F0aW9uLmZpcnN0KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChp
bmNvbWluZ1ZhbHVlLT5vcCgpID09IFZhbHVlUmVwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBPT1BTOiBOb3QgZnVsbHkgc291bmQgYmVjYXVzZSBQTmFOCisgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpbmNvbWluZ1ZhbHVlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gRG91YmxlUmVwVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkID0gaW5j
b21pbmdWYWx1ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGluY29taW5nVmFsdWUtPm9wKCkgPT0gUGhpKQorICAgICAgICAgICAgICAgICAgICAgICAg
bmV3Q2hpbGQgPSBpbmNvbWluZ1ZhbHVlOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAg
ICAgICAgICAgICAgICAgIHVwc2lsb24tPmNoaWxkMSgpID0gRWRnZShuZXdDaGlsZCwgRG91Ymxl
UmVwVXNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGUt
PnNldFJlc3VsdChOb2RlUmVzdWx0RG91YmxlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2Fu
ZGlkYXRlLT5vcCgpID09IFZhbHVlUmVwKQorICAgICAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBj
YW5kaWRhdGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICBmb3IgKE5v
ZGUqIHVzZXIgOiBnZXRVc2Vyc09mKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKHVzZXItPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcDogeworICAg
ICAgICAgICAgICAgICAgICAvL1JFTEVBU0VfQVNTRVJUKHVzZXItPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBSZWFsTnVtYmVyVXNlKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvY2F0aW9u
ID0gYmxvY2tBbmRJbmRleCh1c2VyKTsKKworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uc2Vjb25k
LCBTcGVjTm9uZSwgQ2hlY2ssIHVzZXItPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IEVkZ2UocmVzdWx0Tm9kZSwgRG91YmxlUmVwUmVhbFVzZSkpOworICAgICAgICAgICAgICAgICAg
ICB1c2VyLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdE5vZGUpOworICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGxvY2F0aW9uLmZpcnN0KTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIFB1dEhpbnQ6CisgICAgICAgICAgICAgICAgICAgIHVzZXIt
PmNoaWxkMigpID0gRWRnZShyZXN1bHROb2RlLCBEb3VibGVSZXBVc2UpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAg
ICAgICAgICAgICAgdXNlci0+Y2hpbGQxKCkgPSBFZGdlKHJlc3VsdE5vZGUsIERvdWJsZVJlcFVz
ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBV
cHNpbG9uOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IHVzZXItPnBoaSgpOwor
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYW5kaWRhdGVzLmNvbnRhaW5zKHBo
aSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL2ZvciAoYXV0byYg
cGFpciA6IHVzZXJzT2YpIHsKKyAgICAgICAgLy8gICAgZGF0YUxvZygiQCIsIHBhaXIua2V5LT5p
bmRleCgpLCAiIC4uLiAiKTsKKyAgICAgICAgLy8gICAgZm9yIChOb2RlKiB1c2VyIDogcGFpci52
YWx1ZSkKKyAgICAgICAgLy8gICAgICAgIGRhdGFMb2coIkAiLCB1c2VyLT5pbmRleCgpLCAiICIp
OworICAgICAgICAvLyAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAgLy99CisgICAgICAgIC8vbV9n
cmFwaC5kdW1wKCk7CisKKworICAgICAgICBhdXRvIGVuZCA9IE1vbm90b25pY1RpbWU6Om5vdygp
OworICAgICAgICBib29sIHByaW50ID0gZmFsc2U7CisgICAgICAgIGlmIChwcmludCkKKyAgICAg
ICAgICAgIGRhdGFMb2dMbigiVG9vayAiLCAoZW5kIC0gc3RhcnQpLm1pbGxpc2Vjb25kcygpKTsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNl
cnRpb25TZXQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtVmFsdWVSZXBSZWR1Y3Rpb24oR3JhcGgm
IGdyYXBoKQoreworICAgIHJldHVybiBydW5QaGFzZTxWYWx1ZVJlcFJlZHVjdGlvblBoYXNlPihn
cmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVw
UmVkdWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFRyaWVzIHRvIGVs
aW1pbmF0ZSBEb3VibGVSZXAoVmFsdWVSZXApIHJvdW5kdHJpcHMuCisKK2Jvb2wgcGVyZm9ybVZh
bHVlUmVwUmVkdWN0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjQzNTU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsNiArMjgzLDcgQEAgY29u
c3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoYm9vbCwgdXNlTW92
SGludFJlbW92YWwsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlUHV0
U3RhY2tTaW5raW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZU9i
amVjdEFsbG9jYXRpb25TaW5raW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJv
b2wsIHVzZVZhbHVlUmVwRWxpbWluYXRpb24sIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoYm9vbCwgdXNlQXJpdHlGaXh1cElubGluaW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIGxvZ0V4ZWN1dGFibGVBbGxvY2F0aW9uLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366199</attachid>
            <date>2019-03-28 13:35:24 -0700</date>
            <delta_ts>2019-03-28 15:09:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>27674</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDM2MTkpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE5LTAzLTI4ICBT
YWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIFZhbHVlUmVw
UmVkdWN0aW9uIHBoYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTYyMzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIEpldFN0cmVhbTIvY2xpLmpzOgorCiAyMDE5LTAzLTI3ICBSeWFuIEhhZGRhZCAg
PHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNDI5MTE/KTog
SGlnaCBTaWVycmEgUmVsZWFzZSBXSzIgUGVyZiBib3QgdGltaW5nIG91dCB3aGlsZSBydW5uaW5n
IEluZGV4ZWREQi9sYXJnZS1udW1iZXItb2YtaW5zZXJ0cy5odG1sCkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvY2xpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtMi9jbGkuanMJKHJldmlzaW9uIDI0MzQ3NCkKKysrIFBlcmZvcm1hbmNlVGVzdHMv
SmV0U3RyZWFtMi9jbGkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDExIEBAIGlmICh0
eXBlb2YgcnVuTW9kZSAhPT0gInVuZGVmaW5lZCIgJiYgcnUKIGVsc2UKICAgICBSQU1pZmljYXRp
b24gPSBmYWxzZTsKIAorLy90ZXN0TGlzdCA9IFsidHlwZXNjcmlwdCIsICJ0YWdjbG91ZC1TUCIs
ICJzdGFuZm9yZC1jcnlwdG8tc2hhMjU2IiwgInN0YW5mb3JkLWNyeXB0by1wYmtkZjIiLCAic3Rh
bmZvcmQtY3J5cHRvLWFlcyIsICJyYXl0cmFjZSIsICJwZGZqcyIsICJuYXZpZXItc3Rva2VzIiwg
Im4tYm9keS1TUCIsICJNTCIsICJtYW5kcmVlbCIsICJnYmVtdSIsICJnYXVzc2lhbi1ibHVyIiwg
ImZsb2F0LW1tLmMiLCAiY3J5cHRvLWFlcy1TUCIsICJjZGpzIiwgIkJveDJEIiwgIkJhc2ljIiwg
ImJhc2U2NC1TUCIsICJhc3luYy1mcyIsICIzZC1yYXl0cmFjZS1TUCIsICIzZC1jdWJlLVNQIl0K
KwogbG9hZCgiLi9KZXRTdHJlYW1Ecml2ZXIuanMiKTsKIAorCiBhc3luYyBmdW5jdGlvbiBydW5K
ZXRTdHJlYW0oKSB7CiAgICAgdHJ5IHsKICAgICAgICAgYXdhaXQgSmV0U3RyZWFtLmluaXRpYWxp
emUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQzNDc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDU3IEBACisyMDE5LTAzLTI4ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisg
ICAgICAgIEFkZCBhIFZhbHVlUmVwUmVkdWN0aW9uIHBoYXNlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTYyMzQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBWYWx1ZVJlcFJl
ZHVjdGlvbiBwaGFzZS4gVGhlIG1haW4gaWRlYSBoZXJlIGlzCisgICAgICAgIHRvIHRyeSB0byBy
ZWR1Y2UgRG91YmxlUmVwKFJlYWxOdW1iZXJVc2U6VmFsdWVSZXAoRG91YmxlUmVwVXNlOkB4KSkK
KyAgICAgICAgdG8ganVzdCBiZSBAeC4gVGhpcyBwYXRjaCBoYW5kbGVzIHN1Y2ggYWJvdmUgc3Ry
ZW5naCByZWR1Y3Rpb24gcnVsZXMKKyAgICAgICAgYXMgbG9uZyBhcyB3ZSBwcm92ZSB0aGF0IGFs
bCB1c2VycyBvZiB0aGUgVmFsdWVSZXAgY2FuIGJlIGNvbnZlcnRlZAorICAgICAgICB0byB1c2lu
ZyB0aGUgaW5jb21pbmcgZG91YmxlIHZhbHVlLiBUaGF0IHdheSB3ZSBwcmV2ZW50IGludHJvZHVj
aW5nCisgICAgICAgIGEgcGFyYWxsZWwgbGl2ZSByYW5nZSBmb3IgdGhlIGRvdWJsZSB2YWx1ZS4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggdHJhY2tzIHRoZSB1c2VzIG9mIHRoZSBWYWx1
ZVJlcCB0aHJvdWdoIFBoaSB2YXJpYWJsZXMsCisgICAgICAgIHNvIHdlIGNhbiBjb252ZXJ0IGVu
dGlyZSBQaGkgdmFyaWFibGVzIHRvIGJlaW5nIERvdWJsZSBpbnN0ZWFkCisgICAgICAgIG9mIEpT
VmFsdWUgaWYgdGhlIFBoaSBhbHNvIGhhcyBvbmx5IGRvdWJsZSB1c2VzLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIGEgc2ltcGxlIGVzY2FwZSBhbmFseXNp
cy4gRG91YmxlUmVwKFJlYWxOdW1iZXJVc2U6KQorICAgICAgICBhbmQgT1NSIGV4aXQgaGludHMg
YXJlIG5vdCBjb3VudGVkIGFzIGVzY2FwZXMuIEFsbCBvdGhlciB1c2VzIGFyZSBjb3VudGVkCisg
ICAgICAgIGFzIGVzY2FwZXMuIENvbm5lY3RlZCBQaGkgZ3JhcGhzIGFyZSBjb252ZXJ0ZWQgdG8g
YmVpbmcgRG91YmxlIG9ubHkgaWYgdGhlCisgICAgICAgIGVudGlyZSBncmFwaCBpcyBvayB3aXRo
IHRoZSByZXN1bHQgYmVpbmcgRG91YmxlLgorICAgICAgICAKKyAgICAgICAgU29tZSB3YXlzIHdl
IGNvdWxkIGV4dGVuZCB0aGlzIHBoYXNlIGluIHRoZSBmdXR1cmU6CisgICAgICAgIC0gVGhlcmUg
YXJlIGEgbG90IG9mIERvdWJsZVJlcChOdW1iZXJVc2U6QFZhbHVlUmVwKEB4KSkgdXNlcy4gVGhp
cyBlbnN1cmVzCisgICAgICAgICAgdGhhdCB0aGUgcmVzdWx0IG9mIHRoZSBEb3VibGVSZXAgb2Yg
QHggaXMgbm90IGltcHVyZSBOYU4uIFdlIGNvdWxkCisgICAgICAgICAgaGFuZGxlIHRoaXMgY2Fz
ZSBpZiB3ZSBpbnRyb2R1Y2VkIGEgUHVyaWZ5TmFOIG5vZGUgYW5kIHJlcGxhY2UgdGhlIERvdWJs
ZVJlcAorICAgICAgICAgIHdpdGggUHVyaWZ5TmFOKEB4KS4gQWx0ZXJuYXRpdmVseSwgd2UgY291
bGQgc2VlIGlmIGNlcnRhaW4gdXNlcnMgb2YgdGhpcworICAgICAgICAgIERvdWJsZVJlcCBhcmUg
b2theSB3aXRoIGltcHVyZSBOYU4gZmxvd2luZyBpbnRvIHRoZW0gYW5kIHdlJ2QgbmVlZCB0byBl
bnN1cmUKKyAgICAgICAgICB0aGVpciBvdXRwdXQgdHlwZSBpcyBhbHdheXMgdHJlYXRlZCBhcyBp
ZiB0aGUgaW5wdXQgaXMgaW1wdXJlIE5hTi4KKyAgICAgICAgLSBXZSBjb3VsZCBkbyBzaW5raW5n
IG9mIFZhbHVlUmVwIHdoZXJlIHdlIHRoaW5rIGl0J3MgcHJvZml0YWJsZS4gU28gaW5zdGVhZAor
ICAgICAgICAgIG9mIGFuIGVzY2FwZSBtYWtpbmcgaXQgc28gd2UgbmV2ZXIgcmVwcmVzZW50IHRo
ZSB2YXJpYWJsZSBhcyBhIERvdWJsZSwgd2UKKyAgICAgICAgICBjb3VsZCBtYWtlIHRoZSBlc2Nh
cGUgcmVjb25zdHJ1Y3QgdGhlIEpTVmFsdWVSZXAgd2hlcmUgcHJvZml0YWJsZS4KKyAgICAgICAg
LSBXZSBjYW4gZXh0ZW5kIHRoaXMgcGhhc2UgdG8gaGFuZGxlIEludDUyUmVwIGlmIGl0J3MgcHJv
Zml0YWJsZS4KKyAgICAgICAgLSBXZSBjYW4gb3B0IG90aGVyIG5vZGVzIGludG8gYWNjZXB0aW5n
IGluY29taW5nIERvdWJsZXMgc28gd2Ugbm8gbG9uZ2VyCisgICAgICAgICAgdHJlYXQgdGhlbSBh
cyBlc2NhcGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBzb21ld2hlcmUgYmV0
d2VlbiBuZXV0cmFsIGFuZCBhIDElIHByb2dyZXNzaW9uIG9uIEpldFN0cmVhbSAyLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1N0cmVu
Z3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3RoUmVkdWN0
aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlcFJlZHVjdGlvblBoYXNlOjpW
YWx1ZVJlcFJlZHVjdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlcFJlZHVj
dGlvblBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVwUmVkdWN0aW9uUGhh
c2U6OmNvbnZlcnRWYWx1ZVJlcHNUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9y
bVZhbHVlUmVwUmVkdWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25Q
aGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxOS0wMy0y
NSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIEhlYXA6Omlz
TWFya2VkIGFuZCBmcmllbmRzIHNob3VsZCBiZSBpbnN0YW5jZSBtZXRob2RzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDM0NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQxNiw2ICs0MTYsNyBAQCBk
ZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKIGRmZy9ERkdVbmlmaWNhdGlvblBoYXNl
LmNwcAogZGZnL0RGR1VzZUtpbmQuY3BwCiBkZmcvREZHVmFsaWRhdGUuY3BwCitkZmcvREZHVmFs
dWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHAKIGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHAKIGRmZy9ERkdW
YWx1ZVN0cmVuZ3RoLmNwcAogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQzNDc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTg4Myw2ICs4ODMsNyBAQAogCQk1MkIzMTBGQjE5NzRBRTYxMDA4
MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlv
bkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkMwNjExRjFBQTUxRTFD
MDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyQzU1
NTY2MjI0QzJBRUEwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM1NTU2NTIyNEMyQUU3
MDA5OUY1Q0MgLyogREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oICovOyB9OwogCQk1MkM5NTJC
NzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlw
ZVByb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTJDRDBGNUQyMjQyRjU2OTAwNEExOEE1IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEw
NUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OwogCQk1MkNEMEY1
RTIyNDJGNTY5MDA0QTE4QTUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29y
a3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAw
NzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKQEAgLTMzODksNiArMzM5
MCw4IEBACiAJCTUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUeXBlTG9jYXRpb25DYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkI3MTdCNDFBMDU5N0UxMDA3QUY0RjMgLyogQ29udHJvbEZsb3dQcm9maWxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250cm9sRmxvd1By
b2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDMDYxMUQxQUE1MUUx
QjAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJ1bnRpbWVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQzU1NTY0
MjI0QzJBRTcwMDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MkM1NTU2NTIyNEMyQUU3MDA5OUY1Q0MgLyogREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmg7IHBhdGggPSBkZmcv
REZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkM5NTJC
ODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFR5cGVQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyQ0QwRjY0
MjI0MkY1NjkwMDRBMThBNSAvKiB0ZXN0ZGZnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0ZGZnOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwpAQCAtNzY1MSw2ICs3NjU0LDggQEAKIAkJCQkwRjM0QjE0ODE2RDQyMDBFMDAxQ0RB
NUEgLyogREZHVXNlS2luZC5oICovLAogCQkJCTBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5jcHAgKi8sCiAJCQkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1Zh
bGlkYXRlLmggKi8sCisJCQkJNTJDNTU1NjQyMjRDMkFFNzAwOTlGNUNDIC8qIERGR1ZhbHVlUmVw
UmVkdWN0aW9uUGhhc2UuY3BwICovLAorCQkJCTUyQzU1NTY1MjI0QzJBRTcwMDk5RjVDQyAvKiBE
RkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4
OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCAqLywKIAkJCQkwRjJCREM0MDE1MjI4MDE3MDBDRDg5
MTAgLyogREZHVmFsdWVTb3VyY2UuaCAqLywKIAkJCQkwRjAxMjMzMDE5NDRFQTFCMDA4NDNBMEMg
LyogREZHVmFsdWVTdHJlbmd0aC5jcHAgKi8sCkBAIC05Mzc5LDYgKzkzODQsNyBAQAogCQkJCUQ5
NzIyNzUyREM1NDQ1OUI5MTI1QjUzOSAvKiBKU01vZHVsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTk2QjczMjAxQkRBMDhFRjAwMzMxQjg0IC8qIEpTTW9kdWxlTG9hZGVyLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMxOENCQzExQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkM1NTU2NjIyNEMyQUVBMDA5OUY1
Q0MgLyogREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5
REE0QTcxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMzNFOEQxRDFCOTAxM0MzMDAzNDZCNTIgLyogSlNOYXRpdmVTdGRGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTM4RDk5OUMyMjFCNzhCQjAwRDUwNDc0IC8qIEpTTm9uRGVzdHJ1
Y3RpYmxlUHJveHkuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyNDM0NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVk
ZSAiREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkRGR1ZhbHVlUmVw
UmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmgi
CiAjaW5jbHVkZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIgpAQCAtNDI0LDYgKzQyNSw4IEBAIFBs
YW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgICAgIFJVTl9Q
SEFTRShwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcpOwogICAgICAgICAgICAgUlVOX1BIQVNF
KHBlcmZvcm1PYmplY3RBbGxvY2F0aW9uU2lua2luZyk7CiAgICAgICAgIH0KKyAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZVZhbHVlUmVwRWxpbWluYXRpb24oKSkKKyAgICAgICAgICAgIFJVTl9QSEFT
RShwZXJmb3JtVmFsdWVSZXBSZWR1Y3Rpb24pOwogICAgICAgICBpZiAoY2hhbmdlZCkgewogICAg
ICAgICAgICAgLy8gU3RhdGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFs
aWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAgLy8gaXQg
bWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5nZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDI0MzQ3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3MCwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2sp
OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBtX2NoYW5nZWQ7CiAgICAg
fQogCiBwcml2YXRlOgorCiAgICAgdm9pZCBoYW5kbGVOb2RlKCkKICAgICB7CiAgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5vcCgpKSB7CkBAIC00MzcsNiArNDM4LDM5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgIAorICAgICAgICBj
YXNlIERvdWJsZVJlcDogeworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICht
X25vZGUtPmNoaWxkMSgpLT5vcCgpICE9IFZhbHVlUmVwKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGFkZGVkIGEgUHVyaWZ5TmFOIG5vZGUsIHdl
IGNvdWxkIGp1c3QgY29udmVydCB0byBiZWluZyBJZGVudGl0eShQdXJpZnlOYU4ocmVzdWx0Tm9k
ZSkpCisgICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgIT0gUmVhbE51
bWJlclVzZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgTm9kZSogdmFs
dWVSZXAgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVJl
cC0+Y2hpbGQxKCkudXNlS2luZCgpICE9IERvdWJsZVJlcFVzZSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgTm9kZSogcmVzdWx0Tm9kZSA9IHZhbHVlUmVwLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgIG1fbm9kZUluZGV4LCBTcGVjTm9uZSwgQ2hlY2ssIG1fbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgIEVkZ2UocmVzdWx0Tm9kZSwgRG91YmxlUmVwUmVhbFVzZSkpOworICAg
ICAgICAgICAgbV9ub2RlLT5jb252ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdE5vZGUpOworICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMSgpLT5vcCgpICE9IFZhbHVlUmVwKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpLnVzZUtp
bmQoKSAhPSBEb3VibGVSZXBVc2UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBtX25vZGUtPmNoaWxkMSgpID0gRWRnZShtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDEoKS5ub2Rl
KCksIERvdWJsZVJlcFVzZSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICBjYXNlIE51bWJlclRvU3RyaW5nV2l0
aFZhbGlkUmFkaXhDb25zdGFudDogewogICAgICAgICAgICAgRWRnZSYgY2hpbGQxID0gbV9ub2Rl
LT5jaGlsZDEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZXBS
ZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdWYWx1ZVJl
cFJlZHVjdGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhh
c2UuaCIKKyNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIFZhbHVlUmVwUmVkdWN0aW9uUGhhc2UgOiBwdWJsaWMgUGhh
c2UgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgCitw
dWJsaWM6CisgICAgVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAg
IDogUGhhc2UoZ3JhcGgsICJWYWx1ZVJlcCByZWR1Y3Rpb24iKQorICAgICAgICAsIG1faW5zZXJ0
aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIHJldHVybiBj
b252ZXJ0VmFsdWVSZXBzVG9Eb3VibGUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBj
b252ZXJ0VmFsdWVSZXBzVG9Eb3VibGUoKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4g
Y2FuZGlkYXRlczsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJs
b2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVmFsdWVSZXAgJiYgbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkKKyAgICAgICAgICAgICAgICAg
ICAgY2FuZGlkYXRlcy5hZGQobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWNhbmRpZGF0ZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIFZlY3RvcjxOb2RlKj4+IHVzZXJzT2Y7CisgICAgICAg
IGF1dG8gZ2V0VXNlcnNPZiA9IFsmXSAoTm9kZSogY2FuZGlkYXRlKSB7CisgICAgICAgICAgICBh
dXRvIGl0ZXIgPSB1c2Vyc09mLmZpbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGl0ZXIgIT0gdXNlcnNPZi5lbmQoKSk7CisgICAgICAgICAgICByZXR1cm4gaXRlci0+
dmFsdWU7CisgICAgICAgIH07CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUg
OiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkgfHwgKG5v
ZGUtPm9wKCkgPT0gVmFsdWVSZXAgJiYgY2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkpCisgICAg
ICAgICAgICAgICAgICAgIHVzZXJzT2YuYWRkKG5vZGUsIFZlY3RvcjxOb2RlKj4oKSk7CisKKyAg
ICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSosIDM+IGFscmVhZHlBZGRlZDsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbihub2RlLCBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBlZGdlLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGFscmVhZHlBZGRlZC5jb250YWlucyhjYW5kaWRhdGUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSB1
c2Vyc09mLmZpbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0g
dXNlcnNPZi5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgaXRlci0+dmFsdWUuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgICAgICAg
ICBhbHJlYWR5QWRkZWQuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBQaGlDaGlsZHJlbiBwaGlDaGlsZHJl
bihtX2dyYXBoKTsKKworICAgICAgICAvLyAtIEFueSBjYW5kaWRhdGUgdGhhdCBmb3J3YXJkcyBp
bnRvIGEgUGhpIHR1cm5zIHRoYXQgUGhpIGludG8gYSBjYW5kaWRhdGUuCisgICAgICAgIC8vIC0g
QW55IFBoaS0xIHRoYXQgZm9yd2FyZHMgaW50byBhbm90aGVyIFBoaS0yLCB3aGVyZSBQaGktMiBp
cyBhIGNhbmRpZGF0ZSwKKyAgICAgICAgLy8gICBtYWtlcyBQaGktMSBhIGNhbmRpZGF0ZSB0b28u
CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGVsaWdpYmxlUGhpczsK
KyAgICAgICAgICAgIGZvciAoTm9kZSogY2FuZGlkYXRlIDogY2FuZGlkYXRlcykgeworICAgICAg
ICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHBoaUNoaWxkcmVuLmZvckFsbEluY29taW5nVmFsdWVzKGNhbmRpZGF0ZSwgWyZdIChOb2Rl
KiBpbmNvbWluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluY29taW5nLT5vcCgp
ID09IFBoaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlnaWJsZVBoaXMuYWRkKGlu
Y29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiB1c2VyIDogZ2V0VXNlcnNPZihjYW5kaWRhdGUpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLT5vcCgpID09IFVwc2lsb24pCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbGlnaWJsZVBoaXMuYWRkKHVzZXItPnBoaSgpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgc2F3TmV3Q2FuZGlk
YXRlID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKE5vZGUqIHBoaSA6IGVsaWdpYmxlUGhpcykK
KyAgICAgICAgICAgICAgICBzYXdOZXdDYW5kaWRhdGUgfD0gY2FuZGlkYXRlcy5hZGQocGhpKS5p
c05ld0VudHJ5OworCisgICAgICAgICAgICBpZiAoIXNhd05ld0NhbmRpZGF0ZSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CisKKyAgICAgICAgZG8gewor
ICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gdG9SZW1vdmU7CisKKyAgICAgICAgICAgIGF1dG8g
aXNFc2NhcGVkID0gWyZdIChOb2RlKiBub2RlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFj
YW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpIHx8IHRvUmVtb3ZlLmNvbnRhaW5zKG5vZGUpOworICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gRXNjYXBlIHJ1bGVzIGFyZSBhcyBmb2xsb3dz
OgorICAgICAgICAgICAgLy8gLSBBbnkgbm9uLXdlbGwta25vd24gdXNlIGlzIGFuIGVzY2FwZS4g
Q3VycmVudGx5LCB3ZSBhbGxvdyBEb3VibGVSZXAsIEhpbnRzLCBVcHNpbG9ucyAoZGVzY3JpYmVk
IGJlbG93KS4KKyAgICAgICAgICAgIC8vIC0gQW55IFVwc2lsb24gdGhhdCBmb3J3YXJkcyB0aGUg
Y2FuZGlkYXRlIGludG8gYW4gZXNjYXBlZCBwaGkgZXNjYXBlcyB0aGUgY2FuZGlkYXRlLgorICAg
ICAgICAgICAgLy8gLSBBIFBoaSByZW1haW5zIGEgY2FuZGlkYXRlIGFzIGxvbmcgYXMgYWxsIHZh
bHVlcyBmbG93aW5nIGludG8gaXQgY2FuIGJlIG1hZGUgYSBkb3VibGUuCisgICAgICAgICAgICAv
LyAgIEN1cnJlbnRseSwgdGhpcyBtZWFucyB0aGVzZSBhcmUgdmFsaWQgdGhpbmdzIHdlIHN1cHBv
cnQgdG8gZm9yd2FyZCBpbnRvIHRoZSBQaGk6CisgICAgICAgICAgICAvLyAgICAtIEEgSlNDb25z
dGFudChzb21lIG51bWJlciAieCIpID0+IERvdWJsZUNvbnN0YW50KCJ4IikKKyAgICAgICAgICAg
IC8vICAgIC0gVmFsdWVSZXAoRG91YmxlUmVwVXNlOkB4KSA9PiBAeAorICAgICAgICAgICAgLy8g
ICAgLSBBIFBoaSBzbyBsb25nIGFzIHRoYXQgUGhpIGlzIG5vdCBlc2NhcGVkLgorICAgICAgICAg
ICAgZm9yIChOb2RlKiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAg
Ym9vbCBvayA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBhdXRvIGR1bXBFc2NhcGUgPSBbJl0g
KGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBOb2RlKiBub2RlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghdmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgY2FuZGlkYXRlOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgIiIsIGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgIHJlYXNvbjogIik7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
ZHVtcChXVEY6OmRhdGFGaWxlKCksICIiLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCk7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGlmIChjYW5k
aWRhdGUtPm9wKCkgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIHBoaUNoaWxkcmVuLmZv
ckFsbEluY29taW5nVmFsdWVzKGNhbmRpZGF0ZSwgWyZdIChOb2RlKiBub2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBKU0NvbnN0YW50KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hc0pTVmFsdWUoKS5pc051bWJlcigpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGR1bXBFc2NhcGUoIlBoaSBJbmNvbWluZyBKU0NvbnN0YW50
IG5vdCBhIG51bWJlcjogIiwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IFZhbHVlUmVw
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSAhPSBEb3VibGVSZXBVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEVzY2FwZSgi
UGhpIEluY29taW5nIFZhbHVlUmVwIG5vdCBEb3VibGVSZXBVc2U6ICIsIG5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobm9kZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXNFc2NhcGVkKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBFc2NhcGUoIkFuIGlu
Y29taW5nIFBoaSB0byBhbm90aGVyIFBoaSBpcyBlc2NhcGVkOiAiLCBub2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHVtcEVzY2FwZSgiVW5zdXBwb3J0ZWQgaW5jb21pbmcgdmFsdWUgdG8gUGhp
OiAiLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdG9SZW1vdmUuYWRkKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGZvciAoTm9kZSogdXNlciA6IGdldFVzZXJzT2YoY2FuZGlkYXRlKSkg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHVzZXItPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBEb3VibGVSZXA6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNl
ci0+Y2hpbGQxKCkudXNlS2luZCgpICE9IFJlYWxOdW1iZXJVc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1
bXBFc2NhcGUoIkRvdWJsZVJlcCBlc2NhcGU6ICIsIHVzZXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBQdXRIaW50OgorICAgICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNl
IFVwc2lsb246IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IHVzZXItPnBo
aSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXNjYXBlZChwaGkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEVzY2FwZSgiVXBzaWxvbiBvZiBlc2NhcGVkIHBo
aSBlc2NhcGVzIGNhbmRpZGF0ZTogIiwgcGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEVzY2FwZSgiTm9ybWFs
IGVzY2FwZTogIiwgdXNlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFvaykKKyAgICAg
ICAgICAgICAgICAgICAgdG9SZW1vdmUuYWRkKGNhbmRpZGF0ZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICh0b1JlbW92ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IHRvUmVtb3ZlKQorICAgICAgICAg
ICAgICAgIGNhbmRpZGF0ZXMucmVtb3ZlKG5vZGUpOworICAgICAgICB9IHdoaWxlICh0cnVlKTsK
KworICAgICAgICBpZiAoIWNhbmRpZGF0ZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luRm9yQ29uc3RhbnQgPSBtX2dyYXBoLmJs
b2NrKDApLT5hdCgwKS0+b3JpZ2luOworICAgICAgICBIYXNoU2V0PE5vZGUqPiBkb3VibGVSZXBS
ZWFsQ2hlY2tMb2NhdGlvbnM7CisKKyAgICAgICAgZm9yIChOb2RlKiBjYW5kaWRhdGUgOiBjYW5k
aWRhdGVzKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIk9wdGltaXplZDogIiwgY2FuZGlkYXRlKTsKKworICAgICAgICAgICAgTm9kZSogcmVz
dWx0Tm9kZTsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUtPm9wKCkgPT0gUGhpKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0Tm9kZSA9IGNhbmRpZGF0ZTsKKworICAgICAgICAgICAgICAgIGZv
ciAoTm9kZSogdXBzaWxvbiA6IHBoaUNoaWxkcmVuLnVwc2lsb25zT2YoY2FuZGlkYXRlKSkgewor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZ1ZhbHVlID0gdXBzaWxvbi0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBuZXdDaGlsZDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGluY29taW5nVmFsdWUtPm9wKCkgPT0gSlNDb25zdGFudCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG51bWJlciA9IGluY29taW5nVmFsdWUtPmFzSlNW
YWx1ZSgpLmFzTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZCA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KDAsIG9yaWdpbkZvckNvbnN0YW50LCBqc0RvdWJs
ZU51bWJlcihudW1iZXIpLCBEb3VibGVDb25zdGFudCk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaW5jb21pbmdWYWx1ZS0+b3AoKSA9PSBWYWx1ZVJlcCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgaW5jb21pbmcgdmFsdWUgYmVp
bmcgYW4gaW1wdXJlIE5hTiBiZWNhdXNlIHVzZXJzIG9mCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0aGlzIFBoaSBhcmUgZWl0aGVyIE9TUiBleGl0IG9yIERvdWJsZVJlcChSZWFsTnVtYmVy
VXNlOkBwaGkpCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5jb21pbmdWYWx1ZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdDaGlsZCA9IGluY29taW5nVmFsdWUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChpbmNvbWluZ1ZhbHVlLT5vcCgpID09IFBoaSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkID0gaW5jb21pbmdWYWx1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKworICAgICAgICAgICAgICAgICAgICB1cHNpbG9uLT5jaGlsZDEoKSA9IEVk
Z2UobmV3Q2hpbGQsIERvdWJsZVJlcFVzZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgY2FuZGlkYXRlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdERvdWJsZSk7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBWYWx1ZVJlcCkKKyAgICAgICAgICAg
ICAgICByZXN1bHROb2RlID0gY2FuZGlkYXRlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwor
ICAgICAgICAgICAgZm9yIChOb2RlKiB1c2VyIDogZ2V0VXNlcnNPZihjYW5kaWRhdGUpKSB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoICh1c2VyLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBEb3VibGVSZXA6IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHVzZXItPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBSZWFsTnVtYmVyVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlci0+
Y29udmVydFRvSWRlbnRpdHlPbihyZXN1bHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZG91
YmxlUmVwUmVhbENoZWNrTG9jYXRpb25zLmFkZCh1c2VyKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIFB1dEhpbnQ6CisgICAgICAgICAgICAgICAgICAgIHVzZXItPmNoaWxkMigp
ID0gRWRnZShyZXN1bHROb2RlLCBEb3VibGVSZXBVc2UpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICAg
ICAgdXNlci0+Y2hpbGQxKCkgPSBFZGdlKHJlc3VsdE5vZGUsIERvdWJsZVJlcFVzZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7
CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IHVzZXItPnBoaSgpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoY2FuZGlkYXRlcy5jb250YWlucyhwaGkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSW5zZXJ0IGNvbnN0YW50cy4KKyAgICAgICAg
bV9pbnNlcnRpb25TZXQuZXhlY3V0ZShtX2dyYXBoLmJsb2NrKDApKTsKKworICAgICAgICAvLyBJ
bnNlcnQgY2hlY2tzIHRoYXQgYXJlIG5lZWRlZCB3aGVuIHJlbW92aW5nIERvdWJsZVJlcChSZWFs
TnVtYmVyOkB4KQorICAgICAgICBpZiAoZG91YmxlUmVwUmVhbENoZWNrTG9jYXRpb25zLnNpemUo
KSkgeworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tz
SW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
SWRlbnRpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZG91YmxlUmVwUmVh
bENoZWNrTG9jYXRpb25zLmNvbnRhaW5zKG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICghZG91YmxlUmVwUmVhbENoZWNrTG9jYXRpb25zLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICBpLCBTcGVjTm9uZSwgQ2hl
Y2ssIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBEb3VibGVSZXBSZWFsVXNlKSk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBJbnNl
cnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtVmFsdWVSZXBS
ZWR1Y3Rpb24oR3JhcGgmIGdyYXBoKQoreworICAgIHJldHVybiBydW5QaGFzZTxWYWx1ZVJlcFJl
ZHVjdGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIFRyaWVzIHRvIGVsaW1pbmF0ZSBEb3VibGVSZXAoVmFsdWVSZXApIHJvdW5kdHJpcHMuCisK
K2Jvb2wgcGVyZm9ybVZhbHVlUmVwUmVkdWN0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjQzNDc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODMs
NiArMjgzLDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAg
IHYoYm9vbCwgdXNlTW92SGludFJlbW92YWwsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoYm9vbCwgdXNlUHV0U3RhY2tTaW5raW5nLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHVzZU9iamVjdEFsbG9jYXRpb25TaW5raW5nLCB0cnVlLCBOb3JtYWwsIG51bGxw
dHIpIFwKKyAgICB2KGJvb2wsIHVzZVZhbHVlUmVwRWxpbWluYXRpb24sIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQXJpdHlGaXh1cElubGluaW5nLCB0cnVlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGxvZ0V4ZWN1dGFibGVBbGxvY2F0aW9uLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366214</attachid>
            <date>2019-03-28 15:09:01 -0700</date>
            <delta_ts>2019-04-02 08:58:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>24304</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQzNjI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDE5LTAzLTI4ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhIFZhbHVlUmVwUmVkdWN0aW9uIHBoYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTYyMzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBWYWx1ZVJlcFJlZHVjdGlv
biBwaGFzZS4gVGhlIG1haW4gaWRlYSBoZXJlIGlzCisgICAgICAgIHRvIHRyeSB0byByZWR1Y2Ug
RG91YmxlUmVwKFJlYWxOdW1iZXJVc2U6VmFsdWVSZXAoRG91YmxlUmVwVXNlOkB4KSkKKyAgICAg
ICAgdG8ganVzdCBiZSBAeC4gVGhpcyBwYXRjaCBoYW5kbGVzIHN1Y2ggYWJvdmUgc3RyZW5naCBy
ZWR1Y3Rpb24gcnVsZXMKKyAgICAgICAgYXMgbG9uZyBhcyB3ZSBwcm92ZSB0aGF0IGFsbCB1c2Vy
cyBvZiB0aGUgVmFsdWVSZXAgY2FuIGJlIGNvbnZlcnRlZAorICAgICAgICB0byB1c2luZyB0aGUg
aW5jb21pbmcgZG91YmxlIHZhbHVlLiBUaGF0IHdheSB3ZSBwcmV2ZW50IGludHJvZHVjaW5nCisg
ICAgICAgIGEgcGFyYWxsZWwgbGl2ZSByYW5nZSBmb3IgdGhlIGRvdWJsZSB2YWx1ZS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgcGF0Y2ggdHJhY2tzIHRoZSB1c2VzIG9mIHRoZSBWYWx1ZVJlcCB0
aHJvdWdoIFBoaSB2YXJpYWJsZXMsCisgICAgICAgIHNvIHdlIGNhbiBjb252ZXJ0IGVudGlyZSBQ
aGkgdmFyaWFibGVzIHRvIGJlaW5nIERvdWJsZSBpbnN0ZWFkCisgICAgICAgIG9mIEpTVmFsdWUg
aWYgdGhlIFBoaSBhbHNvIGhhcyBvbmx5IGRvdWJsZSB1c2VzLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBpcyBpbXBsZW1lbnRlZCB0aHJvdWdoIGEgc2ltcGxlIGVzY2FwZSBhbmFseXNpcy4gRG91
YmxlUmVwKFJlYWxOdW1iZXJVc2U6KQorICAgICAgICBhbmQgT1NSIGV4aXQgaGludHMgYXJlIG5v
dCBjb3VudGVkIGFzIGVzY2FwZXMuIEFsbCBvdGhlciB1c2VzIGFyZSBjb3VudGVkCisgICAgICAg
IGFzIGVzY2FwZXMuIENvbm5lY3RlZCBQaGkgZ3JhcGhzIGFyZSBjb252ZXJ0ZWQgdG8gYmVpbmcg
RG91YmxlIG9ubHkgaWYgdGhlCisgICAgICAgIGVudGlyZSBncmFwaCBpcyBvayB3aXRoIHRoZSBy
ZXN1bHQgYmVpbmcgRG91YmxlLgorICAgICAgICAKKyAgICAgICAgU29tZSB3YXlzIHdlIGNvdWxk
IGV4dGVuZCB0aGlzIHBoYXNlIGluIHRoZSBmdXR1cmU6CisgICAgICAgIC0gVGhlcmUgYXJlIGEg
bG90IG9mIERvdWJsZVJlcChOdW1iZXJVc2U6QFZhbHVlUmVwKEB4KSkgdXNlcy4gVGhpcyBlbnN1
cmVzCisgICAgICAgICAgdGhhdCB0aGUgcmVzdWx0IG9mIHRoZSBEb3VibGVSZXAgb2YgQHggaXMg
bm90IGltcHVyZSBOYU4uIFdlIGNvdWxkCisgICAgICAgICAgaGFuZGxlIHRoaXMgY2FzZSBpZiB3
ZSBpbnRyb2R1Y2VkIGEgUHVyaWZ5TmFOIG5vZGUgYW5kIHJlcGxhY2UgdGhlIERvdWJsZVJlcAor
ICAgICAgICAgIHdpdGggUHVyaWZ5TmFOKEB4KS4gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgc2Vl
IGlmIGNlcnRhaW4gdXNlcnMgb2YgdGhpcworICAgICAgICAgIERvdWJsZVJlcCBhcmUgb2theSB3
aXRoIGltcHVyZSBOYU4gZmxvd2luZyBpbnRvIHRoZW0gYW5kIHdlJ2QgbmVlZCB0byBlbnN1cmUK
KyAgICAgICAgICB0aGVpciBvdXRwdXQgdHlwZSBpcyBhbHdheXMgdHJlYXRlZCBhcyBpZiB0aGUg
aW5wdXQgaXMgaW1wdXJlIE5hTi4KKyAgICAgICAgLSBXZSBjb3VsZCBkbyBzaW5raW5nIG9mIFZh
bHVlUmVwIHdoZXJlIHdlIHRoaW5rIGl0J3MgcHJvZml0YWJsZS4gU28gaW5zdGVhZAorICAgICAg
ICAgIG9mIGFuIGVzY2FwZSBtYWtpbmcgaXQgc28gd2UgbmV2ZXIgcmVwcmVzZW50IHRoZSB2YXJp
YWJsZSBhcyBhIERvdWJsZSwgd2UKKyAgICAgICAgICBjb3VsZCBtYWtlIHRoZSBlc2NhcGUgcmVj
b25zdHJ1Y3QgdGhlIEpTVmFsdWVSZXAgd2hlcmUgcHJvZml0YWJsZS4KKyAgICAgICAgLSBXZSBj
YW4gZXh0ZW5kIHRoaXMgcGhhc2UgdG8gaGFuZGxlIEludDUyUmVwIGlmIGl0J3MgcHJvZml0YWJs
ZS4KKyAgICAgICAgLSBXZSBjYW4gb3B0IG90aGVyIG5vZGVzIGludG8gYWNjZXB0aW5nIGluY29t
aW5nIERvdWJsZXMgc28gd2Ugbm8gbG9uZ2VyCisgICAgICAgICAgdHJlYXQgdGhlbSBhcyBlc2Nh
cGVzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBzb21ld2hlcmUgYmV0d2VlbiBu
ZXV0cmFsIGFuZCBhIDElIHByb2dyZXNzaW9uIG9uIEpldFN0cmVhbSAyLgorCisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1ZhbHVlUmVwUmVk
dWN0aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlcFJlZHVj
dGlvblBoYXNlOjpWYWx1ZVJlcFJlZHVjdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpW
YWx1ZVJlcFJlZHVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVw
UmVkdWN0aW9uUGhhc2U6OmNvbnZlcnRWYWx1ZVJlcHNUb0RvdWJsZSk6CisgICAgICAgIChKU0M6
OkRGRzo6cGVyZm9ybVZhbHVlUmVwUmVkdWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHVmFsdWVS
ZXBSZWR1Y3Rpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoK
KwogMjAxOS0wMy0yOCAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDb2RlQmxvY2s6OmpldHRpc29uKCkgc2hvdWxkIGRpc2FsbG93IHJlcGF0Y2hpbmcgaXRz
IG93biBjYWxscwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjQz
NjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00MTYsNiArNDE2LDcgQEAgZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCiBk
ZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKIGRmZy9ERkdVc2VLaW5kLmNwcAogZGZnL0RGR1Zh
bGlkYXRlLmNwcAorZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuY3BwCiBkZmcvREZHVmFs
dWVTb3VyY2UuY3BwCiBkZmcvREZHVmFsdWVTdHJlbmd0aC5jcHAKIGRmZy9ERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDI0MzYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04ODMsNiArODgzLDcgQEAK
IAkJNTJCMzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkEx
OTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQjMxMTAxMTk3NUI0Njcw
MDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTJCMzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2Nh
dGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkMwNjExRDFBQTUxRTFCMDBC
NEFEQkEgLyogUnVudGltZVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk1MkM1NTU2NjIyNEMyQUVBMDA5OUY1Q0MgLyogREZHVmFsdWVSZXBS
ZWR1Y3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTJDNTU1NjUyMjRDMkFFNzAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhh
c2UuaCAqLzsgfTsKIAkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjYx
OUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQ0QwRjVEMjI0MkY1NjkwMDRBMThBNSAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayAqLzsgfTsKIAkJNTJDRDBGNUUyMjQyRjU2OTAwNEExOEE1IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
Ki87IH07CkBAIC0zMzg5LDYgKzMzOTAsOCBAQAogCQk1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0Mg
LyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUxvY2F0aW9uQ2FjaGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJCNzE3QjQxQTA1OTdFMTAwN0FGNEYz
IC8qIENvbnRyb2xGbG93UHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ29udHJvbEZsb3dQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUyQzA2MTFEMUFBNTFFMUIwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdW50aW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MkM1NTU2NDIyNEMyQUU3MDA5OUY1Q0MgLyogREZHVmFsdWVSZXBSZWR1
Y3Rpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYWx1ZVJlcFJlZHVjdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJDNTU1NjUyMjRDMkFFNzAwOTlGNUNDIC8qIERGR1Zh
bHVlUmVwUmVkdWN0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVSZXBSZWR1Y3Rp
b25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQ
cm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MkNEMEY2NDIyNDJGNTY5MDA0QTE4QTUgLyogdGVzdGRmZyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gt
by5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdGRmZzsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTc2NTEsNiArNzY1NCw4IEBACiAJCQkJ
MEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLywKIAkJCQkwRjNCM0Ey
OTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovLAogCQkJCTBGM0IzQTJBMTU0
NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovLAorCQkJCTUyQzU1NTY0MjI0QzJBRTcw
MDk5RjVDQyAvKiBERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmNwcCAqLywKKwkJCQk1MkM1NTU2
NTIyNEMyQUU3MDA5OUY1Q0MgLyogREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oICovLAogCQkJ
CTBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgKi8sCiAJCQkJ
MEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggKi8sCiAJCQkJMEYw
MTIzMzAxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGguY3BwICovLApAQCAtOTM3
OSw2ICs5Mzg0LDcgQEAKIAkJCQlEOTcyMjc1MkRDNTQ0NTlCOTEyNUI1MzkgLyogSlNNb2R1bGVM
b2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzIwMUJEQTA4RUYwMDMzMUI4NCAvKiBK
U01vZHVsZUxvYWRlci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMThDQkMxMUI4QUVGNTEw
MEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTJDNTU1NjYyMjRDMkFFQTAwOTlGNUNDIC8qIERGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJl
Y29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMUQxQjkwMTNDMzAwMzQ2QjUyIC8qIEpT
TmF0aXZlU3RkRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOEQ5OTlDMjIxQjc4QkIw
MEQ1MDQ3NCAvKiBKU05vbkRlc3RydWN0aWJsZVByb3h5LmggaW4gSGVhZGVycyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjQzNjI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNiArNzEsNyBAQAogI2luY2x1ZGUgIkRGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCIKICNp
bmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIK
KyNpbmNsdWRlICJERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCIK
QEAgLTQyNCw2ICs0MjUsOCBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUlu
VGhyCiAgICAgICAgICAgICBSVU5fUEhBU0UocGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKTsK
ICAgICAgICAgICAgIFJVTl9QSEFTRShwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcpOwog
ICAgICAgICB9CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VWYWx1ZVJlcEVsaW1pbmF0aW9uKCkp
CisgICAgICAgICAgICBSVU5fUEhBU0UocGVyZm9ybVZhbHVlUmVwUmVkdWN0aW9uKTsKICAgICAg
ICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgICAgIC8vIFN0YXRlLWF0LXRhaWwgYW5kIHN0YXRl
LWF0LWhlYWQgd2lsbCBiZSBpbnZhbGlkIGlmIHdlIGRpZCBzdHJlbmd0aCByZWR1Y3Rpb24gc2lu
Y2UKICAgICAgICAgICAgIC8vIGl0IG1pZ2h0IGluY3JlYXNlIGxpdmUgcmFuZ2VzLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlcFJlZHVjdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVwUmVkdWN0
aW9uUGhhc2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1ZhbHVlUmVwUmVkdWN0aW9uUGhhc2UuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRG
R1BoaUNoaWxkcmVuLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICAKK3B1YmxpYzoKKyAgICBWYWx1ZVJl
cFJlZHVjdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlZh
bHVlUmVwIHJlZHVjdGlvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVJlcHNUb0Rv
dWJsZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGNvbnZlcnRWYWx1ZVJlcHNUb0Rv
dWJsZSgpCisgICAgeworICAgICAgICBIYXNoU2V0PE5vZGUqPiBjYW5kaWRhdGVzOworICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigp
KSB7CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBWYWx1ZVJlcCAmJiBub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gRG91YmxlUmVwVXNlKQorICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFkZChu
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghY2FuZGlkYXRl
cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSGFzaE1hcDxO
b2RlKiwgVmVjdG9yPE5vZGUqPj4gdXNlcnNPZjsKKyAgICAgICAgYXV0byBnZXRVc2Vyc09mID0g
WyZdIChOb2RlKiBjYW5kaWRhdGUpIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHVzZXJzT2Yu
ZmluZChjYW5kaWRhdGUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlciAhPSB1c2Vy
c09mLmVuZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKyAgICAgICAgfTsK
KworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJblByZU9y
ZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFBoaSB8fCAobm9kZS0+b3AoKSA9PSBWYWx1ZVJl
cCAmJiBjYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpKSkKKyAgICAgICAgICAgICAgICAgICAgdXNl
cnNPZi5hZGQobm9kZSwgVmVjdG9yPE5vZGUqPigpKTsKKworICAgICAgICAgICAgICAgIFZlY3Rv
cjxOb2RlKiwgMz4gYWxyZWFkeUFkZGVkOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0No
aWxkcmVuKG5vZGUsIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGNhbmRpZGF0ZSA9IGVkZ2Uubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxyZWFk
eUFkZGVkLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHVzZXJzT2YuZmluZChjYW5kaWRh
dGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlciA9PSB1c2Vyc09mLmVuZCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpdGVyLT52
YWx1ZS5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlBZGRlZC5hcHBl
bmQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIFBoaUNoaWxkcmVuIHBoaUNoaWxkcmVuKG1fZ3JhcGgpOworCisgICAg
ICAgIC8vIC0gQW55IGNhbmRpZGF0ZSB0aGF0IGZvcndhcmRzIGludG8gYSBQaGkgdHVybnMgdGhh
dCBQaGkgaW50byBhIGNhbmRpZGF0ZS4KKyAgICAgICAgLy8gLSBBbnkgUGhpLTEgdGhhdCBmb3J3
YXJkcyBpbnRvIGFub3RoZXIgUGhpLTIsIHdoZXJlIFBoaS0yIGlzIGEgY2FuZGlkYXRlLAorICAg
ICAgICAvLyAgIG1ha2VzIFBoaS0xIGEgY2FuZGlkYXRlIHRvby4KKyAgICAgICAgZG8geworICAg
ICAgICAgICAgSGFzaFNldDxOb2RlKj4gZWxpZ2libGVQaGlzOworICAgICAgICAgICAgZm9yIChO
b2RlKiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGhpQ2hpbGRyZW4uZm9y
QWxsSW5jb21pbmdWYWx1ZXMoY2FuZGlkYXRlLCBbJl0gKE5vZGUqIGluY29taW5nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5jb21pbmctPm9wKCkgPT0gUGhpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsaWdpYmxlUGhpcy5hZGQoaW5jb21pbmcpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3Ig
KE5vZGUqIHVzZXIgOiBnZXRVc2Vyc09mKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHVzZXItPm9wKCkgPT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
aWdpYmxlUGhpcy5hZGQodXNlci0+cGhpKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYm9vbCBzYXdOZXdDYW5kaWRhdGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGZvciAoTm9kZSogcGhpIDogZWxpZ2libGVQaGlzKQorICAgICAgICAgICAgICAgIHNh
d05ld0NhbmRpZGF0ZSB8PSBjYW5kaWRhdGVzLmFkZChwaGkpLmlzTmV3RW50cnk7CisKKyAgICAg
ICAgICAgIGlmICghc2F3TmV3Q2FuZGlkYXRlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9IHdoaWxlICh0cnVlKTsKKworICAgICAgICBkbyB7CisgICAgICAgICAgICBIYXNoU2V0
PE5vZGUqPiB0b1JlbW92ZTsKKworICAgICAgICAgICAgYXV0byBpc0VzY2FwZWQgPSBbJl0gKE5v
ZGUqIG5vZGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIWNhbmRpZGF0ZXMuY29udGFpbnMo
bm9kZSkgfHwgdG9SZW1vdmUuY29udGFpbnMobm9kZSk7CisgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAvLyBFc2NhcGUgcnVsZXMgYXJlIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAvLyAt
IEFueSBub24td2VsbC1rbm93biB1c2UgaXMgYW4gZXNjYXBlLiBDdXJyZW50bHksIHdlIGFsbG93
IERvdWJsZVJlcCwgSGludHMsIFVwc2lsb25zIChkZXNjcmliZWQgYmVsb3cpLgorICAgICAgICAg
ICAgLy8gLSBBbnkgVXBzaWxvbiB0aGF0IGZvcndhcmRzIHRoZSBjYW5kaWRhdGUgaW50byBhbiBl
c2NhcGVkIHBoaSBlc2NhcGVzIHRoZSBjYW5kaWRhdGUuCisgICAgICAgICAgICAvLyAtIEEgUGhp
IHJlbWFpbnMgYSBjYW5kaWRhdGUgYXMgbG9uZyBhcyBhbGwgdmFsdWVzIGZsb3dpbmcgaW50byBp
dCBjYW4gYmUgbWFkZSBhIGRvdWJsZS4KKyAgICAgICAgICAgIC8vICAgQ3VycmVudGx5LCB0aGlz
IG1lYW5zIHRoZXNlIGFyZSB2YWxpZCB0aGluZ3Mgd2Ugc3VwcG9ydCB0byBmb3J3YXJkIGludG8g
dGhlIFBoaToKKyAgICAgICAgICAgIC8vICAgIC0gQSBKU0NvbnN0YW50KHNvbWUgbnVtYmVyICJ4
IikgPT4gRG91YmxlQ29uc3RhbnQoIngiKQorICAgICAgICAgICAgLy8gICAgLSBWYWx1ZVJlcChE
b3VibGVSZXBVc2U6QHgpID0+IEB4CisgICAgICAgICAgICAvLyAgICAtIEEgUGhpIHNvIGxvbmcg
YXMgdGhhdCBQaGkgaXMgbm90IGVzY2FwZWQuCisgICAgICAgICAgICBmb3IgKE5vZGUqIGNhbmRp
ZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKKwor
ICAgICAgICAgICAgICAgIGF1dG8gZHVtcEVzY2FwZSA9IFsmXSAoY29uc3QgY2hhciogZGVzY3Jp
cHRpb24sIE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBjYW5k
aWRhdGU6ICIpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoV1RGOjpkYXRhRmls
ZSgpLCAiIiwgY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgcmVh
c29uOiAiKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUo
KSwgIiIsIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oKTsKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcGhpQ2hpbGRyZW4uZm9yQWxsSW5jb21pbmdWYWx1ZXMo
Y2FuZGlkYXRlLCBbJl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IEpTQ29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmFzSlNWYWx1ZSgpLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZHVtcEVzY2FwZSgiUGhpIEluY29taW5nIEpTQ29uc3RhbnQgbm90IGEgbnVtYmVyOiAiLCBu
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gVmFsdWVSZXApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IERvdWJsZVJlcFVz
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wRXNjYXBlKCJQaGkgSW5jb21pbmcgVmFsdWVS
ZXAgbm90IERvdWJsZVJlcFVzZTogIiwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IFBo
aSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0VzY2FwZWQobm9kZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHVtcEVzY2FwZSgiQW4gaW5jb21pbmcgUGhpIHRvIGFub3Ro
ZXIgUGhpIGlzIGVzY2FwZWQ6ICIsIG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wRXNj
YXBlKCJVbnN1cHBvcnRlZCBpbmNvbWluZyB2YWx1ZSB0byBQaGk6ICIsIG5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b1JlbW92ZS5h
ZGQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9y
IChOb2RlKiB1c2VyIDogZ2V0VXNlcnNPZihjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAodXNlci0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJs
ZVJlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLT5jaGlsZDEoKS51c2VLaW5k
KCkgIT0gUmVhbE51bWJlclVzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcEVzY2FwZSgiRG91YmxlUmVw
IGVzY2FwZTogIiwgdXNlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFB1dEhpbnQ6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjogeworICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gdXNlci0+cGhpKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNFc2NhcGVkKHBoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkdW1wRXNjYXBlKCJVcHNpbG9uIG9mIGVzY2FwZWQgcGhpIGVzY2FwZXMgY2FuZGlkYXRl
OiAiLCBwaGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBkdW1wRXNjYXBlKCJOb3JtYWwgZXNjYXBlOiAiLCB1c2VyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IGlmICghb2spCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgICAgICAgICB0b1Jl
bW92ZS5hZGQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRv
UmVtb3ZlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Zm9yIChOb2RlKiBub2RlIDogdG9SZW1vdmUpCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5y
ZW1vdmUobm9kZSk7CisgICAgICAgIH0gd2hpbGUgKHRydWUpOworCisgICAgICAgIGlmICghY2Fu
ZGlkYXRlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgTm9k
ZU9yaWdpbiBvcmlnaW5Gb3JDb25zdGFudCA9IG1fZ3JhcGguYmxvY2soMCktPmF0KDApLT5vcmln
aW47CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IGRvdWJsZVJlcFJlYWxDaGVja0xvY2F0aW9uczsK
KworICAgICAgICBmb3IgKE5vZGUqIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiT3B0aW1pemVkOiAi
LCBjYW5kaWRhdGUpOworCisgICAgICAgICAgICBOb2RlKiByZXN1bHROb2RlOworICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRO
b2RlID0gY2FuZGlkYXRlOworCisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiB1cHNpbG9uIDog
cGhpQ2hpbGRyZW4udXBzaWxvbnNPZihjYW5kaWRhdGUpKSB7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIGluY29taW5nVmFsdWUgPSB1cHNpbG9uLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG5ld0NoaWxkOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5j
b21pbmdWYWx1ZS0+b3AoKSA9PSBKU0NvbnN0YW50KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgbnVtYmVyID0gaW5jb21pbmdWYWx1ZS0+YXNKU1ZhbHVlKCkuYXNOdW1iZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Q29uc3RhbnQoMCwgb3JpZ2luRm9yQ29uc3RhbnQsIGpzRG91YmxlTnVtYmVyKG51bWJlciksIERv
dWJsZUNvbnN0YW50KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmNvbWluZ1Zh
bHVlLT5vcCgpID09IFZhbHVlUmVwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBk
b24ndCBjYXJlIGFib3V0IHRoZSBpbmNvbWluZyB2YWx1ZSBiZWluZyBhbiBpbXB1cmUgTmFOIGJl
Y2F1c2UgdXNlcnMgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgUGhpIGFyZSBl
aXRoZXIgT1NSIGV4aXQgb3IgRG91YmxlUmVwKFJlYWxOdW1iZXJVc2U6QHBoaSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChpbmNvbWluZ1ZhbHVlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gRG91YmxlUmVwVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkID0gaW5j
b21pbmdWYWx1ZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGluY29taW5nVmFsdWUtPm9wKCkgPT0gUGhpKQorICAgICAgICAgICAgICAgICAgICAgICAg
bmV3Q2hpbGQgPSBpbmNvbWluZ1ZhbHVlOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAg
ICAgICAgICAgICAgICAgIHVwc2lsb24tPmNoaWxkMSgpID0gRWRnZShuZXdDaGlsZCwgRG91Ymxl
UmVwVXNlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGUt
PnNldFJlc3VsdChOb2RlUmVzdWx0RG91YmxlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2Fu
ZGlkYXRlLT5vcCgpID09IFZhbHVlUmVwKQorICAgICAgICAgICAgICAgIHJlc3VsdE5vZGUgPSBj
YW5kaWRhdGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgICAgICBmb3IgKE5v
ZGUqIHVzZXIgOiBnZXRVc2Vyc09mKGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKHVzZXItPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcDogeworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQodXNlci0+Y2hpbGQxKCkudXNlS2luZCgpID09IFJlYWxO
dW1iZXJVc2UpOworICAgICAgICAgICAgICAgICAgICB1c2VyLT5jb252ZXJ0VG9JZGVudGl0eU9u
KHJlc3VsdE5vZGUpOworICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXBSZWFsQ2hlY2tMb2Nh
dGlvbnMuYWRkKHVzZXIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUHV0SGlu
dDoKKyAgICAgICAgICAgICAgICAgICAgdXNlci0+Y2hpbGQyKCkgPSBFZGdlKHJlc3VsdE5vZGUs
IERvdWJsZVJlcFVzZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgICAgICB1c2VyLT5jaGlsZDEoKSA9
IEVkZ2UocmVzdWx0Tm9kZSwgRG91YmxlUmVwVXNlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogcGhpID0gdXNlci0+cGhpKCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocGhpLCBjYW5kaWRhdGVzLmNvbnRhaW5zKHBoaSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJbnNlcnQgY29uc3RhbnRzLgorICAgICAgICBtX2luc2Vy
dGlvblNldC5leGVjdXRlKG1fZ3JhcGguYmxvY2soMCkpOworCisgICAgICAgIC8vIEluc2VydCBj
aGVja3MgdGhhdCBhcmUgbmVlZGVkIHdoZW4gcmVtb3ZpbmcgRG91YmxlUmVwKFJlYWxOdW1iZXI6
QHgpCisgICAgICAgIGlmIChkb3VibGVSZXBSZWFsQ2hlY2tMb2NhdGlvbnMuc2l6ZSgpKSB7Cisg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVy
YWxPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBJZGVudGl0
eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFkb3VibGVSZXBSZWFsQ2hlY2tM
b2NhdGlvbnMuY29udGFpbnMobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkb3Vi
bGVSZXBSZWFsQ2hlY2tMb2NhdGlvbnMuY29udGFpbnMobm9kZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGksIFNwZWNOb25lLCBDaGVjaywgbm9k
ZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIERvdWJsZVJlcFJlYWxVc2UpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEluc2VydGlvblNl
dCBtX2luc2VydGlvblNldDsKK307CisgICAgCitib29sIHBlcmZvcm1WYWx1ZVJlcFJlZHVjdGlv
bihHcmFwaCYgZ3JhcGgpCit7CisgICAgcmV0dXJuIHJ1blBoYXNlPFZhbHVlUmVwUmVkdWN0aW9u
UGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gVHJp
ZXMgdG8gZWxpbWluYXRlIERvdWJsZVJlcChWYWx1ZVJlcCkgcm91bmR0cmlwcy4KKworYm9vbCBw
ZXJmb3JtVmFsdWVSZXBSZWR1Y3Rpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyNDM2MjUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw2ICsyODMs
NyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAgdihib29s
LCB1c2VNb3ZIaW50UmVtb3ZhbCwgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCB1c2VQdXRTdGFja1NpbmtpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgdXNlT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoYm9vbCwgdXNlVmFsdWVSZXBFbGltaW5hdGlvbiwgdHJ1ZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihib29sLCB1c2VBcml0eUZpeHVwSW5saW5pbmcsIHRydWUsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoYm9vbCwgbG9nRXhlY3V0YWJsZUFsbG9jYXRpb24sIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICBcCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>