<?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>214953</bug_id>
          
          <creation_ts>2020-07-29 17:51:09 -0700</creation_ts>
          <short_desc>validate untagArrayPtr</short_desc>
          <delta_ts>2021-07-05 13:04:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>215074</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>jsc32</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1676262</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-29 17:51:09 -0700</bug_when>
    <thetext>....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676579</commentid>
    <comment_count>1</comment_count>
      <attachid>405627</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-30 15:10:47 -0700</bug_when>
    <thetext>Created attachment 405627
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676581</commentid>
    <comment_count>2</comment_count>
      <attachid>405627</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-30 15:11:29 -0700</bug_when>
    <thetext>Comment on attachment 405627
patch

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

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h:135
&gt; +        TrustedImm32 shiftAmount { 64 - OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) };

Will switch to using Keith&apos;s new constant once it lands.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:1152
&gt; +        skip = branchPtr(Equal, storage, TrustedImmPtr(JSArrayBufferView::nullVectorPtr()));

this is the change.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:1188
&gt; +            done.append(branchPtr(Equal, storage, TrustedImmPtr(JSArrayBufferView::nullVectorPtr())));

this is the changed line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676668</commentid>
    <comment_count>3</comment_count>
      <attachid>405646</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-30 18:03:50 -0700</bug_when>
    <thetext>Created attachment 405646
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676860</commentid>
    <comment_count>4</comment_count>
      <attachid>405646</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-07-31 10:13:34 -0700</bug_when>
    <thetext>Comment on attachment 405646
patch

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

r=me with some comments.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h:135
&gt; +        TrustedImm32 shiftAmount { 64 - OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) };

Nit: Can you use numberOfPACBits?

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h:137
&gt; +        lshift64(shiftAmount, target);
&gt; +        urshift64(shiftAmount, target);

I think this can probably be a single and instruction for each of the constants we currently use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676879</commentid>
    <comment_count>5</comment_count>
      <attachid>405710</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-31 11:09:41 -0700</bug_when>
    <thetext>Created attachment 405710
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676895</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-07-31 11:46:23 -0700</bug_when>
    <thetext>Committed r265151: &lt;https://trac.webkit.org/changeset/265151&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 405710.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676896</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-31 11:47:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/66391434&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677214</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-08-02 01:21:33 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 215074</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743872</commentid>
    <comment_count>9</comment_count>
      <attachid>424271</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-03-25 12:55:00 -0700</bug_when>
    <thetext>Created attachment 424271
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743896</commentid>
    <comment_count>10</comment_count>
      <attachid>424271</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-03-25 13:23:40 -0700</bug_when>
    <thetext>Comment on attachment 424271
patch

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

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h:149
&gt; +        auto scratch = InvalidGPRReg; 
&gt; +        if (validateAuth) {
&gt; +            scratch = getCachedMemoryTempRegisterIDAndInvalidate();
&gt; +            move(target, scratch);
&gt; +        }
&gt; +
&gt;          m_assembler.autdb(target, lengthGPR);
&gt; +
&gt; +        if (validateAuth) {
&gt; +            ASSERT(target != ARM64Registers::sp);
&gt; +            removeArrayPtrTag(scratch);
&gt; +            auto isValidPtr = branch64(Equal, scratch, target);
&gt; +            breakpoint(0xc473);
&gt; +            isValidPtr.link(this);
&gt; +        }

Let&apos;s do this instead:

        auto scratch = validateAuth ? getCachedMemoryTempRegisterIDAndInvalidate() : InvalidGPRReg;
        untagArrayPtr(length, target, validateAuth, scratch);

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h:157
&gt; +        ASSERT(LogicalImmediate::create64(nonPACBitsMask).isValid());
&gt; +        and64(TrustedImmPtr(nonPACBitsMask), target);

Isn&apos;t nonPACBitsMask a member of CagedPtr?  Did this actually build?

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:1074
&gt; +#if CPU(ARM64E)
&gt; +            done.append(branchPtr(Equal, storage, TrustedImmPtr(JSArrayBufferView::nullVectorPtr())));
&gt; +#endif

Isn&apos;t this also needed for x86_64 because null != neutered?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743914</commentid>
    <comment_count>11</comment_count>
      <attachid>424271</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-03-25 14:12:31 -0700</bug_when>
    <thetext>Comment on attachment 424271
patch

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

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h:149
&gt;&gt; +        }
&gt; 
&gt; Let&apos;s do this instead:
&gt; 
&gt;         auto scratch = validateAuth ? getCachedMemoryTempRegisterIDAndInvalidate() : InvalidGPRReg;
&gt;         untagArrayPtr(length, target, validateAuth, scratch);

sounds good

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h:157
&gt;&gt; +        and64(TrustedImmPtr(nonPACBitsMask), target);
&gt; 
&gt; Isn&apos;t nonPACBitsMask a member of CagedPtr?  Did this actually build?

It&apos;s also defined above in this file:
    static constexpr uintptr_t nonPACBitsMask = (1ull &lt;&lt; (64 - numberOfPACBits)) - 1;

&gt;&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:1074
&gt;&gt; +#endif
&gt; 
&gt; Isn&apos;t this also needed for x86_64 because null != neutered?

