<?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>142386</bug_id>
          
          <creation_ts>2015-03-05 23:59:18 -0800</creation_ts>
          <short_desc>[TexMap] Seperate BitmapTexture related classes implementations from TextureMapper</short_desc>
          <delta_ts>2015-03-31 07:33:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gwang Yoon Hwang">yoon</reporter>
          <assigned_to name="Gwang Yoon Hwang">yoon</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1074860</commentid>
    <comment_count>0</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2015-03-05 23:59:18 -0800</bug_when>
    <thetext>[TexMap] Seperate BitmapTexture related classes implementations from TextureMapper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074861</commentid>
    <comment_count>1</comment_count>
      <attachid>248048</attachid>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2015-03-06 00:00:33 -0800</bug_when>
    <thetext>Created attachment 248048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080571</commentid>
    <comment_count>2</comment_count>
      <attachid>248048</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-03-27 02:25:36 -0700</bug_when>
    <thetext>Comment on attachment 248048
Patch

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

Looks nice, the position of these classes always bothered me.

There&apos;s plenty of space for further cleanups, but this is a great start.

&gt; Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp:39
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; imageBuffer = ImageBuffer::create(targetRect.size());
&gt; +    GraphicsContext* context = imageBuffer-&gt;context();

Unrelated to the patch, but this would desperately need some improvement. It&apos;s creating a new ImageBuffer and the related cairo surface, allocating the necessary memory each time it&apos;s called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080857</commentid>
    <comment_count>3</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2015-03-27 19:27:09 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 248048 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248048&amp;action=review
&gt; 
&gt; Looks nice, the position of these classes always bothered me.
&gt; 
&gt; There&apos;s plenty of space for further cleanups, but this is a great start.
&gt;

Not only clean ups, but also lots of improvement can be done after all. :)
 
&gt; &gt; Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp:39
&gt; &gt; +    std::unique_ptr&lt;ImageBuffer&gt; imageBuffer = ImageBuffer::create(targetRect.size());
&gt; &gt; +    GraphicsContext* context = imageBuffer-&gt;context();
&gt; 
&gt; Unrelated to the patch, but this would desperately need some improvement.
&gt; It&apos;s creating a new ImageBuffer and the related cairo surface, allocating
&gt; the necessary memory each time it&apos;s called.

I agree, but in most of cases this method would not be called. I think in
Coordinated Graphics, we uses UpdateAtlas so we reuses ImageBuffer and Cairo surfaces,
but I need to check.

I think we need to remove TextureMapperImageBuffer and
remove all non-accelerated compositing code paths to simplify code paths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080873</commentid>
    <comment_count>4</comment_count>
      <attachid>248048</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-27 20:15:52 -0700</bug_when>
    <thetext>Comment on attachment 248048
Patch

Clearing flags on attachment: 248048

Committed r182101: &lt;http://trac.webkit.org/changeset/182101&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080874</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-27 20:15:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080888</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-27 22:35:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 248048 [details]
&gt; Patch
&gt; 
&gt; Clearing flags on attachment: 248048
&gt; 
&gt; Committed r182101: &lt;http://trac.webkit.org/changeset/182101&gt;

It made compositing tests crash on the EFL bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080892</commentid>
    <comment_count>7</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2015-03-27 23:01:20 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; Comment on attachment 248048 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Clearing flags on attachment: 248048
&gt; &gt; 
&gt; &gt; Committed r182101: &lt;http://trac.webkit.org/changeset/182101&gt;
&gt; 
&gt; It made compositing tests crash on the EFL bot.

Ossy, could you give me a more log about the crash?
I couldn&apos;t find any additional failure on EFL bot after this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080928</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-28 02:28:14 -0700</bug_when>
    <thetext>before:
- https://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2/builds/20777
- 46 fail, only 1 crash from it

after:
- https://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2/builds/20778
- 64 fails, 18 compositing test crashes from it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081103</commentid>
    <comment_count>9</comment_count>
    <who name="Gwang Yoon Hwang">yoon</who>
    <bug_when>2015-03-29 23:10:49 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; before:
&gt; -
&gt; https://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2/
&gt; builds/20777
&gt; - 46 fail, only 1 crash from it
&gt; 
&gt; after:
&gt; -
&gt; https://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2/
&gt; builds/20778
&gt; - 64 fails, 18 compositing test crashes from it

Thanks for let me know.
I didn&apos;t noticed number changes. :/

But the problem is I cannot run WebKitEFL either using vm&apos;s driver or llvmpipe.
Do you know any of magic variable to run WebKitEFL?
I cannot enter to the opengl_x11 mode in EFL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081128</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-30 03:09:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; before:
&gt; &gt; -
&gt; &gt; https://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2/
&gt; &gt; builds/20777
&gt; &gt; - 46 fail, only 1 crash from it
&gt; &gt; 
&gt; &gt; after:
&gt; &gt; -
&gt; &gt; https://build.webkit.org/builders/EFL%20Linux%2064-bit%20Release%20WK2/
&gt; &gt; builds/20778
&gt; &gt; - 64 fails, 18 compositing test crashes from it
&gt; 
&gt; Thanks for let me know.
&gt; I didn&apos;t noticed number changes. :/
&gt; 
&gt; But the problem is I cannot run WebKitEFL either using vm&apos;s driver or
&gt; llvmpipe.
&gt; Do you know any of magic variable to run WebKitEFL?
&gt; I cannot enter to the opengl_x11 mode in EFL.

Let&apos;s continue in bug143214. Unfortunately I don&apos;t have any 
time today, but I&apos;ll try to check it in details tomorrow.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248048</attachid>
            <date>2015-03-06 00:00:33 -0800</date>
            <delta_ts>2015-03-27 20:15:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142386-20150306170011.patch</filename>
            <type>text/plain</type>
            <size>85340</size>
            <attacher name="Gwang Yoon Hwang">yoon</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwOTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGEyODg0ZjQwMmI0MDE5
