<?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>141009</bug_id>
          
          <creation_ts>2015-01-28 13:39:25 -0800</creation_ts>
          <short_desc>Clean up / modernize PageCache class</short_desc>
          <delta_ts>2015-01-29 13:33:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1065019</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-28 13:39:25 -0800</bug_when>
    <thetext>Clean up / modernize PageCache class a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065068</commentid>
    <comment_count>1</comment_count>
      <attachid>245578</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-28 16:33:37 -0800</bug_when>
    <thetext>Created attachment 245578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065085</commentid>
    <comment_count>2</comment_count>
      <attachid>245585</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-28 16:59:13 -0800</bug_when>
    <thetext>Created attachment 245585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065090</commentid>
    <comment_count>3</comment_count>
      <attachid>245587</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-28 17:20:07 -0800</bug_when>
    <thetext>Created attachment 245587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065091</commentid>
    <comment_count>4</comment_count>
      <attachid>245588</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-28 17:25:50 -0800</bug_when>
    <thetext>Created attachment 245588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065158</commentid>
    <comment_count>5</comment_count>
      <attachid>245609</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-28 22:12:27 -0800</bug_when>
    <thetext>Created attachment 245609
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065174</commentid>
    <comment_count>6</comment_count>
      <attachid>245609</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-29 00:10:19 -0800</bug_when>
    <thetext>Comment on attachment 245609
Patch

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

&gt; Source/WebCore/history/BackForwardController.cpp:75
&gt; -    if (!item)
&gt; -        return;
&gt; -
&gt; -    m_page.goToItem(item, FrameLoadType::IndexedBackForward);
&gt; +    if (item)
&gt; +        m_page.goToItem(*item, FrameLoadType::IndexedBackForward);

I like the early return style better.

&gt; Source/WebCore/history/BackForwardController.cpp:84
&gt; -    HistoryItem* item = backItem();
&gt; -    if (!item)
&gt; -        return false;
&gt; -
&gt; -    m_page.goToItem(item, FrameLoadType::Back);
&gt; -    return true;
&gt; +    if (HistoryItem* item = backItem()) {
&gt; +        m_page.goToItem(*item, FrameLoadType::Back);
&gt; +        return true;
&gt; +    }
&gt; +    return false;

I like the early return style better.

&gt; Source/WebCore/history/BackForwardController.cpp:93
&gt; -    HistoryItem* item = forwardItem();
&gt; -    if (!item)
&gt; -        return false;
&gt; -
&gt; -    m_page.goToItem(item, FrameLoadType::Forward);
&gt; -    return true;
&gt; +    if (HistoryItem* item = forwardItem()) {
&gt; +        m_page.goToItem(*item, FrameLoadType::Forward);
&gt; +        return true;
&gt; +    }
&gt; +    return false;

I like the early return style better.

&gt; Source/WebCore/history/PageCache.cpp:433
&gt; -    case PruningReason::ReachedCapacity:
&gt; +    case PruningReason::ReachedMaxSize:
&gt;          return DiagnosticLoggingKeys::prunedDueToCapacityReached();

Difference in terminology is a little annoying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065270</commentid>
    <comment_count>7</comment_count>
      <attachid>245627</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-29 09:53:15 -0800</bug_when>
    <thetext>Created attachment 245627
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065272</commentid>
    <comment_count>8</comment_count>
      <attachid>245609</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-29 09:54:21 -0800</bug_when>
    <thetext>Comment on attachment 245609
Patch

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

&gt;&gt; Source/WebCore/history/BackForwardController.cpp:75
&gt;&gt; +        m_page.goToItem(*item, FrameLoadType::IndexedBackForward);
&gt; 
&gt; I like the early return style better.

Done.

&gt;&gt; Source/WebCore/history/BackForwardController.cpp:84
&gt;&gt; +    return false;
&gt; 
&gt; I like the early return style better.

Done.

&gt;&gt; Source/WebCore/history/BackForwardController.cpp:93
&gt;&gt; +    return false;
&gt; 
&gt; I like the early return style better.

Done.

&gt;&gt; Source/WebCore/history/PageCache.cpp:433
&gt;&gt;          return DiagnosticLoggingKeys::prunedDueToCapacityReached();
&gt; 
&gt; Difference in terminology is a little annoying.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065280</commentid>
    <comment_count>9</comment_count>
      <attachid>245627</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-29 10:38:51 -0800</bug_when>
    <thetext>Comment on attachment 245627
Patch

Clearing flags on attachment: 245627

Committed r179347: &lt;http://trac.webkit.org/changeset/179347&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065281</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-29 10:38:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065330</commentid>
    <comment_count>11</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-01-29 13:33:05 -0800</bug_when>
    <thetext>iOS build fix in http://trac.webkit.org/changeset/179360</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245578</attachid>
            <date>2015-01-28 16:33:37 -0800</date>
            <delta_ts>2015-01-28 16:59:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141009-20150128163341.patch</filename>
            <type>text/plain</type>
            <size>65296</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzI1NTY1YjA4NTgxMTll
Zjg5MzRmNWNmMjZiNzgzODhiMzk1YmJhZC4uOWQzOGJhNDgzZjgyMTY4YjRlYzVmMmY2MTI4MWNl
NGNkNmQ5ODA5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAxLTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5p
emUgUGFnZUNhY2hlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDEwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDbGVhbiB1cCAvIG1vZGVybml6ZSBQYWdlQ2FjaGUgY2xhc3M6CisgICAgICAg
IC0gVXNlIG1vcmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCisgICAgICAgIC0gVXNl
IGEgTGlzdEhhc2hTZXQ8UmVmPEhpc3RvcnlJdGVtPj4gaW50ZXJuYWxseSBpbnN0ZWFkIG9mIGEg
bGlua2VkCisgICAgICAgICAgbGlzdCBvZiBIaXN0b3J5SXRlbSouIFRoaXMgYXZvaWRzIGhhdmlu
ZyB0aGUgcmVmL3VucmVmIEhpc3RvcnlJdGVtcworICAgICAgICAgIG1hbnVhbGx5IGFuZCBtYWlu
dGFpbmluZyB0aGUgbGlzdCBzaXplIHNlcGFyYXRlbHkuIEl0IGFsc28gc2ltcGxpZmllcworICAg
ICAgICAgIHRoZSBjb2RlIGRlYWxpbmcgd2l0aCB0aGUgY29udGFpbmVyIGFuZCBtYWtlcyBsb29r
aW5nIHVwIEhpc3RvcnlJdGVtcworICAgICAgICAgIGZhc3RlciBhcyBhIGJvbnVzLiBTaW1pbGFy
bHkgdG8gdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLCB3ZSBhcmUKKyAgICAgICAgICBhZGRp
bmcgZWxlbWVudHMgdG8gb25lIGVuZCBhbmQgcmVtb3ZpbmcgZnJvbSB0aGUgb3Bwb3NpdGUgZW5k
IHdoZW4KKyAgICAgICAgICBwcnVuaW5nIHRvIGRyb3Agb2xkIGhpc3RvcnkgaXRlbXMgZmlyc3Qu
IE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUKKyAgICAgICAgICBwcmV2aW91cyBpbXBsZW1lbnRh
dGlvbiB3YXMgY2FsbGVkIExSVUxpc3QsIGl0IGRpZCBub3QgbW92ZSBpdGVtcyB0bworICAgICAg
ICAgIHRoZSBmcm9udCB3aGVuIGFjY2Vzc2VkLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGRvZXNu
J3QgZWl0aGVyLgorICAgICAgICAgLSBSZW5hbWUgImNhcGFjaXR5IiB0byAibWF4U2l6ZSIgdG8g
YXZvaWQgY29uZnVzaW5nIHdpdGggY29udGFpbmVycycKKyAgICAgICAgICAgY2FwYWNpdHkgKHdo
aWNoIGRvZXNuJ3QgbGltaXQgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcikuCisgICAgICAgICAt
IFVzZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIGludCBmb3IgYWxsIHZhbHVlcyB0aGF0IGFyZSBzdXBw
b3NlZCB0byBiZQorICAgICAgICAgICBwb3NpdGl2ZS4KKyAgICAgICAgIC0gRG8gbm90IGV4cGxp
Y2l0ZWx5IGRlZmluZSB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgbGV0IHRoZQorICAgICAg
ICAgICBjb21waWxlciBnZW5lcmF0ZSBpdCBmb3IgdXMgKGFuZCB1c2UgaW4tY2xhc3MgaW5pdGlh
bGl6YXRpb24gZm9yCisgICAgICAgICAgIG1lbWJlcnMpCisgICAgICAgICAtIEZpeCBpbmRlbnRh
dGlvbiBpbiB0aGUgaGVhZGVyLgorCiAyMDE1LTAxLTI4ICBEYW5hIEJ1cmthcnQgIDxkYnVya2Fy
dEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBBU2FuIGZsYWcgc2V0dGluZ3MgZnJvbSBEZWJ1
Z1JlbGVhc2UueGNjb25maWcgdG8gQmFzZS54Y2NvbmZpZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGU4
YzJiYmE0ZDg4OTQxN2ZiYjBhMzg3Yzc5ZTBkMzBhMzZlMTc4NDEuLjRiODBjMTA5OWJkYWU3NjQ2
NDY2ZWE4M2ViMjhmZDE4NzlhZDgyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAg
IENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNh
Y2hlIGNsYXNzLgorCisgICAgICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW06Cisg
ICAgICAgICgtW1dlYkJhY2tGb3J3YXJkTGlzdCBwYWdlQ2FjaGVTaXplXSk6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9sb2FkQmFja0ZvcndhcmRM
aXN0RnJvbU90aGVyVmlldzpdKToKKyAgICAgICAgKC1bV2ViVmlldyBnb1RvQmFja0ZvcndhcmRJ
dGVtOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9zZXRDYWNoZU1vZGVsOl0pOgorCiAyMDE1LTAx
LTI4ICBEYW5hIEJ1cmthcnQgIDxkYnVya2FydEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBB
U2FuIGZsYWcgc2V0dGluZ3MgZnJvbSBEZWJ1Z1JlbGVhc2UueGNjb25maWcgdG8gQmFzZS54Y2Nv
bmZpZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDY5ZjdjYjM3YzYwOWJlNTU0MjNiNTZiYzU0NGY4MDBl
M2ZiYjFlOTUuLmRmNWI4OWIwMDFhMzZlMzU5NWU1MmQ3YjZjMGRjMDRjNDExNTBhMTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNyBAQAogMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNo
ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgorCisgICAgICAgICogV2ViVmll
dy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKToKKworMjAxNS0wMS0yOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIEZpeCB0eXBvIGluIG1h
cmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJlY2FsYygpCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA5NzcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI4Njc4MWE1
Y2U0MmIxYTRlMTU3OTBlMThjYWI4MGVmOTc5MTY1ZGUuLjlkYjdkOTgxZjJiOGM1MGEzNGMwZjky
NmVlNzE1OGRmNTEwNTc2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNS0wMS0y
OCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8g
bW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y2xvc2UpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Z29Gb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29CYWNrKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJkSXRlbSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6cmVsZWFzZVBhZ2VDYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9j
ZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2Fj
aGVNb2RlbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKwog
MjAxNS0wMS0yOCAgRGFuYSBCdXJrYXJ0ICA8ZGJ1cmthcnRAYXBwbGUuY29tPgogCiAgICAgICAg
IE1vdmUgQVNhbiBmbGFnIHNldHRpbmdzIGZyb20gRGVidWdSZWxlYXNlLnhjY29uZmlnIHRvIEJh
c2UueGNjb25maWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYTFiYTQ4MTQ2YTkyYzEwZjExMzQ4
YTM3YjBhYzk5MTY3NGM4ZDBlNS4uNjU1OTYzZTlmOGJiODQ3Zjk5NjFlMjMxOGIyODRiNTVhNzhh
MDU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEyNDAsNyArMTI0MCw3IEBAIF9fWk43V2Vi
Q29yZTRQYWdlMzVyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9uc0V2CiBfX1pON1dl
YkNvcmU0UGFnZTM2c2V0U2hvdWxkU3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zRWIKIF9fWk43
V2ViQ29yZTRQYWdlMzZzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNFdgogX19a
TjdXZWJDb3JlNFBhZ2UzN3NldEluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGVFYgot
X19aTjdXZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUE5TXzExSGlzdG9yeUl0ZW1FTlNfMTNGcmFtZUxv
YWRUeXBlRQorX19aTjdXZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUk5TXzExSGlzdG9yeUl0ZW1FTlNf
MTNGcmFtZUxvYWRUeXBlRQogX19aTjdXZWJDb3JlNFBhZ2U4c2V0TXV0ZWRFYgogX19aTjdXZWJD
b3JlNFBhZ2U5aW5pdEdyb3VwRXYKIF9fWk43V2ViQ29yZTRQYWdlQzFFUk5TXzE3UGFnZUNvbmZp
Z3VyYXRpb25FCkBAIC0xNjA3LDEwICsxNjA3LDEwIEBAIF9fWk43V2ViQ29yZTlKU0VsZW1lbnQ2
c19pbmZvRQogX19aTjdXZWJDb3JlOUpTRWxlbWVudDl0b1dyYXBwZWRFTjNKU0M3SlNWYWx1ZUUK
IF9fWk43V2ViQ29yZTlMYXllclBvb2xDMUV2CiBfX1pON1dlYkNvcmU5TGF5ZXJQb29sRDFFdgot
X19aTjdXZWJDb3JlOVBhZ2VDYWNoZTExc2V0Q2FwYWNpdHlFaQotX19aTjdXZWJDb3JlOVBhZ2VD
YWNoZTE4cHJ1bmVUb0NhcGFjaXR5Tm93RWlOU18xM1BydW5pbmdSZWFzb25FCitfX1pON1dlYkNv
cmU5UGFnZUNhY2hlMTBzZXRNYXhTaXplRWoKK19fWk43V2ViQ29yZTlQYWdlQ2FjaGUxNHBydW5l
VG9TaXplTm93RWpOU18xM1BydW5pbmdSZWFzb25FCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMzRt
YXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjRXYKLV9fWk43V2ViQ29yZTlQYWdlQ2Fj
aGU2cmVtb3ZlRVBOU18xMUhpc3RvcnlJdGVtRQorX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTZyZW1v
dmVFUk5TXzExSGlzdG9yeUl0ZW1FCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlNnNoYXJlZEV2CiBf
X1pON1dlYkNvcmU5UGFnZUdyb3VwOXBhZ2VHcm91cEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTlTY3JvbGxiYXIxMW1vdXNlRXhpdGVkRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcAppbmRleCA5YzE2NzIyNGE3OWRlM2ZiNzlmM2I4
ODU2NWE1ZDRhNmRkMTdlZWQ4Li44NjI5NDRlZWIzY2M5Yzg0MzBhODI5ODEwYWVjYzc5MzdlZDg4
NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xs
ZXIuY3BwCkBAIC03MSwzMCArNzEsMjYgQEAgdm9pZCBCYWNrRm9yd2FyZENvbnRyb2xsZXI6Omdv
QmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
IWl0ZW0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFt
ZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOworICAgIGlmIChpdGVtKQorICAgICAgICBt
X3BhZ2UuZ29Ub0l0ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7
CiB9CiAKIGJvb2wgQmFja0ZvcndhcmRDb250cm9sbGVyOjpnb0JhY2soKQogewotICAgIEhpc3Rv
cnlJdGVtKiBpdGVtID0gYmFja0l0ZW0oKTsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpCYWNr
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBiYWNrSXRl
bSgpKSB7CisgICAgICAgIG1fcGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlwZTo6QmFj
ayk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGJvb2wgQmFja0ZvcndhcmRDb250cm9sbGVyOjpnb0ZvcndhcmQoKQogewotICAgIEhpc3RvcnlJ
dGVtKiBpdGVtID0gZm9yd2FyZEl0ZW0oKTsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3
YXJkKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBmb3J3
YXJkSXRlbSgpKSB7CisgICAgICAgIG1fcGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlw
ZTo6Rm9yd2FyZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgQmFja0ZvcndhcmRDb250cm9sbGVyOjphZGRJdGVtKFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IGl0ZW0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0Jh
Y2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlz
dC5jcHAKaW5kZXggY2NlMDdmNDk5OTE0ZGUzN2IzMTE4YmEwNzhiM2Y5YTUwMjRjNzYwNS4uMmE1
MmI2ZTU5YzU4ZjJkMjY4Y2NhNTljMGZkNDVmNGRlZjkxNjE1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tG
b3J3YXJkTGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAg
ICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKICAg
ICAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBtX2VudHJ5SGFz
aC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZShp
dGVtLmdldCgpKTsKKyAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVt
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAgICAgICBS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXNbMF07CiAgICAgICAgIG1fZW50cmll
cy5yZW1vdmUoMCk7CiAgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVtKTsKLSAgICAgICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKICAgICAgICAgbV9jdXJyZW50LS07CiAgICAgfQog
CkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGlu
dCBzaXplKQogICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFz
dCgpOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICBtX2VudHJ5SGFz
aC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKGl0ZW0u
Z2V0KCkpOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAg
fQogCiAgICAgaWYgKCFzaXplKQpAQCAtMjU2LDEyICsyNTYsMTEgQEAgYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNsZWFyQWxsUGFnZUNhY2hlcygpCiAKIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9z
ZSgpCiB7Ci0gICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSht
X2VudHJpZXNbaV0uZ2V0KCkpOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2VudHJpZXMpCisg
ICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCplbnRyeSk7CiAgICAgbV9lbnRyaWVz
LmNsZWFyKCk7CiAgICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKLSAgICBtX3BhZ2UgPSAwOworICAg
IG1fcGFnZSA9IG51bGxwdHI7CiAgICAgbV9jbG9zZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCmluZGV4IDBjNDczYzA5NmMxYjUxYzE1YjBlNmMyYzky
ZGU1OWYwNTE1MzU4MTMuLjFiNTI1ZGYyOGM0NDc2ZmYyMGYzMjY1MTFhM2ExNGFjNTUyYmQ2MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCkBAIC0yODYsNyArMjg2LDcg
QEAgdm9pZCBIaXN0b3J5SXRlbTo6c2V0VVJMU3RyaW5nKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KQogCiB2b2lkIEhpc3RvcnlJdGVtOjpzZXRVUkwoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUodGhpcyk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5y
ZW1vdmUoKnRoaXMpOwogICAgIHNldFVSTFN0cmluZyh1cmwuc3RyaW5nKCkpOwogICAgIGNsZWFy
RG9jdW1lbnRTdGF0ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9Q
YWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCmluZGV4
IDlmNTNhNmJmNzJmYTZmMzI2YWQwYTc2MDViNTk0OGUyNzU5NTY5NzQuLjAzOThjMGJiOWI0MWJk
NjA2N2VlMWM4ODI0MmQ3M2Y1YWI1YmIwZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hp
c3RvcnkvUGFnZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNo
ZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE0IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMTAsNyArMTEwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGxv
Z1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShQYWdlKiBwYWdlLCBjb25zdCBTdHJp
bmcKICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZS0+bWFpbkZy
YW1lKCkuZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKSwgcmVhc29uKTsKIH0KIAotc3RhdGljIHVu
c2lnbmVkIGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihGcmFtZSYgZnJhbWUsIERpYWdub3N0aWNM
b2dnaW5nQ2xpZW50JiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgaW50IGluZGVudExldmVsKQor
c3RhdGljIHVuc2lnbmVkIGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihGcmFtZSYgZnJhbWUsIERp
YWdub3N0aWNMb2dnaW5nQ2xpZW50JiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgdW5zaWduZWQg
aW5kZW50TGV2ZWwpCiB7CiAgICAgUENMT0coIistLS0iKTsKICAgICBpZiAoIWZyYW1lLmxvYWRl
cigpLmRvY3VtZW50TG9hZGVyKCkpIHsKQEAgLTIzNCw3ICsyMzQsNyBAQCBzdGF0aWMgdm9pZCBs
b2dDYW5DYWNoZVBhZ2VEZWNpc2lvbihQYWdlJiBwYWdlKQogICAgIGlmIChjdXJyZW50VVJMLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGludCBpbmRlbnRMZXZlbCA9IDA7
ICAgIAorICAgIHVuc2lnbmVkIGluZGVudExldmVsID0gMDsKICAgICBQQ0xPRygiLS0tLS0tLS1c
biBEZXRlcm1pbmluZyBpZiBwYWdlIGNhbiBiZSBjYWNoZWQ6Iik7CiAgICAgCiAgICAgdW5zaWdu
ZWQgcmVqZWN0UmVhc29ucyA9IDA7CkBAIC0yOTcsMjYgKzI5NywxNyBAQCBQYWdlQ2FjaGUmIFBh
Z2VDYWNoZTo6c2hhcmVkKCkKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGFnZUNhY2hlPiBn
bG9iYWxQYWdlQ2FjaGU7CiAgICAgcmV0dXJuIGdsb2JhbFBhZ2VDYWNoZTsKIH0KLQotUGFnZUNh
Y2hlOjpQYWdlQ2FjaGUoKQotICAgIDogbV9jYXBhY2l0eSgwKQotICAgICwgbV9zaXplKDApCi0g
ICAgLCBtX2hlYWQoMCkKLSAgICAsIG1fdGFpbCgwKQotICAgICwgbV9zaG91bGRDbGVhckJhY2tp
bmdTdG9yZXMoZmFsc2UpCi17Ci19CiAgICAgCi1ib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdl
Q29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCitib29sIFBhZ2VDYWNoZTo6Y2FuQ2Fj
aGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSYgZnJhbWUpCiB7Ci0gICAgZm9yIChGcmFt
ZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2FuQ2FjaGVQYWdlQ29u
dGFpbmluZ1RoaXNGcmFtZShjaGlsZCkpCisgICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS50
cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJs
aW5nKCkpIHsKKyAgICAgICAgaWYgKCFjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKCpj
aGlsZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEZyYW1l
TG9hZGVyJiBmcmFtZUxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKKyAgICBGcmFtZUxvYWRlciYg
ZnJhbWVMb2FkZXIgPSBmcmFtZS5sb2FkZXIoKTsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1l
bnRMb2FkZXIgPSBmcmFtZUxvYWRlci5kb2N1bWVudExvYWRlcigpOwotICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZy
YW1lLmRvY3VtZW50KCk7CiAgICAgCiAgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyCiAjaWYgIVBM
QVRGT1JNKElPUykKQEAgLTMyNiw4ICszMTcsOCBAQCBib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQ
YWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCiAjZW5kaWYKICAgICAgICAgLy8g
RG8gbm90IGNhY2hlIGVycm9yIHBhZ2VzICh0aGVzZSBjYW4gYmUgcmVjb2duaXplZCBhcyBwYWdl
cyB3aXRoIHN1YnN0aXR1dGUgZGF0YSBvciB1bnJlYWNoYWJsZSBVUkxzKS4KICAgICAgICAgJiYg
IShkb2N1bWVudExvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCkgJiYgIWRvY3VtZW50
TG9hZGVyLT5zdWJzdGl0dXRlRGF0YSgpLmZhaWxpbmdVUkwoKS5pc0VtcHR5KCkpCi0gICAgICAg
ICYmICghZnJhbWVMb2FkZXIuc3ViZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSB8fCBm
cmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpKQotICAg
ICAgICAmJiAhKGZyYW1lLT5pc01haW5GcmFtZSgpICYmIGRvY3VtZW50LT51cmwoKS5wcm90b2Nv
bElzKCJodHRwcyIpICYmIGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENv
bnRhaW5zTm9TdG9yZSgpKQorICAgICAgICAmJiAoIWZyYW1lTG9hZGVyLnN1YmZyYW1lTG9hZGVy
KCkuY29udGFpbnNQbHVnaW5zKCkgfHwgZnJhbWUucGFnZSgpLT5zZXR0aW5ncygpLnBhZ2VDYWNo
ZVN1cHBvcnRzUGx1Z2lucygpKQorICAgICAgICAmJiAhKGZyYW1lLmlzTWFpbkZyYW1lKCkgJiYg
ZG9jdW1lbnQtPnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgZG9jdW1lbnRMb2FkZXItPnJl
c3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpCiAgICAgICAgICYmICFEYXRh
YmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5oYXNPcGVuRGF0YWJhc2VzKGRvY3VtZW50KQogICAgICAg
ICAmJiBmcmFtZUxvYWRlci5oaXN0b3J5KCkuY3VycmVudEl0ZW0oKQogICAgICAgICAmJiAhZnJh
bWVMb2FkZXIucXVpY2tSZWRpcmVjdENvbWluZygpCkBAIC0zNTcsOCArMzQ4LDggQEAgYm9vbCBQ
YWdlQ2FjaGU6OmNhbkNhY2hlKFBhZ2UqIHBhZ2UpIGNvbnN0CiAgICAgLy8gb3ZlciBpdCBhZ2Fp
biB3aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KICAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0g
cGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkubG9hZFR5cGUoKTsKICAgICAKLSAgICByZXR1cm4g
bV9jYXBhY2l0eSA+IDAKLSAgICAgICAgJiYgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFt
ZSgmcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgcmV0dXJuIG1fbWF4U2l6ZSA+IDAKKyAgICAgICAg
JiYgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShwYWdlLT5tYWluRnJhbWUoKSkKICAg
ICAgICAgJiYgcGFnZS0+c2V0dGluZ3MoKS51c2VzUGFnZUNhY2hlKCkKICNpZiBFTkFCTEUoREVW
SUNFX09SSUVOVEFUSU9OKSAmJiAhUExBVEZPUk0oSU9TKQogICAgICAgICAmJiAhRGV2aWNlTW90
aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChwYWdlKQpAQCAtMzczLDI3ICszNjQsMjQgQEAgYm9v
bCBQYWdlQ2FjaGU6OmNhbkNhY2hlKFBhZ2UqIHBhZ2UpIGNvbnN0CiAgICAgICAgICAgICB8fCBs
b2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOwogfQogCi12b2lk
IFBhZ2VDYWNoZTo6cHJ1bmVUb0NhcGFjaXR5Tm93KGludCBjYXBhY2l0eSwgUHJ1bmluZ1JlYXNv
biBwcnVuaW5nUmVhc29uKQordm9pZCBQYWdlQ2FjaGU6OnBydW5lVG9TaXplTm93KHVuc2lnbmVk
IHNpemUsIFBydW5pbmdSZWFzb24gcHJ1bmluZ1JlYXNvbikKIHsKLSAgICBUZW1wb3JhcnlDaGFu
Z2U8aW50PihtX2NhcGFjaXR5LCBzdGQ6Om1heChjYXBhY2l0eSwgMCkpOworICAgIFRlbXBvcmFy
eUNoYW5nZTx1bnNpZ25lZD4obV9tYXhTaXplLCBzaXplKTsKICAgICBwcnVuZShwcnVuaW5nUmVh
c29uKTsKIH0KIAotdm9pZCBQYWdlQ2FjaGU6OnNldENhcGFjaXR5KGludCBjYXBhY2l0eSkKK3Zv
aWQgUGFnZUNhY2hlOjpzZXRNYXhTaXplKHVuc2lnbmVkIG1heFNpemUpCiB7Ci0gICAgQVNTRVJU
KGNhcGFjaXR5ID49IDApOwotICAgIG1fY2FwYWNpdHkgPSBzdGQ6Om1heChjYXBhY2l0eSwgMCk7
Ci0KKyAgICBtX21heFNpemUgPSBtYXhTaXplOwogICAgIHBydW5lKFBydW5pbmdSZWFzb246Ok5v
bmUpOwogfQogCi1pbnQgUGFnZUNhY2hlOjpmcmFtZUNvdW50KCkgY29uc3QKK3Vuc2lnbmVkIFBh
Z2VDYWNoZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgaW50IGZyYW1lQ291bnQgPSAwOwot
ICAgIGZvciAoSGlzdG9yeUl0ZW0qIGN1cnJlbnQgPSBtX2hlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5tX25leHQpIHsKLSAgICAgICAgKytmcmFtZUNvdW50OwotICAgICAgICBBU1NF
UlQoY3VycmVudC0+bV9jYWNoZWRQYWdlKTsKLSAgICAgICAgZnJhbWVDb3VudCArPSBjdXJyZW50
LT5tX2NhY2hlZFBhZ2UtPmNhY2hlZE1haW5GcmFtZSgpLT5kZXNjZW5kYW50RnJhbWVDb3VudCgp
OworICAgIHVuc2lnbmVkIGZyYW1lQ291bnQgPSBtX2l0ZW1zLnNpemUoKTsKKyAgICBmb3IgKGF1
dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIEFTU0VSVChpdGVtLT5tX2NhY2hlZFBhZ2Up
OworICAgICAgICBmcmFtZUNvdW50ICs9IGl0ZW0tPm1fY2FjaGVkUGFnZS0+Y2FjaGVkTWFpbkZy
YW1lKCktPmRlc2NlbmRhbnRGcmFtZUNvdW50KCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBm
cmFtZUNvdW50OwpAQCAtNDAxLDI2ICszODksMjYgQEAgaW50IFBhZ2VDYWNoZTo6ZnJhbWVDb3Vu
dCgpIGNvbnN0CiAKIHZvaWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxl
UmVjYWxjKCkKIHsKLSAgICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+bV9uZXh0KSB7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50
LT5tX2NhY2hlZFBhZ2UpOwotICAgICAgICBjdXJyZW50LT5tX2NhY2hlZFBhZ2UtPm1hcmtGb3JW
aXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9pdGVtcykg
eworICAgICAgICBBU1NFUlQoaXRlbS0+bV9jYWNoZWRQYWdlKTsKKyAgICAgICAgaXRlbS0+bV9j
YWNoZWRQYWdlLT5tYXJrRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KIAot
dm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyhQYWdlKiBwYWdlKQor
dm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyhQYWdlJiBwYWdlKQog
ewotICAgIGZvciAoSGlzdG9yeUl0ZW0qIGN1cnJlbnQgPSBtX2hlYWQ7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5tX25leHQpIHsKLSAgICAgICAgQ2FjaGVkUGFnZSYgY2FjaGVkUGFnZSA9
ICpjdXJyZW50LT5tX2NhY2hlZFBhZ2U7Ci0gICAgICAgIGlmICgmcGFnZS0+bWFpbkZyYW1lKCkg
PT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWUoKSkKKyAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIENhY2hlZFBhZ2UmIGNhY2hlZFBh
Z2UgPSAqaXRlbS0+bV9jYWNoZWRQYWdlOworICAgICAgICBpZiAoJnBhZ2UubWFpbkZyYW1lKCkg
PT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWUoKSkKICAgICAg
ICAgICAgIGNhY2hlZFBhZ2UubWFya0ZvckZ1bGxTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KIAot
dm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZChQYWdlKiBwYWdl
KQordm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZChQYWdlJiBw
YWdlKQogewotICAgIGZvciAoSGlzdG9yeUl0ZW0qIGN1cnJlbnQgPSBtX2hlYWQ7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHQpIHsKLSAgICAgICAgQ2FjaGVkUGFnZSYgY2FjaGVk
UGFnZSA9ICpjdXJyZW50LT5tX2NhY2hlZFBhZ2U7Ci0gICAgICAgIGlmICgmcGFnZS0+bWFpbkZy
YW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWUoKSkK
KyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIENhY2hlZFBhZ2UmIGNh
Y2hlZFBhZ2UgPSAqaXRlbS0+bV9jYWNoZWRQYWdlOworICAgICAgICBpZiAoJnBhZ2UubWFpbkZy
YW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWUoKSkK
ICAgICAgICAgICAgIGNhY2hlZFBhZ2UubWFya0ZvckRldmljZVNjYWxlQ2hhbmdlZCgpOwogICAg
IH0KIH0KQEAgLTQyOCw5ICs0MTYsOSBAQCB2b2lkIFBhZ2VDYWNoZTo6bWFya1BhZ2VzRm9yRGV2
aWNlU2NhbGVDaGFuZ2VkKFBhZ2UqIHBhZ2UpCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogdm9p
ZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQogewot
ICAgIGZvciAoSGlzdG9yeUl0ZW0qIGN1cnJlbnQgPSBtX2hlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5tX25leHQpIHsKLSAgICAgICAgQVNTRVJUKGN1cnJlbnQtPm1fY2FjaGVkUGFn
ZSk7Ci0gICAgICAgIGN1cnJlbnQtPm1fY2FjaGVkUGFnZS0+bWFya0ZvckNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWQoKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAg
IEFTU0VSVChpdGVtLT5tX2NhY2hlZFBhZ2UpOworICAgICAgICBpdGVtLT5tX2NhY2hlZFBhZ2Ut
Pm1hcmtGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAgICAgfQogfQogI2VuZGlmCkBA
IC00NDIsNyArNDMwLDcgQEAgc3RhdGljIFN0cmluZyBwcnVuaW5nUmVhc29uVG9EaWFnbm9zdGlj
TG9nZ2luZ0tleShQcnVuaW5nUmVhc29uIHBydW5pbmdSZWFzb24pCiAgICAgICAgIHJldHVybiBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnBydW5lZER1ZVRvTWVtb3J5UHJlc3N1cmVLZXkoKTsKICAg
ICBjYXNlIFBydW5pbmdSZWFzb246OlByb2Nlc3NTdXNwZW5kZWQ6CiAgICAgICAgIHJldHVybiBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnBydW5lZER1ZVRvUHJvY2Vzc1N1c3BlbmRlZCgpOwotICAg
IGNhc2UgUHJ1bmluZ1JlYXNvbjo6UmVhY2hlZENhcGFjaXR5OgorICAgIGNhc2UgUHJ1bmluZ1Jl
YXNvbjo6UmVhY2hlZE1heFNpemU6CiAgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OnBydW5lZER1ZVRvQ2FwYWNpdHlSZWFjaGVkKCk7CiAgICAgY2FzZSBQcnVuaW5nUmVhc29u
OjpOb25lOgogICAgICAgICBicmVhazsKQEAgLTQ1MSw0NSArNDM5LDMzIEBAIHN0YXRpYyBTdHJp
bmcgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoUHJ1bmluZ1JlYXNvbiBwcnVu
aW5nUmVhc29uKQogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCi12b2lkIFBhZ2VDYWNo
ZTo6YWRkKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IHBycEl0ZW0sIFBhZ2UmIHBhZ2UpCit2b2lk
IFBhZ2VDYWNoZTo6YWRkKEhpc3RvcnlJdGVtJiBpdGVtLCBQYWdlJiBwYWdlKQogewotICAgIEFT
U0VSVChwcnBJdGVtKTsKICAgICBBU1NFUlQoY2FuQ2FjaGUoJnBhZ2UpKTsKLSAgICAKLSAgICBI
aXN0b3J5SXRlbSogaXRlbSA9IHBycEl0ZW0ubGVha1JlZigpOyAvLyBCYWxhbmNlZCBpbiByZW1v
dmUoKS4KIAogICAgIC8vIFJlbW92ZSBzdGFsZSBjYWNoZSBlbnRyeSBpZiBuZWNlc3NhcnkuCi0g
ICAgaWYgKGl0ZW0tPm1fY2FjaGVkUGFnZSkKLSAgICAgICAgcmVtb3ZlKGl0ZW0pOworICAgIHJl
bW92ZShpdGVtKTsKIAotICAgIGl0ZW0tPm1fY2FjaGVkUGFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8
Q2FjaGVkUGFnZT4ocGFnZSk7Ci0gICAgaXRlbS0+bV9wcnVuaW5nUmVhc29uID0gUHJ1bmluZ1Jl
YXNvbjo6Tm9uZTsKLSAgICBhZGRUb0xSVUxpc3QoaXRlbSk7Ci0gICAgKyttX3NpemU7CisgICAg
aXRlbS5tX2NhY2hlZFBhZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZFBhZ2U+KHBhZ2UpOwor
ICAgIGl0ZW0ubV9wcnVuaW5nUmVhc29uID0gUHJ1bmluZ1JlYXNvbjo6Tm9uZTsKKyAgICBtX2l0
ZW1zLmFkZCgmaXRlbSk7CiAgICAgCi0gICAgcHJ1bmUoUHJ1bmluZ1JlYXNvbjo6UmVhY2hlZENh
cGFjaXR5KTsKKyAgICBwcnVuZShQcnVuaW5nUmVhc29uOjpSZWFjaGVkTWF4U2l6ZSk7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBQYWdlQ2FjaGU6OnRha2UoSGlzdG9yeUl0ZW0q
IGl0ZW0sIFBhZ2UqIHBhZ2UpCitzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gUGFnZUNhY2hl
Ojp0YWtlKEhpc3RvcnlJdGVtJiBpdGVtLCBQYWdlKiBwYWdlKQogewotICAgIGlmICghaXRlbSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFn
ZT4gY2FjaGVkUGFnZSA9IFdURjo6bW92ZShpdGVtLT5tX2NhY2hlZFBhZ2UpOwotCi0gICAgcmVt
b3ZlRnJvbUxSVUxpc3QoaXRlbSk7Ci0gICAgLS1tX3NpemU7Ci0KLSAgICBpdGVtLT5kZXJlZigp
OyAvLyBCYWxhbmNlZCBpbiBhZGQoKS4KLQotICAgIGlmICghY2FjaGVkUGFnZSkgewotICAgICAg
ICBpZiAoaXRlbS0+bV9wcnVuaW5nUmVhc29uICE9IFBydW5pbmdSZWFzb246Ok5vbmUpCi0gICAg
ICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgcHJ1bmlu
Z1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoaXRlbS0+bV9wcnVuaW5nUmVhc29uKSk7Cisg
ICAgaWYgKCFpdGVtLm1fY2FjaGVkUGFnZSkgeworICAgICAgICBpZiAoaXRlbS5tX3BydW5pbmdS
ZWFzb24gIT0gUHJ1bmluZ1JlYXNvbjo6Tm9uZSkKKyAgICAgICAgICAgIGxvZ1BhZ2VDYWNoZUZh
aWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBwcnVuaW5nUmVhc29uVG9EaWFnbm9zdGljTG9n
Z2luZ0tleShpdGVtLm1fcHJ1bmluZ1JlYXNvbikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IFdU
Rjo6bW92ZShpdGVtLm1fY2FjaGVkUGFnZSk7CisgICAgbV9pdGVtcy5yZW1vdmUoJml0ZW0pOwor
CiAgICAgaWYgKGNhY2hlZFBhZ2UtPmhhc0V4cGlyZWQoKSkgewotICAgICAgICBMT0coUGFnZUNh
Y2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBi
ZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaXRlbS0+dXJsKCkuc3RyaW5nKCkuYXNj
aWkoKS5kYXRhKCkpOworICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdl
IGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBl
eHBpcmVkIiwgaXRlbS51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIGxv
Z1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBEaWFnbm9zdGljTG9nZ2lu
Z0tleXM6OmV4cGlyZWRLZXkoKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAg
LTQ5Nyw3OCArNDczLDQxIEBAIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBQYWdlQ2FjaGU6
OnRha2UoSGlzdG9yeUl0ZW0qIGl0ZW0sIFBhZ2UqIHBhZ2UpCiAgICAgcmV0dXJuIGNhY2hlZFBh
Z2U7CiB9CiAKLUNhY2hlZFBhZ2UqIFBhZ2VDYWNoZTo6Z2V0KEhpc3RvcnlJdGVtKiBpdGVtLCBQ
YWdlKiBwYWdlKQorQ2FjaGVkUGFnZSogUGFnZUNhY2hlOjpnZXQoSGlzdG9yeUl0ZW0mIGl0ZW0s
IFBhZ2UqIHBhZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCFpdGVtKQorICAgIENhY2hlZFBhZ2UqIGNh
Y2hlZFBhZ2UgPSBpdGVtLm1fY2FjaGVkUGFnZS5nZXQoKTsKKyAgICBpZiAoIWNhY2hlZFBhZ2Up
IHsKKyAgICAgICAgaWYgKGl0ZW0ubV9wcnVuaW5nUmVhc29uICE9IFBydW5pbmdSZWFzb246Ok5v
bmUpCisgICAgICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFn
ZSwgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoaXRlbS5tX3BydW5pbmdSZWFz
b24pKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCi0gICAgaWYgKENhY2hlZFBh
Z2UqIGNhY2hlZFBhZ2UgPSBpdGVtLT5tX2NhY2hlZFBhZ2UuZ2V0KCkpIHsKLSAgICAgICAgaWYg
KCFjYWNoZWRQYWdlLT5oYXNFeHBpcmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gY2FjaGVkUGFn
ZTsKLSAgICAgICAgCi0gICAgICAgIExPRyhQYWdlQ2FjaGUsICJOb3QgcmVzdG9yaW5nIHBhZ2Ug
Zm9yICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUgZW50cnkgaGFzIGV4
cGlyZWQiLCBpdGVtLT51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgaWYgKGNh
Y2hlZFBhZ2UtPmhhc0V4cGlyZWQoKSkgeworICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJl
c3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hl
IGVudHJ5IGhhcyBleHBpcmVkIiwgaXRlbS51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CiAgICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBEaWFn
bm9zdGljTG9nZ2luZ0tleXM6OmV4cGlyZWRLZXkoKSk7CiAgICAgICAgIFBhZ2VDYWNoZTo6c2hh
cmVkKCkucmVtb3ZlKGl0ZW0pOwotICAgIH0gZWxzZSBpZiAoaXRlbS0+bV9wcnVuaW5nUmVhc29u
ICE9IFBydW5pbmdSZWFzb246Ok5vbmUpCi0gICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFn
bm9zdGljTWVzc2FnZShwYWdlLCBwcnVuaW5nUmVhc29uVG9EaWFnbm9zdGljTG9nZ2luZ0tleShp
dGVtLT5tX3BydW5pbmdSZWFzb24pKTsKLQotICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlZFBhZ2U7CiB9CiAKLXZvaWQg
UGFnZUNhY2hlOjpyZW1vdmUoSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIFBhZ2VDYWNoZTo6cmVt
b3ZlKEhpc3RvcnlJdGVtJiBpdGVtKQogewogICAgIC8vIFNhZmVseSBpZ25vcmUgYXR0ZW1wdHMg
dG8gcmVtb3ZlIGl0ZW1zIG5vdCBpbiB0aGUgY2FjaGUuCi0gICAgaWYgKCFpdGVtIHx8ICFpdGVt
LT5tX2NhY2hlZFBhZ2UpCisgICAgaWYgKCFpdGVtLm1fY2FjaGVkUGFnZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaXRlbS0+bV9jYWNoZWRQYWdlID0gbnVsbHB0cjsKLSAgICByZW1vdmVGcm9t
TFJVTGlzdChpdGVtKTsKLSAgICAtLW1fc2l6ZTsKLQotICAgIGl0ZW0tPmRlcmVmKCk7IC8vIEJh
bGFuY2VkIGluIGFkZCgpLgorICAgIGl0ZW0ubV9jYWNoZWRQYWdlID0gbnVsbHB0cjsKKyAgICBt
X2l0ZW1zLnJlbW92ZSgmaXRlbSk7CiB9CiAKIHZvaWQgUGFnZUNhY2hlOjpwcnVuZShQcnVuaW5n
UmVhc29uIHBydW5pbmdSZWFzb24pCiB7Ci0gICAgd2hpbGUgKG1fc2l6ZSA+IG1fY2FwYWNpdHkp
IHsKLSAgICAgICAgQVNTRVJUKG1fdGFpbCAmJiBtX3RhaWwtPm1fY2FjaGVkUGFnZSk7Ci0gICAg
ICAgIG1fdGFpbC0+bV9wcnVuaW5nUmVhc29uID0gcHJ1bmluZ1JlYXNvbjsKLSAgICAgICAgcmVt
b3ZlKG1fdGFpbCk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VDYWNoZTo6YWRkVG9MUlVMaXN0KEhp
c3RvcnlJdGVtKiBpdGVtKQotewotICAgIGl0ZW0tPm1fbmV4dCA9IG1faGVhZDsKLSAgICBpdGVt
LT5tX3ByZXYgPSAwOwotCi0gICAgaWYgKG1faGVhZCkgewotICAgICAgICBBU1NFUlQobV90YWls
KTsKLSAgICAgICAgbV9oZWFkLT5tX3ByZXYgPSBpdGVtOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEFTU0VSVCghbV90YWlsKTsKLSAgICAgICAgbV90YWlsID0gaXRlbTsKLSAgICB9Ci0KLSAgICBt
X2hlYWQgPSBpdGVtOwotfQotCi12b2lkIFBhZ2VDYWNoZTo6cmVtb3ZlRnJvbUxSVUxpc3QoSGlz
dG9yeUl0ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKCFpdGVtLT5tX25leHQpIHsKLSAgICAgICAgQVNT
RVJUKGl0ZW0gPT0gbV90YWlsKTsKLSAgICAgICAgbV90YWlsID0gaXRlbS0+bV9wcmV2OwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChpdGVtICE9IG1fdGFpbCk7Ci0gICAgICAgIGl0ZW0t
Pm1fbmV4dC0+bV9wcmV2ID0gaXRlbS0+bV9wcmV2OwotICAgIH0KLQotICAgIGlmICghaXRlbS0+
bV9wcmV2KSB7Ci0gICAgICAgIEFTU0VSVChpdGVtID09IG1faGVhZCk7Ci0gICAgICAgIG1faGVh
ZCA9IGl0ZW0tPm1fbmV4dDsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoaXRlbSAhPSBt
X2hlYWQpOwotICAgICAgICBpdGVtLT5tX3ByZXYtPm1fbmV4dCA9IGl0ZW0tPm1fbmV4dDsKKyAg
ICB3aGlsZSAocGFnZUNvdW50KCkgPiBtYXhTaXplKCkpIHsKKyAgICAgICAgYXV0byYgb2xkZXN0
SXRlbSA9IG1faXRlbXMuZmlyc3QoKTsKKyAgICAgICAgb2xkZXN0SXRlbS0+bV9jYWNoZWRQYWdl
ID0gbnVsbHB0cjsKKyAgICAgICAgb2xkZXN0SXRlbS0+bV9wcnVuaW5nUmVhc29uID0gcHJ1bmlu
Z1JlYXNvbjsKKyAgICAgICAgbV9pdGVtcy5yZW1vdmVGaXJzdCgpOwogICAgIH0KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgKaW5kZXggYzMxMGQ0ZTI4MWI0Yzk5MjlhZGE2OTlhMmZm
ODlkM2Y0NDk1OTdmZC4uYWQ1N2ZmNzFkYzJlMTEwMWI1ODNiYTdiZjk5NzcwNDBiMzY4ZDkxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNzUgKzI4LDY1IEBACiAKICNpbmNs
dWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotICAgIGNsYXNzIENhY2hlZFBhZ2U7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgSGlz
dG9yeUl0ZW07Ci0gICAgY2xhc3MgUGFnZTsKK2NsYXNzIENhY2hlZFBhZ2U7CitjbGFzcyBGcmFt
ZTsKK2NsYXNzIEhpc3RvcnlJdGVtOworY2xhc3MgUGFnZTsKIAotICAgIGVudW0gY2xhc3MgUHJ1
bmluZ1JlYXNvbiB7IE5vbmUsIFByb2Nlc3NTdXNwZW5kZWQsIE1lbW9yeVByZXNzdXJlLCBSZWFj
aGVkQ2FwYWNpdHkgfTsKLSAgICAKLSAgICBjbGFzcyBQYWdlQ2FjaGUgewotICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQYWdlQ2FjaGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIC8vIEZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIHBhZ2Ug
Y2FjaGUuCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYWdlQ2FjaGUmIHNoYXJlZCgp
OwotICAgICAgICAKLSAgICAgICAgYm9vbCBjYW5DYWNoZShQYWdlKikgY29uc3Q7CitlbnVtIGNs
YXNzIFBydW5pbmdSZWFzb24geyBOb25lLCBQcm9jZXNzU3VzcGVuZGVkLCBNZW1vcnlQcmVzc3Vy
ZSwgUmVhY2hlZE1heFNpemUgfTsKIAotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENh
cGFjaXR5KGludCk7IC8vIG51bWJlciBvZiBwYWdlcyB0byBjYWNoZQotICAgICAgICBpbnQgY2Fw
YWNpdHkoKSB7IHJldHVybiBtX2NhcGFjaXR5OyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFk
ZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiwgUGFnZSYpOyAvLyBQcnVuZXMgaWYgY2FwYWNpdHko
KSBpcyBleGNlZWRlZC4KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoSGlzdG9y
eUl0ZW0qKTsKLSAgICAgICAgQ2FjaGVkUGFnZSogZ2V0KEhpc3RvcnlJdGVtKiwgUGFnZSopOwot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gdGFrZShIaXN0b3J5SXRlbSosIFBh
Z2UqKTsKK2NsYXNzIFBhZ2VDYWNoZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZUNh
Y2hlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgLy8gRnVuY3Rpb24g
dG8gb2J0YWluIHRoZSBnbG9iYWwgcGFnZSBjYWNoZS4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUGFnZUNhY2hlJiBzaGFyZWQoKTsKIAotICAgICAgICBpbnQgcGFnZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIGludCBmcmFtZUNvdW50
KCkgY29uc3Q7CisgICAgYm9vbCBjYW5DYWNoZShQYWdlKikgY29uc3Q7CiAKLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBtYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7Cisg
ICAgLy8gVXNlZCB3aGVuIG1lbW9yeSBpcyBsb3cgdG8gcHJ1bmUgc29tZSBjYWNoZWQgcGFnZXMu
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZVRvU2l6ZU5vdyh1bnNpZ25lZCBtYXhTaXpl
LCBQcnVuaW5nUmVhc29uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1heFNpemUodW5z
aWduZWQpOyAvLyBudW1iZXIgb2YgcGFnZXMgdG8gY2FjaGUuCisgICAgdW5zaWduZWQgbWF4U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4U2l6ZTsgfQogCi0gICAgICAgIC8vIFdpbGwgbWFyayBh
bGwgY2FjaGVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGFnZSBhcyBuZWVkaW5n
IHN0eWxlIHJlY2FsYy4KLSAgICAgICAgdm9pZCBtYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMo
UGFnZSopOworICAgIHZvaWQgYWRkKEhpc3RvcnlJdGVtJiwgUGFnZSYpOyAvLyBQcnVuZXMgaWYg
bWF4U2l6ZSgpIGlzIGV4Y2VlZGVkLgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlKEhp
c3RvcnlJdGVtJik7CisgICAgQ2FjaGVkUGFnZSogZ2V0KEhpc3RvcnlJdGVtJiwgUGFnZSopIGNv
bnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiB0YWtlKEhpc3RvcnlJdGVtJiwg
UGFnZSopOwogCi0gICAgICAgIC8vIFVzZWQgd2hlbiBtZW1vcnkgaXMgbG93IHRvIHBydW5lIHNv
bWUgY2FjaGVkIHBhZ2VzLgotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lVG9DYXBh
Y2l0eU5vdyhpbnQgY2FwYWNpdHksIFBydW5pbmdSZWFzb24pOworICAgIHVuc2lnbmVkIHBhZ2VD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXMuc2l6ZSgpOyB9CisgICAgV0VCQ09SRV9FWFBP
UlQgdW5zaWduZWQgZnJhbWVDb3VudCgpIGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBtYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgLy8gV2lsbCBtYXJr
IGFsbCBjYWNoZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBwYWdlIGFzIG5lZWRp
bmcgc3R5bGUgcmVjYWxjLgorICAgIHZvaWQgbWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKFBh
Z2UmKTsKKyAgICB2b2lkIG1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZChQYWdlJik7CiAj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgICAgICB2b2lkIG1hcmtQYWdlc0ZvckNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICB2b2lkIG1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWQoKTsKICNlbmRpZgogCi0gICAgICAgIGJvb2wgc2hvdWxkQ2xlYXJCYWNraW5n
U3RvcmVzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXM7IH0KLSAg
ICAgICAgdm9pZCBzZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXMoYm9vbCBmbGFnKSB7IG1fc2hv
dWxkQ2xlYXJCYWNraW5nU3RvcmVzID0gZmxhZzsgfQotICAgICAgICB2b2lkIG1hcmtQYWdlc0Zv
ckRldmljZVNjYWxlQ2hhbmdlZChQYWdlKik7CisgICAgYm9vbCBzaG91bGRDbGVhckJhY2tpbmdT
dG9yZXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENsZWFyQmFja2luZ1N0b3JlczsgfQorICAg
IHZvaWQgc2V0U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKGJvb2wgZmxhZykgeyBtX3Nob3VsZENs
ZWFyQmFja2luZ1N0b3JlcyA9IGZsYWc7IH0KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFBhZ2VD
YWNoZSgpOyAvLyBVc2Ugc2hhcmVkKCkgaW5zdGVhZC4KLSAgICAgICAgflBhZ2VDYWNoZSgpOyAv
LyBOb3QgaW1wbGVtZW50ZWQgdG8gbWFrZSBzdXJlIG5vYm9keSBhY2NpZGVudGFsbHkgY2FsbHMg
ZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBub3QgZGVsZXRlIHNpbmdsZXRvbnMuCi0gICAgICAgIAot
ICAgICAgICBzdGF0aWMgYm9vbCBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKEZyYW1l
Kik7Citwcml2YXRlOgorICAgIFBhZ2VDYWNoZSgpID0gZGVmYXVsdDsgLy8gVXNlIHNoYXJlZCgp
IGluc3RlYWQuCisgICAgflBhZ2VDYWNoZSgpID0gZGVsZXRlOyAvLyBNYWtlIHN1cmUgbm9ib2R5
IGFjY2lkZW50YWxseSBjYWxscyBkZWxldGUgLS0gV2ViQ29yZSBkb2VzIG5vdCBkZWxldGUgc2lu
Z2xldG9ucy4KIAotICAgICAgICB2b2lkIGFkZFRvTFJVTGlzdChIaXN0b3J5SXRlbSopOyAvLyBB
ZGRzIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LgotICAgICAgICB2b2lkIHJlbW92ZUZyb21MUlVM
aXN0KEhpc3RvcnlJdGVtKik7CisgICAgc3RhdGljIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmlu
Z1RoaXNGcmFtZShGcmFtZSYpOwogCi0gICAgICAgIHZvaWQgcHJ1bmUoUHJ1bmluZ1JlYXNvbik7
CisgICAgdm9pZCBwcnVuZShQcnVuaW5nUmVhc29uKTsKIAotICAgICAgICBpbnQgbV9jYXBhY2l0
eTsKLSAgICAgICAgaW50IG1fc2l6ZTsKKyAgICBMaXN0SGFzaFNldDxSZWZQdHI8SGlzdG9yeUl0
ZW0+PiBtX2l0ZW1zOworICAgIHVuc2lnbmVkIG1fbWF4U2l6ZSB7MH07CisgICAgYm9vbCBtX3No
b3VsZENsZWFyQmFja2luZ1N0b3JlcyB7ZmFsc2V9OwogCi0gICAgICAgIC8vIExSVSBMaXN0Ci0g
ICAgICAgIEhpc3RvcnlJdGVtKiBtX2hlYWQ7Ci0gICAgICAgIEhpc3RvcnlJdGVtKiBtX3RhaWw7
Ci0gICAgICAgIAotICAgICAgICBib29sIG1fc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzOwotCi0g
ICAgICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFBhZ2VDYWNoZT47Ci0gICAg
fTsKKyAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxQYWdlQ2FjaGU+OworfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAppbmRleCA5MGI1YTBhMzNlYzZiOGNiZmExZDU5MWE2ZWY2ZjA5MjBkNGQ3ZGM0Li45NWZl
ZjYxZTA2MGIyNmU4MDA4ZDg0NTJiNmU3MjI3MWQ5NTcwYWUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjps
b2FkVVJMSW50b0NoaWxkRnJhbWUoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJl
ciwgRgogICAgICAgICBIaXN0b3J5SXRlbSogY2hpbGRJdGVtID0gcGFyZW50SXRlbS0+Y2hpbGRJ
dGVtV2l0aFRhcmdldChjaGlsZEZyYW1lLT50cmVlKCkudW5pcXVlTmFtZSgpKTsKICAgICAgICAg
aWYgKGNoaWxkSXRlbSkgewogICAgICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkubV9yZXF1
ZXN0ZWRIaXN0b3J5SXRlbSA9IGNoaWxkSXRlbTsKLSAgICAgICAgICAgIGNoaWxkRnJhbWUtPmxv
YWRlcigpLmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oY2hpbGRJdGVtLCBsb2FkVHlwZSgpLCBN
YXlBdHRlbXB0Q2FjaGVPbmx5TG9hZEZvckZvcm1TdWJtaXNzaW9uSXRlbSk7CisgICAgICAgICAg
ICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5sb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKCpjaGlsZEl0
ZW0sIGxvYWRUeXBlKCksIE1heUF0dGVtcHRDYWNoZU9ubHlMb2FkRm9yRm9ybVN1Ym1pc3Npb25J
dGVtKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTE3NDAsOCAr
MTc0MCw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiAgICAg
UmVmPEZyYW1lPiBwcm90ZWN0KG1fZnJhbWUpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hl
ZFBhZ2U+IGNhY2hlZFBhZ2U7Ci0gICAgaWYgKG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlKQotICAg
ICAgICBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFyZWQoKS50YWtlKGhpc3RvcnkoKS5wcm92
aXNpb25hbEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOworICAgIGlmIChtX2xvYWRpbmdGcm9tQ2Fj
aGVkUGFnZSAmJiBoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCkpCisgICAgICAgIGNhY2hlZFBh
Z2UgPSBQYWdlQ2FjaGU6OnNoYXJlZCgpLnRha2UoKmhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0o
KSwgbV9mcmFtZS5wYWdlKCkpOwogCiAgICAgTE9HKFBhZ2VDYWNoZSwgIldlYkNvcmVMb2FkaW5n
ICVzOiBBYm91dCB0byBjb21taXQgcHJvdmlzaW9uYWwgbG9hZCBmcm9tIHByZXZpb3VzIFVSTCAn
JXMnIHRvIG5ldyBVUkwgJyVzJyIsIG1fZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLAogICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCkgPyBtX2ZyYW1lLmRv
Y3VtZW50KCktPnVybCgpLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpLnV0ZjgoKS5k
YXRhKCkgOiAiIiwKQEAgLTE3NTgsMTEgKzE3NTgsMTEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29t
bWl0UHJvdmlzaW9uYWxMb2FkKCkKICAgICAgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlBy
dW5pbmcgcGFnZSBjYWNoZSBiZWNhdXNlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBhdDogJXMiLCBf
X1BSRVRUWV9GVU5DVElPTl9fKTsKICAgICAgICAgICAgIExPRyhQYWdlQ2FjaGUsICJQcnVuaW5n
IHBhZ2UgY2FjaGUgdG8gMCBkdWUgdG8gbWVtb3J5IHByZXNzdXJlIik7CiAgICAgICAgICAgICAv
LyBEb24ndCBjYWNoZSBhbnkgcGFnZSBpZiB3ZSBhcmUgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgot
ICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvQ2FwYWNpdHlOb3coMCwgUHJ1
bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOworICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFy
ZWQoKS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoc3lzdGVtTWVtb3J5TGV2ZWwoKSA8PSBtZW1vcnlMZXZlbFRocmVz
aG9sZFRvUHJ1bmVQYWdlQ2FjaGUpIHsKICAgICAgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwg
IlBydW5pbmcgcGFnZSBjYWNoZSBiZWNhdXNlIHN5c3RlbSBtZW1vcnkgbGV2ZWwgaXMgJWQgYXQ6
ICVzIiwgc3lzdGVtTWVtb3J5TGV2ZWwoKSwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CiAgICAgICAg
ICAgICBMT0coUGFnZUNhY2hlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIHRvICVkIGR1ZSB0byBsb3cg
bWVtb3J5IChsZXZlbCAlZCBsZXNzIG9yIGVxdWFsIHRvICVkIHRocmVzaG9sZCkiLCBQYWdlQ2Fj
aGU6OnNoYXJlZCgpLmNhcGFjaXR5KCkgLyAyLCBzeXN0ZW1NZW1vcnlMZXZlbCgpLCBtZW1vcnlM
ZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUpOwotICAgICAgICAgICAgUGFnZUNhY2hlOjpz
aGFyZWQoKS5wcnVuZVRvQ2FwYWNpdHlOb3coUGFnZUNhY2hlOjpzaGFyZWQoKS5jYXBhY2l0eSgp
IC8gMiwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOworICAgICAgICAgICAgUGFnZUNh
Y2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdyhQYWdlQ2FjaGU6OnNoYXJlZCgpLm1heFNpemUo
KSAvIDIsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKICAgICAgICAgfQogICAgIH0K
ICNlbmRpZgpAQCAtMTc3MSw4ICsxNzcxLDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJv
dmlzaW9uYWxMb2FkKCkKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNhY2hl
IHRoZSBwYWdlIHdlIGFyZSBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBpbnRvIHRoZSBiYWNrL2Zvcndh
cmQgY2FjaGUuCiAgICAgLy8gV2UgYXJlIGRvaW5nIHRoaXMgaGVyZSBiZWNhdXNlIHdlIGtub3cg
Zm9yIHN1cmUgdGhhdCBhIG5ldyBwYWdlIGlzIGFib3V0IHRvIGJlIGxvYWRlZC4KLSAgICBIaXN0
b3J5SXRlbSogaXRlbSA9IGhpc3RvcnkoKS5jdXJyZW50SXRlbSgpOwotICAgIGlmICghbV9mcmFt
ZS50cmVlKCkucGFyZW50KCkgJiYgUGFnZUNhY2hlOjpzaGFyZWQoKS5jYW5DYWNoZShtX2ZyYW1l
LnBhZ2UoKSkgJiYgIWl0ZW0tPmlzSW5QYWdlQ2FjaGUoKSkKKyAgICBIaXN0b3J5SXRlbSYgaXRl
bSA9ICpoaXN0b3J5KCkuY3VycmVudEl0ZW0oKTsKKyAgICBpZiAoIW1fZnJhbWUudHJlZSgpLnBh
cmVudCgpICYmIFBhZ2VDYWNoZTo6c2hhcmVkKCkuY2FuQ2FjaGUobV9mcmFtZS5wYWdlKCkpICYm
ICFpdGVtLmlzSW5QYWdlQ2FjaGUoKSkKICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5hZGQo
aXRlbSwgKm1fZnJhbWUucGFnZSgpKTsKIAogICAgIGlmIChtX2xvYWRUeXBlICE9IEZyYW1lTG9h
ZFR5cGU6OlJlcGxhY2UpCkBAIC0zMTI3LDE0ICszMTI3LDE0IEBAIEZyYW1lKiBGcmFtZUxvYWRl
cjo6ZmluZEZyYW1lRm9yTmF2aWdhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIERvY3Vt
ZW50KiBhCiAgICAgICAgIGFjdGl2ZURvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwogCiAg
ICAgaWYgKCFhY3RpdmVEb2N1bWVudC0+Y2FuTmF2aWdhdGUoZnJhbWUpKQotICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gZnJhbWU7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXI6OmxvYWRTYW1lRG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVt
KQordm9pZCBGcmFtZUxvYWRlcjo6bG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0mIGl0
ZW0pCiB7Ci0gICAgQVNTRVJUKGl0ZW0tPmRvY3VtZW50U2VxdWVuY2VOdW1iZXIoKSA9PSBoaXN0
b3J5KCkuY3VycmVudEl0ZW0oKS0+ZG9jdW1lbnRTZXF1ZW5jZU51bWJlcigpKTsKKyAgICBBU1NF
UlQoaXRlbS5kb2N1bWVudFNlcXVlbmNlTnVtYmVyKCkgPT0gaGlzdG9yeSgpLmN1cnJlbnRJdGVt
KCktPmRvY3VtZW50U2VxdWVuY2VOdW1iZXIoKSk7CiAKICAgICAvLyBTYXZlIHVzZXIgdmlldyBz
dGF0ZSB0byB0aGUgY3VycmVudCBoaXN0b3J5IGl0ZW0gaGVyZSBzaW5jZSB3ZSBkb24ndCBkbyBh
IG5vcm1hbCBsb2FkLgogICAgIC8vIEZJWE1FOiBEb2VzIGZvcm0gc3RhdGUgbmVlZCB0byBiZSBz
YXZlZCBoZXJlIHRvbz8KQEAgLTMxNDIsMTAgKzMxNDIsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
bG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiAgICAgaWYgKEZyYW1lVmll
dyogdmlldyA9IG1fZnJhbWUudmlldygpKQogICAgICAgICB2aWV3LT5zZXRXYXNTY3JvbGxlZEJ5
VXNlcihmYWxzZSk7CiAKLSAgICBoaXN0b3J5KCkuc2V0Q3VycmVudEl0ZW0oaXRlbSk7CisgICAg
aGlzdG9yeSgpLnNldEN1cnJlbnRJdGVtKCZpdGVtKTsKICAgICAgICAgCiAgICAgLy8gbG9hZElu
U2FtZURvY3VtZW50KCkgYWN0dWFsbHkgY2hhbmdlcyB0aGUgVVJMIGFuZCBub3RpZmllcyBsb2Fk
IGRlbGVnYXRlcyBvZiBhICJmYWtlIiBsb2FkCi0gICAgbG9hZEluU2FtZURvY3VtZW50KGl0ZW0t
PnVybCgpLCBpdGVtLT5zdGF0ZU9iamVjdCgpLCBmYWxzZSk7CisgICAgbG9hZEluU2FtZURvY3Vt
ZW50KGl0ZW0udXJsKCksIGl0ZW0uc3RhdGVPYmplY3QoKSwgZmFsc2UpOwogCiAgICAgLy8gUmVz
dG9yZSB1c2VyIHZpZXcgc3RhdGUgZnJvbSB0aGUgY3VycmVudCBoaXN0b3J5IGl0ZW0gaGVyZSBz
aW5jZSB3ZSBkb24ndCBkbyBhIG5vcm1hbCBsb2FkLgogICAgIGhpc3RvcnkoKS5yZXN0b3JlU2Ny
b2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKQEAgLTMxNTQsMTAgKzMxNTQsMTAgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6bG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiAvLyBG
SVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgcmVhbGx5IGJlIHNwbGl0IGludG8gYSBjb3VwbGUg
cGllY2VzLCBzb21lIG9mCiAvLyB3aGljaCBzaG91bGQgYmUgbWV0aG9kcyBvZiBIaXN0b3J5Q29u
dHJvbGxlciBhbmQgc29tZSBvZiB3aGljaCBzaG91bGQgYmUKIC8vIG1ldGhvZHMgb2YgRnJhbWVM
b2FkZXIuCi12b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3Rv
cnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlLCBGb3JtU3VibWlzc2lvbkNhY2hl
TG9hZFBvbGljeSBjYWNoZUxvYWRQb2xpY3kpCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVy
ZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtJiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBl
LCBGb3JtU3VibWlzc2lvbkNhY2hlTG9hZFBvbGljeSBjYWNoZUxvYWRQb2xpY3kpCiB7CiAgICAg
Ly8gUmVtZW1iZXIgdGhpcyBpdGVtIHNvIHdlIGNhbiB0cmF2ZXJzZSBhbnkgY2hpbGQgaXRlbXMg
YXMgY2hpbGQgZnJhbWVzIGxvYWQKLSAgICBoaXN0b3J5KCkuc2V0UHJvdmlzaW9uYWxJdGVtKGl0
ZW0pOworICAgIGhpc3RvcnkoKS5zZXRQcm92aXNpb25hbEl0ZW0oJml0ZW0pOwogCiAgICAgaWYg
KENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNoYXJlZCgpLmdldChpdGVtLCBt
X2ZyYW1lLnBhZ2UoKSkpIHsKICAgICAgICAgYXV0byBkb2N1bWVudExvYWRlciA9IGNhY2hlZFBh
Z2UtPmRvY3VtZW50TG9hZGVyKCk7CkBAIC0zMTY3LDE3ICszMTY3LDE3IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1l
TG9hZFR5cGUgbG9hCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBVUkwgaXRlbVVSTCA9
IGl0ZW0tPnVybCgpOwotICAgIFVSTCBpdGVtT3JpZ2luYWxVUkwgPSBpdGVtLT5vcmlnaW5hbFVS
TCgpOworICAgIFVSTCBpdGVtVVJMID0gaXRlbS51cmwoKTsKKyAgICBVUkwgaXRlbU9yaWdpbmFs
VVJMID0gaXRlbS5vcmlnaW5hbFVSTCgpOwogICAgIFVSTCBjdXJyZW50VVJMOwogICAgIGlmIChk
b2N1bWVudExvYWRlcigpKQogICAgICAgICBjdXJyZW50VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+
dXJsKCk7Ci0gICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IGl0ZW0tPmZvcm1EYXRhKCk7
CisgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IGl0ZW0uZm9ybURhdGEoKTsKIAogICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGl0ZW1VUkwpOwogCi0gICAgaWYgKCFpdGVtLT5yZWZl
cnJlcigpLmlzTnVsbCgpKQotICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihpdGVtLT5y
ZWZlcnJlcigpKTsKKyAgICBpZiAoIWl0ZW0ucmVmZXJyZXIoKS5pc051bGwoKSkKKyAgICAgICAg
cmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIoaXRlbS5yZWZlcnJlcigpKTsKICAgICAKICAgICAvLyBJ
ZiB0aGlzIHdhcyBhIHJlcG9zdCB0aGF0IGZhaWxlZCB0aGUgcGFnZSBjYWNoZSwgd2UgbWlnaHQg
dHJ5IHRvIHJlcG9zdCB0aGUgZm9ybS4KICAgICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbjsKQEAg
LTMxODYsOCArMzE4Niw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVu
dEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hCiAKICAgICAgICAgcmVx
dWVzdC5zZXRIVFRQTWV0aG9kKCJQT1NUIik7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHko
Zm9ybURhdGEpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBDb250ZW50VHlwZShpdGVtLT5mb3Jt
Q29udGVudFR5cGUoKSk7Ci0gICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdGVtLT5yZWZlcnJlcigp
KTsKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQQ29udGVudFR5cGUoaXRlbS5mb3JtQ29udGVudFR5
cGUoKSk7CisgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhpdGVtLnJlZmVycmVyKCkpOwogICAgICAg
ICBhZGRIVFRQT3JpZ2luSWZOZWVkZWQocmVxdWVzdCwgc2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5n
KCkpOwogCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBhZGQgZXh0cmEgZmllbGRzIHRvIHRoZSBy
ZXF1ZXN0IGFmdGVyIHRoZSBPcmlnaW4gaGVhZGVyIGlzIGFkZGVkIGZvciB0aGUgRm9ybURhdGEg
Y2FzZS4KQEAgLTMyNDIsMTEgKzMyNDIsMTEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZl
cmVudERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2EKIH0K
IAogLy8gTG9hZHMgY29udGVudCBpbnRvIHRoaXMgZnJhbWUsIGFzIHNwZWNpZmllZCBieSBoaXN0
b3J5IGl0ZW0KLXZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBG
cmFtZUxvYWRUeXBlIGxvYWRUeXBlKQordm9pZCBGcmFtZUxvYWRlcjo6bG9hZEl0ZW0oSGlzdG9y
eUl0ZW0mIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUpCiB7Ci0gICAgbV9yZXF1ZXN0ZWRI
aXN0b3J5SXRlbSA9IGl0ZW07CisgICAgbV9yZXF1ZXN0ZWRIaXN0b3J5SXRlbSA9ICZpdGVtOwog
ICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSA9IGhpc3RvcnkoKS5jdXJyZW50SXRlbSgpOwot
ICAgIGJvb2wgc2FtZURvY3VtZW50TmF2aWdhdGlvbiA9IGN1cnJlbnRJdGVtICYmIGl0ZW0tPnNo
b3VsZERvU2FtZURvY3VtZW50TmF2aWdhdGlvblRvKGN1cnJlbnRJdGVtKTsKKyAgICBib29sIHNh
bWVEb2N1bWVudE5hdmlnYXRpb24gPSBjdXJyZW50SXRlbSAmJiBpdGVtLnNob3VsZERvU2FtZURv
Y3VtZW50TmF2aWdhdGlvblRvKGN1cnJlbnRJdGVtKTsKIAogICAgIGlmIChzYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uKQogICAgICAgICBsb2FkU2FtZURvY3VtZW50SXRlbShpdGVtKTsKQEAgLTMyNjAs
MTEgKzMyNjAsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmV0cnlBZnRlckZhaWxlZENhY2hlT25s
eU1haW5SZXNvdXJjZUxvYWQoKQogICAgIEFTU0VSVCghbV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2Up
OwogICAgIC8vIFdlIG9ubHkgdXNlIGNhY2hlLW9ubHkgbG9hZHMgdG8gYXZvaWQgcmVzdWJtaXR0
aW5nIGZvcm1zLgogICAgIEFTU0VSVChpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9sb2FkVHlwZSkp
OworICAgIEFTU0VSVChoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCkpOwogICAgIEFTU0VSVCho
aXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCktPmZvcm1EYXRhKCkpOwogICAgIEFTU0VSVChoaXN0
b3J5KCkucHJvdmlzaW9uYWxJdGVtKCkgPT0gbV9yZXF1ZXN0ZWRIaXN0b3J5SXRlbS5nZXQoKSk7
CiAKICAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gbV9sb2FkVHlwZTsKLSAgICBIaXN0b3J5
SXRlbSogaXRlbSA9IGhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKTsKKyAgICBIaXN0b3J5SXRl
bSYgaXRlbSA9ICpoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCk7CiAKICAgICBzdG9wQWxsTG9h
ZGVycyhTaG91bGROb3RDbGVhclByb3Zpc2lvbmFsSXRlbSk7CiAgICAgbG9hZERpZmZlcmVudERv
Y3VtZW50SXRlbShpdGVtLCBsb2FkVHlwZSwgTWF5Tm90QXR0ZW1wdENhY2hlT25seUxvYWRGb3JG
b3JtU3VibWlzc2lvbkl0ZW0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAppbmRleCA2
ZDU1ODA2NjU3ZjFjOTMzOWM0MGU5MDIzZjYwMmFiZTk5Y2Y0Y2RiLi4wNmZhOGYwNWI4ZjIwNDA1
MzU1OWI0ZjUyZjljMWQyYzc4MDYwYzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
aApAQCAtMTI1LDcgKzEyNSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
bG9hZFdpdGhPdmVycmlkZUVuY29kaW5nKGNvbnN0IFN0cmluZyYgb3ZlcnJpZGVFbmNvZGluZyk7
CiAKICAgICB2b2lkIG9wZW4oQ2FjaGVkRnJhbWVCYXNlJik7Ci0gICAgdm9pZCBsb2FkSXRlbShI
aXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOworICAgIHZvaWQgbG9hZEl0ZW0oSGlzdG9yeUl0
ZW0mLCBGcmFtZUxvYWRUeXBlKTsKICAgICBIaXN0b3J5SXRlbSogcmVxdWVzdGVkSGlzdG9yeUl0
ZW0oKSBjb25zdCB7IHJldHVybiBtX3JlcXVlc3RlZEhpc3RvcnlJdGVtLmdldCgpOyB9CiAKICAg
ICB2b2lkIHJldHJ5QWZ0ZXJGYWlsZWRDYWNoZU9ubHlNYWluUmVzb3VyY2VMb2FkKCk7CkBAIC0y
OTksOCArMjk5LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY2hlY2tUaW1lckZpcmVkKCk7CiAg
ICAgCi0gICAgdm9pZCBsb2FkU2FtZURvY3VtZW50SXRlbShIaXN0b3J5SXRlbSopOwotICAgIHZv
aWQgbG9hZERpZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUs
IEZvcm1TdWJtaXNzaW9uQ2FjaGVMb2FkUG9saWN5KTsKKyAgICB2b2lkIGxvYWRTYW1lRG9jdW1l
bnRJdGVtKEhpc3RvcnlJdGVtJik7CisgICAgdm9pZCBsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVt
KEhpc3RvcnlJdGVtJiwgRnJhbWVMb2FkVHlwZSwgRm9ybVN1Ym1pc3Npb25DYWNoZUxvYWRQb2xp
Y3kpOwogICAgIAogICAgIHZvaWQgbG9hZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCmluZGV4IDli
ODNhODQ3ZGQwNTA4YTdhYTU2ZDU5OGEzMTQ0OGE2NTM1MWI4ZGEuLjgzM2U1ODg0YmFhMDdiMzVi
MWIzNWU1ZjRiYWMzN2RiMzljOWRkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9IaXN0b3J5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3Rv
cnlDb250cm9sbGVyLmNwcApAQCAtMjM0LDExICsyMzQsMTMgQEAgdm9pZCBIaXN0b3J5Q29udHJv
bGxlcjo6cmVzdG9yZURvY3VtZW50U3RhdGUoKQogCiB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpp
bnZhbGlkYXRlQ3VycmVudEl0ZW1DYWNoZWRQYWdlKCkKIHsKLSAgICAvLyBXaGVuIHdlIGFyZSBw
cmUtY29tbWl0LCB0aGUgY3VycmVudEl0ZW0gaXMgd2hlcmUgYW55IHBhZ2UgY2FjaGUgZGF0YSBy
ZXNpZGVzLgotICAgIGlmICghUGFnZUNhY2hlOjpzaGFyZWQoKS5nZXQoY3VycmVudEl0ZW0oKSwg
bV9mcmFtZS5wYWdlKCkpKQorICAgIGlmICghY3VycmVudEl0ZW0oKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBQYWdlQ2Fj
aGU6OnNoYXJlZCgpLnRha2UoY3VycmVudEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOworICAgIC8v
IFdoZW4gd2UgYXJlIHByZS1jb21taXQsIHRoZSBjdXJyZW50SXRlbSBpcyB3aGVyZSBhbnkgcGFn
ZSBjYWNoZSBkYXRhIHJlc2lkZXMuCisgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IGNh
Y2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNoYXJlZCgpLnRha2UoKmN1cnJlbnRJdGVtKCksIG1fZnJh
bWUucGFnZSgpKTsKKyAgICBpZiAoIWNhY2hlZFBhZ2UpCisgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgZ3JvdGVzcXVlIGhhY2sgdG8gZml4IDxyZGFyOi8vcHJvYmxl
bS80MDU5MDU5PiBDcmFzaCBpbiBSZW5kZXJGbG93OjpkZXRhY2gKICAgICAvLyBTb21laG93IHRo
ZSBQYWdlU3RhdGUgb2JqZWN0IGlzIG5vdCBwcm9wZXJseSB1cGRhdGVkLCBhbmQgaXMgaG9sZGlu
ZyBvbnRvIGEgc3RhbGUgZG9jdW1lbnQuCkBAIC0yNjUsNyArMjY3LDcgQEAgYm9vbCBIaXN0b3J5
Q29udHJvbGxlcjo6c2hvdWxkU3RvcExvYWRpbmdGb3JIaXN0b3J5SXRlbShIaXN0b3J5SXRlbSog
dGFyZ2V0SXRlbSkKIAogLy8gTWFpbiBmdW5uZWwgZm9yIG5hdmlnYXRpbmcgdG8gYSBwcmV2aW91
cyBsb2NhdGlvbiAoYmFjay9mb3J3YXJkLCBub24tc2VhcmNoIHNuYXAtYmFjaykKIC8vIFRoaXMg
aW5jbHVkZXMgcmVjdXJzaW9uIHRvIGhhbmRsZSBsb2FkaW5nIGludG8gZnJhbWVzZXRzIHByb3Bl
cmx5Ci12b2lkIEhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogdGFyZ2V0
SXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0
ZW0oSGlzdG9yeUl0ZW0mIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKICAgICBB
U1NFUlQoIW1fZnJhbWUudHJlZSgpLnBhcmVudCgpKTsKICAgICAKQEAgLTI3NiwxMCArMjc4LDEw
IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJ
dGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgp
OwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9mcmFtZS5sb2Fk
ZXIoKS5jbGllbnQoKS5zaG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0SXRlbSkpCisgICAgaWYg
KCFtX2ZyYW1lLmxvYWRlcigpLmNsaWVudCgpLnNob3VsZEdvVG9IaXN0b3J5SXRlbSgmdGFyZ2V0
SXRlbSkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobV9kZWZlcnNMb2FkaW5nKSB7Ci0gICAg
ICAgIG1fZGVmZXJyZWRJdGVtID0gdGFyZ2V0SXRlbTsKKyAgICAgICAgbV9kZWZlcnJlZEl0ZW0g
PSAmdGFyZ2V0SXRlbTsKICAgICAgICAgbV9kZWZlcnJlZEZyYW1lTG9hZFR5cGUgPSB0eXBlOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjg4LDcgKzI5MCw3IEBAIHZvaWQgSGlzdG9yeUNv
bnRyb2xsZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJdGVtLCBGcmFtZUxvYWRUeXBl
IHR5cGUpCiAgICAgLy8gLSBwbHVzLCBpdCBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUgdG9wIGxl
dmVsIG9mIHRoZSBvcGVyYXRpb24gdGhyb3VnaCB0aGUgZnJhbWUgdHJlZSwKICAgICAvLyBhcyBv
cHBvc2VkIHRvIGhhcHBlbmluZyBmb3Igc29tZS9vbmUgb2YgdGhlIHBhZ2UgY29tbWl0cyB0aGF0
IG1pZ2h0IGhhcHBlbiBzb29uCiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50SXRlbSA9
IHBhZ2UtPmJhY2tGb3J3YXJkKCkuY3VycmVudEl0ZW0oKTsKLSAgICBwYWdlLT5iYWNrRm9yd2Fy
ZCgpLnNldEN1cnJlbnRJdGVtKHRhcmdldEl0ZW0pOworICAgIHBhZ2UtPmJhY2tGb3J3YXJkKCku
c2V0Q3VycmVudEl0ZW0oJnRhcmdldEl0ZW0pOwogICAgIG1fZnJhbWUubG9hZGVyKCkuY2xpZW50
KCkudXBkYXRlR2xvYmFsSGlzdG9yeUl0ZW1Gb3JQYWdlKCk7CiAKICAgICAvLyBGaXJzdCBzZXQg
dGhlIHByb3Zpc2lvbmFsIGl0ZW0gb2YgYW55IGZyYW1lcyB0aGF0IGFyZSBub3QgYWN0dWFsbHkg
bmF2aWdhdGluZy4KQEAgLTMwNSw4ICszMDcsOCBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpz
ZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXIpCiB7CiAgICAgbV9kZWZlcnNMb2FkaW5nID0gZGVm
ZXI7CiAgICAgaWYgKCFkZWZlciAmJiBtX2RlZmVycmVkSXRlbSkgewotICAgICAgICBnb1RvSXRl
bShtX2RlZmVycmVkSXRlbS5nZXQoKSwgbV9kZWZlcnJlZEZyYW1lTG9hZFR5cGUpOwotICAgICAg
ICBtX2RlZmVycmVkSXRlbSA9IDA7CisgICAgICAgIGdvVG9JdGVtKCptX2RlZmVycmVkSXRlbSwg
bV9kZWZlcnJlZEZyYW1lTG9hZFR5cGUpOworICAgICAgICBtX2RlZmVycmVkSXRlbSA9IG51bGxw
dHI7CiAgICAgfQogfQogCkBAIC0zMzQsNyArMzM2LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxl
cjo6dXBkYXRlRm9yUmVsb2FkKCkKICNlbmRpZgogCiAgICAgaWYgKG1fY3VycmVudEl0ZW0pIHsK
LSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUobV9jdXJyZW50SXRlbS5nZXQoKSk7
CisgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCptX2N1cnJlbnRJdGVtKTsKICAg
ICAKICAgICAgICAgaWYgKG1fZnJhbWUubG9hZGVyKCkubG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRU
eXBlOjpSZWxvYWQgfHwgbV9mcmFtZS5sb2FkZXIoKS5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5
cGU6OlJlbG9hZEZyb21PcmlnaW4pCiAgICAgICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRW
aWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SXRlbS5nZXQoKSk7CkBAIC00OTksNyArNTAxLDcgQEAg
dm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0KCkKICAgICAv
LyBGb3IgZWFjaCBmcmFtZSB0aGF0IGFscmVhZHkgaGFkIHRoZSBjb250ZW50IHRoZSBpdGVtIHJl
cXVlc3RlZCAoYmFzZWQgb24KICAgICAvLyAoYSBtYXRjaGluZyBVUkwgYW5kIGZyYW1lIHRyZWUg
c25hcHNob3QpLCBqdXN0IHJlc3RvcmUgdGhlIHNjcm9sbCBwb3NpdGlvbi4KICAgICAvLyBTYXZl
IGZvcm0gc3RhdGUgKHdvcmtzIGZyb20gY3VycmVudEl0ZW0sIHNpbmNlIG1fZnJhbWVMb2FkQ29t
cGxldGUgaXMgdHJ1ZSkKLSAgICBpZiAobV9jdXJyZW50SXRlbSAmJiBpdGVtc0FyZUNsb25lcyht
X2N1cnJlbnRJdGVtLmdldCgpLCBtX3Byb3Zpc2lvbmFsSXRlbS5nZXQoKSkpIHsKKyAgICBpZiAo
bV9jdXJyZW50SXRlbSAmJiBpdGVtc0FyZUNsb25lcygqbV9jdXJyZW50SXRlbSwgbV9wcm92aXNp
b25hbEl0ZW0uZ2V0KCkpKSB7CiAgICAgICAgIEFTU0VSVChtX2ZyYW1lTG9hZENvbXBsZXRlKTsK
ICAgICAgICAgc2F2ZURvY3VtZW50U3RhdGUoKTsKICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9u
QW5kVmlld1N0YXRlVG9JdGVtKG1fY3VycmVudEl0ZW0uZ2V0KCkpOwpAQCAtNzA3LDE3ICs3MDks
MTUgQEAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gSGlzdG9yeUNvbnRyb2xsZXI6OmNyZWF0ZUl0
ZW1UcmVlKEZyYW1lJiB0YXJnZXRGcmFtZSwgYm8KIC8vIHRyYWNraW5nIHdoZXRoZXIgZWFjaCBm
cmFtZSBhbHJlYWR5IGhhcyB0aGUgY29udGVudCB0aGUgaXRlbSByZXF1ZXN0cy4gIElmIHRoZXJl
IGlzCiAvLyBhIG1hdGNoLCB3ZSBzZXQgdGhlIHByb3Zpc2lvbmFsIGl0ZW0gYW5kIHJlY3Vyc2Uu
ICBPdGhlcndpc2Ugd2Ugd2lsbCByZWxvYWQgdGhhdAogLy8gZnJhbWUgYW5kIGFsbCBpdHMga2lk
cyBpbiByZWN1cnNpdmVHb1RvSXRlbS4KLXZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2
ZVNldFByb3Zpc2lvbmFsSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21J
dGVtKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVt
KEhpc3RvcnlJdGVtJiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0ZW0pCiB7Ci0gICAgQVNTRVJU
KGl0ZW0pOwotCiAgICAgaWYgKCFpdGVtc0FyZUNsb25lcyhpdGVtLCBmcm9tSXRlbSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFNldCBwcm92aXNpb25hbCBpdGVtLCB3aGljaCB3aWxsIGJl
IGNvbW1pdHRlZCBpbiByZWN1cnNpdmVVcGRhdGVGb3JDb21taXQuCi0gICAgbV9wcm92aXNpb25h
bEl0ZW0gPSBpdGVtOworICAgIG1fcHJvdmlzaW9uYWxJdGVtID0gJml0ZW07CiAKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNoaWxkSXRlbSA6IGl0ZW0tPmNoaWxkcmVuKCkpIHsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGNoaWxkSXRlbSA6IGl0ZW0uY2hpbGRyZW4oKSkgewogICAgICAgICBjb25zdCBT
dHJpbmcmIGNoaWxkRnJhbWVOYW1lID0gY2hpbGRJdGVtLT50YXJnZXQoKTsKIAogICAgICAgICBI
aXN0b3J5SXRlbSogZnJvbUNoaWxkSXRlbSA9IGZyb21JdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0
KGNoaWxkRnJhbWVOYW1lKTsKQEAgLTcyNSwzNCArNzI1LDMyIEBAIHZvaWQgSGlzdG9yeUNvbnRy
b2xsZXI6OnJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlz
dG9yeUl0CiAgICAgICAgIEZyYW1lKiBjaGlsZEZyYW1lID0gbV9mcmFtZS50cmVlKCkuY2hpbGQo
Y2hpbGRGcmFtZU5hbWUpOwogICAgICAgICBBU1NFUlQoY2hpbGRGcmFtZSk7CiAKLSAgICAgICAg
Y2hpbGRGcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLnJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRl
bShjaGlsZEl0ZW0uZ2V0KCksIGZyb21DaGlsZEl0ZW0pOworICAgICAgICBjaGlsZEZyYW1lLT5s
b2FkZXIoKS5oaXN0b3J5KCkucmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVtKCpjaGlsZEl0ZW0s
IGZyb21DaGlsZEl0ZW0pOwogICAgIH0KIH0KIAogLy8gV2Ugbm93IHRyYXZlcnNlIHRoZSBmcmFt
ZSB0cmVlIGFuZCBpdGVtIHRyZWUgYSBzZWNvbmQgdGltZSwgbG9hZGluZyBmcmFtZXMgdGhhdAog
Ly8gZG8gaGF2ZSB0aGUgY29udGVudCB0aGUgaXRlbSByZXF1ZXN0cy4KLXZvaWQgSGlzdG9yeUNv
bnRyb2xsZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBIaXN0b3J5SXRl
bSogZnJvbUl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVtJiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0
ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKLSAgICBBU1NFUlQoaXRlbSk7Ci0KICAgICBpZiAo
IWl0ZW1zQXJlQ2xvbmVzKGl0ZW0sIGZyb21JdGVtKSkgewogICAgICAgICBtX2ZyYW1lLmxvYWRl
cigpLmxvYWRJdGVtKGl0ZW0sIHR5cGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
Ly8gSnVzdCBpdGVyYXRlIG92ZXIgdGhlIHJlc3QsIGxvb2tpbmcgZm9yIGZyYW1lcyB0byBuYXZp
Z2F0ZS4KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSXRlbSA6IGl0ZW0tPmNoaWxkcmVuKCkp
IHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSXRlbSA6IGl0ZW0uY2hpbGRyZW4oKSkgewog
ICAgICAgICBjb25zdCBTdHJpbmcmIGNoaWxkRnJhbWVOYW1lID0gY2hpbGRJdGVtLT50YXJnZXQo
KTsKIAogICAgICAgICBIaXN0b3J5SXRlbSogZnJvbUNoaWxkSXRlbSA9IGZyb21JdGVtLT5jaGls
ZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWVOYW1lKTsKICAgICAgICAgQVNTRVJUKGZyb21DaGls
ZEl0ZW0pOwogICAgICAgICBGcmFtZSogY2hpbGRGcmFtZSA9IG1fZnJhbWUudHJlZSgpLmNoaWxk
KGNoaWxkRnJhbWVOYW1lKTsKICAgICAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOwotICAgICAgICBj
aGlsZEZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkucmVjdXJzaXZlR29Ub0l0ZW0oY2hpbGRJdGVt
LmdldCgpLCBmcm9tQ2hpbGRJdGVtLCB0eXBlKTsKKyAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVy
KCkuaGlzdG9yeSgpLnJlY3Vyc2l2ZUdvVG9JdGVtKCpjaGlsZEl0ZW0sIGZyb21DaGlsZEl0ZW0s
IHR5cGUpOwogICAgIH0KIH0KIAotYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6aXRlbXNBcmVDbG9u
ZXMoSGlzdG9yeUl0ZW0qIGl0ZW0xLCBIaXN0b3J5SXRlbSogaXRlbTIpIGNvbnN0Citib29sIEhp
c3RvcnlDb250cm9sbGVyOjppdGVtc0FyZUNsb25lcyhIaXN0b3J5SXRlbSYgaXRlbTEsIEhpc3Rv
cnlJdGVtKiBpdGVtMikgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgaXRlbSB3ZSdyZSBnb2luZyB0
byBpcyBhIGNsb25lIG9mIHRoZSBpdGVtIHdlJ3JlIGF0LCB0aGVuIHdlIGRvCiAgICAgLy8gbm90
IG5lZWQgdG8gbG9hZCBpdCBhZ2Fpbi4gIFRoZSBjdXJyZW50IGZyYW1lIHRyZWUgYW5kIHRoZSBm
cmFtZSB0cmVlCkBAIC03NjEsMTIgKzc1OSwxMSBAQCBib29sIEhpc3RvcnlDb250cm9sbGVyOjpp
dGVtc0FyZUNsb25lcyhIaXN0b3J5SXRlbSogaXRlbTEsIEhpc3RvcnlJdGVtKiBpdGVtMikgYwog
ICAgIC8vIGEgcmVsb2FkLiAgVGh1cywgaWYgaXRlbTEgYW5kIGl0ZW0yIGFyZSB0aGUgc2FtZSwg
d2UgbmVlZCB0byBjcmVhdGUgYQogICAgIC8vIG5ldyBkb2N1bWVudCBhbmQgc2hvdWxkIG5vdCBj
b25zaWRlciB0aGVtIGNsb25lcy4KICAgICAvLyAoU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMzU1
MzIgZm9yIGRldGFpbHMuKQotICAgIHJldHVybiBpdGVtMQotICAgICAgICAmJiBpdGVtMgotICAg
ICAgICAmJiBpdGVtMSAhPSBpdGVtMgotICAgICAgICAmJiBpdGVtMS0+aXRlbVNlcXVlbmNlTnVt
YmVyKCkgPT0gaXRlbTItPml0ZW1TZXF1ZW5jZU51bWJlcigpCi0gICAgICAgICYmIGN1cnJlbnRG
cmFtZXNNYXRjaEl0ZW0oaXRlbTEpCi0gICAgICAgICYmIGl0ZW0yLT5oYXNTYW1lRnJhbWVzKGl0
ZW0xKTsKKyAgICByZXR1cm4gaXRlbTIKKyAgICAgICAgJiYgJml0ZW0xICE9IGl0ZW0yCisgICAg
ICAgICYmIGl0ZW0xLml0ZW1TZXF1ZW5jZU51bWJlcigpID09IGl0ZW0yLT5pdGVtU2VxdWVuY2VO
dW1iZXIoKQorICAgICAgICAmJiBjdXJyZW50RnJhbWVzTWF0Y2hJdGVtKCZpdGVtMSkKKyAgICAg
ICAgJiYgaXRlbTItPmhhc1NhbWVGcmFtZXMoJml0ZW0xKTsKIH0KIAogLy8gSGVscGVyIG1ldGhv
ZCB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgY3VycmVudCBmcmFtZSB0cmVlIG1hdGNoZXMg
Z2l2ZW4gaGlzdG9yeSBpdGVtJ3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
SGlzdG9yeUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJv
bGxlci5oCmluZGV4IDQzMWYzMGUwYWNmOGE5YTYzY2Y5NWRjNDZkNzBhZDkyMDE1YjE3ODUuLjFi
NDBhODBiMGUzMjcxOGIzM2VmYjQyMmFhZmU2NzZmYmMzYzdmZTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oCkBAIC05MywxOSArOTMsMTkgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFnZTsKICAgICBib29sIHNob3VsZFN0b3BMb2Fk
aW5nRm9ySGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKLSAgICB2b2lkIGdvVG9JdGVt
KEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CisgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5
SXRlbSYsIEZyYW1lTG9hZFR5cGUpOwogCiAgICAgdm9pZCBpbml0aWFsaXplSXRlbShIaXN0b3J5
SXRlbSopOwogICAgIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNyZWF0ZUl0ZW0oKTsKICAgICBQ
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjcmVhdGVJdGVtVHJlZShGcmFtZSYgdGFyZ2V0RnJhbWUs
IGJvb2wgY2xpcEF0VGFyZ2V0KTsKIAotICAgIHZvaWQgcmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJ
dGVtKEhpc3RvcnlJdGVtKiwgSGlzdG9yeUl0ZW0qKTsKLSAgICB2b2lkIHJlY3Vyc2l2ZUdvVG9J
dGVtKEhpc3RvcnlJdGVtKiwgSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAgICB2b2lk
IHJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRlbShIaXN0b3J5SXRlbSYsIEhpc3RvcnlJdGVtKik7
CisgICAgdm9pZCByZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSYsIEhpc3RvcnlJdGVtKiwg
RnJhbWVMb2FkVHlwZSk7CiAgICAgYm9vbCBpc1JlcGxhY2VMb2FkVHlwZVdpdGhQcm92aXNpb25h
bEl0ZW0oRnJhbWVMb2FkVHlwZSk7CiAgICAgYm9vbCBpc1JlbG9hZFR5cGVXaXRoUHJvdmlzaW9u
YWxJdGVtKEZyYW1lTG9hZFR5cGUpOwogICAgIHZvaWQgcmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0
KCk7CiAgICAgdm9pZCByZWN1cnNpdmVVcGRhdGVGb3JTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCk7
Ci0gICAgYm9vbCBpdGVtc0FyZUNsb25lcyhIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtKikgY29u
c3Q7CisgICAgYm9vbCBpdGVtc0FyZUNsb25lcyhIaXN0b3J5SXRlbSYsIEhpc3RvcnlJdGVtKikg
Y29uc3Q7CiAgICAgYm9vbCBjdXJyZW50RnJhbWVzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKikgY29u
c3Q7CiAgICAgdm9pZCB1cGRhdGVCYWNrRm9yd2FyZExpc3RDbGlwcGVkQXRUYXJnZXQoYm9vbCBk
b0NsaXApOwogICAgIHZvaWQgdXBkYXRlQ3VycmVudEl0ZW0oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
aW5kZXggODMxNGM5YTRlM2NlYmRjNmI1N2I1ZDMwNGYwNDRmYTI4NmZiNjYxMC4uNzhjYjE5MzUz
Mzg5Yjc2ODhlNDdiNWI1ZjZiMmY1MDAwZDA0N2U5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAg
LTk4OSw3ICs5ODksNyBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZs
b2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogICAgIH0KIAogICAgIGlm
IChpc01haW5GcmFtZSgpKQotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0Zv
ckZ1bGxTdHlsZVJlY2FsYyhwYWdlKTsKKyAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJr
UGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnBhZ2UpOwogfQogCiBmbG9hdCBGcmFtZTo6ZnJhbWVT
Y2FsZUZhY3RvcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA3YzUzNWQwNTcyMTJjYmM0
YWU3ZjdkNjQyMzBmMjdmZWNhNDY1NTY5Li43ZDk3YWVmMGUyYmEyMjJlNTU5ZTVjYmY4ZGViMjg2
ZGEyZGU3MDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTQzMCwxMyArNDMwLDEzIEBAIHZvaWQg
UGFnZTo6c2V0T3BlbmVkQnlET00oKQogICAgIG1fb3BlbmVkQnlET00gPSB0cnVlOwogfQogCi12
b2lkIFBhZ2U6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUp
Cit2b2lkIFBhZ2U6OmdvVG9JdGVtKEhpc3RvcnlJdGVtJiBpdGVtLCBGcmFtZUxvYWRUeXBlIHR5
cGUpCiB7CiAgICAgLy8gc3RvcEFsbExvYWRlcnMgbWF5IGVuZCB1cCBydW5uaW5nIG9ubG9hZCBo
YW5kbGVycywgd2hpY2ggY291bGQgY2F1c2UgZnVydGhlciBoaXN0b3J5IHRyYXZlcnNhbHMgdGhh
dCBtYXkgbGVhZCB0byB0aGUgcGFzc2VkIGluIEhpc3RvcnlJdGVtCiAgICAgLy8gYmVpbmcgZGVy
ZWYoKS1lZC4gTWFrZSBzdXJlIHdlIGNhbiBzdGlsbCB1c2UgaXQgd2l0aCBIaXN0b3J5Q29udHJv
bGxlcjo6Z29Ub0l0ZW0gbGF0ZXIuCi0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBwcm90ZWN0b3Io
aXRlbSk7CisgICAgUmVmPEhpc3RvcnlJdGVtPiBwcm90ZWN0b3IoaXRlbSk7CiAKLSAgICBpZiAo
bV9tYWluRnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5zaG91bGRTdG9wTG9hZGluZ0Zvckhpc3Rv
cnlJdGVtKGl0ZW0pKQorICAgIGlmIChtX21haW5GcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLnNo
b3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0ZW0oJml0ZW0pKQogICAgICAgICBtX21haW5GcmFt
ZS0+bG9hZGVyKCkuc3RvcEFsbExvYWRlcnMoKTsKIAogICAgIG1fbWFpbkZyYW1lLT5sb2FkZXIo
KS5oaXN0b3J5KCkuZ29Ub0l0ZW0oaXRlbSwgdHlwZSk7CkBAIC04MzksOSArODM5LDkgQEAgdm9p
ZCBQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKICAgICBzZXRO
ZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIAogICAgIG1haW5GcmFtZSgpLmRldmljZU9y
UGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1Bh
Z2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKHRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
bWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKCp0aGlzKTsKIAotICAgIFBhZ2VDYWNoZTo6
c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRoaXMpOworICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsKICAgICBHcmFw
aGljc0NvbnRleHQ6OnVwZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2VzKCk7CiAKICAgICBtYWlu
RnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3Rv
cigpOwpAQCAtOTIxLDcgKzkyMSw3IEBAIHZvaWQgUGFnZTo6c2V0UGFnaW5hdGlvbihjb25zdCBQ
YWdpbmF0aW9uJiBwYWdpbmF0aW9uKQogICAgIG1fcGFnaW5hdGlvbiA9IHBhZ2luYXRpb247CiAK
ICAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLSAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsKKyAgICBQYWdlQ2FjaGU6
OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygqdGhpcyk7CiB9CiAKIHVuc2ln
bmVkIFBhZ2U6OnBhZ2VDb3VudCgpIGNvbnN0CkBAIC0xNjYxLDcgKzE2NjEsNyBAQCB2b2lkIFBh
Z2U6OnNldFZpc2l0ZWRMaW5rU3RvcmUoUmVmPFZpc2l0ZWRMaW5rU3RvcmU+JiYgdmlzaXRlZExp
bmtTdG9yZSkKICAgICBtX3Zpc2l0ZWRMaW5rU3RvcmUtPmFkZFBhZ2UoKnRoaXMpOwogCiAgICAg
aW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5t
YXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGModGhpcyk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQo
KS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRoaXMpOwogfQogCiBTZXNzaW9uSUQgUGFn
ZTo6c2Vzc2lvbklEKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggMjhjMDRkOGM3ZjdiNjI0ZmEx
MzM0YWE1N2MzNWYxNGJmMmUxZTBiOS4uN2ZjZjdhYjZjODA1NTZhMWM5Y2U0MWY2MGIzOWViNjc0
MDk2ZTI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBvcGVuZWRCeURPTSgpIGNvbnN0OwogICAgIHZvaWQgc2V0T3BlbmVkQnlET00oKTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRU
eXBlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtJiwgRnJh
bWVMb2FkVHlwZSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEdyb3VwTmFtZShjb25z
dCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSgp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCBkNzczOWQxYjE5YWM2Mjc0NTEx
OGZmYWI1ODVmNGQyMzE4MzQ0NDkwLi45NTZiNDRjNGI3ZjgyYTczZGRiMjE4MzUxOTYwYzEzMjAx
YWZjOGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtNTE5LDEyICs1MTksOCBAQCB2
b2lkIFNldHRpbmdzOjpzZXRVc2VzUGFnZUNhY2hlKGJvb2wgdXNlc1BhZ2VDYWNoZSkKICAgICBp
ZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUp
IHsKLSAgICAgICAgaW50IGZpcnN0ID0gLW1fcGFnZS0+YmFja0ZvcndhcmQoKS5iYWNrQ291bnQo
KTsKLSAgICAgICAgaW50IGxhc3QgPSBtX3BhZ2UtPmJhY2tGb3J3YXJkKCkuZm9yd2FyZENvdW50
KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspCi0gICAgICAg
ICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZShtX3BhZ2UtPmJhY2tGb3J3YXJkKCkuaXRl
bUF0SW5kZXgoaSkpOwotICAgIH0KKyAgICBpZiAoIW1fdXNlc1BhZ2VDYWNoZSkKKyAgICAgICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpOb25l
KTsKIH0KIAogdm9pZCBTZXR0aW5nczo6c2V0U2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQo
Ym9vbCBlbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNz
dXJlSGFuZGxlci5jcHAKaW5kZXggNWNkMjEwNTY0N2M0MjQ5MjExNmM1NDIyMGI0NmQ2N2Y2ZDEy
YTJhMS4uMGJiM2QzMmVjNGY2MmRjYWIyMjQ3YjE3OTViNWQ3MDhmOGYyY2Y5YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCkBAIC0x
MDIsNyArMTAyLDcgQEAgdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VDcml0aWNh
bE1lbW9yeSgpCiAgICAgICAgIFJlbGllZkxvZ2dlciBsb2coIkVtcHR5IHRoZSBQYWdlQ2FjaGUi
KTsKICAgICAgICAgLy8gUmlnaHQgbm93LCB0aGUgb25seSByZWFzb24gd2UgY2FsbCByZWxlYXNl
IGNyaXRpY2FsIG1lbW9yeSB3aGlsZSBub3QgdW5kZXIgbWVtb3J5IHByZXNzdXJlIGlzIGlmIHRo
ZSBwcm9jZXNzIGlzIGFib3V0IHRvIGJlIHN1c3BlbmRlZC4KICAgICAgICAgUHJ1bmluZ1JlYXNv
biBwcnVuaW5nUmVhc29uID0gbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaXNVbmRlck1lbW9yeVBy
ZXNzdXJlKCkgPyBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSA6IFBydW5pbmdSZWFzb246
OlByb2Nlc3NTdXNwZW5kZWQ7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb0Nh
cGFjaXR5Tm93KDAsIHBydW5pbmdSZWFzb24pOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnBydW5lVG9TaXplTm93KDAsIHBydW5pbmdSZWFzb24pOwogICAgIH0KIAogICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0KaW5kZXggODc1
N2M4YzIxZTAzYzZiNGVlNmI5NTUxZTQ5NmVkNGRiNTdmZmRjZC4uNmI0NTAwMjFjNDI3ODYyNjM2
MzI5MTM2MzEwMjc3MmMyNWMxMmUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvSGlz
dG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9y
eS9XZWJCYWNrRm9yd2FyZExpc3QubW0KQEAgLTM1NSw3ICszNTUsNyBAQCBzdGF0aWMgYm9vbCBi
dW1wZXJDYXJCYWNrRm9yd2FyZEhhY2tOZWVkZWQoKQogCiAtIChOU1VJbnRlZ2VyKXBhZ2VDYWNo
ZVNpemUKIHsKLSAgICByZXR1cm4gW2tpdChjb3JlKHNlbGYpLT5wYWdlKCkpIHVzZXNQYWdlQ2Fj
aGVdID8gUGFnZUNhY2hlOjpzaGFyZWQoKS5jYXBhY2l0eSgpIDogMDsKKyAgICByZXR1cm4gW2tp
dChjb3JlKHNlbGYpLT5wYWdlKCkpIHVzZXNQYWdlQ2FjaGVdID8gUGFnZUNhY2hlOjpzaGFyZWQo
KS5tYXhTaXplKCkgOiAwOwogfQogCiAtIChpbnQpYmFja0xpc3RDb3VudApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDkwYmYwNmVkZWM0NDMwYTk4MzBlM2ZkMzYyYzY1ZWI0
YzdlZDIzNmQuLmMyNTAyYTY0MDhmYWU0NDIzMGU2OTNmOGJiZTIwMTY0ODZjMWJjNTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTE5OTcsNyArMTk5Nyw3IEBAIHN0YXRp
YyBib29sIGZhc3REb2N1bWVudFRlYXJkb3duRW5hYmxlZCgpCiAgICAgaWYgKCFvdGhlckJhY2tG
b3J3YXJkQ2xpZW50LT5jdXJyZW50SXRlbSgpKQogICAgICAgICByZXR1cm47IC8vIGVtcHR5IGJh
Y2sgZm9yd2FyZCBsaXN0LCBiYWlsCiAgICAgCi0gICAgSGlzdG9yeUl0ZW0qIG5ld0l0ZW1Ub0dv
VG8gPSAwOworICAgIEhpc3RvcnlJdGVtKiBuZXdJdGVtVG9Hb1RvID0gbnVsbHB0cjsKIAogICAg
IGludCBsYXN0SXRlbUluZGV4ID0gb3RoZXJCYWNrRm9yd2FyZENsaWVudC0+Zm9yd2FyZExpc3RD
b3VudCgpOwogICAgIGZvciAoaW50IGkgPSAtb3RoZXJCYWNrRm9yd2FyZENsaWVudC0+YmFja0xp
c3RDb3VudCgpOyBpIDw9IGxhc3RJdGVtSW5kZXg7ICsraSkgewpAQCAtMjAxNCw3ICsyMDE0LDcg
QEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKCkKICAgICB9CiAgICAg
CiAgICAgQVNTRVJUKG5ld0l0ZW1Ub0dvVG8pOwotICAgIF9wcml2YXRlLT5wYWdlLT5nb1RvSXRl
bShuZXdJdGVtVG9Hb1RvLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOworICAg
IF9wcml2YXRlLT5wYWdlLT5nb1RvSXRlbSgqbmV3SXRlbVRvR29UbywgRnJhbWVMb2FkVHlwZTo6
SW5kZXhlZEJhY2tGb3J3YXJkKTsKIH0KIAogLSAodm9pZClfc2V0Rm9ybURlbGVnYXRlOiAoaWQ8
V2ViRm9ybURlbGVnYXRlPilkZWxlZ2F0ZQpAQCAtNTY0Nyw3ICs1NjQ3LDggQEAgc3RhdGljIE5T
U3RyaW5nICogY29uc3QgYmFja2luZ1Byb3BlcnR5T2xkU2NhbGVGYWN0b3JLZXkgPSBAIk5TQmFj
a2luZ1Byb3BlcnR5T2wKICAgICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm4g
Tk87CiAKLSAgICBfcHJpdmF0ZS0+cGFnZS0+Z29Ub0l0ZW0oY29yZShpdGVtKSwgRnJhbWVMb2Fk
VHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKKyAgICBBU1NFUlQoaXRlbSk7CisgICAgX3ByaXZh
dGUtPnBhZ2UtPmdvVG9JdGVtKCpjb3JlKGl0ZW0pLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFj
a0ZvcndhcmQpOwogICAgIHJldHVybiBZRVM7CiB9CiAKQEAgLTc3NDIsNyArNzc0Myw3IEBAIHN0
YXRpYyBpbmxpbmUgdWludDY0X3Qgcm91bmRVcFRvUG93ZXJPZjIodWludDY0X3QgbnVtKQogICAg
IHVuc2lnbmVkIGNhY2hlTWF4RGVhZENhcGFjaXR5ID0gMDsKICAgICBhdXRvIGRlYWREZWNvZGVk
RGF0YURlbGV0aW9uSW50ZXJ2YWwgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcyB7IDAgfTsKIAotICAg
IHVuc2lnbmVkIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICB1bnNpZ25lZCBwYWdlQ2FjaGVT
aXplID0gMDsKIAogICAgIE5TVUludGVnZXIgbnN1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gMDsK
ICAgICBOU1VJbnRlZ2VyIG5zdXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPSAwOwpAQCAtNzc1Myw3ICs3
NzU0LDcgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCByb3VuZFVwVG9Qb3dlck9mMih1aW50NjRf
dCBudW0pCiAgICAgc3dpdGNoIChjYWNoZU1vZGVsKSB7CiAgICAgY2FzZSBXZWJDYWNoZU1vZGVs
RG9jdW1lbnRWaWV3ZXI6IHsKICAgICAgICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0eSAoaW4gcGFn
ZXMpCi0gICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgcGFnZUNhY2hlU2l6
ZSA9IDA7CiAKICAgICAgICAgLy8gT2JqZWN0IGNhY2hlIGNhcGFjaXRpZXMgKGluIGJ5dGVzKQog
ICAgICAgICBpZiAobWVtU2l6ZSA+PSA0MDk2KQpAQCAtNzc5MCwxMyArNzc5MSwxMyBAQCBzdGF0
aWMgaW5saW5lIHVpbnQ2NF90IHJvdW5kVXBUb1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkKICAgICBj
YXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVudEJyb3dzZXI6IHsKICAgICAgICAgLy8gUGFnZSBjYWNo
ZSBjYXBhY2l0eSAoaW4gcGFnZXMpCiAgICAgICAgIGlmIChtZW1TaXplID49IDEwMjQpCi0gICAg
ICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDM7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXpl
ID0gMzsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSA1MTIpCi0gICAgICAgICAgICBwYWdl
Q2FjaGVDYXBhY2l0eSA9IDI7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMjsKICAgICAg
ICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAyNTYpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0
eSA9IDE7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6
ZSA9IDA7CiAKICAgICAgICAgLy8gT2JqZWN0IGNhY2hlIGNhcGFjaXRpZXMgKGluIGJ5dGVzKQog
ICAgICAgICBpZiAobWVtU2l6ZSA+PSA0MDk2KQpAQCAtNzg0NCwxNSArNzg0NSwxNSBAQCBzdGF0
aWMgaW5saW5lIHVpbnQ2NF90IHJvdW5kVXBUb1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkKICAgICAg
ICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0eSAoaW4gcGFnZXMpCiAgICAgICAgIC8vIChSZXNlYXJj
aCBpbmRpY2F0ZXMgdGhhdCB2YWx1ZSAvIHBhZ2UgZHJvcHMgc3Vic3RhbnRpYWxseSBhZnRlciAz
IHBhZ2VzLikKICAgICAgICAgaWYgKG1lbVNpemUgPj0gMjA0OCkKLSAgICAgICAgICAgIHBhZ2VD
YWNoZUNhcGFjaXR5ID0gNTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSA1OwogICAgICAg
ICBlbHNlIGlmIChtZW1TaXplID49IDEwMjQpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0
eSA9IDQ7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gNDsKICAgICAgICAgZWxzZSBpZiAo
bWVtU2l6ZSA+PSA1MTIpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDM7CisgICAg
ICAgICAgICBwYWdlQ2FjaGVTaXplID0gMzsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAy
NTYpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDI7CisgICAgICAgICAgICBwYWdl
Q2FjaGVTaXplID0gMjsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNp
dHkgPSAxOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDE7CiAKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgICAgIC8vIENhY2hlIHBhZ2UgbGVzcyBhZ2dyZXNzaXZlbHkgaW4gaU9TIHRvIHJl
ZHVjZSB0aGUgY2hhbmNlIG9mIGJlaW5nIGpldHRpc29uZWQuCkBAIC03OTM1LDcgKzc5MzYsNyBA
QCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHJvdW5kVXBUb1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkK
IAogICAgIG1lbW9yeUNhY2hlKCkuc2V0Q2FwYWNpdGllcyhjYWNoZU1pbkRlYWRDYXBhY2l0eSwg
Y2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0eSk7CiAgICAgbWVtb3J5Q2Fj
aGUoKS5zZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRlYWREZWNvZGVkRGF0YURl
bGV0aW9uSW50ZXJ2YWwpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0Q2FwYWNpdHkocGFn
ZUNhY2hlQ2FwYWNpdHkpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0TWF4U2l6ZShwYWdl
Q2FjaGVTaXplKTsKICNpZiBQTEFURk9STShJT1MpCiAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5z
ZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXModHJ1ZSk7CiAgICAgbnN1cmxDYWNoZU1lbW9yeUNh
cGFjaXR5ID0gc3RkOjptYXgobnN1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCBbbnN1cmxDYWNoZSBt
ZW1vcnlDYXBhY2l0eV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCAwZjE3ZWRhMzI5ZTJmNWI2
ZWIwOTY2OTBjZTNiZjdjNmIxOWY0MGMxLi40YTcxNDQ3ODZjNDRkNWQwNTAwY2Y4NGE2M2IyMmU3
NTVjOWRhNzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcApAQCAtNTMwLDEzICs1MzAsMTMgQEAgdm9p
ZCBXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICB1
bnNpZ25lZCBjYWNoZU1heERlYWRDYXBhY2l0eSA9IDA7CiAgICAgYXV0byBkZWFkRGVjb2RlZERh
dGFEZWxldGlvbkludGVydmFsID0gc3RkOjpjaHJvbm86OnNlY29uZHMgeyAwIH07CiAKLSAgICB1
bnNpZ25lZCBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgdW5zaWduZWQgcGFnZUNhY2hlU2l6
ZSA9IDA7CiAKIAogICAgIHN3aXRjaCAoY2FjaGVNb2RlbCkgewogICAgIGNhc2UgV2ViQ2FjaGVN
b2RlbERvY3VtZW50Vmlld2VyOiB7CiAgICAgICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGlu
IHBhZ2VzKQotICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgICAgIHBhZ2VDYWNo
ZVNpemUgPSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRl
cykKICAgICAgICAgaWYgKG1lbVNpemUgPj0gMjA0OCkKQEAgLTU2MywxMyArNTYzLDEzIEBAIHZv
aWQgV2ViVmlldzo6c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAg
Y2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyOiB7CiAgICAgICAgIC8vIFBhZ2UgY2Fj
aGUgY2FwYWNpdHkgKGluIHBhZ2VzKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAxMDI0KQotICAg
ICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAzOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6
ZSA9IDM7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gNTEyKQotICAgICAgICAgICAgcGFn
ZUNhY2hlQ2FwYWNpdHkgPSAyOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDI7CiAgICAg
ICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMjU2KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNp
dHkgPSAxOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDE7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNp
emUgPSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRlcykK
ICAgICAgICAgaWYgKG1lbVNpemUgPj0gMjA0OCkKQEAgLTYxMCwxNSArNjEwLDE1IEBAIHZvaWQg
V2ViVmlldzo6c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgICAg
IC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2VzKQogICAgICAgICAvLyAoUmVzZWFyY2gg
aW5kaWNhdGVzIHRoYXQgdmFsdWUgLyBwYWdlIGRyb3BzIHN1YnN0YW50aWFsbHkgYWZ0ZXIgMyBw
YWdlcy4pCiAgICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCi0gICAgICAgICAgICBwYWdlQ2Fj
aGVDYXBhY2l0eSA9IDU7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gNTsKICAgICAgICAg
ZWxzZSBpZiAobWVtU2l6ZSA+PSAxMDI0KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkg
PSA0OworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDQ7CiAgICAgICAgIGVsc2UgaWYgKG1l
bVNpemUgPj0gNTEyKQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAzOworICAgICAg
ICAgICAgcGFnZUNhY2hlU2l6ZSA9IDM7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMjU2
KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOworICAgICAgICAgICAgcGFnZUNh
Y2hlU2l6ZSA9IDI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5
ID0gMTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAxOwogCiAgICAgICAgIC8vIE9iamVj
dCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRlcykKICAgICAgICAgLy8gKFRlc3RpbmcgaW5kaWNh
dGVzIHRoYXQgdmFsdWUgLyBNQiBkZXBlbmRzIGhlYXZpbHkgb24gY29udGVudCBhbmQKQEAgLTY3
NSw3ICs2NzUsNyBAQCB2b2lkIFdlYlZpZXc6OnNldENhY2hlTW9kZWwoV2ViQ2FjaGVNb2RlbCBj
YWNoZU1vZGVsKQogCiAgICAgbWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVh
ZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAg
ICBtZW1vcnlDYWNoZSgpLnNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERl
Y29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRD
YXBhY2l0eShwYWdlQ2FjaGVDYXBhY2l0eSk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRN
YXhTaXplKHBhZ2VDYWNoZVNpemUpOwogCiAjaWYgVVNFKENGTkVUV09SSykKICAgICAvLyBEb24n
dCBzaHJpbmsgYSBiaWcgZGlzayBjYWNoZSwgc2luY2UgdGhhdCB3b3VsZCBjYXVzZSBjaHVybi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9y
d2FyZExpc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCmluZGV4IGExNzYxM2IyMTM2NzAyY2IzZjNkY2RhYzdl
MGQ2NDNjMzA1OTVjOWEuLjc1ZTI3YmE1MTBhMmQ0YTQzNjUxOTEyNDk1MDdjYzI0MTA2NTIxMGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9y
d2FyZExpc3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIGlm
ICghaXRlbSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBQYWdlQ2FjaGU6OnNoYXJl
ZCgpLnJlbW92ZShpdGVtLmdldCgpKTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgq
aXRlbSk7CiAgICAgV2ViQ29yZTo6UGFnZTo6Y2xlYXJQcmV2aW91c0l0ZW1Gcm9tQWxsUGFnZXMo
aXRlbS5nZXQoKSk7CiAgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0ZW0pOwogfQpA
QCAtMjE2LDEyICsyMTYsMTIgQEAgaW50IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpmb3J3YXJk
TGlzdENvdW50KCkKIAogdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y2xvc2UoKQogewot
ICAgIEhhc2hTZXQ8dWludDY0X3Q+OjppdGVyYXRvciBlbmQgPSBtX2Fzc29jaWF0ZWRJdGVtSURz
LmVuZCgpOwotICAgIGZvciAoSGFzaFNldDx1aW50NjRfdD46Oml0ZXJhdG9yIGkgPSBtX2Fzc29j
aWF0ZWRJdGVtSURzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIFdlYkNvcmU6OlBh
Z2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKGl0ZW1Gb3JJRCgqaSkpOworICAgIGZvciAoYXV0byYg
aXRlbUlEIDogbV9hc3NvY2lhdGVkSXRlbUlEcykgeworICAgICAgICBpZiAoSGlzdG9yeUl0ZW0q
IGl0ZW0gPSBpdGVtRm9ySUQoaXRlbUlEKSkKKyAgICAgICAgICAgIFdlYkNvcmU6OlBhZ2VDYWNo
ZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKKyAgICB9CiAKICAgICBtX2Fzc29jaWF0ZWRJdGVt
SURzLmNsZWFyKCk7Ci0KICAgICBtX3BhZ2UgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZmJjYjRlMjI4N2E2OGMy
ZDZlZjFkZTM2YWIzYzhhMmMzNzMxYjFhNi4uMmUxOGZmYjA2MzU5NTAyMDVkMDJmZWNlZjJkNTFk
ZWEyZDQ2N2Q5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcApAQCAtMTIwNiw3ICsxMjA2LDcgQEAgdm9pZCBXZWJQYWdlOjpnb0ZvcndhcmQodWlu
dDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKICAgICBpZiAo
IWl0ZW0tPmlzSW5QYWdlQ2FjaGUoKSkKICAgICAgICAgbV9wZW5kaW5nTmF2aWdhdGlvbklEID0g
bmF2aWdhdGlvbklEOwogCi0gICAgbV9wYWdlLT5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBl
OjpGb3J3YXJkKTsKKyAgICBtX3BhZ2UtPmdvVG9JdGVtKCppdGVtLCBGcmFtZUxvYWRUeXBlOjpG
b3J3YXJkKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpnb0JhY2sodWludDY0X3QgbmF2aWdhdGlvbklE
LCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKQEAgLTEyMjIsNyArMTIyMiw3IEBAIHZvaWQg
V2ViUGFnZTo6Z29CYWNrKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0Zvcndh
cmRJdGVtSUQpCiAgICAgaWYgKCFpdGVtLT5pc0luUGFnZUNhY2hlKCkpCiAgICAgICAgIG1fcGVu
ZGluZ05hdmlnYXRpb25JRCA9IG5hdmlnYXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0o
aXRlbSwgRnJhbWVMb2FkVHlwZTo6QmFjayk7CisgICAgbV9wYWdlLT5nb1RvSXRlbSgqaXRlbSwg
RnJhbWVMb2FkVHlwZTo6QmFjayk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJk
SXRlbSh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJhY2tGb3J3YXJkSXRlbUlEKQpA
QCAtMTIzOCw3ICsxMjM4LDcgQEAgdm9pZCBXZWJQYWdlOjpnb1RvQmFja0ZvcndhcmRJdGVtKHVp
bnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGUKICAgICBpZiAoIWl0
ZW0tPmlzSW5QYWdlQ2FjaGUoKSkKICAgICAgICAgbV9wZW5kaW5nTmF2aWdhdGlvbklEID0gbmF2
aWdhdGlvbklEOwogCi0gICAgbV9wYWdlLT5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpJ
bmRleGVkQmFja0ZvcndhcmQpOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIEZyYW1lTG9h
ZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6dHJ5UmVzdG9y
ZVNjcm9sbFBvc2l0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
CmluZGV4IDhiOGI4ODQyYTMyZjk0NDliNWZmNWRlMzRiMjliZDQ1NTNmYWRmM2EuLjk2MTZiMDBk
OWY2NjEyMDAyOGM3MzM3OTk0MDBhOTRlZGRhMzAzZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAtMTExNiw3ICsxMTE2LDcgQEAgdm9pZCBXZWJQcm9jZXNz
OjpzZXRUZXh0Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2Vy
U3RhdGUpCiAKIHZvaWQgV2ViUHJvY2Vzczo6cmVsZWFzZVBhZ2VDYWNoZSgpCiB7Ci0gICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvQ2FwYWNpdHlOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVt
b3J5UHJlc3N1cmUpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coMCwg
UHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNz
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2Nv
YS5tbQppbmRleCA4OGU0ZDk4NDAzOGE4Mzc4MWIwYjdhYzdlMzU4NTI3N2FjMWI0ZDFmLi40NWFk
YzA5YjY0MGIwNzU2ODE5Njc2MjQ3ZWMxMjY5N2FjMTEyYmVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQpAQCAtMTA0LDE4ICsx
MDQsMTggQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2Rl
bCBjYWNoZU1vZGVsKQogICAgIHVuc2lnbmVkIGNhY2hlTWluRGVhZENhcGFjaXR5ID0gMDsKICAg
ICB1bnNpZ25lZCBjYWNoZU1heERlYWRDYXBhY2l0eSA9IDA7CiAgICAgYXV0byBkZWFkRGVjb2Rl
ZERhdGFEZWxldGlvbkludGVydmFsID0gc3RkOjpjaHJvbm86OnNlY29uZHMgeyAwIH07Ci0gICAg
dW5zaWduZWQgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgIHVuc2lnbmVkIHBhZ2VDYWNoZVNp
emUgPSAwOwogICAgIHVuc2lnbmVkIGxvbmcgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IDA7CiAg
ICAgdW5zaWduZWQgbG9uZyB1cmxDYWNoZURpc2tDYXBhY2l0eSA9IDA7CiAKICAgICBjYWxjdWxh
dGVDYWNoZVNpemVzKGNhY2hlTW9kZWwsIG1lbVNpemUsIGRpc2tGcmVlU2l6ZSwKICAgICAgICAg
Y2FjaGVUb3RhbENhcGFjaXR5LCBjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2Fw
YWNpdHksIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwsCi0gICAgICAgIHBhZ2VDYWNo
ZUNhcGFjaXR5LCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7
CisgICAgICAgIHBhZ2VDYWNoZVNpemUsIHVybENhY2hlTWVtb3J5Q2FwYWNpdHksIHVybENhY2hl
RGlza0NhcGFjaXR5KTsKIAogCiAgICAgbWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hl
TWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5
KTsKICAgICBtZW1vcnlDYWNoZSgpLnNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwo
ZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQo
KS5zZXRDYXBhY2l0eShwYWdlQ2FjaGVDYXBhY2l0eSk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQo
KS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOwogCiAgICAgTlNVUkxDYWNoZSAqbnN1cmxDYWNo
ZSA9IFtOU1VSTENhY2hlIHNoYXJlZFVSTENhY2hlXTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAKaW5kZXggYmNjN2FkNjE2MTJiNzE4
OTA1MjY5ZGNlNTg4Mjc0NDYwZWExMzJjYS4uMTE4YzcyMmY3NjI0OWE1ZTJmZWE0YWFlZjA1NWY4
NDlmYWMwOWMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dl
YlByb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2Vi
UHJvY2Vzc1NvdXAuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZv
cm1TZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICB1bnNpZ25lZCBjYWNo
ZU1pbkRlYWRDYXBhY2l0eSA9IDA7CiAgICAgdW5zaWduZWQgY2FjaGVNYXhEZWFkQ2FwYWNpdHkg
PSAwOwogICAgIGF1dG8gZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IHN0ZDo6Y2hy
b25vOjpzZWNvbmRzIHsgMCB9OwotICAgIHVuc2lnbmVkIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsK
KyAgICB1bnNpZ25lZCBwYWdlQ2FjaGVTaXplID0gMDsKIAogICAgIHVuc2lnbmVkIGxvbmcgdXJs
Q2FjaGVNZW1vcnlDYXBhY2l0eSA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyB1cmxDYWNoZURpc2tD
YXBhY2l0eSA9IDA7CkBAIC05OSwxMiArOTksMTIgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9y
bVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgIHVpbnQ2NF90IG1lbVNp
emUgPSBnZXRNZW1vcnlTaXplKCk7CiAgICAgY2FsY3VsYXRlQ2FjaGVTaXplcyhjYWNoZU1vZGVs
LCBtZW1TaXplLCBkaXNrRnJlZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVRv
dGFsQ2FwYWNpdHksIGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwg
ZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhZ2VDYWNoZUNhcGFjaXR5LCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tD
YXBhY2l0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ2FjaGVTaXplLCB1cmxDYWNo
ZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7CiAKICAgICBXZWJDb3JlOjpt
ZW1vcnlDYWNoZSgpLnNldERpc2FibGVkKGNhY2hlTW9kZWwgPT0gQ2FjaGVNb2RlbERvY3VtZW50
Vmlld2VyKTsKICAgICBXZWJDb3JlOjptZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVN
aW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkp
OwogICAgIFdlYkNvcmU6Om1lbW9yeUNhY2hlKCkuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25J
bnRlcnZhbChkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsKLSAgICBXZWJDb3JlOjpQ
YWdlQ2FjaGU6OnNoYXJlZCgpLnNldENhcGFjaXR5KHBhZ2VDYWNoZUNhcGFjaXR5KTsKKyAgICBX
ZWJDb3JlOjpQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CiAK
ICNpZiBQTEFURk9STShHVEspCiAgICAgV2ViQ29yZTo6UGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRT
aG91bGRDbGVhckJhY2tpbmdTdG9yZXModHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245585</attachid>
            <date>2015-01-28 16:59:13 -0800</date>
            <delta_ts>2015-01-28 17:20:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141009-20150128165918.patch</filename>
            <type>text/plain</type>
            <size>65864</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzI1NTY1YjA4NTgxMTll
Zjg5MzRmNWNmMjZiNzgzODhiMzk1YmJhZC4uOWQzOGJhNDgzZjgyMTY4YjRlYzVmMmY2MTI4MWNl
NGNkNmQ5ODA5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAxLTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5p
emUgUGFnZUNhY2hlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDEwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDbGVhbiB1cCAvIG1vZGVybml6ZSBQYWdlQ2FjaGUgY2xhc3M6CisgICAgICAg
IC0gVXNlIG1vcmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCisgICAgICAgIC0gVXNl
IGEgTGlzdEhhc2hTZXQ8UmVmPEhpc3RvcnlJdGVtPj4gaW50ZXJuYWxseSBpbnN0ZWFkIG9mIGEg
bGlua2VkCisgICAgICAgICAgbGlzdCBvZiBIaXN0b3J5SXRlbSouIFRoaXMgYXZvaWRzIGhhdmlu
ZyB0aGUgcmVmL3VucmVmIEhpc3RvcnlJdGVtcworICAgICAgICAgIG1hbnVhbGx5IGFuZCBtYWlu
dGFpbmluZyB0aGUgbGlzdCBzaXplIHNlcGFyYXRlbHkuIEl0IGFsc28gc2ltcGxpZmllcworICAg
ICAgICAgIHRoZSBjb2RlIGRlYWxpbmcgd2l0aCB0aGUgY29udGFpbmVyIGFuZCBtYWtlcyBsb29r
aW5nIHVwIEhpc3RvcnlJdGVtcworICAgICAgICAgIGZhc3RlciBhcyBhIGJvbnVzLiBTaW1pbGFy
bHkgdG8gdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLCB3ZSBhcmUKKyAgICAgICAgICBhZGRp
bmcgZWxlbWVudHMgdG8gb25lIGVuZCBhbmQgcmVtb3ZpbmcgZnJvbSB0aGUgb3Bwb3NpdGUgZW5k
IHdoZW4KKyAgICAgICAgICBwcnVuaW5nIHRvIGRyb3Agb2xkIGhpc3RvcnkgaXRlbXMgZmlyc3Qu
IE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUKKyAgICAgICAgICBwcmV2aW91cyBpbXBsZW1lbnRh
dGlvbiB3YXMgY2FsbGVkIExSVUxpc3QsIGl0IGRpZCBub3QgbW92ZSBpdGVtcyB0bworICAgICAg
ICAgIHRoZSBmcm9udCB3aGVuIGFjY2Vzc2VkLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGRvZXNu
J3QgZWl0aGVyLgorICAgICAgICAgLSBSZW5hbWUgImNhcGFjaXR5IiB0byAibWF4U2l6ZSIgdG8g
YXZvaWQgY29uZnVzaW5nIHdpdGggY29udGFpbmVycycKKyAgICAgICAgICAgY2FwYWNpdHkgKHdo
aWNoIGRvZXNuJ3QgbGltaXQgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcikuCisgICAgICAgICAt
IFVzZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIGludCBmb3IgYWxsIHZhbHVlcyB0aGF0IGFyZSBzdXBw
b3NlZCB0byBiZQorICAgICAgICAgICBwb3NpdGl2ZS4KKyAgICAgICAgIC0gRG8gbm90IGV4cGxp
Y2l0ZWx5IGRlZmluZSB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgbGV0IHRoZQorICAgICAg
ICAgICBjb21waWxlciBnZW5lcmF0ZSBpdCBmb3IgdXMgKGFuZCB1c2UgaW4tY2xhc3MgaW5pdGlh
bGl6YXRpb24gZm9yCisgICAgICAgICAgIG1lbWJlcnMpCisgICAgICAgICAtIEZpeCBpbmRlbnRh
dGlvbiBpbiB0aGUgaGVhZGVyLgorCiAyMDE1LTAxLTI4ICBEYW5hIEJ1cmthcnQgIDxkYnVya2Fy
dEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBBU2FuIGZsYWcgc2V0dGluZ3MgZnJvbSBEZWJ1
Z1JlbGVhc2UueGNjb25maWcgdG8gQmFzZS54Y2NvbmZpZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGU4
YzJiYmE0ZDg4OTQxN2ZiYjBhMzg3Yzc5ZTBkMzBhMzZlMTc4NDEuLjRiODBjMTA5OWJkYWU3NjQ2
NDY2ZWE4M2ViMjhmZDE4NzlhZDgyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAg
IENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNh
Y2hlIGNsYXNzLgorCisgICAgICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW06Cisg
ICAgICAgICgtW1dlYkJhY2tGb3J3YXJkTGlzdCBwYWdlQ2FjaGVTaXplXSk6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9sb2FkQmFja0ZvcndhcmRM
aXN0RnJvbU90aGVyVmlldzpdKToKKyAgICAgICAgKC1bV2ViVmlldyBnb1RvQmFja0ZvcndhcmRJ
dGVtOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9zZXRDYWNoZU1vZGVsOl0pOgorCiAyMDE1LTAx
LTI4ICBEYW5hIEJ1cmthcnQgIDxkYnVya2FydEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBB
U2FuIGZsYWcgc2V0dGluZ3MgZnJvbSBEZWJ1Z1JlbGVhc2UueGNjb25maWcgdG8gQmFzZS54Y2Nv
bmZpZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDY5ZjdjYjM3YzYwOWJlNTU0MjNiNTZiYzU0NGY4MDBl
M2ZiYjFlOTUuLmRmNWI4OWIwMDFhMzZlMzU5NWU1MmQ3YjZjMGRjMDRjNDExNTBhMTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNyBAQAogMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNo
ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgorCisgICAgICAgICogV2ViVmll
dy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKToKKworMjAxNS0wMS0yOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIEZpeCB0eXBvIGluIG1h
cmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJlY2FsYygpCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA5NzcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI4Njc4MWE1
Y2U0MmIxYTRlMTU3OTBlMThjYWI4MGVmOTc5MTY1ZGUuLjlkYjdkOTgxZjJiOGM1MGEzNGMwZjky
NmVlNzE1OGRmNTEwNTc2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNS0wMS0y
OCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8g
bW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y2xvc2UpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Z29Gb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29CYWNrKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJkSXRlbSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6cmVsZWFzZVBhZ2VDYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9j
ZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2Fj
aGVNb2RlbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKwog
MjAxNS0wMS0yOCAgRGFuYSBCdXJrYXJ0ICA8ZGJ1cmthcnRAYXBwbGUuY29tPgogCiAgICAgICAg
IE1vdmUgQVNhbiBmbGFnIHNldHRpbmdzIGZyb20gRGVidWdSZWxlYXNlLnhjY29uZmlnIHRvIEJh
c2UueGNjb25maWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYTFiYTQ4MTQ2YTkyYzEwZjExMzQ4
YTM3YjBhYzk5MTY3NGM4ZDBlNS4uNjU1OTYzZTlmOGJiODQ3Zjk5NjFlMjMxOGIyODRiNTVhNzhh
MDU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEyNDAsNyArMTI0MCw3IEBAIF9fWk43V2Vi
Q29yZTRQYWdlMzVyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9uc0V2CiBfX1pON1dl
YkNvcmU0UGFnZTM2c2V0U2hvdWxkU3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zRWIKIF9fWk43
V2ViQ29yZTRQYWdlMzZzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNFdgogX19a
TjdXZWJDb3JlNFBhZ2UzN3NldEluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGVFYgot
X19aTjdXZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUE5TXzExSGlzdG9yeUl0ZW1FTlNfMTNGcmFtZUxv
YWRUeXBlRQorX19aTjdXZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUk5TXzExSGlzdG9yeUl0ZW1FTlNf
MTNGcmFtZUxvYWRUeXBlRQogX19aTjdXZWJDb3JlNFBhZ2U4c2V0TXV0ZWRFYgogX19aTjdXZWJD
b3JlNFBhZ2U5aW5pdEdyb3VwRXYKIF9fWk43V2ViQ29yZTRQYWdlQzFFUk5TXzE3UGFnZUNvbmZp
Z3VyYXRpb25FCkBAIC0xNjA3LDEwICsxNjA3LDEwIEBAIF9fWk43V2ViQ29yZTlKU0VsZW1lbnQ2
c19pbmZvRQogX19aTjdXZWJDb3JlOUpTRWxlbWVudDl0b1dyYXBwZWRFTjNKU0M3SlNWYWx1ZUUK
IF9fWk43V2ViQ29yZTlMYXllclBvb2xDMUV2CiBfX1pON1dlYkNvcmU5TGF5ZXJQb29sRDFFdgot
X19aTjdXZWJDb3JlOVBhZ2VDYWNoZTExc2V0Q2FwYWNpdHlFaQotX19aTjdXZWJDb3JlOVBhZ2VD
YWNoZTE4cHJ1bmVUb0NhcGFjaXR5Tm93RWlOU18xM1BydW5pbmdSZWFzb25FCitfX1pON1dlYkNv
cmU5UGFnZUNhY2hlMTBzZXRNYXhTaXplRWoKK19fWk43V2ViQ29yZTlQYWdlQ2FjaGUxNHBydW5l
VG9TaXplTm93RWpOU18xM1BydW5pbmdSZWFzb25FCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMzRt
YXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjRXYKLV9fWk43V2ViQ29yZTlQYWdlQ2Fj
aGU2cmVtb3ZlRVBOU18xMUhpc3RvcnlJdGVtRQorX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTZyZW1v
dmVFUk5TXzExSGlzdG9yeUl0ZW1FCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlNnNoYXJlZEV2CiBf
X1pON1dlYkNvcmU5UGFnZUdyb3VwOXBhZ2VHcm91cEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTlTY3JvbGxiYXIxMW1vdXNlRXhpdGVkRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcAppbmRleCA5YzE2NzIyNGE3OWRlM2ZiNzlmM2I4
ODU2NWE1ZDRhNmRkMTdlZWQ4Li44NjI5NDRlZWIzY2M5Yzg0MzBhODI5ODEwYWVjYzc5MzdlZDg4
NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xs
ZXIuY3BwCkBAIC03MSwzMCArNzEsMjYgQEAgdm9pZCBCYWNrRm9yd2FyZENvbnRyb2xsZXI6Omdv
QmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
IWl0ZW0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFt
ZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOworICAgIGlmIChpdGVtKQorICAgICAgICBt
X3BhZ2UuZ29Ub0l0ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7
CiB9CiAKIGJvb2wgQmFja0ZvcndhcmRDb250cm9sbGVyOjpnb0JhY2soKQogewotICAgIEhpc3Rv
cnlJdGVtKiBpdGVtID0gYmFja0l0ZW0oKTsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpCYWNr
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBiYWNrSXRl
bSgpKSB7CisgICAgICAgIG1fcGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlwZTo6QmFj
ayk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGJvb2wgQmFja0ZvcndhcmRDb250cm9sbGVyOjpnb0ZvcndhcmQoKQogewotICAgIEhpc3RvcnlJ
dGVtKiBpdGVtID0gZm9yd2FyZEl0ZW0oKTsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3
YXJkKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBmb3J3
YXJkSXRlbSgpKSB7CisgICAgICAgIG1fcGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlw
ZTo6Rm9yd2FyZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgQmFja0ZvcndhcmRDb250cm9sbGVyOjphZGRJdGVtKFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IGl0ZW0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0Jh
Y2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlz
dC5jcHAKaW5kZXggY2NlMDdmNDk5OTE0ZGUzN2IzMTE4YmEwNzhiM2Y5YTUwMjRjNzYwNS4uYjNh
ZDYxOTdlMmI3MWUxYWQ4MzgxZjNjNzNjNmRlZGM0ZTAwNThiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tG
b3J3YXJkTGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAg
ICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKICAg
ICAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBtX2VudHJ5SGFz
aC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZShp
dGVtLmdldCgpKTsKKyAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVt
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAgICAgICBS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXNbMF07CiAgICAgICAgIG1fZW50cmll
cy5yZW1vdmUoMCk7CiAgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVtKTsKLSAgICAgICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKICAgICAgICAgbV9jdXJyZW50LS07CiAgICAgfQog
CkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGlu
dCBzaXplKQogICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFz
dCgpOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICBtX2VudHJ5SGFz
aC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKGl0ZW0u
Z2V0KCkpOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAg
fQogCiAgICAgaWYgKCFzaXplKQpAQCAtMjQyLDEyICsyNDIsMTAgQEAgdm9pZCBCYWNrRm9yd2Fy
ZExpc3Q6OnNldEN1cnJlbnQodW5zaWduZWQgbmV3Q3VycmVudCkKIGJvb2wgQmFja0ZvcndhcmRM
aXN0OjpjbGVhckFsbFBhZ2VDYWNoZXMoKQogewogICAgIGJvb2wgZGlkUmVtb3ZlQXRMZWFzdE9u
ZUl0ZW0gPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2VudHJpZXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBIaXN0
b3J5SXRlbSogaXRlbSA9IG1fZW50cmllc1tpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBtX2VudHJpZXMpIHsKICAgICAgICAgaWYgKGl0ZW0tPmlzSW5QYWdlQ2FjaGUoKSkgewogICAg
ICAgICAgICAgZGlkUmVtb3ZlQXRMZWFzdE9uZUl0ZW0gPSB0cnVlOwotICAgICAgICAgICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGRpZFJl
bW92ZUF0TGVhc3RPbmVJdGVtOwpAQCAtMjU2LDEyICsyNTQsMTEgQEAgYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNsZWFyQWxsUGFnZUNhY2hlcygpCiAKIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9z
ZSgpCiB7Ci0gICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSht
X2VudHJpZXNbaV0uZ2V0KCkpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1fZW50cmllcykKKyAg
ICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOwogICAgIG1fZW50cmllcy5j
bGVhcigpOwogICAgIG1fZW50cnlIYXNoLmNsZWFyKCk7Ci0gICAgbV9wYWdlID0gMDsKKyAgICBt
X3BhZ2UgPSBudWxscHRyOwogICAgIG1fY2xvc2VkID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L0hpc3RvcnlJdGVtLmNwcAppbmRleCAwYzQ3M2MwOTZjMWI1MWMxNWIwZTZjMmM5MmRl
NTlmMDUxNTM1ODEzLi4xYjUyNWRmMjhjNDQ3NmZmMjBmMzI2NTExYTNhMTRhYzU1MmJkNjFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBA
IHZvaWQgSGlzdG9yeUl0ZW06OnNldFVSTFN0cmluZyhjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
IAogdm9pZCBIaXN0b3J5SXRlbTo6c2V0VVJMKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkucmVtb3ZlKHRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVt
b3ZlKCp0aGlzKTsKICAgICBzZXRVUkxTdHJpbmcodXJsLnN0cmluZygpKTsKICAgICBjbGVhckRv
Y3VtZW50U3RhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFn
ZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAppbmRleCA5
ZjUzYTZiZjcyZmE2ZjMyNmFkMGE3NjA1YjU5NDhlMjc1OTU2OTc0Li4wMzk4YzBiYjliNDFiZDYw
NjdlZTFjODgyNDJkNzNmNWFiNWJiMGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L1BhZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2dQ
YWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoUGFnZSogcGFnZSwgY29uc3QgU3RyaW5n
CiAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKHBhZ2UtPm1haW5GcmFt
ZSgpLmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCksIHJlYXNvbik7CiB9CiAKLXN0YXRpYyB1bnNp
Z25lZCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oRnJhbWUmIGZyYW1lLCBEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudCYgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIGludCBpbmRlbnRMZXZlbCkKK3N0
YXRpYyB1bnNpZ25lZCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oRnJhbWUmIGZyYW1lLCBEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudCYgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIHVuc2lnbmVkIGlu
ZGVudExldmVsKQogewogICAgIFBDTE9HKCIrLS0tIik7CiAgICAgaWYgKCFmcmFtZS5sb2FkZXIo
KS5kb2N1bWVudExvYWRlcigpKSB7CkBAIC0yMzQsNyArMjM0LDcgQEAgc3RhdGljIHZvaWQgbG9n
Q2FuQ2FjaGVQYWdlRGVjaXNpb24oUGFnZSYgcGFnZSkKICAgICBpZiAoY3VycmVudFVSTC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbnQgaW5kZW50TGV2ZWwgPSAwOyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRlbnRMZXZlbCA9IDA7CiAgICAgUENMT0coIi0tLS0tLS0tXG4g
RGV0ZXJtaW5pbmcgaWYgcGFnZSBjYW4gYmUgY2FjaGVkOiIpOwogICAgIAogICAgIHVuc2lnbmVk
IHJlamVjdFJlYXNvbnMgPSAwOwpAQCAtMjk3LDI2ICsyOTcsMTcgQEAgUGFnZUNhY2hlJiBQYWdl
Q2FjaGU6OnNoYXJlZCgpCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBhZ2VDYWNoZT4gZ2xv
YmFsUGFnZUNhY2hlOwogICAgIHJldHVybiBnbG9iYWxQYWdlQ2FjaGU7CiB9Ci0KLVBhZ2VDYWNo
ZTo6UGFnZUNhY2hlKCkKLSAgICA6IG1fY2FwYWNpdHkoMCkKLSAgICAsIG1fc2l6ZSgwKQotICAg
ICwgbV9oZWFkKDApCi0gICAgLCBtX3RhaWwoMCkKLSAgICAsIG1fc2hvdWxkQ2xlYXJCYWNraW5n
U3RvcmVzKGZhbHNlKQotewotfQogICAgIAotYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hlUGFnZUNv
bnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUqIGZyYW1lKQorYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hl
UGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUmIGZyYW1lKQogewotICAgIGZvciAoRnJhbWUq
IGNoaWxkID0gZnJhbWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT50cmVlKCkubmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWNhbkNhY2hlUGFnZUNvbnRh
aW5pbmdUaGlzRnJhbWUoY2hpbGQpKQorICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJhbWUudHJl
ZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGlu
ZygpKSB7CisgICAgICAgIGlmICghY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgqY2hp
bGQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBGcmFtZUxv
YWRlciYgZnJhbWVMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CisgICAgRnJhbWVMb2FkZXImIGZy
YW1lTG9hZGVyID0gZnJhbWUubG9hZGVyKCk7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyID0gZnJhbWVMb2FkZXIuZG9jdW1lbnRMb2FkZXIoKTsKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFt
ZS5kb2N1bWVudCgpOwogICAgIAogICAgIHJldHVybiBkb2N1bWVudExvYWRlcgogI2lmICFQTEFU
Rk9STShJT1MpCkBAIC0zMjYsOCArMzE3LDggQEAgYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hlUGFn
ZUNvbnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUqIGZyYW1lKQogI2VuZGlmCiAgICAgICAgIC8vIERv
IG5vdCBjYWNoZSBlcnJvciBwYWdlcyAodGhlc2UgY2FuIGJlIHJlY29nbml6ZWQgYXMgcGFnZXMg
d2l0aCBzdWJzdGl0dXRlIGRhdGEgb3IgdW5yZWFjaGFibGUgVVJMcykuCiAgICAgICAgICYmICEo
ZG9jdW1lbnRMb2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpICYmICFkb2N1bWVudExv
YWRlci0+c3Vic3RpdHV0ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgpKQotICAgICAgICAm
JiAoIWZyYW1lTG9hZGVyLnN1YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkgfHwgZnJh
bWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMoKSkKLSAgICAg
ICAgJiYgIShmcmFtZS0+aXNNYWluRnJhbWUoKSAmJiBkb2N1bWVudC0+dXJsKCkucHJvdG9jb2xJ
cygiaHR0cHMiKSAmJiBkb2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250
YWluc05vU3RvcmUoKSkKKyAgICAgICAgJiYgKCFmcmFtZUxvYWRlci5zdWJmcmFtZUxvYWRlcigp
LmNvbnRhaW5zUGx1Z2lucygpIHx8IGZyYW1lLnBhZ2UoKS0+c2V0dGluZ3MoKS5wYWdlQ2FjaGVT
dXBwb3J0c1BsdWdpbnMoKSkKKyAgICAgICAgJiYgIShmcmFtZS5pc01haW5GcmFtZSgpICYmIGRv
Y3VtZW50LT51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYmIGRvY3VtZW50TG9hZGVyLT5yZXNw
b25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQogICAgICAgICAmJiAhRGF0YWJh
c2VNYW5hZ2VyOjptYW5hZ2VyKCkuaGFzT3BlbkRhdGFiYXNlcyhkb2N1bWVudCkKICAgICAgICAg
JiYgZnJhbWVMb2FkZXIuaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCkKICAgICAgICAgJiYgIWZyYW1l
TG9hZGVyLnF1aWNrUmVkaXJlY3RDb21pbmcoKQpAQCAtMzU3LDggKzM0OCw4IEBAIGJvb2wgUGFn
ZUNhY2hlOjpjYW5DYWNoZShQYWdlKiBwYWdlKSBjb25zdAogICAgIC8vIG92ZXIgaXQgYWdhaW4g
d2hlbiB3ZSBsZWF2ZSB0aGF0IHBhZ2UuCiAgICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IHBh
Z2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmxvYWRUeXBlKCk7CiAgICAgCi0gICAgcmV0dXJuIG1f
Y2FwYWNpdHkgPiAwCi0gICAgICAgICYmIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUo
JnBhZ2UtPm1haW5GcmFtZSgpKQorICAgIHJldHVybiBtX21heFNpemUgPiAwCisgICAgICAgICYm
IGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUocGFnZS0+bWFpbkZyYW1lKCkpCiAgICAg
ICAgICYmIHBhZ2UtPnNldHRpbmdzKCkudXNlc1BhZ2VDYWNoZSgpCiAjaWYgRU5BQkxFKERFVklD
RV9PUklFTlRBVElPTikgJiYgIVBMQVRGT1JNKElPUykKICAgICAgICAgJiYgIURldmljZU1vdGlv
bkNvbnRyb2xsZXI6OmlzQWN0aXZlQXQocGFnZSkKQEAgLTM3MywyNyArMzY0LDI0IEBAIGJvb2wg
UGFnZUNhY2hlOjpjYW5DYWNoZShQYWdlKiBwYWdlKSBjb25zdAogICAgICAgICAgICAgfHwgbG9h
ZFR5cGUgPT0gRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKIH0KIAotdm9pZCBQ
YWdlQ2FjaGU6OnBydW5lVG9DYXBhY2l0eU5vdyhpbnQgY2FwYWNpdHksIFBydW5pbmdSZWFzb24g
cHJ1bmluZ1JlYXNvbikKK3ZvaWQgUGFnZUNhY2hlOjpwcnVuZVRvU2l6ZU5vdyh1bnNpZ25lZCBz
aXplLCBQcnVuaW5nUmVhc29uIHBydW5pbmdSZWFzb24pCiB7Ci0gICAgVGVtcG9yYXJ5Q2hhbmdl
PGludD4obV9jYXBhY2l0eSwgc3RkOjptYXgoY2FwYWNpdHksIDApKTsKKyAgICBUZW1wb3JhcnlD
aGFuZ2U8dW5zaWduZWQ+KG1fbWF4U2l6ZSwgc2l6ZSk7CiAgICAgcHJ1bmUocHJ1bmluZ1JlYXNv
bik7CiB9CiAKLXZvaWQgUGFnZUNhY2hlOjpzZXRDYXBhY2l0eShpbnQgY2FwYWNpdHkpCit2b2lk
IFBhZ2VDYWNoZTo6c2V0TWF4U2l6ZSh1bnNpZ25lZCBtYXhTaXplKQogewotICAgIEFTU0VSVChj
YXBhY2l0eSA+PSAwKTsKLSAgICBtX2NhcGFjaXR5ID0gc3RkOjptYXgoY2FwYWNpdHksIDApOwot
CisgICAgbV9tYXhTaXplID0gbWF4U2l6ZTsKICAgICBwcnVuZShQcnVuaW5nUmVhc29uOjpOb25l
KTsKIH0KIAotaW50IFBhZ2VDYWNoZTo6ZnJhbWVDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBQYWdl
Q2FjaGU6OmZyYW1lQ291bnQoKSBjb25zdAogewotICAgIGludCBmcmFtZUNvdW50ID0gMDsKLSAg
ICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bV9uZXh0KSB7Ci0gICAgICAgICsrZnJhbWVDb3VudDsKLSAgICAgICAgQVNTRVJU
KGN1cnJlbnQtPm1fY2FjaGVkUGFnZSk7Ci0gICAgICAgIGZyYW1lQ291bnQgKz0gY3VycmVudC0+
bV9jYWNoZWRQYWdlLT5jYWNoZWRNYWluRnJhbWUoKS0+ZGVzY2VuZGFudEZyYW1lQ291bnQoKTsK
KyAgICB1bnNpZ25lZCBmcmFtZUNvdW50ID0gbV9pdGVtcy5zaXplKCk7CisgICAgZm9yIChhdXRv
JiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBBU1NFUlQoaXRlbS0+bV9jYWNoZWRQYWdlKTsK
KyAgICAgICAgZnJhbWVDb3VudCArPSBpdGVtLT5tX2NhY2hlZFBhZ2UtPmNhY2hlZE1haW5GcmFt
ZSgpLT5kZXNjZW5kYW50RnJhbWVDb3VudCgpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZnJh
bWVDb3VudDsKQEAgLTQwMSwyNiArMzg5LDI2IEBAIGludCBQYWdlQ2FjaGU6OmZyYW1lQ291bnQo
KSBjb25zdAogCiB2b2lkIFBhZ2VDYWNoZTo6bWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJl
Y2FsYygpCiB7Ci0gICAgZm9yIChIaXN0b3J5SXRlbSogY3VycmVudCA9IG1faGVhZDsgY3VycmVu
dDsgY3VycmVudCA9IGN1cnJlbnQtPm1fbmV4dCkgewotICAgICAgICBBU1NFUlQoY3VycmVudC0+
bV9jYWNoZWRQYWdlKTsKLSAgICAgICAgY3VycmVudC0+bV9jYWNoZWRQYWdlLT5tYXJrRm9yVmlz
aXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1faXRlbXMpIHsK
KyAgICAgICAgQVNTRVJUKGl0ZW0tPm1fY2FjaGVkUGFnZSk7CisgICAgICAgIGl0ZW0tPm1fY2Fj
aGVkUGFnZS0+bWFya0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CiAKLXZv
aWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoUGFnZSogcGFnZSkKK3Zv
aWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoUGFnZSYgcGFnZSkKIHsK
LSAgICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJyZW50OyBjdXJyZW50
ID0gY3VycmVudC0+bV9uZXh0KSB7Ci0gICAgICAgIENhY2hlZFBhZ2UmIGNhY2hlZFBhZ2UgPSAq
Y3VycmVudC0+bV9jYWNoZWRQYWdlOwotICAgICAgICBpZiAoJnBhZ2UtPm1haW5GcmFtZSgpID09
ICZjYWNoZWRQYWdlLmNhY2hlZE1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lKCkpCisgICAgZm9y
IChhdXRvJiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBDYWNoZWRQYWdlJiBjYWNoZWRQYWdl
ID0gKml0ZW0tPm1fY2FjaGVkUGFnZTsKKyAgICAgICAgaWYgKCZwYWdlLm1haW5GcmFtZSgpID09
ICZjYWNoZWRQYWdlLmNhY2hlZE1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lKCkpCiAgICAgICAg
ICAgICBjYWNoZWRQYWdlLm1hcmtGb3JGdWxsU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CiAKLXZv
aWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQoUGFnZSogcGFnZSkK
K3ZvaWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQoUGFnZSYgcGFn
ZSkKIHsKLSAgICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+bV9uZXh0KSB7Ci0gICAgICAgIENhY2hlZFBhZ2UmIGNhY2hlZFBh
Z2UgPSAqY3VycmVudC0+bV9jYWNoZWRQYWdlOwotICAgICAgICBpZiAoJnBhZ2UtPm1haW5GcmFt
ZSgpID09ICZjYWNoZWRQYWdlLmNhY2hlZE1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lKCkpCisg
ICAgZm9yIChhdXRvJiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBDYWNoZWRQYWdlJiBjYWNo
ZWRQYWdlID0gKml0ZW0tPm1fY2FjaGVkUGFnZTsKKyAgICAgICAgaWYgKCZwYWdlLm1haW5GcmFt
ZSgpID09ICZjYWNoZWRQYWdlLmNhY2hlZE1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lKCkpCiAg
ICAgICAgICAgICBjYWNoZWRQYWdlLm1hcmtGb3JEZXZpY2VTY2FsZUNoYW5nZWQoKTsKICAgICB9
CiB9CkBAIC00MjgsOSArNDE2LDkgQEAgdm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckRldmlj
ZVNjYWxlQ2hhbmdlZChQYWdlKiBwYWdlKQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIHZvaWQg
UGFnZUNhY2hlOjptYXJrUGFnZXNGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKIHsKLSAg
ICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bV9uZXh0KSB7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50LT5tX2NhY2hlZFBhZ2Up
OwotICAgICAgICBjdXJyZW50LT5tX2NhY2hlZFBhZ2UtPm1hcmtGb3JDYXB0aW9uUHJlZmVyZW5j
ZXNDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBB
U1NFUlQoaXRlbS0+bV9jYWNoZWRQYWdlKTsKKyAgICAgICAgaXRlbS0+bV9jYWNoZWRQYWdlLT5t
YXJrRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIH0KIH0KICNlbmRpZgpAQCAt
NDQyLDcgKzQzMCw3IEBAIHN0YXRpYyBTdHJpbmcgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xv
Z2dpbmdLZXkoUHJ1bmluZ1JlYXNvbiBwcnVuaW5nUmVhc29uKQogICAgICAgICByZXR1cm4gRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpwcnVuZWREdWVUb01lbW9yeVByZXNzdXJlS2V5KCk7CiAgICAg
Y2FzZSBQcnVuaW5nUmVhc29uOjpQcm9jZXNzU3VzcGVuZGVkOgogICAgICAgICByZXR1cm4gRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpwcnVuZWREdWVUb1Byb2Nlc3NTdXNwZW5kZWQoKTsKLSAgICBj
YXNlIFBydW5pbmdSZWFzb246OlJlYWNoZWRDYXBhY2l0eToKKyAgICBjYXNlIFBydW5pbmdSZWFz
b246OlJlYWNoZWRNYXhTaXplOgogICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
OjpwcnVuZWREdWVUb0NhcGFjaXR5UmVhY2hlZCgpOwogICAgIGNhc2UgUHJ1bmluZ1JlYXNvbjo6
Tm9uZToKICAgICAgICAgYnJlYWs7CkBAIC00NTEsNDUgKzQzOSwzMyBAQCBzdGF0aWMgU3RyaW5n
IHBydW5pbmdSZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5KFBydW5pbmdSZWFzb24gcHJ1bmlu
Z1JlYXNvbikKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotdm9pZCBQYWdlQ2FjaGU6
OmFkZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtLCBQYWdlJiBwYWdlKQordm9pZCBQ
YWdlQ2FjaGU6OmFkZChIaXN0b3J5SXRlbSYgaXRlbSwgUGFnZSYgcGFnZSkKIHsKLSAgICBBU1NF
UlQocHJwSXRlbSk7CiAgICAgQVNTRVJUKGNhbkNhY2hlKCZwYWdlKSk7Ci0gICAgCi0gICAgSGlz
dG9yeUl0ZW0qIGl0ZW0gPSBwcnBJdGVtLmxlYWtSZWYoKTsgLy8gQmFsYW5jZWQgaW4gcmVtb3Zl
KCkuCiAKICAgICAvLyBSZW1vdmUgc3RhbGUgY2FjaGUgZW50cnkgaWYgbmVjZXNzYXJ5LgotICAg
IGlmIChpdGVtLT5tX2NhY2hlZFBhZ2UpCi0gICAgICAgIHJlbW92ZShpdGVtKTsKKyAgICByZW1v
dmUoaXRlbSk7CiAKLSAgICBpdGVtLT5tX2NhY2hlZFBhZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENh
Y2hlZFBhZ2U+KHBhZ2UpOwotICAgIGl0ZW0tPm1fcHJ1bmluZ1JlYXNvbiA9IFBydW5pbmdSZWFz
b246Ok5vbmU7Ci0gICAgYWRkVG9MUlVMaXN0KGl0ZW0pOwotICAgICsrbV9zaXplOworICAgIGl0
ZW0ubV9jYWNoZWRQYWdlID0gc3RkOjptYWtlX3VuaXF1ZTxDYWNoZWRQYWdlPihwYWdlKTsKKyAg
ICBpdGVtLm1fcHJ1bmluZ1JlYXNvbiA9IFBydW5pbmdSZWFzb246Ok5vbmU7CisgICAgbV9pdGVt
cy5hZGQoJml0ZW0pOwogICAgIAotICAgIHBydW5lKFBydW5pbmdSZWFzb246OlJlYWNoZWRDYXBh
Y2l0eSk7CisgICAgcHJ1bmUoUHJ1bmluZ1JlYXNvbjo6UmVhY2hlZE1heFNpemUpOwogfQogCi1z
dGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gUGFnZUNhY2hlOjp0YWtlKEhpc3RvcnlJdGVtKiBp
dGVtLCBQYWdlKiBwYWdlKQorc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IFBhZ2VDYWNoZTo6
dGFrZShIaXN0b3J5SXRlbSYgaXRlbSwgUGFnZSogcGFnZSkKIHsKLSAgICBpZiAoIWl0ZW0pCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+
IGNhY2hlZFBhZ2UgPSBXVEY6Om1vdmUoaXRlbS0+bV9jYWNoZWRQYWdlKTsKLQotICAgIHJlbW92
ZUZyb21MUlVMaXN0KGl0ZW0pOwotICAgIC0tbV9zaXplOwotCi0gICAgaXRlbS0+ZGVyZWYoKTsg
Ly8gQmFsYW5jZWQgaW4gYWRkKCkuCi0KLSAgICBpZiAoIWNhY2hlZFBhZ2UpIHsKLSAgICAgICAg
aWYgKGl0ZW0tPm1fcHJ1bmluZ1JlYXNvbiAhPSBQcnVuaW5nUmVhc29uOjpOb25lKQotICAgICAg
ICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKHBhZ2UsIHBydW5pbmdS
ZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5KGl0ZW0tPm1fcHJ1bmluZ1JlYXNvbikpOworICAg
IGlmICghaXRlbS5tX2NhY2hlZFBhZ2UpIHsKKyAgICAgICAgaWYgKGl0ZW0ubV9wcnVuaW5nUmVh
c29uICE9IFBydW5pbmdSZWFzb246Ok5vbmUpCisgICAgICAgICAgICBsb2dQYWdlQ2FjaGVGYWls
dXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dp
bmdLZXkoaXRlbS5tX3BydW5pbmdSZWFzb24pKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCisgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBXVEY6
Om1vdmUoaXRlbS5tX2NhY2hlZFBhZ2UpOworICAgIG1faXRlbXMucmVtb3ZlKCZpdGVtKTsKKwog
ICAgIGlmIChjYWNoZWRQYWdlLT5oYXNFeHBpcmVkKCkpIHsKLSAgICAgICAgTE9HKFBhZ2VDYWNo
ZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVj
YXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIGl0ZW0tPnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBm
b3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhw
aXJlZCIsIGl0ZW0udXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBsb2dQ
YWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpleHBpcmVkS2V5KCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00
OTcsNzggKzQ3Myw0MSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gUGFnZUNhY2hlOjp0
YWtlKEhpc3RvcnlJdGVtKiBpdGVtLCBQYWdlKiBwYWdlKQogICAgIHJldHVybiBjYWNoZWRQYWdl
OwogfQogCi1DYWNoZWRQYWdlKiBQYWdlQ2FjaGU6OmdldChIaXN0b3J5SXRlbSogaXRlbSwgUGFn
ZSogcGFnZSkKK0NhY2hlZFBhZ2UqIFBhZ2VDYWNoZTo6Z2V0KEhpc3RvcnlJdGVtJiBpdGVtLCBQ
YWdlKiBwYWdlKSBjb25zdAogewotICAgIGlmICghaXRlbSkKKyAgICBDYWNoZWRQYWdlKiBjYWNo
ZWRQYWdlID0gaXRlbS5tX2NhY2hlZFBhZ2UuZ2V0KCk7CisgICAgaWYgKCFjYWNoZWRQYWdlKSB7
CisgICAgICAgIGlmIChpdGVtLm1fcHJ1bmluZ1JlYXNvbiAhPSBQcnVuaW5nUmVhc29uOjpOb25l
KQorICAgICAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKHBhZ2Us
IHBydW5pbmdSZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5KGl0ZW0ubV9wcnVuaW5nUmVhc29u
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAotICAgIGlmIChDYWNoZWRQYWdl
KiBjYWNoZWRQYWdlID0gaXRlbS0+bV9jYWNoZWRQYWdlLmdldCgpKSB7Ci0gICAgICAgIGlmICgh
Y2FjaGVkUGFnZS0+aGFzRXhwaXJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFBhZ2U7
Ci0gICAgICAgIAotICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZv
ciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBp
cmVkIiwgaXRlbS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIGlmIChjYWNo
ZWRQYWdlLT5oYXNFeHBpcmVkKCkpIHsKKyAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0
b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBl
bnRyeSBoYXMgZXhwaXJlZCIsIGl0ZW0udXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwog
ICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpleHBpcmVkS2V5KCkpOwogICAgICAgICBQYWdlQ2FjaGU6OnNoYXJl
ZCgpLnJlbW92ZShpdGVtKTsKLSAgICB9IGVsc2UgaWYgKGl0ZW0tPm1fcHJ1bmluZ1JlYXNvbiAh
PSBQcnVuaW5nUmVhc29uOjpOb25lKQotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25v
c3RpY01lc3NhZ2UocGFnZSwgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoaXRl
bS0+bV9wcnVuaW5nUmVhc29uKSk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBjYWNoZWRQYWdlOwogfQogCi12b2lkIFBh
Z2VDYWNoZTo6cmVtb3ZlKEhpc3RvcnlJdGVtKiBpdGVtKQordm9pZCBQYWdlQ2FjaGU6OnJlbW92
ZShIaXN0b3J5SXRlbSYgaXRlbSkKIHsKICAgICAvLyBTYWZlbHkgaWdub3JlIGF0dGVtcHRzIHRv
IHJlbW92ZSBpdGVtcyBub3QgaW4gdGhlIGNhY2hlLgotICAgIGlmICghaXRlbSB8fCAhaXRlbS0+
bV9jYWNoZWRQYWdlKQorICAgIGlmICghaXRlbS5tX2NhY2hlZFBhZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGl0ZW0tPm1fY2FjaGVkUGFnZSA9IG51bGxwdHI7Ci0gICAgcmVtb3ZlRnJvbUxS
VUxpc3QoaXRlbSk7Ci0gICAgLS1tX3NpemU7Ci0KLSAgICBpdGVtLT5kZXJlZigpOyAvLyBCYWxh
bmNlZCBpbiBhZGQoKS4KKyAgICBpdGVtLm1fY2FjaGVkUGFnZSA9IG51bGxwdHI7CisgICAgbV9p
dGVtcy5yZW1vdmUoJml0ZW0pOwogfQogCiB2b2lkIFBhZ2VDYWNoZTo6cHJ1bmUoUHJ1bmluZ1Jl
YXNvbiBwcnVuaW5nUmVhc29uKQogewotICAgIHdoaWxlIChtX3NpemUgPiBtX2NhcGFjaXR5KSB7
Ci0gICAgICAgIEFTU0VSVChtX3RhaWwgJiYgbV90YWlsLT5tX2NhY2hlZFBhZ2UpOwotICAgICAg
ICBtX3RhaWwtPm1fcHJ1bmluZ1JlYXNvbiA9IHBydW5pbmdSZWFzb247Ci0gICAgICAgIHJlbW92
ZShtX3RhaWwpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlQ2FjaGU6OmFkZFRvTFJVTGlzdChIaXN0
b3J5SXRlbSogaXRlbSkKLXsKLSAgICBpdGVtLT5tX25leHQgPSBtX2hlYWQ7Ci0gICAgaXRlbS0+
bV9wcmV2ID0gMDsKLQotICAgIGlmIChtX2hlYWQpIHsKLSAgICAgICAgQVNTRVJUKG1fdGFpbCk7
Ci0gICAgICAgIG1faGVhZC0+bV9wcmV2ID0gaXRlbTsKLSAgICB9IGVsc2UgewotICAgICAgICBB
U1NFUlQoIW1fdGFpbCk7Ci0gICAgICAgIG1fdGFpbCA9IGl0ZW07Ci0gICAgfQotCi0gICAgbV9o
ZWFkID0gaXRlbTsKLX0KLQotdm9pZCBQYWdlQ2FjaGU6OnJlbW92ZUZyb21MUlVMaXN0KEhpc3Rv
cnlJdGVtKiBpdGVtKQotewotICAgIGlmICghaXRlbS0+bV9uZXh0KSB7Ci0gICAgICAgIEFTU0VS
VChpdGVtID09IG1fdGFpbCk7Ci0gICAgICAgIG1fdGFpbCA9IGl0ZW0tPm1fcHJldjsKLSAgICB9
IGVsc2UgewotICAgICAgICBBU1NFUlQoaXRlbSAhPSBtX3RhaWwpOwotICAgICAgICBpdGVtLT5t
X25leHQtPm1fcHJldiA9IGl0ZW0tPm1fcHJldjsKLSAgICB9Ci0KLSAgICBpZiAoIWl0ZW0tPm1f
cHJldikgewotICAgICAgICBBU1NFUlQoaXRlbSA9PSBtX2hlYWQpOwotICAgICAgICBtX2hlYWQg
PSBpdGVtLT5tX25leHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGl0ZW0gIT0gbV9o
ZWFkKTsKLSAgICAgICAgaXRlbS0+bV9wcmV2LT5tX25leHQgPSBpdGVtLT5tX25leHQ7CisgICAg
d2hpbGUgKHBhZ2VDb3VudCgpID4gbWF4U2l6ZSgpKSB7CisgICAgICAgIGF1dG8mIG9sZGVzdEl0
ZW0gPSBtX2l0ZW1zLmZpcnN0KCk7CisgICAgICAgIG9sZGVzdEl0ZW0tPm1fY2FjaGVkUGFnZSA9
IG51bGxwdHI7CisgICAgICAgIG9sZGVzdEl0ZW0tPm1fcHJ1bmluZ1JlYXNvbiA9IHBydW5pbmdS
ZWFzb247CisgICAgICAgIG1faXRlbXMucmVtb3ZlRmlyc3QoKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCmluZGV4IGMzMTBkNGUyODFiNGM5OTI5YWRhNjk5YTJmZjg5
ZDNmNDQ5NTk3ZmQuLmFkNTdmZjcxZGMyZTExMDFiNTgzYmE3YmY5OTc3MDQwYjM2OGQ5MWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDc1ICsyOCw2NSBAQAogCiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSAgICBjbGFzcyBDYWNoZWRQYWdlOwotICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIEhpc3Rv
cnlJdGVtOwotICAgIGNsYXNzIFBhZ2U7CitjbGFzcyBDYWNoZWRQYWdlOworY2xhc3MgRnJhbWU7
CitjbGFzcyBIaXN0b3J5SXRlbTsKK2NsYXNzIFBhZ2U7CiAKLSAgICBlbnVtIGNsYXNzIFBydW5p
bmdSZWFzb24geyBOb25lLCBQcm9jZXNzU3VzcGVuZGVkLCBNZW1vcnlQcmVzc3VyZSwgUmVhY2hl
ZENhcGFjaXR5IH07Ci0gICAgCi0gICAgY2xhc3MgUGFnZUNhY2hlIHsKLSAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGFnZUNhY2hlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
cHVibGljOgotICAgICAgICAvLyBGdW5jdGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbCBwYWdlIGNh
Y2hlLgotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFnZUNhY2hlJiBzaGFyZWQoKTsK
LSAgICAgICAgCi0gICAgICAgIGJvb2wgY2FuQ2FjaGUoUGFnZSopIGNvbnN0OworZW51bSBjbGFz
cyBQcnVuaW5nUmVhc29uIHsgTm9uZSwgUHJvY2Vzc1N1c3BlbmRlZCwgTWVtb3J5UHJlc3N1cmUs
IFJlYWNoZWRNYXhTaXplIH07CiAKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDYXBh
Y2l0eShpbnQpOyAvLyBudW1iZXIgb2YgcGFnZXMgdG8gY2FjaGUKLSAgICAgICAgaW50IGNhcGFj
aXR5KCkgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBhZGQo
UGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4sIFBhZ2UmKTsgLy8gUHJ1bmVzIGlmIGNhcGFjaXR5KCkg
aXMgZXhjZWVkZWQuCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlKEhpc3RvcnlJ
dGVtKik7Ci0gICAgICAgIENhY2hlZFBhZ2UqIGdldChIaXN0b3J5SXRlbSosIFBhZ2UqKTsKLSAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IHRha2UoSGlzdG9yeUl0ZW0qLCBQYWdl
Kik7CitjbGFzcyBQYWdlQ2FjaGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VDYWNo
ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIC8vIEZ1bmN0aW9uIHRv
IG9idGFpbiB0aGUgZ2xvYmFsIHBhZ2UgY2FjaGUuCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFBhZ2VDYWNoZSYgc2hhcmVkKCk7CiAKLSAgICAgICAgaW50IHBhZ2VDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQotICAgICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgZnJhbWVDb3VudCgp
IGNvbnN0OworICAgIGJvb2wgY2FuQ2FjaGUoUGFnZSopIGNvbnN0OwogCi0gICAgICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgbWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOworICAg
IC8vIFVzZWQgd2hlbiBtZW1vcnkgaXMgbG93IHRvIHBydW5lIHNvbWUgY2FjaGVkIHBhZ2VzLgor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1bmVUb1NpemVOb3codW5zaWduZWQgbWF4U2l6ZSwg
UHJ1bmluZ1JlYXNvbik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNYXhTaXplKHVuc2ln
bmVkKTsgLy8gbnVtYmVyIG9mIHBhZ2VzIHRvIGNhY2hlLgorICAgIHVuc2lnbmVkIG1heFNpemUo
KSBjb25zdCB7IHJldHVybiBtX21heFNpemU7IH0KIAotICAgICAgICAvLyBXaWxsIG1hcmsgYWxs
IGNhY2hlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHBhZ2UgYXMgbmVlZGluZyBz
dHlsZSByZWNhbGMuCi0gICAgICAgIHZvaWQgbWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKFBh
Z2UqKTsKKyAgICB2b2lkIGFkZChIaXN0b3J5SXRlbSYsIFBhZ2UmKTsgLy8gUHJ1bmVzIGlmIG1h
eFNpemUoKSBpcyBleGNlZWRlZC4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZShIaXN0
b3J5SXRlbSYpOworICAgIENhY2hlZFBhZ2UqIGdldChIaXN0b3J5SXRlbSYsIFBhZ2UqKSBjb25z
dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gdGFrZShIaXN0b3J5SXRlbSYsIFBh
Z2UqKTsKIAotICAgICAgICAvLyBVc2VkIHdoZW4gbWVtb3J5IGlzIGxvdyB0byBwcnVuZSBzb21l
IGNhY2hlZCBwYWdlcy4KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcnVuZVRvQ2FwYWNp
dHlOb3coaW50IGNhcGFjaXR5LCBQcnVuaW5nUmVhc29uKTsKKyAgICB1bnNpZ25lZCBwYWdlQ291
bnQoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zLnNpemUoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IHVuc2lnbmVkIGZyYW1lQ291bnQoKSBjb25zdDsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
bWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIC8vIFdpbGwgbWFyayBh
bGwgY2FjaGVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGFnZSBhcyBuZWVkaW5n
IHN0eWxlIHJlY2FsYy4KKyAgICB2b2lkIG1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyhQYWdl
Jik7CisgICAgdm9pZCBtYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQoUGFnZSYpOwogI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICAgICAgdm9pZCBtYXJrUGFnZXNGb3JDYXB0aW9uUHJl
ZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgdm9pZCBtYXJrUGFnZXNGb3JDYXB0aW9uUHJlZmVyZW5j
ZXNDaGFuZ2VkKCk7CiAjZW5kaWYKIAotICAgICAgICBib29sIHNob3VsZENsZWFyQmFja2luZ1N0
b3JlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzOyB9Ci0gICAg
ICAgIHZvaWQgc2V0U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKGJvb2wgZmxhZykgeyBtX3Nob3Vs
ZENsZWFyQmFja2luZ1N0b3JlcyA9IGZsYWc7IH0KLSAgICAgICAgdm9pZCBtYXJrUGFnZXNGb3JE
ZXZpY2VTY2FsZUNoYW5nZWQoUGFnZSopOworICAgIGJvb2wgc2hvdWxkQ2xlYXJCYWNraW5nU3Rv
cmVzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXM7IH0KKyAgICB2
b2lkIHNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyhib29sIGZsYWcpIHsgbV9zaG91bGRDbGVh
ckJhY2tpbmdTdG9yZXMgPSBmbGFnOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBQYWdlQ2Fj
aGUoKTsgLy8gVXNlIHNoYXJlZCgpIGluc3RlYWQuCi0gICAgICAgIH5QYWdlQ2FjaGUoKTsgLy8g
Tm90IGltcGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRl
bGV0ZSAtLSBXZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgotICAgICAgICAKLSAg
ICAgICAgc3RhdGljIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSop
OworcHJpdmF0ZToKKyAgICBQYWdlQ2FjaGUoKSA9IGRlZmF1bHQ7IC8vIFVzZSBzaGFyZWQoKSBp
bnN0ZWFkLgorICAgIH5QYWdlQ2FjaGUoKSA9IGRlbGV0ZTsgLy8gTWFrZSBzdXJlIG5vYm9keSBh
Y2NpZGVudGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBub3QgZGVsZXRlIHNpbmds
ZXRvbnMuCiAKLSAgICAgICAgdm9pZCBhZGRUb0xSVUxpc3QoSGlzdG9yeUl0ZW0qKTsgLy8gQWRk
cyB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KLSAgICAgICAgdm9pZCByZW1vdmVGcm9tTFJVTGlz
dChIaXN0b3J5SXRlbSopOworICAgIHN0YXRpYyBib29sIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdU
aGlzRnJhbWUoRnJhbWUmKTsKIAotICAgICAgICB2b2lkIHBydW5lKFBydW5pbmdSZWFzb24pOwor
ICAgIHZvaWQgcHJ1bmUoUHJ1bmluZ1JlYXNvbik7CiAKLSAgICAgICAgaW50IG1fY2FwYWNpdHk7
Ci0gICAgICAgIGludCBtX3NpemU7CisgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPEhpc3RvcnlJdGVt
Pj4gbV9pdGVtczsKKyAgICB1bnNpZ25lZCBtX21heFNpemUgezB9OworICAgIGJvb2wgbV9zaG91
bGRDbGVhckJhY2tpbmdTdG9yZXMge2ZhbHNlfTsKIAotICAgICAgICAvLyBMUlUgTGlzdAotICAg
ICAgICBIaXN0b3J5SXRlbSogbV9oZWFkOwotICAgICAgICBIaXN0b3J5SXRlbSogbV90YWlsOwot
ICAgICAgICAKLSAgICAgICAgYm9vbCBtX3Nob3VsZENsZWFyQmFja2luZ1N0b3JlczsKLQotICAg
ICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxQYWdlQ2FjaGU+OwotICAgIH07
CisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8UGFnZUNhY2hlPjsKK307CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKaW5kZXggOTBiNWEwYTMzZWM2YjhjYmZhMWQ1OTFhNmVmNmYwOTIwZDRkN2RjNC4uOTVmZWY2
MWUwNjBiMjZlODAwOGQ4NDUyYjZlNzIyNzFkOTU3MGFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCkBAIC05MjEsNyArOTIxLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9h
ZFVSTEludG9DaGlsZEZyYW1lKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVyZXIs
IEYKICAgICAgICAgSGlzdG9yeUl0ZW0qIGNoaWxkSXRlbSA9IHBhcmVudEl0ZW0tPmNoaWxkSXRl
bVdpdGhUYXJnZXQoY2hpbGRGcmFtZS0+dHJlZSgpLnVuaXF1ZU5hbWUoKSk7CiAgICAgICAgIGlm
IChjaGlsZEl0ZW0pIHsKICAgICAgICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLm1fcmVxdWVz
dGVkSGlzdG9yeUl0ZW0gPSBjaGlsZEl0ZW07Ci0gICAgICAgICAgICBjaGlsZEZyYW1lLT5sb2Fk
ZXIoKS5sb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKGNoaWxkSXRlbSwgbG9hZFR5cGUoKSwgTWF5
QXR0ZW1wdENhY2hlT25seUxvYWRGb3JGb3JtU3VibWlzc2lvbkl0ZW0pOworICAgICAgICAgICAg
Y2hpbGRGcmFtZS0+bG9hZGVyKCkubG9hZERpZmZlcmVudERvY3VtZW50SXRlbSgqY2hpbGRJdGVt
LCBsb2FkVHlwZSgpLCBNYXlBdHRlbXB0Q2FjaGVPbmx5TG9hZEZvckZvcm1TdWJtaXNzaW9uSXRl
bSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzQwLDggKzE3
NDAsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQogICAgIFJl
ZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQ
YWdlPiBjYWNoZWRQYWdlOwotICAgIGlmIChtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSkKLSAgICAg
ICAgY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkudGFrZShoaXN0b3J5KCkucHJvdmlz
aW9uYWxJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsKKyAgICBpZiAobV9sb2FkaW5nRnJvbUNhY2hl
ZFBhZ2UgJiYgaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpKQorICAgICAgICBjYWNoZWRQYWdl
ID0gUGFnZUNhY2hlOjpzaGFyZWQoKS50YWtlKCpoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCks
IG1fZnJhbWUucGFnZSgpKTsKIAogICAgIExPRyhQYWdlQ2FjaGUsICJXZWJDb3JlTG9hZGluZyAl
czogQWJvdXQgdG8gY29tbWl0IHByb3Zpc2lvbmFsIGxvYWQgZnJvbSBwcmV2aW91cyBVUkwgJyVz
JyB0byBuZXcgVVJMICclcyciLCBtX2ZyYW1lLnRyZWUoKS51bmlxdWVOYW1lKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwKICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpID8gbV9mcmFtZS5kb2N1
bWVudCgpLT51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKS51dGY4KCkuZGF0
YSgpIDogIiIsCkBAIC0xNzU4LDExICsxNzU4LDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1p
dFByb3Zpc2lvbmFsTG9hZCgpCiAgICAgICAgICAgICBMT0coTWVtb3J5UHJlc3N1cmUsICJQcnVu
aW5nIHBhZ2UgY2FjaGUgYmVjYXVzZSB1bmRlciBtZW1vcnkgcHJlc3N1cmUgYXQ6ICVzIiwgX19Q
UkVUVFlfRlVOQ1RJT05fXyk7CiAgICAgICAgICAgICBMT0coUGFnZUNhY2hlLCAiUHJ1bmluZyBw
YWdlIGNhY2hlIHRvIDAgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZSIpOwogICAgICAgICAgICAgLy8g
RG9uJ3QgY2FjaGUgYW55IHBhZ2UgaWYgd2UgYXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KLSAg
ICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb0NhcGFjaXR5Tm93KDAsIFBydW5p
bmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKKyAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVk
KCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOwogICAg
ICAgICB9IGVsc2UgaWYgKHN5c3RlbU1lbW9yeUxldmVsKCkgPD0gbWVtb3J5TGV2ZWxUaHJlc2hv
bGRUb1BydW5lUGFnZUNhY2hlKSB7CiAgICAgICAgICAgICBMT0coTWVtb3J5UHJlc3N1cmUsICJQ
cnVuaW5nIHBhZ2UgY2FjaGUgYmVjYXVzZSBzeXN0ZW0gbWVtb3J5IGxldmVsIGlzICVkIGF0OiAl
cyIsIHN5c3RlbU1lbW9yeUxldmVsKCksIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwogICAgICAgICAg
ICAgTE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFnZSBjYWNoZSB0byAlZCBkdWUgdG8gbG93IG1l
bW9yeSAobGV2ZWwgJWQgbGVzcyBvciBlcXVhbCB0byAlZCB0aHJlc2hvbGQpIiwgUGFnZUNhY2hl
OjpzaGFyZWQoKS5jYXBhY2l0eSgpIC8gMiwgc3lzdGVtTWVtb3J5TGV2ZWwoKSwgbWVtb3J5TGV2
ZWxUaHJlc2hvbGRUb1BydW5lUGFnZUNhY2hlKTsKLSAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hh
cmVkKCkucHJ1bmVUb0NhcGFjaXR5Tm93KFBhZ2VDYWNoZTo6c2hhcmVkKCkuY2FwYWNpdHkoKSAv
IDIsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKKyAgICAgICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXhTaXplKCkg
LyAyLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CiAgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYKQEAgLTE3NzEsOCArMTc3MSw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zp
c2lvbmFsTG9hZCgpCiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjYWNoZSB0
aGUgcGFnZSB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gaW50byB0aGUgYmFjay9mb3J3YXJk
IGNhY2hlLgogICAgIC8vIFdlIGFyZSBkb2luZyB0aGlzIGhlcmUgYmVjYXVzZSB3ZSBrbm93IGZv
ciBzdXJlIHRoYXQgYSBuZXcgcGFnZSBpcyBhYm91dCB0byBiZSBsb2FkZWQuCi0gICAgSGlzdG9y
eUl0ZW0qIGl0ZW0gPSBoaXN0b3J5KCkuY3VycmVudEl0ZW0oKTsKLSAgICBpZiAoIW1fZnJhbWUu
dHJlZSgpLnBhcmVudCgpICYmIFBhZ2VDYWNoZTo6c2hhcmVkKCkuY2FuQ2FjaGUobV9mcmFtZS5w
YWdlKCkpICYmICFpdGVtLT5pc0luUGFnZUNhY2hlKCkpCisgICAgSGlzdG9yeUl0ZW0mIGl0ZW0g
PSAqaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCk7CisgICAgaWYgKCFtX2ZyYW1lLnRyZWUoKS5wYXJl
bnQoKSAmJiBQYWdlQ2FjaGU6OnNoYXJlZCgpLmNhbkNhY2hlKG1fZnJhbWUucGFnZSgpKSAmJiAh
aXRlbS5pc0luUGFnZUNhY2hlKCkpCiAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuYWRkKGl0
ZW0sICptX2ZyYW1lLnBhZ2UoKSk7CiAKICAgICBpZiAobV9sb2FkVHlwZSAhPSBGcmFtZUxvYWRU
eXBlOjpSZXBsYWNlKQpAQCAtMzEyNywxNCArMzEyNywxNCBAQCBGcmFtZSogRnJhbWVMb2FkZXI6
OmZpbmRGcmFtZUZvck5hdmlnYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBEb2N1bWVu
dCogYQogICAgICAgICBhY3RpdmVEb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKIAogICAg
IGlmICghYWN0aXZlRG9jdW1lbnQtPmNhbk5hdmlnYXRlKGZyYW1lKSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIGZyYW1lOwogfQogCi12
b2lkIEZyYW1lTG9hZGVyOjpsb2FkU2FtZURvY3VtZW50SXRlbShIaXN0b3J5SXRlbSogaXRlbSkK
K3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWRTYW1lRG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtJiBpdGVt
KQogewotICAgIEFTU0VSVChpdGVtLT5kb2N1bWVudFNlcXVlbmNlTnVtYmVyKCkgPT0gaGlzdG9y
eSgpLmN1cnJlbnRJdGVtKCktPmRvY3VtZW50U2VxdWVuY2VOdW1iZXIoKSk7CisgICAgQVNTRVJU
KGl0ZW0uZG9jdW1lbnRTZXF1ZW5jZU51bWJlcigpID09IGhpc3RvcnkoKS5jdXJyZW50SXRlbSgp
LT5kb2N1bWVudFNlcXVlbmNlTnVtYmVyKCkpOwogCiAgICAgLy8gU2F2ZSB1c2VyIHZpZXcgc3Rh
dGUgdG8gdGhlIGN1cnJlbnQgaGlzdG9yeSBpdGVtIGhlcmUgc2luY2Ugd2UgZG9uJ3QgZG8gYSBu
b3JtYWwgbG9hZC4KICAgICAvLyBGSVhNRTogRG9lcyBmb3JtIHN0YXRlIG5lZWQgdG8gYmUgc2F2
ZWQgaGVyZSB0b28/CkBAIC0zMTQyLDEwICszMTQyLDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6Omxv
YWRTYW1lRG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQogICAgIGlmIChGcmFtZVZpZXcq
IHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmlldy0+c2V0V2FzU2Nyb2xsZWRCeVVz
ZXIoZmFsc2UpOwogCi0gICAgaGlzdG9yeSgpLnNldEN1cnJlbnRJdGVtKGl0ZW0pOworICAgIGhp
c3RvcnkoKS5zZXRDdXJyZW50SXRlbSgmaXRlbSk7CiAgICAgICAgIAogICAgIC8vIGxvYWRJblNh
bWVEb2N1bWVudCgpIGFjdHVhbGx5IGNoYW5nZXMgdGhlIFVSTCBhbmQgbm90aWZpZXMgbG9hZCBk
ZWxlZ2F0ZXMgb2YgYSAiZmFrZSIgbG9hZAotICAgIGxvYWRJblNhbWVEb2N1bWVudChpdGVtLT51
cmwoKSwgaXRlbS0+c3RhdGVPYmplY3QoKSwgZmFsc2UpOworICAgIGxvYWRJblNhbWVEb2N1bWVu
dChpdGVtLnVybCgpLCBpdGVtLnN0YXRlT2JqZWN0KCksIGZhbHNlKTsKIAogICAgIC8vIFJlc3Rv
cmUgdXNlciB2aWV3IHN0YXRlIGZyb20gdGhlIGN1cnJlbnQgaGlzdG9yeSBpdGVtIGhlcmUgc2lu
Y2Ugd2UgZG9uJ3QgZG8gYSBub3JtYWwgbG9hZC4KICAgICBoaXN0b3J5KCkucmVzdG9yZVNjcm9s
bFBvc2l0aW9uQW5kVmlld1N0YXRlKCk7CkBAIC0zMTU0LDEwICszMTU0LDEwIEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmxvYWRTYW1lRG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQogLy8gRklY
TUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJlYWxseSBiZSBzcGxpdCBpbnRvIGEgY291cGxlIHBp
ZWNlcywgc29tZSBvZgogLy8gd2hpY2ggc2hvdWxkIGJlIG1ldGhvZHMgb2YgSGlzdG9yeUNvbnRy
b2xsZXIgYW5kIHNvbWUgb2Ygd2hpY2ggc2hvdWxkIGJlCiAvLyBtZXRob2RzIG9mIEZyYW1lTG9h
ZGVyLgotdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5
SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSwgRm9ybVN1Ym1pc3Npb25DYWNoZUxv
YWRQb2xpY3kgY2FjaGVMb2FkUG9saWN5KQordm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVu
dERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSYgaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSwg
Rm9ybVN1Ym1pc3Npb25DYWNoZUxvYWRQb2xpY3kgY2FjaGVMb2FkUG9saWN5KQogewogICAgIC8v
IFJlbWVtYmVyIHRoaXMgaXRlbSBzbyB3ZSBjYW4gdHJhdmVyc2UgYW55IGNoaWxkIGl0ZW1zIGFz
IGNoaWxkIGZyYW1lcyBsb2FkCi0gICAgaGlzdG9yeSgpLnNldFByb3Zpc2lvbmFsSXRlbShpdGVt
KTsKKyAgICBoaXN0b3J5KCkuc2V0UHJvdmlzaW9uYWxJdGVtKCZpdGVtKTsKIAogICAgIGlmIChD
YWNoZWRQYWdlKiBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFyZWQoKS5nZXQoaXRlbSwgbV9m
cmFtZS5wYWdlKCkpKSB7CiAgICAgICAgIGF1dG8gZG9jdW1lbnRMb2FkZXIgPSBjYWNoZWRQYWdl
LT5kb2N1bWVudExvYWRlcigpOwpAQCAtMzE2NywxNyArMzE2NywxNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxv
YWRUeXBlIGxvYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVJMIGl0ZW1VUkwgPSBp
dGVtLT51cmwoKTsKLSAgICBVUkwgaXRlbU9yaWdpbmFsVVJMID0gaXRlbS0+b3JpZ2luYWxVUkwo
KTsKKyAgICBVUkwgaXRlbVVSTCA9IGl0ZW0udXJsKCk7CisgICAgVVJMIGl0ZW1PcmlnaW5hbFVS
TCA9IGl0ZW0ub3JpZ2luYWxVUkwoKTsKICAgICBVUkwgY3VycmVudFVSTDsKICAgICBpZiAoZG9j
dW1lbnRMb2FkZXIoKSkKICAgICAgICAgY3VycmVudFVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVy
bCgpOwotICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEgPSBpdGVtLT5mb3JtRGF0YSgpOwor
ICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEgPSBpdGVtLmZvcm1EYXRhKCk7CiAKICAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChpdGVtVVJMKTsKIAotICAgIGlmICghaXRlbS0+cmVmZXJy
ZXIoKS5pc051bGwoKSkKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIoaXRlbS0+cmVm
ZXJyZXIoKSk7CisgICAgaWYgKCFpdGVtLnJlZmVycmVyKCkuaXNOdWxsKCkpCisgICAgICAgIHJl
cXVlc3Quc2V0SFRUUFJlZmVycmVyKGl0ZW0ucmVmZXJyZXIoKSk7CiAgICAgCiAgICAgLy8gSWYg
dGhpcyB3YXMgYSByZXBvc3QgdGhhdCBmYWlsZWQgdGhlIHBhZ2UgY2FjaGUsIHdlIG1pZ2h0IHRy
eSB0byByZXBvc3QgdGhlIGZvcm0uCiAgICAgTmF2aWdhdGlvbkFjdGlvbiBhY3Rpb247CkBAIC0z
MTg2LDggKzMxODYsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJ
dGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYQogCiAgICAgICAgIHJlcXVl
c3Quc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwogICAgICAgICByZXF1ZXN0LnNldEhUVFBCb2R5KGZv
cm1EYXRhKTsKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQ29udGVudFR5cGUoaXRlbS0+Zm9ybUNv
bnRlbnRUeXBlKCkpOwotICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3Jp
Z2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoaXRlbS0+cmVmZXJyZXIoKSk7
CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUENvbnRlbnRUeXBlKGl0ZW0uZm9ybUNvbnRlbnRUeXBl
KCkpOworICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoaXRlbS5yZWZlcnJlcigpKTsKICAgICAgICAg
YWRkSFRUUE9yaWdpbklmTmVlZGVkKHJlcXVlc3QsIHNlY3VyaXR5T3JpZ2luLT50b1N0cmluZygp
KTsKIAogICAgICAgICAvLyBNYWtlIHN1cmUgdG8gYWRkIGV4dHJhIGZpZWxkcyB0byB0aGUgcmVx
dWVzdCBhZnRlciB0aGUgT3JpZ2luIGhlYWRlciBpcyBhZGRlZCBmb3IgdGhlIEZvcm1EYXRhIGNh
c2UuCkBAIC0zMjQyLDExICszMjQyLDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJl
bnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hCiB9CiAK
IC8vIExvYWRzIGNvbnRlbnQgaW50byB0aGlzIGZyYW1lLCBhcyBzcGVjaWZpZWQgYnkgaGlzdG9y
eSBpdGVtCi12b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJh
bWVMb2FkVHlwZSBsb2FkVHlwZSkKK3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJ
dGVtJiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKQogewotICAgIG1fcmVxdWVzdGVkSGlz
dG9yeUl0ZW0gPSBpdGVtOworICAgIG1fcmVxdWVzdGVkSGlzdG9yeUl0ZW0gPSAmaXRlbTsKICAg
ICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBoaXN0b3J5KCkuY3VycmVudEl0ZW0oKTsKLSAg
ICBib29sIHNhbWVEb2N1bWVudE5hdmlnYXRpb24gPSBjdXJyZW50SXRlbSAmJiBpdGVtLT5zaG91
bGREb1NhbWVEb2N1bWVudE5hdmlnYXRpb25UbyhjdXJyZW50SXRlbSk7CisgICAgYm9vbCBzYW1l
RG9jdW1lbnROYXZpZ2F0aW9uID0gY3VycmVudEl0ZW0gJiYgaXRlbS5zaG91bGREb1NhbWVEb2N1
bWVudE5hdmlnYXRpb25UbyhjdXJyZW50SXRlbSk7CiAKICAgICBpZiAoc2FtZURvY3VtZW50TmF2
aWdhdGlvbikKICAgICAgICAgbG9hZFNhbWVEb2N1bWVudEl0ZW0oaXRlbSk7CkBAIC0zMjYwLDEx
ICszMjYwLDEyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJldHJ5QWZ0ZXJGYWlsZWRDYWNoZU9ubHlN
YWluUmVzb3VyY2VMb2FkKCkKICAgICBBU1NFUlQoIW1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlKTsK
ICAgICAvLyBXZSBvbmx5IHVzZSBjYWNoZS1vbmx5IGxvYWRzIHRvIGF2b2lkIHJlc3VibWl0dGlu
ZyBmb3Jtcy4KICAgICBBU1NFUlQoaXNCYWNrRm9yd2FyZExvYWRUeXBlKG1fbG9hZFR5cGUpKTsK
KyAgICBBU1NFUlQoaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpKTsKICAgICBBU1NFUlQoaGlz
dG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpLT5mb3JtRGF0YSgpKTsKICAgICBBU1NFUlQoaGlzdG9y
eSgpLnByb3Zpc2lvbmFsSXRlbSgpID09IG1fcmVxdWVzdGVkSGlzdG9yeUl0ZW0uZ2V0KCkpOwog
CiAgICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IG1fbG9hZFR5cGU7Ci0gICAgSGlzdG9yeUl0
ZW0qIGl0ZW0gPSBoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCk7CisgICAgSGlzdG9yeUl0ZW0m
IGl0ZW0gPSAqaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpOwogCiAgICAgc3RvcEFsbExvYWRl
cnMoU2hvdWxkTm90Q2xlYXJQcm92aXNpb25hbEl0ZW0pOwogICAgIGxvYWREaWZmZXJlbnREb2N1
bWVudEl0ZW0oaXRlbSwgbG9hZFR5cGUsIE1heU5vdEF0dGVtcHRDYWNoZU9ubHlMb2FkRm9yRm9y
bVN1Ym1pc3Npb25JdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKaW5kZXggNmQ1
NTgwNjY1N2YxYzkzMzljNDBlOTAyM2Y2MDJhYmU5OWNmNGNkYi4uMDZmYThmMDViOGYyMDQwNTM1
NTliNGY1MmY5YzFkMmM3ODA2MGM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgK
QEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWxv
YWRXaXRoT3ZlcnJpZGVFbmNvZGluZyhjb25zdCBTdHJpbmcmIG92ZXJyaWRlRW5jb2RpbmcpOwog
CiAgICAgdm9pZCBvcGVuKENhY2hlZEZyYW1lQmFzZSYpOwotICAgIHZvaWQgbG9hZEl0ZW0oSGlz
dG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAgICB2b2lkIGxvYWRJdGVtKEhpc3RvcnlJdGVt
JiwgRnJhbWVMb2FkVHlwZSk7CiAgICAgSGlzdG9yeUl0ZW0qIHJlcXVlc3RlZEhpc3RvcnlJdGVt
KCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0ZWRIaXN0b3J5SXRlbS5nZXQoKTsgfQogCiAgICAg
dm9pZCByZXRyeUFmdGVyRmFpbGVkQ2FjaGVPbmx5TWFpblJlc291cmNlTG9hZCgpOwpAQCAtMjk5
LDggKzI5OSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNoZWNrVGltZXJGaXJlZCgpOwogICAg
IAotICAgIHZvaWQgbG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qKTsKLSAgICB2b2lk
IGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlLCBG
b3JtU3VibWlzc2lvbkNhY2hlTG9hZFBvbGljeSk7CisgICAgdm9pZCBsb2FkU2FtZURvY3VtZW50
SXRlbShIaXN0b3J5SXRlbSYpOworICAgIHZvaWQgbG9hZERpZmZlcmVudERvY3VtZW50SXRlbShI
aXN0b3J5SXRlbSYsIEZyYW1lTG9hZFR5cGUsIEZvcm1TdWJtaXNzaW9uQ2FjaGVMb2FkUG9saWN5
KTsKICAgICAKICAgICB2b2lkIGxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAppbmRleCA5Yjgz
YTg0N2RkMDUwOGE3YWE1NmQ1OThhMzE0NDhhNjUzNTFiOGRhLi44MzNlNTg4NGJhYTA3YjM1YjFi
MzVlNWY0YmFjMzdkYjM5YzlkZGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
SGlzdG9yeUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5
Q29udHJvbGxlci5jcHAKQEAgLTIzNCwxMSArMjM0LDEzIEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xs
ZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKCkKIAogdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6aW52
YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSgpCiB7Ci0gICAgLy8gV2hlbiB3ZSBhcmUgcHJl
LWNvbW1pdCwgdGhlIGN1cnJlbnRJdGVtIGlzIHdoZXJlIGFueSBwYWdlIGNhY2hlIGRhdGEgcmVz
aWRlcy4KLSAgICBpZiAoIVBhZ2VDYWNoZTo6c2hhcmVkKCkuZ2V0KGN1cnJlbnRJdGVtKCksIG1f
ZnJhbWUucGFnZSgpKSkKKyAgICBpZiAoIWN1cnJlbnRJdGVtKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gUGFnZUNhY2hl
OjpzaGFyZWQoKS50YWtlKGN1cnJlbnRJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsKKyAgICAvLyBX
aGVuIHdlIGFyZSBwcmUtY29tbWl0LCB0aGUgY3VycmVudEl0ZW0gaXMgd2hlcmUgYW55IHBhZ2Ug
Y2FjaGUgZGF0YSByZXNpZGVzLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBjYWNo
ZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFyZWQoKS50YWtlKCpjdXJyZW50SXRlbSgpLCBtX2ZyYW1l
LnBhZ2UoKSk7CisgICAgaWYgKCFjYWNoZWRQYWdlKQorICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIGdyb3Rlc3F1ZSBoYWNrIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0v
NDA1OTA1OT4gQ3Jhc2ggaW4gUmVuZGVyRmxvdzo6ZGV0YWNoCiAgICAgLy8gU29tZWhvdyB0aGUg
UGFnZVN0YXRlIG9iamVjdCBpcyBub3QgcHJvcGVybHkgdXBkYXRlZCwgYW5kIGlzIGhvbGRpbmcg
b250byBhIHN0YWxlIGRvY3VtZW50LgpAQCAtMjY1LDcgKzI2Nyw3IEBAIGJvb2wgSGlzdG9yeUNv
bnRyb2xsZXI6OnNob3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qIHRh
cmdldEl0ZW0pCiAKIC8vIE1haW4gZnVubmVsIGZvciBuYXZpZ2F0aW5nIHRvIGEgcHJldmlvdXMg
bG9jYXRpb24gKGJhY2svZm9yd2FyZCwgbm9uLXNlYXJjaCBzbmFwLWJhY2spCiAvLyBUaGlzIGlu
Y2x1ZGVzIHJlY3Vyc2lvbiB0byBoYW5kbGUgbG9hZGluZyBpbnRvIGZyYW1lc2V0cyBwcm9wZXJs
eQotdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0
ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OmdvVG9JdGVt
KEhpc3RvcnlJdGVtJiB0YXJnZXRJdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiB7CiAgICAgQVNT
RVJUKCFtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKSk7CiAgICAgCkBAIC0yNzYsMTAgKzI3OCwxMCBA
QCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogdGFyZ2V0SXRl
bSwgRnJhbWVMb2FkVHlwZSB0eXBlKQogICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsK
ICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIW1fZnJhbWUubG9hZGVy
KCkuY2xpZW50KCkuc2hvdWxkR29Ub0hpc3RvcnlJdGVtKHRhcmdldEl0ZW0pKQorICAgIGlmICgh
bV9mcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5zaG91bGRHb1RvSGlzdG9yeUl0ZW0oJnRhcmdldEl0
ZW0pKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZGVmZXJzTG9hZGluZykgewotICAgICAg
ICBtX2RlZmVycmVkSXRlbSA9IHRhcmdldEl0ZW07CisgICAgICAgIG1fZGVmZXJyZWRJdGVtID0g
JnRhcmdldEl0ZW07CiAgICAgICAgIG1fZGVmZXJyZWRGcmFtZUxvYWRUeXBlID0gdHlwZTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI4OCw3ICsyOTAsNyBAQCB2b2lkIEhpc3RvcnlDb250
cm9sbGVyOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogdGFyZ2V0SXRlbSwgRnJhbWVMb2FkVHlwZSB0
eXBlKQogICAgIC8vIC0gcGx1cywgaXQgb25seSBtYWtlcyBzZW5zZSBmb3IgdGhlIHRvcCBsZXZl
bCBvZiB0aGUgb3BlcmF0aW9uIHRocm91Z2ggdGhlIGZyYW1lIHRyZWUsCiAgICAgLy8gYXMgb3Bw
b3NlZCB0byBoYXBwZW5pbmcgZm9yIHNvbWUvb25lIG9mIHRoZSBwYWdlIGNvbW1pdHMgdGhhdCBt
aWdodCBoYXBwZW4gc29vbgogICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gY3VycmVudEl0ZW0gPSBw
YWdlLT5iYWNrRm9yd2FyZCgpLmN1cnJlbnRJdGVtKCk7Ci0gICAgcGFnZS0+YmFja0ZvcndhcmQo
KS5zZXRDdXJyZW50SXRlbSh0YXJnZXRJdGVtKTsKKyAgICBwYWdlLT5iYWNrRm9yd2FyZCgpLnNl
dEN1cnJlbnRJdGVtKCZ0YXJnZXRJdGVtKTsKICAgICBtX2ZyYW1lLmxvYWRlcigpLmNsaWVudCgp
LnVwZGF0ZUdsb2JhbEhpc3RvcnlJdGVtRm9yUGFnZSgpOwogCiAgICAgLy8gRmlyc3Qgc2V0IHRo
ZSBwcm92aXNpb25hbCBpdGVtIG9mIGFueSBmcmFtZXMgdGhhdCBhcmUgbm90IGFjdHVhbGx5IG5h
dmlnYXRpbmcuCkBAIC0zMDUsOCArMzA3LDggQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6c2V0
RGVmZXJzTG9hZGluZyhib29sIGRlZmVyKQogewogICAgIG1fZGVmZXJzTG9hZGluZyA9IGRlZmVy
OwogICAgIGlmICghZGVmZXIgJiYgbV9kZWZlcnJlZEl0ZW0pIHsKLSAgICAgICAgZ29Ub0l0ZW0o
bV9kZWZlcnJlZEl0ZW0uZ2V0KCksIG1fZGVmZXJyZWRGcmFtZUxvYWRUeXBlKTsKLSAgICAgICAg
bV9kZWZlcnJlZEl0ZW0gPSAwOworICAgICAgICBnb1RvSXRlbSgqbV9kZWZlcnJlZEl0ZW0sIG1f
ZGVmZXJyZWRGcmFtZUxvYWRUeXBlKTsKKyAgICAgICAgbV9kZWZlcnJlZEl0ZW0gPSBudWxscHRy
OwogICAgIH0KIH0KIApAQCAtMzM0LDcgKzMzNiw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OnVwZGF0ZUZvclJlbG9hZCgpCiAjZW5kaWYKIAogICAgIGlmIChtX2N1cnJlbnRJdGVtKSB7Ci0g
ICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKG1fY3VycmVudEl0ZW0uZ2V0KCkpOwor
ICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqbV9jdXJyZW50SXRlbSk7CiAgICAg
CiAgICAgICAgIGlmIChtX2ZyYW1lLmxvYWRlcigpLmxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlw
ZTo6UmVsb2FkIHx8IG1fZnJhbWUubG9hZGVyKCkubG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBl
OjpSZWxvYWRGcm9tT3JpZ2luKQogICAgICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmll
d1N0YXRlVG9JdGVtKG1fY3VycmVudEl0ZW0uZ2V0KCkpOwpAQCAtNDk5LDcgKzUwMSw3IEBAIHZv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVVwZGF0ZUZvckNvbW1pdCgpCiAgICAgLy8g
Rm9yIGVhY2ggZnJhbWUgdGhhdCBhbHJlYWR5IGhhZCB0aGUgY29udGVudCB0aGUgaXRlbSByZXF1
ZXN0ZWQgKGJhc2VkIG9uCiAgICAgLy8gKGEgbWF0Y2hpbmcgVVJMIGFuZCBmcmFtZSB0cmVlIHNu
YXBzaG90KSwganVzdCByZXN0b3JlIHRoZSBzY3JvbGwgcG9zaXRpb24uCiAgICAgLy8gU2F2ZSBm
b3JtIHN0YXRlICh3b3JrcyBmcm9tIGN1cnJlbnRJdGVtLCBzaW5jZSBtX2ZyYW1lTG9hZENvbXBs
ZXRlIGlzIHRydWUpCi0gICAgaWYgKG1fY3VycmVudEl0ZW0gJiYgaXRlbXNBcmVDbG9uZXMobV9j
dXJyZW50SXRlbS5nZXQoKSwgbV9wcm92aXNpb25hbEl0ZW0uZ2V0KCkpKSB7CisgICAgaWYgKG1f
Y3VycmVudEl0ZW0gJiYgaXRlbXNBcmVDbG9uZXMoKm1fY3VycmVudEl0ZW0sIG1fcHJvdmlzaW9u
YWxJdGVtLmdldCgpKSkgewogICAgICAgICBBU1NFUlQobV9mcmFtZUxvYWRDb21wbGV0ZSk7CiAg
ICAgICAgIHNhdmVEb2N1bWVudFN0YXRlKCk7CiAgICAgICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFu
ZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJlbnRJdGVtLmdldCgpKTsKQEAgLTcwNywxNyArNzA5LDE1
IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVJdGVt
VHJlZShGcmFtZSYgdGFyZ2V0RnJhbWUsIGJvCiAvLyB0cmFja2luZyB3aGV0aGVyIGVhY2ggZnJh
bWUgYWxyZWFkeSBoYXMgdGhlIGNvbnRlbnQgdGhlIGl0ZW0gcmVxdWVzdHMuICBJZiB0aGVyZSBp
cwogLy8gYSBtYXRjaCwgd2Ugc2V0IHRoZSBwcm92aXNpb25hbCBpdGVtIGFuZCByZWN1cnNlLiAg
T3RoZXJ3aXNlIHdlIHdpbGwgcmVsb2FkIHRoYXQKIC8vIGZyYW1lIGFuZCBhbGwgaXRzIGtpZHMg
aW4gcmVjdXJzaXZlR29Ub0l0ZW0uCi12b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVT
ZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRl
bSkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRlbShI
aXN0b3J5SXRlbSYgaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVtKQogewotICAgIEFTU0VSVChp
dGVtKTsKLQogICAgIGlmICghaXRlbXNBcmVDbG9uZXMoaXRlbSwgZnJvbUl0ZW0pKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBTZXQgcHJvdmlzaW9uYWwgaXRlbSwgd2hpY2ggd2lsbCBiZSBj
b21taXR0ZWQgaW4gcmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0LgotICAgIG1fcHJvdmlzaW9uYWxJ
dGVtID0gaXRlbTsKKyAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9ICZpdGVtOwogCi0gICAgZm9yIChj
b25zdCBhdXRvJiBjaGlsZEl0ZW0gOiBpdGVtLT5jaGlsZHJlbigpKSB7CisgICAgZm9yIChjb25z
dCBhdXRvJiBjaGlsZEl0ZW0gOiBpdGVtLmNoaWxkcmVuKCkpIHsKICAgICAgICAgY29uc3QgU3Ry
aW5nJiBjaGlsZEZyYW1lTmFtZSA9IGNoaWxkSXRlbS0+dGFyZ2V0KCk7CiAKICAgICAgICAgSGlz
dG9yeUl0ZW0qIGZyb21DaGlsZEl0ZW0gPSBmcm9tSXRlbS0+Y2hpbGRJdGVtV2l0aFRhcmdldChj
aGlsZEZyYW1lTmFtZSk7CkBAIC03MjUsMzQgKzcyNSwzMiBAQCB2b2lkIEhpc3RvcnlDb250cm9s
bGVyOjpyZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3Rv
cnlJdAogICAgICAgICBGcmFtZSogY2hpbGRGcmFtZSA9IG1fZnJhbWUudHJlZSgpLmNoaWxkKGNo
aWxkRnJhbWVOYW1lKTsKICAgICAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOwogCi0gICAgICAgIGNo
aWxkRnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5yZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0o
Y2hpbGRJdGVtLmdldCgpLCBmcm9tQ2hpbGRJdGVtKTsKKyAgICAgICAgY2hpbGRGcmFtZS0+bG9h
ZGVyKCkuaGlzdG9yeSgpLnJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRlbSgqY2hpbGRJdGVtLCBm
cm9tQ2hpbGRJdGVtKTsKICAgICB9CiB9CiAKIC8vIFdlIG5vdyB0cmF2ZXJzZSB0aGUgZnJhbWUg
dHJlZSBhbmQgaXRlbSB0cmVlIGEgc2Vjb25kIHRpbWUsIGxvYWRpbmcgZnJhbWVzIHRoYXQKIC8v
IGRvIGhhdmUgdGhlIGNvbnRlbnQgdGhlIGl0ZW0gcmVxdWVzdHMuCi12b2lkIEhpc3RvcnlDb250
cm9sbGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0q
IGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpy
ZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSYgaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVt
LCBGcmFtZUxvYWRUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUKGl0ZW0pOwotCiAgICAgaWYgKCFp
dGVtc0FyZUNsb25lcyhpdGVtLCBmcm9tSXRlbSkpIHsKICAgICAgICAgbV9mcmFtZS5sb2FkZXIo
KS5sb2FkSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8v
IEp1c3QgaXRlcmF0ZSBvdmVyIHRoZSByZXN0LCBsb29raW5nIGZvciBmcmFtZXMgdG8gbmF2aWdh
dGUuCi0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZEl0ZW0gOiBpdGVtLT5jaGlsZHJlbigpKSB7
CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZEl0ZW0gOiBpdGVtLmNoaWxkcmVuKCkpIHsKICAg
ICAgICAgY29uc3QgU3RyaW5nJiBjaGlsZEZyYW1lTmFtZSA9IGNoaWxkSXRlbS0+dGFyZ2V0KCk7
CiAKICAgICAgICAgSGlzdG9yeUl0ZW0qIGZyb21DaGlsZEl0ZW0gPSBmcm9tSXRlbS0+Y2hpbGRJ
dGVtV2l0aFRhcmdldChjaGlsZEZyYW1lTmFtZSk7CiAgICAgICAgIEFTU0VSVChmcm9tQ2hpbGRJ
dGVtKTsKICAgICAgICAgRnJhbWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5jaGlsZChj
aGlsZEZyYW1lTmFtZSk7CiAgICAgICAgIEFTU0VSVChjaGlsZEZyYW1lKTsKLSAgICAgICAgY2hp
bGRGcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLnJlY3Vyc2l2ZUdvVG9JdGVtKGNoaWxkSXRlbS5n
ZXQoKSwgZnJvbUNoaWxkSXRlbSwgdHlwZSk7CisgICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigp
Lmhpc3RvcnkoKS5yZWN1cnNpdmVHb1RvSXRlbSgqY2hpbGRJdGVtLCBmcm9tQ2hpbGRJdGVtLCB0
eXBlKTsKICAgICB9CiB9CiAKLWJvb2wgSGlzdG9yeUNvbnRyb2xsZXI6Oml0ZW1zQXJlQ2xvbmVz
KEhpc3RvcnlJdGVtKiBpdGVtMSwgSGlzdG9yeUl0ZW0qIGl0ZW0yKSBjb25zdAorYm9vbCBIaXN0
b3J5Q29udHJvbGxlcjo6aXRlbXNBcmVDbG9uZXMoSGlzdG9yeUl0ZW0mIGl0ZW0xLCBIaXN0b3J5
SXRlbSogaXRlbTIpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIGl0ZW0gd2UncmUgZ29pbmcgdG8g
aXMgYSBjbG9uZSBvZiB0aGUgaXRlbSB3ZSdyZSBhdCwgdGhlbiB3ZSBkbwogICAgIC8vIG5vdCBu
ZWVkIHRvIGxvYWQgaXQgYWdhaW4uICBUaGUgY3VycmVudCBmcmFtZSB0cmVlIGFuZCB0aGUgZnJh
bWUgdHJlZQpAQCAtNzYxLDEyICs3NTksMTEgQEAgYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6aXRl
bXNBcmVDbG9uZXMoSGlzdG9yeUl0ZW0qIGl0ZW0xLCBIaXN0b3J5SXRlbSogaXRlbTIpIGMKICAg
ICAvLyBhIHJlbG9hZC4gIFRodXMsIGlmIGl0ZW0xIGFuZCBpdGVtMiBhcmUgdGhlIHNhbWUsIHdl
IG5lZWQgdG8gY3JlYXRlIGEKICAgICAvLyBuZXcgZG9jdW1lbnQgYW5kIHNob3VsZCBub3QgY29u
c2lkZXIgdGhlbSBjbG9uZXMuCiAgICAgLy8gKFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzM1NTMy
IGZvciBkZXRhaWxzLikKLSAgICByZXR1cm4gaXRlbTEKLSAgICAgICAgJiYgaXRlbTIKLSAgICAg
ICAgJiYgaXRlbTEgIT0gaXRlbTIKLSAgICAgICAgJiYgaXRlbTEtPml0ZW1TZXF1ZW5jZU51bWJl
cigpID09IGl0ZW0yLT5pdGVtU2VxdWVuY2VOdW1iZXIoKQotICAgICAgICAmJiBjdXJyZW50RnJh
bWVzTWF0Y2hJdGVtKGl0ZW0xKQotICAgICAgICAmJiBpdGVtMi0+aGFzU2FtZUZyYW1lcyhpdGVt
MSk7CisgICAgcmV0dXJuIGl0ZW0yCisgICAgICAgICYmICZpdGVtMSAhPSBpdGVtMgorICAgICAg
ICAmJiBpdGVtMS5pdGVtU2VxdWVuY2VOdW1iZXIoKSA9PSBpdGVtMi0+aXRlbVNlcXVlbmNlTnVt
YmVyKCkKKyAgICAgICAgJiYgY3VycmVudEZyYW1lc01hdGNoSXRlbSgmaXRlbTEpCisgICAgICAg
ICYmIGl0ZW0yLT5oYXNTYW1lRnJhbWVzKCZpdGVtMSk7CiB9CiAKIC8vIEhlbHBlciBtZXRob2Qg
dGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZnJhbWUgdHJlZSBtYXRjaGVzIGdp
dmVuIGhpc3RvcnkgaXRlbSdzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hp
c3RvcnlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xs
ZXIuaAppbmRleCA0MzFmMzBlMGFjZjhhOWE2M2NmOTVkYzQ2ZDcwYWQ5MjAxNWIxNzg1Li4xYjQw
YTgwYjBlMzI3MThiMzNlZmI0MjJhYWZlNjc2ZmJjM2M3ZmU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaApAQCAtOTMsMTkgKzkzLDE5IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhZ2U7CiAgICAgYm9vbCBzaG91bGRTdG9wTG9hZGlu
Z0Zvckhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7Ci0gICAgdm9pZCBnb1RvSXRlbShI
aXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOworICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0
ZW0mLCBGcmFtZUxvYWRUeXBlKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZUl0ZW0oSGlzdG9yeUl0
ZW0qKTsKICAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjcmVhdGVJdGVtKCk7CiAgICAgUGFz
c1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlSXRlbVRyZWUoRnJhbWUmIHRhcmdldEZyYW1lLCBi
b29sIGNsaXBBdFRhcmdldCk7CiAKLSAgICB2b2lkIHJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRl
bShIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtKik7Ci0gICAgdm9pZCByZWN1cnNpdmVHb1RvSXRl
bShIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CisgICAgdm9pZCBy
ZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0mLCBIaXN0b3J5SXRlbSopOwor
ICAgIHZvaWQgcmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0mLCBIaXN0b3J5SXRlbSosIEZy
YW1lTG9hZFR5cGUpOwogICAgIGJvb2wgaXNSZXBsYWNlTG9hZFR5cGVXaXRoUHJvdmlzaW9uYWxJ
dGVtKEZyYW1lTG9hZFR5cGUpOwogICAgIGJvb2wgaXNSZWxvYWRUeXBlV2l0aFByb3Zpc2lvbmFs
SXRlbShGcmFtZUxvYWRUeXBlKTsKICAgICB2b2lkIHJlY3Vyc2l2ZVVwZGF0ZUZvckNvbW1pdCgp
OwogICAgIHZvaWQgcmVjdXJzaXZlVXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbigpOwot
ICAgIGJvb2wgaXRlbXNBcmVDbG9uZXMoSGlzdG9yeUl0ZW0qLCBIaXN0b3J5SXRlbSopIGNvbnN0
OworICAgIGJvb2wgaXRlbXNBcmVDbG9uZXMoSGlzdG9yeUl0ZW0mLCBIaXN0b3J5SXRlbSopIGNv
bnN0OwogICAgIGJvb2wgY3VycmVudEZyYW1lc01hdGNoSXRlbShIaXN0b3J5SXRlbSopIGNvbnN0
OwogICAgIHZvaWQgdXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0KGJvb2wgZG9D
bGlwKTsKICAgICB2b2lkIHVwZGF0ZUN1cnJlbnRJdGVtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmlu
ZGV4IDgzMTRjOWE0ZTNjZWJkYzZiNTdiNWQzMDRmMDQ0ZmEyODZmYjY2MTAuLjc4Y2IxOTM1MzM4
OWI3Njg4ZTQ3YjViNWY2YjJmNTAwMGQwNDdlOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC05
ODksNyArOTg5LDcgQEAgdm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhmbG9h
dCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpvb21GYWN0b3IKICAgICB9CiAKICAgICBpZiAo
aXNNYWluRnJhbWUoKSkKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JG
dWxsU3R5bGVSZWNhbGMocGFnZSk7CisgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1Bh
Z2VzRm9yRnVsbFN0eWxlUmVjYWxjKCpwYWdlKTsKIH0KIAogZmxvYXQgRnJhbWU6OmZyYW1lU2Nh
bGVGYWN0b3IoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggN2M1MzVkMDU3MjEyY2JjNGFl
N2Y3ZDY0MjMwZjI3ZmVjYTQ2NTU2OS4uN2Q5N2FlZjBlMmJhMjIyZTU1OWU1Y2JmOGRlYjI4NmRh
MmRlNzA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC00MzAsMTMgKzQzMCwxMyBAQCB2b2lkIFBh
Z2U6OnNldE9wZW5lZEJ5RE9NKCkKICAgICBtX29wZW5lZEJ5RE9NID0gdHJ1ZTsKIH0KIAotdm9p
ZCBQYWdlOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQor
dm9pZCBQYWdlOjpnb1RvSXRlbShIaXN0b3J5SXRlbSYgaXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBl
KQogewogICAgIC8vIHN0b3BBbGxMb2FkZXJzIG1heSBlbmQgdXAgcnVubmluZyBvbmxvYWQgaGFu
ZGxlcnMsIHdoaWNoIGNvdWxkIGNhdXNlIGZ1cnRoZXIgaGlzdG9yeSB0cmF2ZXJzYWxzIHRoYXQg
bWF5IGxlYWQgdG8gdGhlIHBhc3NlZCBpbiBIaXN0b3J5SXRlbQogICAgIC8vIGJlaW5nIGRlcmVm
KCktZWQuIE1ha2Ugc3VyZSB3ZSBjYW4gc3RpbGwgdXNlIGl0IHdpdGggSGlzdG9yeUNvbnRyb2xs
ZXI6OmdvVG9JdGVtIGxhdGVyLgotICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gcHJvdGVjdG9yKGl0
ZW0pOworICAgIFJlZjxIaXN0b3J5SXRlbT4gcHJvdGVjdG9yKGl0ZW0pOwogCi0gICAgaWYgKG1f
bWFpbkZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkuc2hvdWxkU3RvcExvYWRpbmdGb3JIaXN0b3J5
SXRlbShpdGVtKSkKKyAgICBpZiAobV9tYWluRnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5zaG91
bGRTdG9wTG9hZGluZ0Zvckhpc3RvcnlJdGVtKCZpdGVtKSkKICAgICAgICAgbV9tYWluRnJhbWUt
PmxvYWRlcigpLnN0b3BBbGxMb2FkZXJzKCk7CiAKICAgICBtX21haW5GcmFtZS0+bG9hZGVyKCku
aGlzdG9yeSgpLmdvVG9JdGVtKGl0ZW0sIHR5cGUpOwpAQCAtODM5LDkgKzgzOSw5IEBAIHZvaWQg
UGFnZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiAgICAgc2V0TmVl
ZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiAKICAgICBtYWluRnJhbWUoKS5kZXZpY2VPclBh
Z2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdl
c0ZvckRldmljZVNjYWxlQ2hhbmdlZCh0aGlzKTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1h
cmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZCgqdGhpcyk7CiAKLSAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlzKTsKKyAgICBQYWdlQ2FjaGU6
OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygqdGhpcyk7CiAgICAgR3JhcGhp
Y3NDb250ZXh0Ojp1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNlcygpOwogCiAgICAgbWFpbkZy
YW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3Io
KTsKQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIFBhZ2U6OnNldFBhZ2luYXRpb24oY29uc3QgUGFn
aW5hdGlvbiYgcGFnaW5hdGlvbikKICAgICBtX3BhZ2luYXRpb24gPSBwYWdpbmF0aW9uOwogCiAg
ICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFy
ZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGModGhpcyk7CisgICAgUGFnZUNhY2hlOjpz
aGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRoaXMpOwogfQogCiB1bnNpZ25l
ZCBQYWdlOjpwYWdlQ291bnQoKSBjb25zdApAQCAtMTY2MSw3ICsxNjYxLDcgQEAgdm9pZCBQYWdl
OjpzZXRWaXNpdGVkTGlua1N0b3JlKFJlZjxWaXNpdGVkTGlua1N0b3JlPiYmIHZpc2l0ZWRMaW5r
U3RvcmUpCiAgICAgbV92aXNpdGVkTGlua1N0b3JlLT5hZGRQYWdlKCp0aGlzKTsKIAogICAgIGlu
dmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFy
a1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
bWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsKIH0KIAogU2Vzc2lvbklEIFBhZ2U6
OnNlc3Npb25JRCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDI4YzA0ZDhjN2Y3YjYyNGZhMTMz
NGFhNTdjMzVmMTRiZjJlMWUwYjkuLjdmY2Y3YWI2YzgwNTU2YTFjOWNlNDFmNjBiMzllYjY3NDA5
NmUyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgIGJv
b2wgb3BlbmVkQnlET00oKSBjb25zdDsKICAgICB2b2lkIHNldE9wZW5lZEJ5RE9NKCk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlw
ZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSYsIEZyYW1l
TG9hZFR5cGUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRHcm91cE5hbWUoY29uc3Qg
U3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgU3RyaW5nJiBncm91cE5hbWUoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZDc3MzlkMWIxOWFjNjI3NDUxMThm
ZmFiNTg1ZjRkMjMxODM0NDQ5MC4uOTU2YjQ0YzRiN2Y4MmE3M2RkYjIxODM1MTk2MGMxMzIwMWFm
YzhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTUxOSwxMiArNTE5LDggQEAgdm9p
ZCBTZXR0aW5nczo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCiAgICAgaWYg
KCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV91c2VzUGFnZUNhY2hlKSB7
Ci0gICAgICAgIGludCBmaXJzdCA9IC1tX3BhZ2UtPmJhY2tGb3J3YXJkKCkuYmFja0NvdW50KCk7
Ci0gICAgICAgIGludCBsYXN0ID0gbV9wYWdlLT5iYWNrRm9yd2FyZCgpLmZvcndhcmRDb3VudCgp
OwotICAgICAgICBmb3IgKGludCBpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKQotICAgICAgICAg
ICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUobV9wYWdlLT5iYWNrRm9yd2FyZCgpLml0ZW1B
dEluZGV4KGkpKTsKLSAgICB9CisgICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUpCisgICAgICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7
CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldFNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkKGJv
b2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVBy
ZXNzdXJlSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuY3BwCmluZGV4IDVjZDIxMDU2NDdjNDI0OTIxMTZjNTQyMjBiNDZkNjdmNmQxMmEy
YTEuLjBiYjNkMzJlYzRmNjJkY2FiMjI0N2IxNzk1YjVkNzA4ZjhmMmNmOWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcApAQCAtMTAy
LDcgKzEwMiw3IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpyZWxlYXNlQ3JpdGljYWxN
ZW1vcnkoKQogICAgICAgICBSZWxpZWZMb2dnZXIgbG9nKCJFbXB0eSB0aGUgUGFnZUNhY2hlIik7
CiAgICAgICAgIC8vIFJpZ2h0IG5vdywgdGhlIG9ubHkgcmVhc29uIHdlIGNhbGwgcmVsZWFzZSBj
cml0aWNhbCBtZW1vcnkgd2hpbGUgbm90IHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBpcyBpZiB0aGUg
cHJvY2VzcyBpcyBhYm91dCB0byBiZSBzdXNwZW5kZWQuCiAgICAgICAgIFBydW5pbmdSZWFzb24g
cHJ1bmluZ1JlYXNvbiA9IG1lbW9yeVByZXNzdXJlSGFuZGxlcigpLmlzVW5kZXJNZW1vcnlQcmVz
c3VyZSgpID8gUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUgOiBQcnVuaW5nUmVhc29uOjpQ
cm9jZXNzU3VzcGVuZGVkOwotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9DYXBh
Y2l0eU5vdygwLCBwcnVuaW5nUmVhc29uKTsKKyAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5w
cnVuZVRvU2l6ZU5vdygwLCBwcnVuaW5nUmVhc29uKTsKICAgICB9CiAKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbSBiL1Nv
dXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCmluZGV4IDg3NTdj
OGMyMWUwM2M2YjRlZTZiOTU1MWU0OTZlZDRkYjU3ZmZkY2QuLjZiNDUwMDIxYzQyNzg2MjYzNjMy
OTEzNjMxMDI3NzJjMjVjMTJlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3Rv
cnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3Rvcnkv
V2ViQmFja0ZvcndhcmRMaXN0Lm1tCkBAIC0zNTUsNyArMzU1LDcgQEAgc3RhdGljIGJvb2wgYnVt
cGVyQ2FyQmFja0ZvcndhcmRIYWNrTmVlZGVkKCkKIAogLSAoTlNVSW50ZWdlcilwYWdlQ2FjaGVT
aXplCiB7Ci0gICAgcmV0dXJuIFtraXQoY29yZShzZWxmKS0+cGFnZSgpKSB1c2VzUGFnZUNhY2hl
XSA/IFBhZ2VDYWNoZTo6c2hhcmVkKCkuY2FwYWNpdHkoKSA6IDA7CisgICAgcmV0dXJuIFtraXQo
Y29yZShzZWxmKS0+cGFnZSgpKSB1c2VzUGFnZUNhY2hlXSA/IFBhZ2VDYWNoZTo6c2hhcmVkKCku
bWF4U2l6ZSgpIDogMDsKIH0KIAogLSAoaW50KWJhY2tMaXN0Q291bnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQppbmRleCA5MGJmMDZlZGVjNDQzMGE5ODMwZTNmZDM2MmM2NWViNGM3
ZWQyMzZkLi5jMjUwMmE2NDA4ZmFlNDQyMzBlNjkzZjhiYmUyMDE2NDg2YzFiYzU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xOTk3LDcgKzE5OTcsNyBAQCBzdGF0aWMg
Ym9vbCBmYXN0RG9jdW1lbnRUZWFyZG93bkVuYWJsZWQoKQogICAgIGlmICghb3RoZXJCYWNrRm9y
d2FyZENsaWVudC0+Y3VycmVudEl0ZW0oKSkKICAgICAgICAgcmV0dXJuOyAvLyBlbXB0eSBiYWNr
IGZvcndhcmQgbGlzdCwgYmFpbAogICAgIAotICAgIEhpc3RvcnlJdGVtKiBuZXdJdGVtVG9Hb1Rv
ID0gMDsKKyAgICBIaXN0b3J5SXRlbSogbmV3SXRlbVRvR29UbyA9IG51bGxwdHI7CiAKICAgICBp
bnQgbGFzdEl0ZW1JbmRleCA9IG90aGVyQmFja0ZvcndhcmRDbGllbnQtPmZvcndhcmRMaXN0Q291
bnQoKTsKICAgICBmb3IgKGludCBpID0gLW90aGVyQmFja0ZvcndhcmRDbGllbnQtPmJhY2tMaXN0
Q291bnQoKTsgaSA8PSBsYXN0SXRlbUluZGV4OyArK2kpIHsKQEAgLTIwMTQsNyArMjAxNCw3IEBA
IHN0YXRpYyBib29sIGZhc3REb2N1bWVudFRlYXJkb3duRW5hYmxlZCgpCiAgICAgfQogICAgIAog
ICAgIEFTU0VSVChuZXdJdGVtVG9Hb1RvKTsKLSAgICBfcHJpdmF0ZS0+cGFnZS0+Z29Ub0l0ZW0o
bmV3SXRlbVRvR29UbywgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKKyAgICBf
cHJpdmF0ZS0+cGFnZS0+Z29Ub0l0ZW0oKm5ld0l0ZW1Ub0dvVG8sIEZyYW1lTG9hZFR5cGU6Oklu
ZGV4ZWRCYWNrRm9yd2FyZCk7CiB9CiAKIC0gKHZvaWQpX3NldEZvcm1EZWxlZ2F0ZTogKGlkPFdl
YkZvcm1EZWxlZ2F0ZT4pZGVsZWdhdGUKQEAgLTU2NDcsNyArNTY0Nyw4IEBAIHN0YXRpYyBOU1N0
cmluZyAqIGNvbnN0IGJhY2tpbmdQcm9wZXJ0eU9sZFNjYWxlRmFjdG9yS2V5ID0gQCJOU0JhY2tp
bmdQcm9wZXJ0eU9sCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuIE5P
OwogCi0gICAgX3ByaXZhdGUtPnBhZ2UtPmdvVG9JdGVtKGNvcmUoaXRlbSksIEZyYW1lTG9hZFR5
cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAgQVNTRVJUKGl0ZW0pOworICAgIF9wcml2YXRl
LT5wYWdlLT5nb1RvSXRlbSgqY29yZShpdGVtKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tG
b3J3YXJkKTsKICAgICByZXR1cm4gWUVTOwogfQogCkBAIC03NzQyLDcgKzc3NDMsNyBAQCBzdGF0
aWMgaW5saW5lIHVpbnQ2NF90IHJvdW5kVXBUb1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkKICAgICB1
bnNpZ25lZCBjYWNoZU1heERlYWRDYXBhY2l0eSA9IDA7CiAgICAgYXV0byBkZWFkRGVjb2RlZERh
dGFEZWxldGlvbkludGVydmFsID0gc3RkOjpjaHJvbm86OnNlY29uZHMgeyAwIH07CiAKLSAgICB1
bnNpZ25lZCBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgdW5zaWduZWQgcGFnZUNhY2hlU2l6
ZSA9IDA7CiAKICAgICBOU1VJbnRlZ2VyIG5zdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IDA7CiAg
ICAgTlNVSW50ZWdlciBuc3VybENhY2hlRGlza0NhcGFjaXR5ID0gMDsKQEAgLTc3NTMsNyArNzc1
NCw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDY0X3Qgcm91bmRVcFRvUG93ZXJPZjIodWludDY0X3Qg
bnVtKQogICAgIHN3aXRjaCAoY2FjaGVNb2RlbCkgewogICAgIGNhc2UgV2ViQ2FjaGVNb2RlbERv
Y3VtZW50Vmlld2VyOiB7CiAgICAgICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2Vz
KQotICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgICAgIHBhZ2VDYWNoZVNpemUg
PSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRlcykKICAg
ICAgICAgaWYgKG1lbVNpemUgPj0gNDA5NikKQEAgLTc3OTAsMTMgKzc3OTEsMTMgQEAgc3RhdGlj
IGlubGluZSB1aW50NjRfdCByb3VuZFVwVG9Qb3dlck9mMih1aW50NjRfdCBudW0pCiAgICAgY2Fz
ZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyOiB7CiAgICAgICAgIC8vIFBhZ2UgY2FjaGUg
Y2FwYWNpdHkgKGluIHBhZ2VzKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAxMDI0KQotICAgICAg
ICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAzOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9
IDM7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gNTEyKQotICAgICAgICAgICAgcGFnZUNh
Y2hlQ2FwYWNpdHkgPSAyOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDI7CiAgICAgICAg
IGVsc2UgaWYgKG1lbVNpemUgPj0gMjU2KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkg
PSAxOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDE7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUg
PSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRlcykKICAg
ICAgICAgaWYgKG1lbVNpemUgPj0gNDA5NikKQEAgLTc4NDQsMTUgKzc4NDUsMTUgQEAgc3RhdGlj
IGlubGluZSB1aW50NjRfdCByb3VuZFVwVG9Qb3dlck9mMih1aW50NjRfdCBudW0pCiAgICAgICAg
IC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2VzKQogICAgICAgICAvLyAoUmVzZWFyY2gg
aW5kaWNhdGVzIHRoYXQgdmFsdWUgLyBwYWdlIGRyb3BzIHN1YnN0YW50aWFsbHkgYWZ0ZXIgMyBw
YWdlcy4pCiAgICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCi0gICAgICAgICAgICBwYWdlQ2Fj
aGVDYXBhY2l0eSA9IDU7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gNTsKICAgICAgICAg
ZWxzZSBpZiAobWVtU2l6ZSA+PSAxMDI0KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkg
PSA0OworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDQ7CiAgICAgICAgIGVsc2UgaWYgKG1l
bVNpemUgPj0gNTEyKQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAzOworICAgICAg
ICAgICAgcGFnZUNhY2hlU2l6ZSA9IDM7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMjU2
KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOworICAgICAgICAgICAgcGFnZUNh
Y2hlU2l6ZSA9IDI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5
ID0gMTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAxOwogCiAjaWYgUExBVEZPUk0oSU9T
KQogICAgICAgICAvLyBDYWNoZSBwYWdlIGxlc3MgYWdncmVzc2l2ZWx5IGluIGlPUyB0byByZWR1
Y2UgdGhlIGNoYW5jZSBvZiBiZWluZyBqZXR0aXNvbmVkLgpAQCAtNzkzNSw3ICs3OTM2LDcgQEAg
c3RhdGljIGlubGluZSB1aW50NjRfdCByb3VuZFVwVG9Qb3dlck9mMih1aW50NjRfdCBudW0pCiAK
ICAgICBtZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNh
Y2hlTWF4RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIG1lbW9yeUNhY2hl
KCkuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFEZWxl
dGlvbkludGVydmFsKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldENhcGFjaXR5KHBhZ2VD
YWNoZUNhcGFjaXR5KTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFnZUNh
Y2hlU2l6ZSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0
U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOwogICAgIG5zdXJsQ2FjaGVNZW1vcnlDYXBh
Y2l0eSA9IHN0ZDo6bWF4KG5zdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgW25zdXJsQ2FjaGUgbWVt
b3J5Q2FwYWNpdHldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKaW5kZXggMGYxN2VkYTMyOWUyZjViNmVi
MDk2NjkwY2UzYmY3YzZiMTlmNDBjMS4uNGE3MTQ0Nzg2YzQ0ZDVkMDUwMGNmODRhNjNiMjJlNzU1
YzlkYTczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKQEAgLTUzMCwxMyArNTMwLDEzIEBAIHZvaWQg
V2ViVmlldzo6c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgdW5z
aWduZWQgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOwogICAgIGF1dG8gZGVhZERlY29kZWREYXRh
RGVsZXRpb25JbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzIHsgMCB9OwogCi0gICAgdW5z
aWduZWQgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgIHVuc2lnbmVkIHBhZ2VDYWNoZVNpemUg
PSAwOwogCiAKICAgICBzd2l0Y2ggKGNhY2hlTW9kZWwpIHsKICAgICBjYXNlIFdlYkNhY2hlTW9k
ZWxEb2N1bWVudFZpZXdlcjogewogICAgICAgICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBw
YWdlcykKLSAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgICAgICBwYWdlQ2FjaGVT
aXplID0gMDsKIAogICAgICAgICAvLyBPYmplY3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMp
CiAgICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCkBAIC01NjMsMTMgKzU2MywxMyBAQCB2b2lk
IFdlYlZpZXc6OnNldENhY2hlTW9kZWwoV2ViQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgIGNh
c2UgV2ViQ2FjaGVNb2RlbERvY3VtZW50QnJvd3NlcjogewogICAgICAgICAvLyBQYWdlIGNhY2hl
IGNhcGFjaXR5IChpbiBwYWdlcykKICAgICAgICAgaWYgKG1lbVNpemUgPj0gMTAyNCkKLSAgICAg
ICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMzsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUg
PSAzOwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDUxMikKLSAgICAgICAgICAgIHBhZ2VD
YWNoZUNhcGFjaXR5ID0gMjsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAyOwogICAgICAg
ICBlbHNlIGlmIChtZW1TaXplID49IDI1NikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5
ID0gMTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAxOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXpl
ID0gMDsKIAogICAgICAgICAvLyBPYmplY3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMpCiAg
ICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCkBAIC02MTAsMTUgKzYxMCwxNSBAQCB2b2lkIFdl
YlZpZXc6OnNldENhY2hlTW9kZWwoV2ViQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgICAgICAv
LyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKICAgICAgICAgLy8gKFJlc2VhcmNoIGlu
ZGljYXRlcyB0aGF0IHZhbHVlIC8gcGFnZSBkcm9wcyBzdWJzdGFudGlhbGx5IGFmdGVyIDMgcGFn
ZXMuKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAyMDQ4KQotICAgICAgICAgICAgcGFnZUNhY2hl
Q2FwYWNpdHkgPSA1OworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDU7CiAgICAgICAgIGVs
c2UgaWYgKG1lbVNpemUgPj0gMTAyNCkKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0g
NDsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSA0OwogICAgICAgICBlbHNlIGlmIChtZW1T
aXplID49IDUxMikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMzsKKyAgICAgICAg
ICAgIHBhZ2VDYWNoZVNpemUgPSAzOwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDI1NikK
LSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMjsKKyAgICAgICAgICAgIHBhZ2VDYWNo
ZVNpemUgPSAyOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9
IDE7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMTsKIAogICAgICAgICAvLyBPYmplY3Qg
Y2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMpCiAgICAgICAgIC8vIChUZXN0aW5nIGluZGljYXRl
cyB0aGF0IHZhbHVlIC8gTUIgZGVwZW5kcyBoZWF2aWx5IG9uIGNvbnRlbnQgYW5kCkBAIC02NzUs
NyArNjc1LDcgQEAgdm9pZCBXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKFdlYkNhY2hlTW9kZWwgY2Fj
aGVNb2RlbCkKIAogICAgIG1lbW9yeUNhY2hlKCkuc2V0Q2FwYWNpdGllcyhjYWNoZU1pbkRlYWRD
YXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0eSk7CiAgICAg
bWVtb3J5Q2FjaGUoKS5zZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRlYWREZWNv
ZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0Q2Fw
YWNpdHkocGFnZUNhY2hlQ2FwYWNpdHkpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0TWF4
U2l6ZShwYWdlQ2FjaGVTaXplKTsKIAogI2lmIFVTRShDRk5FVFdPUkspCiAgICAgLy8gRG9uJ3Qg
c2hyaW5rIGEgYmlnIGRpc2sgY2FjaGUsIHNpbmNlIHRoYXQgd291bGQgY2F1c2UgY2h1cm4uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRleCBhMTc2MTNiMjEzNjcwMmNiM2YzZGNkYWM3ZTBk
NjQzYzMwNTk1YzlhLi43NWUyN2JhNTEwYTJkNGE0MzY1MTkxMjQ5NTA3Y2MyNDEwNjUyMTBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFdlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVtKHVpbnQ2NF90IGl0ZW1JRCkKICAgICBpZiAo
IWl0ZW0pCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUGFnZUNhY2hlOjpzaGFyZWQo
KS5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0
ZW0pOwogICAgIFdlYkNvcmU6OlBhZ2U6OmNsZWFyUHJldmlvdXNJdGVtRnJvbUFsbFBhZ2VzKGl0
ZW0uZ2V0KCkpOwogICAgIGhpc3RvcnlJdGVtVG9JRE1hcCgpLnJlbW92ZShpdGVtKTsKIH0KQEAg
LTIxNiwxMiArMjE2LDEyIEBAIGludCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Zm9yd2FyZExp
c3RDb3VudCgpCiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmNsb3NlKCkKIHsKLSAg
ICBIYXNoU2V0PHVpbnQ2NF90Pjo6aXRlcmF0b3IgZW5kID0gbV9hc3NvY2lhdGVkSXRlbUlEcy5l
bmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8dWludDY0X3Q+OjppdGVyYXRvciBpID0gbV9hc3NvY2lh
dGVkSXRlbUlEcy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAgICAgICBXZWJDb3JlOjpQYWdl
Q2FjaGU6OnNoYXJlZCgpLnJlbW92ZShpdGVtRm9ySUQoKmkpKTsKKyAgICBmb3IgKGF1dG8mIGl0
ZW1JRCA6IG1fYXNzb2NpYXRlZEl0ZW1JRHMpIHsKKyAgICAgICAgaWYgKEhpc3RvcnlJdGVtKiBp
dGVtID0gaXRlbUZvcklEKGl0ZW1JRCkpCisgICAgICAgICAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6
OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CisgICAgfQogCiAgICAgbV9hc3NvY2lhdGVkSXRlbUlE
cy5jbGVhcigpOwotCiAgICAgbV9wYWdlID0gbnVsbHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGZiY2I0ZTIyODdhNjhjMmQ2
ZWYxZGUzNmFiM2M4YTJjMzczMWIxYTYuLjJlMThmZmIwNjM1OTUwMjA1ZDAyZmVjZWYyZDUxZGVh
MmQ0NjdkOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKQEAgLTEyMDYsNyArMTIwNiw3IEBAIHZvaWQgV2ViUGFnZTo6Z29Gb3J3YXJkKHVpbnQ2
NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQpCiAgICAgaWYgKCFp
dGVtLT5pc0luUGFnZUNhY2hlKCkpCiAgICAgICAgIG1fcGVuZGluZ05hdmlnYXRpb25JRCA9IG5h
dmlnYXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0oaXRlbSwgRnJhbWVMb2FkVHlwZTo6
Rm9yd2FyZCk7CisgICAgbV9wYWdlLT5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlwZTo6Rm9y
d2FyZCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z29CYWNrKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwg
dWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQpCkBAIC0xMjIyLDcgKzEyMjIsNyBAQCB2b2lkIFdl
YlBhZ2U6OmdvQmFjayh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJhY2tGb3J3YXJk
SXRlbUlEKQogICAgIGlmICghaXRlbS0+aXNJblBhZ2VDYWNoZSgpKQogICAgICAgICBtX3BlbmRp
bmdOYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9uSUQ7CiAKLSAgICBtX3BhZ2UtPmdvVG9JdGVtKGl0
ZW0sIEZyYW1lTG9hZFR5cGU6OkJhY2spOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIEZy
YW1lTG9hZFR5cGU6OkJhY2spOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdvVG9CYWNrRm9yd2FyZEl0
ZW0odWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKQEAg
LTEyMzgsNyArMTIzOCw3IEBAIHZvaWQgV2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJkSXRlbSh1aW50
NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJhY2tGb3J3YXJkSXRlCiAgICAgaWYgKCFpdGVt
LT5pc0luUGFnZUNhY2hlKCkpCiAgICAgICAgIG1fcGVuZGluZ05hdmlnYXRpb25JRCA9IG5hdmln
YXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0oaXRlbSwgRnJhbWVMb2FkVHlwZTo6SW5k
ZXhlZEJhY2tGb3J3YXJkKTsKKyAgICBtX3BhZ2UtPmdvVG9JdGVtKCppdGVtLCBGcmFtZUxvYWRU
eXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnRyeVJlc3RvcmVT
Y3JvbGxQb3NpdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApp
bmRleCA4YjhiODg0MmEzMmY5NDQ5YjVmZjVkZTM0YjI5YmQ0NTUzZmFkZjNhLi45NjE2YjAwZDlm
NjYxMjAwMjhjNzMzNzk5NDAwYTk0ZWRkYTMwM2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTExMTYsNyArMTExNiw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6
c2V0VGV4dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0
YXRlKQogCiB2b2lkIFdlYlByb2Nlc3M6OnJlbGVhc2VQYWdlQ2FjaGUoKQogewotICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkucHJ1bmVUb0NhcGFjaXR5Tm93KDAsIFBydW5pbmdSZWFzb246Ok1lbW9y
eVByZXNzdXJlKTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9TaXplTm93KDAsIFBy
dW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0Nv
Y29hLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2Eu
bW0KaW5kZXggODhlNGQ5ODQwMzhhODM3ODFiMGI3YWM3ZTM1ODUyNzdhYzFiNGQxZi4uNDVhZGMw
OWI2NDBiMDc1NjgxOTY3NjI0N2VjMTI2OTdhYzExMmJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTEwNCwxOCArMTA0
LDE4IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwg
Y2FjaGVNb2RlbCkKICAgICB1bnNpZ25lZCBjYWNoZU1pbkRlYWRDYXBhY2l0eSA9IDA7CiAgICAg
dW5zaWduZWQgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOwogICAgIGF1dG8gZGVhZERlY29kZWRE
YXRhRGVsZXRpb25JbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzIHsgMCB9OwotICAgIHVu
c2lnbmVkIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICB1bnNpZ25lZCBwYWdlQ2FjaGVTaXpl
ID0gMDsKICAgICB1bnNpZ25lZCBsb25nIHVybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSAwOwogICAg
IHVuc2lnbmVkIGxvbmcgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPSAwOwogCiAgICAgY2FsY3VsYXRl
Q2FjaGVTaXplcyhjYWNoZU1vZGVsLCBtZW1TaXplLCBkaXNrRnJlZVNpemUsCiAgICAgICAgIGNh
Y2hlVG90YWxDYXBhY2l0eSwgY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFj
aXR5LCBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsLAotICAgICAgICBwYWdlQ2FjaGVD
YXBhY2l0eSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwor
ICAgICAgICBwYWdlQ2FjaGVTaXplLCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURp
c2tDYXBhY2l0eSk7CiAKIAogICAgIG1lbW9yeUNhY2hlKCkuc2V0Q2FwYWNpdGllcyhjYWNoZU1p
bkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0eSk7
CiAgICAgbWVtb3J5Q2FjaGUoKS5zZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRl
YWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
c2V0Q2FwYWNpdHkocGFnZUNhY2hlQ2FwYWNpdHkpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
c2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKIAogICAgIE5TVVJMQ2FjaGUgKm5zdXJsQ2FjaGUg
PSBbTlNVUkxDYWNoZSBzaGFyZWRVUkxDYWNoZV07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCmluZGV4IGJjYzdhZDYxNjEyYjcxODkw
NTI2OWRjZTU4ODI3NDQ2MGVhMTMyY2EuLjExOGM3MjJmNzYyNDlhNWUyZmVhNGFhZWYwNTVmODQ5
ZmFjMDljMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJQ
cm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlBy
b2Nlc3NTb3VwLmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3Jt
U2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgdW5zaWduZWQgY2FjaGVN
aW5EZWFkQ2FwYWNpdHkgPSAwOwogICAgIHVuc2lnbmVkIGNhY2hlTWF4RGVhZENhcGFjaXR5ID0g
MDsKICAgICBhdXRvIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSBzdGQ6OmNocm9u
bzo6c2Vjb25kcyB7IDAgfTsKLSAgICB1bnNpZ25lZCBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7Cisg
ICAgdW5zaWduZWQgcGFnZUNhY2hlU2l6ZSA9IDA7CiAKICAgICB1bnNpZ25lZCBsb25nIHVybENh
Y2hlTWVtb3J5Q2FwYWNpdHkgPSAwOwogICAgIHVuc2lnbmVkIGxvbmcgdXJsQ2FjaGVEaXNrQ2Fw
YWNpdHkgPSAwOwpAQCAtOTksMTIgKzk5LDEyIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1T
ZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICB1aW50NjRfdCBtZW1TaXpl
ID0gZ2V0TWVtb3J5U2l6ZSgpOwogICAgIGNhbGN1bGF0ZUNhY2hlU2l6ZXMoY2FjaGVNb2RlbCwg
bWVtU2l6ZSwgZGlza0ZyZWVTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVUb3Rh
bENhcGFjaXR5LCBjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGRl
YWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICBw
YWdlQ2FjaGVDYXBhY2l0eSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2Fw
YWNpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSwgdXJsQ2FjaGVN
ZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwogCiAgICAgV2ViQ29yZTo6bWVt
b3J5Q2FjaGUoKS5zZXREaXNhYmxlZChjYWNoZU1vZGVsID09IENhY2hlTW9kZWxEb2N1bWVudFZp
ZXdlcik7CiAgICAgV2ViQ29yZTo6bWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWlu
RGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsK
ICAgICBXZWJDb3JlOjptZW1vcnlDYWNoZSgpLnNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50
ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7Ci0gICAgV2ViQ29yZTo6UGFn
ZUNhY2hlOjpzaGFyZWQoKS5zZXRDYXBhY2l0eShwYWdlQ2FjaGVDYXBhY2l0eSk7CisgICAgV2Vi
Q29yZTo6UGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOwogCiAj
aWYgUExBVEZPUk0oR1RLKQogICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0U2hv
dWxkQ2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245587</attachid>
            <date>2015-01-28 17:20:07 -0800</date>
            <delta_ts>2015-01-28 17:25:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141009-20150128172012.patch</filename>
            <type>text/plain</type>
            <size>65842</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzI1NTY1YjA4NTgxMTll
Zjg5MzRmNWNmMjZiNzgzODhiMzk1YmJhZC4uOWQzOGJhNDgzZjgyMTY4YjRlYzVmMmY2MTI4MWNl
NGNkNmQ5ODA5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAxLTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5p
emUgUGFnZUNhY2hlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDEwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDbGVhbiB1cCAvIG1vZGVybml6ZSBQYWdlQ2FjaGUgY2xhc3M6CisgICAgICAg
IC0gVXNlIG1vcmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCisgICAgICAgIC0gVXNl
IGEgTGlzdEhhc2hTZXQ8UmVmPEhpc3RvcnlJdGVtPj4gaW50ZXJuYWxseSBpbnN0ZWFkIG9mIGEg
bGlua2VkCisgICAgICAgICAgbGlzdCBvZiBIaXN0b3J5SXRlbSouIFRoaXMgYXZvaWRzIGhhdmlu
ZyB0aGUgcmVmL3VucmVmIEhpc3RvcnlJdGVtcworICAgICAgICAgIG1hbnVhbGx5IGFuZCBtYWlu
dGFpbmluZyB0aGUgbGlzdCBzaXplIHNlcGFyYXRlbHkuIEl0IGFsc28gc2ltcGxpZmllcworICAg
ICAgICAgIHRoZSBjb2RlIGRlYWxpbmcgd2l0aCB0aGUgY29udGFpbmVyIGFuZCBtYWtlcyBsb29r
aW5nIHVwIEhpc3RvcnlJdGVtcworICAgICAgICAgIGZhc3RlciBhcyBhIGJvbnVzLiBTaW1pbGFy
bHkgdG8gdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLCB3ZSBhcmUKKyAgICAgICAgICBhZGRp
bmcgZWxlbWVudHMgdG8gb25lIGVuZCBhbmQgcmVtb3ZpbmcgZnJvbSB0aGUgb3Bwb3NpdGUgZW5k
IHdoZW4KKyAgICAgICAgICBwcnVuaW5nIHRvIGRyb3Agb2xkIGhpc3RvcnkgaXRlbXMgZmlyc3Qu
IE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUKKyAgICAgICAgICBwcmV2aW91cyBpbXBsZW1lbnRh
dGlvbiB3YXMgY2FsbGVkIExSVUxpc3QsIGl0IGRpZCBub3QgbW92ZSBpdGVtcyB0bworICAgICAg
ICAgIHRoZSBmcm9udCB3aGVuIGFjY2Vzc2VkLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGRvZXNu
J3QgZWl0aGVyLgorICAgICAgICAgLSBSZW5hbWUgImNhcGFjaXR5IiB0byAibWF4U2l6ZSIgdG8g
YXZvaWQgY29uZnVzaW5nIHdpdGggY29udGFpbmVycycKKyAgICAgICAgICAgY2FwYWNpdHkgKHdo
aWNoIGRvZXNuJ3QgbGltaXQgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcikuCisgICAgICAgICAt
IFVzZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIGludCBmb3IgYWxsIHZhbHVlcyB0aGF0IGFyZSBzdXBw
b3NlZCB0byBiZQorICAgICAgICAgICBwb3NpdGl2ZS4KKyAgICAgICAgIC0gRG8gbm90IGV4cGxp
Y2l0ZWx5IGRlZmluZSB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgbGV0IHRoZQorICAgICAg
ICAgICBjb21waWxlciBnZW5lcmF0ZSBpdCBmb3IgdXMgKGFuZCB1c2UgaW4tY2xhc3MgaW5pdGlh
bGl6YXRpb24gZm9yCisgICAgICAgICAgIG1lbWJlcnMpCisgICAgICAgICAtIEZpeCBpbmRlbnRh
dGlvbiBpbiB0aGUgaGVhZGVyLgorCiAyMDE1LTAxLTI4ICBEYW5hIEJ1cmthcnQgIDxkYnVya2Fy
dEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBBU2FuIGZsYWcgc2V0dGluZ3MgZnJvbSBEZWJ1
Z1JlbGVhc2UueGNjb25maWcgdG8gQmFzZS54Y2NvbmZpZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGU4
YzJiYmE0ZDg4OTQxN2ZiYjBhMzg3Yzc5ZTBkMzBhMzZlMTc4NDEuLjRiODBjMTA5OWJkYWU3NjQ2
NDY2ZWE4M2ViMjhmZDE4NzlhZDgyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAg
IENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNh
Y2hlIGNsYXNzLgorCisgICAgICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW06Cisg
ICAgICAgICgtW1dlYkJhY2tGb3J3YXJkTGlzdCBwYWdlQ2FjaGVTaXplXSk6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9sb2FkQmFja0ZvcndhcmRM
aXN0RnJvbU90aGVyVmlldzpdKToKKyAgICAgICAgKC1bV2ViVmlldyBnb1RvQmFja0ZvcndhcmRJ
dGVtOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9zZXRDYWNoZU1vZGVsOl0pOgorCiAyMDE1LTAx
LTI4ICBEYW5hIEJ1cmthcnQgIDxkYnVya2FydEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBB
U2FuIGZsYWcgc2V0dGluZ3MgZnJvbSBEZWJ1Z1JlbGVhc2UueGNjb25maWcgdG8gQmFzZS54Y2Nv
bmZpZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDY5ZjdjYjM3YzYwOWJlNTU0MjNiNTZiYzU0NGY4MDBl
M2ZiYjFlOTUuLmRmNWI4OWIwMDFhMzZlMzU5NWU1MmQ3YjZjMGRjMDRjNDExNTBhMTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNyBAQAogMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNo
ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgorCisgICAgICAgICogV2ViVmll
dy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKToKKworMjAxNS0wMS0yOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIEZpeCB0eXBvIGluIG1h
cmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJlY2FsYygpCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA5NzcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI4Njc4MWE1
Y2U0MmIxYTRlMTU3OTBlMThjYWI4MGVmOTc5MTY1ZGUuLjlkYjdkOTgxZjJiOGM1MGEzNGMwZjky
NmVlNzE1OGRmNTEwNTc2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNS0wMS0y
OCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8g
bW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y2xvc2UpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Z29Gb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29CYWNrKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJkSXRlbSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6cmVsZWFzZVBhZ2VDYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9j
ZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2Fj
aGVNb2RlbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKwog
MjAxNS0wMS0yOCAgRGFuYSBCdXJrYXJ0ICA8ZGJ1cmthcnRAYXBwbGUuY29tPgogCiAgICAgICAg
IE1vdmUgQVNhbiBmbGFnIHNldHRpbmdzIGZyb20gRGVidWdSZWxlYXNlLnhjY29uZmlnIHRvIEJh
c2UueGNjb25maWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYTFiYTQ4MTQ2YTkyYzEwZjExMzQ4
YTM3YjBhYzk5MTY3NGM4ZDBlNS4uNjU1OTYzZTlmOGJiODQ3Zjk5NjFlMjMxOGIyODRiNTVhNzhh
MDU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEyNDAsNyArMTI0MCw3IEBAIF9fWk43V2Vi
Q29yZTRQYWdlMzVyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9uc0V2CiBfX1pON1dl
YkNvcmU0UGFnZTM2c2V0U2hvdWxkU3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zRWIKIF9fWk43
V2ViQ29yZTRQYWdlMzZzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNFdgogX19a
TjdXZWJDb3JlNFBhZ2UzN3NldEluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGVFYgot
X19aTjdXZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUE5TXzExSGlzdG9yeUl0ZW1FTlNfMTNGcmFtZUxv
YWRUeXBlRQorX19aTjdXZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUk5TXzExSGlzdG9yeUl0ZW1FTlNf
MTNGcmFtZUxvYWRUeXBlRQogX19aTjdXZWJDb3JlNFBhZ2U4c2V0TXV0ZWRFYgogX19aTjdXZWJD
b3JlNFBhZ2U5aW5pdEdyb3VwRXYKIF9fWk43V2ViQ29yZTRQYWdlQzFFUk5TXzE3UGFnZUNvbmZp
Z3VyYXRpb25FCkBAIC0xNjA3LDEwICsxNjA3LDEwIEBAIF9fWk43V2ViQ29yZTlKU0VsZW1lbnQ2
c19pbmZvRQogX19aTjdXZWJDb3JlOUpTRWxlbWVudDl0b1dyYXBwZWRFTjNKU0M3SlNWYWx1ZUUK
IF9fWk43V2ViQ29yZTlMYXllclBvb2xDMUV2CiBfX1pON1dlYkNvcmU5TGF5ZXJQb29sRDFFdgot
X19aTjdXZWJDb3JlOVBhZ2VDYWNoZTExc2V0Q2FwYWNpdHlFaQotX19aTjdXZWJDb3JlOVBhZ2VD
YWNoZTE4cHJ1bmVUb0NhcGFjaXR5Tm93RWlOU18xM1BydW5pbmdSZWFzb25FCitfX1pON1dlYkNv
cmU5UGFnZUNhY2hlMTBzZXRNYXhTaXplRWoKK19fWk43V2ViQ29yZTlQYWdlQ2FjaGUxNHBydW5l
VG9TaXplTm93RWpOU18xM1BydW5pbmdSZWFzb25FCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMzRt
YXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjRXYKLV9fWk43V2ViQ29yZTlQYWdlQ2Fj
aGU2cmVtb3ZlRVBOU18xMUhpc3RvcnlJdGVtRQorX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTZyZW1v
dmVFUk5TXzExSGlzdG9yeUl0ZW1FCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlNnNoYXJlZEV2CiBf
X1pON1dlYkNvcmU5UGFnZUdyb3VwOXBhZ2VHcm91cEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTlTY3JvbGxiYXIxMW1vdXNlRXhpdGVkRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcAppbmRleCA5YzE2NzIyNGE3OWRlM2ZiNzlmM2I4
ODU2NWE1ZDRhNmRkMTdlZWQ4Li44NjI5NDRlZWIzY2M5Yzg0MzBhODI5ODEwYWVjYzc5MzdlZDg4
NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xs
ZXIuY3BwCkBAIC03MSwzMCArNzEsMjYgQEAgdm9pZCBCYWNrRm9yd2FyZENvbnRyb2xsZXI6Omdv
QmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
IWl0ZW0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFt
ZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOworICAgIGlmIChpdGVtKQorICAgICAgICBt
X3BhZ2UuZ29Ub0l0ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7
CiB9CiAKIGJvb2wgQmFja0ZvcndhcmRDb250cm9sbGVyOjpnb0JhY2soKQogewotICAgIEhpc3Rv
cnlJdGVtKiBpdGVtID0gYmFja0l0ZW0oKTsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpCYWNr
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBiYWNrSXRl
bSgpKSB7CisgICAgICAgIG1fcGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlwZTo6QmFj
ayk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGJvb2wgQmFja0ZvcndhcmRDb250cm9sbGVyOjpnb0ZvcndhcmQoKQogewotICAgIEhpc3RvcnlJ
dGVtKiBpdGVtID0gZm9yd2FyZEl0ZW0oKTsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3
YXJkKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBmb3J3
YXJkSXRlbSgpKSB7CisgICAgICAgIG1fcGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlw
ZTo6Rm9yd2FyZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgQmFja0ZvcndhcmRDb250cm9sbGVyOjphZGRJdGVtKFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IGl0ZW0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0Jh
Y2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlz
dC5jcHAKaW5kZXggY2NlMDdmNDk5OTE0ZGUzN2IzMTE4YmEwNzhiM2Y5YTUwMjRjNzYwNS4uYjNh
ZDYxOTdlMmI3MWUxYWQ4MzgxZjNjNzNjNmRlZGM0ZTAwNThiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tG
b3J3YXJkTGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAg
ICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKICAg
ICAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBtX2VudHJ5SGFz
aC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZShp
dGVtLmdldCgpKTsKKyAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVt
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAgICAgICBS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXNbMF07CiAgICAgICAgIG1fZW50cmll
cy5yZW1vdmUoMCk7CiAgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVtKTsKLSAgICAgICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKICAgICAgICAgbV9jdXJyZW50LS07CiAgICAgfQog
CkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGlu
dCBzaXplKQogICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFz
dCgpOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICBtX2VudHJ5SGFz
aC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKGl0ZW0u
Z2V0KCkpOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAg
fQogCiAgICAgaWYgKCFzaXplKQpAQCAtMjQyLDEyICsyNDIsMTAgQEAgdm9pZCBCYWNrRm9yd2Fy
ZExpc3Q6OnNldEN1cnJlbnQodW5zaWduZWQgbmV3Q3VycmVudCkKIGJvb2wgQmFja0ZvcndhcmRM
aXN0OjpjbGVhckFsbFBhZ2VDYWNoZXMoKQogewogICAgIGJvb2wgZGlkUmVtb3ZlQXRMZWFzdE9u
ZUl0ZW0gPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2VudHJpZXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBIaXN0
b3J5SXRlbSogaXRlbSA9IG1fZW50cmllc1tpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBtX2VudHJpZXMpIHsKICAgICAgICAgaWYgKGl0ZW0tPmlzSW5QYWdlQ2FjaGUoKSkgewogICAg
ICAgICAgICAgZGlkUmVtb3ZlQXRMZWFzdE9uZUl0ZW0gPSB0cnVlOwotICAgICAgICAgICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGRpZFJl
bW92ZUF0TGVhc3RPbmVJdGVtOwpAQCAtMjU2LDEyICsyNTQsMTEgQEAgYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNsZWFyQWxsUGFnZUNhY2hlcygpCiAKIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9z
ZSgpCiB7Ci0gICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSht
X2VudHJpZXNbaV0uZ2V0KCkpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1fZW50cmllcykKKyAg
ICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOwogICAgIG1fZW50cmllcy5j
bGVhcigpOwogICAgIG1fZW50cnlIYXNoLmNsZWFyKCk7Ci0gICAgbV9wYWdlID0gMDsKKyAgICBt
X3BhZ2UgPSBudWxscHRyOwogICAgIG1fY2xvc2VkID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L0hpc3RvcnlJdGVtLmNwcAppbmRleCAwYzQ3M2MwOTZjMWI1MWMxNWIwZTZjMmM5MmRl
NTlmMDUxNTM1ODEzLi4xYjUyNWRmMjhjNDQ3NmZmMjBmMzI2NTExYTNhMTRhYzU1MmJkNjFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBA
IHZvaWQgSGlzdG9yeUl0ZW06OnNldFVSTFN0cmluZyhjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
IAogdm9pZCBIaXN0b3J5SXRlbTo6c2V0VVJMKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkucmVtb3ZlKHRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVt
b3ZlKCp0aGlzKTsKICAgICBzZXRVUkxTdHJpbmcodXJsLnN0cmluZygpKTsKICAgICBjbGVhckRv
Y3VtZW50U3RhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFn
ZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAppbmRleCA5
ZjUzYTZiZjcyZmE2ZjMyNmFkMGE3NjA1YjU5NDhlMjc1OTU2OTc0Li4wMzk4YzBiYjliNDFiZDYw
NjdlZTFjODgyNDJkNzNmNWFiNWJiMGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L1BhZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2dQ
YWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoUGFnZSogcGFnZSwgY29uc3QgU3RyaW5n
CiAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKHBhZ2UtPm1haW5GcmFt
ZSgpLmRpYWdub3N0aWNMb2dnaW5nQ2xpZW50KCksIHJlYXNvbik7CiB9CiAKLXN0YXRpYyB1bnNp
Z25lZCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oRnJhbWUmIGZyYW1lLCBEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudCYgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIGludCBpbmRlbnRMZXZlbCkKK3N0
YXRpYyB1bnNpZ25lZCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oRnJhbWUmIGZyYW1lLCBEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudCYgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIHVuc2lnbmVkIGlu
ZGVudExldmVsKQogewogICAgIFBDTE9HKCIrLS0tIik7CiAgICAgaWYgKCFmcmFtZS5sb2FkZXIo
KS5kb2N1bWVudExvYWRlcigpKSB7CkBAIC0yMzQsNyArMjM0LDcgQEAgc3RhdGljIHZvaWQgbG9n
Q2FuQ2FjaGVQYWdlRGVjaXNpb24oUGFnZSYgcGFnZSkKICAgICBpZiAoY3VycmVudFVSTC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpbnQgaW5kZW50TGV2ZWwgPSAwOyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRlbnRMZXZlbCA9IDA7CiAgICAgUENMT0coIi0tLS0tLS0tXG4g
RGV0ZXJtaW5pbmcgaWYgcGFnZSBjYW4gYmUgY2FjaGVkOiIpOwogICAgIAogICAgIHVuc2lnbmVk
IHJlamVjdFJlYXNvbnMgPSAwOwpAQCAtMjk3LDI2ICsyOTcsMTcgQEAgUGFnZUNhY2hlJiBQYWdl
Q2FjaGU6OnNoYXJlZCgpCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBhZ2VDYWNoZT4gZ2xv
YmFsUGFnZUNhY2hlOwogICAgIHJldHVybiBnbG9iYWxQYWdlQ2FjaGU7CiB9Ci0KLVBhZ2VDYWNo
ZTo6UGFnZUNhY2hlKCkKLSAgICA6IG1fY2FwYWNpdHkoMCkKLSAgICAsIG1fc2l6ZSgwKQotICAg
ICwgbV9oZWFkKDApCi0gICAgLCBtX3RhaWwoMCkKLSAgICAsIG1fc2hvdWxkQ2xlYXJCYWNraW5n
U3RvcmVzKGZhbHNlKQotewotfQogICAgIAotYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hlUGFnZUNv
bnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUqIGZyYW1lKQorYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hl
UGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUmIGZyYW1lKQogewotICAgIGZvciAoRnJhbWUq
IGNoaWxkID0gZnJhbWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT50cmVlKCkubmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoIWNhbkNhY2hlUGFnZUNvbnRh
aW5pbmdUaGlzRnJhbWUoY2hpbGQpKQorICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJhbWUudHJl
ZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGlu
ZygpKSB7CisgICAgICAgIGlmICghY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgqY2hp
bGQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBGcmFtZUxv
YWRlciYgZnJhbWVMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CisgICAgRnJhbWVMb2FkZXImIGZy
YW1lTG9hZGVyID0gZnJhbWUubG9hZGVyKCk7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50
TG9hZGVyID0gZnJhbWVMb2FkZXIuZG9jdW1lbnRMb2FkZXIoKTsKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFt
ZS5kb2N1bWVudCgpOwogICAgIAogICAgIHJldHVybiBkb2N1bWVudExvYWRlcgogI2lmICFQTEFU
Rk9STShJT1MpCkBAIC0zMjYsOCArMzE3LDggQEAgYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hlUGFn
ZUNvbnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUqIGZyYW1lKQogI2VuZGlmCiAgICAgICAgIC8vIERv
IG5vdCBjYWNoZSBlcnJvciBwYWdlcyAodGhlc2UgY2FuIGJlIHJlY29nbml6ZWQgYXMgcGFnZXMg
d2l0aCBzdWJzdGl0dXRlIGRhdGEgb3IgdW5yZWFjaGFibGUgVVJMcykuCiAgICAgICAgICYmICEo
ZG9jdW1lbnRMb2FkZXItPnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpICYmICFkb2N1bWVudExv
YWRlci0+c3Vic3RpdHV0ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgpKQotICAgICAgICAm
JiAoIWZyYW1lTG9hZGVyLnN1YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkgfHwgZnJh
bWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMoKSkKLSAgICAg
ICAgJiYgIShmcmFtZS0+aXNNYWluRnJhbWUoKSAmJiBkb2N1bWVudC0+dXJsKCkucHJvdG9jb2xJ
cygiaHR0cHMiKSAmJiBkb2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250
YWluc05vU3RvcmUoKSkKKyAgICAgICAgJiYgKCFmcmFtZUxvYWRlci5zdWJmcmFtZUxvYWRlcigp
LmNvbnRhaW5zUGx1Z2lucygpIHx8IGZyYW1lLnBhZ2UoKS0+c2V0dGluZ3MoKS5wYWdlQ2FjaGVT
dXBwb3J0c1BsdWdpbnMoKSkKKyAgICAgICAgJiYgIShmcmFtZS5pc01haW5GcmFtZSgpICYmIGRv
Y3VtZW50LT51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYmIGRvY3VtZW50TG9hZGVyLT5yZXNw
b25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQogICAgICAgICAmJiAhRGF0YWJh
c2VNYW5hZ2VyOjptYW5hZ2VyKCkuaGFzT3BlbkRhdGFiYXNlcyhkb2N1bWVudCkKICAgICAgICAg
JiYgZnJhbWVMb2FkZXIuaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCkKICAgICAgICAgJiYgIWZyYW1l
TG9hZGVyLnF1aWNrUmVkaXJlY3RDb21pbmcoKQpAQCAtMzU3LDggKzM0OCw4IEBAIGJvb2wgUGFn
ZUNhY2hlOjpjYW5DYWNoZShQYWdlKiBwYWdlKSBjb25zdAogICAgIC8vIG92ZXIgaXQgYWdhaW4g
d2hlbiB3ZSBsZWF2ZSB0aGF0IHBhZ2UuCiAgICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IHBh
Z2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmxvYWRUeXBlKCk7CiAgICAgCi0gICAgcmV0dXJuIG1f
Y2FwYWNpdHkgPiAwCi0gICAgICAgICYmIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUo
JnBhZ2UtPm1haW5GcmFtZSgpKQorICAgIHJldHVybiBtX21heFNpemUgPiAwCisgICAgICAgICYm
IGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUocGFnZS0+bWFpbkZyYW1lKCkpCiAgICAg
ICAgICYmIHBhZ2UtPnNldHRpbmdzKCkudXNlc1BhZ2VDYWNoZSgpCiAjaWYgRU5BQkxFKERFVklD
RV9PUklFTlRBVElPTikgJiYgIVBMQVRGT1JNKElPUykKICAgICAgICAgJiYgIURldmljZU1vdGlv
bkNvbnRyb2xsZXI6OmlzQWN0aXZlQXQocGFnZSkKQEAgLTM3MywyNyArMzY0LDI0IEBAIGJvb2wg
UGFnZUNhY2hlOjpjYW5DYWNoZShQYWdlKiBwYWdlKSBjb25zdAogICAgICAgICAgICAgfHwgbG9h
ZFR5cGUgPT0gRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKIH0KIAotdm9pZCBQ
YWdlQ2FjaGU6OnBydW5lVG9DYXBhY2l0eU5vdyhpbnQgY2FwYWNpdHksIFBydW5pbmdSZWFzb24g
cHJ1bmluZ1JlYXNvbikKK3ZvaWQgUGFnZUNhY2hlOjpwcnVuZVRvU2l6ZU5vdyh1bnNpZ25lZCBz
aXplLCBQcnVuaW5nUmVhc29uIHBydW5pbmdSZWFzb24pCiB7Ci0gICAgVGVtcG9yYXJ5Q2hhbmdl
PGludD4obV9jYXBhY2l0eSwgc3RkOjptYXgoY2FwYWNpdHksIDApKTsKKyAgICBUZW1wb3JhcnlD
aGFuZ2U8dW5zaWduZWQ+KG1fbWF4U2l6ZSwgc2l6ZSk7CiAgICAgcHJ1bmUocHJ1bmluZ1JlYXNv
bik7CiB9CiAKLXZvaWQgUGFnZUNhY2hlOjpzZXRDYXBhY2l0eShpbnQgY2FwYWNpdHkpCit2b2lk
IFBhZ2VDYWNoZTo6c2V0TWF4U2l6ZSh1bnNpZ25lZCBtYXhTaXplKQogewotICAgIEFTU0VSVChj
YXBhY2l0eSA+PSAwKTsKLSAgICBtX2NhcGFjaXR5ID0gc3RkOjptYXgoY2FwYWNpdHksIDApOwot
CisgICAgbV9tYXhTaXplID0gbWF4U2l6ZTsKICAgICBwcnVuZShQcnVuaW5nUmVhc29uOjpOb25l
KTsKIH0KIAotaW50IFBhZ2VDYWNoZTo6ZnJhbWVDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBQYWdl
Q2FjaGU6OmZyYW1lQ291bnQoKSBjb25zdAogewotICAgIGludCBmcmFtZUNvdW50ID0gMDsKLSAg
ICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bV9uZXh0KSB7Ci0gICAgICAgICsrZnJhbWVDb3VudDsKLSAgICAgICAgQVNTRVJU
KGN1cnJlbnQtPm1fY2FjaGVkUGFnZSk7Ci0gICAgICAgIGZyYW1lQ291bnQgKz0gY3VycmVudC0+
bV9jYWNoZWRQYWdlLT5jYWNoZWRNYWluRnJhbWUoKS0+ZGVzY2VuZGFudEZyYW1lQ291bnQoKTsK
KyAgICB1bnNpZ25lZCBmcmFtZUNvdW50ID0gbV9pdGVtcy5zaXplKCk7CisgICAgZm9yIChhdXRv
JiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBBU1NFUlQoaXRlbS0+bV9jYWNoZWRQYWdlKTsK
KyAgICAgICAgZnJhbWVDb3VudCArPSBpdGVtLT5tX2NhY2hlZFBhZ2UtPmNhY2hlZE1haW5GcmFt
ZSgpLT5kZXNjZW5kYW50RnJhbWVDb3VudCgpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gZnJh
bWVDb3VudDsKQEAgLTQwMSwyNiArMzg5LDI2IEBAIGludCBQYWdlQ2FjaGU6OmZyYW1lQ291bnQo
KSBjb25zdAogCiB2b2lkIFBhZ2VDYWNoZTo6bWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJl
Y2FsYygpCiB7Ci0gICAgZm9yIChIaXN0b3J5SXRlbSogY3VycmVudCA9IG1faGVhZDsgY3VycmVu
dDsgY3VycmVudCA9IGN1cnJlbnQtPm1fbmV4dCkgewotICAgICAgICBBU1NFUlQoY3VycmVudC0+
bV9jYWNoZWRQYWdlKTsKLSAgICAgICAgY3VycmVudC0+bV9jYWNoZWRQYWdlLT5tYXJrRm9yVmlz
aXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1faXRlbXMpIHsK
KyAgICAgICAgQVNTRVJUKGl0ZW0tPm1fY2FjaGVkUGFnZSk7CisgICAgICAgIGl0ZW0tPm1fY2Fj
aGVkUGFnZS0+bWFya0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CiAKLXZv
aWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoUGFnZSogcGFnZSkKK3Zv
aWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoUGFnZSYgcGFnZSkKIHsK
LSAgICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJyZW50OyBjdXJyZW50
ID0gY3VycmVudC0+bV9uZXh0KSB7Ci0gICAgICAgIENhY2hlZFBhZ2UmIGNhY2hlZFBhZ2UgPSAq
Y3VycmVudC0+bV9jYWNoZWRQYWdlOwotICAgICAgICBpZiAoJnBhZ2UtPm1haW5GcmFtZSgpID09
ICZjYWNoZWRQYWdlLmNhY2hlZE1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lKCkpCisgICAgZm9y
IChhdXRvJiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBDYWNoZWRQYWdlJiBjYWNoZWRQYWdl
ID0gKml0ZW0tPm1fY2FjaGVkUGFnZTsKKyAgICAgICAgaWYgKCZwYWdlLm1haW5GcmFtZSgpID09
ICZjYWNoZWRQYWdlLmNhY2hlZE1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lKCkpCiAgICAgICAg
ICAgICBjYWNoZWRQYWdlLm1hcmtGb3JGdWxsU3R5bGVSZWNhbGMoKTsKICAgICB9CiB9CiAKLXZv
aWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQoUGFnZSogcGFnZSkK
K3ZvaWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQoUGFnZSYgcGFn
ZSkKIHsKLSAgICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+bV9uZXh0KSB7Ci0gICAgICAgIENhY2hlZFBhZ2UmIGNhY2hlZFBh
Z2UgPSAqY3VycmVudC0+bV9jYWNoZWRQYWdlOwotICAgICAgICBpZiAoJnBhZ2UtPm1haW5GcmFt
ZSgpID09ICZjYWNoZWRQYWdlLmNhY2hlZE1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lKCkpCisg
ICAgZm9yIChhdXRvJiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBDYWNoZWRQYWdlJiBjYWNo
ZWRQYWdlID0gKml0ZW0tPm1fY2FjaGVkUGFnZTsKKyAgICAgICAgaWYgKCZwYWdlLm1haW5GcmFt
ZSgpID09ICZjYWNoZWRQYWdlLmNhY2hlZE1haW5GcmFtZSgpLT52aWV3KCktPmZyYW1lKCkpCiAg
ICAgICAgICAgICBjYWNoZWRQYWdlLm1hcmtGb3JEZXZpY2VTY2FsZUNoYW5nZWQoKTsKICAgICB9
CiB9CkBAIC00MjgsOSArNDE2LDkgQEAgdm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckRldmlj
ZVNjYWxlQ2hhbmdlZChQYWdlKiBwYWdlKQogI2lmIEVOQUJMRShWSURFT19UUkFDSykKIHZvaWQg
UGFnZUNhY2hlOjptYXJrUGFnZXNGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKIHsKLSAg
ICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bV9uZXh0KSB7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50LT5tX2NhY2hlZFBhZ2Up
OwotICAgICAgICBjdXJyZW50LT5tX2NhY2hlZFBhZ2UtPm1hcmtGb3JDYXB0aW9uUHJlZmVyZW5j
ZXNDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBB
U1NFUlQoaXRlbS0+bV9jYWNoZWRQYWdlKTsKKyAgICAgICAgaXRlbS0+bV9jYWNoZWRQYWdlLT5t
YXJrRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogICAgIH0KIH0KICNlbmRpZgpAQCAt
NDQyLDcgKzQzMCw3IEBAIHN0YXRpYyBTdHJpbmcgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xv
Z2dpbmdLZXkoUHJ1bmluZ1JlYXNvbiBwcnVuaW5nUmVhc29uKQogICAgICAgICByZXR1cm4gRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpwcnVuZWREdWVUb01lbW9yeVByZXNzdXJlS2V5KCk7CiAgICAg
Y2FzZSBQcnVuaW5nUmVhc29uOjpQcm9jZXNzU3VzcGVuZGVkOgogICAgICAgICByZXR1cm4gRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpwcnVuZWREdWVUb1Byb2Nlc3NTdXNwZW5kZWQoKTsKLSAgICBj
YXNlIFBydW5pbmdSZWFzb246OlJlYWNoZWRDYXBhY2l0eToKKyAgICBjYXNlIFBydW5pbmdSZWFz
b246OlJlYWNoZWRNYXhTaXplOgogICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
OjpwcnVuZWREdWVUb0NhcGFjaXR5UmVhY2hlZCgpOwogICAgIGNhc2UgUHJ1bmluZ1JlYXNvbjo6
Tm9uZToKICAgICAgICAgYnJlYWs7CkBAIC00NTEsNDUgKzQzOSwzMyBAQCBzdGF0aWMgU3RyaW5n
IHBydW5pbmdSZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5KFBydW5pbmdSZWFzb24gcHJ1bmlu
Z1JlYXNvbikKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotdm9pZCBQYWdlQ2FjaGU6
OmFkZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtLCBQYWdlJiBwYWdlKQordm9pZCBQ
YWdlQ2FjaGU6OmFkZChIaXN0b3J5SXRlbSYgaXRlbSwgUGFnZSYgcGFnZSkKIHsKLSAgICBBU1NF
UlQocHJwSXRlbSk7CiAgICAgQVNTRVJUKGNhbkNhY2hlKCZwYWdlKSk7Ci0gICAgCi0gICAgSGlz
dG9yeUl0ZW0qIGl0ZW0gPSBwcnBJdGVtLmxlYWtSZWYoKTsgLy8gQmFsYW5jZWQgaW4gcmVtb3Zl
KCkuCiAKICAgICAvLyBSZW1vdmUgc3RhbGUgY2FjaGUgZW50cnkgaWYgbmVjZXNzYXJ5LgotICAg
IGlmIChpdGVtLT5tX2NhY2hlZFBhZ2UpCi0gICAgICAgIHJlbW92ZShpdGVtKTsKKyAgICByZW1v
dmUoaXRlbSk7CiAKLSAgICBpdGVtLT5tX2NhY2hlZFBhZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENh
Y2hlZFBhZ2U+KHBhZ2UpOwotICAgIGl0ZW0tPm1fcHJ1bmluZ1JlYXNvbiA9IFBydW5pbmdSZWFz
b246Ok5vbmU7Ci0gICAgYWRkVG9MUlVMaXN0KGl0ZW0pOwotICAgICsrbV9zaXplOworICAgIGl0
ZW0ubV9jYWNoZWRQYWdlID0gc3RkOjptYWtlX3VuaXF1ZTxDYWNoZWRQYWdlPihwYWdlKTsKKyAg
ICBpdGVtLm1fcHJ1bmluZ1JlYXNvbiA9IFBydW5pbmdSZWFzb246Ok5vbmU7CisgICAgbV9pdGVt
cy5hZGQoJml0ZW0pOwogICAgIAotICAgIHBydW5lKFBydW5pbmdSZWFzb246OlJlYWNoZWRDYXBh
Y2l0eSk7CisgICAgcHJ1bmUoUHJ1bmluZ1JlYXNvbjo6UmVhY2hlZE1heFNpemUpOwogfQogCi1z
dGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gUGFnZUNhY2hlOjp0YWtlKEhpc3RvcnlJdGVtKiBp
dGVtLCBQYWdlKiBwYWdlKQorc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IFBhZ2VDYWNoZTo6
dGFrZShIaXN0b3J5SXRlbSYgaXRlbSwgUGFnZSogcGFnZSkKIHsKLSAgICBpZiAoIWl0ZW0pCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+
IGNhY2hlZFBhZ2UgPSBXVEY6Om1vdmUoaXRlbS0+bV9jYWNoZWRQYWdlKTsKLQotICAgIHJlbW92
ZUZyb21MUlVMaXN0KGl0ZW0pOwotICAgIC0tbV9zaXplOwotCi0gICAgaXRlbS0+ZGVyZWYoKTsg
Ly8gQmFsYW5jZWQgaW4gYWRkKCkuCi0KLSAgICBpZiAoIWNhY2hlZFBhZ2UpIHsKLSAgICAgICAg
aWYgKGl0ZW0tPm1fcHJ1bmluZ1JlYXNvbiAhPSBQcnVuaW5nUmVhc29uOjpOb25lKQotICAgICAg
ICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKHBhZ2UsIHBydW5pbmdS
ZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5KGl0ZW0tPm1fcHJ1bmluZ1JlYXNvbikpOworICAg
IGlmICghaXRlbS5tX2NhY2hlZFBhZ2UpIHsKKyAgICAgICAgaWYgKGl0ZW0ubV9wcnVuaW5nUmVh
c29uICE9IFBydW5pbmdSZWFzb246Ok5vbmUpCisgICAgICAgICAgICBsb2dQYWdlQ2FjaGVGYWls
dXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dp
bmdLZXkoaXRlbS5tX3BydW5pbmdSZWFzb24pKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCisgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBXVEY6
Om1vdmUoaXRlbS5tX2NhY2hlZFBhZ2UpOworICAgIG1faXRlbXMucmVtb3ZlKCZpdGVtKTsKKwog
ICAgIGlmIChjYWNoZWRQYWdlLT5oYXNFeHBpcmVkKCkpIHsKLSAgICAgICAgTE9HKFBhZ2VDYWNo
ZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVj
YXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIGl0ZW0tPnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBm
b3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhw
aXJlZCIsIGl0ZW0udXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBsb2dQ
YWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpleHBpcmVkS2V5KCkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC00
OTcsNzggKzQ3Myw0MSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gUGFnZUNhY2hlOjp0
YWtlKEhpc3RvcnlJdGVtKiBpdGVtLCBQYWdlKiBwYWdlKQogICAgIHJldHVybiBjYWNoZWRQYWdl
OwogfQogCi1DYWNoZWRQYWdlKiBQYWdlQ2FjaGU6OmdldChIaXN0b3J5SXRlbSogaXRlbSwgUGFn
ZSogcGFnZSkKK0NhY2hlZFBhZ2UqIFBhZ2VDYWNoZTo6Z2V0KEhpc3RvcnlJdGVtJiBpdGVtLCBQ
YWdlKiBwYWdlKSBjb25zdAogewotICAgIGlmICghaXRlbSkKKyAgICBDYWNoZWRQYWdlKiBjYWNo
ZWRQYWdlID0gaXRlbS5tX2NhY2hlZFBhZ2UuZ2V0KCk7CisgICAgaWYgKCFjYWNoZWRQYWdlKSB7
CisgICAgICAgIGlmIChpdGVtLm1fcHJ1bmluZ1JlYXNvbiAhPSBQcnVuaW5nUmVhc29uOjpOb25l
KQorICAgICAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKHBhZ2Us
IHBydW5pbmdSZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5KGl0ZW0ubV9wcnVuaW5nUmVhc29u
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KIAotICAgIGlmIChDYWNoZWRQYWdl
KiBjYWNoZWRQYWdlID0gaXRlbS0+bV9jYWNoZWRQYWdlLmdldCgpKSB7Ci0gICAgICAgIGlmICgh
Y2FjaGVkUGFnZS0+aGFzRXhwaXJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFBhZ2U7
Ci0gICAgICAgIAotICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZv
ciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBp
cmVkIiwgaXRlbS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIGlmIChjYWNo
ZWRQYWdlLT5oYXNFeHBpcmVkKCkpIHsKKyAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0
b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBl
bnRyeSBoYXMgZXhwaXJlZCIsIGl0ZW0udXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwog
ICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpleHBpcmVkS2V5KCkpOwogICAgICAgICBQYWdlQ2FjaGU6OnNoYXJl
ZCgpLnJlbW92ZShpdGVtKTsKLSAgICB9IGVsc2UgaWYgKGl0ZW0tPm1fcHJ1bmluZ1JlYXNvbiAh
PSBQcnVuaW5nUmVhc29uOjpOb25lKQotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25v
c3RpY01lc3NhZ2UocGFnZSwgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoaXRl
bS0+bV9wcnVuaW5nUmVhc29uKSk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBjYWNoZWRQYWdlOwogfQogCi12b2lkIFBh
Z2VDYWNoZTo6cmVtb3ZlKEhpc3RvcnlJdGVtKiBpdGVtKQordm9pZCBQYWdlQ2FjaGU6OnJlbW92
ZShIaXN0b3J5SXRlbSYgaXRlbSkKIHsKICAgICAvLyBTYWZlbHkgaWdub3JlIGF0dGVtcHRzIHRv
IHJlbW92ZSBpdGVtcyBub3QgaW4gdGhlIGNhY2hlLgotICAgIGlmICghaXRlbSB8fCAhaXRlbS0+
bV9jYWNoZWRQYWdlKQorICAgIGlmICghaXRlbS5tX2NhY2hlZFBhZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGl0ZW0tPm1fY2FjaGVkUGFnZSA9IG51bGxwdHI7Ci0gICAgcmVtb3ZlRnJvbUxS
VUxpc3QoaXRlbSk7Ci0gICAgLS1tX3NpemU7Ci0KLSAgICBpdGVtLT5kZXJlZigpOyAvLyBCYWxh
bmNlZCBpbiBhZGQoKS4KKyAgICBpdGVtLm1fY2FjaGVkUGFnZSA9IG51bGxwdHI7CisgICAgbV9p
dGVtcy5yZW1vdmUoJml0ZW0pOwogfQogCiB2b2lkIFBhZ2VDYWNoZTo6cHJ1bmUoUHJ1bmluZ1Jl
YXNvbiBwcnVuaW5nUmVhc29uKQogewotICAgIHdoaWxlIChtX3NpemUgPiBtX2NhcGFjaXR5KSB7
Ci0gICAgICAgIEFTU0VSVChtX3RhaWwgJiYgbV90YWlsLT5tX2NhY2hlZFBhZ2UpOwotICAgICAg
ICBtX3RhaWwtPm1fcHJ1bmluZ1JlYXNvbiA9IHBydW5pbmdSZWFzb247Ci0gICAgICAgIHJlbW92
ZShtX3RhaWwpOwotICAgIH0KLX0KLQotdm9pZCBQYWdlQ2FjaGU6OmFkZFRvTFJVTGlzdChIaXN0
b3J5SXRlbSogaXRlbSkKLXsKLSAgICBpdGVtLT5tX25leHQgPSBtX2hlYWQ7Ci0gICAgaXRlbS0+
bV9wcmV2ID0gMDsKLQotICAgIGlmIChtX2hlYWQpIHsKLSAgICAgICAgQVNTRVJUKG1fdGFpbCk7
Ci0gICAgICAgIG1faGVhZC0+bV9wcmV2ID0gaXRlbTsKLSAgICB9IGVsc2UgewotICAgICAgICBB
U1NFUlQoIW1fdGFpbCk7Ci0gICAgICAgIG1fdGFpbCA9IGl0ZW07Ci0gICAgfQotCi0gICAgbV9o
ZWFkID0gaXRlbTsKLX0KLQotdm9pZCBQYWdlQ2FjaGU6OnJlbW92ZUZyb21MUlVMaXN0KEhpc3Rv
cnlJdGVtKiBpdGVtKQotewotICAgIGlmICghaXRlbS0+bV9uZXh0KSB7Ci0gICAgICAgIEFTU0VS
VChpdGVtID09IG1fdGFpbCk7Ci0gICAgICAgIG1fdGFpbCA9IGl0ZW0tPm1fcHJldjsKLSAgICB9
IGVsc2UgewotICAgICAgICBBU1NFUlQoaXRlbSAhPSBtX3RhaWwpOwotICAgICAgICBpdGVtLT5t
X25leHQtPm1fcHJldiA9IGl0ZW0tPm1fcHJldjsKLSAgICB9Ci0KLSAgICBpZiAoIWl0ZW0tPm1f
cHJldikgewotICAgICAgICBBU1NFUlQoaXRlbSA9PSBtX2hlYWQpOwotICAgICAgICBtX2hlYWQg
PSBpdGVtLT5tX25leHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGl0ZW0gIT0gbV9o
ZWFkKTsKLSAgICAgICAgaXRlbS0+bV9wcmV2LT5tX25leHQgPSBpdGVtLT5tX25leHQ7CisgICAg
d2hpbGUgKHBhZ2VDb3VudCgpID4gbWF4U2l6ZSgpKSB7CisgICAgICAgIGF1dG8mIG9sZGVzdEl0
ZW0gPSBtX2l0ZW1zLmZpcnN0KCk7CisgICAgICAgIG9sZGVzdEl0ZW0tPm1fY2FjaGVkUGFnZSA9
IG51bGxwdHI7CisgICAgICAgIG9sZGVzdEl0ZW0tPm1fcHJ1bmluZ1JlYXNvbiA9IHBydW5pbmdS
ZWFzb247CisgICAgICAgIG1faXRlbXMucmVtb3ZlRmlyc3QoKTsKICAgICB9CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCmluZGV4IGMzMTBkNGUyODFiNGM5OTI5YWRhNjk5YTJmZjg5
ZDNmNDQ5NTk3ZmQuLjQwYTc0MGZjZTFlMDg5YTdiYTJkZjMxMTM5MGIwZTRkNWI2NDcxYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDc1ICsyOCw2NCBAQAogCiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENhY2hlZFBhZ2U7
Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgSGlzdG9yeUl0ZW07Ci0gICAgY2xhc3MgUGFn
ZTsKK2NsYXNzIENhY2hlZFBhZ2U7CitjbGFzcyBGcmFtZTsKK2NsYXNzIEhpc3RvcnlJdGVtOwor
Y2xhc3MgUGFnZTsKIAotICAgIGVudW0gY2xhc3MgUHJ1bmluZ1JlYXNvbiB7IE5vbmUsIFByb2Nl
c3NTdXNwZW5kZWQsIE1lbW9yeVByZXNzdXJlLCBSZWFjaGVkQ2FwYWNpdHkgfTsKLSAgICAKLSAg
ICBjbGFzcyBQYWdlQ2FjaGUgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlQ2Fj
aGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIEZ1
bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIHBhZ2UgY2FjaGUuCi0gICAgICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBQYWdlQ2FjaGUmIHNoYXJlZCgpOwotICAgICAgICAKLSAgICAgICAgYm9v
bCBjYW5DYWNoZShQYWdlKikgY29uc3Q7CitlbnVtIGNsYXNzIFBydW5pbmdSZWFzb24geyBOb25l
LCBQcm9jZXNzU3VzcGVuZGVkLCBNZW1vcnlQcmVzc3VyZSwgUmVhY2hlZE1heFNpemUgfTsKIAot
ICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENhcGFjaXR5KGludCk7IC8vIG51bWJlciBv
ZiBwYWdlcyB0byBjYWNoZQotICAgICAgICBpbnQgY2FwYWNpdHkoKSB7IHJldHVybiBtX2NhcGFj
aXR5OyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFkZChQYXNzUmVmUHRyPEhpc3RvcnlJdGVt
PiwgUGFnZSYpOyAvLyBQcnVuZXMgaWYgY2FwYWNpdHkoKSBpcyBleGNlZWRlZC4KLSAgICAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoSGlzdG9yeUl0ZW0qKTsKLSAgICAgICAgQ2FjaGVk
UGFnZSogZ2V0KEhpc3RvcnlJdGVtKiwgUGFnZSopOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2FjaGVkUGFnZT4gdGFrZShIaXN0b3J5SXRlbSosIFBhZ2UqKTsKK2NsYXNzIFBhZ2VDYWNoZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZUNhY2hlKTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgLy8gRnVuY3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwgcGFn
ZSBjYWNoZS4KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFnZUNhY2hlJiBzaGFyZWQoKTsK
IAotICAgICAgICBpbnQgcGFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAg
ICAgIFdFQkNPUkVfRVhQT1JUIGludCBmcmFtZUNvdW50KCkgY29uc3Q7CisgICAgYm9vbCBjYW5D
YWNoZShQYWdlKikgY29uc3Q7CiAKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYXJrUGFn
ZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgLy8gVXNlZCB3aGVuIG1lbW9yeSBp
cyBsb3cgdG8gcHJ1bmUgc29tZSBjYWNoZWQgcGFnZXMuCisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBwcnVuZVRvU2l6ZU5vdyh1bnNpZ25lZCBtYXhTaXplLCBQcnVuaW5nUmVhc29uKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldE1heFNpemUodW5zaWduZWQpOyAvLyBudW1iZXIgb2YgcGFn
ZXMgdG8gY2FjaGUuCisgICAgdW5zaWduZWQgbWF4U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
U2l6ZTsgfQogCi0gICAgICAgIC8vIFdpbGwgbWFyayBhbGwgY2FjaGVkIHBhZ2VzIGFzc29jaWF0
ZWQgd2l0aCB0aGUgZ2l2ZW4gcGFnZSBhcyBuZWVkaW5nIHN0eWxlIHJlY2FsYy4KLSAgICAgICAg
dm9pZCBtYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoUGFnZSopOworICAgIHZvaWQgYWRkKEhp
c3RvcnlJdGVtJiwgUGFnZSYpOyAvLyBQcnVuZXMgaWYgbWF4U2l6ZSgpIGlzIGV4Y2VlZGVkLgor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlKEhpc3RvcnlJdGVtJik7CisgICAgQ2FjaGVk
UGFnZSogZ2V0KEhpc3RvcnlJdGVtJiwgUGFnZSopIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWNoZWRQYWdlPiB0YWtlKEhpc3RvcnlJdGVtJiwgUGFnZSopOwogCi0gICAgICAgIC8vIFVz
ZWQgd2hlbiBtZW1vcnkgaXMgbG93IHRvIHBydW5lIHNvbWUgY2FjaGVkIHBhZ2VzLgotICAgICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lVG9DYXBhY2l0eU5vdyhpbnQgY2FwYWNpdHksIFBy
dW5pbmdSZWFzb24pOworICAgIHVuc2lnbmVkIHBhZ2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXRlbXMuc2l6ZSgpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgZnJhbWVDb3VudCgp
IGNvbnN0OwogCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtYXJrUGFnZXNGb3JWaXNpdGVkTGlu
a1N0eWxlUmVjYWxjKCk7CisgICAgLy8gV2lsbCBtYXJrIGFsbCBjYWNoZWQgcGFnZXMgYXNzb2Np
YXRlZCB3aXRoIHRoZSBnaXZlbiBwYWdlIGFzIG5lZWRpbmcgc3R5bGUgcmVjYWxjLgorICAgIHZv
aWQgbWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKFBhZ2UmKTsKKyAgICB2b2lkIG1hcmtQYWdl
c0ZvckRldmljZVNjYWxlQ2hhbmdlZChQYWdlJik7CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQot
ICAgICAgICB2b2lkIG1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAg
ICB2b2lkIG1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKICNlbmRpZgog
Ci0gICAgICAgIGJvb2wgc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXM7IH0KLSAgICAgICAgdm9pZCBzZXRTaG91bGRDbGVh
ckJhY2tpbmdTdG9yZXMoYm9vbCBmbGFnKSB7IG1fc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzID0g
ZmxhZzsgfQotICAgICAgICB2b2lkIG1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZChQYWdl
Kik7CisgICAgYm9vbCBzaG91bGRDbGVhckJhY2tpbmdTdG9yZXMoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZENsZWFyQmFja2luZ1N0b3JlczsgfQorICAgIHZvaWQgc2V0U2hvdWxkQ2xlYXJCYWNr
aW5nU3RvcmVzKGJvb2wgZmxhZykgeyBtX3Nob3VsZENsZWFyQmFja2luZ1N0b3JlcyA9IGZsYWc7
IH0KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFBhZ2VDYWNoZSgpOyAvLyBVc2Ugc2hhcmVkKCkg
aW5zdGVhZC4KLSAgICAgICAgflBhZ2VDYWNoZSgpOyAvLyBOb3QgaW1wbGVtZW50ZWQgdG8gbWFr
ZSBzdXJlIG5vYm9keSBhY2NpZGVudGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBu
b3QgZGVsZXRlIHNpbmdsZXRvbnMuCi0gICAgICAgIAotICAgICAgICBzdGF0aWMgYm9vbCBjYW5D
YWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKEZyYW1lKik7Citwcml2YXRlOgorICAgIFBhZ2VD
YWNoZSgpID0gZGVmYXVsdDsgLy8gVXNlIHNoYXJlZCgpIGluc3RlYWQuCisgICAgflBhZ2VDYWNo
ZSgpID0gZGVsZXRlOyAvLyBNYWtlIHN1cmUgbm9ib2R5IGFjY2lkZW50YWxseSBjYWxscyBkZWxl
dGUgLS0gV2ViQ29yZSBkb2VzIG5vdCBkZWxldGUgc2luZ2xldG9ucy4KIAotICAgICAgICB2b2lk
IGFkZFRvTFJVTGlzdChIaXN0b3J5SXRlbSopOyAvLyBBZGRzIHRvIHRoZSBoZWFkIG9mIHRoZSBs
aXN0LgotICAgICAgICB2b2lkIHJlbW92ZUZyb21MUlVMaXN0KEhpc3RvcnlJdGVtKik7CisgICAg
c3RhdGljIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSYpOwogCi0g
ICAgICAgIHZvaWQgcHJ1bmUoUHJ1bmluZ1JlYXNvbik7CisgICAgdm9pZCBwcnVuZShQcnVuaW5n
UmVhc29uKTsKIAotICAgICAgICBpbnQgbV9jYXBhY2l0eTsKLSAgICAgICAgaW50IG1fc2l6ZTsK
KyAgICBMaXN0SGFzaFNldDxSZWZQdHI8SGlzdG9yeUl0ZW0+PiBtX2l0ZW1zOworICAgIHVuc2ln
bmVkIG1fbWF4U2l6ZSB7MH07CisgICAgYm9vbCBtX3Nob3VsZENsZWFyQmFja2luZ1N0b3JlcyB7
ZmFsc2V9OwogCi0gICAgICAgIC8vIExSVSBMaXN0Ci0gICAgICAgIEhpc3RvcnlJdGVtKiBtX2hl
YWQ7Ci0gICAgICAgIEhpc3RvcnlJdGVtKiBtX3RhaWw7Ci0gICAgICAgIAotICAgICAgICBib29s
IG1fc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzOwotCi0gICAgICAgIGZyaWVuZCBjbGFzcyBXVEY6
Ok5ldmVyRGVzdHJveWVkPFBhZ2VDYWNoZT47Ci0gICAgfTsKKyAgICBmcmllbmQgY2xhc3MgV1RG
OjpOZXZlckRlc3Ryb3llZDxQYWdlQ2FjaGU+OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA5MGI1YTBhMzNlYzZi
OGNiZmExZDU5MWE2ZWY2ZjA5MjBkNGQ3ZGM0Li45NWZlZjYxZTA2MGIyNmU4MDA4ZDg0NTJiNmU3
MjI3MWQ5NTcwYWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTky
MSw3ICs5MjEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRgogICAgICAgICBIaXN0b3J5SXRl
bSogY2hpbGRJdGVtID0gcGFyZW50SXRlbS0+Y2hpbGRJdGVtV2l0aFRhcmdldChjaGlsZEZyYW1l
LT50cmVlKCkudW5pcXVlTmFtZSgpKTsKICAgICAgICAgaWYgKGNoaWxkSXRlbSkgewogICAgICAg
ICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkubV9yZXF1ZXN0ZWRIaXN0b3J5SXRlbSA9IGNoaWxk
SXRlbTsKLSAgICAgICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLmxvYWREaWZmZXJlbnREb2N1
bWVudEl0ZW0oY2hpbGRJdGVtLCBsb2FkVHlwZSgpLCBNYXlBdHRlbXB0Q2FjaGVPbmx5TG9hZEZv
ckZvcm1TdWJtaXNzaW9uSXRlbSk7CisgICAgICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5s
b2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKCpjaGlsZEl0ZW0sIGxvYWRUeXBlKCksIE1heUF0dGVt
cHRDYWNoZU9ubHlMb2FkRm9yRm9ybVN1Ym1pc3Npb25JdGVtKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KQEAgLTE3NDAsOCArMTc0MCw4IEBAIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0KG1fZnJh
bWUpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2U7Ci0gICAg
aWYgKG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlKQotICAgICAgICBjYWNoZWRQYWdlID0gUGFnZUNh
Y2hlOjpzaGFyZWQoKS50YWtlKGhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKSwgbV9mcmFtZS5w
YWdlKCkpOworICAgIGlmIChtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSAmJiBoaXN0b3J5KCkucHJv
dmlzaW9uYWxJdGVtKCkpCisgICAgICAgIGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnRha2UoKmhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOwogCiAg
ICAgTE9HKFBhZ2VDYWNoZSwgIldlYkNvcmVMb2FkaW5nICVzOiBBYm91dCB0byBjb21taXQgcHJv
dmlzaW9uYWwgbG9hZCBmcm9tIHByZXZpb3VzIFVSTCAnJXMnIHRvIG5ldyBVUkwgJyVzJyIsIG1f
ZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLAogICAgICAg
ICBtX2ZyYW1lLmRvY3VtZW50KCkgPyBtX2ZyYW1lLmRvY3VtZW50KCktPnVybCgpLnN0cmluZ0Nl
bnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIiwKQEAgLTE3NTgsMTEg
KzE3NTgsMTEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKICAg
ICAgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlBydW5pbmcgcGFnZSBjYWNoZSBiZWNhdXNl
IHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBhdDogJXMiLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKICAg
ICAgICAgICAgIExPRyhQYWdlQ2FjaGUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgdG8gMCBkdWUgdG8g
bWVtb3J5IHByZXNzdXJlIik7CiAgICAgICAgICAgICAvLyBEb24ndCBjYWNoZSBhbnkgcGFnZSBp
ZiB3ZSBhcmUgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgotICAgICAgICAgICAgUGFnZUNhY2hlOjpz
aGFyZWQoKS5wcnVuZVRvQ2FwYWNpdHlOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1
cmUpOworICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdygwLCBQ
cnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc3lzdGVt
TWVtb3J5TGV2ZWwoKSA8PSBtZW1vcnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUpIHsK
ICAgICAgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlBydW5pbmcgcGFnZSBjYWNoZSBiZWNh
dXNlIHN5c3RlbSBtZW1vcnkgbGV2ZWwgaXMgJWQgYXQ6ICVzIiwgc3lzdGVtTWVtb3J5TGV2ZWwo
KSwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CiAgICAgICAgICAgICBMT0coUGFnZUNhY2hlLCAiUHJ1
bmluZyBwYWdlIGNhY2hlIHRvICVkIGR1ZSB0byBsb3cgbWVtb3J5IChsZXZlbCAlZCBsZXNzIG9y
IGVxdWFsIHRvICVkIHRocmVzaG9sZCkiLCBQYWdlQ2FjaGU6OnNoYXJlZCgpLmNhcGFjaXR5KCkg
LyAyLCBzeXN0ZW1NZW1vcnlMZXZlbCgpLCBtZW1vcnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdl
Q2FjaGUpOwotICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvQ2FwYWNpdHlO
b3coUGFnZUNhY2hlOjpzaGFyZWQoKS5jYXBhY2l0eSgpIC8gMiwgUHJ1bmluZ1JlYXNvbjo6TWVt
b3J5UHJlc3N1cmUpOworICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6
ZU5vdyhQYWdlQ2FjaGU6OnNoYXJlZCgpLm1heFNpemUoKSAvIDIsIFBydW5pbmdSZWFzb246Ok1l
bW9yeVByZXNzdXJlKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtMTc3MSw4ICsxNzcx
LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKIAogICAgIC8v
IENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNhY2hlIHRoZSBwYWdlIHdlIGFyZSBuYXZpZ2F0
aW5nIGF3YXkgZnJvbSBpbnRvIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAgICAgLy8gV2UgYXJl
IGRvaW5nIHRoaXMgaGVyZSBiZWNhdXNlIHdlIGtub3cgZm9yIHN1cmUgdGhhdCBhIG5ldyBwYWdl
IGlzIGFib3V0IHRvIGJlIGxvYWRlZC4KLSAgICBIaXN0b3J5SXRlbSogaXRlbSA9IGhpc3Rvcnko
KS5jdXJyZW50SXRlbSgpOwotICAgIGlmICghbV9mcmFtZS50cmVlKCkucGFyZW50KCkgJiYgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5jYW5DYWNoZShtX2ZyYW1lLnBhZ2UoKSkgJiYgIWl0ZW0tPmlzSW5Q
YWdlQ2FjaGUoKSkKKyAgICBIaXN0b3J5SXRlbSYgaXRlbSA9ICpoaXN0b3J5KCkuY3VycmVudEl0
ZW0oKTsKKyAgICBpZiAoIW1fZnJhbWUudHJlZSgpLnBhcmVudCgpICYmIFBhZ2VDYWNoZTo6c2hh
cmVkKCkuY2FuQ2FjaGUobV9mcmFtZS5wYWdlKCkpICYmICFpdGVtLmlzSW5QYWdlQ2FjaGUoKSkK
ICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5hZGQoaXRlbSwgKm1fZnJhbWUucGFnZSgpKTsK
IAogICAgIGlmIChtX2xvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGU6OlJlcGxhY2UpCkBAIC0zMTI3
LDE0ICszMTI3LDE0IEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6ZmluZEZyYW1lRm9yTmF2aWdhdGlv
bihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIERvY3VtZW50KiBhCiAgICAgICAgIGFjdGl2ZURv
Y3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwogCiAgICAgaWYgKCFhY3RpdmVEb2N1bWVudC0+
Y2FuTmF2aWdhdGUoZnJhbWUpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICByZXR1cm4gZnJhbWU7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmxvYWRT
YW1lRG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQordm9pZCBGcmFtZUxvYWRlcjo6bG9h
ZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0pCiB7Ci0gICAgQVNTRVJUKGl0ZW0t
PmRvY3VtZW50U2VxdWVuY2VOdW1iZXIoKSA9PSBoaXN0b3J5KCkuY3VycmVudEl0ZW0oKS0+ZG9j
dW1lbnRTZXF1ZW5jZU51bWJlcigpKTsKKyAgICBBU1NFUlQoaXRlbS5kb2N1bWVudFNlcXVlbmNl
TnVtYmVyKCkgPT0gaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCktPmRvY3VtZW50U2VxdWVuY2VOdW1i
ZXIoKSk7CiAKICAgICAvLyBTYXZlIHVzZXIgdmlldyBzdGF0ZSB0byB0aGUgY3VycmVudCBoaXN0
b3J5IGl0ZW0gaGVyZSBzaW5jZSB3ZSBkb24ndCBkbyBhIG5vcm1hbCBsb2FkLgogICAgIC8vIEZJ
WE1FOiBEb2VzIGZvcm0gc3RhdGUgbmVlZCB0byBiZSBzYXZlZCBoZXJlIHRvbz8KQEAgLTMxNDIs
MTAgKzMxNDIsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlz
dG9yeUl0ZW0qIGl0ZW0pCiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygp
KQogICAgICAgICB2aWV3LT5zZXRXYXNTY3JvbGxlZEJ5VXNlcihmYWxzZSk7CiAKLSAgICBoaXN0
b3J5KCkuc2V0Q3VycmVudEl0ZW0oaXRlbSk7CisgICAgaGlzdG9yeSgpLnNldEN1cnJlbnRJdGVt
KCZpdGVtKTsKICAgICAgICAgCiAgICAgLy8gbG9hZEluU2FtZURvY3VtZW50KCkgYWN0dWFsbHkg
Y2hhbmdlcyB0aGUgVVJMIGFuZCBub3RpZmllcyBsb2FkIGRlbGVnYXRlcyBvZiBhICJmYWtlIiBs
b2FkCi0gICAgbG9hZEluU2FtZURvY3VtZW50KGl0ZW0tPnVybCgpLCBpdGVtLT5zdGF0ZU9iamVj
dCgpLCBmYWxzZSk7CisgICAgbG9hZEluU2FtZURvY3VtZW50KGl0ZW0udXJsKCksIGl0ZW0uc3Rh
dGVPYmplY3QoKSwgZmFsc2UpOwogCiAgICAgLy8gUmVzdG9yZSB1c2VyIHZpZXcgc3RhdGUgZnJv
bSB0aGUgY3VycmVudCBoaXN0b3J5IGl0ZW0gaGVyZSBzaW5jZSB3ZSBkb24ndCBkbyBhIG5vcm1h
bCBsb2FkLgogICAgIGhpc3RvcnkoKS5yZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUo
KTsKQEAgLTMxNTQsMTAgKzMxNTQsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFNhbWVEb2N1
bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91
bGQgcmVhbGx5IGJlIHNwbGl0IGludG8gYSBjb3VwbGUgcGllY2VzLCBzb21lIG9mCiAvLyB3aGlj
aCBzaG91bGQgYmUgbWV0aG9kcyBvZiBIaXN0b3J5Q29udHJvbGxlciBhbmQgc29tZSBvZiB3aGlj
aCBzaG91bGQgYmUKIC8vIG1ldGhvZHMgb2YgRnJhbWVMb2FkZXIuCi12b2lkIEZyYW1lTG9hZGVy
Ojpsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRU
eXBlIGxvYWRUeXBlLCBGb3JtU3VibWlzc2lvbkNhY2hlTG9hZFBvbGljeSBjYWNoZUxvYWRQb2xp
Y3kpCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJ
dGVtJiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlLCBGb3JtU3VibWlzc2lvbkNhY2hlTG9h
ZFBvbGljeSBjYWNoZUxvYWRQb2xpY3kpCiB7CiAgICAgLy8gUmVtZW1iZXIgdGhpcyBpdGVtIHNv
IHdlIGNhbiB0cmF2ZXJzZSBhbnkgY2hpbGQgaXRlbXMgYXMgY2hpbGQgZnJhbWVzIGxvYWQKLSAg
ICBoaXN0b3J5KCkuc2V0UHJvdmlzaW9uYWxJdGVtKGl0ZW0pOworICAgIGhpc3RvcnkoKS5zZXRQ
cm92aXNpb25hbEl0ZW0oJml0ZW0pOwogCiAgICAgaWYgKENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2Ug
PSBQYWdlQ2FjaGU6OnNoYXJlZCgpLmdldChpdGVtLCBtX2ZyYW1lLnBhZ2UoKSkpIHsKICAgICAg
ICAgYXV0byBkb2N1bWVudExvYWRlciA9IGNhY2hlZFBhZ2UtPmRvY3VtZW50TG9hZGVyKCk7CkBA
IC0zMTY3LDE3ICszMTY3LDE3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1
bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBVUkwgaXRlbVVSTCA9IGl0ZW0tPnVybCgpOwotICAgIFVSTCBp
dGVtT3JpZ2luYWxVUkwgPSBpdGVtLT5vcmlnaW5hbFVSTCgpOworICAgIFVSTCBpdGVtVVJMID0g
aXRlbS51cmwoKTsKKyAgICBVUkwgaXRlbU9yaWdpbmFsVVJMID0gaXRlbS5vcmlnaW5hbFVSTCgp
OwogICAgIFVSTCBjdXJyZW50VVJMOwogICAgIGlmIChkb2N1bWVudExvYWRlcigpKQogICAgICAg
ICBjdXJyZW50VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCk7Ci0gICAgUmVmUHRyPEZvcm1E
YXRhPiBmb3JtRGF0YSA9IGl0ZW0tPmZvcm1EYXRhKCk7CisgICAgUmVmUHRyPEZvcm1EYXRhPiBm
b3JtRGF0YSA9IGl0ZW0uZm9ybURhdGEoKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KGl0ZW1VUkwpOwogCi0gICAgaWYgKCFpdGVtLT5yZWZlcnJlcigpLmlzTnVsbCgpKQotICAgICAg
ICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihpdGVtLT5yZWZlcnJlcigpKTsKKyAgICBpZiAoIWl0
ZW0ucmVmZXJyZXIoKS5pc051bGwoKSkKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIo
aXRlbS5yZWZlcnJlcigpKTsKICAgICAKICAgICAvLyBJZiB0aGlzIHdhcyBhIHJlcG9zdCB0aGF0
IGZhaWxlZCB0aGUgcGFnZSBjYWNoZSwgd2UgbWlnaHQgdHJ5IHRvIHJlcG9zdCB0aGUgZm9ybS4K
ICAgICBOYXZpZ2F0aW9uQWN0aW9uIGFjdGlvbjsKQEAgLTMxODYsOCArMzE4Niw4IEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0s
IEZyYW1lTG9hZFR5cGUgbG9hCiAKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJQT1NU
Iik7CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoZm9ybURhdGEpOwotICAgICAgICByZXF1
ZXN0LnNldEhUVFBDb250ZW50VHlwZShpdGVtLT5mb3JtQ29udGVudFR5cGUoKSk7Ci0gICAgICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlRnJvbVN0cmluZyhpdGVtLT5yZWZlcnJlcigpKTsKKyAgICAgICAgcmVxdWVzdC5zZXRI
VFRQQ29udGVudFR5cGUoaXRlbS5mb3JtQ29udGVudFR5cGUoKSk7CisgICAgICAgIFJlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJv
bVN0cmluZyhpdGVtLnJlZmVycmVyKCkpOwogICAgICAgICBhZGRIVFRQT3JpZ2luSWZOZWVkZWQo
cmVxdWVzdCwgc2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5nKCkpOwogCiAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0byBhZGQgZXh0cmEgZmllbGRzIHRvIHRoZSByZXF1ZXN0IGFmdGVyIHRoZSBPcmlnaW4g
aGVhZGVyIGlzIGFkZGVkIGZvciB0aGUgRm9ybURhdGEgY2FzZS4KQEAgLTMyNDIsMTEgKzMyNDIs
MTEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5
SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2EKIH0KIAogLy8gTG9hZHMgY29udGVudCBpbnRv
IHRoaXMgZnJhbWUsIGFzIHNwZWNpZmllZCBieSBoaXN0b3J5IGl0ZW0KLXZvaWQgRnJhbWVMb2Fk
ZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKQor
dm9pZCBGcmFtZUxvYWRlcjo6bG9hZEl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0sIEZyYW1lTG9hZFR5
cGUgbG9hZFR5cGUpCiB7Ci0gICAgbV9yZXF1ZXN0ZWRIaXN0b3J5SXRlbSA9IGl0ZW07CisgICAg
bV9yZXF1ZXN0ZWRIaXN0b3J5SXRlbSA9ICZpdGVtOwogICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50
SXRlbSA9IGhpc3RvcnkoKS5jdXJyZW50SXRlbSgpOwotICAgIGJvb2wgc2FtZURvY3VtZW50TmF2
aWdhdGlvbiA9IGN1cnJlbnRJdGVtICYmIGl0ZW0tPnNob3VsZERvU2FtZURvY3VtZW50TmF2aWdh
dGlvblRvKGN1cnJlbnRJdGVtKTsKKyAgICBib29sIHNhbWVEb2N1bWVudE5hdmlnYXRpb24gPSBj
dXJyZW50SXRlbSAmJiBpdGVtLnNob3VsZERvU2FtZURvY3VtZW50TmF2aWdhdGlvblRvKGN1cnJl
bnRJdGVtKTsKIAogICAgIGlmIChzYW1lRG9jdW1lbnROYXZpZ2F0aW9uKQogICAgICAgICBsb2Fk
U2FtZURvY3VtZW50SXRlbShpdGVtKTsKQEAgLTMyNjAsMTEgKzMyNjAsMTIgQEAgdm9pZCBGcmFt
ZUxvYWRlcjo6cmV0cnlBZnRlckZhaWxlZENhY2hlT25seU1haW5SZXNvdXJjZUxvYWQoKQogICAg
IEFTU0VSVCghbV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2UpOwogICAgIC8vIFdlIG9ubHkgdXNlIGNh
Y2hlLW9ubHkgbG9hZHMgdG8gYXZvaWQgcmVzdWJtaXR0aW5nIGZvcm1zLgogICAgIEFTU0VSVChp
c0JhY2tGb3J3YXJkTG9hZFR5cGUobV9sb2FkVHlwZSkpOworICAgIEFTU0VSVChoaXN0b3J5KCku
cHJvdmlzaW9uYWxJdGVtKCkpOwogICAgIEFTU0VSVChoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVt
KCktPmZvcm1EYXRhKCkpOwogICAgIEFTU0VSVChoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCkg
PT0gbV9yZXF1ZXN0ZWRIaXN0b3J5SXRlbS5nZXQoKSk7CiAKICAgICBGcmFtZUxvYWRUeXBlIGxv
YWRUeXBlID0gbV9sb2FkVHlwZTsKLSAgICBIaXN0b3J5SXRlbSogaXRlbSA9IGhpc3RvcnkoKS5w
cm92aXNpb25hbEl0ZW0oKTsKKyAgICBIaXN0b3J5SXRlbSYgaXRlbSA9ICpoaXN0b3J5KCkucHJv
dmlzaW9uYWxJdGVtKCk7CiAKICAgICBzdG9wQWxsTG9hZGVycyhTaG91bGROb3RDbGVhclByb3Zp
c2lvbmFsSXRlbSk7CiAgICAgbG9hZERpZmZlcmVudERvY3VtZW50SXRlbShpdGVtLCBsb2FkVHlw
ZSwgTWF5Tm90QXR0ZW1wdENhY2hlT25seUxvYWRGb3JGb3JtU3VibWlzc2lvbkl0ZW0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAppbmRleCA2ZDU1ODA2NjU3ZjFjOTMzOWM0MGU5MDIz
ZjYwMmFiZTk5Y2Y0Y2RiLi4wNmZhOGYwNWI4ZjIwNDA1MzU1OWI0ZjUyZjljMWQyYzc4MDYwYzY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaApAQCAtMTI1LDcgKzEyNSw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbG9hZFdpdGhPdmVycmlkZUVuY29kaW5n
KGNvbnN0IFN0cmluZyYgb3ZlcnJpZGVFbmNvZGluZyk7CiAKICAgICB2b2lkIG9wZW4oQ2FjaGVk
RnJhbWVCYXNlJik7Ci0gICAgdm9pZCBsb2FkSXRlbShIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5
cGUpOworICAgIHZvaWQgbG9hZEl0ZW0oSGlzdG9yeUl0ZW0mLCBGcmFtZUxvYWRUeXBlKTsKICAg
ICBIaXN0b3J5SXRlbSogcmVxdWVzdGVkSGlzdG9yeUl0ZW0oKSBjb25zdCB7IHJldHVybiBtX3Jl
cXVlc3RlZEhpc3RvcnlJdGVtLmdldCgpOyB9CiAKICAgICB2b2lkIHJldHJ5QWZ0ZXJGYWlsZWRD
YWNoZU9ubHlNYWluUmVzb3VyY2VMb2FkKCk7CkBAIC0yOTksOCArMjk5LDggQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgY2hlY2tUaW1lckZpcmVkKCk7CiAgICAgCi0gICAgdm9pZCBsb2FkU2FtZURv
Y3VtZW50SXRlbShIaXN0b3J5SXRlbSopOwotICAgIHZvaWQgbG9hZERpZmZlcmVudERvY3VtZW50
SXRlbShIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUsIEZvcm1TdWJtaXNzaW9uQ2FjaGVMb2Fk
UG9saWN5KTsKKyAgICB2b2lkIGxvYWRTYW1lRG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtJik7Cisg
ICAgdm9pZCBsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtJiwgRnJhbWVMb2Fk
VHlwZSwgRm9ybVN1Ym1pc3Npb25DYWNoZUxvYWRQb2xpY3kpOwogICAgIAogICAgIHZvaWQgbG9h
ZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCmluZGV4IDliODNhODQ3ZGQwNTA4YTdhYTU2ZDU5OGEz
MTQ0OGE2NTM1MWI4ZGEuLjgzM2U1ODg0YmFhMDdiMzViMWIzNWU1ZjRiYWMzN2RiMzljOWRkYTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcApAQCAtMjM0
LDExICsyMzQsMTMgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVzdG9yZURvY3VtZW50U3Rh
dGUoKQogCiB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjppbnZhbGlkYXRlQ3VycmVudEl0ZW1DYWNo
ZWRQYWdlKCkKIHsKLSAgICAvLyBXaGVuIHdlIGFyZSBwcmUtY29tbWl0LCB0aGUgY3VycmVudEl0
ZW0gaXMgd2hlcmUgYW55IHBhZ2UgY2FjaGUgZGF0YSByZXNpZGVzLgotICAgIGlmICghUGFnZUNh
Y2hlOjpzaGFyZWQoKS5nZXQoY3VycmVudEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpKQorICAgIGlm
ICghY3VycmVudEl0ZW0oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNoYXJlZCgpLnRha2UoY3VycmVu
dEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOworICAgIC8vIFdoZW4gd2UgYXJlIHByZS1jb21taXQs
IHRoZSBjdXJyZW50SXRlbSBpcyB3aGVyZSBhbnkgcGFnZSBjYWNoZSBkYXRhIHJlc2lkZXMuCisg
ICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNo
YXJlZCgpLnRha2UoKmN1cnJlbnRJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsKKyAgICBpZiAoIWNh
Y2hlZFBhZ2UpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgZ3Jv
dGVzcXVlIGhhY2sgdG8gZml4IDxyZGFyOi8vcHJvYmxlbS80MDU5MDU5PiBDcmFzaCBpbiBSZW5k
ZXJGbG93OjpkZXRhY2gKICAgICAvLyBTb21laG93IHRoZSBQYWdlU3RhdGUgb2JqZWN0IGlzIG5v
dCBwcm9wZXJseSB1cGRhdGVkLCBhbmQgaXMgaG9sZGluZyBvbnRvIGEgc3RhbGUgZG9jdW1lbnQu
CkBAIC0yNjUsNyArMjY3LDcgQEAgYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6c2hvdWxkU3RvcExv
YWRpbmdGb3JIaXN0b3J5SXRlbShIaXN0b3J5SXRlbSogdGFyZ2V0SXRlbSkKIAogLy8gTWFpbiBm
dW5uZWwgZm9yIG5hdmlnYXRpbmcgdG8gYSBwcmV2aW91cyBsb2NhdGlvbiAoYmFjay9mb3J3YXJk
LCBub24tc2VhcmNoIHNuYXAtYmFjaykKIC8vIFRoaXMgaW5jbHVkZXMgcmVjdXJzaW9uIHRvIGhh
bmRsZSBsb2FkaW5nIGludG8gZnJhbWVzZXRzIHByb3Blcmx5Ci12b2lkIEhpc3RvcnlDb250cm9s
bGVyOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogdGFyZ2V0SXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBl
KQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0mIHRhcmdldEl0
ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoIW1fZnJhbWUudHJlZSgpLnBh
cmVudCgpKTsKICAgICAKQEAgLTI3NiwxMCArMjc4LDEwIEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xs
ZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUp
CiAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghbV9mcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5zaG91bGRHb1Rv
SGlzdG9yeUl0ZW0odGFyZ2V0SXRlbSkpCisgICAgaWYgKCFtX2ZyYW1lLmxvYWRlcigpLmNsaWVu
dCgpLnNob3VsZEdvVG9IaXN0b3J5SXRlbSgmdGFyZ2V0SXRlbSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBpZiAobV9kZWZlcnNMb2FkaW5nKSB7Ci0gICAgICAgIG1fZGVmZXJyZWRJdGVtID0gdGFy
Z2V0SXRlbTsKKyAgICAgICAgbV9kZWZlcnJlZEl0ZW0gPSAmdGFyZ2V0SXRlbTsKICAgICAgICAg
bV9kZWZlcnJlZEZyYW1lTG9hZFR5cGUgPSB0eXBlOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMjg4LDcgKzI5MCw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OmdvVG9JdGVtKEhpc3Rv
cnlJdGVtKiB0YXJnZXRJdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiAgICAgLy8gLSBwbHVzLCBp
dCBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUgdG9wIGxldmVsIG9mIHRoZSBvcGVyYXRpb24gdGhy
b3VnaCB0aGUgZnJhbWUgdHJlZSwKICAgICAvLyBhcyBvcHBvc2VkIHRvIGhhcHBlbmluZyBmb3Ig
c29tZS9vbmUgb2YgdGhlIHBhZ2UgY29tbWl0cyB0aGF0IG1pZ2h0IGhhcHBlbiBzb29uCiAgICAg
UmVmUHRyPEhpc3RvcnlJdGVtPiBjdXJyZW50SXRlbSA9IHBhZ2UtPmJhY2tGb3J3YXJkKCkuY3Vy
cmVudEl0ZW0oKTsKLSAgICBwYWdlLT5iYWNrRm9yd2FyZCgpLnNldEN1cnJlbnRJdGVtKHRhcmdl
dEl0ZW0pOworICAgIHBhZ2UtPmJhY2tGb3J3YXJkKCkuc2V0Q3VycmVudEl0ZW0oJnRhcmdldEl0
ZW0pOwogICAgIG1fZnJhbWUubG9hZGVyKCkuY2xpZW50KCkudXBkYXRlR2xvYmFsSGlzdG9yeUl0
ZW1Gb3JQYWdlKCk7CiAKICAgICAvLyBGaXJzdCBzZXQgdGhlIHByb3Zpc2lvbmFsIGl0ZW0gb2Yg
YW55IGZyYW1lcyB0aGF0IGFyZSBub3QgYWN0dWFsbHkgbmF2aWdhdGluZy4KQEAgLTMwNSw4ICsz
MDcsOCBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVm
ZXIpCiB7CiAgICAgbV9kZWZlcnNMb2FkaW5nID0gZGVmZXI7CiAgICAgaWYgKCFkZWZlciAmJiBt
X2RlZmVycmVkSXRlbSkgewotICAgICAgICBnb1RvSXRlbShtX2RlZmVycmVkSXRlbS5nZXQoKSwg
bV9kZWZlcnJlZEZyYW1lTG9hZFR5cGUpOwotICAgICAgICBtX2RlZmVycmVkSXRlbSA9IDA7Cisg
ICAgICAgIGdvVG9JdGVtKCptX2RlZmVycmVkSXRlbSwgbV9kZWZlcnJlZEZyYW1lTG9hZFR5cGUp
OworICAgICAgICBtX2RlZmVycmVkSXRlbSA9IG51bGxwdHI7CiAgICAgfQogfQogCkBAIC0zMzQs
NyArMzM2LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yUmVsb2FkKCkKICNl
bmRpZgogCiAgICAgaWYgKG1fY3VycmVudEl0ZW0pIHsKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFy
ZWQoKS5yZW1vdmUobV9jdXJyZW50SXRlbS5nZXQoKSk7CisgICAgICAgIFBhZ2VDYWNoZTo6c2hh
cmVkKCkucmVtb3ZlKCptX2N1cnJlbnRJdGVtKTsKICAgICAKICAgICAgICAgaWYgKG1fZnJhbWUu
bG9hZGVyKCkubG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlOjpSZWxvYWQgfHwgbV9mcmFtZS5s
b2FkZXIoKS5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGU6OlJlbG9hZEZyb21PcmlnaW4pCiAg
ICAgICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50
SXRlbS5nZXQoKSk7CkBAIC00OTksNyArNTAxLDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
cmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0KCkKICAgICAvLyBGb3IgZWFjaCBmcmFtZSB0aGF0IGFs
cmVhZHkgaGFkIHRoZSBjb250ZW50IHRoZSBpdGVtIHJlcXVlc3RlZCAoYmFzZWQgb24KICAgICAv
LyAoYSBtYXRjaGluZyBVUkwgYW5kIGZyYW1lIHRyZWUgc25hcHNob3QpLCBqdXN0IHJlc3RvcmUg
dGhlIHNjcm9sbCBwb3NpdGlvbi4KICAgICAvLyBTYXZlIGZvcm0gc3RhdGUgKHdvcmtzIGZyb20g
Y3VycmVudEl0ZW0sIHNpbmNlIG1fZnJhbWVMb2FkQ29tcGxldGUgaXMgdHJ1ZSkKLSAgICBpZiAo
bV9jdXJyZW50SXRlbSAmJiBpdGVtc0FyZUNsb25lcyhtX2N1cnJlbnRJdGVtLmdldCgpLCBtX3By
b3Zpc2lvbmFsSXRlbS5nZXQoKSkpIHsKKyAgICBpZiAobV9jdXJyZW50SXRlbSAmJiBpdGVtc0Fy
ZUNsb25lcygqbV9jdXJyZW50SXRlbSwgbV9wcm92aXNpb25hbEl0ZW0uZ2V0KCkpKSB7CiAgICAg
ICAgIEFTU0VSVChtX2ZyYW1lTG9hZENvbXBsZXRlKTsKICAgICAgICAgc2F2ZURvY3VtZW50U3Rh
dGUoKTsKICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fY3Vy
cmVudEl0ZW0uZ2V0KCkpOwpAQCAtNzA3LDE3ICs3MDksMTUgQEAgUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4gSGlzdG9yeUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW1UcmVlKEZyYW1lJiB0YXJnZXRGcmFt
ZSwgYm8KIC8vIHRyYWNraW5nIHdoZXRoZXIgZWFjaCBmcmFtZSBhbHJlYWR5IGhhcyB0aGUgY29u
dGVudCB0aGUgaXRlbSByZXF1ZXN0cy4gIElmIHRoZXJlIGlzCiAvLyBhIG1hdGNoLCB3ZSBzZXQg
dGhlIHByb3Zpc2lvbmFsIGl0ZW0gYW5kIHJlY3Vyc2UuICBPdGhlcndpc2Ugd2Ugd2lsbCByZWxv
YWQgdGhhdAogLy8gZnJhbWUgYW5kIGFsbCBpdHMga2lkcyBpbiByZWN1cnNpdmVHb1RvSXRlbS4K
LXZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRlbShIaXN0
b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVtKQordm9pZCBIaXN0b3J5Q29udHJv
bGxlcjo6cmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVtKEhpc3RvcnlJdGVtJiBpdGVtLCBIaXN0
b3J5SXRlbSogZnJvbUl0ZW0pCiB7Ci0gICAgQVNTRVJUKGl0ZW0pOwotCiAgICAgaWYgKCFpdGVt
c0FyZUNsb25lcyhpdGVtLCBmcm9tSXRlbSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNl
dCBwcm92aXNpb25hbCBpdGVtLCB3aGljaCB3aWxsIGJlIGNvbW1pdHRlZCBpbiByZWN1cnNpdmVV
cGRhdGVGb3JDb21taXQuCi0gICAgbV9wcm92aXNpb25hbEl0ZW0gPSBpdGVtOworICAgIG1fcHJv
dmlzaW9uYWxJdGVtID0gJml0ZW07CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSXRlbSA6
IGl0ZW0tPmNoaWxkcmVuKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSXRlbSA6IGl0
ZW0uY2hpbGRyZW4oKSkgewogICAgICAgICBjb25zdCBTdHJpbmcmIGNoaWxkRnJhbWVOYW1lID0g
Y2hpbGRJdGVtLT50YXJnZXQoKTsKIAogICAgICAgICBIaXN0b3J5SXRlbSogZnJvbUNoaWxkSXRl
bSA9IGZyb21JdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWVOYW1lKTsKQEAgLTcy
NSwzNCArNzI1LDMyIEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVNldFByb3Zp
c2lvbmFsSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0CiAgICAgICAgIEZyYW1lKiBj
aGlsZEZyYW1lID0gbV9mcmFtZS50cmVlKCkuY2hpbGQoY2hpbGRGcmFtZU5hbWUpOwogICAgICAg
ICBBU1NFUlQoY2hpbGRGcmFtZSk7CiAKLSAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkuaGlz
dG9yeSgpLnJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFsSXRlbShjaGlsZEl0ZW0uZ2V0KCksIGZyb21D
aGlsZEl0ZW0pOworICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkucmVjdXJz
aXZlU2V0UHJvdmlzaW9uYWxJdGVtKCpjaGlsZEl0ZW0sIGZyb21DaGlsZEl0ZW0pOwogICAgIH0K
IH0KIAogLy8gV2Ugbm93IHRyYXZlcnNlIHRoZSBmcmFtZSB0cmVlIGFuZCBpdGVtIHRyZWUgYSBz
ZWNvbmQgdGltZSwgbG9hZGluZyBmcmFtZXMgdGhhdAogLy8gZG8gaGF2ZSB0aGUgY29udGVudCB0
aGUgaXRlbSByZXF1ZXN0cy4KLXZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZUdvVG9J
dGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0ZW0sIEZyYW1lTG9hZFR5
cGUgdHlwZSkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3Rv
cnlJdGVtJiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkK
IHsKLSAgICBBU1NFUlQoaXRlbSk7Ci0KICAgICBpZiAoIWl0ZW1zQXJlQ2xvbmVzKGl0ZW0sIGZy
b21JdGVtKSkgewogICAgICAgICBtX2ZyYW1lLmxvYWRlcigpLmxvYWRJdGVtKGl0ZW0sIHR5cGUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gSnVzdCBpdGVyYXRlIG92ZXIgdGhl
IHJlc3QsIGxvb2tpbmcgZm9yIGZyYW1lcyB0byBuYXZpZ2F0ZS4KLSAgICBmb3IgKGNvbnN0IGF1
dG8mIGNoaWxkSXRlbSA6IGl0ZW0tPmNoaWxkcmVuKCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNoaWxkSXRlbSA6IGl0ZW0uY2hpbGRyZW4oKSkgewogICAgICAgICBjb25zdCBTdHJpbmcmIGNo
aWxkRnJhbWVOYW1lID0gY2hpbGRJdGVtLT50YXJnZXQoKTsKIAogICAgICAgICBIaXN0b3J5SXRl
bSogZnJvbUNoaWxkSXRlbSA9IGZyb21JdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkRnJh
bWVOYW1lKTsKICAgICAgICAgQVNTRVJUKGZyb21DaGlsZEl0ZW0pOwogICAgICAgICBGcmFtZSog
Y2hpbGRGcmFtZSA9IG1fZnJhbWUudHJlZSgpLmNoaWxkKGNoaWxkRnJhbWVOYW1lKTsKICAgICAg
ICAgQVNTRVJUKGNoaWxkRnJhbWUpOwotICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5oaXN0
b3J5KCkucmVjdXJzaXZlR29Ub0l0ZW0oY2hpbGRJdGVtLmdldCgpLCBmcm9tQ2hpbGRJdGVtLCB0
eXBlKTsKKyAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLnJlY3Vyc2l2ZUdv
VG9JdGVtKCpjaGlsZEl0ZW0sIGZyb21DaGlsZEl0ZW0sIHR5cGUpOwogICAgIH0KIH0KIAotYm9v
bCBIaXN0b3J5Q29udHJvbGxlcjo6aXRlbXNBcmVDbG9uZXMoSGlzdG9yeUl0ZW0qIGl0ZW0xLCBI
aXN0b3J5SXRlbSogaXRlbTIpIGNvbnN0Citib29sIEhpc3RvcnlDb250cm9sbGVyOjppdGVtc0Fy
ZUNsb25lcyhIaXN0b3J5SXRlbSYgaXRlbTEsIEhpc3RvcnlJdGVtKiBpdGVtMikgY29uc3QKIHsK
ICAgICAvLyBJZiB0aGUgaXRlbSB3ZSdyZSBnb2luZyB0byBpcyBhIGNsb25lIG9mIHRoZSBpdGVt
IHdlJ3JlIGF0LCB0aGVuIHdlIGRvCiAgICAgLy8gbm90IG5lZWQgdG8gbG9hZCBpdCBhZ2Fpbi4g
IFRoZSBjdXJyZW50IGZyYW1lIHRyZWUgYW5kIHRoZSBmcmFtZSB0cmVlCkBAIC03NjEsMTIgKzc1
OSwxMSBAQCBib29sIEhpc3RvcnlDb250cm9sbGVyOjppdGVtc0FyZUNsb25lcyhIaXN0b3J5SXRl
bSogaXRlbTEsIEhpc3RvcnlJdGVtKiBpdGVtMikgYwogICAgIC8vIGEgcmVsb2FkLiAgVGh1cywg
aWYgaXRlbTEgYW5kIGl0ZW0yIGFyZSB0aGUgc2FtZSwgd2UgbmVlZCB0byBjcmVhdGUgYQogICAg
IC8vIG5ldyBkb2N1bWVudCBhbmQgc2hvdWxkIG5vdCBjb25zaWRlciB0aGVtIGNsb25lcy4KICAg
ICAvLyAoU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvMzU1MzIgZm9yIGRldGFpbHMuKQotICAgIHJl
dHVybiBpdGVtMQotICAgICAgICAmJiBpdGVtMgotICAgICAgICAmJiBpdGVtMSAhPSBpdGVtMgot
ICAgICAgICAmJiBpdGVtMS0+aXRlbVNlcXVlbmNlTnVtYmVyKCkgPT0gaXRlbTItPml0ZW1TZXF1
ZW5jZU51bWJlcigpCi0gICAgICAgICYmIGN1cnJlbnRGcmFtZXNNYXRjaEl0ZW0oaXRlbTEpCi0g
ICAgICAgICYmIGl0ZW0yLT5oYXNTYW1lRnJhbWVzKGl0ZW0xKTsKKyAgICByZXR1cm4gaXRlbTIK
KyAgICAgICAgJiYgJml0ZW0xICE9IGl0ZW0yCisgICAgICAgICYmIGl0ZW0xLml0ZW1TZXF1ZW5j
ZU51bWJlcigpID09IGl0ZW0yLT5pdGVtU2VxdWVuY2VOdW1iZXIoKQorICAgICAgICAmJiBjdXJy
ZW50RnJhbWVzTWF0Y2hJdGVtKCZpdGVtMSkKKyAgICAgICAgJiYgaXRlbTItPmhhc1NhbWVGcmFt
ZXMoJml0ZW0xKTsKIH0KIAogLy8gSGVscGVyIG1ldGhvZCB0aGF0IGRldGVybWluZXMgd2hldGhl
ciB0aGUgY3VycmVudCBmcmFtZSB0cmVlIG1hdGNoZXMgZ2l2ZW4gaGlzdG9yeSBpdGVtJ3MuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oCmluZGV4IDQzMWYzMGUwYWNm
OGE5YTYzY2Y5NWRjNDZkNzBhZDkyMDE1YjE3ODUuLjFiNDBhODBiMGUzMjcxOGIzM2VmYjQyMmFh
ZmU2NzZmYmMzYzdmZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxl
ci5oCkBAIC05MywxOSArOTMsMTkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgUGFnZTsKICAgICBib29sIHNob3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0ZW0oSGlzdG9y
eUl0ZW0qKSBjb25zdDsKLSAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2Fk
VHlwZSk7CisgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSYsIEZyYW1lTG9hZFR5cGUpOwog
CiAgICAgdm9pZCBpbml0aWFsaXplSXRlbShIaXN0b3J5SXRlbSopOwogICAgIFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IGNyZWF0ZUl0ZW0oKTsKICAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBj
cmVhdGVJdGVtVHJlZShGcmFtZSYgdGFyZ2V0RnJhbWUsIGJvb2wgY2xpcEF0VGFyZ2V0KTsKIAot
ICAgIHZvaWQgcmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVtKEhpc3RvcnlJdGVtKiwgSGlzdG9y
eUl0ZW0qKTsKLSAgICB2b2lkIHJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVtKiwgSGlzdG9y
eUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAgICB2b2lkIHJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFs
SXRlbShIaXN0b3J5SXRlbSYsIEhpc3RvcnlJdGVtKik7CisgICAgdm9pZCByZWN1cnNpdmVHb1Rv
SXRlbShIaXN0b3J5SXRlbSYsIEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CiAgICAgYm9v
bCBpc1JlcGxhY2VMb2FkVHlwZVdpdGhQcm92aXNpb25hbEl0ZW0oRnJhbWVMb2FkVHlwZSk7CiAg
ICAgYm9vbCBpc1JlbG9hZFR5cGVXaXRoUHJvdmlzaW9uYWxJdGVtKEZyYW1lTG9hZFR5cGUpOwog
ICAgIHZvaWQgcmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0KCk7CiAgICAgdm9pZCByZWN1cnNpdmVV
cGRhdGVGb3JTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKCk7Ci0gICAgYm9vbCBpdGVtc0FyZUNsb25l
cyhIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtKikgY29uc3Q7CisgICAgYm9vbCBpdGVtc0FyZUNs
b25lcyhIaXN0b3J5SXRlbSYsIEhpc3RvcnlJdGVtKikgY29uc3Q7CiAgICAgYm9vbCBjdXJyZW50
RnJhbWVzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVCYWNr
Rm9yd2FyZExpc3RDbGlwcGVkQXRUYXJnZXQoYm9vbCBkb0NsaXApOwogICAgIHZvaWQgdXBkYXRl
Q3VycmVudEl0ZW0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggODMxNGM5YTRlM2NlYmRjNmI1
N2I1ZDMwNGYwNDRmYTI4NmZiNjYxMC4uNzhjYjE5MzUzMzg5Yjc2ODhlNDdiNWI1ZjZiMmY1MDAw
ZDA0N2U5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTk4OSw3ICs5ODksNyBAQCB2b2lkIEZy
YW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9h
dCB0ZXh0Wm9vbUZhY3RvcgogICAgIH0KIAogICAgIGlmIChpc01haW5GcmFtZSgpKQotICAgICAg
ICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyhwYWdlKTsK
KyAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMo
KnBhZ2UpOwogfQogCiBmbG9hdCBGcmFtZTo6ZnJhbWVTY2FsZUZhY3RvcigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAppbmRleCA3YzUzNWQwNTcyMTJjYmM0YWU3ZjdkNjQyMzBmMjdmZWNhNDY1NTY5
Li43ZDk3YWVmMGUyYmEyMjJlNTU5ZTVjYmY4ZGViMjg2ZGEyZGU3MDdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKQEAgLTQzMCwxMyArNDMwLDEzIEBAIHZvaWQgUGFnZTo6c2V0T3BlbmVkQnlET00oKQog
ICAgIG1fb3BlbmVkQnlET00gPSB0cnVlOwogfQogCi12b2lkIFBhZ2U6OmdvVG9JdGVtKEhpc3Rv
cnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCit2b2lkIFBhZ2U6OmdvVG9JdGVtKEhp
c3RvcnlJdGVtJiBpdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiB7CiAgICAgLy8gc3RvcEFsbExv
YWRlcnMgbWF5IGVuZCB1cCBydW5uaW5nIG9ubG9hZCBoYW5kbGVycywgd2hpY2ggY291bGQgY2F1
c2UgZnVydGhlciBoaXN0b3J5IHRyYXZlcnNhbHMgdGhhdCBtYXkgbGVhZCB0byB0aGUgcGFzc2Vk
IGluIEhpc3RvcnlJdGVtCiAgICAgLy8gYmVpbmcgZGVyZWYoKS1lZC4gTWFrZSBzdXJlIHdlIGNh
biBzdGlsbCB1c2UgaXQgd2l0aCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0gbGF0ZXIuCi0g
ICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBwcm90ZWN0b3IoaXRlbSk7CisgICAgUmVmPEhpc3RvcnlJ
dGVtPiBwcm90ZWN0b3IoaXRlbSk7CiAKLSAgICBpZiAobV9tYWluRnJhbWUtPmxvYWRlcigpLmhp
c3RvcnkoKS5zaG91bGRTdG9wTG9hZGluZ0Zvckhpc3RvcnlJdGVtKGl0ZW0pKQorICAgIGlmICht
X21haW5GcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLnNob3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9y
eUl0ZW0oJml0ZW0pKQogICAgICAgICBtX21haW5GcmFtZS0+bG9hZGVyKCkuc3RvcEFsbExvYWRl
cnMoKTsKIAogICAgIG1fbWFpbkZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkuZ29Ub0l0ZW0oaXRl
bSwgdHlwZSk7CkBAIC04MzksOSArODM5LDkgQEAgdm9pZCBQYWdlOjpzZXREZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCBzY2FsZUZhY3RvcikKICAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFt
ZXMoKTsKIAogICAgIG1haW5GcmFtZSgpLmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgp
OwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2Vk
KHRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVD
aGFuZ2VkKCp0aGlzKTsKIAotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVs
bFN0eWxlUmVjYWxjKHRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9y
RnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsKICAgICBHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZURvY3Vt
ZW50TWFya2VyUmVzb3VyY2VzKCk7CiAKICAgICBtYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5kaWRDaGFuZ2VEZXZpY2VTY2FsZUZhY3RvcigpOwpAQCAtOTIxLDcgKzkyMSw3IEBA
IHZvaWQgUGFnZTo6c2V0UGFnaW5hdGlvbihjb25zdCBQYWdpbmF0aW9uJiBwYWdpbmF0aW9uKQog
ICAgIG1fcGFnaW5hdGlvbiA9IHBhZ2luYXRpb247CiAKICAgICBzZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxT
dHlsZVJlY2FsYyh0aGlzKTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1
bGxTdHlsZVJlY2FsYygqdGhpcyk7CiB9CiAKIHVuc2lnbmVkIFBhZ2U6OnBhZ2VDb3VudCgpIGNv
bnN0CkBAIC0xNjYxLDcgKzE2NjEsNyBAQCB2b2lkIFBhZ2U6OnNldFZpc2l0ZWRMaW5rU3RvcmUo
UmVmPFZpc2l0ZWRMaW5rU3RvcmU+JiYgdmlzaXRlZExpbmtTdG9yZSkKICAgICBtX3Zpc2l0ZWRM
aW5rU3RvcmUtPmFkZFBhZ2UoKnRoaXMpOwogCiAgICAgaW52YWxpZGF0ZVN0eWxlc0ZvckFsbExp
bmtzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNh
bGModGhpcyk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVS
ZWNhbGMoKnRoaXMpOwogfQogCiBTZXNzaW9uSUQgUGFnZTo6c2Vzc2lvbklEKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgKaW5kZXggMjhjMDRkOGM3ZjdiNjI0ZmExMzM0YWE1N2MzNWYxNGJmMmUxZTBiOS4u
N2ZjZjdhYjZjODA1NTZhMWM5Y2U0MWY2MGIzOWViNjc0MDk2ZTI0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgK
QEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVuZWRCeURPTSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0T3BlbmVkQnlET00oKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtJiwgRnJhbWVMb2FkVHlwZSk7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEdyb3VwTmFtZShjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JF
X0VYUE9SVCBjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzLmNwcAppbmRleCBkNzczOWQxYjE5YWM2Mjc0NTExOGZmYWI1ODVmNGQyMzE4MzQ0NDkwLi45
NTZiNDRjNGI3ZjgyYTczZGRiMjE4MzUxOTYwYzEzMjAxYWZjOGUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzLmNwcApAQCAtNTE5LDEyICs1MTksOCBAQCB2b2lkIFNldHRpbmdzOjpzZXRVc2VzUGFn
ZUNhY2hlKGJvb2wgdXNlc1BhZ2VDYWNoZSkKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUpIHsKLSAgICAgICAgaW50IGZpcnN0ID0g
LW1fcGFnZS0+YmFja0ZvcndhcmQoKS5iYWNrQ291bnQoKTsKLSAgICAgICAgaW50IGxhc3QgPSBt
X3BhZ2UtPmJhY2tGb3J3YXJkKCkuZm9yd2FyZENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkg
PSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspCi0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnJlbW92ZShtX3BhZ2UtPmJhY2tGb3J3YXJkKCkuaXRlbUF0SW5kZXgoaSkpOwotICAgIH0KKyAg
ICBpZiAoIW1fdXNlc1BhZ2VDYWNoZSkKKyAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVu
ZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpOb25lKTsKIH0KIAogdm9pZCBTZXR0aW5nczo6
c2V0U2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKaW5kZXggNWNk
MjEwNTY0N2M0MjQ5MjExNmM1NDIyMGI0NmQ2N2Y2ZDEyYTJhMS4uMGJiM2QzMmVjNGY2MmRjYWIy
MjQ3YjE3OTViNWQ3MDhmOGYyY2Y5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBNZW1v
cnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VDcml0aWNhbE1lbW9yeSgpCiAgICAgICAgIFJlbGll
ZkxvZ2dlciBsb2coIkVtcHR5IHRoZSBQYWdlQ2FjaGUiKTsKICAgICAgICAgLy8gUmlnaHQgbm93
LCB0aGUgb25seSByZWFzb24gd2UgY2FsbCByZWxlYXNlIGNyaXRpY2FsIG1lbW9yeSB3aGlsZSBu
b3QgdW5kZXIgbWVtb3J5IHByZXNzdXJlIGlzIGlmIHRoZSBwcm9jZXNzIGlzIGFib3V0IHRvIGJl
IHN1c3BlbmRlZC4KICAgICAgICAgUHJ1bmluZ1JlYXNvbiBwcnVuaW5nUmVhc29uID0gbWVtb3J5
UHJlc3N1cmVIYW5kbGVyKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCkgPyBQcnVuaW5nUmVhc29u
OjpNZW1vcnlQcmVzc3VyZSA6IFBydW5pbmdSZWFzb246OlByb2Nlc3NTdXNwZW5kZWQ7Ci0gICAg
ICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb0NhcGFjaXR5Tm93KDAsIHBydW5pbmdSZWFz
b24pOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9TaXplTm93KDAsIHBydW5p
bmdSZWFzb24pOwogICAgIH0KIAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9y
eS9XZWJCYWNrRm9yd2FyZExpc3QubW0KaW5kZXggODc1N2M4YzIxZTAzYzZiNGVlNmI5NTUxZTQ5
NmVkNGRiNTdmZmRjZC4uNmI0NTAwMjFjNDI3ODYyNjM2MzI5MTM2MzEwMjc3MmMyNWMxMmUxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3Qu
bW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0K
QEAgLTM1NSw3ICszNTUsNyBAQCBzdGF0aWMgYm9vbCBidW1wZXJDYXJCYWNrRm9yd2FyZEhhY2tO
ZWVkZWQoKQogCiAtIChOU1VJbnRlZ2VyKXBhZ2VDYWNoZVNpemUKIHsKLSAgICByZXR1cm4gW2tp
dChjb3JlKHNlbGYpLT5wYWdlKCkpIHVzZXNQYWdlQ2FjaGVdID8gUGFnZUNhY2hlOjpzaGFyZWQo
KS5jYXBhY2l0eSgpIDogMDsKKyAgICByZXR1cm4gW2tpdChjb3JlKHNlbGYpLT5wYWdlKCkpIHVz
ZXNQYWdlQ2FjaGVdID8gUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXhTaXplKCkgOiAwOwogfQogCiAt
IChpbnQpYmFja0xpc3RDb3VudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4
IDkwYmYwNmVkZWM0NDMwYTk4MzBlM2ZkMzYyYzY1ZWI0YzdlZDIzNmQuLmMyNTAyYTY0MDhmYWU0
NDIzMGU2OTNmOGJiZTIwMTY0ODZjMWJjNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KQEAgLTE5OTcsNyArMTk5Nyw3IEBAIHN0YXRpYyBib29sIGZhc3REb2N1bWVudFRlYXJk
b3duRW5hYmxlZCgpCiAgICAgaWYgKCFvdGhlckJhY2tGb3J3YXJkQ2xpZW50LT5jdXJyZW50SXRl
bSgpKQogICAgICAgICByZXR1cm47IC8vIGVtcHR5IGJhY2sgZm9yd2FyZCBsaXN0LCBiYWlsCiAg
ICAgCi0gICAgSGlzdG9yeUl0ZW0qIG5ld0l0ZW1Ub0dvVG8gPSAwOworICAgIEhpc3RvcnlJdGVt
KiBuZXdJdGVtVG9Hb1RvID0gbnVsbHB0cjsKIAogICAgIGludCBsYXN0SXRlbUluZGV4ID0gb3Ro
ZXJCYWNrRm9yd2FyZENsaWVudC0+Zm9yd2FyZExpc3RDb3VudCgpOwogICAgIGZvciAoaW50IGkg
PSAtb3RoZXJCYWNrRm9yd2FyZENsaWVudC0+YmFja0xpc3RDb3VudCgpOyBpIDw9IGxhc3RJdGVt
SW5kZXg7ICsraSkgewpAQCAtMjAxNCw3ICsyMDE0LDcgQEAgc3RhdGljIGJvb2wgZmFzdERvY3Vt
ZW50VGVhcmRvd25FbmFibGVkKCkKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKG5ld0l0ZW1Ub0dv
VG8pOwotICAgIF9wcml2YXRlLT5wYWdlLT5nb1RvSXRlbShuZXdJdGVtVG9Hb1RvLCBGcmFtZUxv
YWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOworICAgIF9wcml2YXRlLT5wYWdlLT5nb1RvSXRl
bSgqbmV3SXRlbVRvR29UbywgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKIH0K
IAogLSAodm9pZClfc2V0Rm9ybURlbGVnYXRlOiAoaWQ8V2ViRm9ybURlbGVnYXRlPilkZWxlZ2F0
ZQpAQCAtNTY0Nyw3ICs1NjQ3LDggQEAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgYmFja2luZ1By
b3BlcnR5T2xkU2NhbGVGYWN0b3JLZXkgPSBAIk5TQmFja2luZ1Byb3BlcnR5T2wKICAgICBpZiAo
IV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm4gTk87CiAKLSAgICBfcHJpdmF0ZS0+cGFn
ZS0+Z29Ub0l0ZW0oY29yZShpdGVtKSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJk
KTsKKyAgICBBU1NFUlQoaXRlbSk7CisgICAgX3ByaXZhdGUtPnBhZ2UtPmdvVG9JdGVtKCpjb3Jl
KGl0ZW0pLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOwogICAgIHJldHVybiBZ
RVM7CiB9CiAKQEAgLTc3NDIsNyArNzc0Myw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDY0X3Qgcm91
bmRVcFRvUG93ZXJPZjIodWludDY0X3QgbnVtKQogICAgIHVuc2lnbmVkIGNhY2hlTWF4RGVhZENh
cGFjaXR5ID0gMDsKICAgICBhdXRvIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSBz
dGQ6OmNocm9ubzo6c2Vjb25kcyB7IDAgfTsKIAotICAgIHVuc2lnbmVkIHBhZ2VDYWNoZUNhcGFj
aXR5ID0gMDsKKyAgICB1bnNpZ25lZCBwYWdlQ2FjaGVTaXplID0gMDsKIAogICAgIE5TVUludGVn
ZXIgbnN1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gMDsKICAgICBOU1VJbnRlZ2VyIG5zdXJsQ2Fj
aGVEaXNrQ2FwYWNpdHkgPSAwOwpAQCAtNzc1Myw3ICs3NzU0LDcgQEAgc3RhdGljIGlubGluZSB1
aW50NjRfdCByb3VuZFVwVG9Qb3dlck9mMih1aW50NjRfdCBudW0pCiAgICAgc3dpdGNoIChjYWNo
ZU1vZGVsKSB7CiAgICAgY2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXI6IHsKICAgICAg
ICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0eSAoaW4gcGFnZXMpCi0gICAgICAgIHBhZ2VDYWNoZUNh
cGFjaXR5ID0gMDsKKyAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDA7CiAKICAgICAgICAgLy8gT2Jq
ZWN0IGNhY2hlIGNhcGFjaXRpZXMgKGluIGJ5dGVzKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSA0
MDk2KQpAQCAtNzc5MCwxMyArNzc5MSwxMyBAQCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHJvdW5k
VXBUb1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkKICAgICBjYXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVu
dEJyb3dzZXI6IHsKICAgICAgICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0eSAoaW4gcGFnZXMpCiAg
ICAgICAgIGlmIChtZW1TaXplID49IDEwMjQpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0
eSA9IDM7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMzsKICAgICAgICAgZWxzZSBpZiAo
bWVtU2l6ZSA+PSA1MTIpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDI7CisgICAg
ICAgICAgICBwYWdlQ2FjaGVTaXplID0gMjsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAy
NTYpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDE7CisgICAgICAgICAgICBwYWdl
Q2FjaGVTaXplID0gMTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNp
dHkgPSAwOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDA7CiAKICAgICAgICAgLy8gT2Jq
ZWN0IGNhY2hlIGNhcGFjaXRpZXMgKGluIGJ5dGVzKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSA0
MDk2KQpAQCAtNzg0NCwxNSArNzg0NSwxNSBAQCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHJvdW5k
VXBUb1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkKICAgICAgICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0
eSAoaW4gcGFnZXMpCiAgICAgICAgIC8vIChSZXNlYXJjaCBpbmRpY2F0ZXMgdGhhdCB2YWx1ZSAv
IHBhZ2UgZHJvcHMgc3Vic3RhbnRpYWxseSBhZnRlciAzIHBhZ2VzLikKICAgICAgICAgaWYgKG1l
bVNpemUgPj0gMjA0OCkKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gNTsKKyAgICAg
ICAgICAgIHBhZ2VDYWNoZVNpemUgPSA1OwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDEw
MjQpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDQ7CisgICAgICAgICAgICBwYWdl
Q2FjaGVTaXplID0gNDsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSA1MTIpCi0gICAgICAg
ICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDM7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0g
MzsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAyNTYpCi0gICAgICAgICAgICBwYWdlQ2Fj
aGVDYXBhY2l0eSA9IDI7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMjsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAxOworICAgICAgICAgICAgcGFn
ZUNhY2hlU2l6ZSA9IDE7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIC8vIENhY2hlIHBh
Z2UgbGVzcyBhZ2dyZXNzaXZlbHkgaW4gaU9TIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGJlaW5n
IGpldHRpc29uZWQuCkBAIC03OTM1LDcgKzc5MzYsNyBAQCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90
IHJvdW5kVXBUb1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkKIAogICAgIG1lbW9yeUNhY2hlKCkuc2V0
Q2FwYWNpdGllcyhjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNh
Y2hlVG90YWxDYXBhY2l0eSk7CiAgICAgbWVtb3J5Q2FjaGUoKS5zZXREZWFkRGVjb2RlZERhdGFE
ZWxldGlvbkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkuc2V0Q2FwYWNpdHkocGFnZUNhY2hlQ2FwYWNpdHkpOworICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKICNpZiBQTEFURk9S
TShJT1MpCiAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRTaG91bGRDbGVhckJhY2tpbmdTdG9y
ZXModHJ1ZSk7CiAgICAgbnN1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gc3RkOjptYXgobnN1cmxD
YWNoZU1lbW9yeUNhcGFjaXR5LCBbbnN1cmxDYWNoZSBtZW1vcnlDYXBhY2l0eV0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJWaWV3LmNwcAppbmRleCAwZjE3ZWRhMzI5ZTJmNWI2ZWIwOTY2OTBjZTNiZjdjNmIxOWY0MGMx
Li40YTcxNDQ3ODZjNDRkNWQwNTAwY2Y4NGE2M2IyMmU3NTVjOWRhNzNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcApAQCAtNTMwLDEzICs1MzAsMTMgQEAgdm9pZCBXZWJWaWV3OjpzZXRDYWNoZU1vZGVs
KFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICB1bnNpZ25lZCBjYWNoZU1heERlYWRDYXBh
Y2l0eSA9IDA7CiAgICAgYXV0byBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0gc3Rk
OjpjaHJvbm86OnNlY29uZHMgeyAwIH07CiAKLSAgICB1bnNpZ25lZCBwYWdlQ2FjaGVDYXBhY2l0
eSA9IDA7CisgICAgdW5zaWduZWQgcGFnZUNhY2hlU2l6ZSA9IDA7CiAKIAogICAgIHN3aXRjaCAo
Y2FjaGVNb2RlbCkgewogICAgIGNhc2UgV2ViQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOiB7CiAg
ICAgICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2VzKQotICAgICAgICBwYWdlQ2Fj
aGVDYXBhY2l0eSA9IDA7CisgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAwOwogCiAgICAgICAgIC8v
IE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRlcykKICAgICAgICAgaWYgKG1lbVNpemUg
Pj0gMjA0OCkKQEAgLTU2MywxMyArNTYzLDEzIEBAIHZvaWQgV2ViVmlldzo6c2V0Q2FjaGVNb2Rl
bChXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgY2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1l
bnRCcm93c2VyOiB7CiAgICAgICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2VzKQog
ICAgICAgICBpZiAobWVtU2l6ZSA+PSAxMDI0KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNp
dHkgPSAzOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDM7CiAgICAgICAgIGVsc2UgaWYg
KG1lbVNpemUgPj0gNTEyKQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOworICAg
ICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDI7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0g
MjU2KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAxOworICAgICAgICAgICAgcGFn
ZUNhY2hlU2l6ZSA9IDE7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFj
aXR5ID0gMDsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAwOwogCiAgICAgICAgIC8vIE9i
amVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBieXRlcykKICAgICAgICAgaWYgKG1lbVNpemUgPj0g
MjA0OCkKQEAgLTYxMCwxNSArNjEwLDE1IEBAIHZvaWQgV2ViVmlldzo6c2V0Q2FjaGVNb2RlbChX
ZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkg
KGluIHBhZ2VzKQogICAgICAgICAvLyAoUmVzZWFyY2ggaW5kaWNhdGVzIHRoYXQgdmFsdWUgLyBw
YWdlIGRyb3BzIHN1YnN0YW50aWFsbHkgYWZ0ZXIgMyBwYWdlcy4pCiAgICAgICAgIGlmIChtZW1T
aXplID49IDIwNDgpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDU7CisgICAgICAg
ICAgICBwYWdlQ2FjaGVTaXplID0gNTsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAxMDI0
KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSA0OworICAgICAgICAgICAgcGFnZUNh
Y2hlU2l6ZSA9IDQ7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gNTEyKQotICAgICAgICAg
ICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAzOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDM7
CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMjU2KQotICAgICAgICAgICAgcGFnZUNhY2hl
Q2FwYWNpdHkgPSAyOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDI7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMTsKKyAgICAgICAgICAgIHBhZ2VD
YWNoZVNpemUgPSAxOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBi
eXRlcykKICAgICAgICAgLy8gKFRlc3RpbmcgaW5kaWNhdGVzIHRoYXQgdmFsdWUgLyBNQiBkZXBl
bmRzIGhlYXZpbHkgb24gY29udGVudCBhbmQKQEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIFdlYlZp
ZXc6OnNldENhY2hlTW9kZWwoV2ViQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgbWVtb3J5
Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRD
YXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZSgpLnNldERlYWRE
ZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZh
bCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRDYXBhY2l0eShwYWdlQ2FjaGVDYXBhY2l0
eSk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOwog
CiAjaWYgVVNFKENGTkVUV09SSykKICAgICAvLyBEb24ndCBzaHJpbmsgYSBiaWcgZGlzayBjYWNo
ZSwgc2luY2UgdGhhdCB3b3VsZCBjYXVzZSBjaHVybi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3Bw
CmluZGV4IGExNzYxM2IyMTM2NzAyY2IzZjNkY2RhYzdlMGQ2NDNjMzA1OTVjOWEuLjc1ZTI3YmE1
MTBhMmQ0YTQzNjUxOTEyNDk1MDdjYzI0MTA2NTIxMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5
LmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJl
bW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZShpdGVtLmdldCgpKTsK
KyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAgV2ViQ29yZTo6UGFn
ZTo6Y2xlYXJQcmV2aW91c0l0ZW1Gcm9tQWxsUGFnZXMoaXRlbS5nZXQoKSk7CiAgICAgaGlzdG9y
eUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0ZW0pOwogfQpAQCAtMjE2LDEyICsyMTYsMTIgQEAgaW50
IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpmb3J3YXJkTGlzdENvdW50KCkKIAogdm9pZCBXZWJC
YWNrRm9yd2FyZExpc3RQcm94eTo6Y2xvc2UoKQogewotICAgIEhhc2hTZXQ8dWludDY0X3Q+Ojpp
dGVyYXRvciBlbmQgPSBtX2Fzc29jaWF0ZWRJdGVtSURzLmVuZCgpOwotICAgIGZvciAoSGFzaFNl
dDx1aW50NjRfdD46Oml0ZXJhdG9yIGkgPSBtX2Fzc29jaWF0ZWRJdGVtSURzLmJlZ2luKCk7IGkg
IT0gZW5kOyArK2kpCi0gICAgICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3Zl
KGl0ZW1Gb3JJRCgqaSkpOworICAgIGZvciAoYXV0byYgaXRlbUlEIDogbV9hc3NvY2lhdGVkSXRl
bUlEcykgeworICAgICAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBpdGVtRm9ySUQoaXRlbUlE
KSkKKyAgICAgICAgICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVt
KTsKKyAgICB9CiAKICAgICBtX2Fzc29jaWF0ZWRJdGVtSURzLmNsZWFyKCk7Ci0KICAgICBtX3Bh
Z2UgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKaW5kZXggZmJjYjRlMjI4N2E2OGMyZDZlZjFkZTM2YWIzYzhhMmMzNzMxYjFh
Ni4uMmUxOGZmYjA2MzU5NTAyMDVkMDJmZWNlZjJkNTFkZWEyZDQ2N2Q5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTIwNiw3ICsxMjA2
LDcgQEAgdm9pZCBXZWJQYWdlOjpnb0ZvcndhcmQodWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50
NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKICAgICBpZiAoIWl0ZW0tPmlzSW5QYWdlQ2FjaGUoKSkK
ICAgICAgICAgbV9wZW5kaW5nTmF2aWdhdGlvbklEID0gbmF2aWdhdGlvbklEOwogCi0gICAgbV9w
YWdlLT5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkKTsKKyAgICBtX3BhZ2Ut
PmdvVG9JdGVtKCppdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkKTsKIH0KIAogdm9pZCBXZWJQ
YWdlOjpnb0JhY2sodWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0
ZW1JRCkKQEAgLTEyMjIsNyArMTIyMiw3IEBAIHZvaWQgV2ViUGFnZTo6Z29CYWNrKHVpbnQ2NF90
IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQpCiAgICAgaWYgKCFpdGVt
LT5pc0luUGFnZUNhY2hlKCkpCiAgICAgICAgIG1fcGVuZGluZ05hdmlnYXRpb25JRCA9IG5hdmln
YXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0oaXRlbSwgRnJhbWVMb2FkVHlwZTo6QmFj
ayk7CisgICAgbV9wYWdlLT5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlwZTo6QmFjayk7CiB9
CiAKIHZvaWQgV2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCBuYXZpZ2F0aW9u
SUQsIHVpbnQ2NF90IGJhY2tGb3J3YXJkSXRlbUlEKQpAQCAtMTIzOCw3ICsxMjM4LDcgQEAgdm9p
ZCBXZWJQYWdlOjpnb1RvQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWlu
dDY0X3QgYmFja0ZvcndhcmRJdGUKICAgICBpZiAoIWl0ZW0tPmlzSW5QYWdlQ2FjaGUoKSkKICAg
ICAgICAgbV9wZW5kaW5nTmF2aWdhdGlvbklEID0gbmF2aWdhdGlvbklEOwogCi0gICAgbV9wYWdl
LT5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOworICAg
IG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2Fy
ZCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6dHJ5UmVzdG9yZVNjcm9sbFBvc2l0aW9uKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDhiOGI4ODQyYTMyZjk0NDli
NWZmNWRlMzRiMjliZDQ1NTNmYWRmM2EuLjk2MTZiMDBkOWY2NjEyMDAyOGM3MzM3OTk0MDBhOTRl
ZGRhMzAzZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcApAQCAt
MTExNiw3ICsxMTE2LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKGNv
bnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiAKIHZvaWQgV2ViUHJvY2Vz
czo6cmVsZWFzZVBhZ2VDYWNoZSgpCiB7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRv
Q2FwYWNpdHlOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOworICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJl
c3N1cmUpOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCA4OGU0ZDk4NDAzOGE4
Mzc4MWIwYjdhYzdlMzU4NTI3N2FjMWI0ZDFmLi40NWFkYzA5YjY0MGIwNzU2ODE5Njc2MjQ3ZWMx
MjY5N2FjMTEyYmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlByb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29h
L1dlYlByb2Nlc3NDb2NvYS5tbQpAQCAtMTA0LDE4ICsxMDQsMTggQEAgdm9pZCBXZWJQcm9jZXNz
OjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgIHVuc2ln
bmVkIGNhY2hlTWluRGVhZENhcGFjaXR5ID0gMDsKICAgICB1bnNpZ25lZCBjYWNoZU1heERlYWRD
YXBhY2l0eSA9IDA7CiAgICAgYXV0byBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0g
c3RkOjpjaHJvbm86OnNlY29uZHMgeyAwIH07Ci0gICAgdW5zaWduZWQgcGFnZUNhY2hlQ2FwYWNp
dHkgPSAwOworICAgIHVuc2lnbmVkIHBhZ2VDYWNoZVNpemUgPSAwOwogICAgIHVuc2lnbmVkIGxv
bmcgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyB1cmxDYWNo
ZURpc2tDYXBhY2l0eSA9IDA7CiAKICAgICBjYWxjdWxhdGVDYWNoZVNpemVzKGNhY2hlTW9kZWws
IG1lbVNpemUsIGRpc2tGcmVlU2l6ZSwKICAgICAgICAgY2FjaGVUb3RhbENhcGFjaXR5LCBjYWNo
ZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGRlYWREZWNvZGVkRGF0YURl
bGV0aW9uSW50ZXJ2YWwsCi0gICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5LCB1cmxDYWNoZU1lbW9y
eUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7CisgICAgICAgIHBhZ2VDYWNoZVNpemUs
IHVybENhY2hlTWVtb3J5Q2FwYWNpdHksIHVybENhY2hlRGlza0NhcGFjaXR5KTsKIAogCiAgICAg
bWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1h
eERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZSgpLnNl
dERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25J
bnRlcnZhbCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRDYXBhY2l0eShwYWdlQ2FjaGVD
YXBhY2l0eSk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNp
emUpOwogCiAgICAgTlNVUkxDYWNoZSAqbnN1cmxDYWNoZSA9IFtOU1VSTENhY2hlIHNoYXJlZFVS
TENhY2hlXTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dl
YlByb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJQcm9j
ZXNzU291cC5jcHAKaW5kZXggYmNjN2FkNjE2MTJiNzE4OTA1MjY5ZGNlNTg4Mjc0NDYwZWExMzJj
YS4uMTE4YzcyMmY3NjI0OWE1ZTJmZWE0YWFlZjA1NWY4NDlmYWMwOWMwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCkBAIC04Myw3
ICs4Myw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKENhY2hlTW9k
ZWwgY2FjaGVNb2RlbCkKICAgICB1bnNpZ25lZCBjYWNoZU1pbkRlYWRDYXBhY2l0eSA9IDA7CiAg
ICAgdW5zaWduZWQgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOwogICAgIGF1dG8gZGVhZERlY29k
ZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzIHsgMCB9OwotICAg
IHVuc2lnbmVkIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICB1bnNpZ25lZCBwYWdlQ2FjaGVT
aXplID0gMDsKIAogICAgIHVuc2lnbmVkIGxvbmcgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IDA7
CiAgICAgdW5zaWduZWQgbG9uZyB1cmxDYWNoZURpc2tDYXBhY2l0eSA9IDA7CkBAIC05OSwxMiAr
OTksMTIgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2Rl
bCBjYWNoZU1vZGVsKQogICAgIHVpbnQ2NF90IG1lbVNpemUgPSBnZXRNZW1vcnlTaXplKCk7CiAg
ICAgY2FsY3VsYXRlQ2FjaGVTaXplcyhjYWNoZU1vZGVsLCBtZW1TaXplLCBkaXNrRnJlZVNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHksIGNhY2hlTWluRGVh
ZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgZGVhZERlY29kZWREYXRhRGVsZXRpb25J
bnRlcnZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5LCB1cmxD
YWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYWdlQ2FjaGVTaXplLCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNo
ZURpc2tDYXBhY2l0eSk7CiAKICAgICBXZWJDb3JlOjptZW1vcnlDYWNoZSgpLnNldERpc2FibGVk
KGNhY2hlTW9kZWwgPT0gQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyKTsKICAgICBXZWJDb3JlOjpt
ZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4
RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIFdlYkNvcmU6Om1lbW9yeUNh
Y2hlKCkuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFE
ZWxldGlvbkludGVydmFsKTsKLSAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldENh
cGFjaXR5KHBhZ2VDYWNoZUNhcGFjaXR5KTsKKyAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNoYXJl
ZCgpLnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CiAKICNpZiBQTEFURk9STShHVEspCiAgICAg
V2ViQ29yZTo6UGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXMo
dHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245588</attachid>
            <date>2015-01-28 17:25:50 -0800</date>
            <delta_ts>2015-01-28 22:12:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141009-20150128172555.patch</filename>
            <type>text/plain</type>
            <size>66110</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzI1NTY1YjA4NTgxMTll
Zjg5MzRmNWNmMjZiNzgzODhiMzk1YmJhZC4uOWQzOGJhNDgzZjgyMTY4YjRlYzVmMmY2MTI4MWNl
NGNkNmQ5ODA5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAxLTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5p
emUgUGFnZUNhY2hlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDEwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDbGVhbiB1cCAvIG1vZGVybml6ZSBQYWdlQ2FjaGUgY2xhc3M6CisgICAgICAg
IC0gVXNlIG1vcmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCisgICAgICAgIC0gVXNl
IGEgTGlzdEhhc2hTZXQ8UmVmPEhpc3RvcnlJdGVtPj4gaW50ZXJuYWxseSBpbnN0ZWFkIG9mIGEg
bGlua2VkCisgICAgICAgICAgbGlzdCBvZiBIaXN0b3J5SXRlbSouIFRoaXMgYXZvaWRzIGhhdmlu
ZyB0aGUgcmVmL3VucmVmIEhpc3RvcnlJdGVtcworICAgICAgICAgIG1hbnVhbGx5IGFuZCBtYWlu
dGFpbmluZyB0aGUgbGlzdCBzaXplIHNlcGFyYXRlbHkuIEl0IGFsc28gc2ltcGxpZmllcworICAg
ICAgICAgIHRoZSBjb2RlIGRlYWxpbmcgd2l0aCB0aGUgY29udGFpbmVyIGFuZCBtYWtlcyBsb29r
aW5nIHVwIEhpc3RvcnlJdGVtcworICAgICAgICAgIGZhc3RlciBhcyBhIGJvbnVzLiBTaW1pbGFy
bHkgdG8gdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLCB3ZSBhcmUKKyAgICAgICAgICBhZGRp
bmcgZWxlbWVudHMgdG8gb25lIGVuZCBhbmQgcmVtb3ZpbmcgZnJvbSB0aGUgb3Bwb3NpdGUgZW5k
IHdoZW4KKyAgICAgICAgICBwcnVuaW5nIHRvIGRyb3Agb2xkIGhpc3RvcnkgaXRlbXMgZmlyc3Qu
IE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUKKyAgICAgICAgICBwcmV2aW91cyBpbXBsZW1lbnRh
dGlvbiB3YXMgY2FsbGVkIExSVUxpc3QsIGl0IGRpZCBub3QgbW92ZSBpdGVtcyB0bworICAgICAg
ICAgIHRoZSBmcm9udCB3aGVuIGFjY2Vzc2VkLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGRvZXNu
J3QgZWl0aGVyLgorICAgICAgICAgLSBSZW5hbWUgImNhcGFjaXR5IiB0byAibWF4U2l6ZSIgdG8g
YXZvaWQgY29uZnVzaW5nIHdpdGggY29udGFpbmVycycKKyAgICAgICAgICAgY2FwYWNpdHkgKHdo
aWNoIGRvZXNuJ3QgbGltaXQgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcikuCisgICAgICAgICAt
IFVzZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIGludCBmb3IgYWxsIHZhbHVlcyB0aGF0IGFyZSBzdXBw
b3NlZCB0byBiZQorICAgICAgICAgICBwb3NpdGl2ZS4KKyAgICAgICAgIC0gRG8gbm90IGV4cGxp
Y2l0ZWx5IGRlZmluZSB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgbGV0IHRoZQorICAgICAg
ICAgICBjb21waWxlciBnZW5lcmF0ZSBpdCBmb3IgdXMgKGFuZCB1c2UgaW4tY2xhc3MgaW5pdGlh
bGl6YXRpb24gZm9yCisgICAgICAgICAgIG1lbWJlcnMpCisgICAgICAgICAtIEZpeCBpbmRlbnRh
dGlvbiBpbiB0aGUgaGVhZGVyLgorCiAyMDE1LTAxLTI4ICBEYW5hIEJ1cmthcnQgIDxkYnVya2Fy
dEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBBU2FuIGZsYWcgc2V0dGluZ3MgZnJvbSBEZWJ1
Z1JlbGVhc2UueGNjb25maWcgdG8gQmFzZS54Y2NvbmZpZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGU4
YzJiYmE0ZDg4OTQxN2ZiYjBhMzg3Yzc5ZTBkMzBhMzZlMTc4NDEuLjRiODBjMTA5OWJkYWU3NjQ2
NDY2ZWE4M2ViMjhmZDE4NzlhZDgyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBA
QAorMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAg
IENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNh
Y2hlIGNsYXNzLgorCisgICAgICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW06Cisg
ICAgICAgICgtW1dlYkJhY2tGb3J3YXJkTGlzdCBwYWdlQ2FjaGVTaXplXSk6CisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9sb2FkQmFja0ZvcndhcmRM
aXN0RnJvbU90aGVyVmlldzpdKToKKyAgICAgICAgKC1bV2ViVmlldyBnb1RvQmFja0ZvcndhcmRJ
dGVtOl0pOgorICAgICAgICAoK1tXZWJWaWV3IF9zZXRDYWNoZU1vZGVsOl0pOgorCiAyMDE1LTAx
LTI4ICBEYW5hIEJ1cmthcnQgIDxkYnVya2FydEBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBB
U2FuIGZsYWcgc2V0dGluZ3MgZnJvbSBEZWJ1Z1JlbGVhc2UueGNjb25maWcgdG8gQmFzZS54Y2Nv
bmZpZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDY5ZjdjYjM3YzYwOWJlNTU0MjNiNTZiYzU0NGY4MDBl
M2ZiYjFlOTUuLmRmNWI4OWIwMDFhMzZlMzU5NWU1MmQ3YjZjMGRjMDRjNDExNTBhMTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNyBAQAogMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNo
ZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgorCisgICAgICAgICogV2ViVmll
dy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKToKKworMjAxNS0wMS0yOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIEZpeCB0eXBvIGluIG1h
cmtQYWdlc0ZvclZpc3RlZExpbmtTdHlsZVJlY2FsYygpCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA5NzcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGI4Njc4MWE1
Y2U0MmIxYTRlMTU3OTBlMThjYWI4MGVmOTc5MTY1ZGUuLjlkYjdkOTgxZjJiOGM1MGEzNGMwZjky
NmVlNzE1OGRmNTEwNTc2MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNS0wMS0y
OCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8g
bW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0p
OgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y2xvc2UpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Z29Gb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29CYWNrKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJkSXRlbSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
czo6cmVsZWFzZVBhZ2VDYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9j
ZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2Fj
aGVNb2RlbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKwog
MjAxNS0wMS0yOCAgRGFuYSBCdXJrYXJ0ICA8ZGJ1cmthcnRAYXBwbGUuY29tPgogCiAgICAgICAg
IE1vdmUgQVNhbiBmbGFnIHNldHRpbmdzIGZyb20gRGVidWdSZWxlYXNlLnhjY29uZmlnIHRvIEJh
c2UueGNjb25maWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYTFiYTQ4MTQ2YTkyYzEwZjExMzQ4
YTM3YjBhYzk5MTY3NGM4ZDBlNS4uNjU1OTYzZTlmOGJiODQ3Zjk5NjFlMjMxOGIyODRiNTVhNzhh
MDU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEyNDAsNyArMTI0MCw3IEBAIF9fWk43V2Vi
Q29yZTRQYWdlMzVyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9uc0V2CiBfX1pON1dl
YkNvcmU0UGFnZTM2c2V0U2hvdWxkU3VwcHJlc3NTY3JvbGxiYXJBbmltYXRpb25zRWIKIF9fWk43
V2ViQ29yZTRQYWdlMzZzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNFdgogX19a
TjdXZWJDb3JlNFBhZ2UzN3NldEluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGVFYgot
X19aTjdXZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUE5TXzExSGlzdG9yeUl0ZW1FTlNfMTNGcmFtZUxv
YWRUeXBlRQorX19aTjdXZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUk5TXzExSGlzdG9yeUl0ZW1FTlNf
MTNGcmFtZUxvYWRUeXBlRQogX19aTjdXZWJDb3JlNFBhZ2U4c2V0TXV0ZWRFYgogX19aTjdXZWJD
b3JlNFBhZ2U5aW5pdEdyb3VwRXYKIF9fWk43V2ViQ29yZTRQYWdlQzFFUk5TXzE3UGFnZUNvbmZp
Z3VyYXRpb25FCkBAIC0xNjA3LDEwICsxNjA3LDEwIEBAIF9fWk43V2ViQ29yZTlKU0VsZW1lbnQ2
c19pbmZvRQogX19aTjdXZWJDb3JlOUpTRWxlbWVudDl0b1dyYXBwZWRFTjNKU0M3SlNWYWx1ZUUK
IF9fWk43V2ViQ29yZTlMYXllclBvb2xDMUV2CiBfX1pON1dlYkNvcmU5TGF5ZXJQb29sRDFFdgot
X19aTjdXZWJDb3JlOVBhZ2VDYWNoZTExc2V0Q2FwYWNpdHlFaQotX19aTjdXZWJDb3JlOVBhZ2VD
YWNoZTE4cHJ1bmVUb0NhcGFjaXR5Tm93RWlOU18xM1BydW5pbmdSZWFzb25FCitfX1pON1dlYkNv
cmU5UGFnZUNhY2hlMTBzZXRNYXhTaXplRWoKK19fWk43V2ViQ29yZTlQYWdlQ2FjaGUxNHBydW5l
VG9TaXplTm93RWpOU18xM1BydW5pbmdSZWFzb25FCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMzRt
YXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjRXYKLV9fWk43V2ViQ29yZTlQYWdlQ2Fj
aGU2cmVtb3ZlRVBOU18xMUhpc3RvcnlJdGVtRQorX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTZyZW1v
dmVFUk5TXzExSGlzdG9yeUl0ZW1FCiBfX1pON1dlYkNvcmU5UGFnZUNhY2hlNnNoYXJlZEV2CiBf
X1pON1dlYkNvcmU5UGFnZUdyb3VwOXBhZ2VHcm91cEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2Vi
Q29yZTlTY3JvbGxiYXIxMW1vdXNlRXhpdGVkRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcAppbmRleCA5YzE2NzIyNGE3OWRlM2ZiNzlmM2I4
ODU2NWE1ZDRhNmRkMTdlZWQ4Li44NjI5NDRlZWIzY2M5Yzg0MzBhODI5ODEwYWVjYzc5MzdlZDg4
NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xs
ZXIuY3BwCkBAIC03MSwzMCArNzEsMjYgQEAgdm9pZCBCYWNrRm9yd2FyZENvbnRyb2xsZXI6Omdv
QmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
IWl0ZW0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFt
ZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOworICAgIGlmIChpdGVtKQorICAgICAgICBt
X3BhZ2UuZ29Ub0l0ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7
CiB9CiAKIGJvb2wgQmFja0ZvcndhcmRDb250cm9sbGVyOjpnb0JhY2soKQogewotICAgIEhpc3Rv
cnlJdGVtKiBpdGVtID0gYmFja0l0ZW0oKTsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpCYWNr
KTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBiYWNrSXRl
bSgpKSB7CisgICAgICAgIG1fcGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlwZTo6QmFj
ayk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IGJvb2wgQmFja0ZvcndhcmRDb250cm9sbGVyOjpnb0ZvcndhcmQoKQogewotICAgIEhpc3RvcnlJ
dGVtKiBpdGVtID0gZm9yd2FyZEl0ZW0oKTsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3
YXJkKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBmb3J3
YXJkSXRlbSgpKSB7CisgICAgICAgIG1fcGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlw
ZTo6Rm9yd2FyZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHZvaWQgQmFja0ZvcndhcmRDb250cm9sbGVyOjphZGRJdGVtKFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IGl0ZW0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0Jh
Y2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlz
dC5jcHAKaW5kZXggY2NlMDdmNDk5OTE0ZGUzN2IzMTE4YmEwNzhiM2Y5YTUwMjRjNzYwNS4uYjNh
ZDYxOTdlMmI3MWUxYWQ4MzgxZjNjNzNjNmRlZGM0ZTAwNThiOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tG
b3J3YXJkTGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAg
ICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKICAg
ICAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBtX2VudHJ5SGFz
aC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZShp
dGVtLmdldCgpKTsKKyAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVt
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzgsNyArNzgsNyBAQCB2b2lkIEJhY2tGb3J3YXJk
TGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAgICAgICBS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXNbMF07CiAgICAgICAgIG1fZW50cmll
cy5yZW1vdmUoMCk7CiAgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVtKTsKLSAgICAgICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKICAgICAgICAgbV9jdXJyZW50LS07CiAgICAgfQog
CkBAIC0xNzUsNyArMTc1LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGlu
dCBzaXplKQogICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFz
dCgpOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICBtX2VudHJ5SGFz
aC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKGl0ZW0u
Z2V0KCkpOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAg
fQogCiAgICAgaWYgKCFzaXplKQpAQCAtMjQyLDEyICsyNDIsMTAgQEAgdm9pZCBCYWNrRm9yd2Fy
ZExpc3Q6OnNldEN1cnJlbnQodW5zaWduZWQgbmV3Q3VycmVudCkKIGJvb2wgQmFja0ZvcndhcmRM
aXN0OjpjbGVhckFsbFBhZ2VDYWNoZXMoKQogewogICAgIGJvb2wgZGlkUmVtb3ZlQXRMZWFzdE9u
ZUl0ZW0gPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2VudHJpZXMuc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBIaXN0
b3J5SXRlbSogaXRlbSA9IG1fZW50cmllc1tpXS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBtX2VudHJpZXMpIHsKICAgICAgICAgaWYgKGl0ZW0tPmlzSW5QYWdlQ2FjaGUoKSkgewogICAg
ICAgICAgICAgZGlkUmVtb3ZlQXRMZWFzdE9uZUl0ZW0gPSB0cnVlOwotICAgICAgICAgICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGRpZFJl
bW92ZUF0TGVhc3RPbmVJdGVtOwpAQCAtMjU2LDEyICsyNTQsMTEgQEAgYm9vbCBCYWNrRm9yd2Fy
ZExpc3Q6OmNsZWFyQWxsUGFnZUNhY2hlcygpCiAKIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9z
ZSgpCiB7Ci0gICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSht
X2VudHJpZXNbaV0uZ2V0KCkpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1fZW50cmllcykKKyAg
ICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOwogICAgIG1fZW50cmllcy5j
bGVhcigpOwogICAgIG1fZW50cnlIYXNoLmNsZWFyKCk7Ci0gICAgbV9wYWdlID0gMDsKKyAgICBt
X3BhZ2UgPSBudWxscHRyOwogICAgIG1fY2xvc2VkID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L0hpc3RvcnlJdGVtLmNwcAppbmRleCAwYzQ3M2MwOTZjMWI1MWMxNWIwZTZjMmM5MmRl
NTlmMDUxNTM1ODEzLi4xYjUyNWRmMjhjNDQ3NmZmMjBmMzI2NTExYTNhMTRhYzU1MmJkNjFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBA
IHZvaWQgSGlzdG9yeUl0ZW06OnNldFVSTFN0cmluZyhjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
IAogdm9pZCBIaXN0b3J5SXRlbTo6c2V0VVJMKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkucmVtb3ZlKHRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVt
b3ZlKCp0aGlzKTsKICAgICBzZXRVUkxTdHJpbmcodXJsLnN0cmluZygpKTsKICAgICBjbGVhckRv
Y3VtZW50U3RhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFn
ZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAppbmRleCA5
ZjUzYTZiZjcyZmE2ZjMyNmFkMGE3NjA1YjU5NDhlMjc1OTU2OTc0Li5kMzk3YWZjZGFhNGI3YWI5
ZTNiM2NiMzczN2Y5YzU3ZjU1YmRiYjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L1BhZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE0
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyU3Rh
dGVNYWNoaW5lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUNv
bnRyb2xsZXIuaCIKLSNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKICNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRs
ZXIuaCIKQEAgLTExMCw3ICsxMDksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbG9nUGFnZUNhY2hl
RmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKFBhZ2UqIHBhZ2UsIGNvbnN0IFN0cmluZwogICAgIGxv
Z1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLT5tYWluRnJhbWUoKS5kaWFn
bm9zdGljTG9nZ2luZ0NsaWVudCgpLCByZWFzb24pOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9n
Q2FuQ2FjaGVGcmFtZURlY2lzaW9uKEZyYW1lJiBmcmFtZSwgRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQmIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCBpbnQgaW5kZW50TGV2ZWwpCitzdGF0aWMgdW5z
aWduZWQgbG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKEZyYW1lJiBmcmFtZSwgRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQmIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCB1bnNpZ25lZCBpbmRlbnRMZXZl
bCkKIHsKICAgICBQQ0xPRygiKy0tLSIpOwogICAgIGlmICghZnJhbWUubG9hZGVyKCkuZG9jdW1l
bnRMb2FkZXIoKSkgewpAQCAtMjM0LDcgKzIzMyw3IEBAIHN0YXRpYyB2b2lkIGxvZ0NhbkNhY2hl
UGFnZURlY2lzaW9uKFBhZ2UmIHBhZ2UpCiAgICAgaWYgKGN1cnJlbnRVUkwuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaW50IGluZGVudExldmVsID0gMDsgICAgCisgICAg
dW5zaWduZWQgaW5kZW50TGV2ZWwgPSAwOwogICAgIFBDTE9HKCItLS0tLS0tLVxuIERldGVybWlu
aW5nIGlmIHBhZ2UgY2FuIGJlIGNhY2hlZDoiKTsKICAgICAKICAgICB1bnNpZ25lZCByZWplY3RS
ZWFzb25zID0gMDsKQEAgLTI5NywyNiArMjk2LDE3IEBAIFBhZ2VDYWNoZSYgUGFnZUNhY2hlOjpz
aGFyZWQoKQogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQYWdlQ2FjaGU+IGdsb2JhbFBhZ2VD
YWNoZTsKICAgICByZXR1cm4gZ2xvYmFsUGFnZUNhY2hlOwogfQotCi1QYWdlQ2FjaGU6OlBhZ2VD
YWNoZSgpCi0gICAgOiBtX2NhcGFjaXR5KDApCi0gICAgLCBtX3NpemUoMCkKLSAgICAsIG1faGVh
ZCgwKQotICAgICwgbV90YWlsKDApCi0gICAgLCBtX3Nob3VsZENsZWFyQmFja2luZ1N0b3Jlcyhm
YWxzZSkKLXsKLX0KICAgICAKLWJvb2wgUGFnZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWluaW5n
VGhpc0ZyYW1lKEZyYW1lKiBmcmFtZSkKK2Jvb2wgUGFnZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250
YWluaW5nVGhpc0ZyYW1lKEZyYW1lJiBmcmFtZSkKIHsKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9
IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgp
Lm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhp
c0ZyYW1lKGNoaWxkKSkKKyAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IGZyYW1lLnRyZWUoKS5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkgewor
ICAgICAgICBpZiAoIWNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoKmNoaWxkKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgRnJhbWVMb2FkZXImIGZy
YW1lTG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAgIEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRl
ciA9IGZyYW1lLmxvYWRlcigpOwogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9
IGZyYW1lTG9hZGVyLmRvY3VtZW50TG9hZGVyKCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUuZG9jdW1l
bnQoKTsKICAgICAKICAgICByZXR1cm4gZG9jdW1lbnRMb2FkZXIKICNpZiAhUExBVEZPUk0oSU9T
KQpAQCAtMzI2LDggKzMxNiw4IEBAIGJvb2wgUGFnZUNhY2hlOjpjYW5DYWNoZVBhZ2VDb250YWlu
aW5nVGhpc0ZyYW1lKEZyYW1lKiBmcmFtZSkKICNlbmRpZgogICAgICAgICAvLyBEbyBub3QgY2Fj
aGUgZXJyb3IgcGFnZXMgKHRoZXNlIGNhbiBiZSByZWNvZ25pemVkIGFzIHBhZ2VzIHdpdGggc3Vi
c3RpdHV0ZSBkYXRhIG9yIHVucmVhY2hhYmxlIFVSTHMpLgogICAgICAgICAmJiAhKGRvY3VtZW50
TG9hZGVyLT5zdWJzdGl0dXRlRGF0YSgpLmlzVmFsaWQoKSAmJiAhZG9jdW1lbnRMb2FkZXItPnN1
YnN0aXR1dGVEYXRhKCkuZmFpbGluZ1VSTCgpLmlzRW1wdHkoKSkKLSAgICAgICAgJiYgKCFmcmFt
ZUxvYWRlci5zdWJmcmFtZUxvYWRlcigpLmNvbnRhaW5zUGx1Z2lucygpIHx8IGZyYW1lLT5wYWdl
KCktPnNldHRpbmdzKCkucGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zKCkpCi0gICAgICAgICYmICEo
ZnJhbWUtPmlzTWFpbkZyYW1lKCkgJiYgZG9jdW1lbnQtPnVybCgpLnByb3RvY29sSXMoImh0dHBz
IikgJiYgZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0
b3JlKCkpCisgICAgICAgICYmICghZnJhbWVMb2FkZXIuc3ViZnJhbWVMb2FkZXIoKS5jb250YWlu
c1BsdWdpbnMoKSB8fCBmcmFtZS5wYWdlKCktPnNldHRpbmdzKCkucGFnZUNhY2hlU3VwcG9ydHNQ
bHVnaW5zKCkpCisgICAgICAgICYmICEoZnJhbWUuaXNNYWluRnJhbWUoKSAmJiBkb2N1bWVudC0+
dXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSAmJiBkb2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS5j
YWNoZUNvbnRyb2xDb250YWluc05vU3RvcmUoKSkKICAgICAgICAgJiYgIURhdGFiYXNlTWFuYWdl
cjo6bWFuYWdlcigpLmhhc09wZW5EYXRhYmFzZXMoZG9jdW1lbnQpCiAgICAgICAgICYmIGZyYW1l
TG9hZGVyLmhpc3RvcnkoKS5jdXJyZW50SXRlbSgpCiAgICAgICAgICYmICFmcmFtZUxvYWRlci5x
dWlja1JlZGlyZWN0Q29taW5nKCkKQEAgLTM1Nyw4ICszNDcsOCBAQCBib29sIFBhZ2VDYWNoZTo6
Y2FuQ2FjaGUoUGFnZSogcGFnZSkgY29uc3QKICAgICAvLyBvdmVyIGl0IGFnYWluIHdoZW4gd2Ug
bGVhdmUgdGhhdCBwYWdlLgogICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBwYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5sb2FkVHlwZSgpOwogICAgIAotICAgIHJldHVybiBtX2NhcGFjaXR5
ID4gMAotICAgICAgICAmJiBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKCZwYWdlLT5t
YWluRnJhbWUoKSkKKyAgICByZXR1cm4gbV9tYXhTaXplID4gMAorICAgICAgICAmJiBjYW5DYWNo
ZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKHBhZ2UtPm1haW5GcmFtZSgpKQogICAgICAgICAmJiBw
YWdlLT5zZXR0aW5ncygpLnVzZXNQYWdlQ2FjaGUoKQogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5U
QVRJT04pICYmICFQTEFURk9STShJT1MpCiAgICAgICAgICYmICFEZXZpY2VNb3Rpb25Db250cm9s
bGVyOjppc0FjdGl2ZUF0KHBhZ2UpCkBAIC0zNzMsMjcgKzM2MywyNCBAQCBib29sIFBhZ2VDYWNo
ZTo6Y2FuQ2FjaGUoUGFnZSogcGFnZSkgY29uc3QKICAgICAgICAgICAgIHx8IGxvYWRUeXBlID09
IEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CiB9CiAKLXZvaWQgUGFnZUNhY2hl
OjpwcnVuZVRvQ2FwYWNpdHlOb3coaW50IGNhcGFjaXR5LCBQcnVuaW5nUmVhc29uIHBydW5pbmdS
ZWFzb24pCit2b2lkIFBhZ2VDYWNoZTo6cHJ1bmVUb1NpemVOb3codW5zaWduZWQgc2l6ZSwgUHJ1
bmluZ1JlYXNvbiBwcnVuaW5nUmVhc29uKQogewotICAgIFRlbXBvcmFyeUNoYW5nZTxpbnQ+KG1f
Y2FwYWNpdHksIHN0ZDo6bWF4KGNhcGFjaXR5LCAwKSk7CisgICAgVGVtcG9yYXJ5Q2hhbmdlPHVu
c2lnbmVkPihtX21heFNpemUsIHNpemUpOwogICAgIHBydW5lKHBydW5pbmdSZWFzb24pOwogfQog
Ci12b2lkIFBhZ2VDYWNoZTo6c2V0Q2FwYWNpdHkoaW50IGNhcGFjaXR5KQordm9pZCBQYWdlQ2Fj
aGU6OnNldE1heFNpemUodW5zaWduZWQgbWF4U2l6ZSkKIHsKLSAgICBBU1NFUlQoY2FwYWNpdHkg
Pj0gMCk7Ci0gICAgbV9jYXBhY2l0eSA9IHN0ZDo6bWF4KGNhcGFjaXR5LCAwKTsKLQorICAgIG1f
bWF4U2l6ZSA9IG1heFNpemU7CiAgICAgcHJ1bmUoUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7CiB9CiAK
LWludCBQYWdlQ2FjaGU6OmZyYW1lQ291bnQoKSBjb25zdAordW5zaWduZWQgUGFnZUNhY2hlOjpm
cmFtZUNvdW50KCkgY29uc3QKIHsKLSAgICBpbnQgZnJhbWVDb3VudCA9IDA7Ci0gICAgZm9yIChI
aXN0b3J5SXRlbSogY3VycmVudCA9IG1faGVhZDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
Pm1fbmV4dCkgewotICAgICAgICArK2ZyYW1lQ291bnQ7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50
LT5tX2NhY2hlZFBhZ2UpOwotICAgICAgICBmcmFtZUNvdW50ICs9IGN1cnJlbnQtPm1fY2FjaGVk
UGFnZS0+Y2FjaGVkTWFpbkZyYW1lKCktPmRlc2NlbmRhbnRGcmFtZUNvdW50KCk7CisgICAgdW5z
aWduZWQgZnJhbWVDb3VudCA9IG1faXRlbXMuc2l6ZSgpOworICAgIGZvciAoYXV0byYgaXRlbSA6
IG1faXRlbXMpIHsKKyAgICAgICAgQVNTRVJUKGl0ZW0tPm1fY2FjaGVkUGFnZSk7CisgICAgICAg
IGZyYW1lQ291bnQgKz0gaXRlbS0+bV9jYWNoZWRQYWdlLT5jYWNoZWRNYWluRnJhbWUoKS0+ZGVz
Y2VuZGFudEZyYW1lQ291bnQoKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGZyYW1lQ291bnQ7
CkBAIC00MDEsMjYgKzM4OCwyNiBAQCBpbnQgUGFnZUNhY2hlOjpmcmFtZUNvdW50KCkgY29uc3QK
IAogdm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKQog
ewotICAgIGZvciAoSGlzdG9yeUl0ZW0qIGN1cnJlbnQgPSBtX2hlYWQ7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5tX25leHQpIHsKLSAgICAgICAgQVNTRVJUKGN1cnJlbnQtPm1fY2FjaGVk
UGFnZSk7Ci0gICAgICAgIGN1cnJlbnQtPm1fY2FjaGVkUGFnZS0+bWFya0ZvclZpc2l0ZWRMaW5r
U3R5bGVSZWNhbGMoKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAg
IEFTU0VSVChpdGVtLT5tX2NhY2hlZFBhZ2UpOworICAgICAgICBpdGVtLT5tX2NhY2hlZFBhZ2Ut
Pm1hcmtGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CiAgICAgfQogfQogCi12b2lkIFBhZ2VD
YWNoZTo6bWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKFBhZ2UqIHBhZ2UpCit2b2lkIFBhZ2VD
YWNoZTo6bWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKFBhZ2UmIHBhZ2UpCiB7Ci0gICAgZm9y
IChIaXN0b3J5SXRlbSogY3VycmVudCA9IG1faGVhZDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJl
bnQtPm1fbmV4dCkgewotICAgICAgICBDYWNoZWRQYWdlJiBjYWNoZWRQYWdlID0gKmN1cnJlbnQt
Pm1fY2FjaGVkUGFnZTsKLSAgICAgICAgaWYgKCZwYWdlLT5tYWluRnJhbWUoKSA9PSAmY2FjaGVk
UGFnZS5jYWNoZWRNYWluRnJhbWUoKS0+dmlldygpLT5mcmFtZSgpKQorICAgIGZvciAoYXV0byYg
aXRlbSA6IG1faXRlbXMpIHsKKyAgICAgICAgQ2FjaGVkUGFnZSYgY2FjaGVkUGFnZSA9ICppdGVt
LT5tX2NhY2hlZFBhZ2U7CisgICAgICAgIGlmICgmcGFnZS5tYWluRnJhbWUoKSA9PSAmY2FjaGVk
UGFnZS5jYWNoZWRNYWluRnJhbWUoKS0+dmlldygpLT5mcmFtZSgpKQogICAgICAgICAgICAgY2Fj
aGVkUGFnZS5tYXJrRm9yRnVsbFN0eWxlUmVjYWxjKCk7CiAgICAgfQogfQogCi12b2lkIFBhZ2VD
YWNoZTo6bWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKFBhZ2UqIHBhZ2UpCit2b2lkIFBh
Z2VDYWNoZTo6bWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKFBhZ2UmIHBhZ2UpCiB7Ci0g
ICAgZm9yIChIaXN0b3J5SXRlbSogY3VycmVudCA9IG1faGVhZDsgY3VycmVudDsgY3VycmVudCA9
IGN1cnJlbnQtPm1fbmV4dCkgewotICAgICAgICBDYWNoZWRQYWdlJiBjYWNoZWRQYWdlID0gKmN1
cnJlbnQtPm1fY2FjaGVkUGFnZTsKLSAgICAgICAgaWYgKCZwYWdlLT5tYWluRnJhbWUoKSA9PSAm
Y2FjaGVkUGFnZS5jYWNoZWRNYWluRnJhbWUoKS0+dmlldygpLT5mcmFtZSgpKQorICAgIGZvciAo
YXV0byYgaXRlbSA6IG1faXRlbXMpIHsKKyAgICAgICAgQ2FjaGVkUGFnZSYgY2FjaGVkUGFnZSA9
ICppdGVtLT5tX2NhY2hlZFBhZ2U7CisgICAgICAgIGlmICgmcGFnZS5tYWluRnJhbWUoKSA9PSAm
Y2FjaGVkUGFnZS5jYWNoZWRNYWluRnJhbWUoKS0+dmlldygpLT5mcmFtZSgpKQogICAgICAgICAg
ICAgY2FjaGVkUGFnZS5tYXJrRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKCk7CiAgICAgfQogfQpAQCAt
NDI4LDkgKzQxNSw5IEBAIHZvaWQgUGFnZUNhY2hlOjptYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNo
YW5nZWQoUGFnZSogcGFnZSkKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiB2b2lkIFBhZ2VDYWNo
ZTo6bWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiB7Ci0gICAgZm9yIChI
aXN0b3J5SXRlbSogY3VycmVudCA9IG1faGVhZDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
Pm1fbmV4dCkgewotICAgICAgICBBU1NFUlQoY3VycmVudC0+bV9jYWNoZWRQYWdlKTsKLSAgICAg
ICAgY3VycmVudC0+bV9jYWNoZWRQYWdlLT5tYXJrRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdl
ZCgpOworICAgIGZvciAoYXV0byYgaXRlbSA6IG1faXRlbXMpIHsKKyAgICAgICAgQVNTRVJUKGl0
ZW0tPm1fY2FjaGVkUGFnZSk7CisgICAgICAgIGl0ZW0tPm1fY2FjaGVkUGFnZS0+bWFya0ZvckNh
cHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTQ0Miw3ICs0
MjksNyBAQCBzdGF0aWMgU3RyaW5nIHBydW5pbmdSZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5
KFBydW5pbmdSZWFzb24gcHJ1bmluZ1JlYXNvbikKICAgICAgICAgcmV0dXJuIERpYWdub3N0aWNM
b2dnaW5nS2V5czo6cHJ1bmVkRHVlVG9NZW1vcnlQcmVzc3VyZUtleSgpOwogICAgIGNhc2UgUHJ1
bmluZ1JlYXNvbjo6UHJvY2Vzc1N1c3BlbmRlZDoKICAgICAgICAgcmV0dXJuIERpYWdub3N0aWNM
b2dnaW5nS2V5czo6cHJ1bmVkRHVlVG9Qcm9jZXNzU3VzcGVuZGVkKCk7Ci0gICAgY2FzZSBQcnVu
aW5nUmVhc29uOjpSZWFjaGVkQ2FwYWNpdHk6CisgICAgY2FzZSBQcnVuaW5nUmVhc29uOjpSZWFj
aGVkTWF4U2l6ZToKICAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cHJ1bmVk
RHVlVG9DYXBhY2l0eVJlYWNoZWQoKTsKICAgICBjYXNlIFBydW5pbmdSZWFzb246Ok5vbmU6CiAg
ICAgICAgIGJyZWFrOwpAQCAtNDUxLDQ1ICs0MzgsMzMgQEAgc3RhdGljIFN0cmluZyBwcnVuaW5n
UmVhc29uVG9EaWFnbm9zdGljTG9nZ2luZ0tleShQcnVuaW5nUmVhc29uIHBydW5pbmdSZWFzb24p
CiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLXZvaWQgUGFnZUNhY2hlOjphZGQoUGFz
c1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSwgUGFnZSYgcGFnZSkKK3ZvaWQgUGFnZUNhY2hl
OjphZGQoSGlzdG9yeUl0ZW0mIGl0ZW0sIFBhZ2UmIHBhZ2UpCiB7Ci0gICAgQVNTRVJUKHBycEl0
ZW0pOwogICAgIEFTU0VSVChjYW5DYWNoZSgmcGFnZSkpOwotICAgIAotICAgIEhpc3RvcnlJdGVt
KiBpdGVtID0gcHJwSXRlbS5sZWFrUmVmKCk7IC8vIEJhbGFuY2VkIGluIHJlbW92ZSgpLgogCiAg
ICAgLy8gUmVtb3ZlIHN0YWxlIGNhY2hlIGVudHJ5IGlmIG5lY2Vzc2FyeS4KLSAgICBpZiAoaXRl
bS0+bV9jYWNoZWRQYWdlKQotICAgICAgICByZW1vdmUoaXRlbSk7CisgICAgcmVtb3ZlKGl0ZW0p
OwogCi0gICAgaXRlbS0+bV9jYWNoZWRQYWdlID0gc3RkOjptYWtlX3VuaXF1ZTxDYWNoZWRQYWdl
PihwYWdlKTsKLSAgICBpdGVtLT5tX3BydW5pbmdSZWFzb24gPSBQcnVuaW5nUmVhc29uOjpOb25l
OwotICAgIGFkZFRvTFJVTGlzdChpdGVtKTsKLSAgICArK21fc2l6ZTsKKyAgICBpdGVtLm1fY2Fj
aGVkUGFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVkUGFnZT4ocGFnZSk7CisgICAgaXRlbS5t
X3BydW5pbmdSZWFzb24gPSBQcnVuaW5nUmVhc29uOjpOb25lOworICAgIG1faXRlbXMuYWRkKCZp
dGVtKTsKICAgICAKLSAgICBwcnVuZShQcnVuaW5nUmVhc29uOjpSZWFjaGVkQ2FwYWNpdHkpOwor
ICAgIHBydW5lKFBydW5pbmdSZWFzb246OlJlYWNoZWRNYXhTaXplKTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPENhY2hlZFBhZ2U+IFBhZ2VDYWNoZTo6dGFrZShIaXN0b3J5SXRlbSogaXRlbSwgUGFn
ZSogcGFnZSkKK3N0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBQYWdlQ2FjaGU6OnRha2UoSGlz
dG9yeUl0ZW0mIGl0ZW0sIFBhZ2UqIHBhZ2UpCiB7Ci0gICAgaWYgKCFpdGVtKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBjYWNoZWRQ
YWdlID0gV1RGOjptb3ZlKGl0ZW0tPm1fY2FjaGVkUGFnZSk7Ci0KLSAgICByZW1vdmVGcm9tTFJV
TGlzdChpdGVtKTsKLSAgICAtLW1fc2l6ZTsKLQotICAgIGl0ZW0tPmRlcmVmKCk7IC8vIEJhbGFu
Y2VkIGluIGFkZCgpLgotCi0gICAgaWYgKCFjYWNoZWRQYWdlKSB7Ci0gICAgICAgIGlmIChpdGVt
LT5tX3BydW5pbmdSZWFzb24gIT0gUHJ1bmluZ1JlYXNvbjo6Tm9uZSkKLSAgICAgICAgICAgIGxv
Z1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBwcnVuaW5nUmVhc29uVG9E
aWFnbm9zdGljTG9nZ2luZ0tleShpdGVtLT5tX3BydW5pbmdSZWFzb24pKTsKKyAgICBpZiAoIWl0
ZW0ubV9jYWNoZWRQYWdlKSB7CisgICAgICAgIGlmIChpdGVtLm1fcHJ1bmluZ1JlYXNvbiAhPSBQ
cnVuaW5nUmVhc29uOjpOb25lKQorICAgICAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdu
b3N0aWNNZXNzYWdlKHBhZ2UsIHBydW5pbmdSZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5KGl0
ZW0ubV9wcnVuaW5nUmVhc29uKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gV1RGOjptb3ZlKGl0
ZW0ubV9jYWNoZWRQYWdlKTsKKyAgICBtX2l0ZW1zLnJlbW92ZSgmaXRlbSk7CisKICAgICBpZiAo
Y2FjaGVkUGFnZS0+aGFzRXhwaXJlZCgpKSB7Ci0gICAgICAgIExPRyhQYWdlQ2FjaGUsICJOb3Qg
cmVzdG9yaW5nIHBhZ2UgZm9yICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2Fj
aGUgZW50cnkgaGFzIGV4cGlyZWQiLCBpdGVtLT51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgICAgIExPRyhQYWdlQ2FjaGUsICJOb3QgcmVzdG9yaW5nIHBhZ2UgZm9yICVzIGZy
b20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUgZW50cnkgaGFzIGV4cGlyZWQiLCBp
dGVtLnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgbG9nUGFnZUNhY2hl
RmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKHBhZ2UsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6ZXhw
aXJlZEtleSgpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNDk3LDc4ICs0
NzIsNDEgQEAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IFBhZ2VDYWNoZTo6dGFrZShIaXN0
b3J5SXRlbSogaXRlbSwgUGFnZSogcGFnZSkKICAgICByZXR1cm4gY2FjaGVkUGFnZTsKIH0KIAot
Q2FjaGVkUGFnZSogUGFnZUNhY2hlOjpnZXQoSGlzdG9yeUl0ZW0qIGl0ZW0sIFBhZ2UqIHBhZ2Up
CitDYWNoZWRQYWdlKiBQYWdlQ2FjaGU6OmdldChIaXN0b3J5SXRlbSYgaXRlbSwgUGFnZSogcGFn
ZSkgY29uc3QKIHsKLSAgICBpZiAoIWl0ZW0pCisgICAgQ2FjaGVkUGFnZSogY2FjaGVkUGFnZSA9
IGl0ZW0ubV9jYWNoZWRQYWdlLmdldCgpOworICAgIGlmICghY2FjaGVkUGFnZSkgeworICAgICAg
ICBpZiAoaXRlbS5tX3BydW5pbmdSZWFzb24gIT0gUHJ1bmluZ1JlYXNvbjo6Tm9uZSkKKyAgICAg
ICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBwcnVuaW5n
UmVhc29uVG9EaWFnbm9zdGljTG9nZ2luZ0tleShpdGVtLm1fcHJ1bmluZ1JlYXNvbikpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAKLSAgICBpZiAoQ2FjaGVkUGFnZSogY2FjaGVk
UGFnZSA9IGl0ZW0tPm1fY2FjaGVkUGFnZS5nZXQoKSkgewotICAgICAgICBpZiAoIWNhY2hlZFBh
Z2UtPmhhc0V4cGlyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBjYWNoZWRQYWdlOwotICAgICAg
ICAKLSAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJv
bSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIGl0
ZW0tPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBpZiAoY2FjaGVkUGFnZS0+
aGFzRXhwaXJlZCgpKSB7CisgICAgICAgIExPRyhQYWdlQ2FjaGUsICJOb3QgcmVzdG9yaW5nIHBh
Z2UgZm9yICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUgZW50cnkgaGFz
IGV4cGlyZWQiLCBpdGVtLnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAg
bG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKHBhZ2UsIERpYWdub3N0aWNMb2dn
aW5nS2V5czo6ZXhwaXJlZEtleSgpKTsKICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1v
dmUoaXRlbSk7Ci0gICAgfSBlbHNlIGlmIChpdGVtLT5tX3BydW5pbmdSZWFzb24gIT0gUHJ1bmlu
Z1JlYXNvbjo6Tm9uZSkKLSAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNz
YWdlKHBhZ2UsIHBydW5pbmdSZWFzb25Ub0RpYWdub3N0aWNMb2dnaW5nS2V5KGl0ZW0tPm1fcHJ1
bmluZ1JlYXNvbikpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVkUGFnZTsKIH0KIAotdm9pZCBQYWdlQ2FjaGU6
OnJlbW92ZShIaXN0b3J5SXRlbSogaXRlbSkKK3ZvaWQgUGFnZUNhY2hlOjpyZW1vdmUoSGlzdG9y
eUl0ZW0mIGl0ZW0pCiB7CiAgICAgLy8gU2FmZWx5IGlnbm9yZSBhdHRlbXB0cyB0byByZW1vdmUg
aXRlbXMgbm90IGluIHRoZSBjYWNoZS4KLSAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0tPm1fY2FjaGVk
UGFnZSkKKyAgICBpZiAoIWl0ZW0ubV9jYWNoZWRQYWdlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpdGVtLT5tX2NhY2hlZFBhZ2UgPSBudWxscHRyOwotICAgIHJlbW92ZUZyb21MUlVMaXN0KGl0
ZW0pOwotICAgIC0tbV9zaXplOwotCi0gICAgaXRlbS0+ZGVyZWYoKTsgLy8gQmFsYW5jZWQgaW4g
YWRkKCkuCisgICAgaXRlbS5tX2NhY2hlZFBhZ2UgPSBudWxscHRyOworICAgIG1faXRlbXMucmVt
b3ZlKCZpdGVtKTsKIH0KIAogdm9pZCBQYWdlQ2FjaGU6OnBydW5lKFBydW5pbmdSZWFzb24gcHJ1
bmluZ1JlYXNvbikKIHsKLSAgICB3aGlsZSAobV9zaXplID4gbV9jYXBhY2l0eSkgewotICAgICAg
ICBBU1NFUlQobV90YWlsICYmIG1fdGFpbC0+bV9jYWNoZWRQYWdlKTsKLSAgICAgICAgbV90YWls
LT5tX3BydW5pbmdSZWFzb24gPSBwcnVuaW5nUmVhc29uOwotICAgICAgICByZW1vdmUobV90YWls
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUGFnZUNhY2hlOjphZGRUb0xSVUxpc3QoSGlzdG9yeUl0ZW0q
IGl0ZW0pCi17Ci0gICAgaXRlbS0+bV9uZXh0ID0gbV9oZWFkOwotICAgIGl0ZW0tPm1fcHJldiA9
IDA7Ci0KLSAgICBpZiAobV9oZWFkKSB7Ci0gICAgICAgIEFTU0VSVChtX3RhaWwpOwotICAgICAg
ICBtX2hlYWQtPm1fcHJldiA9IGl0ZW07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKCFt
X3RhaWwpOwotICAgICAgICBtX3RhaWwgPSBpdGVtOwotICAgIH0KLQotICAgIG1faGVhZCA9IGl0
ZW07Ci19Ci0KLXZvaWQgUGFnZUNhY2hlOjpyZW1vdmVGcm9tTFJVTGlzdChIaXN0b3J5SXRlbSog
aXRlbSkKLXsKLSAgICBpZiAoIWl0ZW0tPm1fbmV4dCkgewotICAgICAgICBBU1NFUlQoaXRlbSA9
PSBtX3RhaWwpOwotICAgICAgICBtX3RhaWwgPSBpdGVtLT5tX3ByZXY7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKGl0ZW0gIT0gbV90YWlsKTsKLSAgICAgICAgaXRlbS0+bV9uZXh0LT5t
X3ByZXYgPSBpdGVtLT5tX3ByZXY7Ci0gICAgfQotCi0gICAgaWYgKCFpdGVtLT5tX3ByZXYpIHsK
LSAgICAgICAgQVNTRVJUKGl0ZW0gPT0gbV9oZWFkKTsKLSAgICAgICAgbV9oZWFkID0gaXRlbS0+
bV9uZXh0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChpdGVtICE9IG1faGVhZCk7Ci0g
ICAgICAgIGl0ZW0tPm1fcHJldi0+bV9uZXh0ID0gaXRlbS0+bV9uZXh0OworICAgIHdoaWxlIChw
YWdlQ291bnQoKSA+IG1heFNpemUoKSkgeworICAgICAgICBhdXRvJiBvbGRlc3RJdGVtID0gbV9p
dGVtcy5maXJzdCgpOworICAgICAgICBvbGRlc3RJdGVtLT5tX2NhY2hlZFBhZ2UgPSBudWxscHRy
OworICAgICAgICBvbGRlc3RJdGVtLT5tX3BydW5pbmdSZWFzb24gPSBwcnVuaW5nUmVhc29uOwor
ICAgICAgICBtX2l0ZW1zLnJlbW92ZUZpcnN0KCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvaGlzdG9y
eS9QYWdlQ2FjaGUuaAppbmRleCBjMzEwZDRlMjgxYjRjOTkyOWFkYTY5OWEyZmY4OWQzZjQ0OTU5
N2ZkLi45NTM2YTlmODZkZjIxNGRhMzFhYzRhZmU5ZTM3NDI3YTQ4NjUzOTFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvUGFnZUNhY2hlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3NyArMjYsNjYgQEAKICNpZm5kZWYgUGFnZUNhY2hl
X2gKICNkZWZpbmUgUGFnZUNhY2hlX2gKIAorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5j
bHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENhY2hlZFBh
Z2U7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgSGlzdG9yeUl0ZW07Ci0gICAgY2xhc3Mg
UGFnZTsKK2NsYXNzIENhY2hlZFBhZ2U7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFBhZ2U7CiAKLSAg
ICBlbnVtIGNsYXNzIFBydW5pbmdSZWFzb24geyBOb25lLCBQcm9jZXNzU3VzcGVuZGVkLCBNZW1v
cnlQcmVzc3VyZSwgUmVhY2hlZENhcGFjaXR5IH07Ci0gICAgCi0gICAgY2xhc3MgUGFnZUNhY2hl
IHsKLSAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZUNhY2hlKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICAvLyBGdW5jdGlvbiB0byBvYnRhaW4g
dGhlIGdsb2JhbCBwYWdlIGNhY2hlLgotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFn
ZUNhY2hlJiBzaGFyZWQoKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgY2FuQ2FjaGUoUGFnZSop
IGNvbnN0OworZW51bSBjbGFzcyBQcnVuaW5nUmVhc29uIHsgTm9uZSwgUHJvY2Vzc1N1c3BlbmRl
ZCwgTWVtb3J5UHJlc3N1cmUsIFJlYWNoZWRNYXhTaXplIH07CiAKLSAgICAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRDYXBhY2l0eShpbnQpOyAvLyBudW1iZXIgb2YgcGFnZXMgdG8gY2FjaGUK
LSAgICAgICAgaW50IGNhcGFjaXR5KCkgeyByZXR1cm4gbV9jYXBhY2l0eTsgfQotICAgICAgICAK
LSAgICAgICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4sIFBhZ2UmKTsgLy8gUHJ1
bmVzIGlmIGNhcGFjaXR5KCkgaXMgZXhjZWVkZWQuCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVtb3ZlKEhpc3RvcnlJdGVtKik7Ci0gICAgICAgIENhY2hlZFBhZ2UqIGdldChIaXN0b3J5
SXRlbSosIFBhZ2UqKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IHRha2Uo
SGlzdG9yeUl0ZW0qLCBQYWdlKik7CitjbGFzcyBQYWdlQ2FjaGUgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBhZ2VDYWNoZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIC8vIEZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIHBhZ2UgY2FjaGUuCisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFBhZ2VDYWNoZSYgc2hhcmVkKCk7CiAKLSAgICAgICAgaW50IHBh
Z2VDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgICAgICBXRUJDT1JFX0VYUE9S
VCBpbnQgZnJhbWVDb3VudCgpIGNvbnN0OworICAgIGJvb2wgY2FuQ2FjaGUoUGFnZSopIGNvbnN0
OwogCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbWFya1BhZ2VzRm9yVmlzaXRlZExpbmtT
dHlsZVJlY2FsYygpOworICAgIC8vIFVzZWQgd2hlbiBtZW1vcnkgaXMgbG93IHRvIHBydW5lIHNv
bWUgY2FjaGVkIHBhZ2VzLgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1bmVUb1NpemVOb3co
dW5zaWduZWQgbWF4U2l6ZSwgUHJ1bmluZ1JlYXNvbik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRNYXhTaXplKHVuc2lnbmVkKTsgLy8gbnVtYmVyIG9mIHBhZ2VzIHRvIGNhY2hlLgorICAg
IHVuc2lnbmVkIG1heFNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFNpemU7IH0KIAotICAgICAg
ICAvLyBXaWxsIG1hcmsgYWxsIGNhY2hlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVu
IHBhZ2UgYXMgbmVlZGluZyBzdHlsZSByZWNhbGMuCi0gICAgICAgIHZvaWQgbWFya1BhZ2VzRm9y
RnVsbFN0eWxlUmVjYWxjKFBhZ2UqKTsKKyAgICB2b2lkIGFkZChIaXN0b3J5SXRlbSYsIFBhZ2Um
KTsgLy8gUHJ1bmVzIGlmIG1heFNpemUoKSBpcyBleGNlZWRlZC4KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZShIaXN0b3J5SXRlbSYpOworICAgIENhY2hlZFBhZ2UqIGdldChIaXN0b3J5
SXRlbSYsIFBhZ2UqKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gdGFr
ZShIaXN0b3J5SXRlbSYsIFBhZ2UqKTsKIAotICAgICAgICAvLyBVc2VkIHdoZW4gbWVtb3J5IGlz
IGxvdyB0byBwcnVuZSBzb21lIGNhY2hlZCBwYWdlcy4KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBwcnVuZVRvQ2FwYWNpdHlOb3coaW50IGNhcGFjaXR5LCBQcnVuaW5nUmVhc29uKTsKKyAg
ICB1bnNpZ25lZCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2l0ZW1zLnNpemUoKTsgfQor
ICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGZyYW1lQ291bnQoKSBjb25zdDsKIAorICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgbWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwor
ICAgIC8vIFdpbGwgbWFyayBhbGwgY2FjaGVkIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2
ZW4gcGFnZSBhcyBuZWVkaW5nIHN0eWxlIHJlY2FsYy4KKyAgICB2b2lkIG1hcmtQYWdlc0ZvckZ1
bGxTdHlsZVJlY2FsYyhQYWdlJik7CisgICAgdm9pZCBtYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNo
YW5nZWQoUGFnZSYpOwogI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAgICAgdm9pZCBtYXJr
UGFnZXNGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgdm9pZCBtYXJrUGFnZXNG
b3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAjZW5kaWYKIAotICAgICAgICBib29sIHNo
b3VsZENsZWFyQmFja2luZ1N0b3JlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ2xlYXJCYWNr
aW5nU3RvcmVzOyB9Ci0gICAgICAgIHZvaWQgc2V0U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKGJv
b2wgZmxhZykgeyBtX3Nob3VsZENsZWFyQmFja2luZ1N0b3JlcyA9IGZsYWc7IH0KLSAgICAgICAg
dm9pZCBtYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQoUGFnZSopOworICAgIGJvb2wgc2hv
dWxkQ2xlYXJCYWNraW5nU3RvcmVzKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRDbGVhckJhY2tp
bmdTdG9yZXM7IH0KKyAgICB2b2lkIHNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyhib29sIGZs
YWcpIHsgbV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXMgPSBmbGFnOyB9CiAKLSAgICBwcml2YXRl
OgotICAgICAgICBQYWdlQ2FjaGUoKTsgLy8gVXNlIHNoYXJlZCgpIGluc3RlYWQuCi0gICAgICAg
IH5QYWdlQ2FjaGUoKTsgLy8gTm90IGltcGxlbWVudGVkIHRvIG1ha2Ugc3VyZSBub2JvZHkgYWNj
aWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0
b25zLgotICAgICAgICAKLSAgICAgICAgc3RhdGljIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmlu
Z1RoaXNGcmFtZShGcmFtZSopOworcHJpdmF0ZToKKyAgICBQYWdlQ2FjaGUoKSA9IGRlZmF1bHQ7
IC8vIFVzZSBzaGFyZWQoKSBpbnN0ZWFkLgorICAgIH5QYWdlQ2FjaGUoKSA9IGRlbGV0ZTsgLy8g
TWFrZSBzdXJlIG5vYm9keSBhY2NpZGVudGFsbHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9l
cyBub3QgZGVsZXRlIHNpbmdsZXRvbnMuCiAKLSAgICAgICAgdm9pZCBhZGRUb0xSVUxpc3QoSGlz
dG9yeUl0ZW0qKTsgLy8gQWRkcyB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KLSAgICAgICAgdm9p
ZCByZW1vdmVGcm9tTFJVTGlzdChIaXN0b3J5SXRlbSopOworICAgIHN0YXRpYyBib29sIGNhbkNh
Y2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUmKTsKIAotICAgICAgICB2b2lkIHBydW5l
KFBydW5pbmdSZWFzb24pOworICAgIHZvaWQgcHJ1bmUoUHJ1bmluZ1JlYXNvbik7CiAKLSAgICAg
ICAgaW50IG1fY2FwYWNpdHk7Ci0gICAgICAgIGludCBtX3NpemU7CisgICAgTGlzdEhhc2hTZXQ8
UmVmUHRyPEhpc3RvcnlJdGVtPj4gbV9pdGVtczsKKyAgICB1bnNpZ25lZCBtX21heFNpemUgezB9
OworICAgIGJvb2wgbV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXMge2ZhbHNlfTsKIAotICAgICAg
ICAvLyBMUlUgTGlzdAotICAgICAgICBIaXN0b3J5SXRlbSogbV9oZWFkOwotICAgICAgICBIaXN0
b3J5SXRlbSogbV90YWlsOwotICAgICAgICAKLSAgICAgICAgYm9vbCBtX3Nob3VsZENsZWFyQmFj
a2luZ1N0b3JlczsKLQotICAgICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxQ
YWdlQ2FjaGU+OwotICAgIH07CisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8
UGFnZUNhY2hlPjsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggOTBiNWEwYTMzZWM2YjhjYmZhMWQ1OTFhNmVmNmYw
OTIwZDRkN2RjNC4uOTVmZWY2MWUwNjBiMjZlODAwOGQ4NDUyYjZlNzIyNzFkOTU3MGFlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC05MjEsNyArOTIxLDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6bG9hZFVSTEludG9DaGlsZEZyYW1lKGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHJlZmVyZXIsIEYKICAgICAgICAgSGlzdG9yeUl0ZW0qIGNoaWxkSXRlbSA9IHBh
cmVudEl0ZW0tPmNoaWxkSXRlbVdpdGhUYXJnZXQoY2hpbGRGcmFtZS0+dHJlZSgpLnVuaXF1ZU5h
bWUoKSk7CiAgICAgICAgIGlmIChjaGlsZEl0ZW0pIHsKICAgICAgICAgICAgIGNoaWxkRnJhbWUt
PmxvYWRlcigpLm1fcmVxdWVzdGVkSGlzdG9yeUl0ZW0gPSBjaGlsZEl0ZW07Ci0gICAgICAgICAg
ICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5sb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKGNoaWxkSXRl
bSwgbG9hZFR5cGUoKSwgTWF5QXR0ZW1wdENhY2hlT25seUxvYWRGb3JGb3JtU3VibWlzc2lvbkl0
ZW0pOworICAgICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkubG9hZERpZmZlcmVudERvY3Vt
ZW50SXRlbSgqY2hpbGRJdGVtLCBsb2FkVHlwZSgpLCBNYXlBdHRlbXB0Q2FjaGVPbmx5TG9hZEZv
ckZvcm1TdWJtaXNzaW9uSXRlbSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xNzQwLDggKzE3NDAsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNp
b25hbExvYWQoKQogICAgIFJlZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlOwotICAgIGlmIChtX2xvYWRpbmdGcm9t
Q2FjaGVkUGFnZSkKLSAgICAgICAgY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkudGFr
ZShoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsKKyAgICBpZiAo
bV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2UgJiYgaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpKQor
ICAgICAgICBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFyZWQoKS50YWtlKCpoaXN0b3J5KCku
cHJvdmlzaW9uYWxJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsKIAogICAgIExPRyhQYWdlQ2FjaGUs
ICJXZWJDb3JlTG9hZGluZyAlczogQWJvdXQgdG8gY29tbWl0IHByb3Zpc2lvbmFsIGxvYWQgZnJv
bSBwcmV2aW91cyBVUkwgJyVzJyB0byBuZXcgVVJMICclcyciLCBtX2ZyYW1lLnRyZWUoKS51bmlx
dWVOYW1lKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKICAgICAgICAgbV9mcmFtZS5kb2N1bWVu
dCgpID8gbV9mcmFtZS5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9M
ZW5ndGgoKS51dGY4KCkuZGF0YSgpIDogIiIsCkBAIC0xNzU4LDExICsxNzU4LDExIEBAIHZvaWQg
RnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiAgICAgICAgICAgICBMT0coTWVt
b3J5UHJlc3N1cmUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgYmVjYXVzZSB1bmRlciBtZW1vcnkgcHJl
c3N1cmUgYXQ6ICVzIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CiAgICAgICAgICAgICBMT0coUGFn
ZUNhY2hlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIHRvIDAgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZSIp
OwogICAgICAgICAgICAgLy8gRG9uJ3QgY2FjaGUgYW55IHBhZ2UgaWYgd2UgYXJlIHVuZGVyIG1l
bW9yeSBwcmVzc3VyZS4KLSAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb0Nh
cGFjaXR5Tm93KDAsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKKyAgICAgICAgICAg
IFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVt
b3J5UHJlc3N1cmUpOwogICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbU1lbW9yeUxldmVsKCkgPD0g
bWVtb3J5TGV2ZWxUaHJlc2hvbGRUb1BydW5lUGFnZUNhY2hlKSB7CiAgICAgICAgICAgICBMT0co
TWVtb3J5UHJlc3N1cmUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgYmVjYXVzZSBzeXN0ZW0gbWVtb3J5
IGxldmVsIGlzICVkIGF0OiAlcyIsIHN5c3RlbU1lbW9yeUxldmVsKCksIF9fUFJFVFRZX0ZVTkNU
SU9OX18pOwogICAgICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFnZSBjYWNoZSB0
byAlZCBkdWUgdG8gbG93IG1lbW9yeSAobGV2ZWwgJWQgbGVzcyBvciBlcXVhbCB0byAlZCB0aHJl
c2hvbGQpIiwgUGFnZUNhY2hlOjpzaGFyZWQoKS5jYXBhY2l0eSgpIC8gMiwgc3lzdGVtTWVtb3J5
TGV2ZWwoKSwgbWVtb3J5TGV2ZWxUaHJlc2hvbGRUb1BydW5lUGFnZUNhY2hlKTsKLSAgICAgICAg
ICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb0NhcGFjaXR5Tm93KFBhZ2VDYWNoZTo6c2hh
cmVkKCkuY2FwYWNpdHkoKSAvIDIsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKKyAg
ICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coUGFnZUNhY2hlOjpz
aGFyZWQoKS5tYXhTaXplKCkgLyAyLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CiAg
ICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTE3NzEsOCArMTc3MSw4IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYg
d2UgbmVlZCB0byBjYWNoZSB0aGUgcGFnZSB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gaW50
byB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgogICAgIC8vIFdlIGFyZSBkb2luZyB0aGlzIGhlcmUg
YmVjYXVzZSB3ZSBrbm93IGZvciBzdXJlIHRoYXQgYSBuZXcgcGFnZSBpcyBhYm91dCB0byBiZSBs
b2FkZWQuCi0gICAgSGlzdG9yeUl0ZW0qIGl0ZW0gPSBoaXN0b3J5KCkuY3VycmVudEl0ZW0oKTsK
LSAgICBpZiAoIW1fZnJhbWUudHJlZSgpLnBhcmVudCgpICYmIFBhZ2VDYWNoZTo6c2hhcmVkKCku
Y2FuQ2FjaGUobV9mcmFtZS5wYWdlKCkpICYmICFpdGVtLT5pc0luUGFnZUNhY2hlKCkpCisgICAg
SGlzdG9yeUl0ZW0mIGl0ZW0gPSAqaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCk7CisgICAgaWYgKCFt
X2ZyYW1lLnRyZWUoKS5wYXJlbnQoKSAmJiBQYWdlQ2FjaGU6OnNoYXJlZCgpLmNhbkNhY2hlKG1f
ZnJhbWUucGFnZSgpKSAmJiAhaXRlbS5pc0luUGFnZUNhY2hlKCkpCiAgICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkuYWRkKGl0ZW0sICptX2ZyYW1lLnBhZ2UoKSk7CiAKICAgICBpZiAobV9sb2Fk
VHlwZSAhPSBGcmFtZUxvYWRUeXBlOjpSZXBsYWNlKQpAQCAtMzEyNywxNCArMzEyNywxNCBAQCBG
cmFtZSogRnJhbWVMb2FkZXI6OmZpbmRGcmFtZUZvck5hdmlnYXRpb24oY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBEb2N1bWVudCogYQogICAgICAgICBhY3RpdmVEb2N1bWVudCA9IG1fZnJhbWUu
ZG9jdW1lbnQoKTsKIAogICAgIGlmICghYWN0aXZlRG9jdW1lbnQtPmNhbk5hdmlnYXRlKGZyYW1l
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0
dXJuIGZyYW1lOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpsb2FkU2FtZURvY3VtZW50SXRlbShI
aXN0b3J5SXRlbSogaXRlbSkKK3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWRTYW1lRG9jdW1lbnRJdGVt
KEhpc3RvcnlJdGVtJiBpdGVtKQogewotICAgIEFTU0VSVChpdGVtLT5kb2N1bWVudFNlcXVlbmNl
TnVtYmVyKCkgPT0gaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCktPmRvY3VtZW50U2VxdWVuY2VOdW1i
ZXIoKSk7CisgICAgQVNTRVJUKGl0ZW0uZG9jdW1lbnRTZXF1ZW5jZU51bWJlcigpID09IGhpc3Rv
cnkoKS5jdXJyZW50SXRlbSgpLT5kb2N1bWVudFNlcXVlbmNlTnVtYmVyKCkpOwogCiAgICAgLy8g
U2F2ZSB1c2VyIHZpZXcgc3RhdGUgdG8gdGhlIGN1cnJlbnQgaGlzdG9yeSBpdGVtIGhlcmUgc2lu
Y2Ugd2UgZG9uJ3QgZG8gYSBub3JtYWwgbG9hZC4KICAgICAvLyBGSVhNRTogRG9lcyBmb3JtIHN0
YXRlIG5lZWQgdG8gYmUgc2F2ZWQgaGVyZSB0b28/CkBAIC0zMTQyLDEwICszMTQyLDEwIEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmxvYWRTYW1lRG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQog
ICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKSkKICAgICAgICAgdmlldy0+
c2V0V2FzU2Nyb2xsZWRCeVVzZXIoZmFsc2UpOwogCi0gICAgaGlzdG9yeSgpLnNldEN1cnJlbnRJ
dGVtKGl0ZW0pOworICAgIGhpc3RvcnkoKS5zZXRDdXJyZW50SXRlbSgmaXRlbSk7CiAgICAgICAg
IAogICAgIC8vIGxvYWRJblNhbWVEb2N1bWVudCgpIGFjdHVhbGx5IGNoYW5nZXMgdGhlIFVSTCBh
bmQgbm90aWZpZXMgbG9hZCBkZWxlZ2F0ZXMgb2YgYSAiZmFrZSIgbG9hZAotICAgIGxvYWRJblNh
bWVEb2N1bWVudChpdGVtLT51cmwoKSwgaXRlbS0+c3RhdGVPYmplY3QoKSwgZmFsc2UpOworICAg
IGxvYWRJblNhbWVEb2N1bWVudChpdGVtLnVybCgpLCBpdGVtLnN0YXRlT2JqZWN0KCksIGZhbHNl
KTsKIAogICAgIC8vIFJlc3RvcmUgdXNlciB2aWV3IHN0YXRlIGZyb20gdGhlIGN1cnJlbnQgaGlz
dG9yeSBpdGVtIGhlcmUgc2luY2Ugd2UgZG9uJ3QgZG8gYSBub3JtYWwgbG9hZC4KICAgICBoaXN0
b3J5KCkucmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCk7CkBAIC0zMTU0LDEwICsz
MTU0LDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRTYW1lRG9jdW1lbnRJdGVtKEhpc3RvcnlJ
dGVtKiBpdGVtKQogLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJlYWxseSBiZSBzcGxp
dCBpbnRvIGEgY291cGxlIHBpZWNlcywgc29tZSBvZgogLy8gd2hpY2ggc2hvdWxkIGJlIG1ldGhv
ZHMgb2YgSGlzdG9yeUNvbnRyb2xsZXIgYW5kIHNvbWUgb2Ygd2hpY2ggc2hvdWxkIGJlCiAvLyBt
ZXRob2RzIG9mIEZyYW1lTG9hZGVyLgotdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERv
Y3VtZW50SXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSwgRm9y
bVN1Ym1pc3Npb25DYWNoZUxvYWRQb2xpY3kgY2FjaGVMb2FkUG9saWN5KQordm9pZCBGcmFtZUxv
YWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSYgaXRlbSwgRnJhbWVM
b2FkVHlwZSBsb2FkVHlwZSwgRm9ybVN1Ym1pc3Npb25DYWNoZUxvYWRQb2xpY3kgY2FjaGVMb2Fk
UG9saWN5KQogewogICAgIC8vIFJlbWVtYmVyIHRoaXMgaXRlbSBzbyB3ZSBjYW4gdHJhdmVyc2Ug
YW55IGNoaWxkIGl0ZW1zIGFzIGNoaWxkIGZyYW1lcyBsb2FkCi0gICAgaGlzdG9yeSgpLnNldFBy
b3Zpc2lvbmFsSXRlbShpdGVtKTsKKyAgICBoaXN0b3J5KCkuc2V0UHJvdmlzaW9uYWxJdGVtKCZp
dGVtKTsKIAogICAgIGlmIChDYWNoZWRQYWdlKiBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFy
ZWQoKS5nZXQoaXRlbSwgbV9mcmFtZS5wYWdlKCkpKSB7CiAgICAgICAgIGF1dG8gZG9jdW1lbnRM
b2FkZXIgPSBjYWNoZWRQYWdlLT5kb2N1bWVudExvYWRlcigpOwpAQCAtMzE2NywxNyArMzE2Nywx
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJ
dGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgVVJMIGl0ZW1VUkwgPSBpdGVtLT51cmwoKTsKLSAgICBVUkwgaXRlbU9yaWdpbmFsVVJMID0g
aXRlbS0+b3JpZ2luYWxVUkwoKTsKKyAgICBVUkwgaXRlbVVSTCA9IGl0ZW0udXJsKCk7CisgICAg
VVJMIGl0ZW1PcmlnaW5hbFVSTCA9IGl0ZW0ub3JpZ2luYWxVUkwoKTsKICAgICBVUkwgY3VycmVu
dFVSTDsKICAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgY3VycmVudFVSTCA9IGRv
Y3VtZW50TG9hZGVyKCktPnVybCgpOwotICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEgPSBp
dGVtLT5mb3JtRGF0YSgpOworICAgIFJlZlB0cjxGb3JtRGF0YT4gZm9ybURhdGEgPSBpdGVtLmZv
cm1EYXRhKCk7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChpdGVtVVJMKTsKIAotICAg
IGlmICghaXRlbS0+cmVmZXJyZXIoKS5pc051bGwoKSkKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQ
UmVmZXJyZXIoaXRlbS0+cmVmZXJyZXIoKSk7CisgICAgaWYgKCFpdGVtLnJlZmVycmVyKCkuaXNO
dWxsKCkpCisgICAgICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKGl0ZW0ucmVmZXJyZXIoKSk7
CiAgICAgCiAgICAgLy8gSWYgdGhpcyB3YXMgYSByZXBvc3QgdGhhdCBmYWlsZWQgdGhlIHBhZ2Ug
Y2FjaGUsIHdlIG1pZ2h0IHRyeSB0byByZXBvc3QgdGhlIGZvcm0uCiAgICAgTmF2aWdhdGlvbkFj
dGlvbiBhY3Rpb247CkBAIC0zMTg2LDggKzMxODYsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2Fk
RGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxv
YQogCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiUE9TVCIpOwogICAgICAgICByZXF1
ZXN0LnNldEhUVFBCb2R5KGZvcm1EYXRhKTsKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQQ29udGVu
dFR5cGUoaXRlbS0+Zm9ybUNvbnRlbnRUeXBlKCkpOwotICAgICAgICBSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmco
aXRlbS0+cmVmZXJyZXIoKSk7CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUENvbnRlbnRUeXBlKGl0
ZW0uZm9ybUNvbnRlbnRUeXBlKCkpOworICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoaXRlbS5yZWZl
cnJlcigpKTsKICAgICAgICAgYWRkSFRUUE9yaWdpbklmTmVlZGVkKHJlcXVlc3QsIHNlY3VyaXR5
T3JpZ2luLT50b1N0cmluZygpKTsKIAogICAgICAgICAvLyBNYWtlIHN1cmUgdG8gYWRkIGV4dHJh
IGZpZWxkcyB0byB0aGUgcmVxdWVzdCBhZnRlciB0aGUgT3JpZ2luIGhlYWRlciBpcyBhZGRlZCBm
b3IgdGhlIEZvcm1EYXRhIGNhc2UuCkBAIC0zMjQyLDExICszMjQyLDExIEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1l
TG9hZFR5cGUgbG9hCiB9CiAKIC8vIExvYWRzIGNvbnRlbnQgaW50byB0aGlzIGZyYW1lLCBhcyBz
cGVjaWZpZWQgYnkgaGlzdG9yeSBpdGVtCi12b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0
b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSkKK3ZvaWQgRnJhbWVMb2FkZXI6
OmxvYWRJdGVtKEhpc3RvcnlJdGVtJiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKQogewot
ICAgIG1fcmVxdWVzdGVkSGlzdG9yeUl0ZW0gPSBpdGVtOworICAgIG1fcmVxdWVzdGVkSGlzdG9y
eUl0ZW0gPSAmaXRlbTsKICAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBoaXN0b3J5KCku
Y3VycmVudEl0ZW0oKTsKLSAgICBib29sIHNhbWVEb2N1bWVudE5hdmlnYXRpb24gPSBjdXJyZW50
SXRlbSAmJiBpdGVtLT5zaG91bGREb1NhbWVEb2N1bWVudE5hdmlnYXRpb25UbyhjdXJyZW50SXRl
bSk7CisgICAgYm9vbCBzYW1lRG9jdW1lbnROYXZpZ2F0aW9uID0gY3VycmVudEl0ZW0gJiYgaXRl
bS5zaG91bGREb1NhbWVEb2N1bWVudE5hdmlnYXRpb25UbyhjdXJyZW50SXRlbSk7CiAKICAgICBp
ZiAoc2FtZURvY3VtZW50TmF2aWdhdGlvbikKICAgICAgICAgbG9hZFNhbWVEb2N1bWVudEl0ZW0o
aXRlbSk7CkBAIC0zMjYwLDExICszMjYwLDEyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJldHJ5QWZ0
ZXJGYWlsZWRDYWNoZU9ubHlNYWluUmVzb3VyY2VMb2FkKCkKICAgICBBU1NFUlQoIW1fbG9hZGlu
Z0Zyb21DYWNoZWRQYWdlKTsKICAgICAvLyBXZSBvbmx5IHVzZSBjYWNoZS1vbmx5IGxvYWRzIHRv
IGF2b2lkIHJlc3VibWl0dGluZyBmb3Jtcy4KICAgICBBU1NFUlQoaXNCYWNrRm9yd2FyZExvYWRU
eXBlKG1fbG9hZFR5cGUpKTsKKyAgICBBU1NFUlQoaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgp
KTsKICAgICBBU1NFUlQoaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpLT5mb3JtRGF0YSgpKTsK
ICAgICBBU1NFUlQoaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpID09IG1fcmVxdWVzdGVkSGlz
dG9yeUl0ZW0uZ2V0KCkpOwogCiAgICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IG1fbG9hZFR5
cGU7Ci0gICAgSGlzdG9yeUl0ZW0qIGl0ZW0gPSBoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCk7
CisgICAgSGlzdG9yeUl0ZW0mIGl0ZW0gPSAqaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpOwog
CiAgICAgc3RvcEFsbExvYWRlcnMoU2hvdWxkTm90Q2xlYXJQcm92aXNpb25hbEl0ZW0pOwogICAg
IGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oaXRlbSwgbG9hZFR5cGUsIE1heU5vdEF0dGVtcHRD
YWNoZU9ubHlMb2FkRm9yRm9ybVN1Ym1pc3Npb25JdGVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmgKaW5kZXggNmQ1NTgwNjY1N2YxYzkzMzljNDBlOTAyM2Y2MDJhYmU5OWNmNGNkYi4u
MDZmYThmMDViOGYyMDQwNTM1NTliNGY1MmY5YzFkMmM3ODA2MGM2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZyhjb25zdCBTdHJpbmcmIG92
ZXJyaWRlRW5jb2RpbmcpOwogCiAgICAgdm9pZCBvcGVuKENhY2hlZEZyYW1lQmFzZSYpOwotICAg
IHZvaWQgbG9hZEl0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAgICB2b2lkIGxv
YWRJdGVtKEhpc3RvcnlJdGVtJiwgRnJhbWVMb2FkVHlwZSk7CiAgICAgSGlzdG9yeUl0ZW0qIHJl
cXVlc3RlZEhpc3RvcnlJdGVtKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0ZWRIaXN0b3J5SXRl
bS5nZXQoKTsgfQogCiAgICAgdm9pZCByZXRyeUFmdGVyRmFpbGVkQ2FjaGVPbmx5TWFpblJlc291
cmNlTG9hZCgpOwpAQCAtMjk5LDggKzI5OSw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNoZWNr
VGltZXJGaXJlZCgpOwogICAgIAotICAgIHZvaWQgbG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9y
eUl0ZW0qKTsKLSAgICB2b2lkIGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0q
LCBGcmFtZUxvYWRUeXBlLCBGb3JtU3VibWlzc2lvbkNhY2hlTG9hZFBvbGljeSk7CisgICAgdm9p
ZCBsb2FkU2FtZURvY3VtZW50SXRlbShIaXN0b3J5SXRlbSYpOworICAgIHZvaWQgbG9hZERpZmZl
cmVudERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSYsIEZyYW1lTG9hZFR5cGUsIEZvcm1TdWJtaXNz
aW9uQ2FjaGVMb2FkUG9saWN5KTsKICAgICAKICAgICB2b2lkIGxvYWRQcm92aXNpb25hbEl0ZW1G
cm9tQ2FjaGVkUGFnZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlz
dG9yeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9s
bGVyLmNwcAppbmRleCA5YjgzYTg0N2RkMDUwOGE3YWE1NmQ1OThhMzE0NDhhNjUzNTFiOGRhLi44
MzNlNTg4NGJhYTA3YjM1YjFiMzVlNWY0YmFjMzdkYjM5YzlkZGEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKQEAgLTIzNCwxMSArMjM0LDEzIEBAIHZv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKCkKIAogdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSgpCiB7Ci0gICAg
Ly8gV2hlbiB3ZSBhcmUgcHJlLWNvbW1pdCwgdGhlIGN1cnJlbnRJdGVtIGlzIHdoZXJlIGFueSBw
YWdlIGNhY2hlIGRhdGEgcmVzaWRlcy4KLSAgICBpZiAoIVBhZ2VDYWNoZTo6c2hhcmVkKCkuZ2V0
KGN1cnJlbnRJdGVtKCksIG1fZnJhbWUucGFnZSgpKSkKKyAgICBpZiAoIWN1cnJlbnRJdGVtKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBjYWNo
ZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFyZWQoKS50YWtlKGN1cnJlbnRJdGVtKCksIG1fZnJhbWUu
cGFnZSgpKTsKKyAgICAvLyBXaGVuIHdlIGFyZSBwcmUtY29tbWl0LCB0aGUgY3VycmVudEl0ZW0g
aXMgd2hlcmUgYW55IHBhZ2UgY2FjaGUgZGF0YSByZXNpZGVzLgorICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFyZWQoKS50YWtlKCpjdXJy
ZW50SXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7CisgICAgaWYgKCFjYWNoZWRQYWdlKQorICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGdyb3Rlc3F1ZSBoYWNrIHRvIGZp
eCA8cmRhcjovL3Byb2JsZW0vNDA1OTA1OT4gQ3Jhc2ggaW4gUmVuZGVyRmxvdzo6ZGV0YWNoCiAg
ICAgLy8gU29tZWhvdyB0aGUgUGFnZVN0YXRlIG9iamVjdCBpcyBub3QgcHJvcGVybHkgdXBkYXRl
ZCwgYW5kIGlzIGhvbGRpbmcgb250byBhIHN0YWxlIGRvY3VtZW50LgpAQCAtMjY1LDcgKzI2Nyw3
IEBAIGJvb2wgSGlzdG9yeUNvbnRyb2xsZXI6OnNob3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0
ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0pCiAKIC8vIE1haW4gZnVubmVsIGZvciBuYXZpZ2F0
aW5nIHRvIGEgcHJldmlvdXMgbG9jYXRpb24gKGJhY2svZm9yd2FyZCwgbm9uLXNlYXJjaCBzbmFw
LWJhY2spCiAvLyBUaGlzIGluY2x1ZGVzIHJlY3Vyc2lvbiB0byBoYW5kbGUgbG9hZGluZyBpbnRv
IGZyYW1lc2V0cyBwcm9wZXJseQotdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlz
dG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKK3ZvaWQgSGlzdG9yeUNv
bnRyb2xsZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtJiB0YXJnZXRJdGVtLCBGcmFtZUxvYWRUeXBl
IHR5cGUpCiB7CiAgICAgQVNTRVJUKCFtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKSk7CiAgICAgCkBA
IC0yNzYsMTAgKzI3OCwxMCBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRlbShIaXN0
b3J5SXRlbSogdGFyZ2V0SXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQogICAgIFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIW1fZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuc2hvdWxkR29Ub0hpc3RvcnlJdGVtKHRhcmdl
dEl0ZW0pKQorICAgIGlmICghbV9mcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5zaG91bGRHb1RvSGlz
dG9yeUl0ZW0oJnRhcmdldEl0ZW0pKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZGVmZXJz
TG9hZGluZykgewotICAgICAgICBtX2RlZmVycmVkSXRlbSA9IHRhcmdldEl0ZW07CisgICAgICAg
IG1fZGVmZXJyZWRJdGVtID0gJnRhcmdldEl0ZW07CiAgICAgICAgIG1fZGVmZXJyZWRGcmFtZUxv
YWRUeXBlID0gdHlwZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI4OCw3ICsyOTAsNyBA
QCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogdGFyZ2V0SXRl
bSwgRnJhbWVMb2FkVHlwZSB0eXBlKQogICAgIC8vIC0gcGx1cywgaXQgb25seSBtYWtlcyBzZW5z
ZSBmb3IgdGhlIHRvcCBsZXZlbCBvZiB0aGUgb3BlcmF0aW9uIHRocm91Z2ggdGhlIGZyYW1lIHRy
ZWUsCiAgICAgLy8gYXMgb3Bwb3NlZCB0byBoYXBwZW5pbmcgZm9yIHNvbWUvb25lIG9mIHRoZSBw
YWdlIGNvbW1pdHMgdGhhdCBtaWdodCBoYXBwZW4gc29vbgogICAgIFJlZlB0cjxIaXN0b3J5SXRl
bT4gY3VycmVudEl0ZW0gPSBwYWdlLT5iYWNrRm9yd2FyZCgpLmN1cnJlbnRJdGVtKCk7Ci0gICAg
cGFnZS0+YmFja0ZvcndhcmQoKS5zZXRDdXJyZW50SXRlbSh0YXJnZXRJdGVtKTsKKyAgICBwYWdl
LT5iYWNrRm9yd2FyZCgpLnNldEN1cnJlbnRJdGVtKCZ0YXJnZXRJdGVtKTsKICAgICBtX2ZyYW1l
LmxvYWRlcigpLmNsaWVudCgpLnVwZGF0ZUdsb2JhbEhpc3RvcnlJdGVtRm9yUGFnZSgpOwogCiAg
ICAgLy8gRmlyc3Qgc2V0IHRoZSBwcm92aXNpb25hbCBpdGVtIG9mIGFueSBmcmFtZXMgdGhhdCBh
cmUgbm90IGFjdHVhbGx5IG5hdmlnYXRpbmcuCkBAIC0zMDUsOCArMzA3LDggQEAgdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVyKQogewogICAgIG1fZGVm
ZXJzTG9hZGluZyA9IGRlZmVyOwogICAgIGlmICghZGVmZXIgJiYgbV9kZWZlcnJlZEl0ZW0pIHsK
LSAgICAgICAgZ29Ub0l0ZW0obV9kZWZlcnJlZEl0ZW0uZ2V0KCksIG1fZGVmZXJyZWRGcmFtZUxv
YWRUeXBlKTsKLSAgICAgICAgbV9kZWZlcnJlZEl0ZW0gPSAwOworICAgICAgICBnb1RvSXRlbSgq
bV9kZWZlcnJlZEl0ZW0sIG1fZGVmZXJyZWRGcmFtZUxvYWRUeXBlKTsKKyAgICAgICAgbV9kZWZl
cnJlZEl0ZW0gPSBudWxscHRyOwogICAgIH0KIH0KIApAQCAtMzM0LDcgKzMzNiw3IEBAIHZvaWQg
SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJlbG9hZCgpCiAjZW5kaWYKIAogICAgIGlmICht
X2N1cnJlbnRJdGVtKSB7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKG1fY3Vy
cmVudEl0ZW0uZ2V0KCkpOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqbV9j
dXJyZW50SXRlbSk7CiAgICAgCiAgICAgICAgIGlmIChtX2ZyYW1lLmxvYWRlcigpLmxvYWRUeXBl
KCkgPT0gRnJhbWVMb2FkVHlwZTo6UmVsb2FkIHx8IG1fZnJhbWUubG9hZGVyKCkubG9hZFR5cGUo
KSA9PSBGcmFtZUxvYWRUeXBlOjpSZWxvYWRGcm9tT3JpZ2luKQogICAgICAgICAgICAgc2F2ZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fY3VycmVudEl0ZW0uZ2V0KCkpOwpAQCAt
NDk5LDcgKzUwMSw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVVwZGF0ZUZv
ckNvbW1pdCgpCiAgICAgLy8gRm9yIGVhY2ggZnJhbWUgdGhhdCBhbHJlYWR5IGhhZCB0aGUgY29u
dGVudCB0aGUgaXRlbSByZXF1ZXN0ZWQgKGJhc2VkIG9uCiAgICAgLy8gKGEgbWF0Y2hpbmcgVVJM
IGFuZCBmcmFtZSB0cmVlIHNuYXBzaG90KSwganVzdCByZXN0b3JlIHRoZSBzY3JvbGwgcG9zaXRp
b24uCiAgICAgLy8gU2F2ZSBmb3JtIHN0YXRlICh3b3JrcyBmcm9tIGN1cnJlbnRJdGVtLCBzaW5j
ZSBtX2ZyYW1lTG9hZENvbXBsZXRlIGlzIHRydWUpCi0gICAgaWYgKG1fY3VycmVudEl0ZW0gJiYg
aXRlbXNBcmVDbG9uZXMobV9jdXJyZW50SXRlbS5nZXQoKSwgbV9wcm92aXNpb25hbEl0ZW0uZ2V0
KCkpKSB7CisgICAgaWYgKG1fY3VycmVudEl0ZW0gJiYgaXRlbXNBcmVDbG9uZXMoKm1fY3VycmVu
dEl0ZW0sIG1fcHJvdmlzaW9uYWxJdGVtLmdldCgpKSkgewogICAgICAgICBBU1NFUlQobV9mcmFt
ZUxvYWRDb21wbGV0ZSk7CiAgICAgICAgIHNhdmVEb2N1bWVudFN0YXRlKCk7CiAgICAgICAgIHNh
dmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJlbnRJdGVtLmdldCgpKTsK
QEAgLTcwNywxNyArNzA5LDE1IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhpc3RvcnlDb250
cm9sbGVyOjpjcmVhdGVJdGVtVHJlZShGcmFtZSYgdGFyZ2V0RnJhbWUsIGJvCiAvLyB0cmFja2lu
ZyB3aGV0aGVyIGVhY2ggZnJhbWUgYWxyZWFkeSBoYXMgdGhlIGNvbnRlbnQgdGhlIGl0ZW0gcmVx
dWVzdHMuICBJZiB0aGVyZSBpcwogLy8gYSBtYXRjaCwgd2Ugc2V0IHRoZSBwcm92aXNpb25hbCBp
dGVtIGFuZCByZWN1cnNlLiAgT3RoZXJ3aXNlIHdlIHdpbGwgcmVsb2FkIHRoYXQKIC8vIGZyYW1l
IGFuZCBhbGwgaXRzIGtpZHMgaW4gcmVjdXJzaXZlR29Ub0l0ZW0uCi12b2lkIEhpc3RvcnlDb250
cm9sbGVyOjpyZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhp
c3RvcnlJdGVtKiBmcm9tSXRlbSkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZVNl
dFByb3Zpc2lvbmFsSXRlbShIaXN0b3J5SXRlbSYgaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVt
KQogewotICAgIEFTU0VSVChpdGVtKTsKLQogICAgIGlmICghaXRlbXNBcmVDbG9uZXMoaXRlbSwg
ZnJvbUl0ZW0pKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBTZXQgcHJvdmlzaW9uYWwgaXRl
bSwgd2hpY2ggd2lsbCBiZSBjb21taXR0ZWQgaW4gcmVjdXJzaXZlVXBkYXRlRm9yQ29tbWl0Lgot
ICAgIG1fcHJvdmlzaW9uYWxJdGVtID0gaXRlbTsKKyAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9ICZp
dGVtOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZEl0ZW0gOiBpdGVtLT5jaGlsZHJlbigp
KSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZEl0ZW0gOiBpdGVtLmNoaWxkcmVuKCkpIHsK
ICAgICAgICAgY29uc3QgU3RyaW5nJiBjaGlsZEZyYW1lTmFtZSA9IGNoaWxkSXRlbS0+dGFyZ2V0
KCk7CiAKICAgICAgICAgSGlzdG9yeUl0ZW0qIGZyb21DaGlsZEl0ZW0gPSBmcm9tSXRlbS0+Y2hp
bGRJdGVtV2l0aFRhcmdldChjaGlsZEZyYW1lTmFtZSk7CkBAIC03MjUsMzQgKzcyNSwzMiBAQCB2
b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9y
eUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdAogICAgICAgICBGcmFtZSogY2hpbGRGcmFtZSA9IG1fZnJh
bWUudHJlZSgpLmNoaWxkKGNoaWxkRnJhbWVOYW1lKTsKICAgICAgICAgQVNTRVJUKGNoaWxkRnJh
bWUpOwogCi0gICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5yZWN1cnNpdmVT
ZXRQcm92aXNpb25hbEl0ZW0oY2hpbGRJdGVtLmdldCgpLCBmcm9tQ2hpbGRJdGVtKTsKKyAgICAg
ICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLnJlY3Vyc2l2ZVNldFByb3Zpc2lvbmFs
SXRlbSgqY2hpbGRJdGVtLCBmcm9tQ2hpbGRJdGVtKTsKICAgICB9CiB9CiAKIC8vIFdlIG5vdyB0
cmF2ZXJzZSB0aGUgZnJhbWUgdHJlZSBhbmQgaXRlbSB0cmVlIGEgc2Vjb25kIHRpbWUsIGxvYWRp
bmcgZnJhbWVzIHRoYXQKIC8vIGRvIGhhdmUgdGhlIGNvbnRlbnQgdGhlIGl0ZW0gcmVxdWVzdHMu
Ci12b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSog
aXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCit2b2lkIEhp
c3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSYgaXRlbSwgSGlz
dG9yeUl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUKGl0
ZW0pOwotCiAgICAgaWYgKCFpdGVtc0FyZUNsb25lcyhpdGVtLCBmcm9tSXRlbSkpIHsKICAgICAg
ICAgbV9mcmFtZS5sb2FkZXIoKS5sb2FkSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIC8vIEp1c3QgaXRlcmF0ZSBvdmVyIHRoZSByZXN0LCBsb29raW5nIGZv
ciBmcmFtZXMgdG8gbmF2aWdhdGUuCi0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZEl0ZW0gOiBp
dGVtLT5jaGlsZHJlbigpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZEl0ZW0gOiBpdGVt
LmNoaWxkcmVuKCkpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBjaGlsZEZyYW1lTmFtZSA9IGNo
aWxkSXRlbS0+dGFyZ2V0KCk7CiAKICAgICAgICAgSGlzdG9yeUl0ZW0qIGZyb21DaGlsZEl0ZW0g
PSBmcm9tSXRlbS0+Y2hpbGRJdGVtV2l0aFRhcmdldChjaGlsZEZyYW1lTmFtZSk7CiAgICAgICAg
IEFTU0VSVChmcm9tQ2hpbGRJdGVtKTsKICAgICAgICAgRnJhbWUqIGNoaWxkRnJhbWUgPSBtX2Zy
YW1lLnRyZWUoKS5jaGlsZChjaGlsZEZyYW1lTmFtZSk7CiAgICAgICAgIEFTU0VSVChjaGlsZEZy
YW1lKTsKLSAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLnJlY3Vyc2l2ZUdv
VG9JdGVtKGNoaWxkSXRlbS5nZXQoKSwgZnJvbUNoaWxkSXRlbSwgdHlwZSk7CisgICAgICAgIGNo
aWxkRnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5yZWN1cnNpdmVHb1RvSXRlbSgqY2hpbGRJdGVt
LCBmcm9tQ2hpbGRJdGVtLCB0eXBlKTsKICAgICB9CiB9CiAKLWJvb2wgSGlzdG9yeUNvbnRyb2xs
ZXI6Oml0ZW1zQXJlQ2xvbmVzKEhpc3RvcnlJdGVtKiBpdGVtMSwgSGlzdG9yeUl0ZW0qIGl0ZW0y
KSBjb25zdAorYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6aXRlbXNBcmVDbG9uZXMoSGlzdG9yeUl0
ZW0mIGl0ZW0xLCBIaXN0b3J5SXRlbSogaXRlbTIpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIGl0
ZW0gd2UncmUgZ29pbmcgdG8gaXMgYSBjbG9uZSBvZiB0aGUgaXRlbSB3ZSdyZSBhdCwgdGhlbiB3
ZSBkbwogICAgIC8vIG5vdCBuZWVkIHRvIGxvYWQgaXQgYWdhaW4uICBUaGUgY3VycmVudCBmcmFt
ZSB0cmVlIGFuZCB0aGUgZnJhbWUgdHJlZQpAQCAtNzYxLDEyICs3NTksMTEgQEAgYm9vbCBIaXN0
b3J5Q29udHJvbGxlcjo6aXRlbXNBcmVDbG9uZXMoSGlzdG9yeUl0ZW0qIGl0ZW0xLCBIaXN0b3J5
SXRlbSogaXRlbTIpIGMKICAgICAvLyBhIHJlbG9hZC4gIFRodXMsIGlmIGl0ZW0xIGFuZCBpdGVt
MiBhcmUgdGhlIHNhbWUsIHdlIG5lZWQgdG8gY3JlYXRlIGEKICAgICAvLyBuZXcgZG9jdW1lbnQg
YW5kIHNob3VsZCBub3QgY29uc2lkZXIgdGhlbSBjbG9uZXMuCiAgICAgLy8gKFNlZSBodHRwOi8v
d2Via2l0Lm9yZy9iLzM1NTMyIGZvciBkZXRhaWxzLikKLSAgICByZXR1cm4gaXRlbTEKLSAgICAg
ICAgJiYgaXRlbTIKLSAgICAgICAgJiYgaXRlbTEgIT0gaXRlbTIKLSAgICAgICAgJiYgaXRlbTEt
Pml0ZW1TZXF1ZW5jZU51bWJlcigpID09IGl0ZW0yLT5pdGVtU2VxdWVuY2VOdW1iZXIoKQotICAg
ICAgICAmJiBjdXJyZW50RnJhbWVzTWF0Y2hJdGVtKGl0ZW0xKQotICAgICAgICAmJiBpdGVtMi0+
aGFzU2FtZUZyYW1lcyhpdGVtMSk7CisgICAgcmV0dXJuIGl0ZW0yCisgICAgICAgICYmICZpdGVt
MSAhPSBpdGVtMgorICAgICAgICAmJiBpdGVtMS5pdGVtU2VxdWVuY2VOdW1iZXIoKSA9PSBpdGVt
Mi0+aXRlbVNlcXVlbmNlTnVtYmVyKCkKKyAgICAgICAgJiYgY3VycmVudEZyYW1lc01hdGNoSXRl
bSgmaXRlbTEpCisgICAgICAgICYmIGl0ZW0yLT5oYXNTYW1lRnJhbWVzKCZpdGVtMSk7CiB9CiAK
IC8vIEhlbHBlciBtZXRob2QgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZnJh
bWUgdHJlZSBtYXRjaGVzIGdpdmVuIGhpc3RvcnkgaXRlbSdzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAppbmRleCA0MzFmMzBlMGFjZjhhOWE2M2NmOTVkYzQ2ZDcw
YWQ5MjAxNWIxNzg1Li4xYjQwYTgwYjBlMzI3MThiMzNlZmI0MjJhYWZlNjc2ZmJjM2M3ZmU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuaApAQCAtOTMsMTkgKzkz
LDE5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhZ2U7CiAgICAgYm9v
bCBzaG91bGRTdG9wTG9hZGluZ0Zvckhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7Ci0g
ICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOworICAgIHZvaWQg
Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0mLCBGcmFtZUxvYWRUeXBlKTsKIAogICAgIHZvaWQgaW5pdGlh
bGl6ZUl0ZW0oSGlzdG9yeUl0ZW0qKTsKICAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjcmVh
dGVJdGVtKCk7CiAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlSXRlbVRyZWUoRnJh
bWUmIHRhcmdldEZyYW1lLCBib29sIGNsaXBBdFRhcmdldCk7CiAKLSAgICB2b2lkIHJlY3Vyc2l2
ZVNldFByb3Zpc2lvbmFsSXRlbShIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtKik7Ci0gICAgdm9p
ZCByZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtKiwgRnJhbWVMb2Fk
VHlwZSk7CisgICAgdm9pZCByZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0m
LCBIaXN0b3J5SXRlbSopOworICAgIHZvaWQgcmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0m
LCBIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOwogICAgIGJvb2wgaXNSZXBsYWNlTG9hZFR5
cGVXaXRoUHJvdmlzaW9uYWxJdGVtKEZyYW1lTG9hZFR5cGUpOwogICAgIGJvb2wgaXNSZWxvYWRU
eXBlV2l0aFByb3Zpc2lvbmFsSXRlbShGcmFtZUxvYWRUeXBlKTsKICAgICB2b2lkIHJlY3Vyc2l2
ZVVwZGF0ZUZvckNvbW1pdCgpOwogICAgIHZvaWQgcmVjdXJzaXZlVXBkYXRlRm9yU2FtZURvY3Vt
ZW50TmF2aWdhdGlvbigpOwotICAgIGJvb2wgaXRlbXNBcmVDbG9uZXMoSGlzdG9yeUl0ZW0qLCBI
aXN0b3J5SXRlbSopIGNvbnN0OworICAgIGJvb2wgaXRlbXNBcmVDbG9uZXMoSGlzdG9yeUl0ZW0m
LCBIaXN0b3J5SXRlbSopIGNvbnN0OwogICAgIGJvb2wgY3VycmVudEZyYW1lc01hdGNoSXRlbShI
aXN0b3J5SXRlbSopIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBl
ZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKTsKICAgICB2b2lkIHVwZGF0ZUN1cnJlbnRJdGVtKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCmluZGV4IDgzMTRjOWE0ZTNjZWJkYzZiNTdiNWQzMDRmMDQ0ZmEyODZm
YjY2MTAuLjc4Y2IxOTM1MzM4OWI3Njg4ZTQ3YjViNWY2YjJmNTAwMGQwNDdlOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC05ODksNyArOTg5LDcgQEAgdm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRl
eHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpvb21GYWN0b3IK
ICAgICB9CiAKICAgICBpZiAoaXNNYWluRnJhbWUoKSkKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFy
ZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMocGFnZSk7CisgICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCpwYWdlKTsKIH0KIAogZmxv
YXQgRnJhbWU6OmZyYW1lU2NhbGVGYWN0b3IoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXgg
N2M1MzVkMDU3MjEyY2JjNGFlN2Y3ZDY0MjMwZjI3ZmVjYTQ2NTU2OS4uN2Q5N2FlZjBlMmJhMjIy
ZTU1OWU1Y2JmOGRlYjI4NmRhMmRlNzA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC00MzAsMTMg
KzQzMCwxMyBAQCB2b2lkIFBhZ2U6OnNldE9wZW5lZEJ5RE9NKCkKICAgICBtX29wZW5lZEJ5RE9N
ID0gdHJ1ZTsKIH0KIAotdm9pZCBQYWdlOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJh
bWVMb2FkVHlwZSB0eXBlKQordm9pZCBQYWdlOjpnb1RvSXRlbShIaXN0b3J5SXRlbSYgaXRlbSwg
RnJhbWVMb2FkVHlwZSB0eXBlKQogewogICAgIC8vIHN0b3BBbGxMb2FkZXJzIG1heSBlbmQgdXAg
cnVubmluZyBvbmxvYWQgaGFuZGxlcnMsIHdoaWNoIGNvdWxkIGNhdXNlIGZ1cnRoZXIgaGlzdG9y
eSB0cmF2ZXJzYWxzIHRoYXQgbWF5IGxlYWQgdG8gdGhlIHBhc3NlZCBpbiBIaXN0b3J5SXRlbQog
ICAgIC8vIGJlaW5nIGRlcmVmKCktZWQuIE1ha2Ugc3VyZSB3ZSBjYW4gc3RpbGwgdXNlIGl0IHdp
dGggSGlzdG9yeUNvbnRyb2xsZXI6OmdvVG9JdGVtIGxhdGVyLgotICAgIFJlZlB0cjxIaXN0b3J5
SXRlbT4gcHJvdGVjdG9yKGl0ZW0pOworICAgIFJlZjxIaXN0b3J5SXRlbT4gcHJvdGVjdG9yKGl0
ZW0pOwogCi0gICAgaWYgKG1fbWFpbkZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkuc2hvdWxkU3Rv
cExvYWRpbmdGb3JIaXN0b3J5SXRlbShpdGVtKSkKKyAgICBpZiAobV9tYWluRnJhbWUtPmxvYWRl
cigpLmhpc3RvcnkoKS5zaG91bGRTdG9wTG9hZGluZ0Zvckhpc3RvcnlJdGVtKCZpdGVtKSkKICAg
ICAgICAgbV9tYWluRnJhbWUtPmxvYWRlcigpLnN0b3BBbGxMb2FkZXJzKCk7CiAKICAgICBtX21h
aW5GcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLmdvVG9JdGVtKGl0ZW0sIHR5cGUpOwpAQCAtODM5
LDkgKzgzOSw5IEBAIHZvaWQgUGFnZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVG
YWN0b3IpCiAgICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiAKICAgICBtYWlu
RnJhbWUoKS5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKLSAgICBQYWdlQ2FjaGU6
OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZCh0aGlzKTsKKyAgICBQYWdl
Q2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZCgqdGhpcyk7CiAK
LSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlz
KTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygq
dGhpcyk7CiAgICAgR3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNl
cygpOwogCiAgICAgbWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdl
RGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIFBhZ2U6OnNldFBh
Z2luYXRpb24oY29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlvbikKICAgICBtX3BhZ2luYXRpb24g
PSBwYWdpbmF0aW9uOwogCiAgICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Ci0g
ICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGModGhpcyk7
CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRo
aXMpOwogfQogCiB1bnNpZ25lZCBQYWdlOjpwYWdlQ291bnQoKSBjb25zdApAQCAtMTY2MSw3ICsx
NjYxLDcgQEAgdm9pZCBQYWdlOjpzZXRWaXNpdGVkTGlua1N0b3JlKFJlZjxWaXNpdGVkTGlua1N0
b3JlPiYmIHZpc2l0ZWRMaW5rU3RvcmUpCiAgICAgbV92aXNpdGVkTGlua1N0b3JlLT5hZGRQYWdl
KCp0aGlzKTsKIAogICAgIGludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpOwotICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRoaXMpOworICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsKIH0K
IAogU2Vzc2lvbklEIFBhZ2U6OnNlc3Npb25JRCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDI4
YzA0ZDhjN2Y3YjYyNGZhMTMzNGFhNTdjMzVmMTRiZjJlMWUwYjkuLjdmY2Y3YWI2YzgwNTU2YTFj
OWNlNDFmNjBiMzllYjY3NDA5NmUyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xNTAsNyArMTUwLDcg
QEAgcHVibGljOgogICAgIGJvb2wgb3BlbmVkQnlET00oKSBjb25zdDsKICAgICB2b2lkIHNldE9w
ZW5lZEJ5RE9NKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJ
dGVtKiwgRnJhbWVMb2FkVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnb1RvSXRlbShI
aXN0b3J5SXRlbSYsIEZyYW1lTG9hZFR5cGUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRHcm91cE5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgU3Ry
aW5nJiBncm91cE5hbWUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZDc3
MzlkMWIxOWFjNjI3NDUxMThmZmFiNTg1ZjRkMjMxODM0NDQ5MC4uOTU2YjQ0YzRiN2Y4MmE3M2Rk
YjIxODM1MTk2MGMxMzIwMWFmYzhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTUx
OSwxMiArNTE5LDggQEAgdm9pZCBTZXR0aW5nczo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQ
YWdlQ2FjaGUpCiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgh
bV91c2VzUGFnZUNhY2hlKSB7Ci0gICAgICAgIGludCBmaXJzdCA9IC1tX3BhZ2UtPmJhY2tGb3J3
YXJkKCkuYmFja0NvdW50KCk7Ci0gICAgICAgIGludCBsYXN0ID0gbV9wYWdlLT5iYWNrRm9yd2Fy
ZCgpLmZvcndhcmRDb3VudCgpOwotICAgICAgICBmb3IgKGludCBpID0gZmlyc3Q7IGkgPD0gbGFz
dDsgaSsrKQotICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUobV9wYWdlLT5i
YWNrRm9yd2FyZCgpLml0ZW1BdEluZGV4KGkpKTsKLSAgICB9CisgICAgaWYgKCFtX3VzZXNQYWdl
Q2FjaGUpCisgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1
bmluZ1JlYXNvbjo6Tm9uZSk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldFNjcmVlbkZvbnRTdWJz
dGl0dXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCmluZGV4IDVjZDIxMDU2NDdjNDI0OTIxMTZj
NTQyMjBiNDZkNjdmNmQxMmEyYTEuLjBiYjNkMzJlYzRmNjJkY2FiMjI0N2IxNzk1YjVkNzA4Zjhm
MmNmOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJl
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVI
YW5kbGVyLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVy
OjpyZWxlYXNlQ3JpdGljYWxNZW1vcnkoKQogICAgICAgICBSZWxpZWZMb2dnZXIgbG9nKCJFbXB0
eSB0aGUgUGFnZUNhY2hlIik7CiAgICAgICAgIC8vIFJpZ2h0IG5vdywgdGhlIG9ubHkgcmVhc29u
IHdlIGNhbGwgcmVsZWFzZSBjcml0aWNhbCBtZW1vcnkgd2hpbGUgbm90IHVuZGVyIG1lbW9yeSBw
cmVzc3VyZSBpcyBpZiB0aGUgcHJvY2VzcyBpcyBhYm91dCB0byBiZSBzdXNwZW5kZWQuCiAgICAg
ICAgIFBydW5pbmdSZWFzb24gcHJ1bmluZ1JlYXNvbiA9IG1lbW9yeVByZXNzdXJlSGFuZGxlcigp
LmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpID8gUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUg
OiBQcnVuaW5nUmVhc29uOjpQcm9jZXNzU3VzcGVuZGVkOwotICAgICAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLnBydW5lVG9DYXBhY2l0eU5vdygwLCBwcnVuaW5nUmVhc29uKTsKKyAgICAgICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdygwLCBwcnVuaW5nUmVhc29uKTsKICAgICB9
CiAKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tG
b3J3YXJkTGlzdC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRM
aXN0Lm1tCmluZGV4IDg3NTdjOGMyMWUwM2M2YjRlZTZiOTU1MWU0OTZlZDRkYjU3ZmZkY2QuLjZi
NDUwMDIxYzQyNzg2MjYzNjMyOTEzNjMxMDI3NzJjMjVjMTJlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCkBAIC0zNTUsNyArMzU1LDcg
QEAgc3RhdGljIGJvb2wgYnVtcGVyQ2FyQmFja0ZvcndhcmRIYWNrTmVlZGVkKCkKIAogLSAoTlNV
SW50ZWdlcilwYWdlQ2FjaGVTaXplCiB7Ci0gICAgcmV0dXJuIFtraXQoY29yZShzZWxmKS0+cGFn
ZSgpKSB1c2VzUGFnZUNhY2hlXSA/IFBhZ2VDYWNoZTo6c2hhcmVkKCkuY2FwYWNpdHkoKSA6IDA7
CisgICAgcmV0dXJuIFtraXQoY29yZShzZWxmKS0+cGFnZSgpKSB1c2VzUGFnZUNhY2hlXSA/IFBh
Z2VDYWNoZTo6c2hhcmVkKCkubWF4U2l6ZSgpIDogMDsKIH0KIAogLSAoaW50KWJhY2tMaXN0Q291
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA5MGJmMDZlZGVjNDQzMGE5
ODMwZTNmZDM2MmM2NWViNGM3ZWQyMzZkLi5jMjUwMmE2NDA4ZmFlNDQyMzBlNjkzZjhiYmUyMDE2
NDg2YzFiYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xOTk3LDcg
KzE5OTcsNyBAQCBzdGF0aWMgYm9vbCBmYXN0RG9jdW1lbnRUZWFyZG93bkVuYWJsZWQoKQogICAg
IGlmICghb3RoZXJCYWNrRm9yd2FyZENsaWVudC0+Y3VycmVudEl0ZW0oKSkKICAgICAgICAgcmV0
dXJuOyAvLyBlbXB0eSBiYWNrIGZvcndhcmQgbGlzdCwgYmFpbAogICAgIAotICAgIEhpc3RvcnlJ
dGVtKiBuZXdJdGVtVG9Hb1RvID0gMDsKKyAgICBIaXN0b3J5SXRlbSogbmV3SXRlbVRvR29UbyA9
IG51bGxwdHI7CiAKICAgICBpbnQgbGFzdEl0ZW1JbmRleCA9IG90aGVyQmFja0ZvcndhcmRDbGll
bnQtPmZvcndhcmRMaXN0Q291bnQoKTsKICAgICBmb3IgKGludCBpID0gLW90aGVyQmFja0Zvcndh
cmRDbGllbnQtPmJhY2tMaXN0Q291bnQoKTsgaSA8PSBsYXN0SXRlbUluZGV4OyArK2kpIHsKQEAg
LTIwMTQsNyArMjAxNCw3IEBAIHN0YXRpYyBib29sIGZhc3REb2N1bWVudFRlYXJkb3duRW5hYmxl
ZCgpCiAgICAgfQogICAgIAogICAgIEFTU0VSVChuZXdJdGVtVG9Hb1RvKTsKLSAgICBfcHJpdmF0
ZS0+cGFnZS0+Z29Ub0l0ZW0obmV3SXRlbVRvR29UbywgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJh
Y2tGb3J3YXJkKTsKKyAgICBfcHJpdmF0ZS0+cGFnZS0+Z29Ub0l0ZW0oKm5ld0l0ZW1Ub0dvVG8s
IEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CiB9CiAKIC0gKHZvaWQpX3NldEZv
cm1EZWxlZ2F0ZTogKGlkPFdlYkZvcm1EZWxlZ2F0ZT4pZGVsZWdhdGUKQEAgLTU2NDcsNyArNTY0
Nyw4IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IGJhY2tpbmdQcm9wZXJ0eU9sZFNjYWxlRmFj
dG9yS2V5ID0gQCJOU0JhY2tpbmdQcm9wZXJ0eU9sCiAgICAgaWYgKCFfcHJpdmF0ZS0+cGFnZSkK
ICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgX3ByaXZhdGUtPnBhZ2UtPmdvVG9JdGVtKGNvcmUo
aXRlbSksIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAgQVNTRVJUKGl0
ZW0pOworICAgIF9wcml2YXRlLT5wYWdlLT5nb1RvSXRlbSgqY29yZShpdGVtKSwgRnJhbWVMb2Fk
VHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKICAgICByZXR1cm4gWUVTOwogfQogCkBAIC03NzQy
LDcgKzc3NDMsNyBAQCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHJvdW5kVXBUb1Bvd2VyT2YyKHVp
bnQ2NF90IG51bSkKICAgICB1bnNpZ25lZCBjYWNoZU1heERlYWRDYXBhY2l0eSA9IDA7CiAgICAg
YXV0byBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0gc3RkOjpjaHJvbm86OnNlY29u
ZHMgeyAwIH07CiAKLSAgICB1bnNpZ25lZCBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgdW5z
aWduZWQgcGFnZUNhY2hlU2l6ZSA9IDA7CiAKICAgICBOU1VJbnRlZ2VyIG5zdXJsQ2FjaGVNZW1v
cnlDYXBhY2l0eSA9IDA7CiAgICAgTlNVSW50ZWdlciBuc3VybENhY2hlRGlza0NhcGFjaXR5ID0g
MDsKQEAgLTc3NTMsNyArNzc1NCw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDY0X3Qgcm91bmRVcFRv
UG93ZXJPZjIodWludDY0X3QgbnVtKQogICAgIHN3aXRjaCAoY2FjaGVNb2RlbCkgewogICAgIGNh
c2UgV2ViQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOiB7CiAgICAgICAgIC8vIFBhZ2UgY2FjaGUg
Y2FwYWNpdHkgKGluIHBhZ2VzKQotICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAg
ICAgIHBhZ2VDYWNoZVNpemUgPSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0
aWVzIChpbiBieXRlcykKICAgICAgICAgaWYgKG1lbVNpemUgPj0gNDA5NikKQEAgLTc3OTAsMTMg
Kzc3OTEsMTMgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCByb3VuZFVwVG9Qb3dlck9mMih1aW50
NjRfdCBudW0pCiAgICAgY2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyOiB7CiAgICAg
ICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2VzKQogICAgICAgICBpZiAobWVtU2l6
ZSA+PSAxMDI0KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAzOworICAgICAgICAg
ICAgcGFnZUNhY2hlU2l6ZSA9IDM7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gNTEyKQot
ICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOworICAgICAgICAgICAgcGFnZUNhY2hl
U2l6ZSA9IDI7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMjU2KQotICAgICAgICAgICAg
cGFnZUNhY2hlQ2FwYWNpdHkgPSAxOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDE7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICAgICAg
ICAgIHBhZ2VDYWNoZVNpemUgPSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0
aWVzIChpbiBieXRlcykKICAgICAgICAgaWYgKG1lbVNpemUgPj0gNDA5NikKQEAgLTc4NDQsMTUg
Kzc4NDUsMTUgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCByb3VuZFVwVG9Qb3dlck9mMih1aW50
NjRfdCBudW0pCiAgICAgICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2VzKQogICAg
ICAgICAvLyAoUmVzZWFyY2ggaW5kaWNhdGVzIHRoYXQgdmFsdWUgLyBwYWdlIGRyb3BzIHN1YnN0
YW50aWFsbHkgYWZ0ZXIgMyBwYWdlcy4pCiAgICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCi0g
ICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDU7CisgICAgICAgICAgICBwYWdlQ2FjaGVT
aXplID0gNTsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAxMDI0KQotICAgICAgICAgICAg
cGFnZUNhY2hlQ2FwYWNpdHkgPSA0OworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDQ7CiAg
ICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gNTEyKQotICAgICAgICAgICAgcGFnZUNhY2hlQ2Fw
YWNpdHkgPSAzOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDM7CiAgICAgICAgIGVsc2Ug
aWYgKG1lbVNpemUgPj0gMjU2KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOwor
ICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHBhZ2VDYWNoZUNhcGFjaXR5ID0gMTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAxOwog
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICAvLyBDYWNoZSBwYWdlIGxlc3MgYWdncmVzc2l2
ZWx5IGluIGlPUyB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBiZWluZyBqZXR0aXNvbmVkLgpAQCAt
NzkzNSw3ICs3OTM2LDcgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCByb3VuZFVwVG9Qb3dlck9m
Mih1aW50NjRfdCBudW0pCiAKICAgICBtZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVN
aW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkp
OwogICAgIG1lbW9yeUNhY2hlKCkuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChk
ZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnNldENhcGFjaXR5KHBhZ2VDYWNoZUNhcGFjaXR5KTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkuc2V0U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOwogICAgIG5z
dXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IHN0ZDo6bWF4KG5zdXJsQ2FjaGVNZW1vcnlDYXBhY2l0
eSwgW25zdXJsQ2FjaGUgbWVtb3J5Q2FwYWNpdHldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKaW5kZXgg
MGYxN2VkYTMyOWUyZjViNmViMDk2NjkwY2UzYmY3YzZiMTlmNDBjMS4uNGE3MTQ0Nzg2YzQ0ZDVk
MDUwMGNmODRhNjNiMjJlNzU1YzlkYTczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4v
V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKQEAgLTUzMCwx
MyArNTMwLDEzIEBAIHZvaWQgV2ViVmlldzo6c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsIGNh
Y2hlTW9kZWwpCiAgICAgdW5zaWduZWQgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOwogICAgIGF1
dG8gZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRz
IHsgMCB9OwogCi0gICAgdW5zaWduZWQgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgIHVuc2ln
bmVkIHBhZ2VDYWNoZVNpemUgPSAwOwogCiAKICAgICBzd2l0Y2ggKGNhY2hlTW9kZWwpIHsKICAg
ICBjYXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdlcjogewogICAgICAgICAvLyBQYWdlIGNh
Y2hlIGNhcGFjaXR5IChpbiBwYWdlcykKLSAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOwor
ICAgICAgICBwYWdlQ2FjaGVTaXplID0gMDsKIAogICAgICAgICAvLyBPYmplY3QgY2FjaGUgY2Fw
YWNpdGllcyAoaW4gYnl0ZXMpCiAgICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCkBAIC01NjMs
MTMgKzU2MywxMyBAQCB2b2lkIFdlYlZpZXc6OnNldENhY2hlTW9kZWwoV2ViQ2FjaGVNb2RlbCBj
YWNoZU1vZGVsKQogICAgIGNhc2UgV2ViQ2FjaGVNb2RlbERvY3VtZW50QnJvd3NlcjogewogICAg
ICAgICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKICAgICAgICAgaWYgKG1lbVNp
emUgPj0gMTAyNCkKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMzsKKyAgICAgICAg
ICAgIHBhZ2VDYWNoZVNpemUgPSAzOwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDUxMikK
LSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMjsKKyAgICAgICAgICAgIHBhZ2VDYWNo
ZVNpemUgPSAyOwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDI1NikKLSAgICAgICAgICAg
IHBhZ2VDYWNoZUNhcGFjaXR5ID0gMTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAxOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgICAg
ICAgICBwYWdlQ2FjaGVTaXplID0gMDsKIAogICAgICAgICAvLyBPYmplY3QgY2FjaGUgY2FwYWNp
dGllcyAoaW4gYnl0ZXMpCiAgICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCkBAIC02MTAsMTUg
KzYxMCwxNSBAQCB2b2lkIFdlYlZpZXc6OnNldENhY2hlTW9kZWwoV2ViQ2FjaGVNb2RlbCBjYWNo
ZU1vZGVsKQogICAgICAgICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKICAgICAg
ICAgLy8gKFJlc2VhcmNoIGluZGljYXRlcyB0aGF0IHZhbHVlIC8gcGFnZSBkcm9wcyBzdWJzdGFu
dGlhbGx5IGFmdGVyIDMgcGFnZXMuKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAyMDQ4KQotICAg
ICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSA1OworICAgICAgICAgICAgcGFnZUNhY2hlU2l6
ZSA9IDU7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMTAyNCkKLSAgICAgICAgICAgIHBh
Z2VDYWNoZUNhcGFjaXR5ID0gNDsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSA0OwogICAg
ICAgICBlbHNlIGlmIChtZW1TaXplID49IDUxMikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFj
aXR5ID0gMzsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAzOwogICAgICAgICBlbHNlIGlm
IChtZW1TaXplID49IDI1NikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMjsKKyAg
ICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAyOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBw
YWdlQ2FjaGVDYXBhY2l0eSA9IDE7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMTsKIAog
ICAgICAgICAvLyBPYmplY3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMpCiAgICAgICAgIC8v
IChUZXN0aW5nIGluZGljYXRlcyB0aGF0IHZhbHVlIC8gTUIgZGVwZW5kcyBoZWF2aWx5IG9uIGNv
bnRlbnQgYW5kCkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBXZWJWaWV3OjpzZXRDYWNoZU1vZGVs
KFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIAogICAgIG1lbW9yeUNhY2hlKCkuc2V0Q2FwYWNp
dGllcyhjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90
YWxDYXBhY2l0eSk7CiAgICAgbWVtb3J5Q2FjaGUoKS5zZXREZWFkRGVjb2RlZERhdGFEZWxldGlv
bkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkuc2V0Q2FwYWNpdHkocGFnZUNhY2hlQ2FwYWNpdHkpOworICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKIAogI2lmIFVTRShDRk5FVFdP
UkspCiAgICAgLy8gRG9uJ3Qgc2hyaW5rIGEgYmlnIGRpc2sgY2FjaGUsIHNpbmNlIHRoYXQgd291
bGQgY2F1c2UgY2h1cm4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRleCBhMTc2MTNiMjEz
NjcwMmNiM2YzZGNkYWM3ZTBkNjQzYzMwNTk1YzlhLi43NWUyN2JhNTEwYTJkNGE0MzY1MTkxMjQ5
NTA3Y2MyNDEwNjUyMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKQEAgLTEzMiw3ICsx
MzIsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVtKHVpbnQ2NF90
IGl0ZW1JRCkKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgUGFnZUNhY2hlOjpz
aGFyZWQoKS5yZW1vdmUoKml0ZW0pOwogICAgIFdlYkNvcmU6OlBhZ2U6OmNsZWFyUHJldmlvdXNJ
dGVtRnJvbUFsbFBhZ2VzKGl0ZW0uZ2V0KCkpOwogICAgIGhpc3RvcnlJdGVtVG9JRE1hcCgpLnJl
bW92ZShpdGVtKTsKIH0KQEAgLTIxNiwxMiArMjE2LDEyIEBAIGludCBXZWJCYWNrRm9yd2FyZExp
c3RQcm94eTo6Zm9yd2FyZExpc3RDb3VudCgpCiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6OmNsb3NlKCkKIHsKLSAgICBIYXNoU2V0PHVpbnQ2NF90Pjo6aXRlcmF0b3IgZW5kID0gbV9h
c3NvY2lhdGVkSXRlbUlEcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8dWludDY0X3Q+OjppdGVy
YXRvciBpID0gbV9hc3NvY2lhdGVkSXRlbUlEcy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQotICAg
ICAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZShpdGVtRm9ySUQoKmkpKTsK
KyAgICBmb3IgKGF1dG8mIGl0ZW1JRCA6IG1fYXNzb2NpYXRlZEl0ZW1JRHMpIHsKKyAgICAgICAg
aWYgKEhpc3RvcnlJdGVtKiBpdGVtID0gaXRlbUZvcklEKGl0ZW1JRCkpCisgICAgICAgICAgICBX
ZWJDb3JlOjpQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CisgICAgfQogCiAgICAg
bV9hc3NvY2lhdGVkSXRlbUlEcy5jbGVhcigpOwotCiAgICAgbV9wYWdlID0gbnVsbHB0cjsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IGZiY2I0ZTIyODdhNjhjMmQ2ZWYxZGUzNmFiM2M4YTJjMzczMWIxYTYuLjJlMThmZmIwNjM1OTUw
MjA1ZDAyZmVjZWYyZDUxZGVhMmQ0NjdkOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTEyMDYsNyArMTIwNiw3IEBAIHZvaWQgV2ViUGFn
ZTo6Z29Gb3J3YXJkKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJ
dGVtSUQpCiAgICAgaWYgKCFpdGVtLT5pc0luUGFnZUNhY2hlKCkpCiAgICAgICAgIG1fcGVuZGlu
Z05hdmlnYXRpb25JRCA9IG5hdmlnYXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0oaXRl
bSwgRnJhbWVMb2FkVHlwZTo6Rm9yd2FyZCk7CisgICAgbV9wYWdlLT5nb1RvSXRlbSgqaXRlbSwg
RnJhbWVMb2FkVHlwZTo6Rm9yd2FyZCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z29CYWNrKHVpbnQ2
NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQpCkBAIC0xMjIyLDcg
KzEyMjIsNyBAQCB2b2lkIFdlYlBhZ2U6OmdvQmFjayh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVp
bnQ2NF90IGJhY2tGb3J3YXJkSXRlbUlEKQogICAgIGlmICghaXRlbS0+aXNJblBhZ2VDYWNoZSgp
KQogICAgICAgICBtX3BlbmRpbmdOYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9uSUQ7CiAKLSAgICBt
X3BhZ2UtPmdvVG9JdGVtKGl0ZW0sIEZyYW1lTG9hZFR5cGU6OkJhY2spOworICAgIG1fcGFnZS0+
Z29Ub0l0ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkJhY2spOwogfQogCiB2b2lkIFdlYlBhZ2U6
OmdvVG9CYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCBiYWNr
Rm9yd2FyZEl0ZW1JRCkKQEAgLTEyMzgsNyArMTIzOCw3IEBAIHZvaWQgV2ViUGFnZTo6Z29Ub0Jh
Y2tGb3J3YXJkSXRlbSh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJhY2tGb3J3YXJk
SXRlCiAgICAgaWYgKCFpdGVtLT5pc0luUGFnZUNhY2hlKCkpCiAgICAgICAgIG1fcGVuZGluZ05h
dmlnYXRpb25JRCA9IG5hdmlnYXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0oaXRlbSwg
RnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKKyAgICBtX3BhZ2UtPmdvVG9JdGVt
KCppdGVtLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOwogfQogCiB2b2lkIFdl
YlBhZ2U6OnRyeVJlc3RvcmVTY3JvbGxQb3NpdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAppbmRleCA4YjhiODg0MmEzMmY5NDQ5YjVmZjVkZTM0YjI5YmQ0NTUz
ZmFkZjNhLi45NjE2YjAwZDlmNjYxMjAwMjhjNzMzNzk5NDAwYTk0ZWRkYTMwM2Q5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTExMTYsNyArMTExNiw3IEBA
IHZvaWQgV2ViUHJvY2Vzczo6c2V0VGV4dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0
YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKQogCiB2b2lkIFdlYlByb2Nlc3M6OnJlbGVhc2VQYWdlQ2Fj
aGUoKQogewotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb0NhcGFjaXR5Tm93KDAsIFBy
dW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBy
dW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKIH0KIAogI2lm
ICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2Nv
YS9XZWJQcm9jZXNzQ29jb2EubW0KaW5kZXggODhlNGQ5ODQwMzhhODM3ODFiMGI3YWM3ZTM1ODUy
NzdhYzFiNGQxZi4uNDVhZGMwOWI2NDBiMDc1NjgxOTY3NjI0N2VjMTI2OTdhYzExMmJlYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2Eu
bW0KQEAgLTEwNCwxOCArMTA0LDE4IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNo
ZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICB1bnNpZ25lZCBjYWNoZU1pbkRlYWRD
YXBhY2l0eSA9IDA7CiAgICAgdW5zaWduZWQgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOwogICAg
IGF1dG8gZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjpzZWNv
bmRzIHsgMCB9OwotICAgIHVuc2lnbmVkIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICB1bnNp
Z25lZCBwYWdlQ2FjaGVTaXplID0gMDsKICAgICB1bnNpZ25lZCBsb25nIHVybENhY2hlTWVtb3J5
Q2FwYWNpdHkgPSAwOwogICAgIHVuc2lnbmVkIGxvbmcgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPSAw
OwogCiAgICAgY2FsY3VsYXRlQ2FjaGVTaXplcyhjYWNoZU1vZGVsLCBtZW1TaXplLCBkaXNrRnJl
ZVNpemUsCiAgICAgICAgIGNhY2hlVG90YWxDYXBhY2l0eSwgY2FjaGVNaW5EZWFkQ2FwYWNpdHks
IGNhY2hlTWF4RGVhZENhcGFjaXR5LCBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsLAot
ICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2Fj
aGVEaXNrQ2FwYWNpdHkpOworICAgICAgICBwYWdlQ2FjaGVTaXplLCB1cmxDYWNoZU1lbW9yeUNh
cGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7CiAKIAogICAgIG1lbW9yeUNhY2hlKCkuc2V0
Q2FwYWNpdGllcyhjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNh
Y2hlVG90YWxDYXBhY2l0eSk7CiAgICAgbWVtb3J5Q2FjaGUoKS5zZXREZWFkRGVjb2RlZERhdGFE
ZWxldGlvbkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkuc2V0Q2FwYWNpdHkocGFnZUNhY2hlQ2FwYWNpdHkpOworICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKIAogICAgIE5TVVJM
Q2FjaGUgKm5zdXJsQ2FjaGUgPSBbTlNVUkxDYWNoZSBzaGFyZWRVUkxDYWNoZV07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCmluZGV4
IGJjYzdhZDYxNjEyYjcxODkwNTI2OWRjZTU4ODI3NDQ2MGVhMTMyY2EuLjExOGM3MjJmNzYyNDlh
NWUyZmVhNGFhZWYwNTVmODQ5ZmFjMDljMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lkIFdl
YlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAg
ICAgdW5zaWduZWQgY2FjaGVNaW5EZWFkQ2FwYWNpdHkgPSAwOwogICAgIHVuc2lnbmVkIGNhY2hl
TWF4RGVhZENhcGFjaXR5ID0gMDsKICAgICBhdXRvIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50
ZXJ2YWwgPSBzdGQ6OmNocm9ubzo6c2Vjb25kcyB7IDAgfTsKLSAgICB1bnNpZ25lZCBwYWdlQ2Fj
aGVDYXBhY2l0eSA9IDA7CisgICAgdW5zaWduZWQgcGFnZUNhY2hlU2l6ZSA9IDA7CiAKICAgICB1
bnNpZ25lZCBsb25nIHVybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSAwOwogICAgIHVuc2lnbmVkIGxv
bmcgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkgPSAwOwpAQCAtOTksMTIgKzk5LDEyIEBAIHZvaWQgV2Vi
UHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAg
ICB1aW50NjRfdCBtZW1TaXplID0gZ2V0TWVtb3J5U2l6ZSgpOwogICAgIGNhbGN1bGF0ZUNhY2hl
U2l6ZXMoY2FjaGVNb2RlbCwgbWVtU2l6ZSwgZGlza0ZyZWVTaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVUb3RhbENhcGFjaXR5LCBjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVN
YXhEZWFkQ2FwYWNpdHksIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0
eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNh
Y2hlU2l6ZSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwog
CiAgICAgV2ViQ29yZTo6bWVtb3J5Q2FjaGUoKS5zZXREaXNhYmxlZChjYWNoZU1vZGVsID09IENh
Y2hlTW9kZWxEb2N1bWVudFZpZXdlcik7CiAgICAgV2ViQ29yZTo6bWVtb3J5Q2FjaGUoKS5zZXRD
YXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgY2Fj
aGVUb3RhbENhcGFjaXR5KTsKICAgICBXZWJDb3JlOjptZW1vcnlDYWNoZSgpLnNldERlYWREZWNv
ZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7
Ci0gICAgV2ViQ29yZTo6UGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRDYXBhY2l0eShwYWdlQ2FjaGVD
YXBhY2l0eSk7CisgICAgV2ViQ29yZTo6UGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBh
Z2VDYWNoZVNpemUpOwogCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIFdlYkNvcmU6OlBhZ2VDYWNo
ZTo6c2hhcmVkKCkuc2V0U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245609</attachid>
            <date>2015-01-28 22:12:27 -0800</date>
            <delta_ts>2015-01-29 09:53:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141009-20150128221234.patch</filename>
            <type>text/plain</type>
            <size>67111</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzk5MDRiNzI2MTk5Njg4
N2E0NzI3MTU0ZjVjYWFmODQ1MmNhMzBiNy4uMzZiOGI1N2NjMjhmMDAzZDZkYmRhZmY2YjlhNDZl
ZDY5MDBmYjIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAxLTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5p
emUgUGFnZUNhY2hlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDEwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBDbGVhbiB1cCAvIG1vZGVybml6ZSBQYWdlQ2FjaGUgY2xhc3M6CisgICAgICAg
IC0gVXNlIG1vcmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCisgICAgICAgIC0gVXNl
IGEgTGlzdEhhc2hTZXQ8UmVmPEhpc3RvcnlJdGVtPj4gaW50ZXJuYWxseSBpbnN0ZWFkIG9mIGEg
bGlua2VkCisgICAgICAgICAgbGlzdCBvZiBIaXN0b3J5SXRlbSouIFRoaXMgYXZvaWRzIGhhdmlu
ZyB0aGUgcmVmL3VucmVmIEhpc3RvcnlJdGVtcworICAgICAgICAgIG1hbnVhbGx5IGFuZCBtYWlu
dGFpbmluZyB0aGUgbGlzdCBzaXplIHNlcGFyYXRlbHkuIEl0IGFsc28gc2ltcGxpZmllcworICAg
ICAgICAgIHRoZSBjb2RlIGRlYWxpbmcgd2l0aCB0aGUgY29udGFpbmVyIGFuZCBtYWtlcyBsb29r
aW5nIHVwIEhpc3RvcnlJdGVtcworICAgICAgICAgIGZhc3RlciBhcyBhIGJvbnVzLiBTaW1pbGFy
bHkgdG8gdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLCB3ZSBhcmUKKyAgICAgICAgICBhZGRp
bmcgZWxlbWVudHMgdG8gb25lIGVuZCBhbmQgcmVtb3ZpbmcgZnJvbSB0aGUgb3Bwb3NpdGUgZW5k
IHdoZW4KKyAgICAgICAgICBwcnVuaW5nIHRvIGRyb3Agb2xkIGhpc3RvcnkgaXRlbXMgZmlyc3Qu
IE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUKKyAgICAgICAgICBwcmV2aW91cyBpbXBsZW1lbnRh
dGlvbiB3YXMgY2FsbGVkIExSVUxpc3QsIGl0IGRpZCBub3QgbW92ZSBpdGVtcyB0bworICAgICAg
ICAgIHRoZSBmcm9udCB3aGVuIGFjY2Vzc2VkLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGRvZXNu
J3QgZWl0aGVyLgorICAgICAgICAgLSBSZW5hbWUgImNhcGFjaXR5IiB0byAibWF4U2l6ZSIgdG8g
YXZvaWQgY29uZnVzaW5nIHdpdGggY29udGFpbmVycycKKyAgICAgICAgICAgY2FwYWNpdHkgKHdo
aWNoIGRvZXNuJ3QgbGltaXQgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcikuCisgICAgICAgICAt
IFVzZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIGludCBmb3IgYWxsIHZhbHVlcyB0aGF0IGFyZSBzdXBw
b3NlZCB0byBiZQorICAgICAgICAgICBwb3NpdGl2ZS4KKyAgICAgICAgIC0gRG8gbm90IGV4cGxp
Y2l0ZWx5IGRlZmluZSB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgbGV0IHRoZQorICAgICAg
ICAgICBjb21waWxlciBnZW5lcmF0ZSBpdCBmb3IgdXMgKGFuZCB1c2UgaW4tY2xhc3MgaW5pdGlh
bGl6YXRpb24gZm9yCisgICAgICAgICAgIG1lbWJlcnMpCisgICAgICAgICAtIEZpeCBpbmRlbnRh
dGlvbiBpbiB0aGUgaGVhZGVyLgorCiAyMDE1LTAxLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgUG9vciBwZXJmb3JtYW5jZSBvbiBJRSdz
IENoYWxrYm9hcmQgYmVuY2htYXJrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDY1OTcxNjM2ZmFiM2Rm
ZDIzY2I1ODVhZGI1NWJkZTBkZmY5ZTM2Y2UuLjQwZjlkNjE3YTU2MDMwNzY5MzJkODBlNzNhNWIx
ZWM4MGFhNWU5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0wMS0y
OCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8g
bW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgor
CisgICAgICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW06CisgICAgICAgICgtW1dl
YkJhY2tGb3J3YXJkTGlzdCBwYWdlQ2FjaGVTaXplXSk6CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9sb2FkQmFja0ZvcndhcmRMaXN0RnJvbU90aGVy
VmlldzpdKToKKyAgICAgICAgKC1bV2ViVmlldyBnb1RvQmFja0ZvcndhcmRJdGVtOl0pOgorICAg
ICAgICAoK1tXZWJWaWV3IF9zZXRDYWNoZU1vZGVsOl0pOgorCiAyMDE1LTAxLTI4ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgTW91bnRhaW4gTGlvbiBj
b2RlIGZyb20gV2ViS2l0IGFuZCBXZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggMzU1NmQ3MDIx
MGYyYTdhYmRhOGIyZGU1ZTRmZDQ5YjIyN2EyYTNjZi4uYzc4MWNjZTU5NjU1Yjc4MWYyZWU3OWJm
N2JlMzhkMzhhYjBlYzYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1
LTAxLTI4ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4g
dXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiB1cCAvIG1vZGVybml6ZSBQYWdlQ2FjaGUgY2xh
c3MuCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnNldENhY2hl
TW9kZWwpOgorCiAyMDE1LTAxLTI4ICBwZWF2b0BvdXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2su
Y29tPgogCiAgICAgICAgIFtXaW5DYWlyb10gTWVzc2FnZSBsb29wIGlzIGZsb29kZWQgd2l0aCB0
aW1lciBtZXNzYWdlcyB3aGVuIGFuaW1hdGluZyBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBt
b2RlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IGZlM2EzNTQ3N2M3ZDFiNzU0MmU2N2E3ZTk5Mzg4MjViY2QzOGNk
YjguLjQ4NGI4MDhjMzU4MGY3YjFiNzk4ZGJiNGNmYzQ2ZWFhMGE3YzdiYmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNiBAQAorMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBt
b2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0Zv
cndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6Y2xvc2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29Gb3J3YXJkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6Z29CYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29U
b0JhY2tGb3J3YXJkSXRlbSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cmVsZWFzZVBhZ2VDYWNoZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6
cGxhdGZvcm1TZXRDYWNoZU1vZGVsKToKKwogMjAxNS0wMS0yOCAgVGltIEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgQVBJOjp7RnJhbWVJbmZvLCBOYXZp
Z2F0aW9uQWN0aW9uLCBOYXZpZ2F0aW9uUmVzcG9uc2V9IHR5cGVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CmluZGV4IDgwYWUyODE3YWIzYTY1MmEwYjVjMjMyOGEzMTg2ZGYyZWNjZGZhMDcuLmFkNWU2NDA5
MTg0MDVlZjdmZTY5YmViNTc0OWNlOGY3Y2ZjYjU1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBA
IC0xMjM5LDcgKzEyMzksNyBAQCBfX1pON1dlYkNvcmU0UGFnZTM1cmVzdW1lQWN0aXZlRE9NT2Jq
ZWN0c0FuZEFuaW1hdGlvbnNFdgogX19aTjdXZWJDb3JlNFBhZ2UzNnNldFNob3VsZFN1cHByZXNz
U2Nyb2xsYmFyQW5pbWF0aW9uc0ViCiBfX1pON1dlYkNvcmU0UGFnZTM2c3VzcGVuZEFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zRXYKIF9fWk43V2ViQ29yZTRQYWdlMzdzZXRJbkxvd1F1YWxp
dHlJbWFnZUludGVycG9sYXRpb25Nb2RlRWIKLV9fWk43V2ViQ29yZTRQYWdlOGdvVG9JdGVtRVBO
U18xMUhpc3RvcnlJdGVtRU5TXzEzRnJhbWVMb2FkVHlwZUUKK19fWk43V2ViQ29yZTRQYWdlOGdv
VG9JdGVtRVJOU18xMUhpc3RvcnlJdGVtRU5TXzEzRnJhbWVMb2FkVHlwZUUKIF9fWk43V2ViQ29y
ZTRQYWdlOHNldE11dGVkRWIKIF9fWk43V2ViQ29yZTRQYWdlOWluaXRHcm91cEV2CiBfX1pON1dl
YkNvcmU0UGFnZUMxRVJOU18xN1BhZ2VDb25maWd1cmF0aW9uRQpAQCAtMTYwNiwxMCArMTYwNiwx
MCBAQCBfX1pON1dlYkNvcmU5SlNFbGVtZW50NnNfaW5mb0UKIF9fWk43V2ViQ29yZTlKU0VsZW1l
bnQ5dG9XcmFwcGVkRU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmU5TGF5ZXJQb29sQzFFdgog
X19aTjdXZWJDb3JlOUxheWVyUG9vbEQxRXYKLV9fWk43V2ViQ29yZTlQYWdlQ2FjaGUxMXNldENh
cGFjaXR5RWkKLV9fWk43V2ViQ29yZTlQYWdlQ2FjaGUxOHBydW5lVG9DYXBhY2l0eU5vd0VpTlNf
MTNQcnVuaW5nUmVhc29uRQorX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTEwc2V0TWF4U2l6ZUVqCitf
X1pON1dlYkNvcmU5UGFnZUNhY2hlMTRwcnVuZVRvU2l6ZU5vd0VqTlNfMTNQcnVuaW5nUmVhc29u
RQogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTM0bWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJl
Y2FsY0V2Ci1fX1pON1dlYkNvcmU5UGFnZUNhY2hlNnJlbW92ZUVQTlNfMTFIaXN0b3J5SXRlbUUK
K19fWk43V2ViQ29yZTlQYWdlQ2FjaGU2cmVtb3ZlRVJOU18xMUhpc3RvcnlJdGVtRQogX19aTjdX
ZWJDb3JlOVBhZ2VDYWNoZTZzaGFyZWRFdgogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDlwYWdlR3Jv
dXBFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmU5U2Nyb2xsYmFyMTFtb3VzZUV4aXRlZEV2
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAK
aW5kZXggOWMxNjcyMjRhNzlkZTNmYjc5ZjNiODg1NjVhNWQ0YTZkZDE3ZWVkOC4uODYyOTQ0ZWVi
M2NjOWM4NDMwYTgyOTgxMGFlY2M3OTM3ZWQ4ODRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQmFja0ZvcndhcmRDb250cm9sbGVyLmNwcApAQCAtNzEsMzAgKzcxLDI2IEBAIHZv
aWQgQmFja0ZvcndhcmRDb250cm9sbGVyOjpnb0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNlKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3BhZ2UuZ29Ub0l0ZW0oaXRlbSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJk
KTsKKyAgICBpZiAoaXRlbSkKKyAgICAgICAgbV9wYWdlLmdvVG9JdGVtKCppdGVtLCBGcmFtZUxv
YWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOwogfQogCiBib29sIEJhY2tGb3J3YXJkQ29udHJv
bGxlcjo6Z29CYWNrKCkKIHsKLSAgICBIaXN0b3J5SXRlbSogaXRlbSA9IGJhY2tJdGVtKCk7Ci0g
ICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BhZ2UuZ29Ub0l0
ZW0oaXRlbSwgRnJhbWVMb2FkVHlwZTo6QmFjayk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KEhpc3RvcnlJdGVtKiBpdGVtID0gYmFja0l0ZW0oKSkgeworICAgICAgICBtX3BhZ2UuZ29Ub0l0
ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkJhY2spOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEJhY2tGb3J3YXJkQ29udHJvbGxlcjo6
Z29Gb3J3YXJkKCkKIHsKLSAgICBIaXN0b3J5SXRlbSogaXRlbSA9IGZvcndhcmRJdGVtKCk7Ci0g
ICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3BhZ2UuZ29Ub0l0
ZW0oaXRlbSwgRnJhbWVMb2FkVHlwZTo6Rm9yd2FyZCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKEhpc3RvcnlJdGVtKiBpdGVtID0gZm9yd2FyZEl0ZW0oKSkgeworICAgICAgICBtX3BhZ2Uu
Z29Ub0l0ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkZvcndhcmQpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIEJhY2tGb3J3YXJkQ29u
dHJvbGxlcjo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCmluZGV4IGNjZTA3ZjQ5OTkxNGRlMzdi
MzExOGJhMDc4YjNmOWE1MDI0Yzc2MDUuLmIzYWQ2MTk3ZTJiNzFlMWFkODM4MWYzYzczYzZkZWRj
NGUwMDU4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRM
aXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAK
QEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0
cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKICAgICAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4g
aXRlbSA9IG1fZW50cmllcy5sYXN0KCk7CiAgICAgICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFz
dCgpOwogICAgICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICAgICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbS5nZXQoKSk7CisgICAgICAgICAgICBQYWdl
Q2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc4
LDcgKzc4LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0
b3J5SXRlbT4gcHJwSXRlbSkKICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9l
bnRyaWVzWzBdOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDApOwogICAgICAgICBtX2VudHJ5
SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKGl0
ZW0uZ2V0KCkpOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAg
ICAgICAgIG1fY3VycmVudC0tOwogICAgIH0KIApAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgQmFj
a0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0eShpbnQgc2l6ZSkKICAgICAgICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKICAgICAgICAgbV9lbnRyaWVzLnJlbW92
ZUxhc3QoKTsKICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICBQYWdl
Q2FjaGU6OnNoYXJlZCgpLnJlbW92ZShpdGVtLmdldCgpKTsKKyAgICAgICAgUGFnZUNhY2hlOjpz
aGFyZWQoKS5yZW1vdmUoKml0ZW0pOwogICAgIH0KIAogICAgIGlmICghc2l6ZSkKQEAgLTI0Miwx
MiArMjQyLDEwIEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRDdXJyZW50KHVuc2lnbmVkIG5l
d0N1cnJlbnQpCiBib29sIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJBbGxQYWdlQ2FjaGVzKCkKIHsK
ICAgICBib29sIGRpZFJlbW92ZUF0TGVhc3RPbmVJdGVtID0gZmFsc2U7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gbV9lbnRyaWVzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSGlzdG9yeUl0ZW0qIGl0ZW0gPSBtX2VudHJpZXNbaV0u
Z2V0KCk7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9lbnRyaWVzKSB7CiAgICAgICAgIGlmIChp
dGVtLT5pc0luUGFnZUNhY2hlKCkpIHsKICAgICAgICAgICAgIGRpZFJlbW92ZUF0TGVhc3RPbmVJ
dGVtID0gdHJ1ZTsKLSAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKGl0ZW0p
OworICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOwogICAgICAg
ICB9CiAgICAgfQogICAgIHJldHVybiBkaWRSZW1vdmVBdExlYXN0T25lSXRlbTsKQEAgLTI1Niwx
MiArMjU0LDExIEBAIGJvb2wgQmFja0ZvcndhcmRMaXN0OjpjbGVhckFsbFBhZ2VDYWNoZXMoKQog
CiB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xvc2UoKQogewotICAgIGludCBzaXplID0gbV9lbnRy
aWVzLnNpemUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUobV9lbnRyaWVzW2ldLmdldCgpKTsKKyAgICBmb3Ig
KGF1dG8mIGl0ZW0gOiBtX2VudHJpZXMpCisgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVt
b3ZlKCppdGVtKTsKICAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICBtX2VudHJ5SGFzaC5jbGVh
cigpOwotICAgIG1fcGFnZSA9IDA7CisgICAgbV9wYWdlID0gbnVsbHB0cjsKICAgICBtX2Nsb3Nl
ZCA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9y
eUl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKaW5kZXgg
MGM0NzNjMDk2YzFiNTFjMTViMGU2YzJjOTJkZTU5ZjA1MTUzNTgxMy4uMWI1MjVkZjI4YzQ0NzZm
ZjIwZjMyNjUxMWEzYTE0YWM1NTJiZDYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9IaXN0b3J5SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5
SXRlbS5jcHAKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIEhpc3RvcnlJdGVtOjpzZXRVUkxTdHJp
bmcoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCiAKIHZvaWQgSGlzdG9yeUl0ZW06OnNldFVSTChj
b25zdCBVUkwmIHVybCkKIHsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSh0aGlzKTsK
KyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqdGhpcyk7CiAgICAgc2V0VVJMU3RyaW5n
KHVybC5zdHJpbmcoKSk7CiAgICAgY2xlYXJEb2N1bWVudFN0YXRlKCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L1BhZ2VDYWNoZS5jcHAKaW5kZXggOWY1M2E2YmY3MmZhNmYzMjZhZDBhNzYwNWI1OTQ4
ZTI3NTk1Njk3NC4uZDM5N2FmY2RhYTRiN2FiOWUzYjNjYjM3MzdmOWM1N2Y1NWJkYmI0OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDcgKzQzLDYg
QEAKICNpbmNsdWRlICJGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkhpc3RvcnlDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiSGlzdG9y
eUl0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAj
aW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCkBAIC0xMTAsNyArMTA5LDcgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShQYWdl
KiBwYWdlLCBjb25zdCBTdHJpbmcKICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01l
c3NhZ2UocGFnZS0+bWFpbkZyYW1lKCkuZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoKSwgcmVhc29u
KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihGcmFtZSYg
ZnJhbWUsIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwg
aW50IGluZGVudExldmVsKQorc3RhdGljIHVuc2lnbmVkIGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lv
bihGcmFtZSYgZnJhbWUsIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBkaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudCwgdW5zaWduZWQgaW5kZW50TGV2ZWwpCiB7CiAgICAgUENMT0coIistLS0iKTsKICAg
ICBpZiAoIWZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpIHsKQEAgLTIzNCw3ICsyMzMs
NyBAQCBzdGF0aWMgdm9pZCBsb2dDYW5DYWNoZVBhZ2VEZWNpc2lvbihQYWdlJiBwYWdlKQogICAg
IGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlu
dCBpbmRlbnRMZXZlbCA9IDA7ICAgIAorICAgIHVuc2lnbmVkIGluZGVudExldmVsID0gMDsKICAg
ICBQQ0xPRygiLS0tLS0tLS1cbiBEZXRlcm1pbmluZyBpZiBwYWdlIGNhbiBiZSBjYWNoZWQ6Iik7
CiAgICAgCiAgICAgdW5zaWduZWQgcmVqZWN0UmVhc29ucyA9IDA7CkBAIC0yOTcsMjYgKzI5Niwx
NyBAQCBQYWdlQ2FjaGUmIFBhZ2VDYWNoZTo6c2hhcmVkKCkKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8UGFnZUNhY2hlPiBnbG9iYWxQYWdlQ2FjaGU7CiAgICAgcmV0dXJuIGdsb2JhbFBhZ2VD
YWNoZTsKIH0KLQotUGFnZUNhY2hlOjpQYWdlQ2FjaGUoKQotICAgIDogbV9jYXBhY2l0eSgwKQot
ICAgICwgbV9zaXplKDApCi0gICAgLCBtX2hlYWQoMCkKLSAgICAsIG1fdGFpbCgwKQotICAgICwg
bV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXMoZmFsc2UpCi17Ci19CiAgICAgCi1ib29sIFBhZ2VD
YWNoZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCitib29s
IFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSYgZnJhbWUp
CiB7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlm
ICghY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShjaGlsZCkpCisgICAgZm9yIChGcmFt
ZSogY2hpbGQgPSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjYW5DYWNoZVBhZ2VDb250
YWluaW5nVGhpc0ZyYW1lKCpjaGlsZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIAotICAgIEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsK
KyAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBmcmFtZS5sb2FkZXIoKTsKICAgICBEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZUxvYWRlci5kb2N1bWVudExvYWRlcigp
OwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7CiAgICAgCiAgICAgcmV0dXJuIGRvY3Vt
ZW50TG9hZGVyCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTMyNiw4ICszMTYsOCBAQCBib29sIFBh
Z2VDYWNoZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSogZnJhbWUpCiAj
ZW5kaWYKICAgICAgICAgLy8gRG8gbm90IGNhY2hlIGVycm9yIHBhZ2VzICh0aGVzZSBjYW4gYmUg
cmVjb2duaXplZCBhcyBwYWdlcyB3aXRoIHN1YnN0aXR1dGUgZGF0YSBvciB1bnJlYWNoYWJsZSBV
UkxzKS4KICAgICAgICAgJiYgIShkb2N1bWVudExvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5pc1Zh
bGlkKCkgJiYgIWRvY3VtZW50TG9hZGVyLT5zdWJzdGl0dXRlRGF0YSgpLmZhaWxpbmdVUkwoKS5p
c0VtcHR5KCkpCi0gICAgICAgICYmICghZnJhbWVMb2FkZXIuc3ViZnJhbWVMb2FkZXIoKS5jb250
YWluc1BsdWdpbnMoKSB8fCBmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLnBhZ2VDYWNoZVN1cHBv
cnRzUGx1Z2lucygpKQotICAgICAgICAmJiAhKGZyYW1lLT5pc01haW5GcmFtZSgpICYmIGRvY3Vt
ZW50LT51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYmIGRvY3VtZW50TG9hZGVyLT5yZXNwb25z
ZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQorICAgICAgICAmJiAoIWZyYW1lTG9h
ZGVyLnN1YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkgfHwgZnJhbWUucGFnZSgpLT5z
ZXR0aW5ncygpLnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpKQorICAgICAgICAmJiAhKGZyYW1l
LmlzTWFpbkZyYW1lKCkgJiYgZG9jdW1lbnQtPnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYg
ZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkp
CiAgICAgICAgICYmICFEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKS5oYXNPcGVuRGF0YWJhc2Vz
KGRvY3VtZW50KQogICAgICAgICAmJiBmcmFtZUxvYWRlci5oaXN0b3J5KCkuY3VycmVudEl0ZW0o
KQogICAgICAgICAmJiAhZnJhbWVMb2FkZXIucXVpY2tSZWRpcmVjdENvbWluZygpCkBAIC0zNTcs
OCArMzQ3LDggQEAgYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hlKFBhZ2UqIHBhZ2UpIGNvbnN0CiAg
ICAgLy8gb3ZlciBpdCBhZ2FpbiB3aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KICAgICBGcmFtZUxv
YWRUeXBlIGxvYWRUeXBlID0gcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkubG9hZFR5cGUoKTsK
ICAgICAKLSAgICByZXR1cm4gbV9jYXBhY2l0eSA+IDAKLSAgICAgICAgJiYgY2FuQ2FjaGVQYWdl
Q29udGFpbmluZ1RoaXNGcmFtZSgmcGFnZS0+bWFpbkZyYW1lKCkpCisgICAgcmV0dXJuIG1fbWF4
U2l6ZSA+IDAKKyAgICAgICAgJiYgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShwYWdl
LT5tYWluRnJhbWUoKSkKICAgICAgICAgJiYgcGFnZS0+c2V0dGluZ3MoKS51c2VzUGFnZUNhY2hl
KCkKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKSAmJiAhUExBVEZPUk0oSU9TKQogICAg
ICAgICAmJiAhRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChwYWdlKQpAQCAtMzcz
LDI3ICszNjMsMjQgQEAgYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hlKFBhZ2UqIHBhZ2UpIGNvbnN0
CiAgICAgICAgICAgICB8fCBsb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0Zv
cndhcmQpOwogfQogCi12b2lkIFBhZ2VDYWNoZTo6cHJ1bmVUb0NhcGFjaXR5Tm93KGludCBjYXBh
Y2l0eSwgUHJ1bmluZ1JlYXNvbiBwcnVuaW5nUmVhc29uKQordm9pZCBQYWdlQ2FjaGU6OnBydW5l
VG9TaXplTm93KHVuc2lnbmVkIHNpemUsIFBydW5pbmdSZWFzb24gcHJ1bmluZ1JlYXNvbikKIHsK
LSAgICBUZW1wb3JhcnlDaGFuZ2U8aW50PihtX2NhcGFjaXR5LCBzdGQ6Om1heChjYXBhY2l0eSwg
MCkpOworICAgIFRlbXBvcmFyeUNoYW5nZTx1bnNpZ25lZD4obV9tYXhTaXplLCBzaXplKTsKICAg
ICBwcnVuZShwcnVuaW5nUmVhc29uKTsKIH0KIAotdm9pZCBQYWdlQ2FjaGU6OnNldENhcGFjaXR5
KGludCBjYXBhY2l0eSkKK3ZvaWQgUGFnZUNhY2hlOjpzZXRNYXhTaXplKHVuc2lnbmVkIG1heFNp
emUpCiB7Ci0gICAgQVNTRVJUKGNhcGFjaXR5ID49IDApOwotICAgIG1fY2FwYWNpdHkgPSBzdGQ6
Om1heChjYXBhY2l0eSwgMCk7Ci0KKyAgICBtX21heFNpemUgPSBtYXhTaXplOwogICAgIHBydW5l
KFBydW5pbmdSZWFzb246Ok5vbmUpOwogfQogCi1pbnQgUGFnZUNhY2hlOjpmcmFtZUNvdW50KCkg
Y29uc3QKK3Vuc2lnbmVkIFBhZ2VDYWNoZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiB7Ci0gICAgaW50
IGZyYW1lQ291bnQgPSAwOwotICAgIGZvciAoSGlzdG9yeUl0ZW0qIGN1cnJlbnQgPSBtX2hlYWQ7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHQpIHsKLSAgICAgICAgKytmcmFtZUNv
dW50OwotICAgICAgICBBU1NFUlQoY3VycmVudC0+bV9jYWNoZWRQYWdlKTsKLSAgICAgICAgZnJh
bWVDb3VudCArPSBjdXJyZW50LT5tX2NhY2hlZFBhZ2UtPmNhY2hlZE1haW5GcmFtZSgpLT5kZXNj
ZW5kYW50RnJhbWVDb3VudCgpOworICAgIHVuc2lnbmVkIGZyYW1lQ291bnQgPSBtX2l0ZW1zLnNp
emUoKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIEFTU0VSVChp
dGVtLT5tX2NhY2hlZFBhZ2UpOworICAgICAgICBmcmFtZUNvdW50ICs9IGl0ZW0tPm1fY2FjaGVk
UGFnZS0+Y2FjaGVkTWFpbkZyYW1lKCktPmRlc2NlbmRhbnRGcmFtZUNvdW50KCk7CiAgICAgfQog
ICAgIAogICAgIHJldHVybiBmcmFtZUNvdW50OwpAQCAtNDAxLDI2ICszODgsMjYgQEAgaW50IFBh
Z2VDYWNoZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiAKIHZvaWQgUGFnZUNhY2hlOjptYXJrUGFnZXNG
b3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCkKIHsKLSAgICBmb3IgKEhpc3RvcnlJdGVtKiBjdXJy
ZW50ID0gbV9oZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bV9uZXh0KSB7Ci0gICAg
ICAgIEFTU0VSVChjdXJyZW50LT5tX2NhY2hlZFBhZ2UpOwotICAgICAgICBjdXJyZW50LT5tX2Nh
Y2hlZFBhZ2UtPm1hcmtGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgZm9yIChhdXRv
JiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBBU1NFUlQoaXRlbS0+bV9jYWNoZWRQYWdlKTsK
KyAgICAgICAgaXRlbS0+bV9jYWNoZWRQYWdlLT5tYXJrRm9yVmlzaXRlZExpbmtTdHlsZVJlY2Fs
YygpOwogICAgIH0KIH0KIAotdm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJl
Y2FsYyhQYWdlKiBwYWdlKQordm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJl
Y2FsYyhQYWdlJiBwYWdlKQogewotICAgIGZvciAoSGlzdG9yeUl0ZW0qIGN1cnJlbnQgPSBtX2hl
YWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHQpIHsKLSAgICAgICAgQ2FjaGVk
UGFnZSYgY2FjaGVkUGFnZSA9ICpjdXJyZW50LT5tX2NhY2hlZFBhZ2U7Ci0gICAgICAgIGlmICgm
cGFnZS0+bWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCktPnZpZXco
KS0+ZnJhbWUoKSkKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIENh
Y2hlZFBhZ2UmIGNhY2hlZFBhZ2UgPSAqaXRlbS0+bV9jYWNoZWRQYWdlOworICAgICAgICBpZiAo
JnBhZ2UubWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCktPnZpZXco
KS0+ZnJhbWUoKSkKICAgICAgICAgICAgIGNhY2hlZFBhZ2UubWFya0ZvckZ1bGxTdHlsZVJlY2Fs
YygpOwogICAgIH0KIH0KIAotdm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckRldmljZVNjYWxl
Q2hhbmdlZChQYWdlKiBwYWdlKQordm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckRldmljZVNj
YWxlQ2hhbmdlZChQYWdlJiBwYWdlKQogewotICAgIGZvciAoSGlzdG9yeUl0ZW0qIGN1cnJlbnQg
PSBtX2hlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHQpIHsKLSAgICAgICAg
Q2FjaGVkUGFnZSYgY2FjaGVkUGFnZSA9ICpjdXJyZW50LT5tX2NhY2hlZFBhZ2U7Ci0gICAgICAg
IGlmICgmcGFnZS0+bWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCkt
PnZpZXcoKS0+ZnJhbWUoKSkKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAg
ICAgIENhY2hlZFBhZ2UmIGNhY2hlZFBhZ2UgPSAqaXRlbS0+bV9jYWNoZWRQYWdlOworICAgICAg
ICBpZiAoJnBhZ2UubWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVkTWFpbkZyYW1lKCkt
PnZpZXcoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgIGNhY2hlZFBhZ2UubWFya0ZvckRldmljZVNj
YWxlQ2hhbmdlZCgpOwogICAgIH0KIH0KQEAgLTQyOCw5ICs0MTUsOSBAQCB2b2lkIFBhZ2VDYWNo
ZTo6bWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKFBhZ2UqIHBhZ2UpCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQogdm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJl
bmNlc0NoYW5nZWQoKQogewotICAgIGZvciAoSGlzdG9yeUl0ZW0qIGN1cnJlbnQgPSBtX2hlYWQ7
IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHQpIHsKLSAgICAgICAgQVNTRVJUKGN1
cnJlbnQtPm1fY2FjaGVkUGFnZSk7Ci0gICAgICAgIGN1cnJlbnQtPm1fY2FjaGVkUGFnZS0+bWFy
a0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBt
X2l0ZW1zKSB7CisgICAgICAgIEFTU0VSVChpdGVtLT5tX2NhY2hlZFBhZ2UpOworICAgICAgICBp
dGVtLT5tX2NhY2hlZFBhZ2UtPm1hcmtGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAg
ICAgfQogfQogI2VuZGlmCkBAIC00NDIsNyArNDI5LDcgQEAgc3RhdGljIFN0cmluZyBwcnVuaW5n
UmVhc29uVG9EaWFnbm9zdGljTG9nZ2luZ0tleShQcnVuaW5nUmVhc29uIHBydW5pbmdSZWFzb24p
CiAgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnBydW5lZER1ZVRvTWVtb3J5
UHJlc3N1cmVLZXkoKTsKICAgICBjYXNlIFBydW5pbmdSZWFzb246OlByb2Nlc3NTdXNwZW5kZWQ6
CiAgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnBydW5lZER1ZVRvUHJvY2Vz
c1N1c3BlbmRlZCgpOwotICAgIGNhc2UgUHJ1bmluZ1JlYXNvbjo6UmVhY2hlZENhcGFjaXR5Ogor
ICAgIGNhc2UgUHJ1bmluZ1JlYXNvbjo6UmVhY2hlZE1heFNpemU6CiAgICAgICAgIHJldHVybiBE
aWFnbm9zdGljTG9nZ2luZ0tleXM6OnBydW5lZER1ZVRvQ2FwYWNpdHlSZWFjaGVkKCk7CiAgICAg
Y2FzZSBQcnVuaW5nUmVhc29uOjpOb25lOgogICAgICAgICBicmVhazsKQEAgLTQ1MSw0NSArNDM4
LDMzIEBAIHN0YXRpYyBTdHJpbmcgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXko
UHJ1bmluZ1JlYXNvbiBwcnVuaW5nUmVhc29uKQogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwog
fQogCi12b2lkIFBhZ2VDYWNoZTo6YWRkKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IHBycEl0ZW0s
IFBhZ2UmIHBhZ2UpCit2b2lkIFBhZ2VDYWNoZTo6YWRkKEhpc3RvcnlJdGVtJiBpdGVtLCBQYWdl
JiBwYWdlKQogewotICAgIEFTU0VSVChwcnBJdGVtKTsKICAgICBBU1NFUlQoY2FuQ2FjaGUoJnBh
Z2UpKTsKLSAgICAKLSAgICBIaXN0b3J5SXRlbSogaXRlbSA9IHBycEl0ZW0ubGVha1JlZigpOyAv
LyBCYWxhbmNlZCBpbiByZW1vdmUoKS4KIAogICAgIC8vIFJlbW92ZSBzdGFsZSBjYWNoZSBlbnRy
eSBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKGl0ZW0tPm1fY2FjaGVkUGFnZSkKLSAgICAgICAgcmVt
b3ZlKGl0ZW0pOworICAgIHJlbW92ZShpdGVtKTsKIAotICAgIGl0ZW0tPm1fY2FjaGVkUGFnZSA9
IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVkUGFnZT4ocGFnZSk7Ci0gICAgaXRlbS0+bV9wcnVuaW5n
UmVhc29uID0gUHJ1bmluZ1JlYXNvbjo6Tm9uZTsKLSAgICBhZGRUb0xSVUxpc3QoaXRlbSk7Ci0g
ICAgKyttX3NpemU7CisgICAgaXRlbS5tX2NhY2hlZFBhZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENh
Y2hlZFBhZ2U+KHBhZ2UpOworICAgIGl0ZW0ubV9wcnVuaW5nUmVhc29uID0gUHJ1bmluZ1JlYXNv
bjo6Tm9uZTsKKyAgICBtX2l0ZW1zLmFkZCgmaXRlbSk7CiAgICAgCi0gICAgcHJ1bmUoUHJ1bmlu
Z1JlYXNvbjo6UmVhY2hlZENhcGFjaXR5KTsKKyAgICBwcnVuZShQcnVuaW5nUmVhc29uOjpSZWFj
aGVkTWF4U2l6ZSk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBQYWdlQ2FjaGU6
OnRha2UoSGlzdG9yeUl0ZW0qIGl0ZW0sIFBhZ2UqIHBhZ2UpCitzdGQ6OnVuaXF1ZV9wdHI8Q2Fj
aGVkUGFnZT4gUGFnZUNhY2hlOjp0YWtlKEhpc3RvcnlJdGVtJiBpdGVtLCBQYWdlKiBwYWdlKQog
ewotICAgIGlmICghaXRlbSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IFdURjo6bW92ZShpdGVtLT5tX2NhY2hl
ZFBhZ2UpOwotCi0gICAgcmVtb3ZlRnJvbUxSVUxpc3QoaXRlbSk7Ci0gICAgLS1tX3NpemU7Ci0K
LSAgICBpdGVtLT5kZXJlZigpOyAvLyBCYWxhbmNlZCBpbiBhZGQoKS4KLQotICAgIGlmICghY2Fj
aGVkUGFnZSkgewotICAgICAgICBpZiAoaXRlbS0+bV9wcnVuaW5nUmVhc29uICE9IFBydW5pbmdS
ZWFzb246Ok5vbmUpCi0gICAgICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01l
c3NhZ2UocGFnZSwgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoaXRlbS0+bV9w
cnVuaW5nUmVhc29uKSk7CisgICAgaWYgKCFpdGVtLm1fY2FjaGVkUGFnZSkgeworICAgICAgICBp
ZiAoaXRlbS5tX3BydW5pbmdSZWFzb24gIT0gUHJ1bmluZ1JlYXNvbjo6Tm9uZSkKKyAgICAgICAg
ICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBwcnVuaW5nUmVh
c29uVG9EaWFnbm9zdGljTG9nZ2luZ0tleShpdGVtLm1fcHJ1bmluZ1JlYXNvbikpOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFn
ZT4gY2FjaGVkUGFnZSA9IFdURjo6bW92ZShpdGVtLm1fY2FjaGVkUGFnZSk7CisgICAgbV9pdGVt
cy5yZW1vdmUoJml0ZW0pOworCiAgICAgaWYgKGNhY2hlZFBhZ2UtPmhhc0V4cGlyZWQoKSkgewot
ICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJh
Y2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaXRlbS0+
dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBMT0coUGFnZUNhY2hlLCAi
Tm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNl
IGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaXRlbS51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CiAgICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdl
LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmV4cGlyZWRLZXkoKSk7CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KQEAgLTQ5Nyw3OCArNDcyLDQxIEBAIHN0ZDo6dW5pcXVlX3B0cjxDYWNo
ZWRQYWdlPiBQYWdlQ2FjaGU6OnRha2UoSGlzdG9yeUl0ZW0qIGl0ZW0sIFBhZ2UqIHBhZ2UpCiAg
ICAgcmV0dXJuIGNhY2hlZFBhZ2U7CiB9CiAKLUNhY2hlZFBhZ2UqIFBhZ2VDYWNoZTo6Z2V0KEhp
c3RvcnlJdGVtKiBpdGVtLCBQYWdlKiBwYWdlKQorQ2FjaGVkUGFnZSogUGFnZUNhY2hlOjpnZXQo
SGlzdG9yeUl0ZW0mIGl0ZW0sIFBhZ2UqIHBhZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCFpdGVtKQor
ICAgIENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBpdGVtLm1fY2FjaGVkUGFnZS5nZXQoKTsKKyAg
ICBpZiAoIWNhY2hlZFBhZ2UpIHsKKyAgICAgICAgaWYgKGl0ZW0ubV9wcnVuaW5nUmVhc29uICE9
IFBydW5pbmdSZWFzb246Ok5vbmUpCisgICAgICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlh
Z25vc3RpY01lc3NhZ2UocGFnZSwgcHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXko
aXRlbS5tX3BydW5pbmdSZWFzb24pKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQog
Ci0gICAgaWYgKENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBpdGVtLT5tX2NhY2hlZFBhZ2UuZ2V0
KCkpIHsKLSAgICAgICAgaWYgKCFjYWNoZWRQYWdlLT5oYXNFeHBpcmVkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gY2FjaGVkUGFnZTsKLSAgICAgICAgCi0gICAgICAgIExPRyhQYWdlQ2FjaGUsICJO
b3QgcmVzdG9yaW5nIHBhZ2UgZm9yICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2Ug
Y2FjaGUgZW50cnkgaGFzIGV4cGlyZWQiLCBpdGVtLT51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgaWYgKGNhY2hlZFBhZ2UtPmhhc0V4cGlyZWQoKSkgeworICAgICAgICBMT0co
UGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBj
YWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaXRlbS51cmwoKS5zdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGlj
TWVzc2FnZShwYWdlLCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmV4cGlyZWRLZXkoKSk7CiAgICAg
ICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKGl0ZW0pOwotICAgIH0gZWxzZSBpZiAoaXRl
bS0+bV9wcnVuaW5nUmVhc29uICE9IFBydW5pbmdSZWFzb246Ok5vbmUpCi0gICAgICAgIGxvZ1Bh
Z2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBwcnVuaW5nUmVhc29uVG9EaWFn
bm9zdGljTG9nZ2luZ0tleShpdGVtLT5tX3BydW5pbmdSZWFzb24pKTsKLQotICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hl
ZFBhZ2U7CiB9CiAKLXZvaWQgUGFnZUNhY2hlOjpyZW1vdmUoSGlzdG9yeUl0ZW0qIGl0ZW0pCit2
b2lkIFBhZ2VDYWNoZTo6cmVtb3ZlKEhpc3RvcnlJdGVtJiBpdGVtKQogewogICAgIC8vIFNhZmVs
eSBpZ25vcmUgYXR0ZW1wdHMgdG8gcmVtb3ZlIGl0ZW1zIG5vdCBpbiB0aGUgY2FjaGUuCi0gICAg
aWYgKCFpdGVtIHx8ICFpdGVtLT5tX2NhY2hlZFBhZ2UpCisgICAgaWYgKCFpdGVtLm1fY2FjaGVk
UGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaXRlbS0+bV9jYWNoZWRQYWdlID0gbnVsbHB0
cjsKLSAgICByZW1vdmVGcm9tTFJVTGlzdChpdGVtKTsKLSAgICAtLW1fc2l6ZTsKLQotICAgIGl0
ZW0tPmRlcmVmKCk7IC8vIEJhbGFuY2VkIGluIGFkZCgpLgorICAgIGl0ZW0ubV9jYWNoZWRQYWdl
ID0gbnVsbHB0cjsKKyAgICBtX2l0ZW1zLnJlbW92ZSgmaXRlbSk7CiB9CiAKIHZvaWQgUGFnZUNh
Y2hlOjpwcnVuZShQcnVuaW5nUmVhc29uIHBydW5pbmdSZWFzb24pCiB7Ci0gICAgd2hpbGUgKG1f
c2l6ZSA+IG1fY2FwYWNpdHkpIHsKLSAgICAgICAgQVNTRVJUKG1fdGFpbCAmJiBtX3RhaWwtPm1f
Y2FjaGVkUGFnZSk7Ci0gICAgICAgIG1fdGFpbC0+bV9wcnVuaW5nUmVhc29uID0gcHJ1bmluZ1Jl
YXNvbjsKLSAgICAgICAgcmVtb3ZlKG1fdGFpbCk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VDYWNo
ZTo6YWRkVG9MUlVMaXN0KEhpc3RvcnlJdGVtKiBpdGVtKQotewotICAgIGl0ZW0tPm1fbmV4dCA9
IG1faGVhZDsKLSAgICBpdGVtLT5tX3ByZXYgPSAwOwotCi0gICAgaWYgKG1faGVhZCkgewotICAg
ICAgICBBU1NFUlQobV90YWlsKTsKLSAgICAgICAgbV9oZWFkLT5tX3ByZXYgPSBpdGVtOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCghbV90YWlsKTsKLSAgICAgICAgbV90YWlsID0gaXRl
bTsKLSAgICB9Ci0KLSAgICBtX2hlYWQgPSBpdGVtOwotfQotCi12b2lkIFBhZ2VDYWNoZTo6cmVt
b3ZlRnJvbUxSVUxpc3QoSGlzdG9yeUl0ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKCFpdGVtLT5tX25l
eHQpIHsKLSAgICAgICAgQVNTRVJUKGl0ZW0gPT0gbV90YWlsKTsKLSAgICAgICAgbV90YWlsID0g
aXRlbS0+bV9wcmV2OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChpdGVtICE9IG1fdGFp
bCk7Ci0gICAgICAgIGl0ZW0tPm1fbmV4dC0+bV9wcmV2ID0gaXRlbS0+bV9wcmV2OwotICAgIH0K
LQotICAgIGlmICghaXRlbS0+bV9wcmV2KSB7Ci0gICAgICAgIEFTU0VSVChpdGVtID09IG1faGVh
ZCk7Ci0gICAgICAgIG1faGVhZCA9IGl0ZW0tPm1fbmV4dDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBBU1NFUlQoaXRlbSAhPSBtX2hlYWQpOwotICAgICAgICBpdGVtLT5tX3ByZXYtPm1fbmV4dCA9
IGl0ZW0tPm1fbmV4dDsKKyAgICB3aGlsZSAocGFnZUNvdW50KCkgPiBtYXhTaXplKCkpIHsKKyAg
ICAgICAgYXV0byYgb2xkZXN0SXRlbSA9IG1faXRlbXMuZmlyc3QoKTsKKyAgICAgICAgb2xkZXN0
SXRlbS0+bV9jYWNoZWRQYWdlID0gbnVsbHB0cjsKKyAgICAgICAgb2xkZXN0SXRlbS0+bV9wcnVu
aW5nUmVhc29uID0gcHJ1bmluZ1JlYXNvbjsKKyAgICAgICAgbV9pdGVtcy5yZW1vdmVGaXJzdCgp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2Fj
aGUuaCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgKaW5kZXggYzMxMGQ0ZTI4
MWI0Yzk5MjlhZGE2OTlhMmZmODlkM2Y0NDk1OTdmZC4uOTUzNmE5Zjg2ZGYyMTRkYTMxYWM0YWZl
OWUzNzQyN2E0ODY1MzkxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdl
Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNzcg
KzI2LDY2IEBACiAjaWZuZGVmIFBhZ2VDYWNoZV9oCiAjZGVmaW5lIFBhZ2VDYWNoZV9oCiAKKyNp
bmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBDYWNoZWRQYWdlOwotICAgIGNsYXNzIEZyYW1lOwotICAgIGNs
YXNzIEhpc3RvcnlJdGVtOwotICAgIGNsYXNzIFBhZ2U7CitjbGFzcyBDYWNoZWRQYWdlOworY2xh
c3MgRnJhbWU7CitjbGFzcyBQYWdlOwogCi0gICAgZW51bSBjbGFzcyBQcnVuaW5nUmVhc29uIHsg
Tm9uZSwgUHJvY2Vzc1N1c3BlbmRlZCwgTWVtb3J5UHJlc3N1cmUsIFJlYWNoZWRDYXBhY2l0eSB9
OwotICAgIAotICAgIGNsYXNzIFBhZ2VDYWNoZSB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFBhZ2VDYWNoZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgLy8gRnVuY3Rpb24gdG8gb2J0YWluIHRoZSBnbG9iYWwgcGFnZSBjYWNoZS4KLSAgICAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhZ2VDYWNoZSYgc2hhcmVkKCk7Ci0gICAgICAgIAot
ICAgICAgICBib29sIGNhbkNhY2hlKFBhZ2UqKSBjb25zdDsKK2VudW0gY2xhc3MgUHJ1bmluZ1Jl
YXNvbiB7IE5vbmUsIFByb2Nlc3NTdXNwZW5kZWQsIE1lbW9yeVByZXNzdXJlLCBSZWFjaGVkTWF4
U2l6ZSB9OwogCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2FwYWNpdHkoaW50KTsg
Ly8gbnVtYmVyIG9mIHBhZ2VzIHRvIGNhY2hlCi0gICAgICAgIGludCBjYXBhY2l0eSgpIHsgcmV0
dXJuIG1fY2FwYWNpdHk7IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+LCBQYWdlJik7IC8vIFBydW5lcyBpZiBjYXBhY2l0eSgpIGlzIGV4Y2VlZGVk
LgotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZShIaXN0b3J5SXRlbSopOwotICAg
ICAgICBDYWNoZWRQYWdlKiBnZXQoSGlzdG9yeUl0ZW0qLCBQYWdlKik7Ci0gICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiB0YWtlKEhpc3RvcnlJdGVtKiwgUGFnZSopOworY2xhc3Mg
UGFnZUNhY2hlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlQ2FjaGUpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAvLyBGdW5jdGlvbiB0byBvYnRhaW4gdGhl
IGdsb2JhbCBwYWdlIGNhY2hlLgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYWdlQ2FjaGUm
IHNoYXJlZCgpOwogCi0gICAgICAgIGludCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGZyYW1lQ291bnQoKSBjb25zdDsKKyAg
ICBib29sIGNhbkNhY2hlKFBhZ2UqKSBjb25zdDsKIAotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIG1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICAvLyBVc2VkIHdo
ZW4gbWVtb3J5IGlzIGxvdyB0byBwcnVuZSBzb21lIGNhY2hlZCBwYWdlcy4KKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHBydW5lVG9TaXplTm93KHVuc2lnbmVkIG1heFNpemUsIFBydW5pbmdSZWFz
b24pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWF4U2l6ZSh1bnNpZ25lZCk7IC8vIG51
bWJlciBvZiBwYWdlcyB0byBjYWNoZS4KKyAgICB1bnNpZ25lZCBtYXhTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXhTaXplOyB9CiAKLSAgICAgICAgLy8gV2lsbCBtYXJrIGFsbCBjYWNoZWQgcGFn
ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBwYWdlIGFzIG5lZWRpbmcgc3R5bGUgcmVjYWxj
LgotICAgICAgICB2b2lkIG1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyhQYWdlKik7CisgICAg
dm9pZCBhZGQoSGlzdG9yeUl0ZW0mLCBQYWdlJik7IC8vIFBydW5lcyBpZiBtYXhTaXplKCkgaXMg
ZXhjZWVkZWQuCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoSGlzdG9yeUl0ZW0mKTsK
KyAgICBDYWNoZWRQYWdlKiBnZXQoSGlzdG9yeUl0ZW0mLCBQYWdlKikgY29uc3Q7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IHRha2UoSGlzdG9yeUl0ZW0mLCBQYWdlKik7CiAKLSAg
ICAgICAgLy8gVXNlZCB3aGVuIG1lbW9yeSBpcyBsb3cgdG8gcHJ1bmUgc29tZSBjYWNoZWQgcGFn
ZXMuCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJ1bmVUb0NhcGFjaXR5Tm93KGludCBj
YXBhY2l0eSwgUHJ1bmluZ1JlYXNvbik7CisgICAgdW5zaWduZWQgcGFnZUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVtcy5zaXplKCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBm
cmFtZUNvdW50KCkgY29uc3Q7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1hcmtQYWdlc0Zv
clZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICAvLyBXaWxsIG1hcmsgYWxsIGNhY2hlZCBw
YWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHBhZ2UgYXMgbmVlZGluZyBzdHlsZSByZWNh
bGMuCisgICAgdm9pZCBtYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoUGFnZSYpOworICAgIHZv
aWQgbWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKFBhZ2UmKTsKICNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0gICAgICAgIHZvaWQgbWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hh
bmdlZCgpOworICAgIHZvaWQgbWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgp
OwogI2VuZGlmCiAKLSAgICAgICAgYm9vbCBzaG91bGRDbGVhckJhY2tpbmdTdG9yZXMoKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZENsZWFyQmFja2luZ1N0b3JlczsgfQotICAgICAgICB2b2lkIHNl
dFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyhib29sIGZsYWcpIHsgbV9zaG91bGRDbGVhckJhY2tp
bmdTdG9yZXMgPSBmbGFnOyB9Ci0gICAgICAgIHZvaWQgbWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVD
aGFuZ2VkKFBhZ2UqKTsKKyAgICBib29sIHNob3VsZENsZWFyQmFja2luZ1N0b3JlcygpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzOyB9CisgICAgdm9pZCBzZXRTaG91
bGRDbGVhckJhY2tpbmdTdG9yZXMoYm9vbCBmbGFnKSB7IG1fc2hvdWxkQ2xlYXJCYWNraW5nU3Rv
cmVzID0gZmxhZzsgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUGFnZUNhY2hlKCk7IC8vIFVz
ZSBzaGFyZWQoKSBpbnN0ZWFkLgotICAgICAgICB+UGFnZUNhY2hlKCk7IC8vIE5vdCBpbXBsZW1l
bnRlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGFjY2lkZW50YWxseSBjYWxscyBkZWxldGUgLS0gV2Vi
Q29yZSBkb2VzIG5vdCBkZWxldGUgc2luZ2xldG9ucy4KLSAgICAgICAgCi0gICAgICAgIHN0YXRp
YyBib29sIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUqKTsKK3ByaXZhdGU6
CisgICAgUGFnZUNhY2hlKCkgPSBkZWZhdWx0OyAvLyBVc2Ugc2hhcmVkKCkgaW5zdGVhZC4KKyAg
ICB+UGFnZUNhY2hlKCkgPSBkZWxldGU7IC8vIE1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5
IGNhbGxzIGRlbGV0ZSAtLSBXZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgogCi0g
ICAgICAgIHZvaWQgYWRkVG9MUlVMaXN0KEhpc3RvcnlJdGVtKik7IC8vIEFkZHMgdG8gdGhlIGhl
YWQgb2YgdGhlIGxpc3QuCi0gICAgICAgIHZvaWQgcmVtb3ZlRnJvbUxSVUxpc3QoSGlzdG9yeUl0
ZW0qKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKEZy
YW1lJik7CiAKLSAgICAgICAgdm9pZCBwcnVuZShQcnVuaW5nUmVhc29uKTsKKyAgICB2b2lkIHBy
dW5lKFBydW5pbmdSZWFzb24pOwogCi0gICAgICAgIGludCBtX2NhcGFjaXR5OwotICAgICAgICBp
bnQgbV9zaXplOworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxIaXN0b3J5SXRlbT4+IG1faXRlbXM7
CisgICAgdW5zaWduZWQgbV9tYXhTaXplIHswfTsKKyAgICBib29sIG1fc2hvdWxkQ2xlYXJCYWNr
aW5nU3RvcmVzIHtmYWxzZX07CiAKLSAgICAgICAgLy8gTFJVIExpc3QKLSAgICAgICAgSGlzdG9y
eUl0ZW0qIG1faGVhZDsKLSAgICAgICAgSGlzdG9yeUl0ZW0qIG1fdGFpbDsKLSAgICAgICAgCi0g
ICAgICAgIGJvb2wgbV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXM7Ci0KLSAgICAgICAgZnJpZW5k
IGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8UGFnZUNhY2hlPjsKLSAgICB9OworICAgIGZyaWVu
ZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFBhZ2VDYWNoZT47Cit9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDkw
YjVhMGEzM2VjNmI4Y2JmYTFkNTkxYTZlZjZmMDkyMGQ0ZDdkYzQuLjk1ZmVmNjFlMDYwYjI2ZTgw
MDhkODQ1MmI2ZTcyMjcxZDk1NzBhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcApAQCAtOTIxLDcgKzkyMSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRvQ2hp
bGRGcmFtZShjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcmVyLCBGCiAgICAgICAg
IEhpc3RvcnlJdGVtKiBjaGlsZEl0ZW0gPSBwYXJlbnRJdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0
KGNoaWxkRnJhbWUtPnRyZWUoKS51bmlxdWVOYW1lKCkpOwogICAgICAgICBpZiAoY2hpbGRJdGVt
KSB7CiAgICAgICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5tX3JlcXVlc3RlZEhpc3RvcnlJ
dGVtID0gY2hpbGRJdGVtOwotICAgICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkubG9hZERp
ZmZlcmVudERvY3VtZW50SXRlbShjaGlsZEl0ZW0sIGxvYWRUeXBlKCksIE1heUF0dGVtcHRDYWNo
ZU9ubHlMb2FkRm9yRm9ybVN1Ym1pc3Npb25JdGVtKTsKKyAgICAgICAgICAgIGNoaWxkRnJhbWUt
PmxvYWRlcigpLmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oKmNoaWxkSXRlbSwgbG9hZFR5cGUo
KSwgTWF5QXR0ZW1wdENhY2hlT25seUxvYWRGb3JGb3JtU3VibWlzc2lvbkl0ZW0pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTc0MCw4ICsxNzQwLDggQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKICAgICBSZWY8RnJhbWU+IHBy
b3RlY3QobV9mcmFtZSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVk
UGFnZTsKLSAgICBpZiAobV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2UpCi0gICAgICAgIGNhY2hlZFBh
Z2UgPSBQYWdlQ2FjaGU6OnNoYXJlZCgpLnRha2UoaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgp
LCBtX2ZyYW1lLnBhZ2UoKSk7CisgICAgaWYgKG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlICYmIGhp
c3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKSkKKyAgICAgICAgY2FjaGVkUGFnZSA9IFBhZ2VDYWNo
ZTo6c2hhcmVkKCkudGFrZSgqaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpLCBtX2ZyYW1lLnBh
Z2UoKSk7CiAKICAgICBMT0coUGFnZUNhY2hlLCAiV2ViQ29yZUxvYWRpbmcgJXM6IEFib3V0IHRv
IGNvbW1pdCBwcm92aXNpb25hbCBsb2FkIGZyb20gcHJldmlvdXMgVVJMICclcycgdG8gbmV3IFVS
TCAnJXMnIiwgbV9mcmFtZS50cmVlKCkudW5pcXVlTmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksCiAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKSA/IG1fZnJhbWUuZG9jdW1lbnQoKS0+dXJs
KCkuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkudXRmOCgpLmRhdGEoKSA6ICIiLApA
QCAtMTc1OCwxMSArMTc1OCwxMSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25h
bExvYWQoKQogICAgICAgICAgICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiUHJ1bmluZyBwYWdlIGNh
Y2hlIGJlY2F1c2UgdW5kZXIgbWVtb3J5IHByZXNzdXJlIGF0OiAlcyIsIF9fUFJFVFRZX0ZVTkNU
SU9OX18pOwogICAgICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFnZSBjYWNoZSB0
byAwIGR1ZSB0byBtZW1vcnkgcHJlc3N1cmUiKTsKICAgICAgICAgICAgIC8vIERvbid0IGNhY2hl
IGFueSBwYWdlIGlmIHdlIGFyZSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCi0gICAgICAgICAgICBQ
YWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9DYXBhY2l0eU5vdygwLCBQcnVuaW5nUmVhc29uOjpN
ZW1vcnlQcmVzc3VyZSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9T
aXplTm93KDAsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKICAgICAgICAgfSBlbHNl
IGlmIChzeXN0ZW1NZW1vcnlMZXZlbCgpIDw9IG1lbW9yeUxldmVsVGhyZXNob2xkVG9QcnVuZVBh
Z2VDYWNoZSkgewogICAgICAgICAgICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiUHJ1bmluZyBwYWdl
IGNhY2hlIGJlY2F1c2Ugc3lzdGVtIG1lbW9yeSBsZXZlbCBpcyAlZCBhdDogJXMiLCBzeXN0ZW1N
ZW1vcnlMZXZlbCgpLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKICAgICAgICAgICAgIExPRyhQYWdl
Q2FjaGUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgdG8gJWQgZHVlIHRvIGxvdyBtZW1vcnkgKGxldmVs
ICVkIGxlc3Mgb3IgZXF1YWwgdG8gJWQgdGhyZXNob2xkKSIsIFBhZ2VDYWNoZTo6c2hhcmVkKCku
Y2FwYWNpdHkoKSAvIDIsIHN5c3RlbU1lbW9yeUxldmVsKCksIG1lbW9yeUxldmVsVGhyZXNob2xk
VG9QcnVuZVBhZ2VDYWNoZSk7Ci0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5l
VG9DYXBhY2l0eU5vdyhQYWdlQ2FjaGU6OnNoYXJlZCgpLmNhcGFjaXR5KCkgLyAyLCBQcnVuaW5n
UmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnBydW5lVG9TaXplTm93KFBhZ2VDYWNoZTo6c2hhcmVkKCkubWF4U2l6ZSgpIC8gMiwgUHJ1bmlu
Z1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0x
NzcxLDggKzE3NzEsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQo
KQogCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY2FjaGUgdGhlIHBhZ2Ugd2Ug
YXJlIG5hdmlnYXRpbmcgYXdheSBmcm9tIGludG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KICAg
ICAvLyBXZSBhcmUgZG9pbmcgdGhpcyBoZXJlIGJlY2F1c2Ugd2Uga25vdyBmb3Igc3VyZSB0aGF0
IGEgbmV3IHBhZ2UgaXMgYWJvdXQgdG8gYmUgbG9hZGVkLgotICAgIEhpc3RvcnlJdGVtKiBpdGVt
ID0gaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCk7Ci0gICAgaWYgKCFtX2ZyYW1lLnRyZWUoKS5wYXJl
bnQoKSAmJiBQYWdlQ2FjaGU6OnNoYXJlZCgpLmNhbkNhY2hlKG1fZnJhbWUucGFnZSgpKSAmJiAh
aXRlbS0+aXNJblBhZ2VDYWNoZSgpKQorICAgIEhpc3RvcnlJdGVtJiBpdGVtID0gKmhpc3Rvcnko
KS5jdXJyZW50SXRlbSgpOworICAgIGlmICghbV9mcmFtZS50cmVlKCkucGFyZW50KCkgJiYgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5jYW5DYWNoZShtX2ZyYW1lLnBhZ2UoKSkgJiYgIWl0ZW0uaXNJblBh
Z2VDYWNoZSgpKQogICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLmFkZChpdGVtLCAqbV9mcmFt
ZS5wYWdlKCkpOwogCiAgICAgaWYgKG1fbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZTo6UmVwbGFj
ZSkKQEAgLTMxMjcsMTQgKzMxMjcsMTQgQEAgRnJhbWUqIEZyYW1lTG9hZGVyOjpmaW5kRnJhbWVG
b3JOYXZpZ2F0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRG9jdW1lbnQqIGEKICAgICAg
ICAgYWN0aXZlRG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCk7CiAKICAgICBpZiAoIWFjdGl2
ZURvY3VtZW50LT5jYW5OYXZpZ2F0ZShmcmFtZSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBmcmFtZTsKIH0KIAotdm9pZCBGcmFtZUxv
YWRlcjo6bG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIEZyYW1l
TG9hZGVyOjpsb2FkU2FtZURvY3VtZW50SXRlbShIaXN0b3J5SXRlbSYgaXRlbSkKIHsKLSAgICBB
U1NFUlQoaXRlbS0+ZG9jdW1lbnRTZXF1ZW5jZU51bWJlcigpID09IGhpc3RvcnkoKS5jdXJyZW50
SXRlbSgpLT5kb2N1bWVudFNlcXVlbmNlTnVtYmVyKCkpOworICAgIEFTU0VSVChpdGVtLmRvY3Vt
ZW50U2VxdWVuY2VOdW1iZXIoKSA9PSBoaXN0b3J5KCkuY3VycmVudEl0ZW0oKS0+ZG9jdW1lbnRT
ZXF1ZW5jZU51bWJlcigpKTsKIAogICAgIC8vIFNhdmUgdXNlciB2aWV3IHN0YXRlIHRvIHRoZSBj
dXJyZW50IGhpc3RvcnkgaXRlbSBoZXJlIHNpbmNlIHdlIGRvbid0IGRvIGEgbm9ybWFsIGxvYWQu
CiAgICAgLy8gRklYTUU6IERvZXMgZm9ybSBzdGF0ZSBuZWVkIHRvIGJlIHNhdmVkIGhlcmUgdG9v
PwpAQCAtMzE0MiwxMCArMzE0MiwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkU2FtZURvY3Vt
ZW50SXRlbShIaXN0b3J5SXRlbSogaXRlbSkKICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9m
cmFtZS52aWV3KCkpCiAgICAgICAgIHZpZXctPnNldFdhc1Njcm9sbGVkQnlVc2VyKGZhbHNlKTsK
IAotICAgIGhpc3RvcnkoKS5zZXRDdXJyZW50SXRlbShpdGVtKTsKKyAgICBoaXN0b3J5KCkuc2V0
Q3VycmVudEl0ZW0oJml0ZW0pOwogICAgICAgICAKICAgICAvLyBsb2FkSW5TYW1lRG9jdW1lbnQo
KSBhY3R1YWxseSBjaGFuZ2VzIHRoZSBVUkwgYW5kIG5vdGlmaWVzIGxvYWQgZGVsZWdhdGVzIG9m
IGEgImZha2UiIGxvYWQKLSAgICBsb2FkSW5TYW1lRG9jdW1lbnQoaXRlbS0+dXJsKCksIGl0ZW0t
PnN0YXRlT2JqZWN0KCksIGZhbHNlKTsKKyAgICBsb2FkSW5TYW1lRG9jdW1lbnQoaXRlbS51cmwo
KSwgaXRlbS5zdGF0ZU9iamVjdCgpLCBmYWxzZSk7CiAKICAgICAvLyBSZXN0b3JlIHVzZXIgdmll
dyBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50IGhpc3RvcnkgaXRlbSBoZXJlIHNpbmNlIHdlIGRvbid0
IGRvIGEgbm9ybWFsIGxvYWQuCiAgICAgaGlzdG9yeSgpLnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFu
ZFZpZXdTdGF0ZSgpOwpAQCAtMzE1NCwxMCArMzE1NCwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjps
b2FkU2FtZURvY3VtZW50SXRlbShIaXN0b3J5SXRlbSogaXRlbSkKIC8vIEZJWE1FOiBUaGlzIGZ1
bmN0aW9uIHNob3VsZCByZWFsbHkgYmUgc3BsaXQgaW50byBhIGNvdXBsZSBwaWVjZXMsIHNvbWUg
b2YKIC8vIHdoaWNoIHNob3VsZCBiZSBtZXRob2RzIG9mIEhpc3RvcnlDb250cm9sbGVyIGFuZCBz
b21lIG9mIHdoaWNoIHNob3VsZCBiZQogLy8gbWV0aG9kcyBvZiBGcmFtZUxvYWRlci4KLXZvaWQg
RnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0s
IEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUsIEZvcm1TdWJtaXNzaW9uQ2FjaGVMb2FkUG9saWN5IGNh
Y2hlTG9hZFBvbGljeSkKK3ZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0
ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUsIEZvcm1TdWJtaXNz
aW9uQ2FjaGVMb2FkUG9saWN5IGNhY2hlTG9hZFBvbGljeSkKIHsKICAgICAvLyBSZW1lbWJlciB0
aGlzIGl0ZW0gc28gd2UgY2FuIHRyYXZlcnNlIGFueSBjaGlsZCBpdGVtcyBhcyBjaGlsZCBmcmFt
ZXMgbG9hZAotICAgIGhpc3RvcnkoKS5zZXRQcm92aXNpb25hbEl0ZW0oaXRlbSk7CisgICAgaGlz
dG9yeSgpLnNldFByb3Zpc2lvbmFsSXRlbSgmaXRlbSk7CiAKICAgICBpZiAoQ2FjaGVkUGFnZSog
Y2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkuZ2V0KGl0ZW0sIG1fZnJhbWUucGFnZSgp
KSkgewogICAgICAgICBhdXRvIGRvY3VtZW50TG9hZGVyID0gY2FjaGVkUGFnZS0+ZG9jdW1lbnRM
b2FkZXIoKTsKQEAgLTMxNjcsMTcgKzMxNjcsMTcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERp
ZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2EK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFVSTCBpdGVtVVJMID0gaXRlbS0+dXJsKCk7
Ci0gICAgVVJMIGl0ZW1PcmlnaW5hbFVSTCA9IGl0ZW0tPm9yaWdpbmFsVVJMKCk7CisgICAgVVJM
IGl0ZW1VUkwgPSBpdGVtLnVybCgpOworICAgIFVSTCBpdGVtT3JpZ2luYWxVUkwgPSBpdGVtLm9y
aWdpbmFsVVJMKCk7CiAgICAgVVJMIGN1cnJlbnRVUkw7CiAgICAgaWYgKGRvY3VtZW50TG9hZGVy
KCkpCiAgICAgICAgIGN1cnJlbnRVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmwoKTsKLSAgICBS
ZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhID0gaXRlbS0+Zm9ybURhdGEoKTsKKyAgICBSZWZQdHI8
Rm9ybURhdGE+IGZvcm1EYXRhID0gaXRlbS5mb3JtRGF0YSgpOwogCiAgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QoaXRlbVVSTCk7CiAKLSAgICBpZiAoIWl0ZW0tPnJlZmVycmVyKCkuaXNOdWxs
KCkpCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKGl0ZW0tPnJlZmVycmVyKCkpOwor
ICAgIGlmICghaXRlbS5yZWZlcnJlcigpLmlzTnVsbCgpKQorICAgICAgICByZXF1ZXN0LnNldEhU
VFBSZWZlcnJlcihpdGVtLnJlZmVycmVyKCkpOwogICAgIAogICAgIC8vIElmIHRoaXMgd2FzIGEg
cmVwb3N0IHRoYXQgZmFpbGVkIHRoZSBwYWdlIGNhY2hlLCB3ZSBtaWdodCB0cnkgdG8gcmVwb3N0
IHRoZSBmb3JtLgogICAgIE5hdmlnYXRpb25BY3Rpb24gYWN0aW9uOwpAQCAtMzE4Niw4ICszMTg2
LDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5
SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2EKIAogICAgICAgICByZXF1ZXN0LnNldEhUVFBN
ZXRob2QoIlBPU1QiKTsKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShmb3JtRGF0YSk7Ci0g
ICAgICAgIHJlcXVlc3Quc2V0SFRUUENvbnRlbnRUeXBlKGl0ZW0tPmZvcm1Db250ZW50VHlwZSgp
KTsKLSAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IFNlY3Vy
aXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGl0ZW0tPnJlZmVycmVyKCkpOworICAgICAgICBy
ZXF1ZXN0LnNldEhUVFBDb250ZW50VHlwZShpdGVtLmZvcm1Db250ZW50VHlwZSgpKTsKKyAgICAg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGVGcm9tU3RyaW5nKGl0ZW0ucmVmZXJyZXIoKSk7CiAgICAgICAgIGFkZEhUVFBPcmln
aW5JZk5lZWRlZChyZXF1ZXN0LCBzZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSk7CiAKICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRvIGFkZCBleHRyYSBmaWVsZHMgdG8gdGhlIHJlcXVlc3QgYWZ0ZXIg
dGhlIE9yaWdpbiBoZWFkZXIgaXMgYWRkZWQgZm9yIHRoZSBGb3JtRGF0YSBjYXNlLgpAQCAtMzI0
MiwxMSArMzI0MiwxMSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJ
dGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYQogfQogCiAvLyBMb2FkcyBj
b250ZW50IGludG8gdGhpcyBmcmFtZSwgYXMgc3BlY2lmaWVkIGJ5IGhpc3RvcnkgaXRlbQotdm9p
ZCBGcmFtZUxvYWRlcjo6bG9hZEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUg
bG9hZFR5cGUpCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0b3J5SXRlbSYgaXRlbSwg
RnJhbWVMb2FkVHlwZSBsb2FkVHlwZSkKIHsKLSAgICBtX3JlcXVlc3RlZEhpc3RvcnlJdGVtID0g
aXRlbTsKKyAgICBtX3JlcXVlc3RlZEhpc3RvcnlJdGVtID0gJml0ZW07CiAgICAgSGlzdG9yeUl0
ZW0qIGN1cnJlbnRJdGVtID0gaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCk7Ci0gICAgYm9vbCBzYW1l
RG9jdW1lbnROYXZpZ2F0aW9uID0gY3VycmVudEl0ZW0gJiYgaXRlbS0+c2hvdWxkRG9TYW1lRG9j
dW1lbnROYXZpZ2F0aW9uVG8oY3VycmVudEl0ZW0pOworICAgIGJvb2wgc2FtZURvY3VtZW50TmF2
aWdhdGlvbiA9IGN1cnJlbnRJdGVtICYmIGl0ZW0uc2hvdWxkRG9TYW1lRG9jdW1lbnROYXZpZ2F0
aW9uVG8oY3VycmVudEl0ZW0pOwogCiAgICAgaWYgKHNhbWVEb2N1bWVudE5hdmlnYXRpb24pCiAg
ICAgICAgIGxvYWRTYW1lRG9jdW1lbnRJdGVtKGl0ZW0pOwpAQCAtMzI2MCwxMSArMzI2MCwxMiBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpyZXRyeUFmdGVyRmFpbGVkQ2FjaGVPbmx5TWFpblJlc291cmNl
TG9hZCgpCiAgICAgQVNTRVJUKCFtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSk7CiAgICAgLy8gV2Ug
b25seSB1c2UgY2FjaGUtb25seSBsb2FkcyB0byBhdm9pZCByZXN1Ym1pdHRpbmcgZm9ybXMuCiAg
ICAgQVNTRVJUKGlzQmFja0ZvcndhcmRMb2FkVHlwZShtX2xvYWRUeXBlKSk7CisgICAgQVNTRVJU
KGhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKSk7CiAgICAgQVNTRVJUKGhpc3RvcnkoKS5wcm92
aXNpb25hbEl0ZW0oKS0+Zm9ybURhdGEoKSk7CiAgICAgQVNTRVJUKGhpc3RvcnkoKS5wcm92aXNp
b25hbEl0ZW0oKSA9PSBtX3JlcXVlc3RlZEhpc3RvcnlJdGVtLmdldCgpKTsKIAogICAgIEZyYW1l
TG9hZFR5cGUgbG9hZFR5cGUgPSBtX2xvYWRUeXBlOwotICAgIEhpc3RvcnlJdGVtKiBpdGVtID0g
aGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpOworICAgIEhpc3RvcnlJdGVtJiBpdGVtID0gKmhp
c3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKTsKIAogICAgIHN0b3BBbGxMb2FkZXJzKFNob3VsZE5v
dENsZWFyUHJvdmlzaW9uYWxJdGVtKTsKICAgICBsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKGl0
ZW0sIGxvYWRUeXBlLCBNYXlOb3RBdHRlbXB0Q2FjaGVPbmx5TG9hZEZvckZvcm1TdWJtaXNzaW9u
SXRlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCmluZGV4IDZkNTU4MDY2NTdmMWM5
MzM5YzQwZTkwMjNmNjAyYWJlOTljZjRjZGIuLjA2ZmE4ZjA1YjhmMjA0MDUzNTU5YjRmNTJmOWMx
ZDJjNzgwNjBjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCkBAIC0xMjUsNyAr
MTI1LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVsb2FkV2l0aE92ZXJy
aWRlRW5jb2RpbmcoY29uc3QgU3RyaW5nJiBvdmVycmlkZUVuY29kaW5nKTsKIAogICAgIHZvaWQg
b3BlbihDYWNoZWRGcmFtZUJhc2UmKTsKLSAgICB2b2lkIGxvYWRJdGVtKEhpc3RvcnlJdGVtKiwg
RnJhbWVMb2FkVHlwZSk7CisgICAgdm9pZCBsb2FkSXRlbShIaXN0b3J5SXRlbSYsIEZyYW1lTG9h
ZFR5cGUpOwogICAgIEhpc3RvcnlJdGVtKiByZXF1ZXN0ZWRIaXN0b3J5SXRlbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVxdWVzdGVkSGlzdG9yeUl0ZW0uZ2V0KCk7IH0KIAogICAgIHZvaWQgcmV0cnlB
ZnRlckZhaWxlZENhY2hlT25seU1haW5SZXNvdXJjZUxvYWQoKTsKQEAgLTI5OSw4ICsyOTksOCBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBjaGVja1RpbWVyRmlyZWQoKTsKICAgICAKLSAgICB2b2lk
IGxvYWRTYW1lRG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKik7Ci0gICAgdm9pZCBsb2FkRGlmZmVy
ZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSwgRm9ybVN1Ym1pc3Np
b25DYWNoZUxvYWRQb2xpY3kpOworICAgIHZvaWQgbG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9y
eUl0ZW0mKTsKKyAgICB2b2lkIGxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0m
LCBGcmFtZUxvYWRUeXBlLCBGb3JtU3VibWlzc2lvbkNhY2hlTG9hZFBvbGljeSk7CiAgICAgCiAg
ICAgdm9pZCBsb2FkUHJvdmlzaW9uYWxJdGVtRnJvbUNhY2hlZFBhZ2UoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKaW5kZXggOWI4M2E4NDdkZDA1MDhh
N2FhNTZkNTk4YTMxNDQ4YTY1MzUxYjhkYS4uODMzZTU4ODRiYWEwN2IzNWIxYjM1ZTVmNGJhYzM3
ZGIzOWM5ZGRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIu
Y3BwCkBAIC0yMzQsMTEgKzIzNCwxMyBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3Jl
RG9jdW1lbnRTdGF0ZSgpCiAKIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OmludmFsaWRhdGVDdXJy
ZW50SXRlbUNhY2hlZFBhZ2UoKQogewotICAgIC8vIFdoZW4gd2UgYXJlIHByZS1jb21taXQsIHRo
ZSBjdXJyZW50SXRlbSBpcyB3aGVyZSBhbnkgcGFnZSBjYWNoZSBkYXRhIHJlc2lkZXMuCi0gICAg
aWYgKCFQYWdlQ2FjaGU6OnNoYXJlZCgpLmdldChjdXJyZW50SXRlbSgpLCBtX2ZyYW1lLnBhZ2Uo
KSkpCisgICAgaWYgKCFjdXJyZW50SXRlbSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2hhcmVkKCku
dGFrZShjdXJyZW50SXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7CisgICAgLy8gV2hlbiB3ZSBhcmUg
cHJlLWNvbW1pdCwgdGhlIGN1cnJlbnRJdGVtIGlzIHdoZXJlIGFueSBwYWdlIGNhY2hlIGRhdGEg
cmVzaWRlcy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IFBh
Z2VDYWNoZTo6c2hhcmVkKCkudGFrZSgqY3VycmVudEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOwor
ICAgIGlmICghY2FjaGVkUGFnZSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRo
aXMgaXMgYSBncm90ZXNxdWUgaGFjayB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQwNTkwNTk+IENy
YXNoIGluIFJlbmRlckZsb3c6OmRldGFjaAogICAgIC8vIFNvbWVob3cgdGhlIFBhZ2VTdGF0ZSBv
YmplY3QgaXMgbm90IHByb3Blcmx5IHVwZGF0ZWQsIGFuZCBpcyBob2xkaW5nIG9udG8gYSBzdGFs
ZSBkb2N1bWVudC4KQEAgLTI2NSw3ICsyNjcsNyBAQCBib29sIEhpc3RvcnlDb250cm9sbGVyOjpz
aG91bGRTdG9wTG9hZGluZ0Zvckhpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJdGVtKQog
CiAvLyBNYWluIGZ1bm5lbCBmb3IgbmF2aWdhdGluZyB0byBhIHByZXZpb3VzIGxvY2F0aW9uIChi
YWNrL2ZvcndhcmQsIG5vbi1zZWFyY2ggc25hcC1iYWNrKQogLy8gVGhpcyBpbmNsdWRlcyByZWN1
cnNpb24gdG8gaGFuZGxlIGxvYWRpbmcgaW50byBmcmFtZXNldHMgcHJvcGVybHkKLXZvaWQgSGlz
dG9yeUNvbnRyb2xsZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJdGVtLCBGcmFtZUxv
YWRUeXBlIHR5cGUpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRlbShIaXN0b3J5SXRl
bSYgdGFyZ2V0SXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQogewogICAgIEFTU0VSVCghbV9mcmFt
ZS50cmVlKCkucGFyZW50KCkpOwogICAgIApAQCAtMjc2LDEwICsyNzgsMTAgQEAgdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9h
ZFR5cGUgdHlwZSkKICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2ZyYW1lLmxvYWRlcigpLmNsaWVudCgp
LnNob3VsZEdvVG9IaXN0b3J5SXRlbSh0YXJnZXRJdGVtKSkKKyAgICBpZiAoIW1fZnJhbWUubG9h
ZGVyKCkuY2xpZW50KCkuc2hvdWxkR29Ub0hpc3RvcnlJdGVtKCZ0YXJnZXRJdGVtKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGlmIChtX2RlZmVyc0xvYWRpbmcpIHsKLSAgICAgICAgbV9kZWZlcnJl
ZEl0ZW0gPSB0YXJnZXRJdGVtOworICAgICAgICBtX2RlZmVycmVkSXRlbSA9ICZ0YXJnZXRJdGVt
OwogICAgICAgICBtX2RlZmVycmVkRnJhbWVMb2FkVHlwZSA9IHR5cGU7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yODgsNyArMjkwLDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29U
b0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKICAgICAv
LyAtIHBsdXMsIGl0IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9w
ZXJhdGlvbiB0aHJvdWdoIHRoZSBmcmFtZSB0cmVlLAogICAgIC8vIGFzIG9wcG9zZWQgdG8gaGFw
cGVuaW5nIGZvciBzb21lL29uZSBvZiB0aGUgcGFnZSBjb21taXRzIHRoYXQgbWlnaHQgaGFwcGVu
IHNvb24KICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGN1cnJlbnRJdGVtID0gcGFnZS0+YmFja0Zv
cndhcmQoKS5jdXJyZW50SXRlbSgpOwotICAgIHBhZ2UtPmJhY2tGb3J3YXJkKCkuc2V0Q3VycmVu
dEl0ZW0odGFyZ2V0SXRlbSk7CisgICAgcGFnZS0+YmFja0ZvcndhcmQoKS5zZXRDdXJyZW50SXRl
bSgmdGFyZ2V0SXRlbSk7CiAgICAgbV9mcmFtZS5sb2FkZXIoKS5jbGllbnQoKS51cGRhdGVHbG9i
YWxIaXN0b3J5SXRlbUZvclBhZ2UoKTsKIAogICAgIC8vIEZpcnN0IHNldCB0aGUgcHJvdmlzaW9u
YWwgaXRlbSBvZiBhbnkgZnJhbWVzIHRoYXQgYXJlIG5vdCBhY3R1YWxseSBuYXZpZ2F0aW5nLgpA
QCAtMzA1LDggKzMwNyw4IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRp
bmcoYm9vbCBkZWZlcikKIHsKICAgICBtX2RlZmVyc0xvYWRpbmcgPSBkZWZlcjsKICAgICBpZiAo
IWRlZmVyICYmIG1fZGVmZXJyZWRJdGVtKSB7Ci0gICAgICAgIGdvVG9JdGVtKG1fZGVmZXJyZWRJ
dGVtLmdldCgpLCBtX2RlZmVycmVkRnJhbWVMb2FkVHlwZSk7Ci0gICAgICAgIG1fZGVmZXJyZWRJ
dGVtID0gMDsKKyAgICAgICAgZ29Ub0l0ZW0oKm1fZGVmZXJyZWRJdGVtLCBtX2RlZmVycmVkRnJh
bWVMb2FkVHlwZSk7CisgICAgICAgIG1fZGVmZXJyZWRJdGVtID0gbnVsbHB0cjsKICAgICB9CiB9
CiAKQEAgLTMzNCw3ICszMzYsNyBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JS
ZWxvYWQoKQogI2VuZGlmCiAKICAgICBpZiAobV9jdXJyZW50SXRlbSkgewotICAgICAgICBQYWdl
Q2FjaGU6OnNoYXJlZCgpLnJlbW92ZShtX2N1cnJlbnRJdGVtLmdldCgpKTsKKyAgICAgICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKm1fY3VycmVudEl0ZW0pOwogICAgIAogICAgICAgICBp
ZiAobV9mcmFtZS5sb2FkZXIoKS5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGU6OlJlbG9hZCB8
fCBtX2ZyYW1lLmxvYWRlcigpLmxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZTo6UmVsb2FkRnJv
bU9yaWdpbikKICAgICAgICAgICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRl
bShtX2N1cnJlbnRJdGVtLmdldCgpKTsKQEAgLTQ5OSw3ICs1MDEsNyBAQCB2b2lkIEhpc3RvcnlD
b250cm9sbGVyOjpyZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKQogICAgIC8vIEZvciBlYWNoIGZy
YW1lIHRoYXQgYWxyZWFkeSBoYWQgdGhlIGNvbnRlbnQgdGhlIGl0ZW0gcmVxdWVzdGVkIChiYXNl
ZCBvbgogICAgIC8vIChhIG1hdGNoaW5nIFVSTCBhbmQgZnJhbWUgdHJlZSBzbmFwc2hvdCksIGp1
c3QgcmVzdG9yZSB0aGUgc2Nyb2xsIHBvc2l0aW9uLgogICAgIC8vIFNhdmUgZm9ybSBzdGF0ZSAo
d29ya3MgZnJvbSBjdXJyZW50SXRlbSwgc2luY2UgbV9mcmFtZUxvYWRDb21wbGV0ZSBpcyB0cnVl
KQotICAgIGlmIChtX2N1cnJlbnRJdGVtICYmIGl0ZW1zQXJlQ2xvbmVzKG1fY3VycmVudEl0ZW0u
Z2V0KCksIG1fcHJvdmlzaW9uYWxJdGVtLmdldCgpKSkgeworICAgIGlmIChtX2N1cnJlbnRJdGVt
ICYmIGl0ZW1zQXJlQ2xvbmVzKCptX2N1cnJlbnRJdGVtLCBtX3Byb3Zpc2lvbmFsSXRlbS5nZXQo
KSkpIHsKICAgICAgICAgQVNTRVJUKG1fZnJhbWVMb2FkQ29tcGxldGUpOwogICAgICAgICBzYXZl
RG9jdW1lbnRTdGF0ZSgpOwogICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVU
b0l0ZW0obV9jdXJyZW50SXRlbS5nZXQoKSk7CkBAIC03MDcsMTcgKzcwOSwxNSBAQCBQYXNzUmVm
UHRyPEhpc3RvcnlJdGVtPiBIaXN0b3J5Q29udHJvbGxlcjo6Y3JlYXRlSXRlbVRyZWUoRnJhbWUm
IHRhcmdldEZyYW1lLCBibwogLy8gdHJhY2tpbmcgd2hldGhlciBlYWNoIGZyYW1lIGFscmVhZHkg
aGFzIHRoZSBjb250ZW50IHRoZSBpdGVtIHJlcXVlc3RzLiAgSWYgdGhlcmUgaXMKIC8vIGEgbWF0
Y2gsIHdlIHNldCB0aGUgcHJvdmlzaW9uYWwgaXRlbSBhbmQgcmVjdXJzZS4gIE90aGVyd2lzZSB3
ZSB3aWxsIHJlbG9hZCB0aGF0CiAvLyBmcmFtZSBhbmQgYWxsIGl0cyBraWRzIGluIHJlY3Vyc2l2
ZUdvVG9JdGVtLgotdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlU2V0UHJvdmlzaW9u
YWxJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0ZW0pCit2b2lkIEhp
c3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0m
IGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRlbSkKIHsKLSAgICBBU1NFUlQoaXRlbSk7Ci0KICAg
ICBpZiAoIWl0ZW1zQXJlQ2xvbmVzKGl0ZW0sIGZyb21JdGVtKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gU2V0IHByb3Zpc2lvbmFsIGl0ZW0sIHdoaWNoIHdpbGwgYmUgY29tbWl0dGVkIGlu
IHJlY3Vyc2l2ZVVwZGF0ZUZvckNvbW1pdC4KLSAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9IGl0ZW07
CisgICAgbV9wcm92aXNpb25hbEl0ZW0gPSAmaXRlbTsKIAotICAgIGZvciAoY29uc3QgYXV0byYg
Y2hpbGRJdGVtIDogaXRlbS0+Y2hpbGRyZW4oKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgY2hp
bGRJdGVtIDogaXRlbS5jaGlsZHJlbigpKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgY2hpbGRG
cmFtZU5hbWUgPSBjaGlsZEl0ZW0tPnRhcmdldCgpOwogCiAgICAgICAgIEhpc3RvcnlJdGVtKiBm
cm9tQ2hpbGRJdGVtID0gZnJvbUl0ZW0tPmNoaWxkSXRlbVdpdGhUYXJnZXQoY2hpbGRGcmFtZU5h
bWUpOwpAQCAtNzI1LDM0ICs3MjUsMzIgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJz
aXZlU2V0UHJvdmlzaW9uYWxJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBIaXN0b3J5SXQKICAgICAg
ICAgRnJhbWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5jaGlsZChjaGlsZEZyYW1lTmFt
ZSk7CiAgICAgICAgIEFTU0VSVChjaGlsZEZyYW1lKTsKIAotICAgICAgICBjaGlsZEZyYW1lLT5s
b2FkZXIoKS5oaXN0b3J5KCkucmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVtKGNoaWxkSXRlbS5n
ZXQoKSwgZnJvbUNoaWxkSXRlbSk7CisgICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLmhpc3Rv
cnkoKS5yZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oKmNoaWxkSXRlbSwgZnJvbUNoaWxkSXRl
bSk7CiAgICAgfQogfQogCiAvLyBXZSBub3cgdHJhdmVyc2UgdGhlIGZyYW1lIHRyZWUgYW5kIGl0
ZW0gdHJlZSBhIHNlY29uZCB0aW1lLCBsb2FkaW5nIGZyYW1lcyB0aGF0CiAvLyBkbyBoYXZlIHRo
ZSBjb250ZW50IHRoZSBpdGVtIHJlcXVlc3RzLgotdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVj
dXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRlbSwg
RnJhbWVMb2FkVHlwZSB0eXBlKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29U
b0l0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRlbSwgRnJhbWVMb2Fk
VHlwZSB0eXBlKQogewotICAgIEFTU0VSVChpdGVtKTsKLQogICAgIGlmICghaXRlbXNBcmVDbG9u
ZXMoaXRlbSwgZnJvbUl0ZW0pKSB7CiAgICAgICAgIG1fZnJhbWUubG9hZGVyKCkubG9hZEl0ZW0o
aXRlbSwgdHlwZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBKdXN0IGl0ZXJh
dGUgb3ZlciB0aGUgcmVzdCwgbG9va2luZyBmb3IgZnJhbWVzIHRvIG5hdmlnYXRlLgotICAgIGZv
ciAoY29uc3QgYXV0byYgY2hpbGRJdGVtIDogaXRlbS0+Y2hpbGRyZW4oKSkgeworICAgIGZvciAo
Y29uc3QgYXV0byYgY2hpbGRJdGVtIDogaXRlbS5jaGlsZHJlbigpKSB7CiAgICAgICAgIGNvbnN0
IFN0cmluZyYgY2hpbGRGcmFtZU5hbWUgPSBjaGlsZEl0ZW0tPnRhcmdldCgpOwogCiAgICAgICAg
IEhpc3RvcnlJdGVtKiBmcm9tQ2hpbGRJdGVtID0gZnJvbUl0ZW0tPmNoaWxkSXRlbVdpdGhUYXJn
ZXQoY2hpbGRGcmFtZU5hbWUpOwogICAgICAgICBBU1NFUlQoZnJvbUNoaWxkSXRlbSk7CiAgICAg
ICAgIEZyYW1lKiBjaGlsZEZyYW1lID0gbV9mcmFtZS50cmVlKCkuY2hpbGQoY2hpbGRGcmFtZU5h
bWUpOwogICAgICAgICBBU1NFUlQoY2hpbGRGcmFtZSk7Ci0gICAgICAgIGNoaWxkRnJhbWUtPmxv
YWRlcigpLmhpc3RvcnkoKS5yZWN1cnNpdmVHb1RvSXRlbShjaGlsZEl0ZW0uZ2V0KCksIGZyb21D
aGlsZEl0ZW0sIHR5cGUpOworICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCku
cmVjdXJzaXZlR29Ub0l0ZW0oKmNoaWxkSXRlbSwgZnJvbUNoaWxkSXRlbSwgdHlwZSk7CiAgICAg
fQogfQogCi1ib29sIEhpc3RvcnlDb250cm9sbGVyOjppdGVtc0FyZUNsb25lcyhIaXN0b3J5SXRl
bSogaXRlbTEsIEhpc3RvcnlJdGVtKiBpdGVtMikgY29uc3QKK2Jvb2wgSGlzdG9yeUNvbnRyb2xs
ZXI6Oml0ZW1zQXJlQ2xvbmVzKEhpc3RvcnlJdGVtJiBpdGVtMSwgSGlzdG9yeUl0ZW0qIGl0ZW0y
KSBjb25zdAogewogICAgIC8vIElmIHRoZSBpdGVtIHdlJ3JlIGdvaW5nIHRvIGlzIGEgY2xvbmUg
b2YgdGhlIGl0ZW0gd2UncmUgYXQsIHRoZW4gd2UgZG8KICAgICAvLyBub3QgbmVlZCB0byBsb2Fk
IGl0IGFnYWluLiAgVGhlIGN1cnJlbnQgZnJhbWUgdHJlZSBhbmQgdGhlIGZyYW1lIHRyZWUKQEAg
LTc2MSwxMiArNzU5LDExIEBAIGJvb2wgSGlzdG9yeUNvbnRyb2xsZXI6Oml0ZW1zQXJlQ2xvbmVz
KEhpc3RvcnlJdGVtKiBpdGVtMSwgSGlzdG9yeUl0ZW0qIGl0ZW0yKSBjCiAgICAgLy8gYSByZWxv
YWQuICBUaHVzLCBpZiBpdGVtMSBhbmQgaXRlbTIgYXJlIHRoZSBzYW1lLCB3ZSBuZWVkIHRvIGNy
ZWF0ZSBhCiAgICAgLy8gbmV3IGRvY3VtZW50IGFuZCBzaG91bGQgbm90IGNvbnNpZGVyIHRoZW0g
Y2xvbmVzLgogICAgIC8vIChTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8zNTUzMiBmb3IgZGV0YWls
cy4pCi0gICAgcmV0dXJuIGl0ZW0xCi0gICAgICAgICYmIGl0ZW0yCi0gICAgICAgICYmIGl0ZW0x
ICE9IGl0ZW0yCi0gICAgICAgICYmIGl0ZW0xLT5pdGVtU2VxdWVuY2VOdW1iZXIoKSA9PSBpdGVt
Mi0+aXRlbVNlcXVlbmNlTnVtYmVyKCkKLSAgICAgICAgJiYgY3VycmVudEZyYW1lc01hdGNoSXRl
bShpdGVtMSkKLSAgICAgICAgJiYgaXRlbTItPmhhc1NhbWVGcmFtZXMoaXRlbTEpOworICAgIHJl
dHVybiBpdGVtMgorICAgICAgICAmJiAmaXRlbTEgIT0gaXRlbTIKKyAgICAgICAgJiYgaXRlbTEu
aXRlbVNlcXVlbmNlTnVtYmVyKCkgPT0gaXRlbTItPml0ZW1TZXF1ZW5jZU51bWJlcigpCisgICAg
ICAgICYmIGN1cnJlbnRGcmFtZXNNYXRjaEl0ZW0oJml0ZW0xKQorICAgICAgICAmJiBpdGVtMi0+
aGFzU2FtZUZyYW1lcygmaXRlbTEpOwogfQogCiAvLyBIZWxwZXIgbWV0aG9kIHRoYXQgZGV0ZXJt
aW5lcyB3aGV0aGVyIHRoZSBjdXJyZW50IGZyYW1lIHRyZWUgbWF0Y2hlcyBnaXZlbiBoaXN0b3J5
IGl0ZW0ncy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJv
bGxlci5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKaW5kZXgg
NDMxZjMwZTBhY2Y4YTlhNjNjZjk1ZGM0NmQ3MGFkOTIwMTViMTc4NS4uMWI0MGE4MGIwZTMyNzE4
YjMzZWZiNDIyYWFmZTY3NmZiYzNjN2ZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3Rv
cnlDb250cm9sbGVyLmgKQEAgLTkzLDE5ICs5MywxOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBQYWdlOwogICAgIGJvb2wgc2hvdWxkU3RvcExvYWRpbmdGb3JIaXN0b3J5
SXRlbShIaXN0b3J5SXRlbSopIGNvbnN0OwotICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0q
LCBGcmFtZUxvYWRUeXBlKTsKKyAgICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtJiwgRnJhbWVM
b2FkVHlwZSk7CiAKICAgICB2b2lkIGluaXRpYWxpemVJdGVtKEhpc3RvcnlJdGVtKik7CiAgICAg
UGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlSXRlbSgpOwogICAgIFBhc3NSZWZQdHI8SGlz
dG9yeUl0ZW0+IGNyZWF0ZUl0ZW1UcmVlKEZyYW1lJiB0YXJnZXRGcmFtZSwgYm9vbCBjbGlwQXRU
YXJnZXQpOwogCi0gICAgdm9pZCByZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0
ZW0qLCBIaXN0b3J5SXRlbSopOwotICAgIHZvaWQgcmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0
ZW0qLCBIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOworICAgIHZvaWQgcmVjdXJzaXZlU2V0
UHJvdmlzaW9uYWxJdGVtKEhpc3RvcnlJdGVtJiwgSGlzdG9yeUl0ZW0qKTsKKyAgICB2b2lkIHJl
Y3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVtJiwgSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBl
KTsKICAgICBib29sIGlzUmVwbGFjZUxvYWRUeXBlV2l0aFByb3Zpc2lvbmFsSXRlbShGcmFtZUxv
YWRUeXBlKTsKICAgICBib29sIGlzUmVsb2FkVHlwZVdpdGhQcm92aXNpb25hbEl0ZW0oRnJhbWVM
b2FkVHlwZSk7CiAgICAgdm9pZCByZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKTsKICAgICB2b2lk
IHJlY3Vyc2l2ZVVwZGF0ZUZvclNhbWVEb2N1bWVudE5hdmlnYXRpb24oKTsKLSAgICBib29sIGl0
ZW1zQXJlQ2xvbmVzKEhpc3RvcnlJdGVtKiwgSGlzdG9yeUl0ZW0qKSBjb25zdDsKKyAgICBib29s
IGl0ZW1zQXJlQ2xvbmVzKEhpc3RvcnlJdGVtJiwgSGlzdG9yeUl0ZW0qKSBjb25zdDsKICAgICBi
b29sIGN1cnJlbnRGcmFtZXNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKICAgICB2b2lk
IHVwZGF0ZUJhY2tGb3J3YXJkTGlzdENsaXBwZWRBdFRhcmdldChib29sIGRvQ2xpcCk7CiAgICAg
dm9pZCB1cGRhdGVDdXJyZW50SXRlbSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCA4MzE0Yzlh
NGUzY2ViZGM2YjU3YjVkMzA0ZjA0NGZhMjg2ZmI2NjEwLi43OGNiMTkzNTMzODliNzY4OGU0N2I1
YjVmNmIyZjUwMDBkMDQ3ZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtOTg5LDcgKzk4OSw3
IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpvb21G
YWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgfQogCiAgICAgaWYgKGlzTWFpbkZyYW1l
KCkpCi0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVj
YWxjKHBhZ2UpOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxT
dHlsZVJlY2FsYygqcGFnZSk7CiB9CiAKIGZsb2F0IEZyYW1lOjpmcmFtZVNjYWxlRmFjdG9yKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDdjNTM1ZDA1NzIxMmNiYzRhZTdmN2Q2NDIzMGYy
N2ZlY2E0NjU1NjkuLjdkOTdhZWYwZTJiYTIyMmU1NTllNWNiZjhkZWIyODZkYTJkZTcwN2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtNDMwLDEzICs0MzAsMTMgQEAgdm9pZCBQYWdlOjpzZXRPcGVu
ZWRCeURPTSgpCiAgICAgbV9vcGVuZWRCeURPTSA9IHRydWU7CiB9CiAKLXZvaWQgUGFnZTo6Z29U
b0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKK3ZvaWQgUGFnZTo6
Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKICAgICAv
LyBzdG9wQWxsTG9hZGVycyBtYXkgZW5kIHVwIHJ1bm5pbmcgb25sb2FkIGhhbmRsZXJzLCB3aGlj
aCBjb3VsZCBjYXVzZSBmdXJ0aGVyIGhpc3RvcnkgdHJhdmVyc2FscyB0aGF0IG1heSBsZWFkIHRv
IHRoZSBwYXNzZWQgaW4gSGlzdG9yeUl0ZW0KICAgICAvLyBiZWluZyBkZXJlZigpLWVkLiBNYWtl
IHN1cmUgd2UgY2FuIHN0aWxsIHVzZSBpdCB3aXRoIEhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRl
bSBsYXRlci4KLSAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IHByb3RlY3RvcihpdGVtKTsKKyAgICBS
ZWY8SGlzdG9yeUl0ZW0+IHByb3RlY3RvcihpdGVtKTsKIAotICAgIGlmIChtX21haW5GcmFtZS0+
bG9hZGVyKCkuaGlzdG9yeSgpLnNob3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0ZW0oaXRlbSkp
CisgICAgaWYgKG1fbWFpbkZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkuc2hvdWxkU3RvcExvYWRp
bmdGb3JIaXN0b3J5SXRlbSgmaXRlbSkpCiAgICAgICAgIG1fbWFpbkZyYW1lLT5sb2FkZXIoKS5z
dG9wQWxsTG9hZGVycygpOwogCiAgICAgbV9tYWluRnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5n
b1RvSXRlbShpdGVtLCB0eXBlKTsKQEAgLTgzOSw5ICs4MzksOSBAQCB2b2lkIFBhZ2U6OnNldERl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogICAgIHNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcygpOwogCiAgICAgbWFpbkZyYW1lKCkuZGV2aWNlT3JQYWdlU2NhbGVGYWN0
b3JDaGFuZ2VkKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JEZXZpY2VT
Y2FsZUNoYW5nZWQodGhpcyk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JE
ZXZpY2VTY2FsZUNoYW5nZWQoKnRoaXMpOwogCi0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJr
UGFnZXNGb3JGdWxsU3R5bGVSZWNhbGModGhpcyk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5t
YXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRoaXMpOwogICAgIEdyYXBoaWNzQ29udGV4dDo6
dXBkYXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMoKTsKIAogICAgIG1haW5GcmFtZSgpLnBhZ2VP
dmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZURldmljZVNjYWxlRmFjdG9yKCk7CkBAIC05MjEs
NyArOTIxLDcgQEAgdm9pZCBQYWdlOjpzZXRQYWdpbmF0aW9uKGNvbnN0IFBhZ2luYXRpb24mIHBh
Z2luYXRpb24pCiAgICAgbV9wYWdpbmF0aW9uID0gcGFnaW5hdGlvbjsKIAogICAgIHNldE5lZWRz
UmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1Bh
Z2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFy
a1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsKIH0KIAogdW5zaWduZWQgUGFnZTo6cGFn
ZUNvdW50KCkgY29uc3QKQEAgLTE2NjEsNyArMTY2MSw3IEBAIHZvaWQgUGFnZTo6c2V0VmlzaXRl
ZExpbmtTdG9yZShSZWY8VmlzaXRlZExpbmtTdG9yZT4mJiB2aXNpdGVkTGlua1N0b3JlKQogICAg
IG1fdmlzaXRlZExpbmtTdG9yZS0+YWRkUGFnZSgqdGhpcyk7CiAKICAgICBpbnZhbGlkYXRlU3R5
bGVzRm9yQWxsTGlua3MoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1
bGxTdHlsZVJlY2FsYyh0aGlzKTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0Zv
ckZ1bGxTdHlsZVJlY2FsYygqdGhpcyk7CiB9CiAKIFNlc3Npb25JRCBQYWdlOjpzZXNzaW9uSUQo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCAyOGMwNGQ4YzdmN2I2MjRmYTEzMzRhYTU3YzM1ZjE0
YmYyZTFlMGI5Li43ZmNmN2FiNmM4MDU1NmExYzljZTQxZjYwYjM5ZWI2NzQwOTZlMjRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuaApAQCAtMTUwLDcgKzE1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIG9wZW5lZEJ5
RE9NKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRPcGVuZWRCeURPTSgpOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0mLCBGcmFtZUxvYWRUeXBlKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0R3JvdXBOYW1lKGNvbnN0IFN0cmluZyYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lKCkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IGQ3NzM5ZDFiMTlhYzYyNzQ1MTE4ZmZhYjU4NWY0ZDIz
MTgzNDQ0OTAuLjk1NmI0NGM0YjdmODJhNzNkZGIyMTgzNTE5NjBjMTMyMDFhZmM4ZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC01MTksMTIgKzUxOSw4IEBAIHZvaWQgU2V0dGluZ3M6
OnNldFVzZXNQYWdlQ2FjaGUoYm9vbCB1c2VzUGFnZUNhY2hlKQogICAgIGlmICghbV9wYWdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fdXNlc1BhZ2VDYWNoZSkgewotICAgICAgICBp
bnQgZmlyc3QgPSAtbV9wYWdlLT5iYWNrRm9yd2FyZCgpLmJhY2tDb3VudCgpOwotICAgICAgICBp
bnQgbGFzdCA9IG1fcGFnZS0+YmFja0ZvcndhcmQoKS5mb3J3YXJkQ291bnQoKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykKLSAgICAgICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkucmVtb3ZlKG1fcGFnZS0+YmFja0ZvcndhcmQoKS5pdGVtQXRJbmRleChpKSk7
Ci0gICAgfQorICAgIGlmICghbV91c2VzUGFnZUNhY2hlKQorICAgICAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOwogfQogCiB2b2lk
IFNldHRpbmdzOjpzZXRTY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZChib29sIGVuYWJsZWQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNw
cAppbmRleCA5Mzc4YWI2OTM2ZTNhMTYzMmY4MDllYTM3ZDUxY2JhYmFiYjczNTA3Li5iNTAyZGVi
MzBlZTNlYzRmNTllNjQ0ZDg5OGJjNjA3NWMxZDNlN2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKQEAgLTEwMiw3ICsxMDIsNyBA
QCB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6cmVsZWFzZUNyaXRpY2FsTWVtb3J5KCkKICAg
ICAgICAgUmVsaWVmTG9nZ2VyIGxvZygiRW1wdHkgdGhlIFBhZ2VDYWNoZSIpOwogICAgICAgICAv
LyBSaWdodCBub3csIHRoZSBvbmx5IHJlYXNvbiB3ZSBjYWxsIHJlbGVhc2UgY3JpdGljYWwgbWVt
b3J5IHdoaWxlIG5vdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUgaXMgaWYgdGhlIHByb2Nlc3MgaXMg
YWJvdXQgdG8gYmUgc3VzcGVuZGVkLgogICAgICAgICBQcnVuaW5nUmVhc29uIHBydW5pbmdSZWFz
b24gPSBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSA/IFBy
dW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlIDogUHJ1bmluZ1JlYXNvbjo6UHJvY2Vzc1N1c3Bl
bmRlZDsKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvQ2FwYWNpdHlOb3coMCwg
cHJ1bmluZ1JlYXNvbik7CisgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVO
b3coMCwgcHJ1bmluZ1JlYXNvbik7CiAgICAgfQogCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0gYi9Tb3VyY2UvV2ViS2l0
L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbQppbmRleCA4NzU3YzhjMjFlMDNjNmI0
ZWU2Yjk1NTFlNDk2ZWQ0ZGI1N2ZmZGNkLi42YjQ1MDAyMWM0Mjc4NjI2MzYzMjkxMzYzMTAyNzcy
YzI1YzEyZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tG
b3J3YXJkTGlzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3
YXJkTGlzdC5tbQpAQCAtMzU1LDcgKzM1NSw3IEBAIC0gKHZvaWQpc2V0UGFnZUNhY2hlU2l6ZToo
TlNVSW50ZWdlcilzaXplCiAKIC0gKE5TVUludGVnZXIpcGFnZUNhY2hlU2l6ZQogewotICAgIHJl
dHVybiBba2l0KGNvcmUoc2VsZiktPnBhZ2UoKSkgdXNlc1BhZ2VDYWNoZV0gPyBQYWdlQ2FjaGU6
OnNoYXJlZCgpLmNhcGFjaXR5KCkgOiAwOworICAgIHJldHVybiBba2l0KGNvcmUoc2VsZiktPnBh
Z2UoKSkgdXNlc1BhZ2VDYWNoZV0gPyBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1heFNpemUoKSA6IDA7
CiB9CiAKIC0gKGludCliYWNrTGlzdENvdW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0KaW5kZXggOTBiZjA2ZWRlYzQ0MzBhOTgzMGUzZmQzNjJjNjVlYjRjN2VkMjM2ZC4uNzk1MmY3
YTJiMjVhOWY5NjU2OTc0Y2I5OTJiNDc2ZWJlNGUxZTNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQpAQCAtMTk5Nyw3ICsxOTk3LDcgQEAgLSAodm9pZClfbG9hZEJhY2tGb3J3
YXJkTGlzdEZyb21PdGhlclZpZXc6KFdlYlZpZXcgKilvdGhlclZpZXcKICAgICBpZiAoIW90aGVy
QmFja0ZvcndhcmRDbGllbnQtPmN1cnJlbnRJdGVtKCkpCiAgICAgICAgIHJldHVybjsgLy8gZW1w
dHkgYmFjayBmb3J3YXJkIGxpc3QsIGJhaWwKICAgICAKLSAgICBIaXN0b3J5SXRlbSogbmV3SXRl
bVRvR29UbyA9IDA7CisgICAgSGlzdG9yeUl0ZW0qIG5ld0l0ZW1Ub0dvVG8gPSBudWxscHRyOwog
CiAgICAgaW50IGxhc3RJdGVtSW5kZXggPSBvdGhlckJhY2tGb3J3YXJkQ2xpZW50LT5mb3J3YXJk
TGlzdENvdW50KCk7CiAgICAgZm9yIChpbnQgaSA9IC1vdGhlckJhY2tGb3J3YXJkQ2xpZW50LT5i
YWNrTGlzdENvdW50KCk7IGkgPD0gbGFzdEl0ZW1JbmRleDsgKytpKSB7CkBAIC0yMDE0LDcgKzIw
MTQsNyBAQCAtICh2b2lkKV9sb2FkQmFja0ZvcndhcmRMaXN0RnJvbU90aGVyVmlldzooV2ViVmll
dyAqKW90aGVyVmlldwogICAgIH0KICAgICAKICAgICBBU1NFUlQobmV3SXRlbVRvR29Ubyk7Ci0g
ICAgX3ByaXZhdGUtPnBhZ2UtPmdvVG9JdGVtKG5ld0l0ZW1Ub0dvVG8sIEZyYW1lTG9hZFR5cGU6
OkluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAgX3ByaXZhdGUtPnBhZ2UtPmdvVG9JdGVtKCpuZXdJ
dGVtVG9Hb1RvLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOwogfQogCiAtICh2
b2lkKV9zZXRGb3JtRGVsZWdhdGU6IChpZDxXZWJGb3JtRGVsZWdhdGU+KWRlbGVnYXRlCkBAIC01
NjQ3LDcgKzU2NDcsOCBAQCAtIChCT09MKWdvVG9CYWNrRm9yd2FyZEl0ZW06KFdlYkhpc3RvcnlJ
dGVtICopaXRlbQogICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCiAgICAgICAgIHJldHVybiBOTzsK
IAotICAgIF9wcml2YXRlLT5wYWdlLT5nb1RvSXRlbShjb3JlKGl0ZW0pLCBGcmFtZUxvYWRUeXBl
OjpJbmRleGVkQmFja0ZvcndhcmQpOworICAgIEFTU0VSVChpdGVtKTsKKyAgICBfcHJpdmF0ZS0+
cGFnZS0+Z29Ub0l0ZW0oKmNvcmUoaXRlbSksIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9y
d2FyZCk7CiAgICAgcmV0dXJuIFlFUzsKIH0KIApAQCAtNzc0Miw3ICs3NzQzLDcgQEAgKyAodm9p
ZClfc2V0Q2FjaGVNb2RlbDooV2ViQ2FjaGVNb2RlbCljYWNoZU1vZGVsCiAgICAgdW5zaWduZWQg
Y2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOwogICAgIGF1dG8gZGVhZERlY29kZWREYXRhRGVsZXRp
b25JbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzIHsgMCB9OwogCi0gICAgdW5zaWduZWQg
cGFnZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgIHVuc2lnbmVkIHBhZ2VDYWNoZVNpemUgPSAwOwog
CiAgICAgTlNVSW50ZWdlciBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSAwOwogICAgIE5TVUlu
dGVnZXIgbnN1cmxDYWNoZURpc2tDYXBhY2l0eSA9IDA7CkBAIC03NzUzLDcgKzc3NTQsNyBAQCAr
ICh2b2lkKV9zZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1vZGVsKWNhY2hlTW9kZWwKICAgICBzd2l0
Y2ggKGNhY2hlTW9kZWwpIHsKICAgICBjYXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdlcjog
ewogICAgICAgICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKLSAgICAgICAgcGFn
ZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgICAgICBwYWdlQ2FjaGVTaXplID0gMDsKIAogICAgICAg
ICAvLyBPYmplY3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMpCiAgICAgICAgIGlmIChtZW1T
aXplID49IDQwOTYpCkBAIC03NzkwLDEzICs3NzkxLDEzIEBAICsgKHZvaWQpX3NldENhY2hlTW9k
ZWw6KFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbAogICAgIGNhc2UgV2ViQ2FjaGVNb2RlbERvY3Vt
ZW50QnJvd3NlcjogewogICAgICAgICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykK
ICAgICAgICAgaWYgKG1lbVNpemUgPj0gMTAyNCkKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFj
aXR5ID0gMzsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAzOwogICAgICAgICBlbHNlIGlm
IChtZW1TaXplID49IDUxMikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMjsKKyAg
ICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAyOwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49
IDI1NikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMTsKKyAgICAgICAgICAgIHBh
Z2VDYWNoZVNpemUgPSAxOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBh
Y2l0eSA9IDA7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMDsKIAogICAgICAgICAvLyBP
YmplY3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMpCiAgICAgICAgIGlmIChtZW1TaXplID49
IDQwOTYpCkBAIC03ODQ0LDIyICs3ODQ1LDIyIEBAICsgKHZvaWQpX3NldENhY2hlTW9kZWw6KFdl
YkNhY2hlTW9kZWwpY2FjaGVNb2RlbAogICAgICAgICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChp
biBwYWdlcykKICAgICAgICAgLy8gKFJlc2VhcmNoIGluZGljYXRlcyB0aGF0IHZhbHVlIC8gcGFn
ZSBkcm9wcyBzdWJzdGFudGlhbGx5IGFmdGVyIDMgcGFnZXMuKQogICAgICAgICBpZiAobWVtU2l6
ZSA+PSAyMDQ4KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSA1OworICAgICAgICAg
ICAgcGFnZUNhY2hlU2l6ZSA9IDU7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMTAyNCkK
LSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gNDsKKyAgICAgICAgICAgIHBhZ2VDYWNo
ZVNpemUgPSA0OwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDUxMikKLSAgICAgICAgICAg
IHBhZ2VDYWNoZUNhcGFjaXR5ID0gMzsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAzOwog
ICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDI1NikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNh
cGFjaXR5ID0gMjsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAyOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDE7CisgICAgICAgICAgICBwYWdlQ2Fj
aGVTaXplID0gMTsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgLy8gQ2FjaGUgcGFnZSBs
ZXNzIGFnZ3Jlc3NpdmVseSBpbiBpT1MgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgYmVpbmcgamV0
dGlzb25lZC4KICAgICAgICAgLy8gRklYTUUgKDxyZGFyOi8vcHJvYmxlbS8xMTc3OTg0Nj4pOiBB
dm9pZGluZyBqZXR0aXNvbmluZyBzaG91bGQgbm90IGhhdmUgdG8gcmVxdWlyZSByZWR1Y2luZyB0
aGUgcGFnZSBjYWNoZSBjYXBhY2l0eS4KICAgICAgICAgLy8gUmVkdWNpbmcgdGhlIGNhcGFjaXR5
IGJ5IDEgcmVkdWNlcyBvdmVyYWxsIGJhY2stZm9yd2FyZCBwZXJmb3JtYW5jZS4KLSAgICAgICAg
aWYgKHBhZ2VDYWNoZUNhcGFjaXR5ID4gMCkKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5
IC09IDE7CisgICAgICAgIGlmIChwYWdlQ2FjaGVTaXplID4gMCkKKyAgICAgICAgICAgIHBhZ2VD
YWNoZVNpemUgLT0gMTsKICNlbmRpZgogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0
aWVzIChpbiBieXRlcykKQEAgLTc5MzUsNyArNzkzNiw3IEBAICsgKHZvaWQpX3NldENhY2hlTW9k
ZWw6KFdlYkNhY2hlTW9kZWwpY2FjaGVNb2RlbAogCiAgICAgbWVtb3J5Q2FjaGUoKS5zZXRDYXBh
Y2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgY2FjaGVU
b3RhbENhcGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZSgpLnNldERlYWREZWNvZGVkRGF0YURlbGV0
aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7Ci0gICAgUGFnZUNh
Y2hlOjpzaGFyZWQoKS5zZXRDYXBhY2l0eShwYWdlQ2FjaGVDYXBhY2l0eSk7CisgICAgUGFnZUNh
Y2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOwogI2lmIFBMQVRGT1JNKElP
UykKICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyh0
cnVlKTsKICAgICBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSBzdGQ6Om1heChuc3VybENhY2hl
TWVtb3J5Q2FwYWNpdHksIFtuc3VybENhY2hlIG1lbW9yeUNhcGFjaXR5XSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZp
ZXcuY3BwCmluZGV4IDBmMTdlZGEzMjllMmY1YjZlYjA5NjY5MGNlM2JmN2M2YjE5ZjQwYzEuLmVh
YmYxYzAxOGI3ZDE0ZjA5Y2UyZDE5MGZjNGQ4YmQxYzMwNDg2ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcu
Y3BwCkBAIC01MzAsMTMgKzUzMCwxMyBAQCB2b2lkIFdlYlZpZXc6OnNldENhY2hlTW9kZWwoV2Vi
Q2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgIHVuc2lnbmVkIGNhY2hlTWF4RGVhZENhcGFjaXR5
ID0gMDsKICAgICBhdXRvIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSBzdGQ6OmNo
cm9ubzo6c2Vjb25kcyB7IDAgfTsKIAotICAgIHVuc2lnbmVkIHBhZ2VDYWNoZUNhcGFjaXR5ID0g
MDsKKyAgICB1bnNpZ25lZCBwYWdlQ2FjaGVTaXplID0gMDsKIAogCiAgICAgc3dpdGNoIChjYWNo
ZU1vZGVsKSB7CiAgICAgY2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXI6IHsKICAgICAg
ICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0eSAoaW4gcGFnZXMpCi0gICAgICAgIHBhZ2VDYWNoZUNh
cGFjaXR5ID0gMDsKKyAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDA7CiAKICAgICAgICAgLy8gT2Jq
ZWN0IGNhY2hlIGNhcGFjaXRpZXMgKGluIGJ5dGVzKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAy
MDQ4KQpAQCAtNTYzLDEzICs1NjMsMTMgQEAgdm9pZCBXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKFdl
YkNhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICBjYXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVudEJy
b3dzZXI6IHsKICAgICAgICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0eSAoaW4gcGFnZXMpCiAgICAg
ICAgIGlmIChtZW1TaXplID49IDEwMjQpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9
IDM7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMzsKICAgICAgICAgZWxzZSBpZiAobWVt
U2l6ZSA+PSA1MTIpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDI7CisgICAgICAg
ICAgICBwYWdlQ2FjaGVTaXplID0gMjsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAyNTYp
Ci0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDE7CisgICAgICAgICAgICBwYWdlQ2Fj
aGVTaXplID0gMTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkg
PSAwOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDA7CiAKICAgICAgICAgLy8gT2JqZWN0
IGNhY2hlIGNhcGFjaXRpZXMgKGluIGJ5dGVzKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAyMDQ4
KQpAQCAtNjEwLDE1ICs2MTAsMTUgQEAgdm9pZCBXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKFdlYkNh
Y2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICAgICAgLy8gUGFnZSBjYWNoZSBjYXBhY2l0eSAoaW4g
cGFnZXMpCiAgICAgICAgIC8vIChSZXNlYXJjaCBpbmRpY2F0ZXMgdGhhdCB2YWx1ZSAvIHBhZ2Ug
ZHJvcHMgc3Vic3RhbnRpYWxseSBhZnRlciAzIHBhZ2VzLikKICAgICAgICAgaWYgKG1lbVNpemUg
Pj0gMjA0OCkKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gNTsKKyAgICAgICAgICAg
IHBhZ2VDYWNoZVNpemUgPSA1OwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDEwMjQpCi0g
ICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDQ7CisgICAgICAgICAgICBwYWdlQ2FjaGVT
aXplID0gNDsKICAgICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSA1MTIpCi0gICAgICAgICAgICBw
YWdlQ2FjaGVDYXBhY2l0eSA9IDM7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMzsKICAg
ICAgICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAyNTYpCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBh
Y2l0eSA9IDI7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMjsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAxOworICAgICAgICAgICAgcGFnZUNhY2hl
U2l6ZSA9IDE7CiAKICAgICAgICAgLy8gT2JqZWN0IGNhY2hlIGNhcGFjaXRpZXMgKGluIGJ5dGVz
KQogICAgICAgICAvLyAoVGVzdGluZyBpbmRpY2F0ZXMgdGhhdCB2YWx1ZSAvIE1CIGRlcGVuZHMg
aGVhdmlseSBvbiBjb250ZW50IGFuZApAQCAtNjc1LDcgKzY3NSw3IEBAIHZvaWQgV2ViVmlldzo6
c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAKICAgICBtZW1vcnlDYWNo
ZSgpLnNldENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFj
aXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIG1lbW9yeUNhY2hlKCkuc2V0RGVhZERlY29k
ZWREYXRhRGVsZXRpb25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsK
LSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldENhcGFjaXR5KHBhZ2VDYWNoZUNhcGFjaXR5KTsK
KyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CiAKICNp
ZiBVU0UoQ0ZORVRXT1JLKQogICAgIC8vIERvbid0IHNocmluayBhIGJpZyBkaXNrIGNhY2hlLCBz
aW5jZSB0aGF0IHdvdWxkIGNhdXNlIGNodXJuLgpAQCAtMzE1NCw3ICszMTU0LDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojpnb1RvQmFja0ZvcndhcmRJdGVtKAogICAgIGlm
IChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7CiAKLSAgICBtX3BhZ2UtPmdvVG9JdGVt
KHdlYkhpc3RvcnlJdGVtLT5oaXN0b3J5SXRlbSgpLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFj
a0ZvcndhcmQpOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKndlYkhpc3RvcnlJdGVtLT5oaXN0b3J5
SXRlbSgpLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOwogICAgICpzdWNjZWVk
ZWQgPSBUUlVFOwogCiAgICAgcmV0dXJuIFNfT0s7CkBAIC01NTAxLDcgKzU1MDEsNyBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmxvYWRCYWNrRm9yd2FyZExpc3RGcm9tT3Ro
ZXJWaWV3KAogICAgIH0KICAgICAKICAgICBBU1NFUlQobmV3SXRlbVRvR29Ubyk7Ci0gICAgbV9w
YWdlLT5nb1RvSXRlbShuZXdJdGVtVG9Hb1RvLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0Zv
cndhcmQpOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKm5ld0l0ZW1Ub0dvVG8sIEZyYW1lTG9hZFR5
cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuY3BwCmluZGV4IGExNzYxM2IyMTM2NzAyY2IzZjNkY2RhYzdlMGQ2NDNjMzA1
OTVjOWEuLjc1ZTI3YmE1MTBhMmQ0YTQzNjUxOTEyNDk1MDdjYzI0MTA2NTIxMGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tG
b3J3YXJkTGlzdFByb3h5LmNwcApAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgV2ViQmFja0Zvcndh
cmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogICAgIGlmICghaXRlbSkK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92
ZShpdGVtLmdldCgpKTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAg
ICAgV2ViQ29yZTo6UGFnZTo6Y2xlYXJQcmV2aW91c0l0ZW1Gcm9tQWxsUGFnZXMoaXRlbS5nZXQo
KSk7CiAgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0ZW0pOwogfQpAQCAtMjE2LDEy
ICsyMTYsMTIgQEAgaW50IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpmb3J3YXJkTGlzdENvdW50
KCkKIAogdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y2xvc2UoKQogewotICAgIEhhc2hT
ZXQ8dWludDY0X3Q+OjppdGVyYXRvciBlbmQgPSBtX2Fzc29jaWF0ZWRJdGVtSURzLmVuZCgpOwot
ICAgIGZvciAoSGFzaFNldDx1aW50NjRfdD46Oml0ZXJhdG9yIGkgPSBtX2Fzc29jaWF0ZWRJdGVt
SURzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCi0gICAgICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6
c2hhcmVkKCkucmVtb3ZlKGl0ZW1Gb3JJRCgqaSkpOworICAgIGZvciAoYXV0byYgaXRlbUlEIDog
bV9hc3NvY2lhdGVkSXRlbUlEcykgeworICAgICAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBp
dGVtRm9ySUQoaXRlbUlEKSkKKyAgICAgICAgICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVk
KCkucmVtb3ZlKCppdGVtKTsKKyAgICB9CiAKICAgICBtX2Fzc29jaWF0ZWRJdGVtSURzLmNsZWFy
KCk7Ci0KICAgICBtX3BhZ2UgPSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOWY4OWZjMWUzNzdiYjQ2YjBmNWQ4MzUw
ZGQ5NzFhMDg1NjhmY2Q3YS4uNTgxMGFiYTM0YTJhYmM5NTY4MjQ4ZDg3NDc1OWE4NjYyMTM3MjNh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApA
QCAtMTIxMCw3ICsxMjEwLDcgQEAgdm9pZCBXZWJQYWdlOjpnb0ZvcndhcmQodWludDY0X3QgbmF2
aWdhdGlvbklELCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKICAgICBpZiAoIWl0ZW0tPmlz
SW5QYWdlQ2FjaGUoKSkKICAgICAgICAgbV9wZW5kaW5nTmF2aWdhdGlvbklEID0gbmF2aWdhdGlv
bklEOwogCi0gICAgbV9wYWdlLT5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3YXJk
KTsKKyAgICBtX3BhZ2UtPmdvVG9JdGVtKCppdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkKTsK
IH0KIAogdm9pZCBXZWJQYWdlOjpnb0JhY2sodWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRf
dCBiYWNrRm9yd2FyZEl0ZW1JRCkKQEAgLTEyMjYsNyArMTIyNiw3IEBAIHZvaWQgV2ViUGFnZTo6
Z29CYWNrKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQp
CiAgICAgaWYgKCFpdGVtLT5pc0luUGFnZUNhY2hlKCkpCiAgICAgICAgIG1fcGVuZGluZ05hdmln
YXRpb25JRCA9IG5hdmlnYXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0oaXRlbSwgRnJh
bWVMb2FkVHlwZTo6QmFjayk7CisgICAgbV9wYWdlLT5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2Fk
VHlwZTo6QmFjayk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJkSXRlbSh1aW50
NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJhY2tGb3J3YXJkSXRlbUlEKQpAQCAtMTI0Miw3
ICsxMjQyLDcgQEAgdm9pZCBXZWJQYWdlOjpnb1RvQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IG5h
dmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGUKICAgICBpZiAoIWl0ZW0tPmlzSW5Q
YWdlQ2FjaGUoKSkKICAgICAgICAgbV9wZW5kaW5nTmF2aWdhdGlvbklEID0gbmF2aWdhdGlvbklE
OwogCi0gICAgbV9wYWdlLT5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFj
a0ZvcndhcmQpOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6Oklu
ZGV4ZWRCYWNrRm9yd2FyZCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6dHJ5UmVzdG9yZVNjcm9sbFBv
c2l0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDhi
OGI4ODQyYTMyZjk0NDliNWZmNWRlMzRiMjliZDQ1NTNmYWRmM2EuLjk2MTZiMDBkOWY2NjEyMDAy
OGM3MzM3OTk0MDBhOTRlZGRhMzAzZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcApAQCAtMTExNiw3ICsxMTE2LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0
Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiAK
IHZvaWQgV2ViUHJvY2Vzczo6cmVsZWFzZVBhZ2VDYWNoZSgpCiB7Ci0gICAgUGFnZUNhY2hlOjpz
aGFyZWQoKS5wcnVuZVRvQ2FwYWNpdHlOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1
cmUpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1Jl
YXNvbjo6TWVtb3J5UHJlc3N1cmUpOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09BKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRl
eCA4OGU0ZDk4NDAzOGE4Mzc4MWIwYjdhYzdlMzU4NTI3N2FjMWI0ZDFmLi40NWFkYzA5YjY0MGIw
NzU2ODE5Njc2MjQ3ZWMxMjY5N2FjMTEyYmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQpAQCAtMTA0LDE4ICsxMDQsMTggQEAg
dm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1v
ZGVsKQogICAgIHVuc2lnbmVkIGNhY2hlTWluRGVhZENhcGFjaXR5ID0gMDsKICAgICB1bnNpZ25l
ZCBjYWNoZU1heERlYWRDYXBhY2l0eSA9IDA7CiAgICAgYXV0byBkZWFkRGVjb2RlZERhdGFEZWxl
dGlvbkludGVydmFsID0gc3RkOjpjaHJvbm86OnNlY29uZHMgeyAwIH07Ci0gICAgdW5zaWduZWQg
cGFnZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgIHVuc2lnbmVkIHBhZ2VDYWNoZVNpemUgPSAwOwog
ICAgIHVuc2lnbmVkIGxvbmcgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IDA7CiAgICAgdW5zaWdu
ZWQgbG9uZyB1cmxDYWNoZURpc2tDYXBhY2l0eSA9IDA7CiAKICAgICBjYWxjdWxhdGVDYWNoZVNp
emVzKGNhY2hlTW9kZWwsIG1lbVNpemUsIGRpc2tGcmVlU2l6ZSwKICAgICAgICAgY2FjaGVUb3Rh
bENhcGFjaXR5LCBjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGRl
YWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwsCi0gICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5
LCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7CisgICAgICAg
IHBhZ2VDYWNoZVNpemUsIHVybENhY2hlTWVtb3J5Q2FwYWNpdHksIHVybENhY2hlRGlza0NhcGFj
aXR5KTsKIAogCiAgICAgbWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENh
cGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBt
ZW1vcnlDYWNoZSgpLnNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29k
ZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRDYXBh
Y2l0eShwYWdlQ2FjaGVDYXBhY2l0eSk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhT
aXplKHBhZ2VDYWNoZVNpemUpOwogCiAgICAgTlNVUkxDYWNoZSAqbnN1cmxDYWNoZSA9IFtOU1VS
TENhY2hlIHNoYXJlZFVSTENhY2hlXTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAKaW5kZXggYmNjN2FkNjE2MTJiNzE4OTA1MjY5ZGNl
NTg4Mjc0NDYwZWExMzJjYS4uMTE4YzcyMmY3NjI0OWE1ZTJmZWE0YWFlZjA1NWY4NDlmYWMwOWMw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NT
b3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Nv
dXAuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNo
ZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICB1bnNpZ25lZCBjYWNoZU1pbkRlYWRD
YXBhY2l0eSA9IDA7CiAgICAgdW5zaWduZWQgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOwogICAg
IGF1dG8gZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjpzZWNv
bmRzIHsgMCB9OwotICAgIHVuc2lnbmVkIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICB1bnNp
Z25lZCBwYWdlQ2FjaGVTaXplID0gMDsKIAogICAgIHVuc2lnbmVkIGxvbmcgdXJsQ2FjaGVNZW1v
cnlDYXBhY2l0eSA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyB1cmxDYWNoZURpc2tDYXBhY2l0eSA9
IDA7CkBAIC05OSwxMiArOTksMTIgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hl
TW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgIHVpbnQ2NF90IG1lbVNpemUgPSBnZXRN
ZW1vcnlTaXplKCk7CiAgICAgY2FsY3VsYXRlQ2FjaGVTaXplcyhjYWNoZU1vZGVsLCBtZW1TaXpl
LCBkaXNrRnJlZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVRvdGFsQ2FwYWNp
dHksIGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgZGVhZERlY29k
ZWREYXRhRGVsZXRpb25JbnRlcnZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VDYWNo
ZUNhcGFjaXR5LCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ2FjaGVTaXplLCB1cmxDYWNoZU1lbW9yeUNh
cGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7CiAKICAgICBXZWJDb3JlOjptZW1vcnlDYWNo
ZSgpLnNldERpc2FibGVkKGNhY2hlTW9kZWwgPT0gQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyKTsK
ICAgICBXZWJDb3JlOjptZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2Fw
YWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIFdl
YkNvcmU6Om1lbW9yeUNhY2hlKCkuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChk
ZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsKLSAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6
OnNoYXJlZCgpLnNldENhcGFjaXR5KHBhZ2VDYWNoZUNhcGFjaXR5KTsKKyAgICBXZWJDb3JlOjpQ
YWdlQ2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CiAKICNpZiBQTEFU
Rk9STShHVEspCiAgICAgV2ViQ29yZTo6UGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRTaG91bGRDbGVh
ckJhY2tpbmdTdG9yZXModHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245627</attachid>
            <date>2015-01-29 09:53:15 -0800</date>
            <delta_ts>2015-01-29 10:38:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141009-20150129095320.patch</filename>
            <type>text/plain</type>
            <size>68166</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzk5MDRiNzI2MTk5Njg4
N2E0NzI3MTU0ZjVjYWFmODQ1MmNhMzBiNy4uMTY1YmUwODUxM2FiZGJiOTIzZWNmOWQ1N2RhYTg3
MTQ0YzUyOGQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE1LTAxLTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5p
emUgUGFnZUNhY2hlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDEwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKwor
ICAgICAgICBDbGVhbiB1cCAvIG1vZGVybml6ZSBQYWdlQ2FjaGUgY2xhc3M6CisgICAgICAgIC0g
VXNlIG1vcmUgcmVmZXJlbmNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzCisgICAgICAgIC0gVXNlIGEg
TGlzdEhhc2hTZXQ8UmVmPEhpc3RvcnlJdGVtPj4gaW50ZXJuYWxseSBpbnN0ZWFkIG9mIGEgbGlu
a2VkCisgICAgICAgICAgbGlzdCBvZiBIaXN0b3J5SXRlbSouIFRoaXMgYXZvaWRzIGhhdmluZyB0
aGUgcmVmL3VucmVmIEhpc3RvcnlJdGVtcworICAgICAgICAgIG1hbnVhbGx5IGFuZCBtYWludGFp
bmluZyB0aGUgbGlzdCBzaXplIHNlcGFyYXRlbHkuIEl0IGFsc28gc2ltcGxpZmllcworICAgICAg
ICAgIHRoZSBjb2RlIGRlYWxpbmcgd2l0aCB0aGUgY29udGFpbmVyIGFuZCBtYWtlcyBsb29raW5n
IHVwIEhpc3RvcnlJdGVtcworICAgICAgICAgIGZhc3RlciBhcyBhIGJvbnVzLiBTaW1pbGFybHkg
dG8gdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uLCB3ZSBhcmUKKyAgICAgICAgICBhZGRpbmcg
ZWxlbWVudHMgdG8gb25lIGVuZCBhbmQgcmVtb3ZpbmcgZnJvbSB0aGUgb3Bwb3NpdGUgZW5kIHdo
ZW4KKyAgICAgICAgICBwcnVuaW5nIHRvIGRyb3Agb2xkIGhpc3RvcnkgaXRlbXMgZmlyc3QuIE5v
dGUgdGhhdCBldmVuIHRob3VnaCB0aGUKKyAgICAgICAgICBwcmV2aW91cyBpbXBsZW1lbnRhdGlv
biB3YXMgY2FsbGVkIExSVUxpc3QsIGl0IGRpZCBub3QgbW92ZSBpdGVtcyB0bworICAgICAgICAg
IHRoZSBmcm9udCB3aGVuIGFjY2Vzc2VkLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qg
ZWl0aGVyLgorICAgICAgICAgLSBSZW5hbWUgImNhcGFjaXR5IiB0byAibWF4U2l6ZSIgdG8gYXZv
aWQgY29uZnVzaW5nIHdpdGggY29udGFpbmVycycKKyAgICAgICAgICAgY2FwYWNpdHkgKHdoaWNo
IGRvZXNuJ3QgbGltaXQgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcikuCisgICAgICAgICAtIFVz
ZSB1bnNpZ25lZCBpbnN0ZWFkIG9mIGludCBmb3IgYWxsIHZhbHVlcyB0aGF0IGFyZSBzdXBwb3Nl
ZCB0byBiZQorICAgICAgICAgICBwb3NpdGl2ZS4KKyAgICAgICAgIC0gRG8gbm90IGV4cGxpY2l0
ZWx5IGRlZmluZSB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgbGV0IHRoZQorICAgICAgICAg
ICBjb21waWxlciBnZW5lcmF0ZSBpdCBmb3IgdXMgKGFuZCB1c2UgaW4tY2xhc3MgaW5pdGlhbGl6
YXRpb24gZm9yCisgICAgICAgICAgIG1lbWJlcnMpCisgICAgICAgICAtIEZpeCBpbmRlbnRhdGlv
biBpbiB0aGUgaGVhZGVyLgorCiAyMDE1LTAxLTI4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgUG9vciBwZXJmb3JtYW5jZSBvbiBJRSdzIENo
YWxrYm9hcmQgYmVuY2htYXJrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDY1OTcxNjM2ZmFiM2RmZDIz
Y2I1ODVhZGI1NWJkZTBkZmY5ZTM2Y2UuLjZmZjMyYjNjOTc2NTc1YjMxNmU4Y2Y5OTA1ZjUwMTdk
N2I2NjkwZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0wMS0yOCAg
Q2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIENsZWFuIHVwIC8gbW9k
ZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzLgorCisgICAg
ICAgICogSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW06CisgICAgICAgICgtW1dlYkJhY2tG
b3J3YXJkTGlzdCBwYWdlQ2FjaGVTaXplXSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1t
OgorICAgICAgICAoLVtXZWJWaWV3IF9sb2FkQmFja0ZvcndhcmRMaXN0RnJvbU90aGVyVmlldzpd
KToKKyAgICAgICAgKC1bV2ViVmlldyBnb1RvQmFja0ZvcndhcmRJdGVtOl0pOgorICAgICAgICAo
K1tXZWJWaWV3IF9zZXRDYWNoZU1vZGVsOl0pOgorCiAyMDE1LTAxLTI4ICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgTW91bnRhaW4gTGlvbiBjb2RlIGZy
b20gV2ViS2l0IGFuZCBXZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggMzU1NmQ3MDIxMGYyYTdh
YmRhOGIyZGU1ZTRmZDQ5YjIyN2EyYTNjZi4uZDZjOTQwZTMwMjk2Mjc4MzNiMmJlMDQxODFhYjBl
ZDFjNDg5NWI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE1LTAxLTI4
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ2xlYW4gdXAgLyBt
b2Rlcm5pemUgUGFnZUNhY2hlIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDEwMDkKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KKworICAgICAgICBDbGVhbiB1cCAvIG1vZGVybml6ZSBQYWdlQ2FjaGUgY2xhc3MuCisKKyAg
ICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnNldENhY2hlTW9kZWwpOgor
CiAyMDE1LTAxLTI4ICBwZWF2b0BvdXRsb29rLmNvbSAgPHBlYXZvQG91dGxvb2suY29tPgogCiAg
ICAgICAgIFtXaW5DYWlyb10gTWVzc2FnZSBsb29wIGlzIGZsb29kZWQgd2l0aCB0aW1lciBtZXNz
YWdlcyB3aGVuIGFuaW1hdGluZyBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IGZlM2EzNTQ3N2M3ZDFiNzU0MmU2N2E3ZTk5Mzg4MjViY2QzOGNkYjguLjg2MjI2
MDk4NzM4OWVmMDA2YWY2OThlOWQ1ODViMTAyZmViODJkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNiBAQAorMjAxNS0wMS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisg
ICAgICAgIENsZWFuIHVwIC8gbW9kZXJuaXplIFBhZ2VDYWNoZSBjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDA5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQ2xlYW4gdXAgLyBtb2Rlcm5pemUgUGFn
ZUNhY2hlIGNsYXNzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3
YXJkTGlzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94
eTo6Y2xvc2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29Gb3J3YXJkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Z29CYWNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJk
SXRlbSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6cmVsZWFzZVBhZ2VDYWNoZSk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6
OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9zb3VwL1dlYlBy
b2Nlc3NTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRD
YWNoZU1vZGVsKToKKwogMjAxNS0wMS0yOCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgQVBJOjp7RnJhbWVJbmZvLCBOYXZpZ2F0aW9uQWN0aW9u
LCBOYXZpZ2F0aW9uUmVzcG9uc2V9IHR5cGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDgwYWUy
ODE3YWIzYTY1MmEwYjVjMjMyOGEzMTg2ZGYyZWNjZGZhMDcuLmFkNWU2NDA5MTg0MDVlZjdmZTY5
YmViNTc0OWNlOGY3Y2ZjYjU1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xMjM5LDcgKzEy
MzksNyBAQCBfX1pON1dlYkNvcmU0UGFnZTM1cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnNFdgogX19aTjdXZWJDb3JlNFBhZ2UzNnNldFNob3VsZFN1cHByZXNzU2Nyb2xsYmFyQW5p
bWF0aW9uc0ViCiBfX1pON1dlYkNvcmU0UGFnZTM2c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zRXYKIF9fWk43V2ViQ29yZTRQYWdlMzdzZXRJbkxvd1F1YWxpdHlJbWFnZUludGVy
cG9sYXRpb25Nb2RlRWIKLV9fWk43V2ViQ29yZTRQYWdlOGdvVG9JdGVtRVBOU18xMUhpc3RvcnlJ
dGVtRU5TXzEzRnJhbWVMb2FkVHlwZUUKK19fWk43V2ViQ29yZTRQYWdlOGdvVG9JdGVtRVJOU18x
MUhpc3RvcnlJdGVtRU5TXzEzRnJhbWVMb2FkVHlwZUUKIF9fWk43V2ViQ29yZTRQYWdlOHNldE11
dGVkRWIKIF9fWk43V2ViQ29yZTRQYWdlOWluaXRHcm91cEV2CiBfX1pON1dlYkNvcmU0UGFnZUMx
RVJOU18xN1BhZ2VDb25maWd1cmF0aW9uRQpAQCAtMTYwNiwxMCArMTYwNiwxMCBAQCBfX1pON1dl
YkNvcmU5SlNFbGVtZW50NnNfaW5mb0UKIF9fWk43V2ViQ29yZTlKU0VsZW1lbnQ5dG9XcmFwcGVk
RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmU5TGF5ZXJQb29sQzFFdgogX19aTjdXZWJDb3Jl
OUxheWVyUG9vbEQxRXYKLV9fWk43V2ViQ29yZTlQYWdlQ2FjaGUxMXNldENhcGFjaXR5RWkKLV9f
Wk43V2ViQ29yZTlQYWdlQ2FjaGUxOHBydW5lVG9DYXBhY2l0eU5vd0VpTlNfMTNQcnVuaW5nUmVh
c29uRQorX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTEwc2V0TWF4U2l6ZUVqCitfX1pON1dlYkNvcmU5
UGFnZUNhY2hlMTRwcnVuZVRvU2l6ZU5vd0VqTlNfMTNQcnVuaW5nUmVhc29uRQogX19aTjdXZWJD
b3JlOVBhZ2VDYWNoZTM0bWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsY0V2Ci1fX1pO
N1dlYkNvcmU5UGFnZUNhY2hlNnJlbW92ZUVQTlNfMTFIaXN0b3J5SXRlbUUKK19fWk43V2ViQ29y
ZTlQYWdlQ2FjaGU2cmVtb3ZlRVJOU18xMUhpc3RvcnlJdGVtRQogX19aTjdXZWJDb3JlOVBhZ2VD
YWNoZTZzaGFyZWRFdgogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDlwYWdlR3JvdXBFUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmU5U2Nyb2xsYmFyMTFtb3VzZUV4aXRlZEV2CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkQ29udHJvbGxlci5jcHAKaW5kZXggOWMxNjcy
MjRhNzlkZTNmYjc5ZjNiODg1NjVhNWQ0YTZkZDE3ZWVkOC4uNTVjYWYxYzBkNzUxNjUxNmExZGE4
MzMwZjI4MTEyOTk0Y2FiZDc0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFj
a0ZvcndhcmRDb250cm9sbGVyLmNwcApAQCAtNzQsNyArNzQsNyBAQCB2b2lkIEJhY2tGb3J3YXJk
Q29udHJvbGxlcjo6Z29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkKICAgICBpZiAoIWl0ZW0p
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fcGFnZS5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRU
eXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOworICAgIG1fcGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJh
bWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKIH0KIAogYm9vbCBCYWNrRm9yd2FyZENv
bnRyb2xsZXI6OmdvQmFjaygpCkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgQmFja0ZvcndhcmRDb250
cm9sbGVyOjpnb0JhY2soKQogICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgbV9wYWdlLmdvVG9JdGVtKGl0ZW0sIEZyYW1lTG9hZFR5cGU6OkJhY2spOworICAgIG1f
cGFnZS5nb1RvSXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlwZTo6QmFjayk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBCYWNrRm9yd2FyZENvbnRyb2xsZXI6Omdv
Rm9yd2FyZCgpCiAgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBt
X3BhZ2UuZ29Ub0l0ZW0oaXRlbSwgRnJhbWVMb2FkVHlwZTo6Rm9yd2FyZCk7CisgICAgbV9wYWdl
LmdvVG9JdGVtKCppdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCmluZGV4
IGNjZTA3ZjQ5OTkxNGRlMzdiMzExOGJhMDc4YjNmOWE1MDI0Yzc2MDUuLmIzYWQ2MTk3ZTJiNzFl
MWFkODM4MWYzYzczYzZkZWRjNGUwMDU4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hp
c3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0Jh
Y2tGb3J3YXJkTGlzdC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6
OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKICAgICAgICAgICAgIFJl
ZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0KCk7CiAgICAgICAgICAgICBt
X2VudHJpZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0
ZW0pOwotICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbS5nZXQoKSk7
CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0
ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKICAgICAgICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzWzBdOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDAp
OwogICAgICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6
c2hhcmVkKCkucmVtb3ZlKGl0ZW0uZ2V0KCkpOworICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnJlbW92ZSgqaXRlbSk7CiAgICAgICAgIG1fY3VycmVudC0tOwogICAgIH0KIApAQCAtMTc1LDcg
KzE3NSw3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0eShpbnQgc2l6ZSkKICAg
ICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKICAgICAg
ICAgbV9lbnRyaWVzLnJlbW92ZUxhc3QoKTsKICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0
ZW0pOwotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZShpdGVtLmdldCgpKTsKKyAg
ICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOwogICAgIH0KIAogICAgIGlm
ICghc2l6ZSkKQEAgLTI0MiwxMiArMjQyLDEwIEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpzZXRD
dXJyZW50KHVuc2lnbmVkIG5ld0N1cnJlbnQpCiBib29sIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJB
bGxQYWdlQ2FjaGVzKCkKIHsKICAgICBib29sIGRpZFJlbW92ZUF0TGVhc3RPbmVJdGVtID0gZmFs
c2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gbV9lbnRyaWVzLnNpemUoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSGlzdG9yeUl0ZW0qIGl0
ZW0gPSBtX2VudHJpZXNbaV0uZ2V0KCk7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9lbnRyaWVz
KSB7CiAgICAgICAgIGlmIChpdGVtLT5pc0luUGFnZUNhY2hlKCkpIHsKICAgICAgICAgICAgIGRp
ZFJlbW92ZUF0TGVhc3RPbmVJdGVtID0gdHJ1ZTsKLSAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hh
cmVkKCkucmVtb3ZlKGl0ZW0pOworICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1v
dmUoKml0ZW0pOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBkaWRSZW1vdmVBdExlYXN0
T25lSXRlbTsKQEAgLTI1NiwxMiArMjU0LDExIEBAIGJvb2wgQmFja0ZvcndhcmRMaXN0OjpjbGVh
ckFsbFBhZ2VDYWNoZXMoKQogCiB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xvc2UoKQogewotICAg
IGludCBzaXplID0gbV9lbnRyaWVzLnNpemUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUobV9lbnRyaWVzW2ld
LmdldCgpKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2VudHJpZXMpCisgICAgICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKICAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAg
ICBtX2VudHJ5SGFzaC5jbGVhcigpOwotICAgIG1fcGFnZSA9IDA7CisgICAgbV9wYWdlID0gbnVs
bHB0cjsKICAgICBtX2Nsb3NlZCA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0
b3J5SXRlbS5jcHAKaW5kZXggMGM0NzNjMDk2YzFiNTFjMTViMGU2YzJjOTJkZTU5ZjA1MTUzNTgx
My4uMWI1MjVkZjI4YzQ0NzZmZjIwZjMyNjUxMWEzYTE0YWM1NTJiZDYxYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIEhpc3Rv
cnlJdGVtOjpzZXRVUkxTdHJpbmcoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCiAKIHZvaWQgSGlz
dG9yeUl0ZW06OnNldFVSTChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBQYWdlQ2FjaGU6OnNoYXJl
ZCgpLnJlbW92ZSh0aGlzKTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqdGhpcyk7
CiAgICAgc2V0VVJMU3RyaW5nKHVybC5zdHJpbmcoKSk7CiAgICAgY2xlYXJEb2N1bWVudFN0YXRl
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKaW5kZXggOWY1M2E2YmY3MmZh
NmYzMjZhZDBhNzYwNWI1OTQ4ZTI3NTk1Njk3NC4uMjJkNjgwMjU4ZjNjZDRhYWRhODI3ZDM4YTc4
N2I3YjBiNjQ3NDM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTQgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxNCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlclN0YXRlTWFjaGluZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhpc3RvcnlDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCkBAIC0x
MTAsNyArMTA5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFn
bm9zdGljTWVzc2FnZShQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcKICAgICBsb2dQYWdlQ2FjaGVG
YWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZS0+bWFpbkZyYW1lKCkuZGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQoKSwgcmVhc29uKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvZ0NhbkNhY2hlRnJh
bWVEZWNpc2lvbihGcmFtZSYgZnJhbWUsIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50JiBkaWFnbm9z
dGljTG9nZ2luZ0NsaWVudCwgaW50IGluZGVudExldmVsKQorc3RhdGljIHVuc2lnbmVkIGxvZ0Nh
bkNhY2hlRnJhbWVEZWNpc2lvbihGcmFtZSYgZnJhbWUsIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50
JiBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgdW5zaWduZWQgaW5kZW50TGV2ZWwpCiB7CiAgICAg
UENMT0coIistLS0iKTsKICAgICBpZiAoIWZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkp
IHsKQEAgLTIzNCw3ICsyMzMsNyBAQCBzdGF0aWMgdm9pZCBsb2dDYW5DYWNoZVBhZ2VEZWNpc2lv
bihQYWdlJiBwYWdlKQogICAgIGlmIChjdXJyZW50VVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGludCBpbmRlbnRMZXZlbCA9IDA7ICAgIAorICAgIHVuc2lnbmVkIGlu
ZGVudExldmVsID0gMDsKICAgICBQQ0xPRygiLS0tLS0tLS1cbiBEZXRlcm1pbmluZyBpZiBwYWdl
IGNhbiBiZSBjYWNoZWQ6Iik7CiAgICAgCiAgICAgdW5zaWduZWQgcmVqZWN0UmVhc29ucyA9IDA7
CkBAIC0yOTcsMjYgKzI5NiwxNyBAQCBQYWdlQ2FjaGUmIFBhZ2VDYWNoZTo6c2hhcmVkKCkKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGFnZUNhY2hlPiBnbG9iYWxQYWdlQ2FjaGU7CiAgICAg
cmV0dXJuIGdsb2JhbFBhZ2VDYWNoZTsKIH0KLQotUGFnZUNhY2hlOjpQYWdlQ2FjaGUoKQotICAg
IDogbV9jYXBhY2l0eSgwKQotICAgICwgbV9zaXplKDApCi0gICAgLCBtX2hlYWQoMCkKLSAgICAs
IG1fdGFpbCgwKQotICAgICwgbV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXMoZmFsc2UpCi17Ci19
CiAgICAgCi1ib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShG
cmFtZSogZnJhbWUpCitib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNG
cmFtZShGcmFtZSYgZnJhbWUpCiB7Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJl
ZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgIGlmICghY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShjaGls
ZCkpCisgICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYg
KCFjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKCpjaGlsZCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciA9
IGZyYW1lLT5sb2FkZXIoKTsKKyAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBmcmFtZS5s
b2FkZXIoKTsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZUxvYWRl
ci5kb2N1bWVudExvYWRlcigpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCk7CiAgICAg
CiAgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTMyNiw4
ICszMTYsOCBAQCBib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFt
ZShGcmFtZSogZnJhbWUpCiAjZW5kaWYKICAgICAgICAgLy8gRG8gbm90IGNhY2hlIGVycm9yIHBh
Z2VzICh0aGVzZSBjYW4gYmUgcmVjb2duaXplZCBhcyBwYWdlcyB3aXRoIHN1YnN0aXR1dGUgZGF0
YSBvciB1bnJlYWNoYWJsZSBVUkxzKS4KICAgICAgICAgJiYgIShkb2N1bWVudExvYWRlci0+c3Vi
c3RpdHV0ZURhdGEoKS5pc1ZhbGlkKCkgJiYgIWRvY3VtZW50TG9hZGVyLT5zdWJzdGl0dXRlRGF0
YSgpLmZhaWxpbmdVUkwoKS5pc0VtcHR5KCkpCi0gICAgICAgICYmICghZnJhbWVMb2FkZXIuc3Vi
ZnJhbWVMb2FkZXIoKS5jb250YWluc1BsdWdpbnMoKSB8fCBmcmFtZS0+cGFnZSgpLT5zZXR0aW5n
cygpLnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpKQotICAgICAgICAmJiAhKGZyYW1lLT5pc01h
aW5GcmFtZSgpICYmIGRvY3VtZW50LT51cmwoKS5wcm90b2NvbElzKCJodHRwcyIpICYmIGRvY3Vt
ZW50TG9hZGVyLT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKQorICAg
ICAgICAmJiAoIWZyYW1lTG9hZGVyLnN1YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkg
fHwgZnJhbWUucGFnZSgpLT5zZXR0aW5ncygpLnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpKQor
ICAgICAgICAmJiAhKGZyYW1lLmlzTWFpbkZyYW1lKCkgJiYgZG9jdW1lbnQtPnVybCgpLnByb3Rv
Y29sSXMoImh0dHBzIikgJiYgZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlKCkuY2FjaGVDb250cm9s
Q29udGFpbnNOb1N0b3JlKCkpCiAgICAgICAgICYmICFEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIo
KS5oYXNPcGVuRGF0YWJhc2VzKGRvY3VtZW50KQogICAgICAgICAmJiBmcmFtZUxvYWRlci5oaXN0
b3J5KCkuY3VycmVudEl0ZW0oKQogICAgICAgICAmJiAhZnJhbWVMb2FkZXIucXVpY2tSZWRpcmVj
dENvbWluZygpCkBAIC0zNTcsOCArMzQ3LDggQEAgYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hlKFBh
Z2UqIHBhZ2UpIGNvbnN0CiAgICAgLy8gb3ZlciBpdCBhZ2FpbiB3aGVuIHdlIGxlYXZlIHRoYXQg
cGFnZS4KICAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gcGFnZS0+bWFpbkZyYW1lKCkubG9h
ZGVyKCkubG9hZFR5cGUoKTsKICAgICAKLSAgICByZXR1cm4gbV9jYXBhY2l0eSA+IDAKLSAgICAg
ICAgJiYgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgmcGFnZS0+bWFpbkZyYW1lKCkp
CisgICAgcmV0dXJuIG1fbWF4U2l6ZSA+IDAKKyAgICAgICAgJiYgY2FuQ2FjaGVQYWdlQ29udGFp
bmluZ1RoaXNGcmFtZShwYWdlLT5tYWluRnJhbWUoKSkKICAgICAgICAgJiYgcGFnZS0+c2V0dGlu
Z3MoKS51c2VzUGFnZUNhY2hlKCkKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKSAmJiAh
UExBVEZPUk0oSU9TKQogICAgICAgICAmJiAhRGV2aWNlTW90aW9uQ29udHJvbGxlcjo6aXNBY3Rp
dmVBdChwYWdlKQpAQCAtMzczLDI3ICszNjMsMjQgQEAgYm9vbCBQYWdlQ2FjaGU6OmNhbkNhY2hl
KFBhZ2UqIHBhZ2UpIGNvbnN0CiAgICAgICAgICAgICB8fCBsb2FkVHlwZSA9PSBGcmFtZUxvYWRU
eXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOwogfQogCi12b2lkIFBhZ2VDYWNoZTo6cHJ1bmVUb0Nh
cGFjaXR5Tm93KGludCBjYXBhY2l0eSwgUHJ1bmluZ1JlYXNvbiBwcnVuaW5nUmVhc29uKQordm9p
ZCBQYWdlQ2FjaGU6OnBydW5lVG9TaXplTm93KHVuc2lnbmVkIHNpemUsIFBydW5pbmdSZWFzb24g
cHJ1bmluZ1JlYXNvbikKIHsKLSAgICBUZW1wb3JhcnlDaGFuZ2U8aW50PihtX2NhcGFjaXR5LCBz
dGQ6Om1heChjYXBhY2l0eSwgMCkpOworICAgIFRlbXBvcmFyeUNoYW5nZTx1bnNpZ25lZD4obV9t
YXhTaXplLCBzaXplKTsKICAgICBwcnVuZShwcnVuaW5nUmVhc29uKTsKIH0KIAotdm9pZCBQYWdl
Q2FjaGU6OnNldENhcGFjaXR5KGludCBjYXBhY2l0eSkKK3ZvaWQgUGFnZUNhY2hlOjpzZXRNYXhT
aXplKHVuc2lnbmVkIG1heFNpemUpCiB7Ci0gICAgQVNTRVJUKGNhcGFjaXR5ID49IDApOwotICAg
IG1fY2FwYWNpdHkgPSBzdGQ6Om1heChjYXBhY2l0eSwgMCk7Ci0KKyAgICBtX21heFNpemUgPSBt
YXhTaXplOwogICAgIHBydW5lKFBydW5pbmdSZWFzb246Ok5vbmUpOwogfQogCi1pbnQgUGFnZUNh
Y2hlOjpmcmFtZUNvdW50KCkgY29uc3QKK3Vuc2lnbmVkIFBhZ2VDYWNoZTo6ZnJhbWVDb3VudCgp
IGNvbnN0CiB7Ci0gICAgaW50IGZyYW1lQ291bnQgPSAwOwotICAgIGZvciAoSGlzdG9yeUl0ZW0q
IGN1cnJlbnQgPSBtX2hlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHQpIHsK
LSAgICAgICAgKytmcmFtZUNvdW50OwotICAgICAgICBBU1NFUlQoY3VycmVudC0+bV9jYWNoZWRQ
YWdlKTsKLSAgICAgICAgZnJhbWVDb3VudCArPSBjdXJyZW50LT5tX2NhY2hlZFBhZ2UtPmNhY2hl
ZE1haW5GcmFtZSgpLT5kZXNjZW5kYW50RnJhbWVDb3VudCgpOworICAgIHVuc2lnbmVkIGZyYW1l
Q291bnQgPSBtX2l0ZW1zLnNpemUoKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7
CisgICAgICAgIEFTU0VSVChpdGVtLT5tX2NhY2hlZFBhZ2UpOworICAgICAgICBmcmFtZUNvdW50
ICs9IGl0ZW0tPm1fY2FjaGVkUGFnZS0+Y2FjaGVkTWFpbkZyYW1lKCktPmRlc2NlbmRhbnRGcmFt
ZUNvdW50KCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBmcmFtZUNvdW50OwpAQCAtNDAxLDI2
ICszODgsMjYgQEAgaW50IFBhZ2VDYWNoZTo6ZnJhbWVDb3VudCgpIGNvbnN0CiAKIHZvaWQgUGFn
ZUNhY2hlOjptYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCkKIHsKLSAgICBmb3Ig
KEhpc3RvcnlJdGVtKiBjdXJyZW50ID0gbV9oZWFkOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVu
dC0+bV9uZXh0KSB7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50LT5tX2NhY2hlZFBhZ2UpOwotICAg
ICAgICBjdXJyZW50LT5tX2NhY2hlZFBhZ2UtPm1hcmtGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxj
KCk7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBBU1NFUlQoaXRl
bS0+bV9jYWNoZWRQYWdlKTsKKyAgICAgICAgaXRlbS0+bV9jYWNoZWRQYWdlLT5tYXJrRm9yVmlz
aXRlZExpbmtTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KIAotdm9pZCBQYWdlQ2FjaGU6Om1hcmtQ
YWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyhQYWdlKiBwYWdlKQordm9pZCBQYWdlQ2FjaGU6Om1hcmtQ
YWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyhQYWdlJiBwYWdlKQogewotICAgIGZvciAoSGlzdG9yeUl0
ZW0qIGN1cnJlbnQgPSBtX2hlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHQp
IHsKLSAgICAgICAgQ2FjaGVkUGFnZSYgY2FjaGVkUGFnZSA9ICpjdXJyZW50LT5tX2NhY2hlZFBh
Z2U7Ci0gICAgICAgIGlmICgmcGFnZS0+bWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVk
TWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWUoKSkKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0
ZW1zKSB7CisgICAgICAgIENhY2hlZFBhZ2UmIGNhY2hlZFBhZ2UgPSAqaXRlbS0+bV9jYWNoZWRQ
YWdlOworICAgICAgICBpZiAoJnBhZ2UubWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2UuY2FjaGVk
TWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgIGNhY2hlZFBhZ2UubWFy
a0ZvckZ1bGxTdHlsZVJlY2FsYygpOwogICAgIH0KIH0KIAotdm9pZCBQYWdlQ2FjaGU6Om1hcmtQ
YWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZChQYWdlKiBwYWdlKQordm9pZCBQYWdlQ2FjaGU6Om1h
cmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZChQYWdlJiBwYWdlKQogewotICAgIGZvciAoSGlz
dG9yeUl0ZW0qIGN1cnJlbnQgPSBtX2hlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5t
X25leHQpIHsKLSAgICAgICAgQ2FjaGVkUGFnZSYgY2FjaGVkUGFnZSA9ICpjdXJyZW50LT5tX2Nh
Y2hlZFBhZ2U7Ci0gICAgICAgIGlmICgmcGFnZS0+bWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2Uu
Y2FjaGVkTWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWUoKSkKKyAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBtX2l0ZW1zKSB7CisgICAgICAgIENhY2hlZFBhZ2UmIGNhY2hlZFBhZ2UgPSAqaXRlbS0+bV9j
YWNoZWRQYWdlOworICAgICAgICBpZiAoJnBhZ2UubWFpbkZyYW1lKCkgPT0gJmNhY2hlZFBhZ2Uu
Y2FjaGVkTWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgIGNhY2hlZFBh
Z2UubWFya0ZvckRldmljZVNjYWxlQ2hhbmdlZCgpOwogICAgIH0KIH0KQEAgLTQyOCw5ICs0MTUs
OSBAQCB2b2lkIFBhZ2VDYWNoZTo6bWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKFBhZ2Uq
IHBhZ2UpCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogdm9pZCBQYWdlQ2FjaGU6Om1hcmtQYWdl
c0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQogewotICAgIGZvciAoSGlzdG9yeUl0ZW0q
IGN1cnJlbnQgPSBtX2hlYWQ7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5tX25leHQpIHsK
LSAgICAgICAgQVNTRVJUKGN1cnJlbnQtPm1fY2FjaGVkUGFnZSk7Ci0gICAgICAgIGN1cnJlbnQt
Pm1fY2FjaGVkUGFnZS0+bWFya0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICBm
b3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIEFTU0VSVChpdGVtLT5tX2NhY2hl
ZFBhZ2UpOworICAgICAgICBpdGVtLT5tX2NhY2hlZFBhZ2UtPm1hcmtGb3JDYXB0aW9uUHJlZmVy
ZW5jZXNDaGFuZ2VkKCk7CiAgICAgfQogfQogI2VuZGlmCkBAIC00NDIsOCArNDI5LDggQEAgc3Rh
dGljIFN0cmluZyBwcnVuaW5nUmVhc29uVG9EaWFnbm9zdGljTG9nZ2luZ0tleShQcnVuaW5nUmVh
c29uIHBydW5pbmdSZWFzb24pCiAgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnBydW5lZER1ZVRvTWVtb3J5UHJlc3N1cmVLZXkoKTsKICAgICBjYXNlIFBydW5pbmdSZWFzb246
OlByb2Nlc3NTdXNwZW5kZWQ6CiAgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnBydW5lZER1ZVRvUHJvY2Vzc1N1c3BlbmRlZCgpOwotICAgIGNhc2UgUHJ1bmluZ1JlYXNvbjo6
UmVhY2hlZENhcGFjaXR5OgotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpw
cnVuZWREdWVUb0NhcGFjaXR5UmVhY2hlZCgpOworICAgIGNhc2UgUHJ1bmluZ1JlYXNvbjo6UmVh
Y2hlZE1heFNpemU6CisgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnBydW5l
ZER1ZVRvTWF4U2l6ZVJlYWNoZWQoKTsKICAgICBjYXNlIFBydW5pbmdSZWFzb246Ok5vbmU6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ1MSw0NSArNDM4LDMzIEBAIHN0YXRpYyBTdHJpbmcg
cHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoUHJ1bmluZ1JlYXNvbiBwcnVuaW5n
UmVhc29uKQogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCi12b2lkIFBhZ2VDYWNoZTo6
YWRkKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IHBycEl0ZW0sIFBhZ2UmIHBhZ2UpCit2b2lkIFBh
Z2VDYWNoZTo6YWRkKEhpc3RvcnlJdGVtJiBpdGVtLCBQYWdlJiBwYWdlKQogewotICAgIEFTU0VS
VChwcnBJdGVtKTsKICAgICBBU1NFUlQoY2FuQ2FjaGUoJnBhZ2UpKTsKLSAgICAKLSAgICBIaXN0
b3J5SXRlbSogaXRlbSA9IHBycEl0ZW0ubGVha1JlZigpOyAvLyBCYWxhbmNlZCBpbiByZW1vdmUo
KS4KIAogICAgIC8vIFJlbW92ZSBzdGFsZSBjYWNoZSBlbnRyeSBpZiBuZWNlc3NhcnkuCi0gICAg
aWYgKGl0ZW0tPm1fY2FjaGVkUGFnZSkKLSAgICAgICAgcmVtb3ZlKGl0ZW0pOworICAgIHJlbW92
ZShpdGVtKTsKIAotICAgIGl0ZW0tPm1fY2FjaGVkUGFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2Fj
aGVkUGFnZT4ocGFnZSk7Ci0gICAgaXRlbS0+bV9wcnVuaW5nUmVhc29uID0gUHJ1bmluZ1JlYXNv
bjo6Tm9uZTsKLSAgICBhZGRUb0xSVUxpc3QoaXRlbSk7Ci0gICAgKyttX3NpemU7CisgICAgaXRl
bS5tX2NhY2hlZFBhZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZFBhZ2U+KHBhZ2UpOworICAg
IGl0ZW0ubV9wcnVuaW5nUmVhc29uID0gUHJ1bmluZ1JlYXNvbjo6Tm9uZTsKKyAgICBtX2l0ZW1z
LmFkZCgmaXRlbSk7CiAgICAgCi0gICAgcHJ1bmUoUHJ1bmluZ1JlYXNvbjo6UmVhY2hlZENhcGFj
aXR5KTsKKyAgICBwcnVuZShQcnVuaW5nUmVhc29uOjpSZWFjaGVkTWF4U2l6ZSk7CiB9CiAKLXN0
ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBQYWdlQ2FjaGU6OnRha2UoSGlzdG9yeUl0ZW0qIGl0
ZW0sIFBhZ2UqIHBhZ2UpCitzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gUGFnZUNhY2hlOjp0
YWtlKEhpc3RvcnlJdGVtJiBpdGVtLCBQYWdlKiBwYWdlKQogewotICAgIGlmICghaXRlbSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4g
Y2FjaGVkUGFnZSA9IFdURjo6bW92ZShpdGVtLT5tX2NhY2hlZFBhZ2UpOwotCi0gICAgcmVtb3Zl
RnJvbUxSVUxpc3QoaXRlbSk7Ci0gICAgLS1tX3NpemU7Ci0KLSAgICBpdGVtLT5kZXJlZigpOyAv
LyBCYWxhbmNlZCBpbiBhZGQoKS4KLQotICAgIGlmICghY2FjaGVkUGFnZSkgewotICAgICAgICBp
ZiAoaXRlbS0+bV9wcnVuaW5nUmVhc29uICE9IFBydW5pbmdSZWFzb246Ok5vbmUpCi0gICAgICAg
ICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgcHJ1bmluZ1Jl
YXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoaXRlbS0+bV9wcnVuaW5nUmVhc29uKSk7CisgICAg
aWYgKCFpdGVtLm1fY2FjaGVkUGFnZSkgeworICAgICAgICBpZiAoaXRlbS5tX3BydW5pbmdSZWFz
b24gIT0gUHJ1bmluZ1JlYXNvbjo6Tm9uZSkKKyAgICAgICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1
cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBwcnVuaW5nUmVhc29uVG9EaWFnbm9zdGljTG9nZ2lu
Z0tleShpdGVtLm1fcHJ1bmluZ1JlYXNvbikpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IFdURjo6
bW92ZShpdGVtLm1fY2FjaGVkUGFnZSk7CisgICAgbV9pdGVtcy5yZW1vdmUoJml0ZW0pOworCiAg
ICAgaWYgKGNhY2hlZFBhZ2UtPmhhc0V4cGlyZWQoKSkgewotICAgICAgICBMT0coUGFnZUNhY2hl
LCAiTm90IHJlc3RvcmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNh
dXNlIGNhY2hlIGVudHJ5IGhhcyBleHBpcmVkIiwgaXRlbS0+dXJsKCkuc3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOworICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3RvcmluZyBwYWdlIGZv
ciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVudHJ5IGhhcyBleHBp
cmVkIiwgaXRlbS51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIGxvZ1Bh
Z2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBEaWFnbm9zdGljTG9nZ2luZ0tl
eXM6OmV4cGlyZWRLZXkoKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTQ5
Nyw3OCArNDcyLDQxIEBAIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBQYWdlQ2FjaGU6OnRh
a2UoSGlzdG9yeUl0ZW0qIGl0ZW0sIFBhZ2UqIHBhZ2UpCiAgICAgcmV0dXJuIGNhY2hlZFBhZ2U7
CiB9CiAKLUNhY2hlZFBhZ2UqIFBhZ2VDYWNoZTo6Z2V0KEhpc3RvcnlJdGVtKiBpdGVtLCBQYWdl
KiBwYWdlKQorQ2FjaGVkUGFnZSogUGFnZUNhY2hlOjpnZXQoSGlzdG9yeUl0ZW0mIGl0ZW0sIFBh
Z2UqIHBhZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKCFpdGVtKQorICAgIENhY2hlZFBhZ2UqIGNhY2hl
ZFBhZ2UgPSBpdGVtLm1fY2FjaGVkUGFnZS5nZXQoKTsKKyAgICBpZiAoIWNhY2hlZFBhZ2UpIHsK
KyAgICAgICAgaWYgKGl0ZW0ubV9wcnVuaW5nUmVhc29uICE9IFBydW5pbmdSZWFzb246Ok5vbmUp
CisgICAgICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwg
cHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xvZ2dpbmdLZXkoaXRlbS5tX3BydW5pbmdSZWFzb24p
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQogCi0gICAgaWYgKENhY2hlZFBhZ2Uq
IGNhY2hlZFBhZ2UgPSBpdGVtLT5tX2NhY2hlZFBhZ2UuZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFj
YWNoZWRQYWdlLT5oYXNFeHBpcmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gY2FjaGVkUGFnZTsK
LSAgICAgICAgCi0gICAgICAgIExPRyhQYWdlQ2FjaGUsICJOb3QgcmVzdG9yaW5nIHBhZ2UgZm9y
ICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUgZW50cnkgaGFzIGV4cGly
ZWQiLCBpdGVtLT51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgaWYgKGNhY2hl
ZFBhZ2UtPmhhc0V4cGlyZWQoKSkgeworICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3Rv
cmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVu
dHJ5IGhhcyBleHBpcmVkIiwgaXRlbS51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAg
ICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OmV4cGlyZWRLZXkoKSk7CiAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVk
KCkucmVtb3ZlKGl0ZW0pOwotICAgIH0gZWxzZSBpZiAoaXRlbS0+bV9wcnVuaW5nUmVhc29uICE9
IFBydW5pbmdSZWFzb246Ok5vbmUpCi0gICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9z
dGljTWVzc2FnZShwYWdlLCBwcnVuaW5nUmVhc29uVG9EaWFnbm9zdGljTG9nZ2luZ0tleShpdGVt
LT5tX3BydW5pbmdSZWFzb24pKTsKLQotICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlZFBhZ2U7CiB9CiAKLXZvaWQgUGFn
ZUNhY2hlOjpyZW1vdmUoSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIFBhZ2VDYWNoZTo6cmVtb3Zl
KEhpc3RvcnlJdGVtJiBpdGVtKQogewogICAgIC8vIFNhZmVseSBpZ25vcmUgYXR0ZW1wdHMgdG8g
cmVtb3ZlIGl0ZW1zIG5vdCBpbiB0aGUgY2FjaGUuCi0gICAgaWYgKCFpdGVtIHx8ICFpdGVtLT5t
X2NhY2hlZFBhZ2UpCisgICAgaWYgKCFpdGVtLm1fY2FjaGVkUGFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaXRlbS0+bV9jYWNoZWRQYWdlID0gbnVsbHB0cjsKLSAgICByZW1vdmVGcm9tTFJV
TGlzdChpdGVtKTsKLSAgICAtLW1fc2l6ZTsKLQotICAgIGl0ZW0tPmRlcmVmKCk7IC8vIEJhbGFu
Y2VkIGluIGFkZCgpLgorICAgIGl0ZW0ubV9jYWNoZWRQYWdlID0gbnVsbHB0cjsKKyAgICBtX2l0
ZW1zLnJlbW92ZSgmaXRlbSk7CiB9CiAKIHZvaWQgUGFnZUNhY2hlOjpwcnVuZShQcnVuaW5nUmVh
c29uIHBydW5pbmdSZWFzb24pCiB7Ci0gICAgd2hpbGUgKG1fc2l6ZSA+IG1fY2FwYWNpdHkpIHsK
LSAgICAgICAgQVNTRVJUKG1fdGFpbCAmJiBtX3RhaWwtPm1fY2FjaGVkUGFnZSk7Ci0gICAgICAg
IG1fdGFpbC0+bV9wcnVuaW5nUmVhc29uID0gcHJ1bmluZ1JlYXNvbjsKLSAgICAgICAgcmVtb3Zl
KG1fdGFpbCk7Ci0gICAgfQotfQotCi12b2lkIFBhZ2VDYWNoZTo6YWRkVG9MUlVMaXN0KEhpc3Rv
cnlJdGVtKiBpdGVtKQotewotICAgIGl0ZW0tPm1fbmV4dCA9IG1faGVhZDsKLSAgICBpdGVtLT5t
X3ByZXYgPSAwOwotCi0gICAgaWYgKG1faGVhZCkgewotICAgICAgICBBU1NFUlQobV90YWlsKTsK
LSAgICAgICAgbV9oZWFkLT5tX3ByZXYgPSBpdGVtOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFT
U0VSVCghbV90YWlsKTsKLSAgICAgICAgbV90YWlsID0gaXRlbTsKLSAgICB9Ci0KLSAgICBtX2hl
YWQgPSBpdGVtOwotfQotCi12b2lkIFBhZ2VDYWNoZTo6cmVtb3ZlRnJvbUxSVUxpc3QoSGlzdG9y
eUl0ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKCFpdGVtLT5tX25leHQpIHsKLSAgICAgICAgQVNTRVJU
KGl0ZW0gPT0gbV90YWlsKTsKLSAgICAgICAgbV90YWlsID0gaXRlbS0+bV9wcmV2OwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEFTU0VSVChpdGVtICE9IG1fdGFpbCk7Ci0gICAgICAgIGl0ZW0tPm1f
bmV4dC0+bV9wcmV2ID0gaXRlbS0+bV9wcmV2OwotICAgIH0KLQotICAgIGlmICghaXRlbS0+bV9w
cmV2KSB7Ci0gICAgICAgIEFTU0VSVChpdGVtID09IG1faGVhZCk7Ci0gICAgICAgIG1faGVhZCA9
IGl0ZW0tPm1fbmV4dDsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoaXRlbSAhPSBtX2hl
YWQpOwotICAgICAgICBpdGVtLT5tX3ByZXYtPm1fbmV4dCA9IGl0ZW0tPm1fbmV4dDsKKyAgICB3
aGlsZSAocGFnZUNvdW50KCkgPiBtYXhTaXplKCkpIHsKKyAgICAgICAgYXV0byYgb2xkZXN0SXRl
bSA9IG1faXRlbXMuZmlyc3QoKTsKKyAgICAgICAgb2xkZXN0SXRlbS0+bV9jYWNoZWRQYWdlID0g
bnVsbHB0cjsKKyAgICAgICAgb2xkZXN0SXRlbS0+bV9wcnVuaW5nUmVhc29uID0gcHJ1bmluZ1Jl
YXNvbjsKKyAgICAgICAgbV9pdGVtcy5yZW1vdmVGaXJzdCgpOwogICAgIH0KIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvUGFnZUNhY2hlLmgKaW5kZXggYzMxMGQ0ZTI4MWI0Yzk5MjlhZGE2OTlhMmZmODlk
M2Y0NDk1OTdmZC4uOTUzNmE5Zjg2ZGYyMTRkYTMxYWM0YWZlOWUzNzQyN2E0ODY1MzkxZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNzcgKzI2LDY2IEBACiAjaWZuZGVmIFBh
Z2VDYWNoZV9oCiAjZGVmaW5lIFBhZ2VDYWNoZV9oCiAKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5o
IgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBD
YWNoZWRQYWdlOwotICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIEhpc3RvcnlJdGVtOwotICAg
IGNsYXNzIFBhZ2U7CitjbGFzcyBDYWNoZWRQYWdlOworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdl
OwogCi0gICAgZW51bSBjbGFzcyBQcnVuaW5nUmVhc29uIHsgTm9uZSwgUHJvY2Vzc1N1c3BlbmRl
ZCwgTWVtb3J5UHJlc3N1cmUsIFJlYWNoZWRDYXBhY2l0eSB9OwotICAgIAotICAgIGNsYXNzIFBh
Z2VDYWNoZSB7Ci0gICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VDYWNoZSk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgLy8gRnVuY3Rpb24gdG8g
b2J0YWluIHRoZSBnbG9iYWwgcGFnZSBjYWNoZS4KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFBhZ2VDYWNoZSYgc2hhcmVkKCk7Ci0gICAgICAgIAotICAgICAgICBib29sIGNhbkNhY2hl
KFBhZ2UqKSBjb25zdDsKK2VudW0gY2xhc3MgUHJ1bmluZ1JlYXNvbiB7IE5vbmUsIFByb2Nlc3NT
dXNwZW5kZWQsIE1lbW9yeVByZXNzdXJlLCBSZWFjaGVkTWF4U2l6ZSB9OwogCi0gICAgICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q2FwYWNpdHkoaW50KTsgLy8gbnVtYmVyIG9mIHBhZ2VzIHRv
IGNhY2hlCi0gICAgICAgIGludCBjYXBhY2l0eSgpIHsgcmV0dXJuIG1fY2FwYWNpdHk7IH0KLSAg
ICAgICAgCi0gICAgICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+LCBQYWdlJik7
IC8vIFBydW5lcyBpZiBjYXBhY2l0eSgpIGlzIGV4Y2VlZGVkLgotICAgICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlbW92ZShIaXN0b3J5SXRlbSopOwotICAgICAgICBDYWNoZWRQYWdlKiBnZXQo
SGlzdG9yeUl0ZW0qLCBQYWdlKik7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdl
PiB0YWtlKEhpc3RvcnlJdGVtKiwgUGFnZSopOworY2xhc3MgUGFnZUNhY2hlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQYWdlQ2FjaGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICAvLyBGdW5jdGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbCBwYWdlIGNhY2hlLgor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQYWdlQ2FjaGUmIHNoYXJlZCgpOwogCi0gICAgICAg
IGludCBwYWdlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICAgICAgV0VCQ09S
RV9FWFBPUlQgaW50IGZyYW1lQ291bnQoKSBjb25zdDsKKyAgICBib29sIGNhbkNhY2hlKFBhZ2Uq
KSBjb25zdDsKIAotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1hcmtQYWdlc0ZvclZpc2l0
ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICAvLyBVc2VkIHdoZW4gbWVtb3J5IGlzIGxvdyB0byBw
cnVuZSBzb21lIGNhY2hlZCBwYWdlcy4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBydW5lVG9T
aXplTm93KHVuc2lnbmVkIG1heFNpemUsIFBydW5pbmdSZWFzb24pOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0TWF4U2l6ZSh1bnNpZ25lZCk7IC8vIG51bWJlciBvZiBwYWdlcyB0byBjYWNo
ZS4KKyAgICB1bnNpZ25lZCBtYXhTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhTaXplOyB9CiAK
LSAgICAgICAgLy8gV2lsbCBtYXJrIGFsbCBjYWNoZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBnaXZlbiBwYWdlIGFzIG5lZWRpbmcgc3R5bGUgcmVjYWxjLgotICAgICAgICB2b2lkIG1hcmtQ
YWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyhQYWdlKik7CisgICAgdm9pZCBhZGQoSGlzdG9yeUl0ZW0m
LCBQYWdlJik7IC8vIFBydW5lcyBpZiBtYXhTaXplKCkgaXMgZXhjZWVkZWQuCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCByZW1vdmUoSGlzdG9yeUl0ZW0mKTsKKyAgICBDYWNoZWRQYWdlKiBnZXQo
SGlzdG9yeUl0ZW0mLCBQYWdlKikgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBh
Z2U+IHRha2UoSGlzdG9yeUl0ZW0mLCBQYWdlKik7CiAKLSAgICAgICAgLy8gVXNlZCB3aGVuIG1l
bW9yeSBpcyBsb3cgdG8gcHJ1bmUgc29tZSBjYWNoZWQgcGFnZXMuCi0gICAgICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcHJ1bmVUb0NhcGFjaXR5Tm93KGludCBjYXBhY2l0eSwgUHJ1bmluZ1JlYXNv
bik7CisgICAgdW5zaWduZWQgcGFnZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtcy5zaXpl
KCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBmcmFtZUNvdW50KCkgY29uc3Q7CiAK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNh
bGMoKTsKKyAgICAvLyBXaWxsIG1hcmsgYWxsIGNhY2hlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGgg
dGhlIGdpdmVuIHBhZ2UgYXMgbmVlZGluZyBzdHlsZSByZWNhbGMuCisgICAgdm9pZCBtYXJrUGFn
ZXNGb3JGdWxsU3R5bGVSZWNhbGMoUGFnZSYpOworICAgIHZvaWQgbWFya1BhZ2VzRm9yRGV2aWNl
U2NhbGVDaGFuZ2VkKFBhZ2UmKTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgICAgIHZv
aWQgbWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOworICAgIHZvaWQgbWFy
a1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogI2VuZGlmCiAKLSAgICAgICAg
Ym9vbCBzaG91bGRDbGVhckJhY2tpbmdTdG9yZXMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENs
ZWFyQmFja2luZ1N0b3JlczsgfQotICAgICAgICB2b2lkIHNldFNob3VsZENsZWFyQmFja2luZ1N0
b3Jlcyhib29sIGZsYWcpIHsgbV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXMgPSBmbGFnOyB9Ci0g
ICAgICAgIHZvaWQgbWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKFBhZ2UqKTsKKyAgICBi
b29sIHNob3VsZENsZWFyQmFja2luZ1N0b3JlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ2xl
YXJCYWNraW5nU3RvcmVzOyB9CisgICAgdm9pZCBzZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXMo
Ym9vbCBmbGFnKSB7IG1fc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzID0gZmxhZzsgfQogCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgUGFnZUNhY2hlKCk7IC8vIFVzZSBzaGFyZWQoKSBpbnN0ZWFkLgot
ICAgICAgICB+UGFnZUNhY2hlKCk7IC8vIE5vdCBpbXBsZW1lbnRlZCB0byBtYWtlIHN1cmUgbm9i
b2R5IGFjY2lkZW50YWxseSBjYWxscyBkZWxldGUgLS0gV2ViQ29yZSBkb2VzIG5vdCBkZWxldGUg
c2luZ2xldG9ucy4KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBib29sIGNhbkNhY2hlUGFnZUNv
bnRhaW5pbmdUaGlzRnJhbWUoRnJhbWUqKTsKK3ByaXZhdGU6CisgICAgUGFnZUNhY2hlKCkgPSBk
ZWZhdWx0OyAvLyBVc2Ugc2hhcmVkKCkgaW5zdGVhZC4KKyAgICB+UGFnZUNhY2hlKCkgPSBkZWxl
dGU7IC8vIE1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJD
b3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgogCi0gICAgICAgIHZvaWQgYWRkVG9MUlVM
aXN0KEhpc3RvcnlJdGVtKik7IC8vIEFkZHMgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCi0gICAg
ICAgIHZvaWQgcmVtb3ZlRnJvbUxSVUxpc3QoSGlzdG9yeUl0ZW0qKTsKKyAgICBzdGF0aWMgYm9v
bCBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKEZyYW1lJik7CiAKLSAgICAgICAgdm9p
ZCBwcnVuZShQcnVuaW5nUmVhc29uKTsKKyAgICB2b2lkIHBydW5lKFBydW5pbmdSZWFzb24pOwog
Ci0gICAgICAgIGludCBtX2NhcGFjaXR5OwotICAgICAgICBpbnQgbV9zaXplOworICAgIExpc3RI
YXNoU2V0PFJlZlB0cjxIaXN0b3J5SXRlbT4+IG1faXRlbXM7CisgICAgdW5zaWduZWQgbV9tYXhT
aXplIHswfTsKKyAgICBib29sIG1fc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzIHtmYWxzZX07CiAK
LSAgICAgICAgLy8gTFJVIExpc3QKLSAgICAgICAgSGlzdG9yeUl0ZW0qIG1faGVhZDsKLSAgICAg
ICAgSGlzdG9yeUl0ZW0qIG1fdGFpbDsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgbV9zaG91bGRD
bGVhckJhY2tpbmdTdG9yZXM7Ci0KLSAgICAgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0
cm95ZWQ8UGFnZUNhY2hlPjsKLSAgICB9OworICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVz
dHJveWVkPFBhZ2VDYWNoZT47Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDkwYjVhMGEzM2VjNmI4Y2JmYTFkNTkx
YTZlZjZmMDkyMGQ0ZDdkYzQuLjk1ZmVmNjFlMDYwYjI2ZTgwMDhkODQ1MmI2ZTcyMjcxZDk1NzBh
ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtOTIxLDcgKzkyMSw3
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRvQ2hpbGRGcmFtZShjb25zdCBVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiByZWZlcmVyLCBGCiAgICAgICAgIEhpc3RvcnlJdGVtKiBjaGlsZEl0
ZW0gPSBwYXJlbnRJdGVtLT5jaGlsZEl0ZW1XaXRoVGFyZ2V0KGNoaWxkRnJhbWUtPnRyZWUoKS51
bmlxdWVOYW1lKCkpOwogICAgICAgICBpZiAoY2hpbGRJdGVtKSB7CiAgICAgICAgICAgICBjaGls
ZEZyYW1lLT5sb2FkZXIoKS5tX3JlcXVlc3RlZEhpc3RvcnlJdGVtID0gY2hpbGRJdGVtOwotICAg
ICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCkubG9hZERpZmZlcmVudERvY3VtZW50SXRlbShj
aGlsZEl0ZW0sIGxvYWRUeXBlKCksIE1heUF0dGVtcHRDYWNoZU9ubHlMb2FkRm9yRm9ybVN1Ym1p
c3Npb25JdGVtKTsKKyAgICAgICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLmxvYWREaWZmZXJl
bnREb2N1bWVudEl0ZW0oKmNoaWxkSXRlbSwgbG9hZFR5cGUoKSwgTWF5QXR0ZW1wdENhY2hlT25s
eUxvYWRGb3JGb3JtU3VibWlzc2lvbkl0ZW0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMTc0MCw4ICsxNzQwLDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0
UHJvdmlzaW9uYWxMb2FkKCkKICAgICBSZWY8RnJhbWU+IHByb3RlY3QobV9mcmFtZSk7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZTsKLSAgICBpZiAobV9sb2Fk
aW5nRnJvbUNhY2hlZFBhZ2UpCi0gICAgICAgIGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNoYXJl
ZCgpLnRha2UoaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7Cisg
ICAgaWYgKG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlICYmIGhpc3RvcnkoKS5wcm92aXNpb25hbEl0
ZW0oKSkKKyAgICAgICAgY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkudGFrZSgqaGlz
dG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7CiAKICAgICBMT0coUGFn
ZUNhY2hlLCAiV2ViQ29yZUxvYWRpbmcgJXM6IEFib3V0IHRvIGNvbW1pdCBwcm92aXNpb25hbCBs
b2FkIGZyb20gcHJldmlvdXMgVVJMICclcycgdG8gbmV3IFVSTCAnJXMnIiwgbV9mcmFtZS50cmVl
KCkudW5pcXVlTmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksCiAgICAgICAgIG1fZnJhbWUu
ZG9jdW1lbnQoKSA/IG1fZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nQ2VudGVyRWxsaXBz
aXplZFRvTGVuZ3RoKCkudXRmOCgpLmRhdGEoKSA6ICIiLApAQCAtMTc1OCwxMSArMTc1OCwxMSBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQogICAgICAgICAgICAg
TE9HKE1lbW9yeVByZXNzdXJlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIGJlY2F1c2UgdW5kZXIgbWVt
b3J5IHByZXNzdXJlIGF0OiAlcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwogICAgICAgICAgICAg
TE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFnZSBjYWNoZSB0byAwIGR1ZSB0byBtZW1vcnkgcHJl
c3N1cmUiKTsKICAgICAgICAgICAgIC8vIERvbid0IGNhY2hlIGFueSBwYWdlIGlmIHdlIGFyZSB1
bmRlciBtZW1vcnkgcHJlc3N1cmUuCi0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBy
dW5lVG9DYXBhY2l0eU5vdygwLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CisgICAg
ICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFz
b246Ok1lbW9yeVByZXNzdXJlKTsKICAgICAgICAgfSBlbHNlIGlmIChzeXN0ZW1NZW1vcnlMZXZl
bCgpIDw9IG1lbW9yeUxldmVsVGhyZXNob2xkVG9QcnVuZVBhZ2VDYWNoZSkgewogICAgICAgICAg
ICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIGJlY2F1c2Ugc3lzdGVt
IG1lbW9yeSBsZXZlbCBpcyAlZCBhdDogJXMiLCBzeXN0ZW1NZW1vcnlMZXZlbCgpLCBfX1BSRVRU
WV9GVU5DVElPTl9fKTsKICAgICAgICAgICAgIExPRyhQYWdlQ2FjaGUsICJQcnVuaW5nIHBhZ2Ug
Y2FjaGUgdG8gJWQgZHVlIHRvIGxvdyBtZW1vcnkgKGxldmVsICVkIGxlc3Mgb3IgZXF1YWwgdG8g
JWQgdGhyZXNob2xkKSIsIFBhZ2VDYWNoZTo6c2hhcmVkKCkuY2FwYWNpdHkoKSAvIDIsIHN5c3Rl
bU1lbW9yeUxldmVsKCksIG1lbW9yeUxldmVsVGhyZXNob2xkVG9QcnVuZVBhZ2VDYWNoZSk7Ci0g
ICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9DYXBhY2l0eU5vdyhQYWdlQ2Fj
aGU6OnNoYXJlZCgpLmNhcGFjaXR5KCkgLyAyLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3Vy
ZSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9TaXplTm93KFBhZ2VD
YWNoZTo6c2hhcmVkKCkubWF4U2l6ZSgpIC8gMiwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1
cmUpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0xNzcxLDggKzE3NzEsOCBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQogCiAgICAgLy8gQ2hlY2sgdG8g
c2VlIGlmIHdlIG5lZWQgdG8gY2FjaGUgdGhlIHBhZ2Ugd2UgYXJlIG5hdmlnYXRpbmcgYXdheSBm
cm9tIGludG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICAvLyBXZSBhcmUgZG9pbmcgdGhp
cyBoZXJlIGJlY2F1c2Ugd2Uga25vdyBmb3Igc3VyZSB0aGF0IGEgbmV3IHBhZ2UgaXMgYWJvdXQg
dG8gYmUgbG9hZGVkLgotICAgIEhpc3RvcnlJdGVtKiBpdGVtID0gaGlzdG9yeSgpLmN1cnJlbnRJ
dGVtKCk7Ci0gICAgaWYgKCFtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKSAmJiBQYWdlQ2FjaGU6OnNo
YXJlZCgpLmNhbkNhY2hlKG1fZnJhbWUucGFnZSgpKSAmJiAhaXRlbS0+aXNJblBhZ2VDYWNoZSgp
KQorICAgIEhpc3RvcnlJdGVtJiBpdGVtID0gKmhpc3RvcnkoKS5jdXJyZW50SXRlbSgpOworICAg
IGlmICghbV9mcmFtZS50cmVlKCkucGFyZW50KCkgJiYgUGFnZUNhY2hlOjpzaGFyZWQoKS5jYW5D
YWNoZShtX2ZyYW1lLnBhZ2UoKSkgJiYgIWl0ZW0uaXNJblBhZ2VDYWNoZSgpKQogICAgICAgICBQ
YWdlQ2FjaGU6OnNoYXJlZCgpLmFkZChpdGVtLCAqbV9mcmFtZS5wYWdlKCkpOwogCiAgICAgaWYg
KG1fbG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZTo6UmVwbGFjZSkKQEAgLTMxMjcsMTQgKzMxMjcs
MTQgQEAgRnJhbWUqIEZyYW1lTG9hZGVyOjpmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgRG9jdW1lbnQqIGEKICAgICAgICAgYWN0aXZlRG9jdW1lbnQgPSBt
X2ZyYW1lLmRvY3VtZW50KCk7CiAKICAgICBpZiAoIWFjdGl2ZURvY3VtZW50LT5jYW5OYXZpZ2F0
ZShmcmFtZSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIHJldHVybiBmcmFtZTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFNhbWVEb2N1bWVu
dEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIEZyYW1lTG9hZGVyOjpsb2FkU2FtZURvY3Vt
ZW50SXRlbShIaXN0b3J5SXRlbSYgaXRlbSkKIHsKLSAgICBBU1NFUlQoaXRlbS0+ZG9jdW1lbnRT
ZXF1ZW5jZU51bWJlcigpID09IGhpc3RvcnkoKS5jdXJyZW50SXRlbSgpLT5kb2N1bWVudFNlcXVl
bmNlTnVtYmVyKCkpOworICAgIEFTU0VSVChpdGVtLmRvY3VtZW50U2VxdWVuY2VOdW1iZXIoKSA9
PSBoaXN0b3J5KCkuY3VycmVudEl0ZW0oKS0+ZG9jdW1lbnRTZXF1ZW5jZU51bWJlcigpKTsKIAog
ICAgIC8vIFNhdmUgdXNlciB2aWV3IHN0YXRlIHRvIHRoZSBjdXJyZW50IGhpc3RvcnkgaXRlbSBo
ZXJlIHNpbmNlIHdlIGRvbid0IGRvIGEgbm9ybWFsIGxvYWQuCiAgICAgLy8gRklYTUU6IERvZXMg
Zm9ybSBzdGF0ZSBuZWVkIHRvIGJlIHNhdmVkIGhlcmUgdG9vPwpAQCAtMzE0MiwxMCArMzE0Miwx
MCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkU2FtZURvY3VtZW50SXRlbShIaXN0b3J5SXRlbSog
aXRlbSkKICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCkpCiAgICAgICAg
IHZpZXctPnNldFdhc1Njcm9sbGVkQnlVc2VyKGZhbHNlKTsKIAotICAgIGhpc3RvcnkoKS5zZXRD
dXJyZW50SXRlbShpdGVtKTsKKyAgICBoaXN0b3J5KCkuc2V0Q3VycmVudEl0ZW0oJml0ZW0pOwog
ICAgICAgICAKICAgICAvLyBsb2FkSW5TYW1lRG9jdW1lbnQoKSBhY3R1YWxseSBjaGFuZ2VzIHRo
ZSBVUkwgYW5kIG5vdGlmaWVzIGxvYWQgZGVsZWdhdGVzIG9mIGEgImZha2UiIGxvYWQKLSAgICBs
b2FkSW5TYW1lRG9jdW1lbnQoaXRlbS0+dXJsKCksIGl0ZW0tPnN0YXRlT2JqZWN0KCksIGZhbHNl
KTsKKyAgICBsb2FkSW5TYW1lRG9jdW1lbnQoaXRlbS51cmwoKSwgaXRlbS5zdGF0ZU9iamVjdCgp
LCBmYWxzZSk7CiAKICAgICAvLyBSZXN0b3JlIHVzZXIgdmlldyBzdGF0ZSBmcm9tIHRoZSBjdXJy
ZW50IGhpc3RvcnkgaXRlbSBoZXJlIHNpbmNlIHdlIGRvbid0IGRvIGEgbm9ybWFsIGxvYWQuCiAg
ICAgaGlzdG9yeSgpLnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpOwpAQCAtMzE1
NCwxMCArMzE1NCwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkU2FtZURvY3VtZW50SXRlbShI
aXN0b3J5SXRlbSogaXRlbSkKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZWFsbHkg
YmUgc3BsaXQgaW50byBhIGNvdXBsZSBwaWVjZXMsIHNvbWUgb2YKIC8vIHdoaWNoIHNob3VsZCBi
ZSBtZXRob2RzIG9mIEhpc3RvcnlDb250cm9sbGVyIGFuZCBzb21lIG9mIHdoaWNoIHNob3VsZCBi
ZQogLy8gbWV0aG9kcyBvZiBGcmFtZUxvYWRlci4KLXZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZm
ZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hZFR5
cGUsIEZvcm1TdWJtaXNzaW9uQ2FjaGVMb2FkUG9saWN5IGNhY2hlTG9hZFBvbGljeSkKK3ZvaWQg
RnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0s
IEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUsIEZvcm1TdWJtaXNzaW9uQ2FjaGVMb2FkUG9saWN5IGNh
Y2hlTG9hZFBvbGljeSkKIHsKICAgICAvLyBSZW1lbWJlciB0aGlzIGl0ZW0gc28gd2UgY2FuIHRy
YXZlcnNlIGFueSBjaGlsZCBpdGVtcyBhcyBjaGlsZCBmcmFtZXMgbG9hZAotICAgIGhpc3Rvcnko
KS5zZXRQcm92aXNpb25hbEl0ZW0oaXRlbSk7CisgICAgaGlzdG9yeSgpLnNldFByb3Zpc2lvbmFs
SXRlbSgmaXRlbSk7CiAKICAgICBpZiAoQ2FjaGVkUGFnZSogY2FjaGVkUGFnZSA9IFBhZ2VDYWNo
ZTo6c2hhcmVkKCkuZ2V0KGl0ZW0sIG1fZnJhbWUucGFnZSgpKSkgewogICAgICAgICBhdXRvIGRv
Y3VtZW50TG9hZGVyID0gY2FjaGVkUGFnZS0+ZG9jdW1lbnRMb2FkZXIoKTsKQEAgLTMxNjcsMTcg
KzMxNjcsMTcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShI
aXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2EKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFVSTCBpdGVtVVJMID0gaXRlbS0+dXJsKCk7Ci0gICAgVVJMIGl0ZW1PcmlnaW5h
bFVSTCA9IGl0ZW0tPm9yaWdpbmFsVVJMKCk7CisgICAgVVJMIGl0ZW1VUkwgPSBpdGVtLnVybCgp
OworICAgIFVSTCBpdGVtT3JpZ2luYWxVUkwgPSBpdGVtLm9yaWdpbmFsVVJMKCk7CiAgICAgVVJM
IGN1cnJlbnRVUkw7CiAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgIGN1cnJlbnRV
UkwgPSBkb2N1bWVudExvYWRlcigpLT51cmwoKTsKLSAgICBSZWZQdHI8Rm9ybURhdGE+IGZvcm1E
YXRhID0gaXRlbS0+Zm9ybURhdGEoKTsKKyAgICBSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhID0g
aXRlbS5mb3JtRGF0YSgpOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoaXRlbVVSTCk7
CiAKLSAgICBpZiAoIWl0ZW0tPnJlZmVycmVyKCkuaXNOdWxsKCkpCi0gICAgICAgIHJlcXVlc3Qu
c2V0SFRUUFJlZmVycmVyKGl0ZW0tPnJlZmVycmVyKCkpOworICAgIGlmICghaXRlbS5yZWZlcnJl
cigpLmlzTnVsbCgpKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihpdGVtLnJlZmVy
cmVyKCkpOwogICAgIAogICAgIC8vIElmIHRoaXMgd2FzIGEgcmVwb3N0IHRoYXQgZmFpbGVkIHRo
ZSBwYWdlIGNhY2hlLCB3ZSBtaWdodCB0cnkgdG8gcmVwb3N0IHRoZSBmb3JtLgogICAgIE5hdmln
YXRpb25BY3Rpb24gYWN0aW9uOwpAQCAtMzE4Niw4ICszMTg2LDggQEAgdm9pZCBGcmFtZUxvYWRl
cjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2Fk
VHlwZSBsb2EKIAogICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIlBPU1QiKTsKICAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQQm9keShmb3JtRGF0YSk7Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRU
UENvbnRlbnRUeXBlKGl0ZW0tPmZvcm1Db250ZW50VHlwZSgpKTsKLSAgICAgICAgUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9t
U3RyaW5nKGl0ZW0tPnJlZmVycmVyKCkpOworICAgICAgICByZXF1ZXN0LnNldEhUVFBDb250ZW50
VHlwZShpdGVtLmZvcm1Db250ZW50VHlwZSgpKTsKKyAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKGl0
ZW0ucmVmZXJyZXIoKSk7CiAgICAgICAgIGFkZEhUVFBPcmlnaW5JZk5lZWRlZChyZXF1ZXN0LCBz
ZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSk7CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGFk
ZCBleHRyYSBmaWVsZHMgdG8gdGhlIHJlcXVlc3QgYWZ0ZXIgdGhlIE9yaWdpbiBoZWFkZXIgaXMg
YWRkZWQgZm9yIHRoZSBGb3JtRGF0YSBjYXNlLgpAQCAtMzI0MiwxMSArMzI0MiwxMSBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtKiBpdGVt
LCBGcmFtZUxvYWRUeXBlIGxvYQogfQogCiAvLyBMb2FkcyBjb250ZW50IGludG8gdGhpcyBmcmFt
ZSwgYXMgc3BlY2lmaWVkIGJ5IGhpc3RvcnkgaXRlbQotdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEl0
ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUpCit2b2lkIEZyYW1l
TG9hZGVyOjpsb2FkSXRlbShIaXN0b3J5SXRlbSYgaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlw
ZSkKIHsKLSAgICBtX3JlcXVlc3RlZEhpc3RvcnlJdGVtID0gaXRlbTsKKyAgICBtX3JlcXVlc3Rl
ZEhpc3RvcnlJdGVtID0gJml0ZW07CiAgICAgSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtID0gaGlz
dG9yeSgpLmN1cnJlbnRJdGVtKCk7Ci0gICAgYm9vbCBzYW1lRG9jdW1lbnROYXZpZ2F0aW9uID0g
Y3VycmVudEl0ZW0gJiYgaXRlbS0+c2hvdWxkRG9TYW1lRG9jdW1lbnROYXZpZ2F0aW9uVG8oY3Vy
cmVudEl0ZW0pOworICAgIGJvb2wgc2FtZURvY3VtZW50TmF2aWdhdGlvbiA9IGN1cnJlbnRJdGVt
ICYmIGl0ZW0uc2hvdWxkRG9TYW1lRG9jdW1lbnROYXZpZ2F0aW9uVG8oY3VycmVudEl0ZW0pOwog
CiAgICAgaWYgKHNhbWVEb2N1bWVudE5hdmlnYXRpb24pCiAgICAgICAgIGxvYWRTYW1lRG9jdW1l
bnRJdGVtKGl0ZW0pOwpAQCAtMzI2MCwxMSArMzI2MCwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpy
ZXRyeUFmdGVyRmFpbGVkQ2FjaGVPbmx5TWFpblJlc291cmNlTG9hZCgpCiAgICAgQVNTRVJUKCFt
X2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSk7CiAgICAgLy8gV2Ugb25seSB1c2UgY2FjaGUtb25seSBs
b2FkcyB0byBhdm9pZCByZXN1Ym1pdHRpbmcgZm9ybXMuCiAgICAgQVNTRVJUKGlzQmFja0Zvcndh
cmRMb2FkVHlwZShtX2xvYWRUeXBlKSk7CisgICAgQVNTRVJUKGhpc3RvcnkoKS5wcm92aXNpb25h
bEl0ZW0oKSk7CiAgICAgQVNTRVJUKGhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKS0+Zm9ybURh
dGEoKSk7CiAgICAgQVNTRVJUKGhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKSA9PSBtX3JlcXVl
c3RlZEhpc3RvcnlJdGVtLmdldCgpKTsKIAogICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUgPSBt
X2xvYWRUeXBlOwotICAgIEhpc3RvcnlJdGVtKiBpdGVtID0gaGlzdG9yeSgpLnByb3Zpc2lvbmFs
SXRlbSgpOworICAgIEhpc3RvcnlJdGVtJiBpdGVtID0gKmhpc3RvcnkoKS5wcm92aXNpb25hbEl0
ZW0oKTsKIAogICAgIHN0b3BBbGxMb2FkZXJzKFNob3VsZE5vdENsZWFyUHJvdmlzaW9uYWxJdGVt
KTsKICAgICBsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKGl0ZW0sIGxvYWRUeXBlLCBNYXlOb3RB
dHRlbXB0Q2FjaGVPbmx5TG9hZEZvckZvcm1TdWJtaXNzaW9uSXRlbSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCmluZGV4IDZkNTU4MDY2NTdmMWM5MzM5YzQwZTkwMjNmNjAyYWJlOTlj
ZjRjZGIuLjA2ZmE4ZjA1YjhmMjA0MDUzNTU5YjRmNTJmOWMxZDJjNzgwNjBjNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCkBAIC0xMjUsNyArMTI1LDcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVsb2FkV2l0aE92ZXJyaWRlRW5jb2RpbmcoY29uc3QgU3Ry
aW5nJiBvdmVycmlkZUVuY29kaW5nKTsKIAogICAgIHZvaWQgb3BlbihDYWNoZWRGcmFtZUJhc2Um
KTsKLSAgICB2b2lkIGxvYWRJdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CisgICAg
dm9pZCBsb2FkSXRlbShIaXN0b3J5SXRlbSYsIEZyYW1lTG9hZFR5cGUpOwogICAgIEhpc3RvcnlJ
dGVtKiByZXF1ZXN0ZWRIaXN0b3J5SXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdGVkSGlz
dG9yeUl0ZW0uZ2V0KCk7IH0KIAogICAgIHZvaWQgcmV0cnlBZnRlckZhaWxlZENhY2hlT25seU1h
aW5SZXNvdXJjZUxvYWQoKTsKQEAgLTI5OSw4ICsyOTksOCBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBjaGVja1RpbWVyRmlyZWQoKTsKICAgICAKLSAgICB2b2lkIGxvYWRTYW1lRG9jdW1lbnRJdGVt
KEhpc3RvcnlJdGVtKik7Ci0gICAgdm9pZCBsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3Rv
cnlJdGVtKiwgRnJhbWVMb2FkVHlwZSwgRm9ybVN1Ym1pc3Npb25DYWNoZUxvYWRQb2xpY3kpOwor
ICAgIHZvaWQgbG9hZFNhbWVEb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0mKTsKKyAgICB2b2lkIGxv
YWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0mLCBGcmFtZUxvYWRUeXBlLCBGb3Jt
U3VibWlzc2lvbkNhY2hlTG9hZFBvbGljeSk7CiAgICAgCiAgICAgdm9pZCBsb2FkUHJvdmlzaW9u
YWxJdGVtRnJvbUNhY2hlZFBhZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5
Q29udHJvbGxlci5jcHAKaW5kZXggOWI4M2E4NDdkZDA1MDhhN2FhNTZkNTk4YTMxNDQ4YTY1MzUx
YjhkYS4uODMzZTU4ODRiYWEwN2IzNWIxYjM1ZTVmNGJhYzM3ZGIzOWM5ZGRhMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCkBAIC0yMzQsMTEgKzIzNCwx
MyBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCiAKIHZv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OmludmFsaWRhdGVDdXJyZW50SXRlbUNhY2hlZFBhZ2UoKQog
ewotICAgIC8vIFdoZW4gd2UgYXJlIHByZS1jb21taXQsIHRoZSBjdXJyZW50SXRlbSBpcyB3aGVy
ZSBhbnkgcGFnZSBjYWNoZSBkYXRhIHJlc2lkZXMuCi0gICAgaWYgKCFQYWdlQ2FjaGU6OnNoYXJl
ZCgpLmdldChjdXJyZW50SXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSkpCisgICAgaWYgKCFjdXJyZW50
SXRlbSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFn
ZT4gY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkudGFrZShjdXJyZW50SXRlbSgpLCBt
X2ZyYW1lLnBhZ2UoKSk7CisgICAgLy8gV2hlbiB3ZSBhcmUgcHJlLWNvbW1pdCwgdGhlIGN1cnJl
bnRJdGVtIGlzIHdoZXJlIGFueSBwYWdlIGNhY2hlIGRhdGEgcmVzaWRlcy4KKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkudGFr
ZSgqY3VycmVudEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOworICAgIGlmICghY2FjaGVkUGFnZSkK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBncm90ZXNxdWUgaGFj
ayB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQwNTkwNTk+IENyYXNoIGluIFJlbmRlckZsb3c6OmRl
dGFjaAogICAgIC8vIFNvbWVob3cgdGhlIFBhZ2VTdGF0ZSBvYmplY3QgaXMgbm90IHByb3Blcmx5
IHVwZGF0ZWQsIGFuZCBpcyBob2xkaW5nIG9udG8gYSBzdGFsZSBkb2N1bWVudC4KQEAgLTI2NSw3
ICsyNjcsNyBAQCBib29sIEhpc3RvcnlDb250cm9sbGVyOjpzaG91bGRTdG9wTG9hZGluZ0Zvckhp
c3RvcnlJdGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJdGVtKQogCiAvLyBNYWluIGZ1bm5lbCBmb3Ig
bmF2aWdhdGluZyB0byBhIHByZXZpb3VzIGxvY2F0aW9uIChiYWNrL2ZvcndhcmQsIG5vbi1zZWFy
Y2ggc25hcC1iYWNrKQogLy8gVGhpcyBpbmNsdWRlcyByZWN1cnNpb24gdG8gaGFuZGxlIGxvYWRp
bmcgaW50byBmcmFtZXNldHMgcHJvcGVybHkKLXZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OmdvVG9J
dGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCit2b2lkIEhp
c3RvcnlDb250cm9sbGVyOjpnb1RvSXRlbShIaXN0b3J5SXRlbSYgdGFyZ2V0SXRlbSwgRnJhbWVM
b2FkVHlwZSB0eXBlKQogewogICAgIEFTU0VSVCghbV9mcmFtZS50cmVlKCkucGFyZW50KCkpOwog
ICAgIApAQCAtMjc2LDEwICsyNzgsMTAgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0
ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKICAgICBQYWdl
KiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFtX2ZyYW1lLmxvYWRlcigpLmNsaWVudCgpLnNob3VsZEdvVG9IaXN0b3J5SXRl
bSh0YXJnZXRJdGVtKSkKKyAgICBpZiAoIW1fZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuc2hvdWxk
R29Ub0hpc3RvcnlJdGVtKCZ0YXJnZXRJdGVtKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmICht
X2RlZmVyc0xvYWRpbmcpIHsKLSAgICAgICAgbV9kZWZlcnJlZEl0ZW0gPSB0YXJnZXRJdGVtOwor
ICAgICAgICBtX2RlZmVycmVkSXRlbSA9ICZ0YXJnZXRJdGVtOwogICAgICAgICBtX2RlZmVycmVk
RnJhbWVMb2FkVHlwZSA9IHR5cGU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yODgsNyAr
MjkwLDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRh
cmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKICAgICAvLyAtIHBsdXMsIGl0IG9ubHkgbWFr
ZXMgc2Vuc2UgZm9yIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIG9wZXJhdGlvbiB0aHJvdWdoIHRoZSBm
cmFtZSB0cmVlLAogICAgIC8vIGFzIG9wcG9zZWQgdG8gaGFwcGVuaW5nIGZvciBzb21lL29uZSBv
ZiB0aGUgcGFnZSBjb21taXRzIHRoYXQgbWlnaHQgaGFwcGVuIHNvb24KICAgICBSZWZQdHI8SGlz
dG9yeUl0ZW0+IGN1cnJlbnRJdGVtID0gcGFnZS0+YmFja0ZvcndhcmQoKS5jdXJyZW50SXRlbSgp
OwotICAgIHBhZ2UtPmJhY2tGb3J3YXJkKCkuc2V0Q3VycmVudEl0ZW0odGFyZ2V0SXRlbSk7Cisg
ICAgcGFnZS0+YmFja0ZvcndhcmQoKS5zZXRDdXJyZW50SXRlbSgmdGFyZ2V0SXRlbSk7CiAgICAg
bV9mcmFtZS5sb2FkZXIoKS5jbGllbnQoKS51cGRhdGVHbG9iYWxIaXN0b3J5SXRlbUZvclBhZ2Uo
KTsKIAogICAgIC8vIEZpcnN0IHNldCB0aGUgcHJvdmlzaW9uYWwgaXRlbSBvZiBhbnkgZnJhbWVz
IHRoYXQgYXJlIG5vdCBhY3R1YWxseSBuYXZpZ2F0aW5nLgpAQCAtMzA1LDggKzMwNyw4IEBAIHZv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBkZWZlcikKIHsKICAg
ICBtX2RlZmVyc0xvYWRpbmcgPSBkZWZlcjsKICAgICBpZiAoIWRlZmVyICYmIG1fZGVmZXJyZWRJ
dGVtKSB7Ci0gICAgICAgIGdvVG9JdGVtKG1fZGVmZXJyZWRJdGVtLmdldCgpLCBtX2RlZmVycmVk
RnJhbWVMb2FkVHlwZSk7Ci0gICAgICAgIG1fZGVmZXJyZWRJdGVtID0gMDsKKyAgICAgICAgZ29U
b0l0ZW0oKm1fZGVmZXJyZWRJdGVtLCBtX2RlZmVycmVkRnJhbWVMb2FkVHlwZSk7CisgICAgICAg
IG1fZGVmZXJyZWRJdGVtID0gbnVsbHB0cjsKICAgICB9CiB9CiAKQEAgLTMzNCw3ICszMzYsNyBA
QCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JSZWxvYWQoKQogI2VuZGlmCiAKICAg
ICBpZiAobV9jdXJyZW50SXRlbSkgewotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92
ZShtX2N1cnJlbnRJdGVtLmdldCgpKTsKKyAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1v
dmUoKm1fY3VycmVudEl0ZW0pOwogICAgIAogICAgICAgICBpZiAobV9mcmFtZS5sb2FkZXIoKS5s
b2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGU6OlJlbG9hZCB8fCBtX2ZyYW1lLmxvYWRlcigpLmxv
YWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZTo6UmVsb2FkRnJvbU9yaWdpbikKICAgICAgICAgICAg
IHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJlbnRJdGVtLmdldCgp
KTsKQEAgLTQ5OSw3ICs1MDEsNyBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVV
cGRhdGVGb3JDb21taXQoKQogICAgIC8vIEZvciBlYWNoIGZyYW1lIHRoYXQgYWxyZWFkeSBoYWQg
dGhlIGNvbnRlbnQgdGhlIGl0ZW0gcmVxdWVzdGVkIChiYXNlZCBvbgogICAgIC8vIChhIG1hdGNo
aW5nIFVSTCBhbmQgZnJhbWUgdHJlZSBzbmFwc2hvdCksIGp1c3QgcmVzdG9yZSB0aGUgc2Nyb2xs
IHBvc2l0aW9uLgogICAgIC8vIFNhdmUgZm9ybSBzdGF0ZSAod29ya3MgZnJvbSBjdXJyZW50SXRl
bSwgc2luY2UgbV9mcmFtZUxvYWRDb21wbGV0ZSBpcyB0cnVlKQotICAgIGlmIChtX2N1cnJlbnRJ
dGVtICYmIGl0ZW1zQXJlQ2xvbmVzKG1fY3VycmVudEl0ZW0uZ2V0KCksIG1fcHJvdmlzaW9uYWxJ
dGVtLmdldCgpKSkgeworICAgIGlmIChtX2N1cnJlbnRJdGVtICYmIGl0ZW1zQXJlQ2xvbmVzKCpt
X2N1cnJlbnRJdGVtLCBtX3Byb3Zpc2lvbmFsSXRlbS5nZXQoKSkpIHsKICAgICAgICAgQVNTRVJU
KG1fZnJhbWVMb2FkQ29tcGxldGUpOwogICAgICAgICBzYXZlRG9jdW1lbnRTdGF0ZSgpOwogICAg
ICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SXRlbS5n
ZXQoKSk7CkBAIC03MDcsMTcgKzcwOSwxNSBAQCBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBIaXN0
b3J5Q29udHJvbGxlcjo6Y3JlYXRlSXRlbVRyZWUoRnJhbWUmIHRhcmdldEZyYW1lLCBibwogLy8g
dHJhY2tpbmcgd2hldGhlciBlYWNoIGZyYW1lIGFscmVhZHkgaGFzIHRoZSBjb250ZW50IHRoZSBp
dGVtIHJlcXVlc3RzLiAgSWYgdGhlcmUgaXMKIC8vIGEgbWF0Y2gsIHdlIHNldCB0aGUgcHJvdmlz
aW9uYWwgaXRlbSBhbmQgcmVjdXJzZS4gIE90aGVyd2lzZSB3ZSB3aWxsIHJlbG9hZCB0aGF0CiAv
LyBmcmFtZSBhbmQgYWxsIGl0cyBraWRzIGluIHJlY3Vyc2l2ZUdvVG9JdGVtLgotdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVtKEhpc3RvcnlJdGVtKiBp
dGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0ZW0pCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZWN1
cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0sIEhpc3RvcnlJdGVtKiBm
cm9tSXRlbSkKIHsKLSAgICBBU1NFUlQoaXRlbSk7Ci0KICAgICBpZiAoIWl0ZW1zQXJlQ2xvbmVz
KGl0ZW0sIGZyb21JdGVtKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2V0IHByb3Zpc2lv
bmFsIGl0ZW0sIHdoaWNoIHdpbGwgYmUgY29tbWl0dGVkIGluIHJlY3Vyc2l2ZVVwZGF0ZUZvckNv
bW1pdC4KLSAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9IGl0ZW07CisgICAgbV9wcm92aXNpb25hbEl0
ZW0gPSAmaXRlbTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGRJdGVtIDogaXRlbS0+Y2hp
bGRyZW4oKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGRJdGVtIDogaXRlbS5jaGlsZHJl
bigpKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgY2hpbGRGcmFtZU5hbWUgPSBjaGlsZEl0ZW0t
PnRhcmdldCgpOwogCiAgICAgICAgIEhpc3RvcnlJdGVtKiBmcm9tQ2hpbGRJdGVtID0gZnJvbUl0
ZW0tPmNoaWxkSXRlbVdpdGhUYXJnZXQoY2hpbGRGcmFtZU5hbWUpOwpAQCAtNzI1LDM0ICs3MjUs
MzIgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVt
KEhpc3RvcnlJdGVtKiBpdGVtLCBIaXN0b3J5SXQKICAgICAgICAgRnJhbWUqIGNoaWxkRnJhbWUg
PSBtX2ZyYW1lLnRyZWUoKS5jaGlsZChjaGlsZEZyYW1lTmFtZSk7CiAgICAgICAgIEFTU0VSVChj
aGlsZEZyYW1lKTsKIAotICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkucmVj
dXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVtKGNoaWxkSXRlbS5nZXQoKSwgZnJvbUNoaWxkSXRlbSk7
CisgICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5yZWN1cnNpdmVTZXRQcm92
aXNpb25hbEl0ZW0oKmNoaWxkSXRlbSwgZnJvbUNoaWxkSXRlbSk7CiAgICAgfQogfQogCiAvLyBX
ZSBub3cgdHJhdmVyc2UgdGhlIGZyYW1lIHRyZWUgYW5kIGl0ZW0gdHJlZSBhIHNlY29uZCB0aW1l
LCBsb2FkaW5nIGZyYW1lcyB0aGF0CiAvLyBkbyBoYXZlIHRoZSBjb250ZW50IHRoZSBpdGVtIHJl
cXVlc3RzLgotdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9y
eUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQor
dm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0mIGl0
ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQogewotICAgIEFT
U0VSVChpdGVtKTsKLQogICAgIGlmICghaXRlbXNBcmVDbG9uZXMoaXRlbSwgZnJvbUl0ZW0pKSB7
CiAgICAgICAgIG1fZnJhbWUubG9hZGVyKCkubG9hZEl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICAvLyBKdXN0IGl0ZXJhdGUgb3ZlciB0aGUgcmVzdCwgbG9v
a2luZyBmb3IgZnJhbWVzIHRvIG5hdmlnYXRlLgotICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGRJ
dGVtIDogaXRlbS0+Y2hpbGRyZW4oKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGRJdGVt
IDogaXRlbS5jaGlsZHJlbigpKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgY2hpbGRGcmFtZU5h
bWUgPSBjaGlsZEl0ZW0tPnRhcmdldCgpOwogCiAgICAgICAgIEhpc3RvcnlJdGVtKiBmcm9tQ2hp
bGRJdGVtID0gZnJvbUl0ZW0tPmNoaWxkSXRlbVdpdGhUYXJnZXQoY2hpbGRGcmFtZU5hbWUpOwog
ICAgICAgICBBU1NFUlQoZnJvbUNoaWxkSXRlbSk7CiAgICAgICAgIEZyYW1lKiBjaGlsZEZyYW1l
ID0gbV9mcmFtZS50cmVlKCkuY2hpbGQoY2hpbGRGcmFtZU5hbWUpOwogICAgICAgICBBU1NFUlQo
Y2hpbGRGcmFtZSk7Ci0gICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5yZWN1
cnNpdmVHb1RvSXRlbShjaGlsZEl0ZW0uZ2V0KCksIGZyb21DaGlsZEl0ZW0sIHR5cGUpOworICAg
ICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkucmVjdXJzaXZlR29Ub0l0ZW0oKmNo
aWxkSXRlbSwgZnJvbUNoaWxkSXRlbSwgdHlwZSk7CiAgICAgfQogfQogCi1ib29sIEhpc3RvcnlD
b250cm9sbGVyOjppdGVtc0FyZUNsb25lcyhIaXN0b3J5SXRlbSogaXRlbTEsIEhpc3RvcnlJdGVt
KiBpdGVtMikgY29uc3QKK2Jvb2wgSGlzdG9yeUNvbnRyb2xsZXI6Oml0ZW1zQXJlQ2xvbmVzKEhp
c3RvcnlJdGVtJiBpdGVtMSwgSGlzdG9yeUl0ZW0qIGl0ZW0yKSBjb25zdAogewogICAgIC8vIElm
IHRoZSBpdGVtIHdlJ3JlIGdvaW5nIHRvIGlzIGEgY2xvbmUgb2YgdGhlIGl0ZW0gd2UncmUgYXQs
IHRoZW4gd2UgZG8KICAgICAvLyBub3QgbmVlZCB0byBsb2FkIGl0IGFnYWluLiAgVGhlIGN1cnJl
bnQgZnJhbWUgdHJlZSBhbmQgdGhlIGZyYW1lIHRyZWUKQEAgLTc2MSwxMiArNzU5LDExIEBAIGJv
b2wgSGlzdG9yeUNvbnRyb2xsZXI6Oml0ZW1zQXJlQ2xvbmVzKEhpc3RvcnlJdGVtKiBpdGVtMSwg
SGlzdG9yeUl0ZW0qIGl0ZW0yKSBjCiAgICAgLy8gYSByZWxvYWQuICBUaHVzLCBpZiBpdGVtMSBh
bmQgaXRlbTIgYXJlIHRoZSBzYW1lLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhCiAgICAgLy8gbmV3IGRv
Y3VtZW50IGFuZCBzaG91bGQgbm90IGNvbnNpZGVyIHRoZW0gY2xvbmVzLgogICAgIC8vIChTZWUg
aHR0cDovL3dlYmtpdC5vcmcvYi8zNTUzMiBmb3IgZGV0YWlscy4pCi0gICAgcmV0dXJuIGl0ZW0x
Ci0gICAgICAgICYmIGl0ZW0yCi0gICAgICAgICYmIGl0ZW0xICE9IGl0ZW0yCi0gICAgICAgICYm
IGl0ZW0xLT5pdGVtU2VxdWVuY2VOdW1iZXIoKSA9PSBpdGVtMi0+aXRlbVNlcXVlbmNlTnVtYmVy
KCkKLSAgICAgICAgJiYgY3VycmVudEZyYW1lc01hdGNoSXRlbShpdGVtMSkKLSAgICAgICAgJiYg
aXRlbTItPmhhc1NhbWVGcmFtZXMoaXRlbTEpOworICAgIHJldHVybiBpdGVtMgorICAgICAgICAm
JiAmaXRlbTEgIT0gaXRlbTIKKyAgICAgICAgJiYgaXRlbTEuaXRlbVNlcXVlbmNlTnVtYmVyKCkg
PT0gaXRlbTItPml0ZW1TZXF1ZW5jZU51bWJlcigpCisgICAgICAgICYmIGN1cnJlbnRGcmFtZXNN
YXRjaEl0ZW0oJml0ZW0xKQorICAgICAgICAmJiBpdGVtMi0+aGFzU2FtZUZyYW1lcygmaXRlbTEp
OwogfQogCiAvLyBIZWxwZXIgbWV0aG9kIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjdXJy
ZW50IGZyYW1lIHRyZWUgbWF0Y2hlcyBnaXZlbiBoaXN0b3J5IGl0ZW0ncy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKaW5kZXggNDMxZjMwZTBhY2Y4YTlhNjNjZjk1
ZGM0NmQ3MGFkOTIwMTViMTc4NS4uMWI0MGE4MGIwZTMyNzE4YjMzZWZiNDIyYWFmZTY3NmZiYzNj
N2ZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmgKQEAgLTkz
LDE5ICs5MywxOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYWdlOwog
ICAgIGJvb2wgc2hvdWxkU3RvcExvYWRpbmdGb3JIaXN0b3J5SXRlbShIaXN0b3J5SXRlbSopIGNv
bnN0OwotICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAg
ICB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJdGVtJiwgRnJhbWVMb2FkVHlwZSk7CiAKICAgICB2b2lk
IGluaXRpYWxpemVJdGVtKEhpc3RvcnlJdGVtKik7CiAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRl
bT4gY3JlYXRlSXRlbSgpOwogICAgIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNyZWF0ZUl0ZW1U
cmVlKEZyYW1lJiB0YXJnZXRGcmFtZSwgYm9vbCBjbGlwQXRUYXJnZXQpOwogCi0gICAgdm9pZCBy
ZWN1cnNpdmVTZXRQcm92aXNpb25hbEl0ZW0oSGlzdG9yeUl0ZW0qLCBIaXN0b3J5SXRlbSopOwot
ICAgIHZvaWQgcmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBIaXN0b3J5SXRlbSosIEZy
YW1lTG9hZFR5cGUpOworICAgIHZvaWQgcmVjdXJzaXZlU2V0UHJvdmlzaW9uYWxJdGVtKEhpc3Rv
cnlJdGVtJiwgSGlzdG9yeUl0ZW0qKTsKKyAgICB2b2lkIHJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3Rv
cnlJdGVtJiwgSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKICAgICBib29sIGlzUmVwbGFj
ZUxvYWRUeXBlV2l0aFByb3Zpc2lvbmFsSXRlbShGcmFtZUxvYWRUeXBlKTsKICAgICBib29sIGlz
UmVsb2FkVHlwZVdpdGhQcm92aXNpb25hbEl0ZW0oRnJhbWVMb2FkVHlwZSk7CiAgICAgdm9pZCBy
ZWN1cnNpdmVVcGRhdGVGb3JDb21taXQoKTsKICAgICB2b2lkIHJlY3Vyc2l2ZVVwZGF0ZUZvclNh
bWVEb2N1bWVudE5hdmlnYXRpb24oKTsKLSAgICBib29sIGl0ZW1zQXJlQ2xvbmVzKEhpc3RvcnlJ
dGVtKiwgSGlzdG9yeUl0ZW0qKSBjb25zdDsKKyAgICBib29sIGl0ZW1zQXJlQ2xvbmVzKEhpc3Rv
cnlJdGVtJiwgSGlzdG9yeUl0ZW0qKSBjb25zdDsKICAgICBib29sIGN1cnJlbnRGcmFtZXNNYXRj
aEl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKICAgICB2b2lkIHVwZGF0ZUJhY2tGb3J3YXJkTGlz
dENsaXBwZWRBdFRhcmdldChib29sIGRvQ2xpcCk7CiAgICAgdm9pZCB1cGRhdGVDdXJyZW50SXRl
bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tl
eXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuY3BwCmlu
ZGV4IDk1OWM0MTUxY2MyM2ZjYTM4NzAzNDI1ODdmOGQ2NjBlZjQ4OGFjYWMuLjFkMmRmNzhkZGY4
Y2VjYjhmNGVjNGNlNmJmZjA4NDhjYzNjZjEyZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAKQEAgLTM4OCw3ICszODgsNyBAQCBTdHJpbmcgRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpwcnVuZWREdWVUb01lbW9yeVByZXNzdXJlS2V5KCkKICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJwcnVuZWQubWVtb3J5UHJlc3N1cmUiKTsKIH0KIAotU3RyaW5n
IERpYWdub3N0aWNMb2dnaW5nS2V5czo6cHJ1bmVkRHVlVG9DYXBhY2l0eVJlYWNoZWQoKQorU3Ry
aW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cHJ1bmVkRHVlVG9NYXhTaXplUmVhY2hlZCgpCiB7
CiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicHJ1bmVkLmNhcGFjaXR5UmVhY2hlZCIpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmgKaW5kZXggNmRmNTI0
ZGUwNGZjZjk5NDU2M2ZjMDNjMzgzMTM2YmVjZGYwNmUyOC4uNWU1NGFmZjBiYzUyZTUzYzg4ZWVm
MGM1ZmJmODE4OWM4OWMyYjVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFn
bm9zdGljTG9nZ2luZ0tleXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNM
b2dnaW5nS2V5cy5oCkBAIC03Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5n
IHBsYXllZEtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luTG9hZGVkS2V5KCk7CiAgICAg
c3RhdGljIFN0cmluZyBwbHVnaW5Mb2FkaW5nRmFpbGVkS2V5KCk7Ci0gICAgc3RhdGljIFN0cmlu
ZyBwcnVuZWREdWVUb0NhcGFjaXR5UmVhY2hlZCgpOworICAgIHN0YXRpYyBTdHJpbmcgcHJ1bmVk
RHVlVG9NYXhTaXplUmVhY2hlZCgpOwogICAgIHN0YXRpYyBTdHJpbmcgcHJ1bmVkRHVlVG9NZW1v
cnlQcmVzc3VyZUtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgcHJ1bmVkRHVlVG9Qcm9jZXNzU3Vz
cGVuZGVkKCk7CiAgICAgc3RhdGljIFN0cmluZyBxdWlya1JlZGlyZWN0Q29taW5nS2V5KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCmluZGV4IDgzMTRjOWE0ZTNjZWJkYzZiNTdiNWQzMDRmMDQ0ZmEyODZm
YjY2MTAuLjc4Y2IxOTM1MzM4OWI3Njg4ZTQ3YjViNWY2YjJmNTAwMGQwNDdlOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC05ODksNyArOTg5LDcgQEAgdm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRl
eHRab29tRmFjdG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpvb21GYWN0b3IK
ICAgICB9CiAKICAgICBpZiAoaXNNYWluRnJhbWUoKSkKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFy
ZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMocGFnZSk7CisgICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCpwYWdlKTsKIH0KIAogZmxv
YXQgRnJhbWU6OmZyYW1lU2NhbGVGYWN0b3IoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXgg
N2M1MzVkMDU3MjEyY2JjNGFlN2Y3ZDY0MjMwZjI3ZmVjYTQ2NTU2OS4uN2Q5N2FlZjBlMmJhMjIy
ZTU1OWU1Y2JmOGRlYjI4NmRhMmRlNzA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC00MzAsMTMg
KzQzMCwxMyBAQCB2b2lkIFBhZ2U6OnNldE9wZW5lZEJ5RE9NKCkKICAgICBtX29wZW5lZEJ5RE9N
ID0gdHJ1ZTsKIH0KIAotdm9pZCBQYWdlOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJh
bWVMb2FkVHlwZSB0eXBlKQordm9pZCBQYWdlOjpnb1RvSXRlbShIaXN0b3J5SXRlbSYgaXRlbSwg
RnJhbWVMb2FkVHlwZSB0eXBlKQogewogICAgIC8vIHN0b3BBbGxMb2FkZXJzIG1heSBlbmQgdXAg
cnVubmluZyBvbmxvYWQgaGFuZGxlcnMsIHdoaWNoIGNvdWxkIGNhdXNlIGZ1cnRoZXIgaGlzdG9y
eSB0cmF2ZXJzYWxzIHRoYXQgbWF5IGxlYWQgdG8gdGhlIHBhc3NlZCBpbiBIaXN0b3J5SXRlbQog
ICAgIC8vIGJlaW5nIGRlcmVmKCktZWQuIE1ha2Ugc3VyZSB3ZSBjYW4gc3RpbGwgdXNlIGl0IHdp
dGggSGlzdG9yeUNvbnRyb2xsZXI6OmdvVG9JdGVtIGxhdGVyLgotICAgIFJlZlB0cjxIaXN0b3J5
SXRlbT4gcHJvdGVjdG9yKGl0ZW0pOworICAgIFJlZjxIaXN0b3J5SXRlbT4gcHJvdGVjdG9yKGl0
ZW0pOwogCi0gICAgaWYgKG1fbWFpbkZyYW1lLT5sb2FkZXIoKS5oaXN0b3J5KCkuc2hvdWxkU3Rv
cExvYWRpbmdGb3JIaXN0b3J5SXRlbShpdGVtKSkKKyAgICBpZiAobV9tYWluRnJhbWUtPmxvYWRl
cigpLmhpc3RvcnkoKS5zaG91bGRTdG9wTG9hZGluZ0Zvckhpc3RvcnlJdGVtKCZpdGVtKSkKICAg
ICAgICAgbV9tYWluRnJhbWUtPmxvYWRlcigpLnN0b3BBbGxMb2FkZXJzKCk7CiAKICAgICBtX21h
aW5GcmFtZS0+bG9hZGVyKCkuaGlzdG9yeSgpLmdvVG9JdGVtKGl0ZW0sIHR5cGUpOwpAQCAtODM5
LDkgKzgzOSw5IEBAIHZvaWQgUGFnZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVG
YWN0b3IpCiAgICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiAKICAgICBtYWlu
RnJhbWUoKS5kZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKLSAgICBQYWdlQ2FjaGU6
OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZCh0aGlzKTsKKyAgICBQYWdl
Q2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZCgqdGhpcyk7CiAK
LSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYyh0aGlz
KTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygq
dGhpcyk7CiAgICAgR3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNl
cygpOwogCiAgICAgbWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdl
RGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIFBhZ2U6OnNldFBh
Z2luYXRpb24oY29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlvbikKICAgICBtX3BhZ2luYXRpb24g
PSBwYWdpbmF0aW9uOwogCiAgICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Ci0g
ICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGModGhpcyk7
CisgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRo
aXMpOwogfQogCiB1bnNpZ25lZCBQYWdlOjpwYWdlQ291bnQoKSBjb25zdApAQCAtMTY2MSw3ICsx
NjYxLDcgQEAgdm9pZCBQYWdlOjpzZXRWaXNpdGVkTGlua1N0b3JlKFJlZjxWaXNpdGVkTGlua1N0
b3JlPiYmIHZpc2l0ZWRMaW5rU3RvcmUpCiAgICAgbV92aXNpdGVkTGlua1N0b3JlLT5hZGRQYWdl
KCp0aGlzKTsKIAogICAgIGludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpOwotICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKHRoaXMpOworICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsKIH0K
IAogU2Vzc2lvbklEIFBhZ2U6OnNlc3Npb25JRCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDI4
YzA0ZDhjN2Y3YjYyNGZhMTMzNGFhNTdjMzVmMTRiZjJlMWUwYjkuLjdmY2Y3YWI2YzgwNTU2YTFj
OWNlNDFmNjBiMzllYjY3NDA5NmUyNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0xNTAsNyArMTUwLDcg
QEAgcHVibGljOgogICAgIGJvb2wgb3BlbmVkQnlET00oKSBjb25zdDsKICAgICB2b2lkIHNldE9w
ZW5lZEJ5RE9NKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdvVG9JdGVtKEhpc3RvcnlJ
dGVtKiwgRnJhbWVMb2FkVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnb1RvSXRlbShI
aXN0b3J5SXRlbSYsIEZyYW1lTG9hZFR5cGUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRHcm91cE5hbWUoY29uc3QgU3RyaW5nJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgU3Ry
aW5nJiBncm91cE5hbWUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZDc3
MzlkMWIxOWFjNjI3NDUxMThmZmFiNTg1ZjRkMjMxODM0NDQ5MC4uOTU2YjQ0YzRiN2Y4MmE3M2Rk
YjIxODM1MTk2MGMxMzIwMWFmYzhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTUx
OSwxMiArNTE5LDggQEAgdm9pZCBTZXR0aW5nczo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQ
YWdlQ2FjaGUpCiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgh
bV91c2VzUGFnZUNhY2hlKSB7Ci0gICAgICAgIGludCBmaXJzdCA9IC1tX3BhZ2UtPmJhY2tGb3J3
YXJkKCkuYmFja0NvdW50KCk7Ci0gICAgICAgIGludCBsYXN0ID0gbV9wYWdlLT5iYWNrRm9yd2Fy
ZCgpLmZvcndhcmRDb3VudCgpOwotICAgICAgICBmb3IgKGludCBpID0gZmlyc3Q7IGkgPD0gbGFz
dDsgaSsrKQotICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUobV9wYWdlLT5i
YWNrRm9yd2FyZCgpLml0ZW1BdEluZGV4KGkpKTsKLSAgICB9CisgICAgaWYgKCFtX3VzZXNQYWdl
Q2FjaGUpCisgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1
bmluZ1JlYXNvbjo6Tm9uZSk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldFNjcmVlbkZvbnRTdWJz
dGl0dXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCmluZGV4IDkzNzhhYjY5MzZlM2ExNjMyZjgw
OWVhMzdkNTFjYmFiYWJiNzM1MDcuLmI1MDJkZWIzMGVlM2VjNGY1OWU2NDRkODk4YmM2MDc1YzFk
M2U3ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJl
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVI
YW5kbGVyLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5kbGVy
OjpyZWxlYXNlQ3JpdGljYWxNZW1vcnkoKQogICAgICAgICBSZWxpZWZMb2dnZXIgbG9nKCJFbXB0
eSB0aGUgUGFnZUNhY2hlIik7CiAgICAgICAgIC8vIFJpZ2h0IG5vdywgdGhlIG9ubHkgcmVhc29u
IHdlIGNhbGwgcmVsZWFzZSBjcml0aWNhbCBtZW1vcnkgd2hpbGUgbm90IHVuZGVyIG1lbW9yeSBw
cmVzc3VyZSBpcyBpZiB0aGUgcHJvY2VzcyBpcyBhYm91dCB0byBiZSBzdXNwZW5kZWQuCiAgICAg
ICAgIFBydW5pbmdSZWFzb24gcHJ1bmluZ1JlYXNvbiA9IG1lbW9yeVByZXNzdXJlSGFuZGxlcigp
LmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpID8gUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUg
OiBQcnVuaW5nUmVhc29uOjpQcm9jZXNzU3VzcGVuZGVkOwotICAgICAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLnBydW5lVG9DYXBhY2l0eU5vdygwLCBwcnVuaW5nUmVhc29uKTsKKyAgICAgICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdygwLCBwcnVuaW5nUmVhc29uKTsKICAgICB9
CiAKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tG
b3J3YXJkTGlzdC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRM
aXN0Lm1tCmluZGV4IDg3NTdjOGMyMWUwM2M2YjRlZTZiOTU1MWU0OTZlZDRkYjU3ZmZkY2QuLjZi
NDUwMDIxYzQyNzg2MjYzNjMyOTEzNjMxMDI3NzJjMjVjMTJlMWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCkBAIC0zNTUsNyArMzU1LDcg
QEAgLSAodm9pZClzZXRQYWdlQ2FjaGVTaXplOihOU1VJbnRlZ2VyKXNpemUKIAogLSAoTlNVSW50
ZWdlcilwYWdlQ2FjaGVTaXplCiB7Ci0gICAgcmV0dXJuIFtraXQoY29yZShzZWxmKS0+cGFnZSgp
KSB1c2VzUGFnZUNhY2hlXSA/IFBhZ2VDYWNoZTo6c2hhcmVkKCkuY2FwYWNpdHkoKSA6IDA7Cisg
ICAgcmV0dXJuIFtraXQoY29yZShzZWxmKS0+cGFnZSgpKSB1c2VzUGFnZUNhY2hlXSA/IFBhZ2VD
YWNoZTo6c2hhcmVkKCkubWF4U2l6ZSgpIDogMDsKIH0KIAogLSAoaW50KWJhY2tMaXN0Q291bnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA5MGJmMDZlZGVjNDQzMGE5ODMw
ZTNmZDM2MmM2NWViNGM3ZWQyMzZkLi43OTUyZjdhMmIyNWE5Zjk2NTY5NzRjYjk5MmI0NzZlYmU0
ZTFlM2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xOTk3LDcgKzE5
OTcsNyBAQCAtICh2b2lkKV9sb2FkQmFja0ZvcndhcmRMaXN0RnJvbU90aGVyVmlldzooV2ViVmll
dyAqKW90aGVyVmlldwogICAgIGlmICghb3RoZXJCYWNrRm9yd2FyZENsaWVudC0+Y3VycmVudEl0
ZW0oKSkKICAgICAgICAgcmV0dXJuOyAvLyBlbXB0eSBiYWNrIGZvcndhcmQgbGlzdCwgYmFpbAog
ICAgIAotICAgIEhpc3RvcnlJdGVtKiBuZXdJdGVtVG9Hb1RvID0gMDsKKyAgICBIaXN0b3J5SXRl
bSogbmV3SXRlbVRvR29UbyA9IG51bGxwdHI7CiAKICAgICBpbnQgbGFzdEl0ZW1JbmRleCA9IG90
aGVyQmFja0ZvcndhcmRDbGllbnQtPmZvcndhcmRMaXN0Q291bnQoKTsKICAgICBmb3IgKGludCBp
ID0gLW90aGVyQmFja0ZvcndhcmRDbGllbnQtPmJhY2tMaXN0Q291bnQoKTsgaSA8PSBsYXN0SXRl
bUluZGV4OyArK2kpIHsKQEAgLTIwMTQsNyArMjAxNCw3IEBAIC0gKHZvaWQpX2xvYWRCYWNrRm9y
d2FyZExpc3RGcm9tT3RoZXJWaWV3OihXZWJWaWV3ICopb3RoZXJWaWV3CiAgICAgfQogICAgIAog
ICAgIEFTU0VSVChuZXdJdGVtVG9Hb1RvKTsKLSAgICBfcHJpdmF0ZS0+cGFnZS0+Z29Ub0l0ZW0o
bmV3SXRlbVRvR29UbywgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKKyAgICBf
cHJpdmF0ZS0+cGFnZS0+Z29Ub0l0ZW0oKm5ld0l0ZW1Ub0dvVG8sIEZyYW1lTG9hZFR5cGU6Oklu
ZGV4ZWRCYWNrRm9yd2FyZCk7CiB9CiAKIC0gKHZvaWQpX3NldEZvcm1EZWxlZ2F0ZTogKGlkPFdl
YkZvcm1EZWxlZ2F0ZT4pZGVsZWdhdGUKQEAgLTU2NDcsNyArNTY0Nyw4IEBAIC0gKEJPT0wpZ29U
b0JhY2tGb3J3YXJkSXRlbTooV2ViSGlzdG9yeUl0ZW0gKilpdGVtCiAgICAgaWYgKCFfcHJpdmF0
ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuIE5POwogCi0gICAgX3ByaXZhdGUtPnBhZ2UtPmdvVG9J
dGVtKGNvcmUoaXRlbSksIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAg
QVNTRVJUKGl0ZW0pOworICAgIF9wcml2YXRlLT5wYWdlLT5nb1RvSXRlbSgqY29yZShpdGVtKSwg
RnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKICAgICByZXR1cm4gWUVTOwogfQog
CkBAIC03NzQyLDcgKzc3NDMsNyBAQCArICh2b2lkKV9zZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1v
ZGVsKWNhY2hlTW9kZWwKICAgICB1bnNpZ25lZCBjYWNoZU1heERlYWRDYXBhY2l0eSA9IDA7CiAg
ICAgYXV0byBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsID0gc3RkOjpjaHJvbm86OnNl
Y29uZHMgeyAwIH07CiAKLSAgICB1bnNpZ25lZCBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAg
dW5zaWduZWQgcGFnZUNhY2hlU2l6ZSA9IDA7CiAKICAgICBOU1VJbnRlZ2VyIG5zdXJsQ2FjaGVN
ZW1vcnlDYXBhY2l0eSA9IDA7CiAgICAgTlNVSW50ZWdlciBuc3VybENhY2hlRGlza0NhcGFjaXR5
ID0gMDsKQEAgLTc3NTMsNyArNzc1NCw3IEBAICsgKHZvaWQpX3NldENhY2hlTW9kZWw6KFdlYkNh
Y2hlTW9kZWwpY2FjaGVNb2RlbAogICAgIHN3aXRjaCAoY2FjaGVNb2RlbCkgewogICAgIGNhc2Ug
V2ViQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOiB7CiAgICAgICAgIC8vIFBhZ2UgY2FjaGUgY2Fw
YWNpdHkgKGluIHBhZ2VzKQotICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgICAg
IHBhZ2VDYWNoZVNpemUgPSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVz
IChpbiBieXRlcykKICAgICAgICAgaWYgKG1lbVNpemUgPj0gNDA5NikKQEAgLTc3OTAsMTMgKzc3
OTEsMTMgQEAgKyAodm9pZClfc2V0Q2FjaGVNb2RlbDooV2ViQ2FjaGVNb2RlbCljYWNoZU1vZGVs
CiAgICAgY2FzZSBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyOiB7CiAgICAgICAgIC8vIFBh
Z2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2VzKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAxMDI0
KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAzOworICAgICAgICAgICAgcGFnZUNh
Y2hlU2l6ZSA9IDM7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gNTEyKQotICAgICAgICAg
ICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDI7
CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0gMjU2KQotICAgICAgICAgICAgcGFnZUNhY2hl
Q2FwYWNpdHkgPSAxOworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDE7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgICAgIHBhZ2VD
YWNoZVNpemUgPSAwOwogCiAgICAgICAgIC8vIE9iamVjdCBjYWNoZSBjYXBhY2l0aWVzIChpbiBi
eXRlcykKICAgICAgICAgaWYgKG1lbVNpemUgPj0gNDA5NikKQEAgLTc4NDQsMjIgKzc4NDUsMjIg
QEAgKyAodm9pZClfc2V0Q2FjaGVNb2RlbDooV2ViQ2FjaGVNb2RlbCljYWNoZU1vZGVsCiAgICAg
ICAgIC8vIFBhZ2UgY2FjaGUgY2FwYWNpdHkgKGluIHBhZ2VzKQogICAgICAgICAvLyAoUmVzZWFy
Y2ggaW5kaWNhdGVzIHRoYXQgdmFsdWUgLyBwYWdlIGRyb3BzIHN1YnN0YW50aWFsbHkgYWZ0ZXIg
MyBwYWdlcy4pCiAgICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCi0gICAgICAgICAgICBwYWdl
Q2FjaGVDYXBhY2l0eSA9IDU7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gNTsKICAgICAg
ICAgZWxzZSBpZiAobWVtU2l6ZSA+PSAxMDI0KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNp
dHkgPSA0OworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDQ7CiAgICAgICAgIGVsc2UgaWYg
KG1lbVNpemUgPj0gNTEyKQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAzOworICAg
ICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDM7CiAgICAgICAgIGVsc2UgaWYgKG1lbVNpemUgPj0g
MjU2KQotICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOworICAgICAgICAgICAgcGFn
ZUNhY2hlU2l6ZSA9IDI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFj
aXR5ID0gMTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAxOwogCiAjaWYgUExBVEZPUk0o
SU9TKQogICAgICAgICAvLyBDYWNoZSBwYWdlIGxlc3MgYWdncmVzc2l2ZWx5IGluIGlPUyB0byBy
ZWR1Y2UgdGhlIGNoYW5jZSBvZiBiZWluZyBqZXR0aXNvbmVkLgogICAgICAgICAvLyBGSVhNRSAo
PHJkYXI6Ly9wcm9ibGVtLzExNzc5ODQ2Pik6IEF2b2lkaW5nIGpldHRpc29uaW5nIHNob3VsZCBu
b3QgaGF2ZSB0byByZXF1aXJlIHJlZHVjaW5nIHRoZSBwYWdlIGNhY2hlIGNhcGFjaXR5LgogICAg
ICAgICAvLyBSZWR1Y2luZyB0aGUgY2FwYWNpdHkgYnkgMSByZWR1Y2VzIG92ZXJhbGwgYmFjay1m
b3J3YXJkIHBlcmZvcm1hbmNlLgotICAgICAgICBpZiAocGFnZUNhY2hlQ2FwYWNpdHkgPiAwKQot
ICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgLT0gMTsKKyAgICAgICAgaWYgKHBhZ2VDYWNo
ZVNpemUgPiAwKQorICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSAtPSAxOwogI2VuZGlmCiAKICAg
ICAgICAgLy8gT2JqZWN0IGNhY2hlIGNhcGFjaXRpZXMgKGluIGJ5dGVzKQpAQCAtNzkzNSw3ICs3
OTM2LDcgQEAgKyAodm9pZClfc2V0Q2FjaGVNb2RlbDooV2ViQ2FjaGVNb2RlbCljYWNoZU1vZGVs
CiAKICAgICBtZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2FwYWNpdHks
IGNhY2hlTWF4RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIG1lbW9yeUNh
Y2hlKCkuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFE
ZWxldGlvbkludGVydmFsKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldENhcGFjaXR5KHBh
Z2VDYWNoZUNhcGFjaXR5KTsKKyAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFn
ZUNhY2hlU2l6ZSk7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
c2V0U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOwogICAgIG5zdXJsQ2FjaGVNZW1vcnlD
YXBhY2l0eSA9IHN0ZDo6bWF4KG5zdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgW25zdXJsQ2FjaGUg
bWVtb3J5Q2FwYWNpdHldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKaW5kZXggMGYxN2VkYTMyOWUyZjVi
NmViMDk2NjkwY2UzYmY3YzZiMTlmNDBjMS4uZWFiZjFjMDE4YjdkMTRmMDljZTJkMTkwZmM0ZDhi
ZDFjMzA0ODZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKQEAgLTUzMCwxMyArNTMwLDEzIEBAIHZv
aWQgV2ViVmlldzo6c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAg
dW5zaWduZWQgY2FjaGVNYXhEZWFkQ2FwYWNpdHkgPSAwOwogICAgIGF1dG8gZGVhZERlY29kZWRE
YXRhRGVsZXRpb25JbnRlcnZhbCA9IHN0ZDo6Y2hyb25vOjpzZWNvbmRzIHsgMCB9OwogCi0gICAg
dW5zaWduZWQgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgIHVuc2lnbmVkIHBhZ2VDYWNoZVNp
emUgPSAwOwogCiAKICAgICBzd2l0Y2ggKGNhY2hlTW9kZWwpIHsKICAgICBjYXNlIFdlYkNhY2hl
TW9kZWxEb2N1bWVudFZpZXdlcjogewogICAgICAgICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChp
biBwYWdlcykKLSAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgICAgICBwYWdlQ2Fj
aGVTaXplID0gMDsKIAogICAgICAgICAvLyBPYmplY3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0
ZXMpCiAgICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCkBAIC01NjMsMTMgKzU2MywxMyBAQCB2
b2lkIFdlYlZpZXc6OnNldENhY2hlTW9kZWwoV2ViQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAg
IGNhc2UgV2ViQ2FjaGVNb2RlbERvY3VtZW50QnJvd3NlcjogewogICAgICAgICAvLyBQYWdlIGNh
Y2hlIGNhcGFjaXR5IChpbiBwYWdlcykKICAgICAgICAgaWYgKG1lbVNpemUgPj0gMTAyNCkKLSAg
ICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMzsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNp
emUgPSAzOwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDUxMikKLSAgICAgICAgICAgIHBh
Z2VDYWNoZUNhcGFjaXR5ID0gMjsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAyOwogICAg
ICAgICBlbHNlIGlmIChtZW1TaXplID49IDI1NikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFj
aXR5ID0gMTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSAxOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAgICAgICAgICBwYWdlQ2FjaGVT
aXplID0gMDsKIAogICAgICAgICAvLyBPYmplY3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMp
CiAgICAgICAgIGlmIChtZW1TaXplID49IDIwNDgpCkBAIC02MTAsMTUgKzYxMCwxNSBAQCB2b2lk
IFdlYlZpZXc6OnNldENhY2hlTW9kZWwoV2ViQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAgICAg
ICAvLyBQYWdlIGNhY2hlIGNhcGFjaXR5IChpbiBwYWdlcykKICAgICAgICAgLy8gKFJlc2VhcmNo
IGluZGljYXRlcyB0aGF0IHZhbHVlIC8gcGFnZSBkcm9wcyBzdWJzdGFudGlhbGx5IGFmdGVyIDMg
cGFnZXMuKQogICAgICAgICBpZiAobWVtU2l6ZSA+PSAyMDQ4KQotICAgICAgICAgICAgcGFnZUNh
Y2hlQ2FwYWNpdHkgPSA1OworICAgICAgICAgICAgcGFnZUNhY2hlU2l6ZSA9IDU7CiAgICAgICAg
IGVsc2UgaWYgKG1lbVNpemUgPj0gMTAyNCkKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5
ID0gNDsKKyAgICAgICAgICAgIHBhZ2VDYWNoZVNpemUgPSA0OwogICAgICAgICBlbHNlIGlmICht
ZW1TaXplID49IDUxMikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMzsKKyAgICAg
ICAgICAgIHBhZ2VDYWNoZVNpemUgPSAzOwogICAgICAgICBlbHNlIGlmIChtZW1TaXplID49IDI1
NikKLSAgICAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5ID0gMjsKKyAgICAgICAgICAgIHBhZ2VD
YWNoZVNpemUgPSAyOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0
eSA9IDE7CisgICAgICAgICAgICBwYWdlQ2FjaGVTaXplID0gMTsKIAogICAgICAgICAvLyBPYmpl
Y3QgY2FjaGUgY2FwYWNpdGllcyAoaW4gYnl0ZXMpCiAgICAgICAgIC8vIChUZXN0aW5nIGluZGlj
YXRlcyB0aGF0IHZhbHVlIC8gTUIgZGVwZW5kcyBoZWF2aWx5IG9uIGNvbnRlbnQgYW5kCkBAIC02
NzUsNyArNjc1LDcgQEAgdm9pZCBXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKFdlYkNhY2hlTW9kZWwg
Y2FjaGVNb2RlbCkKIAogICAgIG1lbW9yeUNhY2hlKCkuc2V0Q2FwYWNpdGllcyhjYWNoZU1pbkRl
YWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0eSk7CiAg
ICAgbWVtb3J5Q2FjaGUoKS5zZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRlYWRE
ZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0
Q2FwYWNpdHkocGFnZUNhY2hlQ2FwYWNpdHkpOworICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0
TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKIAogI2lmIFVTRShDRk5FVFdPUkspCiAgICAgLy8gRG9u
J3Qgc2hyaW5rIGEgYmlnIGRpc2sgY2FjaGUsIHNpbmNlIHRoYXQgd291bGQgY2F1c2UgY2h1cm4u
CkBAIC0zMTU0LDcgKzMxNTQsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6
OmdvVG9CYWNrRm9yd2FyZEl0ZW0oCiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVy
biBocjsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0od2ViSGlzdG9yeUl0ZW0tPmhpc3RvcnlJdGVt
KCksIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAgbV9wYWdlLT5nb1Rv
SXRlbSgqd2ViSGlzdG9yeUl0ZW0tPmhpc3RvcnlJdGVtKCksIEZyYW1lTG9hZFR5cGU6OkluZGV4
ZWRCYWNrRm9yd2FyZCk7CiAgICAgKnN1Y2NlZWRlZCA9IFRSVUU7CiAKICAgICByZXR1cm4gU19P
SzsKQEAgLTU1MDEsNyArNTUwMSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmll
dzo6bG9hZEJhY2tGb3J3YXJkTGlzdEZyb21PdGhlclZpZXcoCiAgICAgfQogICAgIAogICAgIEFT
U0VSVChuZXdJdGVtVG9Hb1RvKTsKLSAgICBtX3BhZ2UtPmdvVG9JdGVtKG5ld0l0ZW1Ub0dvVG8s
IEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAgbV9wYWdlLT5nb1RvSXRl
bSgqbmV3SXRlbVRvR29UbywgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKICAg
ICByZXR1cm4gU19PSzsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKaW5kZXggYTE3NjEz
YjIxMzY3MDJjYjNmM2RjZGFjN2UwZDY0M2MzMDU5NWM5YS4uNzVlMjdiYTUxMGEyZDRhNDM2NTE5
MTI0OTUwN2NjMjQxMDY1MjEwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCkBAIC0xMzIs
NyArMTMyLDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6cmVtb3ZlSXRlbSh1aW50
NjRfdCBpdGVtSUQpCiAgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAot
ICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKGl0ZW0uZ2V0KCkpOworICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKICAgICBXZWJDb3JlOjpQYWdlOjpjbGVhclByZXZp
b3VzSXRlbUZyb21BbGxQYWdlcyhpdGVtLmdldCgpKTsKICAgICBoaXN0b3J5SXRlbVRvSURNYXAo
KS5yZW1vdmUoaXRlbSk7CiB9CkBAIC0yMTYsMTIgKzIxNiwxMiBAQCBpbnQgV2ViQmFja0Zvcndh
cmRMaXN0UHJveHk6OmZvcndhcmRMaXN0Q291bnQoKQogCiB2b2lkIFdlYkJhY2tGb3J3YXJkTGlz
dFByb3h5OjpjbG9zZSgpCiB7Ci0gICAgSGFzaFNldDx1aW50NjRfdD46Oml0ZXJhdG9yIGVuZCA9
IG1fYXNzb2NpYXRlZEl0ZW1JRHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PHVpbnQ2NF90Pjo6
aXRlcmF0b3IgaSA9IG1fYXNzb2NpYXRlZEl0ZW1JRHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkK
LSAgICAgICAgV2ViQ29yZTo6UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbUZvcklEKCpp
KSk7CisgICAgZm9yIChhdXRvJiBpdGVtSUQgOiBtX2Fzc29jaWF0ZWRJdGVtSURzKSB7CisgICAg
ICAgIGlmIChIaXN0b3J5SXRlbSogaXRlbSA9IGl0ZW1Gb3JJRChpdGVtSUQpKQorICAgICAgICAg
ICAgV2ViQ29yZTo6UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOworICAgIH0KIAog
ICAgIG1fYXNzb2NpYXRlZEl0ZW1JRHMuY2xlYXIoKTsKLQogICAgIG1fcGFnZSA9IG51bGxwdHI7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApp
bmRleCA5Zjg5ZmMxZTM3N2JiNDZiMGY1ZDgzNTBkZDk3MWEwODU2OGZjZDdhLi41ODEwYWJhMzRh
MmFiYzk1NjgyNDhkODc0NzU5YTg2NjIxMzcyM2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xMjEwLDcgKzEyMTAsNyBAQCB2b2lkIFdl
YlBhZ2U6OmdvRm9yd2FyZCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJhY2tGb3J3
YXJkSXRlbUlEKQogICAgIGlmICghaXRlbS0+aXNJblBhZ2VDYWNoZSgpKQogICAgICAgICBtX3Bl
bmRpbmdOYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9uSUQ7CiAKLSAgICBtX3BhZ2UtPmdvVG9JdGVt
KGl0ZW0sIEZyYW1lTG9hZFR5cGU6OkZvcndhcmQpOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0
ZW0sIEZyYW1lTG9hZFR5cGU6OkZvcndhcmQpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmdvQmFjayh1
aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJhY2tGb3J3YXJkSXRlbUlEKQpAQCAtMTIy
Niw3ICsxMjI2LDcgQEAgdm9pZCBXZWJQYWdlOjpnb0JhY2sodWludDY0X3QgbmF2aWdhdGlvbklE
LCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKICAgICBpZiAoIWl0ZW0tPmlzSW5QYWdlQ2Fj
aGUoKSkKICAgICAgICAgbV9wZW5kaW5nTmF2aWdhdGlvbklEID0gbmF2aWdhdGlvbklEOwogCi0g
ICAgbV9wYWdlLT5nb1RvSXRlbShpdGVtLCBGcmFtZUxvYWRUeXBlOjpCYWNrKTsKKyAgICBtX3Bh
Z2UtPmdvVG9JdGVtKCppdGVtLCBGcmFtZUxvYWRUeXBlOjpCYWNrKTsKIH0KIAogdm9pZCBXZWJQ
YWdlOjpnb1RvQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3Qg
YmFja0ZvcndhcmRJdGVtSUQpCkBAIC0xMjQyLDcgKzEyNDIsNyBAQCB2b2lkIFdlYlBhZ2U6Omdv
VG9CYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCBiYWNrRm9y
d2FyZEl0ZQogICAgIGlmICghaXRlbS0+aXNJblBhZ2VDYWNoZSgpKQogICAgICAgICBtX3BlbmRp
bmdOYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9uSUQ7CiAKLSAgICBtX3BhZ2UtPmdvVG9JdGVtKGl0
ZW0sIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAgbV9wYWdlLT5nb1Rv
SXRlbSgqaXRlbSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKIH0KIAogdm9p
ZCBXZWJQYWdlOjp0cnlSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggOGI4Yjg4NDJhMzJmOTQ0OWI1ZmY1ZGUzNGIyOWJk
NDU1M2ZhZGYzYS4uOTYxNmIwMGQ5ZjY2MTIwMDI4YzczMzc5OTQwMGE5NGVkZGEzMDNkOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0xMTE2LDcgKzExMTYs
NyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3RhdGUoY29uc3QgVGV4dENoZWNr
ZXJTdGF0ZSYgdGV4dENoZWNrZXJTdGF0ZSkKIAogdm9pZCBXZWJQcm9jZXNzOjpyZWxlYXNlUGFn
ZUNhY2hlKCkKIHsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9DYXBhY2l0eU5vdygw
LCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CisgICAgUGFnZUNhY2hlOjpzaGFyZWQo
KS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CiB9CiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCmluZGV4IDg4ZTRkOTg0MDM4YTgzNzgxYjBiN2FjN2Uz
NTg1Mjc3YWMxYjRkMWYuLjQ1YWRjMDliNjQwYjA3NTY4MTk2NzYyNDdlYzEyNjk3YWMxMTJiZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0Nv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0Nv
Y29hLm1tCkBAIC0xMDQsMTggKzEwNCwxOCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0
Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgdW5zaWduZWQgY2FjaGVNaW5E
ZWFkQ2FwYWNpdHkgPSAwOwogICAgIHVuc2lnbmVkIGNhY2hlTWF4RGVhZENhcGFjaXR5ID0gMDsK
ICAgICBhdXRvIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwgPSBzdGQ6OmNocm9ubzo6
c2Vjb25kcyB7IDAgfTsKLSAgICB1bnNpZ25lZCBwYWdlQ2FjaGVDYXBhY2l0eSA9IDA7CisgICAg
dW5zaWduZWQgcGFnZUNhY2hlU2l6ZSA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyB1cmxDYWNoZU1l
bW9yeUNhcGFjaXR5ID0gMDsKICAgICB1bnNpZ25lZCBsb25nIHVybENhY2hlRGlza0NhcGFjaXR5
ID0gMDsKIAogICAgIGNhbGN1bGF0ZUNhY2hlU2l6ZXMoY2FjaGVNb2RlbCwgbWVtU2l6ZSwgZGlz
a0ZyZWVTaXplLAogICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHksIGNhY2hlTWluRGVhZENhcGFj
aXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZh
bCwKLSAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHksIHVybENhY2hlTWVtb3J5Q2FwYWNpdHksIHVy
bENhY2hlRGlza0NhcGFjaXR5KTsKKyAgICAgICAgcGFnZUNhY2hlU2l6ZSwgdXJsQ2FjaGVNZW1v
cnlDYXBhY2l0eSwgdXJsQ2FjaGVEaXNrQ2FwYWNpdHkpOwogCiAKICAgICBtZW1vcnlDYWNoZSgp
LnNldENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5
LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIG1lbW9yeUNhY2hlKCkuc2V0RGVhZERlY29kZWRE
YXRhRGVsZXRpb25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsKLSAg
ICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldENhcGFjaXR5KHBhZ2VDYWNoZUNhcGFjaXR5KTsKKyAg
ICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CiAKICAgICBO
U1VSTENhY2hlICpuc3VybENhY2hlID0gW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVdOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApp
bmRleCBiY2M3YWQ2MTYxMmI3MTg5MDUyNjlkY2U1ODgyNzQ0NjBlYTEzMmNhLi4xMThjNzIyZjc2
MjQ5YTVlMmZlYTRhYWVmMDU1Zjg0OWZhYzA5YzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVs
KQogICAgIHVuc2lnbmVkIGNhY2hlTWluRGVhZENhcGFjaXR5ID0gMDsKICAgICB1bnNpZ25lZCBj
YWNoZU1heERlYWRDYXBhY2l0eSA9IDA7CiAgICAgYXV0byBkZWFkRGVjb2RlZERhdGFEZWxldGlv
bkludGVydmFsID0gc3RkOjpjaHJvbm86OnNlY29uZHMgeyAwIH07Ci0gICAgdW5zaWduZWQgcGFn
ZUNhY2hlQ2FwYWNpdHkgPSAwOworICAgIHVuc2lnbmVkIHBhZ2VDYWNoZVNpemUgPSAwOwogCiAg
ICAgdW5zaWduZWQgbG9uZyB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gMDsKICAgICB1bnNpZ25l
ZCBsb25nIHVybENhY2hlRGlza0NhcGFjaXR5ID0gMDsKQEAgLTk5LDEyICs5OSwxMiBAQCB2b2lk
IFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwp
CiAgICAgdWludDY0X3QgbWVtU2l6ZSA9IGdldE1lbW9yeVNpemUoKTsKICAgICBjYWxjdWxhdGVD
YWNoZVNpemVzKGNhY2hlTW9kZWwsIG1lbVNpemUsIGRpc2tGcmVlU2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhY2hlVG90YWxDYXBhY2l0eSwgY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNh
Y2hlTWF4RGVhZENhcGFjaXR5LCBkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHksIHVybENhY2hlTWVtb3J5Q2Fw
YWNpdHksIHVybENhY2hlRGlza0NhcGFjaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBh
Z2VDYWNoZVNpemUsIHVybENhY2hlTWVtb3J5Q2FwYWNpdHksIHVybENhY2hlRGlza0NhcGFjaXR5
KTsKIAogICAgIFdlYkNvcmU6Om1lbW9yeUNhY2hlKCkuc2V0RGlzYWJsZWQoY2FjaGVNb2RlbCA9
PSBDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXIpOwogICAgIFdlYkNvcmU6Om1lbW9yeUNhY2hlKCku
c2V0Q2FwYWNpdGllcyhjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHks
IGNhY2hlVG90YWxDYXBhY2l0eSk7CiAgICAgV2ViQ29yZTo6bWVtb3J5Q2FjaGUoKS5zZXREZWFk
RGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2
YWwpOwotICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0Q2FwYWNpdHkocGFnZUNh
Y2hlQ2FwYWNpdHkpOworICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0TWF4U2l6
ZShwYWdlQ2FjaGVTaXplKTsKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICBXZWJDb3JlOjpQYWdl
Q2FjaGU6OnNoYXJlZCgpLnNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyh0cnVlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>