<?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>160858</bug_id>
          
          <creation_ts>2016-08-15 12:46:34 -0700</creation_ts>
          <short_desc>Rename SocketStreamHandleBase to SocketStreamHandle and SocketStreamHandle to SocketStreamHandleImpl</short_desc>
          <delta_ts>2016-08-16 10:45:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1220113</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-15 12:46:34 -0700</bug_when>
    <thetext>Rename SocketStreamHandleBase to SocketStreamHandle and SocketStreamHandle to SocketStreamHandleImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220114</commentid>
    <comment_count>1</comment_count>
      <attachid>286078</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-15 12:49:46 -0700</bug_when>
    <thetext>Created attachment 286078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220115</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-15 12:51:51 -0700</bug_when>
    <thetext>Attachment 286078 did not pass style-queue:


ERROR: Source/WebCore/platform/network/cf/SocketStreamHandleImpl.h:64:  The parameter name &quot;error&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/network/cf/SocketStreamHandleImpl.h:101:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/SocketStreamHandle.cpp:38:  Omit int when using unsigned  [runtime/unsigned] [1]
ERROR: Source/WebCore/platform/network/SocketStreamHandle.cpp:124:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/soup/SocketStreamHandleImpl.h:81:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/network/SocketStreamHandle.h:68:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:54:  &quot;CFNetwork/CFNetwork.h&quot; already included at Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:49  [build/include] [4]
ERROR: Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:148:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:169:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:173:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:487:  Missing space before ( in switch(  [whitespace/parens] [5]
ERROR: Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:559:  Missing space before ( in switch(  [whitespace/parens] [5]
ERROR: Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp:700:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 14 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220116</commentid>
    <comment_count>3</comment_count>
      <attachid>286079</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-15 13:00:35 -0700</bug_when>
    <thetext>Created attachment 286079
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220121</commentid>
    <comment_count>4</comment_count>
      <attachid>286082</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-15 13:15:08 -0700</bug_when>
    <thetext>Created attachment 286082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220127</commentid>
    <comment_count>5</comment_count>
      <attachid>286085</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-15 13:27:25 -0700</bug_when>
    <thetext>Created attachment 286085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220134</commentid>
    <comment_count>6</comment_count>
      <attachid>286088</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-15 13:36:29 -0700</bug_when>
    <thetext>Created attachment 286088
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220151</commentid>
    <comment_count>7</comment_count>
      <attachid>286088</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-08-15 14:20:06 -0700</bug_when>
    <thetext>Comment on attachment 286088
Patch

Rubber-stamp based on it being a pure rename that we discussed in person.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220153</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-15 14:25:18 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/204483</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220370</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-08-15 22:59:48 -0700</bug_when>
    <thetext>Impl is an abbr :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220489</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-16 10:45:41 -0700</bug_when>
    <thetext>We have BlobRegistry, BlobRegistryProxy, and BlobRegistryImpl.  We will soon have SocketStreamHandle, SocketStreamHandleProxy, and SocketStreamHandleImpl.  If anyone suggests a better naming scheme, I will use it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286078</attachid>
            <date>2016-08-15 12:49:46 -0700</date>
            <delta_ts>2016-08-15 13:00:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160858-20160815124801.patch</filename>
            <type>text/plain</type>
            <size>189974</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NCBAQAorMjAxNi0wOC0xNSAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlIHRvIFNvY2tldFN0cmVhbUhhbmRsZSBhbmQgU29ja2V0U3Ry
ZWFtSGFuZGxlIHRvIFNvY2tldFN0cmVhbUhhbmRsZUltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDg1OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvciwgZXhjZXB0IEdUSydzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgaXMgbm93IHNhZmVs
eSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgVGhpcyBpcyBwcmVwYXJhdGlvbiBmb3Ig
bWFraW5nIGEgbmV3IGtpbmQgb2YgU29ja2V0U3RyZWFtSGFuZGxlIHdoaWNoIGlzIGEgcHJveHkg
dGhhdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MgaW4gV2ViS2l0Mi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsu
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1X
aW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9Tb2NrZXRQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVh
bUhhbmRsZTo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OnNlbmRQZW5kaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6ZGlzY29ubmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kUGVuZGluZ0Rh
dGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFu
ZGxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0
U3RyZWFtSGFuZGxlQmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
Ojp+U29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6
On5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzY2hlZHVsZVN0cmVh
bXMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmV0YWluU29j
a2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmV4ZWN1dGVQQUNGaWxl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbW92ZVBB
Q1J1bkxvb3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHlGcm9tQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJDb3JlOjphdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjphZGRDT05ORUNUQ3Jl
ZGVudGlhbHMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29w
eUNGU3RyZWFtRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVwb3J0RXJyb3JUb0NsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxhdGZvcm1DbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVT
dHJlYW1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6
cmV0YWluU29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZTo6cmVsZWFzZVNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlQQUNFeGVjdXRpb25EZXNj
cmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZW1vdmVQQUNSdW5Mb29wU291cmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y2hvb3NlUHJveHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94
eUZyb21BcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OmNyZWF0ZVN0cmVhbXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3Ry
ZWFtSGFuZGxlOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmFkZENPTk5FQ1RDcmVkZW50aWFs
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlD
RlN0cmVhbURlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZFN0cmVhbUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVTdHJlYW1DYWxsYmFjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6cGxhdGZvcm1TZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBvcnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0
cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlYWREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnNlbmREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndhaXRGb3JBdmFpbGFi
bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlk
T3BlblNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
cmVhdGVDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRo
cmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0
b3BUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
OjpkaWRSZWNlaXZlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29j
a2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVDb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRs
ZS5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsU291cC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNvbm5lY3RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjb25uZWN0ZWRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFkQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFJlYWR5Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkRmFpbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3cml0ZVJlYWR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmJlZ2luV2FpdGluZ0Zv
clNvY2tldFdyaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZUltcGw6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6d3JpdGVSZWFkeUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhh
bmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNv
bm5lY3RlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OmNvbm5lY3RlZENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6cmVhZFJlYWR5Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpkaWRGYWlsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdG
b3JTb2NrZXRXcml0YWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRT
dHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1I
YW5kbGVTb3VwLmNwcDogUmVtb3ZlZC4KKwogMjAxNi0wOC0xNSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBXaW5DYWlybyBidWlsZCBh
ZnRlciByMjA0NDY2LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDQ2NikK
KysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMzY3
LDcgKzIzNjcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVx
dWVzdEJhc2UuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5j
cHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAKIAogICAgIHBsYXRmb3JtL3NxbC9TUUxW
YWx1ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAot
ICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c0xvYWRlckNsaWVudENGTmV0LmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU3luY2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY0OCw3ICs2NDgsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hy
b25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAKIApJbmRleDog
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U1NMSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5k
bGVDdXJsLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsQ3VybC5jcHAKIAogICAgIHBsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE5LDggKzIwMTksOCBAQAogCQk1
MTBBNThGQTFCQUNDN0YyMDBDMTkyODIgLyogSURCUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE1OEY2MUJBQ0M0QTUwMEMxOTI4
MiAvKiBJREJSZXF1ZXN0RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1F
cnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEwRDRBMkQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAg
Ki87IH07CiAJCTUxMEQ0QTM0MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0
QTJFMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLzsgfTsKLQkJ
NTEwRDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzAxMDMx
NjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwICovOyB9OwotCQk1MTBE
NEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzExMDMxNjVFRTAw
NDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTBENEEzNjEwMzE2NUVFMDA0OUVBNTQgLyog
U29ja2V0U3RyZWFtSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovOyB9OworCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFt
SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTBENEEzMTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwRDRBMzgxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxMUVDMTI3MUM1MEFBQ0EwMDMyRjk4MyAvKiBJREJTZXJp
YWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMUVDMTI1MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmNwcCAqLzsg
fTsKIAkJNTExRUMxMjgxQzUwQUFDQTAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVDMTI2MUM1MEFB
NTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi87IH07CkBAIC0yMjQxLDggKzIyNDEs
OCBAQAogCQk1MUE5RDlFQTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUU4MTk1Qjkz
MUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovOyB9OwogCQk1MUFBM0Y2RjBCRDVBQTlF
MDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3Vy
Y2VMb2FkZXJNYWMubW0gKi87IH07CiAJCTUxQUJBRTFCMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggKi87
IH07Ci0JCTUxQUJBRTFFMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAz
QzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUFCQUUxRjEwM0MxOTEzMDA4QzUyNjAg
LyogU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0
cmVhbUhhbmRsZUNGTmV0LmNwcCAqLzsgfTsKKwkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxD
Rk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUFCQUUxRDEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNw
cCAqLzsgfTsKIAkJNTFBQkY2NEQxNjM5MkUyODAwMTMyQTdBIC8qIExvYWRlclN0cmF0ZWd5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJGNjRD
MTYzOTJFMjgwMDEzMkE3QSAvKiBMb2FkZXJTdHJhdGVneS5jcHAgKi87IH07CiAJCTUxQUY1MDM2
MTZGMTAwRjYwMDk1QjJFOCAvKiBSZXNvdXJjZUxvYWRlclR5cGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFGNTAzNTE2RjEwMEY2MDA5NUIyRTgg
LyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxQjI0MTdCMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJB
cmNoaXZlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFCMjQxN0EwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gKi87
IH07CkBAIC05MzUyLDggKzkzNTIsOCBAQAogCQk1MTBBNThGRTFCQjA3QUE1MDBDMTkyODIgLyog
SURCQ29ubmVjdGlvblRvQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkNvbm5lY3Rpb25Ub0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJFMTAzMTY1RUUwMDQ5RUE1
NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTBENEEzMTEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFt
SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEwRDRBMzExMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUMxMjUxQzUwQUE1NzAw
MzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCU2VyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMUVDMTI2MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlNlcmlhbGl6YXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NjcsOCArOTU2Nyw4IEBACiAJCTUxQTlEOUU4MTk1
QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHYW1lcGFkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlck1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNv
Y2tldFN0cmVhbUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQUJBRTFD
MTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRT
dHJlYW1IYW5kbGVDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQUJB
RTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUFCRjY0QzE2MzkyRTI4MDAxMzJBN0EgLyogTG9hZGVyU3RyYXRlZ3ku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9hZGVyU3RyYXRlZ3ku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIy
RTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXNvdXJjZUxvYWRlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxQjI0MTdBMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTGVnYWN5V2ViQXJjaGl2ZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTczLDggKzE3OTczLDggQEAKIAkJ
CQk1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLywK
IAkJCQk1MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCAqLywKIAkJCQk1MTBENEEyRTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JC
YXNlLmggKi8sCi0JCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UuY3BwICovLAotCQkJCTUxMEQ0QTMxMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmggKi8sCisJCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNv
Y2tldFN0cmVhbUhhbmRsZS5jcHAgKi8sCisJCQkJNTEwRDRBMzExMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZS5oICovLAogCQkJCTUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLywKIAkJCQlFMTgwODExMDE2RkNGNDJFMDBC
ODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovLAogCQkJCUUxODA4MTE1MTZG
Q0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oICovLApAQCAtMjE4NzIs
OCArMjE4NzIsOCBAQAogCQkJCTdFRTY4NDVEMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJl
c3BvbnNlLmggKi8sCiAJCQkJN0VFNjg0NUUxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVz
cG9uc2VDRk5ldC5jcHAgKi8sCiAJCQkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUVycm9yLmggKi8sCi0JCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZS5oICovLAotCQkJCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgKi8sCisJCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYw
IC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCAqLywKKwkJCQk1MUFCQUUxRDEwM0MxOTEzMDA4
QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcCAqLywKIAkJCQk0NDJBQkNE
NTE3RDkyNjJGMDBEMzA3MTUgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAgKi8s
CiAJCQkJMjZGQUU0Q0ExODUyRTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8sCiAJCQkJMjZGQUU0Q0IxODUyRTNBNTAw
NEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZS5oICovLApAQCAtMjc1NzYsOCArMjc1NzYsOCBAQAogCQkJCTVDN0M4OEQ4MUQwRjFGNEEwMDlE
MkY2RCAvKiBTb2NrZXRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUIxMDND
MThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTBENEEzNDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFBQkFFMUUxMDNDMTkx
MzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxMEQ0QTM3MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMEQ0QTM4MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAv
KiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQzcwQUUwMzcwMzAwQTgy
NjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjIxLDggKzMxMjIxLDggQEAKIAkJ
CQlFNEFGRDAwRDBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUM2ODhBQTMxRDM4MTRCRjAwMEI1NEZBIC8qIFNvY2tldFByb3ZpZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwRDRBMzYxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1
MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDUzOTA0NzBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gaW4gU291cmNlcyAqLywK
IAkJCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk4NEE4MUYzRDBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAkocmV2
aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Tb2NrZXRQcm92aWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKFdFQl9TT0NL
RVRTKQogCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0
U3RyZWFtSGFuZGxlSW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBSZWY8U29j
a2V0U3RyZWFtSGFuZGxlPiBTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICByZXR1cm4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUo
dXJsLCBjbGllbnQsIHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OmNyZWF0ZSh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKTsKIH0KICAgICAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhh
bmRsZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDoyMDQ0NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIw
MTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKKworI2luY2x1ZGUgIlNvY2tldFN0cmVh
bUhhbmRsZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHVuc2lnbmVkIGludCBidWZmZXJTaXplID0gMTAwICog
MTAyNCAqIDEwMjQ7CisKK1NvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQor
ICAgIDogbV91cmwodXJsKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdGF0ZShD
b25uZWN0aW5nKQoreworfQorCitTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1T
dGF0ZSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3RhdGU7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZChjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmIChtX3N0YXRlID09IENvbm5lY3Rpbmcg
fHwgbV9zdGF0ZSA9PSBDbG9zaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFt
X2J1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0
aCA+IGJ1ZmZlclNpemUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8g
aW5kaWNhdGUgdGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIGxlbmd0
aCk7CisgICAgICAgIG1fY2xpZW50LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSY+KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKKyAgICBpZiAo
bV9zdGF0ZSA9PSBPcGVuKQorICAgICAgICBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQoZGF0
YSwgbGVuZ3RoKTsKKyAgICBpZiAoYnl0ZXNXcml0dGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX2J1ZmZlci5zaXplKCkgKyBsZW5ndGggLSBieXRlc1dyaXR0ZW4gPiBi
dWZmZXJTaXplKSB7CisgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8gaW5kaWNhdGUg
dGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA8IGxlbmd0aCkgeworICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoZGF0YSArIGJ5dGVzV3JpdHRlbiwgbGVuZ3RoIC0gYnl0ZXNXcml0dGVuKTsKKyAgICAg
ICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3Ry
ZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UoKQoreworICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUgPSBD
bG9zaW5nOworICAgIGlmICghbV9idWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgZGlzY29ubmVjdCgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmRpc2Nv
bm5lY3QoKQoreworICAgIGF1dG8gcHJvdGVjdCA9IG1ha2VSZWYoc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlJj4oKnRoaXMpKTsgLy8gcGxhdGZvcm1DbG9zZSBjYWxscyB0aGUgY2xpZW50
LCB3aGljaCBtYXkgbWFrZSB0aGUgaGFuZGxlIGdldCBkZWFsbG9jYXRlZCBpbW1lZGlhdGVseS4K
KworICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICBtX3N0YXRlID0gQ2xvc2VkOworfQorCitib29s
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmRQZW5kaW5nRGF0YSgpCit7CisgICAgaWYgKG1f
c3RhdGUgIT0gT3BlbiAmJiBtX3N0YXRlICE9IENsb3NpbmcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9idWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX3N0YXRlID09
IE9wZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX3N0YXRlID09
IENsb3NpbmcpIHsKKyAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIHBlbmRpbmc7CisgICAgZG8gewor
ICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gcGxhdGZvcm1TZW5kKG1fYnVmZmVyLmZpcnN0Qmxv
Y2tEYXRhKCksIG1fYnVmZmVyLmZpcnN0QmxvY2tTaXplKCkpOworICAgICAgICBwZW5kaW5nID0g
Ynl0ZXNXcml0dGVuICE9IHN0YXRpY19jYXN0PGludD4obV9idWZmZXIuZmlyc3RCbG9ja1NpemUo
KSk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyLnNpemUoKSAtIGJ5dGVzV3JpdHRlbiA8PSBi
dWZmZXJTaXplKTsKKyAgICAgICAgbV9idWZmZXIuY29uc3VtZShieXRlc1dyaXR0ZW4pOworICAg
IH0gd2hpbGUgKCFwZW5kaW5nICYmICFtX2J1ZmZlci5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50
LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSY+
KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1NvY2tldFN0cmVhbUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDI4ICsyOSwyNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KICNpbmNsdWRlICJT
b2NrZXRTdHJlYW1IYW5kbGUuaCIKKwogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IHVuc2lnbmVkIGludCBidWZmZXJT
aXplID0gMTAwICogMTAyNCAqIDEwMjQ7CiAKLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tl
dFN0cmVhbUhhbmRsZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dCYgY2xpZW50KQorU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3Qg
VVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQogICAgIDogbV91cmwo
dXJsKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9zdGF0ZShDb25uZWN0aW5nKQog
ewogfQogCi1Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1TdGF0ZSBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlOjpzdGF0ZSgpIGNvbnN0CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tl
dFN0cmVhbVN0YXRlIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhdGUoKSBjb25zdAogewogICAgIHJl
dHVybiBtX3N0YXRlOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQoY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5k
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ29u
bmVjdGluZyB8fCBtX3N0YXRlID09IENsb3NpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTc5LDcgKzc4LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kKGNvbnN0IAog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsb3Nl
KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjbG9zZSgpCiB7CiAgICAgaWYgKG1fc3RhdGUg
PT0gQ2xvc2VkKQogICAgICAgICByZXR1cm47CkBAIC04OSw3ICs4OCw3IEBAIHZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UoKQogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpkaXNjb25uZWN0KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpkaXNjb25uZWN0KCkKIHsKICAgICBhdXRvIHByb3RlY3QgPSBtYWtlUmVmKHN0YXRpY19j
YXN0PFNvY2tldFN0cmVhbUhhbmRsZSY+KCp0aGlzKSk7IC8vIHBsYXRmb3JtQ2xvc2UgY2FsbHMg
dGhlIGNsaWVudCwgd2hpY2ggbWF5IG1ha2UgdGhlIGhhbmRsZSBnZXQgZGVhbGxvY2F0ZWQgaW1t
ZWRpYXRlbHkuCiAKQEAgLTk3LDcgKzk2LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
OjpkaXNjb25uZWN0KAogICAgIG1fc3RhdGUgPSBDbG9zZWQ7CiB9CiAKLWJvb2wgU29ja2V0U3Ry
ZWFtSGFuZGxlQmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxl
OjpzZW5kUGVuZGluZ0RhdGEoKQogewogICAgIGlmIChtX3N0YXRlICE9IE9wZW4gJiYgbV9zdGF0
ZSAhPSBDbG9zaW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmgJKHJldmlz
aW9uIDIwNDQ2NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPHd0Zi9TdHJl
YW1CdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTb2NrZXRTdHJlYW1I
YW5kbGU7CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0
cmVhbUhhbmRsZUJhc2UgeworcHVibGljOgorICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBD
b25uZWN0aW5nLCBPcGVuLCBDbG9zaW5nLCBDbG9zZWQgfTsKKyAgICB2aXJ0dWFsIH5Tb2NrZXRT
dHJlYW1IYW5kbGVCYXNlKCkgeyB9CisgICAgU29ja2V0U3RyZWFtU3RhdGUgc3RhdGUoKSBjb25z
dDsKKworICAgIGJvb2wgc2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKKyAgICB2
b2lkIGNsb3NlKCk7IC8vIERpc2Nvbm5lY3QgYWZ0ZXIgYWxsIGRhdGEgaW4gYnVmZmVyIGFyZSBz
ZW50LgorICAgIHZvaWQgZGlzY29ubmVjdCgpOworICAgIHNpemVfdCBidWZmZXJlZEFtb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQorCisgICAgU29ja2V0U3RyZWFtSGFu
ZGxlQ2xpZW50JiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorCitwcm90ZWN0
ZWQ6CisgICAgU29ja2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQmKTsKKworICAgIGJvb2wgc2VuZFBlbmRpbmdEYXRhKCk7CisgICAgdmlydHVh
bCBpbnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbG9zZSgpID0gMDsKKworICAgIFVSTCBtX3VybDsKKyAg
ICBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIG1fY2xpZW50OworICAgIFN0cmVhbUJ1ZmZlcjxj
aGFyLCAxMDI0ICogMTAyND4gbV9idWZmZXI7CisgICAgU29ja2V0U3RyZWFtU3RhdGUgbV9zdGF0
ZTsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmgJKHJldmlzaW9u
IDIwNDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFt
SGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE2ICszMywxNiBAQAogCiAjaW5jbHVkZSAi
VVJMLmgiCiAjaW5jbHVkZSA8d3RmL1N0cmVhbUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNvY2tl
dFN0cmVhbUhhbmRsZTsKIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudDsKIAotY2xhc3Mg
U29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFuZGxlPiB7CiBwdWJsaWM6CiAg
ICAgZW51bSBTb2NrZXRTdHJlYW1TdGF0ZSB7IENvbm5lY3RpbmcsIE9wZW4sIENsb3NpbmcsIENs
b3NlZCB9OwotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZUJhc2UoKSB7IH0KKyAgICB2
aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGUoKSB7IH0KICAgICBTb2NrZXRTdHJlYW1TdGF0ZSBz
dGF0ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBzZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpOwpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0g
ICAgU29ja2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQmKTsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50Jik7CiAKICAgICBib29sIHNlbmRQZW5kaW5nRGF0YSgpOwogICAgIHZpcnR1
YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSA9IDA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwg
MjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgotCi0jaW5jbHVkZSAiU29ja2V0U3Ry
ZWFtSGFuZGxlLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgdW5zaWduZWQgaW50IGJ1ZmZlclNpemUgPSAxMDAg
KiAxMDI0ICogMTAyNDsKLQotU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6U29ja2V0U3RyZWFtSGFu
ZGxlQmFzZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQp
Ci0gICAgOiBtX3VybCh1cmwpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3N0YXRl
KENvbm5lY3RpbmcpCi17Ci19Ci0KLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVh
bVN0YXRlIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9zdGF0ZTsKLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gQ29ubmVjdGlu
ZyB8fCBtX3N0YXRlID09IENsb3NpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IW1fYnVmZmVyLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV9idWZmZXIuc2l6ZSgpICsgbGVu
Z3RoID4gYnVmZmVyU2l6ZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHJlcG9ydCBlcnJvciB0
byBpbmRpY2F0ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2J1ZmZlci5hcHBlbmQoZGF0YSwgbGVu
Z3RoKTsKLSAgICAgICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nh
c3Q8U29ja2V0U3RyZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGludCBieXRlc1dyaXR0ZW4gPSAwOwotICAgIGlm
IChtX3N0YXRlID09IE9wZW4pCi0gICAgICAgIGJ5dGVzV3JpdHRlbiA9IHBsYXRmb3JtU2VuZChk
YXRhLCBsZW5ndGgpOwotICAgIGlmIChieXRlc1dyaXR0ZW4gPCAwKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0aCAtIGJ5dGVzV3JpdHRlbiA+
IGJ1ZmZlclNpemUpIHsKLSAgICAgICAgLy8gRklYTUU6IHJlcG9ydCBlcnJvciB0byBpbmRpY2F0
ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBpZiAoYnl0ZXNXcml0dGVuIDwgbGVuZ3RoKSB7Ci0gICAgICAgIG1fYnVmZmVy
LmFwcGVuZChkYXRhICsgYnl0ZXNXcml0dGVuLCBsZW5ndGggLSBieXRlc1dyaXR0ZW4pOwotICAg
ICAgICBtX2NsaWVudC5kaWRVcGRhdGVCdWZmZXJlZEFtb3VudChzdGF0aWNfY2FzdDxTb2NrZXRT
dHJlYW1IYW5kbGUmPigqdGhpcyksIGJ1ZmZlcmVkQW1vdW50KCkpOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpjbG9zZSgpCi17Ci0g
ICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2VkKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zdGF0ZSA9
IENsb3Npbmc7Ci0gICAgaWYgKCFtX2J1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBkaXNjb25uZWN0KCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6ZGlz
Y29ubmVjdCgpCi17Ci0gICAgYXV0byBwcm90ZWN0ID0gbWFrZVJlZihzdGF0aWNfY2FzdDxTb2Nr
ZXRTdHJlYW1IYW5kbGUmPigqdGhpcykpOyAvLyBwbGF0Zm9ybUNsb3NlIGNhbGxzIHRoZSBjbGll
bnQsIHdoaWNoIG1heSBtYWtlIHRoZSBoYW5kbGUgZ2V0IGRlYWxsb2NhdGVkIGltbWVkaWF0ZWx5
LgotCi0gICAgcGxhdGZvcm1DbG9zZSgpOwotICAgIG1fc3RhdGUgPSBDbG9zZWQ7Ci19Ci0KLWJv
b2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkKLXsKLSAgICBpZiAo
bV9zdGF0ZSAhPSBPcGVuICYmIG1fc3RhdGUgIT0gQ2xvc2luZykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChtX2J1ZmZlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1fc3RhdGUg
PT0gT3BlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fc3RhdGUg
PT0gQ2xvc2luZykgewotICAgICAgICAgICAgZGlzY29ubmVjdCgpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wgcGVuZGluZzsKLSAgICBkbyB7
Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQobV9idWZmZXIuZmlyc3RC
bG9ja0RhdGEoKSwgbV9idWZmZXIuZmlyc3RCbG9ja1NpemUoKSk7Ci0gICAgICAgIHBlbmRpbmcg
PSBieXRlc1dyaXR0ZW4gIT0gc3RhdGljX2Nhc3Q8aW50PihtX2J1ZmZlci5maXJzdEJsb2NrU2l6
ZSgpKTsKLSAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA8PSAwKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBBU1NFUlQobV9idWZmZXIuc2l6ZSgpIC0gYnl0ZXNXcml0dGVuIDw9
IGJ1ZmZlclNpemUpOwotICAgICAgICBtX2J1ZmZlci5jb25zdW1lKGJ5dGVzV3JpdHRlbik7Ci0g
ICAgfSB3aGlsZSAoIXBlbmRpbmcgJiYgIW1fYnVmZmVyLmlzRW1wdHkoKSk7Ci0gICAgbV9jbGll
bnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxl
Jj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpE
ZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAkocmV2aXNpb24gMjA0NDY2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVC
YXNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgPHd0Zi9TdHJlYW1CdWZmZXIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7Ci1jbGFzcyBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQ7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgewotcHVi
bGljOgotICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBDb25uZWN0aW5nLCBPcGVuLCBDbG9z
aW5nLCBDbG9zZWQgfTsKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKCkgeyB9
Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgc3RhdGUoKSBjb25zdDsKLQotICAgIGJvb2wgc2VuZChj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLSAgICB2b2lkIGNsb3NlKCk7IC8vIERpc2Nv
bm5lY3QgYWZ0ZXIgYWxsIGRhdGEgaW4gYnVmZmVyIGFyZSBzZW50LgotICAgIHZvaWQgZGlzY29u
bmVjdCgpOwotICAgIHNpemVfdCBidWZmZXJlZEFtb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVm
ZmVyLnNpemUoKTsgfQotCi0gICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQoKSBj
b25zdCB7IHJldHVybiBtX2NsaWVudDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgU29ja2V0U3RyZWFt
SGFuZGxlQmFzZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKLQotICAg
IGJvb2wgc2VuZFBlbmRpbmdEYXRhKCk7Ci0gICAgdmlydHVhbCBpbnQgcGxhdGZvcm1TZW5kKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZv
cm1DbG9zZSgpID0gMDsKLQotICAgIFVSTCBtX3VybDsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQmIG1fY2xpZW50OwotICAgIFN0cmVhbUJ1ZmZlcjxjaGFyLCAxMDI0ICogMTAyND4gbV9i
dWZmZXI7Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgbV9zdGF0ZTsKLX07Ci0KLX0gIC8vIG5hbWVz
cGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2
bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0
U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNlc3Npb25J
RC5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLXR5
cGVkZWYgc3RydWN0IF9fQ0ZIVFRQTWVzc2FnZSogQ0ZIVFRQTWVzc2FnZVJlZjsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBDcmVkZW50aWFsOwotY2xhc3MgUHJvdGVjdGlvblNwYWNl
OwotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OwotCi1jbGFzcyBTb2NrZXRTdHJlYW1I
YW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFuZGxlPiwg
cHVibGljIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKSk7IH0KLQot
ICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOwotCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbG9zZSgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgU29ja2V0
U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYsIFNlc3Np
b25JRCk7Ci0gICAgdm9pZCBjcmVhdGVTdHJlYW1zKCk7Ci0gICAgdm9pZCBzY2hlZHVsZVN0cmVh
bXMoKTsKLSAgICB2b2lkIGNob29zZVByb3h5KCk7Ci0gICAgdm9pZCBjaG9vc2VQcm94eUZyb21B
cnJheShDRkFycmF5UmVmKTsKLSAgICB2b2lkIGV4ZWN1dGVQQUNGaWxlVVJMKENGVVJMUmVmKTsK
LSAgICB2b2lkIHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKLSAgICBSZXRhaW5QdHI8Q0ZSdW5M
b29wU291cmNlUmVmPiBtX3BhY1J1bkxvb3BTb3VyY2U7Ci0gICAgc3RhdGljIHZvaWQgcGFjRXhl
Y3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJv
clJlZiBlcnJvcik7Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIGNvcHlQQUNFeGVjdXRpb25EZXNj
cmlwdGlvbih2b2lkKik7Ci0KLSAgICBib29sIHNob3VsZFVzZVNTTCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsLnByb3RvY29sSXMoIndzcyIpOyB9Ci0gICAgdW5zaWduZWQgc2hvcnQgcG9ydCgpIGNv
bnN0OwotCi0gICAgdm9pZCBhZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBy
ZXNwb25zZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCogcmV0YWluU29ja2V0U3RyZWFtSGFuZGxlKHZv
aWQqKTsKLSAgICBzdGF0aWMgdm9pZCByZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQqKTsK
LSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weUNGU3RyZWFtRGVzY3JpcHRpb24odm9pZCopOwot
ICAgIHN0YXRpYyB2b2lkIHJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJlYW1SZWYsIENGU3Ry
ZWFtRXZlbnRUeXBlLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgd3JpdGVTdHJlYW1DYWxsYmFj
ayhDRldyaXRlU3RyZWFtUmVmLCBDRlN0cmVhbUV2ZW50VHlwZSwgdm9pZCopOwotICAgIHZvaWQg
cmVhZFN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlKTsKLSAgICB2b2lkIHdyaXRlU3Ry
ZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUpOwotCi0gICAgdm9pZCByZXBvcnRFcnJvclRv
Q2xpZW50KENGRXJyb3JSZWYpOwotCi0gICAgYm9vbCBnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVk
ZW50aWFscyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBTdHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBh
c3N3b3JkKTsKLQotICAgIGVudW0gQ29ubmVjdGluZ1N1YnN0YXRlIHsgTmV3LCBFeGVjdXRpbmdQ
QUNGaWxlLCBXYWl0aW5nRm9yQ3JlZGVudGlhbHMsIFdhaXRpbmdGb3JDb25uZWN0LCBDb25uZWN0
ZWQgfTsKLSAgICBDb25uZWN0aW5nU3Vic3RhdGUgbV9jb25uZWN0aW5nU3Vic3RhdGU7Ci0KLSAg
ICBlbnVtIENvbm5lY3Rpb25UeXBlIHsgVW5rbm93biwgRGlyZWN0LCBTT0NLU1Byb3h5LCBDT05O
RUNUUHJveHkgfTsKLSAgICBDb25uZWN0aW9uVHlwZSBtX2Nvbm5lY3Rpb25UeXBlOwotICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gbV9wcm94eUhvc3Q7Ci0gICAgUmV0YWluUHRyPENGTnVtYmVy
UmVmPiBtX3Byb3h5UG9ydDsKLQotICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBtX3By
b3h5UmVzcG9uc2VNZXNzYWdlOwotICAgIGJvb2wgbV9zZW50U3RvcmVkQ3JlZGVudGlhbHM7Ci0g
ICAgUmV0YWluUHRyPENGUmVhZFN0cmVhbVJlZj4gbV9yZWFkU3RyZWFtOwotICAgIFJldGFpblB0
cjxDRldyaXRlU3RyZWFtUmVmPiBtX3dyaXRlU3RyZWFtOwotCi0gICAgUmV0YWluUHRyPENGVVJM
UmVmPiBtX2h0dHBzVVJMOyAvLyB3cyhzKTogcmVwbGFjZWQgd2l0aCBodHRwczoKLSAgICBTZXNz
aW9uSUQgbV9zZXNzaW9uSUQ7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRT
dHJlYW1IYW5kbGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAs
MCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0
U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDcwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJDcmVkZW50aWFsLmgiCi0jaW5j
bHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUHJvdGVjdGlvblNwYWNlLmgi
Ci0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgot
I2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Db25k
aXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShJT1Mp
Ci0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShXSU4pCi0jaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCi0jaW5jbHVkZSA8Q0ZOZXR3b3Jr
L0NGTmV0d29yay5oPgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0
ZW1JbnRlcmZhY2UuaD4KLSNlbHNlCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1BQykKLWV4dGVybiAi
QyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tDRlN0cmVhbVNvY2tldFNldE5vRGVsYXk7Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2ltcG9ydCA8Q0ZOZXR3b3JrU1BJLmg+Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVh
bUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQs
IFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwg
Y2xpZW50KQotICAgICwgbV9jb25uZWN0aW5nU3Vic3RhdGUoTmV3KQotICAgICwgbV9jb25uZWN0
aW9uVHlwZShVbmtub3duKQotICAgICwgbV9zZW50U3RvcmVkQ3JlZGVudGlhbHMoZmFsc2UpCi0g
ICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRT
dHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2NsaWVudCk7Ci0KLSAgICBB
U1NFUlQodXJsLnByb3RvY29sSXMoIndzIikgfHwgdXJsLnByb3RvY29sSXMoIndzcyIpKTsKLQot
ICAgIFVSTCBodHRwc1VSTChVUkwoKSwgImh0dHBzOi8vIiArIG1fdXJsLmhvc3QoKSk7Ci0gICAg
bV9odHRwc1VSTCA9IGh0dHBzVVJMLmNyZWF0ZUNGVVJMKCk7Ci0KLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICAvLyBEb24ndCBjaGVjayBmb3IgSFNUUyB2aW9sYXRpb24gZm9yIGVwaGVtZXJhbCBz
ZXNzaW9ucyBzaW5jZQotICAgIC8vIEhTVFMgc3RhdGUgc2hvdWxkIG5vdCB0cmFuc2ZlciBiZXR3
ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUgYnJvd3NpbmcuCi0gICAgaWYgKHVybC5wcm90b2NvbElz
KCJ3cyIpCi0gICAgICAgICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKQotICAgICAgICAmJiBf
Q0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0V2l0aFNlc3Npb24obV9odHRwc1VSTC5nZXQoKSwgbnVs
bHB0cikpIHsKLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29j
a2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQgY29ubmVjdGlvbiBm
YWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRlcyBIVFRQIFN0cmljdCBUcmFuc3BvcnQgU2VjdXJpdHku
IikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBjcmVhdGVTdHJlYW1z
KCk7Ci0gICAgQVNTRVJUKCFtX3JlYWRTdHJlYW0gPT0gIW1fd3JpdGVTdHJlYW0pOwotICAgIGlm
ICghbV9yZWFkU3RyZWFtKSAvLyBEb2luZyBhc3luY2hyb25vdXMgUEFDIGZpbGUgcHJvY2Vzc2lu
Zywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0ZWQgbGF0ZXIuCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNjaGVkdWxlU3RyZWFtcygpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1
bGVTdHJlYW1zKCkKLXsKLSAgICBBU1NFUlQobV9yZWFkU3RyZWFtKTsKLSAgICBBU1NFUlQobV93
cml0ZVN0cmVhbSk7Ci0KLSAgICBDRlN0cmVhbUNsaWVudENvbnRleHQgY2xpZW50Q29udGV4dCA9
IHsgMCwgdGhpcywgcmV0YWluU29ja2V0U3RyZWFtSGFuZGxlLCByZWxlYXNlU29ja2V0U3RyZWFt
SGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbiB9OwotICAgIC8vIEZJWE1FOiBQYXNzIHNw
ZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRlcmVzdGVkIGluIGluc3RlYWQgb2YgLTEuCi0gICAgQ0ZS
ZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVhZFN0cmVhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Q0ZPcHRp
b25GbGFncz4oLTEpLCByZWFkU3RyZWFtQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KTsKLSAgICBD
RldyaXRlU3RyZWFtU2V0Q2xpZW50KG1fd3JpdGVTdHJlYW0uZ2V0KCksIHN0YXRpY19jYXN0PENG
T3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVTdHJlYW1DYWxsYmFjaywgJmNsaWVudENvbnRleHQpOwot
Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgIENGUmVhZFN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3Ao
bV9yZWFkU3RyZWFtLmdldCgpLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9k
ZSk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3AobV93cml0ZVN0cmVhbS5n
ZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotI2Vsc2UKLSAg
ICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgQ0ZS
dW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIENGV3JpdGVT
dHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fd3JpdGVTdHJlYW0uZ2V0KCksIENGUnVuTG9vcEdl
dEN1cnJlbnQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSNlbmRpZgotCi0gICAgQ0ZSZWFk
U3RyZWFtT3BlbihtX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIENGV3JpdGVTdHJlYW1PcGVuKG1f
d3JpdGVTdHJlYW0uZ2V0KCkpOwotCi0gICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkKLSAgICAg
ICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOwotCi0gICAgbV9jb25uZWN0aW5nU3Vic3RhdGUg
PSBXYWl0aW5nRm9yQ29ubmVjdDsKLX0KLQotdm9pZCogU29ja2V0U3RyZWFtSGFuZGxlOjpyZXRh
aW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5mbykKLXsKLSAgICBTb2NrZXRTdHJlYW1IYW5k
bGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOwotICAg
IGhhbmRsZS0+cmVmKCk7Ci0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5mbykKLXsKLSAgICBT
b2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRs
ZSo+KGluZm8pOwotICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQotQ0ZTdHJpbmdSZWYgU29ja2V0
U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24odm9pZCopCi17Ci0gICAg
cmV0dXJuIENGU1RSKCJXZWJTb2NrZXQgcHJveHkgUEFDIGZpbGUgZXhlY3V0aW9uIik7Ci19Ci0K
LXN0YXRpYyB2b2lkIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4gZnVuY3Rpb24pCi17Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIGZ1bmN0
aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMb2NrIG11dGV4OwotICAgIENv
bmRpdGlvbiBjb25kaXRpb25WYXJpYWJsZTsKLQotICAgIGJvb2wgaXNGaW5pc2hlZCA9IGZhbHNl
OwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbJl0gewotICAgICAgICBmdW5jdGlvbigpOwotCi0g
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG11dGV4KTsKLSAgICAgICAgaXNGaW5p
c2hlZCA9IHRydWU7Ci0gICAgICAgIGNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwotICAg
IH0pOwotCi0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG11dGV4KTsKLSAgICBjb25k
aXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFsmXSB7IHJldHVybiBpc0ZpbmlzaGVkOyB9KTsKLX0K
LQotc3RydWN0IE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8gewotICAgIE1haW5UaHJlYWRQQUND
YWxsYmFja0luZm8oU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUsIENGQXJyYXlSZWYgcHJveHlM
aXN0KSA6IGhhbmRsZShoYW5kbGUpLCBwcm94eUxpc3QocHJveHlMaXN0KSB7IH0KLSAgICBSZWZQ
dHI8U29ja2V0U3RyZWFtSGFuZGxlPiBoYW5kbGU7Ci0gICAgQ0ZBcnJheVJlZiBwcm94eUxpc3Q7
Ci19OwotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9p
ZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZikKLXsKLSAgICBTb2Nr
ZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+
KGNsaWVudCk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbJl0gewotICAgICAgICBB
U1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBFeGVjdXRpbmdQQUNGaWxlKTsK
LSAgICAgICAgLy8gVGhpcyB0aW1lLCB0aGUgYXJyYXkgd29uJ3QgaGF2ZSBQQUMgYXMgYSBmaXJz
dCBlbnRyeS4KLSAgICAgICAgaWYgKGhhbmRsZS0+bV9zdGF0ZSAhPSBDb25uZWN0aW5nKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBoYW5kbGUtPmNob29zZVByb3h5RnJvbUFycmF5KHBy
b3h5TGlzdCk7Ci0gICAgICAgIGhhbmRsZS0+Y3JlYXRlU3RyZWFtcygpOwotICAgICAgICBoYW5k
bGUtPnNjaGVkdWxlU3RyZWFtcygpOwotICAgIH0pOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkKLXsKLSAgICAvLyBD
Rk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3IgV2ViU29ja2V0IHNjaGVt
ZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgotICAgIENGU3RyZWFtQ2xpZW50Q29udGV4dCBjbGllbnRD
b250ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUsIHJlbGVhc2VTb2Nr
ZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbiB9OwotICAgIG1fcGFj
UnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrRXhlY3V0ZVByb3h5QXV0b0NvbmZpZ3Vy
YXRpb25VUkwocGFjRmlsZVVSTCwgbV9odHRwc1VSTC5nZXQoKSwgcGFjRXhlY3V0aW9uQ2FsbGJh
Y2ssICZjbGllbnRDb250ZXh0KSk7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgIENGUnVuTG9vcEFk
ZFNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVu
TG9vcERlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgQ0ZSdW5Mb29wQWRkU291cmNlKENGUnVuTG9v
cEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9u
TW9kZXMpOwotI2VuZGlmCi0gICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBFeGVjdXRpbmdQQUNG
aWxlOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVtb3ZlUEFDUnVuTG9vcFNvdXJj
ZSgpCi17Ci0gICAgQVNTRVJUKG1fcGFjUnVuTG9vcFNvdXJjZSk7Ci0KLSAgICBDRlJ1bkxvb3BT
b3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSk7Ci0jaWYgUExBVEZPUk0o
V0lOKQotICAgIENGUnVuTG9vcFJlbW92ZVNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVu
TG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgQ0ZS
dW5Mb29wUmVtb3ZlU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291
cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotI2VuZGlmCi0gICAgbV9wYWNSdW5M
b29wU291cmNlID0gMDsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5
KCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eURpY3Rpb25hcnkgPSBh
ZG9wdENGKENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdzKCkpOwotCi0gICAgLy8gU09D
S1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNUKSBwcm94aWVzIGFyZSBzdXBwb3J0ZWQuCi0gICAgLy8g
V2ViU29ja2V0IHByb3RvY29sIHJlbGllcyBvbiBoYW5kc2hha2UgYmVpbmcgdHJhbnNmZXJyZWQg
dW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEgcHJveHkgdGhhdCB3aWxsIG5vdCBtb2RpZnkgaGVhZGVy
cy4KLSAgICAvLyBTaW5jZSBIVFRQIHByb3hpZXMgbXVzdCBhZGQgVmlhIGhlYWRlcnMsIHRoZXkg
YXJlIGhpZ2hseSB1bmxpa2VseSB0byB3b3JrLgotICAgIC8vIE1hbnkgQ09OTkVDVCBwcm94aWVz
IGxpbWl0IGNvbm5lY3Rpdml0eSB0byBwb3J0IDQ0Mywgc28gd2UgcHJlZmVyIFNPQ0tTLCBpZiBj
b25maWd1cmVkLgotCi0gICAgaWYgKCFwcm94eURpY3Rpb25hcnkpIHsKLSAgICAgICAgbV9jb25u
ZWN0aW9uVHlwZSA9IERpcmVjdDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENG
TmV0d29ya0NvcHlQcm94aWVzRm9yVVJMIGRvZXNuJ3Qga25vdyBhYm91dCBXZWJTb2NrZXQgc2No
ZW1lcywgc28gcHJldGVuZCB0byB1c2UgaHR0cC4KLSAgICAvLyBBbHdheXMgdXNlICJodHRwcyIg
dG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4gcmVzdWx0IC0gd2UnbGwgdHJ5IHRvIHVzZSB0aG9zZSBm
b3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFueSBhcmUgY29uZmlndXJlZCB0byByZWplY3QgY29ubmVj
dGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhhbiA0NDMuCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+
IHByb3h5QXJyYXkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJMKG1faHR0cHNV
UkwuZ2V0KCksIHByb3h5RGljdGlvbmFyeS5nZXQoKSkpOwotCi0gICAgY2hvb3NlUHJveHlGcm9t
QXJyYXkocHJveHlBcnJheS5nZXQoKSk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpj
aG9vc2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkpCi17Ci0gICAgaWYgKCFw
cm94eUFycmF5KSB7Ci0gICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBEaXJlY3Q7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBDRkluZGV4IHByb3h5QXJyYXlDb3VudCA9IENGQXJyYXlH
ZXRDb3VudChwcm94eUFycmF5KTsKLQotICAgIC8vIFBBQyBpcyBhbHdheXMgdGhlIGZpcnN0IGVu
dHJ5LCBpZiBwcmVzZW50LgotICAgIGlmIChwcm94eUFycmF5Q291bnQpIHsKLSAgICAgICAgQ0ZE
aWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZB
cnJheUdldFZhbHVlQXRJbmRleChwcm94eUFycmF5LCAwKSk7Ci0gICAgICAgIENGVHlwZVJlZiBw
cm94eVR5cGUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm94eUluZm8sIGtDRlByb3h5VHlwZUtl
eSk7Ci0gICAgICAgIGlmIChwcm94eVR5cGUgJiYgQ0ZHZXRUeXBlSUQocHJveHlUeXBlKSA9PSBD
RlN0cmluZ0dldFR5cGVJRCgpKSB7Ci0gICAgICAgICAgICBpZiAoQ0ZFcXVhbChwcm94eVR5cGUs
IGtDRlByb3h5VHlwZUF1dG9Db25maWd1cmF0aW9uVVJMKSkgewotICAgICAgICAgICAgICAgIENG
VHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQ
cm94eUF1dG9Db25maWd1cmF0aW9uVVJMS2V5KTsKLSAgICAgICAgICAgICAgICBpZiAocGFjRmls
ZVVSTCAmJiBDRkdldFR5cGVJRChwYWNGaWxlVVJMKSA9PSBDRlVSTEdldFR5cGVJRCgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVQQUNGaWxlVVJMKHN0YXRpY19jYXN0PENGVVJMUmVm
PihwYWNGaWxlVVJMKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDRkRpY3Rpb25h
cnlSZWYgY2hvc2VuUHJveHkgPSAwOwotICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHByb3h5
QXJyYXlDb3VudDsgKytpKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBwcm94eUluZm8gPSBz
dGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocHJveHlB
cnJheSwgaSkpOwotICAgICAgICBDRlR5cGVSZWYgcHJveHlUeXBlID0gQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eVR5cGVLZXkpOwotICAgICAgICBpZiAocHJveHlUeXBl
ICYmIENGR2V0VHlwZUlEKHByb3h5VHlwZSkgPT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgewotICAg
ICAgICAgICAgaWYgKENGRXF1YWwocHJveHlUeXBlLCBrQ0ZQcm94eVR5cGVTT0NLUykpIHsKLSAg
ICAgICAgICAgICAgICBtX2Nvbm5lY3Rpb25UeXBlID0gU09DS1NQcm94eTsKLSAgICAgICAgICAg
ICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChDRkVxdWFsKHByb3h5VHlwZSwga0NGUHJveHlU
eXBlSFRUUFMpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IENPTk5FQ1RQ
cm94eTsKLSAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKLSAgICAgICAg
ICAgICAgICAvLyBLZWVwIGxvb2tpbmcgZm9yIHByb3hpZXMsIGFzIGEgU09DS1Mgb25lIGlzIHBy
ZWZlcmFibGUuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2hv
c2VuUHJveHkpIHsKLSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGlvblR5cGUgIT0gVW5rbm93bik7
Ci0gICAgICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25UeXBlICE9IERpcmVjdCk7Ci0KLSAgICAgICAg
Q0ZUeXBlUmVmIHByb3h5SG9zdCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBr
Q0ZQcm94eUhvc3ROYW1lS2V5KTsKLSAgICAgICAgQ0ZUeXBlUmVmIHByb3h5UG9ydCA9IENGRGlj
dGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eVBvcnROdW1iZXJLZXkpOwotCi0g
ICAgICAgIGlmIChwcm94eUhvc3QgJiYgQ0ZHZXRUeXBlSUQocHJveHlIb3N0KSA9PSBDRlN0cmlu
Z0dldFR5cGVJRCgpICYmIHByb3h5UG9ydCAmJiBDRkdldFR5cGVJRChwcm94eVBvcnQpID09IENG
TnVtYmVyR2V0VHlwZUlEKCkpIHsKLSAgICAgICAgICAgIG1fcHJveHlIb3N0ID0gc3RhdGljX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9zdCk7Ci0gICAgICAgICAgICBtX3Byb3h5UG9ydCA9IHN0
YXRpY19jYXN0PENGTnVtYmVyUmVmPihwcm94eVBvcnQpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKLX0KLQot
Ci12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygpCi17Ci0gICAgaWYgKG1f
Y29ubmVjdGlvblR5cGUgPT0gVW5rbm93bikKLSAgICAgICAgY2hvb3NlUHJveHkoKTsKLQotICAg
IC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93biwgdGhlbiB3ZSdyZSByZXNvbHZpbmcgYSBQQUMgZmls
ZSBhc3luY2hyb25vdXNseS4KLSAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9PSBVbmtub3duKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvc3QgPSBtX3Vy
bC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLQotICAgIC8vIENyZWF0aW5nIHN0cmVhbXMgdG8g
ZmluYWwgZGVzdGluYXRpb24sIG5vdCB0byBwcm94eS4KLSAgICBDRlJlYWRTdHJlYW1SZWYgcmVh
ZFN0cmVhbSA9IDA7Ci0gICAgQ0ZXcml0ZVN0cmVhbVJlZiB3cml0ZVN0cmVhbSA9IDA7Ci0gICAg
Q0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNvY2tldFRvSG9zdCgwLCBob3N0LmdldCgpLCBwb3J0KCks
ICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJlYW0pOwotI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZP
Uk0oTUFDKQotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMjg1NTU4Nz4gX2tDRlN0cmVhbVNvY2tl
dFNldE5vRGVsYXkgaXMgbm90IGV4cG9ydGVkIG9uIFdpbmRvd3MKLSAgICBDRldyaXRlU3RyZWFt
U2V0UHJvcGVydHkod3JpdGVTdHJlYW0sIF9rQ0ZTdHJlYW1Tb2NrZXRTZXROb0RlbGF5LCBrQ0ZC
b29sZWFuVHJ1ZSk7Ci0jZW5kaWYKLQotICAgIG1fcmVhZFN0cmVhbSA9IGFkb3B0Q0YocmVhZFN0
cmVhbSk7Ci0gICAgbV93cml0ZVN0cmVhbSA9IGFkb3B0Q0Yod3JpdGVTdHJlYW0pOwotCi0gICAg
c3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBlKSB7Ci0gICAgY2FzZSBVbmtub3duOgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEaXJlY3Q6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgU09DS1NQcm94eTogewotICAgICAgICAvLyBGSVhNRTog
U09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxlbmdlLXJlc3BvbnNlLCBzaG91bGQgd2UgdHJ5IHRvIGFw
cGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5Y2hhaW4gcmlnaHQgYXdheT8KLSAgICAgICAgLy8gQnV0
IFNPQ0tTNSBjcmVkZW50aWFscyBkb24ndCB3b3JrIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGlu
ZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3NzY2OTg+LgotICAgICAgICBjb25zdCB2b2lkKiBwcm94
eUtleXNbXSA9IHsga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5SG9zdCwga0NGU3RyZWFtUHJv
cGVydHlTT0NLU1Byb3h5UG9ydCB9OwotICAgICAgICBjb25zdCB2b2lkKiBwcm94eVZhbHVlc1td
ID0geyBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkgfTsKLSAgICAgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29ubmVjdERpY3Rpb25hcnkgPSBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtleXMsIHByb3h5VmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RI
KHByb3h5S2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgQ0ZSZWFkU3RyZWFtU2V0UHJvcGVydHko
bV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZTdHJlYW1Qcm9wZXJ0eVNPQ0tTUHJveHksIGNvbm5lY3RE
aWN0aW9uYXJ5LmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICBjYXNlIENP
Tk5FQ1RQcm94eToKLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlGb3JTdHJlYW0obV9yZWFkU3Ry
ZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkVXNlU1NMKCkpIHsKLSAgICAgICAgQ0ZC
b29sZWFuUmVmIHZhbGlkYXRlQ2VydGlmaWNhdGVDaGFpbiA9IFNldHRpbmdzOjphbGxvd3NBbnlT
U0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9vbGVhbkZhbHNlIDoga0NGQm9vbGVhblRydWU7Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9IHsga0NGU3RyZWFtU1NMUGVlck5hbWUsIGtDRlN0cmVh
bVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZpY2F0ZUNoYWluIH07Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBob3N0LmdldCgpLCBrQ0ZTdHJlYW1Tb2NrZXRT
ZWN1cml0eUxldmVsTmVnb3RpYXRlZFNTTCwgdmFsaWRhdGVDZXJ0aWZpY2F0ZUNoYWluIH07Ci0g
ICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNldHRpbmdzID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7Ci0gICAgICAgIENGUmVhZFN0cmVhbVNldFByb3BlcnR5KG1fcmVhZFN0cmVhbS5n
ZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOwotICAg
ICAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkobV93cml0ZVN0cmVhbS5nZXQoKSwga0NGU3Ry
ZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOwotICAgIH0KLX0KLQotYm9v
bCBTb2NrZXRTdHJlYW1IYW5kbGU6OmdldFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBTdHJpbmcmIGxvZ2luLCBTdHJp
bmcmIHBhc3N3b3JkKQotewotICAgIC8vIEZJWE1FICg8cmRhcjovL3Byb2JsZW0vMTA0MTY0OTU+
KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9tIEF1dGhCcm9rZXJB
Z2VudC4KLQotICAgIC8vIFRyeSBzeXN0ZW0gY3JlZGVudGlhbCBzdG9yYWdlIGZpcnN0LCBtYXRj
aGluZyBIVFRQIGJlaGF2aW9yIChDRk5ldHdvcmsgb25seSBhc2tzIHRoZSBjbGllbnQgZm9yIHBh
c3N3b3JkIGlmIGl0IGNvdWxkbid0IGZpbmQgaXQgaW4gS2V5Y2hhaW4pLgotICAgIENyZWRlbnRp
YWwgc3RvcmVkQ3JlZGVudGlhbDsKLSAgICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBOZXR3
b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklEKSkgewotICAgICAg
ICBzdG9yZWRDcmVkZW50aWFsID0gc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCku
Z2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSk7Ci0gICAgICAgIGlmIChz
dG9yZWRDcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHN0b3JlZENyZWRlbnRpYWwg
PSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocHJvdGVjdGlvblNwYWNl
KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGxvZ2luID0gc3RvcmVkQ3JlZGVudGlhbC51c2VyKCk7Ci0g
ICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVkZW50aWFsLnBhc3N3b3JkKCk7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1
dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1dGhlbnRpY2F0aW9uTWV0aG9kKENGU3RyaW5nUmVmIG1l
dGhvZCkKLXsKLSAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNj
aGVtZUJhc2ljKSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lSFRUUEJhc2ljOwotICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRp
Y2F0aW9uU2NoZW1lRGlnZXN0KSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKLSAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhU
VFBBdXRoZW50aWNhdGlvblNjaGVtZU5UTE0pKQotICAgICAgICByZXR1cm4gUHJvdGVjdGlvblNw
YWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOwotICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NG
SFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlKSkKLSAgICAgICAgcmV0dXJuIFByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlOwotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZVVua25vd247Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjphZGRDT05ORUNUQ3JlZGVu
dGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBwcm94eVJlc3BvbnNlKQotewotICAgIFJldGFpblB0cjxD
RkhUVFBBdXRoZW50aWNhdGlvblJlZj4gYXV0aGVudGljYXRpb24gPSBhZG9wdENGKENGSFRUUEF1
dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJlc3BvbnNlKDAsIHByb3h5UmVzcG9uc2UpKTsKLQotICAg
IGlmICghQ0ZIVFRQQXV0aGVudGljYXRpb25SZXF1aXJlc1VzZXJOYW1lQW5kUGFzc3dvcmQoYXV0
aGVudGljYXRpb24uZ2V0KCkpKSB7Ci0gICAgICAgIC8vIFRoYXQncyBhbGwgd2UgY2FuIG9mZmVy
Li4uCi0gICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0
cmVhbUVycm9yKDAsIG1fdXJsLnN0cmluZygpLCAiUHJveHkgYXV0aGVudGljYXRpb24gc2NoZW1l
IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdlYlNvY2tldHMiKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpbnQgcG9ydCA9IDA7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1ZShtX3Byb3h5UG9y
dC5nZXQoKSwga0NGTnVtYmVySW50VHlwZSwgJnBvcnQpOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ29weU1ldGhvZChh
dXRoZW50aWNhdGlvbi5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcmVhbG1D
RiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVudGljYXRpb25Db3B5UmVhbG0oYXV0aGVudGljYXRpb24u
Z2V0KCkpKTsKLQotICAgIGlmICghbWV0aG9kQ0YgfHwgIXJlYWxtQ0YpIHsKLSAgICAgICAgLy8g
VGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgb24gc29tZSBPUyB2ZXJzaW9ucyB3ZSBnZXQgaW5j
b21wbGV0ZSBhdXRoZW50aWNhdGlvbiBkYXRhLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzEwNDE2MzE2
Pi4KLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3Ry
ZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQgcHJveHkgYXV0aGVudGljYXRp
b24gY291bGRuJ3QgYmUgaGFuZGxlZCIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UoU3RyaW5nKG1fcHJveHlIb3N0LmdldCgp
KSwgcG9ydCwgUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUywgU3RyaW5nKHJlYWxtQ0YuZ2V0KCkp
LCBhdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhvZChtZXRob2RDRi5n
ZXQoKSkpOwotICAgIFN0cmluZyBsb2dpbjsKLSAgICBTdHJpbmcgcGFzc3dvcmQ7Ci0gICAgaWYg
KCFtX3NlbnRTdG9yZWRDcmVkZW50aWFscyAmJiBnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50
aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxvZ2luLCBwYXNzd29yZCkpIHsKLSAgICAgICAgLy8gVHJ5
IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50aWFscywgaWYgd2UgaGF2ZW4ndCB0cmllZCB0aG9zZSBh
bHJlYWR5LgotICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgcmVxdWVzdCB0byBtYWtlIENG
TmV0d29yayBhcHBseSBjcmVkZW50aWFscyB0byBpdC4gVW5mb3J0dW5hdGVseSwgdGhpcyBjYW5u
b3Qgd29yayB3aXRoIE5UTE0gYXV0aGVudGljYXRpb24uCi0gICAgICAgIFJldGFpblB0cjxDRkhU
VFBNZXNzYWdlUmVmPiBkdW1teVJlcXVlc3QgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVS
ZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwgbV9odHRwc1VSTC5nZXQoKSwga0NGSFRUUFZlcnNpb24x
XzEpKTsKLQotICAgICAgICBCb29sZWFuIGFwcGxpZWRDcmVkZW50aWFscyA9IENGSFRUUE1lc3Nh
Z2VBcHBseUNyZWRlbnRpYWxzKGR1bW15UmVxdWVzdC5nZXQoKSwgYXV0aGVudGljYXRpb24uZ2V0
KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHBhc3N3b3JkLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIDApOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFwcGxpZWRDcmVkZW50aWFscywg
YXBwbGllZENyZWRlbnRpYWxzKTsKLQotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBy
b3h5QXV0aG9yaXphdGlvblN0cmluZyA9IGFkb3B0Q0YoQ0ZIVFRQTWVzc2FnZUNvcHlIZWFkZXJG
aWVsZFZhbHVlKGR1bW15UmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIlByb3h5LUF1dGhvcml6YXRpb24i
KSkpOwotCi0gICAgICAgIGlmICghcHJveHlBdXRob3JpemF0aW9uU3RyaW5nKSB7Ci0gICAgICAg
ICAgICAvLyBGYWlscyBlLmcuIGZvciBOVExNIGF1dGguCi0gICAgICAgICAgICBtX2NsaWVudC5k
aWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcigwLCBtX3VybC5zdHJp
bmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBX
ZWJTb2NrZXRzIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiByZXN1bHRzIGluIGEgbmV3IGNvbm5lY3Rpb24g
YXR0ZW1wdC4KLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlBdXRob3JpemF0aW9uRm9yU3RyZWFt
KG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJveHlBdXRob3JpemF0aW9uU3RyaW5nLmdldCgpKTsKLSAg
ICAgICAgbV9zZW50U3RvcmVkQ3JlZGVudGlhbHMgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gRklYTUU6IE9uIHBsYXRmb3JtcyB3aGVyZSBBdXRoQnJva2VyQWdlbnQg
aXMgbm90IGF2YWlsYWJsZSwgYXNrIHRoZSBjbGllbnQgaWYgY3JlZGVudGlhbHMgY291bGQgbm90
IGJlIGZvdW5kLgotCi0gICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29j
a2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJQcm94eSBjcmVkZW50aWFscyBhcmUg
bm90IGF2YWlsYWJsZSIpKTsKLX0KLQotQ0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpj
b3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQotewotICAgIFNvY2tldFN0cmVhbUhh
bmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7Ci0g
ICAgcmV0dXJuIFN0cmluZygiV2ViS2l0IHNvY2tldCBzdHJlYW0sICIgKyBoYW5kbGUtPm1fdXJs
LnN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpLmxlYWtSZWYoKTsKLX0KLQotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBD
RlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCi17Ci0gICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5k
bGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJl
YW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIC8vIFdvcmthcm91bmQgZm9y
IDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3Mz4uIEtlZXBpbmcgdGhpcyBiZWxvdyB0aGUgYXNzZXJ0
aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIgc3RlcHMgdG8gcmVwcm9kdWNlIHRoaXMuCi0gICAgaWYg
KCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgUExBVEZPUk0o
V0lOKQotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RvcihoYW5kbGUpOwot
ICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFsmXSB7Ci0gICAgICAgIGlmIChoYW5kbGUtPm1f
cmVhZFN0cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUp
OwotICAgIH0pOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGhhbmRs
ZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOwotI2VuZGlmCi19Ci0KLXZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVTdHJlYW1SZWYgc3RyZWFtLCBD
RlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCi17Ci0gICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5k
bGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJl
YW0gPT0gaGFuZGxlLT5tX3dyaXRlU3RyZWFtLmdldCgpKTsKLSAgICAvLyBUaGlzIHdhc24ndCBz
ZWVuIGhhcHBlbmluZyBpbiBwcmFjdGljZSwgeWV0IGl0IHNlZW1zIGxpa2UgaXQgY291bGQsIGR1
ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQgc3RyZWFtIGNhbGxiYWNrLgotICAgIGlmICghaGFuZGxl
LT5tX3dyaXRlU3RyZWFtKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShXSU4pCi0g
ICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdG9yKGhhbmRsZSk7Ci0gICAgY2Fs
bE9uTWFpblRocmVhZEFuZFdhaXQoWyZdIHsKLSAgICAgICAgaWYgKGhhbmRsZS0+bV93cml0ZVN0
cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+d3JpdGVTdHJlYW1DYWxsYmFjayh0eXBlKTsKLSAg
ICB9KTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBoYW5kbGUtPndy
aXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSB0eXBlKQotewotICAg
IHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE5vbmU6Ci0gICAgICAgIHJl
dHVybjsKLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50T3BlbkNvbXBsZXRlZDoKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJsZTogewotICAgICAg
ICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gV2FpdGluZ0ZvckNyZWRlbnRpYWxzKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBX
YWl0aW5nRm9yQ29ubmVjdCkgewotICAgICAgICAgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0g
Q09OTkVDVFByb3h5KSB7Ci0gICAgICAgICAgICAgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VS
ZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9wdENGKHdrQ29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKG1f
cmVhZFN0cmVhbS5nZXQoKSwgbV9odHRwc1VSTC5nZXQoKSwgbV9wcm94eUhvc3QuZ2V0KCksIG1f
cHJveHlQb3J0LmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm94eVJlc3BvbnNlKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBDRkluZGV4IHBy
b3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShwcm94
eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3h5UmVzcG9uc2VD
b2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyMDA6Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgY2FzZSA0MDc6Ci0gICAgICAgICAgICAgICAgICAgIGFkZENPTk5FQ1RDcmVk
ZW50aWFscyhwcm94eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIG1fY2xpZW50
LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9yKHN0YXRpY19jYXN0
PGludD4ocHJveHlSZXNwb25zZUNvZGUpLCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGNvbm5lY3Rp
b24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCB1bmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUiKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwotICAgICAgICAgICAgbV9zdGF0ZSA9
IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUg
bWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2UgdGhlIGNvbm5lY3Rp
b24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsKLSAgICAgICAgQVNTRVJUKG1fY29u
bmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAgICAgICAgQ0ZJbmRleCBsZW5ndGg7
Ci0gICAgICAgIFVJbnQ4IGxvY2FsQnVmZmVyWzEwMjRdOyAvLyBVc2VkIGlmIENGUmVhZFN0cmVh
bUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1cm4gYW55dGhpbmcuCi0gICAgICAgIGNvbnN0IFVJbnQ4
KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRCdWZmZXIobV9yZWFkU3RyZWFtLmdldCgpLCAwLCAmbGVu
Z3RoKTsKLSAgICAgICAgaWYgKCFwdHIpIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IENGUmVhZFN0
cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdldCgpLCBsb2NhbEJ1ZmZlciwgc2l6ZW9mKGxvY2FsQnVm
ZmVyKSk7Ci0gICAgICAgICAgICBwdHIgPSBsb2NhbEJ1ZmZlcjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fY2xpZW50
LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihwdHIpLCBsZW5ndGgpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRFcnJvck9jY3Vy
cmVkOiB7Ci0gICAgICAgIFJldGFpblB0cjxDRkVycm9yUmVmPiBlcnJvciA9IGFkb3B0Q0YoQ0ZS
ZWFkU3RyZWFtQ29weUVycm9yKG1fcmVhZFN0cmVhbS5nZXQoKSkpOwotICAgICAgICByZXBvcnRF
cnJvclRvQ2xpZW50KGVycm9yLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
YXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIHBsYXRmb3JtQ2xvc2Uo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSkKLXsKLSAgICBzd2l0
Y2godHlwZSkgewotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnROb25lOgotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50SGFzQnl0ZXNBdmFpbGFibGU6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVu
dENhbkFjY2VwdEJ5dGVzOiB7Ci0gICAgICAgIC8vIENhbiBiZSBmYWxzZSBpZiByZWFkIHN0cmVh
bSBjYWxsYmFjayBqdXN0IGRlY2lkZWQgdG8gcmV0cnkgYSBDT05ORUNUIHdpdGggY3JlZGVudGlh
bHMuCi0gICAgICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJl
YW0uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX2Nvbm5lY3Rp
bmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ3JlZGVudGlhbHMpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgaWYgKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IFdhaXRpbmdGb3JDb25uZWN0
KSB7Ci0gICAgICAgICAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9PSBDT05ORUNUUHJveHkpIHsK
LSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJlZj4gcHJveHlSZXNwb25z
ZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UobV9yZWFkU3RyZWFtLmdldCgp
LCBtX2h0dHBzVVJMLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3h5UmVzcG9uc2UpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIC8vIERvbid0IHdyaXRlIGFueXRoaW5nIHVu
dGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGhhcyBkZWFsdCB3aXRoIENPTk5FQ1QgY3JlZGVudGlh
bHMuCi0gICAgICAgICAgICAgICAgLy8gVGhlIG9yZGVyIG9mIGNhbGxiYWNrcyBpcyBub3QgZGVm
aW5lZCwgc28gdGhpcyBjYW4gYmUgY2FsbGVkIGJlZm9yZSByZWFkU3RyZWFtQ2FsbGJhY2sncyBr
Q0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlLgotICAgICAgICAgICAgICAgIENGSW5kZXgg
cHJveHlSZXNwb25zZUNvZGUgPSBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VTdGF0dXNDb2RlKHBy
b3h5UmVzcG9uc2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChwcm94eVJlc3BvbnNlQ29k
ZSAhPSAyMDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwotICAgICAgICAgICAg
bV9zdGF0ZSA9IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFt
KCp0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNv
dWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2UgdGhl
IGNvbm5lY3Rpb24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsKLSAgICAgICAgQVNT
RVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAgICAgICAgc2VuZFBl
bmRpbmdEYXRhKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1F
dmVudEVycm9yT2NjdXJyZWQ6IHsKLSAgICAgICAgUmV0YWluUHRyPENGRXJyb3JSZWY+IGVycm9y
ID0gYWRvcHRDRihDRldyaXRlU3RyZWFtQ29weUVycm9yKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKTsK
LSAgICAgICAgcmVwb3J0RXJyb3JUb0NsaWVudChlcnJvci5nZXQoKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVuZEVuY291bnRlcmVkOgotICAgICAg
ICAvLyBGSVhNRTogQ3VycmVudGx5LCB3ZSBoYW5kbGUgY2xvc2luZyBpbiByZWFkIGNhbGxiYWNr
LCBidXQgdGhlc2UgY2FuIGNvbWUgaW5kZXBlbmRlbnRseSAoZS5nLiBhIHNlcnZlciBjYW4gc3Rv
cCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNlbmRpbmcgZGF0YSkuCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2xpZW50KENG
RXJyb3JSZWYgZXJyb3IpCi17Ci0gICAgQ0ZJbmRleCBlcnJvckNvZGUgPSBDRkVycm9yR2V0Q29k
ZShlcnJvcik7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotCi0jaWYgUExBVEZPUk0oTUFDKQot
Ci0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMi
Ci0jZW5kaWYKLQotICAgIGlmIChDRkVxdWFsKENGRXJyb3JHZXREb21haW4oZXJyb3IpLCBrQ0ZF
cnJvckRvbWFpbk9TU3RhdHVzKSkgewotICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbk9T
U3RhdHVzID0gR2V0TWFjT1NTdGF0dXNDb21tZW50U3RyaW5nKHN0YXRpY19jYXN0PE9TU3RhdHVz
PihlcnJvckNvZGUpKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uT1NTdGF0dXMgJiYgZGVzY3Jp
cHRpb25PU1N0YXR1c1swXSAhPSAnXDAnKQotICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiT1NT
dGF0dXMgRXJyb3IgIiArIFN0cmluZzo6bnVtYmVyKGVycm9yQ29kZSkgKyAiOiAiICsgZGVzY3Jp
cHRpb25PU1N0YXR1czsKLSAgICB9Ci0KLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIGlmIChkZXNjcmlwdGlv
bi5pc051bGwoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRlc2NyaXB0aW9u
Q0YgPSBhZG9wdENGKENGRXJyb3JDb3B5RGVzY3JpcHRpb24oZXJyb3IpKTsKLSAgICAgICAgZGVz
Y3JpcHRpb24gPSBTdHJpbmcoZGVzY3JpcHRpb25DRi5nZXQoKSk7Ci0gICAgfQotCi0gICAgbV9j
bGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3Ioc3RhdGlj
X2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX3VybC5zdHJpbmcoKSwgZGVzY3JpcHRpb24pKTsKLX0K
LQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkKLXsKLSAgICBMT0co
TmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkdG9yIiwgdGhpcyk7Ci0KLSAgICBBU1NF
UlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7Ci19Ci0KLWludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBs
YXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghQ0ZX
cml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBDRldyaXRlU3RyZWFtV3JpdGUobV93cml0ZVN0cmVhbS5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBsZW5ndGgpOwotfQot
Ci12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCi17Ci0gICAgTE9HKE5l
dHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOwotCi0g
ICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkgCi0gICAgICAgIHJlbW92ZVBBQ1J1bkxvb3BTb3Vy
Y2UoKTsKLQotICAgIEFTU0VSVCghbV9yZWFkU3RyZWFtID09ICFtX3dyaXRlU3RyZWFtKTsKLSAg
ICBpZiAoIW1fcmVhZFN0cmVhbSkgewotICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUg
PT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1YnN0YXRlID09IEV4ZWN1dGluZ1BBQ0ZpbGUpCi0gICAg
ICAgICAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgQ0ZSZWFkU3RyZWFtVW5zY2hl
ZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZS
dW5Mb29wRGVmYXVsdE1vZGUpOwotICAgIENGV3JpdGVTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxv
b3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVs
dE1vZGUpOwotI2Vsc2UKLSAgICBDRlJlYWRTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV9y
ZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25N
b2Rlcyk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVVuc2NoZWR1bGVGcm9tUnVuTG9vcChtX3dyaXRlU3Ry
ZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7
Ci0jZW5kaWYKLQotICAgIENGUmVhZFN0cmVhbUNsb3NlKG1fcmVhZFN0cmVhbS5nZXQoKSk7Ci0g
ICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOwotICAgIAotICAgIG1f
cmVhZFN0cmVhbSA9IDA7Ci0gICAgbV93cml0ZVN0cmVhbSA9IDA7Ci0KLSAgICBtX2NsaWVudC5k
aWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IFNvY2tldFN0
cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKHVuc2lnbmVkIHNob3J0IHVybFBv
cnQgPSBtX3VybC5wb3J0KCkpCi0gICAgICAgIHJldHVybiB1cmxQb3J0OwotICAgIGlmIChzaG91
bGRVc2VTU0woKSkKLSAgICAgICAgcmV0dXJuIDQ0MzsKLSAgICByZXR1cm4gODA7Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCShyZXZp
c2lvbiAyMDQ0NjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29j
a2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisjaW5jbHVkZSAi
U29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX19D
RkhUVFBNZXNzYWdlKiBDRkhUVFBNZXNzYWdlUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENyZWRlbnRpYWw7CitjbGFzcyBQcm90ZWN0aW9uU3BhY2U7CitjbGFzcyBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3Ry
ZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5k
bGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGll
bnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3Ry
ZWFtSGFuZGxlKHVybCwgY2xpZW50LCBzZXNzaW9uSUQpKTsgfQorCisgICAgdmlydHVhbCB+U29j
a2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBpbnQgcGxhdGZvcm1T
ZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0
Zm9ybUNsb3NlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTb2NrZXRTdHJlYW1IYW5kbGUoY29u
c3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiwgU2Vzc2lvbklEKTsKKyAgICB2b2lk
IGNyZWF0ZVN0cmVhbXMoKTsKKyAgICB2b2lkIHNjaGVkdWxlU3RyZWFtcygpOworICAgIHZvaWQg
Y2hvb3NlUHJveHkoKTsKKyAgICB2b2lkIGNob29zZVByb3h5RnJvbUFycmF5KENGQXJyYXlSZWYp
OworICAgIHZvaWQgZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYpOworICAgIHZvaWQgcmVtb3Zl
UEFDUnVuTG9vcFNvdXJjZSgpOworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BTb3VyY2VSZWY+IG1f
cGFjUnVuTG9vcFNvdXJjZTsKKyAgICBzdGF0aWMgdm9pZCBwYWNFeGVjdXRpb25DYWxsYmFjayh2
b2lkKiBjbGllbnQsIENGQXJyYXlSZWYgcHJveHlMaXN0LCBDRkVycm9yUmVmIGVycm9yKTsKKyAg
ICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0aW9uKHZvaWQqKTsK
KworICAgIGJvb2wgc2hvdWxkVXNlU1NMKCkgY29uc3QgeyByZXR1cm4gbV91cmwucHJvdG9jb2xJ
cygid3NzIik7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0KCkgY29uc3Q7CisKKyAgICB2b2lk
IGFkZENPTk5FQ1RDcmVkZW50aWFscyhDRkhUVFBNZXNzYWdlUmVmIHJlc3BvbnNlKTsKKworICAg
IHN0YXRpYyB2b2lkKiByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCopOworICAgIHN0YXRp
YyB2b2lkIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCopOworICAgIHN0YXRpYyBDRlN0
cmluZ1JlZiBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKik7CisgICAgc3RhdGljIHZvaWQg
cmVhZFN0cmVhbUNhbGxiYWNrKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJlYW1FdmVudFR5cGUsIHZv
aWQqKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVTdHJlYW1S
ZWYsIENGU3RyZWFtRXZlbnRUeXBlLCB2b2lkKik7CisgICAgdm9pZCByZWFkU3RyZWFtQ2FsbGJh
Y2soQ0ZTdHJlYW1FdmVudFR5cGUpOworICAgIHZvaWQgd3JpdGVTdHJlYW1DYWxsYmFjayhDRlN0
cmVhbUV2ZW50VHlwZSk7CisKKyAgICB2b2lkIHJlcG9ydEVycm9yVG9DbGllbnQoQ0ZFcnJvclJl
Zik7CisKKyAgICBib29sIGdldFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYsIFN0cmluZyYgbG9naW4sIFN0cmluZyYgcGFzc3dvcmQpOworCisgICAg
ZW51bSBDb25uZWN0aW5nU3Vic3RhdGUgeyBOZXcsIEV4ZWN1dGluZ1BBQ0ZpbGUsIFdhaXRpbmdG
b3JDcmVkZW50aWFscywgV2FpdGluZ0ZvckNvbm5lY3QsIENvbm5lY3RlZCB9OworICAgIENvbm5l
Y3RpbmdTdWJzdGF0ZSBtX2Nvbm5lY3RpbmdTdWJzdGF0ZTsKKworICAgIGVudW0gQ29ubmVjdGlv
blR5cGUgeyBVbmtub3duLCBEaXJlY3QsIFNPQ0tTUHJveHksIENPTk5FQ1RQcm94eSB9OworICAg
IENvbm5lY3Rpb25UeXBlIG1fY29ubmVjdGlvblR5cGU7CisgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBtX3Byb3h5SG9zdDsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IG1fcHJveHlQb3J0
OworCisgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VSZWY+IG1fcHJveHlSZXNwb25zZU1lc3Nh
Z2U7CisgICAgYm9vbCBtX3NlbnRTdG9yZWRDcmVkZW50aWFsczsKKyAgICBSZXRhaW5QdHI8Q0ZS
ZWFkU3RyZWFtUmVmPiBtX3JlYWRTdHJlYW07CisgICAgUmV0YWluUHRyPENGV3JpdGVTdHJlYW1S
ZWY+IG1fd3JpdGVTdHJlYW07CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IG1faHR0cHNVUkw7
IC8vIHdzKHMpOiByZXBsYWNlZCB3aXRoIGh0dHBzOgorICAgIFNlc3Npb25JRCBtX3Nlc3Npb25J
RDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGwuaAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMy
LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgiCi0jaW5jbHVkZSAi
U29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5o
IgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX19DRkhUVFBNZXNzYWdlKiBDRkhUVFBNZXNz
YWdlUmVmOwogCkBAIC00NCwxNyArNDMsMTcgQEAgY2xhc3MgQ3JlZGVudGlhbDsKIGNsYXNzIFBy
b3RlY3Rpb25TcGFjZTsKIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudDsKIAotY2xhc3Mg
U29ja2V0U3RyZWFtSGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNvY2tldFN0
cmVhbUhhbmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK2NsYXNzIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IFVSTCYgdXJs
LCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lvbklEIHNlc3Npb25JRCkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQsIHNl
c3Npb25JRCkpOyB9CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShj
b25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25J
RCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlSW1w
bCh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKSk7IH0KIAotICAgIHZpcnR1YWwgflNvY2tldFN0cmVh
bUhhbmRsZSgpOworICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZUltcGwoKTsKIAogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKTsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQmLCBTZXNzaW9uSUQpOworICAgIFdFQkNPUkVfRVhQT1JUIFNvY2tldFN0cmVhbUhh
bmRsZUltcGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiwgU2Vzc2lvbklE
KTsKICAgICB2b2lkIGNyZWF0ZVN0cmVhbXMoKTsKICAgICB2b2lkIHNjaGVkdWxlU3RyZWFtcygp
OwogICAgIHZvaWQgY2hvb3NlUHJveHkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUlt
cGxDRk5ldC5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHA6MjA0NDY2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZO
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisKKyNpbmNsdWRlICJDcmVk
ZW50aWFsLmgiCisjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCisjaW5jbHVkZSAiUHJv
dGVjdGlvblNwYWNlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTb2NrZXRT
dHJlYW1FcnJvci5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNp
ZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2VuZGlm
CisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCisjaW5j
bHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVy
ZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbHNlCisjaW5jbHVkZSAiV2ViQ29yZVN5
c3RlbUludGVyZmFjZS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JN
KE1BQykKK2V4dGVybiAiQyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tDRlN0cmVhbVNvY2tldFNldE5v
RGVsYXk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2ltcG9ydCA8Q0ZOZXR3b3Jr
U1BJLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTb2NrZXRTdHJlYW1IYW5k
bGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBTb2NrZXRTdHJlYW1I
YW5kbGVCYXNlKHVybCwgY2xpZW50KQorICAgICwgbV9jb25uZWN0aW5nU3Vic3RhdGUoTmV3KQor
ICAgICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQorICAgICwgbV9zZW50U3RvcmVkQ3JlZGVu
dGlhbHMoZmFsc2UpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCit7CisgICAgTE9HKE5l
dHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2Ns
aWVudCk7CisKKyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoIndzIikgfHwgdXJsLnByb3RvY29s
SXMoIndzcyIpKTsKKworICAgIFVSTCBodHRwc1VSTChVUkwoKSwgImh0dHBzOi8vIiArIG1fdXJs
Lmhvc3QoKSk7CisgICAgbV9odHRwc1VSTCA9IGh0dHBzVVJMLmNyZWF0ZUNGVVJMKCk7CisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyBEb24ndCBjaGVjayBmb3IgSFNUUyB2aW9sYXRpb24g
Zm9yIGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZQorICAgIC8vIEhTVFMgc3RhdGUgc2hvdWxkIG5v
dCB0cmFuc2ZlciBiZXR3ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUgYnJvd3NpbmcuCisgICAgaWYg
KHVybC5wcm90b2NvbElzKCJ3cyIpCisgICAgICAgICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwo
KQorICAgICAgICAmJiBfQ0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0V2l0aFNlc3Npb24obV9odHRw
c1VSTC5nZXQoKSwgbnVsbHB0cikpIHsKKyAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0
cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2Nr
ZXQgY29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRlcyBIVFRQIFN0cmljdCBUcmFu
c3BvcnQgU2VjdXJpdHkuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAg
ICBjcmVhdGVTdHJlYW1zKCk7CisgICAgQVNTRVJUKCFtX3JlYWRTdHJlYW0gPT0gIW1fd3JpdGVT
dHJlYW0pOworICAgIGlmICghbV9yZWFkU3RyZWFtKSAvLyBEb2luZyBhc3luY2hyb25vdXMgUEFD
IGZpbGUgcHJvY2Vzc2luZywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0ZWQgbGF0ZXIuCisgICAgICAg
IHJldHVybjsKKworICAgIHNjaGVkdWxlU3RyZWFtcygpOworfQorCit2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZTo6c2NoZWR1bGVTdHJlYW1zKCkKK3sKKyAgICBBU1NFUlQobV9yZWFkU3RyZWFtKTsK
KyAgICBBU1NFUlQobV93cml0ZVN0cmVhbSk7CisKKyAgICBDRlN0cmVhbUNsaWVudENvbnRleHQg
Y2xpZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0YWluU29ja2V0U3RyZWFtSGFuZGxlLCByZWxl
YXNlU29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbiB9OworICAgIC8v
IEZJWE1FOiBQYXNzIHNwZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRlcmVzdGVkIGluIGluc3RlYWQg
b2YgLTEuCisgICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVhZFN0cmVhbS5nZXQoKSwgc3Rh
dGljX2Nhc3Q8Q0ZPcHRpb25GbGFncz4oLTEpLCByZWFkU3RyZWFtQ2FsbGJhY2ssICZjbGllbnRD
b250ZXh0KTsKKyAgICBDRldyaXRlU3RyZWFtU2V0Q2xpZW50KG1fd3JpdGVTdHJlYW0uZ2V0KCks
IHN0YXRpY19jYXN0PENGT3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVTdHJlYW1DYWxsYmFjaywgJmNs
aWVudENvbnRleHQpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIENGUmVhZFN0cmVhbVNjaGVk
dWxlV2l0aFJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1
bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgQ0ZXcml0ZVN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3Ao
bV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1v
ZGUpOworI2Vsc2UKKyAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fcmVhZFN0
cmVhbS5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMp
OworICAgIENGV3JpdGVTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fd3JpdGVTdHJlYW0uZ2V0
KCksIENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKKyNlbmRp
ZgorCisgICAgQ0ZSZWFkU3RyZWFtT3BlbihtX3JlYWRTdHJlYW0uZ2V0KCkpOworICAgIENGV3Jp
dGVTdHJlYW1PcGVuKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOworCisgICAgaWYgKG1fcGFjUnVuTG9v
cFNvdXJjZSkKKyAgICAgICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOworCisgICAgbV9jb25u
ZWN0aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKK30KKwordm9pZCogU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5mbykKK3sKKyAgICBT
b2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRs
ZSo+KGluZm8pOworICAgIGhhbmRsZS0+cmVmKCk7CisgICAgcmV0dXJuIGhhbmRsZTsKK30KKwor
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCog
aW5mbykKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNv
Y2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIGhhbmRsZS0+ZGVyZWYoKTsKK30KKworQ0ZT
dHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24o
dm9pZCopCit7CisgICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQgcHJveHkgUEFDIGZpbGUgZXhl
Y3V0aW9uIik7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0ZDo6
ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7
CisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBMb2Nr
IG11dGV4OworICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJsZTsKKworICAgIGJvb2wgaXNG
aW5pc2hlZCA9IGZhbHNlOworCisgICAgY2FsbE9uTWFpblRocmVhZChbJl0geworICAgICAgICBm
dW5jdGlvbigpOworCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG11dGV4KTsK
KyAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7CisgICAgICAgIGNvbmRpdGlvblZhcmlhYmxlLm5v
dGlmeU9uZSgpOworICAgIH0pOworCisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG11
dGV4KTsKKyAgICBjb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFsmXSB7IHJldHVybiBpc0Zp
bmlzaGVkOyB9KTsKK30KKworc3RydWN0IE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8geworICAg
IE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUsIENG
QXJyYXlSZWYgcHJveHlMaXN0KSA6IGhhbmRsZShoYW5kbGUpLCBwcm94eUxpc3QocHJveHlMaXN0
KSB7IH0KKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBoYW5kbGU7CisgICAgQ0ZBcnJh
eVJlZiBwcm94eUxpc3Q7Cit9OworCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGFjRXhlY3V0
aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJl
ZikKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSo+KGNsaWVudCk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChb
Jl0geworICAgICAgICBBU1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBFeGVj
dXRpbmdQQUNGaWxlKTsKKyAgICAgICAgLy8gVGhpcyB0aW1lLCB0aGUgYXJyYXkgd29uJ3QgaGF2
ZSBQQUMgYXMgYSBmaXJzdCBlbnRyeS4KKyAgICAgICAgaWYgKGhhbmRsZS0+bV9zdGF0ZSAhPSBD
b25uZWN0aW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBoYW5kbGUtPmNob29zZVBy
b3h5RnJvbUFycmF5KHByb3h5TGlzdCk7CisgICAgICAgIGhhbmRsZS0+Y3JlYXRlU3RyZWFtcygp
OworICAgICAgICBoYW5kbGUtPnNjaGVkdWxlU3RyZWFtcygpOworICAgIH0pOworfQorCit2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVS
TCkKK3sKKyAgICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3Ig
V2ViU29ja2V0IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgorICAgIENGU3RyZWFtQ2xpZW50
Q29udGV4dCBjbGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5k
bGUsIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlv
biB9OworICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrRXhlY3V0ZVBy
b3h5QXV0b0NvbmZpZ3VyYXRpb25VUkwocGFjRmlsZVVSTCwgbV9odHRwc1VSTC5nZXQoKSwgcGFj
RXhlY3V0aW9uQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KSk7CisjaWYgUExBVEZPUk0oV0lOKQor
ICAgIENGUnVuTG9vcEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJj
ZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgQ0ZSdW5Mb29wQWRk
U291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBr
Q0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworI2VuZGlmCisgICAgbV9jb25uZWN0aW5nU3Vic3RhdGUg
PSBFeGVjdXRpbmdQQUNGaWxlOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVtb3Zl
UEFDUnVuTG9vcFNvdXJjZSgpCit7CisgICAgQVNTRVJUKG1fcGFjUnVuTG9vcFNvdXJjZSk7CisK
KyAgICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSk7
CisjaWYgUExBVEZPUk0oV0lOKQorICAgIENGUnVuTG9vcFJlbW92ZVNvdXJjZShsb2FkZXJSdW5M
b29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsK
KyNlbHNlCisgICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwg
bV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworI2VuZGlm
CisgICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmNob29zZVByb3h5KCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94
eURpY3Rpb25hcnkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdzKCkp
OworCisgICAgLy8gU09DS1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNUKSBwcm94aWVzIGFyZSBzdXBw
b3J0ZWQuCisgICAgLy8gV2ViU29ja2V0IHByb3RvY29sIHJlbGllcyBvbiBoYW5kc2hha2UgYmVp
bmcgdHJhbnNmZXJyZWQgdW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEgcHJveHkgdGhhdCB3aWxsIG5v
dCBtb2RpZnkgaGVhZGVycy4KKyAgICAvLyBTaW5jZSBIVFRQIHByb3hpZXMgbXVzdCBhZGQgVmlh
IGhlYWRlcnMsIHRoZXkgYXJlIGhpZ2hseSB1bmxpa2VseSB0byB3b3JrLgorICAgIC8vIE1hbnkg
Q09OTkVDVCBwcm94aWVzIGxpbWl0IGNvbm5lY3Rpdml0eSB0byBwb3J0IDQ0Mywgc28gd2UgcHJl
ZmVyIFNPQ0tTLCBpZiBjb25maWd1cmVkLgorCisgICAgaWYgKCFwcm94eURpY3Rpb25hcnkpIHsK
KyAgICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJMIGRvZXNuJ3Qga25vdyBhYm91
dCBXZWJTb2NrZXQgc2NoZW1lcywgc28gcHJldGVuZCB0byB1c2UgaHR0cC4KKyAgICAvLyBBbHdh
eXMgdXNlICJodHRwcyIgdG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4gcmVzdWx0IC0gd2UnbGwgdHJ5
IHRvIHVzZSB0aG9zZSBmb3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFueSBhcmUgY29uZmlndXJlZCB0
byByZWplY3QgY29ubmVjdGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhhbiA0NDMuCisgICAgUmV0YWlu
UHRyPENGQXJyYXlSZWY+IHByb3h5QXJyYXkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlQcm94aWVz
Rm9yVVJMKG1faHR0cHNVUkwuZ2V0KCksIHByb3h5RGljdGlvbmFyeS5nZXQoKSkpOworCisgICAg
Y2hvb3NlUHJveHlGcm9tQXJyYXkocHJveHlBcnJheS5nZXQoKSk7Cit9CisKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkp
Cit7CisgICAgaWYgKCFwcm94eUFycmF5KSB7CisgICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBE
aXJlY3Q7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDRkluZGV4IHByb3h5QXJyYXlD
b3VudCA9IENGQXJyYXlHZXRDb3VudChwcm94eUFycmF5KTsKKworICAgIC8vIFBBQyBpcyBhbHdh
eXMgdGhlIGZpcnN0IGVudHJ5LCBpZiBwcmVzZW50LgorICAgIGlmIChwcm94eUFycmF5Q291bnQp
IHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9IHN0YXRpY19jYXN0PENGRGlj
dGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwcm94eUFycmF5LCAwKSk7CisgICAg
ICAgIENGVHlwZVJlZiBwcm94eVR5cGUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm94eUluZm8s
IGtDRlByb3h5VHlwZUtleSk7CisgICAgICAgIGlmIChwcm94eVR5cGUgJiYgQ0ZHZXRUeXBlSUQo
cHJveHlUeXBlKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7CisgICAgICAgICAgICBpZiAoQ0ZF
cXVhbChwcm94eVR5cGUsIGtDRlByb3h5VHlwZUF1dG9Db25maWd1cmF0aW9uVVJMKSkgeworICAg
ICAgICAgICAgICAgIENGVHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
cHJveHlJbmZvLCBrQ0ZQcm94eUF1dG9Db25maWd1cmF0aW9uVVJMS2V5KTsKKyAgICAgICAgICAg
ICAgICBpZiAocGFjRmlsZVVSTCAmJiBDRkdldFR5cGVJRChwYWNGaWxlVVJMKSA9PSBDRlVSTEdl
dFR5cGVJRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVQQUNGaWxlVVJMKHN0YXRp
Y19jYXN0PENGVVJMUmVmPihwYWNGaWxlVVJMKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBDRkRpY3Rpb25hcnlSZWYgY2hvc2VuUHJveHkgPSAwOworICAgIGZvciAoQ0ZJbmRleCBp
ID0gMDsgaSA8IHByb3h5QXJyYXlDb3VudDsgKytpKSB7CisgICAgICAgIENGRGljdGlvbmFyeVJl
ZiBwcm94eUluZm8gPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgocHJveHlBcnJheSwgaSkpOworICAgICAgICBDRlR5cGVSZWYgcHJveHlUeXBlID0g
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eVR5cGVLZXkpOworICAgICAg
ICBpZiAocHJveHlUeXBlICYmIENGR2V0VHlwZUlEKHByb3h5VHlwZSkgPT0gQ0ZTdHJpbmdHZXRU
eXBlSUQoKSkgeworICAgICAgICAgICAgaWYgKENGRXF1YWwocHJveHlUeXBlLCBrQ0ZQcm94eVR5
cGVTT0NLUykpIHsKKyAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rpb25UeXBlID0gU09DS1NQcm94
eTsKKyAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChDRkVxdWFsKHByb3h5
VHlwZSwga0NGUHJveHlUeXBlSFRUUFMpKSB7CisgICAgICAgICAgICAgICAgbV9jb25uZWN0aW9u
VHlwZSA9IENPTk5FQ1RQcm94eTsKKyAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5
SW5mbzsKKyAgICAgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcgZm9yIHByb3hpZXMsIGFzIGEg
U09DS1Mgb25lIGlzIHByZWZlcmFibGUuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoY2hvc2VuUHJveHkpIHsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGlvblR5
cGUgIT0gVW5rbm93bik7CisgICAgICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25UeXBlICE9IERpcmVj
dCk7CisKKyAgICAgICAgQ0ZUeXBlUmVmIHByb3h5SG9zdCA9IENGRGljdGlvbmFyeUdldFZhbHVl
KGNob3NlblByb3h5LCBrQ0ZQcm94eUhvc3ROYW1lS2V5KTsKKyAgICAgICAgQ0ZUeXBlUmVmIHBy
b3h5UG9ydCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eVBvcnRO
dW1iZXJLZXkpOworCisgICAgICAgIGlmIChwcm94eUhvc3QgJiYgQ0ZHZXRUeXBlSUQocHJveHlI
b3N0KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpICYmIHByb3h5UG9ydCAmJiBDRkdldFR5cGVJRChw
cm94eVBvcnQpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIG1fcHJveHlI
b3N0ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9zdCk7CisgICAgICAgICAgICBt
X3Byb3h5UG9ydCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihwcm94eVBvcnQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb25uZWN0aW9uVHlwZSA9
IERpcmVjdDsKK30KKworCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygp
Cit7CisgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gVW5rbm93bikKKyAgICAgICAgY2hvb3Nl
UHJveHkoKTsKKworICAgIC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93biwgdGhlbiB3ZSdyZSByZXNv
bHZpbmcgYSBQQUMgZmlsZSBhc3luY2hyb25vdXNseS4KKyAgICBpZiAobV9jb25uZWN0aW9uVHlw
ZSA9PSBVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGhvc3QgPSBtX3VybC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKworICAgIC8vIENyZWF0
aW5nIHN0cmVhbXMgdG8gZmluYWwgZGVzdGluYXRpb24sIG5vdCB0byBwcm94eS4KKyAgICBDRlJl
YWRTdHJlYW1SZWYgcmVhZFN0cmVhbSA9IDA7CisgICAgQ0ZXcml0ZVN0cmVhbVJlZiB3cml0ZVN0
cmVhbSA9IDA7CisgICAgQ0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNvY2tldFRvSG9zdCgwLCBob3N0
LmdldCgpLCBwb3J0KCksICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJlYW0pOworI2lmIFBMQVRGT1JN
KElPUykgfHwgUExBVEZPUk0oTUFDKQorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMjg1NTU4Nz4g
X2tDRlN0cmVhbVNvY2tldFNldE5vRGVsYXkgaXMgbm90IGV4cG9ydGVkIG9uIFdpbmRvd3MKKyAg
ICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkod3JpdGVTdHJlYW0sIF9rQ0ZTdHJlYW1Tb2NrZXRT
ZXROb0RlbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisjZW5kaWYKKworICAgIG1fcmVhZFN0cmVhbSA9
IGFkb3B0Q0YocmVhZFN0cmVhbSk7CisgICAgbV93cml0ZVN0cmVhbSA9IGFkb3B0Q0Yod3JpdGVT
dHJlYW0pOworCisgICAgc3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBlKSB7CisgICAgY2FzZSBVbmtu
b3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBEaXJlY3Q6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU09DS1NQcm94eTogeworICAg
ICAgICAvLyBGSVhNRTogU09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxlbmdlLXJlc3BvbnNlLCBzaG91
bGQgd2UgdHJ5IHRvIGFwcGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5Y2hhaW4gcmlnaHQgYXdheT8K
KyAgICAgICAgLy8gQnV0IFNPQ0tTNSBjcmVkZW50aWFscyBkb24ndCB3b3JrIGF0IHRoZSB0aW1l
IG9mIHRoaXMgd3JpdGluZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3NzY2OTg+LgorICAgICAgICBj
b25zdCB2b2lkKiBwcm94eUtleXNbXSA9IHsga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5SG9z
dCwga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5UG9ydCB9OworICAgICAgICBjb25zdCB2b2lk
KiBwcm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkg
fTsKKyAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29ubmVjdERpY3Rpb25hcnkg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtleXMsIHByb3h5VmFsdWVzLCBX
VEZfQVJSQVlfTEVOR1RIKHByb3h5S2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICAgICAgQ0ZSZWFkU3Ry
ZWFtU2V0UHJvcGVydHkobV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZTdHJlYW1Qcm9wZXJ0eVNPQ0tT
UHJveHksIGNvbm5lY3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICBjYXNlIENPTk5FQ1RQcm94eToKKyAgICAgICAgd2tTZXRDT05ORUNUUHJveHlGb3JT
dHJlYW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQu
Z2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkVXNlU1NMKCkp
IHsKKyAgICAgICAgQ0ZCb29sZWFuUmVmIHZhbGlkYXRlQ2VydGlmaWNhdGVDaGFpbiA9IFNldHRp
bmdzOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9vbGVhbkZhbHNlIDoga0NGQm9v
bGVhblRydWU7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9IHsga0NGU3RyZWFtU1NMUGVl
ck5hbWUsIGtDRlN0cmVhbVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZpY2F0
ZUNoYWluIH07CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBob3N0LmdldCgpLCBr
Q0ZTdHJlYW1Tb2NrZXRTZWN1cml0eUxldmVsTmVnb3RpYXRlZFNTTCwgdmFsaWRhdGVDZXJ0aWZp
Y2F0ZUNoYWluIH07CisgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNldHRpbmdz
ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlf
TEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIENGUmVhZFN0cmVhbVNldFByb3BlcnR5
KG1fcmVhZFN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGlu
Z3MuZ2V0KCkpOworICAgICAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkobV93cml0ZVN0cmVh
bS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOwor
ICAgIH0KK30KKworYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OmdldFN0b3JlZENPTk5FQ1RQcm94
eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBTdHJp
bmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIC8vIEZJWE1FICg8cmRhcjovL3By
b2JsZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJlIHJldHJpZXZlZCBm
cm9tIEF1dGhCcm9rZXJBZ2VudC4KKworICAgIC8vIFRyeSBzeXN0ZW0gY3JlZGVudGlhbCBzdG9y
YWdlIGZpcnN0LCBtYXRjaGluZyBIVFRQIGJlaGF2aW9yIChDRk5ldHdvcmsgb25seSBhc2tzIHRo
ZSBjbGllbnQgZm9yIHBhc3N3b3JkIGlmIGl0IGNvdWxkbid0IGZpbmQgaXQgaW4gS2V5Y2hhaW4p
LgorICAgIENyZWRlbnRpYWwgc3RvcmVkQ3JlZGVudGlhbDsKKyAgICBpZiAoYXV0byogc3RvcmFn
ZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lv
bklEKSkgeworICAgICAgICBzdG9yZWRDcmVkZW50aWFsID0gc3RvcmFnZVNlc3Npb24tPmNyZWRl
bnRpYWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSk7
CisgICAgICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHN0
b3JlZENyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQo
cHJvdGVjdGlvblNwYWNlKTsKKyAgICB9CisKKyAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGxvZ2luID0gc3RvcmVkQ3JlZGVu
dGlhbC51c2VyKCk7CisgICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVkZW50aWFsLnBhc3N3b3JkKCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRp
Y2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1dGhlbnRpY2F0aW9uTWV0aG9k
KENGU3RyaW5nUmVmIG1ldGhvZCkKK3sKKyAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBB
dXRoZW50aWNhdGlvblNjaGVtZUJhc2ljKSkKKyAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFj
ZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOworICAgIGlmIChDRkVxdWFsKG1ldGhvZCwg
a0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lRGlnZXN0KSkKKyAgICAgICAgcmV0dXJuIFByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKKyAgICBpZiAoQ0ZFcXVh
bChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5UTE0pKQorICAgICAgICByZXR1
cm4gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOworICAgIGlmIChDRkVx
dWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlKSkKKyAgICAg
ICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRo
ZW50aWNhdGlvblNjaGVtZVVua25vd247Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjph
ZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBwcm94eVJlc3BvbnNlKQorewor
ICAgIFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4gYXV0aGVudGljYXRpb24gPSBh
ZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJlc3BvbnNlKDAsIHByb3h5UmVz
cG9uc2UpKTsKKworICAgIGlmICghQ0ZIVFRQQXV0aGVudGljYXRpb25SZXF1aXJlc1VzZXJOYW1l
QW5kUGFzc3dvcmQoYXV0aGVudGljYXRpb24uZ2V0KCkpKSB7CisgICAgICAgIC8vIFRoYXQncyBh
bGwgd2UgY2FuIG9mZmVyLi4uCisgICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0o
KnRoaXMsIFNvY2tldFN0cmVhbUVycm9yKDAsIG1fdXJsLnN0cmluZygpLCAiUHJveHkgYXV0aGVu
dGljYXRpb24gc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdlYlNvY2tldHMiKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcG9ydCA9IDA7CisgICAgQ0ZOdW1iZXJHZXRW
YWx1ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlwZSwgJnBvcnQpOworICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0
aW9uQ29weU1ldGhvZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpOworICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gcmVhbG1DRiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVudGljYXRpb25Db3B5UmVhbG0o
YXV0aGVudGljYXRpb24uZ2V0KCkpKTsKKworICAgIGlmICghbWV0aG9kQ0YgfHwgIXJlYWxtQ0Yp
IHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgb24gc29tZSBPUyB2ZXJz
aW9ucyB3ZSBnZXQgaW5jb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBkYXRhLCBzZWUgPHJkYXI6Ly9w
cm9ibGVtLzEwNDE2MzE2Pi4KKyAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgq
dGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQgcHJv
eHkgYXV0aGVudGljYXRpb24gY291bGRuJ3QgYmUgaGFuZGxlZCIpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UoU3RyaW5nKG1f
cHJveHlIb3N0LmdldCgpKSwgcG9ydCwgUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUywgU3RyaW5n
KHJlYWxtQ0YuZ2V0KCkpLCBhdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1l
dGhvZChtZXRob2RDRi5nZXQoKSkpOworICAgIFN0cmluZyBsb2dpbjsKKyAgICBTdHJpbmcgcGFz
c3dvcmQ7CisgICAgaWYgKCFtX3NlbnRTdG9yZWRDcmVkZW50aWFscyAmJiBnZXRTdG9yZWRDT05O
RUNUUHJveHlDcmVkZW50aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxvZ2luLCBwYXNzd29yZCkpIHsK
KyAgICAgICAgLy8gVHJ5IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50aWFscywgaWYgd2UgaGF2ZW4n
dCB0cmllZCB0aG9zZSBhbHJlYWR5LgorICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgcmVx
dWVzdCB0byBtYWtlIENGTmV0d29yayBhcHBseSBjcmVkZW50aWFscyB0byBpdC4gVW5mb3J0dW5h
dGVseSwgdGhpcyBjYW5ub3Qgd29yayB3aXRoIE5UTE0gYXV0aGVudGljYXRpb24uCisgICAgICAg
IFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBkdW1teVJlcXVlc3QgPSBhZG9wdENGKENGSFRU
UE1lc3NhZ2VDcmVhdGVSZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwgbV9odHRwc1VSTC5nZXQoKSwg
a0NGSFRUUFZlcnNpb24xXzEpKTsKKworICAgICAgICBCb29sZWFuIGFwcGxpZWRDcmVkZW50aWFs
cyA9IENGSFRUUE1lc3NhZ2VBcHBseUNyZWRlbnRpYWxzKGR1bW15UmVxdWVzdC5nZXQoKSwgYXV0
aGVudGljYXRpb24uZ2V0KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHBhc3N3b3Jk
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFwcGxp
ZWRDcmVkZW50aWFscywgYXBwbGllZENyZWRlbnRpYWxzKTsKKworICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyA9IGFkb3B0Q0YoQ0ZIVFRQTWVz
c2FnZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIlByb3h5
LUF1dGhvcml6YXRpb24iKSkpOworCisgICAgICAgIGlmICghcHJveHlBdXRob3JpemF0aW9uU3Ry
aW5nKSB7CisgICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBOVExNIGF1dGguCisgICAgICAg
ICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJv
cigwLCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBpcyBub3Qg
c3VwcG9ydGVkIGZvciBXZWJTb2NrZXRzIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiByZXN1bHRzIGluIGEg
bmV3IGNvbm5lY3Rpb24gYXR0ZW1wdC4KKyAgICAgICAgd2tTZXRDT05ORUNUUHJveHlBdXRob3Jp
emF0aW9uRm9yU3RyZWFtKG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJveHlBdXRob3JpemF0aW9uU3Ry
aW5nLmdldCgpKTsKKyAgICAgICAgbV9zZW50U3RvcmVkQ3JlZGVudGlhbHMgPSB0cnVlOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IE9uIHBsYXRmb3JtcyB3aGVyZSBB
dXRoQnJva2VyQWdlbnQgaXMgbm90IGF2YWlsYWJsZSwgYXNrIHRoZSBjbGllbnQgaWYgY3JlZGVu
dGlhbHMgY291bGQgbm90IGJlIGZvdW5kLgorCisgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0
cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJQcm94eSBj
cmVkZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKK30KKworQ0ZTdHJpbmdSZWYgU29ja2V0
U3RyZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQoreworICAg
IFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFu
ZGxlKj4oaW5mbyk7CisgICAgcmV0dXJuIFN0cmluZygiV2ViS2l0IHNvY2tldCBzdHJlYW0sICIg
KyBoYW5kbGUtPm1fdXJsLnN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpLmxlYWtSZWYoKTsKK30K
Kwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJl
YW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFj
a0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxT
b2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOworICAgIEFTU0VSVF9VTlVT
RUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJlYW0uZ2V0KCkpOworICAgIC8v
IFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3Mz4uIEtlZXBpbmcgdGhpcyBi
ZWxvdyB0aGUgYXNzZXJ0aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIgc3RlcHMgdG8gcmVwcm9kdWNl
IHRoaXMuCisgICAgaWYgKCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkKKyAgICAgICAgcmV0dXJuOwor
CisjaWYgUExBVEZPUk0oV0lOKQorICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3Rl
Y3RvcihoYW5kbGUpOworICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFsmXSB7CisgICAgICAg
IGlmIChoYW5kbGUtPm1fcmVhZFN0cmVhbSkKKyAgICAgICAgICAgIGhhbmRsZS0+cmVhZFN0cmVh
bUNhbGxiYWNrKHR5cGUpOworICAgIH0pOworI2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOworI2VuZGlmCit9CisK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVTdHJl
YW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFj
a0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxT
b2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOworICAgIEFTU0VSVF9VTlVT
RUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dyaXRlU3RyZWFtLmdldCgpKTsKKyAgICAv
LyBUaGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBwcmFjdGljZSwgeWV0IGl0IHNlZW1zIGxp
a2UgaXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQgc3RyZWFtIGNhbGxiYWNrLgor
ICAgIGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQorICAgICAgICByZXR1cm47CisKKyNpZiBQ
TEFURk9STShXSU4pCisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdG9yKGhh
bmRsZSk7CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZdIHsKKyAgICAgICAgaWYgKGhh
bmRsZS0+bV93cml0ZVN0cmVhbSkKKyAgICAgICAgICAgIGhhbmRsZS0+d3JpdGVTdHJlYW1DYWxs
YmFjayh0eXBlKTsKKyAgICB9KTsKKyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBoYW5kbGUtPndyaXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7CisjZW5kaWYKK30KKwordm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlN0cmVhbUV2ZW50VHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE5v
bmU6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50T3BlbkNvbXBsZXRl
ZDoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWls
YWJsZTogeworICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gV2FpdGluZ0ZvckNy
ZWRlbnRpYWxzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX2Nvbm5lY3Rp
bmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ29ubmVjdCkgeworICAgICAgICAgICAgaWYgKG1fY29u
bmVjdGlvblR5cGUgPT0gQ09OTkVDVFByb3h5KSB7CisgICAgICAgICAgICAgICAgUmV0YWluUHRy
PENGSFRUUE1lc3NhZ2VSZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9wdENGKHdrQ29weUNPTk5FQ1RQ
cm94eVJlc3BvbnNlKG1fcmVhZFN0cmVhbS5nZXQoKSwgbV9odHRwc1VSTC5nZXQoKSwgbV9wcm94
eUhvc3QuZ2V0KCksIG1fcHJveHlQb3J0LmdldCgpKSk7CisgICAgICAgICAgICAgICAgaWYgKCFw
cm94eVJlc3BvbnNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
ICAgICBDRkluZGV4IHByb3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNl
U3RhdHVzQ29kZShwcm94eVJlc3BvbnNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHByb3h5UmVzcG9uc2VDb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAyMDA6CisgICAgICAg
ICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4KKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0MDc6CisgICAgICAgICAgICAgICAgICAg
IGFkZENPTk5FQ1RDcmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVy
cm9yKHN0YXRpY19jYXN0PGludD4ocHJveHlSZXNwb25zZUNvZGUpLCBtX3VybC5zdHJpbmcoKSwg
IlByb3h5IGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCB1bmV4cGVjdGVkIHJl
c3BvbnNlIGNvZGUiKSk7CisgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOworICAgICAg
ICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0
U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIs
IHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xv
c2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsKKyAgICAg
ICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7CisKKyAgICAgICAg
Q0ZJbmRleCBsZW5ndGg7CisgICAgICAgIFVJbnQ4IGxvY2FsQnVmZmVyWzEwMjRdOyAvLyBVc2Vk
IGlmIENGUmVhZFN0cmVhbUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1cm4gYW55dGhpbmcuCisgICAg
ICAgIGNvbnN0IFVJbnQ4KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRCdWZmZXIobV9yZWFkU3RyZWFt
LmdldCgpLCAwLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFwdHIpIHsKKyAgICAgICAgICAgIGxl
bmd0aCA9IENGUmVhZFN0cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdldCgpLCBsb2NhbEJ1ZmZlciwg
c2l6ZW9mKGxvY2FsQnVmZmVyKSk7CisgICAgICAgICAgICBwdHIgPSBsb2NhbEJ1ZmZlcjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBsZW5ndGgpOworCisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Uga0NGU3RyZWFt
RXZlbnRFcnJvck9jY3VycmVkOiB7CisgICAgICAgIFJldGFpblB0cjxDRkVycm9yUmVmPiBlcnJv
ciA9IGFkb3B0Q0YoQ0ZSZWFkU3RyZWFtQ29weUVycm9yKG1fcmVhZFN0cmVhbS5nZXQoKSkpOwor
ICAgICAgICByZXBvcnRFcnJvclRvQ2xpZW50KGVycm9yLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5jb3VudGVyZWQ6CisgICAgICAg
IHBsYXRmb3JtQ2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2godHlwZSkgeworICAgIGNhc2Uga0NGU3RyZWFtRXZlbnROb25lOgor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50SGFzQnl0ZXNBdmFpbGFibGU6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOiB7CisgICAgICAgIC8vIENhbiBiZSBmYWxz
ZSBpZiByZWFkIHN0cmVhbSBjYWxsYmFjayBqdXN0IGRlY2lkZWQgdG8gcmV0cnkgYSBDT05ORUNU
IHdpdGggY3JlZGVudGlhbHMuCisgICAgICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5
dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ3JlZGVudGlhbHMpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IFdh
aXRpbmdGb3JDb25uZWN0KSB7CisgICAgICAgICAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9PSBD
T05ORUNUUHJveHkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJl
Zj4gcHJveHlSZXNwb25zZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UobV9y
ZWFkU3RyZWFtLmdldCgpLCBtX2h0dHBzVVJMLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9w
cm94eVBvcnQuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXByb3h5UmVzcG9uc2UpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIC8vIERvbid0IHdy
aXRlIGFueXRoaW5nIHVudGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGhhcyBkZWFsdCB3aXRoIENP
Tk5FQ1QgY3JlZGVudGlhbHMuCisgICAgICAgICAgICAgICAgLy8gVGhlIG9yZGVyIG9mIGNhbGxi
YWNrcyBpcyBub3QgZGVmaW5lZCwgc28gdGhpcyBjYW4gYmUgY2FsbGVkIGJlZm9yZSByZWFkU3Ry
ZWFtQ2FsbGJhY2sncyBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlLgorICAgICAgICAg
ICAgICAgIENGSW5kZXggcHJveHlSZXNwb25zZUNvZGUgPSBDRkhUVFBNZXNzYWdlR2V0UmVzcG9u
c2VTdGF0dXNDb2RlKHByb3h5UmVzcG9uc2UuZ2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChw
cm94eVJlc3BvbnNlQ29kZSAhPSAyMDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVk
OworICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAgICAgICBtX2NsaWVudC5kaWRP
cGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdCBhbiAi
ZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQg
Y291bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlmIChtX3N0YXRlID09IENsb3Nl
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVu
KTsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7CisK
KyAgICAgICAgc2VuZFBlbmRpbmdEYXRhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Y2FzZSBrQ0ZTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6IHsKKyAgICAgICAgUmV0YWluUHRyPENG
RXJyb3JSZWY+IGVycm9yID0gYWRvcHRDRihDRldyaXRlU3RyZWFtQ29weUVycm9yKG1fd3JpdGVT
dHJlYW0uZ2V0KCkpKTsKKyAgICAgICAgcmVwb3J0RXJyb3JUb0NsaWVudChlcnJvci5nZXQoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVuZEVuY291
bnRlcmVkOgorICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3ZSBoYW5kbGUgY2xvc2luZyBp
biByZWFkIGNhbGxiYWNrLCBidXQgdGhlc2UgY2FuIGNvbWUgaW5kZXBlbmRlbnRseSAoZS5nLiBh
IHNlcnZlciBjYW4gc3RvcCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNlbmRpbmcgZGF0YSkuCisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRF
cnJvclRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCit7CisgICAgQ0ZJbmRleCBlcnJvckNvZGUg
PSBDRkVycm9yR2V0Q29kZShlcnJvcik7CisgICAgU3RyaW5nIGRlc2NyaXB0aW9uOworCisjaWYg
UExBVEZPUk0oTUFDKQorCisjaWYgQ09NUElMRVIoQ0xBTkcpCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRl
ZC1kZWNsYXJhdGlvbnMiCisjZW5kaWYKKworICAgIGlmIChDRkVxdWFsKENGRXJyb3JHZXREb21h
aW4oZXJyb3IpLCBrQ0ZFcnJvckRvbWFpbk9TU3RhdHVzKSkgeworICAgICAgICBjb25zdCBjaGFy
KiBkZXNjcmlwdGlvbk9TU3RhdHVzID0gR2V0TWFjT1NTdGF0dXNDb21tZW50U3RyaW5nKHN0YXRp
Y19jYXN0PE9TU3RhdHVzPihlcnJvckNvZGUpKTsKKyAgICAgICAgaWYgKGRlc2NyaXB0aW9uT1NT
dGF0dXMgJiYgZGVzY3JpcHRpb25PU1N0YXR1c1swXSAhPSAnXDAnKQorICAgICAgICAgICAgZGVz
Y3JpcHRpb24gPSAiT1NTdGF0dXMgRXJyb3IgIiArIFN0cmluZzo6bnVtYmVyKGVycm9yQ29kZSkg
KyAiOiAiICsgZGVzY3JpcHRpb25PU1N0YXR1czsKKyAgICB9CisKKyNpZiBDT01QSUxFUihDTEFO
RykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisjZW5kaWYKKworICAg
IGlmIChkZXNjcmlwdGlvbi5pc051bGwoKSkgeworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGRlc2NyaXB0aW9uQ0YgPSBhZG9wdENGKENGRXJyb3JDb3B5RGVzY3JpcHRpb24oZXJyb3Ip
KTsKKyAgICAgICAgZGVzY3JpcHRpb24gPSBTdHJpbmcoZGVzY3JpcHRpb25DRi5nZXQoKSk7Cisg
ICAgfQorCisgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3Ry
ZWFtRXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX3VybC5zdHJpbmcoKSwgZGVz
Y3JpcHRpb24pKTsKK30KKworU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxl
KCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkdG9yIiwgdGhp
cyk7CisKKyAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7Cit9CisKK2ludCBTb2NrZXRT
dHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQor
eworICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0
KCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBDRldyaXRlU3RyZWFtV3JpdGUo
bV93cml0ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEp
LCBsZW5ndGgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgp
Cit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9z
ZSIsIHRoaXMpOworCisgICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkgCisgICAgICAgIHJlbW92
ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKKworICAgIEFTU0VSVCghbV9yZWFkU3RyZWFtID09ICFtX3dy
aXRlU3RyZWFtKTsKKyAgICBpZiAoIW1fcmVhZFN0cmVhbSkgeworICAgICAgICBpZiAobV9jb25u
ZWN0aW5nU3Vic3RhdGUgPT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1YnN0YXRlID09IEV4ZWN1dGlu
Z1BBQ0ZpbGUpCisgICAgICAgICAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhp
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgQ0ZS
ZWFkU3RyZWFtVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgbG9hZGVy
UnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAgIENGV3JpdGVTdHJlYW1VbnNj
aGVkdWxlRnJvbVJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBr
Q0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlJlYWRTdHJlYW1VbnNjaGVkdWxl
RnJvbVJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtD
RlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZXcml0ZVN0cmVhbVVuc2NoZWR1bGVGcm9tUnVu
TG9vcChtX3dyaXRlU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxv
b3BDb21tb25Nb2Rlcyk7CisjZW5kaWYKKworICAgIENGUmVhZFN0cmVhbUNsb3NlKG1fcmVhZFN0
cmVhbS5nZXQoKSk7CisgICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1fd3JpdGVTdHJlYW0uZ2V0KCkp
OworICAgIAorICAgIG1fcmVhZFN0cmVhbSA9IDA7CisgICAgbV93cml0ZVN0cmVhbSA9IDA7CisK
KyAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Cit9CisKK3Vuc2lnbmVk
IHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0Cit7CisgICAgaWYgKHVuc2ln
bmVkIHNob3J0IHVybFBvcnQgPSBtX3VybC5wb3J0KCkpCisgICAgICAgIHJldHVybiB1cmxQb3J0
OworICAgIGlmIChzaG91bGRVc2VTU0woKSkKKyAgICAgICAgcmV0dXJuIDQ0MzsKKyAgICByZXR1
cm4gODA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJl
YW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFt
SGFuZGxlSW1wbC5oIgogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgogI2luY2x1ZGUgIkNyZWRl
bnRpYWxTdG9yYWdlLmgiCkBAIC02Nyw4ICs2Nyw4IEBAIGV4dGVybiAiQyIgY29uc3QgQ0ZTdHJp
bmdSZWYgX2tDRlN0cmVhbVMKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Tb2NrZXRTdHJlYW1I
YW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFu
ZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBTb2NrZXRTdHJl
YW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQorU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6U29ja2V0
U3RyZWFtSGFuZGxlSW1wbChjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGUo
dXJsLCBjbGllbnQpCiAgICAgLCBtX2Nvbm5lY3RpbmdTdWJzdGF0ZShOZXcpCiAgICAgLCBtX2Nv
bm5lY3Rpb25UeXBlKFVua25vd24pCiAgICAgLCBtX3NlbnRTdG9yZWRDcmVkZW50aWFscyhmYWxz
ZSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhh
bmRsZShjCiAgICAgc2NoZWR1bGVTdHJlYW1zKCk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpzY2hlZHVsZVN0cmVhbXMoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzY2hl
ZHVsZVN0cmVhbXMoKQogewogICAgIEFTU0VSVChtX3JlYWRTdHJlYW0pOwogICAgIEFTU0VSVCht
X3dyaXRlU3RyZWFtKTsKQEAgLTEyNywyMCArMTI3LDIwIEBAIHZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpzY2hlZHVsZVN0cmVhbXMKICAgICBtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9IFdhaXRpbmdG
b3JDb25uZWN0OwogfQogCi12b2lkKiBTb2NrZXRTdHJlYW1IYW5kbGU6OnJldGFpblNvY2tldFN0
cmVhbUhhbmRsZSh2b2lkKiBpbmZvKQordm9pZCogU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmV0
YWluU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQqIGluZm8pCiB7CiAgICAgU29ja2V0U3RyZWFtSGFu
ZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihpbmZvKTsKICAg
ICBoYW5kbGUtPnJlZigpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLXZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQqIGluZm8pCit2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5m
bykKIHsKICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSo+KGluZm8pOwogICAgIGhhbmRsZS0+ZGVyZWYoKTsKIH0KIAotQ0ZTdHJp
bmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24odm9p
ZCopCitDRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjb3B5UEFDRXhlY3V0aW9u
RGVzY3JpcHRpb24odm9pZCopCiB7CiAgICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQgcHJveHkg
UEFDIGZpbGUgZXhlY3V0aW9uIik7CiB9CkBAIC0xNzUsOSArMTc1LDkgQEAgc3RydWN0IE1haW5U
aHJlYWRQQUNDYWxsYmFja0luZm8gewogICAgIENGQXJyYXlSZWYgcHJveHlMaXN0OwogfTsKIAot
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKHZvaWQqIGNsaWVu
dCwgQ0ZBcnJheVJlZiBwcm94eUxpc3QsIENGRXJyb3JSZWYpCit2b2lkIFNvY2tldFN0cmVhbUhh
bmRsZUltcGw6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKHZvaWQqIGNsaWVudCwgQ0ZBcnJheVJlZiBw
cm94eUxpc3QsIENGRXJyb3JSZWYpCiB7Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUg
PSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnQpOworICAgIFNvY2tldFN0
cmVhbUhhbmRsZUltcGwqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZUlt
cGwqPihjbGllbnQpOwogCiAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZdIHsKICAgICAg
ICAgQVNTRVJUKGhhbmRsZS0+bV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gRXhlY3V0aW5nUEFDRmls
ZSk7CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBhY0V4ZWN1
dGlvbkNhbAogICAgIH0pOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBB
Q0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkKIHsKICAgICAvLyBDRk5l
dHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3IgV2ViU29ja2V0IHNjaGVtZXMs
IHNvIHVzZSBtX2h0dHBzVVJMLgogICAgIENGU3RyZWFtQ2xpZW50Q29udGV4dCBjbGllbnRDb250
ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUsIHJlbGVhc2VTb2NrZXRT
dHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbiB9OwpAQCAtMjAzLDcgKzIw
Myw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpleGVjdXRlUEFDRmlsZVUKICAgICBtX2Nv
bm5lY3RpbmdTdWJzdGF0ZSA9IEV4ZWN1dGluZ1BBQ0ZpbGU7CiB9CiAKLXZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZW1vdmVQQUNSdW5Mb29wU291cmNlKCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6cmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpCiB7CiAgICAgQVNTRVJUKG1fcGFjUnVu
TG9vcFNvdXJjZSk7CiAKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6cmVtb3ZlUEFDUnVuTG9vCiAgICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKIH0KIAotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6Y2hvb3NlUHJveHkoKQogewogICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IHByb3h5RGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrQ29weVN5c3RlbVByb3h5U2V0dGlu
Z3MoKSk7CiAKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y2hv
b3NlUHJveHkoKQogICAgIGNob29zZVByb3h5RnJvbUFycmF5KHByb3h5QXJyYXkuZ2V0KCkpOwog
fQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y2hvb3NlUHJveHlGcm9tQXJyYXkoQ0ZBcnJh
eVJlZiBwcm94eUFycmF5KQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjaG9vc2VQcm94
eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkpCiB7CiAgICAgaWYgKCFwcm94eUFycmF5
KSB7CiAgICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBEaXJlY3Q7CkBAIC0yOTcsNyArMjk3LDcg
QEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5RnJvbQogfQogCiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVTdHJlYW1zKCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6Y3JlYXRlU3RyZWFtcygpCiB7CiAgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0g
VW5rbm93bikKICAgICAgICAgY2hvb3NlUHJveHkoKTsKQEAgLTM1MCw3ICszNTAsNyBAQCB2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygpCiAgICAgfQogfQogCi1ib29sIFNv
Y2tldFN0cmVhbUhhbmRsZTo6Z2V0U3RvcmVkQ09OTkVDVFByb3h5Q3JlZGVudGlhbHMoY29uc3Qg
UHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgbG9naW4sIFN0cmluZyYg
cGFzc3dvcmQpCitib29sIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmdldFN0b3JlZENPTk5FQ1RQ
cm94eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBT
dHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQogewogICAgIC8vIEZJWE1FICg8cmRhcjov
L3Byb2JsZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJlIHJldHJpZXZl
ZCBmcm9tIEF1dGhCcm9rZXJBZ2VudC4KIApAQCAtMzg1LDcgKzM4NSw3IEBAIHN0YXRpYyBQcm90
ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGUKICAgICByZXR1cm4gUHJvdGVjdGlvblNwYWNl
QXV0aGVudGljYXRpb25TY2hlbWVVbmtub3duOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6YWRkQ09OTkVDVENyZWRlbnRpYWxzKENGSFRUUE1lc3NhZ2VSZWYgcHJveHlSZXNwb25zZSkK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6YWRkQ09OTkVDVENyZWRlbnRpYWxzKENGSFRU
UE1lc3NhZ2VSZWYgcHJveHlSZXNwb25zZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQXV0aGVu
dGljYXRpb25SZWY+IGF1dGhlbnRpY2F0aW9uID0gYWRvcHRDRihDRkhUVFBBdXRoZW50aWNhdGlv
bkNyZWF0ZUZyb21SZXNwb25zZSgwLCBwcm94eVJlc3BvbnNlKSk7CiAKQEAgLTQzNiwxNSArNDM2
LDE1IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjphZGRDT05ORUNUQ3JlZGUKICAgICBtX2Ns
aWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcigwLCBtX3Vy
bC5zdHJpbmcoKSwgIlByb3h5IGNyZWRlbnRpYWxzIGFyZSBub3QgYXZhaWxhYmxlIikpOwogfQog
Ci1DRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlDRlN0cmVhbURlc2NyaXB0aW9u
KHZvaWQqIGluZm8pCitDRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjb3B5Q0ZT
dHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQogewotICAgIFNvY2tldFN0cmVhbUhhbmRsZSog
aGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7CisgICAgU29j
a2V0U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbCo+KGluZm8pOwogICAgIHJldHVybiBTdHJpbmcoIldlYktpdCBzb2NrZXQgc3RyZWFt
LCAiICsgaGFuZGxlLT5tX3VybC5zdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKS5sZWFrUmVmKCk7
CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGJhY2soQ0ZSZWFk
U3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSwgdm9pZCogY2xpZW50Q2Fs
bEJhY2tJbmZvKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFkU3RyZWFtQ2FsbGJh
Y2soQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSwgdm9pZCog
Y2xpZW50Q2FsbEJhY2tJbmZvKQogewotICAgIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0g
c3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oY2xpZW50Q2FsbEJhY2tJbmZvKTsKKyAg
ICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsKj4oY2xpZW50Q2FsbEJhY2tJbmZvKTsKICAgICBBU1NFUlRfVU5VU0VEKHN0
cmVhbSwgc3RyZWFtID09IGhhbmRsZS0+bV9yZWFkU3RyZWFtLmdldCgpKTsKICAgICAvLyBXb3Jr
YXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMTc3MjcwNzM+LiBLZWVwaW5nIHRoaXMgYmVsb3cg
dGhlIGFzc2VydGlvbiBhcyB3ZSdkIGxpa2UgYmV0dGVyIHN0ZXBzIHRvIHJlcHJvZHVjZSB0aGlz
LgogICAgIGlmICghaGFuZGxlLT5tX3JlYWRTdHJlYW0pCkBAIC00NjIsOSArNDYyLDkgQEAgdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYgogI2VuZGlmCiB9CiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVTdHJlYW1SZWYg
c3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0luZm8p
Cit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZXcml0
ZVN0cmVhbVJlZiBzdHJlYW0sIENGU3RyZWFtRXZlbnRUeXBlIHR5cGUsIHZvaWQqIGNsaWVudENh
bGxCYWNrSW5mbykKIHsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19j
YXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGNsaWVudENhbGxCYWNrSW5mbyk7CisgICAgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxl
SW1wbCo+KGNsaWVudENhbGxCYWNrSW5mbyk7CiAgICAgQVNTRVJUX1VOVVNFRChzdHJlYW0sIHN0
cmVhbSA9PSBoYW5kbGUtPm1fd3JpdGVTdHJlYW0uZ2V0KCkpOwogICAgIC8vIFRoaXMgd2Fzbid0
IHNlZW4gaGFwcGVuaW5nIGluIHByYWN0aWNlLCB5ZXQgaXQgc2VlbXMgbGlrZSBpdCBjb3VsZCwg
ZHVlIHRvIHN5bW1ldHJ5IHdpdGggcmVhZCBzdHJlYW0gY2FsbGJhY2suCiAgICAgaWYgKCFoYW5k
bGUtPm1fd3JpdGVTdHJlYW0pCkBAIC00ODIsNyArNDgyLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OndyaXRlU3RyZWFtQ2FsbAogI2VuZGlmCiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpyZWFkU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSkKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBl
IHR5cGUpCiB7CiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIGtDRlN0cmVhbUV2ZW50Tm9u
ZToKQEAgLTU1NCw3ICs1NTQsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZFN0cmVh
bUNhbGxiCiAgICAgfQogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVTdHJlYW1D
YWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSB0eXBlKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlIHR5cGUpCiB7CiAgICAg
c3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIGtDRlN0cmVhbUV2ZW50Tm9uZToKQEAgLTYxMCw3ICs2
MTAsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVTdHJlYW1DYWxsCiAgICAgfQog
fQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVwb3J0RXJyb3JUb0NsaWVudChDRkVycm9y
UmVmIGVycm9yKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZXBvcnRFcnJvclRvQ2xp
ZW50KENGRXJyb3JSZWYgZXJyb3IpCiB7CiAgICAgQ0ZJbmRleCBlcnJvckNvZGUgPSBDRkVycm9y
R2V0Q29kZShlcnJvcik7CiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOwpAQCAtNjQyLDE0ICs2NDIs
MTQgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbAogICAgIG1fY2xp
ZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9yKHN0YXRpY19j
YXN0PGludD4oZXJyb3JDb2RlKSwgbV91cmwuc3RyaW5nKCksIGRlc2NyaXB0aW9uKSk7CiB9CiAK
LVNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSgpCitTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCgpCiB7CiAgICAgTE9HKE5ldHdvcmss
ICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZHRvciIsIHRoaXMpOwogCiAgICAgQVNTRVJUKCFtX3Bh
Y1J1bkxvb3BTb3VyY2UpOwogfQogCi1pbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNl
bmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK2ludCBTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKICAgICBp
ZiAoIUNGV3JpdGVTdHJlYW1DYW5BY2NlcHRCeXRlcyhtX3dyaXRlU3RyZWFtLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIDA7CkBAIC02NTcsNyArNjU3LDcgQEAgaW50IFNvY2tldFN0cmVhbUhhbmRs
ZTo6cGxhdGZvcm1TZW5kKGNvbgogICAgIHJldHVybiBDRldyaXRlU3RyZWFtV3JpdGUobV93cml0
ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBsZW5n
dGgpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCit2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtQ2xvc2UoKQogewogICAgIExPRyhOZXR3
b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0aGlzKTsKIApAQCAt
Njg4LDcgKzY4OCw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybUNsb3NlKCkK
ICAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7CiB9CiAKLXVuc2lnbmVk
IHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0Cit1bnNpZ25lZCBzaG9ydCBT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwb3J0KCkgY29uc3QKIHsKICAgICBpZiAodW5zaWduZWQg
c2hvcnQgdXJsUG9ydCA9IG1fdXJsLnBvcnQoKSkKICAgICAgICAgcmV0dXJuIHVybFBvcnQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZS5oCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1I
YW5kbGVCYXNlLmgiCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8d2luc29jazIuaD4K
LSNlbmRpZgotCi0jaW5jbHVkZSAiU2Vzc2lvbklELmgiCi0jaW5jbHVkZSA8Y3VybC9jdXJsLmg+
Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7Ci0KLWNsYXNz
IFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRT
dHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQotCi0gICAgdmly
dHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7Ci0KLXByaXZhdGU6Ci0gICAgU29ja2V0U3RyZWFt
SGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwotCi0gICAgaW50
IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKLQotICAgIGJvb2wgcmVhZERhdGEoQ1VS
TCopOwotICAgIGJvb2wgc2VuZERhdGEoQ1VSTCopOwotICAgIGJvb2wgd2FpdEZvckF2YWlsYWJs
ZURhdGEoQ1VSTCosIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91dCk7Ci0K
LSAgICB2b2lkIHN0YXJ0VGhyZWFkKCk7Ci0gICAgdm9pZCBzdG9wVGhyZWFkKCk7Ci0KLSAgICB2
b2lkIGRpZFJlY2VpdmVEYXRhKCk7Ci0gICAgdm9pZCBkaWRPcGVuU29ja2V0KCk7Ci0KLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY3JlYXRlQ29weShjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKTsKLQotICAgIHN0cnVjdCBTb2NrZXREYXRhIHsKLSAgICAgICAgU29ja2V0
RGF0YShzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiYmIHNvdXJjZSwgaW50IGxlbmd0aCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUoc291cmNlKTsKLSAgICAgICAgICAgIHNp
emUgPSBsZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAgICBTb2NrZXREYXRhKFNvY2tldERhdGEm
JiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUob3RoZXIuZGF0
YSk7Ci0gICAgICAgICAgICBzaXplID0gb3RoZXIuc2l6ZTsKLSAgICAgICAgICAgIG90aGVyLnNp
emUgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gZGF0
YTsKLSAgICAgICAgaW50IHNpemUgeyAwIH07Ci0gICAgfTsKLQotICAgIFRocmVhZElkZW50aWZp
ZXIgbV93b3JrZXJUaHJlYWQgeyAwIH07Ci0gICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhy
ZWFkIHsgZmFsc2UgfTsKLSAgICBMb2NrIG1fbXV0ZXhTZW5kOwotICAgIExvY2sgbV9tdXRleFJl
Y2VpdmU7Ci0gICAgRGVxdWU8U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKLSAgICBEZXF1ZTxTb2Nr
ZXREYXRhPiBtX3JlY2VpdmVEYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Nv
Y2tldFN0cmVhbUhhbmRsZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAt
MSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1
cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMjA0NDY4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3Bw
CShub25leGlzdGVudCkKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQnJlbnQgRnVsZ2hhbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgotCi0jaWYgVVNFKENVUkwpCi0KLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCi0j
aW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4K
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0
cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGll
bnQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQotewotICAgIExP
RyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAiLCB0aGlzLCAm
bV9jbGllbnQpOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhcnRUaHJlYWQo
KTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkKLXsKLSAg
ICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkZWxldGUiLCB0aGlzKTsKLSAg
ICBBU1NFUlQoIW1fd29ya2VyVGhyZWFkKTsKLX0KLQotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6
cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgTE9HKE5l
dHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kIiwgdGhpcyk7Ci0KLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhcnRUaHJlYWQoKTsKLQotICAgIGF1
dG8gY29weSA9IGNyZWF0ZUNvcHkoZGF0YSwgbGVuZ3RoKTsKLQotICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKLSAgICBtX3NlbmREYXRhLmFwcGVuZChTb2NrZXRE
YXRhIHsgV1RGTW92ZShjb3B5KSwgbGVuZ3RoIH0pOwotCi0gICAgcmV0dXJuIGxlbmd0aDsKLX0K
LQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQotewotICAgIExPRyhO
ZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0aGlzKTsKLQot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBzdG9wVGhyZWFkKCk7Ci0KLSAgICBt
X2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLWJvb2wgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZWFkRGF0YShDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIEFTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwotCi0gICAgY29uc3QgaW50IGJ1ZmZlclNpemUgPSAxMDI0OwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxjaGFyW10+IGRhdGEobmV3IGNoYXJbYnVmZmVyU2l6ZV0pOwotICAgIHNp
emVfdCBieXRlc1JlYWQgPSAwOwotCi0gICAgQ1VSTGNvZGUgcmV0ID0gY3VybF9lYXN5X3JlY3Yo
Y3VybEhhbmRsZSwgZGF0YS5nZXQoKSwgYnVmZmVyU2l6ZSwgJmJ5dGVzUmVhZCk7Ci0KLSAgICBp
ZiAocmV0ID09IENVUkxFX09LICYmIGJ5dGVzUmVhZCA+PSAwKSB7Ci0gICAgICAgIG1fbXV0ZXhS
ZWNlaXZlLmxvY2soKTsKLSAgICAgICAgbV9yZWNlaXZlRGF0YS5hcHBlbmQoU29ja2V0RGF0YSB7
IFdURk1vdmUoZGF0YSksIHN0YXRpY19jYXN0PGludD4oYnl0ZXNSZWFkKSB9KTsKLSAgICAgICAg
bV9tdXRleFJlY2VpdmUudW5sb2NrKCk7Ci0KLSAgICAgICAgcmVmKCk7Ci0KLSAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbdGhpc10gewotICAgICAgICAgICAgZGlkUmVjZWl2ZURhdGEoKTsKLSAg
ICAgICAgICAgIGRlcmVmKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChyZXQgPT0gQ1VSTEVfQUdBSU4pCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6c2Vu
ZERhdGEoQ1VSTCogY3VybEhhbmRsZSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
LQotICAgIHdoaWxlICh0cnVlKSB7Ci0KLSAgICAgICAgbV9tdXRleFNlbmQubG9jaygpOwotICAg
ICAgICBpZiAoIW1fc2VuZERhdGEuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBtX211dGV4U2VuZC51
bmxvY2soKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gc2Vu
ZERhdGEgPSBtX3NlbmREYXRhLnRha2VGaXJzdCgpOwotICAgICAgICBtX211dGV4U2VuZC51bmxv
Y2soKTsKLQotICAgICAgICBpbnQgdG90YWxCeXRlc1NlbnQgPSAwOwotICAgICAgICB3aGlsZSAo
dG90YWxCeXRlc1NlbnQgPCBzZW5kRGF0YS5zaXplKSB7Ci0gICAgICAgICAgICBzaXplX3QgYnl0
ZXNTZW50ID0gMDsKLSAgICAgICAgICAgIENVUkxjb2RlIHJldCA9IGN1cmxfZWFzeV9zZW5kKGN1
cmxIYW5kbGUsIHNlbmREYXRhLmRhdGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwgc2VuZERhdGEu
c2l6ZSAtIHRvdGFsQnl0ZXNTZW50LCAmYnl0ZXNTZW50KTsKLSAgICAgICAgICAgIGlmIChyZXQg
PT0gQ1VSTEVfT0spCi0gICAgICAgICAgICAgICAgdG90YWxCeXRlc1NlbnQgKz0gYnl0ZXNTZW50
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gSW5zZXJ0IHJlbWFpbmluZyBkYXRhIGludG8gc2VuZCBxdWV1ZS4KLQotICAg
ICAgICBpZiAodG90YWxCeXRlc1NlbnQgPCBzZW5kRGF0YS5zaXplKSB7Ci0gICAgICAgICAgICBj
b25zdCBpbnQgcmVzdExlbmd0aCA9IHNlbmREYXRhLnNpemUgLSB0b3RhbEJ5dGVzU2VudDsKLSAg
ICAgICAgICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoc2VuZERhdGEuZGF0YS5nZXQoKSArIHRv
dGFsQnl0ZXNTZW50LCByZXN0TGVuZ3RoKTsKLQotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9tdXRleFNlbmQpOwotICAgICAgICAgICAgbV9zZW5kRGF0YS5wcmVwZW5k
KFNvY2tldERhdGEgeyBXVEZNb3ZlKGNvcHkpLCByZXN0TGVuZ3RoIH0pOwotCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OndhaXRGb3JBdmFpbGFibGVEYXRhKENVUkwqIGN1
cmxIYW5kbGUsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91dCkKLXsKLSAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29u
ZHMgdXNlYyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWNyb3Nl
Y29uZHM+KHNlbGVjdFRpbWVvdXQpOwotCi0gICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKLSAg
ICBpZiAodXNlYyA8PSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApKSB7Ci0gICAgICAgIHRp
bWVvdXQudHZfc2VjID0gMDsKLSAgICAgICAgdGltZW91dC50dl91c2VjID0gMDsKLSAgICB9IGVs
c2UgewotICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IHVzZWMuY291bnQoKSAvIDEwMDAwMDA7Ci0g
ICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHVzZWMuY291bnQoKSAlIDEwMDAwMDA7Ci0gICAgfQot
Ci0gICAgbG9uZyBzb2NrZXQ7Ci0gICAgaWYgKGN1cmxfZWFzeV9nZXRpbmZvKGN1cmxIYW5kbGUs
IENVUkxJTkZPX0xBU1RTT0NLRVQsICZzb2NrZXQpICE9IENVUkxFX09LKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBmZF9zZXQgZmRyZWFkOwotICAgIEZEX1pFUk8oJmZkcmVhZCk7Ci0g
ICAgRkRfU0VUKHNvY2tldCwgJmZkcmVhZCk7Ci0gICAgaW50IHJjID0gOjpzZWxlY3QoMCwgJmZk
cmVhZCwgbnVsbHB0ciwgbnVsbHB0ciwgJnRpbWVvdXQpOwotICAgIHJldHVybiByYyA9PSAxOwot
fQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhcnRUaHJlYWQoKQotewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV93b3JrZXJUaHJlYWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRlcmVmKCkuCi0K
LSAgICBtX3dvcmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRocmVhZCIsIFt0
aGlzXSB7Ci0KLSAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAgICAgQ1VS
TCogY3VybEhhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7Ci0KLSAgICAgICAgaWYgKCFjdXJsSGFu
ZGxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3Vy
bEhhbmRsZSwgQ1VSTE9QVF9VUkwsIG1fdXJsLmhvc3QoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgY3VybF9lYXN5X3NldG9wdChjdXJsSGFuZGxlLCBDVVJMT1BUX1BPUlQsIG1fdXJsLnBvcnQo
KSk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybEhhbmRsZSwgQ1VSTE9QVF9DT05ORUNU
X09OTFksIDFMKTsKLQotICAgICAgICAvLyBDb25uZWN0IHRvIGhvc3QKLSAgICAgICAgaWYgKGN1
cmxfZWFzeV9wZXJmb3JtKGN1cmxIYW5kbGUpICE9IENVUkxFX09LKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHJlZigpOwotCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNd
IHsKLSAgICAgICAgICAgIC8vIENoZWNrIHJlZmVyZW5jZSBjb3VudCB0byBmaXggYSBjcmFzaC4K
LSAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNhbGwgaXMgaW52b2tlZCBvbiB0aGUgbWFpbiB0aHJl
YWQgYWZ0ZXIgYWxsIG90aGVyIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkLCB0aGUgU29ja2V0U3Ry
ZWFtQ2xpZW50Ci0gICAgICAgICAgICAvLyBpcyBhbHJlYWR5IGRlbGV0ZWQuIEFjY2Vzc2luZyB0
aGUgU29ja2V0U3RyZWFtQ2xpZW50IGluIGRpZE9wZW5Tb2NrZXQoKSB3aWxsIHRoZW4gY2F1c2Ug
YSBjcmFzaC4KLSAgICAgICAgICAgIGlmIChyZWZDb3VudCgpID4gMSkKLSAgICAgICAgICAgICAg
ICBkaWRPcGVuU29ja2V0KCk7Ci0gICAgICAgICAgICBkZXJlZigpOwotICAgICAgICB9KTsKLQot
ICAgICAgICB3aGlsZSAoIW1fc3RvcFRocmVhZCkgewotICAgICAgICAgICAgLy8gU2VuZCBxdWV1
ZWQgZGF0YQotICAgICAgICAgICAgc2VuZERhdGEoY3VybEhhbmRsZSk7Ci0KLSAgICAgICAgICAg
IC8vIFdhaXQgdW50aWwgc29ja2V0IGhhcyBhdmFpbGFibGUgZGF0YQotICAgICAgICAgICAgaWYg
KHdhaXRGb3JBdmFpbGFibGVEYXRhKGN1cmxIYW5kbGUsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMoMjApKSkKLSAgICAgICAgICAgICAgICByZWFkRGF0YShjdXJsSGFuZGxlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmxIYW5kbGUpOwotICAgIH0pOwotfQot
Ci12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFRocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV93b3JrZXJUaHJlYWQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc3RvcFRocmVhZCA9IHRydWU7Ci0gICAgd2FpdEZvclRocmVhZENvbXBsZXRp
b24obV93b3JrZXJUaHJlYWQpOwotICAgIG1fd29ya2VyVGhyZWFkID0gMDsKLSAgICBkZXJlZigp
OwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkUmVjZWl2ZURhdGEoKQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBtX211dGV4UmVjZWl2ZS5sb2NrKCk7Ci0K
LSAgICBhdXRvIHJlY2VpdmVEYXRhID0gV1RGTW92ZShtX3JlY2VpdmVEYXRhKTsKLQotICAgIG1f
bXV0ZXhSZWNlaXZlLnVubG9jaygpOwotCi0gICAgZm9yIChhdXRvJiBzb2NrZXREYXRhIDogcmVj
ZWl2ZURhdGEpIHsKLSAgICAgICAgaWYgKHNvY2tldERhdGEuc2l6ZSA+IDApIHsKLSAgICAgICAg
ICAgIGlmIChzdGF0ZSgpID09IE9wZW4pCi0gICAgICAgICAgICAgICAgbV9jbGllbnQuZGlkUmVj
ZWl2ZVNvY2tldFN0cmVhbURhdGEoKnRoaXMsIHNvY2tldERhdGEuZGF0YS5nZXQoKSwgc29ja2V0
RGF0YS5zaXplKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwbGF0Zm9ybUNsb3NlKCk7
Ci0gICAgfQotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkT3BlblNvY2tldCgpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fc3RhdGUgPSBPcGVuOwotCi0g
ICAgbV9jbGllbnQuZGlkT3BlblNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxjaGFyW10+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlQ29weShjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IGNvcHkobmV3
IGNoYXJbbGVuZ3RoXSk7Ci0gICAgbWVtY3B5KGNvcHkuZ2V0KCksIGRhdGEsIGxlbmd0aCk7Ci0K
LSAgICByZXR1cm4gV1RGTW92ZShjb3B5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6
IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9T
b2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkocmV2aXNpb24gMjA0
NDY2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3Ry
ZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCisK
KyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorCisjaW5j
bHVkZSAiU2Vzc2lvbklELmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSA8d3Rm
L0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0cmVhbUhh
bmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBw
dWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxT
b2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFu
ZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2Nr
ZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorCisgICAgdmlydHVhbCB+U29ja2V0U3Ry
ZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVS
TCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworCisgICAgaW50IHBsYXRmb3JtU2VuZChj
b25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2b2lkIHBsYXRmb3Jt
Q2xvc2UoKSBvdmVycmlkZTsKKworICAgIGJvb2wgcmVhZERhdGEoQ1VSTCopOworICAgIGJvb2wg
c2VuZERhdGEoQ1VSTCopOworICAgIGJvb2wgd2FpdEZvckF2YWlsYWJsZURhdGEoQ1VSTCosIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91dCk7CisKKyAgICB2b2lkIHN0YXJ0
VGhyZWFkKCk7CisgICAgdm9pZCBzdG9wVGhyZWFkKCk7CisKKyAgICB2b2lkIGRpZFJlY2VpdmVE
YXRhKCk7CisgICAgdm9pZCBkaWRPcGVuU29ja2V0KCk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPGNoYXJbXT4gY3JlYXRlQ29weShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsK
KworICAgIHN0cnVjdCBTb2NrZXREYXRhIHsKKyAgICAgICAgU29ja2V0RGF0YShzdGQ6OnVuaXF1
ZV9wdHI8Y2hhcltdPiYmIHNvdXJjZSwgaW50IGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZGF0YSA9IFdURk1vdmUoc291cmNlKTsKKyAgICAgICAgICAgIHNpemUgPSBsZW5ndGg7Cisg
ICAgICAgIH0KKworICAgICAgICBTb2NrZXREYXRhKFNvY2tldERhdGEmJiBvdGhlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUob3RoZXIuZGF0YSk7CisgICAgICAgICAg
ICBzaXplID0gb3RoZXIuc2l6ZTsKKyAgICAgICAgICAgIG90aGVyLnNpemUgPSAwOworICAgICAg
ICB9CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gZGF0YTsKKyAgICAgICAgaW50
IHNpemUgeyAwIH07CisgICAgfTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV93b3JrZXJUaHJl
YWQgeyAwIH07CisgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsgZmFsc2UgfTsK
KyAgICBMb2NrIG1fbXV0ZXhTZW5kOworICAgIExvY2sgbV9tdXRleFJlY2VpdmU7CisgICAgRGVx
dWU8U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKKyAgICBEZXF1ZTxTb2NrZXREYXRhPiBtX3JlY2Vp
dmVEYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFt
SGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgogCiAjaWYgUExB
VEZPUk0oV0lOKQogI2luY2x1ZGUgPHdpbnNvY2syLmg+CkBAIC00OCwxNCArNDgsMTQgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CiAKLWNs
YXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2Nr
ZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitjbGFzcyBT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsIDogcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwm
IHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorICAg
IHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCh1cmwsIGNsaWVudCkpOyB9CiAKLSAgICB2
aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGUoKTsKKyAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsKCk7CiAKIHByaXZhdGU6Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVS
TCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworICAgIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKICAgICBpbnQgcGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRlOwogICAgIHZv
aWQgcGxhdGZvcm1DbG9zZSgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwCShyZXZpc2lvbiAyMDQ0NjgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcDoyMDQ0NjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbEN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIKKworI2lmIFVTRShD
VVJMKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudC5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU29ja2V0U3RyZWFtSGFu
ZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudCYgY2xpZW50KQorICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVu
dCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50
ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IHN0YXJ0VGhyZWFkKCk7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhh
bmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRl
IiwgdGhpcyk7CisgICAgQVNTRVJUKCFtX3dvcmtlclRocmVhZCk7Cit9CisKK2ludCBTb2NrZXRT
dHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQor
eworICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtU2VuZCIs
IHRoaXMpOworCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHN0YXJ0VGhyZWFk
KCk7CisKKyAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KGRhdGEsIGxlbmd0aCk7CisKKyAgICBz
dGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4U2VuZCk7CisgICAgbV9zZW5kRGF0YS5h
cHBlbmQoU29ja2V0RGF0YSB7IFdURk1vdmUoY29weSksIGxlbmd0aCB9KTsKKworICAgIHJldHVy
biBsZW5ndGg7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybUNsb3NlKCkK
K3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybUNsb3Nl
IiwgdGhpcyk7CisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgc3RvcFRocmVh
ZCgpOworCisgICAgbV9jbGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMpOworfQorCiti
b29sIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZERhdGEoQ1VSTCogY3VybEhhbmRsZSkKK3sKKyAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IGludCBidWZmZXJTaXplID0g
MTAyNDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBkYXRhKG5ldyBjaGFyW2J1ZmZlclNp
emVdKTsKKyAgICBzaXplX3QgYnl0ZXNSZWFkID0gMDsKKworICAgIENVUkxjb2RlIHJldCA9IGN1
cmxfZWFzeV9yZWN2KGN1cmxIYW5kbGUsIGRhdGEuZ2V0KCksIGJ1ZmZlclNpemUsICZieXRlc1Jl
YWQpOworCisgICAgaWYgKHJldCA9PSBDVVJMRV9PSyAmJiBieXRlc1JlYWQgPj0gMCkgeworICAg
ICAgICBtX211dGV4UmVjZWl2ZS5sb2NrKCk7CisgICAgICAgIG1fcmVjZWl2ZURhdGEuYXBwZW5k
KFNvY2tldERhdGEgeyBXVEZNb3ZlKGRhdGEpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCkg
fSk7CisgICAgICAgIG1fbXV0ZXhSZWNlaXZlLnVubG9jaygpOworCisgICAgICAgIHJlZigpOwor
CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgICAgIGRpZFJlY2Vp
dmVEYXRhKCk7CisgICAgICAgICAgICBkZXJlZigpOworICAgICAgICB9KTsKKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocmV0ID09IENVUkxFX0FHQUlOKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnNlbmREYXRhKENVUkwqIGN1cmxIYW5kbGUpCit7CisgICAgQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworCisgICAgICAgIG1fbXV0ZXhTZW5k
LmxvY2soKTsKKyAgICAgICAgaWYgKCFtX3NlbmREYXRhLnNpemUoKSkgeworICAgICAgICAgICAg
bV9tdXRleFNlbmQudW5sb2NrKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBhdXRvIHNlbmREYXRhID0gbV9zZW5kRGF0YS50YWtlRmlyc3QoKTsKKyAgICAgICAgbV9t
dXRleFNlbmQudW5sb2NrKCk7CisKKyAgICAgICAgaW50IHRvdGFsQnl0ZXNTZW50ID0gMDsKKyAg
ICAgICAgd2hpbGUgKHRvdGFsQnl0ZXNTZW50IDwgc2VuZERhdGEuc2l6ZSkgeworICAgICAgICAg
ICAgc2l6ZV90IGJ5dGVzU2VudCA9IDA7CisgICAgICAgICAgICBDVVJMY29kZSByZXQgPSBjdXJs
X2Vhc3lfc2VuZChjdXJsSGFuZGxlLCBzZW5kRGF0YS5kYXRhLmdldCgpICsgdG90YWxCeXRlc1Nl
bnQsIHNlbmREYXRhLnNpemUgLSB0b3RhbEJ5dGVzU2VudCwgJmJ5dGVzU2VudCk7CisgICAgICAg
ICAgICBpZiAocmV0ID09IENVUkxFX09LKQorICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXNTZW50
ICs9IGJ5dGVzU2VudDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEluc2VydCByZW1haW5pbmcgZGF0YSBpbnRvIHNlbmQg
cXVldWUuCisKKyAgICAgICAgaWYgKHRvdGFsQnl0ZXNTZW50IDwgc2VuZERhdGEuc2l6ZSkgewor
ICAgICAgICAgICAgY29uc3QgaW50IHJlc3RMZW5ndGggPSBzZW5kRGF0YS5zaXplIC0gdG90YWxC
eXRlc1NlbnQ7CisgICAgICAgICAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KHNlbmREYXRhLmRh
dGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwgcmVzdExlbmd0aCk7CisKKyAgICAgICAgICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKKyAgICAgICAgICAgIG1fc2Vu
ZERhdGEucHJlcGVuZChTb2NrZXREYXRhIHsgV1RGTW92ZShjb3B5KSwgcmVzdExlbmd0aCB9KTsK
KworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjp3YWl0Rm9yQXZhaWxhYmxl
RGF0YShDVVJMKiBjdXJsSGFuZGxlLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHNlbGVjdFRp
bWVvdXQpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBzdGQ6OmNocm9u
bzo6bWljcm9zZWNvbmRzIHVzZWMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzPihzZWxlY3RUaW1lb3V0KTsKKworICAgIHN0cnVjdCB0aW1ldmFs
IHRpbWVvdXQ7CisgICAgaWYgKHVzZWMgPD0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcygwKSkg
eworICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9
IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGltZW91dC50dl9zZWMgPSB1c2VjLmNvdW50KCkg
LyAxMDAwMDAwOworICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSB1c2VjLmNvdW50KCkgJSAxMDAw
MDAwOworICAgIH0KKworICAgIGxvbmcgc29ja2V0OworICAgIGlmIChjdXJsX2Vhc3lfZ2V0aW5m
byhjdXJsSGFuZGxlLCBDVVJMSU5GT19MQVNUU09DS0VULCAmc29ja2V0KSAhPSBDVVJMRV9PSykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmRfc2V0IGZkcmVhZDsKKyAgICBGRF9aRVJP
KCZmZHJlYWQpOworICAgIEZEX1NFVChzb2NrZXQsICZmZHJlYWQpOworICAgIGludCByYyA9IDo6
c2VsZWN0KDAsICZmZHJlYWQsIG51bGxwdHIsIG51bGxwdHIsICZ0aW1lb3V0KTsKKyAgICByZXR1
cm4gcmMgPT0gMTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0YXJ0VGhyZWFkKCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fd29ya2VyVGhyZWFk
KQorICAgICAgICByZXR1cm47CisKKyAgICByZWYoKTsgLy8gc3RvcFRocmVhZCgpIHdpbGwgY2Fs
bCBkZXJlZigpLgorCisgICAgbV93b3JrZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQoIldlYlNvY2tl
dCB0aHJlYWQiLCBbdGhpc10geworCisgICAgICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwor
CisgICAgICAgIENVUkwqIGN1cmxIYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworCisgICAgICAg
IGlmICghY3VybEhhbmRsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGN1cmxIYW5kbGUsIENVUkxPUFRfVVJMLCBtX3VybC5ob3N0KCkudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybEhhbmRsZSwgQ1VSTE9QVF9QT1JU
LCBtX3VybC5wb3J0KCkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxIYW5kbGUsIENV
UkxPUFRfQ09OTkVDVF9PTkxZLCAxTCk7CisKKyAgICAgICAgLy8gQ29ubmVjdCB0byBob3N0Cisg
ICAgICAgIGlmIChjdXJsX2Vhc3lfcGVyZm9ybShjdXJsSGFuZGxlKSAhPSBDVVJMRV9PSykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZWYoKTsKKworICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFt0aGlzXSB7CisgICAgICAgICAgICAvLyBDaGVjayByZWZlcmVuY2UgY291bnQgdG8g
Zml4IGEgY3Jhc2guCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBjYWxsIGlzIGludm9rZWQgb24g
dGhlIG1haW4gdGhyZWFkIGFmdGVyIGFsbCBvdGhlciByZWZlcmVuY2VzIGFyZSByZWxlYXNlZCwg
dGhlIFNvY2tldFN0cmVhbUNsaWVudAorICAgICAgICAgICAgLy8gaXMgYWxyZWFkeSBkZWxldGVk
LiBBY2Nlc3NpbmcgdGhlIFNvY2tldFN0cmVhbUNsaWVudCBpbiBkaWRPcGVuU29ja2V0KCkgd2ls
bCB0aGVuIGNhdXNlIGEgY3Jhc2guCisgICAgICAgICAgICBpZiAocmVmQ291bnQoKSA+IDEpCisg
ICAgICAgICAgICAgICAgZGlkT3BlblNvY2tldCgpOworICAgICAgICAgICAgZGVyZWYoKTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgd2hpbGUgKCFtX3N0b3BUaHJlYWQpIHsKKyAgICAgICAgICAg
IC8vIFNlbmQgcXVldWVkIGRhdGEKKyAgICAgICAgICAgIHNlbmREYXRhKGN1cmxIYW5kbGUpOwor
CisgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHNvY2tldCBoYXMgYXZhaWxhYmxlIGRhdGEKKyAg
ICAgICAgICAgIGlmICh3YWl0Rm9yQXZhaWxhYmxlRGF0YShjdXJsSGFuZGxlLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzKDIwKSkpCisgICAgICAgICAgICAgICAgcmVhZERhdGEoY3VybEhhbmRs
ZSk7CisgICAgICAgIH0KKworICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsSGFuZGxlKTsK
KyAgICB9KTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BUaHJlYWQoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fd29ya2VyVGhyZWFkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOworICAgIHdhaXRGb3JU
aHJlYWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKKyAgICBtX3dvcmtlclRocmVhZCA9IDA7
CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZFJlY2VpdmVE
YXRhKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9tdXRleFJlY2Vp
dmUubG9jaygpOworCisgICAgYXV0byByZWNlaXZlRGF0YSA9IFdURk1vdmUobV9yZWNlaXZlRGF0
YSk7CisKKyAgICBtX211dGV4UmVjZWl2ZS51bmxvY2soKTsKKworICAgIGZvciAoYXV0byYgc29j
a2V0RGF0YSA6IHJlY2VpdmVEYXRhKSB7CisgICAgICAgIGlmIChzb2NrZXREYXRhLnNpemUgPiAw
KSB7CisgICAgICAgICAgICBpZiAoc3RhdGUoKSA9PSBPcGVuKQorICAgICAgICAgICAgICAgIG1f
Y2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCBzb2NrZXREYXRhLmRhdGEu
Z2V0KCksIHNvY2tldERhdGEuc2l6ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcGxh
dGZvcm1DbG9zZSgpOworICAgIH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZE9w
ZW5Tb2NrZXQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBtX3N0YXRl
ID0gT3BlbjsKKworICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRoaXMpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZUNvcHko
Y29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hh
cltdPiBjb3B5KG5ldyBjaGFyW2xlbmd0aF0pOworICAgIG1lbWNweShjb3B5LmdldCgpLCBkYXRh
LCBsZW5ndGgpOworCisgICAgcmV0dXJuIFdURk1vdmUoY29weSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
Q3VybC5jcHAJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
U29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5o
IgogCiAjaWYgVVNFKENVUkwpCiAKQEAgLTQ0LDIxICs0NCwyMSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVS
TCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKLSAgICA6IFNvY2tldFN0
cmVhbUhhbmRsZUJhc2UodXJsLCBjbGllbnQpCitTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpTb2Nr
ZXRTdHJlYW1IYW5kbGVJbXBsKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQmIGNsaWVudCkKKyAgICA6IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCkKIHsKICAg
ICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50ICVwIiwgdGhp
cywgJm1fY2xpZW50KTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIHN0YXJ0VGhy
ZWFkKCk7CiB9CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSgpCitT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCgpCiB7CiAgICAg
TE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhpcyk7CiAgICAg
QVNTRVJUKCFtX3dvcmtlclRocmVhZCk7CiB9CiAKLWludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBs
YXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50IFNvY2tldFN0cmVh
bUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQog
ewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtU2VuZCIs
IHRoaXMpOwogCkBAIC03NCw3ICs3NCw3IEBAIGludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRm
b3JtU2VuZChjb24KICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6cGxhdGZvcm1DbG9zZSgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRm
b3JtQ2xvc2UoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBs
YXRmb3JtQ2xvc2UiLCB0aGlzKTsKIApAQCAtODUsNyArODUsNyBAQCB2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiAgICAgbV9jbGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJl
YW0oKnRoaXMpOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZERhdGEoQ1VSTCog
Y3VybEhhbmRsZSkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZERhdGEoQ1VSTCog
Y3VybEhhbmRsZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMTE2LDcg
KzExNiw3IEBAIGJvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YShDVVJMKiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kRGF0YShDVVJM
KiBjdXJsSGFuZGxlKQorYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzZW5kRGF0YShDVVJM
KiBjdXJsSGFuZGxlKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCkBAIC0xNTYs
NyArMTU2LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENVUkwqIAogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWls
YWJsZURhdGEoQ1VSTCogY3VybEhhbmRsZSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzZWxl
Y3RUaW1lb3V0KQorYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3YWl0Rm9yQXZhaWxhYmxl
RGF0YShDVVJMKiBjdXJsSGFuZGxlLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHNlbGVjdFRp
bWVvdXQpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTE4Miw3ICsxODIs
NyBAQCBib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsCiAgICAgcmV0dXJu
IHJjID09IDE7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRocmVhZCgpCit2
b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnN0YXJ0VGhyZWFkKCkKICAgICB9KTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OnN0b3BUaHJlYWQoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzdG9wVGhyZWFk
KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNDUsNyArMjQ1LDcgQEAg
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BUaHJlYWQoKQogICAgIGRlcmVmKCk7CiB9CiAK
LXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRSZWNlaXZlRGF0YSgpCit2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZUltcGw6OmRpZFJlY2VpdmVEYXRhKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogCkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRp
ZFJlY2VpdmVEYXRhKAogICAgIH0KIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZE9w
ZW5Tb2NrZXQoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpkaWRPcGVuU29ja2V0KCkK
IHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNzMsNyArMjczLDcgQEAgdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQoKQogICAgIG1fY2xpZW50LmRpZE9w
ZW5Tb2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
K3N0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZUNv
cHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Y2hhcltdPiBjb3B5KG5ldyBjaGFyW2xlbmd0aF0pOwogICAgIG1lbWNweShjb3B5LmdldCgpLCBk
YXRhLCBsZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvY2tldFN0cmVhbUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24gMjA0NDY2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRs
ZS5oCShub25leGlzdGVudCkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KLSNpZiBVU0UoU09VUCkK
LQotI2luY2x1ZGUgIlNlc3Npb25JRC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIFNvY2tldFN0cmVhbUVycm9yOwotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Owot
Ci1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxTb2Nr
ZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmLCBT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmLCBTZXNzaW9uSUQpOwotICAgIHN0YXRpYyBSZWY8U29j
a2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qLCBTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQmKTsKLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOwotCi1w
cml2YXRlOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQmKTsKLQotICAgIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUNsb3NlKCkgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0gICAgdm9p
ZCBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBj
b25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3Ry
ZWFtSGFuZGxlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3Ry
ZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3RyZWFtSGFuZGxlKik7Ci0gICAgc3RhdGljIGdi
b29sZWFuIHdyaXRlUmVhZHlDYWxsYmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0qLCBTb2NrZXRT
dHJlYW1IYW5kbGUqKTsKLQotICAgIHZvaWQgY29ubmVjdGVkKEdSZWZQdHI8R1NvY2tldENvbm5l
Y3Rpb24+JiYpOwotICAgIHZvaWQgcmVhZEJ5dGVzKGdzc2l6ZSk7Ci0gICAgdm9pZCBkaWRGYWls
KFNvY2tldFN0cmVhbUVycm9yJiYpOwotICAgIHZvaWQgd3JpdGVSZWFkeSgpOwotCi0gICAgR1Jl
ZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOwotICAgIEdSZWZQdHI8
R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOwotICAgIEdSZWZQdHI8R1BvbGxhYmxlT3V0cHV0
U3RyZWFtPiBtX291dHB1dFN0cmVhbTsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IG1fd3JpdGVSZWFk
eVNvdXJjZTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBtX3JlYWRCdWZmZXI7Ci19OwotCi19ICAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl
bGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkocmV2aXNp
b24gMjA0NDY2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29j
a2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0
ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNvY2tldFN0cmVh
bUhhbmRsZUJhc2UuaCIKKworI2lmIFVTRShTT1VQKQorCisjaW5jbHVkZSAiU2Vzc2lvbklELmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29ja2V0U3RyZWFtRXJyb3I7Citj
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFNvY2tldFN0
cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYs
IFNlc3Npb25JRCk7CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShH
U29ja2V0Q29ubmVjdGlvbiosIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworCisgICAgdmly
dHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgU29ja2V0U3RyZWFt
SGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworCisgICAgaW50
IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYmVnaW5XYWl0aW5n
Rm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICB2b2lkIHN0b3BXYWl0aW5nRm9yU29ja2V0V3Jp
dGFiaWxpdHkoKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENhbGxiYWNrKEdTb2NrZXRD
bGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAgICBzdGF0aWMg
dm9pZCByZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBTb2Nr
ZXRTdHJlYW1IYW5kbGUqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd3JpdGVSZWFkeUNhbGxiYWNr
KEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRsZSopOworCisgICAgdm9p
ZCBjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJik7CisgICAgdm9pZCByZWFk
Qnl0ZXMoZ3NzaXplKTsKKyAgICB2b2lkIGRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3ImJik7Cisg
ICAgdm9pZCB3cml0ZVJlYWR5KCk7CisKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBt
X3NvY2tldENvbm5lY3Rpb247CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJl
YW07CisgICAgR1JlZlB0cjxHUG9sbGFibGVPdXRwdXRTdHJlYW0+IG1fb3V0cHV0U3RyZWFtOwor
ICAgIEdSZWZQdHI8R1NvdXJjZT4gbV93cml0ZVJlYWR5U291cmNlOworICAgIEdSZWZQdHI8R0Nh
bmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IG1f
cmVhZEJ1ZmZlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRs
ZS5oIgogCiAjaWYgVVNFKFNPVVApCiAKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgU29ja2V0U3RyZWFtRXJyb3I7CiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQ7CiAKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsK
K2NsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgZmluYWwgOiBwdWJsaWMgU29ja2V0U3RyZWFt
SGFuZGxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3Jl
YXRlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYsIFNlc3Npb25JRCk7CiAg
ICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShHU29ja2V0Q29ubmVjdGlv
biosIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CiAKIHByaXZhdGU6Ci0gICAgU29j
a2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwor
ICAgIFNvY2tldFN0cmVhbUhhbmRsZUltcGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50Jik7CiAKICAgICBpbnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW5ndGgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGxhdGZvcm1DbG9zZSgpIG92ZXJyaWRlOwpAQCAt
NjEsOSArNjEsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3Jp
dGFiaWxpdHkoKTsKICAgICB2b2lkIHN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsK
IAotICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqLCBHQXN5
bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKLSAgICBzdGF0aWMgdm9pZCByZWFkUmVh
ZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5k
bGUqKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gd3JpdGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91
dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRsZSopOworICAgIHN0YXRpYyB2b2lkIGNvbm5l
Y3RlZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsKik7CisgICAgc3RhdGljIHZvaWQgcmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3Ry
ZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCopOworICAgIHN0YXRp
YyBnYm9vbGVhbiB3cml0ZVJlYWR5Q2FsbGJhY2soR1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwgU29j
a2V0U3RyZWFtSGFuZGxlSW1wbCopOwogCiAgICAgdm9pZCBjb25uZWN0ZWQoR1JlZlB0cjxHU29j
a2V0Q29ubmVjdGlvbj4mJik7CiAgICAgdm9pZCByZWFkQnl0ZXMoZ3NzaXplKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
U291cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkocmV2aXNpb24gMjA0NDY2KQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxl
U291cC5jcHA6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9u
aWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
U29ja2V0U3RyZWFtSGFuZGxlLmgiCisKKyNpZiBVU0UoU09VUCkKKworI2luY2x1ZGUgIlVSTC5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgor
I2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPGdpby9naW8u
aD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNkZWZpbmUgUkVBRF9CVUZGRVJfU0laRSAxMDI0CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoY29uc3Qg
VVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCit7
CisgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2Nr
ZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsKKworICAgIHVuc2lnbmVkIHBvcnQgPSB1cmwu
aGFzUG9ydCgpID8gdXJsLnBvcnQoKSA6ICh1cmwucHJvdG9jb2xJcygid3NzIikgPyA0NDMgOiA4
MCk7CisgICAgR1JlZlB0cjxHU29ja2V0Q2xpZW50PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYo
Z19zb2NrZXRfY2xpZW50X25ldygpKTsKKyAgICBpZiAodXJsLnByb3RvY29sSXMoIndzcyIpKQor
ICAgICAgICBnX3NvY2tldF9jbGllbnRfc2V0X3Rscyhzb2NrZXRDbGllbnQuZ2V0KCksIFRSVUUp
OworICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFNvY2tldFN0cmVhbUhhbmRs
ZSA9IHNvY2tldC5jb3B5UmVmKCk7CisgICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9z
dF9hc3luYyhzb2NrZXRDbGllbnQuZ2V0KCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgcG9y
dCwgc29ja2V0LT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICByZWludGVycHJldF9jYXN0
PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tl
dFN0cmVhbUhhbmRsZS5sZWFrUmVmKCkpOworICAgIHJldHVybiBzb2NrZXQ7Cit9CisKK1JlZjxT
b2NrZXRTdHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKEdTb2NrZXRDb25u
ZWN0aW9uKiBzb2NrZXRDb25uZWN0aW9uLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVu
dCkKK3sKKyAgICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3
IFNvY2tldFN0cmVhbUhhbmRsZShVUkwoKSwgY2xpZW50KSk7CisKKyAgICBHUmVmUHRyPEdTb2Nr
ZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gc29ja2V0Q29ubmVjdGlvbjsKKyAgICBzb2NrZXQt
PmNvbm5lY3RlZChXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKKyAgICByZXR1cm4gc29ja2V0OworfQor
CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgOiBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlKHVybCwgY2xpZW50KQorICAgICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5j
ZWxsYWJsZV9uZXcoKSkpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUg
JXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2NsaWVudCk7Cit9CisKK1NvY2tldFN0cmVhbUhh
bmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRT
dHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhpcyk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJiBzb2NrZXRDb25uZWN0
aW9uKQoreworICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFdURk1vdmUoc29ja2V0Q29ubmVjdGlv
bik7CisgICAgbV9vdXRwdXRTdHJlYW0gPSBHX1BPTExBQkxFX09VVFBVVF9TVFJFQU0oZ19pb19z
dHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdl
dCgpKSkpOworICAgIG1faW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFt
KEdfSU9fU1RSRUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpOworICAgIG1fcmVhZEJ1ZmZl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPihSRUFEX0JVRkZFUl9TSVpFKTsKKworICAgIFJl
ZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZ19pbnB1
dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZ2V0
KCksIFJFQURfQlVGRkVSX1NJWkUsIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5n
ZXQoKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFk
UmVhZHlDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKworICAgIG1fc3RhdGUg
PSBPcGVuOworICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRoaXMpOworfQorCit2
b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2FsbGJhY2soR1NvY2tldENsaWVudCog
Y2xpZW50LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUp
Cit7CisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0
UmVmKGhhbmRsZSk7CisKKyAgICAvLyBBbHdheXMgZmluaXNoIHRoZSBjb25uZWN0aW9uLCBldmVu
IGlmIHRoaXMgU29ja2V0U3RyZWFtSGFuZGxlIHdhcyBjYW5jZWxsZWQgZWFybGllci4KKyAgICBH
VW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlv
bj4gc29ja2V0Q29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90
b19ob3N0X2ZpbmlzaChjbGllbnQsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisKKyAgICAv
LyBUaGUgU29ja2V0U3RyZWFtSGFuZGxlIGhhcyBiZWVuIGNhbmNlbGxlZCwgc28ganVzdCBjbG9z
ZSB0aGUgY29ubmVjdGlvbiwgaWdub3JpbmcgZXJyb3JzLgorICAgIGlmIChnX2NhbmNlbGxhYmxl
X2lzX2NhbmNlbGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGlm
IChzb2NrZXRDb25uZWN0aW9uKQorICAgICAgICAgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19T
VFJFQU0oc29ja2V0Q29ubmVjdGlvbi5nZXQoKSksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGVycm9yKQorICAgICAgICBoYW5kbGUtPmRpZEZh
aWwoU29ja2V0U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7CisgICAg
ZWxzZQorICAgICAgICBoYW5kbGUtPmNvbm5lY3RlZChXVEZNb3ZlKHNvY2tldENvbm5lY3Rpb24p
KTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRCeXRlcyhnc3NpemUgYnl0ZXNS
ZWFkKQoreworICAgIGlmICghYnl0ZXNSZWFkKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgY2xpZW50IGNhbiBjbG9zZSB0aGUgaGFuZGxl
LCBwb3RlbnRpYWxseSByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UuCisgICAgUmVmUHRyPFNv
Y2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBtX2NsaWVudC5kaWRS
ZWNlaXZlU29ja2V0U3RyZWFtRGF0YSgqdGhpcywgbV9yZWFkQnVmZmVyLmdldCgpLCBieXRlc1Jl
YWQpOworICAgIGlmIChtX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfaW5wdXRfc3RyZWFtX3Jl
YWRfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JV
RkZFUl9TSVpFLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNh
bGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOworICAgIH0KK30KKwordm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OnJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAg
UmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRs
ZSk7CisKKyAgICAvLyBBbHdheXMgZmluaXNoIHRoZSByZWFkLCBldmVuIGlmIHRoaXMgU29ja2V0
U3RyZWFtSGFuZGxlIHdhcyBjYW5jZWxsZWQgZWFybGllci4KKyAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRf
ZmluaXNoKHN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgaWYgKGdfY2Fu
Y2VsbGFibGVfaXNfY2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5jZWxsYWJsZS5nZXQoKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChlcnJvcikKKyAgICAgICAgaGFuZGxlLT5kaWRGYWlsKFNv
Y2tldFN0cmVhbUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOworICAgIGVsc2UK
KyAgICAgICAgaGFuZGxlLT5yZWFkQnl0ZXMoYnl0ZXNSZWFkKTsKK30KKwordm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OmRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3ImJiBlcnJvcikKK3sKKyAgICBt
X2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5KCkKK3sKKyAgICAvLyBXZSBubyBs
b25nZXIgaGF2ZSBidWZmZXJlZCBkYXRhLCBzbyBzdG9wIHdhaXRpbmcgZm9yIHRoZSBzb2NrZXQg
dG8gYmUgd3JpdGFibGUuCisgICAgaWYgKCFidWZmZXJlZEFtb3VudCgpKSB7CisgICAgICAgIHN0
b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHNlbmRQZW5kaW5nRGF0YSgpOworfQorCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpw
bGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBMT0coTmV0
d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybVNlbmQiLCB0aGlzKTsKKyAgICBp
ZiAoIW1fb3V0cHV0U3RyZWFtIHx8ICFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdV
bmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBnc3NpemUgd3JpdHRlbiA9IGdfcG9sbGFi
bGVfb3V0cHV0X3N0cmVhbV93cml0ZV9ub25ibG9ja2luZyhtX291dHB1dFN0cmVhbS5nZXQoKSwg
ZGF0YSwgbGVuZ3RoLCBtX2NhbmNlbGxhYmxlLmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpOworICAg
IGlmIChlcnJvcikgeworICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBH
X0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKSkKKyAgICAgICAgICAgIGJlZ2luV2Fp
dGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRp
ZEZhaWwoU29ja2V0U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIElmIHdlIGRpZCBub3Qgc2VuZCBhbGwg
dGhlIGJ5dGVzIHdlIHdlcmUgZ2l2ZW4sIHdlIGtub3cgdGhhdAorICAgIC8vIFNvY2tldFN0cmVh
bUhhbmRsZUJhc2Ugd2lsbCBuZWVkIHRvIHNlbmQgbW9yZSBpbiB0aGUgZnV0dXJlLgorICAgIGlm
ICh3cml0dGVuIDwgbGVuZ3RoKQorICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJp
bGl0eSgpOworCisgICAgcmV0dXJuIHdyaXR0ZW47Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpwbGF0Zm9ybUNsb3NlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhh
bmRsZSAlcCBwbGF0Zm9ybUNsb3NlIiwgdGhpcyk7CisgICAgLy8gV2UgY2FuY2VsIHRoaXMgaGFu
ZGxlIGZpcnN0IHRvIGRpc2FibGUgYWxsIGNhbGxiYWNrcy4KKyAgICBnX2NhbmNlbGxhYmxlX2Nh
bmNlbChtX2NhbmNlbGxhYmxlLmdldCgpKTsKKyAgICBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRh
YmlsaXR5KCk7CisKKyAgICBpZiAobV9zb2NrZXRDb25uZWN0aW9uKSB7CisgICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19T
VFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigp
KTsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZGlkRmFpbChTb2NrZXRTdHJlYW1F
cnJvcihlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgbV9zb2NrZXRDb25u
ZWN0aW9uID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBtX291dHB1dFN0cmVhbSA9IG51bGxwdHI7
CisgICAgbV9pbnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9yZWFkQnVmZmVyID0gbnVsbHB0
cjsKKworICAgIG1fY2xpZW50LmRpZENsb3NlU29ja2V0U3RyZWFtKCp0aGlzKTsKK30KKwordm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkK
K3sKKyAgICBpZiAobV93cml0ZVJlYWR5U291cmNlKSAvLyBBbHJlYWR5IHdhaXRpbmcuCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fd3JpdGVSZWFkeVNvdXJjZSA9IGFkb3B0R1JlZihnX3BvbGxh
YmxlX291dHB1dF9zdHJlYW1fY3JlYXRlX3NvdXJjZShtX291dHB1dFN0cmVhbS5nZXQoKSwgbV9j
YW5jZWxsYWJsZS5nZXQoKSkpOworICAgIHJlZigpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFj
ayhtX3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KHdyaXRlUmVhZHlDYWxsYmFjayksIHRoaXMsCisgICAgICAgIFtdKGdwb2ludGVyIGhhbmRsZSkg
eyBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihoYW5kbGUpLT5kZXJlZigpOyB9KTsK
KyAgICBnX3NvdXJjZV9hdHRhY2gobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCBnX21haW5fY29u
dGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
OjpzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3sKKyAgICBpZiAoIW1fd3JpdGVS
ZWFkeVNvdXJjZSkgLy8gTm90IHdhaXRpbmcuCisgICAgICAgIHJldHVybjsKKworICAgIGdfc291
cmNlX2Rlc3Ryb3kobV93cml0ZVJlYWR5U291cmNlLmdldCgpKTsKKyAgICBtX3dyaXRlUmVhZHlT
b3VyY2UgPSBudWxscHRyOworfQorCitnYm9vbGVhbiBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRl
UmVhZHlDYWxsYmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0qLCBTb2NrZXRTdHJlYW1IYW5kbGUq
IGhhbmRsZSkKK3sKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoaGFuZGxlLT5t
X2NhbmNlbGxhYmxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKKwor
ICAgIGhhbmRsZS0+d3JpdGVSZWFkeSgpOworICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIKKyNpbmNsdWRlICJTb2NrZXRT
dHJlYW1IYW5kbGVJbXBsLmgiCiAKICNpZiBVU0UoU09VUCkKIApAQCAtNDgsOSArNDgsOSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFNvY2tldFN0
cmVhbUhhbmRsZTo6Y3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQmIGNsaWVudCwgU2Vzc2lvbklEKQorUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbDo6Y3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQmIGNsaWVudCwgU2Vzc2lvbklEKQogewotICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+
IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50KSk7
CisgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2Nr
ZXRTdHJlYW1IYW5kbGVJbXBsKHVybCwgY2xpZW50KSk7CiAKICAgICB1bnNpZ25lZCBwb3J0ID0g
dXJsLmhhc1BvcnQoKSA/IHVybC5wb3J0KCkgOiAodXJsLnByb3RvY29sSXMoIndzcyIpID8gNDQz
IDogODApOwogICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRH
UmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7CkBAIC02MiwzNSArNjIsMzUgQEAgUmVmPFNvY2tl
dFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZAogICAgIHJldHVybiBzb2NrZXQ7CiB9CiAK
LVJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKEdTb2Nr
ZXRDb25uZWN0aW9uKiBzb2NrZXRDb25uZWN0aW9uLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQm
IGNsaWVudCkKK1JlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OmNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiogc29ja2V0Q29ubmVjdGlvbiwgU29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gc29j
a2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUoVVJMKCksIGNsaWVudCkpOwor
ICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbChVUkwoKSwgY2xpZW50KSk7CiAKICAgICBHUmVmUHRyPEdTb2NrZXRD
b25uZWN0aW9uPiBjb25uZWN0aW9uID0gc29ja2V0Q29ubmVjdGlvbjsKICAgICBzb2NrZXQtPmNv
bm5lY3RlZChXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKICAgICByZXR1cm4gc29ja2V0OwogfQogCi1T
b2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29j
a2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVC
YXNlKHVybCwgY2xpZW50KQorU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbChjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQp
CisgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpCiAgICAgLCBtX2NhbmNlbGxh
YmxlKGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSkKIHsKICAgICBMT0coTmV0d29yaywg
IlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50ICVwIiwgdGhpcywgJm1fY2xpZW50KTsK
IH0KIAotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkKK1NvY2tldFN0
cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsKCkKIHsKICAgICBMT0coTmV0
d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkZWxldGUiLCB0aGlzKTsKIH0KIAotdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGU6OmNvbm5lY3RlZChHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiYm
IHNvY2tldENvbm5lY3Rpb24pCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNvbm5lY3Rl
ZChHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiYmIHNvY2tldENvbm5lY3Rpb24pCiB7CiAgICAg
bV9zb2NrZXRDb25uZWN0aW9uID0gV1RGTW92ZShzb2NrZXRDb25uZWN0aW9uKTsKICAgICBtX291
dHB1dFN0cmVhbSA9IEdfUE9MTEFCTEVfT1VUUFVUX1NUUkVBTShnX2lvX3N0cmVhbV9nZXRfb3V0
cHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX3NvY2tldENvbm5lY3Rpb24uZ2V0KCkpKSk7CiAgICAg
bV9pbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0o
bV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSk7CiAgICAgbV9yZWFkQnVmZmVyID0gc3RkOjptYWtl
X3VuaXF1ZTxjaGFyW10+KFJFQURfQlVGRkVSX1NJWkUpOwogCi0gICAgUmVmUHRyPFNvY2tldFN0
cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWY8U29ja2V0U3RyZWFtSGFu
ZGxlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKICAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5j
KG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5nZXQoKSwgUkVBRF9CVUZGRVJfU0la
RSwgR19QUklPUklUWV9ERUZBVUxULCBtX2NhbmNlbGxhYmxlLmdldCgpLAogICAgICAgICByZWlu
dGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwgcHJv
dGVjdGVkVGhpcy5sZWFrUmVmKCkpOwogCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpjb25uZWN0ZWQoR1JlZlAKICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3Ry
ZWFtKCp0aGlzKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNvbm5lY3RlZENhbGxi
YWNrKEdTb2NrZXRDbGllbnQqIGNsaWVudCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNvY2tldFN0
cmVhbUhhbmRsZSogaGFuZGxlKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjb25uZWN0
ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiBjbGllbnQsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsKiBoYW5kbGUpCiB7CiAgICAgUmVmUHRyPFNvY2tldFN0cmVh
bUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRsZSk7CiAKQEAgLTExOSw3ICsx
MTksNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2FsbGJhCiAgICAgICAg
IGhhbmRsZS0+Y29ubmVjdGVkKFdURk1vdmUoc29ja2V0Q29ubmVjdGlvbikpOwogfQogCi12b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKGdzc2l6ZSBieXRlc1JlYWQpCit2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OnJlYWRCeXRlcyhnc3NpemUgYnl0ZXNSZWFkKQogewogICAg
IGlmICghYnl0ZXNSZWFkKSB7CiAgICAgICAgIGNsb3NlKCk7CkBAIC0xMzUsNyArMTM1LDcgQEAg
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRCeXRlcyhnc3NpegogICAgIH0KIH0KIAotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSogc3Ry
ZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit2
b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVh
bSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCog
aGFuZGxlKQogewogICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXMg
PSBhZG9wdFJlZihoYW5kbGUpOwogCkBAIC0xNTIsMTIgKzE1MiwxMiBAQCB2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZFJlYWR5Q2FsbGJhCiAgICAgICAgIGhhbmRsZS0+cmVhZEJ5dGVzKGJ5
dGVzUmVhZCk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRGYWlsKFNvY2tldFN0
cmVhbUVycm9yJiYgZXJyb3IpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmRpZEZhaWwo
U29ja2V0U3RyZWFtRXJyb3ImJiBlcnJvcikKIHsKICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0
U3RyZWFtKCp0aGlzLCBXVEZNb3ZlKGVycm9yKSk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjp3cml0ZVJlYWR5KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6d3JpdGVSZWFk
eSgpCiB7CiAgICAgLy8gV2Ugbm8gbG9uZ2VyIGhhdmUgYnVmZmVyZWQgZGF0YSwgc28gc3RvcCB3
YWl0aW5nIGZvciB0aGUgc29ja2V0IHRvIGJlIHdyaXRhYmxlLgogICAgIGlmICghYnVmZmVyZWRB
bW91bnQoKSkgewpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3
cml0ZVJlYWR5KCkKICAgICBzZW5kUGVuZGluZ0RhdGEoKTsKIH0KIAotaW50IFNvY2tldFN0cmVh
bUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCitpbnQg
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxh
dGZvcm1TZW5kIiwgdGhpcyk7CiAgICAgaWYgKCFtX291dHB1dFN0cmVhbSB8fCAhZGF0YSkKQEAg
LTE4NSwxNCArMTg1LDE0IEBAIGludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChj
b24KICAgICB9CiAKICAgICAvLyBJZiB3ZSBkaWQgbm90IHNlbmQgYWxsIHRoZSBieXRlcyB3ZSB3
ZXJlIGdpdmVuLCB3ZSBrbm93IHRoYXQKLSAgICAvLyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHdp
bGwgbmVlZCB0byBzZW5kIG1vcmUgaW4gdGhlIGZ1dHVyZS4KKyAgICAvLyBTb2NrZXRTdHJlYW1I
YW5kbGUgd2lsbCBuZWVkIHRvIHNlbmQgbW9yZSBpbiB0aGUgZnV0dXJlLgogICAgIGlmICh3cml0
dGVuIDwgbGVuZ3RoKQogICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgp
OwogCiAgICAgcmV0dXJuIHdyaXR0ZW47CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpw
bGF0Zm9ybUNsb3NlKCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxhdGZvcm1DbG9z
ZSgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1D
bG9zZSIsIHRoaXMpOwogICAgIC8vIFdlIGNhbmNlbCB0aGlzIGhhbmRsZSBmaXJzdCB0byBkaXNh
YmxlIGFsbCBjYWxsYmFja3MuCkBAIC0yMTQsMTkgKzIxNCwyMCBAQCB2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiAgICAgbV9jbGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJl
YW0oKnRoaXMpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6YmVnaW5XYWl0aW5nRm9y
U29ja2V0V3JpdGFiaWxpdHkoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpiZWdpbldh
aXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpCiB7CiAgICAgaWYgKG1fd3JpdGVSZWFkeVNvdXJj
ZSkgLy8gQWxyZWFkeSB3YWl0aW5nLgogICAgICAgICByZXR1cm47CiAKICAgICBtX3dyaXRlUmVh
ZHlTb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9vdXRwdXRfc3RyZWFtX2NyZWF0ZV9zb3Vy
Y2UobV9vdXRwdXRTdHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCkpKTsKICAgICByZWYo
KTsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCBy
ZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3cml0ZVJlYWR5Q2FsbGJhY2spLCB0aGlzLAot
ICAgICAgICBbXShncG9pbnRlciBoYW5kbGUpIHsgc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFu
ZGxlKj4oaGFuZGxlKS0+ZGVyZWYoKTsgfSk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1f
d3JpdGVSZWFkeVNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od3Jp
dGVSZWFkeUNhbGxiYWNrKSwgdGhpcywgW10oZ3BvaW50ZXIgaGFuZGxlKSB7IAorICAgICAgICBz
dGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKj4oaGFuZGxlKS0+ZGVyZWYoKTsKKyAg
ICB9KTsKICAgICBnX3NvdXJjZV9hdHRhY2gobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCBnX21h
aW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlOjpzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3ZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbDo6c3RvcFdhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpCiB7CiAgICAg
aWYgKCFtX3dyaXRlUmVhZHlTb3VyY2UpIC8vIE5vdCB3YWl0aW5nLgogICAgICAgICByZXR1cm47
CkBAIC0yMzUsNyArMjM2LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5n
Rm9yUwogICAgIG1fd3JpdGVSZWFkeVNvdXJjZSA9IG51bGxwdHI7CiB9CiAKLWdib29sZWFuIFNv
Y2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVh
bSosIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQorZ2Jvb2xlYW4gU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6d3JpdGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGwqIGhhbmRsZSkKIHsKICAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19j
YW5jZWxsZWQoaGFuZGxlLT5tX2NhbmNlbGxhYmxlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIEdf
U09VUkNFX1JFTU9WRTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAJKHJldmlz
aW9uIDIwNDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2Nr
ZXRTdHJlYW1IYW5kbGVTb3VwLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgTHRkLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJl
YW1IYW5kbGUuaCIKLQotI2lmIFVTRShTT1VQKQotCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVk
ZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCi0jaW5jbHVkZSAi
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1
ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIv
R1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2RlZmluZSBS
RUFEX0JVRkZFUl9TSVpFIDEwMjQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8U29ja2V0
U3RyZWFtSGFuZGxlPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZShjb25zdCBVUkwmIHVybCwg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkKLXsKLSAgICBSZWY8
U29ja2V0U3RyZWFtSGFuZGxlPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhh
bmRsZSh1cmwsIGNsaWVudCkpOwotCi0gICAgdW5zaWduZWQgcG9ydCA9IHVybC5oYXNQb3J0KCkg
PyB1cmwucG9ydCgpIDogKHVybC5wcm90b2NvbElzKCJ3c3MiKSA/IDQ0MyA6IDgwKTsKLSAgICBH
UmVmUHRyPEdTb2NrZXRDbGllbnQ+IHNvY2tldENsaWVudCA9IGFkb3B0R1JlZihnX3NvY2tldF9j
bGllbnRfbmV3KCkpOwotICAgIGlmICh1cmwucHJvdG9jb2xJcygid3NzIikpCi0gICAgICAgIGdf
c29ja2V0X2NsaWVudF9zZXRfdGxzKHNvY2tldENsaWVudC5nZXQoKSwgVFJVRSk7Ci0gICAgUmVm
PFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkU29ja2V0U3RyZWFtSGFuZGxlID0gc29ja2V0
LmNvcHlSZWYoKTsKLSAgICBnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5jKHNv
Y2tldENsaWVudC5nZXQoKSwgdXJsLmhvc3QoKS51dGY4KCkuZGF0YSgpLCBwb3J0LCBzb2NrZXQt
Pm1fY2FuY2VsbGFibGUuZ2V0KCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVh
ZHlDYWxsYmFjaz4oY29ubmVjdGVkQ2FsbGJhY2spLCAmcHJvdGVjdGVkU29ja2V0U3RyZWFtSGFu
ZGxlLmxlYWtSZWYoKSk7Ci0gICAgcmV0dXJuIHNvY2tldDsKLX0KLQotUmVmPFNvY2tldFN0cmVh
bUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qIHNv
Y2tldENvbm5lY3Rpb24sIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQotewotICAg
IFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3Ry
ZWFtSGFuZGxlKFVSTCgpLCBjbGllbnQpKTsKLQotICAgIEdSZWZQdHI8R1NvY2tldENvbm5lY3Rp
b24+IGNvbm5lY3Rpb24gPSBzb2NrZXRDb25uZWN0aW9uOwotICAgIHNvY2tldC0+Y29ubmVjdGVk
KFdURk1vdmUoY29ubmVjdGlvbikpOwotICAgIHJldHVybiBzb2NrZXQ7Ci19Ci0KLVNvY2tldFN0
cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJl
YW1IYW5kbGVDbGllbnQmIGNsaWVudCkKLSAgICA6IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UodXJs
LCBjbGllbnQpCi0gICAgLCBtX2NhbmNlbGxhYmxlKGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25l
dygpKSkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xp
ZW50ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29j
a2V0U3RyZWFtSGFuZGxlKCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRs
ZSAlcCBkZWxldGUiLCB0aGlzKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNvbm5l
Y3RlZChHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiYmIHNvY2tldENvbm5lY3Rpb24pCi17Ci0g
ICAgbV9zb2NrZXRDb25uZWN0aW9uID0gV1RGTW92ZShzb2NrZXRDb25uZWN0aW9uKTsKLSAgICBt
X291dHB1dFN0cmVhbSA9IEdfUE9MTEFCTEVfT1VUUFVUX1NUUkVBTShnX2lvX3N0cmVhbV9nZXRf
b3V0cHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX3NvY2tldENvbm5lY3Rpb24uZ2V0KCkpKSk7Ci0g
ICAgbV9pbnB1dFN0cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJF
QU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSk7Ci0gICAgbV9yZWFkQnVmZmVyID0gc3RkOjpt
YWtlX3VuaXF1ZTxjaGFyW10+KFJFQURfQlVGRkVSX1NJWkUpOwotCi0gICAgUmVmUHRyPFNvY2tl
dFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBnX2lucHV0X3N0cmVhbV9y
ZWFkX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5nZXQoKSwgUkVBRF9C
VUZGRVJfU0laRSwgR19QUklPUklUWV9ERUZBVUxULCBtX2NhbmNlbGxhYmxlLmdldCgpLAotICAg
ICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxi
YWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwotCi0gICAgbV9zdGF0ZSA9IE9wZW47Ci0g
ICAgbV9jbGllbnQuZGlkT3BlblNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlOjpjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiBjbGllbnQsIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKLXsKLSAgICBS
ZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYoaGFuZGxl
KTsKLQotICAgIC8vIEFsd2F5cyBmaW5pc2ggdGhlIGNvbm5lY3Rpb24sIGV2ZW4gaWYgdGhpcyBT
b2NrZXRTdHJlYW1IYW5kbGUgd2FzIGNhbmNlbGxlZCBlYXJsaWVyLgotICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKLSAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBzb2NrZXRD
b25uZWN0aW9uID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfZmlu
aXNoKGNsaWVudCwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLQotICAgIC8vIFRoZSBTb2Nr
ZXRTdHJlYW1IYW5kbGUgaGFzIGJlZW4gY2FuY2VsbGVkLCBzbyBqdXN0IGNsb3NlIHRoZSBjb25u
ZWN0aW9uLCBpZ25vcmluZyBlcnJvcnMuCi0gICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2Vs
bGVkKGhhbmRsZS0+bV9jYW5jZWxsYWJsZS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKHNvY2tldENv
bm5lY3Rpb24pCi0gICAgICAgICAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NUUkVBTShzb2Nr
ZXRDb25uZWN0aW9uLmdldCgpKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIGhhbmRsZS0+ZGlkRmFpbChTb2NrZXRT
dHJlYW1FcnJvcihlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICBlbHNlCi0gICAg
ICAgIGhhbmRsZS0+Y29ubmVjdGVkKFdURk1vdmUoc29ja2V0Q29ubmVjdGlvbikpOwotfQotCi12
b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKGdzc2l6ZSBieXRlc1JlYWQpCi17Ci0g
ICAgaWYgKCFieXRlc1JlYWQpIHsKLSAgICAgICAgY2xvc2UoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIFRoZSBjbGllbnQgY2FuIGNsb3NlIHRoZSBoYW5kbGUsIHBvdGVudGlh
bGx5IHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZS4KLSAgICBSZWZQdHI8U29ja2V0U3RyZWFt
SGFuZGxlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2Nr
ZXRTdHJlYW1EYXRhKCp0aGlzLCBtX3JlYWRCdWZmZXIuZ2V0KCksIGJ5dGVzUmVhZCk7Ci0gICAg
aWYgKG1faW5wdXRTdHJlYW0pIHsKLSAgICAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyht
X2lucHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZ2V0KCksIFJFQURfQlVGRkVSX1NJWkUs
IEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKLSAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZFJlYWR5Q2FsbGJhY2spLCBw
cm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Ci0gICAgfQotfQotCi12b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6cmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3Vs
dCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKLXsKLSAgICBSZWZQdHI8U29j
a2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYoaGFuZGxlKTsKLQotICAg
IC8vIEFsd2F5cyBmaW5pc2ggdGhlIHJlYWQsIGV2ZW4gaWYgdGhpcyBTb2NrZXRTdHJlYW1IYW5k
bGUgd2FzIGNhbmNlbGxlZCBlYXJsaWVyLgotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJv
cjsKLSAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goc3Ry
ZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7Ci0KLSAgICBpZiAoZ19jYW5jZWxsYWJsZV9p
c19jYW5jZWxsZWQoaGFuZGxlLT5tX2NhbmNlbGxhYmxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGVycm9yKQotICAgICAgICBoYW5kbGUtPmRpZEZhaWwoU29ja2V0U3RyZWFt
RXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgZWxzZQotICAgICAgICBo
YW5kbGUtPnJlYWRCeXRlcyhieXRlc1JlYWQpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6ZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvciYmIGVycm9yKQotewotICAgIG1fY2xpZW50LmRp
ZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OndyaXRlUmVhZHkoKQotewotICAgIC8vIFdlIG5vIGxvbmdlciBoYXZl
IGJ1ZmZlcmVkIGRhdGEsIHNvIHN0b3Agd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0byBiZSB3cml0
YWJsZS4KLSAgICBpZiAoIWJ1ZmZlcmVkQW1vdW50KCkpIHsKLSAgICAgICAgc3RvcFdhaXRpbmdG
b3JTb2NrZXRXcml0YWJpbGl0eSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2Vu
ZFBlbmRpbmdEYXRhKCk7Ci19Ci0KLWludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2Vu
ZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIExPRyhOZXR3b3JrLCAiU29j
a2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtU2VuZCIsIHRoaXMpOwotICAgIGlmICghbV9vdXRw
dXRTdHJlYW0gfHwgIWRhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycm9yOwotICAgIGdzc2l6ZSB3cml0dGVuID0gZ19wb2xsYWJsZV9vdXRwdXRf
c3RyZWFtX3dyaXRlX25vbmJsb2NraW5nKG1fb3V0cHV0U3RyZWFtLmdldCgpLCBkYXRhLCBsZW5n
dGgsIG1fY2FuY2VsbGFibGUuZ2V0KCksICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgaWYgKGVycm9y
KSB7Ci0gICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1Is
IEdfSU9fRVJST1JfV09VTERfQkxPQ0spKQotICAgICAgICAgICAgYmVnaW5XYWl0aW5nRm9yU29j
a2V0V3JpdGFiaWxpdHkoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlkRmFpbChTb2Nr
ZXRTdHJlYW1FcnJvcihlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZGlkIG5vdCBzZW5kIGFsbCB0aGUgYnl0ZXMg
d2Ugd2VyZSBnaXZlbiwgd2Uga25vdyB0aGF0Ci0gICAgLy8gU29ja2V0U3RyZWFtSGFuZGxlQmFz
ZSB3aWxsIG5lZWQgdG8gc2VuZCBtb3JlIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHdyaXR0ZW4g
PCBsZW5ndGgpCi0gICAgICAgIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0K
LSAgICByZXR1cm4gd3JpdHRlbjsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRm
b3JtQ2xvc2UoKQotewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBs
YXRmb3JtQ2xvc2UiLCB0aGlzKTsKLSAgICAvLyBXZSBjYW5jZWwgdGhpcyBoYW5kbGUgZmlyc3Qg
dG8gZGlzYWJsZSBhbGwgY2FsbGJhY2tzLgotICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2Fu
Y2VsbGFibGUuZ2V0KCkpOwotICAgIHN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsK
LQotICAgIGlmIChtX3NvY2tldENvbm5lY3Rpb24pIHsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxH
RXJyb3I+IGVycm9yOwotICAgICAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NUUkVBTShtX3Nv
Y2tldENvbm5lY3Rpb24uZ2V0KCkpLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAg
ICBpZiAoZXJyb3IpCi0gICAgICAgICAgICBkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yKGVycm9y
LT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOwotICAgICAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBu
dWxscHRyOwotICAgIH0KLQotICAgIG1fb3V0cHV0U3RyZWFtID0gbnVsbHB0cjsKLSAgICBtX2lu
cHV0U3RyZWFtID0gbnVsbHB0cjsKLSAgICBtX3JlYWRCdWZmZXIgPSBudWxscHRyOwotCi0gICAg
bV9jbGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMpOwotfQotCi12b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6YmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKQotewotICAgIGlm
IChtX3dyaXRlUmVhZHlTb3VyY2UpIC8vIEFscmVhZHkgd2FpdGluZy4KLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV93cml0ZVJlYWR5U291cmNlID0gYWRvcHRHUmVmKGdfcG9sbGFibGVfb3V0cHV0
X3N0cmVhbV9jcmVhdGVfc291cmNlKG1fb3V0cHV0U3RyZWFtLmdldCgpLCBtX2NhbmNlbGxhYmxl
LmdldCgpKSk7Ci0gICAgcmVmKCk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fd3JpdGVS
ZWFkeVNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od3JpdGVSZWFk
eUNhbGxiYWNrKSwgdGhpcywKLSAgICAgICAgW10oZ3BvaW50ZXIgaGFuZGxlKSB7IHN0YXRpY19j
YXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGhhbmRsZSktPmRlcmVmKCk7IH0pOwotICAgIGdfc291
cmNlX2F0dGFjaChtX3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCksIGdfbWFpbl9jb250ZXh0X2dldF90
aHJlYWRfZGVmYXVsdCgpKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BXYWl0
aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKQotewotICAgIGlmICghbV93cml0ZVJlYWR5U291cmNl
KSAvLyBOb3Qgd2FpdGluZy4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zb3VyY2VfZGVzdHJv
eShtX3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCkpOwotICAgIG1fd3JpdGVSZWFkeVNvdXJjZSA9IG51
bGxwdHI7Ci19Ci0KLWdib29sZWFuIFNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeUNhbGxi
YWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQot
ewotICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChoYW5kbGUtPm1fY2FuY2VsbGFi
bGUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOwotCi0gICAgaGFuZGxl
LT53cml0ZVJlYWR5KCk7Ci0gICAgcmV0dXJuIEdfU09VUkNFX0NPTlRJTlVFOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
MjA0NDc0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTYtMDgtMTUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZW5hbWUgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB0byBT
b2NrZXRTdHJlYW1IYW5kbGUgYW5kIFNvY2tldFN0cmVhbUhhbmRsZSB0byBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjA4NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRQcm92aWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldFByb3ZpZGVyOjpjcmVhdGVTb2NrZXRTdHJlYW1IYW5kbGUpOgorCiAy
MDE2LTA4LTE1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgRml4IGlPUyBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJTb2NrZXRQcm92aWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNwcAkocmV2aXNpb24gMjA0NDY2KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTYgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShXRUJfU09D
S0VUUykKIAotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NvY2tldFN0cmVh
bUhhbmRsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRDaGFubmVsLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRDaGFubmVsQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9Xb3JrZXJHbG9iYWxTY29wZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV29ya2VyUnVuTG9v
cC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV29ya2VyVGhyZWFkLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApA
QCAtNTEsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIFJlZjxTb2NrZXRTdHJlYW1IYW5k
bGU+IFdlYlNvY2tldFByb3ZpZGVyOjpjcmVhdGVTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJM
JiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lv
bklEKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1cm4gYSBwcm94eSBzbyB3ZSBj
YW4gZG8gdGhlIGFjdHVhbCBuZXR3b3JrIGludGVyYWN0aW9ucyBpbiB0aGUgTmV0d29ya1Byb2Nl
c3MuCi0gICAgcmV0dXJuIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKHVybCwgY2xpZW50LCBz
ZXNzaW9uSUQpOworICAgIHJldHVybiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGUodXJs
LCBjbGllbnQsIHNlc3Npb25JRCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286079</attachid>
            <date>2016-08-15 13:00:35 -0700</date>
            <delta_ts>2016-08-15 13:15:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160858-20160815125850.patch</filename>
            <type>text/plain</type>
            <size>192584</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NCBAQAorMjAxNi0wOC0xNSAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlIHRvIFNvY2tldFN0cmVhbUhhbmRsZSBhbmQgU29ja2V0U3Ry
ZWFtSGFuZGxlIHRvIFNvY2tldFN0cmVhbUhhbmRsZUltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDg1OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvciwgZXhjZXB0IEdUSydzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgaXMgbm93IHNhZmVs
eSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgVGhpcyBpcyBwcmVwYXJhdGlvbiBmb3Ig
bWFraW5nIGEgbmV3IGtpbmQgb2YgU29ja2V0U3RyZWFtSGFuZGxlIHdoaWNoIGlzIGEgcHJveHkg
dGhhdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MgaW4gV2ViS2l0Mi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsu
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1X
aW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9Tb2NrZXRQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVh
bUhhbmRsZTo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OnNlbmRQZW5kaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6ZGlzY29ubmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kUGVuZGluZ0Rh
dGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFu
ZGxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0
U3RyZWFtSGFuZGxlQmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
Ojp+U29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6
On5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzY2hlZHVsZVN0cmVh
bXMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmV0YWluU29j
a2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmV4ZWN1dGVQQUNGaWxl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbW92ZVBB
Q1J1bkxvb3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHlGcm9tQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJDb3JlOjphdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjphZGRDT05ORUNUQ3Jl
ZGVudGlhbHMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29w
eUNGU3RyZWFtRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVwb3J0RXJyb3JUb0NsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxhdGZvcm1DbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVT
dHJlYW1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6
cmV0YWluU29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZTo6cmVsZWFzZVNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlQQUNFeGVjdXRpb25EZXNj
cmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZW1vdmVQQUNSdW5Mb29wU291cmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y2hvb3NlUHJveHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94
eUZyb21BcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OmNyZWF0ZVN0cmVhbXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3Ry
ZWFtSGFuZGxlOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmFkZENPTk5FQ1RDcmVkZW50aWFs
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlD
RlN0cmVhbURlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZFN0cmVhbUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVTdHJlYW1DYWxsYmFjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6cGxhdGZvcm1TZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBvcnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0
cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlYWREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnNlbmREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndhaXRGb3JBdmFpbGFi
bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlk
T3BlblNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
cmVhdGVDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRo
cmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0
b3BUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
OjpkaWRSZWNlaXZlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29j
a2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVDb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRs
ZS5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsU291cC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNvbm5lY3RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjb25uZWN0ZWRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFkQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFJlYWR5Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkRmFpbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3cml0ZVJlYWR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmJlZ2luV2FpdGluZ0Zv
clNvY2tldFdyaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZUltcGw6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6d3JpdGVSZWFkeUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhh
bmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNv
bm5lY3RlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OmNvbm5lY3RlZENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6cmVhZFJlYWR5Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpkaWRGYWlsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdG
b3JTb2NrZXRXcml0YWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRT
dHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1I
YW5kbGVTb3VwLmNwcDogUmVtb3ZlZC4KKwogMjAxNi0wOC0xNSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBXaW5DYWlybyBidWlsZCBh
ZnRlciByMjA0NDY2LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDQ2NikK
KysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMzY3
LDcgKzIzNjcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVx
dWVzdEJhc2UuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5j
cHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAKIAogICAgIHBsYXRmb3JtL3NxbC9TUUxW
YWx1ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAot
ICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c0xvYWRlckNsaWVudENGTmV0LmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU3luY2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY0OCw3ICs2NDgsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hy
b25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAKIApJbmRleDog
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U1NMSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5k
bGVDdXJsLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsQ3VybC5jcHAKIAogICAgIHBsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE5LDggKzIwMTksOCBAQAogCQk1
MTBBNThGQTFCQUNDN0YyMDBDMTkyODIgLyogSURCUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE1OEY2MUJBQ0M0QTUwMEMxOTI4
MiAvKiBJREJSZXF1ZXN0RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1F
cnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEwRDRBMkQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAg
Ki87IH07CiAJCTUxMEQ0QTM0MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0
QTJFMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLzsgfTsKLQkJ
NTEwRDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzAxMDMx
NjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwICovOyB9OwotCQk1MTBE
NEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzExMDMxNjVFRTAw
NDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTBENEEzNjEwMzE2NUVFMDA0OUVBNTQgLyog
U29ja2V0U3RyZWFtSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovOyB9OworCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFt
SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTBENEEzMTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwRDRBMzgxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxMUVDMTI3MUM1MEFBQ0EwMDMyRjk4MyAvKiBJREJTZXJp
YWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMUVDMTI1MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmNwcCAqLzsg
fTsKIAkJNTExRUMxMjgxQzUwQUFDQTAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVDMTI2MUM1MEFB
NTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi87IH07CkBAIC0yMjQxLDggKzIyNDEs
OCBAQAogCQk1MUE5RDlFQTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUU4MTk1Qjkz
MUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovOyB9OwogCQk1MUFBM0Y2RjBCRDVBQTlF
MDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3Vy
Y2VMb2FkZXJNYWMubW0gKi87IH07CiAJCTUxQUJBRTFCMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggKi87
IH07Ci0JCTUxQUJBRTFFMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAz
QzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUFCQUUxRjEwM0MxOTEzMDA4QzUyNjAg
LyogU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0
cmVhbUhhbmRsZUNGTmV0LmNwcCAqLzsgfTsKKwkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxD
Rk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUFCQUUxRDEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNw
cCAqLzsgfTsKIAkJNTFBQkY2NEQxNjM5MkUyODAwMTMyQTdBIC8qIExvYWRlclN0cmF0ZWd5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJGNjRD
MTYzOTJFMjgwMDEzMkE3QSAvKiBMb2FkZXJTdHJhdGVneS5jcHAgKi87IH07CiAJCTUxQUY1MDM2
MTZGMTAwRjYwMDk1QjJFOCAvKiBSZXNvdXJjZUxvYWRlclR5cGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFGNTAzNTE2RjEwMEY2MDA5NUIyRTgg
LyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxQjI0MTdCMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJB
cmNoaXZlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFCMjQxN0EwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gKi87
IH07CkBAIC05MzUyLDggKzkzNTIsOCBAQAogCQk1MTBBNThGRTFCQjA3QUE1MDBDMTkyODIgLyog
SURCQ29ubmVjdGlvblRvQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkNvbm5lY3Rpb25Ub0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJFMTAzMTY1RUUwMDQ5RUE1
NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTBENEEzMTEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFt
SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEwRDRBMzExMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUMxMjUxQzUwQUE1NzAw
MzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCU2VyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMUVDMTI2MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlNlcmlhbGl6YXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NjcsOCArOTU2Nyw4IEBACiAJCTUxQTlEOUU4MTk1
QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHYW1lcGFkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlck1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNv
Y2tldFN0cmVhbUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQUJBRTFD
MTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRT
dHJlYW1IYW5kbGVDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQUJB
RTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUFCRjY0QzE2MzkyRTI4MDAxMzJBN0EgLyogTG9hZGVyU3RyYXRlZ3ku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9hZGVyU3RyYXRlZ3ku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIy
RTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXNvdXJjZUxvYWRlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxQjI0MTdBMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTGVnYWN5V2ViQXJjaGl2ZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTczLDggKzE3OTczLDggQEAKIAkJ
CQk1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLywK
IAkJCQk1MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCAqLywKIAkJCQk1MTBENEEyRTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JC
YXNlLmggKi8sCi0JCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UuY3BwICovLAotCQkJCTUxMEQ0QTMxMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmggKi8sCisJCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNv
Y2tldFN0cmVhbUhhbmRsZS5jcHAgKi8sCisJCQkJNTEwRDRBMzExMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZS5oICovLAogCQkJCTUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLywKIAkJCQlFMTgwODExMDE2RkNGNDJFMDBC
ODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovLAogCQkJCUUxODA4MTE1MTZG
Q0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oICovLApAQCAtMjE4NzIs
OCArMjE4NzIsOCBAQAogCQkJCTdFRTY4NDVEMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJl
c3BvbnNlLmggKi8sCiAJCQkJN0VFNjg0NUUxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVz
cG9uc2VDRk5ldC5jcHAgKi8sCiAJCQkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUVycm9yLmggKi8sCi0JCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZS5oICovLAotCQkJCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgKi8sCisJCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYw
IC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCAqLywKKwkJCQk1MUFCQUUxRDEwM0MxOTEzMDA4
QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcCAqLywKIAkJCQk0NDJBQkNE
NTE3RDkyNjJGMDBEMzA3MTUgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAgKi8s
CiAJCQkJMjZGQUU0Q0ExODUyRTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8sCiAJCQkJMjZGQUU0Q0IxODUyRTNBNTAw
NEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZS5oICovLApAQCAtMjc1NzYsOCArMjc1NzYsOCBAQAogCQkJCTVDN0M4OEQ4MUQwRjFGNEEwMDlE
MkY2RCAvKiBTb2NrZXRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUIxMDND
MThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTBENEEzNDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFBQkFFMUUxMDNDMTkx
MzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxMEQ0QTM3MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMEQ0QTM4MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAv
KiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQzcwQUUwMzcwMzAwQTgy
NjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjIxLDggKzMxMjIxLDggQEAKIAkJ
CQlFNEFGRDAwRDBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUM2ODhBQTMxRDM4MTRCRjAwMEI1NEZBIC8qIFNvY2tldFByb3ZpZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwRDRBMzYxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1
MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDUzOTA0NzBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gaW4gU291cmNlcyAqLywK
IAkJCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk4NEE4MUYzRDBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAkocmV2
aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Tb2NrZXRQcm92aWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKFdFQl9TT0NL
RVRTKQogCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0
U3RyZWFtSGFuZGxlSW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBSZWY8U29j
a2V0U3RyZWFtSGFuZGxlPiBTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICByZXR1cm4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUo
dXJsLCBjbGllbnQsIHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OmNyZWF0ZSh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKTsKIH0KICAgICAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhh
bmRsZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDoyMDQ0NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIw
MTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKKworI2luY2x1ZGUgIlNvY2tldFN0cmVh
bUhhbmRsZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHVuc2lnbmVkIGludCBidWZmZXJTaXplID0gMTAwICog
MTAyNCAqIDEwMjQ7CisKK1NvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQor
ICAgIDogbV91cmwodXJsKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdGF0ZShD
b25uZWN0aW5nKQoreworfQorCitTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1T
dGF0ZSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3RhdGU7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZChjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmIChtX3N0YXRlID09IENvbm5lY3Rpbmcg
fHwgbV9zdGF0ZSA9PSBDbG9zaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFt
X2J1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0
aCA+IGJ1ZmZlclNpemUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8g
aW5kaWNhdGUgdGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIGxlbmd0
aCk7CisgICAgICAgIG1fY2xpZW50LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSY+KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKKyAgICBpZiAo
bV9zdGF0ZSA9PSBPcGVuKQorICAgICAgICBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQoZGF0
YSwgbGVuZ3RoKTsKKyAgICBpZiAoYnl0ZXNXcml0dGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX2J1ZmZlci5zaXplKCkgKyBsZW5ndGggLSBieXRlc1dyaXR0ZW4gPiBi
dWZmZXJTaXplKSB7CisgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8gaW5kaWNhdGUg
dGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA8IGxlbmd0aCkgeworICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoZGF0YSArIGJ5dGVzV3JpdHRlbiwgbGVuZ3RoIC0gYnl0ZXNXcml0dGVuKTsKKyAgICAg
ICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3Ry
ZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UoKQoreworICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUgPSBD
bG9zaW5nOworICAgIGlmICghbV9idWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgZGlzY29ubmVjdCgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmRpc2Nv
bm5lY3QoKQoreworICAgIGF1dG8gcHJvdGVjdCA9IG1ha2VSZWYoc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlJj4oKnRoaXMpKTsgLy8gcGxhdGZvcm1DbG9zZSBjYWxscyB0aGUgY2xpZW50
LCB3aGljaCBtYXkgbWFrZSB0aGUgaGFuZGxlIGdldCBkZWFsbG9jYXRlZCBpbW1lZGlhdGVseS4K
KworICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICBtX3N0YXRlID0gQ2xvc2VkOworfQorCitib29s
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmRQZW5kaW5nRGF0YSgpCit7CisgICAgaWYgKG1f
c3RhdGUgIT0gT3BlbiAmJiBtX3N0YXRlICE9IENsb3NpbmcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9idWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX3N0YXRlID09
IE9wZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX3N0YXRlID09
IENsb3NpbmcpIHsKKyAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIHBlbmRpbmc7CisgICAgZG8gewor
ICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gcGxhdGZvcm1TZW5kKG1fYnVmZmVyLmZpcnN0Qmxv
Y2tEYXRhKCksIG1fYnVmZmVyLmZpcnN0QmxvY2tTaXplKCkpOworICAgICAgICBwZW5kaW5nID0g
Ynl0ZXNXcml0dGVuICE9IHN0YXRpY19jYXN0PGludD4obV9idWZmZXIuZmlyc3RCbG9ja1NpemUo
KSk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyLnNpemUoKSAtIGJ5dGVzV3JpdHRlbiA8PSBi
dWZmZXJTaXplKTsKKyAgICAgICAgbV9idWZmZXIuY29uc3VtZShieXRlc1dyaXR0ZW4pOworICAg
IH0gd2hpbGUgKCFwZW5kaW5nICYmICFtX2J1ZmZlci5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50
LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSY+
KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1NvY2tldFN0cmVhbUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDI4ICsyOSwyNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KICNpbmNsdWRlICJT
b2NrZXRTdHJlYW1IYW5kbGUuaCIKKwogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IHVuc2lnbmVkIGludCBidWZmZXJT
aXplID0gMTAwICogMTAyNCAqIDEwMjQ7Citjb25zdCB1bnNpZ25lZCBidWZmZXJTaXplID0gMTAw
ICogMTAyNCAqIDEwMjQ7CiAKLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVhbUhh
bmRsZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50
KQorU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQogICAgIDogbV91cmwodXJsKQogICAg
ICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9zdGF0ZShDb25uZWN0aW5nKQogewogfQogCi1T
b2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1TdGF0ZSBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlOjpzdGF0ZSgpIGNvbnN0CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbVN0
YXRlIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0
YXRlOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ29ubmVjdGluZyB8
fCBtX3N0YXRlID09IENsb3NpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc5LDcgKzc4
LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kKGNvbnN0IAogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsb3NlKCkKK3ZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpjbG9zZSgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2Vk
KQogICAgICAgICByZXR1cm47CkBAIC04OSw3ICs4OCw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZTo6Y2xvc2UoKQogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVCYXNlOjpkaXNjb25uZWN0KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaXNj
b25uZWN0KCkKIHsKICAgICBhdXRvIHByb3RlY3QgPSBtYWtlUmVmKHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSY+KCp0aGlzKSk7IC8vIHBsYXRmb3JtQ2xvc2UgY2FsbHMgdGhlIGNsaWVu
dCwgd2hpY2ggbWF5IG1ha2UgdGhlIGhhbmRsZSBnZXQgZGVhbGxvY2F0ZWQgaW1tZWRpYXRlbHku
CiAKQEAgLTk3LDcgKzk2LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpkaXNjb25u
ZWN0KAogICAgIG1fc3RhdGUgPSBDbG9zZWQ7CiB9CiAKLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxl
QmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kUGVu
ZGluZ0RhdGEoKQogewogICAgIGlmIChtX3N0YXRlICE9IE9wZW4gJiYgbV9zdGF0ZSAhPSBDbG9z
aW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjIsNCArMTIxLDQgQEAgYm9vbCBTb2Nr
ZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kUGVuZGluZwogICAgIHJldHVybiB0cnVlOwogfQogCi19
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRs
ZS5oCShyZXZpc2lvbiAyMDQ0NjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oOjIwNDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRl
IDx3dGYvU3RyZWFtQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29j
a2V0U3RyZWFtSGFuZGxlOworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OworCitjbGFz
cyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFNvY2tldFN0cmVh
bVN0YXRlIHsgQ29ubmVjdGluZywgT3BlbiwgQ2xvc2luZywgQ2xvc2VkIH07CisgICAgdmlydHVh
bCB+U29ja2V0U3RyZWFtSGFuZGxlQmFzZSgpIHsgfQorICAgIFNvY2tldFN0cmVhbVN0YXRlIHN0
YXRlKCkgY29uc3Q7CisKKyAgICBib29sIHNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCk7CisgICAgdm9pZCBjbG9zZSgpOyAvLyBEaXNjb25uZWN0IGFmdGVyIGFsbCBkYXRhIGluIGJ1
ZmZlciBhcmUgc2VudC4KKyAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKyAgICBzaXplX3QgYnVmZmVy
ZWRBbW91bnQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KKworICAgIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KworcHJvdGVjdGVkOgorICAgIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UoY29uc3QgVVJMJiwgU29j
a2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CisKKyAgICBib29sIHNlbmRQZW5kaW5nRGF0YSgpOwor
ICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKSA9IDA7CisKKyAgICBVUkwg
bV91cmw7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBtX2NsaWVudDsKKyAgICBTdHJl
YW1CdWZmZXI8Y2hhciwgMTAyNCAqIDEwMjQ+IG1fYnVmZmVyOworICAgIFNvY2tldFN0cmVhbVN0
YXRlIG1fc3RhdGU7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5o
CShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Nv
Y2tldFN0cmVhbUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNiArMzMsMTYgQEAKIAog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJlYW1CdWZmZXIuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7CiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7
CiAKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgeworY2xhc3MgU29ja2V0U3RyZWFtSGFu
ZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4gewog
cHVibGljOgogICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBDb25uZWN0aW5nLCBPcGVuLCBD
bG9zaW5nLCBDbG9zZWQgfTsKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKCkg
eyB9CisgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCkgeyB9CiAgICAgU29ja2V0U3Ry
ZWFtU3RhdGUgc3RhdGUoKSBjb25zdDsKIAogICAgIGJvb2wgc2VuZChjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKTsKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIFNvY2tldFN0cmVh
bUhhbmRsZUNsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAogcHJv
dGVjdGVkOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UoY29uc3QgVVJMJiwgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50Jik7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwogCiAgICAgYm9vbCBzZW5kUGVuZGluZ0RhdGEoKTsK
ICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCkgPSAwOwpAQCAtNjUsNCArNjUsNCBAQCBwcm90ZWN0ZWQ6CiAgICAgU29ja2V0U3RyZWFtU3Rh
dGUgbV9zdGF0ZTsKIH07CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0
cmVhbUhhbmRsZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgotCi0jaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgdW5zaWduZWQgaW50IGJ1ZmZl
clNpemUgPSAxMDAgKiAxMDI0ICogMTAyNDsKLQotU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6U29j
a2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQpCi0gICAgOiBtX3VybCh1cmwpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0g
ICAgLCBtX3N0YXRlKENvbm5lY3RpbmcpCi17Ci19Ci0KLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6
OlNvY2tldFN0cmVhbVN0YXRlIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zdGF0ZTsKLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
OjpzZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1fc3RhdGUg
PT0gQ29ubmVjdGluZyB8fCBtX3N0YXRlID09IENsb3NpbmcpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV9idWZmZXIu
c2l6ZSgpICsgbGVuZ3RoID4gYnVmZmVyU2l6ZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHJl
cG9ydCBlcnJvciB0byBpbmRpY2F0ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2J1ZmZlci5hcHBl
bmQoZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91
bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3Vu
dCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGludCBieXRlc1dyaXR0ZW4g
PSAwOwotICAgIGlmIChtX3N0YXRlID09IE9wZW4pCi0gICAgICAgIGJ5dGVzV3JpdHRlbiA9IHBs
YXRmb3JtU2VuZChkYXRhLCBsZW5ndGgpOwotICAgIGlmIChieXRlc1dyaXR0ZW4gPCAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0aCAtIGJ5
dGVzV3JpdHRlbiA+IGJ1ZmZlclNpemUpIHsKLSAgICAgICAgLy8gRklYTUU6IHJlcG9ydCBlcnJv
ciB0byBpbmRpY2F0ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYnl0ZXNXcml0dGVuIDwgbGVuZ3RoKSB7Ci0gICAg
ICAgIG1fYnVmZmVyLmFwcGVuZChkYXRhICsgYnl0ZXNXcml0dGVuLCBsZW5ndGggLSBieXRlc1dy
aXR0ZW4pOwotICAgICAgICBtX2NsaWVudC5kaWRVcGRhdGVCdWZmZXJlZEFtb3VudChzdGF0aWNf
Y2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUmPigqdGhpcyksIGJ1ZmZlcmVkQW1vdW50KCkpOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpj
bG9zZSgpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2VkKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9zdGF0ZSA9IENsb3Npbmc7Ci0gICAgaWYgKCFtX2J1ZmZlci5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBkaXNjb25uZWN0KCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZTo6ZGlzY29ubmVjdCgpCi17Ci0gICAgYXV0byBwcm90ZWN0ID0gbWFrZVJlZihzdGF0
aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUmPigqdGhpcykpOyAvLyBwbGF0Zm9ybUNsb3NlIGNh
bGxzIHRoZSBjbGllbnQsIHdoaWNoIG1heSBtYWtlIHRoZSBoYW5kbGUgZ2V0IGRlYWxsb2NhdGVk
IGltbWVkaWF0ZWx5LgotCi0gICAgcGxhdGZvcm1DbG9zZSgpOwotICAgIG1fc3RhdGUgPSBDbG9z
ZWQ7Ci19Ci0KLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkK
LXsKLSAgICBpZiAobV9zdGF0ZSAhPSBPcGVuICYmIG1fc3RhdGUgIT0gQ2xvc2luZykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2J1ZmZlci5pc0VtcHR5KCkpIHsKLSAgICAgICAg
aWYgKG1fc3RhdGUgPT0gT3BlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKG1fc3RhdGUgPT0gQ2xvc2luZykgewotICAgICAgICAgICAgZGlzY29ubmVjdCgpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wgcGVuZGlu
ZzsKLSAgICBkbyB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQobV9i
dWZmZXIuZmlyc3RCbG9ja0RhdGEoKSwgbV9idWZmZXIuZmlyc3RCbG9ja1NpemUoKSk7Ci0gICAg
ICAgIHBlbmRpbmcgPSBieXRlc1dyaXR0ZW4gIT0gc3RhdGljX2Nhc3Q8aW50PihtX2J1ZmZlci5m
aXJzdEJsb2NrU2l6ZSgpKTsKLSAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA8PSAwKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBBU1NFUlQobV9idWZmZXIuc2l6ZSgpIC0gYnl0
ZXNXcml0dGVuIDw9IGJ1ZmZlclNpemUpOwotICAgICAgICBtX2J1ZmZlci5jb25zdW1lKGJ5dGVz
V3JpdHRlbik7Ci0gICAgfSB3aGlsZSAoIXBlbmRpbmcgJiYgIW1fYnVmZmVyLmlzRW1wdHkoKSk7
Ci0gICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAkocmV2
aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgPHd0Zi9TdHJlYW1CdWZmZXIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7Ci1j
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UgewotcHVibGljOgotICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBDb25uZWN0aW5n
LCBPcGVuLCBDbG9zaW5nLCBDbG9zZWQgfTsKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5k
bGVCYXNlKCkgeyB9Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgc3RhdGUoKSBjb25zdDsKLQotICAg
IGJvb2wgc2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLSAgICB2b2lkIGNsb3Nl
KCk7IC8vIERpc2Nvbm5lY3QgYWZ0ZXIgYWxsIGRhdGEgaW4gYnVmZmVyIGFyZSBzZW50LgotICAg
IHZvaWQgZGlzY29ubmVjdCgpOwotICAgIHNpemVfdCBidWZmZXJlZEFtb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQotCi0gICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
U29ja2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQmKTsKLQotICAgIGJvb2wgc2VuZFBlbmRpbmdEYXRhKCk7Ci0gICAgdmlydHVhbCBpbnQgcGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGxhdGZvcm1DbG9zZSgpID0gMDsKLQotICAgIFVSTCBtX3VybDsKLSAgICBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQmIG1fY2xpZW50OwotICAgIFN0cmVhbUJ1ZmZlcjxjaGFyLCAxMDI0
ICogMTAyND4gbV9idWZmZXI7Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgbV9zdGF0ZTsKLX07Ci0K
LX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24gMjA0NDY2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5k
bGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlNlc3Npb25JRC5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9fQ0ZIVFRQTWVzc2FnZSogQ0ZIVFRQTWVzc2FnZVJl
ZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDcmVkZW50aWFsOwotY2xhc3MgUHJv
dGVjdGlvblNwYWNlOwotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OwotCi1jbGFzcyBT
b2NrZXRTdHJlYW1IYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U29ja2V0U3Ry
ZWFtSGFuZGxlPiwgcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCwgc2Vzc2lv
bklEKSk7IH0KLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOwotCi1wcml2YXRl
OgotICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbG9zZSgpOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCYsIFNlc3Npb25JRCk7Ci0gICAgdm9pZCBjcmVhdGVTdHJlYW1zKCk7Ci0gICAgdm9pZCBz
Y2hlZHVsZVN0cmVhbXMoKTsKLSAgICB2b2lkIGNob29zZVByb3h5KCk7Ci0gICAgdm9pZCBjaG9v
c2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmKTsKLSAgICB2b2lkIGV4ZWN1dGVQQUNGaWxlVVJM
KENGVVJMUmVmKTsKLSAgICB2b2lkIHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKLSAgICBSZXRh
aW5QdHI8Q0ZSdW5Mb29wU291cmNlUmVmPiBtX3BhY1J1bkxvb3BTb3VyY2U7Ci0gICAgc3RhdGlj
IHZvaWQgcGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5
TGlzdCwgQ0ZFcnJvclJlZiBlcnJvcik7Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIGNvcHlQQUNF
eGVjdXRpb25EZXNjcmlwdGlvbih2b2lkKik7Ci0KLSAgICBib29sIHNob3VsZFVzZVNTTCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXJsLnByb3RvY29sSXMoIndzcyIpOyB9Ci0gICAgdW5zaWduZWQgc2hv
cnQgcG9ydCgpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQ
TWVzc2FnZVJlZiByZXNwb25zZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCogcmV0YWluU29ja2V0U3Ry
ZWFtSGFuZGxlKHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCByZWxlYXNlU29ja2V0U3RyZWFtSGFu
ZGxlKHZvaWQqKTsKLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weUNGU3RyZWFtRGVzY3JpcHRp
b24odm9pZCopOwotICAgIHN0YXRpYyB2b2lkIHJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJl
YW1SZWYsIENGU3RyZWFtRXZlbnRUeXBlLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgd3JpdGVT
dHJlYW1DYWxsYmFjayhDRldyaXRlU3RyZWFtUmVmLCBDRlN0cmVhbUV2ZW50VHlwZSwgdm9pZCop
OwotICAgIHZvaWQgcmVhZFN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlKTsKLSAgICB2
b2lkIHdyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUpOwotCi0gICAgdm9pZCBy
ZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYpOwotCi0gICAgYm9vbCBnZXRTdG9yZWRDT05O
RUNUUHJveHlDcmVkZW50aWFscyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBTdHJpbmcmIGxvZ2lu
LCBTdHJpbmcmIHBhc3N3b3JkKTsKLQotICAgIGVudW0gQ29ubmVjdGluZ1N1YnN0YXRlIHsgTmV3
LCBFeGVjdXRpbmdQQUNGaWxlLCBXYWl0aW5nRm9yQ3JlZGVudGlhbHMsIFdhaXRpbmdGb3JDb25u
ZWN0LCBDb25uZWN0ZWQgfTsKLSAgICBDb25uZWN0aW5nU3Vic3RhdGUgbV9jb25uZWN0aW5nU3Vi
c3RhdGU7Ci0KLSAgICBlbnVtIENvbm5lY3Rpb25UeXBlIHsgVW5rbm93biwgRGlyZWN0LCBTT0NL
U1Byb3h5LCBDT05ORUNUUHJveHkgfTsKLSAgICBDb25uZWN0aW9uVHlwZSBtX2Nvbm5lY3Rpb25U
eXBlOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbV9wcm94eUhvc3Q7Ci0gICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBtX3Byb3h5UG9ydDsKLQotICAgIFJldGFpblB0cjxDRkhUVFBNZXNz
YWdlUmVmPiBtX3Byb3h5UmVzcG9uc2VNZXNzYWdlOwotICAgIGJvb2wgbV9zZW50U3RvcmVkQ3Jl
ZGVudGlhbHM7Ci0gICAgUmV0YWluUHRyPENGUmVhZFN0cmVhbVJlZj4gbV9yZWFkU3RyZWFtOwot
ICAgIFJldGFpblB0cjxDRldyaXRlU3RyZWFtUmVmPiBtX3dyaXRlU3RyZWFtOwotCi0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBtX2h0dHBzVVJMOyAvLyB3cyhzKTogcmVwbGFjZWQgd2l0aCBodHRw
czoKLSAgICBTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFu
ZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDcwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJDcmVkZW50
aWFsLmgiCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUHJvdGVj
dGlvblNwYWNlLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJl
YW1FcnJvci5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2luY2x1
ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQ
TEFURk9STShJT1MpCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCi0jaW5jbHVk
ZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbHNlCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1B
QykKLWV4dGVybiAiQyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tDRlN0cmVhbVNvY2tldFNldE5vRGVs
YXk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2ltcG9ydCA8Q0ZOZXR3b3JrU1BJ
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlKHVybCwgY2xpZW50KQotICAgICwgbV9jb25uZWN0aW5nU3Vic3RhdGUoTmV3KQotICAg
ICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQotICAgICwgbV9zZW50U3RvcmVkQ3JlZGVudGlh
bHMoZmFsc2UpCi0gICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi17Ci0gICAgTE9HKE5ldHdv
cmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2NsaWVu
dCk7Ci0KLSAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoIndzIikgfHwgdXJsLnByb3RvY29sSXMo
IndzcyIpKTsKLQotICAgIFVSTCBodHRwc1VSTChVUkwoKSwgImh0dHBzOi8vIiArIG1fdXJsLmhv
c3QoKSk7Ci0gICAgbV9odHRwc1VSTCA9IGh0dHBzVVJMLmNyZWF0ZUNGVVJMKCk7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICAvLyBEb24ndCBjaGVjayBmb3IgSFNUUyB2aW9sYXRpb24gZm9y
IGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZQotICAgIC8vIEhTVFMgc3RhdGUgc2hvdWxkIG5vdCB0
cmFuc2ZlciBiZXR3ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUgYnJvd3NpbmcuCi0gICAgaWYgKHVy
bC5wcm90b2NvbElzKCJ3cyIpCi0gICAgICAgICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKQot
ICAgICAgICAmJiBfQ0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0V2l0aFNlc3Npb24obV9odHRwc1VS
TC5nZXQoKSwgbnVsbHB0cikpIHsKLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQg
Y29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRlcyBIVFRQIFN0cmljdCBUcmFuc3Bv
cnQgU2VjdXJpdHkuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBj
cmVhdGVTdHJlYW1zKCk7Ci0gICAgQVNTRVJUKCFtX3JlYWRTdHJlYW0gPT0gIW1fd3JpdGVTdHJl
YW0pOwotICAgIGlmICghbV9yZWFkU3RyZWFtKSAvLyBEb2luZyBhc3luY2hyb25vdXMgUEFDIGZp
bGUgcHJvY2Vzc2luZywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0ZWQgbGF0ZXIuCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNjaGVkdWxlU3RyZWFtcygpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6c2NoZWR1bGVTdHJlYW1zKCkKLXsKLSAgICBBU1NFUlQobV9yZWFkU3RyZWFtKTsKLSAg
ICBBU1NFUlQobV93cml0ZVN0cmVhbSk7Ci0KLSAgICBDRlN0cmVhbUNsaWVudENvbnRleHQgY2xp
ZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0YWluU29ja2V0U3RyZWFtSGFuZGxlLCByZWxlYXNl
U29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbiB9OwotICAgIC8vIEZJ
WE1FOiBQYXNzIHNwZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRlcmVzdGVkIGluIGluc3RlYWQgb2Yg
LTEuCi0gICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVhZFN0cmVhbS5nZXQoKSwgc3RhdGlj
X2Nhc3Q8Q0ZPcHRpb25GbGFncz4oLTEpLCByZWFkU3RyZWFtQ2FsbGJhY2ssICZjbGllbnRDb250
ZXh0KTsKLSAgICBDRldyaXRlU3RyZWFtU2V0Q2xpZW50KG1fd3JpdGVTdHJlYW0uZ2V0KCksIHN0
YXRpY19jYXN0PENGT3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVTdHJlYW1DYWxsYmFjaywgJmNsaWVu
dENvbnRleHQpOwotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIENGUmVhZFN0cmVhbVNjaGVkdWxl
V2l0aFJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxv
b3BEZWZhdWx0TW9kZSk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3AobV93
cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUp
OwotI2Vsc2UKLSAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fcmVhZFN0cmVh
bS5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwot
ICAgIENGV3JpdGVTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fd3JpdGVTdHJlYW0uZ2V0KCks
IENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSNlbmRpZgot
Ci0gICAgQ0ZSZWFkU3RyZWFtT3BlbihtX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIENGV3JpdGVT
dHJlYW1PcGVuKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOwotCi0gICAgaWYgKG1fcGFjUnVuTG9vcFNv
dXJjZSkKLSAgICAgICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOwotCi0gICAgbV9jb25uZWN0
aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKLX0KLQotdm9pZCogU29ja2V0U3RyZWFt
SGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5mbykKLXsKLSAgICBTb2Nr
ZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+
KGluZm8pOwotICAgIGhhbmRsZS0+cmVmKCk7Ci0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5m
bykKLXsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSo+KGluZm8pOwotICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQotQ0ZTdHJp
bmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24odm9p
ZCopCi17Ci0gICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQgcHJveHkgUEFDIGZpbGUgZXhlY3V0
aW9uIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCi17Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMb2NrIG11
dGV4OwotICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJsZTsKLQotICAgIGJvb2wgaXNGaW5p
c2hlZCA9IGZhbHNlOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbJl0gewotICAgICAgICBmdW5j
dGlvbigpOwotCi0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG11dGV4KTsKLSAg
ICAgICAgaXNGaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIGNvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eU9uZSgpOwotICAgIH0pOwotCi0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG11dGV4
KTsKLSAgICBjb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFsmXSB7IHJldHVybiBpc0Zpbmlz
aGVkOyB9KTsKLX0KLQotc3RydWN0IE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8gewotICAgIE1h
aW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUsIENGQXJy
YXlSZWYgcHJveHlMaXN0KSA6IGhhbmRsZShoYW5kbGUpLCBwcm94eUxpc3QocHJveHlMaXN0KSB7
IH0KLSAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBoYW5kbGU7Ci0gICAgQ0ZBcnJheVJl
ZiBwcm94eUxpc3Q7Ci19OwotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGFjRXhlY3V0aW9u
Q2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZikK
LXsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0
cmVhbUhhbmRsZSo+KGNsaWVudCk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbJl0g
ewotICAgICAgICBBU1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBFeGVjdXRp
bmdQQUNGaWxlKTsKLSAgICAgICAgLy8gVGhpcyB0aW1lLCB0aGUgYXJyYXkgd29uJ3QgaGF2ZSBQ
QUMgYXMgYSBmaXJzdCBlbnRyeS4KLSAgICAgICAgaWYgKGhhbmRsZS0+bV9zdGF0ZSAhPSBDb25u
ZWN0aW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBoYW5kbGUtPmNob29zZVByb3h5
RnJvbUFycmF5KHByb3h5TGlzdCk7Ci0gICAgICAgIGhhbmRsZS0+Y3JlYXRlU3RyZWFtcygpOwot
ICAgICAgICBoYW5kbGUtPnNjaGVkdWxlU3RyZWFtcygpOwotICAgIH0pOwotfQotCi12b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkK
LXsKLSAgICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3IgV2Vi
U29ja2V0IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgotICAgIENGU3RyZWFtQ2xpZW50Q29u
dGV4dCBjbGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUs
IHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbiB9
OwotICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrRXhlY3V0ZVByb3h5
QXV0b0NvbmZpZ3VyYXRpb25VUkwocGFjRmlsZVVSTCwgbV9odHRwc1VSTC5nZXQoKSwgcGFjRXhl
Y3V0aW9uQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KSk7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAg
IENGUnVuTG9vcEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5n
ZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgQ0ZSdW5Mb29wQWRkU291
cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOwotI2VuZGlmCi0gICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBF
eGVjdXRpbmdQQUNGaWxlOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVtb3ZlUEFD
UnVuTG9vcFNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKG1fcGFjUnVuTG9vcFNvdXJjZSk7Ci0KLSAg
ICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSk7Ci0j
aWYgUExBVEZPUk0oV0lOKQotICAgIENGUnVuTG9vcFJlbW92ZVNvdXJjZShsb2FkZXJSdW5Mb29w
KCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNl
bHNlCi0gICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9w
YWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotI2VuZGlmCi0g
ICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OmNob29zZVByb3h5KCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eURp
Y3Rpb25hcnkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdzKCkpOwot
Ci0gICAgLy8gU09DS1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNUKSBwcm94aWVzIGFyZSBzdXBwb3J0
ZWQuCi0gICAgLy8gV2ViU29ja2V0IHByb3RvY29sIHJlbGllcyBvbiBoYW5kc2hha2UgYmVpbmcg
dHJhbnNmZXJyZWQgdW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEgcHJveHkgdGhhdCB3aWxsIG5vdCBt
b2RpZnkgaGVhZGVycy4KLSAgICAvLyBTaW5jZSBIVFRQIHByb3hpZXMgbXVzdCBhZGQgVmlhIGhl
YWRlcnMsIHRoZXkgYXJlIGhpZ2hseSB1bmxpa2VseSB0byB3b3JrLgotICAgIC8vIE1hbnkgQ09O
TkVDVCBwcm94aWVzIGxpbWl0IGNvbm5lY3Rpdml0eSB0byBwb3J0IDQ0Mywgc28gd2UgcHJlZmVy
IFNPQ0tTLCBpZiBjb25maWd1cmVkLgotCi0gICAgaWYgKCFwcm94eURpY3Rpb25hcnkpIHsKLSAg
ICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJMIGRvZXNuJ3Qga25vdyBhYm91dCBX
ZWJTb2NrZXQgc2NoZW1lcywgc28gcHJldGVuZCB0byB1c2UgaHR0cC4KLSAgICAvLyBBbHdheXMg
dXNlICJodHRwcyIgdG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4gcmVzdWx0IC0gd2UnbGwgdHJ5IHRv
IHVzZSB0aG9zZSBmb3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFueSBhcmUgY29uZmlndXJlZCB0byBy
ZWplY3QgY29ubmVjdGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhhbiA0NDMuCi0gICAgUmV0YWluUHRy
PENGQXJyYXlSZWY+IHByb3h5QXJyYXkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlQcm94aWVzRm9y
VVJMKG1faHR0cHNVUkwuZ2V0KCksIHByb3h5RGljdGlvbmFyeS5nZXQoKSkpOwotCi0gICAgY2hv
b3NlUHJveHlGcm9tQXJyYXkocHJveHlBcnJheS5nZXQoKSk7Ci19Ci0KLXZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpjaG9vc2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkpCi17
Ci0gICAgaWYgKCFwcm94eUFycmF5KSB7Ci0gICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBEaXJl
Y3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDRkluZGV4IHByb3h5QXJyYXlDb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChwcm94eUFycmF5KTsKLQotICAgIC8vIFBBQyBpcyBhbHdheXMg
dGhlIGZpcnN0IGVudHJ5LCBpZiBwcmVzZW50LgotICAgIGlmIChwcm94eUFycmF5Q291bnQpIHsK
LSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9IHN0YXRpY19jYXN0PENGRGljdGlv
bmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwcm94eUFycmF5LCAwKSk7Ci0gICAgICAg
IENGVHlwZVJlZiBwcm94eVR5cGUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm94eUluZm8sIGtD
RlByb3h5VHlwZUtleSk7Ci0gICAgICAgIGlmIChwcm94eVR5cGUgJiYgQ0ZHZXRUeXBlSUQocHJv
eHlUeXBlKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Ci0gICAgICAgICAgICBpZiAoQ0ZFcXVh
bChwcm94eVR5cGUsIGtDRlByb3h5VHlwZUF1dG9Db25maWd1cmF0aW9uVVJMKSkgewotICAgICAg
ICAgICAgICAgIENGVHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
eHlJbmZvLCBrQ0ZQcm94eUF1dG9Db25maWd1cmF0aW9uVVJMS2V5KTsKLSAgICAgICAgICAgICAg
ICBpZiAocGFjRmlsZVVSTCAmJiBDRkdldFR5cGVJRChwYWNGaWxlVVJMKSA9PSBDRlVSTEdldFR5
cGVJRCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVQQUNGaWxlVVJMKHN0YXRpY19j
YXN0PENGVVJMUmVmPihwYWNGaWxlVVJMKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBDRkRpY3Rpb25hcnlSZWYgY2hvc2VuUHJveHkgPSAwOwotICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IHByb3h5QXJyYXlDb3VudDsgKytpKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBw
cm94eUluZm8gPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgocHJveHlBcnJheSwgaSkpOwotICAgICAgICBDRlR5cGVSZWYgcHJveHlUeXBlID0gQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eVR5cGVLZXkpOwotICAgICAgICBp
ZiAocHJveHlUeXBlICYmIENGR2V0VHlwZUlEKHByb3h5VHlwZSkgPT0gQ0ZTdHJpbmdHZXRUeXBl
SUQoKSkgewotICAgICAgICAgICAgaWYgKENGRXF1YWwocHJveHlUeXBlLCBrQ0ZQcm94eVR5cGVT
T0NLUykpIHsKLSAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rpb25UeXBlID0gU09DS1NQcm94eTsK
LSAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChDRkVxdWFsKHByb3h5VHlw
ZSwga0NGUHJveHlUeXBlSFRUUFMpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb25uZWN0aW9uVHlw
ZSA9IENPTk5FQ1RQcm94eTsKLSAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5m
bzsKLSAgICAgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcgZm9yIHByb3hpZXMsIGFzIGEgU09D
S1Mgb25lIGlzIHByZWZlcmFibGUuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoY2hvc2VuUHJveHkpIHsKLSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGlvblR5cGUg
IT0gVW5rbm93bik7Ci0gICAgICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25UeXBlICE9IERpcmVjdCk7
Ci0KLSAgICAgICAgQ0ZUeXBlUmVmIHByb3h5SG9zdCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNo
b3NlblByb3h5LCBrQ0ZQcm94eUhvc3ROYW1lS2V5KTsKLSAgICAgICAgQ0ZUeXBlUmVmIHByb3h5
UG9ydCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eVBvcnROdW1i
ZXJLZXkpOwotCi0gICAgICAgIGlmIChwcm94eUhvc3QgJiYgQ0ZHZXRUeXBlSUQocHJveHlIb3N0
KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpICYmIHByb3h5UG9ydCAmJiBDRkdldFR5cGVJRChwcm94
eVBvcnQpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKLSAgICAgICAgICAgIG1fcHJveHlIb3N0
ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9zdCk7Ci0gICAgICAgICAgICBtX3By
b3h5UG9ydCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihwcm94eVBvcnQpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uVHlwZSA9IERp
cmVjdDsKLX0KLQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygpCi17
Ci0gICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gVW5rbm93bikKLSAgICAgICAgY2hvb3NlUHJv
eHkoKTsKLQotICAgIC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93biwgdGhlbiB3ZSdyZSByZXNvbHZp
bmcgYSBQQUMgZmlsZSBhc3luY2hyb25vdXNseS4KLSAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9
PSBVbmtub3duKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGhvc3QgPSBtX3VybC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLQotICAgIC8vIENyZWF0aW5n
IHN0cmVhbXMgdG8gZmluYWwgZGVzdGluYXRpb24sIG5vdCB0byBwcm94eS4KLSAgICBDRlJlYWRT
dHJlYW1SZWYgcmVhZFN0cmVhbSA9IDA7Ci0gICAgQ0ZXcml0ZVN0cmVhbVJlZiB3cml0ZVN0cmVh
bSA9IDA7Ci0gICAgQ0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNvY2tldFRvSG9zdCgwLCBob3N0Lmdl
dCgpLCBwb3J0KCksICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJlYW0pOwotI2lmIFBMQVRGT1JNKElP
UykgfHwgUExBVEZPUk0oTUFDKQotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMjg1NTU4Nz4gX2tD
RlN0cmVhbVNvY2tldFNldE5vRGVsYXkgaXMgbm90IGV4cG9ydGVkIG9uIFdpbmRvd3MKLSAgICBD
RldyaXRlU3RyZWFtU2V0UHJvcGVydHkod3JpdGVTdHJlYW0sIF9rQ0ZTdHJlYW1Tb2NrZXRTZXRO
b0RlbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0jZW5kaWYKLQotICAgIG1fcmVhZFN0cmVhbSA9IGFk
b3B0Q0YocmVhZFN0cmVhbSk7Ci0gICAgbV93cml0ZVN0cmVhbSA9IGFkb3B0Q0Yod3JpdGVTdHJl
YW0pOwotCi0gICAgc3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBlKSB7Ci0gICAgY2FzZSBVbmtub3du
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBEaXJlY3Q6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU09DS1NQcm94eTogewotICAgICAg
ICAvLyBGSVhNRTogU09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxlbmdlLXJlc3BvbnNlLCBzaG91bGQg
d2UgdHJ5IHRvIGFwcGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5Y2hhaW4gcmlnaHQgYXdheT8KLSAg
ICAgICAgLy8gQnV0IFNPQ0tTNSBjcmVkZW50aWFscyBkb24ndCB3b3JrIGF0IHRoZSB0aW1lIG9m
IHRoaXMgd3JpdGluZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3NzY2OTg+LgotICAgICAgICBjb25z
dCB2b2lkKiBwcm94eUtleXNbXSA9IHsga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5SG9zdCwg
a0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5UG9ydCB9OwotICAgICAgICBjb25zdCB2b2lkKiBw
cm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkgfTsK
LSAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29ubmVjdERpY3Rpb25hcnkgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtleXMsIHByb3h5VmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKHByb3h5S2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgQ0ZSZWFkU3RyZWFt
U2V0UHJvcGVydHkobV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZTdHJlYW1Qcm9wZXJ0eVNPQ0tTUHJv
eHksIGNvbm5lY3REaWN0aW9uYXJ5LmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICBjYXNlIENPTk5FQ1RQcm94eToKLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlGb3JTdHJl
YW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkVXNlU1NMKCkpIHsK
LSAgICAgICAgQ0ZCb29sZWFuUmVmIHZhbGlkYXRlQ2VydGlmaWNhdGVDaGFpbiA9IFNldHRpbmdz
OjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9vbGVhbkZhbHNlIDoga0NGQm9vbGVh
blRydWU7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9IHsga0NGU3RyZWFtU1NMUGVlck5h
bWUsIGtDRlN0cmVhbVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZpY2F0ZUNo
YWluIH07Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBob3N0LmdldCgpLCBrQ0ZT
dHJlYW1Tb2NrZXRTZWN1cml0eUxldmVsTmVnb3RpYXRlZFNTTCwgdmFsaWRhdGVDZXJ0aWZpY2F0
ZUNoYWluIH07Ci0gICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNldHRpbmdzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVO
R1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgIENGUmVhZFN0cmVhbVNldFByb3BlcnR5KG1f
cmVhZFN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3Mu
Z2V0KCkpOwotICAgICAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkobV93cml0ZVN0cmVhbS5n
ZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOwotICAg
IH0KLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OmdldFN0b3JlZENPTk5FQ1RQcm94eUNy
ZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBTdHJpbmcm
IGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQotewotICAgIC8vIEZJWE1FICg8cmRhcjovL3Byb2Js
ZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9t
IEF1dGhCcm9rZXJBZ2VudC4KLQotICAgIC8vIFRyeSBzeXN0ZW0gY3JlZGVudGlhbCBzdG9yYWdl
IGZpcnN0LCBtYXRjaGluZyBIVFRQIGJlaGF2aW9yIChDRk5ldHdvcmsgb25seSBhc2tzIHRoZSBj
bGllbnQgZm9yIHBhc3N3b3JkIGlmIGl0IGNvdWxkbid0IGZpbmQgaXQgaW4gS2V5Y2hhaW4pLgot
ICAgIENyZWRlbnRpYWwgc3RvcmVkQ3JlZGVudGlhbDsKLSAgICBpZiAoYXV0byogc3RvcmFnZVNl
c3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklE
KSkgewotICAgICAgICBzdG9yZWRDcmVkZW50aWFsID0gc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRp
YWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSk7Ci0g
ICAgICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHN0b3Jl
ZENyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocHJv
dGVjdGlvblNwYWNlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGxvZ2luID0gc3RvcmVkQ3JlZGVudGlh
bC51c2VyKCk7Ci0gICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVkZW50aWFsLnBhc3N3b3JkKCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0
aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1dGhlbnRpY2F0aW9uTWV0aG9kKENG
U3RyaW5nUmVmIG1ldGhvZCkKLXsKLSAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRo
ZW50aWNhdGlvblNjaGVtZUJhc2ljKSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOwotICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NG
SFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lRGlnZXN0KSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKLSAgICBpZiAoQ0ZFcXVhbCht
ZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5UTE0pKQotICAgICAgICByZXR1cm4g
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOwotICAgIGlmIChDRkVxdWFs
KG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlKSkKLSAgICAgICAg
cmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlOwotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZVVua25vd247Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjphZGRD
T05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBwcm94eVJlc3BvbnNlKQotewotICAg
IFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4gYXV0aGVudGljYXRpb24gPSBhZG9w
dENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJlc3BvbnNlKDAsIHByb3h5UmVzcG9u
c2UpKTsKLQotICAgIGlmICghQ0ZIVFRQQXV0aGVudGljYXRpb25SZXF1aXJlc1VzZXJOYW1lQW5k
UGFzc3dvcmQoYXV0aGVudGljYXRpb24uZ2V0KCkpKSB7Ci0gICAgICAgIC8vIFRoYXQncyBhbGwg
d2UgY2FuIG9mZmVyLi4uCi0gICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRo
aXMsIFNvY2tldFN0cmVhbUVycm9yKDAsIG1fdXJsLnN0cmluZygpLCAiUHJveHkgYXV0aGVudGlj
YXRpb24gc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdlYlNvY2tldHMiKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgcG9ydCA9IDA7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1
ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlwZSwgJnBvcnQpOwotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9u
Q29weU1ldGhvZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gcmVhbG1DRiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVudGljYXRpb25Db3B5UmVhbG0oYXV0
aGVudGljYXRpb24uZ2V0KCkpKTsKLQotICAgIGlmICghbWV0aG9kQ0YgfHwgIXJlYWxtQ0YpIHsK
LSAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgb24gc29tZSBPUyB2ZXJzaW9u
cyB3ZSBnZXQgaW5jb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBkYXRhLCBzZWUgPHJkYXI6Ly9wcm9i
bGVtLzEwNDE2MzE2Pi4KLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhp
cywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQgcHJveHkg
YXV0aGVudGljYXRpb24gY291bGRuJ3QgYmUgaGFuZGxlZCIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UoU3RyaW5nKG1fcHJv
eHlIb3N0LmdldCgpKSwgcG9ydCwgUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUywgU3RyaW5nKHJl
YWxtQ0YuZ2V0KCkpLCBhdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhv
ZChtZXRob2RDRi5nZXQoKSkpOwotICAgIFN0cmluZyBsb2dpbjsKLSAgICBTdHJpbmcgcGFzc3dv
cmQ7Ci0gICAgaWYgKCFtX3NlbnRTdG9yZWRDcmVkZW50aWFscyAmJiBnZXRTdG9yZWRDT05ORUNU
UHJveHlDcmVkZW50aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxvZ2luLCBwYXNzd29yZCkpIHsKLSAg
ICAgICAgLy8gVHJ5IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50aWFscywgaWYgd2UgaGF2ZW4ndCB0
cmllZCB0aG9zZSBhbHJlYWR5LgotICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgcmVxdWVz
dCB0byBtYWtlIENGTmV0d29yayBhcHBseSBjcmVkZW50aWFscyB0byBpdC4gVW5mb3J0dW5hdGVs
eSwgdGhpcyBjYW5ub3Qgd29yayB3aXRoIE5UTE0gYXV0aGVudGljYXRpb24uCi0gICAgICAgIFJl
dGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBkdW1teVJlcXVlc3QgPSBhZG9wdENGKENGSFRUUE1l
c3NhZ2VDcmVhdGVSZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwgbV9odHRwc1VSTC5nZXQoKSwga0NG
SFRUUFZlcnNpb24xXzEpKTsKLQotICAgICAgICBCb29sZWFuIGFwcGxpZWRDcmVkZW50aWFscyA9
IENGSFRUUE1lc3NhZ2VBcHBseUNyZWRlbnRpYWxzKGR1bW15UmVxdWVzdC5nZXQoKSwgYXV0aGVu
dGljYXRpb24uZ2V0KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHBhc3N3b3JkLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFwcGxpZWRD
cmVkZW50aWFscywgYXBwbGllZENyZWRlbnRpYWxzKTsKLQotICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyA9IGFkb3B0Q0YoQ0ZIVFRQTWVzc2Fn
ZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIlByb3h5LUF1
dGhvcml6YXRpb24iKSkpOwotCi0gICAgICAgIGlmICghcHJveHlBdXRob3JpemF0aW9uU3RyaW5n
KSB7Ci0gICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBOVExNIGF1dGguCi0gICAgICAgICAg
ICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcigw
LCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBpcyBub3Qgc3Vw
cG9ydGVkIGZvciBXZWJTb2NrZXRzIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiByZXN1bHRzIGluIGEgbmV3
IGNvbm5lY3Rpb24gYXR0ZW1wdC4KLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlBdXRob3JpemF0
aW9uRm9yU3RyZWFtKG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJveHlBdXRob3JpemF0aW9uU3RyaW5n
LmdldCgpKTsKLSAgICAgICAgbV9zZW50U3RvcmVkQ3JlZGVudGlhbHMgPSB0cnVlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IE9uIHBsYXRmb3JtcyB3aGVyZSBBdXRo
QnJva2VyQWdlbnQgaXMgbm90IGF2YWlsYWJsZSwgYXNrIHRoZSBjbGllbnQgaWYgY3JlZGVudGlh
bHMgY291bGQgbm90IGJlIGZvdW5kLgotCi0gICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJQcm94eSBjcmVk
ZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKLX0KLQotQ0ZTdHJpbmdSZWYgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQotewotICAgIFNv
Y2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxl
Kj4oaW5mbyk7Ci0gICAgcmV0dXJuIFN0cmluZygiV2ViS2l0IHNvY2tldCBzdHJlYW0sICIgKyBo
YW5kbGUtPm1fdXJsLnN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpLmxlYWtSZWYoKTsKLX0KLQot
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJlYW1S
ZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0lu
Zm8pCi17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2Nr
ZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIC8vIFdv
cmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3Mz4uIEtlZXBpbmcgdGhpcyBiZWxv
dyB0aGUgYXNzZXJ0aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIgc3RlcHMgdG8gcmVwcm9kdWNlIHRo
aXMuCi0gICAgaWYgKCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkKLSAgICAgICAgcmV0dXJuOwotCi0j
aWYgUExBVEZPUk0oV0lOKQotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3Rv
cihoYW5kbGUpOwotICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFsmXSB7Ci0gICAgICAgIGlm
IChoYW5kbGUtPm1fcmVhZFN0cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNh
bGxiYWNrKHR5cGUpOwotICAgIH0pOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOwotI2VuZGlmCi19Ci0KLXZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVTdHJlYW1S
ZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0lu
Zm8pCi17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2Nr
ZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dyaXRlU3RyZWFtLmdldCgpKTsKLSAgICAvLyBU
aGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBwcmFjdGljZSwgeWV0IGl0IHNlZW1zIGxpa2Ug
aXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQgc3RyZWFtIGNhbGxiYWNrLgotICAg
IGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdG9yKGhhbmRs
ZSk7Ci0gICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZdIHsKLSAgICAgICAgaWYgKGhhbmRs
ZS0+bV93cml0ZVN0cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+d3JpdGVTdHJlYW1DYWxsYmFj
ayh0eXBlKTsKLSAgICB9KTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBoYW5kbGUtPndyaXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSB0
eXBlKQotewotICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE5vbmU6
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50T3BlbkNvbXBsZXRlZDoK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJs
ZTogewotICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gV2FpdGluZ0ZvckNyZWRl
bnRpYWxzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX2Nvbm5lY3RpbmdT
dWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ29ubmVjdCkgewotICAgICAgICAgICAgaWYgKG1fY29ubmVj
dGlvblR5cGUgPT0gQ09OTkVDVFByb3h5KSB7Ci0gICAgICAgICAgICAgICAgUmV0YWluUHRyPENG
SFRUUE1lc3NhZ2VSZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9wdENGKHdrQ29weUNPTk5FQ1RQcm94
eVJlc3BvbnNlKG1fcmVhZFN0cmVhbS5nZXQoKSwgbV9odHRwc1VSTC5nZXQoKSwgbV9wcm94eUhv
c3QuZ2V0KCksIG1fcHJveHlQb3J0LmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm94
eVJlc3BvbnNlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAg
ICBDRkluZGV4IHByb3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3Rh
dHVzQ29kZShwcm94eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBy
b3h5UmVzcG9uc2VDb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyMDA6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0MDc6Ci0gICAgICAgICAgICAgICAgICAgIGFk
ZENPTk5FQ1RDcmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9y
KHN0YXRpY19jYXN0PGludD4ocHJveHlSZXNwb25zZUNvZGUpLCBtX3VybC5zdHJpbmcoKSwgIlBy
b3h5IGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCB1bmV4cGVjdGVkIHJlc3Bv
bnNlIGNvZGUiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwotICAgICAgICAg
ICAgbV9zdGF0ZSA9IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3Ry
ZWFtKCp0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdl
IGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2Ug
dGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsKLSAgICAgICAg
QVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAgICAgICAgQ0ZJ
bmRleCBsZW5ndGg7Ci0gICAgICAgIFVJbnQ4IGxvY2FsQnVmZmVyWzEwMjRdOyAvLyBVc2VkIGlm
IENGUmVhZFN0cmVhbUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1cm4gYW55dGhpbmcuCi0gICAgICAg
IGNvbnN0IFVJbnQ4KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRCdWZmZXIobV9yZWFkU3RyZWFtLmdl
dCgpLCAwLCAmbGVuZ3RoKTsKLSAgICAgICAgaWYgKCFwdHIpIHsKLSAgICAgICAgICAgIGxlbmd0
aCA9IENGUmVhZFN0cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdldCgpLCBsb2NhbEJ1ZmZlciwgc2l6
ZW9mKGxvY2FsQnVmZmVyKSk7Ci0gICAgICAgICAgICBwdHIgPSBsb2NhbEJ1ZmZlcjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBsZW5ndGgpOwotCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZl
bnRFcnJvck9jY3VycmVkOiB7Ci0gICAgICAgIFJldGFpblB0cjxDRkVycm9yUmVmPiBlcnJvciA9
IGFkb3B0Q0YoQ0ZSZWFkU3RyZWFtQ29weUVycm9yKG1fcmVhZFN0cmVhbS5nZXQoKSkpOwotICAg
ICAgICByZXBvcnRFcnJvclRvQ2xpZW50KGVycm9yLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIHBs
YXRmb3JtQ2xvc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSkK
LXsKLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnROb25lOgotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50SGFzQnl0ZXNBdmFpbGFibGU6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBr
Q0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOiB7Ci0gICAgICAgIC8vIENhbiBiZSBmYWxzZSBp
ZiByZWFkIHN0cmVhbSBjYWxsYmFjayBqdXN0IGRlY2lkZWQgdG8gcmV0cnkgYSBDT05ORUNUIHdp
dGggY3JlZGVudGlhbHMuCi0gICAgICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVz
KG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ3JlZGVudGlhbHMpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IFdhaXRp
bmdGb3JDb25uZWN0KSB7Ci0gICAgICAgICAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9PSBDT05O
RUNUUHJveHkpIHsKLSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJlZj4g
cHJveHlSZXNwb25zZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UobV9yZWFk
U3RyZWFtLmdldCgpLCBtX2h0dHBzVVJMLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94
eVBvcnQuZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3h5UmVzcG9uc2UpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIC8vIERvbid0IHdyaXRl
IGFueXRoaW5nIHVudGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGhhcyBkZWFsdCB3aXRoIENPTk5F
Q1QgY3JlZGVudGlhbHMuCi0gICAgICAgICAgICAgICAgLy8gVGhlIG9yZGVyIG9mIGNhbGxiYWNr
cyBpcyBub3QgZGVmaW5lZCwgc28gdGhpcyBjYW4gYmUgY2FsbGVkIGJlZm9yZSByZWFkU3RyZWFt
Q2FsbGJhY2sncyBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlLgotICAgICAgICAgICAg
ICAgIENGSW5kZXggcHJveHlSZXNwb25zZUNvZGUgPSBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VT
dGF0dXNDb2RlKHByb3h5UmVzcG9uc2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChwcm94
eVJlc3BvbnNlQ29kZSAhPSAyMDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwot
ICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVu
U29ja2V0U3RyZWFtKCp0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxz
ZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291
bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsK
LSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAg
ICAgICAgc2VuZFBlbmRpbmdEYXRhKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6IHsKLSAgICAgICAgUmV0YWluUHRyPENGRXJy
b3JSZWY+IGVycm9yID0gYWRvcHRDRihDRldyaXRlU3RyZWFtQ29weUVycm9yKG1fd3JpdGVTdHJl
YW0uZ2V0KCkpKTsKLSAgICAgICAgcmVwb3J0RXJyb3JUb0NsaWVudChlcnJvci5nZXQoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVuZEVuY291bnRl
cmVkOgotICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3ZSBoYW5kbGUgY2xvc2luZyBpbiBy
ZWFkIGNhbGxiYWNrLCBidXQgdGhlc2UgY2FuIGNvbWUgaW5kZXBlbmRlbnRseSAoZS5nLiBhIHNl
cnZlciBjYW4gc3RvcCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNlbmRpbmcgZGF0YSkuCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJv
clRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCi17Ci0gICAgQ0ZJbmRleCBlcnJvckNvZGUgPSBD
RkVycm9yR2V0Q29kZShlcnJvcik7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotCi0jaWYgUExB
VEZPUk0oTUFDKQotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1k
ZWNsYXJhdGlvbnMiCi0jZW5kaWYKLQotICAgIGlmIChDRkVxdWFsKENGRXJyb3JHZXREb21haW4o
ZXJyb3IpLCBrQ0ZFcnJvckRvbWFpbk9TU3RhdHVzKSkgewotICAgICAgICBjb25zdCBjaGFyKiBk
ZXNjcmlwdGlvbk9TU3RhdHVzID0gR2V0TWFjT1NTdGF0dXNDb21tZW50U3RyaW5nKHN0YXRpY19j
YXN0PE9TU3RhdHVzPihlcnJvckNvZGUpKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uT1NTdGF0
dXMgJiYgZGVzY3JpcHRpb25PU1N0YXR1c1swXSAhPSAnXDAnKQotICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSAiT1NTdGF0dXMgRXJyb3IgIiArIFN0cmluZzo6bnVtYmVyKGVycm9yQ29kZSkgKyAi
OiAiICsgZGVzY3JpcHRpb25PU1N0YXR1czsKLSAgICB9Ci0KLSNpZiBDT01QSUxFUihDTEFORykK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIGlm
IChkZXNjcmlwdGlvbi5pc051bGwoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGRlc2NyaXB0aW9uQ0YgPSBhZG9wdENGKENGRXJyb3JDb3B5RGVzY3JpcHRpb24oZXJyb3IpKTsK
LSAgICAgICAgZGVzY3JpcHRpb24gPSBTdHJpbmcoZGVzY3JpcHRpb25DRi5nZXQoKSk7Ci0gICAg
fQotCi0gICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFt
RXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX3VybC5zdHJpbmcoKSwgZGVzY3Jp
cHRpb24pKTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkK
LXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkdG9yIiwgdGhpcyk7
Ci0KLSAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7Ci19Ci0KLWludCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewot
ICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBDRldyaXRlU3RyZWFtV3JpdGUobV93
cml0ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBs
ZW5ndGgpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCi17
Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIs
IHRoaXMpOwotCi0gICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkgCi0gICAgICAgIHJlbW92ZVBB
Q1J1bkxvb3BTb3VyY2UoKTsKLQotICAgIEFTU0VSVCghbV9yZWFkU3RyZWFtID09ICFtX3dyaXRl
U3RyZWFtKTsKLSAgICBpZiAoIW1fcmVhZFN0cmVhbSkgewotICAgICAgICBpZiAobV9jb25uZWN0
aW5nU3Vic3RhdGUgPT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1YnN0YXRlID09IEV4ZWN1dGluZ1BB
Q0ZpbGUpCi0gICAgICAgICAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgQ0ZSZWFk
U3RyZWFtVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgbG9hZGVyUnVu
TG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAgIENGV3JpdGVTdHJlYW1VbnNjaGVk
dWxlRnJvbVJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZS
dW5Mb29wRGVmYXVsdE1vZGUpOwotI2Vsc2UKLSAgICBDRlJlYWRTdHJlYW1VbnNjaGVkdWxlRnJv
bVJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1
bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVVuc2NoZWR1bGVGcm9tUnVuTG9v
cChtX3dyaXRlU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BD
b21tb25Nb2Rlcyk7Ci0jZW5kaWYKLQotICAgIENGUmVhZFN0cmVhbUNsb3NlKG1fcmVhZFN0cmVh
bS5nZXQoKSk7Ci0gICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOwot
ICAgIAotICAgIG1fcmVhZFN0cmVhbSA9IDA7Ci0gICAgbV93cml0ZVN0cmVhbSA9IDA7Ci0KLSAg
ICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXVuc2lnbmVkIHNo
b3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKHVuc2lnbmVk
IHNob3J0IHVybFBvcnQgPSBtX3VybC5wb3J0KCkpCi0gICAgICAgIHJldHVybiB1cmxQb3J0Owot
ICAgIGlmIChzaG91bGRVc2VTU0woKSkKLSAgICAgICAgcmV0dXJuIDQ0MzsKLSAgICByZXR1cm4g
ODA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2Vzc2lvbklELmgi
CisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgX19DRkhUVFBNZXNzYWdlKiBDRkhUVFBNZXNzYWdlUmVmOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENyZWRlbnRpYWw7CitjbGFzcyBQcm90ZWN0aW9uU3BhY2U7Citj
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJs
aWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50LCBzZXNzaW9uSUQpKTsgfQorCisgICAg
dmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBp
bnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNsb3NlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTb2NrZXRTdHJl
YW1IYW5kbGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiwgU2Vzc2lvbklE
KTsKKyAgICB2b2lkIGNyZWF0ZVN0cmVhbXMoKTsKKyAgICB2b2lkIHNjaGVkdWxlU3RyZWFtcygp
OworICAgIHZvaWQgY2hvb3NlUHJveHkoKTsKKyAgICB2b2lkIGNob29zZVByb3h5RnJvbUFycmF5
KENGQXJyYXlSZWYpOworICAgIHZvaWQgZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYpOworICAg
IHZvaWQgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BT
b3VyY2VSZWY+IG1fcGFjUnVuTG9vcFNvdXJjZTsKKyAgICBzdGF0aWMgdm9pZCBwYWNFeGVjdXRp
b25DYWxsYmFjayh2b2lkKiBjbGllbnQsIENGQXJyYXlSZWYgcHJveHlMaXN0LCBDRkVycm9yUmVm
IGVycm9yKTsKKyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0
aW9uKHZvaWQqKTsKKworICAgIGJvb2wgc2hvdWxkVXNlU1NMKCkgY29uc3QgeyByZXR1cm4gbV91
cmwucHJvdG9jb2xJcygid3NzIik7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0KCkgY29uc3Q7
CisKKyAgICB2b2lkIGFkZENPTk5FQ1RDcmVkZW50aWFscyhDRkhUVFBNZXNzYWdlUmVmIHJlc3Bv
bnNlKTsKKworICAgIHN0YXRpYyB2b2lkKiByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCop
OworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCopOworICAg
IHN0YXRpYyBDRlN0cmluZ1JlZiBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKik7CisgICAg
c3RhdGljIHZvaWQgcmVhZFN0cmVhbUNhbGxiYWNrKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJlYW1F
dmVudFR5cGUsIHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZVN0cmVhbUNhbGxiYWNrKENG
V3JpdGVTdHJlYW1SZWYsIENGU3RyZWFtRXZlbnRUeXBlLCB2b2lkKik7CisgICAgdm9pZCByZWFk
U3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUpOworICAgIHZvaWQgd3JpdGVTdHJlYW1D
YWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSk7CisKKyAgICB2b2lkIHJlcG9ydEVycm9yVG9DbGll
bnQoQ0ZFcnJvclJlZik7CisKKyAgICBib29sIGdldFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRp
YWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIFN0cmluZyYgbG9naW4sIFN0cmluZyYgcGFzc3dv
cmQpOworCisgICAgZW51bSBDb25uZWN0aW5nU3Vic3RhdGUgeyBOZXcsIEV4ZWN1dGluZ1BBQ0Zp
bGUsIFdhaXRpbmdGb3JDcmVkZW50aWFscywgV2FpdGluZ0ZvckNvbm5lY3QsIENvbm5lY3RlZCB9
OworICAgIENvbm5lY3RpbmdTdWJzdGF0ZSBtX2Nvbm5lY3RpbmdTdWJzdGF0ZTsKKworICAgIGVu
dW0gQ29ubmVjdGlvblR5cGUgeyBVbmtub3duLCBEaXJlY3QsIFNPQ0tTUHJveHksIENPTk5FQ1RQ
cm94eSB9OworICAgIENvbm5lY3Rpb25UeXBlIG1fY29ubmVjdGlvblR5cGU7CisgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBtX3Byb3h5SG9zdDsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+
IG1fcHJveHlQb3J0OworCisgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VSZWY+IG1fcHJveHlS
ZXNwb25zZU1lc3NhZ2U7CisgICAgYm9vbCBtX3NlbnRTdG9yZWRDcmVkZW50aWFsczsKKyAgICBS
ZXRhaW5QdHI8Q0ZSZWFkU3RyZWFtUmVmPiBtX3JlYWRTdHJlYW07CisgICAgUmV0YWluUHRyPENG
V3JpdGVTdHJlYW1SZWY+IG1fd3JpdGVTdHJlYW07CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+
IG1faHR0cHNVUkw7IC8vIHdzKHMpOiByZXBsYWNlZCB3aXRoIGh0dHBzOgorICAgIFNlc3Npb25J
RCBtX3Nlc3Npb25JRDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0
cmVhbUhhbmRsZUltcGwuaAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgi
Ci0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX19DRkhUVFBNZXNzYWdl
KiBDRkhUVFBNZXNzYWdlUmVmOwogCkBAIC00NCwxNyArNDMsMTcgQEAgY2xhc3MgQ3JlZGVudGlh
bDsKIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dDsKIAotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsK
K2NsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNv
bnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lvbklE
IHNlc3Npb25JRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJs
LCBjbGllbnQsIHNlc3Npb25JRCkpOyB9CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5k
bGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGll
bnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKSk7IH0KIAotICAgIHZpcnR1YWwg
flNvY2tldFN0cmVhbUhhbmRsZSgpOworICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZUlt
cGwoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmLCBTZXNzaW9uSUQpOworICAgIFdFQkNPUkVfRVhQT1JUIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiwgU2Vzc2lvbklEKTsKICAgICB2b2lkIGNyZWF0ZVN0cmVhbXMoKTsKICAgICB2b2lkIHNjaGVk
dWxlU3RyZWFtcygpOwogICAgIHZvaWQgY2hvb3NlUHJveHkoKTsKQEAgLTYyLDcgKzYxLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVQQUNGaWxlVVJMKENGVVJMUmVmKTsKICAgICB2b2lk
IHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wU291cmNl
UmVmPiBtX3BhY1J1bkxvb3BTb3VyY2U7Ci0gICAgc3RhdGljIHZvaWQgcGFjRXhlY3V0aW9uQ2Fs
bGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZiBlcnJv
cik7CisgICAgc3RhdGljIHZvaWQgcGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBD
RkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZik7CiAgICAgc3RhdGljIENGU3RyaW5nUmVm
IGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbih2b2lkKik7CiAKICAgICBib29sIHNob3VsZFVz
ZVNTTCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLnByb3RvY29sSXMoIndzcyIpOyB9CkBAIC05OSw0
ICs5OCw0IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogfTsKIAotfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5j
cHA6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRT
dHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgi
CisKKyNpbmNsdWRlICJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2Uu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmgiCisjaW5jbHVkZSAiUHJvdGVjdGlvblNwYWNlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
TmV0d29yay5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiTG9hZGVy
UnVuTG9vcENGLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2luY2x1ZGUg
PFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbHNlCisj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9S
TShJT1MpIHx8IFBMQVRGT1JNKE1BQykKK2V4dGVybiAiQyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tD
RlN0cmVhbVNvY2tldFNldE5vRGVsYXk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2ltcG9ydCA8Q0ZOZXR3b3JrU1BJLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisg
ICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQorICAgICwgbV9jb25uZWN0
aW5nU3Vic3RhdGUoTmV3KQorICAgICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQorICAgICwg
bV9zZW50U3RvcmVkQ3JlZGVudGlhbHMoZmFsc2UpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9u
SUQpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVu
dCAlcCIsIHRoaXMsICZtX2NsaWVudCk7CisKKyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoIndz
IikgfHwgdXJsLnByb3RvY29sSXMoIndzcyIpKTsKKworICAgIFVSTCBodHRwc1VSTChVUkwoKSwg
Imh0dHBzOi8vIiArIG1fdXJsLmhvc3QoKSk7CisgICAgbV9odHRwc1VSTCA9IGh0dHBzVVJMLmNy
ZWF0ZUNGVVJMKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyBEb24ndCBjaGVjayBm
b3IgSFNUUyB2aW9sYXRpb24gZm9yIGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZQorICAgIC8vIEhT
VFMgc3RhdGUgc2hvdWxkIG5vdCB0cmFuc2ZlciBiZXR3ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUg
YnJvd3NpbmcuCisgICAgaWYgKHVybC5wcm90b2NvbElzKCJ3cyIpCisgICAgICAgICYmICFzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKQorICAgICAgICAmJiBfQ0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0
V2l0aFNlc3Npb24obV9odHRwc1VSTC5nZXQoKSwgbnVsbHB0cikpIHsKKyAgICAgICAgbV9jbGll
bnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwu
c3RyaW5nKCksICJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRl
cyBIVFRQIFN0cmljdCBUcmFuc3BvcnQgU2VjdXJpdHkuIikpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmCisKKyAgICBjcmVhdGVTdHJlYW1zKCk7CisgICAgQVNTRVJUKCFtX3JlYWRT
dHJlYW0gPT0gIW1fd3JpdGVTdHJlYW0pOworICAgIGlmICghbV9yZWFkU3RyZWFtKSAvLyBEb2lu
ZyBhc3luY2hyb25vdXMgUEFDIGZpbGUgcHJvY2Vzc2luZywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0
ZWQgbGF0ZXIuCisgICAgICAgIHJldHVybjsKKworICAgIHNjaGVkdWxlU3RyZWFtcygpOworfQor
Cit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVTdHJlYW1zKCkKK3sKKyAgICBBU1NF
UlQobV9yZWFkU3RyZWFtKTsKKyAgICBBU1NFUlQobV93cml0ZVN0cmVhbSk7CisKKyAgICBDRlN0
cmVhbUNsaWVudENvbnRleHQgY2xpZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0YWluU29ja2V0
U3RyZWFtSGFuZGxlLCByZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNj
cmlwdGlvbiB9OworICAgIC8vIEZJWE1FOiBQYXNzIHNwZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRl
cmVzdGVkIGluIGluc3RlYWQgb2YgLTEuCisgICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVh
ZFN0cmVhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Q0ZPcHRpb25GbGFncz4oLTEpLCByZWFkU3RyZWFt
Q2FsbGJhY2ssICZjbGllbnRDb250ZXh0KTsKKyAgICBDRldyaXRlU3RyZWFtU2V0Q2xpZW50KG1f
d3JpdGVTdHJlYW0uZ2V0KCksIHN0YXRpY19jYXN0PENGT3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVT
dHJlYW1DYWxsYmFjaywgJmNsaWVudENvbnRleHQpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAg
IENGUmVhZFN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBsb2Fk
ZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgQ0ZXcml0ZVN0cmVhbVNj
aGVkdWxlV2l0aFJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBr
Q0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdp
dGhSdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGV3JpdGVTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29w
KG1fd3JpdGVTdHJlYW0uZ2V0KCksIENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcENv
bW1vbk1vZGVzKTsKKyNlbmRpZgorCisgICAgQ0ZSZWFkU3RyZWFtT3BlbihtX3JlYWRTdHJlYW0u
Z2V0KCkpOworICAgIENGV3JpdGVTdHJlYW1PcGVuKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOworCisg
ICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkKKyAgICAgICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJj
ZSgpOworCisgICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKK30K
Kwordm9pZCogU29ja2V0U3RyZWFtSGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9p
ZCogaW5mbykKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIGhhbmRsZS0+cmVmKCk7CisgICAgcmV0
dXJuIGhhbmRsZTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRT
dHJlYW1IYW5kbGUodm9pZCogaW5mbykKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRs
ZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIGhhbmRsZS0+
ZGVyZWYoKTsKK30KKworQ0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhl
Y3V0aW9uRGVzY3JpcHRpb24odm9pZCopCit7CisgICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQg
cHJveHkgUEFDIGZpbGUgZXhlY3V0aW9uIik7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxPbk1haW5U
aHJlYWRBbmRXYWl0KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCit7CisgICAgaWYg
KGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBMb2NrIG11dGV4OworICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJs
ZTsKKworICAgIGJvb2wgaXNGaW5pc2hlZCA9IGZhbHNlOworCisgICAgY2FsbE9uTWFpblRocmVh
ZChbJl0geworICAgICAgICBmdW5jdGlvbigpOworCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG11dGV4KTsKKyAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7CisgICAgICAgIGNv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOworICAgIH0pOworCisgICAgc3RkOjp1bmlxdWVf
bG9jazxMb2NrPiBsb2NrKG11dGV4KTsKKyAgICBjb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ss
IFsmXSB7IHJldHVybiBpc0ZpbmlzaGVkOyB9KTsKK30KKworc3RydWN0IE1haW5UaHJlYWRQQUND
YWxsYmFja0luZm8geworICAgIE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFt
SGFuZGxlKiBoYW5kbGUsIENGQXJyYXlSZWYgcHJveHlMaXN0KSA6IGhhbmRsZShoYW5kbGUpLCBw
cm94eUxpc3QocHJveHlMaXN0KSB7IH0KKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBo
YW5kbGU7CisgICAgQ0ZBcnJheVJlZiBwcm94eUxpc3Q7Cit9OworCit2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZTo6cGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHBy
b3h5TGlzdCwgQ0ZFcnJvclJlZikKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGNsaWVudCk7CisKKyAgICBjYWxsT25N
YWluVGhyZWFkQW5kV2FpdChbJl0geworICAgICAgICBBU1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3Rp
bmdTdWJzdGF0ZSA9PSBFeGVjdXRpbmdQQUNGaWxlKTsKKyAgICAgICAgLy8gVGhpcyB0aW1lLCB0
aGUgYXJyYXkgd29uJ3QgaGF2ZSBQQUMgYXMgYSBmaXJzdCBlbnRyeS4KKyAgICAgICAgaWYgKGhh
bmRsZS0+bV9zdGF0ZSAhPSBDb25uZWN0aW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBoYW5kbGUtPmNob29zZVByb3h5RnJvbUFycmF5KHByb3h5TGlzdCk7CisgICAgICAgIGhhbmRs
ZS0+Y3JlYXRlU3RyZWFtcygpOworICAgICAgICBoYW5kbGUtPnNjaGVkdWxlU3RyZWFtcygpOwor
ICAgIH0pOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwo
Q0ZVUkxSZWYgcGFjRmlsZVVSTCkKK3sKKyAgICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0
eSBwcm94eSBhcnJheSBmb3IgV2ViU29ja2V0IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgor
ICAgIENGU3RyZWFtQ2xpZW50Q29udGV4dCBjbGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRh
aW5Tb2NrZXRTdHJlYW1IYW5kbGUsIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNF
eGVjdXRpb25EZXNjcmlwdGlvbiB9OworICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0Yo
Q0ZOZXR3b3JrRXhlY3V0ZVByb3h5QXV0b0NvbmZpZ3VyYXRpb25VUkwocGFjRmlsZVVSTCwgbV9o
dHRwc1VSTC5nZXQoKSwgcGFjRXhlY3V0aW9uQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KSk7Cisj
aWYgUExBVEZPUk0oV0lOKQorICAgIENGUnVuTG9vcEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wKCks
IG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyNlbHNl
CisgICAgQ0ZSdW5Mb29wQWRkU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5M
b29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworI2VuZGlmCisgICAgbV9j
b25uZWN0aW5nU3Vic3RhdGUgPSBFeGVjdXRpbmdQQUNGaWxlOworfQorCit2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpCit7CisgICAgQVNTRVJUKG1fcGFj
UnVuTG9vcFNvdXJjZSk7CisKKyAgICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVu
TG9vcFNvdXJjZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIENGUnVuTG9vcFJlbW92
ZVNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVu
TG9vcERlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVu
TG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29t
bW9uTW9kZXMpOworI2VuZGlmCisgICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKK30KKwordm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5KCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBwcm94eURpY3Rpb25hcnkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlTeXN0
ZW1Qcm94eVNldHRpbmdzKCkpOworCisgICAgLy8gU09DS1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNU
KSBwcm94aWVzIGFyZSBzdXBwb3J0ZWQuCisgICAgLy8gV2ViU29ja2V0IHByb3RvY29sIHJlbGll
cyBvbiBoYW5kc2hha2UgYmVpbmcgdHJhbnNmZXJyZWQgdW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEg
cHJveHkgdGhhdCB3aWxsIG5vdCBtb2RpZnkgaGVhZGVycy4KKyAgICAvLyBTaW5jZSBIVFRQIHBy
b3hpZXMgbXVzdCBhZGQgVmlhIGhlYWRlcnMsIHRoZXkgYXJlIGhpZ2hseSB1bmxpa2VseSB0byB3
b3JrLgorICAgIC8vIE1hbnkgQ09OTkVDVCBwcm94aWVzIGxpbWl0IGNvbm5lY3Rpdml0eSB0byBw
b3J0IDQ0Mywgc28gd2UgcHJlZmVyIFNPQ0tTLCBpZiBjb25maWd1cmVkLgorCisgICAgaWYgKCFw
cm94eURpY3Rpb25hcnkpIHsKKyAgICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJM
IGRvZXNuJ3Qga25vdyBhYm91dCBXZWJTb2NrZXQgc2NoZW1lcywgc28gcHJldGVuZCB0byB1c2Ug
aHR0cC4KKyAgICAvLyBBbHdheXMgdXNlICJodHRwcyIgdG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4g
cmVzdWx0IC0gd2UnbGwgdHJ5IHRvIHVzZSB0aG9zZSBmb3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFu
eSBhcmUgY29uZmlndXJlZCB0byByZWplY3QgY29ubmVjdGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhh
biA0NDMuCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHByb3h5QXJyYXkgPSBhZG9wdENGKENG
TmV0d29ya0NvcHlQcm94aWVzRm9yVVJMKG1faHR0cHNVUkwuZ2V0KCksIHByb3h5RGljdGlvbmFy
eS5nZXQoKSkpOworCisgICAgY2hvb3NlUHJveHlGcm9tQXJyYXkocHJveHlBcnJheS5nZXQoKSk7
Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94eUZyb21BcnJheShDRkFy
cmF5UmVmIHByb3h5QXJyYXkpCit7CisgICAgaWYgKCFwcm94eUFycmF5KSB7CisgICAgICAgIG1f
Y29ubmVjdGlvblR5cGUgPSBEaXJlY3Q7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBD
RkluZGV4IHByb3h5QXJyYXlDb3VudCA9IENGQXJyYXlHZXRDb3VudChwcm94eUFycmF5KTsKKwor
ICAgIC8vIFBBQyBpcyBhbHdheXMgdGhlIGZpcnN0IGVudHJ5LCBpZiBwcmVzZW50LgorICAgIGlm
IChwcm94eUFycmF5Q291bnQpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9
IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwcm94
eUFycmF5LCAwKSk7CisgICAgICAgIENGVHlwZVJlZiBwcm94eVR5cGUgPSBDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwcm94eUluZm8sIGtDRlByb3h5VHlwZUtleSk7CisgICAgICAgIGlmIChwcm94eVR5
cGUgJiYgQ0ZHZXRUeXBlSUQocHJveHlUeXBlKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Cisg
ICAgICAgICAgICBpZiAoQ0ZFcXVhbChwcm94eVR5cGUsIGtDRlByb3h5VHlwZUF1dG9Db25maWd1
cmF0aW9uVVJMKSkgeworICAgICAgICAgICAgICAgIENGVHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eUF1dG9Db25maWd1cmF0aW9uVVJM
S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAocGFjRmlsZVVSTCAmJiBDRkdldFR5cGVJRChwYWNG
aWxlVVJMKSA9PSBDRlVSTEdldFR5cGVJRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1
dGVQQUNGaWxlVVJMKHN0YXRpY19jYXN0PENGVVJMUmVmPihwYWNGaWxlVVJMKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBDRkRpY3Rpb25hcnlSZWYgY2hvc2VuUHJveHkgPSAwOwor
ICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHByb3h5QXJyYXlDb3VudDsgKytpKSB7CisgICAg
ICAgIENGRGljdGlvbmFyeVJlZiBwcm94eUluZm8gPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocHJveHlBcnJheSwgaSkpOworICAgICAgICBDRlR5
cGVSZWYgcHJveHlUeXBlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94
eVR5cGVLZXkpOworICAgICAgICBpZiAocHJveHlUeXBlICYmIENGR2V0VHlwZUlEKHByb3h5VHlw
ZSkgPT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgaWYgKENGRXF1YWwocHJv
eHlUeXBlLCBrQ0ZQcm94eVR5cGVTT0NLUykpIHsKKyAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rp
b25UeXBlID0gU09DS1NQcm94eTsKKyAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5
SW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChDRkVxdWFsKHByb3h5VHlwZSwga0NGUHJveHlUeXBlSFRUUFMpKSB7CisgICAgICAgICAg
ICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IENPTk5FQ1RQcm94eTsKKyAgICAgICAgICAgICAgICBj
aG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKKyAgICAgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcg
Zm9yIHByb3hpZXMsIGFzIGEgU09DS1Mgb25lIGlzIHByZWZlcmFibGUuCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2hvc2VuUHJveHkpIHsKKyAgICAgICAgQVNT
RVJUKG1fY29ubmVjdGlvblR5cGUgIT0gVW5rbm93bik7CisgICAgICAgIEFTU0VSVChtX2Nvbm5l
Y3Rpb25UeXBlICE9IERpcmVjdCk7CisKKyAgICAgICAgQ0ZUeXBlUmVmIHByb3h5SG9zdCA9IENG
RGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eUhvc3ROYW1lS2V5KTsKKyAg
ICAgICAgQ0ZUeXBlUmVmIHByb3h5UG9ydCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblBy
b3h5LCBrQ0ZQcm94eVBvcnROdW1iZXJLZXkpOworCisgICAgICAgIGlmIChwcm94eUhvc3QgJiYg
Q0ZHZXRUeXBlSUQocHJveHlIb3N0KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpICYmIHByb3h5UG9y
dCAmJiBDRkdldFR5cGVJRChwcm94eVBvcnQpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAg
ICAgICAgICAgIG1fcHJveHlIb3N0ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9z
dCk7CisgICAgICAgICAgICBtX3Byb3h5UG9ydCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihw
cm94eVBvcnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
bV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKK30KKworCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlU3RyZWFtcygpCit7CisgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gVW5rbm93
bikKKyAgICAgICAgY2hvb3NlUHJveHkoKTsKKworICAgIC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93
biwgdGhlbiB3ZSdyZSByZXNvbHZpbmcgYSBQQUMgZmlsZSBhc3luY2hyb25vdXNseS4KKyAgICBp
ZiAobV9jb25uZWN0aW9uVHlwZSA9PSBVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvc3QgPSBtX3VybC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmco
KTsKKworICAgIC8vIENyZWF0aW5nIHN0cmVhbXMgdG8gZmluYWwgZGVzdGluYXRpb24sIG5vdCB0
byBwcm94eS4KKyAgICBDRlJlYWRTdHJlYW1SZWYgcmVhZFN0cmVhbSA9IDA7CisgICAgQ0ZXcml0
ZVN0cmVhbVJlZiB3cml0ZVN0cmVhbSA9IDA7CisgICAgQ0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNv
Y2tldFRvSG9zdCgwLCBob3N0LmdldCgpLCBwb3J0KCksICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJl
YW0pOworI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKQorICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS8xMjg1NTU4Nz4gX2tDRlN0cmVhbVNvY2tldFNldE5vRGVsYXkgaXMgbm90IGV4cG9y
dGVkIG9uIFdpbmRvd3MKKyAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkod3JpdGVTdHJlYW0s
IF9rQ0ZTdHJlYW1Tb2NrZXRTZXROb0RlbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisjZW5kaWYKKwor
ICAgIG1fcmVhZFN0cmVhbSA9IGFkb3B0Q0YocmVhZFN0cmVhbSk7CisgICAgbV93cml0ZVN0cmVh
bSA9IGFkb3B0Q0Yod3JpdGVTdHJlYW0pOworCisgICAgc3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBl
KSB7CisgICAgY2FzZSBVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEaXJlY3Q6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U09DS1NQcm94eTogeworICAgICAgICAvLyBGSVhNRTogU09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxl
bmdlLXJlc3BvbnNlLCBzaG91bGQgd2UgdHJ5IHRvIGFwcGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5
Y2hhaW4gcmlnaHQgYXdheT8KKyAgICAgICAgLy8gQnV0IFNPQ0tTNSBjcmVkZW50aWFscyBkb24n
dCB3b3JrIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3
NzY2OTg+LgorICAgICAgICBjb25zdCB2b2lkKiBwcm94eUtleXNbXSA9IHsga0NGU3RyZWFtUHJv
cGVydHlTT0NLU1Byb3h5SG9zdCwga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5UG9ydCB9Owor
ICAgICAgICBjb25zdCB2b2lkKiBwcm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwg
bV9wcm94eVBvcnQuZ2V0KCkgfTsKKyAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
Y29ubmVjdERpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtl
eXMsIHByb3h5VmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKHByb3h5S2V5cyksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KyAgICAgICAgQ0ZSZWFkU3RyZWFtU2V0UHJvcGVydHkobV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZT
dHJlYW1Qcm9wZXJ0eVNPQ0tTUHJveHksIGNvbm5lY3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBjYXNlIENPTk5FQ1RQcm94eToKKyAgICAgICAgd2tT
ZXRDT05ORUNUUHJveHlGb3JTdHJlYW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5n
ZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoc2hvdWxkVXNlU1NMKCkpIHsKKyAgICAgICAgQ0ZCb29sZWFuUmVmIHZhbGlkYXRlQ2VydGlm
aWNhdGVDaGFpbiA9IFNldHRpbmdzOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9v
bGVhbkZhbHNlIDoga0NGQm9vbGVhblRydWU7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9
IHsga0NGU3RyZWFtU1NMUGVlck5hbWUsIGtDRlN0cmVhbVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xW
YWxpZGF0ZXNDZXJ0aWZpY2F0ZUNoYWluIH07CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1td
ID0geyBob3N0LmdldCgpLCBrQ0ZTdHJlYW1Tb2NrZXRTZWN1cml0eUxldmVsTmVnb3RpYXRlZFNT
TCwgdmFsaWRhdGVDZXJ0aWZpY2F0ZUNoYWluIH07CisgICAgICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHNldHRpbmdzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywg
dmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIENGUmVh
ZFN0cmVhbVNldFByb3BlcnR5KG1fcmVhZFN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlT
U0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOworICAgICAgICBDRldyaXRlU3RyZWFtU2V0UHJv
cGVydHkobV93cml0ZVN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywg
c2V0dGluZ3MuZ2V0KCkpOworICAgIH0KK30KKworYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6Omdl
dFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJv
dGVjdGlvblNwYWNlLCBTdHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIC8v
IEZJWE1FICg8cmRhcjovL3Byb2JsZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hv
dWxkIGJlIHJldHJpZXZlZCBmcm9tIEF1dGhCcm9rZXJBZ2VudC4KKworICAgIC8vIFRyeSBzeXN0
ZW0gY3JlZGVudGlhbCBzdG9yYWdlIGZpcnN0LCBtYXRjaGluZyBIVFRQIGJlaGF2aW9yIChDRk5l
dHdvcmsgb25seSBhc2tzIHRoZSBjbGllbnQgZm9yIHBhc3N3b3JkIGlmIGl0IGNvdWxkbid0IGZp
bmQgaXQgaW4gS2V5Y2hhaW4pLgorICAgIENyZWRlbnRpYWwgc3RvcmVkQ3JlZGVudGlhbDsKKyAg
ICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3Jh
Z2VTZXNzaW9uKG1fc2Vzc2lvbklEKSkgeworICAgICAgICBzdG9yZWRDcmVkZW50aWFsID0gc3Rv
cmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdl
KHByb3RlY3Rpb25TcGFjZSk7CisgICAgICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHN0b3JlZENyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVu
dGlhbFN0b3JhZ2UoKS5nZXQocHJvdGVjdGlvblNwYWNlKTsKKyAgICB9CisKKyAgICBpZiAoc3Rv
cmVkQ3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGxv
Z2luID0gc3RvcmVkQ3JlZGVudGlhbC51c2VyKCk7CisgICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVk
ZW50aWFsLnBhc3N3b3JkKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1
dGhlbnRpY2F0aW9uTWV0aG9kKENGU3RyaW5nUmVmIG1ldGhvZCkKK3sKKyAgICBpZiAoQ0ZFcXVh
bChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZUJhc2ljKSkKKyAgICAgICAgcmV0
dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOworICAgIGlm
IChDRkVxdWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lRGlnZXN0KSkKKyAg
ICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2Vz
dDsKKyAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5U
TE0pKQorICAgICAgICByZXR1cm4gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVO
VExNOworICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1l
TmVnb3RpYXRlKSkKKyAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lTmVnb3RpYXRlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQ
cm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd247Cit9CisKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjphZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBw
cm94eVJlc3BvbnNlKQoreworICAgIFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4g
YXV0aGVudGljYXRpb24gPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJl
c3BvbnNlKDAsIHByb3h5UmVzcG9uc2UpKTsKKworICAgIGlmICghQ0ZIVFRQQXV0aGVudGljYXRp
b25SZXF1aXJlc1VzZXJOYW1lQW5kUGFzc3dvcmQoYXV0aGVudGljYXRpb24uZ2V0KCkpKSB7Cisg
ICAgICAgIC8vIFRoYXQncyBhbGwgd2UgY2FuIG9mZmVyLi4uCisgICAgICAgIG1fY2xpZW50LmRp
ZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9yKDAsIG1fdXJsLnN0cmlu
ZygpLCAiUHJveHkgYXV0aGVudGljYXRpb24gc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdl
YlNvY2tldHMiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcG9ydCA9IDA7
CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlw
ZSwgJnBvcnQpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENG
KENGSFRUUEF1dGhlbnRpY2F0aW9uQ29weU1ldGhvZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpOwor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcmVhbG1DRiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVu
dGljYXRpb25Db3B5UmVhbG0oYXV0aGVudGljYXRpb24uZ2V0KCkpKTsKKworICAgIGlmICghbWV0
aG9kQ0YgfHwgIXJlYWxtQ0YpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBi
dXQgb24gc29tZSBPUyB2ZXJzaW9ucyB3ZSBnZXQgaW5jb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBk
YXRhLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzEwNDE2MzE2Pi4KKyAgICAgICAgbV9jbGllbnQuZGlk
RmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5n
KCksICJXZWJTb2NrZXQgcHJveHkgYXV0aGVudGljYXRpb24gY291bGRuJ3QgYmUgaGFuZGxlZCIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0
aW9uU3BhY2UoU3RyaW5nKG1fcHJveHlIb3N0LmdldCgpKSwgcG9ydCwgUHJvdGVjdGlvblNwYWNl
UHJveHlIVFRQUywgU3RyaW5nKHJlYWxtQ0YuZ2V0KCkpLCBhdXRoZW50aWNhdGlvblNjaGVtZUZy
b21BdXRoZW50aWNhdGlvbk1ldGhvZChtZXRob2RDRi5nZXQoKSkpOworICAgIFN0cmluZyBsb2dp
bjsKKyAgICBTdHJpbmcgcGFzc3dvcmQ7CisgICAgaWYgKCFtX3NlbnRTdG9yZWRDcmVkZW50aWFs
cyAmJiBnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxv
Z2luLCBwYXNzd29yZCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50
aWFscywgaWYgd2UgaGF2ZW4ndCB0cmllZCB0aG9zZSBhbHJlYWR5LgorICAgICAgICAvLyBDcmVh
dGUgYSB0ZW1wb3JhcnkgcmVxdWVzdCB0byBtYWtlIENGTmV0d29yayBhcHBseSBjcmVkZW50aWFs
cyB0byBpdC4gVW5mb3J0dW5hdGVseSwgdGhpcyBjYW5ub3Qgd29yayB3aXRoIE5UTE0gYXV0aGVu
dGljYXRpb24uCisgICAgICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBkdW1teVJlcXVl
c3QgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwg
bV9odHRwc1VSTC5nZXQoKSwga0NGSFRUUFZlcnNpb24xXzEpKTsKKworICAgICAgICBCb29sZWFu
IGFwcGxpZWRDcmVkZW50aWFscyA9IENGSFRUUE1lc3NhZ2VBcHBseUNyZWRlbnRpYWxzKGR1bW15
UmVxdWVzdC5nZXQoKSwgYXV0aGVudGljYXRpb24uZ2V0KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIHBhc3N3b3JkLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApOworICAgICAgICBB
U1NFUlRfVU5VU0VEKGFwcGxpZWRDcmVkZW50aWFscywgYXBwbGllZENyZWRlbnRpYWxzKTsKKwor
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyA9
IGFkb3B0Q0YoQ0ZIVFRQTWVzc2FnZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5n
ZXQoKSwgQ0ZTVFIoIlByb3h5LUF1dGhvcml6YXRpb24iKSkpOworCisgICAgICAgIGlmICghcHJv
eHlBdXRob3JpemF0aW9uU3RyaW5nKSB7CisgICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBO
VExNIGF1dGguCisgICAgICAgICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlz
LCBTb2NrZXRTdHJlYW1FcnJvcigwLCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0
aW9uIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBXZWJTb2NrZXRzIikpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgYXV0aG9yaXph
dGlvbiByZXN1bHRzIGluIGEgbmV3IGNvbm5lY3Rpb24gYXR0ZW1wdC4KKyAgICAgICAgd2tTZXRD
T05ORUNUUHJveHlBdXRob3JpemF0aW9uRm9yU3RyZWFtKG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJv
eHlBdXRob3JpemF0aW9uU3RyaW5nLmdldCgpKTsKKyAgICAgICAgbV9zZW50U3RvcmVkQ3JlZGVu
dGlhbHMgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IE9u
IHBsYXRmb3JtcyB3aGVyZSBBdXRoQnJva2VyQWdlbnQgaXMgbm90IGF2YWlsYWJsZSwgYXNrIHRo
ZSBjbGllbnQgaWYgY3JlZGVudGlhbHMgY291bGQgbm90IGJlIGZvdW5kLgorCisgICAgbV9jbGll
bnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwu
c3RyaW5nKCksICJQcm94eSBjcmVkZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKK30KKwor
Q0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2
b2lkKiBpbmZvKQoreworICAgIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nh
c3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7CisgICAgcmV0dXJuIFN0cmluZygiV2ViS2l0
IHNvY2tldCBzdHJlYW0sICIgKyBoYW5kbGUtPm1fdXJsLnN0cmluZygpKS5jcmVhdGVDRlN0cmlu
ZygpLmxlYWtSZWYoKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1D
YWxsYmFjayhDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2
b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8p
OworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJl
YW0uZ2V0KCkpOworICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3
Mz4uIEtlZXBpbmcgdGhpcyBiZWxvdyB0aGUgYXNzZXJ0aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIg
c3RlcHMgdG8gcmVwcm9kdWNlIHRoaXMuCisgICAgaWYgKCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkK
KyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIFJlZlB0cjxTb2NrZXRT
dHJlYW1IYW5kbGU+IHByb3RlY3RvcihoYW5kbGUpOworICAgIGNhbGxPbk1haW5UaHJlYWRBbmRX
YWl0KFsmXSB7CisgICAgICAgIGlmIChoYW5kbGUtPm1fcmVhZFN0cmVhbSkKKyAgICAgICAgICAg
IGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOworICAgIH0pOworI2Vsc2UKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5
cGUpOworI2VuZGlmCit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNh
bGxiYWNrKENGV3JpdGVTdHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2
b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8p
OworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dyaXRlU3Ry
ZWFtLmdldCgpKTsKKyAgICAvLyBUaGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBwcmFjdGlj
ZSwgeWV0IGl0IHNlZW1zIGxpa2UgaXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQg
c3RyZWFtIGNhbGxiYWNrLgorICAgIGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQorICAgICAg
ICByZXR1cm47CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhh
bmRsZT4gcHJvdGVjdG9yKGhhbmRsZSk7CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZd
IHsKKyAgICAgICAgaWYgKGhhbmRsZS0+bV93cml0ZVN0cmVhbSkKKyAgICAgICAgICAgIGhhbmRs
ZS0+d3JpdGVTdHJlYW1DYWxsYmFjayh0eXBlKTsKKyAgICB9KTsKKyNlbHNlCisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBoYW5kbGUtPndyaXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7
CisjZW5kaWYKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFj
ayhDRlN0cmVhbUV2ZW50VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudE5vbmU6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVh
bUV2ZW50T3BlbkNvbXBsZXRlZDoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Uga0NGU3RyZWFt
RXZlbnRIYXNCeXRlc0F2YWlsYWJsZTogeworICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3Rh
dGUgPT0gV2FpdGluZ0ZvckNyZWRlbnRpYWxzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ29ubmVjdCkgeworICAg
ICAgICAgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gQ09OTkVDVFByb3h5KSB7CisgICAgICAg
ICAgICAgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VSZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9w
dENGKHdrQ29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKG1fcmVhZFN0cmVhbS5nZXQoKSwgbV9odHRw
c1VSTC5nZXQoKSwgbV9wcm94eUhvc3QuZ2V0KCksIG1fcHJveHlQb3J0LmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFwcm94eVJlc3BvbnNlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgICAgICBDRkluZGV4IHByb3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQ
TWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShwcm94eVJlc3BvbnNlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHByb3h5UmVzcG9uc2VDb2RlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAyMDA6CisgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0MDc6Cisg
ICAgICAgICAgICAgICAgICAgIGFkZENPTk5FQ1RDcmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRo
aXMsIFNvY2tldFN0cmVhbUVycm9yKHN0YXRpY19jYXN0PGludD4ocHJveHlSZXNwb25zZUNvZGUp
LCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlz
aGVkLCB1bmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUiKSk7CisgICAgICAgICAgICAgICAgICAgIHBs
YXRmb3JtQ2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0g
Q29ubmVjdGVkOworICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAgICAgICBtX2Ns
aWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3Zl
LCBhbmQgaXQgY291bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlmIChtX3N0YXRl
ID09IENsb3NlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV9zdGF0
ZSA9PSBPcGVuKTsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5l
Y3RlZCk7CisKKyAgICAgICAgQ0ZJbmRleCBsZW5ndGg7CisgICAgICAgIFVJbnQ4IGxvY2FsQnVm
ZmVyWzEwMjRdOyAvLyBVc2VkIGlmIENGUmVhZFN0cmVhbUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1
cm4gYW55dGhpbmcuCisgICAgICAgIGNvbnN0IFVJbnQ4KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRC
dWZmZXIobV9yZWFkU3RyZWFtLmdldCgpLCAwLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFwdHIp
IHsKKyAgICAgICAgICAgIGxlbmd0aCA9IENGUmVhZFN0cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdl
dCgpLCBsb2NhbEJ1ZmZlciwgc2l6ZW9mKGxvY2FsQnVmZmVyKSk7CisgICAgICAgICAgICBwdHIg
PSBsb2NhbEJ1ZmZlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1E
YXRhKCp0aGlzLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBsZW5ndGgpOwor
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2Vw
dEJ5dGVzOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRFcnJvck9jY3VycmVkOiB7CisgICAgICAgIFJldGFpblB0
cjxDRkVycm9yUmVmPiBlcnJvciA9IGFkb3B0Q0YoQ0ZSZWFkU3RyZWFtQ29weUVycm9yKG1fcmVh
ZFN0cmVhbS5nZXQoKSkpOworICAgICAgICByZXBvcnRFcnJvclRvQ2xpZW50KGVycm9yLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5j
b3VudGVyZWQ6CisgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZT
dHJlYW1FdmVudFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkgeworICAgIGNhc2Uga0NG
U3RyZWFtRXZlbnROb25lOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVu
dE9wZW5Db21wbGV0ZWQ6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50
SGFzQnl0ZXNBdmFpbGFibGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOiB7CisgICAg
ICAgIC8vIENhbiBiZSBmYWxzZSBpZiByZWFkIHN0cmVhbSBjYWxsYmFjayBqdXN0IGRlY2lkZWQg
dG8gcmV0cnkgYSBDT05ORUNUIHdpdGggY3JlZGVudGlhbHMuCisgICAgICAgIGlmICghQ0ZXcml0
ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9y
Q3JlZGVudGlhbHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fY29ubmVj
dGluZ1N1YnN0YXRlID09IFdhaXRpbmdGb3JDb25uZWN0KSB7CisgICAgICAgICAgICBpZiAobV9j
b25uZWN0aW9uVHlwZSA9PSBDT05ORUNUUHJveHkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZIVFRQTWVzc2FnZVJlZj4gcHJveHlSZXNwb25zZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVD
VFByb3h5UmVzcG9uc2UobV9yZWFkU3RyZWFtLmdldCgpLCBtX2h0dHBzVVJMLmdldCgpLCBtX3By
b3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXByb3h5UmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIC8vIERvbid0IHdyaXRlIGFueXRoaW5nIHVudGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNr
IGhhcyBkZWFsdCB3aXRoIENPTk5FQ1QgY3JlZGVudGlhbHMuCisgICAgICAgICAgICAgICAgLy8g
VGhlIG9yZGVyIG9mIGNhbGxiYWNrcyBpcyBub3QgZGVmaW5lZCwgc28gdGhpcyBjYW4gYmUgY2Fs
bGVkIGJlZm9yZSByZWFkU3RyZWFtQ2FsbGJhY2sncyBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZh
aWxhYmxlLgorICAgICAgICAgICAgICAgIENGSW5kZXggcHJveHlSZXNwb25zZUNvZGUgPSBDRkhU
VFBNZXNzYWdlR2V0UmVzcG9uc2VTdGF0dXNDb2RlKHByb3h5UmVzcG9uc2UuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGlmIChwcm94eVJlc3BvbnNlQ29kZSAhPSAyMDApCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1
YnN0YXRlID0gQ29ubmVjdGVkOworICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAg
ICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBj
YWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlm
IChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBPcGVuKTsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRl
ID09IENvbm5lY3RlZCk7CisKKyAgICAgICAgc2VuZFBlbmRpbmdEYXRhKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6IHsKKyAg
ICAgICAgUmV0YWluUHRyPENGRXJyb3JSZWY+IGVycm9yID0gYWRvcHRDRihDRldyaXRlU3RyZWFt
Q29weUVycm9yKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKTsKKyAgICAgICAgcmVwb3J0RXJyb3JUb0Ns
aWVudChlcnJvci5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZT
dHJlYW1FdmVudEVuZEVuY291bnRlcmVkOgorICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3
ZSBoYW5kbGUgY2xvc2luZyBpbiByZWFkIGNhbGxiYWNrLCBidXQgdGhlc2UgY2FuIGNvbWUgaW5k
ZXBlbmRlbnRseSAoZS5nLiBhIHNlcnZlciBjYW4gc3RvcCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNl
bmRpbmcgZGF0YSkuCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCit7CisgICAg
Q0ZJbmRleCBlcnJvckNvZGUgPSBDRkVycm9yR2V0Q29kZShlcnJvcik7CisgICAgU3RyaW5nIGRl
c2NyaXB0aW9uOworCisjaWYgUExBVEZPUk0oTUFDKQorCisjaWYgQ09NUElMRVIoQ0xBTkcpCisj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisjZW5kaWYKKworICAgIGlmIChDRkVx
dWFsKENGRXJyb3JHZXREb21haW4oZXJyb3IpLCBrQ0ZFcnJvckRvbWFpbk9TU3RhdHVzKSkgewor
ICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbk9TU3RhdHVzID0gR2V0TWFjT1NTdGF0dXND
b21tZW50U3RyaW5nKHN0YXRpY19jYXN0PE9TU3RhdHVzPihlcnJvckNvZGUpKTsKKyAgICAgICAg
aWYgKGRlc2NyaXB0aW9uT1NTdGF0dXMgJiYgZGVzY3JpcHRpb25PU1N0YXR1c1swXSAhPSAnXDAn
KQorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiT1NTdGF0dXMgRXJyb3IgIiArIFN0cmluZzo6
bnVtYmVyKGVycm9yQ29kZSkgKyAiOiAiICsgZGVzY3JpcHRpb25PU1N0YXR1czsKKyAgICB9CisK
KyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRp
ZgorCisjZW5kaWYKKworICAgIGlmIChkZXNjcmlwdGlvbi5pc051bGwoKSkgeworICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRlc2NyaXB0aW9uQ0YgPSBhZG9wdENGKENGRXJyb3JDb3B5
RGVzY3JpcHRpb24oZXJyb3IpKTsKKyAgICAgICAgZGVzY3JpcHRpb24gPSBTdHJpbmcoZGVzY3Jp
cHRpb25DRi5nZXQoKSk7CisgICAgfQorCisgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBt
X3VybC5zdHJpbmcoKSwgZGVzY3JpcHRpb24pKTsKK30KKworU29ja2V0U3RyZWFtSGFuZGxlOjp+
U29ja2V0U3RyZWFtSGFuZGxlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhh
bmRsZSAlcCBkdG9yIiwgdGhpcyk7CisKKyAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7
Cit9CisKK2ludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVz
KG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBD
RldyaXRlU3RyZWFtV3JpdGUobV93cml0ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVSW50OCo+KGRhdGEpLCBsZW5ndGgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6cGxhdGZvcm1DbG9zZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5k
bGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOworCisgICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJj
ZSkgCisgICAgICAgIHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKKworICAgIEFTU0VSVCghbV9y
ZWFkU3RyZWFtID09ICFtX3dyaXRlU3RyZWFtKTsKKyAgICBpZiAoIW1fcmVhZFN0cmVhbSkgewor
ICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1
YnN0YXRlID09IEV4ZWN1dGluZ1BBQ0ZpbGUpCisgICAgICAgICAgICBtX2NsaWVudC5kaWRDbG9z
ZVNvY2tldFN0cmVhbSgqdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBQTEFU
Rk9STShXSU4pCisgICAgQ0ZSZWFkU3RyZWFtVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0
cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAg
IENGV3JpdGVTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwg
bG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlJl
YWRTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZXcml0ZVN0cmVh
bVVuc2NoZWR1bGVGcm9tUnVuTG9vcChtX3dyaXRlU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRD
dXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisjZW5kaWYKKworICAgIENGUmVhZFN0
cmVhbUNsb3NlKG1fcmVhZFN0cmVhbS5nZXQoKSk7CisgICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1f
d3JpdGVTdHJlYW0uZ2V0KCkpOworICAgIAorICAgIG1fcmVhZFN0cmVhbSA9IDA7CisgICAgbV93
cml0ZVN0cmVhbSA9IDA7CisKKyAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhp
cyk7Cit9CisKK3Vuc2lnbmVkIHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0
Cit7CisgICAgaWYgKHVuc2lnbmVkIHNob3J0IHVybFBvcnQgPSBtX3VybC5wb3J0KCkpCisgICAg
ICAgIHJldHVybiB1cmxQb3J0OworICAgIGlmIChzaG91bGRVc2VTU0woKSkKKyAgICAgICAgcmV0
dXJuIDQ0MzsKKyAgICByZXR1cm4gODA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5j
bHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIgogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbC5o
IgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCkBAIC00NSwxMyArNDUsMTIgQEAKICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCi0jaWYgUExBVEZPUk0oSU9TKQorI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oV0lO
KQogI2luY2x1ZGUgPENGTmV0d29yay9DRk5ldHdvcmsuaD4KICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oV0lOKQogI2luY2x1ZGUgIkxvYWRlclJ1bkxvb3BDRi5oIgotI2luY2x1ZGUgPENGTmV0d29y
ay9DRk5ldHdvcmsuaD4KICNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmg+CiAjZWxzZQogI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
aCIKQEAgLTY3LDggKzY2LDggQEAgZXh0ZXJuICJDIiBjb25zdCBDRlN0cmluZ1JlZiBfa0NGU3Ry
ZWFtUwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0
U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNs
aWVudCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLSAgICA6IFNvY2tldFN0cmVhbUhhbmRsZUJhc2Uo
dXJsLCBjbGllbnQpCitTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vz
c2lvbklEIHNlc3Npb25JRCkKKyAgICA6IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCkK
ICAgICAsIG1fY29ubmVjdGluZ1N1YnN0YXRlKE5ldykKICAgICAsIG1fY29ubmVjdGlvblR5cGUo
VW5rbm93bikKICAgICAsIG1fc2VudFN0b3JlZENyZWRlbnRpYWxzKGZhbHNlKQpAQCAtMTAwLDcg
Kzk5LDcgQEAgU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoYwogICAgIHNj
aGVkdWxlU3RyZWFtcygpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVT
dHJlYW1zKCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c2NoZWR1bGVTdHJlYW1zKCkK
IHsKICAgICBBU1NFUlQobV9yZWFkU3RyZWFtKTsKICAgICBBU1NFUlQobV93cml0ZVN0cmVhbSk7
CkBAIC0xMjcsMjUgKzEyNiwyNSBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVT
dHJlYW1zCiAgICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKIH0K
IAotdm9pZCogU29ja2V0U3RyZWFtSGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9p
ZCogaW5mbykKK3ZvaWQqIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJldGFpblNvY2tldFN0cmVh
bUhhbmRsZSh2b2lkKiBpbmZvKQogewogICAgIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0g
c3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7CiAgICAgaGFuZGxlLT5yZWYo
KTsKICAgICByZXR1cm4gaGFuZGxlOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVs
ZWFzZVNvY2tldFN0cmVhbUhhbmRsZSh2b2lkKiBpbmZvKQordm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGVJbXBsOjpyZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQqIGluZm8pCiB7CiAgICAgU29j
a2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUq
PihpbmZvKTsKICAgICBoYW5kbGUtPmRlcmVmKCk7CiB9CiAKLUNGU3RyaW5nUmVmIFNvY2tldFN0
cmVhbUhhbmRsZTo6Y29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0aW9uKHZvaWQqKQorQ0ZTdHJpbmdS
ZWYgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0aW9uKHZv
aWQqKQogewogICAgIHJldHVybiBDRlNUUigiV2ViU29ja2V0IHByb3h5IFBBQyBmaWxlIGV4ZWN1
dGlvbiIpOwogfQogCi1zdGF0aWMgdm9pZCBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChzdGQ6OmZ1
bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQorc3RhdGljIHZvaWQgY2FsbE9uTWFpblRocmVhZEFu
ZFdhaXQoc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uKQogewogICAgIGlmIChpc01haW5U
aHJlYWQoKSkgewogICAgICAgICBmdW5jdGlvbigpOwpAQCAtMTY2LDE4ICsxNjUsMjIgQEAgc3Rh
dGljIHZvaWQgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoc3RkOgogICAgIH0pOwogCiAgICAgc3Rk
Ojp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG11dGV4KTsKLSAgICBjb25kaXRpb25WYXJpYWJsZS53
YWl0KGxvY2ssIFsmXSB7IHJldHVybiBpc0ZpbmlzaGVkOyB9KTsKKyAgICBjb25kaXRpb25WYXJp
YWJsZS53YWl0KGxvY2ssIFsmXSB7CisgICAgICAgIHJldHVybiBpc0ZpbmlzaGVkOworICAgIH0p
OwogfQogCiBzdHJ1Y3QgTWFpblRocmVhZFBBQ0NhbGxiYWNrSW5mbyB7Ci0gICAgTWFpblRocmVh
ZFBBQ0NhbGxiYWNrSW5mbyhTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSwgQ0ZBcnJheVJlZiBw
cm94eUxpc3QpIDogaGFuZGxlKGhhbmRsZSksIHByb3h5TGlzdChwcm94eUxpc3QpIHsgfQorICAg
IE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUsIENG
QXJyYXlSZWYgcHJveHlMaXN0KQorICAgICAgICA6IGhhbmRsZShoYW5kbGUpLCBwcm94eUxpc3Qo
cHJveHlMaXN0KQorICAgIHsgfQogICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGhhbmRs
ZTsKICAgICBDRkFycmF5UmVmIHByb3h5TGlzdDsKIH07CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpwYWNFeGVjdXRpb25DYWxsYmFjayh2b2lkKiBjbGllbnQsIENGQXJyYXlSZWYgcHJveHlM
aXN0LCBDRkVycm9yUmVmKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwYWNFeGVjdXRp
b25DYWxsYmFjayh2b2lkKiBjbGllbnQsIENGQXJyYXlSZWYgcHJveHlMaXN0LCBDRkVycm9yUmVm
KQogewotICAgIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlKj4oY2xpZW50KTsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKj4oY2xpZW50KTsKIAogICAg
IGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFsmXSB7CiAgICAgICAgIEFTU0VSVChoYW5kbGUtPm1f
Y29ubmVjdGluZ1N1YnN0YXRlID09IEV4ZWN1dGluZ1BBQ0ZpbGUpOwpAQCAtMTkwLDcgKzE5Myw3
IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwYWNFeGVjdXRpb25DYWwKICAgICB9KTsKIH0K
IAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmV4ZWN1dGVQQUNGaWxlVVJMKENGVVJMUmVmIHBh
Y0ZpbGVVUkwpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmV4ZWN1dGVQQUNGaWxlVVJM
KENGVVJMUmVmIHBhY0ZpbGVVUkwpCiB7CiAgICAgLy8gQ0ZOZXR3b3JrIHJldHVybnMgYW4gZW1w
dHkgcHJveHkgYXJyYXkgZm9yIFdlYlNvY2tldCBzY2hlbWVzLCBzbyB1c2UgbV9odHRwc1VSTC4K
ICAgICBDRlN0cmVhbUNsaWVudENvbnRleHQgY2xpZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0
YWluU29ja2V0U3RyZWFtSGFuZGxlLCByZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5UEFD
RXhlY3V0aW9uRGVzY3JpcHRpb24gfTsKQEAgLTIwMyw3ICsyMDYsNyBAQCB2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVCiAgICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBF
eGVjdXRpbmdQQUNGaWxlOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVtb3ZlUEFD
UnVuTG9vcFNvdXJjZSgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbW92ZVBBQ1J1
bkxvb3BTb3VyY2UoKQogewogICAgIEFTU0VSVChtX3BhY1J1bkxvb3BTb3VyY2UpOwogCkBAIC0y
MTYsNyArMjE5LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbW92ZVBBQ1J1bkxvbwog
ICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IDA7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
OjpjaG9vc2VQcm94eSgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNob29zZVByb3h5
KCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eURpY3Rpb25hcnkgPSBh
ZG9wdENGKENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdzKCkpOwogCkBAIC0yMzcsNyAr
MjQwLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5KCkKICAgICBjaG9v
c2VQcm94eUZyb21BcnJheShwcm94eUFycmF5LmdldCgpKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGU6OmNob29zZVByb3h5RnJvbUFycmF5KENGQXJyYXlSZWYgcHJveHlBcnJheSkKK3Zv
aWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y2hvb3NlUHJveHlGcm9tQXJyYXkoQ0ZBcnJheVJl
ZiBwcm94eUFycmF5KQogewogICAgIGlmICghcHJveHlBcnJheSkgewogICAgICAgICBtX2Nvbm5l
Y3Rpb25UeXBlID0gRGlyZWN0OwpAQCAtMjk3LDcgKzMwMCw3IEBAIHZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlOjpjaG9vc2VQcm94eUZyb20KIH0KIAogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6
Y3JlYXRlU3RyZWFtcygpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZVN0cmVh
bXMoKQogewogICAgIGlmIChtX2Nvbm5lY3Rpb25UeXBlID09IFVua25vd24pCiAgICAgICAgIGNo
b29zZVByb3h5KCk7CkBAIC0zNTAsNyArMzUzLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OmNyZWF0ZVN0cmVhbXMoKQogICAgIH0KIH0KIAotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6Omdl
dFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJv
dGVjdGlvblNwYWNlLCBTdHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQorYm9vbCBTb2Nr
ZXRTdHJlYW1IYW5kbGVJbXBsOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyhjb25z
dCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSwgU3RyaW5nJiBsb2dpbiwgU3RyaW5n
JiBwYXNzd29yZCkKIHsKICAgICAvLyBGSVhNRSAoPHJkYXI6Ly9wcm9ibGVtLzEwNDE2NDk1Pik6
IFByb3h5IGNyZWRlbnRpYWxzIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSBBdXRoQnJva2VyQWdl
bnQuCiAKQEAgLTM4NSw3ICszODgsNyBAQCBzdGF0aWMgUHJvdGVjdGlvblNwYWNlQXV0aGVudGlj
YXRpb25TY2hlCiAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1l
VW5rbm93bjsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmFkZENPTk5FQ1RDcmVkZW50
aWFscyhDRkhUVFBNZXNzYWdlUmVmIHByb3h5UmVzcG9uc2UpCit2b2lkIFNvY2tldFN0cmVhbUhh
bmRsZUltcGw6OmFkZENPTk5FQ1RDcmVkZW50aWFscyhDRkhUVFBNZXNzYWdlUmVmIHByb3h5UmVz
cG9uc2UpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUEF1dGhlbnRpY2F0aW9uUmVmPiBhdXRoZW50
aWNhdGlvbiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVudGljYXRpb25DcmVhdGVGcm9tUmVzcG9uc2Uo
MCwgcHJveHlSZXNwb25zZSkpOwogCkBAIC00MzYsMTUgKzQzOSwxNSBAQCB2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6YWRkQ09OTkVDVENyZWRlCiAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0
cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJQcm94eSBj
cmVkZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKIH0KIAotQ0ZTdHJpbmdSZWYgU29ja2V0
U3RyZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQorQ0ZTdHJp
bmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29weUNGU3RyZWFtRGVzY3JpcHRpb24odm9p
ZCogaW5mbykKIHsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIFNvY2tldFN0cmVhbUhhbmRsZUltcGwq
IGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZUltcGwqPihpbmZvKTsKICAg
ICByZXR1cm4gU3RyaW5nKCJXZWJLaXQgc29ja2V0IHN0cmVhbSwgIiArIGhhbmRsZS0+bV91cmwu
c3RyaW5nKCkpLmNyZWF0ZUNGU3RyaW5nKCkubGVha1JlZigpOwogfQogCi12b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZFN0cmVhbUNhbGxiYWNrKENGUmVhZFN0cmVhbVJlZiBzdHJlYW0sIENG
U3RyZWFtRXZlbnRUeXBlIHR5cGUsIHZvaWQqIGNsaWVudENhbGxCYWNrSW5mbykKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKENGUmVhZFN0cmVhbVJlZiBz
dHJlYW0sIENGU3RyZWFtRXZlbnRUeXBlIHR5cGUsIHZvaWQqIGNsaWVudENhbGxCYWNrSW5mbykK
IHsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0
cmVhbUhhbmRsZSo+KGNsaWVudENhbGxCYWNrSW5mbyk7CisgICAgU29ja2V0U3RyZWFtSGFuZGxl
SW1wbCogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlSW1wbCo+KGNsaWVu
dENhbGxCYWNrSW5mbyk7CiAgICAgQVNTRVJUX1VOVVNFRChzdHJlYW0sIHN0cmVhbSA9PSBoYW5k
bGUtPm1fcmVhZFN0cmVhbS5nZXQoKSk7CiAgICAgLy8gV29ya2Fyb3VuZCBmb3IgPHJkYXI6Ly9w
cm9ibGVtLzE3NzI3MDczPi4gS2VlcGluZyB0aGlzIGJlbG93IHRoZSBhc3NlcnRpb24gYXMgd2Un
ZCBsaWtlIGJldHRlciBzdGVwcyB0byByZXByb2R1Y2UgdGhpcy4KICAgICBpZiAoIWhhbmRsZS0+
bV9yZWFkU3RyZWFtKQpAQCAtNDYyLDkgKzQ2NSw5IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
OjpyZWFkU3RyZWFtQ2FsbGIKICNlbmRpZgogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6
d3JpdGVTdHJlYW1DYWxsYmFjayhDRldyaXRlU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FdmVu
dFR5cGUgdHlwZSwgdm9pZCogY2xpZW50Q2FsbEJhY2tJbmZvKQordm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVTdHJlYW1SZWYgc3RyZWFtLCBD
RlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCiB7Ci0gICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5k
bGUqPihjbGllbnRDYWxsQmFja0luZm8pOworICAgIFNvY2tldFN0cmVhbUhhbmRsZUltcGwqIGhh
bmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZUltcGwqPihjbGllbnRDYWxsQmFj
a0luZm8pOwogICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dy
aXRlU3RyZWFtLmdldCgpKTsKICAgICAvLyBUaGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBw
cmFjdGljZSwgeWV0IGl0IHNlZW1zIGxpa2UgaXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRo
IHJlYWQgc3RyZWFtIGNhbGxiYWNrLgogICAgIGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQpA
QCAtNDgyLDkgKzQ4NSw5IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNh
bGwKICNlbmRpZgogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZFN0cmVhbUNhbGxi
YWNrKENGU3RyZWFtRXZlbnRUeXBlIHR5cGUpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OnJlYWRTdHJlYW1DYWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSB0eXBlKQogewotICAgIHN3aXRj
aCh0eXBlKSB7CisgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE5v
bmU6CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIGtDRlN0cmVhbUV2ZW50T3BlbkNvbXBsZXRl
ZDoKQEAgLTU1NCw5ICs1NTcsOSBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZFN0cmVh
bUNhbGxiCiAgICAgfQogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVTdHJlYW1D
YWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSB0eXBlKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlIHR5cGUpCiB7Ci0gICAg
c3dpdGNoKHR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIGtDRlN0cmVhbUV2
ZW50Tm9uZToKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRPcGVuQ29t
cGxldGVkOgpAQCAtNjEwLDcgKzYxMyw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0
ZVN0cmVhbUNhbGwKICAgICB9CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRF
cnJvclRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnJlcG9ydEVycm9yVG9DbGllbnQoQ0ZFcnJvclJlZiBlcnJvcikKIHsKICAgICBDRkluZGV4
IGVycm9yQ29kZSA9IENGRXJyb3JHZXRDb2RlKGVycm9yKTsKICAgICBTdHJpbmcgZGVzY3JpcHRp
b247CkBAIC02NDIsMTQgKzY0NSwxNCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVwb3J0
RXJyb3JUb0NsCiAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0
U3RyZWFtRXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX3VybC5zdHJpbmcoKSwg
ZGVzY3JpcHRpb24pKTsKIH0KIAotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFu
ZGxlKCkKK1NvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsKCkK
IHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkdG9yIiwgdGhpcyk7
CiAKICAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7CiB9CiAKLWludCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50
IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoKQogewogICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3Jp
dGVTdHJlYW0uZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTY1Nyw3ICs2NjAsNyBAQCBp
bnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uCiAgICAgcmV0dXJuIENGV3Jp
dGVTdHJlYW1Xcml0ZShtX3dyaXRlU3RyZWFtLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0
IFVJbnQ4Kj4oZGF0YSksIGxlbmd0aCk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpw
bGF0Zm9ybUNsb3NlKCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxhdGZvcm1DbG9z
ZSgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1D
bG9zZSIsIHRoaXMpOwogCkBAIC02ODgsNyArNjkxLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OnBsYXRmb3JtQ2xvc2UoKQogICAgIG1fY2xpZW50LmRpZENsb3NlU29ja2V0U3RyZWFtKCp0
aGlzKTsKIH0KIAotdW5zaWduZWQgc2hvcnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwb3J0KCkgY29u
c3QKK3Vuc2lnbmVkIHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBvcnQoKSBjb25zdAog
ewogICAgIGlmICh1bnNpZ25lZCBzaG9ydCB1cmxQb3J0ID0gbV91cmwucG9ydCgpKQogICAgICAg
ICByZXR1cm4gdXJsUG9ydDsKQEAgLTY5Nyw0ICs3MDAsNCBAQCB1bnNpZ25lZCBzaG9ydCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OnBvcnQoCiAgICAgcmV0dXJuIDgwOwogfQogCi19ICAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUu
aAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCShub25leGlzdGVudCkKQEAgLTEsMTAxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgotCi0jaWYg
UExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUg
IlNlc3Npb25JRC5oIgotI2luY2x1ZGUgPGN1cmwvY3VybC5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OwotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFuZGxlPiwgcHVibGlj
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U29ja2V0
U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCYgY2xpZW50LCBTZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3Ry
ZWFtSGFuZGxlKHVybCwgY2xpZW50KSk7IH0KLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhh
bmRsZSgpOwotCi1wcml2YXRlOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKLQotICAgIGludCBwbGF0Zm9ybVNlbmQoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUNsb3Nl
KCkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIHJlYWREYXRhKENVUkwqKTsKLSAgICBib29sIHNlbmRE
YXRhKENVUkwqKTsKLSAgICBib29sIHdhaXRGb3JBdmFpbGFibGVEYXRhKENVUkwqLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzIHNlbGVjdFRpbWVvdXQpOwotCi0gICAgdm9pZCBzdGFydFRocmVh
ZCgpOwotICAgIHZvaWQgc3RvcFRocmVhZCgpOwotCi0gICAgdm9pZCBkaWRSZWNlaXZlRGF0YSgp
OwotICAgIHZvaWQgZGlkT3BlblNvY2tldCgpOwotCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxjaGFyW10+IGNyZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7Ci0KLSAg
ICBzdHJ1Y3QgU29ja2V0RGF0YSB7Ci0gICAgICAgIFNvY2tldERhdGEoc3RkOjp1bmlxdWVfcHRy
PGNoYXJbXT4mJiBzb3VyY2UsIGludCBsZW5ndGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRh
dGEgPSBXVEZNb3ZlKHNvdXJjZSk7Ci0gICAgICAgICAgICBzaXplID0gbGVuZ3RoOwotICAgICAg
ICB9Ci0KLSAgICAgICAgU29ja2V0RGF0YShTb2NrZXREYXRhJiYgb3RoZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGRhdGEgPSBXVEZNb3ZlKG90aGVyLmRhdGEpOwotICAgICAgICAgICAgc2l6
ZSA9IG90aGVyLnNpemU7Ci0gICAgICAgICAgICBvdGhlci5zaXplID0gMDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IGRhdGE7Ci0gICAgICAgIGludCBzaXpl
IHsgMCB9OwotICAgIH07Ci0KLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhyZWFkIHsg
MCB9OwotICAgIHN0ZDo6YXRvbWljPGJvb2w+IG1fc3RvcFRocmVhZCB7IGZhbHNlIH07Ci0gICAg
TG9jayBtX211dGV4U2VuZDsKLSAgICBMb2NrIG1fbXV0ZXhSZWNlaXZlOwotICAgIERlcXVlPFNv
Y2tldERhdGE+IG1fc2VuZERhdGE7Ci0gICAgRGVxdWU8U29ja2V0RGF0YT4gbV9yZWNlaXZlRGF0
YTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
Q3VybC5jcHAJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDI4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0uICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJl
YW1IYW5kbGUuaCIKLQotI2lmIFVTRShDVVJMKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2lu
Y2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2luY2x1ZGUgIlVSTC5oIgotI2lu
Y2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJM
JiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQotICAgIDogU29ja2V0U3Ry
ZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVudCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0
cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXJ0VGhyZWFkKCk7Ci19Ci0KLVNvY2tldFN0cmVh
bUhhbmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSgpCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2Nr
ZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhpcyk7Ci0gICAgQVNTRVJUKCFtX3dvcmtlclRo
cmVhZCk7Ci19Ci0KLWludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFt
SGFuZGxlICVwIHBsYXRmb3JtU2VuZCIsIHRoaXMpOwotCi0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLQotICAgIHN0YXJ0VGhyZWFkKCk7Ci0KLSAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5
KGRhdGEsIGxlbmd0aCk7Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4
U2VuZCk7Ci0gICAgbV9zZW5kRGF0YS5hcHBlbmQoU29ja2V0RGF0YSB7IFdURk1vdmUoY29weSks
IGxlbmd0aCB9KTsKLQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlOjpwbGF0Zm9ybUNsb3NlKCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVh
bUhhbmRsZSAlcCBwbGF0Zm9ybUNsb3NlIiwgdGhpcyk7Ci0KLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotCi0gICAgc3RvcFRocmVhZCgpOwotCi0gICAgbV9jbGllbnQuZGlkQ2xvc2VTb2Nr
ZXRTdHJlYW0oKnRoaXMpOwotfQotCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZERhdGEo
Q1VSTCogY3VybEhhbmRsZSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAg
IGNvbnN0IGludCBidWZmZXJTaXplID0gMTAyNDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltd
PiBkYXRhKG5ldyBjaGFyW2J1ZmZlclNpemVdKTsKLSAgICBzaXplX3QgYnl0ZXNSZWFkID0gMDsK
LQotICAgIENVUkxjb2RlIHJldCA9IGN1cmxfZWFzeV9yZWN2KGN1cmxIYW5kbGUsIGRhdGEuZ2V0
KCksIGJ1ZmZlclNpemUsICZieXRlc1JlYWQpOwotCi0gICAgaWYgKHJldCA9PSBDVVJMRV9PSyAm
JiBieXRlc1JlYWQgPj0gMCkgewotICAgICAgICBtX211dGV4UmVjZWl2ZS5sb2NrKCk7Ci0gICAg
ICAgIG1fcmVjZWl2ZURhdGEuYXBwZW5kKFNvY2tldERhdGEgeyBXVEZNb3ZlKGRhdGEpLCBzdGF0
aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCkgfSk7Ci0gICAgICAgIG1fbXV0ZXhSZWNlaXZlLnVubG9j
aygpOwotCi0gICAgICAgIHJlZigpOwotCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNd
IHsKLSAgICAgICAgICAgIGRpZFJlY2VpdmVEYXRhKCk7Ci0gICAgICAgICAgICBkZXJlZigpOwot
ICAgICAgICB9KTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAocmV0
ID09IENVUkxFX0FHQUlOKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENVUkwqIGN1cmxIYW5k
bGUpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICB3aGlsZSAodHJ1ZSkg
ewotCi0gICAgICAgIG1fbXV0ZXhTZW5kLmxvY2soKTsKLSAgICAgICAgaWYgKCFtX3NlbmREYXRh
LnNpemUoKSkgewotICAgICAgICAgICAgbV9tdXRleFNlbmQudW5sb2NrKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBhdXRvIHNlbmREYXRhID0gbV9zZW5kRGF0YS50
YWtlRmlyc3QoKTsKLSAgICAgICAgbV9tdXRleFNlbmQudW5sb2NrKCk7Ci0KLSAgICAgICAgaW50
IHRvdGFsQnl0ZXNTZW50ID0gMDsKLSAgICAgICAgd2hpbGUgKHRvdGFsQnl0ZXNTZW50IDwgc2Vu
ZERhdGEuc2l6ZSkgewotICAgICAgICAgICAgc2l6ZV90IGJ5dGVzU2VudCA9IDA7Ci0gICAgICAg
ICAgICBDVVJMY29kZSByZXQgPSBjdXJsX2Vhc3lfc2VuZChjdXJsSGFuZGxlLCBzZW5kRGF0YS5k
YXRhLmdldCgpICsgdG90YWxCeXRlc1NlbnQsIHNlbmREYXRhLnNpemUgLSB0b3RhbEJ5dGVzU2Vu
dCwgJmJ5dGVzU2VudCk7Ci0gICAgICAgICAgICBpZiAocmV0ID09IENVUkxFX09LKQotICAgICAg
ICAgICAgICAgIHRvdGFsQnl0ZXNTZW50ICs9IGJ5dGVzU2VudDsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEluc2VydCBy
ZW1haW5pbmcgZGF0YSBpbnRvIHNlbmQgcXVldWUuCi0KLSAgICAgICAgaWYgKHRvdGFsQnl0ZXNT
ZW50IDwgc2VuZERhdGEuc2l6ZSkgewotICAgICAgICAgICAgY29uc3QgaW50IHJlc3RMZW5ndGgg
PSBzZW5kRGF0YS5zaXplIC0gdG90YWxCeXRlc1NlbnQ7Ci0gICAgICAgICAgICBhdXRvIGNvcHkg
PSBjcmVhdGVDb3B5KHNlbmREYXRhLmRhdGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwgcmVzdExl
bmd0aCk7Ci0KLSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXhT
ZW5kKTsKLSAgICAgICAgICAgIG1fc2VuZERhdGEucHJlcGVuZChTb2NrZXREYXRhIHsgV1RGTW92
ZShjb3B5KSwgcmVzdExlbmd0aCB9KTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgU29ja2V0U3RyZWFt
SGFuZGxlOjp3YWl0Rm9yQXZhaWxhYmxlRGF0YShDVVJMKiBjdXJsSGFuZGxlLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzIHNlbGVjdFRpbWVvdXQpCi17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHVzZWMgPSBzdGQ6OmNocm9u
bzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzZWxlY3RUaW1lb3V0
KTsKLQotICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7Ci0gICAgaWYgKHVzZWMgPD0gc3RkOjpj
aHJvbm86Om1pY3Jvc2Vjb25kcygwKSkgewotICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7Ci0g
ICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGltZW91
dC50dl9zZWMgPSB1c2VjLmNvdW50KCkgLyAxMDAwMDAwOwotICAgICAgICB0aW1lb3V0LnR2X3Vz
ZWMgPSB1c2VjLmNvdW50KCkgJSAxMDAwMDAwOwotICAgIH0KLQotICAgIGxvbmcgc29ja2V0Owot
ICAgIGlmIChjdXJsX2Vhc3lfZ2V0aW5mbyhjdXJsSGFuZGxlLCBDVVJMSU5GT19MQVNUU09DS0VU
LCAmc29ja2V0KSAhPSBDVVJMRV9PSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmRf
c2V0IGZkcmVhZDsKLSAgICBGRF9aRVJPKCZmZHJlYWQpOwotICAgIEZEX1NFVChzb2NrZXQsICZm
ZHJlYWQpOwotICAgIGludCByYyA9IDo6c2VsZWN0KDAsICZmZHJlYWQsIG51bGxwdHIsIG51bGxw
dHIsICZ0aW1lb3V0KTsKLSAgICByZXR1cm4gcmMgPT0gMTsKLX0KLQotdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnN0YXJ0VGhyZWFkKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
Ci0gICAgaWYgKG1fd29ya2VyVGhyZWFkKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZWYoKTsg
Ly8gc3RvcFRocmVhZCgpIHdpbGwgY2FsbCBkZXJlZigpLgotCi0gICAgbV93b3JrZXJUaHJlYWQg
PSBjcmVhdGVUaHJlYWQoIldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10gewotCi0gICAgICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAgIENVUkwqIGN1cmxIYW5kbGUgPSBjdXJs
X2Vhc3lfaW5pdCgpOwotCi0gICAgICAgIGlmICghY3VybEhhbmRsZSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxIYW5kbGUsIENVUkxPUFRfVVJM
LCBtX3VybC5ob3N0KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQo
Y3VybEhhbmRsZSwgQ1VSTE9QVF9QT1JULCBtX3VybC5wb3J0KCkpOwotICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGN1cmxIYW5kbGUsIENVUkxPUFRfQ09OTkVDVF9PTkxZLCAxTCk7Ci0KLSAgICAg
ICAgLy8gQ29ubmVjdCB0byBob3N0Ci0gICAgICAgIGlmIChjdXJsX2Vhc3lfcGVyZm9ybShjdXJs
SGFuZGxlKSAhPSBDVVJMRV9PSykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICByZWYo
KTsKLQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzXSB7Ci0gICAgICAgICAgICAvLyBD
aGVjayByZWZlcmVuY2UgY291bnQgdG8gZml4IGEgY3Jhc2guCi0gICAgICAgICAgICAvLyBXaGVu
IHRoZSBjYWxsIGlzIGludm9rZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIGFsbCBvdGhlciBy
ZWZlcmVuY2VzIGFyZSByZWxlYXNlZCwgdGhlIFNvY2tldFN0cmVhbUNsaWVudAotICAgICAgICAg
ICAgLy8gaXMgYWxyZWFkeSBkZWxldGVkLiBBY2Nlc3NpbmcgdGhlIFNvY2tldFN0cmVhbUNsaWVu
dCBpbiBkaWRPcGVuU29ja2V0KCkgd2lsbCB0aGVuIGNhdXNlIGEgY3Jhc2guCi0gICAgICAgICAg
ICBpZiAocmVmQ291bnQoKSA+IDEpCi0gICAgICAgICAgICAgICAgZGlkT3BlblNvY2tldCgpOwot
ICAgICAgICAgICAgZGVyZWYoKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgd2hpbGUgKCFtX3N0
b3BUaHJlYWQpIHsKLSAgICAgICAgICAgIC8vIFNlbmQgcXVldWVkIGRhdGEKLSAgICAgICAgICAg
IHNlbmREYXRhKGN1cmxIYW5kbGUpOwotCi0gICAgICAgICAgICAvLyBXYWl0IHVudGlsIHNvY2tl
dCBoYXMgYXZhaWxhYmxlIGRhdGEKLSAgICAgICAgICAgIGlmICh3YWl0Rm9yQXZhaWxhYmxlRGF0
YShjdXJsSGFuZGxlLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDIwKSkpCi0gICAgICAgICAg
ICAgICAgcmVhZERhdGEoY3VybEhhbmRsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJsX2Vh
c3lfY2xlYW51cChjdXJsSGFuZGxlKTsKLSAgICB9KTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnN0b3BUaHJlYWQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICBpZiAoIW1fd29ya2VyVGhyZWFkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0b3BUaHJl
YWQgPSB0cnVlOwotICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsK
LSAgICBtX3dvcmtlclRocmVhZCA9IDA7Ci0gICAgZGVyZWYoKTsKLX0KLQotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OmRpZFJlY2VpdmVEYXRhKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotCi0gICAgbV9tdXRleFJlY2VpdmUubG9jaygpOwotCi0gICAgYXV0byByZWNlaXZlRGF0
YSA9IFdURk1vdmUobV9yZWNlaXZlRGF0YSk7Ci0KLSAgICBtX211dGV4UmVjZWl2ZS51bmxvY2so
KTsKLQotICAgIGZvciAoYXV0byYgc29ja2V0RGF0YSA6IHJlY2VpdmVEYXRhKSB7Ci0gICAgICAg
IGlmIChzb2NrZXREYXRhLnNpemUgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUoKSA9PSBP
cGVuKQotICAgICAgICAgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRh
KCp0aGlzLCBzb2NrZXREYXRhLmRhdGEuZ2V0KCksIHNvY2tldERhdGEuc2l6ZSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgcGxhdGZvcm1DbG9zZSgpOwotICAgIH0KLX0KLQotdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQoKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0KLSAgICBtX3N0YXRlID0gT3BlbjsKLQotICAgIG1fY2xpZW50LmRpZE9wZW5T
b2NrZXRTdHJlYW0oKnRoaXMpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBTb2NrZXRT
dHJlYW1IYW5kbGU6OmNyZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBjb3B5KG5ldyBjaGFyW2xlbmd0aF0pOwotICAg
IG1lbWNweShjb3B5LmdldCgpLCBkYXRhLCBsZW5ndGgpOwotCi0gICAgcmV0dXJuIFdURk1vdmUo
Y29weSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3Ry
ZWFtSGFuZGxlQ3VybC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0x
ICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9T
b2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oOjIwNDQ2NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5k
bGVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorCisjaWYgUExBVEZPUk0oV0lOKQor
I2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIlNlc3Npb25JRC5oIgor
I2luY2x1ZGUgPGN1cmwvY3VybC5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50OworCitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFuZGxlPiwgcHVibGljIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBj
cmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBT
ZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwg
Y2xpZW50KSk7IH0KKworICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOworCitwcml2
YXRlOgorICAgIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQmKTsKKworICAgIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUNsb3NlKCkgb3ZlcnJpZGU7CisK
KyAgICBib29sIHJlYWREYXRhKENVUkwqKTsKKyAgICBib29sIHNlbmREYXRhKENVUkwqKTsKKyAg
ICBib29sIHdhaXRGb3JBdmFpbGFibGVEYXRhKENVUkwqLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzIHNlbGVjdFRpbWVvdXQpOworCisgICAgdm9pZCBzdGFydFRocmVhZCgpOworICAgIHZvaWQg
c3RvcFRocmVhZCgpOworCisgICAgdm9pZCBkaWRSZWNlaXZlRGF0YSgpOworICAgIHZvaWQgZGlk
T3BlblNvY2tldCgpOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IGNyZWF0
ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisKKyAgICBzdHJ1Y3QgU29ja2V0
RGF0YSB7CisgICAgICAgIFNvY2tldERhdGEoc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4mJiBzb3Vy
Y2UsIGludCBsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRhdGEgPSBXVEZNb3ZlKHNv
dXJjZSk7CisgICAgICAgICAgICBzaXplID0gbGVuZ3RoOworICAgICAgICB9CisKKyAgICAgICAg
U29ja2V0RGF0YShTb2NrZXREYXRhJiYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRh
dGEgPSBXVEZNb3ZlKG90aGVyLmRhdGEpOworICAgICAgICAgICAgc2l6ZSA9IG90aGVyLnNpemU7
CisgICAgICAgICAgICBvdGhlci5zaXplID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxjaGFyW10+IGRhdGE7CisgICAgICAgIGludCBzaXplIHsgMCB9OworICAgIH07
CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fd29ya2VyVGhyZWFkIHsgMCB9OworICAgIHN0ZDo6
YXRvbWljPGJvb2w+IG1fc3RvcFRocmVhZCB7IGZhbHNlIH07CisgICAgTG9jayBtX211dGV4U2Vu
ZDsKKyAgICBMb2NrIG1fbXV0ZXhSZWNlaXZlOworICAgIERlcXVlPFNvY2tldERhdGE+IG1fc2Vu
ZERhdGE7CisgICAgRGVxdWU8U29ja2V0RGF0YT4gbV9yZWNlaXZlRGF0YTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKKyNpbmNs
dWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIKIAogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRl
IDx3aW5zb2NrMi5oPgpAQCAtNDgsMTQgKzQ4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OwogCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5k
bGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFuZGxlPiwgcHVi
bGljIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgeworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlSW1w
bCA6IHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29j
a2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50KSk7IH0KKyAgICBzdGF0aWMgUmVmPFNvY2tldFN0
cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQmIGNsaWVudCwgU2Vzc2lvbklEKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVh
bUhhbmRsZUltcGwodXJsLCBjbGllbnQpKTsgfQogCi0gICAgdmlydHVhbCB+U29ja2V0U3RyZWFt
SGFuZGxlKCk7CisgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCgpOwogCiBwcml2
YXRlOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQmKTsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKGNvbnN0IFVSTCYsIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCYpOwogCiAgICAgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKICAgICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBv
dmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2Nr
ZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAkocmV2
aXNpb24gMjA0NDY4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHA6MjA0NDY4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVu
dCBGdWxnaGFtLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisKKyNpZiBVU0UoQ1VSTCkKKworI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKKyNpbmNsdWRl
ICJVUkwuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1NvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFu
ZGxlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKKyAg
ICA6IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UodXJsLCBjbGllbnQpCit7CisgICAgTE9HKE5ldHdv
cmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2NsaWVu
dCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGFydFRocmVhZCgpOworfQor
CitTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQoreworICAgIExPRyhO
ZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIGRlbGV0ZSIsIHRoaXMpOworICAgIEFTU0VS
VCghbV93b3JrZXJUaHJlYWQpOworfQorCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9y
bVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBMT0coTmV0d29yaywg
IlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybVNlbmQiLCB0aGlzKTsKKworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisKKyAgICBzdGFydFRocmVhZCgpOworCisgICAgYXV0byBjb3B5
ID0gY3JlYXRlQ29weShkYXRhLCBsZW5ndGgpOworCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9tdXRleFNlbmQpOworICAgIG1fc2VuZERhdGEuYXBwZW5kKFNvY2tldERhdGEgeyBX
VEZNb3ZlKGNvcHkpLCBsZW5ndGggfSk7CisKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCit2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCit7CisgICAgTE9HKE5ldHdvcmss
ICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOworCisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHN0b3BUaHJlYWQoKTsKKworICAgIG1fY2xpZW50
LmRpZENsb3NlU29ja2V0U3RyZWFtKCp0aGlzKTsKK30KKworYm9vbCBTb2NrZXRTdHJlYW1IYW5k
bGU6OnJlYWREYXRhKENVUkwqIGN1cmxIYW5kbGUpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisKKyAgICBjb25zdCBpbnQgYnVmZmVyU2l6ZSA9IDEwMjQ7CisgICAgc3RkOjp1bmlx
dWVfcHRyPGNoYXJbXT4gZGF0YShuZXcgY2hhcltidWZmZXJTaXplXSk7CisgICAgc2l6ZV90IGJ5
dGVzUmVhZCA9IDA7CisKKyAgICBDVVJMY29kZSByZXQgPSBjdXJsX2Vhc3lfcmVjdihjdXJsSGFu
ZGxlLCBkYXRhLmdldCgpLCBidWZmZXJTaXplLCAmYnl0ZXNSZWFkKTsKKworICAgIGlmIChyZXQg
PT0gQ1VSTEVfT0sgJiYgYnl0ZXNSZWFkID49IDApIHsKKyAgICAgICAgbV9tdXRleFJlY2VpdmUu
bG9jaygpOworICAgICAgICBtX3JlY2VpdmVEYXRhLmFwcGVuZChTb2NrZXREYXRhIHsgV1RGTW92
ZShkYXRhKSwgc3RhdGljX2Nhc3Q8aW50PihieXRlc1JlYWQpIH0pOworICAgICAgICBtX211dGV4
UmVjZWl2ZS51bmxvY2soKTsKKworICAgICAgICByZWYoKTsKKworICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFt0aGlzXSB7CisgICAgICAgICAgICBkaWRSZWNlaXZlRGF0YSgpOworICAgICAgICAg
ICAgZGVyZWYoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgaWYgKHJldCA9PSBDVVJMRV9BR0FJTikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kRGF0YShD
VVJMKiBjdXJsSGFuZGxlKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworCisgICAg
d2hpbGUgKHRydWUpIHsKKworICAgICAgICBtX211dGV4U2VuZC5sb2NrKCk7CisgICAgICAgIGlm
ICghbV9zZW5kRGF0YS5zaXplKCkpIHsKKyAgICAgICAgICAgIG1fbXV0ZXhTZW5kLnVubG9jaygp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYXV0byBzZW5kRGF0YSA9
IG1fc2VuZERhdGEudGFrZUZpcnN0KCk7CisgICAgICAgIG1fbXV0ZXhTZW5kLnVubG9jaygpOwor
CisgICAgICAgIGludCB0b3RhbEJ5dGVzU2VudCA9IDA7CisgICAgICAgIHdoaWxlICh0b3RhbEJ5
dGVzU2VudCA8IHNlbmREYXRhLnNpemUpIHsKKyAgICAgICAgICAgIHNpemVfdCBieXRlc1NlbnQg
PSAwOworICAgICAgICAgICAgQ1VSTGNvZGUgcmV0ID0gY3VybF9lYXN5X3NlbmQoY3VybEhhbmRs
ZSwgc2VuZERhdGEuZGF0YS5nZXQoKSArIHRvdGFsQnl0ZXNTZW50LCBzZW5kRGF0YS5zaXplIC0g
dG90YWxCeXRlc1NlbnQsICZieXRlc1NlbnQpOworICAgICAgICAgICAgaWYgKHJldCA9PSBDVVJM
RV9PSykKKyAgICAgICAgICAgICAgICB0b3RhbEJ5dGVzU2VudCArPSBieXRlc1NlbnQ7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJbnNlcnQgcmVtYWluaW5nIGRhdGEgaW50byBzZW5kIHF1ZXVlLgorCisgICAgICAgIGlm
ICh0b3RhbEJ5dGVzU2VudCA8IHNlbmREYXRhLnNpemUpIHsKKyAgICAgICAgICAgIGNvbnN0IGlu
dCByZXN0TGVuZ3RoID0gc2VuZERhdGEuc2l6ZSAtIHRvdGFsQnl0ZXNTZW50OworICAgICAgICAg
ICAgYXV0byBjb3B5ID0gY3JlYXRlQ29weShzZW5kRGF0YS5kYXRhLmdldCgpICsgdG90YWxCeXRl
c1NlbnQsIHJlc3RMZW5ndGgpOworCisgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX211dGV4U2VuZCk7CisgICAgICAgICAgICBtX3NlbmREYXRhLnByZXBlbmQoU29ja2V0
RGF0YSB7IFdURk1vdmUoY29weSksIHJlc3RMZW5ndGggfSk7CisKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsZURhdGEoQ1VSTCogY3VybEhhbmRs
ZSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzZWxlY3RUaW1lb3V0KQoreworICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworCisgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyB1c2Vj
ID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcz4o
c2VsZWN0VGltZW91dCk7CisKKyAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgIGlmICh1
c2VjIDw9IHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMoMCkpIHsKKyAgICAgICAgdGltZW91dC50
dl9zZWMgPSAwOworICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSAwOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRpbWVvdXQudHZfc2VjID0gdXNlYy5jb3VudCgpIC8gMTAwMDAwMDsKKyAgICAgICAg
dGltZW91dC50dl91c2VjID0gdXNlYy5jb3VudCgpICUgMTAwMDAwMDsKKyAgICB9CisKKyAgICBs
b25nIHNvY2tldDsKKyAgICBpZiAoY3VybF9lYXN5X2dldGluZm8oY3VybEhhbmRsZSwgQ1VSTElO
Rk9fTEFTVFNPQ0tFVCwgJnNvY2tldCkgIT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGZkX3NldCBmZHJlYWQ7CisgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICBGRF9T
RVQoc29ja2V0LCAmZmRyZWFkKTsKKyAgICBpbnQgcmMgPSA6OnNlbGVjdCgwLCAmZmRyZWFkLCBu
dWxscHRyLCBudWxscHRyLCAmdGltZW91dCk7CisgICAgcmV0dXJuIHJjID09IDE7Cit9CisKK3Zv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRocmVhZCgpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIGlmIChtX3dvcmtlclRocmVhZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcmVmKCk7IC8vIHN0b3BUaHJlYWQoKSB3aWxsIGNhbGwgZGVyZWYoKS4KKworICAgIG1f
d29ya2VyVGhyZWFkID0gY3JlYXRlVGhyZWFkKCJXZWJTb2NrZXQgdGhyZWFkIiwgW3RoaXNdIHsK
KworICAgICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgICAgICBDVVJMKiBjdXJs
SGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKKworICAgICAgICBpZiAoIWN1cmxIYW5kbGUpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsSGFuZGxl
LCBDVVJMT1BUX1VSTCwgbV91cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBjdXJs
X2Vhc3lfc2V0b3B0KGN1cmxIYW5kbGUsIENVUkxPUFRfUE9SVCwgbV91cmwucG9ydCgpKTsKKyAg
ICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsSGFuZGxlLCBDVVJMT1BUX0NPTk5FQ1RfT05MWSwg
MUwpOworCisgICAgICAgIC8vIENvbm5lY3QgdG8gaG9zdAorICAgICAgICBpZiAoY3VybF9lYXN5
X3BlcmZvcm0oY3VybEhhbmRsZSkgIT0gQ1VSTEVfT0spCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgcmVmKCk7CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10geworICAg
ICAgICAgICAgLy8gQ2hlY2sgcmVmZXJlbmNlIGNvdW50IHRvIGZpeCBhIGNyYXNoLgorICAgICAg
ICAgICAgLy8gV2hlbiB0aGUgY2FsbCBpcyBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZCBhZnRl
ciBhbGwgb3RoZXIgcmVmZXJlbmNlcyBhcmUgcmVsZWFzZWQsIHRoZSBTb2NrZXRTdHJlYW1DbGll
bnQKKyAgICAgICAgICAgIC8vIGlzIGFscmVhZHkgZGVsZXRlZC4gQWNjZXNzaW5nIHRoZSBTb2Nr
ZXRTdHJlYW1DbGllbnQgaW4gZGlkT3BlblNvY2tldCgpIHdpbGwgdGhlbiBjYXVzZSBhIGNyYXNo
LgorICAgICAgICAgICAgaWYgKHJlZkNvdW50KCkgPiAxKQorICAgICAgICAgICAgICAgIGRpZE9w
ZW5Tb2NrZXQoKTsKKyAgICAgICAgICAgIGRlcmVmKCk7CisgICAgICAgIH0pOworCisgICAgICAg
IHdoaWxlICghbV9zdG9wVGhyZWFkKSB7CisgICAgICAgICAgICAvLyBTZW5kIHF1ZXVlZCBkYXRh
CisgICAgICAgICAgICBzZW5kRGF0YShjdXJsSGFuZGxlKTsKKworICAgICAgICAgICAgLy8gV2Fp
dCB1bnRpbCBzb2NrZXQgaGFzIGF2YWlsYWJsZSBkYXRhCisgICAgICAgICAgICBpZiAod2FpdEZv
ckF2YWlsYWJsZURhdGEoY3VybEhhbmRsZSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcygyMCkp
KQorICAgICAgICAgICAgICAgIHJlYWREYXRhKGN1cmxIYW5kbGUpOworICAgICAgICB9CisKKyAg
ICAgICAgY3VybF9lYXN5X2NsZWFudXAoY3VybEhhbmRsZSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpzdG9wVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworCisgICAgaWYgKCFtX3dvcmtlclRocmVhZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zdG9wVGhyZWFkID0gdHJ1ZTsKKyAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX3dv
cmtlclRocmVhZCk7CisgICAgbV93b3JrZXJUaHJlYWQgPSAwOworICAgIGRlcmVmKCk7Cit9CisK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRSZWNlaXZlRGF0YSgpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIG1fbXV0ZXhSZWNlaXZlLmxvY2soKTsKKworICAgIGF1
dG8gcmVjZWl2ZURhdGEgPSBXVEZNb3ZlKG1fcmVjZWl2ZURhdGEpOworCisgICAgbV9tdXRleFJl
Y2VpdmUudW5sb2NrKCk7CisKKyAgICBmb3IgKGF1dG8mIHNvY2tldERhdGEgOiByZWNlaXZlRGF0
YSkgeworICAgICAgICBpZiAoc29ja2V0RGF0YS5zaXplID4gMCkgeworICAgICAgICAgICAgaWYg
KHN0YXRlKCkgPT0gT3BlbikKKyAgICAgICAgICAgICAgICBtX2NsaWVudC5kaWRSZWNlaXZlU29j
a2V0U3RyZWFtRGF0YSgqdGhpcywgc29ja2V0RGF0YS5kYXRhLmdldCgpLCBzb2NrZXREYXRhLnNp
emUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICB9
Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRPcGVuU29ja2V0KCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9zdGF0ZSA9IE9wZW47CisKKyAgICBtX2Ns
aWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPGNo
YXJbXT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVDb3B5KGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY29weShuZXcgY2hhclts
ZW5ndGhdKTsKKyAgICBtZW1jcHkoY29weS5nZXQoKSwgZGF0YSwgbGVuZ3RoKTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGNvcHkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUhhbmRsZUltcGxDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCShyZXZpc2lvbiAy
MDQ0NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbEN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5o
IgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCIKIAogI2lmIFVTRShDVVJMKQog
CkBAIC00NCwyMSArNDQsMjEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Tb2NrZXRTdHJl
YW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50JiBjbGllbnQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwg
Y2xpZW50KQorU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbChj
b25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgOiBT
b2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2Nr
ZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2NsaWVudCk7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBzdGFydFRocmVhZCgpOwogfQogCi1Tb2NrZXRT
dHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQorU29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6flNvY2tldFN0cmVhbUhhbmRsZUltcGwoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0
U3RyZWFtSGFuZGxlICVwIGRlbGV0ZSIsIHRoaXMpOwogICAgIEFTU0VSVCghbV93b3JrZXJUaHJl
YWQpOwogfQogCi1pbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkKK2ludCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9y
bVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKICAgICBMT0coTmV0d29yaywg
IlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybVNlbmQiLCB0aGlzKTsKIApAQCAtNzQsNyAr
NzQsNyBAQCBpbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uCiAgICAgcmV0
dXJuIGxlbmd0aDsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2Uo
KQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3NlKCkKIHsKICAgICBM
T0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybUNsb3NlIiwgdGhpcyk7
CiAKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xv
c2UoKQogICAgIG1fY2xpZW50LmRpZENsb3NlU29ja2V0U3RyZWFtKCp0aGlzKTsKIH0KIAotYm9v
bCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWREYXRhKENVUkwqIGN1cmxIYW5kbGUpCitib29sIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OnJlYWREYXRhKENVUkwqIGN1cmxIYW5kbGUpCiB7CiAgICAg
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTExNiw3ICsxMTYsNyBAQCBib29sIFNvY2tl
dFN0cmVhbUhhbmRsZTo6cmVhZERhdGEoQ1VSTCogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZERhdGEoQ1VSTCogY3VybEhhbmRsZSkKK2Jvb2wg
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c2VuZERhdGEoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApAQCAtMTU2LDcgKzE1Niw3IEBAIGJvb2wgU29j
a2V0U3RyZWFtSGFuZGxlOjpzZW5kRGF0YShDVVJMKiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OndhaXRGb3JBdmFpbGFibGVEYXRhKENVUkwqIGN1cmxI
YW5kbGUsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91dCkKK2Jvb2wgU29j
a2V0U3RyZWFtSGFuZGxlSW1wbDo6d2FpdEZvckF2YWlsYWJsZURhdGEoQ1VSTCogY3VybEhhbmRs
ZSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzZWxlY3RUaW1lb3V0KQogewogICAgIEFTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwogCkBAIC0xODIsNyArMTgyLDcgQEAgYm9vbCBTb2NrZXRTdHJl
YW1IYW5kbGU6OndhaXRGb3JBdmFpbGFibAogICAgIHJldHVybiByYyA9PSAxOwogfQogCi12b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhcnRUaHJlYWQoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGVJbXBsOjpzdGFydFRocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApA
QCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRocmVhZCgp
CiAgICAgfSk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdG9wVGhyZWFkKCkKK3Zv
aWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6c3RvcFRocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIApAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpzdG9wVGhyZWFkKCkKICAgICBkZXJlZigpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6ZGlkUmVjZWl2ZURhdGEoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpkaWRS
ZWNlaXZlRGF0YSgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAtMjY0LDcg
KzI2NCw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRSZWNlaXZlRGF0YSgKICAgICB9
CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRPcGVuU29ja2V0KCkKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkT3BlblNvY2tldCgpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIApAQCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
OjpkaWRPcGVuU29ja2V0KCkKICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlz
KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVh
dGVDb3B5KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCitzdGQ6OnVuaXF1ZV9wdHI8Y2hh
cltdPiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGVDb3B5KGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGgpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY29weShuZXcgY2hh
cltsZW5ndGhdKTsKICAgICBtZW1jcHkoY29weS5nZXQoKSwgZGF0YSwgbGVuZ3RoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29j
a2V0U3RyZWFtSGFuZGxlLmgJKHJldmlzaW9uIDIwNDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25p
Y3MgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU29ja2V0
U3RyZWFtSGFuZGxlQmFzZS5oIgotCi0jaWYgVVNFKFNPVVApCi0KLSNpbmNsdWRlICJTZXNzaW9u
SUQuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dS
ZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1FcnJv
cjsKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudDsKLQotY2xhc3MgU29ja2V0U3RyZWFt
SGFuZGxlIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFuZGxlPiwgcHVi
bGljIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U29j
a2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiwgU2Vzc2lvbklEKTsKLSAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3Jl
YXRlKEdTb2NrZXRDb25uZWN0aW9uKiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7Ci0KLSAg
ICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGUoKTsKLQotcHJpdmF0ZToKLSAgICBTb2NrZXRT
dHJlYW1IYW5kbGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7Ci0KLSAg
ICBpbnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRl
OwotICAgIHZvaWQgcGxhdGZvcm1DbG9zZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdpbldh
aXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOwotICAgIHZvaWQgc3RvcFdhaXRpbmdGb3JTb2Nr
ZXRXcml0YWJpbGl0eSgpOwotCi0gICAgc3RhdGljIHZvaWQgY29ubmVjdGVkQ2FsbGJhY2soR1Nv
Y2tldENsaWVudCosIEdBc3luY1Jlc3VsdCosIFNvY2tldFN0cmVhbUhhbmRsZSopOwotICAgIHN0
YXRpYyB2b2lkIHJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSosIEdBc3luY1Jlc3VsdCos
IFNvY2tldFN0cmVhbUhhbmRsZSopOwotICAgIHN0YXRpYyBnYm9vbGVhbiB3cml0ZVJlYWR5Q2Fs
bGJhY2soR1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwgU29ja2V0U3RyZWFtSGFuZGxlKik7Ci0KLSAg
ICB2b2lkIGNvbm5lY3RlZChHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiYmKTsKLSAgICB2b2lk
IHJlYWRCeXRlcyhnc3NpemUpOwotICAgIHZvaWQgZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvciYm
KTsKLSAgICB2b2lkIHdyaXRlUmVhZHkoKTsKLQotICAgIEdSZWZQdHI8R1NvY2tldENvbm5lY3Rp
b24+IG1fc29ja2V0Q29ubmVjdGlvbjsKLSAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1
dFN0cmVhbTsKLSAgICBHUmVmUHRyPEdQb2xsYWJsZU91dHB1dFN0cmVhbT4gbV9vdXRwdXRTdHJl
YW07Ci0gICAgR1JlZlB0cjxHU291cmNlPiBtX3dyaXRlUmVhZHlTb3VyY2U7Ci0gICAgR1JlZlB0
cjxHQ2FuY2VsbGFibGU+IG1fY2FuY2VsbGFibGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJb
XT4gbV9yZWFkQnVmZmVyOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvU29ja2V0U3RyZWFtSGFuZGxlLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxl
CiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZS5oOjIw
NDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJl
YW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCisKKyNp
ZiBVU0UoU09VUCkKKworI2luY2x1ZGUgIlNlc3Npb25JRC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFNvY2tldFN0cmVhbUVycm9yOworY2xhc3MgU29ja2V0U3RyZWFtSGFu
ZGxlQ2xpZW50OworCitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgZmluYWwgOiBwdWJsaWMgUmVm
Q291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFz
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShj
b25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmLCBTZXNzaW9uSUQpOworICAgIHN0
YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qLCBT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKKworICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhh
bmRsZSgpOworCitwcml2YXRlOgorICAgIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKKworICAgIGludCBwbGF0Zm9ybVNlbmQoY29uc3Qg
Y2hhciogZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUNsb3Nl
KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5
KCk7CisgICAgdm9pZCBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7CisKKyAgICBz
dGF0aWMgdm9pZCBjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiwgR0FzeW5jUmVzdWx0
KiwgU29ja2V0U3RyZWFtSGFuZGxlKik7CisgICAgc3RhdGljIHZvaWQgcmVhZFJlYWR5Q2FsbGJh
Y2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3RyZWFtSGFuZGxlKik7Cisg
ICAgc3RhdGljIGdib29sZWFuIHdyaXRlUmVhZHlDYWxsYmFjayhHUG9sbGFibGVPdXRwdXRTdHJl
YW0qLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKworICAgIHZvaWQgY29ubmVjdGVkKEdSZWZQdHI8
R1NvY2tldENvbm5lY3Rpb24+JiYpOworICAgIHZvaWQgcmVhZEJ5dGVzKGdzc2l6ZSk7CisgICAg
dm9pZCBkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yJiYpOworICAgIHZvaWQgd3JpdGVSZWFkeSgp
OworCisgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOwor
ICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOworICAgIEdSZWZQdHI8R1Bv
bGxhYmxlT3V0cHV0U3RyZWFtPiBtX291dHB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdTb3VyY2U+
IG1fd3JpdGVSZWFkeVNvdXJjZTsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxs
YWJsZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBtX3JlYWRCdWZmZXI7Cit9OworCit9
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGwuaAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIKIAogI2lmIFVTRShTT1VQ
KQogCkBAIC00NSwxNSArNDUsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgU29ja2V0
U3RyZWFtRXJyb3I7CiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CiAKLWNsYXNzIFNv
Y2tldFN0cmVhbUhhbmRsZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhh
bmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK2NsYXNzIFNvY2tldFN0cmVh
bUhhbmRsZUltcGwgZmluYWwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYsIFNlc3Npb25JRCk7CiAgICAgc3RhdGljIFJlZjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiosIFNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudCYpOwogCi0gICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisgICAg
dmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCgpOwogCiBwcml2YXRlOgotICAgIFNvY2tl
dFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKKyAg
ICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCYpOwogCiAgICAgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKSBvdmVycmlkZTsKICAgICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKQEAgLTYx
LDkgKzYxLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRh
YmlsaXR5KCk7CiAgICAgdm9pZCBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7CiAK
LSAgICBzdGF0aWMgdm9pZCBjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiwgR0FzeW5j
UmVzdWx0KiwgU29ja2V0U3RyZWFtSGFuZGxlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVhZFJlYWR5
Q2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3RyZWFtSGFuZGxl
Kik7Ci0gICAgc3RhdGljIGdib29sZWFuIHdyaXRlUmVhZHlDYWxsYmFjayhHUG9sbGFibGVPdXRw
dXRTdHJlYW0qLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAgICBzdGF0aWMgdm9pZCBjb25uZWN0
ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbCopOworICAgIHN0YXRpYyB2b2lkIHJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVh
bSosIEdBc3luY1Jlc3VsdCosIFNvY2tldFN0cmVhbUhhbmRsZUltcGwqKTsKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gd3JpdGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGwqKTsKIAogICAgIHZvaWQgY29ubmVjdGVkKEdSZWZQdHI8R1NvY2tl
dENvbm5lY3Rpb24+JiYpOwogICAgIHZvaWQgcmVhZEJ5dGVzKGdzc2l6ZSk7CkBAIC03OCw2ICs3
OCw2IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gbV9yZWFkQnVmZmVy
OwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29j
a2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAJKHJl
dmlzaW9uIDIwNDQ2NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwOjIwNDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgorCisjaWYgVVNFKFNPVVAp
CisKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU29j
a2V0U3RyZWFtRXJyb3IuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIK
KyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCisjZGVmaW5lIFJFQURfQlVGRkVSX1NJWkUgMTAyNAorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhh
bmRsZTo6Y3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNs
aWVudCwgU2Vzc2lvbklEKQoreworICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHNvY2tldCA9
IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50KSk7CisKKyAgICB1
bnNpZ25lZCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/IHVybC5wb3J0KCkgOiAodXJsLnByb3RvY29s
SXMoIndzcyIpID8gNDQzIDogODApOworICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0
Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7CisgICAgaWYgKHVybC5w
cm90b2NvbElzKCJ3c3MiKSkKKyAgICAgICAgZ19zb2NrZXRfY2xpZW50X3NldF90bHMoc29ja2V0
Q2xpZW50LmdldCgpLCBUUlVFKTsKKyAgICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0
ZWRTb2NrZXRTdHJlYW1IYW5kbGUgPSBzb2NrZXQuY29weVJlZigpOworICAgIGdfc29ja2V0X2Ns
aWVudF9jb25uZWN0X3RvX2hvc3RfYXN5bmMoc29ja2V0Q2xpZW50LmdldCgpLCB1cmwuaG9zdCgp
LnV0ZjgoKS5kYXRhKCksIHBvcnQsIHNvY2tldC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihjb25uZWN0ZWRDYWxsYmFj
ayksICZwcm90ZWN0ZWRTb2NrZXRTdHJlYW1IYW5kbGUubGVha1JlZigpKTsKKyAgICByZXR1cm4g
c29ja2V0OworfQorCitSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBTb2NrZXRTdHJlYW1IYW5kbGU6
OmNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiogc29ja2V0Q29ubmVjdGlvbiwgU29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50JiBjbGllbnQpCit7CisgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gc29j
a2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUoVVJMKCksIGNsaWVudCkpOwor
CisgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IHNvY2tldENvbm5l
Y3Rpb247CisgICAgc29ja2V0LT5jb25uZWN0ZWQoV1RGTW92ZShjb25uZWN0aW9uKSk7CisgICAg
cmV0dXJuIHNvY2tldDsKK30KKworU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5k
bGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQorICAg
IDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVudCkKKyAgICAsIG1fY2FuY2VsbGFi
bGUoYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpKQoreworICAgIExPRyhOZXR3b3JrLCAi
U29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAiLCB0aGlzLCAmbV9jbGllbnQpOwor
fQorCitTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQoreworICAgIExP
RyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIGRlbGV0ZSIsIHRoaXMpOworfQorCit2
b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkKEdSZWZQdHI8R1NvY2tldENvbm5lY3Rp
b24+JiYgc29ja2V0Q29ubmVjdGlvbikKK3sKKyAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBXVEZN
b3ZlKHNvY2tldENvbm5lY3Rpb24pOworICAgIG1fb3V0cHV0U3RyZWFtID0gR19QT0xMQUJMRV9P
VVRQVVRfU1RSRUFNKGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1f
c29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpKTsKKyAgICBtX2lucHV0U3RyZWFtID0gZ19pb19zdHJl
YW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX3NvY2tldENvbm5lY3Rpb24uZ2V0KCkp
KTsKKyAgICBtX3JlYWRCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPGNoYXJbXT4oUkVBRF9CVUZG
RVJfU0laRSk7CisKKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRUaGlz
KHRoaXMpOworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQo
KSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JVRkZFUl9TSVpFLCBHX1BSSU9SSVRZX0RFRkFV
TFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5j
UmVhZHlDYWxsYmFjaz4ocmVhZFJlYWR5Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYo
KSk7CisKKyAgICBtX3N0YXRlID0gT3BlbjsKKyAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3Ry
ZWFtKCp0aGlzKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNvbm5lY3RlZENhbGxi
YWNrKEdTb2NrZXRDbGllbnQqIGNsaWVudCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNvY2tldFN0
cmVhbUhhbmRsZSogaGFuZGxlKQoreworICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHBy
b3RlY3RlZFRoaXMgPSBhZG9wdFJlZihoYW5kbGUpOworCisgICAgLy8gQWx3YXlzIGZpbmlzaCB0
aGUgY29ubmVjdGlvbiwgZXZlbiBpZiB0aGlzIFNvY2tldFN0cmVhbUhhbmRsZSB3YXMgY2FuY2Vs
bGVkIGVhcmxpZXIuCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIEdSZWZQ
dHI8R1NvY2tldENvbm5lY3Rpb24+IHNvY2tldENvbm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19zb2Nr
ZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9maW5pc2goY2xpZW50LCByZXN1bHQsICZlcnJvci5v
dXRQdHIoKSkpOworCisgICAgLy8gVGhlIFNvY2tldFN0cmVhbUhhbmRsZSBoYXMgYmVlbiBjYW5j
ZWxsZWQsIHNvIGp1c3QgY2xvc2UgdGhlIGNvbm5lY3Rpb24sIGlnbm9yaW5nIGVycm9ycy4KKyAg
ICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoaGFuZGxlLT5tX2NhbmNlbGxhYmxlLmdl
dCgpKSkgeworICAgICAgICBpZiAoc29ja2V0Q29ubmVjdGlvbikKKyAgICAgICAgICAgIGdfaW9f
c3RyZWFtX2Nsb3NlKEdfSU9fU1RSRUFNKHNvY2tldENvbm5lY3Rpb24uZ2V0KCkpLCBudWxscHRy
LCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChlcnJvcikKKyAg
ICAgICAgaGFuZGxlLT5kaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yKGVycm9yLT5jb2RlLCBlcnJv
ci0+bWVzc2FnZSkpOworICAgIGVsc2UKKyAgICAgICAgaGFuZGxlLT5jb25uZWN0ZWQoV1RGTW92
ZShzb2NrZXRDb25uZWN0aW9uKSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFk
Qnl0ZXMoZ3NzaXplIGJ5dGVzUmVhZCkKK3sKKyAgICBpZiAoIWJ5dGVzUmVhZCkgeworICAgICAg
ICBjbG9zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlIGNsaWVudCBj
YW4gY2xvc2UgdGhlIGhhbmRsZSwgcG90ZW50aWFsbHkgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJl
bmNlLgorICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgbV9jbGllbnQuZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURhdGEoKnRoaXMsIG1fcmVhZEJ1
ZmZlci5nZXQoKSwgYnl0ZXNSZWFkKTsKKyAgICBpZiAobV9pbnB1dFN0cmVhbSkgeworICAgICAg
ICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKG1faW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1
ZmZlci5nZXQoKSwgUkVBRF9CVUZGRVJfU0laRSwgR19QUklPUklUWV9ERUZBVUxULCBtX2NhbmNl
bGxhYmxlLmdldCgpLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNh
bGxiYWNrPihyZWFkUmVhZHlDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkUmVhZHlDYWxsYmFjayhHSW5w
dXRTdHJlYW0qIHN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNvY2tldFN0cmVhbUhhbmRs
ZSogaGFuZGxlKQoreworICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRo
aXMgPSBhZG9wdFJlZihoYW5kbGUpOworCisgICAgLy8gQWx3YXlzIGZpbmlzaCB0aGUgcmVhZCwg
ZXZlbiBpZiB0aGlzIFNvY2tldFN0cmVhbUhhbmRsZSB3YXMgY2FuY2VsbGVkIGVhcmxpZXIuCisg
ICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBn
X2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaChzdHJlYW0sIHJlc3VsdCwgJmVycm9yLm91dFB0cigp
KTsKKworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChoYW5kbGUtPm1fY2FuY2Vs
bGFibGUuZ2V0KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZXJyb3IpCisgICAgICAg
IGhhbmRsZS0+ZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvcihlcnJvci0+Y29kZSwgZXJyb3ItPm1l
c3NhZ2UpKTsKKyAgICBlbHNlCisgICAgICAgIGhhbmRsZS0+cmVhZEJ5dGVzKGJ5dGVzUmVhZCk7
Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9y
JiYgZXJyb3IpCit7CisgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgV1RG
TW92ZShlcnJvcikpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSgp
Cit7CisgICAgLy8gV2Ugbm8gbG9uZ2VyIGhhdmUgYnVmZmVyZWQgZGF0YSwgc28gc3RvcCB3YWl0
aW5nIGZvciB0aGUgc29ja2V0IHRvIGJlIHdyaXRhYmxlLgorICAgIGlmICghYnVmZmVyZWRBbW91
bnQoKSkgeworICAgICAgICBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZW5kUGVuZGluZ0RhdGEoKTsKK30KKworaW50IFNv
Y2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1T
ZW5kIiwgdGhpcyk7CisgICAgaWYgKCFtX291dHB1dFN0cmVhbSB8fCAhZGF0YSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZ3NzaXpl
IHdyaXR0ZW4gPSBnX3BvbGxhYmxlX291dHB1dF9zdHJlYW1fd3JpdGVfbm9uYmxvY2tpbmcobV9v
dXRwdXRTdHJlYW0uZ2V0KCksIGRhdGEsIGxlbmd0aCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwgJmVy
cm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgaWYgKGdfZXJyb3JfbWF0
Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9XT1VMRF9CTE9DSykpCisg
ICAgICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yKGVycm9yLT5jb2RlLCBl
cnJvci0+bWVzc2FnZSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBkaWQgbm90IHNlbmQgYWxsIHRoZSBieXRlcyB3ZSB3ZXJlIGdpdmVuLCB3ZSBrbm93IHRoYXQK
KyAgICAvLyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHdpbGwgbmVlZCB0byBzZW5kIG1vcmUgaW4g
dGhlIGZ1dHVyZS4KKyAgICBpZiAod3JpdHRlbiA8IGxlbmd0aCkKKyAgICAgICAgYmVnaW5XYWl0
aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKworICAgIHJldHVybiB3cml0dGVuOworfQorCit2
b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCit7CisgICAgTE9HKE5ldHdv
cmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOworICAgIC8v
IFdlIGNhbmNlbCB0aGlzIGhhbmRsZSBmaXJzdCB0byBkaXNhYmxlIGFsbCBjYWxsYmFja3MuCisg
ICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQoKSk7CisgICAgc3RvcFdh
aXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOworCisgICAgaWYgKG1fc29ja2V0Q29ubmVjdGlv
bikgeworICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGdfaW9f
c3RyZWFtX2Nsb3NlKEdfSU9fU1RSRUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSksIG51bGxw
dHIsICZlcnJvci5vdXRQdHIoKSk7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIGRp
ZEZhaWwoU29ja2V0U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7Cisg
ICAgICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQorCisgICAgbV9vdXRw
dXRTdHJlYW0gPSBudWxscHRyOworICAgIG1faW5wdXRTdHJlYW0gPSBudWxscHRyOworICAgIG1f
cmVhZEJ1ZmZlciA9IG51bGxwdHI7CisKKyAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVh
bSgqdGhpcyk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdGb3JT
b2NrZXRXcml0YWJpbGl0eSgpCit7CisgICAgaWYgKG1fd3JpdGVSZWFkeVNvdXJjZSkgLy8gQWxy
ZWFkeSB3YWl0aW5nLgorICAgICAgICByZXR1cm47CisKKyAgICBtX3dyaXRlUmVhZHlTb3VyY2Ug
PSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9vdXRwdXRfc3RyZWFtX2NyZWF0ZV9zb3VyY2UobV9vdXRw
dXRTdHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCkpKTsKKyAgICByZWYoKTsKKyAgICBn
X3NvdXJjZV9zZXRfY2FsbGJhY2sobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPih3cml0ZVJlYWR5Q2FsbGJhY2spLCB0aGlzLAorICAgICAgICBb
XShncG9pbnRlciBoYW5kbGUpIHsgc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaGFu
ZGxlKS0+ZGVyZWYoKTsgfSk7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fd3JpdGVSZWFkeVNvdXJj
ZS5nZXQoKSwgZ19tYWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZhdWx0KCkpOworfQorCit2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFdhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpCit7
CisgICAgaWYgKCFtX3dyaXRlUmVhZHlTb3VyY2UpIC8vIE5vdCB3YWl0aW5nLgorICAgICAgICBy
ZXR1cm47CisKKyAgICBnX3NvdXJjZV9kZXN0cm95KG1fd3JpdGVSZWFkeVNvdXJjZS5nZXQoKSk7
CisgICAgbV93cml0ZVJlYWR5U291cmNlID0gbnVsbHB0cjsKK30KKworZ2Jvb2xlYW4gU29ja2V0
U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJhY2soR1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwg
U29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNf
Y2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5jZWxsYWJsZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBH
X1NPVVJDRV9SRU1PVkU7CisKKyAgICBoYW5kbGUtPndyaXRlUmVhZHkoKTsKKyAgICByZXR1cm4g
R19TT1VSQ0VfQ09OVElOVUU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbFNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAJKHJldmlzaW9uIDIw
NDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJl
YW1IYW5kbGVJbXBsU291cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwxNCBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUu
aCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgiCiAKICNpZiBVU0UoU09VUCkK
IAotI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTb2Nr
ZXRTdHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgor
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPGdpby9naW8uaD4KICNpbmNsdWRlIDxnbGliLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDgsOSArNDgsOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZTo6
Y3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwg
U2Vzc2lvbklEKQorUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVu
dCwgU2Vzc2lvbklEKQogewotICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHNvY2tldCA9IGFk
b3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50KSk7CisgICAgUmVmPFNv
Y2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5k
bGVJbXBsKHVybCwgY2xpZW50KSk7CiAKICAgICB1bnNpZ25lZCBwb3J0ID0gdXJsLmhhc1BvcnQo
KSA/IHVybC5wb3J0KCkgOiAodXJsLnByb3RvY29sSXMoIndzcyIpID8gNDQzIDogODApOwogICAg
IEdSZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0
X2NsaWVudF9uZXcoKSk7CkBAIC02MiwzNSArNjIsMzUgQEAgUmVmPFNvY2tldFN0cmVhbUhhbmRs
ZT4gU29ja2V0U3RyZWFtSGFuZAogICAgIHJldHVybiBzb2NrZXQ7CiB9CiAKLVJlZjxTb2NrZXRT
dHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKEdTb2NrZXRDb25uZWN0aW9u
KiBzb2NrZXRDb25uZWN0aW9uLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKK1Jl
ZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZShHU29j
a2V0Q29ubmVjdGlvbiogc29ja2V0Q29ubmVjdGlvbiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiBjbGllbnQpCiB7Ci0gICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRS
ZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUoVVJMKCksIGNsaWVudCkpOworICAgIFJlZjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxl
SW1wbChVUkwoKSwgY2xpZW50KSk7CiAKICAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBj
b25uZWN0aW9uID0gc29ja2V0Q29ubmVjdGlvbjsKICAgICBzb2NrZXQtPmNvbm5lY3RlZChXVEZN
b3ZlKGNvbm5lY3Rpb24pKTsKICAgICByZXR1cm4gc29ja2V0OwogfQogCi1Tb2NrZXRTdHJlYW1I
YW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFu
ZGxlQ2xpZW50JiBjbGllbnQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xp
ZW50KQorU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbChjb25z
dCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgOiBTb2Nr
ZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpCiAgICAgLCBtX2NhbmNlbGxhYmxlKGFkb3B0R1Jl
ZihnX2NhbmNlbGxhYmxlX25ldygpKSkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVh
bUhhbmRsZSAlcCBuZXcgY2xpZW50ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKIH0KIAotU29ja2V0
U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkKK1NvY2tldFN0cmVhbUhhbmRsZUlt
cGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsKCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tl
dFN0cmVhbUhhbmRsZSAlcCBkZWxldGUiLCB0aGlzKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OmNvbm5lY3RlZChHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiYmIHNvY2tldENvbm5l
Y3Rpb24pCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNvbm5lY3RlZChHUmVmUHRyPEdT
b2NrZXRDb25uZWN0aW9uPiYmIHNvY2tldENvbm5lY3Rpb24pCiB7CiAgICAgbV9zb2NrZXRDb25u
ZWN0aW9uID0gV1RGTW92ZShzb2NrZXRDb25uZWN0aW9uKTsKICAgICBtX291dHB1dFN0cmVhbSA9
IEdfUE9MTEFCTEVfT1VUUFVUX1NUUkVBTShnX2lvX3N0cmVhbV9nZXRfb3V0cHV0X3N0cmVhbShH
X0lPX1NUUkVBTShtX3NvY2tldENvbm5lY3Rpb24uZ2V0KCkpKSk7CiAgICAgbV9pbnB1dFN0cmVh
bSA9IGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9zb2NrZXRDb25u
ZWN0aW9uLmdldCgpKSk7CiAgICAgbV9yZWFkQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxjaGFy
W10+KFJFQURfQlVGRkVSX1NJWkUpOwogCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0
ZWRUaGlzKCp0aGlzKTsKICAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKG1faW5wdXRTdHJl
YW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5nZXQoKSwgUkVBRF9CVUZGRVJfU0laRSwgR19QUklPUklU
WV9ERUZBVUxULCBtX2NhbmNlbGxhYmxlLmdldCgpLAogICAgICAgICByZWludGVycHJldF9jYXN0
PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5s
ZWFrUmVmKCkpOwogCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpj
b25uZWN0ZWQoR1JlZlAKICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsK
IH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNvbm5lY3RlZENhbGxiYWNrKEdTb2NrZXRD
bGllbnQqIGNsaWVudCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNvY2tldFN0cmVhbUhhbmRsZSog
aGFuZGxlKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjb25uZWN0ZWRDYWxsYmFjayhH
U29ja2V0Q2xpZW50KiBjbGllbnQsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsKiBoYW5kbGUpCiB7CiAgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJv
dGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRsZSk7CiAKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2FsbGJhCiAgICAgICAgIGhhbmRsZS0+Y29u
bmVjdGVkKFdURk1vdmUoc29ja2V0Q29ubmVjdGlvbikpOwogfQogCi12b2lkIFNvY2tldFN0cmVh
bUhhbmRsZTo6cmVhZEJ5dGVzKGdzc2l6ZSBieXRlc1JlYWQpCit2b2lkIFNvY2tldFN0cmVhbUhh
bmRsZUltcGw6OnJlYWRCeXRlcyhnc3NpemUgYnl0ZXNSZWFkKQogewogICAgIGlmICghYnl0ZXNS
ZWFkKSB7CiAgICAgICAgIGNsb3NlKCk7CkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OnJlYWRCeXRlcyhnc3NpegogICAgIH0KIH0KIAotdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZUltcGw6OnJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlKQogewog
ICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZiho
YW5kbGUpOwogCkBAIC0xNTIsMTIgKzE1MiwxMiBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6
cmVhZFJlYWR5Q2FsbGJhCiAgICAgICAgIGhhbmRsZS0+cmVhZEJ5dGVzKGJ5dGVzUmVhZCk7CiB9
CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yJiYg
ZXJyb3IpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmRpZEZhaWwoU29ja2V0U3RyZWFt
RXJyb3ImJiBlcnJvcikKIHsKICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlz
LCBXVEZNb3ZlKGVycm9yKSk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJl
YWR5KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6d3JpdGVSZWFkeSgpCiB7CiAgICAg
Ly8gV2Ugbm8gbG9uZ2VyIGhhdmUgYnVmZmVyZWQgZGF0YSwgc28gc3RvcCB3YWl0aW5nIGZvciB0
aGUgc29ja2V0IHRvIGJlIHdyaXRhYmxlLgogICAgIGlmICghYnVmZmVyZWRBbW91bnQoKSkgewpA
QCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5KCkK
ICAgICBzZW5kUGVuZGluZ0RhdGEoKTsKIH0KIAotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCitpbnQgU29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7
CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kIiwg
dGhpcyk7CiAgICAgaWYgKCFtX291dHB1dFN0cmVhbSB8fCAhZGF0YSkKQEAgLTE4NSwxNCArMTg1
LDE0IEBAIGludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb24KICAgICB9CiAK
ICAgICAvLyBJZiB3ZSBkaWQgbm90IHNlbmQgYWxsIHRoZSBieXRlcyB3ZSB3ZXJlIGdpdmVuLCB3
ZSBrbm93IHRoYXQKLSAgICAvLyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHdpbGwgbmVlZCB0byBz
ZW5kIG1vcmUgaW4gdGhlIGZ1dHVyZS4KKyAgICAvLyBTb2NrZXRTdHJlYW1IYW5kbGUgd2lsbCBu
ZWVkIHRvIHNlbmQgbW9yZSBpbiB0aGUgZnV0dXJlLgogICAgIGlmICh3cml0dGVuIDwgbGVuZ3Ro
KQogICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOwogCiAgICAgcmV0
dXJuIHdyaXR0ZW47CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybUNsb3Nl
KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxhdGZvcm1DbG9zZSgpCiB7CiAgICAg
TE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMp
OwogICAgIC8vIFdlIGNhbmNlbCB0aGlzIGhhbmRsZSBmaXJzdCB0byBkaXNhYmxlIGFsbCBjYWxs
YmFja3MuCkBAIC0yMTQsMTkgKzIxNCwyMCBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxh
dGZvcm1DbG9zZSgpCiAgICAgbV9jbGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMpOwog
fQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6YmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFi
aWxpdHkoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpiZWdpbldhaXRpbmdGb3JTb2Nr
ZXRXcml0YWJpbGl0eSgpCiB7CiAgICAgaWYgKG1fd3JpdGVSZWFkeVNvdXJjZSkgLy8gQWxyZWFk
eSB3YWl0aW5nLgogICAgICAgICByZXR1cm47CiAKICAgICBtX3dyaXRlUmVhZHlTb3VyY2UgPSBh
ZG9wdEdSZWYoZ19wb2xsYWJsZV9vdXRwdXRfc3RyZWFtX2NyZWF0ZV9zb3VyY2UobV9vdXRwdXRT
dHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCkpKTsKICAgICByZWYoKTsKLSAgICBnX3Nv
dXJjZV9zZXRfY2FsbGJhY2sobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCByZWludGVycHJldF9j
YXN0PEdTb3VyY2VGdW5jPih3cml0ZVJlYWR5Q2FsbGJhY2spLCB0aGlzLAotICAgICAgICBbXShn
cG9pbnRlciBoYW5kbGUpIHsgc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaGFuZGxl
KS0+ZGVyZWYoKTsgfSk7CisgICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fd3JpdGVSZWFkeVNv
dXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od3JpdGVSZWFkeUNhbGxi
YWNrKSwgdGhpcywgW10oZ3BvaW50ZXIgaGFuZGxlKSB7IAorICAgICAgICBzdGF0aWNfY2FzdDxT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsKj4oaGFuZGxlKS0+ZGVyZWYoKTsKKyAgICB9KTsKICAgICBn
X3NvdXJjZV9hdHRhY2gobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCBnX21haW5fY29udGV4dF9n
ZXRfdGhyZWFkX2RlZmF1bHQoKSk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdG9w
V2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6c3RvcFdhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpCiB7CiAgICAgaWYgKCFtX3dyaXRl
UmVhZHlTb3VyY2UpIC8vIE5vdCB3YWl0aW5nLgogICAgICAgICByZXR1cm47CkBAIC0yMzUsNyAr
MjM2LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5nRm9yUwogICAgIG1f
d3JpdGVSZWFkeVNvdXJjZSA9IG51bGxwdHI7CiB9CiAKLWdib29sZWFuIFNvY2tldFN0cmVhbUhh
bmRsZTo6d3JpdGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0
cmVhbUhhbmRsZSogaGFuZGxlKQorZ2Jvb2xlYW4gU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6d3Jp
dGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRs
ZUltcGwqIGhhbmRsZSkKIHsKICAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoaGFu
ZGxlLT5tX2NhbmNlbGxhYmxlLmdldCgpKSkKICAgICAgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9W
RTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJl
YW1IYW5kbGVTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAJKHJldmlzaW9uIDIwNDQ2NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5k
bGVTb3VwLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgTHRkLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIK
LQotI2lmIFVTRShTT1VQKQotCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5o
IgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50LmgiCi0jaW5jbHVkZSA8Z2lvL2dpby5oPgotI2luY2x1ZGUgPGdsaWIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2RlZmluZSBSRUFEX0JVRkZFUl9T
SVpFIDEwMjQKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8U29ja2V0U3RyZWFtSGFuZGxl
PiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkKLXsKLSAgICBSZWY8U29ja2V0U3RyZWFt
SGFuZGxlPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNs
aWVudCkpOwotCi0gICAgdW5zaWduZWQgcG9ydCA9IHVybC5oYXNQb3J0KCkgPyB1cmwucG9ydCgp
IDogKHVybC5wcm90b2NvbElzKCJ3c3MiKSA/IDQ0MyA6IDgwKTsKLSAgICBHUmVmUHRyPEdTb2Nr
ZXRDbGllbnQ+IHNvY2tldENsaWVudCA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfbmV3KCkp
OwotICAgIGlmICh1cmwucHJvdG9jb2xJcygid3NzIikpCi0gICAgICAgIGdfc29ja2V0X2NsaWVu
dF9zZXRfdGxzKHNvY2tldENsaWVudC5nZXQoKSwgVFJVRSk7Ci0gICAgUmVmPFNvY2tldFN0cmVh
bUhhbmRsZT4gcHJvdGVjdGVkU29ja2V0U3RyZWFtSGFuZGxlID0gc29ja2V0LmNvcHlSZWYoKTsK
LSAgICBnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2FzeW5jKHNvY2tldENsaWVudC5n
ZXQoKSwgdXJsLmhvc3QoKS51dGY4KCkuZGF0YSgpLCBwb3J0LCBzb2NrZXQtPm1fY2FuY2VsbGFi
bGUuZ2V0KCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4o
Y29ubmVjdGVkQ2FsbGJhY2spLCAmcHJvdGVjdGVkU29ja2V0U3RyZWFtSGFuZGxlLmxlYWtSZWYo
KSk7Ci0gICAgcmV0dXJuIHNvY2tldDsKLX0KLQotUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29j
a2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qIHNvY2tldENvbm5lY3Rp
b24sIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQotewotICAgIFJlZjxTb2NrZXRT
dHJlYW1IYW5kbGU+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlKFVS
TCgpLCBjbGllbnQpKTsKLQotICAgIEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+IGNvbm5lY3Rp
b24gPSBzb2NrZXRDb25uZWN0aW9uOwotICAgIHNvY2tldC0+Y29ubmVjdGVkKFdURk1vdmUoY29u
bmVjdGlvbikpOwotICAgIHJldHVybiBzb2NrZXQ7Ci19Ci0KLVNvY2tldFN0cmVhbUhhbmRsZTo6
U29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQmIGNsaWVudCkKLSAgICA6IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UodXJsLCBjbGllbnQpCi0g
ICAgLCBtX2NhbmNlbGxhYmxlKGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSkKLXsKLSAg
ICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50ICVwIiwgdGhp
cywgJm1fY2xpZW50KTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFu
ZGxlKCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkZWxldGUi
LCB0aGlzKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNvbm5lY3RlZChHUmVmUHRy
PEdTb2NrZXRDb25uZWN0aW9uPiYmIHNvY2tldENvbm5lY3Rpb24pCi17Ci0gICAgbV9zb2NrZXRD
b25uZWN0aW9uID0gV1RGTW92ZShzb2NrZXRDb25uZWN0aW9uKTsKLSAgICBtX291dHB1dFN0cmVh
bSA9IEdfUE9MTEFCTEVfT1VUUFVUX1NUUkVBTShnX2lvX3N0cmVhbV9nZXRfb3V0cHV0X3N0cmVh
bShHX0lPX1NUUkVBTShtX3NvY2tldENvbm5lY3Rpb24uZ2V0KCkpKSk7Ci0gICAgbV9pbnB1dFN0
cmVhbSA9IGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9zb2NrZXRD
b25uZWN0aW9uLmdldCgpKSk7Ci0gICAgbV9yZWFkQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxj
aGFyW10+KFJFQURfQlVGRkVSX1NJWkUpOwotCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRs
ZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKG1f
aW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5nZXQoKSwgUkVBRF9CVUZGRVJfU0laRSwg
R19QUklPUklUWV9ERUZBVUxULCBtX2NhbmNlbGxhYmxlLmdldCgpLAotICAgICAgICByZWludGVy
cHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwgcHJvdGVj
dGVkVGhpcy5sZWFrUmVmKCkpOwotCi0gICAgbV9zdGF0ZSA9IE9wZW47Ci0gICAgbV9jbGllbnQu
ZGlkT3BlblNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
Ojpjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiBjbGllbnQsIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKLXsKLSAgICBSZWZQdHI8U29ja2V0
U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYoaGFuZGxlKTsKLQotICAgIC8v
IEFsd2F5cyBmaW5pc2ggdGhlIGNvbm5lY3Rpb24sIGV2ZW4gaWYgdGhpcyBTb2NrZXRTdHJlYW1I
YW5kbGUgd2FzIGNhbmNlbGxlZCBlYXJsaWVyLgotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBl
cnJvcjsKLSAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBzb2NrZXRDb25uZWN0aW9uID0g
YWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfZmluaXNoKGNsaWVudCwg
cmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKLQotICAgIC8vIFRoZSBTb2NrZXRTdHJlYW1IYW5k
bGUgaGFzIGJlZW4gY2FuY2VsbGVkLCBzbyBqdXN0IGNsb3NlIHRoZSBjb25uZWN0aW9uLCBpZ25v
cmluZyBlcnJvcnMuCi0gICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGhhbmRsZS0+
bV9jYW5jZWxsYWJsZS5nZXQoKSkpIHsKLSAgICAgICAgaWYgKHNvY2tldENvbm5lY3Rpb24pCi0g
ICAgICAgICAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NUUkVBTShzb2NrZXRDb25uZWN0aW9u
LmdldCgpKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoZXJyb3IpCi0gICAgICAgIGhhbmRsZS0+ZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvcihl
cnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICBlbHNlCi0gICAgICAgIGhhbmRsZS0+
Y29ubmVjdGVkKFdURk1vdmUoc29ja2V0Q29ubmVjdGlvbikpOwotfQotCi12b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKGdzc2l6ZSBieXRlc1JlYWQpCi17Ci0gICAgaWYgKCFieXRl
c1JlYWQpIHsKLSAgICAgICAgY2xvc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFRoZSBjbGllbnQgY2FuIGNsb3NlIHRoZSBoYW5kbGUsIHBvdGVudGlhbGx5IHJlbW92aW5n
IHRoZSBsYXN0IHJlZmVyZW5jZS4KLSAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90
ZWN0ZWRUaGlzKHRoaXMpOwotICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRh
KCp0aGlzLCBtX3JlYWRCdWZmZXIuZ2V0KCksIGJ5dGVzUmVhZCk7Ci0gICAgaWYgKG1faW5wdXRT
dHJlYW0pIHsKLSAgICAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFt
LmdldCgpLCBtX3JlYWRCdWZmZXIuZ2V0KCksIFJFQURfQlVGRkVSX1NJWkUsIEdfUFJJT1JJVFlf
REVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZFJlYWR5Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlz
LmxlYWtSZWYoKSk7Ci0gICAgfQotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZFJl
YWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBT
b2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKLXsKLSAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFu
ZGxlPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYoaGFuZGxlKTsKLQotICAgIC8vIEFsd2F5cyBm
aW5pc2ggdGhlIHJlYWQsIGV2ZW4gaWYgdGhpcyBTb2NrZXRTdHJlYW1IYW5kbGUgd2FzIGNhbmNl
bGxlZCBlYXJsaWVyLgotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBnc3Np
emUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goc3RyZWFtLCByZXN1bHQs
ICZlcnJvci5vdXRQdHIoKSk7Ci0KLSAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQo
aGFuZGxlLT5tX2NhbmNlbGxhYmxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGVycm9yKQotICAgICAgICBoYW5kbGUtPmRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3IoZXJyb3It
PmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgZWxzZQotICAgICAgICBoYW5kbGUtPnJlYWRC
eXRlcyhieXRlc1JlYWQpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkRmFpbChT
b2NrZXRTdHJlYW1FcnJvciYmIGVycm9yKQotewotICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRT
dHJlYW0oKnRoaXMsIFdURk1vdmUoZXJyb3IpKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OndyaXRlUmVhZHkoKQotewotICAgIC8vIFdlIG5vIGxvbmdlciBoYXZlIGJ1ZmZlcmVkIGRh
dGEsIHNvIHN0b3Agd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0byBiZSB3cml0YWJsZS4KLSAgICBp
ZiAoIWJ1ZmZlcmVkQW1vdW50KCkpIHsKLSAgICAgICAgc3RvcFdhaXRpbmdGb3JTb2NrZXRXcml0
YWJpbGl0eSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2VuZFBlbmRpbmdEYXRh
KCk7Ci19Ci0KLWludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFu
ZGxlICVwIHBsYXRmb3JtU2VuZCIsIHRoaXMpOwotICAgIGlmICghbV9vdXRwdXRTdHJlYW0gfHwg
IWRhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVy
cm9yOwotICAgIGdzc2l6ZSB3cml0dGVuID0gZ19wb2xsYWJsZV9vdXRwdXRfc3RyZWFtX3dyaXRl
X25vbmJsb2NraW5nKG1fb3V0cHV0U3RyZWFtLmdldCgpLCBkYXRhLCBsZW5ndGgsIG1fY2FuY2Vs
bGFibGUuZ2V0KCksICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAg
IGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1Jf
V09VTERfQkxPQ0spKQotICAgICAgICAgICAgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxp
dHkoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJv
cihlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgLy8gSWYgd2UgZGlkIG5vdCBzZW5kIGFsbCB0aGUgYnl0ZXMgd2Ugd2VyZSBnaXZl
biwgd2Uga25vdyB0aGF0Ci0gICAgLy8gU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB3aWxsIG5lZWQg
dG8gc2VuZCBtb3JlIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHdyaXR0ZW4gPCBsZW5ndGgpCi0g
ICAgICAgIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0KLSAgICByZXR1cm4g
d3JpdHRlbjsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQot
ewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtQ2xvc2Ui
LCB0aGlzKTsKLSAgICAvLyBXZSBjYW5jZWwgdGhpcyBoYW5kbGUgZmlyc3QgdG8gZGlzYWJsZSBh
bGwgY2FsbGJhY2tzLgotICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFibGUuZ2V0
KCkpOwotICAgIHN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKLQotICAgIGlmICht
X3NvY2tldENvbm5lY3Rpb24pIHsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OwotICAgICAgICBnX2lvX3N0cmVhbV9jbG9zZShHX0lPX1NUUkVBTShtX3NvY2tldENvbm5lY3Rp
b24uZ2V0KCkpLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBpZiAoZXJyb3Ip
Ci0gICAgICAgICAgICBkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yKGVycm9yLT5jb2RlLCBlcnJv
ci0+bWVzc2FnZSkpOwotICAgICAgICBtX3NvY2tldENvbm5lY3Rpb24gPSBudWxscHRyOwotICAg
IH0KLQotICAgIG1fb3V0cHV0U3RyZWFtID0gbnVsbHB0cjsKLSAgICBtX2lucHV0U3RyZWFtID0g
bnVsbHB0cjsKLSAgICBtX3JlYWRCdWZmZXIgPSBudWxscHRyOwotCi0gICAgbV9jbGllbnQuZGlk
Q2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6
YmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKQotewotICAgIGlmIChtX3dyaXRlUmVh
ZHlTb3VyY2UpIC8vIEFscmVhZHkgd2FpdGluZy4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93
cml0ZVJlYWR5U291cmNlID0gYWRvcHRHUmVmKGdfcG9sbGFibGVfb3V0cHV0X3N0cmVhbV9jcmVh
dGVfc291cmNlKG1fb3V0cHV0U3RyZWFtLmdldCgpLCBtX2NhbmNlbGxhYmxlLmdldCgpKSk7Ci0g
ICAgcmVmKCk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fd3JpdGVSZWFkeVNvdXJjZS5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4od3JpdGVSZWFkeUNhbGxiYWNrKSwg
dGhpcywKLSAgICAgICAgW10oZ3BvaW50ZXIgaGFuZGxlKSB7IHN0YXRpY19jYXN0PFNvY2tldFN0
cmVhbUhhbmRsZSo+KGhhbmRsZSktPmRlcmVmKCk7IH0pOwotICAgIGdfc291cmNlX2F0dGFjaCht
X3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCksIGdfbWFpbl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVs
dCgpKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5nRm9yU29ja2V0
V3JpdGFiaWxpdHkoKQotewotICAgIGlmICghbV93cml0ZVJlYWR5U291cmNlKSAvLyBOb3Qgd2Fp
dGluZy4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zb3VyY2VfZGVzdHJveShtX3dyaXRlUmVh
ZHlTb3VyY2UuZ2V0KCkpOwotICAgIG1fd3JpdGVSZWFkeVNvdXJjZSA9IG51bGxwdHI7Ci19Ci0K
LWdib29sZWFuIFNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJs
ZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQotewotICAgIGlmIChn
X2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUuZ2V0KCkpKQot
ICAgICAgICByZXR1cm4gR19TT1VSQ0VfUkVNT1ZFOwotCi0gICAgaGFuZGxlLT53cml0ZVJlYWR5
KCk7Ci0gICAgcmV0dXJuIEdfU09VUkNFX0NPTlRJTlVFOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
RGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0NDc0KQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTYtMDgtMTUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZW5hbWUgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB0byBTb2NrZXRTdHJlYW1I
YW5kbGUgYW5kIFNvY2tldFN0cmVhbUhhbmRsZSB0byBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA4NTgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvTmV0d29yay9XZWJTb2NrZXRQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNv
Y2tldFByb3ZpZGVyOjpjcmVhdGVTb2NrZXRTdHJlYW1IYW5kbGUpOgorCiAyMDE2LTA4LTE1ICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGlPUyBi
dWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRQ
cm92aWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3
b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNwcAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsMTYgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIAotI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NvY2tldFN0cmVhbUhhbmRsZS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9XZWJTb2NrZXRDaGFubmVsQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Xb3JrZXJH
bG9iYWxTY29wZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV29ya2VyUnVuTG9vcC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvV29ya2VyVGhyZWFkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Xb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTEsNyArNDIs
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFdlYlNvY2tl
dFByb3ZpZGVyOjpjcmVhdGVTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmwsIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1cm4gYSBwcm94eSBzbyB3ZSBjYW4gZG8gdGhlIGFj
dHVhbCBuZXR3b3JrIGludGVyYWN0aW9ucyBpbiB0aGUgTmV0d29ya1Byb2Nlc3MuCi0gICAgcmV0
dXJuIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKHVybCwgY2xpZW50LCBzZXNzaW9uSUQpOwor
ICAgIHJldHVybiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGUodXJsLCBjbGllbnQsIHNl
c3Npb25JRCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286082</attachid>
            <date>2016-08-15 13:15:08 -0700</date>
            <delta_ts>2016-08-15 13:27:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160858-20160815131324.patch</filename>
            <type>text/plain</type>
            <size>192741</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NCBAQAorMjAxNi0wOC0xNSAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlIHRvIFNvY2tldFN0cmVhbUhhbmRsZSBhbmQgU29ja2V0U3Ry
ZWFtSGFuZGxlIHRvIFNvY2tldFN0cmVhbUhhbmRsZUltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDg1OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvciwgZXhjZXB0IEdUSydzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgaXMgbm93IHNhZmVs
eSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgVGhpcyBpcyBwcmVwYXJhdGlvbiBmb3Ig
bWFraW5nIGEgbmV3IGtpbmQgb2YgU29ja2V0U3RyZWFtSGFuZGxlIHdoaWNoIGlzIGEgcHJveHkg
dGhhdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MgaW4gV2ViS2l0Mi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsu
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1X
aW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9Tb2NrZXRQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVh
bUhhbmRsZTo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OnNlbmRQZW5kaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6ZGlzY29ubmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kUGVuZGluZ0Rh
dGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFu
ZGxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0
U3RyZWFtSGFuZGxlQmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
Ojp+U29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6
On5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzY2hlZHVsZVN0cmVh
bXMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmV0YWluU29j
a2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmV4ZWN1dGVQQUNGaWxl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbW92ZVBB
Q1J1bkxvb3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHlGcm9tQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJDb3JlOjphdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjphZGRDT05ORUNUQ3Jl
ZGVudGlhbHMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29w
eUNGU3RyZWFtRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVwb3J0RXJyb3JUb0NsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxhdGZvcm1DbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVT
dHJlYW1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6
cmV0YWluU29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZTo6cmVsZWFzZVNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlQQUNFeGVjdXRpb25EZXNj
cmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZW1vdmVQQUNSdW5Mb29wU291cmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y2hvb3NlUHJveHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94
eUZyb21BcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OmNyZWF0ZVN0cmVhbXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3Ry
ZWFtSGFuZGxlOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmFkZENPTk5FQ1RDcmVkZW50aWFs
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlD
RlN0cmVhbURlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZFN0cmVhbUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVTdHJlYW1DYWxsYmFjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6cGxhdGZvcm1TZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBvcnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0
cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlYWREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnNlbmREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndhaXRGb3JBdmFpbGFi
bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlk
T3BlblNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
cmVhdGVDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRo
cmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0
b3BUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
OjpkaWRSZWNlaXZlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29j
a2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVDb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRs
ZS5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsU291cC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNvbm5lY3RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjb25uZWN0ZWRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFkQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFJlYWR5Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkRmFpbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3cml0ZVJlYWR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmJlZ2luV2FpdGluZ0Zv
clNvY2tldFdyaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZUltcGw6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6d3JpdGVSZWFkeUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhh
bmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNv
bm5lY3RlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OmNvbm5lY3RlZENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6cmVhZFJlYWR5Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpkaWRGYWlsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdG
b3JTb2NrZXRXcml0YWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRT
dHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1I
YW5kbGVTb3VwLmNwcDogUmVtb3ZlZC4KKwogMjAxNi0wOC0xNSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBXaW5DYWlybyBidWlsZCBh
ZnRlciByMjA0NDY2LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDQ2NikK
KysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMzY3
LDcgKzIzNjcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVx
dWVzdEJhc2UuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5j
cHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAKIAogICAgIHBsYXRmb3JtL3NxbC9TUUxW
YWx1ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAot
ICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c0xvYWRlckNsaWVudENGTmV0LmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU3luY2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY0OCw3ICs2NDgsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hy
b25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAKIApJbmRleDog
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U1NMSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5k
bGVDdXJsLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsQ3VybC5jcHAKIAogICAgIHBsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE5LDggKzIwMTksOCBAQAogCQk1
MTBBNThGQTFCQUNDN0YyMDBDMTkyODIgLyogSURCUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE1OEY2MUJBQ0M0QTUwMEMxOTI4
MiAvKiBJREJSZXF1ZXN0RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1F
cnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEwRDRBMkQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAg
Ki87IH07CiAJCTUxMEQ0QTM0MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0
QTJFMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLzsgfTsKLQkJ
NTEwRDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzAxMDMx
NjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwICovOyB9OwotCQk1MTBE
NEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzExMDMxNjVFRTAw
NDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTBENEEzNjEwMzE2NUVFMDA0OUVBNTQgLyog
U29ja2V0U3RyZWFtSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovOyB9OworCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFt
SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTBENEEzMTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwRDRBMzgxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxMUVDMTI3MUM1MEFBQ0EwMDMyRjk4MyAvKiBJREJTZXJp
YWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMUVDMTI1MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmNwcCAqLzsg
fTsKIAkJNTExRUMxMjgxQzUwQUFDQTAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVDMTI2MUM1MEFB
NTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi87IH07CkBAIC0yMjQxLDggKzIyNDEs
OCBAQAogCQk1MUE5RDlFQTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUU4MTk1Qjkz
MUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovOyB9OwogCQk1MUFBM0Y2RjBCRDVBQTlF
MDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3Vy
Y2VMb2FkZXJNYWMubW0gKi87IH07CiAJCTUxQUJBRTFCMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggKi87
IH07Ci0JCTUxQUJBRTFFMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAz
QzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUFCQUUxRjEwM0MxOTEzMDA4QzUyNjAg
LyogU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0
cmVhbUhhbmRsZUNGTmV0LmNwcCAqLzsgfTsKKwkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxD
Rk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUFCQUUxRDEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNw
cCAqLzsgfTsKIAkJNTFBQkY2NEQxNjM5MkUyODAwMTMyQTdBIC8qIExvYWRlclN0cmF0ZWd5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJGNjRD
MTYzOTJFMjgwMDEzMkE3QSAvKiBMb2FkZXJTdHJhdGVneS5jcHAgKi87IH07CiAJCTUxQUY1MDM2
MTZGMTAwRjYwMDk1QjJFOCAvKiBSZXNvdXJjZUxvYWRlclR5cGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFGNTAzNTE2RjEwMEY2MDA5NUIyRTgg
LyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxQjI0MTdCMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJB
cmNoaXZlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFCMjQxN0EwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gKi87
IH07CkBAIC05MzUyLDggKzkzNTIsOCBAQAogCQk1MTBBNThGRTFCQjA3QUE1MDBDMTkyODIgLyog
SURCQ29ubmVjdGlvblRvQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkNvbm5lY3Rpb25Ub0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJFMTAzMTY1RUUwMDQ5RUE1
NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTBENEEzMTEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFt
SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEwRDRBMzExMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUMxMjUxQzUwQUE1NzAw
MzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCU2VyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMUVDMTI2MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlNlcmlhbGl6YXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NjcsOCArOTU2Nyw4IEBACiAJCTUxQTlEOUU4MTk1
QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHYW1lcGFkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlck1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNv
Y2tldFN0cmVhbUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQUJBRTFD
MTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRT
dHJlYW1IYW5kbGVDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQUJB
RTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUFCRjY0QzE2MzkyRTI4MDAxMzJBN0EgLyogTG9hZGVyU3RyYXRlZ3ku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9hZGVyU3RyYXRlZ3ku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIy
RTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXNvdXJjZUxvYWRlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxQjI0MTdBMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTGVnYWN5V2ViQXJjaGl2ZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTczLDggKzE3OTczLDggQEAKIAkJ
CQk1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLywK
IAkJCQk1MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCAqLywKIAkJCQk1MTBENEEyRTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JC
YXNlLmggKi8sCi0JCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UuY3BwICovLAotCQkJCTUxMEQ0QTMxMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmggKi8sCisJCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNv
Y2tldFN0cmVhbUhhbmRsZS5jcHAgKi8sCisJCQkJNTEwRDRBMzExMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZS5oICovLAogCQkJCTUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLywKIAkJCQlFMTgwODExMDE2RkNGNDJFMDBC
ODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovLAogCQkJCUUxODA4MTE1MTZG
Q0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oICovLApAQCAtMjE4NzIs
OCArMjE4NzIsOCBAQAogCQkJCTdFRTY4NDVEMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJl
c3BvbnNlLmggKi8sCiAJCQkJN0VFNjg0NUUxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVz
cG9uc2VDRk5ldC5jcHAgKi8sCiAJCQkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUVycm9yLmggKi8sCi0JCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZS5oICovLAotCQkJCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgKi8sCisJCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYw
IC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCAqLywKKwkJCQk1MUFCQUUxRDEwM0MxOTEzMDA4
QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcCAqLywKIAkJCQk0NDJBQkNE
NTE3RDkyNjJGMDBEMzA3MTUgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAgKi8s
CiAJCQkJMjZGQUU0Q0ExODUyRTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8sCiAJCQkJMjZGQUU0Q0IxODUyRTNBNTAw
NEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZS5oICovLApAQCAtMjc1NzYsOCArMjc1NzYsOCBAQAogCQkJCTVDN0M4OEQ4MUQwRjFGNEEwMDlE
MkY2RCAvKiBTb2NrZXRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUIxMDND
MThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTBENEEzNDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFBQkFFMUUxMDNDMTkx
MzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxMEQ0QTM3MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMEQ0QTM4MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAv
KiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQzcwQUUwMzcwMzAwQTgy
NjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjIxLDggKzMxMjIxLDggQEAKIAkJ
CQlFNEFGRDAwRDBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUM2ODhBQTMxRDM4MTRCRjAwMEI1NEZBIC8qIFNvY2tldFByb3ZpZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwRDRBMzYxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1
MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDUzOTA0NzBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gaW4gU291cmNlcyAqLywK
IAkJCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk4NEE4MUYzRDBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAkocmV2
aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Tb2NrZXRQcm92aWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKFdFQl9TT0NL
RVRTKQogCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0
U3RyZWFtSGFuZGxlSW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBSZWY8U29j
a2V0U3RyZWFtSGFuZGxlPiBTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICByZXR1cm4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUo
dXJsLCBjbGllbnQsIHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OmNyZWF0ZSh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKTsKIH0KICAgICAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhh
bmRsZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDoyMDQ0NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIw
MTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKKworI2luY2x1ZGUgIlNvY2tldFN0cmVh
bUhhbmRsZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHVuc2lnbmVkIGludCBidWZmZXJTaXplID0gMTAwICog
MTAyNCAqIDEwMjQ7CisKK1NvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQor
ICAgIDogbV91cmwodXJsKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdGF0ZShD
b25uZWN0aW5nKQoreworfQorCitTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1T
dGF0ZSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3RhdGU7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZChjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmIChtX3N0YXRlID09IENvbm5lY3Rpbmcg
fHwgbV9zdGF0ZSA9PSBDbG9zaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFt
X2J1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0
aCA+IGJ1ZmZlclNpemUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8g
aW5kaWNhdGUgdGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIGxlbmd0
aCk7CisgICAgICAgIG1fY2xpZW50LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSY+KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKKyAgICBpZiAo
bV9zdGF0ZSA9PSBPcGVuKQorICAgICAgICBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQoZGF0
YSwgbGVuZ3RoKTsKKyAgICBpZiAoYnl0ZXNXcml0dGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX2J1ZmZlci5zaXplKCkgKyBsZW5ndGggLSBieXRlc1dyaXR0ZW4gPiBi
dWZmZXJTaXplKSB7CisgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8gaW5kaWNhdGUg
dGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA8IGxlbmd0aCkgeworICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoZGF0YSArIGJ5dGVzV3JpdHRlbiwgbGVuZ3RoIC0gYnl0ZXNXcml0dGVuKTsKKyAgICAg
ICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3Ry
ZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UoKQoreworICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUgPSBD
bG9zaW5nOworICAgIGlmICghbV9idWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgZGlzY29ubmVjdCgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmRpc2Nv
bm5lY3QoKQoreworICAgIGF1dG8gcHJvdGVjdCA9IG1ha2VSZWYoc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlJj4oKnRoaXMpKTsgLy8gcGxhdGZvcm1DbG9zZSBjYWxscyB0aGUgY2xpZW50
LCB3aGljaCBtYXkgbWFrZSB0aGUgaGFuZGxlIGdldCBkZWFsbG9jYXRlZCBpbW1lZGlhdGVseS4K
KworICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICBtX3N0YXRlID0gQ2xvc2VkOworfQorCitib29s
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmRQZW5kaW5nRGF0YSgpCit7CisgICAgaWYgKG1f
c3RhdGUgIT0gT3BlbiAmJiBtX3N0YXRlICE9IENsb3NpbmcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9idWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX3N0YXRlID09
IE9wZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX3N0YXRlID09
IENsb3NpbmcpIHsKKyAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIHBlbmRpbmc7CisgICAgZG8gewor
ICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gcGxhdGZvcm1TZW5kKG1fYnVmZmVyLmZpcnN0Qmxv
Y2tEYXRhKCksIG1fYnVmZmVyLmZpcnN0QmxvY2tTaXplKCkpOworICAgICAgICBwZW5kaW5nID0g
Ynl0ZXNXcml0dGVuICE9IHN0YXRpY19jYXN0PGludD4obV9idWZmZXIuZmlyc3RCbG9ja1NpemUo
KSk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyLnNpemUoKSAtIGJ5dGVzV3JpdHRlbiA8PSBi
dWZmZXJTaXplKTsKKyAgICAgICAgbV9idWZmZXIuY29uc3VtZShieXRlc1dyaXR0ZW4pOworICAg
IH0gd2hpbGUgKCFwZW5kaW5nICYmICFtX2J1ZmZlci5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50
LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSY+
KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1NvY2tldFN0cmVhbUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDI4ICsyOSwyNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KICNpbmNsdWRlICJT
b2NrZXRTdHJlYW1IYW5kbGUuaCIKKwogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IHVuc2lnbmVkIGludCBidWZmZXJT
aXplID0gMTAwICogMTAyNCAqIDEwMjQ7Citjb25zdCB1bnNpZ25lZCBidWZmZXJTaXplID0gMTAw
ICogMTAyNCAqIDEwMjQ7CiAKLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVhbUhh
bmRsZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50
KQorU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQogICAgIDogbV91cmwodXJsKQogICAg
ICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9zdGF0ZShDb25uZWN0aW5nKQogewogfQogCi1T
b2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1TdGF0ZSBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlOjpzdGF0ZSgpIGNvbnN0CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbVN0
YXRlIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0
YXRlOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ29ubmVjdGluZyB8
fCBtX3N0YXRlID09IENsb3NpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc5LDcgKzc4
LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kKGNvbnN0IAogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsb3NlKCkKK3ZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpjbG9zZSgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2Vk
KQogICAgICAgICByZXR1cm47CkBAIC04OSw3ICs4OCw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZTo6Y2xvc2UoKQogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVCYXNlOjpkaXNjb25uZWN0KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaXNj
b25uZWN0KCkKIHsKICAgICBhdXRvIHByb3RlY3QgPSBtYWtlUmVmKHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSY+KCp0aGlzKSk7IC8vIHBsYXRmb3JtQ2xvc2UgY2FsbHMgdGhlIGNsaWVu
dCwgd2hpY2ggbWF5IG1ha2UgdGhlIGhhbmRsZSBnZXQgZGVhbGxvY2F0ZWQgaW1tZWRpYXRlbHku
CiAKQEAgLTk3LDcgKzk2LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpkaXNjb25u
ZWN0KAogICAgIG1fc3RhdGUgPSBDbG9zZWQ7CiB9CiAKLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxl
QmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kUGVu
ZGluZ0RhdGEoKQogewogICAgIGlmIChtX3N0YXRlICE9IE9wZW4gJiYgbV9zdGF0ZSAhPSBDbG9z
aW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjIsNCArMTIxLDQgQEAgYm9vbCBTb2Nr
ZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kUGVuZGluZwogICAgIHJldHVybiB0cnVlOwogfQogCi19
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRs
ZS5oCShyZXZpc2lvbiAyMDQ0NjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oOjIwNDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRl
IDx3dGYvU3RyZWFtQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29j
a2V0U3RyZWFtSGFuZGxlOworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OworCitjbGFz
cyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFNvY2tldFN0cmVh
bVN0YXRlIHsgQ29ubmVjdGluZywgT3BlbiwgQ2xvc2luZywgQ2xvc2VkIH07CisgICAgdmlydHVh
bCB+U29ja2V0U3RyZWFtSGFuZGxlQmFzZSgpIHsgfQorICAgIFNvY2tldFN0cmVhbVN0YXRlIHN0
YXRlKCkgY29uc3Q7CisKKyAgICBib29sIHNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCk7CisgICAgdm9pZCBjbG9zZSgpOyAvLyBEaXNjb25uZWN0IGFmdGVyIGFsbCBkYXRhIGluIGJ1
ZmZlciBhcmUgc2VudC4KKyAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKyAgICBzaXplX3QgYnVmZmVy
ZWRBbW91bnQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KKworICAgIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KworcHJvdGVjdGVkOgorICAgIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UoY29uc3QgVVJMJiwgU29j
a2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CisKKyAgICBib29sIHNlbmRQZW5kaW5nRGF0YSgpOwor
ICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKSA9IDA7CisKKyAgICBVUkwg
bV91cmw7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBtX2NsaWVudDsKKyAgICBTdHJl
YW1CdWZmZXI8Y2hhciwgMTAyNCAqIDEwMjQ+IG1fYnVmZmVyOworICAgIFNvY2tldFN0cmVhbVN0
YXRlIG1fc3RhdGU7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5o
CShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Nv
Y2tldFN0cmVhbUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNiArMzMsMTYgQEAKIAog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJlYW1CdWZmZXIuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7CiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7
CiAKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgeworY2xhc3MgU29ja2V0U3RyZWFtSGFu
ZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4gewog
cHVibGljOgogICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBDb25uZWN0aW5nLCBPcGVuLCBD
bG9zaW5nLCBDbG9zZWQgfTsKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKCkg
eyB9CisgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCkgeyB9CiAgICAgU29ja2V0U3Ry
ZWFtU3RhdGUgc3RhdGUoKSBjb25zdDsKIAogICAgIGJvb2wgc2VuZChjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKTsKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIFNvY2tldFN0cmVh
bUhhbmRsZUNsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAogcHJv
dGVjdGVkOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UoY29uc3QgVVJMJiwgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50Jik7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwogCiAgICAgYm9vbCBzZW5kUGVuZGluZ0RhdGEoKTsK
ICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCkgPSAwOwpAQCAtNjUsNCArNjUsNCBAQCBwcm90ZWN0ZWQ6CiAgICAgU29ja2V0U3RyZWFtU3Rh
dGUgbV9zdGF0ZTsKIH07CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0
cmVhbUhhbmRsZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgotCi0jaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgdW5zaWduZWQgaW50IGJ1ZmZl
clNpemUgPSAxMDAgKiAxMDI0ICogMTAyNDsKLQotU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6U29j
a2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQpCi0gICAgOiBtX3VybCh1cmwpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0g
ICAgLCBtX3N0YXRlKENvbm5lY3RpbmcpCi17Ci19Ci0KLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6
OlNvY2tldFN0cmVhbVN0YXRlIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zdGF0ZTsKLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
OjpzZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1fc3RhdGUg
PT0gQ29ubmVjdGluZyB8fCBtX3N0YXRlID09IENsb3NpbmcpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV9idWZmZXIu
c2l6ZSgpICsgbGVuZ3RoID4gYnVmZmVyU2l6ZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHJl
cG9ydCBlcnJvciB0byBpbmRpY2F0ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2J1ZmZlci5hcHBl
bmQoZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91
bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3Vu
dCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGludCBieXRlc1dyaXR0ZW4g
PSAwOwotICAgIGlmIChtX3N0YXRlID09IE9wZW4pCi0gICAgICAgIGJ5dGVzV3JpdHRlbiA9IHBs
YXRmb3JtU2VuZChkYXRhLCBsZW5ndGgpOwotICAgIGlmIChieXRlc1dyaXR0ZW4gPCAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0aCAtIGJ5
dGVzV3JpdHRlbiA+IGJ1ZmZlclNpemUpIHsKLSAgICAgICAgLy8gRklYTUU6IHJlcG9ydCBlcnJv
ciB0byBpbmRpY2F0ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYnl0ZXNXcml0dGVuIDwgbGVuZ3RoKSB7Ci0gICAg
ICAgIG1fYnVmZmVyLmFwcGVuZChkYXRhICsgYnl0ZXNXcml0dGVuLCBsZW5ndGggLSBieXRlc1dy
aXR0ZW4pOwotICAgICAgICBtX2NsaWVudC5kaWRVcGRhdGVCdWZmZXJlZEFtb3VudChzdGF0aWNf
Y2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUmPigqdGhpcyksIGJ1ZmZlcmVkQW1vdW50KCkpOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpj
bG9zZSgpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2VkKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9zdGF0ZSA9IENsb3Npbmc7Ci0gICAgaWYgKCFtX2J1ZmZlci5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBkaXNjb25uZWN0KCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZTo6ZGlzY29ubmVjdCgpCi17Ci0gICAgYXV0byBwcm90ZWN0ID0gbWFrZVJlZihzdGF0
aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUmPigqdGhpcykpOyAvLyBwbGF0Zm9ybUNsb3NlIGNh
bGxzIHRoZSBjbGllbnQsIHdoaWNoIG1heSBtYWtlIHRoZSBoYW5kbGUgZ2V0IGRlYWxsb2NhdGVk
IGltbWVkaWF0ZWx5LgotCi0gICAgcGxhdGZvcm1DbG9zZSgpOwotICAgIG1fc3RhdGUgPSBDbG9z
ZWQ7Ci19Ci0KLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkK
LXsKLSAgICBpZiAobV9zdGF0ZSAhPSBPcGVuICYmIG1fc3RhdGUgIT0gQ2xvc2luZykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2J1ZmZlci5pc0VtcHR5KCkpIHsKLSAgICAgICAg
aWYgKG1fc3RhdGUgPT0gT3BlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKG1fc3RhdGUgPT0gQ2xvc2luZykgewotICAgICAgICAgICAgZGlzY29ubmVjdCgpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wgcGVuZGlu
ZzsKLSAgICBkbyB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQobV9i
dWZmZXIuZmlyc3RCbG9ja0RhdGEoKSwgbV9idWZmZXIuZmlyc3RCbG9ja1NpemUoKSk7Ci0gICAg
ICAgIHBlbmRpbmcgPSBieXRlc1dyaXR0ZW4gIT0gc3RhdGljX2Nhc3Q8aW50PihtX2J1ZmZlci5m
aXJzdEJsb2NrU2l6ZSgpKTsKLSAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA8PSAwKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBBU1NFUlQobV9idWZmZXIuc2l6ZSgpIC0gYnl0
ZXNXcml0dGVuIDw9IGJ1ZmZlclNpemUpOwotICAgICAgICBtX2J1ZmZlci5jb25zdW1lKGJ5dGVz
V3JpdHRlbik7Ci0gICAgfSB3aGlsZSAoIXBlbmRpbmcgJiYgIW1fYnVmZmVyLmlzRW1wdHkoKSk7
Ci0gICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAkocmV2
aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgPHd0Zi9TdHJlYW1CdWZmZXIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7Ci1j
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UgewotcHVibGljOgotICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBDb25uZWN0aW5n
LCBPcGVuLCBDbG9zaW5nLCBDbG9zZWQgfTsKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5k
bGVCYXNlKCkgeyB9Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgc3RhdGUoKSBjb25zdDsKLQotICAg
IGJvb2wgc2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLSAgICB2b2lkIGNsb3Nl
KCk7IC8vIERpc2Nvbm5lY3QgYWZ0ZXIgYWxsIGRhdGEgaW4gYnVmZmVyIGFyZSBzZW50LgotICAg
IHZvaWQgZGlzY29ubmVjdCgpOwotICAgIHNpemVfdCBidWZmZXJlZEFtb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQotCi0gICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
U29ja2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQmKTsKLQotICAgIGJvb2wgc2VuZFBlbmRpbmdEYXRhKCk7Ci0gICAgdmlydHVhbCBpbnQgcGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGxhdGZvcm1DbG9zZSgpID0gMDsKLQotICAgIFVSTCBtX3VybDsKLSAgICBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQmIG1fY2xpZW50OwotICAgIFN0cmVhbUJ1ZmZlcjxjaGFyLCAxMDI0
ICogMTAyND4gbV9idWZmZXI7Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgbV9zdGF0ZTsKLX07Ci0K
LX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24gMjA0NDY2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5k
bGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlNlc3Npb25JRC5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9fQ0ZIVFRQTWVzc2FnZSogQ0ZIVFRQTWVzc2FnZVJl
ZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDcmVkZW50aWFsOwotY2xhc3MgUHJv
dGVjdGlvblNwYWNlOwotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OwotCi1jbGFzcyBT
b2NrZXRTdHJlYW1IYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U29ja2V0U3Ry
ZWFtSGFuZGxlPiwgcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCwgc2Vzc2lv
bklEKSk7IH0KLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOwotCi1wcml2YXRl
OgotICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbG9zZSgpOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCYsIFNlc3Npb25JRCk7Ci0gICAgdm9pZCBjcmVhdGVTdHJlYW1zKCk7Ci0gICAgdm9pZCBz
Y2hlZHVsZVN0cmVhbXMoKTsKLSAgICB2b2lkIGNob29zZVByb3h5KCk7Ci0gICAgdm9pZCBjaG9v
c2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmKTsKLSAgICB2b2lkIGV4ZWN1dGVQQUNGaWxlVVJM
KENGVVJMUmVmKTsKLSAgICB2b2lkIHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKLSAgICBSZXRh
aW5QdHI8Q0ZSdW5Mb29wU291cmNlUmVmPiBtX3BhY1J1bkxvb3BTb3VyY2U7Ci0gICAgc3RhdGlj
IHZvaWQgcGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5
TGlzdCwgQ0ZFcnJvclJlZiBlcnJvcik7Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIGNvcHlQQUNF
eGVjdXRpb25EZXNjcmlwdGlvbih2b2lkKik7Ci0KLSAgICBib29sIHNob3VsZFVzZVNTTCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXJsLnByb3RvY29sSXMoIndzcyIpOyB9Ci0gICAgdW5zaWduZWQgc2hv
cnQgcG9ydCgpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQ
TWVzc2FnZVJlZiByZXNwb25zZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCogcmV0YWluU29ja2V0U3Ry
ZWFtSGFuZGxlKHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCByZWxlYXNlU29ja2V0U3RyZWFtSGFu
ZGxlKHZvaWQqKTsKLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weUNGU3RyZWFtRGVzY3JpcHRp
b24odm9pZCopOwotICAgIHN0YXRpYyB2b2lkIHJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJl
YW1SZWYsIENGU3RyZWFtRXZlbnRUeXBlLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgd3JpdGVT
dHJlYW1DYWxsYmFjayhDRldyaXRlU3RyZWFtUmVmLCBDRlN0cmVhbUV2ZW50VHlwZSwgdm9pZCop
OwotICAgIHZvaWQgcmVhZFN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlKTsKLSAgICB2
b2lkIHdyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUpOwotCi0gICAgdm9pZCBy
ZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYpOwotCi0gICAgYm9vbCBnZXRTdG9yZWRDT05O
RUNUUHJveHlDcmVkZW50aWFscyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBTdHJpbmcmIGxvZ2lu
LCBTdHJpbmcmIHBhc3N3b3JkKTsKLQotICAgIGVudW0gQ29ubmVjdGluZ1N1YnN0YXRlIHsgTmV3
LCBFeGVjdXRpbmdQQUNGaWxlLCBXYWl0aW5nRm9yQ3JlZGVudGlhbHMsIFdhaXRpbmdGb3JDb25u
ZWN0LCBDb25uZWN0ZWQgfTsKLSAgICBDb25uZWN0aW5nU3Vic3RhdGUgbV9jb25uZWN0aW5nU3Vi
c3RhdGU7Ci0KLSAgICBlbnVtIENvbm5lY3Rpb25UeXBlIHsgVW5rbm93biwgRGlyZWN0LCBTT0NL
U1Byb3h5LCBDT05ORUNUUHJveHkgfTsKLSAgICBDb25uZWN0aW9uVHlwZSBtX2Nvbm5lY3Rpb25U
eXBlOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbV9wcm94eUhvc3Q7Ci0gICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBtX3Byb3h5UG9ydDsKLQotICAgIFJldGFpblB0cjxDRkhUVFBNZXNz
YWdlUmVmPiBtX3Byb3h5UmVzcG9uc2VNZXNzYWdlOwotICAgIGJvb2wgbV9zZW50U3RvcmVkQ3Jl
ZGVudGlhbHM7Ci0gICAgUmV0YWluUHRyPENGUmVhZFN0cmVhbVJlZj4gbV9yZWFkU3RyZWFtOwot
ICAgIFJldGFpblB0cjxDRldyaXRlU3RyZWFtUmVmPiBtX3dyaXRlU3RyZWFtOwotCi0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBtX2h0dHBzVVJMOyAvLyB3cyhzKTogcmVwbGFjZWQgd2l0aCBodHRw
czoKLSAgICBTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFu
ZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDcwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJDcmVkZW50
aWFsLmgiCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUHJvdGVj
dGlvblNwYWNlLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJl
YW1FcnJvci5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2luY2x1
ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQ
TEFURk9STShJT1MpCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCi0jaW5jbHVk
ZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbHNlCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1B
QykKLWV4dGVybiAiQyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tDRlN0cmVhbVNvY2tldFNldE5vRGVs
YXk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2ltcG9ydCA8Q0ZOZXR3b3JrU1BJ
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlKHVybCwgY2xpZW50KQotICAgICwgbV9jb25uZWN0aW5nU3Vic3RhdGUoTmV3KQotICAg
ICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQotICAgICwgbV9zZW50U3RvcmVkQ3JlZGVudGlh
bHMoZmFsc2UpCi0gICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi17Ci0gICAgTE9HKE5ldHdv
cmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2NsaWVu
dCk7Ci0KLSAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoIndzIikgfHwgdXJsLnByb3RvY29sSXMo
IndzcyIpKTsKLQotICAgIFVSTCBodHRwc1VSTChVUkwoKSwgImh0dHBzOi8vIiArIG1fdXJsLmhv
c3QoKSk7Ci0gICAgbV9odHRwc1VSTCA9IGh0dHBzVVJMLmNyZWF0ZUNGVVJMKCk7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICAvLyBEb24ndCBjaGVjayBmb3IgSFNUUyB2aW9sYXRpb24gZm9y
IGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZQotICAgIC8vIEhTVFMgc3RhdGUgc2hvdWxkIG5vdCB0
cmFuc2ZlciBiZXR3ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUgYnJvd3NpbmcuCi0gICAgaWYgKHVy
bC5wcm90b2NvbElzKCJ3cyIpCi0gICAgICAgICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKQot
ICAgICAgICAmJiBfQ0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0V2l0aFNlc3Npb24obV9odHRwc1VS
TC5nZXQoKSwgbnVsbHB0cikpIHsKLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQg
Y29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRlcyBIVFRQIFN0cmljdCBUcmFuc3Bv
cnQgU2VjdXJpdHkuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBj
cmVhdGVTdHJlYW1zKCk7Ci0gICAgQVNTRVJUKCFtX3JlYWRTdHJlYW0gPT0gIW1fd3JpdGVTdHJl
YW0pOwotICAgIGlmICghbV9yZWFkU3RyZWFtKSAvLyBEb2luZyBhc3luY2hyb25vdXMgUEFDIGZp
bGUgcHJvY2Vzc2luZywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0ZWQgbGF0ZXIuCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNjaGVkdWxlU3RyZWFtcygpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6c2NoZWR1bGVTdHJlYW1zKCkKLXsKLSAgICBBU1NFUlQobV9yZWFkU3RyZWFtKTsKLSAg
ICBBU1NFUlQobV93cml0ZVN0cmVhbSk7Ci0KLSAgICBDRlN0cmVhbUNsaWVudENvbnRleHQgY2xp
ZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0YWluU29ja2V0U3RyZWFtSGFuZGxlLCByZWxlYXNl
U29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbiB9OwotICAgIC8vIEZJ
WE1FOiBQYXNzIHNwZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRlcmVzdGVkIGluIGluc3RlYWQgb2Yg
LTEuCi0gICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVhZFN0cmVhbS5nZXQoKSwgc3RhdGlj
X2Nhc3Q8Q0ZPcHRpb25GbGFncz4oLTEpLCByZWFkU3RyZWFtQ2FsbGJhY2ssICZjbGllbnRDb250
ZXh0KTsKLSAgICBDRldyaXRlU3RyZWFtU2V0Q2xpZW50KG1fd3JpdGVTdHJlYW0uZ2V0KCksIHN0
YXRpY19jYXN0PENGT3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVTdHJlYW1DYWxsYmFjaywgJmNsaWVu
dENvbnRleHQpOwotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIENGUmVhZFN0cmVhbVNjaGVkdWxl
V2l0aFJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxv
b3BEZWZhdWx0TW9kZSk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3AobV93
cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUp
OwotI2Vsc2UKLSAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fcmVhZFN0cmVh
bS5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwot
ICAgIENGV3JpdGVTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fd3JpdGVTdHJlYW0uZ2V0KCks
IENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSNlbmRpZgot
Ci0gICAgQ0ZSZWFkU3RyZWFtT3BlbihtX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIENGV3JpdGVT
dHJlYW1PcGVuKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOwotCi0gICAgaWYgKG1fcGFjUnVuTG9vcFNv
dXJjZSkKLSAgICAgICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOwotCi0gICAgbV9jb25uZWN0
aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKLX0KLQotdm9pZCogU29ja2V0U3RyZWFt
SGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5mbykKLXsKLSAgICBTb2Nr
ZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+
KGluZm8pOwotICAgIGhhbmRsZS0+cmVmKCk7Ci0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5m
bykKLXsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSo+KGluZm8pOwotICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQotQ0ZTdHJp
bmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24odm9p
ZCopCi17Ci0gICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQgcHJveHkgUEFDIGZpbGUgZXhlY3V0
aW9uIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCi17Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMb2NrIG11
dGV4OwotICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJsZTsKLQotICAgIGJvb2wgaXNGaW5p
c2hlZCA9IGZhbHNlOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbJl0gewotICAgICAgICBmdW5j
dGlvbigpOwotCi0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG11dGV4KTsKLSAg
ICAgICAgaXNGaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIGNvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eU9uZSgpOwotICAgIH0pOwotCi0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG11dGV4
KTsKLSAgICBjb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFsmXSB7IHJldHVybiBpc0Zpbmlz
aGVkOyB9KTsKLX0KLQotc3RydWN0IE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8gewotICAgIE1h
aW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUsIENGQXJy
YXlSZWYgcHJveHlMaXN0KSA6IGhhbmRsZShoYW5kbGUpLCBwcm94eUxpc3QocHJveHlMaXN0KSB7
IH0KLSAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBoYW5kbGU7Ci0gICAgQ0ZBcnJheVJl
ZiBwcm94eUxpc3Q7Ci19OwotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGFjRXhlY3V0aW9u
Q2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZikK
LXsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0
cmVhbUhhbmRsZSo+KGNsaWVudCk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbJl0g
ewotICAgICAgICBBU1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBFeGVjdXRp
bmdQQUNGaWxlKTsKLSAgICAgICAgLy8gVGhpcyB0aW1lLCB0aGUgYXJyYXkgd29uJ3QgaGF2ZSBQ
QUMgYXMgYSBmaXJzdCBlbnRyeS4KLSAgICAgICAgaWYgKGhhbmRsZS0+bV9zdGF0ZSAhPSBDb25u
ZWN0aW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBoYW5kbGUtPmNob29zZVByb3h5
RnJvbUFycmF5KHByb3h5TGlzdCk7Ci0gICAgICAgIGhhbmRsZS0+Y3JlYXRlU3RyZWFtcygpOwot
ICAgICAgICBoYW5kbGUtPnNjaGVkdWxlU3RyZWFtcygpOwotICAgIH0pOwotfQotCi12b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkK
LXsKLSAgICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3IgV2Vi
U29ja2V0IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgotICAgIENGU3RyZWFtQ2xpZW50Q29u
dGV4dCBjbGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUs
IHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbiB9
OwotICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrRXhlY3V0ZVByb3h5
QXV0b0NvbmZpZ3VyYXRpb25VUkwocGFjRmlsZVVSTCwgbV9odHRwc1VSTC5nZXQoKSwgcGFjRXhl
Y3V0aW9uQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KSk7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAg
IENGUnVuTG9vcEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5n
ZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgQ0ZSdW5Mb29wQWRkU291
cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOwotI2VuZGlmCi0gICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBF
eGVjdXRpbmdQQUNGaWxlOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVtb3ZlUEFD
UnVuTG9vcFNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKG1fcGFjUnVuTG9vcFNvdXJjZSk7Ci0KLSAg
ICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSk7Ci0j
aWYgUExBVEZPUk0oV0lOKQotICAgIENGUnVuTG9vcFJlbW92ZVNvdXJjZShsb2FkZXJSdW5Mb29w
KCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNl
bHNlCi0gICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9w
YWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotI2VuZGlmCi0g
ICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OmNob29zZVByb3h5KCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eURp
Y3Rpb25hcnkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdzKCkpOwot
Ci0gICAgLy8gU09DS1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNUKSBwcm94aWVzIGFyZSBzdXBwb3J0
ZWQuCi0gICAgLy8gV2ViU29ja2V0IHByb3RvY29sIHJlbGllcyBvbiBoYW5kc2hha2UgYmVpbmcg
dHJhbnNmZXJyZWQgdW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEgcHJveHkgdGhhdCB3aWxsIG5vdCBt
b2RpZnkgaGVhZGVycy4KLSAgICAvLyBTaW5jZSBIVFRQIHByb3hpZXMgbXVzdCBhZGQgVmlhIGhl
YWRlcnMsIHRoZXkgYXJlIGhpZ2hseSB1bmxpa2VseSB0byB3b3JrLgotICAgIC8vIE1hbnkgQ09O
TkVDVCBwcm94aWVzIGxpbWl0IGNvbm5lY3Rpdml0eSB0byBwb3J0IDQ0Mywgc28gd2UgcHJlZmVy
IFNPQ0tTLCBpZiBjb25maWd1cmVkLgotCi0gICAgaWYgKCFwcm94eURpY3Rpb25hcnkpIHsKLSAg
ICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJMIGRvZXNuJ3Qga25vdyBhYm91dCBX
ZWJTb2NrZXQgc2NoZW1lcywgc28gcHJldGVuZCB0byB1c2UgaHR0cC4KLSAgICAvLyBBbHdheXMg
dXNlICJodHRwcyIgdG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4gcmVzdWx0IC0gd2UnbGwgdHJ5IHRv
IHVzZSB0aG9zZSBmb3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFueSBhcmUgY29uZmlndXJlZCB0byBy
ZWplY3QgY29ubmVjdGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhhbiA0NDMuCi0gICAgUmV0YWluUHRy
PENGQXJyYXlSZWY+IHByb3h5QXJyYXkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlQcm94aWVzRm9y
VVJMKG1faHR0cHNVUkwuZ2V0KCksIHByb3h5RGljdGlvbmFyeS5nZXQoKSkpOwotCi0gICAgY2hv
b3NlUHJveHlGcm9tQXJyYXkocHJveHlBcnJheS5nZXQoKSk7Ci19Ci0KLXZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpjaG9vc2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkpCi17
Ci0gICAgaWYgKCFwcm94eUFycmF5KSB7Ci0gICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBEaXJl
Y3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDRkluZGV4IHByb3h5QXJyYXlDb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChwcm94eUFycmF5KTsKLQotICAgIC8vIFBBQyBpcyBhbHdheXMg
dGhlIGZpcnN0IGVudHJ5LCBpZiBwcmVzZW50LgotICAgIGlmIChwcm94eUFycmF5Q291bnQpIHsK
LSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9IHN0YXRpY19jYXN0PENGRGljdGlv
bmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwcm94eUFycmF5LCAwKSk7Ci0gICAgICAg
IENGVHlwZVJlZiBwcm94eVR5cGUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm94eUluZm8sIGtD
RlByb3h5VHlwZUtleSk7Ci0gICAgICAgIGlmIChwcm94eVR5cGUgJiYgQ0ZHZXRUeXBlSUQocHJv
eHlUeXBlKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Ci0gICAgICAgICAgICBpZiAoQ0ZFcXVh
bChwcm94eVR5cGUsIGtDRlByb3h5VHlwZUF1dG9Db25maWd1cmF0aW9uVVJMKSkgewotICAgICAg
ICAgICAgICAgIENGVHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
eHlJbmZvLCBrQ0ZQcm94eUF1dG9Db25maWd1cmF0aW9uVVJMS2V5KTsKLSAgICAgICAgICAgICAg
ICBpZiAocGFjRmlsZVVSTCAmJiBDRkdldFR5cGVJRChwYWNGaWxlVVJMKSA9PSBDRlVSTEdldFR5
cGVJRCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVQQUNGaWxlVVJMKHN0YXRpY19j
YXN0PENGVVJMUmVmPihwYWNGaWxlVVJMKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBDRkRpY3Rpb25hcnlSZWYgY2hvc2VuUHJveHkgPSAwOwotICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IHByb3h5QXJyYXlDb3VudDsgKytpKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBw
cm94eUluZm8gPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgocHJveHlBcnJheSwgaSkpOwotICAgICAgICBDRlR5cGVSZWYgcHJveHlUeXBlID0gQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eVR5cGVLZXkpOwotICAgICAgICBp
ZiAocHJveHlUeXBlICYmIENGR2V0VHlwZUlEKHByb3h5VHlwZSkgPT0gQ0ZTdHJpbmdHZXRUeXBl
SUQoKSkgewotICAgICAgICAgICAgaWYgKENGRXF1YWwocHJveHlUeXBlLCBrQ0ZQcm94eVR5cGVT
T0NLUykpIHsKLSAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rpb25UeXBlID0gU09DS1NQcm94eTsK
LSAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChDRkVxdWFsKHByb3h5VHlw
ZSwga0NGUHJveHlUeXBlSFRUUFMpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb25uZWN0aW9uVHlw
ZSA9IENPTk5FQ1RQcm94eTsKLSAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5m
bzsKLSAgICAgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcgZm9yIHByb3hpZXMsIGFzIGEgU09D
S1Mgb25lIGlzIHByZWZlcmFibGUuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoY2hvc2VuUHJveHkpIHsKLSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGlvblR5cGUg
IT0gVW5rbm93bik7Ci0gICAgICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25UeXBlICE9IERpcmVjdCk7
Ci0KLSAgICAgICAgQ0ZUeXBlUmVmIHByb3h5SG9zdCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNo
b3NlblByb3h5LCBrQ0ZQcm94eUhvc3ROYW1lS2V5KTsKLSAgICAgICAgQ0ZUeXBlUmVmIHByb3h5
UG9ydCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eVBvcnROdW1i
ZXJLZXkpOwotCi0gICAgICAgIGlmIChwcm94eUhvc3QgJiYgQ0ZHZXRUeXBlSUQocHJveHlIb3N0
KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpICYmIHByb3h5UG9ydCAmJiBDRkdldFR5cGVJRChwcm94
eVBvcnQpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKLSAgICAgICAgICAgIG1fcHJveHlIb3N0
ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9zdCk7Ci0gICAgICAgICAgICBtX3By
b3h5UG9ydCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihwcm94eVBvcnQpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uVHlwZSA9IERp
cmVjdDsKLX0KLQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygpCi17
Ci0gICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gVW5rbm93bikKLSAgICAgICAgY2hvb3NlUHJv
eHkoKTsKLQotICAgIC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93biwgdGhlbiB3ZSdyZSByZXNvbHZp
bmcgYSBQQUMgZmlsZSBhc3luY2hyb25vdXNseS4KLSAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9
PSBVbmtub3duKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGhvc3QgPSBtX3VybC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLQotICAgIC8vIENyZWF0aW5n
IHN0cmVhbXMgdG8gZmluYWwgZGVzdGluYXRpb24sIG5vdCB0byBwcm94eS4KLSAgICBDRlJlYWRT
dHJlYW1SZWYgcmVhZFN0cmVhbSA9IDA7Ci0gICAgQ0ZXcml0ZVN0cmVhbVJlZiB3cml0ZVN0cmVh
bSA9IDA7Ci0gICAgQ0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNvY2tldFRvSG9zdCgwLCBob3N0Lmdl
dCgpLCBwb3J0KCksICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJlYW0pOwotI2lmIFBMQVRGT1JNKElP
UykgfHwgUExBVEZPUk0oTUFDKQotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMjg1NTU4Nz4gX2tD
RlN0cmVhbVNvY2tldFNldE5vRGVsYXkgaXMgbm90IGV4cG9ydGVkIG9uIFdpbmRvd3MKLSAgICBD
RldyaXRlU3RyZWFtU2V0UHJvcGVydHkod3JpdGVTdHJlYW0sIF9rQ0ZTdHJlYW1Tb2NrZXRTZXRO
b0RlbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0jZW5kaWYKLQotICAgIG1fcmVhZFN0cmVhbSA9IGFk
b3B0Q0YocmVhZFN0cmVhbSk7Ci0gICAgbV93cml0ZVN0cmVhbSA9IGFkb3B0Q0Yod3JpdGVTdHJl
YW0pOwotCi0gICAgc3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBlKSB7Ci0gICAgY2FzZSBVbmtub3du
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBEaXJlY3Q6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU09DS1NQcm94eTogewotICAgICAg
ICAvLyBGSVhNRTogU09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxlbmdlLXJlc3BvbnNlLCBzaG91bGQg
d2UgdHJ5IHRvIGFwcGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5Y2hhaW4gcmlnaHQgYXdheT8KLSAg
ICAgICAgLy8gQnV0IFNPQ0tTNSBjcmVkZW50aWFscyBkb24ndCB3b3JrIGF0IHRoZSB0aW1lIG9m
IHRoaXMgd3JpdGluZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3NzY2OTg+LgotICAgICAgICBjb25z
dCB2b2lkKiBwcm94eUtleXNbXSA9IHsga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5SG9zdCwg
a0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5UG9ydCB9OwotICAgICAgICBjb25zdCB2b2lkKiBw
cm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkgfTsK
LSAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29ubmVjdERpY3Rpb25hcnkgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtleXMsIHByb3h5VmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKHByb3h5S2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgQ0ZSZWFkU3RyZWFt
U2V0UHJvcGVydHkobV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZTdHJlYW1Qcm9wZXJ0eVNPQ0tTUHJv
eHksIGNvbm5lY3REaWN0aW9uYXJ5LmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICBjYXNlIENPTk5FQ1RQcm94eToKLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlGb3JTdHJl
YW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkVXNlU1NMKCkpIHsK
LSAgICAgICAgQ0ZCb29sZWFuUmVmIHZhbGlkYXRlQ2VydGlmaWNhdGVDaGFpbiA9IFNldHRpbmdz
OjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9vbGVhbkZhbHNlIDoga0NGQm9vbGVh
blRydWU7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9IHsga0NGU3RyZWFtU1NMUGVlck5h
bWUsIGtDRlN0cmVhbVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZpY2F0ZUNo
YWluIH07Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBob3N0LmdldCgpLCBrQ0ZT
dHJlYW1Tb2NrZXRTZWN1cml0eUxldmVsTmVnb3RpYXRlZFNTTCwgdmFsaWRhdGVDZXJ0aWZpY2F0
ZUNoYWluIH07Ci0gICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNldHRpbmdzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVO
R1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgIENGUmVhZFN0cmVhbVNldFByb3BlcnR5KG1f
cmVhZFN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3Mu
Z2V0KCkpOwotICAgICAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkobV93cml0ZVN0cmVhbS5n
ZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOwotICAg
IH0KLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OmdldFN0b3JlZENPTk5FQ1RQcm94eUNy
ZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBTdHJpbmcm
IGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQotewotICAgIC8vIEZJWE1FICg8cmRhcjovL3Byb2Js
ZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9t
IEF1dGhCcm9rZXJBZ2VudC4KLQotICAgIC8vIFRyeSBzeXN0ZW0gY3JlZGVudGlhbCBzdG9yYWdl
IGZpcnN0LCBtYXRjaGluZyBIVFRQIGJlaGF2aW9yIChDRk5ldHdvcmsgb25seSBhc2tzIHRoZSBj
bGllbnQgZm9yIHBhc3N3b3JkIGlmIGl0IGNvdWxkbid0IGZpbmQgaXQgaW4gS2V5Y2hhaW4pLgot
ICAgIENyZWRlbnRpYWwgc3RvcmVkQ3JlZGVudGlhbDsKLSAgICBpZiAoYXV0byogc3RvcmFnZVNl
c3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklE
KSkgewotICAgICAgICBzdG9yZWRDcmVkZW50aWFsID0gc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRp
YWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSk7Ci0g
ICAgICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHN0b3Jl
ZENyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocHJv
dGVjdGlvblNwYWNlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGxvZ2luID0gc3RvcmVkQ3JlZGVudGlh
bC51c2VyKCk7Ci0gICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVkZW50aWFsLnBhc3N3b3JkKCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0
aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1dGhlbnRpY2F0aW9uTWV0aG9kKENG
U3RyaW5nUmVmIG1ldGhvZCkKLXsKLSAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRo
ZW50aWNhdGlvblNjaGVtZUJhc2ljKSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOwotICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NG
SFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lRGlnZXN0KSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKLSAgICBpZiAoQ0ZFcXVhbCht
ZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5UTE0pKQotICAgICAgICByZXR1cm4g
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOwotICAgIGlmIChDRkVxdWFs
KG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlKSkKLSAgICAgICAg
cmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlOwotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZVVua25vd247Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjphZGRD
T05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBwcm94eVJlc3BvbnNlKQotewotICAg
IFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4gYXV0aGVudGljYXRpb24gPSBhZG9w
dENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJlc3BvbnNlKDAsIHByb3h5UmVzcG9u
c2UpKTsKLQotICAgIGlmICghQ0ZIVFRQQXV0aGVudGljYXRpb25SZXF1aXJlc1VzZXJOYW1lQW5k
UGFzc3dvcmQoYXV0aGVudGljYXRpb24uZ2V0KCkpKSB7Ci0gICAgICAgIC8vIFRoYXQncyBhbGwg
d2UgY2FuIG9mZmVyLi4uCi0gICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRo
aXMsIFNvY2tldFN0cmVhbUVycm9yKDAsIG1fdXJsLnN0cmluZygpLCAiUHJveHkgYXV0aGVudGlj
YXRpb24gc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdlYlNvY2tldHMiKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgcG9ydCA9IDA7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1
ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlwZSwgJnBvcnQpOwotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9u
Q29weU1ldGhvZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gcmVhbG1DRiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVudGljYXRpb25Db3B5UmVhbG0oYXV0
aGVudGljYXRpb24uZ2V0KCkpKTsKLQotICAgIGlmICghbWV0aG9kQ0YgfHwgIXJlYWxtQ0YpIHsK
LSAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgb24gc29tZSBPUyB2ZXJzaW9u
cyB3ZSBnZXQgaW5jb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBkYXRhLCBzZWUgPHJkYXI6Ly9wcm9i
bGVtLzEwNDE2MzE2Pi4KLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhp
cywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQgcHJveHkg
YXV0aGVudGljYXRpb24gY291bGRuJ3QgYmUgaGFuZGxlZCIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UoU3RyaW5nKG1fcHJv
eHlIb3N0LmdldCgpKSwgcG9ydCwgUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUywgU3RyaW5nKHJl
YWxtQ0YuZ2V0KCkpLCBhdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhv
ZChtZXRob2RDRi5nZXQoKSkpOwotICAgIFN0cmluZyBsb2dpbjsKLSAgICBTdHJpbmcgcGFzc3dv
cmQ7Ci0gICAgaWYgKCFtX3NlbnRTdG9yZWRDcmVkZW50aWFscyAmJiBnZXRTdG9yZWRDT05ORUNU
UHJveHlDcmVkZW50aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxvZ2luLCBwYXNzd29yZCkpIHsKLSAg
ICAgICAgLy8gVHJ5IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50aWFscywgaWYgd2UgaGF2ZW4ndCB0
cmllZCB0aG9zZSBhbHJlYWR5LgotICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgcmVxdWVz
dCB0byBtYWtlIENGTmV0d29yayBhcHBseSBjcmVkZW50aWFscyB0byBpdC4gVW5mb3J0dW5hdGVs
eSwgdGhpcyBjYW5ub3Qgd29yayB3aXRoIE5UTE0gYXV0aGVudGljYXRpb24uCi0gICAgICAgIFJl
dGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBkdW1teVJlcXVlc3QgPSBhZG9wdENGKENGSFRUUE1l
c3NhZ2VDcmVhdGVSZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwgbV9odHRwc1VSTC5nZXQoKSwga0NG
SFRUUFZlcnNpb24xXzEpKTsKLQotICAgICAgICBCb29sZWFuIGFwcGxpZWRDcmVkZW50aWFscyA9
IENGSFRUUE1lc3NhZ2VBcHBseUNyZWRlbnRpYWxzKGR1bW15UmVxdWVzdC5nZXQoKSwgYXV0aGVu
dGljYXRpb24uZ2V0KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHBhc3N3b3JkLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFwcGxpZWRD
cmVkZW50aWFscywgYXBwbGllZENyZWRlbnRpYWxzKTsKLQotICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyA9IGFkb3B0Q0YoQ0ZIVFRQTWVzc2Fn
ZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIlByb3h5LUF1
dGhvcml6YXRpb24iKSkpOwotCi0gICAgICAgIGlmICghcHJveHlBdXRob3JpemF0aW9uU3RyaW5n
KSB7Ci0gICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBOVExNIGF1dGguCi0gICAgICAgICAg
ICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcigw
LCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBpcyBub3Qgc3Vw
cG9ydGVkIGZvciBXZWJTb2NrZXRzIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiByZXN1bHRzIGluIGEgbmV3
IGNvbm5lY3Rpb24gYXR0ZW1wdC4KLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlBdXRob3JpemF0
aW9uRm9yU3RyZWFtKG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJveHlBdXRob3JpemF0aW9uU3RyaW5n
LmdldCgpKTsKLSAgICAgICAgbV9zZW50U3RvcmVkQ3JlZGVudGlhbHMgPSB0cnVlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IE9uIHBsYXRmb3JtcyB3aGVyZSBBdXRo
QnJva2VyQWdlbnQgaXMgbm90IGF2YWlsYWJsZSwgYXNrIHRoZSBjbGllbnQgaWYgY3JlZGVudGlh
bHMgY291bGQgbm90IGJlIGZvdW5kLgotCi0gICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJQcm94eSBjcmVk
ZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKLX0KLQotQ0ZTdHJpbmdSZWYgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQotewotICAgIFNv
Y2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxl
Kj4oaW5mbyk7Ci0gICAgcmV0dXJuIFN0cmluZygiV2ViS2l0IHNvY2tldCBzdHJlYW0sICIgKyBo
YW5kbGUtPm1fdXJsLnN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpLmxlYWtSZWYoKTsKLX0KLQot
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJlYW1S
ZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0lu
Zm8pCi17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2Nr
ZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIC8vIFdv
cmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3Mz4uIEtlZXBpbmcgdGhpcyBiZWxv
dyB0aGUgYXNzZXJ0aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIgc3RlcHMgdG8gcmVwcm9kdWNlIHRo
aXMuCi0gICAgaWYgKCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkKLSAgICAgICAgcmV0dXJuOwotCi0j
aWYgUExBVEZPUk0oV0lOKQotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3Rv
cihoYW5kbGUpOwotICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFsmXSB7Ci0gICAgICAgIGlm
IChoYW5kbGUtPm1fcmVhZFN0cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNh
bGxiYWNrKHR5cGUpOwotICAgIH0pOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOwotI2VuZGlmCi19Ci0KLXZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVTdHJlYW1S
ZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0lu
Zm8pCi17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2Nr
ZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dyaXRlU3RyZWFtLmdldCgpKTsKLSAgICAvLyBU
aGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBwcmFjdGljZSwgeWV0IGl0IHNlZW1zIGxpa2Ug
aXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQgc3RyZWFtIGNhbGxiYWNrLgotICAg
IGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdG9yKGhhbmRs
ZSk7Ci0gICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZdIHsKLSAgICAgICAgaWYgKGhhbmRs
ZS0+bV93cml0ZVN0cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+d3JpdGVTdHJlYW1DYWxsYmFj
ayh0eXBlKTsKLSAgICB9KTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBoYW5kbGUtPndyaXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSB0
eXBlKQotewotICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE5vbmU6
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50T3BlbkNvbXBsZXRlZDoK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJs
ZTogewotICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gV2FpdGluZ0ZvckNyZWRl
bnRpYWxzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX2Nvbm5lY3RpbmdT
dWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ29ubmVjdCkgewotICAgICAgICAgICAgaWYgKG1fY29ubmVj
dGlvblR5cGUgPT0gQ09OTkVDVFByb3h5KSB7Ci0gICAgICAgICAgICAgICAgUmV0YWluUHRyPENG
SFRUUE1lc3NhZ2VSZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9wdENGKHdrQ29weUNPTk5FQ1RQcm94
eVJlc3BvbnNlKG1fcmVhZFN0cmVhbS5nZXQoKSwgbV9odHRwc1VSTC5nZXQoKSwgbV9wcm94eUhv
c3QuZ2V0KCksIG1fcHJveHlQb3J0LmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm94
eVJlc3BvbnNlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAg
ICBDRkluZGV4IHByb3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3Rh
dHVzQ29kZShwcm94eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBy
b3h5UmVzcG9uc2VDb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyMDA6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0MDc6Ci0gICAgICAgICAgICAgICAgICAgIGFk
ZENPTk5FQ1RDcmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9y
KHN0YXRpY19jYXN0PGludD4ocHJveHlSZXNwb25zZUNvZGUpLCBtX3VybC5zdHJpbmcoKSwgIlBy
b3h5IGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCB1bmV4cGVjdGVkIHJlc3Bv
bnNlIGNvZGUiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwotICAgICAgICAg
ICAgbV9zdGF0ZSA9IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3Ry
ZWFtKCp0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdl
IGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2Ug
dGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsKLSAgICAgICAg
QVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAgICAgICAgQ0ZJ
bmRleCBsZW5ndGg7Ci0gICAgICAgIFVJbnQ4IGxvY2FsQnVmZmVyWzEwMjRdOyAvLyBVc2VkIGlm
IENGUmVhZFN0cmVhbUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1cm4gYW55dGhpbmcuCi0gICAgICAg
IGNvbnN0IFVJbnQ4KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRCdWZmZXIobV9yZWFkU3RyZWFtLmdl
dCgpLCAwLCAmbGVuZ3RoKTsKLSAgICAgICAgaWYgKCFwdHIpIHsKLSAgICAgICAgICAgIGxlbmd0
aCA9IENGUmVhZFN0cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdldCgpLCBsb2NhbEJ1ZmZlciwgc2l6
ZW9mKGxvY2FsQnVmZmVyKSk7Ci0gICAgICAgICAgICBwdHIgPSBsb2NhbEJ1ZmZlcjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBsZW5ndGgpOwotCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZl
bnRFcnJvck9jY3VycmVkOiB7Ci0gICAgICAgIFJldGFpblB0cjxDRkVycm9yUmVmPiBlcnJvciA9
IGFkb3B0Q0YoQ0ZSZWFkU3RyZWFtQ29weUVycm9yKG1fcmVhZFN0cmVhbS5nZXQoKSkpOwotICAg
ICAgICByZXBvcnRFcnJvclRvQ2xpZW50KGVycm9yLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIHBs
YXRmb3JtQ2xvc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSkK
LXsKLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnROb25lOgotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50SGFzQnl0ZXNBdmFpbGFibGU6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBr
Q0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOiB7Ci0gICAgICAgIC8vIENhbiBiZSBmYWxzZSBp
ZiByZWFkIHN0cmVhbSBjYWxsYmFjayBqdXN0IGRlY2lkZWQgdG8gcmV0cnkgYSBDT05ORUNUIHdp
dGggY3JlZGVudGlhbHMuCi0gICAgICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVz
KG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ3JlZGVudGlhbHMpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IFdhaXRp
bmdGb3JDb25uZWN0KSB7Ci0gICAgICAgICAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9PSBDT05O
RUNUUHJveHkpIHsKLSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJlZj4g
cHJveHlSZXNwb25zZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UobV9yZWFk
U3RyZWFtLmdldCgpLCBtX2h0dHBzVVJMLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94
eVBvcnQuZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3h5UmVzcG9uc2UpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIC8vIERvbid0IHdyaXRl
IGFueXRoaW5nIHVudGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGhhcyBkZWFsdCB3aXRoIENPTk5F
Q1QgY3JlZGVudGlhbHMuCi0gICAgICAgICAgICAgICAgLy8gVGhlIG9yZGVyIG9mIGNhbGxiYWNr
cyBpcyBub3QgZGVmaW5lZCwgc28gdGhpcyBjYW4gYmUgY2FsbGVkIGJlZm9yZSByZWFkU3RyZWFt
Q2FsbGJhY2sncyBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlLgotICAgICAgICAgICAg
ICAgIENGSW5kZXggcHJveHlSZXNwb25zZUNvZGUgPSBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VT
dGF0dXNDb2RlKHByb3h5UmVzcG9uc2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChwcm94
eVJlc3BvbnNlQ29kZSAhPSAyMDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwot
ICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVu
U29ja2V0U3RyZWFtKCp0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxz
ZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291
bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsK
LSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAg
ICAgICAgc2VuZFBlbmRpbmdEYXRhKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6IHsKLSAgICAgICAgUmV0YWluUHRyPENGRXJy
b3JSZWY+IGVycm9yID0gYWRvcHRDRihDRldyaXRlU3RyZWFtQ29weUVycm9yKG1fd3JpdGVTdHJl
YW0uZ2V0KCkpKTsKLSAgICAgICAgcmVwb3J0RXJyb3JUb0NsaWVudChlcnJvci5nZXQoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVuZEVuY291bnRl
cmVkOgotICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3ZSBoYW5kbGUgY2xvc2luZyBpbiBy
ZWFkIGNhbGxiYWNrLCBidXQgdGhlc2UgY2FuIGNvbWUgaW5kZXBlbmRlbnRseSAoZS5nLiBhIHNl
cnZlciBjYW4gc3RvcCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNlbmRpbmcgZGF0YSkuCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJv
clRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCi17Ci0gICAgQ0ZJbmRleCBlcnJvckNvZGUgPSBD
RkVycm9yR2V0Q29kZShlcnJvcik7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotCi0jaWYgUExB
VEZPUk0oTUFDKQotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1k
ZWNsYXJhdGlvbnMiCi0jZW5kaWYKLQotICAgIGlmIChDRkVxdWFsKENGRXJyb3JHZXREb21haW4o
ZXJyb3IpLCBrQ0ZFcnJvckRvbWFpbk9TU3RhdHVzKSkgewotICAgICAgICBjb25zdCBjaGFyKiBk
ZXNjcmlwdGlvbk9TU3RhdHVzID0gR2V0TWFjT1NTdGF0dXNDb21tZW50U3RyaW5nKHN0YXRpY19j
YXN0PE9TU3RhdHVzPihlcnJvckNvZGUpKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uT1NTdGF0
dXMgJiYgZGVzY3JpcHRpb25PU1N0YXR1c1swXSAhPSAnXDAnKQotICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSAiT1NTdGF0dXMgRXJyb3IgIiArIFN0cmluZzo6bnVtYmVyKGVycm9yQ29kZSkgKyAi
OiAiICsgZGVzY3JpcHRpb25PU1N0YXR1czsKLSAgICB9Ci0KLSNpZiBDT01QSUxFUihDTEFORykK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIGlm
IChkZXNjcmlwdGlvbi5pc051bGwoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGRlc2NyaXB0aW9uQ0YgPSBhZG9wdENGKENGRXJyb3JDb3B5RGVzY3JpcHRpb24oZXJyb3IpKTsK
LSAgICAgICAgZGVzY3JpcHRpb24gPSBTdHJpbmcoZGVzY3JpcHRpb25DRi5nZXQoKSk7Ci0gICAg
fQotCi0gICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFt
RXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX3VybC5zdHJpbmcoKSwgZGVzY3Jp
cHRpb24pKTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkK
LXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkdG9yIiwgdGhpcyk7
Ci0KLSAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7Ci19Ci0KLWludCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewot
ICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBDRldyaXRlU3RyZWFtV3JpdGUobV93
cml0ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBs
ZW5ndGgpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCi17
Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIs
IHRoaXMpOwotCi0gICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkgCi0gICAgICAgIHJlbW92ZVBB
Q1J1bkxvb3BTb3VyY2UoKTsKLQotICAgIEFTU0VSVCghbV9yZWFkU3RyZWFtID09ICFtX3dyaXRl
U3RyZWFtKTsKLSAgICBpZiAoIW1fcmVhZFN0cmVhbSkgewotICAgICAgICBpZiAobV9jb25uZWN0
aW5nU3Vic3RhdGUgPT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1YnN0YXRlID09IEV4ZWN1dGluZ1BB
Q0ZpbGUpCi0gICAgICAgICAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgQ0ZSZWFk
U3RyZWFtVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgbG9hZGVyUnVu
TG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAgIENGV3JpdGVTdHJlYW1VbnNjaGVk
dWxlRnJvbVJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZS
dW5Mb29wRGVmYXVsdE1vZGUpOwotI2Vsc2UKLSAgICBDRlJlYWRTdHJlYW1VbnNjaGVkdWxlRnJv
bVJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1
bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVVuc2NoZWR1bGVGcm9tUnVuTG9v
cChtX3dyaXRlU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BD
b21tb25Nb2Rlcyk7Ci0jZW5kaWYKLQotICAgIENGUmVhZFN0cmVhbUNsb3NlKG1fcmVhZFN0cmVh
bS5nZXQoKSk7Ci0gICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOwot
ICAgIAotICAgIG1fcmVhZFN0cmVhbSA9IDA7Ci0gICAgbV93cml0ZVN0cmVhbSA9IDA7Ci0KLSAg
ICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXVuc2lnbmVkIHNo
b3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKHVuc2lnbmVk
IHNob3J0IHVybFBvcnQgPSBtX3VybC5wb3J0KCkpCi0gICAgICAgIHJldHVybiB1cmxQb3J0Owot
ICAgIGlmIChzaG91bGRVc2VTU0woKSkKLSAgICAgICAgcmV0dXJuIDQ0MzsKLSAgICByZXR1cm4g
ODA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2Vzc2lvbklELmgi
CisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgX19DRkhUVFBNZXNzYWdlKiBDRkhUVFBNZXNzYWdlUmVmOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENyZWRlbnRpYWw7CitjbGFzcyBQcm90ZWN0aW9uU3BhY2U7Citj
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJs
aWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50LCBzZXNzaW9uSUQpKTsgfQorCisgICAg
dmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBp
bnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNsb3NlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTb2NrZXRTdHJl
YW1IYW5kbGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiwgU2Vzc2lvbklE
KTsKKyAgICB2b2lkIGNyZWF0ZVN0cmVhbXMoKTsKKyAgICB2b2lkIHNjaGVkdWxlU3RyZWFtcygp
OworICAgIHZvaWQgY2hvb3NlUHJveHkoKTsKKyAgICB2b2lkIGNob29zZVByb3h5RnJvbUFycmF5
KENGQXJyYXlSZWYpOworICAgIHZvaWQgZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYpOworICAg
IHZvaWQgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BT
b3VyY2VSZWY+IG1fcGFjUnVuTG9vcFNvdXJjZTsKKyAgICBzdGF0aWMgdm9pZCBwYWNFeGVjdXRp
b25DYWxsYmFjayh2b2lkKiBjbGllbnQsIENGQXJyYXlSZWYgcHJveHlMaXN0LCBDRkVycm9yUmVm
IGVycm9yKTsKKyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0
aW9uKHZvaWQqKTsKKworICAgIGJvb2wgc2hvdWxkVXNlU1NMKCkgY29uc3QgeyByZXR1cm4gbV91
cmwucHJvdG9jb2xJcygid3NzIik7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0KCkgY29uc3Q7
CisKKyAgICB2b2lkIGFkZENPTk5FQ1RDcmVkZW50aWFscyhDRkhUVFBNZXNzYWdlUmVmIHJlc3Bv
bnNlKTsKKworICAgIHN0YXRpYyB2b2lkKiByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCop
OworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCopOworICAg
IHN0YXRpYyBDRlN0cmluZ1JlZiBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKik7CisgICAg
c3RhdGljIHZvaWQgcmVhZFN0cmVhbUNhbGxiYWNrKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJlYW1F
dmVudFR5cGUsIHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZVN0cmVhbUNhbGxiYWNrKENG
V3JpdGVTdHJlYW1SZWYsIENGU3RyZWFtRXZlbnRUeXBlLCB2b2lkKik7CisgICAgdm9pZCByZWFk
U3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUpOworICAgIHZvaWQgd3JpdGVTdHJlYW1D
YWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSk7CisKKyAgICB2b2lkIHJlcG9ydEVycm9yVG9DbGll
bnQoQ0ZFcnJvclJlZik7CisKKyAgICBib29sIGdldFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRp
YWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIFN0cmluZyYgbG9naW4sIFN0cmluZyYgcGFzc3dv
cmQpOworCisgICAgZW51bSBDb25uZWN0aW5nU3Vic3RhdGUgeyBOZXcsIEV4ZWN1dGluZ1BBQ0Zp
bGUsIFdhaXRpbmdGb3JDcmVkZW50aWFscywgV2FpdGluZ0ZvckNvbm5lY3QsIENvbm5lY3RlZCB9
OworICAgIENvbm5lY3RpbmdTdWJzdGF0ZSBtX2Nvbm5lY3RpbmdTdWJzdGF0ZTsKKworICAgIGVu
dW0gQ29ubmVjdGlvblR5cGUgeyBVbmtub3duLCBEaXJlY3QsIFNPQ0tTUHJveHksIENPTk5FQ1RQ
cm94eSB9OworICAgIENvbm5lY3Rpb25UeXBlIG1fY29ubmVjdGlvblR5cGU7CisgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBtX3Byb3h5SG9zdDsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+
IG1fcHJveHlQb3J0OworCisgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VSZWY+IG1fcHJveHlS
ZXNwb25zZU1lc3NhZ2U7CisgICAgYm9vbCBtX3NlbnRTdG9yZWRDcmVkZW50aWFsczsKKyAgICBS
ZXRhaW5QdHI8Q0ZSZWFkU3RyZWFtUmVmPiBtX3JlYWRTdHJlYW07CisgICAgUmV0YWluUHRyPENG
V3JpdGVTdHJlYW1SZWY+IG1fd3JpdGVTdHJlYW07CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+
IG1faHR0cHNVUkw7IC8vIHdzKHMpOiByZXBsYWNlZCB3aXRoIGh0dHBzOgorICAgIFNlc3Npb25J
RCBtX3Nlc3Npb25JRDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0
cmVhbUhhbmRsZUltcGwuaAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgi
Ci0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX19DRkhUVFBNZXNzYWdl
KiBDRkhUVFBNZXNzYWdlUmVmOwogCkBAIC00NCwxNyArNDMsMTcgQEAgY2xhc3MgQ3JlZGVudGlh
bDsKIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dDsKIAotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsK
K2NsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNv
bnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lvbklE
IHNlc3Npb25JRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJs
LCBjbGllbnQsIHNlc3Npb25JRCkpOyB9CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5k
bGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGll
bnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKSk7IH0KIAotICAgIHZpcnR1YWwg
flNvY2tldFN0cmVhbUhhbmRsZSgpOworICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZUlt
cGwoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmLCBTZXNzaW9uSUQpOworICAgIFdFQkNPUkVfRVhQT1JUIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiwgU2Vzc2lvbklEKTsKICAgICB2b2lkIGNyZWF0ZVN0cmVhbXMoKTsKICAgICB2b2lkIHNjaGVk
dWxlU3RyZWFtcygpOwogICAgIHZvaWQgY2hvb3NlUHJveHkoKTsKQEAgLTYyLDcgKzYxLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVQQUNGaWxlVVJMKENGVVJMUmVmKTsKICAgICB2b2lk
IHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wU291cmNl
UmVmPiBtX3BhY1J1bkxvb3BTb3VyY2U7Ci0gICAgc3RhdGljIHZvaWQgcGFjRXhlY3V0aW9uQ2Fs
bGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZiBlcnJv
cik7CisgICAgc3RhdGljIHZvaWQgcGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBD
RkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZik7CiAgICAgc3RhdGljIENGU3RyaW5nUmVm
IGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbih2b2lkKik7CiAKICAgICBib29sIHNob3VsZFVz
ZVNTTCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLnByb3RvY29sSXMoIndzcyIpOyB9CkBAIC05OSw0
ICs5OCw0IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogfTsKIAotfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5j
cHA6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRT
dHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgi
CisKKyNpbmNsdWRlICJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2Uu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmgiCisjaW5jbHVkZSAiUHJvdGVjdGlvblNwYWNlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
TmV0d29yay5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiTG9hZGVy
UnVuTG9vcENGLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2luY2x1ZGUg
PFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbHNlCisj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9S
TShJT1MpIHx8IFBMQVRGT1JNKE1BQykKK2V4dGVybiAiQyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tD
RlN0cmVhbVNvY2tldFNldE5vRGVsYXk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2ltcG9ydCA8Q0ZOZXR3b3JrU1BJLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisg
ICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQorICAgICwgbV9jb25uZWN0
aW5nU3Vic3RhdGUoTmV3KQorICAgICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQorICAgICwg
bV9zZW50U3RvcmVkQ3JlZGVudGlhbHMoZmFsc2UpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9u
SUQpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVu
dCAlcCIsIHRoaXMsICZtX2NsaWVudCk7CisKKyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoIndz
IikgfHwgdXJsLnByb3RvY29sSXMoIndzcyIpKTsKKworICAgIFVSTCBodHRwc1VSTChVUkwoKSwg
Imh0dHBzOi8vIiArIG1fdXJsLmhvc3QoKSk7CisgICAgbV9odHRwc1VSTCA9IGh0dHBzVVJMLmNy
ZWF0ZUNGVVJMKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyBEb24ndCBjaGVjayBm
b3IgSFNUUyB2aW9sYXRpb24gZm9yIGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZQorICAgIC8vIEhT
VFMgc3RhdGUgc2hvdWxkIG5vdCB0cmFuc2ZlciBiZXR3ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUg
YnJvd3NpbmcuCisgICAgaWYgKHVybC5wcm90b2NvbElzKCJ3cyIpCisgICAgICAgICYmICFzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKQorICAgICAgICAmJiBfQ0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0
V2l0aFNlc3Npb24obV9odHRwc1VSTC5nZXQoKSwgbnVsbHB0cikpIHsKKyAgICAgICAgbV9jbGll
bnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwu
c3RyaW5nKCksICJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRl
cyBIVFRQIFN0cmljdCBUcmFuc3BvcnQgU2VjdXJpdHkuIikpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmCisKKyAgICBjcmVhdGVTdHJlYW1zKCk7CisgICAgQVNTRVJUKCFtX3JlYWRT
dHJlYW0gPT0gIW1fd3JpdGVTdHJlYW0pOworICAgIGlmICghbV9yZWFkU3RyZWFtKSAvLyBEb2lu
ZyBhc3luY2hyb25vdXMgUEFDIGZpbGUgcHJvY2Vzc2luZywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0
ZWQgbGF0ZXIuCisgICAgICAgIHJldHVybjsKKworICAgIHNjaGVkdWxlU3RyZWFtcygpOworfQor
Cit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVTdHJlYW1zKCkKK3sKKyAgICBBU1NF
UlQobV9yZWFkU3RyZWFtKTsKKyAgICBBU1NFUlQobV93cml0ZVN0cmVhbSk7CisKKyAgICBDRlN0
cmVhbUNsaWVudENvbnRleHQgY2xpZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0YWluU29ja2V0
U3RyZWFtSGFuZGxlLCByZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNj
cmlwdGlvbiB9OworICAgIC8vIEZJWE1FOiBQYXNzIHNwZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRl
cmVzdGVkIGluIGluc3RlYWQgb2YgLTEuCisgICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVh
ZFN0cmVhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Q0ZPcHRpb25GbGFncz4oLTEpLCByZWFkU3RyZWFt
Q2FsbGJhY2ssICZjbGllbnRDb250ZXh0KTsKKyAgICBDRldyaXRlU3RyZWFtU2V0Q2xpZW50KG1f
d3JpdGVTdHJlYW0uZ2V0KCksIHN0YXRpY19jYXN0PENGT3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVT
dHJlYW1DYWxsYmFjaywgJmNsaWVudENvbnRleHQpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAg
IENGUmVhZFN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBsb2Fk
ZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgQ0ZXcml0ZVN0cmVhbVNj
aGVkdWxlV2l0aFJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBr
Q0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdp
dGhSdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGV3JpdGVTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29w
KG1fd3JpdGVTdHJlYW0uZ2V0KCksIENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcENv
bW1vbk1vZGVzKTsKKyNlbmRpZgorCisgICAgQ0ZSZWFkU3RyZWFtT3BlbihtX3JlYWRTdHJlYW0u
Z2V0KCkpOworICAgIENGV3JpdGVTdHJlYW1PcGVuKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOworCisg
ICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkKKyAgICAgICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJj
ZSgpOworCisgICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKK30K
Kwordm9pZCogU29ja2V0U3RyZWFtSGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9p
ZCogaW5mbykKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIGhhbmRsZS0+cmVmKCk7CisgICAgcmV0
dXJuIGhhbmRsZTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRT
dHJlYW1IYW5kbGUodm9pZCogaW5mbykKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRs
ZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIGhhbmRsZS0+
ZGVyZWYoKTsKK30KKworQ0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhl
Y3V0aW9uRGVzY3JpcHRpb24odm9pZCopCit7CisgICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQg
cHJveHkgUEFDIGZpbGUgZXhlY3V0aW9uIik7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxPbk1haW5U
aHJlYWRBbmRXYWl0KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCit7CisgICAgaWYg
KGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBMb2NrIG11dGV4OworICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJs
ZTsKKworICAgIGJvb2wgaXNGaW5pc2hlZCA9IGZhbHNlOworCisgICAgY2FsbE9uTWFpblRocmVh
ZChbJl0geworICAgICAgICBmdW5jdGlvbigpOworCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG11dGV4KTsKKyAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7CisgICAgICAgIGNv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOworICAgIH0pOworCisgICAgc3RkOjp1bmlxdWVf
bG9jazxMb2NrPiBsb2NrKG11dGV4KTsKKyAgICBjb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ss
IFsmXSB7IHJldHVybiBpc0ZpbmlzaGVkOyB9KTsKK30KKworc3RydWN0IE1haW5UaHJlYWRQQUND
YWxsYmFja0luZm8geworICAgIE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFt
SGFuZGxlKiBoYW5kbGUsIENGQXJyYXlSZWYgcHJveHlMaXN0KSA6IGhhbmRsZShoYW5kbGUpLCBw
cm94eUxpc3QocHJveHlMaXN0KSB7IH0KKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBo
YW5kbGU7CisgICAgQ0ZBcnJheVJlZiBwcm94eUxpc3Q7Cit9OworCit2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZTo6cGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHBy
b3h5TGlzdCwgQ0ZFcnJvclJlZikKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGNsaWVudCk7CisKKyAgICBjYWxsT25N
YWluVGhyZWFkQW5kV2FpdChbJl0geworICAgICAgICBBU1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3Rp
bmdTdWJzdGF0ZSA9PSBFeGVjdXRpbmdQQUNGaWxlKTsKKyAgICAgICAgLy8gVGhpcyB0aW1lLCB0
aGUgYXJyYXkgd29uJ3QgaGF2ZSBQQUMgYXMgYSBmaXJzdCBlbnRyeS4KKyAgICAgICAgaWYgKGhh
bmRsZS0+bV9zdGF0ZSAhPSBDb25uZWN0aW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBoYW5kbGUtPmNob29zZVByb3h5RnJvbUFycmF5KHByb3h5TGlzdCk7CisgICAgICAgIGhhbmRs
ZS0+Y3JlYXRlU3RyZWFtcygpOworICAgICAgICBoYW5kbGUtPnNjaGVkdWxlU3RyZWFtcygpOwor
ICAgIH0pOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwo
Q0ZVUkxSZWYgcGFjRmlsZVVSTCkKK3sKKyAgICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0
eSBwcm94eSBhcnJheSBmb3IgV2ViU29ja2V0IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgor
ICAgIENGU3RyZWFtQ2xpZW50Q29udGV4dCBjbGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRh
aW5Tb2NrZXRTdHJlYW1IYW5kbGUsIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNF
eGVjdXRpb25EZXNjcmlwdGlvbiB9OworICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0Yo
Q0ZOZXR3b3JrRXhlY3V0ZVByb3h5QXV0b0NvbmZpZ3VyYXRpb25VUkwocGFjRmlsZVVSTCwgbV9o
dHRwc1VSTC5nZXQoKSwgcGFjRXhlY3V0aW9uQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KSk7Cisj
aWYgUExBVEZPUk0oV0lOKQorICAgIENGUnVuTG9vcEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wKCks
IG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyNlbHNl
CisgICAgQ0ZSdW5Mb29wQWRkU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5M
b29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworI2VuZGlmCisgICAgbV9j
b25uZWN0aW5nU3Vic3RhdGUgPSBFeGVjdXRpbmdQQUNGaWxlOworfQorCit2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpCit7CisgICAgQVNTRVJUKG1fcGFj
UnVuTG9vcFNvdXJjZSk7CisKKyAgICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVu
TG9vcFNvdXJjZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIENGUnVuTG9vcFJlbW92
ZVNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVu
TG9vcERlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVu
TG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29t
bW9uTW9kZXMpOworI2VuZGlmCisgICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKK30KKwordm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5KCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBwcm94eURpY3Rpb25hcnkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlTeXN0
ZW1Qcm94eVNldHRpbmdzKCkpOworCisgICAgLy8gU09DS1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNU
KSBwcm94aWVzIGFyZSBzdXBwb3J0ZWQuCisgICAgLy8gV2ViU29ja2V0IHByb3RvY29sIHJlbGll
cyBvbiBoYW5kc2hha2UgYmVpbmcgdHJhbnNmZXJyZWQgdW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEg
cHJveHkgdGhhdCB3aWxsIG5vdCBtb2RpZnkgaGVhZGVycy4KKyAgICAvLyBTaW5jZSBIVFRQIHBy
b3hpZXMgbXVzdCBhZGQgVmlhIGhlYWRlcnMsIHRoZXkgYXJlIGhpZ2hseSB1bmxpa2VseSB0byB3
b3JrLgorICAgIC8vIE1hbnkgQ09OTkVDVCBwcm94aWVzIGxpbWl0IGNvbm5lY3Rpdml0eSB0byBw
b3J0IDQ0Mywgc28gd2UgcHJlZmVyIFNPQ0tTLCBpZiBjb25maWd1cmVkLgorCisgICAgaWYgKCFw
cm94eURpY3Rpb25hcnkpIHsKKyAgICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJM
IGRvZXNuJ3Qga25vdyBhYm91dCBXZWJTb2NrZXQgc2NoZW1lcywgc28gcHJldGVuZCB0byB1c2Ug
aHR0cC4KKyAgICAvLyBBbHdheXMgdXNlICJodHRwcyIgdG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4g
cmVzdWx0IC0gd2UnbGwgdHJ5IHRvIHVzZSB0aG9zZSBmb3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFu
eSBhcmUgY29uZmlndXJlZCB0byByZWplY3QgY29ubmVjdGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhh
biA0NDMuCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHByb3h5QXJyYXkgPSBhZG9wdENGKENG
TmV0d29ya0NvcHlQcm94aWVzRm9yVVJMKG1faHR0cHNVUkwuZ2V0KCksIHByb3h5RGljdGlvbmFy
eS5nZXQoKSkpOworCisgICAgY2hvb3NlUHJveHlGcm9tQXJyYXkocHJveHlBcnJheS5nZXQoKSk7
Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94eUZyb21BcnJheShDRkFy
cmF5UmVmIHByb3h5QXJyYXkpCit7CisgICAgaWYgKCFwcm94eUFycmF5KSB7CisgICAgICAgIG1f
Y29ubmVjdGlvblR5cGUgPSBEaXJlY3Q7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBD
RkluZGV4IHByb3h5QXJyYXlDb3VudCA9IENGQXJyYXlHZXRDb3VudChwcm94eUFycmF5KTsKKwor
ICAgIC8vIFBBQyBpcyBhbHdheXMgdGhlIGZpcnN0IGVudHJ5LCBpZiBwcmVzZW50LgorICAgIGlm
IChwcm94eUFycmF5Q291bnQpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9
IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwcm94
eUFycmF5LCAwKSk7CisgICAgICAgIENGVHlwZVJlZiBwcm94eVR5cGUgPSBDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwcm94eUluZm8sIGtDRlByb3h5VHlwZUtleSk7CisgICAgICAgIGlmIChwcm94eVR5
cGUgJiYgQ0ZHZXRUeXBlSUQocHJveHlUeXBlKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Cisg
ICAgICAgICAgICBpZiAoQ0ZFcXVhbChwcm94eVR5cGUsIGtDRlByb3h5VHlwZUF1dG9Db25maWd1
cmF0aW9uVVJMKSkgeworICAgICAgICAgICAgICAgIENGVHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eUF1dG9Db25maWd1cmF0aW9uVVJM
S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAocGFjRmlsZVVSTCAmJiBDRkdldFR5cGVJRChwYWNG
aWxlVVJMKSA9PSBDRlVSTEdldFR5cGVJRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1
dGVQQUNGaWxlVVJMKHN0YXRpY19jYXN0PENGVVJMUmVmPihwYWNGaWxlVVJMKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBDRkRpY3Rpb25hcnlSZWYgY2hvc2VuUHJveHkgPSAwOwor
ICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHByb3h5QXJyYXlDb3VudDsgKytpKSB7CisgICAg
ICAgIENGRGljdGlvbmFyeVJlZiBwcm94eUluZm8gPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocHJveHlBcnJheSwgaSkpOworICAgICAgICBDRlR5
cGVSZWYgcHJveHlUeXBlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94
eVR5cGVLZXkpOworICAgICAgICBpZiAocHJveHlUeXBlICYmIENGR2V0VHlwZUlEKHByb3h5VHlw
ZSkgPT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgaWYgKENGRXF1YWwocHJv
eHlUeXBlLCBrQ0ZQcm94eVR5cGVTT0NLUykpIHsKKyAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rp
b25UeXBlID0gU09DS1NQcm94eTsKKyAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5
SW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChDRkVxdWFsKHByb3h5VHlwZSwga0NGUHJveHlUeXBlSFRUUFMpKSB7CisgICAgICAgICAg
ICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IENPTk5FQ1RQcm94eTsKKyAgICAgICAgICAgICAgICBj
aG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKKyAgICAgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcg
Zm9yIHByb3hpZXMsIGFzIGEgU09DS1Mgb25lIGlzIHByZWZlcmFibGUuCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2hvc2VuUHJveHkpIHsKKyAgICAgICAgQVNT
RVJUKG1fY29ubmVjdGlvblR5cGUgIT0gVW5rbm93bik7CisgICAgICAgIEFTU0VSVChtX2Nvbm5l
Y3Rpb25UeXBlICE9IERpcmVjdCk7CisKKyAgICAgICAgQ0ZUeXBlUmVmIHByb3h5SG9zdCA9IENG
RGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eUhvc3ROYW1lS2V5KTsKKyAg
ICAgICAgQ0ZUeXBlUmVmIHByb3h5UG9ydCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblBy
b3h5LCBrQ0ZQcm94eVBvcnROdW1iZXJLZXkpOworCisgICAgICAgIGlmIChwcm94eUhvc3QgJiYg
Q0ZHZXRUeXBlSUQocHJveHlIb3N0KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpICYmIHByb3h5UG9y
dCAmJiBDRkdldFR5cGVJRChwcm94eVBvcnQpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAg
ICAgICAgICAgIG1fcHJveHlIb3N0ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9z
dCk7CisgICAgICAgICAgICBtX3Byb3h5UG9ydCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihw
cm94eVBvcnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
bV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKK30KKworCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlU3RyZWFtcygpCit7CisgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gVW5rbm93
bikKKyAgICAgICAgY2hvb3NlUHJveHkoKTsKKworICAgIC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93
biwgdGhlbiB3ZSdyZSByZXNvbHZpbmcgYSBQQUMgZmlsZSBhc3luY2hyb25vdXNseS4KKyAgICBp
ZiAobV9jb25uZWN0aW9uVHlwZSA9PSBVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvc3QgPSBtX3VybC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmco
KTsKKworICAgIC8vIENyZWF0aW5nIHN0cmVhbXMgdG8gZmluYWwgZGVzdGluYXRpb24sIG5vdCB0
byBwcm94eS4KKyAgICBDRlJlYWRTdHJlYW1SZWYgcmVhZFN0cmVhbSA9IDA7CisgICAgQ0ZXcml0
ZVN0cmVhbVJlZiB3cml0ZVN0cmVhbSA9IDA7CisgICAgQ0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNv
Y2tldFRvSG9zdCgwLCBob3N0LmdldCgpLCBwb3J0KCksICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJl
YW0pOworI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKQorICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS8xMjg1NTU4Nz4gX2tDRlN0cmVhbVNvY2tldFNldE5vRGVsYXkgaXMgbm90IGV4cG9y
dGVkIG9uIFdpbmRvd3MKKyAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkod3JpdGVTdHJlYW0s
IF9rQ0ZTdHJlYW1Tb2NrZXRTZXROb0RlbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisjZW5kaWYKKwor
ICAgIG1fcmVhZFN0cmVhbSA9IGFkb3B0Q0YocmVhZFN0cmVhbSk7CisgICAgbV93cml0ZVN0cmVh
bSA9IGFkb3B0Q0Yod3JpdGVTdHJlYW0pOworCisgICAgc3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBl
KSB7CisgICAgY2FzZSBVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEaXJlY3Q6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U09DS1NQcm94eTogeworICAgICAgICAvLyBGSVhNRTogU09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxl
bmdlLXJlc3BvbnNlLCBzaG91bGQgd2UgdHJ5IHRvIGFwcGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5
Y2hhaW4gcmlnaHQgYXdheT8KKyAgICAgICAgLy8gQnV0IFNPQ0tTNSBjcmVkZW50aWFscyBkb24n
dCB3b3JrIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3
NzY2OTg+LgorICAgICAgICBjb25zdCB2b2lkKiBwcm94eUtleXNbXSA9IHsga0NGU3RyZWFtUHJv
cGVydHlTT0NLU1Byb3h5SG9zdCwga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5UG9ydCB9Owor
ICAgICAgICBjb25zdCB2b2lkKiBwcm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwg
bV9wcm94eVBvcnQuZ2V0KCkgfTsKKyAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
Y29ubmVjdERpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtl
eXMsIHByb3h5VmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKHByb3h5S2V5cyksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KyAgICAgICAgQ0ZSZWFkU3RyZWFtU2V0UHJvcGVydHkobV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZT
dHJlYW1Qcm9wZXJ0eVNPQ0tTUHJveHksIGNvbm5lY3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBjYXNlIENPTk5FQ1RQcm94eToKKyAgICAgICAgd2tT
ZXRDT05ORUNUUHJveHlGb3JTdHJlYW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5n
ZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoc2hvdWxkVXNlU1NMKCkpIHsKKyAgICAgICAgQ0ZCb29sZWFuUmVmIHZhbGlkYXRlQ2VydGlm
aWNhdGVDaGFpbiA9IFNldHRpbmdzOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9v
bGVhbkZhbHNlIDoga0NGQm9vbGVhblRydWU7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9
IHsga0NGU3RyZWFtU1NMUGVlck5hbWUsIGtDRlN0cmVhbVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xW
YWxpZGF0ZXNDZXJ0aWZpY2F0ZUNoYWluIH07CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1td
ID0geyBob3N0LmdldCgpLCBrQ0ZTdHJlYW1Tb2NrZXRTZWN1cml0eUxldmVsTmVnb3RpYXRlZFNT
TCwgdmFsaWRhdGVDZXJ0aWZpY2F0ZUNoYWluIH07CisgICAgICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHNldHRpbmdzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywg
dmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIENGUmVh
ZFN0cmVhbVNldFByb3BlcnR5KG1fcmVhZFN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlT
U0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOworICAgICAgICBDRldyaXRlU3RyZWFtU2V0UHJv
cGVydHkobV93cml0ZVN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywg
c2V0dGluZ3MuZ2V0KCkpOworICAgIH0KK30KKworYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6Omdl
dFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJv
dGVjdGlvblNwYWNlLCBTdHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIC8v
IEZJWE1FICg8cmRhcjovL3Byb2JsZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hv
dWxkIGJlIHJldHJpZXZlZCBmcm9tIEF1dGhCcm9rZXJBZ2VudC4KKworICAgIC8vIFRyeSBzeXN0
ZW0gY3JlZGVudGlhbCBzdG9yYWdlIGZpcnN0LCBtYXRjaGluZyBIVFRQIGJlaGF2aW9yIChDRk5l
dHdvcmsgb25seSBhc2tzIHRoZSBjbGllbnQgZm9yIHBhc3N3b3JkIGlmIGl0IGNvdWxkbid0IGZp
bmQgaXQgaW4gS2V5Y2hhaW4pLgorICAgIENyZWRlbnRpYWwgc3RvcmVkQ3JlZGVudGlhbDsKKyAg
ICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3Jh
Z2VTZXNzaW9uKG1fc2Vzc2lvbklEKSkgeworICAgICAgICBzdG9yZWRDcmVkZW50aWFsID0gc3Rv
cmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdl
KHByb3RlY3Rpb25TcGFjZSk7CisgICAgICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHN0b3JlZENyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVu
dGlhbFN0b3JhZ2UoKS5nZXQocHJvdGVjdGlvblNwYWNlKTsKKyAgICB9CisKKyAgICBpZiAoc3Rv
cmVkQ3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGxv
Z2luID0gc3RvcmVkQ3JlZGVudGlhbC51c2VyKCk7CisgICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVk
ZW50aWFsLnBhc3N3b3JkKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1
dGhlbnRpY2F0aW9uTWV0aG9kKENGU3RyaW5nUmVmIG1ldGhvZCkKK3sKKyAgICBpZiAoQ0ZFcXVh
bChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZUJhc2ljKSkKKyAgICAgICAgcmV0
dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOworICAgIGlm
IChDRkVxdWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lRGlnZXN0KSkKKyAg
ICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2Vz
dDsKKyAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5U
TE0pKQorICAgICAgICByZXR1cm4gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVO
VExNOworICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1l
TmVnb3RpYXRlKSkKKyAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lTmVnb3RpYXRlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQ
cm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd247Cit9CisKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjphZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBw
cm94eVJlc3BvbnNlKQoreworICAgIFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4g
YXV0aGVudGljYXRpb24gPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJl
c3BvbnNlKDAsIHByb3h5UmVzcG9uc2UpKTsKKworICAgIGlmICghQ0ZIVFRQQXV0aGVudGljYXRp
b25SZXF1aXJlc1VzZXJOYW1lQW5kUGFzc3dvcmQoYXV0aGVudGljYXRpb24uZ2V0KCkpKSB7Cisg
ICAgICAgIC8vIFRoYXQncyBhbGwgd2UgY2FuIG9mZmVyLi4uCisgICAgICAgIG1fY2xpZW50LmRp
ZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9yKDAsIG1fdXJsLnN0cmlu
ZygpLCAiUHJveHkgYXV0aGVudGljYXRpb24gc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdl
YlNvY2tldHMiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcG9ydCA9IDA7
CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlw
ZSwgJnBvcnQpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENG
KENGSFRUUEF1dGhlbnRpY2F0aW9uQ29weU1ldGhvZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpOwor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcmVhbG1DRiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVu
dGljYXRpb25Db3B5UmVhbG0oYXV0aGVudGljYXRpb24uZ2V0KCkpKTsKKworICAgIGlmICghbWV0
aG9kQ0YgfHwgIXJlYWxtQ0YpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBi
dXQgb24gc29tZSBPUyB2ZXJzaW9ucyB3ZSBnZXQgaW5jb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBk
YXRhLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzEwNDE2MzE2Pi4KKyAgICAgICAgbV9jbGllbnQuZGlk
RmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5n
KCksICJXZWJTb2NrZXQgcHJveHkgYXV0aGVudGljYXRpb24gY291bGRuJ3QgYmUgaGFuZGxlZCIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0
aW9uU3BhY2UoU3RyaW5nKG1fcHJveHlIb3N0LmdldCgpKSwgcG9ydCwgUHJvdGVjdGlvblNwYWNl
UHJveHlIVFRQUywgU3RyaW5nKHJlYWxtQ0YuZ2V0KCkpLCBhdXRoZW50aWNhdGlvblNjaGVtZUZy
b21BdXRoZW50aWNhdGlvbk1ldGhvZChtZXRob2RDRi5nZXQoKSkpOworICAgIFN0cmluZyBsb2dp
bjsKKyAgICBTdHJpbmcgcGFzc3dvcmQ7CisgICAgaWYgKCFtX3NlbnRTdG9yZWRDcmVkZW50aWFs
cyAmJiBnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxv
Z2luLCBwYXNzd29yZCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50
aWFscywgaWYgd2UgaGF2ZW4ndCB0cmllZCB0aG9zZSBhbHJlYWR5LgorICAgICAgICAvLyBDcmVh
dGUgYSB0ZW1wb3JhcnkgcmVxdWVzdCB0byBtYWtlIENGTmV0d29yayBhcHBseSBjcmVkZW50aWFs
cyB0byBpdC4gVW5mb3J0dW5hdGVseSwgdGhpcyBjYW5ub3Qgd29yayB3aXRoIE5UTE0gYXV0aGVu
dGljYXRpb24uCisgICAgICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBkdW1teVJlcXVl
c3QgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwg
bV9odHRwc1VSTC5nZXQoKSwga0NGSFRUUFZlcnNpb24xXzEpKTsKKworICAgICAgICBCb29sZWFu
IGFwcGxpZWRDcmVkZW50aWFscyA9IENGSFRUUE1lc3NhZ2VBcHBseUNyZWRlbnRpYWxzKGR1bW15
UmVxdWVzdC5nZXQoKSwgYXV0aGVudGljYXRpb24uZ2V0KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIHBhc3N3b3JkLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApOworICAgICAgICBB
U1NFUlRfVU5VU0VEKGFwcGxpZWRDcmVkZW50aWFscywgYXBwbGllZENyZWRlbnRpYWxzKTsKKwor
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyA9
IGFkb3B0Q0YoQ0ZIVFRQTWVzc2FnZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5n
ZXQoKSwgQ0ZTVFIoIlByb3h5LUF1dGhvcml6YXRpb24iKSkpOworCisgICAgICAgIGlmICghcHJv
eHlBdXRob3JpemF0aW9uU3RyaW5nKSB7CisgICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBO
VExNIGF1dGguCisgICAgICAgICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlz
LCBTb2NrZXRTdHJlYW1FcnJvcigwLCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0
aW9uIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBXZWJTb2NrZXRzIikpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgYXV0aG9yaXph
dGlvbiByZXN1bHRzIGluIGEgbmV3IGNvbm5lY3Rpb24gYXR0ZW1wdC4KKyAgICAgICAgd2tTZXRD
T05ORUNUUHJveHlBdXRob3JpemF0aW9uRm9yU3RyZWFtKG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJv
eHlBdXRob3JpemF0aW9uU3RyaW5nLmdldCgpKTsKKyAgICAgICAgbV9zZW50U3RvcmVkQ3JlZGVu
dGlhbHMgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IE9u
IHBsYXRmb3JtcyB3aGVyZSBBdXRoQnJva2VyQWdlbnQgaXMgbm90IGF2YWlsYWJsZSwgYXNrIHRo
ZSBjbGllbnQgaWYgY3JlZGVudGlhbHMgY291bGQgbm90IGJlIGZvdW5kLgorCisgICAgbV9jbGll
bnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwu
c3RyaW5nKCksICJQcm94eSBjcmVkZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKK30KKwor
Q0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2
b2lkKiBpbmZvKQoreworICAgIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nh
c3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7CisgICAgcmV0dXJuIFN0cmluZygiV2ViS2l0
IHNvY2tldCBzdHJlYW0sICIgKyBoYW5kbGUtPm1fdXJsLnN0cmluZygpKS5jcmVhdGVDRlN0cmlu
ZygpLmxlYWtSZWYoKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1D
YWxsYmFjayhDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2
b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8p
OworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJl
YW0uZ2V0KCkpOworICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3
Mz4uIEtlZXBpbmcgdGhpcyBiZWxvdyB0aGUgYXNzZXJ0aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIg
c3RlcHMgdG8gcmVwcm9kdWNlIHRoaXMuCisgICAgaWYgKCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkK
KyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIFJlZlB0cjxTb2NrZXRT
dHJlYW1IYW5kbGU+IHByb3RlY3RvcihoYW5kbGUpOworICAgIGNhbGxPbk1haW5UaHJlYWRBbmRX
YWl0KFsmXSB7CisgICAgICAgIGlmIChoYW5kbGUtPm1fcmVhZFN0cmVhbSkKKyAgICAgICAgICAg
IGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOworICAgIH0pOworI2Vsc2UKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5
cGUpOworI2VuZGlmCit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNh
bGxiYWNrKENGV3JpdGVTdHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2
b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8p
OworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dyaXRlU3Ry
ZWFtLmdldCgpKTsKKyAgICAvLyBUaGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBwcmFjdGlj
ZSwgeWV0IGl0IHNlZW1zIGxpa2UgaXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQg
c3RyZWFtIGNhbGxiYWNrLgorICAgIGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQorICAgICAg
ICByZXR1cm47CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhh
bmRsZT4gcHJvdGVjdG9yKGhhbmRsZSk7CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZd
IHsKKyAgICAgICAgaWYgKGhhbmRsZS0+bV93cml0ZVN0cmVhbSkKKyAgICAgICAgICAgIGhhbmRs
ZS0+d3JpdGVTdHJlYW1DYWxsYmFjayh0eXBlKTsKKyAgICB9KTsKKyNlbHNlCisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBoYW5kbGUtPndyaXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7
CisjZW5kaWYKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFj
ayhDRlN0cmVhbUV2ZW50VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudE5vbmU6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVh
bUV2ZW50T3BlbkNvbXBsZXRlZDoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Uga0NGU3RyZWFt
RXZlbnRIYXNCeXRlc0F2YWlsYWJsZTogeworICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3Rh
dGUgPT0gV2FpdGluZ0ZvckNyZWRlbnRpYWxzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ29ubmVjdCkgeworICAg
ICAgICAgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gQ09OTkVDVFByb3h5KSB7CisgICAgICAg
ICAgICAgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VSZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9w
dENGKHdrQ29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKG1fcmVhZFN0cmVhbS5nZXQoKSwgbV9odHRw
c1VSTC5nZXQoKSwgbV9wcm94eUhvc3QuZ2V0KCksIG1fcHJveHlQb3J0LmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFwcm94eVJlc3BvbnNlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgICAgICBDRkluZGV4IHByb3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQ
TWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShwcm94eVJlc3BvbnNlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHByb3h5UmVzcG9uc2VDb2RlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAyMDA6CisgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0MDc6Cisg
ICAgICAgICAgICAgICAgICAgIGFkZENPTk5FQ1RDcmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRo
aXMsIFNvY2tldFN0cmVhbUVycm9yKHN0YXRpY19jYXN0PGludD4ocHJveHlSZXNwb25zZUNvZGUp
LCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlz
aGVkLCB1bmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUiKSk7CisgICAgICAgICAgICAgICAgICAgIHBs
YXRmb3JtQ2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0g
Q29ubmVjdGVkOworICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAgICAgICBtX2Ns
aWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3Zl
LCBhbmQgaXQgY291bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlmIChtX3N0YXRl
ID09IENsb3NlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV9zdGF0
ZSA9PSBPcGVuKTsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5l
Y3RlZCk7CisKKyAgICAgICAgQ0ZJbmRleCBsZW5ndGg7CisgICAgICAgIFVJbnQ4IGxvY2FsQnVm
ZmVyWzEwMjRdOyAvLyBVc2VkIGlmIENGUmVhZFN0cmVhbUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1
cm4gYW55dGhpbmcuCisgICAgICAgIGNvbnN0IFVJbnQ4KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRC
dWZmZXIobV9yZWFkU3RyZWFtLmdldCgpLCAwLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFwdHIp
IHsKKyAgICAgICAgICAgIGxlbmd0aCA9IENGUmVhZFN0cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdl
dCgpLCBsb2NhbEJ1ZmZlciwgc2l6ZW9mKGxvY2FsQnVmZmVyKSk7CisgICAgICAgICAgICBwdHIg
PSBsb2NhbEJ1ZmZlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1E
YXRhKCp0aGlzLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBsZW5ndGgpOwor
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2Vw
dEJ5dGVzOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRFcnJvck9jY3VycmVkOiB7CisgICAgICAgIFJldGFpblB0
cjxDRkVycm9yUmVmPiBlcnJvciA9IGFkb3B0Q0YoQ0ZSZWFkU3RyZWFtQ29weUVycm9yKG1fcmVh
ZFN0cmVhbS5nZXQoKSkpOworICAgICAgICByZXBvcnRFcnJvclRvQ2xpZW50KGVycm9yLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5j
b3VudGVyZWQ6CisgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZT
dHJlYW1FdmVudFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkgeworICAgIGNhc2Uga0NG
U3RyZWFtRXZlbnROb25lOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVu
dE9wZW5Db21wbGV0ZWQ6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50
SGFzQnl0ZXNBdmFpbGFibGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOiB7CisgICAg
ICAgIC8vIENhbiBiZSBmYWxzZSBpZiByZWFkIHN0cmVhbSBjYWxsYmFjayBqdXN0IGRlY2lkZWQg
dG8gcmV0cnkgYSBDT05ORUNUIHdpdGggY3JlZGVudGlhbHMuCisgICAgICAgIGlmICghQ0ZXcml0
ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9y
Q3JlZGVudGlhbHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fY29ubmVj
dGluZ1N1YnN0YXRlID09IFdhaXRpbmdGb3JDb25uZWN0KSB7CisgICAgICAgICAgICBpZiAobV9j
b25uZWN0aW9uVHlwZSA9PSBDT05ORUNUUHJveHkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZIVFRQTWVzc2FnZVJlZj4gcHJveHlSZXNwb25zZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVD
VFByb3h5UmVzcG9uc2UobV9yZWFkU3RyZWFtLmdldCgpLCBtX2h0dHBzVVJMLmdldCgpLCBtX3By
b3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXByb3h5UmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIC8vIERvbid0IHdyaXRlIGFueXRoaW5nIHVudGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNr
IGhhcyBkZWFsdCB3aXRoIENPTk5FQ1QgY3JlZGVudGlhbHMuCisgICAgICAgICAgICAgICAgLy8g
VGhlIG9yZGVyIG9mIGNhbGxiYWNrcyBpcyBub3QgZGVmaW5lZCwgc28gdGhpcyBjYW4gYmUgY2Fs
bGVkIGJlZm9yZSByZWFkU3RyZWFtQ2FsbGJhY2sncyBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZh
aWxhYmxlLgorICAgICAgICAgICAgICAgIENGSW5kZXggcHJveHlSZXNwb25zZUNvZGUgPSBDRkhU
VFBNZXNzYWdlR2V0UmVzcG9uc2VTdGF0dXNDb2RlKHByb3h5UmVzcG9uc2UuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGlmIChwcm94eVJlc3BvbnNlQ29kZSAhPSAyMDApCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1
YnN0YXRlID0gQ29ubmVjdGVkOworICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAg
ICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBj
YWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlm
IChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBPcGVuKTsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRl
ID09IENvbm5lY3RlZCk7CisKKyAgICAgICAgc2VuZFBlbmRpbmdEYXRhKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6IHsKKyAg
ICAgICAgUmV0YWluUHRyPENGRXJyb3JSZWY+IGVycm9yID0gYWRvcHRDRihDRldyaXRlU3RyZWFt
Q29weUVycm9yKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKTsKKyAgICAgICAgcmVwb3J0RXJyb3JUb0Ns
aWVudChlcnJvci5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZT
dHJlYW1FdmVudEVuZEVuY291bnRlcmVkOgorICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3
ZSBoYW5kbGUgY2xvc2luZyBpbiByZWFkIGNhbGxiYWNrLCBidXQgdGhlc2UgY2FuIGNvbWUgaW5k
ZXBlbmRlbnRseSAoZS5nLiBhIHNlcnZlciBjYW4gc3RvcCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNl
bmRpbmcgZGF0YSkuCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCit7CisgICAg
Q0ZJbmRleCBlcnJvckNvZGUgPSBDRkVycm9yR2V0Q29kZShlcnJvcik7CisgICAgU3RyaW5nIGRl
c2NyaXB0aW9uOworCisjaWYgUExBVEZPUk0oTUFDKQorCisjaWYgQ09NUElMRVIoQ0xBTkcpCisj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisjZW5kaWYKKworICAgIGlmIChDRkVx
dWFsKENGRXJyb3JHZXREb21haW4oZXJyb3IpLCBrQ0ZFcnJvckRvbWFpbk9TU3RhdHVzKSkgewor
ICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbk9TU3RhdHVzID0gR2V0TWFjT1NTdGF0dXND
b21tZW50U3RyaW5nKHN0YXRpY19jYXN0PE9TU3RhdHVzPihlcnJvckNvZGUpKTsKKyAgICAgICAg
aWYgKGRlc2NyaXB0aW9uT1NTdGF0dXMgJiYgZGVzY3JpcHRpb25PU1N0YXR1c1swXSAhPSAnXDAn
KQorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiT1NTdGF0dXMgRXJyb3IgIiArIFN0cmluZzo6
bnVtYmVyKGVycm9yQ29kZSkgKyAiOiAiICsgZGVzY3JpcHRpb25PU1N0YXR1czsKKyAgICB9CisK
KyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRp
ZgorCisjZW5kaWYKKworICAgIGlmIChkZXNjcmlwdGlvbi5pc051bGwoKSkgeworICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRlc2NyaXB0aW9uQ0YgPSBhZG9wdENGKENGRXJyb3JDb3B5
RGVzY3JpcHRpb24oZXJyb3IpKTsKKyAgICAgICAgZGVzY3JpcHRpb24gPSBTdHJpbmcoZGVzY3Jp
cHRpb25DRi5nZXQoKSk7CisgICAgfQorCisgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBt
X3VybC5zdHJpbmcoKSwgZGVzY3JpcHRpb24pKTsKK30KKworU29ja2V0U3RyZWFtSGFuZGxlOjp+
U29ja2V0U3RyZWFtSGFuZGxlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhh
bmRsZSAlcCBkdG9yIiwgdGhpcyk7CisKKyAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7
Cit9CisKK2ludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVz
KG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBD
RldyaXRlU3RyZWFtV3JpdGUobV93cml0ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVSW50OCo+KGRhdGEpLCBsZW5ndGgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6cGxhdGZvcm1DbG9zZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5k
bGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOworCisgICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJj
ZSkgCisgICAgICAgIHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKKworICAgIEFTU0VSVCghbV9y
ZWFkU3RyZWFtID09ICFtX3dyaXRlU3RyZWFtKTsKKyAgICBpZiAoIW1fcmVhZFN0cmVhbSkgewor
ICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1
YnN0YXRlID09IEV4ZWN1dGluZ1BBQ0ZpbGUpCisgICAgICAgICAgICBtX2NsaWVudC5kaWRDbG9z
ZVNvY2tldFN0cmVhbSgqdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBQTEFU
Rk9STShXSU4pCisgICAgQ0ZSZWFkU3RyZWFtVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0
cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAg
IENGV3JpdGVTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwg
bG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlJl
YWRTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZXcml0ZVN0cmVh
bVVuc2NoZWR1bGVGcm9tUnVuTG9vcChtX3dyaXRlU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRD
dXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisjZW5kaWYKKworICAgIENGUmVhZFN0
cmVhbUNsb3NlKG1fcmVhZFN0cmVhbS5nZXQoKSk7CisgICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1f
d3JpdGVTdHJlYW0uZ2V0KCkpOworICAgIAorICAgIG1fcmVhZFN0cmVhbSA9IDA7CisgICAgbV93
cml0ZVN0cmVhbSA9IDA7CisKKyAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhp
cyk7Cit9CisKK3Vuc2lnbmVkIHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0
Cit7CisgICAgaWYgKHVuc2lnbmVkIHNob3J0IHVybFBvcnQgPSBtX3VybC5wb3J0KCkpCisgICAg
ICAgIHJldHVybiB1cmxQb3J0OworICAgIGlmIChzaG91bGRVc2VTU0woKSkKKyAgICAgICAgcmV0
dXJuIDQ0MzsKKyAgICByZXR1cm4gODA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5j
bHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIgogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbC5o
IgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCkBAIC00MCwxOCArNDAsMTQgQEAKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCiAjaW5j
bHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
TmV0d29yay5oPgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0
d29yay5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiTG9hZGVyUnVu
TG9vcENGLmgiCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgogI2luY2x1ZGUgPFdl
YktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNlbHNlCiAjaW5j
bHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgpAQCAtNjcsOCArNjMsOCBAQCBleHRlcm4g
IkMiIGNvbnN0IENGU3RyaW5nUmVmIF9rQ0ZTdHJlYW1TCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQot
ICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVudCkKK1NvY2tldFN0cmVhbUhh
bmRsZUltcGw6OlNvY2tldFN0cmVhbUhhbmRsZUltcGwoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogU29j
a2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50KQogICAgICwgbV9jb25uZWN0aW5nU3Vic3RhdGUo
TmV3KQogICAgICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQogICAgICwgbV9zZW50U3RvcmVk
Q3JlZGVudGlhbHMoZmFsc2UpCkBAIC0xMDAsNyArOTYsNyBAQCBTb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjCiAgICAgc2NoZWR1bGVTdHJlYW1zKCk7CiB9CiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpzY2hlZHVsZVN0cmVhbXMoKQordm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjpzY2hlZHVsZVN0cmVhbXMoKQogewogICAgIEFTU0VSVChtX3JlYWRTdHJlYW0p
OwogICAgIEFTU0VSVChtX3dyaXRlU3RyZWFtKTsKQEAgLTEyNywyNSArMTIzLDI1IEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpzY2hlZHVsZVN0cmVhbXMKICAgICBtX2Nvbm5lY3RpbmdTdWJz
dGF0ZSA9IFdhaXRpbmdGb3JDb25uZWN0OwogfQogCi12b2lkKiBTb2NrZXRTdHJlYW1IYW5kbGU6
OnJldGFpblNvY2tldFN0cmVhbUhhbmRsZSh2b2lkKiBpbmZvKQordm9pZCogU29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6cmV0YWluU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQqIGluZm8pCiB7CiAgICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5k
bGUqPihpbmZvKTsKICAgICBoYW5kbGUtPnJlZigpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAK
LXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQq
IGluZm8pCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbGVhc2VTb2NrZXRTdHJlYW1I
YW5kbGUodm9pZCogaW5mbykKIHsKICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0
YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOwogICAgIGhhbmRsZS0+ZGVyZWYo
KTsKIH0KIAotQ0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9u
RGVzY3JpcHRpb24odm9pZCopCitDRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
b3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24odm9pZCopCiB7CiAgICAgcmV0dXJuIENGU1RSKCJX
ZWJTb2NrZXQgcHJveHkgUEFDIGZpbGUgZXhlY3V0aW9uIik7CiB9CiAKLXN0YXRpYyB2b2lkIGNh
bGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCitz
dGF0aWMgdm9pZCBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
ZnVuY3Rpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CiAgICAgICAgIGZ1bmN0aW9u
KCk7CkBAIC0xNjYsMTggKzE2MiwyMiBAQCBzdGF0aWMgdm9pZCBjYWxsT25NYWluVGhyZWFkQW5k
V2FpdChzdGQ6CiAgICAgfSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobXV0
ZXgpOwotICAgIGNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgWyZdIHsgcmV0dXJuIGlzRmlu
aXNoZWQ7IH0pOworICAgIGNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgWyZdIHsKKyAgICAg
ICAgcmV0dXJuIGlzRmluaXNoZWQ7CisgICAgfSk7CiB9CiAKIHN0cnVjdCBNYWluVGhyZWFkUEFD
Q2FsbGJhY2tJbmZvIHsKLSAgICBNYWluVGhyZWFkUEFDQ2FsbGJhY2tJbmZvKFNvY2tldFN0cmVh
bUhhbmRsZSogaGFuZGxlLCBDRkFycmF5UmVmIHByb3h5TGlzdCkgOiBoYW5kbGUoaGFuZGxlKSwg
cHJveHlMaXN0KHByb3h5TGlzdCkgeyB9CisgICAgTWFpblRocmVhZFBBQ0NhbGxiYWNrSW5mbyhT
b2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSwgQ0ZBcnJheVJlZiBwcm94eUxpc3QpCisgICAgICAg
IDogaGFuZGxlKGhhbmRsZSksIHByb3h5TGlzdChwcm94eUxpc3QpCisgICAgeyB9CiAgICAgUmVm
UHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gaGFuZGxlOwogICAgIENGQXJyYXlSZWYgcHJveHlMaXN0
OwogfTsKIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKHZv
aWQqIGNsaWVudCwgQ0ZBcnJheVJlZiBwcm94eUxpc3QsIENGRXJyb3JSZWYpCit2b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKHZvaWQqIGNsaWVudCwgQ0ZB
cnJheVJlZiBwcm94eUxpc3QsIENGRXJyb3JSZWYpCiB7Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxl
KiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnQpOworICAg
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVh
bUhhbmRsZUltcGwqPihjbGllbnQpOwogCiAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZd
IHsKICAgICAgICAgQVNTRVJUKGhhbmRsZS0+bV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gRXhlY3V0
aW5nUEFDRmlsZSk7CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OnBhY0V4ZWN1dGlvbkNhbAogICAgIH0pOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6
ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkKK3ZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkKIHsKICAg
ICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3IgV2ViU29ja2V0
IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgogICAgIENGU3RyZWFtQ2xpZW50Q29udGV4dCBj
bGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUsIHJlbGVh
c2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbiB9OwpAQCAt
MjAzLDcgKzIwMyw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpleGVjdXRlUEFDRmlsZVUK
ICAgICBtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9IEV4ZWN1dGluZ1BBQ0ZpbGU7CiB9CiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZW1vdmVQQUNSdW5Mb29wU291cmNlKCkKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6cmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpCiB7CiAgICAgQVNTRVJU
KG1fcGFjUnVuTG9vcFNvdXJjZSk7CiAKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVtb3ZlUEFDUnVuTG9vCiAgICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsK
IH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5KCkKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y2hvb3NlUHJveHkoKQogewogICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHByb3h5RGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrQ29weVN5c3RlbVBy
b3h5U2V0dGluZ3MoKSk7CiAKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6Y2hvb3NlUHJveHkoKQogICAgIGNob29zZVByb3h5RnJvbUFycmF5KHByb3h5QXJyYXku
Z2V0KCkpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y2hvb3NlUHJveHlGcm9tQXJy
YXkoQ0ZBcnJheVJlZiBwcm94eUFycmF5KQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
aG9vc2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkpCiB7CiAgICAgaWYgKCFw
cm94eUFycmF5KSB7CiAgICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBEaXJlY3Q7CkBAIC0yOTcs
NyArMjk3LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5RnJvbQogfQog
CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVTdHJlYW1zKCkKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y3JlYXRlU3RyZWFtcygpCiB7CiAgICAgaWYgKG1fY29ubmVjdGlv
blR5cGUgPT0gVW5rbm93bikKICAgICAgICAgY2hvb3NlUHJveHkoKTsKQEAgLTM1MCw3ICszNTAs
NyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygpCiAgICAgfQogfQog
Ci1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6Z2V0U3RvcmVkQ09OTkVDVFByb3h5Q3JlZGVudGlh
bHMoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgbG9naW4s
IFN0cmluZyYgcGFzc3dvcmQpCitib29sIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmdldFN0b3Jl
ZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlv
blNwYWNlLCBTdHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQogewogICAgIC8vIEZJWE1F
ICg8cmRhcjovL3Byb2JsZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJl
IHJldHJpZXZlZCBmcm9tIEF1dGhCcm9rZXJBZ2VudC4KIApAQCAtMzg1LDcgKzM4NSw3IEBAIHN0
YXRpYyBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGUKICAgICByZXR1cm4gUHJvdGVj
dGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVVbmtub3duOwogfQogCi12b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6YWRkQ09OTkVDVENyZWRlbnRpYWxzKENGSFRUUE1lc3NhZ2VSZWYgcHJveHlS
ZXNwb25zZSkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6YWRkQ09OTkVDVENyZWRlbnRp
YWxzKENGSFRUUE1lc3NhZ2VSZWYgcHJveHlSZXNwb25zZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZI
VFRQQXV0aGVudGljYXRpb25SZWY+IGF1dGhlbnRpY2F0aW9uID0gYWRvcHRDRihDRkhUVFBBdXRo
ZW50aWNhdGlvbkNyZWF0ZUZyb21SZXNwb25zZSgwLCBwcm94eVJlc3BvbnNlKSk7CiAKQEAgLTQz
NiwxNSArNDM2LDE1IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjphZGRDT05ORUNUQ3JlZGUK
ICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJv
cigwLCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGNyZWRlbnRpYWxzIGFyZSBub3QgYXZhaWxhYmxl
IikpOwogfQogCi1DRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlDRlN0cmVhbURl
c2NyaXB0aW9uKHZvaWQqIGluZm8pCitDRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
Ojpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQogewotICAgIFNvY2tldFN0cmVh
bUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7
CisgICAgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlSW1wbCo+KGluZm8pOwogICAgIHJldHVybiBTdHJpbmcoIldlYktpdCBzb2Nr
ZXQgc3RyZWFtLCAiICsgaGFuZGxlLT5tX3VybC5zdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKS5s
ZWFrUmVmKCk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGJh
Y2soQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSwgdm9pZCog
Y2xpZW50Q2FsbEJhY2tJbmZvKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFkU3Ry
ZWFtQ2FsbGJhY2soQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FdmVudFR5cGUgdHlw
ZSwgdm9pZCogY2xpZW50Q2FsbEJhY2tJbmZvKQogewotICAgIFNvY2tldFN0cmVhbUhhbmRsZSog
aGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oY2xpZW50Q2FsbEJhY2tJ
bmZvKTsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsKj4oY2xpZW50Q2FsbEJhY2tJbmZvKTsKICAgICBBU1NFUlRf
VU5VU0VEKHN0cmVhbSwgc3RyZWFtID09IGhhbmRsZS0+bV9yZWFkU3RyZWFtLmdldCgpKTsKICAg
ICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMTc3MjcwNzM+LiBLZWVwaW5nIHRo
aXMgYmVsb3cgdGhlIGFzc2VydGlvbiBhcyB3ZSdkIGxpa2UgYmV0dGVyIHN0ZXBzIHRvIHJlcHJv
ZHVjZSB0aGlzLgogICAgIGlmICghaGFuZGxlLT5tX3JlYWRTdHJlYW0pCkBAIC00NjIsOSArNDYy
LDkgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYgogI2VuZGlmCiB9
CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVT
dHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxs
QmFja0luZm8pCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJh
Y2soQ0ZXcml0ZVN0cmVhbVJlZiBzdHJlYW0sIENGU3RyZWFtRXZlbnRUeXBlIHR5cGUsIHZvaWQq
IGNsaWVudENhbGxCYWNrSW5mbykKIHsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGNsaWVudENhbGxCYWNrSW5mbyk7Cisg
ICAgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCo+KGNsaWVudENhbGxCYWNrSW5mbyk7CiAgICAgQVNTRVJUX1VOVVNFRChz
dHJlYW0sIHN0cmVhbSA9PSBoYW5kbGUtPm1fd3JpdGVTdHJlYW0uZ2V0KCkpOwogICAgIC8vIFRo
aXMgd2Fzbid0IHNlZW4gaGFwcGVuaW5nIGluIHByYWN0aWNlLCB5ZXQgaXQgc2VlbXMgbGlrZSBp
dCBjb3VsZCwgZHVlIHRvIHN5bW1ldHJ5IHdpdGggcmVhZCBzdHJlYW0gY2FsbGJhY2suCiAgICAg
aWYgKCFoYW5kbGUtPm1fd3JpdGVTdHJlYW0pCkBAIC00ODIsOSArNDgyLDkgQEAgdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbAogI2VuZGlmCiB9CiAKLXZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSkK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKENGU3RyZWFt
RXZlbnRUeXBlIHR5cGUpCiB7Ci0gICAgc3dpdGNoKHR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIGtDRlN0cmVhbUV2ZW50Tm9uZToKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2Uga0NGU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgpAQCAtNTU0LDkgKzU1NCw5IEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGIKICAgICB9CiB9CiAKLXZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlIHR5
cGUpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZT
dHJlYW1FdmVudFR5cGUgdHlwZSkKIHsKLSAgICBzd2l0Y2godHlwZSkgeworICAgIHN3aXRjaCAo
dHlwZSkgewogICAgIGNhc2Uga0NGU3RyZWFtRXZlbnROb25lOgogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6CkBAIC02MTAsNyArNjEwLDcgQEAg
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbAogICAgIH0KIH0KIAotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQoQ0ZFcnJvclJlZiBlcnJv
cikKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVwb3J0RXJyb3JUb0NsaWVudChDRkVy
cm9yUmVmIGVycm9yKQogewogICAgIENGSW5kZXggZXJyb3JDb2RlID0gQ0ZFcnJvckdldENvZGUo
ZXJyb3IpOwogICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKQEAgLTY0MiwxNCArNjQyLDE0IEBAIHZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2wKICAgICBtX2NsaWVudC5kaWRG
YWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcihzdGF0aWNfY2FzdDxpbnQ+
KGVycm9yQ29kZSksIG1fdXJsLnN0cmluZygpLCBkZXNjcmlwdGlvbikpOwogfQogCi1Tb2NrZXRT
dHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQorU29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6flNvY2tldFN0cmVhbUhhbmRsZUltcGwoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0
U3RyZWFtSGFuZGxlICVwIGR0b3IiLCB0aGlzKTsKIAogICAgIEFTU0VSVCghbV9wYWNSdW5Mb29w
U291cmNlKTsKIH0KIAotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKCFDRldy
aXRlU3RyZWFtQ2FuQWNjZXB0Qnl0ZXMobV93cml0ZVN0cmVhbS5nZXQoKSkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIGludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRm
b3JtU2VuZChjb24KICAgICByZXR1cm4gQ0ZXcml0ZVN0cmVhbVdyaXRlKG1fd3JpdGVTdHJlYW0u
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKSwgbGVuZ3RoKTsKIH0K
IAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQordm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3NlKCkKIHsKICAgICBMT0coTmV0d29yaywgIlNv
Y2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybUNsb3NlIiwgdGhpcyk7CiAKQEAgLTY4OCw3ICs2
ODgsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiAgICAgbV9j
bGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi11bnNpZ25lZCBzaG9ydCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnBvcnQoKSBjb25zdAordW5zaWduZWQgc2hvcnQgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbDo6cG9ydCgpIGNvbnN0CiB7CiAgICAgaWYgKHVuc2lnbmVkIHNob3J0IHVy
bFBvcnQgPSBtX3VybC5wb3J0KCkpCiAgICAgICAgIHJldHVybiB1cmxQb3J0OwpAQCAtNjk3LDQg
KzY5Nyw0IEBAIHVuc2lnbmVkIHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgKICAgICBy
ZXR1cm4gODA7CiB9CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTb2Nr
ZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8d2lu
c29jazIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiU2Vzc2lvbklELmgiCi0jaW5jbHVkZSA8Y3Vy
bC9jdXJsLmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7
Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBV
UkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQot
Ci0gICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7Ci0KLXByaXZhdGU6Ci0gICAgU29j
a2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwot
Ci0gICAgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKLQotICAgIGJvb2wgcmVh
ZERhdGEoQ1VSTCopOwotICAgIGJvb2wgc2VuZERhdGEoQ1VSTCopOwotICAgIGJvb2wgd2FpdEZv
ckF2YWlsYWJsZURhdGEoQ1VSTCosIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGlt
ZW91dCk7Ci0KLSAgICB2b2lkIHN0YXJ0VGhyZWFkKCk7Ci0gICAgdm9pZCBzdG9wVGhyZWFkKCk7
Ci0KLSAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKCk7Ci0gICAgdm9pZCBkaWRPcGVuU29ja2V0KCk7
Ci0KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY3JlYXRlQ29weShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLQotICAgIHN0cnVjdCBTb2NrZXREYXRhIHsKLSAgICAg
ICAgU29ja2V0RGF0YShzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiYmIHNvdXJjZSwgaW50IGxlbmd0
aCkKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUoc291cmNlKTsKLSAgICAg
ICAgICAgIHNpemUgPSBsZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAgICBTb2NrZXREYXRhKFNv
Y2tldERhdGEmJiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUo
b3RoZXIuZGF0YSk7Ci0gICAgICAgICAgICBzaXplID0gb3RoZXIuc2l6ZTsKLSAgICAgICAgICAg
IG90aGVyLnNpemUgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNo
YXJbXT4gZGF0YTsKLSAgICAgICAgaW50IHNpemUgeyAwIH07Ci0gICAgfTsKLQotICAgIFRocmVh
ZElkZW50aWZpZXIgbV93b3JrZXJUaHJlYWQgeyAwIH07Ci0gICAgc3RkOjphdG9taWM8Ym9vbD4g
bV9zdG9wVGhyZWFkIHsgZmFsc2UgfTsKLSAgICBMb2NrIG1fbXV0ZXhTZW5kOwotICAgIExvY2sg
bV9tdXRleFJlY2VpdmU7Ci0gICAgRGVxdWU8U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKLSAgICBE
ZXF1ZTxTb2NrZXREYXRhPiBtX3JlY2VpdmVEYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMjA0NDY4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUN1cmwuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hhbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgotCi0jaWYgVVNFKENVUkwp
Ci0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8d3Rm
L0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQot
ewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAi
LCB0aGlzLCAmbV9jbGllbnQpOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3Rh
cnRUaHJlYWQoKTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxl
KCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkZWxldGUiLCB0
aGlzKTsKLSAgICBBU1NFUlQoIW1fd29ya2VyVGhyZWFkKTsKLX0KLQotaW50IFNvY2tldFN0cmVh
bUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0g
ICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kIiwgdGhp
cyk7Ci0KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhcnRUaHJlYWQoKTsK
LQotICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoZGF0YSwgbGVuZ3RoKTsKLQotICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKLSAgICBtX3NlbmREYXRhLmFwcGVu
ZChTb2NrZXREYXRhIHsgV1RGTW92ZShjb3B5KSwgbGVuZ3RoIH0pOwotCi0gICAgcmV0dXJuIGxl
bmd0aDsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQotewot
ICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0
aGlzKTsKLQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBzdG9wVGhyZWFkKCk7
Ci0KLSAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLWJvb2wg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YShDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgY29uc3QgaW50IGJ1ZmZlclNpemUgPSAxMDI0
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IGRhdGEobmV3IGNoYXJbYnVmZmVyU2l6ZV0p
OwotICAgIHNpemVfdCBieXRlc1JlYWQgPSAwOwotCi0gICAgQ1VSTGNvZGUgcmV0ID0gY3VybF9l
YXN5X3JlY3YoY3VybEhhbmRsZSwgZGF0YS5nZXQoKSwgYnVmZmVyU2l6ZSwgJmJ5dGVzUmVhZCk7
Ci0KLSAgICBpZiAocmV0ID09IENVUkxFX09LICYmIGJ5dGVzUmVhZCA+PSAwKSB7Ci0gICAgICAg
IG1fbXV0ZXhSZWNlaXZlLmxvY2soKTsKLSAgICAgICAgbV9yZWNlaXZlRGF0YS5hcHBlbmQoU29j
a2V0RGF0YSB7IFdURk1vdmUoZGF0YSksIHN0YXRpY19jYXN0PGludD4oYnl0ZXNSZWFkKSB9KTsK
LSAgICAgICAgbV9tdXRleFJlY2VpdmUudW5sb2NrKCk7Ci0KLSAgICAgICAgcmVmKCk7Ci0KLSAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10gewotICAgICAgICAgICAgZGlkUmVjZWl2ZURh
dGEoKTsKLSAgICAgICAgICAgIGRlcmVmKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChyZXQgPT0gQ1VSTEVfQUdBSU4pCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNvY2tldFN0cmVhbUhh
bmRsZTo6c2VuZERhdGEoQ1VSTCogY3VybEhhbmRsZSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0KLSAgICAgICAgbV9tdXRleFNlbmQubG9j
aygpOwotICAgICAgICBpZiAoIW1fc2VuZERhdGEuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBtX211
dGV4U2VuZC51bmxvY2soKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGF1dG8gc2VuZERhdGEgPSBtX3NlbmREYXRhLnRha2VGaXJzdCgpOwotICAgICAgICBtX211dGV4
U2VuZC51bmxvY2soKTsKLQotICAgICAgICBpbnQgdG90YWxCeXRlc1NlbnQgPSAwOwotICAgICAg
ICB3aGlsZSAodG90YWxCeXRlc1NlbnQgPCBzZW5kRGF0YS5zaXplKSB7Ci0gICAgICAgICAgICBz
aXplX3QgYnl0ZXNTZW50ID0gMDsKLSAgICAgICAgICAgIENVUkxjb2RlIHJldCA9IGN1cmxfZWFz
eV9zZW5kKGN1cmxIYW5kbGUsIHNlbmREYXRhLmRhdGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwg
c2VuZERhdGEuc2l6ZSAtIHRvdGFsQnl0ZXNTZW50LCAmYnl0ZXNTZW50KTsKLSAgICAgICAgICAg
IGlmIChyZXQgPT0gQ1VSTEVfT0spCi0gICAgICAgICAgICAgICAgdG90YWxCeXRlc1NlbnQgKz0g
Ynl0ZXNTZW50OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gSW5zZXJ0IHJlbWFpbmluZyBkYXRhIGludG8gc2VuZCBxdWV1
ZS4KLQotICAgICAgICBpZiAodG90YWxCeXRlc1NlbnQgPCBzZW5kRGF0YS5zaXplKSB7Ci0gICAg
ICAgICAgICBjb25zdCBpbnQgcmVzdExlbmd0aCA9IHNlbmREYXRhLnNpemUgLSB0b3RhbEJ5dGVz
U2VudDsKLSAgICAgICAgICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoc2VuZERhdGEuZGF0YS5n
ZXQoKSArIHRvdGFsQnl0ZXNTZW50LCByZXN0TGVuZ3RoKTsKLQotICAgICAgICAgICAgc3RkOjps
b2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleFNlbmQpOwotICAgICAgICAgICAgbV9zZW5kRGF0
YS5wcmVwZW5kKFNvY2tldERhdGEgeyBXVEZNb3ZlKGNvcHkpLCByZXN0TGVuZ3RoIH0pOwotCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OndhaXRGb3JBdmFpbGFibGVEYXRh
KENVUkwqIGN1cmxIYW5kbGUsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91
dCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHMgdXNlYyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25v
OjptaWNyb3NlY29uZHM+KHNlbGVjdFRpbWVvdXQpOwotCi0gICAgc3RydWN0IHRpbWV2YWwgdGlt
ZW91dDsKLSAgICBpZiAodXNlYyA8PSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApKSB7Ci0g
ICAgICAgIHRpbWVvdXQudHZfc2VjID0gMDsKLSAgICAgICAgdGltZW91dC50dl91c2VjID0gMDsK
LSAgICB9IGVsc2UgewotICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IHVzZWMuY291bnQoKSAvIDEw
MDAwMDA7Ci0gICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHVzZWMuY291bnQoKSAlIDEwMDAwMDA7
Ci0gICAgfQotCi0gICAgbG9uZyBzb2NrZXQ7Ci0gICAgaWYgKGN1cmxfZWFzeV9nZXRpbmZvKGN1
cmxIYW5kbGUsIENVUkxJTkZPX0xBU1RTT0NLRVQsICZzb2NrZXQpICE9IENVUkxFX09LKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmZF9zZXQgZmRyZWFkOwotICAgIEZEX1pFUk8oJmZk
cmVhZCk7Ci0gICAgRkRfU0VUKHNvY2tldCwgJmZkcmVhZCk7Ci0gICAgaW50IHJjID0gOjpzZWxl
Y3QoMCwgJmZkcmVhZCwgbnVsbHB0ciwgbnVsbHB0ciwgJnRpbWVvdXQpOwotICAgIHJldHVybiBy
YyA9PSAxOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhcnRUaHJlYWQoKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV93b3JrZXJUaHJlYWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRl
cmVmKCkuCi0KLSAgICBtX3dvcmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRo
cmVhZCIsIFt0aGlzXSB7Ci0KLSAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICAgICAgQ1VSTCogY3VybEhhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7Ci0KLSAgICAgICAgaWYg
KCFjdXJsSGFuZGxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQoY3VybEhhbmRsZSwgQ1VSTE9QVF9VUkwsIG1fdXJsLmhvc3QoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsSGFuZGxlLCBDVVJMT1BUX1BPUlQsIG1f
dXJsLnBvcnQoKSk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybEhhbmRsZSwgQ1VSTE9Q
VF9DT05ORUNUX09OTFksIDFMKTsKLQotICAgICAgICAvLyBDb25uZWN0IHRvIGhvc3QKLSAgICAg
ICAgaWYgKGN1cmxfZWFzeV9wZXJmb3JtKGN1cmxIYW5kbGUpICE9IENVUkxFX09LKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHJlZigpOwotCi0gICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW3RoaXNdIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHJlZmVyZW5jZSBjb3VudCB0byBmaXgg
YSBjcmFzaC4KLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNhbGwgaXMgaW52b2tlZCBvbiB0aGUg
bWFpbiB0aHJlYWQgYWZ0ZXIgYWxsIG90aGVyIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkLCB0aGUg
U29ja2V0U3RyZWFtQ2xpZW50Ci0gICAgICAgICAgICAvLyBpcyBhbHJlYWR5IGRlbGV0ZWQuIEFj
Y2Vzc2luZyB0aGUgU29ja2V0U3RyZWFtQ2xpZW50IGluIGRpZE9wZW5Tb2NrZXQoKSB3aWxsIHRo
ZW4gY2F1c2UgYSBjcmFzaC4KLSAgICAgICAgICAgIGlmIChyZWZDb3VudCgpID4gMSkKLSAgICAg
ICAgICAgICAgICBkaWRPcGVuU29ja2V0KCk7Ci0gICAgICAgICAgICBkZXJlZigpOwotICAgICAg
ICB9KTsKLQotICAgICAgICB3aGlsZSAoIW1fc3RvcFRocmVhZCkgewotICAgICAgICAgICAgLy8g
U2VuZCBxdWV1ZWQgZGF0YQotICAgICAgICAgICAgc2VuZERhdGEoY3VybEhhbmRsZSk7Ci0KLSAg
ICAgICAgICAgIC8vIFdhaXQgdW50aWwgc29ja2V0IGhhcyBhdmFpbGFibGUgZGF0YQotICAgICAg
ICAgICAgaWYgKHdhaXRGb3JBdmFpbGFibGVEYXRhKGN1cmxIYW5kbGUsIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMoMjApKSkKLSAgICAgICAgICAgICAgICByZWFkRGF0YShjdXJsSGFuZGxlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmxIYW5kbGUpOwotICAg
IH0pOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFRocmVhZCgpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV93b3JrZXJUaHJlYWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fc3RvcFRocmVhZCA9IHRydWU7Ci0gICAgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24obV93b3JrZXJUaHJlYWQpOwotICAgIG1fd29ya2VyVGhyZWFkID0gMDsKLSAg
ICBkZXJlZigpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkUmVjZWl2ZURhdGEo
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBtX211dGV4UmVjZWl2ZS5s
b2NrKCk7Ci0KLSAgICBhdXRvIHJlY2VpdmVEYXRhID0gV1RGTW92ZShtX3JlY2VpdmVEYXRhKTsK
LQotICAgIG1fbXV0ZXhSZWNlaXZlLnVubG9jaygpOwotCi0gICAgZm9yIChhdXRvJiBzb2NrZXRE
YXRhIDogcmVjZWl2ZURhdGEpIHsKLSAgICAgICAgaWYgKHNvY2tldERhdGEuc2l6ZSA+IDApIHsK
LSAgICAgICAgICAgIGlmIChzdGF0ZSgpID09IE9wZW4pCi0gICAgICAgICAgICAgICAgbV9jbGll
bnQuZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURhdGEoKnRoaXMsIHNvY2tldERhdGEuZGF0YS5nZXQo
KSwgc29ja2V0RGF0YS5zaXplKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwbGF0Zm9y
bUNsb3NlKCk7Ci0gICAgfQotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkT3BlblNv
Y2tldCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fc3RhdGUgPSBP
cGVuOwotCi0gICAgbV9jbGllbnQuZGlkT3BlblNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxjaGFyW10+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlQ29weShjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+
IGNvcHkobmV3IGNoYXJbbGVuZ3RoXSk7Ci0gICAgbWVtY3B5KGNvcHkuZ2V0KCksIGRhdGEsIGxl
bmd0aCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjb3B5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkocmV2
aXNpb24gMjA0NDY2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVC
YXNlLmgiCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRp
ZgorCisjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tl
dFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1I
YW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0
U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorCisgICAgdmlydHVhbCB+
U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworCisgICAgaW50IHBsYXRm
b3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2b2lk
IHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKKworICAgIGJvb2wgcmVhZERhdGEoQ1VSTCopOwor
ICAgIGJvb2wgc2VuZERhdGEoQ1VSTCopOworICAgIGJvb2wgd2FpdEZvckF2YWlsYWJsZURhdGEo
Q1VSTCosIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91dCk7CisKKyAgICB2
b2lkIHN0YXJ0VGhyZWFkKCk7CisgICAgdm9pZCBzdG9wVGhyZWFkKCk7CisKKyAgICB2b2lkIGRp
ZFJlY2VpdmVEYXRhKCk7CisgICAgdm9pZCBkaWRPcGVuU29ja2V0KCk7CisKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY3JlYXRlQ29weShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKTsKKworICAgIHN0cnVjdCBTb2NrZXREYXRhIHsKKyAgICAgICAgU29ja2V0RGF0YShz
dGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiYmIHNvdXJjZSwgaW50IGxlbmd0aCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUoc291cmNlKTsKKyAgICAgICAgICAgIHNpemUgPSBs
ZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBTb2NrZXREYXRhKFNvY2tldERhdGEmJiBvdGhl
cikKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUob3RoZXIuZGF0YSk7Cisg
ICAgICAgICAgICBzaXplID0gb3RoZXIuc2l6ZTsKKyAgICAgICAgICAgIG90aGVyLnNpemUgPSAw
OworICAgICAgICB9CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gZGF0YTsKKyAg
ICAgICAgaW50IHNpemUgeyAwIH07CisgICAgfTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV93
b3JrZXJUaHJlYWQgeyAwIH07CisgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsg
ZmFsc2UgfTsKKyAgICBMb2NrIG1fbXV0ZXhTZW5kOworICAgIExvY2sgbV9tdXRleFJlY2VpdmU7
CisgICAgRGVxdWU8U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKKyAgICBEZXF1ZTxTb2NrZXREYXRh
PiBtX3JlY2VpdmVEYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29j
a2V0U3RyZWFtSGFuZGxlSW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgog
CiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPHdpbnNvY2syLmg+CkBAIC00OCwxNCArNDgs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQ7CiAKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7
CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsIDogcHVibGljIFNvY2tldFN0cmVhbUhhbmRs
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShj
b25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25J
RCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQp
KTsgfQorICAgIHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJM
JiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCh1cmwsIGNsaWVudCkpOyB9
CiAKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGUoKTsKKyAgICB2aXJ0dWFsIH5Tb2Nr
ZXRTdHJlYW1IYW5kbGVJbXBsKCk7CiAKIHByaXZhdGU6Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworICAgIFNvY2tldFN0cmVh
bUhhbmRsZUltcGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKICAg
ICBpbnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRl
OwogICAgIHZvaWQgcGxhdGZvcm1DbG9zZSgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCShyZXZpc2lvbiAyMDQ0NjgpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcDoy
MDQ0NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbEN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIKKwor
I2lmIFVTRShDVVJMKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPG11dGV4Pgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU29ja2V0
U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQorICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1
cmwsIGNsaWVudCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBu
ZXcgY2xpZW50ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIHN0YXJ0VGhyZWFkKCk7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tl
dFN0cmVhbUhhbmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUg
JXAgZGVsZXRlIiwgdGhpcyk7CisgICAgQVNTRVJUKCFtX3dvcmtlclRocmVhZCk7Cit9CisKK2lu
dCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQoreworICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRm
b3JtU2VuZCIsIHRoaXMpOworCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHN0
YXJ0VGhyZWFkKCk7CisKKyAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KGRhdGEsIGxlbmd0aCk7
CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4U2VuZCk7CisgICAgbV9z
ZW5kRGF0YS5hcHBlbmQoU29ja2V0RGF0YSB7IFdURk1vdmUoY29weSksIGxlbmd0aCB9KTsKKwor
ICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9y
bUNsb3NlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0
Zm9ybUNsb3NlIiwgdGhpcyk7CisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAg
c3RvcFRocmVhZCgpOworCisgICAgbV9jbGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMp
OworfQorCitib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZERhdGEoQ1VSTCogY3VybEhhbmRs
ZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IGludCBidWZm
ZXJTaXplID0gMTAyNDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBkYXRhKG5ldyBjaGFy
W2J1ZmZlclNpemVdKTsKKyAgICBzaXplX3QgYnl0ZXNSZWFkID0gMDsKKworICAgIENVUkxjb2Rl
IHJldCA9IGN1cmxfZWFzeV9yZWN2KGN1cmxIYW5kbGUsIGRhdGEuZ2V0KCksIGJ1ZmZlclNpemUs
ICZieXRlc1JlYWQpOworCisgICAgaWYgKHJldCA9PSBDVVJMRV9PSyAmJiBieXRlc1JlYWQgPj0g
MCkgeworICAgICAgICBtX211dGV4UmVjZWl2ZS5sb2NrKCk7CisgICAgICAgIG1fcmVjZWl2ZURh
dGEuYXBwZW5kKFNvY2tldERhdGEgeyBXVEZNb3ZlKGRhdGEpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5
dGVzUmVhZCkgfSk7CisgICAgICAgIG1fbXV0ZXhSZWNlaXZlLnVubG9jaygpOworCisgICAgICAg
IHJlZigpOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgICAg
IGRpZFJlY2VpdmVEYXRhKCk7CisgICAgICAgICAgICBkZXJlZigpOworICAgICAgICB9KTsKKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocmV0ID09IENVUkxFX0FHQUlO
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENVUkwqIGN1cmxIYW5kbGUpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworCisgICAgICAgIG1f
bXV0ZXhTZW5kLmxvY2soKTsKKyAgICAgICAgaWYgKCFtX3NlbmREYXRhLnNpemUoKSkgeworICAg
ICAgICAgICAgbV9tdXRleFNlbmQudW5sb2NrKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBhdXRvIHNlbmREYXRhID0gbV9zZW5kRGF0YS50YWtlRmlyc3QoKTsKKyAg
ICAgICAgbV9tdXRleFNlbmQudW5sb2NrKCk7CisKKyAgICAgICAgaW50IHRvdGFsQnl0ZXNTZW50
ID0gMDsKKyAgICAgICAgd2hpbGUgKHRvdGFsQnl0ZXNTZW50IDwgc2VuZERhdGEuc2l6ZSkgewor
ICAgICAgICAgICAgc2l6ZV90IGJ5dGVzU2VudCA9IDA7CisgICAgICAgICAgICBDVVJMY29kZSBy
ZXQgPSBjdXJsX2Vhc3lfc2VuZChjdXJsSGFuZGxlLCBzZW5kRGF0YS5kYXRhLmdldCgpICsgdG90
YWxCeXRlc1NlbnQsIHNlbmREYXRhLnNpemUgLSB0b3RhbEJ5dGVzU2VudCwgJmJ5dGVzU2VudCk7
CisgICAgICAgICAgICBpZiAocmV0ID09IENVUkxFX09LKQorICAgICAgICAgICAgICAgIHRvdGFs
Qnl0ZXNTZW50ICs9IGJ5dGVzU2VudDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluc2VydCByZW1haW5pbmcgZGF0YSBp
bnRvIHNlbmQgcXVldWUuCisKKyAgICAgICAgaWYgKHRvdGFsQnl0ZXNTZW50IDwgc2VuZERhdGEu
c2l6ZSkgeworICAgICAgICAgICAgY29uc3QgaW50IHJlc3RMZW5ndGggPSBzZW5kRGF0YS5zaXpl
IC0gdG90YWxCeXRlc1NlbnQ7CisgICAgICAgICAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KHNl
bmREYXRhLmRhdGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwgcmVzdExlbmd0aCk7CisKKyAgICAg
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKKyAgICAgICAg
ICAgIG1fc2VuZERhdGEucHJlcGVuZChTb2NrZXREYXRhIHsgV1RGTW92ZShjb3B5KSwgcmVzdExl
bmd0aCB9KTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjp3YWl0Rm9y
QXZhaWxhYmxlRGF0YShDVVJMKiBjdXJsSGFuZGxlLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHNlbGVjdFRpbWVvdXQpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHVzZWMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2Fz
dDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzZWxlY3RUaW1lb3V0KTsKKworICAgIHN0cnVj
dCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgaWYgKHVzZWMgPD0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b25kcygwKSkgeworICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgICAgIHRpbWVvdXQu
dHZfdXNlYyA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGltZW91dC50dl9zZWMgPSB1c2Vj
LmNvdW50KCkgLyAxMDAwMDAwOworICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSB1c2VjLmNvdW50
KCkgJSAxMDAwMDAwOworICAgIH0KKworICAgIGxvbmcgc29ja2V0OworICAgIGlmIChjdXJsX2Vh
c3lfZ2V0aW5mbyhjdXJsSGFuZGxlLCBDVVJMSU5GT19MQVNUU09DS0VULCAmc29ja2V0KSAhPSBD
VVJMRV9PSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmRfc2V0IGZkcmVhZDsKKyAg
ICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1NFVChzb2NrZXQsICZmZHJlYWQpOworICAgIGlu
dCByYyA9IDo6c2VsZWN0KDAsICZmZHJlYWQsIG51bGxwdHIsIG51bGxwdHIsICZ0aW1lb3V0KTsK
KyAgICByZXR1cm4gcmMgPT0gMTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0YXJ0
VGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fd29y
a2VyVGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICByZWYoKTsgLy8gc3RvcFRocmVhZCgp
IHdpbGwgY2FsbCBkZXJlZigpLgorCisgICAgbV93b3JrZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQo
IldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10geworCisgICAgICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworCisgICAgICAgIENVUkwqIGN1cmxIYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwor
CisgICAgICAgIGlmICghY3VybEhhbmRsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxIYW5kbGUsIENVUkxPUFRfVVJMLCBtX3VybC5ob3N0KCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybEhhbmRsZSwgQ1VS
TE9QVF9QT1JULCBtX3VybC5wb3J0KCkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxI
YW5kbGUsIENVUkxPUFRfQ09OTkVDVF9PTkxZLCAxTCk7CisKKyAgICAgICAgLy8gQ29ubmVjdCB0
byBob3N0CisgICAgICAgIGlmIChjdXJsX2Vhc3lfcGVyZm9ybShjdXJsSGFuZGxlKSAhPSBDVVJM
RV9PSykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZWYoKTsKKworICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgICAgICAvLyBDaGVjayByZWZlcmVuY2Ug
Y291bnQgdG8gZml4IGEgY3Jhc2guCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBjYWxsIGlzIGlu
dm9rZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIGFsbCBvdGhlciByZWZlcmVuY2VzIGFyZSBy
ZWxlYXNlZCwgdGhlIFNvY2tldFN0cmVhbUNsaWVudAorICAgICAgICAgICAgLy8gaXMgYWxyZWFk
eSBkZWxldGVkLiBBY2Nlc3NpbmcgdGhlIFNvY2tldFN0cmVhbUNsaWVudCBpbiBkaWRPcGVuU29j
a2V0KCkgd2lsbCB0aGVuIGNhdXNlIGEgY3Jhc2guCisgICAgICAgICAgICBpZiAocmVmQ291bnQo
KSA+IDEpCisgICAgICAgICAgICAgICAgZGlkT3BlblNvY2tldCgpOworICAgICAgICAgICAgZGVy
ZWYoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgd2hpbGUgKCFtX3N0b3BUaHJlYWQpIHsKKyAg
ICAgICAgICAgIC8vIFNlbmQgcXVldWVkIGRhdGEKKyAgICAgICAgICAgIHNlbmREYXRhKGN1cmxI
YW5kbGUpOworCisgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHNvY2tldCBoYXMgYXZhaWxhYmxl
IGRhdGEKKyAgICAgICAgICAgIGlmICh3YWl0Rm9yQXZhaWxhYmxlRGF0YShjdXJsSGFuZGxlLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDIwKSkpCisgICAgICAgICAgICAgICAgcmVhZERhdGEo
Y3VybEhhbmRsZSk7CisgICAgICAgIH0KKworICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJs
SGFuZGxlKTsKKyAgICB9KTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BUaHJl
YWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fd29ya2Vy
VGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOworICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKKyAgICBtX3dvcmtlclRo
cmVhZCA9IDA7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRp
ZFJlY2VpdmVEYXRhKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9t
dXRleFJlY2VpdmUubG9jaygpOworCisgICAgYXV0byByZWNlaXZlRGF0YSA9IFdURk1vdmUobV9y
ZWNlaXZlRGF0YSk7CisKKyAgICBtX211dGV4UmVjZWl2ZS51bmxvY2soKTsKKworICAgIGZvciAo
YXV0byYgc29ja2V0RGF0YSA6IHJlY2VpdmVEYXRhKSB7CisgICAgICAgIGlmIChzb2NrZXREYXRh
LnNpemUgPiAwKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUoKSA9PSBPcGVuKQorICAgICAgICAg
ICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCBzb2NrZXRE
YXRhLmRhdGEuZ2V0KCksIHNvY2tldERhdGEuc2l6ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgcGxhdGZvcm1DbG9zZSgpOworICAgIH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmRpZE9wZW5Tb2NrZXQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBtX3N0YXRlID0gT3BlbjsKKworICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRo
aXMpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNy
ZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Y2hhcltdPiBjb3B5KG5ldyBjaGFyW2xlbmd0aF0pOworICAgIG1lbWNweShjb3B5Lmdl
dCgpLCBkYXRhLCBsZW5ndGgpOworCisgICAgcmV0dXJuIFdURk1vdmUoY29weSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsQ3VybC5jcHAJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbC5oIgogCiAjaWYgVVNFKENVUkwpCiAKQEAgLTQ0LDIxICs0NCwyMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKLSAgICA6
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UodXJsLCBjbGllbnQpCitTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICA6IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVu
dCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50
ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IHN0YXJ0VGhyZWFkKCk7CiB9CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhh
bmRsZSgpCitTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCgp
CiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhp
cyk7CiAgICAgQVNTRVJUKCFtX3dvcmtlclRocmVhZCk7CiB9CiAKLWludCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50IFNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRm
b3JtU2VuZCIsIHRoaXMpOwogCkBAIC03NCw3ICs3NCw3IEBAIGludCBTb2NrZXRTdHJlYW1IYW5k
bGU6OnBsYXRmb3JtU2VuZChjb24KICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi12b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnBsYXRmb3JtQ2xvc2UoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFu
ZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0aGlzKTsKIApAQCAtODUsNyArODUsNyBAQCB2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiAgICAgbV9jbGllbnQuZGlkQ2xvc2VT
b2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZERh
dGEoQ1VSTCogY3VybEhhbmRsZSkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZERh
dGEoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApA
QCAtMTE2LDcgKzExNiw3IEBAIGJvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YShDVVJM
KiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5k
RGF0YShDVVJMKiBjdXJsSGFuZGxlKQorYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzZW5k
RGF0YShDVVJMKiBjdXJsSGFuZGxlKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
CkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENV
UkwqIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6d2Fp
dEZvckF2YWlsYWJsZURhdGEoQ1VSTCogY3VybEhhbmRsZSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyBzZWxlY3RUaW1lb3V0KQorYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3YWl0Rm9y
QXZhaWxhYmxlRGF0YShDVVJMKiBjdXJsSGFuZGxlLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHNlbGVjdFRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTE4
Miw3ICsxODIsNyBAQCBib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsCiAg
ICAgcmV0dXJuIHJjID09IDE7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRo
cmVhZCgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OnN0YXJ0VGhyZWFkKCkKICAgICB9KTsKIH0KIAotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OnN0b3BUaHJlYWQoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpz
dG9wVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNDUsNyAr
MjQ1LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BUaHJlYWQoKQogICAgIGRlcmVm
KCk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRSZWNlaXZlRGF0YSgpCit2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmRpZFJlY2VpdmVEYXRhKCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OmRpZFJlY2VpdmVEYXRhKAogICAgIH0KIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmRpZE9wZW5Tb2NrZXQoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpkaWRPcGVu
U29ja2V0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNzMsNyArMjcz
LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQoKQogICAgIG1fY2xp
ZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Y2hh
cltdPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKK3N0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OmNyZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Y2hhcltdPiBjb3B5KG5ldyBjaGFyW2xlbmd0aF0pOwogICAgIG1lbWNweShjb3B5
LmdldCgpLCBkYXRhLCBsZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24g
MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZS5oCShub25leGlzdGVudCkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KLSNpZiBV
U0UoU09VUCkKLQotI2luY2x1ZGUgIlNlc3Npb25JRC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUVycm9yOwotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50OwotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgZmluYWwgOiBwdWJsaWMgUmVmQ291
bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25z
dCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmLCBTZXNzaW9uSUQpOwotICAgIHN0YXRp
YyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRs
ZSgpOwotCi1wcml2YXRlOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKLQotICAgIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUNsb3NlKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7
Ci0gICAgdm9pZCBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0KLSAgICBzdGF0
aWMgdm9pZCBjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiwgR0FzeW5jUmVzdWx0Kiwg
U29ja2V0U3RyZWFtSGFuZGxlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVhZFJlYWR5Q2FsbGJhY2so
R0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3RyZWFtSGFuZGxlKik7Ci0gICAg
c3RhdGljIGdib29sZWFuIHdyaXRlUmVhZHlDYWxsYmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0q
LCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKLQotICAgIHZvaWQgY29ubmVjdGVkKEdSZWZQdHI8R1Nv
Y2tldENvbm5lY3Rpb24+JiYpOwotICAgIHZvaWQgcmVhZEJ5dGVzKGdzc2l6ZSk7Ci0gICAgdm9p
ZCBkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yJiYpOwotICAgIHZvaWQgd3JpdGVSZWFkeSgpOwot
Ci0gICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOwotICAg
IEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOwotICAgIEdSZWZQdHI8R1BvbGxh
YmxlT3V0cHV0U3RyZWFtPiBtX291dHB1dFN0cmVhbTsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IG1f
d3JpdGVSZWFkeVNvdXJjZTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJs
ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBtX3JlYWRCdWZmZXI7Ci19OwotCi19ICAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aAkocmV2aXNpb24gMjA0NDY2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0
cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNv
Y2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKKworI2lmIFVTRShTT1VQKQorCisjaW5jbHVkZSAiU2Vz
c2lvbklELmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29ja2V0U3RyZWFt
RXJyb3I7CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0
cmVhbUhhbmRsZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4s
IHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudCYsIFNlc3Npb25JRCk7CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+
IGNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiosIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwor
CisgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgU29j
a2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwor
CisgICAgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYmVn
aW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICB2b2lkIHN0b3BXYWl0aW5nRm9y
U29ja2V0V3JpdGFiaWxpdHkoKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENhbGxiYWNr
KEdTb2NrZXRDbGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAg
ICBzdGF0aWMgdm9pZCByZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1
bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd3JpdGVSZWFk
eUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRsZSopOwor
CisgICAgdm9pZCBjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJik7CisgICAg
dm9pZCByZWFkQnl0ZXMoZ3NzaXplKTsKKyAgICB2b2lkIGRpZEZhaWwoU29ja2V0U3RyZWFtRXJy
b3ImJik7CisgICAgdm9pZCB3cml0ZVJlYWR5KCk7CisKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25u
ZWN0aW9uPiBtX3NvY2tldENvbm5lY3Rpb247CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1f
aW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHUG9sbGFibGVPdXRwdXRTdHJlYW0+IG1fb3V0cHV0
U3RyZWFtOworICAgIEdSZWZQdHI8R1NvdXJjZT4gbV93cml0ZVJlYWR5U291cmNlOworICAgIEdS
ZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxj
aGFyW10+IG1fcmVhZEJ1ZmZlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZS5oIgogCiAjaWYgVVNFKFNPVVApCiAKQEAgLTQ1LDE1ICs0NSwxNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTb2NrZXRTdHJlYW1FcnJvcjsKIGNsYXNzIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudDsKIAotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlIGZpbmFsIDogcHVi
bGljIFJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFuZGxlPiwgcHVibGljIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UgeworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCBmaW5hbCA6IHB1YmxpYyBT
b2NrZXRTdHJlYW1IYW5kbGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U29ja2V0U3RyZWFt
SGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiwgU2Vz
c2lvbklEKTsKICAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKEdTb2Nr
ZXRDb25uZWN0aW9uKiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKLSAgICB2aXJ0dWFs
IH5Tb2NrZXRTdHJlYW1IYW5kbGUoKTsKKyAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsKCk7CiAKIHByaXZhdGU6Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworICAgIFNvY2tldFN0cmVhbUhhbmRsZUltcGwoY29u
c3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKICAgICBpbnQgcGxhdGZvcm1T
ZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGxh
dGZvcm1DbG9zZSgpIG92ZXJyaWRlOwpAQCAtNjEsOSArNjEsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKICAgICB2b2lkIHN0b3BXYWl0
aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENh
bGxiYWNrKEdTb2NrZXRDbGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUq
KTsKLSAgICBzdGF0aWMgdm9pZCByZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5
bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gd3Jp
dGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRs
ZSopOworICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqLCBH
QXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKik7CisgICAgc3RhdGljIHZvaWQg
cmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCopOworICAgIHN0YXRpYyBnYm9vbGVhbiB3cml0ZVJlYWR5Q2FsbGJhY2so
R1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCopOwogCiAgICAg
dm9pZCBjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJik7CiAgICAgdm9pZCBy
ZWFkQnl0ZXMoZ3NzaXplKTsKQEAgLTc4LDYgKzc4LDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Y2hhcltdPiBtX3JlYWRCdWZmZXI7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkocmV2aXNpb24gMjA0NDY2KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHA6
MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0U3Ry
ZWFtSGFuZGxlLmgiCisKKyNpZiBVU0UoU09VUCkKKworI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgorI2luY2x1ZGUg
IlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUg
UkVBRF9CVUZGRVJfU0laRSAxMDI0CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFNvY2tl
dFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCit7CisgICAgUmVm
PFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1I
YW5kbGUodXJsLCBjbGllbnQpKTsKKworICAgIHVuc2lnbmVkIHBvcnQgPSB1cmwuaGFzUG9ydCgp
ID8gdXJsLnBvcnQoKSA6ICh1cmwucHJvdG9jb2xJcygid3NzIikgPyA0NDMgOiA4MCk7CisgICAg
R1JlZlB0cjxHU29ja2V0Q2xpZW50PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRf
Y2xpZW50X25ldygpKTsKKyAgICBpZiAodXJsLnByb3RvY29sSXMoIndzcyIpKQorICAgICAgICBn
X3NvY2tldF9jbGllbnRfc2V0X3Rscyhzb2NrZXRDbGllbnQuZ2V0KCksIFRSVUUpOworICAgIFJl
ZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFNvY2tldFN0cmVhbUhhbmRsZSA9IHNvY2tl
dC5jb3B5UmVmKCk7CisgICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3luYyhz
b2NrZXRDbGllbnQuZ2V0KCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgcG9ydCwgc29ja2V0
LT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1Jl
YWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVhbUhh
bmRsZS5sZWFrUmVmKCkpOworICAgIHJldHVybiBzb2NrZXQ7Cit9CisKK1JlZjxTb2NrZXRTdHJl
YW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKEdTb2NrZXRDb25uZWN0aW9uKiBz
b2NrZXRDb25uZWN0aW9uLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKK3sKKyAg
ICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3IFNvY2tldFN0
cmVhbUhhbmRsZShVUkwoKSwgY2xpZW50KSk7CisKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0
aW9uPiBjb25uZWN0aW9uID0gc29ja2V0Q29ubmVjdGlvbjsKKyAgICBzb2NrZXQtPmNvbm5lY3Rl
ZChXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKKyAgICByZXR1cm4gc29ja2V0OworfQorCitTb2NrZXRT
dHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVy
bCwgY2xpZW50KQorICAgICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9u
ZXcoKSkpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNs
aWVudCAlcCIsIHRoaXMsICZtX2NsaWVudCk7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZTo6flNv
Y2tldFN0cmVhbUhhbmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5k
bGUgJXAgZGVsZXRlIiwgdGhpcyk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjb25u
ZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJiBzb2NrZXRDb25uZWN0aW9uKQorewor
ICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFdURk1vdmUoc29ja2V0Q29ubmVjdGlvbik7CisgICAg
bV9vdXRwdXRTdHJlYW0gPSBHX1BPTExBQkxFX09VVFBVVF9TVFJFQU0oZ19pb19zdHJlYW1fZ2V0
X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSkpOwor
ICAgIG1faW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RS
RUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpOworICAgIG1fcmVhZEJ1ZmZlciA9IHN0ZDo6
bWFrZV91bmlxdWU8Y2hhcltdPihSRUFEX0JVRkZFUl9TSVpFKTsKKworICAgIFJlZlB0cjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZ19pbnB1dF9zdHJlYW1f
cmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZ2V0KCksIFJFQURf
QlVGRkVSX1NJWkUsIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkUmVhZHlDYWxs
YmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKworICAgIG1fc3RhdGUgPSBPcGVuOwor
ICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRoaXMpOworfQorCit2b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2FsbGJhY2soR1NvY2tldENsaWVudCogY2xpZW50LCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAg
UmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRs
ZSk7CisKKyAgICAvLyBBbHdheXMgZmluaXNoIHRoZSBjb25uZWN0aW9uLCBldmVuIGlmIHRoaXMg
U29ja2V0U3RyZWFtSGFuZGxlIHdhcyBjYW5jZWxsZWQgZWFybGllci4KKyAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gc29ja2V0
Q29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2Zp
bmlzaChjbGllbnQsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisKKyAgICAvLyBUaGUgU29j
a2V0U3RyZWFtSGFuZGxlIGhhcyBiZWVuIGNhbmNlbGxlZCwgc28ganVzdCBjbG9zZSB0aGUgY29u
bmVjdGlvbiwgaWdub3JpbmcgZXJyb3JzLgorICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNl
bGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChzb2NrZXRD
b25uZWN0aW9uKQorICAgICAgICAgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oc29j
a2V0Q29ubmVjdGlvbi5nZXQoKSksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGVycm9yKQorICAgICAgICBoYW5kbGUtPmRpZEZhaWwoU29ja2V0
U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7CisgICAgZWxzZQorICAg
ICAgICBoYW5kbGUtPmNvbm5lY3RlZChXVEZNb3ZlKHNvY2tldENvbm5lY3Rpb24pKTsKK30KKwor
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRCeXRlcyhnc3NpemUgYnl0ZXNSZWFkKQorewor
ICAgIGlmICghYnl0ZXNSZWFkKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUaGUgY2xpZW50IGNhbiBjbG9zZSB0aGUgaGFuZGxlLCBwb3RlbnRp
YWxseSByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UuCisgICAgUmVmUHRyPFNvY2tldFN0cmVh
bUhhbmRsZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBtX2NsaWVudC5kaWRSZWNlaXZlU29j
a2V0U3RyZWFtRGF0YSgqdGhpcywgbV9yZWFkQnVmZmVyLmdldCgpLCBieXRlc1JlYWQpOworICAg
IGlmIChtX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMo
bV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JVRkZFUl9TSVpF
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwg
cHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOworICAgIH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1
bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAgUmVmUHRyPFNv
Y2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRsZSk7CisKKyAg
ICAvLyBBbHdheXMgZmluaXNoIHRoZSByZWFkLCBldmVuIGlmIHRoaXMgU29ja2V0U3RyZWFtSGFu
ZGxlIHdhcyBjYW5jZWxsZWQgZWFybGllci4KKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKHN0
cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgaWYgKGdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5jZWxsYWJsZS5nZXQoKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChlcnJvcikKKyAgICAgICAgaGFuZGxlLT5kaWRGYWlsKFNvY2tldFN0cmVh
bUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOworICAgIGVsc2UKKyAgICAgICAg
aGFuZGxlLT5yZWFkQnl0ZXMoYnl0ZXNSZWFkKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3ImJiBlcnJvcikKK3sKKyAgICBtX2NsaWVudC5k
aWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5KCkKK3sKKyAgICAvLyBXZSBubyBsb25nZXIgaGF2
ZSBidWZmZXJlZCBkYXRhLCBzbyBzdG9wIHdhaXRpbmcgZm9yIHRoZSBzb2NrZXQgdG8gYmUgd3Jp
dGFibGUuCisgICAgaWYgKCFidWZmZXJlZEFtb3VudCgpKSB7CisgICAgICAgIHN0b3BXYWl0aW5n
Rm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNl
bmRQZW5kaW5nRGF0YSgpOworfQorCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNl
bmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNv
Y2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybVNlbmQiLCB0aGlzKTsKKyAgICBpZiAoIW1fb3V0
cHV0U3RyZWFtIHx8ICFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICBnc3NpemUgd3JpdHRlbiA9IGdfcG9sbGFibGVfb3V0cHV0
X3N0cmVhbV93cml0ZV9ub25ibG9ja2luZyhtX291dHB1dFN0cmVhbS5nZXQoKSwgZGF0YSwgbGVu
Z3RoLCBtX2NhbmNlbGxhYmxlLmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9S
LCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKSkKKyAgICAgICAgICAgIGJlZ2luV2FpdGluZ0ZvclNv
Y2tldFdyaXRhYmlsaXR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpZEZhaWwoU29j
a2V0U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIC8vIElmIHdlIGRpZCBub3Qgc2VuZCBhbGwgdGhlIGJ5dGVz
IHdlIHdlcmUgZ2l2ZW4sIHdlIGtub3cgdGhhdAorICAgIC8vIFNvY2tldFN0cmVhbUhhbmRsZUJh
c2Ugd2lsbCBuZWVkIHRvIHNlbmQgbW9yZSBpbiB0aGUgZnV0dXJlLgorICAgIGlmICh3cml0dGVu
IDwgbGVuZ3RoKQorICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOwor
CisgICAgcmV0dXJuIHdyaXR0ZW47Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0
Zm9ybUNsb3NlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBw
bGF0Zm9ybUNsb3NlIiwgdGhpcyk7CisgICAgLy8gV2UgY2FuY2VsIHRoaXMgaGFuZGxlIGZpcnN0
IHRvIGRpc2FibGUgYWxsIGNhbGxiYWNrcy4KKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2Nh
bmNlbGxhYmxlLmdldCgpKTsKKyAgICBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7
CisKKyAgICBpZiAobV9zb2NrZXRDb25uZWN0aW9uKSB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8
R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0obV9z
b2NrZXRDb25uZWN0aW9uLmdldCgpKSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKTsKKyAgICAg
ICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvcihlcnJv
ci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgbV9zb2NrZXRDb25uZWN0aW9uID0g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBtX291dHB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9p
bnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9yZWFkQnVmZmVyID0gbnVsbHB0cjsKKworICAg
IG1fY2xpZW50LmRpZENsb3NlU29ja2V0U3RyZWFtKCp0aGlzKTsKK30KKwordm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OmJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3sKKyAgICBp
ZiAobV93cml0ZVJlYWR5U291cmNlKSAvLyBBbHJlYWR5IHdhaXRpbmcuCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fd3JpdGVSZWFkeVNvdXJjZSA9IGFkb3B0R1JlZihnX3BvbGxhYmxlX291dHB1
dF9zdHJlYW1fY3JlYXRlX3NvdXJjZShtX291dHB1dFN0cmVhbS5nZXQoKSwgbV9jYW5jZWxsYWJs
ZS5nZXQoKSkpOworICAgIHJlZigpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3dyaXRl
UmVhZHlTb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHdyaXRlUmVh
ZHlDYWxsYmFjayksIHRoaXMsCisgICAgICAgIFtdKGdwb2ludGVyIGhhbmRsZSkgeyBzdGF0aWNf
Y2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihoYW5kbGUpLT5kZXJlZigpOyB9KTsKKyAgICBnX3Nv
dXJjZV9hdHRhY2gobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRf
dGhyZWFkX2RlZmF1bHQoKSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdG9wV2Fp
dGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3sKKyAgICBpZiAoIW1fd3JpdGVSZWFkeVNvdXJj
ZSkgLy8gTm90IHdhaXRpbmcuCisgICAgICAgIHJldHVybjsKKworICAgIGdfc291cmNlX2Rlc3Ry
b3kobV93cml0ZVJlYWR5U291cmNlLmdldCgpKTsKKyAgICBtX3dyaXRlUmVhZHlTb3VyY2UgPSBu
dWxscHRyOworfQorCitnYm9vbGVhbiBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlUmVhZHlDYWxs
YmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0qLCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkK
K3sKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoaGFuZGxlLT5tX2NhbmNlbGxh
YmxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKKworICAgIGhhbmRs
ZS0+d3JpdGVSZWFkeSgpOworICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhh
bmRsZUltcGxTb3VwLmNwcAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDE0IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZUltcGwuaCIKIAogI2lmIFVTRShTT1VQKQogCi0jaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCiAjaW5jbHVkZSAi
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8
Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC00OCw5ICs0OCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvY2tldFN0cmVh
bUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCitSZWY8U29ja2V0U3RyZWFt
SGFuZGxlPiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCiB7Ci0gICAgUmVmPFNv
Y2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5k
bGUodXJsLCBjbGllbnQpKTsKKyAgICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlSW1wbD4gc29ja2V0
ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKHVybCwgY2xpZW50KSk7CiAK
ICAgICB1bnNpZ25lZCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/IHVybC5wb3J0KCkgOiAodXJsLnBy
b3RvY29sSXMoIndzcyIpID8gNDQzIDogODApOwogICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4g
c29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7CkBAIC02Miwz
NSArNjIsMzUgQEAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZAogICAg
IHJldHVybiBzb2NrZXQ7CiB9CiAKLVJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFNvY2tldFN0cmVh
bUhhbmRsZTo6Y3JlYXRlKEdTb2NrZXRDb25uZWN0aW9uKiBzb2NrZXRDb25uZWN0aW9uLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKK1JlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiogc29ja2V0Q29u
bmVjdGlvbiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAgUmVmPFNv
Y2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5k
bGUoVVJMKCksIGNsaWVudCkpOworICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGVJbXBsPiBzb2Nr
ZXQgPSBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZUltcGwoVVJMKCksIGNsaWVudCkp
OwogCiAgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IHNvY2tldENv
bm5lY3Rpb247CiAgICAgc29ja2V0LT5jb25uZWN0ZWQoV1RGTW92ZShjb25uZWN0aW9uKSk7CiAg
ICAgcmV0dXJuIHNvY2tldDsKIH0KIAotU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1I
YW5kbGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQot
ICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVudCkKK1NvY2tldFN0cmVhbUhh
bmRsZUltcGw6OlNvY2tldFN0cmVhbUhhbmRsZUltcGwoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQorICAgIDogU29ja2V0U3RyZWFtSGFuZGxlKHVybCwg
Y2xpZW50KQogICAgICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXco
KSkpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVu
dCAlcCIsIHRoaXMsICZtX2NsaWVudCk7CiB9CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tl
dFN0cmVhbUhhbmRsZSgpCitTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbCgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVs
ZXRlIiwgdGhpcyk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjb25uZWN0ZWQoR1Jl
ZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJiBzb2NrZXRDb25uZWN0aW9uKQordm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGVJbXBsOjpjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJiBz
b2NrZXRDb25uZWN0aW9uKQogewogICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFdURk1vdmUoc29j
a2V0Q29ubmVjdGlvbik7CiAgICAgbV9vdXRwdXRTdHJlYW0gPSBHX1BPTExBQkxFX09VVFBVVF9T
VFJFQU0oZ19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9zb2NrZXRD
b25uZWN0aW9uLmdldCgpKSkpOwogICAgIG1faW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRf
aW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpOwogICAg
IG1fcmVhZEJ1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPihSRUFEX0JVRkZFUl9TSVpF
KTsKIAotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXModGhpcyk7
CisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZUltcGw+IHByb3RlY3RlZFRoaXModGhpcyk7
CiAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBtX3Jl
YWRCdWZmZXIuZ2V0KCksIFJFQURfQlVGRkVSX1NJWkUsIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9j
YW5jZWxsYWJsZS5nZXQoKSwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNh
bGxiYWNrPihyZWFkUmVhZHlDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKIApA
QCAtOTgsNyArOTgsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkKEdSZWZQ
CiAgICAgbV9jbGllbnQuZGlkT3BlblNvY2tldFN0cmVhbSgqdGhpcyk7CiB9CiAKLXZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjpjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiBjbGllbnQs
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKK3ZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29ubmVjdGVkQ2FsbGJhY2soR1NvY2tldENsaWVudCog
Y2xpZW50LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCogaGFu
ZGxlKQogewogICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXMgPSBh
ZG9wdFJlZihoYW5kbGUpOwogCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OmNvbm5lY3RlZENhbGxiYQogICAgICAgICBoYW5kbGUtPmNvbm5lY3RlZChXVEZNb3Zl
KHNvY2tldENvbm5lY3Rpb24pKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRC
eXRlcyhnc3NpemUgYnl0ZXNSZWFkKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFk
Qnl0ZXMoZ3NzaXplIGJ5dGVzUmVhZCkKIHsKICAgICBpZiAoIWJ5dGVzUmVhZCkgewogICAgICAg
ICBjbG9zZSgpOwpAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpy
ZWFkQnl0ZXMoZ3NzaXoKICAgICB9CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFk
UmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qIHN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
OjpyZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qIHN0cmVhbSwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIFNvY2tldFN0cmVhbUhhbmRsZUltcGwqIGhhbmRsZSkKIHsKICAgICBSZWZQdHI8U29j
a2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYoaGFuZGxlKTsKIApAQCAt
MTUyLDEyICsxNTIsMTIgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRSZWFkeUNhbGxi
YQogICAgICAgICBoYW5kbGUtPnJlYWRCeXRlcyhieXRlc1JlYWQpOwogfQogCi12b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6ZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvciYmIGVycm9yKQordm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yJiYgZXJyb3Ip
CiB7CiAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgV1RGTW92ZShlcnJv
cikpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSgpCit2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OndyaXRlUmVhZHkoKQogewogICAgIC8vIFdlIG5vIGxvbmdl
ciBoYXZlIGJ1ZmZlcmVkIGRhdGEsIHNvIHN0b3Agd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0byBi
ZSB3cml0YWJsZS4KICAgICBpZiAoIWJ1ZmZlcmVkQW1vdW50KCkpIHsKQEAgLTE2OCw3ICsxNjgs
NyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSgpCiAgICAgc2VuZFBlbmRp
bmdEYXRhKCk7CiB9CiAKLWludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBs
YXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewogICAgIExPRyhOZXR3
b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtU2VuZCIsIHRoaXMpOwogICAgIGlm
ICghbV9vdXRwdXRTdHJlYW0gfHwgIWRhdGEpCkBAIC0xODUsMTQgKzE4NSwxNCBAQCBpbnQgU29j
a2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uCiAgICAgfQogCiAgICAgLy8gSWYgd2Ug
ZGlkIG5vdCBzZW5kIGFsbCB0aGUgYnl0ZXMgd2Ugd2VyZSBnaXZlbiwgd2Uga25vdyB0aGF0Ci0g
ICAgLy8gU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB3aWxsIG5lZWQgdG8gc2VuZCBtb3JlIGluIHRo
ZSBmdXR1cmUuCisgICAgLy8gU29ja2V0U3RyZWFtSGFuZGxlIHdpbGwgbmVlZCB0byBzZW5kIG1v
cmUgaW4gdGhlIGZ1dHVyZS4KICAgICBpZiAod3JpdHRlbiA8IGxlbmd0aCkKICAgICAgICAgYmVn
aW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKIAogICAgIHJldHVybiB3cml0dGVuOwog
fQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCit2b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtQ2xvc2UoKQogewogICAgIExPRyhOZXR3b3JrLCAi
U29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0aGlzKTsKICAgICAvLyBXZSBj
YW5jZWwgdGhpcyBoYW5kbGUgZmlyc3QgdG8gZGlzYWJsZSBhbGwgY2FsbGJhY2tzLgpAQCAtMjE0
LDE5ICsyMTQsMjAgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQog
ICAgIG1fY2xpZW50LmRpZENsb3NlU29ja2V0U3RyZWFtKCp0aGlzKTsKIH0KIAotdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OmJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3ZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6YmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHko
KQogewogICAgIGlmIChtX3dyaXRlUmVhZHlTb3VyY2UpIC8vIEFscmVhZHkgd2FpdGluZy4KICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV93cml0ZVJlYWR5U291cmNlID0gYWRvcHRHUmVmKGdfcG9s
bGFibGVfb3V0cHV0X3N0cmVhbV9jcmVhdGVfc291cmNlKG1fb3V0cHV0U3RyZWFtLmdldCgpLCBt
X2NhbmNlbGxhYmxlLmdldCgpKSk7CiAgICAgcmVmKCk7Ci0gICAgZ19zb3VyY2Vfc2V0X2NhbGxi
YWNrKG1fd3JpdGVSZWFkeVNvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVu
Yz4od3JpdGVSZWFkeUNhbGxiYWNrKSwgdGhpcywKLSAgICAgICAgW10oZ3BvaW50ZXIgaGFuZGxl
KSB7IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGhhbmRsZSktPmRlcmVmKCk7IH0p
OworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHdyaXRlUmVhZHlDYWxsYmFjayksIHRoaXMsIFtd
KGdwb2ludGVyIGhhbmRsZSkgeyAKKyAgICAgICAgc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbCo+KGhhbmRsZSktPmRlcmVmKCk7CisgICAgfSk7CiAgICAgZ19zb3VyY2VfYXR0YWNo
KG1fd3JpdGVSZWFkeVNvdXJjZS5nZXQoKSwgZ19tYWluX2NvbnRleHRfZ2V0X3RocmVhZF9kZWZh
dWx0KCkpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFdhaXRpbmdGb3JTb2Nr
ZXRXcml0YWJpbGl0eSgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BXYWl0aW5n
Rm9yU29ja2V0V3JpdGFiaWxpdHkoKQogewogICAgIGlmICghbV93cml0ZVJlYWR5U291cmNlKSAv
LyBOb3Qgd2FpdGluZy4KICAgICAgICAgcmV0dXJuOwpAQCAtMjM1LDcgKzIzNiw3IEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpzdG9wV2FpdGluZ0ZvclMKICAgICBtX3dyaXRlUmVhZHlTb3Vy
Y2UgPSBudWxscHRyOwogfQogCi1nYm9vbGVhbiBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlUmVh
ZHlDYWxsYmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0qLCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhh
bmRsZSkKK2dib29sZWFuIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndyaXRlUmVhZHlDYWxsYmFj
ayhHUG9sbGFibGVPdXRwdXRTdHJlYW0qLCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKiBoYW5kbGUp
CiB7CiAgICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5jZWxs
YWJsZS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Nv
Y2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSwyNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0KLSNpZiBVU0UoU09V
UCkKLQotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJT
b2NrZXRTdHJlYW1FcnJvci5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5o
IgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLSNkZWZpbmUgUkVBRF9CVUZGRVJfU0laRSAxMDI0Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFt
SGFuZGxlOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYg
Y2xpZW50LCBTZXNzaW9uSUQpCi17Ci0gICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0
ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsKLQotICAg
IHVuc2lnbmVkIHBvcnQgPSB1cmwuaGFzUG9ydCgpID8gdXJsLnBvcnQoKSA6ICh1cmwucHJvdG9j
b2xJcygid3NzIikgPyA0NDMgOiA4MCk7Ci0gICAgR1JlZlB0cjxHU29ja2V0Q2xpZW50PiBzb2Nr
ZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X25ldygpKTsKLSAgICBpZiAodXJs
LnByb3RvY29sSXMoIndzcyIpKQotICAgICAgICBnX3NvY2tldF9jbGllbnRfc2V0X3Rscyhzb2Nr
ZXRDbGllbnQuZ2V0KCksIFRSVUUpOwotICAgIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3Rl
Y3RlZFNvY2tldFN0cmVhbUhhbmRsZSA9IHNvY2tldC5jb3B5UmVmKCk7Ci0gICAgZ19zb2NrZXRf
Y2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3luYyhzb2NrZXRDbGllbnQuZ2V0KCksIHVybC5ob3N0
KCkudXRmOCgpLmRhdGEoKSwgcG9ydCwgc29ja2V0LT5tX2NhbmNlbGxhYmxlLmdldCgpLAotICAg
ICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxi
YWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVhbUhhbmRsZS5sZWFrUmVmKCkpOwotICAgIHJldHVy
biBzb2NrZXQ7Ci19Ci0KLVJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlKEdTb2NrZXRDb25uZWN0aW9uKiBzb2NrZXRDb25uZWN0aW9uLCBTb2NrZXRTdHJl
YW1IYW5kbGVDbGllbnQmIGNsaWVudCkKLXsKLSAgICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBz
b2NrZXQgPSBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZShVUkwoKSwgY2xpZW50KSk7
Ci0KLSAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gc29ja2V0Q29u
bmVjdGlvbjsKLSAgICBzb2NrZXQtPmNvbm5lY3RlZChXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKLSAg
ICByZXR1cm4gc29ja2V0OwotfQotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhh
bmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCi0g
ICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQotICAgICwgbV9jYW5jZWxs
YWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSkpCi17Ci0gICAgTE9HKE5ldHdvcmss
ICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2NsaWVudCk7
Ci19Ci0KLVNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSgpCi17Ci0gICAg
TE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhpcyk7Ci19Ci0K
LXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVj
dGlvbj4mJiBzb2NrZXRDb25uZWN0aW9uKQotewotICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFdU
Rk1vdmUoc29ja2V0Q29ubmVjdGlvbik7Ci0gICAgbV9vdXRwdXRTdHJlYW0gPSBHX1BPTExBQkxF
X09VVFBVVF9TVFJFQU0oZ19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0o
bV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSkpOwotICAgIG1faW5wdXRTdHJlYW0gPSBnX2lvX3N0
cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQo
KSkpOwotICAgIG1fcmVhZEJ1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8Y2hhcltdPihSRUFEX0JV
RkZFUl9TSVpFKTsKLQotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRo
aXModGhpcyk7Ci0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdl
dCgpLCBtX3JlYWRCdWZmZXIuZ2V0KCksIFJFQURfQlVGRkVSX1NJWkUsIEdfUFJJT1JJVFlfREVG
QVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5
bmNSZWFkeUNhbGxiYWNrPihyZWFkUmVhZHlDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1Jl
ZigpKTsKLQotICAgIG1fc3RhdGUgPSBPcGVuOwotICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRT
dHJlYW0oKnRoaXMpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2Fs
bGJhY2soR1NvY2tldENsaWVudCogY2xpZW50LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0
U3RyZWFtSGFuZGxlKiBoYW5kbGUpCi17Ci0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4g
cHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRsZSk7Ci0KLSAgICAvLyBBbHdheXMgZmluaXNo
IHRoZSBjb25uZWN0aW9uLCBldmVuIGlmIHRoaXMgU29ja2V0U3RyZWFtSGFuZGxlIHdhcyBjYW5j
ZWxsZWQgZWFybGllci4KLSAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgR1Jl
ZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gc29ja2V0Q29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX3Nv
Y2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2ZpbmlzaChjbGllbnQsIHJlc3VsdCwgJmVycm9y
Lm91dFB0cigpKSk7Ci0KLSAgICAvLyBUaGUgU29ja2V0U3RyZWFtSGFuZGxlIGhhcyBiZWVuIGNh
bmNlbGxlZCwgc28ganVzdCBjbG9zZSB0aGUgY29ubmVjdGlvbiwgaWdub3JpbmcgZXJyb3JzLgot
ICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUu
Z2V0KCkpKSB7Ci0gICAgICAgIGlmIChzb2NrZXRDb25uZWN0aW9uKQotICAgICAgICAgICAgZ19p
b19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oc29ja2V0Q29ubmVjdGlvbi5nZXQoKSksIG51bGxw
dHIsIG51bGxwdHIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGVycm9yKQot
ICAgICAgICBoYW5kbGUtPmRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVy
cm9yLT5tZXNzYWdlKSk7Ci0gICAgZWxzZQotICAgICAgICBoYW5kbGUtPmNvbm5lY3RlZChXVEZN
b3ZlKHNvY2tldENvbm5lY3Rpb24pKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJl
YWRCeXRlcyhnc3NpemUgYnl0ZXNSZWFkKQotewotICAgIGlmICghYnl0ZXNSZWFkKSB7Ci0gICAg
ICAgIGNsb3NlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUaGUgY2xpZW50
IGNhbiBjbG9zZSB0aGUgaGFuZGxlLCBwb3RlbnRpYWxseSByZW1vdmluZyB0aGUgbGFzdCByZWZl
cmVuY2UuCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyh0aGlz
KTsKLSAgICBtX2NsaWVudC5kaWRSZWNlaXZlU29ja2V0U3RyZWFtRGF0YSgqdGhpcywgbV9yZWFk
QnVmZmVyLmdldCgpLCBieXRlc1JlYWQpOwotICAgIGlmIChtX2lucHV0U3RyZWFtKSB7Ci0gICAg
ICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFk
QnVmZmVyLmdldCgpLCBSRUFEX0JVRkZFUl9TSVpFLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2Fu
Y2VsbGFibGUuZ2V0KCksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5
Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwot
ICAgIH0KLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRSZWFkeUNhbGxiYWNrKEdJ
bnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFu
ZGxlKiBoYW5kbGUpCi17Ci0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVk
VGhpcyA9IGFkb3B0UmVmKGhhbmRsZSk7Ci0KLSAgICAvLyBBbHdheXMgZmluaXNoIHRoZSByZWFk
LCBldmVuIGlmIHRoaXMgU29ja2V0U3RyZWFtSGFuZGxlIHdhcyBjYW5jZWxsZWQgZWFybGllci4K
LSAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgZ3NzaXplIGJ5dGVzUmVhZCA9
IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKHN0cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRy
KCkpOwotCi0gICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5j
ZWxsYWJsZS5nZXQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChlcnJvcikKLSAgICAg
ICAgaGFuZGxlLT5kaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+
bWVzc2FnZSkpOwotICAgIGVsc2UKLSAgICAgICAgaGFuZGxlLT5yZWFkQnl0ZXMoYnl0ZXNSZWFk
KTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZEZhaWwoU29ja2V0U3RyZWFtRXJy
b3ImJiBlcnJvcikKLXsKLSAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBX
VEZNb3ZlKGVycm9yKSk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5
KCkKLXsKLSAgICAvLyBXZSBubyBsb25nZXIgaGF2ZSBidWZmZXJlZCBkYXRhLCBzbyBzdG9wIHdh
aXRpbmcgZm9yIHRoZSBzb2NrZXQgdG8gYmUgd3JpdGFibGUuCi0gICAgaWYgKCFidWZmZXJlZEFt
b3VudCgpKSB7Ci0gICAgICAgIHN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNlbmRQZW5kaW5nRGF0YSgpOwotfQotCi1pbnQg
U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9y
bVNlbmQiLCB0aGlzKTsKLSAgICBpZiAoIW1fb3V0cHV0U3RyZWFtIHx8ICFkYXRhKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBnc3Np
emUgd3JpdHRlbiA9IGdfcG9sbGFibGVfb3V0cHV0X3N0cmVhbV93cml0ZV9ub25ibG9ja2luZyht
X291dHB1dFN0cmVhbS5nZXQoKSwgZGF0YSwgbGVuZ3RoLCBtX2NhbmNlbGxhYmxlLmdldCgpLCAm
ZXJyb3Iub3V0UHRyKCkpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBpZiAoZ19lcnJvcl9t
YXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKSkK
LSAgICAgICAgICAgIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUs
IGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIElm
IHdlIGRpZCBub3Qgc2VuZCBhbGwgdGhlIGJ5dGVzIHdlIHdlcmUgZ2l2ZW4sIHdlIGtub3cgdGhh
dAotICAgIC8vIFNvY2tldFN0cmVhbUhhbmRsZUJhc2Ugd2lsbCBuZWVkIHRvIHNlbmQgbW9yZSBp
biB0aGUgZnV0dXJlLgotICAgIGlmICh3cml0dGVuIDwgbGVuZ3RoKQotICAgICAgICBiZWdpbldh
aXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOwotCi0gICAgcmV0dXJuIHdyaXR0ZW47Ci19Ci0K
LXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybUNsb3NlKCkKLXsKLSAgICBMT0coTmV0
d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybUNsb3NlIiwgdGhpcyk7Ci0gICAg
Ly8gV2UgY2FuY2VsIHRoaXMgaGFuZGxlIGZpcnN0IHRvIGRpc2FibGUgYWxsIGNhbGxiYWNrcy4K
LSAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNlbGxhYmxlLmdldCgpKTsKLSAgICBzdG9w
V2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0KLSAgICBpZiAobV9zb2NrZXRDb25uZWN0
aW9uKSB7Ci0gICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgZ19p
b19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSwgbnVs
bHB0ciwgJmVycm9yLm91dFB0cigpKTsKLSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAg
ZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvcihlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsK
LSAgICAgICAgbV9zb2NrZXRDb25uZWN0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBtX291
dHB1dFN0cmVhbSA9IG51bGxwdHI7Ci0gICAgbV9pbnB1dFN0cmVhbSA9IG51bGxwdHI7Ci0gICAg
bV9yZWFkQnVmZmVyID0gbnVsbHB0cjsKLQotICAgIG1fY2xpZW50LmRpZENsb3NlU29ja2V0U3Ry
ZWFtKCp0aGlzKTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmJlZ2luV2FpdGluZ0Zv
clNvY2tldFdyaXRhYmlsaXR5KCkKLXsKLSAgICBpZiAobV93cml0ZVJlYWR5U291cmNlKSAvLyBB
bHJlYWR5IHdhaXRpbmcuCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fd3JpdGVSZWFkeVNvdXJj
ZSA9IGFkb3B0R1JlZihnX3BvbGxhYmxlX291dHB1dF9zdHJlYW1fY3JlYXRlX3NvdXJjZShtX291
dHB1dFN0cmVhbS5nZXQoKSwgbV9jYW5jZWxsYWJsZS5nZXQoKSkpOwotICAgIHJlZigpOwotICAg
IGdfc291cmNlX3NldF9jYWxsYmFjayhtX3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHdyaXRlUmVhZHlDYWxsYmFjayksIHRoaXMsCi0gICAgICAg
IFtdKGdwb2ludGVyIGhhbmRsZSkgeyBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPiho
YW5kbGUpLT5kZXJlZigpOyB9KTsKLSAgICBnX3NvdXJjZV9hdHRhY2gobV93cml0ZVJlYWR5U291
cmNlLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRfdGhyZWFkX2RlZmF1bHQoKSk7Ci19Ci0KLXZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkK
LXsKLSAgICBpZiAoIW1fd3JpdGVSZWFkeVNvdXJjZSkgLy8gTm90IHdhaXRpbmcuCi0gICAgICAg
IHJldHVybjsKLQotICAgIGdfc291cmNlX2Rlc3Ryb3kobV93cml0ZVJlYWR5U291cmNlLmdldCgp
KTsKLSAgICBtX3dyaXRlUmVhZHlTb3VyY2UgPSBudWxscHRyOwotfQotCi1nYm9vbGVhbiBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OndyaXRlUmVhZHlDYWxsYmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0q
LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKLXsKLSAgICBpZiAoZ19jYW5jZWxsYWJsZV9p
c19jYW5jZWxsZWQoaGFuZGxlLT5tX2NhbmNlbGxhYmxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJu
IEdfU09VUkNFX1JFTU9WRTsKLQotICAgIGhhbmRsZS0+d3JpdGVSZWFkeSgpOwotICAgIHJldHVy
biBHX1NPVVJDRV9DT05USU5VRTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpl
b2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDQ3NCkKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA4LTE1ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVu
YW1lIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgdG8gU29ja2V0U3RyZWFtSGFuZGxlIGFuZCBTb2Nr
ZXRTdHJlYW1IYW5kbGUgdG8gU29ja2V0U3RyZWFtSGFuZGxlSW1wbAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwODU4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2Vi
U29ja2V0UHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRQcm92aWRlcjo6
Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKToKKwogMjAxNi0wOC0xNSAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBpT1MgYnVpbGQuCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0UHJvdmlkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRQ
cm92aWRlci5jcHAJKHJldmlzaW9uIDIwNDQ2NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvTmV0d29yay9XZWJTb2NrZXRQcm92aWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE2
ICszMyw3IEBACiAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAKLSNpbmNsdWRlIDxXZWJDb3Jl
L0RvY3VtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRFeGVjdXRpb25Db250ZXh0Lmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9Tb2NrZXRTdHJlYW1IYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvV2ViU29ja2V0Q2hhbm5lbC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV29ya2VyR2xvYmFsU2NvcGUuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL1dvcmtlclJ1bkxvb3AuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dv
cmtlclRocmVhZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaD4K
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTUxLDcgKzQyLDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBXZWJTb2NrZXRQcm92aWRlcjo6Y3Jl
YXRlU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQmIGNsaWVudCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcmV0dXJuIGEgcHJveHkgc28gd2UgY2FuIGRvIHRoZSBhY3R1YWwgbmV0d29yayBp
bnRlcmFjdGlvbnMgaW4gdGhlIE5ldHdvcmtQcm9jZXNzLgotICAgIHJldHVybiBTb2NrZXRTdHJl
YW1IYW5kbGU6OmNyZWF0ZSh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKTsKKyAgICByZXR1cm4gU29j
a2V0U3RyZWFtSGFuZGxlSW1wbDo6Y3JlYXRlKHVybCwgY2xpZW50LCBzZXNzaW9uSUQpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286085</attachid>
            <date>2016-08-15 13:27:25 -0700</date>
            <delta_ts>2016-08-15 13:36:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160858-20160815132540.patch</filename>
            <type>text/plain</type>
            <size>193108</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NCBAQAorMjAxNi0wOC0xNSAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlIHRvIFNvY2tldFN0cmVhbUhhbmRsZSBhbmQgU29ja2V0U3Ry
ZWFtSGFuZGxlIHRvIFNvY2tldFN0cmVhbUhhbmRsZUltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDg1OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvciwgZXhjZXB0IEdUSydzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgaXMgbm93IHNhZmVs
eSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgVGhpcyBpcyBwcmVwYXJhdGlvbiBmb3Ig
bWFraW5nIGEgbmV3IGtpbmQgb2YgU29ja2V0U3RyZWFtSGFuZGxlIHdoaWNoIGlzIGEgcHJveHkg
dGhhdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MgaW4gV2ViS2l0Mi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsu
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1X
aW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9Tb2NrZXRQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVh
bUhhbmRsZTo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OnNlbmRQZW5kaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6ZGlzY29ubmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kUGVuZGluZ0Rh
dGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFu
ZGxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0
U3RyZWFtSGFuZGxlQmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
Ojp+U29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6
On5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzY2hlZHVsZVN0cmVh
bXMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmV0YWluU29j
a2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmV4ZWN1dGVQQUNGaWxl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbW92ZVBB
Q1J1bkxvb3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHlGcm9tQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJDb3JlOjphdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjphZGRDT05ORUNUQ3Jl
ZGVudGlhbHMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29w
eUNGU3RyZWFtRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVwb3J0RXJyb3JUb0NsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxhdGZvcm1DbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVT
dHJlYW1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6
cmV0YWluU29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZTo6cmVsZWFzZVNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlQQUNFeGVjdXRpb25EZXNj
cmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZW1vdmVQQUNSdW5Mb29wU291cmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y2hvb3NlUHJveHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94
eUZyb21BcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OmNyZWF0ZVN0cmVhbXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3Ry
ZWFtSGFuZGxlOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmFkZENPTk5FQ1RDcmVkZW50aWFs
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlD
RlN0cmVhbURlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZFN0cmVhbUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVTdHJlYW1DYWxsYmFjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6cGxhdGZvcm1TZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBvcnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0
cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlYWREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnNlbmREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndhaXRGb3JBdmFpbGFi
bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlk
T3BlblNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
cmVhdGVDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRo
cmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0
b3BUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
OjpkaWRSZWNlaXZlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29j
a2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVDb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRs
ZS5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsU291cC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNvbm5lY3RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjb25uZWN0ZWRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFkQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFJlYWR5Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkRmFpbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3cml0ZVJlYWR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmJlZ2luV2FpdGluZ0Zv
clNvY2tldFdyaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZUltcGw6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6d3JpdGVSZWFkeUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhh
bmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNv
bm5lY3RlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OmNvbm5lY3RlZENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6cmVhZFJlYWR5Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpkaWRGYWlsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdG
b3JTb2NrZXRXcml0YWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRT
dHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1I
YW5kbGVTb3VwLmNwcDogUmVtb3ZlZC4KKwogMjAxNi0wOC0xNSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBXaW5DYWlybyBidWlsZCBh
ZnRlciByMjA0NDY2LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDQ2NikK
KysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMzY3
LDcgKzIzNjcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVx
dWVzdEJhc2UuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5j
cHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAKIAogICAgIHBsYXRmb3JtL3NxbC9TUUxW
YWx1ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAot
ICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c0xvYWRlckNsaWVudENGTmV0LmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU3luY2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY0OCw3ICs2NDgsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hy
b25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAKIApJbmRleDog
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U1NMSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5k
bGVDdXJsLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsQ3VybC5jcHAKIAogICAgIHBsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE5LDggKzIwMTksOCBAQAogCQk1
MTBBNThGQTFCQUNDN0YyMDBDMTkyODIgLyogSURCUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE1OEY2MUJBQ0M0QTUwMEMxOTI4
MiAvKiBJREJSZXF1ZXN0RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1F
cnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEwRDRBMkQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAg
Ki87IH07CiAJCTUxMEQ0QTM0MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0
QTJFMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLzsgfTsKLQkJ
NTEwRDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzAxMDMx
NjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwICovOyB9OwotCQk1MTBE
NEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzExMDMxNjVFRTAw
NDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTBENEEzNjEwMzE2NUVFMDA0OUVBNTQgLyog
U29ja2V0U3RyZWFtSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovOyB9OworCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFt
SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTBENEEzMTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwRDRBMzgxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxMUVDMTI3MUM1MEFBQ0EwMDMyRjk4MyAvKiBJREJTZXJp
YWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMUVDMTI1MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmNwcCAqLzsg
fTsKIAkJNTExRUMxMjgxQzUwQUFDQTAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVDMTI2MUM1MEFB
NTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi87IH07CkBAIC0yMjQxLDggKzIyNDEs
OCBAQAogCQk1MUE5RDlFQTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUU4MTk1Qjkz
MUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovOyB9OwogCQk1MUFBM0Y2RjBCRDVBQTlF
MDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3Vy
Y2VMb2FkZXJNYWMubW0gKi87IH07CiAJCTUxQUJBRTFCMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggKi87
IH07Ci0JCTUxQUJBRTFFMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAz
QzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUFCQUUxRjEwM0MxOTEzMDA4QzUyNjAg
LyogU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0
cmVhbUhhbmRsZUNGTmV0LmNwcCAqLzsgfTsKKwkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxD
Rk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUFCQUUxRDEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNw
cCAqLzsgfTsKIAkJNTFBQkY2NEQxNjM5MkUyODAwMTMyQTdBIC8qIExvYWRlclN0cmF0ZWd5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJGNjRD
MTYzOTJFMjgwMDEzMkE3QSAvKiBMb2FkZXJTdHJhdGVneS5jcHAgKi87IH07CiAJCTUxQUY1MDM2
MTZGMTAwRjYwMDk1QjJFOCAvKiBSZXNvdXJjZUxvYWRlclR5cGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFGNTAzNTE2RjEwMEY2MDA5NUIyRTgg
LyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxQjI0MTdCMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJB
cmNoaXZlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFCMjQxN0EwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gKi87
IH07CkBAIC05MzUyLDggKzkzNTIsOCBAQAogCQk1MTBBNThGRTFCQjA3QUE1MDBDMTkyODIgLyog
SURCQ29ubmVjdGlvblRvQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkNvbm5lY3Rpb25Ub0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJFMTAzMTY1RUUwMDQ5RUE1
NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTBENEEzMTEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFt
SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEwRDRBMzExMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUMxMjUxQzUwQUE1NzAw
MzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCU2VyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMUVDMTI2MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlNlcmlhbGl6YXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NjcsOCArOTU2Nyw4IEBACiAJCTUxQTlEOUU4MTk1
QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHYW1lcGFkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlck1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNv
Y2tldFN0cmVhbUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQUJBRTFD
MTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRT
dHJlYW1IYW5kbGVDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQUJB
RTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUFCRjY0QzE2MzkyRTI4MDAxMzJBN0EgLyogTG9hZGVyU3RyYXRlZ3ku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9hZGVyU3RyYXRlZ3ku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIy
RTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXNvdXJjZUxvYWRlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxQjI0MTdBMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTGVnYWN5V2ViQXJjaGl2ZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTczLDggKzE3OTczLDggQEAKIAkJ
CQk1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLywK
IAkJCQk1MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCAqLywKIAkJCQk1MTBENEEyRTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JC
YXNlLmggKi8sCi0JCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UuY3BwICovLAotCQkJCTUxMEQ0QTMxMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmggKi8sCisJCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNv
Y2tldFN0cmVhbUhhbmRsZS5jcHAgKi8sCisJCQkJNTEwRDRBMzExMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZS5oICovLAogCQkJCTUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLywKIAkJCQlFMTgwODExMDE2RkNGNDJFMDBC
ODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovLAogCQkJCUUxODA4MTE1MTZG
Q0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oICovLApAQCAtMjE4NzIs
OCArMjE4NzIsOCBAQAogCQkJCTdFRTY4NDVEMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJl
c3BvbnNlLmggKi8sCiAJCQkJN0VFNjg0NUUxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVz
cG9uc2VDRk5ldC5jcHAgKi8sCiAJCQkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUVycm9yLmggKi8sCi0JCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZS5oICovLAotCQkJCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgKi8sCisJCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYw
IC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCAqLywKKwkJCQk1MUFCQUUxRDEwM0MxOTEzMDA4
QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcCAqLywKIAkJCQk0NDJBQkNE
NTE3RDkyNjJGMDBEMzA3MTUgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAgKi8s
CiAJCQkJMjZGQUU0Q0ExODUyRTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8sCiAJCQkJMjZGQUU0Q0IxODUyRTNBNTAw
NEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZS5oICovLApAQCAtMjc1NzYsOCArMjc1NzYsOCBAQAogCQkJCTVDN0M4OEQ4MUQwRjFGNEEwMDlE
MkY2RCAvKiBTb2NrZXRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUIxMDND
MThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTBENEEzNDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFBQkFFMUUxMDNDMTkx
MzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxMEQ0QTM3MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMEQ0QTM4MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAv
KiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQzcwQUUwMzcwMzAwQTgy
NjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjIxLDggKzMxMjIxLDggQEAKIAkJ
CQlFNEFGRDAwRDBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUM2ODhBQTMxRDM4MTRCRjAwMEI1NEZBIC8qIFNvY2tldFByb3ZpZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwRDRBMzYxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1
MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDUzOTA0NzBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gaW4gU291cmNlcyAqLywK
IAkJCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk4NEE4MUYzRDBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAkocmV2
aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Tb2NrZXRQcm92aWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKFdFQl9TT0NL
RVRTKQogCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0
U3RyZWFtSGFuZGxlSW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBSZWY8U29j
a2V0U3RyZWFtSGFuZGxlPiBTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICByZXR1cm4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUo
dXJsLCBjbGllbnQsIHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OmNyZWF0ZSh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKTsKIH0KICAgICAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhh
bmRsZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDoyMDQ0NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIw
MTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKKworI2luY2x1ZGUgIlNvY2tldFN0cmVh
bUhhbmRsZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHVuc2lnbmVkIGludCBidWZmZXJTaXplID0gMTAwICog
MTAyNCAqIDEwMjQ7CisKK1NvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQor
ICAgIDogbV91cmwodXJsKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdGF0ZShD
b25uZWN0aW5nKQoreworfQorCitTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1T
dGF0ZSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3RhdGU7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZChjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmIChtX3N0YXRlID09IENvbm5lY3Rpbmcg
fHwgbV9zdGF0ZSA9PSBDbG9zaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFt
X2J1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0
aCA+IGJ1ZmZlclNpemUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8g
aW5kaWNhdGUgdGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIGxlbmd0
aCk7CisgICAgICAgIG1fY2xpZW50LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSY+KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKKyAgICBpZiAo
bV9zdGF0ZSA9PSBPcGVuKQorICAgICAgICBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQoZGF0
YSwgbGVuZ3RoKTsKKyAgICBpZiAoYnl0ZXNXcml0dGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX2J1ZmZlci5zaXplKCkgKyBsZW5ndGggLSBieXRlc1dyaXR0ZW4gPiBi
dWZmZXJTaXplKSB7CisgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8gaW5kaWNhdGUg
dGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA8IGxlbmd0aCkgeworICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoZGF0YSArIGJ5dGVzV3JpdHRlbiwgbGVuZ3RoIC0gYnl0ZXNXcml0dGVuKTsKKyAgICAg
ICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3Ry
ZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UoKQoreworICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUgPSBD
bG9zaW5nOworICAgIGlmICghbV9idWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgZGlzY29ubmVjdCgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmRpc2Nv
bm5lY3QoKQoreworICAgIGF1dG8gcHJvdGVjdCA9IG1ha2VSZWYoc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlJj4oKnRoaXMpKTsgLy8gcGxhdGZvcm1DbG9zZSBjYWxscyB0aGUgY2xpZW50
LCB3aGljaCBtYXkgbWFrZSB0aGUgaGFuZGxlIGdldCBkZWFsbG9jYXRlZCBpbW1lZGlhdGVseS4K
KworICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICBtX3N0YXRlID0gQ2xvc2VkOworfQorCitib29s
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmRQZW5kaW5nRGF0YSgpCit7CisgICAgaWYgKG1f
c3RhdGUgIT0gT3BlbiAmJiBtX3N0YXRlICE9IENsb3NpbmcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9idWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX3N0YXRlID09
IE9wZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX3N0YXRlID09
IENsb3NpbmcpIHsKKyAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIHBlbmRpbmc7CisgICAgZG8gewor
ICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gcGxhdGZvcm1TZW5kKG1fYnVmZmVyLmZpcnN0Qmxv
Y2tEYXRhKCksIG1fYnVmZmVyLmZpcnN0QmxvY2tTaXplKCkpOworICAgICAgICBwZW5kaW5nID0g
Ynl0ZXNXcml0dGVuICE9IHN0YXRpY19jYXN0PGludD4obV9idWZmZXIuZmlyc3RCbG9ja1NpemUo
KSk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyLnNpemUoKSAtIGJ5dGVzV3JpdHRlbiA8PSBi
dWZmZXJTaXplKTsKKyAgICAgICAgbV9idWZmZXIuY29uc3VtZShieXRlc1dyaXR0ZW4pOworICAg
IH0gd2hpbGUgKCFwZW5kaW5nICYmICFtX2J1ZmZlci5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50
LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSY+
KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1NvY2tldFN0cmVhbUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDI4ICsyOSwyNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KICNpbmNsdWRlICJT
b2NrZXRTdHJlYW1IYW5kbGUuaCIKKwogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IHVuc2lnbmVkIGludCBidWZmZXJT
aXplID0gMTAwICogMTAyNCAqIDEwMjQ7Citjb25zdCB1bnNpZ25lZCBidWZmZXJTaXplID0gMTAw
ICogMTAyNCAqIDEwMjQ7CiAKLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVhbUhh
bmRsZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50
KQorU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQogICAgIDogbV91cmwodXJsKQogICAg
ICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9zdGF0ZShDb25uZWN0aW5nKQogewogfQogCi1T
b2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1TdGF0ZSBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlOjpzdGF0ZSgpIGNvbnN0CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbVN0
YXRlIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0
YXRlOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ29ubmVjdGluZyB8
fCBtX3N0YXRlID09IENsb3NpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc5LDcgKzc4
LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kKGNvbnN0IAogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsb3NlKCkKK3ZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpjbG9zZSgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2Vk
KQogICAgICAgICByZXR1cm47CkBAIC04OSw3ICs4OCw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZTo6Y2xvc2UoKQogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVCYXNlOjpkaXNjb25uZWN0KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaXNj
b25uZWN0KCkKIHsKICAgICBhdXRvIHByb3RlY3QgPSBtYWtlUmVmKHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSY+KCp0aGlzKSk7IC8vIHBsYXRmb3JtQ2xvc2UgY2FsbHMgdGhlIGNsaWVu
dCwgd2hpY2ggbWF5IG1ha2UgdGhlIGhhbmRsZSBnZXQgZGVhbGxvY2F0ZWQgaW1tZWRpYXRlbHku
CiAKQEAgLTk3LDcgKzk2LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpkaXNjb25u
ZWN0KAogICAgIG1fc3RhdGUgPSBDbG9zZWQ7CiB9CiAKLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxl
QmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kUGVu
ZGluZ0RhdGEoKQogewogICAgIGlmIChtX3N0YXRlICE9IE9wZW4gJiYgbV9zdGF0ZSAhPSBDbG9z
aW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjIsNCArMTIxLDQgQEAgYm9vbCBTb2Nr
ZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kUGVuZGluZwogICAgIHJldHVybiB0cnVlOwogfQogCi19
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRs
ZS5oCShyZXZpc2lvbiAyMDQ0NjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oOjIwNDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRl
IDx3dGYvU3RyZWFtQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29j
a2V0U3RyZWFtSGFuZGxlOworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OworCitjbGFz
cyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFNvY2tldFN0cmVh
bVN0YXRlIHsgQ29ubmVjdGluZywgT3BlbiwgQ2xvc2luZywgQ2xvc2VkIH07CisgICAgdmlydHVh
bCB+U29ja2V0U3RyZWFtSGFuZGxlQmFzZSgpIHsgfQorICAgIFNvY2tldFN0cmVhbVN0YXRlIHN0
YXRlKCkgY29uc3Q7CisKKyAgICBib29sIHNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCk7CisgICAgdm9pZCBjbG9zZSgpOyAvLyBEaXNjb25uZWN0IGFmdGVyIGFsbCBkYXRhIGluIGJ1
ZmZlciBhcmUgc2VudC4KKyAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKyAgICBzaXplX3QgYnVmZmVy
ZWRBbW91bnQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KKworICAgIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KworcHJvdGVjdGVkOgorICAgIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UoY29uc3QgVVJMJiwgU29j
a2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CisKKyAgICBib29sIHNlbmRQZW5kaW5nRGF0YSgpOwor
ICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKSA9IDA7CisKKyAgICBVUkwg
bV91cmw7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBtX2NsaWVudDsKKyAgICBTdHJl
YW1CdWZmZXI8Y2hhciwgMTAyNCAqIDEwMjQ+IG1fYnVmZmVyOworICAgIFNvY2tldFN0cmVhbVN0
YXRlIG1fc3RhdGU7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5o
CShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Nv
Y2tldFN0cmVhbUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNiArMzMsMTYgQEAKIAog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJlYW1CdWZmZXIuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7CiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7
CiAKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgeworY2xhc3MgU29ja2V0U3RyZWFtSGFu
ZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4gewog
cHVibGljOgogICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBDb25uZWN0aW5nLCBPcGVuLCBD
bG9zaW5nLCBDbG9zZWQgfTsKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKCkg
eyB9CisgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCkgeyB9CiAgICAgU29ja2V0U3Ry
ZWFtU3RhdGUgc3RhdGUoKSBjb25zdDsKIAogICAgIGJvb2wgc2VuZChjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKTsKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIFNvY2tldFN0cmVh
bUhhbmRsZUNsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAogcHJv
dGVjdGVkOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UoY29uc3QgVVJMJiwgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50Jik7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwogCiAgICAgYm9vbCBzZW5kUGVuZGluZ0RhdGEoKTsK
ICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCkgPSAwOwpAQCAtNjUsNCArNjUsNCBAQCBwcm90ZWN0ZWQ6CiAgICAgU29ja2V0U3RyZWFtU3Rh
dGUgbV9zdGF0ZTsKIH07CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0
cmVhbUhhbmRsZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgotCi0jaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgdW5zaWduZWQgaW50IGJ1ZmZl
clNpemUgPSAxMDAgKiAxMDI0ICogMTAyNDsKLQotU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6U29j
a2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQpCi0gICAgOiBtX3VybCh1cmwpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0g
ICAgLCBtX3N0YXRlKENvbm5lY3RpbmcpCi17Ci19Ci0KLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6
OlNvY2tldFN0cmVhbVN0YXRlIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zdGF0ZTsKLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
OjpzZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1fc3RhdGUg
PT0gQ29ubmVjdGluZyB8fCBtX3N0YXRlID09IENsb3NpbmcpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV9idWZmZXIu
c2l6ZSgpICsgbGVuZ3RoID4gYnVmZmVyU2l6ZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHJl
cG9ydCBlcnJvciB0byBpbmRpY2F0ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2J1ZmZlci5hcHBl
bmQoZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91
bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3Vu
dCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGludCBieXRlc1dyaXR0ZW4g
PSAwOwotICAgIGlmIChtX3N0YXRlID09IE9wZW4pCi0gICAgICAgIGJ5dGVzV3JpdHRlbiA9IHBs
YXRmb3JtU2VuZChkYXRhLCBsZW5ndGgpOwotICAgIGlmIChieXRlc1dyaXR0ZW4gPCAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0aCAtIGJ5
dGVzV3JpdHRlbiA+IGJ1ZmZlclNpemUpIHsKLSAgICAgICAgLy8gRklYTUU6IHJlcG9ydCBlcnJv
ciB0byBpbmRpY2F0ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYnl0ZXNXcml0dGVuIDwgbGVuZ3RoKSB7Ci0gICAg
ICAgIG1fYnVmZmVyLmFwcGVuZChkYXRhICsgYnl0ZXNXcml0dGVuLCBsZW5ndGggLSBieXRlc1dy
aXR0ZW4pOwotICAgICAgICBtX2NsaWVudC5kaWRVcGRhdGVCdWZmZXJlZEFtb3VudChzdGF0aWNf
Y2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUmPigqdGhpcyksIGJ1ZmZlcmVkQW1vdW50KCkpOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpj
bG9zZSgpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2VkKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9zdGF0ZSA9IENsb3Npbmc7Ci0gICAgaWYgKCFtX2J1ZmZlci5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBkaXNjb25uZWN0KCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZTo6ZGlzY29ubmVjdCgpCi17Ci0gICAgYXV0byBwcm90ZWN0ID0gbWFrZVJlZihzdGF0
aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUmPigqdGhpcykpOyAvLyBwbGF0Zm9ybUNsb3NlIGNh
bGxzIHRoZSBjbGllbnQsIHdoaWNoIG1heSBtYWtlIHRoZSBoYW5kbGUgZ2V0IGRlYWxsb2NhdGVk
IGltbWVkaWF0ZWx5LgotCi0gICAgcGxhdGZvcm1DbG9zZSgpOwotICAgIG1fc3RhdGUgPSBDbG9z
ZWQ7Ci19Ci0KLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkK
LXsKLSAgICBpZiAobV9zdGF0ZSAhPSBPcGVuICYmIG1fc3RhdGUgIT0gQ2xvc2luZykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2J1ZmZlci5pc0VtcHR5KCkpIHsKLSAgICAgICAg
aWYgKG1fc3RhdGUgPT0gT3BlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKG1fc3RhdGUgPT0gQ2xvc2luZykgewotICAgICAgICAgICAgZGlzY29ubmVjdCgpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wgcGVuZGlu
ZzsKLSAgICBkbyB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQobV9i
dWZmZXIuZmlyc3RCbG9ja0RhdGEoKSwgbV9idWZmZXIuZmlyc3RCbG9ja1NpemUoKSk7Ci0gICAg
ICAgIHBlbmRpbmcgPSBieXRlc1dyaXR0ZW4gIT0gc3RhdGljX2Nhc3Q8aW50PihtX2J1ZmZlci5m
aXJzdEJsb2NrU2l6ZSgpKTsKLSAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA8PSAwKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBBU1NFUlQobV9idWZmZXIuc2l6ZSgpIC0gYnl0
ZXNXcml0dGVuIDw9IGJ1ZmZlclNpemUpOwotICAgICAgICBtX2J1ZmZlci5jb25zdW1lKGJ5dGVz
V3JpdHRlbik7Ci0gICAgfSB3aGlsZSAoIXBlbmRpbmcgJiYgIW1fYnVmZmVyLmlzRW1wdHkoKSk7
Ci0gICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAkocmV2
aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgPHd0Zi9TdHJlYW1CdWZmZXIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7Ci1j
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UgewotcHVibGljOgotICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBDb25uZWN0aW5n
LCBPcGVuLCBDbG9zaW5nLCBDbG9zZWQgfTsKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5k
bGVCYXNlKCkgeyB9Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgc3RhdGUoKSBjb25zdDsKLQotICAg
IGJvb2wgc2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLSAgICB2b2lkIGNsb3Nl
KCk7IC8vIERpc2Nvbm5lY3QgYWZ0ZXIgYWxsIGRhdGEgaW4gYnVmZmVyIGFyZSBzZW50LgotICAg
IHZvaWQgZGlzY29ubmVjdCgpOwotICAgIHNpemVfdCBidWZmZXJlZEFtb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQotCi0gICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
U29ja2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQmKTsKLQotICAgIGJvb2wgc2VuZFBlbmRpbmdEYXRhKCk7Ci0gICAgdmlydHVhbCBpbnQgcGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGxhdGZvcm1DbG9zZSgpID0gMDsKLQotICAgIFVSTCBtX3VybDsKLSAgICBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQmIG1fY2xpZW50OwotICAgIFN0cmVhbUJ1ZmZlcjxjaGFyLCAxMDI0
ICogMTAyND4gbV9idWZmZXI7Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgbV9zdGF0ZTsKLX07Ci0K
LX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24gMjA0NDY2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5k
bGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlNlc3Npb25JRC5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9fQ0ZIVFRQTWVzc2FnZSogQ0ZIVFRQTWVzc2FnZVJl
ZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDcmVkZW50aWFsOwotY2xhc3MgUHJv
dGVjdGlvblNwYWNlOwotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OwotCi1jbGFzcyBT
b2NrZXRTdHJlYW1IYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U29ja2V0U3Ry
ZWFtSGFuZGxlPiwgcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCwgc2Vzc2lv
bklEKSk7IH0KLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOwotCi1wcml2YXRl
OgotICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbG9zZSgpOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCYsIFNlc3Npb25JRCk7Ci0gICAgdm9pZCBjcmVhdGVTdHJlYW1zKCk7Ci0gICAgdm9pZCBz
Y2hlZHVsZVN0cmVhbXMoKTsKLSAgICB2b2lkIGNob29zZVByb3h5KCk7Ci0gICAgdm9pZCBjaG9v
c2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmKTsKLSAgICB2b2lkIGV4ZWN1dGVQQUNGaWxlVVJM
KENGVVJMUmVmKTsKLSAgICB2b2lkIHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKLSAgICBSZXRh
aW5QdHI8Q0ZSdW5Mb29wU291cmNlUmVmPiBtX3BhY1J1bkxvb3BTb3VyY2U7Ci0gICAgc3RhdGlj
IHZvaWQgcGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5
TGlzdCwgQ0ZFcnJvclJlZiBlcnJvcik7Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIGNvcHlQQUNF
eGVjdXRpb25EZXNjcmlwdGlvbih2b2lkKik7Ci0KLSAgICBib29sIHNob3VsZFVzZVNTTCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXJsLnByb3RvY29sSXMoIndzcyIpOyB9Ci0gICAgdW5zaWduZWQgc2hv
cnQgcG9ydCgpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQ
TWVzc2FnZVJlZiByZXNwb25zZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCogcmV0YWluU29ja2V0U3Ry
ZWFtSGFuZGxlKHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCByZWxlYXNlU29ja2V0U3RyZWFtSGFu
ZGxlKHZvaWQqKTsKLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weUNGU3RyZWFtRGVzY3JpcHRp
b24odm9pZCopOwotICAgIHN0YXRpYyB2b2lkIHJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJl
YW1SZWYsIENGU3RyZWFtRXZlbnRUeXBlLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgd3JpdGVT
dHJlYW1DYWxsYmFjayhDRldyaXRlU3RyZWFtUmVmLCBDRlN0cmVhbUV2ZW50VHlwZSwgdm9pZCop
OwotICAgIHZvaWQgcmVhZFN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlKTsKLSAgICB2
b2lkIHdyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUpOwotCi0gICAgdm9pZCBy
ZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYpOwotCi0gICAgYm9vbCBnZXRTdG9yZWRDT05O
RUNUUHJveHlDcmVkZW50aWFscyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBTdHJpbmcmIGxvZ2lu
LCBTdHJpbmcmIHBhc3N3b3JkKTsKLQotICAgIGVudW0gQ29ubmVjdGluZ1N1YnN0YXRlIHsgTmV3
LCBFeGVjdXRpbmdQQUNGaWxlLCBXYWl0aW5nRm9yQ3JlZGVudGlhbHMsIFdhaXRpbmdGb3JDb25u
ZWN0LCBDb25uZWN0ZWQgfTsKLSAgICBDb25uZWN0aW5nU3Vic3RhdGUgbV9jb25uZWN0aW5nU3Vi
c3RhdGU7Ci0KLSAgICBlbnVtIENvbm5lY3Rpb25UeXBlIHsgVW5rbm93biwgRGlyZWN0LCBTT0NL
U1Byb3h5LCBDT05ORUNUUHJveHkgfTsKLSAgICBDb25uZWN0aW9uVHlwZSBtX2Nvbm5lY3Rpb25U
eXBlOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbV9wcm94eUhvc3Q7Ci0gICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBtX3Byb3h5UG9ydDsKLQotICAgIFJldGFpblB0cjxDRkhUVFBNZXNz
YWdlUmVmPiBtX3Byb3h5UmVzcG9uc2VNZXNzYWdlOwotICAgIGJvb2wgbV9zZW50U3RvcmVkQ3Jl
ZGVudGlhbHM7Ci0gICAgUmV0YWluUHRyPENGUmVhZFN0cmVhbVJlZj4gbV9yZWFkU3RyZWFtOwot
ICAgIFJldGFpblB0cjxDRldyaXRlU3RyZWFtUmVmPiBtX3dyaXRlU3RyZWFtOwotCi0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBtX2h0dHBzVVJMOyAvLyB3cyhzKTogcmVwbGFjZWQgd2l0aCBodHRw
czoKLSAgICBTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFu
ZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDcwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJDcmVkZW50
aWFsLmgiCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUHJvdGVj
dGlvblNwYWNlLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJl
YW1FcnJvci5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2luY2x1
ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQ
TEFURk9STShJT1MpCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCi0jaW5jbHVk
ZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbHNlCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1B
QykKLWV4dGVybiAiQyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tDRlN0cmVhbVNvY2tldFNldE5vRGVs
YXk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2ltcG9ydCA8Q0ZOZXR3b3JrU1BJ
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlKHVybCwgY2xpZW50KQotICAgICwgbV9jb25uZWN0aW5nU3Vic3RhdGUoTmV3KQotICAg
ICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQotICAgICwgbV9zZW50U3RvcmVkQ3JlZGVudGlh
bHMoZmFsc2UpCi0gICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi17Ci0gICAgTE9HKE5ldHdv
cmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2NsaWVu
dCk7Ci0KLSAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoIndzIikgfHwgdXJsLnByb3RvY29sSXMo
IndzcyIpKTsKLQotICAgIFVSTCBodHRwc1VSTChVUkwoKSwgImh0dHBzOi8vIiArIG1fdXJsLmhv
c3QoKSk7Ci0gICAgbV9odHRwc1VSTCA9IGh0dHBzVVJMLmNyZWF0ZUNGVVJMKCk7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICAvLyBEb24ndCBjaGVjayBmb3IgSFNUUyB2aW9sYXRpb24gZm9y
IGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZQotICAgIC8vIEhTVFMgc3RhdGUgc2hvdWxkIG5vdCB0
cmFuc2ZlciBiZXR3ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUgYnJvd3NpbmcuCi0gICAgaWYgKHVy
bC5wcm90b2NvbElzKCJ3cyIpCi0gICAgICAgICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKQot
ICAgICAgICAmJiBfQ0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0V2l0aFNlc3Npb24obV9odHRwc1VS
TC5nZXQoKSwgbnVsbHB0cikpIHsKLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQg
Y29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRlcyBIVFRQIFN0cmljdCBUcmFuc3Bv
cnQgU2VjdXJpdHkuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBj
cmVhdGVTdHJlYW1zKCk7Ci0gICAgQVNTRVJUKCFtX3JlYWRTdHJlYW0gPT0gIW1fd3JpdGVTdHJl
YW0pOwotICAgIGlmICghbV9yZWFkU3RyZWFtKSAvLyBEb2luZyBhc3luY2hyb25vdXMgUEFDIGZp
bGUgcHJvY2Vzc2luZywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0ZWQgbGF0ZXIuCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNjaGVkdWxlU3RyZWFtcygpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6c2NoZWR1bGVTdHJlYW1zKCkKLXsKLSAgICBBU1NFUlQobV9yZWFkU3RyZWFtKTsKLSAg
ICBBU1NFUlQobV93cml0ZVN0cmVhbSk7Ci0KLSAgICBDRlN0cmVhbUNsaWVudENvbnRleHQgY2xp
ZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0YWluU29ja2V0U3RyZWFtSGFuZGxlLCByZWxlYXNl
U29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbiB9OwotICAgIC8vIEZJ
WE1FOiBQYXNzIHNwZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRlcmVzdGVkIGluIGluc3RlYWQgb2Yg
LTEuCi0gICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVhZFN0cmVhbS5nZXQoKSwgc3RhdGlj
X2Nhc3Q8Q0ZPcHRpb25GbGFncz4oLTEpLCByZWFkU3RyZWFtQ2FsbGJhY2ssICZjbGllbnRDb250
ZXh0KTsKLSAgICBDRldyaXRlU3RyZWFtU2V0Q2xpZW50KG1fd3JpdGVTdHJlYW0uZ2V0KCksIHN0
YXRpY19jYXN0PENGT3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVTdHJlYW1DYWxsYmFjaywgJmNsaWVu
dENvbnRleHQpOwotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIENGUmVhZFN0cmVhbVNjaGVkdWxl
V2l0aFJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxv
b3BEZWZhdWx0TW9kZSk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3AobV93
cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUp
OwotI2Vsc2UKLSAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fcmVhZFN0cmVh
bS5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwot
ICAgIENGV3JpdGVTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fd3JpdGVTdHJlYW0uZ2V0KCks
IENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSNlbmRpZgot
Ci0gICAgQ0ZSZWFkU3RyZWFtT3BlbihtX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIENGV3JpdGVT
dHJlYW1PcGVuKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOwotCi0gICAgaWYgKG1fcGFjUnVuTG9vcFNv
dXJjZSkKLSAgICAgICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOwotCi0gICAgbV9jb25uZWN0
aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKLX0KLQotdm9pZCogU29ja2V0U3RyZWFt
SGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5mbykKLXsKLSAgICBTb2Nr
ZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+
KGluZm8pOwotICAgIGhhbmRsZS0+cmVmKCk7Ci0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5m
bykKLXsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSo+KGluZm8pOwotICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQotQ0ZTdHJp
bmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24odm9p
ZCopCi17Ci0gICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQgcHJveHkgUEFDIGZpbGUgZXhlY3V0
aW9uIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCi17Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMb2NrIG11
dGV4OwotICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJsZTsKLQotICAgIGJvb2wgaXNGaW5p
c2hlZCA9IGZhbHNlOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbJl0gewotICAgICAgICBmdW5j
dGlvbigpOwotCi0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG11dGV4KTsKLSAg
ICAgICAgaXNGaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIGNvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eU9uZSgpOwotICAgIH0pOwotCi0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG11dGV4
KTsKLSAgICBjb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFsmXSB7IHJldHVybiBpc0Zpbmlz
aGVkOyB9KTsKLX0KLQotc3RydWN0IE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8gewotICAgIE1h
aW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUsIENGQXJy
YXlSZWYgcHJveHlMaXN0KSA6IGhhbmRsZShoYW5kbGUpLCBwcm94eUxpc3QocHJveHlMaXN0KSB7
IH0KLSAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBoYW5kbGU7Ci0gICAgQ0ZBcnJheVJl
ZiBwcm94eUxpc3Q7Ci19OwotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGFjRXhlY3V0aW9u
Q2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZikK
LXsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0
cmVhbUhhbmRsZSo+KGNsaWVudCk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbJl0g
ewotICAgICAgICBBU1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBFeGVjdXRp
bmdQQUNGaWxlKTsKLSAgICAgICAgLy8gVGhpcyB0aW1lLCB0aGUgYXJyYXkgd29uJ3QgaGF2ZSBQ
QUMgYXMgYSBmaXJzdCBlbnRyeS4KLSAgICAgICAgaWYgKGhhbmRsZS0+bV9zdGF0ZSAhPSBDb25u
ZWN0aW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBoYW5kbGUtPmNob29zZVByb3h5
RnJvbUFycmF5KHByb3h5TGlzdCk7Ci0gICAgICAgIGhhbmRsZS0+Y3JlYXRlU3RyZWFtcygpOwot
ICAgICAgICBoYW5kbGUtPnNjaGVkdWxlU3RyZWFtcygpOwotICAgIH0pOwotfQotCi12b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkK
LXsKLSAgICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3IgV2Vi
U29ja2V0IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgotICAgIENGU3RyZWFtQ2xpZW50Q29u
dGV4dCBjbGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUs
IHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbiB9
OwotICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrRXhlY3V0ZVByb3h5
QXV0b0NvbmZpZ3VyYXRpb25VUkwocGFjRmlsZVVSTCwgbV9odHRwc1VSTC5nZXQoKSwgcGFjRXhl
Y3V0aW9uQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KSk7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAg
IENGUnVuTG9vcEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5n
ZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgQ0ZSdW5Mb29wQWRkU291
cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOwotI2VuZGlmCi0gICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBF
eGVjdXRpbmdQQUNGaWxlOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVtb3ZlUEFD
UnVuTG9vcFNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKG1fcGFjUnVuTG9vcFNvdXJjZSk7Ci0KLSAg
ICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSk7Ci0j
aWYgUExBVEZPUk0oV0lOKQotICAgIENGUnVuTG9vcFJlbW92ZVNvdXJjZShsb2FkZXJSdW5Mb29w
KCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNl
bHNlCi0gICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9w
YWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotI2VuZGlmCi0g
ICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OmNob29zZVByb3h5KCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eURp
Y3Rpb25hcnkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdzKCkpOwot
Ci0gICAgLy8gU09DS1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNUKSBwcm94aWVzIGFyZSBzdXBwb3J0
ZWQuCi0gICAgLy8gV2ViU29ja2V0IHByb3RvY29sIHJlbGllcyBvbiBoYW5kc2hha2UgYmVpbmcg
dHJhbnNmZXJyZWQgdW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEgcHJveHkgdGhhdCB3aWxsIG5vdCBt
b2RpZnkgaGVhZGVycy4KLSAgICAvLyBTaW5jZSBIVFRQIHByb3hpZXMgbXVzdCBhZGQgVmlhIGhl
YWRlcnMsIHRoZXkgYXJlIGhpZ2hseSB1bmxpa2VseSB0byB3b3JrLgotICAgIC8vIE1hbnkgQ09O
TkVDVCBwcm94aWVzIGxpbWl0IGNvbm5lY3Rpdml0eSB0byBwb3J0IDQ0Mywgc28gd2UgcHJlZmVy
IFNPQ0tTLCBpZiBjb25maWd1cmVkLgotCi0gICAgaWYgKCFwcm94eURpY3Rpb25hcnkpIHsKLSAg
ICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJMIGRvZXNuJ3Qga25vdyBhYm91dCBX
ZWJTb2NrZXQgc2NoZW1lcywgc28gcHJldGVuZCB0byB1c2UgaHR0cC4KLSAgICAvLyBBbHdheXMg
dXNlICJodHRwcyIgdG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4gcmVzdWx0IC0gd2UnbGwgdHJ5IHRv
IHVzZSB0aG9zZSBmb3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFueSBhcmUgY29uZmlndXJlZCB0byBy
ZWplY3QgY29ubmVjdGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhhbiA0NDMuCi0gICAgUmV0YWluUHRy
PENGQXJyYXlSZWY+IHByb3h5QXJyYXkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlQcm94aWVzRm9y
VVJMKG1faHR0cHNVUkwuZ2V0KCksIHByb3h5RGljdGlvbmFyeS5nZXQoKSkpOwotCi0gICAgY2hv
b3NlUHJveHlGcm9tQXJyYXkocHJveHlBcnJheS5nZXQoKSk7Ci19Ci0KLXZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpjaG9vc2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkpCi17
Ci0gICAgaWYgKCFwcm94eUFycmF5KSB7Ci0gICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBEaXJl
Y3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDRkluZGV4IHByb3h5QXJyYXlDb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChwcm94eUFycmF5KTsKLQotICAgIC8vIFBBQyBpcyBhbHdheXMg
dGhlIGZpcnN0IGVudHJ5LCBpZiBwcmVzZW50LgotICAgIGlmIChwcm94eUFycmF5Q291bnQpIHsK
LSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9IHN0YXRpY19jYXN0PENGRGljdGlv
bmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwcm94eUFycmF5LCAwKSk7Ci0gICAgICAg
IENGVHlwZVJlZiBwcm94eVR5cGUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm94eUluZm8sIGtD
RlByb3h5VHlwZUtleSk7Ci0gICAgICAgIGlmIChwcm94eVR5cGUgJiYgQ0ZHZXRUeXBlSUQocHJv
eHlUeXBlKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Ci0gICAgICAgICAgICBpZiAoQ0ZFcXVh
bChwcm94eVR5cGUsIGtDRlByb3h5VHlwZUF1dG9Db25maWd1cmF0aW9uVVJMKSkgewotICAgICAg
ICAgICAgICAgIENGVHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
eHlJbmZvLCBrQ0ZQcm94eUF1dG9Db25maWd1cmF0aW9uVVJMS2V5KTsKLSAgICAgICAgICAgICAg
ICBpZiAocGFjRmlsZVVSTCAmJiBDRkdldFR5cGVJRChwYWNGaWxlVVJMKSA9PSBDRlVSTEdldFR5
cGVJRCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVQQUNGaWxlVVJMKHN0YXRpY19j
YXN0PENGVVJMUmVmPihwYWNGaWxlVVJMKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBDRkRpY3Rpb25hcnlSZWYgY2hvc2VuUHJveHkgPSAwOwotICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IHByb3h5QXJyYXlDb3VudDsgKytpKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBw
cm94eUluZm8gPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgocHJveHlBcnJheSwgaSkpOwotICAgICAgICBDRlR5cGVSZWYgcHJveHlUeXBlID0gQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eVR5cGVLZXkpOwotICAgICAgICBp
ZiAocHJveHlUeXBlICYmIENGR2V0VHlwZUlEKHByb3h5VHlwZSkgPT0gQ0ZTdHJpbmdHZXRUeXBl
SUQoKSkgewotICAgICAgICAgICAgaWYgKENGRXF1YWwocHJveHlUeXBlLCBrQ0ZQcm94eVR5cGVT
T0NLUykpIHsKLSAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rpb25UeXBlID0gU09DS1NQcm94eTsK
LSAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChDRkVxdWFsKHByb3h5VHlw
ZSwga0NGUHJveHlUeXBlSFRUUFMpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb25uZWN0aW9uVHlw
ZSA9IENPTk5FQ1RQcm94eTsKLSAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5m
bzsKLSAgICAgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcgZm9yIHByb3hpZXMsIGFzIGEgU09D
S1Mgb25lIGlzIHByZWZlcmFibGUuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoY2hvc2VuUHJveHkpIHsKLSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGlvblR5cGUg
IT0gVW5rbm93bik7Ci0gICAgICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25UeXBlICE9IERpcmVjdCk7
Ci0KLSAgICAgICAgQ0ZUeXBlUmVmIHByb3h5SG9zdCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNo
b3NlblByb3h5LCBrQ0ZQcm94eUhvc3ROYW1lS2V5KTsKLSAgICAgICAgQ0ZUeXBlUmVmIHByb3h5
UG9ydCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eVBvcnROdW1i
ZXJLZXkpOwotCi0gICAgICAgIGlmIChwcm94eUhvc3QgJiYgQ0ZHZXRUeXBlSUQocHJveHlIb3N0
KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpICYmIHByb3h5UG9ydCAmJiBDRkdldFR5cGVJRChwcm94
eVBvcnQpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKLSAgICAgICAgICAgIG1fcHJveHlIb3N0
ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9zdCk7Ci0gICAgICAgICAgICBtX3By
b3h5UG9ydCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihwcm94eVBvcnQpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uVHlwZSA9IERp
cmVjdDsKLX0KLQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygpCi17
Ci0gICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gVW5rbm93bikKLSAgICAgICAgY2hvb3NlUHJv
eHkoKTsKLQotICAgIC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93biwgdGhlbiB3ZSdyZSByZXNvbHZp
bmcgYSBQQUMgZmlsZSBhc3luY2hyb25vdXNseS4KLSAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9
PSBVbmtub3duKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGhvc3QgPSBtX3VybC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLQotICAgIC8vIENyZWF0aW5n
IHN0cmVhbXMgdG8gZmluYWwgZGVzdGluYXRpb24sIG5vdCB0byBwcm94eS4KLSAgICBDRlJlYWRT
dHJlYW1SZWYgcmVhZFN0cmVhbSA9IDA7Ci0gICAgQ0ZXcml0ZVN0cmVhbVJlZiB3cml0ZVN0cmVh
bSA9IDA7Ci0gICAgQ0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNvY2tldFRvSG9zdCgwLCBob3N0Lmdl
dCgpLCBwb3J0KCksICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJlYW0pOwotI2lmIFBMQVRGT1JNKElP
UykgfHwgUExBVEZPUk0oTUFDKQotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMjg1NTU4Nz4gX2tD
RlN0cmVhbVNvY2tldFNldE5vRGVsYXkgaXMgbm90IGV4cG9ydGVkIG9uIFdpbmRvd3MKLSAgICBD
RldyaXRlU3RyZWFtU2V0UHJvcGVydHkod3JpdGVTdHJlYW0sIF9rQ0ZTdHJlYW1Tb2NrZXRTZXRO
b0RlbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0jZW5kaWYKLQotICAgIG1fcmVhZFN0cmVhbSA9IGFk
b3B0Q0YocmVhZFN0cmVhbSk7Ci0gICAgbV93cml0ZVN0cmVhbSA9IGFkb3B0Q0Yod3JpdGVTdHJl
YW0pOwotCi0gICAgc3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBlKSB7Ci0gICAgY2FzZSBVbmtub3du
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBEaXJlY3Q6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU09DS1NQcm94eTogewotICAgICAg
ICAvLyBGSVhNRTogU09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxlbmdlLXJlc3BvbnNlLCBzaG91bGQg
d2UgdHJ5IHRvIGFwcGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5Y2hhaW4gcmlnaHQgYXdheT8KLSAg
ICAgICAgLy8gQnV0IFNPQ0tTNSBjcmVkZW50aWFscyBkb24ndCB3b3JrIGF0IHRoZSB0aW1lIG9m
IHRoaXMgd3JpdGluZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3NzY2OTg+LgotICAgICAgICBjb25z
dCB2b2lkKiBwcm94eUtleXNbXSA9IHsga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5SG9zdCwg
a0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5UG9ydCB9OwotICAgICAgICBjb25zdCB2b2lkKiBw
cm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkgfTsK
LSAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29ubmVjdERpY3Rpb25hcnkgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtleXMsIHByb3h5VmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKHByb3h5S2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgQ0ZSZWFkU3RyZWFt
U2V0UHJvcGVydHkobV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZTdHJlYW1Qcm9wZXJ0eVNPQ0tTUHJv
eHksIGNvbm5lY3REaWN0aW9uYXJ5LmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICBjYXNlIENPTk5FQ1RQcm94eToKLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlGb3JTdHJl
YW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkVXNlU1NMKCkpIHsK
LSAgICAgICAgQ0ZCb29sZWFuUmVmIHZhbGlkYXRlQ2VydGlmaWNhdGVDaGFpbiA9IFNldHRpbmdz
OjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9vbGVhbkZhbHNlIDoga0NGQm9vbGVh
blRydWU7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9IHsga0NGU3RyZWFtU1NMUGVlck5h
bWUsIGtDRlN0cmVhbVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZpY2F0ZUNo
YWluIH07Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBob3N0LmdldCgpLCBrQ0ZT
dHJlYW1Tb2NrZXRTZWN1cml0eUxldmVsTmVnb3RpYXRlZFNTTCwgdmFsaWRhdGVDZXJ0aWZpY2F0
ZUNoYWluIH07Ci0gICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNldHRpbmdzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVO
R1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgIENGUmVhZFN0cmVhbVNldFByb3BlcnR5KG1f
cmVhZFN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3Mu
Z2V0KCkpOwotICAgICAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkobV93cml0ZVN0cmVhbS5n
ZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOwotICAg
IH0KLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OmdldFN0b3JlZENPTk5FQ1RQcm94eUNy
ZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBTdHJpbmcm
IGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQotewotICAgIC8vIEZJWE1FICg8cmRhcjovL3Byb2Js
ZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9t
IEF1dGhCcm9rZXJBZ2VudC4KLQotICAgIC8vIFRyeSBzeXN0ZW0gY3JlZGVudGlhbCBzdG9yYWdl
IGZpcnN0LCBtYXRjaGluZyBIVFRQIGJlaGF2aW9yIChDRk5ldHdvcmsgb25seSBhc2tzIHRoZSBj
bGllbnQgZm9yIHBhc3N3b3JkIGlmIGl0IGNvdWxkbid0IGZpbmQgaXQgaW4gS2V5Y2hhaW4pLgot
ICAgIENyZWRlbnRpYWwgc3RvcmVkQ3JlZGVudGlhbDsKLSAgICBpZiAoYXV0byogc3RvcmFnZVNl
c3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklE
KSkgewotICAgICAgICBzdG9yZWRDcmVkZW50aWFsID0gc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRp
YWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSk7Ci0g
ICAgICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHN0b3Jl
ZENyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocHJv
dGVjdGlvblNwYWNlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGxvZ2luID0gc3RvcmVkQ3JlZGVudGlh
bC51c2VyKCk7Ci0gICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVkZW50aWFsLnBhc3N3b3JkKCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0
aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1dGhlbnRpY2F0aW9uTWV0aG9kKENG
U3RyaW5nUmVmIG1ldGhvZCkKLXsKLSAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRo
ZW50aWNhdGlvblNjaGVtZUJhc2ljKSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOwotICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NG
SFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lRGlnZXN0KSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKLSAgICBpZiAoQ0ZFcXVhbCht
ZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5UTE0pKQotICAgICAgICByZXR1cm4g
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOwotICAgIGlmIChDRkVxdWFs
KG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlKSkKLSAgICAgICAg
cmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlOwotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZVVua25vd247Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjphZGRD
T05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBwcm94eVJlc3BvbnNlKQotewotICAg
IFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4gYXV0aGVudGljYXRpb24gPSBhZG9w
dENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJlc3BvbnNlKDAsIHByb3h5UmVzcG9u
c2UpKTsKLQotICAgIGlmICghQ0ZIVFRQQXV0aGVudGljYXRpb25SZXF1aXJlc1VzZXJOYW1lQW5k
UGFzc3dvcmQoYXV0aGVudGljYXRpb24uZ2V0KCkpKSB7Ci0gICAgICAgIC8vIFRoYXQncyBhbGwg
d2UgY2FuIG9mZmVyLi4uCi0gICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRo
aXMsIFNvY2tldFN0cmVhbUVycm9yKDAsIG1fdXJsLnN0cmluZygpLCAiUHJveHkgYXV0aGVudGlj
YXRpb24gc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdlYlNvY2tldHMiKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgcG9ydCA9IDA7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1
ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlwZSwgJnBvcnQpOwotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9u
Q29weU1ldGhvZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gcmVhbG1DRiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVudGljYXRpb25Db3B5UmVhbG0oYXV0
aGVudGljYXRpb24uZ2V0KCkpKTsKLQotICAgIGlmICghbWV0aG9kQ0YgfHwgIXJlYWxtQ0YpIHsK
LSAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgb24gc29tZSBPUyB2ZXJzaW9u
cyB3ZSBnZXQgaW5jb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBkYXRhLCBzZWUgPHJkYXI6Ly9wcm9i
bGVtLzEwNDE2MzE2Pi4KLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhp
cywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQgcHJveHkg
YXV0aGVudGljYXRpb24gY291bGRuJ3QgYmUgaGFuZGxlZCIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UoU3RyaW5nKG1fcHJv
eHlIb3N0LmdldCgpKSwgcG9ydCwgUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUywgU3RyaW5nKHJl
YWxtQ0YuZ2V0KCkpLCBhdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhv
ZChtZXRob2RDRi5nZXQoKSkpOwotICAgIFN0cmluZyBsb2dpbjsKLSAgICBTdHJpbmcgcGFzc3dv
cmQ7Ci0gICAgaWYgKCFtX3NlbnRTdG9yZWRDcmVkZW50aWFscyAmJiBnZXRTdG9yZWRDT05ORUNU
UHJveHlDcmVkZW50aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxvZ2luLCBwYXNzd29yZCkpIHsKLSAg
ICAgICAgLy8gVHJ5IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50aWFscywgaWYgd2UgaGF2ZW4ndCB0
cmllZCB0aG9zZSBhbHJlYWR5LgotICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgcmVxdWVz
dCB0byBtYWtlIENGTmV0d29yayBhcHBseSBjcmVkZW50aWFscyB0byBpdC4gVW5mb3J0dW5hdGVs
eSwgdGhpcyBjYW5ub3Qgd29yayB3aXRoIE5UTE0gYXV0aGVudGljYXRpb24uCi0gICAgICAgIFJl
dGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBkdW1teVJlcXVlc3QgPSBhZG9wdENGKENGSFRUUE1l
c3NhZ2VDcmVhdGVSZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwgbV9odHRwc1VSTC5nZXQoKSwga0NG
SFRUUFZlcnNpb24xXzEpKTsKLQotICAgICAgICBCb29sZWFuIGFwcGxpZWRDcmVkZW50aWFscyA9
IENGSFRUUE1lc3NhZ2VBcHBseUNyZWRlbnRpYWxzKGR1bW15UmVxdWVzdC5nZXQoKSwgYXV0aGVu
dGljYXRpb24uZ2V0KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHBhc3N3b3JkLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFwcGxpZWRD
cmVkZW50aWFscywgYXBwbGllZENyZWRlbnRpYWxzKTsKLQotICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyA9IGFkb3B0Q0YoQ0ZIVFRQTWVzc2Fn
ZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIlByb3h5LUF1
dGhvcml6YXRpb24iKSkpOwotCi0gICAgICAgIGlmICghcHJveHlBdXRob3JpemF0aW9uU3RyaW5n
KSB7Ci0gICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBOVExNIGF1dGguCi0gICAgICAgICAg
ICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcigw
LCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBpcyBub3Qgc3Vw
cG9ydGVkIGZvciBXZWJTb2NrZXRzIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiByZXN1bHRzIGluIGEgbmV3
IGNvbm5lY3Rpb24gYXR0ZW1wdC4KLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlBdXRob3JpemF0
aW9uRm9yU3RyZWFtKG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJveHlBdXRob3JpemF0aW9uU3RyaW5n
LmdldCgpKTsKLSAgICAgICAgbV9zZW50U3RvcmVkQ3JlZGVudGlhbHMgPSB0cnVlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IE9uIHBsYXRmb3JtcyB3aGVyZSBBdXRo
QnJva2VyQWdlbnQgaXMgbm90IGF2YWlsYWJsZSwgYXNrIHRoZSBjbGllbnQgaWYgY3JlZGVudGlh
bHMgY291bGQgbm90IGJlIGZvdW5kLgotCi0gICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJQcm94eSBjcmVk
ZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKLX0KLQotQ0ZTdHJpbmdSZWYgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQotewotICAgIFNv
Y2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxl
Kj4oaW5mbyk7Ci0gICAgcmV0dXJuIFN0cmluZygiV2ViS2l0IHNvY2tldCBzdHJlYW0sICIgKyBo
YW5kbGUtPm1fdXJsLnN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpLmxlYWtSZWYoKTsKLX0KLQot
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJlYW1S
ZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0lu
Zm8pCi17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2Nr
ZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIC8vIFdv
cmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3Mz4uIEtlZXBpbmcgdGhpcyBiZWxv
dyB0aGUgYXNzZXJ0aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIgc3RlcHMgdG8gcmVwcm9kdWNlIHRo
aXMuCi0gICAgaWYgKCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkKLSAgICAgICAgcmV0dXJuOwotCi0j
aWYgUExBVEZPUk0oV0lOKQotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3Rv
cihoYW5kbGUpOwotICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFsmXSB7Ci0gICAgICAgIGlm
IChoYW5kbGUtPm1fcmVhZFN0cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNh
bGxiYWNrKHR5cGUpOwotICAgIH0pOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOwotI2VuZGlmCi19Ci0KLXZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVTdHJlYW1S
ZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0lu
Zm8pCi17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2Nr
ZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dyaXRlU3RyZWFtLmdldCgpKTsKLSAgICAvLyBU
aGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBwcmFjdGljZSwgeWV0IGl0IHNlZW1zIGxpa2Ug
aXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQgc3RyZWFtIGNhbGxiYWNrLgotICAg
IGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdG9yKGhhbmRs
ZSk7Ci0gICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZdIHsKLSAgICAgICAgaWYgKGhhbmRs
ZS0+bV93cml0ZVN0cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+d3JpdGVTdHJlYW1DYWxsYmFj
ayh0eXBlKTsKLSAgICB9KTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBoYW5kbGUtPndyaXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSB0
eXBlKQotewotICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE5vbmU6
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50T3BlbkNvbXBsZXRlZDoK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJs
ZTogewotICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gV2FpdGluZ0ZvckNyZWRl
bnRpYWxzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX2Nvbm5lY3RpbmdT
dWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ29ubmVjdCkgewotICAgICAgICAgICAgaWYgKG1fY29ubmVj
dGlvblR5cGUgPT0gQ09OTkVDVFByb3h5KSB7Ci0gICAgICAgICAgICAgICAgUmV0YWluUHRyPENG
SFRUUE1lc3NhZ2VSZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9wdENGKHdrQ29weUNPTk5FQ1RQcm94
eVJlc3BvbnNlKG1fcmVhZFN0cmVhbS5nZXQoKSwgbV9odHRwc1VSTC5nZXQoKSwgbV9wcm94eUhv
c3QuZ2V0KCksIG1fcHJveHlQb3J0LmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm94
eVJlc3BvbnNlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAg
ICBDRkluZGV4IHByb3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3Rh
dHVzQ29kZShwcm94eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBy
b3h5UmVzcG9uc2VDb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyMDA6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0MDc6Ci0gICAgICAgICAgICAgICAgICAgIGFk
ZENPTk5FQ1RDcmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9y
KHN0YXRpY19jYXN0PGludD4ocHJveHlSZXNwb25zZUNvZGUpLCBtX3VybC5zdHJpbmcoKSwgIlBy
b3h5IGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCB1bmV4cGVjdGVkIHJlc3Bv
bnNlIGNvZGUiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwotICAgICAgICAg
ICAgbV9zdGF0ZSA9IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3Ry
ZWFtKCp0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdl
IGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2Ug
dGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsKLSAgICAgICAg
QVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAgICAgICAgQ0ZJ
bmRleCBsZW5ndGg7Ci0gICAgICAgIFVJbnQ4IGxvY2FsQnVmZmVyWzEwMjRdOyAvLyBVc2VkIGlm
IENGUmVhZFN0cmVhbUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1cm4gYW55dGhpbmcuCi0gICAgICAg
IGNvbnN0IFVJbnQ4KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRCdWZmZXIobV9yZWFkU3RyZWFtLmdl
dCgpLCAwLCAmbGVuZ3RoKTsKLSAgICAgICAgaWYgKCFwdHIpIHsKLSAgICAgICAgICAgIGxlbmd0
aCA9IENGUmVhZFN0cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdldCgpLCBsb2NhbEJ1ZmZlciwgc2l6
ZW9mKGxvY2FsQnVmZmVyKSk7Ci0gICAgICAgICAgICBwdHIgPSBsb2NhbEJ1ZmZlcjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBsZW5ndGgpOwotCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZl
bnRFcnJvck9jY3VycmVkOiB7Ci0gICAgICAgIFJldGFpblB0cjxDRkVycm9yUmVmPiBlcnJvciA9
IGFkb3B0Q0YoQ0ZSZWFkU3RyZWFtQ29weUVycm9yKG1fcmVhZFN0cmVhbS5nZXQoKSkpOwotICAg
ICAgICByZXBvcnRFcnJvclRvQ2xpZW50KGVycm9yLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIHBs
YXRmb3JtQ2xvc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSkK
LXsKLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnROb25lOgotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50SGFzQnl0ZXNBdmFpbGFibGU6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBr
Q0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOiB7Ci0gICAgICAgIC8vIENhbiBiZSBmYWxzZSBp
ZiByZWFkIHN0cmVhbSBjYWxsYmFjayBqdXN0IGRlY2lkZWQgdG8gcmV0cnkgYSBDT05ORUNUIHdp
dGggY3JlZGVudGlhbHMuCi0gICAgICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVz
KG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ3JlZGVudGlhbHMpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IFdhaXRp
bmdGb3JDb25uZWN0KSB7Ci0gICAgICAgICAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9PSBDT05O
RUNUUHJveHkpIHsKLSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJlZj4g
cHJveHlSZXNwb25zZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UobV9yZWFk
U3RyZWFtLmdldCgpLCBtX2h0dHBzVVJMLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94
eVBvcnQuZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3h5UmVzcG9uc2UpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIC8vIERvbid0IHdyaXRl
IGFueXRoaW5nIHVudGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGhhcyBkZWFsdCB3aXRoIENPTk5F
Q1QgY3JlZGVudGlhbHMuCi0gICAgICAgICAgICAgICAgLy8gVGhlIG9yZGVyIG9mIGNhbGxiYWNr
cyBpcyBub3QgZGVmaW5lZCwgc28gdGhpcyBjYW4gYmUgY2FsbGVkIGJlZm9yZSByZWFkU3RyZWFt
Q2FsbGJhY2sncyBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlLgotICAgICAgICAgICAg
ICAgIENGSW5kZXggcHJveHlSZXNwb25zZUNvZGUgPSBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VT
dGF0dXNDb2RlKHByb3h5UmVzcG9uc2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChwcm94
eVJlc3BvbnNlQ29kZSAhPSAyMDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwot
ICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVu
U29ja2V0U3RyZWFtKCp0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxz
ZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291
bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsK
LSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAg
ICAgICAgc2VuZFBlbmRpbmdEYXRhKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6IHsKLSAgICAgICAgUmV0YWluUHRyPENGRXJy
b3JSZWY+IGVycm9yID0gYWRvcHRDRihDRldyaXRlU3RyZWFtQ29weUVycm9yKG1fd3JpdGVTdHJl
YW0uZ2V0KCkpKTsKLSAgICAgICAgcmVwb3J0RXJyb3JUb0NsaWVudChlcnJvci5nZXQoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVuZEVuY291bnRl
cmVkOgotICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3ZSBoYW5kbGUgY2xvc2luZyBpbiBy
ZWFkIGNhbGxiYWNrLCBidXQgdGhlc2UgY2FuIGNvbWUgaW5kZXBlbmRlbnRseSAoZS5nLiBhIHNl
cnZlciBjYW4gc3RvcCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNlbmRpbmcgZGF0YSkuCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJv
clRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCi17Ci0gICAgQ0ZJbmRleCBlcnJvckNvZGUgPSBD
RkVycm9yR2V0Q29kZShlcnJvcik7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotCi0jaWYgUExB
VEZPUk0oTUFDKQotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1k
ZWNsYXJhdGlvbnMiCi0jZW5kaWYKLQotICAgIGlmIChDRkVxdWFsKENGRXJyb3JHZXREb21haW4o
ZXJyb3IpLCBrQ0ZFcnJvckRvbWFpbk9TU3RhdHVzKSkgewotICAgICAgICBjb25zdCBjaGFyKiBk
ZXNjcmlwdGlvbk9TU3RhdHVzID0gR2V0TWFjT1NTdGF0dXNDb21tZW50U3RyaW5nKHN0YXRpY19j
YXN0PE9TU3RhdHVzPihlcnJvckNvZGUpKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uT1NTdGF0
dXMgJiYgZGVzY3JpcHRpb25PU1N0YXR1c1swXSAhPSAnXDAnKQotICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSAiT1NTdGF0dXMgRXJyb3IgIiArIFN0cmluZzo6bnVtYmVyKGVycm9yQ29kZSkgKyAi
OiAiICsgZGVzY3JpcHRpb25PU1N0YXR1czsKLSAgICB9Ci0KLSNpZiBDT01QSUxFUihDTEFORykK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIGlm
IChkZXNjcmlwdGlvbi5pc051bGwoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGRlc2NyaXB0aW9uQ0YgPSBhZG9wdENGKENGRXJyb3JDb3B5RGVzY3JpcHRpb24oZXJyb3IpKTsK
LSAgICAgICAgZGVzY3JpcHRpb24gPSBTdHJpbmcoZGVzY3JpcHRpb25DRi5nZXQoKSk7Ci0gICAg
fQotCi0gICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFt
RXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX3VybC5zdHJpbmcoKSwgZGVzY3Jp
cHRpb24pKTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkK
LXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkdG9yIiwgdGhpcyk7
Ci0KLSAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7Ci19Ci0KLWludCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewot
ICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBDRldyaXRlU3RyZWFtV3JpdGUobV93
cml0ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBs
ZW5ndGgpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCi17
Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIs
IHRoaXMpOwotCi0gICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkgCi0gICAgICAgIHJlbW92ZVBB
Q1J1bkxvb3BTb3VyY2UoKTsKLQotICAgIEFTU0VSVCghbV9yZWFkU3RyZWFtID09ICFtX3dyaXRl
U3RyZWFtKTsKLSAgICBpZiAoIW1fcmVhZFN0cmVhbSkgewotICAgICAgICBpZiAobV9jb25uZWN0
aW5nU3Vic3RhdGUgPT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1YnN0YXRlID09IEV4ZWN1dGluZ1BB
Q0ZpbGUpCi0gICAgICAgICAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgQ0ZSZWFk
U3RyZWFtVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgbG9hZGVyUnVu
TG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAgIENGV3JpdGVTdHJlYW1VbnNjaGVk
dWxlRnJvbVJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZS
dW5Mb29wRGVmYXVsdE1vZGUpOwotI2Vsc2UKLSAgICBDRlJlYWRTdHJlYW1VbnNjaGVkdWxlRnJv
bVJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1
bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVVuc2NoZWR1bGVGcm9tUnVuTG9v
cChtX3dyaXRlU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BD
b21tb25Nb2Rlcyk7Ci0jZW5kaWYKLQotICAgIENGUmVhZFN0cmVhbUNsb3NlKG1fcmVhZFN0cmVh
bS5nZXQoKSk7Ci0gICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOwot
ICAgIAotICAgIG1fcmVhZFN0cmVhbSA9IDA7Ci0gICAgbV93cml0ZVN0cmVhbSA9IDA7Ci0KLSAg
ICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXVuc2lnbmVkIHNo
b3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKHVuc2lnbmVk
IHNob3J0IHVybFBvcnQgPSBtX3VybC5wb3J0KCkpCi0gICAgICAgIHJldHVybiB1cmxQb3J0Owot
ICAgIGlmIChzaG91bGRVc2VTU0woKSkKLSAgICAgICAgcmV0dXJuIDQ0MzsKLSAgICByZXR1cm4g
ODA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2Vzc2lvbklELmgi
CisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgX19DRkhUVFBNZXNzYWdlKiBDRkhUVFBNZXNzYWdlUmVmOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENyZWRlbnRpYWw7CitjbGFzcyBQcm90ZWN0aW9uU3BhY2U7Citj
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJs
aWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50LCBzZXNzaW9uSUQpKTsgfQorCisgICAg
dmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBp
bnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNsb3NlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTb2NrZXRTdHJl
YW1IYW5kbGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiwgU2Vzc2lvbklE
KTsKKyAgICB2b2lkIGNyZWF0ZVN0cmVhbXMoKTsKKyAgICB2b2lkIHNjaGVkdWxlU3RyZWFtcygp
OworICAgIHZvaWQgY2hvb3NlUHJveHkoKTsKKyAgICB2b2lkIGNob29zZVByb3h5RnJvbUFycmF5
KENGQXJyYXlSZWYpOworICAgIHZvaWQgZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYpOworICAg
IHZvaWQgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BT
b3VyY2VSZWY+IG1fcGFjUnVuTG9vcFNvdXJjZTsKKyAgICBzdGF0aWMgdm9pZCBwYWNFeGVjdXRp
b25DYWxsYmFjayh2b2lkKiBjbGllbnQsIENGQXJyYXlSZWYgcHJveHlMaXN0LCBDRkVycm9yUmVm
IGVycm9yKTsKKyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0
aW9uKHZvaWQqKTsKKworICAgIGJvb2wgc2hvdWxkVXNlU1NMKCkgY29uc3QgeyByZXR1cm4gbV91
cmwucHJvdG9jb2xJcygid3NzIik7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0KCkgY29uc3Q7
CisKKyAgICB2b2lkIGFkZENPTk5FQ1RDcmVkZW50aWFscyhDRkhUVFBNZXNzYWdlUmVmIHJlc3Bv
bnNlKTsKKworICAgIHN0YXRpYyB2b2lkKiByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCop
OworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCopOworICAg
IHN0YXRpYyBDRlN0cmluZ1JlZiBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKik7CisgICAg
c3RhdGljIHZvaWQgcmVhZFN0cmVhbUNhbGxiYWNrKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJlYW1F
dmVudFR5cGUsIHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZVN0cmVhbUNhbGxiYWNrKENG
V3JpdGVTdHJlYW1SZWYsIENGU3RyZWFtRXZlbnRUeXBlLCB2b2lkKik7CisgICAgdm9pZCByZWFk
U3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUpOworICAgIHZvaWQgd3JpdGVTdHJlYW1D
YWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSk7CisKKyAgICB2b2lkIHJlcG9ydEVycm9yVG9DbGll
bnQoQ0ZFcnJvclJlZik7CisKKyAgICBib29sIGdldFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRp
YWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIFN0cmluZyYgbG9naW4sIFN0cmluZyYgcGFzc3dv
cmQpOworCisgICAgZW51bSBDb25uZWN0aW5nU3Vic3RhdGUgeyBOZXcsIEV4ZWN1dGluZ1BBQ0Zp
bGUsIFdhaXRpbmdGb3JDcmVkZW50aWFscywgV2FpdGluZ0ZvckNvbm5lY3QsIENvbm5lY3RlZCB9
OworICAgIENvbm5lY3RpbmdTdWJzdGF0ZSBtX2Nvbm5lY3RpbmdTdWJzdGF0ZTsKKworICAgIGVu
dW0gQ29ubmVjdGlvblR5cGUgeyBVbmtub3duLCBEaXJlY3QsIFNPQ0tTUHJveHksIENPTk5FQ1RQ
cm94eSB9OworICAgIENvbm5lY3Rpb25UeXBlIG1fY29ubmVjdGlvblR5cGU7CisgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBtX3Byb3h5SG9zdDsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+
IG1fcHJveHlQb3J0OworCisgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VSZWY+IG1fcHJveHlS
ZXNwb25zZU1lc3NhZ2U7CisgICAgYm9vbCBtX3NlbnRTdG9yZWRDcmVkZW50aWFsczsKKyAgICBS
ZXRhaW5QdHI8Q0ZSZWFkU3RyZWFtUmVmPiBtX3JlYWRTdHJlYW07CisgICAgUmV0YWluUHRyPENG
V3JpdGVTdHJlYW1SZWY+IG1fd3JpdGVTdHJlYW07CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+
IG1faHR0cHNVUkw7IC8vIHdzKHMpOiByZXBsYWNlZCB3aXRoIGh0dHBzOgorICAgIFNlc3Npb25J
RCBtX3Nlc3Npb25JRDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0
cmVhbUhhbmRsZUltcGwuaAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgi
Ci0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX19DRkhUVFBNZXNzYWdl
KiBDRkhUVFBNZXNzYWdlUmVmOwogCkBAIC00NCwxNyArNDMsMTcgQEAgY2xhc3MgQ3JlZGVudGlh
bDsKIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dDsKIAotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsK
K2NsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNv
bnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lvbklE
IHNlc3Npb25JRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJs
LCBjbGllbnQsIHNlc3Npb25JRCkpOyB9CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5k
bGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGll
bnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKSk7IH0KIAotICAgIHZpcnR1YWwg
flNvY2tldFN0cmVhbUhhbmRsZSgpOworICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZUlt
cGwoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmLCBTZXNzaW9uSUQpOworICAgIFdFQkNPUkVfRVhQT1JUIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiwgU2Vzc2lvbklEKTsKICAgICB2b2lkIGNyZWF0ZVN0cmVhbXMoKTsKICAgICB2b2lkIHNjaGVk
dWxlU3RyZWFtcygpOwogICAgIHZvaWQgY2hvb3NlUHJveHkoKTsKQEAgLTYyLDcgKzYxLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVQQUNGaWxlVVJMKENGVVJMUmVmKTsKICAgICB2b2lk
IHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wU291cmNl
UmVmPiBtX3BhY1J1bkxvb3BTb3VyY2U7Ci0gICAgc3RhdGljIHZvaWQgcGFjRXhlY3V0aW9uQ2Fs
bGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZiBlcnJv
cik7CisgICAgc3RhdGljIHZvaWQgcGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBD
RkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZik7CiAgICAgc3RhdGljIENGU3RyaW5nUmVm
IGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbih2b2lkKik7CiAKICAgICBib29sIHNob3VsZFVz
ZVNTTCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLnByb3RvY29sSXMoIndzcyIpOyB9CkBAIC05OSw0
ICs5OCw0IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogfTsKIAotfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5j
cHA6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRT
dHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgi
CisKKyNpbmNsdWRlICJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2Uu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmgiCisjaW5jbHVkZSAiUHJvdGVjdGlvblNwYWNlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
TmV0d29yay5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiTG9hZGVy
UnVuTG9vcENGLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2luY2x1ZGUg
PFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbHNlCisj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9S
TShJT1MpIHx8IFBMQVRGT1JNKE1BQykKK2V4dGVybiAiQyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tD
RlN0cmVhbVNvY2tldFNldE5vRGVsYXk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2ltcG9ydCA8Q0ZOZXR3b3JrU1BJLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisg
ICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQorICAgICwgbV9jb25uZWN0
aW5nU3Vic3RhdGUoTmV3KQorICAgICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQorICAgICwg
bV9zZW50U3RvcmVkQ3JlZGVudGlhbHMoZmFsc2UpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9u
SUQpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVu
dCAlcCIsIHRoaXMsICZtX2NsaWVudCk7CisKKyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoIndz
IikgfHwgdXJsLnByb3RvY29sSXMoIndzcyIpKTsKKworICAgIFVSTCBodHRwc1VSTChVUkwoKSwg
Imh0dHBzOi8vIiArIG1fdXJsLmhvc3QoKSk7CisgICAgbV9odHRwc1VSTCA9IGh0dHBzVVJMLmNy
ZWF0ZUNGVVJMKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyBEb24ndCBjaGVjayBm
b3IgSFNUUyB2aW9sYXRpb24gZm9yIGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZQorICAgIC8vIEhT
VFMgc3RhdGUgc2hvdWxkIG5vdCB0cmFuc2ZlciBiZXR3ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUg
YnJvd3NpbmcuCisgICAgaWYgKHVybC5wcm90b2NvbElzKCJ3cyIpCisgICAgICAgICYmICFzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKQorICAgICAgICAmJiBfQ0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0
V2l0aFNlc3Npb24obV9odHRwc1VSTC5nZXQoKSwgbnVsbHB0cikpIHsKKyAgICAgICAgbV9jbGll
bnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwu
c3RyaW5nKCksICJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRl
cyBIVFRQIFN0cmljdCBUcmFuc3BvcnQgU2VjdXJpdHkuIikpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmCisKKyAgICBjcmVhdGVTdHJlYW1zKCk7CisgICAgQVNTRVJUKCFtX3JlYWRT
dHJlYW0gPT0gIW1fd3JpdGVTdHJlYW0pOworICAgIGlmICghbV9yZWFkU3RyZWFtKSAvLyBEb2lu
ZyBhc3luY2hyb25vdXMgUEFDIGZpbGUgcHJvY2Vzc2luZywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0
ZWQgbGF0ZXIuCisgICAgICAgIHJldHVybjsKKworICAgIHNjaGVkdWxlU3RyZWFtcygpOworfQor
Cit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVTdHJlYW1zKCkKK3sKKyAgICBBU1NF
UlQobV9yZWFkU3RyZWFtKTsKKyAgICBBU1NFUlQobV93cml0ZVN0cmVhbSk7CisKKyAgICBDRlN0
cmVhbUNsaWVudENvbnRleHQgY2xpZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0YWluU29ja2V0
U3RyZWFtSGFuZGxlLCByZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNj
cmlwdGlvbiB9OworICAgIC8vIEZJWE1FOiBQYXNzIHNwZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRl
cmVzdGVkIGluIGluc3RlYWQgb2YgLTEuCisgICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVh
ZFN0cmVhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Q0ZPcHRpb25GbGFncz4oLTEpLCByZWFkU3RyZWFt
Q2FsbGJhY2ssICZjbGllbnRDb250ZXh0KTsKKyAgICBDRldyaXRlU3RyZWFtU2V0Q2xpZW50KG1f
d3JpdGVTdHJlYW0uZ2V0KCksIHN0YXRpY19jYXN0PENGT3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVT
dHJlYW1DYWxsYmFjaywgJmNsaWVudENvbnRleHQpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAg
IENGUmVhZFN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBsb2Fk
ZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgQ0ZXcml0ZVN0cmVhbVNj
aGVkdWxlV2l0aFJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBr
Q0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdp
dGhSdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGV3JpdGVTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29w
KG1fd3JpdGVTdHJlYW0uZ2V0KCksIENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcENv
bW1vbk1vZGVzKTsKKyNlbmRpZgorCisgICAgQ0ZSZWFkU3RyZWFtT3BlbihtX3JlYWRTdHJlYW0u
Z2V0KCkpOworICAgIENGV3JpdGVTdHJlYW1PcGVuKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOworCisg
ICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkKKyAgICAgICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJj
ZSgpOworCisgICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKK30K
Kwordm9pZCogU29ja2V0U3RyZWFtSGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9p
ZCogaW5mbykKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIGhhbmRsZS0+cmVmKCk7CisgICAgcmV0
dXJuIGhhbmRsZTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRT
dHJlYW1IYW5kbGUodm9pZCogaW5mbykKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRs
ZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIGhhbmRsZS0+
ZGVyZWYoKTsKK30KKworQ0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhl
Y3V0aW9uRGVzY3JpcHRpb24odm9pZCopCit7CisgICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQg
cHJveHkgUEFDIGZpbGUgZXhlY3V0aW9uIik7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxPbk1haW5U
aHJlYWRBbmRXYWl0KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCit7CisgICAgaWYg
KGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBMb2NrIG11dGV4OworICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJs
ZTsKKworICAgIGJvb2wgaXNGaW5pc2hlZCA9IGZhbHNlOworCisgICAgY2FsbE9uTWFpblRocmVh
ZChbJl0geworICAgICAgICBmdW5jdGlvbigpOworCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG11dGV4KTsKKyAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7CisgICAgICAgIGNv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOworICAgIH0pOworCisgICAgc3RkOjp1bmlxdWVf
bG9jazxMb2NrPiBsb2NrKG11dGV4KTsKKyAgICBjb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ss
IFsmXSB7IHJldHVybiBpc0ZpbmlzaGVkOyB9KTsKK30KKworc3RydWN0IE1haW5UaHJlYWRQQUND
YWxsYmFja0luZm8geworICAgIE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFt
SGFuZGxlKiBoYW5kbGUsIENGQXJyYXlSZWYgcHJveHlMaXN0KSA6IGhhbmRsZShoYW5kbGUpLCBw
cm94eUxpc3QocHJveHlMaXN0KSB7IH0KKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBo
YW5kbGU7CisgICAgQ0ZBcnJheVJlZiBwcm94eUxpc3Q7Cit9OworCit2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZTo6cGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHBy
b3h5TGlzdCwgQ0ZFcnJvclJlZikKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGNsaWVudCk7CisKKyAgICBjYWxsT25N
YWluVGhyZWFkQW5kV2FpdChbJl0geworICAgICAgICBBU1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3Rp
bmdTdWJzdGF0ZSA9PSBFeGVjdXRpbmdQQUNGaWxlKTsKKyAgICAgICAgLy8gVGhpcyB0aW1lLCB0
aGUgYXJyYXkgd29uJ3QgaGF2ZSBQQUMgYXMgYSBmaXJzdCBlbnRyeS4KKyAgICAgICAgaWYgKGhh
bmRsZS0+bV9zdGF0ZSAhPSBDb25uZWN0aW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBoYW5kbGUtPmNob29zZVByb3h5RnJvbUFycmF5KHByb3h5TGlzdCk7CisgICAgICAgIGhhbmRs
ZS0+Y3JlYXRlU3RyZWFtcygpOworICAgICAgICBoYW5kbGUtPnNjaGVkdWxlU3RyZWFtcygpOwor
ICAgIH0pOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwo
Q0ZVUkxSZWYgcGFjRmlsZVVSTCkKK3sKKyAgICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0
eSBwcm94eSBhcnJheSBmb3IgV2ViU29ja2V0IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgor
ICAgIENGU3RyZWFtQ2xpZW50Q29udGV4dCBjbGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRh
aW5Tb2NrZXRTdHJlYW1IYW5kbGUsIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNF
eGVjdXRpb25EZXNjcmlwdGlvbiB9OworICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0Yo
Q0ZOZXR3b3JrRXhlY3V0ZVByb3h5QXV0b0NvbmZpZ3VyYXRpb25VUkwocGFjRmlsZVVSTCwgbV9o
dHRwc1VSTC5nZXQoKSwgcGFjRXhlY3V0aW9uQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KSk7Cisj
aWYgUExBVEZPUk0oV0lOKQorICAgIENGUnVuTG9vcEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wKCks
IG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyNlbHNl
CisgICAgQ0ZSdW5Mb29wQWRkU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5M
b29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworI2VuZGlmCisgICAgbV9j
b25uZWN0aW5nU3Vic3RhdGUgPSBFeGVjdXRpbmdQQUNGaWxlOworfQorCit2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpCit7CisgICAgQVNTRVJUKG1fcGFj
UnVuTG9vcFNvdXJjZSk7CisKKyAgICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVu
TG9vcFNvdXJjZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIENGUnVuTG9vcFJlbW92
ZVNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVu
TG9vcERlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVu
TG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29t
bW9uTW9kZXMpOworI2VuZGlmCisgICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKK30KKwordm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5KCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBwcm94eURpY3Rpb25hcnkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlTeXN0
ZW1Qcm94eVNldHRpbmdzKCkpOworCisgICAgLy8gU09DS1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNU
KSBwcm94aWVzIGFyZSBzdXBwb3J0ZWQuCisgICAgLy8gV2ViU29ja2V0IHByb3RvY29sIHJlbGll
cyBvbiBoYW5kc2hha2UgYmVpbmcgdHJhbnNmZXJyZWQgdW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEg
cHJveHkgdGhhdCB3aWxsIG5vdCBtb2RpZnkgaGVhZGVycy4KKyAgICAvLyBTaW5jZSBIVFRQIHBy
b3hpZXMgbXVzdCBhZGQgVmlhIGhlYWRlcnMsIHRoZXkgYXJlIGhpZ2hseSB1bmxpa2VseSB0byB3
b3JrLgorICAgIC8vIE1hbnkgQ09OTkVDVCBwcm94aWVzIGxpbWl0IGNvbm5lY3Rpdml0eSB0byBw
b3J0IDQ0Mywgc28gd2UgcHJlZmVyIFNPQ0tTLCBpZiBjb25maWd1cmVkLgorCisgICAgaWYgKCFw
cm94eURpY3Rpb25hcnkpIHsKKyAgICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJM
IGRvZXNuJ3Qga25vdyBhYm91dCBXZWJTb2NrZXQgc2NoZW1lcywgc28gcHJldGVuZCB0byB1c2Ug
aHR0cC4KKyAgICAvLyBBbHdheXMgdXNlICJodHRwcyIgdG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4g
cmVzdWx0IC0gd2UnbGwgdHJ5IHRvIHVzZSB0aG9zZSBmb3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFu
eSBhcmUgY29uZmlndXJlZCB0byByZWplY3QgY29ubmVjdGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhh
biA0NDMuCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHByb3h5QXJyYXkgPSBhZG9wdENGKENG
TmV0d29ya0NvcHlQcm94aWVzRm9yVVJMKG1faHR0cHNVUkwuZ2V0KCksIHByb3h5RGljdGlvbmFy
eS5nZXQoKSkpOworCisgICAgY2hvb3NlUHJveHlGcm9tQXJyYXkocHJveHlBcnJheS5nZXQoKSk7
Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94eUZyb21BcnJheShDRkFy
cmF5UmVmIHByb3h5QXJyYXkpCit7CisgICAgaWYgKCFwcm94eUFycmF5KSB7CisgICAgICAgIG1f
Y29ubmVjdGlvblR5cGUgPSBEaXJlY3Q7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBD
RkluZGV4IHByb3h5QXJyYXlDb3VudCA9IENGQXJyYXlHZXRDb3VudChwcm94eUFycmF5KTsKKwor
ICAgIC8vIFBBQyBpcyBhbHdheXMgdGhlIGZpcnN0IGVudHJ5LCBpZiBwcmVzZW50LgorICAgIGlm
IChwcm94eUFycmF5Q291bnQpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9
IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwcm94
eUFycmF5LCAwKSk7CisgICAgICAgIENGVHlwZVJlZiBwcm94eVR5cGUgPSBDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwcm94eUluZm8sIGtDRlByb3h5VHlwZUtleSk7CisgICAgICAgIGlmIChwcm94eVR5
cGUgJiYgQ0ZHZXRUeXBlSUQocHJveHlUeXBlKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Cisg
ICAgICAgICAgICBpZiAoQ0ZFcXVhbChwcm94eVR5cGUsIGtDRlByb3h5VHlwZUF1dG9Db25maWd1
cmF0aW9uVVJMKSkgeworICAgICAgICAgICAgICAgIENGVHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eUF1dG9Db25maWd1cmF0aW9uVVJM
S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAocGFjRmlsZVVSTCAmJiBDRkdldFR5cGVJRChwYWNG
aWxlVVJMKSA9PSBDRlVSTEdldFR5cGVJRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1
dGVQQUNGaWxlVVJMKHN0YXRpY19jYXN0PENGVVJMUmVmPihwYWNGaWxlVVJMKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBDRkRpY3Rpb25hcnlSZWYgY2hvc2VuUHJveHkgPSAwOwor
ICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHByb3h5QXJyYXlDb3VudDsgKytpKSB7CisgICAg
ICAgIENGRGljdGlvbmFyeVJlZiBwcm94eUluZm8gPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocHJveHlBcnJheSwgaSkpOworICAgICAgICBDRlR5
cGVSZWYgcHJveHlUeXBlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94
eVR5cGVLZXkpOworICAgICAgICBpZiAocHJveHlUeXBlICYmIENGR2V0VHlwZUlEKHByb3h5VHlw
ZSkgPT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgaWYgKENGRXF1YWwocHJv
eHlUeXBlLCBrQ0ZQcm94eVR5cGVTT0NLUykpIHsKKyAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rp
b25UeXBlID0gU09DS1NQcm94eTsKKyAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5
SW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChDRkVxdWFsKHByb3h5VHlwZSwga0NGUHJveHlUeXBlSFRUUFMpKSB7CisgICAgICAgICAg
ICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IENPTk5FQ1RQcm94eTsKKyAgICAgICAgICAgICAgICBj
aG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKKyAgICAgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcg
Zm9yIHByb3hpZXMsIGFzIGEgU09DS1Mgb25lIGlzIHByZWZlcmFibGUuCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2hvc2VuUHJveHkpIHsKKyAgICAgICAgQVNT
RVJUKG1fY29ubmVjdGlvblR5cGUgIT0gVW5rbm93bik7CisgICAgICAgIEFTU0VSVChtX2Nvbm5l
Y3Rpb25UeXBlICE9IERpcmVjdCk7CisKKyAgICAgICAgQ0ZUeXBlUmVmIHByb3h5SG9zdCA9IENG
RGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eUhvc3ROYW1lS2V5KTsKKyAg
ICAgICAgQ0ZUeXBlUmVmIHByb3h5UG9ydCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblBy
b3h5LCBrQ0ZQcm94eVBvcnROdW1iZXJLZXkpOworCisgICAgICAgIGlmIChwcm94eUhvc3QgJiYg
Q0ZHZXRUeXBlSUQocHJveHlIb3N0KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpICYmIHByb3h5UG9y
dCAmJiBDRkdldFR5cGVJRChwcm94eVBvcnQpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAg
ICAgICAgICAgIG1fcHJveHlIb3N0ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9z
dCk7CisgICAgICAgICAgICBtX3Byb3h5UG9ydCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihw
cm94eVBvcnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
bV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKK30KKworCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlU3RyZWFtcygpCit7CisgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gVW5rbm93
bikKKyAgICAgICAgY2hvb3NlUHJveHkoKTsKKworICAgIC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93
biwgdGhlbiB3ZSdyZSByZXNvbHZpbmcgYSBQQUMgZmlsZSBhc3luY2hyb25vdXNseS4KKyAgICBp
ZiAobV9jb25uZWN0aW9uVHlwZSA9PSBVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvc3QgPSBtX3VybC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmco
KTsKKworICAgIC8vIENyZWF0aW5nIHN0cmVhbXMgdG8gZmluYWwgZGVzdGluYXRpb24sIG5vdCB0
byBwcm94eS4KKyAgICBDRlJlYWRTdHJlYW1SZWYgcmVhZFN0cmVhbSA9IDA7CisgICAgQ0ZXcml0
ZVN0cmVhbVJlZiB3cml0ZVN0cmVhbSA9IDA7CisgICAgQ0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNv
Y2tldFRvSG9zdCgwLCBob3N0LmdldCgpLCBwb3J0KCksICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJl
YW0pOworI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKQorICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS8xMjg1NTU4Nz4gX2tDRlN0cmVhbVNvY2tldFNldE5vRGVsYXkgaXMgbm90IGV4cG9y
dGVkIG9uIFdpbmRvd3MKKyAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkod3JpdGVTdHJlYW0s
IF9rQ0ZTdHJlYW1Tb2NrZXRTZXROb0RlbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisjZW5kaWYKKwor
ICAgIG1fcmVhZFN0cmVhbSA9IGFkb3B0Q0YocmVhZFN0cmVhbSk7CisgICAgbV93cml0ZVN0cmVh
bSA9IGFkb3B0Q0Yod3JpdGVTdHJlYW0pOworCisgICAgc3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBl
KSB7CisgICAgY2FzZSBVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEaXJlY3Q6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U09DS1NQcm94eTogeworICAgICAgICAvLyBGSVhNRTogU09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxl
bmdlLXJlc3BvbnNlLCBzaG91bGQgd2UgdHJ5IHRvIGFwcGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5
Y2hhaW4gcmlnaHQgYXdheT8KKyAgICAgICAgLy8gQnV0IFNPQ0tTNSBjcmVkZW50aWFscyBkb24n
dCB3b3JrIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3
NzY2OTg+LgorICAgICAgICBjb25zdCB2b2lkKiBwcm94eUtleXNbXSA9IHsga0NGU3RyZWFtUHJv
cGVydHlTT0NLU1Byb3h5SG9zdCwga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5UG9ydCB9Owor
ICAgICAgICBjb25zdCB2b2lkKiBwcm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwg
bV9wcm94eVBvcnQuZ2V0KCkgfTsKKyAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
Y29ubmVjdERpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtl
eXMsIHByb3h5VmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKHByb3h5S2V5cyksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KyAgICAgICAgQ0ZSZWFkU3RyZWFtU2V0UHJvcGVydHkobV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZT
dHJlYW1Qcm9wZXJ0eVNPQ0tTUHJveHksIGNvbm5lY3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBjYXNlIENPTk5FQ1RQcm94eToKKyAgICAgICAgd2tT
ZXRDT05ORUNUUHJveHlGb3JTdHJlYW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5n
ZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoc2hvdWxkVXNlU1NMKCkpIHsKKyAgICAgICAgQ0ZCb29sZWFuUmVmIHZhbGlkYXRlQ2VydGlm
aWNhdGVDaGFpbiA9IFNldHRpbmdzOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9v
bGVhbkZhbHNlIDoga0NGQm9vbGVhblRydWU7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9
IHsga0NGU3RyZWFtU1NMUGVlck5hbWUsIGtDRlN0cmVhbVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xW
YWxpZGF0ZXNDZXJ0aWZpY2F0ZUNoYWluIH07CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1td
ID0geyBob3N0LmdldCgpLCBrQ0ZTdHJlYW1Tb2NrZXRTZWN1cml0eUxldmVsTmVnb3RpYXRlZFNT
TCwgdmFsaWRhdGVDZXJ0aWZpY2F0ZUNoYWluIH07CisgICAgICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHNldHRpbmdzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywg
dmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIENGUmVh
ZFN0cmVhbVNldFByb3BlcnR5KG1fcmVhZFN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlT
U0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOworICAgICAgICBDRldyaXRlU3RyZWFtU2V0UHJv
cGVydHkobV93cml0ZVN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywg
c2V0dGluZ3MuZ2V0KCkpOworICAgIH0KK30KKworYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6Omdl
dFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJv
dGVjdGlvblNwYWNlLCBTdHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIC8v
IEZJWE1FICg8cmRhcjovL3Byb2JsZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hv
dWxkIGJlIHJldHJpZXZlZCBmcm9tIEF1dGhCcm9rZXJBZ2VudC4KKworICAgIC8vIFRyeSBzeXN0
ZW0gY3JlZGVudGlhbCBzdG9yYWdlIGZpcnN0LCBtYXRjaGluZyBIVFRQIGJlaGF2aW9yIChDRk5l
dHdvcmsgb25seSBhc2tzIHRoZSBjbGllbnQgZm9yIHBhc3N3b3JkIGlmIGl0IGNvdWxkbid0IGZp
bmQgaXQgaW4gS2V5Y2hhaW4pLgorICAgIENyZWRlbnRpYWwgc3RvcmVkQ3JlZGVudGlhbDsKKyAg
ICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3Jh
Z2VTZXNzaW9uKG1fc2Vzc2lvbklEKSkgeworICAgICAgICBzdG9yZWRDcmVkZW50aWFsID0gc3Rv
cmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdl
KHByb3RlY3Rpb25TcGFjZSk7CisgICAgICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHN0b3JlZENyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVu
dGlhbFN0b3JhZ2UoKS5nZXQocHJvdGVjdGlvblNwYWNlKTsKKyAgICB9CisKKyAgICBpZiAoc3Rv
cmVkQ3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGxv
Z2luID0gc3RvcmVkQ3JlZGVudGlhbC51c2VyKCk7CisgICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVk
ZW50aWFsLnBhc3N3b3JkKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1
dGhlbnRpY2F0aW9uTWV0aG9kKENGU3RyaW5nUmVmIG1ldGhvZCkKK3sKKyAgICBpZiAoQ0ZFcXVh
bChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZUJhc2ljKSkKKyAgICAgICAgcmV0
dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOworICAgIGlm
IChDRkVxdWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lRGlnZXN0KSkKKyAg
ICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2Vz
dDsKKyAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5U
TE0pKQorICAgICAgICByZXR1cm4gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVO
VExNOworICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1l
TmVnb3RpYXRlKSkKKyAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lTmVnb3RpYXRlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQ
cm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd247Cit9CisKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjphZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBw
cm94eVJlc3BvbnNlKQoreworICAgIFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4g
YXV0aGVudGljYXRpb24gPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJl
c3BvbnNlKDAsIHByb3h5UmVzcG9uc2UpKTsKKworICAgIGlmICghQ0ZIVFRQQXV0aGVudGljYXRp
b25SZXF1aXJlc1VzZXJOYW1lQW5kUGFzc3dvcmQoYXV0aGVudGljYXRpb24uZ2V0KCkpKSB7Cisg
ICAgICAgIC8vIFRoYXQncyBhbGwgd2UgY2FuIG9mZmVyLi4uCisgICAgICAgIG1fY2xpZW50LmRp
ZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9yKDAsIG1fdXJsLnN0cmlu
ZygpLCAiUHJveHkgYXV0aGVudGljYXRpb24gc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdl
YlNvY2tldHMiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcG9ydCA9IDA7
CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlw
ZSwgJnBvcnQpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENG
KENGSFRUUEF1dGhlbnRpY2F0aW9uQ29weU1ldGhvZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpOwor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcmVhbG1DRiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVu
dGljYXRpb25Db3B5UmVhbG0oYXV0aGVudGljYXRpb24uZ2V0KCkpKTsKKworICAgIGlmICghbWV0
aG9kQ0YgfHwgIXJlYWxtQ0YpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBi
dXQgb24gc29tZSBPUyB2ZXJzaW9ucyB3ZSBnZXQgaW5jb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBk
YXRhLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzEwNDE2MzE2Pi4KKyAgICAgICAgbV9jbGllbnQuZGlk
RmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5n
KCksICJXZWJTb2NrZXQgcHJveHkgYXV0aGVudGljYXRpb24gY291bGRuJ3QgYmUgaGFuZGxlZCIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0
aW9uU3BhY2UoU3RyaW5nKG1fcHJveHlIb3N0LmdldCgpKSwgcG9ydCwgUHJvdGVjdGlvblNwYWNl
UHJveHlIVFRQUywgU3RyaW5nKHJlYWxtQ0YuZ2V0KCkpLCBhdXRoZW50aWNhdGlvblNjaGVtZUZy
b21BdXRoZW50aWNhdGlvbk1ldGhvZChtZXRob2RDRi5nZXQoKSkpOworICAgIFN0cmluZyBsb2dp
bjsKKyAgICBTdHJpbmcgcGFzc3dvcmQ7CisgICAgaWYgKCFtX3NlbnRTdG9yZWRDcmVkZW50aWFs
cyAmJiBnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxv
Z2luLCBwYXNzd29yZCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50
aWFscywgaWYgd2UgaGF2ZW4ndCB0cmllZCB0aG9zZSBhbHJlYWR5LgorICAgICAgICAvLyBDcmVh
dGUgYSB0ZW1wb3JhcnkgcmVxdWVzdCB0byBtYWtlIENGTmV0d29yayBhcHBseSBjcmVkZW50aWFs
cyB0byBpdC4gVW5mb3J0dW5hdGVseSwgdGhpcyBjYW5ub3Qgd29yayB3aXRoIE5UTE0gYXV0aGVu
dGljYXRpb24uCisgICAgICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBkdW1teVJlcXVl
c3QgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwg
bV9odHRwc1VSTC5nZXQoKSwga0NGSFRUUFZlcnNpb24xXzEpKTsKKworICAgICAgICBCb29sZWFu
IGFwcGxpZWRDcmVkZW50aWFscyA9IENGSFRUUE1lc3NhZ2VBcHBseUNyZWRlbnRpYWxzKGR1bW15
UmVxdWVzdC5nZXQoKSwgYXV0aGVudGljYXRpb24uZ2V0KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIHBhc3N3b3JkLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApOworICAgICAgICBB
U1NFUlRfVU5VU0VEKGFwcGxpZWRDcmVkZW50aWFscywgYXBwbGllZENyZWRlbnRpYWxzKTsKKwor
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyA9
IGFkb3B0Q0YoQ0ZIVFRQTWVzc2FnZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5n
ZXQoKSwgQ0ZTVFIoIlByb3h5LUF1dGhvcml6YXRpb24iKSkpOworCisgICAgICAgIGlmICghcHJv
eHlBdXRob3JpemF0aW9uU3RyaW5nKSB7CisgICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBO
VExNIGF1dGguCisgICAgICAgICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlz
LCBTb2NrZXRTdHJlYW1FcnJvcigwLCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0
aW9uIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBXZWJTb2NrZXRzIikpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgYXV0aG9yaXph
dGlvbiByZXN1bHRzIGluIGEgbmV3IGNvbm5lY3Rpb24gYXR0ZW1wdC4KKyAgICAgICAgd2tTZXRD
T05ORUNUUHJveHlBdXRob3JpemF0aW9uRm9yU3RyZWFtKG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJv
eHlBdXRob3JpemF0aW9uU3RyaW5nLmdldCgpKTsKKyAgICAgICAgbV9zZW50U3RvcmVkQ3JlZGVu
dGlhbHMgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IE9u
IHBsYXRmb3JtcyB3aGVyZSBBdXRoQnJva2VyQWdlbnQgaXMgbm90IGF2YWlsYWJsZSwgYXNrIHRo
ZSBjbGllbnQgaWYgY3JlZGVudGlhbHMgY291bGQgbm90IGJlIGZvdW5kLgorCisgICAgbV9jbGll
bnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwu
c3RyaW5nKCksICJQcm94eSBjcmVkZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKK30KKwor
Q0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2
b2lkKiBpbmZvKQoreworICAgIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nh
c3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7CisgICAgcmV0dXJuIFN0cmluZygiV2ViS2l0
IHNvY2tldCBzdHJlYW0sICIgKyBoYW5kbGUtPm1fdXJsLnN0cmluZygpKS5jcmVhdGVDRlN0cmlu
ZygpLmxlYWtSZWYoKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1D
YWxsYmFjayhDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2
b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8p
OworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJl
YW0uZ2V0KCkpOworICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3
Mz4uIEtlZXBpbmcgdGhpcyBiZWxvdyB0aGUgYXNzZXJ0aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIg
c3RlcHMgdG8gcmVwcm9kdWNlIHRoaXMuCisgICAgaWYgKCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkK
KyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIFJlZlB0cjxTb2NrZXRT
dHJlYW1IYW5kbGU+IHByb3RlY3RvcihoYW5kbGUpOworICAgIGNhbGxPbk1haW5UaHJlYWRBbmRX
YWl0KFsmXSB7CisgICAgICAgIGlmIChoYW5kbGUtPm1fcmVhZFN0cmVhbSkKKyAgICAgICAgICAg
IGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOworICAgIH0pOworI2Vsc2UKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5
cGUpOworI2VuZGlmCit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNh
bGxiYWNrKENGV3JpdGVTdHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2
b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8p
OworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dyaXRlU3Ry
ZWFtLmdldCgpKTsKKyAgICAvLyBUaGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBwcmFjdGlj
ZSwgeWV0IGl0IHNlZW1zIGxpa2UgaXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQg
c3RyZWFtIGNhbGxiYWNrLgorICAgIGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQorICAgICAg
ICByZXR1cm47CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhh
bmRsZT4gcHJvdGVjdG9yKGhhbmRsZSk7CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZd
IHsKKyAgICAgICAgaWYgKGhhbmRsZS0+bV93cml0ZVN0cmVhbSkKKyAgICAgICAgICAgIGhhbmRs
ZS0+d3JpdGVTdHJlYW1DYWxsYmFjayh0eXBlKTsKKyAgICB9KTsKKyNlbHNlCisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBoYW5kbGUtPndyaXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7
CisjZW5kaWYKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFj
ayhDRlN0cmVhbUV2ZW50VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudE5vbmU6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVh
bUV2ZW50T3BlbkNvbXBsZXRlZDoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Uga0NGU3RyZWFt
RXZlbnRIYXNCeXRlc0F2YWlsYWJsZTogeworICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3Rh
dGUgPT0gV2FpdGluZ0ZvckNyZWRlbnRpYWxzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ29ubmVjdCkgeworICAg
ICAgICAgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gQ09OTkVDVFByb3h5KSB7CisgICAgICAg
ICAgICAgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VSZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9w
dENGKHdrQ29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKG1fcmVhZFN0cmVhbS5nZXQoKSwgbV9odHRw
c1VSTC5nZXQoKSwgbV9wcm94eUhvc3QuZ2V0KCksIG1fcHJveHlQb3J0LmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFwcm94eVJlc3BvbnNlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgICAgICBDRkluZGV4IHByb3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQ
TWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShwcm94eVJlc3BvbnNlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHByb3h5UmVzcG9uc2VDb2RlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAyMDA6CisgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0MDc6Cisg
ICAgICAgICAgICAgICAgICAgIGFkZENPTk5FQ1RDcmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRo
aXMsIFNvY2tldFN0cmVhbUVycm9yKHN0YXRpY19jYXN0PGludD4ocHJveHlSZXNwb25zZUNvZGUp
LCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlz
aGVkLCB1bmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUiKSk7CisgICAgICAgICAgICAgICAgICAgIHBs
YXRmb3JtQ2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0g
Q29ubmVjdGVkOworICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAgICAgICBtX2Ns
aWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3Zl
LCBhbmQgaXQgY291bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlmIChtX3N0YXRl
ID09IENsb3NlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV9zdGF0
ZSA9PSBPcGVuKTsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5l
Y3RlZCk7CisKKyAgICAgICAgQ0ZJbmRleCBsZW5ndGg7CisgICAgICAgIFVJbnQ4IGxvY2FsQnVm
ZmVyWzEwMjRdOyAvLyBVc2VkIGlmIENGUmVhZFN0cmVhbUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1
cm4gYW55dGhpbmcuCisgICAgICAgIGNvbnN0IFVJbnQ4KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRC
dWZmZXIobV9yZWFkU3RyZWFtLmdldCgpLCAwLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFwdHIp
IHsKKyAgICAgICAgICAgIGxlbmd0aCA9IENGUmVhZFN0cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdl
dCgpLCBsb2NhbEJ1ZmZlciwgc2l6ZW9mKGxvY2FsQnVmZmVyKSk7CisgICAgICAgICAgICBwdHIg
PSBsb2NhbEJ1ZmZlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1E
YXRhKCp0aGlzLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBsZW5ndGgpOwor
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2Vw
dEJ5dGVzOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRFcnJvck9jY3VycmVkOiB7CisgICAgICAgIFJldGFpblB0
cjxDRkVycm9yUmVmPiBlcnJvciA9IGFkb3B0Q0YoQ0ZSZWFkU3RyZWFtQ29weUVycm9yKG1fcmVh
ZFN0cmVhbS5nZXQoKSkpOworICAgICAgICByZXBvcnRFcnJvclRvQ2xpZW50KGVycm9yLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5j
b3VudGVyZWQ6CisgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZT
dHJlYW1FdmVudFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkgeworICAgIGNhc2Uga0NG
U3RyZWFtRXZlbnROb25lOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVu
dE9wZW5Db21wbGV0ZWQ6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50
SGFzQnl0ZXNBdmFpbGFibGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOiB7CisgICAg
ICAgIC8vIENhbiBiZSBmYWxzZSBpZiByZWFkIHN0cmVhbSBjYWxsYmFjayBqdXN0IGRlY2lkZWQg
dG8gcmV0cnkgYSBDT05ORUNUIHdpdGggY3JlZGVudGlhbHMuCisgICAgICAgIGlmICghQ0ZXcml0
ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9y
Q3JlZGVudGlhbHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fY29ubmVj
dGluZ1N1YnN0YXRlID09IFdhaXRpbmdGb3JDb25uZWN0KSB7CisgICAgICAgICAgICBpZiAobV9j
b25uZWN0aW9uVHlwZSA9PSBDT05ORUNUUHJveHkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZIVFRQTWVzc2FnZVJlZj4gcHJveHlSZXNwb25zZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVD
VFByb3h5UmVzcG9uc2UobV9yZWFkU3RyZWFtLmdldCgpLCBtX2h0dHBzVVJMLmdldCgpLCBtX3By
b3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXByb3h5UmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIC8vIERvbid0IHdyaXRlIGFueXRoaW5nIHVudGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNr
IGhhcyBkZWFsdCB3aXRoIENPTk5FQ1QgY3JlZGVudGlhbHMuCisgICAgICAgICAgICAgICAgLy8g
VGhlIG9yZGVyIG9mIGNhbGxiYWNrcyBpcyBub3QgZGVmaW5lZCwgc28gdGhpcyBjYW4gYmUgY2Fs
bGVkIGJlZm9yZSByZWFkU3RyZWFtQ2FsbGJhY2sncyBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZh
aWxhYmxlLgorICAgICAgICAgICAgICAgIENGSW5kZXggcHJveHlSZXNwb25zZUNvZGUgPSBDRkhU
VFBNZXNzYWdlR2V0UmVzcG9uc2VTdGF0dXNDb2RlKHByb3h5UmVzcG9uc2UuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGlmIChwcm94eVJlc3BvbnNlQ29kZSAhPSAyMDApCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1
YnN0YXRlID0gQ29ubmVjdGVkOworICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAg
ICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBj
YWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlm
IChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBPcGVuKTsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRl
ID09IENvbm5lY3RlZCk7CisKKyAgICAgICAgc2VuZFBlbmRpbmdEYXRhKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6IHsKKyAg
ICAgICAgUmV0YWluUHRyPENGRXJyb3JSZWY+IGVycm9yID0gYWRvcHRDRihDRldyaXRlU3RyZWFt
Q29weUVycm9yKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKTsKKyAgICAgICAgcmVwb3J0RXJyb3JUb0Ns
aWVudChlcnJvci5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZT
dHJlYW1FdmVudEVuZEVuY291bnRlcmVkOgorICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3
ZSBoYW5kbGUgY2xvc2luZyBpbiByZWFkIGNhbGxiYWNrLCBidXQgdGhlc2UgY2FuIGNvbWUgaW5k
ZXBlbmRlbnRseSAoZS5nLiBhIHNlcnZlciBjYW4gc3RvcCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNl
bmRpbmcgZGF0YSkuCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCit7CisgICAg
Q0ZJbmRleCBlcnJvckNvZGUgPSBDRkVycm9yR2V0Q29kZShlcnJvcik7CisgICAgU3RyaW5nIGRl
c2NyaXB0aW9uOworCisjaWYgUExBVEZPUk0oTUFDKQorCisjaWYgQ09NUElMRVIoQ0xBTkcpCisj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisjZW5kaWYKKworICAgIGlmIChDRkVx
dWFsKENGRXJyb3JHZXREb21haW4oZXJyb3IpLCBrQ0ZFcnJvckRvbWFpbk9TU3RhdHVzKSkgewor
ICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbk9TU3RhdHVzID0gR2V0TWFjT1NTdGF0dXND
b21tZW50U3RyaW5nKHN0YXRpY19jYXN0PE9TU3RhdHVzPihlcnJvckNvZGUpKTsKKyAgICAgICAg
aWYgKGRlc2NyaXB0aW9uT1NTdGF0dXMgJiYgZGVzY3JpcHRpb25PU1N0YXR1c1swXSAhPSAnXDAn
KQorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiT1NTdGF0dXMgRXJyb3IgIiArIFN0cmluZzo6
bnVtYmVyKGVycm9yQ29kZSkgKyAiOiAiICsgZGVzY3JpcHRpb25PU1N0YXR1czsKKyAgICB9CisK
KyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRp
ZgorCisjZW5kaWYKKworICAgIGlmIChkZXNjcmlwdGlvbi5pc051bGwoKSkgeworICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRlc2NyaXB0aW9uQ0YgPSBhZG9wdENGKENGRXJyb3JDb3B5
RGVzY3JpcHRpb24oZXJyb3IpKTsKKyAgICAgICAgZGVzY3JpcHRpb24gPSBTdHJpbmcoZGVzY3Jp
cHRpb25DRi5nZXQoKSk7CisgICAgfQorCisgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBt
X3VybC5zdHJpbmcoKSwgZGVzY3JpcHRpb24pKTsKK30KKworU29ja2V0U3RyZWFtSGFuZGxlOjp+
U29ja2V0U3RyZWFtSGFuZGxlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhh
bmRsZSAlcCBkdG9yIiwgdGhpcyk7CisKKyAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7
Cit9CisKK2ludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVz
KG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBD
RldyaXRlU3RyZWFtV3JpdGUobV93cml0ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVSW50OCo+KGRhdGEpLCBsZW5ndGgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6cGxhdGZvcm1DbG9zZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5k
bGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOworCisgICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJj
ZSkgCisgICAgICAgIHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKKworICAgIEFTU0VSVCghbV9y
ZWFkU3RyZWFtID09ICFtX3dyaXRlU3RyZWFtKTsKKyAgICBpZiAoIW1fcmVhZFN0cmVhbSkgewor
ICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1
YnN0YXRlID09IEV4ZWN1dGluZ1BBQ0ZpbGUpCisgICAgICAgICAgICBtX2NsaWVudC5kaWRDbG9z
ZVNvY2tldFN0cmVhbSgqdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBQTEFU
Rk9STShXSU4pCisgICAgQ0ZSZWFkU3RyZWFtVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0
cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAg
IENGV3JpdGVTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwg
bG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlJl
YWRTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZXcml0ZVN0cmVh
bVVuc2NoZWR1bGVGcm9tUnVuTG9vcChtX3dyaXRlU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRD
dXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisjZW5kaWYKKworICAgIENGUmVhZFN0
cmVhbUNsb3NlKG1fcmVhZFN0cmVhbS5nZXQoKSk7CisgICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1f
d3JpdGVTdHJlYW0uZ2V0KCkpOworICAgIAorICAgIG1fcmVhZFN0cmVhbSA9IDA7CisgICAgbV93
cml0ZVN0cmVhbSA9IDA7CisKKyAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhp
cyk7Cit9CisKK3Vuc2lnbmVkIHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0
Cit7CisgICAgaWYgKHVuc2lnbmVkIHNob3J0IHVybFBvcnQgPSBtX3VybC5wb3J0KCkpCisgICAg
ICAgIHJldHVybiB1cmxQb3J0OworICAgIGlmIChzaG91bGRVc2VTU0woKSkKKyAgICAgICAgcmV0
dXJuIDQ0MzsKKyAgICByZXR1cm4gODA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5j
bHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIgogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbC5o
IgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCkBAIC00MCwxOCArNDAsMTQgQEAKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCiAjaW5j
bHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
TmV0d29yay5oPgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0
d29yay5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiTG9hZGVyUnVu
TG9vcENGLmgiCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgogI2luY2x1ZGUgPFdl
YktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNlbHNlCiAjaW5j
bHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgpAQCAtNjcsOCArNjMsOCBAQCBleHRlcm4g
IkMiIGNvbnN0IENGU3RyaW5nUmVmIF9rQ0ZTdHJlYW1TCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQot
ICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVudCkKK1NvY2tldFN0cmVhbUhh
bmRsZUltcGw6OlNvY2tldFN0cmVhbUhhbmRsZUltcGwoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogU29j
a2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50KQogICAgICwgbV9jb25uZWN0aW5nU3Vic3RhdGUo
TmV3KQogICAgICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQogICAgICwgbV9zZW50U3RvcmVk
Q3JlZGVudGlhbHMoZmFsc2UpCkBAIC0xMDAsNyArOTYsNyBAQCBTb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjCiAgICAgc2NoZWR1bGVTdHJlYW1zKCk7CiB9CiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpzY2hlZHVsZVN0cmVhbXMoKQordm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjpzY2hlZHVsZVN0cmVhbXMoKQogewogICAgIEFTU0VSVChtX3JlYWRTdHJlYW0p
OwogICAgIEFTU0VSVChtX3dyaXRlU3RyZWFtKTsKQEAgLTEyNywyNSArMTIzLDI1IEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpzY2hlZHVsZVN0cmVhbXMKICAgICBtX2Nvbm5lY3RpbmdTdWJz
dGF0ZSA9IFdhaXRpbmdGb3JDb25uZWN0OwogfQogCi12b2lkKiBTb2NrZXRTdHJlYW1IYW5kbGU6
OnJldGFpblNvY2tldFN0cmVhbUhhbmRsZSh2b2lkKiBpbmZvKQordm9pZCogU29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6cmV0YWluU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQqIGluZm8pCiB7CiAgICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5k
bGUqPihpbmZvKTsKICAgICBoYW5kbGUtPnJlZigpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAK
LXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQq
IGluZm8pCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbGVhc2VTb2NrZXRTdHJlYW1I
YW5kbGUodm9pZCogaW5mbykKIHsKICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0
YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOwogICAgIGhhbmRsZS0+ZGVyZWYo
KTsKIH0KIAotQ0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9u
RGVzY3JpcHRpb24odm9pZCopCitDRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
b3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24odm9pZCopCiB7CiAgICAgcmV0dXJuIENGU1RSKCJX
ZWJTb2NrZXQgcHJveHkgUEFDIGZpbGUgZXhlY3V0aW9uIik7CiB9CiAKLXN0YXRpYyB2b2lkIGNh
bGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCitz
dGF0aWMgdm9pZCBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
ZnVuY3Rpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CiAgICAgICAgIGZ1bmN0aW9u
KCk7CkBAIC0xNjYsMTggKzE2MiwyMiBAQCBzdGF0aWMgdm9pZCBjYWxsT25NYWluVGhyZWFkQW5k
V2FpdChzdGQ6CiAgICAgfSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobXV0
ZXgpOwotICAgIGNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgWyZdIHsgcmV0dXJuIGlzRmlu
aXNoZWQ7IH0pOworICAgIGNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgWyZdIHsKKyAgICAg
ICAgcmV0dXJuIGlzRmluaXNoZWQ7CisgICAgfSk7CiB9CiAKIHN0cnVjdCBNYWluVGhyZWFkUEFD
Q2FsbGJhY2tJbmZvIHsKLSAgICBNYWluVGhyZWFkUEFDQ2FsbGJhY2tJbmZvKFNvY2tldFN0cmVh
bUhhbmRsZSogaGFuZGxlLCBDRkFycmF5UmVmIHByb3h5TGlzdCkgOiBoYW5kbGUoaGFuZGxlKSwg
cHJveHlMaXN0KHByb3h5TGlzdCkgeyB9CisgICAgTWFpblRocmVhZFBBQ0NhbGxiYWNrSW5mbyhT
b2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSwgQ0ZBcnJheVJlZiBwcm94eUxpc3QpCisgICAgICAg
IDogaGFuZGxlKGhhbmRsZSksIHByb3h5TGlzdChwcm94eUxpc3QpCisgICAgeyB9CiAgICAgUmVm
UHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gaGFuZGxlOwogICAgIENGQXJyYXlSZWYgcHJveHlMaXN0
OwogfTsKIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKHZv
aWQqIGNsaWVudCwgQ0ZBcnJheVJlZiBwcm94eUxpc3QsIENGRXJyb3JSZWYpCit2b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKHZvaWQqIGNsaWVudCwgQ0ZB
cnJheVJlZiBwcm94eUxpc3QsIENGRXJyb3JSZWYpCiB7Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxl
KiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnQpOworICAg
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVh
bUhhbmRsZUltcGwqPihjbGllbnQpOwogCiAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZd
IHsKICAgICAgICAgQVNTRVJUKGhhbmRsZS0+bV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gRXhlY3V0
aW5nUEFDRmlsZSk7CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OnBhY0V4ZWN1dGlvbkNhbAogICAgIH0pOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6
ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkKK3ZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkKIHsKICAg
ICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3IgV2ViU29ja2V0
IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgogICAgIENGU3RyZWFtQ2xpZW50Q29udGV4dCBj
bGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUsIHJlbGVh
c2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbiB9OwpAQCAt
MjAzLDcgKzIwMyw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpleGVjdXRlUEFDRmlsZVUK
ICAgICBtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9IEV4ZWN1dGluZ1BBQ0ZpbGU7CiB9CiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZW1vdmVQQUNSdW5Mb29wU291cmNlKCkKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6cmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpCiB7CiAgICAgQVNTRVJU
KG1fcGFjUnVuTG9vcFNvdXJjZSk7CiAKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVtb3ZlUEFDUnVuTG9vCiAgICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsK
IH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5KCkKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y2hvb3NlUHJveHkoKQogewogICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHByb3h5RGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrQ29weVN5c3RlbVBy
b3h5U2V0dGluZ3MoKSk7CiAKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6Y2hvb3NlUHJveHkoKQogICAgIGNob29zZVByb3h5RnJvbUFycmF5KHByb3h5QXJyYXku
Z2V0KCkpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y2hvb3NlUHJveHlGcm9tQXJy
YXkoQ0ZBcnJheVJlZiBwcm94eUFycmF5KQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
aG9vc2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkpCiB7CiAgICAgaWYgKCFw
cm94eUFycmF5KSB7CiAgICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBEaXJlY3Q7CkBAIC0yOTcs
NyArMjk3LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5RnJvbQogfQog
CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVTdHJlYW1zKCkKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y3JlYXRlU3RyZWFtcygpCiB7CiAgICAgaWYgKG1fY29ubmVjdGlv
blR5cGUgPT0gVW5rbm93bikKICAgICAgICAgY2hvb3NlUHJveHkoKTsKQEAgLTM1MCw3ICszNTAs
NyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygpCiAgICAgfQogfQog
Ci1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6Z2V0U3RvcmVkQ09OTkVDVFByb3h5Q3JlZGVudGlh
bHMoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgbG9naW4s
IFN0cmluZyYgcGFzc3dvcmQpCitib29sIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmdldFN0b3Jl
ZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlv
blNwYWNlLCBTdHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQogewogICAgIC8vIEZJWE1F
ICg8cmRhcjovL3Byb2JsZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJl
IHJldHJpZXZlZCBmcm9tIEF1dGhCcm9rZXJBZ2VudC4KIApAQCAtMzg1LDcgKzM4NSw3IEBAIHN0
YXRpYyBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGUKICAgICByZXR1cm4gUHJvdGVj
dGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVVbmtub3duOwogfQogCi12b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6YWRkQ09OTkVDVENyZWRlbnRpYWxzKENGSFRUUE1lc3NhZ2VSZWYgcHJveHlS
ZXNwb25zZSkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6YWRkQ09OTkVDVENyZWRlbnRp
YWxzKENGSFRUUE1lc3NhZ2VSZWYgcHJveHlSZXNwb25zZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZI
VFRQQXV0aGVudGljYXRpb25SZWY+IGF1dGhlbnRpY2F0aW9uID0gYWRvcHRDRihDRkhUVFBBdXRo
ZW50aWNhdGlvbkNyZWF0ZUZyb21SZXNwb25zZSgwLCBwcm94eVJlc3BvbnNlKSk7CiAKQEAgLTQz
NiwxNSArNDM2LDE1IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjphZGRDT05ORUNUQ3JlZGUK
ICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJv
cigwLCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGNyZWRlbnRpYWxzIGFyZSBub3QgYXZhaWxhYmxl
IikpOwogfQogCi1DRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlDRlN0cmVhbURl
c2NyaXB0aW9uKHZvaWQqIGluZm8pCitDRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
Ojpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQogewotICAgIFNvY2tldFN0cmVh
bUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7
CisgICAgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlSW1wbCo+KGluZm8pOwogICAgIHJldHVybiBTdHJpbmcoIldlYktpdCBzb2Nr
ZXQgc3RyZWFtLCAiICsgaGFuZGxlLT5tX3VybC5zdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKS5s
ZWFrUmVmKCk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGJh
Y2soQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSwgdm9pZCog
Y2xpZW50Q2FsbEJhY2tJbmZvKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFkU3Ry
ZWFtQ2FsbGJhY2soQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FdmVudFR5cGUgdHlw
ZSwgdm9pZCogY2xpZW50Q2FsbEJhY2tJbmZvKQogewotICAgIFNvY2tldFN0cmVhbUhhbmRsZSog
aGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oY2xpZW50Q2FsbEJhY2tJ
bmZvKTsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsKj4oY2xpZW50Q2FsbEJhY2tJbmZvKTsKICAgICBBU1NFUlRf
VU5VU0VEKHN0cmVhbSwgc3RyZWFtID09IGhhbmRsZS0+bV9yZWFkU3RyZWFtLmdldCgpKTsKICAg
ICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMTc3MjcwNzM+LiBLZWVwaW5nIHRo
aXMgYmVsb3cgdGhlIGFzc2VydGlvbiBhcyB3ZSdkIGxpa2UgYmV0dGVyIHN0ZXBzIHRvIHJlcHJv
ZHVjZSB0aGlzLgogICAgIGlmICghaGFuZGxlLT5tX3JlYWRTdHJlYW0pCkBAIC00NjIsOSArNDYy
LDkgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYgogI2VuZGlmCiB9
CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVT
dHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxs
QmFja0luZm8pCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJh
Y2soQ0ZXcml0ZVN0cmVhbVJlZiBzdHJlYW0sIENGU3RyZWFtRXZlbnRUeXBlIHR5cGUsIHZvaWQq
IGNsaWVudENhbGxCYWNrSW5mbykKIHsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGNsaWVudENhbGxCYWNrSW5mbyk7Cisg
ICAgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCo+KGNsaWVudENhbGxCYWNrSW5mbyk7CiAgICAgQVNTRVJUX1VOVVNFRChz
dHJlYW0sIHN0cmVhbSA9PSBoYW5kbGUtPm1fd3JpdGVTdHJlYW0uZ2V0KCkpOwogICAgIC8vIFRo
aXMgd2Fzbid0IHNlZW4gaGFwcGVuaW5nIGluIHByYWN0aWNlLCB5ZXQgaXQgc2VlbXMgbGlrZSBp
dCBjb3VsZCwgZHVlIHRvIHN5bW1ldHJ5IHdpdGggcmVhZCBzdHJlYW0gY2FsbGJhY2suCiAgICAg
aWYgKCFoYW5kbGUtPm1fd3JpdGVTdHJlYW0pCkBAIC00ODIsOSArNDgyLDkgQEAgdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbAogI2VuZGlmCiB9CiAKLXZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSkK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKENGU3RyZWFt
RXZlbnRUeXBlIHR5cGUpCiB7Ci0gICAgc3dpdGNoKHR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIGtDRlN0cmVhbUV2ZW50Tm9uZToKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2Uga0NGU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgpAQCAtNTU0LDkgKzU1NCw5IEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGIKICAgICB9CiB9CiAKLXZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlIHR5
cGUpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZT
dHJlYW1FdmVudFR5cGUgdHlwZSkKIHsKLSAgICBzd2l0Y2godHlwZSkgeworICAgIHN3aXRjaCAo
dHlwZSkgewogICAgIGNhc2Uga0NGU3RyZWFtRXZlbnROb25lOgogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6CkBAIC02MTAsNyArNjEwLDcgQEAg
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbAogICAgIH0KIH0KIAotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQoQ0ZFcnJvclJlZiBlcnJv
cikKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVwb3J0RXJyb3JUb0NsaWVudChDRkVy
cm9yUmVmIGVycm9yKQogewogICAgIENGSW5kZXggZXJyb3JDb2RlID0gQ0ZFcnJvckdldENvZGUo
ZXJyb3IpOwogICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKQEAgLTY0MiwxNCArNjQyLDE0IEBAIHZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2wKICAgICBtX2NsaWVudC5kaWRG
YWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcihzdGF0aWNfY2FzdDxpbnQ+
KGVycm9yQ29kZSksIG1fdXJsLnN0cmluZygpLCBkZXNjcmlwdGlvbikpOwogfQogCi1Tb2NrZXRT
dHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQorU29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6flNvY2tldFN0cmVhbUhhbmRsZUltcGwoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0
U3RyZWFtSGFuZGxlICVwIGR0b3IiLCB0aGlzKTsKIAogICAgIEFTU0VSVCghbV9wYWNSdW5Mb29w
U291cmNlKTsKIH0KIAotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKCFDRldy
aXRlU3RyZWFtQ2FuQWNjZXB0Qnl0ZXMobV93cml0ZVN0cmVhbS5nZXQoKSkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIGludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRm
b3JtU2VuZChjb24KICAgICByZXR1cm4gQ0ZXcml0ZVN0cmVhbVdyaXRlKG1fd3JpdGVTdHJlYW0u
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKSwgbGVuZ3RoKTsKIH0K
IAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQordm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3NlKCkKIHsKICAgICBMT0coTmV0d29yaywgIlNv
Y2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybUNsb3NlIiwgdGhpcyk7CiAKQEAgLTY4OCw3ICs2
ODgsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiAgICAgbV9j
bGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi11bnNpZ25lZCBzaG9ydCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnBvcnQoKSBjb25zdAordW5zaWduZWQgc2hvcnQgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbDo6cG9ydCgpIGNvbnN0CiB7CiAgICAgaWYgKHVuc2lnbmVkIHNob3J0IHVy
bFBvcnQgPSBtX3VybC5wb3J0KCkpCiAgICAgICAgIHJldHVybiB1cmxQb3J0OwpAQCAtNjk3LDQg
KzY5Nyw0IEBAIHVuc2lnbmVkIHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgKICAgICBy
ZXR1cm4gODA7CiB9CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTb2Nr
ZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8d2lu
c29jazIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiU2Vzc2lvbklELmgiCi0jaW5jbHVkZSA8Y3Vy
bC9jdXJsLmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7
Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBV
UkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQot
Ci0gICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7Ci0KLXByaXZhdGU6Ci0gICAgU29j
a2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwot
Ci0gICAgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKLQotICAgIGJvb2wgcmVh
ZERhdGEoQ1VSTCopOwotICAgIGJvb2wgc2VuZERhdGEoQ1VSTCopOwotICAgIGJvb2wgd2FpdEZv
ckF2YWlsYWJsZURhdGEoQ1VSTCosIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGlt
ZW91dCk7Ci0KLSAgICB2b2lkIHN0YXJ0VGhyZWFkKCk7Ci0gICAgdm9pZCBzdG9wVGhyZWFkKCk7
Ci0KLSAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKCk7Ci0gICAgdm9pZCBkaWRPcGVuU29ja2V0KCk7
Ci0KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY3JlYXRlQ29weShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLQotICAgIHN0cnVjdCBTb2NrZXREYXRhIHsKLSAgICAg
ICAgU29ja2V0RGF0YShzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiYmIHNvdXJjZSwgaW50IGxlbmd0
aCkKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUoc291cmNlKTsKLSAgICAg
ICAgICAgIHNpemUgPSBsZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAgICBTb2NrZXREYXRhKFNv
Y2tldERhdGEmJiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUo
b3RoZXIuZGF0YSk7Ci0gICAgICAgICAgICBzaXplID0gb3RoZXIuc2l6ZTsKLSAgICAgICAgICAg
IG90aGVyLnNpemUgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNo
YXJbXT4gZGF0YTsKLSAgICAgICAgaW50IHNpemUgeyAwIH07Ci0gICAgfTsKLQotICAgIFRocmVh
ZElkZW50aWZpZXIgbV93b3JrZXJUaHJlYWQgeyAwIH07Ci0gICAgc3RkOjphdG9taWM8Ym9vbD4g
bV9zdG9wVGhyZWFkIHsgZmFsc2UgfTsKLSAgICBMb2NrIG1fbXV0ZXhTZW5kOwotICAgIExvY2sg
bV9tdXRleFJlY2VpdmU7Ci0gICAgRGVxdWU8U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKLSAgICBE
ZXF1ZTxTb2NrZXREYXRhPiBtX3JlY2VpdmVEYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMjA0NDY4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUN1cmwuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hhbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgotCi0jaWYgVVNFKENVUkwp
Ci0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8d3Rm
L0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQot
ewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAi
LCB0aGlzLCAmbV9jbGllbnQpOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3Rh
cnRUaHJlYWQoKTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxl
KCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkZWxldGUiLCB0
aGlzKTsKLSAgICBBU1NFUlQoIW1fd29ya2VyVGhyZWFkKTsKLX0KLQotaW50IFNvY2tldFN0cmVh
bUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0g
ICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kIiwgdGhp
cyk7Ci0KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhcnRUaHJlYWQoKTsK
LQotICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoZGF0YSwgbGVuZ3RoKTsKLQotICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKLSAgICBtX3NlbmREYXRhLmFwcGVu
ZChTb2NrZXREYXRhIHsgV1RGTW92ZShjb3B5KSwgbGVuZ3RoIH0pOwotCi0gICAgcmV0dXJuIGxl
bmd0aDsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQotewot
ICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0
aGlzKTsKLQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBzdG9wVGhyZWFkKCk7
Ci0KLSAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLWJvb2wg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YShDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgY29uc3QgaW50IGJ1ZmZlclNpemUgPSAxMDI0
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IGRhdGEobmV3IGNoYXJbYnVmZmVyU2l6ZV0p
OwotICAgIHNpemVfdCBieXRlc1JlYWQgPSAwOwotCi0gICAgQ1VSTGNvZGUgcmV0ID0gY3VybF9l
YXN5X3JlY3YoY3VybEhhbmRsZSwgZGF0YS5nZXQoKSwgYnVmZmVyU2l6ZSwgJmJ5dGVzUmVhZCk7
Ci0KLSAgICBpZiAocmV0ID09IENVUkxFX09LICYmIGJ5dGVzUmVhZCA+PSAwKSB7Ci0gICAgICAg
IG1fbXV0ZXhSZWNlaXZlLmxvY2soKTsKLSAgICAgICAgbV9yZWNlaXZlRGF0YS5hcHBlbmQoU29j
a2V0RGF0YSB7IFdURk1vdmUoZGF0YSksIHN0YXRpY19jYXN0PGludD4oYnl0ZXNSZWFkKSB9KTsK
LSAgICAgICAgbV9tdXRleFJlY2VpdmUudW5sb2NrKCk7Ci0KLSAgICAgICAgcmVmKCk7Ci0KLSAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10gewotICAgICAgICAgICAgZGlkUmVjZWl2ZURh
dGEoKTsKLSAgICAgICAgICAgIGRlcmVmKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChyZXQgPT0gQ1VSTEVfQUdBSU4pCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNvY2tldFN0cmVhbUhh
bmRsZTo6c2VuZERhdGEoQ1VSTCogY3VybEhhbmRsZSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0KLSAgICAgICAgbV9tdXRleFNlbmQubG9j
aygpOwotICAgICAgICBpZiAoIW1fc2VuZERhdGEuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBtX211
dGV4U2VuZC51bmxvY2soKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGF1dG8gc2VuZERhdGEgPSBtX3NlbmREYXRhLnRha2VGaXJzdCgpOwotICAgICAgICBtX211dGV4
U2VuZC51bmxvY2soKTsKLQotICAgICAgICBpbnQgdG90YWxCeXRlc1NlbnQgPSAwOwotICAgICAg
ICB3aGlsZSAodG90YWxCeXRlc1NlbnQgPCBzZW5kRGF0YS5zaXplKSB7Ci0gICAgICAgICAgICBz
aXplX3QgYnl0ZXNTZW50ID0gMDsKLSAgICAgICAgICAgIENVUkxjb2RlIHJldCA9IGN1cmxfZWFz
eV9zZW5kKGN1cmxIYW5kbGUsIHNlbmREYXRhLmRhdGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwg
c2VuZERhdGEuc2l6ZSAtIHRvdGFsQnl0ZXNTZW50LCAmYnl0ZXNTZW50KTsKLSAgICAgICAgICAg
IGlmIChyZXQgPT0gQ1VSTEVfT0spCi0gICAgICAgICAgICAgICAgdG90YWxCeXRlc1NlbnQgKz0g
Ynl0ZXNTZW50OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gSW5zZXJ0IHJlbWFpbmluZyBkYXRhIGludG8gc2VuZCBxdWV1
ZS4KLQotICAgICAgICBpZiAodG90YWxCeXRlc1NlbnQgPCBzZW5kRGF0YS5zaXplKSB7Ci0gICAg
ICAgICAgICBjb25zdCBpbnQgcmVzdExlbmd0aCA9IHNlbmREYXRhLnNpemUgLSB0b3RhbEJ5dGVz
U2VudDsKLSAgICAgICAgICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoc2VuZERhdGEuZGF0YS5n
ZXQoKSArIHRvdGFsQnl0ZXNTZW50LCByZXN0TGVuZ3RoKTsKLQotICAgICAgICAgICAgc3RkOjps
b2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleFNlbmQpOwotICAgICAgICAgICAgbV9zZW5kRGF0
YS5wcmVwZW5kKFNvY2tldERhdGEgeyBXVEZNb3ZlKGNvcHkpLCByZXN0TGVuZ3RoIH0pOwotCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OndhaXRGb3JBdmFpbGFibGVEYXRh
KENVUkwqIGN1cmxIYW5kbGUsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91
dCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHMgdXNlYyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25v
OjptaWNyb3NlY29uZHM+KHNlbGVjdFRpbWVvdXQpOwotCi0gICAgc3RydWN0IHRpbWV2YWwgdGlt
ZW91dDsKLSAgICBpZiAodXNlYyA8PSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApKSB7Ci0g
ICAgICAgIHRpbWVvdXQudHZfc2VjID0gMDsKLSAgICAgICAgdGltZW91dC50dl91c2VjID0gMDsK
LSAgICB9IGVsc2UgewotICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IHVzZWMuY291bnQoKSAvIDEw
MDAwMDA7Ci0gICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHVzZWMuY291bnQoKSAlIDEwMDAwMDA7
Ci0gICAgfQotCi0gICAgbG9uZyBzb2NrZXQ7Ci0gICAgaWYgKGN1cmxfZWFzeV9nZXRpbmZvKGN1
cmxIYW5kbGUsIENVUkxJTkZPX0xBU1RTT0NLRVQsICZzb2NrZXQpICE9IENVUkxFX09LKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmZF9zZXQgZmRyZWFkOwotICAgIEZEX1pFUk8oJmZk
cmVhZCk7Ci0gICAgRkRfU0VUKHNvY2tldCwgJmZkcmVhZCk7Ci0gICAgaW50IHJjID0gOjpzZWxl
Y3QoMCwgJmZkcmVhZCwgbnVsbHB0ciwgbnVsbHB0ciwgJnRpbWVvdXQpOwotICAgIHJldHVybiBy
YyA9PSAxOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhcnRUaHJlYWQoKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV93b3JrZXJUaHJlYWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRl
cmVmKCkuCi0KLSAgICBtX3dvcmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRo
cmVhZCIsIFt0aGlzXSB7Ci0KLSAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICAgICAgQ1VSTCogY3VybEhhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7Ci0KLSAgICAgICAgaWYg
KCFjdXJsSGFuZGxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQoY3VybEhhbmRsZSwgQ1VSTE9QVF9VUkwsIG1fdXJsLmhvc3QoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsSGFuZGxlLCBDVVJMT1BUX1BPUlQsIG1f
dXJsLnBvcnQoKSk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybEhhbmRsZSwgQ1VSTE9Q
VF9DT05ORUNUX09OTFksIDFMKTsKLQotICAgICAgICAvLyBDb25uZWN0IHRvIGhvc3QKLSAgICAg
ICAgaWYgKGN1cmxfZWFzeV9wZXJmb3JtKGN1cmxIYW5kbGUpICE9IENVUkxFX09LKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHJlZigpOwotCi0gICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW3RoaXNdIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHJlZmVyZW5jZSBjb3VudCB0byBmaXgg
YSBjcmFzaC4KLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNhbGwgaXMgaW52b2tlZCBvbiB0aGUg
bWFpbiB0aHJlYWQgYWZ0ZXIgYWxsIG90aGVyIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkLCB0aGUg
U29ja2V0U3RyZWFtQ2xpZW50Ci0gICAgICAgICAgICAvLyBpcyBhbHJlYWR5IGRlbGV0ZWQuIEFj
Y2Vzc2luZyB0aGUgU29ja2V0U3RyZWFtQ2xpZW50IGluIGRpZE9wZW5Tb2NrZXQoKSB3aWxsIHRo
ZW4gY2F1c2UgYSBjcmFzaC4KLSAgICAgICAgICAgIGlmIChyZWZDb3VudCgpID4gMSkKLSAgICAg
ICAgICAgICAgICBkaWRPcGVuU29ja2V0KCk7Ci0gICAgICAgICAgICBkZXJlZigpOwotICAgICAg
ICB9KTsKLQotICAgICAgICB3aGlsZSAoIW1fc3RvcFRocmVhZCkgewotICAgICAgICAgICAgLy8g
U2VuZCBxdWV1ZWQgZGF0YQotICAgICAgICAgICAgc2VuZERhdGEoY3VybEhhbmRsZSk7Ci0KLSAg
ICAgICAgICAgIC8vIFdhaXQgdW50aWwgc29ja2V0IGhhcyBhdmFpbGFibGUgZGF0YQotICAgICAg
ICAgICAgaWYgKHdhaXRGb3JBdmFpbGFibGVEYXRhKGN1cmxIYW5kbGUsIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMoMjApKSkKLSAgICAgICAgICAgICAgICByZWFkRGF0YShjdXJsSGFuZGxlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmxIYW5kbGUpOwotICAg
IH0pOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFRocmVhZCgpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV93b3JrZXJUaHJlYWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fc3RvcFRocmVhZCA9IHRydWU7Ci0gICAgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24obV93b3JrZXJUaHJlYWQpOwotICAgIG1fd29ya2VyVGhyZWFkID0gMDsKLSAg
ICBkZXJlZigpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkUmVjZWl2ZURhdGEo
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBtX211dGV4UmVjZWl2ZS5s
b2NrKCk7Ci0KLSAgICBhdXRvIHJlY2VpdmVEYXRhID0gV1RGTW92ZShtX3JlY2VpdmVEYXRhKTsK
LQotICAgIG1fbXV0ZXhSZWNlaXZlLnVubG9jaygpOwotCi0gICAgZm9yIChhdXRvJiBzb2NrZXRE
YXRhIDogcmVjZWl2ZURhdGEpIHsKLSAgICAgICAgaWYgKHNvY2tldERhdGEuc2l6ZSA+IDApIHsK
LSAgICAgICAgICAgIGlmIChzdGF0ZSgpID09IE9wZW4pCi0gICAgICAgICAgICAgICAgbV9jbGll
bnQuZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURhdGEoKnRoaXMsIHNvY2tldERhdGEuZGF0YS5nZXQo
KSwgc29ja2V0RGF0YS5zaXplKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwbGF0Zm9y
bUNsb3NlKCk7Ci0gICAgfQotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkT3BlblNv
Y2tldCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fc3RhdGUgPSBP
cGVuOwotCi0gICAgbV9jbGllbnQuZGlkT3BlblNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxjaGFyW10+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlQ29weShjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+
IGNvcHkobmV3IGNoYXJbbGVuZ3RoXSk7Ci0gICAgbWVtY3B5KGNvcHkuZ2V0KCksIGRhdGEsIGxl
bmd0aCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjb3B5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkocmV2
aXNpb24gMjA0NDY2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVC
YXNlLmgiCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRp
ZgorCisjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tl
dFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1I
YW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0
U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorCisgICAgdmlydHVhbCB+
U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworCisgICAgaW50IHBsYXRm
b3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2b2lk
IHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKKworICAgIGJvb2wgcmVhZERhdGEoQ1VSTCopOwor
ICAgIGJvb2wgc2VuZERhdGEoQ1VSTCopOworICAgIGJvb2wgd2FpdEZvckF2YWlsYWJsZURhdGEo
Q1VSTCosIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91dCk7CisKKyAgICB2
b2lkIHN0YXJ0VGhyZWFkKCk7CisgICAgdm9pZCBzdG9wVGhyZWFkKCk7CisKKyAgICB2b2lkIGRp
ZFJlY2VpdmVEYXRhKCk7CisgICAgdm9pZCBkaWRPcGVuU29ja2V0KCk7CisKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY3JlYXRlQ29weShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKTsKKworICAgIHN0cnVjdCBTb2NrZXREYXRhIHsKKyAgICAgICAgU29ja2V0RGF0YShz
dGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiYmIHNvdXJjZSwgaW50IGxlbmd0aCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUoc291cmNlKTsKKyAgICAgICAgICAgIHNpemUgPSBs
ZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBTb2NrZXREYXRhKFNvY2tldERhdGEmJiBvdGhl
cikKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUob3RoZXIuZGF0YSk7Cisg
ICAgICAgICAgICBzaXplID0gb3RoZXIuc2l6ZTsKKyAgICAgICAgICAgIG90aGVyLnNpemUgPSAw
OworICAgICAgICB9CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gZGF0YTsKKyAg
ICAgICAgaW50IHNpemUgeyAwIH07CisgICAgfTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV93
b3JrZXJUaHJlYWQgeyAwIH07CisgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsg
ZmFsc2UgfTsKKyAgICBMb2NrIG1fbXV0ZXhTZW5kOworICAgIExvY2sgbV9tdXRleFJlY2VpdmU7
CisgICAgRGVxdWU8U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKKyAgICBEZXF1ZTxTb2NrZXREYXRh
PiBtX3JlY2VpdmVEYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29j
a2V0U3RyZWFtSGFuZGxlSW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgog
CiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPHdpbnNvY2syLmg+CkBAIC00OCwxNCArNDgs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQ7CiAKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7
CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsIDogcHVibGljIFNvY2tldFN0cmVhbUhhbmRs
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShj
b25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25J
RCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQp
KTsgfQorICAgIHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJM
JiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCh1cmwsIGNsaWVudCkpOyB9
CiAKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGUoKTsKKyAgICB2aXJ0dWFsIH5Tb2Nr
ZXRTdHJlYW1IYW5kbGVJbXBsKCk7CiAKIHByaXZhdGU6Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworICAgIFNvY2tldFN0cmVh
bUhhbmRsZUltcGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKICAg
ICBpbnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRl
OwogICAgIHZvaWQgcGxhdGZvcm1DbG9zZSgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCShyZXZpc2lvbiAyMDQ0NjgpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcDoy
MDQ0NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbEN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIKKwor
I2lmIFVTRShDVVJMKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPG11dGV4Pgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU29ja2V0
U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQorICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1
cmwsIGNsaWVudCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBu
ZXcgY2xpZW50ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIHN0YXJ0VGhyZWFkKCk7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tl
dFN0cmVhbUhhbmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUg
JXAgZGVsZXRlIiwgdGhpcyk7CisgICAgQVNTRVJUKCFtX3dvcmtlclRocmVhZCk7Cit9CisKK2lu
dCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQoreworICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRm
b3JtU2VuZCIsIHRoaXMpOworCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHN0
YXJ0VGhyZWFkKCk7CisKKyAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KGRhdGEsIGxlbmd0aCk7
CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4U2VuZCk7CisgICAgbV9z
ZW5kRGF0YS5hcHBlbmQoU29ja2V0RGF0YSB7IFdURk1vdmUoY29weSksIGxlbmd0aCB9KTsKKwor
ICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9y
bUNsb3NlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0
Zm9ybUNsb3NlIiwgdGhpcyk7CisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAg
c3RvcFRocmVhZCgpOworCisgICAgbV9jbGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMp
OworfQorCitib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZERhdGEoQ1VSTCogY3VybEhhbmRs
ZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IGludCBidWZm
ZXJTaXplID0gMTAyNDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBkYXRhKG5ldyBjaGFy
W2J1ZmZlclNpemVdKTsKKyAgICBzaXplX3QgYnl0ZXNSZWFkID0gMDsKKworICAgIENVUkxjb2Rl
IHJldCA9IGN1cmxfZWFzeV9yZWN2KGN1cmxIYW5kbGUsIGRhdGEuZ2V0KCksIGJ1ZmZlclNpemUs
ICZieXRlc1JlYWQpOworCisgICAgaWYgKHJldCA9PSBDVVJMRV9PSyAmJiBieXRlc1JlYWQgPj0g
MCkgeworICAgICAgICBtX211dGV4UmVjZWl2ZS5sb2NrKCk7CisgICAgICAgIG1fcmVjZWl2ZURh
dGEuYXBwZW5kKFNvY2tldERhdGEgeyBXVEZNb3ZlKGRhdGEpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5
dGVzUmVhZCkgfSk7CisgICAgICAgIG1fbXV0ZXhSZWNlaXZlLnVubG9jaygpOworCisgICAgICAg
IHJlZigpOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgICAg
IGRpZFJlY2VpdmVEYXRhKCk7CisgICAgICAgICAgICBkZXJlZigpOworICAgICAgICB9KTsKKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocmV0ID09IENVUkxFX0FHQUlO
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENVUkwqIGN1cmxIYW5kbGUpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworCisgICAgICAgIG1f
bXV0ZXhTZW5kLmxvY2soKTsKKyAgICAgICAgaWYgKCFtX3NlbmREYXRhLnNpemUoKSkgeworICAg
ICAgICAgICAgbV9tdXRleFNlbmQudW5sb2NrKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBhdXRvIHNlbmREYXRhID0gbV9zZW5kRGF0YS50YWtlRmlyc3QoKTsKKyAg
ICAgICAgbV9tdXRleFNlbmQudW5sb2NrKCk7CisKKyAgICAgICAgaW50IHRvdGFsQnl0ZXNTZW50
ID0gMDsKKyAgICAgICAgd2hpbGUgKHRvdGFsQnl0ZXNTZW50IDwgc2VuZERhdGEuc2l6ZSkgewor
ICAgICAgICAgICAgc2l6ZV90IGJ5dGVzU2VudCA9IDA7CisgICAgICAgICAgICBDVVJMY29kZSBy
ZXQgPSBjdXJsX2Vhc3lfc2VuZChjdXJsSGFuZGxlLCBzZW5kRGF0YS5kYXRhLmdldCgpICsgdG90
YWxCeXRlc1NlbnQsIHNlbmREYXRhLnNpemUgLSB0b3RhbEJ5dGVzU2VudCwgJmJ5dGVzU2VudCk7
CisgICAgICAgICAgICBpZiAocmV0ID09IENVUkxFX09LKQorICAgICAgICAgICAgICAgIHRvdGFs
Qnl0ZXNTZW50ICs9IGJ5dGVzU2VudDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluc2VydCByZW1haW5pbmcgZGF0YSBp
bnRvIHNlbmQgcXVldWUuCisKKyAgICAgICAgaWYgKHRvdGFsQnl0ZXNTZW50IDwgc2VuZERhdGEu
c2l6ZSkgeworICAgICAgICAgICAgY29uc3QgaW50IHJlc3RMZW5ndGggPSBzZW5kRGF0YS5zaXpl
IC0gdG90YWxCeXRlc1NlbnQ7CisgICAgICAgICAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KHNl
bmREYXRhLmRhdGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwgcmVzdExlbmd0aCk7CisKKyAgICAg
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKKyAgICAgICAg
ICAgIG1fc2VuZERhdGEucHJlcGVuZChTb2NrZXREYXRhIHsgV1RGTW92ZShjb3B5KSwgcmVzdExl
bmd0aCB9KTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjp3YWl0Rm9y
QXZhaWxhYmxlRGF0YShDVVJMKiBjdXJsSGFuZGxlLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHNlbGVjdFRpbWVvdXQpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHVzZWMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2Fz
dDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzZWxlY3RUaW1lb3V0KTsKKworICAgIHN0cnVj
dCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgaWYgKHVzZWMgPD0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b25kcygwKSkgeworICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgICAgIHRpbWVvdXQu
dHZfdXNlYyA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGltZW91dC50dl9zZWMgPSB1c2Vj
LmNvdW50KCkgLyAxMDAwMDAwOworICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSB1c2VjLmNvdW50
KCkgJSAxMDAwMDAwOworICAgIH0KKworICAgIGxvbmcgc29ja2V0OworICAgIGlmIChjdXJsX2Vh
c3lfZ2V0aW5mbyhjdXJsSGFuZGxlLCBDVVJMSU5GT19MQVNUU09DS0VULCAmc29ja2V0KSAhPSBD
VVJMRV9PSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmRfc2V0IGZkcmVhZDsKKyAg
ICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1NFVChzb2NrZXQsICZmZHJlYWQpOworICAgIGlu
dCByYyA9IDo6c2VsZWN0KDAsICZmZHJlYWQsIG51bGxwdHIsIG51bGxwdHIsICZ0aW1lb3V0KTsK
KyAgICByZXR1cm4gcmMgPT0gMTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0YXJ0
VGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fd29y
a2VyVGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICByZWYoKTsgLy8gc3RvcFRocmVhZCgp
IHdpbGwgY2FsbCBkZXJlZigpLgorCisgICAgbV93b3JrZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQo
IldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10geworCisgICAgICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworCisgICAgICAgIENVUkwqIGN1cmxIYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwor
CisgICAgICAgIGlmICghY3VybEhhbmRsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxIYW5kbGUsIENVUkxPUFRfVVJMLCBtX3VybC5ob3N0KCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybEhhbmRsZSwgQ1VS
TE9QVF9QT1JULCBtX3VybC5wb3J0KCkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxI
YW5kbGUsIENVUkxPUFRfQ09OTkVDVF9PTkxZLCAxTCk7CisKKyAgICAgICAgLy8gQ29ubmVjdCB0
byBob3N0CisgICAgICAgIGlmIChjdXJsX2Vhc3lfcGVyZm9ybShjdXJsSGFuZGxlKSAhPSBDVVJM
RV9PSykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZWYoKTsKKworICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgICAgICAvLyBDaGVjayByZWZlcmVuY2Ug
Y291bnQgdG8gZml4IGEgY3Jhc2guCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBjYWxsIGlzIGlu
dm9rZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIGFsbCBvdGhlciByZWZlcmVuY2VzIGFyZSBy
ZWxlYXNlZCwgdGhlIFNvY2tldFN0cmVhbUNsaWVudAorICAgICAgICAgICAgLy8gaXMgYWxyZWFk
eSBkZWxldGVkLiBBY2Nlc3NpbmcgdGhlIFNvY2tldFN0cmVhbUNsaWVudCBpbiBkaWRPcGVuU29j
a2V0KCkgd2lsbCB0aGVuIGNhdXNlIGEgY3Jhc2guCisgICAgICAgICAgICBpZiAocmVmQ291bnQo
KSA+IDEpCisgICAgICAgICAgICAgICAgZGlkT3BlblNvY2tldCgpOworICAgICAgICAgICAgZGVy
ZWYoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgd2hpbGUgKCFtX3N0b3BUaHJlYWQpIHsKKyAg
ICAgICAgICAgIC8vIFNlbmQgcXVldWVkIGRhdGEKKyAgICAgICAgICAgIHNlbmREYXRhKGN1cmxI
YW5kbGUpOworCisgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHNvY2tldCBoYXMgYXZhaWxhYmxl
IGRhdGEKKyAgICAgICAgICAgIGlmICh3YWl0Rm9yQXZhaWxhYmxlRGF0YShjdXJsSGFuZGxlLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDIwKSkpCisgICAgICAgICAgICAgICAgcmVhZERhdGEo
Y3VybEhhbmRsZSk7CisgICAgICAgIH0KKworICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJs
SGFuZGxlKTsKKyAgICB9KTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BUaHJl
YWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fd29ya2Vy
VGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOworICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKKyAgICBtX3dvcmtlclRo
cmVhZCA9IDA7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRp
ZFJlY2VpdmVEYXRhKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9t
dXRleFJlY2VpdmUubG9jaygpOworCisgICAgYXV0byByZWNlaXZlRGF0YSA9IFdURk1vdmUobV9y
ZWNlaXZlRGF0YSk7CisKKyAgICBtX211dGV4UmVjZWl2ZS51bmxvY2soKTsKKworICAgIGZvciAo
YXV0byYgc29ja2V0RGF0YSA6IHJlY2VpdmVEYXRhKSB7CisgICAgICAgIGlmIChzb2NrZXREYXRh
LnNpemUgPiAwKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUoKSA9PSBPcGVuKQorICAgICAgICAg
ICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCBzb2NrZXRE
YXRhLmRhdGEuZ2V0KCksIHNvY2tldERhdGEuc2l6ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgcGxhdGZvcm1DbG9zZSgpOworICAgIH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmRpZE9wZW5Tb2NrZXQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBtX3N0YXRlID0gT3BlbjsKKworICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRo
aXMpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNy
ZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Y2hhcltdPiBjb3B5KG5ldyBjaGFyW2xlbmd0aF0pOworICAgIG1lbWNweShjb3B5Lmdl
dCgpLCBkYXRhLCBsZW5ndGgpOworCisgICAgcmV0dXJuIFdURk1vdmUoY29weSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsQ3VybC5jcHAJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbC5oIgogCiAjaWYgVVNFKENVUkwpCiAKQEAgLTQ0LDIxICs0NCwyMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKLSAgICA6
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UodXJsLCBjbGllbnQpCitTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICA6IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVu
dCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50
ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IHN0YXJ0VGhyZWFkKCk7CiB9CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhh
bmRsZSgpCitTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCgp
CiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhp
cyk7CiAgICAgQVNTRVJUKCFtX3dvcmtlclRocmVhZCk7CiB9CiAKLWludCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50IFNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRm
b3JtU2VuZCIsIHRoaXMpOwogCkBAIC03NCw3ICs3NCw3IEBAIGludCBTb2NrZXRTdHJlYW1IYW5k
bGU6OnBsYXRmb3JtU2VuZChjb24KICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi12b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnBsYXRmb3JtQ2xvc2UoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFu
ZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0aGlzKTsKIApAQCAtODUsNyArODUsNyBAQCB2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiAgICAgbV9jbGllbnQuZGlkQ2xvc2VT
b2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZERh
dGEoQ1VSTCogY3VybEhhbmRsZSkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZERh
dGEoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApA
QCAtMTE2LDcgKzExNiw3IEBAIGJvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YShDVVJM
KiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5k
RGF0YShDVVJMKiBjdXJsSGFuZGxlKQorYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzZW5k
RGF0YShDVVJMKiBjdXJsSGFuZGxlKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
CkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENV
UkwqIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6d2Fp
dEZvckF2YWlsYWJsZURhdGEoQ1VSTCogY3VybEhhbmRsZSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyBzZWxlY3RUaW1lb3V0KQorYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3YWl0Rm9y
QXZhaWxhYmxlRGF0YShDVVJMKiBjdXJsSGFuZGxlLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHNlbGVjdFRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTE4
Miw3ICsxODIsNyBAQCBib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsCiAg
ICAgcmV0dXJuIHJjID09IDE7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRo
cmVhZCgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OnN0YXJ0VGhyZWFkKCkKICAgICB9KTsKIH0KIAotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OnN0b3BUaHJlYWQoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpz
dG9wVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNDUsNyAr
MjQ1LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BUaHJlYWQoKQogICAgIGRlcmVm
KCk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRSZWNlaXZlRGF0YSgpCit2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmRpZFJlY2VpdmVEYXRhKCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OmRpZFJlY2VpdmVEYXRhKAogICAgIH0KIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmRpZE9wZW5Tb2NrZXQoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpkaWRPcGVu
U29ja2V0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNzMsNyArMjcz
LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQoKQogICAgIG1fY2xp
ZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Y2hh
cltdPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKK3N0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OmNyZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Y2hhcltdPiBjb3B5KG5ldyBjaGFyW2xlbmd0aF0pOwogICAgIG1lbWNweShjb3B5
LmdldCgpLCBkYXRhLCBsZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24g
MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZS5oCShub25leGlzdGVudCkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KLSNpZiBV
U0UoU09VUCkKLQotI2luY2x1ZGUgIlNlc3Npb25JRC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUVycm9yOwotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50OwotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgZmluYWwgOiBwdWJsaWMgUmVmQ291
bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25z
dCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmLCBTZXNzaW9uSUQpOwotICAgIHN0YXRp
YyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRs
ZSgpOwotCi1wcml2YXRlOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKLQotICAgIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUNsb3NlKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7
Ci0gICAgdm9pZCBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0KLSAgICBzdGF0
aWMgdm9pZCBjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiwgR0FzeW5jUmVzdWx0Kiwg
U29ja2V0U3RyZWFtSGFuZGxlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVhZFJlYWR5Q2FsbGJhY2so
R0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3RyZWFtSGFuZGxlKik7Ci0gICAg
c3RhdGljIGdib29sZWFuIHdyaXRlUmVhZHlDYWxsYmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0q
LCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKLQotICAgIHZvaWQgY29ubmVjdGVkKEdSZWZQdHI8R1Nv
Y2tldENvbm5lY3Rpb24+JiYpOwotICAgIHZvaWQgcmVhZEJ5dGVzKGdzc2l6ZSk7Ci0gICAgdm9p
ZCBkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yJiYpOwotICAgIHZvaWQgd3JpdGVSZWFkeSgpOwot
Ci0gICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOwotICAg
IEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOwotICAgIEdSZWZQdHI8R1BvbGxh
YmxlT3V0cHV0U3RyZWFtPiBtX291dHB1dFN0cmVhbTsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IG1f
d3JpdGVSZWFkeVNvdXJjZTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJs
ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBtX3JlYWRCdWZmZXI7Ci19OwotCi19ICAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aAkocmV2aXNpb24gMjA0NDY2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0
cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNv
Y2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKKworI2lmIFVTRShTT1VQKQorCisjaW5jbHVkZSAiU2Vz
c2lvbklELmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29ja2V0U3RyZWFt
RXJyb3I7CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0
cmVhbUhhbmRsZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4s
IHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudCYsIFNlc3Npb25JRCk7CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+
IGNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiosIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwor
CisgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgU29j
a2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwor
CisgICAgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYmVn
aW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICB2b2lkIHN0b3BXYWl0aW5nRm9y
U29ja2V0V3JpdGFiaWxpdHkoKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENhbGxiYWNr
KEdTb2NrZXRDbGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAg
ICBzdGF0aWMgdm9pZCByZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1
bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd3JpdGVSZWFk
eUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRsZSopOwor
CisgICAgdm9pZCBjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJik7CisgICAg
dm9pZCByZWFkQnl0ZXMoZ3NzaXplKTsKKyAgICB2b2lkIGRpZEZhaWwoU29ja2V0U3RyZWFtRXJy
b3ImJik7CisgICAgdm9pZCB3cml0ZVJlYWR5KCk7CisKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25u
ZWN0aW9uPiBtX3NvY2tldENvbm5lY3Rpb247CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1f
aW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHUG9sbGFibGVPdXRwdXRTdHJlYW0+IG1fb3V0cHV0
U3RyZWFtOworICAgIEdSZWZQdHI8R1NvdXJjZT4gbV93cml0ZVJlYWR5U291cmNlOworICAgIEdS
ZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxj
aGFyW10+IG1fcmVhZEJ1ZmZlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZS5oIgogCiAjaWYgVVNFKFNPVVApCiAKQEAgLTQ1LDE1ICs0NSwxNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTb2NrZXRTdHJlYW1FcnJvcjsKIGNsYXNzIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudDsKIAotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlIGZpbmFsIDogcHVi
bGljIFJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFuZGxlPiwgcHVibGljIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UgeworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCBmaW5hbCA6IHB1YmxpYyBT
b2NrZXRTdHJlYW1IYW5kbGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U29ja2V0U3RyZWFt
SGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiwgU2Vz
c2lvbklEKTsKICAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKEdTb2Nr
ZXRDb25uZWN0aW9uKiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKLSAgICB2aXJ0dWFs
IH5Tb2NrZXRTdHJlYW1IYW5kbGUoKTsKKyAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsKCk7CiAKIHByaXZhdGU6Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworICAgIFNvY2tldFN0cmVhbUhhbmRsZUltcGwoY29u
c3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKICAgICBpbnQgcGxhdGZvcm1T
ZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGxh
dGZvcm1DbG9zZSgpIG92ZXJyaWRlOwpAQCAtNjEsOSArNjEsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKICAgICB2b2lkIHN0b3BXYWl0
aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENh
bGxiYWNrKEdTb2NrZXRDbGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUq
KTsKLSAgICBzdGF0aWMgdm9pZCByZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5
bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gd3Jp
dGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRs
ZSopOworICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqLCBH
QXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKik7CisgICAgc3RhdGljIHZvaWQg
cmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCopOworICAgIHN0YXRpYyBnYm9vbGVhbiB3cml0ZVJlYWR5Q2FsbGJhY2so
R1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCopOwogCiAgICAg
dm9pZCBjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJik7CiAgICAgdm9pZCBy
ZWFkQnl0ZXMoZ3NzaXplKTsKQEAgLTc4LDYgKzc4LDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Y2hhcltdPiBtX3JlYWRCdWZmZXI7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkocmV2aXNpb24gMjA0NDY2KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHA6
MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0U3Ry
ZWFtSGFuZGxlLmgiCisKKyNpZiBVU0UoU09VUCkKKworI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgorI2luY2x1ZGUg
IlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUg
UkVBRF9CVUZGRVJfU0laRSAxMDI0CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFNvY2tl
dFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCit7CisgICAgUmVm
PFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1I
YW5kbGUodXJsLCBjbGllbnQpKTsKKworICAgIHVuc2lnbmVkIHBvcnQgPSB1cmwuaGFzUG9ydCgp
ID8gdXJsLnBvcnQoKSA6ICh1cmwucHJvdG9jb2xJcygid3NzIikgPyA0NDMgOiA4MCk7CisgICAg
R1JlZlB0cjxHU29ja2V0Q2xpZW50PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRf
Y2xpZW50X25ldygpKTsKKyAgICBpZiAodXJsLnByb3RvY29sSXMoIndzcyIpKQorICAgICAgICBn
X3NvY2tldF9jbGllbnRfc2V0X3Rscyhzb2NrZXRDbGllbnQuZ2V0KCksIFRSVUUpOworICAgIFJl
ZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFNvY2tldFN0cmVhbUhhbmRsZSA9IHNvY2tl
dC5jb3B5UmVmKCk7CisgICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3luYyhz
b2NrZXRDbGllbnQuZ2V0KCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgcG9ydCwgc29ja2V0
LT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1Jl
YWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVhbUhh
bmRsZS5sZWFrUmVmKCkpOworICAgIHJldHVybiBzb2NrZXQ7Cit9CisKK1JlZjxTb2NrZXRTdHJl
YW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKEdTb2NrZXRDb25uZWN0aW9uKiBz
b2NrZXRDb25uZWN0aW9uLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKK3sKKyAg
ICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3IFNvY2tldFN0
cmVhbUhhbmRsZShVUkwoKSwgY2xpZW50KSk7CisKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0
aW9uPiBjb25uZWN0aW9uID0gc29ja2V0Q29ubmVjdGlvbjsKKyAgICBzb2NrZXQtPmNvbm5lY3Rl
ZChXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKKyAgICByZXR1cm4gc29ja2V0OworfQorCitTb2NrZXRT
dHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVy
bCwgY2xpZW50KQorICAgICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9u
ZXcoKSkpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNs
aWVudCAlcCIsIHRoaXMsICZtX2NsaWVudCk7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZTo6flNv
Y2tldFN0cmVhbUhhbmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5k
bGUgJXAgZGVsZXRlIiwgdGhpcyk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjb25u
ZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJiBzb2NrZXRDb25uZWN0aW9uKQorewor
ICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFdURk1vdmUoc29ja2V0Q29ubmVjdGlvbik7CisgICAg
bV9vdXRwdXRTdHJlYW0gPSBHX1BPTExBQkxFX09VVFBVVF9TVFJFQU0oZ19pb19zdHJlYW1fZ2V0
X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSkpOwor
ICAgIG1faW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RS
RUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpOworICAgIG1fcmVhZEJ1ZmZlciA9IHN0ZDo6
bWFrZV91bmlxdWU8Y2hhcltdPihSRUFEX0JVRkZFUl9TSVpFKTsKKworICAgIFJlZlB0cjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZ19pbnB1dF9zdHJlYW1f
cmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZ2V0KCksIFJFQURf
QlVGRkVSX1NJWkUsIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkUmVhZHlDYWxs
YmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKworICAgIG1fc3RhdGUgPSBPcGVuOwor
ICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRoaXMpOworfQorCit2b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2FsbGJhY2soR1NvY2tldENsaWVudCogY2xpZW50LCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAg
UmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRs
ZSk7CisKKyAgICAvLyBBbHdheXMgZmluaXNoIHRoZSBjb25uZWN0aW9uLCBldmVuIGlmIHRoaXMg
U29ja2V0U3RyZWFtSGFuZGxlIHdhcyBjYW5jZWxsZWQgZWFybGllci4KKyAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gc29ja2V0
Q29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2Zp
bmlzaChjbGllbnQsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisKKyAgICAvLyBUaGUgU29j
a2V0U3RyZWFtSGFuZGxlIGhhcyBiZWVuIGNhbmNlbGxlZCwgc28ganVzdCBjbG9zZSB0aGUgY29u
bmVjdGlvbiwgaWdub3JpbmcgZXJyb3JzLgorICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNl
bGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChzb2NrZXRD
b25uZWN0aW9uKQorICAgICAgICAgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oc29j
a2V0Q29ubmVjdGlvbi5nZXQoKSksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGVycm9yKQorICAgICAgICBoYW5kbGUtPmRpZEZhaWwoU29ja2V0
U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7CisgICAgZWxzZQorICAg
ICAgICBoYW5kbGUtPmNvbm5lY3RlZChXVEZNb3ZlKHNvY2tldENvbm5lY3Rpb24pKTsKK30KKwor
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRCeXRlcyhnc3NpemUgYnl0ZXNSZWFkKQorewor
ICAgIGlmICghYnl0ZXNSZWFkKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUaGUgY2xpZW50IGNhbiBjbG9zZSB0aGUgaGFuZGxlLCBwb3RlbnRp
YWxseSByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UuCisgICAgUmVmUHRyPFNvY2tldFN0cmVh
bUhhbmRsZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBtX2NsaWVudC5kaWRSZWNlaXZlU29j
a2V0U3RyZWFtRGF0YSgqdGhpcywgbV9yZWFkQnVmZmVyLmdldCgpLCBieXRlc1JlYWQpOworICAg
IGlmIChtX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMo
bV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JVRkZFUl9TSVpF
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwg
cHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOworICAgIH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1
bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAgUmVmUHRyPFNv
Y2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRsZSk7CisKKyAg
ICAvLyBBbHdheXMgZmluaXNoIHRoZSByZWFkLCBldmVuIGlmIHRoaXMgU29ja2V0U3RyZWFtSGFu
ZGxlIHdhcyBjYW5jZWxsZWQgZWFybGllci4KKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKHN0
cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgaWYgKGdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5jZWxsYWJsZS5nZXQoKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChlcnJvcikKKyAgICAgICAgaGFuZGxlLT5kaWRGYWlsKFNvY2tldFN0cmVh
bUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOworICAgIGVsc2UKKyAgICAgICAg
aGFuZGxlLT5yZWFkQnl0ZXMoYnl0ZXNSZWFkKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3ImJiBlcnJvcikKK3sKKyAgICBtX2NsaWVudC5k
aWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5KCkKK3sKKyAgICAvLyBXZSBubyBsb25nZXIgaGF2
ZSBidWZmZXJlZCBkYXRhLCBzbyBzdG9wIHdhaXRpbmcgZm9yIHRoZSBzb2NrZXQgdG8gYmUgd3Jp
dGFibGUuCisgICAgaWYgKCFidWZmZXJlZEFtb3VudCgpKSB7CisgICAgICAgIHN0b3BXYWl0aW5n
Rm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNl
bmRQZW5kaW5nRGF0YSgpOworfQorCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNl
bmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNv
Y2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybVNlbmQiLCB0aGlzKTsKKyAgICBpZiAoIW1fb3V0
cHV0U3RyZWFtIHx8ICFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICBnc3NpemUgd3JpdHRlbiA9IGdfcG9sbGFibGVfb3V0cHV0
X3N0cmVhbV93cml0ZV9ub25ibG9ja2luZyhtX291dHB1dFN0cmVhbS5nZXQoKSwgZGF0YSwgbGVu
Z3RoLCBtX2NhbmNlbGxhYmxlLmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9S
LCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKSkKKyAgICAgICAgICAgIGJlZ2luV2FpdGluZ0ZvclNv
Y2tldFdyaXRhYmlsaXR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpZEZhaWwoU29j
a2V0U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIC8vIElmIHdlIGRpZCBub3Qgc2VuZCBhbGwgdGhlIGJ5dGVz
IHdlIHdlcmUgZ2l2ZW4sIHdlIGtub3cgdGhhdAorICAgIC8vIFNvY2tldFN0cmVhbUhhbmRsZUJh
c2Ugd2lsbCBuZWVkIHRvIHNlbmQgbW9yZSBpbiB0aGUgZnV0dXJlLgorICAgIGlmICh3cml0dGVu
IDwgbGVuZ3RoKQorICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOwor
CisgICAgcmV0dXJuIHdyaXR0ZW47Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0
Zm9ybUNsb3NlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBw
bGF0Zm9ybUNsb3NlIiwgdGhpcyk7CisgICAgLy8gV2UgY2FuY2VsIHRoaXMgaGFuZGxlIGZpcnN0
IHRvIGRpc2FibGUgYWxsIGNhbGxiYWNrcy4KKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2Nh
bmNlbGxhYmxlLmdldCgpKTsKKyAgICBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7
CisKKyAgICBpZiAobV9zb2NrZXRDb25uZWN0aW9uKSB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8
R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0obV9z
b2NrZXRDb25uZWN0aW9uLmdldCgpKSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKTsKKyAgICAg
ICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvcihlcnJv
ci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgbV9zb2NrZXRDb25uZWN0aW9uID0g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBtX291dHB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9p
bnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9yZWFkQnVmZmVyID0gbnVsbHB0cjsKKworICAg
IG1fY2xpZW50LmRpZENsb3NlU29ja2V0U3RyZWFtKCp0aGlzKTsKK30KKwordm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OmJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3sKKyAgICBp
ZiAobV93cml0ZVJlYWR5U291cmNlKSAvLyBBbHJlYWR5IHdhaXRpbmcuCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fd3JpdGVSZWFkeVNvdXJjZSA9IGFkb3B0R1JlZihnX3BvbGxhYmxlX291dHB1
dF9zdHJlYW1fY3JlYXRlX3NvdXJjZShtX291dHB1dFN0cmVhbS5nZXQoKSwgbV9jYW5jZWxsYWJs
ZS5nZXQoKSkpOworICAgIHJlZigpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3dyaXRl
UmVhZHlTb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHdyaXRlUmVh
ZHlDYWxsYmFjayksIHRoaXMsCisgICAgICAgIFtdKGdwb2ludGVyIGhhbmRsZSkgeyBzdGF0aWNf
Y2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihoYW5kbGUpLT5kZXJlZigpOyB9KTsKKyAgICBnX3Nv
dXJjZV9hdHRhY2gobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRf
dGhyZWFkX2RlZmF1bHQoKSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdG9wV2Fp
dGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3sKKyAgICBpZiAoIW1fd3JpdGVSZWFkeVNvdXJj
ZSkgLy8gTm90IHdhaXRpbmcuCisgICAgICAgIHJldHVybjsKKworICAgIGdfc291cmNlX2Rlc3Ry
b3kobV93cml0ZVJlYWR5U291cmNlLmdldCgpKTsKKyAgICBtX3dyaXRlUmVhZHlTb3VyY2UgPSBu
dWxscHRyOworfQorCitnYm9vbGVhbiBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlUmVhZHlDYWxs
YmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0qLCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkK
K3sKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoaGFuZGxlLT5tX2NhbmNlbGxh
YmxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKKworICAgIGhhbmRs
ZS0+d3JpdGVSZWFkeSgpOworICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhh
bmRsZUltcGxTb3VwLmNwcAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDE0IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZUltcGwuaCIKIAogI2lmIFVTRShTT1VQKQogCi0jaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCiAjaW5jbHVkZSAi
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8
Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC00OCw5ICs0OCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvY2tldFN0cmVh
bUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCitSZWY8U29ja2V0U3RyZWFt
SGFuZGxlPiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCiB7Ci0gICAgUmVmPFNv
Y2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5k
bGUodXJsLCBjbGllbnQpKTsKKyAgICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlSW1wbD4gc29ja2V0
ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKHVybCwgY2xpZW50KSk7CiAK
ICAgICB1bnNpZ25lZCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/IHVybC5wb3J0KCkgOiAodXJsLnBy
b3RvY29sSXMoIndzcyIpID8gNDQzIDogODApOwogICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4g
c29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7CkBAIC01OSwz
OCArNTksMzggQEAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZAogICAg
IFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFNvY2tldFN0cmVhbUhhbmRsZSA9IHNv
Y2tldC5jb3B5UmVmKCk7CiAgICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3lu
Yyhzb2NrZXRDbGllbnQuZ2V0KCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgcG9ydCwgc29j
a2V0LT5tX2NhbmNlbGxhYmxlLmdldCgpLAogICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVh
bUhhbmRsZS5sZWFrUmVmKCkpOwotICAgIHJldHVybiBzb2NrZXQ7CisgICAgcmV0dXJuIFdURk1v
dmUoc29ja2V0KTsKIH0KIAotUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFu
ZGxlOjpjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qIHNvY2tldENvbm5lY3Rpb24sIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQorUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y3JlYXRlKEdTb2NrZXRDb25uZWN0aW9uKiBzb2NrZXRDb25uZWN0
aW9uLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKIHsKLSAgICBSZWY8U29ja2V0
U3RyZWFtSGFuZGxlPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZShV
UkwoKSwgY2xpZW50KSk7CisgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZUltcGw+IHNvY2tldCA9
IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlSW1wbChVUkwoKSwgY2xpZW50KSk7CiAK
ICAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gc29ja2V0Q29ubmVj
dGlvbjsKICAgICBzb2NrZXQtPmNvbm5lY3RlZChXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKLSAgICBy
ZXR1cm4gc29ja2V0OworICAgIHJldHVybiBXVEZNb3ZlKHNvY2tldCk7CiB9CiAKLVNvY2tldFN0
cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJl
YW1IYW5kbGVDbGllbnQmIGNsaWVudCkKLSAgICA6IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UodXJs
LCBjbGllbnQpCitTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICA6
IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCkKICAgICAsIG1fY2FuY2VsbGFibGUoYWRv
cHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0
U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAiLCB0aGlzLCAmbV9jbGllbnQpOwogfQogCi1T
b2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQorU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6flNvY2tldFN0cmVhbUhhbmRsZUltcGwoKQogewogICAgIExPRyhOZXR3b3JrLCAi
U29ja2V0U3RyZWFtSGFuZGxlICVwIGRlbGV0ZSIsIHRoaXMpOwogfQogCi12b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6Y29ubmVjdGVkKEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+JiYgc29ja2V0
Q29ubmVjdGlvbikKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29ubmVjdGVkKEdSZWZQ
dHI8R1NvY2tldENvbm5lY3Rpb24+JiYgc29ja2V0Q29ubmVjdGlvbikKIHsKICAgICBtX3NvY2tl
dENvbm5lY3Rpb24gPSBXVEZNb3ZlKHNvY2tldENvbm5lY3Rpb24pOwogICAgIG1fb3V0cHV0U3Ry
ZWFtID0gR19QT0xMQUJMRV9PVVRQVVRfU1RSRUFNKGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3Ry
ZWFtKEdfSU9fU1RSRUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpKTsKICAgICBtX2lucHV0
U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX3NvY2tl
dENvbm5lY3Rpb24uZ2V0KCkpKTsKICAgICBtX3JlYWRCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PGNoYXJbXT4oUkVBRF9CVUZGRVJfU0laRSk7CiAKLSAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFu
ZGxlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMo
bV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JVRkZFUl9TSVpF
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZFJlYWR5Q2FsbGJhY2spLCBwcm90
ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGU6OmNvbm5lY3RlZChHUmVmUAogICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJl
YW0oKnRoaXMpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2FsbGJh
Y2soR1NvY2tldENsaWVudCogY2xpZW50LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3Ry
ZWFtSGFuZGxlKiBoYW5kbGUpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNvbm5lY3Rl
ZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqIGNsaWVudCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGwqIGhhbmRsZSkKIHsKICAgICBSZWZQdHI8U29ja2V0U3RyZWFt
SGFuZGxlPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYoaGFuZGxlKTsKIApAQCAtMTE5LDcgKzEx
OSw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjb25uZWN0ZWRDYWxsYmEKICAgICAgICAg
aGFuZGxlLT5jb25uZWN0ZWQoV1RGTW92ZShzb2NrZXRDb25uZWN0aW9uKSk7CiB9CiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkQnl0ZXMoZ3NzaXplIGJ5dGVzUmVhZCkKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZEJ5dGVzKGdzc2l6ZSBieXRlc1JlYWQpCiB7CiAgICAg
aWYgKCFieXRlc1JlYWQpIHsKICAgICAgICAgY2xvc2UoKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCB2
b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKGdzc2l6CiAgICAgfQogfQogCi12b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJl
YW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKK3Zv
aWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFt
KiBzdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKiBo
YW5kbGUpCiB7CiAgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9
IGFkb3B0UmVmKGhhbmRsZSk7CiAKQEAgLTE1MiwxMiArMTUyLDEyIEBAIHZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZWFkUmVhZHlDYWxsYmEKICAgICAgICAgaGFuZGxlLT5yZWFkQnl0ZXMoYnl0
ZXNSZWFkKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZEZhaWwoU29ja2V0U3Ry
ZWFtRXJyb3ImJiBlcnJvcikKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkRmFpbChT
b2NrZXRTdHJlYW1FcnJvciYmIGVycm9yKQogewogICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRT
dHJlYW0oKnRoaXMsIFdURk1vdmUoZXJyb3IpKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OndyaXRlUmVhZHkoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3cml0ZVJlYWR5
KCkKIHsKICAgICAvLyBXZSBubyBsb25nZXIgaGF2ZSBidWZmZXJlZCBkYXRhLCBzbyBzdG9wIHdh
aXRpbmcgZm9yIHRoZSBzb2NrZXQgdG8gYmUgd3JpdGFibGUuCiAgICAgaWYgKCFidWZmZXJlZEFt
b3VudCgpKSB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6Ondy
aXRlUmVhZHkoKQogICAgIHNlbmRQZW5kaW5nRGF0YSgpOwogfQogCi1pbnQgU29ja2V0U3RyZWFt
SGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK2ludCBT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0
Zm9ybVNlbmQiLCB0aGlzKTsKICAgICBpZiAoIW1fb3V0cHV0U3RyZWFtIHx8ICFkYXRhKQpAQCAt
MTg1LDE0ICsxODUsMTQgQEAgaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNv
bgogICAgIH0KIAogICAgIC8vIElmIHdlIGRpZCBub3Qgc2VuZCBhbGwgdGhlIGJ5dGVzIHdlIHdl
cmUgZ2l2ZW4sIHdlIGtub3cgdGhhdAotICAgIC8vIFNvY2tldFN0cmVhbUhhbmRsZUJhc2Ugd2ls
bCBuZWVkIHRvIHNlbmQgbW9yZSBpbiB0aGUgZnV0dXJlLgorICAgIC8vIFNvY2tldFN0cmVhbUhh
bmRsZSB3aWxsIG5lZWQgdG8gc2VuZCBtb3JlIGluIHRoZSBmdXR1cmUuCiAgICAgaWYgKHdyaXR0
ZW4gPCBsZW5ndGgpCiAgICAgICAgIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7
CiAKICAgICByZXR1cm4gd3JpdHRlbjsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBs
YXRmb3JtQ2xvc2UoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3Nl
KCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybUNs
b3NlIiwgdGhpcyk7CiAgICAgLy8gV2UgY2FuY2VsIHRoaXMgaGFuZGxlIGZpcnN0IHRvIGRpc2Fi
bGUgYWxsIGNhbGxiYWNrcy4KQEAgLTIxNCwxOSArMjE0LDIwIEBAIHZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlOjpwbGF0Zm9ybUNsb3NlKCkKICAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVh
bSgqdGhpcyk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdGb3JT
b2NrZXRXcml0YWJpbGl0eSgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmJlZ2luV2Fp
dGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKIHsKICAgICBpZiAobV93cml0ZVJlYWR5U291cmNl
KSAvLyBBbHJlYWR5IHdhaXRpbmcuCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fd3JpdGVSZWFk
eVNvdXJjZSA9IGFkb3B0R1JlZihnX3BvbGxhYmxlX291dHB1dF9zdHJlYW1fY3JlYXRlX3NvdXJj
ZShtX291dHB1dFN0cmVhbS5nZXQoKSwgbV9jYW5jZWxsYWJsZS5nZXQoKSkpOwogICAgIHJlZigp
OwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHdyaXRlUmVhZHlDYWxsYmFjayksIHRoaXMsCi0g
ICAgICAgIFtdKGdwb2ludGVyIGhhbmRsZSkgeyBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5k
bGUqPihoYW5kbGUpLT5kZXJlZigpOyB9KTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV93
cml0ZVJlYWR5U291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3cml0
ZVJlYWR5Q2FsbGJhY2spLCB0aGlzLCBbXShncG9pbnRlciBoYW5kbGUpIHsgCisgICAgICAgIHN0
YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZUltcGwqPihoYW5kbGUpLT5kZXJlZigpOworICAg
IH0pOwogICAgIGdfc291cmNlX2F0dGFjaChtX3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCksIGdfbWFp
bl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKQordm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKIHsKICAgICBp
ZiAoIW1fd3JpdGVSZWFkeVNvdXJjZSkgLy8gTm90IHdhaXRpbmcuCiAgICAgICAgIHJldHVybjsK
QEAgLTIzNSw3ICsyMzYsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFdhaXRpbmdG
b3JTCiAgICAgbV93cml0ZVJlYWR5U291cmNlID0gbnVsbHB0cjsKIH0KIAotZ2Jvb2xlYW4gU29j
a2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJhY2soR1BvbGxhYmxlT3V0cHV0U3RyZWFt
KiwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCitnYm9vbGVhbiBTb2NrZXRTdHJlYW1IYW5k
bGVJbXBsOjp3cml0ZVJlYWR5Q2FsbGJhY2soR1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlKQogewogICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2Nh
bmNlbGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gR19T
T1VSQ0VfUkVNT1ZFOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcAkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUhhbmRsZVNvdXAuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjQ5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVh
bUhhbmRsZS5oIgotCi0jaWYgVVNFKFNPVVApCi0KLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtRXJyb3IuaCIKLSNpbmNsdWRlICJT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVk
ZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9H
VW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIFJF
QURfQlVGRkVSX1NJWkUgMTAyNAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxTb2NrZXRT
dHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lvbklEKQotewotICAgIFJlZjxT
b2NrZXRTdHJlYW1IYW5kbGU+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFu
ZGxlKHVybCwgY2xpZW50KSk7Ci0KLSAgICB1bnNpZ25lZCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/
IHVybC5wb3J0KCkgOiAodXJsLnByb3RvY29sSXMoIndzcyIpID8gNDQzIDogODApOwotICAgIEdS
ZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2Ns
aWVudF9uZXcoKSk7Ci0gICAgaWYgKHVybC5wcm90b2NvbElzKCJ3c3MiKSkKLSAgICAgICAgZ19z
b2NrZXRfY2xpZW50X3NldF90bHMoc29ja2V0Q2xpZW50LmdldCgpLCBUUlVFKTsKLSAgICBSZWY8
U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRTb2NrZXRTdHJlYW1IYW5kbGUgPSBzb2NrZXQu
Y29weVJlZigpOwotICAgIGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfYXN5bmMoc29j
a2V0Q2xpZW50LmdldCgpLCB1cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHBvcnQsIHNvY2tldC0+
bV9jYW5jZWxsYWJsZS5nZXQoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFk
eUNhbGxiYWNrPihjb25uZWN0ZWRDYWxsYmFjayksICZwcm90ZWN0ZWRTb2NrZXRTdHJlYW1IYW5k
bGUubGVha1JlZigpKTsKLSAgICByZXR1cm4gc29ja2V0OwotfQotCi1SZWY8U29ja2V0U3RyZWFt
SGFuZGxlPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiogc29j
a2V0Q29ubmVjdGlvbiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCi17Ci0gICAg
UmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJl
YW1IYW5kbGUoVVJMKCksIGNsaWVudCkpOwotCi0gICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlv
bj4gY29ubmVjdGlvbiA9IHNvY2tldENvbm5lY3Rpb247Ci0gICAgc29ja2V0LT5jb25uZWN0ZWQo
V1RGTW92ZShjb25uZWN0aW9uKSk7Ci0gICAgcmV0dXJuIHNvY2tldDsKLX0KLQotU29ja2V0U3Ry
ZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVh
bUhhbmRsZUNsaWVudCYgY2xpZW50KQotICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmws
IGNsaWVudCkKLSAgICAsIG1fY2FuY2VsbGFibGUoYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3
KCkpKQotewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGll
bnQgJXAiLCB0aGlzLCAmbV9jbGllbnQpOwotfQotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2Nr
ZXRTdHJlYW1IYW5kbGUoKQotewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxl
ICVwIGRlbGV0ZSIsIHRoaXMpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVj
dGVkKEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+JiYgc29ja2V0Q29ubmVjdGlvbikKLXsKLSAg
ICBtX3NvY2tldENvbm5lY3Rpb24gPSBXVEZNb3ZlKHNvY2tldENvbm5lY3Rpb24pOwotICAgIG1f
b3V0cHV0U3RyZWFtID0gR19QT0xMQUJMRV9PVVRQVVRfU1RSRUFNKGdfaW9fc3RyZWFtX2dldF9v
dXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpKTsKLSAg
ICBtX2lucHV0U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVB
TShtX3NvY2tldENvbm5lY3Rpb24uZ2V0KCkpKTsKLSAgICBtX3JlYWRCdWZmZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPGNoYXJbXT4oUkVBRF9CVUZGRVJfU0laRSk7Ci0KLSAgICBSZWZQdHI8U29ja2V0
U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGdfaW5wdXRfc3RyZWFtX3Jl
YWRfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JV
RkZFUl9TSVpFLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCi0gICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZFJlYWR5Q2FsbGJh
Y2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Ci0KLSAgICBtX3N0YXRlID0gT3BlbjsKLSAg
ICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKLX0KLQotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OmNvbm5lY3RlZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqIGNsaWVudCwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQotewotICAgIFJl
ZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZihoYW5kbGUp
OwotCi0gICAgLy8gQWx3YXlzIGZpbmlzaCB0aGUgY29ubmVjdGlvbiwgZXZlbiBpZiB0aGlzIFNv
Y2tldFN0cmVhbUhhbmRsZSB3YXMgY2FuY2VsbGVkIGVhcmxpZXIuCi0gICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycm9yOwotICAgIEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+IHNvY2tldENv
bm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9maW5p
c2goY2xpZW50LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotCi0gICAgLy8gVGhlIFNvY2tl
dFN0cmVhbUhhbmRsZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHNvIGp1c3QgY2xvc2UgdGhlIGNvbm5l
Y3Rpb24sIGlnbm9yaW5nIGVycm9ycy4KLSAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQoaGFuZGxlLT5tX2NhbmNlbGxhYmxlLmdldCgpKSkgewotICAgICAgICBpZiAoc29ja2V0Q29u
bmVjdGlvbikKLSAgICAgICAgICAgIGdfaW9fc3RyZWFtX2Nsb3NlKEdfSU9fU1RSRUFNKHNvY2tl
dENvbm5lY3Rpb24uZ2V0KCkpLCBudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChlcnJvcikKLSAgICAgICAgaGFuZGxlLT5kaWRGYWlsKFNvY2tldFN0
cmVhbUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOwotICAgIGVsc2UKLSAgICAg
ICAgaGFuZGxlLT5jb25uZWN0ZWQoV1RGTW92ZShzb2NrZXRDb25uZWN0aW9uKSk7Ci19Ci0KLXZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkQnl0ZXMoZ3NzaXplIGJ5dGVzUmVhZCkKLXsKLSAg
ICBpZiAoIWJ5dGVzUmVhZCkgewotICAgICAgICBjbG9zZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gVGhlIGNsaWVudCBjYW4gY2xvc2UgdGhlIGhhbmRsZSwgcG90ZW50aWFs
bHkgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlLgotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1I
YW5kbGU+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9jbGllbnQuZGlkUmVjZWl2ZVNvY2tl
dFN0cmVhbURhdGEoKnRoaXMsIG1fcmVhZEJ1ZmZlci5nZXQoKSwgYnl0ZXNSZWFkKTsKLSAgICBp
ZiAobV9pbnB1dFN0cmVhbSkgewotICAgICAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKG1f
aW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5nZXQoKSwgUkVBRF9CVUZGRVJfU0laRSwg
R19QUklPUklUWV9ERUZBVUxULCBtX2NhbmNlbGxhYmxlLmdldCgpLAotICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkUmVhZHlDYWxsYmFjayksIHBy
b3RlY3RlZFRoaXMubGVha1JlZigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpyZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qIHN0cmVhbSwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQotewotICAgIFJlZlB0cjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZihoYW5kbGUpOwotCi0gICAg
Ly8gQWx3YXlzIGZpbmlzaCB0aGUgcmVhZCwgZXZlbiBpZiB0aGlzIFNvY2tldFN0cmVhbUhhbmRs
ZSB3YXMgY2FuY2VsbGVkIGVhcmxpZXIuCi0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OwotICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaChzdHJl
YW0sIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKLQotICAgIGlmIChnX2NhbmNlbGxhYmxlX2lz
X2NhbmNlbGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUuZ2V0KCkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIGhhbmRsZS0+ZGlkRmFpbChTb2NrZXRTdHJlYW1F
cnJvcihlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICBlbHNlCi0gICAgICAgIGhh
bmRsZS0+cmVhZEJ5dGVzKGJ5dGVzUmVhZCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
OjpkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yJiYgZXJyb3IpCi17Ci0gICAgbV9jbGllbnQuZGlk
RmFpbFNvY2tldFN0cmVhbSgqdGhpcywgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSgpCi17Ci0gICAgLy8gV2Ugbm8gbG9uZ2VyIGhhdmUg
YnVmZmVyZWQgZGF0YSwgc28gc3RvcCB3YWl0aW5nIGZvciB0aGUgc29ja2V0IHRvIGJlIHdyaXRh
YmxlLgotICAgIGlmICghYnVmZmVyZWRBbW91bnQoKSkgewotICAgICAgICBzdG9wV2FpdGluZ0Zv
clNvY2tldFdyaXRhYmlsaXR5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZW5k
UGVuZGluZ0RhdGEoKTsKLX0KLQotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5k
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2Nr
ZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kIiwgdGhpcyk7Ci0gICAgaWYgKCFtX291dHB1
dFN0cmVhbSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHVW5pcXVlT3V0UHRy
PEdFcnJvcj4gZXJyb3I7Ci0gICAgZ3NzaXplIHdyaXR0ZW4gPSBnX3BvbGxhYmxlX291dHB1dF9z
dHJlYW1fd3JpdGVfbm9uYmxvY2tpbmcobV9vdXRwdXRTdHJlYW0uZ2V0KCksIGRhdGEsIGxlbmd0
aCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwgJmVycm9yLm91dFB0cigpKTsKLSAgICBpZiAoZXJyb3Ip
IHsKLSAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwg
R19JT19FUlJPUl9XT1VMRF9CTE9DSykpCi0gICAgICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2Nr
ZXRXcml0YWJpbGl0eSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaWRGYWlsKFNvY2tl
dFN0cmVhbUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkaWQgbm90IHNlbmQgYWxsIHRoZSBieXRlcyB3
ZSB3ZXJlIGdpdmVuLCB3ZSBrbm93IHRoYXQKLSAgICAvLyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
IHdpbGwgbmVlZCB0byBzZW5kIG1vcmUgaW4gdGhlIGZ1dHVyZS4KLSAgICBpZiAod3JpdHRlbiA8
IGxlbmd0aCkKLSAgICAgICAgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKLQot
ICAgIHJldHVybiB3cml0dGVuOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZv
cm1DbG9zZSgpCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxh
dGZvcm1DbG9zZSIsIHRoaXMpOwotICAgIC8vIFdlIGNhbmNlbCB0aGlzIGhhbmRsZSBmaXJzdCB0
byBkaXNhYmxlIGFsbCBjYWxsYmFja3MuCi0gICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5j
ZWxsYWJsZS5nZXQoKSk7Ci0gICAgc3RvcFdhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOwot
Ci0gICAgaWYgKG1fc29ja2V0Q29ubmVjdGlvbikgewotICAgICAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7Ci0gICAgICAgIGdfaW9fc3RyZWFtX2Nsb3NlKEdfSU9fU1RSRUFNKG1fc29j
a2V0Q29ubmVjdGlvbi5nZXQoKSksIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAg
IGlmIChlcnJvcikKLSAgICAgICAgICAgIGRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3IoZXJyb3It
PmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IG51
bGxwdHI7Ci0gICAgfQotCi0gICAgbV9vdXRwdXRTdHJlYW0gPSBudWxscHRyOwotICAgIG1faW5w
dXRTdHJlYW0gPSBudWxscHRyOwotICAgIG1fcmVhZEJ1ZmZlciA9IG51bGxwdHI7Ci0KLSAgICBt
X2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpCi17Ci0gICAgaWYg
KG1fd3JpdGVSZWFkeVNvdXJjZSkgLy8gQWxyZWFkeSB3YWl0aW5nLgotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3dyaXRlUmVhZHlTb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9vdXRwdXRf
c3RyZWFtX2NyZWF0ZV9zb3VyY2UobV9vdXRwdXRTdHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUu
Z2V0KCkpKTsKLSAgICByZWYoKTsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV93cml0ZVJl
YWR5U291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3cml0ZVJlYWR5
Q2FsbGJhY2spLCB0aGlzLAotICAgICAgICBbXShncG9pbnRlciBoYW5kbGUpIHsgc3RhdGljX2Nh
c3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaGFuZGxlKS0+ZGVyZWYoKTsgfSk7Ci0gICAgZ19zb3Vy
Y2VfYXR0YWNoKG1fd3JpdGVSZWFkeVNvdXJjZS5nZXQoKSwgZ19tYWluX2NvbnRleHRfZ2V0X3Ro
cmVhZF9kZWZhdWx0KCkpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFdhaXRp
bmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpCi17Ci0gICAgaWYgKCFtX3dyaXRlUmVhZHlTb3VyY2Up
IC8vIE5vdCB3YWl0aW5nLgotICAgICAgICByZXR1cm47Ci0KLSAgICBnX3NvdXJjZV9kZXN0cm95
KG1fd3JpdGVSZWFkeVNvdXJjZS5nZXQoKSk7Ci0gICAgbV93cml0ZVJlYWR5U291cmNlID0gbnVs
bHB0cjsKLX0KLQotZ2Jvb2xlYW4gU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJh
Y2soR1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCi17
Ci0gICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5jZWxsYWJs
ZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0KLSAgICBoYW5kbGUt
PndyaXRlUmVhZHkoKTsKLSAgICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MDQ0NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxNi0wOC0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHRvIFNv
Y2tldFN0cmVhbUhhbmRsZSBhbmQgU29ja2V0U3RyZWFtSGFuZGxlIHRvIFNvY2tldFN0cmVhbUhh
bmRsZUltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MDg1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViU29ja2V0UHJvdmlkZXI6OmNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZSk6CisKIDIw
MTYtMDgtMTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggaU9TIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlNvY2tldFByb3ZpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL05ldHdvcmsvV2ViU29ja2V0UHJvdmlkZXIuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0UHJvdmlkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNiArMzMsNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9TT0NL
RVRTKQogCi0jaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
U2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFt
SGFuZGxlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldENoYW5uZWwuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1dlYlNvY2tldENoYW5uZWxDbGllbnQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1dvcmtlckdsb2JhbFNjb3BlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Xb3JrZXJSdW5Mb29w
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Xb3JrZXJUaHJlYWQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
b2NrZXRTdHJlYW1IYW5kbGVJbXBsLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBA
IC01MSw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogUmVmPFNvY2tldFN0cmVhbUhhbmRs
ZT4gV2ViU29ja2V0UHJvdmlkZXI6OmNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwm
IHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9u
SUQpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJldHVybiBhIHByb3h5IHNvIHdlIGNh
biBkbyB0aGUgYWN0dWFsIG5ldHdvcmsgaW50ZXJhY3Rpb25zIGluIHRoZSBOZXR3b3JrUHJvY2Vz
cy4KLSAgICByZXR1cm4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUodXJsLCBjbGllbnQsIHNl
c3Npb25JRCk7CisgICAgcmV0dXJuIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZSh1cmws
IGNsaWVudCwgc2Vzc2lvbklEKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286088</attachid>
            <date>2016-08-15 13:36:29 -0700</date>
            <delta_ts>2016-08-15 14:20:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160858-20160815133444.patch</filename>
            <type>text/plain</type>
            <size>194147</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NCBAQAorMjAxNi0wOC0xNSAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBT
b2NrZXRTdHJlYW1IYW5kbGVCYXNlIHRvIFNvY2tldFN0cmVhbUhhbmRsZSBhbmQgU29ja2V0U3Ry
ZWFtSGFuZGxlIHRvIFNvY2tldFN0cmVhbUhhbmRsZUltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDg1OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIE5vIGNoYW5nZSBpbiBi
ZWhhdmlvciwgZXhjZXB0IEdUSydzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgaXMgbm93IHNhZmVs
eSBUaHJlYWRTYWZlUmVmQ291bnRlZC4KKyAgICAgICAgVGhpcyBpcyBwcmVwYXJhdGlvbiBmb3Ig
bWFraW5nIGEgbmV3IGtpbmQgb2YgU29ja2V0U3RyZWFtSGFuZGxlIHdoaWNoIGlzIGEgcHJveHkg
dGhhdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MgaW4gV2ViS2l0Mi4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsu
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1X
aW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9Tb2NrZXRQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVh
bUhhbmRsZTo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OnNlbmRQZW5kaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6ZGlzY29ubmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kUGVuZGluZ0Rh
dGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFu
ZGxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0
U3RyZWFtSGFuZGxlQmFzZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
Ojp+U29ja2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUJhc2U6
On5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFt
SGFuZGxlSW1wbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzY2hlZHVsZVN0cmVh
bXMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmV0YWluU29j
a2V0U3RyZWFtSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmV4ZWN1dGVQQUNGaWxl
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbW92ZVBB
Q1J1bkxvb3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6Y2hvb3NlUHJveHlGcm9tQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6Y3JlYXRlU3RyZWFtcyk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6CisgICAgICAg
IChXZWJDb3JlOjphdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhvZCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjphZGRDT05ORUNUQ3Jl
ZGVudGlhbHMpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29w
eUNGU3RyZWFtRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVwb3J0RXJyb3JUb0NsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxhdGZvcm1DbG9z
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVT
dHJlYW1zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6
cmV0YWluU29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZTo6cmVsZWFzZVNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlQQUNFeGVjdXRpb25EZXNj
cmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZW1vdmVQQUNSdW5Mb29wU291cmNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y2hvb3NlUHJveHkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94
eUZyb21BcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGU6OmNyZWF0ZVN0cmVhbXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3Ry
ZWFtSGFuZGxlOjpnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmFkZENPTk5FQ1RDcmVkZW50aWFs
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlD
RlN0cmVhbURlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZFN0cmVhbUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVTdHJlYW1DYWxsYmFjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6cGxhdGZvcm1TZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBvcnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0
cmVhbUhhbmRsZS5oLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbEN1cmwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlYWREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnNlbmREYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndhaXRGb3JBdmFpbGFi
bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0b3BU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlk
T3BlblNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
cmVhdGVDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0
U3RyZWFtSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhh
bmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
b2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsZURhdGEp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRo
cmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnN0
b3BUaHJlYWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxl
OjpkaWRSZWNlaXZlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U29j
a2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVDb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRs
ZS5oLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsU291cC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6On5Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNvbm5lY3RlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjb25uZWN0ZWRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFkQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFJlYWR5Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkRmFpbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3cml0ZVJlYWR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmJlZ2luV2FpdGluZ0Zv
clNvY2tldFdyaXRhYmlsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRs
ZUltcGw6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6d3JpdGVSZWFkeUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhh
bmRsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OmNv
bm5lY3RlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6
OmNvbm5lY3RlZENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0
cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvY2tl
dFN0cmVhbUhhbmRsZTo6cmVhZFJlYWR5Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpkaWRGYWlsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdG
b3JTb2NrZXRXcml0YWJpbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRT
dHJlYW1IYW5kbGU6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJhY2sp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1I
YW5kbGVTb3VwLmNwcDogUmVtb3ZlZC4KKwogMjAxNi0wOC0xNSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBXaW5DYWlybyBidWlsZCBh
ZnRlciByMjA0NDY2LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNDQ2NikK
KysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMzY3
LDcgKzIzNjcsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUNsaWVudC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVx
dWVzdEJhc2UuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5j
cHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCiAgICAgcGxhdGZvcm0vbmV0
d29yay9TeW5jaHJvbm91c0xvYWRlckNsaWVudC5jcHAKIAogICAgIHBsYXRmb3JtL3NxbC9TUUxW
YWx1ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZS5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0
LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXNwb25zZUNGTmV0LmNwcAot
ICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCisgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCiAgICAg
cGxhdGZvcm0vbmV0d29yay9jZi9TeW5jaHJvbm91c0xvYWRlckNsaWVudENGTmV0LmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hyb25vdXNSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVj
dGlvbkRlbGVnYXRlLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMSw3ICsyMDEsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU3lu
Y2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9X
ZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAogICAgIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAKLSAgICBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAKKyAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbFNvdXAuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU3luY2hyb25vdXNMb2FkZXJDbGllbnRTb3VwLmNwcAogICAgIHBsYXRmb3JtL25ldHdv
cmsvc291cC9XZWJLaXRTb3VwUmVxdWVzdEdlbmVyaWMuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTY0OCw3ICs2NDgsNyBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlSGFuZGxlQ0ZV
UkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlUmVzcG9uc2VDRk5ldC5jcHAKLSAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY2YvU3luY2hy
b25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2NmL1N5bmNo
cm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAKIApJbmRleDog
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U1NMSGFuZGxlLmNwcAotICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5k
bGVDdXJsLmNwcAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsQ3VybC5jcHAKIAogICAgIHBsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE5LDggKzIwMTksOCBAQAogCQk1
MTBBNThGQTFCQUNDN0YyMDBDMTkyODIgLyogSURCUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE1OEY2MUJBQ0M0QTUwMEMxOTI4
MiAvKiBJREJSZXF1ZXN0RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1F
cnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEwRDRBMkQxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAg
Ki87IH07CiAJCTUxMEQ0QTM0MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0
QTJFMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLzsgfTsKLQkJ
NTEwRDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzAxMDMx
NjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwICovOyB9OwotCQk1MTBE
NEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzExMDMxNjVFRTAw
NDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTBENEEzNjEwMzE2NUVFMDA0OUVBNTQgLyog
U29ja2V0U3RyZWFtSGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovOyB9OworCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFt
SGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTBENEEzMTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwRDRBMzgxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxMUVDMTI3MUM1MEFBQ0EwMDMyRjk4MyAvKiBJREJTZXJp
YWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMUVDMTI1MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmNwcCAqLzsg
fTsKIAkJNTExRUMxMjgxQzUwQUFDQTAwMzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUVDMTI2MUM1MEFB
NTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi87IH07CkBAIC0yMjQxLDggKzIyNDEs
OCBAQAogCQk1MUE5RDlFQTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUU4MTk1Qjkz
MUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovOyB9OwogCQk1MUFBM0Y2RjBCRDVBQTlF
MDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3Vy
Y2VMb2FkZXJNYWMubW0gKi87IH07CiAJCTUxQUJBRTFCMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggKi87
IH07Ci0JCTUxQUJBRTFFMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAz
QzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUFCQUUxRjEwM0MxOTEzMDA4QzUyNjAg
LyogU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0
cmVhbUhhbmRsZUNGTmV0LmNwcCAqLzsgfTsKKwkJNTFBQkFFMUUxMDNDMTkxMzAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxD
Rk5ldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUFCQUUxRDEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNw
cCAqLzsgfTsKIAkJNTFBQkY2NEQxNjM5MkUyODAwMTMyQTdBIC8qIExvYWRlclN0cmF0ZWd5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJGNjRD
MTYzOTJFMjgwMDEzMkE3QSAvKiBMb2FkZXJTdHJhdGVneS5jcHAgKi87IH07CiAJCTUxQUY1MDM2
MTZGMTAwRjYwMDk1QjJFOCAvKiBSZXNvdXJjZUxvYWRlclR5cGVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFGNTAzNTE2RjEwMEY2MDA5NUIyRTgg
LyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxQjI0MTdCMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJB
cmNoaXZlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFCMjQxN0EwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gKi87
IH07CkBAIC05MzUyLDggKzkzNTIsOCBAQAogCQk1MTBBNThGRTFCQjA3QUE1MDBDMTkyODIgLyog
SURCQ29ubmVjdGlvblRvQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElEQkNvbm5lY3Rpb25Ub0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yQmFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0QTJFMTAzMTY1RUUwMDQ5RUE1
NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU29ja2V0U3RyZWFtRXJyb3JCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTBENEEzMTEwMzE2NUVF
MDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxMEQ0QTMwMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFt
SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTEwRDRBMzExMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEwRDRBMzIxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRUMxMjUxQzUwQUE1NzAw
MzJGOTgzIC8qIElEQlNlcmlhbGl6YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSURCU2VyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMUVDMTI2MUM1MEFBNTcwMDMyRjk4MyAvKiBJREJTZXJpYWxpemF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlNlcmlhbGl6YXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1NjcsOCArOTU2Nyw4IEBACiAJCTUxQTlEOUU4MTk1
QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHYW1lcGFkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlck1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNv
Y2tldFN0cmVhbUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQUJBRTFD
MTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTb2NrZXRT
dHJlYW1IYW5kbGVDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQUJB
RTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFBQkFFMUQxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MUFCRjY0QzE2MzkyRTI4MDAxMzJBN0EgLyogTG9hZGVyU3RyYXRlZ3ku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9hZGVyU3RyYXRlZ3ku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFGNTAzNTE2RjEwMEY2MDA5NUIy
RTggLyogUmVzb3VyY2VMb2FkZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXNvdXJjZUxvYWRlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxQjI0MTdBMEQ5MzFGM0YwMEU4M0Y1QyAvKiBMZWdhY3lXZWJBcmNoaXZlTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTGVnYWN5V2ViQXJjaGl2ZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTczLDggKzE3OTczLDggQEAKIAkJ
CQk1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLywK
IAkJCQk1MTBENEEyRDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCAqLywKIAkJCQk1MTBENEEyRTEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JC
YXNlLmggKi8sCi0JCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UuY3BwICovLAotCQkJCTUxMEQ0QTMxMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmggKi8sCisJCQkJNTEwRDRBMzAxMDMxNjVFRTAwNDlFQTU0IC8qIFNv
Y2tldFN0cmVhbUhhbmRsZS5jcHAgKi8sCisJCQkJNTEwRDRBMzExMDMxNjVFRTAwNDlFQTU0IC8q
IFNvY2tldFN0cmVhbUhhbmRsZS5oICovLAogCQkJCTUxMEQ0QTMyMTAzMTY1RUUwMDQ5RUE1NCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCAqLywKIAkJCQlFMTgwODExMDE2RkNGNDJFMDBC
ODBEMDcgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnQuY3BwICovLAogCQkJCUUxODA4MTE1MTZG
Q0Y5Q0IwMEI4MEQwNyAvKiBTeW5jaHJvbm91c0xvYWRlckNsaWVudC5oICovLApAQCAtMjE4NzIs
OCArMjE4NzIsOCBAQAogCQkJCTdFRTY4NDVEMTJEMjZFMzgwMEU3OTQxNSAvKiBSZXNvdXJjZVJl
c3BvbnNlLmggKi8sCiAJCQkJN0VFNjg0NUUxMkQyNkUzODAwRTc5NDE1IC8qIFJlc291cmNlUmVz
cG9uc2VDRk5ldC5jcHAgKi8sCiAJCQkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUVycm9yLmggKi8sCi0JCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZS5oICovLAotCQkJCTUxQUJBRTFEMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgKi8sCisJCQkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYw
IC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCAqLywKKwkJCQk1MUFCQUUxRDEwM0MxOTEzMDA4
QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0LmNwcCAqLywKIAkJCQk0NDJBQkNE
NTE3RDkyNjJGMDBEMzA3MTUgLyogU3luY2hyb25vdXNMb2FkZXJDbGllbnRDRk5ldC5jcHAgKi8s
CiAJCQkJMjZGQUU0Q0ExODUyRTNBNTAwNEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5k
bGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZS5jcHAgKi8sCiAJCQkJMjZGQUU0Q0IxODUyRTNBNTAw
NEM4QzQ2IC8qIFN5bmNocm9ub3VzUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0
ZS5oICovLApAQCAtMjc1NzYsOCArMjc1NzYsOCBAQAogCQkJCTVDN0M4OEQ4MUQwRjFGNEEwMDlE
MkY2RCAvKiBTb2NrZXRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQkFFMUIxMDND
MThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTBENEEzNDEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTBENEEzNzEwMzE2NUVFMDA0OUVBNTQgLyogU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFBQkFFMUUxMDNDMTkx
MzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxMEQ0QTM3MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxMEQ0QTM4MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAv
KiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQzcwQUUwMzcwMzAwQTgy
NjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTMxMjIxLDggKzMxMjIxLDggQEAKIAkJ
CQlFNEFGRDAwRDBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUM2ODhBQTMxRDM4MTRCRjAwMEI1NEZBIC8qIFNvY2tldFByb3ZpZGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwRDRBMzYxMDMxNjVF
RTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1
MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFNDUzOTA0NzBFQUZENjM3MDAzNjk1QzggLyogU291bmRJT1MubW0gaW4gU291cmNlcyAqLywK
IAkJCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQk4NEE4MUYzRDBGQzdERkYwMDA5NTUzMDAgLyogU291cmNlQWxwaGEuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NvY2tldFByb3ZpZGVyLmNwcAkocmV2
aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Tb2NrZXRQcm92aWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKFdFQl9TT0NL
RVRTKQogCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0
U3RyZWFtSGFuZGxlSW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBSZWY8U29j
a2V0U3RyZWFtSGFuZGxlPiBTb2NrZXRQcm92aWRlcjo6Y3JlYXRlU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lv
bklEIHNlc3Npb25JRCkKIHsKLSAgICByZXR1cm4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUo
dXJsLCBjbGllbnQsIHNlc3Npb25JRCk7CisgICAgcmV0dXJuIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OmNyZWF0ZSh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKTsKIH0KICAgICAKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhh
bmRsZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcDoyMDQ0NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIw
MTIgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKKworI2luY2x1ZGUgIlNvY2tldFN0cmVh
bUhhbmRsZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHVuc2lnbmVkIGludCBidWZmZXJTaXplID0gMTAwICog
MTAyNCAqIDEwMjQ7CisKK1NvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQor
ICAgIDogbV91cmwodXJsKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zdGF0ZShD
b25uZWN0aW5nKQoreworfQorCitTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1T
dGF0ZSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3RhdGU7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZChjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmIChtX3N0YXRlID09IENvbm5lY3Rpbmcg
fHwgbV9zdGF0ZSA9PSBDbG9zaW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFt
X2J1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0
aCA+IGJ1ZmZlclNpemUpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8g
aW5kaWNhdGUgdGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9idWZmZXIuYXBwZW5kKGRhdGEsIGxlbmd0
aCk7CisgICAgICAgIG1fY2xpZW50LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSY+KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKKyAgICBpZiAo
bV9zdGF0ZSA9PSBPcGVuKQorICAgICAgICBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQoZGF0
YSwgbGVuZ3RoKTsKKyAgICBpZiAoYnl0ZXNXcml0dGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtX2J1ZmZlci5zaXplKCkgKyBsZW5ndGggLSBieXRlc1dyaXR0ZW4gPiBi
dWZmZXJTaXplKSB7CisgICAgICAgIC8vIEZJWE1FOiByZXBvcnQgZXJyb3IgdG8gaW5kaWNhdGUg
dGhhdCBidWZmZXIgaGFzIG5vIG1vcmUgc3BhY2UuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKGJ5dGVzV3JpdHRlbiA8IGxlbmd0aCkgeworICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoZGF0YSArIGJ5dGVzV3JpdHRlbiwgbGVuZ3RoIC0gYnl0ZXNXcml0dGVuKTsKKyAgICAg
ICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3Ry
ZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6Y2xvc2UoKQoreworICAg
IGlmIChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUgPSBD
bG9zaW5nOworICAgIGlmICghbV9idWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgZGlzY29ubmVjdCgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmRpc2Nv
bm5lY3QoKQoreworICAgIGF1dG8gcHJvdGVjdCA9IG1ha2VSZWYoc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlJj4oKnRoaXMpKTsgLy8gcGxhdGZvcm1DbG9zZSBjYWxscyB0aGUgY2xpZW50
LCB3aGljaCBtYXkgbWFrZSB0aGUgaGFuZGxlIGdldCBkZWFsbG9jYXRlZCBpbW1lZGlhdGVseS4K
KworICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICBtX3N0YXRlID0gQ2xvc2VkOworfQorCitib29s
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmRQZW5kaW5nRGF0YSgpCit7CisgICAgaWYgKG1f
c3RhdGUgIT0gT3BlbiAmJiBtX3N0YXRlICE9IENsb3NpbmcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9idWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX3N0YXRlID09
IE9wZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX3N0YXRlID09
IENsb3NpbmcpIHsKKyAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIHBlbmRpbmc7CisgICAgZG8gewor
ICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gcGxhdGZvcm1TZW5kKG1fYnVmZmVyLmZpcnN0Qmxv
Y2tEYXRhKCksIG1fYnVmZmVyLmZpcnN0QmxvY2tTaXplKCkpOworICAgICAgICBwZW5kaW5nID0g
Ynl0ZXNXcml0dGVuICE9IHN0YXRpY19jYXN0PGludD4obV9idWZmZXIuZmlyc3RCbG9ja1NpemUo
KSk7CisgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgQVNTRVJUKG1fYnVmZmVyLnNpemUoKSAtIGJ5dGVzV3JpdHRlbiA8PSBi
dWZmZXJTaXplKTsKKyAgICAgICAgbV9idWZmZXIuY29uc3VtZShieXRlc1dyaXR0ZW4pOworICAg
IH0gd2hpbGUgKCFwZW5kaW5nICYmICFtX2J1ZmZlci5pc0VtcHR5KCkpOworICAgIG1fY2xpZW50
LmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSY+
KCp0aGlzKSwgYnVmZmVyZWRBbW91bnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gIC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1NvY2tldFN0cmVhbUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDI4ICsyOSwyNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KICNpbmNsdWRlICJT
b2NrZXRTdHJlYW1IYW5kbGUuaCIKKwogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IHVuc2lnbmVkIGludCBidWZmZXJT
aXplID0gMTAwICogMTAyNCAqIDEwMjQ7Citjb25zdCB1bnNpZ25lZCBidWZmZXJTaXplID0gMTAw
ICogMTAyNCAqIDEwMjQ7CiAKLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OlNvY2tldFN0cmVhbUhh
bmRsZUJhc2UoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50
KQorU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQogICAgIDogbV91cmwodXJsKQogICAg
ICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9zdGF0ZShDb25uZWN0aW5nKQogewogfQogCi1T
b2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpTb2NrZXRTdHJlYW1TdGF0ZSBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlOjpzdGF0ZSgpIGNvbnN0CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbVN0
YXRlIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhdGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3N0
YXRlOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnNlbmQoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ29ubmVjdGluZyB8
fCBtX3N0YXRlID09IENsb3NpbmcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc5LDcgKzc4
LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kKGNvbnN0IAogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OmNsb3NlKCkKK3ZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpjbG9zZSgpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2Vk
KQogICAgICAgICByZXR1cm47CkBAIC04OSw3ICs4OCw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZTo6Y2xvc2UoKQogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVCYXNlOjpkaXNjb25uZWN0KCkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaXNj
b25uZWN0KCkKIHsKICAgICBhdXRvIHByb3RlY3QgPSBtYWtlUmVmKHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSY+KCp0aGlzKSk7IC8vIHBsYXRmb3JtQ2xvc2UgY2FsbHMgdGhlIGNsaWVu
dCwgd2hpY2ggbWF5IG1ha2UgdGhlIGhhbmRsZSBnZXQgZGVhbGxvY2F0ZWQgaW1tZWRpYXRlbHku
CiAKQEAgLTk3LDcgKzk2LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpkaXNjb25u
ZWN0KAogICAgIG1fc3RhdGUgPSBDbG9zZWQ7CiB9CiAKLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxl
QmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5kUGVu
ZGluZ0RhdGEoKQogewogICAgIGlmIChtX3N0YXRlICE9IE9wZW4gJiYgbV9zdGF0ZSAhPSBDbG9z
aW5nKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjIsNCArMTIxLDQgQEAgYm9vbCBTb2Nr
ZXRTdHJlYW1IYW5kbGVCYXNlOjpzZW5kUGVuZGluZwogICAgIHJldHVybiB0cnVlOwogfQogCi19
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRs
ZS5oCShyZXZpc2lvbiAyMDQ0NjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oOjIwNDQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRl
IDx3dGYvU3RyZWFtQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29j
a2V0U3RyZWFtSGFuZGxlOworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OworCitjbGFz
cyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIFNvY2tldFN0cmVh
bVN0YXRlIHsgQ29ubmVjdGluZywgT3BlbiwgQ2xvc2luZywgQ2xvc2VkIH07CisgICAgdmlydHVh
bCB+U29ja2V0U3RyZWFtSGFuZGxlQmFzZSgpIHsgfQorICAgIFNvY2tldFN0cmVhbVN0YXRlIHN0
YXRlKCkgY29uc3Q7CisKKyAgICBib29sIHNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCk7CisgICAgdm9pZCBjbG9zZSgpOyAvLyBEaXNjb25uZWN0IGFmdGVyIGFsbCBkYXRhIGluIGJ1
ZmZlciBhcmUgc2VudC4KKyAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKyAgICBzaXplX3QgYnVmZmVy
ZWRBbW91bnQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KKworICAgIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0K
KworcHJvdGVjdGVkOgorICAgIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UoY29uc3QgVVJMJiwgU29j
a2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CisKKyAgICBib29sIHNlbmRQZW5kaW5nRGF0YSgpOwor
ICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKSA9IDA7CisKKyAgICBVUkwg
bV91cmw7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBtX2NsaWVudDsKKyAgICBTdHJl
YW1CdWZmZXI8Y2hhciwgMTAyNCAqIDEwMjQ+IG1fYnVmZmVyOworICAgIFNvY2tldFN0cmVhbVN0
YXRlIG1fc3RhdGU7Cit9OworCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRTdHJlYW1IYW5kbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZS5o
CShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Nv
Y2tldFN0cmVhbUhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNiArMzMsMTYgQEAKIAog
I2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9TdHJlYW1CdWZmZXIuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7CiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7
CiAKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgeworY2xhc3MgU29ja2V0U3RyZWFtSGFu
ZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4gewog
cHVibGljOgogICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBDb25uZWN0aW5nLCBPcGVuLCBD
bG9zaW5nLCBDbG9zZWQgfTsKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGVCYXNlKCkg
eyB9CisgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCkgeyB9CiAgICAgU29ja2V0U3Ry
ZWFtU3RhdGUgc3RhdGUoKSBjb25zdDsKIAogICAgIGJvb2wgc2VuZChjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKTsKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIFNvY2tldFN0cmVh
bUhhbmRsZUNsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAogcHJv
dGVjdGVkOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UoY29uc3QgVVJMJiwgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50Jik7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwogCiAgICAgYm9vbCBzZW5kUGVuZGluZ0RhdGEoKTsK
ICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCkgPSAwOwpAQCAtNjUsNCArNjUsNCBAQCBwcm90ZWN0ZWQ6CiAgICAgU29ja2V0U3RyZWFtU3Rh
dGUgbV9zdGF0ZTsKIH07CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0
cmVhbUhhbmRsZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAJKHJldmlzaW9uIDIwNDQ2NikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgotCi0jaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgdW5zaWduZWQgaW50IGJ1ZmZl
clNpemUgPSAxMDAgKiAxMDI0ICogMTAyNDsKLQotU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6U29j
a2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQpCi0gICAgOiBtX3VybCh1cmwpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi0g
ICAgLCBtX3N0YXRlKENvbm5lY3RpbmcpCi17Ci19Ci0KLVNvY2tldFN0cmVhbUhhbmRsZUJhc2U6
OlNvY2tldFN0cmVhbVN0YXRlIFNvY2tldFN0cmVhbUhhbmRsZUJhc2U6OnN0YXRlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zdGF0ZTsKLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
OjpzZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKG1fc3RhdGUg
PT0gQ29ubmVjdGluZyB8fCBtX3N0YXRlID09IENsb3NpbmcpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIW1fYnVmZmVyLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAobV9idWZmZXIu
c2l6ZSgpICsgbGVuZ3RoID4gYnVmZmVyU2l6ZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHJl
cG9ydCBlcnJvciB0byBpbmRpY2F0ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX2J1ZmZlci5hcHBl
bmQoZGF0YSwgbGVuZ3RoKTsKLSAgICAgICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91
bnQoc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3Vu
dCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGludCBieXRlc1dyaXR0ZW4g
PSAwOwotICAgIGlmIChtX3N0YXRlID09IE9wZW4pCi0gICAgICAgIGJ5dGVzV3JpdHRlbiA9IHBs
YXRmb3JtU2VuZChkYXRhLCBsZW5ndGgpOwotICAgIGlmIChieXRlc1dyaXR0ZW4gPCAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fYnVmZmVyLnNpemUoKSArIGxlbmd0aCAtIGJ5
dGVzV3JpdHRlbiA+IGJ1ZmZlclNpemUpIHsKLSAgICAgICAgLy8gRklYTUU6IHJlcG9ydCBlcnJv
ciB0byBpbmRpY2F0ZSB0aGF0IGJ1ZmZlciBoYXMgbm8gbW9yZSBzcGFjZS4KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYnl0ZXNXcml0dGVuIDwgbGVuZ3RoKSB7Ci0gICAg
ICAgIG1fYnVmZmVyLmFwcGVuZChkYXRhICsgYnl0ZXNXcml0dGVuLCBsZW5ndGggLSBieXRlc1dy
aXR0ZW4pOwotICAgICAgICBtX2NsaWVudC5kaWRVcGRhdGVCdWZmZXJlZEFtb3VudChzdGF0aWNf
Y2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUmPigqdGhpcyksIGJ1ZmZlcmVkQW1vdW50KCkpOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlOjpj
bG9zZSgpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gQ2xvc2VkKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9zdGF0ZSA9IENsb3Npbmc7Ci0gICAgaWYgKCFtX2J1ZmZlci5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBkaXNjb25uZWN0KCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZTo6ZGlzY29ubmVjdCgpCi17Ci0gICAgYXV0byBwcm90ZWN0ID0gbWFrZVJlZihzdGF0
aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUmPigqdGhpcykpOyAvLyBwbGF0Zm9ybUNsb3NlIGNh
bGxzIHRoZSBjbGllbnQsIHdoaWNoIG1heSBtYWtlIHRoZSBoYW5kbGUgZ2V0IGRlYWxsb2NhdGVk
IGltbWVkaWF0ZWx5LgotCi0gICAgcGxhdGZvcm1DbG9zZSgpOwotICAgIG1fc3RhdGUgPSBDbG9z
ZWQ7Ci19Ci0KLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxlQmFzZTo6c2VuZFBlbmRpbmdEYXRhKCkK
LXsKLSAgICBpZiAobV9zdGF0ZSAhPSBPcGVuICYmIG1fc3RhdGUgIT0gQ2xvc2luZykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChtX2J1ZmZlci5pc0VtcHR5KCkpIHsKLSAgICAgICAg
aWYgKG1fc3RhdGUgPT0gT3BlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKG1fc3RhdGUgPT0gQ2xvc2luZykgewotICAgICAgICAgICAgZGlzY29ubmVjdCgpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIGJvb2wgcGVuZGlu
ZzsKLSAgICBkbyB7Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSBwbGF0Zm9ybVNlbmQobV9i
dWZmZXIuZmlyc3RCbG9ja0RhdGEoKSwgbV9idWZmZXIuZmlyc3RCbG9ja1NpemUoKSk7Ci0gICAg
ICAgIHBlbmRpbmcgPSBieXRlc1dyaXR0ZW4gIT0gc3RhdGljX2Nhc3Q8aW50PihtX2J1ZmZlci5m
aXJzdEJsb2NrU2l6ZSgpKTsKLSAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA8PSAwKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBBU1NFUlQobV9idWZmZXIuc2l6ZSgpIC0gYnl0
ZXNXcml0dGVuIDw9IGJ1ZmZlclNpemUpOwotICAgICAgICBtX2J1ZmZlci5jb25zdW1lKGJ5dGVz
V3JpdHRlbik7Ci0gICAgfSB3aGlsZSAoIXBlbmRpbmcgJiYgIW1fYnVmZmVyLmlzRW1wdHkoKSk7
Ci0gICAgbV9jbGllbnQuZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlJj4oKnRoaXMpLCBidWZmZXJlZEFtb3VudCgpKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaAkocmV2
aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Tb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMiBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgPHd0Zi9TdHJlYW1CdWZmZXIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7Ci1j
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZUJhc2UgewotcHVibGljOgotICAgIGVudW0gU29ja2V0U3RyZWFtU3RhdGUgeyBDb25uZWN0aW5n
LCBPcGVuLCBDbG9zaW5nLCBDbG9zZWQgfTsKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5k
bGVCYXNlKCkgeyB9Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgc3RhdGUoKSBjb25zdDsKLQotICAg
IGJvb2wgc2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLSAgICB2b2lkIGNsb3Nl
KCk7IC8vIERpc2Nvbm5lY3QgYWZ0ZXIgYWxsIGRhdGEgaW4gYnVmZmVyIGFyZSBzZW50LgotICAg
IHZvaWQgZGlzY29ubmVjdCgpOwotICAgIHNpemVfdCBidWZmZXJlZEFtb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyLnNpemUoKTsgfQotCi0gICAgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
U29ja2V0U3RyZWFtSGFuZGxlQmFzZShjb25zdCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQmKTsKLQotICAgIGJvb2wgc2VuZFBlbmRpbmdEYXRhKCk7Ci0gICAgdmlydHVhbCBpbnQgcGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcGxhdGZvcm1DbG9zZSgpID0gMDsKLQotICAgIFVSTCBtX3VybDsKLSAgICBTb2NrZXRT
dHJlYW1IYW5kbGVDbGllbnQmIG1fY2xpZW50OwotICAgIFN0cmVhbUJ1ZmZlcjxjaGFyLCAxMDI0
ICogMTAyND4gbV9idWZmZXI7Ci0gICAgU29ja2V0U3RyZWFtU3RhdGUgbV9zdGF0ZTsKLX07Ci0K
LX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1NvY2tldFN0cmVhbUhhbmRsZUJhc2UuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24gMjA0NDY2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5k
bGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlNlc3Npb25JRC5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9fQ0ZIVFRQTWVzc2FnZSogQ0ZIVFRQTWVzc2FnZVJl
ZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDcmVkZW50aWFsOwotY2xhc3MgUHJv
dGVjdGlvblNwYWNlOwotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50OwotCi1jbGFzcyBT
b2NrZXRTdHJlYW1IYW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U29ja2V0U3Ry
ZWFtSGFuZGxlPiwgcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UgewotcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCwgc2Vzc2lv
bklEKSk7IH0KLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOwotCi1wcml2YXRl
OgotICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbG9zZSgpOwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNs
aWVudCYsIFNlc3Npb25JRCk7Ci0gICAgdm9pZCBjcmVhdGVTdHJlYW1zKCk7Ci0gICAgdm9pZCBz
Y2hlZHVsZVN0cmVhbXMoKTsKLSAgICB2b2lkIGNob29zZVByb3h5KCk7Ci0gICAgdm9pZCBjaG9v
c2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmKTsKLSAgICB2b2lkIGV4ZWN1dGVQQUNGaWxlVVJM
KENGVVJMUmVmKTsKLSAgICB2b2lkIHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKLSAgICBSZXRh
aW5QdHI8Q0ZSdW5Mb29wU291cmNlUmVmPiBtX3BhY1J1bkxvb3BTb3VyY2U7Ci0gICAgc3RhdGlj
IHZvaWQgcGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5
TGlzdCwgQ0ZFcnJvclJlZiBlcnJvcik7Ci0gICAgc3RhdGljIENGU3RyaW5nUmVmIGNvcHlQQUNF
eGVjdXRpb25EZXNjcmlwdGlvbih2b2lkKik7Ci0KLSAgICBib29sIHNob3VsZFVzZVNTTCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXJsLnByb3RvY29sSXMoIndzcyIpOyB9Ci0gICAgdW5zaWduZWQgc2hv
cnQgcG9ydCgpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQ
TWVzc2FnZVJlZiByZXNwb25zZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCogcmV0YWluU29ja2V0U3Ry
ZWFtSGFuZGxlKHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCByZWxlYXNlU29ja2V0U3RyZWFtSGFu
ZGxlKHZvaWQqKTsKLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weUNGU3RyZWFtRGVzY3JpcHRp
b24odm9pZCopOwotICAgIHN0YXRpYyB2b2lkIHJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJl
YW1SZWYsIENGU3RyZWFtRXZlbnRUeXBlLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgd3JpdGVT
dHJlYW1DYWxsYmFjayhDRldyaXRlU3RyZWFtUmVmLCBDRlN0cmVhbUV2ZW50VHlwZSwgdm9pZCop
OwotICAgIHZvaWQgcmVhZFN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlKTsKLSAgICB2
b2lkIHdyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUpOwotCi0gICAgdm9pZCBy
ZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYpOwotCi0gICAgYm9vbCBnZXRTdG9yZWRDT05O
RUNUUHJveHlDcmVkZW50aWFscyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBTdHJpbmcmIGxvZ2lu
LCBTdHJpbmcmIHBhc3N3b3JkKTsKLQotICAgIGVudW0gQ29ubmVjdGluZ1N1YnN0YXRlIHsgTmV3
LCBFeGVjdXRpbmdQQUNGaWxlLCBXYWl0aW5nRm9yQ3JlZGVudGlhbHMsIFdhaXRpbmdGb3JDb25u
ZWN0LCBDb25uZWN0ZWQgfTsKLSAgICBDb25uZWN0aW5nU3Vic3RhdGUgbV9jb25uZWN0aW5nU3Vi
c3RhdGU7Ci0KLSAgICBlbnVtIENvbm5lY3Rpb25UeXBlIHsgVW5rbm93biwgRGlyZWN0LCBTT0NL
U1Byb3h5LCBDT05ORUNUUHJveHkgfTsKLSAgICBDb25uZWN0aW9uVHlwZSBtX2Nvbm5lY3Rpb25U
eXBlOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbV9wcm94eUhvc3Q7Ci0gICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBtX3Byb3h5UG9ydDsKLQotICAgIFJldGFpblB0cjxDRkhUVFBNZXNz
YWdlUmVmPiBtX3Byb3h5UmVzcG9uc2VNZXNzYWdlOwotICAgIGJvb2wgbV9zZW50U3RvcmVkQ3Jl
ZGVudGlhbHM7Ci0gICAgUmV0YWluUHRyPENGUmVhZFN0cmVhbVJlZj4gbV9yZWFkU3RyZWFtOwot
ICAgIFJldGFpblB0cjxDRldyaXRlU3RyZWFtUmVmPiBtX3dyaXRlU3RyZWFtOwotCi0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBtX2h0dHBzVVJMOyAvLyB3cyhzKTogcmVwbGFjZWQgd2l0aCBodHRw
czoKLSAgICBTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7Ci19OwotCi19ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFu
ZGxlQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDcwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCi0KLSNpbmNsdWRlICJDcmVkZW50
aWFsLmgiCi0jaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgiCi0jaW5jbHVkZSAiUHJvdGVj
dGlvblNwYWNlLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTb2NrZXRTdHJl
YW1FcnJvci5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgotI2luY2x1
ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQ
TEFURk9STShJT1MpCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgotI2VuZGlmCi0K
LSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSAiTG9hZGVyUnVuTG9vcENGLmgiCi0jaW5jbHVk
ZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbHNlCi0jaW5jbHVkZSAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1B
QykKLWV4dGVybiAiQyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tDRlN0cmVhbVNvY2tldFNldE5vRGVs
YXk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2ltcG9ydCA8Q0ZOZXR3b3JrU1BJ
Lmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlKHVybCwgY2xpZW50KQotICAgICwgbV9jb25uZWN0aW5nU3Vic3RhdGUoTmV3KQotICAg
ICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQotICAgICwgbV9zZW50U3RvcmVkQ3JlZGVudGlh
bHMoZmFsc2UpCi0gICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCi17Ci0gICAgTE9HKE5ldHdv
cmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVudCAlcCIsIHRoaXMsICZtX2NsaWVu
dCk7Ci0KLSAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoIndzIikgfHwgdXJsLnByb3RvY29sSXMo
IndzcyIpKTsKLQotICAgIFVSTCBodHRwc1VSTChVUkwoKSwgImh0dHBzOi8vIiArIG1fdXJsLmhv
c3QoKSk7Ci0gICAgbV9odHRwc1VSTCA9IGh0dHBzVVJMLmNyZWF0ZUNGVVJMKCk7Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICAvLyBEb24ndCBjaGVjayBmb3IgSFNUUyB2aW9sYXRpb24gZm9y
IGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZQotICAgIC8vIEhTVFMgc3RhdGUgc2hvdWxkIG5vdCB0
cmFuc2ZlciBiZXR3ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUgYnJvd3NpbmcuCi0gICAgaWYgKHVy
bC5wcm90b2NvbElzKCJ3cyIpCi0gICAgICAgICYmICFzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKQot
ICAgICAgICAmJiBfQ0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0V2l0aFNlc3Npb24obV9odHRwc1VS
TC5nZXQoKSwgbnVsbHB0cikpIHsKLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQg
Y29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRlcyBIVFRQIFN0cmljdCBUcmFuc3Bv
cnQgU2VjdXJpdHkuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBj
cmVhdGVTdHJlYW1zKCk7Ci0gICAgQVNTRVJUKCFtX3JlYWRTdHJlYW0gPT0gIW1fd3JpdGVTdHJl
YW0pOwotICAgIGlmICghbV9yZWFkU3RyZWFtKSAvLyBEb2luZyBhc3luY2hyb25vdXMgUEFDIGZp
bGUgcHJvY2Vzc2luZywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0ZWQgbGF0ZXIuCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNjaGVkdWxlU3RyZWFtcygpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6c2NoZWR1bGVTdHJlYW1zKCkKLXsKLSAgICBBU1NFUlQobV9yZWFkU3RyZWFtKTsKLSAg
ICBBU1NFUlQobV93cml0ZVN0cmVhbSk7Ci0KLSAgICBDRlN0cmVhbUNsaWVudENvbnRleHQgY2xp
ZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0YWluU29ja2V0U3RyZWFtSGFuZGxlLCByZWxlYXNl
U29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbiB9OwotICAgIC8vIEZJ
WE1FOiBQYXNzIHNwZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRlcmVzdGVkIGluIGluc3RlYWQgb2Yg
LTEuCi0gICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVhZFN0cmVhbS5nZXQoKSwgc3RhdGlj
X2Nhc3Q8Q0ZPcHRpb25GbGFncz4oLTEpLCByZWFkU3RyZWFtQ2FsbGJhY2ssICZjbGllbnRDb250
ZXh0KTsKLSAgICBDRldyaXRlU3RyZWFtU2V0Q2xpZW50KG1fd3JpdGVTdHJlYW0uZ2V0KCksIHN0
YXRpY19jYXN0PENGT3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVTdHJlYW1DYWxsYmFjaywgJmNsaWVu
dENvbnRleHQpOwotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIENGUmVhZFN0cmVhbVNjaGVkdWxl
V2l0aFJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBsb2FkZXJSdW5Mb29wKCksIGtDRlJ1bkxv
b3BEZWZhdWx0TW9kZSk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3AobV93
cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUp
OwotI2Vsc2UKLSAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fcmVhZFN0cmVh
bS5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwot
ICAgIENGV3JpdGVTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29wKG1fd3JpdGVTdHJlYW0uZ2V0KCks
IENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSNlbmRpZgot
Ci0gICAgQ0ZSZWFkU3RyZWFtT3BlbihtX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIENGV3JpdGVT
dHJlYW1PcGVuKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOwotCi0gICAgaWYgKG1fcGFjUnVuTG9vcFNv
dXJjZSkKLSAgICAgICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOwotCi0gICAgbV9jb25uZWN0
aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKLX0KLQotdm9pZCogU29ja2V0U3RyZWFt
SGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5mbykKLXsKLSAgICBTb2Nr
ZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+
KGluZm8pOwotICAgIGhhbmRsZS0+cmVmKCk7Ci0gICAgcmV0dXJuIGhhbmRsZTsKLX0KLQotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCogaW5m
bykKLXsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tl
dFN0cmVhbUhhbmRsZSo+KGluZm8pOwotICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQotQ0ZTdHJp
bmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24odm9p
ZCopCi17Ci0gICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQgcHJveHkgUEFDIGZpbGUgZXhlY3V0
aW9uIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCi17Ci0gICAgaWYgKGlzTWFpblRocmVhZCgpKSB7Ci0g
ICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMb2NrIG11
dGV4OwotICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJsZTsKLQotICAgIGJvb2wgaXNGaW5p
c2hlZCA9IGZhbHNlOwotCi0gICAgY2FsbE9uTWFpblRocmVhZChbJl0gewotICAgICAgICBmdW5j
dGlvbigpOwotCi0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG11dGV4KTsKLSAg
ICAgICAgaXNGaW5pc2hlZCA9IHRydWU7Ci0gICAgICAgIGNvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eU9uZSgpOwotICAgIH0pOwotCi0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG11dGV4
KTsKLSAgICBjb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFsmXSB7IHJldHVybiBpc0Zpbmlz
aGVkOyB9KTsKLX0KLQotc3RydWN0IE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8gewotICAgIE1h
aW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUsIENGQXJy
YXlSZWYgcHJveHlMaXN0KSA6IGhhbmRsZShoYW5kbGUpLCBwcm94eUxpc3QocHJveHlMaXN0KSB7
IH0KLSAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBoYW5kbGU7Ci0gICAgQ0ZBcnJheVJl
ZiBwcm94eUxpc3Q7Ci19OwotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGFjRXhlY3V0aW9u
Q2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZikK
LXsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0
cmVhbUhhbmRsZSo+KGNsaWVudCk7Ci0KLSAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbJl0g
ewotICAgICAgICBBU1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBFeGVjdXRp
bmdQQUNGaWxlKTsKLSAgICAgICAgLy8gVGhpcyB0aW1lLCB0aGUgYXJyYXkgd29uJ3QgaGF2ZSBQ
QUMgYXMgYSBmaXJzdCBlbnRyeS4KLSAgICAgICAgaWYgKGhhbmRsZS0+bV9zdGF0ZSAhPSBDb25u
ZWN0aW5nKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBoYW5kbGUtPmNob29zZVByb3h5
RnJvbUFycmF5KHByb3h5TGlzdCk7Ci0gICAgICAgIGhhbmRsZS0+Y3JlYXRlU3RyZWFtcygpOwot
ICAgICAgICBoYW5kbGUtPnNjaGVkdWxlU3RyZWFtcygpOwotICAgIH0pOwotfQotCi12b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkK
LXsKLSAgICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3IgV2Vi
U29ja2V0IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgotICAgIENGU3RyZWFtQ2xpZW50Q29u
dGV4dCBjbGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUs
IHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbiB9
OwotICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrRXhlY3V0ZVByb3h5
QXV0b0NvbmZpZ3VyYXRpb25VUkwocGFjRmlsZVVSTCwgbV9odHRwc1VSTC5nZXQoKSwgcGFjRXhl
Y3V0aW9uQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KSk7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAg
IENGUnVuTG9vcEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5n
ZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNlbHNlCi0gICAgQ0ZSdW5Mb29wQWRkU291
cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOwotI2VuZGlmCi0gICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBF
eGVjdXRpbmdQQUNGaWxlOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVtb3ZlUEFD
UnVuTG9vcFNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKG1fcGFjUnVuTG9vcFNvdXJjZSk7Ci0KLSAg
ICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSk7Ci0j
aWYgUExBVEZPUk0oV0lOKQotICAgIENGUnVuTG9vcFJlbW92ZVNvdXJjZShsb2FkZXJSdW5Mb29w
KCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSNl
bHNlCi0gICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9w
YWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotI2VuZGlmCi0g
ICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OmNob29zZVByb3h5KCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwcm94eURp
Y3Rpb25hcnkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlTeXN0ZW1Qcm94eVNldHRpbmdzKCkpOwot
Ci0gICAgLy8gU09DS1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNUKSBwcm94aWVzIGFyZSBzdXBwb3J0
ZWQuCi0gICAgLy8gV2ViU29ja2V0IHByb3RvY29sIHJlbGllcyBvbiBoYW5kc2hha2UgYmVpbmcg
dHJhbnNmZXJyZWQgdW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEgcHJveHkgdGhhdCB3aWxsIG5vdCBt
b2RpZnkgaGVhZGVycy4KLSAgICAvLyBTaW5jZSBIVFRQIHByb3hpZXMgbXVzdCBhZGQgVmlhIGhl
YWRlcnMsIHRoZXkgYXJlIGhpZ2hseSB1bmxpa2VseSB0byB3b3JrLgotICAgIC8vIE1hbnkgQ09O
TkVDVCBwcm94aWVzIGxpbWl0IGNvbm5lY3Rpdml0eSB0byBwb3J0IDQ0Mywgc28gd2UgcHJlZmVy
IFNPQ0tTLCBpZiBjb25maWd1cmVkLgotCi0gICAgaWYgKCFwcm94eURpY3Rpb25hcnkpIHsKLSAg
ICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJMIGRvZXNuJ3Qga25vdyBhYm91dCBX
ZWJTb2NrZXQgc2NoZW1lcywgc28gcHJldGVuZCB0byB1c2UgaHR0cC4KLSAgICAvLyBBbHdheXMg
dXNlICJodHRwcyIgdG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4gcmVzdWx0IC0gd2UnbGwgdHJ5IHRv
IHVzZSB0aG9zZSBmb3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFueSBhcmUgY29uZmlndXJlZCB0byBy
ZWplY3QgY29ubmVjdGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhhbiA0NDMuCi0gICAgUmV0YWluUHRy
PENGQXJyYXlSZWY+IHByb3h5QXJyYXkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlQcm94aWVzRm9y
VVJMKG1faHR0cHNVUkwuZ2V0KCksIHByb3h5RGljdGlvbmFyeS5nZXQoKSkpOwotCi0gICAgY2hv
b3NlUHJveHlGcm9tQXJyYXkocHJveHlBcnJheS5nZXQoKSk7Ci19Ci0KLXZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpjaG9vc2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkpCi17
Ci0gICAgaWYgKCFwcm94eUFycmF5KSB7Ci0gICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBEaXJl
Y3Q7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDRkluZGV4IHByb3h5QXJyYXlDb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChwcm94eUFycmF5KTsKLQotICAgIC8vIFBBQyBpcyBhbHdheXMg
dGhlIGZpcnN0IGVudHJ5LCBpZiBwcmVzZW50LgotICAgIGlmIChwcm94eUFycmF5Q291bnQpIHsK
LSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9IHN0YXRpY19jYXN0PENGRGljdGlv
bmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwcm94eUFycmF5LCAwKSk7Ci0gICAgICAg
IENGVHlwZVJlZiBwcm94eVR5cGUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm94eUluZm8sIGtD
RlByb3h5VHlwZUtleSk7Ci0gICAgICAgIGlmIChwcm94eVR5cGUgJiYgQ0ZHZXRUeXBlSUQocHJv
eHlUeXBlKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Ci0gICAgICAgICAgICBpZiAoQ0ZFcXVh
bChwcm94eVR5cGUsIGtDRlByb3h5VHlwZUF1dG9Db25maWd1cmF0aW9uVVJMKSkgewotICAgICAg
ICAgICAgICAgIENGVHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJv
eHlJbmZvLCBrQ0ZQcm94eUF1dG9Db25maWd1cmF0aW9uVVJMS2V5KTsKLSAgICAgICAgICAgICAg
ICBpZiAocGFjRmlsZVVSTCAmJiBDRkdldFR5cGVJRChwYWNGaWxlVVJMKSA9PSBDRlVSTEdldFR5
cGVJRCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVQQUNGaWxlVVJMKHN0YXRpY19j
YXN0PENGVVJMUmVmPihwYWNGaWxlVVJMKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBDRkRpY3Rpb25hcnlSZWYgY2hvc2VuUHJveHkgPSAwOwotICAgIGZvciAoQ0ZJbmRleCBpID0g
MDsgaSA8IHByb3h5QXJyYXlDb3VudDsgKytpKSB7Ci0gICAgICAgIENGRGljdGlvbmFyeVJlZiBw
cm94eUluZm8gPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgocHJveHlBcnJheSwgaSkpOwotICAgICAgICBDRlR5cGVSZWYgcHJveHlUeXBlID0gQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eVR5cGVLZXkpOwotICAgICAgICBp
ZiAocHJveHlUeXBlICYmIENGR2V0VHlwZUlEKHByb3h5VHlwZSkgPT0gQ0ZTdHJpbmdHZXRUeXBl
SUQoKSkgewotICAgICAgICAgICAgaWYgKENGRXF1YWwocHJveHlUeXBlLCBrQ0ZQcm94eVR5cGVT
T0NLUykpIHsKLSAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rpb25UeXBlID0gU09DS1NQcm94eTsK
LSAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChDRkVxdWFsKHByb3h5VHlw
ZSwga0NGUHJveHlUeXBlSFRUUFMpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb25uZWN0aW9uVHlw
ZSA9IENPTk5FQ1RQcm94eTsKLSAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5SW5m
bzsKLSAgICAgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcgZm9yIHByb3hpZXMsIGFzIGEgU09D
S1Mgb25lIGlzIHByZWZlcmFibGUuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoY2hvc2VuUHJveHkpIHsKLSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGlvblR5cGUg
IT0gVW5rbm93bik7Ci0gICAgICAgIEFTU0VSVChtX2Nvbm5lY3Rpb25UeXBlICE9IERpcmVjdCk7
Ci0KLSAgICAgICAgQ0ZUeXBlUmVmIHByb3h5SG9zdCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNo
b3NlblByb3h5LCBrQ0ZQcm94eUhvc3ROYW1lS2V5KTsKLSAgICAgICAgQ0ZUeXBlUmVmIHByb3h5
UG9ydCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eVBvcnROdW1i
ZXJLZXkpOwotCi0gICAgICAgIGlmIChwcm94eUhvc3QgJiYgQ0ZHZXRUeXBlSUQocHJveHlIb3N0
KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpICYmIHByb3h5UG9ydCAmJiBDRkdldFR5cGVJRChwcm94
eVBvcnQpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKLSAgICAgICAgICAgIG1fcHJveHlIb3N0
ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9zdCk7Ci0gICAgICAgICAgICBtX3By
b3h5UG9ydCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihwcm94eVBvcnQpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb25uZWN0aW9uVHlwZSA9IERp
cmVjdDsKLX0KLQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygpCi17
Ci0gICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gVW5rbm93bikKLSAgICAgICAgY2hvb3NlUHJv
eHkoKTsKLQotICAgIC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93biwgdGhlbiB3ZSdyZSByZXNvbHZp
bmcgYSBQQUMgZmlsZSBhc3luY2hyb25vdXNseS4KLSAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9
PSBVbmtub3duKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGhvc3QgPSBtX3VybC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLQotICAgIC8vIENyZWF0aW5n
IHN0cmVhbXMgdG8gZmluYWwgZGVzdGluYXRpb24sIG5vdCB0byBwcm94eS4KLSAgICBDRlJlYWRT
dHJlYW1SZWYgcmVhZFN0cmVhbSA9IDA7Ci0gICAgQ0ZXcml0ZVN0cmVhbVJlZiB3cml0ZVN0cmVh
bSA9IDA7Ci0gICAgQ0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNvY2tldFRvSG9zdCgwLCBob3N0Lmdl
dCgpLCBwb3J0KCksICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJlYW0pOwotI2lmIFBMQVRGT1JNKElP
UykgfHwgUExBVEZPUk0oTUFDKQotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMjg1NTU4Nz4gX2tD
RlN0cmVhbVNvY2tldFNldE5vRGVsYXkgaXMgbm90IGV4cG9ydGVkIG9uIFdpbmRvd3MKLSAgICBD
RldyaXRlU3RyZWFtU2V0UHJvcGVydHkod3JpdGVTdHJlYW0sIF9rQ0ZTdHJlYW1Tb2NrZXRTZXRO
b0RlbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0jZW5kaWYKLQotICAgIG1fcmVhZFN0cmVhbSA9IGFk
b3B0Q0YocmVhZFN0cmVhbSk7Ci0gICAgbV93cml0ZVN0cmVhbSA9IGFkb3B0Q0Yod3JpdGVTdHJl
YW0pOwotCi0gICAgc3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBlKSB7Ci0gICAgY2FzZSBVbmtub3du
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBEaXJlY3Q6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU09DS1NQcm94eTogewotICAgICAg
ICAvLyBGSVhNRTogU09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxlbmdlLXJlc3BvbnNlLCBzaG91bGQg
d2UgdHJ5IHRvIGFwcGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5Y2hhaW4gcmlnaHQgYXdheT8KLSAg
ICAgICAgLy8gQnV0IFNPQ0tTNSBjcmVkZW50aWFscyBkb24ndCB3b3JrIGF0IHRoZSB0aW1lIG9m
IHRoaXMgd3JpdGluZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3NzY2OTg+LgotICAgICAgICBjb25z
dCB2b2lkKiBwcm94eUtleXNbXSA9IHsga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5SG9zdCwg
a0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5UG9ydCB9OwotICAgICAgICBjb25zdCB2b2lkKiBw
cm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkgfTsK
LSAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY29ubmVjdERpY3Rpb25hcnkgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtleXMsIHByb3h5VmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKHByb3h5S2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICAgICAgQ0ZSZWFkU3RyZWFt
U2V0UHJvcGVydHkobV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZTdHJlYW1Qcm9wZXJ0eVNPQ0tTUHJv
eHksIGNvbm5lY3REaWN0aW9uYXJ5LmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICBjYXNlIENPTk5FQ1RQcm94eToKLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlGb3JTdHJl
YW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkVXNlU1NMKCkpIHsK
LSAgICAgICAgQ0ZCb29sZWFuUmVmIHZhbGlkYXRlQ2VydGlmaWNhdGVDaGFpbiA9IFNldHRpbmdz
OjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9vbGVhbkZhbHNlIDoga0NGQm9vbGVh
blRydWU7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9IHsga0NGU3RyZWFtU1NMUGVlck5h
bWUsIGtDRlN0cmVhbVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xWYWxpZGF0ZXNDZXJ0aWZpY2F0ZUNo
YWluIH07Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBob3N0LmdldCgpLCBrQ0ZT
dHJlYW1Tb2NrZXRTZWN1cml0eUxldmVsTmVnb3RpYXRlZFNTTCwgdmFsaWRhdGVDZXJ0aWZpY2F0
ZUNoYWluIH07Ci0gICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNldHRpbmdzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVO
R1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgICAgIENGUmVhZFN0cmVhbVNldFByb3BlcnR5KG1f
cmVhZFN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3Mu
Z2V0KCkpOwotICAgICAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkobV93cml0ZVN0cmVhbS5n
ZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOwotICAg
IH0KLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OmdldFN0b3JlZENPTk5FQ1RQcm94eUNy
ZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBTdHJpbmcm
IGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQotewotICAgIC8vIEZJWE1FICg8cmRhcjovL3Byb2Js
ZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9t
IEF1dGhCcm9rZXJBZ2VudC4KLQotICAgIC8vIFRyeSBzeXN0ZW0gY3JlZGVudGlhbCBzdG9yYWdl
IGZpcnN0LCBtYXRjaGluZyBIVFRQIGJlaGF2aW9yIChDRk5ldHdvcmsgb25seSBhc2tzIHRoZSBj
bGllbnQgZm9yIHBhc3N3b3JkIGlmIGl0IGNvdWxkbid0IGZpbmQgaXQgaW4gS2V5Y2hhaW4pLgot
ICAgIENyZWRlbnRpYWwgc3RvcmVkQ3JlZGVudGlhbDsKLSAgICBpZiAoYXV0byogc3RvcmFnZVNl
c3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3JhZ2VTZXNzaW9uKG1fc2Vzc2lvbklE
KSkgewotICAgICAgICBzdG9yZWRDcmVkZW50aWFsID0gc3RvcmFnZVNlc3Npb24tPmNyZWRlbnRp
YWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSk7Ci0g
ICAgICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHN0b3Jl
ZENyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5nZXQocHJv
dGVjdGlvblNwYWNlKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RvcmVkQ3JlZGVudGlhbC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGxvZ2luID0gc3RvcmVkQ3JlZGVudGlh
bC51c2VyKCk7Ci0gICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVkZW50aWFsLnBhc3N3b3JkKCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0
aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1dGhlbnRpY2F0aW9uTWV0aG9kKENG
U3RyaW5nUmVmIG1ldGhvZCkKLXsKLSAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRo
ZW50aWNhdGlvblNjaGVtZUJhc2ljKSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOwotICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NG
SFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lRGlnZXN0KSkKLSAgICAgICAgcmV0dXJuIFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKLSAgICBpZiAoQ0ZFcXVhbCht
ZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5UTE0pKQotICAgICAgICByZXR1cm4g
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOwotICAgIGlmIChDRkVxdWFs
KG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlKSkKLSAgICAgICAg
cmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlOwotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZVVua25vd247Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjphZGRD
T05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBwcm94eVJlc3BvbnNlKQotewotICAg
IFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4gYXV0aGVudGljYXRpb24gPSBhZG9w
dENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJlc3BvbnNlKDAsIHByb3h5UmVzcG9u
c2UpKTsKLQotICAgIGlmICghQ0ZIVFRQQXV0aGVudGljYXRpb25SZXF1aXJlc1VzZXJOYW1lQW5k
UGFzc3dvcmQoYXV0aGVudGljYXRpb24uZ2V0KCkpKSB7Ci0gICAgICAgIC8vIFRoYXQncyBhbGwg
d2UgY2FuIG9mZmVyLi4uCi0gICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRo
aXMsIFNvY2tldFN0cmVhbUVycm9yKDAsIG1fdXJsLnN0cmluZygpLCAiUHJveHkgYXV0aGVudGlj
YXRpb24gc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdlYlNvY2tldHMiKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgcG9ydCA9IDA7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1
ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlwZSwgJnBvcnQpOwotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9u
Q29weU1ldGhvZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpOwotICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gcmVhbG1DRiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVudGljYXRpb25Db3B5UmVhbG0oYXV0
aGVudGljYXRpb24uZ2V0KCkpKTsKLQotICAgIGlmICghbWV0aG9kQ0YgfHwgIXJlYWxtQ0YpIHsK
LSAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgb24gc29tZSBPUyB2ZXJzaW9u
cyB3ZSBnZXQgaW5jb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBkYXRhLCBzZWUgPHJkYXI6Ly9wcm9i
bGVtLzEwNDE2MzE2Pi4KLSAgICAgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhp
cywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJXZWJTb2NrZXQgcHJveHkg
YXV0aGVudGljYXRpb24gY291bGRuJ3QgYmUgaGFuZGxlZCIpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2UoU3RyaW5nKG1fcHJv
eHlIb3N0LmdldCgpKSwgcG9ydCwgUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUywgU3RyaW5nKHJl
YWxtQ0YuZ2V0KCkpLCBhdXRoZW50aWNhdGlvblNjaGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhv
ZChtZXRob2RDRi5nZXQoKSkpOwotICAgIFN0cmluZyBsb2dpbjsKLSAgICBTdHJpbmcgcGFzc3dv
cmQ7Ci0gICAgaWYgKCFtX3NlbnRTdG9yZWRDcmVkZW50aWFscyAmJiBnZXRTdG9yZWRDT05ORUNU
UHJveHlDcmVkZW50aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxvZ2luLCBwYXNzd29yZCkpIHsKLSAg
ICAgICAgLy8gVHJ5IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50aWFscywgaWYgd2UgaGF2ZW4ndCB0
cmllZCB0aG9zZSBhbHJlYWR5LgotICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgcmVxdWVz
dCB0byBtYWtlIENGTmV0d29yayBhcHBseSBjcmVkZW50aWFscyB0byBpdC4gVW5mb3J0dW5hdGVs
eSwgdGhpcyBjYW5ub3Qgd29yayB3aXRoIE5UTE0gYXV0aGVudGljYXRpb24uCi0gICAgICAgIFJl
dGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBkdW1teVJlcXVlc3QgPSBhZG9wdENGKENGSFRUUE1l
c3NhZ2VDcmVhdGVSZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwgbV9odHRwc1VSTC5nZXQoKSwga0NG
SFRUUFZlcnNpb24xXzEpKTsKLQotICAgICAgICBCb29sZWFuIGFwcGxpZWRDcmVkZW50aWFscyA9
IENGSFRUUE1lc3NhZ2VBcHBseUNyZWRlbnRpYWxzKGR1bW15UmVxdWVzdC5nZXQoKSwgYXV0aGVu
dGljYXRpb24uZ2V0KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHBhc3N3b3JkLmNy
ZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFwcGxpZWRD
cmVkZW50aWFscywgYXBwbGllZENyZWRlbnRpYWxzKTsKLQotICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyA9IGFkb3B0Q0YoQ0ZIVFRQTWVzc2Fn
ZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5nZXQoKSwgQ0ZTVFIoIlByb3h5LUF1
dGhvcml6YXRpb24iKSkpOwotCi0gICAgICAgIGlmICghcHJveHlBdXRob3JpemF0aW9uU3RyaW5n
KSB7Ci0gICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBOVExNIGF1dGguCi0gICAgICAgICAg
ICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcigw
LCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBpcyBub3Qgc3Vw
cG9ydGVkIGZvciBXZWJTb2NrZXRzIikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiByZXN1bHRzIGluIGEgbmV3
IGNvbm5lY3Rpb24gYXR0ZW1wdC4KLSAgICAgICAgd2tTZXRDT05ORUNUUHJveHlBdXRob3JpemF0
aW9uRm9yU3RyZWFtKG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJveHlBdXRob3JpemF0aW9uU3RyaW5n
LmdldCgpKTsKLSAgICAgICAgbV9zZW50U3RvcmVkQ3JlZGVudGlhbHMgPSB0cnVlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IE9uIHBsYXRmb3JtcyB3aGVyZSBBdXRo
QnJva2VyQWdlbnQgaXMgbm90IGF2YWlsYWJsZSwgYXNrIHRoZSBjbGllbnQgaWYgY3JlZGVudGlh
bHMgY291bGQgbm90IGJlIGZvdW5kLgotCi0gICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5nKCksICJQcm94eSBjcmVk
ZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKLX0KLQotQ0ZTdHJpbmdSZWYgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQotewotICAgIFNv
Y2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxl
Kj4oaW5mbyk7Ci0gICAgcmV0dXJuIFN0cmluZygiV2ViS2l0IHNvY2tldCBzdHJlYW0sICIgKyBo
YW5kbGUtPm1fdXJsLnN0cmluZygpKS5jcmVhdGVDRlN0cmluZygpLmxlYWtSZWYoKTsKLX0KLQot
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlJlYWRTdHJlYW1S
ZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0lu
Zm8pCi17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2Nr
ZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJlYW0uZ2V0KCkpOwotICAgIC8vIFdv
cmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3Mz4uIEtlZXBpbmcgdGhpcyBiZWxv
dyB0aGUgYXNzZXJ0aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIgc3RlcHMgdG8gcmVwcm9kdWNlIHRo
aXMuCi0gICAgaWYgKCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkKLSAgICAgICAgcmV0dXJuOwotCi0j
aWYgUExBVEZPUk0oV0lOKQotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3Rv
cihoYW5kbGUpOwotICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFsmXSB7Ci0gICAgICAgIGlm
IChoYW5kbGUtPm1fcmVhZFN0cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNh
bGxiYWNrKHR5cGUpOwotICAgIH0pOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOwotI2VuZGlmCi19Ci0KLXZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVTdHJlYW1S
ZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxsQmFja0lu
Zm8pCi17Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2Nr
ZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8pOwotICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dyaXRlU3RyZWFtLmdldCgpKTsKLSAgICAvLyBU
aGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBwcmFjdGljZSwgeWV0IGl0IHNlZW1zIGxpa2Ug
aXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQgc3RyZWFtIGNhbGxiYWNrLgotICAg
IGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFU
Rk9STShXSU4pCi0gICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdG9yKGhhbmRs
ZSk7Ci0gICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZdIHsKLSAgICAgICAgaWYgKGhhbmRs
ZS0+bV93cml0ZVN0cmVhbSkKLSAgICAgICAgICAgIGhhbmRsZS0+d3JpdGVTdHJlYW1DYWxsYmFj
ayh0eXBlKTsKLSAgICB9KTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBoYW5kbGUtPndyaXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSB0
eXBlKQotewotICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE5vbmU6
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50T3BlbkNvbXBsZXRlZDoK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRIYXNCeXRlc0F2YWlsYWJs
ZTogewotICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gV2FpdGluZ0ZvckNyZWRl
bnRpYWxzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtX2Nvbm5lY3RpbmdT
dWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ29ubmVjdCkgewotICAgICAgICAgICAgaWYgKG1fY29ubmVj
dGlvblR5cGUgPT0gQ09OTkVDVFByb3h5KSB7Ci0gICAgICAgICAgICAgICAgUmV0YWluUHRyPENG
SFRUUE1lc3NhZ2VSZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9wdENGKHdrQ29weUNPTk5FQ1RQcm94
eVJlc3BvbnNlKG1fcmVhZFN0cmVhbS5nZXQoKSwgbV9odHRwc1VSTC5nZXQoKSwgbV9wcm94eUhv
c3QuZ2V0KCksIG1fcHJveHlQb3J0LmdldCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm94
eVJlc3BvbnNlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAg
ICBDRkluZGV4IHByb3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQTWVzc2FnZUdldFJlc3BvbnNlU3Rh
dHVzQ29kZShwcm94eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBy
b3h5UmVzcG9uc2VDb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyMDA6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0MDc6Ci0gICAgICAgICAgICAgICAgICAgIGFk
ZENPTk5FQ1RDcmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdldCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9y
KHN0YXRpY19jYXN0PGludD4ocHJveHlSZXNwb25zZUNvZGUpLCBtX3VybC5zdHJpbmcoKSwgIlBy
b3h5IGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCB1bmV4cGVjdGVkIHJlc3Bv
bnNlIGNvZGUiKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwotICAgICAgICAg
ICAgbV9zdGF0ZSA9IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3Ry
ZWFtKCp0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdl
IGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2Ug
dGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsKLSAgICAgICAg
QVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAgICAgICAgQ0ZJ
bmRleCBsZW5ndGg7Ci0gICAgICAgIFVJbnQ4IGxvY2FsQnVmZmVyWzEwMjRdOyAvLyBVc2VkIGlm
IENGUmVhZFN0cmVhbUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1cm4gYW55dGhpbmcuCi0gICAgICAg
IGNvbnN0IFVJbnQ4KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRCdWZmZXIobV9yZWFkU3RyZWFtLmdl
dCgpLCAwLCAmbGVuZ3RoKTsKLSAgICAgICAgaWYgKCFwdHIpIHsKLSAgICAgICAgICAgIGxlbmd0
aCA9IENGUmVhZFN0cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdldCgpLCBsb2NhbEJ1ZmZlciwgc2l6
ZW9mKGxvY2FsQnVmZmVyKSk7Ci0gICAgICAgICAgICBwdHIgPSBsb2NhbEJ1ZmZlcjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghbGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBsZW5ndGgpOwotCi0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Uga0NGU3RyZWFtRXZl
bnRFcnJvck9jY3VycmVkOiB7Ci0gICAgICAgIFJldGFpblB0cjxDRkVycm9yUmVmPiBlcnJvciA9
IGFkb3B0Q0YoQ0ZSZWFkU3RyZWFtQ29weUVycm9yKG1fcmVhZFN0cmVhbS5nZXQoKSkpOwotICAg
ICAgICByZXBvcnRFcnJvclRvQ2xpZW50KGVycm9yLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5jb3VudGVyZWQ6Ci0gICAgICAgIHBs
YXRmb3JtQ2xvc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSkK
LXsKLSAgICBzd2l0Y2godHlwZSkgewotICAgIGNhc2Uga0NGU3RyZWFtRXZlbnROb25lOgotICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIGtDRlN0cmVhbUV2ZW50SGFzQnl0ZXNBdmFpbGFibGU6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBr
Q0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOiB7Ci0gICAgICAgIC8vIENhbiBiZSBmYWxzZSBp
ZiByZWFkIHN0cmVhbSBjYWxsYmFjayBqdXN0IGRlY2lkZWQgdG8gcmV0cnkgYSBDT05ORUNUIHdp
dGggY3JlZGVudGlhbHMuCi0gICAgICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVz
KG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ3JlZGVudGlhbHMpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IFdhaXRp
bmdGb3JDb25uZWN0KSB7Ci0gICAgICAgICAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9PSBDT05O
RUNUUHJveHkpIHsKLSAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJlZj4g
cHJveHlSZXNwb25zZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UobV9yZWFk
U3RyZWFtLmdldCgpLCBtX2h0dHBzVVJMLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94
eVBvcnQuZ2V0KCkpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXByb3h5UmVzcG9uc2UpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIC8vIERvbid0IHdyaXRl
IGFueXRoaW5nIHVudGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNrIGhhcyBkZWFsdCB3aXRoIENPTk5F
Q1QgY3JlZGVudGlhbHMuCi0gICAgICAgICAgICAgICAgLy8gVGhlIG9yZGVyIG9mIGNhbGxiYWNr
cyBpcyBub3QgZGVmaW5lZCwgc28gdGhpcyBjYW4gYmUgY2FsbGVkIGJlZm9yZSByZWFkU3RyZWFt
Q2FsbGJhY2sncyBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZhaWxhYmxlLgotICAgICAgICAgICAg
ICAgIENGSW5kZXggcHJveHlSZXNwb25zZUNvZGUgPSBDRkhUVFBNZXNzYWdlR2V0UmVzcG9uc2VT
dGF0dXNDb2RlKHByb3h5UmVzcG9uc2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChwcm94
eVJlc3BvbnNlQ29kZSAhPSAyMDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0gQ29ubmVjdGVkOwot
ICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47Ci0gICAgICAgICAgICBtX2NsaWVudC5kaWRPcGVu
U29ja2V0U3RyZWFtKCp0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vdCBhbiAiZWxz
ZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3ZlLCBhbmQgaXQgY291
bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBPcGVuKTsK
LSAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5lY3RlZCk7Ci0KLSAg
ICAgICAgc2VuZFBlbmRpbmdEYXRhKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6IHsKLSAgICAgICAgUmV0YWluUHRyPENGRXJy
b3JSZWY+IGVycm9yID0gYWRvcHRDRihDRldyaXRlU3RyZWFtQ29weUVycm9yKG1fd3JpdGVTdHJl
YW0uZ2V0KCkpKTsKLSAgICAgICAgcmVwb3J0RXJyb3JUb0NsaWVudChlcnJvci5nZXQoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVuZEVuY291bnRl
cmVkOgotICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3ZSBoYW5kbGUgY2xvc2luZyBpbiBy
ZWFkIGNhbGxiYWNrLCBidXQgdGhlc2UgY2FuIGNvbWUgaW5kZXBlbmRlbnRseSAoZS5nLiBhIHNl
cnZlciBjYW4gc3RvcCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNlbmRpbmcgZGF0YSkuCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJv
clRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCi17Ci0gICAgQ0ZJbmRleCBlcnJvckNvZGUgPSBD
RkVycm9yR2V0Q29kZShlcnJvcik7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotCi0jaWYgUExB
VEZPUk0oTUFDKQotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1k
ZWNsYXJhdGlvbnMiCi0jZW5kaWYKLQotICAgIGlmIChDRkVxdWFsKENGRXJyb3JHZXREb21haW4o
ZXJyb3IpLCBrQ0ZFcnJvckRvbWFpbk9TU3RhdHVzKSkgewotICAgICAgICBjb25zdCBjaGFyKiBk
ZXNjcmlwdGlvbk9TU3RhdHVzID0gR2V0TWFjT1NTdGF0dXNDb21tZW50U3RyaW5nKHN0YXRpY19j
YXN0PE9TU3RhdHVzPihlcnJvckNvZGUpKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0aW9uT1NTdGF0
dXMgJiYgZGVzY3JpcHRpb25PU1N0YXR1c1swXSAhPSAnXDAnKQotICAgICAgICAgICAgZGVzY3Jp
cHRpb24gPSAiT1NTdGF0dXMgRXJyb3IgIiArIFN0cmluZzo6bnVtYmVyKGVycm9yQ29kZSkgKyAi
OiAiICsgZGVzY3JpcHRpb25PU1N0YXR1czsKLSAgICB9Ci0KLSNpZiBDT01QSUxFUihDTEFORykK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgotCi0jZW5kaWYKLQotICAgIGlm
IChkZXNjcmlwdGlvbi5pc051bGwoKSkgewotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGRlc2NyaXB0aW9uQ0YgPSBhZG9wdENGKENGRXJyb3JDb3B5RGVzY3JpcHRpb24oZXJyb3IpKTsK
LSAgICAgICAgZGVzY3JpcHRpb24gPSBTdHJpbmcoZGVzY3JpcHRpb25DRi5nZXQoKSk7Ci0gICAg
fQotCi0gICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFt
RXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX3VybC5zdHJpbmcoKSwgZGVzY3Jp
cHRpb24pKTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxlKCkK
LXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkdG9yIiwgdGhpcyk7
Ci0KLSAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7Ci19Ci0KLWludCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewot
ICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBDRldyaXRlU3RyZWFtV3JpdGUobV93
cml0ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGRhdGEpLCBs
ZW5ndGgpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCi17
Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIs
IHRoaXMpOwotCi0gICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkgCi0gICAgICAgIHJlbW92ZVBB
Q1J1bkxvb3BTb3VyY2UoKTsKLQotICAgIEFTU0VSVCghbV9yZWFkU3RyZWFtID09ICFtX3dyaXRl
U3RyZWFtKTsKLSAgICBpZiAoIW1fcmVhZFN0cmVhbSkgewotICAgICAgICBpZiAobV9jb25uZWN0
aW5nU3Vic3RhdGUgPT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1YnN0YXRlID09IEV4ZWN1dGluZ1BB
Q0ZpbGUpCi0gICAgICAgICAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgQ0ZSZWFk
U3RyZWFtVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgbG9hZGVyUnVu
TG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAgIENGV3JpdGVTdHJlYW1VbnNjaGVk
dWxlRnJvbVJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZS
dW5Mb29wRGVmYXVsdE1vZGUpOwotI2Vsc2UKLSAgICBDRlJlYWRTdHJlYW1VbnNjaGVkdWxlRnJv
bVJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1
bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgQ0ZXcml0ZVN0cmVhbVVuc2NoZWR1bGVGcm9tUnVuTG9v
cChtX3dyaXRlU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BD
b21tb25Nb2Rlcyk7Ci0jZW5kaWYKLQotICAgIENGUmVhZFN0cmVhbUNsb3NlKG1fcmVhZFN0cmVh
bS5nZXQoKSk7Ci0gICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOwot
ICAgIAotICAgIG1fcmVhZFN0cmVhbSA9IDA7Ci0gICAgbV93cml0ZVN0cmVhbSA9IDA7Ci0KLSAg
ICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXVuc2lnbmVkIHNo
b3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0Ci17Ci0gICAgaWYgKHVuc2lnbmVk
IHNob3J0IHVybFBvcnQgPSBtX3VybC5wb3J0KCkpCi0gICAgICAgIHJldHVybiB1cmxQb3J0Owot
ICAgIGlmIChzaG91bGRVc2VTU0woKSkKLSAgICAgICAgcmV0dXJuIDQ0MzsKLSAgICByZXR1cm4g
ODA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUNGTmV0
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0
aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiU2Vzc2lvbklELmgi
CisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKwordHlwZWRl
ZiBzdHJ1Y3QgX19DRkhUVFBNZXNzYWdlKiBDRkhUVFBNZXNzYWdlUmVmOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENyZWRlbnRpYWw7CitjbGFzcyBQcm90ZWN0aW9uU3BhY2U7Citj
bGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0cmVhbUhhbmRs
ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJs
aWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU29ja2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50LCBzZXNzaW9uSUQpKTsgfQorCisgICAg
dmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBp
bnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNsb3NlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTb2NrZXRTdHJl
YW1IYW5kbGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiwgU2Vzc2lvbklE
KTsKKyAgICB2b2lkIGNyZWF0ZVN0cmVhbXMoKTsKKyAgICB2b2lkIHNjaGVkdWxlU3RyZWFtcygp
OworICAgIHZvaWQgY2hvb3NlUHJveHkoKTsKKyAgICB2b2lkIGNob29zZVByb3h5RnJvbUFycmF5
KENGQXJyYXlSZWYpOworICAgIHZvaWQgZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYpOworICAg
IHZvaWQgcmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpOworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BT
b3VyY2VSZWY+IG1fcGFjUnVuTG9vcFNvdXJjZTsKKyAgICBzdGF0aWMgdm9pZCBwYWNFeGVjdXRp
b25DYWxsYmFjayh2b2lkKiBjbGllbnQsIENGQXJyYXlSZWYgcHJveHlMaXN0LCBDRkVycm9yUmVm
IGVycm9yKTsKKyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgY29weVBBQ0V4ZWN1dGlvbkRlc2NyaXB0
aW9uKHZvaWQqKTsKKworICAgIGJvb2wgc2hvdWxkVXNlU1NMKCkgY29uc3QgeyByZXR1cm4gbV91
cmwucHJvdG9jb2xJcygid3NzIik7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0KCkgY29uc3Q7
CisKKyAgICB2b2lkIGFkZENPTk5FQ1RDcmVkZW50aWFscyhDRkhUVFBNZXNzYWdlUmVmIHJlc3Bv
bnNlKTsKKworICAgIHN0YXRpYyB2b2lkKiByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9pZCop
OworICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUodm9pZCopOworICAg
IHN0YXRpYyBDRlN0cmluZ1JlZiBjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKik7CisgICAg
c3RhdGljIHZvaWQgcmVhZFN0cmVhbUNhbGxiYWNrKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJlYW1F
dmVudFR5cGUsIHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCB3cml0ZVN0cmVhbUNhbGxiYWNrKENG
V3JpdGVTdHJlYW1SZWYsIENGU3RyZWFtRXZlbnRUeXBlLCB2b2lkKik7CisgICAgdm9pZCByZWFk
U3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUpOworICAgIHZvaWQgd3JpdGVTdHJlYW1D
YWxsYmFjayhDRlN0cmVhbUV2ZW50VHlwZSk7CisKKyAgICB2b2lkIHJlcG9ydEVycm9yVG9DbGll
bnQoQ0ZFcnJvclJlZik7CisKKyAgICBib29sIGdldFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRp
YWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYsIFN0cmluZyYgbG9naW4sIFN0cmluZyYgcGFzc3dv
cmQpOworCisgICAgZW51bSBDb25uZWN0aW5nU3Vic3RhdGUgeyBOZXcsIEV4ZWN1dGluZ1BBQ0Zp
bGUsIFdhaXRpbmdGb3JDcmVkZW50aWFscywgV2FpdGluZ0ZvckNvbm5lY3QsIENvbm5lY3RlZCB9
OworICAgIENvbm5lY3RpbmdTdWJzdGF0ZSBtX2Nvbm5lY3RpbmdTdWJzdGF0ZTsKKworICAgIGVu
dW0gQ29ubmVjdGlvblR5cGUgeyBVbmtub3duLCBEaXJlY3QsIFNPQ0tTUHJveHksIENPTk5FQ1RQ
cm94eSB9OworICAgIENvbm5lY3Rpb25UeXBlIG1fY29ubmVjdGlvblR5cGU7CisgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBtX3Byb3h5SG9zdDsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+
IG1fcHJveHlQb3J0OworCisgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VSZWY+IG1fcHJveHlS
ZXNwb25zZU1lc3NhZ2U7CisgICAgYm9vbCBtX3NlbnRTdG9yZWRDcmVkZW50aWFsczsKKyAgICBS
ZXRhaW5QdHI8Q0ZSZWFkU3RyZWFtUmVmPiBtX3JlYWRTdHJlYW07CisgICAgUmV0YWluUHRyPENG
V3JpdGVTdHJlYW1SZWY+IG1fd3JpdGVTdHJlYW07CisKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+
IG1faHR0cHNVUkw7IC8vIHdzKHMpOiByZXBsYWNlZCB3aXRoIGh0dHBzOgorICAgIFNlc3Npb25J
RCBtX3Nlc3Npb25JRDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0
cmVhbUhhbmRsZUltcGwuaAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDkgKzMyLDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU2Vzc2lvbklELmgi
Ci0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZS5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX19DRkhUVFBNZXNzYWdl
KiBDRkhUVFBNZXNzYWdlUmVmOwogCkBAIC00NCwxNyArNDMsMTcgQEAgY2xhc3MgQ3JlZGVudGlh
bDsKIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dDsKIAotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsK
K2NsYXNzIFNvY2tldFN0cmVhbUhhbmRsZUltcGwgOiBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxl
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNv
bnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lvbklE
IHNlc3Npb25JRCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJs
LCBjbGllbnQsIHNlc3Npb25JRCkpOyB9CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5k
bGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGll
bnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCh1cmwsIGNsaWVudCwgc2Vzc2lvbklEKSk7IH0KIAotICAgIHZpcnR1YWwg
flNvY2tldFN0cmVhbUhhbmRsZSgpOworICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZUlt
cGwoKTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCk7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2xvc2UoKTsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmLCBTZXNzaW9uSUQpOworICAgIFdFQkNPUkVfRVhQT1JUIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
JiwgU2Vzc2lvbklEKTsKICAgICB2b2lkIGNyZWF0ZVN0cmVhbXMoKTsKICAgICB2b2lkIHNjaGVk
dWxlU3RyZWFtcygpOwogICAgIHZvaWQgY2hvb3NlUHJveHkoKTsKQEAgLTYyLDcgKzYxLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVQQUNGaWxlVVJMKENGVVJMUmVmKTsKICAgICB2b2lk
IHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wU291cmNl
UmVmPiBtX3BhY1J1bkxvb3BTb3VyY2U7Ci0gICAgc3RhdGljIHZvaWQgcGFjRXhlY3V0aW9uQ2Fs
bGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZiBlcnJv
cik7CisgICAgc3RhdGljIHZvaWQgcGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBD
RkFycmF5UmVmIHByb3h5TGlzdCwgQ0ZFcnJvclJlZik7CiAgICAgc3RhdGljIENGU3RyaW5nUmVm
IGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbih2b2lkKik7CiAKICAgICBib29sIHNob3VsZFVz
ZVNTTCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsLnByb3RvY29sSXMoIndzcyIpOyB9CkBAIC05OSw0
ICs5OCw0IEBAIHByaXZhdGU6CiAgICAgU2Vzc2lvbklEIG1fc2Vzc2lvbklEOwogfTsKIAotfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlSW1wbENGTmV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUltcGxDRk5ldC5jcHAJKHJldmlzaW9uIDIwNDQ2NikJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5j
cHA6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRT
dHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgi
CisKKyNpbmNsdWRlICJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2Uu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0b3JhZ2VTZXNzaW9u
LmgiCisjaW5jbHVkZSAiUHJvdGVjdGlvblNwYWNlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
TmV0d29yay5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiTG9hZGVy
UnVuTG9vcENGLmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgorI2luY2x1ZGUg
PFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbHNlCisj
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9S
TShJT1MpIHx8IFBMQVRGT1JNKE1BQykKK2V4dGVybiAiQyIgY29uc3QgQ0ZTdHJpbmdSZWYgX2tD
RlN0cmVhbVNvY2tldFNldE5vRGVsYXk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2ltcG9ydCA8Q0ZOZXR3b3JrU1BJLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCBzZXNzaW9uSUQpCisg
ICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQorICAgICwgbV9jb25uZWN0
aW5nU3Vic3RhdGUoTmV3KQorICAgICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQorICAgICwg
bV9zZW50U3RvcmVkQ3JlZGVudGlhbHMoZmFsc2UpCisgICAgLCBtX3Nlc3Npb25JRChzZXNzaW9u
SUQpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNsaWVu
dCAlcCIsIHRoaXMsICZtX2NsaWVudCk7CisKKyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoIndz
IikgfHwgdXJsLnByb3RvY29sSXMoIndzcyIpKTsKKworICAgIFVSTCBodHRwc1VSTChVUkwoKSwg
Imh0dHBzOi8vIiArIG1fdXJsLmhvc3QoKSk7CisgICAgbV9odHRwc1VSTCA9IGh0dHBzVVJMLmNy
ZWF0ZUNGVVJMKCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyBEb24ndCBjaGVjayBm
b3IgSFNUUyB2aW9sYXRpb24gZm9yIGVwaGVtZXJhbCBzZXNzaW9ucyBzaW5jZQorICAgIC8vIEhT
VFMgc3RhdGUgc2hvdWxkIG5vdCB0cmFuc2ZlciBiZXR3ZWVuIHJlZ3VsYXIgYW5kIHByaXZhdGUg
YnJvd3NpbmcuCisgICAgaWYgKHVybC5wcm90b2NvbElzKCJ3cyIpCisgICAgICAgICYmICFzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKQorICAgICAgICAmJiBfQ0ZOZXR3b3JrSXNLbm93bkhTVFNIb3N0
V2l0aFNlc3Npb24obV9odHRwc1VSTC5nZXQoKSwgbnVsbHB0cikpIHsKKyAgICAgICAgbV9jbGll
bnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwu
c3RyaW5nKCksICJXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQgYmVjYXVzZSBpdCB2aW9sYXRl
cyBIVFRQIFN0cmljdCBUcmFuc3BvcnQgU2VjdXJpdHkuIikpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmCisKKyAgICBjcmVhdGVTdHJlYW1zKCk7CisgICAgQVNTRVJUKCFtX3JlYWRT
dHJlYW0gPT0gIW1fd3JpdGVTdHJlYW0pOworICAgIGlmICghbV9yZWFkU3RyZWFtKSAvLyBEb2lu
ZyBhc3luY2hyb25vdXMgUEFDIGZpbGUgcHJvY2Vzc2luZywgc3RyZWFtcyB3aWxsIGJlIGNyZWF0
ZWQgbGF0ZXIuCisgICAgICAgIHJldHVybjsKKworICAgIHNjaGVkdWxlU3RyZWFtcygpOworfQor
Cit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c2NoZWR1bGVTdHJlYW1zKCkKK3sKKyAgICBBU1NF
UlQobV9yZWFkU3RyZWFtKTsKKyAgICBBU1NFUlQobV93cml0ZVN0cmVhbSk7CisKKyAgICBDRlN0
cmVhbUNsaWVudENvbnRleHQgY2xpZW50Q29udGV4dCA9IHsgMCwgdGhpcywgcmV0YWluU29ja2V0
U3RyZWFtSGFuZGxlLCByZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlLCBjb3B5Q0ZTdHJlYW1EZXNj
cmlwdGlvbiB9OworICAgIC8vIEZJWE1FOiBQYXNzIHNwZWNpZmljIGV2ZW50cyB3ZSdyZSBpbnRl
cmVzdGVkIGluIGluc3RlYWQgb2YgLTEuCisgICAgQ0ZSZWFkU3RyZWFtU2V0Q2xpZW50KG1fcmVh
ZFN0cmVhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Q0ZPcHRpb25GbGFncz4oLTEpLCByZWFkU3RyZWFt
Q2FsbGJhY2ssICZjbGllbnRDb250ZXh0KTsKKyAgICBDRldyaXRlU3RyZWFtU2V0Q2xpZW50KG1f
d3JpdGVTdHJlYW0uZ2V0KCksIHN0YXRpY19jYXN0PENGT3B0aW9uRmxhZ3M+KC0xKSwgd3JpdGVT
dHJlYW1DYWxsYmFjaywgJmNsaWVudENvbnRleHQpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAg
IENGUmVhZFN0cmVhbVNjaGVkdWxlV2l0aFJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBsb2Fk
ZXJSdW5Mb29wKCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgQ0ZXcml0ZVN0cmVhbVNj
aGVkdWxlV2l0aFJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBr
Q0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlJlYWRTdHJlYW1TY2hlZHVsZVdp
dGhSdW5Mb29wKG1fcmVhZFN0cmVhbS5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZS
dW5Mb29wQ29tbW9uTW9kZXMpOworICAgIENGV3JpdGVTdHJlYW1TY2hlZHVsZVdpdGhSdW5Mb29w
KG1fd3JpdGVTdHJlYW0uZ2V0KCksIENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcENv
bW1vbk1vZGVzKTsKKyNlbmRpZgorCisgICAgQ0ZSZWFkU3RyZWFtT3BlbihtX3JlYWRTdHJlYW0u
Z2V0KCkpOworICAgIENGV3JpdGVTdHJlYW1PcGVuKG1fd3JpdGVTdHJlYW0uZ2V0KCkpOworCisg
ICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJjZSkKKyAgICAgICAgcmVtb3ZlUEFDUnVuTG9vcFNvdXJj
ZSgpOworCisgICAgbV9jb25uZWN0aW5nU3Vic3RhdGUgPSBXYWl0aW5nRm9yQ29ubmVjdDsKK30K
Kwordm9pZCogU29ja2V0U3RyZWFtSGFuZGxlOjpyZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUodm9p
ZCogaW5mbykKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0
PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIGhhbmRsZS0+cmVmKCk7CisgICAgcmV0
dXJuIGhhbmRsZTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlbGVhc2VTb2NrZXRT
dHJlYW1IYW5kbGUodm9pZCogaW5mbykKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRs
ZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOworICAgIGhhbmRsZS0+
ZGVyZWYoKTsKK30KKworQ0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhl
Y3V0aW9uRGVzY3JpcHRpb24odm9pZCopCit7CisgICAgcmV0dXJuIENGU1RSKCJXZWJTb2NrZXQg
cHJveHkgUEFDIGZpbGUgZXhlY3V0aW9uIik7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxPbk1haW5U
aHJlYWRBbmRXYWl0KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCit7CisgICAgaWYg
KGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBMb2NrIG11dGV4OworICAgIENvbmRpdGlvbiBjb25kaXRpb25WYXJpYWJs
ZTsKKworICAgIGJvb2wgaXNGaW5pc2hlZCA9IGZhbHNlOworCisgICAgY2FsbE9uTWFpblRocmVh
ZChbJl0geworICAgICAgICBmdW5jdGlvbigpOworCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG11dGV4KTsKKyAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7CisgICAgICAgIGNv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOworICAgIH0pOworCisgICAgc3RkOjp1bmlxdWVf
bG9jazxMb2NrPiBsb2NrKG11dGV4KTsKKyAgICBjb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ss
IFsmXSB7IHJldHVybiBpc0ZpbmlzaGVkOyB9KTsKK30KKworc3RydWN0IE1haW5UaHJlYWRQQUND
YWxsYmFja0luZm8geworICAgIE1haW5UaHJlYWRQQUNDYWxsYmFja0luZm8oU29ja2V0U3RyZWFt
SGFuZGxlKiBoYW5kbGUsIENGQXJyYXlSZWYgcHJveHlMaXN0KSA6IGhhbmRsZShoYW5kbGUpLCBw
cm94eUxpc3QocHJveHlMaXN0KSB7IH0KKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBo
YW5kbGU7CisgICAgQ0ZBcnJheVJlZiBwcm94eUxpc3Q7Cit9OworCit2b2lkIFNvY2tldFN0cmVh
bUhhbmRsZTo6cGFjRXhlY3V0aW9uQ2FsbGJhY2sodm9pZCogY2xpZW50LCBDRkFycmF5UmVmIHBy
b3h5TGlzdCwgQ0ZFcnJvclJlZikKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGNsaWVudCk7CisKKyAgICBjYWxsT25N
YWluVGhyZWFkQW5kV2FpdChbJl0geworICAgICAgICBBU1NFUlQoaGFuZGxlLT5tX2Nvbm5lY3Rp
bmdTdWJzdGF0ZSA9PSBFeGVjdXRpbmdQQUNGaWxlKTsKKyAgICAgICAgLy8gVGhpcyB0aW1lLCB0
aGUgYXJyYXkgd29uJ3QgaGF2ZSBQQUMgYXMgYSBmaXJzdCBlbnRyeS4KKyAgICAgICAgaWYgKGhh
bmRsZS0+bV9zdGF0ZSAhPSBDb25uZWN0aW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBoYW5kbGUtPmNob29zZVByb3h5RnJvbUFycmF5KHByb3h5TGlzdCk7CisgICAgICAgIGhhbmRs
ZS0+Y3JlYXRlU3RyZWFtcygpOworICAgICAgICBoYW5kbGUtPnNjaGVkdWxlU3RyZWFtcygpOwor
ICAgIH0pOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZXhlY3V0ZVBBQ0ZpbGVVUkwo
Q0ZVUkxSZWYgcGFjRmlsZVVSTCkKK3sKKyAgICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0
eSBwcm94eSBhcnJheSBmb3IgV2ViU29ja2V0IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgor
ICAgIENGU3RyZWFtQ2xpZW50Q29udGV4dCBjbGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRh
aW5Tb2NrZXRTdHJlYW1IYW5kbGUsIHJlbGVhc2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNF
eGVjdXRpb25EZXNjcmlwdGlvbiB9OworICAgIG1fcGFjUnVuTG9vcFNvdXJjZSA9IGFkb3B0Q0Yo
Q0ZOZXR3b3JrRXhlY3V0ZVByb3h5QXV0b0NvbmZpZ3VyYXRpb25VUkwocGFjRmlsZVVSTCwgbV9o
dHRwc1VSTC5nZXQoKSwgcGFjRXhlY3V0aW9uQ2FsbGJhY2ssICZjbGllbnRDb250ZXh0KSk7Cisj
aWYgUExBVEZPUk0oV0lOKQorICAgIENGUnVuTG9vcEFkZFNvdXJjZShsb2FkZXJSdW5Mb29wKCks
IG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyNlbHNl
CisgICAgQ0ZSdW5Mb29wQWRkU291cmNlKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5M
b29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworI2VuZGlmCisgICAgbV9j
b25uZWN0aW5nU3Vic3RhdGUgPSBFeGVjdXRpbmdQQUNGaWxlOworfQorCit2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpCit7CisgICAgQVNTRVJUKG1fcGFj
UnVuTG9vcFNvdXJjZSk7CisKKyAgICBDRlJ1bkxvb3BTb3VyY2VJbnZhbGlkYXRlKG1fcGFjUnVu
TG9vcFNvdXJjZS5nZXQoKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIENGUnVuTG9vcFJlbW92
ZVNvdXJjZShsb2FkZXJSdW5Mb29wKCksIG1fcGFjUnVuTG9vcFNvdXJjZS5nZXQoKSwga0NGUnVu
TG9vcERlZmF1bHRNb2RlKTsKKyNlbHNlCisgICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKENGUnVu
TG9vcEdldEN1cnJlbnQoKSwgbV9wYWNSdW5Mb29wU291cmNlLmdldCgpLCBrQ0ZSdW5Mb29wQ29t
bW9uTW9kZXMpOworI2VuZGlmCisgICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsKK30KKwordm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5KCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBwcm94eURpY3Rpb25hcnkgPSBhZG9wdENGKENGTmV0d29ya0NvcHlTeXN0
ZW1Qcm94eVNldHRpbmdzKCkpOworCisgICAgLy8gU09DS1Mgb3IgSFRUUFMgKEFLQSBDT05ORUNU
KSBwcm94aWVzIGFyZSBzdXBwb3J0ZWQuCisgICAgLy8gV2ViU29ja2V0IHByb3RvY29sIHJlbGll
cyBvbiBoYW5kc2hha2UgYmVpbmcgdHJhbnNmZXJyZWQgdW5jaGFuZ2VkLCBzbyB3ZSBuZWVkIGEg
cHJveHkgdGhhdCB3aWxsIG5vdCBtb2RpZnkgaGVhZGVycy4KKyAgICAvLyBTaW5jZSBIVFRQIHBy
b3hpZXMgbXVzdCBhZGQgVmlhIGhlYWRlcnMsIHRoZXkgYXJlIGhpZ2hseSB1bmxpa2VseSB0byB3
b3JrLgorICAgIC8vIE1hbnkgQ09OTkVDVCBwcm94aWVzIGxpbWl0IGNvbm5lY3Rpdml0eSB0byBw
b3J0IDQ0Mywgc28gd2UgcHJlZmVyIFNPQ0tTLCBpZiBjb25maWd1cmVkLgorCisgICAgaWYgKCFw
cm94eURpY3Rpb25hcnkpIHsKKyAgICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENGTmV0d29ya0NvcHlQcm94aWVzRm9yVVJM
IGRvZXNuJ3Qga25vdyBhYm91dCBXZWJTb2NrZXQgc2NoZW1lcywgc28gcHJldGVuZCB0byB1c2Ug
aHR0cC4KKyAgICAvLyBBbHdheXMgdXNlICJodHRwcyIgdG8gZ2V0IEhUVFBTIHByb3hpZXMgaW4g
cmVzdWx0IC0gd2UnbGwgdHJ5IHRvIHVzZSB0aG9zZSBmb3Igd3M6Ly8gZXZlbiB0aG91Z2ggbWFu
eSBhcmUgY29uZmlndXJlZCB0byByZWplY3QgY29ubmVjdGlvbnMgdG8gcG9ydHMgb3RoZXIgdGhh
biA0NDMuCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IHByb3h5QXJyYXkgPSBhZG9wdENGKENG
TmV0d29ya0NvcHlQcm94aWVzRm9yVVJMKG1faHR0cHNVUkwuZ2V0KCksIHByb3h5RGljdGlvbmFy
eS5nZXQoKSkpOworCisgICAgY2hvb3NlUHJveHlGcm9tQXJyYXkocHJveHlBcnJheS5nZXQoKSk7
Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjaG9vc2VQcm94eUZyb21BcnJheShDRkFy
cmF5UmVmIHByb3h5QXJyYXkpCit7CisgICAgaWYgKCFwcm94eUFycmF5KSB7CisgICAgICAgIG1f
Y29ubmVjdGlvblR5cGUgPSBEaXJlY3Q7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBD
RkluZGV4IHByb3h5QXJyYXlDb3VudCA9IENGQXJyYXlHZXRDb3VudChwcm94eUFycmF5KTsKKwor
ICAgIC8vIFBBQyBpcyBhbHdheXMgdGhlIGZpcnN0IGVudHJ5LCBpZiBwcmVzZW50LgorICAgIGlm
IChwcm94eUFycmF5Q291bnQpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5SW5mbyA9
IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChwcm94
eUFycmF5LCAwKSk7CisgICAgICAgIENGVHlwZVJlZiBwcm94eVR5cGUgPSBDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwcm94eUluZm8sIGtDRlByb3h5VHlwZUtleSk7CisgICAgICAgIGlmIChwcm94eVR5
cGUgJiYgQ0ZHZXRUeXBlSUQocHJveHlUeXBlKSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpKSB7Cisg
ICAgICAgICAgICBpZiAoQ0ZFcXVhbChwcm94eVR5cGUsIGtDRlByb3h5VHlwZUF1dG9Db25maWd1
cmF0aW9uVVJMKSkgeworICAgICAgICAgICAgICAgIENGVHlwZVJlZiBwYWNGaWxlVVJMID0gQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94eUF1dG9Db25maWd1cmF0aW9uVVJM
S2V5KTsKKyAgICAgICAgICAgICAgICBpZiAocGFjRmlsZVVSTCAmJiBDRkdldFR5cGVJRChwYWNG
aWxlVVJMKSA9PSBDRlVSTEdldFR5cGVJRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1
dGVQQUNGaWxlVVJMKHN0YXRpY19jYXN0PENGVVJMUmVmPihwYWNGaWxlVVJMKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBDRkRpY3Rpb25hcnlSZWYgY2hvc2VuUHJveHkgPSAwOwor
ICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHByb3h5QXJyYXlDb3VudDsgKytpKSB7CisgICAg
ICAgIENGRGljdGlvbmFyeVJlZiBwcm94eUluZm8gPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgocHJveHlBcnJheSwgaSkpOworICAgICAgICBDRlR5
cGVSZWYgcHJveHlUeXBlID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJveHlJbmZvLCBrQ0ZQcm94
eVR5cGVLZXkpOworICAgICAgICBpZiAocHJveHlUeXBlICYmIENGR2V0VHlwZUlEKHByb3h5VHlw
ZSkgPT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgaWYgKENGRXF1YWwocHJv
eHlUeXBlLCBrQ0ZQcm94eVR5cGVTT0NLUykpIHsKKyAgICAgICAgICAgICAgICBtX2Nvbm5lY3Rp
b25UeXBlID0gU09DS1NQcm94eTsKKyAgICAgICAgICAgICAgICBjaG9zZW5Qcm94eSA9IHByb3h5
SW5mbzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChDRkVxdWFsKHByb3h5VHlwZSwga0NGUHJveHlUeXBlSFRUUFMpKSB7CisgICAgICAgICAg
ICAgICAgbV9jb25uZWN0aW9uVHlwZSA9IENPTk5FQ1RQcm94eTsKKyAgICAgICAgICAgICAgICBj
aG9zZW5Qcm94eSA9IHByb3h5SW5mbzsKKyAgICAgICAgICAgICAgICAvLyBLZWVwIGxvb2tpbmcg
Zm9yIHByb3hpZXMsIGFzIGEgU09DS1Mgb25lIGlzIHByZWZlcmFibGUuCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2hvc2VuUHJveHkpIHsKKyAgICAgICAgQVNT
RVJUKG1fY29ubmVjdGlvblR5cGUgIT0gVW5rbm93bik7CisgICAgICAgIEFTU0VSVChtX2Nvbm5l
Y3Rpb25UeXBlICE9IERpcmVjdCk7CisKKyAgICAgICAgQ0ZUeXBlUmVmIHByb3h5SG9zdCA9IENG
RGljdGlvbmFyeUdldFZhbHVlKGNob3NlblByb3h5LCBrQ0ZQcm94eUhvc3ROYW1lS2V5KTsKKyAg
ICAgICAgQ0ZUeXBlUmVmIHByb3h5UG9ydCA9IENGRGljdGlvbmFyeUdldFZhbHVlKGNob3NlblBy
b3h5LCBrQ0ZQcm94eVBvcnROdW1iZXJLZXkpOworCisgICAgICAgIGlmIChwcm94eUhvc3QgJiYg
Q0ZHZXRUeXBlSUQocHJveHlIb3N0KSA9PSBDRlN0cmluZ0dldFR5cGVJRCgpICYmIHByb3h5UG9y
dCAmJiBDRkdldFR5cGVJRChwcm94eVBvcnQpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKKyAg
ICAgICAgICAgIG1fcHJveHlIb3N0ID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHByb3h5SG9z
dCk7CisgICAgICAgICAgICBtX3Byb3h5UG9ydCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihw
cm94eVBvcnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
bV9jb25uZWN0aW9uVHlwZSA9IERpcmVjdDsKK30KKworCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6Y3JlYXRlU3RyZWFtcygpCit7CisgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gVW5rbm93
bikKKyAgICAgICAgY2hvb3NlUHJveHkoKTsKKworICAgIC8vIElmIGl0J3Mgc3RpbGwgdW5rbm93
biwgdGhlbiB3ZSdyZSByZXNvbHZpbmcgYSBQQUMgZmlsZSBhc3luY2hyb25vdXNseS4KKyAgICBp
ZiAobV9jb25uZWN0aW9uVHlwZSA9PSBVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGhvc3QgPSBtX3VybC5ob3N0KCkuY3JlYXRlQ0ZTdHJpbmco
KTsKKworICAgIC8vIENyZWF0aW5nIHN0cmVhbXMgdG8gZmluYWwgZGVzdGluYXRpb24sIG5vdCB0
byBwcm94eS4KKyAgICBDRlJlYWRTdHJlYW1SZWYgcmVhZFN0cmVhbSA9IDA7CisgICAgQ0ZXcml0
ZVN0cmVhbVJlZiB3cml0ZVN0cmVhbSA9IDA7CisgICAgQ0ZTdHJlYW1DcmVhdGVQYWlyV2l0aFNv
Y2tldFRvSG9zdCgwLCBob3N0LmdldCgpLCBwb3J0KCksICZyZWFkU3RyZWFtLCAmd3JpdGVTdHJl
YW0pOworI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKQorICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS8xMjg1NTU4Nz4gX2tDRlN0cmVhbVNvY2tldFNldE5vRGVsYXkgaXMgbm90IGV4cG9y
dGVkIG9uIFdpbmRvd3MKKyAgICBDRldyaXRlU3RyZWFtU2V0UHJvcGVydHkod3JpdGVTdHJlYW0s
IF9rQ0ZTdHJlYW1Tb2NrZXRTZXROb0RlbGF5LCBrQ0ZCb29sZWFuVHJ1ZSk7CisjZW5kaWYKKwor
ICAgIG1fcmVhZFN0cmVhbSA9IGFkb3B0Q0YocmVhZFN0cmVhbSk7CisgICAgbV93cml0ZVN0cmVh
bSA9IGFkb3B0Q0Yod3JpdGVTdHJlYW0pOworCisgICAgc3dpdGNoIChtX2Nvbm5lY3Rpb25UeXBl
KSB7CisgICAgY2FzZSBVbmtub3duOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEaXJlY3Q6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U09DS1NQcm94eTogeworICAgICAgICAvLyBGSVhNRTogU09DS1M1IGRvZXNuJ3QgZG8gY2hhbGxl
bmdlLXJlc3BvbnNlLCBzaG91bGQgd2UgdHJ5IHRvIGFwcGx5IGNyZWRlbnRpYWxzIGZyb20gS2V5
Y2hhaW4gcmlnaHQgYXdheT8KKyAgICAgICAgLy8gQnV0IFNPQ0tTNSBjcmVkZW50aWFscyBkb24n
dCB3b3JrIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZyBhbnl3YXksIHNlZSA8cmRhcjovLzY3
NzY2OTg+LgorICAgICAgICBjb25zdCB2b2lkKiBwcm94eUtleXNbXSA9IHsga0NGU3RyZWFtUHJv
cGVydHlTT0NLU1Byb3h5SG9zdCwga0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5UG9ydCB9Owor
ICAgICAgICBjb25zdCB2b2lkKiBwcm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwg
bV9wcm94eVBvcnQuZ2V0KCkgfTsKKyAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
Y29ubmVjdERpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCBwcm94eUtl
eXMsIHByb3h5VmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKHByb3h5S2V5cyksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KyAgICAgICAgQ0ZSZWFkU3RyZWFtU2V0UHJvcGVydHkobV9yZWFkU3RyZWFtLmdldCgpLCBrQ0ZT
dHJlYW1Qcm9wZXJ0eVNPQ0tTUHJveHksIGNvbm5lY3REaWN0aW9uYXJ5LmdldCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBjYXNlIENPTk5FQ1RQcm94eToKKyAgICAgICAgd2tT
ZXRDT05ORUNUUHJveHlGb3JTdHJlYW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5n
ZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoc2hvdWxkVXNlU1NMKCkpIHsKKyAgICAgICAgQ0ZCb29sZWFuUmVmIHZhbGlkYXRlQ2VydGlm
aWNhdGVDaGFpbiA9IFNldHRpbmdzOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpID8ga0NGQm9v
bGVhbkZhbHNlIDoga0NGQm9vbGVhblRydWU7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9
IHsga0NGU3RyZWFtU1NMUGVlck5hbWUsIGtDRlN0cmVhbVNTTExldmVsLCBrQ0ZTdHJlYW1TU0xW
YWxpZGF0ZXNDZXJ0aWZpY2F0ZUNoYWluIH07CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1td
ID0geyBob3N0LmdldCgpLCBrQ0ZTdHJlYW1Tb2NrZXRTZWN1cml0eUxldmVsTmVnb3RpYXRlZFNT
TCwgdmFsaWRhdGVDZXJ0aWZpY2F0ZUNoYWluIH07CisgICAgICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHNldHRpbmdzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwga2V5cywg
dmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIENGUmVh
ZFN0cmVhbVNldFByb3BlcnR5KG1fcmVhZFN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlT
U0xTZXR0aW5ncywgc2V0dGluZ3MuZ2V0KCkpOworICAgICAgICBDRldyaXRlU3RyZWFtU2V0UHJv
cGVydHkobV93cml0ZVN0cmVhbS5nZXQoKSwga0NGU3RyZWFtUHJvcGVydHlTU0xTZXR0aW5ncywg
c2V0dGluZ3MuZ2V0KCkpOworICAgIH0KK30KKworYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6Omdl
dFN0b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJv
dGVjdGlvblNwYWNlLCBTdHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQoreworICAgIC8v
IEZJWE1FICg8cmRhcjovL3Byb2JsZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hv
dWxkIGJlIHJldHJpZXZlZCBmcm9tIEF1dGhCcm9rZXJBZ2VudC4KKworICAgIC8vIFRyeSBzeXN0
ZW0gY3JlZGVudGlhbCBzdG9yYWdlIGZpcnN0LCBtYXRjaGluZyBIVFRQIGJlaGF2aW9yIChDRk5l
dHdvcmsgb25seSBhc2tzIHRoZSBjbGllbnQgZm9yIHBhc3N3b3JkIGlmIGl0IGNvdWxkbid0IGZp
bmQgaXQgaW4gS2V5Y2hhaW4pLgorICAgIENyZWRlbnRpYWwgc3RvcmVkQ3JlZGVudGlhbDsKKyAg
ICBpZiAoYXV0byogc3RvcmFnZVNlc3Npb24gPSBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnN0b3Jh
Z2VTZXNzaW9uKG1fc2Vzc2lvbklEKSkgeworICAgICAgICBzdG9yZWRDcmVkZW50aWFsID0gc3Rv
cmFnZVNlc3Npb24tPmNyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdl
KHByb3RlY3Rpb25TcGFjZSk7CisgICAgICAgIGlmIChzdG9yZWRDcmVkZW50aWFsLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHN0b3JlZENyZWRlbnRpYWwgPSBzdG9yYWdlU2Vzc2lvbi0+Y3JlZGVu
dGlhbFN0b3JhZ2UoKS5nZXQocHJvdGVjdGlvblNwYWNlKTsKKyAgICB9CisKKyAgICBpZiAoc3Rv
cmVkQ3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGxv
Z2luID0gc3RvcmVkQ3JlZGVudGlhbC51c2VyKCk7CisgICAgcGFzc3dvcmQgPSBzdG9yZWRDcmVk
ZW50aWFsLnBhc3N3b3JkKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFByb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1
dGhlbnRpY2F0aW9uTWV0aG9kKENGU3RyaW5nUmVmIG1ldGhvZCkKK3sKKyAgICBpZiAoQ0ZFcXVh
bChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZUJhc2ljKSkKKyAgICAgICAgcmV0
dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljOworICAgIGlm
IChDRkVxdWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1lRGlnZXN0KSkKKyAg
ICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2Vz
dDsKKyAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5U
TE0pKQorICAgICAgICByZXR1cm4gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVO
VExNOworICAgIGlmIChDRkVxdWFsKG1ldGhvZCwga0NGSFRUUEF1dGhlbnRpY2F0aW9uU2NoZW1l
TmVnb3RpYXRlKSkKKyAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lTmVnb3RpYXRlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQ
cm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd247Cit9CisKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjphZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBw
cm94eVJlc3BvbnNlKQoreworICAgIFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4g
YXV0aGVudGljYXRpb24gPSBhZG9wdENGKENGSFRUUEF1dGhlbnRpY2F0aW9uQ3JlYXRlRnJvbVJl
c3BvbnNlKDAsIHByb3h5UmVzcG9uc2UpKTsKKworICAgIGlmICghQ0ZIVFRQQXV0aGVudGljYXRp
b25SZXF1aXJlc1VzZXJOYW1lQW5kUGFzc3dvcmQoYXV0aGVudGljYXRpb24uZ2V0KCkpKSB7Cisg
ICAgICAgIC8vIFRoYXQncyBhbGwgd2UgY2FuIG9mZmVyLi4uCisgICAgICAgIG1fY2xpZW50LmRp
ZEZhaWxTb2NrZXRTdHJlYW0oKnRoaXMsIFNvY2tldFN0cmVhbUVycm9yKDAsIG1fdXJsLnN0cmlu
ZygpLCAiUHJveHkgYXV0aGVudGljYXRpb24gc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdl
YlNvY2tldHMiKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcG9ydCA9IDA7
CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlw
ZSwgJnBvcnQpOworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YgPSBhZG9wdENG
KENGSFRUUEF1dGhlbnRpY2F0aW9uQ29weU1ldGhvZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpOwor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcmVhbG1DRiA9IGFkb3B0Q0YoQ0ZIVFRQQXV0aGVu
dGljYXRpb25Db3B5UmVhbG0oYXV0aGVudGljYXRpb24uZ2V0KCkpKTsKKworICAgIGlmICghbWV0
aG9kQ0YgfHwgIXJlYWxtQ0YpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBi
dXQgb24gc29tZSBPUyB2ZXJzaW9ucyB3ZSBnZXQgaW5jb21wbGV0ZSBhdXRoZW50aWNhdGlvbiBk
YXRhLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzEwNDE2MzE2Pi4KKyAgICAgICAgbV9jbGllbnQuZGlk
RmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwuc3RyaW5n
KCksICJXZWJTb2NrZXQgcHJveHkgYXV0aGVudGljYXRpb24gY291bGRuJ3QgYmUgaGFuZGxlZCIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0
aW9uU3BhY2UoU3RyaW5nKG1fcHJveHlIb3N0LmdldCgpKSwgcG9ydCwgUHJvdGVjdGlvblNwYWNl
UHJveHlIVFRQUywgU3RyaW5nKHJlYWxtQ0YuZ2V0KCkpLCBhdXRoZW50aWNhdGlvblNjaGVtZUZy
b21BdXRoZW50aWNhdGlvbk1ldGhvZChtZXRob2RDRi5nZXQoKSkpOworICAgIFN0cmluZyBsb2dp
bjsKKyAgICBTdHJpbmcgcGFzc3dvcmQ7CisgICAgaWYgKCFtX3NlbnRTdG9yZWRDcmVkZW50aWFs
cyAmJiBnZXRTdG9yZWRDT05ORUNUUHJveHlDcmVkZW50aWFscyhwcm90ZWN0aW9uU3BhY2UsIGxv
Z2luLCBwYXNzd29yZCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIGFwcGx5IHN0b3JlZCBjcmVkZW50
aWFscywgaWYgd2UgaGF2ZW4ndCB0cmllZCB0aG9zZSBhbHJlYWR5LgorICAgICAgICAvLyBDcmVh
dGUgYSB0ZW1wb3JhcnkgcmVxdWVzdCB0byBtYWtlIENGTmV0d29yayBhcHBseSBjcmVkZW50aWFs
cyB0byBpdC4gVW5mb3J0dW5hdGVseSwgdGhpcyBjYW5ub3Qgd29yayB3aXRoIE5UTE0gYXV0aGVu
dGljYXRpb24uCisgICAgICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBkdW1teVJlcXVl
c3QgPSBhZG9wdENGKENGSFRUUE1lc3NhZ2VDcmVhdGVSZXF1ZXN0KDAsIENGU1RSKCJHRVQiKSwg
bV9odHRwc1VSTC5nZXQoKSwga0NGSFRUUFZlcnNpb24xXzEpKTsKKworICAgICAgICBCb29sZWFu
IGFwcGxpZWRDcmVkZW50aWFscyA9IENGSFRUUE1lc3NhZ2VBcHBseUNyZWRlbnRpYWxzKGR1bW15
UmVxdWVzdC5nZXQoKSwgYXV0aGVudGljYXRpb24uZ2V0KCksIGxvZ2luLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIHBhc3N3b3JkLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDApOworICAgICAgICBB
U1NFUlRfVU5VU0VEKGFwcGxpZWRDcmVkZW50aWFscywgYXBwbGllZENyZWRlbnRpYWxzKTsKKwor
ICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyA9
IGFkb3B0Q0YoQ0ZIVFRQTWVzc2FnZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5n
ZXQoKSwgQ0ZTVFIoIlByb3h5LUF1dGhvcml6YXRpb24iKSkpOworCisgICAgICAgIGlmICghcHJv
eHlBdXRob3JpemF0aW9uU3RyaW5nKSB7CisgICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBO
VExNIGF1dGguCisgICAgICAgICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlz
LCBTb2NrZXRTdHJlYW1FcnJvcigwLCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGF1dGhlbnRpY2F0
aW9uIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBXZWJTb2NrZXRzIikpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0dGluZyB0aGUgYXV0aG9yaXph
dGlvbiByZXN1bHRzIGluIGEgbmV3IGNvbm5lY3Rpb24gYXR0ZW1wdC4KKyAgICAgICAgd2tTZXRD
T05ORUNUUHJveHlBdXRob3JpemF0aW9uRm9yU3RyZWFtKG1fcmVhZFN0cmVhbS5nZXQoKSwgcHJv
eHlBdXRob3JpemF0aW9uU3RyaW5nLmdldCgpKTsKKyAgICAgICAgbV9zZW50U3RvcmVkQ3JlZGVu
dGlhbHMgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IE9u
IHBsYXRmb3JtcyB3aGVyZSBBdXRoQnJva2VyQWdlbnQgaXMgbm90IGF2YWlsYWJsZSwgYXNrIHRo
ZSBjbGllbnQgaWYgY3JlZGVudGlhbHMgY291bGQgbm90IGJlIGZvdW5kLgorCisgICAgbV9jbGll
bnQuZGlkRmFpbFNvY2tldFN0cmVhbSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3IoMCwgbV91cmwu
c3RyaW5nKCksICJQcm94eSBjcmVkZW50aWFscyBhcmUgbm90IGF2YWlsYWJsZSIpKTsKK30KKwor
Q0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2
b2lkKiBpbmZvKQoreworICAgIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nh
c3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7CisgICAgcmV0dXJuIFN0cmluZygiV2ViS2l0
IHNvY2tldCBzdHJlYW0sICIgKyBoYW5kbGUtPm1fdXJsLnN0cmluZygpKS5jcmVhdGVDRlN0cmlu
ZygpLmxlYWtSZWYoKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1D
YWxsYmFjayhDRlJlYWRTdHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2
b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8p
OworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3JlYWRTdHJl
YW0uZ2V0KCkpOworICAgIC8vIFdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS8xNzcyNzA3
Mz4uIEtlZXBpbmcgdGhpcyBiZWxvdyB0aGUgYXNzZXJ0aW9uIGFzIHdlJ2QgbGlrZSBiZXR0ZXIg
c3RlcHMgdG8gcmVwcm9kdWNlIHRoaXMuCisgICAgaWYgKCFoYW5kbGUtPm1fcmVhZFN0cmVhbSkK
KyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIFJlZlB0cjxTb2NrZXRT
dHJlYW1IYW5kbGU+IHByb3RlY3RvcihoYW5kbGUpOworICAgIGNhbGxPbk1haW5UaHJlYWRBbmRX
YWl0KFsmXSB7CisgICAgICAgIGlmIChoYW5kbGUtPm1fcmVhZFN0cmVhbSkKKyAgICAgICAgICAg
IGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5cGUpOworICAgIH0pOworI2Vsc2UKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGhhbmRsZS0+cmVhZFN0cmVhbUNhbGxiYWNrKHR5
cGUpOworI2VuZGlmCit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNh
bGxiYWNrKENGV3JpdGVTdHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2
b2lkKiBjbGllbnRDYWxsQmFja0luZm8pCit7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnRDYWxsQmFja0luZm8p
OworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtLCBzdHJlYW0gPT0gaGFuZGxlLT5tX3dyaXRlU3Ry
ZWFtLmdldCgpKTsKKyAgICAvLyBUaGlzIHdhc24ndCBzZWVuIGhhcHBlbmluZyBpbiBwcmFjdGlj
ZSwgeWV0IGl0IHNlZW1zIGxpa2UgaXQgY291bGQsIGR1ZSB0byBzeW1tZXRyeSB3aXRoIHJlYWQg
c3RyZWFtIGNhbGxiYWNrLgorICAgIGlmICghaGFuZGxlLT5tX3dyaXRlU3RyZWFtKQorICAgICAg
ICByZXR1cm47CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhh
bmRsZT4gcHJvdGVjdG9yKGhhbmRsZSk7CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZd
IHsKKyAgICAgICAgaWYgKGhhbmRsZS0+bV93cml0ZVN0cmVhbSkKKyAgICAgICAgICAgIGhhbmRs
ZS0+d3JpdGVTdHJlYW1DYWxsYmFjayh0eXBlKTsKKyAgICB9KTsKKyNlbHNlCisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBoYW5kbGUtPndyaXRlU3RyZWFtQ2FsbGJhY2sodHlwZSk7
CisjZW5kaWYKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYmFj
ayhDRlN0cmVhbUV2ZW50VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2Fz
ZSBrQ0ZTdHJlYW1FdmVudE5vbmU6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVh
bUV2ZW50T3BlbkNvbXBsZXRlZDoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Uga0NGU3RyZWFt
RXZlbnRIYXNCeXRlc0F2YWlsYWJsZTogeworICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3Rh
dGUgPT0gV2FpdGluZ0ZvckNyZWRlbnRpYWxzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ29ubmVjdCkgeworICAg
ICAgICAgICAgaWYgKG1fY29ubmVjdGlvblR5cGUgPT0gQ09OTkVDVFByb3h5KSB7CisgICAgICAg
ICAgICAgICAgUmV0YWluUHRyPENGSFRUUE1lc3NhZ2VSZWY+IHByb3h5UmVzcG9uc2UgPSBhZG9w
dENGKHdrQ29weUNPTk5FQ1RQcm94eVJlc3BvbnNlKG1fcmVhZFN0cmVhbS5nZXQoKSwgbV9odHRw
c1VSTC5nZXQoKSwgbV9wcm94eUhvc3QuZ2V0KCksIG1fcHJveHlQb3J0LmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFwcm94eVJlc3BvbnNlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgICAgICBDRkluZGV4IHByb3h5UmVzcG9uc2VDb2RlID0gQ0ZIVFRQ
TWVzc2FnZUdldFJlc3BvbnNlU3RhdHVzQ29kZShwcm94eVJlc3BvbnNlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHByb3h5UmVzcG9uc2VDb2RlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAyMDA6CisgICAgICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0MDc6Cisg
ICAgICAgICAgICAgICAgICAgIGFkZENPTk5FQ1RDcmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRTdHJlYW0oKnRo
aXMsIFNvY2tldFN0cmVhbUVycm9yKHN0YXRpY19jYXN0PGludD4ocHJveHlSZXNwb25zZUNvZGUp
LCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGNvbm5lY3Rpb24gY291bGQgbm90IGJlIGVzdGFibGlz
aGVkLCB1bmV4cGVjdGVkIHJlc3BvbnNlIGNvZGUiKSk7CisgICAgICAgICAgICAgICAgICAgIHBs
YXRmb3JtQ2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1YnN0YXRlID0g
Q29ubmVjdGVkOworICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAgICAgICBtX2Ns
aWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBjYWxsIGFib3Zl
LCBhbmQgaXQgY291bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlmIChtX3N0YXRl
ID09IENsb3NlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NFUlQobV9zdGF0
ZSA9PSBPcGVuKTsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRlID09IENvbm5l
Y3RlZCk7CisKKyAgICAgICAgQ0ZJbmRleCBsZW5ndGg7CisgICAgICAgIFVJbnQ4IGxvY2FsQnVm
ZmVyWzEwMjRdOyAvLyBVc2VkIGlmIENGUmVhZFN0cmVhbUdldEJ1ZmZlciBjb3VsZG4ndCByZXR1
cm4gYW55dGhpbmcuCisgICAgICAgIGNvbnN0IFVJbnQ4KiBwdHIgPSBDRlJlYWRTdHJlYW1HZXRC
dWZmZXIobV9yZWFkU3RyZWFtLmdldCgpLCAwLCAmbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFwdHIp
IHsKKyAgICAgICAgICAgIGxlbmd0aCA9IENGUmVhZFN0cmVhbVJlYWQobV9yZWFkU3RyZWFtLmdl
dCgpLCBsb2NhbEJ1ZmZlciwgc2l6ZW9mKGxvY2FsQnVmZmVyKSk7CisgICAgICAgICAgICBwdHIg
PSBsb2NhbEJ1ZmZlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1E
YXRhKCp0aGlzLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCBsZW5ndGgpOwor
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2Vw
dEJ5dGVzOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2Uga0NGU3RyZWFtRXZlbnRFcnJvck9jY3VycmVkOiB7CisgICAgICAgIFJldGFpblB0
cjxDRkVycm9yUmVmPiBlcnJvciA9IGFkb3B0Q0YoQ0ZSZWFkU3RyZWFtQ29weUVycm9yKG1fcmVh
ZFN0cmVhbS5nZXQoKSkpOworICAgICAgICByZXBvcnRFcnJvclRvQ2xpZW50KGVycm9yLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50RW5kRW5j
b3VudGVyZWQ6CisgICAgICAgIHBsYXRmb3JtQ2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZT
dHJlYW1FdmVudFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkgeworICAgIGNhc2Uga0NG
U3RyZWFtRXZlbnROb25lOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVu
dE9wZW5Db21wbGV0ZWQ6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGtDRlN0cmVhbUV2ZW50
SGFzQnl0ZXNBdmFpbGFibGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudENhbkFjY2VwdEJ5dGVzOiB7CisgICAg
ICAgIC8vIENhbiBiZSBmYWxzZSBpZiByZWFkIHN0cmVhbSBjYWxsYmFjayBqdXN0IGRlY2lkZWQg
dG8gcmV0cnkgYSBDT05ORUNUIHdpdGggY3JlZGVudGlhbHMuCisgICAgICAgIGlmICghQ0ZXcml0
ZVN0cmVhbUNhbkFjY2VwdEJ5dGVzKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9y
Q3JlZGVudGlhbHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fY29ubmVj
dGluZ1N1YnN0YXRlID09IFdhaXRpbmdGb3JDb25uZWN0KSB7CisgICAgICAgICAgICBpZiAobV9j
b25uZWN0aW9uVHlwZSA9PSBDT05ORUNUUHJveHkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZIVFRQTWVzc2FnZVJlZj4gcHJveHlSZXNwb25zZSA9IGFkb3B0Q0Yod2tDb3B5Q09OTkVD
VFByb3h5UmVzcG9uc2UobV9yZWFkU3RyZWFtLmdldCgpLCBtX2h0dHBzVVJMLmdldCgpLCBtX3By
b3h5SG9zdC5nZXQoKSwgbV9wcm94eVBvcnQuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXByb3h5UmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIC8vIERvbid0IHdyaXRlIGFueXRoaW5nIHVudGlsIHJlYWQgc3RyZWFtIGNhbGxiYWNr
IGhhcyBkZWFsdCB3aXRoIENPTk5FQ1QgY3JlZGVudGlhbHMuCisgICAgICAgICAgICAgICAgLy8g
VGhlIG9yZGVyIG9mIGNhbGxiYWNrcyBpcyBub3QgZGVmaW5lZCwgc28gdGhpcyBjYW4gYmUgY2Fs
bGVkIGJlZm9yZSByZWFkU3RyZWFtQ2FsbGJhY2sncyBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZh
aWxhYmxlLgorICAgICAgICAgICAgICAgIENGSW5kZXggcHJveHlSZXNwb25zZUNvZGUgPSBDRkhU
VFBNZXNzYWdlR2V0UmVzcG9uc2VTdGF0dXNDb2RlKHByb3h5UmVzcG9uc2UuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGlmIChwcm94eVJlc3BvbnNlQ29kZSAhPSAyMDApCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29ubmVjdGluZ1N1
YnN0YXRlID0gQ29ubmVjdGVkOworICAgICAgICAgICAgbV9zdGF0ZSA9IE9wZW47CisgICAgICAg
ICAgICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIE5vdCBhbiAiZWxzZSBpZiIsIHdlIGNvdWxkIGhhdmUgbWFkZSBhIGNsaWVudCBj
YWxsIGFib3ZlLCBhbmQgaXQgY291bGQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGlm
IChtX3N0YXRlID09IENsb3NlZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBBU1NF
UlQobV9zdGF0ZSA9PSBPcGVuKTsKKyAgICAgICAgQVNTRVJUKG1fY29ubmVjdGluZ1N1YnN0YXRl
ID09IENvbm5lY3RlZCk7CisKKyAgICAgICAgc2VuZFBlbmRpbmdEYXRhKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEVycm9yT2NjdXJyZWQ6IHsKKyAg
ICAgICAgUmV0YWluUHRyPENGRXJyb3JSZWY+IGVycm9yID0gYWRvcHRDRihDRldyaXRlU3RyZWFt
Q29weUVycm9yKG1fd3JpdGVTdHJlYW0uZ2V0KCkpKTsKKyAgICAgICAgcmVwb3J0RXJyb3JUb0Ns
aWVudChlcnJvci5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBrQ0ZT
dHJlYW1FdmVudEVuZEVuY291bnRlcmVkOgorICAgICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3
ZSBoYW5kbGUgY2xvc2luZyBpbiByZWFkIGNhbGxiYWNrLCBidXQgdGhlc2UgY2FuIGNvbWUgaW5k
ZXBlbmRlbnRseSAoZS5nLiBhIHNlcnZlciBjYW4gc3RvcCBsaXN0ZW5pbmcsIGJ1dCBrZWVwIHNl
bmRpbmcgZGF0YSkuCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2xpZW50KENGRXJyb3JSZWYgZXJyb3IpCit7CisgICAg
Q0ZJbmRleCBlcnJvckNvZGUgPSBDRkVycm9yR2V0Q29kZShlcnJvcik7CisgICAgU3RyaW5nIGRl
c2NyaXB0aW9uOworCisjaWYgUExBVEZPUk0oTUFDKQorCisjaWYgQ09NUElMRVIoQ0xBTkcpCisj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCisjZW5kaWYKKworICAgIGlmIChDRkVx
dWFsKENGRXJyb3JHZXREb21haW4oZXJyb3IpLCBrQ0ZFcnJvckRvbWFpbk9TU3RhdHVzKSkgewor
ICAgICAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbk9TU3RhdHVzID0gR2V0TWFjT1NTdGF0dXND
b21tZW50U3RyaW5nKHN0YXRpY19jYXN0PE9TU3RhdHVzPihlcnJvckNvZGUpKTsKKyAgICAgICAg
aWYgKGRlc2NyaXB0aW9uT1NTdGF0dXMgJiYgZGVzY3JpcHRpb25PU1N0YXR1c1swXSAhPSAnXDAn
KQorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiT1NTdGF0dXMgRXJyb3IgIiArIFN0cmluZzo6
bnVtYmVyKGVycm9yQ29kZSkgKyAiOiAiICsgZGVzY3JpcHRpb25PU1N0YXR1czsKKyAgICB9CisK
KyNpZiBDT01QSUxFUihDTEFORykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRp
ZgorCisjZW5kaWYKKworICAgIGlmIChkZXNjcmlwdGlvbi5pc051bGwoKSkgeworICAgICAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRlc2NyaXB0aW9uQ0YgPSBhZG9wdENGKENGRXJyb3JDb3B5
RGVzY3JpcHRpb24oZXJyb3IpKTsKKyAgICAgICAgZGVzY3JpcHRpb24gPSBTdHJpbmcoZGVzY3Jp
cHRpb25DRi5nZXQoKSk7CisgICAgfQorCisgICAgbV9jbGllbnQuZGlkRmFpbFNvY2tldFN0cmVh
bSgqdGhpcywgU29ja2V0U3RyZWFtRXJyb3Ioc3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBt
X3VybC5zdHJpbmcoKSwgZGVzY3JpcHRpb24pKTsKK30KKworU29ja2V0U3RyZWFtSGFuZGxlOjp+
U29ja2V0U3RyZWFtSGFuZGxlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhh
bmRsZSAlcCBkdG9yIiwgdGhpcyk7CisKKyAgICBBU1NFUlQoIW1fcGFjUnVuTG9vcFNvdXJjZSk7
Cit9CisKK2ludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghQ0ZXcml0ZVN0cmVhbUNhbkFjY2VwdEJ5dGVz
KG1fd3JpdGVTdHJlYW0uZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBD
RldyaXRlU3RyZWFtV3JpdGUobV93cml0ZVN0cmVhbS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVSW50OCo+KGRhdGEpLCBsZW5ndGgpOworfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRs
ZTo6cGxhdGZvcm1DbG9zZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5k
bGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOworCisgICAgaWYgKG1fcGFjUnVuTG9vcFNvdXJj
ZSkgCisgICAgICAgIHJlbW92ZVBBQ1J1bkxvb3BTb3VyY2UoKTsKKworICAgIEFTU0VSVCghbV9y
ZWFkU3RyZWFtID09ICFtX3dyaXRlU3RyZWFtKTsKKyAgICBpZiAoIW1fcmVhZFN0cmVhbSkgewor
ICAgICAgICBpZiAobV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gTmV3IHx8IG1fY29ubmVjdGluZ1N1
YnN0YXRlID09IEV4ZWN1dGluZ1BBQ0ZpbGUpCisgICAgICAgICAgICBtX2NsaWVudC5kaWRDbG9z
ZVNvY2tldFN0cmVhbSgqdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBQTEFU
Rk9STShXSU4pCisgICAgQ0ZSZWFkU3RyZWFtVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fcmVhZFN0
cmVhbS5nZXQoKSwgbG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAg
IENGV3JpdGVTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV93cml0ZVN0cmVhbS5nZXQoKSwg
bG9hZGVyUnVuTG9vcCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworI2Vsc2UKKyAgICBDRlJl
YWRTdHJlYW1VbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV9yZWFkU3RyZWFtLmdldCgpLCBDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisgICAgQ0ZXcml0ZVN0cmVh
bVVuc2NoZWR1bGVGcm9tUnVuTG9vcChtX3dyaXRlU3RyZWFtLmdldCgpLCBDRlJ1bkxvb3BHZXRD
dXJyZW50KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7CisjZW5kaWYKKworICAgIENGUmVhZFN0
cmVhbUNsb3NlKG1fcmVhZFN0cmVhbS5nZXQoKSk7CisgICAgQ0ZXcml0ZVN0cmVhbUNsb3NlKG1f
d3JpdGVTdHJlYW0uZ2V0KCkpOworICAgIAorICAgIG1fcmVhZFN0cmVhbSA9IDA7CisgICAgbV93
cml0ZVN0cmVhbSA9IDA7CisKKyAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhp
cyk7Cit9CisKK3Vuc2lnbmVkIHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgpIGNvbnN0
Cit7CisgICAgaWYgKHVuc2lnbmVkIHNob3J0IHVybFBvcnQgPSBtX3VybC5wb3J0KCkpCisgICAg
ICAgIHJldHVybiB1cmxQb3J0OworICAgIGlmIChzaG91bGRVc2VTU0woKSkKKyAgICAgICAgcmV0
dXJuIDQ0MzsKKyAgICByZXR1cm4gODA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ0ZOZXQuY3BwCShyZXZpc2lvbiAyMDQ0NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRs
ZUltcGxDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5j
bHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oIgogCiAjaW5jbHVkZSAiQ3JlZGVudGlhbC5o
IgogI2luY2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCkBAIC00MCwxOCArNDAsMTQgQEAKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCiAjaW5j
bHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSA8Q0ZOZXR3b3JrL0NG
TmV0d29yay5oPgogI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0
d29yay5oPgotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSAiTG9hZGVyUnVu
TG9vcENGLmgiCi0jaW5jbHVkZSA8Q0ZOZXR3b3JrL0NGTmV0d29yay5oPgogI2luY2x1ZGUgPFdl
YktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNlbHNlCiAjaW5j
bHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgpAQCAtNjcsOCArNjMsOCBAQCBleHRlcm4g
IkMiIGNvbnN0IENGU3RyaW5nUmVmIF9rQ0ZTdHJlYW1TCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQot
ICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVudCkKK1NvY2tldFN0cmVhbUhh
bmRsZUltcGw6OlNvY2tldFN0cmVhbUhhbmRsZUltcGwoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQorICAgIDogU29j
a2V0U3RyZWFtSGFuZGxlKHVybCwgY2xpZW50KQogICAgICwgbV9jb25uZWN0aW5nU3Vic3RhdGUo
TmV3KQogICAgICwgbV9jb25uZWN0aW9uVHlwZShVbmtub3duKQogICAgICwgbV9zZW50U3RvcmVk
Q3JlZGVudGlhbHMoZmFsc2UpCkBAIC0xMDAsNyArOTYsNyBAQCBTb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjCiAgICAgc2NoZWR1bGVTdHJlYW1zKCk7CiB9CiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpzY2hlZHVsZVN0cmVhbXMoKQordm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGVJbXBsOjpzY2hlZHVsZVN0cmVhbXMoKQogewogICAgIEFTU0VSVChtX3JlYWRTdHJlYW0p
OwogICAgIEFTU0VSVChtX3dyaXRlU3RyZWFtKTsKQEAgLTEyNywyNSArMTIzLDI1IEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpzY2hlZHVsZVN0cmVhbXMKICAgICBtX2Nvbm5lY3RpbmdTdWJz
dGF0ZSA9IFdhaXRpbmdGb3JDb25uZWN0OwogfQogCi12b2lkKiBTb2NrZXRTdHJlYW1IYW5kbGU6
OnJldGFpblNvY2tldFN0cmVhbUhhbmRsZSh2b2lkKiBpbmZvKQordm9pZCogU29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6cmV0YWluU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQqIGluZm8pCiB7CiAgICAg
U29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5k
bGUqPihpbmZvKTsKICAgICBoYW5kbGUtPnJlZigpOwogICAgIHJldHVybiBoYW5kbGU7CiB9CiAK
LXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWxlYXNlU29ja2V0U3RyZWFtSGFuZGxlKHZvaWQq
IGluZm8pCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnJlbGVhc2VTb2NrZXRTdHJlYW1I
YW5kbGUodm9pZCogaW5mbykKIHsKICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9IHN0
YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGluZm8pOwogICAgIGhhbmRsZS0+ZGVyZWYo
KTsKIH0KIAotQ0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxlOjpjb3B5UEFDRXhlY3V0aW9u
RGVzY3JpcHRpb24odm9pZCopCitDRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
b3B5UEFDRXhlY3V0aW9uRGVzY3JpcHRpb24odm9pZCopCiB7CiAgICAgcmV0dXJuIENGU1RSKCJX
ZWJTb2NrZXQgcHJveHkgUEFDIGZpbGUgZXhlY3V0aW9uIik7CiB9CiAKLXN0YXRpYyB2b2lkIGNh
bGxPbk1haW5UaHJlYWRBbmRXYWl0KHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCitz
dGF0aWMgdm9pZCBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4g
ZnVuY3Rpb24pCiB7CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CiAgICAgICAgIGZ1bmN0aW9u
KCk7CkBAIC0xNjYsMTggKzE2MiwyMiBAQCBzdGF0aWMgdm9pZCBjYWxsT25NYWluVGhyZWFkQW5k
V2FpdChzdGQ6CiAgICAgfSk7CiAKICAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobXV0
ZXgpOwotICAgIGNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgWyZdIHsgcmV0dXJuIGlzRmlu
aXNoZWQ7IH0pOworICAgIGNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgWyZdIHsKKyAgICAg
ICAgcmV0dXJuIGlzRmluaXNoZWQ7CisgICAgfSk7CiB9CiAKIHN0cnVjdCBNYWluVGhyZWFkUEFD
Q2FsbGJhY2tJbmZvIHsKLSAgICBNYWluVGhyZWFkUEFDQ2FsbGJhY2tJbmZvKFNvY2tldFN0cmVh
bUhhbmRsZSogaGFuZGxlLCBDRkFycmF5UmVmIHByb3h5TGlzdCkgOiBoYW5kbGUoaGFuZGxlKSwg
cHJveHlMaXN0KHByb3h5TGlzdCkgeyB9CisgICAgTWFpblRocmVhZFBBQ0NhbGxiYWNrSW5mbyhT
b2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSwgQ0ZBcnJheVJlZiBwcm94eUxpc3QpCisgICAgICAg
IDogaGFuZGxlKGhhbmRsZSksIHByb3h5TGlzdChwcm94eUxpc3QpCisgICAgeyB9CiAgICAgUmVm
UHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gaGFuZGxlOwogICAgIENGQXJyYXlSZWYgcHJveHlMaXN0
OwogfTsKIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKHZv
aWQqIGNsaWVudCwgQ0ZBcnJheVJlZiBwcm94eUxpc3QsIENGRXJyb3JSZWYpCit2b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZUltcGw6OnBhY0V4ZWN1dGlvbkNhbGxiYWNrKHZvaWQqIGNsaWVudCwgQ0ZB
cnJheVJlZiBwcm94eUxpc3QsIENGRXJyb3JSZWYpCiB7Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxl
KiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjbGllbnQpOworICAg
IFNvY2tldFN0cmVhbUhhbmRsZUltcGwqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFNvY2tldFN0cmVh
bUhhbmRsZUltcGwqPihjbGllbnQpOwogCiAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoWyZd
IHsKICAgICAgICAgQVNTRVJUKGhhbmRsZS0+bV9jb25uZWN0aW5nU3Vic3RhdGUgPT0gRXhlY3V0
aW5nUEFDRmlsZSk7CkBAIC0xOTAsNyArMTkwLDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OnBhY0V4ZWN1dGlvbkNhbAogICAgIH0pOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6
ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkKK3ZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlSW1wbDo6ZXhlY3V0ZVBBQ0ZpbGVVUkwoQ0ZVUkxSZWYgcGFjRmlsZVVSTCkKIHsKICAg
ICAvLyBDRk5ldHdvcmsgcmV0dXJucyBhbiBlbXB0eSBwcm94eSBhcnJheSBmb3IgV2ViU29ja2V0
IHNjaGVtZXMsIHNvIHVzZSBtX2h0dHBzVVJMLgogICAgIENGU3RyZWFtQ2xpZW50Q29udGV4dCBj
bGllbnRDb250ZXh0ID0geyAwLCB0aGlzLCByZXRhaW5Tb2NrZXRTdHJlYW1IYW5kbGUsIHJlbGVh
c2VTb2NrZXRTdHJlYW1IYW5kbGUsIGNvcHlQQUNFeGVjdXRpb25EZXNjcmlwdGlvbiB9OwpAQCAt
MjAzLDcgKzIwMyw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpleGVjdXRlUEFDRmlsZVUK
ICAgICBtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9IEV4ZWN1dGluZ1BBQ0ZpbGU7CiB9CiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZW1vdmVQQUNSdW5Mb29wU291cmNlKCkKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6cmVtb3ZlUEFDUnVuTG9vcFNvdXJjZSgpCiB7CiAgICAgQVNTRVJU
KG1fcGFjUnVuTG9vcFNvdXJjZSk7CiAKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cmVtb3ZlUEFDUnVuTG9vCiAgICAgbV9wYWNSdW5Mb29wU291cmNlID0gMDsK
IH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5KCkKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y2hvb3NlUHJveHkoKQogewogICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHByb3h5RGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZOZXR3b3JrQ29weVN5c3RlbVBy
b3h5U2V0dGluZ3MoKSk7CiAKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6Y2hvb3NlUHJveHkoKQogICAgIGNob29zZVByb3h5RnJvbUFycmF5KHByb3h5QXJyYXku
Z2V0KCkpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y2hvb3NlUHJveHlGcm9tQXJy
YXkoQ0ZBcnJheVJlZiBwcm94eUFycmF5KQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpj
aG9vc2VQcm94eUZyb21BcnJheShDRkFycmF5UmVmIHByb3h5QXJyYXkpCiB7CiAgICAgaWYgKCFw
cm94eUFycmF5KSB7CiAgICAgICAgIG1fY29ubmVjdGlvblR5cGUgPSBEaXJlY3Q7CkBAIC0yOTcs
NyArMjk3LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNob29zZVByb3h5RnJvbQogfQog
CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGVTdHJlYW1zKCkKK3ZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y3JlYXRlU3RyZWFtcygpCiB7CiAgICAgaWYgKG1fY29ubmVjdGlv
blR5cGUgPT0gVW5rbm93bikKICAgICAgICAgY2hvb3NlUHJveHkoKTsKQEAgLTM1MCw3ICszNTAs
NyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlU3RyZWFtcygpCiAgICAgfQogfQog
Ci1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6Z2V0U3RvcmVkQ09OTkVDVFByb3h5Q3JlZGVudGlh
bHMoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgbG9naW4s
IFN0cmluZyYgcGFzc3dvcmQpCitib29sIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmdldFN0b3Jl
ZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlv
blNwYWNlLCBTdHJpbmcmIGxvZ2luLCBTdHJpbmcmIHBhc3N3b3JkKQogewogICAgIC8vIEZJWE1F
ICg8cmRhcjovL3Byb2JsZW0vMTA0MTY0OTU+KTogUHJveHkgY3JlZGVudGlhbHMgc2hvdWxkIGJl
IHJldHJpZXZlZCBmcm9tIEF1dGhCcm9rZXJBZ2VudC4KIApAQCAtMzg1LDcgKzM4NSw3IEBAIHN0
YXRpYyBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGUKICAgICByZXR1cm4gUHJvdGVj
dGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVVbmtub3duOwogfQogCi12b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6YWRkQ09OTkVDVENyZWRlbnRpYWxzKENGSFRUUE1lc3NhZ2VSZWYgcHJveHlS
ZXNwb25zZSkKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6YWRkQ09OTkVDVENyZWRlbnRp
YWxzKENGSFRUUE1lc3NhZ2VSZWYgcHJveHlSZXNwb25zZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZI
VFRQQXV0aGVudGljYXRpb25SZWY+IGF1dGhlbnRpY2F0aW9uID0gYWRvcHRDRihDRkhUVFBBdXRo
ZW50aWNhdGlvbkNyZWF0ZUZyb21SZXNwb25zZSgwLCBwcm94eVJlc3BvbnNlKSk7CiAKQEAgLTQz
NiwxNSArNDM2LDE1IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjphZGRDT05ORUNUQ3JlZGUK
ICAgICBtX2NsaWVudC5kaWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJv
cigwLCBtX3VybC5zdHJpbmcoKSwgIlByb3h5IGNyZWRlbnRpYWxzIGFyZSBub3QgYXZhaWxhYmxl
IikpOwogfQogCi1DRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNvcHlDRlN0cmVhbURl
c2NyaXB0aW9uKHZvaWQqIGluZm8pCitDRlN0cmluZ1JlZiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
Ojpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQogewotICAgIFNvY2tldFN0cmVh
bUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7
CisgICAgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0
U3RyZWFtSGFuZGxlSW1wbCo+KGluZm8pOwogICAgIHJldHVybiBTdHJpbmcoIldlYktpdCBzb2Nr
ZXQgc3RyZWFtLCAiICsgaGFuZGxlLT5tX3VybC5zdHJpbmcoKSkuY3JlYXRlQ0ZTdHJpbmcoKS5s
ZWFrUmVmKCk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGJh
Y2soQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSwgdm9pZCog
Y2xpZW50Q2FsbEJhY2tJbmZvKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpyZWFkU3Ry
ZWFtQ2FsbGJhY2soQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJlYW1FdmVudFR5cGUgdHlw
ZSwgdm9pZCogY2xpZW50Q2FsbEJhY2tJbmZvKQogewotICAgIFNvY2tldFN0cmVhbUhhbmRsZSog
aGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oY2xpZW50Q2FsbEJhY2tJ
bmZvKTsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsKj4oY2xpZW50Q2FsbEJhY2tJbmZvKTsKICAgICBBU1NFUlRf
VU5VU0VEKHN0cmVhbSwgc3RyZWFtID09IGhhbmRsZS0+bV9yZWFkU3RyZWFtLmdldCgpKTsKICAg
ICAvLyBXb3JrYXJvdW5kIGZvciA8cmRhcjovL3Byb2JsZW0vMTc3MjcwNzM+LiBLZWVwaW5nIHRo
aXMgYmVsb3cgdGhlIGFzc2VydGlvbiBhcyB3ZSdkIGxpa2UgYmV0dGVyIHN0ZXBzIHRvIHJlcHJv
ZHVjZSB0aGlzLgogICAgIGlmICghaGFuZGxlLT5tX3JlYWRTdHJlYW0pCkBAIC00NjIsOSArNDYy
LDkgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRTdHJlYW1DYWxsYgogI2VuZGlmCiB9
CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGV3JpdGVT
dHJlYW1SZWYgc3RyZWFtLCBDRlN0cmVhbUV2ZW50VHlwZSB0eXBlLCB2b2lkKiBjbGllbnRDYWxs
QmFja0luZm8pCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJh
Y2soQ0ZXcml0ZVN0cmVhbVJlZiBzdHJlYW0sIENGU3RyZWFtRXZlbnRUeXBlIHR5cGUsIHZvaWQq
IGNsaWVudENhbGxCYWNrSW5mbykKIHsKLSAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSA9
IHN0YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZSo+KGNsaWVudENhbGxCYWNrSW5mbyk7Cisg
ICAgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCo+KGNsaWVudENhbGxCYWNrSW5mbyk7CiAgICAgQVNTRVJUX1VOVVNFRChz
dHJlYW0sIHN0cmVhbSA9PSBoYW5kbGUtPm1fd3JpdGVTdHJlYW0uZ2V0KCkpOwogICAgIC8vIFRo
aXMgd2Fzbid0IHNlZW4gaGFwcGVuaW5nIGluIHByYWN0aWNlLCB5ZXQgaXQgc2VlbXMgbGlrZSBp
dCBjb3VsZCwgZHVlIHRvIHN5bW1ldHJ5IHdpdGggcmVhZCBzdHJlYW0gY2FsbGJhY2suCiAgICAg
aWYgKCFoYW5kbGUtPm1fd3JpdGVTdHJlYW0pCkBAIC00ODIsOSArNDgyLDkgQEAgdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbAogI2VuZGlmCiB9CiAKLXZvaWQgU29ja2V0
U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGJhY2soQ0ZTdHJlYW1FdmVudFR5cGUgdHlwZSkK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFN0cmVhbUNhbGxiYWNrKENGU3RyZWFt
RXZlbnRUeXBlIHR5cGUpCiB7Ci0gICAgc3dpdGNoKHR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIGtDRlN0cmVhbUV2ZW50Tm9uZToKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2Uga0NGU3RyZWFtRXZlbnRPcGVuQ29tcGxldGVkOgpAQCAtNTU0LDkgKzU1NCw5IEBAIHZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFtQ2FsbGIKICAgICB9CiB9CiAKLXZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjp3cml0ZVN0cmVhbUNhbGxiYWNrKENGU3RyZWFtRXZlbnRUeXBlIHR5
cGUpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OndyaXRlU3RyZWFtQ2FsbGJhY2soQ0ZT
dHJlYW1FdmVudFR5cGUgdHlwZSkKIHsKLSAgICBzd2l0Y2godHlwZSkgeworICAgIHN3aXRjaCAo
dHlwZSkgewogICAgIGNhc2Uga0NGU3RyZWFtRXZlbnROb25lOgogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBrQ0ZTdHJlYW1FdmVudE9wZW5Db21wbGV0ZWQ6CkBAIC02MTAsNyArNjEwLDcgQEAg
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlU3RyZWFtQ2FsbAogICAgIH0KIH0KIAotdm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlcG9ydEVycm9yVG9DbGllbnQoQ0ZFcnJvclJlZiBlcnJv
cikKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVwb3J0RXJyb3JUb0NsaWVudChDRkVy
cm9yUmVmIGVycm9yKQogewogICAgIENGSW5kZXggZXJyb3JDb2RlID0gQ0ZFcnJvckdldENvZGUo
ZXJyb3IpOwogICAgIFN0cmluZyBkZXNjcmlwdGlvbjsKQEAgLTY0MiwxNCArNjQyLDE0IEBAIHZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZXBvcnRFcnJvclRvQ2wKICAgICBtX2NsaWVudC5kaWRG
YWlsU29ja2V0U3RyZWFtKCp0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcihzdGF0aWNfY2FzdDxpbnQ+
KGVycm9yQ29kZSksIG1fdXJsLnN0cmluZygpLCBkZXNjcmlwdGlvbikpOwogfQogCi1Tb2NrZXRT
dHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQorU29ja2V0U3RyZWFtSGFuZGxlSW1w
bDo6flNvY2tldFN0cmVhbUhhbmRsZUltcGwoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0
U3RyZWFtSGFuZGxlICVwIGR0b3IiLCB0aGlzKTsKIAogICAgIEFTU0VSVCghbV9wYWNSdW5Mb29w
U291cmNlKTsKIH0KIAotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cGxh
dGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKCFDRldy
aXRlU3RyZWFtQ2FuQWNjZXB0Qnl0ZXMobV93cml0ZVN0cmVhbS5nZXQoKSkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIGludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRm
b3JtU2VuZChjb24KICAgICByZXR1cm4gQ0ZXcml0ZVN0cmVhbVdyaXRlKG1fd3JpdGVTdHJlYW0u
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKSwgbGVuZ3RoKTsKIH0K
IAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQordm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3NlKCkKIHsKICAgICBMT0coTmV0d29yaywgIlNv
Y2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybUNsb3NlIiwgdGhpcyk7CiAKQEAgLTY4OCw3ICs2
ODgsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiAgICAgbV9j
bGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi11bnNpZ25lZCBzaG9ydCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnBvcnQoKSBjb25zdAordW5zaWduZWQgc2hvcnQgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbDo6cG9ydCgpIGNvbnN0CiB7CiAgICAgaWYgKHVuc2lnbmVkIHNob3J0IHVy
bFBvcnQgPSBtX3VybC5wb3J0KCkpCiAgICAgICAgIHJldHVybiB1cmxQb3J0OwpAQCAtNjk3LDQg
KzY5Nyw0IEBAIHVuc2lnbmVkIHNob3J0IFNvY2tldFN0cmVhbUhhbmRsZTo6cG9ydCgKICAgICBy
ZXR1cm4gODA7CiB9CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgJKG5v
bmV4aXN0ZW50KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTb2Nr
ZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KLSNpZiBQTEFURk9STShXSU4pCi0jaW5jbHVkZSA8d2lu
c29jazIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAiU2Vzc2lvbklELmgiCi0jaW5jbHVkZSA8Y3Vy
bC9jdXJsLmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0xvY2suaD4K
LSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7
Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBV
UkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQot
Ci0gICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7Ci0KLXByaXZhdGU6Ci0gICAgU29j
a2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwot
Ci0gICAgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKLQotICAgIGJvb2wgcmVh
ZERhdGEoQ1VSTCopOwotICAgIGJvb2wgc2VuZERhdGEoQ1VSTCopOwotICAgIGJvb2wgd2FpdEZv
ckF2YWlsYWJsZURhdGEoQ1VSTCosIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGlt
ZW91dCk7Ci0KLSAgICB2b2lkIHN0YXJ0VGhyZWFkKCk7Ci0gICAgdm9pZCBzdG9wVGhyZWFkKCk7
Ci0KLSAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKCk7Ci0gICAgdm9pZCBkaWRPcGVuU29ja2V0KCk7
Ci0KLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY3JlYXRlQ29weShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLQotICAgIHN0cnVjdCBTb2NrZXREYXRhIHsKLSAgICAg
ICAgU29ja2V0RGF0YShzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiYmIHNvdXJjZSwgaW50IGxlbmd0
aCkKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUoc291cmNlKTsKLSAgICAg
ICAgICAgIHNpemUgPSBsZW5ndGg7Ci0gICAgICAgIH0KLQotICAgICAgICBTb2NrZXREYXRhKFNv
Y2tldERhdGEmJiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUo
b3RoZXIuZGF0YSk7Ci0gICAgICAgICAgICBzaXplID0gb3RoZXIuc2l6ZTsKLSAgICAgICAgICAg
IG90aGVyLnNpemUgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNo
YXJbXT4gZGF0YTsKLSAgICAgICAgaW50IHNpemUgeyAwIH07Ci0gICAgfTsKLQotICAgIFRocmVh
ZElkZW50aWZpZXIgbV93b3JrZXJUaHJlYWQgeyAwIH07Ci0gICAgc3RkOjphdG9taWM8Ym9vbD4g
bV9zdG9wVGhyZWFkIHsgZmFsc2UgfTsKLSAgICBMb2NrIG1fbXV0ZXhTZW5kOwotICAgIExvY2sg
bV9tdXRleFJlY2VpdmU7Ci0gICAgRGVxdWU8U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKLSAgICBE
ZXF1ZTxTb2NrZXREYXRhPiBtX3JlY2VpdmVEYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1z
dHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUhhbmRsZUN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAkocmV2aXNpb24gMjA0NDY4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRs
ZUN1cmwuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQnJlbnQgRnVsZ2hhbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgotCi0jaWYgVVNFKENVUkwp
Ci0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSA8bXV0ZXg+Ci0jaW5jbHVkZSA8d3Rm
L0xvY2suaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50JiBjbGllbnQpCi0gICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQot
ewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAi
LCB0aGlzLCAmbV9jbGllbnQpOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3Rh
cnRUaHJlYWQoKTsKLX0KLQotU29ja2V0U3RyZWFtSGFuZGxlOjp+U29ja2V0U3RyZWFtSGFuZGxl
KCkKLXsKLSAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBkZWxldGUiLCB0
aGlzKTsKLSAgICBBU1NFUlQoIW1fd29ya2VyVGhyZWFkKTsKLX0KLQotaW50IFNvY2tldFN0cmVh
bUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0g
ICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kIiwgdGhp
cyk7Ci0KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgc3RhcnRUaHJlYWQoKTsK
LQotICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoZGF0YSwgbGVuZ3RoKTsKLQotICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKLSAgICBtX3NlbmREYXRhLmFwcGVu
ZChTb2NrZXREYXRhIHsgV1RGTW92ZShjb3B5KSwgbGVuZ3RoIH0pOwotCi0gICAgcmV0dXJuIGxl
bmd0aDsKLX0KLQotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQotewot
ICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0
aGlzKTsKLQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBzdG9wVGhyZWFkKCk7
Ci0KLSAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLWJvb2wg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YShDVVJMKiBjdXJsSGFuZGxlKQotewotICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgY29uc3QgaW50IGJ1ZmZlclNpemUgPSAxMDI0
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IGRhdGEobmV3IGNoYXJbYnVmZmVyU2l6ZV0p
OwotICAgIHNpemVfdCBieXRlc1JlYWQgPSAwOwotCi0gICAgQ1VSTGNvZGUgcmV0ID0gY3VybF9l
YXN5X3JlY3YoY3VybEhhbmRsZSwgZGF0YS5nZXQoKSwgYnVmZmVyU2l6ZSwgJmJ5dGVzUmVhZCk7
Ci0KLSAgICBpZiAocmV0ID09IENVUkxFX09LICYmIGJ5dGVzUmVhZCA+PSAwKSB7Ci0gICAgICAg
IG1fbXV0ZXhSZWNlaXZlLmxvY2soKTsKLSAgICAgICAgbV9yZWNlaXZlRGF0YS5hcHBlbmQoU29j
a2V0RGF0YSB7IFdURk1vdmUoZGF0YSksIHN0YXRpY19jYXN0PGludD4oYnl0ZXNSZWFkKSB9KTsK
LSAgICAgICAgbV9tdXRleFJlY2VpdmUudW5sb2NrKCk7Ci0KLSAgICAgICAgcmVmKCk7Ci0KLSAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10gewotICAgICAgICAgICAgZGlkUmVjZWl2ZURh
dGEoKTsKLSAgICAgICAgICAgIGRlcmVmKCk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChyZXQgPT0gQ1VSTEVfQUdBSU4pCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNvY2tldFN0cmVhbUhh
bmRsZTo6c2VuZERhdGEoQ1VSTCogY3VybEhhbmRsZSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLQotICAgIHdoaWxlICh0cnVlKSB7Ci0KLSAgICAgICAgbV9tdXRleFNlbmQubG9j
aygpOwotICAgICAgICBpZiAoIW1fc2VuZERhdGEuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBtX211
dGV4U2VuZC51bmxvY2soKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGF1dG8gc2VuZERhdGEgPSBtX3NlbmREYXRhLnRha2VGaXJzdCgpOwotICAgICAgICBtX211dGV4
U2VuZC51bmxvY2soKTsKLQotICAgICAgICBpbnQgdG90YWxCeXRlc1NlbnQgPSAwOwotICAgICAg
ICB3aGlsZSAodG90YWxCeXRlc1NlbnQgPCBzZW5kRGF0YS5zaXplKSB7Ci0gICAgICAgICAgICBz
aXplX3QgYnl0ZXNTZW50ID0gMDsKLSAgICAgICAgICAgIENVUkxjb2RlIHJldCA9IGN1cmxfZWFz
eV9zZW5kKGN1cmxIYW5kbGUsIHNlbmREYXRhLmRhdGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwg
c2VuZERhdGEuc2l6ZSAtIHRvdGFsQnl0ZXNTZW50LCAmYnl0ZXNTZW50KTsKLSAgICAgICAgICAg
IGlmIChyZXQgPT0gQ1VSTEVfT0spCi0gICAgICAgICAgICAgICAgdG90YWxCeXRlc1NlbnQgKz0g
Ynl0ZXNTZW50OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gSW5zZXJ0IHJlbWFpbmluZyBkYXRhIGludG8gc2VuZCBxdWV1
ZS4KLQotICAgICAgICBpZiAodG90YWxCeXRlc1NlbnQgPCBzZW5kRGF0YS5zaXplKSB7Ci0gICAg
ICAgICAgICBjb25zdCBpbnQgcmVzdExlbmd0aCA9IHNlbmREYXRhLnNpemUgLSB0b3RhbEJ5dGVz
U2VudDsKLSAgICAgICAgICAgIGF1dG8gY29weSA9IGNyZWF0ZUNvcHkoc2VuZERhdGEuZGF0YS5n
ZXQoKSArIHRvdGFsQnl0ZXNTZW50LCByZXN0TGVuZ3RoKTsKLQotICAgICAgICAgICAgc3RkOjps
b2NrX2d1YXJkPExvY2s+IGxvY2sobV9tdXRleFNlbmQpOwotICAgICAgICAgICAgbV9zZW5kRGF0
YS5wcmVwZW5kKFNvY2tldERhdGEgeyBXVEZNb3ZlKGNvcHkpLCByZXN0TGVuZ3RoIH0pOwotCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OndhaXRGb3JBdmFpbGFibGVEYXRh
KENVUkwqIGN1cmxIYW5kbGUsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91
dCkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHMgdXNlYyA9IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25v
OjptaWNyb3NlY29uZHM+KHNlbGVjdFRpbWVvdXQpOwotCi0gICAgc3RydWN0IHRpbWV2YWwgdGlt
ZW91dDsKLSAgICBpZiAodXNlYyA8PSBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzKDApKSB7Ci0g
ICAgICAgIHRpbWVvdXQudHZfc2VjID0gMDsKLSAgICAgICAgdGltZW91dC50dl91c2VjID0gMDsK
LSAgICB9IGVsc2UgewotICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IHVzZWMuY291bnQoKSAvIDEw
MDAwMDA7Ci0gICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHVzZWMuY291bnQoKSAlIDEwMDAwMDA7
Ci0gICAgfQotCi0gICAgbG9uZyBzb2NrZXQ7Ci0gICAgaWYgKGN1cmxfZWFzeV9nZXRpbmZvKGN1
cmxIYW5kbGUsIENVUkxJTkZPX0xBU1RTT0NLRVQsICZzb2NrZXQpICE9IENVUkxFX09LKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmZF9zZXQgZmRyZWFkOwotICAgIEZEX1pFUk8oJmZk
cmVhZCk7Ci0gICAgRkRfU0VUKHNvY2tldCwgJmZkcmVhZCk7Ci0gICAgaW50IHJjID0gOjpzZWxl
Y3QoMCwgJmZkcmVhZCwgbnVsbHB0ciwgbnVsbHB0ciwgJnRpbWVvdXQpOwotICAgIHJldHVybiBy
YyA9PSAxOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RhcnRUaHJlYWQoKQotewot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV93b3JrZXJUaHJlYWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHJlZigpOyAvLyBzdG9wVGhyZWFkKCkgd2lsbCBjYWxsIGRl
cmVmKCkuCi0KLSAgICBtX3dvcmtlclRocmVhZCA9IGNyZWF0ZVRocmVhZCgiV2ViU29ja2V0IHRo
cmVhZCIsIFt0aGlzXSB7Ci0KLSAgICAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAg
ICAgICAgQ1VSTCogY3VybEhhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7Ci0KLSAgICAgICAgaWYg
KCFjdXJsSGFuZGxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQoY3VybEhhbmRsZSwgQ1VSTE9QVF9VUkwsIG1fdXJsLmhvc3QoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChjdXJsSGFuZGxlLCBDVVJMT1BUX1BPUlQsIG1f
dXJsLnBvcnQoKSk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybEhhbmRsZSwgQ1VSTE9Q
VF9DT05ORUNUX09OTFksIDFMKTsKLQotICAgICAgICAvLyBDb25uZWN0IHRvIGhvc3QKLSAgICAg
ICAgaWYgKGN1cmxfZWFzeV9wZXJmb3JtKGN1cmxIYW5kbGUpICE9IENVUkxFX09LKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIHJlZigpOwotCi0gICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW3RoaXNdIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHJlZmVyZW5jZSBjb3VudCB0byBmaXgg
YSBjcmFzaC4KLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNhbGwgaXMgaW52b2tlZCBvbiB0aGUg
bWFpbiB0aHJlYWQgYWZ0ZXIgYWxsIG90aGVyIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkLCB0aGUg
U29ja2V0U3RyZWFtQ2xpZW50Ci0gICAgICAgICAgICAvLyBpcyBhbHJlYWR5IGRlbGV0ZWQuIEFj
Y2Vzc2luZyB0aGUgU29ja2V0U3RyZWFtQ2xpZW50IGluIGRpZE9wZW5Tb2NrZXQoKSB3aWxsIHRo
ZW4gY2F1c2UgYSBjcmFzaC4KLSAgICAgICAgICAgIGlmIChyZWZDb3VudCgpID4gMSkKLSAgICAg
ICAgICAgICAgICBkaWRPcGVuU29ja2V0KCk7Ci0gICAgICAgICAgICBkZXJlZigpOwotICAgICAg
ICB9KTsKLQotICAgICAgICB3aGlsZSAoIW1fc3RvcFRocmVhZCkgewotICAgICAgICAgICAgLy8g
U2VuZCBxdWV1ZWQgZGF0YQotICAgICAgICAgICAgc2VuZERhdGEoY3VybEhhbmRsZSk7Ci0KLSAg
ICAgICAgICAgIC8vIFdhaXQgdW50aWwgc29ja2V0IGhhcyBhdmFpbGFibGUgZGF0YQotICAgICAg
ICAgICAgaWYgKHdhaXRGb3JBdmFpbGFibGVEYXRhKGN1cmxIYW5kbGUsIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHMoMjApKSkKLSAgICAgICAgICAgICAgICByZWFkRGF0YShjdXJsSGFuZGxlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmxIYW5kbGUpOwotICAg
IH0pOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFRocmVhZCgpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICghbV93b3JrZXJUaHJlYWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fc3RvcFRocmVhZCA9IHRydWU7Ci0gICAgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24obV93b3JrZXJUaHJlYWQpOwotICAgIG1fd29ya2VyVGhyZWFkID0gMDsKLSAg
ICBkZXJlZigpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkUmVjZWl2ZURhdGEo
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBtX211dGV4UmVjZWl2ZS5s
b2NrKCk7Ci0KLSAgICBhdXRvIHJlY2VpdmVEYXRhID0gV1RGTW92ZShtX3JlY2VpdmVEYXRhKTsK
LQotICAgIG1fbXV0ZXhSZWNlaXZlLnVubG9jaygpOwotCi0gICAgZm9yIChhdXRvJiBzb2NrZXRE
YXRhIDogcmVjZWl2ZURhdGEpIHsKLSAgICAgICAgaWYgKHNvY2tldERhdGEuc2l6ZSA+IDApIHsK
LSAgICAgICAgICAgIGlmIChzdGF0ZSgpID09IE9wZW4pCi0gICAgICAgICAgICAgICAgbV9jbGll
bnQuZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURhdGEoKnRoaXMsIHNvY2tldERhdGEuZGF0YS5nZXQo
KSwgc29ja2V0RGF0YS5zaXplKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwbGF0Zm9y
bUNsb3NlKCk7Ci0gICAgfQotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6ZGlkT3BlblNv
Y2tldCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fc3RhdGUgPSBP
cGVuOwotCi0gICAgbV9jbGllbnQuZGlkT3BlblNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxjaGFyW10+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlQ29weShjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxjaGFyW10+
IGNvcHkobmV3IGNoYXJbbGVuZ3RoXSk7Ci0gICAgbWVtY3B5KGNvcHkuZ2V0KCksIGRhdGEsIGxl
bmd0aCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjb3B5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkocmV2
aXNpb24gMjA0NDY2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVC
YXNlLmgiCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRp
ZgorCisjaW5jbHVkZSAiU2Vzc2lvbklELmgiCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5j
bHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tl
dFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1I
YW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwgU29ja2V0
U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25JRCkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorCisgICAgdmlydHVhbCB+
U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworCisgICAgaW50IHBsYXRm
b3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2b2lk
IHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKKworICAgIGJvb2wgcmVhZERhdGEoQ1VSTCopOwor
ICAgIGJvb2wgc2VuZERhdGEoQ1VSTCopOworICAgIGJvb2wgd2FpdEZvckF2YWlsYWJsZURhdGEo
Q1VSTCosIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2VsZWN0VGltZW91dCk7CisKKyAgICB2
b2lkIHN0YXJ0VGhyZWFkKCk7CisgICAgdm9pZCBzdG9wVGhyZWFkKCk7CisKKyAgICB2b2lkIGRp
ZFJlY2VpdmVEYXRhKCk7CisgICAgdm9pZCBkaWRPcGVuU29ja2V0KCk7CisKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gY3JlYXRlQ29weShjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKTsKKworICAgIHN0cnVjdCBTb2NrZXREYXRhIHsKKyAgICAgICAgU29ja2V0RGF0YShz
dGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiYmIHNvdXJjZSwgaW50IGxlbmd0aCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUoc291cmNlKTsKKyAgICAgICAgICAgIHNpemUgPSBs
ZW5ndGg7CisgICAgICAgIH0KKworICAgICAgICBTb2NrZXREYXRhKFNvY2tldERhdGEmJiBvdGhl
cikKKyAgICAgICAgeworICAgICAgICAgICAgZGF0YSA9IFdURk1vdmUob3RoZXIuZGF0YSk7Cisg
ICAgICAgICAgICBzaXplID0gb3RoZXIuc2l6ZTsKKyAgICAgICAgICAgIG90aGVyLnNpemUgPSAw
OworICAgICAgICB9CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJbXT4gZGF0YTsKKyAg
ICAgICAgaW50IHNpemUgeyAwIH07CisgICAgfTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV93
b3JrZXJUaHJlYWQgeyAwIH07CisgICAgc3RkOjphdG9taWM8Ym9vbD4gbV9zdG9wVGhyZWFkIHsg
ZmFsc2UgfTsKKyAgICBMb2NrIG1fbXV0ZXhTZW5kOworICAgIExvY2sgbV9tdXRleFJlY2VpdmU7
CisgICAgRGVxdWU8U29ja2V0RGF0YT4gbV9zZW5kRGF0YTsKKyAgICBEZXF1ZTxTb2NrZXREYXRh
PiBtX3JlY2VpdmVEYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29j
a2V0U3RyZWFtSGFuZGxlSW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiU29j
a2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgog
CiAjaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPHdpbnNvY2syLmg+CkBAIC00OCwxNCArNDgs
MTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQ7CiAKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7
CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsIDogcHVibGljIFNvY2tldFN0cmVhbUhhbmRs
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShj
b25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQsIFNlc3Npb25J
RCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQp
KTsgfQorICAgIHN0YXRpYyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoY29uc3QgVVJM
JiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCh1cmwsIGNsaWVudCkpOyB9
CiAKLSAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGUoKTsKKyAgICB2aXJ0dWFsIH5Tb2Nr
ZXRTdHJlYW1IYW5kbGVJbXBsKCk7CiAKIHByaXZhdGU6Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworICAgIFNvY2tldFN0cmVh
bUhhbmRsZUltcGwoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKICAg
ICBpbnQgcGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRl
OwogICAgIHZvaWQgcGxhdGZvcm1DbG9zZSgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUltcGxDdXJsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCShyZXZpc2lvbiAyMDQ0NjgpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcDoy
MDQ0NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbEN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIKKwor
I2lmIFVTRShDVVJMKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1ZGUgPG11dGV4Pgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU29ja2V0
U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQorICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1
cmwsIGNsaWVudCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBu
ZXcgY2xpZW50ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIHN0YXJ0VGhyZWFkKCk7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tl
dFN0cmVhbUhhbmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUg
JXAgZGVsZXRlIiwgdGhpcyk7CisgICAgQVNTRVJUKCFtX3dvcmtlclRocmVhZCk7Cit9CisKK2lu
dCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQoreworICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRm
b3JtU2VuZCIsIHRoaXMpOworCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIHN0
YXJ0VGhyZWFkKCk7CisKKyAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KGRhdGEsIGxlbmd0aCk7
CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX211dGV4U2VuZCk7CisgICAgbV9z
ZW5kRGF0YS5hcHBlbmQoU29ja2V0RGF0YSB7IFdURk1vdmUoY29weSksIGxlbmd0aCB9KTsKKwor
ICAgIHJldHVybiBsZW5ndGg7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9y
bUNsb3NlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0
Zm9ybUNsb3NlIiwgdGhpcyk7CisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAg
c3RvcFRocmVhZCgpOworCisgICAgbV9jbGllbnQuZGlkQ2xvc2VTb2NrZXRTdHJlYW0oKnRoaXMp
OworfQorCitib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZERhdGEoQ1VSTCogY3VybEhhbmRs
ZSkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IGludCBidWZm
ZXJTaXplID0gMTAyNDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBkYXRhKG5ldyBjaGFy
W2J1ZmZlclNpemVdKTsKKyAgICBzaXplX3QgYnl0ZXNSZWFkID0gMDsKKworICAgIENVUkxjb2Rl
IHJldCA9IGN1cmxfZWFzeV9yZWN2KGN1cmxIYW5kbGUsIGRhdGEuZ2V0KCksIGJ1ZmZlclNpemUs
ICZieXRlc1JlYWQpOworCisgICAgaWYgKHJldCA9PSBDVVJMRV9PSyAmJiBieXRlc1JlYWQgPj0g
MCkgeworICAgICAgICBtX211dGV4UmVjZWl2ZS5sb2NrKCk7CisgICAgICAgIG1fcmVjZWl2ZURh
dGEuYXBwZW5kKFNvY2tldERhdGEgeyBXVEZNb3ZlKGRhdGEpLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5
dGVzUmVhZCkgfSk7CisgICAgICAgIG1fbXV0ZXhSZWNlaXZlLnVubG9jaygpOworCisgICAgICAg
IHJlZigpOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsKKyAgICAgICAgICAg
IGRpZFJlY2VpdmVEYXRhKCk7CisgICAgICAgICAgICBkZXJlZigpOworICAgICAgICB9KTsKKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocmV0ID09IENVUkxFX0FHQUlO
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBT
b2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENVUkwqIGN1cmxIYW5kbGUpCit7CisgICAgQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworCisgICAgICAgIG1f
bXV0ZXhTZW5kLmxvY2soKTsKKyAgICAgICAgaWYgKCFtX3NlbmREYXRhLnNpemUoKSkgeworICAg
ICAgICAgICAgbV9tdXRleFNlbmQudW5sb2NrKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBhdXRvIHNlbmREYXRhID0gbV9zZW5kRGF0YS50YWtlRmlyc3QoKTsKKyAg
ICAgICAgbV9tdXRleFNlbmQudW5sb2NrKCk7CisKKyAgICAgICAgaW50IHRvdGFsQnl0ZXNTZW50
ID0gMDsKKyAgICAgICAgd2hpbGUgKHRvdGFsQnl0ZXNTZW50IDwgc2VuZERhdGEuc2l6ZSkgewor
ICAgICAgICAgICAgc2l6ZV90IGJ5dGVzU2VudCA9IDA7CisgICAgICAgICAgICBDVVJMY29kZSBy
ZXQgPSBjdXJsX2Vhc3lfc2VuZChjdXJsSGFuZGxlLCBzZW5kRGF0YS5kYXRhLmdldCgpICsgdG90
YWxCeXRlc1NlbnQsIHNlbmREYXRhLnNpemUgLSB0b3RhbEJ5dGVzU2VudCwgJmJ5dGVzU2VudCk7
CisgICAgICAgICAgICBpZiAocmV0ID09IENVUkxFX09LKQorICAgICAgICAgICAgICAgIHRvdGFs
Qnl0ZXNTZW50ICs9IGJ5dGVzU2VudDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluc2VydCByZW1haW5pbmcgZGF0YSBp
bnRvIHNlbmQgcXVldWUuCisKKyAgICAgICAgaWYgKHRvdGFsQnl0ZXNTZW50IDwgc2VuZERhdGEu
c2l6ZSkgeworICAgICAgICAgICAgY29uc3QgaW50IHJlc3RMZW5ndGggPSBzZW5kRGF0YS5zaXpl
IC0gdG90YWxCeXRlc1NlbnQ7CisgICAgICAgICAgICBhdXRvIGNvcHkgPSBjcmVhdGVDb3B5KHNl
bmREYXRhLmRhdGEuZ2V0KCkgKyB0b3RhbEJ5dGVzU2VudCwgcmVzdExlbmd0aCk7CisKKyAgICAg
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbXV0ZXhTZW5kKTsKKyAgICAgICAg
ICAgIG1fc2VuZERhdGEucHJlcGVuZChTb2NrZXREYXRhIHsgV1RGTW92ZShjb3B5KSwgcmVzdExl
bmd0aCB9KTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjp3YWl0Rm9y
QXZhaWxhYmxlRGF0YShDVVJMKiBjdXJsSGFuZGxlLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHNlbGVjdFRpbWVvdXQpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisKKyAgICBz
dGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIHVzZWMgPSBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2Fz
dDxzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzPihzZWxlY3RUaW1lb3V0KTsKKworICAgIHN0cnVj
dCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgaWYgKHVzZWMgPD0gc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b25kcygwKSkgeworICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CisgICAgICAgIHRpbWVvdXQu
dHZfdXNlYyA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGltZW91dC50dl9zZWMgPSB1c2Vj
LmNvdW50KCkgLyAxMDAwMDAwOworICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSB1c2VjLmNvdW50
KCkgJSAxMDAwMDAwOworICAgIH0KKworICAgIGxvbmcgc29ja2V0OworICAgIGlmIChjdXJsX2Vh
c3lfZ2V0aW5mbyhjdXJsSGFuZGxlLCBDVVJMSU5GT19MQVNUU09DS0VULCAmc29ja2V0KSAhPSBD
VVJMRV9PSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmRfc2V0IGZkcmVhZDsKKyAg
ICBGRF9aRVJPKCZmZHJlYWQpOworICAgIEZEX1NFVChzb2NrZXQsICZmZHJlYWQpOworICAgIGlu
dCByYyA9IDo6c2VsZWN0KDAsICZmZHJlYWQsIG51bGxwdHIsIG51bGxwdHIsICZ0aW1lb3V0KTsK
KyAgICByZXR1cm4gcmMgPT0gMTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0YXJ0
VGhyZWFkKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fd29y
a2VyVGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICByZWYoKTsgLy8gc3RvcFRocmVhZCgp
IHdpbGwgY2FsbCBkZXJlZigpLgorCisgICAgbV93b3JrZXJUaHJlYWQgPSBjcmVhdGVUaHJlYWQo
IldlYlNvY2tldCB0aHJlYWQiLCBbdGhpc10geworCisgICAgICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworCisgICAgICAgIENVUkwqIGN1cmxIYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwor
CisgICAgICAgIGlmICghY3VybEhhbmRsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxIYW5kbGUsIENVUkxPUFRfVVJMLCBtX3VybC5ob3N0KCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybEhhbmRsZSwgQ1VS
TE9QVF9QT1JULCBtX3VybC5wb3J0KCkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmxI
YW5kbGUsIENVUkxPUFRfQ09OTkVDVF9PTkxZLCAxTCk7CisKKyAgICAgICAgLy8gQ29ubmVjdCB0
byBob3N0CisgICAgICAgIGlmIChjdXJsX2Vhc3lfcGVyZm9ybShjdXJsSGFuZGxlKSAhPSBDVVJM
RV9PSykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICByZWYoKTsKKworICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFt0aGlzXSB7CisgICAgICAgICAgICAvLyBDaGVjayByZWZlcmVuY2Ug
Y291bnQgdG8gZml4IGEgY3Jhc2guCisgICAgICAgICAgICAvLyBXaGVuIHRoZSBjYWxsIGlzIGlu
dm9rZWQgb24gdGhlIG1haW4gdGhyZWFkIGFmdGVyIGFsbCBvdGhlciByZWZlcmVuY2VzIGFyZSBy
ZWxlYXNlZCwgdGhlIFNvY2tldFN0cmVhbUNsaWVudAorICAgICAgICAgICAgLy8gaXMgYWxyZWFk
eSBkZWxldGVkLiBBY2Nlc3NpbmcgdGhlIFNvY2tldFN0cmVhbUNsaWVudCBpbiBkaWRPcGVuU29j
a2V0KCkgd2lsbCB0aGVuIGNhdXNlIGEgY3Jhc2guCisgICAgICAgICAgICBpZiAocmVmQ291bnQo
KSA+IDEpCisgICAgICAgICAgICAgICAgZGlkT3BlblNvY2tldCgpOworICAgICAgICAgICAgZGVy
ZWYoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgd2hpbGUgKCFtX3N0b3BUaHJlYWQpIHsKKyAg
ICAgICAgICAgIC8vIFNlbmQgcXVldWVkIGRhdGEKKyAgICAgICAgICAgIHNlbmREYXRhKGN1cmxI
YW5kbGUpOworCisgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHNvY2tldCBoYXMgYXZhaWxhYmxl
IGRhdGEKKyAgICAgICAgICAgIGlmICh3YWl0Rm9yQXZhaWxhYmxlRGF0YShjdXJsSGFuZGxlLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDIwKSkpCisgICAgICAgICAgICAgICAgcmVhZERhdGEo
Y3VybEhhbmRsZSk7CisgICAgICAgIH0KKworICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJs
SGFuZGxlKTsKKyAgICB9KTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BUaHJl
YWQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fd29ya2Vy
VGhyZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0b3BUaHJlYWQgPSB0cnVlOworICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fd29ya2VyVGhyZWFkKTsKKyAgICBtX3dvcmtlclRo
cmVhZCA9IDA7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRp
ZFJlY2VpdmVEYXRhKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgbV9t
dXRleFJlY2VpdmUubG9jaygpOworCisgICAgYXV0byByZWNlaXZlRGF0YSA9IFdURk1vdmUobV9y
ZWNlaXZlRGF0YSk7CisKKyAgICBtX211dGV4UmVjZWl2ZS51bmxvY2soKTsKKworICAgIGZvciAo
YXV0byYgc29ja2V0RGF0YSA6IHJlY2VpdmVEYXRhKSB7CisgICAgICAgIGlmIChzb2NrZXREYXRh
LnNpemUgPiAwKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUoKSA9PSBPcGVuKQorICAgICAgICAg
ICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKCp0aGlzLCBzb2NrZXRE
YXRhLmRhdGEuZ2V0KCksIHNvY2tldERhdGEuc2l6ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgcGxhdGZvcm1DbG9zZSgpOworICAgIH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmRpZE9wZW5Tb2NrZXQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAg
ICBtX3N0YXRlID0gT3BlbjsKKworICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRo
aXMpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNy
ZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Y2hhcltdPiBjb3B5KG5ldyBjaGFyW2xlbmd0aF0pOworICAgIG1lbWNweShjb3B5Lmdl
dCgpLCBkYXRhLCBsZW5ndGgpOworCisgICAgcmV0dXJuIFdURk1vdmUoY29weSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlSW1wbEN1cmwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1I
YW5kbGVJbXBsQ3VybC5jcHAJKHJldmlzaW9uIDIwNDQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsQ3VybC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbC5oIgogCiAjaWYgVVNFKENVUkwpCiAKQEAgLTQ0LDIxICs0NCwyMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKLSAgICA6
IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UodXJsLCBjbGllbnQpCitTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICA6IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVu
dCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50
ICVwIiwgdGhpcywgJm1fY2xpZW50KTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IHN0YXJ0VGhyZWFkKCk7CiB9CiAKLVNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhh
bmRsZSgpCitTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp+U29ja2V0U3RyZWFtSGFuZGxlSW1wbCgp
CiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhp
cyk7CiAgICAgQVNTRVJUKCFtX3dvcmtlclRocmVhZCk7CiB9CiAKLWludCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50IFNv
Y2tldFN0cmVhbUhhbmRsZUltcGw6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRm
b3JtU2VuZCIsIHRoaXMpOwogCkBAIC03NCw3ICs3NCw3IEBAIGludCBTb2NrZXRTdHJlYW1IYW5k
bGU6OnBsYXRmb3JtU2VuZChjb24KICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi12b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUlt
cGw6OnBsYXRmb3JtQ2xvc2UoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFu
ZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0aGlzKTsKIApAQCAtODUsNyArODUsNyBAQCB2b2lkIFNv
Y2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiAgICAgbV9jbGllbnQuZGlkQ2xvc2VT
b2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZERh
dGEoQ1VSTCogY3VybEhhbmRsZSkKK2Jvb2wgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZERh
dGEoQ1VSTCogY3VybEhhbmRsZSkKIHsKICAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIApA
QCAtMTE2LDcgKzExNiw3IEBAIGJvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkRGF0YShDVVJM
KiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU29ja2V0U3RyZWFtSGFuZGxlOjpzZW5k
RGF0YShDVVJMKiBjdXJsSGFuZGxlKQorYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpzZW5k
RGF0YShDVVJMKiBjdXJsSGFuZGxlKQogewogICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwog
CkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGU6OnNlbmREYXRhKENV
UkwqIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6d2Fp
dEZvckF2YWlsYWJsZURhdGEoQ1VSTCogY3VybEhhbmRsZSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyBzZWxlY3RUaW1lb3V0KQorYm9vbCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3YWl0Rm9y
QXZhaWxhYmxlRGF0YShDVVJMKiBjdXJsSGFuZGxlLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
IHNlbGVjdFRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAKQEAgLTE4
Miw3ICsxODIsNyBAQCBib29sIFNvY2tldFN0cmVhbUhhbmRsZTo6d2FpdEZvckF2YWlsYWJsCiAg
ICAgcmV0dXJuIHJjID09IDE7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdGFydFRo
cmVhZCgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OnN0YXJ0VGhyZWFkKCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OnN0YXJ0VGhyZWFkKCkKICAgICB9KTsKIH0KIAotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OnN0b3BUaHJlYWQoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpz
dG9wVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNDUsNyAr
MjQ1LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnN0b3BUaHJlYWQoKQogICAgIGRlcmVm
KCk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRSZWNlaXZlRGF0YSgpCit2b2lk
IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmRpZFJlY2VpdmVEYXRhKCkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OmRpZFJlY2VpdmVEYXRhKAogICAgIH0KIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmRpZE9wZW5Tb2NrZXQoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpkaWRPcGVu
U29ja2V0KCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCkBAIC0yNzMsNyArMjcz
LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZE9wZW5Tb2NrZXQoKQogICAgIG1fY2xp
ZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRoaXMpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Y2hh
cltdPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKK3N0ZDo6dW5pcXVlX3B0cjxjaGFyW10+IFNvY2tldFN0cmVhbUhhbmRsZUltcGw6
OmNyZWF0ZUNvcHkoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Y2hhcltdPiBjb3B5KG5ldyBjaGFyW2xlbmd0aF0pOwogICAgIG1lbWNweShjb3B5
LmdldCgpLCBkYXRhLCBsZW5ndGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAkocmV2aXNpb24g
MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZS5oCShub25leGlzdGVudCkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmgiCi0KLSNpZiBV
U0UoU09VUCkKLQotI2luY2x1ZGUgIlNlc3Npb25JRC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNvY2tldFN0cmVhbUVycm9yOwotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxl
Q2xpZW50OwotCi1jbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgZmluYWwgOiBwdWJsaWMgUmVmQ291
bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25z
dCBVUkwmLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmLCBTZXNzaW9uSUQpOwotICAgIHN0YXRp
YyBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKLQotICAgIHZpcnR1YWwgflNvY2tldFN0cmVhbUhhbmRs
ZSgpOwotCi1wcml2YXRlOgotICAgIFNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmLCBTb2Nr
ZXRTdHJlYW1IYW5kbGVDbGllbnQmKTsKLQotICAgIGludCBwbGF0Zm9ybVNlbmQoY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwbGF0Zm9ybUNsb3NlKCkg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7
Ci0gICAgdm9pZCBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7Ci0KLSAgICBzdGF0
aWMgdm9pZCBjb25uZWN0ZWRDYWxsYmFjayhHU29ja2V0Q2xpZW50KiwgR0FzeW5jUmVzdWx0Kiwg
U29ja2V0U3RyZWFtSGFuZGxlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVhZFJlYWR5Q2FsbGJhY2so
R0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3RyZWFtSGFuZGxlKik7Ci0gICAg
c3RhdGljIGdib29sZWFuIHdyaXRlUmVhZHlDYWxsYmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0q
LCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKLQotICAgIHZvaWQgY29ubmVjdGVkKEdSZWZQdHI8R1Nv
Y2tldENvbm5lY3Rpb24+JiYpOwotICAgIHZvaWQgcmVhZEJ5dGVzKGdzc2l6ZSk7Ci0gICAgdm9p
ZCBkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yJiYpOwotICAgIHZvaWQgd3JpdGVSZWFkeSgpOwot
Ci0gICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gbV9zb2NrZXRDb25uZWN0aW9uOwotICAg
IEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOwotICAgIEdSZWZQdHI8R1BvbGxh
YmxlT3V0cHV0U3RyZWFtPiBtX291dHB1dFN0cmVhbTsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IG1f
d3JpdGVSZWFkeVNvdXJjZTsKLSAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJs
ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBtX3JlYWRCdWZmZXI7Ci19OwotCi19ICAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwu
aAkocmV2aXNpb24gMjA0NDY2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmg6MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0
cm9uaWNzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlNv
Y2tldFN0cmVhbUhhbmRsZUJhc2UuaCIKKworI2lmIFVTRShTT1VQKQorCisjaW5jbHVkZSAiU2Vz
c2lvbklELmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU29ja2V0U3RyZWFt
RXJyb3I7CitjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisKK2NsYXNzIFNvY2tldFN0
cmVhbUhhbmRsZSBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4s
IHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudCYsIFNlc3Npb25JRCk7CisgICAgc3RhdGljIFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+
IGNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiosIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwor
CisgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CisKK3ByaXZhdGU6CisgICAgU29j
a2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOwor
CisgICAgaW50IHBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHBsYXRmb3JtQ2xvc2UoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYmVn
aW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICB2b2lkIHN0b3BXYWl0aW5nRm9y
U29ja2V0V3JpdGFiaWxpdHkoKTsKKworICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENhbGxiYWNr
KEdTb2NrZXRDbGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAg
ICBzdGF0aWMgdm9pZCByZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5bmNSZXN1
bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gd3JpdGVSZWFk
eUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRsZSopOwor
CisgICAgdm9pZCBjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJik7CisgICAg
dm9pZCByZWFkQnl0ZXMoZ3NzaXplKTsKKyAgICB2b2lkIGRpZEZhaWwoU29ja2V0U3RyZWFtRXJy
b3ImJik7CisgICAgdm9pZCB3cml0ZVJlYWR5KCk7CisKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25u
ZWN0aW9uPiBtX3NvY2tldENvbm5lY3Rpb247CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1f
aW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHUG9sbGFibGVPdXRwdXRTdHJlYW0+IG1fb3V0cHV0
U3RyZWFtOworICAgIEdSZWZQdHI8R1NvdXJjZT4gbV93cml0ZVJlYWR5U291cmNlOworICAgIEdS
ZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxj
aGFyW10+IG1fcmVhZEJ1ZmZlcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oCShyZXZpc2lvbiAyMDQ0NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxl
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZS5oIgogCiAjaWYgVVNFKFNPVVApCiAKQEAgLTQ1LDE1ICs0NSwxNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTb2NrZXRTdHJlYW1FcnJvcjsKIGNsYXNzIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudDsKIAotY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlIGZpbmFsIDogcHVi
bGljIFJlZkNvdW50ZWQ8U29ja2V0U3RyZWFtSGFuZGxlPiwgcHVibGljIFNvY2tldFN0cmVhbUhh
bmRsZUJhc2UgeworY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCBmaW5hbCA6IHB1YmxpYyBT
b2NrZXRTdHJlYW1IYW5kbGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U29ja2V0U3RyZWFt
SGFuZGxlPiBjcmVhdGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiwgU2Vz
c2lvbklEKTsKICAgICBzdGF0aWMgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gY3JlYXRlKEdTb2Nr
ZXRDb25uZWN0aW9uKiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKLSAgICB2aXJ0dWFs
IH5Tb2NrZXRTdHJlYW1IYW5kbGUoKTsKKyAgICB2aXJ0dWFsIH5Tb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsKCk7CiAKIHByaXZhdGU6Ci0gICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYpOworICAgIFNvY2tldFN0cmVhbUhhbmRsZUltcGwoY29u
c3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50Jik7CiAKICAgICBpbnQgcGxhdGZvcm1T
ZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGxh
dGZvcm1DbG9zZSgpIG92ZXJyaWRlOwpAQCAtNjEsOSArNjEsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKICAgICB2b2lkIHN0b3BXYWl0
aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENh
bGxiYWNrKEdTb2NrZXRDbGllbnQqLCBHQXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUq
KTsKLSAgICBzdGF0aWMgdm9pZCByZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qLCBHQXN5
bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGUqKTsKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gd3Jp
dGVSZWFkeUNhbGxiYWNrKEdQb2xsYWJsZU91dHB1dFN0cmVhbSosIFNvY2tldFN0cmVhbUhhbmRs
ZSopOworICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RlZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqLCBH
QXN5bmNSZXN1bHQqLCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKik7CisgICAgc3RhdGljIHZvaWQg
cmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiwgR0FzeW5jUmVzdWx0KiwgU29ja2V0U3Ry
ZWFtSGFuZGxlSW1wbCopOworICAgIHN0YXRpYyBnYm9vbGVhbiB3cml0ZVJlYWR5Q2FsbGJhY2so
R1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwgU29ja2V0U3RyZWFtSGFuZGxlSW1wbCopOwogCiAgICAg
dm9pZCBjb25uZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJik7CiAgICAgdm9pZCBy
ZWFkQnl0ZXMoZ3NzaXplKTsKQEAgLTc4LDYgKzc4LDYgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Y2hhcltdPiBtX3JlYWRCdWZmZXI7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkocmV2aXNpb24gMjA0NDY2KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHA6
MjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0U3Ry
ZWFtSGFuZGxlLmgiCisKKyNpZiBVU0UoU09VUCkKKworI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgorI2luY2x1ZGUg
IlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNkZWZpbmUg
UkVBRF9CVUZGRVJfU0laRSAxMDI0CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPFNvY2tl
dFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCit7CisgICAgUmVm
PFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1I
YW5kbGUodXJsLCBjbGllbnQpKTsKKworICAgIHVuc2lnbmVkIHBvcnQgPSB1cmwuaGFzUG9ydCgp
ID8gdXJsLnBvcnQoKSA6ICh1cmwucHJvdG9jb2xJcygid3NzIikgPyA0NDMgOiA4MCk7CisgICAg
R1JlZlB0cjxHU29ja2V0Q2xpZW50PiBzb2NrZXRDbGllbnQgPSBhZG9wdEdSZWYoZ19zb2NrZXRf
Y2xpZW50X25ldygpKTsKKyAgICBpZiAodXJsLnByb3RvY29sSXMoIndzcyIpKQorICAgICAgICBn
X3NvY2tldF9jbGllbnRfc2V0X3Rscyhzb2NrZXRDbGllbnQuZ2V0KCksIFRSVUUpOworICAgIFJl
ZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFNvY2tldFN0cmVhbUhhbmRsZSA9IHNvY2tl
dC5jb3B5UmVmKCk7CisgICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3luYyhz
b2NrZXRDbGllbnQuZ2V0KCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgcG9ydCwgc29ja2V0
LT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1Jl
YWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVhbUhh
bmRsZS5sZWFrUmVmKCkpOworICAgIHJldHVybiBzb2NrZXQ7Cit9CisKK1JlZjxTb2NrZXRTdHJl
YW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKEdTb2NrZXRDb25uZWN0aW9uKiBz
b2NrZXRDb25uZWN0aW9uLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKK3sKKyAg
ICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3IFNvY2tldFN0
cmVhbUhhbmRsZShVUkwoKSwgY2xpZW50KSk7CisKKyAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0
aW9uPiBjb25uZWN0aW9uID0gc29ja2V0Q29ubmVjdGlvbjsKKyAgICBzb2NrZXQtPmNvbm5lY3Rl
ZChXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKKyAgICByZXR1cm4gc29ja2V0OworfQorCitTb2NrZXRT
dHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVy
bCwgY2xpZW50KQorICAgICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9u
ZXcoKSkpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgbmV3IGNs
aWVudCAlcCIsIHRoaXMsICZtX2NsaWVudCk7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZTo6flNv
Y2tldFN0cmVhbUhhbmRsZSgpCit7CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5k
bGUgJXAgZGVsZXRlIiwgdGhpcyk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjb25u
ZWN0ZWQoR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4mJiBzb2NrZXRDb25uZWN0aW9uKQorewor
ICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IFdURk1vdmUoc29ja2V0Q29ubmVjdGlvbik7CisgICAg
bV9vdXRwdXRTdHJlYW0gPSBHX1BPTExBQkxFX09VVFBVVF9TVFJFQU0oZ19pb19zdHJlYW1fZ2V0
X291dHB1dF9zdHJlYW0oR19JT19TVFJFQU0obV9zb2NrZXRDb25uZWN0aW9uLmdldCgpKSkpOwor
ICAgIG1faW5wdXRTdHJlYW0gPSBnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RS
RUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpOworICAgIG1fcmVhZEJ1ZmZlciA9IHN0ZDo6
bWFrZV91bmlxdWU8Y2hhcltdPihSRUFEX0JVRkZFUl9TSVpFKTsKKworICAgIFJlZlB0cjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXModGhpcyk7CisgICAgZ19pbnB1dF9zdHJlYW1f
cmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBtX3JlYWRCdWZmZXIuZ2V0KCksIFJFQURf
QlVGRkVSX1NJWkUsIEdfUFJJT1JJVFlfREVGQVVMVCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkUmVhZHlDYWxs
YmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKworICAgIG1fc3RhdGUgPSBPcGVuOwor
ICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJlYW0oKnRoaXMpOworfQorCit2b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2FsbGJhY2soR1NvY2tldENsaWVudCogY2xpZW50LCBH
QXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAg
UmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRs
ZSk7CisKKyAgICAvLyBBbHdheXMgZmluaXNoIHRoZSBjb25uZWN0aW9uLCBldmVuIGlmIHRoaXMg
U29ja2V0U3RyZWFtSGFuZGxlIHdhcyBjYW5jZWxsZWQgZWFybGllci4KKyAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlvbj4gc29ja2V0
Q29ubmVjdGlvbiA9IGFkb3B0R1JlZihnX3NvY2tldF9jbGllbnRfY29ubmVjdF90b19ob3N0X2Zp
bmlzaChjbGllbnQsIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisKKyAgICAvLyBUaGUgU29j
a2V0U3RyZWFtSGFuZGxlIGhhcyBiZWVuIGNhbmNlbGxlZCwgc28ganVzdCBjbG9zZSB0aGUgY29u
bmVjdGlvbiwgaWdub3JpbmcgZXJyb3JzLgorICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNl
bGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUuZ2V0KCkpKSB7CisgICAgICAgIGlmIChzb2NrZXRD
b25uZWN0aW9uKQorICAgICAgICAgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oc29j
a2V0Q29ubmVjdGlvbi5nZXQoKSksIG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGVycm9yKQorICAgICAgICBoYW5kbGUtPmRpZEZhaWwoU29ja2V0
U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7CisgICAgZWxzZQorICAg
ICAgICBoYW5kbGUtPmNvbm5lY3RlZChXVEZNb3ZlKHNvY2tldENvbm5lY3Rpb24pKTsKK30KKwor
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnJlYWRCeXRlcyhnc3NpemUgYnl0ZXNSZWFkKQorewor
ICAgIGlmICghYnl0ZXNSZWFkKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUaGUgY2xpZW50IGNhbiBjbG9zZSB0aGUgaGFuZGxlLCBwb3RlbnRp
YWxseSByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UuCisgICAgUmVmUHRyPFNvY2tldFN0cmVh
bUhhbmRsZT4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBtX2NsaWVudC5kaWRSZWNlaXZlU29j
a2V0U3RyZWFtRGF0YSgqdGhpcywgbV9yZWFkQnVmZmVyLmdldCgpLCBieXRlc1JlYWQpOworICAg
IGlmIChtX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMo
bV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JVRkZFUl9TSVpF
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCisgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHJlYWRSZWFkeUNhbGxiYWNrKSwg
cHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOworICAgIH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1
bHQqIHJlc3VsdCwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCit7CisgICAgUmVmUHRyPFNv
Y2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKGhhbmRsZSk7CisKKyAg
ICAvLyBBbHdheXMgZmluaXNoIHRoZSByZWFkLCBldmVuIGlmIHRoaXMgU29ja2V0U3RyZWFtSGFu
ZGxlIHdhcyBjYW5jZWxsZWQgZWFybGllci4KKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKHN0
cmVhbSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgaWYgKGdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5jZWxsYWJsZS5nZXQoKSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChlcnJvcikKKyAgICAgICAgaGFuZGxlLT5kaWRGYWlsKFNvY2tldFN0cmVh
bUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOworICAgIGVsc2UKKyAgICAgICAg
aGFuZGxlLT5yZWFkQnl0ZXMoYnl0ZXNSZWFkKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OmRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3ImJiBlcnJvcikKK3sKKyAgICBtX2NsaWVudC5k
aWRGYWlsU29ja2V0U3RyZWFtKCp0aGlzLCBXVEZNb3ZlKGVycm9yKSk7Cit9CisKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5KCkKK3sKKyAgICAvLyBXZSBubyBsb25nZXIgaGF2
ZSBidWZmZXJlZCBkYXRhLCBzbyBzdG9wIHdhaXRpbmcgZm9yIHRoZSBzb2NrZXQgdG8gYmUgd3Jp
dGFibGUuCisgICAgaWYgKCFidWZmZXJlZEFtb3VudCgpKSB7CisgICAgICAgIHN0b3BXYWl0aW5n
Rm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNl
bmRQZW5kaW5nRGF0YSgpOworfQorCitpbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNl
bmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNv
Y2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybVNlbmQiLCB0aGlzKTsKKyAgICBpZiAoIW1fb3V0
cHV0U3RyZWFtIHx8ICFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICBnc3NpemUgd3JpdHRlbiA9IGdfcG9sbGFibGVfb3V0cHV0
X3N0cmVhbV93cml0ZV9ub25ibG9ja2luZyhtX291dHB1dFN0cmVhbS5nZXQoKSwgZGF0YSwgbGVu
Z3RoLCBtX2NhbmNlbGxhYmxlLmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9S
LCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKSkKKyAgICAgICAgICAgIGJlZ2luV2FpdGluZ0ZvclNv
Y2tldFdyaXRhYmlsaXR5KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpZEZhaWwoU29j
a2V0U3RyZWFtRXJyb3IoZXJyb3ItPmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIC8vIElmIHdlIGRpZCBub3Qgc2VuZCBhbGwgdGhlIGJ5dGVz
IHdlIHdlcmUgZ2l2ZW4sIHdlIGtub3cgdGhhdAorICAgIC8vIFNvY2tldFN0cmVhbUhhbmRsZUJh
c2Ugd2lsbCBuZWVkIHRvIHNlbmQgbW9yZSBpbiB0aGUgZnV0dXJlLgorICAgIGlmICh3cml0dGVu
IDwgbGVuZ3RoKQorICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOwor
CisgICAgcmV0dXJuIHdyaXR0ZW47Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0
Zm9ybUNsb3NlKCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBw
bGF0Zm9ybUNsb3NlIiwgdGhpcyk7CisgICAgLy8gV2UgY2FuY2VsIHRoaXMgaGFuZGxlIGZpcnN0
IHRvIGRpc2FibGUgYWxsIGNhbGxiYWNrcy4KKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2Nh
bmNlbGxhYmxlLmdldCgpKTsKKyAgICBzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7
CisKKyAgICBpZiAobV9zb2NrZXRDb25uZWN0aW9uKSB7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8
R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0obV9z
b2NrZXRDb25uZWN0aW9uLmdldCgpKSwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKTsKKyAgICAg
ICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZGlkRmFpbChTb2NrZXRTdHJlYW1FcnJvcihlcnJv
ci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgbV9zb2NrZXRDb25uZWN0aW9uID0g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBtX291dHB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9p
bnB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9yZWFkQnVmZmVyID0gbnVsbHB0cjsKKworICAg
IG1fY2xpZW50LmRpZENsb3NlU29ja2V0U3RyZWFtKCp0aGlzKTsKK30KKwordm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OmJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3sKKyAgICBp
ZiAobV93cml0ZVJlYWR5U291cmNlKSAvLyBBbHJlYWR5IHdhaXRpbmcuCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fd3JpdGVSZWFkeVNvdXJjZSA9IGFkb3B0R1JlZihnX3BvbGxhYmxlX291dHB1
dF9zdHJlYW1fY3JlYXRlX3NvdXJjZShtX291dHB1dFN0cmVhbS5nZXQoKSwgbV9jYW5jZWxsYWJs
ZS5nZXQoKSkpOworICAgIHJlZigpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3dyaXRl
UmVhZHlTb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHdyaXRlUmVh
ZHlDYWxsYmFjayksIHRoaXMsCisgICAgICAgIFtdKGdwb2ludGVyIGhhbmRsZSkgeyBzdGF0aWNf
Y2FzdDxTb2NrZXRTdHJlYW1IYW5kbGUqPihoYW5kbGUpLT5kZXJlZigpOyB9KTsKKyAgICBnX3Nv
dXJjZV9hdHRhY2gobV93cml0ZVJlYWR5U291cmNlLmdldCgpLCBnX21haW5fY29udGV4dF9nZXRf
dGhyZWFkX2RlZmF1bHQoKSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpzdG9wV2Fp
dGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKK3sKKyAgICBpZiAoIW1fd3JpdGVSZWFkeVNvdXJj
ZSkgLy8gTm90IHdhaXRpbmcuCisgICAgICAgIHJldHVybjsKKworICAgIGdfc291cmNlX2Rlc3Ry
b3kobV93cml0ZVJlYWR5U291cmNlLmdldCgpKTsKKyAgICBtX3dyaXRlUmVhZHlTb3VyY2UgPSBu
dWxscHRyOworfQorCitnYm9vbGVhbiBTb2NrZXRTdHJlYW1IYW5kbGU6OndyaXRlUmVhZHlDYWxs
YmFjayhHUG9sbGFibGVPdXRwdXRTdHJlYW0qLCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkK
K3sKKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoaGFuZGxlLT5tX2NhbmNlbGxh
YmxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEdfU09VUkNFX1JFTU9WRTsKKworICAgIGhhbmRs
ZS0+d3JpdGVSZWFkeSgpOworICAgIHJldHVybiBHX1NPVVJDRV9DT05USU5VRTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsU291cC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhh
bmRsZUltcGxTb3VwLmNwcAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZUltcGxTb3VwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTQgKzMwLDE0IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZS5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZUltcGwuaCIKIAogI2lmIFVTRShTT1VQKQogCi0jaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCiAjaW5jbHVkZSAi
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8
Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC00OCw5ICs0OCw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPFNvY2tldFN0cmVh
bUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZGxlOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNvY2tl
dFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCitSZWY8U29ja2V0U3RyZWFt
SGFuZGxlPiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGUoY29uc3QgVVJMJiB1cmwsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNzaW9uSUQpCiB7Ci0gICAgUmVmPFNv
Y2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5k
bGUodXJsLCBjbGllbnQpKTsKKyAgICBSZWY8U29ja2V0U3RyZWFtSGFuZGxlSW1wbD4gc29ja2V0
ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKHVybCwgY2xpZW50KSk7CiAK
ICAgICB1bnNpZ25lZCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/IHVybC5wb3J0KCkgOiAodXJsLnBy
b3RvY29sSXMoIndzcyIpID8gNDQzIDogODApOwogICAgIEdSZWZQdHI8R1NvY2tldENsaWVudD4g
c29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2NsaWVudF9uZXcoKSk7CkBAIC01OSwz
OCArNTksMzggQEAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFuZAogICAg
IFJlZjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFNvY2tldFN0cmVhbUhhbmRsZSA9IHNv
Y2tldC5jb3B5UmVmKCk7CiAgICAgZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9hc3lu
Yyhzb2NrZXRDbGllbnQuZ2V0KCksIHVybC5ob3N0KCkudXRmOCgpLmRhdGEoKSwgcG9ydCwgc29j
a2V0LT5tX2NhbmNlbGxhYmxlLmdldCgpLAogICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3lu
Y1JlYWR5Q2FsbGJhY2s+KGNvbm5lY3RlZENhbGxiYWNrKSwgJnByb3RlY3RlZFNvY2tldFN0cmVh
bUhhbmRsZS5sZWFrUmVmKCkpOwotICAgIHJldHVybiBzb2NrZXQ7CisgICAgcmV0dXJuIFdURk1v
dmUoc29ja2V0KTsKIH0KIAotUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0U3RyZWFtSGFu
ZGxlOjpjcmVhdGUoR1NvY2tldENvbm5lY3Rpb24qIHNvY2tldENvbm5lY3Rpb24sIFNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50KQorUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gU29ja2V0
U3RyZWFtSGFuZGxlSW1wbDo6Y3JlYXRlKEdTb2NrZXRDb25uZWN0aW9uKiBzb2NrZXRDb25uZWN0
aW9uLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKIHsKLSAgICBSZWY8U29ja2V0
U3RyZWFtSGFuZGxlPiBzb2NrZXQgPSBhZG9wdFJlZigqbmV3IFNvY2tldFN0cmVhbUhhbmRsZShV
UkwoKSwgY2xpZW50KSk7CisgICAgUmVmPFNvY2tldFN0cmVhbUhhbmRsZUltcGw+IHNvY2tldCA9
IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFuZGxlSW1wbChVUkwoKSwgY2xpZW50KSk7CiAK
ICAgICBHUmVmUHRyPEdTb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gc29ja2V0Q29ubmVj
dGlvbjsKICAgICBzb2NrZXQtPmNvbm5lY3RlZChXVEZNb3ZlKGNvbm5lY3Rpb24pKTsKLSAgICBy
ZXR1cm4gc29ja2V0OworICAgIHJldHVybiBXVEZNb3ZlKHNvY2tldCk7CiB9CiAKLVNvY2tldFN0
cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJl
YW1IYW5kbGVDbGllbnQmIGNsaWVudCkKLSAgICA6IFNvY2tldFN0cmVhbUhhbmRsZUJhc2UodXJs
LCBjbGllbnQpCitTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
KGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICA6
IFNvY2tldFN0cmVhbUhhbmRsZSh1cmwsIGNsaWVudCkKICAgICAsIG1fY2FuY2VsbGFibGUoYWRv
cHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0
U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAiLCB0aGlzLCAmbV9jbGllbnQpOwogfQogCi1T
b2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQorU29ja2V0U3RyZWFtSGFu
ZGxlSW1wbDo6flNvY2tldFN0cmVhbUhhbmRsZUltcGwoKQogewogICAgIExPRyhOZXR3b3JrLCAi
U29ja2V0U3RyZWFtSGFuZGxlICVwIGRlbGV0ZSIsIHRoaXMpOwogfQogCi12b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6Y29ubmVjdGVkKEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+JiYgc29ja2V0
Q29ubmVjdGlvbikKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6Y29ubmVjdGVkKEdSZWZQ
dHI8R1NvY2tldENvbm5lY3Rpb24+JiYgc29ja2V0Q29ubmVjdGlvbikKIHsKICAgICBtX3NvY2tl
dENvbm5lY3Rpb24gPSBXVEZNb3ZlKHNvY2tldENvbm5lY3Rpb24pOwogICAgIG1fb3V0cHV0U3Ry
ZWFtID0gR19QT0xMQUJMRV9PVVRQVVRfU1RSRUFNKGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3Ry
ZWFtKEdfSU9fU1RSRUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpKTsKICAgICBtX2lucHV0
U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShtX3NvY2tl
dENvbm5lY3Rpb24uZ2V0KCkpKTsKICAgICBtX3JlYWRCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PGNoYXJbXT4oUkVBRF9CVUZGRVJfU0laRSk7CiAKLSAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFu
ZGxlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGVJ
bXBsPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMo
bV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JVRkZFUl9TSVpF
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCiAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZFJlYWR5Q2FsbGJhY2spLCBwcm90
ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGU6OmNvbm5lY3RlZChHUmVmUAogICAgIG1fY2xpZW50LmRpZE9wZW5Tb2NrZXRTdHJl
YW0oKnRoaXMpOwogfQogCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVjdGVkQ2FsbGJh
Y2soR1NvY2tldENsaWVudCogY2xpZW50LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgU29ja2V0U3Ry
ZWFtSGFuZGxlKiBoYW5kbGUpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmNvbm5lY3Rl
ZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqIGNsaWVudCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFNv
Y2tldFN0cmVhbUhhbmRsZUltcGwqIGhhbmRsZSkKIHsKICAgICBSZWZQdHI8U29ja2V0U3RyZWFt
SGFuZGxlPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYoaGFuZGxlKTsKIApAQCAtMTE5LDcgKzEx
OSw3IEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpjb25uZWN0ZWRDYWxsYmEKICAgICAgICAg
aGFuZGxlLT5jb25uZWN0ZWQoV1RGTW92ZShzb2NrZXRDb25uZWN0aW9uKSk7CiB9CiAKLXZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkQnl0ZXMoZ3NzaXplIGJ5dGVzUmVhZCkKK3ZvaWQgU29j
a2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZEJ5dGVzKGdzc2l6ZSBieXRlc1JlYWQpCiB7CiAgICAg
aWYgKCFieXRlc1JlYWQpIHsKICAgICAgICAgY2xvc2UoKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCB2
b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZEJ5dGVzKGdzc2l6CiAgICAgfQogfQogCi12b2lk
IFNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJl
YW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKK3Zv
aWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6cmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFt
KiBzdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsKiBo
YW5kbGUpCiB7CiAgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdGVkVGhpcyA9
IGFkb3B0UmVmKGhhbmRsZSk7CiAKQEAgLTE1MiwxMiArMTUyLDEyIEBAIHZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpyZWFkUmVhZHlDYWxsYmEKICAgICAgICAgaGFuZGxlLT5yZWFkQnl0ZXMoYnl0
ZXNSZWFkKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZEZhaWwoU29ja2V0U3Ry
ZWFtRXJyb3ImJiBlcnJvcikKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlSW1wbDo6ZGlkRmFpbChT
b2NrZXRTdHJlYW1FcnJvciYmIGVycm9yKQogewogICAgIG1fY2xpZW50LmRpZEZhaWxTb2NrZXRT
dHJlYW0oKnRoaXMsIFdURk1vdmUoZXJyb3IpKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5k
bGU6OndyaXRlUmVhZHkoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjp3cml0ZVJlYWR5
KCkKIHsKICAgICAvLyBXZSBubyBsb25nZXIgaGF2ZSBidWZmZXJlZCBkYXRhLCBzbyBzdG9wIHdh
aXRpbmcgZm9yIHRoZSBzb2NrZXQgdG8gYmUgd3JpdGFibGUuCiAgICAgaWYgKCFidWZmZXJlZEFt
b3VudCgpKSB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6Ondy
aXRlUmVhZHkoKQogICAgIHNlbmRQZW5kaW5nRGF0YSgpOwogfQogCi1pbnQgU29ja2V0U3RyZWFt
SGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK2ludCBT
b2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50
IGxlbmd0aCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0
Zm9ybVNlbmQiLCB0aGlzKTsKICAgICBpZiAoIW1fb3V0cHV0U3RyZWFtIHx8ICFkYXRhKQpAQCAt
MTg1LDE0ICsxODUsMTQgQEAgaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5kKGNv
bgogICAgIH0KIAogICAgIC8vIElmIHdlIGRpZCBub3Qgc2VuZCBhbGwgdGhlIGJ5dGVzIHdlIHdl
cmUgZ2l2ZW4sIHdlIGtub3cgdGhhdAotICAgIC8vIFNvY2tldFN0cmVhbUhhbmRsZUJhc2Ugd2ls
bCBuZWVkIHRvIHNlbmQgbW9yZSBpbiB0aGUgZnV0dXJlLgorICAgIC8vIFNvY2tldFN0cmVhbUhh
bmRsZSB3aWxsIG5lZWQgdG8gc2VuZCBtb3JlIGluIHRoZSBmdXR1cmUuCiAgICAgaWYgKHdyaXR0
ZW4gPCBsZW5ndGgpCiAgICAgICAgIGJlZ2luV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCk7
CiAKICAgICByZXR1cm4gd3JpdHRlbjsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBs
YXRmb3JtQ2xvc2UoKQordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpwbGF0Zm9ybUNsb3Nl
KCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybUNs
b3NlIiwgdGhpcyk7CiAgICAgLy8gV2UgY2FuY2VsIHRoaXMgaGFuZGxlIGZpcnN0IHRvIGRpc2Fi
bGUgYWxsIGNhbGxiYWNrcy4KQEAgLTIxNCwxOSArMjE0LDIwIEBAIHZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlOjpwbGF0Zm9ybUNsb3NlKCkKICAgICBtX2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVh
bSgqdGhpcyk7CiB9CiAKLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdGb3JT
b2NrZXRXcml0YWJpbGl0eSgpCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZUltcGw6OmJlZ2luV2Fp
dGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKIHsKICAgICBpZiAobV93cml0ZVJlYWR5U291cmNl
KSAvLyBBbHJlYWR5IHdhaXRpbmcuCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fd3JpdGVSZWFk
eVNvdXJjZSA9IGFkb3B0R1JlZihnX3BvbGxhYmxlX291dHB1dF9zdHJlYW1fY3JlYXRlX3NvdXJj
ZShtX291dHB1dFN0cmVhbS5nZXQoKSwgbV9jYW5jZWxsYWJsZS5nZXQoKSkpOwogICAgIHJlZigp
OwotICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHdyaXRlUmVhZHlDYWxsYmFjayksIHRoaXMsCi0g
ICAgICAgIFtdKGdwb2ludGVyIGhhbmRsZSkgeyBzdGF0aWNfY2FzdDxTb2NrZXRTdHJlYW1IYW5k
bGUqPihoYW5kbGUpLT5kZXJlZigpOyB9KTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV93
cml0ZVJlYWR5U291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3cml0
ZVJlYWR5Q2FsbGJhY2spLCB0aGlzLCBbXShncG9pbnRlciBoYW5kbGUpIHsgCisgICAgICAgIHN0
YXRpY19jYXN0PFNvY2tldFN0cmVhbUhhbmRsZUltcGwqPihoYW5kbGUpLT5kZXJlZigpOworICAg
IH0pOwogICAgIGdfc291cmNlX2F0dGFjaChtX3dyaXRlUmVhZHlTb3VyY2UuZ2V0KCksIGdfbWFp
bl9jb250ZXh0X2dldF90aHJlYWRfZGVmYXVsdCgpKTsKIH0KIAotdm9pZCBTb2NrZXRTdHJlYW1I
YW5kbGU6OnN0b3BXYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKQordm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVJbXBsOjpzdG9wV2FpdGluZ0ZvclNvY2tldFdyaXRhYmlsaXR5KCkKIHsKICAgICBp
ZiAoIW1fd3JpdGVSZWFkeVNvdXJjZSkgLy8gTm90IHdhaXRpbmcuCiAgICAgICAgIHJldHVybjsK
QEAgLTIzNSw3ICsyMzYsNyBAQCB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFdhaXRpbmdG
b3JTCiAgICAgbV93cml0ZVJlYWR5U291cmNlID0gbnVsbHB0cjsKIH0KIAotZ2Jvb2xlYW4gU29j
a2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJhY2soR1BvbGxhYmxlT3V0cHV0U3RyZWFt
KiwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCitnYm9vbGVhbiBTb2NrZXRTdHJlYW1IYW5k
bGVJbXBsOjp3cml0ZVJlYWR5Q2FsbGJhY2soR1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwgU29ja2V0
U3RyZWFtSGFuZGxlSW1wbCogaGFuZGxlKQogewogICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2Nh
bmNlbGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gR19T
T1VSQ0VfUkVNT1ZFOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcAkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUhhbmRsZVNvdXAuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjQ5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNvY2tldFN0cmVh
bUhhbmRsZS5oIgotCi0jaWYgVVNFKFNPVVApCi0KLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU29ja2V0U3RyZWFtRXJyb3IuaCIKLSNpbmNsdWRlICJT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaCIKLSNpbmNsdWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVk
ZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9H
VW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi0jZGVmaW5lIFJF
QURfQlVGRkVSX1NJWkUgMTAyNAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxTb2NrZXRT
dHJlYW1IYW5kbGU+IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBT
b2NrZXRTdHJlYW1IYW5kbGVDbGllbnQmIGNsaWVudCwgU2Vzc2lvbklEKQotewotICAgIFJlZjxT
b2NrZXRTdHJlYW1IYW5kbGU+IHNvY2tldCA9IGFkb3B0UmVmKCpuZXcgU29ja2V0U3RyZWFtSGFu
ZGxlKHVybCwgY2xpZW50KSk7Ci0KLSAgICB1bnNpZ25lZCBwb3J0ID0gdXJsLmhhc1BvcnQoKSA/
IHVybC5wb3J0KCkgOiAodXJsLnByb3RvY29sSXMoIndzcyIpID8gNDQzIDogODApOwotICAgIEdS
ZWZQdHI8R1NvY2tldENsaWVudD4gc29ja2V0Q2xpZW50ID0gYWRvcHRHUmVmKGdfc29ja2V0X2Ns
aWVudF9uZXcoKSk7Ci0gICAgaWYgKHVybC5wcm90b2NvbElzKCJ3c3MiKSkKLSAgICAgICAgZ19z
b2NrZXRfY2xpZW50X3NldF90bHMoc29ja2V0Q2xpZW50LmdldCgpLCBUUlVFKTsKLSAgICBSZWY8
U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRTb2NrZXRTdHJlYW1IYW5kbGUgPSBzb2NrZXQu
Y29weVJlZigpOwotICAgIGdfc29ja2V0X2NsaWVudF9jb25uZWN0X3RvX2hvc3RfYXN5bmMoc29j
a2V0Q2xpZW50LmdldCgpLCB1cmwuaG9zdCgpLnV0ZjgoKS5kYXRhKCksIHBvcnQsIHNvY2tldC0+
bV9jYW5jZWxsYWJsZS5nZXQoKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFk
eUNhbGxiYWNrPihjb25uZWN0ZWRDYWxsYmFjayksICZwcm90ZWN0ZWRTb2NrZXRTdHJlYW1IYW5k
bGUubGVha1JlZigpKTsKLSAgICByZXR1cm4gc29ja2V0OwotfQotCi1SZWY8U29ja2V0U3RyZWFt
SGFuZGxlPiBTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZShHU29ja2V0Q29ubmVjdGlvbiogc29j
a2V0Q29ubmVjdGlvbiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50JiBjbGllbnQpCi17Ci0gICAg
UmVmPFNvY2tldFN0cmVhbUhhbmRsZT4gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBTb2NrZXRTdHJl
YW1IYW5kbGUoVVJMKCksIGNsaWVudCkpOwotCi0gICAgR1JlZlB0cjxHU29ja2V0Q29ubmVjdGlv
bj4gY29ubmVjdGlvbiA9IHNvY2tldENvbm5lY3Rpb247Ci0gICAgc29ja2V0LT5jb25uZWN0ZWQo
V1RGTW92ZShjb25uZWN0aW9uKSk7Ci0gICAgcmV0dXJuIHNvY2tldDsKLX0KLQotU29ja2V0U3Ry
ZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVh
bUhhbmRsZUNsaWVudCYgY2xpZW50KQotICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmws
IGNsaWVudCkKLSAgICAsIG1fY2FuY2VsbGFibGUoYWRvcHRHUmVmKGdfY2FuY2VsbGFibGVfbmV3
KCkpKQotewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGll
bnQgJXAiLCB0aGlzLCAmbV9jbGllbnQpOwotfQotCi1Tb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2Nr
ZXRTdHJlYW1IYW5kbGUoKQotewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxl
ICVwIGRlbGV0ZSIsIHRoaXMpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6Y29ubmVj
dGVkKEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+JiYgc29ja2V0Q29ubmVjdGlvbikKLXsKLSAg
ICBtX3NvY2tldENvbm5lY3Rpb24gPSBXVEZNb3ZlKHNvY2tldENvbm5lY3Rpb24pOwotICAgIG1f
b3V0cHV0U3RyZWFtID0gR19QT0xMQUJMRV9PVVRQVVRfU1RSRUFNKGdfaW9fc3RyZWFtX2dldF9v
dXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKG1fc29ja2V0Q29ubmVjdGlvbi5nZXQoKSkpKTsKLSAg
ICBtX2lucHV0U3RyZWFtID0gZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVB
TShtX3NvY2tldENvbm5lY3Rpb24uZ2V0KCkpKTsKLSAgICBtX3JlYWRCdWZmZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPGNoYXJbXT4oUkVBRF9CVUZGRVJfU0laRSk7Ci0KLSAgICBSZWZQdHI8U29ja2V0
U3RyZWFtSGFuZGxlPiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwotICAgIGdfaW5wdXRfc3RyZWFtX3Jl
YWRfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgbV9yZWFkQnVmZmVyLmdldCgpLCBSRUFEX0JV
RkZFUl9TSVpFLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG1fY2FuY2VsbGFibGUuZ2V0KCksCi0gICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ocmVhZFJlYWR5Q2FsbGJh
Y2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Ci0KLSAgICBtX3N0YXRlID0gT3BlbjsKLSAg
ICBtX2NsaWVudC5kaWRPcGVuU29ja2V0U3RyZWFtKCp0aGlzKTsKLX0KLQotdm9pZCBTb2NrZXRT
dHJlYW1IYW5kbGU6OmNvbm5lY3RlZENhbGxiYWNrKEdTb2NrZXRDbGllbnQqIGNsaWVudCwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQotewotICAgIFJl
ZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZihoYW5kbGUp
OwotCi0gICAgLy8gQWx3YXlzIGZpbmlzaCB0aGUgY29ubmVjdGlvbiwgZXZlbiBpZiB0aGlzIFNv
Y2tldFN0cmVhbUhhbmRsZSB3YXMgY2FuY2VsbGVkIGVhcmxpZXIuCi0gICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycm9yOwotICAgIEdSZWZQdHI8R1NvY2tldENvbm5lY3Rpb24+IHNvY2tldENv
bm5lY3Rpb24gPSBhZG9wdEdSZWYoZ19zb2NrZXRfY2xpZW50X2Nvbm5lY3RfdG9faG9zdF9maW5p
c2goY2xpZW50LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwotCi0gICAgLy8gVGhlIFNvY2tl
dFN0cmVhbUhhbmRsZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHNvIGp1c3QgY2xvc2UgdGhlIGNvbm5l
Y3Rpb24sIGlnbm9yaW5nIGVycm9ycy4KLSAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQoaGFuZGxlLT5tX2NhbmNlbGxhYmxlLmdldCgpKSkgewotICAgICAgICBpZiAoc29ja2V0Q29u
bmVjdGlvbikKLSAgICAgICAgICAgIGdfaW9fc3RyZWFtX2Nsb3NlKEdfSU9fU1RSRUFNKHNvY2tl
dENvbm5lY3Rpb24uZ2V0KCkpLCBudWxscHRyLCBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChlcnJvcikKLSAgICAgICAgaGFuZGxlLT5kaWRGYWlsKFNvY2tldFN0
cmVhbUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOwotICAgIGVsc2UKLSAgICAg
ICAgaGFuZGxlLT5jb25uZWN0ZWQoV1RGTW92ZShzb2NrZXRDb25uZWN0aW9uKSk7Ci19Ci0KLXZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkQnl0ZXMoZ3NzaXplIGJ5dGVzUmVhZCkKLXsKLSAg
ICBpZiAoIWJ5dGVzUmVhZCkgewotICAgICAgICBjbG9zZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gVGhlIGNsaWVudCBjYW4gY2xvc2UgdGhlIGhhbmRsZSwgcG90ZW50aWFs
bHkgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlLgotICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1I
YW5kbGU+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgbV9jbGllbnQuZGlkUmVjZWl2ZVNvY2tl
dFN0cmVhbURhdGEoKnRoaXMsIG1fcmVhZEJ1ZmZlci5nZXQoKSwgYnl0ZXNSZWFkKTsKLSAgICBp
ZiAobV9pbnB1dFN0cmVhbSkgewotICAgICAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKG1f
aW5wdXRTdHJlYW0uZ2V0KCksIG1fcmVhZEJ1ZmZlci5nZXQoKSwgUkVBRF9CVUZGRVJfU0laRSwg
R19QUklPUklUWV9ERUZBVUxULCBtX2NhbmNlbGxhYmxlLmdldCgpLAotICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihyZWFkUmVhZHlDYWxsYmFjayksIHBy
b3RlY3RlZFRoaXMubGVha1JlZigpKTsKLSAgICB9Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjpyZWFkUmVhZHlDYWxsYmFjayhHSW5wdXRTdHJlYW0qIHN0cmVhbSwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQotewotICAgIFJlZlB0cjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IHByb3RlY3RlZFRoaXMgPSBhZG9wdFJlZihoYW5kbGUpOwotCi0gICAg
Ly8gQWx3YXlzIGZpbmlzaCB0aGUgcmVhZCwgZXZlbiBpZiB0aGlzIFNvY2tldFN0cmVhbUhhbmRs
ZSB3YXMgY2FuY2VsbGVkIGVhcmxpZXIuCi0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OwotICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaChzdHJl
YW0sIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKLQotICAgIGlmIChnX2NhbmNlbGxhYmxlX2lz
X2NhbmNlbGxlZChoYW5kbGUtPm1fY2FuY2VsbGFibGUuZ2V0KCkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIGhhbmRsZS0+ZGlkRmFpbChTb2NrZXRTdHJlYW1F
cnJvcihlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2UpKTsKLSAgICBlbHNlCi0gICAgICAgIGhh
bmRsZS0+cmVhZEJ5dGVzKGJ5dGVzUmVhZCk7Ci19Ci0KLXZvaWQgU29ja2V0U3RyZWFtSGFuZGxl
OjpkaWRGYWlsKFNvY2tldFN0cmVhbUVycm9yJiYgZXJyb3IpCi17Ci0gICAgbV9jbGllbnQuZGlk
RmFpbFNvY2tldFN0cmVhbSgqdGhpcywgV1RGTW92ZShlcnJvcikpOwotfQotCi12b2lkIFNvY2tl
dFN0cmVhbUhhbmRsZTo6d3JpdGVSZWFkeSgpCi17Ci0gICAgLy8gV2Ugbm8gbG9uZ2VyIGhhdmUg
YnVmZmVyZWQgZGF0YSwgc28gc3RvcCB3YWl0aW5nIGZvciB0aGUgc29ja2V0IHRvIGJlIHdyaXRh
YmxlLgotICAgIGlmICghYnVmZmVyZWRBbW91bnQoKSkgewotICAgICAgICBzdG9wV2FpdGluZ0Zv
clNvY2tldFdyaXRhYmlsaXR5KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZW5k
UGVuZGluZ0RhdGEoKTsKLX0KLQotaW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5k
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2Nr
ZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kIiwgdGhpcyk7Ci0gICAgaWYgKCFtX291dHB1
dFN0cmVhbSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBHVW5pcXVlT3V0UHRy
PEdFcnJvcj4gZXJyb3I7Ci0gICAgZ3NzaXplIHdyaXR0ZW4gPSBnX3BvbGxhYmxlX291dHB1dF9z
dHJlYW1fd3JpdGVfbm9uYmxvY2tpbmcobV9vdXRwdXRTdHJlYW0uZ2V0KCksIGRhdGEsIGxlbmd0
aCwgbV9jYW5jZWxsYWJsZS5nZXQoKSwgJmVycm9yLm91dFB0cigpKTsKLSAgICBpZiAoZXJyb3Ip
IHsKLSAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwg
R19JT19FUlJPUl9XT1VMRF9CTE9DSykpCi0gICAgICAgICAgICBiZWdpbldhaXRpbmdGb3JTb2Nr
ZXRXcml0YWJpbGl0eSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkaWRGYWlsKFNvY2tl
dFN0cmVhbUVycm9yKGVycm9yLT5jb2RlLCBlcnJvci0+bWVzc2FnZSkpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkaWQgbm90IHNlbmQgYWxsIHRoZSBieXRlcyB3
ZSB3ZXJlIGdpdmVuLCB3ZSBrbm93IHRoYXQKLSAgICAvLyBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
IHdpbGwgbmVlZCB0byBzZW5kIG1vcmUgaW4gdGhlIGZ1dHVyZS4KLSAgICBpZiAod3JpdHRlbiA8
IGxlbmd0aCkKLSAgICAgICAgYmVnaW5XYWl0aW5nRm9yU29ja2V0V3JpdGFiaWxpdHkoKTsKLQot
ICAgIHJldHVybiB3cml0dGVuOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZv
cm1DbG9zZSgpCi17Ci0gICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxh
dGZvcm1DbG9zZSIsIHRoaXMpOwotICAgIC8vIFdlIGNhbmNlbCB0aGlzIGhhbmRsZSBmaXJzdCB0
byBkaXNhYmxlIGFsbCBjYWxsYmFja3MuCi0gICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5j
ZWxsYWJsZS5nZXQoKSk7Ci0gICAgc3RvcFdhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpOwot
Ci0gICAgaWYgKG1fc29ja2V0Q29ubmVjdGlvbikgewotICAgICAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7Ci0gICAgICAgIGdfaW9fc3RyZWFtX2Nsb3NlKEdfSU9fU1RSRUFNKG1fc29j
a2V0Q29ubmVjdGlvbi5nZXQoKSksIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAg
IGlmIChlcnJvcikKLSAgICAgICAgICAgIGRpZEZhaWwoU29ja2V0U3RyZWFtRXJyb3IoZXJyb3It
PmNvZGUsIGVycm9yLT5tZXNzYWdlKSk7Ci0gICAgICAgIG1fc29ja2V0Q29ubmVjdGlvbiA9IG51
bGxwdHI7Ci0gICAgfQotCi0gICAgbV9vdXRwdXRTdHJlYW0gPSBudWxscHRyOwotICAgIG1faW5w
dXRTdHJlYW0gPSBudWxscHRyOwotICAgIG1fcmVhZEJ1ZmZlciA9IG51bGxwdHI7Ci0KLSAgICBt
X2NsaWVudC5kaWRDbG9zZVNvY2tldFN0cmVhbSgqdGhpcyk7Ci19Ci0KLXZvaWQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpiZWdpbldhaXRpbmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpCi17Ci0gICAgaWYg
KG1fd3JpdGVSZWFkeVNvdXJjZSkgLy8gQWxyZWFkeSB3YWl0aW5nLgotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3dyaXRlUmVhZHlTb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9vdXRwdXRf
c3RyZWFtX2NyZWF0ZV9zb3VyY2UobV9vdXRwdXRTdHJlYW0uZ2V0KCksIG1fY2FuY2VsbGFibGUu
Z2V0KCkpKTsKLSAgICByZWYoKTsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV93cml0ZVJl
YWR5U291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPih3cml0ZVJlYWR5
Q2FsbGJhY2spLCB0aGlzLAotICAgICAgICBbXShncG9pbnRlciBoYW5kbGUpIHsgc3RhdGljX2Nh
c3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaGFuZGxlKS0+ZGVyZWYoKTsgfSk7Ci0gICAgZ19zb3Vy
Y2VfYXR0YWNoKG1fd3JpdGVSZWFkeVNvdXJjZS5nZXQoKSwgZ19tYWluX2NvbnRleHRfZ2V0X3Ro
cmVhZF9kZWZhdWx0KCkpOwotfQotCi12b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6c3RvcFdhaXRp
bmdGb3JTb2NrZXRXcml0YWJpbGl0eSgpCi17Ci0gICAgaWYgKCFtX3dyaXRlUmVhZHlTb3VyY2Up
IC8vIE5vdCB3YWl0aW5nLgotICAgICAgICByZXR1cm47Ci0KLSAgICBnX3NvdXJjZV9kZXN0cm95
KG1fd3JpdGVSZWFkeVNvdXJjZS5nZXQoKSk7Ci0gICAgbV93cml0ZVJlYWR5U291cmNlID0gbnVs
bHB0cjsKLX0KLQotZ2Jvb2xlYW4gU29ja2V0U3RyZWFtSGFuZGxlOjp3cml0ZVJlYWR5Q2FsbGJh
Y2soR1BvbGxhYmxlT3V0cHV0U3RyZWFtKiwgU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUpCi17
Ci0gICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGhhbmRsZS0+bV9jYW5jZWxsYWJs
ZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Ci0KLSAgICBoYW5kbGUt
PndyaXRlUmVhZHkoKTsKLSAgICByZXR1cm4gR19TT1VSQ0VfQ09OVElOVUU7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MDQ0NzQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxNi0wOC0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlIHRvIFNv
Y2tldFN0cmVhbUhhbmRsZSBhbmQgU29ja2V0U3RyZWFtSGFuZGxlIHRvIFNvY2tldFN0cmVhbUhh
bmRsZUltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MDg1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViU29ja2V0UHJvdmlkZXI6OmNyZWF0ZVNvY2tldFN0cmVhbUhhbmRsZSk6CisKIDIw
MTYtMDgtMTUgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXggaU9TIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3Rv
clNlcnZlci9zb3VwL1dlYlNvY2tldFNlcnZlclNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvc291cC9XZWJTb2NrZXRTZXJ2ZXJT
b3VwLmNwcAkocmV2aXNpb24gMjA0NDY2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0lu
c3BlY3RvclNlcnZlci9zb3VwL1dlYlNvY2tldFNlcnZlclNvdXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiV2Vi
U29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFt
SGFuZGxlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Tb2NrZXRTdHJlYW1IYW5kbGVJbXBsLmg+CiAj
aW5jbHVkZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+CkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBnYm9vbGVhbiBjb25uZWN0
aW9uQ2FsbGJhY2soR1NvY2sKICNlbmRpZgogCiAgICAgYXV0byB3ZWJTb2NrZXRDb25uZWN0aW9u
ID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uPihzZXJ2ZXItPmNs
aWVudCgpLCBzZXJ2ZXIpOwotICAgIHdlYlNvY2tldENvbm5lY3Rpb24tPnNldFNvY2tldEhhbmRs
ZShTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZShjb25uZWN0aW9uLCAqd2ViU29ja2V0Q29ubmVj
dGlvbikpOworICAgIHdlYlNvY2tldENvbm5lY3Rpb24tPnNldFNvY2tldEhhbmRsZShTb2NrZXRT
dHJlYW1IYW5kbGVJbXBsOjpjcmVhdGUoY29ubmVjdGlvbiwgKndlYlNvY2tldENvbm5lY3Rpb24p
KTsKICAgICBzZXJ2ZXItPmRpZEFjY2VwdENvbm5lY3Rpb24oV1RGTW92ZSh3ZWJTb2NrZXRDb25u
ZWN0aW9uKSk7CiAKICAgICByZXR1cm4gVFJVRTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvTmV0d29yay9XZWJTb2NrZXRQcm92aWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldFByb3ZpZGVyLmNwcAkocmV2aXNp
b24gMjA0NDY2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tl
dFByb3ZpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTYgKzMzLDcgQEAKIAogI2lmIEVO
QUJMRShXRUJfU09DS0VUUykKIAotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1NvY2tldFN0cmVhbUhhbmRsZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRD
aGFubmVsLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRDaGFubmVsQ2xpZW50Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9Xb3JrZXJHbG9iYWxTY29wZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
V29ya2VyUnVuTG9vcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvV29ya2VyVGhyZWFkLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIApAQCAtNTEsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIFJlZjxTb2Nr
ZXRTdHJlYW1IYW5kbGU+IFdlYlNvY2tldFByb3ZpZGVyOjpjcmVhdGVTb2NrZXRTdHJlYW1IYW5k
bGUoY29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCYgY2xpZW50LCBTZXNz
aW9uSUQgc2Vzc2lvbklEKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1cm4gYSBw
cm94eSBzbyB3ZSBjYW4gZG8gdGhlIGFjdHVhbCBuZXR3b3JrIGludGVyYWN0aW9ucyBpbiB0aGUg
TmV0d29ya1Byb2Nlc3MuCi0gICAgcmV0dXJuIFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRlKHVy
bCwgY2xpZW50LCBzZXNzaW9uSUQpOworICAgIHJldHVybiBTb2NrZXRTdHJlYW1IYW5kbGVJbXBs
OjpjcmVhdGUodXJsLCBjbGllbnQsIHNlc3Npb25JRCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAo=
</data>
<flag name="review"
          id="309654"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>