<?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>51714</bug_id>
          
          <creation_ts>2010-12-29 10:16:51 -0800</creation_ts>
          <short_desc>Move security logic out of the JavaScript binding for location into the DOM class</short_desc>
          <delta_ts>2010-12-30 12:50:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>51762</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jschuh</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>327613</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-29 10:16:51 -0800</bug_when>
    <thetext>Move security logic out of the JavaScript binding for location into the DOM class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327618</commentid>
    <comment_count>1</comment_count>
      <attachid>77630</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-29 10:29:40 -0800</bug_when>
    <thetext>Created attachment 77630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327621</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-29 10:39:17 -0800</bug_when>
    <thetext>Attachment 77630 did not build on chromium:
Build output: http://queues.webkit.org/results/7255240</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327624</commentid>
    <comment_count>3</comment_count>
      <attachid>77630</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-29 10:51:30 -0800</bug_when>
    <thetext>Comment on attachment 77630
Patch

I&apos;m taking down the patch so I can add the include and so fix the Chromium build (at least) and also investigate some regression test failures that indicate I made a small mistake somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327625</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-29 10:52:08 -0800</bug_when>
    <thetext>Adam, this is the work you recently suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327640</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-29 11:39:06 -0800</bug_when>
    <thetext>Attachment 77630 did not build on chromium:
Build output: http://queues.webkit.org/results/7270232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327739</commentid>
    <comment_count>6</comment_count>
      <attachid>77651</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-29 16:30:13 -0800</bug_when>
    <thetext>Created attachment 77651
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327825</commentid>
    <comment_count>7</comment_count>
      <attachid>77651</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-29 21:18:40 -0800</bug_when>
    <thetext>Comment on attachment 77651
Patch

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

Very nice.  I&apos;ve suggested some FIXME comments below.  It&apos;s amazing to me how much of this machinery was redundant.  Thanks for working on this code.  I&apos;ll follow up with the V8 change once this patch lands.

&gt; WebCore/bindings/js/JSDOMBinding.cpp:701
&gt;  Frame* toDynamicFrame(ExecState* exec)
&gt;  {
&gt; -    return JSBindingState(exec).firstFrame();
&gt; +    return firstDOMWindow(exec)-&gt;frame();
&gt;  }

We should probably rename this function to something involving &quot;first&quot; to be consistent with our new names.

&gt; WebCore/bindings/js/JSDOMBinding.cpp:706
&gt;  bool processingUserGesture()
&gt;  {
&gt; -    return JSBindingState(JSMainThreadExecState::currentState()).processingUserGesture();
&gt; -}
&gt; -
&gt; -KURL completeURL(ExecState* exec, const String&amp; relativeURL)
&gt; -{
&gt; -    JSBindingState state(exec);
&gt; -    return completeURL(&amp;state, relativeURL);
&gt; +    return ScriptController::processingUserGesture();
&gt;  }

We should probably inline this function into its call sites.

&gt; WebCore/page/DOMWindow.cpp:1612
&gt; -void DOMWindow::setLocation(const String&amp; urlString, DOMWindow* activeWindow, DOMWindow* firstWindow)
&gt; +void DOMWindow::setLocation(const String&amp; urlString, DOMWindow* activeWindow, DOMWindow* firstWindow,
&gt; +    SetLocationLocking locking)

A line break!  In WebKit!  :)

&gt; WebCore/page/Location.cpp:262
&gt; +    // FIXME: It&apos;s not clear this cross-origin security check is valuable.
&gt; +    // We allow one page to change the location of another. Why block attempts to reload?
&gt; +    // Other location operations simply block use of JavaScript URLs cross origin.

Maybe it has to do with re-POSTing form data?  The other location operations can only generate GET requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327965</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-30 11:02:59 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; WebCore/bindings/js/JSDOMBinding.cpp:701
&gt; &gt;  Frame* toDynamicFrame(ExecState* exec)
&gt; &gt;  {
&gt; &gt; -    return JSBindingState(exec).firstFrame();
&gt; &gt; +    return firstDOMWindow(exec)-&gt;frame();
&gt; &gt;  }
&gt; 
&gt; We should probably rename this function to something involving &quot;first&quot; to be consistent with our new names.

My intention is to delete this entirely ASAP.

&gt; &gt; WebCore/bindings/js/JSDOMBinding.cpp:706
&gt; &gt;  bool processingUserGesture()
&gt; &gt;  {
&gt; &gt; -    return JSBindingState(JSMainThreadExecState::currentState()).processingUserGesture();
&gt; &gt; -}
&gt; &gt; -
&gt; &gt; -KURL completeURL(ExecState* exec, const String&amp; relativeURL)
&gt; &gt; -{
&gt; &gt; -    JSBindingState state(exec);
&gt; &gt; -    return completeURL(&amp;state, relativeURL);
&gt; &gt; +    return ScriptController::processingUserGesture();
&gt; &gt;  }
&gt; 
&gt; We should probably inline this function into its call sites.

The reason I didn&apos;t in this patch was concern over the header dependency on ScriptController.

&gt; &gt; WebCore/page/DOMWindow.cpp:1612
&gt; &gt; -void DOMWindow::setLocation(const String&amp; urlString, DOMWindow* activeWindow, DOMWindow* firstWindow)
&gt; &gt; +void DOMWindow::setLocation(const String&amp; urlString, DOMWindow* activeWindow, DOMWindow* firstWindow,
&gt; &gt; +    SetLocationLocking locking)
&gt; 
&gt; A line break!  In WebKit!  :)

LOL.

&gt; &gt; WebCore/page/Location.cpp:262
&gt; &gt; +    // FIXME: It&apos;s not clear this cross-origin security check is valuable.
&gt; &gt; +    // We allow one page to change the location of another. Why block attempts to reload?
&gt; &gt; +    // Other location operations simply block use of JavaScript URLs cross origin.
&gt; 
&gt; Maybe it has to do with re-POSTing form data?  The other location operations can only generate GET requests.

Interesting point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327970</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-30 11:29:17 -0800</bug_when>
    <thetext>Committed r74800: &lt;http://trac.webkit.org/changeset/74800&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77630</attachid>
            <date>2010-12-29 10:29:40 -0800</date>
            <delta_ts>2010-12-29 16:30:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51714-20101229102938.patch</filename>
            <type>text/plain</type>
            <size>50064</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDc0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODUgQEAKKzIwMTAtMTItMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
