<?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>37712</bug_id>
          
          <creation_ts>2010-04-16 10:47:58 -0700</creation_ts>
          <short_desc>Refactor WebGLArray types to share more code</short_desc>
          <delta_ts>2010-05-10 10:53:47 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>oliver</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>213290</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-04-16 10:47:58 -0700</bug_when>
    <thetext>At the WebKit meeting this past week Darin Adler pointed out that there are code sharing opportunities between the various WebGL&lt;T&gt;Array types. Some of these have been addressed with a recent refactoring to the range checking code, but more refactorings would be possible with a template base class between WebGLArray and the concrete types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223360</commentid>
    <comment_count>1</comment_count>
      <attachid>55562</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-10 09:48:43 -0700</bug_when>
    <thetext>Created attachment 55562
Patch

From the ChangeLog:

Refactored WebGLArray types for maximal code sharing. Added WebGLTypedArrayBase and WebGLIntegralTypedArrayBase template superclasses. Changed overridden virtuals to have minimal visibility (private instead of public). Fixed const correctness of a few methods. There are no changes to the public APIs of the WebGLArray classes; the JavaScript bindings are unchanged.

No new tests; existing tests cover this functionality. Ran all WebGL layout tests in Safari and Chromium on Mac OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223388</commentid>
    <comment_count>2</comment_count>
      <attachid>55562</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-05-10 10:34:49 -0700</bug_when>
    <thetext>Comment on attachment 55562
Patch

WebCore/ChangeLog:80
 +  
It would be great to either annotate each change or just remove this huge laundry list of files from the ChangeLog -- you already have refactoring described.

WebCore/html/canvas/WebGLTypedArrayBase.h:85
 +          return adoptRef(new Subclass(buf, byteOffset, length));
Awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223395</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-10 10:52:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 55562 [details])
&gt; WebCore/ChangeLog:80
&gt;  +  
&gt; It would be great to either annotate each change or just remove this huge laundry list of files from the ChangeLog -- you already have refactoring described.

Thanks for the feedback. I&apos;m reluctant to remove the list of modified files / methods because other recent ChangeLog entries do the same thing, so I&apos;m going to leave this as is.

&gt; WebCore/html/canvas/WebGLTypedArrayBase.h:85
&gt;  +          return adoptRef(new Subclass(buf, byteOffset, length));
&gt; Awesome.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223399</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-10 10:53:47 -0700</bug_when>
    <thetext>Committed r59085: &lt;http://trac.webkit.org/changeset/59085&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55562</attachid>
            <date>2010-05-10 09:48:43 -0700</date>
            <delta_ts>2010-05-10 10:34:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>array-refactoring.patch</filename>
            <type>text/plain</type>
            <size>57747</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTA4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMDUtMTAgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yIFdlYkdMQXJyYXkgdHlwZXMgdG8gc2hhcmUgbW9yZSBjb2RlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzcxMgorCisgICAgICAgIFJlZmFj
