<?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>39706</bug_id>
          
          <creation_ts>2010-05-25 19:30:16 -0700</creation_ts>
          <short_desc>Make more HTML DOM members private, especially constructors, batch 2</short_desc>
          <delta_ts>2010-05-28 09:28:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230557</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 19:30:16 -0700</bug_when>
    <thetext>Make more HTML DOM members private, especially constructors, batch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230560</commentid>
    <comment_count>1</comment_count>
      <attachid>57064</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 19:39:32 -0700</bug_when>
    <thetext>Created attachment 57064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231111</commentid>
    <comment_count>2</comment_count>
      <attachid>57064</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-05-26 22:46:04 -0700</bug_when>
    <thetext>Comment on attachment 57064
Patch

WebCore/html/HTMLKeygenElement.cpp:52
 +          RefPtr&lt;HTMLOptionElement&gt; o = HTMLOptionElement::create(optionTag, document, this-&gt;form());
Consider adding a constructor for HTMLOptionElement which doesn&apos;t need to be passed &quot;optionTag&quot; as you did in other places in this patch and the previous one.



WebCore/html/HTMLOptGroupElement.cpp: 
 +      bool result = HTMLFormControlElement::insertBefore(newChild, refChild, ec, shouldLazyAttach);
I wonder if &quot;HTMLFormControlElement::insertBefore&quot; is used anywhere now (ditto for the other method calls that were removed here).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231570</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-27 23:07:15 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 57064 [details])
&gt; WebCore/html/HTMLKeygenElement.cpp:52
&gt;  +          RefPtr&lt;HTMLOptionElement&gt; o = HTMLOptionElement::create(optionTag, document, this-&gt;form());
&gt; Consider adding a constructor for HTMLOptionElement which doesn&apos;t need to be passed &quot;optionTag&quot; as you did in other places in this patch and the previous one.

I&apos;ll do that.

&gt; WebCore/html/HTMLOptGroupElement.cpp: 
&gt;  +      bool result = HTMLFormControlElement::insertBefore(newChild, refChild, ec, shouldLazyAttach);
&gt; I wonder if &quot;HTMLFormControlElement::insertBefore&quot; is used anywhere now (ditto for the other method calls that were removed here).

I&apos;m not sure I understand your question or suggestion here. These were unnecessary virtual function overrides that did nothing but call through to the parent class. I removed them. But the functions themselves are still used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231579</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-05-27 23:51:23 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; WebCore/html/HTMLOptGroupElement.cpp: 
&gt; &gt;  +      bool result = HTMLFormControlElement::insertBefore(newChild, refChild, ec, shouldLazyAttach);
&gt; &gt; I wonder if &quot;HTMLFormControlElement::insertBefore&quot; is used anywhere now (ditto for the other method calls that were removed here).
&gt; 
&gt; I&apos;m not sure I understand your question or suggestion here. These were unnecessary virtual function overrides that did nothing but call through to the parent class. I removed them. But the functions themselves are still used.

You answered it.

 I thought that maybe the functions were unused and now the functions that they called were unused.

