<?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>201157</bug_id>
          
          <creation_ts>2019-08-26 15:54:44 -0700</creation_ts>
          <short_desc>[FTW] Use DirectX SharedResource as basis for SharedBitmap</short_desc>
          <delta_ts>2019-08-30 11:21:21 -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>WebKit2</component>
          <version>Safari 10</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>pvollan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1565133</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-26 15:54:44 -0700</bug_when>
    <thetext>Currently an ID2D1Bitmap is used as the backing store for the SharedBitmap used to share data between the WebContent Process and the UIProcess. However, this involves moving GPU memory to local memory, copying the memory into the Shared Memory in the SharedBitmap, then building a new GPU bitmap on the UIProcess side from the shared memory store.

Profiling indicates that this is the single largest place WebKit spends its time.

Instead, we should use Direct2D&apos;s ability to render to an IDXGISurface, which can be shared between multiple processes. This should avoid the GPU-&gt;CPU copy, the Direct2D-allocated CPU-&gt;Shared Memory copy, and the shared memory to GPU copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566556</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-29 22:20:21 -0700</bug_when>
    <thetext>With this change:

After Bug 201122 I measured:

&gt; AppleWin                  4.35
&gt; WinCairo                  8.39
&gt; FTW                      28.71

After these changes:

  FTW                      71.42</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566567</commentid>
    <comment_count>2</comment_count>
      <attachid>377681</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-29 23:13:09 -0700</bug_when>
    <thetext>Created attachment 377681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566665</commentid>
    <comment_count>3</comment_count>
      <attachid>377681</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-08-30 08:44:26 -0700</bug_when>
    <thetext>Comment on attachment 377681
Patch

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

&gt; Source/WebKit/Platform/SharedMemory.h:83
&gt; +        static bool decodeHandle(IPC::Decoder&amp;, HANDLE&amp;);

Could you make this return Optional&lt;HANDLE&gt;?

&gt; Source/WebKit/Shared/win/ShareableBitmapDirect2D.cpp:60
&gt; +bool ShareableBitmap::Configuration::decodeSharedResourceHandle(IPC::Decoder&amp; decoder)

These wrappers seem a bit excessive.  This code looks like it just belongs in the call site.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566685</commentid>
    <comment_count>4</comment_count>
      <attachid>377681</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-30 09:29:08 -0700</bug_when>
    <thetext>Comment on attachment 377681
Patch

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

&gt;&gt; Source/WebKit/Platform/SharedMemory.h:83
&gt;&gt; +        static bool decodeHandle(IPC::Decoder&amp;, HANDLE&amp;);
&gt; 
&gt; Could you make this return Optional&lt;HANDLE&gt;?

Sure!

&gt;&gt; Source/WebKit/Shared/win/ShareableBitmapDirect2D.cpp:60
&gt;&gt; +bool ShareableBitmap::Configuration::decodeSharedResourceHandle(IPC::Decoder&amp; decoder)
&gt; 
&gt; These wrappers seem a bit excessive.  This code looks like it just belongs in the call site.

Okay. When I started I was trying to minimize changes to ShareableBItmap.cpp, but I ended up tweaking them anyway. I&apos;lll move these lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566734</commentid>
    <comment_count>5</comment_count>
      <attachid>377729</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-30 11:00:54 -0700</bug_when>
    <thetext>Created attachment 377729
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566745</commentid>
    <comment_count>6</comment_count>
      <attachid>377729</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-30 11:20:29 -0700</bug_when>
    <thetext>Comment on attachment 377729
Patch for landing

Clearing flags on attachment: 377729

Committed r249335: &lt;https://trac.webkit.org/changeset/249335&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566746</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-30 11:20:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1566747</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-30 11:21:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/54889576&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377681</attachid>
            <date>2019-08-29 23:13:09 -0700</date>
            <delta_ts>2019-08-30 11:00:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201157-20190829231306.patch</filename>
            <type>text/plain</type>
            <size>56094</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTMxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTA4LTI5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIFVzZSBEaXJlY3RY
IFNoYXJlZFJlc291cmNlIGFzIGJhc2lzIGZvciBTaGFyZWRCaXRtYXAKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTE1NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBhbiBJRDJEMUJpdG1h
cCBpcyB1c2VkIGFzIHRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgU2hhcmVkQml0bWFwIHRoYXQg
aXMgdGhlCisgICAgICAgIGJhc2UgdHlwZSBmb3Igc2hhcmluZyBkYXRhIGJldHdlZW4gdGhlIFdl
YkNvbnRlbnQgUHJvY2VzcyBhbmQgdGhlIFVJUHJvY2Vzcy4gSG93ZXZlciwgdGhpcworICAgICAg
ICBpbnZvbHZlcyBtb3ZpbmcgR1BVIG1lbW9yeSB0byBsb2NhbCBtZW1vcnksIGNvcHlpbmcgdGhh
dCBtZW1vcnkgaW50byB0aGUgU2hhcmVkTWVtb3J5IG1lbWJlcgorICAgICAgICBvZiB0aGUgU2hh
cmVkQml0bWFwLCB0aGVuIGJ1aWxkaW5nIGEgbmV3IEdQVSBiaXRtYXAgb24gdGhlIFVJUHJvY2Vz
cyBzaWRlIGZyb20gdGhhdCBTaGFyZWRNZW1vcnkuCisKKyAgICAgICAgUHJvZmlsaW5nIGluZGlj
YXRlcyB0aGF0IHRoaXMgaXMgdGhlIHNpbmdsZSBsYXJnZXN0IHBsYWNlIEZUVyBXZWJLaXQgc3Bl
bmRzIGl0cyB0aW1lLgorCisgICAgICAgIEluc3RlYWQsIHdlIHNob3VsZCB1c2UgRGlyZWN0MkQn
cyBhYmlsaXR5IHRvIHJlbmRlciB0byBhbiBJRFhHSVN1cmZhY2UsIHdoaWNoIGNhbiBiZSBzaGFy
ZWQKKyAgICAgICAgYmV0d2VlbiBtdWx0aXBsZSBwcm9jZXNzZXMuIFRoaXMgc2hvdWxkIGF2b2lk
IHRoZSBHUFUtPkNQVSBjb3B5LCB0aGUgRGlyZWN0MkQtYWxsb2NhdGVkCisgICAgICAgIENQVS0+
U2hhcmVkIE1lbW9yeSBjb3B5LCBhbmQgdGhlIHNoYXJlZCBtZW1vcnkgdG8gR1BVIGNvcHkuCisg
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyRC5oOgorICAgICAgICAoV2ViQ29yZTo6QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEOjpy
ZW5kZXJUYXJnZXQgY29uc3QpOiBDaGFuZ2UgdHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OkJhY2tp
bmdTdG9yZUJhY2tlbmREaXJlY3QyRDo6ZHhTdXJmYWNlIGNvbnN0KTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQ6OkJhY2tpbmdTdG9yZUJhY2tl
bmREaXJlY3QyRCk6IFJlcXVpcmUgYSBEWEQxMSBkZXZpY2UuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6QmFja2luZ1N0b3Jl
QmFja2VuZERpcmVjdDJESW1wbCk6IFVzZSBEaXJlY3QyRCdzCisgICAgICAgIElEWEdJU3VyZmFj
ZSB0byBtYWtlIGEgcmVuZGVyIHRhcmdldCB3ZSBjYW4gdXNlIHRvIHN1cHBvcnQgb3VyIGZhc3Qg
Y3Jvc3MtcHJvY2VzcyBzaGFyaW5nLgorICAgICAgICAoV2ViQ29yZTo6QmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJESW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RGlyZWN0MkQ6OmZpbGxSZWN0KTogUmVtb3ZlIHVubmVlZGVkIFBsYXRmb3JtQ29udGV4dFN0YXRl
U2F2ZXIuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpmaWxsUGF0aCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OnN0cm9rZVBhdGgpOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RGlyZWN0MkQ6OnBpeGVsRm9ybWF0KTogU3dpdGNoIHRvIGNvbnN0YW50cyBmb3IgYml0
bWFwIGZvcm1hdC4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpjcmVhdGVEWEdJU3VyZmFj
ZU9mU2l6ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZVN1cmZh
Y2VSZW5kZXJUYXJnZXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjp3cml0
ZURpYWdub3N0aWNQTkdUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmR4Z2lJ
bW1lZGlhdGVDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZGVm
YXVsdERpcmVjdFhEZXZpY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpj
cmVhdGVEZXZpY2VBbmRDb250ZXh0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3Qy
RDo6dG9EWEdJRGV2aWNlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmFj
dG9yeUZvckRYR0lEZXZpY2UpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vRGlyZWN0MkRVdGlsaXRpZXMuaDoKKwogMjAxOS0wOC0yOSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCAiSXNvbGF0ZWRDb3B5IiBpbiB0aGUgbmFtZSBv
ZiBTdHJpbmcgZ2V0dGVycyB0aGF0IGNhbGwgaXNvbGF0ZWRDb3B5KCkgb24gdGhlIHN0cmluZwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJh
Y2tlbmREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQuaAkocmV2aXNpb24gMjQ5MTEw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJh
Y2tlbmREaXJlY3QyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw5IEBACiAKIGludGVy
ZmFjZSBJRDJEMUJpdG1hcDsKIGludGVyZmFjZSBJRDJEMUJpdG1hcEJydXNoOwotaW50ZXJmYWNl
IElEMkQxRENSZW5kZXJUYXJnZXQ7CitpbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7CitpbnRl
cmZhY2UgSUQzRDExRGV2aWNlMTsKK2ludGVyZmFjZSBJRFhHSVN1cmZhY2UxOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDIwICs0NiwyNCBAQCBjbGFzcyBCYWNraW5nU3RvcmVCYWNr
ZW5kRGlyZWN0MkQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkJhY2tpbmdTdG9yZUJhY2tlbmRE
aXJlY3QyRCgpID0gZGVmYXVsdDsKIAotICAgIElEMkQxRENSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0LmdldCgpOyB9CisgICAgSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0
LmdldCgpOyB9CiAgICAgSUQyRDFCaXRtYXAqIHN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3N1
cmZhY2UuZ2V0KCk7IH0KKyAgICBJRFhHSVN1cmZhY2UxKiBkeFN1cmZhY2UoKSBjb25zdCB7IHJl
dHVybiBtX2R4U3VyZmFjZS5nZXQoKTsgfQogICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50
UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KSA9IDA7CiAgICAg
dmlydHVhbCBJRDJEMUJpdG1hcEJydXNoKiBiaXRtYXBCcnVzaCgpID0gMDsKIAogcHJvdGVjdGVk
OgotICAgIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRChjb25zdCBJbnRTaXplJiBzaXplKQot
ICAgICAgICA6IG1fc2l6ZShzaXplKQorICAgIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRChj
b25zdCBJbnRTaXplJiBzaXplLCBJRDNEMTFEZXZpY2UxKiBkZXZpY2UpCisgICAgICAgIDogbV9k
ZXZpY2UoZGV2aWNlKQorICAgICAgICAsIG1fc2l6ZShzaXplKQogICAgIHsKICAgICB9CiAKLSAg
ICBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7CisgICAgQ09NUHRy
PElEM0QxMURldmljZTE+IG1fZGV2aWNlOworICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4g
bV9yZW5kZXJUYXJnZXQ7CisgICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IG1fZHhTdXJmYWNlOwog
ICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9zdXJmYWNlOwogICAgIEludFNpemUgbV9zaXplOwog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3Rv
cmVCYWNrZW5kRGlyZWN0MkRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHAJ
KHJldmlzaW9uIDI0OTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMjQgKzM0LDI5IEBACiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgPGQzZDExXzEu
aD4KICNpbmNsdWRlIDx3aW5jb2RlYy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBjb25zdCBTZWNvbmRzIHNjcm9sbEh5c3RlcmVzaXNEdXJhdGlvbiB7IDMwMF9tcyB9OwogCi1C
YWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsOjpCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkRJbXBsKGNvbnN0IEludFNpemUmIHNpemUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQotICAg
IDogQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEKHNpemUpCitCYWNraW5nU3RvcmVCYWNrZW5k
RGlyZWN0MkRJbXBsOjpCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKGNvbnN0IEludFNp
emUmIHNpemUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBJRDNEMTFEZXZpY2UxKiBkZXZpY2Up
CisgICAgOiBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQoc2l6ZSwgZGV2aWNlKQogICAgICwg
bV9zY3JvbGxlZEh5c3RlcmVzaXMoW3RoaXNdKFBBTDo6SHlzdGVyZXNpc1N0YXRlIHN0YXRlKSB7
CiAgICAgICAgIGlmIChzdGF0ZSA9PSBQQUw6Okh5c3RlcmVzaXNTdGF0ZTo6U3RvcHBlZCkKICAg
ICAgICAgICAgIG1fc2Nyb2xsU3VyZmFjZSA9IG51bGxwdHI7CiAgICAgICAgIH0sIHNjcm9sbEh5
c3RlcmVzaXNEdXJhdGlvbikKIHsKLSAgICBtX3JlbmRlclRhcmdldCA9IFdlYkNvcmU6OkRpcmVj
dDJEOjpjcmVhdGVHRElSZW5kZXJUYXJnZXQoKTsKLQogICAgIEludFNpemUgc2NhbGVkU2l6ZSA9
IG1fc2l6ZTsKICAgICBzY2FsZWRTaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICBt
X3N1cmZhY2UgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKG1fcmVuZGVyVGFyZ2V0LmdldCgpLCBz
Y2FsZWRTaXplKTsKKworICAgIG1fZHhTdXJmYWNlID0gV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0
ZURYR0lTdXJmYWNlT2ZTaXplKHNjYWxlZFNpemUsIG1fZGV2aWNlLmdldCgpLCBmYWxzZSk7Cisg
ICAgbV9yZW5kZXJUYXJnZXQgPSBXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlU3VyZmFjZVJlbmRl
clRhcmdldChtX2R4U3VyZmFjZS5nZXQoKSk7CisKKyAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMg
PSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpOworICAgIEhSRVNVTFQgaHIgPSBtX3JlbmRl
clRhcmdldC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9mKElEWEdJU3VyZmFjZTEpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihtX2R4U3VyZmFjZS5nZXQoKSksICZiaXRtYXBQcm9wZXJ0aWVz
LCAmbV9zdXJmYWNlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIH0KIAog
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbDo6fkJhY2tpbmdTdG9yZUJhY2tlbmREaXJl
Y3QyREltcGwoKQpAQCAtNzAsNyArNzUsMTIgQEAgdm9pZCBCYWNraW5nU3RvcmVCYWNrZW5kRGly
ZWN0MkRJbXBsOjpzYwogICAgICAgICBBU1NFUlQobV9zaXplLmhlaWdodCgpID49IHNjcm9sbFJl
Y3Quc2l6ZSgpLmhlaWdodCgpKTsKICNlbmRpZgogICAgICAgICBtX3Njcm9sbFN1cmZhY2VTaXpl
ID0gc291cmNlUmVjdC5zaXplKCk7Ci0gICAgICAgIG1fc2Nyb2xsU3VyZmFjZSA9IERpcmVjdDJE
OjpjcmVhdGVCaXRtYXAobV9yZW5kZXJUYXJnZXQuZ2V0KCksIG1fc2Nyb2xsU3VyZmFjZVNpemUp
OworICAgICAgICBtX2R4U2Nyb2xsU3VyZmFjZSA9IFdlYkNvcmU6OkRpcmVjdDJEOjpjcmVhdGVE
WEdJU3VyZmFjZU9mU2l6ZShtX3Njcm9sbFN1cmZhY2VTaXplLCBtX2RldmljZS5nZXQoKSwgZmFs
c2UpOworCisgICAgICAgIG1fc2Nyb2xsU3VyZmFjZSA9IG51bGxwdHI7CisgICAgICAgIGF1dG8g
Yml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCk7CisgICAgICAg
IEhSRVNVTFQgaHIgPSBtX3JlbmRlclRhcmdldC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9m
KElEWEdJU3VyZmFjZTEpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtX2R4U2Nyb2xsU3VyZmFj
ZS5nZXQoKSksICZiaXRtYXBQcm9wZXJ0aWVzLCAmbV9zY3JvbGxTdXJmYWNlKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgfQogCiAgICAgYXV0byBzb3VyY2VS
ZWN0TG9jYXRpb24gPSBJbnRTaXplKHNvdXJjZVJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJESW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgJKHJldmlzaW9u
IDI0OTExMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5n
U3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlIDxwYWwvSHlzdGVyZXNpc0FjdGl2aXR5Lmg+CiAKIGludGVyZmFjZSBJRDJE
MUJpdG1hcEJydXNoOwotaW50ZXJmYWNlIElXSUNCaXRtYXA7CitpbnRlcmZhY2UgSURYR0lTdXJm
YWNlMTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIElu
dFNpemU7CiAKIGNsYXNzIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwgZmluYWwgOiBw
dWJsaWMgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEIHsKIHB1YmxpYzoKLSAgICBXRUJDT1JF
X0VYUE9SVCBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKGNvbnN0IEludFNpemUmLCBm
bG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgV0VCQ09SRV9FWFBPUlQgQmFja2luZ1N0b3Jl
QmFja2VuZERpcmVjdDJESW1wbChjb25zdCBJbnRTaXplJiwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IsIElEM0QxMURldmljZTEqKTsKICAgICB2aXJ0dWFsIH5CYWNraW5nU3RvcmVCYWNrZW5kRGly
ZWN0MkRJbXBsKCk7CiAKIHByaXZhdGU6CkBAIC00OCw2ICs0OCw3IEBAIHByaXZhdGU6CiAKICAg
ICBJbnRTaXplIG1fc2Nyb2xsU3VyZmFjZVNpemU7CiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBt
X3Njcm9sbFN1cmZhY2U7CisgICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IG1fZHhTY3JvbGxTdXJm
YWNlOwogICAgIENPTVB0cjxJRDJEMUJpdG1hcEJydXNoPiBtX2JpdG1hcEJydXNoOwogCiAgICAg
UEFMOjpIeXN0ZXJlc2lzQWN0aXZpdHkgbV9zY3JvbGxlZEh5c3RlcmVzaXM7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0
MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQ5MTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwNiw3ICs0MDYsNiBAQCB2b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwog
CiAgICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgUGxhdGZvcm1Db250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7CiAgICAgRnVuY3Rpb248dm9p
ZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwg
cmVjdCwgJmZpbGxTb3VyY2VdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAg
ICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJlbmRlclRh
cmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgZmlsbFNvdXJjZS5icnVzaC5nZXQoKSk7CkBA
IC00MjMsNyArNDIyLDYgQEAgdm9pZCBmaWxsUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYg
cAogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIAog
ICAgIGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIFBsYXRmb3JtQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwogICAgIEZ1bmN0aW9uPHZvaWQo
SUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsIGNv
bG9yLCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIGNv
bnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICByZW5kZXJUYXJnZXQtPkZp
bGxSZWN0YW5nbGUoJmQyZFJlY3QsIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xv
cikuZ2V0KCkpOwpAQCAtNDQ2LDcgKzQ0NCw2IEBAIHZvaWQgZmlsbFJvdW5kZWRSZWN0KFBsYXRm
b3JtQ29udGV4dERpcmUKICAgICBib29sIGVxdWFsSGVpZ2h0cyA9IChyYWRpaS50b3BMZWZ0KCku
aGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgpICYmIHJhZGlpLmJvdHRvbUxl
ZnQoKS5oZWlnaHQoKSA9PSByYWRpaS50b3BSaWdodCgpLmhlaWdodCgpICYmIHJhZGlpLnRvcFJp
Z2h0KCkuaGVpZ2h0KCkgPT0gcmFkaWkuYm90dG9tUmlnaHQoKS5oZWlnaHQoKSk7CiAgICAgYm9v
bCBoYXNDdXN0b21GaWxsID0gZmFsc2U7IC8vIEZJWE1FOiBXaHkgaXNuJ3QgYSBGaWxsU291cmNl
IHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uPwogICAgIGlmICghaGFzQ3VzdG9tRmlsbCAmJiBlcXVh
bFdpZHRocyAmJiBlcXVhbEhlaWdodHMgJiYgcmFkaWkudG9wTGVmdCgpLndpZHRoKCkgKiAyID09
IHIud2lkdGgoKSAmJiByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkgKiAyID09IHIuaGVpZ2h0KCkp
IHsKLSAgICAgICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3Jt
Q29udGV4dCk7CiAgICAgICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJh
d0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9yLCByZWN0LCByYWRpaSwgcl0oSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICAgICAgYXV0byByb3VuZGVk
UmVjdCA9IEQyRDE6OlJvdW5kZWRSZWN0KHIsIHJhZGlpLnRvcExlZnQoKS53aWR0aCgpLCByYWRp
aS50b3BMZWZ0KCkuaGVpZ2h0KCkpOwogICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUm91
bmRlZFJlY3RhbmdsZSgmcm91bmRlZFJlY3QsIHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xv
cihjb2xvcikuZ2V0KCkpOwpAQCAtNDU3LDcgKzQ1NCw2IEBAIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KFBsYXRmb3JtQ29udGV4dERpcmUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZHJhd1dpdGhv
dXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByLCBkcmF3RnVuY3Rpb24pOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIFBsYXRmb3JtQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNv
bnRleHQpOwogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3Qo
cmVjdCk7CiAgICAgICAgIGZpbGxQYXRoKHBsYXRmb3JtQ29udGV4dCwgcGF0aCwgY29sb3IsIHNo
YWRvd1N0YXRlKTsKQEAgLTQ4OSw3ICs0ODUsNiBAQCB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50
KFBsYXRmb3JtQ29udGV4CiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpOwogCiAgICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgUGxh
dGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7CiAgICAg
RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRm
b3JtQ29udGV4dCwgcmVjdCwgJmdyYWRpZW50XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7CiAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAg
ICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGdyYWRpZW50KTsKQEAgLTUw
Niw4ICs1MDEsNiBAQCB2b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiAg
ICAgICAgIHBhdGguYWN0aXZlUGF0aCgpLT5DbG9zZSgpOwogICAgIH0KIAotICAgIFBsYXRmb3Jt
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwotCiAgICAgYXV0
byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCiAgICAgY29udGV4
dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CkBAIC01NzQsNyArNTY3LDYgQEAgdm9pZCBzdHJva2VQ
YXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJgogICAgIAogICAgIGNvbnRleHQtPlNldFRhZ3Mo
MSwgX19MSU5FX18pOwogCi0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KHBsYXRmb3JtQ29udGV4dCk7CiAgICAgYXV0byBib3VuZGluZ1JlY3QgPSBwYXRoLmZhc3RCb3Vu
ZGluZ1JlY3QoKTsKICAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdG
dW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aCwgJnN0cm9rZVNvdXJjZV0oSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdH
ZW9tZXRyeShwYXRoLnBsYXRmb3JtUGF0aCgpLCBzdHJva2VTb3VyY2UuYnJ1c2guZ2V0KCksIHN0
cm9rZVNvdXJjZS50aGlja25lc3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJEVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjQ5MTEwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSA8ZDJkMV8xLmg+CisjaW5jbHVkZSA8ZDNkMTFfMS5oPgogI2lu
Y2x1ZGUgPHNobHdhcGkuaD4KICNpbmNsdWRlIDx3aW5jb2RlYy5oPgogCkBAIC00Niw2ICs0Nyw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIERpcmVjdDJEIHsKIAorY29uc3Rl
eHByIERYR0lfRk9STUFUIHdlYmtpdFRleHR1cmVGb3JtYXQgPSBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STTsKK2NvbnN0ZXhwciBEMkQxX0FMUEhBX01PREUgd2Via2l0QWxwaGFNb2RlID0gRDJE
MV9BTFBIQV9NT0RFX1BSRU1VTFRJUExJRUQ7CisKIEludFNpemUgYml0bWFwU2l6ZShJV0lDQml0
bWFwU291cmNlKiBiaXRtYXBTb3VyY2UpCiB7CiAgICAgVUlOVCB3aWR0aCwgaGVpZ2h0OwpAQCAt
MTQwLDcgKzE0NCw3IEBAIEQyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0Rm9yU29mdHdhcmUK
IEQyRDFfUElYRUxfRk9STUFUIHBpeGVsRm9ybWF0KCkKIHsKICAgICAvLyBTaW5jZSB3ZSBuZWVk
IHRvIGludGVyYWN0IHdpdGggSERDIGZyb20gdGltZS10by10aW1lLCB3ZSBhcmUgZm9yY2VkIHRv
IHVzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSBhbmQgRDJEMV9BTFBIQV9NT0RFX1BSRU1V
TFRJUExJRUQKLSAgICByZXR1cm4gRDJEMTo6UGl4ZWxGb3JtYXQoRFhHSV9GT1JNQVRfQjhHOFI4
QThfVU5PUk0sIEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVEKTsKKyAgICByZXR1cm4gRDJE
MTo6UGl4ZWxGb3JtYXQod2Via2l0VGV4dHVyZUZvcm1hdCwgd2Via2l0QWxwaGFNb2RlKTsKIH0K
IAogR1VJRCB3aWNCaXRtYXBGb3JtYXQoKQpAQCAtMjI4LDYgKzIzMiw1MyBAQCBDT01QdHI8SUQy
RDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJpCiAgICAgcmV0dXJuIGJpdG1hcENvbnRleHQ7
CiB9CiAKK0NPTVB0cjxJRFhHSVN1cmZhY2UxPiBjcmVhdGVEWEdJU3VyZmFjZU9mU2l6ZShjb25z
dCBJbnRTaXplJiBzaXplLCBJRDNEMTFEZXZpY2UxKiBkaXJlY3RYRGV2aWNlLCBib29sIGNyb3Nz
UHJvY2VzcykKK3sKKyAgICBpZiAoIWRpcmVjdFhEZXZpY2UpCisgICAgICAgIGRpcmVjdFhEZXZp
Y2UgPSBEaXJlY3QyRDo6ZGVmYXVsdERpcmVjdFhEZXZpY2UoKTsKKworICAgIC8vIENyZWF0ZSB0
aGUgcmVuZGVyIHRhcmdldCB0ZXh0dXJlCisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsK
KyAgICBaZXJvTWVtb3J5KCZkZXNjLCBzaXplb2YoZGVzYykpOworICAgIGRlc2MuV2lkdGggPSBz
aXplLndpZHRoKCk7CisgICAgZGVzYy5IZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIGRlc2Mu
TWlwTGV2ZWxzID0gMTsKKyAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgZGVzYy5Gb3JtYXQg
PSB3ZWJraXRUZXh0dXJlRm9ybWF0OworICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Cisg
ICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgZGVzYy5CaW5kRmxhZ3Mg
PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsK
KyAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICBkZXNjLk1pc2NGbGFncyA9IEQzRDEx
X1JFU09VUkNFX01JU0NfR0RJX0NPTVBBVElCTEU7CisgICAgaWYgKGNyb3NzUHJvY2VzcykKKyAg
ICAgICAgZGVzYy5NaXNjRmxhZ3MgfD0gRDNEMTFfUkVTT1VSQ0VfTUlTQ19TSEFSRURfTlRIQU5E
TEUgfCBEM0QxMV9SRVNPVVJDRV9NSVNDX1NIQVJFRF9LRVlFRE1VVEVYOworCisgICAgQ09NUHRy
PElEM0QxMVRleHR1cmUyRD4gdGV4dHVyZTsKKyAgICBIUkVTVUxUIGhyID0gZGlyZWN0WERldmlj
ZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBudWxscHRyLCAmdGV4dHVyZSk7CisgICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBDT01QdHI8SURYR0lTdXJmYWNlMT4gc3Vy
ZmFjZTsKKyAgICBociA9IHRleHR1cmUtPlF1ZXJ5SW50ZXJmYWNlKCZzdXJmYWNlKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIHJldHVybiBzdXJmYWNlOworfQor
CitDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQoSURY
R0lTdXJmYWNlMSogc3VyZmFjZSkKK3sKKyAgICBhdXRvIHBpeGVsRm9ybWF0ID0gRDJEMTo6UGl4
ZWxGb3JtYXQod2Via2l0VGV4dHVyZUZvcm1hdCwgd2Via2l0QWxwaGFNb2RlKTsKKworICAgIGF1
dG8gcHJvcGVydGllcyA9IEQyRDE6OlJlbmRlclRhcmdldFByb3BlcnRpZXMoRDJEMV9SRU5ERVJf
VEFSR0VUX1RZUEVfREVGQVVMVCwKKyAgICAgICAgcGl4ZWxGb3JtYXQsIDAsIDAsIEQyRDFfUkVO
REVSX1RBUkdFVF9VU0FHRV9HRElfQ09NUEFUSUJMRSwgRDJEMV9GRUFUVVJFX0xFVkVMXzEwKTsK
KworICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gcmVuZGVyVGFyZ2V0OworICAgIEhSRVNV
TFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRHhnaVN1cmZh
Y2VSZW5kZXJUYXJnZXQoc3VyZmFjZSwgcHJvcGVydGllcywgJnJlbmRlclRhcmdldCk7CisgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biByZW5kZXJUYXJnZXQ7Cit9CisKIHZvaWQgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhl
cihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRvLCBjb25zdCBJbnRTaXplJiBzb3Vy
Y2VPZmZzZXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQp
CiB7CiAgICAgSW50U2l6ZSBzb3VyY2VCaXRtYXBTaXplID0gZnJvbS0+R2V0UGl4ZWxTaXplKCk7
CkBAIC0yOTksNiArMzUwLDEwMSBAQCB2b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChJRDJE
MVJlbmRlCiAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwogfQogCitzdGF0aWMgSUQzRDExRGV2
aWNlQ29udGV4dDEqIGltbWVkaWF0ZUNvbnRleHQgPSBudWxscHRyOworCitJRDNEMTFEZXZpY2VD
b250ZXh0MSogZHhnaUltbWVkaWF0ZUNvbnRleHQoKQoreworICAgIGlmICghaW1tZWRpYXRlQ29u
dGV4dCkKKyAgICAgICAgZGVmYXVsdERpcmVjdFhEZXZpY2UoKTsKKworICAgIFJFTEVBU0VfQVNT
RVJUKGltbWVkaWF0ZUNvbnRleHQpOworICAgIHJldHVybiBpbW1lZGlhdGVDb250ZXh0OworfQor
CitJRDNEMTFEZXZpY2UxKiBkZWZhdWx0RGlyZWN0WERldmljZSgpCit7CisgICAgc3RhdGljIElE
M0QxMURldmljZTEqIGRlZmF1bHREZXZpY2UxID0gbnVsbHB0cjsKKworICAgIGlmICghZGVmYXVs
dERldmljZTEpIHsKKyAgICAgICAgaW50IGRldmljZUZsYWdzID0gRDNEMTFfQ1JFQVRFX0RFVklD
RV9CR1JBX1NVUFBPUlQ7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBkZXZpY2VGbGFncyB8PSBE
M0QxMV9DUkVBVEVfREVWSUNFX0RFQlVHOworI2VuZGlmCisKKyAgICAgICAgSUQzRDExRGV2aWNl
KiBkZWZhdWx0RGV2aWNlID0gbnVsbHB0cjsKKyAgICAgICAgRDNEX0ZFQVRVUkVfTEVWRUwgZmVh
dHVyZUxldmVsID0geyB9OworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0KiBpbW1lZGlhdGVE
ZXZpY2VDb250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAgSFJFU1VMVCBociA9IEQzRDExQ3JlYXRl
RGV2aWNlKG51bGxwdHIsIEQzRF9EUklWRVJfVFlQRV9IQVJEV0FSRSwgbnVsbHB0ciwgZGV2aWNl
RmxhZ3MsIG51bGxwdHIsIDAsIEQzRDExX1NES19WRVJTSU9OLCAmZGVmYXVsdERldmljZSwgJmZl
YXR1cmVMZXZlbCwgJmltbWVkaWF0ZURldmljZUNvbnRleHQpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgICAgICBociA9IGRlZmF1bHREZXZpY2UtPlF1ZXJ5
SW50ZXJmYWNlKCZkZWZhdWx0RGV2aWNlMSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOworICAgICAgICBkZWZhdWx0RGV2aWNlMS0+QWRkUmVmKCk7CisKKyAgICAgICAg
aHIgPSBpbW1lZGlhdGVEZXZpY2VDb250ZXh0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNE
MTFEZXZpY2VDb250ZXh0MSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmaW1tZWRpYXRlQ29u
dGV4dCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAg
aW1tZWRpYXRlQ29udGV4dC0+QWRkUmVmKCk7CisgICAgfQorCisgICAgcmV0dXJuIGRlZmF1bHRE
ZXZpY2UxOworfQorCitib29sIGNyZWF0ZURldmljZUFuZENvbnRleHQoQ09NUHRyPElEM0QxMURl
dmljZTE+JiBkM2REZXZpY2UsIENPTVB0cjxJRDNEMTFEZXZpY2VDb250ZXh0MT4mIGltbWVkaWF0
ZUNvbnRleHQpCit7CisgICAgaW50IGRldmljZUZsYWdzID0gRDNEMTFfQ1JFQVRFX0RFVklDRV9C
R1JBX1NVUFBPUlQ7CisjaWZuZGVmIE5ERUJVRworICAgIGRldmljZUZsYWdzIHw9IEQzRDExX0NS
RUFURV9ERVZJQ0VfREVCVUc7CisjZW5kaWYKKworICAgIEQzRF9GRUFUVVJFX0xFVkVMIGZlYXR1
cmVMZXZlbCA9IHsgfTsKKyAgICBJRDNEMTFEZXZpY2UqIGRlZmF1bHREZXZpY2UgPSBudWxscHRy
OworICAgIElEM0QxMURldmljZUNvbnRleHQqIGltbWVkaWF0ZURldmljZUNvbnRleHQgPSBudWxs
cHRyOworICAgIEhSRVNVTFQgaHIgPSA6OkQzRDExQ3JlYXRlRGV2aWNlKG51bGxwdHIsIEQzRF9E
UklWRVJfVFlQRV9IQVJEV0FSRSwgbnVsbHB0ciwgZGV2aWNlRmxhZ3MsIG51bGxwdHIsIDAsIEQz
RDExX1NES19WRVJTSU9OLCAmZGVmYXVsdERldmljZSwgJmZlYXR1cmVMZXZlbCwgJmltbWVkaWF0
ZURldmljZUNvbnRleHQpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisg
ICAgaHIgPSBkZWZhdWx0RGV2aWNlLT5RdWVyeUludGVyZmFjZSgmZDNkRGV2aWNlKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBkZWZhdWx0RGV2aWNlLT5SZWxlYXNl
KCk7CisKKyAgICBociA9IGltbWVkaWF0ZURldmljZUNvbnRleHQtPlF1ZXJ5SW50ZXJmYWNlKCZp
bW1lZGlhdGVDb250ZXh0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAg
ICBpbW1lZGlhdGVDb250ZXh0LT5SZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NP
TVB0cjxJRFhHSURldmljZT4gdG9EWEdJRGV2aWNlKGNvbnN0IENPTVB0cjxJRDNEMTFEZXZpY2Ux
PiYgZDNkRGV2aWNlKQoreworICAgIGlmICghZDNkRGV2aWNlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIENPTVB0cjxJRFhHSURldmljZT4gZHhnaURldmljZTsKKyAgICBIUkVTVUxU
IGhyID0gZDNkRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRFhHSURldmljZSksICh2
b2lkICoqKSZkeGdpRGV2aWNlKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGR4Z2lEZXZpY2U7Cit9CisKK0NPTVB0cjxJRFhH
SUZhY3RvcnkyPiBmYWN0b3J5Rm9yRFhHSURldmljZShjb25zdCBDT01QdHI8SURYR0lEZXZpY2U+
JiBkZXZpY2UpCit7CisgICAgaWYgKCFkZXZpY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQ09NUHRyPElEWEdJQWRhcHRlcj4gYWRhcHRvcjsKKyAgICBIUkVTVUxUIGhyID0gZGV2
aWNlLT5HZXRQYXJlbnQoX191dWlkb2YoSURYR0lBZGFwdGVyKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KCZhZGFwdG9yKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisK
KyAgICBDT01QdHI8SURYR0lGYWN0b3J5PiBmYWN0b3J5OworICAgIGhyID0gYWRhcHRvci0+R2V0
UGFyZW50KF9fdXVpZG9mKElEWEdJRmFjdG9yeSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
ZmFjdG9yeSkpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09N
UHRyPElEWEdJRmFjdG9yeTI+IGZhY3RvcnkyOworICAgIGhyID0gZmFjdG9yeS0+UXVlcnlJbnRl
cmZhY2UoJmZhY3RvcnkyKTsgCisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cisg
ICAgCisgICAgcmV0dXJuIGZhY3RvcnkyOworfQorCiB9IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAkocmV2aXNpb24g
MjQ5MTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJE
VXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxNyBAQAogI2luY2x1ZGUg
IkNPTVB0ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCIKIAogaW50ZXJmYWNlIElEMkQx
Qml0bWFwOwogaW50ZXJmYWNlIElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0OwogaW50ZXJmYWNlIElE
MkQxRENSZW5kZXJUYXJnZXQ7CiBpbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7CitpbnRlcmZh
Y2UgSUQzRDExRGV2aWNlMTsKK2ludGVyZmFjZSBJRDNEMTFEZXZpY2VDb250ZXh0MTsKK2ludGVy
ZmFjZSBJRFhHSURldmljZTsKK2ludGVyZmFjZSBJRFhHSUZhY3RvcnkyOworaW50ZXJmYWNlIElE
WEdJU3VyZmFjZTE7CiBpbnRlcmZhY2UgSVdJQ0JpdG1hcFNvdXJjZTsKIGludGVyZmFjZSBJV0lD
Qml0bWFwOwogCkBAIC03Myw5ICs3OSwxNyBAQCBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNy
ZWF0ZVJlbmRlclRhCiBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJpdG1h
cFJlbmRlclRhcmdldE9mU2l6ZShjb25zdCBJbnRTaXplJiwgSUQyRDFSZW5kZXJUYXJnZXQqID0g
bnVsbHB0ciwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAxLjApOwogQ09NUHRyPElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJn
ZXQqID0gbnVsbHB0cik7CiBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gY3JlYXRlR0RJUmVu
ZGVyVGFyZ2V0KCk7CitDT01QdHI8SURYR0lTdXJmYWNlMT4gY3JlYXRlRFhHSVN1cmZhY2VPZlNp
emUoY29uc3QgSW50U2l6ZSYsIElEM0QxMURldmljZTEqLCBib29sIGNyb3NzUHJvY2Vzcyk7CitD
T01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQoSURYR0lT
dXJmYWNlMSopOwogCiB2b2lkIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoSUQyRDFC
aXRtYXAqIGZyb20sIElEMkQxQml0bWFwKiB0bywgY29uc3QgSW50U2l6ZSYgc291cmNlT2Zmc2V0
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNldCA9IEludFNpemUoKSk7
CiAKK1dFQkNPUkVfRVhQT1JUIElEM0QxMURldmljZUNvbnRleHQxKiBkeGdpSW1tZWRpYXRlQ29u
dGV4dCgpOworV0VCQ09SRV9FWFBPUlQgSUQzRDExRGV2aWNlMSogZGVmYXVsdERpcmVjdFhEZXZp
Y2UoKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgY3JlYXRlRGV2aWNlQW5kQ29udGV4dChDT01QdHI8
SUQzRDExRGV2aWNlMT4mLCBDT01QdHI8SUQzRDExRGV2aWNlQ29udGV4dDE+Jik7CitXRUJDT1JF
X0VYUE9SVCBDT01QdHI8SURYR0lEZXZpY2U+IHRvRFhHSURldmljZShjb25zdCBDT01QdHI8SUQz
RDExRGV2aWNlMT4mKTsKK1dFQkNPUkVfRVhQT1JUIENPTVB0cjxJRFhHSUZhY3RvcnkyPiBmYWN0
b3J5Rm9yRFhHSURldmljZShjb25zdCBDT01QdHI8SURYR0lEZXZpY2U+Jik7CisKIHZvaWQgd3Jp
dGVEaWFnbm9zdGljUE5HVG9QYXRoKElEMkQxUmVuZGVyVGFyZ2V0KiwgSUQyRDFCaXRtYXAqLCBM
UENXU1RSIGZpbGVOYW1lKTsKIAogfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDkxMTApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE5LTA4LTI5ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdo
YW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIFVzZSBEaXJlY3RYIFNoYXJlZFJlc291cmNl
IGFzIGJhc2lzIGZvciBTaGFyZWRCaXRtYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwMTE1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBhbiBJRDJEMUJpdG1hcCBpcyB1c2VkIGFzIHRo
ZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgU2hhcmVkQml0bWFwIHRoYXQgaXMgdGhlCisgICAgICAg
IGJhc2UgdHlwZSBmb3Igc2hhcmluZyBkYXRhIGJldHdlZW4gdGhlIFdlYkNvbnRlbnQgUHJvY2Vz
cyBhbmQgdGhlIFVJUHJvY2Vzcy4gSG93ZXZlciwgdGhpcworICAgICAgICBpbnZvbHZlcyBtb3Zp
bmcgR1BVIG1lbW9yeSB0byBsb2NhbCBtZW1vcnksIGNvcHlpbmcgdGhhdCBtZW1vcnkgaW50byB0
aGUgU2hhcmVkTWVtb3J5IG1lbWJlcgorICAgICAgICBvZiB0aGUgU2hhcmVkQml0bWFwLCB0aGVu
IGJ1aWxkaW5nIGEgbmV3IEdQVSBiaXRtYXAgb24gdGhlIFVJUHJvY2VzcyBzaWRlIGZyb20gdGhh
dCBTaGFyZWRNZW1vcnkuCisKKyAgICAgICAgUHJvZmlsaW5nIGluZGljYXRlcyB0aGF0IHRoaXMg
aXMgdGhlIHNpbmdsZSBsYXJnZXN0IHBsYWNlIEZUVyBXZWJLaXQgc3BlbmRzIGl0cyB0aW1lLgor
CisgICAgICAgIEluc3RlYWQsIHdlIHNob3VsZCB1c2UgRGlyZWN0MkQncyBhYmlsaXR5IHRvIHJl
bmRlciB0byBhbiBJRFhHSVN1cmZhY2UsIHdoaWNoIGNhbiBiZSBzaGFyZWQKKyAgICAgICAgYmV0
d2VlbiBtdWx0aXBsZSBwcm9jZXNzZXMuIFRoaXMgc2hvdWxkIGF2b2lkIHRoZSBHUFUtPkNQVSBj
b3B5LCB0aGUgRGlyZWN0MkQtYWxsb2NhdGVkCisgICAgICAgIENQVS0+U2hhcmVkIE1lbW9yeSBj
b3B5LCBhbmQgdGhlIHNoYXJlZCBtZW1vcnkgdG8gR1BVIGNvcHkuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9TaGFyZWRNZW1vcnku
aDoKKyAgICAgICAgKiBQbGF0Zm9ybS93aW4vU2hhcmVkTWVtb3J5V2luLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZUhhbmRsZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlIGNvbnN0KTogVXNlIG5l
dyBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxl
OjpkZWNvZGVIYW5kbGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpI
YW5kbGU6OmRlY29kZSk6IFVzZSBuZXcgaGVscGVyIGZ1bmN0aW9uLgorICAgICAgICAqIFBsYXRm
b3JtRlRXLmNtYWtlOiBBZGQgRDNYMTEgbGlicmFyaWVzLgorICAgICAgICAqIFNoYXJlZC9TaGFy
ZWFibGVCaXRtYXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkNvbmZp
Z3VyYXRpb246OmVuY29kZSBjb25zdCk6IEVuY29kZSBzaGFyZWQgcmVzb3VyY2UgaGFuZGxlIGZv
ciBEWCB0ZXh0dXJlLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3Vy
YXRpb246OmRlY29kZSk6IERpdHRvIChidXQgZGVjb2RlKS4KKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpTaGFyZWFibGVCaXRtYXApOiBDcmVhdGUgU2hhcmVkUmVzb3VyY2UgKGlm
IG5lZWRlZCkuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJp
dG1hcCk6IEFkZCBjbGVhbnVwIGNvZGUgZm9yIFNoYXJlZFJlc291cmUuCisgICAgICAgIChXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6bnVtQnl0ZXNGb3JTaXplKTogT25seSBhbGxvY2F0ZSBhIHNt
YWxsIG1lbW9yeSBzdG9yZSB3aGVuIHVzaW5nIEdQVSB0ZXh0dXJlcy4KKyAgICAgICAgKiBTaGFy
ZWQvU2hhcmVhYmxlQml0bWFwLmg6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6
ZHhTdXJmYWNlKToKKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjpl
bmNvZGVTaGFyZWRSZXNvdXJjZUhhbmRsZSBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlY29kZVNoYXJlZFJlc291cmNlSGFu
ZGxlKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hh
cmVkUmVzb3VyY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpk
aXNwb3NlU2hhcmVkUmVzb3VyY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpsZWFrU2hhcmVkUmVzb3VyY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQpOiBVcGRhdGUgZm9yIG5ldyBkYXRh
IHR5cGVzLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OnBhaW50KTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlRGlyZWN0MkRTdXJmYWNl
KTogVXBkYXRlIGZvciBuZXcgZGF0YSB0eXBlcy4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVTdXJm
YWNlRnJvbURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6
OnN5bmMpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3BwOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9CYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5j
cHA6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vQmFja2luZ1N0
b3JlRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6OmNyZWF0ZUJh
Y2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6OnBhaW50KToKKyAgICAgICAg
KFdlYktpdDo6QmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9X
ZWJQYWdlUHJveHlXaW4uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRldmlj
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0RGV2aWNlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpXZWJWaWV3KTogSW5pdGlhbGl6ZSBEaXJlY3RYIHN0dWZmLgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpwYWludCk6IFVzZSBuZXcgRGlyZXRYIGRyYXdpbmcgbG9naWMuCisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6Om9uU2l6ZUV2ZW50KTogVXBkYXRlIFN3YXBDaGFpbidzIGJ1ZmZl
ciBzaXplcyB3aGVuIHJlc2l6aW5nLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXR1cFN3
YXBDaGFpbik6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpjb25maWd1cmVCYWNr
aW5nU3RvcmUpOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZDNkRGV2aWNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhp
Y3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6
OmRpc3BsYXkpOgorCiAyMDE5LTA4LTI2ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtGVFddIEdvIGJhY2sgdG8gSUQyRDFCaXRtYXAgYXMgb3VyIE5hdGl2
ZUltYWdlIHR5cGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjQ5MTEw
KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
MTc1LDcgKzE3NSw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9MSUJSQVJJRVMKICAgICBQUklWQVRF
CiAgICAgICAgICR7T1BFTlNTTF9MSUJSQVJJRVN9CiAgICAgICAgIEQyZDEubGliCisgICAgICAg
IEQzZDExLmxpYgogICAgICAgICBEd3JpdGUKKyAgICAgICAgRHhnaS5saWIKICAgICAgICAgRHhn
dWlkCiAgICAgICAgIFdpbmRvd3NDb2RlY3MKICAgICAgICAgbWZ1dWlkLmxpYgpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCShyZXZpc2lvbiAyNDkxMTApCisrKyBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2
ICs3OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIElQQzo6QXR0YWNobWVudCByZWxlYXNlQXR0YWNo
bWVudCgpIGNvbnN0OwogICAgICAgICB2b2lkIGFkb3B0QXR0YWNobWVudChJUEM6OkF0dGFjaG1l
bnQmJik7CiAjZW5kaWYKKyNpZiBPUyhXSU5ET1dTKQorICAgICAgICBzdGF0aWMgdm9pZCBlbmNv
ZGVIYW5kbGUoSVBDOjpFbmNvZGVyJiwgSEFORExFKTsKKyAgICAgICAgc3RhdGljIGJvb2wgZGVj
b2RlSGFuZGxlKElQQzo6RGVjb2RlciYsIEhBTkRMRSYpOworI2VuZGlmCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlZE1lbW9yeTsKICNpZiBVU0UoVU5JWF9ET01BSU5f
U09DS0VUUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vd2luL1NoYXJlZE1lbW9yeVdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS93aW4vU2hhcmVkTWVt
b3J5V2luLmNwcAkocmV2aXNpb24gMjQ5MTEwKQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS93
aW4vU2hhcmVkTWVtb3J5V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTEgKzY2LDE3IEBA
IHZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZShJUEM6OkUKIHsKICAgICBlbmNvZGVy
IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtX3NpemUpOwogCisgICAgZW5jb2RlSGFuZGxlKGVu
Y29kZXIsIG1faGFuZGxlKTsKKwogICAgIC8vIEhhbmQgb2ZmIG93bmVyc2hpcCBvZiBvdXIgSEFO
RExFIHRvIHRoZSByZWNlaXZpbmcgcHJvY2Vzcy4gSXQgd2lsbCBjbG9zZSBpdCBmb3IgdXMuCiAg
ICAgLy8gRklYTUU6IElmIHRoZSByZWNlaXZpbmcgcHJvY2VzcyBjcmFzaGVzIGJlZm9yZSBpdCBy
ZWNlaXZlcyB0aGUgbWVtb3J5LCB0aGUgbWVtb3J5IHdpbGwgYmUKICAgICAvLyBsZWFrZWQuIFNl
ZSA8aHR0cDovL3dlYmtpdC5vcmcvYi80NzUwMj4uCi0gICAgZW5jb2RlciA8PCByZWludGVycHJl
dF9jYXN0PHVpbnQ2NF90PihtX2hhbmRsZSk7CiAgICAgbV9oYW5kbGUgPSAwOworfQorCit2b2lk
IFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGVIYW5kbGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
LCBIQU5ETEUgaGFuZGxlKQoreworICAgIGVuY29kZXIgPDwgcmVpbnRlcnByZXRfY2FzdDx1aW50
NjRfdD4oaGFuZGxlKTsKIAogICAgIC8vIFNlbmQgYWxvbmcgb3VyIFBJRCBzbyB0aGF0IHRoZSBy
ZWNlaXZpbmcgcHJvY2VzcyBjYW4gZHVwbGljYXRlIHRoZSBIQU5ETEUgZm9yIGl0cyBvd24gdXNl
LgogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KDo6R2V0Q3VycmVudFByb2Nl
c3NJZCgpKTsKQEAgLTExMyw2ICsxMTksMTcgQEAgYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6
ZGVjb2RlKElQQzo6RAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAorICAgIEhBTkRMRSBwcm9jZXNzU3BlY2lmaWNIYW5kbGUgPSBudWxscHRy
OworICAgIGlmICghZGVjb2RlSGFuZGxlKGRlY29kZXIsIHByb2Nlc3NTcGVjaWZpY0hhbmRsZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhbmRsZS5tX2hhbmRsZSA9IHByb2Nlc3NT
cGVjaWZpY0hhbmRsZTsKKyAgICBoYW5kbGUubV9zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlSGFuZGxlKElQQzo6RGVj
b2RlciYgZGVjb2RlciwgSEFORExFJiBoYW5kbGUpCit7CiAgICAgdWludDY0X3Qgc291cmNlSGFu
ZGxlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc291cmNlSGFuZGxlKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTI1LDggKzE0Miw3IEBAIGJvb2wgU2hhcmVkTWVtb3J5OjpIYW5kbGU6
OmRlY29kZShJUEM6OkQKICAgICBpZiAoIWdldER1cGxpY2F0ZWRIYW5kbGUocmVpbnRlcnByZXRf
Y2FzdDxIQU5ETEU+KHNvdXJjZUhhbmRsZSksIHNvdXJjZVBJRCwgZHVwbGljYXRlZEhhbmRsZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGhhbmRsZS5tX2hhbmRsZSA9IGR1cGxpY2F0
ZWRIYW5kbGU7Ci0gICAgaGFuZGxlLm1fc2l6ZSA9IHNpemU7CisgICAgaGFuZGxlID0gZHVwbGlj
YXRlZEhhbmRsZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9T
aGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCShyZXZpc2lvbiAyNDkxMTApCisrKyBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2
OCw5IEBAIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjplbmMKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICBlbmNvZGVyIDw8IGNvbG9yU3BhY2U7CiAjZW5kaWYKKyNpZiBVU0Uo
RElSRUNUMkQpCisgICAgZW5jb2RlU2hhcmVkUmVzb3VyY2VIYW5kbGUoZW5jb2Rlcik7CisjZW5k
aWYKIH0KIAogYm9vbCBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlY29kZShJUEM6
OkRlY29kZXImIGRlY29kZXIsIENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCkBAIC03OCw2
ICs4MSw5IEBAIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjpkZWMKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGNvbmZpZ3VyYXRpb24uY29sb3JTcGFjZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNlbmRpZgorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBjb25maWd1cmF0aW9u
LmRlY29kZVNoYXJlZFJlc291cmNlSGFuZGxlKGRlY29kZXIpOworI2VuZGlmCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTE1NiwxMiArMTYyLDE4IEBAIFNoYXJlYWJsZUJpdG1hcDo6U2hhcmVh
YmxlQml0bWFwKGNvbnN0IEkKICAgICAsIG1fc2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeSkKICAg
ICAsIG1fZGF0YShudWxscHRyKQogeworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBjcmVhdGVTaGFy
ZWRSZXNvdXJjZSgpOworI2VuZGlmCiB9CiAKIFNoYXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJp
dG1hcCgpCiB7CiAgICAgaWYgKCFpc0JhY2tlZEJ5U2hhcmVkTWVtb3J5KCkpCiAgICAgICAgIGZh
c3RGcmVlKG1fZGF0YSk7CisjaWYgVVNFKERJUkVDVDJEKQorICAgIGRpc3Bvc2VTaGFyZWRSZXNv
dXJjZSgpOworI2VuZGlmCiB9CiAKIHZvaWQqIFNoYXJlYWJsZUJpdG1hcDo6ZGF0YSgpIGNvbnN0
CkBAIC0xNzUsNyArMTg3LDEyIEBAIHZvaWQqIFNoYXJlYWJsZUJpdG1hcDo6ZGF0YSgpIGNvbnN0
CiAKIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBTaGFyZWFibGVCaXRtYXA6Om51
bUJ5dGVzRm9yU2l6ZShXZWJDb3JlOjpJbnRTaXplIHNpemUsIGNvbnN0IFNoYXJlYWJsZUJpdG1h
cDo6Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKIHsKKyNpZiBVU0UoRElSRUNUMkQpCisg
ICAgLy8gV2UgcGFzcyByZWZlcmVuY2VzIHRvIEdQVSB0ZXh0dXJlcywgc28gbm8gbmVlZCB0byBh
bGxvY2F0ZSBmcmFtZSBidWZmZXJzIGhlcmUuIEp1c3Qgc2VuZCBhIHNtYWxsIGJpdCBvZiBkYXRh
LgorICAgIHJldHVybiBzaXplb2Yodm9pZCopOworI2Vsc2UKICAgICByZXR1cm4gY2FsY3VsYXRl
Qnl0ZXNQZXJSb3coc2l6ZSwgY29uZmlndXJhdGlvbikgKiBzaXplLmhlaWdodCgpOworI2VuZGlm
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQv
U2hhcmVhYmxlQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hh
cmVhYmxlQml0bWFwLmgJKHJldmlzaW9uIDI0OTExMCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L1NoYXJlYWJsZUJpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBACiAjaWYg
VVNFKERJUkVDVDJEKQogaW50ZXJmYWNlIElEMkQxQml0bWFwOwogaW50ZXJmYWNlIElEMkQxUmVu
ZGVyVGFyZ2V0OworaW50ZXJmYWNlIElEM0QxMURldmljZTE7CitpbnRlcmZhY2UgSURYR0lLZXll
ZE11dGV4OworaW50ZXJmYWNlIElEWEdJU3VyZmFjZTE7CiAKICNpbmNsdWRlIDxXZWJDb3JlL0NP
TVB0ci5oPgogI2VuZGlmCkBAIC02MCw2ICs2MywxMiBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgICAgIENvbG9yU3BhY2VEYXRhIGNvbG9yU3BhY2U7CiAjZW5kaWYKKyNpZiBV
U0UoRElSRUNUMkQpCisgICAgICAgIG11dGFibGUgSEFORExFIHNoYXJlZFJlc291cmNlSGFuZGxl
IHsgbnVsbHB0ciB9OworCisgICAgICAgIHZvaWQgZW5jb2RlU2hhcmVkUmVzb3VyY2VIYW5kbGUo
SVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIGJvb2wgZGVjb2RlU2hhcmVkUmVzb3VyY2VI
YW5kbGUoSVBDOjpEZWNvZGVyJik7CisjZW5kaWYKIAogICAgICAgICB2b2lkIGVuY29kZShJUEM6
OkVuY29kZXImKSBjb25zdDsKICAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6RGVjb2Rl
ciYsIENvbmZpZ3VyYXRpb24mKTsKQEAgLTEzMiw4ICsxNDEsMTEgQEAgcHVibGljOgogICAgIC8v
IFRoaXMgaXMgb25seSBzYWZlIHRvIHVzZSB3aGVuIHdlIGtub3cgdGhhdCB0aGUgY29udGVudHMg
b2YgdGhlIHNoYXJlYWJsZSBiaXRtYXAgd29uJ3QgY2hhbmdlLgogICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IGNyZWF0ZUNhaXJvU3VyZmFjZSgpOwogI2VsaWYgVVNFKERJUkVDVDJEKQotICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKElEMkQxUmVuZGVyVGFy
Z2V0Kik7Ci0gICAgdm9pZCBzeW5jKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlRGlyZWN0MkRTdXJmYWNlKElEM0QxMURldmljZTEqLCBJ
RDJEMVJlbmRlclRhcmdldCopOworICAgIElEWEdJU3VyZmFjZTEqIGR4U3VyZmFjZSgpIHsgcmV0
dXJuIG1fc3VyZmFjZS5nZXQoKTsgfQorICAgIHZvaWQgY3JlYXRlU2hhcmVkUmVzb3VyY2UoKTsK
KyAgICB2b2lkIGRpc3Bvc2VTaGFyZWRSZXNvdXJjZSgpOworICAgIHZvaWQgbGVha1NoYXJlZFJl
c291cmNlKCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTE2Myw3ICsxNzUsOCBAQCBwcml2YXRl
OgogICAgIENvbmZpZ3VyYXRpb24gbV9jb25maWd1cmF0aW9uOwogCiAjaWYgVVNFKERJUkVDVDJE
KQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9iaXRtYXA7CisgICAgQ09NUHRyPElEWEdJU3Vy
ZmFjZTE+IG1fc3VyZmFjZTsKKyAgICBDT01QdHI8SURYR0lLZXllZE11dGV4PiBtX3N1cmZhY2VN
dXRleDsKICNlbmRpZgogCiAgICAgLy8gSWYgdGhlIHNoYXJlYWJsZSBiaXRtYXAgaXMgYmFja2Vk
IGJ5IHNoYXJlZCBtZW1vcnksIHRoaXMgcG9pbnRzIHRvIHRoZSBzaGFyZWQgbWVtb3J5IG9iamVj
dC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJp
dG1hcERpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5MTEwKQorKysgU291cmNlL1dlYktpdC9TaGFy
ZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1h
cC5oIgogCisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9ESUJQaXhlbERh
dGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJET3BlcmF0aW9ucy5oPgpAQCAtMzYsNiAr
MzgsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+Cisj
aW5jbHVkZSA8ZDNkMTFfMS5oPgorI2luY2x1ZGUgPGR4Z2kxXzIuaD4KICNpbmNsdWRlIDx3aW5j
b2RlYy5oPgogI2luY2x1ZGUgPHd0Zi9Qcm9jZXNzSUQuaD4KIApAQCAtNDMsNiArNDcsMjYgQEAK
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK3ZvaWQgU2hh
cmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjplbmNvZGVTaGFyZWRSZXNvdXJjZUhhbmRsZShJ
UEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGU6
OmVuY29kZUhhbmRsZShlbmNvZGVyLCBzaGFyZWRSZXNvdXJjZUhhbmRsZSk7CisKKyAgICAvLyBI
YW5kIG9mZiBvd25lcnNoaXAgb2Ygb3VyIEhBTkRMRSB0byB0aGUgcmVjZWl2aW5nIHByb2Nlc3Mu
IEl0IHdpbGwgY2xvc2UgaXQgZm9yIHVzLgorICAgIC8vIEZJWE1FOiBJZiB0aGUgcmVjZWl2aW5n
IHByb2Nlc3MgY3Jhc2hlcyBiZWZvcmUgaXQgcmVjZWl2ZXMgdGhlIG1lbW9yeSwgdGhlIG1lbW9y
eSB3aWxsIGJlCisgICAgLy8gbGVha2VkLiBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNDc1MDI+
LgorICAgIHNoYXJlZFJlc291cmNlSGFuZGxlID0gbnVsbHB0cjsKK30KKworYm9vbCBTaGFyZWFi
bGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlY29kZVNoYXJlZFJlc291cmNlSGFuZGxlKElQQzo6
RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBIQU5ETEUgcHJvY2Vzc1NwZWNpZmljSGFuZGxlID0g
bnVsbHB0cjsKKyAgICBpZiAoIVNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGVIYW5kbGUoZGVj
b2RlciwgcHJvY2Vzc1NwZWNpZmljSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBwcm9jZXNzU3BlY2lmaWNIYW5kbGU7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBzdHJpZGVGb3JXaWR0aCh1bnNpZ25lZCB3
aWR0aCkKIHsKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c1BlclBpeGVsID0gRGlyZWN0MkQ6OmJp
dHNQZXJQaXhlbChEaXJlY3QyRDo6d2ljQml0bWFwRm9ybWF0KCkpOwpAQCAtNTksMjEgKzgzLDQ4
IEBAIHVuc2lnbmVkIFNoYXJlYWJsZUJpdG1hcDo6Y2FsY3VsYXRlQnl0ZXMKICAgICByZXR1cm4g
NDsKIH0KIAotc3RhdGljIGlubGluZSBDT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRlU3VyZmFjZUZy
b21EYXRhKHZvaWQqIGRhdGEsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit2b2lkIFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVkUmVzb3VyY2UoKQoreworICAgIC8vIERvbid0IGNy
ZWF0ZSBhIHNoYXJlZCByZXNvdXJjZSBpZiB0aGUgY29uZmlndXJhdGlvbiBpbnN0cnVjdHMgdXMg
dG8gdXNlIGFuIGV4aXN0aW5nIG9uZS4KKyAgICBpZiAobV9jb25maWd1cmF0aW9uLnNoYXJlZFJl
c291cmNlSGFuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N1cmZhY2UgPSBEaXJlY3Qy
RDo6Y3JlYXRlRFhHSVN1cmZhY2VPZlNpemUobV9zaXplLCBudWxscHRyLCB0cnVlKTsKKworICAg
IENPTVB0cjxJRFhHSVJlc291cmNlMT4gcmVzb3VyY2VEYXRhOworICAgIEhSRVNVTFQgaHIgPSBt
X3N1cmZhY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEWEdJUmVzb3VyY2UpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJnJlc291cmNlRGF0YSkpOworICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOworCisgICAgaHIgPSByZXNvdXJjZURhdGEtPkNyZWF0ZVNoYXJlZEhhbmRs
ZShudWxscHRyLCBEWEdJX1NIQVJFRF9SRVNPVVJDRV9SRUFEIHwgRFhHSV9TSEFSRURfUkVTT1VS
Q0VfV1JJVEUsIG51bGxwdHIsICZtX2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUp
OworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworfQorCit2b2lkIFNoYXJlYWJs
ZUJpdG1hcDo6ZGlzcG9zZVNoYXJlZFJlc291cmNlKCkKK3sKKyAgICBpZiAobV9zdXJmYWNlTXV0
ZXgpCisgICAgICAgIG1fc3VyZmFjZU11dGV4LT5SZWxlYXNlU3luYygxKTsKKyAgICBpZiAobV9j
b25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlKQorICAgICAgICA6OkNsb3NlSGFuZGxl
KG1fY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSk7Cit9CisKK3ZvaWQgU2hhcmVh
YmxlQml0bWFwOjpsZWFrU2hhcmVkUmVzb3VyY2UoKQogewotICAgIGNvbnN0IHVuc2lnbmVkIHN0
cmlkZSA9IHN0cmlkZUZvcldpZHRoKHNpemUud2lkdGgoKSk7Ci0gICAgcmV0dXJuIERpcmVjdDJE
OjpjcmVhdGVEaXJlY3QyREltYWdlU3VyZmFjZVdpdGhEYXRhKGRhdGEsIHNpemUsIHN0cmlkZSk7
CisgICAgbV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlID0gbnVsbHB0cjsKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVHcmFwaGljc0NvbnRleHQoKQogewotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVjdDJE
OjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUobV9zaXplKTsKLSAgICBpZiAoIWJpdG1h
cENvbnRleHQpCisgICAgLy8gTG9jayB0aGUgc3VyZmFjZSB0byB0aGUgY3VycmVudCBkZXZpY2Ug
d2hpbGUgcmVuZGVyaW5nLgorICAgIEhSRVNVTFQgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJm
YWNlKCZtX3N1cmZhY2VNdXRleCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
CisgICAgaHIgPSBtX3N1cmZhY2VNdXRleC0+QWNxdWlyZVN5bmMoMCwgSU5GSU5JVEUpOworICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgYXV0byBzdXJmYWNlQ29udGV4
dCA9IERpcmVjdDJEOjpjcmVhdGVTdXJmYWNlUmVuZGVyVGFyZ2V0KG1fc3VyZmFjZS5nZXQoKSk7
CisgICAgaWYgKCFzdXJmYWNlQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZtX2JpdG1hcCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3Jh
cGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3Rvcnko
Yml0bWFwQ29udGV4dC5nZXQoKSkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KHN1cmZhY2VD
b250ZXh0LmdldCgpKSk7CiB9CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBkc3RQb2ludCwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCkKQEAgLTgzLDcgKzEzNCw3IEBAIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWlu
dChHcmFwaGljc0NvbnQKIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgZmxvYXQgc2NhbGVGYWN0b3IsIGNvbnN0IEludFBvaW50JiBkc3RQb2lu
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKIHsKLSAgICBhdXRvIHN1cmZhY2UgPSBjcmVhdGVE
aXJlY3QyRFN1cmZhY2UoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkp
OworICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShudWxscHRyLCBjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7CiAKICNpZm5kZWYgX05ERUJV
RwogICAgIGF1dG8gYml0bWFwU2l6ZSA9IHN1cmZhY2UtPkdldFBpeGVsU2l6ZSgpOwpAQCAtMTAy
LDEzICsxNTMsMjggQEAgdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udAog
ICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdl
dCgpLCBtX3NpemUsIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciwgc3RhdGUuYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKCksIHN0YXRlLmltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHksIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKIH0KIAotQ09NUHRyPElEMkQxQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZURp
cmVjdDJEU3VyZmFjZShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQorQ09NUHRyPElE
MkQxQml0bWFwPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZURpcmVjdDJEU3VyZmFjZShJRDNEMTFE
ZXZpY2UxKiBkaXJlY3RYRGV2aWNlLCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQog
ewotICAgIGF1dG8gYml0bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVz
KCk7CisgICAgaWYgKCFkaXJlY3RYRGV2aWNlKQorICAgICAgICBkaXJlY3RYRGV2aWNlID0gRGly
ZWN0MkQ6OmRlZmF1bHREaXJlY3RYRGV2aWNlKCk7CisKKyAgICBDT01QdHI8SUQzRDExVGV4dHVy
ZTJEPiB0ZXh0dXJlOworICAgIEhSRVNVTFQgaHIgPSBkaXJlY3RYRGV2aWNlLT5PcGVuU2hhcmVk
UmVzb3VyY2UxKG1fY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSwgX191dWlkb2Yo
SUQzRDExVGV4dHVyZTJEKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0ZXh0dXJlKSk7Cisg
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGhy
ID0gdGV4dHVyZS0+UXVlcnlJbnRlcmZhY2UoJm1fc3VyZmFjZSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICAvLyBMb2NrIHRoZSBzdXJmYWNlIHRvIHRoZSBjdXJy
ZW50IGRldmljZSB3aGlsZSByZW5kZXJpbmcuCisgICAgaHIgPSBtX3N1cmZhY2UtPlF1ZXJ5SW50
ZXJmYWNlKCZtX3N1cmZhY2VNdXRleCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CisgICAgaHIgPSBtX3N1cmZhY2VNdXRleC0+QWNxdWlyZVN5bmMoMSwgSU5GSU5JVEUpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgQ09NUHRyPElEMkQxQml0
bWFwPiBiaXRtYXA7Ci0gICAgdWludDMyX3Qgc3RyaWRlID0gNCAqIG1fc2l6ZS53aWR0aCgpOwot
ICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChtX3NpemUsIGRhdGEo
KSwgc3RyaWRlLCAmYml0bWFwUHJvcGVydGllcywgJmJpdG1hcCk7CisgICAgYXV0byBiaXRtYXBQ
cm9wZXJ0aWVzID0gRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKTsKKyAgICBociA9IHJlbmRl
clRhcmdldC0+Q3JlYXRlU2hhcmVkQml0bWFwKF9fdXVpZG9mKElEWEdJU3VyZmFjZTEpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihtX3N1cmZhY2UuZ2V0KCkpLCAmYml0bWFwUHJvcGVydGllcywg
JmJpdG1hcCk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtMTE3LDYzICsxODMsMTEgQEAgQ09NUHRyPElEMkQxQml0bWFwPiBTaGFyZWFibGVC
aXRtYXA6OmNyZQogCiBSZWZQdHI8SW1hZ2U+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlSW1hZ2Uo
KQogewotICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVjdDJEU3VyZmFjZShHcmFwaGljc0Nv
bnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKSk7CisgICAgYXV0byBzdXJmYWNlID0gY3JlYXRl
RGlyZWN0MkRTdXJmYWNlKG51bGxwdHIsIEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRh
cmdldCgpKTsKICAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLXZv
aWQgU2hhcmVhYmxlQml0bWFwOjpzeW5jKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
KQotewotICAgIEFTU0VSVChtX2JpdG1hcCk7Ci0KLSAgICBncmFwaGljc0NvbnRleHQuZW5kRHJh
dygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dDsK
LSAgICBIUkVTVUxUIGhyID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5k
ZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFEZXZpY2VDb250ZXh0KSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZkMmREZXZpY2VDb250ZXh0KSk7Ci0gICAgQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgY29uc3QgdW5zaWduZWQgc3RyaWRlID0gc3RyaWRlRm9y
V2lkdGgobV9zaXplLndpZHRoKCkpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1Qml0
bWFwOwotICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQx
OjpCaXRtYXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9C
SVRNQVBfT1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOwotICAg
IGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKG1fc2l6ZSwgbnVsbHB0ciwgc3Ry
aWRlLCBiaXRtYXBQcm9wZXJ0aWVzLCAmY3B1Qml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhyID0gY3B1Qml0bWFwLT5Db3B5RnJvbUJpdG1h
cChudWxscHRyLCBtX2JpdG1hcC5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZERhdGE7
Ci0gICAgaHIgPSBjcHVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRE
YXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtYXBwZWREYXRhLnBpdGNoID09IHN0cmlkZSkKLSAgICAgICAgbWVtY3B5KGRhdGEoKSwgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVkRGF0YS5iaXRzKSwgc3RyaWRlICogbV9zaXplLmhl
aWdodCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gU3RyaWRlIGlzIGRpZmZlcmVudCwgc28g
bXVzdCBkbyBhIHJvd3dpc2UgY29weToKLSAgICAgICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IG1f
c2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gbV9zaXplLndpZHRo
KCk7Ci0KLSAgICAgICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IG1hcHBlZERhdGEuYml0czsK
LSAgICAgICAgdWludDhfdCogcm93ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSgp
KTsKLQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5
KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4
KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocm93ICsgYmFzZXgpWzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gbWFwcGVkRGF0YS5waXRjaDsKLSAgICAgICAg
ICAgIHJvdyArPSBzdHJpZGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBociA9IGNwdUJpdG1h
cC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5nU3RvcmUuY3Bw
CShyZXZpc2lvbiAyNDkxMTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5nU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBVU0UoRElSRUNU
MkQpCiAjaW5jbHVkZSA8ZDJkMS5oPgorI2luY2x1ZGUgPGQzZDExXzEuaD4KICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0JhY2tpbmdT
dG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0JhY2tpbmdTdG9y
ZS5oCShyZXZpc2lvbiAyNDkxMTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5n
U3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOSBAQAogCiAjaWYgVVNFKERJUkVD
VDJEKQogaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OworaW50ZXJmYWNlIElEM0QxMURldmlj
ZTE7CitpbnRlcmZhY2UgSUQzRDExRGV2aWNlQ29udGV4dDE7CitpbnRlcmZhY2UgSUQzRDExVGV4
dHVyZTJEOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTgsMTEgKzYxLDExIEBA
IHB1YmxpYzoKICNpZiBVU0UoQ0FJUk8pCiAgICAgdHlwZWRlZiBjYWlyb190KiBQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dDsKICNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBzdHJ1Y3QgR2RpQ29ubmVj
dGlvbnMgewotICAgICAgICBIV05EIGh3bmQ7Ci0gICAgICAgIEhEQyBoZGM7CisgICAgc3RydWN0
IERYQ29ubmVjdGlvbnMgeworICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0MSogaW1tZWRpYXRl
Q29udGV4dCB7IG51bGxwdHIgfTsKKyAgICAgICAgSUQzRDExVGV4dHVyZTJEKiBiYWNrQnVmZmVy
IHsgbnVsbHB0ciB9OwogICAgIH07Ci0gICAgdHlwZWRlZiBHZGlDb25uZWN0aW9ucyBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDsKKyAgICB0eXBlZGVmIERYQ29ubmVjdGlvbnMgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQ7CiAjZW5kaWYKIAogICAgIHZvaWQgcGFpbnQoUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjQ5MTEwKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1
MCwxMCBAQAogI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmgiCiAjZW5kaWYK
IAorI2lmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlIDxkM2QxMV8xLmg+CisjZW5kaWYKKwogLy8g
VGhpcyBjb250cm9scyB3aGF0IHN0cmF0ZWd5IHdlIHVzZSBmb3IgbW91c2Ugd2hlZWwgY29hbGVz
Y2luZy4KICNkZWZpbmUgTUVSR0VfV0hFRUxfRVZFTlRTIDEKIApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI0OTExMCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNiArMTUx
LDEwIEBAIGNsYXNzIE1lZGlhU2Vzc2lvbk1ldGFkYXRhOwogfQogI2VuZGlmCiAKKyNpZiBVU0Uo
RElSRUNUMkQpCitpbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
QVBJIHsKIGNsYXNzIEF0dGFjaG1lbnQ7CiBjbGFzcyBDb250ZXh0TWVudUNsaWVudDsKQEAgLTgx
Myw2ICs4MTcsMTAgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFBsYXRmb3Jt
Vmlld1dpZGdldCB2aWV3V2lkZ2V0KCk7CisjaWYgVVNFKERJUkVDVDJEKQorICAgIElEM0QxMURl
dmljZTEqIGRldmljZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RGV2aWNlKElEM0QxMURldmljZTEq
KTsKKyNlbmRpZgogI2VuZGlmCiAjaWYgUExBVEZPUk0oV1BFKQogICAgIHN0cnVjdCB3cGVfdmll
d19iYWNrZW5kKiB2aWV3QmFja2VuZCgpOwpAQCAtMjU1MSw2ICsyNTU5LDkgQEAgcHJpdmF0ZToK
ICAgICB9OwogICAgIE9wdGlvbmFsPFNwZWVjaFN5bnRoZXNpc0RhdGE+IG1fc3BlZWNoU3ludGhl
c2lzRGF0YTsKICNlbmRpZgorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBDT01QdHI8SUQzRDExRGV2
aWNlMT4gbV9kZXZpY2U7CisjZW5kaWYKICAgICBib29sIG1faXNRdW90YUluY3JlYXNlRGVuaWVk
IHsgZmFsc2UgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJh
d2luZ0FyZWFQcm94eUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCShyZXZpc2lvbiAyNDkxMTApCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVh
UHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgs
NyBAQAogCiAjaWYgVVNFKERJUkVDVDJEKQogI2luY2x1ZGUgPGQyZDEuaD4KKyNpbmNsdWRlIDxk
M2QxMV8xLmg+CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDI0OTExMCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3Rv
cmVEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDMzICszNSwzMiBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPGQyZDEuaD4KKyNpbmNs
dWRlIDxkM2QxMV8xLmg+CisjaW5jbHVkZSA8ZHhnaS5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGQ6OnVuaXF1ZV9wdHI8QmFja2luZ1N0b3Jl
QmFja2VuZERpcmVjdDJEPiBCYWNraW5nU3RvcmU6OmNyZWF0ZUJhY2tlbmQoKQogewotICAgIHJl
dHVybiBtYWtlVW5pcXVlPEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw+KG1fc2l6ZSwg
bV9kZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8QmFja2luZ1N0b3Jl
QmFja2VuZERpcmVjdDJESW1wbD4obV9zaXplLCBtX2RldmljZVNjYWxlRmFjdG9yLCBtX3dlYlBh
Z2VQcm94eS5kZXZpY2UoKSk7CiB9CiAKLXZvaWQgQmFja2luZ1N0b3JlOjpwYWludChHZGlDb25u
ZWN0aW9ucyBnZGlDb25uZWN0aW9ucywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgQmFja2lu
Z1N0b3JlOjpwYWludChEWENvbm5lY3Rpb25zIGR4Q29ubmVjdGlvbnMsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgQVNTRVJUKG1fYmFja2VuZCk7CiAgICAgQVNTRVJUKG1fYmFja2VuZC0+
c2l6ZSgpID09IG1fc2l6ZSk7CiAKLSAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBtX2JhY2tlbmQt
PnJlbmRlclRhcmdldCgpOworICAgIENPTVB0cjxJRDNEMTFSZXNvdXJjZT4gYmFja0J1ZmZlcjsK
KyAgICBIUkVTVUxUIGhyID0gZHhDb25uZWN0aW9ucy5iYWNrQnVmZmVyLT5RdWVyeUludGVyZmFj
ZShfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFj
a0J1ZmZlcikpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09N
UHRyPElEM0QxMVJlc291cmNlPiBiYWNraW5nU3RvcmU7CisgICAgaHIgPSBtX2JhY2tlbmQtPmR4
U3VyZmFjZSgpLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFSZXNvdXJjZSksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja2luZ1N0b3JlKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CiAKLSAgICBSRUNUIHZpZXdSZWN0OwotICAgIDo6R2V0Q2xpZW50UmVj
dChnZGlDb25uZWN0aW9ucy5od25kLCAmdmlld1JlY3QpOwotICAgIHJlbmRlclRhcmdldC0+Qmlu
ZERDKGdkaUNvbm5lY3Rpb25zLmhkYywgJnZpZXdSZWN0KTsKLQotICAgIEQyRDFfUkVDVF9GIGRl
c3RSZWN0ID0gcmVjdDsKLQotICAgIGlmIChhdXRvKiBwYXR0ZXJuQnJ1c2ggPSBtX2JhY2tlbmQt
PmJpdG1hcEJydXNoKCkpIHsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5CZWdpbkRyYXcoKTsKLSAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkZXN0UmVjdCwgcGF0dGVybkJydXNo
KTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0LT5FbmREcmF3KCk7Ci0gICAgfQorICAgIENEM0QxMV9C
T1ggc3JjQm94KHJlY3QueCgpLCByZWN0LnkoKSwgMCwgcmVjdC54KCkgKyByZWN0LndpZHRoKCks
IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSwgMSk7CisgICAgZHhDb25uZWN0aW9ucy5pbW1lZGlh
dGVDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24xKGJhY2tCdWZmZXIuZ2V0KCksIDAsIHJl
Y3QueCgpLCByZWN0LnkoKSwgMCwgYmFja2luZ1N0b3JlLmdldCgpLCAwLCAmc3JjQm94LCBEM0Qx
MV9DT1BZX0RJU0NBUkQpOwogfQogCiB2b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRh
dGUoU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8mIHVwZGF0ZUluZm8p
CkBAIC03Myw3ICs3Miw5IEBAIHZvaWQgQmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShT
aGEKIAogICAgIEludFBvaW50IHVwZGF0ZVJlY3RCb3VuZHNMb2NhdGlvbiA9IHVwZGF0ZUluZm8u
dXBkYXRlUmVjdEJvdW5kcy5sb2NhdGlvbigpOwogCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBk
ZXZpY2VVcGRhdGVCaXRtYXAgPSBiaXRtYXAtPmNyZWF0ZURpcmVjdDJEU3VyZmFjZShtX2JhY2tl
bmQtPnJlbmRlclRhcmdldCgpKTsKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGRldmljZVVwZGF0
ZUJpdG1hcCA9IGJpdG1hcC0+Y3JlYXRlRGlyZWN0MkRTdXJmYWNlKG1fd2ViUGFnZVByb3h5LmRl
dmljZSgpLCBtX2JhY2tlbmQtPnJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIWRldmljZVVwZGF0
ZUJpdG1hcCkKKyAgICAgICAgcmV0dXJuOwogCiAjaWZuZGVmIF9OREVCVUcKICAgICBhdXRvIGRl
dmljZUJpdG1hcFNpemUgPSBkZXZpY2VVcGRhdGVCaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVudEltcGwuY3BwCShy
ZXZpc2lvbiAyNDkxMTApCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vUGFnZUNsaWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiV2Vi
Vmlldy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NUGFzdGVBY2Nlc3MuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8ZDNkMTFfMS5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHAJKHJldmlzaW9uIDI0OTEx
MCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTMxLDYgKzMxLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZWFyY2hQb3B1cE1lbnVEQi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVXNlckFnZW50Lmg+CiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5j
bHVkZSA8ZDNkMTFfMS5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKQEAgLTcwLDUgKzc0LDE3IEBAIFBsYXRm
b3JtVmlld1dpZGdldCBXZWJQYWdlUHJveHk6OnZpZXdXaWQKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UGFnZUNsaWVudEltcGwmPihwYWdlQ2xpZW50KCkpLnZpZXdXaWRnZXQoKTsKIH0KIAorI2lm
IFVTRShESVJFQ1QyRCkKK0lEM0QxMURldmljZTEqIFdlYlBhZ2VQcm94eTo6ZGV2aWNlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9kZXZpY2UuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5
OjpzZXREZXZpY2UoSUQzRDExRGV2aWNlMSogZGV2aWNlKQoreworICAgIG1fZGV2aWNlID0gZGV2
aWNlOworfQorI2VuZGlmCisKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAyNDkxMTApCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDYgKzY5LDkgQEAKIAogI2lmIFVTRShESVJFQ1QyRCkKICNpbmNsdWRlIDxXZWJDb3JlL0RpcmVj
dDJEVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8ZDNkMTFfMS5oPgorI2luY2x1ZGUgPGRpcmVjdHhj
b2xvcnMuaD4gCisjaW5jbHVkZSA8ZHhnaS5oPgogI2VuZGlmCiAKIApAQCAtMjQ1LDggKzI0OCwx
NSBAQCBXZWJWaWV3OjpXZWJWaWV3KFJFQ1QgcmVjdCwgY29uc3QgQVBJOjpQCiAgICAgbV9wYWdl
ID0gcHJvY2Vzc1Bvb2wtPmNyZWF0ZVdlYlBhZ2UoKm1fcGFnZUNsaWVudCwgV1RGTW92ZShwYWdl
Q29uZmlndXJhdGlvbikpOwogICAgIG1fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKIAorICAg
IEludFNpemUgd2luZG93U2l6ZShyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSAt
IHJlY3QudG9wKTsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgRGlyZWN0MkQ6OmNyZWF0ZURldmlj
ZUFuZENvbnRleHQobV9kM2REZXZpY2UsIG1faW1tZWRpYXRlQ29udGV4dCk7CisgICAgbV9wYWdl
LT5zZXREZXZpY2UobV9kM2REZXZpY2UuZ2V0KCkpOworICAgIHNldHVwU3dhcENoYWluKHdpbmRv
d1NpemUpOworI2VuZGlmCisKICAgICBpZiAobV9wYWdlLT5kcmF3aW5nQXJlYSgpKQotICAgICAg
ICBtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50U2l6ZShyZWN0LnJpZ2h0IC0gcmVj
dC5sZWZ0LCByZWN0LmJvdHRvbSAtIHJlY3QudG9wKSk7CisgICAgICAgIG1fcGFnZS0+ZHJhd2lu
Z0FyZWEoKS0+c2V0U2l6ZSh3aW5kb3dTaXplKTsKIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVD
VE9SKQogICAgIG1fcGFnZS0+c2V0VVJMU2NoZW1lSGFuZGxlckZvclNjaGVtZShSZW1vdGVJbnNw
ZWN0b3JQcm90b2NvbEhhbmRsZXI6OmNyZWF0ZSgqbV9wYWdlKSwgImluc3BlY3RvciIpOwpAQCAt
NDkxLDggKzUwMSwxNCBAQCB2b2lkIFdlYlZpZXc6OnBhaW50KEhEQyBoZGMsIGNvbnN0IEludFJl
CiAgICAgICAgIGNhaXJvX2Rlc3Ryb3koY29udGV4dCk7CiAgICAgICAgIGNhaXJvX3N1cmZhY2Vf
ZGVzdHJveShzdXJmYWNlKTsKICNlbHNlCi0gICAgICAgIEJhY2tpbmdTdG9yZTo6R2RpQ29ubmVj
dGlvbnMgY29udGV4dCB7IDo6V2luZG93RnJvbURDKGhkYyksIGhkYyB9OwotICAgICAgICBkcmF3
aW5nQXJlYS0+cGFpbnQoY29udGV4dCwgZGlydHlSZWN0LCB1bnBhaW50ZWRSZWdpb24pOworICAg
ICAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiBiYWNrQnVmZmVyOyAKKyAgICAgICAgSFJFU1VM
VCBociA9IG1fc3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDExVGV4dHVyZTJE
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IAorICAgICAgICBpZiAo
U1VDQ0VFREVEKGhyKSkgeworICAgICAgICAgICAgQmFja2luZ1N0b3JlOjpEWENvbm5lY3Rpb25z
IGNvbnRleHQgeyBtX2ltbWVkaWF0ZUNvbnRleHQuZ2V0KCksIGJhY2tCdWZmZXIuZ2V0KCkgfTsK
KyAgICAgICAgICAgIGRyYXdpbmdBcmVhLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIHVucGFp
bnRlZFJlZ2lvbik7CisgICAgICAgIH0KKworICAgICAgICBtX3N3YXBDaGFpbi0+UHJlc2VudCgw
LCAwKTsgCiAjZW5kaWYKIAogICAgICAgICBhdXRvIHVucGFpbnRlZFJlY3RzID0gdW5wYWludGVk
UmVnaW9uLnJlY3RzKCk7CkBAIC01MzQsMTIgKzU1MCwyOSBAQCBMUkVTVUxUIFdlYlZpZXc6Om9u
U2l6ZUV2ZW50KEhXTkQgaHduZCwKICAgICBpbnQgd2lkdGggPSBMT1dPUkQobFBhcmFtKTsKICAg
ICBpbnQgaGVpZ2h0ID0gSElXT1JEKGxQYXJhbSk7CiAKKyAgICBJbnRTaXplIHdpbmRvd1NpemUo
d2lkdGgsIGhlaWdodCk7CisKICAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+ZHJhd2luZ0FyZWEo
KSkgewogICAgICAgICAvLyBGSVhNRSBzcGVjaWZ5IGNvcnJlY3RseSBsYXllclBvc2l0aW9uLgot
ICAgICAgICBtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KSwgbV9uZXh0UmVzaXplU2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgbV9wYWdlLT5kcmF3aW5n
QXJlYSgpLT5zZXRTaXplKHdpbmRvd1NpemUsIG1fbmV4dFJlc2l6ZVNjcm9sbE9mZnNldCk7CiAg
ICAgICAgIG1fbmV4dFJlc2l6ZVNjcm9sbE9mZnNldCA9IEludFNpemUoKTsKICAgICB9CiAKKyNp
ZiBVU0UoRElSRUNUMkQpCisgICAgaWYgKG1fc3dhcENoYWluKSB7CisgICAgICAgIG1faW1tZWRp
YXRlQ29udGV4dC0+T01TZXRSZW5kZXJUYXJnZXRzKDAsIG51bGxwdHIsIG51bGxwdHIpOworCisg
ICAgICAgIG1fcmVuZGVyVGFyZ2V0VmlldyA9IG51bGxwdHI7CisKKyAgICAgICAgLy8gUHJlc2Vy
dmUgdGhlIGV4aXN0aW5nIGJ1ZmZlciBjb3VudCAocGFzcyB6ZXJvIGZvciBjb3VudCkgYW5kIGZv
cm1hdCAoYnkgcGFzc2luZyBEWEdJX0ZPUk1BVF9VTktOT1dOKS4KKyAgICAgICAgLy8gQXV0b21h
dGljYWxseSBjaG9vc2UgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gbWF0Y2ggdGhlIGNsaWVudCBy
ZWN0IGZvciB0aGUgYmFja2luZyB3aW5kb3cgKHBhc3MgemVyb3MgZm9yIHdpZHRoL2hlaWdodCku
CisgICAgICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+UmVzaXplQnVmZmVycygwLCAwLCAw
LCBEWEdJX0ZPUk1BVF9VTktOT1dOLCBEWEdJX1NXQVBfQ0hBSU5fRkxBR19HRElfQ09NUEFUSUJM
RSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgICAgIGNv
bmZpZ3VyZUJhY2tpbmdTdG9yZSh3aW5kb3dTaXplKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGhh
bmRsZWQgPSB0cnVlOwogICAgIHJldHVybiAwOwogfQpAQCAtOTE3LDQgKzk1MCw2MyBAQCB2b2lk
IFdlYlZpZXc6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0CiAgICAgOjpTZW5kTWVzc2FnZSht
X3Rvb2xUaXBXaW5kb3csIFRUTV9BQ1RJVkFURSwgIXRvb2xUaXAuaXNFbXB0eSgpLCAwKTsKIH0K
IAorI2lmIFVTRShESVJFQ1QyRCkKK3ZvaWQgV2ViVmlldzo6c2V0dXBTd2FwQ2hhaW4oY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoIW1fZDNkRGV2aWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQzEgc3dhcENoYWluRGVzY3JpcHRp
b247CisgICAgOjpaZXJvTWVtb3J5KCZzd2FwQ2hhaW5EZXNjcmlwdGlvbiwgc2l6ZW9mKHN3YXBD
aGFpbkRlc2NyaXB0aW9uKSk7CisgICAgc3dhcENoYWluRGVzY3JpcHRpb24uV2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgc3dhcENoYWluRGVzY3JpcHRpb24uSGVpZ2h0ID0gc2l6ZS5oZWlnaHQo
KTsKKyAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5Gb3JtYXQgPSBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STTsKKyAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5TYW1wbGVEZXNjLkNvdW50ID0gMTsK
KyAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgIHN3
YXBDaGFpbkRlc2NyaXB0aW9uLkJ1ZmZlclVzYWdlID0gRFhHSV9VU0FHRV9SRU5ERVJfVEFSR0VU
X09VVFBVVDsKKyAgICBzd2FwQ2hhaW5EZXNjcmlwdGlvbi5CdWZmZXJDb3VudCA9IDE7CisKKyAg
ICBhdXRvIGZhY3RvcnkgPSBEaXJlY3QyRDo6ZmFjdG9yeUZvckRYR0lEZXZpY2UoRGlyZWN0MkQ6
OnRvRFhHSURldmljZShtX2QzZERldmljZSkpOworCisgICAgSURYR0lTd2FwQ2hhaW4xKiBzd2Fw
Q2hhaW4xID0gbnVsbHB0cjsKKyAgICBIUkVTVUxUIGhyID0gZmFjdG9yeS0+Q3JlYXRlU3dhcENo
YWluRm9ySHduZChtX2QzZERldmljZS5nZXQoKSwgbV93aW5kb3csICZzd2FwQ2hhaW5EZXNjcmlw
dGlvbiwgbnVsbHB0ciwgbnVsbHB0ciwgJnN3YXBDaGFpbjEpOworICAgIGlmIChTVUNDRUVERUQo
aHIpKQorICAgICAgICBociA9IHN3YXBDaGFpbjEtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElE
WEdJU3dhcENoYWluKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3N3YXBDaGFpbikpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgZmFjdG9yeS0+TWFrZVdp
bmRvd0Fzc29jaWF0aW9uKG1fd2luZG93LCAwKTsKKyAgICBjb25maWd1cmVCYWNraW5nU3RvcmUo
c2l6ZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y29uZmlndXJlQmFja2luZ1N0b3JlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUpCit7CisgICAgQVNTRVJUKG1fc3dhcENoYWluKTsKKyAgICBB
U1NFUlQobV9kM2REZXZpY2UpOworICAgIEFTU0VSVChtX2ltbWVkaWF0ZUNvbnRleHQpOworCisg
ICAgLy8gQ3JlYXRlIGEgcmVuZGVyIHRhcmdldCB2aWV3IAorICAgIENPTVB0cjxJRDNEMTFUZXh0
dXJlMkQ+IGJhY2tCdWZmZXI7IAorICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVm
ZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmYmFja0J1ZmZlcikpOyAKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKwor
ICAgIGhyID0gbV9kM2REZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcoYmFja0J1ZmZlci5n
ZXQoKSwgbnVsbHB0ciwgJm1fcmVuZGVyVGFyZ2V0Vmlldyk7IAorICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOworCisgICAgYXV0byogcmVuZGVyVGFyZ2V0VmlldyA9IG1fcmVuZGVy
VGFyZ2V0Vmlldy5nZXQoKTsKKyAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFy
Z2V0cygxLCAmcmVuZGVyVGFyZ2V0VmlldywgbnVsbHB0cik7CisKKyAgICAvLyBTZXR1cCB0aGUg
dmlld3BvcnQgCisgICAgRDNEMTFfVklFV1BPUlQgdmlld3BvcnQ7CisgICAgdmlld3BvcnQuV2lk
dGggPSAoRkxPQVQpc2l6ZS53aWR0aCgpOworICAgIHZpZXdwb3J0LkhlaWdodCA9IChGTE9BVClz
aXplLmhlaWdodCgpOworICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKKyAgICB2aWV3cG9y
dC5NYXhEZXB0aCA9IDEuMGY7CisgICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOworICAgIHZpZXdw
b3J0LlRvcExlZnRZID0gMDsKKyAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRz
KDEsICZ2aWV3cG9ydCk7CisKKyAgICBtX2ltbWVkaWF0ZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFy
Z2V0VmlldyhtX3JlbmRlclRhcmdldFZpZXcuZ2V0KCksIERpcmVjdFg6OkNvbG9yczo6TWlkbmln
aHRCbHVlKTsgCit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDI0OTExMCkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzUsNiArMzUsMTcgQEAKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorI2lmIFVTRShE
SVJFQ1QyRCkKK2ludGVyZmFjZSBJRDNEMTFEZXZpY2UxOworaW50ZXJmYWNlIElEM0QxMURldmlj
ZUNvbnRleHQxOworaW50ZXJmYWNlIElEM0QxMVJlbmRlclRhcmdldFZpZXc7CitpbnRlcmZhY2Ug
SURYR0lTd2FwQ2hhaW47CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50
U2l6ZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7
CkBAIC03Miw2ICs4MywxMCBAQCBwdWJsaWM6CiAKICAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3
aW5nQXJlYSgpIHsgcmV0dXJuIHBhZ2UoKSA/IHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSA6IG51bGxw
dHI7IH0KIAorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBJRDNEMTFEZXZpY2UxKiBkM2REZXZpY2Uo
KSB7IHJldHVybiBtX2QzZERldmljZS5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAg
V2ViVmlldyhSRUNULCBjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJiwgSFdORCBwYXJlbnRX
aW5kb3cpOwogCkBAIC0xMjgsNiArMTQzLDExIEBAIHByaXZhdGU6CiAgICAgLy8gV2ViQ29yZTo6
V2luZG93TWVzc2FnZUxpc3RlbmVyCiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd1JlY2VpdmVkTWVz
c2FnZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKIAorI2lmIFVTRShESVJF
Q1QyRCkKKyAgICB2b2lkIHNldHVwU3dhcENoYWluKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsK
KyAgICB2b2lkIGNvbmZpZ3VyZUJhY2tpbmdTdG9yZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CisjZW5kaWYKKwogICAgIEhXTkQgbV93aW5kb3cgeyBudWxscHRyIH07CiAgICAgSFdORCBtX3Rv
cExldmVsUGFyZW50V2luZG93IHsgbnVsbHB0ciB9OwogICAgIEhXTkQgbV90b29sVGlwV2luZG93
IHsgbnVsbHB0ciB9OwpAQCAtMTQ3LDYgKzE2NywxMiBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYktpdDo6UGFnZUNsaWVudEltcGw+IG1fcGFnZUNsaWVudDsKICAgICBSZWZQ
dHI8V2ViUGFnZVByb3h5PiBtX3BhZ2U7CisjaWYgVVNFKERJUkVDVDJEKQorICAgIENPTVB0cjxJ
RDNEMTFEZXZpY2UxPiBtX2QzZERldmljZTsKKyAgICBDT01QdHI8SUQzRDExRGV2aWNlQ29udGV4
dDE+IG1faW1tZWRpYXRlQ29udGV4dDsKKyAgICBDT01QdHI8SUQzRDExUmVuZGVyVGFyZ2V0Vmll
dz4gbV9yZW5kZXJUYXJnZXRWaWV3OyAKKyAgICBDT01QdHI8SURYR0lTd2FwQ2hhaW4+IG1fc3dh
cENoYWluOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0Fy
ZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0
ZWRHcmFwaGljcy5jcHAJKHJldmlzaW9uIDI0OTExMCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdy
YXBoaWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPGQyZDEuaD4KKyNpbmNsdWRlIDxk
M2QxMV8xLmg+CiAjZW5kaWYKIAogCkBAIC03NTQsOCArNzU1LDcgQEAgdm9pZCBEcmF3aW5nQXJl
YUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpcwogICAgIH0KIAogI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICBpZiAoZ3JhcGhpY3NDb250ZXh0KQotICAgICAgICBiaXRtYXAtPnN5bmMoKmdyYXBoaWNzQ29u
dGV4dCk7CisgICAgYml0bWFwLT5sZWFrU2hhcmVkUmVzb3VyY2UoKTsgLy8gSXQgd2lsbCBiZSBk
ZXN0cm95ZWQgaW4gdGhlIFVJUHJvY2Vzcy4KICNlbmRpZgogCiAgICAgLy8gTGF5b3V0IGNhbiB0
cmlnZ2VyIG1vcmUgY2FsbHMgdG8gc2V0TmVlZHNEaXNwbGF5IGFuZCB3ZSBkb24ndCB3YW50IHRv
IHByb2Nlc3MgdGhlbQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTExMCkK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTktMDgtMjkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CisKKyAgICAgICAgW0ZUV10gVXNlIERpcmVjdFggU2hhcmVkUmVzb3VyY2UgYXMgYmFzaXMgZm9y
IFNoYXJlZEJpdG1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjAxMTU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZTogTGluayB0byBEaXJlY3RYIHRvIGF2b2lkIGJ1aWxk
IGZhaWx1cmUuCisKIDIwMTktMDgtMTkgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQpJbmRleDogU291cmNlL1dlYktp
dExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVn
YWN5L1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyNDkxMTApCisrKyBTb3VyY2UvV2ViS2l0
TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC04LDYgKzgsOCBAQCBs
aXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19DbGFzc2VzCiApCiBsaXN0KEFQUEVORCBX
ZWJLaXRMZWdhY3lfTElCUkFSSUVTCiAgICAgJHtPUEVOU1NMX0xJQlJBUklFU30KKyAgICBQUklW
QVRFIEQzRDExLmxpYgorICAgIFBSSVZBVEUgRHhnaS5saWIKICAgICBQUklWQVRFIG1mdXVpZC5s
aWIKICAgICBQUklWQVRFIHN0cm1paWRzLmxpYgogICAgIFBSSVZBVEUgJHtMSUJYTUwyX0xJQlJB
UklFU30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>377729</attachid>
            <date>2019-08-30 11:00:54 -0700</date>
            <delta_ts>2019-08-30 11:20:29 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-201157-20190830110049.patch</filename>
            <type>text/plain</type>
            <size>69720</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTMyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTA4LTMwICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIFVzZSBEaXJlY3RY
IFNoYXJlZFJlc291cmNlIGFzIGJhc2lzIGZvciBTaGFyZWRCaXRtYXAKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTE1NworCisgICAgICAgIFJldmll
d2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgQ3VycmVudGx5IGFuIElEMkQxQml0
bWFwIGlzIHVzZWQgYXMgdGhlIGJhY2tpbmcgc3RvcmUgZm9yIHRoZSBTaGFyZWRCaXRtYXAgdGhh
dCBpcyB0aGUKKyAgICAgICAgYmFzZSB0eXBlIGZvciBzaGFyaW5nIGRhdGEgYmV0d2VlbiB0aGUg
V2ViQ29udGVudCBQcm9jZXNzIGFuZCB0aGUgVUlQcm9jZXNzLiBIb3dldmVyLCB0aGlzCisgICAg
ICAgIGludm9sdmVzIG1vdmluZyBHUFUgbWVtb3J5IHRvIGxvY2FsIG1lbW9yeSwgY29weWluZyB0
aGF0IG1lbW9yeSBpbnRvIHRoZSBTaGFyZWRNZW1vcnkgbWVtYmVyCisgICAgICAgIG9mIHRoZSBT
aGFyZWRCaXRtYXAsIHRoZW4gYnVpbGRpbmcgYSBuZXcgR1BVIGJpdG1hcCBvbiB0aGUgVUlQcm9j
ZXNzIHNpZGUgZnJvbSB0aGF0IFNoYXJlZE1lbW9yeS4KKworICAgICAgICBQcm9maWxpbmcgaW5k
aWNhdGVzIHRoYXQgdGhpcyBpcyB0aGUgc2luZ2xlIGxhcmdlc3QgcGxhY2UgRlRXIFdlYktpdCBz
cGVuZHMgaXRzIHRpbWUuCisKKyAgICAgICAgSW5zdGVhZCwgd2Ugc2hvdWxkIHVzZSBEaXJlY3Qy
RCdzIGFiaWxpdHkgdG8gcmVuZGVyIHRvIGFuIElEWEdJU3VyZmFjZSwgd2hpY2ggY2FuIGJlIHNo
YXJlZAorICAgICAgICBiZXR3ZWVuIG11bHRpcGxlIHByb2Nlc3Nlcy4gVGhpcyBzaG91bGQgYXZv
aWQgdGhlIEdQVS0+Q1BVIGNvcHksIHRoZSBEaXJlY3QyRC1hbGxvY2F0ZWQKKyAgICAgICAgQ1BV
LT5TaGFyZWQgTWVtb3J5IGNvcHksIGFuZCB0aGUgc2hhcmVkIG1lbW9yeSB0byBHUFUgY29weS4K
KyAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERp
cmVjdDJELmg6CisgICAgICAgIChXZWJDb3JlOjpCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQ6
OnJlbmRlclRhcmdldCBjb25zdCk6IENoYW5nZSB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6QmFj
a2luZ1N0b3JlQmFja2VuZERpcmVjdDJEOjpkeFN1cmZhY2UgY29uc3QpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRDo6QmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJEKTogUmVxdWlyZSBhIERYRDExIGRldmljZS4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsOjpCYWNraW5nU3Rv
cmVCYWNrZW5kRGlyZWN0MkRJbXBsKTogVXNlIERpcmVjdDJEJ3MKKyAgICAgICAgSURYR0lTdXJm
YWNlIHRvIG1ha2UgYSByZW5kZXIgdGFyZ2V0IHdlIGNhbiB1c2UgdG8gc3VwcG9ydCBvdXIgZmFz
dCBjcm9zcy1wcm9jZXNzIHNoYXJpbmcuCisgICAgICAgIChXZWJDb3JlOjpCYWNraW5nU3RvcmVC
YWNrZW5kRGlyZWN0MkRJbXBsOjpzY3JvbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEaXJlY3QyRDo6ZmlsbFJlY3QpOiBSZW1vdmUgdW5uZWVkZWQgUGxhdGZvcm1Db250ZXh0U3Rh
dGVTYXZlci4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3QpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmZpbGxQYXRoKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6c3Ryb2tlUGF0aCk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEaXJlY3QyRDo6cGl4ZWxGb3JtYXQpOiBTd2l0Y2ggdG8gY29uc3RhbnRzIGZvciBi
aXRtYXAgZm9ybWF0LgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZURYR0lTdXJm
YWNlT2ZTaXplKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6Y3JlYXRlU3Vy
ZmFjZVJlbmRlclRhcmdldCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6Ondy
aXRlRGlhZ25vc3RpY1BOR1RvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZHhn
aUltbWVkaWF0ZUNvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpk
ZWZhdWx0RGlyZWN0WERldmljZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6
OmNyZWF0ZURldmljZUFuZENvbnRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVj
dDJEOjp0b0RYR0lEZXZpY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpm
YWN0b3J5Rm9yRFhHSURldmljZSk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oOgorCiAyMDE5LTA4LTMwICBLZWl0aCBSb2xsaW4gIDxr
cm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgQXBwS2l0Q29tcGF0aWJpbGl0eURl
Y2xhcmF0aW9ucy5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRC5oCShy
ZXZpc2lvbiAyNDkzMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDkgQEAKIAogaW50ZXJmYWNlIElEMkQxQml0bWFwOwogaW50ZXJmYWNlIElEMkQxQml0bWFwQnJ1
c2g7Ci1pbnRlcmZhY2UgSUQyRDFEQ1JlbmRlclRhcmdldDsKK2ludGVyZmFjZSBJRDJEMVJlbmRl
clRhcmdldDsKK2ludGVyZmFjZSBJRDNEMTFEZXZpY2UxOworaW50ZXJmYWNlIElEWEdJU3VyZmFj
ZTE7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsMjAgKzQ2LDI0IEBAIGNsYXNzIEJh
Y2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QmFja2lu
Z1N0b3JlQmFja2VuZERpcmVjdDJEKCkgPSBkZWZhdWx0OwogCi0gICAgSUQyRDFEQ1JlbmRlclRh
cmdldCogcmVuZGVyVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7
IH0KKyAgICBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJUYXJnZXQuZ2V0KCk7IH0KICAgICBJRDJEMUJpdG1hcCogc3VyZmFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsgfQorICAgIElEWEdJU3VyZmFjZTEqIGR4U3VyZmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHhTdXJmYWNlLmdldCgpOyB9CiAgICAgY29uc3QgSW50U2l6
ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNj
cm9sbChjb25zdCBJbnRSZWN0JiBzY3JvbGxSZWN0LCBjb25zdCBJbnRTaXplJiBzY3JvbGxPZmZz
ZXQpID0gMDsKICAgICB2aXJ0dWFsIElEMkQxQml0bWFwQnJ1c2gqIGJpdG1hcEJydXNoKCkgPSAw
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJEKGNvbnN0IElu
dFNpemUmIHNpemUpCi0gICAgICAgIDogbV9zaXplKHNpemUpCisgICAgQmFja2luZ1N0b3JlQmFj
a2VuZERpcmVjdDJEKGNvbnN0IEludFNpemUmIHNpemUsIElEM0QxMURldmljZTEqIGRldmljZSkK
KyAgICAgICAgOiBtX2RldmljZShkZXZpY2UpCisgICAgICAgICwgbV9zaXplKHNpemUpCiAgICAg
ewogICAgIH0KIAotICAgIENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdl
dDsKKyAgICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kZXZpY2U7CisgICAgQ09NUHRyPElEMkQx
UmVuZGVyVGFyZ2V0PiBtX3JlbmRlclRhcmdldDsKKyAgICBDT01QdHI8SURYR0lTdXJmYWNlMT4g
bV9keFN1cmZhY2U7CiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX3N1cmZhY2U7CiAgICAgSW50
U2l6ZSBtX3NpemU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9CYWNraW5nU3RvcmVCYWNrZW5kRGly
ZWN0MkRJbXBsLmNwcAkocmV2aXNpb24gMjQ5MzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwyNCArMzQsMjkgQEAKICNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJl
Y3QyRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSA8ZDNkMTFfMS5oPgogI2luY2x1ZGUgPHdpbmNvZGVjLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGNvbnN0IFNlY29uZHMgc2Nyb2xsSHlzdGVyZXNpc0R1cmF0aW9uIHsg
MzAwX21zIH07CiAKLUJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw6OkJhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGwoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpCi0gICAgOiBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQoc2l6ZSkKK0JhY2tp
bmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGw6OkJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwoY29uc3QgSW50U2l6ZSYgc2l6ZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIElEM0QxMURl
dmljZTEqIGRldmljZSkKKyAgICA6IEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRChzaXplLCBk
ZXZpY2UpCiAgICAgLCBtX3Njcm9sbGVkSHlzdGVyZXNpcyhbdGhpc10oUEFMOjpIeXN0ZXJlc2lz
U3RhdGUgc3RhdGUpIHsKICAgICAgICAgaWYgKHN0YXRlID09IFBBTDo6SHlzdGVyZXNpc1N0YXRl
OjpTdG9wcGVkKQogICAgICAgICAgICAgbV9zY3JvbGxTdXJmYWNlID0gbnVsbHB0cjsKICAgICAg
ICAgfSwgc2Nyb2xsSHlzdGVyZXNpc0R1cmF0aW9uKQogewotICAgIG1fcmVuZGVyVGFyZ2V0ID0g
V2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZUdESVJlbmRlclRhcmdldCgpOwotCiAgICAgSW50U2l6
ZSBzY2FsZWRTaXplID0gbV9zaXplOwogICAgIHNjYWxlZFNpemUuc2NhbGUoZGV2aWNlU2NhbGVG
YWN0b3IpOwotICAgIG1fc3VyZmFjZSA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAobV9yZW5kZXJU
YXJnZXQuZ2V0KCksIHNjYWxlZFNpemUpOworCisgICAgbV9keFN1cmZhY2UgPSBXZWJDb3JlOjpE
aXJlY3QyRDo6Y3JlYXRlRFhHSVN1cmZhY2VPZlNpemUoc2NhbGVkU2l6ZSwgbV9kZXZpY2UuZ2V0
KCksIGZhbHNlKTsKKyAgICBtX3JlbmRlclRhcmdldCA9IFdlYkNvcmU6OkRpcmVjdDJEOjpjcmVh
dGVTdXJmYWNlUmVuZGVyVGFyZ2V0KG1fZHhTdXJmYWNlLmdldCgpKTsKKworICAgIGF1dG8gYml0
bWFwUHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCk7CisgICAgSFJFU1VM
VCBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVTaGFyZWRCaXRtYXAoX191dWlkb2YoSURYR0lT
dXJmYWNlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fZHhTdXJmYWNlLmdldCgpKSwgJmJp
dG1hcFByb3BlcnRpZXMsICZtX3N1cmZhY2UpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURF
RChocikpOwogfQogCiBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsOjp+QmFja2luZ1N0
b3JlQmFja2VuZERpcmVjdDJESW1wbCgpCkBAIC03MCw3ICs3NSwxMiBAQCB2b2lkIEJhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGw6OnNjCiAgICAgICAgIEFTU0VSVChtX3NpemUuaGVpZ2h0
KCkgPj0gc2Nyb2xsUmVjdC5zaXplKCkuaGVpZ2h0KCkpOwogI2VuZGlmCiAgICAgICAgIG1fc2Ny
b2xsU3VyZmFjZVNpemUgPSBzb3VyY2VSZWN0LnNpemUoKTsKLSAgICAgICAgbV9zY3JvbGxTdXJm
YWNlID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChtX3JlbmRlclRhcmdldC5nZXQoKSwgbV9zY3Jv
bGxTdXJmYWNlU2l6ZSk7CisgICAgICAgIG1fZHhTY3JvbGxTdXJmYWNlID0gV2ViQ29yZTo6RGly
ZWN0MkQ6OmNyZWF0ZURYR0lTdXJmYWNlT2ZTaXplKG1fc2Nyb2xsU3VyZmFjZVNpemUsIG1fZGV2
aWNlLmdldCgpLCBmYWxzZSk7CisKKyAgICAgICAgbV9zY3JvbGxTdXJmYWNlID0gbnVsbHB0cjsK
KyAgICAgICAgYXV0byBiaXRtYXBQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRp
ZXMoKTsKKyAgICAgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5DcmVhdGVTaGFyZWRC
aXRtYXAoX191dWlkb2YoSURYR0lTdXJmYWNlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1f
ZHhTY3JvbGxTdXJmYWNlLmdldCgpKSwgJmJpdG1hcFByb3BlcnRpZXMsICZtX3Njcm9sbFN1cmZh
Y2UpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICB9CiAKICAg
ICBhdXRvIHNvdXJjZVJlY3RMb2NhdGlvbiA9IEludFNpemUoc291cmNlUmVjdC54KCksIHNvdXJj
ZVJlY3QueSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9C
YWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyRElt
cGwuaAkocmV2aXNpb24gMjQ5MzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KIAog
aW50ZXJmYWNlIElEMkQxQml0bWFwQnJ1c2g7Ci1pbnRlcmZhY2UgSVdJQ0JpdG1hcDsKK2ludGVy
ZmFjZSBJRFhHSVN1cmZhY2UxOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDcgKzM5
LDcgQEAgY2xhc3MgSW50U2l6ZTsKIAogY2xhc3MgQmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJE
SW1wbCBmaW5hbCA6IHB1YmxpYyBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkQgewogcHVibGlj
OgotICAgIFdFQkNPUkVfRVhQT1JUIEJhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwoY29u
c3QgSW50U2l6ZSYsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsKGNvbnN0IEludFNpemUmLCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciwgSUQzRDExRGV2aWNlMSopOwogICAgIHZpcnR1YWwgfkJhY2tpbmdT
dG9yZUJhY2tlbmREaXJlY3QyREltcGwoKTsKIAogcHJpdmF0ZToKQEAgLTQ4LDYgKzQ4LDcgQEAg
cHJpdmF0ZToKIAogICAgIEludFNpemUgbV9zY3JvbGxTdXJmYWNlU2l6ZTsKICAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IG1fc2Nyb2xsU3VyZmFjZTsKKyAgICBDT01QdHI8SURYR0lTdXJmYWNlMT4g
bV9keFNjcm9sbFN1cmZhY2U7CiAgICAgQ09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IG1fYml0bWFw
QnJ1c2g7CiAKICAgICBQQUw6Okh5c3RlcmVzaXNBY3Rpdml0eSBtX3Njcm9sbGVkSHlzdGVyZXNp
czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNDkzMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDA2LDcgKzQwNiw2IEBAIHZvaWQgZmlsbFJlY3QoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCk7CiAKICAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBQ
bGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxhdGZvcm1Db250ZXh0KTsKICAg
ICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxh
dGZvcm1Db250ZXh0LCByZWN0LCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRl
clRhcmdldCkgewogICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKICAg
ICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBmaWxsU291cmNlLmJy
dXNoLmdldCgpKTsKQEAgLTQyMyw3ICs0MjIsNiBAQCB2b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiBwCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpOwogCiAgICAgY29udGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgUGxh
dGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4dCk7CiAgICAg
RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRm
b3JtQ29udGV4dCwgY29sb3IsIHJlY3RdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQp
IHsKICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJl
bmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgcGxhdGZvcm1Db250ZXh0LmJydXNo
V2l0aENvbG9yKGNvbG9yKS5nZXQoKSk7CkBAIC00NDYsNyArNDQ0LDYgQEAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZQogICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gKHJh
ZGlpLnRvcExlZnQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgJiYg
cmFkaWkuYm90dG9tTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkg
JiYgcmFkaWkudG9wUmlnaHQoKS5oZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgpLmhlaWdo
dCgpKTsKICAgICBib29sIGhhc0N1c3RvbUZpbGwgPSBmYWxzZTsgLy8gRklYTUU6IFdoeSBpc24n
dCBhIEZpbGxTb3VyY2UgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24/CiAgICAgaWYgKCFoYXNDdXN0
b21GaWxsICYmIGVxdWFsV2lkdGhzICYmIGVxdWFsSGVpZ2h0cyAmJiByYWRpaS50b3BMZWZ0KCku
d2lkdGgoKSAqIDIgPT0gci53aWR0aCgpICYmIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSAqIDIg
PT0gci5oZWlnaHQoKSkgewotICAgICAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIocGxhdGZvcm1Db250ZXh0KTsKICAgICAgICAgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRl
clRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwgY29sb3IsIHJlY3Qs
IHJhZGlpLCByXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgICAg
ICBhdXRvIHJvdW5kZWRSZWN0ID0gRDJEMTo6Um91bmRlZFJlY3QociwgcmFkaWkudG9wTGVmdCgp
LndpZHRoKCksIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSk7CiAgICAgICAgICAgICByZW5kZXJU
YXJnZXQtPkZpbGxSb3VuZGVkUmVjdGFuZ2xlKCZyb3VuZGVkUmVjdCwgcGxhdGZvcm1Db250ZXh0
LmJydXNoV2l0aENvbG9yKGNvbG9yKS5nZXQoKSk7CkBAIC00NTcsNyArNDU0LDYgQEAgdm9pZCBm
aWxsUm91bmRlZFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZQogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHIsIGRyYXdGdW5jdGlvbik7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKHBsYXRmb3JtQ29udGV4dCk7CiAgICAgICAgIFBhdGggcGF0aDsKICAgICAgICAgcGF0aC5h
ZGRSb3VuZGVkUmVjdChyZWN0KTsKICAgICAgICAgZmlsbFBhdGgocGxhdGZvcm1Db250ZXh0LCBw
YXRoLCBjb2xvciwgc2hhZG93U3RhdGUpOwpAQCAtNDg5LDcgKzQ4NSw2IEBAIHZvaWQgZmlsbFJl
Y3RXaXRoR3JhZGllbnQoUGxhdGZvcm1Db250ZXgKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAKICAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElO
RV9fKTsKLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGxhdGZvcm1D
b250ZXh0KTsKICAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5j
dGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCByZWN0LCAmZ3JhZGllbnRdKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9
IHJlY3Q7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgZ3Jh
ZGllbnQpOwpAQCAtNTA2LDggKzUwMSw2IEBAIHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmIHAKICAgICAgICAgcGF0aC5hY3RpdmVQYXRoKCktPkNsb3NlKCk7CiAgICAgfQog
Ci0gICAgUGxhdGZvcm1Db250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKHBsYXRmb3JtQ29udGV4
dCk7Ci0KICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7
CiAKICAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKQEAgLTU3NCw3ICs1NjcsNiBA
QCB2b2lkIHN0cm9rZVBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmCiAgICAgCiAgICAgY29u
dGV4dC0+U2V0VGFncygxLCBfX0xJTkVfXyk7CiAKLSAgICBQbGF0Zm9ybUNvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIocGxhdGZvcm1Db250ZXh0KTsKICAgICBhdXRvIGJvdW5kaW5nUmVjdCA9
IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJU
YXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsICZwYXRoLCAmc3Ryb2tl
U291cmNlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIHJlbmRl
clRhcmdldC0+RHJhd0dlb21ldHJ5KHBhdGgucGxhdGZvcm1QYXRoKCksIHN0cm9rZVNvdXJjZS5i
cnVzaC5nZXQoKSwgc3Ryb2tlU291cmNlLnRoaWNrbmVzcywgcGxhdGZvcm1Db250ZXh0LnN0cm9r
ZVN0eWxlKCkpOwpAQCAtNzY2LDcgKzc1OCw3IEBAIHZvaWQgZHJhd05hdGl2ZUltYWdlKFBsYXRm
b3JtQ29udGV4dERpcmUKIHsKICAgICBhdXRvIGJpdG1hcFNpemUgPSBpbWFnZS0+R2V0U2l6ZSgp
OwogCi0gICAgZmxvYXQgY3VyckhlaWdodCA9IG9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0
KCkgPyBiaXRtYXBTaXplLndpZHRoIDogYml0bWFwU2l6ZS5oZWlnaHQ7CisgICAgZmxvYXQgY3Vy
ckhlaWdodCA9IG9wdGlvbnMub3JpZW50YXRpb24oKS51c2VzV2lkdGhBc0hlaWdodCgpID8gYml0
bWFwU2l6ZS53aWR0aCA6IGJpdG1hcFNpemUuaGVpZ2h0OwogICAgIGlmIChjdXJySGVpZ2h0IDw9
IHNyY1JlY3QueSgpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmgJ
KHJldmlzaW9uIDI0OTMyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EaXJlY3QyRE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDggKzEyOCw4IEBA
IHZvaWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwKIAogdm9pZCBkcmF3R2x5
cGhzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFN0
cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZvbnQmLCBkb3VibGUsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4mIGdseXBocywgY29u
c3QgVmVjdG9yPGZsb2F0PiYgaG9yaXpvbnRhbEFkdmFuY2VzLCBjb25zdCBWZWN0b3I8RFdSSVRF
X0dMWVBIX09GRlNFVD4mLCBmbG9hdCwgVGV4dERyYXdpbmdNb2RlRmxhZ3MsIGZsb2F0LCBjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBDb2xvciYpOwogCi12b2lkIGRyYXdOYXRpdmVJbWFnZShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYsIElXSUNCaXRtYXAqLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiwgSW50ZXJwb2xhdGlvblF1YWxpdHksIGZs
b2F0LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBkcmF3TmF0aXZlSW1hZ2UoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmLCBJRDJEMUJpdG1hcCosIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSwgZmxvYXQs
IGNvbnN0IFNoYWRvd1N0YXRlJik7Cit2b2lkIGRyYXdOYXRpdmVJbWFnZShQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYsIElXSUNCaXRtYXAqLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMsIGZsb2F0LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwordm9pZCBkcmF3TmF0aXZl
SW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBJRDJEMUJpdG1hcCosIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucywgZmxvYXQsIGNvbnN0IFNoYWRvd1N0YXRl
Jik7CiB2b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgUGF0aCYs
IGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGRyYXdQYXR0
ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgQ09NUHRyPElEMkQxQml0bWFwPiYmLCBjb25z
dCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0MkRVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDI0OTMyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPGQyZDFfMS5oPgorI2luY2x1ZGUgPGQz
ZDExXzEuaD4KICNpbmNsdWRlIDxzaGx3YXBpLmg+CiAjaW5jbHVkZSA8d2luY29kZWMuaD4KIApA
QCAtNDYsNiArNDcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBEaXJlY3Qy
RCB7CiAKK2NvbnN0ZXhwciBEWEdJX0ZPUk1BVCB3ZWJraXRUZXh0dXJlRm9ybWF0ID0gRFhHSV9G
T1JNQVRfQjhHOFI4QThfVU5PUk07Citjb25zdGV4cHIgRDJEMV9BTFBIQV9NT0RFIHdlYmtpdEFs
cGhhTW9kZSA9IEQyRDFfQUxQSEFfTU9ERV9QUkVNVUxUSVBMSUVEOworCiBJbnRTaXplIGJpdG1h
cFNpemUoSVdJQ0JpdG1hcFNvdXJjZSogYml0bWFwU291cmNlKQogewogICAgIFVJTlQgd2lkdGgs
IGhlaWdodDsKQEAgLTE0MCw3ICsxNDQsNyBAQCBEMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1h
dEZvclNvZnR3YXJlCiBEMkQxX1BJWEVMX0ZPUk1BVCBwaXhlbEZvcm1hdCgpCiB7CiAgICAgLy8g
U2luY2Ugd2UgbmVlZCB0byBpbnRlcmFjdCB3aXRoIEhEQyBmcm9tIHRpbWUtdG8tdGltZSwgd2Ug
YXJlIGZvcmNlZCB0byB1c2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gYW5kIEQyRDFfQUxQ
SEFfTU9ERV9QUkVNVUxUSVBMSUVECi0gICAgcmV0dXJuIEQyRDE6OlBpeGVsRm9ybWF0KERYR0lf
Rk9STUFUX0I4RzhSOEE4X1VOT1JNLCBEMkQxX0FMUEhBX01PREVfUFJFTVVMVElQTElFRCk7Cisg
ICAgcmV0dXJuIEQyRDE6OlBpeGVsRm9ybWF0KHdlYmtpdFRleHR1cmVGb3JtYXQsIHdlYmtpdEFs
cGhhTW9kZSk7CiB9CiAKIEdVSUQgd2ljQml0bWFwRm9ybWF0KCkKQEAgLTIyOCw2ICsyMzIsNTMg
QEAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaQogICAgIHJldHVybiBi
aXRtYXBDb250ZXh0OwogfQogCitDT01QdHI8SURYR0lTdXJmYWNlMT4gY3JlYXRlRFhHSVN1cmZh
Y2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgSUQzRDExRGV2aWNlMSogZGlyZWN0WERldmlj
ZSwgYm9vbCBjcm9zc1Byb2Nlc3MpCit7CisgICAgaWYgKCFkaXJlY3RYRGV2aWNlKQorICAgICAg
ICBkaXJlY3RYRGV2aWNlID0gRGlyZWN0MkQ6OmRlZmF1bHREaXJlY3RYRGV2aWNlKCk7CisKKyAg
ICAvLyBDcmVhdGUgdGhlIHJlbmRlciB0YXJnZXQgdGV4dHVyZQorICAgIEQzRDExX1RFWFRVUkUy
RF9ERVNDIGRlc2M7CisgICAgWmVyb01lbW9yeSgmZGVzYywgc2l6ZW9mKGRlc2MpKTsKKyAgICBk
ZXNjLldpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGRlc2MuSGVpZ2h0ID0gc2l6ZS5oZWlnaHQo
KTsKKyAgICBkZXNjLk1pcExldmVscyA9IDE7CisgICAgZGVzYy5BcnJheVNpemUgPSAxOworICAg
IGRlc2MuRm9ybWF0ID0gd2Via2l0VGV4dHVyZUZvcm1hdDsKKyAgICBkZXNjLlNhbXBsZURlc2Mu
Q291bnQgPSAxOworICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgIGRl
c2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFE
RVJfUkVTT1VSQ0U7CisgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgZGVzYy5NaXNj
RmxhZ3MgPSBEM0QxMV9SRVNPVVJDRV9NSVNDX0dESV9DT01QQVRJQkxFOworICAgIGlmIChjcm9z
c1Byb2Nlc3MpCisgICAgICAgIGRlc2MuTWlzY0ZsYWdzIHw9IEQzRDExX1JFU09VUkNFX01JU0Nf
U0hBUkVEX05USEFORExFIHwgRDNEMTFfUkVTT1VSQ0VfTUlTQ19TSEFSRURfS0VZRURNVVRFWDsK
KworICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IHRleHR1cmU7CisgICAgSFJFU1VMVCBociA9
IGRpcmVjdFhEZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgbnVsbHB0ciwgJnRleHR1cmUp
OworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRyPElEWEdJ
U3VyZmFjZTE+IHN1cmZhY2U7CisgICAgaHIgPSB0ZXh0dXJlLT5RdWVyeUludGVyZmFjZSgmc3Vy
ZmFjZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICByZXR1cm4g
c3VyZmFjZTsKK30KKworQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVTdXJmYWNlUmVu
ZGVyVGFyZ2V0KElEWEdJU3VyZmFjZTEqIHN1cmZhY2UpCit7CisgICAgYXV0byBwaXhlbEZvcm1h
dCA9IEQyRDE6OlBpeGVsRm9ybWF0KHdlYmtpdFRleHR1cmVGb3JtYXQsIHdlYmtpdEFscGhhTW9k
ZSk7CisKKyAgICBhdXRvIHByb3BlcnRpZXMgPSBEMkQxOjpSZW5kZXJUYXJnZXRQcm9wZXJ0aWVz
KEQyRDFfUkVOREVSX1RBUkdFVF9UWVBFX0RFRkFVTFQsCisgICAgICAgIHBpeGVsRm9ybWF0LCAw
LCAwLCBEMkQxX1JFTkRFUl9UQVJHRVRfVVNBR0VfR0RJX0NPTVBBVElCTEUsIEQyRDFfRkVBVFVS
RV9MRVZFTF8xMCk7CisKKyAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IHJlbmRlclRhcmdl
dDsKKyAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNy
ZWF0ZUR4Z2lTdXJmYWNlUmVuZGVyVGFyZ2V0KHN1cmZhY2UsIHByb3BlcnRpZXMsICZyZW5kZXJU
YXJnZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OworfQorCiB2b2lkIGNvcHlSZWN0RnJvbU9uZVN1
cmZhY2VUb0Fub3RoZXIoSUQyRDFCaXRtYXAqIGZyb20sIElEMkQxQml0bWFwKiB0bywgY29uc3Qg
SW50U2l6ZSYgc291cmNlT2Zmc2V0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXpl
JiBkZXN0T2Zmc2V0KQogewogICAgIEludFNpemUgc291cmNlQml0bWFwU2l6ZSA9IGZyb20tPkdl
dFBpeGVsU2l6ZSgpOwpAQCAtMjk5LDYgKzM1MCwxMDEgQEAgdm9pZCB3cml0ZURpYWdub3N0aWNQ
TkdUb1BhdGgoSUQyRDFSZW5kZQogICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIH0KIAorc3Rh
dGljIElEM0QxMURldmljZUNvbnRleHQxKiBpbW1lZGlhdGVDb250ZXh0ID0gbnVsbHB0cjsKKwor
SUQzRDExRGV2aWNlQ29udGV4dDEqIGR4Z2lJbW1lZGlhdGVDb250ZXh0KCkKK3sKKyAgICBpZiAo
IWltbWVkaWF0ZUNvbnRleHQpCisgICAgICAgIGRlZmF1bHREaXJlY3RYRGV2aWNlKCk7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChpbW1lZGlhdGVDb250ZXh0KTsKKyAgICByZXR1cm4gaW1tZWRpYXRl
Q29udGV4dDsKK30KKworSUQzRDExRGV2aWNlMSogZGVmYXVsdERpcmVjdFhEZXZpY2UoKQorewor
ICAgIHN0YXRpYyBJRDNEMTFEZXZpY2UxKiBkZWZhdWx0RGV2aWNlMSA9IG51bGxwdHI7CisKKyAg
ICBpZiAoIWRlZmF1bHREZXZpY2UxKSB7CisgICAgICAgIGludCBkZXZpY2VGbGFncyA9IEQzRDEx
X0NSRUFURV9ERVZJQ0VfQkdSQV9TVVBQT1JUOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgZGV2
aWNlRmxhZ3MgfD0gRDNEMTFfQ1JFQVRFX0RFVklDRV9ERUJVRzsKKyNlbmRpZgorCisgICAgICAg
IElEM0QxMURldmljZSogZGVmYXVsdERldmljZSA9IG51bGxwdHI7CisgICAgICAgIEQzRF9GRUFU
VVJFX0xFVkVMIGZlYXR1cmVMZXZlbCA9IHsgfTsKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4
dCogaW1tZWRpYXRlRGV2aWNlQ29udGV4dCA9IG51bGxwdHI7CisgICAgICAgIEhSRVNVTFQgaHIg
PSBEM0QxMUNyZWF0ZURldmljZShudWxscHRyLCBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsIG51
bGxwdHIsIGRldmljZUZsYWdzLCBudWxscHRyLCAwLCBEM0QxMV9TREtfVkVSU0lPTiwgJmRlZmF1
bHREZXZpY2UsICZmZWF0dXJlTGV2ZWwsICZpbW1lZGlhdGVEZXZpY2VDb250ZXh0KTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICAgICAgaHIgPSBkZWZhdWx0
RGV2aWNlLT5RdWVyeUludGVyZmFjZSgmZGVmYXVsdERldmljZTEpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAgZGVmYXVsdERldmljZTEtPkFkZFJlZigp
OworCisgICAgICAgIGhyID0gaW1tZWRpYXRlRGV2aWNlQ29udGV4dC0+UXVlcnlJbnRlcmZhY2Uo
X191dWlkb2YoSUQzRDExRGV2aWNlQ29udGV4dDEpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
JmltbWVkaWF0ZUNvbnRleHQpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CisgICAgICAgIGltbWVkaWF0ZUNvbnRleHQtPkFkZFJlZigpOworICAgIH0KKworICAgIHJl
dHVybiBkZWZhdWx0RGV2aWNlMTsKK30KKworYm9vbCBjcmVhdGVEZXZpY2VBbmRDb250ZXh0KENP
TVB0cjxJRDNEMTFEZXZpY2UxPiYgZDNkRGV2aWNlLCBDT01QdHI8SUQzRDExRGV2aWNlQ29udGV4
dDE+JiBpbW1lZGlhdGVDb250ZXh0KQoreworICAgIGludCBkZXZpY2VGbGFncyA9IEQzRDExX0NS
RUFURV9ERVZJQ0VfQkdSQV9TVVBQT1JUOworI2lmbmRlZiBOREVCVUcKKyAgICBkZXZpY2VGbGFn
cyB8PSBEM0QxMV9DUkVBVEVfREVWSUNFX0RFQlVHOworI2VuZGlmCisKKyAgICBEM0RfRkVBVFVS
RV9MRVZFTCBmZWF0dXJlTGV2ZWwgPSB7IH07CisgICAgSUQzRDExRGV2aWNlKiBkZWZhdWx0RGV2
aWNlID0gbnVsbHB0cjsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0KiBpbW1lZGlhdGVEZXZpY2VD
b250ZXh0ID0gbnVsbHB0cjsKKyAgICBIUkVTVUxUIGhyID0gOjpEM0QxMUNyZWF0ZURldmljZShu
dWxscHRyLCBEM0RfRFJJVkVSX1RZUEVfSEFSRFdBUkUsIG51bGxwdHIsIGRldmljZUZsYWdzLCBu
dWxscHRyLCAwLCBEM0QxMV9TREtfVkVSU0lPTiwgJmRlZmF1bHREZXZpY2UsICZmZWF0dXJlTGV2
ZWwsICZpbW1lZGlhdGVEZXZpY2VDb250ZXh0KTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKworICAgIGhyID0gZGVmYXVsdERldmljZS0+UXVlcnlJbnRlcmZhY2UoJmQzZERl
dmljZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgZGVmYXVsdERl
dmljZS0+UmVsZWFzZSgpOworCisgICAgaHIgPSBpbW1lZGlhdGVEZXZpY2VDb250ZXh0LT5RdWVy
eUludGVyZmFjZSgmaW1tZWRpYXRlQ29udGV4dCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7CisgICAgaW1tZWRpYXRlQ29udGV4dC0+UmVsZWFzZSgpOworICAgIHJldHVybiB0
cnVlOworfQorCitDT01QdHI8SURYR0lEZXZpY2U+IHRvRFhHSURldmljZShjb25zdCBDT01QdHI8
SUQzRDExRGV2aWNlMT4mIGQzZERldmljZSkKK3sKKyAgICBpZiAoIWQzZERldmljZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SURYR0lEZXZpY2U+IGR4Z2lEZXZpY2U7
CisgICAgSFJFU1VMVCBociA9IGQzZERldmljZS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSURY
R0lEZXZpY2UpLCAodm9pZCAqKikmZHhnaURldmljZSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBkeGdpRGV2aWNlOworfQor
CitDT01QdHI8SURYR0lGYWN0b3J5Mj4gZmFjdG9yeUZvckRYR0lEZXZpY2UoY29uc3QgQ09NUHRy
PElEWEdJRGV2aWNlPiYgZGV2aWNlKQoreworICAgIGlmICghZGV2aWNlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIENPTVB0cjxJRFhHSUFkYXB0ZXI+IGFkYXB0b3I7CisgICAgSFJF
U1VMVCBociA9IGRldmljZS0+R2V0UGFyZW50KF9fdXVpZG9mKElEWEdJQWRhcHRlciksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYWRhcHRvcikpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOworCisgICAgQ09NUHRyPElEWEdJRmFjdG9yeT4gZmFjdG9yeTsKKyAgICBociA9
IGFkYXB0b3ItPkdldFBhcmVudChfX3V1aWRvZihJRFhHSUZhY3RvcnkpLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJmZhY3RvcnkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIp
KTsKKworICAgIENPTVB0cjxJRFhHSUZhY3RvcnkyPiBmYWN0b3J5MjsKKyAgICBociA9IGZhY3Rv
cnktPlF1ZXJ5SW50ZXJmYWNlKCZmYWN0b3J5Mik7IAorICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOworICAgIAorICAgIHJldHVybiBmYWN0b3J5MjsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgRGlyZWN0MkQKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVz
LmgJKHJldmlzaW9uIDI0OTMyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTcg
QEAKICNpbmNsdWRlICJDT01QdHIuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5j
bHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtRXhwb3J0TWFjcm9zLmgiCiAKIGlu
dGVyZmFjZSBJRDJEMUJpdG1hcDsKIGludGVyZmFjZSBJRDJEMUJpdG1hcFJlbmRlclRhcmdldDsK
IGludGVyZmFjZSBJRDJEMURDUmVuZGVyVGFyZ2V0OwogaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFy
Z2V0OworaW50ZXJmYWNlIElEM0QxMURldmljZTE7CitpbnRlcmZhY2UgSUQzRDExRGV2aWNlQ29u
dGV4dDE7CitpbnRlcmZhY2UgSURYR0lEZXZpY2U7CitpbnRlcmZhY2UgSURYR0lGYWN0b3J5MjsK
K2ludGVyZmFjZSBJRFhHSVN1cmZhY2UxOwogaW50ZXJmYWNlIElXSUNCaXRtYXBTb3VyY2U7CiBp
bnRlcmZhY2UgSVdJQ0JpdG1hcDsKIApAQCAtNzMsOSArNzksMTcgQEAgQ09NUHRyPElEMkQxUmVu
ZGVyVGFyZ2V0PiBjcmVhdGVSZW5kZXJUYQogQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
PiBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoY29uc3QgSW50U2l6ZSYsIElEMkQxUmVu
ZGVyVGFyZ2V0KiA9IG51bGxwdHIsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMS4wKTsKIENP
TVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gY3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KElE
MkQxUmVuZGVyVGFyZ2V0KiA9IG51bGxwdHIpOwogQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+
IGNyZWF0ZUdESVJlbmRlclRhcmdldCgpOworQ09NUHRyPElEWEdJU3VyZmFjZTE+IGNyZWF0ZURY
R0lTdXJmYWNlT2ZTaXplKGNvbnN0IEludFNpemUmLCBJRDNEMTFEZXZpY2UxKiwgYm9vbCBjcm9z
c1Byb2Nlc3MpOworQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVTdXJmYWNlUmVuZGVy
VGFyZ2V0KElEWEdJU3VyZmFjZTEqKTsKIAogdm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9B
bm90aGVyKElEMkQxQml0bWFwKiBmcm9tLCBJRDJEMUJpdG1hcCogdG8sIGNvbnN0IEludFNpemUm
IHNvdXJjZU9mZnNldCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQg
PSBJbnRTaXplKCkpOwogCitXRUJDT1JFX0VYUE9SVCBJRDNEMTFEZXZpY2VDb250ZXh0MSogZHhn
aUltbWVkaWF0ZUNvbnRleHQoKTsKK1dFQkNPUkVfRVhQT1JUIElEM0QxMURldmljZTEqIGRlZmF1
bHREaXJlY3RYRGV2aWNlKCk7CitXRUJDT1JFX0VYUE9SVCBib29sIGNyZWF0ZURldmljZUFuZENv
bnRleHQoQ09NUHRyPElEM0QxMURldmljZTE+JiwgQ09NUHRyPElEM0QxMURldmljZUNvbnRleHQx
PiYpOworV0VCQ09SRV9FWFBPUlQgQ09NUHRyPElEWEdJRGV2aWNlPiB0b0RYR0lEZXZpY2UoY29u
c3QgQ09NUHRyPElEM0QxMURldmljZTE+Jik7CitXRUJDT1JFX0VYUE9SVCBDT01QdHI8SURYR0lG
YWN0b3J5Mj4gZmFjdG9yeUZvckRYR0lEZXZpY2UoY29uc3QgQ09NUHRyPElEWEdJRGV2aWNlPiYp
OworCiB2b2lkIHdyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChJRDJEMVJlbmRlclRhcmdldCosIElE
MkQxQml0bWFwKiwgTFBDV1NUUiBmaWxlTmFtZSk7CiAKIH0gLy8gbmFtZXNwYWNlIERpcmVjdDJE
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0OTMyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNywxOSArMjA3LDE5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGEKICAgICBEaXJlY3QyRDo6cmVzdG9yZSgq
cGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2
ZUltYWdlKGNvbnN0IENPTVB0cjxJRDJEMUJpdG1hcD4mIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoY29uc3QgQ09NUHRyPElEMkQxQml0bWFwPiYgaW1hZ2UsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGlt
YWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUs
IG9yaWVudGF0aW9uKTsKKyAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGlt
YWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZv
cm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBj
b21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbiwgc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSwgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOworICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoKnBsYXRmb3JtQ29udGV4dCgpLCBp
bWFnZS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUu
YWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRz
dFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCkBAIC00MjMsMTkgKzQyMywxOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Zmx1c2goKQogICAgIERpcmVjdDJEOjpmbHVzaCgqcGxhdGZvcm1D
b250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJh
d1BhdHRlcm4oaW1hZ2UsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOworICAgICAgICBtX2lt
cGwtPmRyYXdQYXR0ZXJuKGltYWdlLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgaWYgKGF1dG8gdGlsZUltYWdl
ID0gaW1hZ2UubmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUodGhpcykpCi0gICAgICAgIERpcmVj
dDJEOjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIFdURk1vdmUodGlsZUltYWdlKSwg
SW50U2l6ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICAgICAgRGlyZWN0
MkQ6OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgV1RGTW92ZSh0aWxlSW1hZ2UpLCBJ
bnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUo
KSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0OTMyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMTcgKzI4MywxNyBAQCBJbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjCiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dElt
cGw6OmRyYXdUaWxlZEltYWdlSW1wbChncmFwaGljc0NvbnRleHQoKSwgaW1hZ2UsIGRlc3RpbmF0
aW9uLCBzb3VyY2UsIHRpbGVTY2FsZUZhY3RvciwgaFJ1bGUsIHZSdWxlLCBpbWFnZVBhaW50aW5n
T3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3TmF0
aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKICAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShtX3BsYXRmb3JtQ29udGV4dCwgaW1hZ2UuZ2V0
KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVu
ZE1vZGUsIG9yaWVudGF0aW9uLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5LCBzdGF0
ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OmRy
YXdOYXRpdmVJbWFnZShtX3BsYXRmb3JtQ29udGV4dCwgaW1hZ2UuZ2V0KCksIGltYWdlU2l6ZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRy
YXdQYXR0ZXJuKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd1BhdHRlcm4oSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKICAgICBhdXRvKiBjb250ZXh0ID0gJmdyYXBoaWNzQ29udGV4dCgpOwogICAgIGlmIChhdXRv
IHN1cmZhY2UgPSBpbWFnZS5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAg
ICAgICAgRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKHN1
cmZhY2UpLCBJbnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOworICAgICAg
ICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoc3VyZmFj
ZSksIEludFNpemUoaW1hZ2Uuc2l6ZSgpKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5MzI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDksMTIgKzI0OSwxMiBAQCBDT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVy
Ojpjb3B5TmF0CiAgICAgcmV0dXJuIGltYWdlOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCit2b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXco
ZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgYmxlbmRNb2RlKTsKKyAgICBpbWFn
ZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwog
fQogCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit2b2lkIEltYWdlQnVmZmVy
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7CiAgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7
CiAgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRp
b25TY2FsZSk7CkBAIC0yNjUsMTAgKzI2NSwxMCBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYKICAgICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGlibGVC
aXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBi
bGVuZE1vZGUpOworICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxlQml0
bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25z
KTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewogICAgIEZsb2F0
UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwogICAgIGFkanVzdGVkU3JjUmVjdC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwpAQCAtMjc2LDE0ICsyNzYs
MTQgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDbwogICAgIGlmICgh
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKICAgICAgICAgaWYgKCZkZXN0Q29u
dGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
IHsKICAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJh
Y2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVw
IGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5n
LCBvcCwgYmxlbmRNb2RlKTsKKyAgICAgICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYg
KFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVy
bihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHNwYWNpbmcsIG9wLCBibGVuZE1vZGUpOworICAgICAgICAgICAgICAgIGltYWdl
Rm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNv
cHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3AsIGJsZW5kTW9kZSk7CisgICAgICAgICAgICBjb3B5LT5kcmF3
UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVj
dDJELmNwcAkocmV2aXNpb24gMjQ5MzI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3
IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdGcmFtZU1hdGNoaW5nU291cmMKICAgICAgICAgaWYg
KGltYWdlICYmIGNsYW1wVG88aW50PihpbWFnZVNpemUuaGVpZ2h0KCkpID09IHN0YXRpY19jYXN0
PGludD4oc3JjU2l6ZS5oZWlnaHQoKSkgJiYgY2xhbXBUbzxpbnQ+KGltYWdlU2l6ZS53aWR0aCgp
KSA9PSBzdGF0aWNfY2FzdDxpbnQ+KHNyY1NpemUud2lkdGgoKSkpIHsKICAgICAgICAgICAgIHNp
emVfdCBjdXJyZW50RnJhbWUgPSBtX2N1cnJlbnRGcmFtZTsKICAgICAgICAgICAgIG1fY3VycmVu
dEZyYW1lID0gaTsKLSAgICAgICAgICAgIGRyYXcoY3R4dCwgZHN0UmVjdCwgRmxvYXRSZWN0KDAu
MGYsIDAuMGYsIHNyY1NpemUud2lkdGgoKSwgc3JjU2l6ZS5oZWlnaHQoKSksIGNvbXBvc2l0ZU9w
LCBCbGVuZE1vZGU6Ok5vcm1hbCwgRGVjb2RpbmdNb2RlOjpTeW5jaHJvbm91cywgSW1hZ2VPcmll
bnRhdGlvbjo6Tm9uZSk7CisgICAgICAgICAgICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVj
dCgwLjBmLCAwLjBmLCBzcmNTaXplLndpZHRoKCksIHNyY1NpemUuaGVpZ2h0KCkpLCB7IGNvbXBv
c2l0ZU9wIH0pOwogICAgICAgICAgICAgbV9jdXJyZW50RnJhbWUgPSBjdXJyZW50RnJhbWU7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTg5LDcgKzg5LDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZHJhd0ZyYW1lTWF0Y2hpbmdTb3VyYwogCiAgICAgLy8gTm8gaW1hZ2Ugb2YgdGhl
IGNvcnJlY3Qgc2l6ZSB3YXMgZm91bmQsIGZhbGxiYWNrIHRvIGRyYXdpbmcgdGhlIGN1cnJlbnQg
ZnJhbWUKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKLSAg
ICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lk
dGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgY29tcG9zaXRlT3AsIEJsZW5kTW9kZTo6Tm9ybWFs
LCBEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzLCBJbWFnZU9yaWVudGF0aW9uOjpOb25lKTsKKyAg
ICBkcmF3KGN0eHQsIGRzdFJlY3QsIEZsb2F0UmVjdCgwLjBmLCAwLjBmLCBpbWFnZVNpemUud2lk
dGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKSwgeyBjb21wb3NpdGVPcCB9KTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCShyZXZpc2lvbiAyNDkzMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsNyArMjQ3LDcgQEAgTmF0aXZlSW1h
Z2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlKGNvbgogICAgIFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEIHBsYXRmb3JtQ29udGV4dChuYXRpdmVJbWFnZVRhcmdldC5nZXQoKSk7CiAgICAgR3JhcGhp
Y3NDb250ZXh0IGxvY2FsQ29udGV4dCgmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6
OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogCi0gICAgZHJhdyhsb2Nh
bENvbnRleHQsIHJlY3QoKSwgcmVjdCgpLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBCbGVuZE1vZGU6
Ok5vcm1hbCwgRGVjb2RpbmdNb2RlOjpTeW5jaHJvbm91cywgSW1hZ2VPcmllbnRhdGlvbjo6Tm9u
ZSk7CisgICAgZHJhdyhsb2NhbENvbnRleHQsIHJlY3QoKSwgcmVjdCgpLCB7IENvbXBvc2l0ZVNv
dXJjZU92ZXIsIEJsZW5kTW9kZTo6Tm9ybWFsLCBEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzLCBJ
bWFnZU9yaWVudGF0aW9uOjpOb25lIH0pOwogCiAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBuYXRp
dmVJbWFnZTsKICAgICBIUkVTVUxUIGhyID0gbmF0aXZlSW1hZ2VUYXJnZXQtPkdldEJpdG1hcCgm
bmF0aXZlSW1hZ2UpOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTMyOCkKKysrIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzIgQEAKKzIwMTktMDgt
MzAgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgW0ZUV10g
VXNlIERpcmVjdFggU2hhcmVkUmVzb3VyY2UgYXMgYmFzaXMgZm9yIFNoYXJlZEJpdG1hcAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxMTU3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBDdXJyZW50bHkg
YW4gSUQyRDFCaXRtYXAgaXMgdXNlZCBhcyB0aGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIFNoYXJl
ZEJpdG1hcCB0aGF0IGlzIHRoZQorICAgICAgICBiYXNlIHR5cGUgZm9yIHNoYXJpbmcgZGF0YSBi
ZXR3ZWVuIHRoZSBXZWJDb250ZW50IFByb2Nlc3MgYW5kIHRoZSBVSVByb2Nlc3MuIEhvd2V2ZXIs
IHRoaXMKKyAgICAgICAgaW52b2x2ZXMgbW92aW5nIEdQVSBtZW1vcnkgdG8gbG9jYWwgbWVtb3J5
LCBjb3B5aW5nIHRoYXQgbWVtb3J5IGludG8gdGhlIFNoYXJlZE1lbW9yeSBtZW1iZXIKKyAgICAg
ICAgb2YgdGhlIFNoYXJlZEJpdG1hcCwgdGhlbiBidWlsZGluZyBhIG5ldyBHUFUgYml0bWFwIG9u
IHRoZSBVSVByb2Nlc3Mgc2lkZSBmcm9tIHRoYXQgU2hhcmVkTWVtb3J5LgorCisgICAgICAgIFBy
b2ZpbGluZyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBzaW5nbGUgbGFyZ2VzdCBwbGFjZSBG
VFcgV2ViS2l0IHNwZW5kcyBpdHMgdGltZS4KKworICAgICAgICBJbnN0ZWFkLCB3ZSBzaG91bGQg
dXNlIERpcmVjdDJEJ3MgYWJpbGl0eSB0byByZW5kZXIgdG8gYW4gSURYR0lTdXJmYWNlLCB3aGlj
aCBjYW4gYmUgc2hhcmVkCisgICAgICAgIGJldHdlZW4gbXVsdGlwbGUgcHJvY2Vzc2VzLiBUaGlz
IHNob3VsZCBhdm9pZCB0aGUgR1BVLT5DUFUgY29weSwgdGhlIERpcmVjdDJELWFsbG9jYXRlZAor
ICAgICAgICBDUFUtPlNoYXJlZCBNZW1vcnkgY29weSwgYW5kIHRoZSBzaGFyZWQgbWVtb3J5IHRv
IEdQVSBjb3B5LgorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAg
ICAgICAgKiBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS93aW4v
U2hhcmVkTWVtb3J5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5k
bGU6OmVuY29kZUhhbmRsZSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6ZW5jb2RlIGNvbnN0KTogVXNlIG5ldyBoZWxwZXIgZnVuY3Rpb24uCisgICAgICAg
IChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGVIYW5kbGUpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZSk6IFVzZSBuZXcgaGVs
cGVyIGZ1bmN0aW9uLgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOiBBZGQgRDNYMTEgbGli
cmFyaWVzLgorICAgICAgICAqIFNoYXJlZC9TaGFyZWFibGVCaXRtYXAuY3BwOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmVuY29kZSBjb25zdCk6IEVu
Y29kZSBzaGFyZWQgcmVzb3VyY2UgaGFuZGxlIGZvciBEWCB0ZXh0dXJlLgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlY29kZSk6IERpdHRvIChidXQg
ZGVjb2RlKS4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpTaGFyZWFibGVCaXRt
YXApOiBDcmVhdGUgU2hhcmVkUmVzb3VyY2UgKGlmIG5lZWRlZCkuCisgICAgICAgIChXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJpdG1hcCk6IEFkZCBjbGVhbnVwIGNvZGUgZm9y
IFNoYXJlZFJlc291cmUuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6bnVtQnl0
ZXNGb3JTaXplKTogT25seSBhbGxvY2F0ZSBhIHNtYWxsIG1lbW9yeSBzdG9yZSB3aGVuIHVzaW5n
IEdQVSB0ZXh0dXJlcy4KKyAgICAgICAgKiBTaGFyZWQvU2hhcmVhYmxlQml0bWFwLmg6CisgICAg
ICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6ZHhTdXJmYWNlKToKKyAgICAgICAgKiBTaGFy
ZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWRSZXNvdXJjZSk6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OmRpc3Bvc2VTaGFyZWRSZXNvdXJjZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmxlYWtTaGFyZWRSZXNvdXJjZSk6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCk6IFVwZGF0ZSBmb3IgbmV3IGRhdGEgdHlwZXMuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJs
ZUJpdG1hcDo6cGFpbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVEaXJlY3QyRFN1cmZhY2UpOiBVcGRhdGUgZm9yIG5ldyBkYXRhIHR5cGVzLgorICAg
ICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUltYWdlKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OmNyZWF0ZVN1cmZhY2VGcm9tRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6c3luYyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0JhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJv
eHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkJhY2tpbmdTdG9yZTo6Y3JlYXRlQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdT
dG9yZTo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6OmluY29ycG9yYXRl
VXBkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcDoKKyAg
ICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBhZ2VQcm94eVdpbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZGV2aWNlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpzZXREZXZpY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOiBJbml0aWFsaXplIERpcmVjdFgg
c3R1ZmYuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhaW50KTogVXNlIG5ldyBEaXJldFgg
ZHJhd2luZyBsb2dpYy4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6b25TaXplRXZlbnQpOiBV
cGRhdGUgU3dhcENoYWluJ3MgYnVmZmVyIHNpemVzIHdoZW4gcmVzaXppbmcuCisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6OnNldHVwU3dhcENoYWluKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OmNvbmZpZ3VyZUJhY2tpbmdTdG9yZSk6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpkM2REZXZpY2Up
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdB
cmVhQ29vcmRpbmF0ZWRHcmFwaGljczo6ZGlzcGxheSk6CisKIDIwMTktMDgtMzAgIEtlaXRoIFJv
bGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBBcHBLaXRDb21wYXRp
YmlsaXR5RGVjbGFyYXRpb25zLmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm1GVFcuY21h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNp
b24gMjQ5MzI4KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybUZUVy5jbWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMTc1LDcgKzE3NSw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9MSUJSQVJJRVMKICAg
ICBQUklWQVRFCiAgICAgICAgICR7T1BFTlNTTF9MSUJSQVJJRVN9CiAgICAgICAgIEQyZDEubGli
CisgICAgICAgIEQzZDExLmxpYgogICAgICAgICBEd3JpdGUKKyAgICAgICAgRHhnaS5saWIKICAg
ICAgICAgRHhndWlkCiAgICAgICAgIFdpbmRvd3NDb2RlY3MKICAgICAgICAgbWZ1dWlkLmxpYgpJ
bmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCShyZXZpc2lvbiAyNDkzMjgp
CisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxNyBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzgsNiAr
NzgsMTAgQEAgcHVibGljOgogICAgICAgICBJUEM6OkF0dGFjaG1lbnQgcmVsZWFzZUF0dGFjaG1l
bnQoKSBjb25zdDsKICAgICAgICAgdm9pZCBhZG9wdEF0dGFjaG1lbnQoSVBDOjpBdHRhY2htZW50
JiYpOwogI2VuZGlmCisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgc3RhdGljIHZvaWQgZW5jb2Rl
SGFuZGxlKElQQzo6RW5jb2RlciYsIEhBTkRMRSk7CisgICAgICAgIHN0YXRpYyBPcHRpb25hbDxI
QU5ETEU+IGRlY29kZUhhbmRsZShJUEM6OkRlY29kZXImKTsKKyNlbmRpZgogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTaGFyZWRNZW1vcnk7CiAjaWYgVVNFKFVOSVhfRE9NQUlO
X1NPQ0tFVFMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3dpbi9TaGFyZWRNZW1vcnlX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vd2luL1NoYXJlZE1l
bW9yeVdpbi5jcHAJKHJldmlzaW9uIDI0OTMyOCkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
d2luL1NoYXJlZE1lbW9yeVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2NiwxNyBA
QCB2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUoSVBDOjpFCiB7CiAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obV9zaXplKTsKIAorICAgIGVuY29kZUhhbmRsZShl
bmNvZGVyLCBtX2hhbmRsZSk7CisKICAgICAvLyBIYW5kIG9mZiBvd25lcnNoaXAgb2Ygb3VyIEhB
TkRMRSB0byB0aGUgcmVjZWl2aW5nIHByb2Nlc3MuIEl0IHdpbGwgY2xvc2UgaXQgZm9yIHVzLgog
ICAgIC8vIEZJWE1FOiBJZiB0aGUgcmVjZWl2aW5nIHByb2Nlc3MgY3Jhc2hlcyBiZWZvcmUgaXQg
cmVjZWl2ZXMgdGhlIG1lbW9yeSwgdGhlIG1lbW9yeSB3aWxsIGJlCiAgICAgLy8gbGVha2VkLiBT
ZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNDc1MDI+LgotICAgIGVuY29kZXIgPDwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50NjRfdD4obV9oYW5kbGUpOwogICAgIG1faGFuZGxlID0gMDsKK30KKwordm9p
ZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlSGFuZGxlKElQQzo6RW5jb2RlciYgZW5jb2Rl
ciwgSEFORExFIGhhbmRsZSkKK3sKKyAgICBlbmNvZGVyIDw8IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDY0X3Q+KGhhbmRsZSk7CiAKICAgICAvLyBTZW5kIGFsb25nIG91ciBQSUQgc28gdGhhdCB0aGUg
cmVjZWl2aW5nIHByb2Nlc3MgY2FuIGR1cGxpY2F0ZSB0aGUgSEFORExFIGZvciBpdHMgb3duIHVz
ZS4KICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pig6OkdldEN1cnJlbnRQcm9j
ZXNzSWQoKSk7CkBAIC0xMTMsMjEgKzExOSwzMCBAQCBib29sIFNoYXJlZE1lbW9yeTo6SGFuZGxl
OjpkZWNvZGUoSVBDOjpECiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgYXV0byBwcm9jZXNzU3BlY2lmaWNIYW5kbGUgPSBkZWNvZGVI
YW5kbGUoZGVjb2Rlcik7CisgICAgaWYgKCFwcm9jZXNzU3BlY2lmaWNIYW5kbGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGhhbmRsZS5tX2hhbmRsZSA9IHByb2Nlc3NTcGVjaWZpY0hh
bmRsZS52YWx1ZSgpOworICAgIGhhbmRsZS5tX3NpemUgPSBzaXplOworICAgIHJldHVybiB0cnVl
OworfQorCitPcHRpb25hbDxIQU5ETEU+IFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGVIYW5k
bGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorewogICAgIHVpbnQ2NF90IHNvdXJjZUhhbmRsZTsK
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNvdXJjZUhhbmRsZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIHVpbnQzMl90IHNvdXJj
ZVBJRDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNvdXJjZVBJRCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIEhBTkRMRSBkdXBs
aWNhdGVkSGFuZGxlOwogICAgIGlmICghZ2V0RHVwbGljYXRlZEhhbmRsZShyZWludGVycHJldF9j
YXN0PEhBTkRMRT4oc291cmNlSGFuZGxlKSwgc291cmNlUElELCBkdXBsaWNhdGVkSGFuZGxlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0g
ICAgaGFuZGxlLm1faGFuZGxlID0gZHVwbGljYXRlZEhhbmRsZTsKLSAgICBoYW5kbGUubV9zaXpl
ID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZHVwbGljYXRlZEhhbmRsZTsK
IH0KIAogUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjphbGxvY2F0ZShzaXplX3Qg
c2l6ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNwcAkocmV2
aXNpb24gMjQ5MzI4KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTQgQEAgdm9pZCBTaGFyZWFibGVCaXRtYXA6
OkNvbmZpZ3VyYXRpb246OmVuYwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIGVuY29kZXIgPDwg
Y29sb3JTcGFjZTsKICNlbmRpZgorI2lmIFVTRShESVJFQ1QyRCkKKyAgICBTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6ZW5jb2RlSGFuZGxlKGVuY29kZXIsIHNoYXJlZFJlc291cmNlSGFuZGxlKTsKKwor
ICAgIC8vIEhhbmQgb2ZmIG93bmVyc2hpcCBvZiBvdXIgSEFORExFIHRvIHRoZSByZWNlaXZpbmcg
cHJvY2Vzcy4gSXQgd2lsbCBjbG9zZSBpdCBmb3IgdXMuCisgICAgLy8gRklYTUU6IElmIHRoZSBy
ZWNlaXZpbmcgcHJvY2VzcyBjcmFzaGVzIGJlZm9yZSBpdCByZWNlaXZlcyB0aGUgbWVtb3J5LCB0
aGUgbWVtb3J5IHdpbGwgYmUKKyAgICAvLyBsZWFrZWQuIFNlZSA8aHR0cDovL3dlYmtpdC5vcmcv
Yi80NzUwMj4uCisgICAgc2hhcmVkUmVzb3VyY2VIYW5kbGUgPSBudWxscHRyOworI2VuZGlmCiB9
CiAKIGJvb2wgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uOjpkZWNvZGUoSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyLCBDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQpAQCAtNzgsNiArODYs
MTMgQEAgYm9vbCBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb246OmRlYwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoY29uZmlndXJhdGlvbi5jb2xvclNwYWNlKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCisjaWYgVVNFKERJUkVDVDJEKQorICAgIGF1dG8gcHJvY2Vzc1NwZWNp
ZmljSGFuZGxlID0gU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZUhhbmRsZShkZWNvZGVyKTsK
KyAgICBpZiAoIXByb2Nlc3NTcGVjaWZpY0hhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSA9IHByb2Nlc3NTcGVjaWZp
Y0hhbmRsZS52YWx1ZSgpOworI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1Niwx
MiArMTcxLDE4IEBAIFNoYXJlYWJsZUJpdG1hcDo6U2hhcmVhYmxlQml0bWFwKGNvbnN0IEkKICAg
ICAsIG1fc2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeSkKICAgICAsIG1fZGF0YShudWxscHRyKQog
eworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBjcmVhdGVTaGFyZWRSZXNvdXJjZSgpOworI2VuZGlm
CiB9CiAKIFNoYXJlYWJsZUJpdG1hcDo6flNoYXJlYWJsZUJpdG1hcCgpCiB7CiAgICAgaWYgKCFp
c0JhY2tlZEJ5U2hhcmVkTWVtb3J5KCkpCiAgICAgICAgIGZhc3RGcmVlKG1fZGF0YSk7CisjaWYg
VVNFKERJUkVDVDJEKQorICAgIGRpc3Bvc2VTaGFyZWRSZXNvdXJjZSgpOworI2VuZGlmCiB9CiAK
IHZvaWQqIFNoYXJlYWJsZUJpdG1hcDo6ZGF0YSgpIGNvbnN0CkBAIC0xNzUsNyArMTk2LDEyIEBA
IHZvaWQqIFNoYXJlYWJsZUJpdG1hcDo6ZGF0YSgpIGNvbnN0CiAKIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBTaGFyZWFibGVCaXRtYXA6Om51bUJ5dGVzRm9yU2l6ZShXZWJDb3Jl
OjpJbnRTaXplIHNpemUsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlvbiYgY29u
ZmlndXJhdGlvbikKIHsKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgLy8gV2UgcGFzcyByZWZlcmVu
Y2VzIHRvIEdQVSB0ZXh0dXJlcywgc28gbm8gbmVlZCB0byBhbGxvY2F0ZSBmcmFtZSBidWZmZXJz
IGhlcmUuIEp1c3Qgc2VuZCBhIHNtYWxsIGJpdCBvZiBkYXRhLgorICAgIHJldHVybiBzaXplb2Yo
dm9pZCopOworI2Vsc2UKICAgICByZXR1cm4gY2FsY3VsYXRlQnl0ZXNQZXJSb3coc2l6ZSwgY29u
ZmlndXJhdGlvbikgKiBzaXplLmhlaWdodCgpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvU2hhcmVhYmxlQml0bWFwLmgJKHJldmlz
aW9uIDI0OTMyOCkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NoYXJlYWJsZUJpdG1hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBACiAjaWYgVVNFKERJUkVDVDJEKQogaW50ZXJm
YWNlIElEMkQxQml0bWFwOwogaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0OworaW50ZXJmYWNl
IElEM0QxMURldmljZTE7CitpbnRlcmZhY2UgSURYR0lLZXllZE11dGV4OworaW50ZXJmYWNlIElE
WEdJU3VyZmFjZTE7CiAKICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2VuZGlmCkBAIC02
MCw2ICs2Myw5IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgQ29sb3JT
cGFjZURhdGEgY29sb3JTcGFjZTsKICNlbmRpZgorI2lmIFVTRShESVJFQ1QyRCkKKyAgICAgICAg
bXV0YWJsZSBIQU5ETEUgc2hhcmVkUmVzb3VyY2VIYW5kbGUgeyBudWxscHRyIH07CisjZW5kaWYK
IAogICAgICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKICAgICAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKElQQzo6RGVjb2RlciYsIENvbmZpZ3VyYXRpb24mKTsKQEAgLTEzMiw4
ICsxMzgsMTEgQEAgcHVibGljOgogICAgIC8vIFRoaXMgaXMgb25seSBzYWZlIHRvIHVzZSB3aGVu
IHdlIGtub3cgdGhhdCB0aGUgY29udGVudHMgb2YgdGhlIHNoYXJlYWJsZSBiaXRtYXAgd29uJ3Qg
Y2hhbmdlLgogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNyZWF0ZUNhaXJvU3VyZmFjZSgp
OwogI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlRGly
ZWN0MkRTdXJmYWNlKElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0gICAgdm9pZCBzeW5jKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYpOworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlRGlyZWN0
MkRTdXJmYWNlKElEM0QxMURldmljZTEqLCBJRDJEMVJlbmRlclRhcmdldCopOworICAgIElEWEdJ
U3VyZmFjZTEqIGR4U3VyZmFjZSgpIHsgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsgfQorICAgIHZv
aWQgY3JlYXRlU2hhcmVkUmVzb3VyY2UoKTsKKyAgICB2b2lkIGRpc3Bvc2VTaGFyZWRSZXNvdXJj
ZSgpOworICAgIHZvaWQgbGVha1NoYXJlZFJlc291cmNlKCk7CiAjZW5kaWYKIAogcHJpdmF0ZToK
QEAgLTE2Myw3ICsxNzIsOCBAQCBwcml2YXRlOgogICAgIENvbmZpZ3VyYXRpb24gbV9jb25maWd1
cmF0aW9uOwogCiAjaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gbV9i
aXRtYXA7CisgICAgQ09NUHRyPElEWEdJU3VyZmFjZTE+IG1fc3VyZmFjZTsKKyAgICBDT01QdHI8
SURYR0lLZXllZE11dGV4PiBtX3N1cmZhY2VNdXRleDsKICNlbmRpZgogCiAgICAgLy8gSWYgdGhl
IHNoYXJlYWJsZSBiaXRtYXAgaXMgYmFja2VkIGJ5IHNoYXJlZCBtZW1vcnksIHRoaXMgcG9pbnRz
IHRvIHRoZSBzaGFyZWQgbWVtb3J5IG9iamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVk
L3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5
MzI4KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogCisjaW5jbHVkZSAiRGVjb2Rlci5oIgor
I2luY2x1ZGUgIkVuY29kZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9ESUJQaXhlbERhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpcmVj
dDJET3BlcmF0aW9ucy5oPgpAQCAtMzYsNiArMzgsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJE
Lmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+CisjaW5jbHVkZSA8ZDNkMTFfMS5oPgorI2luY2x1ZGUg
PGR4Z2kxXzIuaD4KICNpbmNsdWRlIDx3aW5jb2RlYy5oPgogI2luY2x1ZGUgPHd0Zi9Qcm9jZXNz
SUQuaD4KIApAQCAtNTksMjEgKzYzLDQ4IEBAIHVuc2lnbmVkIFNoYXJlYWJsZUJpdG1hcDo6Y2Fs
Y3VsYXRlQnl0ZXMKICAgICByZXR1cm4gNDsKIH0KIAotc3RhdGljIGlubGluZSBDT01QdHI8SVdJ
Q0JpdG1hcD4gY3JlYXRlU3VyZmFjZUZyb21EYXRhKHZvaWQqIGRhdGEsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUpCit2b2lkIFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVkUmVzb3Vy
Y2UoKQogewotICAgIGNvbnN0IHVuc2lnbmVkIHN0cmlkZSA9IHN0cmlkZUZvcldpZHRoKHNpemUu
d2lkdGgoKSk7Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpjcmVhdGVEaXJlY3QyREltYWdlU3VyZmFj
ZVdpdGhEYXRhKGRhdGEsIHNpemUsIHN0cmlkZSk7CisgICAgLy8gRG9uJ3QgY3JlYXRlIGEgc2hh
cmVkIHJlc291cmNlIGlmIHRoZSBjb25maWd1cmF0aW9uIGluc3RydWN0cyB1cyB0byB1c2UgYW4g
ZXhpc3Rpbmcgb25lLgorICAgIGlmIChtX2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5k
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3VyZmFjZSA9IERpcmVjdDJEOjpjcmVhdGVE
WEdJU3VyZmFjZU9mU2l6ZShtX3NpemUsIG51bGxwdHIsIHRydWUpOworCisgICAgQ09NUHRyPElE
WEdJUmVzb3VyY2UxPiByZXNvdXJjZURhdGE7CisgICAgSFJFU1VMVCBociA9IG1fc3VyZmFjZS0+
UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSURYR0lSZXNvdXJjZSksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCoqPigmcmVzb3VyY2VEYXRhKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CisKKyAgICBociA9IHJlc291cmNlRGF0YS0+Q3JlYXRlU2hhcmVkSGFuZGxlKG51bGxwdHIs
IERYR0lfU0hBUkVEX1JFU09VUkNFX1JFQUQgfCBEWEdJX1NIQVJFRF9SRVNPVVJDRV9XUklURSwg
bnVsbHB0ciwgJm1fY29uZmlndXJhdGlvbi5zaGFyZWRSZXNvdXJjZUhhbmRsZSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cit9CisKK3ZvaWQgU2hhcmVhYmxlQml0bWFwOjpk
aXNwb3NlU2hhcmVkUmVzb3VyY2UoKQoreworICAgIGlmIChtX3N1cmZhY2VNdXRleCkKKyAgICAg
ICAgbV9zdXJmYWNlTXV0ZXgtPlJlbGVhc2VTeW5jKDEpOworICAgIGlmIChtX2NvbmZpZ3VyYXRp
b24uc2hhcmVkUmVzb3VyY2VIYW5kbGUpCisgICAgICAgIDo6Q2xvc2VIYW5kbGUobV9jb25maWd1
cmF0aW9uLnNoYXJlZFJlc291cmNlSGFuZGxlKTsKK30KKwordm9pZCBTaGFyZWFibGVCaXRtYXA6
OmxlYWtTaGFyZWRSZXNvdXJjZSgpCit7CisgICAgbV9jb25maWd1cmF0aW9uLnNoYXJlZFJlc291
cmNlSGFuZGxlID0gbnVsbHB0cjsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4
dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewotICAgIGF1dG8g
Yml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUo
bV9zaXplKTsKLSAgICBpZiAoIWJpdG1hcENvbnRleHQpCisgICAgLy8gTG9jayB0aGUgc3VyZmFj
ZSB0byB0aGUgY3VycmVudCBkZXZpY2Ugd2hpbGUgcmVuZGVyaW5nLgorICAgIEhSRVNVTFQgaHIg
PSBtX3N1cmZhY2UtPlF1ZXJ5SW50ZXJmYWNlKCZtX3N1cmZhY2VNdXRleCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgaHIgPSBtX3N1cmZhY2VNdXRleC0+QWNxdWly
ZVN5bmMoMCwgSU5GSU5JVEUpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwor
CisgICAgYXV0byBzdXJmYWNlQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVTdXJmYWNlUmVuZGVy
VGFyZ2V0KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgaWYgKCFzdXJmYWNlQ29udGV4dCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+R2V0
Qml0bWFwKCZtX2JpdG1hcCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0g
ICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoYml0bWFwQ29udGV4dC5nZXQoKSkpOworICAgIHJldHVy
biBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpjcmVhdGVGYWN0b3J5KHN1cmZhY2VDb250ZXh0LmdldCgpKSk7CiB9CiAKIHZvaWQgU2hhcmVh
YmxlQml0bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50
JiBkc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKQEAgLTgzLDcgKzExNCw3IEBAIHZv
aWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChHcmFwaGljc0NvbnQKIAogdm9pZCBTaGFyZWFibGVC
aXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgZmxvYXQgc2NhbGVGYWN0b3Is
IGNvbnN0IEludFBvaW50JiBkc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKIHsKLSAg
ICBhdXRvIHN1cmZhY2UgPSBjcmVhdGVEaXJlY3QyRFN1cmZhY2UoY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOworICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0ZURpcmVj
dDJEU3VyZmFjZShudWxscHRyLCBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJn
ZXQoKSk7CiAKICNpZm5kZWYgX05ERUJVRwogICAgIGF1dG8gYml0bWFwU2l6ZSA9IHN1cmZhY2Ut
PkdldFBpeGVsU2l6ZSgpOwpAQCAtOTksMTYgKzEzMCwzMiBAQCB2b2lkIFNoYXJlYWJsZUJpdG1h
cDo6cGFpbnQoR3JhcGhpY3NDb250CiAgICAgYXV0byYgc3RhdGUgPSBjb250ZXh0LnN0YXRlKCk7
CiAgICAgYXV0byYgcGxhdGZvcm1Db250ZXh0ID0gKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
CiAKLSAgICBEaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFj
ZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgc3RhdGUuY29tcG9zaXRl
T3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbigpLCBzdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5LCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRl
KHN0YXRlKSk7CisgICAgSW1hZ2VQYWludGluZ09wdGlvbnMgb3B0aW9ucyB7IHN0YXRlLmNvbXBv
c2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb24oKSwgc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9OworICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1h
Z2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBtX3NpemUsIGRlc3RSZWN0LCBzcmNS
ZWN0U2NhbGVkLCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKLUNPTVB0cjxJRDJEMUJpdG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVE
aXJlY3QyRFN1cmZhY2UoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK0NPTVB0cjxJ
RDJEMUJpdG1hcD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVEaXJlY3QyRFN1cmZhY2UoSUQzRDEx
RGV2aWNlMSogZGlyZWN0WERldmljZSwgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkK
IHsKLSAgICBhdXRvIGJpdG1hcFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGll
cygpOworICAgIGlmICghZGlyZWN0WERldmljZSkKKyAgICAgICAgZGlyZWN0WERldmljZSA9IERp
cmVjdDJEOjpkZWZhdWx0RGlyZWN0WERldmljZSgpOworCisgICAgQ09NUHRyPElEM0QxMVRleHR1
cmUyRD4gdGV4dHVyZTsKKyAgICBIUkVTVUxUIGhyID0gZGlyZWN0WERldmljZS0+T3BlblNoYXJl
ZFJlc291cmNlMShtX2NvbmZpZ3VyYXRpb24uc2hhcmVkUmVzb3VyY2VIYW5kbGUsIF9fdXVpZG9m
KElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmdGV4dHVyZSkpOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBo
ciA9IHRleHR1cmUtPlF1ZXJ5SW50ZXJmYWNlKCZtX3N1cmZhY2UpOworICAgIFJFTEVBU0VfQVNT
RVJUKFNVQ0NFRURFRChocikpOworCisgICAgLy8gTG9jayB0aGUgc3VyZmFjZSB0byB0aGUgY3Vy
cmVudCBkZXZpY2Ugd2hpbGUgcmVuZGVyaW5nLgorICAgIGhyID0gbV9zdXJmYWNlLT5RdWVyeUlu
dGVyZmFjZSgmbV9zdXJmYWNlTXV0ZXgpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOworICAgIGhyID0gbV9zdXJmYWNlTXV0ZXgtPkFjcXVpcmVTeW5jKDEsIElORklOSVRFKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gYml0bWFwOwotICAgIHVpbnQzMl90IHN0cmlkZSA9IDQgKiBtX3NpemUud2lkdGgoKTsK
LSAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAobV9zaXplLCBkYXRh
KCksIHN0cmlkZSwgJmJpdG1hcFByb3BlcnRpZXMsICZiaXRtYXApOworICAgIGF1dG8gYml0bWFw
UHJvcGVydGllcyA9IERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCk7CisgICAgaHIgPSByZW5k
ZXJUYXJnZXQtPkNyZWF0ZVNoYXJlZEJpdG1hcChfX3V1aWRvZihJRFhHSVN1cmZhY2UxKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4obV9zdXJmYWNlLmdldCgpKSwgJmJpdG1hcFByb3BlcnRpZXMs
ICZiaXRtYXApOwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTExNyw2MyArMTY0LDExIEBAIENPTVB0cjxJRDJEMUJpdG1hcD4gU2hhcmVhYmxl
Qml0bWFwOjpjcmUKIAogUmVmUHRyPEltYWdlPiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUltYWdl
KCkKIHsKLSAgICBhdXRvIHN1cmZhY2UgPSBjcmVhdGVEaXJlY3QyRFN1cmZhY2UoR3JhcGhpY3ND
b250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkpOworICAgIGF1dG8gc3VyZmFjZSA9IGNyZWF0
ZURpcmVjdDJEU3VyZmFjZShudWxscHRyLCBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJU
YXJnZXQoKSk7CiAgICAgaWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi12
b2lkIFNoYXJlYWJsZUJpdG1hcDo6c3luYyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCkKLXsKLSAgICBBU1NFUlQobV9iaXRtYXApOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LmVuZERy
YXcoKTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQ7
Ci0gICAgSFJFU1VMVCBociA9IGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+cmVu
ZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQxRGV2aWNlQ29udGV4dCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmZDJkRGV2aWNlQ29udGV4dCkpOwotICAgIEFTU0VS
VChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIHN0cmlkZSA9IHN0cmlkZUZv
cldpZHRoKG1fc2l6ZS53aWR0aCgpKTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IGNwdUJp
dG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJE
MTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFf
QklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAg
ICBociA9IGQyZERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChtX3NpemUsIG51bGxwdHIsIHN0
cmlkZSwgYml0bWFwUHJvcGVydGllcywgJmNwdUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQo
aHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBociA9IGNwdUJpdG1hcC0+Q29weUZyb21CaXRt
YXAobnVsbHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWREYXRh
OwotICAgIGhyID0gY3B1Qml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVk
RGF0YSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobWFwcGVkRGF0YS5waXRjaCA9PSBzdHJpZGUpCi0gICAgICAgIG1lbWNweShkYXRhKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZERhdGEuYml0cyksIHN0cmlkZSAqIG1fc2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFN0cmlkZSBpcyBkaWZmZXJlbnQsIHNv
IG11c3QgZG8gYSByb3d3aXNlIGNvcHk6Ci0gICAgICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBt
X3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IG1fc2l6ZS53aWR0
aCgpOwotCi0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBtYXBwZWREYXRhLmJpdHM7
Ci0gICAgICAgIHVpbnQ4X3QqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEo
KSk7Ci0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsr
eSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsg
eCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHJvdyArIGJhc2V4KVswXSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBzcmNSb3dzICs9IG1hcHBlZERhdGEucGl0Y2g7Ci0gICAgICAg
ICAgICByb3cgKz0gc3RyaWRlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaHIgPSBjcHVCaXRt
YXAtPlVubWFwKCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQmFja2luZ1N0b3JlLmNw
cAkocmV2aXNpb24gMjQ5MzI4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQmFja2luZ1N0
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiAjaWYgVVNFKERJUkVD
VDJEKQogI2luY2x1ZGUgPGQyZDEuaD4KKyNpbmNsdWRlIDxkM2QxMV8xLmg+CiAjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYktpdCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5n
U3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9CYWNraW5nU3Rv
cmUuaAkocmV2aXNpb24gMjQ5MzI4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQmFja2lu
Z1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkgQEAKIAogI2lmIFVTRShESVJF
Q1QyRCkKIGludGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKK2ludGVyZmFjZSBJRDNEMTFEZXZp
Y2UxOworaW50ZXJmYWNlIElEM0QxMURldmljZUNvbnRleHQxOworaW50ZXJmYWNlIElEM0QxMVRl
eHR1cmUyRDsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTU4LDExICs2MSwxMSBA
QCBwdWJsaWM6CiAjaWYgVVNFKENBSVJPKQogICAgIHR5cGVkZWYgY2Fpcm9fdCogUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQ7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgc3RydWN0IEdkaUNvbm5l
Y3Rpb25zIHsKLSAgICAgICAgSFdORCBod25kOwotICAgICAgICBIREMgaGRjOworICAgIHN0cnVj
dCBEWENvbm5lY3Rpb25zIHsKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dDEqIGltbWVkaWF0
ZUNvbnRleHQgeyBudWxscHRyIH07CisgICAgICAgIElEM0QxMVRleHR1cmUyRCogYmFja0J1ZmZl
ciB7IG51bGxwdHIgfTsKICAgICB9OwotICAgIHR5cGVkZWYgR2RpQ29ubmVjdGlvbnMgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQ7CisgICAgdHlwZWRlZiBEWENvbm5lY3Rpb25zIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0OwogI2VuZGlmCiAKICAgICB2b2lkIHBhaW50KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI0OTMyOCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw2ICsy
NTAsMTAgQEAKICNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIgogI2VuZGlm
CiAKKyNpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSA8ZDNkMTFfMS5oPgorI2VuZGlmCisKIC8v
IFRoaXMgY29udHJvbHMgd2hhdCBzdHJhdGVneSB3ZSB1c2UgZm9yIG1vdXNlIHdoZWVsIGNvYWxl
c2NpbmcuCiAjZGVmaW5lIE1FUkdFX1dIRUVMX0VWRU5UUyAxCiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNDkzMjgpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDYgKzE1
MiwxMCBAQCBjbGFzcyBNZWRpYVNlc3Npb25NZXRhZGF0YTsKIH0KICNlbmRpZgogCisjaWYgVVNF
KERJUkVDVDJEKQoraW50ZXJmYWNlIElEM0QxMURldmljZTE7CisjZW5kaWYKKwogbmFtZXNwYWNl
IEFQSSB7CiBjbGFzcyBBdHRhY2htZW50OwogY2xhc3MgQ29udGV4dE1lbnVDbGllbnQ7CkBAIC04
MTcsNiArODIxLDEwIEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBQbGF0Zm9y
bVZpZXdXaWRnZXQgdmlld1dpZGdldCgpOworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBJRDNEMTFE
ZXZpY2UxKiBkZXZpY2UoKSBjb25zdDsKKyAgICB2b2lkIHNldERldmljZShJRDNEMTFEZXZpY2Ux
Kik7CisjZW5kaWYKICNlbmRpZgogI2lmIFBMQVRGT1JNKFdQRSkKICAgICBzdHJ1Y3Qgd3BlX3Zp
ZXdfYmFja2VuZCogdmlld0JhY2tlbmQoKTsKQEAgLTI1NTUsNiArMjU2Myw5IEBAIHByaXZhdGU6
CiAgICAgfTsKICAgICBPcHRpb25hbDxTcGVlY2hTeW50aGVzaXNEYXRhPiBtX3NwZWVjaFN5bnRo
ZXNpc0RhdGE7CiAjZW5kaWYKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgQ09NUHRyPElEM0QxMURl
dmljZTE+IG1fZGV2aWNlOworI2VuZGlmCiAgICAgYm9vbCBtX2lzUXVvdGFJbmNyZWFzZURlbmll
ZCB7IGZhbHNlIH07CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAkocmV2aXNpb24gMjQ5MzI4KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJl
YVByb3h5Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4
LDcgQEAKIAogI2lmIFVTRShESVJFQ1QyRCkKICNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVkZSA8
ZDNkMTFfMS5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCShy
ZXZpc2lvbiAyNDkzMjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0
b3JlRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwzMyArMzUsMzIgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxkMmQxLmg+CisjaW5j
bHVkZSA8ZDNkMTFfMS5oPgorI2luY2x1ZGUgPGR4Z2kuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogc3RkOjp1bmlxdWVfcHRyPEJhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyRD4gQmFja2luZ1N0b3JlOjpjcmVhdGVCYWNrZW5kKCkKIHsKLSAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxCYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsPihtX3NpemUs
IG1fZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEJhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGw+KG1fc2l6ZSwgbV9kZXZpY2VTY2FsZUZhY3RvciwgbV93ZWJQ
YWdlUHJveHkuZGV2aWNlKCkpOwogfQogCi12b2lkIEJhY2tpbmdTdG9yZTo6cGFpbnQoR2RpQ29u
bmVjdGlvbnMgZ2RpQ29ubmVjdGlvbnMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit2b2lkIEJhY2tp
bmdTdG9yZTo6cGFpbnQoRFhDb25uZWN0aW9ucyBkeENvbm5lY3Rpb25zLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIEFTU0VSVChtX2JhY2tlbmQpOwogICAgIEFTU0VSVChtX2JhY2tlbmQt
PnNpemUoKSA9PSBtX3NpemUpOwogCi0gICAgYXV0byogcmVuZGVyVGFyZ2V0ID0gbV9iYWNrZW5k
LT5yZW5kZXJUYXJnZXQoKTsKKyAgICBDT01QdHI8SUQzRDExUmVzb3VyY2U+IGJhY2tCdWZmZXI7
CisgICAgSFJFU1VMVCBociA9IGR4Q29ubmVjdGlvbnMuYmFja0J1ZmZlci0+UXVlcnlJbnRlcmZh
Y2UoX191dWlkb2YoSUQzRDExUmVzb3VyY2UpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJh
Y2tCdWZmZXIpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIENP
TVB0cjxJRDNEMTFSZXNvdXJjZT4gYmFja2luZ1N0b3JlOworICAgIGhyID0gbV9iYWNrZW5kLT5k
eFN1cmZhY2UoKS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExUmVzb3VyY2UpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tpbmdTdG9yZSkpOworICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwogCi0gICAgUkVDVCB2aWV3UmVjdDsKLSAgICA6OkdldENsaWVudFJl
Y3QoZ2RpQ29ubmVjdGlvbnMuaHduZCwgJnZpZXdSZWN0KTsKLSAgICByZW5kZXJUYXJnZXQtPkJp
bmREQyhnZGlDb25uZWN0aW9ucy5oZGMsICZ2aWV3UmVjdCk7Ci0KLSAgICBEMkQxX1JFQ1RfRiBk
ZXN0UmVjdCA9IHJlY3Q7Ci0KLSAgICBpZiAoYXV0byogcGF0dGVybkJydXNoID0gbV9iYWNrZW5k
LT5iaXRtYXBCcnVzaCgpKSB7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+QmVnaW5EcmF3KCk7Ci0g
ICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZGVzdFJlY3QsIHBhdHRlcm5CcnVz
aCk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RW5kRHJhdygpOwotICAgIH0KKyAgICBDRDNEMTFf
Qk9YIHNyY0JveChyZWN0LngoKSwgcmVjdC55KCksIDAsIHJlY3QueCgpICsgcmVjdC53aWR0aCgp
LCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCksIDEpOworICAgIGR4Q29ubmVjdGlvbnMuaW1tZWRp
YXRlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uMShiYWNrQnVmZmVyLmdldCgpLCAwLCBy
ZWN0LngoKSwgcmVjdC55KCksIDAsIGJhY2tpbmdTdG9yZS5nZXQoKSwgMCwgJnNyY0JveCwgRDNE
MTFfQ09QWV9ESVNDQVJEKTsKIH0KIAogdm9pZCBCYWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBk
YXRlKFNoYXJlYWJsZUJpdG1hcCogYml0bWFwLCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQpAQCAtNzMsNyArNzIsOSBAQCB2b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUo
U2hhCiAKICAgICBJbnRQb2ludCB1cGRhdGVSZWN0Qm91bmRzTG9jYXRpb24gPSB1cGRhdGVJbmZv
LnVwZGF0ZVJlY3RCb3VuZHMubG9jYXRpb24oKTsKIAotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4g
ZGV2aWNlVXBkYXRlQml0bWFwID0gYml0bWFwLT5jcmVhdGVEaXJlY3QyRFN1cmZhY2UobV9iYWNr
ZW5kLT5yZW5kZXJUYXJnZXQoKSk7CisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBkZXZpY2VVcGRh
dGVCaXRtYXAgPSBiaXRtYXAtPmNyZWF0ZURpcmVjdDJEU3VyZmFjZShtX3dlYlBhZ2VQcm94eS5k
ZXZpY2UoKSwgbV9iYWNrZW5kLT5yZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKCFkZXZpY2VVcGRh
dGVCaXRtYXApCisgICAgICAgIHJldHVybjsKIAogI2lmbmRlZiBfTkRFQlVHCiAgICAgYXV0byBk
ZXZpY2VCaXRtYXBTaXplID0gZGV2aWNlVXBkYXRlQml0bWFwLT5HZXRQaXhlbFNpemUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9QYWdlQ2xpZW50SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGllbnRJbXBsLmNwcAko
cmV2aXNpb24gMjQ5MzI4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1BhZ2VDbGll
bnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldl
YlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0RPTVBhc3RlQWNjZXNzLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPGQzZDExXzEuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQYWdlUHJveHlXaW4uY3BwCShyZXZpc2lvbiAyNDkz
MjgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUGFnZVByb3h5V2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE4
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBA
IC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2VhcmNoUG9wdXBNZW51REIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBZ2VudC5oPgogCisjaWYgVVNFKERJUkVDVDJEKQorI2lu
Y2x1ZGUgPGQzZDExXzEuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBX
ZWJQYWdlUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCkBAIC03MCw1ICs3NCwxNyBAQCBQbGF0
Zm9ybVZpZXdXaWRnZXQgV2ViUGFnZVByb3h5Ojp2aWV3V2lkCiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFBhZ2VDbGllbnRJbXBsJj4ocGFnZUNsaWVudCgpKS52aWV3V2lkZ2V0KCk7CiB9CiAKKyNp
ZiBVU0UoRElSRUNUMkQpCitJRDNEMTFEZXZpY2UxKiBXZWJQYWdlUHJveHk6OmRldmljZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZGV2aWNlLmdldCgpOworfQorCit2b2lkIFdlYlBhZ2VQcm94
eTo6c2V0RGV2aWNlKElEM0QxMURldmljZTEqIGRldmljZSkKK3sKKyAgICBtX2RldmljZSA9IGRl
dmljZTsKK30KKyNlbmRpZgorCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMjQ5MzI4KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw2ICs2OSw5IEBACiAKICNpZiBVU0UoRElSRUNUMkQpCiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJl
Y3QyRFV0aWxpdGllcy5oPgorI2luY2x1ZGUgPGQzZDExXzEuaD4KKyNpbmNsdWRlIDxkaXJlY3R4
Y29sb3JzLmg+IAorI2luY2x1ZGUgPGR4Z2kuaD4KICNlbmRpZgogCiAKQEAgLTI0NSw4ICsyNDgs
MTUgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIGNvbnN0IEFQSTo6UAogICAgIG1fcGFn
ZSA9IHByb2Nlc3NQb29sLT5jcmVhdGVXZWJQYWdlKCptX3BhZ2VDbGllbnQsIFdURk1vdmUocGFn
ZUNvbmZpZ3VyYXRpb24pKTsKICAgICBtX3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7CiAKKyAg
ICBJbnRTaXplIHdpbmRvd1NpemUocmVjdC5yaWdodCAtIHJlY3QubGVmdCwgcmVjdC5ib3R0b20g
LSByZWN0LnRvcCk7CisjaWYgVVNFKERJUkVDVDJEKQorICAgIERpcmVjdDJEOjpjcmVhdGVEZXZp
Y2VBbmRDb250ZXh0KG1fZDNkRGV2aWNlLCBtX2ltbWVkaWF0ZUNvbnRleHQpOworICAgIG1fcGFn
ZS0+c2V0RGV2aWNlKG1fZDNkRGV2aWNlLmdldCgpKTsKKyAgICBzZXR1cFN3YXBDaGFpbih3aW5k
b3dTaXplKTsKKyNlbmRpZgorCiAgICAgaWYgKG1fcGFnZS0+ZHJhd2luZ0FyZWEoKSkKLSAgICAg
ICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUocmVjdC5yaWdodCAtIHJl
Y3QubGVmdCwgcmVjdC5ib3R0b20gLSByZWN0LnRvcCkpOworICAgICAgICBtX3BhZ2UtPmRyYXdp
bmdBcmVhKCktPnNldFNpemUod2luZG93U2l6ZSk7CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BF
Q1RPUikKICAgICBtX3BhZ2UtPnNldFVSTFNjaGVtZUhhbmRsZXJGb3JTY2hlbWUoUmVtb3RlSW5z
cGVjdG9yUHJvdG9jb2xIYW5kbGVyOjpjcmVhdGUoKm1fcGFnZSksICJpbnNwZWN0b3IiKTsKQEAg
LTQ5MSw4ICs1MDEsMTQgQEAgdm9pZCBXZWJWaWV3OjpwYWludChIREMgaGRjLCBjb25zdCBJbnRS
ZQogICAgICAgICBjYWlyb19kZXN0cm95KGNvbnRleHQpOwogICAgICAgICBjYWlyb19zdXJmYWNl
X2Rlc3Ryb3koc3VyZmFjZSk7CiAjZWxzZQotICAgICAgICBCYWNraW5nU3RvcmU6OkdkaUNvbm5l
Y3Rpb25zIGNvbnRleHQgeyA6OldpbmRvd0Zyb21EQyhoZGMpLCBoZGMgfTsKLSAgICAgICAgZHJh
d2luZ0FyZWEtPnBhaW50KGNvbnRleHQsIGRpcnR5UmVjdCwgdW5wYWludGVkUmVnaW9uKTsKKyAg
ICAgICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCisgICAgICAgIEhSRVNV
TFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUy
RCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKKyAgICAgICAgaWYg
KFNVQ0NFRURFRChocikpIHsKKyAgICAgICAgICAgIEJhY2tpbmdTdG9yZTo6RFhDb25uZWN0aW9u
cyBjb250ZXh0IHsgbV9pbW1lZGlhdGVDb250ZXh0LmdldCgpLCBiYWNrQnVmZmVyLmdldCgpIH07
CisgICAgICAgICAgICBkcmF3aW5nQXJlYS0+cGFpbnQoY29udGV4dCwgZGlydHlSZWN0LCB1bnBh
aW50ZWRSZWdpb24pOworICAgICAgICB9CisKKyAgICAgICAgbV9zd2FwQ2hhaW4tPlByZXNlbnQo
MCwgMCk7IAogI2VuZGlmCiAKICAgICAgICAgYXV0byB1bnBhaW50ZWRSZWN0cyA9IHVucGFpbnRl
ZFJlZ2lvbi5yZWN0cygpOwpAQCAtNTM0LDEyICs1NTAsMjkgQEAgTFJFU1VMVCBXZWJWaWV3Ojpv
blNpemVFdmVudChIV05EIGh3bmQsCiAgICAgaW50IHdpZHRoID0gTE9XT1JEKGxQYXJhbSk7CiAg
ICAgaW50IGhlaWdodCA9IEhJV09SRChsUGFyYW0pOwogCisgICAgSW50U2l6ZSB3aW5kb3dTaXpl
KHdpZHRoLCBoZWlnaHQpOworCiAgICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPmRyYXdpbmdBcmVh
KCkpIHsKICAgICAgICAgLy8gRklYTUUgc3BlY2lmeSBjb3JyZWN0bHkgbGF5ZXJQb3NpdGlvbi4K
LSAgICAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUod2lkdGgsIGhl
aWdodCksIG1fbmV4dFJlc2l6ZVNjcm9sbE9mZnNldCk7CisgICAgICAgIG1fcGFnZS0+ZHJhd2lu
Z0FyZWEoKS0+c2V0U2l6ZSh3aW5kb3dTaXplLCBtX25leHRSZXNpemVTY3JvbGxPZmZzZXQpOwog
ICAgICAgICBtX25leHRSZXNpemVTY3JvbGxPZmZzZXQgPSBJbnRTaXplKCk7CiAgICAgfQogCisj
aWYgVVNFKERJUkVDVDJEKQorICAgIGlmIChtX3N3YXBDaGFpbikgeworICAgICAgICBtX2ltbWVk
aWF0ZUNvbnRleHQtPk9NU2V0UmVuZGVyVGFyZ2V0cygwLCBudWxscHRyLCBudWxscHRyKTsKKwor
ICAgICAgICBtX3JlbmRlclRhcmdldFZpZXcgPSBudWxscHRyOworCisgICAgICAgIC8vIFByZXNl
cnZlIHRoZSBleGlzdGluZyBidWZmZXIgY291bnQgKHBhc3MgemVybyBmb3IgY291bnQpIGFuZCBm
b3JtYXQgKGJ5IHBhc3NpbmcgRFhHSV9GT1JNQVRfVU5LTk9XTikuCisgICAgICAgIC8vIEF1dG9t
YXRpY2FsbHkgY2hvb3NlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIG1hdGNoIHRoZSBjbGllbnQg
cmVjdCBmb3IgdGhlIGJhY2tpbmcgd2luZG93IChwYXNzIHplcm9zIGZvciB3aWR0aC9oZWlnaHQp
LgorICAgICAgICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPlJlc2l6ZUJ1ZmZlcnMoMCwgMCwg
MCwgRFhHSV9GT1JNQVRfVU5LTk9XTiwgRFhHSV9TV0FQX0NIQUlOX0ZMQUdfR0RJX0NPTVBBVElC
TEUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgICAgICBj
b25maWd1cmVCYWNraW5nU3RvcmUod2luZG93U2l6ZSk7CisgICAgfQorI2VuZGlmCisKICAgICBo
YW5kbGVkID0gdHJ1ZTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTkxNyw0ICs5NTAsNjMgQEAgdm9p
ZCBXZWJWaWV3OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYgdAogICAgIDo6U2VuZE1lc3NhZ2Uo
bV90b29sVGlwV2luZG93LCBUVE1fQUNUSVZBVEUsICF0b29sVGlwLmlzRW1wdHkoKSwgMCk7CiB9
CiAKKyNpZiBVU0UoRElSRUNUMkQpCit2b2lkIFdlYlZpZXc6OnNldHVwU3dhcENoYWluKGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFtX2QzZERldmljZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRFhHSV9TV0FQX0NIQUlOX0RFU0MxIHN3YXBDaGFpbkRlc2NyaXB0
aW9uOworICAgIDo6WmVyb01lbW9yeSgmc3dhcENoYWluRGVzY3JpcHRpb24sIHNpemVvZihzd2Fw
Q2hhaW5EZXNjcmlwdGlvbikpOworICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLldpZHRoID0gc2l6
ZS53aWR0aCgpOworICAgIHN3YXBDaGFpbkRlc2NyaXB0aW9uLkhlaWdodCA9IHNpemUuaGVpZ2h0
KCk7CisgICAgc3dhcENoYWluRGVzY3JpcHRpb24uRm9ybWF0ID0gRFhHSV9GT1JNQVRfQjhHOFI4
QThfVU5PUk07CisgICAgc3dhcENoYWluRGVzY3JpcHRpb24uU2FtcGxlRGVzYy5Db3VudCA9IDE7
CisgICAgc3dhcENoYWluRGVzY3JpcHRpb24uU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICBz
d2FwQ2hhaW5EZXNjcmlwdGlvbi5CdWZmZXJVc2FnZSA9IERYR0lfVVNBR0VfUkVOREVSX1RBUkdF
VF9PVVRQVVQ7CisgICAgc3dhcENoYWluRGVzY3JpcHRpb24uQnVmZmVyQ291bnQgPSAxOworCisg
ICAgYXV0byBmYWN0b3J5ID0gRGlyZWN0MkQ6OmZhY3RvcnlGb3JEWEdJRGV2aWNlKERpcmVjdDJE
Ojp0b0RYR0lEZXZpY2UobV9kM2REZXZpY2UpKTsKKworICAgIElEWEdJU3dhcENoYWluMSogc3dh
cENoYWluMSA9IG51bGxwdHI7CisgICAgSFJFU1VMVCBociA9IGZhY3RvcnktPkNyZWF0ZVN3YXBD
aGFpbkZvckh3bmQobV9kM2REZXZpY2UuZ2V0KCksIG1fd2luZG93LCAmc3dhcENoYWluRGVzY3Jp
cHRpb24sIG51bGxwdHIsIG51bGxwdHIsICZzd2FwQ2hhaW4xKTsKKyAgICBpZiAoU1VDQ0VFREVE
KGhyKSkKKyAgICAgICAgaHIgPSBzd2FwQ2hhaW4xLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJ
RFhHSVN3YXBDaGFpbiksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9zd2FwQ2hhaW4pKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIGZhY3RvcnktPk1ha2VX
aW5kb3dBc3NvY2lhdGlvbihtX3dpbmRvdywgMCk7CisgICAgY29uZmlndXJlQmFja2luZ1N0b3Jl
KHNpemUpOworfQorCit2b2lkIFdlYlZpZXc6OmNvbmZpZ3VyZUJhY2tpbmdTdG9yZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplKQoreworICAgIEFTU0VSVChtX3N3YXBDaGFpbik7CisgICAg
QVNTRVJUKG1fZDNkRGV2aWNlKTsKKyAgICBBU1NFUlQobV9pbW1lZGlhdGVDb250ZXh0KTsKKwor
ICAgIC8vIENyZWF0ZSBhIHJlbmRlciB0YXJnZXQgdmlldyAKKyAgICBDT01QdHI8SUQzRDExVGV4
dHVyZTJEPiBiYWNrQnVmZmVyOyAKKyAgICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPkdldEJ1
ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJmJhY2tCdWZmZXIpKTsgCisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisK
KyAgICBociA9IG1fZDNkRGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KGJhY2tCdWZmZXIu
Z2V0KCksIG51bGxwdHIsICZtX3JlbmRlclRhcmdldFZpZXcpOyAKKyAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKKworICAgIGF1dG8qIHJlbmRlclRhcmdldFZpZXcgPSBtX3JlbmRl
clRhcmdldFZpZXcuZ2V0KCk7CisgICAgbV9pbW1lZGlhdGVDb250ZXh0LT5PTVNldFJlbmRlclRh
cmdldHMoMSwgJnJlbmRlclRhcmdldFZpZXcsIG51bGxwdHIpOworCisgICAgLy8gU2V0dXAgdGhl
IHZpZXdwb3J0IAorICAgIEQzRDExX1ZJRVdQT1JUIHZpZXdwb3J0OworICAgIHZpZXdwb3J0Lldp
ZHRoID0gKEZMT0FUKXNpemUud2lkdGgoKTsKKyAgICB2aWV3cG9ydC5IZWlnaHQgPSAoRkxPQVQp
c2l6ZS5oZWlnaHQoKTsKKyAgICB2aWV3cG9ydC5NaW5EZXB0aCA9IDAuMGY7CisgICAgdmlld3Bv
cnQuTWF4RGVwdGggPSAxLjBmOworICAgIHZpZXdwb3J0LlRvcExlZnRYID0gMDsKKyAgICB2aWV3
cG9ydC5Ub3BMZWZ0WSA9IDA7CisgICAgbV9pbW1lZGlhdGVDb250ZXh0LT5SU1NldFZpZXdwb3J0
cygxLCAmdmlld3BvcnQpOworCisgICAgbV9pbW1lZGlhdGVDb250ZXh0LT5DbGVhclJlbmRlclRh
cmdldFZpZXcobV9yZW5kZXJUYXJnZXRWaWV3LmdldCgpLCBEaXJlY3RYOjpDb2xvcnM6Ok1pZG5p
Z2h0Qmx1ZSk7IAorfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCShyZXZpc2lvbiAyNDkzMjgpCisrKyBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM1LDYgKzM1LDE3IEBACiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKKyNpZiBVU0Uo
RElSRUNUMkQpCitpbnRlcmZhY2UgSUQzRDExRGV2aWNlMTsKK2ludGVyZmFjZSBJRDNEMTFEZXZp
Y2VDb250ZXh0MTsKK2ludGVyZmFjZSBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3OworaW50ZXJmYWNl
IElEWEdJU3dhcENoYWluOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIElu
dFNpemU7Cit9CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5
OwpAQCAtNzIsNiArODMsMTAgQEAgcHVibGljOgogCiAgICAgRHJhd2luZ0FyZWFQcm94eSogZHJh
d2luZ0FyZWEoKSB7IHJldHVybiBwYWdlKCkgPyBwYWdlKCktPmRyYXdpbmdBcmVhKCkgOiBudWxs
cHRyOyB9CiAKKyNpZiBVU0UoRElSRUNUMkQpCisgICAgSUQzRDExRGV2aWNlMSogZDNkRGV2aWNl
KCkgeyByZXR1cm4gbV9kM2REZXZpY2UuZ2V0KCk7IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IFdlYlZpZXcoUkVDVCwgY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYsIEhXTkQgcGFyZW50
V2luZG93KTsKIApAQCAtMTI4LDYgKzE0MywxMSBAQCBwcml2YXRlOgogICAgIC8vIFdlYkNvcmU6
OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgogICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dSZWNlaXZlZE1l
c3NhZ2UoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAKKyNpZiBVU0UoRElS
RUNUMkQpCisgICAgdm9pZCBzZXR1cFN3YXBDaGFpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
CisgICAgdm9pZCBjb25maWd1cmVCYWNraW5nU3RvcmUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
OworI2VuZGlmCisKICAgICBIV05EIG1fd2luZG93IHsgbnVsbHB0ciB9OwogICAgIEhXTkQgbV90
b3BMZXZlbFBhcmVudFdpbmRvdyB7IG51bGxwdHIgfTsKICAgICBIV05EIG1fdG9vbFRpcFdpbmRv
dyB7IG51bGxwdHIgfTsKQEAgLTE0Nyw2ICsxNjcsMTIgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsPiBtX3BhZ2VDbGllbnQ7CiAgICAgUmVm
UHRyPFdlYlBhZ2VQcm94eT4gbV9wYWdlOworI2lmIFVTRShESVJFQ1QyRCkKKyAgICBDT01QdHI8
SUQzRDExRGV2aWNlMT4gbV9kM2REZXZpY2U7CisgICAgQ09NUHRyPElEM0QxMURldmljZUNvbnRl
eHQxPiBtX2ltbWVkaWF0ZUNvbnRleHQ7CisgICAgQ09NUHRyPElEM0QxMVJlbmRlclRhcmdldFZp
ZXc+IG1fcmVuZGVyVGFyZ2V0VmlldzsgCisgICAgQ09NUHRyPElEWEdJU3dhcENoYWluPiBtX3N3
YXBDaGFpbjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdB
cmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCShyZXZpc2lvbiAyNDkzMjgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRH
cmFwaGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVkZSA8
ZDNkMTFfMS5oPgogI2VuZGlmCiAKIApAQCAtNzYwLDggKzc2MSw3IEBAIHZvaWQgRHJhd2luZ0Fy
ZWFDb29yZGluYXRlZEdyYXBoaWNzOjpkaXMKICAgICB9CiAKICNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgaWYgKGdyYXBoaWNzQ29udGV4dCkKLSAgICAgICAgYml0bWFwLT5zeW5jKCpncmFwaGljc0Nv
bnRleHQpOworICAgIGJpdG1hcC0+bGVha1NoYXJlZFJlc291cmNlKCk7IC8vIEl0IHdpbGwgYmUg
ZGVzdHJveWVkIGluIHRoZSBVSVByb2Nlc3MuCiAjZW5kaWYKIAogICAgIC8vIExheW91dCBjYW4g
dHJpZ2dlciBtb3JlIGNhbGxzIHRvIHNldE5lZWRzRGlzcGxheSBhbmQgd2UgZG9uJ3Qgd2FudCB0
byBwcm9jZXNzIHRoZW0KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDkzMjgp
CisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyIEBACisyMDE5LTA4LTMwICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29t
PgorCisgICAgICAgIFtGVFddIFVzZSBEaXJlY3RYIFNoYXJlZFJlc291cmNlIGFzIGJhc2lzIGZv
ciBTaGFyZWRCaXRtYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMTE1NworCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisK
KyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZTogTGluayB0byBEaXJlY3RYIHRvIGF2b2lkIGJ1
aWxkIGZhaWx1cmUuCisKIDIwMTktMDgtMTkgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQpJbmRleDogU291cmNlL1dl
YktpdExlZ2FjeS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCShyZXZpc2lvbiAyNDkzMjgpCisrKyBTb3VyY2UvV2Vi
S2l0TGVnYWN5L1BsYXRmb3JtRlRXLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC04LDYgKzgsOCBA
QCBsaXN0KEFQUEVORCBXZWJLaXRMZWdhY3lfU09VUkNFU19DbGFzc2VzCiApCiBsaXN0KEFQUEVO
RCBXZWJLaXRMZWdhY3lfTElCUkFSSUVTCiAgICAgJHtPUEVOU1NMX0xJQlJBUklFU30KKyAgICBQ
UklWQVRFIEQzRDExLmxpYgorICAgIFBSSVZBVEUgRHhnaS5saWIKICAgICBQUklWQVRFIG1mdXVp
ZC5saWIKICAgICBQUklWQVRFIHN0cm1paWRzLmxpYgogICAgIFBSSVZBVEUgJHtMSUJYTUwyX0xJ
QlJBUklFU30K
</data>

          </attachment>
      

    </bug>

</bugzilla>