dG9yZWQgV2ViR0xBcnJheSB0eXBlcyBmb3IgbWF4aW1hbCBjb2RlIHNoYXJpbmcuIEFkZGVkCisg
ICAgICAgIFdlYkdMVHlwZWRBcnJheUJhc2UgYW5kIFdlYkdMSW50ZWdyYWxUeXBlZEFycmF5QmFz
ZSB0ZW1wbGF0ZQorICAgICAgICBzdXBlcmNsYXNzZXMuIENoYW5nZWQgb3ZlcnJpZGRlbiB2aXJ0
dWFscyB0byBoYXZlIG1pbmltYWwKKyAgICAgICAgdmlzaWJpbGl0eSAocHJpdmF0ZSBpbnN0ZWFk
IG9mIHB1YmxpYykuIEZpeGVkIGNvbnN0IGNvcnJlY3RuZXNzIG9mCisgICAgICAgIGEgZmV3IG1l
dGhvZHMuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHRoZSBwdWJsaWMgQVBJcyBvZiB0aGUKKyAg
ICAgICAgV2ViR0xBcnJheSBjbGFzc2VzOyB0aGUgSmF2YVNjcmlwdCBiaW5kaW5ncyBhcmUgdW5j
aGFuZ2VkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgZXhpc3RpbmcgdGVzdHMgY292ZXIgdGhp
cyBmdW5jdGlvbmFsaXR5LiBSYW4gYWxsCisgICAgICAgIFdlYkdMIGxheW91dCB0ZXN0cyBpbiBT
YWZhcmkgYW5kIENocm9taXVtIG9uIE1hYyBPUyBYLgorCisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTEFycmF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEFycmF5
OjpidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xBcnJheTo6YmFzZUFkZHJlc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xBcnJheTo6Ynl0ZU9mZnNldCk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCeXRl
QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ5dGVBcnJheTo6V2ViR0xC
eXRlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCeXRlQXJyYXk6OnNsaWNlKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5oOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xCeXRlQXJyYXk6OmlzQnl0ZUFycmF5KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TEZsb2F0QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5OjpXZWJHTEZsb2F0QXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5OjpzbGljZSk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZs
b2F0QXJyYXk6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZsb2F0QXJyYXk6Oml0ZW0p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5Ojppc0Zsb2F0QXJyYXkpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xJbnRBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMSW50QXJyYXk6
OldlYkdMSW50QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xJbnRBcnJheTo6c2xpY2Up
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuaDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMSW50QXJyYXk6OmlzSW50QXJyYXkpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTElu
dGVncmFsVHlwZWRBcnJheUJhc2U6OldlYkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZSk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMU2hvcnRBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hvcnRB
cnJheTo6V2ViR0xTaG9ydEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hvcnRBcnJh
eTo6c2xpY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5oOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xTaG9ydEFycmF5Ojppc1Nob3J0QXJyYXkpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMVHlwZWRBcnJheUJhc2UuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFR5cGVkQXJyYXlCYXNlOjpkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
VHlwZWRBcnJheUJhc2U6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFR5cGVkQXJyYXlC
YXNlOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUeXBlZEFycmF5QmFzZTo6V2Vi
R0xUeXBlZEFycmF5QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFR5cGVkQXJyYXlCYXNl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUeXBlZEFycmF5QmFzZTo6c2xpY2VJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVHlwZWRBcnJheUJhc2U6OmJ5dGVMZW5ndGgp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMVW5zaWduZWRCeXRlQXJyYXk6OldlYkdMVW5zaWduZWRCeXRlQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6c2xpY2UpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmlzVW5zaWduZWRCeXRlQXJyYXkpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6OldlYkdMVW5zaWduZWRJbnRBcnJheSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6OnNsaWNlKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
VW5zaWduZWRJbnRBcnJheTo6aXNVbnNpZ25lZEludEFycmF5KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFVuc2lnbmVkU2hvcnRBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVW5z
aWduZWRTaG9ydEFycmF5OjpXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6c2xpY2UpOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVu
c2lnbmVkU2hvcnRBcnJheTo6aXNVbnNpZ25lZFNob3J0QXJyYXkpOgorCiAyMDEwLTA1LTEwICBE
aXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlr
b2xhcyBaaW1tZXJtYW5uLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDU5MDgyKQorKysgV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEzOTEsNiArMTM5MSw3IEBACiAgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvV2ViR0xJbnRBcnJheS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMSW50
QXJyYXkuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xJbnRlZ3JhbFR5cGVkQXJy
YXlCYXNlLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5jcHAnLAog
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5oJywKICAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcCcsCkBAIC0xNDE1LDYgKzE0MTYsNyBAQAogICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgnLAogICAgICAgICAgICAgJ2h0bWwv
Y2FudmFzL1dlYkdMVGV4dHVyZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdM
VGV4dHVyZS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFR5cGVkQXJyYXlCYXNl
LmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCcs
CiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaCcsCiAgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAnLApJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU5MDgy
KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOTMsNiArMTI5Myw4IEBACiAJCTZFNEU5MUFEMTBGN0ZCMzEwMEEyNzc5QyAv
KiBDYW52YXNDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkU0RTkxQTgxMEY3RkIzMTAwQTI3NzlDIC8qIENhbnZhc0NvbnRl
eHRBdHRyaWJ1dGVzLmggKi87IH07CiAJCTZFNEU5MUFFMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFNEU5MUE5MTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzLmNwcCAqLzsgfTsKIAkJNkU0RTkxQUYxMEY3RkIzMTAwQTI3NzlDIC8qIFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFNEU5MUFBMTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVz
LmggKi87IH07CisJCTZFOTZCQjFDMTE5ODZFRTIwMDdEOTRDRCAvKiBXZWJHTEludGVncmFsVHlw
ZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFOTZCQjFBMTE5ODZFRTEwMDdEOTRDRCAvKiBXZWJHTEludGVncmFsVHlwZWRBcnJheUJh
c2UuaCAqLzsgfTsKKwkJNkU5NkJCMUQxMTk4NkVFMjAwN0Q5NENEIC8qIFdlYkdMVHlwZWRBcnJh
eUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
OTZCQjFCMTE5ODZFRTEwMDdEOTRDRCAvKiBXZWJHTFR5cGVkQXJyYXlCYXNlLmggKi87IH07CiAJ
CTZFRThBNzcyMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFOEE3NzAx
MEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi87IH07CiAJ
CTZFRThBNzczMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRThBNzcxMTBG
ODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLzsgfTsKIAkJNzI2
MjZFMDIwRUYwMjJGRTAwQTA3RTIwIC8qIEZvbnRGYXN0UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjYyNkUwMTBFRjAyMkZFMDBBMDdFMjAg
LyogRm9udEZhc3RQYXRoLmNwcCAqLzsgfTsKQEAgLTY4NzAsNiArNjg3Miw4IEBACiAJCTZFNEU5
MUE5MTBGN0ZCMzEwMEEyNzc5QyAvKiBXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3Bw
OyBwYXRoID0gY2FudmFzL1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RTRFOTFBQTEwRjdGQjMxMDBBMjc3OUMgLyogV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmg7IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RTRFOTFBQjEwRjdGQjMxMDBBMjc3OUMgLyog
V2ViR0xDb250ZXh0QXR0cmlidXRlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xD
b250ZXh0QXR0cmlidXRlcy5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0QXR0cmlidXRl
cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFOTZCQjFBMTE5ODZFRTEwMDdE
OTRDRCAvKiBXZWJHTEludGVncmFsVHlwZWRBcnJheUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV2ViR0xJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmg7IHBhdGggPSBjYW52
YXMvV2ViR0xJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZFOTZCQjFCMTE5ODZFRTEwMDdEOTRDRCAvKiBXZWJHTFR5cGVkQXJyYXlCYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMVHlwZWRBcnJheUJhc2UuaDsg
cGF0aCA9IGNhbnZhcy9XZWJHTFR5cGVkQXJyYXlCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJp
YnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVFOEE3
NzExMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2MjZFMDEwRUYwMjJGRTAwQTA3RTIwIC8qIEZv
bnRGYXN0UGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250
RmFzdFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEyODYsNiArMTEy
OTAsNyBAQAogCQkJCTQ5RUVDREQwMTA1MDNDMjMwMDA5OUZBQiAvKiBXZWJHTEludEFycmF5LmNw
cCAqLywKIAkJCQk0OUVFQ0REMTEwNTAzQzIzMDAwOTlGQUIgLyogV2ViR0xJbnRBcnJheS5oICov
LAogCQkJCTQ5RUVDREQyMTA1MDNDMjMwMDA5OUZBQiAvKiBXZWJHTEludEFycmF5LmlkbCAqLywK
KwkJCQk2RTk2QkIxQTExOTg2RUUxMDA3RDk0Q0QgLyogV2ViR0xJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlLmggKi8sCiAJCQkJNDlDN0I5QjYxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUHJvZ3JhbS5j
cHAgKi8sCiAJCQkJNDlDN0I5QjcxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUHJvZ3JhbS5oICov
LAogCQkJCTQ5QzdCOUI4MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFByb2dyYW0uaWRsICovLApA
QCAtMTEzMDQsNiArMTEzMDksNyBAQAogCQkJCTQ5QzdCOUM1MTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFRleHR1cmUuY3BwICovLAogCQkJCTQ5QzdCOUM2MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJH
TFRleHR1cmUuaCAqLywKIAkJCQk0OUM3QjlDNzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0
dXJlLmlkbCAqLywKKwkJCQk2RTk2QkIxQjExOTg2RUUxMDA3RDk0Q0QgLyogV2ViR0xUeXBlZEFy
cmF5QmFzZS5oICovLAogCQkJCTBDM0YxRjU3MTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5jcHAgKi8sCiAJCQkJMEMzRjFGNTgxMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdM
VW5pZm9ybUxvY2F0aW9uLmggKi8sCiAJCQkJMEMzRjFGNTkxMEM4ODcxMjAwRDcyQ0UxIC8qIFdl
YkdMVW5pZm9ybUxvY2F0aW9uLmlkbCAqLywKQEAgLTE5MTI1LDYgKzE5MTMxLDggQEAKIAkJCQlD
NUY0RjQwQjExOTMwNkFDMDBGREZBREQgLyogSlNJREJEYXRhYmFzZVJlcXVlc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUM1RjRGNDBEMTE5MzA2QUMwMEZERkFERCAvKiBKU0lEQlJlcXVlc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUM1RjRGNDExMTE5MzA2QzAwMEZERkFERCAvKiBKU0luZGV4ZWRE
YXRhYmFzZVJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFOTZCQjFDMTE5ODZFRTIwMDdE
OTRDRCAvKiBXZWJHTEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTZFOTZCQjFEMTE5ODZFRTIwMDdEOTRDRCAvKiBXZWJHTFR5cGVkQXJyYXlCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5oCShyZXZpc2lvbiA1OTA4MikK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NiwyMSArNDYsMjQgQEAgY2xhc3MgV2ViR0xBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYgog
ICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCi0gICAgUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIoKSB7CisgICAg
UGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIoKSBjb25zdAorICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fYnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgewor
ICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgY29uc3QKKyAgICB7CiAgICAgICAgIHJldHVybiBtX2Jh
c2VBZGRyZXNzOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQoKSBjb25zdCB7Cisg
ICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpIGNvbnN0CisgICAgewogICAgICAgICByZXR1cm4gbV9i
eXRlT2Zmc2V0OwogICAgIH0KIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UoaW50IHN0YXJ0LCBpbnQgZW5kKSA9
IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKGludCBzdGFydCwg
aW50IGVuZCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB+V2ViR0xBcnJheSgpOwogCkBAIC02
OSw4ICs3Miw4IEBAIGNsYXNzIFdlYkdMQXJyYXkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWIKIAog
ICAgIHZvaWQgc2V0SW1wbChXZWJHTEFycmF5KiBhcnJheSwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
RXhjZXB0aW9uQ29kZSYgZWMpOwogCi0gICAgdm9pZCBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgo
aW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQqIG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7Cisg
ICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFydCwgaW50IGVu
ZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKTsKIAogICAgIC8vIEhl
bHBlciB0byB2ZXJpZnkgdGhhdCBhIGdpdmVuIHN1Yi1yYW5nZSBvZiBhbiBBcnJheUJ1ZmZlciBp
cwogICAgIC8vIHdpdGhpbiByYW5nZS4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCeXRl
QXJyYXkuY3BwCShyZXZpc2lvbiA1OTA4MikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1OCArMjgsMzMgQEAKIAogI2lmIEVO
QUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJXZWJHTEFycmF5QnVmZmVyLmgiCiAjaW5jbHVk
ZSAiV2ViR0xCeXRlQXJyYXkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRy
PFdlYkdMQnl0ZUFycmF5PiBXZWJHTEJ5dGVBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
IHsKLSAgICBSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyID0gV2ViR0xBcnJheUJ1ZmZl
cjo6Y3JlYXRlKGxlbmd0aCwgc2l6ZW9mKHNpZ25lZCBjaGFyKSk7Ci0gICAgcmV0dXJuIGNyZWF0
ZShidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgcmV0dXJuIFdlYkdMVHlwZWRBcnJheUJhc2U8c2ln
bmVkIGNoYXI+OjpjcmVhdGU8V2ViR0xCeXRlQXJyYXk+KGxlbmd0aCk7CiB9CiAKIFBhc3NSZWZQ
dHI8V2ViR0xCeXRlQXJyYXk+IFdlYkdMQnl0ZUFycmF5OjpjcmVhdGUoc2lnbmVkIGNoYXIqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgUmVmUHRyPFdlYkdMQnl0ZUFycmF5PiBhID0g
V2ViR0xCeXRlQXJyYXk6OmNyZWF0ZShsZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsKLSAgICByZXR1
cm4gYTsKKyAgICByZXR1cm4gV2ViR0xUeXBlZEFycmF5QmFzZTxzaWduZWQgY2hhcj46OmNyZWF0
ZTxXZWJHTEJ5dGVBcnJheT4oYXJyYXksIGxlbmd0aCk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViR0xC
eXRlQXJyYXk+IFdlYkdMQnl0ZUFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVm
ZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAg
ICBSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmKGJ1ZmZlcik7Ci0gICAgaWYgKCF2ZXJpZnlT
dWJSYW5nZTxzaWduZWQgY2hhcj4oYnVmLCBieXRlT2Zmc2V0LCBsZW5ndGgpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xCeXRlQXJyYXkoYnVmLCBi
eXRlT2Zmc2V0LCBsZW5ndGgpKTsKKyAgICByZXR1cm4gV2ViR0xUeXBlZEFycmF5QmFzZTxzaWdu
ZWQgY2hhcj46OmNyZWF0ZTxXZWJHTEJ5dGVBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5n
dGgpOwogfQogCi1XZWJHTEJ5dGVBcnJheTo6V2ViR0xCeXRlQXJyYXkoUGFzc1JlZlB0cjxXZWJH
TEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQot
ICAgIDogV2ViR0xBcnJheShidWZmZXIsIG9mZnNldCkKLSAgICAsIG1fc2l6ZShsZW5ndGgpCitX
ZWJHTEJ5dGVBcnJheTo6V2ViR0xCeXRlQXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IFdl
YkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZTxzaWduZWQgY2hhcj4oYnVmZmVyLCBieXRlT2Zmc2V0
LCBsZW5ndGgpCiB7CiB9CiAKLXVuc2lnbmVkIFdlYkdMQnl0ZUFycmF5OjpsZW5ndGgoKSBjb25z
dCB7Ci0gICAgcmV0dXJuIG1fc2l6ZTsKLX0KLQotdW5zaWduZWQgV2ViR0xCeXRlQXJyYXk6OmJ5
dGVMZW5ndGgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1fc2l6ZSAqIHNpemVvZihzaWduZWQgY2hh
cik7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xCeXRlQXJyYXk6OnNsaWNlKGlu
dCBzdGFydCwgaW50IGVuZCkKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xCeXRlQXJyYXk6
OnNsaWNlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBvZmZzZXQs
IGxlbmd0aDsKLSAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbV9zaXpl
LCAmb2Zmc2V0LCAmbGVuZ3RoKTsKLSAgICBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzPHNpZ25l
ZCBjaGFyPihidWZmZXIoKS5nZXQoKSwgbV9ieXRlT2Zmc2V0LCAmb2Zmc2V0LCAmbGVuZ3RoKTsK
LSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLXZvaWQg
V2ViR0xCeXRlQXJyYXk6OnNldChXZWJHTEJ5dGVBcnJheSogYXJyYXksIHVuc2lnbmVkIG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsKLSAgICBzZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBzaXpl
b2Yoc2lnbmVkIGNoYXIpLCBlYyk7CisgICAgcmV0dXJuIHNsaWNlSW1wbDxXZWJHTEJ5dGVBcnJh
eT4oc3RhcnQsIGVuZCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnl0ZUFy
cmF5LmgJKHJldmlzaW9uIDU5MDgyKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2MCArMjcsMzEgQEAKICNpZm5kZWYgV2ViR0xC
eXRlQXJyYXlfaAogI2RlZmluZSBXZWJHTEJ5dGVBcnJheV9oCiAKLSNpbmNsdWRlICJXZWJHTEFy
cmF5LmgiCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgIldlYkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIFdlYkdMQXJyYXlCdWZmZXI7CiAKLWNsYXNzIFdlYkdMQnl0ZUFycmF5
IDogcHVibGljIFdlYkdMQXJyYXkgeworY2xhc3MgV2ViR0xCeXRlQXJyYXkgOiBwdWJsaWMgV2Vi
R0xJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBjaGFyPiB7CiAgIHB1YmxpYzoKLSAgICB2
aXJ0dWFsIGJvb2wgaXNCeXRlQXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ5dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xCeXRlQXJyYXk+IGNyZWF0ZShzaWduZWQgY2hh
ciogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xC
eXRlQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIGNoYXIqIGRhdGEoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7IH0KLQotICAgIHZpcnR1
YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVu
Z3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKGlu
dCBzdGFydCwgaW50IGVuZCk7Ci0KLSAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91Ymxl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKGlzbmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKLSAg
ICAgICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xp
bWl0czxzaWduZWQgY2hhcj46Om1pbigpKQotICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpZ25lZCBjaGFyPjo6bWluKCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID4g
c3RkOjpudW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj46Om1heCgpKQotICAgICAgICAgICAgdmFs
dWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPjo6bWF4KCk7Ci0gICAgICAgIHNp
Z25lZCBjaGFyKiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXIqPihtX2Jhc2VBZGRy
ZXNzKTsKLSAgICAgICAgc3RvcmFnZVtpbmRleF0gPSBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4o
dmFsdWUpOwotICAgIH0KLQotICAgIC8vIEludm9rZWQgYnkgdGhlIGluZGV4ZWQgZ2V0dGVyLiBE
b2VzIG5vdCBwZXJmb3JtIHJhbmdlIGNoZWNrczsgY2FsbGVyCi0gICAgLy8gaXMgcmVzcG9uc2li
bGUgZm9yIGRvaW5nIHNvIGFuZCByZXR1cm5pbmcgdW5kZWZpbmVkIGFzIG5lY2Vzc2FyeS4KLSAg
ICBzaWduZWQgY2hhciBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICAgICAgc2lnbmVkIGNoYXIqIHN0b3JhZ2UgPSBz
dGF0aWNfY2FzdDxzaWduZWQgY2hhcio+KG1fYmFzZUFkZHJlc3MpOwotICAgICAgICByZXR1cm4g
c3RvcmFnZVtpbmRleF07Ci0gICAgfQotCi0gICAgdm9pZCBzZXQoV2ViR0xCeXRlQXJyYXkqIGFy
cmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICB1c2luZyBXZWJH
TFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBjaGFyPjo6c2V0OworICAgIHVzaW5nIFdlYkdMSW50ZWdy
YWxUeXBlZEFycmF5QmFzZTxzaWduZWQgY2hhcj46OnNldDsKIAogICBwcml2YXRlOgogICAgIFdl
YkdMQnl0ZUFycmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBieXRlT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
dW5zaWduZWQgbV9zaXplOworICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBl
cmNsYXNzLgorICAgIGZyaWVuZCBjbGFzcyBXZWJHTFR5cGVkQXJyYXlCYXNlPHNpZ25lZCBjaGFy
PjsKKworICAgIC8vIE92ZXJyaWRkZW4gZnJvbSBXZWJHTEFycmF5LgorICAgIHZpcnR1YWwgYm9v
bCBpc0J5dGVBcnJheSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xG
bG9hdEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxv
YXRBcnJheS5jcHAJKHJldmlzaW9uIDU5MDgyKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZsb2F0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw1MSArMzQsMjcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gV2ViR0xGbG9hdEFy
cmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQogewotICAgIFJlZlB0cjxXZWJHTEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBXZWJHTEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoZmxv
YXQpKTsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKKyAgICByZXR1cm4g
V2ViR0xUeXBlZEFycmF5QmFzZTxmbG9hdD46OmNyZWF0ZTxXZWJHTEZsb2F0QXJyYXk+KGxlbmd0
aCk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBXZWJHTEZsb2F0QXJyYXk6OmNy
ZWF0ZShmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBSZWZQdHI8V2ViR0xG
bG9hdEFycmF5PiBhID0gV2ViR0xGbG9hdEFycmF5OjpjcmVhdGUobGVuZ3RoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGEtPnNldChpLCBhcnJh
eVtpXSk7Ci0gICAgcmV0dXJuIGE7CisgICAgcmV0dXJuIFdlYkdMVHlwZWRBcnJheUJhc2U8Zmxv
YXQ+OjpjcmVhdGU8V2ViR0xGbG9hdEFycmF5PihhcnJheSwgbGVuZ3RoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxXZWJHTEZsb2F0QXJyYXk+IFdlYkdMRmxvYXRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8
V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCiB7Ci0gICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZihidWZmZXIpOwotICAg
IGlmICghdmVyaWZ5U3ViUmFuZ2U8ZmxvYXQ+KGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMRmxvYXRBcnJh
eShidWYsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpOworICAgIHJldHVybiBXZWJHTFR5cGVkQXJyYXlC
YXNlPGZsb2F0Pjo6Y3JlYXRlPFdlYkdMRmxvYXRBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBs
ZW5ndGgpOwogfQogCiBXZWJHTEZsb2F0QXJyYXk6OldlYkdMRmxvYXRBcnJheShQYXNzUmVmUHRy
PFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKQotICAgICAgICA6IFdlYkdMQXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0KQotICAgICAg
ICAsIG1fc2l6ZShsZW5ndGgpCisgICAgOiBXZWJHTFR5cGVkQXJyYXlCYXNlPGZsb2F0PihidWZm
ZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKIHsKIH0KIAotdW5zaWduZWQgV2ViR0xGbG9hdEFycmF5
OjpsZW5ndGgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1fc2l6ZTsKLX0KLQotdW5zaWduZWQgV2Vi
R0xGbG9hdEFycmF5OjpieXRlTGVuZ3RoKCkgY29uc3QgewotICAgIHJldHVybiBtX3NpemUgKiBz
aXplb2YoZmxvYXQpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMRmxvYXRBcnJh
eTo6c2xpY2UoaW50IHN0YXJ0LCBpbnQgZW5kKQorUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBXZWJH
TEZsb2F0QXJyYXk6OnNsaWNlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKIHsKLSAgICB1bnNp
Z25lZCBvZmZzZXQsIGxlbmd0aDsKLSAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQs
IGVuZCwgbV9zaXplLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKLSAgICBjbGFtcE9mZnNldEFuZE51bUVs
ZW1lbnRzPGZsb2F0PihidWZmZXIoKSwgbV9ieXRlT2Zmc2V0LCAmb2Zmc2V0LCAmbGVuZ3RoKTsK
LSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7Ci19Ci0KLXZvaWQg
V2ViR0xGbG9hdEFycmF5OjpzZXQoV2ViR0xGbG9hdEFycmF5KiBhcnJheSwgdW5zaWduZWQgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykgewotICAgIHNldEltcGwoYXJyYXksIG9mZnNldCAqIHNp
emVvZihmbG9hdCksIGVjKTsKKyAgICByZXR1cm4gc2xpY2VJbXBsPFdlYkdMRmxvYXRBcnJheT4o
c3RhcnQsIGVuZCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9h
dEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJy
YXkuaAkocmV2aXNpb24gNTkwODIpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw0NCArMjcsMzQgQEAKICNpZm5kZWYgV2ViR0xG
bG9hdEFycmF5X2gKICNkZWZpbmUgV2ViR0xGbG9hdEFycmF5X2gKIAotI2luY2x1ZGUgIldlYkdM
QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTFR5cGVkQXJyYXlCYXNlLmgiCiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xGbG9h
dEFycmF5IDogcHVibGljIFdlYkdMQXJyYXkgeworY2xhc3MgV2ViR0xGbG9hdEFycmF5IDogcHVi
bGljIFdlYkdMVHlwZWRBcnJheUJhc2U8ZmxvYXQ+IHsKICAgcHVibGljOgotICAgIHZpcnR1YWwg
Ym9vbCBpc0Zsb2F0QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gY3JlYXRlKGZsb2F0KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEZsb2F0QXJyYXk+
IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0
ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIGZsb2F0KiBkYXRhKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQqPihiYXNlQWRkcmVzcygpKTsgfQotCi0gICAgdmlydHVhbCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UoaW50IHN0YXJ0
LCBpbnQgZW5kKTsKKyAgICB1c2luZyBXZWJHTFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6c2V0Owog
CiAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgIGlmIChpbmRleCA+PSBXZWJHTFR5cGVk
QXJyYXlCYXNlPGZsb2F0Pjo6bV9sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCiAgICAgICAgICAgICB2YWx1ZSA9
IDA7Ci0gICAgICAgIGZsb2F0KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihtX2Jhc2VB
ZGRyZXNzKTsKLSAgICAgICAgc3RvcmFnZVtpbmRleF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4odmFs
dWUpOworICAgICAgICBXZWJHTFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6ZGF0YSgpW2luZGV4XSA9
IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gSW52b2tlZCBieSB0
aGUgaW5kZXhlZCBnZXR0ZXIuIERvZXMgbm90IHBlcmZvcm0gcmFuZ2UgY2hlY2tzOyBjYWxsZXIK
ICAgICAvLyBpcyByZXNwb25zaWJsZSBmb3IgZG9pbmcgc28gYW5kIHJldHVybmluZyB1bmRlZmlu
ZWQgYXMgbmVjZXNzYXJ5LgogICAgIGZsb2F0IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiAg
ICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgICAgICBmbG9hdCogc3Rv
cmFnZSA9IHN0YXRpY19jYXN0PGZsb2F0Kj4obV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgIGZsb2F0
IHJlc3VsdCA9IHN0b3JhZ2VbaW5kZXhdOworICAgICAgICBBU1NFUlQoaW5kZXggPCBXZWJHTFR5
cGVkQXJyYXlCYXNlPGZsb2F0Pjo6bV9sZW5ndGgpOworICAgICAgICBmbG9hdCByZXN1bHQgPSBX
ZWJHTFR5cGVkQXJyYXlCYXNlPGZsb2F0Pjo6ZGF0YSgpW2luZGV4XTsKICAgICAgICAgaWYgKGlz
bmFuKHJlc3VsdCkpIHsKICAgICAgICAgICAgIC8vIENsYW1wIE5hTiB0byAwCiAgICAgICAgICAg
ICByZXN1bHQgPSAwOwpAQCAtNzIsMTEgKzYyLDE2IEBAIGNsYXNzIFdlYkdMRmxvYXRBcnJheSA6
IHB1YmxpYyBXZWJHTEFycmEKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICB2
b2lkIHNldChXZWJHTEZsb2F0QXJyYXkqIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKLQogICBwcml2YXRlOgotICAgIFdlYkdMRmxvYXRBcnJheShQYXNzUmVmUHRy
PFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgV2ViR0xGbG9hdEFycmF5KFBhc3NS
ZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBieXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpOwor
ICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgorICAgIGZyaWVu
ZCBjbGFzcyBXZWJHTFR5cGVkQXJyYXlCYXNlPGZsb2F0PjsKKworICAgIC8vIE92ZXJyaWRkZW4g
ZnJvbSBXZWJHTEFycmF5LgorICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0QXJyYXkoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNl
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5jcHAJKHJldmlzaW9uIDU5MDgy
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNjAgKzI4LDMzIEBACiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCi0jaW5jbHVk
ZSAiV2ViR0xBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMSW50QXJyYXkuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IFdlYkdMSW50QXJy
YXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IFdlYkdMQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZihpbnQp
KTsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gV2Vi
R0xUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8V2ViR0xJbnRBcnJheT4obGVuZ3RoKTsKIH0K
IAogUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBXZWJHTEludEFycmF5OjpjcmVhdGUoaW50KiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFJlZlB0cjxXZWJHTEludEFycmF5PiBhID0g
V2ViR0xJbnRBcnJheTo6Y3JlYXRlKGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQotICAgICAgICBhLT5zZXQoaSwgYXJyYXlbaV0pOwotICAgIHJldHVy
biBhOworICAgIHJldHVybiBXZWJHTFR5cGVkQXJyYXlCYXNlPGludD46OmNyZWF0ZTxXZWJHTElu
dEFycmF5PihhcnJheSwgbGVuZ3RoKTsKIH0KIAotUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBX
ZWJHTEludEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBieXRlT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoKQorUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBXZWJHTElu
dEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2ln
bmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBSZWZQdHI8V2ViR0xBcnJh
eUJ1ZmZlcj4gYnVmKGJ1ZmZlcik7Ci0gICAgaWYgKCF2ZXJpZnlTdWJSYW5nZTxpbnQ+KGJ1Ziwg
Ynl0ZU9mZnNldCwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYkdMSW50QXJyYXkoYnVmLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKKyAgICBy
ZXR1cm4gV2ViR0xUeXBlZEFycmF5QmFzZTxpbnQ+OjpjcmVhdGU8V2ViR0xJbnRBcnJheT4oYnVm
ZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwogfQogCiBXZWJHTEludEFycmF5OjpXZWJHTEludEFy
cmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAgIDogV2ViR0xBcnJheShidWZmZXIsIGJ5dGVP
ZmZzZXQpCi0gICAgICAgICwgbV9zaXplKGxlbmd0aCkKKyAgICA6IFdlYkdMSW50ZWdyYWxUeXBl
ZEFycmF5QmFzZTxpbnQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQogewogfQogCi11bnNp
Z25lZCBXZWJHTEludEFycmF5OjpsZW5ndGgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1fc2l6ZTsK
LX0KLQotdW5zaWduZWQgV2ViR0xJbnRBcnJheTo6Ynl0ZUxlbmd0aCgpIGNvbnN0IHsKLSAgICBy
ZXR1cm4gbV9zaXplICogc2l6ZW9mKGludCk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xBcnJheT4g
V2ViR0xJbnRBcnJheTo6c2xpY2UoaW50IHN0YXJ0LCBpbnQgZW5kKQorUGFzc1JlZlB0cjxXZWJH
TEFycmF5PiBXZWJHTEludEFycmF5OjpzbGljZShpbnQgc3RhcnQsIGludCBlbmQpIGNvbnN0CiB7
Ci0gICAgdW5zaWduZWQgb2Zmc2V0LCBsZW5ndGg7Ci0gICAgY2FsY3VsYXRlT2Zmc2V0QW5kTGVu
Z3RoKHN0YXJ0LCBlbmQsIG1fc2l6ZSwgJm9mZnNldCwgJmxlbmd0aCk7Ci0gICAgY2xhbXBPZmZz
ZXRBbmROdW1FbGVtZW50czxpbnQ+KGJ1ZmZlcigpLCBtX2J5dGVPZmZzZXQsICZvZmZzZXQsICZs
ZW5ndGgpOwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIG9mZnNldCwgbGVuZ3RoKTsKLX0K
LQotdm9pZCBXZWJHTEludEFycmF5OjpzZXQoV2ViR0xJbnRBcnJheSogYXJyYXksIHVuc2lnbmVk
IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsKLSAgICBzZXRJbXBsKGFycmF5LCBvZmZzZXQg
KiBzaXplb2YoaW50KSwgZWMpOworICAgIHJldHVybiBzbGljZUltcGw8V2ViR0xJbnRBcnJheT4o
c3RhcnQsIGVuZCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5o
CShyZXZpc2lvbiA1OTA4MikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw1OCArMjcsMjkgQEAKICNpZm5kZWYgV2ViR0xJbnRBcnJh
eV9oCiAjZGVmaW5lIFdlYkdMSW50QXJyYXlfaAogCi0jaW5jbHVkZSAiV2ViR0xBcnJheS5oIgot
I2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
ICJXZWJHTEludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBXZWJHTEludEFycmF5IDogcHVibGljIFdlYkdMQXJyYXkgeworY2xhc3MgV2ViR0xJ
bnRBcnJheSA6IHB1YmxpYyBXZWJHTEludGVncmFsVHlwZWRBcnJheUJhc2U8aW50PiB7CiAgIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbnRBcnJheSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IGNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IGNyZWF0ZShp
bnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdM
SW50QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5z
aWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIGludCogZGF0YSgpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGludCo+KGJhc2VBZGRyZXNzKCkpOyB9Ci0KLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShpbnQg
c3RhcnQsIGludCBlbmQpOwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCi0gICAg
ICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgIGlmICh2YWx1ZSA8IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWluKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWluKCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSkKLSAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKTsKLSAgICAgICAgaW50KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8aW50Kj4obV9i
YXNlQWRkcmVzcyk7Ci0gICAgICAgIHN0b3JhZ2VbaW5kZXhdID0gc3RhdGljX2Nhc3Q8aW50Pih2
YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gSW52b2tlZCBieSB0aGUgaW5kZXhlZCBnZXR0ZXIuIERv
ZXMgbm90IHBlcmZvcm0gcmFuZ2UgY2hlY2tzOyBjYWxsZXIKLSAgICAvLyBpcyByZXNwb25zaWJs
ZSBmb3IgZG9pbmcgc28gYW5kIHJldHVybmluZyB1bmRlZmluZWQgYXMgbmVjZXNzYXJ5LgotICAg
IGludCBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlu
ZGV4IDwgbV9zaXplKTsKLSAgICAgICAgaW50KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8aW50Kj4o
bV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgIHJldHVybiBzdG9yYWdlW2luZGV4XTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldChXZWJHTEludEFycmF5KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYyk7CisgICAgdXNpbmcgV2ViR0xUeXBlZEFycmF5QmFzZTxpbnQ+OjpzZXQ7
CisgICAgdXNpbmcgV2ViR0xJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPGludD46OnNldDsKIAogICBw
cml2YXRlOgogICAgIFdlYkdMSW50QXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBi
dWZmZXIsCiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlT2Zmc2V0LAogICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgLy8g
TWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3MuCisgICAgZnJpZW5kIGNsYXNz
IFdlYkdMVHlwZWRBcnJheUJhc2U8aW50PjsKKworICAgIC8vIE92ZXJyaWRkZW4gZnJvbSBXZWJH
TEFycmF5LgorICAgIHZpcnR1YWwgYm9vbCBpc0ludEFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShpbnQgc3RhcnQs
IGludCBlbmQpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEludGVncmFsVHlwZWRBcnJheUJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEludGVncmFsVHlwZWRBcnJh
eUJhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
V2ViR0xJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlX2gKKyNkZWZpbmUgV2ViR0xJbnRlZ3JhbFR5cGVk
QXJyYXlCYXNlX2gKKworI2luY2x1ZGUgIldlYkdMVHlwZWRBcnJheUJhc2UuaCIKKyNpbmNsdWRl
IDxsaW1pdHM+CisKKy8vIEJhc2UgY2xhc3MgZm9yIGFsbCBXZWJHTDxUPkFycmF5IHR5cGVzIGhv
bGRpbmcgaW50ZWdyYWwKKy8vIChub24tZmxvYXRpbmctcG9pbnQpIHZhbHVlcy4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdlYkdMSW50ZWdy
YWxUeXBlZEFycmF5QmFzZSA6IHB1YmxpYyBXZWJHTFR5cGVkQXJyYXlCYXNlPFQ+IHsKKyAgcHVi
bGljOgorICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoaW5kZXggPj0gV2ViR0xUeXBlZEFycmF5QmFzZTxUPjo6bV9sZW5ndGgpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5h
TiB0byAwCisgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgIGlmICh2YWx1ZSA8IHN0ZDo6
bnVtZXJpY19saW1pdHM8VD46Om1pbigpKQorICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPFQ+OjptaW4oKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzdGQ6Om51bWVy
aWNfbGltaXRzPFQ+OjptYXgoKSkKKyAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xp
bWl0czxUPjo6bWF4KCk7CisgICAgICAgIFdlYkdMVHlwZWRBcnJheUJhc2U8VD46OmRhdGEoKVtp
bmRleF0gPSBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gSW52b2tlZCBi
eSB0aGUgaW5kZXhlZCBnZXR0ZXIuIERvZXMgbm90IHBlcmZvcm0gcmFuZ2UgY2hlY2tzOyBjYWxs
ZXIKKyAgICAvLyBpcyByZXNwb25zaWJsZSBmb3IgZG9pbmcgc28gYW5kIHJldHVybmluZyB1bmRl
ZmluZWQgYXMgbmVjZXNzYXJ5LgorICAgIFQgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IFdlYkdMVHlwZWRBcnJheUJhc2U8VD46Om1fbGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMVHlwZWRBcnJheUJhc2U8VD46OmRhdGEoKVtpbmRl
eF07CisgICAgfQorCisgIHByb3RlY3RlZDoKKyAgICBXZWJHTEludGVncmFsVHlwZWRBcnJheUJh
c2UoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBXZWJHTFR5cGVkQXJyYXlCYXNlPFQ+KGJ1
ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQorICAgIHsKKyAgICB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJHTEludGVncmFsVHlwZWRBcnJheUJhc2VfaApJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcAkocmV2aXNpb24gNTkw
ODIpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDYwICsyNywzMyBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2lu
Y2x1ZGUgIldlYkdMQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJXZWJHTFNob3J0QXJyYXkuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPFdlYkdMU2hvcnRBcnJheT4gV2Vi
R0xTaG9ydEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQogewotICAgIFJlZlB0cjxXZWJH
TEFycmF5QnVmZmVyPiBidWZmZXIgPSBXZWJHTEFycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoLCBz
aXplb2Yoc2hvcnQpKTsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKKyAg
ICByZXR1cm4gV2ViR0xUeXBlZEFycmF5QmFzZTxzaG9ydD46OmNyZWF0ZTxXZWJHTFNob3J0QXJy
YXk+KGxlbmd0aCk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViR0xTaG9ydEFycmF5PiBXZWJHTFNob3J0
QXJyYXk6OmNyZWF0ZShzaG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBSZWZQ
dHI8V2ViR0xTaG9ydEFycmF5PiBhID0gV2ViR0xTaG9ydEFycmF5OjpjcmVhdGUobGVuZ3RoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGEtPnNl
dChpLCBhcnJheVtpXSk7Ci0gICAgcmV0dXJuIGE7CisgICAgcmV0dXJuIFdlYkdMVHlwZWRBcnJh
eUJhc2U8c2hvcnQ+OjpjcmVhdGU8V2ViR0xTaG9ydEFycmF5PihhcnJheSwgbGVuZ3RoKTsKIH0K
IAotUGFzc1JlZlB0cjxXZWJHTFNob3J0QXJyYXk+IFdlYkdMU2hvcnRBcnJheTo6Y3JlYXRlKFBh
c3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoKQorUGFzc1JlZlB0cjxXZWJHTFNob3J0QXJyYXk+IFdlYkdMU2hvcnRBcnJheTo6Y3Jl
YXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1
ZihidWZmZXIpOwotICAgIGlmICghdmVyaWZ5U3ViUmFuZ2U8c2hvcnQ+KGJ1ZiwgYnl0ZU9mZnNl
dCwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYkdMU2hvcnRBcnJheShidWYsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpOworICAgIHJldHVybiBX
ZWJHTFR5cGVkQXJyYXlCYXNlPHNob3J0Pjo6Y3JlYXRlPFdlYkdMU2hvcnRBcnJheT4oYnVmZmVy
LCBieXRlT2Zmc2V0LCBsZW5ndGgpOwogfQogCiBXZWJHTFNob3J0QXJyYXk6OldlYkdMU2hvcnRB
cnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IFdlYkdMQXJyYXkoYnVmZmVyLCBieXRl
T2Zmc2V0KQotICAgICAgICAsIG1fc2l6ZShsZW5ndGgpCisgICAgOiBXZWJHTEludGVncmFsVHlw
ZWRBcnJheUJhc2U8c2hvcnQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQogewogfQogCi11
bnNpZ25lZCBXZWJHTFNob3J0QXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKLSAgICByZXR1cm4gbV9z
aXplOwotfQotCi11bnNpZ25lZCBXZWJHTFNob3J0QXJyYXk6OmJ5dGVMZW5ndGgoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIG1fc2l6ZSAqIHNpemVvZihzaG9ydCk7Ci19Ci0KLVBhc3NSZWZQdHI8V2Vi
R0xBcnJheT4gV2ViR0xTaG9ydEFycmF5OjpzbGljZShpbnQgc3RhcnQsIGludCBlbmQpCitQYXNz
UmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMU2hvcnRBcnJheTo6c2xpY2UoaW50IHN0YXJ0LCBpbnQg
ZW5kKSBjb25zdAogewotICAgIHVuc2lnbmVkIG9mZnNldCwgbGVuZ3RoOwotICAgIGNhbGN1bGF0
ZU9mZnNldEFuZExlbmd0aChzdGFydCwgZW5kLCBtX3NpemUsICZvZmZzZXQsICZsZW5ndGgpOwot
ICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8c2hvcnQ+KGJ1ZmZlcigpLCBtX2J5dGVPZmZz
ZXQsICZvZmZzZXQsICZsZW5ndGgpOwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIG9mZnNl
dCwgbGVuZ3RoKTsKLX0KLQotdm9pZCBXZWJHTFNob3J0QXJyYXk6OnNldChXZWJHTFNob3J0QXJy
YXkqIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7Ci0gICAgc2V0
SW1wbChhcnJheSwgb2Zmc2V0ICogc2l6ZW9mKHNob3J0KSwgZWMpOworICAgIHJldHVybiBzbGlj
ZUltcGw8V2ViR0xTaG9ydEFycmF5PihzdGFydCwgZW5kKTsKIH0KIAogfQpJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5oCShyZXZpc2lvbiA1OTA4MikKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDU2ICsy
NiwzMSBAQAogI2lmbmRlZiBXZWJHTFNob3J0QXJyYXlfaAogI2RlZmluZSBXZWJHTFNob3J0QXJy
YXlfaAogCi0jaW5jbHVkZSAiV2ViR0xBcnJheS5oIgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlICJXZWJHTEludGVncmFsVHlwZWRBcnJh
eUJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFNob3J0QXJyYXkg
OiBwdWJsaWMgV2ViR0xBcnJheSB7Ci0gIHB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNTaG9y
dEFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorY2xhc3MgV2ViR0xBcnJheUJ1ZmZlcjsK
IAorY2xhc3MgV2ViR0xTaG9ydEFycmF5IDogcHVibGljIFdlYkdMSW50ZWdyYWxUeXBlZEFycmF5
QmFzZTxzaG9ydD4geworICBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaG9y
dEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJHTFNob3J0QXJyYXk+IGNyZWF0ZShzaG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaG9ydEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxX
ZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CiAKLSAgICBzaG9ydCogZGF0YSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0Kj4o
YmFzZUFkZHJlc3MoKSk7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKGludCBzdGFydCwgaW50IGVuZCk7Ci0KLSAgICB2
b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGlzbmFu
KHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKLSAgICAgICAgICAgIHZhbHVlID0gMDsKLSAgICAg
ICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpKQotICAgICAg
ICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWluKCk7Ci0gICAgICAg
IGVsc2UgaWYgKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1heCgpKQotICAg
ICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCk7Ci0gICAg
ICAgIHNob3J0KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8c2hvcnQqPihtX2Jhc2VBZGRyZXNzKTsK
LSAgICAgICAgc3RvcmFnZVtpbmRleF0gPSBzdGF0aWNfY2FzdDxzaG9ydD4odmFsdWUpOwotICAg
IH0KLQotICAgIC8vIEludm9rZWQgYnkgdGhlIGluZGV4ZWQgZ2V0dGVyLiBEb2VzIG5vdCBwZXJm
b3JtIHJhbmdlIGNoZWNrczsgY2FsbGVyCi0gICAgLy8gaXMgcmVzcG9uc2libGUgZm9yIGRvaW5n
IHNvIGFuZCByZXR1cm5pbmcgdW5kZWZpbmVkIGFzIG5lY2Vzc2FyeS4KLSAgICBzaG9ydCBpdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9z
aXplKTsKLSAgICAgICAgc2hvcnQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxzaG9ydCo+KG1fYmFz
ZUFkZHJlc3MpOwotICAgICAgICByZXR1cm4gc3RvcmFnZVtpbmRleF07Ci0gICAgfQotCi0gICAg
dm9pZCBzZXQoV2ViR0xTaG9ydEFycmF5KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJiBlYyk7CisgICAgdXNpbmcgV2ViR0xUeXBlZEFycmF5QmFzZTxzaG9ydD46OnNldDsK
KyAgICB1c2luZyBXZWJHTEludGVncmFsVHlwZWRBcnJheUJhc2U8c2hvcnQ+OjpzZXQ7CiAKICAg
cHJpdmF0ZToKLSAgICBXZWJHTFNob3J0QXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgdW5z
aWduZWQgbV9zaXplOworICAgIFdlYkdMU2hvcnRBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlC
dWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwK
KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAvLyBNYWtlIGNvbnN0
cnVjdG9yIHZpc2libGUgdG8gc3VwZXJjbGFzcy4KKyAgICBmcmllbmQgY2xhc3MgV2ViR0xUeXBl
ZEFycmF5QmFzZTxzaG9ydD47CisKKyAgICAvLyBPdmVycmlkZGVuIGZyb20gV2ViR0xBcnJheS4K
KyAgICB2aXJ0dWFsIGJvb2wgaXNTaG9ydEFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShpbnQgc3RhcnQsIGludCBl
bmQpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFR5cGVkQXJyYXlCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFR5cGVkQXJyYXlCYXNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVHlwZWRBcnJheUJhc2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdlYkdMVHlwZWRBcnJheUJhc2VfaAorI2RlZmlu
ZSBXZWJHTFR5cGVkQXJyYXlCYXNlX2gKKworI2luY2x1ZGUgIldlYkdMQXJyYXkuaCIKKyNpbmNs
dWRlICJXZWJHTEFycmF5QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXZWJHTFR5cGVkQXJyYXlCYXNlIDogcHVibGljIFdlYkdM
QXJyYXkgeworICBwdWJsaWM6CisgICAgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFQqPihiYXNlQWRkcmVzcygpKTsgfQorCisgICAgdm9pZCBzZXQoV2ViR0xUeXBlZEFycmF5
QmFzZTxUPiogYXJyYXksIHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAg
eworICAgICAgICBzZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBzaXplb2YoVCksIGVjKTsKKyAgICB9
CisKKyAgICAvLyBPdmVycmlkZGVuIGZyb20gV2ViR0xBcnJheS4gVGhpcyBtdXN0IGJlIHB1Ymxp
YyBiZWNhdXNlIG9mCisgICAgLy8gcnVsZXMgYWJvdXQgaW5oZXJpdGFuY2Ugb2YgbWVtYmVycyBp
biB0ZW1wbGF0ZSBjbGFzc2VzLCBhbmQKKyAgICAvLyBiZWNhdXNlIGl0IGlzIGFjY2Vzc2VkIHZp
YSBwb2ludGVycyB0byBzdWJjbGFzc2VzLgorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xlbmd0aDsKKyAgICB9CisKKyAgcHJvdGVj
dGVkOgorICAgIFdlYkdMVHlwZWRBcnJheUJhc2UoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVy
PiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAg
OiBXZWJHTEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCkKKyAgICAgICAgLCBtX2xlbmd0aChsZW5n
dGgpCisgICAgeworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBTdWJjbGFzcz4KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdWJjbGFzcz4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7
CisgICAgICAgIFJlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIgPSBXZWJHTEFycmF5QnVm
ZmVyOjpjcmVhdGUobGVuZ3RoLCBzaXplb2YoVCkpOworICAgICAgICByZXR1cm4gY3JlYXRlPFN1
YmNsYXNzPihidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNz
IFN1YmNsYXNzPgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN1YmNsYXNzPiBjcmVhdGUoVCogYXJy
YXksIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxTdWJjbGFzcz4gYSA9
IGNyZWF0ZTxTdWJjbGFzcz4obGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsKKyAgICAg
ICAgcmV0dXJuIGE7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGNsYXNzIFN1YmNsYXNzPgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN1YmNsYXNzPiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5
QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBieXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZm
ZXI+IGJ1ZihidWZmZXIpOworICAgICAgICBpZiAoIXZlcmlmeVN1YlJhbmdlPFQ+KGJ1ZiwgYnl0
ZU9mZnNldCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU3ViY2xhc3MoYnVmLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU3ViY2xhc3M+CisgICAgUGFzc1JlZlB0cjxTdWJjbGFz
cz4gc2xpY2VJbXBsKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIG9mZnNldCwgbGVuZ3RoOworICAgICAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgo
c3RhcnQsIGVuZCwgbV9sZW5ndGgsICZvZmZzZXQsICZsZW5ndGgpOworICAgICAgICBjbGFtcE9m
ZnNldEFuZE51bUVsZW1lbnRzPFQ+KGJ1ZmZlcigpLCBtX2J5dGVPZmZzZXQsICZvZmZzZXQsICZs
ZW5ndGgpOworICAgICAgICByZXR1cm4gY3JlYXRlPFN1YmNsYXNzPihidWZmZXIoKSwgb2Zmc2V0
LCBsZW5ndGgpOworICAgIH0KKworICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGhhdmUgdG8gYWNj
ZXNzIHRoaXMgdmlhIGEgdmlydHVhbCBmdW5jdGlvbiBpbiBzdWJjbGFzc2VzLAorICAgIC8vIHdo
aWNoIGlzIHdoeSBpdCBpcyBwcm90ZWN0ZWQgcmF0aGVyIHRoYW4gcHJpdmF0ZS4KKyAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKKworICBwcml2YXRlOgorICAgIC8vIE92ZXJyaWRkZW4gZnJvbSBXZWJH
TEFycmF5LgorICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9sZW5ndGggKiBzaXplb2YoVCk7CisgICAgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViR0xUeXBlZEFycmF5QmFzZV9oCkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAJKHJl
dmlzaW9uIDU5MDgyKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNjAgKzI4LDMzIEBACiAKICNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQogCi0jaW5jbHVkZSAiV2ViR0xBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIldl
YkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVm
UHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0
ZSh1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZl
ciA9IFdlYkdMQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1bnNpZ25lZCBjaGFy
KSk7Ci0gICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgcmV0dXJuIFdl
YkdMVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgY2hhcj46OmNyZWF0ZTxXZWJHTFVuc2lnbmVkQnl0
ZUFycmF5PihsZW5ndGgpOwogfQogCiBQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+
IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBjaGFyKiBhcnJheSwgdW5z
aWduZWQgbGVuZ3RoKQogewotICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBhID0g
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKGxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBhLT5zZXQoaSwgYXJyYXlbaV0pOwot
ICAgIHJldHVybiBhOworICAgIHJldHVybiBXZWJHTFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGNo
YXI+OjpjcmVhdGU8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4oYXJyYXksIGxlbmd0aCk7CiB9CiAK
LVBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eTo6Y3JlYXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKK1Bhc3NSZWZQ
dHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRl
KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1Zihi
dWZmZXIpOwotICAgIGlmICghdmVyaWZ5U3ViUmFuZ2U8dW5zaWduZWQgY2hhcj4oYnVmLCBieXRl
T2Zmc2V0LCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheShidWYsIGJ5dGVPZmZzZXQsIGxlbmd0aCkpOwor
ICAgIHJldHVybiBXZWJHTFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGNoYXI+OjpjcmVhdGU8V2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheT4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpOwogfQogCiBX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KFBhc3NSZWZQdHI8
V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgICAgIDogV2ViR0xBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQpCi0gICAgICAg
ICwgbV9zaXplKGxlbmd0aCkKKyAgICA6IFdlYkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1bnNp
Z25lZCBjaGFyPihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCkKIHsKIH0KIAotdW5zaWduZWQg
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6bGVuZ3RoKCkgY29uc3QgewotICAgIHJldHVybiBtX3Np
emU7Ci19Ci0KLXVuc2lnbmVkIFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmJ5dGVMZW5ndGgoKSBj
b25zdCB7Ci0gICAgcmV0dXJuIG1fc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKLX0KLQot
UGFzc1JlZlB0cjxXZWJHTEFycmF5PiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpzbGljZShpbnQg
c3RhcnQsIGludCBlbmQpCitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRl
QXJyYXk6OnNsaWNlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBv
ZmZzZXQsIGxlbmd0aDsKLSAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwg
bV9zaXplLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKLSAgICBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRz
PHVuc2lnbmVkIGNoYXI+KGJ1ZmZlcigpLCBtX2J5dGVPZmZzZXQsICZvZmZzZXQsICZsZW5ndGgp
OwotICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIG9mZnNldCwgbGVuZ3RoKTsKLX0KLQotdm9p
ZCBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpzZXQoV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSogYXJy
YXksIHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsKLSAgICBzZXRJbXBsKGFy
cmF5LCBvZmZzZXQgKiBzaXplb2YodW5zaWduZWQgY2hhciksIGVjKTsKKyAgICByZXR1cm4gc2xp
Y2VJbXBsPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+KHN0YXJ0LCBlbmQpOwogfQogCiB9CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaAkocmV2aXNp
b24gNTkwODIpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNTYgKzI3LDMxIEBACiAjaWZuZGVmIFdlYkdMVW5zaWdu
ZWRCeXRlQXJyYXlfaAogI2RlZmluZSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5X2gKIAotI2luY2x1
ZGUgIldlYkdMQXJyYXkuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSAiV2ViR0xJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSA6IHB1Ymxp
YyBXZWJHTEFycmF5IHsKLSAgcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkQnl0
ZUFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorY2xhc3MgV2ViR0xBcnJheUJ1ZmZlcjsK
IAorY2xhc3MgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSA6IHB1YmxpYyBXZWJHTEludGVncmFsVHlw
ZWRBcnJheUJhc2U8dW5zaWduZWQgY2hhcj4geworICBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2ln
bmVkIGNoYXIqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZm
ZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAg
IHVuc2lnbmVkIGNoYXIqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oYmFzZUFkZHJlc3MoKSk7IH0KLQotICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKGludCBzdGFydCwgaW50IGVuZCk7Ci0KLSAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGlz
bmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKLSAgICAgICAgICAgIHZhbHVlID0gMDsKLSAg
ICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPjo6bWlu
KCkpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hh
cj46Om1pbigpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQgY2hhcj46Om1heCgpKQotICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkIGNoYXI+OjptYXgoKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciogc3Rv
cmFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtX2Jhc2VBZGRyZXNzKTsKLSAgICAg
ICAgc3RvcmFnZVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih2YWx1ZSk7Ci0g
ICAgfQotCi0gICAgLy8gSW52b2tlZCBieSB0aGUgaW5kZXhlZCBnZXR0ZXIuIERvZXMgbm90IHBl
cmZvcm0gcmFuZ2UgY2hlY2tzOyBjYWxsZXIKLSAgICAvLyBpcyByZXNwb25zaWJsZSBmb3IgZG9p
bmcgc28gYW5kIHJldHVybmluZyB1bmRlZmluZWQgYXMgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVk
IGNoYXIgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChp
bmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHN0b3JhZ2UgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4obV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgIHJldHVybiBzdG9y
YWdlW2luZGV4XTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldChXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
KiBhcnJheSwgdW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgdXNpbmcg
V2ViR0xUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBjaGFyPjo6c2V0OworICAgIHVzaW5nIFdlYkdM
SW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBjaGFyPjo6c2V0OwogCiAgIHByaXZhdGU6
Ci0gICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+
IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB1bnNp
Z25lZCBtX3NpemU7CisgICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheShQYXNzUmVmUHRyPFdlYkdM
QXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgp
OworICAgIC8vIE1ha2UgY29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgorICAgIGZy
aWVuZCBjbGFzcyBXZWJHTFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGNoYXI+OworCisgICAgLy8g
T3ZlcnJpZGRlbiBmcm9tIFdlYkdMQXJyYXkuCisgICAgdmlydHVhbCBib29sIGlzVW5zaWduZWRC
eXRlQXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkdMQXJyYXk+IHNsaWNlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWdu
ZWRJbnRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVu
c2lnbmVkSW50QXJyYXkuY3BwCShyZXZpc2lvbiA1OTA4MikKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNjAgKzI4
LDMzIEBACiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCi0jaW5jbHVkZSAiV2ViR0xBcnJheUJ1
ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMVW5zaWduZWRJbnRBcnJheS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEludEFycmF5PiBXZWJHTFVuc2ln
bmVkSW50QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgUmVmUHRyPFdlYkdM
QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IFdlYkdMQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIHNp
emVvZih1bnNpZ25lZCBpbnQpKTsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3Ro
KTsKKyAgICByZXR1cm4gV2ViR0xUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBpbnQ+OjpjcmVhdGU8
V2ViR0xVbnNpZ25lZEludEFycmF5PihsZW5ndGgpOwogfQogCiBQYXNzUmVmUHRyPFdlYkdMVW5z
aWduZWRJbnRBcnJheT4gV2ViR0xVbnNpZ25lZEludEFycmF5OjpjcmVhdGUodW5zaWduZWQgaW50
KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkSW50
QXJyYXk+IGEgPSBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmNyZWF0ZShsZW5ndGgpOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgYS0+c2V0KGksIGFy
cmF5W2ldKTsKLSAgICByZXR1cm4gYTsKKyAgICByZXR1cm4gV2ViR0xUeXBlZEFycmF5QmFzZTx1
bnNpZ25lZCBpbnQ+OjpjcmVhdGU8V2ViR0xVbnNpZ25lZEludEFycmF5PihhcnJheSwgbGVuZ3Ro
KTsKIH0KIAotUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkSW50QXJyYXk+IFdlYkdMVW5zaWduZWRJ
bnRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQorUGFzc1Jl
ZlB0cjxXZWJHTFVuc2lnbmVkSW50QXJyYXk+IFdlYkdMVW5zaWduZWRJbnRBcnJheTo6Y3JlYXRl
KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1Zihi
dWZmZXIpOwotICAgIGlmICghdmVyaWZ5U3ViUmFuZ2U8dW5zaWduZWQgaW50PihidWYsIGJ5dGVP
ZmZzZXQsIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJHTFVuc2lnbmVkSW50QXJyYXkoYnVmLCBieXRlT2Zmc2V0LCBsZW5ndGgpKTsKKyAg
ICByZXR1cm4gV2ViR0xUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBpbnQ+OjpjcmVhdGU8V2ViR0xV
bnNpZ25lZEludEFycmF5PihidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7CiB9CiAKIFdlYkdM
VW5zaWduZWRJbnRBcnJheTo6V2ViR0xVbnNpZ25lZEludEFycmF5KFBhc3NSZWZQdHI8V2ViR0xB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
Ci0gICAgICAgIDogV2ViR0xBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQpCi0gICAgICAgICwgbV9z
aXplKGxlbmd0aCkKKyAgICA6IFdlYkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBp
bnQ+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKQogewogfQogCi11bnNpZ25lZCBXZWJHTFVu
c2lnbmVkSW50QXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKLSAgICByZXR1cm4gbV9zaXplOwotfQot
Ci11bnNpZ25lZCBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmJ5dGVMZW5ndGgoKSBjb25zdCB7Ci0g
ICAgcmV0dXJuIG1fc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotfQotCi1QYXNzUmVmUHRy
PFdlYkdMQXJyYXk+IFdlYkdMVW5zaWduZWRJbnRBcnJheTo6c2xpY2UoaW50IHN0YXJ0LCBpbnQg
ZW5kKQorUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OnNsaWNl
KGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0
aDsKLSAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbV9zaXplLCAmb2Zm
c2V0LCAmbGVuZ3RoKTsKLSAgICBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzPHVuc2lnbmVkIGlu
dD4oYnVmZmVyKCksIG1fYnl0ZU9mZnNldCwgJm9mZnNldCwgJmxlbmd0aCk7Ci0gICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIoKSwgb2Zmc2V0LCBsZW5ndGgpOwotfQotCi12b2lkIFdlYkdMVW5zaWdu
ZWRJbnRBcnJheTo6c2V0KFdlYkdMVW5zaWduZWRJbnRBcnJheSogYXJyYXksIHVuc2lnbmVkIG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsKLSAgICBzZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBz
aXplb2YodW5zaWduZWQgaW50KSwgZWMpOworICAgIHJldHVybiBzbGljZUltcGw8V2ViR0xVbnNp
Z25lZEludEFycmF5PihzdGFydCwgZW5kKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5oCShyZXZpc2lvbiA1OTA4MikKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDU2ICsyNywzMSBAQAogI2lmbmRlZiBXZWJHTFVuc2lnbmVkSW50QXJyYXlfaAogI2RlZmlu
ZSBXZWJHTFVuc2lnbmVkSW50QXJyYXlfaAogCi0jaW5jbHVkZSAiV2ViR0xBcnJheS5oIgotI2lu
Y2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlICJX
ZWJHTEludGVncmFsVHlwZWRBcnJheUJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBXZWJHTFVuc2lnbmVkSW50QXJyYXkgOiBwdWJsaWMgV2ViR0xBcnJheSB7Ci0gIHB1Ymxp
YzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludEFycmF5KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorY2xhc3MgV2ViR0xBcnJheUJ1ZmZlcjsKIAorY2xhc3MgV2ViR0xVbnNpZ25lZElu
dEFycmF5IDogcHVibGljIFdlYkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1bnNpZ25lZCBpbnQ+
IHsKKyAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRJbnRBcnJh
eT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xV
bnNpZ25lZEludEFycmF5PiBjcmVhdGUodW5zaWduZWQgaW50KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkSW50QXJyYXk+IGNyZWF0
ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIHVuc2lnbmVkIGludCogZGF0YSgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludCo+KGJhc2VBZGRyZXNzKCkpOyB9Ci0KLSAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxl
bmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShp
bnQgc3RhcnQsIGludCBlbmQpOwotCi0gICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJs
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCi0g
ICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgIGlmICh2YWx1ZSA8IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQgaW50Pjo6bWluKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWluKCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVl
ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKLSAgICAgICAgICAg
IHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKTsKLSAgICAg
ICAgdW5zaWduZWQgaW50KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obV9i
YXNlQWRkcmVzcyk7Ci0gICAgICAgIHN0b3JhZ2VbaW5kZXhdID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gSW52b2tlZCBieSB0aGUgaW5kZXhlZCBn
ZXR0ZXIuIERvZXMgbm90IHBlcmZvcm0gcmFuZ2UgY2hlY2tzOyBjYWxsZXIKLSAgICAvLyBpcyBy
ZXNwb25zaWJsZSBmb3IgZG9pbmcgc28gYW5kIHJldHVybmluZyB1bmRlZmluZWQgYXMgbmVjZXNz
YXJ5LgotICAgIHVuc2lnbmVkIGludCBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICAgICAgdW5zaWduZWQgaW50KiBz
dG9yYWdlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4obV9iYXNlQWRkcmVzcyk7Ci0gICAg
ICAgIHJldHVybiBzdG9yYWdlW2luZGV4XTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldChXZWJHTFVu
c2lnbmVkSW50QXJyYXkqIGFycmF5LCB1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KTsKKyAgICB1c2luZyBXZWJHTFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIGludD46OnNldDsKKyAg
ICB1c2luZyBXZWJHTEludGVncmFsVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgaW50Pjo6c2V0Owog
CiAgIHByaXZhdGU6Ci0gICAgV2ViR0xVbnNpZ25lZEludEFycmF5KFBhc3NSZWZQdHI8V2ViR0xB
cnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OwotICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICBXZWJHTFVuc2lnbmVkSW50QXJyYXkoUGFzc1Jl
ZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGJ5dGVPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgLy8gTWFrZSBjb25zdHJ1Y3RvciB2aXNpYmxlIHRvIHN1cGVyY2xhc3Mu
CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgaW50PjsKKwor
ICAgIC8vIE92ZXJyaWRkZW4gZnJvbSBXZWJHTEFycmF5LgorICAgIHZpcnR1YWwgYm9vbCBpc1Vu
c2lnbmVkSW50QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3Q7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VW5zaWduZWRTaG9ydEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcAkocmV2aXNpb24gNTkwODIpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNjIgKzI4LDMzIEBACiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCi0jaW5jbHVkZSAi
V2ViR0xBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIldlYkdMVW5zaWduZWRTaG9ydEFycmF5Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkU2hvcnRB
cnJheT4gV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCiB7
Ci0gICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IFdlYkdMQXJyYXlCdWZmZXI6
OmNyZWF0ZShsZW5ndGgsIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOwotICAgIHJldHVybiBjcmVh
dGUoYnVmZmVyLCAwLCBsZW5ndGgpOworICAgIHJldHVybiBXZWJHTFR5cGVkQXJyYXlCYXNlPHVu
c2lnbmVkIHNob3J0Pjo6Y3JlYXRlPFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PihsZW5ndGgpOwog
fQogCiBQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PiBXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIHNob3J0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQog
ewotICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4gYSA9IFdlYkdMVW5zaWduZWRT
aG9ydEFycmF5OjpjcmVhdGUobGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCi0gICAgICAgIGEtPnNldChpLCBhcnJheVtpXSk7Ci0gICAgcmV0dXJuIGE7
CisgICAgcmV0dXJuIFdlYkdMVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgc2hvcnQ+OjpjcmVhdGU8
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+KGFycmF5LCBsZW5ndGgpOwogfQogCi1QYXNzUmVmUHRy
PFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PiBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6Y3JlYXRl
KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBieXRlT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpCitQYXNzUmVmUHRyPFdl
YkdMVW5zaWduZWRTaG9ydEFycmF5PiBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6Y3JlYXRlKFBh
c3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBieXRlT2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZihidWZm
ZXIpOwotICAgIGlmICghdmVyaWZ5U3ViUmFuZ2U8dW5zaWduZWQgc2hvcnQ+KGJ1ZiwgYnl0ZU9m
ZnNldCwgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KGJ1ZiwgYnl0ZU9mZnNldCwgbGVuZ3RoKSk7Cisg
ICAgcmV0dXJuIFdlYkdMVHlwZWRBcnJheUJhc2U8dW5zaWduZWQgc2hvcnQ+OjpjcmVhdGU8V2Vi
R0xVbnNpZ25lZFNob3J0QXJyYXk+KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTsKIH0KIAot
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OldlYkdMVW5zaWduZWRTaG9ydEFycmF5KFBhc3NSZWZQ
dHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVPZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQotICAg
ICAgICA6IFdlYkdMQXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0KQotICAgICAgICAsIG1fc2l6ZShs
ZW5ndGgpCitXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6V2ViR0xVbnNpZ25lZFNob3J0QXJyYXko
UGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVkIGJ5dGVPZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IFdlYkdMSW50ZWdyYWxUeXBlZEFycmF5QmFzZTx1bnNp
Z25lZCBzaG9ydD4oYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpCiB7CiB9CiAKLXVuc2lnbmVk
IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpsZW5ndGgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIG1f
c2l6ZTsKLX0KLQotdW5zaWduZWQgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OmJ5dGVMZW5ndGgo
KSBjb25zdCB7Ci0gICAgcmV0dXJuIG1fc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7Ci19
Ci0KLVBhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OnNsaWNl
KGludCBzdGFydCwgaW50IGVuZCkKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXk6OnNsaWNlKGludCBzdGFydCwgaW50IGVuZCkgY29uc3QKIHsKLSAgICB1bnNp
Z25lZCBvZmZzZXQsIGxlbmd0aDsKLSAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQs
IGVuZCwgbV9zaXplLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKLSAgICBjbGFtcE9mZnNldEFuZE51bUVs
ZW1lbnRzPHVuc2lnbmVkIHNob3J0PihidWZmZXIoKSwgbV9ieXRlT2Zmc2V0LCAmb2Zmc2V0LCAm
bGVuZ3RoKTsKLSAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBvZmZzZXQsIGxlbmd0aCk7Ci19
Ci0KLXZvaWQgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OnNldChXZWJHTFVuc2lnbmVkU2hvcnRB
cnJheSogYXJyYXksIHVuc2lnbmVkIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsKLSAgICBz
ZXRJbXBsKGFycmF5LCBvZmZzZXQgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpLCBlYyk7CisgICAg
cmV0dXJuIHNsaWNlSW1wbDxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4oc3RhcnQsIGVuZCk7CiB9
CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFy
cmF5LmgJKHJldmlzaW9uIDU5MDgyKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2ln
bmVkU2hvcnRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw1NiArMjcsMzEgQEAKICNpZm5k
ZWYgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlfaAogI2RlZmluZSBXZWJHTFVuc2lnbmVkU2hvcnRB
cnJheV9oCiAKLSNpbmNsdWRlICJXZWJHTEFycmF5LmgiCi0jaW5jbHVkZSA8bGltaXRzPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgIldlYkdMSW50ZWdyYWxUeXBlZEFy
cmF5QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMVW5zaWduZWRT
aG9ydEFycmF5IDogcHVibGljIFdlYkdMQXJyYXkgewotICBwdWJsaWM6Ci0gICAgdmlydHVhbCBi
b29sIGlzVW5zaWduZWRTaG9ydEFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorY2xhc3Mg
V2ViR0xBcnJheUJ1ZmZlcjsKIAorY2xhc3MgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgOiBwdWJs
aWMgV2ViR0xJbnRlZ3JhbFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIHNob3J0PiB7CisgIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4gY3JlYXRl
KHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBzaG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+IGNyZWF0ZShQ
YXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgdW5zaWduZWQgYnl0ZU9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKIAotICAgIHVuc2lnbmVkIHNob3J0KiBkYXRhKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihiYXNlQWRkcmVzcygpKTsgfQotCi0gICAgdmly
dHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVM
ZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2Uo
aW50IHN0YXJ0LCBpbnQgZW5kKTsKLQotICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3Vi
bGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8gMAot
ICAgICAgICAgICAgdmFsdWUgPSAwOwotICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWluKCkpCi0gICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptaW4oKTsKLSAgICAgICAgZWxzZSBpZiAo
dmFsdWUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpCi0gICAg
ICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptYXgo
KTsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydCo+KG1fYmFzZUFkZHJlc3MpOwotICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0Pih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gSW52b2tlZCBi
eSB0aGUgaW5kZXhlZCBnZXR0ZXIuIERvZXMgbm90IHBlcmZvcm0gcmFuZ2UgY2hlY2tzOyBjYWxs
ZXIKLSAgICAvLyBpcyByZXNwb25zaWJsZSBmb3IgZG9pbmcgc28gYW5kIHJldHVybmluZyB1bmRl
ZmluZWQgYXMgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIHNob3J0IGl0ZW0odW5zaWduZWQgaW5k
ZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgICAg
ICB1bnNpZ25lZCBzaG9ydCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4o
bV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgIHJldHVybiBzdG9yYWdlW2luZGV4XTsKLSAgICB9Ci0K
LSAgICB2b2lkIHNldChXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSogYXJyYXksIHVuc2lnbmVkIG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgIHVzaW5nIFdlYkdMVHlwZWRBcnJheUJhc2U8
dW5zaWduZWQgc2hvcnQ+OjpzZXQ7CisgICAgdXNpbmcgV2ViR0xJbnRlZ3JhbFR5cGVkQXJyYXlC
YXNlPHVuc2lnbmVkIHNob3J0Pjo6c2V0OwogCiAgIHByaXZhdGU6Ci0gICAgV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIHVuc2lnbmVk
IGJ5dGVPZmZzZXQsdW5zaWduZWQgbGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBtX3NpemU7CisgICAg
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpOworICAgIC8vIE1ha2Ug
Y29uc3RydWN0b3IgdmlzaWJsZSB0byBzdXBlcmNsYXNzLgorICAgIGZyaWVuZCBjbGFzcyBXZWJH
TFR5cGVkQXJyYXlCYXNlPHVuc2lnbmVkIHNob3J0PjsKKworICAgIC8vIE92ZXJyaWRkZW4gZnJv
bSBXZWJHTEFycmF5LgorICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkU2hvcnRBcnJheSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4g
c2xpY2UoaW50IHN0YXJ0LCBpbnQgZW5kKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>
<flag name="review"
          id="39779"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="39780"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>