<?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>146961</bug_id>
          
          <creation_ts>2015-07-15 00:06:03 -0700</creation_ts>
          <short_desc>[Content extensions] Combine suffixes when generating NFAs</short_desc>
          <delta_ts>2015-07-16 14:52:18 -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>New Bugs</component>
          <version>528+ (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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1109581</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-15 00:06:03 -0700</bug_when>
    <thetext>[Content extensions] Combine suffixes when generating NFAs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109588</commentid>
    <comment_count>1</comment_count>
      <attachid>256827</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-15 00:38:03 -0700</bug_when>
    <thetext>Created attachment 256827
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109659</commentid>
    <comment_count>2</comment_count>
      <attachid>256827</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-15 11:37:15 -0700</bug_when>
    <thetext>Comment on attachment 256827
Patch

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        have the same trailing NFA nodes for both side of the disjunction.

sides

&gt; Source/WebCore/ChangeLog:46
&gt; +        Overall, I get the following gains:

Awesome.  Where are these gains coming from?  Is the DFA minimization faster, or NFA to DFA faster, or both?

&gt; Source/WebCore/ChangeLog:50
&gt; +        -Armand&apos;s test cse:

case

&gt; Tools/TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:70
&gt; -    EXPECT_EQ(static_cast&lt;size_t&gt;(13), countLiveNodes(dfa));
&gt; +    EXPECT_EQ(static_cast&lt;size_t&gt;(6), countLiveNodes(dfa));
&gt;      dfa.minimize();
&gt;      EXPECT_EQ(static_cast&lt;size_t&gt;(6), countLiveNodes(dfa));

A lot of these minimization tests don&apos;t do anything now.  Could you add some cases where the minimizer still does a lot of the work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109670</commentid>
    <comment_count>3</comment_count>
      <attachid>256827</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-15 12:41:14 -0700</bug_when>
    <thetext>Comment on attachment 256827
Patch

(In reply to comment #2)
&gt; &gt; Source/WebCore/ChangeLog:46
&gt; &gt; +        Overall, I get the following gains:
&gt; 
&gt; Awesome.  Where are these gains coming from?  Is the DFA minimization
&gt; faster, or NFA to DFA faster, or both?

The compile time is improved because the DFA have less redundancy. This makes NFA-to-DFA and Minimization simpler.

The memory gains are due to combining more patterns into NFAs.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/DFAMinimizer.cpp:70
&gt; &gt; -    EXPECT_EQ(static_cast&lt;size_t&gt;(13), countLiveNodes(dfa));
&gt; &gt; +    EXPECT_EQ(static_cast&lt;size_t&gt;(6), countLiveNodes(dfa));
&gt; &gt;      dfa.minimize();
&gt; &gt;      EXPECT_EQ(static_cast&lt;size_t&gt;(6), countLiveNodes(dfa));
&gt; 
&gt; A lot of these minimization tests don&apos;t do anything now.  Could you add some
&gt; cases where the minimizer still does a lot of the work?

That&apos;s a good point. I&apos;ll add new test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109697</commentid>
    <comment_count>4</comment_count>
      <attachid>256859</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-15 13:54:53 -0700</bug_when>
    <thetext>Created attachment 256859
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109743</commentid>
    <comment_count>5</comment_count>
      <attachid>256869</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-15 15:43:22 -0700</bug_when>
    <thetext>Created attachment 256869
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109773</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-15 17:23:54 -0700</bug_when>
    <thetext>I measured a large test case on a device and this cut the compiling time in half, and the max memory usage stayed almost exactly the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109777</commentid>
    <comment_count>7</comment_count>
      <attachid>256869</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-07-15 17:28:04 -0700</bug_when>
    <thetext>Comment on attachment 256869
Patch

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

&gt; Source/WebCore/contentextensions/Term.h:646
&gt; -        for (unsigned i = 1; i &lt; m_atomData.group.terms.size(); ++i) {
&gt; +        for (unsigned i = 1; i &lt; m_atomData.group.terms.size() - 1; ++i) {

Why is the last one a special case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109783</commentid>
    <comment_count>8</comment_count>
      <attachid>256869</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-15 17:42:17 -0700</bug_when>
    <thetext>Comment on attachment 256869
Patch

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

&gt;&gt; Source/WebCore/contentextensions/Term.h:646
&gt;&gt; +        for (unsigned i = 1; i &lt; m_atomData.group.terms.size() - 1; ++i) {
&gt; 
&gt; Why is the last one a special case?

The generateGraph() for the last one is not one that generate a new node, it is one that generate transitions to an existing node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109984</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-07-16 14:46:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/21863296&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109987</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-07-16 14:52:18 -0700</bug_when>
    <thetext>Committed r186910: &lt;http://trac.webkit.org/changeset/186910&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256827</attachid>
            <date>2015-07-15 00:38:03 -0700</date>
            <delta_ts>2015-07-15 13:54:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146961-20150715003655.patch</filename>
            <type>text/plain</type>
            <size>54756</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2Nzc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDIyYTZjMDk4OGU5NGFiMTgxNWVkYjE3
NzJmMzc1MTYxYmQ5NjNjYjguLjY4N2E2MjY4MzljZDEwM2UzYTVlZTZhOTRiMTllMWJjMGQ1MTky
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTUtMDctMTUgIEJlbmphbWluIFBvdWxhaW4gIDxi
cG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvbnRlbnQgZXh0ZW5zaW9uc10gQ29tYmlu
ZSBzdWZmaXhlcyB3aGVuIGdlbmVyYXRpbmcgTkZBcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2OTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6Om1p
bkNhcGFjaXR5Pjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIENvcHlpbmcg
YSB2ZWN0b3Igd2l0aCBhIGRpZmZlcmVudCBpbmxpbmUgY2FwYWNpdHkgd2FzIGJyb2tlbiBkdWUg
dG8KKyAgICAgICAgdGhlIGFkZGl0aW9uIG9mIE1pbmltdW1DYXBhY2l0eS4KKworICAgICAgICBU
aGlzIGZlYXR1cmUgd2FzIG5lZWRlZCBieSB0aGlzIHBhdGNoIHNvIEkgZml4ZWQgV1RGLgorCiAy
MDE1LTA3LTExICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBidWlsZCBmaXgsIHJlc3RyaWN0IEFQUF9MSU5LUyB0byBqdXN0IGlPUy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MjY4NGQ5YTZjYzQyMTI4YzNhMTg3OTA0ZWFiNDRiOWNiNWIzNjk5Li5i
NzIyMDcwNDVlYjg0NzQwMzVhOTk5ZmZjNjAyNjRhNGQ4NjM5OGYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTA0IEBACisyMDE1LTA3LTE1ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFtDb250ZW50IGV4dGVuc2lvbnNdIENvbWJpbmUgc3VmZml4ZXMg
d2hlbiBnZW5lcmF0aW5nIE5GQXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0Njk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIEkgYWRkIGEgbWVjaGFuaXNtIHZlcnkgc2ltaWxh
ciB0byB0aGUgcHJlZml4IHRyZWUKKyAgICAgICAgYnV0IGZvciB0aGUgc3VmZml4IChjYWxsZWQg
YSByZXZlcnNlIHN1ZmZpeCB0cmVlIGhlcmUpLgorCisgICAgICAgIFRoZSBpZGVhIGlzIGhlcmUg
aXMgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIE5GQSBub2RlcyB3aGVuIGdlbmVyYXRpbmcKKyAgICAg
ICAgYSBjaGFpbiBvZiBzdWZmaXggVGVybSB0aGF0IHdlcmUgYWxyZWFkeSBnZW5lcmF0ZWQgcHJl
dmlvdXNseS4KKyAgICAgICAgV2hlbiBnZW5lcmF0aW5nIGEgZGlzanVuY3Rpb24gZW5kaW5nIHdp
dGggdGhlIHNhbWUgc3VmZml4LCB3ZSBub3cKKyAgICAgICAgaGF2ZSB0aGUgc2FtZSB0cmFpbGlu
ZyBORkEgbm9kZXMgZm9yIGJvdGggc2lkZSBvZiB0aGUgZGlzanVuY3Rpb24uCisKKyAgICAgICAg
TWl4aW5nIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBnZW5lcmF0aW9uIGNhbiBiZSB0cmlja3ksIHdl
IGRvIG5vdCB3YW50CisgICAgICAgIHRyYW5zaXRpb25zIGZyb20gYSBwYXR0ZXJuIHRvIGNyZWVw
IGludG8gdGhlIHN1ZmZpeCBvZiBhbiBvdGhlci4KKworICAgICAgICBUbyBhdm9pZCBhbnkgY29u
ZmxpY3QsIHRoZSBydWxlcyBoZXJlIGFyZSB2ZXJ5IHNpbXBsZToKKyAgICAgICAgLU9ubHkgdXNl
IHRoZSByZXZlcnNlIHN1ZmZpeCB0cmVlIGZvciB0ZXJtcyB3aXRob3V0IGFjdGlvbnMKKyAgICAg
ICAgIHVwIHRvIGEgbGVhZiB0ZXJtIHdpdGggYWN0aW9ucy4KKworICAgICAgICAgVGhpcyBydWxl
IGVuc3VyZSB0aGF0IG5vIGFjdGlvbiB3aWxsIGFjY2lkZW50YWxseSBtYWtlIGl0cyB3YXkKKyAg
ICAgICAgIHRvIGFuIG90aGVyIHJ1bGUgYnkgcmVzdWluZyBhIHZlcnRleCBvZiB0aGUgcmV2ZXJz
ZSBzdWZmaXggdHJlZS4KKworICAgICAgICAtT25seSB1c2UgdGhlIHJldmVyc2Ugc3VmZml4IHRy
ZWUgZm9yIGNoYWlucyBvZiB0ZXJtcyBpbiB3aGljaAorICAgICAgICAgZWFjaCB0ZXJtIG9ubHkg
aGFzIHplcm8gb3Igb25lIGZvbGxvd2luZyB0ZXJtLgorCisgICAgICAgICBXaXRoIHRoaXMgY29u
ZGl0aW9uLCB3aGVuIHRha2luZyBhbnkgdmVydGV4IG9mIHRoZSByZXZlcnNlIHN1ZmZpeAorICAg
ICAgICAgdHJlZSwgdGhlcmUgaXMgb25seSBvbmUgZWRnZSB0aGF0IG1vdmUgb3V0IG9mIHRoYXQg
dmVydGV4IHdoZW4gcmVhZGluZworICAgICAgICAgZnJvbSBsZWZ0IHRvIHJpZ2h0LgorICAgICAg
ICAgRm9yIGFueSB2ZXJ0ZXgsIHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIHN0cmluZyBnZW5l
cmF0ZWQKKyAgICAgICAgIGxlZnQtdG8tcmlnaHQsIGEgc2luZ2xlIHN1ZmZpeC4KKworICAgICAg
ICBUaGlzIGlzIG92ZXJseSByZXN0cmljdGl2ZSBidXQgaXQgaXMgZmFzdCwgZWFzaWVyIHRvIHZl
cmlmeSwgYW5kIGl0IHdvcmtzCisgICAgICAgIHdlbGwgaW4gcHJhY3RpY2UuCisgICAgICAgIEZv
ciBhbGwgdGhlIG1vcmUgY29tcGxpY2F0ZWQgY2FzZXMsIHdlIGNhbiBjb3VudCBvbiB0aGUgTWlu
aW1pemVyIHRvCisgICAgICAgIGZpbmQgYSBiZXR0ZXIgc29sdXRpb24uCisKKworICAgICAgICBX
aXRoIGFsbCB0aGUgc2ltcGxlIHN1ZmZpeGVzIG1lcmdlZCwgb3VyIE5GQXMgYXJlIHNtYWxsZXIs
IHdoaWNoCisgICAgICAgIGxldCB1cyBjb21iaW5lIG1vcmUgcGF0dGVybnMuCisgICAgICAgIFRo
ZSBERkFzIGFyZSBhbHNvIHNtYWxsZXIgYW5kIGZhc3RlciB0byBwcm9kdWNlIHNpbmNlIHRoZWly
IHNpemUKKyAgICAgICAgaXMgcmVsYXRpdmUgdG8gdGhlIE5GQSBzaXplcy4KKworICAgICAgICBP
dmVyYWxsLCBJIGdldCB0aGUgZm9sbG93aW5nIGdhaW5zOgorICAgICAgICAtQ2hyaXMncyB0ZXN0
IGNhc2U6CisgICAgICAgICAgICBjb21waWxlIHRpbWUgLTQwJS4KKyAgICAgICAgICAgIGJ5dGVj
b2RlIHNpemUgLTE0JS4KKyAgICAgICAgLUFybWFuZCdzIHRlc3QgY3NlOgorICAgICAgICAgICAg
Y29tcGlsZSB0aW1lIC01MyUuCisgICAgICAgICAgICBieXRlY29kZSBzaXplIC0xMyUuCisKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpBY3RpdmVTdWJ0cmVlOjpBY3RpdmVTdWJ0cmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZW5lcmF0ZUluZml4VW5zdWl0YWJsZUZv
clJldmVyc2VTdWZmaXhUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpnZW5lcmF0ZVN1ZmZpeFdpdGhSZXZlcnNlU3VmZml4VHJlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Y2xlYXJSZXZlcnNlU3VmZml4VHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2VuZXJhdGVORkFGb3JTdWJ0cmVlKToKKyAgICAg
ICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkRGQTo6ZGVidWdQcmludERvdCk6CisgICAgICAgIEZvcmdvdCB0byBjbG9z
ZSBhIHRhZywgZG90IHdhcyBub3QgaGFwcHkuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9u
cy9IYXNoYWJsZUFjdGlvbkxpc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6SGFzaGFibGVBY3Rpb25MaXN0OjpIYXNoYWJsZUFjdGlvbkxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Okhhc2hhYmxlQWN0aW9uTGlzdDo6aXNF
bXB0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpIYXNoYWJs
ZUFjdGlvbkxpc3Q6OmlzRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpIYXNoYWJsZUFjdGlvbkxpc3Q6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6Okhhc2hhYmxlQWN0aW9uTGlzdDo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SGFzaGFibGVBY3Rpb25MaXN0
SGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SGFzaGFi
bGVBY3Rpb25MaXN0SGFzaDo6ZXF1YWwpOgorICAgICAgICBXZSBuZWVkIGEgd2F5IHRvIGdyb3Vw
IHJldmVyc2Ugc3VmZml4IHRyZWUgYnkgdGhlaXIgdGVybWluYWwgYWN0aW9ucy4KKyAgICAgICAg
VGhpcyBuZXcgaGFzaCBzdHJ1Y3R1cmUgbGV0cyB1cyBmaW5kIHVuaXF1ZSB2ZXJ0ZXggZm9yIGEg
bGlzdCBvZiBhY3Rpb25zCisgICAgICAgIGluIGFueSBvcmRlci4KKworICAgICAgICAqIGNvbnRl
bnRleHRlbnNpb25zL0ltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6OmlzVmFsaWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQU5vZGVCdWls
ZGVyOjpub2RlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0
YWJsZU5GQU5vZGVCdWlsZGVyOjphZGRUcmFuc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6YWRkRXBzaWxvblRyYW5z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5G
QU5vZGVCdWlsZGVyOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6On5J
bW11dGFibGVORkFOb2RlQnVpbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXI6Om9wZXJhdG9yPSk6IERlbGV0
ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvVGVybS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmdlbmVyYXRlR3JhcGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKToK
KyAgICAgICAgTm9kZSBidWlsZGluZyBjaGFuZ2VzIGEgYml0LgorCisgICAgICAgIFByZXZpb3Vz
bHksIGl0IHdhcyBhc3N1bWVkIG5vZGVzIGFyZSBhbHdheXMgYnVpbHQgZnJvbSBsZWZ0IHRvIHJp
Z2h0LgorICAgICAgICBHZXR0aW5nIHRoZSBub2RlIG9uIHRoZSByaWdodCB3YXMgZG9uZSBieSBw
cm92aWRpbmcgdGhlIGxlZnQgbm9kZSBhbmQgdGhlIHRlcm0KKyAgICAgICAgZG9pbmcgdGhlIHRy
YW5zaXRpb24uCisKKyAgICAgICAgTm93IHdlIGhhdmUgYm90aCBsZWZ0IHRvIHJpZ2h0IGFuZCBy
aWdodCB0byBsZWZ0IGdlbmVyYXRpb24uCisKKyAgICAgICAgVGhlIHJpZ2h0LXRvLWxlZnQgaGFz
IGEgc3BlY2lmaWMgcHJvcGVydHk6IG5vIGVkZ2UgY2FuIGJlIGFkZGVkIGFmdGVyCisgICAgICAg
IGl0J3MgaW5pdGlhbCB0ZXJtIChydWxlIDIgb2Ygb3VyIHJldmVyc2Ugc3VmZml4IHRyZWUpLiBU
aGlzIHNpbXBsaWZpZXMKKyAgICAgICAgdGhpbmdzIGEgYml0IHNpbmNlIHdlIGNhbiBmaW5hbGl6
ZSBhbGwgdGhlIG5vZGVzIGluIHRoZSBzdWZmaXggdHJlZS4KKyAgICAgICAgQWxsIHdlIG5lZWQg
aXMgdG8ga2VlcCB0aGVpciBJRCB0byBiZSBhYmxlIHRvIGxpbmsgbmV3IG5vZGVzCisgICAgICAg
IHRvIHRoZSByZXZlcnNlIHN1ZmZpeCB0cmVlLgorCiAyMDE1LTA3LTEzICBNYXR0aGV3IERhaXRl
ciAgPG1kYWl0ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBNZWRpYVBsYXllciBNZWRp
YSBTdHJlYW0gbWV0aG9kIHNpZ25hdHVyZXMgdG8gdXNlIHJlZmVyZW5jZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKaW5kZXgg
ZGFjZGIwYTk0OTBmOTQ3OWY3YWE4N2NiZjY0MGIzMzI4OWZiNWI0Mi4uZTM0NjE3MmQxODYzNWQ3
YWE4OGU5MzliOWVlMDMzZGI2MDg1ZmY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVj
dG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTYzOCwxMiArNjM4LDEyIEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICBWZWN0b3IoY29uc3QgVmVjdG9yJik7Ci0gICAgdGVtcGxh
dGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+
Ci0gICAgZXhwbGljaXQgVmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhl
ck92ZXJmbG93QmVoYXZpb3VyPiYpOworICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5
LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2Fw
YWNpdHk+CisgICAgZXhwbGljaXQgVmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5
LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eT4mKTsKIAogICAg
IFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvciYpOwotICAgIHRlbXBsYXRlPHNpemVfdCBv
dGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyPgotICAgIFZlY3Rv
ciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBvdGhlck92ZXJmbG93
QmVoYXZpb3VyPiYpOworICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFt
ZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+Cisg
ICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVy
T3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYpOwogCiAgICAgVmVjdG9y
KFZlY3RvciYmKTsKICAgICBWZWN0b3ImIG9wZXJhdG9yPShWZWN0b3ImJik7CkBAIC04MTksOCAr
ODE5LDggQEAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXIsIG1pbkNh
cGFjaXR5Pjo6VmVjdG9yKGNvbnN0IFZlY3RvciYgb3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIsIHNpemVf
dCBtaW5DYXBhY2l0eT4KLXRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBv
dGhlck92ZXJmbG93QmVoYXZpb3VyPgotVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxv
d0hhbmRsZXIsIG1pbkNhcGFjaXR5Pjo6VmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFj
aXR5LCBvdGhlck92ZXJmbG93QmVoYXZpb3VyPiYgb3RoZXIpCit0ZW1wbGF0ZTxzaXplX3Qgb3Ro
ZXJDYXBhY2l0eSwgdHlwZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgc2l6ZV90IG90aGVy
TWluaW11bUNhcGFjaXR5PgorVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRs
ZXIsIG1pbkNhcGFjaXR5Pjo6VmVjdG9yKGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5LCBv
dGhlck92ZXJmbG93QmVoYXZpb3VyLCBvdGhlck1pbmltdW1DYXBhY2l0eT4mIG90aGVyKQogICAg
IDogQmFzZShvdGhlci5jYXBhY2l0eSgpLCBvdGhlci5zaXplKCkpCiB7CiAgICAgYXNhblNldElu
aXRpYWxCdWZmZXJTaXplVG8ob3RoZXIuc2l6ZSgpKTsKQEAgLTg1NSw4ICs4NTUsOCBAQCBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBWZWN0
b3I8VCwgaW5saW5lQ2FwYWNpdAogaW5saW5lIGJvb2wgdHlwZWxlc3NQb2ludGVyc0FyZUVxdWFs
KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93
SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PgotdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNp
dHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+Ci1WZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpvcGVyYXRvcj0oY29uc3QgVmVj
dG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+JiBvdGhlcikKK3Rl
bXBsYXRlPHNpemVfdCBvdGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZp
b3VyLCBzaXplX3Qgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+CitWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+JiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpvcGVyYXRvcj0oY29uc3QgVmVjdG9y
PFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNh
cGFjaXR5PiYgb3RoZXIpCiB7CiAgICAgLy8gSWYgdGhlIGlubGluZSBjYXBhY2l0aWVzIG1hdGNo
LCB3ZSBzaG91bGQgY2FsbCB0aGUgbW9yZSBzcGVjaWZpYwogICAgIC8vIHRlbXBsYXRlLiAgSWYg
dGhlIGlubGluZSBjYXBhY2l0aWVzIGRvbid0IG1hdGNoLCB0aGUgdHdvIG9iamVjdHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAx
MTMxZjg4MjkwNjUyMjY5ZjU4MjU5YThlMTFiYTI0MzNlMTAyODBmLi40Yzk2YWQ3NjdjMDFiODM5
MDg1ODEzMzYzNDViZGM1MmQ2ODg5MjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDQwLDYgKzEwNDAsNyBAQAogCQkyNkU5
NDREOTFBQzRCMkREMDA3Qjg1QjUgLyogQ29tYmluZWRVUkxGaWx0ZXJzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU5NDRENTFBQzRCMkREMDA3Qjg1
QjUgLyogQ29tYmluZWRVUkxGaWx0ZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjZFOTQ0REQxQUM0QjRFQTAwN0I4NUI1IC8qIFRlcm0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTk0NERDMUFD
NEI0RUEwMDdCODVCNSAvKiBUZXJtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMjZFOThBMTAxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FT
Q0lJRmFzdFBhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI2RTk4QTBGMTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmgg
Ki87IH07CisJCTI2RUE4OUE3MUI0RjJCNzUwMDhDNUZEMiAvKiBIYXNoYWJsZUFjdGlvbkxpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RUE4OUE2
MUI0RjJCNzUwMDhDNUZEMiAvKiBIYXNoYWJsZUFjdGlvbkxpc3QuaCAqLzsgfTsKIAkJMjZGMEM4
OTcxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGMEM4OTUxQTJFNzI0QjAw
Mjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwICovOyB9OwogCQkyNkYwQzg5ODFB
MkU3MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGMEM4OTYxQTJFNzI0QjAwMjc5NEY4
IC8qIENvbnRlbnRFeHRlbnNpb25QYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkyNkYwQzg5QjFBMkVDMTEwMDAyNzk0RjggLyogQ29udGVu
dEV4dGVuc2lvblJ1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjZGMEM4OTkxQTJFQzExMDAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25SdWxl
LmNwcCAqLzsgfTsKQEAgLTgxOTAsNiArODE5MSw3IEBACiAJCTI2RTk0NEQ1MUFDNEIyREQwMDdC
ODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29tYmluZWRVUkxGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI2RTk0NERDMUFDNEI0RUEwMDdCODVCNSAvKiBUZXJtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRlcm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZFOThB
MEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNkVBODlBNjFCNEYyQjc1MDA4QzVGRDIgLyogSGFzaGFi
bGVBY3Rpb25MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hhYmxl
QWN0aW9uTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkYwQzg5NTFBMkU3
MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZGMEM4OTYxQTJFNzI0QjAwMjc5NEY4IC8qIENvbnRl
bnRFeHRlbnNpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29u
dGVudEV4dGVuc2lvblBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkYw
Qzg5OTFBMkVDMTEwMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU3MTYsNiArMTU3MTgsNyBAQAogCQkJCTI2
QTUxN0ZDMUFCOTIyMzgwMDYzMzVERiAvKiBERkFNaW5pbWl6ZXIuaCAqLywKIAkJCQkyNkQ0RTg0
NTFCNDI1MzlEMDBFMDMzQTIgLyogREZBTm9kZS5jcHAgKi8sCiAJCQkJMjY3NzI1RjkxQTVCM0FE
OTAwM0MyNEREIC8qIERGQU5vZGUuaCAqLywKKwkJCQkyNkVBODlBNjFCNEYyQjc1MDA4QzVGRDIg
LyogSGFzaGFibGVBY3Rpb25MaXN0LmggKi8sCiAJCQkJMjZGNzU2QjIxQjNCNjZGNzAwMDVERDc5
IC8qIEltbXV0YWJsZU5GQS5oICovLAogCQkJCTI2Rjc1NkI0MUIzQjY4RjIwMDA1REQ3OSAvKiBJ
bW11dGFibGVORkFOb2RlQnVpbGRlci5oICovLAogCQkJCTI2Rjc1NkFFMUIzQjY1QUMwMDA1REQ3
OSAvKiBNdXRhYmxlUmFuZ2UuaCAqLywKQEAgLTI3MjU1LDYgKzI3MjU4LDcgQEAKIAkJCQkwNzA5
RDc4RjFBRTU1NTU0MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDcwOUQ3OTUxQUU1NUEyOTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDlENzkzMUFFNTU1N0UwMDRFNDJG
OCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmggaW4gSGVhZGVycyAqLywKKwkJCQkyNkVB
ODlBNzFCNEYyQjc1MDA4QzVGRDIgLyogSGFzaGFibGVBY3Rpb25MaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMUEzMTYyRDEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5n
RXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUNDMEI2QjE4QkVBMUZGMDA2Q0VCQ0MgLyog
V2ViUmVwbGF5SW5wdXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAyQzVERjEzMDQ5QjM1MDBG
QzdENTMgLyogV2ViU2FmZUdDQWN0aXZpdHlDYWxsYmFja0lPUy5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZp
bHRlcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxG
aWx0ZXJzLmNwcAppbmRleCA4YTlhZTk5OGM4NGFlZWE3MTdhOWRlZjY4YTQyOGRjNTA1YjRhNjgw
Li4yYjQwNjU3MzBkYjliYTZkMjIxZjRmYjA2YmU0OTliNzhjNWRhNmEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5j
cHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAK
KyNpbmNsdWRlICJIYXNoYWJsZUFjdGlvbkxpc3QuaCIKICNpbmNsdWRlICJUZXJtLmgiCiAjaW5j
bHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00OCw2ICs0
OSwxOSBAQCBzdHJ1Y3QgUHJlZml4VHJlZVZlcnRleCB7CiAgICAgUHJlZml4VHJlZUVkZ2VzIGVk
Z2VzOwogfTsKIAorc3RydWN0IFJldmVyc2VTdWZmaXhUcmVlVmVydGV4Oworc3RydWN0IFJldmVy
c2VTdWZmaXhUcmVlRWRnZSB7CisgICAgY29uc3QgVGVybSogdGVybTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXg+IGNoaWxkOworfTsKK3R5cGVkZWYgVmVjdG9y
PFJldmVyc2VTdWZmaXhUcmVlRWRnZSwgMCwgV1RGOjpDcmFzaE9uT3ZlcmZsb3csIDE+IFJldmVy
c2VTdWZmaXhUcmVlRWRnZXM7CisKK3N0cnVjdCBSZXZlcnNlU3VmZml4VHJlZVZlcnRleCB7Cisg
ICAgUmV2ZXJzZVN1ZmZpeFRyZWVFZGdlcyBlZGdlczsKKyAgICB1aW50MzJfdCBub2RlSWQ7Cit9
OwordHlwZWRlZiBIYXNoTWFwPEhhc2hhYmxlQWN0aW9uTGlzdCwgUmV2ZXJzZVN1ZmZpeFRyZWVW
ZXJ0ZXgsIEhhc2hhYmxlQWN0aW9uTGlzdEhhc2gsIEhhc2hhYmxlQWN0aW9uTGlzdEhhc2hUcmFp
dHM+IFJldmVyc2VTdWZmaXhUcmVlUm9vdHM7CisKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVS
Rk9STUFOQ0VfUkVQT1JUSU5HCiBzdGF0aWMgc2l6ZV90IHJlY3Vyc2l2ZU1lbW9yeVVzZWQoY29u
c3QgUHJlZml4VHJlZVZlcnRleCYgdmVydGV4KQogewpAQCAtMjA2LDM5ICsyMjAsMTg2IEBAIHZv
aWQgQ29tYmluZWRVUkxGaWx0ZXJzOjphZGRQYXR0ZXJuKHVpbnQ2NF90IGFjdGlvbklkLCBjb25z
dCBWZWN0b3I8VGVybT4mIHBhdHRlCiAgICAgICAgIGFjdGlvbnMuYXBwZW5kKGFjdGlvbklkKTsK
IH0KIAotc3RhdGljIHZvaWQgZ2VuZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbmZhLCBJbW11dGFi
bGVDaGFyTkZBTm9kZUJ1aWxkZXImJiBzdWJ0cmVlUm9vdCwgUHJlZml4VHJlZVZlcnRleCYgcm9v
dCwgSGFzaE1hcDxjb25zdCBQcmVmaXhUcmVlVmVydGV4KiwgQWN0aW9uTGlzdD4mIGFjdGlvbnMs
IHNpemVfdCBtYXhORkFTaXplKQorc3RydWN0IEFjdGl2ZVN1YnRyZWUgeworICAgIEFjdGl2ZVN1
YnRyZWUoUHJlZml4VHJlZVZlcnRleCYgdmVydGV4LCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxk
ZXImJiBuZmFOb2RlLCB1bnNpZ25lZCBlZGdlSW5kZXgpCisgICAgICAgIDogdmVydGV4KHZlcnRl
eCkKKyAgICAgICAgLCBuZmFOb2RlKFdURjo6bW92ZShuZmFOb2RlKSkKKyAgICAgICAgLCBlZGdl
SW5kZXgoZWRnZUluZGV4KQorICAgIHsKKyAgICB9CisgICAgUHJlZml4VHJlZVZlcnRleCYgdmVy
dGV4OworICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBuZmFOb2RlOworICAgIHVuc2ln
bmVkIGVkZ2VJbmRleDsKK307CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRlSW5maXhVbnN1aXRhYmxl
Rm9yUmV2ZXJzZVN1ZmZpeFRyZWUoTkZBJiBuZmEsIFZlY3RvcjxBY3RpdmVTdWJ0cmVlPiYgc3Rh
Y2ssIGNvbnN0IEhhc2hNYXA8Y29uc3QgUHJlZml4VHJlZVZlcnRleCosIEFjdGlvbkxpc3Q+JiBh
Y3Rpb25zKQoreworICAgIC8vIFRvIGF2b2lkIGNvbmZsaWN0cywgd2UgdXNlIHRoZSByZXZlcnNl
IHN1ZmZpeCB0cmVlIGZvciBzdWJ0cmVlcyB0aGF0IGRvIG5vdCBtZXJnZQorICAgIC8vIGluIHRo
ZSBwcmVmaXggdHJlZS4KKyAgICAvLworICAgIC8vIFdlIG9ubHkgdW5pZnkgdGhlIHN1ZmZpeGVz
IHRvIHRoZSBhY3Rpb25zIG9uIHRoZSBsZWFmLgorICAgIC8vIElmIHRoZXJlIGFyZSBhY3Rpb25z
IGluc2lkZSB0aGUgdHJlZSwgd2UgZ2VuZXJhdGUgdGhlIHBhcnQgb2YgdGhlIHN1YnRyZWUgdXAg
dG8gdGhlIGFjdGlvbi4KKyAgICAvLworICAgIC8vIElmIHdlIGFjY2lkZW50YWxseSBpbnNlcnQg
YSBub2RlIHdpdGggYWN0aW9uIGluc2lkZSB0aGUgcmV2ZXJzZS1zdWZmaXgtdHJlZSwgd2Ugd291
bGQgY3JlYXRlCisgICAgLy8gbmV3IGFjdGlvbnMgb24gdW5yZWxhdGVkIHBhdHRlcm4gd2hlbiB1
bmlmeWluZyB0aGVpciBzdWZmaXhlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFjay5zaXpl
KCkgLSAxOyBpLS07KSB7CisgICAgICAgIEFjdGl2ZVN1YnRyZWUmIGFjdGl2ZVN1YnRyZWUgPSBz
dGFja1tpXTsKKyAgICAgICAgaWYgKGFjdGl2ZVN1YnRyZWUubmZhTm9kZS5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdF
KGkgPiAwLCAiVGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgbXVzdCBiZSB0aGUgcm9vdCBvZiBvdXIg
Zml4ZWQtbGVuZ3RoIHN1YnRyZWUuIEl0IHNob3VsZCBoYXZlIGl0IHRoZSBpc1ZhbGlkKCkgY2Fz
ZSBhYm92ZS4iKTsKKworICAgICAgICBhdXRvIGFjdGlvbnNJdGVyYXRvciA9IGFjdGlvbnMuZmlu
ZCgmYWN0aXZlU3VidHJlZS52ZXJ0ZXgpOworICAgICAgICBib29sIGhhc0FjdGlvbkluc2lkZVRy
ZWUgPSBhY3Rpb25zSXRlcmF0b3IgIT0gYWN0aW9ucy5lbmQoKTsKKworICAgICAgICAvLyBTdHJp
Y3RvIHNlbnN1LCB3ZSBzaG91bGQgY291bnQgdGhlIG51bWJlciBvZiBleGl0IGVkZ2VzIHdpdGgg
Zml4ZWQgbGVuZ3RoLgorICAgICAgICAvLyBUaGF0IGlzIGNvc3RseSBhbmQgdW5saWtlbHkgdG8g
bWF0dGVyIGluIHByYWN0aWNlLgorICAgICAgICBib29sIGhhc1NpbmdsZU91dGNvbWUgPSBhY3Rp
dmVTdWJ0cmVlLnZlcnRleC5lZGdlcy5zaXplKCkgPT0gMTsKKworICAgICAgICBpZiAoaGFzQWN0
aW9uSW5zaWRlVHJlZSB8fCAhaGFzU2luZ2xlT3V0Y29tZSkgeworICAgICAgICAgICAgLy8gR28g
YmFjayB0byB0aGUgZW5kIG9mIHRoZSBzdWJ0cmVlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBnZW5l
cmF0ZWQuCisgICAgICAgICAgICAvLyBGcm9tIHRoZXJlLCBnZW5lcmF0ZSBldmVyeXRoaW5nIHVw
IHRvIHRoZSB2ZXJ0ZXggd2UgZm91bmQuCisgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBpOwor
ICAgICAgICAgICAgdW5zaWduZWQgYmVnaW5uaW5nID0gZW5kOworCisgICAgICAgICAgICBBY3Rp
dmVTdWJ0cmVlKiBzb3VyY2VBY3RpdmVTdWJ0cmVlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHdo
aWxlIChiZWdpbm5pbmctLSkgeworICAgICAgICAgICAgICAgIEFjdGl2ZVN1YnRyZWUmIGFjdGl2
ZVN1YnRyZWUgPSBzdGFja1tiZWdpbm5pbmddOworICAgICAgICAgICAgICAgIGlmIChhY3RpdmVT
dWJ0cmVlLm5mYU5vZGUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZUFj
dGl2ZVN1YnRyZWUgPSAmYWN0aXZlU3VidHJlZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShzb3VyY2VBY3RpdmVTdWJ0cmVlLCAiVGhlIHJvb3Qgc2hvdWxkIGFsd2F5cyBo
YXZlIGEgdmFsaWQgZ2VuZXJhdG9yLiIpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN0
YWNrSW5kZXggPSBiZWdpbm5pbmcgKyAxOyBzdGFja0luZGV4IDw9IGVuZDsgKytzdGFja0luZGV4
KSB7CisgICAgICAgICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2VO
b2RlID0gc291cmNlQWN0aXZlU3VidHJlZS0+bmZhTm9kZTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoc291cmNlTm9kZS5pc1ZhbGlkKCkpOworICAgICAgICAgICAgICAgIGF1dG8mIGVkZ2UgPSBz
b3VyY2VBY3RpdmVTdWJ0cmVlLT52ZXJ0ZXguZWRnZXNbc291cmNlQWN0aXZlU3VidHJlZS0+ZWRn
ZUluZGV4XTsKKworICAgICAgICAgICAgICAgIEFjdGl2ZVN1YnRyZWUmIGRlc3RpbmF0aW9uQWN0
aXZlU3VidHJlZSA9IHN0YWNrW3N0YWNrSW5kZXhdOworICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uQWN0aXZlU3VidHJlZS5uZmFOb2RlID0gZWRnZS50ZXJtLT5nZW5lcmF0ZUdyYXBoKG5mYSwg
c291cmNlTm9kZSwgYWN0aW9ucy5nZXQoJmRlc3RpbmF0aW9uQWN0aXZlU3VidHJlZS52ZXJ0ZXgp
KTsKKworICAgICAgICAgICAgICAgIHNvdXJjZUFjdGl2ZVN1YnRyZWUgPSAmZGVzdGluYXRpb25B
Y3RpdmVTdWJ0cmVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRlU3VmZml4V2l0aFJldmVyc2VT
dWZmaXhUcmVlKE5GQSYgbmZhLCBWZWN0b3I8QWN0aXZlU3VidHJlZT4mIHN0YWNrLCBjb25zdCBI
YXNoTWFwPGNvbnN0IFByZWZpeFRyZWVWZXJ0ZXgqLCBBY3Rpb25MaXN0PiYgYWN0aW9ucywgUmV2
ZXJzZVN1ZmZpeFRyZWVSb290cyYgcmV2ZXJzZVN1ZmZpeFRyZWVSb290cykKK3sKKyAgICBBY3Rp
dmVTdWJ0cmVlJiBsZWFmU3VidHJlZSA9IHN0YWNrLmxhc3QoKTsKKyAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCFsZWFmU3VidHJlZS5uZmFOb2RlLmlzVmFsaWQoKSwgIlRoZSBsZWFmIHNob3VsZCBu
ZXZlciBiZSBnZW5lcmF0ZWQgYnkgdGhlIGNvZGUgYWJvdmUsIGl0IHNob3VsZCBhbHdheXMgYmUg
aW5zZXJ0ZWQgaW50byB0aGUgcHJlZml4IHRyZWUuIik7CisKKyAgICBBY3Rpb25MaXN0IGFjdGlv
bkxpc3QgPSBhY3Rpb25zLmdldCgmbGVhZlN1YnRyZWUudmVydGV4KTsKKyAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKCFhY3Rpb25MaXN0LmlzRW1wdHkoKSwgIk91ciBwcmVmaXggdHJlZSBzaG91bGQg
YWx3YXlzIGhhdmUgYWN0aW9ucyBvbiB0aGUgbGVhdmVzIGJ5IGNvbnN0cnVjdGlvbi4iKTsKKwor
ICAgIEhhc2hhYmxlQWN0aW9uTGlzdCBoYXNoYWJsZUFjdGlvbkxpc3QoYWN0aW9uTGlzdCk7Cisg
ICAgYXV0byByb290QWRkUmVzdWx0ID0gcmV2ZXJzZVN1ZmZpeFRyZWVSb290cy5hZGQoaGFzaGFi
bGVBY3Rpb25MaXN0LCBSZXZlcnNlU3VmZml4VHJlZVZlcnRleCgpKTsKKyAgICBpZiAocm9vdEFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRl
ciBuZXdOb2RlKG5mYSk7CisgICAgICAgIG5ld05vZGUuc2V0QWN0aW9ucyhhY3Rpb25MaXN0LmJl
Z2luKCksIGFjdGlvbkxpc3QuZW5kKCkpOworICAgICAgICByb290QWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZS5ub2RlSWQgPSBuZXdOb2RlLm5vZGVJZCgpOworICAgIH0KKworICAgIFJldmVyc2VT
dWZmaXhUcmVlVmVydGV4KiBhY3RpdmVSZXZlcnNlU3VmZml4VHJlZVZlcnRleCA9ICZyb290QWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICB1aW50MzJfdCBkZXN0aW5hdGlvbk5vZGVJZCA9
IHJvb3RBZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm5vZGVJZDsKKworICAgIHVuc2lnbmVkIHN0
YWNrUG9zaXRpb24gPSBzdGFjay5zaXplKCkgLSAyOworICAgIHdoaWxlICh0cnVlKSB7CisgICAg
ICAgIEFjdGl2ZVN1YnRyZWUmIHNvdXJjZSA9IHN0YWNrW3N0YWNrUG9zaXRpb25dOworICAgICAg
ICBhdXRvJiBlZGdlID0gc291cmNlLnZlcnRleC5lZGdlc1tzb3VyY2UuZWRnZUluZGV4XTsKKwor
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBlbmQgY29uZGl0aW9uOiB3aGVuIHdlIG1lZXQgYSBub2Rl
IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQsCisgICAgICAgIC8vIHdlIGp1c3QgbmVl
ZCB0byBjb25uZWN0IG91ciBiYWNrd2FyZCB0cmVlIHRvIHRoZSBmb3J3YXJkIHRyZWUuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFdlICptdXN0IG5vdCogYWRkIHRoaXMgbGFzdCBub2RlIHRvIHRo
ZSByZXZlcnNlLXN1ZmZpeCB0cmVlLiBUaGF0IG5vZGUgY2FuIGhhdmUKKyAgICAgICAgLy8gdHJh
bnNpdGlvbnMgYmFjayB0byBlYXJsaWVyIHBhcnQgb2YgdGhlIHByZWZpeCB0cmVlLiBJZiB0aGUg
cHJlZml4IHRyZWUgImNhY2hlcyIKKyAgICAgICAgLy8gc3VjaCBub2RlLCBpdCB3b3VsZCBjcmVh
dGUgbmV3IHRyYW5zaXRpb25zIHRoYXQgZGlkIG5vdCBleGlzdCBpbiB0aGUgc291cmNlIGxhbmd1
YWdlLgorICAgICAgICBpZiAoc291cmNlLm5mYU5vZGUuaXNWYWxpZCgpKSB7CisgICAgICAgICAg
ICBzdGFjay5zaHJpbmsoc3RhY2tQb3NpdGlvbiArIDEpOworICAgICAgICAgICAgZWRnZS50ZXJt
LT5nZW5lcmF0ZUdyYXBoKG5mYSwgc291cmNlLm5mYU5vZGUsIGRlc3RpbmF0aW9uTm9kZUlkKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAtLXN0YWNrUG9zaXRpb247
CisKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghYWN0aW9ucy5jb250YWlucygmc291cmNl
LnZlcnRleCksICJBbnkgbm9kZSB3aXRoIGZpbmFsIGFjdGlvbnMgc2hvdWxkIGhhdmUgYmVlbiBj
cmVhdGVkIGJlZm9yZSBoaXR0aW5nIHRoZSByZXZlcnNlIHN1ZmZpeC10cmVlLiIpOworCisgICAg
ICAgIFJldmVyc2VTdWZmaXhUcmVlRWRnZSogZXhpc3RpbmdFZGdlID0gbnVsbHB0cjsKKyAgICAg
ICAgZm9yIChSZXZlcnNlU3VmZml4VHJlZUVkZ2UmIHBvdGVudGlhbEV4aXN0aW5nRWRnZSA6IGFj
dGl2ZVJldmVyc2VTdWZmaXhUcmVlVmVydGV4LT5lZGdlcykgeworICAgICAgICAgICAgaWYgKGVk
Z2UudGVybSA9PSBwb3RlbnRpYWxFeGlzdGluZ0VkZ2UudGVybSkgeworICAgICAgICAgICAgICAg
IGV4aXN0aW5nRWRnZSA9ICZwb3RlbnRpYWxFeGlzdGluZ0VkZ2U7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXhpc3RpbmdF
ZGdlKQorICAgICAgICAgICAgYWN0aXZlUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXggPSBleGlzdGlu
Z0VkZ2UtPmNoaWxkLmdldCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEltbXV0YWJs
ZUNoYXJORkFOb2RlQnVpbGRlciBuZXdOb2RlKG5mYSk7CisgICAgICAgICAgICBlZGdlLnRlcm0t
PmdlbmVyYXRlR3JhcGgobmZhLCBuZXdOb2RlLCBkZXN0aW5hdGlvbk5vZGVJZCk7CisgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXg+IG5ld1ZlcnRleChu
ZXcgUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXgoKSk7CisgICAgICAgICAgICBuZXdWZXJ0ZXgtPm5v
ZGVJZCA9IG5ld05vZGUubm9kZUlkKCk7CisKKyAgICAgICAgICAgIFJldmVyc2VTdWZmaXhUcmVl
VmVydGV4KiBuZXdWZXJ0ZXhBZGRyZXNzID0gbmV3VmVydGV4LmdldCgpOworICAgICAgICAgICAg
YWN0aXZlUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXgtPmVkZ2VzLmFwcGVuZChSZXZlcnNlU3VmZml4
VHJlZUVkZ2UoeyBlZGdlLnRlcm0sIFdURjo6bW92ZShuZXdWZXJ0ZXgpIH0pKTsKKyAgICAgICAg
ICAgIGFjdGl2ZVJldmVyc2VTdWZmaXhUcmVlVmVydGV4ID0gbmV3VmVydGV4QWRkcmVzczsKKyAg
ICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbk5vZGVJZCA9IGFjdGl2ZVJldmVyc2VTdWZmaXhU
cmVlVmVydGV4LT5ub2RlSWQ7CisKKyAgICAgICAgQVNTRVJUKHNvdXJjZS52ZXJ0ZXguZWRnZXMu
c2l6ZSgpID09IDEpOworICAgICAgICBzb3VyY2UudmVydGV4LmVkZ2VzLmNsZWFyKCk7CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIHZvaWQg
Y2xlYXJSZXZlcnNlU3VmZml4VHJlZShSZXZlcnNlU3VmZml4VHJlZVJvb3RzJiByZXZlcnNlU3Vm
Zml4VHJlZVJvb3RzKQoreworICAgIC8vIFdlIGNhbm5vdCByZWx5IG9uIHRoZSBkZXN0cnVjdG9y
IGJlaW5nIGNhbGxlZCBpbiBvcmRlciBmcm9tIHRvcCB0byBib3R0b20gYXMgd2UgbWF5IG92ZXJm
bG93CisgICAgLy8gdGhlIHN0YWNrLiBJbnN0ZWFkLCB3ZSBnbyBkZXB0aCBmaXJzdCBpbiB0aGUg
cmV2ZXJzZS1zdWZmaXgtdHJlZS4KKworICAgIGZvciAoYXV0byYgc2xvdCA6IHJldmVyc2VTdWZm
aXhUcmVlUm9vdHMpIHsKKyAgICAgICAgVmVjdG9yPFJldmVyc2VTdWZmaXhUcmVlVmVydGV4Kiwg
MTI4PiBzdGFjazsKKyAgICAgICAgc3RhY2suYXBwZW5kKCZzbG90LnZhbHVlKTsKKworICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXgqIHRv
cCA9IHN0YWNrLmxhc3QoKTsKKyAgICAgICAgICAgIGlmICh0b3AtPmVkZ2VzLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBzdGFjay5sYXN0KCktPmVkZ2VzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZCh0b3AtPmVkZ2VzLmxhc3QoKS5jaGls
ZC5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV2ZXJzZVN1ZmZpeFRyZWVSb290cy5j
bGVhcigpOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEs
IEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYmIHN1YnRyZWVSb290LCBQcmVmaXhUcmVlVmVy
dGV4JiByb290LCBjb25zdCBIYXNoTWFwPGNvbnN0IFByZWZpeFRyZWVWZXJ0ZXgqLCBBY3Rpb25M
aXN0PiYgYWN0aW9ucywgc2l6ZV90IG1heE5GQVNpemUpCiB7CiAgICAgLy8gVGhpcyByZWN1cnNl
cyB0aGUgc3VidHJlZSBvZiB0aGUgcHJlZml4IHRyZWUuCiAgICAgLy8gRm9yIGVhY2ggZWRnZSB0
aGF0IGhhcyBmaXhlZCBsZW5ndGggKG5vIHF1YW50aWZpZXJzIGxpa2UgPywgKiwgb3IgKykgaXQg
Z2VuZXJhdGVzIHRoZSBuZmEgZ3JhcGgsCiAgICAgLy8gcmVjdXJzZXMgaW50byBjaGlsZHJlbiwg
YW5kIGRlbGV0ZXMgYW55IHByb2Nlc3NlZCBsZWFmIG5vZGVzLgotICAgIHN0cnVjdCBBY3RpdmVT
dWJ0cmVlIHsKLSAgICAgICAgQWN0aXZlU3VidHJlZShQcmVmaXhUcmVlVmVydGV4JiB2ZXJ0ZXgs
IEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYmIG5mYU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRl
eCkKLSAgICAgICAgICAgIDogdmVydGV4KHZlcnRleCkKLSAgICAgICAgICAgICwgbmZhTm9kZShX
VEY6Om1vdmUobmZhTm9kZSkpCi0gICAgICAgICAgICAsIGVkZ2VJbmRleChlZGdlSW5kZXgpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBQcmVmaXhUcmVlVmVydGV4JiB2ZXJ0ZXg7Ci0g
ICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBuZmFOb2RlOwotICAgICAgICB1bnNp
Z25lZCBlZGdlSW5kZXg7Ci0gICAgfTsKKworICAgIFJldmVyc2VTdWZmaXhUcmVlUm9vdHMgcmV2
ZXJzZVN1ZmZpeFRyZWVSb290czsKICAgICBWZWN0b3I8QWN0aXZlU3VidHJlZT4gc3RhY2s7CiAg
ICAgaWYgKCFyb290LmVkZ2VzLmlzRW1wdHkoKSkKICAgICAgICAgc3RhY2suYXBwZW5kKEFjdGl2
ZVN1YnRyZWUocm9vdCwgV1RGOjptb3ZlKHN1YnRyZWVSb290KSwgMCkpOworCiAgICAgYm9vbCBu
ZmFUb29CaWcgPSBmYWxzZTsKICAgICAKICAgICAvLyBHZW5lcmF0ZSBncmFwaHMgZm9yIGVhY2gg
c3VidHJlZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IHF1YW50aWZpZXJzLgogICAgIHdoaWxl
ICghc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgmIHZlcnRleCA9
IHN0YWNrLmxhc3QoKS52ZXJ0ZXg7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGVkZ2VJbmRleCA9
IHN0YWNrLmxhc3QoKS5lZGdlSW5kZXg7Ci0gICAgICAgIAotICAgICAgICAvLyBPbmx5IHN0b3Ag
Z2VuZXJhdGluZyBhbiBORkEgYXQgYSBsZWFmIHRvIGVuc3VyZSB3ZSBoYXZlIGEgY29ycmVjdCBO
RkEuIFdlIGNvdWxkIGdvIHNsaWdodGx5IG92ZXIgdGhlIG1heE5GQVNpemUuCi0gICAgICAgIGlm
ICh2ZXJ0ZXguZWRnZXMuaXNFbXB0eSgpICYmIG5mYS5ub2Rlcy5zaXplKCkgPiBtYXhORkFTaXpl
KQotICAgICAgICAgICAgbmZhVG9vQmlnID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgaWYg
KGVkZ2VJbmRleCA8IHZlcnRleC5lZGdlcy5zaXplKCkpIHsKICAgICAgICAgICAgIGF1dG8mIGVk
Z2UgPSB2ZXJ0ZXguZWRnZXNbZWRnZUluZGV4XTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAg
ICAvLyBDbGVhbiB1cCBhbnkgcHJvY2Vzc2VkIGxlYXZlcyBhbmQgcmV0dXJuIGVhcmx5IGlmIHdl
IGFyZSBwYXN0IHRoZSBtYXhORkFTaXplLgogICAgICAgICAgICAgaWYgKG5mYVRvb0JpZykgewog
ICAgICAgICAgICAgICAgIHN0YWNrLmxhc3QoKS5lZGdlSW5kZXggPSBzdGFjay5sYXN0KCkudmVy
dGV4LmVkZ2VzLnNpemUoKTsKQEAgLTI1MSwxNyArNDEyLDI4IEBAIHN0YXRpYyB2b2lkIGdlbmVy
YXRlTkZBRm9yU3VidHJlZShORkEmIG5mYSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiYg
c3VidHJlCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLQotICAg
ICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5ld05vZGUgPSBlZGdlLnRlcm0t
PmdlbmVyYXRlR3JhcGgobmZhLCBzdGFjay5sYXN0KCkubmZhTm9kZSwgYWN0aW9ucy5nZXQoZWRn
ZS5jaGlsZC5nZXQoKSkpOwogICAgICAgICAgICAgQVNTRVJUKGVkZ2UuY2hpbGQuZ2V0KCkpOwot
ICAgICAgICAgICAgc3RhY2suYXBwZW5kKEFjdGl2ZVN1YnRyZWUoKmVkZ2UuY2hpbGQuZ2V0KCks
IFdURjo6bW92ZShuZXdOb2RlKSwgMCkpOworICAgICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5v
ZGVCdWlsZGVyIGVtcHR5QnVpbGRlcjsKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZChBY3RpdmVT
dWJ0cmVlKCplZGdlLmNoaWxkLmdldCgpLCBXVEY6Om1vdmUoZW1wdHlCdWlsZGVyKSwgMCkpOwog
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCBpc0xlYWYgPSB2ZXJ0ZXguZWRnZXMu
aXNFbXB0eSgpOworCiAgICAgICAgICAgICBBU1NFUlQoZWRnZUluZGV4ID09IHZlcnRleC5lZGdl
cy5zaXplKCkpOwogICAgICAgICAgICAgdmVydGV4LmVkZ2VzLnJlbW92ZUFsbE1hdGNoaW5nKFtd
KFByZWZpeFRyZWVFZGdlJiBlZGdlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiAhZWRnZS50ZXJtOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBzdGFjay5yZW1v
dmVMYXN0KCk7CisKKyAgICAgICAgICAgIGlmIChpc0xlYWYpIHsKKyAgICAgICAgICAgICAgICBn
ZW5lcmF0ZUluZml4VW5zdWl0YWJsZUZvclJldmVyc2VTdWZmaXhUcmVlKG5mYSwgc3RhY2ssIGFj
dGlvbnMpOworICAgICAgICAgICAgICAgIGdlbmVyYXRlU3VmZml4V2l0aFJldmVyc2VTdWZmaXhU
cmVlKG5mYSwgc3RhY2ssIGFjdGlvbnMsIHJldmVyc2VTdWZmaXhUcmVlUm9vdHMpOworCisgICAg
ICAgICAgICAgICAgLy8gT25seSBzdG9wIGdlbmVyYXRpbmcgYW4gTkZBIGF0IGEgbGVhZiB0byBl
bnN1cmUgd2UgaGF2ZSBhIGNvcnJlY3QgTkZBLiBXZSBjb3VsZCBnbyBzbGlnaHRseSBvdmVyIHRo
ZSBtYXhORkFTaXplLgorICAgICAgICAgICAgICAgIGlmIChuZmEubm9kZXMuc2l6ZSgpID4gbWF4
TkZBU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgbmZhVG9vQmlnID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKwogICAgICAg
ICAgICAgaWYgKCFzdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBhY3Rp
dmVTdWJ0cmVlID0gc3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgIGF1dG8mIGVkZ2UgPSBh
Y3RpdmVTdWJ0cmVlLnZlcnRleC5lZGdlc1tzdGFjay5sYXN0KCkuZWRnZUluZGV4XTsKQEAgLTI3
MSw2ICs0NDMsNyBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEs
IEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYmIHN1YnRyZQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQorICAgIGNsZWFyUmV2ZXJzZVN1ZmZpeFRyZWUocmV2ZXJzZVN1ZmZpeFRy
ZWVSb290cyk7CiB9CiAKIHZvaWQgQ29tYmluZWRVUkxGaWx0ZXJzOjpwcm9jZXNzTkZBcyhzaXpl
X3QgbWF4TkZBU2l6ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKE5GQSYmKT4gaGFuZGxlcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCmluZGV4IDk0NTM1YTdiYzEwODYyMGMy
YWQ4MThjY2U2OTAxN2QyZTU5OWM3M2MuLmQwMWNkMmFiYmNiNDEzMzUxNTU1MWZhZGZiYTM0NDA4
YWJmYjAwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcApAQCAt
MTQ3LDcgKzE0Nyw3IEBAIHZvaWQgREZBOjpkZWJ1Z1ByaW50RG90KCkgY29uc3QKICAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiJWxsdSIsIGFjdGlvbnNbYWN0aW9uSW5kZXhdKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBkYXRhTG9nRigiXSIpOworICAgICAgICBkYXRhTG9n
RigiPl0iKTsKIAogICAgICAgICBpZiAoIWFjdGlvbnMuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ZGF0YUxvZ0YoIiBbc2hhcGU9ZG91YmxlY2lyY2xlXSIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvSGFzaGFibGVBY3Rpb25MaXN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9IYXNoYWJsZUFjdGlvbkxpc3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
ZGI5ZDkzNjM3ZTE2ZGUwODFmYzA5Yjg1YjI5YTRmMjg4ZWZlNDAwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvSGFzaGFibGVBY3Rpb25MaXN0LmgK
QEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSGFzaGFibGVBY3Rpb25MaXN0
X2gKKyNkZWZpbmUgSGFzaGFibGVBY3Rpb25MaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9TdHJpbmdI
YXNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKworc3RydWN0IEhhc2hhYmxlQWN0aW9u
TGlzdCB7CisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFsdWUgfTsKKyAgICBl
eHBsaWNpdCBIYXNoYWJsZUFjdGlvbkxpc3QoRGVsZXRlZFZhbHVlVGFnKSB7IHN0YXRlID0gRGVs
ZXRlZDsgfQorCisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OworICAgIGV4
cGxpY2l0IEhhc2hhYmxlQWN0aW9uTGlzdChFbXB0eVZhbHVlVGFnKSB7IHN0YXRlID0gRW1wdHk7
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFueVZlY3RvclR5cGU+CisgICAgZXhwbGljaXQg
SGFzaGFibGVBY3Rpb25MaXN0KGNvbnN0IEFueVZlY3RvclR5cGUmIG90aGVyQWN0aW9ucykKKyAg
ICAgICAgOiBhY3Rpb25zKG90aGVyQWN0aW9ucykKKyAgICAgICAgLCBzdGF0ZShWYWxpZCkKKyAg
ICB7CisgICAgICAgIHN0ZDo6c29ydChhY3Rpb25zLmJlZ2luKCksIGFjdGlvbnMuZW5kKCkpOwor
ICAgICAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOworICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVy
c0Fzc3VtaW5nQWxpZ25lZChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oYWN0aW9ucy5k
YXRhKCkpLCBhY3Rpb25zLnNpemUoKSAqIHNpemVvZih1aW50NjRfdCkgLyBzaXplb2YoVUNoYXIp
KTsKKyAgICAgICAgaGFzaCA9IGhhc2hlci5oYXNoKCk7CisgICAgfQorCisgICAgYm9vbCBpc0Vt
cHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0ZSA9PSBFbXB0eTsgfQorICAgIGJvb2wgaXNE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBzdGF0ZSA9PSBEZWxldGVkOyB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaGFibGVBY3Rpb25MaXN0IG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRlID09IG90aGVyLnN0YXRlICYmIGFjdGlvbnMgPT0gb3Ro
ZXIuYWN0aW9uczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSGFzaGFibGVB
Y3Rpb25MaXN0IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50NjRfdD4gYWN0aW9uczsKKyAgICB1bnNp
Z25lZCBoYXNoOworICAgIGVudW0geworICAgICAgICBWYWxpZCwKKyAgICAgICAgRW1wdHksCisg
ICAgICAgIERlbGV0ZWQKKyAgICB9IHN0YXRlOworfTsKKworc3RydWN0IEhhc2hhYmxlQWN0aW9u
TGlzdEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEhhc2hhYmxlQWN0aW9u
TGlzdCYgYWN0aW9uS2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFjdGlvbktleS5oYXNoOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEhhc2hhYmxlQWN0aW9uTGlzdCYg
YSwgY29uc3QgSGFzaGFibGVBY3Rpb25MaXN0JiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEg
PT0gYjsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSBmYWxzZTsKK307CisKK3N0cnVjdCBIYXNoYWJsZUFjdGlvbkxpc3RIYXNoVHJh
aXRzIDogcHVibGljIFdURjo6Q3VzdG9tSGFzaFRyYWl0czxIYXNoYWJsZUFjdGlvbkxpc3Q+IHsK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0ltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmgKaW5kZXggN2ZmYWZjZWE0OWM0ZTYzNGVjY2E1
MGUyZTcxN2U1MjYxOTkxOThkNi4uN2I4NWNmZDhmYTQzNjliODdmNmIxMDVlMjczN2U0N2NjNDgz
OGJkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvSW1tdXRh
YmxlTkZBTm9kZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9JbW11dGFibGVORkFOb2RlQnVpbGRlci5oCkBAIC01Miw5ICs1Miw2IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIG1fbm9kZUlkID0gbV9pbW11dGFibGVORkEtPm5vZGVzLnNpemUoKTsKICAg
ICAgICAgbV9pbW11dGFibGVORkEtPm5vZGVzLmFwcGVuZChJbW11dGFibGVORkFOb2RlKCkpOwot
I2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgbV9pc0Rpc2Nvbm5lY3RlZCA9IHRydWU7Ci0j
ZW5kaWYKICAgICB9CiAKICAgICBJbW11dGFibGVORkFOb2RlQnVpbGRlcihJbW11dGFibGVORkFO
b2RlQnVpbGRlciYmIG90aGVyKQpAQCAtNjQsMjUgKzYxLDI4IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2FjdGlvbnMoV1RGOjptb3ZlKG90aGVyLm1fYWN0aW9ucykpCiAgICAgICAgICwgbV9ub2Rl
SWQob3RoZXIubV9ub2RlSWQpCiAgICAgICAgICwgbV9maW5hbGl6ZWQob3RoZXIubV9maW5hbGl6
ZWQpCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAsIG1faXNEaXNjb25uZWN0ZWQob3Ro
ZXIubV9pc0Rpc2Nvbm5lY3RlZCkKLSNlbmRpZgogICAgIHsKICAgICAgICAgb3RoZXIubV9pbW11
dGFibGVORkEgPSBudWxscHRyOwogICAgICAgICBvdGhlci5tX2ZpbmFsaXplZCA9IHRydWU7Ci0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBvdGhlci5tX2lzRGlzY29ubmVjdGVkID0gZmFs
c2U7Ci0jZW5kaWYKICAgICB9CiAKICAgICB+SW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIoKQogICAg
IHsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9pc0Rpc2Nvbm5lY3RlZCwgIlRoaXMg
bm9kZXMgaXMgbm90IGNvbm5lY3RlZCB0byBhbnl0aGluZyBhbmQgaXMgbm90IHJlYWNoZWQgYnkg
YW55IG90aGVyIG5vZGUuIik7Ci0KICAgICAgICAgaWYgKCFtX2ZpbmFsaXplZCkKICAgICAgICAg
ICAgIGZpbmFsaXplKCk7CiAgICAgfQogCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhIW1faW1tdXRhYmxlTkZBOworICAgIH0KKworICAgIHVpbnQzMl90
IG5vZGVJZCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fbm9kZUlkOworICAgIH0KKwogICAgIHN0cnVjdCBUcml2aWFsUmFuZ2Ugewog
ICAgICAgICBDaGFyYWN0ZXJUeXBlIGZpcnN0OwogICAgICAgICBDaGFyYWN0ZXJUeXBlIGxhc3Q7
CkBAIC0xMDgsMTUgKzEwOCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNFbmQ7CiAgICAg
fTsKIAotICAgIHZvaWQgYWRkVHJhbnNpdGlvbihDaGFyYWN0ZXJUeXBlIGZpcnN0LCBDaGFyYWN0
ZXJUeXBlIGxhc3QsIGNvbnN0IEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyJiB0YXJnZXQpCisgICAg
dm9pZCBhZGRUcmFuc2l0aW9uKENoYXJhY3RlclR5cGUgZmlyc3QsIENoYXJhY3RlclR5cGUgbGFz
dCwgdWludDMyX3QgdGFyZ2V0Tm9kZUlkKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2ZpbmFs
aXplZCk7CiAgICAgICAgIEFTU0VSVChtX2ltbXV0YWJsZU5GQSk7Ci0gICAgICAgIEFTU0VSVCht
X2ltbXV0YWJsZU5GQSA9PSB0YXJnZXQubV9pbW11dGFibGVORkEpOwotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgbV9pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlOwotICAgICAgICB0YXJnZXQu
bV9pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlOwotI2VuZGlmCiAKICAgICAgICAgc3RydWN0IENvbnZl
cnRlciB7CiAgICAgICAgICAgICBUYXJnZXRTZXQgY29udmVydCh1aW50MzJfdCB0YXJnZXQpCkBA
IC0xMzAsMTkgKzEyNSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIH07CiAgICAgICAgIAogICAgICAg
ICBDb252ZXJ0ZXIgY29udmVydGVyOwotICAgICAgICBtX3Jhbmdlcy5leHRlbmQoRmFrZVJhbmdl
SXRlcmF0b3IgeyB7IGZpcnN0LCBsYXN0IH0sIHRhcmdldC5tX25vZGVJZCwgZmFsc2UgfSwgRmFr
ZVJhbmdlSXRlcmF0b3IgeyB7IDAsIDAgfSwgdGFyZ2V0Lm1fbm9kZUlkLCB0cnVlIH0sIGNvbnZl
cnRlcik7CisgICAgICAgIG1fcmFuZ2VzLmV4dGVuZChGYWtlUmFuZ2VJdGVyYXRvciB7IHsgZmly
c3QsIGxhc3QgfSwgdGFyZ2V0Tm9kZUlkLCBmYWxzZSB9LCBGYWtlUmFuZ2VJdGVyYXRvciB7IHsg
MCwgMCB9LCB0YXJnZXROb2RlSWQsIHRydWUgfSwgY29udmVydGVyKTsKICAgICB9CiAKICAgICB2
b2lkIGFkZEVwc2lsb25UcmFuc2l0aW9uKGNvbnN0IEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyJiB0
YXJnZXQpCiAgICAgeworICAgICAgICBBU1NFUlQobV9pbW11dGFibGVORkEgPT0gdGFyZ2V0Lm1f
aW1tdXRhYmxlTkZBKTsKKyAgICAgICAgYWRkRXBzaWxvblRyYW5zaXRpb24odGFyZ2V0Lm1fbm9k
ZUlkKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZEVwc2lsb25UcmFuc2l0aW9uKHVpbnQzMl90IHRh
cmdldE5vZGVJZCkKKyAgICB7CiAgICAgICAgIEFTU0VSVCghbV9maW5hbGl6ZWQpOwogICAgICAg
ICBBU1NFUlQobV9pbW11dGFibGVORkEpOwotICAgICAgICBBU1NFUlQobV9pbW11dGFibGVORkEg
PT0gdGFyZ2V0Lm1faW1tdXRhYmxlTkZBKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAg
IG1faXNEaXNjb25uZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgdGFyZ2V0Lm1faXNEaXNjb25uZWN0
ZWQgPSBmYWxzZTsKLSNlbmRpZgotICAgICAgICBtX2Vwc2lsb25UcmFuc2l0aW9uVGFyZ2V0cy5h
ZGQodGFyZ2V0Lm1fbm9kZUlkKTsKKyAgICAgICAgbV9lcHNpbG9uVHJhbnNpdGlvblRhcmdldHMu
YWRkKHRhcmdldE5vZGVJZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWN0aW9u
SXRlcmF0b3I+CkBAIC0xNjgsMTAgKzE2NCw2IEBAIHB1YmxpYzoKIAogICAgICAgICBvdGhlci5t
X2ltbXV0YWJsZU5GQSA9IG51bGxwdHI7CiAgICAgICAgIG90aGVyLm1fZmluYWxpemVkID0gdHJ1
ZTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIG1faXNEaXNjb25uZWN0ZWQgPSBvdGhl
ci5tX2lzRGlzY29ubmVjdGVkOwotICAgICAgICBvdGhlci5tX2lzRGlzY29ubmVjdGVkID0gZmFs
c2U7Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApAQCAtMjMwLDkgKzIy
Miw2IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxBY3Rpb25UeXBlLCBXVEY6OkludEhhc2g8QWN0
aW9uVHlwZT4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8QWN0aW9uVHlwZT4+
IG1fYWN0aW9uczsKICAgICB1aW50MzJfdCBtX25vZGVJZDsKICAgICBib29sIG1fZmluYWxpemVk
IHsgdHJ1ZSB9OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtdXRhYmxlIGJvb2wgbV9pc0Rp
c2Nvbm5lY3RlZCB7IGZhbHNlIH07Ci0jZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Rlcm0uaCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL1Rlcm0uaAppbmRleCA2YzViODdjMDNlMWFmZTQzZWFlNzk0MWQ3ZTY2NTQx
MzdmMGZiY2VlLi5mMzdkODdjYjMxY2Q2MDUwNmJiNjU3NDdjZWNkMDA5OWIyMmYwNmEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oCkBAIC04Myw3ICs4Myw4IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgcXVhbnRpZnkoY29uc3QgQXRvbVF1YW50aWZpZXImKTsKIAotICAg
IEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBnZW5lcmF0ZUdyYXBoKE5GQSYsIEltbXV0YWJs
ZUNoYXJORkFOb2RlQnVpbGRlciYgc3RhcnQsIGNvbnN0IEFjdGlvbkxpc3QmIGZpbmFsQWN0aW9u
cykgY29uc3Q7CisgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGdlbmVyYXRlR3JhcGgo
TkZBJiwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UsIGNvbnN0IEFjdGlvbkxp
c3QmIGZpbmFsQWN0aW9ucykgY29uc3Q7CisgICAgdm9pZCBnZW5lcmF0ZUdyYXBoKE5GQSYsIElt
bXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgc291cmNlLCB1aW50MzJfdCBkZXN0aW5hdGlvbikg
Y29uc3Q7CiAKICAgICBib29sIGlzRW5kT2ZMaW5lQXNzZXJ0aW9uKCkgY29uc3Q7CiAKQEAgLTEx
OCw3ICsxMTksOCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGZh
bHNlIGZvciBhIGdyb3VwIGVxdWl2YWxlbnQgdG8gYSB1bml2ZXJzYWwgdHJhbnNpdGlvbi4KICAg
ICBib29sIGlzVW5pdmVyc2FsVHJhbnNpdGlvbigpIGNvbnN0OwogCi0gICAgSW1tdXRhYmxlQ2hh
ck5GQU5vZGVCdWlsZGVyIGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKE5GQSYsIEltbXV0YWJsZUNo
YXJORkFOb2RlQnVpbGRlciYgc291cmNlKSBjb25zdDsKKyAgICB2b2lkIGdlbmVyYXRlU3ViZ3Jh
cGhGb3JBdG9tKE5GQSYsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgc291cmNlLCBjb25z
dCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIGRlc3RpbmF0aW9uKSBjb25zdDsKKyAgICB2
b2lkIGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKE5GQSYsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVp
bGRlciYgc291cmNlLCB1aW50MzJfdCBkZXN0aW5hdGlvbikgY29uc3Q7CiAKICAgICB2b2lkIGRl
c3Ryb3koKTsKIApAQCAtMzc3LDUwICszNzksNTIgQEAgaW5saW5lIHZvaWQgVGVybTo6cXVhbnRp
ZnkoY29uc3QgQXRvbVF1YW50aWZpZXImIHF1YW50aWZpZXIpCiAgICAgbV9xdWFudGlmaWVyID0g
cXVhbnRpZmllcjsKIH0KIAotaW5saW5lIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBUZXJt
OjpnZW5lcmF0ZUdyYXBoKE5GQSYgbmZhLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHN0
YXJ0LCBjb25zdCBBY3Rpb25MaXN0JiBmaW5hbEFjdGlvbnMpIGNvbnN0CitpbmxpbmUgSW1tdXRh
YmxlQ2hhck5GQU5vZGVCdWlsZGVyIFRlcm06OmdlbmVyYXRlR3JhcGgoTkZBJiBuZmEsIEltbXV0
YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgc291cmNlLCBjb25zdCBBY3Rpb25MaXN0JiBmaW5hbEFj
dGlvbnMpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGlzVmFsaWQoKSk7CisgICAgSW1tdXRhYmxlQ2hh
ck5GQU5vZGVCdWlsZGVyIG5ld0VuZChuZmEpOworICAgIGdlbmVyYXRlR3JhcGgobmZhLCBzb3Vy
Y2UsIG5ld0VuZC5ub2RlSWQoKSk7CisgICAgbmV3RW5kLnNldEFjdGlvbnMoZmluYWxBY3Rpb25z
LmJlZ2luKCksIGZpbmFsQWN0aW9ucy5lbmQoKSk7CisgICAgcmV0dXJuIG5ld0VuZDsKK30KIAot
ICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBuZXdFbmQ7CitpbmxpbmUgdm9pZCBUZXJt
OjpnZW5lcmF0ZUdyYXBoKE5GQSYgbmZhLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHNv
dXJjZSwgdWludDMyX3QgZGVzdGluYXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzVmFsaWQo
KSk7CiAKICAgICBzd2l0Y2ggKG1fcXVhbnRpZmllcikgewogICAgIGNhc2UgQXRvbVF1YW50aWZp
ZXI6Ok9uZTogewotICAgICAgICBuZXdFbmQgPSBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEs
IHN0YXJ0KTsKKyAgICAgICAgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCBzb3VyY2UsIGRl
c3RpbmF0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXRvbVF1YW50aWZp
ZXI6Olplcm9Pck9uZTogewotICAgICAgICBuZXdFbmQgPSBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRv
bShuZmEsIHN0YXJ0KTsKLSAgICAgICAgc3RhcnQuYWRkRXBzaWxvblRyYW5zaXRpb24obmV3RW5k
KTsKKyAgICAgICAgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCBzb3VyY2UsIGRlc3RpbmF0
aW9uKTsKKyAgICAgICAgc291cmNlLmFkZEVwc2lsb25UcmFuc2l0aW9uKGRlc3RpbmF0aW9uKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Olplcm9Pck1v
cmU6IHsKICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIHJlcGVhdFN0YXJ0KG5m
YSk7Ci0gICAgICAgIHN0YXJ0LmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdFN0YXJ0KTsKKyAg
ICAgICAgc291cmNlLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdFN0YXJ0KTsKIAotICAgICAg
ICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgcmVwZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFw
aEZvckF0b20obmZhLCByZXBlYXRTdGFydCk7CisgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2Rl
QnVpbGRlciByZXBlYXRFbmQobmZhKTsKKyAgICAgICAgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20o
bmZhLCByZXBlYXRTdGFydCwgcmVwZWF0RW5kKTsKICAgICAgICAgcmVwZWF0RW5kLmFkZEVwc2ls
b25UcmFuc2l0aW9uKHJlcGVhdFN0YXJ0KTsKIAotICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9k
ZUJ1aWxkZXIga2xlZW5FbmQobmZhKTsKLSAgICAgICAgcmVwZWF0RW5kLmFkZEVwc2lsb25UcmFu
c2l0aW9uKGtsZWVuRW5kKTsKLSAgICAgICAgc3RhcnQuYWRkRXBzaWxvblRyYW5zaXRpb24oa2xl
ZW5FbmQpOwotICAgICAgICBuZXdFbmQgPSBXVEY6Om1vdmUoa2xlZW5FbmQpOworICAgICAgICBy
ZXBlYXRFbmQuYWRkRXBzaWxvblRyYW5zaXRpb24oZGVzdGluYXRpb24pOworICAgICAgICBzb3Vy
Y2UuYWRkRXBzaWxvblRyYW5zaXRpb24oZGVzdGluYXRpb24pOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6T25lT3JNb3JlOiB7CiAgICAgICAgIEltbXV0
YWJsZUNoYXJORkFOb2RlQnVpbGRlciByZXBlYXRTdGFydChuZmEpOwotICAgICAgICBzdGFydC5h
ZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRTdGFydCk7CisgICAgICAgIHNvdXJjZS5hZGRFcHNp
bG9uVHJhbnNpdGlvbihyZXBlYXRTdGFydCk7CiAKLSAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5v
ZGVCdWlsZGVyIHJlcGVhdEVuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5mYSwgcmVwZWF0
U3RhcnQpOworICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgcmVwZWF0RW5kKG5m
YSk7CisgICAgICAgIGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5mYSwgcmVwZWF0U3RhcnQsIHJl
cGVhdEVuZCk7CiAgICAgICAgIHJlcGVhdEVuZC5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRT
dGFydCk7CiAKLSAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGFmdGVyUmVwZWF0
KG5mYSk7Ci0gICAgICAgIHJlcGVhdEVuZC5hZGRFcHNpbG9uVHJhbnNpdGlvbihhZnRlclJlcGVh
dCk7Ci0gICAgICAgIG5ld0VuZCA9IFdURjo6bW92ZShhZnRlclJlcGVhdCk7CisgICAgICAgIHJl
cGVhdEVuZC5hZGRFcHNpbG9uVHJhbnNpdGlvbihkZXN0aW5hdGlvbik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICB9Ci0gICAgbmV3RW5kLnNldEFjdGlvbnMoZmluYWxBY3Rpb25zLmJlZ2lu
KCksIGZpbmFsQWN0aW9ucy5lbmQoKSk7Ci0gICAgcmV0dXJuIG5ld0VuZDsKIH0KIAogaW5saW5l
IGJvb2wgVGVybTo6aXNFbmRPZkxpbmVBc3NlcnRpb24oKSBjb25zdApAQCAtNTgyLDE0ICs1ODYs
MTkgQEAgaW5saW5lIGJvb2wgVGVybTo6aXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkgY29uc3QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIg
VGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFO
b2RlQnVpbGRlciYgc291cmNlKSBjb25zdAoraW5saW5lIHZvaWQgVGVybTo6Z2VuZXJhdGVTdWJn
cmFwaEZvckF0b20oTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgc291cmNl
LCBjb25zdCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIGRlc3RpbmF0aW9uKSBjb25zdAor
eworICAgIGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5mYSwgc291cmNlLCBkZXN0aW5hdGlvbi5u
b2RlSWQoKSk7Cit9CisKK2lubGluZSB2b2lkIFRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9t
KE5GQSYgbmZhLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHNvdXJjZSwgdWludDMyX3Qg
ZGVzdGluYXRpb24pIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX3Rlcm1UeXBlKSB7CiAgICAgY2Fz
ZSBUZXJtVHlwZTo6RW1wdHk6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm4gSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyKCk7CisgICAgICAgIHNvdXJjZS5h
ZGRFcHNpbG9uVHJhbnNpdGlvbihkZXN0aW5hdGlvbik7CisgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDogewotICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9k
ZUJ1aWxkZXIgbmV3Tm9kZShuZmEpOwogICAgICAgICBpZiAoIW1fYXRvbURhdGEuY2hhcmFjdGVy
U2V0LmludmVydGVkKCkpIHsKICAgICAgICAgICAgIFVDaGFyIGkgPSAwOwogICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKQEAgLTYwMiw3ICs2MTEsNyBAQCBpbmxpbmUgSW1tdXRhYmxlQ2hhck5G
QU5vZGVCdWlsZGVyIFRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKE5GQSYgbmZhLCBJbW11
dAogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IDEyOCAm
JiBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5nZXQoaSkpCiAgICAgICAgICAgICAgICAgICAgICsr
aTsKLSAgICAgICAgICAgICAgICBzb3VyY2UuYWRkVHJhbnNpdGlvbihzdGFydCwgaSAtIDEsIG5l
d05vZGUpOworICAgICAgICAgICAgICAgIHNvdXJjZS5hZGRUcmFuc2l0aW9uKHN0YXJ0LCBpIC0g
MSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgVUNoYXIgaSA9IDE7CkBAIC02MTYsMjcgKzYyNSwzMiBAQCBpbmxpbmUgSW1tdXRhYmxl
Q2hhck5GQU5vZGVCdWlsZGVyIFRlcm06OmdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKE5GQSYgbmZh
LCBJbW11dAogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8
IDEyOCAmJiAhbV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuZ2V0KGkpKQogICAgICAgICAgICAgICAg
ICAgICArK2k7Ci0gICAgICAgICAgICAgICAgc291cmNlLmFkZFRyYW5zaXRpb24oc3RhcnQsIGkg
LSAxLCBuZXdOb2RlKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWRkVHJhbnNpdGlvbihzdGFy
dCwgaSAtIDEsIGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbmV3Tm9kZTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVGVybVR5
cGU6Okdyb3VwOiB7CiAgICAgICAgIGlmIChtX2F0b21EYXRhLmdyb3VwLnRlcm1zLmlzRW1wdHko
KSkgewogICAgICAgICAgICAgLy8gRklYTUU6IGFueSBraW5kIG9mIGVtcHR5IHRlcm0gY291bGQg
YmUgYXZvaWRlZCBpbiB0aGUgcGFyc2VyLiBUaGlzIGNhc2Ugc2hvdWxkIHR1cm5lZCBpbnRvIGFu
IGFzc2VydGlvbi4KLSAgICAgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBuZXdO
b2RlKG5mYSk7Ci0gICAgICAgICAgICBzb3VyY2UuYWRkRXBzaWxvblRyYW5zaXRpb24obmV3Tm9k
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICAgICAgICAgIHNvdXJjZS5hZGRF
cHNpbG9uVHJhbnNpdGlvbihkZXN0aW5hdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobV9hdG9tRGF0YS5ncm91cC50ZXJtcy5zaXplKCkgPT0gMSkg
eworICAgICAgICAgICAgbV9hdG9tRGF0YS5ncm91cC50ZXJtcy5maXJzdCgpLmdlbmVyYXRlR3Jh
cGgobmZhLCBzb3VyY2UsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciBsYXN0VGFyZ2V0ID0g
bV9hdG9tRGF0YS5ncm91cC50ZXJtcy5maXJzdCgpLmdlbmVyYXRlR3JhcGgobmZhLCBzb3VyY2Us
IEFjdGlvbkxpc3QoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2F0b21E
YXRhLmdyb3VwLnRlcm1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBtX2F0b21EYXRhLmdyb3VwLnRlcm1zLnNpemUoKSAtIDE7ICsraSkgewogICAgICAg
ICAgICAgY29uc3QgVGVybSYgY3VycmVudFRlcm0gPSBtX2F0b21EYXRhLmdyb3VwLnRlcm1zW2ld
OwogICAgICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5ld05vZGUgPSBjdXJy
ZW50VGVybS5nZW5lcmF0ZUdyYXBoKG5mYSwgbGFzdFRhcmdldCwgQWN0aW9uTGlzdCgpKTsKICAg
ICAgICAgICAgIGxhc3RUYXJnZXQgPSBXVEY6Om1vdmUobmV3Tm9kZSk7CiAgICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gbGFzdFRhcmdldDsKKyAgICAgICAgY29uc3QgVGVybSYgbGFzdFRlcm0g
PSBtX2F0b21EYXRhLmdyb3VwLnRlcm1zLmxhc3QoKTsKKyAgICAgICAgbGFzdFRlcm0uZ2VuZXJh
dGVHcmFwaChuZmEsIGxhc3RUYXJnZXQsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCBkMGM5NzVjNTM2ZjdkMDQ2NDMyZWQ1OTg1MGYyZDFmZjlmYzNjNTQzLi40N2I2
ODdiNTJhZDc3N2M1YmMyZTNjZGNmNDUxNjg4ZWM3ZGUwNzgwIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTUtMDct
MTUgIEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0Nv
bnRlbnQgZXh0ZW5zaW9uc10gQ29tYmluZSBzdWZmaXhlcyB3aGVuIGdlbmVyYXRpbmcgTkZBcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2OTYxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNvbXBhcmVDb250
ZW50cyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RGQU1pbmltaXpl
ci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorCiAyMDE1LTA3LTEwICBC
cmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFVuYWJs
ZSB0byBkaXNtaXNzIGNvbnRleHQgbWVudSBkdXJpbmcgdGVzdCBydW5zCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcApp
bmRleCBiZTUzZWZiOTg1M2ZmYTRmOTIyMmU0YWIxOGMxMDgzMWMyOTUyZTk4Li4wMDZjZDE1OGZh
ODg5OGI5NjdhZjg4NmRhY2FkZTBjNGEyYzdkODI4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTIzNSw2
ICsyMzUsMzYgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBCYXNpYykKICAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8i
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwogfQogCitU
RVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFNpbmdsZUNoYXJhY3RlcikKK3sKKyAgICBhdXRv
IG1hdGNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxv
Y2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXnpcIn19XSIpOworICAgIHRlc3RS
ZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5v
cmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJ6dHRwOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tl
bmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJ5XCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVx
dWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Zy95d2Via2l0IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9
KTsKK30KKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTaW5nbGVDaGFyYWN0ZXJEaXNq
dW5jdGlvbikKK3sKKyAgICBhdXRvIG1hdGNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
XnpcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJp
Z2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5jXCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChtYXRj
aEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0p
OworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnR0
cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJjdHRwOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5z
aW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiZHR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7Cisg
ICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6dHRwOi8v
d2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25c
Ijp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ4XCJ9
fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJ5XCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
d2Via2l0Lm9yZy9kd2Via2l0IiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcveHdlYmtpdCIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
eXdlYmtpdCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0
cDovL3dlYmtpdC5vcmcvendlYmtpdCIpLCB7IH0pOworfQorCiBURVNUX0YoQ29udGVudEV4dGVu
c2lvblRlc3QsIFJhbmdlQmFzaWMpCiB7CiAgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQo
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJ3WzAtOV1jXCIsIFwidXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2ZVwiOnRydWV9
fSwiCkBAIC00NDQsNiArNDc0LDEwMiBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIER1
cGxpY2F0ZWRNYXRjaEFsbFRlcm1zSW5WYXJpb3VzRm9ybWF0KQogICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHBzOi8vcG9zdC5vcmcvcG9zdCIpLCB7IH0p
OwogfQogCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFVuZGlzdGluZ3Vpc2hhYmxlQWN0
aW9uSW5zaWRlUHJlZml4VHJlZSkKK3sKKyAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSB0d28gYWN0
aW9ucyBhcmUgdW5kaXN0aW5ndWlzaGFibGUuIFRoZSBhY3Rpb25zIG9mICJwcmVmaXgiIGFwcGVh
ciBpbnNpZGUgdGhlIHByZWZpeHRyZWUKKyAgICAvLyBlbmRpbmcgYXQgInN1ZmZpeCIuCisgICAg
YXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9j
a1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJwcmVmaXhcIn19LCIKKyAgICAgICAg
IntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0
ZXJcIjpcInByZWZpeHN1ZmZpeFwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0
UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vcHJlZml4Lm9yZy8i
KSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3Jn
L3ByZWZpeCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dl
YmtpdC5vcmcvYWFhcHJlZml4YWFhIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vcHJlZml4c3VmZml4Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3ByZWZpeHN1ZmZpeCIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYmJicHJlZml4c3Vm
Zml4YmJiIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsK
KworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9z
dWZmaXgub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVu
dFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3N1ZmZpeCIpLCB7IH0pOworfQorCitURVNUX0Yo
Q29udGVudEV4dGVuc2lvblRlc3QsIERpc3Rpbmd1aXNoYWJsZUFjdGlvbkluc2lkZVByZWZpeFRy
ZWUpCit7CisgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgdHdvIGFjdGlvbnMgYXJlIGRpc3Rpbmd1
aXNoYWJsZS4KKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntc
InR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInByZWZpeFwi
fX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2stY29va2llc1wifSxc
InRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJwcmVmaXhzdWZmaXhcIn19XSIpOworCisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5v
cmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL3ByZWZpeC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6
OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9wcmVmaXgiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2FhYXByZWZpeGFhYSIpLCB7IENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFj
a2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3ByZWZpeHN1ZmZpeC5vcmcvIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcywgQ29udGVudEV4dGVu
c2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5k
LCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9wcmVmaXhzdWZmaXgiKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzLCBDb250ZW50RXh0
ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2JiYnByZWZpeHN1ZmZp
eGJiYiIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vc3VmZml4Lm9yZy8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vd2Via2l0Lm9yZy9zdWZmaXgiKSwgeyB9KTsKK30KKworc3RhdGljIHZvaWQgY29tcGFyZUNv
bnRlbnRzKGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjpB
Y3Rpb25zJiBhLCBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBiKQoreworICAgIEVYUEVDVF9FUShh
LnNpemUoKSwgYi5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiLnNpemUo
KTsgKytpKQorICAgICAgICBFWFBFQ1RfVFJVRShhLmNvbnRhaW5zKGJbaV0pKTsKK30KKworVEVT
VF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTZWFyY2hTdWZmaXhlc1dpdGhJZGVudGljYWxBY3Rp
b25BcmVNZXJnZWQpCit7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVy
cyBjb21iaW5lZFVSTEZpbHRlcnM7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBh
cnNlciBwYXJzZXIoY29tYmluZWRVUkxGaWx0ZXJzKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4
dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0
dGVybigiZm9vXFwub3JnIiwgZmFsc2UsIDApKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVu
c2lvbnM6OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVy
bigiYmFcXC5vcmciLCBmYWxzZSwgMCkpOworCisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25z
OjpORkE+IG5mYXMgPSBjcmVhdGVORkFzKGNvbWJpbmVkVVJMRmlsdGVycyk7CisgICAgRVhQRUNU
X0VRKDF1bCwgbmZhcy5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxMnVsLCBuZmFzLmZpcnN0KCku
bm9kZXMuc2l6ZSgpKTsKKworICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEgZGZhID0gQ29udGVu
dEV4dGVuc2lvbnM6Ok5GQVRvREZBOjpjb252ZXJ0KG5mYXMuZmlyc3QoKSk7CisgICAgVmVjdG9y
PENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZT4gYnl0ZWNvZGU7CisgICAgQ29udGVudEV4
dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXIgY29tcGlsZXIoZGZhLCBieXRlY29kZSk7Cisg
ICAgY29tcGlsZXIuY29tcGlsZSgpOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUludGVycHJldGVyIGludGVycHJldGVyKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgp
KTsKKyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJmb28ub3JnIiwg
MCksIHsgMCB9KTsKKyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJi
YS5vcmciLCAwKSwgeyAwIH0pOworICAgIGNvbXBhcmVDb250ZW50cyhpbnRlcnByZXRlci5pbnRl
cnByZXQoImJhci5vcmciLCAwKSwgeyB9KTsKKworICAgIGNvbXBhcmVDb250ZW50cyhpbnRlcnBy
ZXRlci5pbnRlcnByZXQoInBhZGRpbmdmb28ub3JnIiwgMCksIHsgMCB9KTsKKyAgICBjb21wYXJl
Q29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJwYWRkaW5nYmEub3JnIiwgMCksIHsgMCB9
KTsKKyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJwYWRkaW5nYmFy
Lm9yZyIsIDApLCB7IH0pOworfQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFNlYXJj
aFN1ZmZpeGVzV2l0aERpc3Rpbmd1aXNoYWJsZUFjdGlvbkFyZU5vdE1lcmdlZCkKK3sKKyAgICBD
b250ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsK
KyAgICBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyIHBhcnNlcihjb21iaW5lZFVS
TEZpbHRlcnMpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFy
c2VyOjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJmb29cXC5vcmciLCBmYWxz
ZSwgMCkpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2Vy
OjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJiYVxcLm9yZyIsIGZhbHNlLCAx
KSk7CisKKyAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6Ok5GQT4gbmZhcyA9IGNyZWF0ZU5G
QXMoY29tYmluZWRVUkxGaWx0ZXJzKTsKKworICAgIEVYUEVDVF9FUSgxdWwsIG5mYXMuc2l6ZSgp
KTsKKyAgICBFWFBFQ1RfRVEoMTd1bCwgbmZhcy5maXJzdCgpLm5vZGVzLnNpemUoKSk7CisKKyAg
ICBDb250ZW50RXh0ZW5zaW9uczo6REZBIGRmYSA9IENvbnRlbnRFeHRlbnNpb25zOjpORkFUb0RG
QTo6Y29udmVydChuZmFzLmZpcnN0KCkpOworICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGU+IGJ5dGVjb2RlOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29k
ZUNvbXBpbGVyIGNvbXBpbGVyKGRmYSwgYnl0ZWNvZGUpOworICAgIGNvbXBpbGVyLmNvbXBpbGUo
KTsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnBy
ZXRlcihieXRlY29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSk7CisgICAgY29tcGFyZUNvbnRl
bnRzKGludGVycHJldGVyLmludGVycHJldCgiZm9vLm9yZyIsIDApLCB7IDAgfSk7CisgICAgY29t
cGFyZUNvbnRlbnRzKGludGVycHJldGVyLmludGVycHJldCgiYmEub3JnIiwgMCksIHsgMSB9KTsK
KyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJiYXIub3JnIiwgMCks
IHsgfSk7CisKKyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJwYWRk
aW5nZm9vLm9yZyIsIDApLCB7IDAgfSk7CisgICAgY29tcGFyZUNvbnRlbnRzKGludGVycHJldGVy
LmludGVycHJldCgicGFkZGluZ2JhLm9yZyIsIDApLCB7IDEgfSk7CisgICAgY29tcGFyZUNvbnRl
bnRzKGludGVycHJldGVyLmludGVycHJldCgicGFkZGluZ2JhLm9yZ2Zvby5vcmciLCAwKSwgeyAx
LCAwIH0pOworICAgIGNvbXBhcmVDb250ZW50cyhpbnRlcnByZXRlci5pbnRlcnByZXQoInBhZGRp
bmdiYXIub3JnIiwgMCksIHsgfSk7Cit9CisKIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwg
RG9tYWluVHJpZ2dlcnMpCiB7CiAgICAgYXV0byBpZkRvbWFpbkJhY2tlbmQgPSBtYWtlQmFja2Vu
ZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1m
aWx0ZXJcIjpcInRlc3RcXFxcLmh0bWxcIiwgXCJpZi1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJd
fX1dIik7CkBAIC04NTMsMTMgKzk3OSw2IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwg
V2lkZU5GQSkKIH0KICAgICAKICNpZmRlZiBOREVCVUcKLXN0YXRpYyB2b2lkIGNvbXBhcmVDb250
ZW50cyhjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0
aW9ucyYgYSwgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgYikKLXsKLSAgICBFWFBFQ1RfRVEoYS5z
aXplKCksIGIuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYi5zaXplKCk7
ICsraSkKLSAgICAgICAgRVhQRUNUX1RSVUUoYS5jb250YWlucyhiW2ldKSk7Ci19Ci0KIHN0YXRp
YyB1aW50NjRfdCBleHBlY3RlZEluZGV4KGNoYXIgYywgdW5zaWduZWQgcG9zaXRpb24pCiB7CiAg
ICAgdWludDY0X3QgaW5kZXggPSBjIC0gJ0EnOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0RGQU1pbmltaXplci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVyLmNwcAppbmRleCBlZTMyMWI3ZjllYTc0ZDBjNmZl
ZGI4OWQ4Y2IyY2Y0NWVjN2RjZjdmLi4xZTAxMmQxMDFjMmM1ZDFhYzhkYTNjMmMwNjcwMTc5YTk0
ZGI1ZjQzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZB
TWluaW1pemVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZB
TWluaW1pemVyLmNwcApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiBURVNUX0YoREZBTWluaW1p
emVyVGVzdCwgQmFzaWNTZWFyY2gpCiB7CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEg
PSBidWlsZERGQUZyb21QYXR0ZXJucyh7ICIuKmZvbyIsICIuKmJhciIsICIuKmJhbmcifSk7Ci0g
ICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMTApLCBjb3VudExpdmVOb2RlcyhkZmEp
KTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig4KSwgY291bnRMaXZlTm9kZXMo
ZGZhKSk7CiAgICAgZGZhLm1pbmltaXplKCk7CiAgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNp
emVfdD4oNyksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwogfQpAQCAtNDksNyArNDksNyBAQCBURVNU
X0YoREZBTWluaW1pemVyVGVzdCwgQmFzaWNTZWFyY2gpCiBURVNUX0YoREZBTWluaW1pemVyVGVz
dCwgRmFsbGJhY2tUcmFuc2l0aW9uc1dpdGhEaWZmZXJlbnRpYXRvckRvTm90TWVyZ2UxKQogewog
ICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEgZGZhID0gYnVpbGRERkFGcm9tUGF0dGVybnMoeyAi
XmEuYSIsICJeYi5hIiwgIl5iYWMiLCAiXmJiYyIsICJeQkNDIn0pOwotICAgIEVYUEVDVF9FUShz
dGF0aWNfY2FzdDxzaXplX3Q+KDEzKSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CisgICAgRVhQRUNU
X0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNiksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwogICAgIGRm
YS5taW5pbWl6ZSgpOwogICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDYpLCBjb3Vu
dExpdmVOb2RlcyhkZmEpKTsKIH0KQEAgLTU3LDcgKzU3LDcgQEAgVEVTVF9GKERGQU1pbmltaXpl
clRlc3QsIEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1lcmdlMSkK
IFRFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0aERpZmZlcmVu
dGlhdG9yRG9Ob3RNZXJnZTIpCiB7CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBi
dWlsZERGQUZyb21QYXR0ZXJucyh7ICJeYmJjIiwgIl5CQ0MiLCAiXmEuYSIsICJeYi5hIn0pOwot
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDExKSwgY291bnRMaXZlTm9kZXMoZGZh
KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNiksIGNvdW50TGl2ZU5vZGVz
KGRmYSkpOwogICAgIGRmYS5taW5pbWl6ZSgpOwogICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDYpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKIH0KQEAgLTY1LDcgKzY1LDcgQEAgVEVT
VF9GKERGQU1pbmltaXplclRlc3QsIEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVyZW50aWF0
b3JEb05vdE1lcmdlMikKIFRFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBGYWxsYmFja1RyYW5zaXRp
b25zV2l0aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTMpCiB7CiAgICAgQ29udGVudEV4dGVuc2lv
bnM6OkRGQSBkZmEgPSBidWlsZERGQUZyb21QYXR0ZXJucyh7ICJeYS5jIiwgIl5iLmMiLCAiXmJh
YSIsICJeYmJhIiwgIl5CQ0EifSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4o
MTMpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90Pig2KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiAgICAgZGZhLm1pbmltaXplKCk7CiAgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNiksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwog
fQpAQCAtNzMsNyArNzMsNyBAQCBURVNUX0YoREZBTWluaW1pemVyVGVzdCwgRmFsbGJhY2tUcmFu
c2l0aW9uc1dpdGhEaWZmZXJlbnRpYXRvckRvTm90TWVyZ2UzKQogVEVTVF9GKERGQU1pbmltaXpl
clRlc3QsIEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1lcmdlNCkK
IHsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6REZBIGRmYSA9IGJ1aWxkREZBRnJvbVBhdHRlcm5z
KHsgIl5iYWEiLCAiXmJiYSIsICJeQkNBIiwgIl5hLmMiLCAiXmIuYyJ9KTsKLSAgICBFWFBFQ1Rf
RVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxMyksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOworICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDYpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKICAg
ICBkZmEubWluaW1pemUoKTsKICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwg
Y291bnRMaXZlTm9kZXMoZGZhKSk7CiB9CkBAIC04MSw3ICs4MSw3IEBAIFRFU1RfRihERkFNaW5p
bWl6ZXJUZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJn
ZTQpCiBURVNUX0YoREZBTWluaW1pemVyVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9uc1RvT3RoZXJO
b2RlSW5TYW1lR3JvdXBEb2VzTm90RGlmZmVyZW50aWF0ZUdyb3VwKQogewogICAgIENvbnRlbnRF
eHRlbnNpb25zOjpERkEgZGZhID0gYnVpbGRERkFGcm9tUGF0dGVybnMoeyAiXmFhYyIsICJeYS5j
IiwgIl5iLmMifSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oOSksIGNvdW50
TGl2ZU5vZGVzKGRmYSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDUpLCBj
b3VudExpdmVOb2RlcyhkZmEpKTsKICAgICBkZmEubWluaW1pemUoKTsKICAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiB9CkBAIC04OSw3
ICs4OSw3IEBAIFRFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zVG9P
dGhlck5vZGVJblNhbWVHcm91cERvZXNOb3REaWZmZXJlCiBURVNUX0YoREZBTWluaW1pemVyVGVz
dCwgU2ltcGxlRmFsbEJhY2tUcmFuc2l0aW9uRGlmZmVyZW50aWF0b3IxKQogewogICAgIENvbnRl
bnRFeHRlbnNpb25zOjpERkEgZGZhID0gYnVpbGRERkFGcm9tUGF0dGVybnMoeyAiXmEuYmMuZGUi
LCAiXmEuYmQuZWYifSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMTIpLCBj
b3VudExpdmVOb2RlcyhkZmEpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pigx
MSksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwogICAgIGRmYS5taW5pbWl6ZSgpOwogICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDExKSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiB9CkBA
IC05Nyw3ICs5Nyw3IEBAIFRFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBTaW1wbGVGYWxsQmFja1Ry
YW5zaXRpb25EaWZmZXJlbnRpYXRvcjEpCiBURVNUX0YoREZBTWluaW1pemVyVGVzdCwgU2ltcGxl
RmFsbEJhY2tUcmFuc2l0aW9uRGlmZmVyZW50aWF0b3IyKQogewogICAgIENvbnRlbnRFeHRlbnNp
b25zOjpERkEgZGZhID0gYnVpbGRERkFGcm9tUGF0dGVybnMoeyAiXmNiLiIsICJeZGIuYiJ9KTsK
LSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig4KSwgY291bnRMaXZlTm9kZXMoZGZh
KSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNyksIGNvdW50TGl2ZU5vZGVz
KGRmYSkpOwogICAgIGRmYS5taW5pbWl6ZSgpOwogICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDcpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256859</attachid>
            <date>2015-07-15 13:54:53 -0700</date>
            <delta_ts>2015-07-15 15:43:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146961-20150715135346.patch</filename>
            <type>text/plain</type>
            <size>55364</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2Nzc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDIyYTZjMDk4OGU5NGFiMTgxNWVkYjE3
NzJmMzc1MTYxYmQ5NjNjYjguLjY4N2E2MjY4MzljZDEwM2UzYTVlZTZhOTRiMTllMWJjMGQ1MTky
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTUtMDctMTUgIEJlbmphbWluIFBvdWxhaW4gIDxi
cG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvbnRlbnQgZXh0ZW5zaW9uc10gQ29tYmlu
ZSBzdWZmaXhlcyB3aGVuIGdlbmVyYXRpbmcgTkZBcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2OTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6Om1p
bkNhcGFjaXR5Pjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIENvcHlpbmcg
YSB2ZWN0b3Igd2l0aCBhIGRpZmZlcmVudCBpbmxpbmUgY2FwYWNpdHkgd2FzIGJyb2tlbiBkdWUg
dG8KKyAgICAgICAgdGhlIGFkZGl0aW9uIG9mIE1pbmltdW1DYXBhY2l0eS4KKworICAgICAgICBU
aGlzIGZlYXR1cmUgd2FzIG5lZWRlZCBieSB0aGlzIHBhdGNoIHNvIEkgZml4ZWQgV1RGLgorCiAy
MDE1LTA3LTExICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBidWlsZCBmaXgsIHJlc3RyaWN0IEFQUF9MSU5LUyB0byBqdXN0IGlPUy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MjY4NGQ5YTZjYzQyMTI4YzNhMTg3OTA0ZWFiNDRiOWNiNWIzNjk5Li5m
OTAwNTY3M2QxN2VmOTBmMWNmM2NhOTg1NjA4ZWZmNjViZjU3MGU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTA0IEBACisyMDE1LTA3LTE1ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFtDb250ZW50IGV4dGVuc2lvbnNdIENvbWJpbmUgc3VmZml4ZXMg
d2hlbiBnZW5lcmF0aW5nIE5GQXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0Njk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIEkgYWRkIGEgbWVjaGFuaXNtIHZlcnkgc2ltaWxh
ciB0byB0aGUgcHJlZml4IHRyZWUKKyAgICAgICAgYnV0IGZvciB0aGUgc3VmZml4IChjYWxsZWQg
YSByZXZlcnNlIHN1ZmZpeCB0cmVlIGhlcmUpLgorCisgICAgICAgIFRoZSBpZGVhIGlzIGhlcmUg
aXMgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIE5GQSBub2RlcyB3aGVuIGdlbmVyYXRpbmcKKyAgICAg
ICAgYSBjaGFpbiBvZiBzdWZmaXggVGVybSB0aGF0IHdlcmUgYWxyZWFkeSBnZW5lcmF0ZWQgcHJl
dmlvdXNseS4KKyAgICAgICAgV2hlbiBnZW5lcmF0aW5nIGEgZGlzanVuY3Rpb24gZW5kaW5nIHdp
dGggdGhlIHNhbWUgc3VmZml4LCB3ZSBub3cKKyAgICAgICAgaGF2ZSB0aGUgc2FtZSB0cmFpbGlu
ZyBORkEgbm9kZXMgZm9yIGJvdGggc2lkZXMgb2YgdGhlIGRpc2p1bmN0aW9uLgorCisgICAgICAg
IE1peGluZyB0aGUgcHJlZml4IGFuZCBzdWZmaXggZ2VuZXJhdGlvbiBjYW4gYmUgdHJpY2t5LCB3
ZSBkbyBub3Qgd2FudAorICAgICAgICB0cmFuc2l0aW9ucyBmcm9tIGEgcGF0dGVybiB0byBjcmVl
cCBpbnRvIHRoZSBzdWZmaXggb2YgYW4gb3RoZXIuCisKKyAgICAgICAgVG8gYXZvaWQgYW55IGNv
bmZsaWN0LCB0aGUgcnVsZXMgaGVyZSBhcmUgdmVyeSBzaW1wbGU6CisgICAgICAgIC1Pbmx5IHVz
ZSB0aGUgcmV2ZXJzZSBzdWZmaXggdHJlZSBmb3IgdGVybXMgd2l0aG91dCBhY3Rpb25zCisgICAg
ICAgICB1cCB0byBhIGxlYWYgdGVybSB3aXRoIGFjdGlvbnMuCisKKyAgICAgICAgIFRoaXMgcnVs
ZSBlbnN1cmUgdGhhdCBubyBhY3Rpb24gd2lsbCBhY2NpZGVudGFsbHkgbWFrZSBpdHMgd2F5Cisg
ICAgICAgICB0byBhbiBvdGhlciBydWxlIGJ5IHJlc3VpbmcgYSB2ZXJ0ZXggb2YgdGhlIHJldmVy
c2Ugc3VmZml4IHRyZWUuCisKKyAgICAgICAgLU9ubHkgdXNlIHRoZSByZXZlcnNlIHN1ZmZpeCB0
cmVlIGZvciBjaGFpbnMgb2YgdGVybXMgaW4gd2hpY2gKKyAgICAgICAgIGVhY2ggdGVybSBvbmx5
IGhhcyB6ZXJvIG9yIG9uZSBmb2xsb3dpbmcgdGVybS4KKworICAgICAgICAgV2l0aCB0aGlzIGNv
bmRpdGlvbiwgd2hlbiB0YWtpbmcgYW55IHZlcnRleCBvZiB0aGUgcmV2ZXJzZSBzdWZmaXgKKyAg
ICAgICAgIHRyZWUsIHRoZXJlIGlzIG9ubHkgb25lIGVkZ2UgdGhhdCBtb3ZlIG91dCBvZiB0aGF0
IHZlcnRleCB3aGVuIHJlYWRpbmcKKyAgICAgICAgIGZyb20gbGVmdCB0byByaWdodC4KKyAgICAg
ICAgIEZvciBhbnkgdmVydGV4LCB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBzdHJpbmcgZ2Vu
ZXJhdGVkCisgICAgICAgICBsZWZ0LXRvLXJpZ2h0LCBhIHNpbmdsZSBzdWZmaXguCisKKyAgICAg
ICAgVGhpcyBpcyBvdmVybHkgcmVzdHJpY3RpdmUgYnV0IGl0IGlzIGZhc3QsIGVhc2llciB0byB2
ZXJpZnksIGFuZCBpdCB3b3JrcworICAgICAgICB3ZWxsIGluIHByYWN0aWNlLgorICAgICAgICBG
b3IgYWxsIHRoZSBtb3JlIGNvbXBsaWNhdGVkIGNhc2VzLCB3ZSBjYW4gY291bnQgb24gdGhlIE1p
bmltaXplciB0bworICAgICAgICBmaW5kIGEgYmV0dGVyIHNvbHV0aW9uLgorCisKKyAgICAgICAg
V2l0aCBhbGwgdGhlIHNpbXBsZSBzdWZmaXhlcyBtZXJnZWQsIG91ciBORkFzIGFyZSBzbWFsbGVy
LCB3aGljaAorICAgICAgICBsZXQgdXMgY29tYmluZSBtb3JlIHBhdHRlcm5zLgorICAgICAgICBU
aGUgREZBcyBhcmUgYWxzbyBzbWFsbGVyIGFuZCBmYXN0ZXIgdG8gcHJvZHVjZSBzaW5jZSB0aGVp
ciBzaXplCisgICAgICAgIGlzIHJlbGF0aXZlIHRvIHRoZSBORkEgc2l6ZXMuCisKKyAgICAgICAg
T3ZlcmFsbCwgSSBnZXQgdGhlIGZvbGxvd2luZyBnYWluczoKKyAgICAgICAgLUNocmlzJ3MgdGVz
dCBjYXNlOgorICAgICAgICAgICAgY29tcGlsZSB0aW1lIC00MCUuCisgICAgICAgICAgICBieXRl
Y29kZSBzaXplIC0xNCUuCisgICAgICAgIC1Bcm1hbmQncyB0ZXN0IGNhc2U6CisgICAgICAgICAg
ICBjb21waWxlIHRpbWUgLTUzJS4KKyAgICAgICAgICAgIGJ5dGVjb2RlIHNpemUgLTEzJS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGl2ZVN1YnRyZWU6OkFjdGl2ZVN1YnRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmdlbmVyYXRlSW5maXhVbnN1aXRhYmxl
Rm9yUmV2ZXJzZVN1ZmZpeFRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OmdlbmVyYXRlU3VmZml4V2l0aFJldmVyc2VTdWZmaXhUcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjbGVhclJldmVyc2VTdWZmaXhUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZW5lcmF0ZU5GQUZvclN1YnRyZWUpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBOjpkZWJ1Z1ByaW50RG90KToKKyAgICAgICAgRm9yZ290IHRvIGNs
b3NlIGEgdGFnLCBkb3Qgd2FzIG5vdCBoYXBweS4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL0hhc2hhYmxlQWN0aW9uTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpIYXNoYWJsZUFjdGlvbkxpc3Q6Okhhc2hhYmxlQWN0aW9uTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SGFzaGFibGVBY3Rpb25MaXN0Ojpp
c0VtcHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Okhhc2hh
YmxlQWN0aW9uTGlzdDo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6Okhhc2hhYmxlQWN0aW9uTGlzdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SGFzaGFibGVBY3Rpb25MaXN0OjpvcGVyYXRvciE9
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpIYXNoYWJsZUFjdGlvbkxp
c3RIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpIYXNo
YWJsZUFjdGlvbkxpc3RIYXNoOjplcXVhbCk6CisgICAgICAgIFdlIG5lZWQgYSB3YXkgdG8gZ3Jv
dXAgcmV2ZXJzZSBzdWZmaXggdHJlZSBieSB0aGVpciB0ZXJtaW5hbCBhY3Rpb25zLgorICAgICAg
ICBUaGlzIG5ldyBoYXNoIHN0cnVjdHVyZSBsZXRzIHVzIGZpbmQgdW5pcXVlIHZlcnRleCBmb3Ig
YSBsaXN0IG9mIGFjdGlvbnMKKyAgICAgICAgaW4gYW55IG9yZGVyLgorCisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6aXNWYWxpZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1
aWxkZXI6Om5vZGVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1t
dXRhYmxlTkZBTm9kZUJ1aWxkZXI6OmFkZFRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyOjphZGRFcHNpbG9uVHJh
bnNpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxl
TkZBTm9kZUJ1aWxkZXI6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6
fkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6b3BlcmF0b3I9KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmg6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6Z2VuZXJhdGVHcmFwaCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20p
OgorICAgICAgICBOb2RlIGJ1aWxkaW5nIGNoYW5nZXMgYSBiaXQuCisKKyAgICAgICAgUHJldmlv
dXNseSwgaXQgd2FzIGFzc3VtZWQgbm9kZXMgYXJlIGFsd2F5cyBidWlsdCBmcm9tIGxlZnQgdG8g
cmlnaHQuCisgICAgICAgIEdldHRpbmcgdGhlIG5vZGUgb24gdGhlIHJpZ2h0IHdhcyBkb25lIGJ5
IHByb3ZpZGluZyB0aGUgbGVmdCBub2RlIGFuZCB0aGUgdGVybQorICAgICAgICBkb2luZyB0aGUg
dHJhbnNpdGlvbi4KKworICAgICAgICBOb3cgd2UgaGF2ZSBib3RoIGxlZnQgdG8gcmlnaHQgYW5k
IHJpZ2h0IHRvIGxlZnQgZ2VuZXJhdGlvbi4KKworICAgICAgICBUaGUgcmlnaHQtdG8tbGVmdCBo
YXMgYSBzcGVjaWZpYyBwcm9wZXJ0eTogbm8gZWRnZSBjYW4gYmUgYWRkZWQgYWZ0ZXIKKyAgICAg
ICAgaXQncyBpbml0aWFsIHRlcm0gKHJ1bGUgMiBvZiBvdXIgcmV2ZXJzZSBzdWZmaXggdHJlZSku
IFRoaXMgc2ltcGxpZmllcworICAgICAgICB0aGluZ3MgYSBiaXQgc2luY2Ugd2UgY2FuIGZpbmFs
aXplIGFsbCB0aGUgbm9kZXMgaW4gdGhlIHN1ZmZpeCB0cmVlLgorICAgICAgICBBbGwgd2UgbmVl
ZCBpcyB0byBrZWVwIHRoZWlyIElEIHRvIGJlIGFibGUgdG8gbGluayBuZXcgbm9kZXMKKyAgICAg
ICAgdG8gdGhlIHJldmVyc2Ugc3VmZml4IHRyZWUuCisKIDIwMTUtMDctMTMgIE1hdHRoZXcgRGFp
dGVyICA8bWRhaXRlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdlIE1lZGlhUGxheWVyIE1l
ZGlhIFN0cmVhbSBtZXRob2Qgc2lnbmF0dXJlcyB0byB1c2UgcmVmZXJlbmNlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAppbmRl
eCBkYWNkYjBhOTQ5MGY5NDc5ZjdhYTg3Y2JmNjQwYjMzMjg5ZmI1YjQyLi5lMzQ2MTcyZDE4NjM1
ZDdhYTg4ZTkzOWI5ZWUwMzNkYjYwODVmZjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtNjM4LDEyICs2MzgsMTIg
QEAgcHVibGljOgogICAgIH0KIAogICAgIFZlY3Rvcihjb25zdCBWZWN0b3ImKTsKLSAgICB0ZW1w
bGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eSwgdHlwZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91
cj4KLSAgICBleHBsaWNpdCBWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90
aGVyT3ZlcmZsb3dCZWhhdmlvdXI+Jik7CisgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNp
dHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1D
YXBhY2l0eT4KKyAgICBleHBsaWNpdCBWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNp
dHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYpOwogCiAg
ICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yJik7Ci0gICAgdGVtcGxhdGU8c2l6ZV90
IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+Ci0gICAgVmVj
dG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZs
b3dCZWhhdmlvdXI+Jik7CisgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVu
YW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eT4K
KyAgICBWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3Ro
ZXJPdmVyZmxvd0JlaGF2aW91ciwgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+Jik7CiAKICAgICBWZWN0
b3IoVmVjdG9yJiYpOwogICAgIFZlY3RvciYgb3BlcmF0b3I9KFZlY3RvciYmKTsKQEAgLTgxOSw4
ICs4MTksOCBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+OjpWZWN0b3IoY29uc3QgVmVjdG9yJiBvdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5PgotdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1l
IG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2Fw
YWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+JiBvdGhlcikKK3RlbXBsYXRlPHNpemVfdCBv
dGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3Ro
ZXJNaW5pbXVtQ2FwYWNpdHk+CitWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+OjpWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHks
IG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYgb3RoZXIpCiAg
ICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBhc2FuU2V0
SW5pdGlhbEJ1ZmZlclNpemVUbyhvdGhlci5zaXplKCkpOwpAQCAtODU1LDggKzg1NSw4IEBAIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0CiBpbmxpbmUgYm9vbCB0eXBlbGVzc1BvaW50ZXJzQXJlRXF1
YWwoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikgeyByZXR1cm4gYSA9PSBiOyB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci10ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBh
Y2l0eSwgdHlwZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91cj4KLVZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBW
ZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0JlaGF2aW91cj4mIG90aGVyKQor
dGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhh
dmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBWZWN0
b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgb3RoZXJNaW5pbXVt
Q2FwYWNpdHk+JiBvdGhlcikKIHsKICAgICAvLyBJZiB0aGUgaW5saW5lIGNhcGFjaXRpZXMgbWF0
Y2gsIHdlIHNob3VsZCBjYWxsIHRoZSBtb3JlIHNwZWNpZmljCiAgICAgLy8gdGVtcGxhdGUuICBJ
ZiB0aGUgaW5saW5lIGNhcGFjaXRpZXMgZG9uJ3QgbWF0Y2gsIHRoZSB0d28gb2JqZWN0cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDExMzFmODgyOTA2NTIyNjlmNTgyNTlhOGUxMWJhMjQzM2UxMDI4MGYuLjRjOTZhZDc2N2MwMWI4
MzkwODU4MTMzNjM0NWJkYzUyZDY4ODkyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNDAsNiArMTA0MCw3IEBACiAJCTI2
RTk0NEQ5MUFDNEIyREQwMDdCODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTk0NEQ1MUFDNEIyREQwMDdC
ODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkyNkU5NDRERDFBQzRCNEVBMDA3Qjg1QjUgLyogVGVybS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFOTQ0REMx
QUM0QjRFQTAwN0I4NUI1IC8qIFRlcm0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkyNkU5OEExMDEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVj
QVNDSUlGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjZFOThBMEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGgu
aCAqLzsgfTsKKwkJMjZFQTg5QTcxQjRGMkI3NTAwOEM1RkQyIC8qIEhhc2hhYmxlQWN0aW9uTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFQTg5
QTYxQjRGMkI3NTAwOEM1RkQyIC8qIEhhc2hhYmxlQWN0aW9uTGlzdC5oICovOyB9OwogCQkyNkYw
Qzg5NzFBMkU3MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkYwQzg5NTFBMkU3MjRC
MDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAgKi87IH07CiAJCTI2RjBDODk4
MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkYwQzg5NjFBMkU3MjRCMDAyNzk0
RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2RjBDODlCMUEyRUMxMTAwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uUnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNkYwQzg5OTFBMkVDMTEwMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblJ1
bGUuY3BwICovOyB9OwpAQCAtODE5MCw2ICs4MTkxLDcgQEAKIAkJMjZFOTQ0RDUxQUM0QjJERDAw
N0I4NUI1IC8qIENvbWJpbmVkVVJMRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb21iaW5lZFVSTEZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjZFOTQ0REMxQUM0QjRFQTAwN0I4NUI1IC8qIFRlcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGVybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkU5
OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RUE4OUE2MUI0RjJCNzUwMDhDNUZEMiAvKiBIYXNo
YWJsZUFjdGlvbkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaGFi
bGVBY3Rpb25MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2RjBDODk1MUEy
RTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkYwQzg5NjFBMkU3MjRCMDAyNzk0RjggLyogQ29u
dGVudEV4dGVuc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2
RjBDODk5MUEyRUMxMTAwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUnVsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uUnVsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTcxNiw2ICsxNTcxOCw3IEBACiAJCQkJ
MjZBNTE3RkMxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5oICovLAogCQkJCTI2RDRF
ODQ1MUI0MjUzOUQwMEUwMzNBMiAvKiBERkFOb2RlLmNwcCAqLywKIAkJCQkyNjc3MjVGOTFBNUIz
QUQ5MDAzQzI0REQgLyogREZBTm9kZS5oICovLAorCQkJCTI2RUE4OUE2MUI0RjJCNzUwMDhDNUZE
MiAvKiBIYXNoYWJsZUFjdGlvbkxpc3QuaCAqLywKIAkJCQkyNkY3NTZCMjFCM0I2NkY3MDAwNURE
NzkgLyogSW1tdXRhYmxlTkZBLmggKi8sCiAJCQkJMjZGNzU2QjQxQjNCNjhGMjAwMDVERDc5IC8q
IEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmggKi8sCiAJCQkJMjZGNzU2QUUxQjNCNjVBQzAwMDVE
RDc5IC8qIE11dGFibGVSYW5nZS5oICovLApAQCAtMjcyNTUsNiArMjcyNTgsNyBAQAogCQkJCTA3
MDlENzhGMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwNzA5RDc5NTFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9u
TWFuYWdlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwOUQ3OTMxQUU1NTU3RTAwNEU0
MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI2
RUE4OUE3MUI0RjJCNzUwMDhDNUZEMiAvKiBIYXNoYWJsZUFjdGlvbkxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxQTMxNjJEMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJp
bmdFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5Q0MwQjZCMThCRUExRkYwMDZDRUJDQyAv
KiBXZWJSZXBsYXlJbnB1dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDJDNURGMTMwNDlCMzUw
MEZDN0Q1MyAvKiBXZWJTYWZlR0NBY3Rpdml0eUNhbGxiYWNrSU9TLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJM
RmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVS
TEZpbHRlcnMuY3BwCmluZGV4IDhhOWFlOTk4Yzg0YWVlYTcxN2E5ZGVmNjhhNDI4ZGM1MDViNGE2
ODAuLjJiNDA2NTczMGRiOWJhNmQyMjFmNGZiMDZiZTQ5OWI3OGM1ZGE2YTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJz
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
IAorI2luY2x1ZGUgIkhhc2hhYmxlQWN0aW9uTGlzdC5oIgogI2luY2x1ZGUgIlRlcm0uaCIKICNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ4LDYg
KzQ5LDE5IEBAIHN0cnVjdCBQcmVmaXhUcmVlVmVydGV4IHsKICAgICBQcmVmaXhUcmVlRWRnZXMg
ZWRnZXM7CiB9OwogCitzdHJ1Y3QgUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXg7CitzdHJ1Y3QgUmV2
ZXJzZVN1ZmZpeFRyZWVFZGdlIHsKKyAgICBjb25zdCBUZXJtKiB0ZXJtOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZXZlcnNlU3VmZml4VHJlZVZlcnRleD4gY2hpbGQ7Cit9OwordHlwZWRlZiBWZWN0
b3I8UmV2ZXJzZVN1ZmZpeFRyZWVFZGdlLCAwLCBXVEY6OkNyYXNoT25PdmVyZmxvdywgMT4gUmV2
ZXJzZVN1ZmZpeFRyZWVFZGdlczsKKworc3RydWN0IFJldmVyc2VTdWZmaXhUcmVlVmVydGV4IHsK
KyAgICBSZXZlcnNlU3VmZml4VHJlZUVkZ2VzIGVkZ2VzOworICAgIHVpbnQzMl90IG5vZGVJZDsK
K307Cit0eXBlZGVmIEhhc2hNYXA8SGFzaGFibGVBY3Rpb25MaXN0LCBSZXZlcnNlU3VmZml4VHJl
ZVZlcnRleCwgSGFzaGFibGVBY3Rpb25MaXN0SGFzaCwgSGFzaGFibGVBY3Rpb25MaXN0SGFzaFRy
YWl0cz4gUmV2ZXJzZVN1ZmZpeFRyZWVSb290czsKKwogI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKIHN0YXRpYyBzaXplX3QgcmVjdXJzaXZlTWVtb3J5VXNlZChj
b25zdCBQcmVmaXhUcmVlVmVydGV4JiB2ZXJ0ZXgpCiB7CkBAIC0yMDYsMzkgKzIyMCwxODYgQEAg
dm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4odWludDY0X3QgYWN0aW9uSWQsIGNv
bnN0IFZlY3RvcjxUZXJtPiYgcGF0dGUKICAgICAgICAgYWN0aW9ucy5hcHBlbmQoYWN0aW9uSWQp
OwogfQogCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEsIEltbXV0
YWJsZUNoYXJORkFOb2RlQnVpbGRlciYmIHN1YnRyZWVSb290LCBQcmVmaXhUcmVlVmVydGV4JiBy
b290LCBIYXNoTWFwPGNvbnN0IFByZWZpeFRyZWVWZXJ0ZXgqLCBBY3Rpb25MaXN0PiYgYWN0aW9u
cywgc2l6ZV90IG1heE5GQVNpemUpCitzdHJ1Y3QgQWN0aXZlU3VidHJlZSB7CisgICAgQWN0aXZl
U3VidHJlZShQcmVmaXhUcmVlVmVydGV4JiB2ZXJ0ZXgsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVp
bGRlciYmIG5mYU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKKyAgICAgICAgOiB2ZXJ0ZXgodmVy
dGV4KQorICAgICAgICAsIG5mYU5vZGUoV1RGOjptb3ZlKG5mYU5vZGUpKQorICAgICAgICAsIGVk
Z2VJbmRleChlZGdlSW5kZXgpCisgICAgeworICAgIH0KKyAgICBQcmVmaXhUcmVlVmVydGV4JiB2
ZXJ0ZXg7CisgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5mYU5vZGU7CisgICAgdW5z
aWduZWQgZWRnZUluZGV4OworfTsKKworc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmZpeFVuc3VpdGFi
bGVGb3JSZXZlcnNlU3VmZml4VHJlZShORkEmIG5mYSwgVmVjdG9yPEFjdGl2ZVN1YnRyZWU+JiBz
dGFjaywgY29uc3QgSGFzaE1hcDxjb25zdCBQcmVmaXhUcmVlVmVydGV4KiwgQWN0aW9uTGlzdD4m
IGFjdGlvbnMpCit7CisgICAgLy8gVG8gYXZvaWQgY29uZmxpY3RzLCB3ZSB1c2UgdGhlIHJldmVy
c2Ugc3VmZml4IHRyZWUgZm9yIHN1YnRyZWVzIHRoYXQgZG8gbm90IG1lcmdlCisgICAgLy8gaW4g
dGhlIHByZWZpeCB0cmVlLgorICAgIC8vCisgICAgLy8gV2Ugb25seSB1bmlmeSB0aGUgc3VmZml4
ZXMgdG8gdGhlIGFjdGlvbnMgb24gdGhlIGxlYWYuCisgICAgLy8gSWYgdGhlcmUgYXJlIGFjdGlv
bnMgaW5zaWRlIHRoZSB0cmVlLCB3ZSBnZW5lcmF0ZSB0aGUgcGFydCBvZiB0aGUgc3VidHJlZSB1
cCB0byB0aGUgYWN0aW9uLgorICAgIC8vCisgICAgLy8gSWYgd2UgYWNjaWRlbnRhbGx5IGluc2Vy
dCBhIG5vZGUgd2l0aCBhY3Rpb24gaW5zaWRlIHRoZSByZXZlcnNlLXN1ZmZpeC10cmVlLCB3ZSB3
b3VsZCBjcmVhdGUKKyAgICAvLyBuZXcgYWN0aW9ucyBvbiB1bnJlbGF0ZWQgcGF0dGVybiB3aGVu
IHVuaWZ5aW5nIHRoZWlyIHN1ZmZpeGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IHN0YWNrLnNp
emUoKSAtIDE7IGktLTspIHsKKyAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0aXZlU3VidHJlZSA9
IHN0YWNrW2ldOworICAgICAgICBpZiAoYWN0aXZlU3VidHJlZS5uZmFOb2RlLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NB
R0UoaSA+IDAsICJUaGUgYm90dG9tIG9mIHRoZSBzdGFjayBtdXN0IGJlIHRoZSByb290IG9mIG91
ciBmaXhlZC1sZW5ndGggc3VidHJlZS4gSXQgc2hvdWxkIGhhdmUgaXQgdGhlIGlzVmFsaWQoKSBj
YXNlIGFib3ZlLiIpOworCisgICAgICAgIGF1dG8gYWN0aW9uc0l0ZXJhdG9yID0gYWN0aW9ucy5m
aW5kKCZhY3RpdmVTdWJ0cmVlLnZlcnRleCk7CisgICAgICAgIGJvb2wgaGFzQWN0aW9uSW5zaWRl
VHJlZSA9IGFjdGlvbnNJdGVyYXRvciAhPSBhY3Rpb25zLmVuZCgpOworCisgICAgICAgIC8vIFN0
cmljdG8gc2Vuc3UsIHdlIHNob3VsZCBjb3VudCB0aGUgbnVtYmVyIG9mIGV4aXQgZWRnZXMgd2l0
aCBmaXhlZCBsZW5ndGguCisgICAgICAgIC8vIFRoYXQgaXMgY29zdGx5IGFuZCB1bmxpa2VseSB0
byBtYXR0ZXIgaW4gcHJhY3RpY2UuCisgICAgICAgIGJvb2wgaGFzU2luZ2xlT3V0Y29tZSA9IGFj
dGl2ZVN1YnRyZWUudmVydGV4LmVkZ2VzLnNpemUoKSA9PSAxOworCisgICAgICAgIGlmIChoYXNB
Y3Rpb25JbnNpZGVUcmVlIHx8ICFoYXNTaW5nbGVPdXRjb21lKSB7CisgICAgICAgICAgICAvLyBH
byBiYWNrIHRvIHRoZSBlbmQgb2YgdGhlIHN1YnRyZWUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGdl
bmVyYXRlZC4KKyAgICAgICAgICAgIC8vIEZyb20gdGhlcmUsIGdlbmVyYXRlIGV2ZXJ5dGhpbmcg
dXAgdG8gdGhlIHZlcnRleCB3ZSBmb3VuZC4KKyAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IGk7
CisgICAgICAgICAgICB1bnNpZ25lZCBiZWdpbm5pbmcgPSBlbmQ7CisKKyAgICAgICAgICAgIEFj
dGl2ZVN1YnRyZWUqIHNvdXJjZUFjdGl2ZVN1YnRyZWUgPSBudWxscHRyOworICAgICAgICAgICAg
d2hpbGUgKGJlZ2lubmluZy0tKSB7CisgICAgICAgICAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0
aXZlU3VidHJlZSA9IHN0YWNrW2JlZ2lubmluZ107CisgICAgICAgICAgICAgICAgaWYgKGFjdGl2
ZVN1YnRyZWUubmZhTm9kZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNl
QWN0aXZlU3VidHJlZSA9ICZhY3RpdmVTdWJ0cmVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKHNvdXJjZUFjdGl2ZVN1YnRyZWUsICJUaGUgcm9vdCBzaG91bGQgYWx3YXlz
IGhhdmUgYSB2YWxpZCBnZW5lcmF0b3IuIik7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
c3RhY2tJbmRleCA9IGJlZ2lubmluZyArIDE7IHN0YWNrSW5kZXggPD0gZW5kOyArK3N0YWNrSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHNvdXJj
ZU5vZGUgPSBzb3VyY2VBY3RpdmVTdWJ0cmVlLT5uZmFOb2RlOworICAgICAgICAgICAgICAgIEFT
U0VSVChzb3VyY2VOb2RlLmlzVmFsaWQoKSk7CisgICAgICAgICAgICAgICAgYXV0byYgZWRnZSA9
IHNvdXJjZUFjdGl2ZVN1YnRyZWUtPnZlcnRleC5lZGdlc1tzb3VyY2VBY3RpdmVTdWJ0cmVlLT5l
ZGdlSW5kZXhdOworCisgICAgICAgICAgICAgICAgQWN0aXZlU3VidHJlZSYgZGVzdGluYXRpb25B
Y3RpdmVTdWJ0cmVlID0gc3RhY2tbc3RhY2tJbmRleF07CisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25BY3RpdmVTdWJ0cmVlLm5mYU5vZGUgPSBlZGdlLnRlcm0tPmdlbmVyYXRlR3JhcGgobmZh
LCBzb3VyY2VOb2RlLCBhY3Rpb25zLmdldCgmZGVzdGluYXRpb25BY3RpdmVTdWJ0cmVlLnZlcnRl
eCkpOworCisgICAgICAgICAgICAgICAgc291cmNlQWN0aXZlU3VidHJlZSA9ICZkZXN0aW5hdGlv
bkFjdGl2ZVN1YnRyZWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdGVTdWZmaXhXaXRoUmV2ZXJz
ZVN1ZmZpeFRyZWUoTkZBJiBuZmEsIFZlY3RvcjxBY3RpdmVTdWJ0cmVlPiYgc3RhY2ssIGNvbnN0
IEhhc2hNYXA8Y29uc3QgUHJlZml4VHJlZVZlcnRleCosIEFjdGlvbkxpc3Q+JiBhY3Rpb25zLCBS
ZXZlcnNlU3VmZml4VHJlZVJvb3RzJiByZXZlcnNlU3VmZml4VHJlZVJvb3RzKQoreworICAgIEFj
dGl2ZVN1YnRyZWUmIGxlYWZTdWJ0cmVlID0gc3RhY2subGFzdCgpOworICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoIWxlYWZTdWJ0cmVlLm5mYU5vZGUuaXNWYWxpZCgpLCAiVGhlIGxlYWYgc2hvdWxk
IG5ldmVyIGJlIGdlbmVyYXRlZCBieSB0aGUgY29kZSBhYm92ZSwgaXQgc2hvdWxkIGFsd2F5cyBi
ZSBpbnNlcnRlZCBpbnRvIHRoZSBwcmVmaXggdHJlZS4iKTsKKworICAgIEFjdGlvbkxpc3QgYWN0
aW9uTGlzdCA9IGFjdGlvbnMuZ2V0KCZsZWFmU3VidHJlZS52ZXJ0ZXgpOworICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoIWFjdGlvbkxpc3QuaXNFbXB0eSgpLCAiT3VyIHByZWZpeCB0cmVlIHNob3Vs
ZCBhbHdheXMgaGF2ZSBhY3Rpb25zIG9uIHRoZSBsZWF2ZXMgYnkgY29uc3RydWN0aW9uLiIpOwor
CisgICAgSGFzaGFibGVBY3Rpb25MaXN0IGhhc2hhYmxlQWN0aW9uTGlzdChhY3Rpb25MaXN0KTsK
KyAgICBhdXRvIHJvb3RBZGRSZXN1bHQgPSByZXZlcnNlU3VmZml4VHJlZVJvb3RzLmFkZChoYXNo
YWJsZUFjdGlvbkxpc3QsIFJldmVyc2VTdWZmaXhUcmVlVmVydGV4KCkpOworICAgIGlmIChyb290
QWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWls
ZGVyIG5ld05vZGUobmZhKTsKKyAgICAgICAgbmV3Tm9kZS5zZXRBY3Rpb25zKGFjdGlvbkxpc3Qu
YmVnaW4oKSwgYWN0aW9uTGlzdC5lbmQoKSk7CisgICAgICAgIHJvb3RBZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLm5vZGVJZCA9IG5ld05vZGUubm9kZUlkKCk7CisgICAgfQorCisgICAgUmV2ZXJz
ZVN1ZmZpeFRyZWVWZXJ0ZXgqIGFjdGl2ZVJldmVyc2VTdWZmaXhUcmVlVmVydGV4ID0gJnJvb3RB
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUlk
ID0gcm9vdEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm9kZUlkOworCisgICAgdW5zaWduZWQg
c3RhY2tQb3NpdGlvbiA9IHN0YWNrLnNpemUoKSAtIDI7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgQWN0aXZlU3VidHJlZSYgc291cmNlID0gc3RhY2tbc3RhY2tQb3NpdGlvbl07CisgICAg
ICAgIGF1dG8mIGVkZ2UgPSBzb3VyY2UudmVydGV4LmVkZ2VzW3NvdXJjZS5lZGdlSW5kZXhdOwor
CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVuZCBjb25kaXRpb246IHdoZW4gd2UgbWVldCBhIG5v
ZGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZCwKKyAgICAgICAgLy8gd2UganVzdCBu
ZWVkIHRvIGNvbm5lY3Qgb3VyIGJhY2t3YXJkIHRyZWUgdG8gdGhlIGZvcndhcmQgdHJlZS4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gV2UgKm11c3Qgbm90KiBhZGQgdGhpcyBsYXN0IG5vZGUgdG8g
dGhlIHJldmVyc2Utc3VmZml4IHRyZWUuIFRoYXQgbm9kZSBjYW4gaGF2ZQorICAgICAgICAvLyB0
cmFuc2l0aW9ucyBiYWNrIHRvIGVhcmxpZXIgcGFydCBvZiB0aGUgcHJlZml4IHRyZWUuIElmIHRo
ZSBwcmVmaXggdHJlZSAiY2FjaGVzIgorICAgICAgICAvLyBzdWNoIG5vZGUsIGl0IHdvdWxkIGNy
ZWF0ZSBuZXcgdHJhbnNpdGlvbnMgdGhhdCBkaWQgbm90IGV4aXN0IGluIHRoZSBzb3VyY2UgbGFu
Z3VhZ2UuCisgICAgICAgIGlmIChzb3VyY2UubmZhTm9kZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIHN0YWNrLnNocmluayhzdGFja1Bvc2l0aW9uICsgMSk7CisgICAgICAgICAgICBlZGdlLnRl
cm0tPmdlbmVyYXRlR3JhcGgobmZhLCBzb3VyY2UubmZhTm9kZSwgZGVzdGluYXRpb25Ob2RlSWQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC0tc3RhY2tQb3NpdGlv
bjsKKworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFhY3Rpb25zLmNvbnRhaW5zKCZzb3Vy
Y2UudmVydGV4KSwgIkFueSBub2RlIHdpdGggZmluYWwgYWN0aW9ucyBzaG91bGQgaGF2ZSBiZWVu
IGNyZWF0ZWQgYmVmb3JlIGhpdHRpbmcgdGhlIHJldmVyc2Ugc3VmZml4LXRyZWUuIik7CisKKyAg
ICAgICAgUmV2ZXJzZVN1ZmZpeFRyZWVFZGdlKiBleGlzdGluZ0VkZ2UgPSBudWxscHRyOworICAg
ICAgICBmb3IgKFJldmVyc2VTdWZmaXhUcmVlRWRnZSYgcG90ZW50aWFsRXhpc3RpbmdFZGdlIDog
YWN0aXZlUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXgtPmVkZ2VzKSB7CisgICAgICAgICAgICBpZiAo
ZWRnZS50ZXJtID09IHBvdGVudGlhbEV4aXN0aW5nRWRnZS50ZXJtKSB7CisgICAgICAgICAgICAg
ICAgZXhpc3RpbmdFZGdlID0gJnBvdGVudGlhbEV4aXN0aW5nRWRnZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChleGlzdGlu
Z0VkZ2UpCisgICAgICAgICAgICBhY3RpdmVSZXZlcnNlU3VmZml4VHJlZVZlcnRleCA9IGV4aXN0
aW5nRWRnZS0+Y2hpbGQuZ2V0KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgSW1tdXRh
YmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5ld05vZGUobmZhKTsKKyAgICAgICAgICAgIGVkZ2UudGVy
bS0+Z2VuZXJhdGVHcmFwaChuZmEsIG5ld05vZGUsIGRlc3RpbmF0aW9uTm9kZUlkKTsKKyAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXZlcnNlU3VmZml4VHJlZVZlcnRleD4gbmV3VmVydGV4
KG5ldyBSZXZlcnNlU3VmZml4VHJlZVZlcnRleCgpKTsKKyAgICAgICAgICAgIG5ld1ZlcnRleC0+
bm9kZUlkID0gbmV3Tm9kZS5ub2RlSWQoKTsKKworICAgICAgICAgICAgUmV2ZXJzZVN1ZmZpeFRy
ZWVWZXJ0ZXgqIG5ld1ZlcnRleEFkZHJlc3MgPSBuZXdWZXJ0ZXguZ2V0KCk7CisgICAgICAgICAg
ICBhY3RpdmVSZXZlcnNlU3VmZml4VHJlZVZlcnRleC0+ZWRnZXMuYXBwZW5kKFJldmVyc2VTdWZm
aXhUcmVlRWRnZSh7IGVkZ2UudGVybSwgV1RGOjptb3ZlKG5ld1ZlcnRleCkgfSkpOworICAgICAg
ICAgICAgYWN0aXZlUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXggPSBuZXdWZXJ0ZXhBZGRyZXNzOwor
ICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uTm9kZUlkID0gYWN0aXZlUmV2ZXJzZVN1ZmZp
eFRyZWVWZXJ0ZXgtPm5vZGVJZDsKKworICAgICAgICBBU1NFUlQoc291cmNlLnZlcnRleC5lZGdl
cy5zaXplKCkgPT0gMSk7CisgICAgICAgIHNvdXJjZS52ZXJ0ZXguZWRnZXMuY2xlYXIoKTsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGF0aWMgdm9p
ZCBjbGVhclJldmVyc2VTdWZmaXhUcmVlKFJldmVyc2VTdWZmaXhUcmVlUm9vdHMmIHJldmVyc2VT
dWZmaXhUcmVlUm9vdHMpCit7CisgICAgLy8gV2UgY2Fubm90IHJlbHkgb24gdGhlIGRlc3RydWN0
b3IgYmVpbmcgY2FsbGVkIGluIG9yZGVyIGZyb20gdG9wIHRvIGJvdHRvbSBhcyB3ZSBtYXkgb3Zl
cmZsb3cKKyAgICAvLyB0aGUgc3RhY2suIEluc3RlYWQsIHdlIGdvIGRlcHRoIGZpcnN0IGluIHRo
ZSByZXZlcnNlLXN1ZmZpeC10cmVlLgorCisgICAgZm9yIChhdXRvJiBzbG90IDogcmV2ZXJzZVN1
ZmZpeFRyZWVSb290cykgeworICAgICAgICBWZWN0b3I8UmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXgq
LCAxMjg+IHN0YWNrOworICAgICAgICBzdGFjay5hcHBlbmQoJnNsb3QudmFsdWUpOworCisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBSZXZlcnNlU3VmZml4VHJlZVZlcnRleCog
dG9wID0gc3RhY2subGFzdCgpOworICAgICAgICAgICAgaWYgKHRvcC0+ZWRnZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAg
IGlmIChzdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIHN0YWNrLmxhc3QoKS0+ZWRnZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKHRvcC0+ZWRnZXMubGFzdCgpLmNo
aWxkLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXZlcnNlU3VmZml4VHJlZVJvb3Rz
LmNsZWFyKCk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5m
YSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiYgc3VidHJlZVJvb3QsIFByZWZpeFRyZWVW
ZXJ0ZXgmIHJvb3QsIGNvbnN0IEhhc2hNYXA8Y29uc3QgUHJlZml4VHJlZVZlcnRleCosIEFjdGlv
bkxpc3Q+JiBhY3Rpb25zLCBzaXplX3QgbWF4TkZBU2l6ZSkKIHsKICAgICAvLyBUaGlzIHJlY3Vy
c2VzIHRoZSBzdWJ0cmVlIG9mIHRoZSBwcmVmaXggdHJlZS4KICAgICAvLyBGb3IgZWFjaCBlZGdl
IHRoYXQgaGFzIGZpeGVkIGxlbmd0aCAobm8gcXVhbnRpZmllcnMgbGlrZSA/LCAqLCBvciArKSBp
dCBnZW5lcmF0ZXMgdGhlIG5mYSBncmFwaCwKICAgICAvLyByZWN1cnNlcyBpbnRvIGNoaWxkcmVu
LCBhbmQgZGVsZXRlcyBhbnkgcHJvY2Vzc2VkIGxlYWYgbm9kZXMuCi0gICAgc3RydWN0IEFjdGl2
ZVN1YnRyZWUgewotICAgICAgICBBY3RpdmVTdWJ0cmVlKFByZWZpeFRyZWVWZXJ0ZXgmIHZlcnRl
eCwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiYgbmZhTm9kZSwgdW5zaWduZWQgZWRnZUlu
ZGV4KQotICAgICAgICAgICAgOiB2ZXJ0ZXgodmVydGV4KQotICAgICAgICAgICAgLCBuZmFOb2Rl
KFdURjo6bW92ZShuZmFOb2RlKSkKLSAgICAgICAgICAgICwgZWRnZUluZGV4KGVkZ2VJbmRleCkK
LSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgmIHZlcnRleDsK
LSAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5mYU5vZGU7Ci0gICAgICAgIHVu
c2lnbmVkIGVkZ2VJbmRleDsKLSAgICB9OworCisgICAgUmV2ZXJzZVN1ZmZpeFRyZWVSb290cyBy
ZXZlcnNlU3VmZml4VHJlZVJvb3RzOwogICAgIFZlY3RvcjxBY3RpdmVTdWJ0cmVlPiBzdGFjazsK
ICAgICBpZiAoIXJvb3QuZWRnZXMuaXNFbXB0eSgpKQogICAgICAgICBzdGFjay5hcHBlbmQoQWN0
aXZlU3VidHJlZShyb290LCBXVEY6Om1vdmUoc3VidHJlZVJvb3QpLCAwKSk7CisKICAgICBib29s
IG5mYVRvb0JpZyA9IGZhbHNlOwogICAgIAogICAgIC8vIEdlbmVyYXRlIGdyYXBocyBmb3IgZWFj
aCBzdWJ0cmVlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcXVhbnRpZmllcnMuCiAgICAgd2hp
bGUgKCFzdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgUHJlZml4VHJlZVZlcnRleCYgdmVydGV4
ID0gc3RhY2subGFzdCgpLnZlcnRleDsKICAgICAgICAgY29uc3QgdW5zaWduZWQgZWRnZUluZGV4
ID0gc3RhY2subGFzdCgpLmVkZ2VJbmRleDsKLSAgICAgICAgCi0gICAgICAgIC8vIE9ubHkgc3Rv
cCBnZW5lcmF0aW5nIGFuIE5GQSBhdCBhIGxlYWYgdG8gZW5zdXJlIHdlIGhhdmUgYSBjb3JyZWN0
IE5GQS4gV2UgY291bGQgZ28gc2xpZ2h0bHkgb3ZlciB0aGUgbWF4TkZBU2l6ZS4KLSAgICAgICAg
aWYgKHZlcnRleC5lZGdlcy5pc0VtcHR5KCkgJiYgbmZhLm5vZGVzLnNpemUoKSA+IG1heE5GQVNp
emUpCi0gICAgICAgICAgICBuZmFUb29CaWcgPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBp
ZiAoZWRnZUluZGV4IDwgdmVydGV4LmVkZ2VzLnNpemUoKSkgewogICAgICAgICAgICAgYXV0byYg
ZWRnZSA9IHZlcnRleC5lZGdlc1tlZGdlSW5kZXhdOwotICAgICAgICAgICAgCisKICAgICAgICAg
ICAgIC8vIENsZWFuIHVwIGFueSBwcm9jZXNzZWQgbGVhdmVzIGFuZCByZXR1cm4gZWFybHkgaWYg
d2UgYXJlIHBhc3QgdGhlIG1heE5GQVNpemUuCiAgICAgICAgICAgICBpZiAobmZhVG9vQmlnKSB7
CiAgICAgICAgICAgICAgICAgc3RhY2subGFzdCgpLmVkZ2VJbmRleCA9IHN0YWNrLmxhc3QoKS52
ZXJ0ZXguZWRnZXMuc2l6ZSgpOwpAQCAtMjUxLDE3ICs0MTIsMjggQEAgc3RhdGljIHZvaWQgZ2Vu
ZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbmZhLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIm
JiBzdWJ0cmUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotCi0g
ICAgICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgbmV3Tm9kZSA9IGVkZ2UudGVy
bS0+Z2VuZXJhdGVHcmFwaChuZmEsIHN0YWNrLmxhc3QoKS5uZmFOb2RlLCBhY3Rpb25zLmdldChl
ZGdlLmNoaWxkLmdldCgpKSk7CiAgICAgICAgICAgICBBU1NFUlQoZWRnZS5jaGlsZC5nZXQoKSk7
Ci0gICAgICAgICAgICBzdGFjay5hcHBlbmQoQWN0aXZlU3VidHJlZSgqZWRnZS5jaGlsZC5nZXQo
KSwgV1RGOjptb3ZlKG5ld05vZGUpLCAwKSk7CisgICAgICAgICAgICBJbW11dGFibGVDaGFyTkZB
Tm9kZUJ1aWxkZXIgZW1wdHlCdWlsZGVyOworICAgICAgICAgICAgc3RhY2suYXBwZW5kKEFjdGl2
ZVN1YnRyZWUoKmVkZ2UuY2hpbGQuZ2V0KCksIFdURjo6bW92ZShlbXB0eUJ1aWxkZXIpLCAwKSk7
CiAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIGlzTGVhZiA9IHZlcnRleC5lZGdl
cy5pc0VtcHR5KCk7CisKICAgICAgICAgICAgIEFTU0VSVChlZGdlSW5kZXggPT0gdmVydGV4LmVk
Z2VzLnNpemUoKSk7CiAgICAgICAgICAgICB2ZXJ0ZXguZWRnZXMucmVtb3ZlQWxsTWF0Y2hpbmco
W10oUHJlZml4VHJlZUVkZ2UmIGVkZ2UpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuICFlZGdlLnRlcm07CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHN0YWNrLnJl
bW92ZUxhc3QoKTsKKworICAgICAgICAgICAgaWYgKGlzTGVhZikgeworICAgICAgICAgICAgICAg
IGdlbmVyYXRlSW5maXhVbnN1aXRhYmxlRm9yUmV2ZXJzZVN1ZmZpeFRyZWUobmZhLCBzdGFjaywg
YWN0aW9ucyk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVTdWZmaXhXaXRoUmV2ZXJzZVN1ZmZp
eFRyZWUobmZhLCBzdGFjaywgYWN0aW9ucywgcmV2ZXJzZVN1ZmZpeFRyZWVSb290cyk7CisKKyAg
ICAgICAgICAgICAgICAvLyBPbmx5IHN0b3AgZ2VuZXJhdGluZyBhbiBORkEgYXQgYSBsZWFmIHRv
IGVuc3VyZSB3ZSBoYXZlIGEgY29ycmVjdCBORkEuIFdlIGNvdWxkIGdvIHNsaWdodGx5IG92ZXIg
dGhlIG1heE5GQVNpemUuCisgICAgICAgICAgICAgICAgaWYgKG5mYS5ub2Rlcy5zaXplKCkgPiBt
YXhORkFTaXplKQorICAgICAgICAgICAgICAgICAgICBuZmFUb29CaWcgPSB0cnVlOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworCiAgICAg
ICAgICAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGFj
dGl2ZVN1YnRyZWUgPSBzdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgYXV0byYgZWRnZSA9
IGFjdGl2ZVN1YnRyZWUudmVydGV4LmVkZ2VzW3N0YWNrLmxhc3QoKS5lZGdlSW5kZXhdOwpAQCAt
MjcxLDYgKzQ0Myw3IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5m
YSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiYgc3VidHJlCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CisgICAgY2xlYXJSZXZlcnNlU3VmZml4VHJlZShyZXZlcnNlU3VmZml4
VHJlZVJvb3RzKTsKIH0KIAogdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OnByb2Nlc3NORkFzKHNp
emVfdCBtYXhORkFTaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYpPiBoYW5kbGVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKaW5kZXggOTQ1MzVhN2JjMTA4NjIw
YzJhZDgxOGNjZTY5MDE3ZDJlNTk5YzczYy4uZDAxY2QyYWJiY2I0MTMzNTE1NTUxZmFkZmJhMzQ0
MDhhYmZiMDA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCkBA
IC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBERkE6OmRlYnVnUHJpbnREb3QoKSBjb25zdAogICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCIlbGx1IiwgYWN0aW9uc1thY3Rpb25JbmRleF0pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRhdGFMb2dGKCJdIik7CisgICAgICAgIGRhdGFM
b2dGKCI+XSIpOwogCiAgICAgICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBkYXRhTG9nRigiIFtzaGFwZT1kb3VibGVjaXJjbGVdIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9IYXNoYWJsZUFjdGlvbkxpc3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0hhc2hhYmxlQWN0aW9uTGlzdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFkYjlkOTM2MzdlMTZkZTA4MWZjMDliODViMjlhNGYyODhlZmU0MDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9IYXNoYWJsZUFjdGlvbkxpc3Qu
aApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIYXNoYWJsZUFjdGlvbkxp
c3RfaAorI2RlZmluZSBIYXNoYWJsZUFjdGlvbkxpc3RfaAorCisjaW5jbHVkZSA8d3RmL1N0cmlu
Z0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitzdHJ1Y3QgSGFzaGFibGVBY3Rp
b25MaXN0IHsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OworICAg
IGV4cGxpY2l0IEhhc2hhYmxlQWN0aW9uTGlzdChEZWxldGVkVmFsdWVUYWcpIHsgc3RhdGUgPSBE
ZWxldGVkOyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAg
ZXhwbGljaXQgSGFzaGFibGVBY3Rpb25MaXN0KEVtcHR5VmFsdWVUYWcpIHsgc3RhdGUgPSBFbXB0
eTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQW55VmVjdG9yVHlwZT4KKyAgICBleHBsaWNp
dCBIYXNoYWJsZUFjdGlvbkxpc3QoY29uc3QgQW55VmVjdG9yVHlwZSYgb3RoZXJBY3Rpb25zKQor
ICAgICAgICA6IGFjdGlvbnMob3RoZXJBY3Rpb25zKQorICAgICAgICAsIHN0YXRlKFZhbGlkKQor
ICAgIHsKKyAgICAgICAgc3RkOjpzb3J0KGFjdGlvbnMuYmVnaW4oKSwgYWN0aW9ucy5lbmQoKSk7
CisgICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7CisgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0
ZXJzQXNzdW1pbmdBbGlnbmVkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihhY3Rpb25z
LmRhdGEoKSksIGFjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSAvIHNpemVvZihVQ2hh
cikpOworICAgICAgICBoYXNoID0gaGFzaGVyLmhhc2goKTsKKyAgICB9CisKKyAgICBib29sIGlz
RW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlID09IEVtcHR5OyB9CisgICAgYm9vbCBp
c0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlID09IERlbGV0ZWQ7IH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoYWJsZUFjdGlvbkxpc3Qgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGUgPT0gb3RoZXIuc3RhdGUgJiYgYWN0aW9ucyA9PSBv
dGhlci5hY3Rpb25zOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoYWJs
ZUFjdGlvbkxpc3Qgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ2NF90PiBhY3Rpb25zOworICAgIHVu
c2lnbmVkIGhhc2g7CisgICAgZW51bSB7CisgICAgICAgIFZhbGlkLAorICAgICAgICBFbXB0eSwK
KyAgICAgICAgRGVsZXRlZAorICAgIH0gc3RhdGU7Cit9OworCitzdHJ1Y3QgSGFzaGFibGVBY3Rp
b25MaXN0SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSGFzaGFibGVBY3Rp
b25MaXN0JiBhY3Rpb25LZXkpCisgICAgeworICAgICAgICByZXR1cm4gYWN0aW9uS2V5Lmhhc2g7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSGFzaGFibGVBY3Rpb25MaXN0
JiBhLCBjb25zdCBIYXNoYWJsZUFjdGlvbkxpc3QmIGIpCisgICAgeworICAgICAgICByZXR1cm4g
YSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKworc3RydWN0IEhhc2hhYmxlQWN0aW9uTGlzdEhhc2hU
cmFpdHMgOiBwdWJsaWMgV1RGOjpDdXN0b21IYXNoVHJhaXRzPEhhc2hhYmxlQWN0aW9uTGlzdD4g
eworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9JbW11dGFibGVORkFOb2RlQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaAppbmRleCA3ZmZhZmNlYTQ5YzRlNjM0ZWNj
YTUwZTJlNzE3ZTUyNjE5OTE5OGQ2Li43Yjg1Y2ZkOGZhNDM2OWI4N2Y2YjEwNWUyNzM3ZTQ3Y2M0
ODM4YmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9JbW11
dGFibGVORkFOb2RlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0ltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmgKQEAgLTUyLDkgKzUyLDYgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgbV9ub2RlSWQgPSBtX2ltbXV0YWJsZU5GQS0+bm9kZXMuc2l6ZSgpOwog
ICAgICAgICBtX2ltbXV0YWJsZU5GQS0+bm9kZXMuYXBwZW5kKEltbXV0YWJsZU5GQU5vZGUoKSk7
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBtX2lzRGlzY29ubmVjdGVkID0gdHJ1ZTsK
LSNlbmRpZgogICAgIH0KIAogICAgIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyKEltbXV0YWJsZU5G
QU5vZGVCdWlsZGVyJiYgb3RoZXIpCkBAIC02NCwyNSArNjEsMjggQEAgcHVibGljOgogICAgICAg
ICAsIG1fYWN0aW9ucyhXVEY6Om1vdmUob3RoZXIubV9hY3Rpb25zKSkKICAgICAgICAgLCBtX25v
ZGVJZChvdGhlci5tX25vZGVJZCkKICAgICAgICAgLCBtX2ZpbmFsaXplZChvdGhlci5tX2ZpbmFs
aXplZCkKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICwgbV9pc0Rpc2Nvbm5lY3RlZChv
dGhlci5tX2lzRGlzY29ubmVjdGVkKQotI2VuZGlmCiAgICAgewogICAgICAgICBvdGhlci5tX2lt
bXV0YWJsZU5GQSA9IG51bGxwdHI7CiAgICAgICAgIG90aGVyLm1fZmluYWxpemVkID0gdHJ1ZTsK
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIG90aGVyLm1faXNEaXNjb25uZWN0ZWQgPSBm
YWxzZTsKLSNlbmRpZgogICAgIH0KIAogICAgIH5JbW11dGFibGVORkFOb2RlQnVpbGRlcigpCiAg
ICAgewotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2lzRGlzY29ubmVjdGVkLCAiVGhp
cyBub2RlcyBpcyBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nIGFuZCBpcyBub3QgcmVhY2hlZCBi
eSBhbnkgb3RoZXIgbm9kZS4iKTsKLQogICAgICAgICBpZiAoIW1fZmluYWxpemVkKQogICAgICAg
ICAgICAgZmluYWxpemUoKTsKICAgICB9CiAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICEhbV9pbW11dGFibGVORkE7CisgICAgfQorCisgICAgdWludDMy
X3Qgbm9kZUlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAg
ICAgICByZXR1cm4gbV9ub2RlSWQ7CisgICAgfQorCiAgICAgc3RydWN0IFRyaXZpYWxSYW5nZSB7
CiAgICAgICAgIENoYXJhY3RlclR5cGUgZmlyc3Q7CiAgICAgICAgIENoYXJhY3RlclR5cGUgbGFz
dDsKQEAgLTEwOCwxNSArMTA4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0VuZDsKICAg
ICB9OwogCi0gICAgdm9pZCBhZGRUcmFuc2l0aW9uKENoYXJhY3RlclR5cGUgZmlyc3QsIENoYXJh
Y3RlclR5cGUgbGFzdCwgY29uc3QgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXImIHRhcmdldCkKKyAg
ICB2b2lkIGFkZFRyYW5zaXRpb24oQ2hhcmFjdGVyVHlwZSBmaXJzdCwgQ2hhcmFjdGVyVHlwZSBs
YXN0LCB1aW50MzJfdCB0YXJnZXROb2RlSWQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fZmlu
YWxpemVkKTsKICAgICAgICAgQVNTRVJUKG1faW1tdXRhYmxlTkZBKTsKLSAgICAgICAgQVNTRVJU
KG1faW1tdXRhYmxlTkZBID09IHRhcmdldC5tX2ltbXV0YWJsZU5GQSk7Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICBtX2lzRGlzY29ubmVjdGVkID0gZmFsc2U7Ci0gICAgICAgIHRhcmdl
dC5tX2lzRGlzY29ubmVjdGVkID0gZmFsc2U7Ci0jZW5kaWYKIAogICAgICAgICBzdHJ1Y3QgQ29u
dmVydGVyIHsKICAgICAgICAgICAgIFRhcmdldFNldCBjb252ZXJ0KHVpbnQzMl90IHRhcmdldCkK
QEAgLTEzMCwxOSArMTI1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgfTsKICAgICAgICAgCiAgICAg
ICAgIENvbnZlcnRlciBjb252ZXJ0ZXI7Ci0gICAgICAgIG1fcmFuZ2VzLmV4dGVuZChGYWtlUmFu
Z2VJdGVyYXRvciB7IHsgZmlyc3QsIGxhc3QgfSwgdGFyZ2V0Lm1fbm9kZUlkLCBmYWxzZSB9LCBG
YWtlUmFuZ2VJdGVyYXRvciB7IHsgMCwgMCB9LCB0YXJnZXQubV9ub2RlSWQsIHRydWUgfSwgY29u
dmVydGVyKTsKKyAgICAgICAgbV9yYW5nZXMuZXh0ZW5kKEZha2VSYW5nZUl0ZXJhdG9yIHsgeyBm
aXJzdCwgbGFzdCB9LCB0YXJnZXROb2RlSWQsIGZhbHNlIH0sIEZha2VSYW5nZUl0ZXJhdG9yIHsg
eyAwLCAwIH0sIHRhcmdldE5vZGVJZCwgdHJ1ZSB9LCBjb252ZXJ0ZXIpOwogICAgIH0KIAogICAg
IHZvaWQgYWRkRXBzaWxvblRyYW5zaXRpb24oY29uc3QgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIm
IHRhcmdldCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2ltbXV0YWJsZU5GQSA9PSB0YXJnZXQu
bV9pbW11dGFibGVORkEpOworICAgICAgICBhZGRFcHNpbG9uVHJhbnNpdGlvbih0YXJnZXQubV9u
b2RlSWQpOworICAgIH0KKworICAgIHZvaWQgYWRkRXBzaWxvblRyYW5zaXRpb24odWludDMyX3Qg
dGFyZ2V0Tm9kZUlkKQorICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2ZpbmFsaXplZCk7CiAgICAg
ICAgIEFTU0VSVChtX2ltbXV0YWJsZU5GQSk7Ci0gICAgICAgIEFTU0VSVChtX2ltbXV0YWJsZU5G
QSA9PSB0YXJnZXQubV9pbW11dGFibGVORkEpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAg
ICAgbV9pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlOwotICAgICAgICB0YXJnZXQubV9pc0Rpc2Nvbm5l
Y3RlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIG1fZXBzaWxvblRyYW5zaXRpb25UYXJnZXRz
LmFkZCh0YXJnZXQubV9ub2RlSWQpOworICAgICAgICBtX2Vwc2lsb25UcmFuc2l0aW9uVGFyZ2V0
cy5hZGQodGFyZ2V0Tm9kZUlkKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBY3Rp
b25JdGVyYXRvcj4KQEAgLTE2OCwxMCArMTY0LDYgQEAgcHVibGljOgogCiAgICAgICAgIG90aGVy
Lm1faW1tdXRhYmxlTkZBID0gbnVsbHB0cjsKICAgICAgICAgb3RoZXIubV9maW5hbGl6ZWQgPSB0
cnVlOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgbV9pc0Rpc2Nvbm5lY3RlZCA9IG90
aGVyLm1faXNEaXNjb25uZWN0ZWQ7Ci0gICAgICAgIG90aGVyLm1faXNEaXNjb25uZWN0ZWQgPSBm
YWxzZTsKLSNlbmRpZgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCkBAIC0yMzAsOSAr
MjIyLDYgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PEFjdGlvblR5cGUsIFdURjo6SW50SGFzaDxB
Y3Rpb25UeXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxBY3Rpb25UeXBl
Pj4gbV9hY3Rpb25zOwogICAgIHVpbnQzMl90IG1fbm9kZUlkOwogICAgIGJvb2wgbV9maW5hbGl6
ZWQgeyB0cnVlIH07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG11dGFibGUgYm9vbCBtX2lz
RGlzY29ubmVjdGVkIHsgZmFsc2UgfTsKLSNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oIGIvU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvVGVybS5oCmluZGV4IDZjNWI4N2MwM2UxYWZlNDNlYWU3OTQxZDdlNjY1
NDEzN2YwZmJjZWUuLmYzN2Q4N2NiMzFjZDYwNTA2YmI2NTc0N2NlY2QwMDk5YjIyZjA2YTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Rlcm0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgKQEAgLTgzLDcgKzgzLDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBxdWFudGlmeShjb25zdCBBdG9tUXVhbnRpZmllciYpOwogCi0g
ICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGdlbmVyYXRlR3JhcGgoTkZBJiwgSW1tdXRh
YmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzdGFydCwgY29uc3QgQWN0aW9uTGlzdCYgZmluYWxBY3Rp
b25zKSBjb25zdDsKKyAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgZ2VuZXJhdGVHcmFw
aChORkEmLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHNvdXJjZSwgY29uc3QgQWN0aW9u
TGlzdCYgZmluYWxBY3Rpb25zKSBjb25zdDsKKyAgICB2b2lkIGdlbmVyYXRlR3JhcGgoTkZBJiwg
SW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UsIHVpbnQzMl90IGRlc3RpbmF0aW9u
KSBjb25zdDsKIAogICAgIGJvb2wgaXNFbmRPZkxpbmVBc3NlcnRpb24oKSBjb25zdDsKIApAQCAt
MTE4LDcgKzExOSw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBjYW4gYmUg
ZmFsc2UgZm9yIGEgZ3JvdXAgZXF1aXZhbGVudCB0byBhIHVuaXZlcnNhbCB0cmFuc2l0aW9uLgog
ICAgIGJvb2wgaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkgY29uc3Q7CiAKLSAgICBJbW11dGFibGVD
aGFyTkZBTm9kZUJ1aWxkZXIgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiwgSW1tdXRhYmxl
Q2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UpIGNvbnN0OworICAgIHZvaWQgZ2VuZXJhdGVTdWJn
cmFwaEZvckF0b20oTkZBJiwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UsIGNv
bnN0IEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgZGVzdGluYXRpb24pIGNvbnN0OworICAg
IHZvaWQgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiwgSW1tdXRhYmxlQ2hhck5GQU5vZGVC
dWlsZGVyJiBzb3VyY2UsIHVpbnQzMl90IGRlc3RpbmF0aW9uKSBjb25zdDsKIAogICAgIHZvaWQg
ZGVzdHJveSgpOwogCkBAIC0zNzcsNTAgKzM3OSw1MiBAQCBpbmxpbmUgdm9pZCBUZXJtOjpxdWFu
dGlmeShjb25zdCBBdG9tUXVhbnRpZmllciYgcXVhbnRpZmllcikKICAgICBtX3F1YW50aWZpZXIg
PSBxdWFudGlmaWVyOwogfQogCi1pbmxpbmUgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIFRl
cm06OmdlbmVyYXRlR3JhcGgoTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYg
c3RhcnQsIGNvbnN0IEFjdGlvbkxpc3QmIGZpbmFsQWN0aW9ucykgY29uc3QKK2lubGluZSBJbW11
dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgVGVybTo6Z2VuZXJhdGVHcmFwaChORkEmIG5mYSwgSW1t
dXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UsIGNvbnN0IEFjdGlvbkxpc3QmIGZpbmFs
QWN0aW9ucykgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICBJbW11dGFibGVD
aGFyTkZBTm9kZUJ1aWxkZXIgbmV3RW5kKG5mYSk7CisgICAgZ2VuZXJhdGVHcmFwaChuZmEsIHNv
dXJjZSwgbmV3RW5kLm5vZGVJZCgpKTsKKyAgICBuZXdFbmQuc2V0QWN0aW9ucyhmaW5hbEFjdGlv
bnMuYmVnaW4oKSwgZmluYWxBY3Rpb25zLmVuZCgpKTsKKyAgICByZXR1cm4gbmV3RW5kOworfQog
Ci0gICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5ld0VuZDsKK2lubGluZSB2b2lkIFRl
cm06OmdlbmVyYXRlR3JhcGgoTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYg
c291cmNlLCB1aW50MzJfdCBkZXN0aW5hdGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKIAogICAgIHN3aXRjaCAobV9xdWFudGlmaWVyKSB7CiAgICAgY2FzZSBBdG9tUXVhbnRp
Zmllcjo6T25lOiB7Ci0gICAgICAgIG5ld0VuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5m
YSwgc3RhcnQpOworICAgICAgICBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEsIHNvdXJjZSwg
ZGVzdGluYXRpb24pOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBdG9tUXVhbnRp
Zmllcjo6WmVyb09yT25lOiB7Ci0gICAgICAgIG5ld0VuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JB
dG9tKG5mYSwgc3RhcnQpOwotICAgICAgICBzdGFydC5hZGRFcHNpbG9uVHJhbnNpdGlvbihuZXdF
bmQpOworICAgICAgICBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEsIHNvdXJjZSwgZGVzdGlu
YXRpb24pOworICAgICAgICBzb3VyY2UuYWRkRXBzaWxvblRyYW5zaXRpb24oZGVzdGluYXRpb24p
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6WmVyb09y
TW9yZTogewogICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgcmVwZWF0U3RhcnQo
bmZhKTsKLSAgICAgICAgc3RhcnQuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0U3RhcnQpOwor
ICAgICAgICBzb3VyY2UuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0U3RhcnQpOwogCi0gICAg
ICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciByZXBlYXRFbmQgPSBnZW5lcmF0ZVN1Ymdy
YXBoRm9yQXRvbShuZmEsIHJlcGVhdFN0YXJ0KTsKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5v
ZGVCdWlsZGVyIHJlcGVhdEVuZChuZmEpOworICAgICAgICBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRv
bShuZmEsIHJlcGVhdFN0YXJ0LCByZXBlYXRFbmQpOwogICAgICAgICByZXBlYXRFbmQuYWRkRXBz
aWxvblRyYW5zaXRpb24ocmVwZWF0U3RhcnQpOwogCi0gICAgICAgIEltbXV0YWJsZUNoYXJORkFO
b2RlQnVpbGRlciBrbGVlbkVuZChuZmEpOwotICAgICAgICByZXBlYXRFbmQuYWRkRXBzaWxvblRy
YW5zaXRpb24oa2xlZW5FbmQpOwotICAgICAgICBzdGFydC5hZGRFcHNpbG9uVHJhbnNpdGlvbihr
bGVlbkVuZCk7Ci0gICAgICAgIG5ld0VuZCA9IFdURjo6bW92ZShrbGVlbkVuZCk7CisgICAgICAg
IHJlcGVhdEVuZC5hZGRFcHNpbG9uVHJhbnNpdGlvbihkZXN0aW5hdGlvbik7CisgICAgICAgIHNv
dXJjZS5hZGRFcHNpbG9uVHJhbnNpdGlvbihkZXN0aW5hdGlvbik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpPbmVPck1vcmU6IHsKICAgICAgICAgSW1t
dXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIHJlcGVhdFN0YXJ0KG5mYSk7Ci0gICAgICAgIHN0YXJ0
LmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdFN0YXJ0KTsKKyAgICAgICAgc291cmNlLmFkZEVw
c2lsb25UcmFuc2l0aW9uKHJlcGVhdFN0YXJ0KTsKIAotICAgICAgICBJbW11dGFibGVDaGFyTkZB
Tm9kZUJ1aWxkZXIgcmVwZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBl
YXRTdGFydCk7CisgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciByZXBlYXRFbmQo
bmZhKTsKKyAgICAgICAgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBlYXRTdGFydCwg
cmVwZWF0RW5kKTsKICAgICAgICAgcmVwZWF0RW5kLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVh
dFN0YXJ0KTsKIAotICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgYWZ0ZXJSZXBl
YXQobmZhKTsKLSAgICAgICAgcmVwZWF0RW5kLmFkZEVwc2lsb25UcmFuc2l0aW9uKGFmdGVyUmVw
ZWF0KTsKLSAgICAgICAgbmV3RW5kID0gV1RGOjptb3ZlKGFmdGVyUmVwZWF0KTsKKyAgICAgICAg
cmVwZWF0RW5kLmFkZEVwc2lsb25UcmFuc2l0aW9uKGRlc3RpbmF0aW9uKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIH0KLSAgICBuZXdFbmQuc2V0QWN0aW9ucyhmaW5hbEFjdGlvbnMuYmVn
aW4oKSwgZmluYWxBY3Rpb25zLmVuZCgpKTsKLSAgICByZXR1cm4gbmV3RW5kOwogfQogCiBpbmxp
bmUgYm9vbCBUZXJtOjppc0VuZE9mTGluZUFzc2VydGlvbigpIGNvbnN0CkBAIC01ODIsMTQgKzU4
NiwxOSBAQCBpbmxpbmUgYm9vbCBUZXJtOjppc1VuaXZlcnNhbFRyYW5zaXRpb24oKSBjb25zdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRl
ciBUZXJtOjpnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShORkEmIG5mYSwgSW1tdXRhYmxlQ2hhck5G
QU5vZGVCdWlsZGVyJiBzb3VyY2UpIGNvbnN0CitpbmxpbmUgdm9pZCBUZXJtOjpnZW5lcmF0ZVN1
YmdyYXBoRm9yQXRvbShORkEmIG5mYSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3Vy
Y2UsIGNvbnN0IEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgZGVzdGluYXRpb24pIGNvbnN0
Cit7CisgICAgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCBzb3VyY2UsIGRlc3RpbmF0aW9u
Lm5vZGVJZCgpKTsKK30KKworaW5saW5lIHZvaWQgVGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0
b20oTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgc291cmNlLCB1aW50MzJf
dCBkZXN0aW5hdGlvbikgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKICAgICBj
YXNlIFRlcm1UeXBlOjpFbXB0eToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIoKTsKKyAgICAgICAgc291cmNl
LmFkZEVwc2lsb25UcmFuc2l0aW9uKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0OiB7Ci0gICAgICAgIEltbXV0YWJsZUNoYXJORkFO
b2RlQnVpbGRlciBuZXdOb2RlKG5mYSk7CiAgICAgICAgIGlmICghbV9hdG9tRGF0YS5jaGFyYWN0
ZXJTZXQuaW52ZXJ0ZWQoKSkgewogICAgICAgICAgICAgVUNoYXIgaSA9IDA7CiAgICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgewpAQCAtNjAyLDcgKzYxMSw3IEBAIGlubGluZSBJbW11dGFibGVDaGFy
TkZBTm9kZUJ1aWxkZXIgVGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiBuZmEsIElt
bXV0CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgMTI4
ICYmIG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmdldChpKSkKICAgICAgICAgICAgICAgICAgICAg
KytpOwotICAgICAgICAgICAgICAgIHNvdXJjZS5hZGRUcmFuc2l0aW9uKHN0YXJ0LCBpIC0gMSwg
bmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgc291cmNlLmFkZFRyYW5zaXRpb24oc3RhcnQsIGkg
LSAxLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBVQ2hhciBpID0gMTsKQEAgLTYxNiwyNyArNjI1LDMyIEBAIGlubGluZSBJbW11dGFi
bGVDaGFyTkZBTm9kZUJ1aWxkZXIgVGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiBu
ZmEsIEltbXV0CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgIHdoaWxlIChp
IDwgMTI4ICYmICFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5nZXQoaSkpCiAgICAgICAgICAgICAg
ICAgICAgICsraTsKLSAgICAgICAgICAgICAgICBzb3VyY2UuYWRkVHJhbnNpdGlvbihzdGFydCwg
aSAtIDEsIG5ld05vZGUpOworICAgICAgICAgICAgICAgIHNvdXJjZS5hZGRUcmFuc2l0aW9uKHN0
YXJ0LCBpIC0gMSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBuZXdOb2RlOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUZXJt
VHlwZTo6R3JvdXA6IHsKICAgICAgICAgaWYgKG1fYXRvbURhdGEuZ3JvdXAudGVybXMuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogYW55IGtpbmQgb2YgZW1wdHkgdGVybSBjb3Vs
ZCBiZSBhdm9pZGVkIGluIHRoZSBwYXJzZXIuIFRoaXMgY2FzZSBzaG91bGQgdHVybmVkIGludG8g
YW4gYXNzZXJ0aW9uLgotICAgICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5l
d05vZGUobmZhKTsKLSAgICAgICAgICAgIHNvdXJjZS5hZGRFcHNpbG9uVHJhbnNpdGlvbihuZXdO
b2RlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgICAgICAgICAgc291cmNlLmFk
ZEVwc2lsb25UcmFuc2l0aW9uKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtX2F0b21EYXRhLmdyb3VwLnRlcm1zLnNpemUoKSA9PSAx
KSB7CisgICAgICAgICAgICBtX2F0b21EYXRhLmdyb3VwLnRlcm1zLmZpcnN0KCkuZ2VuZXJhdGVH
cmFwaChuZmEsIHNvdXJjZSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGxhc3RUYXJnZXQg
PSBtX2F0b21EYXRhLmdyb3VwLnRlcm1zLmZpcnN0KCkuZ2VuZXJhdGVHcmFwaChuZmEsIHNvdXJj
ZSwgQWN0aW9uTGlzdCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fYXRv
bURhdGEuZ3JvdXAudGVybXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IG1fYXRvbURhdGEuZ3JvdXAudGVybXMuc2l6ZSgpIC0gMTsgKytpKSB7CiAgICAg
ICAgICAgICBjb25zdCBUZXJtJiBjdXJyZW50VGVybSA9IG1fYXRvbURhdGEuZ3JvdXAudGVybXNb
aV07CiAgICAgICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgbmV3Tm9kZSA9IGN1
cnJlbnRUZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBsYXN0VGFyZ2V0LCBBY3Rpb25MaXN0KCkpOwog
ICAgICAgICAgICAgbGFzdFRhcmdldCA9IFdURjo6bW92ZShuZXdOb2RlKTsKICAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBsYXN0VGFyZ2V0OworICAgICAgICBjb25zdCBUZXJtJiBsYXN0VGVy
bSA9IG1fYXRvbURhdGEuZ3JvdXAudGVybXMubGFzdCgpOworICAgICAgICBsYXN0VGVybS5nZW5l
cmF0ZUdyYXBoKG5mYSwgbGFzdFRhcmdldCwgZGVzdGluYXRpb24pOworICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGQwYzk3NWM1MzZmN2QwNDY0MzJlZDU5ODUwZjJkMWZmOWZjM2M1NDMuLmQ5
NjE0MjRkZWNkODM3Y2IyYzcyNTI2YmIzMTBmZTViMDc4MTZjNWIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0w
Ny0xNSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKworICAgICAgICBb
Q29udGVudCBleHRlbnNpb25zXSBDb21iaW5lIHN1ZmZpeGVzIHdoZW4gZ2VuZXJhdGluZyBORkFz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY5NjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpjb21wYXJlQ29udGVudHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9ERkFNaW5pbWl6ZXIuY3BwOgorCiAyMDE1LTA3LTEwICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFVuYWJsZSB0byBkaXNt
aXNzIGNvbnRleHQgbWVudSBkdXJpbmcgdGVzdCBydW5zCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAppbmRleCBiZTUz
ZWZiOTg1M2ZmYTRmOTIyMmU0YWIxOGMxMDgzMWMyOTUyZTk4Li4wMDZjZDE1OGZhODg5OGI5Njdh
Zjg4NmRhY2FkZTBjNGEyYzdkODI4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTIzNSw2ICsyMzUsMzYg
QEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBCYXNpYykKICAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwogfQogCitURVNUX0YoQ29u
dGVudEV4dGVuc2lvblRlc3QsIFNpbmdsZUNoYXJhY3RlcikKK3sKKyAgICBhdXRvIG1hdGNoQmFj
a2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXnpcIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KG1h
dGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsg
fSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6
dHRwOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworCisgICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJh
Y3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6
XCJ5XCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRS
ZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFy
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy95d2Via2l0
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKK30KKwor
VEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBTaW5nbGVDaGFyYWN0ZXJEaXNqdW5jdGlvbikK
K3sKKyAgICBhdXRvIG1hdGNoQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXnpcIn19LCIK
KyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIl5jXCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQs
IG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOworICAgIHRl
c3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiYnR0cDovL3dlYmtp
dC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJjdHRwOi8vd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KG1hdGNoQmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiZHR0cDovL3dlYmtpdC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJl
cXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJ6dHRwOi8vd2Via2l0Lm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworCisg
ICAgYXV0byBzZWFyY2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ4XCJ9fSwiCisgICAg
ICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJ5XCJ9fV0iKTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWlu
RG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVx
dWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9y
Zy9kd2Via2l0IiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRv
Y3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcveHdlYmtpdCIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qoc2VhcmNo
QmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcveXdlYmtpdCIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVz
dFJlcXVlc3Qoc2VhcmNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtp
dC5vcmcvendlYmtpdCIpLCB7IH0pOworfQorCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3Qs
IFJhbmdlQmFzaWMpCiB7CiAgICAgYXV0byBiYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3
WzAtOV1jXCIsIFwidXJsLWZpbHRlci1pcy1jYXNlLXNlbnNpdGl2ZVwiOnRydWV9fSwiCkBAIC00
NDQsNiArNDc0LDEwMiBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIER1cGxpY2F0ZWRN
YXRjaEFsbFRlcm1zSW5WYXJpb3VzRm9ybWF0KQogICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1h
aW5Eb2N1bWVudFJlcXVlc3QoImh0dHBzOi8vcG9zdC5vcmcvcG9zdCIpLCB7IH0pOwogfQogCitU
RVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFVuZGlzdGluZ3Vpc2hhYmxlQWN0aW9uSW5zaWRl
UHJlZml4VHJlZSkKK3sKKyAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSB0d28gYWN0aW9ucyBhcmUg
dW5kaXN0aW5ndWlzaGFibGUuIFRoZSBhY3Rpb25zIG9mICJwcmVmaXgiIGFwcGVhciBpbnNpZGUg
dGhlIHByZWZpeHRyZWUKKyAgICAvLyBlbmRpbmcgYXQgInN1ZmZpeCIuCisgICAgYXV0byBiYWNr
ZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJwcmVmaXhcIn19LCIKKyAgICAgICAgIntcImFjdGlv
blwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInBy
ZWZpeHN1ZmZpeFwifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vcHJlZml4Lm9yZy8iKSwgeyBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0
KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3ByZWZpeCIp
LCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVz
dFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
YWFhcHJlZml4YWFhIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vcHJlZml4c3VmZml4Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHA6Ly93ZWJraXQub3JnL3ByZWZpeHN1ZmZpeCIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYmJicHJlZml4c3VmZml4YmJiIiks
IHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAgIHRl
c3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9zdWZmaXgub3Jn
LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly93ZWJraXQub3JnL3N1ZmZpeCIpLCB7IH0pOworfQorCitURVNUX0YoQ29udGVudEV4
dGVuc2lvblRlc3QsIERpc3Rpbmd1aXNoYWJsZUFjdGlvbkluc2lkZVByZWZpeFRyZWUpCit7Cisg
ICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgdHdvIGFjdGlvbnMgYXJlIGRpc3Rpbmd1aXNoYWJsZS4K
KyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpc
ImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInByZWZpeFwifX0sIgorICAg
ICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2stY29va2llc1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJwcmVmaXhzdWZmaXhcIn19XSIpOworCisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvIiksIHsg
fSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L3ByZWZpeC5vcmcvIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9h
ZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vd2Via2l0Lm9yZy9wcmVmaXgiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6
QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHA6Ly93ZWJraXQub3JnL2FhYXByZWZpeGFhYSIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3ByZWZpeHN1ZmZpeC5vcmcvIiksIHsgQ29udGVudEV4
dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29va2llcywgQ29udGVudEV4dGVuc2lvbnM6OkFj
dGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9j
dW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9wcmVmaXhzdWZmaXgiKSwgeyBDb250ZW50
RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzLCBDb250ZW50RXh0ZW5zaW9uczo6
QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL2JiYnByZWZpeHN1ZmZpeGJiYiIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vc3VmZml4Lm9yZy8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0
Lm9yZy9zdWZmaXgiKSwgeyB9KTsKK30KKworc3RhdGljIHZvaWQgY29tcGFyZUNvbnRlbnRzKGNv
bnN0IENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zJiBh
LCBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBiKQoreworICAgIEVYUEVDVF9FUShhLnNpemUoKSwg
Yi5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiLnNpemUoKTsgKytpKQor
ICAgICAgICBFWFBFQ1RfVFJVRShhLmNvbnRhaW5zKGJbaV0pKTsKK30KKworVEVTVF9GKENvbnRl
bnRFeHRlbnNpb25UZXN0LCBTZWFyY2hTdWZmaXhlc1dpdGhJZGVudGljYWxBY3Rpb25BcmVNZXJn
ZWQpCit7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbWJpbmVkVVJMRmlsdGVycyBjb21iaW5l
ZFVSTEZpbHRlcnM7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OlVSTEZpbHRlclBhcnNlciBwYXJz
ZXIoY29tYmluZWRVUkxGaWx0ZXJzKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6
OlVSTEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigiZm9v
XFwub3JnIiwgZmFsc2UsIDApKTsKKyAgICBFWFBFQ1RfRVEoQ29udGVudEV4dGVuc2lvbnM6OlVS
TEZpbHRlclBhcnNlcjo6UGFyc2VTdGF0dXM6Ok9rLCBwYXJzZXIuYWRkUGF0dGVybigiYmFcXC5v
cmciLCBmYWxzZSwgMCkpOworCisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpORkE+IG5m
YXMgPSBjcmVhdGVORkFzKGNvbWJpbmVkVVJMRmlsdGVycyk7CisgICAgRVhQRUNUX0VRKDF1bCwg
bmZhcy5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxMnVsLCBuZmFzLmZpcnN0KCkubm9kZXMuc2l6
ZSgpKTsKKworICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEgZGZhID0gQ29udGVudEV4dGVuc2lv
bnM6Ok5GQVRvREZBOjpjb252ZXJ0KG5mYXMuZmlyc3QoKSk7CisgICAgVmVjdG9yPENvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZT4gYnl0ZWNvZGU7CisgICAgQ29udGVudEV4dGVuc2lvbnM6
OkRGQUJ5dGVjb2RlQ29tcGlsZXIgY29tcGlsZXIoZGZhLCBieXRlY29kZSk7CisgICAgY29tcGls
ZXIuY29tcGlsZSgpOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUludGVycHJl
dGVyIGludGVycHJldGVyKGJ5dGVjb2RlLmRhdGEoKSwgYnl0ZWNvZGUuc2l6ZSgpKTsKKyAgICBj
b21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJmb28ub3JnIiwgMCksIHsgMCB9
KTsKKyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJiYS5vcmciLCAw
KSwgeyAwIH0pOworICAgIGNvbXBhcmVDb250ZW50cyhpbnRlcnByZXRlci5pbnRlcnByZXQoImJh
ci5vcmciLCAwKSwgeyB9KTsKKworICAgIGNvbXBhcmVDb250ZW50cyhpbnRlcnByZXRlci5pbnRl
cnByZXQoInBhZGRpbmdmb28ub3JnIiwgMCksIHsgMCB9KTsKKyAgICBjb21wYXJlQ29udGVudHMo
aW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJwYWRkaW5nYmEub3JnIiwgMCksIHsgMCB9KTsKKyAgICBj
b21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJwYWRkaW5nYmFyLm9yZyIsIDAp
LCB7IH0pOworfQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFNlYXJjaFN1ZmZpeGVz
V2l0aERpc3Rpbmd1aXNoYWJsZUFjdGlvbkFyZU5vdE1lcmdlZCkKK3sKKyAgICBDb250ZW50RXh0
ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsKKyAgICBDb250
ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyIHBhcnNlcihjb21iaW5lZFVSTEZpbHRlcnMp
OworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJz
ZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJmb29cXC5vcmciLCBmYWxzZSwgMCkpOwor
ICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQYXJzZVN0
YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJiYVxcLm9yZyIsIGZhbHNlLCAxKSk7CisKKyAg
ICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6Ok5GQT4gbmZhcyA9IGNyZWF0ZU5GQXMoY29tYmlu
ZWRVUkxGaWx0ZXJzKTsKKworICAgIEVYUEVDVF9FUSgxdWwsIG5mYXMuc2l6ZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMTd1bCwgbmZhcy5maXJzdCgpLm5vZGVzLnNpemUoKSk7CisKKyAgICBDb250ZW50
RXh0ZW5zaW9uczo6REZBIGRmYSA9IENvbnRlbnRFeHRlbnNpb25zOjpORkFUb0RGQTo6Y29udmVy
dChuZmFzLmZpcnN0KCkpOworICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNv
ZGU+IGJ5dGVjb2RlOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVy
IGNvbXBpbGVyKGRmYSwgYnl0ZWNvZGUpOworICAgIGNvbXBpbGVyLmNvbXBpbGUoKTsKKyAgICBD
b250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihieXRl
Y29kZS5kYXRhKCksIGJ5dGVjb2RlLnNpemUoKSk7CisgICAgY29tcGFyZUNvbnRlbnRzKGludGVy
cHJldGVyLmludGVycHJldCgiZm9vLm9yZyIsIDApLCB7IDAgfSk7CisgICAgY29tcGFyZUNvbnRl
bnRzKGludGVycHJldGVyLmludGVycHJldCgiYmEub3JnIiwgMCksIHsgMSB9KTsKKyAgICBjb21w
YXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJiYXIub3JnIiwgMCksIHsgfSk7CisK
KyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJwYWRkaW5nZm9vLm9y
ZyIsIDApLCB7IDAgfSk7CisgICAgY29tcGFyZUNvbnRlbnRzKGludGVycHJldGVyLmludGVycHJl
dCgicGFkZGluZ2JhLm9yZyIsIDApLCB7IDEgfSk7CisgICAgY29tcGFyZUNvbnRlbnRzKGludGVy
cHJldGVyLmludGVycHJldCgicGFkZGluZ2JhLm9yZ2Zvby5vcmciLCAwKSwgeyAxLCAwIH0pOwor
ICAgIGNvbXBhcmVDb250ZW50cyhpbnRlcnByZXRlci5pbnRlcnByZXQoInBhZGRpbmdiYXIub3Jn
IiwgMCksIHsgfSk7Cit9CisKIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRG9tYWluVHJp
Z2dlcnMpCiB7CiAgICAgYXV0byBpZkRvbWFpbkJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFj
dGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
InRlc3RcXFxcLmh0bWxcIiwgXCJpZi1kb21haW5cIjpbXCJ3ZWJraXQub3JnXCJdfX1dIik7CkBA
IC04NTMsMTMgKzk3OSw2IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgV2lkZU5GQSkK
IH0KICAgICAKICNpZmRlZiBOREVCVUcKLXN0YXRpYyB2b2lkIGNvbXBhcmVDb250ZW50cyhjb25z
dCBDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyYgYSwg
Y29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgYikKLXsKLSAgICBFWFBFQ1RfRVEoYS5zaXplKCksIGIu
c2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYi5zaXplKCk7ICsraSkKLSAg
ICAgICAgRVhQRUNUX1RSVUUoYS5jb250YWlucyhiW2ldKSk7Ci19Ci0KIHN0YXRpYyB1aW50NjRf
dCBleHBlY3RlZEluZGV4KGNoYXIgYywgdW5zaWduZWQgcG9zaXRpb24pCiB7CiAgICAgdWludDY0
X3QgaW5kZXggPSBjIC0gJ0EnOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0RGQU1pbmltaXplci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvREZBTWluaW1pemVyLmNwcAppbmRleCBlZTMyMWI3ZjllYTc0ZDBjNmZlZGI4OWQ4Y2Iy
Y2Y0NWVjN2RjZjdmLi5iYjNhYzJlMmFjMTdhMmUwODA1NzBiYmFmMGZjOWI2NmRhYWRlMDI4IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVy
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVy
LmNwcApAQCAtNDEsNyArNDEsMjMgQEAgcHVibGljOgogVEVTVF9GKERGQU1pbmltaXplclRlc3Qs
IEJhc2ljU2VhcmNoKQogewogICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEgZGZhID0gYnVpbGRE
RkFGcm9tUGF0dGVybnMoeyAiLipmb28iLCAiLipiYXIiLCAiLipiYW5nIn0pOwotICAgIEVYUEVD
VF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEwKSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CisgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oOCksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwor
ICAgIGRmYS5taW5pbWl6ZSgpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDcp
LCBjb3VudExpdmVOb2RlcyhkZmEpKTsKK30KKworVEVTVF9GKERGQU1pbmltaXplclRlc3QsIE1l
cmdlU3VmZml4ZXMpCit7CisgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBidWlsZERG
QUZyb21QYXR0ZXJucyh7ICIuKmFhYSIsICIuKmFhYiIsICIuKmFiYSIsICIuKmFiYiIsICIuKmJh
YSIsICIuKmJhYiIsICIuKmJiYSIsICIuKmJiYiJ9KTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nh
c3Q8c2l6ZV90PigxMiksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOworICAgIGRmYS5taW5pbWl6ZSgp
OworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCBjb3VudExpdmVOb2Rlcyhk
ZmEpKTsKK30KKworVEVTVF9GKERGQU1pbmltaXplclRlc3QsIE1lcmdlSW5maXhlcykKK3sKKyAg
ICBDb250ZW50RXh0ZW5zaW9uczo6REZBIGRmYSA9IGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgIi4q
YWFha2l0IiwgIi4qYWFia2l0IiwgIi4qYWJha2l0IiwgIi4qYWJia2l0IiwgIi4qYmFha2l0Iiwg
Ii4qYmFia2l0IiwgIi4qYmJha2l0IiwgIi4qYmJia2l0In0pOworICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDE1KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiAgICAgZGZhLm1pbmlt
aXplKCk7CiAgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNyksIGNvdW50TGl2ZU5v
ZGVzKGRmYSkpOwogfQpAQCAtNDksNyArNjUsNyBAQCBURVNUX0YoREZBTWluaW1pemVyVGVzdCwg
QmFzaWNTZWFyY2gpCiBURVNUX0YoREZBTWluaW1pemVyVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9u
c1dpdGhEaWZmZXJlbnRpYXRvckRvTm90TWVyZ2UxKQogewogICAgIENvbnRlbnRFeHRlbnNpb25z
OjpERkEgZGZhID0gYnVpbGRERkFGcm9tUGF0dGVybnMoeyAiXmEuYSIsICJeYi5hIiwgIl5iYWMi
LCAiXmJiYyIsICJeQkNDIn0pOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEz
KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oNiksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwogICAgIGRmYS5taW5pbWl6ZSgpOwogICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDYpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKIH0K
QEAgLTU3LDcgKzczLDcgQEAgVEVTVF9GKERGQU1pbmltaXplclRlc3QsIEZhbGxiYWNrVHJhbnNp
dGlvbnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1lcmdlMSkKIFRFU1RfRihERkFNaW5pbWl6ZXJU
ZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTIpCiB7
CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBidWlsZERGQUZyb21QYXR0ZXJucyh7
ICJeYmJjIiwgIl5CQ0MiLCAiXmEuYSIsICJeYi5hIn0pOwotICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KDExKSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CisgICAgRVhQRUNUX0VRKHN0
YXRpY19jYXN0PHNpemVfdD4oNiksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwogICAgIGRmYS5taW5p
bWl6ZSgpOwogICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDYpLCBjb3VudExpdmVO
b2RlcyhkZmEpKTsKIH0KQEAgLTY1LDcgKzgxLDcgQEAgVEVTVF9GKERGQU1pbmltaXplclRlc3Qs
IEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1lcmdlMikKIFRFU1Rf
RihERkFNaW5pbWl6ZXJUZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0aERpZmZlcmVudGlhdG9y
RG9Ob3RNZXJnZTMpCiB7CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBidWlsZERG
QUZyb21QYXR0ZXJucyh7ICJeYS5jIiwgIl5iLmMiLCAiXmJhYSIsICJeYmJhIiwgIl5CQ0EifSk7
Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMTMpLCBjb3VudExpdmVOb2Rlcyhk
ZmEpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgY291bnRMaXZlTm9k
ZXMoZGZhKSk7CiAgICAgZGZhLm1pbmltaXplKCk7CiAgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PHNpemVfdD4oNiksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwogfQpAQCAtNzMsNyArODksNyBAQCBU
RVNUX0YoREZBTWluaW1pemVyVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9uc1dpdGhEaWZmZXJlbnRp
YXRvckRvTm90TWVyZ2UzKQogVEVTVF9GKERGQU1pbmltaXplclRlc3QsIEZhbGxiYWNrVHJhbnNp
dGlvbnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1lcmdlNCkKIHsKICAgICBDb250ZW50RXh0ZW5z
aW9uczo6REZBIGRmYSA9IGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgIl5iYWEiLCAiXmJiYSIsICJe
QkNBIiwgIl5hLmMiLCAiXmIuYyJ9KTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90
PigxMyksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KDYpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKICAgICBkZmEubWluaW1pemUoKTsKICAg
ICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7
CiB9CkBAIC04MSw3ICs5Nyw3IEBAIFRFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBGYWxsYmFja1Ry
YW5zaXRpb25zV2l0aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTQpCiBURVNUX0YoREZBTWluaW1p
emVyVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9uc1RvT3RoZXJOb2RlSW5TYW1lR3JvdXBEb2VzTm90
RGlmZmVyZW50aWF0ZUdyb3VwKQogewogICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEgZGZhID0g
YnVpbGRERkFGcm9tUGF0dGVybnMoeyAiXmFhYyIsICJeYS5jIiwgIl5iLmMifSk7Ci0gICAgRVhQ
RUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oOSksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOworICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDUpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsK
ICAgICBkZmEubWluaW1pemUoKTsKICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig0
KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiB9CkBAIC04OSw3ICsxMDUsNyBAQCBURVNUX0YoREZB
TWluaW1pemVyVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9uc1RvT3RoZXJOb2RlSW5TYW1lR3JvdXBE
b2VzTm90RGlmZmVyZQogVEVTVF9GKERGQU1pbmltaXplclRlc3QsIFNpbXBsZUZhbGxCYWNrVHJh
bnNpdGlvbkRpZmZlcmVudGlhdG9yMSkKIHsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6REZBIGRm
YSA9IGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgIl5hLmJjLmRlIiwgIl5hLmJkLmVmIn0pOwotICAg
IEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEyKSwgY291bnRMaXZlTm9kZXMoZGZhKSk7
CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oMTEpLCBjb3VudExpdmVOb2Rlcyhk
ZmEpKTsKICAgICBkZmEubWluaW1pemUoKTsKICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90PigxMSksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwogfQpAQCAtOTcsNyArMTEzLDcgQEAgVEVT
VF9GKERGQU1pbmltaXplclRlc3QsIFNpbXBsZUZhbGxCYWNrVHJhbnNpdGlvbkRpZmZlcmVudGlh
dG9yMSkKIFRFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBTaW1wbGVGYWxsQmFja1RyYW5zaXRpb25E
aWZmZXJlbnRpYXRvcjIpCiB7CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBidWls
ZERGQUZyb21QYXR0ZXJucyh7ICJeY2IuIiwgIl5kYi5iIn0pOwotICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDgpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKKyAgICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90Pig3KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiAgICAgZGZhLm1p
bmltaXplKCk7CiAgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNyksIGNvdW50TGl2
ZU5vZGVzKGRmYSkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256869</attachid>
            <date>2015-07-15 15:43:22 -0700</date>
            <delta_ts>2015-07-16 14:18:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146961-20150715154215.patch</filename>
            <type>text/plain</type>
            <size>61676</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2Nzc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDIyYTZjMDk4OGU5NGFiMTgxNWVkYjE3
NzJmMzc1MTYxYmQ5NjNjYjguLjY4N2E2MjY4MzljZDEwM2UzYTVlZTZhOTRiMTllMWJjMGQ1MTky
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTUtMDctMTUgIEJlbmphbWluIFBvdWxhaW4gIDxi
cG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvbnRlbnQgZXh0ZW5zaW9uc10gQ29tYmlu
ZSBzdWZmaXhlcyB3aGVuIGdlbmVyYXRpbmcgTkZBcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2OTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEY6Om1p
bkNhcGFjaXR5Pjo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAgIENvcHlpbmcg
YSB2ZWN0b3Igd2l0aCBhIGRpZmZlcmVudCBpbmxpbmUgY2FwYWNpdHkgd2FzIGJyb2tlbiBkdWUg
dG8KKyAgICAgICAgdGhlIGFkZGl0aW9uIG9mIE1pbmltdW1DYXBhY2l0eS4KKworICAgICAgICBU
aGlzIGZlYXR1cmUgd2FzIG5lZWRlZCBieSB0aGlzIHBhdGNoIHNvIEkgZml4ZWQgV1RGLgorCiAy
MDE1LTA3LTExICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBidWlsZCBmaXgsIHJlc3RyaWN0IEFQUF9MSU5LUyB0byBqdXN0IGlPUy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MjY4NGQ5YTZjYzQyMTI4YzNhMTg3OTA0ZWFiNDRiOWNiNWIzNjk5Li5m
OTAwNTY3M2QxN2VmOTBmMWNmM2NhOTg1NjA4ZWZmNjViZjU3MGU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTA0IEBACisyMDE1LTA3LTE1ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFtDb250ZW50IGV4dGVuc2lvbnNdIENvbWJpbmUgc3VmZml4ZXMg
d2hlbiBnZW5lcmF0aW5nIE5GQXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0Njk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIEkgYWRkIGEgbWVjaGFuaXNtIHZlcnkgc2ltaWxh
ciB0byB0aGUgcHJlZml4IHRyZWUKKyAgICAgICAgYnV0IGZvciB0aGUgc3VmZml4IChjYWxsZWQg
YSByZXZlcnNlIHN1ZmZpeCB0cmVlIGhlcmUpLgorCisgICAgICAgIFRoZSBpZGVhIGlzIGhlcmUg
aXMgdG8gcmV1c2UgdGhlIGV4aXN0aW5nIE5GQSBub2RlcyB3aGVuIGdlbmVyYXRpbmcKKyAgICAg
ICAgYSBjaGFpbiBvZiBzdWZmaXggVGVybSB0aGF0IHdlcmUgYWxyZWFkeSBnZW5lcmF0ZWQgcHJl
dmlvdXNseS4KKyAgICAgICAgV2hlbiBnZW5lcmF0aW5nIGEgZGlzanVuY3Rpb24gZW5kaW5nIHdp
dGggdGhlIHNhbWUgc3VmZml4LCB3ZSBub3cKKyAgICAgICAgaGF2ZSB0aGUgc2FtZSB0cmFpbGlu
ZyBORkEgbm9kZXMgZm9yIGJvdGggc2lkZXMgb2YgdGhlIGRpc2p1bmN0aW9uLgorCisgICAgICAg
IE1peGluZyB0aGUgcHJlZml4IGFuZCBzdWZmaXggZ2VuZXJhdGlvbiBjYW4gYmUgdHJpY2t5LCB3
ZSBkbyBub3Qgd2FudAorICAgICAgICB0cmFuc2l0aW9ucyBmcm9tIGEgcGF0dGVybiB0byBjcmVl
cCBpbnRvIHRoZSBzdWZmaXggb2YgYW4gb3RoZXIuCisKKyAgICAgICAgVG8gYXZvaWQgYW55IGNv
bmZsaWN0LCB0aGUgcnVsZXMgaGVyZSBhcmUgdmVyeSBzaW1wbGU6CisgICAgICAgIC1Pbmx5IHVz
ZSB0aGUgcmV2ZXJzZSBzdWZmaXggdHJlZSBmb3IgdGVybXMgd2l0aG91dCBhY3Rpb25zCisgICAg
ICAgICB1cCB0byBhIGxlYWYgdGVybSB3aXRoIGFjdGlvbnMuCisKKyAgICAgICAgIFRoaXMgcnVs
ZSBlbnN1cmUgdGhhdCBubyBhY3Rpb24gd2lsbCBhY2NpZGVudGFsbHkgbWFrZSBpdHMgd2F5Cisg
ICAgICAgICB0byBhbiBvdGhlciBydWxlIGJ5IHJlc3VpbmcgYSB2ZXJ0ZXggb2YgdGhlIHJldmVy
c2Ugc3VmZml4IHRyZWUuCisKKyAgICAgICAgLU9ubHkgdXNlIHRoZSByZXZlcnNlIHN1ZmZpeCB0
cmVlIGZvciBjaGFpbnMgb2YgdGVybXMgaW4gd2hpY2gKKyAgICAgICAgIGVhY2ggdGVybSBvbmx5
IGhhcyB6ZXJvIG9yIG9uZSBmb2xsb3dpbmcgdGVybS4KKworICAgICAgICAgV2l0aCB0aGlzIGNv
bmRpdGlvbiwgd2hlbiB0YWtpbmcgYW55IHZlcnRleCBvZiB0aGUgcmV2ZXJzZSBzdWZmaXgKKyAg
ICAgICAgIHRyZWUsIHRoZXJlIGlzIG9ubHkgb25lIGVkZ2UgdGhhdCBtb3ZlIG91dCBvZiB0aGF0
IHZlcnRleCB3aGVuIHJlYWRpbmcKKyAgICAgICAgIGZyb20gbGVmdCB0byByaWdodC4KKyAgICAg
ICAgIEZvciBhbnkgdmVydGV4LCB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBzdHJpbmcgZ2Vu
ZXJhdGVkCisgICAgICAgICBsZWZ0LXRvLXJpZ2h0LCBhIHNpbmdsZSBzdWZmaXguCisKKyAgICAg
ICAgVGhpcyBpcyBvdmVybHkgcmVzdHJpY3RpdmUgYnV0IGl0IGlzIGZhc3QsIGVhc2llciB0byB2
ZXJpZnksIGFuZCBpdCB3b3JrcworICAgICAgICB3ZWxsIGluIHByYWN0aWNlLgorICAgICAgICBG
b3IgYWxsIHRoZSBtb3JlIGNvbXBsaWNhdGVkIGNhc2VzLCB3ZSBjYW4gY291bnQgb24gdGhlIE1p
bmltaXplciB0bworICAgICAgICBmaW5kIGEgYmV0dGVyIHNvbHV0aW9uLgorCisKKyAgICAgICAg
V2l0aCBhbGwgdGhlIHNpbXBsZSBzdWZmaXhlcyBtZXJnZWQsIG91ciBORkFzIGFyZSBzbWFsbGVy
LCB3aGljaAorICAgICAgICBsZXQgdXMgY29tYmluZSBtb3JlIHBhdHRlcm5zLgorICAgICAgICBU
aGUgREZBcyBhcmUgYWxzbyBzbWFsbGVyIGFuZCBmYXN0ZXIgdG8gcHJvZHVjZSBzaW5jZSB0aGVp
ciBzaXplCisgICAgICAgIGlzIHJlbGF0aXZlIHRvIHRoZSBORkEgc2l6ZXMuCisKKyAgICAgICAg
T3ZlcmFsbCwgSSBnZXQgdGhlIGZvbGxvd2luZyBnYWluczoKKyAgICAgICAgLUNocmlzJ3MgdGVz
dCBjYXNlOgorICAgICAgICAgICAgY29tcGlsZSB0aW1lIC00MCUuCisgICAgICAgICAgICBieXRl
Y29kZSBzaXplIC0xNCUuCisgICAgICAgIC1Bcm1hbmQncyB0ZXN0IGNhc2U6CisgICAgICAgICAg
ICBjb21waWxlIHRpbWUgLTUzJS4KKyAgICAgICAgICAgIGJ5dGVjb2RlIHNpemUgLTEzJS4KKwor
ICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBj
b250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVSTEZpbHRlcnMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudEV4dGVuc2lvbnM6OkFjdGl2ZVN1YnRyZWU6OkFjdGl2ZVN1YnRyZWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmdlbmVyYXRlSW5maXhVbnN1aXRhYmxl
Rm9yUmV2ZXJzZVN1ZmZpeFRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lv
bnM6OmdlbmVyYXRlU3VmZml4V2l0aFJldmVyc2VTdWZmaXhUcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjbGVhclJldmVyc2VTdWZmaXhUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpnZW5lcmF0ZU5GQUZvclN1YnRyZWUpOgorICAg
ICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBOjpkZWJ1Z1ByaW50RG90KToKKyAgICAgICAgRm9yZ290IHRvIGNs
b3NlIGEgdGFnLCBkb3Qgd2FzIG5vdCBoYXBweS4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNp
b25zL0hhc2hhYmxlQWN0aW9uTGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpIYXNoYWJsZUFjdGlvbkxpc3Q6Okhhc2hhYmxlQWN0aW9uTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SGFzaGFibGVBY3Rpb25MaXN0Ojpp
c0VtcHR5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6Okhhc2hh
YmxlQWN0aW9uTGlzdDo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6Okhhc2hhYmxlQWN0aW9uTGlzdDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SGFzaGFibGVBY3Rpb25MaXN0OjpvcGVyYXRvciE9
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpIYXNoYWJsZUFjdGlvbkxp
c3RIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpIYXNo
YWJsZUFjdGlvbkxpc3RIYXNoOjplcXVhbCk6CisgICAgICAgIFdlIG5lZWQgYSB3YXkgdG8gZ3Jv
dXAgcmV2ZXJzZSBzdWZmaXggdHJlZSBieSB0aGVpciB0ZXJtaW5hbCBhY3Rpb25zLgorICAgICAg
ICBUaGlzIG5ldyBoYXNoIHN0cnVjdHVyZSBsZXRzIHVzIGZpbmQgdW5pcXVlIHZlcnRleCBmb3Ig
YSBsaXN0IG9mIGFjdGlvbnMKKyAgICAgICAgaW4gYW55IG9yZGVyLgorCisgICAgICAgICogY29u
dGVudGV4dGVuc2lvbnMvSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6aXNWYWxpZCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxlTkZBTm9kZUJ1
aWxkZXI6Om5vZGVJZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1t
dXRhYmxlTkZBTm9kZUJ1aWxkZXI6OmFkZFRyYW5zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyOjphZGRFcHNpbG9uVHJh
bnNpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6SW1tdXRhYmxl
TkZBTm9kZUJ1aWxkZXI6OkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6
fkltbXV0YWJsZU5GQU5vZGVCdWlsZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpJbW11dGFibGVORkFOb2RlQnVpbGRlcjo6b3BlcmF0b3I9KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmg6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6Z2VuZXJhdGVHcmFwaCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20p
OgorICAgICAgICBOb2RlIGJ1aWxkaW5nIGNoYW5nZXMgYSBiaXQuCisKKyAgICAgICAgUHJldmlv
dXNseSwgaXQgd2FzIGFzc3VtZWQgbm9kZXMgYXJlIGFsd2F5cyBidWlsdCBmcm9tIGxlZnQgdG8g
cmlnaHQuCisgICAgICAgIEdldHRpbmcgdGhlIG5vZGUgb24gdGhlIHJpZ2h0IHdhcyBkb25lIGJ5
IHByb3ZpZGluZyB0aGUgbGVmdCBub2RlIGFuZCB0aGUgdGVybQorICAgICAgICBkb2luZyB0aGUg
dHJhbnNpdGlvbi4KKworICAgICAgICBOb3cgd2UgaGF2ZSBib3RoIGxlZnQgdG8gcmlnaHQgYW5k
IHJpZ2h0IHRvIGxlZnQgZ2VuZXJhdGlvbi4KKworICAgICAgICBUaGUgcmlnaHQtdG8tbGVmdCBo
YXMgYSBzcGVjaWZpYyBwcm9wZXJ0eTogbm8gZWRnZSBjYW4gYmUgYWRkZWQgYWZ0ZXIKKyAgICAg
ICAgaXQncyBpbml0aWFsIHRlcm0gKHJ1bGUgMiBvZiBvdXIgcmV2ZXJzZSBzdWZmaXggdHJlZSku
IFRoaXMgc2ltcGxpZmllcworICAgICAgICB0aGluZ3MgYSBiaXQgc2luY2Ugd2UgY2FuIGZpbmFs
aXplIGFsbCB0aGUgbm9kZXMgaW4gdGhlIHN1ZmZpeCB0cmVlLgorICAgICAgICBBbGwgd2UgbmVl
ZCBpcyB0byBrZWVwIHRoZWlyIElEIHRvIGJlIGFibGUgdG8gbGluayBuZXcgbm9kZXMKKyAgICAg
ICAgdG8gdGhlIHJldmVyc2Ugc3VmZml4IHRyZWUuCisKIDIwMTUtMDctMTMgIE1hdHRoZXcgRGFp
dGVyICA8bWRhaXRlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdlIE1lZGlhUGxheWVyIE1l
ZGlhIFN0cmVhbSBtZXRob2Qgc2lnbmF0dXJlcyB0byB1c2UgcmVmZXJlbmNlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAppbmRl
eCBkYWNkYjBhOTQ5MGY5NDc5ZjdhYTg3Y2JmNjQwYjMzMjg5ZmI1YjQyLi5lMzQ2MTcyZDE4NjM1
ZDdhYTg4ZTkzOWI5ZWUwMzNkYjYwODVmZjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaApAQCAtNjM4LDEyICs2MzgsMTIg
QEAgcHVibGljOgogICAgIH0KIAogICAgIFZlY3Rvcihjb25zdCBWZWN0b3ImKTsKLSAgICB0ZW1w
bGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eSwgdHlwZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91
cj4KLSAgICBleHBsaWNpdCBWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90
aGVyT3ZlcmZsb3dCZWhhdmlvdXI+Jik7CisgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNp
dHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1D
YXBhY2l0eT4KKyAgICBleHBsaWNpdCBWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNp
dHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYpOwogCiAg
ICAgVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yJik7Ci0gICAgdGVtcGxhdGU8c2l6ZV90
IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+Ci0gICAgVmVj
dG9yJiBvcGVyYXRvcj0oY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHksIG90aGVyT3ZlcmZs
b3dCZWhhdmlvdXI+Jik7CisgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVu
YW1lIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eT4K
KyAgICBWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3Ro
ZXJPdmVyZmxvd0JlaGF2aW91ciwgb3RoZXJNaW5pbXVtQ2FwYWNpdHk+Jik7CiAKICAgICBWZWN0
b3IoVmVjdG9yJiYpOwogICAgIFZlY3RvciYgb3BlcmF0b3I9KFZlY3RvciYmKTsKQEAgLTgxOSw4
ICs4MTksOCBAQCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgbWlu
Q2FwYWNpdHk+OjpWZWN0b3IoY29uc3QgVmVjdG9yJiBvdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6
ZV90IG1pbkNhcGFjaXR5PgotdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1l
IG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+Ci1WZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJm
bG93SGFuZGxlciwgbWluQ2FwYWNpdHk+OjpWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2Fw
YWNpdHksIG90aGVyT3ZlcmZsb3dCZWhhdmlvdXI+JiBvdGhlcikKK3RlbXBsYXRlPHNpemVfdCBv
dGhlckNhcGFjaXR5LCB0eXBlbmFtZSBvdGhlck92ZXJmbG93QmVoYXZpb3VyLCBzaXplX3Qgb3Ro
ZXJNaW5pbXVtQ2FwYWNpdHk+CitWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlciwgbWluQ2FwYWNpdHk+OjpWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHks
IG90aGVyT3ZlcmZsb3dCZWhhdmlvdXIsIG90aGVyTWluaW11bUNhcGFjaXR5PiYgb3RoZXIpCiAg
ICAgOiBCYXNlKG90aGVyLmNhcGFjaXR5KCksIG90aGVyLnNpemUoKSkKIHsKICAgICBhc2FuU2V0
SW5pdGlhbEJ1ZmZlclNpemVUbyhvdGhlci5zaXplKCkpOwpAQCAtODU1LDggKzg1NSw4IEBAIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0CiBpbmxpbmUgYm9vbCB0eXBlbGVzc1BvaW50ZXJzQXJlRXF1
YWwoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCogYikgeyByZXR1cm4gYSA9PSBiOyB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZs
b3dIYW5kbGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+Ci10ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBh
Y2l0eSwgdHlwZW5hbWUgb3RoZXJPdmVyZmxvd0JlaGF2aW91cj4KLVZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBW
ZWN0b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0JlaGF2aW91cj4mIG90aGVyKQor
dGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHksIHR5cGVuYW1lIG90aGVyT3ZlcmZsb3dCZWhh
dmlvdXIsIHNpemVfdCBvdGhlck1pbmltdW1DYXBhY2l0eT4KK1ZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCBtaW5DYXBhY2l0eT46Om9wZXJhdG9yPShjb25zdCBWZWN0
b3I8VCwgb3RoZXJDYXBhY2l0eSwgb3RoZXJPdmVyZmxvd0JlaGF2aW91ciwgb3RoZXJNaW5pbXVt
Q2FwYWNpdHk+JiBvdGhlcikKIHsKICAgICAvLyBJZiB0aGUgaW5saW5lIGNhcGFjaXRpZXMgbWF0
Y2gsIHdlIHNob3VsZCBjYWxsIHRoZSBtb3JlIHNwZWNpZmljCiAgICAgLy8gdGVtcGxhdGUuICBJ
ZiB0aGUgaW5saW5lIGNhcGFjaXRpZXMgZG9uJ3QgbWF0Y2gsIHRoZSB0d28gb2JqZWN0cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDExMzFmODgyOTA2NTIyNjlmNTgyNTlhOGUxMWJhMjQzM2UxMDI4MGYuLjRjOTZhZDc2N2MwMWI4
MzkwODU4MTMzNjM0NWJkYzUyZDY4ODkyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNDAsNiArMTA0MCw3IEBACiAJCTI2
RTk0NEQ5MUFDNEIyREQwMDdCODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RTk0NEQ1MUFDNEIyREQwMDdC
ODVCNSAvKiBDb21iaW5lZFVSTEZpbHRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkyNkU5NDRERDFBQzRCNEVBMDA3Qjg1QjUgLyogVGVybS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFOTQ0REMx
QUM0QjRFQTAwN0I4NUI1IC8qIFRlcm0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkyNkU5OEExMDEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVj
QVNDSUlGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjZFOThBMEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGgu
aCAqLzsgfTsKKwkJMjZFQTg5QTcxQjRGMkI3NTAwOEM1RkQyIC8qIEhhc2hhYmxlQWN0aW9uTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFQTg5
QTYxQjRGMkI3NTAwOEM1RkQyIC8qIEhhc2hhYmxlQWN0aW9uTGlzdC5oICovOyB9OwogCQkyNkYw
Qzg5NzFBMkU3MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkYwQzg5NTFBMkU3MjRC
MDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5jcHAgKi87IH07CiAJCTI2RjBDODk4
MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkYwQzg5NjFBMkU3MjRCMDAyNzk0
RjggLyogQ29udGVudEV4dGVuc2lvblBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI2RjBDODlCMUEyRUMxMTAwMDI3OTRGOCAvKiBDb250
ZW50RXh0ZW5zaW9uUnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNkYwQzg5OTFBMkVDMTEwMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblJ1
bGUuY3BwICovOyB9OwpAQCAtODE5MCw2ICs4MTkxLDcgQEAKIAkJMjZFOTQ0RDUxQUM0QjJERDAw
N0I4NUI1IC8qIENvbWJpbmVkVVJMRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb21iaW5lZFVSTEZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjZFOTQ0REMxQUM0QjRFQTAwN0I4NUI1IC8qIFRlcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGVybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkU5
OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2RUE4OUE2MUI0RjJCNzUwMDhDNUZEMiAvKiBIYXNo
YWJsZUFjdGlvbkxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaGFi
bGVBY3Rpb25MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2RjBDODk1MUEy
RTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkYwQzg5NjFBMkU3MjRCMDAyNzk0RjggLyogQ29u
dGVudEV4dGVuc2lvblBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2
RjBDODk5MUEyRUMxMTAwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUnVsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uUnVsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTcxNiw2ICsxNTcxOCw3IEBACiAJCQkJ
MjZBNTE3RkMxQUI5MjIzODAwNjMzNURGIC8qIERGQU1pbmltaXplci5oICovLAogCQkJCTI2RDRF
ODQ1MUI0MjUzOUQwMEUwMzNBMiAvKiBERkFOb2RlLmNwcCAqLywKIAkJCQkyNjc3MjVGOTFBNUIz
QUQ5MDAzQzI0REQgLyogREZBTm9kZS5oICovLAorCQkJCTI2RUE4OUE2MUI0RjJCNzUwMDhDNUZE
MiAvKiBIYXNoYWJsZUFjdGlvbkxpc3QuaCAqLywKIAkJCQkyNkY3NTZCMjFCM0I2NkY3MDAwNURE
NzkgLyogSW1tdXRhYmxlTkZBLmggKi8sCiAJCQkJMjZGNzU2QjQxQjNCNjhGMjAwMDVERDc5IC8q
IEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmggKi8sCiAJCQkJMjZGNzU2QUUxQjNCNjVBQzAwMDVE
RDc5IC8qIE11dGFibGVSYW5nZS5oICovLApAQCAtMjcyNTUsNiArMjcyNTgsNyBAQAogCQkJCTA3
MDlENzhGMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwNzA5RDc5NTFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9u
TWFuYWdlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwOUQ3OTMxQUU1NTU3RTAwNEU0
MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTI2
RUE4OUE3MUI0RjJCNzUwMDhDNUZEMiAvKiBIYXNoYWJsZUFjdGlvbkxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxQTMxNjJEMTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJp
bmdFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5Q0MwQjZCMThCRUExRkYwMDZDRUJDQyAv
KiBXZWJSZXBsYXlJbnB1dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDJDNURGMTMwNDlCMzUw
MEZDN0Q1MyAvKiBXZWJTYWZlR0NBY3Rpdml0eUNhbGxiYWNrSU9TLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJM
RmlsdGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db21iaW5lZFVS
TEZpbHRlcnMuY3BwCmluZGV4IDhhOWFlOTk4Yzg0YWVlYTcxN2E5ZGVmNjhhNDI4ZGM1MDViNGE2
ODAuLjJiNDA2NTczMGRiOWJhNmQyMjFmNGZiMDZiZTQ5OWI3OGM1ZGE2YTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbWJpbmVkVVJMRmlsdGVycy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tYmluZWRVUkxGaWx0ZXJz
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
IAorI2luY2x1ZGUgIkhhc2hhYmxlQWN0aW9uTGlzdC5oIgogI2luY2x1ZGUgIlRlcm0uaCIKICNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ4LDYg
KzQ5LDE5IEBAIHN0cnVjdCBQcmVmaXhUcmVlVmVydGV4IHsKICAgICBQcmVmaXhUcmVlRWRnZXMg
ZWRnZXM7CiB9OwogCitzdHJ1Y3QgUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXg7CitzdHJ1Y3QgUmV2
ZXJzZVN1ZmZpeFRyZWVFZGdlIHsKKyAgICBjb25zdCBUZXJtKiB0ZXJtOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZXZlcnNlU3VmZml4VHJlZVZlcnRleD4gY2hpbGQ7Cit9OwordHlwZWRlZiBWZWN0
b3I8UmV2ZXJzZVN1ZmZpeFRyZWVFZGdlLCAwLCBXVEY6OkNyYXNoT25PdmVyZmxvdywgMT4gUmV2
ZXJzZVN1ZmZpeFRyZWVFZGdlczsKKworc3RydWN0IFJldmVyc2VTdWZmaXhUcmVlVmVydGV4IHsK
KyAgICBSZXZlcnNlU3VmZml4VHJlZUVkZ2VzIGVkZ2VzOworICAgIHVpbnQzMl90IG5vZGVJZDsK
K307Cit0eXBlZGVmIEhhc2hNYXA8SGFzaGFibGVBY3Rpb25MaXN0LCBSZXZlcnNlU3VmZml4VHJl
ZVZlcnRleCwgSGFzaGFibGVBY3Rpb25MaXN0SGFzaCwgSGFzaGFibGVBY3Rpb25MaXN0SGFzaFRy
YWl0cz4gUmV2ZXJzZVN1ZmZpeFRyZWVSb290czsKKwogI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKIHN0YXRpYyBzaXplX3QgcmVjdXJzaXZlTWVtb3J5VXNlZChj
b25zdCBQcmVmaXhUcmVlVmVydGV4JiB2ZXJ0ZXgpCiB7CkBAIC0yMDYsMzkgKzIyMCwxODYgQEAg
dm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OmFkZFBhdHRlcm4odWludDY0X3QgYWN0aW9uSWQsIGNv
bnN0IFZlY3RvcjxUZXJtPiYgcGF0dGUKICAgICAgICAgYWN0aW9ucy5hcHBlbmQoYWN0aW9uSWQp
OwogfQogCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZU5GQUZvclN1YnRyZWUoTkZBJiBuZmEsIEltbXV0
YWJsZUNoYXJORkFOb2RlQnVpbGRlciYmIHN1YnRyZWVSb290LCBQcmVmaXhUcmVlVmVydGV4JiBy
b290LCBIYXNoTWFwPGNvbnN0IFByZWZpeFRyZWVWZXJ0ZXgqLCBBY3Rpb25MaXN0PiYgYWN0aW9u
cywgc2l6ZV90IG1heE5GQVNpemUpCitzdHJ1Y3QgQWN0aXZlU3VidHJlZSB7CisgICAgQWN0aXZl
U3VidHJlZShQcmVmaXhUcmVlVmVydGV4JiB2ZXJ0ZXgsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVp
bGRlciYmIG5mYU5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKKyAgICAgICAgOiB2ZXJ0ZXgodmVy
dGV4KQorICAgICAgICAsIG5mYU5vZGUoV1RGOjptb3ZlKG5mYU5vZGUpKQorICAgICAgICAsIGVk
Z2VJbmRleChlZGdlSW5kZXgpCisgICAgeworICAgIH0KKyAgICBQcmVmaXhUcmVlVmVydGV4JiB2
ZXJ0ZXg7CisgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5mYU5vZGU7CisgICAgdW5z
aWduZWQgZWRnZUluZGV4OworfTsKKworc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmZpeFVuc3VpdGFi
bGVGb3JSZXZlcnNlU3VmZml4VHJlZShORkEmIG5mYSwgVmVjdG9yPEFjdGl2ZVN1YnRyZWU+JiBz
dGFjaywgY29uc3QgSGFzaE1hcDxjb25zdCBQcmVmaXhUcmVlVmVydGV4KiwgQWN0aW9uTGlzdD4m
IGFjdGlvbnMpCit7CisgICAgLy8gVG8gYXZvaWQgY29uZmxpY3RzLCB3ZSB1c2UgdGhlIHJldmVy
c2Ugc3VmZml4IHRyZWUgZm9yIHN1YnRyZWVzIHRoYXQgZG8gbm90IG1lcmdlCisgICAgLy8gaW4g
dGhlIHByZWZpeCB0cmVlLgorICAgIC8vCisgICAgLy8gV2Ugb25seSB1bmlmeSB0aGUgc3VmZml4
ZXMgdG8gdGhlIGFjdGlvbnMgb24gdGhlIGxlYWYuCisgICAgLy8gSWYgdGhlcmUgYXJlIGFjdGlv
bnMgaW5zaWRlIHRoZSB0cmVlLCB3ZSBnZW5lcmF0ZSB0aGUgcGFydCBvZiB0aGUgc3VidHJlZSB1
cCB0byB0aGUgYWN0aW9uLgorICAgIC8vCisgICAgLy8gSWYgd2UgYWNjaWRlbnRhbGx5IGluc2Vy
dCBhIG5vZGUgd2l0aCBhY3Rpb24gaW5zaWRlIHRoZSByZXZlcnNlLXN1ZmZpeC10cmVlLCB3ZSB3
b3VsZCBjcmVhdGUKKyAgICAvLyBuZXcgYWN0aW9ucyBvbiB1bnJlbGF0ZWQgcGF0dGVybiB3aGVu
IHVuaWZ5aW5nIHRoZWlyIHN1ZmZpeGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IHN0YWNrLnNp
emUoKSAtIDE7IGktLTspIHsKKyAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0aXZlU3VidHJlZSA9
IHN0YWNrW2ldOworICAgICAgICBpZiAoYWN0aXZlU3VidHJlZS5uZmFOb2RlLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NB
R0UoaSA+IDAsICJUaGUgYm90dG9tIG9mIHRoZSBzdGFjayBtdXN0IGJlIHRoZSByb290IG9mIG91
ciBmaXhlZC1sZW5ndGggc3VidHJlZS4gSXQgc2hvdWxkIGhhdmUgaXQgdGhlIGlzVmFsaWQoKSBj
YXNlIGFib3ZlLiIpOworCisgICAgICAgIGF1dG8gYWN0aW9uc0l0ZXJhdG9yID0gYWN0aW9ucy5m
aW5kKCZhY3RpdmVTdWJ0cmVlLnZlcnRleCk7CisgICAgICAgIGJvb2wgaGFzQWN0aW9uSW5zaWRl
VHJlZSA9IGFjdGlvbnNJdGVyYXRvciAhPSBhY3Rpb25zLmVuZCgpOworCisgICAgICAgIC8vIFN0
cmljdG8gc2Vuc3UsIHdlIHNob3VsZCBjb3VudCB0aGUgbnVtYmVyIG9mIGV4aXQgZWRnZXMgd2l0
aCBmaXhlZCBsZW5ndGguCisgICAgICAgIC8vIFRoYXQgaXMgY29zdGx5IGFuZCB1bmxpa2VseSB0
byBtYXR0ZXIgaW4gcHJhY3RpY2UuCisgICAgICAgIGJvb2wgaGFzU2luZ2xlT3V0Y29tZSA9IGFj
dGl2ZVN1YnRyZWUudmVydGV4LmVkZ2VzLnNpemUoKSA9PSAxOworCisgICAgICAgIGlmIChoYXNB
Y3Rpb25JbnNpZGVUcmVlIHx8ICFoYXNTaW5nbGVPdXRjb21lKSB7CisgICAgICAgICAgICAvLyBH
byBiYWNrIHRvIHRoZSBlbmQgb2YgdGhlIHN1YnRyZWUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGdl
bmVyYXRlZC4KKyAgICAgICAgICAgIC8vIEZyb20gdGhlcmUsIGdlbmVyYXRlIGV2ZXJ5dGhpbmcg
dXAgdG8gdGhlIHZlcnRleCB3ZSBmb3VuZC4KKyAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IGk7
CisgICAgICAgICAgICB1bnNpZ25lZCBiZWdpbm5pbmcgPSBlbmQ7CisKKyAgICAgICAgICAgIEFj
dGl2ZVN1YnRyZWUqIHNvdXJjZUFjdGl2ZVN1YnRyZWUgPSBudWxscHRyOworICAgICAgICAgICAg
d2hpbGUgKGJlZ2lubmluZy0tKSB7CisgICAgICAgICAgICAgICAgQWN0aXZlU3VidHJlZSYgYWN0
aXZlU3VidHJlZSA9IHN0YWNrW2JlZ2lubmluZ107CisgICAgICAgICAgICAgICAgaWYgKGFjdGl2
ZVN1YnRyZWUubmZhTm9kZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc291cmNl
QWN0aXZlU3VidHJlZSA9ICZhY3RpdmVTdWJ0cmVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKHNvdXJjZUFjdGl2ZVN1YnRyZWUsICJUaGUgcm9vdCBzaG91bGQgYWx3YXlz
IGhhdmUgYSB2YWxpZCBnZW5lcmF0b3IuIik7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
c3RhY2tJbmRleCA9IGJlZ2lubmluZyArIDE7IHN0YWNrSW5kZXggPD0gZW5kOyArK3N0YWNrSW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHNvdXJj
ZU5vZGUgPSBzb3VyY2VBY3RpdmVTdWJ0cmVlLT5uZmFOb2RlOworICAgICAgICAgICAgICAgIEFT
U0VSVChzb3VyY2VOb2RlLmlzVmFsaWQoKSk7CisgICAgICAgICAgICAgICAgYXV0byYgZWRnZSA9
IHNvdXJjZUFjdGl2ZVN1YnRyZWUtPnZlcnRleC5lZGdlc1tzb3VyY2VBY3RpdmVTdWJ0cmVlLT5l
ZGdlSW5kZXhdOworCisgICAgICAgICAgICAgICAgQWN0aXZlU3VidHJlZSYgZGVzdGluYXRpb25B
Y3RpdmVTdWJ0cmVlID0gc3RhY2tbc3RhY2tJbmRleF07CisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25BY3RpdmVTdWJ0cmVlLm5mYU5vZGUgPSBlZGdlLnRlcm0tPmdlbmVyYXRlR3JhcGgobmZh
LCBzb3VyY2VOb2RlLCBhY3Rpb25zLmdldCgmZGVzdGluYXRpb25BY3RpdmVTdWJ0cmVlLnZlcnRl
eCkpOworCisgICAgICAgICAgICAgICAgc291cmNlQWN0aXZlU3VidHJlZSA9ICZkZXN0aW5hdGlv
bkFjdGl2ZVN1YnRyZWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdGVTdWZmaXhXaXRoUmV2ZXJz
ZVN1ZmZpeFRyZWUoTkZBJiBuZmEsIFZlY3RvcjxBY3RpdmVTdWJ0cmVlPiYgc3RhY2ssIGNvbnN0
IEhhc2hNYXA8Y29uc3QgUHJlZml4VHJlZVZlcnRleCosIEFjdGlvbkxpc3Q+JiBhY3Rpb25zLCBS
ZXZlcnNlU3VmZml4VHJlZVJvb3RzJiByZXZlcnNlU3VmZml4VHJlZVJvb3RzKQoreworICAgIEFj
dGl2ZVN1YnRyZWUmIGxlYWZTdWJ0cmVlID0gc3RhY2subGFzdCgpOworICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoIWxlYWZTdWJ0cmVlLm5mYU5vZGUuaXNWYWxpZCgpLCAiVGhlIGxlYWYgc2hvdWxk
IG5ldmVyIGJlIGdlbmVyYXRlZCBieSB0aGUgY29kZSBhYm92ZSwgaXQgc2hvdWxkIGFsd2F5cyBi
ZSBpbnNlcnRlZCBpbnRvIHRoZSBwcmVmaXggdHJlZS4iKTsKKworICAgIEFjdGlvbkxpc3QgYWN0
aW9uTGlzdCA9IGFjdGlvbnMuZ2V0KCZsZWFmU3VidHJlZS52ZXJ0ZXgpOworICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoIWFjdGlvbkxpc3QuaXNFbXB0eSgpLCAiT3VyIHByZWZpeCB0cmVlIHNob3Vs
ZCBhbHdheXMgaGF2ZSBhY3Rpb25zIG9uIHRoZSBsZWF2ZXMgYnkgY29uc3RydWN0aW9uLiIpOwor
CisgICAgSGFzaGFibGVBY3Rpb25MaXN0IGhhc2hhYmxlQWN0aW9uTGlzdChhY3Rpb25MaXN0KTsK
KyAgICBhdXRvIHJvb3RBZGRSZXN1bHQgPSByZXZlcnNlU3VmZml4VHJlZVJvb3RzLmFkZChoYXNo
YWJsZUFjdGlvbkxpc3QsIFJldmVyc2VTdWZmaXhUcmVlVmVydGV4KCkpOworICAgIGlmIChyb290
QWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWls
ZGVyIG5ld05vZGUobmZhKTsKKyAgICAgICAgbmV3Tm9kZS5zZXRBY3Rpb25zKGFjdGlvbkxpc3Qu
YmVnaW4oKSwgYWN0aW9uTGlzdC5lbmQoKSk7CisgICAgICAgIHJvb3RBZGRSZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLm5vZGVJZCA9IG5ld05vZGUubm9kZUlkKCk7CisgICAgfQorCisgICAgUmV2ZXJz
ZVN1ZmZpeFRyZWVWZXJ0ZXgqIGFjdGl2ZVJldmVyc2VTdWZmaXhUcmVlVmVydGV4ID0gJnJvb3RB
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIHVpbnQzMl90IGRlc3RpbmF0aW9uTm9kZUlk
ID0gcm9vdEFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUubm9kZUlkOworCisgICAgdW5zaWduZWQg
c3RhY2tQb3NpdGlvbiA9IHN0YWNrLnNpemUoKSAtIDI7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgQWN0aXZlU3VidHJlZSYgc291cmNlID0gc3RhY2tbc3RhY2tQb3NpdGlvbl07CisgICAg
ICAgIGF1dG8mIGVkZ2UgPSBzb3VyY2UudmVydGV4LmVkZ2VzW3NvdXJjZS5lZGdlSW5kZXhdOwor
CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGVuZCBjb25kaXRpb246IHdoZW4gd2UgbWVldCBhIG5v
ZGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZCwKKyAgICAgICAgLy8gd2UganVzdCBu
ZWVkIHRvIGNvbm5lY3Qgb3VyIGJhY2t3YXJkIHRyZWUgdG8gdGhlIGZvcndhcmQgdHJlZS4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gV2UgKm11c3Qgbm90KiBhZGQgdGhpcyBsYXN0IG5vZGUgdG8g
dGhlIHJldmVyc2Utc3VmZml4IHRyZWUuIFRoYXQgbm9kZSBjYW4gaGF2ZQorICAgICAgICAvLyB0
cmFuc2l0aW9ucyBiYWNrIHRvIGVhcmxpZXIgcGFydCBvZiB0aGUgcHJlZml4IHRyZWUuIElmIHRo
ZSBwcmVmaXggdHJlZSAiY2FjaGVzIgorICAgICAgICAvLyBzdWNoIG5vZGUsIGl0IHdvdWxkIGNy
ZWF0ZSBuZXcgdHJhbnNpdGlvbnMgdGhhdCBkaWQgbm90IGV4aXN0IGluIHRoZSBzb3VyY2UgbGFu
Z3VhZ2UuCisgICAgICAgIGlmIChzb3VyY2UubmZhTm9kZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIHN0YWNrLnNocmluayhzdGFja1Bvc2l0aW9uICsgMSk7CisgICAgICAgICAgICBlZGdlLnRl
cm0tPmdlbmVyYXRlR3JhcGgobmZhLCBzb3VyY2UubmZhTm9kZSwgZGVzdGluYXRpb25Ob2RlSWQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC0tc3RhY2tQb3NpdGlv
bjsKKworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFhY3Rpb25zLmNvbnRhaW5zKCZzb3Vy
Y2UudmVydGV4KSwgIkFueSBub2RlIHdpdGggZmluYWwgYWN0aW9ucyBzaG91bGQgaGF2ZSBiZWVu
IGNyZWF0ZWQgYmVmb3JlIGhpdHRpbmcgdGhlIHJldmVyc2Ugc3VmZml4LXRyZWUuIik7CisKKyAg
ICAgICAgUmV2ZXJzZVN1ZmZpeFRyZWVFZGdlKiBleGlzdGluZ0VkZ2UgPSBudWxscHRyOworICAg
ICAgICBmb3IgKFJldmVyc2VTdWZmaXhUcmVlRWRnZSYgcG90ZW50aWFsRXhpc3RpbmdFZGdlIDog
YWN0aXZlUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXgtPmVkZ2VzKSB7CisgICAgICAgICAgICBpZiAo
ZWRnZS50ZXJtID09IHBvdGVudGlhbEV4aXN0aW5nRWRnZS50ZXJtKSB7CisgICAgICAgICAgICAg
ICAgZXhpc3RpbmdFZGdlID0gJnBvdGVudGlhbEV4aXN0aW5nRWRnZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChleGlzdGlu
Z0VkZ2UpCisgICAgICAgICAgICBhY3RpdmVSZXZlcnNlU3VmZml4VHJlZVZlcnRleCA9IGV4aXN0
aW5nRWRnZS0+Y2hpbGQuZ2V0KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgSW1tdXRh
YmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5ld05vZGUobmZhKTsKKyAgICAgICAgICAgIGVkZ2UudGVy
bS0+Z2VuZXJhdGVHcmFwaChuZmEsIG5ld05vZGUsIGRlc3RpbmF0aW9uTm9kZUlkKTsKKyAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXZlcnNlU3VmZml4VHJlZVZlcnRleD4gbmV3VmVydGV4
KG5ldyBSZXZlcnNlU3VmZml4VHJlZVZlcnRleCgpKTsKKyAgICAgICAgICAgIG5ld1ZlcnRleC0+
bm9kZUlkID0gbmV3Tm9kZS5ub2RlSWQoKTsKKworICAgICAgICAgICAgUmV2ZXJzZVN1ZmZpeFRy
ZWVWZXJ0ZXgqIG5ld1ZlcnRleEFkZHJlc3MgPSBuZXdWZXJ0ZXguZ2V0KCk7CisgICAgICAgICAg
ICBhY3RpdmVSZXZlcnNlU3VmZml4VHJlZVZlcnRleC0+ZWRnZXMuYXBwZW5kKFJldmVyc2VTdWZm
aXhUcmVlRWRnZSh7IGVkZ2UudGVybSwgV1RGOjptb3ZlKG5ld1ZlcnRleCkgfSkpOworICAgICAg
ICAgICAgYWN0aXZlUmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXggPSBuZXdWZXJ0ZXhBZGRyZXNzOwor
ICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uTm9kZUlkID0gYWN0aXZlUmV2ZXJzZVN1ZmZp
eFRyZWVWZXJ0ZXgtPm5vZGVJZDsKKworICAgICAgICBBU1NFUlQoc291cmNlLnZlcnRleC5lZGdl
cy5zaXplKCkgPT0gMSk7CisgICAgICAgIHNvdXJjZS52ZXJ0ZXguZWRnZXMuY2xlYXIoKTsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGF0aWMgdm9p
ZCBjbGVhclJldmVyc2VTdWZmaXhUcmVlKFJldmVyc2VTdWZmaXhUcmVlUm9vdHMmIHJldmVyc2VT
dWZmaXhUcmVlUm9vdHMpCit7CisgICAgLy8gV2UgY2Fubm90IHJlbHkgb24gdGhlIGRlc3RydWN0
b3IgYmVpbmcgY2FsbGVkIGluIG9yZGVyIGZyb20gdG9wIHRvIGJvdHRvbSBhcyB3ZSBtYXkgb3Zl
cmZsb3cKKyAgICAvLyB0aGUgc3RhY2suIEluc3RlYWQsIHdlIGdvIGRlcHRoIGZpcnN0IGluIHRo
ZSByZXZlcnNlLXN1ZmZpeC10cmVlLgorCisgICAgZm9yIChhdXRvJiBzbG90IDogcmV2ZXJzZVN1
ZmZpeFRyZWVSb290cykgeworICAgICAgICBWZWN0b3I8UmV2ZXJzZVN1ZmZpeFRyZWVWZXJ0ZXgq
LCAxMjg+IHN0YWNrOworICAgICAgICBzdGFjay5hcHBlbmQoJnNsb3QudmFsdWUpOworCisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBSZXZlcnNlU3VmZml4VHJlZVZlcnRleCog
dG9wID0gc3RhY2subGFzdCgpOworICAgICAgICAgICAgaWYgKHRvcC0+ZWRnZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgICAg
IGlmIChzdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIHN0YWNrLmxhc3QoKS0+ZWRnZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKHRvcC0+ZWRnZXMubGFzdCgpLmNo
aWxkLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXZlcnNlU3VmZml4VHJlZVJvb3Rz
LmNsZWFyKCk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5m
YSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiYgc3VidHJlZVJvb3QsIFByZWZpeFRyZWVW
ZXJ0ZXgmIHJvb3QsIGNvbnN0IEhhc2hNYXA8Y29uc3QgUHJlZml4VHJlZVZlcnRleCosIEFjdGlv
bkxpc3Q+JiBhY3Rpb25zLCBzaXplX3QgbWF4TkZBU2l6ZSkKIHsKICAgICAvLyBUaGlzIHJlY3Vy
c2VzIHRoZSBzdWJ0cmVlIG9mIHRoZSBwcmVmaXggdHJlZS4KICAgICAvLyBGb3IgZWFjaCBlZGdl
IHRoYXQgaGFzIGZpeGVkIGxlbmd0aCAobm8gcXVhbnRpZmllcnMgbGlrZSA/LCAqLCBvciArKSBp
dCBnZW5lcmF0ZXMgdGhlIG5mYSBncmFwaCwKICAgICAvLyByZWN1cnNlcyBpbnRvIGNoaWxkcmVu
LCBhbmQgZGVsZXRlcyBhbnkgcHJvY2Vzc2VkIGxlYWYgbm9kZXMuCi0gICAgc3RydWN0IEFjdGl2
ZVN1YnRyZWUgewotICAgICAgICBBY3RpdmVTdWJ0cmVlKFByZWZpeFRyZWVWZXJ0ZXgmIHZlcnRl
eCwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiYgbmZhTm9kZSwgdW5zaWduZWQgZWRnZUlu
ZGV4KQotICAgICAgICAgICAgOiB2ZXJ0ZXgodmVydGV4KQotICAgICAgICAgICAgLCBuZmFOb2Rl
KFdURjo6bW92ZShuZmFOb2RlKSkKLSAgICAgICAgICAgICwgZWRnZUluZGV4KGVkZ2VJbmRleCkK
LSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIFByZWZpeFRyZWVWZXJ0ZXgmIHZlcnRleDsK
LSAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5mYU5vZGU7Ci0gICAgICAgIHVu
c2lnbmVkIGVkZ2VJbmRleDsKLSAgICB9OworCisgICAgUmV2ZXJzZVN1ZmZpeFRyZWVSb290cyBy
ZXZlcnNlU3VmZml4VHJlZVJvb3RzOwogICAgIFZlY3RvcjxBY3RpdmVTdWJ0cmVlPiBzdGFjazsK
ICAgICBpZiAoIXJvb3QuZWRnZXMuaXNFbXB0eSgpKQogICAgICAgICBzdGFjay5hcHBlbmQoQWN0
aXZlU3VidHJlZShyb290LCBXVEY6Om1vdmUoc3VidHJlZVJvb3QpLCAwKSk7CisKICAgICBib29s
IG5mYVRvb0JpZyA9IGZhbHNlOwogICAgIAogICAgIC8vIEdlbmVyYXRlIGdyYXBocyBmb3IgZWFj
aCBzdWJ0cmVlIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgcXVhbnRpZmllcnMuCiAgICAgd2hp
bGUgKCFzdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgUHJlZml4VHJlZVZlcnRleCYgdmVydGV4
ID0gc3RhY2subGFzdCgpLnZlcnRleDsKICAgICAgICAgY29uc3QgdW5zaWduZWQgZWRnZUluZGV4
ID0gc3RhY2subGFzdCgpLmVkZ2VJbmRleDsKLSAgICAgICAgCi0gICAgICAgIC8vIE9ubHkgc3Rv
cCBnZW5lcmF0aW5nIGFuIE5GQSBhdCBhIGxlYWYgdG8gZW5zdXJlIHdlIGhhdmUgYSBjb3JyZWN0
IE5GQS4gV2UgY291bGQgZ28gc2xpZ2h0bHkgb3ZlciB0aGUgbWF4TkZBU2l6ZS4KLSAgICAgICAg
aWYgKHZlcnRleC5lZGdlcy5pc0VtcHR5KCkgJiYgbmZhLm5vZGVzLnNpemUoKSA+IG1heE5GQVNp
emUpCi0gICAgICAgICAgICBuZmFUb29CaWcgPSB0cnVlOwotICAgICAgICAKKwogICAgICAgICBp
ZiAoZWRnZUluZGV4IDwgdmVydGV4LmVkZ2VzLnNpemUoKSkgewogICAgICAgICAgICAgYXV0byYg
ZWRnZSA9IHZlcnRleC5lZGdlc1tlZGdlSW5kZXhdOwotICAgICAgICAgICAgCisKICAgICAgICAg
ICAgIC8vIENsZWFuIHVwIGFueSBwcm9jZXNzZWQgbGVhdmVzIGFuZCByZXR1cm4gZWFybHkgaWYg
d2UgYXJlIHBhc3QgdGhlIG1heE5GQVNpemUuCiAgICAgICAgICAgICBpZiAobmZhVG9vQmlnKSB7
CiAgICAgICAgICAgICAgICAgc3RhY2subGFzdCgpLmVkZ2VJbmRleCA9IHN0YWNrLmxhc3QoKS52
ZXJ0ZXguZWRnZXMuc2l6ZSgpOwpAQCAtMjUxLDE3ICs0MTIsMjggQEAgc3RhdGljIHZvaWQgZ2Vu
ZXJhdGVORkFGb3JTdWJ0cmVlKE5GQSYgbmZhLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIm
JiBzdWJ0cmUKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotCi0g
ICAgICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgbmV3Tm9kZSA9IGVkZ2UudGVy
bS0+Z2VuZXJhdGVHcmFwaChuZmEsIHN0YWNrLmxhc3QoKS5uZmFOb2RlLCBhY3Rpb25zLmdldChl
ZGdlLmNoaWxkLmdldCgpKSk7CiAgICAgICAgICAgICBBU1NFUlQoZWRnZS5jaGlsZC5nZXQoKSk7
Ci0gICAgICAgICAgICBzdGFjay5hcHBlbmQoQWN0aXZlU3VidHJlZSgqZWRnZS5jaGlsZC5nZXQo
KSwgV1RGOjptb3ZlKG5ld05vZGUpLCAwKSk7CisgICAgICAgICAgICBJbW11dGFibGVDaGFyTkZB
Tm9kZUJ1aWxkZXIgZW1wdHlCdWlsZGVyOworICAgICAgICAgICAgc3RhY2suYXBwZW5kKEFjdGl2
ZVN1YnRyZWUoKmVkZ2UuY2hpbGQuZ2V0KCksIFdURjo6bW92ZShlbXB0eUJ1aWxkZXIpLCAwKSk7
CiAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIGlzTGVhZiA9IHZlcnRleC5lZGdl
cy5pc0VtcHR5KCk7CisKICAgICAgICAgICAgIEFTU0VSVChlZGdlSW5kZXggPT0gdmVydGV4LmVk
Z2VzLnNpemUoKSk7CiAgICAgICAgICAgICB2ZXJ0ZXguZWRnZXMucmVtb3ZlQWxsTWF0Y2hpbmco
W10oUHJlZml4VHJlZUVkZ2UmIGVkZ2UpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuICFlZGdlLnRlcm07CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHN0YWNrLnJl
bW92ZUxhc3QoKTsKKworICAgICAgICAgICAgaWYgKGlzTGVhZikgeworICAgICAgICAgICAgICAg
IGdlbmVyYXRlSW5maXhVbnN1aXRhYmxlRm9yUmV2ZXJzZVN1ZmZpeFRyZWUobmZhLCBzdGFjaywg
YWN0aW9ucyk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVTdWZmaXhXaXRoUmV2ZXJzZVN1ZmZp
eFRyZWUobmZhLCBzdGFjaywgYWN0aW9ucywgcmV2ZXJzZVN1ZmZpeFRyZWVSb290cyk7CisKKyAg
ICAgICAgICAgICAgICAvLyBPbmx5IHN0b3AgZ2VuZXJhdGluZyBhbiBORkEgYXQgYSBsZWFmIHRv
IGVuc3VyZSB3ZSBoYXZlIGEgY29ycmVjdCBORkEuIFdlIGNvdWxkIGdvIHNsaWdodGx5IG92ZXIg
dGhlIG1heE5GQVNpemUuCisgICAgICAgICAgICAgICAgaWYgKG5mYS5ub2Rlcy5zaXplKCkgPiBt
YXhORkFTaXplKQorICAgICAgICAgICAgICAgICAgICBuZmFUb29CaWcgPSB0cnVlOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlTGFzdCgpOworCiAgICAg
ICAgICAgICBpZiAoIXN0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGF1dG8mIGFj
dGl2ZVN1YnRyZWUgPSBzdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgYXV0byYgZWRnZSA9
IGFjdGl2ZVN1YnRyZWUudmVydGV4LmVkZ2VzW3N0YWNrLmxhc3QoKS5lZGdlSW5kZXhdOwpAQCAt
MjcxLDYgKzQ0Myw3IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlTkZBRm9yU3VidHJlZShORkEmIG5m
YSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiYgc3VidHJlCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CisgICAgY2xlYXJSZXZlcnNlU3VmZml4VHJlZShyZXZlcnNlU3VmZml4
VHJlZVJvb3RzKTsKIH0KIAogdm9pZCBDb21iaW5lZFVSTEZpbHRlcnM6OnByb2Nlc3NORkFzKHNp
emVfdCBtYXhORkFTaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoTkZBJiYpPiBoYW5kbGVyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5jcHAKaW5kZXggOTQ1MzVhN2JjMTA4NjIw
YzJhZDgxOGNjZTY5MDE3ZDJlNTk5YzczYy4uZDAxY2QyYWJiY2I0MTMzNTE1NTUxZmFkZmJhMzQ0
MDhhYmZiMDA4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCkBA
IC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBERkE6OmRlYnVnUHJpbnREb3QoKSBjb25zdAogICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCIlbGx1IiwgYWN0aW9uc1thY3Rpb25JbmRleF0pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRhdGFMb2dGKCJdIik7CisgICAgICAgIGRhdGFM
b2dGKCI+XSIpOwogCiAgICAgICAgIGlmICghYWN0aW9ucy5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBkYXRhTG9nRigiIFtzaGFwZT1kb3VibGVjaXJjbGVdIik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9IYXNoYWJsZUFjdGlvbkxpc3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0hhc2hhYmxlQWN0aW9uTGlzdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjFkYjlkOTM2MzdlMTZkZTA4MWZjMDliODViMjlhNGYyODhlZmU0MDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9IYXNoYWJsZUFjdGlvbkxpc3Qu
aApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBIYXNoYWJsZUFjdGlvbkxp
c3RfaAorI2RlZmluZSBIYXNoYWJsZUFjdGlvbkxpc3RfaAorCisjaW5jbHVkZSA8d3RmL1N0cmlu
Z0hhc2hlci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitzdHJ1Y3QgSGFzaGFibGVBY3Rp
b25MaXN0IHsKKyAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OworICAg
IGV4cGxpY2l0IEhhc2hhYmxlQWN0aW9uTGlzdChEZWxldGVkVmFsdWVUYWcpIHsgc3RhdGUgPSBE
ZWxldGVkOyB9CisKKyAgICBlbnVtIEVtcHR5VmFsdWVUYWcgeyBFbXB0eVZhbHVlIH07CisgICAg
ZXhwbGljaXQgSGFzaGFibGVBY3Rpb25MaXN0KEVtcHR5VmFsdWVUYWcpIHsgc3RhdGUgPSBFbXB0
eTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQW55VmVjdG9yVHlwZT4KKyAgICBleHBsaWNp
dCBIYXNoYWJsZUFjdGlvbkxpc3QoY29uc3QgQW55VmVjdG9yVHlwZSYgb3RoZXJBY3Rpb25zKQor
ICAgICAgICA6IGFjdGlvbnMob3RoZXJBY3Rpb25zKQorICAgICAgICAsIHN0YXRlKFZhbGlkKQor
ICAgIHsKKyAgICAgICAgc3RkOjpzb3J0KGFjdGlvbnMuYmVnaW4oKSwgYWN0aW9ucy5lbmQoKSk7
CisgICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7CisgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0
ZXJzQXNzdW1pbmdBbGlnbmVkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihhY3Rpb25z
LmRhdGEoKSksIGFjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKHVpbnQ2NF90KSAvIHNpemVvZihVQ2hh
cikpOworICAgICAgICBoYXNoID0gaGFzaGVyLmhhc2goKTsKKyAgICB9CisKKyAgICBib29sIGlz
RW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlID09IEVtcHR5OyB9CisgICAgYm9vbCBp
c0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlID09IERlbGV0ZWQ7IH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoYWJsZUFjdGlvbkxpc3Qgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGUgPT0gb3RoZXIuc3RhdGUgJiYgYWN0aW9ucyA9PSBv
dGhlci5hY3Rpb25zOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBIYXNoYWJs
ZUFjdGlvbkxpc3Qgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ2NF90PiBhY3Rpb25zOworICAgIHVu
c2lnbmVkIGhhc2g7CisgICAgZW51bSB7CisgICAgICAgIFZhbGlkLAorICAgICAgICBFbXB0eSwK
KyAgICAgICAgRGVsZXRlZAorICAgIH0gc3RhdGU7Cit9OworCitzdHJ1Y3QgSGFzaGFibGVBY3Rp
b25MaXN0SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSGFzaGFibGVBY3Rp
b25MaXN0JiBhY3Rpb25LZXkpCisgICAgeworICAgICAgICByZXR1cm4gYWN0aW9uS2V5Lmhhc2g7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSGFzaGFibGVBY3Rpb25MaXN0
JiBhLCBjb25zdCBIYXNoYWJsZUFjdGlvbkxpc3QmIGIpCisgICAgeworICAgICAgICByZXR1cm4g
YSA9PSBiOworICAgIH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IGZhbHNlOworfTsKKworc3RydWN0IEhhc2hhYmxlQWN0aW9uTGlzdEhhc2hU
cmFpdHMgOiBwdWJsaWMgV1RGOjpDdXN0b21IYXNoVHJhaXRzPEhhc2hhYmxlQWN0aW9uTGlzdD4g
eworICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9JbW11dGFibGVORkFOb2RlQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIuaAppbmRleCA3ZmZhZmNlYTQ5YzRlNjM0ZWNj
YTUwZTJlNzE3ZTUyNjE5OTE5OGQ2Li43Yjg1Y2ZkOGZhNDM2OWI4N2Y2YjEwNWUyNzM3ZTQ3Y2M0
ODM4YmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9JbW11
dGFibGVORkFOb2RlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0ltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmgKQEAgLTUyLDkgKzUyLDYgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgbV9ub2RlSWQgPSBtX2ltbXV0YWJsZU5GQS0+bm9kZXMuc2l6ZSgpOwog
ICAgICAgICBtX2ltbXV0YWJsZU5GQS0+bm9kZXMuYXBwZW5kKEltbXV0YWJsZU5GQU5vZGUoKSk7
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBtX2lzRGlzY29ubmVjdGVkID0gdHJ1ZTsK
LSNlbmRpZgogICAgIH0KIAogICAgIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyKEltbXV0YWJsZU5G
QU5vZGVCdWlsZGVyJiYgb3RoZXIpCkBAIC02NCwyNSArNjEsMjggQEAgcHVibGljOgogICAgICAg
ICAsIG1fYWN0aW9ucyhXVEY6Om1vdmUob3RoZXIubV9hY3Rpb25zKSkKICAgICAgICAgLCBtX25v
ZGVJZChvdGhlci5tX25vZGVJZCkKICAgICAgICAgLCBtX2ZpbmFsaXplZChvdGhlci5tX2ZpbmFs
aXplZCkKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgICwgbV9pc0Rpc2Nvbm5lY3RlZChv
dGhlci5tX2lzRGlzY29ubmVjdGVkKQotI2VuZGlmCiAgICAgewogICAgICAgICBvdGhlci5tX2lt
bXV0YWJsZU5GQSA9IG51bGxwdHI7CiAgICAgICAgIG90aGVyLm1fZmluYWxpemVkID0gdHJ1ZTsK
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIG90aGVyLm1faXNEaXNjb25uZWN0ZWQgPSBm
YWxzZTsKLSNlbmRpZgogICAgIH0KIAogICAgIH5JbW11dGFibGVORkFOb2RlQnVpbGRlcigpCiAg
ICAgewotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX2lzRGlzY29ubmVjdGVkLCAiVGhp
cyBub2RlcyBpcyBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nIGFuZCBpcyBub3QgcmVhY2hlZCBi
eSBhbnkgb3RoZXIgbm9kZS4iKTsKLQogICAgICAgICBpZiAoIW1fZmluYWxpemVkKQogICAgICAg
ICAgICAgZmluYWxpemUoKTsKICAgICB9CiAKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICEhbV9pbW11dGFibGVORkE7CisgICAgfQorCisgICAgdWludDMy
X3Qgbm9kZUlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAg
ICAgICByZXR1cm4gbV9ub2RlSWQ7CisgICAgfQorCiAgICAgc3RydWN0IFRyaXZpYWxSYW5nZSB7
CiAgICAgICAgIENoYXJhY3RlclR5cGUgZmlyc3Q7CiAgICAgICAgIENoYXJhY3RlclR5cGUgbGFz
dDsKQEAgLTEwOCwxNSArMTA4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0VuZDsKICAg
ICB9OwogCi0gICAgdm9pZCBhZGRUcmFuc2l0aW9uKENoYXJhY3RlclR5cGUgZmlyc3QsIENoYXJh
Y3RlclR5cGUgbGFzdCwgY29uc3QgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXImIHRhcmdldCkKKyAg
ICB2b2lkIGFkZFRyYW5zaXRpb24oQ2hhcmFjdGVyVHlwZSBmaXJzdCwgQ2hhcmFjdGVyVHlwZSBs
YXN0LCB1aW50MzJfdCB0YXJnZXROb2RlSWQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fZmlu
YWxpemVkKTsKICAgICAgICAgQVNTRVJUKG1faW1tdXRhYmxlTkZBKTsKLSAgICAgICAgQVNTRVJU
KG1faW1tdXRhYmxlTkZBID09IHRhcmdldC5tX2ltbXV0YWJsZU5GQSk7Ci0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICBtX2lzRGlzY29ubmVjdGVkID0gZmFsc2U7Ci0gICAgICAgIHRhcmdl
dC5tX2lzRGlzY29ubmVjdGVkID0gZmFsc2U7Ci0jZW5kaWYKIAogICAgICAgICBzdHJ1Y3QgQ29u
dmVydGVyIHsKICAgICAgICAgICAgIFRhcmdldFNldCBjb252ZXJ0KHVpbnQzMl90IHRhcmdldCkK
QEAgLTEzMCwxOSArMTI1LDIwIEBAIHB1YmxpYzoKICAgICAgICAgfTsKICAgICAgICAgCiAgICAg
ICAgIENvbnZlcnRlciBjb252ZXJ0ZXI7Ci0gICAgICAgIG1fcmFuZ2VzLmV4dGVuZChGYWtlUmFu
Z2VJdGVyYXRvciB7IHsgZmlyc3QsIGxhc3QgfSwgdGFyZ2V0Lm1fbm9kZUlkLCBmYWxzZSB9LCBG
YWtlUmFuZ2VJdGVyYXRvciB7IHsgMCwgMCB9LCB0YXJnZXQubV9ub2RlSWQsIHRydWUgfSwgY29u
dmVydGVyKTsKKyAgICAgICAgbV9yYW5nZXMuZXh0ZW5kKEZha2VSYW5nZUl0ZXJhdG9yIHsgeyBm
aXJzdCwgbGFzdCB9LCB0YXJnZXROb2RlSWQsIGZhbHNlIH0sIEZha2VSYW5nZUl0ZXJhdG9yIHsg
eyAwLCAwIH0sIHRhcmdldE5vZGVJZCwgdHJ1ZSB9LCBjb252ZXJ0ZXIpOwogICAgIH0KIAogICAg
IHZvaWQgYWRkRXBzaWxvblRyYW5zaXRpb24oY29uc3QgSW1tdXRhYmxlTkZBTm9kZUJ1aWxkZXIm
IHRhcmdldCkKICAgICB7CisgICAgICAgIEFTU0VSVChtX2ltbXV0YWJsZU5GQSA9PSB0YXJnZXQu
bV9pbW11dGFibGVORkEpOworICAgICAgICBhZGRFcHNpbG9uVHJhbnNpdGlvbih0YXJnZXQubV9u
b2RlSWQpOworICAgIH0KKworICAgIHZvaWQgYWRkRXBzaWxvblRyYW5zaXRpb24odWludDMyX3Qg
dGFyZ2V0Tm9kZUlkKQorICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2ZpbmFsaXplZCk7CiAgICAg
ICAgIEFTU0VSVChtX2ltbXV0YWJsZU5GQSk7Ci0gICAgICAgIEFTU0VSVChtX2ltbXV0YWJsZU5G
QSA9PSB0YXJnZXQubV9pbW11dGFibGVORkEpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAg
ICAgbV9pc0Rpc2Nvbm5lY3RlZCA9IGZhbHNlOwotICAgICAgICB0YXJnZXQubV9pc0Rpc2Nvbm5l
Y3RlZCA9IGZhbHNlOwotI2VuZGlmCi0gICAgICAgIG1fZXBzaWxvblRyYW5zaXRpb25UYXJnZXRz
LmFkZCh0YXJnZXQubV9ub2RlSWQpOworICAgICAgICBtX2Vwc2lsb25UcmFuc2l0aW9uVGFyZ2V0
cy5hZGQodGFyZ2V0Tm9kZUlkKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBY3Rp
b25JdGVyYXRvcj4KQEAgLTE2OCwxMCArMTY0LDYgQEAgcHVibGljOgogCiAgICAgICAgIG90aGVy
Lm1faW1tdXRhYmxlTkZBID0gbnVsbHB0cjsKICAgICAgICAgb3RoZXIubV9maW5hbGl6ZWQgPSB0
cnVlOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgbV9pc0Rpc2Nvbm5lY3RlZCA9IG90
aGVyLm1faXNEaXNjb25uZWN0ZWQ7Ci0gICAgICAgIG90aGVyLm1faXNEaXNjb25uZWN0ZWQgPSBm
YWxzZTsKLSNlbmRpZgogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCkBAIC0yMzAsOSAr
MjIyLDYgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PEFjdGlvblR5cGUsIFdURjo6SW50SGFzaDxB
Y3Rpb25UeXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxBY3Rpb25UeXBl
Pj4gbV9hY3Rpb25zOwogICAgIHVpbnQzMl90IG1fbm9kZUlkOwogICAgIGJvb2wgbV9maW5hbGl6
ZWQgeyB0cnVlIH07Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIG11dGFibGUgYm9vbCBtX2lz
RGlzY29ubmVjdGVkIHsgZmFsc2UgfTsKLSNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVGVybS5oIGIvU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvVGVybS5oCmluZGV4IDZjNWI4N2MwM2UxYWZlNDNlYWU3OTQxZDdlNjY1
NDEzN2YwZmJjZWUuLmYzN2Q4N2NiMzFjZDYwNTA2YmI2NTc0N2NlY2QwMDk5YjIyZjA2YTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL1Rlcm0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9UZXJtLmgKQEAgLTgzLDcgKzgzLDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBxdWFudGlmeShjb25zdCBBdG9tUXVhbnRpZmllciYpOwogCi0g
ICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGdlbmVyYXRlR3JhcGgoTkZBJiwgSW1tdXRh
YmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzdGFydCwgY29uc3QgQWN0aW9uTGlzdCYgZmluYWxBY3Rp
b25zKSBjb25zdDsKKyAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgZ2VuZXJhdGVHcmFw
aChORkEmLCBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXImIHNvdXJjZSwgY29uc3QgQWN0aW9u
TGlzdCYgZmluYWxBY3Rpb25zKSBjb25zdDsKKyAgICB2b2lkIGdlbmVyYXRlR3JhcGgoTkZBJiwg
SW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UsIHVpbnQzMl90IGRlc3RpbmF0aW9u
KSBjb25zdDsKIAogICAgIGJvb2wgaXNFbmRPZkxpbmVBc3NlcnRpb24oKSBjb25zdDsKIApAQCAt
MTE4LDcgKzExOSw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBjYW4gYmUg
ZmFsc2UgZm9yIGEgZ3JvdXAgZXF1aXZhbGVudCB0byBhIHVuaXZlcnNhbCB0cmFuc2l0aW9uLgog
ICAgIGJvb2wgaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkgY29uc3Q7CiAKLSAgICBJbW11dGFibGVD
aGFyTkZBTm9kZUJ1aWxkZXIgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiwgSW1tdXRhYmxl
Q2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UpIGNvbnN0OworICAgIHZvaWQgZ2VuZXJhdGVTdWJn
cmFwaEZvckF0b20oTkZBJiwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UsIGNv
bnN0IEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgZGVzdGluYXRpb24pIGNvbnN0OworICAg
IHZvaWQgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiwgSW1tdXRhYmxlQ2hhck5GQU5vZGVC
dWlsZGVyJiBzb3VyY2UsIHVpbnQzMl90IGRlc3RpbmF0aW9uKSBjb25zdDsKIAogICAgIHZvaWQg
ZGVzdHJveSgpOwogCkBAIC0zNzcsNTAgKzM3OSw1MiBAQCBpbmxpbmUgdm9pZCBUZXJtOjpxdWFu
dGlmeShjb25zdCBBdG9tUXVhbnRpZmllciYgcXVhbnRpZmllcikKICAgICBtX3F1YW50aWZpZXIg
PSBxdWFudGlmaWVyOwogfQogCi1pbmxpbmUgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIFRl
cm06OmdlbmVyYXRlR3JhcGgoTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYg
c3RhcnQsIGNvbnN0IEFjdGlvbkxpc3QmIGZpbmFsQWN0aW9ucykgY29uc3QKK2lubGluZSBJbW11
dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgVGVybTo6Z2VuZXJhdGVHcmFwaChORkEmIG5mYSwgSW1t
dXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3VyY2UsIGNvbnN0IEFjdGlvbkxpc3QmIGZpbmFs
QWN0aW9ucykgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICBJbW11dGFibGVD
aGFyTkZBTm9kZUJ1aWxkZXIgbmV3RW5kKG5mYSk7CisgICAgZ2VuZXJhdGVHcmFwaChuZmEsIHNv
dXJjZSwgbmV3RW5kLm5vZGVJZCgpKTsKKyAgICBuZXdFbmQuc2V0QWN0aW9ucyhmaW5hbEFjdGlv
bnMuYmVnaW4oKSwgZmluYWxBY3Rpb25zLmVuZCgpKTsKKyAgICByZXR1cm4gbmV3RW5kOworfQog
Ci0gICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5ld0VuZDsKK2lubGluZSB2b2lkIFRl
cm06OmdlbmVyYXRlR3JhcGgoTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYg
c291cmNlLCB1aW50MzJfdCBkZXN0aW5hdGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKIAogICAgIHN3aXRjaCAobV9xdWFudGlmaWVyKSB7CiAgICAgY2FzZSBBdG9tUXVhbnRp
Zmllcjo6T25lOiB7Ci0gICAgICAgIG5ld0VuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JBdG9tKG5m
YSwgc3RhcnQpOworICAgICAgICBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEsIHNvdXJjZSwg
ZGVzdGluYXRpb24pOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBdG9tUXVhbnRp
Zmllcjo6WmVyb09yT25lOiB7Ci0gICAgICAgIG5ld0VuZCA9IGdlbmVyYXRlU3ViZ3JhcGhGb3JB
dG9tKG5mYSwgc3RhcnQpOwotICAgICAgICBzdGFydC5hZGRFcHNpbG9uVHJhbnNpdGlvbihuZXdF
bmQpOworICAgICAgICBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShuZmEsIHNvdXJjZSwgZGVzdGlu
YXRpb24pOworICAgICAgICBzb3VyY2UuYWRkRXBzaWxvblRyYW5zaXRpb24oZGVzdGluYXRpb24p
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6WmVyb09y
TW9yZTogewogICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgcmVwZWF0U3RhcnQo
bmZhKTsKLSAgICAgICAgc3RhcnQuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0U3RhcnQpOwor
ICAgICAgICBzb3VyY2UuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0U3RhcnQpOwogCi0gICAg
ICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciByZXBlYXRFbmQgPSBnZW5lcmF0ZVN1Ymdy
YXBoRm9yQXRvbShuZmEsIHJlcGVhdFN0YXJ0KTsKKyAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5v
ZGVCdWlsZGVyIHJlcGVhdEVuZChuZmEpOworICAgICAgICBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRv
bShuZmEsIHJlcGVhdFN0YXJ0LCByZXBlYXRFbmQpOwogICAgICAgICByZXBlYXRFbmQuYWRkRXBz
aWxvblRyYW5zaXRpb24ocmVwZWF0U3RhcnQpOwogCi0gICAgICAgIEltbXV0YWJsZUNoYXJORkFO
b2RlQnVpbGRlciBrbGVlbkVuZChuZmEpOwotICAgICAgICByZXBlYXRFbmQuYWRkRXBzaWxvblRy
YW5zaXRpb24oa2xlZW5FbmQpOwotICAgICAgICBzdGFydC5hZGRFcHNpbG9uVHJhbnNpdGlvbihr
bGVlbkVuZCk7Ci0gICAgICAgIG5ld0VuZCA9IFdURjo6bW92ZShrbGVlbkVuZCk7CisgICAgICAg
IHJlcGVhdEVuZC5hZGRFcHNpbG9uVHJhbnNpdGlvbihkZXN0aW5hdGlvbik7CisgICAgICAgIHNv
dXJjZS5hZGRFcHNpbG9uVHJhbnNpdGlvbihkZXN0aW5hdGlvbik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpPbmVPck1vcmU6IHsKICAgICAgICAgSW1t
dXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIHJlcGVhdFN0YXJ0KG5mYSk7Ci0gICAgICAgIHN0YXJ0
LmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdFN0YXJ0KTsKKyAgICAgICAgc291cmNlLmFkZEVw
c2lsb25UcmFuc2l0aW9uKHJlcGVhdFN0YXJ0KTsKIAotICAgICAgICBJbW11dGFibGVDaGFyTkZB
Tm9kZUJ1aWxkZXIgcmVwZWF0RW5kID0gZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBl
YXRTdGFydCk7CisgICAgICAgIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciByZXBlYXRFbmQo
bmZhKTsKKyAgICAgICAgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCByZXBlYXRTdGFydCwg
cmVwZWF0RW5kKTsKICAgICAgICAgcmVwZWF0RW5kLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVh
dFN0YXJ0KTsKIAotICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgYWZ0ZXJSZXBl
YXQobmZhKTsKLSAgICAgICAgcmVwZWF0RW5kLmFkZEVwc2lsb25UcmFuc2l0aW9uKGFmdGVyUmVw
ZWF0KTsKLSAgICAgICAgbmV3RW5kID0gV1RGOjptb3ZlKGFmdGVyUmVwZWF0KTsKKyAgICAgICAg
cmVwZWF0RW5kLmFkZEVwc2lsb25UcmFuc2l0aW9uKGRlc3RpbmF0aW9uKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIH0KLSAgICBuZXdFbmQuc2V0QWN0aW9ucyhmaW5hbEFjdGlvbnMuYmVn
aW4oKSwgZmluYWxBY3Rpb25zLmVuZCgpKTsKLSAgICByZXR1cm4gbmV3RW5kOwogfQogCiBpbmxp
bmUgYm9vbCBUZXJtOjppc0VuZE9mTGluZUFzc2VydGlvbigpIGNvbnN0CkBAIC01ODIsMTQgKzU4
NiwxOSBAQCBpbmxpbmUgYm9vbCBUZXJtOjppc1VuaXZlcnNhbFRyYW5zaXRpb24oKSBjb25zdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRl
ciBUZXJtOjpnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShORkEmIG5mYSwgSW1tdXRhYmxlQ2hhck5G
QU5vZGVCdWlsZGVyJiBzb3VyY2UpIGNvbnN0CitpbmxpbmUgdm9pZCBUZXJtOjpnZW5lcmF0ZVN1
YmdyYXBoRm9yQXRvbShORkEmIG5mYSwgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyJiBzb3Vy
Y2UsIGNvbnN0IEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgZGVzdGluYXRpb24pIGNvbnN0
Cit7CisgICAgZ2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCBzb3VyY2UsIGRlc3RpbmF0aW9u
Lm5vZGVJZCgpKTsKK30KKworaW5saW5lIHZvaWQgVGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0
b20oTkZBJiBuZmEsIEltbXV0YWJsZUNoYXJORkFOb2RlQnVpbGRlciYgc291cmNlLCB1aW50MzJf
dCBkZXN0aW5hdGlvbikgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdGVybVR5cGUpIHsKICAgICBj
YXNlIFRlcm1UeXBlOjpFbXB0eToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIoKTsKKyAgICAgICAgc291cmNl
LmFkZEVwc2lsb25UcmFuc2l0aW9uKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0OiB7Ci0gICAgICAgIEltbXV0YWJsZUNoYXJORkFO
b2RlQnVpbGRlciBuZXdOb2RlKG5mYSk7CiAgICAgICAgIGlmICghbV9hdG9tRGF0YS5jaGFyYWN0
ZXJTZXQuaW52ZXJ0ZWQoKSkgewogICAgICAgICAgICAgVUNoYXIgaSA9IDA7CiAgICAgICAgICAg
ICB3aGlsZSAodHJ1ZSkgewpAQCAtNjAyLDcgKzYxMSw3IEBAIGlubGluZSBJbW11dGFibGVDaGFy
TkZBTm9kZUJ1aWxkZXIgVGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiBuZmEsIElt
bXV0CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgMTI4
ICYmIG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmdldChpKSkKICAgICAgICAgICAgICAgICAgICAg
KytpOwotICAgICAgICAgICAgICAgIHNvdXJjZS5hZGRUcmFuc2l0aW9uKHN0YXJ0LCBpIC0gMSwg
bmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgc291cmNlLmFkZFRyYW5zaXRpb24oc3RhcnQsIGkg
LSAxLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBVQ2hhciBpID0gMTsKQEAgLTYxNiwyNyArNjI1LDMyIEBAIGlubGluZSBJbW11dGFi
bGVDaGFyTkZBTm9kZUJ1aWxkZXIgVGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20oTkZBJiBu
ZmEsIEltbXV0CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgIHdoaWxlIChp
IDwgMTI4ICYmICFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5nZXQoaSkpCiAgICAgICAgICAgICAg
ICAgICAgICsraTsKLSAgICAgICAgICAgICAgICBzb3VyY2UuYWRkVHJhbnNpdGlvbihzdGFydCwg
aSAtIDEsIG5ld05vZGUpOworICAgICAgICAgICAgICAgIHNvdXJjZS5hZGRUcmFuc2l0aW9uKHN0
YXJ0LCBpIC0gMSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBuZXdOb2RlOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBUZXJt
VHlwZTo6R3JvdXA6IHsKICAgICAgICAgaWYgKG1fYXRvbURhdGEuZ3JvdXAudGVybXMuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogYW55IGtpbmQgb2YgZW1wdHkgdGVybSBjb3Vs
ZCBiZSBhdm9pZGVkIGluIHRoZSBwYXJzZXIuIFRoaXMgY2FzZSBzaG91bGQgdHVybmVkIGludG8g
YW4gYXNzZXJ0aW9uLgotICAgICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIG5l
d05vZGUobmZhKTsKLSAgICAgICAgICAgIHNvdXJjZS5hZGRFcHNpbG9uVHJhbnNpdGlvbihuZXdO
b2RlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdOb2RlOworICAgICAgICAgICAgc291cmNlLmFk
ZEVwc2lsb25UcmFuc2l0aW9uKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtX2F0b21EYXRhLmdyb3VwLnRlcm1zLnNpemUoKSA9PSAx
KSB7CisgICAgICAgICAgICBtX2F0b21EYXRhLmdyb3VwLnRlcm1zLmZpcnN0KCkuZ2VuZXJhdGVH
cmFwaChuZmEsIHNvdXJjZSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgSW1tdXRhYmxlQ2hhck5GQU5vZGVCdWlsZGVyIGxhc3RUYXJnZXQg
PSBtX2F0b21EYXRhLmdyb3VwLnRlcm1zLmZpcnN0KCkuZ2VuZXJhdGVHcmFwaChuZmEsIHNvdXJj
ZSwgQWN0aW9uTGlzdCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fYXRv
bURhdGEuZ3JvdXAudGVybXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IG1fYXRvbURhdGEuZ3JvdXAudGVybXMuc2l6ZSgpIC0gMTsgKytpKSB7CiAgICAg
ICAgICAgICBjb25zdCBUZXJtJiBjdXJyZW50VGVybSA9IG1fYXRvbURhdGEuZ3JvdXAudGVybXNb
aV07CiAgICAgICAgICAgICBJbW11dGFibGVDaGFyTkZBTm9kZUJ1aWxkZXIgbmV3Tm9kZSA9IGN1
cnJlbnRUZXJtLmdlbmVyYXRlR3JhcGgobmZhLCBsYXN0VGFyZ2V0LCBBY3Rpb25MaXN0KCkpOwog
ICAgICAgICAgICAgbGFzdFRhcmdldCA9IFdURjo6bW92ZShuZXdOb2RlKTsKICAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBsYXN0VGFyZ2V0OworICAgICAgICBjb25zdCBUZXJtJiBsYXN0VGVy
bSA9IG1fYXRvbURhdGEuZ3JvdXAudGVybXMubGFzdCgpOworICAgICAgICBsYXN0VGVybS5nZW5l
cmF0ZUdyYXBoKG5mYSwgbGFzdFRhcmdldCwgZGVzdGluYXRpb24pOworICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGQwYzk3NWM1MzZmN2QwNDY0MzJlZDU5ODUwZjJkMWZmOWZjM2M1NDMuLmQ5
NjE0MjRkZWNkODM3Y2IyYzcyNTI2YmIzMTBmZTViMDc4MTZjNWIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0w
Ny0xNSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKworICAgICAgICBb
Q29udGVudCBleHRlbnNpb25zXSBDb21iaW5lIHN1ZmZpeGVzIHdoZW4gZ2VuZXJhdGluZyBORkFz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY5NjEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpjb21wYXJlQ29udGVudHMpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9ERkFNaW5pbWl6ZXIuY3BwOgorCiAyMDE1LTA3LTEwICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFVuYWJsZSB0byBkaXNt
aXNzIGNvbnRleHQgbWVudSBkdXJpbmcgdGVzdCBydW5zCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvVmVjdG9yLmNwcAppbmRleCAyNjIyZDA5ZTIyNWJlMmE5N2NkNjQxZmEyODI4NDRlNThl
YjFiZDQxLi5iZWMyMjQxNDEwZjM3Y2U5MjVmZmViNzczOTQzNzEzYWE3MTczZWIxIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WZWN0b3IuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZlY3Rvci5jcHAKQEAgLTk1LDYgKzk1LDEwMyBAQCBU
RVNUKFdURl9WZWN0b3IsIEluaXRpYWxpemVyTGlzdCkKICAgICBFWFBFQ1RfRVEoNCwgdmVjdG9y
WzNdKTsKIH0KIAorVEVTVChXVEZfVmVjdG9yLCBJbml0aWFsaXplRnJvbU90aGVySW5pdGlhbENh
cGFjaXR5KQoreworICAgIFZlY3RvcjxpbnQsIDM+IHZlY3RvciA9IHsgMSwgMywgMiwgNCB9Owor
ICAgIFZlY3RvcjxpbnQsIDU+IHZlY3RvckNvcHkodmVjdG9yKTsKKyAgICBFWFBFQ1RfRVEoNFUs
IHZlY3Rvci5zaXplKCkpOworICAgIEVYUEVDVF9FUSg0VSwgdmVjdG9yQ29weS5zaXplKCkpOwor
ICAgIEVYUEVDVF9FUSg1VSwgdmVjdG9yQ29weS5jYXBhY2l0eSgpKTsKKworICAgIEVYUEVDVF9F
USgxLCB2ZWN0b3JDb3B5WzBdKTsKKyAgICBFWFBFQ1RfRVEoMywgdmVjdG9yQ29weVsxXSk7Cisg
ICAgRVhQRUNUX0VRKDIsIHZlY3RvckNvcHlbMl0pOworICAgIEVYUEVDVF9FUSg0LCB2ZWN0b3JD
b3B5WzNdKTsKK30KKworVEVTVChXVEZfVmVjdG9yLCBDb3B5RnJvbU90aGVySW5pdGlhbENhcGFj
aXR5KQoreworICAgIFZlY3RvcjxpbnQsIDM+IHZlY3RvciA9IHsgMSwgMywgMiwgNCB9OworICAg
IFZlY3RvcjxpbnQsIDU+IHZlY3RvckNvcHkgeyAwIH07CisgICAgRVhQRUNUX0VRKDRVLCB2ZWN0
b3Iuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIHZlY3RvckNvcHkuc2l6ZSgpKTsKKworICAg
IHZlY3RvckNvcHkgPSB2ZWN0b3I7CisKKyAgICBFWFBFQ1RfRVEoNFUsIHZlY3Rvci5zaXplKCkp
OworICAgIEVYUEVDVF9FUSg0VSwgdmVjdG9yQ29weS5zaXplKCkpOworICAgIEVYUEVDVF9FUSg1
VSwgdmVjdG9yQ29weS5jYXBhY2l0eSgpKTsKKworICAgIEVYUEVDVF9FUSgxLCB2ZWN0b3JDb3B5
WzBdKTsKKyAgICBFWFBFQ1RfRVEoMywgdmVjdG9yQ29weVsxXSk7CisgICAgRVhQRUNUX0VRKDIs
IHZlY3RvckNvcHlbMl0pOworICAgIEVYUEVDVF9FUSg0LCB2ZWN0b3JDb3B5WzNdKTsKK30KKwor
VEVTVChXVEZfVmVjdG9yLCBJbml0aWFsaXplRnJvbU90aGVyT3ZlcmZsb3dCZWhhdmlvcikKK3sK
KyAgICBWZWN0b3I8aW50LCA3LCBXVEY6OkNyYXNoT25PdmVyZmxvdz4gdmVjdG9yID0geyA0LCAz
LCAyLCAxIH07CisgICAgVmVjdG9yPGludCwgNywgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IHZlY3Rv
ckNvcHkodmVjdG9yKTsKKyAgICBFWFBFQ1RfRVEoNFUsIHZlY3Rvci5zaXplKCkpOworICAgIEVY
UEVDVF9FUSg0VSwgdmVjdG9yQ29weS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKDQsIHZlY3Rv
ckNvcHlbMF0pOworICAgIEVYUEVDVF9FUSgzLCB2ZWN0b3JDb3B5WzFdKTsKKyAgICBFWFBFQ1Rf
RVEoMiwgdmVjdG9yQ29weVsyXSk7CisgICAgRVhQRUNUX0VRKDEsIHZlY3RvckNvcHlbM10pOwor
fQorCitURVNUKFdURl9WZWN0b3IsIENvcHlGcm9tT3RoZXJPdmVyZmxvd0JlaGF2aW9yKQorewor
ICAgIFZlY3RvcjxpbnQsIDcsIFdURjo6Q3Jhc2hPbk92ZXJmbG93PiB2ZWN0b3IgPSB7IDQsIDMs
IDIsIDEgfTsKKyAgICBWZWN0b3I8aW50LCA3LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gdmVjdG9y
Q29weSA9IHsgMCwgMCwgMCB9OworCisgICAgRVhQRUNUX0VRKDRVLCB2ZWN0b3Iuc2l6ZSgpKTsK
KyAgICBFWFBFQ1RfRVEoM1UsIHZlY3RvckNvcHkuc2l6ZSgpKTsKKworICAgIHZlY3RvckNvcHkg
PSB2ZWN0b3I7CisKKyAgICBFWFBFQ1RfRVEoNFUsIHZlY3Rvci5zaXplKCkpOworICAgIEVYUEVD
VF9FUSg0VSwgdmVjdG9yQ29weS5zaXplKCkpOworCisgICAgRVhQRUNUX0VRKDQsIHZlY3RvckNv
cHlbMF0pOworICAgIEVYUEVDVF9FUSgzLCB2ZWN0b3JDb3B5WzFdKTsKKyAgICBFWFBFQ1RfRVEo
MiwgdmVjdG9yQ29weVsyXSk7CisgICAgRVhQRUNUX0VRKDEsIHZlY3RvckNvcHlbM10pOworfQor
CitURVNUKFdURl9WZWN0b3IsIEluaXRpYWxpemVGcm9tT3RoZXJNaW5DYXBhY2l0eSkKK3sKKyAg
ICBWZWN0b3I8aW50LCA3LCBXVEY6OkNyYXNoT25PdmVyZmxvdywgMT4gdmVjdG9yID0geyAzLCA0
LCAyLCAxIH07CisgICAgVmVjdG9yPGludCwgNywgV1RGOjpDcmFzaE9uT3ZlcmZsb3csIDUwPiB2
ZWN0b3JDb3B5KHZlY3Rvcik7CisgICAgRVhQRUNUX0VRKDRVLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAg
ICBFWFBFQ1RfRVEoNFUsIHZlY3RvckNvcHkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSgzLCB2
ZWN0b3JDb3B5WzBdKTsKKyAgICBFWFBFQ1RfRVEoNCwgdmVjdG9yQ29weVsxXSk7CisgICAgRVhQ
RUNUX0VRKDIsIHZlY3RvckNvcHlbMl0pOworICAgIEVYUEVDVF9FUSgxLCB2ZWN0b3JDb3B5WzNd
KTsKK30KKworVEVTVChXVEZfVmVjdG9yLCBDb3B5RnJvbU90aGVyTWluQ2FwYWNpdHkpCit7Cisg
ICAgVmVjdG9yPGludCwgNywgV1RGOjpDcmFzaE9uT3ZlcmZsb3csIDE+IHZlY3RvciA9IHsgMywg
NCwgMiwgMSB9OworICAgIFZlY3RvcjxpbnQsIDcsIFdURjo6Q3Jhc2hPbk92ZXJmbG93LCA1MD4g
dmVjdG9yQ29weTsKKworICAgIEVYUEVDVF9FUSg0VSwgdmVjdG9yLnNpemUoKSk7CisgICAgRVhQ
RUNUX0VRKDBVLCB2ZWN0b3JDb3B5LnNpemUoKSk7CisKKyAgICB2ZWN0b3JDb3B5ID0gdmVjdG9y
OworCisgICAgRVhQRUNUX0VRKDRVLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoNFUs
IHZlY3RvckNvcHkuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSgzLCB2ZWN0b3JDb3B5WzBdKTsK
KyAgICBFWFBFQ1RfRVEoNCwgdmVjdG9yQ29weVsxXSk7CisgICAgRVhQRUNUX0VRKDIsIHZlY3Rv
ckNvcHlbMl0pOworICAgIEVYUEVDVF9FUSgxLCB2ZWN0b3JDb3B5WzNdKTsKK30KKwogVEVTVChX
VEZfVmVjdG9yLCBSZXZlcnNlKQogewogICAgIFZlY3RvcjxpbnQ+IGludFZlY3RvcjsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9u
cy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lv
bnMuY3BwCmluZGV4IGJlNTNlZmI5ODUzZmZhNGY5MjIyZTRhYjE4YzEwODMxYzI5NTJlOTguLjgz
N2EyYTdkZjIzNzRlY2UxMTRlZTMxYTBkOWUyODI1M2U0YTg5Y2EgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcApA
QCAtMjM1LDYgKzIzNSwzNiBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEJhc2ljKQog
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJr
aXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CiB9CiAKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU2luZ2xlQ2hhcmFjdGVyKQorewor
ICAgIGF1dG8gbWF0Y2hCYWNrZW5kID0gbWFrZUJhY2tlbmQoIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeelwifX1dIik7Cisg
ICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
d2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5E
b2N1bWVudFJlcXVlc3QoInp0dHA6Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBt
YWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwi
OntcInVybC1maWx0ZXJcIjpcInlcIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tl
bmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOworICAg
IHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93
ZWJraXQub3JnL3l3ZWJraXQiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworfQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFNpbmdsZUNoYXJh
Y3RlckRpc2p1bmN0aW9uKQoreworICAgIGF1dG8gbWF0Y2hCYWNrZW5kID0gbWFrZUJhY2tlbmQo
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCJeelwifX0sIgorICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmNcIn19XSIpOworICAgIHRlc3RSZXF1
ZXN0KG1hdGNoQmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcv
IiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QobWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJidHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImN0dHA6Ly93ZWJraXQub3JnLyIpLCB7IENvbnRl
bnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3Qo
bWF0Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJkdHRwOi8vd2Via2l0Lm9yZy8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChtYXRjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Inp0dHA6Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQgfSk7CisKKyAgICBhdXRvIHNlYXJjaEJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tc
ImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJc
IjpcInhcIn19LCIKKyAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwi
dHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInlcIn19XSIpOworICAgIHRlc3RSZXF1ZXN0KHNl
YXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7
IH0pOworICAgIHRlc3RSZXF1ZXN0KHNlYXJjaEJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly93ZWJraXQub3JnL2R3ZWJraXQiKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFy
Y2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy94d2Via2l0
IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0
ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Vi
a2l0Lm9yZy95d2Via2l0IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChzZWFyY2hCYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1
ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy96d2Via2l0IiksIHsgfSk7Cit9CisKIFRFU1RfRihDb250
ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VCYXNpYykKIHsKICAgICBhdXRvIGJhY2tlbmQgPSBtYWtl
QmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcIndbMC05XWNcIiwgXCJ1cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZl
XCI6dHJ1ZX19LCIKQEAgLTQ0NCw2ICs0NzQsMTQyIEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9u
VGVzdCwgRHVwbGljYXRlZE1hdGNoQWxsVGVybXNJblZhcmlvdXNGb3JtYXQpCiAgICAgdGVzdFJl
cXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cHM6Ly9wb3N0Lm9yZy9wb3N0
IiksIHsgfSk7CiB9CiAKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgVW5kaXN0aW5ndWlz
aGFibGVBY3Rpb25JbnNpZGVQcmVmaXhUcmVlKQoreworICAgIC8vIEluIHRoaXMgY2FzZSwgdGhl
IHR3byBhY3Rpb25zIGFyZSB1bmRpc3Rpbmd1aXNoYWJsZS4gVGhlIGFjdGlvbnMgb2YgInByZWZp
eCIgYXBwZWFyIGluc2lkZSB0aGUgcHJlZml4dHJlZQorICAgIC8vIGVuZGluZyBhdCAic3VmZml4
Ii4KKyAgICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVc
IjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInByZWZpeFwifX0sIgor
ICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1wi
dXJsLWZpbHRlclwiOlwicHJlZml4c3VmZml4XCJ9fV0iKTsKKworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9wcmVm
aXgub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7
CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dl
YmtpdC5vcmcvcHJlZml4IiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2Nr
TG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJo
dHRwOi8vd2Via2l0Lm9yZy9hYWFwcmVmaXhhYWEiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly9wcmVmaXhzdWZmaXgub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvcHJlZml4c3VmZml4IiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy9iYmJw
cmVmaXhzdWZmaXhiYmIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tM
b2FkIH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgi
aHR0cDovL3N1ZmZpeC5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvc3VmZml4IiksIHsgfSk7Cit9CisK
K1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRGlzdGluZ3Vpc2hhYmxlQWN0aW9uSW5zaWRl
UHJlZml4VHJlZSkKK3sKKyAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSB0d28gYWN0aW9ucyBhcmUg
ZGlzdGluZ3Vpc2hhYmxlLgorICAgIGF1dG8gYmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0
aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwi
cHJlZml4XCJ9fSwiCisgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9jay1jb29r
aWVzXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcInByZWZpeHN1ZmZpeFwifX1dIik7
CisKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8v
d2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vcHJlZml4Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0
aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1
bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3ByZWZpeCIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwg
bWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYWFhcHJlZml4YWFhIiksIHsg
Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vcHJlZml4c3VmZml4Lm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tDb29raWVzLCBDb250
ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RSZXF1ZXN0
KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly93ZWJraXQub3JnL3ByZWZpeHN1
ZmZpeCIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXMsIENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3dlYmtpdC5vcmcvYmJicHJl
Zml4c3VmZml4YmJiIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrQ29v
a2llcywgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9zdWZmaXgu
b3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVl
c3QoImh0dHA6Ly93ZWJraXQub3JnL3N1ZmZpeCIpLCB7IH0pOworfQorCitURVNUX0YoQ29udGVu
dEV4dGVuc2lvblRlc3QsIERpc3Rpbmd1aXNoYWJsZVByZWZpeEFyZU5vdE1lcmdlZCkKK3sKKyAg
ICBhdXRvIGJhY2tlbmQgPSBtYWtlQmFja2VuZCgiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJs
b2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImZvb1xcXFwub3JnXCJ9fSwiCisg
ICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1
cmwtZmlsdGVyXCI6XCJiYXJcXFxcLm9yZ1wifX1dIik7CisKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vd2Via2l0Lm9yZy8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vZm9vLm9y
Zy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAg
IHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9iYXIub3Jn
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisKKyAg
ICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vZm9vci5v
cmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVz
dCgiaHR0cDovL2Zvb2FyLm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBt
YWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vZm9vYmEub3JnLyIpLCB7IH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9mb29iLm9yZy8iKSwg
eyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRw
Oi8vZm9vci5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3Vt
ZW50UmVxdWVzdCgiaHR0cDovL2ZvYXIub3JnLyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJh
Y2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9mb2JhLm9yZy8iKSwgeyB9KTsKKyAg
ICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vZm9iLm9y
Zy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0
KCJodHRwOi8vYmFyZi5vcmcvIiksIHsgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2JhcmZvLm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVx
dWVzdChiYWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmFyb28ub3JnLyIpLCB7
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly9iYXJvLm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNrZW5kLCBtYWluRG9jdW1l
bnRSZXF1ZXN0KCJodHRwOi8vYmFmLm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0UmVxdWVzdChiYWNr
ZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vYmFmby5vcmcvIiksIHsgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Jhb28ub3Jn
LyIpLCB7IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3Qo
Imh0dHA6Ly9iYW8ub3JnLyIpLCB7IH0pOworCisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFp
bkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Zvby5vcmdiYXIub3JnLyIpLCB7IENvbnRlbnRFeHRl
bnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2Vu
ZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL29vLm9yZ2Jhci5vcmcvIiksIHsgQ29udGVu
dEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0UmVxdWVzdChi
YWNrZW5kLCBtYWluRG9jdW1lbnRSZXF1ZXN0KCJodHRwOi8vby5vcmdiYXIub3JnLyIpLCB7IENv
bnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJlcXVl
c3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovLy5vcmdiYXIub3JnLyIpLCB7
IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFJl
cXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL3JnYmFyLm9yZy8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9nYmFyLm9yZy8iKSwg
eyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RS
ZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9mb28ub3JnYXIub3Jn
LyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAg
dGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDovL2Zvby5vcmdy
Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0pOwor
ICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9mb28u
b3JnLm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkIH0p
OworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6Ly9m
b28ub3Jnb3JnLyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQg
fSk7CisgICAgdGVzdFJlcXVlc3QoYmFja2VuZCwgbWFpbkRvY3VtZW50UmVxdWVzdCgiaHR0cDov
L2Zvby5vcmdyZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworICAgIHRlc3RSZXF1ZXN0KGJhY2tlbmQsIG1haW5Eb2N1bWVudFJlcXVlc3QoImh0dHA6
Ly9mb28ub3JnZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworfQorCitzdGF0aWMgdm9pZCBjb21wYXJlQ29udGVudHMoY29uc3QgQ29udGVudEV4dGVu
c2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6OkFjdGlvbnMmIGEsIGNvbnN0IFZlY3Rvcjx1
aW50NjRfdD4mIGIpCit7CisgICAgRVhQRUNUX0VRKGEuc2l6ZSgpLCBiLnNpemUoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGIuc2l6ZSgpOyArK2kpCisgICAgICAgIEVYUEVDVF9U
UlVFKGEuY29udGFpbnMoYltpXSkpOworfQorCitURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3Qs
IFNlYXJjaFN1ZmZpeGVzV2l0aElkZW50aWNhbEFjdGlvbkFyZU1lcmdlZCkKK3sKKyAgICBDb250
ZW50RXh0ZW5zaW9uczo6Q29tYmluZWRVUkxGaWx0ZXJzIGNvbWJpbmVkVVJMRmlsdGVyczsKKyAg
ICBDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyIHBhcnNlcihjb21iaW5lZFVSTEZp
bHRlcnMpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2Vy
OjpQYXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJmb29cXC5vcmciLCBmYWxzZSwg
MCkpOworICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6VVJMRmlsdGVyUGFyc2VyOjpQ
YXJzZVN0YXR1czo6T2ssIHBhcnNlci5hZGRQYXR0ZXJuKCJiYVxcLm9yZyIsIGZhbHNlLCAwKSk7
CisKKyAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6Ok5GQT4gbmZhcyA9IGNyZWF0ZU5GQXMo
Y29tYmluZWRVUkxGaWx0ZXJzKTsKKyAgICBFWFBFQ1RfRVEoMXVsLCBuZmFzLnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDEydWwsIG5mYXMuZmlyc3QoKS5ub2Rlcy5zaXplKCkpOworCisgICAgQ29u
dGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBDb250ZW50RXh0ZW5zaW9uczo6TkZBVG9ERkE6OmNv
bnZlcnQobmZhcy5maXJzdCgpKTsKKyAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlPiBieXRlY29kZTsKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVDb21w
aWxlciBjb21waWxlcihkZmEsIGJ5dGVjb2RlKTsKKyAgICBjb21waWxlci5jb21waWxlKCk7Cisg
ICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgaW50ZXJwcmV0ZXIo
Ynl0ZWNvZGUuZGF0YSgpLCBieXRlY29kZS5zaXplKCkpOworICAgIGNvbXBhcmVDb250ZW50cyhp
bnRlcnByZXRlci5pbnRlcnByZXQoImZvby5vcmciLCAwKSwgeyAwIH0pOworICAgIGNvbXBhcmVD
b250ZW50cyhpbnRlcnByZXRlci5pbnRlcnByZXQoImJhLm9yZyIsIDApLCB7IDAgfSk7CisgICAg
Y29tcGFyZUNvbnRlbnRzKGludGVycHJldGVyLmludGVycHJldCgiYmFyLm9yZyIsIDApLCB7IH0p
OworCisgICAgY29tcGFyZUNvbnRlbnRzKGludGVycHJldGVyLmludGVycHJldCgicGFkZGluZ2Zv
by5vcmciLCAwKSwgeyAwIH0pOworICAgIGNvbXBhcmVDb250ZW50cyhpbnRlcnByZXRlci5pbnRl
cnByZXQoInBhZGRpbmdiYS5vcmciLCAwKSwgeyAwIH0pOworICAgIGNvbXBhcmVDb250ZW50cyhp
bnRlcnByZXRlci5pbnRlcnByZXQoInBhZGRpbmdiYXIub3JnIiwgMCksIHsgfSk7Cit9CisKK1RF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU2VhcmNoU3VmZml4ZXNXaXRoRGlzdGluZ3Vpc2hh
YmxlQWN0aW9uQXJlTm90TWVyZ2VkKQoreworICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb21iaW5l
ZFVSTEZpbHRlcnMgY29tYmluZWRVUkxGaWx0ZXJzOworICAgIENvbnRlbnRFeHRlbnNpb25zOjpV
UkxGaWx0ZXJQYXJzZXIgcGFyc2VyKGNvbWJpbmVkVVJMRmlsdGVycyk7CisgICAgRVhQRUNUX0VR
KENvbnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFy
c2VyLmFkZFBhdHRlcm4oImZvb1xcLm9yZyIsIGZhbHNlLCAwKSk7CisgICAgRVhQRUNUX0VRKENv
bnRlbnRFeHRlbnNpb25zOjpVUkxGaWx0ZXJQYXJzZXI6OlBhcnNlU3RhdHVzOjpPaywgcGFyc2Vy
LmFkZFBhdHRlcm4oImJhXFwub3JnIiwgZmFsc2UsIDEpKTsKKworICAgIFZlY3RvcjxDb250ZW50
RXh0ZW5zaW9uczo6TkZBPiBuZmFzID0gY3JlYXRlTkZBcyhjb21iaW5lZFVSTEZpbHRlcnMpOwor
CisgICAgRVhQRUNUX0VRKDF1bCwgbmZhcy5zaXplKCkpOworICAgIEVYUEVDVF9FUSgxN3VsLCBu
ZmFzLmZpcnN0KCkubm9kZXMuc2l6ZSgpKTsKKworICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEg
ZGZhID0gQ29udGVudEV4dGVuc2lvbnM6Ok5GQVRvREZBOjpjb252ZXJ0KG5mYXMuZmlyc3QoKSk7
CisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZT4gYnl0ZWNvZGU7Cisg
ICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlQ29tcGlsZXIgY29tcGlsZXIoZGZhLCBi
eXRlY29kZSk7CisgICAgY29tcGlsZXIuY29tcGlsZSgpOworICAgIENvbnRlbnRFeHRlbnNpb25z
OjpERkFCeXRlY29kZUludGVycHJldGVyIGludGVycHJldGVyKGJ5dGVjb2RlLmRhdGEoKSwgYnl0
ZWNvZGUuc2l6ZSgpKTsKKyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0
KCJmb28ub3JnIiwgMCksIHsgMCB9KTsKKyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIu
aW50ZXJwcmV0KCJiYS5vcmciLCAwKSwgeyAxIH0pOworICAgIGNvbXBhcmVDb250ZW50cyhpbnRl
cnByZXRlci5pbnRlcnByZXQoImJhci5vcmciLCAwKSwgeyB9KTsKKworICAgIGNvbXBhcmVDb250
ZW50cyhpbnRlcnByZXRlci5pbnRlcnByZXQoInBhZGRpbmdmb28ub3JnIiwgMCksIHsgMCB9KTsK
KyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0KCJwYWRkaW5nYmEub3Jn
IiwgMCksIHsgMSB9KTsKKyAgICBjb21wYXJlQ29udGVudHMoaW50ZXJwcmV0ZXIuaW50ZXJwcmV0
KCJwYWRkaW5nYmEub3JnZm9vLm9yZyIsIDApLCB7IDEsIDAgfSk7CisgICAgY29tcGFyZUNvbnRl
bnRzKGludGVycHJldGVyLmludGVycHJldCgicGFkZGluZ2Jhci5vcmciLCAwKSwgeyB9KTsKK30K
KwogVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBEb21haW5UcmlnZ2VycykKIHsKICAgICBh
dXRvIGlmRG9tYWluQmFja2VuZCA9IG1ha2VCYWNrZW5kKCJbe1wiYWN0aW9uXCI6e1widHlwZVwi
OlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwidGVzdFxcXFwuaHRtbFwi
LCBcImlmLWRvbWFpblwiOltcIndlYmtpdC5vcmdcIl19fV0iKTsKQEAgLTg1MywxMyArMTAxOSw2
IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgV2lkZU5GQSkKIH0KICAgICAKICNpZmRl
ZiBOREVCVUcKLXN0YXRpYyB2b2lkIGNvbXBhcmVDb250ZW50cyhjb25zdCBDb250ZW50RXh0ZW5z
aW9uczo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6QWN0aW9ucyYgYSwgY29uc3QgVmVjdG9yPHVp
bnQ2NF90PiYgYikKLXsKLSAgICBFWFBFQ1RfRVEoYS5zaXplKCksIGIuc2l6ZSgpKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYi5zaXplKCk7ICsraSkKLSAgICAgICAgRVhQRUNUX1RS
VUUoYS5jb250YWlucyhiW2ldKSk7Ci19Ci0KIHN0YXRpYyB1aW50NjRfdCBleHBlY3RlZEluZGV4
KGNoYXIgYywgdW5zaWduZWQgcG9zaXRpb24pCiB7CiAgICAgdWludDY0X3QgaW5kZXggPSBjIC0g
J0EnOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0RGQU1p
bmltaXplci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1p
emVyLmNwcAppbmRleCBlZTMyMWI3ZjllYTc0ZDBjNmZlZGI4OWQ4Y2IyY2Y0NWVjN2RjZjdmLi5i
YjNhYzJlMmFjMTdhMmUwODA1NzBiYmFmMGZjOWI2NmRhYWRlMDI4IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVyLmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvREZBTWluaW1pemVyLmNwcApAQCAtNDEsNyAr
NDEsMjMgQEAgcHVibGljOgogVEVTVF9GKERGQU1pbmltaXplclRlc3QsIEJhc2ljU2VhcmNoKQog
ewogICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEgZGZhID0gYnVpbGRERkFGcm9tUGF0dGVybnMo
eyAiLipmb28iLCAiLipiYXIiLCAiLipiYW5nIn0pOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2Fz
dDxzaXplX3Q+KDEwKSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CisgICAgRVhQRUNUX0VRKHN0YXRp
Y19jYXN0PHNpemVfdD4oOCksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOworICAgIGRmYS5taW5pbWl6
ZSgpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDcpLCBjb3VudExpdmVOb2Rl
cyhkZmEpKTsKK30KKworVEVTVF9GKERGQU1pbmltaXplclRlc3QsIE1lcmdlU3VmZml4ZXMpCit7
CisgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBidWlsZERGQUZyb21QYXR0ZXJucyh7
ICIuKmFhYSIsICIuKmFhYiIsICIuKmFiYSIsICIuKmFiYiIsICIuKmJhYSIsICIuKmJhYiIsICIu
KmJiYSIsICIuKmJiYiJ9KTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxMiks
IGNvdW50TGl2ZU5vZGVzKGRmYSkpOworICAgIGRmYS5taW5pbWl6ZSgpOworICAgIEVYUEVDVF9F
UShzdGF0aWNfY2FzdDxzaXplX3Q+KDQpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKK30KKworVEVT
VF9GKERGQU1pbmltaXplclRlc3QsIE1lcmdlSW5maXhlcykKK3sKKyAgICBDb250ZW50RXh0ZW5z
aW9uczo6REZBIGRmYSA9IGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgIi4qYWFha2l0IiwgIi4qYWFi
a2l0IiwgIi4qYWJha2l0IiwgIi4qYWJia2l0IiwgIi4qYmFha2l0IiwgIi4qYmFia2l0IiwgIi4q
YmJha2l0IiwgIi4qYmJia2l0In0pOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KDE1KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiAgICAgZGZhLm1pbmltaXplKCk7CiAgICAgRVhQ
RUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNyksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwogfQpA
QCAtNDksNyArNjUsNyBAQCBURVNUX0YoREZBTWluaW1pemVyVGVzdCwgQmFzaWNTZWFyY2gpCiBU
RVNUX0YoREZBTWluaW1pemVyVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9uc1dpdGhEaWZmZXJlbnRp
YXRvckRvTm90TWVyZ2UxKQogewogICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEgZGZhID0gYnVp
bGRERkFGcm9tUGF0dGVybnMoeyAiXmEuYSIsICJeYi5hIiwgIl5iYWMiLCAiXmJiYyIsICJeQkND
In0pOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEzKSwgY291bnRMaXZlTm9k
ZXMoZGZhKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNiksIGNvdW50TGl2
ZU5vZGVzKGRmYSkpOwogICAgIGRmYS5taW5pbWl6ZSgpOwogICAgIEVYUEVDVF9FUShzdGF0aWNf
Y2FzdDxzaXplX3Q+KDYpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKIH0KQEAgLTU3LDcgKzczLDcg
QEAgVEVTVF9GKERGQU1pbmltaXplclRlc3QsIEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVy
ZW50aWF0b3JEb05vdE1lcmdlMSkKIFRFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBGYWxsYmFja1Ry
YW5zaXRpb25zV2l0aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTIpCiB7CiAgICAgQ29udGVudEV4
dGVuc2lvbnM6OkRGQSBkZmEgPSBidWlsZERGQUZyb21QYXR0ZXJucyh7ICJeYmJjIiwgIl5CQ0Mi
LCAiXmEuYSIsICJeYi5hIn0pOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDEx
KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVf
dD4oNiksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwogICAgIGRmYS5taW5pbWl6ZSgpOwogICAgIEVY
UEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDYpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKIH0K
QEAgLTY1LDcgKzgxLDcgQEAgVEVTVF9GKERGQU1pbmltaXplclRlc3QsIEZhbGxiYWNrVHJhbnNp
dGlvbnNXaXRoRGlmZmVyZW50aWF0b3JEb05vdE1lcmdlMikKIFRFU1RfRihERkFNaW5pbWl6ZXJU
ZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0aERpZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTMpCiB7
CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBidWlsZERGQUZyb21QYXR0ZXJucyh7
ICJeYS5jIiwgIl5iLmMiLCAiXmJhYSIsICJeYmJhIiwgIl5CQ0EifSk7Ci0gICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMTMpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKKyAgICBFWFBF
Q1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig2KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiAgICAg
ZGZhLm1pbmltaXplKCk7CiAgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNiksIGNv
dW50TGl2ZU5vZGVzKGRmYSkpOwogfQpAQCAtNzMsNyArODksNyBAQCBURVNUX0YoREZBTWluaW1p
emVyVGVzdCwgRmFsbGJhY2tUcmFuc2l0aW9uc1dpdGhEaWZmZXJlbnRpYXRvckRvTm90TWVyZ2Uz
KQogVEVTVF9GKERGQU1pbmltaXplclRlc3QsIEZhbGxiYWNrVHJhbnNpdGlvbnNXaXRoRGlmZmVy
ZW50aWF0b3JEb05vdE1lcmdlNCkKIHsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6REZBIGRmYSA9
IGJ1aWxkREZBRnJvbVBhdHRlcm5zKHsgIl5iYWEiLCAiXmJiYSIsICJeQkNBIiwgIl5hLmMiLCAi
XmIuYyJ9KTsKLSAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxMyksIGNvdW50TGl2
ZU5vZGVzKGRmYSkpOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+KDYpLCBjb3Vu
dExpdmVOb2RlcyhkZmEpKTsKICAgICBkZmEubWluaW1pemUoKTsKICAgICBFWFBFQ1RfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90Pig2KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiB9CkBAIC04MSw3ICs5
Nyw3IEBAIFRFU1RfRihERkFNaW5pbWl6ZXJUZXN0LCBGYWxsYmFja1RyYW5zaXRpb25zV2l0aERp
ZmZlcmVudGlhdG9yRG9Ob3RNZXJnZTQpCiBURVNUX0YoREZBTWluaW1pemVyVGVzdCwgRmFsbGJh
Y2tUcmFuc2l0aW9uc1RvT3RoZXJOb2RlSW5TYW1lR3JvdXBEb2VzTm90RGlmZmVyZW50aWF0ZUdy
b3VwKQogewogICAgIENvbnRlbnRFeHRlbnNpb25zOjpERkEgZGZhID0gYnVpbGRERkFGcm9tUGF0
dGVybnMoeyAiXmFhYyIsICJeYS5jIiwgIl5iLmMifSk7Ci0gICAgRVhQRUNUX0VRKHN0YXRpY19j
YXN0PHNpemVfdD4oOSksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOworICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDUpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKICAgICBkZmEubWluaW1p
emUoKTsKICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSwgY291bnRMaXZlTm9k
ZXMoZGZhKSk7CiB9CkBAIC04OSw3ICsxMDUsNyBAQCBURVNUX0YoREZBTWluaW1pemVyVGVzdCwg
RmFsbGJhY2tUcmFuc2l0aW9uc1RvT3RoZXJOb2RlSW5TYW1lR3JvdXBEb2VzTm90RGlmZmVyZQog
VEVTVF9GKERGQU1pbmltaXplclRlc3QsIFNpbXBsZUZhbGxCYWNrVHJhbnNpdGlvbkRpZmZlcmVu
dGlhdG9yMSkKIHsKICAgICBDb250ZW50RXh0ZW5zaW9uczo6REZBIGRmYSA9IGJ1aWxkREZBRnJv
bVBhdHRlcm5zKHsgIl5hLmJjLmRlIiwgIl5hLmJkLmVmIn0pOwotICAgIEVYUEVDVF9FUShzdGF0
aWNfY2FzdDxzaXplX3Q+KDEyKSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CisgICAgRVhQRUNUX0VR
KHN0YXRpY19jYXN0PHNpemVfdD4oMTEpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKICAgICBkZmEu
bWluaW1pemUoKTsKICAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6ZV90PigxMSksIGNvdW50
TGl2ZU5vZGVzKGRmYSkpOwogfQpAQCAtOTcsNyArMTEzLDcgQEAgVEVTVF9GKERGQU1pbmltaXpl
clRlc3QsIFNpbXBsZUZhbGxCYWNrVHJhbnNpdGlvbkRpZmZlcmVudGlhdG9yMSkKIFRFU1RfRihE
RkFNaW5pbWl6ZXJUZXN0LCBTaW1wbGVGYWxsQmFja1RyYW5zaXRpb25EaWZmZXJlbnRpYXRvcjIp
CiB7CiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkRGQSBkZmEgPSBidWlsZERGQUZyb21QYXR0ZXJu
cyh7ICJeY2IuIiwgIl5kYi5iIn0pOwotICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxzaXplX3Q+
KDgpLCBjb3VudExpdmVOb2RlcyhkZmEpKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8c2l6
ZV90Pig3KSwgY291bnRMaXZlTm9kZXMoZGZhKSk7CiAgICAgZGZhLm1pbmltaXplKCk7CiAgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oNyksIGNvdW50TGl2ZU5vZGVzKGRmYSkpOwog
fQo=
</data>
<flag name="review"
          id="281984"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>