Detached array buffer is zero on x86:
void JSArrayBufferView::detach()
{
    auto locker = holdLock(cellLock());
    RELEASE_ASSERT(hasArrayBuffer());
    RELEASE_ASSERT(!isShared());
    m_length = 0;
    m_vector.clear();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743916</commentid>
    <comment_count>12</comment_count>
      <attachid>424271</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-03-25 14:23:57 -0700</bug_when>
    <thetext>Comment on attachment 424271
patch

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

r=me

&gt;&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h:157
&gt;&gt;&gt; +        and64(TrustedImmPtr(nonPACBitsMask), target);
&gt;&gt; 
&gt;&gt; Isn&apos;t nonPACBitsMask a member of CagedPtr?  Did this actually build?
&gt; 
&gt; It&apos;s also defined above in this file:
&gt;     static constexpr uintptr_t nonPACBitsMask = (1ull &lt;&lt; (64 - numberOfPACBits)) - 1;

sorry, I had a bad grep.

&gt;&gt;&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:1074
&gt;&gt;&gt; +#endif
&gt;&gt; 
&gt;&gt; Isn&apos;t this also needed for x86_64 because null != neutered?
&gt; 
&gt; Detached array buffer is zero on x86:
&gt; void JSArrayBufferView::detach()
&gt; {
&gt;     auto locker = holdLock(cellLock());
&gt;     RELEASE_ASSERT(hasArrayBuffer());
&gt;     RELEASE_ASSERT(!isShared());
&gt;     m_length = 0;
&gt;     m_vector.clear();
&gt; }

I think it is a bug for x86_64 to use 0 to both mean null and neutered.  But that&apos;s unrelated to this patch.  So, moving on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743933</commentid>
    <comment_count>13</comment_count>
      <attachid>424284</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-03-25 14:59:59 -0700</bug_when>
    <thetext>Created attachment 424284
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744072</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-25 22:25:44 -0700</bug_when>
    <thetext>Committed r275079: &lt;https://commits.webkit.org/r275079&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 424284.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774840</commentid>
    <comment_count>15</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-05 13:04:59 -0700</bug_when>
    <thetext>*** Bug 210733 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405627</attachid>
            <date>2020-07-30 15:10:47 -0700</date>
            <delta_ts>2020-07-30 18:03:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>23496</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY1MTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDIwLTA3LTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IHZhbGlkYXRlIHVudGFnQXJyYXlQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNDk1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHVudGFnQXJyYXlQ
dHIgYWxvbmcgcGF0aHMgd2hlcmUgd2UgZG9uJ3QKKyAgICAgICAgaW1tZWRpYXRlbHkgc3RvcmUv
bG9hZCBmcm9tIHRoZSByZXN1bHQuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
Y2hhbmdlcyB0aGUgcmVtb3ZlQXJyYXlQdHJUYWcgbWFjcm8gYXNzZW1ibGVyIGZ1bmN0aW9uIHRv
CisgICAgICAgIHVzZSBzaGlmdHMgaW5zdGVhZCBvZiB4cGFjZCB0byBzdHJpcCB0aGUgdGFnLCBi
ZWNhdXNlIGl0J3MgZmFzdGVyLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjp1bnRhZ0FycmF5
UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NEU6OnJlbW92ZUFycmF5UHRy
VGFnKToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0
ZXN0Q2FnZVByZXNlcnZlc1BBQ0ZhaWx1cmVCaXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjp1bnRhZ0FycmF5UHRyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y2FnZWQpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhZ2VXaXRob3V0VW50YWdnaW5nKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6Y2FnZVdpdGhvdXRVbnRhZ2dpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmNhZ2VDb25kaXRpb25hbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFy
cmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToK
KyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAq
IHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToK
KyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3Jl
YXRlSlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBv
aW50U2xvdyk6CisKIDIwMjAtMDctMzAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgU3RyaXAgcG9pbnRlcnMgaW5zdGVhZCBvZiBhdXRoaW5nIGZvciBieXRlT2Zm
c2V0IHRvIG5vdCBhbGxvdyBmb3IgYSBwb3NzaWJsZSB3YXkgdG8gZ3Vlc3MgZGF0YSBwYWMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjRFLmgJKHJldmlzaW9uIDI2NTA5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkod29ya2luZyBjb3B5KQpAQCAtOTAs
MjEgKzkwLDUxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIucGFjZGIodGFyZ2V0LCBs
ZW5ndGgpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ0FycmF5UHRyKFJl
Z2lzdGVySUQgbGVuZ3RoLCBSZWdpc3RlcklEIHRhcmdldCkKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgdW50YWdBcnJheVB0cihSZWdpc3RlcklEIGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJnZXQsIGJv
b2wgdmFsaWRhdGVBdXRoLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgeworICAgICAgICBpZiAo
dmFsaWRhdGVBdXRoKSB7CisgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgICAgIG1vdmUodGFyZ2V0LCBzY3JhdGNoKTsKKyAgICAgICAgfQorCiAg
ICAgICAgIG1fYXNzZW1ibGVyLmF1dGRiKHRhcmdldCwgbGVuZ3RoKTsKKworICAgICAgICBpZiAo
dmFsaWRhdGVBdXRoKSB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0ICE9IEFSTTY0UmVnaXN0
ZXJzOjpzcCk7CisgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBBUk02NFJlZ2lzdGVyczo6
c3ApOworICAgICAgICAgICAgcmVtb3ZlQXJyYXlQdHJUYWcoc2NyYXRjaCk7CisgICAgICAgICAg
ICBhdXRvIGlzVmFsaWRQdHIgPSBicmFuY2g2NChFcXVhbCwgc2NyYXRjaCwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGJyZWFrcG9pbnQoMHhhYmNkKTsKKyAgICAgICAgICAgIGlzVmFsaWRQdHIubGlu
ayh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRh
Z0FycmF5UHRyKEFkZHJlc3MgbGVuZ3RoLCBSZWdpc3RlcklEIHRhcmdldCkKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgdW50YWdBcnJheVB0cihBZGRyZXNzIGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJn
ZXQsIGJvb2wgdmFsaWRhdGVBdXRoKQogICAgIHsKICAgICAgICAgYXV0byBsZW5ndGhHUFIgPSBn
ZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CiAgICAgICAgIGxvYWQz
MihsZW5ndGgsIGxlbmd0aEdQUik7CisgICAgICAgIGF1dG8gc2NyYXRjaCA9IEludmFsaWRHUFJS
ZWc7IAorICAgICAgICBpZiAodmFsaWRhdGVBdXRoKSB7CisgICAgICAgICAgICBzY3JhdGNoID0g
Z2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAgICAg
ICBtb3ZlKHRhcmdldCwgc2NyYXRjaCk7CisgICAgICAgIH0KKwogICAgICAgICBtX2Fzc2VtYmxl
ci5hdXRkYih0YXJnZXQsIGxlbmd0aEdQUik7CisKKyAgICAgICAgaWYgKHZhbGlkYXRlQXV0aCkg
eworICAgICAgICAgICAgQVNTRVJUKHRhcmdldCAhPSBBUk02NFJlZ2lzdGVyczo6c3ApOworICAg
ICAgICAgICAgcmVtb3ZlQXJyYXlQdHJUYWcoc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRvIGlz
VmFsaWRQdHIgPSBicmFuY2g2NChFcXVhbCwgc2NyYXRjaCwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IGJyZWFrcG9pbnQoMHhhYmNkKTsKKyAgICAgICAgICAgIGlzVmFsaWRQdHIubGluayh0aGlzKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZW1vdmVBcnJheVB0
clRhZyhSZWdpc3RlcklEIHRhcmdldCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnhwYWNk
KHRhcmdldCk7CisgICAgICAgIFRydXN0ZWRJbW0zMiBzaGlmdEFtb3VudCB7IDY0IC0gT1NfQ09O
U1RBTlQoRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpIH07CisgICAgICAgIGxzaGlmdDY0KHNoaWZ0
QW1vdW50LCB0YXJnZXQpOworICAgICAgICB1cnNoaWZ0NjQoc2hpZnRBbW91bnQsIHRhcmdldCk7
CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIEludmFsaWRHUFIgID0g
c3RhdGljX2Nhc3Q8UmVnaXN0ZXJJRD4oLTEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHJldmlzaW9uIDI2NTA5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDYwLDcgKzI0NjAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0Q2FnZVByZXNlcnZlc1BBQ0ZhaWx1cmVC
CiAgICAgUkVMRUFTRV9BU1NFUlQoIUdpZ2FjYWdlOjpkaXNhYmxpbmdQcmltaXRpdmVHaWdhY2Fn
ZUlzRm9yYmlkZGVuKCkpOwogICAgIGF1dG8gY2FnZSA9IGNvbXBpbGUoW10gKENDYWxsSGVscGVy
cyYgaml0KSB7CiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7Ci0gICAgICAgIGpp
dC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAg
ICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFy
Z3VtZW50R1BSMik7CiAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OwogICAgICAgICBqaXQucmV0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEs
NyArMTAyMSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAg
ICAgICBqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4
dHJhU3BhY2UpOwogCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gyR1BS
KTsKLSAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNj
cmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmNhZ2VDb25k
aXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hHUFIsIGZhbHNlKTsKIAogICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9Q
dHIocHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMjY1MDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEyMyw3ICs1MTIzLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdDIsIHQxKSk7CiAK
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhkYXRhVmlld0dQUiwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCB0Mik7Ci0gICAgICAgIGNhZ2VU
eXBlZEFycmF5U3RvcmFnZShkYXRhVmlld0dQUiwgdDIpOworICAgICAgICBjYWdlVHlwZWRBcnJh
eVN0b3JhZ2UoZGF0YVZpZXdHUFIsIHQyLCBmYWxzZSk7CiAKICAgICAgICAgbV9qaXQuemVyb0V4
dGVuZDMyVG9Xb3JkKGluZGV4R1BSLCB0MSk7CiAgICAgICAgIGF1dG8gYmFzZUluZGV4ID0gSklU
Q29tcGlsZXI6OkJhc2VJbmRleCh0MiwgdDEsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSk7CkBA
IC01MzI0LDcgKzUzMjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCB0MiwgdDEpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGRhdGFWaWV3R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHQy
KTsKLSAgICAgICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKGRhdGFWaWV3R1BSLCB0Mik7CisgICAg
ICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShkYXRhVmlld0dQUiwgdDIsIGZhbHNlKTsKIAogICAg
ICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQoaW5kZXhHUFIsIHQxKTsKICAgICAgICAgYXV0
byBiYXNlSW5kZXggPSBKSVRDb21waWxlcjo6QmFzZUluZGV4KHQyLCB0MSwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzT25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzOSwx
MSArNzIzOSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29uc3RhbnRTdG9yCiAg
ICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgc3RvcmFn
ZVJlZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcg
YmFzZVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIGJvb2wgdmFsaWRhdGVBdXRoKQogewogICAgIGF1
dG8gdW50YWdBcnJheVB0ciA9IFsmXSgpIHsKICNpZiBDUFUoQVJNNjRFKQotICAgICAgICBtX2pp
dC51bnRhZ0FycmF5UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgIG1faml0
LnVudGFnQXJyYXlQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlUmVnLCB2YWxpZGF0ZUF1dGgpOwog
I2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGJhc2VSZWcpOwogICAgICAgICBVTlVTRURfUEFS
QU0oc3RvcmFnZVJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsNyArMTY2
MCw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmls
bFNwZWN1bGF0ZUludDMySW50ZXJuYWwoRWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsK
ICAgICAKLSAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQUlJlZyk7Cisg
ICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoR1BSUmVnLCBHUFJSZWcsIGJvb2wgdmFsaWRh
dGVBdXRoID0gdHJ1ZSk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKICAgICAgICAg
T3BlcmFuZCBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3Jt
YXQgZm9ybWF0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjY1MDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTkzOCw5ICsxNTkzOCwx
MCBAQCBwcml2YXRlOgogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIGF1dGhlbnRpY2F0ZSA9IG1f
b3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7CiAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBw
ZW5kU29tZVJlZ2lzdGVyKHB0cik7CiAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kKHNpemUs
IEIzOjpWYWx1ZVJlcChCMzo6VmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsKKyAgICAgICAg
YXV0aGVudGljYXRlLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgICAgICBhdXRoZW50
aWNhdGUtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1z
WzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LnVudGFnQXJyYXlQ
dHIocGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgaml0LnVu
dGFnQXJyYXlQdHIocGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHRydWUsIHBhcmFt
cy5ncFNjcmF0Y2goMCkpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIGF1dGhlbnRpY2F0
ZTsKICNlbHNlCkBAIC0xNTk5NCw2ICsxNTk5NSwxMSBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgTFZhbHVlIG1hc2tlZCA9IG1fb3V0LmJpdEFuZChwdHIsIG1hc2spOwogICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gbV9vdXQuYWRkKG1hc2tlZCwgYmFzZVB0cik7CisjaWYgQ1BVKEFSTTY0
RSkKKyAgICAgICAgcmVzdWx0ID0gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgbV9vdXQuZXF1
YWwocHRyLCBtX291dC5jb25zdEludFB0cihKU0FycmF5QnVmZmVyVmlldzo6bnVsbFZlY3RvclB0
cigpKSksCisgICAgICAgICAgICBwdHIsIHJlc3VsdCk7CisjZW5kaWYKIAogI2lmIENQVShBUk02
NEUpCiAgICAgICAgIGlmIChraW5kID09IEdpZ2FjYWdlOjpQcmltaXRpdmUpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9u
IDI2NTA5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEzOSw2ICsxMTM5LDg0IEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjpzYW5pdGl6ZVN0YWNrSW5saW4KICAgICBzdG9yZVB0cihzY3JhdGNoLCB2bS5hZGRyZXNz
T2ZMYXN0U3RhY2tUb3AoKSk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjYWdlV2l0aG91
dFVudGFnZ2luZyhHaWdhY2FnZTo6S2luZCBraW5kLCBHUFJSZWcgc3RvcmFnZSkKK3sKKyNpZiBH
SUdBQ0FHRV9FTkFCTEVECisgICAgaWYgKCFHaWdhY2FnZTo6aXNFbmFibGVkKGtpbmQpKQorICAg
ICAgICByZXR1cm47CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIFJlZ2lzdGVySUQgdGVtcFJlZyA9
IEludmFsaWRHUFJSZWc7CisgICAgSnVtcCBza2lwOworICAgIGlmIChraW5kID09IEdpZ2FjYWdl
OjpQcmltaXRpdmUpIHsKKyAgICAgICAgc2tpcCA9IGJyYW5jaFB0cihFcXVhbCwgc3RvcmFnZSwg
VHJ1c3RlZEltbVB0cihKU0FycmF5QnVmZmVyVmlldzo6bnVsbFZlY3RvclB0cigpKSk7CisgICAg
ICAgIHRlbXBSZWcgPSBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUo
KTsKKyAgICAgICAgbW92ZShzdG9yYWdlLCB0ZW1wUmVnKTsKKyAgICAgICAgLy8gRmxpcCB0aGUg
cmVnaXN0ZXJzIHNpbmNlIGJpdEZpZWxkSW5zZXJ0IG9ubHkgaW5zZXJ0cyBpbnRvIHRoZSBsb3cg
Yml0cy4KKyAgICAgICAgc3RkOjpzd2FwKHN0b3JhZ2UsIHRlbXBSZWcpOworICAgIH0KKyNlbmRp
ZgorICAgIGFuZFB0cihUcnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwgc3RvcmFn
ZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW1QdHIoR2lnYWNhZ2U6OmJhc2VQdHIoa2luZCkpLCBz
dG9yYWdlKTsKKyNpZiBDUFUoQVJNNjRFKQorICAgIGlmIChraW5kID09IEdpZ2FjYWdlOjpQcmlt
aXRpdmUpCisgICAgICAgIGJpdEZpZWxkSW5zZXJ0NjQoc3RvcmFnZSwgMCwgNjQgLSBudW1iZXJP
ZlBBQ0JpdHMsIHRlbXBSZWcpOworICAgIGlmIChza2lwLmlzU2V0KCkpCisgICAgICAgIHNraXAu
bGluayh0aGlzKTsKKyNlbmRpZgorCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShraW5kKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RvcmFnZSk7CisjZW5kaWYKK30KKworLy8gbGVuZ3RoIG1heSBiZSB0
aGUgc2FtZSByZWdpc3RlciBhcyBzY3JhdGNoLgordm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhZ2VD
b25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OktpbmQga2luZCwgR1BSUmVnIHN0b3JhZ2Us
IEdQUlJlZyBsZW5ndGgsIEdQUlJlZyBzY3JhdGNoLCBib29sIHZhbGlkYXRlQXV0aCkKK3sKKyNp
ZiBHSUdBQ0FHRV9FTkFCTEVECisgICAgaWYgKEdpZ2FjYWdlOjppc0VuYWJsZWQoa2luZCkpIHsK
KyAgICAgICAgaWYgKGtpbmQgIT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSB8fCBHaWdhY2FnZTo6ZGlz
YWJsaW5nUHJpbWl0aXZlR2lnYWNhZ2VJc0ZvcmJpZGRlbigpKQorICAgICAgICAgICAgY2FnZVdp
dGhvdXRVbnRhZ2dpbmcoa2luZCwgc3RvcmFnZSk7CisgICAgICAgIGVsc2UgeworI2lmIENQVShB
Uk02NEUpCisgICAgICAgICAgICBpZiAobGVuZ3RoID09IHNjcmF0Y2gpCisgICAgICAgICAgICAg
ICAgc2NyYXRjaCA9IGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgp
OworI2VuZGlmCisgICAgICAgICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02NEUpCisg
ICAgICAgICAgICBkb25lLmFwcGVuZChicmFuY2hQdHIoRXF1YWwsIHN0b3JhZ2UsIFRydXN0ZWRJ
bW1QdHIoSlNBcnJheUJ1ZmZlclZpZXc6Om51bGxWZWN0b3JQdHIoKSkpKTsKKyNlbmRpZgorICAg
ICAgICAgICAgZG9uZS5hcHBlbmQoYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNz
KCZHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlUmVxdWVzdGVkKSkpOworCisgICAg
ICAgICAgICBsb2FkUHRyKEdpZ2FjYWdlOjphZGRyZXNzT2ZCYXNlUHRyKGtpbmQpLCBzY3JhdGNo
KTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCBzY3JhdGNoKSk7
CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wUmVnID0gZ2V0Q2FjaGVk
RGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICAgICAgbW92ZShzdG9y
YWdlLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIEFTU0VSVChMb2dpY2FsSW1tZWRpYXRlOjpjcmVh
dGU2NChHaWdhY2FnZTo6bWFzayhraW5kKSkuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgIGFuZFB0
cihUcnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwgdGVtcFJlZyk7CisgICAgICAg
ICAgICBhZGRQdHIoc2NyYXRjaCwgdGVtcFJlZyk7CisgICAgICAgICAgICBiaXRGaWVsZEluc2Vy
dDY0KHRlbXBSZWcsIDAsIDY0IC0gbnVtYmVyT2ZQQUNCaXRzLCBzdG9yYWdlKTsKKyNlbHNlCisg
ICAgICAgICAgICBhbmRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6bWFzayhraW5kKSksIHN0
b3JhZ2UpOworICAgICAgICAgICAgYWRkUHRyKHNjcmF0Y2gsIHN0b3JhZ2UpOworI2VuZGlmIC8v
IENQVShBUk02NEUpCisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAg
ICB9CisjZW5kaWYKKworI2lmIENQVShBUk02NEUpCisgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6
OlByaW1pdGl2ZSkKKyAgICAgICAgdW50YWdBcnJheVB0cihsZW5ndGgsIHN0b3JhZ2UsIHZhbGlk
YXRlQXV0aCwgc2NyYXRjaCk7CisjZW5kaWYKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7CisgICAg
VU5VU0VEX1BBUkFNKHN0b3JhZ2UpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworICAgIFVO
VVNFRF9QQVJBTShzY3JhdGNoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAv
LyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMyLDc2ICsxNzMyLDkgQEAg
cHVibGljOgogICAgICAgICBvay5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIHZvaWQgY2FnZVdp
dGhvdXRVbnRhZ2dpbmcoR2lnYWNhZ2U6OktpbmQga2luZCwgR1BSUmVnIHN0b3JhZ2UpCi0gICAg
ewotI2lmIEdJR0FDQUdFX0VOQUJMRUQKLSAgICAgICAgaWYgKCFHaWdhY2FnZTo6aXNFbmFibGVk
KGtpbmQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAg
UmVnaXN0ZXJJRCB0ZW1wUmVnID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKGtpbmQgPT0g
R2lnYWNhZ2U6OlByaW1pdGl2ZSkgewotICAgICAgICAgICAgdGVtcFJlZyA9IGdldENhY2hlZE1l
bW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgbW92ZShzdG9y
YWdlLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIC8vIEZsaXAgdGhlIHJlZ2lzdGVycyBzaW5jZSBi
aXRGaWVsZEluc2VydCBvbmx5IGluc2VydHMgaW50byB0aGUgbG93IGJpdHMuCi0gICAgICAgICAg
ICBzdGQ6OnN3YXAoc3RvcmFnZSwgdGVtcFJlZyk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAg
ICBhbmRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6bWFzayhraW5kKSksIHN0b3JhZ2UpOwot
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6YmFzZVB0cihraW5kKSksIHN0
b3JhZ2UpOwotI2lmIENQVShBUk02NEUpCi0gICAgICAgIGlmIChraW5kID09IEdpZ2FjYWdlOjpQ
cmltaXRpdmUpCi0gICAgICAgICAgICBiaXRGaWVsZEluc2VydDY0KHN0b3JhZ2UsIDAsIDY0IC0g
bnVtYmVyT2ZQQUNCaXRzLCB0ZW1wUmVnKTsKLSNlbmRpZgotCi0jZWxzZQotICAgICAgICBVTlVT
RURfUEFSQU0oa2luZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKLSNlbmRpZgot
ICAgIH0KLQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2FnZVdpdGhvdXRVbnRhZ2dpbmco
R2lnYWNhZ2U6OktpbmQga2luZCwgR1BSUmVnIHN0b3JhZ2UpOwogICAgIC8vIGxlbmd0aCBtYXkg
YmUgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc2NyYXRjaC4KLSAgICB2b2lkIGNhZ2VDb25kaXRpb25h
bGx5KEdpZ2FjYWdlOjpLaW5kIGtpbmQsIEdQUlJlZyBzdG9yYWdlLCBHUFJSZWcgbGVuZ3RoLCBH
UFJSZWcgc2NyYXRjaCkKLSAgICB7Ci0jaWYgR0lHQUNBR0VfRU5BQkxFRAotICAgICAgICBpZiAo
R2lnYWNhZ2U6OmlzRW5hYmxlZChraW5kKSkgewotICAgICAgICAgICAgaWYgKGtpbmQgIT0gR2ln
YWNhZ2U6OlByaW1pdGl2ZSB8fCBHaWdhY2FnZTo6ZGlzYWJsaW5nUHJpbWl0aXZlR2lnYWNhZ2VJ
c0ZvcmJpZGRlbigpKQotICAgICAgICAgICAgICAgIGNhZ2VXaXRob3V0VW50YWdnaW5nKGtpbmQs
IHN0b3JhZ2UpOwotICAgICAgICAgICAgZWxzZSB7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAg
ICAgICAgICBpZiAobGVuZ3RoID09IHNjcmF0Y2gpCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0
Y2ggPSBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKLSNlbmRp
ZgotICAgICAgICAgICAgICAgIEp1bXBMaXN0IGRvbmU7Ci0gICAgICAgICAgICAgICAgZG9uZS5h
cHBlbmQoYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKCZHaWdhY2FnZTo6ZGlz
YWJsZVByaW1pdGl2ZUdpZ2FjYWdlUmVxdWVzdGVkKSkpOwotCi0gICAgICAgICAgICAgICAgbG9h
ZFB0cihHaWdhY2FnZTo6YWRkcmVzc09mQmFzZVB0cihraW5kKSwgc2NyYXRjaCk7Ci0gICAgICAg
ICAgICAgICAgZG9uZS5hcHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHNjcmF0Y2gpKTsKLSNpZiBD
UFUoQVJNNjRFKQotICAgICAgICAgICAgICAgIEdQUlJlZyB0ZW1wUmVnID0gZ2V0Q2FjaGVkRGF0
YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgICAgIG1vdmUoc3Rv
cmFnZSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKExvZ2ljYWxJbW1lZGlhdGU6
OmNyZWF0ZTY0KEdpZ2FjYWdlOjptYXNrKGtpbmQpKS5pc1ZhbGlkKCkpOwotICAgICAgICAgICAg
ICAgIGFuZFB0cihUcnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwgdGVtcFJlZyk7
Ci0gICAgICAgICAgICAgICAgYWRkUHRyKHNjcmF0Y2gsIHRlbXBSZWcpOwotICAgICAgICAgICAg
ICAgIGJpdEZpZWxkSW5zZXJ0NjQodGVtcFJlZywgMCwgNjQgLSBudW1iZXJPZlBBQ0JpdHMsIHN0
b3JhZ2UpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBhbmRQdHIoVHJ1c3RlZEltbVB0cihHaWdh
Y2FnZTo6bWFzayhraW5kKSksIHN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIGFkZFB0cihzY3Jh
dGNoLCBzdG9yYWdlKTsKLSNlbmRpZiAvLyBDUFUoQVJNNjRFKQotICAgICAgICAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0KLSNpZiBD
UFUoQVJNNjRFKQotICAgICAgICBpZiAoa2luZCA9PSBHaWdhY2FnZTo6UHJpbWl0aXZlKQotICAg
ICAgICAgICAgdW50YWdBcnJheVB0cihsZW5ndGgsIHN0b3JhZ2UpOwotI2VuZGlmCi0gICAgICAg
IFVOVVNFRF9QQVJBTShraW5kKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN0b3JhZ2UpOwotICAg
ICAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gp
OwotICAgIH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNhZ2VDb25kaXRpb25hbGx5QW5k
VW50YWcoR2lnYWNhZ2U6OktpbmQga2luZCwgR1BSUmVnIHN0b3JhZ2UsIEdQUlJlZyBsZW5ndGgs
IEdQUlJlZyBzY3JhdGNoLCBib29sIHZhbGlkYXRlQXV0aCA9IHRydWUpOwogCiAgICAgdm9pZCBl
bWl0Q29tcHV0ZUJ1dHRlcmZseUluZGV4aW5nTWFzayhHUFJSZWcgdmVjdG9yTGVuZ3RoR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgR1BSUmVnIHJlc3VsdEdQUikKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24g
MjY1MDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MzAsNyArMTYzMCw3IEBAIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0SW50VHlwZWRBcnJheVB1dEIKICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMg
aW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAgICAgLy8g
cGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgogICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3Jh
dGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2Ny
YXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIpOworICAgIGNhZ2VDb25kaXRpb25hbGx5
QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMiwg
bGF0ZVNjcmF0Y2gyLCBmYWxzZSk7CiAgICAgCiAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgewog
ICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CkBAIC0xNzE5LDcgKzE3MTks
NyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1CiAgICAgLy8gV2Ug
d291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQg
dGhhdCB0aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2Ji
ZXJlZC4KICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNh
Z2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMiwgbGF0ZVNjcmF0Y2gyKTsK
KyAgICBjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVT
Y3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVTY3JhdGNoMiwgZmFsc2UpOwogICAgIAogICAgIHN3
aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9u
IDI2NTA5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1NCw3ICs5NTQsNyBAQCB2b2lkIEFpcklSR2VuZXJh
dG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRN
ZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKIAotICAgICAgICAgICAgaml0
LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5l
ZFJlZ3MtPnNpemVSZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7CisgICAgICAgICAgICBqaXQuY2Fn
ZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBw
aW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIsIHNjcmF0Y2hPclNpemUpOwogICAgICAgICB9KTsKIAog
ICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9jaywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNl
KTsKQEAgLTIzMDAsNyArMjMwMCw3IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRp
cmVjdCh1bnMKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhu
ZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSks
IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCiAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZv
aWQqLgogCi0gICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1p
dGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVncy5zaXplUmVnaXN0ZXIsIHNjcmF0Y2hPclNpemUp
OworICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVncy5zaXplUmVnaXN0ZXIsIHNjcmF0Y2hPclNp
emUpOwogICAgICAgICB9KTsKIAogICAgICAgICBlbWl0UGF0Y2hwb2ludChkb0NvbnRleHRTd2l0
Y2gsIHBhdGNocG9pbnQsIFRtcCgpLCBuZXdDb250ZXh0SW5zdGFuY2UsIGluc3RhbmNlVmFsdWUo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MCw3ICs1ODAsNyBA
QCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsCiAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIp
OwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1sw
XS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsK
IAotICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUs
IGJhc2VNZW1vcnksIHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7Cisg
ICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0
aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIsIHNjcmF0Y2hPclNpemUp
OwogICAgICAgICB9KTsKICAgICB9CiB9CkBAIC0xODU0LDcgKzE4NTQsNyBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnNpCiAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9y
eSBzaXplLgogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5l
d0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KIAotICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRp
b25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3Muc2l6ZVJl
Z2lzdGVyLCBzY3JhdGNoT3JTaXplKTsKKyAgICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxs
eUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyLCBzY3JhdGNoT3JTaXplKTsKICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29udGV4
dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNv
bnRpbnVhdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmlu
ZGluZy5jcHAJKHJldmlzaW9uIDI2NTA5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBFeHBlY3Rl
ZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAKICAgICAgICAgaml0LmxvYWRQdHIo
SklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCiAg
ICAgICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6
OlRhZ2dlZEFycmF5U3RvcmFnZVB0cjx2b2lkPiAodm9pZCopLgotICAgICAgICBqaXQuY2FnZUNv
bmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVncy5z
aXplUmVnaXN0ZXIsIHNjcmF0Y2hPclNpemUpOworICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFs
bHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLnNp
emVSZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgfQogCiAgICAgLy8gVGFpbCBjYWxsIGlu
dG8gdGhlIGNhbGxlZSBXZWJBc3NlbWJseSBmdW5jdGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJKHJldmlzaW9uIDI2NTA5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM3LDcgKzIzNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUK
ICAgICAgICAgfQogCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
dXJyZW50SW5zdGFuY2VHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgp
KSwgYmFzZU1lbW9yeSk7Ci0gICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6
UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBzY3JhdGNoT3JTaXplLCBzY3JhdGNoT3JTaXplKTsKKyAg
ICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
YmFzZU1lbW9yeSwgc2NyYXRjaE9yU2l6ZSwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgfQogCiAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxs
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjY1MDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2OCw3ICszNjgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2Vi
CiAgICAgICAgIH0KIAogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaEdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNl
TWVtb3J5KTsKLSAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRp
dmUsIGJhc2VNZW1vcnksIHNjcmF0Y2hPclNpemUsIHNjcmF0Y2hPclNpemUpOworICAgICAgICBq
aXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVt
b3J5LCBzY3JhdGNoT3JTaXplLCBzY3JhdGNoT3JTaXplKTsKICAgICB9CiAKICAgICAvLyBXZSB1
c2UgdGhpcyBjYWxsZWUgdG8gaW5kaWNhdGUgaG93IHRvIHVud2luZCBwYXN0IHRoZXNlIHR5cGVz
IG9mIGZyYW1lczoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405646</attachid>
            <date>2020-07-30 18:03:50 -0700</date>
            <delta_ts>2020-07-31 11:09:41 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>23564</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY1MTA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDIwLTA3LTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IHZhbGlkYXRlIHVudGFnQXJyYXlQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNDk1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIHVudGFnQXJyYXlQ
dHIgYWxvbmcgcGF0aHMgd2hlcmUgd2UgZG9uJ3QKKyAgICAgICAgaW1tZWRpYXRlbHkgc3RvcmUv
bG9hZCBmcm9tIHRoZSByZXN1bHQuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28g
Y2hhbmdlcyB0aGUgcmVtb3ZlQXJyYXlQdHJUYWcgbWFjcm8gYXNzZW1ibGVyIGZ1bmN0aW9uIHRv
CisgICAgICAgIHVzZSBzaGlmdHMgaW5zdGVhZCBvZiB4cGFjZCB0byBzdHJpcCB0aGUgdGFnLCBi
ZWNhdXNlIGl0J3MgZmFzdGVyLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjRFLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjp1bnRhZ0FycmF5
UHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NEU6OnJlbW92ZUFycmF5UHRy
VGFnKToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0
ZXN0Q2FnZVByZXNlcnZlc1BBQ0ZhaWx1cmVCaXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjp1bnRhZ0FycmF5UHRyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y2FnZWQpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAg
ICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhZ2VXaXRob3V0VW50YWdnaW5nKToKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6Y2FnZVdpdGhvdXRVbnRhZ2dpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmNhZ2VDb25kaXRpb25hbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFy
cmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRC
eVZhbCk6CisgICAgICAgICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUp
OgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToK
KyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAq
IHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToK
KyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3Jl
YXRlSlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBv
aW50U2xvdyk6CisKIDIwMjAtMDctMzAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CiAKICAgICAgICAgU3RyaXAgcG9pbnRlcnMgaW5zdGVhZCBvZiBhdXRoaW5nIGZvciBieXRlT2Zm
c2V0IHRvIG5vdCBhbGxvdyBmb3IgYSBwb3NzaWJsZSB3YXkgdG8gZ3Vlc3MgZGF0YSBwYWMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjRFLmgJKHJldmlzaW9uIDI2NTA5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NEUuaAkod29ya2luZyBjb3B5KQpAQCAtOTAs
MjEgKzkwLDUxIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIucGFjZGIodGFyZ2V0LCBs
ZW5ndGgpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ0FycmF5UHRyKFJl
Z2lzdGVySUQgbGVuZ3RoLCBSZWdpc3RlcklEIHRhcmdldCkKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgdW50YWdBcnJheVB0cihSZWdpc3RlcklEIGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJnZXQsIGJv
b2wgdmFsaWRhdGVBdXRoLCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgeworICAgICAgICBpZiAo
dmFsaWRhdGVBdXRoKSB7CisgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBJbnZhbGlkR1BS
UmVnKTsKKyAgICAgICAgICAgIG1vdmUodGFyZ2V0LCBzY3JhdGNoKTsKKyAgICAgICAgfQorCiAg
ICAgICAgIG1fYXNzZW1ibGVyLmF1dGRiKHRhcmdldCwgbGVuZ3RoKTsKKworICAgICAgICBpZiAo
dmFsaWRhdGVBdXRoKSB7CisgICAgICAgICAgICBBU1NFUlQodGFyZ2V0ICE9IEFSTTY0UmVnaXN0
ZXJzOjpzcCk7CisgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBBUk02NFJlZ2lzdGVyczo6
c3ApOworICAgICAgICAgICAgcmVtb3ZlQXJyYXlQdHJUYWcoc2NyYXRjaCk7CisgICAgICAgICAg
ICBhdXRvIGlzVmFsaWRQdHIgPSBicmFuY2g2NChFcXVhbCwgc2NyYXRjaCwgdGFyZ2V0KTsKKyAg
ICAgICAgICAgIGJyZWFrcG9pbnQoMHhhYmNkKTsKKyAgICAgICAgICAgIGlzVmFsaWRQdHIubGlu
ayh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRh
Z0FycmF5UHRyKEFkZHJlc3MgbGVuZ3RoLCBSZWdpc3RlcklEIHRhcmdldCkKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgdW50YWdBcnJheVB0cihBZGRyZXNzIGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJn
ZXQsIGJvb2wgdmFsaWRhdGVBdXRoKQogICAgIHsKICAgICAgICAgYXV0byBsZW5ndGhHUFIgPSBn
ZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CiAgICAgICAgIGxvYWQz
MihsZW5ndGgsIGxlbmd0aEdQUik7CisgICAgICAgIGF1dG8gc2NyYXRjaCA9IEludmFsaWRHUFJS
ZWc7IAorICAgICAgICBpZiAodmFsaWRhdGVBdXRoKSB7CisgICAgICAgICAgICBzY3JhdGNoID0g
Z2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAgICAg
ICBtb3ZlKHRhcmdldCwgc2NyYXRjaCk7CisgICAgICAgIH0KKwogICAgICAgICBtX2Fzc2VtYmxl
ci5hdXRkYih0YXJnZXQsIGxlbmd0aEdQUik7CisKKyAgICAgICAgaWYgKHZhbGlkYXRlQXV0aCkg
eworICAgICAgICAgICAgQVNTRVJUKHRhcmdldCAhPSBBUk02NFJlZ2lzdGVyczo6c3ApOworICAg
ICAgICAgICAgcmVtb3ZlQXJyYXlQdHJUYWcoc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRvIGlz
VmFsaWRQdHIgPSBicmFuY2g2NChFcXVhbCwgc2NyYXRjaCwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IGJyZWFrcG9pbnQoMHhhYmNkKTsKKyAgICAgICAgICAgIGlzVmFsaWRQdHIubGluayh0aGlzKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZW1vdmVBcnJheVB0
clRhZyhSZWdpc3RlcklEIHRhcmdldCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnhwYWNk
KHRhcmdldCk7CisgICAgICAgIFRydXN0ZWRJbW0zMiBzaGlmdEFtb3VudCB7IDY0IC0gT1NfQ09O
U1RBTlQoRUZGRUNUSVZFX0FERFJFU1NfV0lEVEgpIH07CisgICAgICAgIGxzaGlmdDY0KHNoaWZ0
QW1vdW50LCB0YXJnZXQpOworICAgICAgICB1cnNoaWZ0NjQoc2hpZnRBbW91bnQsIHRhcmdldCk7
CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIEludmFsaWRHUFIgID0g
c3RhdGljX2Nhc3Q8UmVnaXN0ZXJJRD4oLTEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHJldmlzaW9uIDI2NTA5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDYwLDcgKzI0NjAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0Q2FnZVByZXNlcnZlc1BBQ0ZhaWx1cmVC
CiAgICAgUkVMRUFTRV9BU1NFUlQoIUdpZ2FjYWdlOjpkaXNhYmxpbmdQcmltaXRpdmVHaWdhY2Fn
ZUlzRm9yYmlkZGVuKCkpOwogICAgIGF1dG8gY2FnZSA9IGNvbXBpbGUoW10gKENDYWxsSGVscGVy
cyYgaml0KSB7CiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7Ci0gICAgICAgIGpp
dC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAg
ICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFy
Z3VtZW50R1BSMik7CiAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OwogICAgICAgICBqaXQucmV0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEs
NyArMTAyMSw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAg
ICAgICBqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4
dHJhU3BhY2UpOwogCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gyR1BS
KTsKLSAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNj
cmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmNhZ2VDb25k
aXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0
Y2hHUFIsIHNjcmF0Y2hHUFIsIGZhbHNlKTsKIAogICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9Q
dHIocHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMjY1MDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEyMyw3ICs1MTIzLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdDIsIHQxKSk7CiAK
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhkYXRhVmlld0dQUiwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCB0Mik7Ci0gICAgICAgIGNhZ2VU
eXBlZEFycmF5U3RvcmFnZShkYXRhVmlld0dQUiwgdDIpOworICAgICAgICBjYWdlVHlwZWRBcnJh
eVN0b3JhZ2UoZGF0YVZpZXdHUFIsIHQyLCBmYWxzZSk7CiAKICAgICAgICAgbV9qaXQuemVyb0V4
dGVuZDMyVG9Xb3JkKGluZGV4R1BSLCB0MSk7CiAgICAgICAgIGF1dG8gYmFzZUluZGV4ID0gSklU
Q29tcGlsZXI6OkJhc2VJbmRleCh0MiwgdDEsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSk7CkBA
IC01MzI0LDcgKzUzMjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCB0MiwgdDEpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGRhdGFWaWV3R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHQy
KTsKLSAgICAgICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKGRhdGFWaWV3R1BSLCB0Mik7CisgICAg
ICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShkYXRhVmlld0dQUiwgdDIsIGZhbHNlKTsKIAogICAg
ICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQoaW5kZXhHUFIsIHQxKTsKICAgICAgICAgYXV0
byBiYXNlSW5kZXggPSBKSVRDb21waWxlcjo6QmFzZUluZGV4KHQyLCB0MSwgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzT25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzOSwx
MiArNzIzOSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29uc3RhbnRTdG9yCiAg
ICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgc3RvcmFn
ZVJlZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcg
YmFzZVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIGJvb2wgdmFsaWRhdGVBdXRoKQogewogICAgIGF1
dG8gdW50YWdBcnJheVB0ciA9IFsmXSgpIHsKICNpZiBDUFUoQVJNNjRFKQotICAgICAgICBtX2pp
dC51bnRhZ0FycmF5UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgIG1faml0
LnVudGFnQXJyYXlQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlUmVnLCB2YWxpZGF0ZUF1dGgpOwog
I2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbGlkYXRlQXV0aCk7CiAgICAgICAgIFVOVVNF
RF9QQVJBTShiYXNlUmVnKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHN0b3JhZ2VSZWcpOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NjAsNyArMTY2MCw3IEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUlu
dDMySW50ZXJuYWwoRWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKICAgICAKLSAgICB2
b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQUlJlZyk7CisgICAgdm9pZCBjYWdl
VHlwZWRBcnJheVN0b3JhZ2UoR1BSUmVnLCBHUFJSZWcsIGJvb2wgdmFsaWRhdGVBdXRoID0gdHJ1
ZSk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKICAgICAgICAgT3BlcmFuZCBieXRl
Y29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
cmV2aXNpb24gMjY1MDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTkzOCw5ICsxNTkzOCwxMCBAQCBwcml2YXRl
OgogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIGF1dGhlbnRpY2F0ZSA9IG1fb3V0LnBhdGNocG9p
bnQocG9pbnRlclR5cGUoKSk7CiAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kU29tZVJlZ2lz
dGVyKHB0cik7CiAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kKHNpemUsIEIzOjpWYWx1ZVJl
cChCMzo6VmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsKKyAgICAgICAgYXV0aGVudGljYXRl
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgICAgICBhdXRoZW50aWNhdGUtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zWzFdLmdwcigpLCBw
YXJhbXNbMF0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LnVudGFnQXJyYXlQdHIocGFyYW1zWzJd
LmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAgaml0LnVudGFnQXJyYXlQdHIo
cGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHRydWUsIHBhcmFtcy5ncFNjcmF0Y2go
MCkpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIGF1dGhlbnRpY2F0ZTsKICNlbHNlCkBA
IC0xNTk5NCw2ICsxNTk5NSwxMSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVl
IG1hc2tlZCA9IG1fb3V0LmJpdEFuZChwdHIsIG1hc2spOwogICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbV9vdXQuYWRkKG1hc2tlZCwgYmFzZVB0cik7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAg
cmVzdWx0ID0gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgbV9vdXQuZXF1YWwocHRyLCBtX291
dC5jb25zdEludFB0cihKU0FycmF5QnVmZmVyVmlldzo6bnVsbFZlY3RvclB0cigpKSksCisgICAg
ICAgICAgICBwdHIsIHJlc3VsdCk7CisjZW5kaWYKIAogI2lmIENQVShBUk02NEUpCiAgICAgICAg
IGlmIChraW5kID09IEdpZ2FjYWdlOjpQcmltaXRpdmUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI2NTA5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTEzOSw2ICsxMTM5LDg1IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzYW5pdGl6
ZVN0YWNrSW5saW4KICAgICBzdG9yZVB0cihzY3JhdGNoLCB2bS5hZGRyZXNzT2ZMYXN0U3RhY2tU
b3AoKSk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjYWdlV2l0aG91dFVudGFnZ2luZyhH
aWdhY2FnZTo6S2luZCBraW5kLCBHUFJSZWcgc3RvcmFnZSkKK3sKKyNpZiBHSUdBQ0FHRV9FTkFC
TEVECisgICAgaWYgKCFHaWdhY2FnZTo6aXNFbmFibGVkKGtpbmQpKQorICAgICAgICByZXR1cm47
CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIFJlZ2lzdGVySUQgdGVtcFJlZyA9IEludmFsaWRHUFJS
ZWc7CisgICAgSnVtcCBza2lwOworICAgIGlmIChraW5kID09IEdpZ2FjYWdlOjpQcmltaXRpdmUp
IHsKKyAgICAgICAgc2tpcCA9IGJyYW5jaFB0cihFcXVhbCwgc3RvcmFnZSwgVHJ1c3RlZEltbVB0
cihKU0FycmF5QnVmZmVyVmlldzo6bnVsbFZlY3RvclB0cigpKSk7CisgICAgICAgIHRlbXBSZWcg
PSBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAg
bW92ZShzdG9yYWdlLCB0ZW1wUmVnKTsKKyAgICAgICAgLy8gRmxpcCB0aGUgcmVnaXN0ZXJzIHNp
bmNlIGJpdEZpZWxkSW5zZXJ0IG9ubHkgaW5zZXJ0cyBpbnRvIHRoZSBsb3cgYml0cy4KKyAgICAg
ICAgc3RkOjpzd2FwKHN0b3JhZ2UsIHRlbXBSZWcpOworICAgIH0KKyNlbmRpZgorICAgIGFuZFB0
cihUcnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwgc3RvcmFnZSk7CisgICAgYWRk
UHRyKFRydXN0ZWRJbW1QdHIoR2lnYWNhZ2U6OmJhc2VQdHIoa2luZCkpLCBzdG9yYWdlKTsKKyNp
ZiBDUFUoQVJNNjRFKQorICAgIGlmIChraW5kID09IEdpZ2FjYWdlOjpQcmltaXRpdmUpCisgICAg
ICAgIGJpdEZpZWxkSW5zZXJ0NjQoc3RvcmFnZSwgMCwgNjQgLSBudW1iZXJPZlBBQ0JpdHMsIHRl
bXBSZWcpOworICAgIGlmIChza2lwLmlzU2V0KCkpCisgICAgICAgIHNraXAubGluayh0aGlzKTsK
KyNlbmRpZgorCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShraW5kKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RvcmFnZSk7CisjZW5kaWYKK30KKworLy8gbGVuZ3RoIG1heSBiZSB0aGUgc2FtZSByZWdp
c3RlciBhcyBzY3JhdGNoLgordm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhZ2VDb25kaXRpb25hbGx5
QW5kVW50YWcoR2lnYWNhZ2U6OktpbmQga2luZCwgR1BSUmVnIHN0b3JhZ2UsIEdQUlJlZyBsZW5n
dGgsIEdQUlJlZyBzY3JhdGNoLCBib29sIHZhbGlkYXRlQXV0aCkKK3sKKyNpZiBHSUdBQ0FHRV9F
TkFCTEVECisgICAgaWYgKEdpZ2FjYWdlOjppc0VuYWJsZWQoa2luZCkpIHsKKyAgICAgICAgaWYg
KGtpbmQgIT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSB8fCBHaWdhY2FnZTo6ZGlzYWJsaW5nUHJpbWl0
aXZlR2lnYWNhZ2VJc0ZvcmJpZGRlbigpKQorICAgICAgICAgICAgY2FnZVdpdGhvdXRVbnRhZ2dp
bmcoa2luZCwgc3RvcmFnZSk7CisgICAgICAgIGVsc2UgeworI2lmIENQVShBUk02NEUpCisgICAg
ICAgICAgICBpZiAobGVuZ3RoID09IHNjcmF0Y2gpCisgICAgICAgICAgICAgICAgc2NyYXRjaCA9
IGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworI2VuZGlmCisg
ICAgICAgICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02NEUpCisgICAgICAgICAgICBk
b25lLmFwcGVuZChicmFuY2hQdHIoRXF1YWwsIHN0b3JhZ2UsIFRydXN0ZWRJbW1QdHIoSlNBcnJh
eUJ1ZmZlclZpZXc6Om51bGxWZWN0b3JQdHIoKSkpKTsKKyNlbmRpZgorICAgICAgICAgICAgZG9u
ZS5hcHBlbmQoYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKCZHaWdhY2FnZTo6
ZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlUmVxdWVzdGVkKSkpOworCisgICAgICAgICAgICBsb2Fk
UHRyKEdpZ2FjYWdlOjphZGRyZXNzT2ZCYXNlUHRyKGtpbmQpLCBzY3JhdGNoKTsKKyAgICAgICAg
ICAgIGRvbmUuYXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCBzY3JhdGNoKSk7CisjaWYgQ1BVKEFS
TTY0RSkKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wUmVnID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdp
c3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICAgICAgbW92ZShzdG9yYWdlLCB0ZW1wUmVn
KTsKKyAgICAgICAgICAgIEFTU0VSVChMb2dpY2FsSW1tZWRpYXRlOjpjcmVhdGU2NChHaWdhY2Fn
ZTo6bWFzayhraW5kKSkuaXNWYWxpZCgpKTsKKyAgICAgICAgICAgIGFuZFB0cihUcnVzdGVkSW1t
UHRyKEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwgdGVtcFJlZyk7CisgICAgICAgICAgICBhZGRQdHIo
c2NyYXRjaCwgdGVtcFJlZyk7CisgICAgICAgICAgICBiaXRGaWVsZEluc2VydDY0KHRlbXBSZWcs
IDAsIDY0IC0gbnVtYmVyT2ZQQUNCaXRzLCBzdG9yYWdlKTsKKyNlbHNlCisgICAgICAgICAgICBh
bmRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6bWFzayhraW5kKSksIHN0b3JhZ2UpOworICAg
ICAgICAgICAgYWRkUHRyKHNjcmF0Y2gsIHN0b3JhZ2UpOworI2VuZGlmIC8vIENQVShBUk02NEUp
CisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYK
KworI2lmIENQVShBUk02NEUpCisgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSkK
KyAgICAgICAgdW50YWdBcnJheVB0cihsZW5ndGgsIHN0b3JhZ2UsIHZhbGlkYXRlQXV0aCwgc2Ny
YXRjaCk7CisjZW5kaWYKKyAgICBVTlVTRURfUEFSQU0odmFsaWRhdGVBdXRoKTsKKyAgICBVTlVT
RURfUEFSQU0oa2luZCk7CisgICAgVU5VU0VEX1BBUkFNKHN0b3JhZ2UpOworICAgIFVOVVNFRF9Q
QVJBTShsZW5ndGgpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzMyLDc2ICsxNzMyLDkgQEAgcHVibGljOgogICAgICAgICBvay5saW5rKHRoaXMpOwogICAg
IH0KIAotICAgIHZvaWQgY2FnZVdpdGhvdXRVbnRhZ2dpbmcoR2lnYWNhZ2U6OktpbmQga2luZCwg
R1BSUmVnIHN0b3JhZ2UpCi0gICAgewotI2lmIEdJR0FDQUdFX0VOQUJMRUQKLSAgICAgICAgaWYg
KCFHaWdhY2FnZTo6aXNFbmFibGVkKGtpbmQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYg
Q1BVKEFSTTY0RSkKLSAgICAgICAgUmVnaXN0ZXJJRCB0ZW1wUmVnID0gSW52YWxpZEdQUlJlZzsK
LSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSkgewotICAgICAgICAgICAg
dGVtcFJlZyA9IGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwot
ICAgICAgICAgICAgbW92ZShzdG9yYWdlLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIC8vIEZsaXAg
dGhlIHJlZ2lzdGVycyBzaW5jZSBiaXRGaWVsZEluc2VydCBvbmx5IGluc2VydHMgaW50byB0aGUg
bG93IGJpdHMuCi0gICAgICAgICAgICBzdGQ6OnN3YXAoc3RvcmFnZSwgdGVtcFJlZyk7Ci0gICAg
ICAgIH0KLSNlbmRpZgotICAgICAgICBhbmRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6bWFz
ayhraW5kKSksIHN0b3JhZ2UpOwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2Fn
ZTo6YmFzZVB0cihraW5kKSksIHN0b3JhZ2UpOwotI2lmIENQVShBUk02NEUpCi0gICAgICAgIGlm
IChraW5kID09IEdpZ2FjYWdlOjpQcmltaXRpdmUpCi0gICAgICAgICAgICBiaXRGaWVsZEluc2Vy
dDY0KHN0b3JhZ2UsIDAsIDY0IC0gbnVtYmVyT2ZQQUNCaXRzLCB0ZW1wUmVnKTsKLSNlbmRpZgot
Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TShzdG9yYWdlKTsKLSNlbmRpZgotICAgIH0KLQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
Y2FnZVdpdGhvdXRVbnRhZ2dpbmcoR2lnYWNhZ2U6OktpbmQsIEdQUlJlZyBzdG9yYWdlKTsKICAg
ICAvLyBsZW5ndGggbWF5IGJlIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNjcmF0Y2guCi0gICAgdm9p
ZCBjYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6S2luZCBraW5kLCBHUFJSZWcgc3RvcmFnZSwg
R1BSUmVnIGxlbmd0aCwgR1BSUmVnIHNjcmF0Y2gpCi0gICAgewotI2lmIEdJR0FDQUdFX0VOQUJM
RUQKLSAgICAgICAgaWYgKEdpZ2FjYWdlOjppc0VuYWJsZWQoa2luZCkpIHsKLSAgICAgICAgICAg
IGlmIChraW5kICE9IEdpZ2FjYWdlOjpQcmltaXRpdmUgfHwgR2lnYWNhZ2U6OmRpc2FibGluZ1By
aW1pdGl2ZUdpZ2FjYWdlSXNGb3JiaWRkZW4oKSkKLSAgICAgICAgICAgICAgICBjYWdlV2l0aG91
dFVudGFnZ2luZyhraW5kLCBzdG9yYWdlKTsKLSAgICAgICAgICAgIGVsc2UgewotI2lmIENQVShB
Uk02NEUpCi0gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSBzY3JhdGNoKQotICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoID0gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZh
bGlkYXRlKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBKdW1wTGlzdCBkb25lOwotICAgICAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVz
cygmR2lnYWNhZ2U6OmRpc2FibGVQcmltaXRpdmVHaWdhY2FnZVJlcXVlc3RlZCkpKTsKLQotICAg
ICAgICAgICAgICAgIGxvYWRQdHIoR2lnYWNhZ2U6OmFkZHJlc3NPZkJhc2VQdHIoa2luZCksIHNj
cmF0Y2gpOwotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCBz
Y3JhdGNoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgICAgICBHUFJSZWcgdGVtcFJl
ZyA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKLSAgICAgICAg
ICAgICAgICBtb3ZlKHN0b3JhZ2UsIHRlbXBSZWcpOwotICAgICAgICAgICAgICAgIEFTU0VSVChM
b2dpY2FsSW1tZWRpYXRlOjpjcmVhdGU2NChHaWdhY2FnZTo6bWFzayhraW5kKSkuaXNWYWxpZCgp
KTsKLSAgICAgICAgICAgICAgICBhbmRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6bWFzayhr
aW5kKSksIHRlbXBSZWcpOwotICAgICAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoLCB0ZW1wUmVn
KTsKLSAgICAgICAgICAgICAgICBiaXRGaWVsZEluc2VydDY0KHRlbXBSZWcsIDAsIDY0IC0gbnVt
YmVyT2ZQQUNCaXRzLCBzdG9yYWdlKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYW5kUHRyKFRy
dXN0ZWRJbW1QdHIoR2lnYWNhZ2U6Om1hc2soa2luZCkpLCBzdG9yYWdlKTsKLSAgICAgICAgICAg
ICAgICBhZGRQdHIoc2NyYXRjaCwgc3RvcmFnZSk7Ci0jZW5kaWYgLy8gQ1BVKEFSTTY0RSkKLSAg
ICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSNlbmRpZgotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6
OlByaW1pdGl2ZSkKLSAgICAgICAgICAgIHVudGFnQXJyYXlQdHIobGVuZ3RoLCBzdG9yYWdlKTsK
LSNlbmRpZgotICAgICAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TShzdG9yYWdlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShzY3JhdGNoKTsKLSAgICB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjYWdl
Q29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpLaW5kLCBHUFJSZWcgc3RvcmFnZSwgR1BS
UmVnIGxlbmd0aCwgR1BSUmVnIHNjcmF0Y2gsIGJvb2wgdmFsaWRhdGVBdXRoID0gdHJ1ZSk7CiAK
ICAgICB2b2lkIGVtaXRDb21wdXRlQnV0dGVyZmx5SW5kZXhpbmdNYXNrKEdQUlJlZyB2ZWN0b3JM
ZW5ndGhHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBHUFJSZWcgcmVzdWx0R1BSKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIC8vIFdlIHdvdWxkIGJlIGxv
YWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNs
b3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCiAgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcigp
KSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRp
dmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVTY3JhdGNoMik7CisgICAgY2FnZUNv
bmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0
ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKICAgICAKICAgICBpZiAoaXNDbGFtcGVk
KHR5cGUpKSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKQEAgLTE3
MTksNyArMTcxOSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUK
ICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92
YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRv
IGJlIHVuY2xvYmJlcmVkLgogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9u
YWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRl
U2NyYXRjaDIpOworICAgIGNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1p
dGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7CiAg
ICAgCiAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gMjY1MDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFp
cklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU0LDcgKzk1NCw3IEBAIHZvaWQg
QWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUcKICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlcik7CiAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigp
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogCi0gICAg
ICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1l
bW9yeSwgcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyLCBzY3JhdGNoT3JTaXplKTsKKyAgICAgICAg
ICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJh
c2VNZW1vcnksIHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7CiAgICAg
ICAgIH0pOwogCiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAo
KSwgaW5zdGFuY2UpOwpAQCAtMjMwMCw3ICsyMzAwLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KHVucwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVt
b3J5U2l6ZSgpKSwgcGlubmVkUmVncy5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5z
dGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8v
IE1lbW9yeTo6dm9pZCouCiAKLSAgICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlciwgc2Ny
YXRjaE9yU2l6ZSk7CisgICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhH
aWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlciwg
c2NyYXRjaE9yU2l6ZSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGRv
Q29udGV4dFN3aXRjaCwgcGF0Y2hwb2ludCwgVG1wKCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5z
dGFuY2VWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI2NTA5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgw
LDcgKzU4MCw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2wKICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3By
KCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3MtPnNp
emVSZWdpc3Rlcik7CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJh
c2VNZW1vcnkpOwogCi0gICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6
OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyLCBzY3JhdGNo
T3JTaXplKTsKKyAgICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlciwgc2Ny
YXRjaE9yU2l6ZSk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KQEAgLTE4NTQsNyArMTg1NCw3IEBA
IGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2kKICAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVy
KTsgLy8gTWVtb3J5IHNpemUuCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1v
cnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQqLgogCi0gICAgICAgICAgICBqaXQu
Y2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVk
UmVncy5zaXplUmVnaXN0ZXIsIHNjcmF0Y2hPclNpemUpOworICAgICAgICAgICAgaml0LmNhZ2VD
b25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlu
bmVkUmVncy5zaXplUmVnaXN0ZXIsIHNjcmF0Y2hPclNpemUpOwogICAgICAgICB9KTsKICAgICAg
ICAgZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBv
cmlnaW4oKSwgY29udGludWF0aW9uKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjY1MDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3
IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKIAogICAgICAgICBq
aXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNl
dE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy5zaXplUmVnaXN0ZXIpOyAvLyBNZW1v
cnkgc2l6ZS4KICAgICAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdh
c206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdh
c206Ok1lbW9yeTo6VGFnZ2VkQXJyYXlTdG9yYWdlUHRyPHZvaWQ+ICh2b2lkKikuCi0gICAgICAg
IGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBw
aW5uZWRSZWdzLnNpemVSZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7CisgICAgICAgIGppdC5jYWdl
Q29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBp
bm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyLCBzY3JhdGNoT3JTaXplKTsKICAgICB9CiAKICAgICAvLyBU
YWlsIGNhbGwgaW50byB0aGUgY2FsbGVlIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjY1MDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IGNyZWF0ZQogICAgICAgICB9CiAKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2Fj
aGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHNjcmF0Y2hPclNpemUsIHNjcmF0Y2hP
clNpemUpOworICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6
UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBzY3JhdGNoT3JTaXplLCBzY3JhdGNoT3JTaXplKTsKICAg
ICB9CiAKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hh
YmxlTmVhckNhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNjUwOTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5
UHRyVGFnPiBXZWIKICAgICAgICAgfQogCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1v
cnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNh
Z2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRjaE9yU2l6ZSwgc2NyYXRjaE9yU2l6ZSk7
CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRp
dmUsIGJhc2VNZW1vcnksIHNjcmF0Y2hPclNpemUsIHNjcmF0Y2hPclNpemUpOwogICAgIH0KIAog
ICAgIC8vIFdlIHVzZSB0aGlzIGNhbGxlZSB0byBpbmRpY2F0ZSBob3cgdG8gdW53aW5kIHBhc3Qg
dGhlc2UgdHlwZXMgb2YgZnJhbWVzOgo=
</data>
<flag name="review"
          id="421039"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405710</attachid>
            <date>2020-07-31 11:09:41 -0700</date>
            <delta_ts>2021-03-25 12:55:00 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>23606</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY1MTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDIwLTA3LTMxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IHZhbGlkYXRlIHVudGFnQXJyYXlQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNDk1MworCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxl
ci4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byB1bnRhZ0FycmF5UHRy
IGFsb25nIHBhdGhzIHdoZXJlIHdlIGRvbid0CisgICAgICAgIGltbWVkaWF0ZWx5IHN0b3JlL2xv
YWQgZnJvbSB0aGUgcmVzdWx0LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGNo
YW5nZXMgdGhlIHJlbW92ZUFycmF5UHRyVGFnIG1hY3JvIGFzc2VtYmxlciBmdW5jdGlvbiB0bwor
ICAgICAgICB1c2Ugc2hpZnRzIGluc3RlYWQgb2YgeHBhY2QgdG8gc3RyaXAgdGhlIHRhZywgYmVj
YXVzZSBpdCdzIGZhc3Rlci4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0RS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0RTo6dW50YWdBcnJheVB0
cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjpyZW1vdmVBcnJheVB0clRh
Zyk6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVz
dENhZ2VQcmVzZXJ2ZXNQQUNGYWlsdXJlQml0KToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3ND
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNhZ2VUeXBlZEFycmF5U3RvcmFnZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6dW50YWdBcnJheVB0cik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNhZ2VkKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpjYWdlV2l0aG91dFVudGFnZ2luZyk6CisgICAgICAg
IChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmNhZ2VXaXRob3V0VW50YWdnaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpjYWdlQ29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJh
eVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlW
YWwpOgorICAgICAgICAqIHdhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKToK
KyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCk6Cisg
ICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OkIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6d2FzbVRvV2FzbSk6Cisg
ICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OmNyZWF0
ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2lu
dFNsb3cpOgorCiAyMDIwLTA3LTMxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlZHVjZSBvdmVyIGluY2x1ZGUgdXNhZ2UgaW4gSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0RS5oCShyZXZpc2lvbiAyNjUxNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDIxICs5
MCw1MiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnBhY2RiKHRhcmdldCwgbGVuZ3Ro
KTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdBcnJheVB0cihSZWdpc3Rl
cklEIGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHVu
dGFnQXJyYXlQdHIoUmVnaXN0ZXJJRCBsZW5ndGgsIFJlZ2lzdGVySUQgdGFyZ2V0LCBib29sIHZh
bGlkYXRlQXV0aCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQogICAgIHsKKyAgICAgICAgaWYgKHZhbGlk
YXRlQXV0aCkgeworICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2ggIT0gSW52YWxpZEdQUlJlZyk7
CisgICAgICAgICAgICBtb3ZlKHRhcmdldCwgc2NyYXRjaCk7CisgICAgICAgIH0KKwogICAgICAg
ICBtX2Fzc2VtYmxlci5hdXRkYih0YXJnZXQsIGxlbmd0aCk7CisKKyAgICAgICAgaWYgKHZhbGlk
YXRlQXV0aCkgeworICAgICAgICAgICAgQVNTRVJUKHRhcmdldCAhPSBBUk02NFJlZ2lzdGVyczo6
c3ApOworICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2ggIT0gQVJNNjRSZWdpc3RlcnM6OnNwKTsK
KyAgICAgICAgICAgIHJlbW92ZUFycmF5UHRyVGFnKHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0
byBpc1ZhbGlkUHRyID0gYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2gsIHRhcmdldCk7CisgICAgICAg
ICAgICBicmVha3BvaW50KDB4YWJjZCk7CisgICAgICAgICAgICBpc1ZhbGlkUHRyLmxpbmsodGhp
cyk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdBcnJh
eVB0cihBZGRyZXNzIGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJnZXQpCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIHVudGFnQXJyYXlQdHIoQWRkcmVzcyBsZW5ndGgsIFJlZ2lzdGVySUQgdGFyZ2V0LCBi
b29sIHZhbGlkYXRlQXV0aCkKICAgICB7CiAgICAgICAgIGF1dG8gbGVuZ3RoR1BSID0gZ2V0Q2Fj
aGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwogICAgICAgICBsb2FkMzIobGVu
Z3RoLCBsZW5ndGhHUFIpOworICAgICAgICBhdXRvIHNjcmF0Y2ggPSBJbnZhbGlkR1BSUmVnOyAK
KyAgICAgICAgaWYgKHZhbGlkYXRlQXV0aCkgeworICAgICAgICAgICAgc2NyYXRjaCA9IGdldENh
Y2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICAgICAgbW92
ZSh0YXJnZXQsIHNjcmF0Y2gpOworICAgICAgICB9CisKICAgICAgICAgbV9hc3NlbWJsZXIuYXV0
ZGIodGFyZ2V0LCBsZW5ndGhHUFIpOworCisgICAgICAgIGlmICh2YWxpZGF0ZUF1dGgpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCh0YXJnZXQgIT0gQVJNNjRSZWdpc3RlcnM6OnNwKTsKKyAgICAgICAg
ICAgIHJlbW92ZUFycmF5UHRyVGFnKHNjcmF0Y2gpOworICAgICAgICAgICAgYXV0byBpc1ZhbGlk
UHRyID0gYnJhbmNoNjQoRXF1YWwsIHNjcmF0Y2gsIHRhcmdldCk7CisgICAgICAgICAgICBicmVh
a3BvaW50KDB4YWJjZCk7CisgICAgICAgICAgICBpc1ZhbGlkUHRyLmxpbmsodGhpcyk7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVtb3ZlQXJyYXlQdHJUYWco
UmVnaXN0ZXJJRCB0YXJnZXQpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci54cGFjZCh0YXJn
ZXQpOworICAgICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBmaXQgdGhpcyBpbnRvIGEgc2luZ2xlIGlu
c3RydWN0aW9uLCB3ZSdkIGJlIGJldHRlcgorICAgICAgICAvLyBvZmYgZW1pdHRpbmcgdHdvIHNo
aWZ0cyB0byBtYXNrIG9mZiB0aGUgdG9wIGJpdHMuCisgICAgICAgIEFTU0VSVChMb2dpY2FsSW1t
ZWRpYXRlOjpjcmVhdGU2NChub25QQUNCaXRzTWFzaykuaXNWYWxpZCgpKTsKKyAgICAgICAgYW5k
NjQoVHJ1c3RlZEltbVB0cihub25QQUNCaXRzTWFzayksIHRhcmdldCk7CiAgICAgfQogCiAgICAg
c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIEludmFsaWRHUFIgID0gc3RhdGljX2Nhc3Q8UmVn
aXN0ZXJJRD4oLTEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0
bWFzbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90
ZXN0bWFzbS5jcHAJKHJldmlzaW9uIDI2NTE0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvdGVzdG1hc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYwLDcgKzI0NjAsNyBA
QCBzdGF0aWMgdm9pZCB0ZXN0Q2FnZVByZXNlcnZlc1BBQ0ZhaWx1cmVCCiAgICAgUkVMRUFTRV9B
U1NFUlQoIUdpZ2FjYWdlOjpkaXNhYmxpbmdQcmltaXRpdmVHaWdhY2FnZUlzRm9yYmlkZGVuKCkp
OwogICAgIGF1dG8gY2FnZSA9IGNvbXBpbGUoW10gKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7Ci0gICAgICAgIGppdC5jYWdlQ29uZGl0aW9u
YWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAgaml0LmNhZ2VD
b25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAg
ICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOwogICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwogICAgICAgICBqaXQu
cmV0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nh
c2UuY3BwCShyZXZpc2lvbiAyNjUxNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjEsNyArMTAyMSw3IEBAIHZv
aWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICBqaXQsIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOwogCiAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5
QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgaml0
LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50
YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hH
UFIsIGZhbHNlKTsKIAogICAgICAgICBqaXQuc2lnbkV4dGVuZDMyVG9QdHIocHJvcGVydHlHUFIs
IHNjcmF0Y2hHUFIpOwogICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMjY1MTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEyMyw3ICs1MTIzLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdDIsIHQxKSk7CiAKICAgICAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhkYXRhVmlld0dQUiwgSlNBcnJheUJ1ZmZlclZp
ZXc6Om9mZnNldE9mVmVjdG9yKCkpLCB0Mik7Ci0gICAgICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFn
ZShkYXRhVmlld0dQUiwgdDIpOworICAgICAgICBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoZGF0YVZp
ZXdHUFIsIHQyLCBmYWxzZSk7CiAKICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9Xb3JkKGlu
ZGV4R1BSLCB0MSk7CiAgICAgICAgIGF1dG8gYmFzZUluZGV4ID0gSklUQ29tcGlsZXI6OkJhc2VJ
bmRleCh0MiwgdDEsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSk7CkBAIC01MzI0LDcgKzUzMjQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0MiwgdDEpKTsK
IAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGRhdGFWaWV3R1BS
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHQyKTsKLSAgICAgICAgY2Fn
ZVR5cGVkQXJyYXlTdG9yYWdlKGRhdGFWaWV3R1BSLCB0Mik7CisgICAgICAgIGNhZ2VUeXBlZEFy
cmF5U3RvcmFnZShkYXRhVmlld0dQUiwgdDIsIGZhbHNlKTsKIAogICAgICAgICBtX2ppdC56ZXJv
RXh0ZW5kMzJUb1dvcmQoaW5kZXhHUFIsIHQxKTsKICAgICAgICAgYXV0byBiYXNlSW5kZXggPSBK
SVRDb21waWxlcjo6QmFzZUluZGV4KHQyLCB0MSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyNjUxNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzOSwxMiArNzIzOSwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29uc3RhbnRTdG9yCiAgICAgc3RvcmFnZVJlc3Vs
dChzdG9yYWdlR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVk
QXJyYXlTdG9yYWdlKEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgc3RvcmFnZVJlZykKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcgYmFzZVJlZywgR1BSUmVn
IHN0b3JhZ2VSZWcsIGJvb2wgdmFsaWRhdGVBdXRoKQogewogICAgIGF1dG8gdW50YWdBcnJheVB0
ciA9IFsmXSgpIHsKICNpZiBDUFUoQVJNNjRFKQotICAgICAgICBtX2ppdC51bnRhZ0FycmF5UHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCgpKSwgc3RvcmFnZVJlZyk7CisgICAgICAgIG1faml0LnVudGFnQXJyYXlQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mTGVuZ3RoKCkpLCBzdG9yYWdlUmVnLCB2YWxpZGF0ZUF1dGgpOwogI2Vsc2UKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHZhbGlkYXRlQXV0aCk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShiYXNlUmVn
KTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHN0b3JhZ2VSZWcpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAy
NjUxNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NjAsNyArMTY2MCw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0
ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludDMySW50ZXJuYWwoRWRn
ZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKICAgICAKLSAgICB2b2lkIGNhZ2VUeXBlZEFy
cmF5U3RvcmFnZShHUFJSZWcsIEdQUlJlZyk7CisgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3Jh
Z2UoR1BSUmVnLCBHUFJSZWcsIGJvb2wgdmFsaWRhdGVBdXRoID0gdHJ1ZSk7CiAgICAgCiAgICAg
dm9pZCByZWNvcmRTZXRMb2NhbCgKICAgICAgICAgT3BlcmFuZCBieXRlY29kZVJlZywgVmlydHVh
bFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjY1MTQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTkzOCw5ICsxNTkzOCwxMCBAQCBwcml2YXRlOgogICAgICAgICBQYXRj
aHBvaW50VmFsdWUqIGF1dGhlbnRpY2F0ZSA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUo
KSk7CiAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kU29tZVJlZ2lzdGVyKHB0cik7CiAgICAg
ICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5kKHNpemUsIEIzOjpWYWx1ZVJlcChCMzo6VmFsdWVSZXA6
OlNvbWVMYXRlUmVnaXN0ZXIpKTsKKyAgICAgICAgYXV0aGVudGljYXRlLT5udW1HUFNjcmF0Y2hS
ZWdpc3RlcnMgPSAxOwogICAgICAgICBhdXRoZW50aWNhdGUtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
ewogICAgICAgICAgICAgaml0Lm1vdmUocGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkp
OwotICAgICAgICAgICAgaml0LnVudGFnQXJyYXlQdHIocGFyYW1zWzJdLmdwcigpLCBwYXJhbXNb
MF0uZ3ByKCkpOworICAgICAgICAgICAgaml0LnVudGFnQXJyYXlQdHIocGFyYW1zWzJdLmdwcigp
LCBwYXJhbXNbMF0uZ3ByKCksIHRydWUsIHBhcmFtcy5ncFNjcmF0Y2goMCkpOwogICAgICAgICB9
KTsKICAgICAgICAgcmV0dXJuIGF1dGhlbnRpY2F0ZTsKICNlbHNlCkBAIC0xNTk5NCw2ICsxNTk5
NSwxMSBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIG1hc2tlZCA9IG1fb3V0
LmJpdEFuZChwdHIsIG1hc2spOwogICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYWRkKG1h
c2tlZCwgYmFzZVB0cik7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgcmVzdWx0ID0gbV9vdXQu
c2VsZWN0KAorICAgICAgICAgICAgbV9vdXQuZXF1YWwocHRyLCBtX291dC5jb25zdEludFB0cihK
U0FycmF5QnVmZmVyVmlldzo6bnVsbFZlY3RvclB0cigpKSksCisgICAgICAgICAgICBwdHIsIHJl
c3VsdCk7CisjZW5kaWYKIAogI2lmIENQVShBUk02NEUpCiAgICAgICAgIGlmIChraW5kID09IEdp
Z2FjYWdlOjpQcmltaXRpdmUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDI2NTE0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzOSw2
ICsxMTM5LDg1IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpzYW5pdGl6ZVN0YWNrSW5saW4KICAg
ICBzdG9yZVB0cihzY3JhdGNoLCB2bS5hZGRyZXNzT2ZMYXN0U3RhY2tUb3AoKSk7CiB9CiAKK3Zv
aWQgQXNzZW1ibHlIZWxwZXJzOjpjYWdlV2l0aG91dFVudGFnZ2luZyhHaWdhY2FnZTo6S2luZCBr
aW5kLCBHUFJSZWcgc3RvcmFnZSkKK3sKKyNpZiBHSUdBQ0FHRV9FTkFCTEVECisgICAgaWYgKCFH
aWdhY2FnZTo6aXNFbmFibGVkKGtpbmQpKQorICAgICAgICByZXR1cm47CisKKyNpZiBDUFUoQVJN
NjRFKQorICAgIFJlZ2lzdGVySUQgdGVtcFJlZyA9IEludmFsaWRHUFJSZWc7CisgICAgSnVtcCBz
a2lwOworICAgIGlmIChraW5kID09IEdpZ2FjYWdlOjpQcmltaXRpdmUpIHsKKyAgICAgICAgc2tp
cCA9IGJyYW5jaFB0cihFcXVhbCwgc3RvcmFnZSwgVHJ1c3RlZEltbVB0cihKU0FycmF5QnVmZmVy
Vmlldzo6bnVsbFZlY3RvclB0cigpKSk7CisgICAgICAgIHRlbXBSZWcgPSBnZXRDYWNoZWRNZW1v
cnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgbW92ZShzdG9yYWdlLCB0
ZW1wUmVnKTsKKyAgICAgICAgLy8gRmxpcCB0aGUgcmVnaXN0ZXJzIHNpbmNlIGJpdEZpZWxkSW5z
ZXJ0IG9ubHkgaW5zZXJ0cyBpbnRvIHRoZSBsb3cgYml0cy4KKyAgICAgICAgc3RkOjpzd2FwKHN0
b3JhZ2UsIHRlbXBSZWcpOworICAgIH0KKyNlbmRpZgorICAgIGFuZFB0cihUcnVzdGVkSW1tUHRy
KEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwgc3RvcmFnZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW1Q
dHIoR2lnYWNhZ2U6OmJhc2VQdHIoa2luZCkpLCBzdG9yYWdlKTsKKyNpZiBDUFUoQVJNNjRFKQor
ICAgIGlmIChraW5kID09IEdpZ2FjYWdlOjpQcmltaXRpdmUpCisgICAgICAgIGJpdEZpZWxkSW5z
ZXJ0NjQoc3RvcmFnZSwgMCwgNjQgLSBudW1iZXJPZlBBQ0JpdHMsIHRlbXBSZWcpOworICAgIGlm
IChza2lwLmlzU2V0KCkpCisgICAgICAgIHNraXAubGluayh0aGlzKTsKKyNlbmRpZgorCisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShraW5kKTsKKyAgICBVTlVTRURfUEFSQU0oc3RvcmFnZSk7Cisj
ZW5kaWYKK30KKworLy8gbGVuZ3RoIG1heSBiZSB0aGUgc2FtZSByZWdpc3RlciBhcyBzY3JhdGNo
Lgordm9pZCBBc3NlbWJseUhlbHBlcnM6OmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNh
Z2U6OktpbmQga2luZCwgR1BSUmVnIHN0b3JhZ2UsIEdQUlJlZyBsZW5ndGgsIEdQUlJlZyBzY3Jh
dGNoLCBib29sIHZhbGlkYXRlQXV0aCkKK3sKKyNpZiBHSUdBQ0FHRV9FTkFCTEVECisgICAgaWYg
KEdpZ2FjYWdlOjppc0VuYWJsZWQoa2luZCkpIHsKKyAgICAgICAgaWYgKGtpbmQgIT0gR2lnYWNh
Z2U6OlByaW1pdGl2ZSB8fCBHaWdhY2FnZTo6ZGlzYWJsaW5nUHJpbWl0aXZlR2lnYWNhZ2VJc0Zv
cmJpZGRlbigpKQorICAgICAgICAgICAgY2FnZVdpdGhvdXRVbnRhZ2dpbmcoa2luZCwgc3RvcmFn
ZSk7CisgICAgICAgIGVsc2UgeworI2lmIENQVShBUk02NEUpCisgICAgICAgICAgICBpZiAobGVu
Z3RoID09IHNjcmF0Y2gpCisgICAgICAgICAgICAgICAgc2NyYXRjaCA9IGdldENhY2hlZE1lbW9y
eVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworI2VuZGlmCisgICAgICAgICAgICBKdW1w
TGlzdCBkb25lOworI2lmIENQVShBUk02NEUpCisgICAgICAgICAgICBkb25lLmFwcGVuZChicmFu
Y2hQdHIoRXF1YWwsIHN0b3JhZ2UsIFRydXN0ZWRJbW1QdHIoSlNBcnJheUJ1ZmZlclZpZXc6Om51
bGxWZWN0b3JQdHIoKSkpKTsKKyNlbmRpZgorICAgICAgICAgICAgZG9uZS5hcHBlbmQoYnJhbmNo
VGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKCZHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2
ZUdpZ2FjYWdlUmVxdWVzdGVkKSkpOworCisgICAgICAgICAgICBsb2FkUHRyKEdpZ2FjYWdlOjph
ZGRyZXNzT2ZCYXNlUHRyKGtpbmQpLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5k
KGJyYW5jaFRlc3Q2NChaZXJvLCBzY3JhdGNoKSk7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAg
ICAgIEdQUlJlZyB0ZW1wUmVnID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxp
ZGF0ZSgpOworICAgICAgICAgICAgbW92ZShzdG9yYWdlLCB0ZW1wUmVnKTsKKyAgICAgICAgICAg
IEFTU0VSVChMb2dpY2FsSW1tZWRpYXRlOjpjcmVhdGU2NChHaWdhY2FnZTo6bWFzayhraW5kKSku
aXNWYWxpZCgpKTsKKyAgICAgICAgICAgIGFuZFB0cihUcnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjpt
YXNrKGtpbmQpKSwgdGVtcFJlZyk7CisgICAgICAgICAgICBhZGRQdHIoc2NyYXRjaCwgdGVtcFJl
Zyk7CisgICAgICAgICAgICBiaXRGaWVsZEluc2VydDY0KHRlbXBSZWcsIDAsIDY0IC0gbnVtYmVy
T2ZQQUNCaXRzLCBzdG9yYWdlKTsKKyNlbHNlCisgICAgICAgICAgICBhbmRQdHIoVHJ1c3RlZElt
bVB0cihHaWdhY2FnZTo6bWFzayhraW5kKSksIHN0b3JhZ2UpOworICAgICAgICAgICAgYWRkUHRy
KHNjcmF0Y2gsIHN0b3JhZ2UpOworI2VuZGlmIC8vIENQVShBUk02NEUpCisgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworI2lmIENQVShBUk02
NEUpCisgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSkKKyAgICAgICAgdW50YWdB
cnJheVB0cihsZW5ndGgsIHN0b3JhZ2UsIHZhbGlkYXRlQXV0aCwgc2NyYXRjaCk7CisjZW5kaWYK
KyAgICBVTlVTRURfUEFSQU0odmFsaWRhdGVBdXRoKTsKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7
CisgICAgVU5VU0VEX1BBUkFNKHN0b3JhZ2UpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwor
ICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyNjUxNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMyLDc2ICsxNzMy
LDkgQEAgcHVibGljOgogICAgICAgICBvay5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIHZvaWQg
Y2FnZVdpdGhvdXRVbnRhZ2dpbmcoR2lnYWNhZ2U6OktpbmQga2luZCwgR1BSUmVnIHN0b3JhZ2Up
Ci0gICAgewotI2lmIEdJR0FDQUdFX0VOQUJMRUQKLSAgICAgICAgaWYgKCFHaWdhY2FnZTo6aXNF
bmFibGVkKGtpbmQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAg
ICAgICAgUmVnaXN0ZXJJRCB0ZW1wUmVnID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKGtp
bmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSkgewotICAgICAgICAgICAgdGVtcFJlZyA9IGdldENh
Y2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgbW92
ZShzdG9yYWdlLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIC8vIEZsaXAgdGhlIHJlZ2lzdGVycyBz
aW5jZSBiaXRGaWVsZEluc2VydCBvbmx5IGluc2VydHMgaW50byB0aGUgbG93IGJpdHMuCi0gICAg
ICAgICAgICBzdGQ6OnN3YXAoc3RvcmFnZSwgdGVtcFJlZyk7Ci0gICAgICAgIH0KLSNlbmRpZgot
ICAgICAgICBhbmRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6bWFzayhraW5kKSksIHN0b3Jh
Z2UpOwotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6YmFzZVB0cihraW5k
KSksIHN0b3JhZ2UpOwotI2lmIENQVShBUk02NEUpCi0gICAgICAgIGlmIChraW5kID09IEdpZ2Fj
YWdlOjpQcmltaXRpdmUpCi0gICAgICAgICAgICBiaXRGaWVsZEluc2VydDY0KHN0b3JhZ2UsIDAs
IDY0IC0gbnVtYmVyT2ZQQUNCaXRzLCB0ZW1wUmVnKTsKLSNlbmRpZgotCi0jZWxzZQotICAgICAg
ICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKLSNl
bmRpZgotICAgIH0KLQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2FnZVdpdGhvdXRVbnRh
Z2dpbmcoR2lnYWNhZ2U6OktpbmQsIEdQUlJlZyBzdG9yYWdlKTsKICAgICAvLyBsZW5ndGggbWF5
IGJlIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNjcmF0Y2guCi0gICAgdm9pZCBjYWdlQ29uZGl0aW9u
YWxseShHaWdhY2FnZTo6S2luZCBraW5kLCBHUFJSZWcgc3RvcmFnZSwgR1BSUmVnIGxlbmd0aCwg
R1BSUmVnIHNjcmF0Y2gpCi0gICAgewotI2lmIEdJR0FDQUdFX0VOQUJMRUQKLSAgICAgICAgaWYg
KEdpZ2FjYWdlOjppc0VuYWJsZWQoa2luZCkpIHsKLSAgICAgICAgICAgIGlmIChraW5kICE9IEdp
Z2FjYWdlOjpQcmltaXRpdmUgfHwgR2lnYWNhZ2U6OmRpc2FibGluZ1ByaW1pdGl2ZUdpZ2FjYWdl
SXNGb3JiaWRkZW4oKSkKLSAgICAgICAgICAgICAgICBjYWdlV2l0aG91dFVudGFnZ2luZyhraW5k
LCBzdG9yYWdlKTsKLSAgICAgICAgICAgIGVsc2UgewotI2lmIENQVShBUk02NEUpCi0gICAgICAg
ICAgICAgICAgaWYgKGxlbmd0aCA9PSBzY3JhdGNoKQotICAgICAgICAgICAgICAgICAgICBzY3Jh
dGNoID0gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7Ci0jZW5k
aWYKLSAgICAgICAgICAgICAgICBKdW1wTGlzdCBkb25lOwotICAgICAgICAgICAgICAgIGRvbmUu
YXBwZW5kKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVzcygmR2lnYWNhZ2U6OmRp
c2FibGVQcmltaXRpdmVHaWdhY2FnZVJlcXVlc3RlZCkpKTsKLQotICAgICAgICAgICAgICAgIGxv
YWRQdHIoR2lnYWNhZ2U6OmFkZHJlc3NPZkJhc2VQdHIoa2luZCksIHNjcmF0Y2gpOwotICAgICAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCBzY3JhdGNoKSk7Ci0jaWYg
Q1BVKEFSTTY0RSkKLSAgICAgICAgICAgICAgICBHUFJSZWcgdGVtcFJlZyA9IGdldENhY2hlZERh
dGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKLSAgICAgICAgICAgICAgICBtb3ZlKHN0
b3JhZ2UsIHRlbXBSZWcpOwotICAgICAgICAgICAgICAgIEFTU0VSVChMb2dpY2FsSW1tZWRpYXRl
OjpjcmVhdGU2NChHaWdhY2FnZTo6bWFzayhraW5kKSkuaXNWYWxpZCgpKTsKLSAgICAgICAgICAg
ICAgICBhbmRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6bWFzayhraW5kKSksIHRlbXBSZWcp
OwotICAgICAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoLCB0ZW1wUmVnKTsKLSAgICAgICAgICAg
ICAgICBiaXRGaWVsZEluc2VydDY0KHRlbXBSZWcsIDAsIDY0IC0gbnVtYmVyT2ZQQUNCaXRzLCBz
dG9yYWdlKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIoR2ln
YWNhZ2U6Om1hc2soa2luZCkpLCBzdG9yYWdlKTsKLSAgICAgICAgICAgICAgICBhZGRQdHIoc2Ny
YXRjaCwgc3RvcmFnZSk7Ci0jZW5kaWYgLy8gQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotCi0jaWYg
Q1BVKEFSTTY0RSkKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSkKLSAg
ICAgICAgICAgIHVudGFnQXJyYXlQdHIobGVuZ3RoLCBzdG9yYWdlKTsKLSNlbmRpZgotICAgICAg
ICBVTlVTRURfUEFSQU0oa2luZCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
KTsKLSAgICB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjYWdlQ29uZGl0aW9uYWxseUFu
ZFVudGFnKEdpZ2FjYWdlOjpLaW5kLCBHUFJSZWcgc3RvcmFnZSwgR1BSUmVnIGxlbmd0aCwgR1BS
UmVnIHNjcmF0Y2gsIGJvb2wgdmFsaWRhdGVBdXRoID0gdHJ1ZSk7CiAKICAgICB2b2lkIGVtaXRD
b21wdXRlQnV0dGVyZmx5SW5kZXhpbmdNYXNrKEdQUlJlZyB2ZWN0b3JMZW5ndGhHUFIsIEdQUlJl
ZyBzY3JhdGNoR1BSLCBHUFJSZWcgcmVzdWx0R1BSKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNjUx
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRJbnRUeXBlZEFycmF5UHV0QgogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRv
IGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRo
IGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCiAgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gp
OwotICAgIGNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNo
LCBsYXRlU2NyYXRjaDIsIGxhdGVTY3JhdGNoMik7CisgICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRV
bnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRl
U2NyYXRjaDIsIGZhbHNlKTsKICAgICAKICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CiAgICAg
ICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKQEAgLTE3MTksNyArMTcxOSw3IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHUKICAgICAvLyBXZSB3b3Vs
ZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0
IHRoZSBzbG93CiAgICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVk
LgogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZW
ZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6
UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIpOworICAg
IGNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0
Y2gsIGxhdGVTY3JhdGNoMiwgbGF0ZVNjcmF0Y2gyLCBmYWxzZSk7CiAgICAgCiAgICAgc3dpdGNo
IChlbGVtZW50U2l6ZSh0eXBlKSkgewogICAgIGNhc2UgNDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjY1
MTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTU0LDcgKzk1NCw3IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6
OnJlc3RvcmVXZWJBc3NlbWJseUcKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9y
eVNpemUoKSksIHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlcik7CiAgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogCi0gICAgICAgICAgICBqaXQuY2Fn
ZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVn
cy0+c2l6ZVJlZ2lzdGVyLCBzY3JhdGNoT3JTaXplKTsKKyAgICAgICAgICAgIGppdC5jYWdlQ29u
ZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5l
ZFJlZ3MtPnNpemVSZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7CiAgICAgICAgIH0pOwogCiAgICAg
ICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAoKSwgaW5zdGFuY2UpOwpA
QCAtMjMwMCw3ICsyMzAwLDcgQEAgYXV0byBBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KHVucwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0Nv
bnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlu
bmVkUmVncy5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KICAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9pZCou
CiAKLSAgICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZl
LCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7Cisg
ICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0
aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7
CiAgICAgICAgIH0pOwogCiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGRvQ29udGV4dFN3aXRjaCwg
cGF0Y2hwb2ludCwgVG1wKCksIG5ld0NvbnRleHRJbnN0YW5jZSwgaW5zdGFuY2VWYWx1ZSgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDI2NTE0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgwLDcgKzU4MCw3IEBAIHZv
aWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2wKICAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlcik7CiAg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdw
cigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogCi0g
ICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFz
ZU1lbW9yeSwgcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyLCBzY3JhdGNoT3JTaXplKTsKKyAgICAg
ICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUs
IGJhc2VNZW1vcnksIHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7CiAg
ICAgICAgIH0pOwogICAgIH0KIH0KQEAgLTE4NTQsNyArMTg1NCw3IEBAIGF1dG8gQjNJUkdlbmVy
YXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2kKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNp
emUuCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29u
dGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOyAvLyBNZW1vcnk6OnZvaWQqLgogCi0gICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFs
bHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVncy5zaXplUmVnaXN0
ZXIsIHNjcmF0Y2hPclNpemUpOworICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5k
VW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVncy5zaXplUmVn
aXN0ZXIsIHNjcmF0Y2hPclNpemUpOwogICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dp
dGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGlu
dWF0aW9uKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmNwcAkocmV2aXNpb24gMjY1MTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKIAogICAgICAgICBqaXQubG9hZFB0cihKSVQ6
OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5
U2l6ZSgpKSwgcGlubmVkUmVncy5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KICAgICAg
ICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6VGFn
Z2VkQXJyYXlTdG9yYWdlUHRyPHZvaWQ+ICh2b2lkKikuCi0gICAgICAgIGppdC5jYWdlQ29uZGl0
aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLnNpemVS
ZWdpc3Rlciwgc2NyYXRjaE9yU2l6ZSk7CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFu
ZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3Muc2l6ZVJl
Z2lzdGVyLCBzY3JhdGNoT3JTaXplKTsKICAgICB9CiAKICAgICAvLyBUYWlsIGNhbGwgaW50byB0
aGUgY2FsbGVlIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjY1MTQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcs
NyArMjM3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZQogICAg
ICAgICB9CiAKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJl
bnRJbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsKLSAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmlt
aXRpdmUsIGJhc2VNZW1vcnksIHNjcmF0Y2hPclNpemUsIHNjcmF0Y2hPclNpemUpOworICAgICAg
ICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNl
TWVtb3J5LCBzY3JhdGNoT3JTaXplLCBzY3JhdGNoT3JTaXplKTsKICAgICB9CiAKICAgICBDQ2Fs
bEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNjUxNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4
LDcgKzM2OCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWIKICAg
ICAgICAgfQogCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1v
cnkpOwotICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
YmFzZU1lbW9yeSwgc2NyYXRjaE9yU2l6ZSwgc2NyYXRjaE9yU2l6ZSk7CisgICAgICAgIGppdC5j
YWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnks
IHNjcmF0Y2hPclNpemUsIHNjcmF0Y2hPclNpemUpOwogICAgIH0KIAogICAgIC8vIFdlIHVzZSB0
aGlzIGNhbGxlZSB0byBpbmRpY2F0ZSBob3cgdG8gdW53aW5kIHBhc3QgdGhlc2UgdHlwZXMgb2Yg
ZnJhbWVzOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424271</attachid>
            <date>2021-03-25 12:55:00 -0700</date>
            <delta_ts>2021-03-25 14:59:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>32143</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MDUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDIxLTAzLTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IHZhbGlkYXRlIHVudGFnQXJyYXlQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNDk1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjYzOTE0MzQ+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gdW50YWdBcnJheVB0ciBhbG9uZyBwYXRocyB3aGVyZSB3
ZSBkb24ndAorICAgICAgICBpbW1lZGlhdGVseSBzdG9yZS9sb2FkIGZyb20gdGhlIHJlc3VsdC4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjaGFuZ2VzIHRoZSByZW1vdmVBcnJh
eVB0clRhZyBtYWNybyBhc3NlbWJsZXIgZnVuY3Rpb24gdG8KKyAgICAgICAgdXNlIGEgYml0d2lz
ZSBhbmQgaW5zdGVhZCBvZiB4cGFjZCB0byBzdHJpcCB0aGUgdGFnLCBiZWNhdXNlIGl0J3MgZmFz
dGVyLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjp1bnRhZ0FycmF5UHRyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NEU6OnJlbW92ZUFycmF5UHRyVGFnKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0ZXN0Q2FnZVByZXNlcnZl
c1BBQ0ZhaWx1cmVCaXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dl
ckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjp1bnRh
Z0FycmF5UHRyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y2FnZWQp
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmNhZ2VXaXRob3V0VW50YWdnaW5nKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjpjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKToKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FnZVdpdGhv
dXRVbnRhZ2dpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNh
Z2VDb25kaXRpb25hbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAg
ICogd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRv
cjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRp
bmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNt
L2pzL0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFw
cGVyKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAg
ICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdyk6CisKIDIw
MjEtMDMtMjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdW1dQRV0gSlNDIGNyYXNoZXMgaWYgYSBmdW5jdGlvbiBleHBlY3RzIGEgcGFy
YW1ldGVyIGJ1dCBkb2Vzbid0IHJlY2VpdmUgYW55CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oCShyZXZpc2lv
biAyNzQ5NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjRFLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwyMSArMTA5LDUyIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9hc3NlbWJsZXIucGFjZGIodGFyZ2V0LCBsZW5ndGgpOwogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ0FycmF5UHRyKFJlZ2lzdGVySUQgbGVuZ3RoLCBSZWdp
c3RlcklEIHRhcmdldCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdBcnJheVB0cihSZWdp
c3RlcklEIGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJnZXQsIGJvb2wgdmFsaWRhdGVBdXRoLCBSZWdp
c3RlcklEIHNjcmF0Y2gpCiAgICAgeworICAgICAgICBpZiAodmFsaWRhdGVBdXRoKSB7CisgICAg
ICAgICAgICBBU1NFUlQoc2NyYXRjaCAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIG1v
dmUodGFyZ2V0LCBzY3JhdGNoKTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fYXNzZW1ibGVyLmF1
dGRiKHRhcmdldCwgbGVuZ3RoKTsKKworICAgICAgICBpZiAodmFsaWRhdGVBdXRoKSB7CisgICAg
ICAgICAgICBBU1NFUlQodGFyZ2V0ICE9IEFSTTY0UmVnaXN0ZXJzOjpzcCk7CisgICAgICAgICAg
ICBBU1NFUlQoc2NyYXRjaCAhPSBBUk02NFJlZ2lzdGVyczo6c3ApOworICAgICAgICAgICAgcmVt
b3ZlQXJyYXlQdHJUYWcoc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRvIGlzVmFsaWRQdHIgPSBi
cmFuY2g2NChFcXVhbCwgc2NyYXRjaCwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGJyZWFrcG9pbnQo
MHhjNDczKTsKKyAgICAgICAgICAgIGlzVmFsaWRQdHIubGluayh0aGlzKTsKKyAgICAgICAgfQog
ICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ0FycmF5UHRyKEFkZHJlc3MgbGVu
Z3RoLCBSZWdpc3RlcklEIHRhcmdldCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdBcnJh
eVB0cihBZGRyZXNzIGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJnZXQsIGJvb2wgdmFsaWRhdGVBdXRo
KQogICAgIHsKICAgICAgICAgYXV0byBsZW5ndGhHUFIgPSBnZXRDYWNoZWREYXRhVGVtcFJlZ2lz
dGVySURBbmRJbnZhbGlkYXRlKCk7CiAgICAgICAgIGxvYWQzMihsZW5ndGgsIGxlbmd0aEdQUik7
CisgICAgICAgIGF1dG8gc2NyYXRjaCA9IEludmFsaWRHUFJSZWc7IAorICAgICAgICBpZiAodmFs
aWRhdGVBdXRoKSB7CisgICAgICAgICAgICBzY3JhdGNoID0gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJl
Z2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAgICAgICBtb3ZlKHRhcmdldCwgc2NyYXRj
aCk7CisgICAgICAgIH0KKwogICAgICAgICBtX2Fzc2VtYmxlci5hdXRkYih0YXJnZXQsIGxlbmd0
aEdQUik7CisKKyAgICAgICAgaWYgKHZhbGlkYXRlQXV0aCkgeworICAgICAgICAgICAgQVNTRVJU
KHRhcmdldCAhPSBBUk02NFJlZ2lzdGVyczo6c3ApOworICAgICAgICAgICAgcmVtb3ZlQXJyYXlQ
dHJUYWcoc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRvIGlzVmFsaWRQdHIgPSBicmFuY2g2NChF
cXVhbCwgc2NyYXRjaCwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGJyZWFrcG9pbnQoMHhjNDczKTsK
KyAgICAgICAgICAgIGlzVmFsaWRQdHIubGluayh0aGlzKTsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCByZW1vdmVBcnJheVB0clRhZyhSZWdpc3RlcklEIHRhcmdl
dCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnhwYWNkKHRhcmdldCk7CisgICAgICAgIC8v
IElmIHdlIGNvdWxkbid0IGZpdCB0aGlzIGludG8gYSBzaW5nbGUgaW5zdHJ1Y3Rpb24sIHdlJ2Qg
YmUgYmV0dGVyCisgICAgICAgIC8vIG9mZiBlbWl0dGluZyB0d28gc2hpZnRzIHRvIG1hc2sgb2Zm
IHRoZSB0b3AgYml0cy4KKyAgICAgICAgQVNTRVJUKExvZ2ljYWxJbW1lZGlhdGU6OmNyZWF0ZTY0
KG5vblBBQ0JpdHNNYXNrKS5pc1ZhbGlkKCkpOworICAgICAgICBhbmQ2NChUcnVzdGVkSW1tUHRy
KG5vblBBQ0JpdHNNYXNrKSwgdGFyZ2V0KTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgSW52YWxpZEdQUiAgPSBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPigtMSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAkocmV2
aXNpb24gMjc0OTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFz
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NjAsNyArMjQ2MCw3IEBAIHN0YXRpYyB2b2lkIHRl
c3RDYWdlUHJlc2VydmVzUEFDRmFpbHVyZUIKICAgICBSRUxFQVNFX0FTU0VSVCghR2lnYWNhZ2U6
OmRpc2FibGluZ1ByaW1pdGl2ZUdpZ2FjYWdlSXNGb3JiaWRkZW4oKSk7CiAgICAgYXV0byBjYWdl
ID0gY29tcGlsZShbXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoaml0KTsKLSAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQ
cmltaXRpdmUsIEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBH
UFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRV
bnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICAgICAgaml0Lm1vdmUo
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CiAgICAgICAgIGppdC5yZXQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9u
IDI3NDk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2OCw3ICsxMDY4LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAgICAgICAgIGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7CiAKICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZlZlY3RvcigpKSwgc2NyYXRjaDJHUFIpOwotICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFs
bHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJp
bWl0aXZlLCBzY3JhdGNoMkdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwgZmFsc2UpOwogCiAg
ICAgICAgIGppdC5zaWduRXh0ZW5kMzJUb1B0cihwcm9wZXJ0eUdQUiwgc2NyYXRjaEdQUik7CiAg
ICAgICAgIGlmIChpc0ludCh0eXBlKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyNzQ5NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Mjc0LDcgKzUyNzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCB0MiwgdDEpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKGRhdGFWaWV3R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0
b3IoKSksIHQyKTsKLSAgICAgICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKGRhdGFWaWV3R1BSLCB0
Mik7CisgICAgICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShkYXRhVmlld0dQUiwgdDIsIGZhbHNl
KTsKIAogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQoaW5kZXhHUFIsIHQxKTsKICAg
ICAgICAgYXV0byBiYXNlSW5kZXggPSBKSVRDb21waWxlcjo6QmFzZUluZGV4KHQyLCB0MSwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzT25lKTsKQEAgLTU0NzUsNyArNTQ3NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHQyLCB0MSkpOwogCiAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoZGF0YVZpZXdHUFIsIEpTQXJyYXlCdWZmZXJW
aWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgdDIpOwotICAgICAgICBjYWdlVHlwZWRBcnJheVN0b3Jh
Z2UoZGF0YVZpZXdHUFIsIHQyKTsKKyAgICAgICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKGRhdGFW
aWV3R1BSLCB0MiwgZmFsc2UpOwogCiAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvV29yZChp
bmRleEdQUiwgdDEpOwogICAgICAgICBhdXRvIGJhc2VJbmRleCA9IEpJVENvbXBpbGVyOjpCYXNl
SW5kZXgodDIsIHQxLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI3
NDk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NDgxLDEyICs3NDgxLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDb25zdGFudFN0b3IKICAgICBzdG9yYWdlUmVzdWx0KHN0b3JhZ2VHUFIsIG5v
ZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjYWdlVHlwZWRBcnJheVN0b3JhZ2UoR1BS
UmVnIGJhc2VSZWcsIEdQUlJlZyBzdG9yYWdlUmVnKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2Fn
ZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgc3RvcmFnZVJlZywgYm9v
bCB2YWxpZGF0ZUF1dGgpCiB7CiAgICAgYXV0byB1bnRhZ0FycmF5UHRyID0gWyZdKCkgewogI2lm
IENQVShBUk02NEUpCi0gICAgICAgIG1faml0LnVudGFnQXJyYXlQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBz
dG9yYWdlUmVnKTsKKyAgICAgICAgbV9qaXQudW50YWdBcnJheVB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHN0
b3JhZ2VSZWcsIHZhbGlkYXRlQXV0aCk7CiAjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0odmFs
aWRhdGVBdXRoKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGJhc2VSZWcpOwogICAgICAgICBVTlVT
RURfUEFSQU0oc3RvcmFnZVJlZyk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDI3NDk0NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTY4Myw3ICsxNjgzLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGJvb2wgc3RyaWN0Pgog
ICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50MzJJbnRlcm5hbChFZGdlLCBEYXRhRm9ybWF0JiBy
ZXR1cm5Gb3JtYXQpOwogICAgIAotICAgIHZvaWQgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJl
ZywgR1BSUmVnKTsKKyAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQUlJl
ZywgYm9vbCB2YWxpZGF0ZUF1dGggPSB0cnVlKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExv
Y2FsKAogICAgICAgICBPcGVyYW5kIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGlu
ZVJlZywgRGF0YUZvcm1hdCBmb3JtYXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNzQ5NDYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
Mzg3LDkgKzE2Mzg3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogYXV0
aGVudGljYXRlID0gbV9vdXQucGF0Y2hwb2ludChwb2ludGVyVHlwZSgpKTsKICAgICAgICAgYXV0
aGVudGljYXRlLT5hcHBlbmRTb21lUmVnaXN0ZXIocHRyKTsKICAgICAgICAgYXV0aGVudGljYXRl
LT5hcHBlbmQoc2l6ZSwgQjM6OlZhbHVlUmVwKEIzOjpWYWx1ZVJlcDo6U29tZUxhdGVSZWdpc3Rl
cikpOworICAgICAgICBhdXRoZW50aWNhdGUtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAg
ICAgICAgIGF1dGhlbnRpY2F0ZS0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBq
aXQubW92ZShwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7Ci0gICAgICAgICAgICBq
aXQudW50YWdBcnJheVB0cihwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIoKSk7CisgICAg
ICAgICAgICBqaXQudW50YWdBcnJheVB0cihwYXJhbXNbMl0uZ3ByKCksIHBhcmFtc1swXS5ncHIo
KSwgdHJ1ZSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1
cm4gYXV0aGVudGljYXRlOwogI2Vsc2UKQEAgLTE2NDQzLDYgKzE2NDQ0LDExIEBAIHByaXZhdGU6
CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgbWFza2VkID0gbV9vdXQuYml0QW5kKHB0ciwgbWFz
ayk7CiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5hZGQobWFza2VkLCBiYXNlUHRyKTsK
KyNpZiBDUFUoQVJNNjRFKQorICAgICAgICByZXN1bHQgPSBtX291dC5zZWxlY3QoCisgICAgICAg
ICAgICBtX291dC5lcXVhbChwdHIsIG1fb3V0LmNvbnN0SW50UHRyKEpTQXJyYXlCdWZmZXJWaWV3
OjpudWxsVmVjdG9yUHRyKCkpKSwKKyAgICAgICAgICAgIHB0ciwgcmVzdWx0KTsKKyNlbmRpZgog
CiAjaWYgQ1BVKEFSTTY0RSkKICAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2
ZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAkocmV2aXNpb24gMjc0OTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI0LDYgKzEwMjQsODUgQEAgdm9p
ZCBBc3NlbWJseUhlbHBlcnM6OnNhbml0aXplU3RhY2tJbmxpbgogICAgIHN0b3JlUHRyKHNjcmF0
Y2gsIHZtLmFkZHJlc3NPZkxhc3RTdGFja1RvcCgpKTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBl
cnM6OmNhZ2VXaXRob3V0VW50YWdnaW5nKEdpZ2FjYWdlOjpLaW5kIGtpbmQsIEdQUlJlZyBzdG9y
YWdlKQoreworI2lmIEdJR0FDQUdFX0VOQUJMRUQKKyAgICBpZiAoIUdpZ2FjYWdlOjppc0VuYWJs
ZWQoa2luZCkpCisgICAgICAgIHJldHVybjsKKworI2lmIENQVShBUk02NEUpCisgICAgUmVnaXN0
ZXJJRCB0ZW1wUmVnID0gSW52YWxpZEdQUlJlZzsKKyAgICBKdW1wIHNraXA7CisgICAgaWYgKGtp
bmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSkgeworICAgICAgICBza2lwID0gYnJhbmNoUHRyKEVx
dWFsLCBzdG9yYWdlLCBUcnVzdGVkSW1tUHRyKEpTQXJyYXlCdWZmZXJWaWV3OjpudWxsVmVjdG9y
UHRyKCkpKTsKKyAgICAgICAgdGVtcFJlZyA9IGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklE
QW5kSW52YWxpZGF0ZSgpOworICAgICAgICBtb3ZlKHN0b3JhZ2UsIHRlbXBSZWcpOworICAgICAg
ICAvLyBGbGlwIHRoZSByZWdpc3RlcnMgc2luY2UgYml0RmllbGRJbnNlcnQgb25seSBpbnNlcnRz
IGludG8gdGhlIGxvdyBiaXRzLgorICAgICAgICBzdGQ6OnN3YXAoc3RvcmFnZSwgdGVtcFJlZyk7
CisgICAgfQorI2VuZGlmCisgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIoR2lnYWNhZ2U6Om1hc2so
a2luZCkpLCBzdG9yYWdlKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6YmFz
ZVB0cihraW5kKSksIHN0b3JhZ2UpOworI2lmIENQVShBUk02NEUpCisgICAgaWYgKGtpbmQgPT0g
R2lnYWNhZ2U6OlByaW1pdGl2ZSkKKyAgICAgICAgYml0RmllbGRJbnNlcnQ2NChzdG9yYWdlLCAw
LCA2NCAtIG51bWJlck9mUEFDQml0cywgdGVtcFJlZyk7CisgICAgaWYgKHNraXAuaXNTZXQoKSkK
KyAgICAgICAgc2tpcC5saW5rKHRoaXMpOworI2VuZGlmCisKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGtpbmQpOworICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKKyNlbmRpZgorfQorCisvLyBs
ZW5ndGggbWF5IGJlIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNjcmF0Y2guCit2b2lkIEFzc2VtYmx5
SGVscGVyczo6Y2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6S2luZCBraW5kLCBH
UFJSZWcgc3RvcmFnZSwgR1BSUmVnIGxlbmd0aCwgR1BSUmVnIHNjcmF0Y2gsIGJvb2wgdmFsaWRh
dGVBdXRoKQoreworI2lmIEdJR0FDQUdFX0VOQUJMRUQKKyAgICBpZiAoR2lnYWNhZ2U6OmlzRW5h
YmxlZChraW5kKSkgeworICAgICAgICBpZiAoa2luZCAhPSBHaWdhY2FnZTo6UHJpbWl0aXZlIHx8
IEdpZ2FjYWdlOjpkaXNhYmxpbmdQcmltaXRpdmVHaWdhY2FnZUlzRm9yYmlkZGVuKCkpCisgICAg
ICAgICAgICBjYWdlV2l0aG91dFVudGFnZ2luZyhraW5kLCBzdG9yYWdlKTsKKyAgICAgICAgZWxz
ZSB7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIGlmIChsZW5ndGggPT0gc2NyYXRjaCkK
KyAgICAgICAgICAgICAgICBzY3JhdGNoID0gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURB
bmRJbnZhbGlkYXRlKCk7CisjZW5kaWYKKyAgICAgICAgICAgIEp1bXBMaXN0IGRvbmU7CisjaWYg
Q1BVKEFSTTY0RSkKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGJyYW5jaFB0cihFcXVhbCwgc3Rv
cmFnZSwgVHJ1c3RlZEltbVB0cihKU0FycmF5QnVmZmVyVmlldzo6bnVsbFZlY3RvclB0cigpKSkp
OworI2VuZGlmCisgICAgICAgICAgICBkb25lLmFwcGVuZChicmFuY2hUZXN0OChOb25aZXJvLCBB
YnNvbHV0ZUFkZHJlc3MoJkdpZ2FjYWdlOjpkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2VSZXF1ZXN0
ZWQpKSk7CisKKyAgICAgICAgICAgIGxvYWRQdHIoR2lnYWNhZ2U6OmFkZHJlc3NPZkJhc2VQdHIo
a2luZCksIHNjcmF0Y2gpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQoYnJhbmNoVGVzdDY0KFpl
cm8sIHNjcmF0Y2gpKTsKKyNpZiBDUFUoQVJNNjRFKQorICAgICAgICAgICAgR1BSUmVnIHRlbXBS
ZWcgPSBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAg
ICAgICBtb3ZlKHN0b3JhZ2UsIHRlbXBSZWcpOworICAgICAgICAgICAgQVNTRVJUKExvZ2ljYWxJ
bW1lZGlhdGU6OmNyZWF0ZTY0KEdpZ2FjYWdlOjptYXNrKGtpbmQpKS5pc1ZhbGlkKCkpOworICAg
ICAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIoR2lnYWNhZ2U6Om1hc2soa2luZCkpLCB0ZW1w
UmVnKTsKKyAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoLCB0ZW1wUmVnKTsKKyAgICAgICAgICAg
IGJpdEZpZWxkSW5zZXJ0NjQodGVtcFJlZywgMCwgNjQgLSBudW1iZXJPZlBBQ0JpdHMsIHN0b3Jh
Z2UpOworI2Vsc2UKKyAgICAgICAgICAgIGFuZFB0cihUcnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjpt
YXNrKGtpbmQpKSwgc3RvcmFnZSk7CisgICAgICAgICAgICBhZGRQdHIoc2NyYXRjaCwgc3RvcmFn
ZSk7CisjZW5kaWYgLy8gQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgQ1BVKEFSTTY0RSkKKyAgICBpZiAoa2lu
ZCA9PSBHaWdhY2FnZTo6UHJpbWl0aXZlKQorICAgICAgICB1bnRhZ0FycmF5UHRyKGxlbmd0aCwg
c3RvcmFnZSwgdmFsaWRhdGVBdXRoLCBzY3JhdGNoKTsKKyNlbmRpZgorICAgIFVOVVNFRF9QQVJB
TSh2YWxpZGF0ZUF1dGgpOworICAgIFVOVVNFRF9QQVJBTShraW5kKTsKKyAgICBVTlVTRURfUEFS
QU0oc3RvcmFnZSk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7CisgICAgVU5VU0VEX1BBUkFN
KHNjcmF0Y2gpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDI3NDk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MzEsNzYgKzE3MzEsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIG9rLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAgdm9pZCBjYWdlV2l0aG91dFVudGFn
Z2luZyhHaWdhY2FnZTo6S2luZCBraW5kLCBHUFJSZWcgc3RvcmFnZSkKLSAgICB7Ci0jaWYgR0lH
QUNBR0VfRU5BQkxFRAotICAgICAgICBpZiAoIUdpZ2FjYWdlOjppc0VuYWJsZWQoa2luZCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSNpZiBDUFUoQVJNNjRFKQotICAgICAgICBSZWdpc3RlcklE
IHRlbXBSZWcgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBpZiAoa2luZCA9PSBHaWdhY2FnZTo6
UHJpbWl0aXZlKSB7Ci0gICAgICAgICAgICB0ZW1wUmVnID0gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJl
Z2lzdGVySURBbmRJbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBtb3ZlKHN0b3JhZ2UsIHRlbXBS
ZWcpOwotICAgICAgICAgICAgLy8gRmxpcCB0aGUgcmVnaXN0ZXJzIHNpbmNlIGJpdEZpZWxkSW5z
ZXJ0IG9ubHkgaW5zZXJ0cyBpbnRvIHRoZSBsb3cgYml0cy4KLSAgICAgICAgICAgIHN0ZDo6c3dh
cChzdG9yYWdlLCB0ZW1wUmVnKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGFuZFB0cihU
cnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwgc3RvcmFnZSk7Ci0gICAgICAgIGFk
ZFB0cihUcnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjpiYXNlUHRyKGtpbmQpKSwgc3RvcmFnZSk7Ci0j
aWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSkK
LSAgICAgICAgICAgIGJpdEZpZWxkSW5zZXJ0NjQoc3RvcmFnZSwgMCwgNjQgLSBudW1iZXJPZlBB
Q0JpdHMsIHRlbXBSZWcpOwotI2VuZGlmCi0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShr
aW5kKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN0b3JhZ2UpOwotI2VuZGlmCi0gICAgfQotCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjYWdlV2l0aG91dFVudGFnZ2luZyhHaWdhY2FnZTo6
S2luZCwgR1BSUmVnIHN0b3JhZ2UpOwogICAgIC8vIGxlbmd0aCBtYXkgYmUgdGhlIHNhbWUgcmVn
aXN0ZXIgYXMgc2NyYXRjaC4KLSAgICB2b2lkIGNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpL
aW5kIGtpbmQsIEdQUlJlZyBzdG9yYWdlLCBHUFJSZWcgbGVuZ3RoLCBHUFJSZWcgc2NyYXRjaCkK
LSAgICB7Ci0jaWYgR0lHQUNBR0VfRU5BQkxFRAotICAgICAgICBpZiAoR2lnYWNhZ2U6OmlzRW5h
YmxlZChraW5kKSkgewotICAgICAgICAgICAgaWYgKGtpbmQgIT0gR2lnYWNhZ2U6OlByaW1pdGl2
ZSB8fCBHaWdhY2FnZTo6ZGlzYWJsaW5nUHJpbWl0aXZlR2lnYWNhZ2VJc0ZvcmJpZGRlbigpKQot
ICAgICAgICAgICAgICAgIGNhZ2VXaXRob3V0VW50YWdnaW5nKGtpbmQsIHN0b3JhZ2UpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgICAgICBpZiAobGVu
Z3RoID09IHNjcmF0Y2gpCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBnZXRDYWNoZWRN
ZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKLSNlbmRpZgotICAgICAgICAgICAg
ICAgIEp1bXBMaXN0IGRvbmU7Ci0gICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQoYnJhbmNoVGVz
dDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKCZHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2ZUdp
Z2FjYWdlUmVxdWVzdGVkKSkpOwotCi0gICAgICAgICAgICAgICAgbG9hZFB0cihHaWdhY2FnZTo6
YWRkcmVzc09mQmFzZVB0cihraW5kKSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgZG9uZS5h
cHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHNjcmF0Y2gpKTsKLSNpZiBDUFUoQVJNNjRFKQotICAg
ICAgICAgICAgICAgIEdQUlJlZyB0ZW1wUmVnID0gZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklE
QW5kSW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgICAgIG1vdmUoc3RvcmFnZSwgdGVtcFJlZyk7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKExvZ2ljYWxJbW1lZGlhdGU6OmNyZWF0ZTY0KEdpZ2Fj
YWdlOjptYXNrKGtpbmQpKS5pc1ZhbGlkKCkpOwotICAgICAgICAgICAgICAgIGFuZFB0cihUcnVz
dGVkSW1tUHRyKEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAg
ICAgYWRkUHRyKHNjcmF0Y2gsIHRlbXBSZWcpOwotICAgICAgICAgICAgICAgIGJpdEZpZWxkSW5z
ZXJ0NjQodGVtcFJlZywgMCwgNjQgLSBudW1iZXJPZlBBQ0JpdHMsIHN0b3JhZ2UpOwotI2Vsc2UK
LSAgICAgICAgICAgICAgICBhbmRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6bWFzayhraW5k
KSksIHN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIGFkZFB0cihzY3JhdGNoLCBzdG9yYWdlKTsK
LSNlbmRpZiAvLyBDUFUoQVJNNjRFKQotICAgICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0KLSNpZiBDUFUoQVJNNjRFKQotICAg
ICAgICBpZiAoa2luZCA9PSBHaWdhY2FnZTo6UHJpbWl0aXZlKQotICAgICAgICAgICAgdW50YWdB
cnJheVB0cihsZW5ndGgsIHN0b3JhZ2UpOwotI2VuZGlmCi0gICAgICAgIFVOVVNFRF9QQVJBTShr
aW5kKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHN0b3JhZ2UpOwotICAgICAgICBVTlVTRURfUEFS
QU0obGVuZ3RoKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotICAgIH0KKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6
OktpbmQsIEdQUlJlZyBzdG9yYWdlLCBHUFJSZWcgbGVuZ3RoLCBHUFJSZWcgc2NyYXRjaCwgYm9v
bCB2YWxpZGF0ZUF1dGggPSB0cnVlKTsKIAogICAgIHZvaWQgZW1pdENvbXB1dGVCdXR0ZXJmbHlJ
bmRleGluZ01hc2soR1BSUmVnIHZlY3Rvckxlbmd0aEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEdQ
UlJlZyByZXN1bHRHUFIpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDI3NDk0NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODExLDcgKzE4MTEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQ
dXRCCiAgICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRf
YnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwogICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFz
ZSB0byBiZSB1bmNsb2JiZXJlZC4KICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1
ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRp
dGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMiwg
bGF0ZVNjcmF0Y2gyKTsKKyAgICBjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQ
cmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVTY3JhdGNoMiwgZmFsc2Up
OwogICAgIAogICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKICAgICAgICAgQVNTRVJUKGVsZW1l
bnRTaXplKHR5cGUpID09IDEpOwpAQCAtMTkwMCw3ICsxOTAwLDcgQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhp
cyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAv
LyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCiAgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNj
cmF0Y2gpOwotICAgIGNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVT
Y3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVTY3JhdGNoMik7CisgICAgY2FnZUNvbmRpdGlvbmFs
bHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gy
LCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKICAgICAKICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5
cGUpKSB7CiAgICAgY2FzZSA0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzQ5NDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NTksOCArOTU5LDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2Vt
Ymx5RwogICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyczsKICAgICAgICAgY2xvYmJlcnMuc2V0
KHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyKTsKICAgICAgICAgY2xvYmJlcnMuc2V0KHBp
bm5lZFJlZ3MtPmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgaWYgKCFpc0FS
TTY0KCkpCi0gICAgICAgICAgICBjbG9iYmVycy5zZXQoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKKyAgICAgICAgY2xvYmJlcnMuc2V0KFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7CiAKICAgICAgICAgYXV0byogcGF0Y2hwb2ludCA9IGFkZFBhdGNo
cG9pbnQoQjM6OlZvaWQpOwogICAgICAgICBCMzo6RWZmZWN0cyBlZmZlY3RzID0gQjM6OkVmZmVj
dHM6Om5vbmUoKTsKQEAgLTk2OCwxNyArOTY3LDE3IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OnJl
c3RvcmVXZWJBc3NlbWJseUcKICAgICAgICAgZWZmZWN0cy5yZWFkcyA9IEIzOjpIZWFwUmFuZ2U6
OnRvcCgpOwogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gZWZmZWN0czsKICAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVycyk7Ci0gICAgICAgIHBhdGNocG9pbnQtPm51bUdQ
U2NyYXRjaFJlZ2lzdGVycyA9IEdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OlByaW1pdGl2
ZSkgPyAxIDogMDsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0g
MTsKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bpbm5lZFJlZ3NdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MtPmJh
c2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hPckJvdW5kc0NoZWNr
aW5nU2l6ZSA9IEdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSkgPyBwYXJh
bXMuZ3BTY3JhdGNoKDApIDogcGlubmVkUmVncy0+Ym91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXI7
CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAKICAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3By
KCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZSgpKSwgcGlubmVk
UmVncy0+Ym91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNl
dE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKIAotICAgICAgICAgICAgaml0LmNhZ2VD
b25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3Mt
PmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyLCBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUp
OworICAgICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlBy
aW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVncy0+Ym91bmRzQ2hlY2tpbmdTaXplUmVnaXN0
ZXIsIHNjcmF0Y2gpOwogICAgICAgICB9KTsKIAogICAgICAgICBlbWl0UGF0Y2hwb2ludChibG9j
aywgcGF0Y2hwb2ludCwgVG1wKCksIGluc3RhbmNlKTsKQEAgLTMzNTgsNyArMzM1Nyw3IEBAIGF1
dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnMKICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzIxODEKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihQaW5uZWRS
ZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpCb3VuZHNDaGVja2luZykpOwog
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IEdp
Z2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSkgPyAxIDogMDsKKyAgICAgICAg
cGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKIAogICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBAIC0zMzczLDEyICszMzcyLDEy
IEBAIGF1dG8gQWlySVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdCh1bnMKICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJl
Z2lzdGVyCiAgICAgICAgICAgICAvLyAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2Mjk1MgogICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3MuYm91bmRz
Q2hlY2tpbmdTaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKLSAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUgPSBHaWdhY2FnZTo6aXNFbmFibGVk
KEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IHBpbm5lZFJlZ3Mu
Ym91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXI7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9
IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZEJvdW5kc0NoZWNraW5nU2l6ZSgpKSwgcGlubmVkUmVncy5ib3VuZHNDaGVja2luZ1NpemVSZWdp
c3Rlcik7IC8vIEJvdW5kIGNoZWNraW5nIHNpemUuCiAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQqLgogCi0gICAg
ICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1l
bW9yeSwgcGlubmVkUmVncy5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlciwgc2NyYXRjaE9yQm91
bmRzQ2hlY2tpbmdTaXplKTsKKyAgICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVu
dGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3MuYm91bmRzQ2hl
Y2tpbmdTaXplUmVnaXN0ZXIsIHNjcmF0Y2gpOwogICAgICAgICB9KTsKIAogICAgICAgICBlbWl0
UGF0Y2hwb2ludChkb0NvbnRleHRTd2l0Y2gsIHBhdGNocG9pbnQsIFRtcCgpLCBuZXdDb250ZXh0
SW5zdGFuY2UsIGluc3RhbmNlVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNzQ5NDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3OSw4ICs1NzksNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJB
c3NlbWJseUdsCiAgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJzOwogICAgICAgICBjbG9iYmVy
cy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOwogICAgICAgICBjbG9iYmVycy5z
ZXQocGlubmVkUmVncy0+Ym91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIpOwotICAgICAgICBpZiAo
IWlzQVJNNjQoKSkKLSAgICAgICAgICAgIGNsb2JiZXJzLnNldChSZWdpc3RlclNldDo6bWFjcm9T
Y3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBjbG9iYmVycy5zZXQoUmVnaXN0ZXJTZXQ6Om1h
Y3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKIAogICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBC
Mzo6Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZlY3RzOjpu
b25lKCk7CkBAIC01ODgsMTggKzU4NywxOCBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVX
ZWJBc3NlbWJseUdsCiAgICAgICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3Ao
KTsKICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CiAgICAgICAgIHBhdGNo
cG9pbnQtPmNsb2JiZXIoY2xvYmJlcnMpOwotICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0
Y2hSZWdpc3RlcnMgPSBHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8g
MSA6IDA7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAK
ICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5i
YXNlTWVtb3J5UG9pbnRlcjsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoT3JCb3VuZHNDaGVj
a2luZ1NpemUgPSBHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gcGFy
YW1zLmdwU2NyYXRjaCgwKSA6IHBpbm5lZFJlZ3MtPmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVy
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwogCiAg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdw
cigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRCb3VuZHNDaGVja2luZ1NpemUoKSksIHBpbm5l
ZFJlZ3MtPmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAKLSAgICAgICAgICAgIGppdC5jYWdl
Q29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdz
LT5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlciwgc2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXpl
KTsKKyAgICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQ
cmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3MtPmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lz
dGVyLCBzY3JhdGNoKTsKICAgICAgICAgfSk7CiAgICAgfQogfQpAQCAtMjU0NCw3ICsyNTQzLDcg
QEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zaQogICAgICAgICBwYXRj
aHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CiAg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChuZXdDb250ZXh0SW5zdGFuY2UsIFZhbHVlUmVwOjpT
b21lUmVnaXN0ZXIpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoaW5zdGFuY2VWYWx1ZSgp
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3Jh
dGNoUmVnaXN0ZXJzID0gR2lnYWNhZ2U6OmlzRW5hYmxlZChHaWdhY2FnZTo6UHJpbWl0aXZlKSA/
IDEgOiAwOworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwog
CiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAg
ICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKQEAg
LTI1NjAsMTIgKzI1NTksMTIgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3Qo
dW5zaQogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1vcmUgdGhhbiBv
bmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIKICAgICAgICAgICAgIC8vICAgc2VlOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCiAgICAgICAgICAgICBBU1NFUlQo
cGlubmVkUmVncy5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFu
Y2UpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSA9IEdp
Z2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSkgPyBwYXJhbXMuZ3BTY3JhdGNo
KDApIDogcGlubmVkUmVncy5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3RlcjsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKIAogICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkQm91bmRzQ2hlY2tpbmdTaXplKCkpLCBwaW5uZWRSZWdzLmJvdW5k
c0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCiAgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQq
LgogCi0gICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2
ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVncy5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlciwgc2Ny
YXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplKTsKKyAgICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9u
YWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3Mu
Ym91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIsIHNjcmF0Y2gpOwogICAgICAgICB9KTsKICAgICAg
ICAgZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBv
cmlnaW4oKSwgY29udGludWF0aW9uKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CaW5kaW5nLmNwcAkocmV2aXNpb24gMjc0OTQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMSArNjgs
OSBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8V2FzbUVudHJ5CiAgICAgLy8gRklY
TUUgdGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwgV2FzbTo6SW5zdGFuY2UgaGF2
ZSB0aGUgc2FtZSBwaW5uZWQgcmVnaXN0ZXJzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyOTUyCiAgICAgLy8gU2V0IHVwIHRoZSBjYWxsZWUncyBiYXNlTWVtb3J5
IHJlZ2lzdGVyIGFzIHdlbGwgYXMgdGhlIG1lbW9yeSBzaXplIHJlZ2lzdGVycy4KICAgICB7Ci0g
ICAgICAgIEdQUlJlZyBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUgPSAhR2lnYWNhZ2U6Omlz
RW5hYmxlZChHaWdhY2FnZTo6UHJpbWl0aXZlKSA/IHBpbm5lZFJlZ3MuYm91bmRzQ2hlY2tpbmdT
aXplUmVnaXN0ZXIgOiB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJz
WzFdOwotCiAgICAgICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNt
OjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRCb3VuZHNDaGVja2luZ1NpemUoKSksIHBpbm5lZFJl
Z3MuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIpOyAvLyBCb3VuZCBjaGVja2luZyBzaXplLgog
ICAgICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5
OjpUYWdnZWRBcnJheVN0b3JhZ2VQdHI8dm9pZD4gKHZvaWQqKS4KLSAgICAgICAgaml0LmNhZ2VD
b25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3Mu
Ym91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIsIHNjcmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSk7
CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRp
dmUsIGJhc2VNZW1vcnksIHBpbm5lZFJlZ3MuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIsIHdh
c21DYWxsaW5nQ29udmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQUnNbMV0pOwogICAgIH0KIAog
ICAgIC8vIFRhaWwgY2FsbCBpbnRvIHRoZSBjYWxsZWUgV2ViQXNzZW1ibHkgZnVuY3Rpb24uCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCShyZXZpc2lv
biAyNzQ5NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsOCBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJu
YWxGdW5jdGlvbj4gY3JlYXRlCiAKICAgICBpZiAoISFpbmZvLm1lbW9yeSkgewogICAgICAgICBH
UFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgICAg
IEdQUlJlZyBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUgPSB3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJzWzBdOworICAgICAgICBHUFJSZWcgc2l6ZSA9IHdhc21D
YWxsaW5nQ29udmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQUnNbMF07CisgICAgICAgIEdQUlJl
ZyBzY3JhdGNoID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1sx
XTsKIAogICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICAgICAgaml0
LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGJhc2VNZW1vcnkpOwpAQCAtMjY0LDE1ICsyNjUsMTUg
QEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZQogICAgICAgICBHUFJS
ZWcgY3VycmVudEluc3RhbmNlR1BSID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gYmFzZU1lbW9y
eSA6IHdhc21Db250ZXh0SW5zdGFuY2VHUFI7CiAgICAgICAgIGlmIChpc0FSTTY0RSgpKSB7CiAg
ICAgICAgICAgICBpZiAobW9kZSAhPSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpCi0gICAg
ICAgICAgICAgICAgc2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplID0gcGlubmVkUmVncy5ib3Vu
ZHNDaGVja2luZ1NpemVSZWdpc3RlcjsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjdXJyZW50SW5zdGFuY2VHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRP
ZkNhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZSgpKSwgc2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXpl
KTsKKyAgICAgICAgICAgICAgICBzaXplID0gcGlubmVkUmVncy5ib3VuZHNDaGVja2luZ1NpemVS
ZWdpc3RlcjsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
dXJyZW50SW5zdGFuY2VHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZEJvdW5kc0No
ZWNraW5nU2l6ZSgpKSwgc2l6ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
bW9kZSAhPSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpCiAgICAgICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwgV2FzbTo6
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkQm91bmRzQ2hlY2tpbmdTaXplKCkpLCBwaW5uZWRSZWdz
LmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfQogCiAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjdXJyZW50SW5zdGFuY2VHUFIsIFdhc206Oklu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgICAgIGpp
dC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBzY3Jh
dGNoT3JCb3VuZHNDaGVja2luZ1NpemUsIHNjcmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSk7Cisg
ICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUs
IGJhc2VNZW1vcnksIHNpemUsIHNjcmF0Y2gpOwogICAgIH0KIAogICAgIENDYWxsSGVscGVyczo6
Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAJKHJldmlzaW9uIDI3NDk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsMTIgKzM2Nywx
NCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViCiAKICAgICBpZiAo
ISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpIHsKICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkg
PSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICBHUFJSZWcgc2NyYXRjaE9y
Qm91bmRzQ2hlY2tpbmdTaXplID0gc3RhY2tMaW1pdEdQUjsKKyAgICAgICAgR1BSUmVnIHNjcmF0
Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSA9IEludmFsaWRHUFJSZWc7CiAgICAgICAgIGF1dG8gbW9k
ZSA9IGluc3RhbmNlKCktPm1lbW9yeU1vZGUoKTsKIAogICAgICAgICBpZiAoaXNBUk02NEUoKSkg
ewogICAgICAgICAgICAgaWYgKG1vZGUgIT0gV2FzbTo6TWVtb3J5TW9kZTo6U2lnbmFsaW5nKQog
ICAgICAgICAgICAgICAgIHNjcmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSA9IHBpbm5lZFJlZ3Mu
Ym91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgc2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplID0gc3RhY2tMaW1pdEdQUjsKICAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNt
OjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRCb3VuZHNDaGVja2luZ1NpemUoKSksIHNjcmF0Y2hP
ckJvdW5kc0NoZWNraW5nU2l6ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
bW9kZSAhPSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpCkBAIC0zODAsNyArMzgyLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYgogICAgICAgICB9CiAKICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhc206
Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgICAg
IGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBz
Y3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUsIHNjcmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSk7
CisgICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRp
dmUsIGJhc2VNZW1vcnksIHNjcmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSwgc2NyYXRjaEdQUik7
CiAgICAgfQogCiAgICAgLy8gV2UgdXNlIHRoaXMgY2FsbGVlIHRvIGluZGljYXRlIGhvdyB0byB1
bndpbmQgcGFzdCB0aGVzZSB0eXBlcyBvZiBmcmFtZXM6CkBAIC0zOTAsMTMgKzM5MiwxMSBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViCiAgICAgICAgIG1fanNUb1dh
c21JQ0NhbGxlZS5zZXQodm0sIHRoaXMsIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0KCksIHRoaXMpKTsKICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG1fanNUb1dhc21JQ0NhbGxlZS5nZXQoKSksIENDYWxsSGVscGVyczo6YWRkcmVz
c0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKIAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IEN1cnJlbnRseSB3ZSBqdXN0IGRvIGFuIGluZGlyZWN0IGp1bXAuIEJ1dCB3ZSBzaG91bGQgdGVh
Y2ggdGhlIE1vZHVsZQotICAgICAgICAvLyBob3cgdG8gcmVwYXRjaCB1czoKLSAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU3MAotICAgICAgICBq
aXQubG9hZFB0cihlbnRyeXBvaW50TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIpOwotICAgICAg
ICBqaXQuY2FsbChzY3JhdGNoR1BSLCBXYXNtRW50cnlQdHJUYWcpOwotICAgIH0KKyAgICAvLyBG
SVhNRTogQ3VycmVudGx5IHdlIGp1c3QgZG8gYW4gaW5kaXJlY3QganVtcC4gQnV0IHdlIHNob3Vs
ZCB0ZWFjaCB0aGUgTW9kdWxlCisgICAgLy8gaG93IHRvIHJlcGF0Y2ggdXM6CisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU3MAorICAgIGppdC5sb2Fk
UHRyKGVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7CisgICAgaml0LmNhbGwo
c2NyYXRjaEdQUiwgV2FzbUVudHJ5UHRyVGFnKTsKIAogICAgIG1hcnNoYWxsSlNSZXN1bHQoaml0
LCBzaWduYXR1cmUsIHdhc21DYWxsSW5mbywgc2F2ZWRSZXN1bHRSZWdpc3RlcnMpOwogCg==
</data>
<flag name="review"
          id="443898"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424284</attachid>
            <date>2021-03-25 14:59:59 -0700</date>
            <delta_ts>2021-03-25 22:25:45 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>31850</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc1MDUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDIxLTAzLTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IHZhbGlkYXRlIHVudGFnQXJyYXlQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNDk1MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjYzOTE0MzQ+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHZhbGlkYXRpb24gdG8gdW50YWdBcnJheVB0ciBhbG9uZyBwYXRocyB3aGVyZSB3ZSBkb24n
dAorICAgICAgICBpbW1lZGlhdGVseSBzdG9yZS9sb2FkIGZyb20gdGhlIHJlc3VsdC4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjaGFuZ2VzIHRoZSByZW1vdmVBcnJheVB0clRh
ZyBtYWNybyBhc3NlbWJsZXIgZnVuY3Rpb24gdG8KKyAgICAgICAgdXNlIGEgYml0d2lzZSBhbmQg
aW5zdGVhZCBvZiB4cGFjZCB0byBzdHJpcCB0aGUgdGFnLCBiZWNhdXNlIGl0J3MgZmFzdGVyLgor
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmg6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjRFOjp1bnRhZ0FycmF5UHRyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk02NEU6OnJlbW92ZUFycmF5UHRyVGFnKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0ZXN0Q2FnZVByZXNlcnZlc1BBQ0Zh
aWx1cmVCaXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAo
SlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2Fn
ZVR5cGVkQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1Rv
QjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjp1bnRhZ0FycmF5
UHRyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y2FnZWQpOgorICAg
ICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmNhZ2VXaXRob3V0VW50YWdnaW5nKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlI
ZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6Y2FnZVdpdGhvdXRVbnRh
Z2dpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhZ2VDb25k
aXRpb25hbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgICogd2Fz
bS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpBaXJJUkdlbmVy
YXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNt
OjpBaXJJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21C
M0lSR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cmVz
dG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL2pzL0pT
VG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVyKToK
KyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdyk6CisKIDIwMjEtMDMt
MjUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdW1dQRV0gSlNDIGNyYXNoZXMgaWYgYSBmdW5jdGlvbiBleHBlY3RzIGEgcGFyYW1ldGVy
IGJ1dCBkb2Vzbid0IHJlY2VpdmUgYW55CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjRFLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0RS5oCShyZXZpc2lvbiAyNzQ5
NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjRFLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwyMSArMTA5LDM5IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9hc3NlbWJsZXIucGFjZGIodGFyZ2V0LCBsZW5ndGgpOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCB1bnRhZ0FycmF5UHRyKFJlZ2lzdGVySUQgbGVuZ3RoLCBSZWdpc3RlcklE
IHRhcmdldCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdBcnJheVB0cihSZWdpc3RlcklE
IGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJnZXQsIGJvb2wgdmFsaWRhdGVBdXRoLCBSZWdpc3RlcklE
IHNjcmF0Y2gpCiAgICAgeworICAgICAgICBpZiAodmFsaWRhdGVBdXRoKSB7CisgICAgICAgICAg
ICBBU1NFUlQoc2NyYXRjaCAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIG1vdmUodGFy
Z2V0LCBzY3JhdGNoKTsKKyAgICAgICAgfQorCiAgICAgICAgIG1fYXNzZW1ibGVyLmF1dGRiKHRh
cmdldCwgbGVuZ3RoKTsKKworICAgICAgICBpZiAodmFsaWRhdGVBdXRoKSB7CisgICAgICAgICAg
ICBBU1NFUlQodGFyZ2V0ICE9IEFSTTY0UmVnaXN0ZXJzOjpzcCk7CisgICAgICAgICAgICBBU1NF
UlQoc2NyYXRjaCAhPSBBUk02NFJlZ2lzdGVyczo6c3ApOworICAgICAgICAgICAgcmVtb3ZlQXJy
YXlQdHJUYWcoc2NyYXRjaCk7CisgICAgICAgICAgICBhdXRvIGlzVmFsaWRQdHIgPSBicmFuY2g2
NChFcXVhbCwgc2NyYXRjaCwgdGFyZ2V0KTsKKyAgICAgICAgICAgIGJyZWFrcG9pbnQoMHhjNDcz
KTsKKyAgICAgICAgICAgIGlzVmFsaWRQdHIubGluayh0aGlzKTsKKyAgICAgICAgfQogICAgIH0K
IAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bnRhZ0FycmF5UHRyKEFkZHJlc3MgbGVuZ3RoLCBS
ZWdpc3RlcklEIHRhcmdldCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdW50YWdBcnJheVB0cihB
ZGRyZXNzIGxlbmd0aCwgUmVnaXN0ZXJJRCB0YXJnZXQsIGJvb2wgdmFsaWRhdGVBdXRoKQogICAg
IHsKICAgICAgICAgYXV0byBsZW5ndGhHUFIgPSBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURB
bmRJbnZhbGlkYXRlKCk7CiAgICAgICAgIGxvYWQzMihsZW5ndGgsIGxlbmd0aEdQUik7Ci0gICAg
ICAgIG1fYXNzZW1ibGVyLmF1dGRiKHRhcmdldCwgbGVuZ3RoR1BSKTsKKyAgICAgICAgYXV0byBz
Y3JhdGNoID0gdmFsaWRhdGVBdXRoID8gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJ
bnZhbGlkYXRlKCkgOiBJbnZhbGlkR1BSUmVnOyAKKyAgICAgICAgdW50YWdBcnJheVB0cihsZW5n
dGhHUFIsIHRhcmdldCwgdmFsaWRhdGVBdXRoLCBzY3JhdGNoKTsKICAgICB9CiAKICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgcmVtb3ZlQXJyYXlQdHJUYWcoUmVnaXN0ZXJJRCB0YXJnZXQpCiAgICAg
ewotICAgICAgICBtX2Fzc2VtYmxlci54cGFjZCh0YXJnZXQpOworICAgICAgICAvLyBJZiB3ZSBj
b3VsZG4ndCBmaXQgdGhpcyBpbnRvIGEgc2luZ2xlIGluc3RydWN0aW9uLCB3ZSdkIGJlIGJldHRl
cgorICAgICAgICAvLyBvZmYgZW1pdHRpbmcgdHdvIHNoaWZ0cyB0byBtYXNrIG9mZiB0aGUgdG9w
IGJpdHMuCisgICAgICAgIEFTU0VSVChMb2dpY2FsSW1tZWRpYXRlOjpjcmVhdGU2NChub25QQUNC
aXRzTWFzaykuaXNWYWxpZCgpKTsKKyAgICAgICAgYW5kNjQoVHJ1c3RlZEltbVB0cihub25QQUNC
aXRzTWFzayksIHRhcmdldCk7CiAgICAgfQogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl
cklEIEludmFsaWRHUFIgID0gc3RhdGljX2Nhc3Q8UmVnaXN0ZXJJRD4oLTEpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHJldmlzaW9uIDI3
NDk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDYwLDcgKzI0NjAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0Q2FnZVBy
ZXNlcnZlc1BBQ0ZhaWx1cmVCCiAgICAgUkVMRUFTRV9BU1NFUlQoIUdpZ2FjYWdlOjpkaXNhYmxp
bmdQcmltaXRpdmVHaWdhY2FnZUlzRm9yYmlkZGVuKCkpOwogICAgIGF1dG8gY2FnZSA9IGNvbXBp
bGUoW10gKENDYWxsSGVscGVycyYgaml0KSB7CiAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7Ci0gICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZl
LCBHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKKyAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2ln
YWNhZ2U6OlByaW1pdGl2ZSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CiAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZShqaXQpOwogICAgICAgICBqaXQucmV0KCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNzQ5NDYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNjgsNyArMTA2OCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVX
aXRoR3VhcmQoCiAgICAgICAgICAgICBqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0
cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOwogCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0
b3IoKSksIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2Fj
YWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwg
c2NyYXRjaDJHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIGZhbHNlKTsKIAogICAgICAgICBq
aXQuc2lnbkV4dGVuZDMyVG9QdHIocHJvcGVydHlHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBp
ZiAoaXNJbnQodHlwZSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjc0OTQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTI3NCw3ICs1Mjc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgdDIsIHQxKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRk
cmVzcyhkYXRhVmlld0dQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCB0
Mik7Ci0gICAgICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShkYXRhVmlld0dQUiwgdDIpOworICAg
ICAgICBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoZGF0YVZpZXdHUFIsIHQyLCBmYWxzZSk7CiAKICAg
ICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9Xb3JkKGluZGV4R1BSLCB0MSk7CiAgICAgICAgIGF1
dG8gYmFzZUluZGV4ID0gSklUQ29tcGlsZXI6OkJhc2VJbmRleCh0MiwgdDEsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc09uZSk7CkBAIC01NDc1LDcgKzU0NzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NChNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0MiwgdDEpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKGRhdGFWaWV3R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZWZWN0b3IoKSksIHQyKTsKLSAgICAgICAgY2FnZVR5cGVkQXJyYXlTdG9yYWdlKGRhdGFW
aWV3R1BSLCB0Mik7CisgICAgICAgIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShkYXRhVmlld0dQUiwg
dDIsIGZhbHNlKTsKIAogICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1dvcmQoaW5kZXhHUFIs
IHQxKTsKICAgICAgICAgYXV0byBiYXNlSW5kZXggPSBKSVRDb21waWxlcjo6QmFzZUluZGV4KHQy
LCB0MSwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyNzQ5NDYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQ4MSwxMiArNzQ4MSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ29uc3RhbnRTdG9yCiAgICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlR1BSLCBub2RlKTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FnZVR5cGVkQXJyYXlTdG9yYWdlKEdQUlJlZyBiYXNl
UmVnLCBHUFJSZWcgc3RvcmFnZVJlZykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhZ2VUeXBlZEFy
cmF5U3RvcmFnZShHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHN0b3JhZ2VSZWcsIGJvb2wgdmFsaWRh
dGVBdXRoKQogewogICAgIGF1dG8gdW50YWdBcnJheVB0ciA9IFsmXSgpIHsKICNpZiBDUFUoQVJN
NjRFKQotICAgICAgICBtX2ppdC51bnRhZ0FycmF5UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSwgc3RvcmFnZVJl
Zyk7CisgICAgICAgIG1faml0LnVudGFnQXJyYXlQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpLCBzdG9yYWdlUmVn
LCB2YWxpZGF0ZUF1dGgpOwogI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbGlkYXRlQXV0
aCk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShiYXNlUmVnKTsKICAgICAgICAgVU5VU0VEX1BBUkFN
KHN0b3JhZ2VSZWcpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyNzQ5NDYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE2ODMs
NyArMTY4Myw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJS
ZWcgZmlsbFNwZWN1bGF0ZUludDMySW50ZXJuYWwoRWRnZSwgRGF0YUZvcm1hdCYgcmV0dXJuRm9y
bWF0KTsKICAgICAKLSAgICB2b2lkIGNhZ2VUeXBlZEFycmF5U3RvcmFnZShHUFJSZWcsIEdQUlJl
Zyk7CisgICAgdm9pZCBjYWdlVHlwZWRBcnJheVN0b3JhZ2UoR1BSUmVnLCBHUFJSZWcsIGJvb2wg
dmFsaWRhdGVBdXRoID0gdHJ1ZSk7CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbCgKICAg
ICAgICAgT3BlcmFuZCBieXRlY29kZVJlZywgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERh
dGFGb3JtYXQgZm9ybWF0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjc0OTQ2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjM4Nyw5ICsx
NjM4NywxMCBAQCBwcml2YXRlOgogICAgICAgICBQYXRjaHBvaW50VmFsdWUqIGF1dGhlbnRpY2F0
ZSA9IG1fb3V0LnBhdGNocG9pbnQocG9pbnRlclR5cGUoKSk7CiAgICAgICAgIGF1dGhlbnRpY2F0
ZS0+YXBwZW5kU29tZVJlZ2lzdGVyKHB0cik7CiAgICAgICAgIGF1dGhlbnRpY2F0ZS0+YXBwZW5k
KHNpemUsIEIzOjpWYWx1ZVJlcChCMzo6VmFsdWVSZXA6OlNvbWVMYXRlUmVnaXN0ZXIpKTsKKyAg
ICAgICAgYXV0aGVudGljYXRlLT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogICAgICAgICBh
dXRoZW50aWNhdGUtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgaml0Lm1vdmUo
cGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOwotICAgICAgICAgICAgaml0LnVudGFn
QXJyYXlQdHIocGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICAgICAg
aml0LnVudGFnQXJyYXlQdHIocGFyYW1zWzJdLmdwcigpLCBwYXJhbXNbMF0uZ3ByKCksIHRydWUs
IHBhcmFtcy5ncFNjcmF0Y2goMCkpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIGF1dGhl
bnRpY2F0ZTsKICNlbHNlCkBAIC0xNjQ0Myw2ICsxNjQ0NCwxMSBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgTFZhbHVlIG1hc2tlZCA9IG1fb3V0LmJpdEFuZChwdHIsIG1hc2spOwogICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYWRkKG1hc2tlZCwgYmFzZVB0cik7CisjaWYgQ1BV
KEFSTTY0RSkKKyAgICAgICAgcmVzdWx0ID0gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgbV9v
dXQuZXF1YWwocHRyLCBtX291dC5jb25zdEludFB0cihKU0FycmF5QnVmZmVyVmlldzo6bnVsbFZl
Y3RvclB0cigpKSksCisgICAgICAgICAgICBwdHIsIHJlc3VsdCk7CisjZW5kaWYKIAogI2lmIENQ
VShBUk02NEUpCiAgICAgICAgIGlmIChraW5kID09IEdpZ2FjYWdlOjpQcmltaXRpdmUpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJl
dmlzaW9uIDI3NDk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyNCw2ICsxMDI0LDg1IEBAIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjpzYW5pdGl6ZVN0YWNrSW5saW4KICAgICBzdG9yZVB0cihzY3JhdGNoLCB2bS5h
ZGRyZXNzT2ZMYXN0U3RhY2tUb3AoKSk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjYWdl
V2l0aG91dFVudGFnZ2luZyhHaWdhY2FnZTo6S2luZCBraW5kLCBHUFJSZWcgc3RvcmFnZSkKK3sK
KyNpZiBHSUdBQ0FHRV9FTkFCTEVECisgICAgaWYgKCFHaWdhY2FnZTo6aXNFbmFibGVkKGtpbmQp
KQorICAgICAgICByZXR1cm47CisKKyNpZiBDUFUoQVJNNjRFKQorICAgIFJlZ2lzdGVySUQgdGVt
cFJlZyA9IEludmFsaWRHUFJSZWc7CisgICAgSnVtcCBza2lwOworICAgIGlmIChraW5kID09IEdp
Z2FjYWdlOjpQcmltaXRpdmUpIHsKKyAgICAgICAgc2tpcCA9IGJyYW5jaFB0cihFcXVhbCwgc3Rv
cmFnZSwgVHJ1c3RlZEltbVB0cihKU0FycmF5QnVmZmVyVmlldzo6bnVsbFZlY3RvclB0cigpKSk7
CisgICAgICAgIHRlbXBSZWcgPSBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKTsKKyAgICAgICAgbW92ZShzdG9yYWdlLCB0ZW1wUmVnKTsKKyAgICAgICAgLy8gRmxp
cCB0aGUgcmVnaXN0ZXJzIHNpbmNlIGJpdEZpZWxkSW5zZXJ0IG9ubHkgaW5zZXJ0cyBpbnRvIHRo
ZSBsb3cgYml0cy4KKyAgICAgICAgc3RkOjpzd2FwKHN0b3JhZ2UsIHRlbXBSZWcpOworICAgIH0K
KyNlbmRpZgorICAgIGFuZFB0cihUcnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwg
c3RvcmFnZSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW1QdHIoR2lnYWNhZ2U6OmJhc2VQdHIoa2lu
ZCkpLCBzdG9yYWdlKTsKKyNpZiBDUFUoQVJNNjRFKQorICAgIGlmIChraW5kID09IEdpZ2FjYWdl
OjpQcmltaXRpdmUpCisgICAgICAgIGJpdEZpZWxkSW5zZXJ0NjQoc3RvcmFnZSwgMCwgNjQgLSBu
dW1iZXJPZlBBQ0JpdHMsIHRlbXBSZWcpOworICAgIGlmIChza2lwLmlzU2V0KCkpCisgICAgICAg
IHNraXAubGluayh0aGlzKTsKKyNlbmRpZgorCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShraW5k
KTsKKyAgICBVTlVTRURfUEFSQU0oc3RvcmFnZSk7CisjZW5kaWYKK30KKworLy8gbGVuZ3RoIG1h
eSBiZSB0aGUgc2FtZSByZWdpc3RlciBhcyBzY3JhdGNoLgordm9pZCBBc3NlbWJseUhlbHBlcnM6
OmNhZ2VDb25kaXRpb25hbGx5QW5kVW50YWcoR2lnYWNhZ2U6OktpbmQga2luZCwgR1BSUmVnIHN0
b3JhZ2UsIEdQUlJlZyBsZW5ndGgsIEdQUlJlZyBzY3JhdGNoLCBib29sIHZhbGlkYXRlQXV0aCkK
K3sKKyNpZiBHSUdBQ0FHRV9FTkFCTEVECisgICAgaWYgKEdpZ2FjYWdlOjppc0VuYWJsZWQoa2lu
ZCkpIHsKKyAgICAgICAgaWYgKGtpbmQgIT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSB8fCBHaWdhY2Fn
ZTo6ZGlzYWJsaW5nUHJpbWl0aXZlR2lnYWNhZ2VJc0ZvcmJpZGRlbigpKQorICAgICAgICAgICAg
Y2FnZVdpdGhvdXRVbnRhZ2dpbmcoa2luZCwgc3RvcmFnZSk7CisgICAgICAgIGVsc2UgeworI2lm
IENQVShBUk02NEUpCisgICAgICAgICAgICBpZiAobGVuZ3RoID09IHNjcmF0Y2gpCisgICAgICAg
ICAgICAgICAgc2NyYXRjaCA9IGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxp
ZGF0ZSgpOworI2VuZGlmCisgICAgICAgICAgICBKdW1wTGlzdCBkb25lOworI2lmIENQVShBUk02
NEUpCisgICAgICAgICAgICBkb25lLmFwcGVuZChicmFuY2hQdHIoRXF1YWwsIHN0b3JhZ2UsIFRy
dXN0ZWRJbW1QdHIoSlNBcnJheUJ1ZmZlclZpZXc6Om51bGxWZWN0b3JQdHIoKSkpKTsKKyNlbmRp
ZgorICAgICAgICAgICAgZG9uZS5hcHBlbmQoYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVB
ZGRyZXNzKCZHaWdhY2FnZTo6ZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlUmVxdWVzdGVkKSkpOwor
CisgICAgICAgICAgICBsb2FkUHRyKEdpZ2FjYWdlOjphZGRyZXNzT2ZCYXNlUHRyKGtpbmQpLCBz
Y3JhdGNoKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGJyYW5jaFRlc3Q2NChaZXJvLCBzY3Jh
dGNoKSk7CisjaWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIEdQUlJlZyB0ZW1wUmVnID0gZ2V0
Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICAgICAgbW92
ZShzdG9yYWdlLCB0ZW1wUmVnKTsKKyAgICAgICAgICAgIEFTU0VSVChMb2dpY2FsSW1tZWRpYXRl
OjpjcmVhdGU2NChHaWdhY2FnZTo6bWFzayhraW5kKSkuaXNWYWxpZCgpKTsKKyAgICAgICAgICAg
IGFuZFB0cihUcnVzdGVkSW1tUHRyKEdpZ2FjYWdlOjptYXNrKGtpbmQpKSwgdGVtcFJlZyk7Cisg
ICAgICAgICAgICBhZGRQdHIoc2NyYXRjaCwgdGVtcFJlZyk7CisgICAgICAgICAgICBiaXRGaWVs
ZEluc2VydDY0KHRlbXBSZWcsIDAsIDY0IC0gbnVtYmVyT2ZQQUNCaXRzLCBzdG9yYWdlKTsKKyNl
bHNlCisgICAgICAgICAgICBhbmRQdHIoVHJ1c3RlZEltbVB0cihHaWdhY2FnZTo6bWFzayhraW5k
KSksIHN0b3JhZ2UpOworICAgICAgICAgICAgYWRkUHRyKHNjcmF0Y2gsIHN0b3JhZ2UpOworI2Vu
ZGlmIC8vIENQVShBUk02NEUpCisgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgICAg
IH0KKyAgICB9CisjZW5kaWYKKworI2lmIENQVShBUk02NEUpCisgICAgaWYgKGtpbmQgPT0gR2ln
YWNhZ2U6OlByaW1pdGl2ZSkKKyAgICAgICAgdW50YWdBcnJheVB0cihsZW5ndGgsIHN0b3JhZ2Us
IHZhbGlkYXRlQXV0aCwgc2NyYXRjaCk7CisjZW5kaWYKKyAgICBVTlVTRURfUEFSQU0odmFsaWRh
dGVBdXRoKTsKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7CisgICAgVU5VU0VEX1BBUkFNKHN0b3Jh
Z2UpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAyNzQ5NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzMxLDc2ICsxNzMxLDkgQEAgcHVibGljOgogICAgICAgICBv
ay5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIHZvaWQgY2FnZVdpdGhvdXRVbnRhZ2dpbmcoR2ln
YWNhZ2U6OktpbmQga2luZCwgR1BSUmVnIHN0b3JhZ2UpCi0gICAgewotI2lmIEdJR0FDQUdFX0VO
QUJMRUQKLSAgICAgICAgaWYgKCFHaWdhY2FnZTo6aXNFbmFibGVkKGtpbmQpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgUmVnaXN0ZXJJRCB0ZW1wUmVn
ID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2
ZSkgewotICAgICAgICAgICAgdGVtcFJlZyA9IGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklE
QW5kSW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgbW92ZShzdG9yYWdlLCB0ZW1wUmVnKTsKLSAg
ICAgICAgICAgIC8vIEZsaXAgdGhlIHJlZ2lzdGVycyBzaW5jZSBiaXRGaWVsZEluc2VydCBvbmx5
IGluc2VydHMgaW50byB0aGUgbG93IGJpdHMuCi0gICAgICAgICAgICBzdGQ6OnN3YXAoc3RvcmFn
ZSwgdGVtcFJlZyk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBhbmRQdHIoVHJ1c3RlZElt
bVB0cihHaWdhY2FnZTo6bWFzayhraW5kKSksIHN0b3JhZ2UpOwotICAgICAgICBhZGRQdHIoVHJ1
c3RlZEltbVB0cihHaWdhY2FnZTo6YmFzZVB0cihraW5kKSksIHN0b3JhZ2UpOwotI2lmIENQVShB
Uk02NEUpCi0gICAgICAgIGlmIChraW5kID09IEdpZ2FjYWdlOjpQcmltaXRpdmUpCi0gICAgICAg
ICAgICBiaXRGaWVsZEluc2VydDY0KHN0b3JhZ2UsIDAsIDY0IC0gbnVtYmVyT2ZQQUNCaXRzLCB0
ZW1wUmVnKTsKLSNlbmRpZgotCi0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKLSNlbmRpZgotICAgIH0KLQorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgY2FnZVdpdGhvdXRVbnRhZ2dpbmcoR2lnYWNhZ2U6OktpbmQsIEdQ
UlJlZyBzdG9yYWdlKTsKICAgICAvLyBsZW5ndGggbWF5IGJlIHRoZSBzYW1lIHJlZ2lzdGVyIGFz
IHNjcmF0Y2guCi0gICAgdm9pZCBjYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6S2luZCBraW5k
LCBHUFJSZWcgc3RvcmFnZSwgR1BSUmVnIGxlbmd0aCwgR1BSUmVnIHNjcmF0Y2gpCi0gICAgewot
I2lmIEdJR0FDQUdFX0VOQUJMRUQKLSAgICAgICAgaWYgKEdpZ2FjYWdlOjppc0VuYWJsZWQoa2lu
ZCkpIHsKLSAgICAgICAgICAgIGlmIChraW5kICE9IEdpZ2FjYWdlOjpQcmltaXRpdmUgfHwgR2ln
YWNhZ2U6OmRpc2FibGluZ1ByaW1pdGl2ZUdpZ2FjYWdlSXNGb3JiaWRkZW4oKSkKLSAgICAgICAg
ICAgICAgICBjYWdlV2l0aG91dFVudGFnZ2luZyhraW5kLCBzdG9yYWdlKTsKLSAgICAgICAgICAg
IGVsc2UgewotI2lmIENQVShBUk02NEUpCi0gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSBz
Y3JhdGNoKQotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoID0gZ2V0Q2FjaGVkTWVtb3J5VGVt
cFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBKdW1w
TGlzdCBkb25lOwotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGJyYW5jaFRlc3Q4KE5vblpl
cm8sIEFic29sdXRlQWRkcmVzcygmR2lnYWNhZ2U6OmRpc2FibGVQcmltaXRpdmVHaWdhY2FnZVJl
cXVlc3RlZCkpKTsKLQotICAgICAgICAgICAgICAgIGxvYWRQdHIoR2lnYWNhZ2U6OmFkZHJlc3NP
ZkJhc2VQdHIoa2luZCksIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKGJy
YW5jaFRlc3Q2NChaZXJvLCBzY3JhdGNoKSk7Ci0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgICAg
ICAgICBHUFJSZWcgdGVtcFJlZyA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKTsKLSAgICAgICAgICAgICAgICBtb3ZlKHN0b3JhZ2UsIHRlbXBSZWcpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVChMb2dpY2FsSW1tZWRpYXRlOjpjcmVhdGU2NChHaWdhY2FnZTo6bWFz
ayhraW5kKSkuaXNWYWxpZCgpKTsKLSAgICAgICAgICAgICAgICBhbmRQdHIoVHJ1c3RlZEltbVB0
cihHaWdhY2FnZTo6bWFzayhraW5kKSksIHRlbXBSZWcpOwotICAgICAgICAgICAgICAgIGFkZFB0
cihzY3JhdGNoLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAgICBiaXRGaWVsZEluc2VydDY0KHRl
bXBSZWcsIDAsIDY0IC0gbnVtYmVyT2ZQQUNCaXRzLCBzdG9yYWdlKTsKLSNlbHNlCi0gICAgICAg
ICAgICAgICAgYW5kUHRyKFRydXN0ZWRJbW1QdHIoR2lnYWNhZ2U6Om1hc2soa2luZCkpLCBzdG9y
YWdlKTsKLSAgICAgICAgICAgICAgICBhZGRQdHIoc2NyYXRjaCwgc3RvcmFnZSk7Ci0jZW5kaWYg
Ly8gQ1BVKEFSTTY0RSkKLSAgICAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgotCi0jaWYgQ1BVKEFSTTY0RSkKLSAgICAgICAgaWYg
KGtpbmQgPT0gR2lnYWNhZ2U6OlByaW1pdGl2ZSkKLSAgICAgICAgICAgIHVudGFnQXJyYXlQdHIo
bGVuZ3RoLCBzdG9yYWdlKTsKLSNlbmRpZgotICAgICAgICBVTlVTRURfUEFSQU0oa2luZCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShzdG9yYWdlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlbmd0
aCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKLSAgICB9CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBjYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpLaW5kLCBH
UFJSZWcgc3RvcmFnZSwgR1BSUmVnIGxlbmd0aCwgR1BSUmVnIHNjcmF0Y2gsIGJvb2wgdmFsaWRh
dGVBdXRoID0gdHJ1ZSk7CiAKICAgICB2b2lkIGVtaXRDb21wdXRlQnV0dGVyZmx5SW5kZXhpbmdN
YXNrKEdQUlJlZyB2ZWN0b3JMZW5ndGhHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBHUFJSZWcgcmVz
dWx0R1BSKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyNzQ5NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxMSw3
ICsxODExLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAg
IC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwg
ZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUg
dW5jbG9iYmVyZWQuCiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3
OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIGNhZ2VDb25kaXRpb25hbGx5
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2NyYXRjaDIsIGxhdGVTY3Jh
dGNoMik7CisgICAgY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZl
LCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIsIGZhbHNlKTsKICAgICAK
ICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CiAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0
eXBlKSA9PSAxKTsKQEAgLTE5MDAsNyArMTkwMCw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
RmxvYXRUeXBlZEFycmF5UHUKICAgICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBi
YXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93CiAgICAgLy8gcGF0aCBl
eHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgogICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsK
LSAgICBjYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwg
bGF0ZVNjcmF0Y2gyLCBsYXRlU2NyYXRjaDIpOworICAgIGNhZ2VDb25kaXRpb25hbGx5QW5kVW50
YWcoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMiwgbGF0ZVNj
cmF0Y2gyLCBmYWxzZSk7CiAgICAgCiAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewog
ICAgIGNhc2UgNDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUFpcklSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjc0OTQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU5
LDggKzk1OSw3IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUcKICAg
ICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7CiAgICAgICAgIGNsb2JiZXJzLnNldChwaW5uZWRS
ZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7CiAgICAgICAgIGNsb2JiZXJzLnNldChwaW5uZWRSZWdz
LT5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7Ci0gICAgICAgIGlmICghaXNBUk02NCgpKQot
ICAgICAgICAgICAgY2xvYmJlcnMuc2V0KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3Rl
cnMoKSk7CisgICAgICAgIGNsb2JiZXJzLnNldChSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVn
aXN0ZXJzKCkpOwogCiAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQYXRjaHBvaW50KEIz
OjpWb2lkKTsKICAgICAgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25l
KCk7CkBAIC05NjgsMTcgKzk2NywxNyBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2Vi
QXNzZW1ibHlHCiAgICAgICAgIGVmZmVjdHMucmVhZHMgPSBCMzo6SGVhcFJhbmdlOjp0b3AoKTsK
ICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IGVmZmVjdHM7CiAgICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoY2xvYmJlcnMpOwotICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hS
ZWdpc3RlcnMgPSBHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gMSA6
IDA7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAKICAg
ICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAg
ICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQp
OwogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5
UG9pbnRlcjsKLSAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUg
PSBHaWdhY2FnZTo6aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gcGFyYW1zLmdwU2Ny
YXRjaCgwKSA6IHBpbm5lZFJlZ3MtPmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyOworICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBwYXJhbXMuZ3BTY3JhdGNoKDApOwogCiAgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRCb3VuZHNDaGVja2luZ1NpemUoKSksIHBpbm5lZFJlZ3MtPmJv
dW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAKLSAgICAgICAgICAgIGppdC5jYWdlQ29uZGl0aW9u
YWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLT5ib3VuZHND
aGVja2luZ1NpemVSZWdpc3Rlciwgc2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplKTsKKyAgICAg
ICAgICAgIGppdC5jYWdlQ29uZGl0aW9uYWxseUFuZFVudGFnKEdpZ2FjYWdlOjpQcmltaXRpdmUs
IGJhc2VNZW1vcnksIHBpbm5lZFJlZ3MtPmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyLCBzY3Jh
dGNoKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNo
cG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CkBAIC0zMzU4LDcgKzMzNTcsNyBAQCBhdXRvIEFpcklS
R2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcyMTgxCiAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKICAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OwotICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSBHaWdhY2FnZTo6
aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gMSA6IDA7CisgICAgICAgIHBhdGNocG9p
bnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwpAQCAtMzM3MywxMiArMzM3MiwxMiBAQCBhdXRv
IEFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QodW5zCiAgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3Rlcgog
ICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjI5NTIKICAgICAgICAgICAgIEFTU0VSVChwaW5uZWRSZWdzLmJvdW5kc0NoZWNraW5n
U2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7Ci0gICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplID0gR2lnYWNhZ2U6OmlzRW5hYmxlZChHaWdhY2Fn
ZTo6UHJpbWl0aXZlKSA/IHBhcmFtcy5ncFNjcmF0Y2goMCkgOiBwaW5uZWRSZWdzLmJvdW5kc0No
ZWNraW5nU2l6ZVJlZ2lzdGVyOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSBwYXJhbXMu
Z3BTY3JhdGNoKDApOwogCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRCb3VuZHND
aGVja2luZ1NpemUoKSksIHBpbm5lZFJlZ3MuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIpOyAv
LyBCb3VuZCBjaGVja2luZyBzaXplLgogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KIAotICAgICAgICAgICAg
aml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VNZW1vcnksIHBp
bm5lZFJlZ3MuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIsIHNjcmF0Y2hPckJvdW5kc0NoZWNr
aW5nU2l6ZSk7CisgICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdh
Y2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLmJvdW5kc0NoZWNraW5nU2l6
ZVJlZ2lzdGVyLCBzY3JhdGNoKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZW1pdFBhdGNocG9p
bnQoZG9Db250ZXh0U3dpdGNoLCBwYXRjaHBvaW50LCBUbXAoKSwgbmV3Q29udGV4dEluc3RhbmNl
LCBpbnN0YW5jZVZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjc0OTQ2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NzksOCArNTc5LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlH
bAogICAgICAgICBSZWdpc3RlclNldCBjbG9iYmVyczsKICAgICAgICAgY2xvYmJlcnMuc2V0KHBp
bm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyKTsKICAgICAgICAgY2xvYmJlcnMuc2V0KHBpbm5l
ZFJlZ3MtPmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgaWYgKCFpc0FSTTY0
KCkpCi0gICAgICAgICAgICBjbG9iYmVycy5zZXQoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpKTsKKyAgICAgICAgY2xvYmJlcnMuc2V0KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0
Y2hSZWdpc3RlcnMoKSk7CiAKICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4ocHJvYywgQjM6OlZvaWQs
IG9yaWdpbigpKTsKICAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwpA
QCAtNTg4LDE4ICs1ODcsMTggQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1i
bHlHbAogICAgICAgICBlZmZlY3RzLnJlYWRzID0gQjM6OkhlYXBSYW5nZTo6dG9wKCk7CiAgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMgPSBlZmZlY3RzOwogICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyKGNsb2JiZXJzKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0
ZXJzID0gR2lnYWNhZ2U6OmlzRW5hYmxlZChHaWdhY2FnZTo6UHJpbWl0aXZlKSA/IDEgOiAwOwor
ICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwogCiAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZChpbnN0YW5jZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CiAg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9y
eVBvaW50ZXI7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXpl
ID0gR2lnYWNhZ2U6OmlzRW5hYmxlZChHaWdhY2FnZTo6UHJpbWl0aXZlKSA/IHBhcmFtcy5ncFNj
cmF0Y2goMCkgOiBwaW5uZWRSZWdzLT5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3RlcjsKKyAgICAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoID0gcGFyYW1zLmdwU2NyYXRjaCgwKTsKIAogICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkQm91bmRzQ2hlY2tpbmdTaXplKCkpLCBwaW5uZWRSZWdzLT5i
b3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlcik7CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNo
ZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogCi0gICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlv
bmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgcGlubmVkUmVncy0+Ym91bmRz
Q2hlY2tpbmdTaXplUmVnaXN0ZXIsIHNjcmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSk7CisgICAg
ICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZl
LCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLT5ib3VuZHNDaGVja2luZ1NpemVSZWdpc3Rlciwgc2Ny
YXRjaCk7CiAgICAgICAgIH0pOwogICAgIH0KIH0KQEAgLTI1NDQsNyArMjU0Myw3IEBAIGF1dG8g
QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2kKICAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwogICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQobmV3Q29udGV4dEluc3RhbmNlLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKTsKICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGluc3RhbmNlVmFsdWUoKSwgVmFsdWVS
ZXA6OlNvbWVSZWdpc3Rlcik7Ci0gICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lz
dGVycyA9IEdpZ2FjYWdlOjppc0VuYWJsZWQoR2lnYWNhZ2U6OlByaW1pdGl2ZSkgPyAxIDogMDsK
KyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKIAogICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBAIC0yNTYwLDEy
ICsyNTU5LDEyIEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KHVuc2kKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9y
eSBzaXplIHJlZ2lzdGVyCiAgICAgICAgICAgICAvLyAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJl
Z3MuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKLSAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUgPSBHaWdhY2FnZTo6
aXNFbmFibGVkKEdpZ2FjYWdlOjpQcmltaXRpdmUpID8gcGFyYW1zLmdwU2NyYXRjaCgwKSA6IHBp
bm5lZFJlZ3MuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXI7CisgICAgICAgICAgICBHUFJSZWcg
c2NyYXRjaCA9IHBhcmFtcy5ncFNjcmF0Y2goMCk7CiAKICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZSgpKSwgcGlubmVkUmVncy5ib3VuZHNDaGVja2lu
Z1NpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgogICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNl
dE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KIAotICAg
ICAgICAgICAgaml0LmNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJhc2VN
ZW1vcnksIHBpbm5lZFJlZ3MuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXIsIHNjcmF0Y2hPckJv
dW5kc0NoZWNraW5nU2l6ZSk7CisgICAgICAgICAgICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRV
bnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLmJvdW5kc0No
ZWNraW5nU2l6ZVJlZ2lzdGVyLCBzY3JhdGNoKTsKICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29u
dGV4dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCks
IGNvbnRpbnVhdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
aW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QmluZGluZy5jcHAJKHJldmlzaW9uIDI3NDk0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTEgKzY4LDkgQEAgRXhw
ZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgIC8vIEZJWE1FIHRoZSBm
b2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdhc206Okluc3RhbmNlIGhhdmUgdGhlIHNh
bWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9yeSByZWdpc3Rl
ciBhcyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMuCiAgICAgewotICAgICAgICBH
UFJSZWcgc2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplID0gIUdpZ2FjYWdlOjppc0VuYWJsZWQo
R2lnYWNhZ2U6OlByaW1pdGl2ZSkgPyBwaW5uZWRSZWdzLmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lz
dGVyIDogd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJvbG9ndWVTY3JhdGNoR1BSc1sxXTsKLQog
ICAgICAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkQm91bmRzQ2hlY2tpbmdTaXplKCkpLCBwaW5uZWRSZWdzLmJvdW5k
c0NoZWNraW5nU2l6ZVJlZ2lzdGVyKTsgLy8gQm91bmQgY2hlY2tpbmcgc2l6ZS4KICAgICAgICAg
aml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6VGFnZ2Vk
QXJyYXlTdG9yYWdlUHRyPHZvaWQ+ICh2b2lkKikuCi0gICAgICAgIGppdC5jYWdlQ29uZGl0aW9u
YWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVtb3J5LCBwaW5uZWRSZWdzLmJvdW5kc0No
ZWNraW5nU2l6ZVJlZ2lzdGVyLCBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUpOworICAgICAg
ICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNl
TWVtb3J5LCBwaW5uZWRSZWdzLmJvdW5kc0NoZWNraW5nU2l6ZVJlZ2lzdGVyLCB3YXNtQ2FsbGlu
Z0NvbnZlbnRpb24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJzWzFdKTsKICAgICB9CiAKICAgICAvLyBU
YWlsIGNhbGwgaW50byB0aGUgY2FsbGVlIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjc0OTQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTYsNyArMjU2LDggQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rp
b24+IGNyZWF0ZQogCiAgICAgaWYgKCEhaW5mby5tZW1vcnkpIHsKICAgICAgICAgR1BSUmVnIGJh
c2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaE9yQm91bmRzQ2hlY2tpbmdTaXplID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkucHJv
bG9ndWVTY3JhdGNoR1BSc1swXTsKKyAgICAgICAgR1BSUmVnIHNpemUgPSB3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5wcm9sb2d1ZVNjcmF0Y2hHUFJzWzBdOworICAgICAgICBHUFJSZWcgc2NyYXRj
aCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnByb2xvZ3VlU2NyYXRjaEdQUnNbMV07CiAKICAg
ICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgICAgIGppdC5sb2FkV2Fz
bUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKQEAgLTI2NCwxNSArMjY1LDE1IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUKICAgICAgICAgR1BSUmVnIGN1cnJl
bnRJbnN0YW5jZUdQUiA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IGJhc2VNZW1vcnkgOiB3YXNt
Q29udGV4dEluc3RhbmNlR1BSOwogICAgICAgICBpZiAoaXNBUk02NEUoKSkgewogICAgICAgICAg
ICAgaWYgKG1vZGUgIT0gV2FzbTo6TWVtb3J5TW9kZTo6U2lnbmFsaW5nKQotICAgICAgICAgICAg
ICAgIHNjcmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSA9IHBpbm5lZFJlZ3MuYm91bmRzQ2hlY2tp
bmdTaXplUmVnaXN0ZXI7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoY3VycmVudEluc3RhbmNlR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRC
b3VuZHNDaGVja2luZ1NpemUoKSksIHNjcmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSk7CisgICAg
ICAgICAgICAgICAgc2l6ZSA9IHBpbm5lZFJlZ3MuYm91bmRzQ2hlY2tpbmdTaXplUmVnaXN0ZXI7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY3VycmVudElu
c3RhbmNlR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRCb3VuZHNDaGVja2luZ1Np
emUoKSksIHNpemUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKG1vZGUgIT0g
V2FzbTo6TWVtb3J5TW9kZTo6U2lnbmFsaW5nKQogICAgICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhjdXJyZW50SW5zdGFuY2VHUFIsIFdhc206Okluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZEJvdW5kc0NoZWNraW5nU2l6ZSgpKSwgcGlubmVkUmVncy5ib3VuZHND
aGVja2luZ1NpemVSZWdpc3Rlcik7CiAgICAgICAgIH0KIAogICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY3VycmVudEluc3RhbmNlR1BSLCBXYXNtOjpJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBqaXQuY2FnZUNv
bmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRjaE9yQm91
bmRzQ2hlY2tpbmdTaXplLCBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUpOworICAgICAgICBq
aXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNlTWVt
b3J5LCBzaXplLCBzY3JhdGNoKTsKICAgICB9CiAKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2Fs
bCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShy
ZXZpc2lvbiAyNzQ5NDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDEyICszNjcsMTQgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYgogCiAgICAgaWYgKCEhbW9kdWxl
SW5mb3JtYXRpb24ubWVtb3J5KSB7CiAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVk
UmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hPckJvdW5kc0No
ZWNraW5nU2l6ZSA9IHN0YWNrTGltaXRHUFI7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoT3JCb3Vu
ZHNDaGVja2luZ1NpemUgPSBJbnZhbGlkR1BSUmVnOwogICAgICAgICBhdXRvIG1vZGUgPSBpbnN0
YW5jZSgpLT5tZW1vcnlNb2RlKCk7CiAKICAgICAgICAgaWYgKGlzQVJNNjRFKCkpIHsKICAgICAg
ICAgICAgIGlmIChtb2RlICE9IFdhc206Ok1lbW9yeU1vZGU6OlNpZ25hbGluZykKICAgICAgICAg
ICAgICAgICBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUgPSBwaW5uZWRSZWdzLmJvdW5kc0No
ZWNraW5nU2l6ZVJlZ2lzdGVyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNj
cmF0Y2hPckJvdW5kc0NoZWNraW5nU2l6ZSA9IHN0YWNrTGltaXRHUFI7CiAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgV2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkQm91bmRzQ2hlY2tpbmdTaXplKCkpLCBzY3JhdGNoT3JCb3VuZHND
aGVja2luZ1NpemUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKG1vZGUgIT0g
V2FzbTo6TWVtb3J5TW9kZTo6U2lnbmFsaW5nKQpAQCAtMzgwLDcgKzM4Miw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWIKICAgICAgICAgfQogCiAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBqaXQuY2Fn
ZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgYmFzZU1lbW9yeSwgc2NyYXRjaE9y
Qm91bmRzQ2hlY2tpbmdTaXplLCBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUpOworICAgICAg
ICBqaXQuY2FnZUNvbmRpdGlvbmFsbHlBbmRVbnRhZyhHaWdhY2FnZTo6UHJpbWl0aXZlLCBiYXNl
TWVtb3J5LCBzY3JhdGNoT3JCb3VuZHNDaGVja2luZ1NpemUsIHNjcmF0Y2hHUFIpOwogICAgIH0K
IAogICAgIC8vIFdlIHVzZSB0aGlzIGNhbGxlZSB0byBpbmRpY2F0ZSBob3cgdG8gdW53aW5kIHBh
c3QgdGhlc2UgdHlwZXMgb2YgZnJhbWVzOgpAQCAtMzkwLDEzICszOTIsMTEgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYgogICAgICAgICBtX2pzVG9XYXNtSUNDYWxs
ZWUuc2V0KHZtLCB0aGlzLCBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCgpLCB0aGlzKSk7CiAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihtX2pzVG9XYXNtSUNDYWxsZWUuZ2V0KCkpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBDdXJyZW50
bHkgd2UganVzdCBkbyBhbiBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxkIHRlYWNoIHRoZSBN
b2R1bGUKLSAgICAgICAgLy8gaG93IHRvIHJlcGF0Y2ggdXM6Ci0gICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NzAKLSAgICAgICAgaml0LmxvYWRQ
dHIoZW50cnlwb2ludExvYWRMb2NhdGlvbigpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgaml0LmNh
bGwoc2NyYXRjaEdQUiwgV2FzbUVudHJ5UHRyVGFnKTsKLSAgICB9CisgICAgLy8gRklYTUU6IEN1
cnJlbnRseSB3ZSBqdXN0IGRvIGFuIGluZGlyZWN0IGp1bXAuIEJ1dCB3ZSBzaG91bGQgdGVhY2gg
dGhlIE1vZHVsZQorICAgIC8vIGhvdyB0byByZXBhdGNoIHVzOgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NzAKKyAgICBqaXQubG9hZFB0cihlbnRy
eXBvaW50TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIpOworICAgIGppdC5jYWxsKHNjcmF0Y2hH
UFIsIFdhc21FbnRyeVB0clRhZyk7CiAKICAgICBtYXJzaGFsbEpTUmVzdWx0KGppdCwgc2lnbmF0
dXJlLCB3YXNtQ2FsbEluZm8sIHNhdmVkUmVzdWx0UmVnaXN0ZXJzKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>