(Sorry about taking so long to reply. I never saw your comment. When you review something, you don&apos;t get added to the cc list automatically unlike when you just leave a comment like this.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231718</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-28 08:34:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (Sorry about taking so long to reply.

You took less than an hour to reply!

&gt; I never saw your comment. When you review something, you don&apos;t get added to the cc list automatically unlike when you just leave a comment like this.)

Yes, I noticed that too. As you are aware I do a lot of reviews, so I am often affected by this. I guess we should change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231721</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-28 08:39:25 -0700</bug_when>
    <thetext>Committed r60361: &lt;http://trac.webkit.org/changeset/60361&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231746</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-28 09:28:07 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/60361 might have broken GTK Linux 64-bit Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57064</attachid>
            <date>2010-05-25 19:39:32 -0700</date>
            <delta_ts>2010-05-26 22:46:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39706-20100525193931.patch</filename>
            <type>text/plain</type>
            <size>103156</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDIwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ3IEBACisyMDEwLTA1LTI1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IG1vcmUgSFRNTCBET00gbWVtYmVycyBwcml2YXRlLCBlc3BlY2lhbGx5IGNvbnN0cnVjdG9ycywg
YmF0Y2ggMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
Mzk3MDYKKworICAgICAgICBSZWZhY3RvcmluZyBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAg
V29ya2VkIG15IHdheSB1cCBmcm9tIHRoZSBib3R0b20gb2YgSFRNTFRhZ05hbWVzLmluLgorCisg
ICAgICAgICogaHRtbC9IVE1MVGFnTmFtZXMuaW46IFJlbW92ZWQgY3JlYXRlV2l0aE5ldyBmcm9t
IGtleWdlbiwgbGlzdGluZywKKyAgICAgICAgbWFwLCBtYXJxdWVlLCBtZW51LCBtZXRhLCBvbCwg
b3B0Z3JvdXAsIG9wdGlvbiwgcCwgcGFyYW0sIHByZSwKKyAgICAgICAgc2NyaXB0LCBzZWxlY3Qs
IHNvdXJjZSwgc3R5bGUsIHRhYmxlLCB0Ym9keSwgdGQsIHRleHRhcmVhLCB0Zm9vdCwKKyAgICAg
ICAgdGgsIHRoZWFkLCB0aXRsZSwgdHIsIHVsLCB2aWRlbywgeG1wLCBhbmQgbm9zY3JpcHQuCisK
KyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZU9yZGVyZWRMaXN0RWxlbWVudCk6IFVzZSBjcmVhdGUgZnVuY3Rpb24gaW5zdGVhZCBvZiBu
ZXcuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVVbm9yZGVyZWRMaXN0RWxlbWVudCk6IERpdHRv
LgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyc2VyOjpoYW5kbGVFcnJvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNl
cjo6bWFwQ3JlYXRlRXJyb3JDaGVjayk6IERpdHRvLgorICAgICAgICAqIGh0bWwvSFRNTFZpZXdT
b3VyY2VEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3Vt
ZW50OjpjcmVhdGVDb250YWluaW5nVGFibGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZExpbmUpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwv
SFRNTEtleWdlbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1l
bnQ6OkhUTUxLZXlnZW5FbGVtZW50KTogVXNlIGNyZWF0ZSBmdW5jdGlvbgorICAgICAgICBpbnN0
ZWFkIG9mIG5ldy4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50OjpjcmVhdGUp
OiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxLZXlnZW5FbGVtZW50Lmg6IE1hZGUgY29uc3Ry
dWN0b3IgYW5kIHZpcnR1YWwgZnVuY3Rpb24KKyAgICAgICAgb3ZlcnJpZGVzIHByaXZhdGUsIGFk
ZGVkIGNyZWF0ZSBmdW5jdGlvbi4KKworICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQ6OkhUTUxNYXBFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwv
SFRNTE1hcEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OkhUTUxNYXJxdWVlRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZW51
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQ6OkhUTUxNZW51
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MTWVudUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZXRh
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQ6OkhUTUxNZXRh
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MTWV0YUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxOb1Nj
cmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6
SFRNTE5vU2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTm9TY3JpcHRFbGVt
ZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hp
bGRTaG91bGRDcmVhdGVSZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MTm9TY3JpcHRFbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPTGlzdEVsZW1lbnQ6OkhUTUxPTGlzdEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE9MaXN0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxPTGlz
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudDo6SFRNTE9wdEdyb3VwRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50OjpjcmVhdGUpOgorICAgICAg
ICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlv
bkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxP
cHRpb25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpjcmVh
dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxQYXJhZ3JhcGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJhZ3Jh
cGhFbGVtZW50OjpIVE1MUGFyYWdyYXBoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyYWdyYXBoRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJhZ3JhcGhF
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxQYXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxQ
YXJhbUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxQcmVFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUHJlRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxQcmVF
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MUXVvdGVFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFF1b3RlRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxR
dW90ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxTY3JpcHRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MU291
cmNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291cmNlRWxlbWVudDo6SFRN
TFNvdXJjZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNvdXJjZUVsZW1lbnQ6OmNy
ZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MU291cmNlRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVt
ZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1l
bnQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
YWJsZVJvd0VsZW1lbnQ6OkhUTUxUYWJsZVJvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRhYmxlUm93RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZVJvd0VsZW1lbnQ6Omluc2VydENlbGwpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93RWxl
bWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OkhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Omluc2VydFJv
dyk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4
dEFyZWFFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MVGl0bGVFbGVtZW50OjpIVE1MVGl0bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUaXRsZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGl0bGVF
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxVTGlzdEVsZW1lbnQ6OkhUTUxVTGlzdEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxV
TGlzdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDo6SFRNTFZpZGVvRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwv
SFRNTFZpZGVvRWxlbWVudC5oOgorICAgICAgICBNYWRlIGNvbnN0cnVjdG9ycyBhbmQgdmlydHVh
bCBmdW5jdGlvbiBvdmVycmlkZXMgcHJpdmF0ZSwgYWRkZWQKKyAgICAgICAgY3JlYXRlIGZ1bmN0
aW9uLgorCisgICAgICAgICogaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQpOiBV
cGRhdGVkCisgICAgICAgIG5hbWVzIG9mIGRhdGEgbWVtYmVycy4gUmVuYW1lZCBfcm93IHRvIG1f
cm93LCBfY29sIHRvIG1fY29sLAorICAgICAgICByU3BhbiB0byBtX3Jvd1NwYW4sIGNTcGFuIHRv
IG1fY29sU3BhbiwgYW5kIHJlbW92ZWQgdW51c2VkCisgICAgICAgIHJvd0hlaWdodCBhbmQgbV9z
b2xpZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjpjcmVhdGUpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6IFVwZGF0ZWQgbmFtZXMuCisgICAgICAgICogaHRtbC9IVE1MVGFibGVDZWxs
RWxlbWVudC5oOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjpjcmVhdGUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmNyZWF0ZVRIZWFkKTogVXNlZCBjcmVh
dGUgaW5zdGVhZCBvZiBuZXcuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50Ojpj
cmVhdGVURm9vdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6
aW5zZXJ0Um93KTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50Lmg6CisK
KyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVBhcnRFbGVtZW50Lmg6IE1hZGUgbWVtYmVycyBwcm90
ZWN0ZWQgaW5zdGVhZCBvZgorICAgICAgICBwdWJsaWMuCisKIDIwMTAtMDUtMjQgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3Rl
aW4uCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDYwMTc3KQorKysgV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODg0LDEyICs4
ODQsMTIgQEAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gY3JlYXRlQnJlYWtFbGVtZQogCiBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVPcmRlcmVkTGlzdEVsZW1lbnQoRG9jdW1lbnQqIGRv
Y3VtZW50KQogewotICAgIHJldHVybiBuZXcgSFRNTE9MaXN0RWxlbWVudChvbFRhZywgZG9jdW1l
bnQpOworICAgIHJldHVybiBIVE1MT0xpc3RFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwogfQog
CiBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVVbm9yZGVyZWRMaXN0RWxlbWVudChEb2N1
bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MVUxpc3RFbGVtZW50KHVsVGFn
LCBkb2N1bWVudCk7CisgICAgcmV0dXJuIEhUTUxVTGlzdEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUxpc3RJdGVtRWxlbWVudChE
b2N1bWVudCogZG9jdW1lbnQpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsOCArNDAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxLZXlnZW5FbGVtZW50OjpIVE1MS2V5Z2VuRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9y
bUVsZW1lbnQqIGYpCi0gICAgOiBIVE1MU2VsZWN0RWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCitp
bmxpbmUgSFRNTEtleWdlbkVsZW1lbnQ6OkhUTUxLZXlnZW5FbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
KQorICAgIDogSFRNTFNlbGVjdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCiB7CiAg
ICAgQVNTRVJUKGhhc1RhZ05hbWUoa2V5Z2VuVGFnKSk7CiAgICAgVmVjdG9yPFN0cmluZz4ga2V5
czsKQEAgLTQ5LDEyICs0OSwxNyBAQCBIVE1MS2V5Z2VuRWxlbWVudDo6SFRNTEtleWdlbkVsZW1l
bnQoY29uCiAgICAgICAgIAogICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBrZXlzLmVuZCgpOwogICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0ga2V5cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSFRNTE9wdGlvbkVs
ZW1lbnQqIG8gPSBuZXcgSFRNTE9wdGlvbkVsZW1lbnQob3B0aW9uVGFnLCBkb2MsIGZvcm0oKSk7
CisgICAgICAgIFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gbyA9IEhUTUxPcHRpb25FbGVtZW50
OjpjcmVhdGUob3B0aW9uVGFnLCBkb2N1bWVudCwgdGhpcy0+Zm9ybSgpKTsKICAgICAgICAgYWRk
Q2hpbGQobyk7Ci0gICAgICAgIG8tPmFkZENoaWxkKFRleHQ6OmNyZWF0ZShkb2MsICppdCkpOwor
ICAgICAgICBvLT5hZGRDaGlsZChUZXh0OjpjcmVhdGUoZG9jdW1lbnQsICppdCkpOwogICAgIH0K
IH0KIAorUGFzc1JlZlB0cjxIVE1MS2V5Z2VuRWxlbWVudD4gSFRNTEtleWdlbkVsZW1lbnQ6OmNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhU
TUxGb3JtRWxlbWVudCogZm9ybSkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxLZXlnZW5FbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1M
S2V5Z2VuRWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywga2V5Z2VuLCAoImtleWdlbiIpKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5oCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRt
bC9IVE1MS2V5Z2VuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMwLDcgKzMwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSFRNTEtleWdlbkVsZW1lbnQgOiBwdWJsaWMgSFRNTFNlbGVjdEVsZW1lbnQg
ewogcHVibGljOgotICAgIEhUTUxLZXlnZW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MS2V5Z2VuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCos
IEhUTUxGb3JtRWxlbWVudCopOworCitwcml2YXRlOgorICAgIEhUTUxLZXlnZW5FbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOwogCiAgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwpAQCAtMzgsNyAr
NDEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0
dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3Qm
LCBib29sKTsKIAotcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNPcHRpb25hbEZvcm1Db250
cm9sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIEF0b21pY1N0cmluZyBtX2NoYWxs
ZW5nZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTM4LDEyICszOCwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxNYXBFbGVtZW50OjpIVE1MTWFwRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jKQorSFRNTE1hcEVsZW1lbnQ6OkhUTUxNYXBFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKG1hcFRhZykpOwog
fQogCitQYXNzUmVmUHRyPEhUTUxNYXBFbGVtZW50PiBIVE1MTWFwRWxlbWVudDo6Y3JlYXRlKERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxNYXBFbGVtZW50KG1hcFRh
ZywgZG9jdW1lbnQpOworfQorCitQYXNzUmVmUHRyPEhUTUxNYXBFbGVtZW50PiBIVE1MTWFwRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxNYXBFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KTsKK30KKwogSFRNTE1hcEVsZW1lbnQ6On5IVE1MTWFwRWxlbWVudCgpCiB7CiAgICAgZG9jdW1l
bnQoKS0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1hcEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuaAkocmV2
aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsMTcgKzMzLDEyIEBAIGNsYXNzIEhU
TUxJbWFnZUVsZW1lbnQ7CiAgICAgCiBjbGFzcyBIVE1MTWFwRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTE1hcEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxNYXBFbGVtZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNS
ZXF1aXJlZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MTsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTE1hcEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVudCopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxNYXBFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+SFRNTE1hcEVsZW1lbnQoKTsKIAogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCi0gICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwotCiAgICAgYm9v
bCBtYXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgY29uc3QgSW50U2l6ZSYsIEhpdFRlc3RSZXN1
bHQmKTsKICAgICAKICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQoKSBjb25zdDsK
QEAgLTUzLDYgKzQ4LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5n
Jik7CiAKIHByaXZhdGU6CisgICAgSFRNTE1hcEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVj
a0RURChjb25zdCBOb2RlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoQXR0cmlidXRlKik7CisKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwogfTsKIApJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACi0vKioKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNywxNCArMzcsMTkg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIC8vIFdpbklFIHVzZXMgNjBtcyBhcyB0aGUg
bWluaW11bSBkZWxheSBieSBkZWZhdWx0LgogY29uc3QgaW50IGRlZmF1bHRNaW5pbXVtRGVsYXkg
PSA2MDsKIAotSFRNTE1hcnF1ZWVFbGVtZW50OjpIVE1MTWFycXVlZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRh
Z05hbWUsIGRvYykKLSAgICAsIEFjdGl2ZURPTU9iamVjdChkb2MsIHRoaXMpCitpbmxpbmUgSFRN
TE1hcnF1ZWVFbGVtZW50OjpIVE1MTWFycXVlZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQpCisgICAgLCBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQsIHRoaXMpCiAgICAgLCBt
X21pbmltdW1EZWxheShkZWZhdWx0TWluaW11bURlbGF5KQogewogICAgIEFTU0VSVChoYXNUYWdO
YW1lKG1hcnF1ZWVUYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MTWFycXVlZUVsZW1lbnQ+IEhU
TUxNYXJxdWVlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxNYXJxdWVlRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCk7Cit9CisKIGJvb2wgSFRNTE1hcnF1ZWVFbGVtZW50OjptYXBUb0Vu
dHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyTmFtZSA9PSB3aWR0aEF0dHIgfHwKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmgJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxNYXJxdWVlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDEzICszMiw3IEBAIGNsYXNzIFJlbmRlck1hcnF1ZWU7
CiAKIGNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHJpdmF0
ZSBBY3RpdmVET01PYmplY3QgewogcHVibGljOgotICAgIEhUTUxNYXJxdWVlRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICAKLSAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJl
ZDsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQot
Ci0gICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxNYXJxdWVlRWxl
bWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgaW50
IG1pbmltdW1EZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluaW11bURlbGF5OyB9CiAKQEAgLTQ4
LDYgKzQyLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3AoKTsKICAgICAKIHByaXZhdGU6Cisg
ICAgSFRNTE1hcnF1ZWVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwor
ICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShj
b25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisKICAgICAvLyBB
Y3RpdmVET01PYmplY3QKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBzdXNwZW5kKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lbnVFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lbnVFbGVtZW50LmNwcAko
cmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1lbnVFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKLS8qKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTgsNiAr
MTksNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MTWVudUVsZW1lbnQuaCIKIApAQCAtMjcsMTIg
KzI5LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotSFRNTE1lbnVFbGVtZW50OjpIVE1MTWVudUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRv
YykKK2lubGluZSBIVE1MTWVudUVsZW1lbnQ6OkhUTUxNZW51RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShtZW51VGFnKSk7CiB9
CiAKK1Bhc3NSZWZQdHI8SFRNTE1lbnVFbGVtZW50PiBIVE1MTWVudUVsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
cmV0dXJuIG5ldyBIVE1MTWVudUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworfQorCiBib29s
IEhUTUxNZW51RWxlbWVudDo6Y29tcGFjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFnZXRBdHRy
aWJ1dGUoY29tcGFjdEF0dHIpLmlzTnVsbCgpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNZW51
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVudUVsZW1lbnQuaAko
cmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1lbnVFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxMyArMjksMTYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTWVudUVsZW1lbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnQgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxNZW51RWxl
bWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIAorICAg
IGJvb2wgY29tcGFjdCgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKKworcHJp
dmF0ZToKICAgICBIVE1MTWVudUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAgICAgCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KICAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KLQotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRt
bC9IVE1MTWV0YUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOCBAQAotLyoq
CisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTMxLDE0ICszMSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxNZXRhRWxlbWVudDo6SFRNTE1ldGFFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxl
bWVudCh0YWdOYW1lLCBkb2MpCitpbmxpbmUgSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAg
IDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUobWV0YVRhZykpOwogfQogCi1IVE1MTWV0YUVsZW1lbnQ6On5IVE1MTWV0YUVsZW1lbnQoKQor
UGFzc1JlZlB0cjxIVE1MTWV0YUVsZW1lbnQ+IEhUTUxNZXRhRWxlbWVudDo6Y3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKKyAgICByZXR1
cm4gbmV3IEhUTUxNZXRhRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CiB9CiAKIHZvaWQgSFRN
TE1ldGFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxNZXRhRWxlbWVudC5oCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MTWV0YUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTksNiArMTksNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICov
CisKICNpZm5kZWYgSFRNTE1ldGFFbGVtZW50X2gKICNkZWZpbmUgSFRNTE1ldGFFbGVtZW50X2gK
IApAQCAtMjgsMTYgKzI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTWV0
YUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxNZXRhRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKLSAgICB+SFRNTE1ldGFFbGVt
ZW50KCk7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKLQotICAgIHZvaWQgcHJvY2VzcygpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxNZXRhRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogCiAgICAgU3RyaW5nIGNvbnRlbnQoKSBjb25zdDsKICAgICB2b2lkIHNldENvbnRlbnQoY29u
c3QgU3RyaW5nJik7CkBAIC01MSw3ICs0MywxNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHNjaGVt
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2NoZW1lKGNvbnN0IFN0cmluZyYpOwogCi1wcm90ZWN0
ZWQ6Citwcml2YXRlOgorICAgIEhUTUxNZXRhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRl
ZEludG9Eb2N1bWVudCgpOworCisgICAgdm9pZCBwcm9jZXNzKCk7CisKICAgICBTdHJpbmcgbV9l
cXVpdjsKICAgICBTdHJpbmcgbV9jb250ZW50OwogfTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
Tm9TY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE5vU2Ny
aXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxOb1Nj
cmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsMTQg
KzMxLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotSFRNTE5vU2NyaXB0RWxlbWVudDo6SFRNTE5vU2NyaXB0RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFn
TmFtZSwgZG9jKQoraW5saW5lIEhUTUxOb1NjcmlwdEVsZW1lbnQ6OkhUTUxOb1NjcmlwdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAg
IDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUobm9zY3JpcHRUYWcpKTsKIH0KIAotSFRNTE5vU2NyaXB0RWxlbWVudDo6fkhUTUxOb1Njcmlw
dEVsZW1lbnQoKQorUGFzc1JlZlB0cjxIVE1MTm9TY3JpcHRFbGVtZW50PiBIVE1MTm9TY3JpcHRF
bGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQogeworICAgIHJldHVybiBuZXcgSFRNTE5vU2NyaXB0RWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCk7CiB9CiAKIGJvb2wgSFRNTE5vU2NyaXB0RWxlbWVudDo6Y2hlY2tEVEQoY29uc3Qg
Tm9kZSogbmV3Q2hpbGQpCkBAIC03NiwxMCArNzgsMTEgQEAgdm9pZCBIVE1MTm9TY3JpcHRFbGVt
ZW50OjpyZWNhbGNTdHlsZShTdAogICAgIH0KIH0KIAotYm9vbCBIVE1MTm9TY3JpcHRFbGVtZW50
OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqIGNoaWxkKSBjb25zdAorYm9vbCBIVE1M
Tm9TY3JpcHRFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUqKSBjb25zdAog
ewogICAgIHJldHVybiBkb2N1bWVudCgpLT5zaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KCk7
CiB9CiAKIH0KKwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE5vU2NyaXB0RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTm9TY3JpcHRFbGVtZW50LmgJKHJl
dmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxOb1NjcmlwdEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLykKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDEwICsyOSwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxOb1NjcmlwdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQgewogcHVibGljOgotICAgIEhUTUxOb1NjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE5vU2NyaXB0RWxlbWVu
dD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiBwcml2YXRlOgot
ICAgIHZpcnR1YWwgfkhUTUxOb1NjcmlwdEVsZW1lbnQoKTsKKyAgICBIVE1MTm9TY3JpcHRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgdmlydHVhbCBib29s
IGNoZWNrRFREKGNvbnN0IE5vZGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTMyLDEzICszMywyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxPTGlzdEVsZW1lbnQ6OkhUTUxPTGlz
dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKK0hUTUxPTGlzdEVsZW1lbnQ6OkhUTUxPTGlz
dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50
KQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX3N0YXJ0KDEp
CiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUob2xUYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1M
T0xpc3RFbGVtZW50PiBIVE1MT0xpc3RFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
KQoreworICAgIHJldHVybiBuZXcgSFRNTE9MaXN0RWxlbWVudChvbFRhZywgZG9jdW1lbnQpOwor
fQorCitQYXNzUmVmUHRyPEhUTUxPTGlzdEVsZW1lbnQ+IEhUTUxPTGlzdEVsZW1lbnQ6OmNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7Cisg
ICAgcmV0dXJuIG5ldyBIVE1MT0xpc3RFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKK30KKwog
Ym9vbCBIVE1MT0xpc3RFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChh
dHRyTmFtZSA9PSB0eXBlQXR0cikgewpAQCAtMTAyLDQgKzExMyw1IEBAIHZvaWQgSFRNTE9MaXN0
RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHIKIHsKICAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIs
IHZhbHVlKTsKIH0KKwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5oCShyZXZpc2lvbiA2
MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxMyArMjksOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxPTGlzdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQgewogcHVibGljOgotICAgIEhUTUxPTGlzdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7Ci0gICAgICAgIAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50
cnkmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9MaXN0RWxlbWVudD4gY3JlYXRlKERv
Y3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9MaXN0RWxlbWVudD4gY3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgYm9vbCBjb21wYWN0KCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwpAQCAtNDYsNiArNDIsMTQgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsKIAogcHJpdmF0ZToKKyAgICBI
VE1MT0xpc3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgICAg
ICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gNTsgfQorCisgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JikgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOworCiAgICAgaW50IG1f
c3RhcnQ7CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCShyZXZp
c2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBA
bnlwb3AuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM3LDEzICszNywxNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxPcHRHcm91cEVsZW1l
bnQ6OkhUTUxPcHRHcm91cEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQotICAgIDogSFRNTEZvcm1Db250cm9sRWxl
bWVudCh0YWdOYW1lLCBkb2MsIGYpCi0gICAgLCBtX3N0eWxlKDApCitpbmxpbmUgSFRNTE9wdEdy
b3VwRWxlbWVudDo6SFRNTE9wdEdyb3VwRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCiB7CiAgICAgQVNT
RVJUKGhhc1RhZ05hbWUob3B0Z3JvdXBUYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MT3B0R3Jv
dXBFbGVtZW50PiBIVE1MT3B0R3JvdXBFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCit7
CisgICAgcmV0dXJuIG5ldyBIVE1MT3B0R3JvdXBFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBm
b3JtKTsKK30KKwogYm9vbCBIVE1MT3B0R3JvdXBFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29u
c3QKIHsKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKTsKQEAgLTYxLDM2
ICs2NSw2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTE9wdEdyb3VwRWxlbWVudDoKICAgICBy
ZXR1cm4gb3B0Z3JvdXA7CiB9CiAKLWJvb2wgSFRNTE9wdEdyb3VwRWxlbWVudDo6aW5zZXJ0QmVm
b3JlKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIHJlZkNoaWxkLCBFeGNlcHRpb25D
b2RlJiBlYywgYm9vbCBzaG91bGRMYXp5QXR0YWNoKQotewotICAgIGJvb2wgcmVzdWx0ID0gSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCByZWZDaGlsZCwgZWMs
IHNob3VsZExhenlBdHRhY2gpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgSFRNTE9w
dEdyb3VwRWxlbWVudDo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5v
ZGUqIG9sZENoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm9vbCBzaG91bGRMYXp5QXR0YWNoKQot
ewotICAgIGJvb2wgcmVzdWx0ID0gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVwbGFjZUNoaWxk
KG5ld0NoaWxkLCBvbGRDaGlsZCwgZWMsIHNob3VsZExhenlBdHRhY2gpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLWJvb2wgSFRNTE9wdEdyb3VwRWxlbWVudDo6cmVtb3ZlQ2hpbGQoTm9kZSog
b2xkQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGJvb2wgcmVzdWx0ID0gSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQsIGVjKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmFwcGVuZENoaWxkKFBhc3NS
ZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIEV4Y2VwdGlvbkNvZGUmIGVjLCBib29sIHNob3VsZExhenlB
dHRhY2gpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjphcHBl
bmRDaGlsZChuZXdDaGlsZCwgZWMsIHNob3VsZExhenlBdHRhY2gpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWJvb2wgSFRNTE9wdEdyb3VwRWxlbWVudDo6cmVtb3ZlQ2hpbGRyZW4oKQotewot
ICAgIGJvb2wgcmVzdWx0ID0gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlQ2hpbGRyZW4o
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OmNo
aWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBO
b2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKICAgICByZWNhbGNTZWxl
Y3RPcHRpb25zKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgJKHJldmlzaW9u
IDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxl
ckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTMzLDcgKzMzLDE3IEBAIGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50Owog
CiBjbGFzcyBIVE1MT3B0R3JvdXBFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQsIHB1YmxpYyBPcHRpb25Hcm91cEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxPcHRHcm91
cEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50
KiA9IDApOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxPcHRHcm91cEVsZW1lbnQ+IGNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKKwor
ICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0OworICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgU3RyaW5n
Jik7CisgICAgCisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIG93bmVyU2VsZWN0RWxlbWVudCgpIGNv
bnN0OworICAgIAorICAgIHZpcnR1YWwgU3RyaW5nIGdyb3VwTGFiZWxUZXh0KCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgSFRNTE9wdEdyb3VwRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RU
RChjb25zdCBOb2RlKik7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250
cm9sVHlwZSgpIGNvbnN0OwpAQCAtNDUsMjEgKzU1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFJlbmRlclN0eWxlKFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+KTsKIAotICAgIHZpcnR1YWwgYm9vbCBpbnNlcnRCZWZvcmUoUGFzc1Jl
ZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2VwdGlvbkNvZGUmLCBib29s
IHNob3VsZExhenlBdHRhY2ggPSBmYWxzZSk7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGls
ZChQYXNzUmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBOb2RlKiBvbGRDaGlsZCwgRXhjZXB0aW9uQ29k
ZSYsIGJvb2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVt
b3ZlQ2hpbGQoTm9kZSogY2hpbGQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
YXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgRXhjZXB0aW9uQ29kZSYsIGJv
b2wgc2hvdWxkTGF6eUF0dGFjaCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVtb3ZlQ2hp
bGRyZW4oKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5
UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdl
ID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCi0gICAgU3RyaW5nIGxhYmVsKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICB2aXJ0dWFs
IFN0cmluZyBncm91cExhYmVsVGV4dCgpIGNvbnN0OwotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBv
d25lclNlbGVjdEVsZW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0
aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCk7CiAgICAgCi1wcml2YXRlOgogICAgIHZpcnR1YWwg
UmVuZGVyU3R5bGUqIG5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdDsKICAgICAKICAgICB2
b2lkIHJlY2FsY1NlbGVjdE9wdGlvbnMoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9u
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50
LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMSArNDQsMTUgQEAgdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAogSFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50
KiBmb3JtKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwg
Zm9ybSkKLSAgICAsIG1fc3R5bGUoMCkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShvcHRpb25U
YWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gSFRNTE9wdGlvbkVsZW1l
bnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1l
bnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxPcHRpb25F
bGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKTsKK30KKwogUGFzc1JlZlB0cjxIVE1MT3B0
aW9uRWxlbWVudD4gSFRNTE9wdGlvbkVsZW1lbnQ6OmNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgdmFsdWUs
CiAgICAgICAgIGJvb2wgZGVmYXVsdFNlbGVjdGVkLCBib29sIHNlbGVjdGVkLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiA2MDE3
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQXR0cmlidXRlOwotY2xhc3MgSFRNTEZvcm1FbGVtZW50
OwogY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnQ7CiAKIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50IDog
cHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQsIHB1YmxpYyBPcHRpb25FbGVtZW50IHsKQEAg
LTM4LDU1ICszNiw1OSBAQCBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9y
CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlck1lbnVMaXN0OwogCiBwdWJsaWM6Ci0gICAgSFRNTE9w
dGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVt
ZW50KiA9IDApOwotCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+IGNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4gY3JlYXRlRm9ySlNDb25z
dHJ1Y3RvcihEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwKICAgICAgICBib29sIGRlZmF1bHRTZWxlY3RlZCwgYm9vbCBzZWxlY3RlZCwgRXhjZXB0aW9u
Q29kZSYpOwogCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDI7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQo
Y29uc3QgTm9kZSogbmV3Q2hpbGQpOwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFJlbmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsK
LQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25z
dDsKLQogICAgIHZpcnR1YWwgU3RyaW5nIHRleHQoKSBjb25zdDsKICAgICB2b2lkIHNldFRleHQo
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgaW50IGluZGV4KCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogCiAg
ICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdDsKICAgICB2b2lkIHNldFZhbHVlKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgdmlydHVhbCBib29sIHNlbGVjdGVkKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRTZWxlY3RlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShi
b29sKTsKIAogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBvd25lclNlbGVjdEVsZW1lbnQoKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJz
ZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAw
LCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7Ci0KICAgICBib29sIGRlZmF1bHRTZWxlY3RlZCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0RGVmYXVsdFNlbGVjdGVkKGJvb2wpOwogCiAgICAgU3RyaW5n
IGxhYmVsKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKIAotICAg
IHZpcnR1YWwgU3RyaW5nIHRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKSBjb25zdDsK
LQogICAgIGJvb2wgb3duRWxlbWVudERpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6ZGlzYWJsZWQoKTsgfQorCiAgICAgdmlydHVhbCBib29sIGRpc2FibGVk
KCkgY29uc3Q7CiAKK3ByaXZhdGU6CisgICAgSFRNTE9wdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworCisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQp
OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVk
ZWQoUmVuZGVyU3R5bGUqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIHNldFJl
bmRlclN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKKworICAgIHZpcnR1YWwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTZWxlY3RlZFN0YXRlKGJvb2wpOworCisgICAgdmlydHVhbCBTdHJpbmcgdGV4dEluZGVudGVk
VG9SZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVk
SW50b1RyZWUoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sKTsK
IAotcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdl
ZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hh
bmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOworCiAgICAgdmlydHVhbCBSZW5kZXJT
dHlsZSogbm9uUmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNvbnN0OwogCiAgICAgT3B0aW9uRWxlbWVu
dERhdGEgbV9kYXRhOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACi0vKioKKy8qCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMyBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsMTIgKzMz
LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotSFRNTFBhcmFncmFwaEVsZW1lbnQ6OkhUTUxQYXJhZ3JhcGhFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdO
YW1lLCBkb2MpCitpbmxpbmUgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OkhUTUxQYXJhZ3JhcGhFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdO
YW1lKHBUYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MUGFyYWdyYXBoRWxlbWVudD4gSFRNTFBh
cmFncmFwaEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MUGFyYWdyYXBoRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCk7Cit9CisKIGJvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OmNoZWNr
RFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQogewogICAgIHJldHVybiBpbklubGluZVRhZ0xpc3Qo
bmV3Q2hpbGQpIHx8IChkb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSAmJiBuZXdDaGlsZC0+aGFz
VGFnTmFtZSh0YWJsZVRhZykpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmgJ
KHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJhZ3JhcGhFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw2ICsy
OSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxQYXJhZ3JhcGhFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MUGFyYWdyYXBoRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOworCisgICAgU3RyaW5nIGFsaWduKCkgY29uc3Q7CisgICAgdm9pZCBzZXRBbGlnbihjb25z
dCBTdHJpbmcmKTsKKworcHJpdmF0ZToKICAgICBIVE1MUGFyYWdyYXBoRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CkBA
IC0zNiw5ICs0Myw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLQotICAgIFN0cmlu
ZyBhbGlnbigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIFN0ZWZhbiBTY2hp
bWFuc2tpICgxU3RlaW5AZ214LmRlKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDE0ICszMSwxNSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxQYXJhbUVsZW1lbnQ6
OkhUTUxQYXJhbUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKK2lubGluZSBIVE1MUGFyYW1F
bGVtZW50OjpIVE1MUGFyYW1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQog
ewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHBhcmFtVGFnKSk7CiB9CiAKLUhUTUxQYXJhbUVsZW1l
bnQ6On5IVE1MUGFyYW1FbGVtZW50KCkKK1Bhc3NSZWZQdHI8SFRNTFBhcmFtRWxlbWVudD4gSFRN
TFBhcmFtRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCkKIHsKKyAgICByZXR1cm4gbmV3IEhUTUxQYXJhbUVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpOwogfQogCiB2b2lkIEhUTUxQYXJhbUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyYW1FbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuaAkocmV2
aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxNyArMjgs
OCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MUGFyYW1FbGVtZW50IDogcHVi
bGljIEhUTUxFbGVtZW50IHsKLSAgICBmcmllbmQgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnQ7CiBw
dWJsaWM6Ci0gICAgSFRNTFBhcmFtRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKLSAgICB+SFRNTFBhcmFtRWxlbWVudCgpOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVu
OyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTFBhcmFtRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogCiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWU7IH0KICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7CkBAIC01Miw5ICs0MywxOCBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nIHZhbHVlVHlwZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VmFs
dWVUeXBlKGNvbnN0IFN0cmluZyYpOwogCitwcml2YXRlOgorICAgIEhUTUxQYXJhbUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRk
ZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKKwogICAg
IHZpcnR1YWwgdm9pZCBhZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VS
TD4mKSBjb25zdDsKIAotIHByb3RlY3RlZDoKICAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwogICAg
IEF0b21pY1N0cmluZyBtX3ZhbHVlOwogfTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJKHJldmlzaW9u
IDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NjEsMTcgKzY2MSwxNSBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4s
IGJvCiAgICAgICAgICAgICAgICAgaWYgKCFlYykgewogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9jdXJyZW50LT5oYXNUYWdOYW1lKHRyVGFnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3J0RXJyb3IoVGFibGVQYXJ0UmVxdWlyZWRFcnJvciwgJmxvY2FsTmFtZSwgJnRkVGFnLmxv
Y2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQodGRUYWcsIG1fZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0Tm9kZShIVE1MVGFibGVDZWxsRWxlbWVudDo6Y3JlYXRlKHRkVGFnLCBtX2RvY3VtZW50KS5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50LT5oYXNUYWdO
YW1lKHRhYmxlVGFnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmVwb3J0
IGFuIGVycm9yIGluIHRoaXMgY2FzZSwgc2luY2UgbWFraW5nIGEgPHRib2R5PiBoYXBwZW5zIGFs
bCB0aGUgdGltZSB3aGVuIHlvdSBoYXZlIDx0YWJsZT48dHI+LAogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYW5kIGl0IGlzbid0IHJlYWxseSBhIHBhcnNlIGVycm9yIHBlciBzZS4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodGJvZHlU
YWcsIG1fZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShIVE1M
VGFibGVTZWN0aW9uRWxlbWVudDo6Y3JlYXRlKHRib2R5VGFnLCBtX2RvY3VtZW50KS5nZXQoKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBvcnRFcnJvcihUYWJsZVBhcnRSZXF1aXJlZEVycm9yLCAmbG9jYWxOYW1lLCAmdHJUYWcubG9j
YWxOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVSb3dF
bGVtZW50KHRyVGFnLCBtX2RvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dE5vZGUoSFRNTFRhYmxlUm93RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7
CiAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KQEAgLTkyMiw3ICs5MjAsNyBAQCBib29sIEhUTUxQYXJzZXI6OnBDbG9z
ZXJTdHJpY3RDcmVhdGVFcnJvCiAKIGJvb2wgSFRNTFBhcnNlcjo6bWFwQ3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiosIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQogewotICAgIG1fY3VycmVudE1hcEVsZW1l
bnQgPSBuZXcgSFRNTE1hcEVsZW1lbnQobWFwVGFnLCBtX2RvY3VtZW50KTsKKyAgICBtX2N1cnJl
bnRNYXBFbGVtZW50ID0gSFRNTE1hcEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKICAgICBy
ZXN1bHQgPSBtX2N1cnJlbnRNYXBFbGVtZW50OwogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MUHJlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxQcmVFbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTFByZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAotLyoqCisv
KgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTMyLDExICszMiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1l
bnQodGFnTmFtZSwgZG9jKQoraW5saW5lIEhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBI
VE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsKIH0KIAorUGFzc1JlZlB0cjxIVE1MUHJl
RWxlbWVudD4gSFRNTFByZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MUHJlRWxlbWVu
dCh0YWdOYW1lLCBkb2N1bWVudCk7Cit9CisKIGJvb2wgSFRNTFByZUVsZW1lbnQ6Om1hcFRvRW50
cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0ciB8fCBhdHRyTmFt
ZSA9PSB3cmFwQXR0cikgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQcmVFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQcmVFbGVtZW50LmgJKHJldmlzaW9uIDYwMTc3
KQorKysgV2ViQ29yZS9odG1sL0hUTUxQcmVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxOSArMjksMjIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBIVE1MUHJlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFByZUVsZW1lbnQ+IGNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworICAgIGludCB3aWR0aCgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0V2lkdGgoaW50KTsKKworICAgIGJvb2wgd3JhcCgpIGNvbnN0OworICAgIHZv
aWQgc2V0V3JhcChib29sKTsKKworcHJpdmF0ZToKICAgICBIVE1MUHJlRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CiAg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKLSAgICBi
b29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JikgY29uc3Q7Ci0gICAgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLQot
ICAgIGludCB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgoaW50IHcpOwotCi0gICAg
Ym9vbCB3cmFwKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXcmFwKGJvb2wgYik7CisgICAgdmlydHVh
bCBib29sIG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxRdW90ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUXVv
dGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFF1b3Rl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw4IEBACi0vKioKKy8qCiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMTksNiArMTksNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJIVE1MUXVvdGVFbGVtZW50LmgiCiAKQEAgLTI5LDEyICszMCwxNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxRdW90ZUVsZW1lbnQ6
OkhUTUxRdW90ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKK2lubGluZSBIVE1MUXVvdGVF
bGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQog
ewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHFUYWcpKTsKIH0KIAorUGFzc1JlZlB0cjxIVE1MUXVv
dGVFbGVtZW50PiBIVE1MUXVvdGVFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBuZXcgSFRNTFF1b3Rl
RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7Cit9CisKIHZvaWQgSFRNTFF1b3RlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIGRvY3VtZW50KCktPnNldFVzZXNCZWZvcmVB
ZnRlclJ1bGVzKHRydWUpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxRdW90ZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFF1b3RlRWxlbWVudC5oCShyZXZpc2lvbiA2
MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MUXVvdGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDYgKzIwLDcgQEAKICAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaWZuZGVmIEhUTUxRdW90ZUVsZW1lbnRf
aAogI2RlZmluZSBIVE1MUXVvdGVFbGVtZW50X2gKIApAQCAtMzAsMTUgKzMyLDE4IEBAIGNsYXNz
IFN0cmluZzsKIAogY2xhc3MgSFRNTFF1b3RlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7
CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFF1b3RlRWxlbWVudD4gY3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCisgICAgU3RyaW5nIGNpdGUoKSBj
b25zdDsKKyAgICB2b2lkIHNldENpdGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CiAgICAg
SFRNTFF1b3RlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAK
ICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3Vt
ZW50KCk7Ci0KLSAgICBTdHJpbmcgY2l0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2l0ZShjb25z
dCBTdHJpbmcmKTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
U2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRF
bGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNiArMzUsMTcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MU2NyaXB0RWxlbWVu
dDo6SFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1l
LCBkb2MpCitpbmxpbmUgSFRNTFNjcmlwdEVsZW1lbnQ6OkhUTUxTY3JpcHRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVk
QnlQYXJzZXIpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIG1f
ZGF0YSh0aGlzLCB0aGlzKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHNjcmlwdFRhZykpOwog
ICAgIG1fZGF0YS5zZXRDcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKTsKIH0KIAotSFRN
TFNjcmlwdEVsZW1lbnQ6On5IVE1MU2NyaXB0RWxlbWVudCgpCitQYXNzUmVmUHRyPEhUTUxTY3Jp
cHRFbGVtZW50PiBIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7Cisg
ICAgcmV0dXJuIG5ldyBIVE1MU2NyaXB0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgY3JlYXRl
ZEJ5UGFyc2VyKTsKIH0KIAogYm9vbCBIVE1MU2NyaXB0RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUo
QXR0cmlidXRlKiBhdHRyKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHJl
dmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDI2ICsyOSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEhUTUxTY3JpcHRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAsIHB1YmxpYyBTY3JpcHRFbGVtZW50IHsKK2NsYXNzIEhUTUxTY3JpcHRFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgU2NyaXB0RWxlbWVudCB7CiBwdWJsaWM6
Ci0gICAgSFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kiwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpOwotICAgIH5IVE1MU2NyaXB0RWxlbWVudCgpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxTY3JpcHRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogCiAgICAgdmlydHVhbCBi
b29sIHNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBzY3JpcHRDb250ZW50KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQotICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQotICAgIHZpcnR1
YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQt
PmlzVGV4dE5vZGUoKTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KEF0dHJpYnV0ZSopOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lk
IGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZv
cmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEg
PSAwKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAKICAgICBTdHJp
bmcgdGV4dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmKTsKQEAgLTcz
LDExICs1OCwyNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFN0cmluZyBzY3JpcHRDaGFyc2V0
KCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwotCiAgICAgYm9vbCBoYXZlRmlyZWRMb2Fk
RXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaGF2ZUZpcmVkTG9hZEV2ZW50KCk7IH0KIAot
cHJvdGVjdGVkOgorcHJpdmF0ZToKKyAgICBIVE1MU2NyaXB0RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CisKKyAgICB2aXJ0dWFs
IFN0cmluZyBzY3JpcHRDb250ZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsg
fQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAg
IHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3
Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVu
dCgpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CisgICAgdmlydHVh
bCB2b2lkIGNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2Rl
KiBiZWZvcmVDaGFuZ2UgPSAwLCBOb2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50
RGVsdGEgPSAwKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JikgY29uc3Q7CisKICAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgU3RyaW5nIHR5cGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0OwpAQCAtODgs
NyArODksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoTG9hZEV2ZW50
KCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRXJyb3JFdmVudCgpOwogCi1wcml2YXRlOgog
ICAgIFNjcmlwdEVsZW1lbnREYXRhIG1fZGF0YTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkg
UHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC01Miw2ICs1MiwxMiBAQCBIVE1MU2Vs
ZWN0RWxlbWVudDo6SFRNTFNlbGVjdEVsZW1lbnQoY29uCiAgICAgQVNTRVJUKGhhc1RhZ05hbWUo
c2VsZWN0VGFnKSB8fCBoYXNUYWdOYW1lKGtleWdlblRhZykpOwogfQogCitQYXNzUmVmUHRyPEhU
TUxTZWxlY3RFbGVtZW50PiBIVE1MU2VsZWN0RWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
KQoreworICAgIEFTU0VSVCh0YWdOYW1lLm1hdGNoZXMoc2VsZWN0VGFnKSk7CisgICAgcmV0dXJu
IG5ldyBIVE1MU2VsZWN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSk7Cit9CisKIGJv
b2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKQogewog
ICAgIC8vIE1ha2Ugc3VyZSB0byBrZWVwIDxvcHRncm91cD4gaW4gc3luYyB3aXRoIHRoaXMuCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAK
ICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0z
NCwxMSArMzQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MT3B0aW9uRWxl
bWVudDsKIGNsYXNzIEhUTUxPcHRpb25zQ29sbGVjdGlvbjsKLWNsYXNzIEtleWJvYXJkRXZlbnQ7
CiAKIGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGUsIHB1YmxpYyBTZWxlY3RFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MU2Vs
ZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1l
bnQqID0gMCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFNlbGVjdEVsZW1lbnQ+IGNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKIAog
ICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlKTsKQEAgLTgz
LDYgKzgyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBsaXN0Qm94U2VsZWN0SXRlbShpbnQgbGlz
dEluZGV4LCBib29sIGFsbG93TXVsdGlwbHlTZWxlY3Rpb25zLCBib29sIHNoaWZ0LCBib29sIGZp
cmVPbkNoYW5nZU5vdyA9IHRydWUpOwogCitwcm90ZWN0ZWQ6CisgICAgSFRNTFNlbGVjdEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA2
OyB9CiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00MCwxNSArNDAsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1IVE1MU291cmNlRWxlbWVudDo6SFRNTFNvdXJjZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvYykKK2lubGluZSBIVE1MU291cmNlRWxlbWVudDo6SFRNTFNvdXJjZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAg
IDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2Vycm9yRXZlbnRUaW1l
cih0aGlzLCAmSFRNTFNvdXJjZUVsZW1lbnQ6OmVycm9yRXZlbnRUaW1lckZpcmVkKQogewogICAg
IEFTU0VSVChoYXNUYWdOYW1lKHNvdXJjZVRhZykpOwogfQogCi1IVE1MU291cmNlRWxlbWVudDo6
fkhUTUxTb3VyY2VFbGVtZW50KCkKK1Bhc3NSZWZQdHI8SFRNTFNvdXJjZUVsZW1lbnQ+IEhUTUxT
b3VyY2VFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50KQogeworICAgIHJldHVybiBuZXcgSFRNTFNvdXJjZUVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQpOwogfQogCiB2b2lkIEhUTUxTb3VyY2VFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1bWVudCgpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAkocmV2aXNpb24gNjAxNzcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsMjIgKzMwLDEzIEBACiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8bGltaXRzPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEtVUkw7Ci0KIGNsYXNzIEhUTUxTb3VyY2VFbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MU291cmNlRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKLSAgICB2aXJ0dWFsIH5IVE1MU291cmNlRWxlbWVudCgpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxTb3VyY2VFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICAKICAgICBLVVJMIHNyYygp
IGNvbnN0OwogICAgIFN0cmluZyBtZWRpYSgpIGNvbnN0OwogICAgIFN0cmluZyB0eXBlKCkgY29u
c3Q7CkBAIC01Nyw2ICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYW5jZWxQZW5kaW5nRXJy
b3JFdmVudCgpOwogCiBwcml2YXRlOgorICAgIEhUTUxTb3VyY2VFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOworCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgCisgICAg
dmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgCiAgICAgdm9pZCBlcnJv
ckV2ZW50VGltZXJGaXJlZChUaW1lcjxIVE1MU291cmNlRWxlbWVudD4qKTsKIAogICAgIFRpbWVy
PEhUTUxTb3VyY2VFbGVtZW50PiBtX2Vycm9yRXZlbnRUaW1lcjsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFN0
eWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxTdHls
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOCBAQAotLyoqCisvKgogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDcg
Um9iIEJ1aXMgKGJ1aXNAa2RlLm9yZykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMiwxNCArMzIsMTkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1M
U3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQotICAgIDogSFRNTEVsZW1l
bnQodGFnTmFtZSwgZG9jKQoraW5saW5lIEhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29s
IGNyZWF0ZWRCeVBhcnNlcikKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQog
ICAgICwgbV9sb2FkaW5nKGZhbHNlKQogICAgICwgbV9jcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5
UGFyc2VyKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHN0eWxlVGFnKSk7CiB9CiAKK1Bhc3NS
ZWZQdHI8SFRNTFN0eWxlRWxlbWVudD4gSFRNTFN0eWxlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MU3R5bGVFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50LCBjcmVhdGVkQnlQYXJzZXIpOworfQorCiAvLyBvdGhlciBzdHVmZi4uLgogdm9pZCBIVE1M
U3R5bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDEwIEFwcGxlIEluYy4gQUxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjIsMTQgKzIyLDI5IEBACiAjaWZuZGVmIEhUTUxTdHlsZUVsZW1lbnRfaAogI2Rl
ZmluZSBIVE1MU3R5bGVFbGVtZW50X2gKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0eWxlRWxlbWVudC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFN0eWxlU2hlZXQ7CisKIGNsYXNzIEhUTUxTdHlsZUVs
ZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBTdHlsZUVsZW1lbnQgewogcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxTdHlsZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CisKKyAgICBi
b29sIGRpc2FibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKKworICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYSgpIGNvbnN0OworICAgIHZvaWQgc2V0
TWVkaWEoY29uc3QgQXRvbWljU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcm
KTsKKworICAgIFN0eWxlU2hlZXQqIHNoZWV0KCk7CisKK3ByaXZhdGU6CiAgICAgSFRNTFN0eWxl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBh
cnNlcik7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQpAQCAtNDcsMjIgKzYyLDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHNoZWV0TG9hZGVkKCk7CiAKLSAgICBib29sIGRpc2FibGVkKCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXREaXNhYmxlZChib29sKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBt
ZWRpYSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWVkaWEoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0K
LSAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmKTsKLQotICAgIFN0eWxlU2hlZXQqIHNoZWV0KCk7
Ci0KICAgICB2aXJ0dWFsIHZvaWQgc2V0TG9hZGluZyhib29sIGxvYWRpbmcpIHsgbV9sb2FkaW5n
ID0gbG9hZGluZzsgfQogCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6CiAgICAgU3RyaW5n
IG1fbWVkaWE7CiAgICAgYm9vbCBtX2xvYWRpbmc7CiAgICAgYm9vbCBtX2NyZWF0ZWRCeVBhcnNl
cjsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAkocmV2aXNpb24gNjAx
NzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEwICsxLDEwIEBACi0vKioKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTcgTWFy
dGluIEpvbmVzIChtam9uZXNAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4g
V2VpcyAod2Vpc0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk4IFdhbGRvIEJhc3RpYW4g
KGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC00MiwxOSArNDIsMTggQEAgc3RhdGljIGNvbnN0IGludCBtYXhSb3dzcGFuID0gODE5MDsK
IAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OkhU
TUxUYWJsZUNlbGxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpCi0gICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudCh0YWdOYW1lLCBkb2MpCi0gICAgLCBf
cm93KC0xKQotICAgICwgX2NvbCgtMSkKLSAgICAsIHJTcGFuKDEpCi0gICAgLCBjU3BhbigxKQot
ICAgICwgcm93SGVpZ2h0KDApCi0gICAgLCBtX3NvbGlkKGZhbHNlKQoraW5saW5lIEhUTUxUYWJs
ZUNlbGxFbGVtZW50OjpIVE1MVGFibGVDZWxsRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIG1fcm93KC0xKQorICAgICwgbV9jb2woLTEpCisgICAg
LCBtX3Jvd1NwYW4oMSkKKyAgICAsIG1fY29sU3BhbigxKQogewogfQogCi1IVE1MVGFibGVDZWxs
RWxlbWVudDo6fkhUTUxUYWJsZUNlbGxFbGVtZW50KCkKK1Bhc3NSZWZQdHI8SFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ+IEhUTUxUYWJsZUNlbGxFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogeworICAgIHJldHVybiBuZXcgSFRNTFRh
YmxlQ2VsbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOwogfQogCiBpbnQgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6OmNlbGxJbmRleCgpIGNvbnN0CkBAIC04NywyNSArODYsMjYgQEAgYm9vbCBIVE1M
VGFibGVDZWxsRWxlbWVudDo6bWFwVG9FbnRyeShjbwogdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gcm93c3BhbkF0dHIpIHsKLSAgICAgICAgclNwYW4gPSAhYXR0ci0+aXNOdWxs
KCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAxOwotICAgICAgICByU3BhbiA9IG1heCgxLCBt
aW4oclNwYW4sIG1heFJvd3NwYW4pKTsKKyAgICAgICAgbV9yb3dTcGFuID0gbWF4KDEsIG1pbihh
dHRyLT52YWx1ZSgpLnRvSW50KCksIG1heFJvd3NwYW4pKTsKICAgICAgICAgaWYgKHJlbmRlcmVy
KCkgJiYgcmVuZGVyZXIoKS0+aXNUYWJsZUNlbGwoKSkKICAgICAgICAgICAgIHRvUmVuZGVyVGFi
bGVDZWxsKHJlbmRlcmVyKCkpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGNvbHNwYW5BdHRyKSB7Ci0gICAgICAgIGNTcGFuID0gIWF0dHItPmlz
TnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogMTsKLSAgICAgICAgY1NwYW4gPSBtYXgo
MSwgY1NwYW4pOworICAgICAgICBtX2NvbFNwYW4gPSBtYXgoMSwgYXR0ci0+dmFsdWUoKS50b0lu
dCgpKTsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNUYWJsZUNlbGwo
KSkKICAgICAgICAgICAgIHRvUmVuZGVyVGFibGVDZWxsKHJlbmRlcmVyKCkpLT51cGRhdGVGcm9t
RWxlbWVudCgpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5vd3JhcEF0dHIpIHsK
KyAgICAgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgcmVtb3ZpbmcgdGhlIHByb3BlcnR5IHdoZW4g
dGhlIGF0dHJpYnV0ZSBiZWNvbWVzIG51bGw/CiAgICAgICAgIGlmICghYXR0ci0+aXNOdWxsKCkp
CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2Us
IENTU1ZhbHVlV2Via2l0Tm93cmFwKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB3
aWR0aEF0dHIpIHsKKyAgICAgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgcmVtb3ZpbmcgdGhlIHBy
b3BlcnR5IHdoZW4gdGhlIGF0dHJpYnV0ZSBiZWNvbWVzIGVtcHR5LCB6ZXJvIG9yIG5lZ2F0aXZl
PwogICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBp
bnQgd2lkdGhJbnQgPSBhdHRyLT52YWx1ZSgpLnRvSW50KCk7CiAgICAgICAgICAgICBpZiAod2lk
dGhJbnQgPiAwKSAvLyB3aWR0aD0iMCIgaXMgaWdub3JlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRo
IFdpbklFLgogICAgICAgICAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NQcm9wZXJ0eVdp
ZHRoLCBhdHRyLT52YWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGhlaWdodEF0dHIpIHsKKyAgICAgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgcmVtb3Zp
bmcgdGhlIHByb3BlcnR5IHdoZW4gdGhlIGF0dHJpYnV0ZSBiZWNvbWVzIGVtcHR5LCB6ZXJvIG9y
IG5lZ2F0aXZlPwogICAgICAgICBpZiAoIWF0dHItPnZhbHVlKCkuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBpbnQgaGVpZ2h0SW50ID0gYXR0ci0+dmFsdWUoKS50b0ludCgpOwogICAgICAgICAg
ICAgaWYgKGhlaWdodEludCA+IDApIC8vIGhlaWdodD0iMCIgaXMgaWdub3JlZCBmb3IgY29tcGF0
aWJpbGl0eSB3aXRoIFdpbklFLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmgJ
KHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTggV2Fs
ZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTMyLDMwICszMiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEhUTUxUYWJsZUNlbGxFbGVtZW50IDogcHVibGljIEhUTUxUYWJsZVBhcnRFbGVtZW50IHsK
IHB1YmxpYzoKLSAgICBIVE1MVGFibGVDZWxsRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKLSAgICB+SFRNTFRhYmxlQ2VsbEVsZW1lbnQoKTsKLQotICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c09wdGlvbmFsOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biA2OyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+IGNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIGludCBjZWxsSW5kZXgo
KSBjb25zdDsKIAotICAgIGludCBjb2woKSBjb25zdCB7IHJldHVybiBfY29sOyB9Ci0gICAgdm9p
ZCBzZXRDb2woaW50IGNvbCkgeyBfY29sID0gY29sOyB9Ci0gICAgaW50IHJvdygpIGNvbnN0IHsg
cmV0dXJuIF9yb3c7IH0KLSAgICB2b2lkIHNldFJvdyhpbnQgcikgeyBfcm93ID0gcjsgfQotCi0g
ICAgaW50IGNvbFNwYW4oKSBjb25zdCB7IHJldHVybiBjU3BhbjsgfQotICAgIGludCByb3dTcGFu
KCkgY29uc3QgeyByZXR1cm4gclNwYW47IH0KLQotICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICBpbnQg
Y29sKCkgY29uc3QgeyByZXR1cm4gbV9jb2w7IH0KKyAgICB2b2lkIHNldENvbChpbnQgY29sKSB7
IG1fY29sID0gY29sOyB9CisgICAgaW50IHJvdygpIGNvbnN0IHsgcmV0dXJuIG1fcm93OyB9Cisg
ICAgdm9pZCBzZXRSb3coaW50IHJvdykgeyBtX3JvdyA9IHJvdzsgfQogCi0gICAgLy8gdXNlZCBi
eSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHlsZSBkZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3Np
bmcgdGFibGUuCi0gICAgdmlydHVhbCBib29sIGNhbkhhdmVBZGRpdGlvbmFsQXR0cmlidXRlU3R5
bGVEZWNscygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkaXRp
b25hbEF0dHJpYnV0ZVN0eWxlRGVjbHMoVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Kj4mKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikg
Y29uc3Q7CisgICAgaW50IGNvbFNwYW4oKSBjb25zdCB7IHJldHVybiBtX2NvbFNwYW47IH0KKyAg
ICBpbnQgcm93U3BhbigpIGNvbnN0IHsgcmV0dXJuIG1fcm93U3BhbjsgfQogCiAgICAgdm9pZCBz
ZXRDZWxsSW5kZXgoaW50KTsKIApAQCAtOTksMTcgKzg2LDI5IEBAIHB1YmxpYzoKICAgICBTdHJp
bmcgd2lkdGgoKSBjb25zdDsKICAgICB2b2lkIHNldFdpZHRoKGNvbnN0IFN0cmluZyYpOwogCitw
cml2YXRlOgorICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOworCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKworICAgIHZpcnR1YWwgYm9vbCBtYXBU
b0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKwor
ICAgIC8vIHVzZWQgYnkgdGFibGUgY2VsbHMgdG8gc2hhcmUgc3R5bGUgZGVjbHMgY3JlYXRlZCBi
eSB0aGUgZW5jbG9zaW5nIHRhYmxlLgorICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQWRkaXRpb25h
bEF0dHJpYnV0ZVN0eWxlRGVjbHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVh
bCB2b2lkIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzKFZlY3RvcjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbio+Jik7CisgICAgCisgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRl
KEF0dHJpYnV0ZSopIGNvbnN0OworCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0
cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6Ci0gICAg
aW50IF9yb3c7Ci0gICAgaW50IF9jb2w7Ci0gICAgaW50IHJTcGFuOwotICAgIGludCBjU3BhbjsK
LSAgICBpbnQgcm93SGVpZ2h0OwotICAgIGJvb2wgbV9zb2xpZDsKKyAgICBpbnQgbV9yb3c7Cisg
ICAgaW50IG1fY29sOworICAgIGludCBtX3Jvd1NwYW47CisgICAgaW50IG1fY29sU3BhbjsKIH07
CiAKLX0gLy9uYW1lc3BhY2UKK30gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MVGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNyArNCw3IEBACiAgKiAgICAg
ICAgICAgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NDIsOCArNDIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKLUhUTUxUYWJsZUVsZW1lbnQ6OkhUTUxUYWJsZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05h
bWUsIGRvYykKK0hUTUxUYWJsZUVsZW1lbnQ6OkhUTUxUYWJsZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2JvcmRlckF0dHIoZmFsc2UpCiAgICAgLCBtX2Jv
cmRlckNvbG9yQXR0cihmYWxzZSkKICAgICAsIG1fZnJhbWVBdHRyKGZhbHNlKQpAQCAtNTMsNiAr
NTMsMTYgQEAgSFRNTFRhYmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChjb25zdAogICAgIEFT
U0VSVChoYXNUYWdOYW1lKHRhYmxlVGFnKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTFRhYmxlRWxl
bWVudD4gSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAg
ICByZXR1cm4gbmV3IEhUTUxUYWJsZUVsZW1lbnQodGFibGVUYWcsIGRvY3VtZW50KTsKK30KKwor
UGFzc1JlZlB0cjxIVE1MVGFibGVFbGVtZW50PiBIVE1MVGFibGVFbGVtZW50OjpjcmVhdGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJl
dHVybiBuZXcgSFRNTFRhYmxlRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7Cit9CisKIGJvb2wg
SFRNTFRhYmxlRWxlbWVudDo6Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpCiB7CiAgICAg
aWYgKG5ld0NoaWxkLT5pc1RleHROb2RlKCkpCkBAIC0xMjUsNyArMTM1LDcgQEAgUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gSFRNTFRhYmxlRWxlbWVudAogewogICAgIGlmIChIVE1MVGFibGVTZWN0
aW9uRWxlbWVudCogZXhpc3RpbmdIZWFkID0gdEhlYWQoKSkKICAgICAgICAgcmV0dXJuIGV4aXN0
aW5nSGVhZDsKLSAgICBSZWZQdHI8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+IGhlYWQgPSBuZXcg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodGhlYWRUYWcsIGRvY3VtZW50KCkpOworICAgIFJlZlB0
cjxIVE1MVGFibGVTZWN0aW9uRWxlbWVudD4gaGVhZCA9IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
OjpjcmVhdGUodGhlYWRUYWcsIGRvY3VtZW50KCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAg
ICAgc2V0VEhlYWQoaGVhZCwgZWMpOwogICAgIHJldHVybiBoZWFkLnJlbGVhc2UoKTsKQEAgLTE0
MSw3ICsxNTEsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBIVE1MVGFibGVFbGVtZW50CiB7
CiAgICAgaWYgKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KiBleGlzdGluZ0Zvb3QgPSB0Rm9vdCgp
KQogICAgICAgICByZXR1cm4gZXhpc3RpbmdGb290OwotICAgIFJlZlB0cjxIVE1MVGFibGVTZWN0
aW9uRWxlbWVudD4gZm9vdCA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCh0Zm9vdFRhZywg
ZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PiBmb290ID0g
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmNyZWF0ZSh0Zm9vdFRhZywgZG9jdW1lbnQoKSk7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBzZXRURm9vdChmb290LCBlYyk7CiAgICAgcmV0dXJu
IGZvb3QucmVsZWFzZSgpOwpAQCAtMjA5LDE1ICsyMTksMTUgQEAgUGFzc1JlZlB0cjxIVE1MRWxl
bWVudD4gSFRNTFRhYmxlRWxlbWVudAogICAgIGVsc2UgewogICAgICAgICBwYXJlbnQgPSBsYXN0
Qm9keSgpOwogICAgICAgICBpZiAoIXBhcmVudCkgewotICAgICAgICAgICAgUmVmUHRyPEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50PiBuZXdCb2R5ID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
KHRib2R5VGFnLCBkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIFJlZlB0cjxIVE1MVGFibGVSb3dF
bGVtZW50PiBuZXdSb3cgPSBuZXcgSFRNTFRhYmxlUm93RWxlbWVudCh0clRhZywgZG9jdW1lbnQo
KSk7CisgICAgICAgICAgICBSZWZQdHI8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ+IG5ld0JvZHkg
PSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6Y3JlYXRlKHRib2R5VGFnLCBkb2N1bWVudCgpKTsK
KyAgICAgICAgICAgIFJlZlB0cjxIVE1MVGFibGVSb3dFbGVtZW50PiBuZXdSb3cgPSBIVE1MVGFi
bGVSb3dFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBuZXdCb2R5LT5h
cHBlbmRDaGlsZChuZXdSb3csIGVjKTsKICAgICAgICAgICAgIGFwcGVuZENoaWxkKG5ld0JvZHku
cmVsZWFzZSgpLCBlYyk7CiAgICAgICAgICAgICByZXR1cm4gbmV3Um93LnJlbGVhc2UoKTsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxIVE1MVGFibGVSb3dFbGVtZW50PiBuZXdSb3cg
PSBuZXcgSFRNTFRhYmxlUm93RWxlbWVudCh0clRhZywgZG9jdW1lbnQoKSk7CisgICAgUmVmUHRy
PEhUTUxUYWJsZVJvd0VsZW1lbnQ+IG5ld1JvdyA9IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCgpKTsKICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShuZXdSb3csIHJvdywgZWMp
OwogICAgIHJldHVybiBuZXdSb3cucmVsZWFzZSgpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxl
bWVudC5oCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiw4IEBAIGNsYXNzIEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50OwogCiBjbGFzcyBIVE1MVGFibGVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50
IHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwotCi0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KLSAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hlY2tE
VEQoY29uc3QgTm9kZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxUYWJsZUVsZW1lbnQ+
IGNyZWF0ZShEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxUYWJsZUVsZW1l
bnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIEhUTUxU
YWJsZUNhcHRpb25FbGVtZW50KiBjYXB0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDYXB0aW9u
KFBhc3NSZWZQdHI8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ+LCBFeGNlcHRpb25Db2RlJik7CkBA
IC05MSwyMSArODgsMzAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lkdGgoY29uc3QgU3RyaW5n
Jik7CiAKICAgICB2aXJ0dWFsIENvbnRhaW5lck5vZGUqIGFkZENoaWxkKFBhc3NSZWZQdHI8Tm9k
ZT4pOworCisgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOworCisgICAgdm9pZCBhZGRTaGFyZWRD
ZWxsRGVjbHMoVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4mKTsKKyAgICB2b2lk
IGFkZFNoYXJlZEdyb3VwRGVjbHMoYm9vbCByb3dzLCBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qPiYpOworCitwcml2YXRlOgorICAgIEhUTUxUYWJsZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gOTsgfQorICAgIHZpcnR1
YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9F
bnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0gICAg
dmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShB
dHRyaWJ1dGUqKSBjb25zdDsKIAogICAgIC8vIFVzZWQgdG8gb2J0YWluIGVpdGhlciBhIHNvbGlk
IG9yIG91dHNldCBib3JkZXIgZGVjbCBhbmQgdG8gZGVhbCB3aXRoIHRoZSBmcmFtZQogICAgIC8v
IGFuZCBydWxlcyBhdHRyaWJ1dGVzLgogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQWRkaXRpb25h
bEF0dHJpYnV0ZVN0eWxlRGVjbHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCB2b2lkIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzKFZlY3RvcjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbio+Jik7Ci0gICAgdm9pZCBhZGRTaGFyZWRDZWxsRGVjbHMoVmVjdG9yPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4mKTsKLSAgICB2b2lkIGFkZFNoYXJlZEdyb3VwRGVj
bHMoYm9vbCByb3dzLCBWZWN0b3I8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qPiYpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxL
VVJMPiYpIGNvbnN0OwogCi1wcml2YXRlOgogICAgIHZvaWQgYWRkU2hhcmVkQ2VsbEJvcmRlcnNE
ZWNsKFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+Jik7CiAgICAgdm9pZCBhZGRT
aGFyZWRDZWxsUGFkZGluZ0RlY2woVmVjdG9yPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4m
KTsKICAgICAKQEAgLTEyMSw3ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9mcmFtZUF0
dHI7ICAgICAgICAgICAvLyBJbXBsaWVzIGEgdGhpbiBib3JkZXIgd2lkdGggaWYgbm8gYm9yZGVy
IGlzIHNldCBhbmQgdGhlbiBhIGNlcnRhaW4gc2V0IG9mIHNvbGlkL2hpZGRlbiBib3JkZXJzIGJh
c2VkIG9mZiB0aGUgdmFsdWUuCiAgICAgVGFibGVSdWxlcyBtX3J1bGVzQXR0cjsgICAgIC8vIElt
cGxpZXMgYSB0aGluIGJvcmRlciB3aWR0aCwgYSBjb2xsYXBzaW5nIGJvcmRlciBtb2RlbCwgYW5k
IGFsbCBib3JkZXJzIG9uIHRoZSB0YWJsZSBiZWNvbWluZyBzZXQgdG8gaGlkZGVuIChpZiBmcmFt
ZS9ib3JkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIHByZXNlbnQs
IHRvIG5vbmUgb3RoZXJ3aXNlKS4KLSAgIAorCiAgICAgdW5zaWduZWQgc2hvcnQgbV9wYWRkaW5n
OwogICAgIFJlZlB0cjxDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbj4gbV9wYWRkaW5nRGVj
bDsKIH07CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuaAkocmV2aXNpb24gNjAx
NzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUGFydEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChi
YXN0aWFuQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9A
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMzEsMTAgKzMxLDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxUYWJs
ZVBhcnRFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKLXB1YmxpYzoKLSAgICBIVE1MVGFi
bGVQYXJ0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KQotICAgICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKLSAgICAgICAgeyB9Citwcm90
ZWN0ZWQ6CisgICAgSFRNTFRhYmxlUGFydEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KQorICAgIHsKKyAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShj
b25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MVGFibGVSb3dFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcg
QEAKICAqICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zOCwxMiArMzgsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MVGFibGVSb3dFbGVtZW50OjpIVE1MVGFibGVSb3dF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCi0gICAg
OiBIVE1MVGFibGVQYXJ0RWxlbWVudCh0YWdOYW1lLCBkb2MpCitIVE1MVGFibGVSb3dFbGVtZW50
OjpIVE1MVGFibGVSb3dFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHRyVGFnKSk7CiB9CiAKK1Bhc3NSZWZQdHI8
SFRNTFRhYmxlUm93RWxlbWVudD4gSFRNTFRhYmxlUm93RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50
KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnQodHJUYWcs
IGRvY3VtZW50KTsKK30KKworUGFzc1JlZlB0cjxIVE1MVGFibGVSb3dFbGVtZW50PiBIVE1MVGFi
bGVSb3dFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBuZXcgSFRNTFRhYmxlUm93RWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCk7Cit9CisKIGJvb2wgSFRNTFRhYmxlUm93RWxlbWVudDo6Y2hlY2tEVEQo
Y29uc3QgTm9kZSogbmV3Q2hpbGQpCiB7CiAgICAgaWYgKG5ld0NoaWxkLT5pc1RleHROb2RlKCkp
CkBAIC0xMzksMTggKzE0OSwxOCBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBIVE1MVGFibGVS
b3dFbGVtCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxIVE1MVGFibGVD
ZWxsRWxlbWVudD4gYyA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudCh0ZFRhZywgZG9jdW1lbnQo
KSk7CisgICAgUmVmUHRyPEhUTUxUYWJsZUNlbGxFbGVtZW50PiBjZWxsID0gSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6OmNyZWF0ZSh0ZFRhZywgZG9jdW1lbnQoKSk7CiAgICAgaWYgKGluZGV4IDwgMCB8
fCBpbmRleCA+PSBudW1DZWxscykKLSAgICAgICAgYXBwZW5kQ2hpbGQoYywgZWMpOworICAgICAg
ICBhcHBlbmRDaGlsZChjZWxsLCBlYyk7CiAgICAgZWxzZSB7CiAgICAgICAgIE5vZGUqIG47CiAg
ICAgICAgIGlmIChpbmRleCA8IDEpCiAgICAgICAgICAgICBuID0gZmlyc3RDaGlsZCgpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBuID0gY2hpbGRyZW4tPml0ZW0oaW5kZXgpOwotICAgICAg
ICBpbnNlcnRCZWZvcmUoYywgbiwgZWMpOworICAgICAgICBpbnNlcnRCZWZvcmUoY2VsbCwgbiwg
ZWMpOwogICAgIH0KLSAgICByZXR1cm4gYy5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNlbGwucmVs
ZWFzZSgpOwogfQogCiB2b2lkIEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmRlbGV0ZUNlbGwoaW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQu
aAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00LDcgKzQsNyBAQAogICogICAgICAgICAgIChDKSAxOTk4IFdh
bGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDExICszMiw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTFRhYmxlUm93RWxlbWVudCA6IHB1YmxpYyBI
VE1MVGFibGVQYXJ0RWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlUm93RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MVGFibGVSb3dFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MVGFibGVSb3dFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CiAKLSAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQotICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNzsgfQotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RU
RChjb25zdCBOb2RlKik7CiAgICAgdmlydHVhbCBDb250YWluZXJOb2RlKiBhZGRDaGlsZChQYXNz
UmVmUHRyPE5vZGU+KTsKIAogICAgIGludCByb3dJbmRleCgpIGNvbnN0OwpAQCAtNjUsNiArNjMs
MTMgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIHZBbGlnbigpIGNvbnN0OwogICAgIHZvaWQgc2V0
VkFsaWduKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIEhUTUxUYWJsZVJvd0VsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRp
b25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNzsg
fQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsMTAgQEAKLS8qKgorLyoKICAqIENvcHlyaWdo
dCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1qb25lc0BrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTgg
V2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIxLDYgKzIxLDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaCIKIApAQCAtMzYsMTEgKzM3LDE2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQ6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK2lubGluZSBIVE1MVGFibGVTZWN0
aW9uRWxlbWVudDo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQ+IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBuZXcgSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworfQorCiBib29sIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkKIHsKICAgICBp
ZiAobmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSkKQEAgLTc4LDI1ICs4NCwyNSBAQCB2b2lkIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjphZGRpdGlvbmFsCiAvLyB0aGUgaW5kZXguLi4gYnV0IHRoZXkg
YXJlbid0IHVzZWQgZHVyaW5nIHVzdWFsIEhUTUwgcGFyc2luZyBhbnl3YXkKIFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjppbnNlcnRSb3coaW50IGluZGV4
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8SFRNTFRhYmxlUm93RWxlbWVudD4g
cjsKKyAgICBSZWZQdHI8SFRNTFRhYmxlUm93RWxlbWVudD4gcm93OwogICAgIFJlZlB0cjxIVE1M
Q29sbGVjdGlvbj4gY2hpbGRyZW4gPSByb3dzKCk7CiAgICAgaW50IG51bVJvd3MgPSBjaGlsZHJl
biA/IChpbnQpY2hpbGRyZW4tPmxlbmd0aCgpIDogMDsKICAgICBpZiAoaW5kZXggPCAtMSB8fCBp
bmRleCA+IG51bVJvd3MpCiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7IC8vIHBlciB0aGUg
RE9NCiAgICAgZWxzZSB7Ci0gICAgICAgIHIgPSBuZXcgSFRNTFRhYmxlUm93RWxlbWVudCh0clRh
ZywgZG9jdW1lbnQoKSk7CisgICAgICAgIHJvdyA9IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmNyZWF0
ZSh0clRhZywgZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmIChudW1Sb3dzID09IGluZGV4IHx8IGlu
ZGV4ID09IC0xKQotICAgICAgICAgICAgYXBwZW5kQ2hpbGQociwgZWMpOworICAgICAgICAgICAg
YXBwZW5kQ2hpbGQocm93LCBlYyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgTm9kZSog
bjsKICAgICAgICAgICAgIGlmIChpbmRleCA8IDEpCiAgICAgICAgICAgICAgICAgbiA9IGZpcnN0
Q2hpbGQoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBuID0gY2hpbGRyZW4t
Pml0ZW0oaW5kZXgpOwotICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKHIsIG4sIGVjKTsKKyAgICAg
ICAgICAgIGluc2VydEJlZm9yZShyb3csIG4sIGVjKTsKICAgICAgICAgfQogICAgIH0KLSAgICBy
ZXR1cm4gci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHJvdy5yZWxlYXNlKCk7CiB9CiAKIHZvaWQg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmRlbGV0ZVJvdyhpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgJKHJldmlz
aW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnQg
ewogcHVibGljOgotICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
IAotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiA4OyB9Ci0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5v
ZGUqKTsKICAgICB2aXJ0dWFsIENvbnRhaW5lck5vZGUqIGFkZENoaWxkKFBhc3NSZWZQdHI8Tm9k
ZT4pOwotICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVj
bHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGFkZGl0aW9uYWxB
dHRyaWJ1dGVTdHlsZURlY2xzKFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+Jik7
CiAKICAgICBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbnNlcnRSb3coaW50IGluZGV4LCBFeGNl
cHRpb25Db2RlJik7CiAgICAgdm9pZCBkZWxldGVSb3coaW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CkBAIC01OSw2ICs1NCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWQWxpZ24oY29uc3Qg
U3RyaW5nJik7CiAKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiByb3dzKCk7CisKK3By
aXZhdGU6CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA4OyB9CisgICAgdmlydHVhbCBi
b29sIGNoZWNrRFREKGNvbnN0IE5vZGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUFkZGl0
aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscyhWZWN0b3I8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qPiYpOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxUYWdOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRh
Z05hbWVzLmluCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTY2LDE3ICs2NiwxNyBAQCBpbnB1dCBjb25zdHJ1Y3Rvck5l
ZWRzRm9ybUVsZW1lbnQsIGNyZWF0CiBpbnMgaW50ZXJmYWNlTmFtZT1IVE1MTW9kRWxlbWVudCwg
Y3JlYXRlV2l0aE5ldwogaXNpbmRleCBpbnRlcmZhY2VOYW1lPUhUTUxJc0luZGV4RWxlbWVudCwg
Y29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBjcmVhdGVXaXRoTmV3CiBrYmQgaW50ZXJmYWNl
TmFtZT1IVE1MRWxlbWVudAota2V5Z2VuIEpTSW50ZXJmYWNlTmFtZT1IVE1MU2VsZWN0RWxlbWVu
dCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBjcmVhdGVXaXRoTmV3CitrZXlnZW4gSlNJ
bnRlcmZhY2VOYW1lPUhUTUxTZWxlY3RFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1l
bnQKIGxhYmVsIGNyZWF0ZVdpdGhOZXcKIGxheWVyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQK
IGxlZ2VuZCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKIGxpIGlu
dGVyZmFjZU5hbWU9SFRNTExJRWxlbWVudCwgY3JlYXRlV2l0aE5ldwogbGluayBjb25zdHJ1Y3Rv
ck5lZWRzQ3JlYXRlZEJ5UGFyc2VyLCBjcmVhdGVXaXRoTmV3Ci1saXN0aW5nIGludGVyZmFjZU5h
bWU9SFRNTFByZUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLW1hcCBjcmVhdGVXaXRoTmV3Ci1tYXJx
dWVlIGNyZWF0ZVdpdGhOZXcKLW1lbnUgY3JlYXRlV2l0aE5ldwotbWV0YSBjcmVhdGVXaXRoTmV3
CitsaXN0aW5nIGludGVyZmFjZU5hbWU9SFRNTFByZUVsZW1lbnQKK21hcAorbWFycXVlZQorbWVu
dQorbWV0YQogbWV0ZXIgaW50ZXJmYWNlTmFtZT1IVE1MTWV0ZXJFbGVtZW50LCBjb25kaXRpb25h
bD1NRVRFUl9UQUcKIG5hdiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBub2JyIGludGVyZmFj
ZU5hbWU9SFRNTEVsZW1lbnQKQEAgLTg0LDUwICs4NCw1MCBAQCBub2VtYmVkIGludGVyZmFjZU5h
bWU9SFRNTEVsZW1lbnQKIG5vZnJhbWVzIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIG5vbGF5
ZXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogb2JqZWN0IGNvbnN0cnVjdG9yTmVlZHNDcmVh
dGVkQnlQYXJzZXIKLW9sIGludGVyZmFjZU5hbWU9SFRNTE9MaXN0RWxlbWVudCwgY3JlYXRlV2l0
aE5ldwotb3B0Z3JvdXAgaW50ZXJmYWNlTmFtZT1IVE1MT3B0R3JvdXBFbGVtZW50LCBjb25zdHJ1
Y3Rvck5lZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLW9wdGlvbiBjb25zdHJ1Y3Rvck5l
ZWRzRm9ybUVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLXAgaW50ZXJmYWNlTmFtZT1IVE1MUGFyYWdy
YXBoRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotcGFyYW0gY3JlYXRlV2l0aE5ldworb2wgaW50ZXJm
YWNlTmFtZT1IVE1MT0xpc3RFbGVtZW50CitvcHRncm91cCBpbnRlcmZhY2VOYW1lPUhUTUxPcHRH
cm91cEVsZW1lbnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAorb3B0aW9uIGNvbnN0cnVj
dG9yTmVlZHNGb3JtRWxlbWVudAorcCBpbnRlcmZhY2VOYW1lPUhUTUxQYXJhZ3JhcGhFbGVtZW50
CitwYXJhbQogcGxhaW50ZXh0IGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXByZSBjcmVhdGVX
aXRoTmV3CitwcmUKIHByb2dyZXNzIGludGVyZmFjZU5hbWU9SFRNTFByb2dyZXNzRWxlbWVudCwg
Y29uZGl0aW9uYWw9UFJPR1JFU1NfVEFHCi1xIGludGVyZmFjZU5hbWU9SFRNTFF1b3RlRWxlbWVu
dCwgY3JlYXRlV2l0aE5ldworcSBpbnRlcmZhY2VOYW1lPUhUTUxRdW90ZUVsZW1lbnQKIHJwIGlu
dGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQsIGNvbmRpdGlvbmFsPVJVQlkKIHJ0IGludGVyZmFjZU5h
bWU9SFRNTEVsZW1lbnQsIGNvbmRpdGlvbmFsPVJVQlkKIHJ1YnkgaW50ZXJmYWNlTmFtZT1IVE1M
RWxlbWVudCwgY29uZGl0aW9uYWw9UlVCWQogcyBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBz
YW1wIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXNjcmlwdCBjb25zdHJ1Y3Rvck5lZWRzQ3Jl
YXRlZEJ5UGFyc2VyLCBjcmVhdGVXaXRoTmV3CitzY3JpcHQgY29uc3RydWN0b3JOZWVkc0NyZWF0
ZWRCeVBhcnNlcgogc2VjdGlvbiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1zZWxlY3QgY29u
c3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50LCBjcmVhdGVXaXRoTmV3CitzZWxlY3QgY29uc3RydWN0
b3JOZWVkc0Zvcm1FbGVtZW50CiBzbWFsbCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1zb3Vy
Y2Ugd3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGUsIGNvbmRpdGlvbmFsPVZJREVPLCBjcmVh
dGVXaXRoTmV3Citzb3VyY2Ugd3JhcHBlck9ubHlJZk1lZGlhSXNBdmFpbGFibGUsIGNvbmRpdGlv
bmFsPVZJREVPCiBzcGFuIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIHN0cmlrZSBpbnRlcmZh
Y2VOYW1lPUhUTUxFbGVtZW50CiBzdHJvbmcgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotc3R5
bGUgY29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlciwgY3JlYXRlV2l0aE5ldworc3R5bGUg
Y29uc3RydWN0b3JOZWVkc0NyZWF0ZWRCeVBhcnNlcgogc3ViIGludGVyZmFjZU5hbWU9SFRNTEVs
ZW1lbnQKIHN1cCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci10YWJsZSBjcmVhdGVXaXRoTmV3
Ci10Ym9keSBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LCBjcmVhdGVXaXRo
TmV3Ci10ZCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNlbGxFbGVtZW50LCBjcmVhdGVXaXRoTmV3
Ci10ZXh0YXJlYSBpbnRlcmZhY2VOYW1lPUhUTUxUZXh0QXJlYUVsZW1lbnQsIGNvbnN0cnVjdG9y
TmVlZHNGb3JtRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotdGZvb3QgaW50ZXJmYWNlTmFtZT1IVE1M
VGFibGVTZWN0aW9uRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotdGggaW50ZXJmYWNlTmFtZT1IVE1M
VGFibGVDZWxsRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotdGhlYWQgaW50ZXJmYWNlTmFtZT1IVE1M
VGFibGVTZWN0aW9uRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotdGl0bGUgY3JlYXRlV2l0aE5ldwot
dHIgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVSb3dFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cit0YWJs
ZQordGJvZHkgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVTZWN0aW9uRWxlbWVudAordGQgaW50ZXJm
YWNlTmFtZT1IVE1MVGFibGVDZWxsRWxlbWVudAordGV4dGFyZWEgaW50ZXJmYWNlTmFtZT1IVE1M
VGV4dEFyZWFFbGVtZW50LCBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1lbnQKK3Rmb290IGludGVy
ZmFjZU5hbWU9SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKK3RoIGludGVyZmFjZU5hbWU9SFRNTFRh
YmxlQ2VsbEVsZW1lbnQKK3RoZWFkIGludGVyZmFjZU5hbWU9SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQKK3RpdGxlCit0ciBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZVJvd0VsZW1lbnQKIHR0IGludGVy
ZmFjZU5hbWU9SFRNTEVsZW1lbnQKIHUgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAotdWwgaW50
ZXJmYWNlTmFtZT1IVE1MVUxpc3RFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cit1bCBpbnRlcmZhY2VO
YW1lPUhUTUxVTGlzdEVsZW1lbnQKIHZhciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci12aWRl
byB3cmFwcGVyT25seUlmTWVkaWFJc0F2YWlsYWJsZSwgY29uZGl0aW9uYWw9VklERU8sIGNyZWF0
ZVdpdGhOZXcKK3ZpZGVvIHdyYXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlLCBjb25kaXRpb25h
bD1WSURFTwogd2JyIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLXhtcCBpbnRlcmZhY2VOYW1l
PUhUTUxQcmVFbGVtZW50LCBjcmVhdGVXaXRoTmV3Cit4bXAgaW50ZXJmYWNlTmFtZT1IVE1MUHJl
RWxlbWVudAogCiAjaWYgRU5BQkxFX1hIVE1MTVAKLW5vc2NyaXB0IGludGVyZmFjZU5hbWU9SFRN
TE5vU2NyaXB0RWxlbWVudCwgY3JlYXRlV2l0aE5ldworbm9zY3JpcHQgaW50ZXJmYWNlTmFtZT1I
VE1MTm9TY3JpcHRFbGVtZW50CiAjZWxzZQogbm9zY3JpcHQgaW50ZXJmYWNlTmFtZT1IVE1MRWxl
bWVudAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZp
c2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBA
bnlwb3AuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJr
aXQub3JnKQogICoKQEAgLTc3LDYgKzc3LDExIEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxU
ZXh0QXJlYUVsZW1lbnQKICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRy
dWUpOwogfQogCitQYXNzUmVmUHRyPEhUTUxUZXh0QXJlYUVsZW1lbnQ+IEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxUZXh0
QXJlYUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pOworfQorCiBjb25zdCBBdG9taWNT
dHJpbmcmIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiB7CiAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIHRleHRhcmVhLCAoInRl
eHRhcmVhIikpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCShyZXZpc2lvbiA2
MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0zMywzNyArMzMsMTUgQEAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAog
Y2xhc3MgSFRNTFRleHRBcmVhRWxlbWVudCA6IHB1YmxpYyBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTFRleHRBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1Rl
eHROb2RlKCk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVGV4dEFyZWFFbGVtZW50PiBj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7
CiAKICAgICBpbnQgY29scygpIGNvbnN0IHsgcmV0dXJuIG1fY29sczsgfQogICAgIGludCByb3dz
KCkgY29uc3QgeyByZXR1cm4gbV9yb3dzOyB9CiAKICAgICBib29sIHNob3VsZFdyYXBUZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV93cmFwICE9IE5vV3JhcDsgfQogCi0gICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBi
b29sIHNhdmVGb3JtQ29udHJvbFN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmKTsKLQogICAgIGJv
b2wgcmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBpc1JlYWRPbmx5Rm9ybUNvbnRyb2woKTsgfQog
Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotCi0gICAgdmlydHVhbCBib29sIHZhbHVlTWlzc2luZygpIGNvbnN0IHsgcmV0dXJuIGlz
UmVxdWlyZWRGb3JtQ29udHJvbCgpICYmICFkaXNhYmxlZCgpICYmICFyZWFkT25seSgpICYmIHZh
bHVlKCkuaXNFbXB0eSgpOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJv
b2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUq
IGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwotICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLSAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwotICAg
IHZpcnR1YWwgYm9vbCBhcHBlbmRGb3JtRGF0YShGb3JtRGF0YUxpc3QmLCBib29sKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVzZXQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZl
bnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wg
cmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKLQogICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgU3RyaW5nIGRlZmF1bHRWYWx1
ZSgpIGNvbnN0OwpAQCAtNzUsOCArNTMsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCByZW5k
ZXJlcldpbGxCZURlc3Ryb3llZCgpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlB
Y3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKLSAgICAKICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGFjY2Vzc0tleSgpIGNvbnN0OwogICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNvbnN0IFN0cmlu
ZyYpOwogCkBAIC04NSw5ICs2MSw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNhY2hlU2Vs
ZWN0aW9uKGludCBzLCBpbnQgZSkgeyBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID0gczsgbV9jYWNo
ZWRTZWxlY3Rpb25FbmQgPSBlOyB9OwogCi0gICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0
TWV0aG9kKCkgY29uc3Q7Ci0KIHByaXZhdGU6CisgICAgSFRNTFRleHRBcmVhRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqKTsKKwogICAgIGVu
dW0gV3JhcE1ldGhvZCB7IE5vV3JhcCwgU29mdFdyYXAsIEhhcmRXcmFwIH07CiAKICAgICB2b2lk
IGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kikg
Y29uc3Q7CkBAIC0xMDUsNiArODEsMzIgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQo
Y29uc3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCk7IH0K
KworICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBzYXZlRm9ybUNvbnRyb2xTdGF0ZShTdHJpbmcmIHZh
bHVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZUZvcm1Db250cm9sU3RhdGUoY29u
c3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Rm9ybUNvbnRyb2woKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNaXNzaW5nKCkgY29u
c3QgeyByZXR1cm4gaXNSZXF1aXJlZEZvcm1Db250cm9sKCkgJiYgIWRpc2FibGVkKCkgJiYgIXJl
YWRPbmx5KCkgJiYgdmFsdWUoKS5pc0VtcHR5KCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjaGls
ZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hh
bmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7
CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOworICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKik7CisgICAgdmlydHVhbCBib29sIGFwcGVuZEZvcm1EYXRhKEZvcm1EYXRhTGlzdCYs
IGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIHZpcnR1YWwgYm9vbCBpc01v
dXNlRm9jdXNhYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2Fi
bGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGb2N1c0Fw
cGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOworCisgICAgdmlydHVhbCB2
b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVsZW1lbnQpOworCisgICAgdmlydHVh
bCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CisKICAgICBpbnQgbV9yb3dzOwog
ICAgIGludCBtX2NvbHM7CiAgICAgV3JhcE1ldGhvZCBtX3dyYXA7CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxU
aXRsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGl0
bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDggQEAKLS8qKgorLyoKICAq
IENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0xOSw2ICsxOSw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxUaXRsZUVs
ZW1lbnQuaCIKIApAQCAtMzAsMTUgKzMxLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDog
SFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQoraW5saW5lIEhUTUxUaXRsZUVsZW1lbnQ6OkhUTUxU
aXRsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3Vt
ZW50KQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX3RpdGxl
KCIiKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHRpdGxlVGFnKSk7CiB9CiAKLUhUTUxUaXRs
ZUVsZW1lbnQ6On5IVE1MVGl0bGVFbGVtZW50KCkKK1Bhc3NSZWZQdHI8SFRNTFRpdGxlRWxlbWVu
dD4gSFRNTFRpdGxlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2N1bWVudCkKIHsKKyAgICByZXR1cm4gbmV3IEhUTUxUaXRsZUVsZW1lbnQo
dGFnTmFtZSwgZG9jdW1lbnQpOwogfQogCiB2b2lkIEhUTUxUaXRsZUVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuaAkocmV2aXNpb24gNjAx
NzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw4ICsyOCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEhUTUxUaXRsZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxUaXRsZUVsZW1lbnQ+IGNyZWF0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7
CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgogICAgIEhUTUxU
aXRsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7Ci0gICAgfkhUTUxU
aXRsZUVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBu
ZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQogCkBAIC0zNywxMCAr
NDIsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0g
ZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50
IGNoaWxkQ291bnREZWx0YSA9IDApOwogCi0gICAgU3RyaW5nIHRleHQoKSBjb25zdDsKLSAgICB2
b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7Ci0KLXByb3RlY3RlZDoKICAgICBTdHJpbmcgbV90
aXRsZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDYw
MTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNyBAQAotLyoqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8g
KGtvaXZpc3RvQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwxMiArMzEsMjIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1M
VUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCitIVE1M
VUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHVsVGFnKSk7CiB9CiAKK1Bhc3NSZWZQdHI8
SFRNTFVMaXN0RWxlbWVudD4gSFRNTFVMaXN0RWxlbWVudDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1
bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxVTGlzdEVsZW1lbnQodWxUYWcsIGRvY3VtZW50
KTsKK30KKworUGFzc1JlZlB0cjxIVE1MVUxpc3RFbGVtZW50PiBIVE1MVUxpc3RFbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQor
eworICAgIHJldHVybiBuZXcgSFRNTFVMaXN0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7Cit9
CisKIGJvb2wgSFRNTFVMaXN0RWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBp
ZiAoYXR0ck5hbWUgPT0gdHlwZUF0dHIpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuaAko
cmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNiArMjksMTYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MVUxpc3RFbGVtZW50IDogcHVibGlj
IEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVUxpc3RF
bGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVUxp
c3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAg
ICBib29sIGNvbXBhY3QoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CisKKyAg
ICBTdHJpbmcgdHlwZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsK
KworcHJpdmF0ZToKICAgICBIVE1MVUxpc3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KQEAgLTM1LDEyICs0Niw2IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKLQotICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0
OwotICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKLQotICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwogfTsKIAogfSAvL25hbWVzcGFjZQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEzICs0
NSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLUhUTUxWaWRlb0VsZW1lbnQ6OkhUTUxWaWRlb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxNZWRpYUVsZW1lbnQodGFnTmFt
ZSwgZG9jKQoraW5saW5lIEhUTUxWaWRlb0VsZW1lbnQ6OkhUTUxWaWRlb0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTE1l
ZGlhRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIG1fc2hvdWxkRGlzcGxheVBvc3Rl
ckltYWdlKGZhbHNlKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKHZpZGVvVGFnKSk7CiB9CiAK
K1Bhc3NSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4gSFRNTFZpZGVvRWxlbWVudDo6Y3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBy
ZXR1cm4gbmV3IEhUTUxWaWRlb0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworfQorCiBib29s
IEhUTUxWaWRlb0VsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKSAK
IHsKICAgICByZXR1cm4gSFRNTEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyAKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTFZpZGVvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNs
YXNzIEhUTUxJbWFnZUxvYWRlcjsKIAogY2xhc3MgSFRNTFZpZGVvRWxlbWVudCA6IHB1YmxpYyBI
VE1MTWVkaWFFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MVmlkZW9FbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxWaWRl
b0VsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAg
IHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRXaWR0aCh1bnNpZ25lZCk7CkBA
IC02Niw2ICs2Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5Db250
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAogcHJpdmF0ZToKKyAgICBI
VE1MVmlkZW9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCiAgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAgICAgdmlydHVh
bCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICNpZiAhRU5BQkxFKFBMVUdJ
Tl9QUk9YWV9GT1JfVklERU8pCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURv
Y3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTAgKzg0LDEwIEBAIHZvaWQgSFRNTFZp
ZXdTb3VyY2VEb2N1bWVudDo6Y3JlYXRlQ29udGEKICAgICBib2R5LT5hZGRDaGlsZChkaXYpOwog
ICAgIGRpdi0+YXR0YWNoKCk7CiAKLSAgICBSZWZQdHI8SFRNTFRhYmxlRWxlbWVudD4gdGFibGUg
PSBuZXcgSFRNTFRhYmxlRWxlbWVudCh0YWJsZVRhZywgdGhpcyk7CisgICAgUmVmUHRyPEhUTUxU
YWJsZUVsZW1lbnQ+IHRhYmxlID0gSFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAg
IGJvZHktPmFkZENoaWxkKHRhYmxlKTsKICAgICB0YWJsZS0+YXR0YWNoKCk7Ci0gICAgbV90Ym9k
eSA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCh0Ym9keVRhZywgdGhpcyk7CisgICAgbV90
Ym9keSA9IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjcmVhdGUodGJvZHlUYWcsIHRoaXMpOwog
ICAgIHRhYmxlLT5hZGRDaGlsZChtX3Rib2R5KTsKICAgICBtX3Rib2R5LT5hdHRhY2goKTsKICAg
ICBtX2N1cnJlbnQgPSBtX3Rib2R5OwpAQCAtMjIyLDEyICsyMjIsMTIgQEAgUGFzc1JlZlB0cjxF
bGVtZW50PiBIVE1MVmlld1NvdXJjZURvY3VtZQogdm9pZCBIVE1MVmlld1NvdXJjZURvY3VtZW50
OjphZGRMaW5lKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lKQogewogICAgIC8vIENyZWF0ZSBhIHRh
YmxlIHJvdy4KLSAgICBSZWZQdHI8SFRNTFRhYmxlUm93RWxlbWVudD4gdHJvdyA9IG5ldyBIVE1M
VGFibGVSb3dFbGVtZW50KHRyVGFnLCB0aGlzKTsKKyAgICBSZWZQdHI8SFRNTFRhYmxlUm93RWxl
bWVudD4gdHJvdyA9IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmNyZWF0ZSh0aGlzKTsKICAgICBtX3Ri
b2R5LT5hZGRDaGlsZCh0cm93KTsKICAgICB0cm93LT5hdHRhY2goKTsKICAgICAKICAgICAvLyBD
cmVhdGUgYSBjZWxsIHRoYXQgd2lsbCBob2xkIHRoZSBsaW5lIG51bWJlciAoaXQgaXMgZ2VuZXJh
dGVkIGluIHRoZSBzdHlsZXNoZWV0IHVzaW5nIGNvdW50ZXJzKS4KLSAgICBSZWZQdHI8SFRNTFRh
YmxlQ2VsbEVsZW1lbnQ+IHRkID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50KHRkVGFnLCB0aGlz
KTsKKyAgICBSZWZQdHI8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+IHRkID0gSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6OmNyZWF0ZSh0ZFRhZywgdGhpcyk7CiAgICAgUmVmUHRyPE5hbWVkTm9kZU1hcD4gYXR0
cnMgPSBOYW1lZE5vZGVNYXA6OmNyZWF0ZSgpOwogICAgIGF0dHJzLT5hZGRBdHRyaWJ1dGUoQXR0
cmlidXRlOjpjcmVhdGVNYXBwZWQoY2xhc3NBdHRyLCAid2Via2l0LWxpbmUtbnVtYmVyIikpOwog
ICAgIHRkLT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMucmVsZWFzZSgpKTsKQEAgLTIzNSw3ICsyMzUs
NyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZExpbmUoY29uCiAgICAgdGQtPmF0
dGFjaCgpOwogCiAgICAgLy8gQ3JlYXRlIGEgc2Vjb25kIGNlbGwgZm9yIHRoZSBsaW5lIGNvbnRl
bnRzCi0gICAgdGQgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQodGRUYWcsIHRoaXMpOworICAg
IHRkID0gSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNyZWF0ZSh0ZFRhZywgdGhpcyk7CiAgICAgYXR0
cnMgPSBOYW1lZE5vZGVNYXA6OmNyZWF0ZSgpOwogICAgIGF0dHJzLT5hZGRBdHRyaWJ1dGUoQXR0
cmlidXRlOjpjcmVhdGVNYXBwZWQoY2xhc3NBdHRyLCAid2Via2l0LWxpbmUtY29udGVudCIpKTsK
ICAgICB0ZC0+c2V0QXR0cmlidXRlTWFwKGF0dHJzLnJlbGVhc2UoKSk7Cg==
</data>
<flag name="review"
          id="41584"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>