<?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>159852</bug_id>
          
          <creation_ts>2016-07-15 22:02:28 -0700</creation_ts>
          <short_desc>Rename fastGetAttribute to attributeWithoutSynchronization</short_desc>
          <delta_ts>2016-07-16 08:22:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>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="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1211748</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-07-15 22:02:28 -0700</bug_when>
    <thetext>&quot;fast&quot; doesn&apos;t tell us anything about the difference from regular getAttribute.
Like Darin once said, who would want to call non-fast version of anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211749</commentid>
    <comment_count>1</comment_count>
      <attachid>283842</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-07-15 22:46:28 -0700</bug_when>
    <thetext>Created attachment 283842
Renamed the function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211767</commentid>
    <comment_count>2</comment_count>
      <attachid>283842</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-16 08:22:48 -0700</bug_when>
    <thetext>Comment on attachment 283842
Renamed the function

Clearing flags on attachment: 283842

Committed r203324: &lt;http://trac.webkit.org/changeset/203324&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211768</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-16 08:22:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283842</attachid>
            <date>2016-07-15 22:46:28 -0700</date>
            <delta_ts>2016-07-16 08:22:48 -0700</delta_ts>
            <desc>Renamed the function</desc>
            <filename>bug-159852-20160715224539.patch</filename>
            <type>text/plain</type>
            <size>228389</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxNyBAQAorMjAxNi0wNy0xNSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW5hbWUgZmFzdEdldEF0dHJp
YnV0ZSB0byBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NTIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWVkIGZhc3RHZXRBdHRyaWJ1dGUg
dG8gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbiBmb3IgY2xhcml0eS4KKworICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpmaW5kQXJpYU1vZGFsTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6bm9k
ZUhhc1JvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlTGl2ZVJl
Z2lvbkNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aGFuZGxlTWVu
dUl0ZW1TZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpoYW5kbGVB
cmlhTW9kYWxDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb2RlQXJpYVZpc2libGUpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2libGluZ1dpdGhBcmlhUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGVFbGVtZW50VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWx0ZXJuYXRpdmVUZXh0Rm9yV2ViQXJlYSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aGllcmFyY2hpY2Fs
TGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnN0cmlu
Z1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmFjY2Vzc2libGVOYW1lRm9yTm9kZSk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmNvbnRlbnRFZGl0YWJsZUF0dHJpYnV0ZUlzRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRBdHRyaWJ1
dGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpleHBv
c2VzVGl0bGVVSUVsZW1lbnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNWR0VsZW1l
bnQ6OmNoaWxkRWxlbWVudFdpdGhNYXRjaGluZ0xhbmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlTVkdFbGVtZW50OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24pOgorICAg
ICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01IVE1MTGlua0VsZW1l
bnQgX21lZGlhUXVlcnlNYXRjaGVzXSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yLnBtOgorICAgICAgICAoR2V0dGVyRXhwcmVzc2lvbik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbToKKyAgICAgICAgKEdlbmVyYXRlSW1w
bGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUmVmbGVjdGVkU3RyaW5n
QXR0cik6CisgICAgICAgICogZG9tL0F1dGhvclN0eWxlU2hlZXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1dGhvclN0eWxlU2hlZXRzOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YnVp
bGRBY2Nlc3NLZXlNYXApOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnByb2Nlc3NCYXNl
RWxlbWVudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmli
dXRlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjppbWFnZVNvdXJjZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50byk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50Ojpwc2V1ZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0UHNldWRv
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNwZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjYW5Db250YWluUmFuZ2VFbmRQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpjb21wbGV0ZVVSTHNJbkF0dHJpYnV0ZVZhbHVlKToK
KyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZmFz
dEhhc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZhc3RHZXRB
dHRyaWJ1dGUpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lU3R5bGVTaGVldE93bmVyOjpjcmVhdGVTaGVl
dCk6CisgICAgICAgICogZG9tL1NjcmlwdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RWxlbWVudDo6cmVxdWVzdFNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRF
bGVtZW50OjpleGVjdXRlU2NyaXB0KToKKyAgICAgICAgKiBkb20vU2xvdEFzc2lnbm1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2xvdE5hbWVGcm9tU2xvdEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTbG90QXNzaWdubWVudDo6U2xvdEFzc2lnbm1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVjdXJzaXZlbHlGaXJlU2xvdENoYW5nZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNsb3RBc3NpZ25tZW50OjpkaWRDaGFuZ2VTbG90KToKKyAgICAgICAgKFdlYkNvcmU6OlNsb3RB
c3NpZ25tZW50Ojpob3N0Q2hpbGRFbGVtZW50RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNsb3RBc3NpZ25tZW50Ojphc3NpZ25lZE5vZGVzRm9yU2xvdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTbG90QXNzaWdubWVudDo6cmVzb2x2ZUFsbFNsb3RFbGVtZW50cyk6CisgICAgICAgICogZG9t
L1RyZWVTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmxhYmVsRWxlbWVu
dEZvcklkKToKKyAgICAgICAgKiBkb20vVmlzaXRlZExpbmtTdGF0ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpsaW5rQXR0cmlidXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTGVnYWN5QXBwbGVTdHlsZVNwYW4pOgorICAg
ICAgICAoV2ViQ29yZTo6aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZSk6CisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGlu
Z1N0eWxlOjplbGVtZW50SXNTdHlsZWRTcGFuT3JIVE1MRXF1aXZhbGVudCk6CisgICAgICAgICog
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c0ludGVyY2hhbmdlTmV3bGluZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNJbnRlcmNoYW5n
ZUNvbnZlcnRlZFNwYWNlU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpwb3NpdGlvbkF2b2lkaW5n
UHJlY2VkaW5nTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6aXNNYWlsUGFzdGVBc1F1b3RhdGlv
bk5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNIZWFkZXJFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmlzSW5saW5lTm9kZVdpdGhTdHlsZSk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRl
cmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNSZW5kZXJlclJlcGxhY2VkRWxlbWVudCk6
CisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YURldGVjdGlvbjo6aXNEYXRhRGV0ZWN0b3JMaW5rKToKKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFEZXRlY3Rpb246OnJlcXVpcmVzRXh0ZW5kZWRDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFEZXRlY3Rpb246OmRhdGFEZXRlY3RvcklkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RGF0YURldGVjdGlvbjo6c2hvdWxkQ2FuY2VsRGVmYXVsdEFjdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpyZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IpOgorICAgICAgICAoV2Vi
Q29yZTo6c2VhcmNoRm9yTGlua1JlbW92aW5nRXhpc3RpbmdERExpbmtzKToKKyAgICAgICAgKiBl
ZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZWxlbWVudFVSTCk6
CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpp
c1RhYlNwYW5Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGFiU3BhblRleHROb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzTWFpbEJsb2NrcXVvdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fy
ZXRNaW5PZmZzZXQpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCk6CisgICAgICAgICogaHRtbC9BdXRvZmls
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRvZmlsbERhdGE6OmNyZWF0ZUZyb21IVE1MRm9y
bUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0Jhc2VUZXh0SW5wdXRUeXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VUZXh0SW5wdXRUeXBlOjpwYXR0ZXJuTWlzbWF0Y2gpOgor
ICAgICAgICAqIGh0bWwvRGF0ZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRl
SW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UpOgorICAgICAgICAqIGh0bWwvRGF0ZVRpbWVJbnB1
dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0ZVRpbWVJbnB1dFR5cGU6OmNyZWF0ZVN0
ZXBSYW5nZSk6CisgICAgICAgICogaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZSk6
CisgICAgICAgICogaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpmaW5kQXNzb2NpYXRlZEZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1BdHRyaWJ1dGVUYXJn
ZXRPYnNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6OmZv
cm1BdHRyaWJ1dGVUYXJnZXRDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpkcmFnZ2FibGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmhyZWYpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldEhyZWYpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQ6OnRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9y
RWxlbWVudDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojpz
ZW5kUGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNs
aWNrKToKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6dmlzaXRlZExpbmtIYXNoKToKKyAgICAgICAgKiBodG1s
L0hUTUxBcHBsZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVt
ZW50Ojp1cGRhdGVXaWRnZXQpOgorICAgICAgICAqIGh0bWwvSFRNTEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6dGFyZ2V0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0
YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QXR0YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRUeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxC
YXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQ6OnRhcmdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQmFzZUVsZW1lbnQ6OmhyZWYpOgorICAgICAgICAq
IGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxl
bWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBodG1sL0hUTUxC
dXR0b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50Ojp2
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudDo6Y29tcHV0ZVdpbGxW
YWxpZGF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAqIGh0bWwvSFRN
TERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6YmdDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OnNldEJnQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTERvY3VtZW50OjpmZ0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxE
b2N1bWVudDo6c2V0RmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6OmFs
aW5rQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpzZXRBbGlua0NvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6bGlua0NvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6c2V0TGlua0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxEb2N1bWVudDo6dmxpbmtDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1l
bnQ6OnNldFZsaW5rQ29sb3IpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udGVudEVkaXRhYmxlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpkaXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6OnNldERpcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6ZHJhZ2dhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpzZXREcmFnZ2FibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50Ojp0YWJJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6dHJhbnNs
YXRlQXR0cmlidXRlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6aGFzRGly
ZWN0aW9uQXV0byk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxp
dHkpOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRW1iZWRFbGVtZW50OjppbWFnZVNvdXJjZVVSTCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRW1iZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtRW5jdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1BY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6YXV0b2NvcnJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6YXV0b2NhcGl0YWxpemVUeXBlKToKKyAgICAgICAgKiBodG1s
L0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6
OmF1dG9jb3JyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6YXV0b2Nh
cGl0YWxpemVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6YXV0b2Nh
cGl0YWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjphY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpzZXRBY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp0YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1FbGVtZW50Ojp3YXNVc2VyU3VibWl0dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
b3JtRWxlbWVudDo6c2hvdWxkQXV0b2NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxG
b3JtRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6YXV0b2NvbXBsZXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVs
ZW1lbnRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjps
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TG9j
YXRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTEh0bWxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRCeVBhcnNlcik6CisgICAgICAgICogaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQ6OmltYWdlU291cmNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6
OnNldEJlc3RGaXRVUkxBbmREUFJGcm9tSW1hZ2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEltYWdlRWxlbWVudDo6YmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzZWxlY3RJbWFnZVNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjphbHRUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxl
bWVudDo6YWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmRyYWdnYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzZXRIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6c3JjKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbWFnZUVsZW1lbnQ6OnNldFNyYyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEltYWdlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEltYWdlRWxlbWVudDo6aXNTZXJ2ZXJNYXApOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudDo6Y3Jvc3NPcmlnaW4pOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmluaXRpYWxpemVJbnB1dFR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWx0VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQ6OmFjY2VwdE1JTUVUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjphY2NlcHRGaWxlRXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjphY2NlcHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6YWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmVmZmVjdGl2ZU1h
eExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzcmMpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0QXV0b0ZpbGxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpkYXRhTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjpyZXNldExpc3RBdHRyaWJ1dGVUYXJnZXRPYnNlcnZlcik6Cisg
ICAgICAgICogaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MS2V5Z2VuRWxlbWVudDo6aXNLZXl0eXBlUlNBKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxL
ZXlnZW5FbGVtZW50OjphcHBlbmRGb3JtRGF0YSk6CisgICAgICAgICogaHRtbC9IVE1MTElFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMSUVsZW1lbnQ6OmRpZEF0dGFjaFJlbmRl
cmVycyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTElFbGVtZW50OjpwYXJzZVZhbHVlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TExhYmVsRWxlbWVudDo6Y29udHJvbCk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpjcm9zc09yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTExpbmtFbGVtZW50OjpocmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5r
RWxlbWVudDo6cmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6dGFyZ2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6dHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6Omljb25UeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxN
YXJxdWVlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6
OnNjcm9sbEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnNl
dFNjcm9sbEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnNj
cm9sbERlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudDo6c2V0U2Ny
b2xsRGVsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50Ojpsb29wKToK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OmNyb3NzT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVs
ZW1lbnQ6Om5ldHdvcmtTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
OjptZWRpYVNlc3Npb25UaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50
Ojpkb2VzSGF2ZUF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50Ojpwcm9jZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudDo6Y29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWV0YUVsZW1lbnQ6Omh0dHBFcXVpdik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUVs
ZW1lbnQ6Om5hbWUpOgorICAgICAgICAqIGh0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWV0ZXJFbGVtZW50OjptaW4pOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1ldGVyRWxlbWVudDo6c2V0TWluKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRlckVs
ZW1lbnQ6Om1heCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0ZXJFbGVtZW50OjpzZXRNYXgp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVudDo6bG93KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZXRlckVsZW1lbnQ6OmhpZ2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVudDo6
b3B0aW11bSk6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6c2hvdWxkQWxsb3dRdWlja1RpbWVDbGFzc0lk
UXVpcmspOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6Omhhc1ZhbGlkQ2xh
c3NJZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aW1hZ2VTb3VyY2VV
UkwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRlckZhbGxiYWNr
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6Y29udGFpbnNK
YXZhQXBwbGV0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjphZGRTdWJy
ZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Ojpncm91cExhYmVs
VGV4dCk6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9wdGlvbkVsZW1lbnQ6OmxhYmVsKToKKyAgICAgICAgKiBodG1sL0hUTUxQYXJhbUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6dmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcmFtRWxlbWVudDo6aXNVUkxQYXJhbWV0ZXIpOgorICAgICAgICAq
IGh0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJv
Z3Jlc3NFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUHJvZ3Jlc3NFbGVt
ZW50OjptYXgpOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmNyb3NzT3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50OjpzcmMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNj
cmlwdEVsZW1lbnQ6OnNvdXJjZUF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTY3JpcHRFbGVtZW50OjpjaGFyc2V0QXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OnR5cGVBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6bGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Zm9yQXR0cmlidXRlVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmV2ZW50QXR0cmlidXRlVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmFzeW5jQXR0cmlidXRlVmFsdWUpOgor
ICAgICAgICAqIGh0bWwvSFRNTFNsb3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTbG90RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTbG90
RWxlbWVudDo6cmVtb3ZlZEZyb20pOgorICAgICAgICAqIGh0bWwvSFRNTFNvdXJjZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNvdXJjZUVsZW1lbnQ6Om1lZGlhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTb3VyY2VFbGVtZW50OjpzZXRNZWRpYSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MU291cmNlRWxlbWVudDo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291
cmNlRWxlbWVudDo6c2V0VHlwZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6Y29sU3BhbkZv
ckJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50Ojpyb3dT
cGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50Ojpyb3dTcGFuRm9y
QmluZGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNlbGxJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6YWJicik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6YXhpcyk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Q29sU3BhbkZvckJpbmRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjpoZWFkZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRSb3dTcGFuRm9yQmluZGluZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNjb3BlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVS
THMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNlbGxBYm92ZSk6
CisgICAgICAgICogaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUYWJsZUNvbEVsZW1lbnQ6OndpZHRoKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJs
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6cnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6c3VtbWFyeSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMp
OgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmFsaWduKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpzZXRBbGlnbik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQ6OnNldENoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50OjpjaE9mZik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9u
RWxlbWVudDo6c2V0Q2hPZmYpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQ6OnZBbGlnbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dDo6c2V0VkFsaWduKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6YXBwZW5kRm9ybURhdGEpOgor
ICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxhY2Vob2xkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlzUGxhY2Vo
b2xkZXJFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dDo6ZGlyZWN0aW9uRm9yRm9ybURhdGEpOgorICAgICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjpzcmNsYW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OmxhYmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUcmFja0VsZW1lbnQ6OmlzRGVmYXVsdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJhY2tFbGVtZW50OjplbnN1cmVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tF
bGVtZW50OjptZWRpYUVsZW1lbnRDcm9zc09yaWdpbkF0dHJpYnV0ZSk6CisgICAgICAgICogaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWRlb0VsZW1lbnQ6
OmltYWdlU291cmNlVVJMKToKKyAgICAgICAgKiBodG1sL0ltYWdlSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlSW5wdXRUeXBlOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VJbnB1dFR5cGU6OndpZHRoKToKKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmFwcGx5U3RlcCk6CisgICAgICAgICogaHRt
bC9NZWRpYUVsZW1lbnRTZXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVu
dFNlc3Npb246OndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKToKKyAgICAgICAgKiBodG1s
L01vbnRoSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vbnRoSW5wdXRUeXBlOjpj
cmVhdGVTdGVwUmFuZ2UpOgorICAgICAgICAqIGh0bWwvTnVtYmVySW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok51bWJlcklucHV0VHlwZTo6c2l6ZVNob3VsZEluY2x1ZGVEZWNvcmF0aW9u
KToKKyAgICAgICAgKiBodG1sL1JhbmdlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlSW5wdXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2VJbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6CisgICAgICAgICogaHRtbC9UZXh0Rmll
bGRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjph
cHBlbmRGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OnVw
ZGF0ZUF1dG9GaWxsQnV0dG9uKToKKyAgICAgICAgKiBodG1sL1RpbWVJbnB1dFR5cGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGltZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlKToKKyAgICAg
ICAgKiBodG1sL1ZhbGlkYXRpb25NZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZhbGlk
YXRpb25NZXNzYWdlOjp1cGRhdGVWYWxpZGF0aW9uTWVzc2FnZSk6CisgICAgICAgICogaHRtbC9X
ZWVrSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlZWtJbnB1dFR5cGU6OmNyZWF0
ZVN0ZXBSYW5nZSk6CisgICAgICAgICogaHRtbC90cmFjay9XZWJWVFRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYlZUVEVsZW1lbnQ6OmNyZWF0ZUVxdWl2YWxlbnRIVE1MRWxlbWVu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWUpOgorICAg
ICAgICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
U3VibWlzc2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRlZmF1bHRTdWJzdGl0dXRlRGF0YUZvclVS
TCk6CisgICAgICAgICogbG9hZGVyL0ltYWdlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICogbG9hZGVyL1N1YmZy
YW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjppc1BsdWdp
bkNvbnRlbnRBbGxvd2VkQnlDb250ZW50U2VjdXJpdHlQb2xpY3kpOgorICAgICAgICAqIG1hdGht
bC9NYXRoTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTEVsZW1lbnQ6OmNv
bFNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE1MRWxlbWVudDo6cm93U3Bhbik6CisgICAg
ICAgIChXZWJDb3JlOjpNYXRoTUxFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE1MRWxlbWVudDo6Y2FjaGVkTWF0aE1MTGVuZ3RoKToKKyAg
ICAgICAgKiBtYXRobWwvTWF0aE1MRnJhY3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1hdGhNTEZyYWN0aW9uRWxlbWVudDo6bGluZVRoaWNrbmVzcyk6CisgICAgICAgIChXZWJD
b3JlOjpNYXRoTUxGcmFjdGlvbkVsZW1lbnQ6OmNhY2hlZEZyYWN0aW9uQWxpZ25tZW50KToKKyAg
ICAgICAgKiBtYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNYXRoTUxTZWxlY3RFbGVtZW50OjpnZXRTZWxlY3RlZEFjdGlvbkNoaWxkQW5kSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6TWF0aE1MU2VsZWN0RWxlbWVudDo6Z2V0U2VsZWN0ZWRBY3Rpb25D
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpNYXRoTUxTZWxlY3RFbGVtZW50OjpnZXRTZWxlY3Rl
ZFNlbWFudGljc0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hdGhNTFNlbGVjdEVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWF0aE1MU2VsZWN0RWxl
bWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
TWF0aE1MU2VsZWN0RWxlbWVudDo6dG9nZ2xlKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRHJvcFpvbmUpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om1hdGNoTGFiZWxzQWdhaW5zdEVs
ZW1lbnQpOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9y
bS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3
cml0ZUltYWdlVG9EYXRhT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3Vs
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjphbHREaXNwbGF5U3RyaW5n
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJEZXRhaWxzTWFya2VyOjppc09wZW4pOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6aW1h
Z2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoUmVuZGVyTWVu
dUxpc3Q6Oml0ZW1BY2Nlc3NpYmlsaXR5VGV4dCk6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6
aXRlbVRvb2xUaXApOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6YXV0b3NhdmVOYW1lKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpn
ZXRBdHRhY2htZW50UHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6QXR0YWNobWVudEluZm86
OkF0dGFjaG1lbnRJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpBdHRhY2htZW50TGF5b3V0OjpsYXlPdXRTdWJ0aXRsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRBdHRhY2htZW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvbWF0aG1sL01hdGhNTFN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1hdGhNTFN0eWxlOjpyZXNvbHZlTWF0aE1MU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTEZlbmNlZDo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNldE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGVW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0
b3JQcm9wZXJ0aWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNj
cmlwdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MU2NyaXB0czo6Z2V0U2Ny
aXB0TWV0cmljc0FuZExheW91dElmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxVbmRlck92ZXI6Omhhc0FjY2VudCk6CisgICAgICAgICogc3R5bGUvU3R5bGVTaGFyaW5nUmVz
b2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNoYXJpbmdSZXNvbHZlcjo6Y2Fu
U2hhcmVTdHlsZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5n
UmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJp
YnV0ZXMpOgorICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBRWxlbWVudDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OmRl
ZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHN2Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHQWx0R2x5cGhFbGVtZW50OjpnbHlwaFJlZik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdBbHRHbHlwaEVsZW1lbnQ6OnNldEZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbHRHbHlwaEVsZW1lbnQ6OmZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdBbHRHbHlwaEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAq
IHN2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1h
dGlvbkVsZW1lbnQ6OnRvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxl
bWVudDo6YnlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojpm
cm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6aXNBZGRp
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50Ojppc0FjY3VtdWxh
dGVkKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50Ojp4bWxiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnNldFht
bGJhc2UpOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRm9udEZhY2VFbGVtZW50Ojp1bml0c1BlckVtKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZvbnRGYWNlRWxlbWVudDo6eEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
b250RmFjZUVsZW1lbnQ6OmNhcEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFj
ZUVsZW1lbnQ6Omhvcml6b250YWxPcmlnaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRG
YWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWdpblkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9u
dEZhY2VFbGVtZW50Ojpob3Jpem9udGFsQWR2YW5jZVgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Rm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNhbE9yaWdpblgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Rm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNhbE9yaWdpblkpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Rm9udEZhY2VFbGVtZW50Ojp2ZXJ0aWNhbEFkdmFuY2VZKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZvbnRGYWNlRWxlbWVudDo6YXNjZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRGYWNl
RWxlbWVudDo6ZGVzY2VudCk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlTmFtZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VOYW1lRWxlbWVudDo6c3JjVmFsdWUp
OgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRm9udEZhY2VVcmlFbGVtZW50OjpzcmNWYWx1ZSk6CisgICAgICAgICogc3ZnL1NW
R0dseXBoUmVmRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaFJlZkVsZW1l
bnQ6OmdseXBoUmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoUmVmRWxlbWVudDo6c2V0
R2x5cGhSZWYpOgorICAgICAgICAqIHN2Zy9TVkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcik6Cisg
ICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZH
RWxlbWVudDo6Y29udGVudFNjcmlwdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxl
bWVudDo6Y29udGVudFN0eWxlVHlwZSk6CisgICAgICAgICogc3ZnL1NWR1N0eWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6Om1lZGlhKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1N0eWxlRWxlbWVudDo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3R5bGVFbGVtZW50OjpzZXRUaXRsZSk6CisgICAgICAgICogc3ZnL1NWR1RvT1RGRm9udENvbnZl
cnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBl
bmRPUzJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFw
cGVuZENGRlRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6
YXBwZW5kQXJhYmljUmVwbGFjZW1lbnRTdWJ0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
b09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdUb09URkZvbnRDb252ZXJ0ZXI6OnRyYW5zY29kZUdseXBoUGF0aHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVG9PVEZGb250Q29udmVydGVyOjpwcm9jZXNzR2x5cGhFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RvT1RGRm9udENvbnZlcnRlcjo6Y29tcGFyZUNvZGVwb2ludHNMZXhp
Y29ncmFwaGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUb09URkZvbnRDb252ZXJ0ZXI6
OlNWR1RvT1RGRm9udENvbnZlcnRlcik6CisgICAgICAgICogc3ZnL1NWR1ZLZXJuRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJu
aW5nUGFpcik6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTTUlMRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTTUlMRWxlbWVudDo6cmVzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6ZmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6ZHVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpyZXBlYXREdXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnJlcGVhdENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NNSUxFbGVtZW50OjptYXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxl
bWVudDo6bWluVmFsdWUpOgorCiAyMDE2LTA3LTE1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgVXNlIGVtcHR5U3RyaW5nKCkgLyBudWxsQXRvbSB3aGVuIHBvc3Np
YmxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lk
IEFYT2JqZWN0Q2FjaGU6OmZpbmRBcmlhTW9kYWxOb2RlcygpCiAgICAgICAgIC8vIE11c3QgaGF2
ZSBkaWFsb2cgb3IgYWxlcnRkaWFsb2cgcm9sZQogICAgICAgICBpZiAoIW5vZGVIYXNSb2xlKGVs
ZW1lbnQsICJkaWFsb2ciKSAmJiAhbm9kZUhhc1JvbGUoZWxlbWVudCwgImFsZXJ0ZGlhbG9nIikp
CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbW9kYWxBdHRyKSwgInRy
dWUiKSkKKyAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFfbW9kYWxBdHRyKSwgInRydWUi
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgbV9hcmlhTW9kYWxO
b2Rlc1NldC5hZGQoZWxlbWVudCk7CkBAIC0zOTgsNyArMzk4LDcgQEAgYm9vbCBub2RlSGFzUm9s
ZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbgogICAgIGlmICghbm9kZSB8fCAhaXM8RWxlbWVudD4o
bm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIHJvbGVWYWx1ZSA9IGRv
d25jYXN0PEVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKKyAgICBh
dXRvJiByb2xlVmFsdWUgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihyb2xlQXR0cik7CiAgICAgaWYgKHJvbGUuaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiByb2xlVmFsdWUuaXNFbXB0eSgpOwogICAgIGlmIChyb2xlVmFsdWUuaXNFbXB0
eSgpKQpAQCAtODMxLDkgKzgzMSw5IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlTGl2ZVJl
Z2lvbkNyZWEKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBk
b3duY2FzdDxFbGVtZW50Pihub2RlKTsKLSAgICBTdHJpbmcgbGl2ZVJlZ2lvblN0YXR1cyA9IGVs
ZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9saXZlQXR0cik7CisgICAgU3RyaW5nIGxpdmVS
ZWdpb25TdGF0dXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFy
aWFfbGl2ZUF0dHIpOwogICAgIGlmIChsaXZlUmVnaW9uU3RhdHVzLmlzRW1wdHkoKSkgewotICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFSb2xlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShyb2xlQXR0cik7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYVJvbGUgPSBl
bGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHJvbGVBdHRyKTsKICAgICAg
ICAgaWYgKCFhcmlhUm9sZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBsaXZlUmVnaW9uU3RhdHVz
ID0gQWNjZXNzaWJpbGl0eU9iamVjdDo6ZGVmYXVsdExpdmVSZWdpb25TdGF0dXNGb3JSb2xlKEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFSb2xlVG9XZWJDb3JlUm9sZShhcmlhUm9sZSkpOwogICAg
IH0KQEAgLTEwMDYsNyArMTAwNiw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlTWVudUl0
ZW1TZWxlY3QKICAgICBpZiAoIW5vZGVIYXNSb2xlKG5vZGUsICJtZW51aXRlbSIpICYmICFub2Rl
SGFzUm9sZShub2RlLCAibWVudWl0ZW1yYWRpbyIpICYmICFub2RlSGFzUm9sZShub2RlLCAibWVu
dWl0ZW1jaGVja2JveCIpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKCFkb3duY2Fz
dDxFbGVtZW50Pigqbm9kZSkuZm9jdXNlZCgpICYmICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZmFzdEdldEF0dHJpYnV0ZShhcmlhX3NlbGVj
dGVkQXR0ciksICJ0cnVlIikpCisgICAgaWYgKCFkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZm9j
dXNlZCgpICYmICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkb3duY2FzdDxFbGVtZW50
Pigqbm9kZSkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhX3NlbGVjdGVkQXR0
ciksICJ0cnVlIikpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBwb3N0Tm90aWZpY2F0aW9u
KGdldE9yQ3JlYXRlKG5vZGUpLCAmZG9jdW1lbnQoKSwgQVhNZW51TGlzdEl0ZW1TZWxlY3RlZCk7
CkBAIC0xNDIyLDcgKzE0MjIsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFyaWFNb2Rh
bENoYW5nCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBzdG9wQ2FjaGluZ0NvbXB1dGVkT2Jq
ZWN0QXR0cmlidXRlcygpOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShk
b3duY2FzdDxFbGVtZW50Pigqbm9kZSkuZmFzdEdldEF0dHJpYnV0ZShhcmlhX21vZGFsQXR0ciks
ICJ0cnVlIikpIHsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZG93bmNh
c3Q8RWxlbWVudD4oKm5vZGUpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYV9t
b2RhbEF0dHIpLCAidHJ1ZSIpKSB7CiAgICAgICAgIC8vIEFkZCB0aGUgbmV3bHkgbW9kaWZpZWQg
bm9kZSB0byB0aGUgbW9kYWwgbm9kZXMgc2V0LCBhbmQgc2V0IGl0IHRvIGJlIHRoZSBjdXJyZW50
IHZhbGlkIGFyaWEgbW9kYWwgbm9kZS4KICAgICAgICAgLy8gV2Ugd2lsbCByZWNvbXB1dGUgdGhl
IGN1cnJlbnQgdmFsaWQgYXJpYSBtb2RhbCBub2RlIGluIGFyaWFNb2RhbE5vZGUoKSB3aGVuIHRo
aXMgbm9kZSBpcyBub3QgdmlzaWJsZS4KICAgICAgICAgbV9hcmlhTW9kYWxOb2Rlc1NldC5hZGQo
bm9kZSk7CkBAIC0yNjMyLDcgKzI2MzIsNyBAQCBib29sIGlzTm9kZUFyaWFWaXNpYmxlKE5vZGUq
IG5vZGUpCiAgICAgYm9vbCBhcmlhSGlkZGVuRmFsc2VQcmVzZW50ID0gZmFsc2U7CiAgICAgZm9y
IChOb2RlKiB0ZXN0Tm9kZSA9IG5vZGU7IHRlc3ROb2RlOyB0ZXN0Tm9kZSA9IHRlc3ROb2RlLT5w
YXJlbnROb2RlKCkpIHsKICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0ZXN0Tm9kZSkpIHsKLSAg
ICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUhpZGRlblZhbHVlID0gZG93bmNhc3Q8
RWxlbWVudD4oKnRlc3ROb2RlKS5mYXN0R2V0QXR0cmlidXRlKGFyaWFfaGlkZGVuQXR0cik7Cisg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFIaWRkZW5WYWx1ZSA9IGRvd25jYXN0
PEVsZW1lbnQ+KCp0ZXN0Tm9kZSkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlh
X2hpZGRlbkF0dHIpOwogICAgICAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKGFyaWFIaWRkZW5WYWx1ZSwgInRydWUiKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAyMDMzMjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4Myw3ICsxMTgzLDcgQEAgc3RhdGljIEVsZW1lbnQq
IHNpYmxpbmdXaXRoQXJpYVJvbGUoTm9kZQogCiAgICAgZm9yIChhdXRvJiBzaWJsaW5nIDogY2hp
bGRyZW5PZlR5cGU8RWxlbWVudD4oKnBhcmVudCkpIHsKICAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCBza2lwIHNpYmxpbmcgdGhhdCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9kZS4KLSAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoc2libGluZy5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRy
KSwgcm9sZSkpCisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHNpYmxpbmcuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihyb2xlQXR0ciksIHJvbGUpKQogICAgICAgICAg
ICAgcmV0dXJuICZzaWJsaW5nOwogICAgIH0KIApAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGVFbGVtZQogICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogbGFiZWxPYmplY3QgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGxh
YmVsKTsKICAgICAgICAgICAgIFN0cmluZyBpbm5lclRleHQgPSBsYWJlbC0+aW5uZXJUZXh0KCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUxhYmVs
ID0gbGFiZWwtPmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOworICAgICAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGFiZWwgPSBsYWJlbC0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihhcmlhX2xhYmVsQXR0cik7CiAgICAgICAgICAgICBpZiAoIWFyaWFMYWJl
bC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgaW5uZXJUZXh0ID0gYXJpYUxhYmVsOwogICAg
ICAgICAgICAgCkBAIC0xNDU0LDE0ICsxNDU0LDE0IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6YWx0ZXJuYXQKICAgICAKICAgICAvLyBDaGVjayBpZiB0aGUgSFRNTCBlbGVtZW50
IGhhcyBhbiBhcmlhLWxhYmVsIGZvciB0aGUgd2VicGFnZS4KICAgICBpZiAoRWxlbWVudCogZG9j
dW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgYXJpYUxhYmVsID0gZG9jdW1lbnRFbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlh
TGFiZWwgPSBkb2N1bWVudEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
YXJpYV9sYWJlbEF0dHIpOwogICAgICAgICBpZiAoIWFyaWFMYWJlbC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm4gYXJpYUxhYmVsOwogICAgIH0KICAgICAKICAgICBpZiAoYXV0byogb3du
ZXIgPSBkb2N1bWVudC0+b3duZXJFbGVtZW50KCkpIHsKICAgICAgICAgaWYgKG93bmVyLT5oYXNU
YWdOYW1lKGZyYW1lVGFnKSB8fCBvd25lci0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7Ci0gICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gb3duZXItPmZhc3RHZXRBdHRyaWJ1
dGUodGl0bGVBdHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBv
d25lci0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih0aXRsZUF0dHIpOwogICAgICAg
ICAgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRpdGxl
OwogICAgICAgICB9CkBAIC0xNTU4LDcgKzE1NTgsNyBAQCB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aGllcmFyCiAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2Rl
KTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFMZXZlbCA9IGVsZW1lbnQuZmFzdEdldEF0
dHJpYnV0ZShhcmlhX2xldmVsQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGV2
ZWwgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYV9sZXZlbEF0
dHIpOwogICAgIGlmICghYXJpYUxldmVsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGFyaWFM
ZXZlbC50b0ludCgpOwogICAgIApAQCAtMTgwNiw3ICsxODA2LDcgQEAgU3RyaW5nIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpzdHJpbmdWYQogICAgICAgICBpbnQgc2VsZWN0ZWRJbmRleCA9IHNl
bGVjdEVsZW1lbnQuc2VsZWN0ZWRJbmRleCgpOwogICAgICAgICBjb25zdCBWZWN0b3I8SFRNTEVs
ZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2VsZWN0RWxlbWVudC5saXN0SXRlbXMoKTsKICAgICAgICAg
aWYgKHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHNlbGVjdGVkSW5k
ZXgpIDwgbGlzdEl0ZW1zLnNpemUoKSkgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBvdmVycmlkZGVuRGVzY3JpcHRpb24gPSBsaXN0SXRlbXNbc2VsZWN0ZWRJbmRleF0tPmZhc3RH
ZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBvdmVycmlkZGVuRGVzY3JpcHRpb24gPSBsaXN0SXRlbXNbc2VsZWN0ZWRJbmRleF0tPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYV9sYWJlbEF0dHIpOwogICAgICAgICAg
ICAgaWYgKCFvdmVycmlkZGVuRGVzY3JpcHRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG92ZXJyaWRkZW5EZXNjcmlwdGlvbjsKICAgICAgICAgfQpAQCAtMTg1OSwxMSArMTg1
OSwxMSBAQCBzdGF0aWMgU3RyaW5nIGFjY2Vzc2libGVOYW1lRm9yTm9kZShOb2RlCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKICAgICAKICAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
RWxlbWVudD4oKm5vZGUpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUxhYmVsID0gZWxl
bWVudC5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGFyaWFMYWJlbCA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihhcmlhX2xhYmVsQXR0cik7CiAgICAgaWYgKCFhcmlhTGFiZWwuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gYXJpYUxhYmVsOwogICAgIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0g
ZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYWx0ID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFsdEF0dHIp
OwogICAgIGlmICghYWx0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGFsdDsKIApAQCAtMTg4
OSw3ICsxODg5LDcgQEAgc3RhdGljIFN0cmluZyBhY2Nlc3NpYmxlTmFtZUZvck5vZGUoTm9kZQog
ICAgIGlmICghdGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0ZXh0OwogICAgIAotICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUodGl0
bGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZWxlbWVudC5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHRpdGxlQXR0cik7CiAgICAgaWYgKCF0aXRsZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB0aXRsZTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNp
b24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5Nyw3ICsxNTk3LDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojpjb250ZW50RWRpdGFibAogICAgIGlmICghZWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29udGVudEVk
aXRhYmxlVmFsdWUgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNvbnRlbnRlZGl0YWJsZUF0
dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29udGVudEVkaXRhYmxlVmFsdWUgPSBlbGVt
ZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGNvbnRlbnRlZGl0YWJsZUF0dHIp
OwogICAgIGlmIChjb250ZW50RWRpdGFibGVWYWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIApAQCAtMTk5OSw3ICsxOTk5LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpoYXNBdHRyaWJ1dGUoYwogY29uc3QgQXRvbWljU3RyaW5nJiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKSBjb25zdAog
ewogICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgICAgICByZXR1
cm4gZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhdHRyaWJ1dGUpOwog
ICAgIHJldHVybiBudWxsQXRvbTsKIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU2LDcgKzc1Niw3IEBA
IFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmcKICAgICAgICAgaW50IHNl
bGVjdGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXgoKTsKICAgICAgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdEVsZW1lbnQubGlzdEl0
ZW1zKCk7CiAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6
ZV90PihzZWxlY3RlZEluZGV4KSA8IGxpc3RJdGVtcy5zaXplKCkpIHsKLSAgICAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgb3ZlcnJpZGRlbkRlc2NyaXB0aW9uID0gbGlzdEl0ZW1zW3NlbGVj
dGVkSW5kZXhdLT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKKyAgICAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgb3ZlcnJpZGRlbkRlc2NyaXB0aW9uID0gbGlzdEl0ZW1zW3Nl
bGVjdGVkSW5kZXhdLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFfbGFiZWxB
dHRyKTsKICAgICAgICAgICAgIGlmICghb3ZlcnJpZGRlbkRlc2NyaXB0aW9uLmlzTnVsbCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBvdmVycmlkZGVuRGVzY3JpcHRpb247CiAgICAgICAgIH0K
QEAgLTEwNTYsNyArMTA1Niw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZXhw
b3Nlc1QKICAgICAvLyBvdGhlcndpc2UgaXRzIGlubmVyIHRleHQgd2lsbCBiZSBhbm5vdW5jZWQg
YnkgYSBzY3JlZW5yZWFkZXIuCiAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCp0aGlzLT5u
b2RlKCkpIHx8IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUlucHV0KGFyaWFSb2xlQXR0cmli
dXRlKCkpKSB7CiAgICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9y
RWxlbWVudChkb3duY2FzdDxFbGVtZW50Pihub2RlKCkpKSkgewotICAgICAgICAgICAgaWYgKCFs
YWJlbC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cikuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgaWYgKCFsYWJlbC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhX2xh
YmVsQXR0cikuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTVkdFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBFbGVtZW50KiBBY2Nlc3NpYmlsaXR5U1ZH
RWxlbWVudDo6Y2hpbGRFCiAgICAgVmVjdG9yPFN0cmluZz4gY2hpbGRMYW5ndWFnZUNvZGVzOwog
ICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVudHM7CiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNo
aWxkcmVuKSB7Ci0gICAgICAgIFN0cmluZyBsYW5nID0gY2hpbGQuZmFzdEdldEF0dHJpYnV0ZShT
VkdOYW1lczo6bGFuZ0F0dHIpOworICAgICAgICBTdHJpbmcgbGFuZyA9IGNoaWxkLmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmxhbmdBdHRyKTsKICAgICAgICAgY2hp
bGRMYW5ndWFnZUNvZGVzLmFwcGVuZChsYW5nKTsKICAgICAgICAgZWxlbWVudHMuYXBwZW5kKCZj
aGlsZCk7CiAKQEAgLTEzOSw3ICsxMzksNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVNWR0VsZW1l
bnQ6OmFjY2Vzc2liCiAgICAgICAgIHJldHVybiB0aXRsZUNoaWxkLT50ZXh0Q29udGVudCgpOwog
CiAgICAgaWYgKGlzPFNWR0FFbGVtZW50PihlbGVtZW50KCkpKSB7Ci0gICAgICAgIFN0cmluZyB4
bGlua1RpdGxlID0gZWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OnRpdGxl
QXR0cik7CisgICAgICAgIFN0cmluZyB4bGlua1RpdGxlID0gZWxlbWVudCgpLT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFhMaW5rTmFtZXM6OnRpdGxlQXR0cik7CiAgICAgICAgIGlm
ICgheGxpbmtUaXRsZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4geGxpbmtUaXRsZTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24gMjAz
MzIyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTc5NCw3ICs3OTQsNyBAQCAtIChCT09MKV9tZWRpYVF1ZXJ5TWF0Y2hlcwogewogICAg
IEhUTUxMaW5rRWxlbWVudCYgbGluayA9ICpzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihj
b3JlKHNlbGYpKTsKIAotICAgIGF1dG8mIG1lZGlhID0gbGluay5mYXN0R2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6bWVkaWFBdHRyKTsKKyAgICBhdXRvJiBtZWRpYSA9IGxpbmsuYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6Om1lZGlhQXR0cik7CiAgICAgaWYgKG1lZGlh
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHJldmlzaW9uIDIwMzMy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQko
d29ya2luZyBjb3B5KQpAQCAtNjY5LDcgKzY2OSw3IEBAIHN1YiBHZXR0ZXJFeHByZXNzaW9uCiAg
ICAgICAgIH0gZWxzaWYgKCRnZW5lcmF0b3ItPklzU1ZHQW5pbWF0ZWRUeXBlKCRhdHRyaWJ1dGVU
eXBlKSkgewogICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJnZXRBdHRyaWJ1dGUiOwogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJmYXN0R2V0QXR0cmli
dXRlIjsKKyAgICAgICAgICAgICRmdW5jdGlvbk5hbWUgPSAiYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbiI7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQkocmV2aXNpb24g
MjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
T2JqQy5wbQkod29ya2luZyBjb3B5KQpAQCAtMTI2OSw4ICsxMjY5LDggQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgbXkgKCRmdW5jdGlvbk5hbWUsIEBhcmd1bWVu
dHMpID0gJGNvZGVHZW5lcmF0b3ItPkdldHRlckV4cHJlc3Npb24oXCVpbXBsSW5jbHVkZXMsICRp
bnRlcmZhY2VOYW1lLCAkYXR0cmlidXRlKTsKIAotICAgICAgICAgICAgIyBUbyBhdm9pZCBibG9h
dGluZyBPYmotQyBiaW5kaW5ncywgd2UgdXNlIGdldEF0dHJpYnV0ZSgpIGluc3RlYWQgb2YgZmFz
dEdldEF0dHJpYnV0ZSgpLgotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbk5hbWUgZXEgImZhc3RH
ZXRBdHRyaWJ1dGUiKSB7CisgICAgICAgICAgICAjIFRvIGF2b2lkIGJsb2F0aW5nIE9iai1DIGJp
bmRpbmdzLCB3ZSB1c2UgZ2V0QXR0cmlidXRlKCkgaW5zdGVhZCBvZiBhdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKCkuCisgICAgICAgICAgICBpZiAoJGZ1bmN0aW9uTmFtZSBlcSAiYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbiIpIHsKICAgICAgICAgICAgICAgICAkZnVuY3Rp
b25OYW1lID0gImdldEF0dHJpYnV0ZSI7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQwOSw3ICsyNDA5LDcgQEAgZ2NoYXIqIHdlYmtpdF9kb21fdGVz
dF9vYmpfZ2V0X3JlZmxlY3RlZAogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBz
dGF0ZTsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX1RFU1RfT0JKKHNl
bGYpLCAwKTsKICAgICBXZWJDb3JlOjpUZXN0T2JqKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OwotICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmZhc3RHZXRB
dHRyaWJ1dGUoV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOwor
ICAgIGdjaGFyKiByZXN1bHQgPSBjb252ZXJ0VG9VVEY4U3RyaW5nKGl0ZW0tPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29yZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdh
dHRyQXR0cikpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI0OTgsNyArMjQ5OCw3IEBA
IGdjaGFyKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2dldF9yZWZsZWN0ZWQKICAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0RPTV9JU19URVNUX09CSihzZWxmKSwgMCk7CiAgICAgV2ViQ29yZTo6VGVzdE9iaiogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnY2hhciogcmVzdWx0ID0gY29udmVydFRvVVRG
OFN0cmluZyhpdGVtLT5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9t
Q29udGVudFN0cmluZ0F0dHJBdHRyKSk7CisgICAgZ2NoYXIqIHJlc3VsdCA9IGNvbnZlcnRUb1VU
RjhTdHJpbmcoaXRlbS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihXZWJDb3JlOjpI
VE1MTmFtZXM6OmN1c3RvbUNvbnRlbnRTdHJpbmdBdHRyQXR0cikpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTc1Miw3ICsxNzUyLDcgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqUmVmbGVjdGVk
U3RyaW5nQQogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVz
dE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiAgICAgfQogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhD
YWNoZShzdGF0ZSwgaW1wbC5mYXN0R2V0QXR0cmlidXRlKFdlYkNvcmU6OkhUTUxOYW1lczo6cmVm
bGVjdGVkc3RyaW5nYXR0ckF0dHIpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzU3RyaW5nV2l0
aENhY2hlKHN0YXRlLCBpbXBsLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oV2ViQ29y
ZTo6SFRNTE5hbWVzOjpyZWZsZWN0ZWRzdHJpbmdhdHRyQXR0cikpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtMTgyNyw3ICsxODI3LDcgQEAgRW5jb2RlZEpT
VmFsdWUganNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQQogICAgICAgICByZXR1cm4gdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJyZWZsZWN0ZWRTdHJpbmdBdHRyIik7CiAg
ICAgfQogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5mYXN0R2V0QXR0cmlidXRl
KFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0cmluZ0F0dHJBdHRyKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ1dpdGhDYWNoZShzdGF0ZSwgaW1wbC5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFdlYkNvcmU6OkhUTUxOYW1lczo6Y3VzdG9tQ29udGVudFN0
cmluZ0F0dHJBdHRyKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQXV0aG9yU3R5bGVTaGVldHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHAJKHJldmlzaW9u
IDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9BdXRob3JTdHlsZVNoZWV0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEF1dGhvclN0eWxlU2hlZXRzOjpj
b2xsZWN0QWN0aXZlU3R5CiAjZW5kaWYKICAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MTGlua0Vs
ZW1lbnQ+KCpub2RlKSB8fCBpczxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkgfHwgaXM8U1ZHU3R5
bGVFbGVtZW50Pigqbm9kZSkpIHsKICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSk7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgdGl0bGUgPSBl
bGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICAgICAgICAgIEF0b21pY1N0
cmluZyB0aXRsZSA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih0aXRs
ZUF0dHIpOwogICAgICAgICAgICAgYm9vbCBlbmFibGVkVmlhU2NyaXB0ID0gZmFsc2U7CiAgICAg
ICAgICAgICBpZiAoaXM8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KSkgewogICAgICAgICAgICAg
ICAgIC8vIDxMSU5LPiBlbGVtZW50CkBAIC0xNjcsNyArMTY3LDcgQEAgdm9pZCBBdXRob3JTdHls
ZVNoZWV0czo6Y29sbGVjdEFjdGl2ZVN0eQogICAgICAgICAgICAgICAgIGlmIChsaW5rRWxlbWVu
dC5zdHlsZVNoZWV0SXNMb2FkaW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaXQgaXMg
bG9hZGluZyBidXQgd2Ugc2hvdWxkIHN0aWxsIGRlY2lkZSB3aGljaCBzdHlsZSBzaGVldCBzZXQg
dG8gdXNlCiAgICAgICAgICAgICAgICAgICAgIGlmICghZW5hYmxlZFZpYVNjcmlwdCAmJiAhdGl0
bGUuaXNFbXB0eSgpICYmIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldE5hbWUuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmtFbGVtZW50LmZhc3RHZXRBdHRyaWJ1
dGUocmVsQXR0cikuY29udGFpbnMoImFsdGVybmF0ZSIpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWxpbmtFbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocmVs
QXR0cikuY29udGFpbnMoImFsdGVybmF0ZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0TmFtZSA9IHRpdGxlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0TmFtZSA9IHRpdGxlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgQXV0aG9yU3R5bGVT
aGVldHM6OmNvbGxlY3RBY3RpdmVTdHkKICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0
aGlzIHNoZWV0IGJlbG9uZ3MgdG8gYSBzdHlsZXNldAogICAgICAgICAgICAgLy8gKHRodXMgbWFr
aW5nIGl0IFBSRUZFUlJFRCBvciBBTFRFUk5BVEUgcmF0aGVyIHRoYW4KICAgICAgICAgICAgIC8v
IFBFUlNJU1RFTlQpLgotICAgICAgICAgICAgYXV0byYgcmVsID0gZWxlbWVudC5mYXN0R2V0QXR0
cmlidXRlKHJlbEF0dHIpOworICAgICAgICAgICAgYXV0byYgcmVsID0gZWxlbWVudC5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHJlbEF0dHIpOwogICAgICAgICAgICAgaWYgKCFlbmFi
bGVkVmlhU2NyaXB0ICYmICF0aXRsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBZ
ZXMsIHdlIGhhdmUgYSB0aXRsZS4KICAgICAgICAgICAgICAgICBpZiAobV9wcmVmZXJyZWRTdHls
ZXNoZWV0U2V0TmFtZS5pc0VtcHR5KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzQ4LDcgKzc0OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNz
S2V5TWFwKFRyZWVTY28KIHsKICAgICBBU1NFUlQoc2NvcGUpOwogICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KHNjb3BlLT5yb290Tm9kZSgpKSkgewot
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSA9IGVsZW1lbnQuZmFzdEdldEF0
dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nl
c3NLZXkgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWNjZXNza2V5
QXR0cik7CiAgICAgICAgIGlmICghYWNjZXNzS2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1f
ZWxlbWVudHNCeUFjY2Vzc0tleS5zZXQoYWNjZXNzS2V5LmltcGwoKSwgJmVsZW1lbnQpOwogCkBA
IC0zMDMxLDcgKzMwMzEsNyBAQCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzQmFzZUVsZW1lbnQoKQog
ICAgIGF1dG8gYmFzZURlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8SFRNTEJhc2VFbGVt
ZW50PigqdGhpcyk7CiAgICAgZm9yIChhdXRvJiBiYXNlIDogYmFzZURlc2NlbmRhbnRzKSB7CiAg
ICAgICAgIGlmICghaHJlZikgewotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSA9IGJhc2UuZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gYmFzZS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGhyZWZBdHRyKTsKICAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAg
ICAgICAgICBocmVmID0gJnZhbHVlOwogICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpCkBAIC0z
MDM5LDcgKzMwMzksNyBAQCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzQmFzZUVsZW1lbnQoKQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYmFzZS5mYXN0R2V0QXR0cmlidXRlKHRhcmdl
dEF0dHIpOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGJhc2UuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih0YXJnZXRBdHRyKTsKICAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICB0YXJnZXQgPSAmdmFsdWU7CiAg
ICAgICAgICAgICAgICAgaWYgKGhyZWYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50T3JkZXJlZE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBA
QCBIVE1MSW1hZ2VFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdlCiBIVE1MTGFiZWxFbGVt
ZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKGNv
bnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QK
IHsKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4oZ2V0KGtleSwgc2NvcGUs
IFtdIChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
IHsKLSAgICAgICAgcmV0dXJuIGlzPEhUTUxMYWJlbEVsZW1lbnQ+KGVsZW1lbnQpICYmIGVsZW1l
bnQuZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKS5pbXBsKCkgPT0gJmtleTsKKyAgICAgICAgcmV0
dXJuIGlzPEhUTUxMYWJlbEVsZW1lbnQ+KGVsZW1lbnQpICYmIGVsZW1lbnQuYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihmb3JBdHRyKS5pbXBsKCkgPT0gJmtleTsKICAgICB9KSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwOCw3ICsxNTA4
LDcgQEAgdm9pZCBFbGVtZW50OjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaQogCiBjb25zdCBB
dG9taWNTdHJpbmcmIEVsZW1lbnQ6OmltYWdlU291cmNlVVJMKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihzcmNBdHRyKTsKIH0KIAogYm9vbCBFbGVtZW50OjpyZW5kZXJlcklz
TmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKQEAgLTE1NjgsNyArMTU2OCw3IEBAIE5v
ZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgRWxlbWUKIAogICAgIGlmIChuZXdTY29w
ZSAmJiBoYXNUYWdOYW1lKGxhYmVsVGFnKSkgewogICAgICAgICBpZiAobmV3U2NvcGUtPnNob3Vs
ZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgIHVwZGF0ZUxhYmVsKCpu
ZXdTY29wZSwgbnVsbEF0b20sIGZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0cikpOworICAgICAgICAg
ICAgdXBkYXRlTGFiZWwoKm5ld1Njb3BlLCBudWxsQXRvbSwgYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihmb3JBdHRyKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7
CkBAIC0xNjE0LDcgKzE2MTQsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmCiAKICAgICAgICAgaWYgKG9sZFNjb3BlICYmIGhhc1RhZ05hbWUobGFiZWxUYWcpKSB7
CiAgICAgICAgICAgICBpZiAob2xkU2NvcGUtPnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1
dGUoKSkKLSAgICAgICAgICAgICAgICB1cGRhdGVMYWJlbCgqb2xkU2NvcGUsIGZhc3RHZXRBdHRy
aWJ1dGUoZm9yQXR0ciksIG51bGxBdG9tKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVMYWJlbCgq
b2xkU2NvcGUsIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZm9yQXR0ciksIG51bGxB
dG9tKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjQ3NCw3ICsyNDc0LDcgQEAgU3RyaW5nIEVs
ZW1lbnQ6OnRpdGxlKCkgY29uc3QKIAogY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50Ojpwc2V1
ZG8oKSBjb25zdAogewotICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHBzZXVkb0F0dHIpOwor
ICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHBzZXVkb0F0dHIpOwog
fQogCiB2b2lkIEVsZW1lbnQ6OnNldFBzZXVkbyhjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpA
QCAtMjk3MCw3ICsyOTcwLDcgQEAgdm9pZCBFbGVtZW50OjpyZXF1ZXN0UG9pbnRlckxvY2soKQog
CiBTcGVsbGNoZWNrQXR0cmlidXRlU3RhdGUgRWxlbWVudDo6c3BlbGxjaGVja0F0dHJpYnV0ZVN0
YXRlKCkgY29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZmFzdEdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OnNwZWxsY2hlY2tBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNw
ZWxsY2hlY2tBdHRyKTsKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBT
cGVsbGNoZWNrQXR0cmlidXRlRGVmYXVsdDsKICAgICBpZiAodmFsdWUuaXNFbXB0eSgpIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAidHJ1ZSIpKQpAQCAtMzQ2MCw3ICsz
NDYwLDcgQEAgdm9pZCBFbGVtZW50OjpjbGVhckhhc1BlbmRpbmdSZXNvdXJjZXMoKQogCiBib29s
IEVsZW1lbnQ6OmNhbkNvbnRhaW5SYW5nZUVuZFBvaW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
IWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZhc3RHZXRBdHRyaWJ1dGUocm9sZUF0dHIp
LCAiaW1nIik7CisgICAgcmV0dXJuICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShhdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHJvbGVBdHRyKSwgImltZyIpOwogfQogCiBTdHJp
bmcgRWxlbWVudDo6Y29tcGxldGVVUkxzSW5BdHRyaWJ1dGVWYWx1ZShjb25zdCBVUkwmIGJhc2Us
IGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5o
CShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsIHRoaXMgdG8g
Z2V0IHRoZSB2YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgdGhhdCBpcyBrbm93biBub3QgdG8gYmUgdGhl
IHN0eWxlCiAgICAgLy8gYXR0cmlidXRlIG9yIG9uZSBvZiB0aGUgU1ZHIGFuaW1hdGFibGUgYXR0
cmlidXRlcy4KICAgICBib29sIGZhc3RIYXNBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYp
IGNvbnN0OwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmFzdEdldEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICNpZm5k
ZWYgTkRFQlVHCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBmYXN0QXR0cmlidXRlTG9va3VwQWxs
b3dlZChjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CiAjZW5kaWYKQEAgLTY2OSw3ICs2Njks
NyBAQCBpbmxpbmUgYm9vbCBFbGVtZW50OjpmYXN0SGFzQXR0cmlidXRlKGNvCiAgICAgcmV0dXJu
IGVsZW1lbnREYXRhKCkgJiYgZmluZEF0dHJpYnV0ZUJ5TmFtZShuYW1lKTsKIH0KIAotaW5saW5l
IGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6ZmFzdEdldEF0dHJpYnV0ZShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lKSBjb25zdAoraW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVu
dDo6YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lKSBjb25zdAogewogICAgIEFTU0VSVChmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChuYW1l
KSk7CiAgICAgaWYgKGVsZW1lbnREYXRhKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9J
bmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDcgKzE0MSw3IEBAIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpjcmVhdGVTaGVldCgK
IAogICAgIEFTU0VSVChkb2N1bWVudC5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CiAgICAgY29u
c3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSAqZG9jdW1l
bnQuY29udGVudFNlY3VyaXR5UG9saWN5KCk7Ci0gICAgYm9vbCBoYXNLbm93bk5vbmNlID0gY29u
dGVudFNlY3VyaXR5UG9saWN5LmFsbG93U3R5bGVXaXRoTm9uY2UoZWxlbWVudC5mYXN0R2V0QXR0
cmlidXRlKEhUTUxOYW1lczo6bm9uY2VBdHRyKSwgZWxlbWVudC5pc0luVXNlckFnZW50U2hhZG93
VHJlZSgpKTsKKyAgICBib29sIGhhc0tub3duTm9uY2UgPSBjb250ZW50U2VjdXJpdHlQb2xpY3ku
YWxsb3dTdHlsZVdpdGhOb25jZShlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oSFRNTE5hbWVzOjpub25jZUF0dHIpLCBlbGVtZW50LmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVl
KCkpOwogICAgIGlmICghY29udGVudFNlY3VyaXR5UG9saWN5LmFsbG93SW5saW5lU3R5bGUoZG9j
dW1lbnQudXJsKCksIG1fc3RhcnRUZXh0UG9zaXRpb24ubV9saW5lLCB0ZXh0LCBoYXNLbm93bk5v
bmNlKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OSw3ICsyNTksNyBAQCBib29sIFNjcmlwdEVs
ZW1lbnQ6OnJlcXVlc3RTY3JpcHQoY29uc3QgCiAKICAgICBBU1NFUlQoIW1fY2FjaGVkU2NyaXB0
KTsKICAgICBpZiAoIXN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhzb3VyY2VVcmwp
LmlzRW1wdHkoKSkgewotICAgICAgICBib29sIGhhc0tub3duTm9uY2UgPSBtX2VsZW1lbnQuZG9j
dW1lbnQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dTY3JpcHRXaXRoTm9uY2UobV9l
bGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpub25jZUF0dHIpLCBtX2VsZW1lbnQu
aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSk7CisgICAgICAgIGJvb2wgaGFzS25vd25Ob25jZSA9
IG1fZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd1Njcmlw
dFdpdGhOb25jZShtX2VsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1M
TmFtZXM6Om5vbmNlQXR0ciksIG1fZWxlbWVudC5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpKTsK
ICAgICAgICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlvbnMgPSBDYWNoZWRSZXNvdXJjZUxv
YWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpOwogICAgICAgICBvcHRpb25zLnNl
dENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb24oaGFzS25vd25Ob25jZSA/IENvbnRlbnRT
ZWN1cml0eVBvbGljeUltcG9zaXRpb246OlNraXBQb2xpY3lDaGVjayA6IENvbnRlbnRTZWN1cml0
eVBvbGljeUltcG9zaXRpb246OkRvUG9saWN5Q2hlY2spOwogCkBAIC0yNjcsNyArMjY3LDcgQEAg
Ym9vbCBTY3JpcHRFbGVtZW50OjpyZXF1ZXN0U2NyaXB0KGNvbnN0IAogCiAgICAgICAgIG1fZWxl
bWVudC5kb2N1bWVudCgpLmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT51cGdyYWRlSW5zZWN1cmVS
ZXF1ZXN0SWZOZWVkZWQocmVxdWVzdC5tdXRhYmxlUmVzb3VyY2VSZXF1ZXN0KCksIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6SW5zZWN1cmVSZXF1ZXN0VHlwZTo6TG9hZCk7CiAKLSAgICAgICAgU3Ry
aW5nIGNyb3NzT3JpZ2luTW9kZSA9IG1fZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6Y3Jvc3NvcmlnaW5BdHRyKTsKKyAgICAgICAgU3RyaW5nIGNyb3NzT3JpZ2luTW9kZSA9IG1f
ZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6Y3Jvc3Nv
cmlnaW5BdHRyKTsKICAgICAgICAgaWYgKCFjcm9zc09yaWdpbk1vZGUuaXNOdWxsKCkpIHsKICAg
ICAgICAgICAgIG1fcmVxdWVzdFVzZXNBY2Nlc3NDb250cm9sID0gdHJ1ZTsKICAgICAgICAgICAg
IFN0b3JlZENyZWRlbnRpYWxzIGFsbG93Q3JlZGVudGlhbHMgPSBlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShjcm9zc09yaWdpbk1vZGUsICJ1c2UtY3JlZGVudGlhbHMiKSA/IEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMgOiBEb05vdEFsbG93U3RvcmVkQ3JlZGVudGlhbHM7CkBAIC0zMDAsNyAr
MzAwLDcgQEAgdm9pZCBTY3JpcHRFbGVtZW50OjpleGVjdXRlU2NyaXB0KGNvbnN0IAogICAgIGlm
ICghbV9pc0V4dGVybmFsU2NyaXB0KSB7CiAgICAgICAgIEFTU0VSVChtX2VsZW1lbnQuZG9jdW1l
bnQoKS5jb250ZW50U2VjdXJpdHlQb2xpY3koKSk7CiAgICAgICAgIGNvbnN0IENvbnRlbnRTZWN1
cml0eVBvbGljeSYgY29udGVudFNlY3VyaXR5UG9saWN5ID0gKm1fZWxlbWVudC5kb2N1bWVudCgp
LmNvbnRlbnRTZWN1cml0eVBvbGljeSgpOwotICAgICAgICBib29sIGhhc0tub3duTm9uY2UgPSBj
b250ZW50U2VjdXJpdHlQb2xpY3kuYWxsb3dTY3JpcHRXaXRoTm9uY2UobV9lbGVtZW50LmZhc3RH
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpub25jZUF0dHIpLCBtX2VsZW1lbnQuaXNJblVzZXJBZ2Vu
dFNoYWRvd1RyZWUoKSk7CisgICAgICAgIGJvb2wgaGFzS25vd25Ob25jZSA9IGNvbnRlbnRTZWN1
cml0eVBvbGljeS5hbGxvd1NjcmlwdFdpdGhOb25jZShtX2VsZW1lbnQuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0ciksIG1fZWxlbWVudC5pc0luVXNl
ckFnZW50U2hhZG93VHJlZSgpKTsKICAgICAgICAgaWYgKCFjb250ZW50U2VjdXJpdHlQb2xpY3ku
YWxsb3dJbmxpbmVTY3JpcHQobV9lbGVtZW50LmRvY3VtZW50KCkudXJsKCksIG1fc3RhcnRMaW5l
TnVtYmVyLCBzb3VyY2VDb2RlLnNvdXJjZSgpLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgaGFz
S25vd25Ob25jZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1Nsb3RBc3NpZ25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vU2xvdEFzc2lnbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3
IEBAIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHNsb3ROYW1lRnJvbVMKICAgICBpZiAoaXM8
VGV4dD4oY2hpbGQpKQogICAgICAgICByZXR1cm4gU2xvdEFzc2lnbm1lbnQ6OmRlZmF1bHRTbG90
TmFtZSgpOwogCi0gICAgcmV0dXJuIHNsb3ROYW1lRnJvbUF0dHJpYnV0ZVZhbHVlKGRvd25jYXN0
PEVsZW1lbnQ+KGNoaWxkKS5mYXN0R2V0QXR0cmlidXRlKHNsb3RBdHRyKSk7CisgICAgcmV0dXJu
IHNsb3ROYW1lRnJvbUF0dHJpYnV0ZVZhbHVlKGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkKS5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNsb3RBdHRyKSk7CiB9CiAKIFNsb3RBc3NpZ25t
ZW50OjpTbG90QXNzaWdubWVudCgpCkBAIC0xMzksNyArMTM5LDcgQEAgc3RhdGljIHZvaWQgcmVj
dXJzaXZlbHlGaXJlU2xvdENoYW5nZUV2ZQogICAgIGlmICghc2hhZG93Um9vdE9mU2xvdFBhcmVu
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2hhZG93Um9vdE9mU2xvdFBhcmVudC0+aW5uZXJT
bG90RGlkQ2hhbmdlKHNsb3RFbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoc2xvdEF0dHIpKTsKKyAg
ICBzaGFkb3dSb290T2ZTbG90UGFyZW50LT5pbm5lclNsb3REaWRDaGFuZ2Uoc2xvdEVsZW1lbnQu
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzbG90QXR0cikpOwogfQogCiB2b2lkIFNs
b3RBc3NpZ25tZW50OjpkaWRDaGFuZ2VTbG90KGNvbnN0IEF0b21pY1N0cmluZyYgc2xvdEF0dHJW
YWx1ZSwgQ2hhbmdlVHlwZSBjaGFuZ2VUeXBlLCBTaGFkb3dSb290JiBzaGFkb3dSb290KQpAQCAt
MTY2LDEzICsxNjYsMTMgQEAgdm9pZCBTbG90QXNzaWdubWVudDo6ZGlkQ2hhbmdlU2xvdChjb25z
dAogCiB2b2lkIFNsb3RBc3NpZ25tZW50Ojpob3N0Q2hpbGRFbGVtZW50RGlkQ2hhbmdlKGNvbnN0
IEVsZW1lbnQmIGNoaWxkRWxlbWVudCwgU2hhZG93Um9vdCYgc2hhZG93Um9vdCkKIHsKLSAgICBk
aWRDaGFuZ2VTbG90KGNoaWxkRWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHNsb3RBdHRyKSwgQ2hh
bmdlVHlwZTo6RGlyZWN0Q2hpbGQsIHNoYWRvd1Jvb3QpOworICAgIGRpZENoYW5nZVNsb3QoY2hp
bGRFbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc2xvdEF0dHIpLCBDaGFu
Z2VUeXBlOjpEaXJlY3RDaGlsZCwgc2hhZG93Um9vdCk7CiB9CiAKIGNvbnN0IFZlY3RvcjxOb2Rl
Kj4qIFNsb3RBc3NpZ25tZW50Ojphc3NpZ25lZE5vZGVzRm9yU2xvdChjb25zdCBIVE1MU2xvdEVs
ZW1lbnQmIHNsb3RFbGVtZW50LCBTaGFkb3dSb290JiBzaGFkb3dSb290KQogewogICAgIEFTU0VS
VChzbG90RWxlbWVudC5jb250YWluaW5nU2hhZG93Um9vdCgpID09ICZzaGFkb3dSb290KTsKLSAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHNsb3ROYW1lID0gc2xvdE5hbWVGcm9tQXR0cmlidXRlVmFs
dWUoc2xvdEVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cikpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc2xvdE5hbWUgPSBzbG90TmFtZUZyb21BdHRyaWJ1dGVWYWx1ZShzbG90RWxl
bWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG5hbWVBdHRyKSk7CiAgICAgYXV0
byBpdCA9IG1fc2xvdHMuZmluZChzbG90TmFtZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXQgIT0g
bV9zbG90cy5lbmQoKSk7CiAKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lkIFNsb3RBc3NpZ25tZW50
OjpyZXNvbHZlQWxsU2xvdEVsZW1lCiAKICAgICB1bnNpZ25lZCBzbG90Q291bnQgPSBtX3Nsb3Rz
LnNpemUoKTsKICAgICBmb3IgKGF1dG8mIHNsb3RFbGVtZW50IDogZGVzY2VuZGFudHNPZlR5cGU8
SFRNTFNsb3RFbGVtZW50PihzaGFkb3dSb290KSkgewotICAgICAgICBhdXRvJiBzbG90TmFtZSA9
IHNsb3ROYW1lRnJvbUF0dHJpYnV0ZVZhbHVlKHNsb3RFbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpKTsKKyAgICAgICAgYXV0byYgc2xvdE5hbWUgPSBzbG90TmFtZUZyb21BdHRyaWJ1
dGVWYWx1ZShzbG90RWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG5hbWVB
dHRyKSk7CiAKICAgICAgICAgYXV0byBpdCA9IG1fc2xvdHMuZmluZChzbG90TmFtZSk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGl0ICE9IG1fc2xvdHMuZW5kKCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZS5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNyArMjM2LDcgQEAgSFRNTExhYmVs
RWxlbWVudCogVHJlZVNjb3BlOjpsYWJlbEVsZW1lbgogICAgICAgICBtX2xhYmVsc0J5Rm9yQXR0
cmlidXRlID0gc3RkOjptYWtlX3VuaXF1ZTxEb2N1bWVudE9yZGVyZWRNYXA+KCk7CiAKICAgICAg
ICAgZm9yIChhdXRvJiBsYWJlbCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxMYWJlbEVsZW1lbnQ+
KG1fcm9vdE5vZGUpKSB7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvclZhbHVl
ID0gbGFiZWwuZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZm9yVmFsdWUgPSBsYWJlbC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKGZvckF0dHIpOwogICAgICAgICAgICAgaWYgKCFmb3JWYWx1ZS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICAgICAgYWRkTGFiZWwoKmZvclZhbHVlLmltcGwoKSwgbGFiZWwpOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Zpc2l0ZWRMaW5rU3RhdGUuY3BwCShyZXZpc2lvbiAy
MDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVmlzaXRlZExpbmtTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgaW5saW5lIHN0YXRpYyBjb25zdCBBdG9taWNTdHJp
bmcqIGxpbmtBdAogICAgIGlmICghZWxlbWVudC5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgaWYgKGVsZW1lbnQuaXNIVE1MRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gJmVsZW1l
bnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKTsKKyAgICAgICAgcmV0dXJu
ICZlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpocmVm
QXR0cik7CiAgICAgaWYgKGVsZW1lbnQuaXNTVkdFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiAm
ZWxlbWVudC5nZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOwogICAgIHJldHVybiAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgaXNMZWdhY3lB
cHBsZVN0eWxlU3Bhbihjb25zdCBOb2RlKiAKICAgICBpZiAoIWlzPEhUTUxTcGFuRWxlbWVudD4o
bm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBkb3duY2FzdDxIVE1M
U3BhbkVsZW1lbnQ+KCpub2RlKS5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVT
cGFuQ2xhc3NTdHJpbmcoKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNwYW5FbGVtZW50Pigq
bm9kZSkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxl
U3BhbkNsYXNzU3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBib29sIGhhc05vQXR0cmlidXRlT3JPbmx5
U3R5bGVBdHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hvdWxkU3R5bGVB
dHRyaWJ1dGVCZUVtcHR5IHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSkKQEAgLTgyLDcgKzgy
LDcgQEAgc3RhdGljIGJvb2wgaGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIHVuc2lnbmVkIG1hdGNoZWRBdHRyaWJ1dGVzID0gMDsKLSAgICBp
ZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNz
U3RyaW5nKCkpCisgICAgaWYgKGVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oY2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpKQogICAgICAgICBtYXRjaGVk
QXR0cmlidXRlcysrOwogICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGUoc3R5bGVBdHRyKSAm
JiAoc2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5ID09IEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJp
YnV0ZQogICAgICAgICB8fCAhZWxlbWVudC0+aW5saW5lU3R5bGUoKSB8fCBlbGVtZW50LT5pbmxp
bmVTdHlsZSgpLT5pc0VtcHR5KCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBib29s
IEVkaXRpbmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9yCiAgICAgaWYgKCFlbGVtZW50SXNT
cGFuT3JFbGVtZW50RXF1aXZhbGVudCAmJiAhbWF0Y2hlZEF0dHJpYnV0ZXMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gZWxlbWVudCBpcyBub3QgYSBzcGFuLCBhIGh0bWwgZWxlbWVudCBlcXVp
dmFsZW50LCBvciBmb250IGVsZW1lbnQuCiAgICAgCi0gICAgaWYgKGVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjpjbGFzc0F0dHIpID09IEFwcGxlU3R5bGVTcGFuQ2xhc3MpCisg
ICAgaWYgKGVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVz
OjpjbGFzc0F0dHIpID09IEFwcGxlU3R5bGVTcGFuQ2xhc3MpCiAgICAgICAgIG1hdGNoZWRBdHRy
aWJ1dGVzKys7CiAKICAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlKEhUTUxOYW1lczo6c3R5
bGVBdHRyKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDgsMTMgKzEwOCwxMyBAQCBwcml2YXRlOgogc3RhdGljIGJvb2wgaXNJbnRlcmNoYW5nZU5ld2xp
bmVOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmcoQXBwbGVJbnRlcmNoYW5nZU5ld2xp
bmUpOwotICAgIHJldHVybiBpczxIVE1MQlJFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxIVE1M
QlJFbGVtZW50Pigqbm9kZSkuZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IGludGVyY2hh
bmdlTmV3bGluZUNsYXNzU3RyaW5nOworICAgIHJldHVybiBpczxIVE1MQlJFbGVtZW50Pihub2Rl
KSAmJiBkb3duY2FzdDxIVE1MQlJFbGVtZW50Pigqbm9kZSkuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihjbGFzc0F0dHIpID09IGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nOwog
fQogCiBzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTcGFuKGNvbnN0IE5v
ZGUqIG5vZGUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29udmVydGVk
U3BhY2VTcGFuQ2xhc3NTdHJpbmcoQXBwbGVDb252ZXJ0ZWRTcGFjZSk7Ci0gICAgcmV0dXJuIGlz
PEhUTUxFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxIVE1MRWxlbWVudD4oKm5vZGUpLmZhc3RH
ZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBjb252ZXJ0ZWRTcGFjZVNwYW5DbGFzc1N0cmluZzsK
KyAgICByZXR1cm4gaXM8SFRNTEVsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEhUTUxFbGVtZW50
Pigqbm9kZSkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjbGFzc0F0dHIpID09IGNv
bnZlcnRlZFNwYWNlU3BhbkNsYXNzU3RyaW5nOwogfQogCiBzdGF0aWMgUG9zaXRpb24gcG9zaXRp
b25Bdm9pZGluZ1ByZWNlZGluZ05vZGVzKFBvc2l0aW9uIHBvc2l0aW9uKQpAQCAtNDM2LDcgKzQz
Niw3IEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnNob3VsZE1lcmcKIAogc3RhdGlj
IGJvb2wgaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAg
ICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpICYmIGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gQXBwbGVQ
YXN0ZUFzUXVvdGF0aW9uOworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoYmxv
Y2txdW90ZVRhZykgJiYgZG93bmNhc3Q8RWxlbWVudD4obm9kZSktPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oY2xhc3NBdHRyKSA9PSBBcHBsZVBhc3RlQXNRdW90YXRpb247CiB9CiAK
IHN0YXRpYyBib29sIGlzSGVhZGVyRWxlbWVudChjb25zdCBOb2RlKiBhKQpAQCAtODk0LDcgKzg5
NCw3IEBAIHN0YXRpYyBib29sIGlzSW5saW5lTm9kZVdpdGhTdHlsZShjb25zdCAKICAgICAvLyBX
ZSBjYW4gc2tpcCBvdmVyIGVsZW1lbnRzIHdob3NlIGNsYXNzIGF0dHJpYnV0ZSBpcwogICAgIC8v
IG9uZSBvZiBvdXIgaW50ZXJuYWwgY2xhc3Nlcy4KICAgICBjb25zdCBIVE1MRWxlbWVudCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSk7Ci0gICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBjbGFzc0F0dHJpYnV0ZVZhbHVlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShjbGFzc0F0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NBdHRyaWJ1dGVW
YWx1ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oY2xhc3NBdHRy
KTsKICAgICBpZiAoY2xhc3NBdHRyaWJ1dGVWYWx1ZSA9PSBBcHBsZVRhYlNwYW5DbGFzcwogICAg
ICAgICB8fCBjbGFzc0F0dHJpYnV0ZVZhbHVlID09IEFwcGxlQ29udmVydGVkU3BhY2UKICAgICAg
ICAgfHwgY2xhc3NBdHRyaWJ1dGVWYWx1ZSA9PSBBcHBsZVBhc3RlQXNRdW90YXRpb24pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDMzMjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3OCw3ICsyNzgsNyBAQCBib29sIGlzUmVuZGVyZXJSZXBsYWNlZEVsZW1lbnQoUmVu
ZGVyT2JqCiAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqcmVu
ZGVyZXItPm5vZGUoKSk7CiAgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pihl
bGVtZW50KSB8fCBpczxIVE1MTGVnZW5kRWxlbWVudD4oZWxlbWVudCkgfHwgaXM8SFRNTFByb2dy
ZXNzRWxlbWVudD4oZWxlbWVudCkgfHwgZWxlbWVudC5oYXNUYWdOYW1lKG1ldGVyVGFnKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UoZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHJvbGVBdHRyKSwgImltZyIpKQorICAg
ICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZWxlbWVudC5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKHJvbGVBdHRyKSwgImltZyIpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRp
dGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxNCw3ICs5MTQsNyBAQCBSZWY8SFRNTEVsZW1l
bnQ+IGNyZWF0ZUhUTUxFbGVtZW50KERvY3VtCiAKIGJvb2wgaXNUYWJTcGFuTm9kZShjb25zdCBO
b2RlKiBub2RlKQogewotICAgIHJldHVybiBpczxIVE1MU3BhbkVsZW1lbnQ+KG5vZGUpICYmIGRv
d25jYXN0PEhUTUxTcGFuRWxlbWVudD4oKm5vZGUpLmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRy
KSA9PSBBcHBsZVRhYlNwYW5DbGFzczsKKyAgICByZXR1cm4gaXM8SFRNTFNwYW5FbGVtZW50Pihu
b2RlKSAmJiBkb3duY2FzdDxIVE1MU3BhbkVsZW1lbnQ+KCpub2RlKS5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGNsYXNzQXR0cikgPT0gQXBwbGVUYWJTcGFuQ2xhc3M7CiB9CiAKIGJv
b2wgaXNUYWJTcGFuVGV4dE5vZGUoY29uc3QgTm9kZSogbm9kZSkKQEAgLTEwMDAsNyArMTAwMCw3
IEBAIGJvb2wgaXNNYWlsQmxvY2txdW90ZShjb25zdCBOb2RlKiBub2RlKQogICAgIEFTU0VSVChu
b2RlKTsKICAgICBpZiAoIW5vZGUtPmhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpub2RlKS5m
YXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKSA9PSAiY2l0ZSI7CisgICAgcmV0dXJuIGRvd25jYXN0
PEhUTUxFbGVtZW50Pigqbm9kZSkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih0eXBl
QXR0cikgPT0gImNpdGUiOwogfQogCiBpbnQgY2FyZXRNaW5PZmZzZXQoY29uc3QgTm9kZSYgbm9k
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkw
LDcgKzY5MCw3IEBAIFJlZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb20KICAg
ICAgICAgYXR0YWNobWVudHMuYXBwZW5kKGF0dGFjaG1lbnQpOwogCiAgICAgZm9yIChhdXRvJiBh
dHRhY2htZW50IDogYXR0YWNobWVudHMpIHsKLSAgICAgICAgYXR0YWNobWVudC0+c2V0RmlsZShG
aWxlOjpjcmVhdGUoYXR0YWNobWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh3ZWJraXRhdHRhY2htZW50
cGF0aEF0dHIpKS5wdHIoKSk7CisgICAgICAgIGF0dGFjaG1lbnQtPnNldEZpbGUoRmlsZTo6Y3Jl
YXRlKGF0dGFjaG1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24od2Via2l0YXR0
YWNobWVudHBhdGhBdHRyKSkucHRyKCkpOwogICAgICAgICBhdHRhY2htZW50LT5yZW1vdmVBdHRy
aWJ1dGUod2Via2l0YXR0YWNobWVudHBhdGhBdHRyKTsKICAgICB9CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0JKHJldmlzaW9u
IDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgRGF0YURldGVjdGlvbjo6
aXNEYXRhRGV0ZWN0b3JMaW5rKEUKICNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDAwMDAKICAgICByZXR1cm4gW3NvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REVVJM
VGFwQW5kSG9sZFNjaGVtZXMoKSBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilkb3duY2FzdDxI
VE1MQW5jaG9yRWxlbWVudD4oZWxlbWVudCkuaHJlZigpLnByb3RvY29sKCkuY29udmVydFRvQVND
SUlMb3dlcmNhc2UoKV07CiAjZWxzZQotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVs
ZW1lbnQuZmFzdEdldEF0dHJpYnV0ZSh4X2FwcGxlX2RhdGFfZGV0ZWN0b3JzQXR0ciksICJ0cnVl
IikpCisgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZWxlbWVudC5hdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfZGF0YV9kZXRlY3RvcnNBdHRyKSwgInRydWUiKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgVVJMIHVybCA9IGRvd25jYXN0PEhUTUxBbmNob3JF
bGVtZW50PihlbGVtZW50KS5ocmVmKCk7CiAgICAgcmV0dXJuIHVybC5wcm90b2NvbElzKCJtYWls
dG8iKSB8fCB1cmwucHJvdG9jb2xJcygidGVsIik7CkBAIC0xNjcsMTIgKzE2NywxMiBAQCBib29s
IERhdGFEZXRlY3Rpb246OmlzRGF0YURldGVjdG9yTGluayhFCiAKIGJvb2wgRGF0YURldGVjdGlv
bjo6cmVxdWlyZXNFeHRlbmRlZENvbnRleHQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1
cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoeF9hcHBs
ZV9kYXRhX2RldGVjdG9yc190eXBlQXR0ciksICJjYWxlbmRhci1ldmVudCIpOworICAgIHJldHVy
biBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbih4X2FwcGxlX2RhdGFfZGV0ZWN0b3JzX3R5cGVBdHRyKSwgImNhbGVuZGFyLWV2ZW50
Iik7CiB9CiAKIFN0cmluZyBEYXRhRGV0ZWN0aW9uOjpkYXRhRGV0ZWN0b3JJZGVudGlmaWVyKEVs
ZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZSh4
X2FwcGxlX2RhdGFfZGV0ZWN0b3JzX3Jlc3VsdEF0dHIpOworICAgIHJldHVybiBlbGVtZW50LmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oeF9hcHBsZV9kYXRhX2RldGVjdG9yc19yZXN1
bHRBdHRyKTsKIH0KIAogYm9vbCBEYXRhRGV0ZWN0aW9uOjpzaG91bGRDYW5jZWxEZWZhdWx0QWN0
aW9uKEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xODQsNyArMTg0LDcgQEAgYm9vbCBEYXRhRGV0ZWN0
aW9uOjpzaG91bGRDYW5jZWxEZWZhdWx0QQogICAgIGlmIChzb2Z0TGlua19EYXRhRGV0ZWN0b3Jz
Q29yZV9ERFNob3VsZEltbWVkaWF0ZWx5U2hvd0FjdGlvblNoZWV0Rm9yVVJMKGRvd25jYXN0PEhU
TUxBbmNob3JFbGVtZW50PihlbGVtZW50KS5ocmVmKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJlc3VsdEF0dHJpYnV0ZSA9IGVsZW1lbnQu
ZmFzdEdldEF0dHJpYnV0ZSh4X2FwcGxlX2RhdGFfZGV0ZWN0b3JzX3Jlc3VsdEF0dHIpOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgcmVzdWx0QXR0cmlidXRlID0gZWxlbWVudC5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKHhfYXBwbGVfZGF0YV9kZXRlY3RvcnNfcmVzdWx0QXR0cik7
CiAgICAgaWYgKHJlc3VsdEF0dHJpYnV0ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBOU0FycmF5ICpyZXN1bHRzID0gZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPmRh
dGFEZXRlY3Rpb25SZXN1bHRzKCk7CkBAIC0yMDIsNyArMjAyLDcgQEAgYm9vbCBEYXRhRGV0ZWN0
aW9uOjpzaG91bGRDYW5jZWxEZWZhdWx0QQogI2Vsc2UKICAgICBpZiAoIWlzPEhUTUxBbmNob3JF
bGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZXF1YWxJ
Z25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoeF9hcHBsZV9kYXRhX2Rl
dGVjdG9yc0F0dHIpLCAidHJ1ZSIpKQorICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShl
bGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oeF9hcHBsZV9kYXRhX2RldGVj
dG9yc0F0dHIpLCAidHJ1ZSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3RyaW5nIHR5
cGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSh4X2FwcGxlX2RhdGFfZGV0ZWN0b3JzX3R5cGVBdHRy
KS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwogICAgIGlmICh0eXBlID09ICJtaXNjIiB8fCB0
eXBlID09ICJjYWxlbmRhci1ldmVudCIgfHwgdHlwZSA9PSAidGVsZXBob25lIikKQEAgLTI2MCw3
ICsyNjAsNyBAQCBzdGF0aWMgdm9pZCByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IoCiAgICAg
aWYgKCFlbGVtZW50UGFyZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYm9vbCBlbGVt
ZW50SXNEREFuY2hvciA9IGlzPEhUTUxBbmNob3JFbGVtZW50PihlbGVtZW50KSAmJiBlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZSh4X2FwcGxlX2RhdGFfZGV0
ZWN0b3JzQXR0ciksICJ0cnVlIik7CisgICAgYm9vbCBlbGVtZW50SXNEREFuY2hvciA9IGlzPEhU
TUxBbmNob3JFbGVtZW50PihlbGVtZW50KSAmJiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGVsZW1l
bnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih4X2FwcGxlX2RhdGFfZGV0ZWN0b3Jz
QXR0ciksICJ0cnVlIik7CiAgICAgaWYgKCFlbGVtZW50SXNEREFuY2hvcikKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yNzcsNyArMjc3LDcgQEAgc3RhdGljIGJvb2wgc2VhcmNoRm9yTGlua1JlbW92
aW5nRXhpc3RpbgogICAgIGZvciAoTm9kZSogbm9kZSA9ICZzdGFydE5vZGU7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlLCAmc3RhcnROb2RlKSkgewogICAgICAgICBpZiAo
aXM8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKSkgewogICAgICAgICAgICAgYXV0byYgYW5jaG9y
ID0gZG93bmNhc3Q8SFRNTEFuY2hvckVsZW1lbnQ+KCpub2RlKTsKLSAgICAgICAgICAgIGlmICgh
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShhbmNob3IuZmFzdEdldEF0dHJpYnV0ZSh4X2FwcGxlX2Rh
dGFfZGV0ZWN0b3JzQXR0ciksICJ0cnVlIikpCisgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoYW5jaG9yLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oeF9hcHBs
ZV9kYXRhX2RldGVjdG9yc0F0dHIpLCAidHJ1ZSIpKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9yKGFuY2hvcik7CiAg
ICAgICAgICAgICBkaWRNb2RpZnlET00gPSB0cnVlOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIHN0YXRp
YyBib29sIHNlYXJjaEZvckxpbmtSZW1vdmluZ0V4aXN0aW4KICAgICAgICAgICAgIC8vIElmIHdl
IGZvdW5kIHRoZSBlbmQgbm9kZSBhbmQgbm8gbGluaywgcmV0dXJuIGZhbHNlIHVubGVzcyBhbiBh
bmNlc3RvciBub2RlIGlzIGEgbGluay4KICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGFuY2VzdG9y
cyBub3QgdGVzdGVkIGF0IHRoaXMgcG9pbnQgYXJlIGluIHRoZSBkaXJlY3QgbGluZSBmcm9tIHNl
bGYncyBwYXJlbnQgdG8gdGhlIHRvcC4KICAgICAgICAgICAgIGZvciAoYXV0byYgYW5jaG9yIDog
YW5jZXN0b3JzT2ZUeXBlPEhUTUxBbmNob3JFbGVtZW50PihzdGFydE5vZGUpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGFuY2hvci5mYXN0R2V0QXR0cmli
dXRlKHhfYXBwbGVfZGF0YV9kZXRlY3RvcnNBdHRyKSwgInRydWUiKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoYW5jaG9yLmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oeF9hcHBsZV9kYXRhX2RldGVjdG9yc0F0dHIpLCAidHJ1ZSIpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICByZW1vdmVSZXN1bHRM
aW5rc0Zyb21BbmNob3IoYW5jaG9yKTsKICAgICAgICAgICAgICAgICBkaWRNb2RpZnlET00gPSB0
cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCShyZXZp
c2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw5ICs4Myw5IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQ
YXN0ZWJvYXJkKFBhc3RlYm8KIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGVsZW1lbnRVUkwo
RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVu
dCkgfHwgaXM8SFRNTElucHV0RWxlbWVudD4oZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBlbGVt
ZW50LmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKTsKKyAgICAgICAgcmV0dXJu
IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNyY0F0
dHIpOwogICAgIGlmIChpczxTVkdJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1
cm4gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyAgICAg
ICAgcmV0dXJuIGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihYTGlua05h
bWVzOjpocmVmQXR0cik7CiAgICAgaWYgKGlzPEhUTUxFbWJlZEVsZW1lbnQ+KGVsZW1lbnQpIHx8
IGlzPEhUTUxPYmplY3RFbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQu
aW1hZ2VTb3VyY2VVUkwoKTsKICAgICByZXR1cm4gbnVsbEF0b207CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0F1dG9maWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0F1dG9maWxsLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9B
dXRvZmlsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBBdXRvZmlsbERh
dGEgQXV0b2ZpbGxEYXRhOjpjcmVhdGVGcm9tSFRNCiAgICAgfTsKIAogCi0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmF1dG9jb21wbGV0ZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmli
dXRlVmFsdWUgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5h
bWVzOjphdXRvY29tcGxldGVBdHRyKTsKIAogICAgIC8vIDEuIElmIHRoZSBlbGVtZW50IGhhcyBu
byBhdXRvY29tcGxldGUgYXR0cmlidXRlLCB0aGVuIGp1bXAgdG8gdGhlIHN0ZXAgbGFiZWxlZCBk
ZWZhdWx0LgogICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSBudWxsQXRvbSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQmFzZVRleHRJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0Jhc2VUZXh0SW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBib29sIEJhc2VUZXh0SW5wdXRUeXBlOjppc1RleHRUeXBlKCkg
Y29uCiAKIGJvb2wgQmFzZVRleHRJbnB1dFR5cGU6OnBhdHRlcm5NaXNtYXRjaChjb25zdCBTdHJp
bmcmIHZhbHVlKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcmF3UGF0dGVybiA9
IGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKHBhdHRlcm5BdHRyKTsKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHJhd1BhdHRlcm4gPSBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihwYXR0ZXJuQXR0cik7CiAgICAgaWYgKHJhd1BhdHRlcm4uaXNOdWxsKCkgfHwgdmFs
dWUuaXNFbXB0eSgpIHx8ICFKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uKHJhd1BhdHRlcm4s
IFRleHRDYXNlU2Vuc2l0aXZlKS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBTdHJpbmcgcGF0dGVybiA9ICJeKD86IiArIHJhd1BhdHRlcm4gKyAiKSQiOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwx
MCArNjQsMTAgQEAgU3RlcFJhbmdlIERhdGVJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nZQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlv
bj4gc3RlcERlc2NyaXB0aW9uKGRhdGVEZWZhdWx0U3RlcCwgZGF0ZURlZmF1bHRTdGVwQmFzZSwg
ZGF0ZVN0ZXBTY2FsZUZhY3RvciwgU3RlcFJhbmdlOjpQYXJzZWRTdGVwVmFsdWVTaG91bGRCZUlu
dGVnZXIpOwogCi0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxl
bWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOwotICAgIGNvbnN0IERlY2ltYWwg
bWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0
ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRlKCkpKTsK
LSAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5mYXN0
R2V0QXR0cmlidXRlKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRz
OjptYXhpbXVtRGF0ZSgpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdlOjpw
YXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS5mYXN0
R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBh
cnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWlu
QXR0ciksIDApOworICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxl
bWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6
OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRlKCkpKTsKKyAgICBjb25zdCBE
ZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKG1heEF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25l
bnRzOjptYXhpbXVtRGF0ZSgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0gU3RlcFJhbmdl
OjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVsZW1lbnQoKS5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0ZXBBdHRyKSk7CiAgICAgcmV0dXJuIFN0
ZXBSYW5nZShzdGVwQmFzZSwgUmFuZ2VMaW1pdGF0aW9uczo6VmFsaWQsIG1pbmltdW0sIG1heGlt
dW0sIHN0ZXAsIHN0ZXBEZXNjcmlwdGlvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvRGF0ZVRpbWVJbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0RhdGVUaW1lSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTAg
KzY1LDEwIEBAIFN0ZXBSYW5nZSBEYXRlVGltZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFIKIHsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJhbmdlOjpTdGVwRGVzY3JpcHRpb24+
IHN0ZXBEZXNjcmlwdGlvbihkYXRlVGltZURlZmF1bHRTdGVwLCBkYXRlVGltZURlZmF1bHRTdGVw
QmFzZSwgZGF0ZVRpbWVTdGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6U2NhbGVkU3RlcFZhbHVl
U2hvdWxkQmVJbnRlZ2VyKTsKIAotICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRv
TnVtYmVyKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCAwKTsKLSAgICBjb25z
dCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmli
dXRlKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptaW5pbXVt
RGF0ZVRpbWUoKSkpOwotICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBhcnNlVG9OdW1iZXIo
ZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUo
RGF0ZUNvbXBvbmVudHM6Om1heGltdW1EYXRlVGltZSgpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBz
dGVwID0gU3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRp
b24sIGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CisgICAgY29uc3QgRGVj
aW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obWluQXR0ciksIDApOworICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9
IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
bWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1EYXRl
VGltZSgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVt
ZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6
ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bURhdGVUaW1lKCkpKTsKKyAgICBjb25z
dCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0
ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
c3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBSYW5nZUxpbWl0YXRp
b25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9EYXRlVGltZUxvY2FsSW5wdXRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9jYWxJbnB1dFR5cGUu
Y3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0RhdGVUaW1lTG9j
YWxJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwxMCArNzEsMTAgQEAgU3RlcFJh
bmdlIERhdGVUaW1lTG9jYWxJbnB1dFR5cGU6OmNyZWF0ZQogewogICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdGVwUmFuZ2U6OlN0ZXBEZXNjcmlwdGlvbj4gc3RlcERlc2NyaXB0aW9u
KGRhdGVUaW1lTG9jYWxEZWZhdWx0U3RlcCwgZGF0ZVRpbWVMb2NhbERlZmF1bHRTdGVwQmFzZSwg
ZGF0ZVRpbWVMb2NhbFN0ZXBTY2FsZUZhY3RvciwgU3RlcFJhbmdlOjpTY2FsZWRTdGVwVmFsdWVT
aG91bGRCZUludGVnZXIpOwogCi0gICAgY29uc3QgRGVjaW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9O
dW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIDApOwotICAgIGNvbnN0
IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1
dGUobWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1E
YXRlVGltZSgpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihl
bGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShE
YXRlQ29tcG9uZW50czo6bWF4aW11bURhdGVUaW1lKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0
ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlv
biwgZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKKyAgICBjb25zdCBEZWNp
bWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihtaW5BdHRyKSwgMCk7CisgICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbiht
aW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bURhdGVU
aW1lKCkpKTsKKyAgICBjb25zdCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1l
bnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heEF0dHIpLCBEZWNpbWFsOjpm
cm9tRG91YmxlKERhdGVDb21wb25lbnRzOjptYXhpbXVtRGF0ZVRpbWUoKSkpOworICAgIGNvbnN0
IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3Rl
cERlc2NyaXB0aW9uLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihz
dGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIFJhbmdlTGltaXRhdGlv
bnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBzdGVwRGVzY3JpcHRpb24pOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVk
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEZvcm1B
c3NvY2lhdGVkRWxlbWVudDo6cmVtb3ZlZEZyb20oCiAKIEhUTUxGb3JtRWxlbWVudCogRm9ybUFz
c29jaWF0ZWRFbGVtZW50OjpmaW5kQXNzb2NpYXRlZEZvcm0oY29uc3QgSFRNTEVsZW1lbnQqIGVs
ZW1lbnQsIEhUTUxGb3JtRWxlbWVudCogY3VycmVudEFzc29jaWF0ZWRGb3JtKQogewotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZm9ybUlkKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0
dHIpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1JZChlbGVtZW50LT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKGZvcm1BdHRyKSk7CiAgICAgaWYgKCFmb3JtSWQuaXNOdWxs
KCkgJiYgZWxlbWVudC0+aW5Eb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIFRoZSBIVE1MNSBzcGVj
IHNheXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAgICAgICAg
IC8vIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBkb2N1bWVudCB0byBoYXZlIGFuIElEIHRoYXQg
ZXF1YWwgdG8KQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6
c2V0Q3VzdG9tVmFsCiAKIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjpyZXNldEZvcm1BdHRy
aWJ1dGVUYXJnZXRPYnNlcnZlcigpCiB7Ci0gICAgbV9mb3JtQXR0cmlidXRlVGFyZ2V0T2JzZXJ2
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZvcm1BdHRyaWJ1dGVUYXJnZXRPYnNlcnZlcj4oYXNIVE1M
RWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoZm9ybUF0dHIpLCAqdGhpcyk7CisgICAgbV9mb3Jt
QXR0cmlidXRlVGFyZ2V0T2JzZXJ2ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZvcm1BdHRyaWJ1dGVU
YXJnZXRPYnNlcnZlcj4oYXNIVE1MRWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oZm9ybUF0dHIpLCAqdGhpcyk7CiB9CiAKIHZvaWQgRm9ybUFzc29jaWF0ZWRFbGVtZW50
Ojpmb3JtQXR0cmlidXRlVGFyZ2V0Q2hhbmdlZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsy
NzYsNyBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50OjpjYW5TdGFydFNlbGVjdGlvCiAKIGJvb2wg
SFRNTEFuY2hvckVsZW1lbnQ6OmRyYWdnYWJsZSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoZHJhZ2dhYmxlQXR0cik7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
ZHJhZ2dhYmxlQXR0cik7CiAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZh
bHVlLCAidHJ1ZSIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJmYWxzZSIpKQpAQCAtMjg2LDcgKzI4Niw3IEBAIGJv
b2wgSFRNTEFuY2hvckVsZW1lbnQ6OmRyYWdnYWJsZSgpIGNvbnMKIAogVVJMIEhUTUxBbmNob3JF
bGVtZW50OjpocmVmKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS5jb21wbGV0ZVVS
TChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoZmFzdEdldEF0dHJpYnV0ZShocmVm
QXR0cikpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihocmVm
QXR0cikpKTsKIH0KIAogdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0SHJlZihjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKQpAQCAtMzE5LDcgKzMxOSw3IEBAIGludCBIVE1MQW5jaG9yRWxlbWVu
dDo6dGFiSW5kZXgoKSBjb25zdAogCiBTdHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OnRhcmdldCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7CisgICAg
cmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odGFyZ2V0QXR0cik7CiB9CiAK
IFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6b3JpZ2luKCkgY29uc3QKQEAgLTM1Miw3ICszNTIs
NyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZW5kUGluZ3MoY29uc3QgCiAgICAgaWYgKCFm
YXN0SGFzQXR0cmlidXRlKHBpbmdBdHRyKSB8fCAhZG9jdW1lbnQoKS5zZXR0aW5ncygpIHx8ICFk
b2N1bWVudCgpLnNldHRpbmdzKCktPmh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBTcGFjZVNwbGl0U3RyaW5nIHBpbmdVUkxzKGZhc3RHZXRBdHRyaWJ1
dGUocGluZ0F0dHIpLCBmYWxzZSk7CisgICAgU3BhY2VTcGxpdFN0cmluZyBwaW5nVVJMcyhhdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHBpbmdBdHRyKSwgZmFsc2UpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwaW5nVVJMcy5zaXplKCk7IGkrKykKICAgICAgICAgUGluZ0xv
YWRlcjo6c2VuZFBpbmcoKmRvY3VtZW50KCkuZnJhbWUoKSwgZG9jdW1lbnQoKS5jb21wbGV0ZVVS
TChwaW5nVVJMc1tpXSksIGRlc3RpbmF0aW9uVVJMKTsKIH0KQEAgLTM2NiwxNCArMzY2LDE0IEBA
IHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKEV2ZW4KICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nQnVpbGRlciB1cmw7Ci0gICAgdXJsLmFwcGVuZChzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cikpKTsKKyAgICB1
cmwuYXBwZW5kKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKGhyZWZBdHRyKSkpOwogICAgIGFwcGVuZFNlcnZlck1hcE1vdXNl
UG9zaXRpb24odXJsLCAqZXZlbnQpOwogICAgIFVSTCBrdXJsID0gZG9jdW1lbnQoKS5jb21wbGV0
ZVVSTCh1cmwudG9TdHJpbmcoKSk7CiAKICAgICBhdXRvIGRvd25sb2FkQXR0cmlidXRlID0gbnVs
bEF0b207CiAjaWYgRU5BQkxFKERPV05MT0FEX0FUVFJJQlVURSkKICAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5kb3dubG9hZEF0dHJpYnV0ZUVuYWJsZWQo
KSkKLSAgICAgICAgZG93bmxvYWRBdHRyaWJ1dGUgPSBmYXN0R2V0QXR0cmlidXRlKGRvd25sb2Fk
QXR0cik7CisgICAgICAgIGRvd25sb2FkQXR0cmlidXRlID0gYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihkb3dubG9hZEF0dHIpOwogI2VuZGlmCiAKICAgICBmcmFtZS0+bG9hZGVyKCku
dXJsU2VsZWN0ZWQoa3VybCwgdGFyZ2V0KCksIGV2ZW50LCBMb2NrSGlzdG9yeTo6Tm8sIExvY2tC
YWNrRm9yd2FyZExpc3Q6Ok5vLCBoYXNSZWwoUmVsYXRpb25Ob1JlZmVycmVyKSA/IE5ldmVyU2Vu
ZFJlZmVycmVyIDogTWF5YmVTZW5kUmVmZXJyZXIsIGRvY3VtZW50KCkuc2hvdWxkT3BlbkV4dGVy
bmFsVVJMc1BvbGljeVRvUHJvcGFnYXRlKCksIGRvd25sb2FkQXR0cmlidXRlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDIwMzMyMikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiBpbmxpbmUgTGlua0hhc2ggSFRNTEFuY2hvckVs
ZW1lbnQ6OnZpc2l0ZWRMaW5rSGFzaCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2NhY2hlZFZpc2l0
ZWRMaW5rSGFzaCkKLSAgICAgICAgbV9jYWNoZWRWaXNpdGVkTGlua0hhc2ggPSBXZWJDb3JlOjp2
aXNpdGVkTGlua0hhc2goZG9jdW1lbnQoKS5iYXNlVVJMKCksIGZhc3RHZXRBdHRyaWJ1dGUoSFRN
TE5hbWVzOjpocmVmQXR0cikpOworICAgICAgICBtX2NhY2hlZFZpc2l0ZWRMaW5rSGFzaCA9IFdl
YkNvcmU6OnZpc2l0ZWRMaW5rSGFzaChkb2N1bWVudCgpLmJhc2VVUkwoKSwgYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CiAgICAgcmV0dXJuIG1f
Y2FjaGVkVmlzaXRlZExpbmtIYXNoOyAKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQXBwbGV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQXBwbGV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOSArMTI1
LDkgQEAgdm9pZCBIVE1MQXBwbGV0RWxlbWVudDo6dXBkYXRlV2lkZ2V0KFBsdQogICAgIFZlY3Rv
cjxTdHJpbmc+IHBhcmFtVmFsdWVzOwogCiAgICAgcGFyYW1OYW1lcy5hcHBlbmQoImNvZGUiKTsK
LSAgICBwYXJhbVZhbHVlcy5hcHBlbmQoZmFzdEdldEF0dHJpYnV0ZShjb2RlQXR0cikuc3RyaW5n
KCkpOworICAgIHBhcmFtVmFsdWVzLmFwcGVuZChhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKGNvZGVBdHRyKS5zdHJpbmcoKSk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvZGVC
YXNlID0gZmFzdEdldEF0dHJpYnV0ZShjb2RlYmFzZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgY29kZUJhc2UgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGNvZGViYXNl
QXR0cik7CiAgICAgaWYgKCFjb2RlQmFzZS5pc051bGwoKSkgewogICAgICAgICBwYXJhbU5hbWVz
LmFwcGVuZChBU0NJSUxpdGVyYWwoImNvZGVCYXNlIikpOwogICAgICAgICBwYXJhbVZhbHVlcy5h
cHBlbmQoY29kZUJhc2Uuc3RyaW5nKCkpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgSFRNTEFw
cGxldEVsZW1lbnQ6OnVwZGF0ZVdpZGdldChQbHUKICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5k
KG5hbWUuc3RyaW5nKCkpOwogICAgIH0KIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJjaGl2
ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYXJjaGl2ZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJjaGl2ZUF0dHIp
OwogICAgIGlmICghYXJjaGl2ZS5pc051bGwoKSkgewogICAgICAgICBwYXJhbU5hbWVzLmFwcGVu
ZChBU0NJSUxpdGVyYWwoImFyY2hpdmUiKSk7CiAgICAgICAgIHBhcmFtVmFsdWVzLmFwcGVuZChh
cmNoaXZlLnN0cmluZygpKTsKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIEhUTUxBcHBsZXRFbGVt
ZW50Ojp1cGRhdGVXaWRnZXQoUGx1CiAgICAgcGFyYW1OYW1lcy5hcHBlbmQoQVNDSUlMaXRlcmFs
KCJiYXNlVVJMIikpOwogICAgIHBhcmFtVmFsdWVzLmFwcGVuZChkb2N1bWVudCgpLmJhc2VVUkwo
KS5zdHJpbmcoKSk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1heVNjcmlwdCA9IGZhc3RH
ZXRBdHRyaWJ1dGUobWF5c2NyaXB0QXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYXlT
Y3JpcHQgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1heXNjcmlwdEF0dHIpOwog
ICAgIGlmICghbWF5U2NyaXB0LmlzTnVsbCgpKSB7CiAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5k
KEFTQ0lJTGl0ZXJhbCgibWF5U2NyaXB0IikpOwogICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQo
bWF5U2NyaXB0LnN0cmluZygpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFy
ZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDcgKzI1MSw3IEBAIGJvb2wgSFRN
TEFyZWFFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY28KIAogU3RyaW5nIEhUTUxBcmVhRWxlbWVu
dDo6dGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh0YXJnZXRB
dHRyKTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih0YXJnZXRB
dHRyKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1l
bnRFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQXR0YWNobWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBA
IHZvaWQgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpwYXJzZUF0dHJpYnUKIAogU3RyaW5nIEhUTUxB
dHRhY2htZW50RWxlbWVudDo6YXR0YWNobWVudFRpdGxlKCkgY29uc3QKIHsKLSAgICBhdXRvJiB0
aXRsZSA9IGZhc3RHZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICBhdXRvJiB0aXRsZSA9IGF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odGl0bGVBdHRyKTsKICAgICBpZiAoIXRpdGxl
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRpdGxlOwogICAgIHJldHVybiBtX2ZpbGUgPyBt
X2ZpbGUtPm5hbWUoKSA6IFN0cmluZygpOwpAQCAtODksNyArODksNyBAQCBTdHJpbmcgSFRNTEF0
dGFjaG1lbnRFbGVtZW50OjphdHRhY2htZW50CiAKIFN0cmluZyBIVE1MQXR0YWNobWVudEVsZW1l
bnQ6OmF0dGFjaG1lbnRUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0
ZSh0eXBlQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
dHlwZUF0dHIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxCYXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxCYXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDcgQEAgYm9vbCBIVE1MQmFzZUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKGNvbgogCiBTdHJp
bmcgSFRNTEJhc2VFbGVtZW50Ojp0YXJnZXQoKSBjb25zdAogewotICAgIHJldHVybiBmYXN0R2V0
QXR0cmlidXRlKHRhcmdldEF0dHIpOworICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKHRhcmdldEF0dHIpOwogfQogCiBVUkwgSFRNTEJhc2VFbGVtZW50OjpocmVmKCkg
Y29uc3QKQEAgLTgyLDcgKzgyLDcgQEAgVVJMIEhUTUxCYXNlRWxlbWVudDo6aHJlZigpIGNvbnN0
CiAgICAgLy8gYmFzZSBlbGVtZW50cyBsaWtlIHRoaXMgb25lIGNhbiBiZSB1c2VkIHRvIHNldCB0
aGF0IGJhc2UgVVJMLiBUaHVzIHdlIG5lZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSB0byB0aGUgZG9j
dW1lbnQncwogICAgIC8vIFVSTCBhbmQgaWdub3JlIHRoZSBiYXNlIFVSTC4KIAotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRy
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihocmVmQXR0cik7CiAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gZG9jdW1lbnQoKS51cmwoKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzAsNyArMzMwLDcgQEAgdm9pZCBIVE1MQm9keUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cgog
ewogICAgIEhUTUxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAK
LSAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGZhc3RH
ZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpKSk7CisgICAgYWRkU3VicmVzb3VyY2VVUkwodXJs
cywgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGJhY2tncm91bmRBdHRyKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29sIEhUTUxCdXR0b25FbGVtZW50Ojppc1VSTEF0
dHJpYnV0ZShjCiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEJ1dHRvbkVsZW1lbnQ6OnZhbHVl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOworICAg
IHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0cik7CiB9CiAK
IGJvb2wgSFRNTEJ1dHRvbkVsZW1lbnQ6OmNvbXB1dGVXaWxsVmFsaWRhdGUoKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDIw
MzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjgsOCArMzI4LDggQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVz
ZXQoKQogCiAgICAgYm9vbCBoYWRJbWFnZUJ1ZmZlciA9IGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigp
OwogCi0gICAgaW50IHcgPSBsaW1pdFRvT25seUhUTUxOb25OZWdhdGl2ZShmYXN0R2V0QXR0cmli
dXRlKHdpZHRoQXR0ciksIGRlZmF1bHRXaWR0aCk7Ci0gICAgaW50IGggPSBsaW1pdFRvT25seUhU
TUxOb25OZWdhdGl2ZShmYXN0R2V0QXR0cmlidXRlKGhlaWdodEF0dHIpLCBkZWZhdWx0SGVpZ2h0
KTsKKyAgICBpbnQgdyA9IGxpbWl0VG9Pbmx5SFRNTE5vbk5lZ2F0aXZlKGF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24od2lkdGhBdHRyKSwgZGVmYXVsdFdpZHRoKTsKKyAgICBpbnQgaCA9
IGxpbWl0VG9Pbmx5SFRNTE5vbk5lZ2F0aXZlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oaGVpZ2h0QXR0ciksIGRlZmF1bHRIZWlnaHQpOwogCiAgICAgaWYgKG1fY29udGV4dFN0YXRl
U2F2ZXIpIHsKICAgICAgICAgLy8gUmVzZXQgdG8gdGhlIGluaXRpYWwgZ3JhcGhpY3MgY29udGV4
dCBzdGF0ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJldmlzaW9u
IDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTERvY3Vt
ZW50OjpiZ0NvbG8KICAgICBhdXRvKiBib2R5RWxlbWVudCA9IGJvZHkoKTsKICAgICBpZiAoIWJv
ZHlFbGVtZW50KQogICAgICAgICByZXR1cm4gZW1wdHlBdG9tOwotICAgIHJldHVybiBib2R5RWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZShiZ2NvbG9yQXR0cik7CisgICAgcmV0dXJuIGJvZHlFbGVt
ZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGJnY29sb3JBdHRyKTsKIH0KIAog
dm9pZCBIVE1MRG9jdW1lbnQ6OnNldEJnQ29sb3IoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTE1
OCw3ICsxNTgsNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxEb2N1bWVudDo6ZmdDb2xvCiAg
ICAgYXV0byogYm9keUVsZW1lbnQgPSBib2R5KCk7CiAgICAgaWYgKCFib2R5RWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIGVtcHR5QXRvbTsKLSAgICByZXR1cm4gYm9keUVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUodGV4dEF0dHIpOworICAgIHJldHVybiBib2R5RWxlbWVudC0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbih0ZXh0QXR0cik7CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50Ojpz
ZXRGZ0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0xNzIsNyArMTcyLDcgQEAgY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OmFsaW5rQwogICAgIGF1dG8qIGJvZHlFbGVtZW50
ID0gYm9keSgpOwogICAgIGlmICghYm9keUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbXB0eUF0
b207Ci0gICAgcmV0dXJuIGJvZHlFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGFsaW5rQXR0cik7
CisgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGFsaW5rQXR0cik7CiB9CiAKIHZvaWQgSFRNTERvY3VtZW50OjpzZXRBbGlua0NvbG9yKGNvbnN0
IFN0cmluZyYgdmFsdWUpCkBAIC0xODYsNyArMTg2LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MRG9jdW1lbnQ6OmxpbmtDbwogICAgIGF1dG8qIGJvZHlFbGVtZW50ID0gYm9keSgpOwogICAg
IGlmICghYm9keUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbXB0eUF0b207Ci0gICAgcmV0dXJu
IGJvZHlFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGxpbmtBdHRyKTsKKyAgICByZXR1cm4gYm9k
eUVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obGlua0F0dHIpOwogfQog
CiB2b2lkIEhUTUxEb2N1bWVudDo6c2V0TGlua0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBA
IC0yMDAsNyArMjAwLDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRG9jdW1lbnQ6OnZsaW5r
QwogICAgIGF1dG8qIGJvZHlFbGVtZW50ID0gYm9keSgpOwogICAgIGlmICghYm9keUVsZW1lbnQp
CiAgICAgICAgIHJldHVybiBlbXB0eUF0b207Ci0gICAgcmV0dXJuIGJvZHlFbGVtZW50LT5mYXN0
R2V0QXR0cmlidXRlKHZsaW5rQXR0cik7CisgICAgcmV0dXJuIGJvZHlFbGVtZW50LT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZsaW5rQXR0cik7CiB9CiAKIHZvaWQgSFRNTERvY3Vt
ZW50OjpzZXRWbGlua0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsNyBAQCBz
dGF0aWMgaW5saW5lIENvbnRlbnRFZGl0YWJsZVR5cGUgY29udGVuCiAKIHN0YXRpYyBDb250ZW50
RWRpdGFibGVUeXBlIGNvbnRlbnRFZGl0YWJsZVR5cGUoY29uc3QgSFRNTEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgcmV0dXJuIGNvbnRlbnRFZGl0YWJsZVR5cGUoZWxlbWVudC5mYXN0R2V0QXR0
cmlidXRlKGNvbnRlbnRlZGl0YWJsZUF0dHIpKTsKKyAgICByZXR1cm4gY29udGVudEVkaXRhYmxl
VHlwZShlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oY29udGVudGVkaXRh
YmxlQXR0cikpOwogfQogCiB2b2lkIEhUTUxFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50
YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSwgTXV0YWJsZVN0eWxlUHJvcGVydGllcyYgc3R5bGUpCkBAIC01MzYsNyArNTM2
LDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIHRvVmFsaQogCiBjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxFbGVtZW50OjpkaXIoKSBjb25zdAogewotICAgIHJldHVybiB0b1Zh
bGlkRGlyVmFsdWUoZmFzdEdldEF0dHJpYnV0ZShkaXJBdHRyKSk7CisgICAgcmV0dXJuIHRvVmFs
aWREaXJWYWx1ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRpckF0dHIpKTsKIH0K
IAogdm9pZCBIVE1MRWxlbWVudDo6c2V0RGlyKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBA
IC03NzcsNyArNzc3LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0Q29udGVudEVkaXRhYmxlKGNv
bgogCiBib29sIEhUTUxFbGVtZW50OjpkcmFnZ2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYXN0R2V0QXR0cmlidXRlKGRyYWdnYWJsZUF0
dHIpLCAidHJ1ZSIpOworICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShh
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRyYWdnYWJsZUF0dHIpLCAidHJ1ZSIpOwog
fQogCiB2b2lkIEhUTUxFbGVtZW50OjpzZXREcmFnZ2FibGUoYm9vbCB2YWx1ZSkKQEAgLTgxMSw3
ICs4MTEsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCBzCiAKIFN0
cmluZyBIVE1MRWxlbWVudDo6dGl0bGUoKSBjb25zdAogewotICAgIHJldHVybiBmYXN0R2V0QXR0
cmlidXRlKHRpdGxlQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24odGl0bGVBdHRyKTsKIH0KIAogaW50IEhUTUxFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0
CkBAIC04MjMsNyArODIzLDcgQEAgaW50IEhUTUxFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0CiAK
IFRyYW5zbGF0ZUF0dHJpYnV0ZU1vZGUgSFRNTEVsZW1lbnQ6OnRyYW5zbGF0ZUF0dHJpYnV0ZU1v
ZGUoKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0
cmlidXRlKHRyYW5zbGF0ZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBh
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHRyYW5zbGF0ZUF0dHIpOwogCiAgICAgaWYg
KHZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gVHJhbnNsYXRlQXR0cmlidXRlSW5oZXJp
dDsKQEAgLTkxNyw3ICs5MTcsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
Y29uc3QgCiAKIGJvb2wgSFRNTEVsZW1lbnQ6Omhhc0RpcmVjdGlvbkF1dG8oKSBjb25zdAogewot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGlyZWN0aW9uID0gZmFzdEdldEF0dHJpYnV0ZShkaXJB
dHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGRpcmVjdGlvbiA9IGF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oZGlyQXR0cik7CiAgICAgcmV0dXJuIChoYXNUYWdOYW1lKGJkaVRh
ZykgJiYgZGlyZWN0aW9uLmlzTnVsbCgpKSB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShkaXJlY3Rpb24sICJhdXRvIik7CiB9CiAKQEAgLTk1NCw3ICs5NTQsNyBAQCBUZXh0RGlyZWN0
aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0CiAKICAgICAgICAgLy8gU2tpcCBlbGVtZW50
cyB3aXRoIHZhbGlkIGRpciBhdHRyaWJ1dGUKICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2Rl
KSkgewotICAgICAgICAgICAgQXRvbWljU3RyaW5nIGRpckF0dHJpYnV0ZVZhbHVlID0gZG93bmNh
c3Q8RWxlbWVudD4oKm5vZGUpLmZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0cik7CisgICAgICAgICAg
ICBBdG9taWNTdHJpbmcgZGlyQXR0cmlidXRlVmFsdWUgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9k
ZSkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihkaXJBdHRyKTsKICAgICAgICAgICAg
IGlmIChpc0xUUk9yUlRMSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0ZVZhbHVlKSB8fCBlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkaXJBdHRyaWJ1dGVWYWx1ZSwgImF1dG8iKSkgewogICAg
ICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigq
bm9kZSwgdGhpcyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIx
NywxNCArMjE3LDE0IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoY28K
IAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRW1iZWRFbGVtZW50OjppbWFnZVNvdXJjZVVSTCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cik7CisgICAgcmV0
dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3JjQXR0cik7CiB9CiAKIHZvaWQg
SFRNTEVtYmVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0
PFVSTD4mIHVybHMpIGNvbnN0CiB7CiAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6YWRkU3Vi
cmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMpOwogCi0gICAgYWRkU3VicmVzb3VyY2VVUkwodXJs
cywgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpKSk7Cisg
ICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChhdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNyY0F0dHIpKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24g
MjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Ojp+SFRNTEZvcm1Db250cm9sCiAKIFN0cmluZyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3Jt
RW5jdHlwZSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtRW5jdHlwZUF0
dHIgPSBmYXN0R2V0QXR0cmlidXRlKGZvcm1lbmN0eXBlQXR0cik7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBmb3JtRW5jdHlwZUF0dHIgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGZvcm1lbmN0eXBlQXR0cik7CiAgICAgaWYgKGZvcm1FbmN0eXBlQXR0ci5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAgcmV0dXJuIEZvcm1TdWJtaXNzaW9uOjpB
dHRyaWJ1dGVzOjpwYXJzZUVuY29kaW5nVHlwZShmb3JtRW5jdHlwZUF0dHIpOwpAQCAtOTAsNyAr
OTAsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldEZvcm1FbmN0CiAKIFN0cmlu
ZyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpmb3JtTWV0aG9kKCkgY29uc3QKIHsKLSAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGZvcm1NZXRob2RBdHRyID0gZmFzdEdldEF0dHJpYnV0ZShmb3JtbWV0
aG9kQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtTWV0aG9kQXR0ciA9IGF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZm9ybW1ldGhvZEF0dHIpOwogICAgIGlmIChmb3Jt
TWV0aG9kQXR0ci5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAgICAg
cmV0dXJuIEZvcm1TdWJtaXNzaW9uOjpBdHRyaWJ1dGVzOjptZXRob2RTdHJpbmcoRm9ybVN1Ym1p
c3Npb246OkF0dHJpYnV0ZXM6OnBhcnNlTWV0aG9kVHlwZShmb3JtTWV0aG9kQXR0cikpOwpAQCAt
MTA4LDcgKzEwOCw3IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Zm9ybU5vVmFsaWQK
IAogU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmZvcm1BY3Rpb24oKSBjb25zdAogewot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKGZvcm1hY3Rp
b25BdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihmb3JtYWN0aW9uQXR0cik7CiAgICAgaWYgKHZhbHVlLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGRvY3VtZW50KCkudXJsKCk7CiAgICAgcmV0dXJuIGdldFVSTEF0
dHJpYnV0ZShmb3JtYWN0aW9uQXR0cik7CkBAIC01NzAsNyArNTcwLDcgQEAgSFRNTEZvcm1FbGVt
ZW50KiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OgogCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmF1dG9jb3JyZWN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF1dG9j
b3JyZWN0VmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKGF1dG9jb3JyZWN0QXR0cik7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBhdXRvY29ycmVjdFZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihhdXRvY29ycmVjdEF0dHIpOwogICAgIGlmICghYXV0b2NvcnJlY3RWYWx1ZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
YXV0b2NvcnJlY3RWYWx1ZSwgIm9mZiIpOwogICAgIGlmIChIVE1MRm9ybUVsZW1lbnQqIGZvcm0g
PSB0aGlzLT5mb3JtKCkpCkBAIC01ODUsNyArNTg1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpzZXRBdXRvY29ycgogCiBXZWJBdXRvY2FwaXRhbGl6ZVR5cGUgSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6YXV0b2NhcGl0YWxpemVUeXBlKCkgY29uc3QKIHsKLSAgICBXZWJBdXRvY2Fw
aXRhbGl6ZVR5cGUgdHlwZSA9IGF1dG9jYXBpdGFsaXplVHlwZUZvckF0dHJpYnV0ZVZhbHVlKGZh
c3RHZXRBdHRyaWJ1dGUoYXV0b2NhcGl0YWxpemVBdHRyKSk7CisgICAgV2ViQXV0b2NhcGl0YWxp
emVUeXBlIHR5cGUgPSBhdXRvY2FwaXRhbGl6ZVR5cGVGb3JBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGF1dG9jYXBpdGFsaXplQXR0cikpOwogICAgIGlmICh0
eXBlID09IFdlYkF1dG9jYXBpdGFsaXplVHlwZURlZmF1bHQpIHsKICAgICAgICAgaWYgKEhUTUxG
b3JtRWxlbWVudCogZm9ybSA9IHRoaXMtPmZvcm0oKSkKICAgICAgICAgICAgIHJldHVybiBmb3Jt
LT5hdXRvY2FwaXRhbGl6ZVR5cGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDcgKzM5Niw3IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50OjpyZXNldCgpCiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50OjphdXRvY29y
cmVjdCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdXRvY29ycmVjdFZhbHVl
ID0gZmFzdEdldEF0dHJpYnV0ZShhdXRvY29ycmVjdEF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXV0b2NvcnJlY3RWYWx1ZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
YXV0b2NvcnJlY3RBdHRyKTsKICAgICBpZiAoIWF1dG9jb3JyZWN0VmFsdWUuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGF1dG9jb3JyZWN0
VmFsdWUsICJvZmYiKTsKICAgICBpZiAoSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gdGhpcy0+Zm9y
bSgpKQpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRBdXRvY29y
cmVjdChib28KIAogV2ViQXV0b2NhcGl0YWxpemVUeXBlIEhUTUxGb3JtRWxlbWVudDo6YXV0b2Nh
cGl0YWxpemVUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYXV0b2NhcGl0YWxpemVUeXBlRm9y
QXR0cmlidXRlVmFsdWUoZmFzdEdldEF0dHJpYnV0ZShhdXRvY2FwaXRhbGl6ZUF0dHIpKTsKKyAg
ICByZXR1cm4gYXV0b2NhcGl0YWxpemVUeXBlRm9yQXR0cmlidXRlVmFsdWUoYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihhdXRvY2FwaXRhbGl6ZUF0dHIpKTsKIH0KIAogY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MRm9ybUVsZW1lbnQ6OmF1dG9jYXBpdGFsaXplKCkgY29uc3QKQEAgLTY4
Miw3ICs2ODIsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6bm9WYWxpZGF0ZSgpIGNvbnN0CiAv
LyAoRGFyaW4gQWRsZXIpIHJlbW92ZWQgdGhpcywgc29tZW9uZSBhZGRlZCBpdCBiYWNrLCBzbyBJ
IGFtIGxlYXZpbmcgaXQgaW4gZm9yIG5vdy4KIFN0cmluZyBIVE1MRm9ybUVsZW1lbnQ6OmFjdGlv
bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoYWN0aW9uQXR0cik7Cisg
ICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWN0aW9uQXR0cik7CiB9
CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRBY3Rpb24oY29uc3QgU3RyaW5nICZ2YWx1ZSkK
QEAgLTcwNyw3ICs3MDcsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0TWV0aG9kKGNvbnN0
IFN0CiAKIFN0cmluZyBIVE1MRm9ybUVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGZhc3RHZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24odGFyZ2V0QXR0cik7CiB9CiAKIGJvb2wgSFRNTEZvcm1FbGVt
ZW50Ojp3YXNVc2VyU3VibWl0dGVkKCkgY29uc3QKQEAgLTg3OSw3ICs4NzksNyBAQCB2b2lkIEhU
TUxGb3JtRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lCiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50
OjpzaG91bGRBdXRvY29tcGxldGUoKSBjb25zdAogewotICAgIHJldHVybiAhZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UoZmFzdEdldEF0dHJpYnV0ZShhdXRvY29tcGxldGVBdHRyKSwgIm9m
ZiIpOworICAgIHJldHVybiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihhdXRvY29tcGxldGVBdHRyKSwgIm9mZiIpOwogfQogCiB2
b2lkIEhUTUxGb3JtRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKQEAgLTkwOSw3ICs5
MDksNyBAQCBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxGb3JtRWxlbWVudDo6YXV0CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gb24oIm9uIiwgQXRvbWljU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0
cmluZz4gb2ZmKCJvZmYiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKIAot
ICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGZhc3RHZXRBdHRyaWJ1dGUoYXV0b2Nv
bXBsZXRlQXR0ciksICJvZmYiKSA/IG9mZiA6IG9uOworICAgIHJldHVybiBlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXV0b2NvbXBsZXRlQXR0
ciksICJvZmYiKSA/IG9mZiA6IG9uOwogfQogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJldmlzaW9uIDIwMzMy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgVVJMIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjps
b2NhdGlvbigpIGNvbgogewogICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKHNyY2RvY0F0dHIpKQog
ICAgICAgICByZXR1cm4gVVJMKFBhcnNlZFVSTFN0cmluZywgImFib3V0OnNyY2RvYyIpOwotICAg
IHJldHVybiBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cikp
OworICAgIHJldHVybiBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oc3JjQXR0cikpOwogfQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpz
ZXRMb2NhdGlvbihjb25zdCBTdHJpbmcmIHN0cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEh0bWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxIdG1sRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEh0bWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCB2
b2lkIEhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRCeVBhcnNlcigpCiAgICAgaWYgKCFkb2N1bWVu
dExvYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYW5p
ZmVzdCA9IGZhc3RHZXRBdHRyaWJ1dGUobWFuaWZlc3RBdHRyKTsKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIG1hbmlmZXN0ID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtYW5pZmVz
dEF0dHIpOwogICAgIGlmIChtYW5pZmVzdC5pc0VtcHR5KCkpCiAgICAgICAgIGRvY3VtZW50TG9h
ZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5zZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdCgp
OwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNw
cAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgSFRNTEltYWdl
RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHIKIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW1h
Z2VFbGVtZW50OjppbWFnZVNvdXJjZVVSTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYmVzdEZp
dEltYWdlVVJMLmlzRW1wdHkoKSA/IGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cikgOiBtX2Jlc3RG
aXRJbWFnZVVSTDsKKyAgICByZXR1cm4gbV9iZXN0Rml0SW1hZ2VVUkwuaXNFbXB0eSgpID8gYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzcmNBdHRyKSA6IG1fYmVzdEZpdEltYWdlVVJM
OwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEJlc3RGaXRVUkxBbmREUFJGcm9tSW1h
Z2VDYW5kaWRhdGUoY29uc3QgSW1hZ2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSkKQEAgLTE1NCwxMSAr
MTU0LDExIEBAIEltYWdlQ2FuZGlkYXRlIEhUTUxJbWFnZUVsZW1lbnQ6OmJlc3RGaXQKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvJiBzb3VyY2UgPSBkb3duY2FzdDxIVE1MU291
cmNlRWxlbWVudD4oKmNoaWxkKTsKIAotICAgICAgICBhdXRvJiBzcmNzZXQgPSBzb3VyY2UuZmFz
dEdldEF0dHJpYnV0ZShzcmNzZXRBdHRyKTsKKyAgICAgICAgYXV0byYgc3Jjc2V0ID0gc291cmNl
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3Jjc2V0QXR0cik7CiAgICAgICAgIGlm
IChzcmNzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0
byYgdHlwZUF0dHJpYnV0ZSA9IHNvdXJjZS5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKKyAg
ICAgICAgYXV0byYgdHlwZUF0dHJpYnV0ZSA9IHNvdXJjZS5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKHR5cGVBdHRyKTsKICAgICAgICAgaWYgKCF0eXBlQXR0cmlidXRlLmlzTnVsbCgp
KSB7CiAgICAgICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVBdHRyaWJ1dGUuc3RyaW5nKCk7CiAg
ICAgICAgICAgICB0eXBlLnRydW5jYXRlKHR5cGUuZmluZCgnOycpKTsKQEAgLTE3Niw3ICsxNzYs
NyBAQCBJbWFnZUNhbmRpZGF0ZSBIVE1MSW1hZ2VFbGVtZW50OjpiZXN0Rml0CiAgICAgICAgIGlm
ICghZXZhbHVhdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gc291
cmNlU2l6ZSA9IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoZG9jdW1lbnQoKSwgc291cmNlLmZhc3RHZXRB
dHRyaWJ1dGUoc2l6ZXNBdHRyKS5zdHJpbmcoKSk7CisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9
IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoZG9jdW1lbnQoKSwgc291cmNlLmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oc2l6ZXNBdHRyKS5zdHJpbmcoKSk7CiAgICAgICAgIGF1dG8gY2FuZGlk
YXRlID0gYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhkb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCksIG51bGxBdG9tLCBzcmNzZXQsIHNvdXJjZVNpemUpOwogICAgICAgICBpZiAo
IWNhbmRpZGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOwpAQCAt
MTkwLDggKzE5MCw4IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2VsZWN0SW1hZ2VTb3VyY2UK
ICAgICBJbWFnZUNhbmRpZGF0ZSBjYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRnJvbVBpY3R1cmVF
bGVtZW50KCk7CiAgICAgaWYgKGNhbmRpZGF0ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gSWYg
d2UgZG9uJ3QgaGF2ZSBhIDxwaWN0dXJlPiBvciBkaWRuJ3QgZmluZCBhIHNvdXJjZSwgdGhlbiB3
ZSB1c2Ugb3VyIG93biBhdHRyaWJ1dGVzLgotICAgICAgICBmbG9hdCBzb3VyY2VTaXplID0gcGFy
c2VTaXplc0F0dHJpYnV0ZShkb2N1bWVudCgpLCBmYXN0R2V0QXR0cmlidXRlKHNpemVzQXR0ciku
c3RyaW5nKCkpOwotICAgICAgICBjYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRy
aWJ1dGVzKGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgZmFzdEdldEF0dHJpYnV0ZShz
cmNBdHRyKSwgZmFzdEdldEF0dHJpYnV0ZShzcmNzZXRBdHRyKSwgc291cmNlU2l6ZSk7CisgICAg
ICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKGRvY3VtZW50KCksIGF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc2l6ZXNBdHRyKS5zdHJpbmcoKSk7CisgICAg
ICAgIGNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNy
Y0F0dHIpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNyY3NldEF0dHIpLCBzb3Vy
Y2VTaXplKTsKICAgICB9CiAgICAgc2V0QmVzdEZpdFVSTEFuZERQUkZyb21JbWFnZUNhbmRpZGF0
ZShjYW5kaWRhdGUpOwogICAgIG1faW1hZ2VMb2FkZXIudXBkYXRlRnJvbUVsZW1lbnRJZ25vcmlu
Z1ByZXZpb3VzRXJyb3IoKTsKQEAgLTI1MywxMSArMjUzLDExIEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTEltYWdlRWxlbWVudDo6YWwKICAgICAvLyBsZXRzIGZpZ3VyZSBvdXQgdGhlIGFsdCB0
ZXh0Li4gbWFnaWMgc3R1ZmYKICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk4L1JFQy1o
dG1sNDAtMTk5ODA0MjQvYXBwZW5kaXgvbm90ZXMuaHRtbCNhbHRnZW4KICAgICAvLyBhbHNvIGhl
YXZpbHkgZGlzY3Vzc2VkIGJ5IEhpeGllIG9uIGJ1Z3ppbGxhCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhbHQgPSBmYXN0R2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYWx0ID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhbHRBdHRyKTsKICAg
ICBpZiAoIWFsdC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGFsdDsKICAgICAvLyBmYWxsIGJh
Y2sgdG8gdGl0bGUgYXR0cmlidXRlCi0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUodGl0bGVB
dHRyKTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih0aXRsZUF0
dHIpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gSFRNTEltYWdlRWxlbWVudDo6Y3Jl
YXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYgc3R5bGUsIGNvbnN0IFJlbmRlclRyZWVQ
b3NpdGlvbiYpCkBAIC0zNzUsNyArMzc1LDcgQEAgaW50IEhUTUxJbWFnZUVsZW1lbnQ6OndpZHRo
KGJvb2wgaWdub3JlUAogICAgIGlmICghcmVuZGVyZXIoKSkgewogICAgICAgICAvLyBjaGVjayB0
aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhlbCB2YWx1ZQogICAgICAgICBi
b29sIG9rOwotICAgICAgICBpbnQgd2lkdGggPSBmYXN0R2V0QXR0cmlidXRlKHdpZHRoQXR0ciku
dG9JbnQoJm9rKTsKKyAgICAgICAgaW50IHdpZHRoID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbih3aWR0aEF0dHIpLnRvSW50KCZvayk7CiAgICAgICAgIGlmIChvaykKICAgICAgICAg
ICAgIHJldHVybiB3aWR0aDsKIApAQCAtNDAxLDcgKzQwMSw3IEBAIGludCBIVE1MSW1hZ2VFbGVt
ZW50OjpoZWlnaHQoYm9vbCBpZ25vcmUKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAg
Ly8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUK
ICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgaW50IGhlaWdodCA9IGZhc3RHZXRBdHRyaWJ1dGUo
aGVpZ2h0QXR0cikudG9JbnQoJm9rKTsKKyAgICAgICAgaW50IGhlaWdodCA9IGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oaGVpZ2h0QXR0cikudG9JbnQoJm9rKTsKICAgICAgICAgaWYg
KG9rKQogICAgICAgICAgICAgcmV0dXJuIGhlaWdodDsKIApAQCAtNDg2LDEzICs0ODYsMTMgQEAg
Ym9vbCBIVE1MSW1hZ2VFbGVtZW50OjptYXRjaGVzQ2FzZUZvbGRlZAogCiBjb25zdCBBdG9taWNT
dHJpbmcmIEhUTUxJbWFnZUVsZW1lbnQ6OmFsdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RH
ZXRBdHRyaWJ1dGUoYWx0QXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oYWx0QXR0cik7CiB9CiAKIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6ZHJhZ2dhYmxl
KCkgY29uc3QKIHsKICAgICAvLyBJbWFnZSBlbGVtZW50cyBhcmUgZHJhZ2dhYmxlIGJ5IGRlZmF1
bHQuCi0gICAgcmV0dXJuICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYXN0R2V0QXR0
cmlidXRlKGRyYWdnYWJsZUF0dHIpLCAiZmFsc2UiKTsKKyAgICByZXR1cm4gIWVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZHJhZ2dh
YmxlQXR0ciksICJmYWxzZSIpOwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEhlaWdo
dChpbnQgdmFsdWUpCkBAIC01MDIsNyArNTAyLDcgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50Ojpz
ZXRIZWlnaHQoaW50IHZhbAogCiBVUkwgSFRNTEltYWdlRWxlbWVudDo6c3JjKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChmYXN0R2V0QXR0cmlidXRlKHNyY0F0
dHIpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChhdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKHNyY0F0dHIpKTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50Ojpz
ZXRTcmMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIEhUTUxJ
bWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0CiAKICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1
cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGltYWdlU291cmNlVVJMKCkpKTsKICAgICAvLyBG
SVhNRTogV2hhdCBhYm91dCB3aGVuIHRoZSB1c2VtYXAgYXR0cmlidXRlIGJlZ2lucyB3aXRoICIj
Ij8KLSAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGZh
c3RHZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxz
LCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
dXNlbWFwQXR0cikpKTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpkaWRNb3ZlVG9OZXdE
b2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpCkBAIC01NjIsNyArNTYyLDcgQEAgYm9vbCBI
VE1MSW1hZ2VFbGVtZW50Ojppc1NlcnZlck1hcCgpIGNvbgogICAgIGlmICghZmFzdEhhc0F0dHJp
YnV0ZShpc21hcEF0dHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHVzZW1hcCA9IGZhc3RHZXRBdHRyaWJ1dGUodXNlbWFwQXR0cik7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB1c2VtYXAgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KHVzZW1hcEF0dHIpOwogCiAgICAgLy8gSWYgdGhlIHVzZW1hcCBhdHRyaWJ1dGUgc3RhcnRzIHdp
dGggJyMnLCBpdCByZWZlcnMgdG8gYSBtYXAgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQuCiAgICAg
aWYgKHVzZW1hcC5zdHJpbmcoKVswXSA9PSAnIycpCkBAIC01NzgsNyArNTc4LDcgQEAgdm9pZCBI
VE1MSW1hZ2VFbGVtZW50OjpzZXRDcm9zc09yaWdpbihjbwogCiBTdHJpbmcgSFRNTEltYWdlRWxl
bWVudDo6Y3Jvc3NPcmlnaW4oKSBjb25zdAogewotICAgIHJldHVybiBwYXJzZUNPUlNTZXR0aW5n
c0F0dHJpYnV0ZShmYXN0R2V0QXR0cmlidXRlKGNyb3Nzb3JpZ2luQXR0cikpOworICAgIHJldHVy
biBwYXJzZUNPUlNTZXR0aW5nc0F0dHJpYnV0ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKGNyb3Nzb3JpZ2luQXR0cikpOwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFR5cGUoY29uc3QgQXRvCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQogewog
ICAgIEFTU0VSVChtX2lucHV0VHlwZSk7Ci0gICAgYXV0byBuZXdUeXBlID0gSW5wdXRUeXBlOjpj
cmVhdGUoKnRoaXMsIGZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpKTsKKyAgICBhdXRvIG5ld1R5
cGUgPSBJbnB1dFR5cGU6OmNyZWF0ZSgqdGhpcywgYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbih0eXBlQXR0cikpOwogICAgIGJvb2wgaGFkVHlwZSA9IG1faGFzVHlwZTsKICAgICBtX2hh
c1R5cGUgPSB0cnVlOwogICAgIGlmIChtX2lucHV0VHlwZS0+Zm9ybUNvbnRyb2xUeXBlKCkgPT0g
bmV3VHlwZS0+Zm9ybUNvbnRyb2xUeXBlKCkpCkBAIC00ODIsNyArNDgyLDcgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICAgICAgbV92YWx1ZUlmRGlydHkgPSBTdHJp
bmcoKTsKICAgICB9CiAgICAgaWYgKCFkaWRTdG9yZVZhbHVlICYmIHdpbGxTdG9yZVZhbHVlKSB7
Ci0gICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZVN0cmluZyA9IGZhc3RHZXRBdHRyaWJ1dGUodmFs
dWVBdHRyKTsKKyAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlU3RyaW5nID0gYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbih2YWx1ZUF0dHIpOwogICAgICAgICBtX3ZhbHVlSWZEaXJ0eSA9
IHNhbml0aXplVmFsdWUodmFsdWVTdHJpbmcpOwogICAgIH0gZWxzZQogICAgICAgICB1cGRhdGVW
YWx1ZUlmTmVlZGVkKCk7CkBAIC02MjMsNyArNjIzLDcgQEAgaW5saW5lIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6aW5pdGlhbGl6ZQogICAgIEFTU0VSVChtX3BhcnNpbmdJblByb2dyZXNzKTsKICAg
ICBBU1NFUlQoIW1faW5wdXRUeXBlKTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9
IGZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odHlwZUF0dHIpOwogICAgIGlmICh0
eXBlLmlzTnVsbCgpKSB7CiAgICAgICAgIG1faW5wdXRUeXBlID0gSW5wdXRUeXBlOjpjcmVhdGVU
ZXh0KCp0aGlzKTsKICAgICAgICAgZW5zdXJlVXNlckFnZW50U2hhZG93Um9vdCgpOwpAQCAtODA1
LDEyICs4MDUsMTIgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdFRleHQoKSBjb25zdAog
ICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTgvUkVDLWh0bWw0MC0xOTk4MDQyNC9hcHBl
bmRpeC9ub3Rlcy5odG1sI2FsdGdlbgogICAgIC8vIGFsc28gaGVhdmlseSBkaXNjdXNzZWQgYnkg
SGl4aWUgb24gYnVnemlsbGEKICAgICAvLyBub3RlIHRoaXMgaXMgaW50ZW50aW9uYWxseSBkaWZm
ZXJlbnQgdG8gSFRNTEltYWdlRWxlbWVudDo6YWx0VGV4dCgpCi0gICAgU3RyaW5nIGFsdCA9IGZh
c3RHZXRBdHRyaWJ1dGUoYWx0QXR0cik7CisgICAgU3RyaW5nIGFsdCA9IGF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oYWx0QXR0cik7CiAgICAgLy8gZmFsbCBiYWNrIHRvIHRpdGxlIGF0
dHJpYnV0ZQogICAgIGlmIChhbHQuaXNOdWxsKCkpCi0gICAgICAgIGFsdCA9IGZhc3RHZXRBdHRy
aWJ1dGUodGl0bGVBdHRyKTsKKyAgICAgICAgYWx0ID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbih0aXRsZUF0dHIpOwogICAgIGlmIChhbHQuaXNOdWxsKCkpCi0gICAgICAgIGFsdCA9
IGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKKyAgICAgICAgYWx0ID0gYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbih2YWx1ZUF0dHIpOwogICAgIGlmIChhbHQuaXNFbXB0eSgpKQog
ICAgICAgICBhbHQgPSBpbnB1dEVsZW1lbnRBbHRUZXh0KCk7CiAgICAgcmV0dXJuIGFsdDsKQEAg
LTk1Nyw3ICs5NTcsNyBAQCBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6dmFsdWUoKSBjb25zdAog
ICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKIAotICAgIEF0
b21pY1N0cmluZyB2YWx1ZVN0cmluZyA9IGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKKyAg
ICBBdG9taWNTdHJpbmcgdmFsdWVTdHJpbmcgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHZhbHVlQXR0cik7CiAgICAgdmFsdWUgPSBzYW5pdGl6ZVZhbHVlKHZhbHVlU3RyaW5nKTsK
ICAgICBpZiAoIXZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdmFsdWU7CkBAIC0xMjAy
LDcgKzEyMDIsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKGNvCiAK
IFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0VmFsdWUoKSBjb25zdAogewotICAgIHJl
dHVybiBmYXN0R2V0QXR0cmlidXRlKHZhbHVlQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24odmFsdWVBdHRyKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKQEAgLTEyNTYsMjIgKzEy
NTYsMjIgQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHBhcnNlQWNjZXB0QXR0cmlidQogCiBWZWN0
b3I8U3RyaW5nPiBIVE1MSW5wdXRFbGVtZW50OjphY2NlcHRNSU1FVHlwZXMoKQogewotICAgIHJl
dHVybiBwYXJzZUFjY2VwdEF0dHJpYnV0ZShmYXN0R2V0QXR0cmlidXRlKGFjY2VwdEF0dHIpLCBp
c1ZhbGlkTUlNRVR5cGUpOworICAgIHJldHVybiBwYXJzZUFjY2VwdEF0dHJpYnV0ZShhdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFjY2VwdEF0dHIpLCBpc1ZhbGlkTUlNRVR5cGUpOwog
fQogCiBWZWN0b3I8U3RyaW5nPiBIVE1MSW5wdXRFbGVtZW50OjphY2NlcHRGaWxlRXh0ZW5zaW9u
cygpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQWNjZXB0QXR0cmlidXRlKGZhc3RHZXRBdHRyaWJ1dGUo
YWNjZXB0QXR0ciksIGlzVmFsaWRGaWxlRXh0ZW5zaW9uKTsKKyAgICByZXR1cm4gcGFyc2VBY2Nl
cHRBdHRyaWJ1dGUoYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhY2NlcHRBdHRyKSwg
aXNWYWxpZEZpbGVFeHRlbnNpb24pOwogfQogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6YWNj
ZXB0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhY2NlcHRBdHRyKTsK
KyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhY2NlcHRBdHRyKTsK
IH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGZhc3RHZXRBdHRyaWJ1dGUoYWx0QXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oYWx0QXR0cik7CiB9CiAKIHVuc2lnbmVkIEhUTUxJbnB1dEVsZW1lbnQ6
OmVmZmVjdGl2ZU1heExlbmd0aCgpIGNvbnN0CkBAIC0xMzAwLDcgKzEzMDAsNyBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldFNpemUodW5zaWduZWQgCiAKIFVSTCBIVE1MSW5wdXRFbGVtZW50
OjpzcmMoKSBjb25zdAogewotICAgIHJldHVybiBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGZhc3RH
ZXRBdHRyaWJ1dGUoc3JjQXR0cikpOworICAgIHJldHVybiBkb2N1bWVudCgpLmNvbXBsZXRlVVJM
KGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3JjQXR0cikpOwogfQogCiB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldEF1dG9GaWxsZWQoYm9vbCBhdXRvRmlsbGVkKQpAQCAtMTU3OCw3
ICsxNTc4LDcgQEAgSFRNTERhdGFMaXN0RWxlbWVudCogSFRNTElucHV0RWxlbWVudDo6ZAogICAg
IGlmICghbV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHRyZWVTY29wZSgpLmdl
dEVsZW1lbnRCeUlkKGZhc3RHZXRBdHRyaWJ1dGUobGlzdEF0dHIpKTsKKyAgICBFbGVtZW50KiBl
bGVtZW50ID0gdHJlZVNjb3BlKCkuZ2V0RWxlbWVudEJ5SWQoYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihsaXN0QXR0cikpOwogICAgIGlmICghaXM8SFRNTERhdGFMaXN0RWxlbWVudD4o
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xNTg4LDcgKzE1ODgsNyBA
QCBIVE1MRGF0YUxpc3RFbGVtZW50KiBIVE1MSW5wdXRFbGVtZW50OjpkCiB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnJlc2V0TGlzdEF0dHJpYnV0ZVRhcmdldE9ic2VydmVyKCkKIHsKICAgICBpZiAo
aW5Eb2N1bWVudCgpKQotICAgICAgICBtX2xpc3RBdHRyaWJ1dGVUYXJnZXRPYnNlcnZlciA9IHN0
ZDo6bWFrZV91bmlxdWU8TGlzdEF0dHJpYnV0ZVRhcmdldE9ic2VydmVyPihmYXN0R2V0QXR0cmli
dXRlKGxpc3RBdHRyKSwgdGhpcyk7CisgICAgICAgIG1fbGlzdEF0dHJpYnV0ZVRhcmdldE9ic2Vy
dmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaXN0QXR0cmlidXRlVGFyZ2V0T2JzZXJ2ZXI+KGF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obGlzdEF0dHIpLCB0aGlzKTsKICAgICBlbHNlCiAg
ICAgICAgIG1fbGlzdEF0dHJpYnV0ZVRhcmdldE9ic2VydmVyID0gbnVsbHB0cjsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMz
MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgSFRNTEtleWdlbkVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKGMKIAogYm9vbCBIVE1MS2V5Z2VuRWxlbWVudDo6aXNLZXl0eXBlUlNBKCkgY29u
c3QKIHsKLSAgICBjb25zdCBhdXRvJiBrZXlUeXBlID0gZmFzdEdldEF0dHJpYnV0ZShrZXl0eXBl
QXR0cik7CisgICAgY29uc3QgYXV0byYga2V5VHlwZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oa2V5dHlwZUF0dHIpOwogICAgIHJldHVybiBrZXlUeXBlLmlzTnVsbCgpIHx8IGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleVR5cGUsICJyc2EiKTsKIH0KIApAQCAtMTE5
LDcgKzExOSw3IEBAIGJvb2wgSFRNTEtleWdlbkVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEYKICAg
ICAvLyBPbmx5IFJTQSBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLgogICAgIGlmICghaXNLZXl0
eXBlUlNBKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTdHJpbmcgdmFsdWUgPSBzaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoc2hhZG93U2VsZWN0KCktPnNlbGVjdGVkSW5k
ZXgoKSwgZmFzdEdldEF0dHJpYnV0ZShjaGFsbGVuZ2VBdHRyKSwgZG9jdW1lbnQoKS5iYXNlVVJM
KCkpOworICAgIFN0cmluZyB2YWx1ZSA9IHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmlu
ZyhzaGFkb3dTZWxlY3QoKS0+c2VsZWN0ZWRJbmRleCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKGNoYWxsZW5nZUF0dHIpLCBkb2N1bWVudCgpLmJhc2VVUkwoKSk7CiAgICAgaWYg
KHZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZW5jb2RlZF92YWx1
ZXMuYXBwZW5kRGF0YShuYW1lKCksIHZhbHVlLnV0ZjgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExJRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExJRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBA
QCB2b2lkIEhUTUxMSUVsZW1lbnQ6OmRpZEF0dGFjaFJlbmRlcmVycygpCiAgICAgaWYgKCFpc0lu
TGlzdCkKICAgICAgICAgbGlzdEl0ZW1SZW5kZXJlci5zZXROb3RJbkxpc3QodHJ1ZSk7CiAKLSAg
ICBwYXJzZVZhbHVlKGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKSk7CisgICAgcGFyc2VWYWx1
ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVlQXR0cikpOwogfQogCiBpbmxp
bmUgdm9pZCBIVE1MTElFbGVtZW50OjpwYXJzZVZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJKHJldmlz
aW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgYm9vbCBIVE1MTGFiZWxFbGVtZW50Ojpp
c0ZvY3VzYWJsZSgpIGNvbgogCiBMYWJlbGFibGVFbGVtZW50KiBIVE1MTGFiZWxFbGVtZW50Ojpj
b250cm9sKCkKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbnRyb2xJZCA9IGZhc3RHZXRB
dHRyaWJ1dGUoZm9yQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb250cm9sSWQgPSBh
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGZvckF0dHIpOwogICAgIGlmIChjb250cm9s
SWQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gU2VhcmNoIHRoZSBjaGlsZHJlbiBhbmQgZGVzY2Vu
ZGFudHMgb2YgdGhlIGxhYmVsIGVsZW1lbnQgZm9yIGEgZm9ybSBlbGVtZW50LgogICAgICAgICAv
LyBwZXIgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5odG1sI3RoZS1sYWJl
bC1lbGVtZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVu
dDo6c2V0Q3Jvc3NPcmlnaW4oY29uCiAKIFN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OmNyb3NzT3Jp
Z2luKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcGFyc2VDT1JTU2V0dGluZ3NBdHRyaWJ1dGUoZmFz
dEdldEF0dHJpYnV0ZShjcm9zc29yaWdpbkF0dHIpKTsKKyAgICByZXR1cm4gcGFyc2VDT1JTU2V0
dGluZ3NBdHRyaWJ1dGUoYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjcm9zc29yaWdp
bkF0dHIpKTsKIH0KIAogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQpAQCAtMjE0LDE0
ICsyMTQsMTQgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQogCiAgICAgVVJMIHVy
bCA9IGdldE5vbkVtcHR5VVJMQXR0cmlidXRlKGhyZWZBdHRyKTsKIAotICAgIGlmICghbV9saW5r
TG9hZGVyLmxvYWRMaW5rKG1fcmVsQXR0cmlidXRlLCB1cmwsIGZhc3RHZXRBdHRyaWJ1dGUoYXNB
dHRyKSwgZmFzdEdldEF0dHJpYnV0ZShjcm9zc29yaWdpbkF0dHIpLCBkb2N1bWVudCgpKSkKKyAg
ICBpZiAoIW1fbGlua0xvYWRlci5sb2FkTGluayhtX3JlbEF0dHJpYnV0ZSwgdXJsLCBhdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFzQXR0ciksIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oY3Jvc3NvcmlnaW5BdHRyKSwgZG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGJvb2wgdHJlYXRBc1N0eWxlU2hlZXQgPSBtX3JlbEF0dHJpYnV0ZS5pc1N0eWxlU2hl
ZXQKICAgICAgICAgfHwgKGRvY3VtZW50KCkuc2V0dGluZ3MoKSAmJiBkb2N1bWVudCgpLnNldHRp
bmdzKCktPnRyZWF0c0FueVRleHRDU1NMaW5rQXNTdHlsZXNoZWV0KCkgJiYgbV90eXBlLmNvbnRh
aW5zSWdub3JpbmdBU0NJSUNhc2UoInRleHQvY3NzIikpOwogCiAgICAgaWYgKG1fZGlzYWJsZWRT
dGF0ZSAhPSBEaXNhYmxlZCAmJiB0cmVhdEFzU3R5bGVTaGVldCAmJiBkb2N1bWVudCgpLmZyYW1l
KCkgJiYgdXJsLmlzVmFsaWQoKSkgewotICAgICAgICBBdG9taWNTdHJpbmcgY2hhcnNldCA9IGZh
c3RHZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpOworICAgICAgICBBdG9taWNTdHJpbmcgY2hhcnNl
dCA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oY2hhcnNldEF0dHIpOwogICAgICAg
ICBpZiAoY2hhcnNldC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAg
ICAgY2hhcnNldCA9IGRvY3VtZW50KCkuY2hhcnNldCgpOwogICAgICAgICAKQEAgLTI1Nyw3ICsy
NTcsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCiAgICAgICAgIENhY2hlZFJl
c291cmNlUmVxdWVzdCByZXF1ZXN0KHVybCwgY2hhcnNldCwgcHJpb3JpdHkpOwogICAgICAgICBy
ZXF1ZXN0LnNldEluaXRpYXRvcih0aGlzKTsKIAotICAgICAgICBpZiAoZG9jdW1lbnQoKS5jb250
ZW50U2VjdXJpdHlQb2xpY3koKS0+YWxsb3dTdHlsZVdpdGhOb25jZShmYXN0R2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6bm9uY2VBdHRyKSkpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50KCkuY29udGVu
dFNlY3VyaXR5UG9saWN5KCktPmFsbG93U3R5bGVXaXRoTm9uY2UoYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihIVE1MTmFtZXM6Om5vbmNlQXR0cikpKSB7CiAgICAgICAgICAgICBSZXNv
dXJjZUxvYWRlck9wdGlvbnMgb3B0aW9ucyA9IENhY2hlZFJlc291cmNlTG9hZGVyOjpkZWZhdWx0
Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCk7CiAgICAgICAgICAgICBvcHRpb25zLnNldENvbnRlbnRT
ZWN1cml0eVBvbGljeUltcG9zaXRpb24oQ29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbjo6
U2tpcFBvbGljeUNoZWNrKTsKICAgICAgICAgICAgIHJlcXVlc3Quc2V0T3B0aW9ucyhvcHRpb25z
KTsKQEAgLTQ3OCwyMiArNDc4LDIyIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpoYW5kbGVDbGlj
ayhFdmVudCYKIAogVVJMIEhUTUxMaW5rRWxlbWVudDo6aHJlZigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGRvY3VtZW50KCkuY29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cikpOwor
ICAgIHJldHVybiBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oaHJlZkF0dHIpKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MTGlua0Vs
ZW1lbnQ6OnJlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUocmVsQXR0
cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocmVsQXR0cik7
CiB9CiAKIFN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGZhc3RHZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24odGFyZ2V0QXR0cik7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTExpbmtFbGVtZW50Ojp0eXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFzdEdldEF0
dHJpYnV0ZSh0eXBlQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24odHlwZUF0dHIpOwogfQogCiBPcHRpb25hbDxMaW5rSWNvblR5cGU+IEhUTUxMaW5rRWxl
bWVudDo6aWNvblR5cGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFy
cXVlZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1h
cnF1ZWVFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcg
QEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnQ6OnN0b3AoKQogCiB1bnNpZ25lZCBIVE1MTWFycXVl
ZUVsZW1lbnQ6OnNjcm9sbEFtb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGxpbWl0VG9Pbmx5
SFRNTE5vbk5lZ2F0aXZlKGZhc3RHZXRBdHRyaWJ1dGUoc2Nyb2xsYW1vdW50QXR0ciksIFJlbmRl
clN0eWxlOjppbml0aWFsTWFycXVlZUluY3JlbWVudCgpLmludFZhbHVlKCkpOworICAgIHJldHVy
biBsaW1pdFRvT25seUhUTUxOb25OZWdhdGl2ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHNjcm9sbGFtb3VudEF0dHIpLCBSZW5kZXJTdHlsZTo6aW5pdGlhbE1hcnF1ZWVJbmNyZW1l
bnQoKS5pbnRWYWx1ZSgpKTsKIH0KICAgICAKIHZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50OjpzZXRT
Y3JvbGxBbW91bnQodW5zaWduZWQgc2Nyb2xsQW1vdW50KQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZv
aWQgSFRNTE1hcnF1ZWVFbGVtZW50OjpzZXRTY3JvbGxBbW91bnQKICAgICAKIHVuc2lnbmVkIEhU
TUxNYXJxdWVlRWxlbWVudDo6c2Nyb2xsRGVsYXkoKSBjb25zdAogewotICAgIHJldHVybiBsaW1p
dFRvT25seUhUTUxOb25OZWdhdGl2ZShmYXN0R2V0QXR0cmlidXRlKHNjcm9sbGRlbGF5QXR0ciks
IFJlbmRlclN0eWxlOjppbml0aWFsTWFycXVlZVNwZWVkKCkpOworICAgIHJldHVybiBsaW1pdFRv
T25seUhUTUxOb25OZWdhdGl2ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNjcm9s
bGRlbGF5QXR0ciksIFJlbmRlclN0eWxlOjppbml0aWFsTWFycXVlZVNwZWVkKCkpOwogfQogCiB2
b2lkIEhUTUxNYXJxdWVlRWxlbWVudDo6c2V0U2Nyb2xsRGVsYXkodW5zaWduZWQgc2Nyb2xsRGVs
YXkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnQ6OnNldFNjcm9s
bERlbGF5KAogaW50IEhUTUxNYXJxdWVlRWxlbWVudDo6bG9vcCgpIGNvbnN0CiB7CiAgICAgYm9v
bCBvazsKLSAgICBpbnQgbG9vcFZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZShsb29wQXR0cikudG9J
bnQoJm9rKTsKKyAgICBpbnQgbG9vcFZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihsb29wQXR0cikudG9JbnQoJm9rKTsKICAgICByZXR1cm4gb2sgJiYgbG9vcFZhbHVlID4g
MCA/IGxvb3BWYWx1ZSA6IC0xOwogfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzMsOSArNzczLDkg
QEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MTQogICAgICAgICBtX2lu
QWN0aXZlRG9jdW1lbnQgPSB0cnVlOwogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgICAgICBpZiAo
bV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBUWSAmJiAhZmFzdEdldEF0dHJpYnV0ZShzcmNB
dHRyKS5pc0VtcHR5KCkgJiYgbV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5nUGVybWl0dGVkKCp0
aGlzKSkKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlID09IE5FVFdPUktfRU1QVFkgJiYgIWF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3JjQXR0cikuaXNFbXB0eSgpICYmIG1fbWVk
aWFTZXNzaW9uLT5kYXRhTG9hZGluZ1Blcm1pdHRlZCgqdGhpcykpCiAjZWxzZQotICAgICAgICBp
ZiAobV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBUWSAmJiAhZmFzdEdldEF0dHJpYnV0ZShz
cmNBdHRyKS5pc0VtcHR5KCkpCisgICAgICAgIGlmIChtX25ldHdvcmtTdGF0ZSA9PSBORVRXT1JL
X0VNUFRZICYmICFhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNyY0F0dHIpLmlzRW1w
dHkoKSkKICNlbmRpZgogICAgICAgICAgICAgc2NoZWR1bGVEZWxheWVkQWN0aW9uKExvYWRNZWRp
YVJlc291cmNlKTsKICAgICB9CkBAIC0xMDIxLDcgKzEwMjEsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNldENyb3NzT3JpZ2luKGNvCiAKIFN0cmluZyBIVE1MTWVkaWFFbGVtZW50Ojpjcm9z
c09yaWdpbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBhcnNlQ09SU1NldHRpbmdzQXR0cmlidXRl
KGZhc3RHZXRBdHRyaWJ1dGUoY3Jvc3NvcmlnaW5BdHRyKSk7CisgICAgcmV0dXJuIHBhcnNlQ09S
U1NldHRpbmdzQXR0cmlidXRlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oY3Jvc3Nv
cmlnaW5BdHRyKSk7CiB9CiAKIEhUTUxNZWRpYUVsZW1lbnQ6Ok5ldHdvcmtTdGF0ZSBIVE1MTWVk
aWFFbGVtZW50OjpuZXR3b3JrU3RhdGUoKSBjb25zdApAQCAtNjgyMiw3ICs2ODIyLDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjptYXlSZXN1bWVQbGF5YmFjawogU3RyaW5nIEhUTUxNZWRpYUVs
ZW1lbnQ6Om1lZGlhU2Vzc2lvblRpdGxlKCkgY29uc3QKIHsKICAgICBpZiAoZmFzdEhhc0F0dHJp
YnV0ZSh0aXRsZUF0dHIpKQotICAgICAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh0aXRsZUF0
dHIpOworICAgICAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih0aXRs
ZUF0dHIpOwogICAgIAogICAgIHJldHVybiBtX2N1cnJlbnRTcmM7CiB9CkBAIC02OTU0LDcgKzY5
NTQsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmRvZXNIYXZlQXR0cmlidXRlCiB7CiAgICAg
UXVhbGlmaWVkTmFtZSBhdHRyaWJ1dGVOYW1lKG51bGxBdG9tLCBhdHRyaWJ1dGUsIG51bGxBdG9t
KTsKIAotICAgIEF0b21pY1N0cmluZyBlbGVtZW50VmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKGF0
dHJpYnV0ZU5hbWUpOworICAgIEF0b21pY1N0cmluZyBlbGVtZW50VmFsdWUgPSBhdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKGF0dHJpYnV0ZU5hbWUpOwogICAgIGlmIChlbGVtZW50VmFs
dWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjks
NyArNjksNyBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudDo6cHJvY2VzcygpCiAgICAgaWYgKCFpbkRv
Y3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29u
dGVudFZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZShjb250ZW50QXR0cik7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBjb250ZW50VmFsdWUgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGNvbnRlbnRBdHRyKTsKICAgICBpZiAoY29udGVudFZhbHVlLmlzTnVsbCgpKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTg0LDE5ICs4NCwxOSBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudDo6cHJvY2Vz
cygpCiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSgpLCAi
cmVmZXJyZXIiKSkKICAgICAgICAgZG9jdW1lbnQoKS5wcm9jZXNzUmVmZXJyZXJQb2xpY3koY29u
dGVudFZhbHVlKTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHR0cEVxdWl2VmFsdWUgPSBm
YXN0R2V0QXR0cmlidXRlKGh0dHBfZXF1aXZBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGh0dHBFcXVpdlZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihodHRwX2Vx
dWl2QXR0cik7CiAgICAgaWYgKCFodHRwRXF1aXZWYWx1ZS5pc051bGwoKSkKICAgICAgICAgZG9j
dW1lbnQoKS5wcm9jZXNzSHR0cEVxdWl2KGh0dHBFcXVpdlZhbHVlLCBjb250ZW50VmFsdWUsIGlz
RGVzY2VuZGFudE9mKGRvY3VtZW50KCkuaGVhZCgpKSk7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTE1ldGFFbGVtZW50Ojpjb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFzdEdl
dEF0dHJpYnV0ZShjb250ZW50QXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oY29udGVudEF0dHIpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxN
ZXRhRWxlbWVudDo6aHR0cEVxdWl2KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFzdEdldEF0dHJp
YnV0ZShodHRwX2VxdWl2QXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oaHR0cF9lcXVpdkF0dHIpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxN
ZXRhRWxlbWVudDo6bmFtZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZXRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
dGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1ldGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgdm9p
ZCBIVE1MTWV0ZXJFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjbwogCiBkb3VibGUgSFRNTE1ldGVy
RWxlbWVudDo6bWluKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcGFyc2VUb0RvdWJsZUZvck51bWJl
clR5cGUoZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgMCk7CisgICAgcmV0dXJuIHBhcnNlVG9E
b3VibGVGb3JOdW1iZXJUeXBlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0
ciksIDApOwogfQogCiB2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OnNldE1pbihkb3VibGUgbWluLCBF
eGNlcHRpb25Db2RlJiBlYykKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50
OjpzZXRNaW4oZG91YmxlIG1pbgogCiBkb3VibGUgSFRNTE1ldGVyRWxlbWVudDo6bWF4KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gc3RkOjptYXgocGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZmFz
dEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgc3RkOjptYXgoMS4wLCBtaW4oKSkpLCBtaW4oKSk7Cisg
ICAgcmV0dXJuIHN0ZDo6bWF4KHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0ciksIHN0ZDo6bWF4KDEuMCwgbWluKCkpKSwgbWlu
KCkpOwogfQogCiB2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OnNldE1heChkb3VibGUgbWF4LCBFeGNl
cHRpb25Db2RlJiBlYykKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIEhUTUxNZXRlckVsZW1lbnQ6
OnNldE1heChkb3VibGUgbWF4CiAKIGRvdWJsZSBIVE1MTWV0ZXJFbGVtZW50Ojp2YWx1ZSgpIGNv
bnN0CiB7Ci0gICAgZG91YmxlIHZhbHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZmFz
dEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLCAwKTsKKyAgICBkb3VibGUgdmFsdWUgPSBwYXJzZVRv
RG91YmxlRm9yTnVtYmVyVHlwZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbHVl
QXR0ciksIDApOwogICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heCh2YWx1ZSwgbWluKCkpLCBt
YXgoKSk7CiB9CiAKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OnNl
dFZhbHVlKGRvdWJsZSB2CiAKIGRvdWJsZSBIVE1MTWV0ZXJFbGVtZW50Ojpsb3coKSBjb25zdAog
ewotICAgIGRvdWJsZSBsb3cgPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShmYXN0R2V0QXR0
cmlidXRlKGxvd0F0dHIpLCBtaW4oKSk7CisgICAgZG91YmxlIGxvdyA9IHBhcnNlVG9Eb3VibGVG
b3JOdW1iZXJUeXBlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obG93QXR0ciksIG1p
bigpKTsKICAgICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgobG93LCBtaW4oKSksIG1heCgpKTsK
IH0KIApAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgSFRNTE1ldGVyRWxlbWVudDo6c2V0TG93KGRv
dWJsZSBsb3cKIAogZG91YmxlIEhUTUxNZXRlckVsZW1lbnQ6OmhpZ2goKSBjb25zdAogewotICAg
IGRvdWJsZSBoaWdoID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZmFzdEdldEF0dHJpYnV0
ZShoaWdoQXR0ciksIG1heCgpKTsKKyAgICBkb3VibGUgaGlnaCA9IHBhcnNlVG9Eb3VibGVGb3JO
dW1iZXJUeXBlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oaGlnaEF0dHIpLCBtYXgo
KSk7CiAgICAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6bWF4KGhpZ2gsIGxvdygpKSwgbWF4KCkpOwog
fQogCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpzZXRIaWdoKGRv
dWJsZSBoaQogCiBkb3VibGUgSFRNTE1ldGVyRWxlbWVudDo6b3B0aW11bSgpIGNvbnN0CiB7Ci0g
ICAgZG91YmxlIG9wdGltdW0gPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShmYXN0R2V0QXR0
cmlidXRlKG9wdGltdW1BdHRyKSwgKG1heCgpICsgbWluKCkpIC8gMik7CisgICAgZG91YmxlIG9w
dGltdW0gPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShhdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKG9wdGltdW1BdHRyKSwgKG1heCgpICsgbWluKCkpIC8gMik7CiAgICAgcmV0dXJu
IHN0ZDo6bWluKHN0ZDo6bWF4KG9wdGltdW0sIG1pbigpKSwgbWF4KCkpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1OCw3ICsyNTgsNyBAQCBib29sIEhUTUxPYmplY3RFbGVtZW50OjpzaG91bGRB
bGxvd1F1aWNrCiAgICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKQogICAgICAgICB8fCAhZG9jdW1l
bnQoKS5wYWdlKCktPnNldHRpbmdzKCkubmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKQogICAgICAg
ICB8fCBoYXNGYWxsYmFja0NvbnRlbnQoKQotICAgICAgICB8fCAhZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UoZmFzdEdldEF0dHJpYnV0ZShjbGFzc2lkQXR0ciksICJjbHNpZDowMmJmMjVk
NS04YzE3LTRiMjMtYmM4MC1kMzQ4OGFiZGRjNmIiKSkKKyAgICAgICAgfHwgIWVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oY2xhc3Np
ZEF0dHIpLCAiY2xzaWQ6MDJiZjI1ZDUtOGMxNy00YjIzLWJjODAtZDM0ODhhYmRkYzZiIikpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoYXV0byYgbWV0YUVsZW1lbnQgOiBkZXNj
ZW5kYW50c09mVHlwZTxIVE1MTWV0YUVsZW1lbnQ+KGRvY3VtZW50KCkpKSB7CkBAIC0yNzEsNyAr
MjcxLDcgQEAgYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6c2hvdWxkQWxsb3dRdWljawogICAgIAog
Ym9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aGFzVmFsaWRDbGFzc0lkKCkKIHsKLSAgICBpZiAoTUlN
RVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUoc2VydmljZVR5cGUoKSkgJiYgZmFz
dEdldEF0dHJpYnV0ZShjbGFzc2lkQXR0cikuc3RhcnRzV2l0aCgiamF2YToiLCBmYWxzZSkpCisg
ICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKHNlcnZpY2VUeXBl
KCkpICYmIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oY2xhc3NpZEF0dHIpLnN0YXJ0
c1dpdGgoImphdmE6IiwgZmFsc2UpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBp
ZiAoc2hvdWxkQWxsb3dRdWlja1RpbWVDbGFzc0lkUXVpcmsoKSkKQEAgLTI3OSw3ICsyNzksNyBA
QCBib29sIEhUTUxPYmplY3RFbGVtZW50OjpoYXNWYWxpZENsYXNzSWQoCiAKICAgICAvLyBIVE1M
NSBzYXlzIHRoYXQgZmFsbGJhY2sgY29udGVudCBzaG91bGQgYmUgcmVuZGVyZWQgaWYgYSBub24t
ZW1wdHkKICAgICAvLyBjbGFzc2lkIGlzIHNwZWNpZmllZCBmb3Igd2hpY2ggdGhlIFVBIGNhbid0
IGZpbmQgYSBzdWl0YWJsZSBwbHVnLWluLgotICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGNs
YXNzaWRBdHRyKS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oY2xhc3NpZEF0dHIpLmlzRW1wdHkoKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIHVuaWZpZWQgd2l0aCBIVE1MRW1iZWRFbGVtZW50Ojp1cGRhdGVXaWRnZXQgYW5kCkBA
IC0zNjcsNyArMzY3LDcgQEAgYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUo
YwogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxPYmplY3RFbGVtZW50OjppbWFnZVNvdXJjZVVS
TCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoZGF0YUF0dHIpOworICAg
IHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRhdGFBdHRyKTsKIH0KIAog
dm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cmVuZGVyRmFsbGJhY2tDb250ZW50KCkKQEAgLTQ3MCwx
MiArNDcwLDEyIEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZURvY05hbWVkSXQKIAog
Ym9vbCBIVE1MT2JqZWN0RWxlbWVudDo6Y29udGFpbnNKYXZhQXBwbGV0KCkgY29uc3QKIHsKLSAg
ICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUoZmFzdEdldEF0dHJp
YnV0ZSh0eXBlQXR0cikpKQorICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRN
SU1FVHlwZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHR5cGVBdHRyKSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBl
PEVsZW1lbnQ+KCp0aGlzKSkgewogICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShwYXJhbVRh
ZykgJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY2hpbGQuZ2V0TmFtZUF0dHJpYnV0
ZSgpLCAidHlwZSIpCi0gICAgICAgICAgICAmJiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBs
ZXRNSU1FVHlwZShjaGlsZC5mYXN0R2V0QXR0cmlidXRlKHZhbHVlQXR0cikuc3RyaW5nKCkpKQor
ICAgICAgICAgICAgJiYgTUlNRVR5cGVSZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUoY2hp
bGQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih2YWx1ZUF0dHIpLnN0cmluZygpKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoY2hpbGQuaGFzVGFnTmFtZShv
YmplY3RUYWcpICYmIGRvd25jYXN0PEhUTUxPYmplY3RFbGVtZW50PihjaGlsZCkuY29udGFpbnNK
YXZhQXBwbGV0KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5MCwxMSArNDkwLDEx
IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXQKIHsKICAgICBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAK
LSAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGZhc3RH
ZXRBdHRyaWJ1dGUoZGF0YUF0dHIpKSk7CisgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9j
dW1lbnQoKS5jb21wbGV0ZVVSTChhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRhdGFB
dHRyKSkpOwogCiAgICAgLy8gRklYTUU6IFBhc3NpbmcgYSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0
aCAiIyIgdG8gdGhlIGNvbXBsZXRlVVJMIGZ1bmN0aW9uIGRvZXMKICAgICAvLyBub3Qgc2VlbSBs
aWtlIGl0IHdvdWxkIHdvcmsuIFRoZSBpbWFnZSBlbGVtZW50IGhhcyBzaW1pbGFyIGJ1dCBub3Qg
aWRlbnRpY2FsIGNvZGUuCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB1c2VNYXAgPSBmYXN0R2V0
QXR0cmlidXRlKHVzZW1hcEF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXNlTWFwID0g
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih1c2VtYXBBdHRyKTsKICAgICBpZiAodXNl
TWFwLnN0YXJ0c1dpdGgoJyMnKSkKICAgICAgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9j
dW1lbnQoKS5jb21wbGV0ZVVSTCh1c2VNYXApKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTQsNyArOTQsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnQ6OnJlY2FsY1NlbGVjdE9wCiAK
IFN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50Ojpncm91cExhYmVsVGV4dCgpIGNvbnN0CiB7Ci0g
ICAgU3RyaW5nIGl0ZW1UZXh0ID0gZG9jdW1lbnQoKS5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVu
Y29kaW5nKGZhc3RHZXRBdHRyaWJ1dGUobGFiZWxBdHRyKSk7CisgICAgU3RyaW5nIGl0ZW1UZXh0
ID0gZG9jdW1lbnQoKS5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24obGFiZWxBdHRyKSk7CiAgICAgCiAgICAgLy8gSW4gV2luSUUs
IGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaXMgaWdub3JlZCBpbiBvcHRpb25zIGFu
ZCBvcHRncm91cHMuIFdlIG1hdGNoIHRoaXMgYmVoYXZpb3IuCiAgICAgaXRlbVRleHQgPSBpdGVt
VGV4dC5zdHJpcFdoaXRlU3BhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBA
IHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGMKIAogU3RyaW5nIEhUTUxP
cHRpb25FbGVtZW50Ojp2YWx1ZSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih2YWx1ZUF0dHIpOwog
ICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICByZXR1
cm4gY29sbGVjdE9wdGlvbklubmVyVGV4dCgpLnN0cmlwV2hpdGVTcGFjZShpc0hUTUxTcGFjZSku
c2ltcGxpZnlXaGl0ZVNwYWNlKGlzSFRNTFNwYWNlKTsKQEAgLTI3Miw3ICsyNzIsNyBAQCBIVE1M
U2VsZWN0RWxlbWVudCogSFRNTE9wdGlvbkVsZW1lbnQ6Om93CiAKIFN0cmluZyBIVE1MT3B0aW9u
RWxlbWVudDo6bGFiZWwoKSBjb25zdAogewotICAgIFN0cmluZyBsYWJlbCA9IGZhc3RHZXRBdHRy
aWJ1dGUobGFiZWxBdHRyKTsKKyAgICBTdHJpbmcgbGFiZWwgPSBhdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKGxhYmVsQXR0cik7CiAgICAgaWYgKCFsYWJlbC5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIGxhYmVsLnN0cmlwV2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7CiAgICAgcmV0dXJu
IGNvbGxlY3RPcHRpb25Jbm5lclRleHQoKS5zdHJpcFdoaXRlU3BhY2UoaXNIVE1MU3BhY2UpLnNp
bXBsaWZ5V2hpdGVTcGFjZShpc0hUTUxTcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQYXJhbUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBhcmFtRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcg
QEAgU3RyaW5nIEhUTUxQYXJhbUVsZW1lbnQ6Om5hbWUoKSBjb25zdAogCiBTdHJpbmcgSFRNTFBh
cmFtRWxlbWVudDo6dmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRl
KHZhbHVlQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
dmFsdWVBdHRyKTsKIH0KIAogYm9vbCBIVE1MUGFyYW1FbGVtZW50Ojppc1VSTFBhcmFtZXRlcihj
b25zdCBTdHJpbmcmIG5hbWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dy
ZXNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFByb2dyZXNzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAg
dm9pZCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpkaWRBdHRhY2hSZW5kZQogCiBkb3VibGUgSFRNTFBy
b2dyZXNzRWxlbWVudDo6dmFsdWUoKSBjb25zdAogewotICAgIGRvdWJsZSB2YWx1ZSA9IHBhcnNl
VG9Eb3VibGVGb3JOdW1iZXJUeXBlKGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKSk7CisgICAg
ZG91YmxlIHZhbHVlID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbih2YWx1ZUF0dHIpKTsKICAgICByZXR1cm4gIXN0ZDo6aXNmaW5pdGUo
dmFsdWUpIHx8IHZhbHVlIDwgMCA/IDAgOiBzdGQ6Om1pbih2YWx1ZSwgbWF4KCkpOwogfQogCkBA
IC0xMDksNyArMTA5LDcgQEAgdm9pZCBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpzZXRWYWx1ZShkb3Vi
bAogCiBkb3VibGUgSFRNTFByb2dyZXNzRWxlbWVudDo6bWF4KCkgY29uc3QKIHsKLSAgICBkb3Vi
bGUgbWF4ID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZmFzdEdldEF0dHJpYnV0ZShtYXhB
dHRyKSk7CisgICAgZG91YmxlIG1heCA9IHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4QXR0cikpOwogICAgIHJldHVybiAhc3RkOjpp
c2Zpbml0ZShtYXgpIHx8IG1heCA8PSAwID8gMSA6IG1heDsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTIsNyArMTEyLDcgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6c2V0Q3Jvc3NPcmlnaW4o
YwogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OmNyb3NzT3JpZ2luKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gcGFyc2VDT1JTU2V0dGluZ3NBdHRyaWJ1dGUoZmFzdEdldEF0dHJpYnV0ZShjcm9z
c29yaWdpbkF0dHIpKTsKKyAgICByZXR1cm4gcGFyc2VDT1JTU2V0dGluZ3NBdHRyaWJ1dGUoYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjcm9zc29yaWdpbkF0dHIpKTsKIH0KIAogVVJM
IEhUTUxTY3JpcHRFbGVtZW50OjpzcmMoKSBjb25zdApAQCAtMTI5LDMyICsxMjksMzIgQEAgdm9p
ZCBIVE1MU2NyaXB0RWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdAogCiBTdHJpbmcgSFRNTFNjcmlw
dEVsZW1lbnQ6OnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFz
dEdldEF0dHJpYnV0ZShzcmNBdHRyKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihzcmNBdHRyKS5zdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxT
Y3JpcHRFbGVtZW50OjpjaGFyc2V0QXR0cmlidXRlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVy
biBmYXN0R2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjaGFyc2V0QXR0cikuc3RyaW5nKCk7CiB9CiAK
IFN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6dHlwZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikuc3RyaW5nKCk7CisgICAgcmV0
dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odHlwZUF0dHIpLnN0cmluZygpOwog
fQogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6Omxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKSBj
b25zdAogewotICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGxhbmd1YWdlQXR0cikuc3RyaW5n
KCk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obGFuZ3VhZ2VB
dHRyKS5zdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojpmb3JBdHRyaWJ1
dGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0ciku
c3RyaW5nKCk7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZm9y
QXR0cikuc3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6ZXZlbnRBdHRy
aWJ1dGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoZXZlbnRB
dHRyKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihldmVudEF0dHIpLnN0cmluZygpOwogfQogCiBib29sIEhUTUxTY3JpcHRFbGVtZW50Ojphc3lu
Y0F0dHJpYnV0ZVZhbHVlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNs
b3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTbG90
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNsb3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBIVE1MU2xv
dEVsZW1lbnQ6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlCiAgICAgLy8gb3IgaXRzIGFuY2VzdG9y
IGlzIGluc2VydGVkIGJlbG9uZ3MgdG8gdGhlIHNhbWUgdHJlZSBzY29wZSBhcyB0aGlzIGVsZW1l
bnQncy4KICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNJblNoYWRvd1RyZWUoKSAmJiBpc0luU2hh
ZG93VHJlZSgpICYmICZpbnNlcnRpb25Qb2ludC50cmVlU2NvcGUoKSA9PSAmdHJlZVNjb3BlKCkp
IHsKICAgICAgICAgaWYgKGF1dG8gc2hhZG93Um9vdCA9IGNvbnRhaW5pbmdTaGFkb3dSb290KCkp
Ci0gICAgICAgICAgICBzaGFkb3dSb290LT5hZGRTbG90RWxlbWVudEJ5TmFtZShmYXN0R2V0QXR0
cmlidXRlKG5hbWVBdHRyKSwgKnRoaXMpOworICAgICAgICAgICAgc2hhZG93Um9vdC0+YWRkU2xv
dEVsZW1lbnRCeU5hbWUoYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihuYW1lQXR0ciks
ICp0aGlzKTsKICAgICB9CiAKICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKQEAgLTcxLDcgKzcx
LDcgQEAgdm9pZCBIVE1MU2xvdEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaQogICAgIGlmIChp
bnNlcnRpb25Qb2ludC5pc0luU2hhZG93VHJlZSgpICYmIGlzSW5TaGFkb3dUcmVlKCkgJiYgJnRy
ZWVTY29wZSgpID09ICZkb2N1bWVudCgpKSB7CiAgICAgICAgIGF1dG8qIG9sZFNoYWRvd1Jvb3Qg
PSBpbnNlcnRpb25Qb2ludC5jb250YWluaW5nU2hhZG93Um9vdCgpOwogICAgICAgICBBU1NFUlQo
b2xkU2hhZG93Um9vdCk7Ci0gICAgICAgIG9sZFNoYWRvd1Jvb3QtPnJlbW92ZVNsb3RFbGVtZW50
QnlOYW1lKGZhc3RHZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCAqdGhpcyk7CisgICAgICAgIG9sZFNo
YWRvd1Jvb3QtPnJlbW92ZVNsb3RFbGVtZW50QnlOYW1lKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24obmFtZUF0dHIpLCAqdGhpcyk7CiAgICAgfQogCiAgICAgSFRNTEVsZW1lbnQ6OnJl
bW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNvdXJjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNvdXJjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBA
QCB2b2lkIEhUTUxTb3VyY2VFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyCiAKIFN0cmluZyBIVE1M
U291cmNlRWxlbWVudDo6bWVkaWEoKSBjb25zdAogewotICAgIHJldHVybiBmYXN0R2V0QXR0cmli
dXRlKG1lZGlhQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24obWVkaWFBdHRyKTsKIH0KIAogdm9pZCBIVE1MU291cmNlRWxlbWVudDo6c2V0TWVkaWEoY29u
c3QgU3RyaW5nJiBtZWRpYSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEhUTUxTb3VyY2VFbGVt
ZW50OjpzZXRNZWRpYShjb25zdCBTCiAKIFN0cmluZyBIVE1MU291cmNlRWxlbWVudDo6dHlwZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpOworICAgIHJl
dHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHR5cGVBdHRyKTsKIH0KIAogdm9p
ZCBIVE1MU291cmNlRWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAkocmV2aXNpb24g
MjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgdW5zaWduZWQgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6OmNvbFNwYW4oKQogCiB1bnNpZ25lZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6Y29sU3Bh
bkZvckJpbmRpbmdzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbGltaXRUb09ubHlIVE1MTm9uTmVn
YXRpdmUoZmFzdEdldEF0dHJpYnV0ZShjb2xzcGFuQXR0ciksIDF1KTsKKyAgICByZXR1cm4gbGlt
aXRUb09ubHlIVE1MTm9uTmVnYXRpdmUoYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihj
b2xzcGFuQXR0ciksIDF1KTsKIH0KIAogdW5zaWduZWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnJv
d1NwYW4oKSBjb25zdApAQCAtNjYsNyArNjYsNyBAQCB1bnNpZ25lZCBIVE1MVGFibGVDZWxsRWxl
bWVudDo6cm93U3BhbigpCiAKIHVuc2lnbmVkIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojpyb3dTcGFu
Rm9yQmluZGluZ3MoKSBjb25zdAogewotICAgIHJldHVybiBsaW1pdFRvT25seUhUTUxOb25OZWdh
dGl2ZShmYXN0R2V0QXR0cmlidXRlKHJvd3NwYW5BdHRyKSwgMXUpOworICAgIHJldHVybiBsaW1p
dFRvT25seUhUTUxOb25OZWdhdGl2ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHJv
d3NwYW5BdHRyKSwgMXUpOwogfQogCiBpbnQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNlbGxJbmRl
eCgpIGNvbnN0CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCBib29sIEhUTUxUYWJsZUNlbGxFbGVtZW50
Ojppc1VSTEF0dHJpYnV0CiAKIFN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6YWJicigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoYWJickF0dHIpOworICAgIHJldHVy
biBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFiYnJBdHRyKTsKIH0KIAogU3RyaW5n
IEhUTUxUYWJsZUNlbGxFbGVtZW50OjpheGlzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFzdEdl
dEF0dHJpYnV0ZShheGlzQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oYXhpc0F0dHIpOwogfQogCiB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRD
b2xTcGFuRm9yQmluZGluZ3ModW5zaWduZWQgbikKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIEhU
TUxUYWJsZUNlbGxFbGVtZW50OjpzZXRDb2xTcGFuRm9yCiAKIFN0cmluZyBIVE1MVGFibGVDZWxs
RWxlbWVudDo6aGVhZGVycygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUo
aGVhZGVyc0F0dHIpOworICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGhlYWRlcnNBdHRyKTsKIH0KIAogdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Um93U3Bh
bkZvckJpbmRpbmdzKHVuc2lnbmVkIG4pCkBAIC0xNjcsNyArMTY3LDcgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBIVE1MVGFibGVDZWxsRWxlbWVudAogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxj
b25zdCBBdG9taWNTdHJpbmc+IHJvd2dyb3VwKCJyb3dncm91cCIsIEF0b21pY1N0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9t
aWNTdHJpbmc+IGNvbGdyb3VwKCJjb2xncm91cCIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRy
aWJ1dGUoSFRNTE5hbWVzOjpzY29wZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c2NvcGVBdHRy
KTsKIAogICAgIC8vIE9ubHkgY29uZm9ybWluZyBmb3IgdGggZWxlbWVudHMuCiAgICAgaWYgKCFo
YXNUYWdOYW1lKHRoVGFnKSkKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIEhUTUxUYWJsZUNlbGxF
bGVtZW50OjphZGRTdWJyZXNvdXJjCiB7CiAgICAgSFRNTFRhYmxlUGFydEVsZW1lbnQ6OmFkZFN1
YnJlc291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKIAotICAgIGFkZFN1YnJlc291cmNlVVJMKHVy
bHMsIGRvY3VtZW50KCkuY29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0
cikpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJM
KGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYmFja2dyb3VuZEF0dHIpKSk7CiB9CiAK
IEhUTUxUYWJsZUNlbGxFbGVtZW50KiBIVE1MVGFibGVDZWxsRWxlbWVudDo6Y2VsbEFib3ZlKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNw
cAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEhUTUxUYWJs
ZUNvbEVsZW1lbnQ6OnNldFNwYW4odW5zaWduCiAKIFN0cmluZyBIVE1MVGFibGVDb2xFbGVtZW50
Ojp3aWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUod2lkdGhBdHRy
KTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih3aWR0aEF0dHIp
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MCwxOSArNTgwLDE5IEBAIFJlZjxIVE1MQ29sbGVj
dGlvbj4gSFRNTFRhYmxlRWxlbWVudDo6dEIKIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGFi
bGVFbGVtZW50OjpydWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUo
cnVsZXNBdHRyKTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihy
dWxlc0F0dHIpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxUYWJsZUVsZW1lbnQ6OnN1
bW1hcnkoKSBjb25zdAogewotICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHN1bW1hcnlBdHRy
KTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdW1tYXJ5QXR0
cik7CiB9CiAKIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMpIGNvbnN0CiB7CiAgICAgSFRNTEVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKIAotICAgIGFkZFN1YnJlc291cmNlVVJM
KHVybHMsIGRvY3VtZW50KCkuY29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShiYWNrZ3JvdW5k
QXR0cikpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRl
VVJMKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYmFja2dyb3VuZEF0dHIpKSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVNlY3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBA
IGludCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6bnVtUm93cygpIGMKIAogY29uc3QgQXRvbWlj
U3RyaW5nJiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6YWxpZ24oKSBjb25zdAogewotICAgIHJl
dHVybiBmYXN0R2V0QXR0cmlidXRlKGFsaWduQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oYWxpZ25BdHRyKTsKIH0KIAogdm9pZCBIVE1MVGFibGVTZWN0
aW9uRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKQEAgLTEyMiw3
ICsxMjIsNyBAQCB2b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpzZXRBbGlnbihjCiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmNoKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShjaGFyQXR0cik7CisgICAgcmV0dXJuIGF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oY2hhckF0dHIpOwogfQogCiB2b2lkIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50OjpzZXRDaChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpAQCAtMTMy
LDcgKzEzMiw3IEBAIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldENoKGNvbnMKIAog
Y29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6Y2hPZmYoKSBjb25z
dAogewotICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGNoYXJvZmZBdHRyKTsKKyAgICByZXR1
cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjaGFyb2ZmQXR0cik7CiB9CiAKIHZv
aWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldENoT2ZmKGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6
c2V0Q2hPZmYoYwogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
Ojp2QWxpZ24oKSBjb25zdAogewotICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHZhbGlnbkF0
dHIpOworICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZhbGlnbkF0
dHIpOwogfQogCiB2b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpzZXRWQWxpZ24oY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3
IEBAIGJvb2wgSFRNTFRleHRBcmVhRWxlbWVudDo6YXBwZW5kRm9ybURhdGEKICAgICBjb25zdCBT
dHJpbmcmIHRleHQgPSAobV93cmFwID09IEhhcmRXcmFwKSA/IHZhbHVlV2l0aEhhcmRMaW5lQnJl
YWtzKCkgOiB2YWx1ZSgpOwogICAgIGVuY29kaW5nLmFwcGVuZERhdGEobmFtZSgpLCB0ZXh0KTsK
IAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGlybmFtZUF0dHJWYWx1ZSA9IGZhc3RHZXRBdHRy
aWJ1dGUoZGlybmFtZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGlybmFtZUF0dHJW
YWx1ZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlybmFtZUF0dHIpOwogICAg
IGlmICghZGlybmFtZUF0dHJWYWx1ZS5pc051bGwoKSkKICAgICAgICAgZW5jb2RpbmcuYXBwZW5k
RGF0YShkaXJuYW1lQXR0clZhbHVlLCBkaXJlY3Rpb25Gb3JGb3JtRGF0YSgpKTsKICAgICByZXR1
cm4gdHJ1ZTsgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNCw3ICsxMjQsNyBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlw
CiB7CiAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uLCB3ZSBuZWVk
IHRvIHJlbW92ZSBDUiBhbmQgTEYgZnJvbQogICAgIC8vIHRoZSBhdHRyaWJ1dGUgdmFsdWUuCi0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUo
cGxhY2Vob2xkZXJBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVl
ID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwbGFjZWhvbGRlckF0dHIpOwogICAg
IGlmICghYXR0cmlidXRlVmFsdWUuY29udGFpbnMobmV3bGluZUNoYXJhY3RlcikgJiYgIWF0dHJp
YnV0ZVZhbHVlLmNvbnRhaW5zKGNhcnJpYWdlUmV0dXJuKSkKICAgICAgICAgcmV0dXJuIGF0dHJp
YnV0ZVZhbHVlOwogCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIGJvb2wgaXNOb3RMaW5lQnJl
YWsoVUNoYXIgY2gpIHsgcgogCiBib29sIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppc1Bs
YWNlaG9sZGVyRW1wdHkoKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmli
dXRlVmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0cik7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24ocGxhY2Vob2xkZXJBdHRyKTsKICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWUuc3RyaW5n
KCkuZmluZChpc05vdExpbmVCcmVhaykgPT0gbm90Rm91bmQ7CiB9CiAKQEAgLTc0MCw3ICs3NDAs
NyBAQCBzdGF0aWMgY29uc3QgRWxlbWVudCogcGFyZW50SFRNTEVsZW1lbnQoCiBTdHJpbmcgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRpcmVjdGlvbkZvckZvcm1EYXRhKCkgY29uc3QKIHsK
ICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzOyBlbGVtZW50OyBlbGVtZW50
ID0gcGFyZW50SFRNTEVsZW1lbnQoZWxlbWVudCkpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBkaXJBdHRyaWJ1dGVWYWx1ZSA9IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0
cik7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGlyQXR0cmlidXRlVmFsdWUgPSBlbGVt
ZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGRpckF0dHIpOwogICAgICAgICBp
ZiAoZGlyQXR0cmlidXRlVmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjUsMTIgKzEyNSwxMiBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnNl
dEtpbmQoY29uc3QgQXRvCiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTFRyYWNrRWxlbWVudDo6
c3JjbGFuZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoc3JjbGFuZ0F0
dHIpOworICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNyY2xhbmdB
dHRyKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVHJhY2tFbGVtZW50OjpsYWJlbCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKKyAgICBy
ZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihsYWJlbEF0dHIpOwogfQogCiBi
b29sIEhUTUxUcmFja0VsZW1lbnQ6OmlzRGVmYXVsdCgpIGNvbnN0CkBAIC0xNDIsNyArMTQyLDcg
QEAgTG9hZGFibGVUZXh0VHJhY2smIEhUTUxUcmFja0VsZW1lbnQ6OmVucwogewogICAgIGlmICgh
bV90cmFjaykgewogICAgICAgICAvLyBUaGUga2luZCBhdHRyaWJ1dGUgaXMgYW4gZW51bWVyYXRl
ZCBhdHRyaWJ1dGUsIGxpbWl0ZWQgb25seSB0byBrbm93biB2YWx1ZXMuIEl0IGRlZmF1bHRzIHRv
ICdzdWJ0aXRsZXMnIGlmIG1pc3Npbmcgb3IgaW52YWxpZC4KLSAgICAgICAgU3RyaW5nIGtpbmQg
PSBmYXN0R2V0QXR0cmlidXRlKGtpbmRBdHRyKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwor
ICAgICAgICBTdHJpbmcga2luZCA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oa2lu
ZEF0dHIpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAgICAgICAgIGlmICghVGV4dFRyYWNr
Ojppc1ZhbGlkS2luZEtleXdvcmQoa2luZCkpCiAgICAgICAgICAgICBraW5kID0gVGV4dFRyYWNr
OjpzdWJ0aXRsZXNLZXl3b3JkKCk7CiAgICAgICAgIG1fdHJhY2sgPSBMb2FkYWJsZVRleHRUcmFj
azo6Y3JlYXRlKHRoaXMsIGtpbmQsIGxhYmVsKCksIHNyY2xhbmcoKSk7CkBAIC0yNzMsNyArMjcz
LDcgQEAgSFRNTFRyYWNrRWxlbWVudDo6UmVhZHlTdGF0ZSBIVE1MVHJhY2tFbAogY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MVHJhY2tFbGVtZW50OjptZWRpYUVsZW1lbnRDcm9zc09yaWdpbkF0dHJp
YnV0ZSgpIGNvbnN0CiB7CiAgICAgaWYgKEhUTUxNZWRpYUVsZW1lbnQqIHBhcmVudCA9IG1lZGlh
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gcGFyZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxO
YW1lczo6Y3Jvc3NvcmlnaW5BdHRyKTsKKyAgICAgICAgcmV0dXJuIHBhcmVudC0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmNyb3Nzb3JpZ2luQXR0cik7CiAgICAg
CiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VmlkZW9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxW
aWRlb0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxWaWRlb0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAg
dm9pZCBIVE1MVmlkZW9FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjbwogI2lmIFBMQVRGT1JNKElP
UykgJiYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICAgICAgaWYgKG5hbWUg
PT0gd2Via2l0YWlycGxheUF0dHIpIHsKICAgICAgICAgICAgIGJvb2wgZGlzYWJsZWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShmYXN0R2V0
QXR0cmlidXRlKEhUTUxOYW1lczo6d2Via2l0YWlycGxheUF0dHIpLCAiZGVueSIpKQorICAgICAg
ICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp3ZWJraXRhaXJwbGF5QXR0ciksICJkZW55IikpCiAg
ICAgICAgICAgICAgICAgZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgICAgbWVkaWFTZXNzaW9u
KCkuc2V0V2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKnRoaXMsIGRpc2FibGVkKTsKICAg
ICAgICAgfQpAQCAtMjEzLDcgKzIxMyw3IEBAIGJvb2wgSFRNTFZpZGVvRWxlbWVudDo6aXNVUkxB
dHRyaWJ1dGUoY28KIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MVmlkZW9FbGVtZW50OjppbWFn
ZVNvdXJjZVVSTCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB1cmwgPSBmYXN0
R2V0QXR0cmlidXRlKHBvc3RlckF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJsID0g
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwb3N0ZXJBdHRyKTsKICAgICBpZiAoIXN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1cmwpLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIHVybDsKICAgICByZXR1cm4gbV9kZWZhdWx0UG9zdGVyVVJMOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYs
NyArMTc2LDcgQEAgdW5zaWduZWQgSW1hZ2VJbnB1dFR5cGU6OmhlaWdodCgpIGNvbnN0CiAKICAg
ICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8gQ2hlY2sgdGhlIGF0dHJp
YnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUuCi0gICAgICAgIGlmIChPcHRp
b25hbDxpbnQ+IGhlaWdodCA9IHBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihlbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKGhlaWdodEF0dHIpKSkKKyAgICAgICAgaWYgKE9wdGlvbmFsPGludD4g
aGVpZ2h0ID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGVsZW1lbnQtPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oaGVpZ2h0QXR0cikpKQogICAgICAgICAgICAgcmV0dXJuIGhl
aWdodC52YWx1ZSgpOwogCiAgICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhdmFpbGFibGUsIHVz
ZSBpdHMgaGVpZ2h0LgpAQCAtMTk3LDcgKzE5Nyw3IEBAIHVuc2lnbmVkIEltYWdlSW5wdXRUeXBl
Ojp3aWR0aCgpIGNvbnN0CiAKICAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAg
ICAgLy8gQ2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFs
dWUuCi0gICAgICAgIGlmIChPcHRpb25hbDxpbnQ+IHdpZHRoID0gcGFyc2VIVE1MTm9uTmVnYXRp
dmVJbnRlZ2VyKGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUod2lkdGhBdHRyKSkpCisgICAgICAg
IGlmIChPcHRpb25hbDxpbnQ+IHdpZHRoID0gcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGVs
ZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24od2lkdGhBdHRyKSkpCiAgICAg
ICAgICAgICByZXR1cm4gd2lkdGgudmFsdWUoKTsKIAogICAgICAgICAvLyBJZiB0aGUgaW1hZ2Ug
aXMgYXZhaWxhYmxlLCB1c2UgaXRzIHdpZHRoLgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBl
LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lkIElucHV0VHlwZTo6
YXBwbHlTdGVwKGludCBjb3VudCwgQW55CiAgICAgaWYgKG5ld1ZhbHVlIDwgc3RlcFJhbmdlLm1p
bmltdW0oKSkKICAgICAgICAgbmV3VmFsdWUgPSBzdGVwUmFuZ2UubWluaW11bSgpOwogCi0gICAg
aWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50KCkuZmFzdEdldEF0dHJp
YnV0ZShzdGVwQXR0ciksICJhbnkiKSkKKyAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN0ZXBBdHRy
KSwgImFueSIpKQogICAgICAgICBuZXdWYWx1ZSA9IHN0ZXBSYW5nZS5hbGlnblZhbHVlRm9yU3Rl
cChjdXJyZW50LCBuZXdWYWx1ZSk7CiAKICAgICBpZiAobmV3VmFsdWUgLSBzdGVwUmFuZ2UubWF4
aW11bSgpID4gYWNjZXB0YWJsZUVycm9yVmFsdWUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9NZWRpYUVsZW1lbnRTZXNzaW9uLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9NZWRpYUVsZW1lbnRTZXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIwLDcgKzMyMCw3IEBAIGJvb2wgTWVkaWFFbGVtZW50U2Vzc2lvbjo6d2lyZWxlc3NWaWRlb1AK
ICAgICB9CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgU3RyaW5nIGxlZ2FjeUFpcnBsYXlBdHRy
aWJ1dGVWYWx1ZSA9IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OndlYmtpdGFp
cnBsYXlBdHRyKTsKKyAgICBTdHJpbmcgbGVnYWN5QWlycGxheUF0dHJpYnV0ZVZhbHVlID0gZWxl
bWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6d2Via2l0YWly
cGxheUF0dHIpOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShsZWdhY3lB
aXJwbGF5QXR0cmlidXRlVmFsdWUsICJkZW55IikpIHsKICAgICAgICAgTE9HKE1lZGlhLCAiTWVk
aWFFbGVtZW50U2Vzc2lvbjo6d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQgLSByZXR1cm5p
bmcgVFJVRSBiZWNhdXNlIG9mIGxlZ2FjeSBhdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL01vbnRoSW5wdXRUeXBlLmNwcAkocmV2aXNpb24g
MjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Nb250aElucHV0VHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDEwICs5MywxMCBAQCBTdGVwUmFuZ2UgTW9udGhJbnB1dFR5cGU6OmNy
ZWF0ZVN0ZXBSYW5nCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0ZXBSYW5n
ZTo6U3RlcERlc2NyaXB0aW9uPiBzdGVwRGVzY3JpcHRpb24obW9udGhEZWZhdWx0U3RlcCwgbW9u
dGhEZWZhdWx0U3RlcEJhc2UsIG1vbnRoU3RlcFNjYWxlRmFjdG9yLCBTdGVwUmFuZ2U6OlBhcnNl
ZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik7CiAKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNl
ID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGVj
aW1hbDo6ZnJvbURvdWJsZShtb250aERlZmF1bHRTdGVwQmFzZSkpOwotICAgIGNvbnN0IERlY2lt
YWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWlu
QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1pbmltdW1Nb250aCgp
KSk7Ci0gICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCku
ZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9u
ZW50czo6bWF4aW11bU1vbnRoKCkpKTsKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFu
Z2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgp
LmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNl
ID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShtb250aERlZmF1bHRTdGVwQmFzZSkpOwor
ICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUo
RGF0ZUNvbXBvbmVudHM6Om1pbmltdW1Nb250aCgpKSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhp
bXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11
bU1vbnRoKCkpKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3Rl
cChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdlKHN0
ZXBCYXNlLCBSYW5nZUxpbWl0YXRpb25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwg
c3RlcERlc2NyaXB0aW9uKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9OdW1iZXJJ
bnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvTnVtYmVySW5w
dXRUeXBlLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9OdW1i
ZXJJbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsMTQgKzE1MywxNCBAQCBib29s
IE51bWJlcklucHV0VHlwZTo6dHlwZU1pc21hdGNoKCkgY29uCiBTdGVwUmFuZ2UgTnVtYmVySW5w
dXRUeXBlOjpjcmVhdGVTdGVwUmFuZ2UoQW55U3RlcEhhbmRsaW5nIGFueVN0ZXBIYW5kbGluZykg
Y29uc3QKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJhbmdlOjpTdGVw
RGVzY3JpcHRpb24+IHN0ZXBEZXNjcmlwdGlvbihudW1iZXJEZWZhdWx0U3RlcCwgbnVtYmVyRGVm
YXVsdFN0ZXBCYXNlLCBudW1iZXJTdGVwU2NhbGVGYWN0b3IpOwotICAgIGNvbnN0IERlY2ltYWwg
c3RlcEJhc2UgPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUoZWxlbWVudCgpLmZhc3RHZXRB
dHRyaWJ1dGUobWluQXR0ciksIG51bWJlckRlZmF1bHRTdGVwQmFzZSk7CisgICAgY29uc3QgRGVj
aW1hbCBzdGVwQmFzZSA9IHBhcnNlVG9EZWNpbWFsRm9yTnVtYmVyVHlwZShlbGVtZW50KCkuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgbnVtYmVyRGVmYXVsdFN0ZXBC
YXNlKTsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBudW1lcmljX2xpbWl0czxkb3VibGU+
OjptYXggZm9yIG51bWJlciBpbnB1dCB0eXBlLgogICAgIGNvbnN0IERlY2ltYWwgZmxvYXRNYXgg
PSBEZWNpbWFsOjpmcm9tRG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7
CiAgICAgY29uc3QgRWxlbWVudCYgZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKTsKIAogICAgIFJh
bmdlTGltaXRhdGlvbnMgcmFuZ2VMaW1pdGF0aW9ucyA9IFJhbmdlTGltaXRhdGlvbnM6OkludmFs
aWQ7CiAgICAgYXV0byBleHRyYWN0Qm91bmQgPSBbJl0gKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUsIGNvbnN0IERlY2ltYWwmIGRlZmF1bHRWYWx1ZSkgLT4gRGVjaW1hbCB7Ci0g
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBlbGVtZW50LmZhc3RH
ZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0cmlidXRlVmFsdWUgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
YXR0cmlidXRlTmFtZSk7CiAgICAgICAgIERlY2ltYWwgdmFsdWVGcm9tQXR0cmlidXRlID0gcGFy
c2VUb051bWJlck9yTmFOKGF0dHJpYnV0ZVZhbHVlKTsKICAgICAgICAgaWYgKHZhbHVlRnJvbUF0
dHJpYnV0ZS5pc0Zpbml0ZSgpKSB7CiAgICAgICAgICAgICByYW5nZUxpbWl0YXRpb25zID0gUmFu
Z2VMaW1pdGF0aW9uczo6VmFsaWQ7CkBAIC0xNzEsNyArMTcxLDcgQEAgU3RlcFJhbmdlIE51bWJl
cklucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbgogICAgIERlY2ltYWwgbWluaW11bSA9IGV4dHJhY3RC
b3VuZChtaW5BdHRyLCAtZmxvYXRNYXgpOwogICAgIERlY2ltYWwgbWF4aW11bSA9IGV4dHJhY3RC
b3VuZChtYXhBdHRyLCBmbG9hdE1heCk7CiAKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVw
UmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVu
dC5mYXN0R2V0QXR0cmlidXRlKHN0ZXBBdHRyKSk7CisgICAgY29uc3QgRGVjaW1hbCBzdGVwID0g
U3RlcFJhbmdlOjpwYXJzZVN0ZXAoYW55U3RlcEhhbmRsaW5nLCBzdGVwRGVzY3JpcHRpb24sIGVs
ZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwogICAgIHJl
dHVybiBTdGVwUmFuZ2Uoc3RlcEJhc2UsIHJhbmdlTGltaXRhdGlvbnMsIG1pbmltdW0sIG1heGlt
dW0sIHN0ZXAsIHN0ZXBEZXNjcmlwdGlvbik7CiB9CiAKQEAgLTE3OSwxNSArMTc5LDE1IEBAIGJv
b2wgTnVtYmVySW5wdXRUeXBlOjpzaXplU2hvdWxkSW5jbHVkZUQKIHsKICAgICBwcmVmZXJyZWRT
aXplID0gZGVmYXVsdFNpemU7CiAKLSAgICBhdXRvJiBzdGVwU3RyaW5nID0gZWxlbWVudCgpLmZh
c3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpOworICAgIGF1dG8mIHN0ZXBTdHJpbmcgPSBlbGVtZW50
KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cik7CiAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHN0ZXBTdHJpbmcsICJhbnkiKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb0RlY2lt
YWxGb3JOdW1iZXJUeXBlKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpKTsKKyAg
ICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUoZWxl
bWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWluQXR0cikpOwogICAgIGlm
ICghbWluaW11bS5pc0Zpbml0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25z
dCBEZWNpbWFsIG1heGltdW0gPSBwYXJzZVRvRGVjaW1hbEZvck51bWJlclR5cGUoZWxlbWVudCgp
LmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0cikpOworICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9
IHBhcnNlVG9EZWNpbWFsRm9yTnVtYmVyVHlwZShlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihtYXhBdHRyKSk7CiAgICAgaWYgKCFtYXhpbXVtLmlzRmluaXRlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlu
cHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9SYW5nZUlucHV0
VHlwZS5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFuZ2VJ
bnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMTYgKzExNywxNiBAQCBTdGVwUmFu
Z2UgUmFuZ2VJbnB1dFR5cGU6OmNyZWF0ZVN0ZXBSYW5nCiB7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uPiBzdGVwRGVzY3JpcHRpb24o
cmFuZ2VEZWZhdWx0U3RlcCwgcmFuZ2VEZWZhdWx0U3RlcEJhc2UsIHJhbmdlU3RlcFNjYWxlRmFj
dG9yKTsKIAotICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVu
dCgpLmZhc3RHZXRBdHRyaWJ1dGUobWluQXR0ciksIHJhbmdlRGVmYXVsdE1pbmltdW0pOwotICAg
IGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IGVuc3VyZU1heGltdW0ocGFyc2VUb051bWJlcihlbGVt
ZW50KCkuZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgcmFuZ2VEZWZhdWx0TWF4aW11bSksIG1p
bmltdW0sIHJhbmdlRGVmYXVsdE1heGltdW0pOworICAgIGNvbnN0IERlY2ltYWwgbWluaW11bSA9
IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
bWluQXR0ciksIHJhbmdlRGVmYXVsdE1pbmltdW0pOworICAgIGNvbnN0IERlY2ltYWwgbWF4aW11
bSA9IGVuc3VyZU1heGltdW0ocGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihtYXhBdHRyKSwgcmFuZ2VEZWZhdWx0TWF4aW11bSksIG1pbmltdW0s
IHJhbmdlRGVmYXVsdE1heGltdW0pOwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVjaXNp
b25WYWx1ZSA9IGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIpOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgcHJlY2lzaW9uVmFsdWUgPSBlbGVtZW50KCkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihwcmVjaXNpb25BdHRyKTsKICAgICBpZiAoIXByZWNpc2lv
blZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHByZWNpc2lvblZhbHVlLCAiZmxvYXQiKSA/IERlY2ltYWw6
Om5hbigpIDogMTsKICAgICAgICAgcmV0dXJuIFN0ZXBSYW5nZShtaW5pbXVtLCBSYW5nZUxpbWl0
YXRpb25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2NyaXB0aW9uKTsK
ICAgICB9CiAKLSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChh
bnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1
dGUoc3RlcEF0dHIpKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNl
U3RlcChhbnlTdGVwSGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdl
KG1pbmltdW0sIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVw
LCBzdGVwRGVzY3JpcHRpb24pOwogfQogCkBAIC0yMDgsNyArMjA4LDcgQEAgdm9pZCBSYW5nZUlu
cHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KAogCiAgICAgLy8gRklYTUU6IFdlIGNhbid0IHVz
ZSBzdGVwVXAoKSBmb3IgdGhlIHN0ZXAgdmFsdWUgImFueSIuIFNvLCB3ZSBpbmNyZWFzZQogICAg
IC8vIG9yIGRlY3JlYXNlIHRoZSB2YWx1ZSBieSAxLzEwMCBvZiB0aGUgdmFsdWUgcmFuZ2UuIElz
IGl0IHJlYXNvbmFibGU/Ci0gICAgY29uc3QgRGVjaW1hbCBzdGVwID0gZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0dHIpLCAiYW55
IikgPyAoc3RlcFJhbmdlLm1heGltdW0oKSAtIHN0ZXBSYW5nZS5taW5pbXVtKCkpIC8gMTAwIDog
c3RlcFJhbmdlLnN0ZXAoKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihzdGVwQXR0ciksICJhbnkiKSA/IChzdGVwUmFuZ2UubWF4aW11bSgpIC0gc3RlcFJhbmdlLm1p
bmltdW0oKSkgLyAxMDAgOiBzdGVwUmFuZ2Uuc3RlcCgpOwogICAgIGNvbnN0IERlY2ltYWwgYmln
U3RlcCA9IHN0ZDo6bWF4KChzdGVwUmFuZ2UubWF4aW11bSgpIC0gc3RlcFJhbmdlLm1pbmltdW0o
KSkgLyAxMCwgc3RlcCk7CiAKICAgICBib29sIGlzVmVydGljYWwgPSBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAJKHJldmlzaW9uIDIwMzMy
MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTE5LDcgKzUxOSw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjp1cGRh
dGVQbGFjZWhvbGQKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjphcHBlbmRGb3JtRGF0YShGb3Jt
RGF0YUxpc3QmIGxpc3QsIGJvb2wgbXVsdGlwYXJ0KSBjb25zdAogewogICAgIElucHV0VHlwZTo6
YXBwZW5kRm9ybURhdGEobGlzdCwgbXVsdGlwYXJ0KTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGRpcm5hbWVBdHRyVmFsdWUgPSBlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShkaXJuYW1lQXR0
cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJuYW1lQXR0clZhbHVlID0gZWxlbWVudCgp
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlybmFtZUF0dHIpOwogICAgIGlmICgh
ZGlybmFtZUF0dHJWYWx1ZS5pc051bGwoKSkKICAgICAgICAgbGlzdC5hcHBlbmREYXRhKGRpcm5h
bWVBdHRyVmFsdWUsIGVsZW1lbnQoKS5kaXJlY3Rpb25Gb3JGb3JtRGF0YSgpKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTY3OCw3ICs2NzgsNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6dXBk
YXRlQXV0b0ZpbGxCCiAgICAgICAgIGlmICghbV9hdXRvRmlsbEJ1dHRvbikKICAgICAgICAgICAg
IGNyZWF0ZUF1dG9GaWxsQnV0dG9uKGVsZW1lbnQoKS5hdXRvRmlsbEJ1dHRvblR5cGUoKSk7CiAK
LSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGUgPSBtX2F1dG9GaWxsQnV0dG9u
LT5mYXN0R2V0QXR0cmlidXRlKHBzZXVkb0F0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZSA9IG1fYXV0b0ZpbGxCdXR0b24tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24ocHNldWRvQXR0cik7CiAgICAgICAgIGJvb2wgc2hvdWxkVXBkYXRlQXV0b0ZpbGxC
dXR0b25UeXBlID0gaXNBdXRvRmlsbEJ1dHRvblR5cGVDaGFuZ2VkKGF0dHJpYnV0ZSwgZWxlbWVu
dCgpLmF1dG9GaWxsQnV0dG9uVHlwZSgpKTsKICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUF1dG9G
aWxsQnV0dG9uVHlwZSkgewogICAgICAgICAgICAgbV9hdXRvRmlsbEJ1dHRvbi0+c2V0UHNldWRv
KGF1dG9GaWxsQnV0dG9uVHlwZVRvQXV0b0ZpbGxCdXR0b25Qc2V1ZG9DbGFzc05hbWUoZWxlbWVu
dCgpLmF1dG9GaWxsQnV0dG9uVHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1Rp
bWVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGltZUlu
cHV0VHlwZS5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVGlt
ZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCwxMCBAQCBTdGVwUmFu
Z2UgVGltZUlucHV0VHlwZTo6Y3JlYXRlU3RlcFJhbmdlCiB7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPGNvbnN0IFN0ZXBSYW5nZTo6U3RlcERlc2NyaXB0aW9uPiBzdGVwRGVzY3JpcHRpb24o
dGltZURlZmF1bHRTdGVwLCB0aW1lRGVmYXVsdFN0ZXBCYXNlLCB0aW1lU3RlcFNjYWxlRmFjdG9y
LCBTdGVwUmFuZ2U6OlNjYWxlZFN0ZXBWYWx1ZVNob3VsZEJlSW50ZWdlcik7CiAKLSAgICBjb25z
dCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuZmFzdEdldEF0dHJp
YnV0ZShtaW5BdHRyKSwgMCk7Ci0gICAgY29uc3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051
bWJlcihlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURv
dWJsZShEYXRlQ29tcG9uZW50czo6bWluaW11bVRpbWUoKSkpOwotICAgIGNvbnN0IERlY2ltYWwg
bWF4aW11bSA9IHBhcnNlVG9OdW1iZXIoZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0
ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1UaW1lKCkpKTsK
LSAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVwSGFu
ZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoc3RlcEF0
dHIpKTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXBCYXNlID0gcGFyc2VUb051bWJlcihlbGVtZW50
KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgMCk7CisgICAgY29u
c3QgRGVjaW1hbCBtaW5pbXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihtaW5BdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29t
cG9uZW50czo6bWluaW11bVRpbWUoKSkpOworICAgIGNvbnN0IERlY2ltYWwgbWF4aW11bSA9IHBh
cnNlVG9OdW1iZXIoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obWF4
QXR0ciksIERlY2ltYWw6OmZyb21Eb3VibGUoRGF0ZUNvbXBvbmVudHM6Om1heGltdW1UaW1lKCkp
KTsKKyAgICBjb25zdCBEZWNpbWFsIHN0ZXAgPSBTdGVwUmFuZ2U6OnBhcnNlU3RlcChhbnlTdGVw
SGFuZGxpbmcsIHN0ZXBEZXNjcmlwdGlvbiwgZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oc3RlcEF0dHIpKTsKICAgICByZXR1cm4gU3RlcFJhbmdlKHN0ZXBCYXNlLCBS
YW5nZUxpbWl0YXRpb25zOjpWYWxpZCwgbWluaW11bSwgbWF4aW11bSwgc3RlcCwgc3RlcERlc2Ny
aXB0aW9uKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2Fn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9WYWxpZGF0aW9uTWVzc2Fn
ZS5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVmFsaWRhdGlv
bk1lc3NhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHZvaWQgVmFsaWRh
dGlvbk1lc3NhZ2U6OnVwZGF0ZVZhbGlkYXRpb24KICAgICAgICAgLy8gd2l0aCB0aGUgdmFsaWRh
dGlvbk1lc3NhZ2UuIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IgaXMgc2FtZSBhcyBPcGVyYQogICAg
ICAgICAvLyBhbmQgdGhlIHNwZWNpZmljYXRpb24gZGVzY3JpYmVzIHN1Y2ggYmVoYXZpb3IgYXMg
YW4gZXhhbXBsZS4KICAgICAgICAgaWYgKCF1cGRhdGVkTWVzc2FnZS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBtX2VsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0
bGUgPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odGl0bGVBdHRy
KTsKICAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHVw
ZGF0ZWRNZXNzYWdlID0gdXBkYXRlZE1lc3NhZ2UgKyAnXG4nICsgdGl0bGU7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvV2Vla0lucHV0VHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjAzMzIy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9XZWVrSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksMTAgKzU5LDEwIEBAIFN0ZXBSYW5nZSBXZWVrSW5wdXRUeXBlOjpjcmVhdGVTdGVw
UmFuZ2UKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RlcFJhbmdlOjpTdGVw
RGVzY3JpcHRpb24+IHN0ZXBEZXNjcmlwdGlvbih3ZWVrRGVmYXVsdFN0ZXAsIHdlZWtEZWZhdWx0
U3RlcEJhc2UsIHdlZWtTdGVwU2NhbGVGYWN0b3IsIFN0ZXBSYW5nZTo6UGFyc2VkU3RlcFZhbHVl
U2hvdWxkQmVJbnRlZ2VyKTsKIAotICAgIGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRv
TnVtYmVyKGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCB3ZWVrRGVmYXVsdFN0
ZXBCYXNlKTsKLSAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1l
bnQoKS5mYXN0R2V0QXR0cmlidXRlKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91YmxlKERhdGVD
b21wb25lbnRzOjptaW5pbXVtV2VlaygpKSk7Ci0gICAgY29uc3QgRGVjaW1hbCBtYXhpbXVtID0g
cGFyc2VUb051bWJlcihlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShtYXhBdHRyKSwgRGVjaW1h
bDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11bVdlZWsoKSkpOwotICAgIGNvbnN0
IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVwKGFueVN0ZXBIYW5kbGluZywgc3Rl
cERlc2NyaXB0aW9uLCBlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShzdGVwQXR0cikpOworICAg
IGNvbnN0IERlY2ltYWwgc3RlcEJhc2UgPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCB3ZWVrRGVmYXVsdFN0ZXBCYXNlKTsK
KyAgICBjb25zdCBEZWNpbWFsIG1pbmltdW0gPSBwYXJzZVRvTnVtYmVyKGVsZW1lbnQoKS5hdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG1pbkF0dHIpLCBEZWNpbWFsOjpmcm9tRG91Ymxl
KERhdGVDb21wb25lbnRzOjptaW5pbXVtV2VlaygpKSk7CisgICAgY29uc3QgRGVjaW1hbCBtYXhp
bXVtID0gcGFyc2VUb051bWJlcihlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtYXhBdHRyKSwgRGVjaW1hbDo6ZnJvbURvdWJsZShEYXRlQ29tcG9uZW50czo6bWF4aW11
bVdlZWsoKSkpOworICAgIGNvbnN0IERlY2ltYWwgc3RlcCA9IFN0ZXBSYW5nZTo6cGFyc2VTdGVw
KGFueVN0ZXBIYW5kbGluZywgc3RlcERlc2NyaXB0aW9uLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihzdGVwQXR0cikpOwogICAgIHJldHVybiBTdGVwUmFuZ2Uoc3Rl
cEJhc2UsIFJhbmdlTGltaXRhdGlvbnM6OlZhbGlkLCBtaW5pbXVtLCBtYXhpbXVtLCBzdGVwLCBz
dGVwRGVzY3JpcHRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1dl
YlZUVEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
V2ViVlRURWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svV2ViVlRURWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDggKzk2LDgg
QEAgUmVmPEhUTUxFbGVtZW50PiBXZWJWVFRFbGVtZW50OjpjcmVhdGVFcQogICAgIGNhc2UgV2Vi
VlRUTm9kZVR5cGVMYW5ndWFnZToKICAgICBjYXNlIFdlYlZUVE5vZGVUeXBlVm9pY2U6CiAgICAg
ICAgIGh0bWxFbGVtZW50ID0gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVFbGVtZW50KEhUTUxO
YW1lczo6c3BhblRhZywgZG9jdW1lbnQpOwotICAgICAgICBodG1sRWxlbWVudC0+c2V0QXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0ciwgZmFzdEdldEF0
dHJpYnV0ZSh2b2ljZUF0dHJpYnV0ZU5hbWUoKSkpOwotICAgICAgICBodG1sRWxlbWVudC0+c2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmxhbmdBdHRyLCBmYXN0
R2V0QXR0cmlidXRlKGxhbmdBdHRyaWJ1dGVOYW1lKCkpKTsKKyAgICAgICAgaHRtbEVsZW1lbnQt
PnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp0aXRsZUF0dHIs
IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odm9pY2VBdHRyaWJ1dGVOYW1lKCkpKTsK
KyAgICAgICAgaHRtbEVsZW1lbnQtPnNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
SFRNTE5hbWVzOjpsYW5nQXR0ciwgYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihsYW5n
QXR0cmlidXRlTmFtZSgpKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViVlRUTm9kZVR5
cGVJdGFsaWM6CiAgICAgICAgIGh0bWxFbGVtZW50ID0gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVh
dGVFbGVtZW50KEhUTUxOYW1lczo6aVRhZywgZG9jdW1lbnQpOwpAQCAtMTE4LDcgKzExOCw3IEBA
IFJlZjxIVE1MRWxlbWVudD4gV2ViVlRURWxlbWVudDo6Y3JlYXRlRXEKIAogICAgIEFTU0VSVCho
dG1sRWxlbWVudCk7CiAgICAgaWYgKGh0bWxFbGVtZW50KQotICAgICAgICBodG1sRWxlbWVudC0+
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmNsYXNzQXR0ciwg
ZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmNsYXNzQXR0cikpOworICAgICAgICBodG1sRWxl
bWVudC0+c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmNsYXNz
QXR0ciwgYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmNsYXNzQXR0
cikpOwogICAgIHJldHVybiBodG1sRWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAko
cmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyNiw3ICs5MjYsNyBAQCBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IEluCiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1l
bnQoKSkgewogICAgICAgICBTdHJpbmcgbmFtZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKS0+Z2V0
TmFtZUF0dHJpYnV0ZSgpOwogICAgICAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBuYW1lID0gZnJhbWUtPm93bmVyRWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6aWRBdHRyKTsKKyAgICAgICAgICAgIG5hbWUgPSBmcmFtZS0+b3duZXJFbGVtZW50KCktPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjppZEF0dHIpOwogICAgICAg
ICBmcmFtZU9iamVjdC0+c2V0TmFtZShuYW1lKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0
LDEzICsxNzQsMTMgQEAgUmVmPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYQog
ICAgIGNvcGllZEF0dHJpYnV0ZXMuY29weUZyb20oYXR0cmlidXRlcyk7CiAgICAgaWYgKHN1Ym1p
dEJ1dHRvbikgewogICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlVmFsdWU7Ci0gICAgICAg
IGlmICghKGF0dHJpYnV0ZVZhbHVlID0gc3VibWl0QnV0dG9uLT5mYXN0R2V0QXR0cmlidXRlKGZv
cm1hY3Rpb25BdHRyKSkuaXNOdWxsKCkpCisgICAgICAgIGlmICghKGF0dHJpYnV0ZVZhbHVlID0g
c3VibWl0QnV0dG9uLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGZvcm1hY3Rpb25B
dHRyKSkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb3BpZWRBdHRyaWJ1dGVzLnBhcnNlQWN0aW9u
KGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRC
dXR0b24tPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybWVuY3R5cGVBdHRyKSkuaXNOdWxsKCkpCisgICAg
ICAgIGlmICghKGF0dHJpYnV0ZVZhbHVlID0gc3VibWl0QnV0dG9uLT5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKGZvcm1lbmN0eXBlQXR0cikpLmlzTnVsbCgpKQogICAgICAgICAgICAg
Y29waWVkQXR0cmlidXRlcy51cGRhdGVFbmNvZGluZ1R5cGUoYXR0cmlidXRlVmFsdWUpOwotICAg
ICAgICBpZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+ZmFzdEdldEF0dHJpYnV0
ZShmb3JtbWV0aG9kQXR0cikpLmlzTnVsbCgpKQorICAgICAgICBpZiAoIShhdHRyaWJ1dGVWYWx1
ZSA9IHN1Ym1pdEJ1dHRvbi0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihmb3JtbWV0
aG9kQXR0cikpLmlzTnVsbCgpKQogICAgICAgICAgICAgY29waWVkQXR0cmlidXRlcy51cGRhdGVN
ZXRob2RUeXBlKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUg
PSBzdWJtaXRCdXR0b24tPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybXRhcmdldEF0dHIpKS5pc051bGwo
KSkKKyAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRCdXR0b24tPmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZm9ybXRhcmdldEF0dHIpKS5pc051bGwoKSkKICAgICAg
ICAgICAgIGNvcGllZEF0dHJpYnV0ZXMuc2V0VGFyZ2V0KGF0dHJpYnV0ZVZhbHVlKTsKICAgICB9
CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9u
IDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNzAsNyArMTI3MCw3IEBAIFN1YnN0aXR1dGVEYXRhIEZyYW1lTG9hZGVy
OjpkZWZhdWx0U3Vic3QKIHsKICAgICBpZiAoIXNob3VsZFRyZWF0VVJMQXNTcmNkb2NEb2N1bWVu
dCh1cmwpKQogICAgICAgICByZXR1cm4gU3Vic3RpdHV0ZURhdGEoKTsKLSAgICBTdHJpbmcgc3Jj
ZG9jID0gbV9mcmFtZS5vd25lckVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShzcmNkb2NBdHRy
KTsKKyAgICBTdHJpbmcgc3JjZG9jID0gbV9mcmFtZS5vd25lckVsZW1lbnQoKS0+YXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihzcmNkb2NBdHRyKTsKICAgICBBU1NFUlQoIXNyY2RvYy5p
c051bGwoKSk7CiAgICAgQ1N0cmluZyBlbmNvZGVkU3JjZG9jID0gc3JjZG9jLnV0ZjgoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMDMzMjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzksNyArMTc5LDcgQEAgdm9pZCBJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
KQogICAgICAgICBDYWNoZWRSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChSZXNvdXJjZVJlcXVlc3Qo
ZG9jdW1lbnQuY29tcGxldGVVUkwoc291cmNlVVJJKGF0dHIpKSksIG9wdGlvbnMpOwogICAgICAg
ICByZXF1ZXN0LnNldEluaXRpYXRvcigmZWxlbWVudCgpKTsKIAotICAgICAgICBTdHJpbmcgY3Jv
c3NPcmlnaW5Nb2RlID0gZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpjcm9z
c29yaWdpbkF0dHIpOworICAgICAgICBTdHJpbmcgY3Jvc3NPcmlnaW5Nb2RlID0gZWxlbWVudCgp
LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpjcm9zc29yaWdpbkF0
dHIpOwogICAgICAgICBpZiAoIWNyb3NzT3JpZ2luTW9kZS5pc051bGwoKSkgewogICAgICAgICAg
ICAgU3RvcmVkQ3JlZGVudGlhbHMgYWxsb3dDcmVkZW50aWFscyA9IGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGNyb3NzT3JpZ2luTW9kZSwgInVzZS1jcmVkZW50aWFscyIpID8gQWxsb3dT
dG9yZWRDcmVkZW50aWFscyA6IERvTm90QWxsb3dTdG9yZWRDcmVkZW50aWFsczsKICAgICAgICAg
ICAgIEFTU0VSVChkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDcgKzExNyw3IEBAIGJvb2wgU3ViZnJhbWVMb2FkZXI6OmlzUGx1Z2luQ29udGVudEFsbG8KICAg
ICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIGNvbnRlbnRTZWN1cml0eVBvbGljeSA9ICpk
b2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQb2xpY3koKTsKIAogICAgIFN0cmluZyBkZWNsYXJl
ZE1pbWVUeXBlID0gZG9jdW1lbnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpICYmIGRvY3VtZW50KCkt
Pm93bmVyRWxlbWVudCgpID8KLSAgICAgICAgZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCktPmZh
c3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0cikgOiBwbHVnaW5FbGVtZW50LmZhc3RH
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0cik7CisgICAgICAgIGRvY3VtZW50KCktPm93
bmVyRWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6
dHlwZUF0dHIpIDogcGx1Z2luRWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KEhUTUxOYW1lczo6dHlwZUF0dHIpOwogICAgIGJvb2wgaXNJblVzZXJBZ2VudFNoYWRvd1RyZWUg
PSBwbHVnaW5FbGVtZW50LmlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCk7CiAgICAgcmV0dXJuIGNv
bnRlbnRTZWN1cml0eVBvbGljeS5hbGxvd09iamVjdEZyb21Tb3VyY2UodXJsLCBpc0luVXNlckFn
ZW50U2hhZG93VHJlZSkgJiYgY29udGVudFNlY3VyaXR5UG9saWN5LmFsbG93UGx1Z2luVHlwZSht
aW1lVHlwZSwgZGVjbGFyZWRNaW1lVHlwZSwgdXJsLCBpc0luVXNlckFnZW50U2hhZG93VHJlZSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTEVsZW1lbnQuY3BwCShyZXZpc2lv
biAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCB1bnNpZ25lZCBNYXRoTUxFbGVtZW50Ojpj
b2xTcGFuKCkgY29uc3QKIHsKICAgICBpZiAoIWhhc1RhZ05hbWUobXRkVGFnKSkKICAgICAgICAg
cmV0dXJuIDF1OwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29sU3BhblZhbHVlID0gZmFzdEdl
dEF0dHJpYnV0ZShjb2x1bW5zcGFuQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2xT
cGFuVmFsdWUgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGNvbHVtbnNwYW5BdHRy
KTsKICAgICByZXR1cm4gc3RkOjptYXgoMXUsIGxpbWl0VG9Pbmx5SFRNTE5vbk5lZ2F0aXZlKGNv
bFNwYW5WYWx1ZSwgMXUpKTsKIH0KIApAQCAtMjE0LDcgKzIxNCw3IEBAIHVuc2lnbmVkIE1hdGhN
TEVsZW1lbnQ6OnJvd1NwYW4oKSBjb25zdAogewogICAgIGlmICghaGFzVGFnTmFtZShtdGRUYWcp
KQogICAgICAgICByZXR1cm4gMXU7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiByb3dTcGFuVmFs
dWUgPSBmYXN0R2V0QXR0cmlidXRlKHJvd3NwYW5BdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHJvd1NwYW5WYWx1ZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24ocm93c3Bh
bkF0dHIpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSb3dzcGFuID0gODE5MDsgLy8g
VGhpcyBjb25zdGFudCBjb21lcyBmcm9tIEhUTUxUYWJsZUNlbGxFbGVtZW50LgogICAgIHJldHVy
biBzdGQ6Om1heCgxdSwgc3RkOjptaW4obGltaXRUb09ubHlIVE1MTm9uTmVnYXRpdmUocm93U3Bh
blZhbHVlLCAxdSksIG1heFJvd3NwYW4pKTsKIH0KQEAgLTI3OSw3ICsyNzksNyBAQCB2b2lkIE1h
dGhNTEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvclByZXNlCiBib29sIE1hdGhNTEVsZW1lbnQ6OmNo
aWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYgY2hpbGQpIGNvbnN0CiB7CiAgICAg
aWYgKGhhc1RhZ05hbWUoYW5ub3RhdGlvbl94bWxUYWcpKSB7Ci0gICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjplbmNvZGluZ0F0
dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihNYXRoTUxOYW1lczo6ZW5jb2RpbmdBdHRyKTsKIAogICAgICAgICAv
LyBTZWUgYW5ub3RhdGlvbi14bWwubW9kZWwubWF0aG1sLCBhbm5vdGF0aW9uLXhtbC5tb2RlbC5z
dmcgYW5kIGFubm90YXRpb24teG1sLm1vZGVsLnhodG1sIGluIHRoZSBIVE1MNSBSZWxheE5HIHNj
aGVtYS4KIApAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgTWF0aE1MRWxlbWVudDo6ZGVmYXVsdEV2
ZW50SGFuZGxlcigKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAo
TW91c2VFdmVudDo6Y2FuVHJpZ2dlckFjdGl2YXRpb25CZWhhdmlvcigqZXZlbnQpKSB7Ci0gICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGhyZWYgPSBmYXN0R2V0QXR0cmlidXRlKGhyZWZB
dHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHJlZiA9IGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oaHJlZkF0dHIpOwogICAgICAgICAgICAgU3RyaW5nIHVybCA9
IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhocmVmKTsKICAgICAgICAgICAgIGV2
ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50KCkuZnJhbWUoKSkKQEAgLTUxOSw3ICs1MTksNyBAQCBNYXRoTUxFbGVtZW50OjpM
ZW5ndGggTWF0aE1MRWxlbWVudDo6cGFyCiBjb25zdCBNYXRoTUxFbGVtZW50OjpMZW5ndGgmIE1h
dGhNTEVsZW1lbnQ6OmNhY2hlZE1hdGhNTExlbmd0aChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBMZW5ndGgmIGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoLmRpcnR5KSB7Ci0gICAgICAgIGxl
bmd0aCA9IHBhcnNlTWF0aE1MTGVuZ3RoKGZhc3RHZXRBdHRyaWJ1dGUobmFtZSkpOworICAgICAg
ICBsZW5ndGggPSBwYXJzZU1hdGhNTExlbmd0aChhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKG5hbWUpKTsKICAgICAgICAgbGVuZ3RoLmRpcnR5ID0gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiBsZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRnJhY3Rpb25F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MRnJh
Y3Rpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvbWF0
aG1sL01hdGhNTEZyYWN0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUz
LDcgQEAgY29uc3QgTWF0aE1MRWxlbWVudDo6TGVuZ3RoJiBNYXRoTUxGcmFjdAogICAgIC8vIFRo
ZSBNYXRoTUwzIHJlY29tbWVuZGF0aW9uIHN0YXRlcyB0aGF0ICJtZWRpdW0iIGlzIHRoZSBkZWZh
dWx0IHRoaWNrbmVzcy4KICAgICAvLyBIb3dldmVyLCBpdCBvbmx5IHN0YXRlcyB0aGF0ICJ0aGlu
IiBhbmQgInRoaWNrIiBhcmUgcmVzcGVjdGl2ZWx5IHRoaW5lciBhbmQgdGhpY2tlci4KICAgICAv
LyBUaGUgTWF0aE1MIGluIEhUTUw1IGltcGxlbWVudGF0aW9uIG5vdGUgc3VnZ2VzdHMgNTAlIGFu
ZCAyMDAlIGFuZCB0aGVzZSB2YWx1ZXMgYXJlIGFsc28gdXNlZCBpbiBHZWNrby4KLSAgICBTdHJp
bmcgdGhpY2tuZXNzID0gZmFzdEdldEF0dHJpYnV0ZShsaW5ldGhpY2tuZXNzQXR0cik7CisgICAg
U3RyaW5nIHRoaWNrbmVzcyA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obGluZXRo
aWNrbmVzc0F0dHIpOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0aGlj
a25lc3MsICJ0aGluIikpIHsKICAgICAgICAgbV9saW5lVGhpY2tuZXNzLnR5cGUgPSBMZW5ndGhU
eXBlOjpVbml0TGVzczsKICAgICAgICAgbV9saW5lVGhpY2tuZXNzLnZhbHVlID0gLjU7CkBAIC03
NCw3ICs3NCw3IEBAIE1hdGhNTEZyYWN0aW9uRWxlbWVudDo6RnJhY3Rpb25BbGlnbm1lbnQKICAg
ICBpZiAoIWFsaWdubWVudC5kaXJ0eSkKICAgICAgICAgcmV0dXJuIGFsaWdubWVudC52YWx1ZTsK
IAotICAgIFN0cmluZyB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUobmFtZSk7CisgICAgU3RyaW5n
IHZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihuYW1lKTsKICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJsZWZ0IikpCiAgICAgICAgIGFs
aWdubWVudC52YWx1ZSA9IEZyYWN0aW9uQWxpZ25tZW50TGVmdDsKICAgICBlbHNlIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1ZSwgInJpZ2h0IikpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbWF0aG1sL01hdGhNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMz
MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MU2VsZWN0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBpbnQgTWF0aE1MU2VsZWN0RWxlbWVudDo6
Z2V0U2VsZWN0ZWRBY3RpCiAgICAgaWYgKCFzZWxlY3RlZENoaWxkKQogICAgICAgICByZXR1cm4g
MTsKIAotICAgIGludCBzZWxlY3Rpb24gPSBmYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpz
ZWxlY3Rpb25BdHRyKS50b0ludCgpOworICAgIGludCBzZWxlY3Rpb24gPSBhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKE1hdGhNTE5hbWVzOjpzZWxlY3Rpb25BdHRyKS50b0ludCgpOwog
ICAgIGludCBpOwogICAgIGZvciAoaSA9IDE7IGkgPCBzZWxlY3Rpb247IGkrKykgewogICAgICAg
ICBhdXRvKiBuZXh0Q2hpbGQgPSBzZWxlY3RlZENoaWxkLT5uZXh0RWxlbWVudFNpYmxpbmcoKTsK
QEAgLTEzNiw3ICsxMzYsNyBAQCBFbGVtZW50KiBNYXRoTUxTZWxlY3RFbGVtZW50OjpnZXRTZWxl
Y3RlCiAgICAgICAgIHJldHVybiBjaGlsZDsKIAogICAgIC8vIFRoZSB2YWx1ZSBvZiB0aGUgYWN0
aW9udHlwZSBhdHRyaWJ1dGUgaXMgY2FzZS1zZW5zaXRpdmUuCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhY3Rpb250eXBlID0gZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6YWN0aW9udHlw
ZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWN0aW9udHlwZSA9IGF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oTWF0aE1MTmFtZXM6OmFjdGlvbnR5cGVBdHRyKTsKICAgICBp
ZiAoYWN0aW9udHlwZSA9PSAic3RhdHVzbGluZSIpCiAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQgdXNlciBpbnRlcmFjdGlvbiBmb3IgdGhlICJzdGF0dXNsaW5lIiBhY3Rpb24gdHlwZSAoaHR0
cDovL3drYnVnLzEyNDkyMikuCiAgICAgICAgIHsgfQpAQCAtMTg1LDcgKzE4NSw3IEBAIEVsZW1l
bnQqIE1hdGhNTFNlbGVjdEVsZW1lbnQ6OmdldFNlbGVjdGUKICAgICAgICAgICAgIGlmIChjaGls
ZC0+aGFzQXR0cmlidXRlKE1hdGhNTE5hbWVzOjpzcmNBdHRyKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSA8YW5ub3RhdGlvbi14bWw+IGVsZW1lbnQg
aGFzIGFuIGVuY29kaW5nIGF0dHJpYnV0ZSBkZXNjcmliaW5nIHByZXNlbnRhdGlvbiBNYXRoTUws
IFNWRyBvciBIVE1MIHdlIGFzc3VtZSB0aGUgY29udGVudCBjYW4gYmUgZGlzcGxheWVkIGFuZCB3
ZSBzdG9wIGhlcmUuCi0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gY2hp
bGQtPmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmVuY29kaW5nQXR0cik7CisgICAgICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gY2hpbGQtPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oTWF0aE1MTmFtZXM6OmVuY29kaW5nQXR0cik7CiAgICAgICAgICAgICBp
ZiAoaXNNYXRoTUxFbmNvZGluZyh2YWx1ZSkgfHwgaXNTVkdFbmNvZGluZyh2YWx1ZSkgfHwgaXNI
VE1MRW5jb2RpbmcodmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKICAgICAg
ICAgfQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTWF0aE1MU2VsZWN0RWxlbWVudDo6dXBkYXRl
U2VsZWN0ZWQKIHZvaWQgTWF0aE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCogZXZlbnQpCiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNs
aWNrRXZlbnQpIHsKLSAgICAgICAgaWYgKGZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmFj
dGlvbnR5cGVBdHRyKSA9PSAidG9nZ2xlIikgeworICAgICAgICBpZiAoYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihNYXRoTUxOYW1lczo6YWN0aW9udHlwZUF0dHIpID09ICJ0b2dnbGUi
KSB7CiAgICAgICAgICAgICB0b2dnbGUoKTsKICAgICAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0
SGFuZGxlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQg
TWF0aE1MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGEKIAogYm9vbCBNYXRoTUxTZWxlY3RF
bGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpCiB7Ci0gICAgcmV0dXJuIGZh
c3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmFjdGlvbnR5cGVBdHRyKSA9PSAidG9nZ2xlIiB8
fCBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50Ojp3aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2
ZW50cygpOworICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKE1hdGhN
TE5hbWVzOjphY3Rpb250eXBlQXR0cikgPT0gInRvZ2dsZSIgfHwgTWF0aE1MSW5saW5lQ29udGFp
bmVyRWxlbWVudDo6d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKTsKIH0KIAogdm9pZCBN
YXRoTUxTZWxlY3RFbGVtZW50Ojp0b2dnbGUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTg3LDcgKzIxODcsNyBAQCBzdGF0aWMg
Ym9vbCBmaW5kRHJvcFpvbmUoTm9kZSogdGFyZ2V0LCBECiAgICAgQVNTRVJUKHRhcmdldCk7CiAg
ICAgRWxlbWVudCogZWxlbWVudCA9IGlzPEVsZW1lbnQ+KCp0YXJnZXQpID8gZG93bmNhc3Q8RWxl
bWVudD4odGFyZ2V0KSA6IHRhcmdldC0+cGFyZW50RWxlbWVudCgpOwogICAgIGZvciAoOyBlbGVt
ZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIFNwYWNl
U3BsaXRTdHJpbmcga2V5d29yZHMoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh3ZWJraXRkcm9w
em9uZUF0dHIpLCB0cnVlKTsKKyAgICAgICAgU3BhY2VTcGxpdFN0cmluZyBrZXl3b3JkcyhlbGVt
ZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHdlYmtpdGRyb3B6b25lQXR0ciks
IHRydWUpOwogICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKICAgICAgICAgRHJhZ09wZXJh
dGlvbiBkcmFnT3BlcmF0aW9uID0gRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDAsIHNpemUgPSBrZXl3b3Jkcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc2LDcgKzQ3Niw3IEBAIFN0cmlu
ZyBGcmFtZTo6bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudCgKICAgICBpZiAoIXJlc3VsdEZyb21O
YW1lQXR0cmlidXRlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdEZyb21OYW1lQXR0
cmlidXRlOwogICAgIAotICAgIHJldHVybiBtYXRjaExhYmVsc0FnYWluc3RTdHJpbmcobGFiZWxz
LCBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGlkQXR0cikpOworICAgIHJldHVybiBtYXRjaExh
YmVsc0FnYWluc3RTdHJpbmcobGFiZWxzLCBlbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKGlkQXR0cikpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMs
MTMgKzIzMywxMyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtCiAK
ICAgICAgICAgaWYgKGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQpKSB7CiAgICAgICAgICAg
ICBIVE1MSW1hZ2VFbGVtZW50JiBpbWFnZUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MSW1hZ2VFbGVt
ZW50PihlbGVtZW50KTsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVV
UkwoaW1hZ2VFbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKSk7Cisg
ICAgICAgICAgICBVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3JjQXR0cikpOwogICAg
ICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LmNhY2hlZElt
YWdlKCk7CiAgICAgICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCBpbWFn
ZUVsZW1lbnQucmVuZGVyZXIoKSwgdXJsKTsKICAgICAgICAgfSBlbHNlIGlmIChpczxIVE1MTGlu
a0VsZW1lbnQ+KGVsZW1lbnQpKSB7CiAgICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQmIGxpbmtF
bGVtZW50ID0gZG93bmNhc3Q8SFRNTExpbmtFbGVtZW50PihlbGVtZW50KTsKICAgICAgICAgICAg
IGlmIChDU1NTdHlsZVNoZWV0KiBzaGVldCA9IGxpbmtFbGVtZW50LnNoZWV0KCkpIHsKLSAgICAg
ICAgICAgICAgICBVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGxpbmtFbGVtZW50LmZh
c3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0cikpOworICAgICAgICAgICAgICAgIFVS
TCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQuYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CiAgICAgICAgICAgICAgICAg
c2VyaWFsaXplQ1NTU3R5bGVTaGVldChzaGVldCwgdXJsKTsKICAgICAgICAgICAgICAgICBBU1NF
UlQobV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSk7CiAgICAgICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZpc2lv
biAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHZvaWQgUGFzdGVib2FyZDo6
d3JpdGVJbWFnZVRvRGF0YU9iamVjdCgKICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1
ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIR0xPQkFMIGltYWdlRmlsZURl
c2NyaXB0b3IgPSBjcmVhdGVHbG9iYWxJbWFnZUZpbGVEZXNjcmlwdG9yKHVybC5zdHJpbmcoKSwg
ZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0ciksIGNhY2hlZEltYWdl
KTsKKyAgICBIR0xPQkFMIGltYWdlRmlsZURlc2NyaXB0b3IgPSBjcmVhdGVHbG9iYWxJbWFnZUZp
bGVEZXNjcmlwdG9yKHVybC5zdHJpbmcoKSwgZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKEhUTUxOYW1lczo6YWx0QXR0ciksIGNhY2hlZEltYWdlKTsKICAgICBpZiAoIWlt
YWdlRmlsZURlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTMsNyArMzEzLDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OmFsdERpc3BsYXlTdHJpbmco
KQogICAgIAogICAgIGlmIChpczxIVE1MSW1hZ2VFbGVtZW50PigqbV9pbm5lck5vblNoYXJlZE5v
ZGUpKSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQmIGltYWdlID0gZG93bmNhc3Q8SFRNTElt
YWdlRWxlbWVudD4oKm1faW5uZXJOb25TaGFyZWROb2RlKTsKLSAgICAgICAgcmV0dXJuIGRpc3Bs
YXlTdHJpbmcoaW1hZ2UuZmFzdEdldEF0dHJpYnV0ZShhbHRBdHRyKSwgbV9pbm5lck5vblNoYXJl
ZE5vZGUuZ2V0KCkpOworICAgICAgICByZXR1cm4gZGlzcGxheVN0cmluZyhpbWFnZS5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFsdEF0dHIpLCBtX2lubmVyTm9uU2hhcmVkTm9kZS5n
ZXQoKSk7CiAgICAgfQogICAgIAogICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PigqbV9pbm5l
ck5vblNoYXJlZE5vZGUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RGV0YWlsc01hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0NCw3ICsxNDQsNyBAQCBib29sIFJlbmRlckRldGFpbHNNYXJrZXI6OmlzT3BlbigpIGNvbnN0
CiAgICAgICAgIGlmICghcmVuZGVyZXItPm5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBpZiAoaXM8SFRNTERldGFpbHNFbGVtZW50PigqcmVuZGVyZXItPm5vZGUoKSkpCi0g
ICAgICAgICAgICByZXR1cm4gIWRvd25jYXN0PEhUTUxEZXRhaWxzRWxlbWVudD4oKnJlbmRlcmVy
LT5ub2RlKCkpLmZhc3RHZXRBdHRyaWJ1dGUob3BlbkF0dHIpLmlzTnVsbCgpOworICAgICAgICAg
ICAgcmV0dXJuICFkb3duY2FzdDxIVE1MRGV0YWlsc0VsZW1lbnQ+KCpyZW5kZXJlci0+bm9kZSgp
KS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG9wZW5BdHRyKS5pc051bGwoKTsKICAg
ICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpyZW5kZXJlci0+bm9kZSgpKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw3IEBA
IExheW91dFVuaXQgUmVuZGVySW1hZ2U6Om1pbmltdW1SZXBsYWNlZEgKIEhUTUxNYXBFbGVtZW50
KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKSBjb25zdAogewogICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlID0gaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA/IGRvd25jYXN0PEhUTUxJ
bWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgOiBudWxscHRyOwotICAgIHJldHVybiBpbWFnZSA/IGlt
YWdlLT50cmVlU2NvcGUoKS5nZXRJbWFnZU1hcChpbWFnZS0+ZmFzdEdldEF0dHJpYnV0ZSh1c2Vt
YXBBdHRyKSkgOiBudWxscHRyOworICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT50cmVlU2NvcGUo
KS5nZXRJbWFnZU1hcChpbWFnZS0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih1c2Vt
YXBBdHRyKSkgOiBudWxscHRyOwogfQogCiBib29sIFJlbmRlckltYWdlOjpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAy
MDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NjksNyArNDY5LDcgQEAgU3RyaW5nIFJlbmRlck1lbnVMaXN0Ojpp
dGVtQWNjZXNzaWJpbGl0eQogICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRl
bXMgPSBzZWxlY3RFbGVtZW50KCkubGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA+PSBs
aXN0SXRlbXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGxp
c3RJdGVtc1tsaXN0SW5kZXhdLT5mYXN0R2V0QXR0cmlidXRlKGFyaWFfbGFiZWxBdHRyKTsKKyAg
ICByZXR1cm4gbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oYXJpYV9sYWJlbEF0dHIpOwogfQogICAgIAogU3RyaW5nIFJlbmRlck1lbnVMaXN0Ojpp
dGVtVG9vbFRpcCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHJldmlzaW9uIDIwMzMyMikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBFVmlzaWJpbGl0eSBSZW5kZXJTZWFyY2hGaWVs
ZDo6dmlzaWJpbGl0CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU2VhcmNoRmllbGQ6OmF1
dG9zYXZlTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLmZhc3RHZXRB
dHRyaWJ1dGUoYXV0b3NhdmVBdHRyKTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50KCkuYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhdXRvc2F2ZUF0dHIpOwogfQogCiAvLyBQb3B1cE1l
bnVDbGllbnQgbWV0aG9kcwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbQkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIxLDcgKzE1MjEsNyBAQCB2
b2lkIEF0dGFjaG1lbnRJbmZvOjpidWlsZFNpbmdsZUxpbmUoY29uCiAKIHN0YXRpYyBCT09MIGdl
dEF0dGFjaG1lbnRQcm9ncmVzcyhjb25zdCBSZW5kZXJBdHRhY2htZW50JiBhdHRhY2htZW50LCBm
bG9hdCYgcHJvZ3Jlc3MpCiB7Ci0gICAgU3RyaW5nIHByb2dyZXNzU3RyaW5nID0gYXR0YWNobWVu
dC5hdHRhY2htZW50RWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUocHJvZ3Jlc3NBdHRyKTsKKyAg
ICBTdHJpbmcgcHJvZ3Jlc3NTdHJpbmcgPSBhdHRhY2htZW50LmF0dGFjaG1lbnRFbGVtZW50KCku
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihwcm9ncmVzc0F0dHIpOwogICAgIGlmIChw
cm9ncmVzc1N0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBOTzsKICAgICBib29sIHZh
bGlkUHJvZ3Jlc3M7CkBAIC0xNTg3LDggKzE1ODcsOCBAQCBBdHRhY2htZW50SW5mbzo6QXR0YWNo
bWVudEluZm8oY29uc3QgUmVuCiAKICAgICBoYXNQcm9ncmVzcyA9IGdldEF0dGFjaG1lbnRQcm9n
cmVzcyhhdHRhY2htZW50LCBwcm9ncmVzcyk7CiAKLSAgICBTdHJpbmcgYWN0aW9uID0gYXR0YWNo
bWVudC5hdHRhY2htZW50RWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUoYWN0aW9uQXR0cik7Ci0g
ICAgU3RyaW5nIHN1YnRpdGxlID0gYXR0YWNobWVudC5hdHRhY2htZW50RWxlbWVudCgpLmZhc3RH
ZXRBdHRyaWJ1dGUoc3VidGl0bGVBdHRyKTsKKyAgICBTdHJpbmcgYWN0aW9uID0gYXR0YWNobWVu
dC5hdHRhY2htZW50RWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYWN0
aW9uQXR0cik7CisgICAgU3RyaW5nIHN1YnRpdGxlID0gYXR0YWNobWVudC5hdHRhY2htZW50RWxl
bWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc3VidGl0bGVBdHRyKTsKIAog
ICAgIENHRmxvYXQgeU9mZnNldCA9IDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMzMCw3ICsy
MzMwLDcgQEAgdm9pZCBBdHRhY2htZW50TGF5b3V0OjpsYXlPdXRUaXRsZShjb25zdAogCiB2b2lk
IEF0dGFjaG1lbnRMYXlvdXQ6OmxheU91dFN1YnRpdGxlKGNvbnN0IFJlbmRlckF0dGFjaG1lbnQm
IGF0dGFjaG1lbnQpCiB7Ci0gICAgU3RyaW5nIHN1YnRpdGxlVGV4dCA9IGF0dGFjaG1lbnQuYXR0
YWNobWVudEVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKHN1YnRpdGxlQXR0cik7CisgICAgU3Ry
aW5nIHN1YnRpdGxlVGV4dCA9IGF0dGFjaG1lbnQuYXR0YWNobWVudEVsZW1lbnQoKS5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHN1YnRpdGxlQXR0cik7CiAKICAgICBpZiAoc3VidGl0
bGVUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjU3OSw3ICsyNTc5LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRBdHRhY2htZW50KGNvbgogCiAgICAgQXR0YWNobWVu
dExheW91dCBsYXlvdXQoYXR0YWNobWVudCk7CiAKLSAgICBTdHJpbmcgcHJvZ3Jlc3NTdHJpbmcg
PSBhdHRhY2htZW50LmF0dGFjaG1lbnRFbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShwcm9ncmVz
c0F0dHIpOworICAgIFN0cmluZyBwcm9ncmVzc1N0cmluZyA9IGF0dGFjaG1lbnQuYXR0YWNobWVu
dEVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHByb2dyZXNzQXR0cik7
CiAgICAgYm9vbCB2YWxpZFByb2dyZXNzID0gZmFsc2U7CiAgICAgZmxvYXQgcHJvZ3Jlc3MgPSAw
OwogICAgIGlmICghcHJvZ3Jlc3NTdHJpbmcuaXNFbXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoTUxTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9NYXRoTUxTdHlsZS5jcHAJKHJldmlzaW9uIDIwMzMy
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvTWF0aE1MU3R5bGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBNYXRoTUxTdHlsZTo6cmVzb2x2
ZU1hdGhNTFN0eWxlKFJlbgogICAgIH0KIAogICAgIGlmIChpczxSZW5kZXJNYXRoTUxNYXRoPihy
ZW5kZXJlcikpCi0gICAgICAgIG1fZGlzcGxheVN0eWxlID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVu
dD4ocmVuZGVyZXIpLT5lbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoZGlzcGxheUF0dHIpID09
ICJibG9jayI7IC8vIFRoZSBkZWZhdWx0IGRpc3BsYXlzdHlsZSBvZiB0aGUgPG1hdGg+IGVsZW1l
bnQgZGVwZW5kcyBvbiBpdHMgZGlzcGxheSBhdHRyaWJ1dGUuCisgICAgICAgIG1fZGlzcGxheVN0
eWxlID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpLT5lbGVtZW50KCktPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlzcGxheUF0dHIpID09ICJibG9jayI7IC8vIFRo
ZSBkZWZhdWx0IGRpc3BsYXlzdHlsZSBvZiB0aGUgPG1hdGg+IGVsZW1lbnQgZGVwZW5kcyBvbiBp
dHMgZGlzcGxheSBhdHRyaWJ1dGUuCiAgICAgZWxzZSBpZiAoaXM8UmVuZGVyTWF0aE1MVGFibGU+
KHJlbmRlcmVyKSkKICAgICAgICAgbV9kaXNwbGF5U3R5bGUgPSBmYWxzZTsgLy8gVGhlIGRlZmF1
bHQgZGlzcGxheXN0eWxlIG9mIDxtdGFibGU+IGlzIGZhbHNlLgogICAgIGVsc2UgaWYgKHBhcmVu
dFJlbmRlcmVyKSB7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBNYXRoTUxTdHlsZTo6cmVzb2x2
ZU1hdGhNTFN0eWxlKFJlbgogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUgPSBlbGVt
ZW50LT50YWdRTmFtZSgpOwogICAgIGlmICh0YWdOYW1lID09IG1hdGhUYWcgfHwgdGFnTmFtZSA9
PSBtdGFibGVUYWcgfHwgdGFnTmFtZSA9PSBtc3R5bGVUYWcpIHsKICAgICAgICAgLy8gV2Ugb25s
eSBtb2RpZnkgdGhlIHZhbHVlIG9mIGRpc3BsYXlzdHlsZSBpZiB0aGVyZSBpcyBhbiBleHBsaWNp
dCBhbmQgdmFsaWQgYXR0cmlidXRlLgotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJp
YnV0ZVZhbHVlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShkaXNwbGF5c3R5bGVBdHRyKTsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IGVsZW1lbnQtPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZGlzcGxheXN0eWxlQXR0cik7CiAgICAgICAg
IGlmIChhdHRyaWJ1dGVWYWx1ZSA9PSAidHJ1ZSIpCiAgICAgICAgICAgICBtX2Rpc3BsYXlTdHls
ZSA9IHRydWU7CiAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZVZhbHVlID09ICJmYWxzZSIpCkBA
IC0xOTEsNyArMTkxLDcgQEAgdm9pZCBNYXRoTUxTdHlsZTo6cmVzb2x2ZU1hdGhNTFN0eWxlKFJl
bgogCiAgICAgLy8gVGhlIG1hdGh2YXJpYW50IGF0dHJpYnV0ZSBvbiB0aGUgPG1hdGg+LCA8bXN0
eWxlPiBvciB0b2tlbiBlbGVtZW50cyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCiAg
ICAgaWYgKGlzPFJlbmRlck1hdGhNTE1hdGg+KHJlbmRlcmVyKSB8fCBpczxSZW5kZXJNYXRoTUxU
b2tlbj4ocmVuZGVyZXIpIHx8IHRhZ05hbWUgPT0gbXN0eWxlVGFnKSB7Ci0gICAgICAgIE1hdGhW
YXJpYW50IG1hdGh2YXJpYW50ID0gcGFyc2VNYXRoVmFyaWFudChlbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKG1hdGh2YXJpYW50QXR0cikpOworICAgICAgICBNYXRoVmFyaWFudCBtYXRodmFyaWFu
dCA9IHBhcnNlTWF0aFZhcmlhbnQoZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihtYXRodmFyaWFudEF0dHIpKTsKICAgICAgICAgaWYgKG1hdGh2YXJpYW50ICE9IE5vbmUp
CiAgICAgICAgICAgICBtX21hdGhWYXJpYW50ID0gbWF0aHZhcmlhbnQ7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
RmVuY2VkLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxNCAr
NTQsMTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6OnVwZGF0ZUZyb21FbGVtZQogICAgIGNv
bnN0IGF1dG8mIGZlbmNlZCA9IGVsZW1lbnQoKTsKIAogICAgIC8vIFRoZSBvcGVuIG9wZXJhdG9y
IGRlZmF1bHRzIHRvIGEgbGVmdCBwYXJlbnRoZXNpcy4KLSAgICBBdG9taWNTdHJpbmcgb3BlbiA9
IGZlbmNlZC5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpvcGVuQXR0cik7CisgICAgQXRv
bWljU3RyaW5nIG9wZW4gPSBmZW5jZWQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihN
YXRoTUxOYW1lczo6b3BlbkF0dHIpOwogICAgIG1fb3BlbiA9IG9wZW4uaXNOdWxsKCkgPyBnT3Bl
bmluZ0JyYWNlQ2hhciA6IG9wZW47CiAKICAgICAvLyBUaGUgY2xvc2Ugb3BlcmF0b3IgZGVmYXVs
dHMgdG8gYSByaWdodCBwYXJlbnRoZXNpcy4KLSAgICBBdG9taWNTdHJpbmcgY2xvc2UgPSBmZW5j
ZWQuZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6Y2xvc2VBdHRyKTsKKyAgICBBdG9taWNT
dHJpbmcgY2xvc2UgPSBmZW5jZWQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihNYXRo
TUxOYW1lczo6Y2xvc2VBdHRyKTsKICAgICBtX2Nsb3NlID0gY2xvc2UuaXNOdWxsKCkgPyBnQ2xv
c2luZ0JyYWNlQ2hhciA6IGNsb3NlOwogCi0gICAgQXRvbWljU3RyaW5nIHNlcGFyYXRvcnMgPSBm
ZW5jZWQuZmFzdEdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6c2VwYXJhdG9yc0F0dHIpOworICAg
IEF0b21pY1N0cmluZyBzZXBhcmF0b3JzID0gZmVuY2VkLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oTWF0aE1MTmFtZXM6OnNlcGFyYXRvcnNBdHRyKTsKICAgICBpZiAoIXNlcGFyYXRv
cnMuaXNOdWxsKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjaGFyYWN0ZXJzOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNlcGFyYXRvcnMubGVuZ3RoKCk7IGkrKykg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpSZW5kZXJNYXRoTUxP
cGVyYXQKIAogdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JGbGFnRnJvbUF0
dHJpYnV0ZShNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZsYWcgZmxhZywgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSkKIHsKLSAgICBzZXRPcGVyYXRvckZsYWdGcm9tQXR0cmlidXRlVmFsdWUo
ZmxhZywgZWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUobmFtZSkpOworICAgIHNldE9wZXJhdG9y
RmxhZ0Zyb21BdHRyaWJ1dGVWYWx1ZShmbGFnLCBlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihuYW1lKSk7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnNl
dE9wZXJhdG9yRmxhZ0Zyb21BdHRyaWJ1dGVWYWx1ZShNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6
OkZsYWcgZmxhZywgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKQEAgLTEwNSw3
ICsxMDUsNyBAQCB2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpzZXRPcGVyYXRvclByCiAgICAg
Ly8gV2UgZGV0ZXJtaW5lIHRoZSBmb3JtIG9mIHRoZSBvcGVyYXRvci4KICAgICBib29sIGV4cGxp
Y2l0Rm9ybSA9IHRydWU7CiAgICAgaWYgKCFpc0Fub255bW91cygpKSB7Ci0gICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgZm9ybSA9IGVsZW1lbnQoKS5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5h
bWVzOjpmb3JtQXR0cik7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybSA9IGVsZW1l
bnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKE1hdGhNTE5hbWVzOjpmb3JtQXR0
cik7CiAgICAgICAgIGlmIChmb3JtID09ICJwcmVmaXgiKQogICAgICAgICAgICAgbV9vcGVyYXRv
ckZvcm0gPSBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlByZWZpeDsKICAgICAgICAgZWxzZSBp
ZiAoZm9ybSA9PSAiaW5maXgiKQpAQCAtMTYxLDExICsxNjEsMTEgQEAgdm9pZCBSZW5kZXJNYXRo
TUxPcGVyYXRvcjo6c2V0T3BlcmF0b3JQcgogICAgICAgICBzZXRPcGVyYXRvckZsYWdGcm9tQXR0
cmlidXRlKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6TW92YWJsZUxpbWl0cywgTWF0aE1MTmFt
ZXM6Om1vdmFibGVsaW1pdHNBdHRyKTsKICAgICAgICAgc2V0T3BlcmF0b3JGbGFnRnJvbUF0dHJp
YnV0ZShNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkFjY2VudCwgTWF0aE1MTmFtZXM6OmFjY2Vu
dEF0dHIpOwogCi0gICAgICAgIHBhcnNlTWF0aE1MTGVuZ3RoKGVsZW1lbnQoKS5mYXN0R2V0QXR0
cmlidXRlKE1hdGhNTE5hbWVzOjpsc3BhY2VBdHRyKSwgbV9sZWFkaW5nU3BhY2UsICZzdHlsZSgp
LCBmYWxzZSk7IC8vIEZJWE1FOiBOZWdhdGl2ZSBsZWFkaW5nIHNwYWNlIG11c3QgYmUgaW1wbGVt
ZW50ZWQgKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzApLgot
ICAgICAgICBwYXJzZU1hdGhNTExlbmd0aChlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShNYXRo
TUxOYW1lczo6cnNwYWNlQXR0ciksIG1fdHJhaWxpbmdTcGFjZSwgJnN0eWxlKCksIGZhbHNlKTsg
Ly8gRklYTUU6IE5lZ2F0aXZlIHRyYWlsaW5nIHNwYWNlIG11c3QgYmUgaW1wbGVtZW50ZWQgKGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MzApLgorICAgICAgICBw
YXJzZU1hdGhNTExlbmd0aChlbGVtZW50KCkuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihNYXRoTUxOYW1lczo6bHNwYWNlQXR0ciksIG1fbGVhZGluZ1NwYWNlLCAmc3R5bGUoKSwgZmFs
c2UpOyAvLyBGSVhNRTogTmVnYXRpdmUgbGVhZGluZyBzcGFjZSBtdXN0IGJlIGltcGxlbWVudGVk
IChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMwKS4KKyAgICAg
ICAgcGFyc2VNYXRoTUxMZW5ndGgoZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oTWF0aE1MTmFtZXM6OnJzcGFjZUF0dHIpLCBtX3RyYWlsaW5nU3BhY2UsICZzdHlsZSgp
LCBmYWxzZSk7IC8vIEZJWE1FOiBOZWdhdGl2ZSB0cmFpbGluZyBzcGFjZSBtdXN0IGJlIGltcGxl
bWVudGVkIChodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODMwKS4K
IAotICAgICAgICBwYXJzZU1hdGhNTExlbmd0aChlbGVtZW50KCkuZmFzdEdldEF0dHJpYnV0ZShN
YXRoTUxOYW1lczo6bWluc2l6ZUF0dHIpLCBtX21pblNpemUsICZzdHlsZSgpLCBmYWxzZSk7Ci0g
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWF4c2l6ZSA9IGVsZW1lbnQoKS5mYXN0R2V0QXR0
cmlidXRlKE1hdGhNTE5hbWVzOjptYXhzaXplQXR0cik7CisgICAgICAgIHBhcnNlTWF0aE1MTGVu
Z3RoKGVsZW1lbnQoKS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKE1hdGhNTE5hbWVz
OjptaW5zaXplQXR0ciksIG1fbWluU2l6ZSwgJnN0eWxlKCksIGZhbHNlKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBtYXhzaXplID0gZWxlbWVudCgpLmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oTWF0aE1MTmFtZXM6Om1heHNpemVBdHRyKTsKICAgICAgICAgaWYgKG1heHNp
emUgIT0gImluZmluaXR5IikKICAgICAgICAgICAgIHBhcnNlTWF0aE1MTGVuZ3RoKG1heHNpemUs
IG1fbWF4U2l6ZSwgJnN0eWxlKCksIGZhbHNlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNjcmlwdHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5jcHAJ
KHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MU2NyaXB0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsyNTIsNyBAQCB2
b2lkIFJlbmRlck1hdGhNTFNjcmlwdHM6OmdldFNjcmlwdE1ldHJpCiAgICAgICAgIG1pblN1YlNj
cmlwdFNoaWZ0ID0gc3RkOjptYXgoc3Vic2NyaXB0U2hpZnREb3duLCBiYXNlRGVzY2VudCArIHN1
YnNjcmlwdEJhc2VsaW5lRHJvcE1pbik7CiAgICAgICAgIGlmICghaXNSZW5kZXJNYXRoTUxVbmRl
ck92ZXIoKSkgewogICAgICAgICAgICAgTGF5b3V0VW5pdCBzcGVjaWZpZWRNaW5TdWJTaGlmdCA9
IDA7Ci0gICAgICAgICAgICBwYXJzZU1hdGhNTExlbmd0aChlbGVtZW50KCktPmZhc3RHZXRBdHRy
aWJ1dGUoTWF0aE1MTmFtZXM6OnN1YnNjcmlwdHNoaWZ0QXR0ciksIHNwZWNpZmllZE1pblN1YlNo
aWZ0LCAmc3R5bGUoKSwgZmFsc2UpOworICAgICAgICAgICAgcGFyc2VNYXRoTUxMZW5ndGgoZWxl
bWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKE1hdGhNTE5hbWVzOjpzdWJz
Y3JpcHRzaGlmdEF0dHIpLCBzcGVjaWZpZWRNaW5TdWJTaGlmdCwgJnN0eWxlKCksIGZhbHNlKTsK
ICAgICAgICAgICAgIG1pblN1YlNjcmlwdFNoaWZ0ID0gc3RkOjptYXgobWluU3ViU2NyaXB0U2hp
ZnQsIHNwZWNpZmllZE1pblN1YlNoaWZ0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI2MCw3ICsy
NjAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFNjcmlwdHM6OmdldFNjcmlwdE1ldHJpCiAgICAgICAg
IG1pblN1cFNjcmlwdFNoaWZ0ID0gc3RkOjptYXgoc3VwZXJzY3JpcHRTaGlmdFVwLCBiYXNlQXNj
ZW50IC0gc3VwZXJTY3JpcHRCYXNlbGluZURyb3BNYXgpOwogICAgICAgICBpZiAoIWlzUmVuZGVy
TWF0aE1MVW5kZXJPdmVyKCkpIHsKICAgICAgICAgICAgIExheW91dFVuaXQgc3BlY2lmaWVkTWlu
U3VwU2hpZnQgPSAwOwotICAgICAgICAgICAgcGFyc2VNYXRoTUxMZW5ndGgoZWxlbWVudCgpLT5m
YXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpzdXBlcnNjcmlwdHNoaWZ0QXR0ciksIHNwZWNp
ZmllZE1pblN1cFNoaWZ0LCAmc3R5bGUoKSwgZmFsc2UpOworICAgICAgICAgICAgcGFyc2VNYXRo
TUxMZW5ndGgoZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKE1hdGhN
TE5hbWVzOjpzdXBlcnNjcmlwdHNoaWZ0QXR0ciksIHNwZWNpZmllZE1pblN1cFNoaWZ0LCAmc3R5
bGUoKSwgZmFsc2UpOwogICAgICAgICAgICAgbWluU3VwU2NyaXB0U2hpZnQgPSBzdGQ6Om1heCht
aW5TdXBTY3JpcHRTaGlmdCwgc3BlY2lmaWVkTWluU3VwU2hpZnQpOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRl
ck92ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgYm9vbCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6Omhh
c0FjY2VudChibwogewogICAgIEFTU0VSVChtX3NjcmlwdFR5cGUgPT0gVW5kZXJPdmVyIHx8IChh
Y2NlbnRVbmRlciAmJiBtX3NjcmlwdFR5cGUgPT0gVW5kZXIpIHx8ICghYWNjZW50VW5kZXIgJiYg
bV9zY3JpcHRUeXBlID09IE92ZXIpKTsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmli
dXRlVmFsdWUgPSBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoYWNjZW50VW5kZXIgPyBhY2Nl
bnR1bmRlckF0dHIgOiBhY2NlbnRBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJp
YnV0ZVZhbHVlID0gZWxlbWVudCgpLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFj
Y2VudFVuZGVyID8gYWNjZW50dW5kZXJBdHRyIDogYWNjZW50QXR0cik7CiAgICAgaWYgKGF0dHJp
YnV0ZVZhbHVlID09ICJ0cnVlIikKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGF0dHJp
YnV0ZVZhbHVlID09ICJmYWxzZSIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNo
YXJpbmdSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVTaGFyaW5nUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Mywx
MyArMjYzLDEzIEBAIGJvb2wgU2hhcmluZ1Jlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEUKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuZWxlbWVudERh
dGEoKSAhPSBlbGVtZW50LmVsZW1lbnREYXRhKCkpIHsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZUVs
ZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnJlYWRvbmx5QXR0cikgIT0gZWxlbWVu
dC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6cmVhZG9ubHlBdHRyKSkKKyAgICAgICAgaWYg
KGNhbmRpZGF0ZUVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFt
ZXM6OnJlYWRvbmx5QXR0cikgIT0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKEhUTUxOYW1lczo6cmVhZG9ubHlBdHRyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKGNhbmRpZGF0ZUVsZW1lbnQuaXNTVkdFbGVtZW50KCkpIHsKICAgICAgICAg
ICAgIGlmIChjYW5kaWRhdGVFbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRy
KSAhPSBlbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlRWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dHlwZUF0dHIpICE9
IGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKSkKKyAgICAgICAg
ICAgIGlmIChjYW5kaWRhdGVFbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
SFRNTE5hbWVzOjp0eXBlQXR0cikgIT0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKEhUTUxOYW1lczo6dHlwZUF0dHIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMCw5ICszMTAsOSBAQCBib29sIFNoYXJpbmdSZXNv
bHZlcjo6c2hhcmluZ0NhbmRpZGF0ZUhhCiAgICAgYXV0byYgZWxlbWVudCA9IGNvbnRleHQuZWxl
bWVudDsKICAgICBpZiAoZWxlbWVudC5lbGVtZW50RGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUu
ZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGVsZW1lbnQuZmFz
dEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUuZmFz
dEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQorICAgIGlmIChlbGVtZW50LmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5n
Q2FuZGlkYXRlLmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oWE1MTmFtZXM6OmxhbmdB
dHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChlbGVtZW50LmZhc3RHZXRBdHRy
aWJ1dGUoSFRNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRpZGF0ZS5mYXN0R2V0QXR0
cmlidXRlKEhUTUxOYW1lczo6bGFuZ0F0dHIpKQorICAgIGlmIChlbGVtZW50LmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0NhbmRp
ZGF0ZS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6bGFuZ0F0dHIp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoY29udGV4dC5lbGVtZW50QWZmZWN0
ZWRCeUNsYXNzUnVsZXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2
aXNpb24gMjAzMzIyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBSZWY8U1ZHQUVsZW1lbnQ+IFNWR0FFbGVtZW50
OjpjcmVhdGUoY29uCiBTdHJpbmcgU1ZHQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKIHsKICAgICAv
LyBJZiB0aGUgeGxpbms6dGl0bGUgaXMgc2V0IChub24tZW1wdHkgc3RyaW5nKSwgdXNlIGl0Lgot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBmYXN0R2V0QXR0cmlidXRlKFhMaW5rTmFt
ZXM6OnRpdGxlQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSA9IGF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oWExpbmtOYW1lczo6dGl0bGVBdHRyKTsKICAgICBpZiAo
IXRpdGxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRpdGxlOwogCkBAIC0xMzgsNyArMTM4
LDcgQEAgdm9pZCBTVkdBRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdgogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0ID0gdGhpcy0+dGFyZ2V0KCk7Ci0gICAg
ICAgICAgICBpZiAodGFyZ2V0LmlzRW1wdHkoKSAmJiBmYXN0R2V0QXR0cmlidXRlKFhMaW5rTmFt
ZXM6OnNob3dBdHRyKSA9PSAibmV3IikKKyAgICAgICAgICAgIGlmICh0YXJnZXQuaXNFbXB0eSgp
ICYmIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oWExpbmtOYW1lczo6c2hvd0F0dHIp
ID09ICJuZXciKQogICAgICAgICAgICAgICAgIHRhcmdldCA9ICJfYmxhbmsiOwogICAgICAgICAg
ICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbHRHbHlwaEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQWx0R2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyAr
NjIsNyBAQCB2b2lkIFNWR0FsdEdseXBoRWxlbWVudDo6c2V0R2x5cGhSZWYoY29uCiAKIGNvbnN0
IEF0b21pY1N0cmluZyYgU1ZHQWx0R2x5cGhFbGVtZW50OjpnbHlwaFJlZigpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmdseXBoUmVmQXR0cik7CisgICAg
cmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmdseXBoUmVm
QXR0cik7CiB9CiAKIHZvaWQgU1ZHQWx0R2x5cGhFbGVtZW50OjpzZXRGb3JtYXQoY29uc3QgQXRv
bWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgU1ZH
QWx0R2x5cGhFbGVtZW50OjpzZXRGb3JtYXQoY29uc3QKIAogY29uc3QgQXRvbWljU3RyaW5nJiBT
VkdBbHRHbHlwaEVsZW1lbnQ6OmZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmZvcm1hdEF0dHIpOworICAgIHJldHVybiBhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpmb3JtYXRBdHRyKTsKIH0KIAogYm9vbCBTVkdB
bHRHbHlwaEVsZW1lbnQ6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZSYgY2hp
bGQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOCwzMCArMzE4LDMwIEBAIHZvaWQgU1ZH
QW5pbWF0aW9uRWxlbWVudDo6c2V0QXR0cmlidXRlVHkKIAogU3RyaW5nIFNWR0FuaW1hdGlvbkVs
ZW1lbnQ6OnRvVmFsdWUoKSBjb25zdAogeyAgICAKLSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0
ZShTVkdOYW1lczo6dG9BdHRyKTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihTVkdOYW1lczo6dG9BdHRyKTsKIH0KIAogU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OmJ5VmFsdWUoKSBjb25zdAogeyAgICAKLSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShT
VkdOYW1lczo6YnlBdHRyKTsKKyAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihTVkdOYW1lczo6YnlBdHRyKTsKIH0KIAogU3RyaW5nIFNWR0FuaW1hdGlvbkVsZW1lbnQ6
OmZyb21WYWx1ZSgpIGNvbnN0CiB7ICAgIAotICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKFNW
R05hbWVzOjpmcm9tQXR0cik7CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24oU1ZHTmFtZXM6OmZyb21BdHRyKTsKIH0KIAogYm9vbCBTVkdBbmltYXRpb25FbGVtZW50
Ojppc0FkZGl0aXZlKCkgY29uc3QKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbWljU3RyaW5nPiBzdW0oInN1bSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKFNW
R05hbWVzOjphZGRpdGl2ZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBh
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjphZGRpdGl2ZUF0dHIpOwog
ICAgIHJldHVybiB2YWx1ZSA9PSBzdW0gfHwgYW5pbWF0aW9uTW9kZSgpID09IEJ5QW5pbWF0aW9u
OwogfQogCiBib29sIFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmlzQWNjdW11bGF0ZWQoKSBjb25zdAog
ewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBBdG9taWNTdHJpbmc+IHN1bSgic3Vt
IiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmFjY3VtdWxhdGVBdHRy
KTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihTVkdOYW1lczo6YWNjdW11bGF0ZUF0dHIpOwogICAgIHJldHVybiB2YWx1ZSA9
PSBzdW0gJiYgYW5pbWF0aW9uTW9kZSgpICE9IFRvQW5pbWF0aW9uOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw3ICszNjksNyBAQCBi
b29sIFNWR0VsZW1lbnQ6OmlzU3VwcG9ydGVkKFN0cmluZ0ltcGwqCiAKIFN0cmluZyBTVkdFbGVt
ZW50Ojp4bWxiYXNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShYTUxO
YW1lczo6YmFzZUF0dHIpOworICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFhNTE5hbWVzOjpiYXNlQXR0cik7CiB9CiAKIHZvaWQgU1ZHRWxlbWVudDo6c2V0WG1sYmFz
ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNyArNzQsNyBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoCiAK
IHVuc2lnbmVkIFNWR0ZvbnRGYWNlRWxlbWVudDo6dW5pdHNQZXJFbSgpIGNvbnN0CiB7Ci0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUodW5pdHNfcGVyX2Vt
QXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24odW5pdHNfcGVyX2VtQXR0cik7CiAgICAgaWYgKHZhbHVlLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGdEZWZhdWx0VW5pdHNQZXJFbTsKIApAQCAtODMsMTIgKzgzLDEy
IEBAIHVuc2lnbmVkIFNWR0ZvbnRGYWNlRWxlbWVudDo6dW5pdHNQZXJFbSgKIAogaW50IFNWR0Zv
bnRGYWNlRWxlbWVudDo6eEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4oY2VpbGYoZmFzdEdldEF0dHJpYnV0ZSh4X2hlaWdodEF0dHIpLnRvRmxvYXQoKSkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oeF9oZWlnaHRBdHRyKS50b0Zsb2F0KCkpKTsKIH0KIAogaW50IFNWR0ZvbnRGYWNl
RWxlbWVudDo6Y2FwSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihjZWlsZihmYXN0R2V0QXR0cmlidXRlKGNhcF9oZWlnaHRBdHRyKS50b0Zsb2F0KCkpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKGNhcF9oZWlnaHRBdHRyKS50b0Zsb2F0KCkpKTsKIH0KIAogZmxvYXQgU1ZHRm9udEZh
Y2VFbGVtZW50Ojpob3Jpem9udGFsT3JpZ2luWCgpIGNvbnN0CkBAIC05OSw3ICs5OSw3IEBAIGZs
b2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWcKICAgICAvLyBTcGVjOiBUaGUg
WC1jb29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4g
b2YgYSBnbHlwaCB0byBiZSB1c2VkIHdoZW4KICAgICAvLyBkcmF3aW5nIGhvcml6b250YWxseSBv
cmllbnRlZCB0ZXh0LiAoTm90ZSB0aGF0IHRoZSBvcmlnaW4gYXBwbGllcyB0byBhbGwgZ2x5cGhz
IGluIHRoZSBmb250LikKICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQs
IHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCIgd2VyZSBzcGVjaWZpZWQuCi0gICAg
cmV0dXJuIG1fZm9udEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaG9yaXpfb3JpZ2luX3hBdHRy
KS50b0Zsb2F0KCk7CisgICAgcmV0dXJuIG1fZm9udEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oaG9yaXpfb3JpZ2luX3hBdHRyKS50b0Zsb2F0KCk7CiB9CiAKIGZsb2F0
IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWdpblkoKSBjb25zdApAQCAtMTEwLDcg
KzExMCw3IEBAIGZsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbE9yaWcKICAgICAv
LyBTcGVjOiBUaGUgWS1jb29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVtIG9m
IHRoZSBvcmlnaW4gb2YgYSBnbHlwaCB0byBiZSB1c2VkIHdoZW4KICAgICAvLyBkcmF3aW5nIGhv
cml6b250YWxseSBvcmllbnRlZCB0ZXh0LiAoTm90ZSB0aGF0IHRoZSBvcmlnaW4gYXBwbGllcyB0
byBhbGwgZ2x5cGhzIGluIHRoZSBmb250LikKICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIG5v
dCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCIgd2VyZSBzcGVj
aWZpZWQuCi0gICAgcmV0dXJuIG1fZm9udEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoaG9yaXpf
b3JpZ2luX3lBdHRyKS50b0Zsb2F0KCk7CisgICAgcmV0dXJuIG1fZm9udEVsZW1lbnQtPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oaG9yaXpfb3JpZ2luX3lBdHRyKS50b0Zsb2F0KCk7
CiB9CiAKIGZsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6aG9yaXpvbnRhbEFkdmFuY2VYKCkgY29u
c3QKQEAgLTEyMSw3ICsxMjEsNyBAQCBmbG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6Omhvcml6b250
YWxBZHZhCiAgICAgLy8gU3BlYzogVGhlIGRlZmF1bHQgaG9yaXpvbnRhbCBhZHZhbmNlIGFmdGVy
IHJlbmRlcmluZyBhIGdseXBoIGluIGhvcml6b250YWwgb3JpZW50YXRpb24uIEdseXBoCiAgICAg
Ly8gd2lkdGhzIGFyZSByZXF1aXJlZCB0byBiZSBub24tbmVnYXRpdmUsIGV2ZW4gaWYgdGhlIGds
eXBoIGlzIHR5cGljYWxseSByZW5kZXJlZCByaWdodC10by1sZWZ0LAogICAgIC8vIGFzIGluIEhl
YnJldyBhbmQgQXJhYmljIHNjcmlwdHMuCi0gICAgcmV0dXJuIG1fZm9udEVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUoaG9yaXpfYWR2X3hBdHRyKS50b0Zsb2F0KCk7CisgICAgcmV0dXJuIG1fZm9u
dEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oaG9yaXpfYWR2X3hBdHRy
KS50b0Zsb2F0KCk7CiB9CiAKIGZsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGljYWxPcmln
aW5YKCkgY29uc3QKQEAgLTEzMiw3ICsxMzIsNyBAQCBmbG9hdCBTVkdGb250RmFjZUVsZW1lbnQ6
OnZlcnRpY2FsT3JpZ2luCiAgICAgLy8gU3BlYzogVGhlIGRlZmF1bHQgWC1jb29yZGluYXRlIGlu
IHRoZSBmb250IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4gb2YgYSBnbHlwaCB0byBi
ZSB1c2VkIHdoZW4KICAgICAvLyBkcmF3aW5nIHZlcnRpY2FsbHkgb3JpZW50ZWQgdGV4dC4gSWYg
dGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIHRoZSBh
dHRyaWJ1dGUKICAgICAvLyB3ZXJlIHNldCB0byBoYWxmIG9mIHRoZSBlZmZlY3RpdmUgdmFsdWUg
b2YgYXR0cmlidXRlIGhvcml6LWFkdi14LgotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBtX2ZvbnRFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHZlcnRfb3JpZ2luX3hBdHRyKTsKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gbV9mb250RWxlbWVudC0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbih2ZXJ0X29yaWdpbl94QXR0cik7CiAgICAgaWYgKHZhbHVlLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxBZHZhbmNlWCgpIC8gMi4wZjsKIApA
QCAtMTQ3LDcgKzE0Nyw3IEBAIGZsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGljYWxPcmln
aW4KICAgICAvLyBTcGVjOiBUaGUgZGVmYXVsdCBZLWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQgY29v
cmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiBhIGdseXBoIHRvIGJlIHVzZWQgd2hlbgog
ICAgIC8vIGRyYXdpbmcgdmVydGljYWxseSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRl
IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZQogICAg
IC8vIHdlcmUgc2V0IHRvIHRoZSBwb3NpdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGZvbnQncyBhc2Nl
bnQgYXR0cmlidXRlLiAgICAgICAgICAgICAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
ID0gbV9mb250RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh2ZXJ0X29yaWdpbl95QXR0cik7Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZm9udEVsZW1lbnQtPmF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24odmVydF9vcmlnaW5feUF0dHIpOwogICAgIGlmICh2YWx1ZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBhc2NlbnQoKTsKIApAQCAtMTYxLDcgKzE2MSw3IEBA
IGZsb2F0IFNWR0ZvbnRGYWNlRWxlbWVudDo6dmVydGljYWxBZHZhbmMKIAogICAgIC8vIFNwZWM6
IFRoZSBkZWZhdWx0IHZlcnRpY2FsIGFkdmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5cGggaW4g
dmVydGljYWwgb3JpZW50YXRpb24uIElmIHRoZSBhdHRyaWJ1dGUgaXMKICAgICAvLyBub3Qgc3Bl
Y2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgZXF1aXZhbGVudCBvZiBvbmUgZW0g
d2VyZSBzcGVjaWZpZWQgKHNlZSB1bml0cy1wZXItZW0pLiAgICAgICAgICAgICAgICAgICAgCi0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IG1fZm9udEVsZW1lbnQtPmZhc3RHZXRBdHRy
aWJ1dGUodmVydF9hZHZfeUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBt
X2ZvbnRFbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHZlcnRfYWR2X3lB
dHRyKTsKICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMS4wZjsK
IApAQCAtMTc0LDEyICsxNzQsMTIgQEAgaW50IFNWR0ZvbnRGYWNlRWxlbWVudDo6YXNjZW50KCkg
Y29uc3QKICAgICAvLyB1bmFjY2VudGVkIGhlaWdodCBvZiB0aGUgZm9udCB3aXRoaW4gdGhlIGZv
bnQgY29vcmRpbmF0ZSBzeXN0ZW0uIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwK
ICAgICAvLyB0aGUgZWZmZWN0IGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhl
IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5pdHMtcGVyLWVtIHZhbHVlIGFuZCB0aGUKICAgICAv
LyB2ZXJ0LW9yaWdpbi15IHZhbHVlIGZvciB0aGUgY29ycmVzcG9uZGluZyBmb250LgotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgYXNjZW50VmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKGFzY2VudEF0
dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXNjZW50VmFsdWUgPSBhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKGFzY2VudEF0dHIpOwogICAgIGlmICghYXNjZW50VmFsdWUuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihhc2NlbnRWYWx1
ZS50b0Zsb2F0KCkpKTsKIAogICAgIGlmIChtX2ZvbnRFbGVtZW50KSB7Ci0gICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmVydE9yaWdpblkgPSBtX2ZvbnRFbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKHZlcnRfb3JpZ2luX3lBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2ZXJ0
T3JpZ2luWSA9IG1fZm9udEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
dmVydF9vcmlnaW5feUF0dHIpOwogICAgICAgICBpZiAoIXZlcnRPcmlnaW5ZLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHVuaXRzUGVyRW0oKSkgLSBzdGF0
aWNfY2FzdDxpbnQ+KGNlaWxmKHZlcnRPcmlnaW5ZLnRvRmxvYXQoKSkpOwogICAgIH0KQEAgLTE5
Myw3ICsxOTMsNyBAQCBpbnQgU1ZHRm9udEZhY2VFbGVtZW50OjpkZXNjZW50KCkgY29uc3QKICAg
ICAvLyBTcGVjOiBTYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIHRoZSAnZGVzY2VudCcgZGVz
Y3JpcHRvciB3aXRoaW4gYW4gQGZvbnQtZmFjZSBydWxlLiBUaGUgbWF4aW11bQogICAgIC8vIHVu
YWNjZW50ZWQgZGVwdGggb2YgdGhlIGZvbnQgd2l0aGluIHRoZSBmb250IGNvb3JkaW5hdGUgc3lz
dGVtLiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsCiAgICAgLy8gdGhlIGVmZmVj
dCBpcyBhcyBpZiB0aGUgYXR0cmlidXRlIHdlcmUgc2V0IHRvIHRoZSB2ZXJ0LW9yaWdpbi15IHZh
bHVlIGZvciB0aGUgY29ycmVzcG9uZGluZyBmb250LgotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
ZGVzY2VudFZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZShkZXNjZW50QXR0cik7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBkZXNjZW50VmFsdWUgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKGRlc2NlbnRBdHRyKTsKICAgICBpZiAoIWRlc2NlbnRWYWx1ZS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgLy8gMTQgZGlmZmVyZW50IFczQyBTVkcgMS4xIHRlc3RjYXNlcyB1c2UgYSBuZWdhdGl2
ZSBkZXNjZW50IHZhbHVlLAogICAgICAgICAvLyB3aGVyZSBhIHBvc2l0aXZlIHdhcyBtZWFudCB0
byBiZSB1c2VkICBJbmNsdWRpbmc6CkBAIC0yMDMsNyArMjAzLDcgQEAgaW50IFNWR0ZvbnRGYWNl
RWxlbWVudDo6ZGVzY2VudCgpIGNvbnN0CiAgICAgfQogCiAgICAgaWYgKG1fZm9udEVsZW1lbnQp
IHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2ZXJ0T3JpZ2luWSA9IG1fZm9udEVsZW1l
bnQtPmZhc3RHZXRBdHRyaWJ1dGUodmVydF9vcmlnaW5feUF0dHIpOworICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZlcnRPcmlnaW5ZID0gbV9mb250RWxlbWVudC0+YXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbih2ZXJ0X29yaWdpbl95QXR0cik7CiAgICAgICAgIGlmICghdmVydE9y
aWdpblkuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2Vp
bGYodmVydE9yaWdpblkudG9GbG9hdCgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnRGYWNlTmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250RmFjZU5hbWVFbGVtZW50LmNwcAkocmV2aXNpb24gMjAzMzIyKQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlTmFtZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBAIFJlZjxTVkdGb250RmFjZU5hbWVFbGVtZW50PiBTVkdGb250
RmFjZU4KIAogUmVmPENTU0ZvbnRGYWNlU3JjVmFsdWU+IFNWR0ZvbnRGYWNlTmFtZUVsZW1lbnQ6
OnNyY1ZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3Jl
YXRlTG9jYWwoZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6bmFtZUF0dHIpKTsKKyAgICByZXR1
cm4gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9jYWwoYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihTVkdOYW1lczo6bmFtZUF0dHIpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAJKHJldmlzaW9uIDIwMzMyMikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFNWR0ZvbnRGYWNlVXJpRWxlbWVudDo6flNWR0ZvbnRG
YWNlVXJpRWwKIFJlZjxDU1NGb250RmFjZVNyY1ZhbHVlPiBTVkdGb250RmFjZVVyaUVsZW1lbnQ6
OnNyY1ZhbHVlKCkgY29uc3QKIHsKICAgICBhdXRvIHNyYyA9IENTU0ZvbnRGYWNlU3JjVmFsdWU6
OmNyZWF0ZShnZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpKTsKLSAgICBBdG9taWNT
dHJpbmcgdmFsdWUoZmFzdEdldEF0dHJpYnV0ZShmb3JtYXRBdHRyKSk7CisgICAgQXRvbWljU3Ry
aW5nIHZhbHVlKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oZm9ybWF0QXR0cikpOwog
ICAgIHNyYy5nZXQoKS5zZXRGb3JtYXQodmFsdWUuaXNFbXB0eSgpID8gInN2ZyIgOiB2YWx1ZSk7
IC8vIERlZmF1bHQgZm9ybWF0CiAgICAgcmV0dXJuIHNyYzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdHbHlwaFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODUsNyArODUsNyBAQCB2b2lkIFNWR0dseXBoUmVmRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoCiAK
IGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHR2x5cGhSZWZFbGVtZW50OjpnbHlwaFJlZigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmdseXBoUmVmQXR0cik7
CisgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6Omds
eXBoUmVmQXR0cik7CiB9CiAKIHZvaWQgU1ZHR2x5cGhSZWZFbGVtZW50OjpzZXRHbHlwaFJlZihj
b25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdIS2VybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdIS2VybkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHSEtlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTAgKzQzLDEw
IEBAIFJlZjxTVkdIS2VybkVsZW1lbnQ+IFNWR0hLZXJuRWxlbWVudDo6Y3IKIAogYm9vbCBTVkdI
S2VybkVsZW1lbnQ6OmJ1aWxkSG9yaXpvbnRhbEtlcm5pbmdQYWlyKFNWR0tlcm5pbmdQYWlyJiBr
ZXJuaW5nUGFpcikgY29uc3QKIHsKLSAgICBTdHJpbmcgdTEgPSBmYXN0R2V0QXR0cmlidXRlKFNW
R05hbWVzOjp1MUF0dHIpOwotICAgIFN0cmluZyBnMSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmcxQXR0cik7Ci0gICAgU3RyaW5nIHUyID0gZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6
dTJBdHRyKTsKLSAgICBTdHJpbmcgZzIgPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpnMkF0
dHIpOworICAgIFN0cmluZyB1MSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZH
TmFtZXM6OnUxQXR0cik7CisgICAgU3RyaW5nIGcxID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihTVkdOYW1lczo6ZzFBdHRyKTsKKyAgICBTdHJpbmcgdTIgPSBhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjp1MkF0dHIpOworICAgIFN0cmluZyBnMiA9IGF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAgaWYg
KCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcyLmlz
RW1wdHkoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTUsNyArNTUsNyBAQCBib29s
IFNWR0hLZXJuRWxlbWVudDo6YnVpbGRIb3Jpem9udGFsS2VyCiAgICAgICAgICYmIHBhcnNlS2Vy
bmluZ1VuaWNvZGVTdHJpbmcodTEsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTEsIGtlcm5pbmdQ
YWlyLnVuaWNvZGVOYW1lMSkKICAgICAgICAgJiYgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1
Miwga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMiwga2VybmluZ1BhaXIudW5pY29kZU5hbWUyKSkg
ewogICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcg
PSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgmb2sp
OworICAgICAgICBrZXJuaW5nUGFpci5rZXJuaW5nID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihTVkdOYW1lczo6a0F0dHIpLnN0cmluZygpLnRvRmxvYXQoJm9rKTsKICAgICAgICAg
cmV0dXJuIG9rOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCB2
b2lkIFNWR1NWR0VsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50CiBjb25zdCBBdG9taWNTdHJp
bmcmIFNWR1NWR0VsZW1lbnQ6OmNvbnRlbnRTY3JpcHRUeXBlKCkgY29uc3QKIHsKICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBkZWZhdWx0U2NyaXB0VHlwZSB7ICJ0ZXh0
L2VjbWFzY3JpcHQiIH07Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlID0gZmFzdEdldEF0
dHJpYnV0ZShTVkdOYW1lczo6Y29udGVudFNjcmlwdFR5cGVBdHRyKTsKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVz
Ojpjb250ZW50U2NyaXB0VHlwZUF0dHIpOwogICAgIHJldHVybiB0eXBlLmlzTnVsbCgpID8gZGVm
YXVsdFNjcmlwdFR5cGUuZ2V0KCkgOiB0eXBlOwogfQogCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9p
ZCBTVkdTVkdFbGVtZW50OjpzZXRDb250ZW50U2NyaXB0VHlwZQogY29uc3QgQXRvbWljU3RyaW5n
JiBTVkdTVkdFbGVtZW50Ojpjb250ZW50U3R5bGVUeXBlKCkgY29uc3QKIHsKICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBkZWZhdWx0U3R5bGVUeXBlIHsgInRleHQvY3Nz
IiB9OwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmNvbnRlbnRTdHlsZVR5cGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpjb250ZW50U3R5
bGVUeXBlQXR0cik7CiAgICAgcmV0dXJuIHR5cGUuaXNOdWxsKCkgPyBkZWZhdWx0U3R5bGVUeXBl
LmdldCgpIDogdHlwZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdHlsZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgU1ZHU3R5bGVF
bGVtZW50OjpzZXRUeXBlKGNvbnN0IEF0b20KIGNvbnN0IEF0b21pY1N0cmluZyYgU1ZHU3R5bGVF
bGVtZW50OjptZWRpYSgpIGNvbnN0CiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21pY1N0cmluZz4gZGVmYXVsdFZhbHVlKCJhbGwiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG4gPSBmYXN0R2V0QXR0cmli
dXRlKFNWR05hbWVzOjptZWRpYUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbiA9IGF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6Om1lZGlhQXR0cik7CiAgICAg
cmV0dXJuIG4uaXNOdWxsKCkgPyBkZWZhdWx0VmFsdWUuZ2V0KCkgOiBuOwogfQogCkBAIC04Niw3
ICs4Niw3IEBAIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRNZWRpYShjb25zdCBBdG8KIAogU3Ry
aW5nIFNWR1N0eWxlRWxlbWVudDo6dGl0bGUoKSBjb25zdAogewotICAgIHJldHVybiBmYXN0R2V0
QXR0cmlidXRlKFNWR05hbWVzOjp0aXRsZUF0dHIpOworICAgIHJldHVybiBhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjp0aXRsZUF0dHIpOwogfQogCiB2b2lkIFNWR1N0
eWxlRWxlbWVudDo6c2V0VGl0bGUoY29uc3QgQXRvbWljU3RyaW5nJiB0aXRsZSwgRXhjZXB0aW9u
Q29kZSYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZGb250Q29udmVyc2lvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RvT1RGRm9udENvbnZlcnNp
b24uY3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVG9PVEZG
b250Q29udmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Nyw5ICs0OTcsOSBAQCB2b2lk
IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6YXBwZW5kT1MyVGFiCiB7CiAgICAgaW50MTZfdCBhdmVy
YWdlQWR2YW5jZSA9IHNfb3V0cHV0VW5pdHNQZXJFbTsKICAgICBib29sIG9rOwotICAgIGludCB2
YWx1ZSA9IG1fZm9udEVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6aG9yaXpfYWR2
X3hBdHRyKS50b0ludCgmb2spOworICAgIGludCB2YWx1ZSA9IG1fZm9udEVsZW1lbnQuYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6aG9yaXpfYWR2X3hBdHRyKS50b0lu
dCgmb2spOwogICAgIGlmICghb2sgJiYgbV9taXNzaW5nR2x5cGhFbGVtZW50KQotICAgICAgICB2
YWx1ZSA9IG1fbWlzc2luZ0dseXBoRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6
aG9yaXpfYWR2X3hBdHRyKS50b0ludCgmb2spOworICAgICAgICB2YWx1ZSA9IG1fbWlzc2luZ0ds
eXBoRWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6aG9y
aXpfYWR2X3hBdHRyKS50b0ludCgmb2spOwogICAgIHZhbHVlID0gc2NhbGVVbml0c1BlckVtKHZh
bHVlKTsKICAgICBpZiAob2spCiAgICAgICAgIGF2ZXJhZ2VBZHZhbmNlID0gY2xhbXBUbzxpbnQx
Nl90Pih2YWx1ZSk7CkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZE9TMlRhYgogICAgIGNoYXIgcGFub3NlQnl0ZXNbcGFub3NlU2l6ZV07CiAgICAg
aWYgKG1fZm9udEZhY2VFbGVtZW50KSB7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHNlZ21lbnRz
OwotICAgICAgICBtX2ZvbnRGYWNlRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6
cGFub3NlXzFBdHRyKS5zdHJpbmcoKS5zcGxpdCgnICcsIHNlZ21lbnRzKTsKKyAgICAgICAgbV9m
b250RmFjZUVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6
OnBhbm9zZV8xQXR0cikuc3RyaW5nKCkuc3BsaXQoJyAnLCBzZWdtZW50cyk7CiAgICAgICAgIGlm
IChzZWdtZW50cy5zaXplKCkgPT0gcGFub3NlU2l6ZSkgewogICAgICAgICAgICAgZm9yIChhdXRv
JiBzZWdtZW50IDogc2VnbWVudHMpIHsKICAgICAgICAgICAgICAgICBib29sIG9rOwpAQCAtNjE4
LDcgKzYxOCw3IEBAIHZvaWQgU1ZHVG9PVEZGb250Q29udmVydGVyOjphcHBlbmRDRkZUYWIKIAog
ICAgIFN0cmluZyB3ZWlnaHQ7CiAgICAgaWYgKG1fZm9udEZhY2VFbGVtZW50KSB7Ci0gICAgICAg
IGF1dG8mIHBvdGVudGlhbFdlaWdodCA9IG1fZm9udEZhY2VFbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKFNWR05hbWVzOjpmb250X3dlaWdodEF0dHIpOworICAgICAgICBhdXRvJiBwb3RlbnRpYWxX
ZWlnaHQgPSBtX2ZvbnRGYWNlRWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihTVkdOYW1lczo6Zm9udF93ZWlnaHRBdHRyKTsKICAgICAgICAgaWYgKGlzVmFsaWRTdHJpbmdG
b3JDRkYocG90ZW50aWFsV2VpZ2h0KSkKICAgICAgICAgICAgIHdlaWdodCA9IHBvdGVudGlhbFdl
aWdodDsKICAgICB9CkBAIC04MjEsNyArODIxLDcgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0
ZXI6OmFwcGVuZEFyYWJpYwogICAgIGZvciAoYXV0byYgcGFpciA6IG1fY29kZXBvaW50c1RvSW5k
aWNlc01hcCkgewogICAgICAgICBmb3IgKGF1dG8gZ2x5cGhJbmRleCA6IHBhaXIudmFsdWUpIHsK
ICAgICAgICAgICAgIGF1dG8mIGdseXBoID0gbV9nbHlwaHNbZ2x5cGhJbmRleF07Ci0gICAgICAg
ICAgICBpZiAoZ2x5cGguZ2x5cGhFbGVtZW50ICYmIGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoZ2x5
cGguZ2x5cGhFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjphcmFiaWNfZm9ybUF0
dHIpLCBhcmFiaWNGb3JtKSkKKyAgICAgICAgICAgIGlmIChnbHlwaC5nbHlwaEVsZW1lbnQgJiYg
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShnbHlwaC5nbHlwaEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmFyYWJpY19mb3JtQXR0ciksIGFyYWJpY0Zvcm0p
KQogICAgICAgICAgICAgICAgIGFyYWJpY0ZpbmFsUmVwbGFjZW1lbnRzLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcihwYWlyLnZhbHVlWzBdLCBnbHlwaEluZGV4KSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC05NTYsOSArOTU2LDkgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVuZFZPUkdU
YQogICAgIGFwcGVuZDE2KDApOyAvLyBNaW5vciB2ZXJzaW9uCiAKICAgICBib29sIG9rOwotICAg
IGludCBkZWZhdWx0VmVydGljYWxPcmlnaW5ZID0gbV9mb250RWxlbWVudC5mYXN0R2V0QXR0cmli
dXRlKFNWR05hbWVzOjp2ZXJ0X29yaWdpbl95QXR0cikudG9JbnQoJm9rKTsKKyAgICBpbnQgZGVm
YXVsdFZlcnRpY2FsT3JpZ2luWSA9IG1fZm9udEVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihTVkdOYW1lczo6dmVydF9vcmlnaW5feUF0dHIpLnRvSW50KCZvayk7CiAgICAg
aWYgKCFvayAmJiBtX21pc3NpbmdHbHlwaEVsZW1lbnQpCi0gICAgICAgIGRlZmF1bHRWZXJ0aWNh
bE9yaWdpblkgPSBtX21pc3NpbmdHbHlwaEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnZlcnRfb3JpZ2luX3lBdHRyKS50b0ludCgpOworICAgICAgICBkZWZhdWx0VmVydGljYWxP
cmlnaW5ZID0gbV9taXNzaW5nR2x5cGhFbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFNWR05hbWVzOjp2ZXJ0X29yaWdpbl95QXR0cikudG9JbnQoKTsKICAgICBkZWZhdWx0
VmVydGljYWxPcmlnaW5ZID0gc2NhbGVVbml0c1BlckVtKGRlZmF1bHRWZXJ0aWNhbE9yaWdpblkp
OwogICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4oZGVmYXVsdFZlcnRpY2FsT3JpZ2luWSkp
OwogCkBAIC05NjYsNyArOTY2LDcgQEAgdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmFwcGVu
ZFZPUkdUYQogICAgIGFwcGVuZDE2KDApOyAvLyBQbGFjZSB0byB3cml0ZSB0YWJsZSBzaXplLgog
ICAgIGZvciAoR2x5cGggaSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgewogICAgICAg
ICBpZiAoYXV0byogZ2x5cGggPSBtX2dseXBoc1tpXS5nbHlwaEVsZW1lbnQpIHsKLSAgICAgICAg
ICAgIGlmIChpbnQgdmVydGljYWxPcmlnaW5ZID0gZ2x5cGgtPmZhc3RHZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OnZlcnRfb3JpZ2luX3lBdHRyKS50b0ludCgpKSB7CisgICAgICAgICAgICBpZiAoaW50
IHZlcnRpY2FsT3JpZ2luWSA9IGdseXBoLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFNWR05hbWVzOjp2ZXJ0X29yaWdpbl95QXR0cikudG9JbnQoKSkgewogICAgICAgICAgICAgICAg
IGFwcGVuZDE2KGkpOwogICAgICAgICAgICAgICAgIGFwcGVuZDE2KGNsYW1wVG88aW50MTZfdD4o
c2NhbGVVbml0c1BlckVtKHZlcnRpY2FsT3JpZ2luWSkpKTsKICAgICAgICAgICAgIH0KQEAgLTEy
NTQsNyArMTI1NCw3IEBAIFZlY3RvcjxjaGFyPiBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnRyYW4K
IHsKICAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwogCi0gICAgYXV0byYgZEF0dHJpYnV0ZSA9IGds
eXBoT3JNaXNzaW5nR2x5cGhFbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRBdHRy
KTsKKyAgICBhdXRvJiBkQXR0cmlidXRlID0gZ2x5cGhPck1pc3NpbmdHbHlwaEVsZW1lbnQuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6ZEF0dHIpOwogICAgIGlmIChk
QXR0cmlidXRlLmlzRW1wdHkoKSkgewogICAgICAgICB3cml0ZUNGRkVuY29kZWROdW1iZXIocmVz
dWx0LCB3aWR0aCk7CiAgICAgICAgIHdyaXRlQ0ZGRW5jb2RlZE51bWJlcihyZXN1bHQsIDApOwpA
QCAtMTI2NiwxMCArMTI2NiwxMCBAQCBWZWN0b3I8Y2hhcj4gU1ZHVG9PVEZGb250Q29udmVydGVy
Ojp0cmFuCiAKICAgICAvLyBGSVhNRTogSWYgd2UgYXJlIHZlcnRpY2FsLCB1c2UgdmVydF9vcmln
aW5feCBhbmQgdmVydF9vcmlnaW5feQogICAgIGJvb2wgb2s7Ci0gICAgZmxvYXQgaG9yaXpvbnRh
bE9yaWdpblggPSBzY2FsZVVuaXRzUGVyRW0oZ2x5cGhPck1pc3NpbmdHbHlwaEVsZW1lbnQuZmFz
dEdldEF0dHJpYnV0ZShTVkdOYW1lczo6aG9yaXpfb3JpZ2luX3hBdHRyKS50b0Zsb2F0KCZvaykp
OworICAgIGZsb2F0IGhvcml6b250YWxPcmlnaW5YID0gc2NhbGVVbml0c1BlckVtKGdseXBoT3JN
aXNzaW5nR2x5cGhFbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFt
ZXM6Omhvcml6X29yaWdpbl94QXR0cikudG9GbG9hdCgmb2spKTsKICAgICBpZiAoIW9rICYmIG1f
Zm9udEZhY2VFbGVtZW50KQogICAgICAgICBob3Jpem9udGFsT3JpZ2luWCA9IHNjYWxlVW5pdHNQ
ZXJFbShtX2ZvbnRGYWNlRWxlbWVudC0+aG9yaXpvbnRhbE9yaWdpblgoKSk7Ci0gICAgZmxvYXQg
aG9yaXpvbnRhbE9yaWdpblkgPSBzY2FsZVVuaXRzUGVyRW0oZ2x5cGhPck1pc3NpbmdHbHlwaEVs
ZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6aG9yaXpfb3JpZ2luX3lBdHRyKS50b0Zs
b2F0KCZvaykpOworICAgIGZsb2F0IGhvcml6b250YWxPcmlnaW5ZID0gc2NhbGVVbml0c1BlckVt
KGdseXBoT3JNaXNzaW5nR2x5cGhFbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oU1ZHTmFtZXM6Omhvcml6X29yaWdpbl95QXR0cikudG9GbG9hdCgmb2spKTsKICAgICBpZiAo
IW9rICYmIG1fZm9udEZhY2VFbGVtZW50KQogICAgICAgICBob3Jpem9udGFsT3JpZ2luWSA9IHNj
YWxlVW5pdHNQZXJFbShtX2ZvbnRGYWNlRWxlbWVudC0+aG9yaXpvbnRhbE9yaWdpblkoKSk7CiAK
QEAgLTEyODksMTEgKzEyODksMTEgQEAgVmVjdG9yPGNoYXI+IFNWR1RvT1RGRm9udENvbnZlcnRl
cjo6dHJhbgogdm9pZCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OnByb2Nlc3NHbHlwaEVsZW1lbnQo
Y29uc3QgU1ZHRWxlbWVudCYgZ2x5cGhPck1pc3NpbmdHbHlwaEVsZW1lbnQsIGNvbnN0IFNWR0ds
eXBoRWxlbWVudCogZ2x5cGhFbGVtZW50LCBmbG9hdCBkZWZhdWx0SG9yaXpvbnRhbEFkdmFuY2Us
IGZsb2F0IGRlZmF1bHRWZXJ0aWNhbEFkdmFuY2UsIGNvbnN0IFN0cmluZyYgY29kZXBvaW50cywg
T3B0aW9uYWw8RmxvYXRSZWN0PiYgYm91bmRpbmdCb3gpCiB7CiAgICAgYm9vbCBvazsKLSAgICBm
bG9hdCBob3Jpem9udGFsQWR2YW5jZSA9IHNjYWxlVW5pdHNQZXJFbShnbHlwaE9yTWlzc2luZ0ds
eXBoRWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpob3Jpel9hZHZfeEF0dHIpLnRv
RmxvYXQoJm9rKSk7CisgICAgZmxvYXQgaG9yaXpvbnRhbEFkdmFuY2UgPSBzY2FsZVVuaXRzUGVy
RW0oZ2x5cGhPck1pc3NpbmdHbHlwaEVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihTVkdOYW1lczo6aG9yaXpfYWR2X3hBdHRyKS50b0Zsb2F0KCZvaykpOwogICAgIGlmICgh
b2spCiAgICAgICAgIGhvcml6b250YWxBZHZhbmNlID0gZGVmYXVsdEhvcml6b250YWxBZHZhbmNl
OwogICAgIG1fYWR2YW5jZVdpZHRoTWF4ID0gc3RkOjptYXgobV9hZHZhbmNlV2lkdGhNYXgsIGhv
cml6b250YWxBZHZhbmNlKTsKLSAgICBmbG9hdCB2ZXJ0aWNhbEFkdmFuY2UgPSBzY2FsZVVuaXRz
UGVyRW0oZ2x5cGhPck1pc3NpbmdHbHlwaEVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1l
czo6dmVydF9hZHZfeUF0dHIpLnRvRmxvYXQoJm9rKSk7CisgICAgZmxvYXQgdmVydGljYWxBZHZh
bmNlID0gc2NhbGVVbml0c1BlckVtKGdseXBoT3JNaXNzaW5nR2x5cGhFbGVtZW50LmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnZlcnRfYWR2X3lBdHRyKS50b0Zsb2F0
KCZvaykpOwogICAgIGlmICghb2spCiAgICAgICAgIHZlcnRpY2FsQWR2YW5jZSA9IGRlZmF1bHRW
ZXJ0aWNhbEFkdmFuY2U7CiAgICAgbV9hZHZhbmNlSGVpZ2h0TWF4ID0gc3RkOjptYXgobV9hZHZh
bmNlSGVpZ2h0TWF4LCB2ZXJ0aWNhbEFkdmFuY2UpOwpAQCAtMTM2NCw4ICsxMzY0LDggQEAgYm9v
bCBTVkdUb09URkZvbnRDb252ZXJ0ZXI6OmNvbXBhcmVDb2RlcAogICAgIH0KIAogICAgIGlmIChp
dGVyYXRvcjEgPT0gY29kZVBvaW50czEuZW5kKCkgJiYgaXRlcmF0b3IyID09IGNvZGVQb2ludHMy
LmVuZCgpKSB7Ci0gICAgICAgIGJvb2wgZmlyc3RJc0lzb2xhdGVkID0gZGF0YTEuZ2x5cGhFbGVt
ZW50ICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGRhdGExLmdseXBoRWxlbWVudC0+
ZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6YXJhYmljX2Zvcm1BdHRyKSwgImlzb2xhdGVkIik7
Ci0gICAgICAgIGJvb2wgc2Vjb25kSXNJc29sYXRlZCA9IGRhdGEyLmdseXBoRWxlbWVudCAmJiBl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkYXRhMi5nbHlwaEVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmFyYWJpY19mb3JtQXR0ciksICJpc29sYXRlZCIpOworICAgICAg
ICBib29sIGZpcnN0SXNJc29sYXRlZCA9IGRhdGExLmdseXBoRWxlbWVudCAmJiBlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShkYXRhMS5nbHlwaEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmFyYWJpY19mb3JtQXR0ciksICJpc29sYXRlZCIpOwor
ICAgICAgICBib29sIHNlY29uZElzSXNvbGF0ZWQgPSBkYXRhMi5nbHlwaEVsZW1lbnQgJiYgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZGF0YTIuZ2x5cGhFbGVtZW50LT5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjphcmFiaWNfZm9ybUF0dHIpLCAiaXNvbGF0
ZWQiKTsKICAgICAgICAgcmV0dXJuIGZpcnN0SXNJc29sYXRlZCAmJiAhc2Vjb25kSXNJc29sYXRl
ZDsKICAgICB9CiAgICAgcmV0dXJuIGl0ZXJhdG9yMSA9PSBjb2RlUG9pbnRzMS5lbmQoKTsKQEAg
LTE0MzAsNyArMTQzMCw3IEBAIFNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29u
dmUKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGdseXBoRWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBl
PFNWR0dseXBoRWxlbWVudD4obV9mb250RWxlbWVudCkpIHsKLSAgICAgICAgYXV0byYgdW5pY29k
ZUF0dHJpYnV0ZSA9IGdseXBoRWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjp1bmlj
b2RlQXR0cik7CisgICAgICAgIGF1dG8mIHVuaWNvZGVBdHRyaWJ1dGUgPSBnbHlwaEVsZW1lbnQu
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6dW5pY29kZUF0dHIpOwog
ICAgICAgICBpZiAoIXVuaWNvZGVBdHRyaWJ1dGUuaXNFbXB0eSgpKSAvLyBJZiB3ZSBjYW4gbmV2
ZXIgYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGdseXBoLCBpZ25vcmUgaXQgY29tcGxldGVseQogICAg
ICAgICAgICAgcHJvY2Vzc0dseXBoRWxlbWVudChnbHlwaEVsZW1lbnQsICZnbHlwaEVsZW1lbnQs
IGRlZmF1bHRIb3Jpem9udGFsQWR2YW5jZSwgZGVmYXVsdFZlcnRpY2FsQWR2YW5jZSwgdW5pY29k
ZUF0dHJpYnV0ZSwgYm91bmRpbmdCb3gpOwogICAgIH0KQEAgLTE0NTUsMTQgKzE0NTUsMTQgQEAg
U1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZvbnRDb252ZQogICAgIGZvciAoR2x5cGgg
aSA9IDA7IGkgPCBtX2dseXBocy5zaXplKCk7ICsraSkgewogICAgICAgICBHbHlwaERhdGEmIGds
eXBoID0gbV9nbHlwaHNbaV07CiAgICAgICAgIGlmIChnbHlwaC5nbHlwaEVsZW1lbnQpIHsKLSAg
ICAgICAgICAgIGF1dG8mIGdseXBoTmFtZSA9IGdseXBoLmdseXBoRWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShTVkdOYW1lczo6Z2x5cGhfbmFtZUF0dHIpOworICAgICAgICAgICAgYXV0byYgZ2x5
cGhOYW1lID0gZ2x5cGguZ2x5cGhFbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKFNWR05hbWVzOjpnbHlwaF9uYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIWdseXBoTmFt
ZS5pc051bGwoKSkKICAgICAgICAgICAgICAgICBtX2dseXBoTmFtZVRvSW5kZXhNYXAuYWRkKGds
eXBoTmFtZSwgaSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fY29kZXBvaW50c1RvSW5kaWNl
c01hcC5pc1ZhbGlkS2V5KGdseXBoLmNvZGVwb2ludHMpKSB7CiAgICAgICAgICAgICBhdXRvJiBn
bHlwaFZlY3RvciA9IG1fY29kZXBvaW50c1RvSW5kaWNlc01hcC5hZGQoZ2x5cGguY29kZXBvaW50
cywgVmVjdG9yPEdseXBoPigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAvLyBQcmVm
ZXIgaXNvbGF0ZWQgYXJhYmljIGZvcm1zCi0gICAgICAgICAgICBpZiAoZ2x5cGguZ2x5cGhFbGVt
ZW50ICYmIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGdseXBoLmdseXBoRWxlbWVudC0+
ZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6YXJhYmljX2Zvcm1BdHRyKSwgImlzb2xhdGVkIikp
CisgICAgICAgICAgICBpZiAoZ2x5cGguZ2x5cGhFbGVtZW50ICYmIGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGdseXBoLmdseXBoRWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihTVkdOYW1lczo6YXJhYmljX2Zvcm1BdHRyKSwgImlzb2xhdGVkIikpCiAgICAgICAg
ICAgICAgICAgZ2x5cGhWZWN0b3IuaW5zZXJ0KDAsIGkpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGdseXBoVmVjdG9yLmFwcGVuZChpKTsKQEAgLTE0NzIsNyArMTQ3Miw3IEBA
IFNWR1RvT1RGRm9udENvbnZlcnRlcjo6U1ZHVG9PVEZGb250Q29udmUKICAgICAvLyBGSVhNRTog
SGFuZGxlIGNvbW1hcy4KICAgICBpZiAobV9mb250RmFjZUVsZW1lbnQpIHsKICAgICAgICAgVmVj
dG9yPFN0cmluZz4gc2VnbWVudHM7Ci0gICAgICAgIG1fZm9udEZhY2VFbGVtZW50LT5mYXN0R2V0
QXR0cmlidXRlKFNWR05hbWVzOjpmb250X3dlaWdodEF0dHIpLnN0cmluZygpLnNwbGl0KCcgJywg
c2VnbWVudHMpOworICAgICAgICBtX2ZvbnRGYWNlRWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihTVkdOYW1lczo6Zm9udF93ZWlnaHRBdHRyKS5zdHJpbmcoKS5zcGxpdCgn
ICcsIHNlZ21lbnRzKTsKICAgICAgICAgZm9yIChhdXRvJiBzZWdtZW50IDogc2VnbWVudHMpIHsK
ICAgICAgICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShzZWdtZW50LCAi
Ym9sZCIpKSB7CiAgICAgICAgICAgICAgICAgbV93ZWlnaHQgPSA3OwpAQCAtMTQ4NSw3ICsxNDg1
LDcgQEAgU1ZHVG9PVEZGb250Q29udmVydGVyOjpTVkdUb09URkZvbnRDb252ZQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG1fZm9udEZh
Y2VFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpmb250X3N0eWxlQXR0cikuc3Ry
aW5nKCkuc3BsaXQoJyAnLCBzZWdtZW50cyk7CisgICAgICAgIG1fZm9udEZhY2VFbGVtZW50LT5h
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpmb250X3N0eWxlQXR0ciku
c3RyaW5nKCkuc3BsaXQoJyAnLCBzZWdtZW50cyk7CiAgICAgICAgIGZvciAoYXV0byYgc2VnbWVu
dCA6IHNlZ21lbnRzKSB7CiAgICAgICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2Uoc2VnbWVudCwgIml0YWxpYyIpIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHNlZ21lbnQsICJvYmxpcXVlIikpIHsKICAgICAgICAgICAgICAgICBtX2l0YWxpYyA9IHRydWU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMjAz
MzIyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDEwICs0MiwxMCBAQCBSZWY8U1ZHVktlcm5FbGVtZW50PiBTVkdWS2VybkVs
ZW1lbnQ6OmNyCiAKIGJvb2wgU1ZHVktlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1Bh
aXIoU1ZHS2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKSBjb25zdAogewotICAgIFN0cmluZyB1MSA9
IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnUxQXR0cik7Ci0gICAgU3RyaW5nIGcxID0gZmFz
dEdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZzFBdHRyKTsKLSAgICBTdHJpbmcgdTIgPSBmYXN0R2V0
QXR0cmlidXRlKFNWR05hbWVzOjp1MkF0dHIpOwotICAgIFN0cmluZyBnMiA9IGZhc3RHZXRBdHRy
aWJ1dGUoU1ZHTmFtZXM6OmcyQXR0cik7CisgICAgU3RyaW5nIHUxID0gYXR0cmlidXRlV2l0aG91
dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6dTFBdHRyKTsKKyAgICBTdHJpbmcgZzEgPSBhdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpnMUF0dHIpOworICAgIFN0cmlu
ZyB1MiA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnUyQXR0cik7
CisgICAgU3RyaW5nIGcyID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1l
czo6ZzJBdHRyKTsKICAgICBpZiAoKHUxLmlzRW1wdHkoKSAmJiBnMS5pc0VtcHR5KCkpIHx8ICh1
Mi5pc0VtcHR5KCkgJiYgZzIuaXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC01NCw3ICs1NCw3IEBAIGJvb2wgU1ZHVktlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmkK
ICAgICAgICAgJiYgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1MSwga2VybmluZ1BhaXIudW5p
Y29kZVJhbmdlMSwga2VybmluZ1BhaXIudW5pY29kZU5hbWUxKQogICAgICAgICAmJiBwYXJzZUtl
cm5pbmdVbmljb2RlU3RyaW5nKHUyLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UyLCBrZXJuaW5n
UGFpci51bmljb2RlTmFtZTIpKSB7CiAgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICAgICAg
a2VybmluZ1BhaXIua2VybmluZyA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmtBdHRyKS5z
dHJpbmcoKS50b0Zsb2F0KCZvayk7CisgICAgICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBhdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9G
bG9hdCgmb2spOwogICAgICAgICByZXR1cm4gb2s7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw3IEBAIE5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU00KICAgICAvLyBWZXJpZnkgd2UgYXJl
IG5vdCBpbiA8dXNlPiBpbnN0YW5jZSB0cmVlLgogICAgIEFTU0VSVCghaXNJblNoYWRvd1RyZWUo
KSk7CiAKLSAgICBzZXRBdHRyaWJ1dGVOYW1lKGNvbnN0cnVjdFF1YWxpZmllZE5hbWUodGhpcywg
ZmFzdEdldEF0dHJpYnV0ZShTVkdOYW1lczo6YXR0cmlidXRlTmFtZUF0dHIpKSk7CisgICAgc2V0
QXR0cmlidXRlTmFtZShjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKHRoaXMsIGF0dHJpYnV0ZVdpdGhv
dXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSkpOwogICAgIFNW
R1NWR0VsZW1lbnQqIG93bmVyID0gb3duZXJTVkdFbGVtZW50KCk7CiAgICAgaWYgKCFvd25lcikK
ICAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBT
VkdTTUlMRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29ucwogICAgICAgICBpZiAoIW1fY29uZGl0
aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRpc2Nvbm5lY3RDb25kaXRpb25zKCk7CiAg
ICAgICAgICAgICBtX2NvbmRpdGlvbnMuY2xlYXIoKTsKLSAgICAgICAgICAgIHBhcnNlQmVnaW5P
ckVuZChmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjplbmRBdHRyKSwgRW5kKTsKKyAgICAgICAg
ICAgIHBhcnNlQmVnaW5PckVuZChhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKFNWR05h
bWVzOjplbmRBdHRyKSwgRW5kKTsKICAgICAgICAgfQogICAgICAgICBwYXJzZUJlZ2luT3JFbmQo
dmFsdWUuc3RyaW5nKCksIEJlZ2luKTsKICAgICAgICAgaWYgKGluRG9jdW1lbnQoKSkKQEAgLTQ4
Myw3ICs0ODMsNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zCiAg
ICAgICAgIGlmICghbV9jb25kaXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGlzY29u
bmVjdENvbmRpdGlvbnMoKTsKICAgICAgICAgICAgIG1fY29uZGl0aW9ucy5jbGVhcigpOwotICAg
ICAgICAgICAgcGFyc2VCZWdpbk9yRW5kKGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmJlZ2lu
QXR0ciksIEJlZ2luKTsKKyAgICAgICAgICAgIHBhcnNlQmVnaW5PckVuZChhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKFNWR05hbWVzOjpiZWdpbkF0dHIpLCBCZWdpbik7CiAgICAgICAg
IH0KICAgICAgICAgcGFyc2VCZWdpbk9yRW5kKHZhbHVlLnN0cmluZygpLCBFbmQpOwogICAgICAg
ICBpZiAoaW5Eb2N1bWVudCgpKQpAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgU1ZHU01JTEVsZW1l
bnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQKICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1l
czo6bWF4QXR0cikKICAgICAgICAgbV9jYWNoZWRNYXggPSBpbnZhbGlkQ2FjaGVkVGltZTsKICAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBTVkdOYW1lczo6YXR0cmlidXRlTmFtZUF0dHIpCi0gICAg
ICAgIHNldEF0dHJpYnV0ZU5hbWUoY29uc3RydWN0UXVhbGlmaWVkTmFtZSh0aGlzLCBmYXN0R2V0
QXR0cmlidXRlKFNWR05hbWVzOjphdHRyaWJ1dGVOYW1lQXR0cikpKTsKKyAgICAgICAgc2V0QXR0
cmlidXRlTmFtZShjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKHRoaXMsIGF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OmF0dHJpYnV0ZU5hbWVBdHRyKSkpOwogICAgIGVsc2Ug
aWYgKGF0dHJOYW1lLm1hdGNoZXMoWExpbmtOYW1lczo6aHJlZkF0dHIpKSB7CiAgICAgICAgIElu
c3RhbmNlSW52YWxpZGF0aW9uR3VhcmQgZ3VhcmQoKnRoaXMpOwogICAgICAgICBidWlsZFBlbmRp
bmdSZXNvdXJjZSgpOwpAQCAtNjQ2LDcgKzY0Niw3IEBAIFNWR1NNSUxFbGVtZW50OjpSZXN0YXJ0
IFNWR1NNSUxFbGVtZW50OjoKIHsgICAgCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0
IEF0b21pY1N0cmluZz4gbmV2ZXIoIm5ldmVyIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4g
d2hlbk5vdEFjdGl2ZSgid2hlbk5vdEFjdGl2ZSIsIEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmli
dXRlKFNWR05hbWVzOjpyZXN0YXJ0QXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnJlc3RhcnRBdHRy
KTsKICAgICBpZiAodmFsdWUgPT0gbmV2ZXIpCiAgICAgICAgIHJldHVybiBSZXN0YXJ0TmV2ZXI7
CiAgICAgaWYgKHZhbHVlID09IHdoZW5Ob3RBY3RpdmUpCkBAIC02NTcsNyArNjU3LDcgQEAgU1ZH
U01JTEVsZW1lbnQ6OlJlc3RhcnQgU1ZHU01JTEVsZW1lbnQ6OgogU1ZHU01JTEVsZW1lbnQ6OkZp
bGxNb2RlIFNWR1NNSUxFbGVtZW50OjpmaWxsKCkgY29uc3QKIHsgICAKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBmcmVlemUoImZyZWV6ZSIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpmaWxsQXR0cik7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFt
ZXM6OmZpbGxBdHRyKTsKICAgICByZXR1cm4gdmFsdWUgPT0gZnJlZXplID8gRmlsbEZyZWV6ZSA6
IEZpbGxSZW1vdmU7CiB9CiAgICAgCkBAIC02NjUsNyArNjY1LDcgQEAgU01JTFRpbWUgU1ZHU01J
TEVsZW1lbnQ6OmR1cigpIGNvbnN0CiB7ICAgCiAgICAgaWYgKG1fY2FjaGVkRHVyICE9IGludmFs
aWRDYWNoZWRUaW1lKQogICAgICAgICByZXR1cm4gbV9jYWNoZWREdXI7Ci0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmR1ckF0dHIpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKFNWR05hbWVzOjpkdXJBdHRyKTsKICAgICBTTUlMVGltZSBjbG9ja1ZhbHVlID0gcGFy
c2VDbG9ja1ZhbHVlKHZhbHVlKTsKICAgICByZXR1cm4gbV9jYWNoZWREdXIgPSBjbG9ja1ZhbHVl
IDw9IDAgPyBTTUlMVGltZTo6dW5yZXNvbHZlZCgpIDogY2xvY2tWYWx1ZTsKIH0KQEAgLTY3NCw3
ICs2NzQsNyBAQCBTTUlMVGltZSBTVkdTTUlMRWxlbWVudDo6cmVwZWF0RHVyKCkgY29uCiB7ICAg
IAogICAgIGlmIChtX2NhY2hlZFJlcGVhdER1ciAhPSBpbnZhbGlkQ2FjaGVkVGltZSkKICAgICAg
ICAgcmV0dXJuIG1fY2FjaGVkUmVwZWF0RHVyOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjpyZXBlYXREdXJBdHRyKTsKKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihT
VkdOYW1lczo6cmVwZWF0RHVyQXR0cik7CiAgICAgU01JTFRpbWUgY2xvY2tWYWx1ZSA9IHBhcnNl
Q2xvY2tWYWx1ZSh2YWx1ZSk7CiAgICAgbV9jYWNoZWRSZXBlYXREdXIgPSBjbG9ja1ZhbHVlIDw9
IDAgPyBTTUlMVGltZTo6dW5yZXNvbHZlZCgpIDogY2xvY2tWYWx1ZTsKICAgICByZXR1cm4gbV9j
YWNoZWRSZXBlYXREdXI7CkBAIC02ODUsNyArNjg1LDcgQEAgU01JTFRpbWUgU1ZHU01JTEVsZW1l
bnQ6OnJlcGVhdENvdW50KCkgYwogeyAgICAKICAgICBpZiAobV9jYWNoZWRSZXBlYXRDb3VudCAh
PSBpbnZhbGlkQ2FjaGVkVGltZSkKICAgICAgICAgcmV0dXJuIG1fY2FjaGVkUmVwZWF0Q291bnQ7
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnJlcGVhdENvdW50QXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oU1ZHTmFtZXM6OnJlcGVhdENvdW50QXR0cik7
CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gU01JTFRpbWU6OnVucmVz
b2x2ZWQoKTsKIApAQCAtNzAxLDcgKzcwMSw3IEBAIFNNSUxUaW1lIFNWR1NNSUxFbGVtZW50Ojpt
YXhWYWx1ZSgpIGNvbnMKIHsgICAgCiAgICAgaWYgKG1fY2FjaGVkTWF4ICE9IGludmFsaWRDYWNo
ZWRUaW1lKQogICAgICAgICByZXR1cm4gbV9jYWNoZWRNYXg7Ci0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6Om1heEF0dHIpOworICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KFNWR05hbWVzOjptYXhBdHRyKTsKICAgICBTTUlMVGltZSByZXN1bHQgPSBwYXJzZUNsb2NrVmFs
dWUodmFsdWUpOwogICAgIHJldHVybiBtX2NhY2hlZE1heCA9IChyZXN1bHQuaXNVbnJlc29sdmVk
KCkgfHwgcmVzdWx0IDw9IDApID8gU01JTFRpbWU6OmluZGVmaW5pdGUoKSA6IHJlc3VsdDsKIH0K
QEAgLTcxMCw3ICs3MTAsNyBAQCBTTUlMVGltZSBTVkdTTUlMRWxlbWVudDo6bWluVmFsdWUoKSBj
b25zCiB7ICAgIAogICAgIGlmIChtX2NhY2hlZE1pbiAhPSBpbnZhbGlkQ2FjaGVkVGltZSkKICAg
ICAgICAgcmV0dXJuIG1fY2FjaGVkTWluOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBmYXN0R2V0QXR0cmlidXRlKFNWR05hbWVzOjptaW5BdHRyKTsKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlID0gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihTVkdOYW1lczo6
bWluQXR0cik7CiAgICAgU01JTFRpbWUgcmVzdWx0ID0gcGFyc2VDbG9ja1ZhbHVlKHZhbHVlKTsK
ICAgICByZXR1cm4gbV9jYWNoZWRNaW4gPSAocmVzdWx0LmlzVW5yZXNvbHZlZCgpIHx8IHJlc3Vs
dCA8IDApID8gMCA6IHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMyMikK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1
IEBACisyMDE2LTA3LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJlbmFtZSBmYXN0R2V0QXR0cmlidXRlIHRvIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
OTg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpnZXRQb3NpdGlvbkluZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cGVyZm9ybUFjdGlvbk9uRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omdl
dEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKToKKwogMjAxNi0wNy0xNSAgVGltb3RoeSBIYXRjaGVy
ICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEF1dG9tYXRpb246IEZpeCBlbGVt
ZW50IGFuZCBldmVudCBjb29yZCBzcGFjZSBpc3N1ZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlzaW9uIDIw
MzMyMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM2MCw3ICsyMzYwLDcgQEAgdm9pZCBXZWJQYWdlOjpn
ZXRQb3NpdGlvbkluZm9ybWF0aW9uKGNvbgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KGxpbmtFbGVtZW50KQogICAgICAgICAgICAgICAgIGluZm8udXJsID0gWyhOU1VSTCAqKWxpbmtF
bGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRN
TFNwYWNlcyhsaW5rRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIpKSkg
YWJzb2x1dGVTdHJpbmddOwotICAgICAgICAgICAgaW5mby50aXRsZSA9IGVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpLnN0cmluZygpOworICAgICAgICAgICAg
aW5mby50aXRsZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRN
TE5hbWVzOjp0aXRsZUF0dHIpLnN0cmluZygpOwogICAgICAgICAgICAgaWYgKGxpbmtFbGVtZW50
ICYmIGluZm8udGl0bGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGluZm8udGl0bGUgPSBl
bGVtZW50LT5pbm5lclRleHQoKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigp
KQpAQCAtMjQzOCw5ICsyNDM4LDkgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtQWN0aW9uT25FbGVt
ZW50KHVpbgogICAgICAgICAgICAgaWYgKCFsaW5rRWxlbWVudCkKICAgICAgICAgICAgICAgICBt
X2ludGVyYWN0aW9uTm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS53cml0ZUltYWdl
VG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSwgZWxlbWVu
dCwgVVJMKCksIFN0cmluZygpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
X2ludGVyYWN0aW9uTm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5lZGl0b3IoKS5jb3B5VVJMKGxp
bmtFbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyhsaW5rRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZB
dHRyKSkpLCBsaW5rRWxlbWVudC0+dGV4dENvbnRlbnQoKSk7CisgICAgICAgICAgICAgICAgbV9p
bnRlcmFjdGlvbk5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9yKCkuY29weVVSTChsaW5r
RWxlbWVudC0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hU
TUxTcGFjZXMobGlua0VsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRN
TE5hbWVzOjpocmVmQXR0cikpKSwgbGlua0VsZW1lbnQtPnRleHRDb250ZW50KCkpOwogICAgICAg
ICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNMaW5rKCkpIHsKLSAgICAgICAgICAgIG1faW50ZXJhY3Rp
b25Ob2RlLT5kb2N1bWVudCgpLmZyYW1lKCktPmVkaXRvcigpLmNvcHlVUkwoZWxlbWVudC5kb2N1
bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhlbGVt
ZW50LmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0cikpKSwgZWxlbWVudC50ZXh0
Q29udGVudCgpKTsKKyAgICAgICAgICAgIG1faW50ZXJhY3Rpb25Ob2RlLT5kb2N1bWVudCgpLmZy
YW1lKCktPmVkaXRvcigpLmNvcHlVUkwoZWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpocmVmQXR0cikpKSwgZWxlbWVudC50ZXh0Q29udGVu
dCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoc3RhdGljX2Nhc3Q8U2hlZXRBY3Rpb24+
KGFjdGlvbikgPT0gU2hlZXRBY3Rpb246OlNhdmVJbWFnZSkgewogICAgICAgICBpZiAoIWlzPFJl
bmRlckltYWdlPigqZWxlbWVudC5yZW5kZXJlcigpKSkKQEAgLTI2MDgsMTMgKzI2MDgsMTMgQEAg
dm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbgogICAgICAgICBlbHNlIGlm
IChlbGVtZW50LmlzVVJMRmllbGQoKSkKICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRU
eXBlID0gSW5wdXRUeXBlOjpVUkw7CiAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXNUZXh0KCkp
IHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcGF0dGVybiA9IGVsZW1lbnQuZmFz
dEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnBhdHRlcm5BdHRyKTsKKyAgICAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgcGF0dGVybiA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihIVE1MTmFtZXM6OnBhdHRlcm5BdHRyKTsKICAgICAgICAgICAgIGlmIChwYXR0ZXJu
ID09ICJcXGQqIiB8fCBwYXR0ZXJuID09ICJbMC05XSoiKQogICAgICAgICAgICAgICAgIGluZm9y
bWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBlOjpOdW1iZXJQYWQ7CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9IElucHV0VHlw
ZTo6VGV4dDsKICAgICAgICAgICAgICAgICBpZiAoIWluZm9ybWF0aW9uLmZvcm1BY3Rpb24uaXNF
bXB0eSgpCi0gICAgICAgICAgICAgICAgICAgICYmIChlbGVtZW50LmdldE5hbWVBdHRyaWJ1dGUo
KS5jb250YWlucygic2VhcmNoIikgfHwgZWxlbWVudC5nZXRJZEF0dHJpYnV0ZSgpLmNvbnRhaW5z
KCJzZWFyY2giKSB8fCBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0
dHIpLmNvbnRhaW5zKCJzZWFyY2giKSkpCisgICAgICAgICAgICAgICAgICAgICYmIChlbGVtZW50
LmdldE5hbWVBdHRyaWJ1dGUoKS5jb250YWlucygic2VhcmNoIikgfHwgZWxlbWVudC5nZXRJZEF0
dHJpYnV0ZSgpLmNvbnRhaW5zKCJzZWFyY2giKSB8fCBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp0aXRsZUF0dHIpLmNvbnRhaW5zKCJzZWFyY2giKSkp
CiAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uLmVsZW1lbnRUeXBlID0gSW5wdXRUeXBl
OjpTZWFyY2g7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA3LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBmYXN0R2V0QXR0cmlidXRlIHRvIGF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1OTg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06Cisg
ICAgICAgIChtYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KToKKwogMjAxNi0wNy0xNSAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBmYXN0R2V0QXR0cmlidXRl
KCkgLyBzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKCkgd2hlbiBwb3NzaWJsZQpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50
YXRpb24ubW0JKHJldmlzaW9uIDIwMzMyMikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MjAsMTEgKzUyMCwx
MSBAQCBzdGF0aWMgTlNTdHJpbmcqIG1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lCiB7CiAgICAgLy8g
TWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSBlbGVtZW50LCB0aGVuIGFnYWluc3QgdGhlIGlkIGVsZW1l
bnQgaWYgbm8gbWF0Y2ggaXMgZm91bmQgZm9yIHRoZSBuYW1lIGVsZW1lbnQuCiAgICAgLy8gU2Vl
IDc1MzgzMzAgZm9yIG9uZSBwb3B1bGFyIHNpdGUgdGhhdCBiZW5lZml0cyBmcm9tIHRoZSBpZCBl
bGVtZW50IGNoZWNrLgotICAgIFN0cmluZyByZXN1bHRGcm9tTmFtZUF0dHJpYnV0ZSA9IG1hdGNo
TGFiZWxzQWdhaW5zdFN0cmluZyhsYWJlbHMsIGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobmFt
ZUF0dHIpKTsKKyAgICBTdHJpbmcgcmVzdWx0RnJvbU5hbWVBdHRyaWJ1dGUgPSBtYXRjaExhYmVs
c0FnYWluc3RTdHJpbmcobGFiZWxzLCBlbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKG5hbWVBdHRyKSk7CiAgICAgaWYgKCFyZXN1bHRGcm9tTmFtZUF0dHJpYnV0ZS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiByZXN1bHRGcm9tTmFtZUF0dHJpYnV0ZTsKICAgICAKLSAg
ICByZXR1cm4gbWF0Y2hMYWJlbHNBZ2FpbnN0U3RyaW5nKGxhYmVscywgZWxlbWVudC0+ZmFzdEdl
dEF0dHJpYnV0ZShpZEF0dHIpKTsKKyAgICByZXR1cm4gbWF0Y2hMYWJlbHNBZ2FpbnN0U3RyaW5n
KGxhYmVscywgZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihpZEF0dHIp
KTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDMzMjIpCisrKyBTb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wNy0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZW5hbWUgZmFzdEdldEF0dHJpYnV0ZSB0byBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk4NTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTUhU
TUxDbGFzc2VzLmNwcDoKKyAgICAgICAgKERPTUhUTUxFbGVtZW50OjppZE5hbWUpOgorCiAyMDE2
LTA3LTE1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGZh
c3RHZXRBdHRyaWJ1dGUoKSAvIHNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oKSB3
aGVuIHBvc3NpYmxlCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwCShyZXZp
c2lvbiAyMDMzMjIpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyOSw3ICs0MjksNyBAQCBIUkVTVUxUIERPTUhUTUxFbGVtZW50Ojpp
ZE5hbWUoX19kZXJlZl9vCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKICAgICBBU1NFUlQo
aXM8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCkpOwotICAgIFN0cmluZyBpZFN0cmluZyA9IGRvd25j
YXN0PEhUTUxFbGVtZW50PihtX2VsZW1lbnQpLT5mYXN0R2V0QXR0cmlidXRlKGlkQXR0cik7Cisg
ICAgU3RyaW5nIGlkU3RyaW5nID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG1fZWxlbWVudCktPmF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oaWRBdHRyKTsKICAgICAqcmVzdWx0ID0gQlN0
cmluZyhpZFN0cmluZykucmVsZWFzZSgpOwogICAgIHJldHVybiBTX09LOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>