c2VjdXJpdHkgbG9naWMgb3V0IG9mIHRoZSBKYXZhU2NyaXB0IGJpbmRpbmcgZm9yIGxvY2F0aW9u
IGludG8gdGhlIERPTSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTE3MTQKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogUmVtb3ZlZCBKU0JpbmRpbmdTdGF0ZS5jcHAsIEpTQmluZGluZ1N0YXRlLmgsCisg
ICAgICAgIGFuZCBKU0JpbmRpbmcuaC4gTGF0ZXIsIHdlJ2xsIHJlbW92ZSB0aGVtIGZyb20gb3Ro
ZXIgcHJvamVjdCBmaWxlcyBhbmQgZGVsZXRlCisgICAgICAgIHRoZSBzb3VyY2UgZmlsZXMuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0JpbmRpbmcuaDogRW1wdGllZCBvdXQsIG1hcmtlZCBm
b3IgbGF0ZXIgZGVsZXRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwOiBSZW1vdmVkIHVudXNlZCBvdmVybG9hZCBvZiB0aGUganNPd25lZFN0cmluZ09yTnVsbAor
ICAgICAgICBmdW5jdGlvbiwgdW51c2VkIHNob3VsZEFsbG93TmF2aWdhdGlvbiBmdW5jdGlvbiwg
dW51c2VkIGFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTAorICAgICAgICBmdW5jdGlvbiwg
dW51c2VkIHRvTGV4aWNhbEZyYW1lIGZ1bmN0aW9uLCB1bnVzZWQgY29tcGxldGVVUkwgZnVuY3Rp
b24sIHVudXNlZAorICAgICAgICBnZXRDYWNoZWRET01TdHJ1Y3R1cmUgYW5kIGNhY2hlRE9NU3Ry
dWN0dXJlIG92ZXJsb2FkcywgYW5kIHVudXNlZAorICAgICAgICBnZXRDYWNoZWRET01Db25zdHJ1
Y3RvciBhbmQgY2FjaGVET01Db25zdHJ1Y3Rpb24gZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29y
ZTo6YWN0aXZlRE9NV2luZG93KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpmaXJzdERPTVdp
bmRvdyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9EeW5hbWljRnJhbWUpOiBDaGFuZ2Vk
IHRvIHVzZSBmaXJzdERPTVdpbmRvdyBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhyb3VnaAorICAgICAg
ICBKU0JpbmRpbmdTdGF0ZSwgc2luY2UgdGhlIGxhdHRlciBpcyBhbiB1bm5lZWRlZCBhYnN0cmFj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6IENoYW5nZWQg
dG8gY2FsbCBTY3JpcHRDb250cm9sbGVyJ3MgZnVuY3Rpb24KKyAgICAgICAgcmF0aGVyIHRoYW4g
Y2FsbGluZyB0aHJvdWdoIEpTQmluZGluZ1N0YXRlLCB3aGljaCBpcyBhbiB1bm5lZWRlZCBhYnN0
cmFjdGlvbgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6IFJlbW92ZWQg
dGhlIGZ1bmN0aW9ucyBtZW50aW9uZWQgYWJvdmUuIEFkZGVkCisgICAgICAgIGFjdGl2ZURPTVdp
bmRvdyBhbmQgZmlyc3RET01XaW5kb3cuIEFsc28gYWRkZWQgYSBGSVhNRSBmb3IgdGhlIGV4dHJl
bWVseSBwb29ybHkKKyAgICAgICAgbmFtZWQgYWxsb3dzQWNjZXNzRnJvbUZyYW1lIGZ1bmN0aW9u
cywgd2hpY2ggYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyCisgICAgICAgIHNjcmlwdCBp
cyBhbGxvd2VkIGFjY2VzcyAqdG8qIGEgZnJhbWUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHA6IFJlbW92ZWQgbWFueSB1bm5lZWRlZCBpbmNsdWRlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRMb2NhdGlvbik6IFN0cmVhbWxpbmVkIGJ5
IHVzaW5nIHRoZSBuZXcKKyAgICAgICAgYWN0aXZlRE9NV2luZG93IGFuZCBmaXJzdERPTVdpbmRv
dyBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6b3Blbik6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKTogRGl0dG8uCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTTG9jYXRpb246OnNldEhyZWYpOiBDaGFuZ2VkIHRvIHBhc3MgdGhlIGFjdGl2ZSBh
bmQgZmlyc3Qgd2luZG93cyB0aHJvdWdoCisgICAgICAgIHRvIHRoZSBMb2NhdGlvbjo6c2V0SHJl
ZiBmdW5jdGlvbiwgd2l0aCBpdCBkb2luZyB0aGUgcmVzdCBvZiB0aGUgd29yay4gVGhpcyBtb3Zl
cworICAgICAgICB3b3JrIG91dCBvZiB0aGUgRE9NIGJpbmRpbmcgdGhhdCBiZWxvbmdzIGluIHRo
ZSBET00gaXRzZWxmLiBFdmVudHVhbGx5IHN1Y2ggZnVuY3Rpb25zCisgICAgICAgIGNvdWxkIGV2
ZW4gYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgdGhlIGJpbmRpbmdzIHNjcmlwdC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFByb3RvY29sKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRIb3N0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpKU0xvY2F0aW9uOjpzZXRIb3N0bmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNM
b2NhdGlvbjo6c2V0UG9ydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6
c2V0UGF0aG5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFNl
YXJjaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SGFzaCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFjZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpKU0xvY2F0aW9uOjphc3NpZ24pOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L3NwZWNpYWxpemF0aW9uL0pTQmluZGluZ1N0YXRlLmNwcDogRW1wdGllZCBvdXQsIG1hcmtlZCBm
b3IgbGF0ZXIgZGVsZXRpb24uCisgICAgICAgICogYmluZGluZ3MvanMvc3BlY2lhbGl6YXRpb24v
SlNCaW5kaW5nU3RhdGUuaDogRW1wdGllZCBvdXQsIG1hcmtlZCBmb3IgbGF0ZXIgZGVsZXRpb24u
CisKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01X
aW5kb3c6OnNldExvY2F0aW9uKTogQWRkZWQgYSBTZXRMb2NhdGlvbkxvY2tpbmcgYXJndW1lbnQg
dGhhdCBhbGxvd3MgdXMKKyAgICAgICAgdG8gdXNlIHRoaXMgZnVuY3Rpb24gZm9yIExvY2F0aW9u
OjpyZXBsYWNlLCB3aGljaCBpcyB0aGUgc2FtZSBhcyBzZXRMb2NhdGlvbiBleGNlcHQgdGhhdAor
ICAgICAgICBpdCBsb2NrcyBib3RoIGhpc3RvcnkgYW5kIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4K
KyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5oOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvTG9j
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246OnNldEhyZWYpOiBBZGRlZC4g
VXNlcyBET01XaW5kb3c6OnNldExvY2F0aW9uIHNvIHRoYXQgdGhlIHNlY3VyaXR5CisgICAgICAg
IGxvZ2ljIHRoZXJlIGRvZXMgbm90IGhhdmUgdG8gYmUgcmVwZWF0ZWQgb3IgZXZlbiByZWZhY3Rv
cmVkLgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246OnNldFByb3RvY29sKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpMb2NhdGlvbjo6c2V0SG9zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYXRpb246OnNldEhvc3RuYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpM
b2NhdGlvbjo6c2V0UG9ydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246OnNl
dFBhdGhuYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpMb2NhdGlvbjo6c2V0U2VhcmNo
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpMb2NhdGlvbjo6c2V0SGFzaCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246OmFzc2lnbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYXRpb246OnJlcGxhY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkxvY2F0
aW9uOjpyZWxvYWQpOiBBZGRlZC4gU2VjdXJpdHkgbG9naWMgd2FzIHJlZmFjdG9yZWQgZnJvbSB0
aGUgY29kZSBpbgorICAgICAgICBKU0xvY2F0aW9uQ3VzdG9tLmNwcC4gQWRkZWQgYSBGSVhNRSBh
Ym91dCB0aGUgZmFjdCB0aGF0IHRoaXMgc2VjdXJpdHkgbG9naWMgc2VlbXMKKyAgICAgICAgcG9z
c2libHkgdW5uZWVkZWQuCisKKyAgICAgICAgKiBwYWdlL0xvY2F0aW9uLmg6IEZpeGVkIGluZGVu
dGF0aW9uIG9uIHRoZSB3aG9sZSBmaWxlLiBBZGRlZCB0aGUgbmV3IGZ1bmN0aW9ucyBhYm92ZS4K
KyAgICAgICAgKFdlYkNvcmU6OkxvY2F0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TG9jYXRpb246OmZyYW1lKToKKwogMjAxMC0xMi0yOSAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZs
b3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3ku
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gNzQ2OTQpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMzA5MCw5ICszMDkwLDYgQEAKIAkJQTU5RTNDMUYxMTU4MEY1MTAw
NzI5MjhFIC8qIEtleUV2ZW50SVBob25lLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTU5RTNDMUQxMTU4MEY1MTAwNzI5MjhFIC8qIEtleUV2ZW50SVBo
b25lLm1tICovOyB9OwogCQlBNUFGQjM0RjExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1QUZCMzRE
MTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuY3BwICovOyB9OwogCQlBNUFGQjM1MDExNTE1
MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNUFGQjM0RTExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmgg
Ki87IH07Ci0JCUE2MjJBOEVFMTIyQzQ0MkEwMEE3ODVCMyAvKiBKU0JpbmRpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEVEMTIyQzQ0MkEw
MEE3ODVCMyAvKiBKU0JpbmRpbmcuaCAqLzsgfTsKLQkJQTYyMkE4RjIxMjJDNDQ0NTAwQTc4NUIz
IC8qIEpTQmluZGluZ1N0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE2MjJBOEYwMTIyQzQ0NDUwMEE3ODVCMyAvKiBKU0JpbmRpbmdTdGF0ZS5j
cHAgKi87IH07Ci0JCUE2MjJBOEYzMTIyQzQ0NDUwMEE3ODVCMyAvKiBKU0JpbmRpbmdTdGF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RjEx
MjJDNDQ0NTAwQTc4NUIzIC8qIEpTQmluZGluZ1N0YXRlLmggKi87IH07CiAJCUE2MjJBOEZBMTIy
QzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY0MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5k
aW5nTG9jYXRpb24uaCAqLzsgfTsKIAkJQTYyMkE4RkIxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRp
bmdTZWN1cml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTYyMkE4RjUxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eS5oICovOyB9Owog
CQlBNjIyQThGQzEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGNjEyMkM0
NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgKi87IH07CkBAIC05NDIxLDkg
Kzk0MTgsNiBAQAogCQlBNUFGQjM0RTExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZXBSYW5nZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNUM5NzRDRjExNDg1RkYxMDA2NkYyQUIgLyogS2V5RXZlbnRDb2Nv
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBLZXlFdmVudENvY29hLmg7IHBh
dGggPSBjb2NvYS9LZXlFdmVudENvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE1Qzk3NEQwMTE0ODVGRjEwMDY2RjJBQiAvKiBLZXlFdmVudENvY29hLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gS2V5RXZlbnRDb2NvYS5tbTsgcGF0aCA9IGNv
Y29hL0tleUV2ZW50Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE2MjJB
OEVEMTIyQzQ0MkEwMEE3ODVCMyAvKiBKU0JpbmRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNCaW5kaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE2
MjJBOEYwMTIyQzQ0NDUwMEE3ODVCMyAvKiBKU0JpbmRpbmdTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0JpbmRpbmdTdGF0ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE2MjJBOEYxMTIyQzQ0NDUwMEE3ODVCMyAvKiBKU0JpbmRpbmdT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0JpbmRpbmdTdGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNjIyQThGNDEyMkM0NEE2MDBBNzg1QjMg
LyogQmluZGluZ0xvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJp
bmRpbmdMb2NhdGlvbi5oOyBwYXRoID0gZ2VuZXJpYy9CaW5kaW5nTG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTYyMkE4RjUxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRp
bmdTZWN1cml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCaW5kaW5nU2Vj
dXJpdHkuaDsgcGF0aCA9IGdlbmVyaWMvQmluZGluZ1NlY3VyaXR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE2MjJBOEY2MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJp
dHlCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJpbmRpbmdT
ZWN1cml0eUJhc2UuY3BwOyBwYXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NzM1LDE1ICsxNTcyOSw2IEBACiAJCQlu
YW1lID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlBNjIyQThF
RjEyMkM0NDQ1MDBBNzg1QjMgLyogc3BlY2lhbGl6YXRpb24gKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUE2MjJBOEYwMTIyQzQ0NDUwMEE3ODVCMyAvKiBK
U0JpbmRpbmdTdGF0ZS5jcHAgKi8sCi0JCQkJQTYyMkE4RjExMjJDNDQ0NTAwQTc4NUIzIC8qIEpT
QmluZGluZ1N0YXRlLmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IHNwZWNpYWxpemF0aW9uOwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJQTc1RThCN0YwRTFERTJCMDAwN0YyNDgx
IC8qIGZpbHRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMTc0NTEsNyArMTc0MzYsNiBAQAogCQkJCUJDQ0U1OEI0MTA2MUU5MjUwMDhGQjM1QSAvKiBD
b25zdHJ1Y3RvcnMgKi8sCiAJCQkJQkM0RURFRjcwQzA4RjQxNDAwN0VERDQ5IC8qIEN1c3RvbSAq
LywKIAkJCQkxNERGQjMzRjBBN0RGNzYzMDAxOEY3NjkgLyogRGVyaXZlZCBTb3VyY2VzICovLAot
CQkJCUE2MjJBOEVGMTIyQzQ0NDUwMEE3ODVCMyAvKiBzcGVjaWFsaXphdGlvbiAqLywKIAkJCQlC
Q0Q1MzM2MzBFRDY4NDg5MDA4ODc0NjggLyogQ2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCAq
LywKIAkJCQk5M0Y4QjMwNjBBMzAwRkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICov
LAogCQkJCUJDNTNEQTYxMTE0MzE0QkQwMDBEODE3RSAvKiBET01PYmplY3RIYXNoVGFibGVNYXAu
Y3BwICovLApAQCAtMTc0NjQsNyArMTc0NDgsNiBAQAogCQkJCUM1ODVBNjYxMTFENEZBQzUwMDRD
M0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmggKi8sCiAJCQkJMUM4MUJBMDMwRTk3MzQ4MzAw
MjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwICovLAogCQkJCTFDODFCQTA0MEU5NzM0
ODMwMDI2NkUwNyAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmggKi8sCi0JCQkJQTYyMkE4RUQxMjJD
NDQyQTAwQTc4NUIzIC8qIEpTQmluZGluZy5oICovLAogCQkJCUJDNTNEQUM0MTE0MzJGRDkwMDBE
ODE3RSAvKiBKU0RlYnVnV3JhcHBlclNldC5jcHAgKi8sCiAJCQkJQkM1M0RBQzExMTQzMkVFRTAw
MEQ4MTdFIC8qIEpTRGVidWdXcmFwcGVyU2V0LmggKi8sCiAJCQkJOTNCNzBENDcwOUVCMEM3QzAw
OUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi8sCkBAIC0yMDcwOSw4ICsyMDY5Miw2IEBACiAJ
CQkJQkMxMjRGMDAwQzI2NDQ3QTAwOUUyMzQ5IC8qIEpTQmFySW5mby5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM5NDYzNDgxMDdBOTM2NjAwODU3MTkzIC8qIEpTQmVmb3JlTG9hZEV2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTcyMUZEMzExRDI3RUYyMDA2MzhCNDIgLyogSlNCZWZvcmVQcm9j
ZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUE2MjJBOEVFMTIyQzQ0MkEwMEE3ODVCMyAv
KiBKU0JpbmRpbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCUE2MjJBOEYzMTIyQzQ0NDUwMEE3ODVC
MyAvKiBKU0JpbmRpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkUyRDk5Q0UxMEUyQkJE
QTAwNDk2MzM3IC8qIEpTQmxvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODlDRDAyOTQxMUM4NUI4
NzAwNzBCNzkxIC8qIEpTQmxvYkJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDlFMjRD
MTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MzQzNCw3ICsyMzQxNSw2IEBACiAJCQkJQkMxMjRFRkYwQzI2NDQ3QTAwOUUyMzQ5IC8qIEpTQmFy
SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzk0NjM0NjEwN0E5MzRCMDA4NTcxOTMgLyog
SlNCZWZvcmVMb2FkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3MjFGRDIxMUQyN0VG
MjAwNjM4QjQyIC8qIEpTQmVmb3JlUHJvY2Vzc0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUE2MjJBOEYyMTIyQzQ0NDUwMEE3ODVCMyAvKiBKU0JpbmRpbmdTdGF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyRTJEOTlDRDEwRTJCQkRBMDA0OTYzMzcgLyogSlNCbG9iLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg5Q0QwMjkzMTFDODVCODcwMDcwQjc5MSAvKiBKU0Jsb2JCdWlsZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDlFMjg3MTA3RDREQjQwMEI1NzkzRiAvKiBKU0NhbGxi
YWNrRGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNC
aW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmcuaAko
cmV2aXNpb24gNzQ2OTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUxICsxLDIgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEpTQmluZGluZ19oCi0jZGVmaW5lIEpT
QmluZGluZ19oCi0KLSNpbmNsdWRlICJCaW5kaW5nRnJhbWUuaCIKLSNpbmNsdWRlICJCaW5kaW5n
TG9jYXRpb24uaCIKLSNpbmNsdWRlICJCaW5kaW5nU2VjdXJpdHkuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0vLyBJbnN0YW50aWF0ZSBiaW5kaW5nIHRlbXBsYXRlIGNsYXNzZXMgZm9yIEpT
Qy4KLWNsYXNzIEpTQmluZGluZyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBCaW5kaW5nRnJhbWU8
SlNCaW5kaW5nPiBGcmFtZTsKLSAgICB0eXBlZGVmIEJpbmRpbmdMb2NhdGlvbjxKU0JpbmRpbmc+
IExvY2F0aW9uOwotfTsKLQotdHlwZWRlZiBCaW5kaW5nU2VjdXJpdHk8SlNCaW5kaW5nPiBKU0Jp
bmRpbmdTZWN1cml0eTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSlNC
aW5kaW5nX2gKKy8vIE9uY2UgcmVmZXJlbmNlcyB0byB0aGlzIGZpbGUgYXJlIHJlbW92ZWQgZnJv
bSBidWlsZCBmaWxlcywgdGhpcyBmaWxlIHNob3VsZCBiZSBkZWxldGVkLgorI2Vycm9yCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA3NDY5NCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWlu
aWcgPHNhbUB3ZWJraXQub3JnPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zOSw4ICszOSw2IEBACiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNCaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiSlNCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJKU0RPTUNvcmVFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTRGVidWdXcmFwcGVyU2V0
LmgiCkBAIC00OTAsMTMgKzQ4OCw2IEBAIEpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVj
U3RhdGUqIGUKICAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzdHJpbmdUb1VTdHJpbmco
cykpOwogfQogCi1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBVU3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
anNOdWxsKCk7Ci0gICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywgcyk7Ci19Ci0KIEpTVmFs
dWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykK
IHsKICAgICBpZiAocy5pc051bGwoKSkKQEAgLTY2Niw2ICs2NTcsMTYgQEAgdm9pZCBzZXRET01F
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeAogICAgIHRocm93RXJyb3IoZXhlYywgZXJyb3JP
YmplY3QpOwogfQogCitET01XaW5kb3cqIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+aW1wbCgpOworfQorCitET01XaW5kb3cqIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0
KCkpLT5pbXBsKCk7Cit9CisKIGJvb2wgY2hlY2tOb2RlU2VjdXJpdHkoRXhlY1N0YXRlKiBleGVj
LCBOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2RlICYmIGFsbG93c0FjY2Vzc0Zyb21GcmFt
ZShleGVjLCBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKQEAgLTY4NywyMiArNjg4LDYgQEAg
Ym9vbCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoRXhlY1N0YXRlKiBleAogICAgIHJldHVybiB3aW5k
b3cgJiYgd2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMsIG1lc3NhZ2UpOwogfQogCi1ib29s
IHNob3VsZEFsbG93TmF2aWdhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBmcmFtZSkKLXsK
LSAgICBKU0JpbmRpbmdTdGF0ZSBzdGF0ZShleGVjKTsKLSAgICByZXR1cm4gSlNCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93TmF2aWdhdGlvbigmc3RhdGUsIGZyYW1lKTsKLX0KLQotYm9vbCBh
bGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoRXhlY1N0YXRlKiBleGVjLCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
aWYgKChlbGVtZW50LT5oYXNUYWdOYW1lKGlmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZShmcmFtZVRhZykpICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzcmMiKSAmJiBwcm90b2Nv
bElzSmF2YVNjcmlwdChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModmFsdWUpKSkg
ewotICAgICAgICAgIERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
RnJhbWVFbGVtZW50QmFzZSo+KGVsZW1lbnQpLT5jb250ZW50RG9jdW1lbnQoKTsKLSAgICAgICAg
ICBpZiAoY29udGVudERvY3VtZW50ICYmICFjaGVja05vZGVTZWN1cml0eShleGVjLCBjb250ZW50
RG9jdW1lbnQpKQotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGlmICghZnJhbWUpCkBAIC03MTAs
MjUgKzY5NSwxNCBAQCB2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZyCiAg
ICAgZnJhbWUtPmRvbVdpbmRvdygpLT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKIH0KIAot
RnJhbWUqIHRvTGV4aWNhbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNC
aW5kaW5nU3RhdGUoZXhlYykuYWN0aXZlRnJhbWUoKTsKLX0KLQogRnJhbWUqIHRvRHluYW1pY0Zy
YW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gSlNCaW5kaW5nU3RhdGUoZXhlYyku
Zmlyc3RGcmFtZSgpOworICAgIHJldHVybiBmaXJzdERPTVdpbmRvdyhleGVjKS0+ZnJhbWUoKTsK
IH0KIAogYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQogewotICAgIHJldHVybiBKU0JpbmRp
bmdTdGF0ZShKU01haW5UaHJlYWRFeGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSgpKS5wcm9jZXNzaW5n
VXNlckdlc3R1cmUoKTsKLX0KLQotS1VSTCBjb21wbGV0ZVVSTChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpCi17Ci0gICAgSlNCaW5kaW5nU3RhdGUgc3RhdGUoZXhl
Yyk7Ci0gICAgcmV0dXJuIGNvbXBsZXRlVVJMKCZzdGF0ZSwgcmVsYXRpdmVVUkwpOworICAgIHJl
dHVybiBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAogSlNW
YWx1ZSBvYmplY3RUb1N0cmluZ0Z1bmN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQpAQCAtNzQ5LDI5ICs3MjMsNiBAQCBT
dHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsCiAgICAgcmV0dXJuIHN0cnVj
dHVyZXMuc2V0KGNsYXNzSW5mbywgc3RydWN0dXJlKS5maXJzdC0+c2Vjb25kLmdldCgpOwogfQog
Ci1TdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvKQotewotICAgIHJldHVybiBnZXRDYWNoZWRET01TdHJ1Y3R1
cmUoc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLCBjbGFzc0luZm8pOwotfQotCi1TdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEV4
ZWNTdGF0ZSogZXhlYywgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQotewotICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVy
ZShzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSksIHN0cnVjdHVyZSwgY2xhc3NJbmZvKTsKLX0KLQotSlNPYmplY3QqIGdldENhY2hlZERP
TUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8p
Ci17Ci0gICAgSlNET01Db25zdHJ1Y3Rvck1hcCYgY29uc3RydWN0b3JzID0gc3RhdGljX2Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5jb25zdHJ1
Y3RvcnMoKTsKLSAgICByZXR1cm4gY29uc3RydWN0b3JzLmdldChjbGFzc0luZm8pOwotfQotCi12
b2lkIGNhY2hlRE9NQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbywgSlNPYmplY3QqIGNvbnN0cnVjdG9yKQotewotICAgIEpTRE9NQ29uc3RydWN0
b3JNYXAmIGNvbnN0cnVjdG9ycyA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+Y29uc3RydWN0b3JzKCk7Ci0gICAgQVNTRVJUKCFj
b25zdHJ1Y3RvcnMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgY29uc3RydWN0b3JzLnNldChj
bGFzc0luZm8sIGNvbnN0cnVjdG9yKTsKLX0KLQogSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkKIHsKICAg
ICBKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDc0Njk0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDExICsxMzIsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0
dXJlKEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKICAgICBKU0M6
OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QqLCBOb25OdWxs
UGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7Ci0gICAg
SlNDOjpTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvKik7Ci0gICAgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0
dXJlKEpTQzo6RXhlY1N0YXRlKiwgTm9uTnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBj
b25zdCBKU0M6OkNsYXNzSW5mbyopOwotCi0gICAgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkRE9N
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwotICAg
IHZvaWQgY2FjaGVET01Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6Q2xh
c3NJbmZvKiwgSlNDOjpKU09iamVjdCogY29uc3RydWN0b3IpOwogCiAgICAgaW5saW5lIEpTRE9N
R2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQogICAgIHsKQEAgLTIyNSwxMCArMjIwLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIEpTQzo6SlNWYWx1ZSBqc1N0cmluZ09yRmFsc2UoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmKTsgLy8gYm9vbGVhbiBmYWxzZSBpZiB0aGUgc3RyaW5nIGlzIG51bGwKICAg
ICBKU0M6OkpTVmFsdWUganNTdHJpbmdPckZhbHNlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgS1VS
TCYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBVUkwgaXMgbnVsbAogCi0gICAgLy8gU2VlIEph
dmFTY3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFueSBVU3Ry
aW5nIHRoYXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCisgICAgLy8gU2VlIEphdmFTY3Jp
cHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFueSBzdHJpbmcgdGhh
dCBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKICAgICAvLyBvYmplY3QsIHRvIGxldCB0aGUg
ZW5naW5lIGtub3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlr
ZWx5IHRvIHNhdmUgbWVtb3J5LgogICAgIEpTQzo6SlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxs
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IAotICAgIEpTQzo6SlNWYWx1ZSBqc093
bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpVU3RyaW5nJik7IAog
CiAgICAgU3RyaW5nIGlkZW50aWZpZXJUb1N0cmluZyhjb25zdCBKU0M6OklkZW50aWZpZXImKTsK
ICAgICBTdHJpbmcgdXN0cmluZ1RvU3RyaW5nKGNvbnN0IEpTQzo6VVN0cmluZyYpOwpAQCAtMjg0
LDE4ICsyNzgsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEhlbHBlcnMgZm9yIFdp
bmRvdywgSGlzdG9yeSwgYW5kIExvY2F0aW9uIGNsYXNzZXMgdG8gaW1wbGVtZW50IGNyb3NzLWRv
bWFpbiBwb2xpY3kuCiAgICAgLy8gQmVzaWRlcyB0aGUgY3Jvc3MtZG9tYWluIGNoZWNrLCB0aGV5
IG5lZWQgbm9uLWNhY2hpbmcgdmVyc2lvbnMgb2Ygc3RhdGljRnVuY3Rpb25HZXR0ZXIgZm9yCiAg
ICAgLy8gYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCBjdXJyZW50IHByb3BlcnR5IHZhbHVlcyBpbnZv
bHZlZCBhdCBhbGwuCisgICAgLy8gRklYTUU6IFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgbmFt
ZWQgZnJhbWVBbGxvd3NBY2Nlc3NGcm9tLCBiZWNhdXNlIHRoZSBhY2Nlc3MgaXMgKnRvKiB0aGUg
ZnJhbWUuCiAgICAgYm9vbCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBG
cmFtZSopOwogICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKEpTQzo6RXhlY1N0YXRlKiwg
RnJhbWUqLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqKTsKLSAgICBib29sIGFsbG93U2V0dGluZ1NyY1RvSmF2
YXNjcmlwdFVSTChKU0M6OkV4ZWNTdGF0ZSosIEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmKTsKKyAgICBET01XaW5kb3cqIGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0
ZSopOworICAgIERPTVdpbmRvdyogZmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKIAog
ICAgIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSk7CiAgICAgSlNDOjpKU1ZhbHVlIG9iamVjdFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKTsKIAotICAgIEZyYW1lKiB0b0xleGljYWxGcmFtZShKU0M6OkV4ZWNTdGF0ZSop
OwogICAgIEZyYW1lKiB0b0R5bmFtaWNGcmFtZShKU0M6OkV4ZWNTdGF0ZSopOwogICAgIGJvb2wg
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7Ci0gICAgS1VSTCBjb21wbGV0ZVVSTChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpOwogICAgIAogICAgIGlubGluZSBKU0M6
OkpTVmFsdWUganNTdHJpbmcoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykK
ICAgICB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAko
cmV2aXNpb24gNzQ2OTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMjEgKzIwLDExIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKIAotI2luY2x1ZGUgIkNocm9tZS5o
IgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSlNBdWRpb0NvbnN0cnVjdG9yLmgiCi0jaW5j
bHVkZSAiSlNET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRl
ICJKU0V2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU0V2ZW50U291cmNlLmgiCkBAIC00Myw3
ICszMyw2IEBACiAjaW5jbHVkZSAiSlNJbWFnZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNM
b2NhdGlvbi5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWwuaCIKLSNpbmNsdWRlICJKU01l
c3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydEN1c3RvbS5oIgogI2luY2x1ZGUg
IkpTT3B0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU1dlYktpdENTU01hdHJpeC5oIgpA
QCAtNTMsMjIgKzQyLDEwIEBACiAjaW5jbHVkZSAiSlNYU0xUUHJvY2Vzc29yLmgiCiAjaW5jbHVk
ZSAiTG9jYXRpb24uaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgotI2luY2x1ZGUgIk1lc3Nh
Z2VQb3J0LmgiCi0jaW5jbHVkZSAiTm90aWZpY2F0aW9uQ2VudGVyLmgiCi0jaW5jbHVkZSAiUGFn
ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCi0jaW5jbHVkZSAiUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTY2hlZHVsZWRBY3Rpb24uaCIKLSNpbmNsdWRlICJT
Y3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5Lmgi
Ci0jaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09i
amVjdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvUHJvdG90eXBlRnVuY3Rpb24uaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpIHx8IEVO
QUJMRShCTE9CKQogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKQEAgLTQ5MCwxMyArNDY3LDEw
IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OmxvY2F0aW9uKEV4ZWNTdGF0ZSoKIAogdm9pZCBKU0RP
TVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIERPTVdpbmRvdyogYWN0aXZlV2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7Ci0gICAgRE9NV2luZG93KiBmaXJzdFdpbmRvdyA9IGFz
SlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpOwotCiAjaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgIC8vIFRvIGF2b2lkIGJyZWFraW5nIG9sZCB3
aWRnZXRzLCBtYWtlICJ2YXIgbG9jYXRpb24gPSIgaW4gYSB0b3AtbGV2ZWwgZnJhbWUgY3JlYXRl
CiAgICAgLy8gYSBwcm9wZXJ0eSBuYW1lZCAibG9jYXRpb24iIGluc3RlYWQgb2YgcGVyZm9ybWlu
ZyBhIG5hdmlnYXRpb24gKDxyZGFyOi8vcHJvYmxlbS81Njg4MDM5PikuCi0gICAgaWYgKEZyYW1l
KiBhY3RpdmVGcmFtZSA9IGFjdGl2ZVdpbmRvdy0+ZnJhbWUoKSkgeworICAgIGlmIChGcmFtZSog
YWN0aXZlRnJhbWUgPSBhY3RpdmVET01XaW5kb3coZXhlYyktPmZyYW1lKCkpIHsKICAgICAgICAg
aWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGFjdGl2ZUZyYW1lLT5zZXR0aW5ncygpKSB7CiAgICAg
ICAgICAgICBpZiAoc2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlN
b2RlKCkgJiYgIWFjdGl2ZUZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCkBAIC01MTEsNyArNDg1LDcgQEAgdm9pZCBK
U0RPTVdpbmRvdzo6c2V0TG9jYXRpb24oRXhlY1N0YXRlKgogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW1wbCgpLT5zZXRMb2NhdGlvbih1c3Ry
aW5nVG9TdHJpbmcobG9jYXRpb25TdHJpbmcpLCBhY3RpdmVXaW5kb3csIGZpcnN0V2luZG93KTsK
KyAgICBpbXBsKCktPnNldExvY2F0aW9uKHVzdHJpbmdUb1N0cmluZyhsb2NhdGlvblN0cmluZyks
IGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwogfQogCiBKU1Zh
bHVlIEpTRE9NV2luZG93OjpjcnlwdG8oRXhlY1N0YXRlKikgY29uc3QKQEAgLTY2OSw5ICs2NDMs
NiBAQCBKU1ZhbHVlIEpTRE9NV2luZG93Ojp3ZWJTb2NrZXQoRXhlY1N0YXRlCiAKIEpTVmFsdWUg
SlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQogewotICAgIERPTVdpbmRvdyogYWN0
aXZlV2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5p
bXBsKCk7Ci0gICAgRE9NV2luZG93KiBmaXJzdFdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgpOwotCiAgICAgU3RyaW5nIHVybFN0cmluZyA9
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1l
bnQoMCkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CkBAIC02ODIsNyArNjUzLDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6b3Bl
bihFeGVjU3RhdGUqIGV4ZQogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5k
b3cgPSBpbXBsKCktPm9wZW4odXJsU3RyaW5nLCBmcmFtZU5hbWUsIHdpbmRvd0ZlYXR1cmVzU3Ry
aW5nLCBhY3RpdmVXaW5kb3csIGZpcnN0V2luZG93KTsKKyAgICBSZWZQdHI8RE9NV2luZG93PiBv
cGVuZWRXaW5kb3cgPSBpbXBsKCktPm9wZW4odXJsU3RyaW5nLCBmcmFtZU5hbWUsIHdpbmRvd0Zl
YXR1cmVzU3RyaW5nLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMp
KTsKICAgICBpZiAoIW9wZW5lZFdpbmRvdykKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgb3BlbmVkV2luZG93LmdldCgpKTsKQEAgLTczMSw5ICs3
MDIsNiBAQCBzdGF0aWMgdm9pZCBzZXRVcERpYWxvZyhET01XaW5kb3cqIGRpYWxvCiAKIEpTVmFs
dWUgSlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
RE9NV2luZG93KiBhY3RpdmVXaW5kb3cgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPmltcGwoKTsKLSAgICBET01XaW5kb3cqIGZpcnN0V2luZG93ID0gYXNKU0RP
TVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7Ci0KICAgICBTdHJp
bmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVj
LCBleGVjLT5hcmd1bWVudCgwKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTc0MywxNSArNzExLDEzIEBAIEpTVmFsdWUg
SlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyhFeGUKIAogICAgIERpYWxvZ0hhbmRsZXIgaGFu
ZGxlcihleGVjKTsKIAotICAgIGltcGwoKS0+c2hvd01vZGFsRGlhbG9nKHVybFN0cmluZywgZGlh
bG9nRmVhdHVyZXNTdHJpbmcsIGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3csIHNldFVwRGlhbG9n
LCAmaGFuZGxlcik7CisgICAgaW1wbCgpLT5zaG93TW9kYWxEaWFsb2codXJsU3RyaW5nLCBkaWFs
b2dGZWF0dXJlc1N0cmluZywgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhl
eGVjKSwgc2V0VXBEaWFsb2csICZoYW5kbGVyKTsKIAogICAgIHJldHVybiBoYW5kbGVyLnJldHVy
blZhbHVlKCk7CiB9CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdyA9IGFzSlNET01XaW5kb3co
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpOwotCiAgICAgUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZShleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCkBAIC03NjgsNyArNzM0LDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cG9zdE1lc3Nh
Z2UoRXhlY1N0YQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGltcGwoKS0+cG9zdE1lc3NhZ2UobWVzc2FnZSwgJm1lc3NhZ2VQ
b3J0cywgdGFyZ2V0T3JpZ2luLCBhY3RpdmVXaW5kb3csIGVjKTsKKyAgICBpbXBsKCktPnBvc3RN
ZXNzYWdlKG1lc3NhZ2UsICZtZXNzYWdlUG9ydHMsIHRhcmdldE9yaWdpbiwgYWN0aXZlRE9NV2lu
ZG93KGV4ZWMpLCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9u
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25D
dXN0b20uY3BwCShyZXZpc2lvbiA3NDY5NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2Nh
dGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHly
aWdodCAoQykgMjAwNiBKb24gU2hpZXIgKGpzaGllckBpYXN0YXRlLmVkdSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2V2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNldmVkLgogICogIENv
cHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCkBAIC0yMywxOSArMjMsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpTTG9jYXRpb25DdXN0b20uaCIKIAotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCi0jaW5jbHVkZSAiSlNCaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNCaW5kaW5nU3Rh
dGUuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0N1
c3RvbS5oIgotI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJMb2NhdGlvbi5oIgotI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4K
LSNpbmNsdWRlIDxydW50aW1lL1Byb3RvdHlwZUZ1bmN0aW9uLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKQEAgLTE4NiwxNTIgKzE3NSw5MyBAQCB2b2lkIEpTTG9jYXRpb246OmRlZmluZUdl
dHRlcihFeGVjU3RhdGUqCiAgICAgQmFzZTo6ZGVmaW5lR2V0dGVyKGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZ2V0dGVyRnVuY3Rpb24sIGF0dHJpYnV0ZXMpOwogfQogCi1zdGF0aWMgdm9pZCBuYXZpZ2F0
ZUlmQWxsb3dlZChFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBmcmFtZSwgY29uc3QgS1VSTCYgdXJs
LCBib29sIGxvY2tIaXN0b3J5LCBib29sIGxvY2tCYWNrRm9yd2FyZExpc3QpCi17Ci0gICAgSlNC
aW5kaW5nU3RhdGUgc3RhdGUoZXhlYyk7Ci0gICAgSlNCaW5kaW5nOjpGcmFtZTo6bmF2aWdhdGVJ
ZkFsbG93ZWQoJnN0YXRlLCBmcmFtZSwgdXJsLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJk
TGlzdCk7Ci19Ci0KIHZvaWQgSlNMb2NhdGlvbjo6c2V0SHJlZihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwotICAg
IEFTU0VSVChmcmFtZSk7Ci0KLSAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIHVzdHJp
bmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwotICAgIGlmICh1cmwuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGV4ZWMs
IGZyYW1lKSkKKyAgICBVU3RyaW5nIGhyZWYgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIG5hdmlnYXRl
SWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsICFmcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1By
b2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7CisgICAgaW1wbCgpLT5zZXRIcmVmKHVzdHJp
bmdUb1N0cmluZyhocmVmKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhl
eGVjKSk7CiB9CiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0UHJvdG9jb2woRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJhbWUoKTsK
LSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPnVy
bCgpOwotICAgIGlmICghdXJsLnNldFByb3RvY29sKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0
cmluZyhleGVjKSkpKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTWU5UQVhfRVJS
KTsKKyAgICBVU3RyaW5nIHByb3RvY29sID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbmF2
aWdhdGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVybCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFn
ZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlKTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBpbXBsKCktPnNldFByb3RvY29sKHVzdHJpbmdUb1N0cmluZyhwcm90b2NvbCks
IGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYyksIGVjKTsKKyAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogfQogCiB2b2lkIEpTTG9jYXRpb246OnNldEhvc3Qo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGlt
cGwoKS0+ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgS1VSTCB1cmwgPSBmcmFt
ZS0+bG9hZGVyKCktPnVybCgpOwotICAgIHVybC5zZXRIb3N0QW5kUG9ydCh1c3RyaW5nVG9TdHJp
bmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKLQotICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMs
IGZyYW1lLCB1cmwsICFmcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpLCBmYWxzZSk7CisgICAgVVN0cmluZyBob3N0ID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgaW1w
bCgpLT5zZXRIb3N0KHVzdHJpbmdUb1N0cmluZyhob3N0KSwgYWN0aXZlRE9NV2luZG93KGV4ZWMp
LCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CiB9CiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdG5h
bWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEZyYW1lKiBmcmFtZSA9
IGltcGwoKS0+ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgS1VSTCB1cmwgPSBm
cmFtZS0+bG9hZGVyKCktPnVybCgpOwotICAgIHVybC5zZXRIb3N0KHVzdHJpbmdUb1N0cmluZyh2
YWx1ZS50b1N0cmluZyhleGVjKSkpOwotCi0gICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhlYywgZnJh
bWUsIHVybCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJl
KCksIGZhbHNlKTsKKyAgICBVU3RyaW5nIGhvc3RuYW1lID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgaW1w
bCgpLT5zZXRIb3N0KHVzdHJpbmdUb1N0cmluZyhob3N0bmFtZSksIGFjdGl2ZURPTVdpbmRvdyhl
eGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwogfQogCiB2b2lkIEpTTG9jYXRpb246OnNldFBv
cnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEZyYW1lKiBmcmFtZSA9
IGltcGwoKS0+ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgS1VSTCB1cmwgPSBm
cmFtZS0+bG9hZGVyKCktPnVybCgpOwotICAgIC8vIEZJWE1FOiBDb3VsZCBtYWtlIHRoaXMgYSBs
aXR0bGUgbGVzcyB1Z2x5IGlmIFN0cmluZyBwcm92aWRlZCBhIHRvVW5zaWduZWRTaG9ydCBmdW5j
dGlvbi4KLSAgICBjb25zdCBVU3RyaW5nJiBwb3J0U3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgaW50IHBvcnQgPSBjaGFyYWN0ZXJzVG9JbnQocG9ydFN0cmluZy5jaGFyYWN0ZXJz
KCksIHBvcnRTdHJpbmcubGVuZ3RoKCkpOwotICAgIGlmIChwb3J0IDwgMCB8fCBwb3J0ID4gMHhG
RkZGKQotICAgICAgICB1cmwucmVtb3ZlUG9ydCgpOwotICAgIGVsc2UKLSAgICAgICAgdXJsLnNl
dFBvcnQocG9ydCk7Ci0KLSAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCAh
ZnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2Up
OworICAgIFVTdHJpbmcgcG9ydCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0SG9zdCh1
c3RyaW5nVG9TdHJpbmcocG9ydCksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5k
b3coZXhlYykpOwogfQogCiB2b2lkIEpTTG9jYXRpb246OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1l
KCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigp
LT51cmwoKTsKLSAgICB1cmwuc2V0UGF0aCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmco
ZXhlYykpKTsKLQotICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsICFmcmFt
ZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7Cisg
ICAgVVN0cmluZyBwYXRobmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0SG9zdCh1
c3RyaW5nVG9TdHJpbmcocGF0aG5hbWUpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9N
V2luZG93KGV4ZWMpKTsKIH0KIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRTZWFyY2goRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+ZnJh
bWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9hZGVy
KCktPnVybCgpOwotICAgIHVybC5zZXRRdWVyeSh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJp
bmcoZXhlYykpKTsKLQotICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsICFm
cmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7
CisgICAgVVN0cmluZyBwYXRobmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0U2Vh
cmNoKHVzdHJpbmdUb1N0cmluZyhwYXRobmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmly
c3RET01XaW5kb3coZXhlYykpOwogfQogCiB2b2lkIEpTTG9jYXRpb246OnNldEhhc2goRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGltcGwoKS0+
ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9h
ZGVyKCktPnVybCgpOwotICAgIFN0cmluZyBvbGRGcmFnbWVudElkZW50aWZpZXIgPSB1cmwuZnJh
Z21lbnRJZGVudGlmaWVyKCk7Ci0gICAgU3RyaW5nIHN0ciA9IHVzdHJpbmdUb1N0cmluZyh2YWx1
ZS50b1N0cmluZyhleGVjKSk7Ci0gICAgaWYgKHN0ci5zdGFydHNXaXRoKCIjIikpCi0gICAgICAg
IHN0ciA9IHN0ci5zdWJzdHJpbmcoMSk7Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdOdWxsaXR5KG9s
ZEZyYWdtZW50SWRlbnRpZmllciwgc3RyKSkKKyAgICBVU3RyaW5nIGhhc2ggPSB2YWx1ZS50b1N0
cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICB1cmwuc2V0RnJhZ21lbnRJZGVudGlmaWVyKHN0cik7Ci0KLSAgICBuYXZpZ2F0ZUlm
QWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCAhZnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9j
ZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOworICAgIGltcGwoKS0+c2V0U2VhcmNoKHVzdHJp
bmdUb1N0cmluZyhoYXNoKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhl
eGVjKSk7CiB9CiAKIEpTVmFsdWUgSlNMb2NhdGlvbjo6cmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgSlNCaW5kaW5nU3RhdGUgc3RhdGUoZXhlYyk7Ci0gICAgSlNCaW5kaW5nOjpMb2Nh
dGlvbjo6cmVwbGFjZSgmc3RhdGUsIGltcGwoKSwgdXN0cmluZ1RvU3RyaW5nKGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5h
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGltcGwoKS0+cmVwbGFjZSh1c3Ry
aW5nVG9TdHJpbmcodXJsU3RyaW5nKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdp
bmRvdyhleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIEpTVmFsdWUgSlNM
b2NhdGlvbjo6cmVsb2FkKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBp
bXBsKCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhYWxsb3dzQWNjZXNzRnJvbUZyYW1l
KGV4ZWMsIGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBpZiAo
IXByb3RvY29sSXNKYXZhU2NyaXB0KGZyYW1lLT5sb2FkZXIoKS0+dXJsKCkpKQotICAgICAgICBm
cmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZVJlZnJlc2goKTsKKyAgICBpbXBs
KCktPnJlbG9hZChhY3RpdmVET01XaW5kb3coZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCiBKU1ZhbHVlIEpTTG9jYXRpb246OmFzc2lnbihFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCisg
ICAgVVN0cmluZyB1cmxTdHJpbmcgPSBleGVjLT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotCi0gICAgS1VSTCB1cmwgPSBjb21wbGV0ZVVSTChleGVjLCB1c3RyaW5nVG9TdHJpbmco
ZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYykpKTsKLSAgICBpZiAodXJsLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGlmICghc2hvdWxkQWxsb3dO
YXZpZ2F0aW9uKGV4ZWMsIGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0K
LSAgICAvLyBXZSB3YW50IGEgbmV3IGhpc3RvcnkgaXRlbSBpZiB0aGlzIEpTIHdhcyBjYWxsZWQg
dmlhIGEgdXNlciBnZXN0dXJlCi0gICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVy
bCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZh
bHNlKTsKKyAgICBpbXBsKCktPmFzc2lnbih1c3RyaW5nVG9TdHJpbmcodXJsU3RyaW5nKSwgYWN0
aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvc3BlY2lhbGl6YXRp
b24vSlNCaW5kaW5nU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
c3BlY2lhbGl6YXRpb24vSlNCaW5kaW5nU3RhdGUuY3BwCShyZXZpc2lvbiA3NDY5NCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvc3BlY2lhbGl6YXRpb24vSlNCaW5kaW5nU3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYzICsxIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpT
QmluZGluZ1N0YXRlLmgiCi0KLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCi0jaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZyYW1lOwot
Ci1GcmFtZSogU3RhdGU8SlNCaW5kaW5nPjo6YWN0aXZlRnJhbWUoKQotewotICAgIHJldHVybiBh
c0pTRE9NV2luZG93KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+aW1wbCgpLT5mcmFt
ZSgpOwotfQotCi1GcmFtZSogU3RhdGU8SlNCaW5kaW5nPjo6Zmlyc3RGcmFtZSgpCi17Ci0gICAg
cmV0dXJuIGFzSlNET01XaW5kb3cobV9leGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBs
KCktPmZyYW1lKCk7Ci19Ci0KLWJvb2wgU3RhdGU8SlNCaW5kaW5nPjo6cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCkKLXsKLSAgICByZXR1cm4gU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKCk7Ci19Ci0KLWJvb2wgU3RhdGU8SlNCaW5kaW5nPjo6YWxsb3dzQWNjZXNzRnJvbUZy
YW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6YWxsb3dzQWNjZXNzRnJv
bUZyYW1lKG1fZXhlYywgZnJhbWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisvLyBP
bmNlIHJlZmVyZW5jZXMgdG8gdGhpcyBmaWxlIGFyZSByZW1vdmVkIGZyb20gYnVpbGQgZmlsZXMs
IHRoaXMgZmlsZSBzaG91bGQgYmUgZGVsZXRlZC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
c3BlY2lhbGl6YXRpb24vSlNCaW5kaW5nU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL3NwZWNpYWxpemF0aW9uL0pTQmluZGluZ1N0YXRlLmgJKHJldmlzaW9uIDc0Njk0
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9zcGVjaWFsaXphdGlvbi9KU0JpbmRpbmdTdGF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICsxLDIgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEpTQmluZGluZ1N0YXRlX2gK
LSNkZWZpbmUgSlNCaW5kaW5nU3RhdGVfaAotCi0jaW5jbHVkZSAiR2VuZXJpY0JpbmRpbmcuaCIK
LSNpbmNsdWRlICJKU0JpbmRpbmcuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEV4ZWNT
dGF0ZTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRnJhbWU7Ci0KLXRlbXBsYXRlIDw+Ci1jbGFzcyBTdGF0ZTxKU0JpbmRpbmc+IDogcHVibGlj
IFN0YXRlPEdlbmVyaWNCaW5kaW5nPiB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RhdGUoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgIDogbV9leGVjKGV4ZWMpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgflN0YXRlKCkKLSAgICB7Ci0gICAgfQotCi0gICAgRnJhbWUqIGFjdGl2
ZUZyYW1lKCk7Ci0gICAgRnJhbWUqIGZpcnN0RnJhbWUoKTsKLQotICAgIGJvb2wgcHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgc2hhcmVkIGlu
IEJpbmRpbmdTZWN1cml0eQotICAgIGJvb2wgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKEZyYW1lKik7
Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpFeGVjU3RhdGUqIG1fZXhlYzsKLX07Ci0KLXR5cGVkZWYg
U3RhdGU8SlNCaW5kaW5nPiBKU0JpbmRpbmdTdGF0ZTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gSlNCaW5kaW5nU3RhdGVfaAorLy8gT25jZSByZWZlcmVuY2VzIHRvIHRo
aXMgZmlsZSBhcmUgcmVtb3ZlZCBmcm9tIGJ1aWxkIGZpbGVzLCB0aGlzIGZpbGUgc2hvdWxkIGJl
IGRlbGV0ZWQuCisjZXJyb3IKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiA3NDY5NCkKKysr
IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjA4LDcgKzE2
MDgsOCBAQCB2b2lkIERPTVdpbmRvdzo6cmV2b2tlT2JqZWN0VVJMKGNvbnN0IFN0CiB9CiAjZW5k
aWYKIAotdm9pZCBET01XaW5kb3c6OnNldExvY2F0aW9uKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
LCBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdykKK3ZvaWQg
RE9NV2luZG93OjpzZXRMb2NhdGlvbihjb25zdCBTdHJpbmcmIHVybFN0cmluZywgRE9NV2luZG93
KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3csCisgICAgU2V0TG9jYXRpb25M
b2NraW5nIGxvY2tpbmcpCiB7CiAgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gYWN0aXZlV2luZG93
LT5mcmFtZSgpOwogICAgIGlmICghYWN0aXZlRnJhbWUpCkBAIC0xNjMxLDcgKzE2MzIsOCBAQCB2
b2lkIERPTVdpbmRvdzo6c2V0TG9jYXRpb24oY29uc3QgU3RyaW5nCiAgICAgLy8gV2Ugd2FudCBh
IG5ldyBoaXN0b3J5IGl0ZW0gaWYgd2UgYXJlIHByb2Nlc3NpbmcgYSB1c2VyIGdlc3R1cmUuCiAg
ICAgbV9mcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdl
KGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLAogICAgICAgICBjb21w
bGV0ZWRVUkwsIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdSZWZlcnJlcigpLAotICAg
ICAgICAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSwgZmFsc2UpOworICAgICAgICBsb2NraW5nICE9IExvY2tIaXN0b3J5QmFzZWRPbkdlc3R1
cmVTdGF0ZSB8fCAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKSwKKyAgICAgICAgbG9ja2luZyAhPSBMb2NrSGlzdG9yeUJhc2VkT25HZXN0dXJl
U3RhdGUpOwogfQogCiB2b2lkIERPTVdpbmRvdzo6cHJpbnRFcnJvck1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAkocmV2aXNpb24gNzQ2OTQpCisrKyBXZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAorICAgIGVu
dW0gU2V0TG9jYXRpb25Mb2NraW5nIHsgTG9ja0hpc3RvcnlCYXNlZE9uR2VzdHVyZVN0YXRlLCBM
b2NrSGlzdG9yeUFuZEJhY2tGb3J3YXJkTGlzdCB9OworCiAgICAgY2xhc3MgRE9NV2luZG93IDog
cHVibGljIFJlZkNvdW50ZWQ8RE9NV2luZG93PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVdpbmRvdz4gY3JlYXRlKEZyYW1l
KiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IERPTVdpbmRvdyhmcmFtZSkpOyB9CkBAIC0x
MTgsNyArMTIwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBOYXZpZ2F0b3IqIGNs
aWVudEluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbmF2aWdhdG9yKCk7IH0KIAogICAgICAg
ICBMb2NhdGlvbiogbG9jYXRpb24oKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRMb2NhdGlvbihj
b25zdCBTdHJpbmcmIGxvY2F0aW9uLCBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93
KiBmaXJzdFdpbmRvdyk7CisgICAgICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJiBs
b2NhdGlvbiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3cs
CisgICAgICAgICAgICBTZXRMb2NhdGlvbkxvY2tpbmcgPSBMb2NrSGlzdG9yeUJhc2VkT25HZXN0
dXJlU3RhdGUpOwogCiAgICAgICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCk7CiAKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0xvY2F0aW9uLmNwcAkocmV2aXNpb24gNzQ2OTQpCisrKyBXZWJDb3JlL3BhZ2UvTG9jYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOSwxMCArMjksMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJMb2NhdGlvbi5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJLVVJM
LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01Miw3ICs1Miw3IEBAIGlubGluZSBjb25zdCBLVVJMJiBMb2NhdGlvbjo6dXJsKCkgY29u
c3QKIAogICAgIGNvbnN0IEtVUkwmIHVybCA9IG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKICAg
ICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBibGFua1VSTCgpOyAgLy8gVXNl
ICJhYm91dDpibGFuayIgd2hpbGUgdGhlIHBhZ2UgaXMgc3RpbGwgbG9hZGluZyAoYmVmb3JlIHdl
IGhhdmUgYSBmcmFtZSkuCisgICAgICAgIHJldHVybiBibGFua1VSTCgpOyAvLyBVc2UgImFib3V0
OmJsYW5rIiB3aGlsZSB0aGUgcGFnZSBpcyBzdGlsbCBsb2FkaW5nIChiZWZvcmUgd2UgaGF2ZSBh
IGZyYW1lKS4KIAogICAgIHJldHVybiB1cmw7CiB9CkBAIC0xMjQsOSArMTI0LDcgQEAgU3RyaW5n
IExvY2F0aW9uOjpvcmlnaW4oKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCgpKTsKLSAgICByZXR1cm4gb3JpZ2luLT50b1N0cmlu
ZygpOworICAgIHJldHVybiBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCgpKS0+dG9TdHJpbmco
KTsKIH0KIAogU3RyaW5nIExvY2F0aW9uOjpoYXNoKCkgY29uc3QKQEAgLTEzNCw3ICsxMzIsNyBA
QCBTdHJpbmcgTG9jYXRpb246Omhhc2goKSBjb25zdAogICAgIGlmICghbV9mcmFtZSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgY29uc3QgU3RyaW5nJiBmcmFnbWVudElkZW50aWZp
ZXIgPSB0aGlzLT51cmwoKS5mcmFnbWVudElkZW50aWZpZXIoKTsKKyAgICBjb25zdCBTdHJpbmcm
IGZyYWdtZW50SWRlbnRpZmllciA9IHVybCgpLmZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIHJl
dHVybiBmcmFnbWVudElkZW50aWZpZXIuaXNFbXB0eSgpID8gIiIgOiAiIyIgKyBmcmFnbWVudElk
ZW50aWZpZXI7CiB9CiAKQEAgLTE1Nyw0ICsxNTUsMTE4IEBAIFN0cmluZyBMb2NhdGlvbjo6dG9T
dHJpbmcoKSBjb25zdAogICAgIHJldHVybiB1cmwuaGFzUGF0aCgpID8gdXJsLnByZXR0eVVSTCgp
IDogdXJsLnByZXR0eVVSTCgpICsgIi8iOwogfQogCit2b2lkIExvY2F0aW9uOjpzZXRIcmVmKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nLCBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93
KiBmaXJzdFdpbmRvdykKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0TG9jYXRpb24odXJsU3RyaW5nLCBhY3RpdmVXaW5k
b3csIGZpcnN0V2luZG93KTsKK30KKwordm9pZCBMb2NhdGlvbjo6c2V0UHJvdG9jb2woY29uc3Qg
U3RyaW5nJiBwcm90b2NvbCwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmly
c3RXaW5kb3csIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIEtVUkwgdXJsID0gbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpOworICAg
IGlmICghdXJsLnNldFByb3RvY29sKHByb3RvY29sKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPnNl
dExvY2F0aW9uKHVybC5zdHJpbmcoKSwgYWN0aXZlV2luZG93LCBmaXJzdFdpbmRvdyk7Cit9CisK
K3ZvaWQgTG9jYXRpb246OnNldEhvc3QoY29uc3QgU3RyaW5nJiBob3N0LCBET01XaW5kb3cqIGFj
dGl2ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdykKK3sKKyAgICBpZiAoIW1fZnJhbWUp
CisgICAgICAgIHJldHVybjsKKyAgICBLVVJMIHVybCA9IG1fZnJhbWUtPmxvYWRlcigpLT51cmwo
KTsKKyAgICB1cmwuc2V0SG9zdEFuZFBvcnQoaG9zdCk7CisgICAgbV9mcmFtZS0+ZG9tV2luZG93
KCktPnNldExvY2F0aW9uKHVybC5zdHJpbmcoKSwgYWN0aXZlV2luZG93LCBmaXJzdFdpbmRvdyk7
Cit9CisKK3ZvaWQgTG9jYXRpb246OnNldEhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUs
IERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQoreworICAg
IGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEtVUkwgdXJsID0gbV9mcmFtZS0+
bG9hZGVyKCktPnVybCgpOworICAgIHVybC5zZXRIb3N0KGhvc3RuYW1lKTsKKyAgICBtX2ZyYW1l
LT5kb21XaW5kb3coKS0+c2V0TG9jYXRpb24odXJsLnN0cmluZygpLCBhY3RpdmVXaW5kb3csIGZp
cnN0V2luZG93KTsKK30KKwordm9pZCBMb2NhdGlvbjo6c2V0UG9ydChjb25zdCBTdHJpbmcmIHBv
cnRTdHJpbmcsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93
KQoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEtVUkwgdXJsID0g
bV9mcmFtZS0+bG9hZGVyKCktPnVybCgpOworICAgIGludCBwb3J0ID0gcG9ydFN0cmluZy50b0lu
dCgpOworICAgIGlmIChwb3J0IDwgMCB8fCBwb3J0ID4gMHhGRkZGKQorICAgICAgICB1cmwucmVt
b3ZlUG9ydCgpOworICAgIGVsc2UKKyAgICAgICAgdXJsLnNldFBvcnQocG9ydCk7CisgICAgbV9m
cmFtZS0+ZG9tV2luZG93KCktPnNldExvY2F0aW9uKHVybC5zdHJpbmcoKSwgYWN0aXZlV2luZG93
LCBmaXJzdFdpbmRvdyk7Cit9CisKK3ZvaWQgTG9jYXRpb246OnNldFBhdGhuYW1lKGNvbnN0IFN0
cmluZyYgcGF0aG5hbWUsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0
V2luZG93KQoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEtVUkwg
dXJsID0gbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpOworICAgIHVybC5zZXRQYXRoKHBhdGhuYW1l
KTsKKyAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0TG9jYXRpb24odXJsLnN0cmluZygpLCBh
Y3RpdmVXaW5kb3csIGZpcnN0V2luZG93KTsKK30KKwordm9pZCBMb2NhdGlvbjo6c2V0U2VhcmNo
KGNvbnN0IFN0cmluZyYgc2VhcmNoLCBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93
KiBmaXJzdFdpbmRvdykKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAg
ICBLVVJMIHVybCA9IG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKKyAgICB1cmwuc2V0UXVlcnko
c2VhcmNoKTsKKyAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0TG9jYXRpb24odXJsLnN0cmlu
ZygpLCBhY3RpdmVXaW5kb3csIGZpcnN0V2luZG93KTsKK30KKwordm9pZCBMb2NhdGlvbjo6c2V0
SGFzaChjb25zdCBTdHJpbmcmIGhhc2gsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5k
b3cqIGZpcnN0V2luZG93KQoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEtVUkwgdXJsID0gbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpOworICAgIFN0cmluZyBvbGRG
cmFnbWVudElkZW50aWZpZXIgPSB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCk7CisgICAgU3RyaW5n
IG5ld0ZyYWdtZW50SWRlbnRpZmllciA9IGhhc2g7CisgICAgaWYgKGhhc2hbMF0gPT0gJyMnKQor
ICAgICAgICBuZXdGcmFnbWVudElkZW50aWZpZXIgPSBoYXNoLnN1YnN0cmluZygxKTsKKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ051bGxpdHkob2xkRnJhZ21lbnRJZGVudGlmaWVyLCBuZXdGcmFnbWVu
dElkZW50aWZpZXIpKQorICAgICAgICByZXR1cm47CisgICAgdXJsLnNldEZyYWdtZW50SWRlbnRp
ZmllcihuZXdGcmFnbWVudElkZW50aWZpZXIpOworICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5z
ZXRMb2NhdGlvbih1cmwuc3RyaW5nKCksIGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3cpOworfQor
Cit2b2lkIExvY2F0aW9uOjphc3NpZ24oY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIERPTVdpbmRv
dyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQoreworICAgIGlmICghbV9m
cmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5zZXRMb2Nh
dGlvbih1cmxTdHJpbmcsIGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3cpOworfQorCit2b2lkIExv
Y2F0aW9uOjpyZXBsYWNlKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBET01XaW5kb3cqIGFjdGl2
ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdykKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0TG9jYXRpb24odXJs
U3RyaW5nLCBhY3RpdmVXaW5kb3csIGZpcnN0V2luZG93LCBMb2NrSGlzdG9yeUFuZEJhY2tGb3J3
YXJkTGlzdCk7Cit9CisKK3ZvaWQgTG9jYXRpb246OnJlbG9hZChET01XaW5kb3cqIGFjdGl2ZVdp
bmRvdykKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhN
RTogSXQncyBub3QgY2xlYXIgdGhpcyBjcm9zcy1vcmlnaW4gc2VjdXJpdHkgY2hlY2sgaXMgdmFs
dWFibGUuCisgICAgLy8gV2UgYWxsb3cgb25lIHBhZ2UgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbiBv
ZiBhbm90aGVyLiBXaHkgYmxvY2sgYXR0ZW1wdHMgdG8gcmVsb2FkPworICAgIC8vIE90aGVyIGxv
Y2F0aW9uIG9wZXJhdGlvbnMgc2ltcGx5IGJsb2NrIHVzZSBvZiBKYXZhU2NyaXB0IFVSTHMgY3Jv
c3Mgb3JpZ2luLgorICAgIERPTVdpbmRvdyogdGFyZ2V0V2luZG93ID0gbV9mcmFtZS0+ZG9tV2lu
ZG93KCk7CisgICAgaWYgKCFhY3RpdmVXaW5kb3ctPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vz
cyh0YXJnZXRXaW5kb3ctPnNlY3VyaXR5T3JpZ2luKCkpKSB7CisgICAgICAgIHRhcmdldFdpbmRv
dy0+cHJpbnRFcnJvck1lc3NhZ2UodGFyZ2V0V2luZG93LT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9y
TWVzc2FnZShhY3RpdmVXaW5kb3cpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
cHJvdG9jb2xJc0phdmFTY3JpcHQobV9mcmFtZS0+bG9hZGVyKCktPnVybCgpKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZnJhbWUtPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1bGVSZWZy
ZXNoKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9M
b2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Mb2NhdGlvbi5oCShyZXZpc2lv
biA3NDY5NCkKKysrIFdlYkNvcmUvcGFnZS9Mb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwz
OSArMzUsNTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgRnJhbWU7Ci0g
ICAgY2xhc3MgS1VSTDsKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIEZyYW1lOworY2xhc3MgS1VS
TDsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgTG9jYXRpb24gOiBwdWJs
aWMgUmVmQ291bnRlZDxMb2NhdGlvbj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExvY2F0aW9uPiBjcmVhdGUoRnJhbWUqIGZyYW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9j
YXRpb24oZnJhbWUpKTsgfQorCisgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZTsgfQorICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CisKKyAgICB2b2lkIHNldEhyZWYo
Y29uc3QgU3RyaW5nJiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RX
aW5kb3cpOworICAgIFN0cmluZyBocmVmKCkgY29uc3Q7CisKKyAgICB2b2lkIGFzc2lnbihjb25z
dCBTdHJpbmcmLCBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRv
dyk7CisgICAgdm9pZCByZXBsYWNlKGNvbnN0IFN0cmluZyYsIERPTVdpbmRvdyogYWN0aXZlV2lu
ZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KTsKKyAgICB2b2lkIHJlbG9hZChET01XaW5kb3cq
IGFjdGl2ZVdpbmRvdyk7CisKKyAgICB2b2lkIHNldFByb3RvY29sKGNvbnN0IFN0cmluZyYsIERP
TVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93LCBFeGNlcHRpb25D
b2RlJik7CisgICAgU3RyaW5nIHByb3RvY29sKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIb3N0KGNv
bnN0IFN0cmluZyYsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2lu
ZG93KTsgCisgICAgU3RyaW5nIGhvc3QoKSBjb25zdDsKKyAgICB2b2lkIHNldEhvc3RuYW1lKGNv
bnN0IFN0cmluZyYsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2lu
ZG93KTsgCisgICAgU3RyaW5nIGhvc3RuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQb3J0KGNv
bnN0IFN0cmluZyYsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2lu
ZG93KTsgCisgICAgU3RyaW5nIHBvcnQoKSBjb25zdDsKKyAgICB2b2lkIHNldFBhdGhuYW1lKGNv
bnN0IFN0cmluZyYsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2lu
ZG93KTsgCisgICAgU3RyaW5nIHBhdGhuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZWFyY2go
Y29uc3QgU3RyaW5nJiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RX
aW5kb3cpOyAKKyAgICBTdHJpbmcgc2VhcmNoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIYXNoKGNv
bnN0IFN0cmluZyYsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2lu
ZG93KTsgCisgICAgU3RyaW5nIGhhc2goKSBjb25zdDsKKyAgICBTdHJpbmcgb3JpZ2luKCkgY29u
c3Q7CisKKyAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKworICAgIFN0cmluZyBnZXRQYXJh
bWV0ZXIoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKLSAgICBjbGFzcyBMb2NhdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPExvY2F0aW9uPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxMb2NhdGlvbj4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IExvY2F0aW9uKGZyYW1lKSk7IH0KK3ByaXZhdGU6CisgICAgTG9jYXRpb24oRnJhbWUqKTsK
IAotICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9Ci0gICAg
ICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CisgICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3Q7
CiAKLSAgICAgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKLQotICAgICAgICAvLyBVUkkgZGVjb21w
b3NpdGlvbiBhdHRyaWJ1dGVzCi0gICAgICAgIFN0cmluZyBwcm90b2NvbCgpIGNvbnN0OwotICAg
ICAgICBTdHJpbmcgaG9zdCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgaG9zdG5hbWUoKSBjb25z
dDsKLSAgICAgICAgU3RyaW5nIHBvcnQoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIHBhdGhuYW1l
KCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBzZWFyY2goKSBjb25zdDsKLSAgICAgICAgU3RyaW5n
IGhhc2goKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIG9yaWdpbigpIGNvbnN0OwotCi0gICAgICAg
IFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwotCi0gICAgICAgIFN0cmluZyBnZXRQYXJhbWV0ZXIo
Y29uc3QgU3RyaW5nJikgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBMb2NhdGlvbihG
cmFtZSopOwotCi0gICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0OwotCi0gICAgICAgIEZy
YW1lKiBtX2ZyYW1lOwotICAgIH07CisgICAgRnJhbWUqIG1fZnJhbWU7Cit9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77651</attachid>
            <date>2010-12-29 16:30:13 -0800</date>
            <delta_ts>2010-12-29 21:18:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51714-20101229163012.patch</filename>
            <type>text/plain</type>
            <size>50141</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDc2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODUgQEAKKzIwMTAtMTItMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