NWI0MTRjMDMyNjUyYTgyNDZiOTRlNWY4Zi4uYThkZmI3M2RiMGM4NjgzNzk0MTliNWU4NmY2NTg4
OTUwZTBlYTllMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE1LTAzLTA1ICBHd2Fu
ZyBZb29uIEh3YW5nICA8eW9vbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtUZXhNYXBdIFNlcGVy
YXRlIEJpdG1hcFRleHR1cmUgcmVsYXRlZCBjbGFzc2VzIGltcGxlbWVudGF0aW9ucyBmcm9tIFRl
eHR1cmVNYXBwZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MjM4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRleHR1cmVNYXBwZXIgYW5kIFRleHR1cmVNYXBwZXJHTCBhcmUgYmxvYXRlZCBhbmQgdGln
aHRseSBjb3VwbGVkIHdpdGgKKyAgICAgICAgQml0bWFwVGV4dHVyZS4gV2Ugc2hvdWxkIG1vdmUg
dGhlc2UgY2xhc3NlcyB0byBzZXBlcmF0ZWQgZmlsZSBvZiB0aGVpciBvd24uCisgICAgICAgIEFs
c28sIHRoaXMgcGF0Y2ggcmVtb3ZlcyBmcmllbmQgcmVsYXRpb25zaGlwIGZyb20gVGV4dHVyZU1h
cHBlckdMIGFuZCAgaXRzCisgICAgICAgIHN1YnNpZGlhcnkgY2xhc3Nlcy4KKworICAgICAgICBU
aGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgcmVmYWN0b3JpbmcgaXMgdG8gZXhwb3NlIEJpdG1hcFRl
eHR1cmVQb29sIHRvCisgICAgICAgIHJlbmRlcmVycyBvZiBwbGF0Zm9ybWxheWVycyBsaWtlIFZp
ZGVvIGFuZCBDYW52YXMuIEJ5IGRvaW5nIHRoaXMsIGVhY2gKKyAgICAgICAgcmVuZGVyZXIgY2Fu
IGFjcXVpcmUgdGV4dHVyZXMgZnJvbSB0aGUgZ2xvYmFsIHRleHR1cmUgcG9vbCB0byBwYWludAor
ICAgICAgICB0aGVpciBjb250ZW50cyBkaXJlY3RseS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
bmVlZGVkLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1HVEsuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwOgorICAgICAgICBJbmNsdWRlIEJpdG1hcFRl
eHR1cmVHTCBhbmQgQml0bWFwVGV4dHVyZVBvb2wgZXhwbGljaXRseQorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgRXhj
bHVkZSBCaXRtYXBUZXh0dXJlIGNsYXNzIGZyb20gVGV4dHVyZU1hcHBlcgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHA6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuaDogQWRkZWQu
CisgICAgICAgIEV4Y2x1ZGUgQml0bWFwVGV4dHVyZUdMIGNsYXNzIGZyb20gVGV4dHVyZU1hcHBl
ckdMCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmNsaXBTdGFjayk6IEFkZGVk
LgorICAgICAgICBBZGQgdGhlIGdldHRlciBmb3IgY2xpcFN0YWNrIGZvciBUZXh0dXJlTWFwcGVy
R0wKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6QmluZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OkJpbmRBc1N1cmZhY2UpOiBBZGRlZC4K
KyAgICAgICAgQmluZCB1c2VkIFRleHR1cmVNYXBwZXJHTCdzIGludGVybmFsIGRhdGEgZGlyZWN0
bHkgdG8gY29tcHV0ZSBwcm9qZWN0aW9uIG1hdHJpeCBhcyBhIGZyaWVuZCBjbGFzcywKKyAgICAg
ICAgSG93ZXZlciwgVGV4dHVyZU1hcHBlckdMIGNhbiBjb21wdXRlIHByb2plY3Rpb24gbWF0cml4
IGl0c2VsZiBhZnRlciBiaW5kaW5nIGpvYiwgc28gdGhpcworICAgICAgICBmcmllbmQgc2hpcCBp
cyBub3QgbmVlZGVkLiBBbHNvLCB0aGlzIHBhdGNoIHJlbmFtZXMgQmluZCB0byBCaW5kQXNTdXJm
YWNlIHRvIHJlbW92ZSBhbWJpZ3VpdHkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4K
KyAgICAgICAgRXhjbHVkZSBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIgY2xhc3MgZnJvbSBUZXh0
dXJlTWFwcGVySW1hZ2VCdWZmZXIKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9CaXRtYXBUZXh0dXJlUG9vbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlUG9vbC5oOiBBZGRlZC4KKyAgICAgICAgRXhjbHVkZSBC
aXRtYXBUZXh0dXJlUG9vbCBjbGFzcyBmcm9tIFRleHR1cmVNYXBwZXJHTAorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwVGV4dHVyZVBvb2w6OmFjcXVpcmVUZXh0dXJlKToKKyAgICAgICAgTW9kaWZp
ZWQgdG8gdXNlIHBhc3NlZCBHcmFwaGljc0NvbnRleHQzRCBpbnN0ZWFkIG9mIFRleHR1cmVNYXBw
ZXJHTCB0byByZW1vdmUgcmVkdW5kYW50IGNvdXBsaW5nCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgUmVtb3ZlIEJpdG1hcFRleHR1
cmVQb29sIGFuZCBCaXRtYXBUZXh0dXJlIGZyb20gaXRzIGltcGxlbWVudGF0aW9uLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAg
ICBSZW1vdmUgQml0bWFwVGV4dHVyZUdMIGZyb20gaXRzIGltcGxlbWVudGF0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpUZXh0dXJlTWFwcGVyR0wpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpjbGlwU3RhY2spOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlckdMOjpiaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyR0w6OmN1cnJlbnRTdXJmYWNlKToKKyAgICAgICAgQWRkIGEgZ2V0dGVyIG9mIHRoZSBj
dXJyZW50IHN1cmZhY2UgZm9yIGZpbHRlcmluZyBvcGVyYXRpb24gaW4gQml0bWFwVGV4dHVyZUdM
LgorICAgICAgICBJdCB3b3VsZCBiZSBjbGVhciB0byBtb3ZlIGZpbHRlcmluZyBvcGVyYXRpb24g
ZnJvbSBCaXRtYXBUZXh0dXJlR0wgdG8gVGV4dHVyZU1hcHBlckdMIGxhdGVyLgorCisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjayk6CisgICAgICAgIE1vdmUgaW5u
ZXIgY2xhc3MgZGVjbGFyYXRpb24gdG8gcHVibGljLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oOgorICAgICAg
ICBSZW1vdmUgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyIGZyb20gaXRzIGltcGxlbWVudGF0aW9u
LgorCiAyMDE1LTAxLTA4ICBHd2FuZyBZb29uIEh3YW5nICA8eW9vbkBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtDb29yZGluYXRlZEdyYXBoaWNzXSBOb24tb3ZlcmxheSBzY3JvbGxiYXIgaXMgbm90
IHJlbmRlcmVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2I5Yzc1ZGRlOWU4OTk4OGMwMDZkYThiNWQ4OTUwYzdk
OWEwMDBlNy4uNjljMjNjNDdiMjE4YjY1M2NmNWEzNmJkZjRkY2JkYzJhNDYyM2YxZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE1LTAzLTA1ICBHd2FuZyBZb29uIEh3YW5nICA8eW9v
bkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtUZXhNYXBdIFNlcGVyYXRlIEJpdG1hcFRleHR1cmUg
cmVsYXRlZCBjbGFzc2VzIGltcGxlbWVudGF0aW9ucyBmcm9tIFRleHR1cmVNYXBwZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjM4NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHR1cmVNYXBwZXIg
YW5kIFRleHR1cmVNYXBwZXJHTCBhcmUgYmxvYXRlZCBhbmQgdGlnaHRseSBjb3VwbGVkIHdpdGgK
KyAgICAgICAgQml0bWFwVGV4dHVyZS4gV2Ugc2hvdWxkIG1vdmUgdGhlc2UgY2xhc3NlcyB0byBz
ZXBlcmF0ZWQgZmlsZSBvZiB0aGVpciBvd24uCisgICAgICAgIEFsc28sIHRoaXMgcGF0Y2ggcmVt
b3ZlcyBmcmllbmQgcmVsYXRpb25zaGlwIGZyb20gVGV4dHVyZU1hcHBlckdMIGFuZCAgaXRzCisg
ICAgICAgIHN1YnNpZGlhcnkgY2xhc3Nlcy4KKworICAgICAgICBUaGUgbWFpbiBwdXJwb3NlIG9m
IHRoaXMgcmVmYWN0b3JpbmcgaXMgdG8gZXhwb3NlIEJpdG1hcFRleHR1cmVQb29sIHRvCisgICAg
ICAgIHJlbmRlcmVycyBvZiBwbGF0Zm9ybWxheWVycyBsaWtlIFZpZGVvIGFuZCBDYW52YXMuIEJ5
IGRvaW5nIHRoaXMsIGVhY2gKKyAgICAgICAgcmVuZGVyZXIgY2FuIGFjcXVpcmUgdGV4dHVyZXMg
ZnJvbSB0aGUgZ2xvYmFsIHRleHR1cmUgcG9vbCB0byBwYWludAorICAgICAgICB0aGVpciBjb250
ZW50cyBkaXJlY3RseS4KKworICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dl
YkNvb3JkaW5hdGVkU3VyZmFjZS5jcHA6IEluY2x1ZGUgQml0bWFwVGV4dHVyZUdMLmggZXhwbGlj
aXRseQorCiAyMDE1LTAzLTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBMb3RzIG9mOiBFUlJPUjogVW5oYW5kbGVkIHdlYiBwcm9jZXNzIG1lc3NhZ2UgV2Vi
UGFnZUdyb3VwUHJveHk6UmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IDYxZGU3MjY0Y2M4YzVjZjY3M2I4ZTQ0NGE0YmE0ZTFhYTc4MjI5MTAu
Ljk1NTQ5MTE1NGMyODE5YzMzZjMwNjc5ZjNiN2M2M2E5YzBhNDNhOTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlCkBAIC0xODEsNiArMTgxLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMUhlbHBlci5jcHAK
IAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlci5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZVBvb2wuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQppbmRleCA4NGIyZmE0YjQxNmZjNWQ2ZWYyNTRlZGIwZWI0Y2M4MjA2MjY4NzM2Li4z
ZTcwMGRlMjNmYWZhYmMzODk1MzQzOTA0ZTMxYTYwZDNkMjk5YjI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQpAQCAtMzY4LDggKzM2OCwxMyBAQCBpZiAoRU5BQkxFX1RFWFRVUkVfTUFQUEVS
KQogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgogICAg
ICkKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9CaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlUG9vbC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0uY3BwCiAgICAg
KQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmNwcAppbmRleCAxMzQyYThlZTc2Y2U4NDdlMTg1MDc5Y2VjYzE1MjdhZWRhY2Zi
MTdmLi5mZTIxYjc1YTJmMWZjNjljODUyMzUzMzhiNzNjMzc1ZDQ3NTZlMGVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCkBAIC00
NSw2ICs0NSw4IEBACiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgogCiAjaWYg
R1NUX0NIRUNLX1ZFUlNJT04oMSwgMSwgMCkgJiYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2lu
Y2x1ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgorI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVQb29sLmgi
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM0NTQ0MDNiYjYzMWU5NTE0OGNmODc5NzM3YTEzMzQzMjg3ZWIwMGUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Qml0bWFwVGV4dHVyZS5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQml0bWFwVGV4dHVyZTo6dXBkYXRlQ29u
dGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXllciogc291cmNl
TGF5ZXIsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBvZmZzZXQs
IFVwZGF0ZUNvbnRlbnRzRmxhZyB1cGRhdGVDb250ZW50c0ZsYWcpCit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGFy
Z2V0UmVjdC5zaXplKCkpOworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IGltYWdlQnVm
ZmVyLT5jb250ZXh0KCk7CisgICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGNvbnRl
eHQtPnNldFRleHREcmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2luZ01vZGUoKSk7
CisKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QodGFyZ2V0UmVjdCk7CisgICAgc291cmNlUmVjdC5z
ZXRMb2NhdGlvbihvZmZzZXQpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtb2Zmc2V0LngoKSwg
LW9mZnNldC55KCkpOworICAgIHNvdXJjZUxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50
cygqY29udGV4dCwgc291cmNlUmVjdCk7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gaW1h
Z2VCdWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisKKyAgICB1cGRhdGVD
b250ZW50cyhpbWFnZS5nZXQoKSwgdGFyZ2V0UmVjdCwgSW50UG9pbnQoKSwgdXBkYXRlQ29udGVu
dHNGbGFnKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2
MjVmMmZmNzBjMzg0OTAyY2MyM2M0NDVkZTk0OTZmY2Q3M2QyYzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5o
CkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDE0
IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQml0bWFwVGV4dHVyZV9oCisjZGVmaW5l
IEJpdG1hcFRleHR1cmVfaAorCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2RlZmluZSBURVhNQVBf
T1BFTkdMX0VTXzIKKyNlbmRpZgorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGaWx0ZXJPcGVyYXRpb25zOworY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNzIElt
YWdlOworY2xhc3MgVGV4dHVyZU1hcHBlcjsKKworLy8gQSAyRCB0ZXh0dXJlIHRoYXQgY2FuIGJl
IHRoZSB0YXJnZXQgb2Ygc29mdHdhcmUgb3IgR0wgcmVuZGVyaW5nLgorY2xhc3MgQml0bWFwVGV4
dHVyZSA6IHB1YmxpYyBSZWZDb3VudGVkPEJpdG1hcFRleHR1cmU+IHsKK3B1YmxpYzoKKyAgICBl
bnVtIEZsYWcgeworICAgICAgICBOb0ZsYWcgPSAwLAorICAgICAgICBTdXBwb3J0c0FscGhhID0g
MHgwMQorICAgIH07CisKKyAgICBlbnVtIFVwZGF0ZUNvbnRlbnRzRmxhZyB7CisgICAgICAgIFVw
ZGF0ZUNhbk1vZGlmeU9yaWdpbmFsSW1hZ2VEYXRhLAorICAgICAgICBVcGRhdGVDYW5ub3RNb2Rp
ZnlPcmlnaW5hbEltYWdlRGF0YQorICAgIH07CisKKyAgICB0eXBlZGVmIHVuc2lnbmVkIEZsYWdz
OworCisgICAgQml0bWFwVGV4dHVyZSgpCisgICAgICAgIDogbV9mbGFncygwKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5CaXRtYXBUZXh0dXJlKCkgeyB9CisgICAgdmlydHVhbCBib29s
IGlzQmFja2VkQnlPcGVuR0woKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCBJbnRTaXplIHNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRl
bnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiBvZmZzZXQsIFVwZGF0
ZUNvbnRlbnRzRmxhZykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhUZXh0
dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXllciosIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3Qg
SW50UG9pbnQmIG9mZnNldCwgVXBkYXRlQ29udGVudHNGbGFnKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3Qg
SW50UG9pbnQmIG9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSwgVXBkYXRlQ29udGVudHNGbGFnKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9IDA7CisgICAgaW5saW5lIEZs
YWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQorCisgICAgdmlydHVhbCBpbnQg
YnBwKCkgY29uc3QgeyByZXR1cm4gMzI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuUmV1c2VXaXRo
KGNvbnN0IEludFNpemUmIC8qIGNvbnRlbnRzU2l6ZSAqLywgRmxhZ3MgPSAwKSB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZvaWQgcmVzZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3Mg
PSAwKQorICAgIHsKKyAgICAgICAgbV9mbGFncyA9IGZsYWdzOworICAgICAgICBtX2NvbnRlbnRT
aXplID0gc2l6ZTsKKyAgICAgICAgZGlkUmVzZXQoKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlc2V0KCkgeyB9CisKKyAgICBpbmxpbmUgSW50U2l6ZSBjb250ZW50U2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudFNpemU7IH0KKyAgICBpbmxpbmUgaW50IG51bWJlck9mQnl0ZXMo
KSBjb25zdCB7IHJldHVybiBzaXplKCkud2lkdGgoKSAqIHNpemUoKS5oZWlnaHQoKSAqIGJwcCgp
ID4+IDM7IH0KKyAgICBpbmxpbmUgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuICEobV9m
bGFncyAmIFN1cHBvcnRzQWxwaGEpOyB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gYXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJikgeyByZXR1cm4gdGhpczsgfQorCitwcm90ZWN0ZWQ6CisgICAgSW50U2l6ZSBtX2NvbnRl
bnRTaXplOworCitwcml2YXRlOgorICAgIEZsYWdzIG1fZmxhZ3M7Cit9OworCit9CisKKyNlbmRp
ZiAvLyBCaXRtYXBUZXh0dXJlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVHTC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTc1
YzM4ZjJmZjRiMTkxODI4ZDdkMWVjZTE2ZTRkNjA5YjA5MGJmNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wu
Y3BwCkBAIC0wLDAgKzEsMzc5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0
ZWQKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5j
bHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgorCisjaWYgVVNFKENBSVJPKQorI2luY2x1ZGUg
IkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDxj
YWlyby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNlbmRpZgorCisjaWYgIVVT
RShURVhNQVBfT1BFTkdMX0VTXzIpCisvLyBGSVhNRTogTW92ZSB0byBFeHRlbnNpb25zM0QuaC4K
KyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWIDB4ODM2NworI2RlZmluZSBHTF9V
TlBBQ0tfUk9XX0xFTkdUSCAweDBDRjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTIDB4
MENGNAorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9ST1dTIDB4MENGMworI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQml0bWFwVGV4dHVyZUdMKiB0b0JpdG1hcFRleHR1cmVHTChCaXRt
YXBUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNC
YWNrZWRCeU9wZW5HTCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxCaXRtYXBUZXh0dXJlR0wqPih0ZXh0dXJlKTsKK30KKworQml0bWFwVGV4dHVyZUdMOjpC
aXRtYXBUZXh0dXJlR0woUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dDNEKQor
ICAgIDogbV9pZCgwKQorICAgICwgbV9mYm8oMCkKKyAgICAsIG1fcmJvKDApCisgICAgLCBtX2Rl
cHRoQnVmZmVyT2JqZWN0KDApCisgICAgLCBtX3Nob3VsZENsZWFyKHRydWUpCisgICAgLCBtX2Nv
bnRleHQzRChjb250ZXh0M0QpCit7Cit9CisKK2Jvb2wgQml0bWFwVGV4dHVyZUdMOjpjYW5SZXVz
ZVdpdGgoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBGbGFncykKK3sKKyAgICByZXR1cm4g
Y29udGVudHNTaXplID09IG1fdGV4dHVyZVNpemU7Cit9CisKKyNpZiBPUyhEQVJXSU4pCisjZGVm
aW5lIERFRkFVTFRfVEVYVFVSRV9QSVhFTF9UUkFOU0ZFUl9UWVBFIEdMX1VOU0lHTkVEX0lOVF84
XzhfOF84X1JFVgorI2Vsc2UKKyNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVS
X1RZUEUgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyNlbmRpZgorCitzdGF0aWMg
dm9pZCBzd2l6emxlQkdSQVRvUkdCQSh1aW50MzJfdCogZGF0YSwgY29uc3QgSW50UmVjdCYgcmVj
dCwgaW50IHN0cmlkZSA9IDApCit7CisgICAgc3RyaWRlID0gc3RyaWRlID8gc3RyaWRlIDogcmVj
dC53aWR0aCgpOworICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyAr
K3kpIHsKKyAgICAgICAgdWludDMyX3QqIHAgPSBkYXRhICsgeSAqIHN0cmlkZTsKKyAgICAgICAg
Zm9yIChpbnQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7ICsreCkKKyAgICAgICAgICAg
IHBbeF0gPSAoKHBbeF0gPDwgMTYpICYgMHhmZjAwMDApIHwgKChwW3hdID4+IDE2KSAmIDB4ZmYp
IHwgKHBbeF0gJiAweGZmMDBmZjAwKTsKKyAgICB9Cit9CisKKy8vIElmIEdMX0VYVF90ZXh0dXJl
X2Zvcm1hdF9CR1JBODg4OCBpcyBzdXBwb3J0ZWQgaW4gdGhlIE9wZW5HTEVTCisvLyBpbnRlcm5h
bCBhbmQgZXh0ZXJuYWwgZm9ybWF0cyBuZWVkIHRvIGJlIEJHUkEKK3N0YXRpYyBib29sIGRyaXZl
clN1cHBvcnRzRXh0ZXJuYWxUZXh0dXJlQkdSQShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
K3sKKyAgICBpZiAoY29udGV4dC0+aXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHN0YXRp
YyBib29sIHN1cHBvcnRzRXh0ZXJuYWxUZXh0dXJlQkdSQSA9IGNvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAg
ICByZXR1cm4gc3VwcG9ydHNFeHRlcm5hbFRleHR1cmVCR1JBOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCBkcml2ZXJTdXBwb3J0c1N1YkltYWdlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQoreworICAgIGlmIChjb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50
KCkpIHsKKyAgICAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNTdWJJbWFnZSA9IGNvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF91bnBhY2tfc3ViaW1hZ2UiKTsKKyAgICAg
ICAgcmV0dXJuIHN1cHBvcnRzU3ViSW1hZ2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjpkaWRSZXNldCgpCit7CisgICAgaWYgKCFtX2lkKQor
ICAgICAgICBtX2lkID0gbV9jb250ZXh0M0QtPmNyZWF0ZVRleHR1cmUoKTsKKworICAgIG1fc2hv
dWxkQ2xlYXIgPSB0cnVlOworICAgIGlmIChtX3RleHR1cmVTaXplID09IGNvbnRlbnRTaXplKCkp
CisgICAgICAgIHJldHVybjsKKworCisgICAgbV90ZXh0dXJlU2l6ZSA9IGNvbnRlbnRTaXplKCk7
CisgICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBtX2lkKTsKKyAgICBtX2NvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgbV9jb250ZXh0M0QtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIG1fY29udGV4
dDNELT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19F
REdFKTsKKyAgICBtX2NvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0Nv
bnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IGludGVybmFs
Rm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgUGxhdGZvcm0zRE9iamVjdCBl
eHRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBOworICAgIGlmIChtX2NvbnRl
eHQzRC0+aXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGlmIChkcml2ZXJTdXBwb3J0c0V4
dGVybmFsVGV4dHVyZUJHUkEobV9jb250ZXh0M0QuZ2V0KCkpKQorICAgICAgICAgICAgaW50ZXJu
YWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6QkdSQTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZXh0ZXJuYWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICB9CisK
KyAgICBtX2NvbnRleHQzRC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgMCwgaW50ZXJuYWxGb3JtYXQsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwgbV90ZXh0
dXJlU2l6ZS5oZWlnaHQoKSwgMCwgZXh0ZXJuYWxGb3JtYXQsIERFRkFVTFRfVEVYVFVSRV9QSVhF
TF9UUkFOU0ZFUl9UWVBFLCAwKTsKK30KKwordm9pZCBCaXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNv
bnRlbnRzTm9Td2l6emxlKGNvbnN0IHZvaWQqIHNyY0RhdGEsIGNvbnN0IEludFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUsIHVu
c2lnbmVkIGJ5dGVzUGVyUGl4ZWwsIFBsYXRmb3JtM0RPYmplY3QgZ2xGb3JtYXQpCit7CisgICAg
bV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X2lkKTsKKyAgICAvLyBGb3IgRVMgZHJpdmVycyB0aGF0IGRvbid0IHN1cHBvcnQgc3ViLWltYWdl
cy4KKyAgICBpZiAoZHJpdmVyU3VwcG9ydHNTdWJJbWFnZShtX2NvbnRleHQzRC5nZXQoKSkpIHsK
KyAgICAgICAgLy8gVXNlIHRoZSBPcGVuR0wgc3ViLWltYWdlIGV4dGVuc2lvbiwgbm93IHRoYXQg
d2Uga25vdyBpdCdzIGF2YWlsYWJsZS4KKyAgICAgICAgbV9jb250ZXh0M0QtPnBpeGVsU3RvcmVp
KEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRlc1BlclBpeGVsKTsKKyAg
ICAgICAgbV9jb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQX1JPV1MsIHNvdXJj
ZU9mZnNldC55KCkpOworICAgICAgICBtX2NvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNL
X1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHQz
RC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgdGFyZ2V0
UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRoKCksIHRhcmdldFJlY3Qu
aGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSwg
c3JjRGF0YSk7CisKKyAgICAvLyBGb3IgRVMgZHJpdmVycyB0aGF0IGRvbid0IHN1cHBvcnQgc3Vi
LWltYWdlcy4KKyAgICBpZiAoZHJpdmVyU3VwcG9ydHNTdWJJbWFnZShtX2NvbnRleHQzRC5nZXQo
KSkpIHsKKyAgICAgICAgbV9jb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVO
R1RILCAwKTsKKyAgICAgICAgbV9jb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19TS0lQ
X1JPV1MsIDApOworICAgICAgICBtX2NvbnRleHQzRC0+cGl4ZWxTdG9yZWkoR0xfVU5QQUNLX1NL
SVBfUElYRUxTLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVD
b250ZW50cyhjb25zdCB2b2lkKiBzcmNEYXRhLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lLCBVcGRhdGVDb250
ZW50c0ZsYWcgdXBkYXRlQ29udGVudHNGbGFnKQoreworICAgIFBsYXRmb3JtM0RPYmplY3QgZ2xG
b3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faWQpOworCisgICAgY29uc3Qg
dW5zaWduZWQgYnl0ZXNQZXJQaXhlbCA9IDQ7CisgICAgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KHNyY0RhdGEpKTsKKyAgICBWZWN0b3I8Y2hh
cj4gdGVtcG9yYXJ5RGF0YTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFNvdXJjZU9mZnNldCA9IHNv
dXJjZU9mZnNldDsKKworICAgIC8vIFRleHR1cmUgdXBsb2FkIHJlcXVpcmVzIHN1YmltYWdlIGJ1
ZmZlciBpZiBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IHN1YmltYWdlIGFuZCB3ZSBkb24ndCBoYXZl
IGZ1bGwgaW1hZ2UgdXBsb2FkLgorICAgIGJvb2wgcmVxdWlyZVN1YkltYWdlQnVmZmVyID0gIWRy
aXZlclN1cHBvcnRzU3ViSW1hZ2UobV9jb250ZXh0M0QuZ2V0KCkpCisgICAgICAgICYmICEoYnl0
ZXNQZXJMaW5lID09IHN0YXRpY19jYXN0PGludD4odGFyZ2V0UmVjdC53aWR0aCgpICogYnl0ZXNQ
ZXJQaXhlbCkgJiYgYWRqdXN0ZWRTb3VyY2VPZmZzZXQgPT0gSW50UG9pbnQ6Onplcm8oKSk7CisK
KyAgICAvLyBwcmVwYXJlIHRlbXBvcmFyeURhdGEgaWYgbmVjZXNzYXJ5CisgICAgaWYgKCghZHJp
dmVyU3VwcG9ydHNFeHRlcm5hbFRleHR1cmVCR1JBKG1fY29udGV4dDNELmdldCgpKSAmJiB1cGRh
dGVDb250ZW50c0ZsYWcgPT0gVXBkYXRlQ2Fubm90TW9kaWZ5T3JpZ2luYWxJbWFnZURhdGEpIHx8
IHJlcXVpcmVTdWJJbWFnZUJ1ZmZlcikgeworICAgICAgICB0ZW1wb3JhcnlEYXRhLnJlc2l6ZSh0
YXJnZXRSZWN0LndpZHRoKCkgKiB0YXJnZXRSZWN0LmhlaWdodCgpICogYnl0ZXNQZXJQaXhlbCk7
CisgICAgICAgIGRhdGEgPSB0ZW1wb3JhcnlEYXRhLmRhdGEoKTsKKyAgICAgICAgY29uc3QgY2hh
ciogYml0cyA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzcmNEYXRhKTsKKyAgICAgICAgY29u
c3QgY2hhciogc3JjID0gYml0cyArIHNvdXJjZU9mZnNldC55KCkgKiBieXRlc1BlckxpbmUgKyBz
b3VyY2VPZmZzZXQueCgpICogYnl0ZXNQZXJQaXhlbDsKKyAgICAgICAgY2hhciogZHN0ID0gZGF0
YTsKKyAgICAgICAgY29uc3QgaW50IHRhcmdldEJ5dGVzUGVyTGluZSA9IHRhcmdldFJlY3Qud2lk
dGgoKSAqIGJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgdGFyZ2V0
UmVjdC5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHRhcmdl
dEJ5dGVzUGVyTGluZSk7CisgICAgICAgICAgICBzcmMgKz0gYnl0ZXNQZXJMaW5lOworICAgICAg
ICAgICAgZHN0ICs9IHRhcmdldEJ5dGVzUGVyTGluZTsKKyAgICAgICAgfQorCisgICAgICAgIGJ5
dGVzUGVyTGluZSA9IHRhcmdldEJ5dGVzUGVyTGluZTsKKyAgICAgICAgYWRqdXN0ZWRTb3VyY2VP
ZmZzZXQgPSBJbnRQb2ludCgwLCAwKTsKKyAgICB9CisKKyAgICBpZiAoZHJpdmVyU3VwcG9ydHNF
eHRlcm5hbFRleHR1cmVCR1JBKG1fY29udGV4dDNELmdldCgpKSkKKyAgICAgICAgZ2xGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6QkdSQTsKKyAgICBlbHNlCisgICAgICAgIHN3aXp6bGVCR1JB
VG9SR0JBKHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVpbnQzMl90Kj4oZGF0YSksIEludFJlY3QoYWRq
dXN0ZWRTb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKSwgYnl0ZXNQZXJMaW5lIC8gYnl0
ZXNQZXJQaXhlbCk7CisKKyAgICB1cGRhdGVDb250ZW50c05vU3dpenpsZShkYXRhLCB0YXJnZXRS
ZWN0LCBhZGp1c3RlZFNvdXJjZU9mZnNldCwgYnl0ZXNQZXJMaW5lLCBieXRlc1BlclBpeGVsLCBn
bEZvcm1hdCk7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjp1cGRhdGVDb250ZW50cyhJbWFn
ZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBvZmZz
ZXQsIFVwZGF0ZUNvbnRlbnRzRmxhZyB1cGRhdGVDb250ZW50c0ZsYWcpCit7CisgICAgaWYgKCFp
bWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1hZ2UgPSBp
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lSW1hZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGludCBieXRlc1BlckxpbmU7CisgICAgY29uc3QgY2hh
ciogaW1hZ2VEYXRhOworCisjaWYgVVNFKENBSVJPKQorICAgIGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSA9IGZyYW1lSW1hZ2UuZ2V0KCk7CisgICAgaW1hZ2VEYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSk7Cisg
ICAgYnl0ZXNQZXJMaW5lID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2Up
OworI2VuZGlmCisKKyAgICB1cGRhdGVDb250ZW50cyhpbWFnZURhdGEsIHRhcmdldFJlY3QsIG9m
ZnNldCwgYnl0ZXNQZXJMaW5lLCB1cGRhdGVDb250ZW50c0ZsYWcpOworfQorCitzdGF0aWMgdW5z
aWduZWQgZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRp
b25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkdSQVlTQ0FMRToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpIVUVfUk9UQVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkNPTlRSQVNUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorICAgICAgICBy
ZXR1cm4gMTsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgIC8vIFdlIHVzZSB0d28tcGFzc2VzICh2
ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQgZHJvcC1zaGFkb3cuCisgICAgICAgIHJl
dHVybiAyOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJz
KQoreworICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisK
KyAgICBUZXh0dXJlTWFwcGVyR0wqIHRleG1hcEdMID0gc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBl
ckdMKj4odGV4dHVyZU1hcHBlcik7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHByZXZpb3Vz
U3VyZmFjZSA9IHRleG1hcEdMLT5jdXJyZW50U3VyZmFjZSgpOworICAgIFJlZlB0cjxCaXRtYXBU
ZXh0dXJlPiByZXN1bHRTdXJmYWNlID0gdGhpczsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
aW50ZXJtZWRpYXRlU3VyZmFjZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gc3BhcmVTdXJm
YWNlOworCisgICAgbV9maWx0ZXJJbmZvID0gRmlsdGVySW5mbygpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+IGZpbHRlciA9IGZpbHRlcnMub3BlcmF0aW9ucygpW2ldOworICAgICAgICBB
U1NFUlQoZmlsdGVyKTsKKworICAgICAgICBpbnQgbnVtUGFzc2VzID0gZ2V0UGFzc2VzUmVxdWly
ZWRGb3JGaWx0ZXIoZmlsdGVyLT50eXBlKCkpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IG51bVBhc3NlczsgKytqKSB7CisgICAgICAgICAgICBib29sIGxhc3QgPSAoaSA9PSBmaWx0ZXJz
LnNpemUoKSAtIDEpICYmIChqID09IG51bVBhc3NlcyAtIDEpOworICAgICAgICAgICAgaWYgKCFs
YXN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpbnRlcm1lZGlhdGVTdXJmYWNlKQorICAgICAg
ICAgICAgICAgICAgICBpbnRlcm1lZGlhdGVTdXJmYWNlID0gdGV4bWFwR0wtPmFjcXVpcmVUZXh0
dXJlRnJvbVBvb2woY29udGVudFNpemUoKSk7CisgICAgICAgICAgICAgICAgdGV4bWFwR0wtPmJp
bmRTdXJmYWNlKGludGVybWVkaWF0ZVN1cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobGFzdCkgeworICAgICAgICAgICAgICAgIHRvQml0bWFwVGV4dHVyZUdM
KHJlc3VsdFN1cmZhY2UuZ2V0KCkpLT5tX2ZpbHRlckluZm8gPSBCaXRtYXBUZXh0dXJlR0w6OkZp
bHRlckluZm8oZmlsdGVyLCBqLCBzcGFyZVN1cmZhY2UpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0ZXhtYXBHTC0+ZHJhd0ZpbHRlcmVkKCpy
ZXN1bHRTdXJmYWNlLmdldCgpLCBzcGFyZVN1cmZhY2UuZ2V0KCksICpmaWx0ZXIsIGopOworICAg
ICAgICAgICAgaWYgKCFqICYmIGZpbHRlci0+dHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6RFJP
UF9TSEFET1cpIHsKKyAgICAgICAgICAgICAgICBzcGFyZVN1cmZhY2UgPSByZXN1bHRTdXJmYWNl
OworICAgICAgICAgICAgICAgIHJlc3VsdFN1cmZhY2UuY2xlYXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHN0ZDo6c3dhcChyZXN1bHRTdXJmYWNlLCBpbnRlcm1lZGlhdGVTdXJmYWNl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRleG1hcEdMLT5iaW5kU3VyZmFjZShwcmV2aW91
c1N1cmZhY2UuZ2V0KCkpOworICAgIHJldHVybiByZXN1bHRTdXJmYWNlOworfQorCit2b2lkIEJp
dG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQoreworICAgIGlmIChtX3JibykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9yYm8gPSBtX2NvbnRleHQzRC0+Y3JlYXRlUmVuZGVyYnVm
ZmVyKCk7CisgICAgbV9jb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgbV9yYm8pOworI2lmZGVmIFRFWE1BUF9PUEVOR0xfRVNfMgorICAg
IG1fY29udGV4dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYOCwgbV90ZXh0dXJlU2l6
ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKKyNlbHNlCisgICAgbV9jb250ZXh0
M0QtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIG1fdGV4dHVyZVNpemUud2lkdGgoKSwg
bV90ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7CisjZW5kaWYKKyAgICBtX2NvbnRleHQzRC0+YmluZFJl
bmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICBtX2Nv
bnRleHQzRC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7CisgICAgbV9jb250ZXh0M0QtPmNsZWFyU3Rl
bmNpbCgwKTsKKyAgICBtX2NvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVCk7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplRGVw
dGhCdWZmZXIoKQoreworICAgIGlmIChtX2RlcHRoQnVmZmVyT2JqZWN0KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2RlcHRoQnVmZmVyT2JqZWN0ID0gbV9jb250ZXh0M0QtPmNyZWF0ZVJlbmRl
cmJ1ZmZlcigpOworICAgIG1fY29udGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXJPYmplY3QpOworICAgIG1fY29udGV4
dDNELT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwgbV90ZXh0dXJlU2l6ZS53aWR0
aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZFJlbmRl
cmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICBtX2NvbnRl
eHQzRC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlck9iamVjdCk7Cit9CisKK3ZvaWQgQml0bWFw
VGV4dHVyZUdMOjpjbGVhcklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkQ2xlYXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY2xpcFN0YWNrLnJlc2V0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbV90ZXh0dXJlU2l6ZSksIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrOjpEZWZh
dWx0WUF4aXMpOworICAgIG1fY2xpcFN0YWNrLmFwcGx5SWZOZWVkZWQobV9jb250ZXh0M0QuZ2V0
KCkpOworICAgIG1fY29udGV4dDNELT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIG1fY29u
dGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7CisgICAg
bV9zaG91bGRDbGVhciA9IGZhbHNlOworfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRl
RmJvSWZOZWVkZWQoKQoreworICAgIGlmIChtX2ZibykKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9mYm8gPSBtX2NvbnRleHQzRC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBtX2NvbnRleHQz
RC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OworICAgIG1fY29udGV4dDNELT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGlkKCksIDApOworICAgIG1fc2hvdWxkQ2xlYXIg
PSB0cnVlOworfQorCit2b2lkIEJpdG1hcFRleHR1cmVHTDo6YmluZEFzU3VyZmFjZShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNEKQoreworICAgIGNvbnRleHQzRC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAgIGNyZWF0ZUZib0lmTmVlZGVkKCk7
CisgICAgY29udGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX2Zibyk7CisgICAgY29udGV4dDNELT52aWV3cG9ydCgwLCAwLCBtX3RleHR1cmVT
aXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOworICAgIGNsZWFySWZOZWVkZWQo
KTsKKyAgICBtX2NsaXBTdGFjay5hcHBseShtX2NvbnRleHQzRC5nZXQoKSk7Cit9CisKK0JpdG1h
cFRleHR1cmVHTDo6fkJpdG1hcFRleHR1cmVHTCgpCit7CisgICAgaWYgKG1faWQpCisgICAgICAg
IG1fY29udGV4dDNELT5kZWxldGVUZXh0dXJlKG1faWQpOworCisgICAgaWYgKG1fZmJvKQorICAg
ICAgICBtX2NvbnRleHQzRC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOworCisgICAgaWYgKG1f
cmJvKQorICAgICAgICBtX2NvbnRleHQzRC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fcmJvKTsKKwor
ICAgIGlmIChtX2RlcHRoQnVmZmVyT2JqZWN0KQorICAgICAgICBtX2NvbnRleHQzRC0+ZGVsZXRl
UmVuZGVyYnVmZmVyKG1fZGVwdGhCdWZmZXJPYmplY3QpOworfQorCitib29sIEJpdG1hcFRleHR1
cmVHTDo6aXNWYWxpZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWQ7Cit9CisKK0ludFNpemUg
Qml0bWFwVGV4dHVyZUdMOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90ZXh0dXJlU2l6
ZTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlR0wuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZTBlNDJlM2M1OWU4NmVlZDk4OGJlYTMyZThmYzhhOTQxMzc3NmY5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVHTC5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykg
MjAxNCBJZ2FsaWEgUy5MLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEJpdG1h
cFRleHR1cmVHTF9oCisjZGVmaW5lIEJpdG1hcFRleHR1cmVHTF9oCisKKyNpbmNsdWRlICJCaXRt
YXBUZXh0dXJlLmgiCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckdMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVyZU1hcHBl
cjsKK2NsYXNzIFRleHR1cmVNYXBwZXJHTDsKK2NsYXNzIEZpbHRlck9wZXJhdGlvbjsKKworY2xh
c3MgQml0bWFwVGV4dHVyZUdMIDogcHVibGljIEJpdG1hcFRleHR1cmUgeworcHVibGljOgorICAg
IEJpdG1hcFRleHR1cmVHTChQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICB2
aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhblJldXNlV2l0aChjb25zdCBJbnRTaXplJiBjb250
ZW50c1NpemUsIEZsYWdzID0gMCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlc2V0KCk7CisgICAg
dm9pZCBiaW5kQXNTdXJmYWNlKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdm9pZCBpbml0aWFs
aXplU3RlbmNpbCgpOworICAgIHZvaWQgaW5pdGlhbGl6ZURlcHRoQnVmZmVyKCk7CisgICAgfkJp
dG1hcFRleHR1cmVHTCgpOworICAgIHZpcnR1YWwgdWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVy
biBtX2lkOyB9CisgICAgdWludDMyX3QgdGV4dHVyZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOyB9CisgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemU7IH0KKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRz
KEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgVXBkYXRlQ29udGVudHNG
bGFnKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0
IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVz
UGVyTGluZSwgVXBkYXRlQ29udGVudHNGbGFnKTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzTm9T
d2l6emxlKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50
JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUsIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwg
PSA0LCBQbGF0Zm9ybTNET2JqZWN0IGdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEp
OworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlZEJ5T3BlbkdMKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFwcGx5RmlsdGVy
cyhUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIG92ZXJyaWRlOworICAg
IHN0cnVjdCBGaWx0ZXJJbmZvIHsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmls
dGVyOworICAgICAgICB1bnNpZ25lZCBwYXNzOworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gY29udGVudFRleHR1cmU7CisKKyAgICAgICAgRmlsdGVySW5mbyhQYXNzUmVmUHRyPEZpbHRl
ck9wZXJhdGlvbj4gZiA9IDAsIHVuc2lnbmVkIHAgPSAwLCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1
cmU+IHQgPSAwKQorICAgICAgICAgICAgOiBmaWx0ZXIoZikKKyAgICAgICAgICAgICwgcGFzcyhw
KQorICAgICAgICAgICAgLCBjb250ZW50VGV4dHVyZSh0KQorICAgICAgICAgICAgeyB9CisgICAg
fTsKKyAgICBjb25zdCBGaWx0ZXJJbmZvKiBmaWx0ZXJJbmZvKCkgY29uc3QgeyByZXR1cm4gJm1f
ZmlsdGVySW5mbzsgfQorICAgIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrJiBjbGlwU3RhY2so
KSB7IHJldHVybiBtX2NsaXBTdGFjazsgfQorCitwcml2YXRlOgorCisgICAgUGxhdGZvcm0zRE9i
amVjdCBtX2lkOworICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKKyAgICBJbnRSZWN0IG1fZGly
dHlSZWN0OworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX3JibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhCdWZmZXJPYmplY3Q7CisgICAg
Ym9vbCBtX3Nob3VsZENsZWFyOworICAgIFRleHR1cmVNYXBwZXJHTDo6Q2xpcFN0YWNrIG1fY2xp
cFN0YWNrOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisKKyAg
ICBCaXRtYXBUZXh0dXJlR0woKTsKKworICAgIHZvaWQgY2xlYXJJZk5lZWRlZCgpOworICAgIHZv
aWQgY3JlYXRlRmJvSWZOZWVkZWQoKTsKKworICAgIEZpbHRlckluZm8gbV9maWx0ZXJJbmZvOwor
fTsKKworQml0bWFwVGV4dHVyZUdMKiB0b0JpdG1hcFRleHR1cmVHTChCaXRtYXBUZXh0dXJlKik7
CisKK30KKworI2VuZGlmIC8vIEJpdG1hcFRleHR1cmVHTF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUltYWdlQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0
dXJlSW1hZ2VCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NDFhYzg4ZDJmNDcwNGI3NTMxOWRjMDkz
ZTM0MmRmOTkwMjg5YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyLmNwcApAQCAtMCwwICsx
LDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaXRtYXBUZXh0dXJl
SW1hZ2VCdWZmZXIuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVu
dHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50
UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSwgVXBkYXRlQ29udGVudHNGbGFn
KQoreworI2lmIFBMQVRGT1JNKENBSVJPKQorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1
cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSgpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFUX0FS
R0IzMiwgdGFyZ2V0UmVjdC53aWR0aCgpLCB0YXJnZXRSZWN0LmhlaWdodCgpLCBieXRlc1Blckxp
bmUpKTsKKyAgICBtX2ltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3Vy
ZmFjZVRvQ29udGV4dChzdXJmYWNlLmdldCgpLCB0YXJnZXRSZWN0LAorICAgICAgICBJbnRSZWN0
KHNvdXJjZU9mZnNldCwgdGFyZ2V0UmVjdC5zaXplKCkpLCBtX2ltYWdlLT5jb250ZXh0KCkpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKHRhcmdldFJl
Y3QpOworICAgIFVOVVNFRF9QQVJBTShzb3VyY2VPZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShi
eXRlc1BlckxpbmUpOworI2VuZGlmCit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVy
Ojp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyKiwgR3JhcGhpY3NMYXllciogc291cmNlTGF5
ZXIsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZz
ZXQsIFVwZGF0ZUNvbnRlbnRzRmxhZykKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQg
PSBtX2ltYWdlLT5jb250ZXh0KCk7CisKKyAgICBjb250ZXh0LT5jbGVhclJlY3QodGFyZ2V0UmVj
dCk7CisKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QodGFyZ2V0UmVjdCk7CisgICAgc291cmNlUmVj
dC5zZXRMb2NhdGlvbihzb3VyY2VPZmZzZXQpOworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBj
b250ZXh0LT5jbGlwKHRhcmdldFJlY3QpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSh0YXJnZXRS
ZWN0LngoKSAtIHNvdXJjZU9mZnNldC54KCksIHRhcmdldFJlY3QueSgpIC0gc291cmNlT2Zmc2V0
LnkoKSk7CisgICAgc291cmNlTGF5ZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250
ZXh0LCBzb3VyY2VSZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgQml0
bWFwVGV4dHVyZUltYWdlQnVmZmVyOjpkaWRSZXNldCgpCit7CisgICAgbV9pbWFnZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY29udGVudFNpemUoKSk7Cit9CisKK3ZvaWQgQml0bWFwVGV4dHVyZUlt
YWdlQnVmZmVyOjp1cGRhdGVDb250ZW50cyhJbWFnZSogaW1hZ2UsIGNvbnN0IEludFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IEludFBvaW50JiBvZmZzZXQsIFVwZGF0ZUNvbnRlbnRzRmxhZykKK3sK
KyAgICBtX2ltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgdGFyZ2V0UmVjdCwgSW50UmVjdChvZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKSwgQ29t
cG9zaXRlQ29weSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlSW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBU
ZXh0dXJlSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDhkMmRlZTk4NzAzYWY5MjFjMWYzZTQ5
MDM5NGU0YzdkZjhiMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEs
NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXJfaAorI2RlZmluZSBC
aXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXJfaAorCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZS5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CisKK2NsYXNzIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciA6IHB1YmxpYyBCaXRtYXBUZXh0
dXJlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyKTsgfQor
ICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS0+aW50ZXJu
YWxTaXplKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXQoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBpbmxpbmUg
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2ltYWdlID8gbV9p
bWFnZS0+Y29udGV4dCgpIDogMDsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhJ
bWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYsIFVwZGF0ZUNvbnRlbnRzRmxh
Zyk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqLCBHcmFw
aGljc0xheWVyKiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0
LCBVcGRhdGVDb250ZW50c0ZsYWcpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhj
b25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgc291cmNl
T2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lLCBVcGRhdGVDb250ZW50c0ZsYWcpOworICAgIFBhc3NS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gYXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJik7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIEJpdG1hcFRleHR1cmVJbWFnZUJ1
ZmZlcigpIHsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZTsKK307
CisKK30KKworI2VuZGlmIC8vIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZVBv
b2wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmVQb29sLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDQ0MjgwNWY5MjliYjBhMTUwZmI5ODVlYjdmOWM4
ZmU2MmY3YjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmNwcApAQCAtMCwwICsxLDExNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZVBvb2wuaCIKKwor
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpbmNsdWRlICJCaXRtYXBUZXh0dXJlR0wuaCIK
KyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNlbHNlCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZUlt
YWdlQnVmZmVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3Vi
bGUgc19yZWxlYXNlVW51c2VkU2Vjb25kc1RvbGVyYW5jZSA9IDM7Citjb25zdCBkb3VibGUgc19y
ZWxlYXNlVW51c2VkVGV4dHVyZXNUaW1lckludGVydmFsID0gMC41OworCitCaXRtYXBUZXh0dXJl
UG9vbDo6Qml0bWFwVGV4dHVyZVBvb2woKQorICAgIDogbV9yZWxlYXNlVW51c2VkVGV4dHVyZXNU
aW1lcigqdGhpcywgJkJpdG1hcFRleHR1cmVQb29sOjpyZWxlYXNlVW51c2VkVGV4dHVyZXNUaW1l
ckZpcmVkKQoreworfQorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorQml0bWFwVGV4dHVy
ZVBvb2w6OkJpdG1hcFRleHR1cmVQb29sKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQpCisgICAgOiBtX2NvbnRleHQzRChjb250ZXh0KQorICAgICwgbV9yZWxlYXNlVW51c2Vk
VGV4dHVyZXNUaW1lcigqdGhpcywgJkJpdG1hcFRleHR1cmVQb29sOjpyZWxlYXNlVW51c2VkVGV4
dHVyZXNUaW1lckZpcmVkKQoreworfQorI2VuZGlmCisKK3ZvaWQgQml0bWFwVGV4dHVyZVBvb2w6
OnNjaGVkdWxlUmVsZWFzZVVudXNlZFRleHR1cmVzKCkKK3sKKyAgICBpZiAobV9yZWxlYXNlVW51
c2VkVGV4dHVyZXNUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3JlbGVhc2VVbnVzZWRUZXh0
dXJlc1RpbWVyLnN0b3AoKTsKKworICAgIG1fcmVsZWFzZVVudXNlZFRleHR1cmVzVGltZXIuc3Rh
cnRPbmVTaG90KHNfcmVsZWFzZVVudXNlZFRleHR1cmVzVGltZXJJbnRlcnZhbCk7Cit9CisKK3Zv
aWQgQml0bWFwVGV4dHVyZVBvb2w6OnJlbGVhc2VVbnVzZWRUZXh0dXJlc1RpbWVyRmlyZWQoKQor
eworICAgIGlmIChtX3RleHR1cmVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRGVsZXRlIGVudHJpZXMsIHdoaWNoIGhhdmUgYmVlbiB1bnVzZWQgaW4gc19yZWxlYXNlVW51
c2VkU2Vjb25kc1RvbGVyYW5jZS4KKyAgICBzdGQ6OnNvcnQobV90ZXh0dXJlcy5iZWdpbigpLCBt
X3RleHR1cmVzLmVuZCgpLCBCaXRtYXBUZXh0dXJlUG9vbEVudHJ5Ojpjb21wYXJlVGltZUxhc3RV
c2VkKTsKKworICAgIGRvdWJsZSBtaW5Vc2VkVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5n
VGltZSgpIC0gc19yZWxlYXNlVW51c2VkU2Vjb25kc1RvbGVyYW5jZTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdGV4dHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdGV4
dHVyZXNbaV0ubV90aW1lTGFzdFVzZWQgPCBtaW5Vc2VkVGltZSkgeworICAgICAgICAgICAgbV90
ZXh0dXJlcy5yZW1vdmUoaSwgbV90ZXh0dXJlcy5zaXplKCkgLSBpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCitQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJp
dG1hcFRleHR1cmVQb29sOjphY3F1aXJlVGV4dHVyZShjb25zdCBJbnRTaXplJiBzaXplKQorewor
ICAgIEJpdG1hcFRleHR1cmVQb29sRW50cnkqIHNlbGVjdGVkRW50cnkgPSAwOworICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX3RleHR1cmVzKSB7CisgICAgICAgIC8vIElmIHRoZSBzdXJmYWNlIGhh
cyBvbmx5IG9uZSByZWZlcmVuY2UgKHRoZSBvbmUgaW4gbV90ZXh0dXJlcyksIHdlIGNhbiBzYWZl
bHkgcmV1c2UgaXQuCisgICAgICAgIGlmIChlbnRyeS5tX3RleHR1cmUtPnJlZkNvdW50KCkgPiAx
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGVudHJ5Lm1fdGV4dHVyZS0+
Y2FuUmV1c2VXaXRoKHNpemUpKSB7CisgICAgICAgICAgICBzZWxlY3RlZEVudHJ5ID0gJmVudHJ5
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXNlbGVj
dGVkRW50cnkpIHsKKyAgICAgICAgbV90ZXh0dXJlcy5hcHBlbmQoQml0bWFwVGV4dHVyZVBvb2xF
bnRyeShjcmVhdGVUZXh0dXJlKCkpKTsKKyAgICAgICAgc2VsZWN0ZWRFbnRyeSA9ICZtX3RleHR1
cmVzLmxhc3QoKTsKKyAgICB9CisKKyAgICBzY2hlZHVsZVJlbGVhc2VVbnVzZWRUZXh0dXJlcygp
OworICAgIHNlbGVjdGVkRW50cnktPm1hcmtVc2VkKCk7CisgICAgcmV0dXJuIHNlbGVjdGVkRW50
cnktPm1fdGV4dHVyZTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0
dXJlUG9vbDo6Y3JlYXRlVGV4dHVyZSgpCit7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQor
ICAgIEJpdG1hcFRleHR1cmVHTCogdGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJlR0wobV9jb250
ZXh0M0QpOworICAgIHJldHVybiBhZG9wdFJlZih0ZXh0dXJlKTsKKyNlbHNlCisgICAgcmV0dXJu
IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCk7CisjZW5kaWYKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZVBvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzBjZjY2
MmQyYTBiMGE0NDJiYzM0ODVjY2E0NWExYWM2OThhMjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmVQb29sLmgK
QEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJpdG1hcFRleHR1cmVQb29sX2gKKyNkZWZp
bmUgQml0bWFwVGV4dHVyZVBvb2xfaAorCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2RlZmluZSBU
RVhNQVBfT1BFTkdMX0VTXzIKKyNlbmRpZgorCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZS5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVGlt
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dHVyZU1hcHBlcjsKKworc3RydWN0IEJpdG1hcFRl
eHR1cmVQb29sRW50cnkgeworICAgIGV4cGxpY2l0IEJpdG1hcFRleHR1cmVQb29sRW50cnkoUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKQorICAgICAgICA6IG1fdGV4dHVyZSh0ZXh0
dXJlKQorICAgIHsgfQorICAgIGlubGluZSB2b2lkIG1hcmtVc2VkKCkgeyBtX3RpbWVMYXN0VXNl
ZCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOyB9CisgICAgc3RhdGljIGJvb2wgY29t
cGFyZVRpbWVMYXN0VXNlZChjb25zdCBCaXRtYXBUZXh0dXJlUG9vbEVudHJ5JiBhLCBjb25zdCBC
aXRtYXBUZXh0dXJlUG9vbEVudHJ5JiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEubV90aW1l
TGFzdFVzZWQgLSBiLm1fdGltZUxhc3RVc2VkID4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gbV90ZXh0dXJlOworICAgIGRvdWJsZSBtX3RpbWVMYXN0VXNlZDsKK307CisK
K2NsYXNzIEJpdG1hcFRleHR1cmVQb29sIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCaXRt
YXBUZXh0dXJlUG9vbCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgQml0bWFwVGV4dHVyZVBvb2woKTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAg
ZXhwbGljaXQgQml0bWFwVGV4dHVyZVBvb2woUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4p
OworI2VuZGlmCisKKyAgICBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFjcXVpcmVUZXh0dXJl
KGNvbnN0IEludFNpemUmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNjaGVkdWxlUmVsZWFzZVVu
dXNlZFRleHR1cmVzKCk7CisgICAgdm9pZCByZWxlYXNlVW51c2VkVGV4dHVyZXNUaW1lckZpcmVk
KCk7CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBt
X2NvbnRleHQzRDsKKyNlbmRpZgorCisgICAgVmVjdG9yPEJpdG1hcFRleHR1cmVQb29sRW50cnk+
IG1fdGV4dHVyZXM7CisgICAgVGltZXIgbV9yZWxlYXNlVW51c2VkVGV4dHVyZXNUaW1lcjsKK307
CisKK30KKworI2VuZGlmIC8vIEJpdG1hcFRleHR1cmVQb29sX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcApp
bmRleCA0OTI4NjA4MDAzNjEwZmJjYmM2MzM2ODU1NGM2Mzk0YTQ4NzcwNzFkLi4wMzNhNjFlNzdk
M2YzNDFlMDMzMmJhY2U4ZmNjNjUyZTBjOGY4NTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCkBAIC0y
MCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ci5oIgogCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZVBvb2wuaCIKICNpbmNsdWRlICJGaWx0ZXJP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIgpAQCAtMzAsOTggKzMxLDkgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdHJ1Y3QgQml0bWFwVGV4dHVyZVBvb2xFbnRyeSB7Ci0gICAgZXhwbGljaXQg
Qml0bWFwVGV4dHVyZVBvb2xFbnRyeShQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUp
Ci0gICAgICAgIDogbV90ZXh0dXJlKHRleHR1cmUpCi0gICAgeyB9Ci0gICAgaW5saW5lIHZvaWQg
bWFya1VzZWQoKSB7IG1fdGltZUxhc3RVc2VkID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCk7IH0KLSAgICBzdGF0aWMgYm9vbCBjb21wYXJlVGltZUxhc3RVc2VkKGNvbnN0IEJpdG1hcFRl
eHR1cmVQb29sRW50cnkmIGEsIGNvbnN0IEJpdG1hcFRleHR1cmVQb29sRW50cnkmIGIpCi0gICAg
ewotICAgICAgICByZXR1cm4gYS5tX3RpbWVMYXN0VXNlZCAtIGIubV90aW1lTGFzdFVzZWQgPiAw
OwotICAgIH0KLQotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBtX3RleHR1cmU7Ci0gICAgZG91
YmxlIG1fdGltZUxhc3RVc2VkOwotfTsKLQotY2xhc3MgQml0bWFwVGV4dHVyZVBvb2wgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEJpdG1hcFRleHR1cmVQb29sKTsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBCaXRtYXBUZXh0dXJlUG9vbCgpOwotCi0gICAg
UGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhY3F1aXJlVGV4dHVyZShjb25zdCBJbnRTaXplJiwg
VGV4dHVyZU1hcHBlciopOwotCi1wcml2YXRlOgotICAgIHZvaWQgc2NoZWR1bGVSZWxlYXNlVW51
c2VkVGV4dHVyZXMoKTsKLSAgICB2b2lkIHJlbGVhc2VVbnVzZWRUZXh0dXJlc1RpbWVyRmlyZWQo
KTsKLQotICAgIFZlY3RvcjxCaXRtYXBUZXh0dXJlUG9vbEVudHJ5PiBtX3RleHR1cmVzOwotICAg
IFRpbWVyIG1fcmVsZWFzZVVudXNlZFRleHR1cmVzVGltZXI7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIHNfcmVsZWFzZVVudXNlZFNlY29uZHNUb2xlcmFuY2U7Ci0gICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBzX3JlbGVhc2VVbnVzZWRUZXh0dXJlc1RpbWVySW50ZXJ2YWw7Ci19OwotCi1jb25z
dCBkb3VibGUgQml0bWFwVGV4dHVyZVBvb2w6OnNfcmVsZWFzZVVudXNlZFNlY29uZHNUb2xlcmFu
Y2UgPSAzOwotY29uc3QgZG91YmxlIEJpdG1hcFRleHR1cmVQb29sOjpzX3JlbGVhc2VVbnVzZWRU
ZXh0dXJlc1RpbWVySW50ZXJ2YWwgPSAwLjU7Ci0KLUJpdG1hcFRleHR1cmVQb29sOjpCaXRtYXBU
ZXh0dXJlUG9vbCgpCi0gICAgOiBtX3JlbGVhc2VVbnVzZWRUZXh0dXJlc1RpbWVyKCp0aGlzLCAm
Qml0bWFwVGV4dHVyZVBvb2w6OnJlbGVhc2VVbnVzZWRUZXh0dXJlc1RpbWVyRmlyZWQpCi17IH0K
LQotdm9pZCBCaXRtYXBUZXh0dXJlUG9vbDo6c2NoZWR1bGVSZWxlYXNlVW51c2VkVGV4dHVyZXMo
KQotewotICAgIGlmIChtX3JlbGVhc2VVbnVzZWRUZXh0dXJlc1RpbWVyLmlzQWN0aXZlKCkpCi0g
ICAgICAgIG1fcmVsZWFzZVVudXNlZFRleHR1cmVzVGltZXIuc3RvcCgpOwotCi0gICAgbV9yZWxl
YXNlVW51c2VkVGV4dHVyZXNUaW1lci5zdGFydE9uZVNob3Qoc19yZWxlYXNlVW51c2VkVGV4dHVy
ZXNUaW1lckludGVydmFsKTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlUG9vbDo6cmVsZWFzZVVu
dXNlZFRleHR1cmVzVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1fdGV4dHVyZXMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEZWxldGUgZW50cmllcywgd2hpY2ggaGF2ZSBi
ZWVuIHVudXNlZCBpbiBzX3JlbGVhc2VVbnVzZWRTZWNvbmRzVG9sZXJhbmNlLgotICAgIHN0ZDo6
c29ydChtX3RleHR1cmVzLmJlZ2luKCksIG1fdGV4dHVyZXMuZW5kKCksIEJpdG1hcFRleHR1cmVQ
b29sRW50cnk6OmNvbXBhcmVUaW1lTGFzdFVzZWQpOwotCi0gICAgZG91YmxlIG1pblVzZWRUaW1l
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBzX3JlbGVhc2VVbnVzZWRTZWNvbmRz
VG9sZXJhbmNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpZiAobV90ZXh0dXJlc1tpXS5tX3RpbWVMYXN0VXNlZCA8IG1pblVz
ZWRUaW1lKSB7Ci0gICAgICAgICAgICBtX3RleHR1cmVzLnJlbW92ZShpLCBtX3RleHR1cmVzLnNp
emUoKSAtIGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVBh
c3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZVBvb2w6OmFjcXVpcmVUZXh0dXJl
KGNvbnN0IEludFNpemUmIHNpemUsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCi17Ci0g
ICAgQml0bWFwVGV4dHVyZVBvb2xFbnRyeSogc2VsZWN0ZWRFbnRyeSA9IDA7Ci0gICAgZm9yIChh
dXRvJiBlbnRyeSA6IG1fdGV4dHVyZXMpIHsKLSAgICAgICAgLy8gSWYgdGhlIHN1cmZhY2UgaGFz
IG9ubHkgb25lIHJlZmVyZW5jZSAodGhlIG9uZSBpbiBtX3RleHR1cmVzKSwgd2UgY2FuIHNhZmVs
eSByZXVzZSBpdC4KLSAgICAgICAgaWYgKGVudHJ5Lm1fdGV4dHVyZS0+cmVmQ291bnQoKSA+IDEp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoZW50cnkubV90ZXh0dXJlLT5j
YW5SZXVzZVdpdGgoc2l6ZSkpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkRW50cnkgPSAmZW50cnk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghc2VsZWN0
ZWRFbnRyeSkgewotICAgICAgICBtX3RleHR1cmVzLmFwcGVuZChCaXRtYXBUZXh0dXJlUG9vbEVu
dHJ5KHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKSkpOwotICAgICAgICBzZWxlY3RlZEVu
dHJ5ID0gJm1fdGV4dHVyZXMubGFzdCgpOwotICAgIH0KLQotICAgIHNjaGVkdWxlUmVsZWFzZVVu
dXNlZFRleHR1cmVzKCk7Ci0gICAgc2VsZWN0ZWRFbnRyeS0+bWFya1VzZWQoKTsKLSAgICByZXR1
cm4gc2VsZWN0ZWRFbnRyeS0+bV90ZXh0dXJlOwotfQotCiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1
cmU+IFRleHR1cmVNYXBwZXI6OmFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29uc3QgSW50U2l6ZSYg
c2l6ZSwgY29uc3QgQml0bWFwVGV4dHVyZTo6RmxhZ3MgZmxhZ3MpCiB7Ci0gICAgUmVmUHRyPEJp
dG1hcFRleHR1cmU+IHNlbGVjdGVkVGV4dHVyZSA9IG1fdGV4dHVyZVBvb2wtPmFjcXVpcmVUZXh0
dXJlKHNpemUsIHRoaXMpOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBzZWxlY3RlZFRleHR1
cmUgPSBtX3RleHR1cmVQb29sLT5hY3F1aXJlVGV4dHVyZShzaXplKTsKICAgICBzZWxlY3RlZFRl
eHR1cmUtPnJlc2V0KHNpemUsIGZsYWdzKTsKICAgICByZXR1cm4gc2VsZWN0ZWRUZXh0dXJlLnJl
bGVhc2UoKTsKIH0KQEAgLTEzNyw3ICs0OSw2IEBAIFRleHR1cmVNYXBwZXI6OlRleHR1cmVNYXBw
ZXIoQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKQogICAgIDogbV9jb250ZXh0KDAp
CiAgICAgLCBtX2ludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25EZWZhdWx0KQogICAg
ICwgbV90ZXh0RHJhd2luZ01vZGUoVGV4dE1vZGVGaWxsKQotICAgICwgbV90ZXh0dXJlUG9vbChz
dGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFRleHR1cmVQb29sPigpKQogICAgICwgbV9hY2NlbGVyYXRp
b25Nb2RlKGFjY2VsZXJhdGlvbk1vZGUpCiAgICAgLCBtX2lzTWFza01vZGUoZmFsc2UpCiAgICAg
LCBtX3dyYXBNb2RlKFN0cmV0Y2hXcmFwKQpAQCAtMTQ2LDIzICs1Nyw2IEBAIFRleHR1cmVNYXBw
ZXI6OlRleHR1cmVNYXBwZXIoQWNjZWxlcmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKQogVGV4
dHVyZU1hcHBlcjo6flRleHR1cmVNYXBwZXIoKQogeyB9CiAKLXZvaWQgQml0bWFwVGV4dHVyZTo6
dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgR3JhcGhpY3NMYXll
ciogc291cmNlTGF5ZXIsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFBvaW50
JiBvZmZzZXQsIFVwZGF0ZUNvbnRlbnRzRmxhZyB1cGRhdGVDb250ZW50c0ZsYWcpCi17Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUodGFyZ2V0UmVjdC5zaXplKCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9
IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7Ci0gICAgY29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSh0ZXh0dXJlTWFwcGVyLT5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkpOwot
ICAgIGNvbnRleHQtPnNldFRleHREcmF3aW5nTW9kZSh0ZXh0dXJlTWFwcGVyLT50ZXh0RHJhd2lu
Z01vZGUoKSk7Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgc291
cmNlUmVjdC5zZXRMb2NhdGlvbihvZmZzZXQpOwotICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtb2Zm
c2V0LngoKSwgLW9mZnNldC55KCkpOwotICAgIHNvdXJjZUxheWVyLT5wYWludEdyYXBoaWNzTGF5
ZXJDb250ZW50cygqY29udGV4dCwgc291cmNlUmVjdCk7Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlID0gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAg
ICB1cGRhdGVDb250ZW50cyhpbWFnZS5nZXQoKSwgdGFyZ2V0UmVjdCwgSW50UG9pbnQoKSwgdXBk
YXRlQ29udGVudHNGbGFnKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXIuaAppbmRleCA5MGQ0ZTY0OWVkNTM5ODMwNzU2NGUwNzllMTAwNTY3NGNiNGVhMTRlLi45N2Uy
M2U1NzcwNjViNWMyMmVkYTE4MzI3MjQ2OGQ3NmRlZjRlMmFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKQEAg
LTIyLDEwICsyMiwxMSBAQAogCiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogCi0jaWYgKFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSkgJiYgVVNFKE9QRU5HTF9FU18yKQorI2lmIFVTRShP
UEVOR0xfRVNfMikKICNkZWZpbmUgVEVYTUFQX09QRU5HTF9FU18yCiAjZW5kaWYKIAorI2luY2x1
ZGUgIkJpdG1hcFRleHR1cmUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgpAQCAtNDMsNjQgKzQ0LDggQEAg
Y2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFRleHR1cmVNYXBwZXI7CiBjbGFzcyBGaWx0ZXJP
cGVyYXRpb25zOwogCi0vLyBBIDJEIHRleHR1cmUgdGhhdCBjYW4gYmUgdGhlIHRhcmdldCBvZiBz
b2Z0d2FyZSBvciBHTCByZW5kZXJpbmcuCi1jbGFzcyBCaXRtYXBUZXh0dXJlIDogcHVibGljIFJl
ZkNvdW50ZWQ8Qml0bWFwVGV4dHVyZT4gewotcHVibGljOgotICAgIGVudW0gRmxhZyB7Ci0gICAg
ICAgIE5vRmxhZyA9IDAsCi0gICAgICAgIFN1cHBvcnRzQWxwaGEgPSAweDAxCi0gICAgfTsKLQot
ICAgIGVudW0gVXBkYXRlQ29udGVudHNGbGFnIHsKLSAgICAgICAgVXBkYXRlQ2FuTW9kaWZ5T3Jp
Z2luYWxJbWFnZURhdGEsCi0gICAgICAgIFVwZGF0ZUNhbm5vdE1vZGlmeU9yaWdpbmFsSW1hZ2VE
YXRhCi0gICAgfTsKLQotICAgIHR5cGVkZWYgdW5zaWduZWQgRmxhZ3M7Ci0KLSAgICBCaXRtYXBU
ZXh0dXJlKCkKLSAgICAgICAgOiBtX2ZsYWdzKDApCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1
YWwgfkJpdG1hcFRleHR1cmUoKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNCYWNrZWRCeU9wZW5H
TCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoSW1hZ2UqLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmIG9mZnNldCwgVXBkYXRlQ29udGVudHNGbGFnKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIqLCBHcmFw
aGljc0xheWVyKiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0
LCBVcGRhdGVDb250ZW50c0ZsYWcpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhj
b25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0
LCBpbnQgYnl0ZXNQZXJMaW5lLCBVcGRhdGVDb250ZW50c0ZsYWcpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNWYWxpZCgpIGNvbnN0ID0gMDsKLSAgICBpbmxpbmUgRmxhZ3MgZmxhZ3MoKSBjb25z
dCB7IHJldHVybiBtX2ZsYWdzOyB9Ci0KLSAgICB2aXJ0dWFsIGludCBicHAoKSBjb25zdCB7IHJl
dHVybiAzMjsgfQotICAgIHZpcnR1YWwgYm9vbCBjYW5SZXVzZVdpdGgoY29uc3QgSW50U2l6ZSYg
LyogY29udGVudHNTaXplICovLCBGbGFncyA9IDApIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9p
ZCByZXNldChjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncyA9IDApCi0gICAgewotICAg
ICAgICBtX2ZsYWdzID0gZmxhZ3M7Ci0gICAgICAgIG1fY29udGVudFNpemUgPSBzaXplOwotICAg
ICAgICBkaWRSZXNldCgpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXQoKSB7IH0K
LQotICAgIGlubGluZSBJbnRTaXplIGNvbnRlbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50U2l6ZTsgfQotICAgIGlubGluZSBpbnQgbnVtYmVyT2ZCeXRlcygpIGNvbnN0IHsgcmV0dXJu
IHNpemUoKS53aWR0aCgpICogc2l6ZSgpLmhlaWdodCgpICogYnBwKCkgPj4gMzsgfQotICAgIGlu
bGluZSBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gIShtX2ZsYWdzICYgU3VwcG9ydHNB
bHBoYSk7IH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBseUZp
bHRlcnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSB7IHJldHVybiB0
aGlzOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBJbnRTaXplIG1fY29udGVudFNpemU7Ci0KLXByaXZh
dGU6Ci0gICAgRmxhZ3MgbV9mbGFnczsKLX07Ci0KLS8vIEEgImNvbnRleHQiIGNsYXNzIHVzZWQg
dG8gZW5jYXBzdWxhdGUgYWNjZWxlcmF0ZWQgdGV4dHVyZSBtYXBwaW5nIGZ1bmN0aW9uczogaS5l
LiBkcmF3aW5nIGEgdGV4dHVyZQotLy8gb250byB0aGUgc2NyZWVuIG9yIGludG8gYW5vdGhlciB0
ZXh0dXJlIHdpdGggYSBzcGVjaWZpZWQgdHJhbnNmb3JtLCBvcGFjaXR5IGFuZCBtYXNrLgogY2xh
c3MgVGV4dHVyZU1hcHBlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIEJpdG1hcFRleHR1cmU7CiBwdWJsaWM6CiAgICAgZW51bSBBY2NlbGVyYXRpb25N
b2RlIHsgU29mdHdhcmVNb2RlLCBPcGVuR0xNb2RlIH07CiAgICAgZW51bSBQYWludEZsYWcgewpA
QCAtMTY0LDYgKzEwOSw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEdyYXBoaWNzQ29u
dGV4dCogbV9jb250ZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBUZXh0dXJlUG9vbD4g
bV90ZXh0dXJlUG9vbDsKIAogICAgIGJvb2wgaXNJbk1hc2tNb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9pc01hc2tNb2RlOyB9CiAgICAgV3JhcE1vZGUgd3JhcE1vZGUoKSBjb25zdCB7IHJldHVybiBt
X3dyYXBNb2RlOyB9CkBAIC0xODAsNyArMTI2LDYgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IG1faW50ZXJwb2xhdGlvblF1YWxpdHk7CiAgICAgVGV4dERyYXdp
bmdNb2RlRmxhZ3MgbV90ZXh0RHJhd2luZ01vZGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1h
cFRleHR1cmVQb29sPiBtX3RleHR1cmVQb29sOwogICAgIEFjY2VsZXJhdGlvbk1vZGUgbV9hY2Nl
bGVyYXRpb25Nb2RlOwogICAgIGJvb2wgbV9pc01hc2tNb2RlOwogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fcGF0dGVyblRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggMTE1
NGY0ZWUxZDhjMzIzNjMyMDFiODJlZWFiMjQ4NjE2ZTk0MmE4Yi4uNmFlZTIzZmRiOTBkMmJmOTIx
MGY1ODFkODA4ZmQzNjgwNWJlMjI0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTIyLDYg
KzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wu
aCIKIAorI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgorI2luY2x1ZGUgIkJpdG1hcFRleHR1
cmVQb29sLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiRmlsdGVyT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMjM4LDI1ICsyNDAs
MTggQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0xEYXRhOjppbml0aWFsaXplU3RlbmNpbCgpCiAgICAg
ZGlkTW9kaWZ5U3RlbmNpbCA9IHRydWU7CiB9CiAKLUJpdG1hcFRleHR1cmVHTCogdG9CaXRtYXBU
ZXh0dXJlR0woQml0bWFwVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUgfHwg
IXRleHR1cmUtPmlzQmFja2VkQnlPcGVuR0woKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMKj4odGV4dHVyZSk7Ci19Ci0KIFRleHR1
cmVNYXBwZXJHTDo6VGV4dHVyZU1hcHBlckdMKCkKICAgICA6IFRleHR1cmVNYXBwZXIoT3BlbkdM
TW9kZSkKICAgICAsIG1fZW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKGZhbHNlKQogewog
ICAgIG1fY29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZvckN1cnJlbnRHTENv
bnRleHQoKTsKICAgICBtX2RhdGEgPSBuZXcgVGV4dHVyZU1hcHBlckdMRGF0YShtX2NvbnRleHQz
RC5nZXQoKSk7CisgICAgbV90ZXh0dXJlUG9vbCA9IHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwVGV4
dHVyZVBvb2w+KG1fY29udGV4dDNEKTsKIH0KIAogVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2sm
IFRleHR1cmVNYXBwZXJHTDo6Y2xpcFN0YWNrKCkKIHsKLSAgICByZXR1cm4gZGF0YSgpLmN1cnJl
bnRTdXJmYWNlID8gdG9CaXRtYXBUZXh0dXJlR0woZGF0YSgpLmN1cnJlbnRTdXJmYWNlLmdldCgp
KS0+bV9jbGlwU3RhY2sgOiBtX2NsaXBTdGFjazsKKyAgICByZXR1cm4gZGF0YSgpLmN1cnJlbnRT
dXJmYWNlID8gdG9CaXRtYXBUZXh0dXJlR0woZGF0YSgpLmN1cnJlbnRTdXJmYWNlLmdldCgpKS0+
Y2xpcFN0YWNrKCkgOiBtX2NsaXBTdGFjazsKIH0KIAogdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJl
Z2luUGFpbnRpbmcoUGFpbnRGbGFncyBmbGFncykKQEAgLTM5MSwyNyArMzg2LDYgQEAgc3RhdGlj
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnNGb3JGaWx0ZXJUeXBl
KEZpbHRlck9wZXJhdGlvbjoKICAgICB9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBnZXRQYXNzZXNS
ZXF1aXJlZEZvckZpbHRlcihGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSkKLXsK
LSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxF
OgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0g
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QlJJR0hUTkVTUzoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIHJldHVybiAxOwotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9Q
X1NIQURPVzoKLSAgICAgICAgLy8gV2UgdXNlIHR3by1wYXNzZXMgKHZlcnRpY2FsK2hvcml6b250
YWwpIGZvciBibHVyIGFuZCBkcm9wLXNoYWRvdy4KLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiAvLyBDcmVhdGUgYSBub3JtYWwg
ZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVlcyBiZXR3ZWVuIC0yIGFuZCAyLgogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIEdhdXNzaWFuS2VybmVsSGFsZldpZHRoID0gMTE7CiBzdGF0aWMgY29uc3QgZmxv
YXQgR2F1c3NpYW5LZXJuZWxTdGVwID0gMC4yOwpAQCAtNjgxLDE2NyArNjU1LDYgQEAgdm9pZCBU
ZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbSogcHIKICAgICBtX2NvbnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CiB9CiAKLUJpdG1hcFRleHR1cmVH
TDo6Qml0bWFwVGV4dHVyZUdMKFRleHR1cmVNYXBwZXJHTCogdGV4dHVyZU1hcHBlcikKLSAgICA6
IG1faWQoMCkKLSAgICAsIG1fZmJvKDApCi0gICAgLCBtX3JibygwKQotICAgICwgbV9kZXB0aEJ1
ZmZlck9iamVjdCgwKQotICAgICwgbV9zaG91bGRDbGVhcih0cnVlKQotICAgICwgbV9jb250ZXh0
M0QodGV4dHVyZU1hcHBlci0+Z3JhcGhpY3NDb250ZXh0M0QoKSkKLXsKLX0KLQotYm9vbCBCaXRt
YXBUZXh0dXJlR0w6OmNhblJldXNlV2l0aChjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIEZs
YWdzKQotewotICAgIHJldHVybiBjb250ZW50c1NpemUgPT0gbV90ZXh0dXJlU2l6ZTsKLX0KLQot
I2lmIE9TKERBUldJTikKLSNkZWZpbmUgREVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZ
UEUgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWCi0jZWxzZQotI2RlZmluZSBERUZBVUxUX1RF
WFRVUkVfUElYRUxfVFJBTlNGRVJfVFlQRSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHN3aXp6bGVCR1JBVG9SR0JBKHVpbnQzMl90KiBkYXRh
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RyaWRlID0gMCkKLXsKLSAgICBzdHJpZGUgPSBz
dHJpZGUgPyBzdHJpZGUgOiByZWN0LndpZHRoKCk7Ci0gICAgZm9yIChpbnQgeSA9IHJlY3QueSgp
OyB5IDwgcmVjdC5tYXhZKCk7ICsreSkgewotICAgICAgICB1aW50MzJfdCogcCA9IGRhdGEgKyB5
ICogc3RyaWRlOwotICAgICAgICBmb3IgKGludCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgo
KTsgKyt4KQotICAgICAgICAgICAgcFt4XSA9ICgocFt4XSA8PCAxNikgJiAweGZmMDAwMCkgfCAo
KHBbeF0gPj4gMTYpICYgMHhmZikgfCAocFt4XSAmIDB4ZmYwMGZmMDApOwotICAgIH0KLX0KLQot
Ly8gSWYgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IGlzIHN1cHBvcnRlZCBpbiB0aGUg
T3BlbkdMRVMKLS8vIGludGVybmFsIGFuZCBleHRlcm5hbCBmb3JtYXRzIG5lZWQgdG8gYmUgQkdS
QQotc3RhdGljIGJvb2wgZHJpdmVyU3VwcG9ydHNFeHRlcm5hbFRleHR1cmVCR1JBKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQotewotICAgIGlmIChjb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50
KCkpIHsKLSAgICAgICAgc3RhdGljIGJvb2wgc3VwcG9ydHNFeHRlcm5hbFRleHR1cmVCR1JBID0g
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZm9ybWF0
X0JHUkE4ODg4Iik7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0c0V4dGVybmFsVGV4dHVyZUJHUkE7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIGRyaXZlclN1cHBv
cnRzU3ViSW1hZ2UoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgaWYgKGNvbnRl
eHQtPmlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1N1
YkltYWdlID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3VucGFj
a19zdWJpbWFnZSIpOwotICAgICAgICByZXR1cm4gc3VwcG9ydHNTdWJJbWFnZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmRpZFJlc2V0KCkK
LXsKLSAgICBpZiAoIW1faWQpCi0gICAgICAgIG1faWQgPSBtX2NvbnRleHQzRC0+Y3JlYXRlVGV4
dHVyZSgpOwotCi0gICAgbV9zaG91bGRDbGVhciA9IHRydWU7Ci0gICAgaWYgKG1fdGV4dHVyZVNp
emUgPT0gY29udGVudFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0KLSAgICBtX3RleHR1cmVT
aXplID0gY29udGVudFNpemUoKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faWQpOwotICAgIG1fY29udGV4dDNELT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBtX2Nv
bnRleHQzRC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUik7Ci0gICAgbV9jb250ZXh0M0QtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4dDNELT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLQotICAgIFBsYXRm
b3JtM0RPYmplY3QgaW50ZXJuYWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKLSAg
ICBQbGF0Zm9ybTNET2JqZWN0IGV4dGVybmFsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJH
UkE7Ci0gICAgaWYgKG1fY29udGV4dDNELT5pc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAg
aWYgKGRyaXZlclN1cHBvcnRzRXh0ZXJuYWxUZXh0dXJlQkdSQShtX2NvbnRleHQzRC5nZXQoKSkp
Ci0gICAgICAgICAgICBpbnRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpCR1JBOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBleHRlcm5hbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBOwotICAgIH0KLQotICAgIG1fY29udGV4dDNELT50ZXhJbWFnZTJERGlyZWN0KEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbEZvcm1hdCwgbV90ZXh0dXJl
U2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpLCAwLCBleHRlcm5hbEZvcm1hdCwg
REVGQVVMVF9URVhUVVJFX1BJWEVMX1RSQU5TRkVSX1RZUEUsIDApOwotfQotCi12b2lkIEJpdG1h
cFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHNOb1N3aXp6bGUoY29uc3Qgdm9pZCogc3JjRGF0YSwg
Y29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwg
aW50IGJ5dGVzUGVyTGluZSwgdW5zaWduZWQgYnl0ZXNQZXJQaXhlbCwgUGxhdGZvcm0zRE9iamVj
dCBnbEZvcm1hdCkKLXsKLSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faWQpOwotICAgIGlmIChkcml2ZXJTdXBwb3J0c1N1YkltYWdl
KG1fY29udGV4dDNELmdldCgpKSkgeyAvLyBGb3IgRVMgZHJpdmVycyB0aGF0IGRvbid0IHN1cHBv
cnQgc3ViLWltYWdlcy4KLSAgICAgICAgLy8gVXNlIHRoZSBPcGVuR0wgc3ViLWltYWdlIGV4dGVu
c2lvbiwgbm93IHRoYXQgd2Uga25vdyBpdCdzIGF2YWlsYWJsZS4KLSAgICAgICAgbV9jb250ZXh0
M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19ST1dfTEVOR1RILCBieXRlc1BlckxpbmUgLyBieXRl
c1BlclBpeGVsKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdMX1VOUEFDS19T
S0lQX1JPV1MsIHNvdXJjZU9mZnNldC55KCkpOwotICAgICAgICBtX2NvbnRleHQzRC0+cGl4ZWxT
dG9yZWkoR0xfVU5QQUNLX1NLSVBfUElYRUxTLCBzb3VyY2VPZmZzZXQueCgpKTsKLSAgICB9Ci0K
LSAgICBtX2NvbnRleHQzRC0+dGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgMCwgdGFyZ2V0UmVjdC54KCksIHRhcmdldFJlY3QueSgpLCB0YXJnZXRSZWN0LndpZHRo
KCksIHRhcmdldFJlY3QuaGVpZ2h0KCksIGdsRm9ybWF0LCBERUZBVUxUX1RFWFRVUkVfUElYRUxf
VFJBTlNGRVJfVFlQRSwgc3JjRGF0YSk7Ci0KLSAgICBpZiAoZHJpdmVyU3VwcG9ydHNTdWJJbWFn
ZShtX2NvbnRleHQzRC5nZXQoKSkpIHsgLy8gRm9yIEVTIGRyaXZlcnMgdGhhdCBkb24ndCBzdXBw
b3J0IHN1Yi1pbWFnZXMuCi0gICAgICAgIG1fY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9VTlBB
Q0tfUk9XX0xFTkdUSCwgMCk7Ci0gICAgICAgIG1fY29udGV4dDNELT5waXhlbFN0b3JlaShHTF9V
TlBBQ0tfU0tJUF9ST1dTLCAwKTsKLSAgICAgICAgbV9jb250ZXh0M0QtPnBpeGVsU3RvcmVpKEdM
X1VOUEFDS19TS0lQX1BJWEVMUywgMCk7Ci0gICAgfQotfQotCi12b2lkIEJpdG1hcFRleHR1cmVH
TDo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogc3JjRGF0YSwgY29uc3QgSW50UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSwg
VXBkYXRlQ29udGVudHNGbGFnIHVwZGF0ZUNvbnRlbnRzRmxhZykKLXsKLSAgICBQbGF0Zm9ybTNE
T2JqZWN0IGdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgbV9jb250ZXh0
M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lkKTsKLQot
ICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgIGNoYXIqIGRhdGEgPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9jYXN0PHZvaWQqPihzcmNEYXRhKSk7Ci0gICAg
VmVjdG9yPGNoYXI+IHRlbXBvcmFyeURhdGE7Ci0gICAgSW50UG9pbnQgYWRqdXN0ZWRTb3VyY2VP
ZmZzZXQgPSBzb3VyY2VPZmZzZXQ7Ci0KLSAgICAvLyBUZXh0dXJlIHVwbG9hZCByZXF1aXJlcyBz
dWJpbWFnZSBidWZmZXIgaWYgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBzdWJpbWFnZSBhbmQgd2Ug
ZG9uJ3QgaGF2ZSBmdWxsIGltYWdlIHVwbG9hZC4KLSAgICBib29sIHJlcXVpcmVTdWJJbWFnZUJ1
ZmZlciA9ICFkcml2ZXJTdXBwb3J0c1N1YkltYWdlKG1fY29udGV4dDNELmdldCgpKQotICAgICAg
ICAmJiAhKGJ5dGVzUGVyTGluZSA9PSBzdGF0aWNfY2FzdDxpbnQ+KHRhcmdldFJlY3Qud2lkdGgo
KSAqIGJ5dGVzUGVyUGl4ZWwpICYmIGFkanVzdGVkU291cmNlT2Zmc2V0ID09IEludFBvaW50Ojp6
ZXJvKCkpOwotCi0gICAgLy8gcHJlcGFyZSB0ZW1wb3JhcnlEYXRhIGlmIG5lY2Vzc2FyeQotICAg
IGlmICgoIWRyaXZlclN1cHBvcnRzRXh0ZXJuYWxUZXh0dXJlQkdSQShtX2NvbnRleHQzRC5nZXQo
KSkgJiYgdXBkYXRlQ29udGVudHNGbGFnID09IFVwZGF0ZUNhbm5vdE1vZGlmeU9yaWdpbmFsSW1h
Z2VEYXRhKSB8fCByZXF1aXJlU3ViSW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgdGVtcG9yYXJ5RGF0
YS5yZXNpemUodGFyZ2V0UmVjdC53aWR0aCgpICogdGFyZ2V0UmVjdC5oZWlnaHQoKSAqIGJ5dGVz
UGVyUGl4ZWwpOwotICAgICAgICBkYXRhID0gdGVtcG9yYXJ5RGF0YS5kYXRhKCk7Ci0gICAgICAg
IGNvbnN0IGNoYXIqIGJpdHMgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3JjRGF0YSk7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIHNyYyA9IGJpdHMgKyBzb3VyY2VPZmZzZXQueSgpICogYnl0ZXNQ
ZXJMaW5lICsgc291cmNlT2Zmc2V0LngoKSAqIGJ5dGVzUGVyUGl4ZWw7Ci0gICAgICAgIGNoYXIq
IGRzdCA9IGRhdGE7Ci0gICAgICAgIGNvbnN0IGludCB0YXJnZXRCeXRlc1BlckxpbmUgPSB0YXJn
ZXRSZWN0LndpZHRoKCkgKiBieXRlc1BlclBpeGVsOwotICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IHRhcmdldFJlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICAgICAgbWVtY3B5KGRzdCwg
c3JjLCB0YXJnZXRCeXRlc1BlckxpbmUpOwotICAgICAgICAgICAgc3JjICs9IGJ5dGVzUGVyTGlu
ZTsKLSAgICAgICAgICAgIGRzdCArPSB0YXJnZXRCeXRlc1BlckxpbmU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBieXRlc1BlckxpbmUgPSB0YXJnZXRCeXRlc1BlckxpbmU7Ci0gICAgICAgIGFkanVz
dGVkU291cmNlT2Zmc2V0ID0gSW50UG9pbnQoMCwgMCk7Ci0gICAgfQotCi0gICAgaWYgKGRyaXZl
clN1cHBvcnRzRXh0ZXJuYWxUZXh0dXJlQkdSQShtX2NvbnRleHQzRC5nZXQoKSkpCi0gICAgICAg
IGdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJHUkE7Ci0gICAgZWxzZQotICAgICAgICBz
d2l6emxlQkdSQVRvUkdCQShyZWludGVycHJldF9jYXN0X3B0cjx1aW50MzJfdCo+KGRhdGEpLCBJ
bnRSZWN0KGFkanVzdGVkU291cmNlT2Zmc2V0LCB0YXJnZXRSZWN0LnNpemUoKSksIGJ5dGVzUGVy
TGluZSAvIGJ5dGVzUGVyUGl4ZWwpOwotCi0gICAgdXBkYXRlQ29udGVudHNOb1N3aXp6bGUoZGF0
YSwgdGFyZ2V0UmVjdCwgYWRqdXN0ZWRTb3VyY2VPZmZzZXQsIGJ5dGVzUGVyTGluZSwgYnl0ZXNQ
ZXJQaXhlbCwgZ2xGb3JtYXQpOwotfQotCi12b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29u
dGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQ
b2ludCYgb2Zmc2V0LCBVcGRhdGVDb250ZW50c0ZsYWcgdXBkYXRlQ29udGVudHNGbGFnKQotewot
ICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBOYXRpdmVJbWFnZVB0ciBmcmFt
ZUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZUltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgYnl0ZXNQZXJMaW5lOwotICAg
IGNvbnN0IGNoYXIqIGltYWdlRGF0YTsKLQotI2lmIFVTRShDQUlSTykKLSAgICBjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UgPSBmcmFtZUltYWdlLmdldCgpOwotICAgIGltYWdlRGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3Vy
ZmFjZSkpOwotICAgIGJ5dGVzUGVyTGluZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlk
ZShzdXJmYWNlKTsKLSNlbmRpZgotCi0gICAgdXBkYXRlQ29udGVudHMoaW1hZ2VEYXRhLCB0YXJn
ZXRSZWN0LCBvZmZzZXQsIGJ5dGVzUGVyTGluZSwgdXBkYXRlQ29udGVudHNGbGFnKTsKLX0KLQog
dm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBz
YW1wbGVyLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVy
T3BlcmF0aW9uJiBmaWx0ZXIsIGludCBwYXNzKQogewogICAgIC8vIEZvciBzdGFuZGFyZCBmaWx0
ZXJzLCB3ZSBhbHdheXMgZHJhdyB0aGUgd2hvbGUgdGV4dHVyZSB3aXRob3V0IHRyYW5zZm9ybWF0
aW9ucy4KQEAgLTg1NCw1MCArNjY3LDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0
ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBCaXRtYXBUZXgKICAgICBk
cmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Y29u
c3QgQml0bWFwVGV4dHVyZUdMJj4oc2FtcGxlcikuaWQoKSwgMCwgSW50U2l6ZSgxLCAxKSwgdGFy
Z2V0UmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgMSk7CiB9CiAKLVBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciog
dGV4dHVyZU1hcHBlciwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBp
ZiAoZmlsdGVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgVGV4dHVy
ZU1hcHBlckdMKiB0ZXhtYXBHTCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1
cmVNYXBwZXIpOwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBwcmV2aW91c1N1cmZhY2UgPSB0
ZXhtYXBHTC0+ZGF0YSgpLmN1cnJlbnRTdXJmYWNlOwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiByZXN1bHRTdXJmYWNlID0gdGhpczsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gaW50ZXJt
ZWRpYXRlU3VyZmFjZTsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gc3BhcmVTdXJmYWNlOwot
Ci0gICAgbV9maWx0ZXJJbmZvID0gRmlsdGVySW5mbygpOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+IGZpbHRlciA9IGZpbHRlcnMub3BlcmF0aW9ucygpW2ldOwotICAgICAgICBBU1NFUlQo
ZmlsdGVyKTsKLQotICAgICAgICBpbnQgbnVtUGFzc2VzID0gZ2V0UGFzc2VzUmVxdWlyZWRGb3JG
aWx0ZXIoZmlsdGVyLT50eXBlKCkpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG51bVBh
c3NlczsgKytqKSB7Ci0gICAgICAgICAgICBib29sIGxhc3QgPSAoaSA9PSBmaWx0ZXJzLnNpemUo
KSAtIDEpICYmIChqID09IG51bVBhc3NlcyAtIDEpOwotICAgICAgICAgICAgaWYgKCFsYXN0KSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpbnRlcm1lZGlhdGVTdXJmYWNlKQotICAgICAgICAgICAg
ICAgICAgICBpbnRlcm1lZGlhdGVTdXJmYWNlID0gdGV4bWFwR0wtPmFjcXVpcmVUZXh0dXJlRnJv
bVBvb2woY29udGVudFNpemUoKSk7Ci0gICAgICAgICAgICAgICAgdGV4bWFwR0wtPmJpbmRTdXJm
YWNlKGludGVybWVkaWF0ZVN1cmZhY2UuZ2V0KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAobGFzdCkgewotICAgICAgICAgICAgICAgIHRvQml0bWFwVGV4dHVyZUdMKHJlc3Vs
dFN1cmZhY2UuZ2V0KCkpLT5tX2ZpbHRlckluZm8gPSBCaXRtYXBUZXh0dXJlR0w6OkZpbHRlcklu
Zm8oZmlsdGVyLCBqLCBzcGFyZVN1cmZhY2UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZXhtYXBHTC0+ZHJhd0ZpbHRlcmVkKCpyZXN1bHRT
dXJmYWNlLmdldCgpLCBzcGFyZVN1cmZhY2UuZ2V0KCksICpmaWx0ZXIsIGopOwotICAgICAgICAg
ICAgaWYgKCFqICYmIGZpbHRlci0+dHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1cpIHsKLSAgICAgICAgICAgICAgICBzcGFyZVN1cmZhY2UgPSByZXN1bHRTdXJmYWNlOwotICAg
ICAgICAgICAgICAgIHJlc3VsdFN1cmZhY2UuY2xlYXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHN0ZDo6c3dhcChyZXN1bHRTdXJmYWNlLCBpbnRlcm1lZGlhdGVTdXJmYWNlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHRleG1hcEdMLT5iaW5kU3VyZmFjZShwcmV2aW91c1N1cmZh
Y2UuZ2V0KCkpOwotICAgIHJldHVybiByZXN1bHRTdXJmYWNlOwotfQotCiBzdGF0aWMgaW5saW5l
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBtaXJyb3JlZCkKIHsKICAgICBjb25zdCBmbG9hdCBuZWFyVmFsdWUgPSA5
OTk5OTk5OwpAQCAtOTA5LDk1ICs2NzgsNiBAQCBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGNyZWF0ZVByb2plY3Rpb25NYXRyaXgoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgbWlycm9yZWQgPyAtMSA6IDEsIC0oZmFy
VmFsdWUgKyBuZWFyVmFsdWUpIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSwgMSk7CiB9CiAKLXZv
aWQgQml0bWFwVGV4dHVyZUdMOjppbml0aWFsaXplU3RlbmNpbCgpCi17Ci0gICAgaWYgKG1fcmJv
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3JibyA9IG1fY29udGV4dDNELT5jcmVhdGVSZW5k
ZXJidWZmZXIoKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3Jibyk7Ci0jaWZkZWYgVEVYTUFQX09QRU5HTF9FU18y
Ci0gICAgbV9jb250ZXh0M0QtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4LCBtX3RleHR1
cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwotI2Vsc2UKLSAgICBtX2Nv
bnRleHQzRC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgbV90ZXh0dXJlU2l6ZS53aWR0
aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKLSNlbmRpZgotICAgIG1fY29udGV4dDNELT5i
aW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAg
IG1fY29udGV4dDNELT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fcmJvKTsKLSAgICBtX2NvbnRleHQzRC0+Y2xl
YXJTdGVuY2lsKDApOwotICAgIG1fY29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CVUZGRVJfQklUKTsKLX0KLQotdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmluaXRpYWxp
emVEZXB0aEJ1ZmZlcigpCi17Ci0gICAgaWYgKG1fZGVwdGhCdWZmZXJPYmplY3QpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fZGVwdGhCdWZmZXJPYmplY3QgPSBtX2NvbnRleHQzRC0+Y3JlYXRl
UmVuZGVyYnVmZmVyKCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlck9iamVjdCk7Ci0gICAgbV9j
b250ZXh0M0QtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2LCBtX3RleHR1cmVTaXpl
LndpZHRoKCksIG1fdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4dDNELT5iaW5k
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwotICAgIG1f
Y29udGV4dDNELT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyT2JqZWN0KTsKLX0KLQotdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OmNsZWFySWZOZWVkZWQoKQotewotICAgIGlmICghbV9zaG91bGRDbGVh
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGlwU3RhY2sucmVzZXQoSW50UmVjdChJbnRQ
b2ludDo6emVybygpLCBtX3RleHR1cmVTaXplKSwgVGV4dHVyZU1hcHBlckdMOjpDbGlwU3RhY2s6
OkRlZmF1bHRZQXhpcyk7Ci0gICAgbV9jbGlwU3RhY2suYXBwbHlJZk5lZWRlZChtX2NvbnRleHQz
RC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0M0QtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAg
bV9jb250ZXh0M0QtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsK
LSAgICBtX3Nob3VsZENsZWFyID0gZmFsc2U7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUdMOjpj
cmVhdGVGYm9JZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fZmJvKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2ZibyA9IG1fY29udGV4dDNELT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIG1fY29u
dGV4dDNELT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7Ci0gICAgbV9jb250ZXh0M0QtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQw
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaWQoKSwgMCk7Ci0gICAgbV9zaG91bGRD
bGVhciA9IHRydWU7Ci19Ci0KLXZvaWQgQml0bWFwVGV4dHVyZUdMOjpiaW5kKFRleHR1cmVNYXBw
ZXJHTCogdGV4dHVyZU1hcHBlcikKLXsKLSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIGNyZWF0ZUZib0lmTmVlZGVkKCk7
Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKLSAgICBtX2NvbnRleHQzRC0+dmlld3BvcnQoMCwgMCwgbV90ZXh0
dXJlU2l6ZS53aWR0aCgpLCBtX3RleHR1cmVTaXplLmhlaWdodCgpKTsKLSAgICBjbGVhcklmTmVl
ZGVkKCk7Ci0gICAgdGV4dHVyZU1hcHBlci0+ZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVh
dGVQcm9qZWN0aW9uTWF0cml4KG1fdGV4dHVyZVNpemUsIHRydWUgLyogbWlycm9yZWQgKi8pOwot
ICAgIG1fY2xpcFN0YWNrLmFwcGx5KG1fY29udGV4dDNELmdldCgpKTsKLX0KLQotQml0bWFwVGV4
dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKCkKLXsKLSAgICBpZiAobV9pZCkKLSAgICAgICAgbV9j
b250ZXh0M0QtPmRlbGV0ZVRleHR1cmUobV9pZCk7Ci0KLSAgICBpZiAobV9mYm8pCi0gICAgICAg
IG1fY29udGV4dDNELT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7Ci0KLSAgICBpZiAobV9yYm8p
Ci0gICAgICAgIG1fY29udGV4dDNELT5kZWxldGVSZW5kZXJidWZmZXIobV9yYm8pOwotCi0gICAg
aWYgKG1fZGVwdGhCdWZmZXJPYmplY3QpCi0gICAgICAgIG1fY29udGV4dDNELT5kZWxldGVSZW5k
ZXJidWZmZXIobV9kZXB0aEJ1ZmZlck9iamVjdCk7Ci19Ci0KLWJvb2wgQml0bWFwVGV4dHVyZUdM
Ojppc1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pZDsKLX0KLQotSW50U2l6ZSBCaXRt
YXBUZXh0dXJlR0w6OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3RleHR1cmVTaXplOwot
fQotCiBUZXh0dXJlTWFwcGVyR0w6On5UZXh0dXJlTWFwcGVyR0woKQogewogICAgIGRlbGV0ZSBt
X2RhdGE7CkBAIC0xMDIwLDEwICs3MDAsMTYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmJpbmRT
dXJmYWNlKEJpdG1hcFRleHR1cmUgKnN1cmZhY2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihzdXJmYWNlKS0+YmluZCh0aGlzKTsK
KyAgICBzdGF0aWNfY2FzdDxCaXRtYXBUZXh0dXJlR0wqPihzdXJmYWNlKS0+YmluZEFzU3VyZmFj
ZShtX2NvbnRleHQzRC5nZXQoKSk7CisgICAgZGF0YSgpLnByb2plY3Rpb25NYXRyaXggPSBjcmVh
dGVQcm9qZWN0aW9uTWF0cml4KHN1cmZhY2UtPnNpemUoKSwgdHJ1ZSAvKiBtaXJyb3JlZCAqLyk7
CiAgICAgZGF0YSgpLmN1cnJlbnRTdXJmYWNlID0gc3VyZmFjZTsKIH0KIAorQml0bWFwVGV4dHVy
ZSogVGV4dHVyZU1hcHBlckdMOjpjdXJyZW50U3VyZmFjZSgpCit7CisgICAgcmV0dXJuIGRhdGEo
KS5jdXJyZW50U3VyZmFjZS5nZXQoKTsKK30KKwogYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmJlZ2lu
U2Npc3NvckNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0KQogewogICAgIC8vIDNEIHRyYW5zZm9ybXMgYXJl
IGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGluIHNjaXNzb3IgY2xpcHBpbmcKQEAgLTExMDcsNyAr
NzkzLDcgQEAgSW50UmVjdCBUZXh0dXJlTWFwcGVyR0w6OmNsaXBCb3VuZHMoKQogCiBQYXNzUmVm
UHRyPEJpdG1hcFRleHR1cmU+IFRleHR1cmVNYXBwZXJHTDo6Y3JlYXRlVGV4dHVyZSgpCiB7Ci0g
ICAgQml0bWFwVGV4dHVyZUdMKiB0ZXh0dXJlID0gbmV3IEJpdG1hcFRleHR1cmVHTCh0aGlzKTsK
KyAgICBCaXRtYXBUZXh0dXJlR0wqIHRleHR1cmUgPSBuZXcgQml0bWFwVGV4dHVyZUdMKG1fY29u
dGV4dDNEKTsKICAgICByZXR1cm4gYWRvcHRSZWYodGV4dHVyZSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuaAppbmRleCA0MjQwN2ZiNDI4ZmIwNGViZDBiNjIwOGRhZjU2YTczODdhY2NiYjMxLi5iZDli
ZjU1MmYyNjg3NWUxMDJiOTRjOWUxMmIzNjhiZTBlZWVkY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5o
CkBAIC0xLDUgKzEsNiBAQAogLyoKICBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDE1IElnYWxp
YSBTLkwuCiAKICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM4LDQwICszOSw2IEBAIGNsYXNzIEZpbHRlck9wZXJh
dGlvbjsKIC8vIEFuIE9wZW5HTC1FUzIgaW1wbGVtZW50YXRpb24gb2YgVGV4dHVyZU1hcHBlci4K
IGNsYXNzIFRleHR1cmVNYXBwZXJHTCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyIHsKIHB1YmxpYzoK
LSAgICBUZXh0dXJlTWFwcGVyR0woKTsKLSAgICB2aXJ0dWFsIH5UZXh0dXJlTWFwcGVyR0woKTsK
LQotICAgIGVudW0gRmxhZyB7Ci0gICAgICAgIFNob3VsZEJsZW5kID0gMHgwMSwKLSAgICAgICAg
U2hvdWxkRmxpcFRleHR1cmUgPSAweDAyLAotICAgICAgICBTaG91bGRVc2VBUkJUZXh0dXJlUmVj
dCA9IDB4MDQsCi0gICAgICAgIFNob3VsZEFudGlhbGlhcyA9IDB4MDgKLSAgICB9OwotCi0gICAg
dHlwZWRlZiBpbnQgRmxhZ3M7Ci0KLSAgICAvLyBUZXh0dXJlTWFwcGVyIGltcGxlbWVudGF0aW9u
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdCb3JkZXIoY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJX
aWR0aCwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd051bWJlcihpbnQgbnVtYmVyLCBjb25zdCBDb2xv
ciYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFj
aXR5LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBk
cmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXpl
JiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBvcGFjaXR5LCB1bnNpZ25lZCBl
eHBvc2VkRWRnZXMgPSBBbGxFZGdlcyk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdTb2xpZENvbG9y
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgQ29s
b3ImKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBiaW5kU3VyZmFjZShCaXRtYXBUZXh0
dXJlKiBzdXJmYWNlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5DbGlwKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyA9IDApIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBlbmRQYWludGluZygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBl
bmRDbGlwKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIEludFNpemUgbWF4VGV4dHVyZVNpemUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBJbnRTaXplKDIwMDAsIDIwMDApOyB9Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PEJpdG1hcFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKSBvdmVycmlkZTsKLSAgICBpbmxpbmUgR3Jh
cGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0M0QuZ2V0KCk7IH0KLQotICAgIHZvaWQgZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1
cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEJpdG1hcFRleHR1cmUqIGNvbnRlbnRUZXh0dXJlLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb24mLCBpbnQgcGFzcyk7Ci0KLSAgICB2b2lkIHNldEVuYWJsZUVk
Z2VEaXN0YW5jZUFudGlhbGlhc2luZyhib29sIGVuYWJsZWQpIHsgbV9lbmFibGVFZGdlRGlzdGFu
Y2VBbnRpYWxpYXNpbmcgPSBlbmFibGVkOyB9Ci0KLXByaXZhdGU6CiAgICAgc3RydWN0IENsaXBT
dGF0ZSB7CiAgICAgICAgIEludFJlY3Qgc2Npc3NvckJveDsKICAgICAgICAgaW50IHN0ZW5jaWxJ
bmRleDsKQEAgLTExOCw2ICs4NSw0MSBAQCBwcml2YXRlOgogICAgICAgICBZQXhpc01vZGUgeUF4
aXNNb2RlOwogICAgIH07CiAKKyAgICBUZXh0dXJlTWFwcGVyR0woKTsKKyAgICB2aXJ0dWFsIH5U
ZXh0dXJlTWFwcGVyR0woKTsKKworICAgIGVudW0gRmxhZyB7CisgICAgICAgIFNob3VsZEJsZW5k
ID0gMHgwMSwKKyAgICAgICAgU2hvdWxkRmxpcFRleHR1cmUgPSAweDAyLAorICAgICAgICBTaG91
bGRVc2VBUkJUZXh0dXJlUmVjdCA9IDB4MDQsCisgICAgICAgIFNob3VsZEFudGlhbGlhcyA9IDB4
MDgKKyAgICB9OworCisgICAgdHlwZWRlZiBpbnQgRmxhZ3M7CisKKyAgICAvLyBUZXh0dXJlTWFw
cGVyIGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCB2b2lkIGRyYXdCb3JkZXIoY29uc3QgQ29s
b3ImLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd051bWJlcihpbnQg
bnVtYmVyLCBjb25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShjb25z
dCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCBvcGFjaXR5LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZs
YWdzLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbW9kZWxWaWV3TWF0cml4LCBmbG9hdCBv
cGFjaXR5LCB1bnNpZ25lZCBleHBvc2VkRWRnZXMgPSBBbGxFZGdlcyk7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdTb2xpZENvbG9yKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBiaW5k
U3VyZmFjZShCaXRtYXBUZXh0dXJlKiBzdXJmYWNlKSBvdmVycmlkZTsKKyAgICBCaXRtYXBUZXh0
dXJlKiBjdXJyZW50U3VyZmFjZSgpOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNsaXAoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5QYWludGluZyhQYWludEZsYWdzID0gMCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGVuZFBhaW50aW5nKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVu
ZENsaXAoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgSW50U2l6ZSBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEludFNpemUoMjAwMCwgMjAwMCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpIG92ZXJyaWRlOworICAgIGlubGluZSBHcmFw
aGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHQzRC5nZXQoKTsgfQorCisgICAgdm9pZCBkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVy
ZSYgc291cmNlVGV4dHVyZSwgY29uc3QgQml0bWFwVGV4dHVyZSogY29udGVudFRleHR1cmUsIGNv
bnN0IEZpbHRlck9wZXJhdGlvbiYsIGludCBwYXNzKTsKKworICAgIHZvaWQgc2V0RW5hYmxlRWRn
ZURpc3RhbmNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlZCkgeyBtX2VuYWJsZUVkZ2VEaXN0YW5j
ZUFudGlhbGlhc2luZyA9IGVuYWJsZWQ7IH0KKworcHJpdmF0ZToKICAgICB2b2lkIGRyYXdUZXh0
dXJlZFF1YWRXaXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90
IHRleHR1cmUsIEZsYWdzLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSk7CiAg
ICAgdm9pZCBkcmF3KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtb2RlbFZpZXdNYXRyaXgsIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiwgR0MzRGVudW0g
ZHJhd2luZ01vZGUsIEZsYWdzKTsKIApAQCAtMTMyLDY4ICsxMzQsMTAgQEAgcHJpdmF0ZToKICAg
ICBUZXh0dXJlTWFwcGVyR0xEYXRhKiBtX2RhdGE7CiAgICAgQ2xpcFN0YWNrIG1fY2xpcFN0YWNr
OwogICAgIGJvb2wgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmc7Ci0KLSAgICBmcmll
bmQgY2xhc3MgQml0bWFwVGV4dHVyZUdMOwotfTsKLQotY2xhc3MgQml0bWFwVGV4dHVyZUdMIDog
cHVibGljIEJpdG1hcFRleHR1cmUgewotcHVibGljOgotICAgIHZpcnR1YWwgSW50U2l6ZSBzaXpl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgY2FuUmV1c2VXaXRoKGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgRmxhZ3MgPSAw
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzZXQoKTsKLSAgICB2b2lkIGJpbmQoVGV4dHVyZU1h
cHBlckdMKik7Ci0gICAgdm9pZCBpbml0aWFsaXplU3RlbmNpbCgpOwotICAgIHZvaWQgaW5pdGlh
bGl6ZURlcHRoQnVmZmVyKCk7Ci0gICAgfkJpdG1hcFRleHR1cmVHTCgpOwotICAgIHZpcnR1YWwg
dWludDMyX3QgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgdWludDMyX3QgdGV4dHVy
ZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOyB9
Ci0gICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVNpemU7
IH0KLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzKEltYWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFBvaW50JiwgVXBkYXRlQ29udGVudHNGbGFnKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Q29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50UG9p
bnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSwgVXBkYXRlQ29udGVudHNGbGFnKTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNCYWNrZWRCeU9wZW5HTCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBseUZpbHRlcnMo
VGV4dHVyZU1hcHBlciosIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSBvdmVycmlkZTsKLSAgICBz
dHJ1Y3QgRmlsdGVySW5mbyB7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRl
cjsKLSAgICAgICAgdW5zaWduZWQgcGFzczsKLSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+
IGNvbnRlbnRUZXh0dXJlOwotCi0gICAgICAgIEZpbHRlckluZm8oUGFzc1JlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IGYgPSAwLCB1bnNpZ25lZCBwID0gMCwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PiB0ID0gMCkKLSAgICAgICAgICAgIDogZmlsdGVyKGYpCi0gICAgICAgICAgICAsIHBhc3MocCkK
LSAgICAgICAgICAgICwgY29udGVudFRleHR1cmUodCkKLSAgICAgICAgICAgIHsgfQotICAgIH07
Ci0gICAgY29uc3QgRmlsdGVySW5mbyogZmlsdGVySW5mbygpIGNvbnN0IHsgcmV0dXJuICZtX2Zp
bHRlckluZm87IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzTm9Td2l6emxl
KGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3Vy
Y2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUsIHVuc2lnbmVkIGJ5dGVzUGVyUGl4ZWwgPSA0LCBQ
bGF0Zm9ybTNET2JqZWN0IGdsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwotCi0g
ICAgUGxhdGZvcm0zRE9iamVjdCBtX2lkOwotICAgIEludFNpemUgbV90ZXh0dXJlU2l6ZTsKLSAg
ICBJbnRSZWN0IG1fZGlydHlSZWN0OwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87Ci0gICAg
UGxhdGZvcm0zRE9iamVjdCBtX3JibzsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhCdWZm
ZXJPYmplY3Q7Ci0gICAgYm9vbCBtX3Nob3VsZENsZWFyOwotICAgIFRleHR1cmVNYXBwZXJHTDo6
Q2xpcFN0YWNrIG1fY2xpcFN0YWNrOwotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9j
b250ZXh0M0Q7Ci0KLSAgICBleHBsaWNpdCBCaXRtYXBUZXh0dXJlR0woVGV4dHVyZU1hcHBlckdM
Kik7Ci0gICAgQml0bWFwVGV4dHVyZUdMKCk7Ci0KLSAgICB2b2lkIGNsZWFySWZOZWVkZWQoKTsK
LSAgICB2b2lkIGNyZWF0ZUZib0lmTmVlZGVkKCk7Ci0KLSAgICBGaWx0ZXJJbmZvIG1fZmlsdGVy
SW5mbzsKLQotICAgIGZyaWVuZCBjbGFzcyBUZXh0dXJlTWFwcGVyR0w7CiB9OwogCi1CaXRtYXBU
ZXh0dXJlR0wqIHRvQml0bWFwVGV4dHVyZUdMKEJpdG1hcFRleHR1cmUqKTsKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotfQotI2VuZGlmCisjZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSKQog
Ci0jZW5kaWYKKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyR0xfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmNwcAppbmRleCAzYmVlYjlmNjMwNjc4MzMyMzgzOWNkNTVjMmRlM2I0
MjIyYjMyYWM5Li42NjYzMjY5OTA5MDJkZmQwZjA4NDEyMTMzZjI2NjA2NjcxZGJhYjk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcApAQCAtMjAsNiArMjAsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5o
IgogCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZVBvb2wuaCIKICNpbmNsdWRlICJHcmFwaGljc0xh
eWVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIApAQCAtMjgsNDYgKzI5LDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGludCBzX21heGltdW1BbGxvd2Vk
SW1hZ2VCdWZmZXJEaW1lbnNpb24gPSA0MDk2OwogCi12b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1
ZmZlcjo6dXBkYXRlQ29udGVudHMoY29uc3Qgdm9pZCogZGF0YSwgY29uc3QgSW50UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSwg
VXBkYXRlQ29udGVudHNGbGFnKQorVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyOjpUZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXIoKQorICAgIDogVGV4dHVyZU1hcHBlcihTb2Z0d2FyZU1vZGUpCiB7Ci0j
aWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9
IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihkYXRhKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUlS
T19GT1JNQVRfQVJHQjMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0Lndp
ZHRoKCksIHRhcmdldFJlY3QuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5
dGVzUGVyTGluZSkpOwotICAgIG1faW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1cmZhY2UuZ2V0KCksIHRhcmdldFJlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UmVjdChzb3VyY2VPZmZzZXQsIHRhcmdldFJlY3Quc2l6ZSgpKSwgbV9pbWFnZS0+Y29udGV4
dCgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGRhdGEpOwotICAgIFVOVVNFRF9QQVJBTSh0
YXJnZXRSZWN0KTsKLSAgICBVTlVTRURfUEFSQU0oc291cmNlT2Zmc2V0KTsKLSAgICBVTlVTRURf
UEFSQU0oYnl0ZXNQZXJMaW5lKTsKLSNlbmRpZgotfQotCi12b2lkIEJpdG1hcFRleHR1cmVJbWFn
ZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEdyYXBoaWNzTGF5ZXIqIHNv
dXJjZUxheWVyLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgc291
cmNlT2Zmc2V0LCBVcGRhdGVDb250ZW50c0ZsYWcpCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gbV9pbWFnZS0+Y29udGV4dCgpOwotCi0gICAgY29udGV4dC0+Y2xlYXJSZWN0KHRh
cmdldFJlY3QpOwotCi0gICAgSW50UmVjdCBzb3VyY2VSZWN0KHRhcmdldFJlY3QpOwotICAgIHNv
dXJjZVJlY3Quc2V0TG9jYXRpb24oc291cmNlT2Zmc2V0KTsKLSAgICBjb250ZXh0LT5zYXZlKCk7
Ci0gICAgY29udGV4dC0+Y2xpcCh0YXJnZXRSZWN0KTsKLSAgICBjb250ZXh0LT50cmFuc2xhdGUo
dGFyZ2V0UmVjdC54KCkgLSBzb3VyY2VPZmZzZXQueCgpLCB0YXJnZXRSZWN0LnkoKSAtIHNvdXJj
ZU9mZnNldC55KCkpOwotICAgIHNvdXJjZUxheWVyLT5wYWludEdyYXBoaWNzTGF5ZXJDb250ZW50
cygqY29udGV4dCwgc291cmNlUmVjdCk7Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOwotfQotCi12
b2lkIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6ZGlkUmVzZXQoKQotewotICAgIG1faW1hZ2Ug
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnRTaXplKCkpOwotfQotCi12b2lkIEJpdG1hcFRl
eHR1cmVJbWFnZUJ1ZmZlcjo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0LCBVcGRhdGVDb250ZW50c0Zs
YWcpCi17Ci0gICAgbV9pbWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIHRhcmdldFJlY3QsIEludFJlY3Qob2Zmc2V0LCB0YXJnZXRSZWN0LnNpemUo
KSksIENvbXBvc2l0ZUNvcHkpOworICAgIG1fdGV4dHVyZVBvb2wgPSBzdGQ6Om1ha2VfdW5pcXVl
PEJpdG1hcFRleHR1cmVQb29sPigpOwogfQogCiBJbnRTaXplIFRleHR1cmVNYXBwZXJJbWFnZUJ1
ZmZlcjo6bWF4VGV4dHVyZVNpemUoKSBjb25zdApAQCAtMTA5LDcgKzc0LDcgQEAgdm9pZCBUZXh0
dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmRyYXdUZXh0dXJlKGNvbnN0IEJpdG1hcFRleHR1cmUmIHRl
eHR1cmUsIGNvbnN0IEYKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgQml0bWFwVGV4dHVy
ZUltYWdlQnVmZmVyJiB0ZXh0dXJlSW1hZ2VCdWZmZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRt
YXBUZXh0dXJlSW1hZ2VCdWZmZXImPih0ZXh0dXJlKTsKLSAgICBJbWFnZUJ1ZmZlciogaW1hZ2Ug
PSB0ZXh0dXJlSW1hZ2VCdWZmZXIubV9pbWFnZS5nZXQoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1h
Z2UgPSB0ZXh0dXJlSW1hZ2VCdWZmZXIuaW1hZ2UoKTsKICAgICBjb250ZXh0LT5zYXZlKCk7CiAg
ICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGlzSW5NYXNrTW9kZSgpID8gQ29tcG9z
aXRlRGVzdGluYXRpb25JbiA6IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogICAgIGNvbnRleHQtPnNl
dEFscGhhKG9wYWNpdHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCmluZGV4
IDAxNzdkZGI3ZTE3MDUyMGJlODRiMTg0MzE2MjRhYzQ5YjBkZWVlNjAuLmRkMTcxOTNlOWE4Yjc0
ODUxOGE3MTdlYjFhNGVhZDM5MTJhNTk2MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmgKQEAgLTIwLDM3ICsyMCwxNyBAQAogI2lmbmRlZiBUZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXJfaAogI2RlZmluZSBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXJfaAogCisjaW5jbHVkZSAi
Qml0bWFwVGV4dHVyZUltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlciA6IHB1Ymxp
YyBCaXRtYXBUZXh0dXJlIHsKLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIpOyB9Ci0g
ICAgdmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLT5pbnRlcm5h
bFNpemUoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRSZXNldCgpOwotICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQotICAgIGlubGluZSBH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIHsgcmV0dXJuIG1faW1hZ2UgPyBtX2lt
YWdlLT5jb250ZXh0KCkgOiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKElt
YWdlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgVXBkYXRlQ29udGVudHNGbGFn
KTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciosIEdyYXBo
aWNzTGF5ZXIqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBvZmZzZXQs
IFVwZGF0ZUNvbnRlbnRzRmxhZyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNv
bnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VP
ZmZzZXQsIGludCBieXRlc1BlckxpbmUsIFVwZGF0ZUNvbnRlbnRzRmxhZyk7Ci0gICAgUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmKTsKLQotcHJpdmF0ZToKLSAgICBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZm
ZXIoKSB7IH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2U7Ci19Owot
Ci0KIGNsYXNzIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVy
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBUZXh0dXJlTWFw
cGVySW1hZ2VCdWZmZXIoKQotICAgICAgICA6IFRleHR1cmVNYXBwZXIoU29mdHdhcmVNb2RlKQot
ICAgIHsgfQorICAgIFRleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlcigpOwogCiAgICAgLy8gVGV4dHVy
ZU1hcHBlciBpbXBsZW1lbnRhdGlvbgogICAgIHZpcnR1YWwgdm9pZCBkcmF3Qm9yZGVyKGNvbnN0
IENvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4Jikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJm
YWNlLmNwcAppbmRleCBmNDY0N2NiMTZjZjE1YTQxNjJiNjA2YjI3ZjYyMmFmOGMyZmMxNWVjLi43
ZmVhZWVhNzU1MWQ5ODhmNjI5YTE0MTdlODgyNjhmODlkMzk4MTA3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZh
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dl
YkNvb3JkaW5hdGVkU3VyZmFjZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzU3VyZmFjZVRva2VuLmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisj
aW5jbHVkZSAiQml0bWFwVGV4dHVyZUdMLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgi
CiAjZW5kaWYKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>