c2VjdXJpdHkgbG9naWMgb3V0IG9mIHRoZSBKYXZhU2NyaXB0IGJpbmRpbmcgZm9yIGxvY2F0aW9u
IGludG8gdGhlIERPTSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTE3MTQKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogUmVtb3ZlZCBKU0JpbmRpbmdTdGF0ZS5jcHAsIEpTQmluZGluZ1N0YXRlLmgsCisg
ICAgICAgIGFuZCBKU0JpbmRpbmcuaC4gTGF0ZXIsIHdlJ2xsIHJlbW92ZSB0aGVtIGZyb20gb3Ro
ZXIgcHJvamVjdCBmaWxlcyBhbmQgZGVsZXRlCisgICAgICAgIHRoZSBzb3VyY2UgZmlsZXMuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0JpbmRpbmcuaDogRW1wdGllZCBvdXQsIG1hcmtlZCBm
b3IgbGF0ZXIgZGVsZXRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwOiBSZW1vdmVkIHVudXNlZCBvdmVybG9hZCBvZiB0aGUganNPd25lZFN0cmluZ09yTnVsbAor
ICAgICAgICBmdW5jdGlvbiwgdW51c2VkIHNob3VsZEFsbG93TmF2aWdhdGlvbiBmdW5jdGlvbiwg
dW51c2VkIGFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTAorICAgICAgICBmdW5jdGlvbiwg
dW51c2VkIHRvTGV4aWNhbEZyYW1lIGZ1bmN0aW9uLCB1bnVzZWQgY29tcGxldGVVUkwgZnVuY3Rp
b24sIHVudXNlZAorICAgICAgICBnZXRDYWNoZWRET01TdHJ1Y3R1cmUgYW5kIGNhY2hlRE9NU3Ry
dWN0dXJlIG92ZXJsb2FkcywgYW5kIHVudXNlZAorICAgICAgICBnZXRDYWNoZWRET01Db25zdHJ1
Y3RvciBhbmQgY2FjaGVET01Db25zdHJ1Y3Rpb24gZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29y
ZTo6YWN0aXZlRE9NV2luZG93KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpmaXJzdERPTVdp
bmRvdyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9EeW5hbWljRnJhbWUpOiBDaGFuZ2Vk
IHRvIHVzZSBmaXJzdERPTVdpbmRvdyBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhyb3VnaAorICAgICAg
ICBKU0JpbmRpbmdTdGF0ZSwgc2luY2UgdGhlIGxhdHRlciBpcyBhbiB1bm5lZWRlZCBhYnN0cmFj
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6IENoYW5nZWQg
dG8gY2FsbCBTY3JpcHRDb250cm9sbGVyJ3MgZnVuY3Rpb24KKyAgICAgICAgcmF0aGVyIHRoYW4g
Y2FsbGluZyB0aHJvdWdoIEpTQmluZGluZ1N0YXRlLCB3aGljaCBpcyBhbiB1bm5lZWRlZCBhYnN0
cmFjdGlvbgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6IFJlbW92ZWQg
dGhlIGZ1bmN0aW9ucyBtZW50aW9uZWQgYWJvdmUuIEFkZGVkCisgICAgICAgIGFjdGl2ZURPTVdp
bmRvdyBhbmQgZmlyc3RET01XaW5kb3cuIEFsc28gYWRkZWQgYSBGSVhNRSBmb3IgdGhlIGV4dHJl
bWVseSBwb29ybHkKKyAgICAgICAgbmFtZWQgYWxsb3dzQWNjZXNzRnJvbUZyYW1lIGZ1bmN0aW9u
cywgd2hpY2ggYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyCisgICAgICAgIHNjcmlwdCBp
cyBhbGxvd2VkIGFjY2VzcyAqdG8qIGEgZnJhbWUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHA6IFJlbW92ZWQgbWFueSB1bm5lZWRlZCBpbmNsdWRlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpzZXRMb2NhdGlvbik6IFN0cmVhbWxpbmVkIGJ5
IHVzaW5nIHRoZSBuZXcKKyAgICAgICAgYWN0aXZlRE9NV2luZG93IGFuZCBmaXJzdERPTVdpbmRv
dyBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6b3Blbik6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKTogRGl0dG8uCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTTG9jYXRpb246OnNldEhyZWYpOiBDaGFuZ2VkIHRvIHBhc3MgdGhlIGFjdGl2ZSBh
bmQgZmlyc3Qgd2luZG93cyB0aHJvdWdoCisgICAgICAgIHRvIHRoZSBMb2NhdGlvbjo6c2V0SHJl
ZiBmdW5jdGlvbiwgd2l0aCBpdCBkb2luZyB0aGUgcmVzdCBvZiB0aGUgd29yay4gVGhpcyBtb3Zl
cworICAgICAgICB3b3JrIG91dCBvZiB0aGUgRE9NIGJpbmRpbmcgdGhhdCBiZWxvbmdzIGluIHRo
ZSBET00gaXRzZWxmLiBFdmVudHVhbGx5IHN1Y2ggZnVuY3Rpb25zCisgICAgICAgIGNvdWxkIGV2
ZW4gYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgdGhlIGJpbmRpbmdzIHNjcmlwdC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFByb3RvY29sKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpKU0xvY2F0aW9uOjpzZXRIb3N0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpKU0xvY2F0aW9uOjpzZXRIb3N0bmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNM
b2NhdGlvbjo6c2V0UG9ydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6
c2V0UGF0aG5hbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkpTTG9jYXRpb246OnNldFNl
YXJjaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6c2V0SGFzaCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVwbGFjZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6SlNMb2NhdGlvbjo6cmVsb2FkKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpKU0xvY2F0aW9uOjphc3NpZ24pOiBEaXR0by4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L3NwZWNpYWxpemF0aW9uL0pTQmluZGluZ1N0YXRlLmNwcDogRW1wdGllZCBvdXQsIG1hcmtlZCBm
b3IgbGF0ZXIgZGVsZXRpb24uCisgICAgICAgICogYmluZGluZ3MvanMvc3BlY2lhbGl6YXRpb24v
SlNCaW5kaW5nU3RhdGUuaDogRW1wdGllZCBvdXQsIG1hcmtlZCBmb3IgbGF0ZXIgZGVsZXRpb24u
CisKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01X
aW5kb3c6OnNldExvY2F0aW9uKTogQWRkZWQgYSBTZXRMb2NhdGlvbkxvY2tpbmcgYXJndW1lbnQg
dGhhdCBhbGxvd3MgdXMKKyAgICAgICAgdG8gdXNlIHRoaXMgZnVuY3Rpb24gZm9yIExvY2F0aW9u
OjpyZXBsYWNlLCB3aGljaCBpcyB0aGUgc2FtZSBhcyBzZXRMb2NhdGlvbiBleGNlcHQgdGhhdAor
ICAgICAgICBpdCBsb2NrcyBib3RoIGhpc3RvcnkgYW5kIHRoZSBiYWNrL2ZvcndhcmQgbGlzdC4K
KyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5oOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvTG9j
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246OnNldEhyZWYpOiBBZGRlZC4g
VXNlcyBET01XaW5kb3c6OnNldExvY2F0aW9uIHNvIHRoYXQgdGhlIHNlY3VyaXR5CisgICAgICAg
IGxvZ2ljIHRoZXJlIGRvZXMgbm90IGhhdmUgdG8gYmUgcmVwZWF0ZWQgb3IgZXZlbiByZWZhY3Rv
cmVkLgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246OnNldFByb3RvY29sKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpMb2NhdGlvbjo6c2V0SG9zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYXRpb246OnNldEhvc3RuYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpM
b2NhdGlvbjo6c2V0UG9ydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246OnNl
dFBhdGhuYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpMb2NhdGlvbjo6c2V0U2VhcmNo
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpMb2NhdGlvbjo6c2V0SGFzaCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TG9jYXRpb246OmFzc2lnbik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6TG9jYXRpb246OnJlcGxhY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkxvY2F0
aW9uOjpyZWxvYWQpOiBBZGRlZC4gU2VjdXJpdHkgbG9naWMgd2FzIHJlZmFjdG9yZWQgZnJvbSB0
aGUgY29kZSBpbgorICAgICAgICBKU0xvY2F0aW9uQ3VzdG9tLmNwcC4gQWRkZWQgYSBGSVhNRSBh
Ym91dCB0aGUgZmFjdCB0aGF0IHRoaXMgc2VjdXJpdHkgbG9naWMgc2VlbXMKKyAgICAgICAgcG9z
c2libHkgdW5uZWVkZWQuCisKKyAgICAgICAgKiBwYWdlL0xvY2F0aW9uLmg6IEZpeGVkIGluZGVu
dGF0aW9uIG9uIHRoZSB3aG9sZSBmaWxlLiBBZGRlZCB0aGUgbmV3IGZ1bmN0aW9ucyBhYm92ZS4K
KyAgICAgICAgKFdlYkNvcmU6OkxvY2F0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TG9jYXRpb246OmZyYW1lKToKKwogMjAxMC0xMi0yNyAgQW1ydXRoIFJhaiAgPGFtcnV0aHJhakBt
b3Rvcm9sYS5jb20+IGFuZCBSYXZpIEthc2liaGF0bGEgIDxyYXZpLmthc2liaGF0bGFAbW90b3Jv
bGEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NDc2OSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDkwLDkgKzMwOTAsNiBAQAogCQlBNTlFM0MxRjExNTgwRjUxMDA3MjkyOEUgLyog
S2V5RXZlbnRJUGhvbmUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNTlFM0MxRDExNTgwRjUxMDA3MjkyOEUgLyogS2V5RXZlbnRJUGhvbmUubW0gKi87
IH07CiAJCUE1QUZCMzRGMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTVBRkIzNEQxMTUxNTFBNzAw
QjA0NUNCIC8qIFN0ZXBSYW5nZS5jcHAgKi87IH07CiAJCUE1QUZCMzUwMTE1MTUxQTcwMEIwNDVD
QiAvKiBTdGVwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1QUZCMzRFMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuaCAqLzsgfTsKLQkJ
QTYyMkE4RUUxMjJDNDQyQTAwQTc4NUIzIC8qIEpTQmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTYyMkE4RUQxMjJDNDQyQTAwQTc4NUIzIC8q
IEpTQmluZGluZy5oICovOyB9OwotCQlBNjIyQThGMjEyMkM0NDQ1MDBBNzg1QjMgLyogSlNCaW5k
aW5nU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTYyMkE4RjAxMjJDNDQ0NTAwQTc4NUIzIC8qIEpTQmluZGluZ1N0YXRlLmNwcCAqLzsgfTsK
LQkJQTYyMkE4RjMxMjJDNDQ0NTAwQTc4NUIzIC8qIEpTQmluZGluZ1N0YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThGMTEyMkM0NDQ1MDBB
Nzg1QjMgLyogSlNCaW5kaW5nU3RhdGUuaCAqLzsgfTsKIAkJQTYyMkE4RkExMjJDNDRBNjAwQTc4
NUIzIC8qIEJpbmRpbmdMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTYyMkE4RjQxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdMb2NhdGlv
bi5oICovOyB9OwogCQlBNjIyQThGQjEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNjIyQThG
NTEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5LmggKi87IH07CiAJCUE2MjJBOEZD
MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE2MjJBOEY2MTIyQzQ0QTYwMEE3ODVC
MyAvKiBCaW5kaW5nU2VjdXJpdHlCYXNlLmNwcCAqLzsgfTsKQEAgLTk0MjIsOSArOTQxOSw2IEBA
CiAJCUE1QUZCMzRFMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3RlcFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1Qzk3NENGMTE0ODVGRjEwMDY2RjJBQiAvKiBLZXlFdmVudENvY29hLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEtleUV2ZW50Q29jb2EuaDsgcGF0aCA9IGNvY29h
L0tleUV2ZW50Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTVDOTc0RDAx
MTQ4NUZGMTAwNjZGMkFCIC8qIEtleUV2ZW50Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBLZXlFdmVudENvY29hLm1tOyBwYXRoID0gY29jb2EvS2V5RXZl
bnRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTYyMkE4RUQxMjJDNDQy
QTAwQTc4NUIzIC8qIEpTQmluZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0JpbmRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTYyMkE4RjAxMjJD
NDQ0NTAwQTc4NUIzIC8qIEpTQmluZGluZ1N0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQmluZGluZ1N0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQTYyMkE4RjExMjJDNDQ0NTAwQTc4NUIzIC8qIEpTQmluZGluZ1N0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmluZGluZ1N0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE2MjJBOEY0MTIyQzQ0QTYwMEE3ODVCMyAvKiBCaW5kaW5n
TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmluZGluZ0xvY2F0
aW9uLmg7IHBhdGggPSBnZW5lcmljL0JpbmRpbmdMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBNjIyQThGNTEyMkM0NEE2MDBBNzg1QjMgLyogQmluZGluZ1NlY3VyaXR5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJpbmRpbmdTZWN1cml0eS5oOyBw
YXRoID0gZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTYyMkE4RjYxMjJDNDRBNjAwQTc4NUIzIC8qIEJpbmRpbmdTZWN1cml0eUJhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQmluZGluZ1NlY3VyaXR5QmFz
ZS5jcHA7IHBhdGggPSBnZW5lcmljL0JpbmRpbmdTZWN1cml0eUJhc2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTU3MzcsMTUgKzE1NzMxLDYgQEAKIAkJCW5hbWUgPSBjb2Nv
YTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUE2MjJBOEVGMTIyQzQ0NDUw
MEE3ODVCMyAvKiBzcGVjaWFsaXphdGlvbiAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJQTYyMkE4RjAxMjJDNDQ0NTAwQTc4NUIzIC8qIEpTQmluZGluZ1N0
YXRlLmNwcCAqLywKLQkJCQlBNjIyQThGMTEyMkM0NDQ1MDBBNzg1QjMgLyogSlNCaW5kaW5nU3Rh
dGUuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gc3BlY2lhbGl6YXRpb247Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwogCQlBNzVFOEI3RjBFMURFMkIwMDA3RjI0ODEgLyogZmlsdGVy
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xNzQ1Myw3
ICsxNzQzOCw2IEBACiAJCQkJQkNDRTU4QjQxMDYxRTkyNTAwOEZCMzVBIC8qIENvbnN0cnVjdG9y
cyAqLywKIAkJCQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICovLAogCQkJCTE0
REZCMzNGMEE3REY3NjMwMDE4Rjc2OSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCi0JCQkJQTYyMkE4
RUYxMjJDNDQ0NTAwQTc4NUIzIC8qIHNwZWNpYWxpemF0aW9uICovLAogCQkJCUJDRDUzMzYzMEVE
Njg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oICovLAogCQkJCTkz
RjhCMzA2MEEzMDBGRUEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9ySlMucG0gKi8sCiAJCQkJQkM1
M0RBNjExMTQzMTRCRDAwMEQ4MTdFIC8qIERPTU9iamVjdEhhc2hUYWJsZU1hcC5jcHAgKi8sCkBA
IC0xNzQ2Niw3ICsxNzQ1MCw2IEBACiAJCQkJQzU4NUE2NjExMUQ0RkFDNTAwNEMzRTRCIC8qIElE
QkJpbmRpbmdVdGlsaXRpZXMuaCAqLywKIAkJCQkxQzgxQkEwMzBFOTczNDgzMDAyNjZFMDcgLyog
SmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgKi8sCiAJCQkJMUM4MUJBMDQwRTk3MzQ4MzAwMjY2RTA3
IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCAqLywKLQkJCQlBNjIyQThFRDEyMkM0NDJBMDBBNzg1
QjMgLyogSlNCaW5kaW5nLmggKi8sCiAJCQkJQkM1M0RBQzQxMTQzMkZEOTAwMEQ4MTdFIC8qIEpT
RGVidWdXcmFwcGVyU2V0LmNwcCAqLywKIAkJCQlCQzUzREFDMTExNDMyRUVFMDAwRDgxN0UgLyog
SlNEZWJ1Z1dyYXBwZXJTZXQuaCAqLywKIAkJCQk5M0I3MEQ0NzA5RUIwQzdDMDA5RDg0NjggLyog
SlNET01CaW5kaW5nLmNwcCAqLywKQEAgLTIwNzc5LDggKzIwNzYyLDYgQEAKIAkJCQlCQzEyNEYw
MDBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0
NjM0ODEwN0E5MzY2MDA4NTcxOTMgLyogSlNCZWZvcmVMb2FkRXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxNzIxRkQzMTFEMjdFRjIwMDYzOEI0MiAvKiBKU0JlZm9yZVByb2Nlc3NFdmVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQTYyMkE4RUUxMjJDNDQyQTAwQTc4NUIzIC8qIEpTQmluZGlu
Zy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTYyMkE4RjMxMjJDNDQ0NTAwQTc4NUIzIC8qIEpTQmlu
ZGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTJEOTlDRTEwRTJCQkRBMDA0OTYzMzcg
LyogSlNCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OUNEMDI5NDExQzg1Qjg3MDA3MEI3OTEg
LyogSlNCbG9iQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0OUUyNEMxMDdENEE4NDAw
QjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNTAwLDcgKzIz
NDgxLDYgQEAKIAkJCQlCQzEyNEVGRjBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJJbmZvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDOTQ2MzQ2MTA3QTkzNEIwMDg1NzE5MyAvKiBKU0JlZm9yZUxv
YWRFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTcyMUZEMjExRDI3RUYyMDA2MzhCNDIg
LyogSlNCZWZvcmVQcm9jZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTYyMkE4RjIx
MjJDNDQ0NTAwQTc4NUIzIC8qIEpTQmluZGluZ1N0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTJFMkQ5OUNEMTBFMkJCREEwMDQ5NjMzNyAvKiBKU0Jsb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODlDRDAyOTMxMUM4NUI4NzAwNzBCNzkxIC8qIEpTQmxvYkJ1aWxkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0OUUyODcxMDdENERCNDAwQjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZy5oCShyZXZpc2lvbiA3
NDc2OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTEgKzEsMiBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgSlNCaW5kaW5nX2gKLSNkZWZpbmUgSlNCaW5kaW5nX2gK
LQotI2luY2x1ZGUgIkJpbmRpbmdGcmFtZS5oIgotI2luY2x1ZGUgIkJpbmRpbmdMb2NhdGlvbi5o
IgotI2luY2x1ZGUgIkJpbmRpbmdTZWN1cml0eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LS8vIEluc3RhbnRpYXRlIGJpbmRpbmcgdGVtcGxhdGUgY2xhc3NlcyBmb3IgSlNDLgotY2xhc3Mg
SlNCaW5kaW5nIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEJpbmRpbmdGcmFtZTxKU0JpbmRpbmc+
IEZyYW1lOwotICAgIHR5cGVkZWYgQmluZGluZ0xvY2F0aW9uPEpTQmluZGluZz4gTG9jYXRpb247
Ci19OwotCi10eXBlZGVmIEJpbmRpbmdTZWN1cml0eTxKU0JpbmRpbmc+IEpTQmluZGluZ1NlY3Vy
aXR5OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBKU0JpbmRpbmdfaAor
Ly8gT25jZSByZWZlcmVuY2VzIHRvIHRoaXMgZmlsZSBhcmUgcmVtb3ZlZCBmcm9tIGJ1aWxkIGZp
bGVzLCB0aGlzIGZpbGUgc2hvdWxkIGJlIGRlbGV0ZWQuCisjZXJyb3IKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDc0NzY5KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdl
YmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM5LDggKzM5LDYgQEAKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxT
dHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0JpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0JpbmRp
bmdTdGF0ZS5oIgogI2luY2x1ZGUgIkpTRE9NQ29yZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpT
RE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNEZWJ1Z1dyYXBwZXJTZXQuaCIKQEAgLTQ5
MCwxMyArNDg4LDYgQEAgSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZQog
ICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHN0cmluZ1RvVVN0cmluZyhzKSk7CiB9CiAK
LUpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJp
bmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsK
LSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKLX0KLQogSlNWYWx1ZSBqc1N0cmlu
Z09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQogewogICAgIGlm
IChzLmlzTnVsbCgpKQpAQCAtNjY2LDYgKzY1NywxNiBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEV4CiAgICAgdGhyb3dFcnJvcihleGVjLCBlcnJvck9iamVjdCk7CiB9
CiAKK0RPTVdpbmRvdyogYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBy
ZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7
Cit9CisKK0RPTVdpbmRvdyogZmlyc3RET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPmltcGwo
KTsKK30KKwogYm9vbCBjaGVja05vZGVTZWN1cml0eShFeGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5v
ZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUgJiYgYWxsb3dzQWNjZXNzRnJvbUZyYW1lKGV4ZWMsIG5v
ZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpOwpAQCAtNjg3LDIyICs2ODgsNiBAQCBib29sIGFsbG93
c0FjY2Vzc0Zyb21GcmFtZShFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIHdpbmRvdyAmJiB3aW5k
b3ctPmFsbG93c0FjY2Vzc0Zyb20oZXhlYywgbWVzc2FnZSk7CiB9CiAKLWJvb2wgc2hvdWxkQWxs
b3dOYXZpZ2F0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUqIGZyYW1lKQotewotICAgIEpTQmlu
ZGluZ1N0YXRlIHN0YXRlKGV4ZWMpOwotICAgIHJldHVybiBKU0JpbmRpbmdTZWN1cml0eTo6c2hv
dWxkQWxsb3dOYXZpZ2F0aW9uKCZzdGF0ZSwgZnJhbWUpOwotfQotCi1ib29sIGFsbG93U2V0dGlu
Z1NyY1RvSmF2YXNjcmlwdFVSTChFeGVjU3RhdGUqIGV4ZWMsIEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAoKGVsZW1l
bnQtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFn
KSkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNyYyIpICYmIHByb3RvY29sSXNKYXZhU2Ny
aXB0KHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh2YWx1ZSkpKSB7Ci0gICAgICAg
ICAgRG9jdW1lbnQqIGNvbnRlbnREb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1l
bnRCYXNlKj4oZWxlbWVudCktPmNvbnRlbnREb2N1bWVudCgpOwotICAgICAgICAgIGlmIChjb250
ZW50RG9jdW1lbnQgJiYgIWNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsIGNvbnRlbnREb2N1bWVudCkp
Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVl
OwotfQotCiB2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTcxMCwyNSArNjk1LDE0
IEBAIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSogZnIKICAgICBmcmFtZS0+
ZG9tV2luZG93KCktPnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi1GcmFtZSogdG9M
ZXhpY2FsRnJhbWUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU0JpbmRpbmdTdGF0
ZShleGVjKS5hY3RpdmVGcmFtZSgpOwotfQotCiBGcmFtZSogdG9EeW5hbWljRnJhbWUoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIHJldHVybiBKU0JpbmRpbmdTdGF0ZShleGVjKS5maXJzdEZyYW1l
KCk7CisgICAgcmV0dXJuIGZpcnN0RE9NV2luZG93KGV4ZWMpLT5mcmFtZSgpOwogfQogCiBib29s
IHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCiB7Ci0gICAgcmV0dXJuIEpTQmluZGluZ1N0YXRlKEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6Y3VycmVudFN0YXRlKCkpLnByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpOwotfQotCi1LVVJMIGNvbXBsZXRlVVJMKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiByZWxhdGl2ZVVSTCkKLXsKLSAgICBKU0JpbmRpbmdTdGF0ZSBzdGF0ZShleGVjKTsKLSAgICBy
ZXR1cm4gY29tcGxldGVVUkwoJnN0YXRlLCByZWxhdGl2ZVVSTCk7CisgICAgcmV0dXJuIFNjcmlw
dENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogfQogCiBKU1ZhbHVlIG9iamVj
dFRvU3RyaW5nRnVuY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkBAIC03NDksMjkgKzcyMyw2IEBAIFN0cnVjdHVyZSog
Y2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWwKICAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQo
Y2xhc3NJbmZvLCBzdHJ1Y3R1cmUpLmZpcnN0LT5zZWNvbmQuZ2V0KCk7CiB9CiAKLVN0cnVjdHVy
ZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8pCi17Ci0gICAgcmV0dXJuIGdldENhY2hlZERPTVN0cnVjdHVyZShzdGF0aWNf
Y2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGNs
YXNzSW5mbyk7Ci19Ci0KLVN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoRXhlY1N0YXRlKiBl
eGVjLCBOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCi17Ci0gICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKHN0YXRpY19j
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgc3Ry
dWN0dXJlLCBjbGFzc0luZm8pOwotfQotCi1KU09iamVjdCogZ2V0Q2FjaGVkRE9NQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKLXsKLSAgICBK
U0RPTUNvbnN0cnVjdG9yTWFwJiBjb25zdHJ1Y3RvcnMgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmNvbnN0cnVjdG9ycygpOwot
ICAgIHJldHVybiBjb25zdHJ1Y3RvcnMuZ2V0KGNsYXNzSW5mbyk7Ci19Ci0KLXZvaWQgY2FjaGVE
T01Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
LCBKU09iamVjdCogY29uc3RydWN0b3IpCi17Ci0gICAgSlNET01Db25zdHJ1Y3Rvck1hcCYgY29u
c3RydWN0b3JzID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5jb25zdHJ1Y3RvcnMoKTsKLSAgICBBU1NFUlQoIWNvbnN0cnVjdG9y
cy5jb250YWlucyhjbGFzc0luZm8pKTsKLSAgICBjb25zdHJ1Y3RvcnMuc2V0KGNsYXNzSW5mbywg
Y29uc3RydWN0b3IpOwotfQotCiBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKQogewogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuaAkocmV2aXNpb24gNzQ3NjkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTEgKzEzMiw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwogICAgIEpTQzo6U3RydWN0dXJl
KiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCosIE5vbk51bGxQYXNzUmVmUHRy
PEpTQzo6U3RydWN0dXJlPiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLSAgICBKU0M6OlN0cnVj
dHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpD
bGFzc0luZm8qKTsKLSAgICBKU0M6OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNDOjpF
eGVjU3RhdGUqLCBOb25OdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvKik7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRET01Db25zdHJ1Y3Rv
cihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7Ci0gICAgdm9pZCBjYWNo
ZURPTUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qLCBK
U0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3Rvcik7CiAKICAgICBpbmxpbmUgSlNET01HbG9iYWxPYmpl
Y3QqIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgewpAQCAtMjI1LDEwICsyMjAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
SlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JGYWxzZShKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYpOyAvLyBib29sZWFuIGZhbHNlIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAogICAgIEpTQzo6SlNW
YWx1ZSBqc1N0cmluZ09yRmFsc2UoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBLVVJMJik7IC8vIGJv
b2xlYW4gZmFsc2UgaWYgdGhlIFVSTCBpcyBudWxsCiAKLSAgICAvLyBTZWUgSmF2YVNjcmlwdENv
cmUgZm9yIGV4cGxhbmF0aW9uOiBTaG91bGQgYmUgdXNlZCBmb3IgYW55IFVTdHJpbmcgdGhhdCBp
cyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKKyAgICAvLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9y
IGV4cGxhbmF0aW9uOiBTaG91bGQgYmUgdXNlZCBmb3IgYW55IHN0cmluZyB0aGF0IGlzIGFscmVh
ZHkgb3duZWQgYnkgYW5vdGhlcgogICAgIC8vIG9iamVjdCwgdG8gbGV0IHRoZSBlbmdpbmUga25v
dyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIgaXMgdW5saWtlbHkgdG8gc2F2
ZSBtZW1vcnkuCiAgICAgSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgCi0gICAgSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdP
ck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OlVTdHJpbmcmKTsgCiAKICAgICBTdHJp
bmcgaWRlbnRpZmllclRvU3RyaW5nKGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwogICAgIFN0cmlu
ZyB1c3RyaW5nVG9TdHJpbmcoY29uc3QgSlNDOjpVU3RyaW5nJik7CkBAIC0yODQsMTggKzI3OCwx
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gSGVscGVycyBmb3IgV2luZG93LCBIaXN0
b3J5LCBhbmQgTG9jYXRpb24gY2xhc3NlcyB0byBpbXBsZW1lbnQgY3Jvc3MtZG9tYWluIHBvbGlj
eS4KICAgICAvLyBCZXNpZGVzIHRoZSBjcm9zcy1kb21haW4gY2hlY2ssIHRoZXkgbmVlZCBub24t
Y2FjaGluZyB2ZXJzaW9ucyBvZiBzdGF0aWNGdW5jdGlvbkdldHRlciBmb3IKICAgICAvLyBiZWNh
dXNlIHdlIGRvIG5vdCB3YW50IGN1cnJlbnQgcHJvcGVydHkgdmFsdWVzIGludm9sdmVkIGF0IGFs
bC4KKyAgICAvLyBGSVhNRTogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBuYW1lZCBmcmFtZUFs
bG93c0FjY2Vzc0Zyb20sIGJlY2F1c2UgdGhlIGFjY2VzcyBpcyAqdG8qIHRoZSBmcmFtZS4KICAg
ICBib29sIGFsbG93c0FjY2Vzc0Zyb21GcmFtZShKU0M6OkV4ZWNTdGF0ZSosIEZyYW1lKik7CiAg
ICAgYm9vbCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFN0
cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb24oSlNDOjpFeGVj
U3RhdGUqLCBGcmFtZSopOwotICAgIGJvb2wgYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJM
KEpTQzo6RXhlY1N0YXRlKiwgRWxlbWVudCosIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYp
OworICAgIERPTVdpbmRvdyogYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CisgICAg
RE9NV2luZG93KiBmaXJzdERPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwogCiAgICAgdm9pZCBw
cmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
ICAgICBKU0M6OkpTVmFsdWUgb2JqZWN0VG9TdHJpbmdGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUp
OwogCi0gICAgRnJhbWUqIHRvTGV4aWNhbEZyYW1lKEpTQzo6RXhlY1N0YXRlKik7CiAgICAgRnJh
bWUqIHRvRHluYW1pY0ZyYW1lKEpTQzo6RXhlY1N0YXRlKik7CiAgICAgYm9vbCBwcm9jZXNzaW5n
VXNlckdlc3R1cmUoKTsKLSAgICBLVVJMIGNvbXBsZXRlVVJMKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJiByZWxhdGl2ZVVSTCk7CiAgICAgCiAgICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBq
c1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQogICAgIHsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA3
NDc2OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCwyMSArMjAsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVk
ZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNp
bmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJI
VE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhp
c3RvcnkuaCIKICNpbmNsdWRlICJKU0F1ZGlvQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJKU0RP
TVdpbmRvd1NoZWxsLmgiCiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRM
aXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2UuaCIKQEAgLTQzLDcgKzMzLDYgQEAK
ICNpbmNsdWRlICJKU0ltYWdlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0xvY2F0aW9uLmgi
CiAjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbC5oIgotI2luY2x1ZGUgIkpTTWVzc2FnZVBvcnQu
aCIKICNpbmNsdWRlICJKU01lc3NhZ2VQb3J0Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNPcHRpb25D
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCkBAIC01MywyMiAr
NDIsMTAgQEAKICNpbmNsdWRlICJKU1hTTFRQcm9jZXNzb3IuaCIKICNpbmNsdWRlICJMb2NhdGlv
bi5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIK
LSNpbmNsdWRlICJOb3RpZmljYXRpb25DZW50ZXIuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ci5oIgogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRy
b2xsZXIuaCIKLSNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJlZFdvcmtlclJlcG9zaXRvcnkuaCIKLSNpbmNsdWRl
ICJXaW5kb3dGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRl
IDxydW50aW1lL0pTRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9Qcm90b3R5cGVGdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgfHwgRU5BQkxFKEJMT0Ip
CiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgpAQCAtNDkwLDEzICs0NjcsMTAgQEAgSlNWYWx1
ZSBKU0RPTVdpbmRvdzo6bG9jYXRpb24oRXhlY1N0YXRlKgogCiB2b2lkIEpTRE9NV2luZG93Ojpz
ZXRMb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgRE9NV2lu
ZG93KiBhY3RpdmVXaW5kb3cgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPmltcGwoKTsKLSAgICBET01XaW5kb3cqIGZpcnN0V2luZG93ID0gYXNKU0RPTVdpbmRv
dyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7Ci0KICNpZiBFTkFCTEUoREFT
SEJPQVJEX1NVUFBPUlQpCiAgICAgLy8gVG8gYXZvaWQgYnJlYWtpbmcgb2xkIHdpZGdldHMsIG1h
a2UgInZhciBsb2NhdGlvbiA9IiBpbiBhIHRvcC1sZXZlbCBmcmFtZSBjcmVhdGUKICAgICAvLyBh
IHByb3BlcnR5IG5hbWVkICJsb2NhdGlvbiIgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgbmF2aWdh
dGlvbiAoPHJkYXI6Ly9wcm9ibGVtLzU2ODgwMzk+KS4KLSAgICBpZiAoRnJhbWUqIGFjdGl2ZUZy
YW1lID0gYWN0aXZlV2luZG93LT5mcmFtZSgpKSB7CisgICAgaWYgKEZyYW1lKiBhY3RpdmVGcmFt
ZSA9IGFjdGl2ZURPTVdpbmRvdyhleGVjKS0+ZnJhbWUoKSkgewogICAgICAgICBpZiAoU2V0dGlu
Z3MqIHNldHRpbmdzID0gYWN0aXZlRnJhbWUtPnNldHRpbmdzKCkpIHsKICAgICAgICAgICAgIGlm
IChzZXR0aW5ncy0+dXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKSAmJiAh
YWN0aXZlRnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYWxs
b3dzQWNjZXNzRnJvbShleGVjKSkKQEAgLTUxMSw3ICs0ODUsNyBAQCB2b2lkIEpTRE9NV2luZG93
OjpzZXRMb2NhdGlvbihFeGVjU3RhdGUqCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpbXBsKCktPnNldExvY2F0aW9uKHVzdHJpbmdUb1N0cmlu
Zyhsb2NhdGlvblN0cmluZyksIGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3cpOworICAgIGltcGwo
KS0+c2V0TG9jYXRpb24odXN0cmluZ1RvU3RyaW5nKGxvY2F0aW9uU3RyaW5nKSwgYWN0aXZlRE9N
V2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSk7CiB9CiAKIEpTVmFsdWUgSlNET01X
aW5kb3c6OmNyeXB0byhFeGVjU3RhdGUqKSBjb25zdApAQCAtNjY5LDkgKzY0Myw2IEBAIEpTVmFs
dWUgSlNET01XaW5kb3c6OndlYlNvY2tldChFeGVjU3RhdGUKIAogSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgRE9NV2luZG93KiBhY3RpdmVXaW5kb3cg
PSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKTsKLSAg
ICBET01XaW5kb3cqIGZpcnN0V2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xv
YmFsT2JqZWN0KCkpLT5pbXBsKCk7Ci0KICAgICBTdHJpbmcgdXJsU3RyaW5nID0gdmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgwKSk7CiAg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKQEAgLTY4Miw3ICs2NTMsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93OjpvcGVuKEV4ZWNTdGF0
ZSogZXhlCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAotICAgIFJlZlB0cjxET01XaW5kb3c+IG9wZW5lZFdpbmRvdyA9IGltcGwo
KS0+b3Blbih1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXNTdHJpbmcsIGFjdGl2
ZVdpbmRvdywgZmlyc3RXaW5kb3cpOworICAgIFJlZlB0cjxET01XaW5kb3c+IG9wZW5lZFdpbmRv
dyA9IGltcGwoKS0+b3Blbih1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXNTdHJp
bmcsIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhlYykpOwogICAgIGlm
ICghb3BlbmVkV2luZG93KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICByZXR1
cm4gdG9KUyhleGVjLCBvcGVuZWRXaW5kb3cuZ2V0KCkpOwpAQCAtNzMxLDkgKzcwMiw2IEBAIHN0
YXRpYyB2b2lkIHNldFVwRGlhbG9nKERPTVdpbmRvdyogZGlhbG8KIAogSlNWYWx1ZSBKU0RPTVdp
bmRvdzo6c2hvd01vZGFsRGlhbG9nKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBET01XaW5kb3cq
IGFjdGl2ZVdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+aW1wbCgpOwotICAgIERPTVdpbmRvdyogZmlyc3RXaW5kb3cgPSBhc0pTRE9NV2luZG93KGV4
ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPmltcGwoKTsKLQogICAgIFN0cmluZyB1cmxTdHJp
bmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwpAQCAtNzQzLDE1ICs3MTEsMTMgQEAgSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6c2hvd01vZGFsRGlhbG9nKEV4ZQogCiAgICAgRGlhbG9nSGFuZGxlciBoYW5kbGVyKGV4ZWMp
OwogCi0gICAgaW1wbCgpLT5zaG93TW9kYWxEaWFsb2codXJsU3RyaW5nLCBkaWFsb2dGZWF0dXJl
c1N0cmluZywgYWN0aXZlV2luZG93LCBmaXJzdFdpbmRvdywgc2V0VXBEaWFsb2csICZoYW5kbGVy
KTsKKyAgICBpbXBsKCktPnNob3dNb2RhbERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1cmVz
U3RyaW5nLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpLCBzZXRV
cERpYWxvZywgJmhhbmRsZXIpOwogCiAgICAgcmV0dXJuIGhhbmRsZXIucmV0dXJuVmFsdWUoKTsK
IH0KIAogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIERPTVdpbmRvdyogYWN0aXZlV2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7Ci0KICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAg
LTc2OCw3ICs3MzQsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93Ojpwb3N0TWVzc2FnZShFeGVjU3Rh
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaW1wbCgpLT5wb3N0TWVzc2FnZShtZXNzYWdlLCAmbWVzc2FnZVBvcnRzLCB0YXJn
ZXRPcmlnaW4sIGFjdGl2ZVdpbmRvdywgZWMpOworICAgIGltcGwoKS0+cG9zdE1lc3NhZ2UobWVz
c2FnZSwgJm1lc3NhZ2VQb3J0cywgdGFyZ2V0T3JpZ2luLCBhY3RpdmVET01XaW5kb3coZXhlYyks
IGVjKTsKICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1c3RvbS5jcHAJ
KHJldmlzaW9uIDc0NzY5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA2IEpvbiBTaGllciAoanNoaWVyQGlhc3RhdGUuZWR1KQotICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2V2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTIzLDE5ICsyMyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNMb2Nh
dGlvbkN1c3RvbS5oIgogCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
LSNpbmNsdWRlICJKU0JpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0JpbmRpbmdTdGF0ZS5oIgotI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCi0j
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvY2F0aW9uLmgiCi0jaW5jbHVkZSAiU2NyaXB0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvUHJvdG90eXBlRnVuY3Rpb24uaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApA
QCAtMTg2LDE1MiArMTc1LDkzIEBAIHZvaWQgSlNMb2NhdGlvbjo6ZGVmaW5lR2V0dGVyKEV4ZWNT
dGF0ZSoKICAgICBCYXNlOjpkZWZpbmVHZXR0ZXIoZXhlYywgcHJvcGVydHlOYW1lLCBnZXR0ZXJG
dW5jdGlvbiwgYXR0cmlidXRlcyk7CiB9CiAKLXN0YXRpYyB2b2lkIG5hdmlnYXRlSWZBbGxvd2Vk
KEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgbG9j
a0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKLXsKLSAgICBKU0JpbmRpbmdTdGF0
ZSBzdGF0ZShleGVjKTsKLSAgICBKU0JpbmRpbmc6OkZyYW1lOjpuYXZpZ2F0ZUlmQWxsb3dlZCgm
c3RhdGUsIGZyYW1lLCB1cmwsIGxvY2tIaXN0b3J5LCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKLX0K
LQogdm9pZCBKU0xvY2F0aW9uOjpzZXRIcmVmKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZy
YW1lKTsKLQotICAgIEtVUkwgdXJsID0gY29tcGxldGVVUkwoZXhlYywgdXN0cmluZ1RvU3RyaW5n
KHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7Ci0gICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFzaG91bGRBbGxvd05hdmlnYXRpb24oZXhlYywgZnJhbWUpKQor
ICAgIFVTdHJpbmcgaHJlZiA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgbmF2aWdhdGVJZkFsbG93ZWQo
ZXhlYywgZnJhbWUsIHVybCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCksIGZhbHNlKTsKKyAgICBpbXBsKCktPnNldEhyZWYodXN0cmluZ1RvU3RyaW5n
KGhyZWYpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKIH0K
IAogdm9pZCBKU0xvY2F0aW9uOjpzZXRQcm90b2NvbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwotICAgIEFTU0VS
VChmcmFtZSk7Ci0KLSAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7Ci0gICAg
aWYgKCF1cmwuc2V0UHJvdG9jb2wodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMp
KSkpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNZTlRBWF9FUlIpOworICAgIFVT
dHJpbmcgcHJvdG9jb2wgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBuYXZpZ2F0ZUlmQWxs
b3dlZChleGVjLCBmcmFtZSwgdXJsLCAhZnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNz
aW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGltcGwoKS0+c2V0UHJvdG9jb2wodXN0cmluZ1RvU3RyaW5nKHByb3RvY29sKSwgYWN0aXZlRE9N
V2luZG93KGV4ZWMpLCBmaXJzdERPTVdpbmRvdyhleGVjKSwgZWMpOworICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CiB9CiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0SG9zdChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFt
ZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIo
KS0+dXJsKCk7Ci0gICAgdXJsLnNldEhvc3RBbmRQb3J0KHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50
b1N0cmluZyhleGVjKSkpOwotCi0gICAgbmF2aWdhdGVJZkFsbG93ZWQoZXhlYywgZnJhbWUsIHVy
bCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCksIGZh
bHNlKTsKKyAgICBVU3RyaW5nIGhvc3QgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbXBsKCktPnNldEhv
c3QodXN0cmluZ1RvU3RyaW5nKGhvc3QpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9N
V2luZG93KGV4ZWMpKTsKIH0KIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIb3N0bmFtZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5m
cmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0KLSAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2Fk
ZXIoKS0+dXJsKCk7Ci0gICAgdXJsLnNldEhvc3QodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpKSk7Ci0KLSAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCAh
ZnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2Up
OworICAgIFVTdHJpbmcgaG9zdG5hbWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbXBsKCktPnNldEhv
c3RuYW1lKHVzdHJpbmdUb1N0cmluZyhob3N0bmFtZSksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwg
Zmlyc3RET01XaW5kb3coZXhlYykpOwogfQogCiB2b2lkIEpTTG9jYXRpb246OnNldFBvcnQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGltcGwo
KS0+ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAgS1VSTCB1cmwgPSBmcmFtZS0+
bG9hZGVyKCktPnVybCgpOwotICAgIC8vIEZJWE1FOiBDb3VsZCBtYWtlIHRoaXMgYSBsaXR0bGUg
bGVzcyB1Z2x5IGlmIFN0cmluZyBwcm92aWRlZCBhIHRvVW5zaWduZWRTaG9ydCBmdW5jdGlvbi4K
LSAgICBjb25zdCBVU3RyaW5nJiBwb3J0U3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0g
ICAgaW50IHBvcnQgPSBjaGFyYWN0ZXJzVG9JbnQocG9ydFN0cmluZy5jaGFyYWN0ZXJzKCksIHBv
cnRTdHJpbmcubGVuZ3RoKCkpOwotICAgIGlmIChwb3J0IDwgMCB8fCBwb3J0ID4gMHhGRkZGKQot
ICAgICAgICB1cmwucmVtb3ZlUG9ydCgpOwotICAgIGVsc2UKLSAgICAgICAgdXJsLnNldFBvcnQo
cG9ydCk7Ci0KLSAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCAhZnJhbWUt
PnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOworICAg
IFVTdHJpbmcgcG9ydCA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0UG9ydCh1c3RyaW5n
VG9TdHJpbmcocG9ydCksIGFjdGl2ZURPTVdpbmRvdyhleGVjKSwgZmlyc3RET01XaW5kb3coZXhl
YykpOwogfQogCiB2b2lkIEpTTG9jYXRpb246OnNldFBhdGhuYW1lKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7Ci0g
ICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwo
KTsKLSAgICB1cmwuc2V0UGF0aCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykp
KTsKLQotICAgIG5hdmlnYXRlSWZBbGxvd2VkKGV4ZWMsIGZyYW1lLCB1cmwsICFmcmFtZS0+c2Ny
aXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7CisgICAgVVN0
cmluZyBwYXRobmFtZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0UGF0aG5hbWUodXN0
cmluZ1RvU3RyaW5nKHBhdGhuYW1lKSwgYWN0aXZlRE9NV2luZG93KGV4ZWMpLCBmaXJzdERPTVdp
bmRvdyhleGVjKSk7CiB9CiAKIHZvaWQgSlNMb2NhdGlvbjo6c2V0U2VhcmNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1l
KCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigp
LT51cmwoKTsKLSAgICB1cmwuc2V0UXVlcnkodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5n
KGV4ZWMpKSk7Ci0KLSAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCAhZnJh
bWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOwor
ICAgIFVTdHJpbmcgcGF0aG5hbWUgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbXBsKCktPnNldFNlYXJj
aCh1c3RyaW5nVG9TdHJpbmcocGF0aG5hbWUpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0
RE9NV2luZG93KGV4ZWMpKTsKIH0KIAogdm9pZCBKU0xvY2F0aW9uOjpzZXRIYXNoKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZy
YW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRl
cigpLT51cmwoKTsKLSAgICBTdHJpbmcgb2xkRnJhZ21lbnRJZGVudGlmaWVyID0gdXJsLmZyYWdt
ZW50SWRlbnRpZmllcigpOwotICAgIFN0cmluZyBzdHIgPSB1c3RyaW5nVG9TdHJpbmcodmFsdWUu
dG9TdHJpbmcoZXhlYykpOwotICAgIGlmIChzdHIuc3RhcnRzV2l0aCgiIyIpKQotICAgICAgICBz
dHIgPSBzdHIuc3Vic3RyaW5nKDEpOwotICAgIGlmIChlcXVhbElnbm9yaW5nTnVsbGl0eShvbGRG
cmFnbWVudElkZW50aWZpZXIsIHN0cikpCisgICAgVVN0cmluZyBoYXNoID0gdmFsdWUudG9TdHJp
bmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47
Ci0gICAgdXJsLnNldEZyYWdtZW50SWRlbnRpZmllcihzdHIpOwotCi0gICAgbmF2aWdhdGVJZkFs
bG93ZWQoZXhlYywgZnJhbWUsIHVybCwgIWZyYW1lLT5zY3JpcHQoKS0+YW55UGFnZUlzUHJvY2Vz
c2luZ1VzZXJHZXN0dXJlKCksIGZhbHNlKTsKKyAgICBpbXBsKCktPnNldEhhc2godXN0cmluZ1Rv
U3RyaW5nKGhhc2gpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMp
KTsKIH0KIAogSlNWYWx1ZSBKU0xvY2F0aW9uOjpyZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBKU0JpbmRpbmdTdGF0ZSBzdGF0ZShleGVjKTsKLSAgICBKU0JpbmRpbmc6OkxvY2F0aW9u
OjpyZXBsYWNlKCZzdGF0ZSwgaW1wbCgpLCB1c3RyaW5nVG9TdHJpbmcoZXhlYy0+YXJndW1lbnQo
MCkudG9TdHJpbmcoZXhlYykpKTsKKyAgICBVU3RyaW5nIHVybFN0cmluZyA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgaW1wbCgpLT5yZXBsYWNlKHVzdHJpbmdU
b1N0cmluZyh1cmxTdHJpbmcpLCBhY3RpdmVET01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93
KGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogSlNWYWx1ZSBKU0xvY2F0
aW9uOjpyZWxvYWQoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEZyYW1lKiBmcmFtZSA9IGltcGwo
KS0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lIHx8ICFhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoZXhl
YywgZnJhbWUpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGlmICghcHJv
dG9jb2xJc0phdmFTY3JpcHQoZnJhbWUtPmxvYWRlcigpLT51cmwoKSkpCi0gICAgICAgIGZyYW1l
LT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlUmVmcmVzaCgpOworICAgIGltcGwoKS0+
cmVsb2FkKGFjdGl2ZURPTVdpbmRvdyhleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKIEpTVmFsdWUgSlNMb2NhdGlvbjo6YXNzaWduKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKKyAgICBV
U3RyaW5nIHVybFN0cmluZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0KLSAgICBLVVJMIHVybCA9IGNvbXBsZXRlVVJMKGV4ZWMsIHVzdHJpbmdUb1N0cmluZyhleGVj
LT5hcmd1bWVudCgwKS50b1N0cmluZyhleGVjKSkpOwotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgaWYgKCFzaG91bGRBbGxvd05hdmln
YXRpb24oZXhlYywgZnJhbWUpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAg
IC8vIFdlIHdhbnQgYSBuZXcgaGlzdG9yeSBpdGVtIGlmIHRoaXMgSlMgd2FzIGNhbGxlZCB2aWEg
YSB1c2VyIGdlc3R1cmUKLSAgICBuYXZpZ2F0ZUlmQWxsb3dlZChleGVjLCBmcmFtZSwgdXJsLCAh
ZnJhbWUtPnNjcmlwdCgpLT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2Up
OworICAgIGltcGwoKS0+YXNzaWduKHVzdHJpbmdUb1N0cmluZyh1cmxTdHJpbmcpLCBhY3RpdmVE
T01XaW5kb3coZXhlYyksIGZpcnN0RE9NV2luZG93KGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9zcGVjaWFsaXphdGlvbi9K
U0JpbmRpbmdTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9zcGVj
aWFsaXphdGlvbi9KU0JpbmRpbmdTdGF0ZS5jcHAJKHJldmlzaW9uIDc0NzY5KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9zcGVjaWFsaXphdGlvbi9KU0JpbmRpbmdTdGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjMgKzEgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNCaW5k
aW5nU3RhdGUuaCIKLQotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkpTRE9NV2lu
ZG93LmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKLSNpbmNsdWRlICJTY3JpcHRD
b250cm9sbGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRnJhbWU7Ci0KLUZy
YW1lKiBTdGF0ZTxKU0JpbmRpbmc+OjphY3RpdmVGcmFtZSgpCi17Ci0gICAgcmV0dXJuIGFzSlNE
T01XaW5kb3cobV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZyYW1lKCk7
Ci19Ci0KLUZyYW1lKiBTdGF0ZTxKU0JpbmRpbmc+OjpmaXJzdEZyYW1lKCkKLXsKLSAgICByZXR1
cm4gYXNKU0RPTVdpbmRvdyhtX2V4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSktPmltcGwoKS0+
ZnJhbWUoKTsKLX0KLQotYm9vbCBTdGF0ZTxKU0JpbmRpbmc+Ojpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKQotewotICAgIHJldHVybiBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1
cmUoKTsKLX0KLQotYm9vbCBTdGF0ZTxKU0JpbmRpbmc+OjphbGxvd3NBY2Nlc3NGcm9tRnJhbWUo
RnJhbWUqIGZyYW1lKQotewotICAgIHJldHVybiBXZWJDb3JlOjphbGxvd3NBY2Nlc3NGcm9tRnJh
bWUobV9leGVjLCBmcmFtZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKy8vIE9uY2Ug
cmVmZXJlbmNlcyB0byB0aGlzIGZpbGUgYXJlIHJlbW92ZWQgZnJvbSBidWlsZCBmaWxlcywgdGhp
cyBmaWxlIHNob3VsZCBiZSBkZWxldGVkLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9zcGVj
aWFsaXphdGlvbi9KU0JpbmRpbmdTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvc3BlY2lhbGl6YXRpb24vSlNCaW5kaW5nU3RhdGUuaAkocmV2aXNpb24gNzQ3NjkpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL3NwZWNpYWxpemF0aW9uL0pTQmluZGluZ1N0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzUgKzEsMiBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSlNCaW5kaW5nU3RhdGVfaAotI2Rl
ZmluZSBKU0JpbmRpbmdTdGF0ZV9oCi0KLSNpbmNsdWRlICJHZW5lcmljQmluZGluZy5oIgotI2lu
Y2x1ZGUgIkpTQmluZGluZy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgRXhlY1N0YXRl
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBG
cmFtZTsKLQotdGVtcGxhdGUgPD4KLWNsYXNzIFN0YXRlPEpTQmluZGluZz4gOiBwdWJsaWMgU3Rh
dGU8R2VuZXJpY0JpbmRpbmc+IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBTdGF0ZShKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBtX2V4ZWMoZXhlYykKLSAgICB7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB+U3RhdGUoKQotICAgIHsKLSAgICB9Ci0KLSAgICBGcmFtZSogYWN0aXZlRnJh
bWUoKTsKLSAgICBGcmFtZSogZmlyc3RGcmFtZSgpOwotCi0gICAgYm9vbCBwcm9jZXNzaW5nVXNl
ckdlc3R1cmUoKTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBzaGFyZWQgaW4gQmlu
ZGluZ1NlY3VyaXR5Ci0gICAgYm9vbCBhbGxvd3NBY2Nlc3NGcm9tRnJhbWUoRnJhbWUqKTsKLQot
cHJpdmF0ZToKLSAgICBKU0M6OkV4ZWNTdGF0ZSogbV9leGVjOwotfTsKLQotdHlwZWRlZiBTdGF0
ZTxKU0JpbmRpbmc+IEpTQmluZGluZ1N0YXRlOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBKU0JpbmRpbmdTdGF0ZV9oCisvLyBPbmNlIHJlZmVyZW5jZXMgdG8gdGhpcyBm
aWxlIGFyZSByZW1vdmVkIGZyb20gYnVpbGQgZmlsZXMsIHRoaXMgZmlsZSBzaG91bGQgYmUgZGVs
ZXRlZC4KKyNlcnJvcgpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHJldmlzaW9uIDc0NzY5KQorKysgV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MDgsNyArMTYwOCw4
IEBAIHZvaWQgRE9NV2luZG93OjpyZXZva2VPYmplY3RVUkwoY29uc3QgU3QKIH0KICNlbmRpZgog
Ci12b2lkIERPTVdpbmRvdzo6c2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIERP
TVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQordm9pZCBET01X
aW5kb3c6OnNldExvY2F0aW9uKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBET01XaW5kb3cqIGFj
dGl2ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdywKKyAgICBTZXRMb2NhdGlvbkxvY2tp
bmcgbG9ja2luZykKIHsKICAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBhY3RpdmVXaW5kb3ctPmZy
YW1lKCk7CiAgICAgaWYgKCFhY3RpdmVGcmFtZSkKQEAgLTE2MzEsNyArMTYzMiw4IEBAIHZvaWQg
RE9NV2luZG93OjpzZXRMb2NhdGlvbihjb25zdCBTdHJpbmcKICAgICAvLyBXZSB3YW50IGEgbmV3
IGhpc3RvcnkgaXRlbSBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIHVzZXIgZ2VzdHVyZS4KICAgICBt
X2ZyYW1lLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoYWN0
aXZlRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksCiAgICAgICAgIGNvbXBsZXRl
ZFVSTCwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCksCi0gICAgICAg
ICFhY3RpdmVGcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgp
LCBmYWxzZSk7CisgICAgICAgIGxvY2tpbmcgIT0gTG9ja0hpc3RvcnlCYXNlZE9uR2VzdHVyZVN0
YXRlIHx8ICFhY3RpdmVGcmFtZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2Vz
dHVyZSgpLAorICAgICAgICBsb2NraW5nICE9IExvY2tIaXN0b3J5QmFzZWRPbkdlc3R1cmVTdGF0
ZSk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpwcmludEVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCShyZXZpc2lvbiA3NDc2OSkKKysrIFdlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCisgICAgZW51bSBT
ZXRMb2NhdGlvbkxvY2tpbmcgeyBMb2NrSGlzdG9yeUJhc2VkT25HZXN0dXJlU3RhdGUsIExvY2tI
aXN0b3J5QW5kQmFja0ZvcndhcmRMaXN0IH07CisKICAgICBjbGFzcyBET01XaW5kb3cgOiBwdWJs
aWMgUmVmQ291bnRlZDxET01XaW5kb3c+LCBwdWJsaWMgRXZlbnRUYXJnZXQgewogICAgIHB1Ymxp
YzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NV2luZG93PiBjcmVhdGUoRnJhbWUqIGZy
YW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRE9NV2luZG93KGZyYW1lKSk7IH0KQEAgLTExOCw3
ICsxMjAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5hdmlnYXRvciogY2xpZW50
SW5mb3JtYXRpb24oKSBjb25zdCB7IHJldHVybiBuYXZpZ2F0b3IoKTsgfQogCiAgICAgICAgIExv
Y2F0aW9uKiBsb2NhdGlvbigpIGNvbnN0OwotICAgICAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0
IFN0cmluZyYgbG9jYXRpb24sIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZp
cnN0V2luZG93KTsKKyAgICAgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBTdHJpbmcmIGxvY2F0
aW9uLCBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdywKKyAg
ICAgICAgICAgIFNldExvY2F0aW9uTG9ja2luZyA9IExvY2tIaXN0b3J5QmFzZWRPbkdlc3R1cmVT
dGF0ZSk7CiAKICAgICAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKTsKIApJbmRleDog
V2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvTG9j
YXRpb24uY3BwCShyZXZpc2lvbiA3NDc2OSkKKysrIFdlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDEwICsyOSwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkxvY2F0aW9uLmgiCiAKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUyLDcgKzUzLDcgQEAgaW5saW5lIGNvbnN0IEtVUkwm
IExvY2F0aW9uOjp1cmwoKSBjb25zdAogCiAgICAgY29uc3QgS1VSTCYgdXJsID0gbV9mcmFtZS0+
bG9hZGVyKCktPnVybCgpOwogICAgIGlmICghdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJu
IGJsYW5rVVJMKCk7ICAvLyBVc2UgImFib3V0OmJsYW5rIiB3aGlsZSB0aGUgcGFnZSBpcyBzdGls
bCBsb2FkaW5nIChiZWZvcmUgd2UgaGF2ZSBhIGZyYW1lKS4KKyAgICAgICAgcmV0dXJuIGJsYW5r
VVJMKCk7IC8vIFVzZSAiYWJvdXQ6YmxhbmsiIHdoaWxlIHRoZSBwYWdlIGlzIHN0aWxsIGxvYWRp
bmcgKGJlZm9yZSB3ZSBoYXZlIGEgZnJhbWUpLgogCiAgICAgcmV0dXJuIHVybDsKIH0KQEAgLTEy
NCw5ICsxMjUsNyBAQCBTdHJpbmcgTG9jYXRpb246Om9yaWdpbigpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IG9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKCkpOwotICAgIHJl
dHVybiBvcmlnaW4tPnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIFNlY3VyaXR5T3JpZ2luOjpjcmVh
dGUodXJsKCkpLT50b1N0cmluZygpOwogfQogCiBTdHJpbmcgTG9jYXRpb246Omhhc2goKSBjb25z
dApAQCAtMTM0LDcgKzEzMyw3IEBAIFN0cmluZyBMb2NhdGlvbjo6aGFzaCgpIGNvbnN0CiAgICAg
aWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBjb25zdCBTdHJp
bmcmIGZyYWdtZW50SWRlbnRpZmllciA9IHRoaXMtPnVybCgpLmZyYWdtZW50SWRlbnRpZmllcigp
OworICAgIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRJZGVudGlmaWVyID0gdXJsKCkuZnJhZ21lbnRJ
ZGVudGlmaWVyKCk7CiAgICAgcmV0dXJuIGZyYWdtZW50SWRlbnRpZmllci5pc0VtcHR5KCkgPyAi
IiA6ICIjIiArIGZyYWdtZW50SWRlbnRpZmllcjsKIH0KIApAQCAtMTU3LDQgKzE1NiwxMTggQEAg
U3RyaW5nIExvY2F0aW9uOjp0b1N0cmluZygpIGNvbnN0CiAgICAgcmV0dXJuIHVybC5oYXNQYXRo
KCkgPyB1cmwucHJldHR5VVJMKCkgOiB1cmwucHJldHR5VVJMKCkgKyAiLyI7CiB9CiAKK3ZvaWQg
TG9jYXRpb246OnNldEhyZWYoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIERPTVdpbmRvdyogYWN0
aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQoreworICAgIGlmICghbV9mcmFtZSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5zZXRMb2NhdGlvbih1
cmxTdHJpbmcsIGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3cpOworfQorCit2b2lkIExvY2F0aW9u
OjpzZXRQcm90b2NvbChjb25zdCBTdHJpbmcmIHByb3RvY29sLCBET01XaW5kb3cqIGFjdGl2ZVdp
bmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
aWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgS1VSTCB1cmwgPSBtX2ZyYW1lLT5s
b2FkZXIoKS0+dXJsKCk7CisgICAgaWYgKCF1cmwuc2V0UHJvdG9jb2wocHJvdG9jb2wpKSB7Cisg
ICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Zy
YW1lLT5kb21XaW5kb3coKS0+c2V0TG9jYXRpb24odXJsLnN0cmluZygpLCBhY3RpdmVXaW5kb3cs
IGZpcnN0V2luZG93KTsKK30KKwordm9pZCBMb2NhdGlvbjo6c2V0SG9zdChjb25zdCBTdHJpbmcm
IGhvc3QsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQor
eworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEtVUkwgdXJsID0gbV9m
cmFtZS0+bG9hZGVyKCktPnVybCgpOworICAgIHVybC5zZXRIb3N0QW5kUG9ydChob3N0KTsKKyAg
ICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0TG9jYXRpb24odXJsLnN0cmluZygpLCBhY3RpdmVX
aW5kb3csIGZpcnN0V2luZG93KTsKK30KKwordm9pZCBMb2NhdGlvbjo6c2V0SG9zdG5hbWUoY29u
c3QgU3RyaW5nJiBob3N0bmFtZSwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyog
Zmlyc3RXaW5kb3cpCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisgICAg
S1VSTCB1cmwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7CisgICAgdXJsLnNldEhvc3QoaG9z
dG5hbWUpOworICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5zZXRMb2NhdGlvbih1cmwuc3RyaW5n
KCksIGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3cpOworfQorCit2b2lkIExvY2F0aW9uOjpzZXRQ
b3J0KGNvbnN0IFN0cmluZyYgcG9ydFN0cmluZywgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERP
TVdpbmRvdyogZmlyc3RXaW5kb3cpCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1
cm47CisgICAgS1VSTCB1cmwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7CisgICAgaW50IHBv
cnQgPSBwb3J0U3RyaW5nLnRvSW50KCk7CisgICAgaWYgKHBvcnQgPCAwIHx8IHBvcnQgPiAweEZG
RkYpCisgICAgICAgIHVybC5yZW1vdmVQb3J0KCk7CisgICAgZWxzZQorICAgICAgICB1cmwuc2V0
UG9ydChwb3J0KTsKKyAgICBtX2ZyYW1lLT5kb21XaW5kb3coKS0+c2V0TG9jYXRpb24odXJsLnN0
cmluZygpLCBhY3RpdmVXaW5kb3csIGZpcnN0V2luZG93KTsKK30KKwordm9pZCBMb2NhdGlvbjo6
c2V0UGF0aG5hbWUoY29uc3QgU3RyaW5nJiBwYXRobmFtZSwgRE9NV2luZG93KiBhY3RpdmVXaW5k
b3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3cpCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgS1VSTCB1cmwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7CisgICAg
dXJsLnNldFBhdGgocGF0aG5hbWUpOworICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5zZXRMb2Nh
dGlvbih1cmwuc3RyaW5nKCksIGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3cpOworfQorCit2b2lk
IExvY2F0aW9uOjpzZXRTZWFyY2goY29uc3QgU3RyaW5nJiBzZWFyY2gsIERPTVdpbmRvdyogYWN0
aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQoreworICAgIGlmICghbV9mcmFtZSkK
KyAgICAgICAgcmV0dXJuOworICAgIEtVUkwgdXJsID0gbV9mcmFtZS0+bG9hZGVyKCktPnVybCgp
OworICAgIHVybC5zZXRRdWVyeShzZWFyY2gpOworICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5z
ZXRMb2NhdGlvbih1cmwuc3RyaW5nKCksIGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3cpOworfQor
Cit2b2lkIExvY2F0aW9uOjpzZXRIYXNoKGNvbnN0IFN0cmluZyYgaGFzaCwgRE9NV2luZG93KiBh
Y3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3cpCit7CisgICAgaWYgKCFtX2ZyYW1l
KQorICAgICAgICByZXR1cm47CisgICAgS1VSTCB1cmwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJs
KCk7CisgICAgU3RyaW5nIG9sZEZyYWdtZW50SWRlbnRpZmllciA9IHVybC5mcmFnbWVudElkZW50
aWZpZXIoKTsKKyAgICBTdHJpbmcgbmV3RnJhZ21lbnRJZGVudGlmaWVyID0gaGFzaDsKKyAgICBp
ZiAoaGFzaFswXSA9PSAnIycpCisgICAgICAgIG5ld0ZyYWdtZW50SWRlbnRpZmllciA9IGhhc2gu
c3Vic3RyaW5nKDEpOworICAgIGlmIChlcXVhbElnbm9yaW5nTnVsbGl0eShvbGRGcmFnbWVudElk
ZW50aWZpZXIsIG5ld0ZyYWdtZW50SWRlbnRpZmllcikpCisgICAgICAgIHJldHVybjsKKyAgICB1
cmwuc2V0RnJhZ21lbnRJZGVudGlmaWVyKG5ld0ZyYWdtZW50SWRlbnRpZmllcik7CisgICAgbV9m
cmFtZS0+ZG9tV2luZG93KCktPnNldExvY2F0aW9uKHVybC5zdHJpbmcoKSwgYWN0aXZlV2luZG93
LCBmaXJzdFdpbmRvdyk7Cit9CisKK3ZvaWQgTG9jYXRpb246OmFzc2lnbihjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5k
b3cpCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgbV9mcmFtZS0+
ZG9tV2luZG93KCktPnNldExvY2F0aW9uKHVybFN0cmluZywgYWN0aXZlV2luZG93LCBmaXJzdFdp
bmRvdyk7Cit9CisKK3ZvaWQgTG9jYXRpb246OnJlcGxhY2UoY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQorewor
ICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZnJhbWUtPmRvbVdpbmRv
dygpLT5zZXRMb2NhdGlvbih1cmxTdHJpbmcsIGFjdGl2ZVdpbmRvdywgZmlyc3RXaW5kb3csIExv
Y2tIaXN0b3J5QW5kQmFja0ZvcndhcmRMaXN0KTsKK30KKwordm9pZCBMb2NhdGlvbjo6cmVsb2Fk
KERPTVdpbmRvdyogYWN0aXZlV2luZG93KQoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAg
cmV0dXJuOworICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB0aGlzIGNyb3NzLW9yaWdpbiBz
ZWN1cml0eSBjaGVjayBpcyB2YWx1YWJsZS4KKyAgICAvLyBXZSBhbGxvdyBvbmUgcGFnZSB0byBj
aGFuZ2UgdGhlIGxvY2F0aW9uIG9mIGFub3RoZXIuIFdoeSBibG9jayBhdHRlbXB0cyB0byByZWxv
YWQ/CisgICAgLy8gT3RoZXIgbG9jYXRpb24gb3BlcmF0aW9ucyBzaW1wbHkgYmxvY2sgdXNlIG9m
IEphdmFTY3JpcHQgVVJMcyBjcm9zcyBvcmlnaW4uCisgICAgRE9NV2luZG93KiB0YXJnZXRXaW5k
b3cgPSBtX2ZyYW1lLT5kb21XaW5kb3coKTsKKyAgICBpZiAoIWFjdGl2ZVdpbmRvdy0+c2VjdXJp
dHlPcmlnaW4oKS0+Y2FuQWNjZXNzKHRhcmdldFdpbmRvdy0+c2VjdXJpdHlPcmlnaW4oKSkpIHsK
KyAgICAgICAgdGFyZ2V0V2luZG93LT5wcmludEVycm9yTWVzc2FnZSh0YXJnZXRXaW5kb3ctPmNy
b3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZVdpbmRvdykpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChwcm90b2NvbElzSmF2YVNjcmlwdChtX2ZyYW1lLT5sb2FkZXIo
KS0+dXJsKCkpKQorICAgICAgICByZXR1cm47CisgICAgbV9mcmFtZS0+bmF2aWdhdGlvblNjaGVk
dWxlcigpLT5zY2hlZHVsZVJlZnJlc2goKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0xvY2F0aW9uLmgJKHJldmlzaW9uIDc0NzY5KQorKysgV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM1LDM5ICszNSw1MyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBLVVJMOworY2xhc3MgRE9NV2luZG93OworY2xh
c3MgRnJhbWU7CitjbGFzcyBLVVJMOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitj
bGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPExvY2F0aW9uPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8TG9jYXRpb24+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBMb2NhdGlvbihmcmFtZSkpOyB9CisKKyAgICBGcmFtZSogZnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsK
KworICAgIHZvaWQgc2V0SHJlZihjb25zdCBTdHJpbmcmLCBET01XaW5kb3cqIGFjdGl2ZVdpbmRv
dywgRE9NV2luZG93KiBmaXJzdFdpbmRvdyk7CisgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKKwor
ICAgIHZvaWQgYXNzaWduKGNvbnN0IFN0cmluZyYsIERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBE
T01XaW5kb3cqIGZpcnN0V2luZG93KTsKKyAgICB2b2lkIHJlcGxhY2UoY29uc3QgU3RyaW5nJiwg
RE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3cpOworICAgIHZv
aWQgcmVsb2FkKERPTVdpbmRvdyogYWN0aXZlV2luZG93KTsKKworICAgIHZvaWQgc2V0UHJvdG9j
b2woY29uc3QgU3RyaW5nJiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmly
c3RXaW5kb3csIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgcHJvdG9jb2woKSBjb25zdDsK
KyAgICB2b2lkIHNldEhvc3QoY29uc3QgU3RyaW5nJiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3cs
IERPTVdpbmRvdyogZmlyc3RXaW5kb3cpOyAKKyAgICBTdHJpbmcgaG9zdCgpIGNvbnN0OworICAg
IHZvaWQgc2V0SG9zdG5hbWUoY29uc3QgU3RyaW5nJiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3cs
IERPTVdpbmRvdyogZmlyc3RXaW5kb3cpOyAKKyAgICBTdHJpbmcgaG9zdG5hbWUoKSBjb25zdDsK
KyAgICB2b2lkIHNldFBvcnQoY29uc3QgU3RyaW5nJiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3cs
IERPTVdpbmRvdyogZmlyc3RXaW5kb3cpOyAKKyAgICBTdHJpbmcgcG9ydCgpIGNvbnN0OworICAg
IHZvaWQgc2V0UGF0aG5hbWUoY29uc3QgU3RyaW5nJiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3cs
IERPTVdpbmRvdyogZmlyc3RXaW5kb3cpOyAKKyAgICBTdHJpbmcgcGF0aG5hbWUoKSBjb25zdDsK
KyAgICB2b2lkIHNldFNlYXJjaChjb25zdCBTdHJpbmcmLCBET01XaW5kb3cqIGFjdGl2ZVdpbmRv
dywgRE9NV2luZG93KiBmaXJzdFdpbmRvdyk7IAorICAgIFN0cmluZyBzZWFyY2goKSBjb25zdDsK
KyAgICB2b2lkIHNldEhhc2goY29uc3QgU3RyaW5nJiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3cs
IERPTVdpbmRvdyogZmlyc3RXaW5kb3cpOyAKKyAgICBTdHJpbmcgaGFzaCgpIGNvbnN0OworICAg
IFN0cmluZyBvcmlnaW4oKSBjb25zdDsKKworICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0Owor
CisgICAgU3RyaW5nIGdldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmKSBjb25zdDsKIAotICAgIGNs
YXNzIExvY2F0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8TG9jYXRpb24+IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPExvY2F0aW9uPiBjcmVhdGUoRnJhbWUqIGZyYW1l
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTG9jYXRpb24oZnJhbWUpKTsgfQorcHJpdmF0ZToKKyAg
ICBMb2NhdGlvbihGcmFtZSopOwogCi0gICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJhbWU7IH0KLSAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKKyAgICBjb25z
dCBLVVJMJiB1cmwoKSBjb25zdDsKIAotICAgICAgICBTdHJpbmcgaHJlZigpIGNvbnN0OwotCi0g
ICAgICAgIC8vIFVSSSBkZWNvbXBvc2l0aW9uIGF0dHJpYnV0ZXMKLSAgICAgICAgU3RyaW5nIHBy
b3RvY29sKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBob3N0KCkgY29uc3Q7Ci0gICAgICAgIFN0
cmluZyBob3N0bmFtZSgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgcG9ydCgpIGNvbnN0OwotICAg
ICAgICBTdHJpbmcgcGF0aG5hbWUoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIHNlYXJjaCgpIGNv
bnN0OwotICAgICAgICBTdHJpbmcgaGFzaCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgb3JpZ2lu
KCkgY29uc3Q7Ci0KLSAgICAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0KLSAgICAgICAg
U3RyaW5nIGdldFBhcmFtZXRlcihjb25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIExvY2F0aW9uKEZyYW1lKik7Ci0KLSAgICAgICAgY29uc3QgS1VSTCYgdXJsKCkg
Y29uc3Q7Ci0KLSAgICAgICAgRnJhbWUqIG1fZnJhbWU7Ci0gICAgfTsKKyAgICBGcmFtZSogbV9m
cmFtZTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAo=
</data>
<flag name="review"
          id="68812"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>