<?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>23576</bug_id>
          
          <creation_ts>2009-01-27 14:43:40 -0800</creation_ts>
          <short_desc>Move m_continuation out of RenderFlow</short_desc>
          <delta_ts>2009-01-28 09:31:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107261</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-27 14:43:40 -0800</bug_when>
    <thetext>Move m_continuation out of RenderFlow and into RenderBlock and RenderInline.  This is more work towards eventually removing RenderFlow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107262</commentid>
    <comment_count>1</comment_count>
      <attachid>27088</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-27 14:44:14 -0800</bug_when>
    <thetext>Created attachment 27088
Patch to remove continuation member from RenderFlow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107266</commentid>
    <comment_count>2</comment_count>
      <attachid>27088</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-27 14:55:26 -0800</bug_when>
    <thetext>Comment on attachment 27088
Patch to remove continuation member from RenderFlow

Minusing. Improved patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107281</commentid>
    <comment_count>3</comment_count>
      <attachid>27092</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-27 17:31:11 -0800</bug_when>
    <thetext>Created attachment 27092
Patch that shrinks RenderInline/Block by 4 bytes! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107286</commentid>
    <comment_count>4</comment_count>
      <attachid>27092</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-01-27 20:56:39 -0800</bug_when>
    <thetext>Comment on attachment 27092
Patch that shrinks RenderInline/Block by 4 bytes! :)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107338</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-28 09:31:10 -0800</bug_when>
    <thetext>Fixed in r40312.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27088</attachid>
            <date>2009-01-27 14:44:14 -0800</date>
            <delta_ts>2009-01-27 14:55:39 -0800</delta_ts>
            <desc>Patch to remove continuation member from RenderFlow</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>55796</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwMzAx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODggQEAKKzIwMDktMDEt
MjcgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIE1vcmUgd29yayB0
b3dhcmRzIGVsaW1pbmF0aW5nIHRoZSBSZW5kZXJGbG93IGNsYXNzLiAgTW92ZSB0aGUgbV9jb250
aW51YXRpb24gbWVtYmVyIHZhcmlhYmxlIG91dCBvZiBSZW5kZXJGbG93IGFuZCBwdXNoIGl0IGRv
d24gaW50byBSZW5kZXJJbmxpbmUgYW5kIFJlbmRlckJsb2NrLgorICAgICAgICBSZW1vdmUgYWxs
IG1lbnRpb24gb2YgY29udGludWF0aW9ucyBmcm9tIGV2ZXJ5d2hlcmUgZXhjZXB0IGZvciBSZW5k
ZXJGbG93LCBSZW5kZXJJbmxpbmUgYW5kIFJlbmRlckJveC4gIFJlbmRlckZsb3cgc3RpbGwgaGVh
dmlseSByZWZlcmVuY2VzIGNvbnRpbnVhdGlvbnMsIHNpbmNlCisgICAgICAgIHRoZSBhZGRDaGls
ZCBjb2RlIGhhcyBub3QgYmVlbiBtb3ZlZCBkb3duIGludG8gc3ViY2xhc3NlcyB5ZXQuICBUaGF0
IHJlZmFjdG9yaW5nIHdpbGwgYmUgdmVyeSB0cmlja3ksIGFuZCBzbyBpdCB3aWxsIGJlIHNhdmVk
IGZvciBhIHNlcGFyYXRlIHBhdGNoLgorICAgIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUpOgorICAg
ICAgICAqIHBhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphbmNob3JFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kaW5nQm94UmVjdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lRmxvd0JveDo6ZGV0ZXJtaW5lU3BhY2luZ0ZvckZsb3dCb3hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpSZW5kZXJCbG9jayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGVzdHJveSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRD
b250aW51YXRpb25XaXRoT3V0bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
YWJzb2x1dGVSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWJzb2x1dGVR
dWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVjdFdpdGhPdXRsaW5lRm9y
UmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aG92ZXJBbmNlc3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlRHJhZ1N0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpvdXRsaW5lU3R5bGVGb3JSZXBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGlsZEJlY2FtZU5vbklubGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlSGl0VGVzdFJlc3VsdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
aW5saW5lQ29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRJ
bmxpbmVDb250aW51YXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphYnNvbHV0ZVJlY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6YWJzb2x1dGVRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNoaWxkQmVjYW1lTm9uSW5saW5lKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckNvbnRhaW5lcjo6dXBkYXRlQmVmb3JlQWZ0ZXJDb250ZW50Rm9yQ29udGFpbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvbnRhaW5lcjo6cmVtb3ZlTGVmdG92ZXJBbm9u
eW1vdXNCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bmV4dENvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bG93Ojpjb250aW51YXRpb25CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6
YWRkQ2hpbGRXaXRoQ29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6
OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OmRlc3Ryb3kpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJGbG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93OjpS
ZW5kZXJGbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6UmVuZGVySW5saW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcklubGluZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6OmlubGluZUNvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWRkQ2hp
bGRUb0Zsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpjbG9uZUlubGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbmxpbmU6OnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW5saW5lOjpyZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcklubGluZTo6dXBkYXRlRHJhZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6Y2hpbGRCZWNhbWVOb25JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW5saW5lOjp1cGRhdGVIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNvbnRpbnVhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNldENvbnRpbnVhdGlvbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6cmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmhhbmRsZUR5bmFtaWNGbG9hdFBvc2l0aW9uQ2hhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6dXBkYXRlRHJhZ1N0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6dXBkYXRlSGl0VGVzdFJlc3VsdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sb3JzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3cp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6aXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0Ojppc0lubGluZUNvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmhvdmVyQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpvdXRsaW5lU3R5bGVGb3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojp1cGRhdGVIaXRU
ZXN0UmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorCiAyMDA5LTAx
LTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmUgSHlhdHQKSW5kZXg6IGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDMwMSkK
KysrIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTQg
KzExMSwxMCBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBCZWZvcmUgY2FsbGluZyBhYnNvbHV0ZVJl
Y3RzLCBjaGVjayBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSByZW5kZXJlcgotICAgIC8v
IG9yIG9uZSBvZiB0aGUgY29udGludWF0aW9ucyBpcyBub24tZW1wdHksIHNpbmNlIHRoaXMgaXMg
YSBmYXN0ZXIgY2hlY2sgYW5kCi0gICAgLy8gYWxtb3N0IGFsd2F5cyByZXR1cm5zIHRydWUuCisg
ICAgLy8gaXMgbm9uLWVtcHR5LCBzaW5jZSB0aGlzIGlzIGEgZmFzdGVyIGNoZWNrIGFuZCBhbG1v
c3QgYWx3YXlzIHJldHVybnMgdHJ1ZS4KICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94
KHJlbmRlcmVyKCkpOwogICAgIGlmICghYm94LT5ib3JkZXJCb3VuZGluZ0JveCgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZm9yIChSZW5kZXJGbG93KiByID0gYm94LT52
aXJ0dWFsQ29udGludWF0aW9uKCk7IHI7IHIgPSByLT5jb250aW51YXRpb24oKSkKLSAgICAgICAg
aWYgKCFyLT5ib3JkZXJCb3VuZGluZ0JveCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwogICAgIEZsb2F0UG9pbnQgYWJz
UG9zID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlKCk7CkluZGV4OiBwYWdlL0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDQwMzAxKQorKysgcGFnZS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUg
IlJlbmRlckZpZWxkc2V0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKQEAgLTQ3MCw5ICs0NzEsMTEgQEAgRWxlbWVudCog
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YW5jaAogICAgIAogICAgIC8vIFNlYXJjaCB1cCB0
aGUgcmVuZGVyIHRyZWUgZm9yIGEgUmVuZGVyT2JqZWN0IHdpdGggYSBET00gbm9kZS4gIERlZmVy
IHRvIGFuIGVhcmxpZXIgY29udGludWF0aW9uLCB0aG91Z2guCiAgICAgZm9yIChjdXJyUmVuZGVy
ZXIgPSBtX3JlbmRlcmVyOyBjdXJyUmVuZGVyZXIgJiYgIWN1cnJSZW5kZXJlci0+ZWxlbWVudCgp
OyBjdXJyUmVuZGVyZXIgPSBjdXJyUmVuZGVyZXItPnBhcmVudCgpKSB7Ci0gICAgICAgIFJlbmRl
ckZsb3cqIGNvbnRpbnVhdGlvbiA9IGN1cnJSZW5kZXJlci0+dmlydHVhbENvbnRpbnVhdGlvbigp
OwotICAgICAgICBpZiAoY29udGludWF0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGNhY2hlLT5n
ZXQoY29udGludWF0aW9uKS0+YW5jaG9yRWxlbWVudCgpOworICAgICAgICBpZiAoY3VyclJlbmRl
cmVyLT5pc1JlbmRlckJsb2NrKCkpIHsKKyAgICAgICAgICAgIFJlbmRlcklubGluZSogY29udGlu
dWF0aW9uID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjdXJyUmVuZGVyZXIpLT5pbmxpbmVD
b250aW51YXRpb24oKTsKKyAgICAgICAgICAgIGlmIChjb250aW51YXRpb24pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNhY2hlLT5nZXQoY29udGludWF0aW9uKS0+YW5jaG9yRWxlbWVudCgpOwor
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8vIGJhaWwgaWYgbm9uZSBmb3VuZApAQCAtOTQ0
LDcgKzk0Nyw3IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmQKICAg
ICBpZiAoIW9iaikKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKICAgICAKLSAgICBpZiAob2Jq
LT5pc0lubGluZUNvbnRpbnVhdGlvbigpKQorICAgIGlmIChvYmotPmVsZW1lbnQoKSkgLy8gSWYg
d2UgYXJlIGEgY29udGludWF0aW9uLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0byB1c2UgdGhlIHBy
aW1hcnkgcmVuZGVyZXIuCiAgICAgICAgIG9iaiA9IG9iai0+ZWxlbWVudCgpLT5yZW5kZXJlcigp
OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0
cmFuc2Zvcm1zLgpJbmRleDogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gNDAzMDEpCisrKyByZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNp
bmNsdWRlICJSZW5kZXJGbG93LmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2lu
Y2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKQEAgLTI0NywxMyArMjQ4LDE0IEBAIHZvaWQgSW5saW5l
Rmxvd0JveDo6ZGV0ZXJtaW5lU3BhY2luZ0ZvckYKICAgICAgICAgLy8gKDMpIFRoZSBsaW5lIG1h
eSBlbmQgb24gdGhlIGlubGluZS4gIElmIHdlIGFyZSB0aGUgbGFzdCBjaGlsZCAoY2xpbWJpbmcg
dXAKICAgICAgICAgLy8gdGhlIGVuZCBvYmplY3QncyBjaGFpbiksIHRoZW4gd2UganVzdCBjbG9z
ZWQgYXMgd2VsbC4KICAgICAgICAgaWYgKCFmbG93LT5sYXN0TGluZUJveCgpLT5pc0NvbnN0cnVj
dGVkKCkpIHsKKyAgICAgICAgICAgIFJlbmRlcklubGluZSogaW5saW5lRmxvdyA9IHN0YXRpY19j
YXN0PFJlbmRlcklubGluZSo+KGZsb3cpOwogICAgICAgICAgICAgaWYgKGx0cikgewogICAgICAg
ICAgICAgICAgIGlmICghbmV4dExpbmVCb3goKSAmJgotICAgICAgICAgICAgICAgICAgICAoKGxh
c3RMaW5lICYmICFmbG93LT5jb250aW51YXRpb24oKSkgfHwgbmV4dE9uTGluZUV4aXN0cygpIHx8
IG9uRW5kQ2hhaW4oZW5kT2JqZWN0KSkpCisgICAgICAgICAgICAgICAgICAgICgobGFzdExpbmUg
JiYgIWlubGluZUZsb3ctPmNvbnRpbnVhdGlvbigpKSB8fCBuZXh0T25MaW5lRXhpc3RzKCkgfHwg
b25FbmRDaGFpbihlbmRPYmplY3QpKSkKICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZVJpZ2h0
RWRnZSA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmICgo
IXByZXZMaW5lQm94KCkgfHwgcHJldkxpbmVCb3goKS0+aXNDb25zdHJ1Y3RlZCgpKSAmJgotICAg
ICAgICAgICAgICAgICAgICAoKGxhc3RMaW5lICYmICFmbG93LT5jb250aW51YXRpb24oKSkgfHwg
cHJldk9uTGluZUV4aXN0cygpIHx8IG9uRW5kQ2hhaW4oZW5kT2JqZWN0KSkpCisgICAgICAgICAg
ICAgICAgICAgICgobGFzdExpbmUgJiYgIWlubGluZUZsb3ctPmNvbnRpbnVhdGlvbigpKSB8fCBw
cmV2T25MaW5lRXhpc3RzKCkgfHwgb25FbmRDaGFpbihlbmRPYmplY3QpKSkKICAgICAgICAgICAg
ICAgICAgICAgaW5jbHVkZUxlZnRFZGdlID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtNjI1LDEyICs2MjcsMTMgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludChSZW5kZXJP
YmplY3Q6OgogICAgICAgICAgICAgLy8gQWRkIG91cnNlbHZlcyB0byB0aGUgcGFpbnQgaW5mbyBz
dHJ1Y3QncyBsaXN0IG9mIGlubGluZXMgdGhhdCBuZWVkIHRvIHBhaW50IHRoZWlyCiAgICAgICAg
ICAgICAvLyBvdXRsaW5lcy4KICAgICAgICAgICAgIGlmIChvYmplY3QoKS0+c3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUgJiYgb2JqZWN0KCktPmhhc091dGxpbmUoKSAmJiAhaXNSb290
SW5saW5lQm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGZsb3dPYmplY3QoKS0+Y29udGlu
dWF0aW9uKCkgfHwgb2JqZWN0KCktPmlzSW5saW5lQ29udGludWF0aW9uKCkpICYmICFvYmplY3Qo
KS0+aGFzTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIFJlbmRlcklubGluZSogaW5saW5lRmxv
dyA9IHN0YXRpY19jYXN0PFJlbmRlcklubGluZSo+KG9iamVjdCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoKGlubGluZUZsb3ctPmNvbnRpbnVhdGlvbigpIHx8IGlubGluZUZsb3ctPmlzSW5saW5l
Q29udGludWF0aW9uKCkpICYmICFvYmplY3QoKS0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAg
ICAgICAgICAvLyBBZGQgb3Vyc2VsdmVzIHRvIHRoZSBjb250YWluaW5nIGJsb2NrIG9mIHRoZSBl
bnRpcmUgY29udGludWF0aW9uIHNvIHRoYXQgaXQgY2FuCiAgICAgICAgICAgICAgICAgICAgIC8v
IHBhaW50IHVzIGF0b21pY2FsbHkuCiAgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBi
bG9jayA9IG9iamVjdCgpLT5jb250YWluaW5nQmxvY2soKS0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hZGRDb250aW51YXRpb25XaXRoT3V0bGluZShzdGF0
aWNfY2FzdDxSZW5kZXJGbG93Kj4ob2JqZWN0KCktPmVsZW1lbnQoKS0+cmVuZGVyZXIoKSkpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9iamVjdCgpLT5pc0lubGluZUNvbnRpbnVhdGlv
bigpKQorICAgICAgICAgICAgICAgICAgICBibG9jay0+YWRkQ29udGludWF0aW9uV2l0aE91dGxp
bmUoc3RhdGljX2Nhc3Q8UmVuZGVySW5saW5lKj4ob2JqZWN0KCktPmVsZW1lbnQoKS0+cmVuZGVy
ZXIoKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlubGluZUZsb3ctPmlzSW5saW5l
Q29udGludWF0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgIHBhaW50SW5mby5vdXRsaW5lT2Jq
ZWN0cy0+YWRkKGZsb3dPYmplY3QoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VNYXNrKSB7CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHJldmlzaW9uIDQwMzAxKQorKysgcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKQEAg
LTExMyw2ICsxMTQsNyBAQCBSZW5kZXJCbG9jazo6UmVuZGVyQmxvY2soTm9kZSogbm9kZSkKICAg
ICAgIDogUmVuZGVyRmxvdyhub2RlKQogICAgICAgLCBtX2Zsb2F0aW5nT2JqZWN0cygwKQogICAg
ICAgLCBtX3Bvc2l0aW9uZWRPYmplY3RzKDApCisgICAgICAsIG1faW5saW5lQ29udGludWF0aW9u
KDApCiAgICAgICAsIG1fbWF4TWFyZ2luKDApCiAgICAgICAsIG1fb3ZlcmZsb3dIZWlnaHQoMCkK
ICAgICAgICwgbV9vdmVyZmxvd1dpZHRoKDApCkBAIC0xNTAsNiArMTUyLDE2IEBAIFJlbmRlckJs
b2NrOjp+UmVuZGVyQmxvY2soKQogICAgIH0KIH0KIAordm9pZCBSZW5kZXJCbG9jazo6ZGVzdHJv
eSgpCit7CisgICAgLy8gRGV0YWNoIG91ciBjb250aW51YXRpb24gZmlyc3QuCisgICAgaWYgKG1f
aW5saW5lQ29udGludWF0aW9uKQorICAgICAgICBtX2lubGluZUNvbnRpbnVhdGlvbi0+ZGVzdHJv
eSgpOworICAgIG1faW5saW5lQ29udGludWF0aW9uID0gMDsKKyAgICAKKyAgICBSZW5kZXJGbG93
OjpkZXN0cm95KCk7Cit9CisKIHZvaWQgUmVuZGVyQmxvY2s6OnN0eWxlV2lsbENoYW5nZShSZW5k
ZXJTdHlsZTo6RGlmZiBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCiB7CiAgICAg
c2V0UmVwbGFjZWQobmV3U3R5bGUtPmlzRGlzcGxheVJlcGxhY2VkVHlwZSgpKTsKQEAgLTM4OCw3
ICs0MDAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjptYWtlQ2hpbGRyZW5Ob25JbmxpbmUoCiAgICAg
cmVwYWludCgpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmpl
Y3QgKm9sZENoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0
KiBvbGRDaGlsZCkKIHsKICAgICAvLyBJZiB0aGlzIGNoaWxkIGlzIGEgYmxvY2ssIGFuZCBpZiBv
dXIgcHJldmlvdXMgYW5kIG5leHQgc2libGluZ3MgYXJlCiAgICAgLy8gYm90aCBhbm9ueW1vdXMg
YmxvY2tzIHdpdGggaW5saW5lIGNvbnRlbnQsIHRoZW4gd2UgY2FuIGdvIGFoZWFkIGFuZApAQCAt
Mzk2LDcgKzQwOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUK
ICAgICBSZW5kZXJPYmplY3QqIHByZXYgPSBvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAg
ICAgUmVuZGVyT2JqZWN0KiBuZXh0ID0gb2xkQ2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgYm9v
bCBjYW5EZWxldGVBbm9ueW1vdXNCbG9ja3MgPSAhZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpICYm
ICFpc0lubGluZSgpICYmICFvbGRDaGlsZC0+aXNJbmxpbmUoKSAmJiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICFvbGRDaGlsZC0+dmlydHVhbENvbnRpbnVhdGlvbigpICYm
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFvbGRDaGlsZC0+aXNSZW5k
ZXJCbG9jaygpIHx8ICFzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG9sZENoaWxkKS0+aW5saW5l
Q29udGludWF0aW9uKCkpICYmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCFwcmV2IHx8IChwcmV2LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgcHJldi0+Y2hpbGRyZW5Jbmxp
bmUoKSkpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW5leHQgfHwg
KG5leHQtPmlzQW5vbnltb3VzQmxvY2soKSAmJiBuZXh0LT5jaGlsZHJlbklubGluZSgpKSk7CiAg
ICAgaWYgKGNhbkRlbGV0ZUFub255bW91c0Jsb2NrcyAmJiBwcmV2ICYmIG5leHQpIHsKQEAgLTE0
NTAsNyArMTQ2Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2EK
ICAgICAgICAgdmlldygpLT5lbmFibGVMYXlvdXRTdGF0ZSgpOwogICAgIH0KIH0KLQorIAogdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5
KQogewogICAgIHR4ICs9IHgoKTsKQEAgLTE2ODIsMTMgKzE2OTQsMTMgQEAgdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJgogCiAgICAgLy8gNi4gcGFpbnQgY29udGludWF0
aW9uIG91dGxpbmVzLgogICAgIGlmICgocGFpbnRQaGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8
fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKSkgewotICAgICAgICBpZiAo
Y29udGludWF0aW9uKCkgJiYgY29udGludWF0aW9uKCktPmhhc091dGxpbmUoKSAmJiBjb250aW51
YXRpb24oKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKLSAgICAgICAgICAg
IFJlbmRlckZsb3cqIGlubGluZUZsb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4oY29udGlu
dWF0aW9uKCktPmVsZW1lbnQoKS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICBpZiAoIWlubGlu
ZUZsb3ctPmhhc0xheWVyKCkpCi0gICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrKCktPmFk
ZENvbnRpbnVhdGlvbldpdGhPdXRsaW5lKGlubGluZUZsb3cpOwotICAgICAgICAgICAgZWxzZSBp
ZiAoIWlubGluZUZsb3ctPmZpcnN0TGluZUJveCgpKQotICAgICAgICAgICAgICAgIGlubGluZUZs
b3ctPnBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgdHggLSB4KCkgKyBpbmxpbmVGbG93
LT5jb250YWluaW5nQmxvY2soKS0+eCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eSAtIHkoKSArIGlubGluZUZsb3ctPmNvbnRhaW5pbmdCbG9jaygpLT55KCkp
OworICAgICAgICBpZiAoaW5saW5lQ29udGludWF0aW9uKCkgJiYgaW5saW5lQ29udGludWF0aW9u
KCktPmhhc091dGxpbmUoKSAmJiBpbmxpbmVDb250aW51YXRpb24oKS0+c3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUpIHsKKyAgICAgICAgICAgIFJlbmRlcklubGluZSogaW5saW5lUmVu
ZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbmxpbmUqPihpbmxpbmVDb250aW51YXRpb24oKS0+
ZWxlbWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGlmICghaW5saW5lUmVuZGVyZXIt
Pmhhc0xheWVyKCkpCisgICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrKCktPmFkZENvbnRp
bnVhdGlvbldpdGhPdXRsaW5lKGlubGluZVJlbmRlcmVyKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KCFpbmxpbmVSZW5kZXJlci0+Zmlyc3RMaW5lQm94KCkpCisgICAgICAgICAgICAgICAgaW5saW5l
UmVuZGVyZXItPnBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgdHggLSB4KCkgKyBpbmxp
bmVSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPngoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geSgpICsgaW5saW5lUmVuZGVyZXItPmNvbnRh
aW5pbmdCbG9jaygpLT55KCkpOwogICAgICAgICB9CiAgICAgICAgIHBhaW50Q29udGludWF0aW9u
T3V0bGluZXMocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgIH0KQEAgLTE3NjIsMTEgKzE3NzQsMTEg
QEAgc3RhdGljIENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcCogY29udAogICAgIHJldHVybiAm
dGFibGU7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmFkZENvbnRpbnVhdGlvbldpdGhPdXRsaW5l
KFJlbmRlckZsb3cqIGZsb3cpCit2b2lkIFJlbmRlckJsb2NrOjphZGRDb250aW51YXRpb25XaXRo
T3V0bGluZShSZW5kZXJJbmxpbmUqIGZsb3cpCiB7CiAgICAgLy8gV2UgY2FuJ3QgbWFrZSB0aGlz
IHdvcmsgaWYgdGhlIGlubGluZSBpcyBpbiBhIGxheWVyLiAgV2UnbGwganVzdCByZWx5IG9uIHRo
ZSBicm9rZW4KICAgICAvLyB3YXkgb2YgcGFpbnRpbmcuCi0gICAgQVNTRVJUKCFmbG93LT5sYXll
cigpKTsKKyAgICBBU1NFUlQoIWZsb3ctPmxheWVyKCkgJiYgIWZsb3ctPmlzSW5saW5lQ29udGlu
dWF0aW9uKCkpOwogICAgIAogICAgIENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcCogdGFibGUg
PSBjb250aW51YXRpb25PdXRsaW5lVGFibGUoKTsKICAgICBMaXN0SGFzaFNldDxSZW5kZXJGbG93
Kj4qIGNvbnRpbnVhdGlvbnMgPSB0YWJsZS0+Z2V0KHRoaXMpOwpAQCAtNDY2Myw2ICs0Njc1LDg4
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNldE1heEJvdHRvbU1hcmdpbnMoaW4KICAgICBtX21heE1h
cmdpbi0+bV9ib3R0b21OZWcgPSBuZWc7CiB9CiAKK3ZvaWQgUmVuZGVyQmxvY2s6OmFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2
ZWwpCit7CisgICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5k
IGluY2x1ZGUgbWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKKyAgICAvLyBp
bmxpbmUgYm94ZXMgYWJvdmUgYW5kIGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdpdGgg
dGhlbSB0byBmb3JtIGEgc2luZ2xlIGlycmVndWxhcgorICAgIC8vIHNoYXBlKS4KKyAgICBpZiAo
dG9wTGV2ZWwgJiYgaW5saW5lQ29udGludWF0aW9uKCkpIHsKKyAgICAgICAgcmVjdHMuYXBwZW5k
KEludFJlY3QodHgsIHR5IC0gY29sbGFwc2VkTWFyZ2luVG9wKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoKCksIGhlaWdodCgpICsgY29sbGFwc2VkTWFyZ2luVG9wKCkgKyBj
b2xsYXBzZWRNYXJnaW5Cb3R0b20oKSkpOworICAgICAgICBpbmxpbmVDb250aW51YXRpb24oKS0+
YWJzb2x1dGVSZWN0cyhyZWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHggLSB4KCkgKyBpbmxpbmVDb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2Nr
KCktPngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkg
LSB5KCkgKyBpbmxpbmVDb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPnkoKSwgdG9w
TGV2ZWwpOworICAgIH0gZWxzZQorICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHks
IHdpZHRoKCksIGhlaWdodCgpKSk7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OmFic29sdXRlUXVh
ZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQoreworICAgIC8vIEZv
ciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdpbnMg
c28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCisgICAgLy8gaW5saW5lIGJveGVzIGFib3Zl
IGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNp
bmdsZSBpcnJlZ3VsYXIKKyAgICAvLyBzaGFwZSkuCisgICAgaWYgKHRvcExldmVsICYmIGlubGlu
ZUNvbnRpbnVhdGlvbigpKSB7CisgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoMCwgLWNvbGxh
cHNlZE1hcmdpblRvcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCksIGhl
aWdodCgpICsgY29sbGFwc2VkTWFyZ2luVG9wKCkgKyBjb2xsYXBzZWRNYXJnaW5Cb3R0b20oKSk7
CisgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKGxvY2FsUmVjdCkpOwor
ICAgICAgICBpbmxpbmVDb250aW51YXRpb24oKS0+YWJzb2x1dGVRdWFkcyhxdWFkcywgdG9wTGV2
ZWwpOworICAgIH0gZWxzZQorICAgICAgICBxdWFkcy5hcHBlbmQoUmVuZGVyQm94Ojpsb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsKK30KKwor
SW50UmVjdCBSZW5kZXJCbG9jazo6cmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJCb3gq
IHJlcGFpbnRDb250YWluZXIsIGludCBvdXRsaW5lV2lkdGgpCit7CisgICAgSW50UmVjdCByKFJl
bmRlckZsb3c6OnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgb3V0
bGluZVdpZHRoKSk7CisgICAgaWYgKGlubGluZUNvbnRpbnVhdGlvbigpKQorICAgICAgICByLmlu
ZmxhdGVZKGNvbGxhcHNlZE1hcmdpblRvcCgpKTsKKyAgICByZXR1cm4gcjsKK30KKworUmVuZGVy
T2JqZWN0KiBSZW5kZXJCbG9jazo6aG92ZXJBbmNlc3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGlubGluZUNvbnRpbnVhdGlvbigpID8gaW5saW5lQ29udGludWF0aW9uKCkgOiBSZW5kZXJGbG93
Ojpob3ZlckFuY2VzdG9yKCk7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZURyYWdTdGF0
ZShib29sIGRyYWdPbikKK3sKKyAgICBSZW5kZXJGbG93Ojp1cGRhdGVEcmFnU3RhdGUoZHJhZ09u
KTsKKyAgICBpZiAoaW5saW5lQ29udGludWF0aW9uKCkpCisgICAgICAgIGlubGluZUNvbnRpbnVh
dGlvbigpLT51cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKK30KKworUmVuZGVyU3R5bGUqIFJlbmRl
ckJsb2NrOjpvdXRsaW5lU3R5bGVGb3JSZXBhaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5s
aW5lQ29udGludWF0aW9uKCkgPyBpbmxpbmVDb250aW51YXRpb24oKS0+c3R5bGUoKSA6IHN0eWxl
KCk7Cit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OmNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlck9i
amVjdCopCit7CisgICAgbWFrZUNoaWxkcmVuTm9uSW5saW5lKCk7CisgICAgaWYgKGlzQW5vbnlt
b3VzQmxvY2soKSAmJiBwYXJlbnQoKSkKKyAgICAgICAgcGFyZW50KCktPnJlbW92ZUxlZnRvdmVy
QW5vbnltb3VzQmxvY2sodGhpcyk7CisgICAgLy8gfHRoaXN8IG1heSBiZSBkZWFkIGhlcmUKK30K
Kwordm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAocmVzdWx0LmlubmVyTm9k
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBub2RlID0gZWxlbWVudCgpOworICAg
IGlmIChpbmxpbmVDb250aW51YXRpb24oKSkKKyAgICAgICAgLy8gV2UgYXJlIGluIHRoZSBtYXJn
aW5zIG9mIGJsb2NrIGVsZW1lbnRzIHRoYXQgYXJlIHBhcnQgb2YgYSBjb250aW51YXRpb24uICBJ
bgorICAgICAgICAvLyB0aGlzIGNhc2Ugd2UncmUgYWN0dWFsbHkgc3RpbGwgaW5zaWRlIHRoZSBl
bmNsb3NpbmcgaW5saW5lIGVsZW1lbnQgdGhhdCB3YXMKKyAgICAgICAgLy8gc3BsaXQuICBHbyBh
aGVhZCBhbmQgc2V0IG91ciBpbm5lciBub2RlIGFjY29yZGluZ2x5LgorICAgICAgICBub2RlID0g
aW5saW5lQ29udGludWF0aW9uKCktPmVsZW1lbnQoKTsKKworICAgIGlmIChub2RlKSB7CisgICAg
ICAgIHJlc3VsdC5zZXRJbm5lck5vZGUobm9kZSk7CisgICAgICAgIGlmICghcmVzdWx0LmlubmVy
Tm9uU2hhcmVkTm9kZSgpKQorICAgICAgICAgICAgcmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9k
ZShub2RlKTsKKyAgICAgICAgcmVzdWx0LnNldExvY2FsUG9pbnQocG9pbnQpOworICAgIH0KK30K
KwogY29uc3QgY2hhciogUmVuZGVyQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdAogewogICAgIGlm
IChpc0JvZHkoKSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA0MDMwMSkKKysrIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIElubGluZUl0ZXJhdG9yOwogY2xhc3MgQmlkaVJ1bjsKIGNsYXNzIFBv
c2l0aW9uOworY2xhc3MgUmVuZGVySW5saW5lOwogY2xhc3MgUm9vdElubGluZUJveDsKIAogdGVt
cGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBSdW4+IGNsYXNzIEJpZGlSZXNvbHZlcjsKQEAg
LTQ4LDYgKzQ5LDggQEAgcHVibGljOgogICAgIFJlbmRlckJsb2NrKE5vZGUqKTsKICAgICB2aXJ0
dWFsIH5SZW5kZXJCbG9jaygpOwogCisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKwogICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogCiAgICAgLy8gVGhlc2Ug
dHdvIGZ1bmN0aW9ucyBhcmUgb3ZlcnJpZGRlbiBmb3IgaW5saW5lLWJsb2NrLgpAQCAtMjM3LDYg
KzI0MCwxNSBAQCBwdWJsaWM6CiAKICAgICBib29sIGluUm9vdEJsb2NrQ29udGV4dCgpIGNvbnN0
OwogCisgICAgdmlydHVhbCBJbnRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoUmVuZGVy
Qm94KiByZXBhaW50Q29udGFpbmVyLCBpbnQgb3V0bGluZVdpZHRoKTsKKyAgICB2aXJ0dWFsIFJl
bmRlclN0eWxlKiBvdXRsaW5lU3R5bGVGb3JSZXBhaW50KCkgY29uc3Q7CisgICAgCisgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIGhvdmVyQW5jZXN0b3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
SGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgY2hpbGRCZWNhbWVOb25JbmxpbmUoUmVuZGVyT2JqZWN0KiBjaGlsZCk7
CisgICAgCiAgICAgdm9pZCBzZXRIYXNNYXJrdXBUcnVuY2F0aW9uKGJvb2wgYiA9IHRydWUpIHsg
bV9oYXNNYXJrdXBUcnVuY2F0aW9uID0gYjsgfQogICAgIGJvb2wgaGFzTWFya3VwVHJ1bmNhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWFya3VwVHJ1bmNhdGlvbjsgfQogCkBAIC0yODksNiAr
MzAxLDkgQEAgcHVibGljOgogICAgIGludCBsZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2Nr
KiByb290QmxvY2ssIGludCB5KTsKICAgICBpbnQgcmlnaHRTZWxlY3Rpb25PZmZzZXQoUmVuZGVy
QmxvY2sqIHJvb3RCbG9jaywgaW50IHkpOwogCisgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0cnVl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJv
b2wgdG9wTGV2ZWwgPSB0cnVlKTsKKwogICAgIC8vIEhlbHBlciBtZXRob2RzIGZvciBjb21wdXRp
bmcgbGluZSBjb3VudHMgYW5kIGhlaWdodHMgZm9yIGxpbmUgY291bnRzLgogICAgIFJvb3RJbmxp
bmVCb3gqIGxpbmVBdEluZGV4KGludCk7CiAgICAgaW50IGxpbmVDb3VudCgpOwpAQCAtMzAyLDkg
KzMxNywxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGp1c3RSZWN0Rm9yQ29sdW1ucyhJ
bnRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGFkZENvbnRpbnVhdGlvbldpdGhPdXRsaW5lKFJl
bmRlckZsb3cqKTsKKyAgICB2b2lkIGFkZENvbnRpbnVhdGlvbldpdGhPdXRsaW5lKFJlbmRlcklu
bGluZSopOwogICAgIHZvaWQgcGFpbnRDb250aW51YXRpb25PdXRsaW5lcyhQYWludEluZm8mLCBp
bnQgdHgsIGludCB0eSk7CiAKKyAgICBSZW5kZXJJbmxpbmUqIGlubGluZUNvbnRpbnVhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ29udGludWF0aW9uOyB9CisgICAgdm9pZCBzZXRJbmxp
bmVDb250aW51YXRpb24oUmVuZGVySW5saW5lKiBjKSB7IG1faW5saW5lQ29udGludWF0aW9uID0g
YzsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgYWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKElu
dFBvaW50JikgY29uc3Q7CiAgICAgdm9pZCBhZGp1c3RGb3JCb3JkZXJGaXQoaW50IHgsIGludCYg
bGVmdCwgaW50JiByaWdodCkgY29uc3Q7IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYm9yZGVyRml0
QWRqdXN0CkBAIC00NDcsNyArNDY1LDEzIEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBMaXN0SGFz
aFNldDxSZW5kZXJCb3gqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgRGVwcmVjYXRl
ZFB0ckxpc3Q8RmxvYXRpbmdPYmplY3Q+KiBtX2Zsb2F0aW5nT2JqZWN0czsKICAgICBMaXN0SGFz
aFNldDxSZW5kZXJCb3gqPiogbV9wb3NpdGlvbmVkT2JqZWN0czsKLSAgICAgICAgIAorCisgICAg
Ly8gQW4gaW5saW5lIGNhbiBiZSBzcGxpdCB3aXRoIGJsb2NrcyBvY2N1cnJpbmcgaW4gYmV0d2Vl
biB0aGUgaW5saW5lIGNvbnRlbnQuCisgICAgLy8gV2hlbiB0aGlzIG9jY3VycyB3ZSBuZWVkIGEg
cG9pbnRlciB0byBvdXIgbmV4dCBvYmplY3QuICBXZSBjYW4gYmFzaWNhbGx5IGJlCisgICAgLy8g
c3BsaXQgaW50byBhIHNlcXVlbmNlIG9mIGlubGluZXMgYW5kIGJsb2Nrcy4gIFRoZSBjb250aW51
YXRpb24gd2lsbCBlaXRoZXIgYmUKKyAgICAvLyBhbiBhbm9ueW1vdXMgYmxvY2sgKHRoYXQgaG91
c2VzIG90aGVyIGJsb2Nrcykgb3IgaXQgd2lsbCBiZSBhbiBpbmxpbmUgZmxvdy4KKyAgICBSZW5k
ZXJJbmxpbmUqIG1faW5saW5lQ29udGludWF0aW9uOworCiAgICAgLy8gQWxsb2NhdGVkIG9ubHkg
d2hlbiBzb21lIG9mIHRoZXNlIGZpZWxkcyBoYXZlIG5vbi1kZWZhdWx0IHZhbHVlcwogICAgIHN0
cnVjdCBNYXhNYXJnaW4gewogICAgICAgICBNYXhNYXJnaW4oY29uc3QgUmVuZGVyQmxvY2sqIG8p
IApJbmRleDogcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDQwMzAxKQorKysgcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywzNSArNDQzLDE0IEBAIGludCBSZW5kZXJCb3g6OnBh
ZGRpbmdSaWdodChib29sKSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nLmNhbGNNaW5WYWx1ZSh3
KTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cywgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwpCit2b2lkIFJlbmRlckJveDo6YWJz
b2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSwgYm9vbCkK
IHsKLSAgICAvLyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5j
bHVkZSBtYXJnaW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQotICAgIC8vIGlubGlu
ZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVt
IHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1bGFyCi0gICAgLy8gc2hhcGUpLgotICAgIFJlbmRlckZs
b3cqIGNvbnRpbnVhdGlvbiA9IHZpcnR1YWxDb250aW51YXRpb24oKTsKLSAgICBpZiAodG9wTGV2
ZWwgJiYgY29udGludWF0aW9uKSB7Ci0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0
eSAtIGNvbGxhcHNlZE1hcmdpblRvcCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aWR0aCgpLCBoZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpblRvcCgpICsgY29sbGFwc2VkTWFyZ2lu
Qm90dG9tKCkpKTsKLSAgICAgICAgY29udGludWF0aW9uLT5hYnNvbHV0ZVJlY3RzKHJlY3RzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSB4KCkgKyBjb250aW51YXRp
b24tPmNvbnRhaW5pbmdCbG9jaygpLT54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eSAtIHkoKSArIGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCktPnkoKSwg
dG9wTGV2ZWwpOwotICAgIH0gZWxzZQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwg
dHksIHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHgsIHR5
LCB3aWR0aCgpLCBoZWlnaHQoKSkpOwogfQogCi12b2lkIFJlbmRlckJveDo6YWJzb2x1dGVRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wgdG9wTGV2ZWwpCit2b2lkIFJlbmRlckJv
eDo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wpCiB7Ci0gICAg
Ly8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUgbWFy
Z2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKLSAgICAvLyBpbmxpbmUgYm94ZXMg
YWJvdmUgYW5kIGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdpdGggdGhlbSB0byBmb3Jt
IGEgc2luZ2xlIGlycmVndWxhcgotICAgIC8vIHNoYXBlKS4KLSAgICBSZW5kZXJGbG93KiBjb250
aW51YXRpb24gPSB2aXJ0dWFsQ29udGludWF0aW9uKCk7Ci0gICAgaWYgKHRvcExldmVsICYmIGNv
bnRpbnVhdGlvbikgewotICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0KDAsIC1jb2xsYXBzZWRN
YXJnaW5Ub3AoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLCBoZWlnaHQo
KSArIGNvbGxhcHNlZE1hcmdpblRvcCgpICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkpOwotICAg
ICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChsb2NhbFJlY3QpKTsKLSAgICAg
ICAgY29udGludWF0aW9uLT5hYnNvbHV0ZVF1YWRzKHF1YWRzLCB0b3BMZXZlbCk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgw
LCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsKKyAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKSk7CiB9CiAKIEludFJl
Y3QgUmVuZGVyQm94OjphYnNvbHV0ZUNvbnRlbnRCb3goKSBjb25zdApAQCAtNTA2LDE3ICs0ODUs
NyBAQCBJbnRSZWN0IFJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpCiAKIHZvaWQgUmVu
ZGVyQm94OjphZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywg
d2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUgbWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0
byB0aGUKLSAgICAvLyBpbmxpbmUgYm94ZXMgYWJvdmUgYW5kIGJlbG93IHVzICh0aHVzIGdldHRp
bmcgbWVyZ2VkIHdpdGggdGhlbSB0byBmb3JtIGEgc2luZ2xlIGlycmVndWxhcgotICAgIC8vIHNo
YXBlKS4KLSAgICBSZW5kZXJGbG93KiBjb250aW51YXRpb24gPSB2aXJ0dWFsQ29udGludWF0aW9u
KCk7Ci0gICAgaWYgKGNvbnRpbnVhdGlvbikgewotICAgICAgICBncmFwaGljc0NvbnRleHQtPmFk
ZEZvY3VzUmluZ1JlY3QoSW50UmVjdCh0eCwgdHkgLSBjb2xsYXBzZWRNYXJnaW5Ub3AoKSwgd2lk
dGgoKSwgaGVpZ2h0KCkgKyBjb2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNlZE1hcmdpbkJv
dHRvbSgpKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+YWRkRm9jdXNSaW5nUmVjdHMoZ3JhcGhp
Y3NDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0g
eCgpICsgY29udGludWF0aW9uLT5jb250YWluaW5nQmxvY2soKS0+eCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geSgpICsgY29udGludWF0aW9uLT5jb250
YWluaW5nQmxvY2soKS0+eSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5hZGRGb2N1c1JpbmdSZWN0KEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkpOwor
ICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkRm9jdXNSaW5nUmVjdChJbnRSZWN0KHR4LCB0eSwgd2lk
dGgoKSwgaGVpZ2h0KCkpKTsKIH0KIAogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA0MDMwMSkKKysrIHJl
bmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw5IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBJbnRSZWN0IG1hc2tDbGlwUmVjdCgpOwotICAgIAorCisgICAg
dmlydHVhbCB2b2lkIGNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlck9iamVjdCogLypjaGlsZCov
KSB7IH0KKwogI2lmIEVOQUJMRShTVkcpCiAgICAgdmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
Q29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNw
cAkocmV2aXNpb24gNDAzMDEpCisrKyByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjp1cGRh
dGVCZWZvcmVBZnRlckMKIAogICAgIC8vIEZvciA8cT48cC8+PC9xPiwgaWYgdGhpcyBvYmplY3Qg
aXMgdGhlIGlubGluZSBjb250aW51YXRpb24gb2YgdGhlIDxxPiwgd2Ugb25seSB3YW50IHRvIGdl
bmVyYXRlCiAgICAgLy8gOmFmdGVyIGNvbnRlbnQgYW5kIG5vdCA6YmVmb3JlIGNvbnRlbnQuCi0g
ICAgaWYgKG5ld0NvbnRlbnRXYW50ZWQgJiYgdHlwZSA9PSBSZW5kZXJTdHlsZTo6QkVGT1JFICYm
IGlzSW5saW5lQ29udGludWF0aW9uKCkpCisgICAgaWYgKG5ld0NvbnRlbnRXYW50ZWQgJiYgdHlw
ZSA9PSBSZW5kZXJTdHlsZTo6QkVGT1JFICYmIGlzUmVuZGVySW5saW5lKCkgJiYgc3RhdGljX2Nh
c3Q8UmVuZGVySW5saW5lKj4odGhpcyktPmlzSW5saW5lQ29udGludWF0aW9uKCkpCiAgICAgICAg
IG5ld0NvbnRlbnRXYW50ZWQgPSBmYWxzZTsKIAogICAgIC8vIFNpbWlsYXJseSwgaWYgd2UncmUg
dGhlIGJlZ2lubmluZyBvZiBhIDxxPiwgYW5kIHRoZXJlJ3MgYW4gaW5saW5lIGNvbnRpbnVhdGlv
biBmb3Igb3VyIG9iamVjdCwKQEAgLTU0Miw3ICs1NDIsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5l
cjo6cmVtb3ZlTGVmdG92ZXJBbm9uCiAgICAgQVNTRVJUKGNoaWxkLT5pc0Fub255bW91c0Jsb2Nr
KCkpOwogICAgIEFTU0VSVCghY2hpbGQtPmNoaWxkcmVuSW5saW5lKCkpOwogICAgIAotICAgIGlm
IChjaGlsZC0+Y29udGludWF0aW9uKCkpIAorICAgIGlmIChjaGlsZC0+aW5saW5lQ29udGludWF0
aW9uKCkpIAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiBmaXJzdEFu
Q2hpbGQgPSBjaGlsZC0+Zmlyc3RDaGlsZCgpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsb3cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2aXNpb24gNDAz
MDEpCisrKyByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEy
ICs1OCwyMCBAQCBSZW5kZXJGbG93KiBSZW5kZXJGbG93OjpjcmVhdGVBbm9ueW1vdXNGCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAorLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxs
IGdvIGF3YXkgb25jZSB3ZSBmaW5pc2ggcHVzaGluZyBhbGwgdGhlIGNvbnRpbnVhdGlvbiBjb2Rl
IGRvd24gaW50byBSZW5kZXJCbG9jayBhbmQgUmVuZGVySW5saW5lLgorc3RhdGljIFJlbmRlckZs
b3cqIG5leHRDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBpZiAo
cmVuZGVyZXItPmlzSW5saW5lKCkgJiYgIXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4oc3RhdGljX2Nhc3Q8UmVuZGVySW5saW5l
Kj4ocmVuZGVyZXIpLT5jb250aW51YXRpb24oKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
bmRlckJsb2NrKj4ocmVuZGVyZXIpLT5pbmxpbmVDb250aW51YXRpb24oKTsKK30KKwogUmVuZGVy
RmxvdyogUmVuZGVyRmxvdzo6Y29udGludWF0aW9uQmVmb3JlKFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpCiB7CiAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9
PSB0aGlzKQogICAgICAgICByZXR1cm4gdGhpczsKIAotICAgIFJlbmRlckZsb3cqIGN1cnIgPSBj
b250aW51YXRpb24oKTsKKyAgICBSZW5kZXJGbG93KiBjdXJyID0gbmV4dENvbnRpbnVhdGlvbih0
aGlzKTsKICAgICBSZW5kZXJGbG93KiBuZXh0VG9MYXN0ID0gdGhpczsKICAgICBSZW5kZXJGbG93
KiBsYXN0ID0gdGhpczsKICAgICB3aGlsZSAoY3VycikgewpAQCAtNzUsNyArODMsNyBAQCBSZW5k
ZXJGbG93KiBSZW5kZXJGbG93Ojpjb250aW51YXRpb25CZWZvCiAKICAgICAgICAgbmV4dFRvTGFz
dCA9IGxhc3Q7CiAgICAgICAgIGxhc3QgPSBjdXJyOwotICAgICAgICBjdXJyID0gY3Vyci0+Y29u
dGludWF0aW9uKCk7CisgICAgICAgIGN1cnIgPSBuZXh0Q29udGludWF0aW9uKGN1cnIpOwogICAg
IH0KIAogICAgIGlmICghYmVmb3JlQ2hpbGQgJiYgIWxhc3QtPmZpcnN0Q2hpbGQoKSkKQEAgLTk2
LDEwICsxMDQsMTcgQEAgdm9pZCBSZW5kZXJGbG93OjphZGRDaGlsZFdpdGhDb250aW51YXRpbwog
ICAgIH0KIAogICAgIFJlbmRlckZsb3cqIGZsb3cgPSBjb250aW51YXRpb25CZWZvcmUoYmVmb3Jl
Q2hpbGQpOwotICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgp
LT5pc1JlbmRlckJsb2NrKCkgfHwKLSAgICAgICAgICAgICAgICBiZWZvcmVDaGlsZC0+cGFyZW50
KCktPmlzUmVuZGVySW5saW5lKCkpOwotICAgIFJlbmRlckZsb3cqIGJlZm9yZUNoaWxkUGFyZW50
ID0gYmVmb3JlQ2hpbGQgPyBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4oYmVmb3JlQ2hpbGQtPnBh
cmVudCgpKSA6IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb3ctPmNv
bnRpbnVhdGlvbigpID8gZmxvdy0+Y29udGludWF0aW9uKCkgOiBmbG93KTsKKyAgICBBU1NFUlQo
IWJlZm9yZUNoaWxkIHx8IGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+aXNSZW5kZXJCbG9jaygpIHx8
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSk7CisgICAgUmVuZGVyRmxv
dyogYmVmb3JlQ2hpbGRQYXJlbnQgPSAwOworICAgIGlmIChiZWZvcmVDaGlsZCkKKyAgICAgICAg
YmVmb3JlQ2hpbGRQYXJlbnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4oYmVmb3JlQ2hpbGQt
PnBhcmVudCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVuZGVyRmxvdyogY29udCA9IG5leHRD
b250aW51YXRpb24oZmxvdyk7CisgICAgICAgIGlmIChjb250KQorICAgICAgICAgICAgYmVmb3Jl
Q2hpbGRQYXJlbnQgPSBjb250OworICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWZvcmVDaGls
ZFBhcmVudCA9IGZsb3c7CisgICAgfQogCiAgICAgaWYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JQ
b3NpdGlvbmVkKCkpCiAgICAgICAgIHJldHVybiBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRU
b0Zsb3cobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKQEAgLTEyNiw3ICsxNDEsNyBAQCB2b2lkIFJl
bmRlckZsb3c6OmFkZENoaWxkV2l0aENvbnRpbnVhdGlvCiAKIHZvaWQgUmVuZGVyRmxvdzo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkK
IHsKLSAgICBpZiAoY29udGludWF0aW9uKCkpCisgICAgaWYgKG5leHRDb250aW51YXRpb24odGhp
cykpCiAgICAgICAgIHJldHVybiBhZGRDaGlsZFdpdGhDb250aW51YXRpb24obmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkKTsKICAgICByZXR1cm4gYWRkQ2hpbGRUb0Zsb3cobmV3Q2hpbGQsIGJlZm9yZUNo
aWxkKTsKIH0KQEAgLTE5OCwxMSArMjEzLDYgQEAgdm9pZCBSZW5kZXJGbG93OjpkZWxldGVMaW5l
Qm94ZXMoKQogCiB2b2lkIFJlbmRlckZsb3c6OmRlc3Ryb3koKQogewotICAgIC8vIERldGFjaCBv
dXIgY29udGludWF0aW9uIGZpcnN0LgotICAgIGlmIChtX2NvbnRpbnVhdGlvbikKLSAgICAgICAg
bV9jb250aW51YXRpb24tPmRlc3Ryb3koKTsKLSAgICBtX2NvbnRpbnVhdGlvbiA9IDA7Ci0KICAg
ICAvLyBNYWtlIHN1cmUgdG8gZGVzdHJveSBhbm9ueW1vdXMgY2hpbGRyZW4gZmlyc3Qgd2hpbGUg
dGhleSBhcmUgc3RpbGwgY29ubmVjdGVkIHRvIHRoZSByZXN0IG9mIHRoZSB0cmVlLCBzbyB0aGF0
IHRoZXkgd2lsbAogICAgIC8vIHByb3Blcmx5IGRpcnR5IGxpbmUgYm94ZXMgdGhhdCB0aGV5IGFy
ZSByZW1vdmVkIGZyb20uICBFZmZlY3RzIHRoYXQgZG8gOmJlZm9yZS86YWZ0ZXIgb25seSBvbiBo
b3ZlciBjb3VsZCBjcmFzaCBvdGhlcndpc2UuCiAgICAgUmVuZGVyQ29udGFpbmVyOjpkZXN0cm95
TGVmdG92ZXJDaGlsZHJlbigpOwpAQCAtNTYyLDEwICs1NzIsMTQgQEAgSW50UmVjdCBSZW5kZXJG
bG93Ojpsb2NhbENhcmV0UmVjdChJbmxpbgogdm9pZCBSZW5kZXJGbG93OjphZGRGb2N1c1JpbmdS
ZWN0cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LCBpbnQgdHkpCiB7
CiAgICAgaWYgKGlzUmVuZGVyQmxvY2soKSkgewotICAgICAgICAvLyBDb250aW51YXRpb25zIHNo
b3VsZCBpbmNsdWRlIHRoZWlyIG1hcmdpbnMgaW4gdGhlIG91dGxpbmUgcmVjdC4KLSAgICAgICAg
aWYgKGNvbnRpbnVhdGlvbigpKSB7Ci0gICAgICAgICAgICBib29sIG5leHRJbmxpbmVIYXNMaW5l
Qm94ID0gY29udGludWF0aW9uKCktPmZpcnN0TGluZUJveCgpOwotICAgICAgICAgICAgYm9vbCBw
cmV2SW5saW5lSGFzTGluZUJveCA9IHN0YXRpY19jYXN0PFJlbmRlckZsb3cqPihjb250aW51YXRp
b24oKS0+ZWxlbWVudCgpLT5yZW5kZXJlcigpKS0+Zmlyc3RMaW5lQm94KCk7CisgICAgICAgIC8v
IEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdp
bnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCisgICAgICAgIC8vIGlubGluZSBib3hl
cyBhYm92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZv
cm0gYSBzaW5nbGUgaXJyZWd1bGFyCisgICAgICAgIC8vIHNoYXBlKS4KKyAgICAgICAgaWYgKHN0
YXRpY19jYXN0PFJlbmRlckJsb2NrKj4odGhpcyktPmlubGluZUNvbnRpbnVhdGlvbigpKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayByZWFsbHkgaXNuJ3QgYWNjdXJhdGUuIAor
ICAgICAgICAgICAgYm9vbCBuZXh0SW5saW5lSGFzTGluZUJveCA9IHN0YXRpY19jYXN0PFJlbmRl
ckJsb2NrKj4odGhpcyktPmlubGluZUNvbnRpbnVhdGlvbigpLT5maXJzdExpbmVCb3goKTsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLiBUaGUgcHJpbmNpcGFsIHJlbmRlcmVy
IG1heSBub3QgYmUgdGhlIGNvbnRpbnVhdGlvbiBwcmVjZWRpbmcgdGhpcyBibG9jay4KKyAgICAg
ICAgICAgIGJvb2wgcHJldklubGluZUhhc0xpbmVCb3ggPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93
Kj4oc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPih0aGlzKS0+aW5saW5lQ29udGludWF0aW9uKCkt
PmVsZW1lbnQoKS0+cmVuZGVyZXIoKSktPmZpcnN0TGluZUJveCgpOyAKICAgICAgICAgICAgIGlu
dCB0b3BNYXJnaW4gPSBwcmV2SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1hcmdpblRvcCgp
IDogMDsKICAgICAgICAgICAgIGludCBib3R0b21NYXJnaW4gPSBuZXh0SW5saW5lSGFzTGluZUJv
eCA/IGNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpIDogMDsKICAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+YWRkRm9jdXNSaW5nUmVjdChJbnRSZWN0KHR4LCB0eSAtIHRvcE1hcmdpbiwgCkBAIC01
OTEsMTUgKzYwNSwxNiBAQCB2b2lkIFJlbmRlckZsb3c6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBo
CiAgICAgICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNvbnRpbnVhdGlvbigpKSB7CisgICAg
UmVuZGVyQm94KiBjb250aW51YXRpb24gPSBuZXh0Q29udGludWF0aW9uKHRoaXMpOworICAgIGlm
IChjb250aW51YXRpb24pIHsKICAgICAgICAgaWYgKGlzSW5saW5lKCkpCi0gICAgICAgICAgICBj
b250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMoZ3JhcGhpY3NDb250ZXh0LCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIGNvbnRhaW5pbmdC
bG9jaygpLT54KCkgKyBjb250aW51YXRpb24oKS0+eCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0gY29udGFpbmluZ0Jsb2NrKCktPnkoKSArIGNv
bnRpbnVhdGlvbigpLT55KCkpOworICAgICAgICAgICAgY29udGludWF0aW9uLT5hZGRGb2N1c1Jp
bmdSZWN0cyhncmFwaGljc0NvbnRleHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eCAtIGNvbnRhaW5pbmdCbG9jaygpLT54KCkgKyBjb250aW51YXRpb24t
PngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSBj
b250YWluaW5nQmxvY2soKS0+eSgpICsgY29udGludWF0aW9uLT55KCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMoZ3JhcGhpY3ND
b250ZXh0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eCAtIHgoKSArIGNvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+eCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geSgpICsgY29udGlu
dWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT55KCkpOworICAgICAgICAgICAgY29udGludWF0
aW9uLT5hZGRGb2N1c1JpbmdSZWN0cyhncmFwaGljc0NvbnRleHQsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIHgoKSArIGNvbnRpbnVhdGlvbi0+Y29u
dGFpbmluZ0Jsb2NrKCktPngoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHkgLSB5KCkgKyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpLT55KCkp
OwogICAgIH0KIH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsb3cuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyRmxvdy5oCShyZXZpc2lvbiA0MDMwMSkKKysrIHJlbmRlcmluZy9S
ZW5kZXJGbG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAgY2xhc3MgUmVuZGVy
RmxvdyA6IHB1YmxpYyBSZW5kZXJDb250YWluZQogcHVibGljOgogICAgIFJlbmRlckZsb3coTm9k
ZSogbm9kZSkKICAgICAgICAgOiBSZW5kZXJDb250YWluZXIobm9kZSkKLSAgICAgICAgLCBtX2Nv
bnRpbnVhdGlvbigwKQogICAgICAgICAsIG1fZmlyc3RMaW5lQm94KDApCiAgICAgICAgICwgbV9s
YXN0TGluZUJveCgwKQogICAgICAgICAsIG1fbGluZUhlaWdodCgtMSkKQEAgLTUxLDcgKzUwLDYg
QEAgcHVibGljOgogICAgICAgICAsIG1faGFzTWFya3VwVHJ1bmNhdGlvbihmYWxzZSkKICAgICAg
ICAgLCBtX3NlbGVjdGlvblN0YXRlKFNlbGVjdGlvbk5vbmUpCiAgICAgICAgICwgbV9oYXNDb2x1
bW5zKGZhbHNlKQotICAgICAgICAsIG1faXNDb250aW51YXRpb24oZmFsc2UpCiAgICAgICAgICwg
bV9jZWxsV2lkdGhDaGFuZ2VkKGZhbHNlKQogICAgIHsKICAgICB9CkBAIC01OSw5ICs1Nyw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZW5kZXJGbG93KCk7CiAjZW5kaWYKIAotICAgIHZpcnR1
YWwgUmVuZGVyRmxvdyogdmlydHVhbENvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnRp
bnVhdGlvbigpOyB9Ci0gICAgUmVuZGVyRmxvdyogY29udGludWF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9jb250aW51YXRpb247IH0KLSAgICB2b2lkIHNldENvbnRpbnVhdGlvbihSZW5kZXJGbG93
KiBjKSB7IG1fY29udGludWF0aW9uID0gYzsgfQogICAgIFJlbmRlckZsb3cqIGNvbnRpbnVhdGlv
bkJlZm9yZShSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKIAogICAgIHZvaWQgYWRkQ2hpbGRX
aXRoQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQpOwpAQCAtMTAxLDEzICs5Niw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2hlY2tD
b25zaXN0ZW5jeSgpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIC8vIEFuIGlubGluZSBjYW4gYmUg
c3BsaXQgd2l0aCBibG9ja3Mgb2NjdXJyaW5nIGluIGJldHdlZW4gdGhlIGlubGluZSBjb250ZW50
LgotICAgIC8vIFdoZW4gdGhpcyBvY2N1cnMgd2UgbmVlZCBhIHBvaW50ZXIgdG8gb3VyIG5leHQg
b2JqZWN0LiAgV2UgY2FuIGJhc2ljYWxseSBiZQotICAgIC8vIHNwbGl0IGludG8gYSBzZXF1ZW5j
ZSBvZiBpbmxpbmVzIGFuZCBibG9ja3MuICBUaGUgY29udGludWF0aW9uIHdpbGwgZWl0aGVyIGJl
Ci0gICAgLy8gYW4gYW5vbnltb3VzIGJsb2NrICh0aGF0IGhvdXNlcyBvdGhlciBibG9ja3MpIG9y
IGl0IHdpbGwgYmUgYW4gaW5saW5lIGZsb3cuCi0gICAgUmVuZGVyRmxvdyogbV9jb250aW51YXRp
b247Ci0KIHByb3RlY3RlZDoKICAgICAvLyBGb3IgYmxvY2sgZmxvd3MsIGVhY2ggYm94IHJlcHJl
c2VudHMgdGhlIHJvb3QgaW5saW5lIGJveCBmb3IgYSBsaW5lIGluIHRoZQogICAgIC8vIHBhcmFn
cmFwaC4KQEAgLTEyNyw5ICsxMTUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdW5zaWduZWQgbV9zZWxl
Y3Rpb25TdGF0ZSA6IDM7IC8vIFNlbGVjdGlvblN0YXRlCiAgICAgYm9vbCBtX2hhc0NvbHVtbnMg
OiAxOwogICAgIAotICAgIC8vIGZyb20gUmVuZGVySW5saW5lCi0gICAgYm9vbCBtX2lzQ29udGlu
dWF0aW9uIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UncmUgYSBjb250aW51YXRpb24gb2YgYW4g
aW5saW5lLgotICAgIAogICAgIC8vIGZyb20gUmVuZGVyVGFibGVDZWxsCiAgICAgYm9vbCBtX2Nl
bGxXaWR0aENoYW5nZWQgOiAxOwogfTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA0MDMw
MSkKKysrIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAKICNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJlbmEu
aCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAg
LTM1LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJJbmxpbmU6OlJlbmRl
cklubGluZShOb2RlKiBub2RlKQogICAgIDogUmVuZGVyRmxvdyhub2RlKQorICAgICwgbV9jb250
aW51YXRpb24oMCkKIHsKIH0KIApAQCAtNDIsNiArNDQsMjMgQEAgUmVuZGVySW5saW5lOjp+UmVu
ZGVySW5saW5lKCkKIHsKIH0KIAordm9pZCBSZW5kZXJJbmxpbmU6OmRlc3Ryb3koKQoreworICAg
IC8vIERldGFjaCBvdXIgY29udGludWF0aW9uIGZpcnN0LgorICAgIGlmIChtX2NvbnRpbnVhdGlv
bikKKyAgICAgICAgbV9jb250aW51YXRpb24tPmRlc3Ryb3koKTsKKyAgICBtX2NvbnRpbnVhdGlv
biA9IDA7CisgICAgCisgICAgUmVuZGVyRmxvdzo6ZGVzdHJveSgpOworfQorCitSZW5kZXJJbmxp
bmUqIFJlbmRlcklubGluZTo6aW5saW5lQ29udGludWF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fY29udGludWF0aW9uIHx8IG1fY29udGludWF0aW9uLT5pc0lubGluZSgpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVySW5saW5lKj4obV9jb250aW51YXRpb24pOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG1fY29udGludWF0aW9uKS0+aW5saW5lQ29u
dGludWF0aW9uKCk7Cit9CisKIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShSZW5k
ZXJTdHlsZTo6RGlmZiBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAg
UmVuZGVyRmxvdzo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwpAQCAtNTUsMTUgKzc0
LDExIEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShSZW5kZXIKICAgICAvLyBl
LmcuLCA8Zm9udD5mb28gPGg0PmdvbzwvaDQ+IG1vbzwvZm9udD4uICBUaGUgPGZvbnQ+IGlubGlu
ZXMgYmVmb3JlCiAgICAgLy8gYW5kIGFmdGVyIHRoZSBibG9jayBzaGFyZSB0aGUgc2FtZSBzdHls
ZSwgYnV0IHRoZSBibG9jayBkb2Vzbid0CiAgICAgLy8gbmVlZCB0byBwYXNzIGl0cyBzdHlsZSBv
biB0byBhbnlvbmUgZWxzZS4KLSAgICBSZW5kZXJGbG93KiBjdXJyQ29udCA9IGNvbnRpbnVhdGlv
bigpOwotICAgIHdoaWxlIChjdXJyQ29udCkgewotICAgICAgICBpZiAoY3VyckNvbnQtPmlzSW5s
aW5lKCkpIHsKLSAgICAgICAgICAgIFJlbmRlckZsb3cqIG5leHRDb250ID0gY3VyckNvbnQtPmNv
bnRpbnVhdGlvbigpOwotICAgICAgICAgICAgY3VyckNvbnQtPnNldENvbnRpbnVhdGlvbigwKTsK
LSAgICAgICAgICAgIGN1cnJDb250LT5zZXRTdHlsZShzdHlsZSgpKTsKLSAgICAgICAgICAgIGN1
cnJDb250LT5zZXRDb250aW51YXRpb24obmV4dENvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGN1
cnJDb250ID0gY3VyckNvbnQtPmNvbnRpbnVhdGlvbigpOworICAgIGZvciAoUmVuZGVySW5saW5l
KiBjdXJyQ29udCA9IGlubGluZUNvbnRpbnVhdGlvbigpOyBjdXJyQ29udDsgY3VyckNvbnQgPSBj
dXJyQ29udC0+aW5saW5lQ29udGludWF0aW9uKCkpIHsKKyAgICAgICAgUmVuZGVyQm94KiBuZXh0
Q29udCA9IGN1cnJDb250LT5jb250aW51YXRpb24oKTsKKyAgICAgICAgY3VyckNvbnQtPnNldENv
bnRpbnVhdGlvbigwKTsKKyAgICAgICAgY3VyckNvbnQtPnNldFN0eWxlKHN0eWxlKCkpOworICAg
ICAgICBjdXJyQ29udC0+c2V0Q29udGludWF0aW9uKG5leHRDb250KTsKICAgICB9CiAKICAgICBt
X2xpbmVIZWlnaHQgPSAtMTsKQEAgLTc1LDExICs5MCw2IEBAIHZvaWQgUmVuZGVySW5saW5lOjpz
dHlsZURpZENoYW5nZShSZW5kZXIKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVySW5saW5lOjppc0lu
bGluZUNvbnRpbnVhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNDb250aW51YXRpb247
Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FmdGVyQ29udGVudChSZW5kZXJPYmplY3QqIGNo
aWxkKQogewogICAgIGlmICghY2hpbGQpCkBAIC0xMDksNyArMTE5LDcgQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OmFkZENoaWxkVG9GbG93KFJlbmRlcgogCiAgICAgICAgIFJlbmRlckJsb2NrKiBuZXdC
b3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlckJsb2NrKGRvY3VtZW50KCkgLyogYW5vbnlt
b3VzIGJveCAqLyk7CiAgICAgICAgIG5ld0JveC0+c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgp
KTsKLSAgICAgICAgUmVuZGVyRmxvdyogb2xkQ29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7
CisgICAgICAgIFJlbmRlckJveCogb2xkQ29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7CiAg
ICAgICAgIHNldENvbnRpbnVhdGlvbihuZXdCb3gpOwogCiAgICAgICAgIC8vIFNvbWVvbmUgbWF5
IGhhdmUgcHV0IGEgPHA+IGluc2lkZSBhIDxxPiwgY2F1c2luZyBhIHNwbGl0LiAgV2hlbiB0aGlz
IGhhcHBlbnMsIHRoZSA6YWZ0ZXIgY29udGVudApAQCAtMTM0LDE0ICsxNDQsMTMgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93KFJlbmRlcgogUmVuZGVySW5saW5lKiBSZW5kZXJJ
bmxpbmU6OmNsb25lSW5saW5lKFJlbmRlckZsb3cqIHNyYykKIHsKICAgICBSZW5kZXJJbmxpbmUq
IG8gPSBuZXcgKHNyYy0+cmVuZGVyQXJlbmEoKSkgUmVuZGVySW5saW5lKHNyYy0+ZWxlbWVudCgp
KTsKLSAgICBvLT5tX2lzQ29udGludWF0aW9uID0gdHJ1ZTsKICAgICBvLT5zZXRTdHlsZShzcmMt
PnN0eWxlKCkpOwogICAgIHJldHVybiBvOwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJ
bmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogbWlkZGxlQmxvY2ssCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQs
IFJlbmRlckZsb3cqIG9sZENvbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJveCogb2xkQ29udCkKIHsKICAgICAvLyBD
cmVhdGUgYSBjbG9uZSBvZiB0aGlzIGlubGluZS4KICAgICBSZW5kZXJJbmxpbmUqIGNsb25lID0g
Y2xvbmVJbmxpbmUodGhpcyk7CkBAIC0xNTgsNyArMTY3LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgIH0KIAogICAgIC8vIEhvb2sgfGNsb25lfCB1cCBh
cyB0aGUgY29udGludWF0aW9uIG9mIHRoZSBtaWRkbGUgYmxvY2suCi0gICAgbWlkZGxlQmxvY2st
PnNldENvbnRpbnVhdGlvbihjbG9uZSk7CisgICAgbWlkZGxlQmxvY2stPnNldElubGluZUNvbnRp
bnVhdGlvbihjbG9uZSk7CiAKICAgICAvLyBXZSBoYXZlIGJlZW4gcmVwYXJlbnRlZCBhbmQgYXJl
IG5vdyB1bmRlciB0aGUgZnJvbUJsb2NrLiAgV2UgbmVlZAogICAgIC8vIHRvIHdhbGsgdXAgb3Vy
IGlubGluZSBwYXJlbnQgY2hhaW4gdW50aWwgd2UgaGl0IHRoZSBjb250YWluaW5nIGJsb2NrLgpA
QCAtMTgyLDggKzE5MSw5IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVy
QmwKICAgICAgICAgICAgIGNsb25lLT5hZGRDaGlsZFRvRmxvdyhjbG9uZUNoaWxkLCAwKTsKIAog
ICAgICAgICAgICAgLy8gSG9vayB0aGUgY2xvbmUgdXAgYXMgYSBjb250aW51YXRpb24gb2YgfGN1
cnJ8LgotICAgICAgICAgICAgUmVuZGVyRmxvdyogb2xkQ29udCA9IGN1cnItPmNvbnRpbnVhdGlv
bigpOwotICAgICAgICAgICAgY3Vyci0+c2V0Q29udGludWF0aW9uKGNsb25lKTsKKyAgICAgICAg
ICAgIFJlbmRlcklubGluZSogaW5saW5lQ3VyciA9IHN0YXRpY19jYXN0PFJlbmRlcklubGluZSo+
KGN1cnIpOworICAgICAgICAgICAgUmVuZGVyQm94KiBvbGRDb250ID0gaW5saW5lQ3Vyci0+Y29u
dGludWF0aW9uKCk7CisgICAgICAgICAgICBpbmxpbmVDdXJyLT5zZXRDb250aW51YXRpb24oY2xv
bmUpOwogICAgICAgICAgICAgY2xvbmUtPnNldENvbnRpbnVhdGlvbihvbGRDb250KTsKIAogICAg
ICAgICAgICAgLy8gU29tZW9uZSBtYXkgaGF2ZSBpbmRpcmVjdGx5IGNhdXNlZCBhIDxxPiB0byBz
cGxpdC4gIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgOmFmdGVyIGNvbnRlbnQKQEAgLTIyMyw3ICsy
MzMsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiB9CiAKIHZv
aWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVu
ZGVyQmxvY2sqIG5ld0Jsb2NrQm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJGbG93KiBvbGRDb250KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJCb3gqIG9sZENvbnQp
CiB7CiAgICAgUmVuZGVyQmxvY2sqIHByZSA9IDA7CiAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0g
Y29udGFpbmluZ0Jsb2NrKCk7CkBAIC0zNjEsMTQgKzM3MSwxNCBAQCBWaXNpYmxlUG9zaXRpb24g
UmVuZGVySW5saW5lOjpwb3NpdGlvbkZvCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgaW50IHBhcmVudEJsb2NrWCA9IGNiLT54KCkgKyB4OwogICAgIGludCBw
YXJlbnRCbG9ja1kgPSBjYi0+eSgpICsgeTsKLSAgICBmb3IgKFJlbmRlckZsb3cqIGMgPSBjb250
aW51YXRpb24oKTsgYzsgYyA9IGMtPmNvbnRpbnVhdGlvbigpKSB7Ci0gICAgICAgIFJlbmRlckZs
b3cqIGNvbnRCbG9jayA9IGM7Ci0gICAgICAgIGlmIChjLT5pc0lubGluZSgpKQotICAgICAgICAg
ICAgY29udEJsb2NrID0gYy0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgUmVuZGVyQm94KiBjID0g
Y29udGludWF0aW9uKCk7CisgICAgd2hpbGUgKGMpIHsKKyAgICAgICAgUmVuZGVyQm94KiBjb250
QmxvY2sgPSBjOwogICAgICAgICBpZiAoYy0+aXNJbmxpbmUoKSB8fCBjLT5maXJzdENoaWxkKCkp
CiAgICAgICAgICAgICByZXR1cm4gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhwYXJlbnRCbG9j
a1ggLSBjb250QmxvY2stPngoKSwgcGFyZW50QmxvY2tZIC0gY29udEJsb2NrLT55KCkpOworICAg
ICAgICBjID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjKS0+aW5saW5lQ29udGludWF0aW9u
KCk7CiAgICAgfQotCisgICAgCiAgICAgcmV0dXJuIFJlbmRlckZsb3c6OnBvc2l0aW9uRm9yQ29v
cmRpbmF0ZXMoeCwgeSk7CiB9CiAKQEAgLTQ1OSw0ICs0NjksNjAgQEAgSW50UmVjdCBSZW5kZXJJ
bmxpbmU6OmNsaXBwZWRPdmVyZmxvd1JlYwogICAgIHJldHVybiByOwogfQogCitJbnRSZWN0IFJl
bmRlcklubGluZTo6cmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRD
b250YWluZXIsIGludCBvdXRsaW5lV2lkdGgpCit7CisgICAgSW50UmVjdCByKFJlbmRlckZsb3c6
OnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgb3V0bGluZVdpZHRo
KSk7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkp
CisgICAgICAgICAgICByLnVuaXRlKGN1cnItPnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQocmVw
YWludENvbnRhaW5lciwgb3V0bGluZVdpZHRoKSk7CisgICAgfQorICAgIHJldHVybiByOworfQor
Cit2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKQoreworICAg
IFJlbmRlckZsb3c6OnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOworICAgIGlmIChjb250aW51YXRp
b24oKSkKKyAgICAgICAgY29udGludWF0aW9uKCktPnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOwor
fQorCit2b2lkIFJlbmRlcklubGluZTo6Y2hpbGRCZWNhbWVOb25JbmxpbmUoUmVuZGVyT2JqZWN0
KiBjaGlsZCkKK3sKKyAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgZmxvdy4KKyAg
ICBSZW5kZXJCbG9jayogbmV3Qm94ID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICBSZW5k
ZXJCb3gqIG9sZENvbnRpbnVhdGlvbiA9IGNvbnRpbnVhdGlvbigpOworICAgIHNldENvbnRpbnVh
dGlvbihuZXdCb3gpOworICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKKyAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGQpOworICAgIHNwbGl0Rmxvdyhi
ZWZvcmVDaGlsZCwgbmV3Qm94LCBjaGlsZCwgb2xkQ29udGludWF0aW9uKTsKK30KKwordm9pZCBS
ZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQoKTsKKyAgICBJbnRQb2lu
dCBsb2NhbFBvaW50KHBvaW50KTsKKyAgICBpZiAobm9kZSkgeworICAgICAgICBpZiAoaXNJbmxp
bmVDb250aW51YXRpb24oKSkgeworICAgICAgICAgICAgLy8gV2UncmUgaW4gdGhlIGNvbnRpbnVh
dGlvbiBvZiBhIHNwbGl0IGlubGluZS4gIEFkanVzdCBvdXIgbG9jYWwgcG9pbnQgdG8gYmUgaW4g
dGhlIGNvb3JkaW5hdGUgc3BhY2UKKyAgICAgICAgICAgIC8vIG9mIHRoZSBwcmluY2lwYWwgcmVu
ZGVyZXIncyBjb250YWluaW5nIGJsb2NrLiAgVGhpcyB3aWxsIGVuZCB1cCBiZWluZyB0aGUgaW5u
ZXJOb25TaGFyZWROb2RlLgorICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGZpcnN0QmxvY2sgPSBu
b2RlLT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gR2V0IG91ciBjb250YWluaW5nIGJsb2NrLgorICAgICAgICAgICAgUmVuZGVyQm94
KiBibG9jayA9IHRvUmVuZGVyQm94KHRoaXMpOworICAgICAgICAgICAgaWYgKGlzSW5saW5lKCkp
CisgICAgICAgICAgICAgICAgYmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgCisg
ICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUoYmxvY2stPngoKSAtIGZpcnN0QmxvY2stPngoKSwg
YmxvY2stPnkoKSAtIGZpcnN0QmxvY2stPnkoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXN1
bHQuc2V0SW5uZXJOb2RlKG5vZGUpOworICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vblNoYXJlZE5vZGUobm9kZSk7
CisgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KGxvY2FsUG9pbnQpOworICAgIH0KK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gNDAzMDEpCisr
KyByZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiwx
OCBAQCBwdWJsaWM6CiAgICAgUmVuZGVySW5saW5lKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5k
ZXJJbmxpbmUoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1Jl
bmRlcklubGluZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hp
bGRyZW5JbmxpbmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wg
aXNJbmxpbmVDb250aW51YXRpb24oKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZFRvRmxvdyhSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KTsKICAgICB2b2lkIHNwbGl0SW5saW5lcyhSZW5kZXJCbG9jayogZnJvbUJsb2NrLCBSZW5kZXJC
bG9jayogdG9CbG9jaywgUmVuZGVyQmxvY2sqIG1pZGRsZUJsb2NrLAotICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckZsb3cqIG9sZENvbnQpOwor
ICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJv
eCogb2xkQ29udCk7CiAgICAgdm9pZCBzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCwgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94LAotICAgICAgICAgICAgICAgICAgIFJlbmRlck9i
amVjdCogbmV3Q2hpbGQsIFJlbmRlckZsb3cqIG9sZENvbnQpOworICAgICAgICAgICAgICAgICAg
IFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlckJveCogb2xkQ29udCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCkgeyB9IC8vIERvIG5vdGhpbmcgZm9yIGxheW91dCgpCiAKQEAgLTYy
LDEwICs2MiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgb2Zmc2V0V2lkdGgoKSBjb25z
dCB7IHJldHVybiBsaW5lc0JvdW5kaW5nQm94KCkud2lkdGgoKTsgfQogICAgIHZpcnR1YWwgaW50
IG9mZnNldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS5oZWlnaHQo
KTsgfQogCi0gICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwg
aW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0
cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYs
IGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpOworICAgIHZp
cnR1YWwgSW50UmVjdCByZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWlu
dENvbnRhaW5lciwgaW50IG91dGxpbmVXaWR0aCk7CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAKQEAgLTc3LDExICs3
OCwyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIGJvdW5kaW5nQm94
LndpZHRoKCksIGJvdW5kaW5nQm94LmhlaWdodCgpKTsKICAgICB9CiAKKyAgICBSZW5kZXJCb3gq
IGNvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludWF0aW9uOyB9CisgICAgUmVu
ZGVySW5saW5lKiBpbmxpbmVDb250aW51YXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRp
bnVhdGlvbihSZW5kZXJCb3gqIGMpIHsgbV9jb250aW51YXRpb24gPSBjOyB9CisgICAgCisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZURyYWdTdGF0ZShib29sIGRyYWdPbik7CisgICAgCisgICAgdmly
dHVhbCB2b2lkIGNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlck9iamVjdCogY2hpbGQpOworCisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEludFBvaW50Jik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoUmVuZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKICAg
ICBzdGF0aWMgUmVuZGVySW5saW5lKiBjbG9uZUlubGluZShSZW5kZXJGbG93KiBzcmMpOwogCitw
cml2YXRlOgorICAgIFJlbmRlckJveCogbV9jb250aW51YXRpb247IC8vIENhbiBiZSBlaXRoZXIg
YSBibG9jayBvciBhbiBpbmxpbmUuIDxiPjxpPjxwPkhlbGxvPC9wPjwvaT48L2I+LiBJbiB0aGlz
IGV4YW1wbGUgdGhlIDxpPiB3aWxsIGhhdmUgYSBibG9jayBhcyBpdHMgY29udGludWF0aW9uIGJ1
dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8Yj4gd2lsbCBqdXN0IGhh
dmUgYW4gaW5saW5lIGFzIGl0cyBjb250aW51YXRpb24uCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDAzMDEpCisrKyByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDExICsyMjcsNiBAQCBib29s
IFJlbmRlck9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIFJlbmRlck9iamVjdDo6aXNJbmxpbmVDb250aW51YXRpb24oKSBjb25zdAotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJPYmplY3Q6OmFkZENoaWxkKFJlbmRl
ck9iamVjdCosIFJlbmRlck9iamVjdCopCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0xNzQ2LDggKzE3NDEsNyBAQCBib29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0
SWZOCiAKICAgICAvLyBXZSBkaWRuJ3QgbW92ZSwgYnV0IHdlIGRpZCBjaGFuZ2Ugc2l6ZS4gIElu
dmFsaWRhdGUgdGhlIGRlbHRhLCB3aGljaCB3aWxsIGNvbnNpc3Qgb2YgcG9zc2libHkKICAgICAv
LyB0d28gcmVjdGFuZ2xlcyAoYnV0IHR5cGljYWxseSBvbmx5IG9uZSkuCi0gICAgUmVuZGVyRmxv
dyogY29udGludWF0aW9uID0gdmlydHVhbENvbnRpbnVhdGlvbigpOwotICAgIFJlbmRlclN0eWxl
KiBvdXRsaW5lU3R5bGUgPSAhaXNJbmxpbmUoKSAmJiBjb250aW51YXRpb24gPyBjb250aW51YXRp
b24tPnN0eWxlKCkgOiBzdHlsZSgpOworICAgIFJlbmRlclN0eWxlKiBvdXRsaW5lU3R5bGUgPSBv
dXRsaW5lU3R5bGVGb3JSZXBhaW50KCk7CiAgICAgaW50IG93ID0gb3V0bGluZVN0eWxlLT5vdXRs
aW5lU2l6ZSgpOwogICAgIFNoYWRvd0RhdGEqIGJveFNoYWRvdyA9IHN0eWxlKCktPmJveFNoYWRv
dygpOwogICAgIGludCB3aWR0aCA9IGFicyhuZXdPdXRsaW5lQm94LndpZHRoKCkgLSBvbGRPdXRs
aW5lQm94LndpZHRoKCkpOwpAQCAtMTgwOSwxNyArMTgwMyw2IEBAIEludFJlY3QgUmVuZGVyT2Jq
ZWN0OjpyZWN0V2l0aE91dGxpbmVGb3IKIHsKICAgICBJbnRSZWN0IHIoY2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcikpOwogICAgIHIuaW5mbGF0ZShvdXRsaW5l
V2lkdGgpOwotCi0gICAgaWYgKHZpcnR1YWxDb250aW51YXRpb24oKSAmJiAhaXNJbmxpbmUoKSkK
LSAgICAgICAgci5pbmZsYXRlWSh0b1JlbmRlckJveCh0aGlzKS0+Y29sbGFwc2VkTWFyZ2luVG9w
KCkpOwotCi0gICAgaWYgKGlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGlu
ZygpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpKQotICAgICAgICAgICAgICAg
IHIudW5pdGUoY3Vyci0+cmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChyZXBhaW50Q29udGFpbmVy
LCBvdXRsaW5lV2lkdGgpKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHJldHVybiByOwogfQog
CkBAIC0xOTY4LDI2ICsxOTUxLDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmhhbmRsZUR5bmFtaWNG
bG9hdFBvcwogICAgIC8vIGNoaWxkcmVuSW5saW5lKCkgc3RhdGUgYW5kIG91ciBzdGF0ZS4KICAg
ICBzZXRJbmxpbmUoc3R5bGUoKS0+aXNEaXNwbGF5SW5saW5lVHlwZSgpKTsKICAgICBpZiAoaXNJ
bmxpbmUoKSAhPSBwYXJlbnQoKS0+Y2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICBpZiAoIWlz
SW5saW5lKCkpIHsKLSAgICAgICAgICAgIGlmIChwYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSkg
ewotICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gc3BsaXQgdGhlIHBhcmVudCBmbG93Lgot
ICAgICAgICAgICAgICAgIFJlbmRlcklubGluZSogcGFyZW50SW5saW5lID0gc3RhdGljX2Nhc3Q8
UmVuZGVySW5saW5lKj4ocGFyZW50KCkpOwotICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBu
ZXdCb3ggPSBwYXJlbnRJbmxpbmUtPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0KLSAgICAgICAg
ICAgICAgICBSZW5kZXJGbG93KiBvbGRDb250aW51YXRpb24gPSBwYXJlbnRJbmxpbmUtPmNvbnRp
bnVhdGlvbigpOwotICAgICAgICAgICAgICAgIHBhcmVudElubGluZS0+c2V0Q29udGludWF0aW9u
KG5ld0JveCk7Ci0KLSAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0g
bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGROb2Rl
KHRoaXMpOwotICAgICAgICAgICAgICAgIHBhcmVudElubGluZS0+c3BsaXRGbG93KGJlZm9yZUNo
aWxkLCBuZXdCb3gsIHRoaXMsIG9sZENvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKHBhcmVudCgpLT5pc1JlbmRlckJsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJC
bG9jayogbyA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ocGFyZW50KCkpOwotICAgICAgICAg
ICAgICAgIG8tPm1ha2VDaGlsZHJlbk5vbklubGluZSgpOwotICAgICAgICAgICAgICAgIGlmIChv
LT5pc0Fub255bW91c0Jsb2NrKCkgJiYgby0+cGFyZW50KCkpCi0gICAgICAgICAgICAgICAgICAg
IG8tPnBhcmVudCgpLT5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKG8pOwotICAgICAgICAg
ICAgICAgIC8vIG8gbWF5IGJlIGRlYWQgaGVyZQotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgeworICAgICAgICBpZiAoIWlzSW5saW5lKCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJCb3gqPihwYXJlbnQoKSktPmNoaWxkQmVjYW1lTm9uSW5saW5lKHRoaXMpOworICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIC8vIEFuIGFub255bW91cyBibG9jayBtdXN0IGJlIG1hZGUg
dG8gd3JhcCB0aGlzIGlubGluZS4KICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBib3ggPSBjcmVh
dGVBbm9ueW1vdXNCbG9jaygpOwogICAgICAgICAgICAgcGFyZW50KCktPmluc2VydENoaWxkTm9k
ZShib3gsIHRoaXMpOwpAQCAtMjI2MSwxMyArMjIyNyw2IEBAIFJlbmRlck9iamVjdCogUmVuZGVy
T2JqZWN0Ojpjb250YWluZXIoKSAKICAgICByZXR1cm4gbzsKIH0KIAotLy8gVGhpcyBjb2RlIGhh
cyBiZWVuIHdyaXR0ZW4gdG8gYW50aWNpcGF0ZSB0aGUgYWRkaXRpb24gb2YgQ1NTMy06Om91dHNp
ZGUgYW5kIDo6aW5zaWRlIGdlbmVyYXRlZAotLy8gY29udGVudCAoYW5kIHBlcmhhcHMgWEJMKS4g
IFRoYXQncyB3aHkgaXQgdXNlcyB0aGUgcmVuZGVyIHRyZWUgYW5kIG5vdCB0aGUgRE9NIHRyZWUu
Ci1SZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6aG92ZXJBbmNlc3RvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICghaXNJbmxpbmUoKSAmJiB2aXJ0dWFsQ29udGludWF0aW9uKCkpID8gdmlydHVh
bENvbnRpbnVhdGlvbigpIDogcGFyZW50KCk7Ci19Ci0KIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1Nl
bGVjdGlvbkJvcmRlcigpIGNvbnN0CiB7CiAgICAgU2VsZWN0aW9uU3RhdGUgc3QgPSBzZWxlY3Rp
b25TdGF0ZSgpOwpAQCAtMjM4NCw5ICsyMzQzLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnVwZGF0
ZURyYWdTdGF0ZShib29sIAogICAgICAgICBlbGVtZW50KCktPnNldENoYW5nZWQoKTsKICAgICBm
b3IgKFJlbmRlck9iamVjdCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnItPnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOwot
ICAgIFJlbmRlckZsb3cqIGNvbnRpbnVhdGlvbiA9IHZpcnR1YWxDb250aW51YXRpb24oKTsKLSAg
ICBpZiAoY29udGludWF0aW9uKQotICAgICAgICBjb250aW51YXRpb24tPnVwZGF0ZURyYWdTdGF0
ZShkcmFnT24pOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aGl0VGVzdChjb25zdCBIaXRUZXN0
UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYg
cG9pbnQsIGludCB0eCwgaW50IHR5LCBIaXRUZXN0RmlsdGVyIGhpdFRlc3RGaWx0ZXIpCkBAIC0y
NDE4LDMzICsyMzc0LDExIEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0
KEgKICAgICAgICAgcmV0dXJuOwogCiAgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQoKTsKLSAgICBJ
bnRQb2ludCBsb2NhbFBvaW50KHBvaW50KTsKLSAgICBpZiAoaXNSZW5kZXJWaWV3KCkpCi0gICAg
ICAgIG5vZGUgPSBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICBlbHNlIGlmICgh
aXNJbmxpbmUoKSAmJiB2aXJ0dWFsQ29udGludWF0aW9uKCkpCi0gICAgICAgIC8vIFdlIGFyZSBp
biB0aGUgbWFyZ2lucyBvZiBibG9jayBlbGVtZW50cyB0aGF0IGFyZSBwYXJ0IG9mIGEgY29udGlu
dWF0aW9uLiAgSW4KLSAgICAgICAgLy8gdGhpcyBjYXNlIHdlJ3JlIGFjdHVhbGx5IHN0aWxsIGlu
c2lkZSB0aGUgZW5jbG9zaW5nIGlubGluZSBlbGVtZW50IHRoYXQgd2FzCi0gICAgICAgIC8vIHNw
bGl0LiAgR28gYWhlYWQgYW5kIHNldCBvdXIgaW5uZXIgbm9kZSBhY2NvcmRpbmdseS4KLSAgICAg
ICAgbm9kZSA9IHZpcnR1YWxDb250aW51YXRpb24oKS0+ZWxlbWVudCgpOwotCiAgICAgaWYgKG5v
ZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+
dmlydHVhbENvbnRpbnVhdGlvbigpICYmIG5vZGUtPnJlbmRlcmVyKCkgIT0gdGhpcykgewotICAg
ICAgICAgICAgLy8gV2UncmUgaW4gdGhlIGNvbnRpbnVhdGlvbiBvZiBhIHNwbGl0IGlubGluZS4g
IEFkanVzdCBvdXIgbG9jYWwgcG9pbnQgdG8gYmUgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2UKLSAg
ICAgICAgICAgIC8vIG9mIHRoZSBwcmluY2lwYWwgcmVuZGVyZXIncyBjb250YWluaW5nIGJsb2Nr
LiAgVGhpcyB3aWxsIGVuZCB1cCBiZWluZyB0aGUgaW5uZXJOb25TaGFyZWROb2RlLgotICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIGZpcnN0QmxvY2sgPSBub2RlLT5yZW5kZXJlcigpLT5jb250YWlu
aW5nQmxvY2soKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IG91ciBjb250YWlu
aW5nIGJsb2NrLgotICAgICAgICAgICAgUmVuZGVyQm94KiBibG9jayA9IHRvUmVuZGVyQm94KHRo
aXMpOwotICAgICAgICAgICAgaWYgKGlzSW5saW5lKCkpCi0gICAgICAgICAgICAgICAgYmxvY2sg
PSBjb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgCi0gICAgICAgICAgICBsb2NhbFBvaW50Lm1v
dmUoYmxvY2stPngoKSAtIGZpcnN0QmxvY2stPngoKSwgYmxvY2stPnkoKSAtIGZpcnN0QmxvY2st
PnkoKSk7Ci0gICAgICAgIH0KLQogICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUpOwog
ICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgICAgIHJl
c3VsdC5zZXRJbm5lck5vblNoYXJlZE5vZGUobm9kZSk7Ci0gICAgICAgIHJlc3VsdC5zZXRMb2Nh
bFBvaW50KGxvY2FsUG9pbnQpOworICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChwb2ludCk7
CiAgICAgfQogfQogCkBAIC0yNjczLDggKzI2MDcsOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0
VGV4dERlY29yYXRpb25Db2xvCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY3Vy
ciA9IGN1cnItPnBhcmVudCgpOwotICAgICAgICBpZiAoY3VyciAmJiBjdXJyLT5pc1JlbmRlckJs
b2NrKCkgJiYgY3Vyci0+dmlydHVhbENvbnRpbnVhdGlvbigpKQotICAgICAgICAgICAgY3VyciA9
IGN1cnItPnZpcnR1YWxDb250aW51YXRpb24oKTsKKyAgICAgICAgaWYgKGN1cnIgJiYgY3Vyci0+
aXNSZW5kZXJCbG9jaygpICYmIHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY3VyciktPmlubGlu
ZUNvbnRpbnVhdGlvbigpKQorICAgICAgICAgICAgY3VyciA9IHN0YXRpY19jYXN0PFJlbmRlckJs
b2NrKj4oY3VyciktPmlubGluZUNvbnRpbnVhdGlvbigpOwogICAgIH0gd2hpbGUgKGN1cnIgJiYg
ZGVjb3JhdGlvbnMgJiYgKCFxdWlya3NNb2RlIHx8ICFjdXJyLT5lbGVtZW50KCkgfHwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWN1cnItPmVsZW1lbnQoKS0+aGFzVGFn
TmFtZShhVGFnKSAmJiAhY3Vyci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKGZvbnRUYWcpKSkpOwog
CkBAIC0yODIwLDcgKzI3NTQsNyBAQCBpbnQgUmVuZGVyT2JqZWN0OjpuZXh0T2Zmc2V0KGludCBj
dXJyZW50CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjphZGp1c3RSZWN0Rm9yT3V0bGluZUFuZFNoYWRv
dyhJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIGludCBvdXRsaW5lU2l6ZSA9ICFpc0lubGlu
ZSgpICYmIHZpcnR1YWxDb250aW51YXRpb24oKSA/IHZpcnR1YWxDb250aW51YXRpb24oKS0+c3R5
bGUoKS0+b3V0bGluZVNpemUoKSA6IHN0eWxlKCktPm91dGxpbmVTaXplKCk7CisgICAgaW50IG91
dGxpbmVTaXplID0gb3V0bGluZVN0eWxlRm9yUmVwYWludCgpLT5vdXRsaW5lU2l6ZSgpOwogICAg
IGlmIChTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSBzdHlsZSgpLT5ib3hTaGFkb3coKSkgewogICAg
ICAgICBpbnQgc2hhZG93TGVmdCA9IDA7CiAgICAgICAgIGludCBzaGFkb3dSaWdodCA9IDA7Cklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCShyZXZpc2lvbiA0MDMwMSkKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDcgKzI0OCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaXNGcmFtZVNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzSW5saW5lQ29udGludWF0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzTGlzdEJveCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzTGlzdEl0ZW0oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0xpc3RNYXJrZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMjc4LDggKzI3Nyw2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRyZW5JbmxpbmUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGlsZHJlbklubGluZShib29sKSB7IH0K
IAotICAgIHZpcnR1YWwgUmVuZGVyRmxvdyogdmlydHVhbENvbnRpbnVhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KLQogI2lmIEVOQUJMRShTVkcpCiAgICAgdmlydHVhbCBib29sIGlzU1ZHUm9v
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHQ29udGFp
bmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTMwMSw3ICsyOTgsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gbV9pc0Fub255bW91cyAmJiBzdHlsZSgpLT5kaXNwbGF5
KCkgPT0gQkxPQ0sgJiYgc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gUmVuZGVyU3R5bGU6Ok5PUFNF
VURPICYmICFpc0xpc3RNYXJrZXIoKTsKICAgICB9Ci0KKyAgICBib29sIGlzSW5saW5lQ29udGlu
dWF0aW9uKCkgY29uc3QgeyByZXR1cm4gaXNJbmxpbmUoKSAmJiBpc0JveCgpICYmIChlbGVtZW50
KCkgPyBlbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gdGhpcyA6IGZhbHNlKTsgfQogICAgIGJvb2wg
aXNGbG9hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZmxvYXRpbmc7IH0KICAgICBib29sIGlzUG9z
aXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb25lZDsgfSAvLyBhYnNvbHV0ZSBvciBm
aXhlZCBwb3NpdGlvbmluZwogICAgIGJvb2wgaXNSZWxQb3NpdGlvbmVkKCkgY29uc3QgeyByZXR1
cm4gbV9yZWxQb3NpdGlvbmVkOyB9IC8vIHJlbGF0aXZlIHBvc2l0aW9uaW5nCkBAIC0zNDEsNyAr
MzM4LDcgQEAgcHVibGljOgogICAgIFJlbmRlclN0eWxlKiBnZXRDYWNoZWRQc2V1ZG9TdHlsZShS
ZW5kZXJTdHlsZTo6UHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDApIGNvbnN0
OwogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFVuY2FjaGVkUHNldWRvU3R5bGUoUmVu
ZGVyU3R5bGU6OlBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwKSBjb25zdDsK
ICAgICAKLSAgICB2b2lkIHVwZGF0ZURyYWdTdGF0ZShib29sIGRyYWdPbik7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZURyYWdTdGF0ZShib29sIGRyYWdPbik7CiAKICAgICBSZW5kZXJWaWV3KiB2
aWV3KCkgY29uc3Q7CiAKQEAgLTM1OSw3ICszNTYsNyBAQCBwdWJsaWM6CiAgICAgICogcG9zaXRp
b25lZCBlbGVtZW50cwogICAgICAqLwogICAgIFJlbmRlck9iamVjdCogY29udGFpbmVyKCkgY29u
c3Q7Ci0gICAgUmVuZGVyT2JqZWN0KiBob3ZlckFuY2VzdG9yKCkgY29uc3Q7CisgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QqIGhvdmVyQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKTsg
fQogCiAgICAgdm9pZCBtYXJrQ29udGFpbmluZ0Jsb2Nrc0ZvckxheW91dChib29sIHNjaGVkdWxl
UmVsYXlvdXQgPSB0cnVlLCBSZW5kZXJPYmplY3QqIG5ld1Jvb3QgPSAwKTsKICAgICB2b2lkIHNl
dE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUpOwpAQCAtNDg1LDcg
KzQ4Miw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGludCB0eCwgaW50IHR5LCBIaXRU
ZXN0RmlsdGVyID0gSGl0VGVzdEFsbCk7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4
LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwotICAgIHZvaWQgdXBkYXRlSGl0VGVzdFJlc3VsdChI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
SGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZp
cnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5
KTsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYp
OwpAQCAtNTUzLDcgKzU1MCwxMSBAQCBwdWJsaWM6CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQogICAgIFJlbmRlclN0eWxlKiBmaXJzdExp
bmVTdHlsZSgpIGNvbnN0OwogICAgIFJlbmRlclN0eWxlKiBzdHlsZShib29sIGZpcnN0TGluZSkg
Y29uc3QgeyByZXR1cm4gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxlKCk7IH0K
LQorICAgIAorICAgIC8vIEFub255bW91cyBibG9ja3MgdGhhdCBhcmUgcGFydCBvZiBvZiBhIGNv
bnRpbnVhdGlvbiBjaGFpbiB3aWxsIHJldHVybiB0aGVpciBpbmxpbmUgY29udGludWF0aW9uJ3Mg
b3V0bGluZSBzdHlsZSBpbnN0ZWFkLgorICAgIC8vIFRoaXMgaXMgdHlwaWNhbGx5IG9ubHkgcmVs
ZXZhbnQgd2hlbiByZXBhaW50aW5nLgorICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIG91dGxpbmVT
dHlsZUZvclJlcGFpbnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpOyB9CisgICAgCiAgICAgdm9p
ZCBnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhpbnQgZGVjb3JhdGlvbnMsIENvbG9yJiB1bmRlcmxp
bmUsIENvbG9yJiBvdmVybGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bG9yJiBsaW5ldGhyb3VnaCwgYm9vbCBxdWlya3NNb2RlID0gZmFsc2UpOwogCkBAIC01OTgsOSAr
NTk5LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KDApOwogICAgIH0KLSAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyKTsKLSAgICAKLSAg
ICBJbnRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29u
dGFpbmVyLCBpbnQgb3V0bGluZVdpZHRoKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgY2xpcHBlZE92
ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyKTsgICAgCisg
ICAgdmlydHVhbCBJbnRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoUmVuZGVyQm94KiBy
ZXBhaW50Q29udGFpbmVyLCBpbnQgb3V0bGluZVdpZHRoKTsKIAogICAgIC8vIEdpdmVuIGEgcmVj
dCBpbiB0aGUgb2JqZWN0J3MgY29vcmRpbmF0ZSBzcGFjZSwgY29tcHV0ZSBhIHJlY3Qgc3VpdGFi
bGUgZm9yIHJlcGFpbnRpbmcKICAgICAvLyB0aGF0IHJlY3QgaW4gdmlldyBjb29yZGluYXRlcy4K
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDQwMzAxKQorKysgcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNjExLDQgKzYxMiwxOCBAQCB2b2lkIFJlbmRlclZpZXc6OnB1
c2hMYXlvdXRTdGF0ZShSZW5kZXJPCiAgICAgbV9sYXlvdXRTdGF0ZSA9IG5ldyAocmVuZGVyQXJl
bmEoKSkgTGF5b3V0U3RhdGUocm9vdCk7CiB9CiAKK3ZvaWQgUmVuZGVyVmlldzo6dXBkYXRlSGl0
VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2ludCkK
K3sKKyAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBO
b2RlKiBub2RlID0gZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgaWYgKG5vZGUp
IHsKKyAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShub2RlKTsKKyAgICAgICAgaWYgKCFyZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCisgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb25T
aGFyZWROb2RlKG5vZGUpOworICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChwb2ludCk7Cisg
ICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDQw
MzAxKQorKysgcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYg
KzE0NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpc2FibGVMYXlvdXRTdGF0ZSgpIHsgbV9sYXlv
dXRTdGF0ZURpc2FibGVDb3VudCsrOyB9CiAgICAgdm9pZCBlbmFibGVMYXlvdXRTdGF0ZSgpIHsg
QVNTRVJUKG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQgPiAwKTsgbV9sYXlvdXRTdGF0ZURpc2Fi
bGVDb3VudC0tOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSGl0VGVzdFJlc3VsdChIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmKTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
RmxvYXRRdWFkIGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIFJlbmRlckJv
eCogcmVwYWludENvbnRhaW5lciwgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKIAo=
</data>
<flag name="review"
          id="13009"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27092</attachid>
            <date>2009-01-27 17:31:11 -0800</date>
            <delta_ts>2009-01-27 20:56:39 -0800</delta_ts>
            <desc>Patch that shrinks RenderInline/Block by 4 bytes! :)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>118219</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwMzA0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTk1IEBACisyMDA5LTAx
LTI3ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBXb3JrIHRvd2Fy
ZHMgZWxpbWluYXRpbmcgUmVuZGVyRmxvdyBmcm9tIHRoZSB0cmVlLgorICAgICAgICAKKyAgICAg
ICAgTW92ZSB0aGUgbV9jb250aW51YXRpb24gdmFyaWFibGUgZG93biBmcm9tIFJlbmRlckZsb3cg
aW50byBSZW5kZXJJbmxpbmUgYW5kIFJlbmRlckJsb2NrLiAgU2luY2UgYSBibG9jayBjYW4gb25s
eSBoYXZlIGFuIGlubGluZSBjb250aW51YXRpb24gZm9sbG93aW5nIGl0LCB0aGUgdHlwZQorICAg
ICAgICBvZiB0aGUgbWVtYmVyIGFuZCBtZXRob2RzIHJlZmxlY3QgdGhpcyAoaW5saW5lQ29udGlu
dWF0aW9uKCkgYW5kIG1faW5saW5lQ29udGludWF0aW9uKS4gIFNpbmNlIGFuIGlubGluZSBjYW4g
aGF2ZSBlaXRoZXIgYSBibG9jayBvciBhbiBpbmxpbmUgY29udGludWF0aW9uIGZvbGxvd2luZyBp
dCwKKyAgICAgICAgYSBiYXNlIGNsYXNzIG9mIFJlbmRlckJveCogaXMgdXNlZCBmb3IgdGhlIHR5
cGUgb2Ygb2JqZWN0IHJldHVybmVkIChpbiBhbnRpY2lwYXRpb24gb2YgdGhlIHJlbW92YWwgb2Yg
UmVuZGVyRmxvdykuCisgICAgICAgIAorICAgICAgICBTaW5jZSBtb3ZpbmcgdGhlIGNvbnRpbnVh
dGlvbiB2YXJpYWJsZSBkb3duIGludG8gdGhlIHN1YmNsYXNzZXMgaW5jcmVhc2VkIHRoZSBzaXpl
IG9mIFJlbmRlcklubGluZSBhbmQgUmVuZGVyQmxvY2sgYnkgNCBieXRlcywgdGhpcyBwYXRjaCBh
bHNvIG1vdmVzIGFsbCBvZiB0aGUgYml0ZmllbGQKKyAgICAgICAgbWVtYmVycyBvZiBSZW5kZXJG
bG93IHVwIHRvIFJlbmRlck9iamVjdC4gIFNpbmNlIHRoZXkgZml0IHdpdGhpbiB0aGUgYXZhaWxh
YmxlIGJpdHMgb24gUmVuZGVyT2JqZWN0LCB0aGlzIHBhdGNoIGFjdHVhbGx5IHJlc3VsdHMgaW4g
YSBuZXQgc2F2aW5ncyBvZiA0IGJ5dGVzIG9uIFJlbmRlcklubGluZXMKKyAgICAgICAgYW5kIFJl
bmRlckJsb2NrcyEKKyAgICAgICAgCisgICAgICAgIE9uZSBiaXRmaWVsZCBtZW1iZXIgd2FzIGVs
aW1pbmF0ZWQgcmF0aGVyIHRoYW4gbW92ZWQ6IG1fZmlyc3RMaW5lLiAgVGhpcyB3YXMgcmVhbGx5
IG1vcmUgb2YgYSBzdGF0ZSB2YXJpYWJsZSB1c2VkIGR1cmluZyBsaW5lIGxheW91dCBvbmx5LCBz
byBJIHJlbW92ZWQgaXQgYXMgYSBtZW1iZXIKKyAgICAgICAgYW5kIGp1c3QgcGFzc2VkIGZpcnN0
TGluZSBkb3duIHRvIHZhcmlvdXMgbWV0aG9kcyBhcyBuZWVkZWQuICBEb2luZyBzbyB1bmNvdmVy
ZWQgc29tZSBwb3RlbnRpYWwgYnVncyB3aGVyZSB0aGUgZmlyc3QgbGluZSBzdGF0ZSB3YXMgbm90
IGJlaW5nIHJlc3BlY3RlZCB3aGVuIHF1ZXJ5aW5nIGZvcgorICAgICAgICBsaW5lIG9mZnNldHMu
CisKKyAgICAgICAgQ29udGludWF0aW9ucyBoYXZlIGJlZW4gY29tcGxldGVseSBoaWRkZW4gZnJv
bSBhbGwgZmlsZXMgZXhjZXB0IGZvciBSZW5kZXJGbG93LCBSZW5kZXJCbG9jayBhbmQgUmVuZGVy
SW5saW5lLiAgQWxsIG9mIHRoZSBjb2RlIHRoYXQgcmVmZXJlbmNlZCBjb250aW51YXRpb25zIGRp
cmVjdGx5CisgICAgICAgIGZyb20gYmFzZSBjbGFzc2VzIGhhcyBiZWVuIHJlZmFjdG9yZWQgdG8g
dXNlIHZpcnR1YWwgbWV0aG9kcyBvbiBSZW5kZXJCbG9jayBhbmQgUmVuZGVySW5saW5lIGluc3Rl
YWQuCisgICAgICAgIAorICAgICAgICBSZW5kZXJGbG93IHN0aWxsIGhhcyBhIGNvbW1vbiBhZGRD
aGlsZFdpdGhDb250aW51YXRpb24gbWV0aG9kIHRoYXQgaXMgdXNlZCBieSBib3RoIGJsb2NrcyBh
bmQgaW5saW5lcy4gIFNpbmNlIHJlZmFjdG9yaW5nIHRoYXQgbWV0aG9kIHdpbGwgYmUgcHJldHR5
IHRyaWNreSwgSSd2ZSBoZWxkCisgICAgICAgIG9mZiBvbiB0aGF0IGZvciBhIGxhdGVyIHBhdGNo
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHRt
bC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxl
bWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZSk6CisgICAgICAgICogcGFnZS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmFuY2hvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Ym91bmRpbmdCb3hSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpkZXRlcm1pbmVT
cGFjaW5nRm9yRmxvd0JveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OlJlbmRlckJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjp+UmVuZGVyQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmRl
c3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZENoaWxkVG9GbG93KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjptYWtlQ2hpbGRyZW5Ob25JbmxpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6ZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmRldGVybWluZUhvcml6b250YWxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6c2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRPbmx5UG9zaXRpb25lZE9iamVjdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjphZGRDb250aW51YXRpb25XaXRoT3V0bGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnNob3VsZFBhaW50U2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6ZmlsbFNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmxlZnRTZWxlY3Rpb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnJpZ2h0U2VsZWN0aW9uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpsZWZ0T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsZWZ0UmVs
T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyaWdodE9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmlnaHRSZWxPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bG93ZXN0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnJpZ2h0bW9zdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsZWZ0
bW9zdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRDbGVhckRl
bHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2RlQXRQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6b2Zmc2V0Rm9yQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmF2YWlsYWJsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpzZXREZXNpcmVkQ29sdW1uQ291bnRBbmRXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6ZGVzaXJlZENvbHVtbldpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpkZXNpcmVkQ29sdW1uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmNvbHVtblJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpsYXlvdXRDb2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RQ
b2ludFRvQ29sdW1uQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFk
anVzdFJlY3RGb3JDb2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphYnNv
bHV0ZVJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphYnNvbHV0ZVF1YWRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZWN0V2l0aE91dGxpbmVGb3JSZXBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpob3ZlckFuY2VzdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVEcmFnU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6Om91dGxpbmVTdHlsZUZvclJlcGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNoaWxkQmVjYW1lTm9uSW5saW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyaWdo
dE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGVmdE9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aW5saW5lQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRJbmxpbmVDb250aW51YXRpb24pOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjphYnNvbHV0ZVJlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWJzb2x1dGVR
dWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrV2lkdGgpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6Y29sbGFwc2VkTWFyZ2luQm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y2hpbGRCZWNhbWVOb25JbmxpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250YWlu
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjp1cGRhdGVCZWZvcmVB
ZnRlckNvbnRlbnRGb3JDb250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFp
bmVyOjpyZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVC
b3g6OmxheW91dFZlcnRpY2FsQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3c6OmNvbnRpbnVhdGlvbkJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93OjphZGRDaGlsZFdpdGhDb250aW51YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxvdzo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6ZGVz
dHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93OjphZGRGb2N1c1JpbmdSZWN0cyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZsb3c6OlJlbmRlckZsb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpSZW5kZXJJbmxpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6aW5saW5lQ29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcklubGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5s
aW5lOjphZGRDaGlsZFRvRmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNs
b25lSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6c3BsaXRGbG93KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6cG9zaXRpb25Gb3JDb29yZGluYXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjp1cGRhdGVEcmFnU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW5saW5lOjpjaGlsZEJlY2FtZU5vbklubGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6
aXNSZW5kZXJJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpjb250aW51
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzZXRDb250aW51YXRpb24p
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
TWFya2VyOjpSZW5kZXJMaXN0TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RN
YXJrZXI6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3NpdGlvbkNoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnVwZGF0ZURyYWdTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnVwZGF0ZUhpdFRlc3RSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hh
ZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2hpbGRyZW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpzZXRDaGlsZHJlbklubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6Omhhc0NvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpzZXRIYXNDb2x1bW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2VsbFdp
ZHRoQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldENlbGxXaWR0
aENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc0lubGluZUNvbnRp
bnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmhvdmVyQW5jZXN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpvdXRsaW5lU3R5bGVGb3JSZXBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0SGFzTWFya3VwVHJ1bmNhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Omhhc01hcmt1cFRydW5jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25TdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aGFzU2VsZWN0ZWRDaGlsZHJlbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzVG9wTWFyZ2luUXVpcmspOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0Ojppc0JvdHRvbU1hcmdpblF1aXJrKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6c2V0VG9wTWFyZ2luUXVpcmspOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpzZXRCb3R0b21NYXJnaW5RdWlyayk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpSZW5k
ZXJSZXBsYWNlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0
aW9uU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNhbkJlU2VsZWN0aW9uTGVhZik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlOjpjYWxjV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjp1cGRhdGVXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmxheW91dCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6UmVuZGVy
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6
OmNhbkJlU2VsZWN0aW9uTGVhZik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6dXBkYXRlSGl0VGVzdFJlc3VsdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZWxlY3Rp
b25Ub3ApOgorICAgICAgICAqIHJlbmRlcmluZy9iaWRpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpjcmVhdGVMaW5lQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmNvbnN0cnVjdExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNv
bXB1dGVIb3Jpem9udGFsUG9zaXRpb25zRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnNraXBUcmFpbGluZ1doaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnNraXBMZWFkaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6Zml0QmVsb3dGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZp
bmROZXh0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGVja0xp
bmVzRm9yVGV4dE92ZXJmbG93KToKKwogMjAwOS0wMS0yNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEZhbGtlbmJ1cmcuCkluZGV4
OiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAkocmV2aXNpb24gNDAzMDMpCisrKyBodG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDE0ICsxMTEsMTAgQEAgYm9vbCBIVE1MQW5jaG9y
RWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgLy8gQmVmb3JlIGNhbGxpbmcgYWJzb2x1dGVSZWN0cywgY2hlY2sgZm9yIHRoZSBjb21tb24g
Y2FzZSB3aGVyZSB0aGUgcmVuZGVyZXIKLSAgICAvLyBvciBvbmUgb2YgdGhlIGNvbnRpbnVhdGlv
bnMgaXMgbm9uLWVtcHR5LCBzaW5jZSB0aGlzIGlzIGEgZmFzdGVyIGNoZWNrIGFuZAotICAgIC8v
IGFsbW9zdCBhbHdheXMgcmV0dXJucyB0cnVlLgorICAgIC8vIGlzIG5vbi1lbXB0eSwgc2luY2Ug
dGhpcyBpcyBhIGZhc3RlciBjaGVjayBhbmQgYWxtb3N0IGFsd2F5cyByZXR1cm5zIHRydWUuCiAg
ICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChyZW5kZXJlcigpKTsKICAgICBpZiAoIWJv
eC0+Ym9yZGVyQm91bmRpbmdCb3goKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGZvciAoUmVuZGVyRmxvdyogciA9IGJveC0+dmlydHVhbENvbnRpbnVhdGlvbigpOyByOyBy
ID0gci0+Y29udGludWF0aW9uKCkpCi0gICAgICAgIGlmICghci0+Ym9yZGVyQm91bmRpbmdCb3go
KS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFZlY3RvcjxJbnRS
ZWN0PiByZWN0czsKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9B
YnNvbHV0ZSgpOwpJbmRleDogcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBwYWdlL0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA0
MDMwMykKKysrIHBhZ2UvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJGaWVsZHNldC5oIgogI2luY2x1
ZGUgIlJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIK
KyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0Lmgi
CkBAIC00NzAsOSArNDcxLDExIEBAIEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmFuY2gKICAgICAKICAgICAvLyBTZWFyY2ggdXAgdGhlIHJlbmRlciB0cmVlIGZvciBhIFJlbmRl
ck9iamVjdCB3aXRoIGEgRE9NIG5vZGUuICBEZWZlciB0byBhbiBlYXJsaWVyIGNvbnRpbnVhdGlv
biwgdGhvdWdoLgogICAgIGZvciAoY3VyclJlbmRlcmVyID0gbV9yZW5kZXJlcjsgY3VyclJlbmRl
cmVyICYmICFjdXJyUmVuZGVyZXItPmVsZW1lbnQoKTsgY3VyclJlbmRlcmVyID0gY3VyclJlbmRl
cmVyLT5wYXJlbnQoKSkgewotICAgICAgICBSZW5kZXJGbG93KiBjb250aW51YXRpb24gPSBjdXJy
UmVuZGVyZXItPnZpcnR1YWxDb250aW51YXRpb24oKTsKLSAgICAgICAgaWYgKGNvbnRpbnVhdGlv
bikKLSAgICAgICAgICAgIHJldHVybiBjYWNoZS0+Z2V0KGNvbnRpbnVhdGlvbiktPmFuY2hvckVs
ZW1lbnQoKTsKKyAgICAgICAgaWYgKGN1cnJSZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpKSB7Cisg
ICAgICAgICAgICBSZW5kZXJJbmxpbmUqIGNvbnRpbnVhdGlvbiA9IHN0YXRpY19jYXN0PFJlbmRl
ckJsb2NrKj4oY3VyclJlbmRlcmVyKS0+aW5saW5lQ29udGludWF0aW9uKCk7CisgICAgICAgICAg
ICBpZiAoY29udGludWF0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZS0+Z2V0KGNv
bnRpbnVhdGlvbiktPmFuY2hvckVsZW1lbnQoKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAg
ICAvLyBiYWlsIGlmIG5vbmUgZm91bmQKQEAgLTk0NCw3ICs5NDcsNyBAQCBJbnRSZWN0IEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kCiAgICAgaWYgKCFvYmopCiAgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CiAgICAgCi0gICAgaWYgKG9iai0+aXNJbmxpbmVDb250aW51YXRpb24oKSkK
KyAgICBpZiAob2JqLT5lbGVtZW50KCkpIC8vIElmIHdlIGFyZSBhIGNvbnRpbnVhdGlvbiwgd2Ug
d2FudCB0byBtYWtlIHN1cmUgdG8gdXNlIHRoZSBwcmltYXJ5IHJlbmRlcmVyLgogICAgICAgICBv
YmogPSBvYmotPmVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICAKICAgICAvLyBGSVhNRTogVGhp
cyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KSW5kZXg6IHJlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5jcHAJKHJldmlzaW9uIDQwMzAzKQorKysgcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5o
IgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvdy5oIgorI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCkBA
IC0yNDcsMTMgKzI0OCwxNCBAQCB2b2lkIElubGluZUZsb3dCb3g6OmRldGVybWluZVNwYWNpbmdG
b3JGCiAgICAgICAgIC8vICgzKSBUaGUgbGluZSBtYXkgZW5kIG9uIHRoZSBpbmxpbmUuICBJZiB3
ZSBhcmUgdGhlIGxhc3QgY2hpbGQgKGNsaW1iaW5nIHVwCiAgICAgICAgIC8vIHRoZSBlbmQgb2Jq
ZWN0J3MgY2hhaW4pLCB0aGVuIHdlIGp1c3QgY2xvc2VkIGFzIHdlbGwuCiAgICAgICAgIGlmICgh
Zmxvdy0+bGFzdExpbmVCb3goKS0+aXNDb25zdHJ1Y3RlZCgpKSB7CisgICAgICAgICAgICBSZW5k
ZXJJbmxpbmUqIGlubGluZUZsb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbmxpbmUqPihmbG93KTsK
ICAgICAgICAgICAgIGlmIChsdHIpIHsKICAgICAgICAgICAgICAgICBpZiAoIW5leHRMaW5lQm94
KCkgJiYKLSAgICAgICAgICAgICAgICAgICAgKChsYXN0TGluZSAmJiAhZmxvdy0+Y29udGludWF0
aW9uKCkpIHx8IG5leHRPbkxpbmVFeGlzdHMoKSB8fCBvbkVuZENoYWluKGVuZE9iamVjdCkpKQor
ICAgICAgICAgICAgICAgICAgICAoKGxhc3RMaW5lICYmICFpbmxpbmVGbG93LT5jb250aW51YXRp
b24oKSkgfHwgbmV4dE9uTGluZUV4aXN0cygpIHx8IG9uRW5kQ2hhaW4oZW5kT2JqZWN0KSkpCiAg
ICAgICAgICAgICAgICAgICAgIGluY2x1ZGVSaWdodEVkZ2UgPSB0cnVlOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoKCFwcmV2TGluZUJveCgpIHx8IHByZXZMaW5l
Qm94KCktPmlzQ29uc3RydWN0ZWQoKSkgJiYKLSAgICAgICAgICAgICAgICAgICAgKChsYXN0TGlu
ZSAmJiAhZmxvdy0+Y29udGludWF0aW9uKCkpIHx8IHByZXZPbkxpbmVFeGlzdHMoKSB8fCBvbkVu
ZENoYWluKGVuZE9iamVjdCkpKQorICAgICAgICAgICAgICAgICAgICAoKGxhc3RMaW5lICYmICFp
bmxpbmVGbG93LT5jb250aW51YXRpb24oKSkgfHwgcHJldk9uTGluZUV4aXN0cygpIHx8IG9uRW5k
Q2hhaW4oZW5kT2JqZWN0KSkpCiAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVMZWZ0RWRnZSA9
IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTYyNSwxMiArNjI3LDEzIEBAIHZv
aWQgSW5saW5lRmxvd0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAgICAgICAgIC8vIEFk
ZCBvdXJzZWx2ZXMgdG8gdGhlIHBhaW50IGluZm8gc3RydWN0J3MgbGlzdCBvZiBpbmxpbmVzIHRo
YXQgbmVlZCB0byBwYWludCB0aGVpcgogICAgICAgICAgICAgLy8gb3V0bGluZXMuCiAgICAgICAg
ICAgICBpZiAob2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIG9i
amVjdCgpLT5oYXNPdXRsaW5lKCkgJiYgIWlzUm9vdElubGluZUJveCgpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKChmbG93T2JqZWN0KCktPmNvbnRpbnVhdGlvbigpIHx8IG9iamVjdCgpLT5pc0lu
bGluZUNvbnRpbnVhdGlvbigpKSAmJiAhb2JqZWN0KCktPmhhc0xheWVyKCkpIHsKKyAgICAgICAg
ICAgICAgICBSZW5kZXJJbmxpbmUqIGlubGluZUZsb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbmxp
bmUqPihvYmplY3QoKSk7CisgICAgICAgICAgICAgICAgaWYgKChpbmxpbmVGbG93LT5jb250aW51
YXRpb24oKSB8fCBpbmxpbmVGbG93LT5pc0lubGluZUNvbnRpbnVhdGlvbigpKSAmJiAhb2JqZWN0
KCktPmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIG91cnNlbHZlcyB0
byB0aGUgY29udGFpbmluZyBibG9jayBvZiB0aGUgZW50aXJlIGNvbnRpbnVhdGlvbiBzbyB0aGF0
IGl0IGNhbgogICAgICAgICAgICAgICAgICAgICAvLyBwYWludCB1cyBhdG9taWNhbGx5LgogICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBvYmplY3QoKS0+Y29udGFpbmlu
Z0Jsb2NrKCktPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBibG9jay0+
YWRkQ29udGludWF0aW9uV2l0aE91dGxpbmUoc3RhdGljX2Nhc3Q8UmVuZGVyRmxvdyo+KG9iamVj
dCgpLT5lbGVtZW50KCktPnJlbmRlcmVyKCkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCFvYmplY3QoKS0+aXNJbmxpbmVDb250aW51YXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAg
YmxvY2stPmFkZENvbnRpbnVhdGlvbldpdGhPdXRsaW5lKHN0YXRpY19jYXN0PFJlbmRlcklubGlu
ZSo+KG9iamVjdCgpLT5lbGVtZW50KCktPnJlbmRlcmVyKCkpKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCFpbmxpbmVGbG93LT5pc0lubGluZUNvbnRpbnVhdGlvbigpKQogICAgICAgICAg
ICAgICAgICAgICBwYWludEluZm8ub3V0bGluZU9iamVjdHMtPmFkZChmbG93T2JqZWN0KCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlTWFzaykgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA0MDMwMykKKysrIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0xMTMsMTIgKzExNCwxNCBAQCBSZW5kZXJC
bG9jazo6UmVuZGVyQmxvY2soTm9kZSogbm9kZSkKICAgICAgIDogUmVuZGVyRmxvdyhub2RlKQog
ICAgICAgLCBtX2Zsb2F0aW5nT2JqZWN0cygwKQogICAgICAgLCBtX3Bvc2l0aW9uZWRPYmplY3Rz
KDApCisgICAgICAsIG1faW5saW5lQ29udGludWF0aW9uKDApCiAgICAgICAsIG1fbWF4TWFyZ2lu
KDApCiAgICAgICAsIG1fb3ZlcmZsb3dIZWlnaHQoMCkKICAgICAgICwgbV9vdmVyZmxvd1dpZHRo
KDApCiAgICAgICAsIG1fb3ZlcmZsb3dMZWZ0KDApCiAgICAgICAsIG1fb3ZlcmZsb3dUb3AoMCkK
IHsKKyAgICBzZXRDaGlsZHJlbklubGluZSh0cnVlKTsKIH0KIAogUmVuZGVyQmxvY2s6On5SZW5k
ZXJCbG9jaygpCkBAIC0xMjcsNyArMTMwLDcgQEAgUmVuZGVyQmxvY2s6On5SZW5kZXJCbG9jaygp
CiAgICAgZGVsZXRlIG1fcG9zaXRpb25lZE9iamVjdHM7CiAgICAgZGVsZXRlIG1fbWF4TWFyZ2lu
OwogICAgIAotICAgIGlmIChtX2hhc0NvbHVtbnMpCisgICAgaWYgKGhhc0NvbHVtbnMoKSkKICAg
ICAgICAgZGVsZXRlIGdDb2x1bW5JbmZvTWFwLT50YWtlKHRoaXMpOwogCiAgICAgaWYgKGdQZXJj
ZW50SGVpZ2h0RGVzY2VuZGFudHNNYXApIHsKQEAgLTE1MCw2ICsxNTMsMTYgQEAgUmVuZGVyQmxv
Y2s6On5SZW5kZXJCbG9jaygpCiAgICAgfQogfQogCit2b2lkIFJlbmRlckJsb2NrOjpkZXN0cm95
KCkKK3sKKyAgICAvLyBEZXRhY2ggb3VyIGNvbnRpbnVhdGlvbiBmaXJzdC4KKyAgICBpZiAobV9p
bmxpbmVDb250aW51YXRpb24pCisgICAgICAgIG1faW5saW5lQ29udGludWF0aW9uLT5kZXN0cm95
KCk7CisgICAgbV9pbmxpbmVDb250aW51YXRpb24gPSAwOworICAgIAorICAgIFJlbmRlckZsb3c6
OmRlc3Ryb3koKTsKK30KKwogdm9pZCBSZW5kZXJCbG9jazo6c3R5bGVXaWxsQ2hhbmdlKFJlbmRl
clN0eWxlOjpEaWZmIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKIHsKICAgICBz
ZXRSZXBsYWNlZChuZXdTdHlsZS0+aXNEaXNwbGF5UmVwbGFjZWRUeXBlKCkpOwpAQCAtMjQ5LDcg
KzI2Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkVG9GbG93KFJlbmRlck8KICAgICAv
LyBBIGJsb2NrIGhhcyB0byBlaXRoZXIgaGF2ZSBhbGwgb2YgaXRzIGNoaWxkcmVuIGlubGluZSwg
b3IgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcyBibG9ja3MuCiAgICAgLy8gU28sIGlmIG91ciBjaGls
ZHJlbiBhcmUgY3VycmVudGx5IGlubGluZSBhbmQgYSBibG9jayBjaGlsZCBoYXMgdG8gYmUgaW5z
ZXJ0ZWQsIHdlIG1vdmUgYWxsIG91cgogICAgIC8vIGlubGluZSBjaGlsZHJlbiBpbnRvIGFub255
bW91cyBibG9jayBib3hlcy4KLSAgICBpZiAobV9jaGlsZHJlbklubGluZSAmJiAhbmV3Q2hpbGQt
PmlzSW5saW5lKCkgJiYgIW5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpIHsKKyAg
ICBpZiAoY2hpbGRyZW5JbmxpbmUoKSAmJiAhbmV3Q2hpbGQtPmlzSW5saW5lKCkgJiYgIW5ld0No
aWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgLy8gVGhpcyBpcyBhIGJs
b2NrIHdpdGggaW5saW5lIGNvbnRlbnQuIFdyYXAgdGhlIGlubGluZSBjb250ZW50IGluIGFub255
bW91cyBibG9ja3MuCiAgICAgICAgIG1ha2VDaGlsZHJlbk5vbklubGluZShiZWZvcmVDaGlsZCk7
CiAgICAgICAgIG1hZGVCb3hlc05vbklubGluZSA9IHRydWU7CkBAIC0yNTksNyArMjcyLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRUb0Zsb3coUmVuZGVyTwogICAgICAgICAgICAgQVNT
RVJUKGJlZm9yZUNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpOwogICAgICAgICAgICAgQVNTRVJU
KGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAoIW1fY2hpbGRyZW5JbmxpbmUgJiYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVk
KCkgfHwgbmV3Q2hpbGQtPmlzSW5saW5lKCkpKSB7CisgICAgfSBlbHNlIGlmICghY2hpbGRyZW5J
bmxpbmUoKSAmJiAobmV3Q2hpbGQtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8fCBuZXdDaGls
ZC0+aXNJbmxpbmUoKSkpIHsKICAgICAgICAgLy8gSWYgd2UncmUgaW5zZXJ0aW5nIGFuIGlubGlu
ZSBjaGlsZCBidXQgYWxsIG9mIG91ciBjaGlsZHJlbiBhcmUgYmxvY2tzLCB0aGVuIHdlIGhhdmUg
dG8gbWFrZSBzdXJlCiAgICAgICAgIC8vIGl0IGlzIHB1dCBpbnRvIGFuIGFub215b3VzIGJsb2Nr
IGJveC4gV2UgdHJ5IHRvIHVzZSBhbiBleGlzdGluZyBhbm9ueW1vdXMgYm94IGlmIHBvc3NpYmxl
LCBvdGhlcndpc2UKICAgICAgICAgLy8gYSBuZXcgb25lIGlzIGNyZWF0ZWQgYW5kIGluc2VydGVk
IGludG8gb3VyIGxpc3Qgb2YgY2hpbGRyZW4gaW4gdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uLgpA
QCAtMzUxLDcgKzM2NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1ha2VDaGlsZHJlbk5vbklubGlu
ZSgKICAgICBBU1NFUlQoaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSB8fCAhaXNJbmxpbmUo
KSk7CiAgICAgQVNTRVJUKCFpbnNlcnRpb25Qb2ludCB8fCBpbnNlcnRpb25Qb2ludC0+cGFyZW50
KCkgPT0gdGhpcyk7CiAKLSAgICBtX2NoaWxkcmVuSW5saW5lID0gZmFsc2U7CisgICAgc2V0Q2hp
bGRyZW5JbmxpbmUoZmFsc2UpOwogCiAgICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsKICAgICBpZiAoIWNoaWxkKQpAQCAtMzg4LDcgKzQwMSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6Om1ha2VDaGlsZHJlbk5vbklubGluZSgKICAgICByZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVu
ZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCAqb2xkQ2hpbGQpCit2b2lkIFJlbmRl
ckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QqIG9sZENoaWxkKQogewogICAgIC8vIElm
IHRoaXMgY2hpbGQgaXMgYSBibG9jaywgYW5kIGlmIG91ciBwcmV2aW91cyBhbmQgbmV4dCBzaWJs
aW5ncyBhcmUKICAgICAvLyBib3RoIGFub255bW91cyBibG9ja3Mgd2l0aCBpbmxpbmUgY29udGVu
dCwgdGhlbiB3ZSBjYW4gZ28gYWhlYWQgYW5kCkBAIC0zOTYsNyArNDA5LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZQogICAgIFJlbmRlck9iamVjdCogcHJldiA9
IG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBv
bGRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICBib29sIGNhbkRlbGV0ZUFub255bW91c0Jsb2Nr
cyA9ICFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgIWlzSW5saW5lKCkgJiYgIW9sZENoaWxk
LT5pc0lubGluZSgpICYmIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIW9s
ZENoaWxkLT52aXJ0dWFsQ29udGludWF0aW9uKCkgJiYgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoIW9sZENoaWxkLT5pc1JlbmRlckJsb2NrKCkgfHwgIXN0YXRpY19jYXN0
PFJlbmRlckJsb2NrKj4ob2xkQ2hpbGQpLT5pbmxpbmVDb250aW51YXRpb24oKSkgJiYgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXByZXYgfHwgKHByZXYtPmlzQW5vbnlt
b3VzQmxvY2soKSAmJiBwcmV2LT5jaGlsZHJlbklubGluZSgpKSkgJiYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICghbmV4dCB8fCAobmV4dC0+aXNBbm9ueW1vdXNCbG9jaygp
ICYmIG5leHQtPmNoaWxkcmVuSW5saW5lKCkpKTsKICAgICBpZiAoY2FuRGVsZXRlQW5vbnltb3Vz
QmxvY2tzICYmIHByZXYgJiYgbmV4dCkgewpAQCAtNDI2LDcgKzQzOSw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAgLy8gYm94LgogICAgICAgICBz
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgUmVuZGVyQmxvY2sq
IGFub25CbG9jayA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4ocmVtb3ZlQ2hpbGROb2RlKGNo
aWxkLCBmYWxzZSkpOwotICAgICAgICBtX2NoaWxkcmVuSW5saW5lID0gdHJ1ZTsKKyAgICAgICAg
c2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CiAgICAgICAgIFJlbmRlck9iamVjdCogbyA9IGFub25C
bG9jay0+Zmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAobykgewogICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBubyA9IG87CkBAIC02MTIsNyArNjI1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRSZXBh
aW50ZXIgcmVwYWludGVyKCp0aGlzLCBtX2V2ZXJIYWRMYXlvdXQgJiYgY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkpOwotICAgIExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2
aWV3KCksIHRoaXMsIEludFNpemUoeCgpLCB5KCkpLCBtX2hhc0NvbHVtbnMgfHwgaGFzVHJhbnNm
b3JtKCkgfHwgaGFzUmVmbGVjdGlvbigpKTsKKyAgICBMYXlvdXRTdGF0ZU1haW50YWluZXIgc3Rh
dGVQdXNoZXIodmlldygpLCB0aGlzLCBJbnRTaXplKHgoKSwgeSgpKSwgaGFzQ29sdW1ucygpIHx8
IGhhc1RyYW5zZm9ybSgpIHx8IGhhc1JlZmxlY3Rpb24oKSk7CiAKICAgICBpbnQgb2xkV2lkdGgg
PSB3aWR0aCgpOwogICAgIGludCBvbGRDb2x1bW5XaWR0aCA9IGRlc2lyZWRDb2x1bW5XaWR0aCgp
OwpAQCAtNjQ3LDggKzY2MCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wg
cmVsYXkKICAgICBpZiAoIWlzQ2VsbCkgewogICAgICAgICBpbml0TWF4TWFyZ2luVmFsdWVzKCk7
CiAKLSAgICAgICAgbV90b3BNYXJnaW5RdWlyayA9IHN0eWxlKCktPm1hcmdpblRvcCgpLnF1aXJr
KCk7Ci0gICAgICAgIG1fYm90dG9tTWFyZ2luUXVpcmsgPSBzdHlsZSgpLT5tYXJnaW5Cb3R0b20o
KS5xdWlyaygpOworICAgICAgICBzZXRUb3BNYXJnaW5RdWlyayhzdHlsZSgpLT5tYXJnaW5Ub3Ao
KS5xdWlyaygpKTsKKyAgICAgICAgc2V0Qm90dG9tTWFyZ2luUXVpcmsoc3R5bGUoKS0+bWFyZ2lu
Qm90dG9tKCkucXVpcmsoKSk7CiAKICAgICAgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQoKTsKICAg
ICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShmb3JtVGFnKSAmJiBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnQqPihub2RlKS0+aXNNYWxmb3JtZWQoKSkgewpAQCAtNzc1LDcgKzc4
OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKIAogYm9vbCBS
ZW5kZXJCbG9jazo6ZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSB8fCBpc0Zsb2F0aW5nT3JQ
b3NpdGlvbmVkKCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgKHBhcmVudCgpICYmIHBhcmVudCgp
LT5pc0ZsZXhpYmxlQm94KCkpIHx8IG1faGFzQ29sdW1ucyB8fCBpc1RhYmxlQ2VsbCgpIHx8IGlz
RmllbGRzZXQoKTsKKyAgICByZXR1cm4gaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSB8fCBp
c0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgKHBhcmVudCgp
ICYmIHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkpIHx8IGhhc0NvbHVtbnMoKSB8fCBpc1RhYmxl
Q2VsbCgpIHx8IGlzRmllbGRzZXQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9z
aXRpb25lZEJsb2NrKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbklu
Zm8pCkBAIC05MzksNyArOTUyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5z
KFJlbmRlcgogICAgICAgICAvLyBoYXMgYW4gZXhhbXBsZSBvZiB0aGlzLCBhIDxkdD4gd2l0aCAw
LjhlbSBhdXRob3Itc3BlY2lmaWVkIGluc2lkZQogICAgICAgICAvLyBhIDxkbD4gaW5zaWRlIGEg
PHRkPi4KICAgICAgICAgaWYgKCFtYXJnaW5JbmZvLmRldGVybWluZWRUb3BRdWlyaygpICYmICF0
b3BRdWlyayAmJiAocG9zVG9wLW5lZ1RvcCkpIHsKLSAgICAgICAgICAgIG1fdG9wTWFyZ2luUXVp
cmsgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldFRvcE1hcmdpblF1aXJrKGZhbHNlKTsKICAgICAg
ICAgICAgIG1hcmdpbkluZm8uc2V0RGV0ZXJtaW5lZFRvcFF1aXJrKHRydWUpOwogICAgICAgICB9
CiAKQEAgLTk0OSw3ICs5NjIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb2xsYXBzZU1hcmdpbnMo
UmVuZGVyCiAgICAgICAgICAgICAvLyBUaGlzIGRlYWxzIHdpdGggdGhlIDx0ZD48ZGl2PjxwPiBj
YXNlLgogICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcyBmb3IgYSBibG9jayB0aGF0IHNwbGl0
IHR3byBpbmxpbmVzIHRob3VnaC4gIFlvdSBkbwogICAgICAgICAgICAgLy8gc3RpbGwgYXBwbHkg
bWFyZ2lucyBpbiB0aGlzIGNhc2UuCi0gICAgICAgICAgICBtX3RvcE1hcmdpblF1aXJrID0gdHJ1
ZTsKKyAgICAgICAgICAgIHNldFRvcE1hcmdpblF1aXJrKHRydWUpOwogICAgIH0KIAogICAgIGlm
IChtYXJnaW5JbmZvLnF1aXJrQ29udGFpbmVyKCkgJiYgbWFyZ2luSW5mby5hdFRvcE9mQmxvY2so
KSAmJiAocG9zVG9wIC0gbmVnVG9wKSkKQEAgLTEwOTIsNyArMTEwNSw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmRldGVybWluZUhvcml6b250YWxQb3MKICAgICAgICAgLy8gU29tZSBvYmplY3RzIChl
LmcuLCB0YWJsZXMsIGhvcml6b250YWwgcnVsZXMsIG92ZXJmbG93OmF1dG8gYmxvY2tzKSBhdm9p
ZCBmbG9hdHMuICBUaGV5IG5lZWQKICAgICAgICAgLy8gdG8gc2hpZnQgb3ZlciBhcyBuZWNlc3Nh
cnkgdG8gZG9kZ2UgYW55IGZsb2F0cyB0aGF0IG1pZ2h0IGdldCBpbiB0aGUgd2F5LgogICAgICAg
ICBpZiAoY2hpbGQtPmF2b2lkc0Zsb2F0cygpKSB7Ci0gICAgICAgICAgICBpbnQgbGVmdE9mZiA9
IGxlZnRPZmZzZXQoaGVpZ2h0KCkpOworICAgICAgICAgICAgaW50IGxlZnRPZmYgPSBsZWZ0T2Zm
c2V0KGhlaWdodCgpLCBmYWxzZSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+dGV4dEFsaWdu
KCkgIT0gV0VCS0lUX0NFTlRFUiAmJiBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpLnR5cGUo
KSAhPSBBdXRvKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5tYXJnaW5MZWZ0KCkgPCAw
KQogICAgICAgICAgICAgICAgICAgICBsZWZ0T2ZmICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7CkBA
IC0xMTA0LDcgKzExMTcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVIb3Jpem9udGFs
UG9zCiAgICAgICAgICAgICAgICAgLy8gd2lkdGggY29tcHV0YXRpb24gd2lsbCB0YWtlIGludG8g
YWNjb3VudCB0aGUgZGVsdGEgYmV0d2VlbiB8bGVmdE9mZnwgYW5kIHx4UG9zfAogICAgICAgICAg
ICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGp1c3QgcGFzcyB0aGUgY29udGVudCB3aWR0aCBpbiBk
aXJlY3RseSB0byB0aGUgfGNhbGNIb3Jpem9udGFsTWFyZ2luc3wKICAgICAgICAgICAgICAgICAv
LyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICBjaGlsZC0+Y2FsY0hvcml6b250YWxNYXJnaW5z
KGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCksIGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdo
dCgpLCBsaW5lV2lkdGgoY2hpbGQtPnkoKSkpOworICAgICAgICAgICAgICAgIGNoaWxkLT5jYWxj
SG9yaXpvbnRhbE1hcmdpbnMoY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKSwgY2hpbGQtPnN0
eWxlKCktPm1hcmdpblJpZ2h0KCksIGxpbmVXaWR0aChjaGlsZC0+eSgpLCBmYWxzZSkpOwogICAg
ICAgICAgICAgICAgIGNoUG9zID0gbGVmdE9mZiArIGNoaWxkLT5tYXJnaW5MZWZ0KCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExMTQsNyArMTEyNyw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmRldGVybWluZUhvcml6b250YWxQb3MKICAgICAgICAgaW50IHhQb3MgPSB3aWR0aCgpIC0g
Ym9yZGVyUmlnaHQoKSAtIHBhZGRpbmdSaWdodCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
OwogICAgICAgICBpbnQgY2hQb3MgPSB4UG9zIC0gKGNoaWxkLT53aWR0aCgpICsgY2hpbGQtPm1h
cmdpblJpZ2h0KCkpOwogICAgICAgICBpZiAoY2hpbGQtPmF2b2lkc0Zsb2F0cygpKSB7Ci0gICAg
ICAgICAgICBpbnQgcmlnaHRPZmYgPSByaWdodE9mZnNldChoZWlnaHQoKSk7CisgICAgICAgICAg
ICBpbnQgcmlnaHRPZmYgPSByaWdodE9mZnNldChoZWlnaHQoKSwgZmFsc2UpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlKCktPnRleHRBbGlnbigpICE9IFdFQktJVF9DRU5URVIgJiYgY2hpbGQtPnN0
eWxlKCktPm1hcmdpblJpZ2h0KCkudHlwZSgpICE9IEF1dG8pIHsKICAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQtPm1hcmdpblJpZ2h0KCkgPCAwKQogICAgICAgICAgICAgICAgICAgICByaWdodE9m
ZiAtPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKQEAgLTExMjUsNyArMTEzOCw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmRldGVybWluZUhvcml6b250YWxQb3MKICAgICAgICAgICAgICAgICAvLyB3aWR0
aCBjb21wdXRhdGlvbiB3aWxsIHRha2UgaW50byBhY2NvdW50IHRoZSBkZWx0YSBiZXR3ZWVuIHxy
aWdodE9mZnwgYW5kIHx4UG9zfAogICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGp1
c3QgcGFzcyB0aGUgY29udGVudCB3aWR0aCBpbiBkaXJlY3RseSB0byB0aGUgfGNhbGNIb3Jpem9u
dGFsTWFyZ2luc3wKICAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAg
ICB0b1JlbmRlckJveChjaGlsZCktPmNhbGNIb3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+c3R5bGUo
KS0+bWFyZ2luTGVmdCgpLCBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGluZVdpZHRo
KGNoaWxkLT55KCkpKTsKKyAgICAgICAgICAgICAgICB0b1JlbmRlckJveChjaGlsZCktPmNhbGNI
b3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpLCBjaGlsZC0+c3R5
bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGluZVdpZHRoKGNoaWxkLT55KCksIGZhbHNlKSk7CiAgICAg
ICAgICAgICAgICAgY2hQb3MgPSByaWdodE9mZiAtIGNoaWxkLT5tYXJnaW5SaWdodCgpIC0gY2hp
bGQtPndpZHRoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExNDIsMTMgKzExNTUs
MTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0Q29sbGFwc2VkQm90dG9tTWFyZwogICAgICAgICBz
ZXRNYXhCb3R0b21NYXJnaW5zKG1heChtYXhCb3R0b21Qb3NNYXJnaW4oKSwgbWFyZ2luSW5mby5w
b3NNYXJnaW4oKSksIG1heChtYXhCb3R0b21OZWdNYXJnaW4oKSwgbWFyZ2luSW5mby5uZWdNYXJn
aW4oKSkpOwogCiAgICAgICAgIGlmICghbWFyZ2luSW5mby5ib3R0b21RdWlyaygpKQotICAgICAg
ICAgICAgbV9ib3R0b21NYXJnaW5RdWlyayA9IGZhbHNlOworICAgICAgICAgICAgc2V0Qm90dG9t
TWFyZ2luUXVpcmsoZmFsc2UpOwogCiAgICAgICAgIGlmIChtYXJnaW5JbmZvLmJvdHRvbVF1aXJr
KCkgJiYgbWFyZ2luQm90dG9tKCkgPT0gMCkKICAgICAgICAgICAgIC8vIFdlIGhhdmUgbm8gYm90
dG9tIG1hcmdpbiBhbmQgb3VyIGxhc3QgY2hpbGQgaGFzIGEgcXVpcmt5IG1hcmdpbi4KICAgICAg
ICAgICAgIC8vIFdlIHdpbGwgcGljayB1cCB0aGlzIHF1aXJreSBtYXJnaW4gYW5kIHBhc3MgaXQg
dGhyb3VnaC4KICAgICAgICAgICAgIC8vIFRoaXMgZGVhbHMgd2l0aCB0aGUgPHRkPjxkaXY+PHA+
IGNhc2UuCi0gICAgICAgICAgICBtX2JvdHRvbU1hcmdpblF1aXJrID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHNldEJvdHRvbU1hcmdpblF1aXJrKHRydWUpOwogICAgIH0KIH0KIApAQCAtMTM1NCw3ICsx
MzY3LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0T25seVBvc2l0aW9uZWRPYgogICAgIGlm
ICghcG9zQ2hpbGROZWVkc0xheW91dCgpIHx8IG5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSB8fCBz
ZWxmTmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTGF5b3V0U3Rh
dGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSks
IG1faGFzQ29sdW1ucyB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkpOworICAg
IExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUo
eCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlv
bigpKTsKIAogICAgIGlmIChuZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpKSB7CiAgICAg
ICAgIHRyeUxheW91dERvaW5nUG9zaXRpb25lZE1vdmVtZW50T25seSgpOwpAQCAtMTQ0MSw3ICsx
NDU0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYQogICAgICAg
ICB2aWV3KCktPmVuYWJsZUxheW91dFN0YXRlKCk7CiAgICAgfQogfQotCisgCiB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAg
ICAgdHggKz0geCgpOwpAQCAtMTY0Nyw3ICsxNjYwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFp
bnRPYmplY3QoUGFpbnRJbmZvJgogCiAgICAgLy8gMi4gcGFpbnQgY29udGVudHMKICAgICBpZiAo
cGFpbnRQaGFzZSAhPSBQYWludFBoYXNlU2VsZk91dGxpbmUpIHsKLSAgICAgICAgaWYgKG1faGFz
Q29sdW1ucykKKyAgICAgICAgaWYgKGhhc0NvbHVtbnMoKSkKICAgICAgICAgICAgIHBhaW50Q29s
dW1ucyhwYWludEluZm8sIHNjcm9sbGVkWCwgc2Nyb2xsZWRZKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgcGFpbnRDb250ZW50cyhwYWludEluZm8sIHNjcm9sbGVkWCwgc2Nyb2xsZWRZKTsK
QEAgLTE2NTYsMTIgKzE2NjksMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFp
bnRJbmZvJgogICAgIC8vIDMuIHBhaW50IHNlbGVjdGlvbgogICAgIC8vIEZJWE1FOiBNYWtlIHRo
aXMgd29yayB3aXRoIG11bHRpIGNvbHVtbiBsYXlvdXRzLiAgRm9yIG5vdyBkb24ndCBmaWxsIGdh
cHMuCiAgICAgYm9vbCBpc1ByaW50aW5nID0gZG9jdW1lbnQoKS0+cHJpbnRpbmcoKTsKLSAgICBp
ZiAoIWlzUHJpbnRpbmcgJiYgIW1faGFzQ29sdW1ucykKKyAgICBpZiAoIWlzUHJpbnRpbmcgJiYg
IWhhc0NvbHVtbnMoKSkKICAgICAgICAgcGFpbnRTZWxlY3Rpb24ocGFpbnRJbmZvLCBzY3JvbGxl
ZFgsIHNjcm9sbGVkWSk7IC8vIEZpbGwgaW4gZ2FwcyBpbiBzZWxlY3Rpb24gb24gbGluZXMgYW5k
IGJldHdlZW4gYmxvY2tzLgogCiAgICAgLy8gNC4gcGFpbnQgZmxvYXRzLgogICAgIGlmIChwYWlu
dFBoYXNlID09IFBhaW50UGhhc2VGbG9hdCB8fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VTZWxl
Y3Rpb24gfHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlVGV4dENsaXApIHsKLSAgICAgICAgaWYg
KG1faGFzQ29sdW1ucykKKyAgICAgICAgaWYgKGhhc0NvbHVtbnMoKSkKICAgICAgICAgICAgIHBh
aW50Q29sdW1ucyhwYWludEluZm8sIHNjcm9sbGVkWCwgc2Nyb2xsZWRZLCB0cnVlKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgcGFpbnRGbG9hdHMocGFpbnRJbmZvLCBzY3JvbGxlZFgsIHNj
cm9sbGVkWSwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uIHx8IHBhaW50UGhhc2Ug
PT0gUGFpbnRQaGFzZVRleHRDbGlwKTsKQEAgLTE2NzMsMTMgKzE2ODYsMTMgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJgogCiAgICAgLy8gNi4gcGFpbnQgY29udGlu
dWF0aW9uIG91dGxpbmVzLgogICAgIGlmICgocGFpbnRQaGFzZSA9PSBQYWludFBoYXNlT3V0bGlu
ZSB8fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKSkgewotICAgICAgICBp
ZiAoY29udGludWF0aW9uKCkgJiYgY29udGludWF0aW9uKCktPmhhc091dGxpbmUoKSAmJiBjb250
aW51YXRpb24oKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKLSAgICAgICAg
ICAgIFJlbmRlckZsb3cqIGlubGluZUZsb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4oY29u
dGludWF0aW9uKCktPmVsZW1lbnQoKS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICBpZiAoIWlu
bGluZUZsb3ctPmhhc0xheWVyKCkpCi0gICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrKCkt
PmFkZENvbnRpbnVhdGlvbldpdGhPdXRsaW5lKGlubGluZUZsb3cpOwotICAgICAgICAgICAgZWxz
ZSBpZiAoIWlubGluZUZsb3ctPmZpcnN0TGluZUJveCgpKQotICAgICAgICAgICAgICAgIGlubGlu
ZUZsb3ctPnBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgdHggLSB4KCkgKyBpbmxpbmVG
bG93LT5jb250YWluaW5nQmxvY2soKS0+eCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eSAtIHkoKSArIGlubGluZUZsb3ctPmNvbnRhaW5pbmdCbG9jaygpLT55
KCkpOworICAgICAgICBpZiAoaW5saW5lQ29udGludWF0aW9uKCkgJiYgaW5saW5lQ29udGludWF0
aW9uKCktPmhhc091dGxpbmUoKSAmJiBpbmxpbmVDb250aW51YXRpb24oKS0+c3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUpIHsKKyAgICAgICAgICAgIFJlbmRlcklubGluZSogaW5saW5l
UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbmxpbmUqPihpbmxpbmVDb250aW51YXRpb24o
KS0+ZWxlbWVudCgpLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgIGlmICghaW5saW5lUmVuZGVy
ZXItPmhhc0xheWVyKCkpCisgICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrKCktPmFkZENv
bnRpbnVhdGlvbldpdGhPdXRsaW5lKGlubGluZVJlbmRlcmVyKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKCFpbmxpbmVSZW5kZXJlci0+Zmlyc3RMaW5lQm94KCkpCisgICAgICAgICAgICAgICAgaW5s
aW5lUmVuZGVyZXItPnBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgdHggLSB4KCkgKyBp
bmxpbmVSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCktPngoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geSgpICsgaW5saW5lUmVuZGVyZXItPmNv
bnRhaW5pbmdCbG9jaygpLT55KCkpOwogICAgICAgICB9CiAgICAgICAgIHBhaW50Q29udGludWF0
aW9uT3V0bGluZXMocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgIH0KQEAgLTE3NTMsMTEgKzE3NjYs
MTEgQEAgc3RhdGljIENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcCogY29udAogICAgIHJldHVy
biAmdGFibGU7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmFkZENvbnRpbnVhdGlvbldpdGhPdXRs
aW5lKFJlbmRlckZsb3cqIGZsb3cpCit2b2lkIFJlbmRlckJsb2NrOjphZGRDb250aW51YXRpb25X
aXRoT3V0bGluZShSZW5kZXJJbmxpbmUqIGZsb3cpCiB7CiAgICAgLy8gV2UgY2FuJ3QgbWFrZSB0
aGlzIHdvcmsgaWYgdGhlIGlubGluZSBpcyBpbiBhIGxheWVyLiAgV2UnbGwganVzdCByZWx5IG9u
IHRoZSBicm9rZW4KICAgICAvLyB3YXkgb2YgcGFpbnRpbmcuCi0gICAgQVNTRVJUKCFmbG93LT5s
YXllcigpKTsKKyAgICBBU1NFUlQoIWZsb3ctPmxheWVyKCkgJiYgIWZsb3ctPmlzSW5saW5lQ29u
dGludWF0aW9uKCkpOwogICAgIAogICAgIENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcCogdGFi
bGUgPSBjb250aW51YXRpb25PdXRsaW5lVGFibGUoKTsKICAgICBMaXN0SGFzaFNldDxSZW5kZXJG
bG93Kj4qIGNvbnRpbnVhdGlvbnMgPSB0YWJsZS0+Z2V0KHRoaXMpOwpAQCAtMTgwOCw5ICsxODIx
LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZQogCiAgICAgaWYg
KChzID09IFNlbGVjdGlvblN0YXJ0ICYmIHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uRW5k
KSB8fAogICAgICAgICAocyA9PSBTZWxlY3Rpb25FbmQgJiYgc2VsZWN0aW9uU3RhdGUoKSA9PSBT
ZWxlY3Rpb25TdGFydCkpCi0gICAgICAgIG1fc2VsZWN0aW9uU3RhdGUgPSBTZWxlY3Rpb25Cb3Ro
OworICAgICAgICBSZW5kZXJGbG93OjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25Cb3RoKTsK
ICAgICBlbHNlCi0gICAgICAgIG1fc2VsZWN0aW9uU3RhdGUgPSBzOworICAgICAgICBSZW5kZXJG
bG93OjpzZXRTZWxlY3Rpb25TdGF0ZShzKTsKICAgICAKICAgICBSZW5kZXJCbG9jayogY2IgPSBj
b250YWluaW5nQmxvY2soKTsKICAgICBpZiAoY2IgJiYgIWNiLT5pc1JlbmRlclZpZXcoKSkKQEAg
LTE4MTksNyArMTgzMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNldFNlbGVjdGlvblN0YXRlKFNl
bGUKIAogYm9vbCBSZW5kZXJCbG9jazo6c2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZSAhPSBTZWxlY3Rpb25Ob25lICYmIHN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIGlzU2VsZWN0aW9uUm9vdCgpOworICAgIHJl
dHVybiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUgJiYgc3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUgJiYgaXNTZWxlY3Rpb25Sb290KCk7CiB9CiAKIGJvb2wgUmVuZGVy
QmxvY2s6OmlzU2VsZWN0aW9uUm9vdCgpIGNvbnN0CkBAIC0xOTE1LDcgKzE5MjgsNyBAQCBHYXBS
ZWN0cyBSZW5kZXJCbG9jazo6ZmlsbFNlbGVjdGlvbkdhcHMoCiAgICAgaWYgKCFpc0Jsb2NrRmxv
dygpKSAvLyBGSVhNRTogTWFrZSBtdWx0aS1jb2x1bW4gc2VsZWN0aW9uIGdhcCBmaWxsaW5nIHdv
cmsgc29tZWRheS4KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIGlmIChtX2hhc0NvbHVt
bnMgfHwgaGFzVHJhbnNmb3JtKCkpIHsKKyAgICBpZiAoaGFzQ29sdW1ucygpIHx8IGhhc1RyYW5z
Zm9ybSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbGVhcm4gaG93IHRvIGdhcCBm
aWxsIG11bHRpcGxlIGNvbHVtbnMgYW5kIHRyYW5zZm9ybXMgZXZlbnR1YWxseS4KICAgICAgICAg
bGFzdFRvcCA9ICh0eSAtIGJsb2NrWSkgKyBoZWlnaHQoKTsKICAgICAgICAgbGFzdExlZnQgPSBs
ZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgaGVpZ2h0KCkpOwpAQCAtMTkyOSw3ICsxOTQy
LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxTZWxlY3Rpb25HYXBzKAogICAgICAgICBy
ZXN1bHQgPSBmaWxsQmxvY2tTZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ks
IHR4LCB0eSwgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgcGFpbnRJbmZvKTsKIAogICAg
IC8vIEdvIGFoZWFkIGFuZCBmaWxsIHRoZSB2ZXJ0aWNhbCBnYXAgYWxsIHRoZSB3YXkgdG8gdGhl
IGJvdHRvbSBvZiBvdXIgYmxvY2sgaWYgdGhlIHNlbGVjdGlvbiBleHRlbmRzIHBhc3Qgb3VyIGJs
b2NrLgotICAgIGlmIChyb290QmxvY2sgPT0gdGhpcyAmJiAobV9zZWxlY3Rpb25TdGF0ZSAhPSBT
ZWxlY3Rpb25Cb3RoICYmIG1fc2VsZWN0aW9uU3RhdGUgIT0gU2VsZWN0aW9uRW5kKSkKKyAgICBp
ZiAocm9vdEJsb2NrID09IHRoaXMgJiYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uQm90
aCAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbkVuZCkpCiAgICAgICAgIHJlc3VsdC51
bml0ZUNlbnRlcihmaWxsVmVydGljYWxTZWxlY3Rpb25HYXAobGFzdFRvcCwgbGFzdExlZnQsIGxh
c3RSaWdodCwgdHkgKyBoZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCBwYWludEluZm8p
KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjEyNCw3ICsyMTM3LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Z2V0SG9yaXpvbnRhbFNlbGVjdGlvbgogCiBpbnQgUmVuZGVyQmxvY2s6OmxlZnRTZWxl
Y3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IHlQb3MpCiB7Ci0gICAgaW50
IGxlZnQgPSBsZWZ0T2Zmc2V0KHlQb3MpOworICAgIGludCBsZWZ0ID0gbGVmdE9mZnNldCh5UG9z
LCBmYWxzZSk7CiAgICAgaWYgKGxlZnQgPT0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSkg
ewogICAgICAgICBpZiAocm9vdEJsb2NrICE9IHRoaXMpCiAgICAgICAgICAgICAvLyBUaGUgYm9y
ZGVyIGNhbiBwb3RlbnRpYWxseSBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG91ciBjb250YWluaW5n
QmxvY2soKS4KQEAgLTIxNDQsNyArMjE1Nyw3IEBAIGludCBSZW5kZXJCbG9jazo6bGVmdFNlbGVj
dGlvbk9mZnNldChSZW4KIAogaW50IFJlbmRlckJsb2NrOjpyaWdodFNlbGVjdGlvbk9mZnNldChS
ZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgeVBvcykKIHsKLSAgICBpbnQgcmlnaHQgPSByaWdo
dE9mZnNldCh5UG9zKTsKKyAgICBpbnQgcmlnaHQgPSByaWdodE9mZnNldCh5UG9zLCBmYWxzZSk7
CiAgICAgaWYgKHJpZ2h0ID09IChjb250ZW50V2lkdGgoKSArIChib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpKSkpIHsKICAgICAgICAgaWYgKHJvb3RCbG9jayAhPSB0aGlzKQogICAgICAgICAg
ICAgLy8gVGhlIGJvcmRlciBjYW4gcG90ZW50aWFsbHkgYmUgZnVydGhlciBleHRlbmRlZCBieSBv
dXIgY29udGFpbmluZ0Jsb2NrKCkuCkBAIC0yNDIxLDE1ICsyNDM0LDEyIEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnJlbW92ZVBlcmNlbnRIZWlnaHREZXMKICAgICBkZWxldGUgY29udGFpbmVyU2V0Owog
fQogCi1pbnQKLVJlbmRlckJsb2NrOjpsZWZ0T2Zmc2V0KCkgY29uc3QKK2ludCBSZW5kZXJCbG9j
azo6bGVmdE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJvcmRlckxlZnQoKStwYWRkaW5n
TGVmdCgpOworICAgIHJldHVybiBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwogfQogCi1p
bnQKLVJlbmRlckJsb2NrOjpsZWZ0UmVsT2Zmc2V0KGludCB5LCBpbnQgZml4ZWRPZmZzZXQsIGJv
b2wgYXBwbHlUZXh0SW5kZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpoZWln
aHRSZW1haW5pbmcgKSBjb25zdAoraW50IFJlbmRlckJsb2NrOjpsZWZ0UmVsT2Zmc2V0KGludCB5
LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50LCBpbnQqIGhlaWdodFJlbWFp
bmluZykgY29uc3QKIHsKICAgICBpbnQgbGVmdCA9IGZpeGVkT2Zmc2V0OwogICAgIGlmIChtX2Zs
b2F0aW5nT2JqZWN0cykgewpAQCAtMjQ0Nyw3ICsyNDU3LDcgQEAgUmVuZGVyQmxvY2s6OmxlZnRS
ZWxPZmZzZXQoaW50IHksIGludCBmaQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGFwcGx5
VGV4dEluZGVudCAmJiBtX2ZpcnN0TGluZSAmJiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIp
IHsKKyAgICBpZiAoYXBwbHlUZXh0SW5kZW50ICYmIHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UikgewogICAgICAgICBpbnQgY3cgPSAwOwogICAgICAgICBpZiAoc3R5bGUoKS0+dGV4dEluZGVu
dCgpLmlzUGVyY2VudCgpKQogICAgICAgICAgICAgY3cgPSBjb250YWluaW5nQmxvY2soKS0+YXZh
aWxhYmxlV2lkdGgoKTsKQEAgLTI0NTcsMTUgKzI0NjcsMTIgQEAgUmVuZGVyQmxvY2s6OmxlZnRS
ZWxPZmZzZXQoaW50IHksIGludCBmaQogICAgIHJldHVybiBsZWZ0OwogfQogCi1pbnQKLVJlbmRl
ckJsb2NrOjpyaWdodE9mZnNldCgpIGNvbnN0CitpbnQgUmVuZGVyQmxvY2s6OnJpZ2h0T2Zmc2V0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGF2
YWlsYWJsZVdpZHRoKCk7CiB9CiAKLWludAotUmVuZGVyQmxvY2s6OnJpZ2h0UmVsT2Zmc2V0KGlu
dCB5LCBpbnQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqaGVpZ2h0UmVtYWluaW5nICkgY29uc3QKK2ludCBSZW5kZXJC
bG9jazo6cmlnaHRSZWxPZmZzZXQoaW50IHksIGludCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRl
eHRJbmRlbnQsIGludCogaGVpZ2h0UmVtYWluaW5nKSBjb25zdAogewogICAgIGludCByaWdodCA9
IGZpeGVkT2Zmc2V0OwogCkBAIC0yNDg0LDcgKzI0OTEsNyBAQCBSZW5kZXJCbG9jazo6cmlnaHRS
ZWxPZmZzZXQoaW50IHksIGludCBmCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKGFw
cGx5VGV4dEluZGVudCAmJiBtX2ZpcnN0TGluZSAmJiBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBS
VEwpIHsKKyAgICBpZiAoYXBwbHlUZXh0SW5kZW50ICYmIHN0eWxlKCktPmRpcmVjdGlvbigpID09
IFJUTCkgewogICAgICAgICBpbnQgY3cgPSAwOwogICAgICAgICBpZiAoc3R5bGUoKS0+dGV4dElu
ZGVudCgpLmlzUGVyY2VudCgpKQogICAgICAgICAgICAgY3cgPSBjb250YWluaW5nQmxvY2soKS0+
YXZhaWxhYmxlV2lkdGgoKTsKQEAgLTI0OTUsOSArMjUwMiw5IEBAIFJlbmRlckJsb2NrOjpyaWdo
dFJlbE9mZnNldChpbnQgeSwgaW50IGYKIH0KIAogaW50Ci1SZW5kZXJCbG9jazo6bGluZVdpZHRo
KGludCB5KSBjb25zdAorUmVuZGVyQmxvY2s6OmxpbmVXaWR0aChpbnQgeSwgYm9vbCBmaXJzdExp
bmUpIGNvbnN0CiB7Ci0gICAgaW50IHJlc3VsdCA9IHJpZ2h0T2Zmc2V0KHkpIC0gbGVmdE9mZnNl
dCh5KTsKKyAgICBpbnQgcmVzdWx0ID0gcmlnaHRPZmZzZXQoeSwgZmlyc3RMaW5lKSAtIGxlZnRP
ZmZzZXQoeSwgZmlyc3RMaW5lKTsKICAgICByZXR1cm4gKHJlc3VsdCA8IDApID8gMCA6IHJlc3Vs
dDsKIH0KIApAQCAtMjU5NCw3ICsyNjAxLDcgQEAgaW50IFJlbmRlckJsb2NrOjpsb3dlc3RQb3Np
dGlvbihib29sIGluYwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1faGFzQ29sdW1ucykg
eworICAgIGlmIChoYXNDb2x1bW5zKCkpIHsKICAgICAgICAgVmVjdG9yPEludFJlY3Q+KiBjb2xS
ZWN0cyA9IGNvbHVtblJlY3RzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b2xSZWN0cy0+c2l6ZSgpOyBpKyspCiAgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBj
b2xSZWN0cy0+YXQoaSkuYm90dG9tKCkgKyByZWxhdGl2ZU9mZnNldCk7CkBAIC0yNjY4LDcgKzI2
NzUsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAobV9oYXNDb2x1bW5zKSB7CisgICAgaWYgKGhhc0NvbHVtbnMo
KSkgewogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3IgTFRSCiAgICAgICAgIGlmIChz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCiAgICAgICAgICAgICByaWdodCA9IG1heChjb2x1
bW5SZWN0cygpLT5sYXN0KCkucmlnaHQoKSArIHJlbGF0aXZlT2Zmc2V0LCByaWdodCk7CkBAIC0y
NzQ3LDcgKzI3NTQsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmxlZnRtb3N0UG9zaXRpb24oYm9vbCBp
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV9oYXNDb2x1bW5zKSB7CisgICAgaWYgKGhh
c0NvbHVtbnMoKSkgewogICAgICAgICAvLyBUaGlzIG9ubHkgbWF0dGVycyBmb3IgUlRMCiAgICAg
ICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCiAgICAgICAgICAgICBsZWZ0ID0g
bWluKGNvbHVtblJlY3RzKCktPmxhc3QoKS54KCkgKyByZWxhdGl2ZU9mZnNldCwgbGVmdCk7CkBA
IC0zMDg1LDcgKzMwOTIsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVy
Qm94CiAgICAgLy8gKGViYXkgb24gdGhlIFBMVCwgZmluYW5jZS55YWhvby5jb20gaW4gdGhlIHJl
YWwgd29ybGQsIHZlcnNpb250cmFja2VyLmNvbSBmb3JjZXMgZXZlbiBhbG1vc3Qgc3RyaWN0IG1v
ZGUgbm90IHRvIHdvcmspCiAgICAgaW50IHJlc3VsdCA9IGNsZWFyU2V0ID8gbWF4KDAsIGJvdHRv
bSAtIGNoaWxkLT55KCkpIDogMDsKICAgICBpZiAoIXJlc3VsdCAmJiBjaGlsZC0+YXZvaWRzRmxv
YXRzKCkgJiYgY2hpbGQtPnN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIAotICAgICAgICBj
aGlsZC0+bWluUHJlZldpZHRoKCkgPiBsaW5lV2lkdGgoY2hpbGQtPnkoKSkgJiYgY2hpbGQtPm1p
blByZWZXaWR0aCgpIDw9IGF2YWlsYWJsZVdpZHRoKCkgJiYgCisgICAgICAgIGNoaWxkLT5taW5Q
cmVmV2lkdGgoKSA+IGxpbmVXaWR0aChjaGlsZC0+eSgpLCBmYWxzZSkgJiYgY2hpbGQtPm1pblBy
ZWZXaWR0aCgpIDw9IGF2YWlsYWJsZVdpZHRoKCkgJiYgCiAgICAgICAgIGRvY3VtZW50KCktPmlu
U3RyaWN0TW9kZSgpKSAgIAogICAgICAgICByZXN1bHQgPSBtYXgoMCwgZmxvYXRCb3R0b20oKSAt
IGNoaWxkLT55KCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zMTM5LDExICszMTQ2LDExIEBA
IGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKICAgICAgICAgICAgIG1f
bGF5ZXItPnN1YnRyYWN0U2Nyb2xsZWRDb250ZW50T2Zmc2V0KHNjcm9sbGVkWCwgc2Nyb2xsZWRZ
KTsKIAogICAgICAgICAvLyBIaXQgdGVzdCBjb250ZW50cyBpZiB3ZSBkb24ndCBoYXZlIGNvbHVt
bnMuCi0gICAgICAgIGlmICghbV9oYXNDb2x1bW5zICYmIGhpdFRlc3RDb250ZW50cyhyZXF1ZXN0
LCByZXN1bHQsIF94LCBfeSwgc2Nyb2xsZWRYLCBzY3JvbGxlZFksIGhpdFRlc3RBY3Rpb24pKQor
ICAgICAgICBpZiAoIWhhc0NvbHVtbnMoKSAmJiBoaXRUZXN0Q29udGVudHMocmVxdWVzdCwgcmVz
dWx0LCBfeCwgX3ksIHNjcm9sbGVkWCwgc2Nyb2xsZWRZLCBoaXRUZXN0QWN0aW9uKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIEhpdCB0ZXN0IG91
ciBjb2x1bW5zIGlmIHdlIGRvIGhhdmUgdGhlbS4KLSAgICAgICAgaWYgKG1faGFzQ29sdW1ucyAm
JiBoaXRUZXN0Q29sdW1ucyhyZXF1ZXN0LCByZXN1bHQsIF94LCBfeSwgc2Nyb2xsZWRYLCBzY3Jv
bGxlZFksIGhpdFRlc3RBY3Rpb24pKQorICAgICAgICBpZiAoaGFzQ29sdW1ucygpICYmIGhpdFRl
c3RDb2x1bW5zKHJlcXVlc3QsIHJlc3VsdCwgX3gsIF95LCBzY3JvbGxlZFgsIHNjcm9sbGVkWSwg
aGl0VGVzdEFjdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICAvLyBI
aXQgdGVzdCBmbG9hdHMuCkBAIC0zMzk0LDcgKzM0MDEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpv
ZmZzZXRGb3JDb250ZW50cyhpbnQmCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAg
ICBtX2xheWVyLT5hZGRTY3JvbGxlZENvbnRlbnRPZmZzZXQodHgsIHR5KTsKIAotICAgIGlmICht
X2hhc0NvbHVtbnMpIHsKKyAgICBpZiAoaGFzQ29sdW1ucygpKSB7CiAgICAgICAgIEludFBvaW50
IGNvbnRlbnRzUG9pbnQodHgsIHR5KTsKICAgICAgICAgYWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRl
bnRzKGNvbnRlbnRzUG9pbnQpOwogICAgICAgICB0eCA9IGNvbnRlbnRzUG9pbnQueCgpOwpAQCAt
MzQwNSw3ICszNDEyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6b2Zmc2V0Rm9yQ29udGVudHMoaW50
JgogaW50IFJlbmRlckJsb2NrOjphdmFpbGFibGVXaWR0aCgpIGNvbnN0CiB7CiAgICAgLy8gSWYg
d2UgaGF2ZSBtdWx0aXBsZSBjb2x1bW5zLCB0aGVuIHRoZSBhdmFpbGFibGUgd2lkdGggaXMgcmVk
dWNlZCB0byBvdXIgY29sdW1uIHdpZHRoLgotICAgIGlmIChtX2hhc0NvbHVtbnMpCisgICAgaWYg
KGhhc0NvbHVtbnMoKSkKICAgICAgICAgcmV0dXJuIGRlc2lyZWRDb2x1bW5XaWR0aCgpOwogICAg
IHJldHVybiBjb250ZW50V2lkdGgoKTsKIH0KQEAgLTM0NjMsMjAgKzM0NzAsMjAgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y2FsY0NvbHVtbldpZHRoKCkKIHZvaWQgUmVuZGVyQmxvY2s6OnNldERlc2ly
ZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBjb3VudCwgaW50IHdpZHRoKQogewogICAgIGlmIChj
b3VudCA9PSAxKSB7Ci0gICAgICAgIGlmIChtX2hhc0NvbHVtbnMpIHsKKyAgICAgICAgaWYgKGhh
c0NvbHVtbnMoKSkgewogICAgICAgICAgICAgZGVsZXRlIGdDb2x1bW5JbmZvTWFwLT50YWtlKHRo
aXMpOwotICAgICAgICAgICAgbV9oYXNDb2x1bW5zID0gZmFsc2U7CisgICAgICAgICAgICBzZXRI
YXNDb2x1bW5zKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIENvbHVt
bkluZm8qIGluZm87Ci0gICAgICAgIGlmIChtX2hhc0NvbHVtbnMpCisgICAgICAgIGlmIChoYXND
b2x1bW5zKCkpCiAgICAgICAgICAgICBpbmZvID0gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoIWdDb2x1bW5JbmZvTWFwKQogICAgICAg
ICAgICAgICAgIGdDb2x1bW5JbmZvTWFwID0gbmV3IENvbHVtbkluZm9NYXA7CiAgICAgICAgICAg
ICBpbmZvID0gbmV3IENvbHVtbkluZm87CiAgICAgICAgICAgICBnQ29sdW1uSW5mb01hcC0+YWRk
KHRoaXMsIGluZm8pOwotICAgICAgICAgICAgbV9oYXNDb2x1bW5zID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHNldEhhc0NvbHVtbnModHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaW5mby0+bV9kZXNp
cmVkQ29sdW1uQ291bnQgPSBjb3VudDsKICAgICAgICAgaW5mby0+bV9kZXNpcmVkQ29sdW1uV2lk
dGggPSB3aWR0aDsgICAKQEAgLTM0ODUsMjEgKzM0OTIsMjEgQEAgdm9pZCBSZW5kZXJCbG9jazo6
c2V0RGVzaXJlZENvbHVtbkNvdW50QQogCiBpbnQgUmVuZGVyQmxvY2s6OmRlc2lyZWRDb2x1bW5X
aWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hhc0NvbHVtbnMpCisgICAgaWYgKCFoYXNDb2x1
bW5zKCkpCiAgICAgICAgIHJldHVybiBjb250ZW50V2lkdGgoKTsKICAgICByZXR1cm4gZ0NvbHVt
bkluZm9NYXAtPmdldCh0aGlzKS0+bV9kZXNpcmVkQ29sdW1uV2lkdGg7CiB9CiAKIHVuc2lnbmVk
IFJlbmRlckJsb2NrOjpkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25zdAogewotICAgIGlmICghbV9o
YXNDb2x1bW5zKQorICAgIGlmICghaGFzQ29sdW1ucygpKQogICAgICAgICByZXR1cm4gMTsKICAg
ICByZXR1cm4gZ0NvbHVtbkluZm9NYXAtPmdldCh0aGlzKS0+bV9kZXNpcmVkQ29sdW1uQ291bnQ7
CiB9CiAKIFZlY3RvcjxJbnRSZWN0PiogUmVuZGVyQmxvY2s6OmNvbHVtblJlY3RzKCkgY29uc3QK
IHsKLSAgICBpZiAoIW1faGFzQ29sdW1ucykKKyAgICBpZiAoIWhhc0NvbHVtbnMoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuICZnQ29sdW1uSW5mb01hcC0+Z2V0KHRoaXMpLT5tX2Nv
bHVtblJlY3RzOyAgICAKIH0KQEAgLTM1MDcsNyArMzUxNCw3IEBAIFZlY3RvcjxJbnRSZWN0Piog
UmVuZGVyQmxvY2s6OmNvbHVtblJlY3QKIGludCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhp
bnQgZW5kT2ZDb250ZW50KQogewogICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUg
bm8gY29sdW1ucwotICAgIGlmICghbV9oYXNDb2x1bW5zKQorICAgIGlmICghaGFzQ29sdW1ucygp
KQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBDb2x1bW5JbmZvKiBpbmZvID0gZ0NvbHVtbklu
Zm9NYXAtPmdldCh0aGlzKTsKQEAgLTM1NTksOSArMzU2Niw5IEBAIGludCBSZW5kZXJCbG9jazo6
bGF5b3V0Q29sdW1ucyhpbnQgZW5kT2YKICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KikwKTsKICAgICAgICAgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8gcGFpbnRJbmZvKCZjb250ZXh0LCBwYWdlUmVjdCwgUGFpbnRQaGFzZUZvcmVncm91bmQs
IGZhbHNlLCAwLCAwKTsKICAgICAgICAgCi0gICAgICAgIG1faGFzQ29sdW1ucyA9IGZhbHNlOwor
ICAgICAgICBzZXRIYXNDb2x1bW5zKGZhbHNlKTsKICAgICAgICAgcGFpbnRPYmplY3QocGFpbnRJ
bmZvLCAwLCAwKTsKLSAgICAgICAgbV9oYXNDb2x1bW5zID0gdHJ1ZTsKKyAgICAgICAgc2V0SGFz
Q29sdW1ucyh0cnVlKTsKIAogICAgICAgICBpbnQgYWRqdXN0ZWRCb3R0b20gPSB2LT5iZXN0VHJ1
bmNhdGVkQXQoKTsKICAgICAgICAgaWYgKGFkanVzdGVkQm90dG9tIDw9IGN1cnJZKQpAQCAtMzYx
OSw3ICszNjI2LDcgQEAgaW50IFJlbmRlckJsb2NrOjpsYXlvdXRDb2x1bW5zKGludCBlbmRPZgog
dm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JiBw
b2ludCkgY29uc3QKIHsKICAgICAvLyBKdXN0IGJhaWwgaWYgd2UgaGF2ZSBubyBjb2x1bW5zLgot
ICAgIGlmICghbV9oYXNDb2x1bW5zKQorICAgIGlmICghaGFzQ29sdW1ucygpKQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgVmVjdG9yPEludFJlY3Q+KiBjb2xSZWN0cyA9IGNvbHVtblJlY3Rz
KCk7CkBAIC0zNjQ4LDcgKzM2NTUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb2ludFRv
Q29sdW1uQ29uCiB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhJbnRSZWN0
JiByKSBjb25zdAogewogICAgIC8vIEp1c3QgYmFpbCBpZiB3ZSBoYXZlIG5vIGNvbHVtbnMuCi0g
ICAgaWYgKCFtX2hhc0NvbHVtbnMpCisgICAgaWYgKCFoYXNDb2x1bW5zKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBWZWN0b3I8SW50UmVjdD4qIGNvbFJlY3RzID0gY29sdW1uUmVjdHMo
KTsKQEAgLTQ2NTQsNiArNDY2MSw4OCBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhCb3R0b21N
YXJnaW5zKGluCiAgICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tTmVnID0gbmVnOwogfQogCit2b2lk
IFJlbmRlckJsb2NrOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0
eCwgaW50IHR5LCBib29sIHRvcExldmVsKQoreworICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlu
bGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmln
aHQgdXAgdG8gdGhlCisgICAgLy8gaW5saW5lIGJveGVzIGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1
cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNpbmdsZSBpcnJlZ3VsYXIKKyAg
ICAvLyBzaGFwZSkuCisgICAgaWYgKHRvcExldmVsICYmIGlubGluZUNvbnRpbnVhdGlvbigpKSB7
CisgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSAtIGNvbGxhcHNlZE1hcmdpblRv
cCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLCBoZWlnaHQoKSArIGNv
bGxhcHNlZE1hcmdpblRvcCgpICsgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkpKTsKKyAgICAgICAg
aW5saW5lQ29udGludWF0aW9uKCktPmFic29sdXRlUmVjdHMocmVjdHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0geCgpICsgaW5saW5lQ29udGludWF0
aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5IC0geSgpICsgaW5saW5lQ29udGludWF0aW9uKCktPmNvbnRh
aW5pbmdCbG9jaygpLT55KCksIHRvcExldmVsKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVjdHMu
YXBwZW5kKEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkpOworfQorCit2b2lkIFJl
bmRlckJsb2NrOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB0
b3BMZXZlbCkKK3sKKyAgICAvLyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVh
ZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQorICAg
IC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQg
d2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1bGFyCisgICAgLy8gc2hhcGUpLgorICAg
IGlmICh0b3BMZXZlbCAmJiBpbmxpbmVDb250aW51YXRpb24oKSkgeworICAgICAgICBGbG9hdFJl
Y3QgbG9jYWxSZWN0KDAsIC1jb2xsYXBzZWRNYXJnaW5Ub3AoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aWR0aCgpLCBoZWlnaHQoKSArIGNvbGxhcHNlZE1hcmdpblRvcCgpICsgY29s
bGFwc2VkTWFyZ2luQm90dG9tKCkpOworICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fic29s
dXRlUXVhZChsb2NhbFJlY3QpKTsKKyAgICAgICAgaW5saW5lQ29udGludWF0aW9uKCktPmFic29s
dXRlUXVhZHMocXVhZHMsIHRvcExldmVsKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcXVhZHMuYXBw
ZW5kKFJlbmRlckJveDo6bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoMCwgMCwgd2lkdGgo
KSwgaGVpZ2h0KCkpKSk7Cit9CisKK0ludFJlY3QgUmVuZGVyQmxvY2s6OnJlY3RXaXRoT3V0bGlu
ZUZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBpbnQgb3V0bGluZVdpZHRo
KQoreworICAgIEludFJlY3QgcihSZW5kZXJGbG93OjpyZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50
KHJlcGFpbnRDb250YWluZXIsIG91dGxpbmVXaWR0aCkpOworICAgIGlmIChpbmxpbmVDb250aW51
YXRpb24oKSkKKyAgICAgICAgci5pbmZsYXRlWShjb2xsYXBzZWRNYXJnaW5Ub3AoKSk7CisgICAg
cmV0dXJuIHI7Cit9CisKK1JlbmRlck9iamVjdCogUmVuZGVyQmxvY2s6OmhvdmVyQW5jZXN0b3Io
KSBjb25zdAoreworICAgIHJldHVybiBpbmxpbmVDb250aW51YXRpb24oKSA/IGlubGluZUNvbnRp
bnVhdGlvbigpIDogUmVuZGVyRmxvdzo6aG92ZXJBbmNlc3RvcigpOworfQorCit2b2lkIFJlbmRl
ckJsb2NrOjp1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pCit7CisgICAgUmVuZGVyRmxvdzo6
dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7CisgICAgaWYgKGlubGluZUNvbnRpbnVhdGlvbigpKQor
ICAgICAgICBpbmxpbmVDb250aW51YXRpb24oKS0+dXBkYXRlRHJhZ1N0YXRlKGRyYWdPbik7Cit9
CisKK1JlbmRlclN0eWxlKiBSZW5kZXJCbG9jazo6b3V0bGluZVN0eWxlRm9yUmVwYWludCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGlubGluZUNvbnRpbnVhdGlvbigpID8gaW5saW5lQ29udGludWF0
aW9uKCktPnN0eWxlKCkgOiBzdHlsZSgpOworfQorCit2b2lkIFJlbmRlckJsb2NrOjpjaGlsZEJl
Y2FtZU5vbklubGluZShSZW5kZXJPYmplY3QqKQoreworICAgIG1ha2VDaGlsZHJlbk5vbklubGlu
ZSgpOworICAgIGlmIChpc0Fub255bW91c0Jsb2NrKCkgJiYgcGFyZW50KCkpCisgICAgICAgIHBh
cmVudCgpLT5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKHRoaXMpOworICAgIC8vIHx0aGlz
fCBtYXkgYmUgZGVhZCBoZXJlCit9CisKK3ZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUhpdFRlc3RS
ZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7Cisg
ICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTm9kZSog
bm9kZSA9IGVsZW1lbnQoKTsKKyAgICBpZiAoaW5saW5lQ29udGludWF0aW9uKCkpCisgICAgICAg
IC8vIFdlIGFyZSBpbiB0aGUgbWFyZ2lucyBvZiBibG9jayBlbGVtZW50cyB0aGF0IGFyZSBwYXJ0
IG9mIGEgY29udGludWF0aW9uLiAgSW4KKyAgICAgICAgLy8gdGhpcyBjYXNlIHdlJ3JlIGFjdHVh
bGx5IHN0aWxsIGluc2lkZSB0aGUgZW5jbG9zaW5nIGlubGluZSBlbGVtZW50IHRoYXQgd2FzCisg
ICAgICAgIC8vIHNwbGl0LiAgR28gYWhlYWQgYW5kIHNldCBvdXIgaW5uZXIgbm9kZSBhY2NvcmRp
bmdseS4KKyAgICAgICAgbm9kZSA9IGlubGluZUNvbnRpbnVhdGlvbigpLT5lbGVtZW50KCk7CisK
KyAgICBpZiAobm9kZSkgeworICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUpOworICAg
ICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC5zZXRJbm5lck5vblNoYXJlZE5vZGUobm9kZSk7CisgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBv
aW50KHBvaW50KTsKKyAgICB9Cit9CisKIGNvbnN0IGNoYXIqIFJlbmRlckJsb2NrOjpyZW5kZXJO
YW1lKCkgY29uc3QKIHsKICAgICBpZiAoaXNCb2R5KCkpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24g
NDAzMDMpCisrKyByZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbmxpbmVJdGVyYXRvcjsKIGNs
YXNzIEJpZGlSdW47CiBjbGFzcyBQb3NpdGlvbjsKK2NsYXNzIFJlbmRlcklubGluZTsKIGNsYXNz
IFJvb3RJbmxpbmVCb3g7CiAKIHRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgUnVuPiBj
bGFzcyBCaWRpUmVzb2x2ZXI7CkBAIC00OCw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJC
bG9jayhOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyQmxvY2soKTsKIAorICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCk7CisKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdDsKIAogICAgIC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIG92ZXJyaWRkZW4gZm9yIGlu
bGluZS1ibG9jay4KQEAgLTU4LDggKzYxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBp
c0Jsb2NrRmxvdygpIGNvbnN0IHsgcmV0dXJuICghaXNJbmxpbmUoKSB8fCBpc1JlcGxhY2VkKCkp
ICYmICFpc1RhYmxlKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVCbG9ja09ySW5saW5l
VGFibGUoKSBjb25zdCB7IHJldHVybiBpc0lubGluZSgpICYmIGlzUmVwbGFjZWQoKTsgfQogCi0g
ICAgdmlydHVhbCBib29sIGNoaWxkcmVuSW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJl
bklubGluZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGlsZHJlbklubGluZShib29sIGIpIHsg
bV9jaGlsZHJlbklubGluZSA9IGI7IH0KICAgICB2b2lkIG1ha2VDaGlsZHJlbk5vbklubGluZShS
ZW5kZXJPYmplY3QqIGluc2VydGlvblBvaW50ID0gMCk7CiAgICAgdm9pZCBkZWxldGVMaW5lQm94
VHJlZSgpOwogCkBAIC03Nyw4ICs3OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFZpc3VhbE92
ZXJmbG93KGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NlbGZDb2xsYXBz
aW5nQmxvY2soKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNUb3BNYXJnaW5RdWlyaygpIGNv
bnN0IHsgcmV0dXJuIG1fdG9wTWFyZ2luUXVpcms7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNCb3R0
b21NYXJnaW5RdWlyaygpIGNvbnN0IHsgcmV0dXJuIG1fYm90dG9tTWFyZ2luUXVpcms7IH0KIAog
ICAgIHZpcnR1YWwgaW50IG1heFRvcE1hcmdpbihib29sIHBvc2l0aXZlKSBjb25zdCB7IHJldHVy
biBwb3NpdGl2ZSA/IG1heFRvcFBvc01hcmdpbigpIDogbWF4VG9wTmVnTWFyZ2luKCk7IH0KICAg
ICB2aXJ0dWFsIGludCBtYXhCb3R0b21NYXJnaW4oYm9vbCBwb3NpdGl2ZSkgY29uc3QgeyByZXR1
cm4gcG9zaXRpdmUgPyBtYXhCb3R0b21Qb3NNYXJnaW4oKSA6IG1heEJvdHRvbU5lZ01hcmdpbigp
OyB9CkBAIC0xMzgsNyArMTM3LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICB2b2lkIGJpZGlS
ZW9yZGVyTGluZShJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5k
KTsKLSAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wmIGZ1bGxM
YXlvdXQsIElubGluZUJpZGlSZXNvbHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRz
LCB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMpOworICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWlu
ZVN0YXJ0UG9zaXRpb24oYm9vbCYgZmlyc3RMaW5lLCBib29sJiBmdWxsTGF5b3V0LCBJbmxpbmVC
aWRpUmVzb2x2ZXImLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQmIG51
bUNsZWFuRmxvYXRzKTsKICAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVFbmRQb3NpdGlvbihS
b290SW5saW5lQm94KiBzdGFydEJveCwgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlTdGF0dXMmIGNsZWFu
TGluZUJpZGlTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50JiB5UG9zKTsKQEAgLTE0NiwxMiArMTQ1LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MsIGludCYgcmVw
YWludEJvdHRvbSwgaW50JiByZXBhaW50VG9wKTsKICAgICBib29sIGdlbmVyYXRlc0xpbmVCb3hl
c0ZvcklubGluZUNoaWxkKFJlbmRlck9iamVjdCopOwogICAgIHZvaWQgc2tpcFRyYWlsaW5nV2hp
dGVzcGFjZShJbmxpbmVJdGVyYXRvciYpOwotICAgIGludCBza2lwTGVhZGluZ1doaXRlc3BhY2Uo
SW5saW5lQmlkaVJlc29sdmVyJik7Ci0gICAgdm9pZCBmaXRCZWxvd0Zsb2F0cyhpbnQgd2lkdGhU
b0ZpdCwgaW50JiBhdmFpbGFibGVXaWR0aCk7Ci0gICAgSW5saW5lSXRlcmF0b3IgZmluZE5leHRM
aW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiwgRUNsZWFyKiBjbGVhciA9IDApOwotICAgIFJv
b3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUodW5zaWduZWQgcnVuQ291bnQsIEJpZGlSdW4qIGZp
cnN0UnVuLCBCaWRpUnVuKiBsYXN0UnVuLCBib29sIGxhc3RMaW5lLCBSZW5kZXJPYmplY3QqIGVu
ZE9iamVjdCk7Ci0gICAgSW5saW5lRmxvd0JveCogY3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVj
dCopOwotICAgIHZvaWQgY29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxp
bmVCb3gqLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgYm9v
bCByZWFjaGVkRW5kKTsKKyAgICBpbnQgc2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlS
ZXNvbHZlciYsIGJvb2wgZmlyc3RMaW5lKTsKKyAgICB2b2lkIGZpdEJlbG93RmxvYXRzKGludCB3
aWR0aFRvRml0LCBib29sIGZpcnN0TGluZSwgaW50JiBhdmFpbGFibGVXaWR0aCk7CisgICAgSW5s
aW5lSXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiwgYm9vbCBm
aXJzdExpbmUsIEVDbGVhciogY2xlYXIgPSAwKTsKKyAgICBSb290SW5saW5lQm94KiBjb25zdHJ1
Y3RMaW5lKHVuc2lnbmVkIHJ1bkNvdW50LCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogbGFz
dFJ1biwgYm9vbCBmaXJzdExpbmUsIGJvb2wgbGFzdExpbmUsIFJlbmRlck9iamVjdCogZW5kT2Jq
ZWN0KTsKKyAgICBJbmxpbmVGbG93Qm94KiBjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0Kiwg
Ym9vbCBmaXJzdExpbmUpOworICAgIHZvaWQgY29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JM
aW5lKFJvb3RJbmxpbmVCb3gqLCBib29sIGZpcnN0TGluZSwgQmlkaVJ1biogZmlyc3RSdW4sIEJp
ZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCk7CiAgICAgdm9pZCBjb21w
dXRlVmVydGljYWxQb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqLCBCaWRpUnVuKik7CiAg
ICAgdm9pZCBjaGVja0xpbmVzRm9yT3ZlcmZsb3coKTsKICAgICB2b2lkIGRlbGV0ZUVsbGlwc2lz
TGluZUJveGVzKCk7CkBAIC0xOTQsMTggKzE5MywxOCBAQCBwdWJsaWM6CiAgICAgaW5saW5lIGlu
dCByaWdodEJvdHRvbSgpOwogICAgIEludFJlY3QgZmxvYXRSZWN0KCkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIGludCBsaW5lV2lkdGgoaW50KSBjb25zdDsKKyAgICBpbnQgbGluZVdpZHRoKGludCB5
LCBib29sIGZpcnN0TGluZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgbG93ZXN0UG9zaXRpb24o
Ym9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYgPSB0
cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCByaWdodG1vc3RQb3NpdGlvbihib29sIGluY2x1
ZGVPdmVyZmxvd0ludGVyaW9yID0gdHJ1ZSwgYm9vbCBpbmNsdWRlU2VsZiA9IHRydWUpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGxlZnRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJ
bnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsKIAogICAgIGlu
dCByaWdodE9mZnNldCgpIGNvbnN0OwogICAgIGludCByaWdodFJlbE9mZnNldChpbnQgeSwgaW50
IGZpeGVkT2Zmc2V0LCBib29sIGFwcGx5VGV4dEluZGVudCA9IHRydWUsIGludCogaGVpZ2h0UmVt
YWluaW5nID0gMCkgY29uc3Q7Ci0gICAgaW50IHJpZ2h0T2Zmc2V0KGludCB5KSBjb25zdCB7IHJl
dHVybiByaWdodFJlbE9mZnNldCh5LCByaWdodE9mZnNldCgpLCB0cnVlKTsgfQorICAgIGludCBy
aWdodE9mZnNldChpbnQgeSwgYm9vbCBmaXJzdExpbmUpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0UmVs
T2Zmc2V0KHksIHJpZ2h0T2Zmc2V0KCksIGZpcnN0TGluZSk7IH0KIAogICAgIGludCBsZWZ0T2Zm
c2V0KCkgY29uc3Q7CiAgICAgaW50IGxlZnRSZWxPZmZzZXQoaW50IHksIGludCBmaXhlZE9mZnNl
dCwgYm9vbCBhcHBseVRleHRJbmRlbnQgPSB0cnVlLCBpbnQqIGhlaWdodFJlbWFpbmluZyA9IDAp
IGNvbnN0OwotICAgIGludCBsZWZ0T2Zmc2V0KGludCB5KSBjb25zdCB7IHJldHVybiBsZWZ0UmVs
T2Zmc2V0KHksIGxlZnRPZmZzZXQoKSwgdHJ1ZSk7IH0KKyAgICBpbnQgbGVmdE9mZnNldChpbnQg
eSwgYm9vbCBmaXJzdExpbmUpIGNvbnN0IHsgcmV0dXJuIGxlZnRSZWxPZmZzZXQoeSwgbGVmdE9m
ZnNldCgpLCBmaXJzdExpbmUpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCBib29sIGhpdFRlc3RDb2x1bW5z
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50
IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwpAQCAtMjM3LDExICsyMzYsMTUgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpblJvb3RCbG9ja0NvbnRleHQoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0
SGFzTWFya3VwVHJ1bmNhdGlvbihib29sIGIgPSB0cnVlKSB7IG1faGFzTWFya3VwVHJ1bmNhdGlv
biA9IGI7IH0KLSAgICBib29sIGhhc01hcmt1cFRydW5jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2hhc01hcmt1cFRydW5jYXRpb247IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgcmVjdFdpdGhPdXRs
aW5lRm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIsIGludCBvdXRsaW5lV2lk
dGgpOworICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIG91dGxpbmVTdHlsZUZvclJlcGFpbnQoKSBj
b25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogaG92ZXJBbmNlc3RvcigpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVEcmFnU3RhdGUoYm9vbCBkcmFnT24pOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJ
bnRQb2ludCYpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBjaGlsZEJlY2FtZU5vbklubGluZShS
ZW5kZXJPYmplY3QqIGNoaWxkKTsKIAotICAgIHZpcnR1YWwgYm9vbCBoYXNTZWxlY3RlZENoaWxk
cmVuKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGF0ZSAhPSBTZWxlY3Rpb25Ob25lOyB9
Ci0gICAgdmlydHVhbCBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFNlbGVjdGlvblN0YXRlPihtX3NlbGVjdGlvblN0YXRlKTsgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKTsKIAogICAg
IHN0cnVjdCBCbG9ja1NlbGVjdGlvbkluZm8gewpAQCAtMjg5LDYgKzI5Miw5IEBAIHB1YmxpYzoK
ICAgICBpbnQgbGVmdFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQg
eSk7CiAgICAgaW50IHJpZ2h0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ss
IGludCB5KTsKIAorICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0
PiYsIGludCB0eCwgaW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHRvcExldmVsID0gdHJ1
ZSk7CisKICAgICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgY29tcHV0aW5nIGxpbmUgY291bnRzIGFu
ZCBoZWlnaHRzIGZvciBsaW5lIGNvdW50cy4KICAgICBSb290SW5saW5lQm94KiBsaW5lQXRJbmRl
eChpbnQpOwogICAgIGludCBsaW5lQ291bnQoKTsKQEAgLTMwMiw5ICszMDgsMTIgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgYWRqdXN0UmVjdEZvckNvbHVtbnMoSW50UmVjdCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBhZGRDb250aW51YXRpb25XaXRoT3V0bGluZShSZW5kZXJGbG93Kik7CisgICAg
dm9pZCBhZGRDb250aW51YXRpb25XaXRoT3V0bGluZShSZW5kZXJJbmxpbmUqKTsKICAgICB2b2lk
IHBhaW50Q29udGludWF0aW9uT3V0bGluZXMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwog
CisgICAgUmVuZGVySW5saW5lKiBpbmxpbmVDb250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2lubGluZUNvbnRpbnVhdGlvbjsgfQorICAgIHZvaWQgc2V0SW5saW5lQ29udGludWF0aW9uKFJl
bmRlcklubGluZSogYykgeyBtX2lubGluZUNvbnRpbnVhdGlvbiA9IGM7IH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGFkanVzdFBvaW50VG9Db2x1bW5Db250ZW50cyhJbnRQb2ludCYpIGNvbnN0Owog
ICAgIHZvaWQgYWRqdXN0Rm9yQm9yZGVyRml0KGludCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQp
IGNvbnN0OyAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJvcmRlckZpdEFkanVzdApAQCAtNDQ3LDcg
KzQ1NiwxMyBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj46
OmNvbnN0X2l0ZXJhdG9yIEl0ZXJhdG9yOwogICAgIERlcHJlY2F0ZWRQdHJMaXN0PEZsb2F0aW5n
T2JqZWN0PiogbV9mbG9hdGluZ09iamVjdHM7CiAgICAgTGlzdEhhc2hTZXQ8UmVuZGVyQm94Kj4q
IG1fcG9zaXRpb25lZE9iamVjdHM7Ci0gICAgICAgICAKKworICAgIC8vIEFuIGlubGluZSBjYW4g
YmUgc3BsaXQgd2l0aCBibG9ja3Mgb2NjdXJyaW5nIGluIGJldHdlZW4gdGhlIGlubGluZSBjb250
ZW50LgorICAgIC8vIFdoZW4gdGhpcyBvY2N1cnMgd2UgbmVlZCBhIHBvaW50ZXIgdG8gb3VyIG5l
eHQgb2JqZWN0LiAgV2UgY2FuIGJhc2ljYWxseSBiZQorICAgIC8vIHNwbGl0IGludG8gYSBzZXF1
ZW5jZSBvZiBpbmxpbmVzIGFuZCBibG9ja3MuICBUaGUgY29udGludWF0aW9uIHdpbGwgZWl0aGVy
IGJlCisgICAgLy8gYW4gYW5vbnltb3VzIGJsb2NrICh0aGF0IGhvdXNlcyBvdGhlciBibG9ja3Mp
IG9yIGl0IHdpbGwgYmUgYW4gaW5saW5lIGZsb3cuCisgICAgUmVuZGVySW5saW5lKiBtX2lubGlu
ZUNvbnRpbnVhdGlvbjsKKwogICAgIC8vIEFsbG9jYXRlZCBvbmx5IHdoZW4gc29tZSBvZiB0aGVz
ZSBmaWVsZHMgaGF2ZSBub24tZGVmYXVsdCB2YWx1ZXMKICAgICBzdHJ1Y3QgTWF4TWFyZ2luIHsK
ICAgICAgICAgTWF4TWFyZ2luKGNvbnN0IFJlbmRlckJsb2NrKiBvKSAKSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCShy
ZXZpc2lvbiA0MDMwMykKKysrIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NDMsMzUgKzQ0MywxNCBAQCBpbnQgUmVuZGVyQm94OjpwYWRkaW5nUmlnaHQoYm9vbCkg
Y29uc3QKICAgICByZXR1cm4gcGFkZGluZy5jYWxjTWluVmFsdWUodyk7CiB9CiAKLXZvaWQgUmVu
ZGVyQm94OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50
IHR5LCBib29sIHRvcExldmVsKQordm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHksIGJvb2wpCiB7Ci0gICAgLy8gRm9yIGJs
b2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUgbWFyZ2lucyBzbyB0
aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKLSAgICAvLyBpbmxpbmUgYm94ZXMgYWJvdmUgYW5k
IGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdpdGggdGhlbSB0byBmb3JtIGEgc2luZ2xl
IGlycmVndWxhcgotICAgIC8vIHNoYXBlKS4KLSAgICBSZW5kZXJGbG93KiBjb250aW51YXRpb24g
PSB2aXJ0dWFsQ29udGludWF0aW9uKCk7Ci0gICAgaWYgKHRvcExldmVsICYmIGNvbnRpbnVhdGlv
bikgewotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHkgLSBjb2xsYXBzZWRNYXJn
aW5Ub3AoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSwgaGVpZ2h0KCkg
KyBjb2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpKSk7Ci0gICAg
ICAgIGNvbnRpbnVhdGlvbi0+YWJzb2x1dGVSZWN0cyhyZWN0cywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR4IC0geCgpICsgY29udGludWF0aW9uLT5jb250YWluaW5nQmxv
Y2soKS0+eCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSB5KCkg
KyBjb250aW51YXRpb24tPmNvbnRhaW5pbmdCbG9jaygpLT55KCksIHRvcExldmVsKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWln
aHQoKSkpOworICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0
KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mIHF1YWRzLCBib29sIHRvcExldmVsKQordm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMo
VmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKQogewotICAgIC8vIEZvciBibG9ja3MgaW5z
aWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBy
dW4gcmlnaHQgdXAgdG8gdGhlCi0gICAgLy8gaW5saW5lIGJveGVzIGFib3ZlIGFuZCBiZWxvdyB1
cyAodGh1cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNpbmdsZSBpcnJlZ3Vs
YXIKLSAgICAvLyBzaGFwZSkuCi0gICAgUmVuZGVyRmxvdyogY29udGludWF0aW9uID0gdmlydHVh
bENvbnRpbnVhdGlvbigpOwotICAgIGlmICh0b3BMZXZlbCAmJiBjb250aW51YXRpb24pIHsKLSAg
ICAgICAgRmxvYXRSZWN0IGxvY2FsUmVjdCgwLCAtY29sbGFwc2VkTWFyZ2luVG9wKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSwgaGVpZ2h0KCkgKyBjb2xsYXBzZWRNYXJn
aW5Ub3AoKSArIGNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpKTsKLSAgICAgICAgcXVhZHMuYXBwZW5k
KGxvY2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbi0+
YWJzb2x1dGVRdWFkcyhxdWFkcywgdG9wTGV2ZWwpOwotICAgIH0gZWxzZQotICAgICAgICBxdWFk
cy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVp
Z2h0KCkpKSk7CisgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0
KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSkpOwogfQogCiBJbnRSZWN0IFJlbmRlckJveDo6YWJz
b2x1dGVDb250ZW50Qm94KCkgY29uc3QKQEAgLTUwNiwxNyArNDg1LDcgQEAgSW50UmVjdCBSZW5k
ZXJCb3g6Om91dGxpbmVCb3VuZHNGb3JSZXBhaQogCiB2b2lkIFJlbmRlckJveDo6YWRkRm9jdXNS
aW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50IHR5
KQogewotICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBp
bmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCi0gICAgLy8gaW5s
aW5lIGJveGVzIGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRo
ZW0gdG8gZm9ybSBhIHNpbmdsZSBpcnJlZ3VsYXIKLSAgICAvLyBzaGFwZSkuCi0gICAgUmVuZGVy
RmxvdyogY29udGludWF0aW9uID0gdmlydHVhbENvbnRpbnVhdGlvbigpOwotICAgIGlmIChjb250
aW51YXRpb24pIHsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KElu
dFJlY3QodHgsIHR5IC0gY29sbGFwc2VkTWFyZ2luVG9wKCksIHdpZHRoKCksIGhlaWdodCgpICsg
Y29sbGFwc2VkTWFyZ2luVG9wKCkgKyBjb2xsYXBzZWRNYXJnaW5Cb3R0b20oKSkpOwotICAgICAg
ICBjb250aW51YXRpb24tPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIHgoKSArIGNvbnRpbnVhdGlv
bi0+Y29udGFpbmluZ0Jsb2NrKCktPngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eSAtIHkoKSArIGNvbnRpbnVhdGlvbi0+Y29udGFpbmluZ0Jsb2NrKCktPnko
KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkRm9jdXNSaW5nUmVj
dChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICBncmFwaGljc0NvbnRl
eHQtPmFkZEZvY3VzUmluZ1JlY3QoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKSk7
CiB9CiAKIApAQCAtMTM0NCw3ICsxMzEzLDcgQEAgaW50IFJlbmRlckJveDo6Y29udGFpbmluZ0Js
b2NrV2lkdGgoKSBjbwogICAgIGlmICghY2IpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChz
aHJpbmtUb0F2b2lkRmxvYXRzKCkpCi0gICAgICAgIHJldHVybiBjYi0+bGluZVdpZHRoKHkoKSk7
CisgICAgICAgIHJldHVybiBjYi0+bGluZVdpZHRoKHkoKSwgZmFsc2UpOwogICAgIHJldHVybiBj
Yi0+YXZhaWxhYmxlV2lkdGgoKTsKIH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlckJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24gNDAzMDMpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBpbnQgYm9yZGVyTGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCktPmJvcmRlckxlZnRXaWR0aCgpOyB9CiAgICAgdmlydHVhbCBpbnQgYm9yZGVyUmlnaHQoKSBj
b25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCk7IH0KIAotICAgIC8vIFRo
ZSBmb2xsb3dpbmcgc2V2ZW4gZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGltcGxlbWVudCBjb2xsYXBz
aW5nIG1hcmdpbnMuCisgICAgLy8gVGhlIGZvbGxvd2luZyBmaXZlIGZ1bmN0aW9ucyBhcmUgdXNl
ZCB0byBpbXBsZW1lbnQgY29sbGFwc2luZyBtYXJnaW5zLgogICAgIC8vIEFsbCBvYmplY3RzIGtu
b3cgdGhlaXIgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4gIFRoZQogICAg
IC8vIGZvcm11bGEgZm9yIGNvbXB1dGluZyBhIGNvbGxhcHNlZCBtYXJnaW4gaXMgfG1heFBvc01h
cmdpbnwgLSB8bWF4TmVnbWFyZ2lufC4KICAgICAvLyBGb3IgYSBub24tY29sbGFwc2luZyBib3gs
IHN1Y2ggYXMgYSBsZWFmIGVsZW1lbnQsIHRoaXMgZm9ybXVsYSB3aWxsIHNpbXBseSByZXR1cm4K
QEAgLTE0Nyw4ICsxNDcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU2VsZkNvbGxh
cHNpbmdCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgaW50IGNvbGxhcHNlZE1h
cmdpblRvcCgpIGNvbnN0IHsgcmV0dXJuIG1heFRvcE1hcmdpbih0cnVlKSAtIG1heFRvcE1hcmdp
bihmYWxzZSk7IH0KICAgICBpbnQgY29sbGFwc2VkTWFyZ2luQm90dG9tKCkgY29uc3QgeyByZXR1
cm4gbWF4Qm90dG9tTWFyZ2luKHRydWUpIC0gbWF4Qm90dG9tTWFyZ2luKGZhbHNlKTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc1RvcE1hcmdpblF1aXJrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNCb3R0b21NYXJnaW5RdWlyaygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBpbnQgbWF4VG9wTWFyZ2luKGJvb2wgcG9zaXRpdmUpIGNvbnN0
IHsgcmV0dXJuIHBvc2l0aXZlID8gc3RkOjptYXgoMCwgbWFyZ2luVG9wKCkpIDogLXN0ZDo6bWlu
KDAsIG1hcmdpblRvcCgpKTsgfQogICAgIHZpcnR1YWwgaW50IG1heEJvdHRvbU1hcmdpbihib29s
IHBvc2l0aXZlKSBjb25zdCB7IHJldHVybiBwb3NpdGl2ZSA/IHN0ZDo6bWF4KDAsIG1hcmdpbkJv
dHRvbSgpKSA6IC1zdGQ6Om1pbigwLCBtYXJnaW5Cb3R0b20oKSk7IH0KIApAQCAtMjk5LDcgKzI5
Nyw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBJbnRSZWN0IG1hc2tDbGlwUmVjdCgpOwotICAg
IAorCisgICAgdmlydHVhbCB2b2lkIGNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlck9iamVjdCog
LypjaGlsZCovKSB7IH0KKwogI2lmIEVOQUJMRShTVkcpCiAgICAgdmlydHVhbCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ29u
dGFpbmVyLmNwcAkocmV2aXNpb24gNDAzMDMpCisrKyByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgUmVuZGVyQ29udGFp
bmVyOjp1cGRhdGVCZWZvcmVBZnRlckMKIAogICAgIC8vIEZvciA8cT48cC8+PC9xPiwgaWYgdGhp
cyBvYmplY3QgaXMgdGhlIGlubGluZSBjb250aW51YXRpb24gb2YgdGhlIDxxPiwgd2Ugb25seSB3
YW50IHRvIGdlbmVyYXRlCiAgICAgLy8gOmFmdGVyIGNvbnRlbnQgYW5kIG5vdCA6YmVmb3JlIGNv
bnRlbnQuCi0gICAgaWYgKG5ld0NvbnRlbnRXYW50ZWQgJiYgdHlwZSA9PSBSZW5kZXJTdHlsZTo6
QkVGT1JFICYmIGlzSW5saW5lQ29udGludWF0aW9uKCkpCisgICAgaWYgKG5ld0NvbnRlbnRXYW50
ZWQgJiYgdHlwZSA9PSBSZW5kZXJTdHlsZTo6QkVGT1JFICYmIGlzUmVuZGVySW5saW5lKCkgJiYg
c3RhdGljX2Nhc3Q8UmVuZGVySW5saW5lKj4odGhpcyktPmlzSW5saW5lQ29udGludWF0aW9uKCkp
CiAgICAgICAgIG5ld0NvbnRlbnRXYW50ZWQgPSBmYWxzZTsKIAogICAgIC8vIFNpbWlsYXJseSwg
aWYgd2UncmUgdGhlIGJlZ2lubmluZyBvZiBhIDxxPiwgYW5kIHRoZXJlJ3MgYW4gaW5saW5lIGNv
bnRpbnVhdGlvbiBmb3Igb3VyIG9iamVjdCwKQEAgLTU0Miw3ICs1NDIsNyBAQCB2b2lkIFJlbmRl
ckNvbnRhaW5lcjo6cmVtb3ZlTGVmdG92ZXJBbm9uCiAgICAgQVNTRVJUKGNoaWxkLT5pc0Fub255
bW91c0Jsb2NrKCkpOwogICAgIEFTU0VSVCghY2hpbGQtPmNoaWxkcmVuSW5saW5lKCkpOwogICAg
IAotICAgIGlmIChjaGlsZC0+Y29udGludWF0aW9uKCkpIAorICAgIGlmIChjaGlsZC0+aW5saW5l
Q29udGludWF0aW9uKCkpIAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0
KiBmaXJzdEFuQ2hpbGQgPSBjaGlsZC0+Zmlyc3RDaGlsZCgpOwpJbmRleDogcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmxleGli
bGVCb3guY3BwCShyZXZpc2lvbiA0MDMwMykKKysrIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3MCw3ICs3NzAsNyBAQCB2b2lkIFJlbmRlckZsZXhp
YmxlQm94OjpsYXlvdXRWZXJ0aWNhbEJvCiAgICAgICAgICAgICAgICAgaWYgKGRlc3RCbG9jay0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgIT0gTFRSKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgICAgIGludCBibG9ja0VkZ2UgPSBkZXN0QmxvY2stPnJpZ2h0T2Zm
c2V0KGxhc3RWaXNpYmxlTGluZS0+eVBvcygpKTsKKyAgICAgICAgICAgICAgICBpbnQgYmxvY2tF
ZGdlID0gZGVzdEJsb2NrLT5yaWdodE9mZnNldChsYXN0VmlzaWJsZUxpbmUtPnlQb3MoKSwgZmFs
c2UpOwogICAgICAgICAgICAgICAgIGlmICghbGFzdFZpc2libGVMaW5lLT5jYW5BY2NvbW1vZGF0
ZUVsbGlwc2lzKHRydWUsIGJsb2NrRWRnZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZpc2libGVMaW5lLT54UG9zKCkg
KyBsYXN0VmlzaWJsZUxpbmUtPndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0aCkpCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckZsb3cu
Y3BwCShyZXZpc2lvbiA0MDMwMykKKysrIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsMTIgKzU4LDIwIEBAIFJlbmRlckZsb3cqIFJlbmRlckZsb3c6OmNyZWF0
ZUFub255bW91c0YKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvLyBGSVhNRTogVGhpcyBpcyB0
ZW1wb3JhcnkgYW5kIHdpbGwgZ28gYXdheSBvbmNlIHdlIGZpbmlzaCBwdXNoaW5nIGFsbCB0aGUg
Y29udGludWF0aW9uIGNvZGUgZG93biBpbnRvIFJlbmRlckJsb2NrIGFuZCBSZW5kZXJJbmxpbmUu
CitzdGF0aWMgUmVuZGVyRmxvdyogbmV4dENvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQoreworICAgIGlmIChyZW5kZXJlci0+aXNJbmxpbmUoKSAmJiAhcmVuZGVyZXItPmlzUmVw
bGFjZWQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlckZsb3cqPihzdGF0aWNf
Y2FzdDxSZW5kZXJJbmxpbmUqPihyZW5kZXJlciktPmNvbnRpbnVhdGlvbigpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihyZW5kZXJlciktPmlubGluZUNvbnRpbnVhdGlv
bigpOworfQorCiBSZW5kZXJGbG93KiBSZW5kZXJGbG93Ojpjb250aW51YXRpb25CZWZvcmUoUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3Jl
Q2hpbGQtPnBhcmVudCgpID09IHRoaXMpCiAgICAgICAgIHJldHVybiB0aGlzOwogCi0gICAgUmVu
ZGVyRmxvdyogY3VyciA9IGNvbnRpbnVhdGlvbigpOworICAgIFJlbmRlckZsb3cqIGN1cnIgPSBu
ZXh0Q29udGludWF0aW9uKHRoaXMpOwogICAgIFJlbmRlckZsb3cqIG5leHRUb0xhc3QgPSB0aGlz
OwogICAgIFJlbmRlckZsb3cqIGxhc3QgPSB0aGlzOwogICAgIHdoaWxlIChjdXJyKSB7CkBAIC03
NSw3ICs4Myw3IEBAIFJlbmRlckZsb3cqIFJlbmRlckZsb3c6OmNvbnRpbnVhdGlvbkJlZm8KIAog
ICAgICAgICBuZXh0VG9MYXN0ID0gbGFzdDsKICAgICAgICAgbGFzdCA9IGN1cnI7Ci0gICAgICAg
IGN1cnIgPSBjdXJyLT5jb250aW51YXRpb24oKTsKKyAgICAgICAgY3VyciA9IG5leHRDb250aW51
YXRpb24oY3Vycik7CiAgICAgfQogCiAgICAgaWYgKCFiZWZvcmVDaGlsZCAmJiAhbGFzdC0+Zmly
c3RDaGlsZCgpKQpAQCAtOTYsMTAgKzEwNCwxNyBAQCB2b2lkIFJlbmRlckZsb3c6OmFkZENoaWxk
V2l0aENvbnRpbnVhdGlvCiAgICAgfQogCiAgICAgUmVuZGVyRmxvdyogZmxvdyA9IGNvbnRpbnVh
dGlvbkJlZm9yZShiZWZvcmVDaGlsZCk7Ci0gICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCBiZWZv
cmVDaGlsZC0+cGFyZW50KCktPmlzUmVuZGVyQmxvY2soKSB8fAotICAgICAgICAgICAgICAgIGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSk7Ci0gICAgUmVuZGVyRmxvdyog
YmVmb3JlQ2hpbGRQYXJlbnQgPSBiZWZvcmVDaGlsZCA/IHN0YXRpY19jYXN0PFJlbmRlckZsb3cq
PihiZWZvcmVDaGlsZC0+cGFyZW50KCkpIDogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZmxvdy0+Y29udGludWF0aW9uKCkgPyBmbG93LT5jb250aW51YXRpb24oKSA6IGZs
b3cpOworICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpLT5p
c1JlbmRlckJsb2NrKCkgfHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpLT5pc1JlbmRlcklubGluZSgp
KTsKKyAgICBSZW5kZXJGbG93KiBiZWZvcmVDaGlsZFBhcmVudCA9IDA7CisgICAgaWYgKGJlZm9y
ZUNoaWxkKQorICAgICAgICBiZWZvcmVDaGlsZFBhcmVudCA9IHN0YXRpY19jYXN0PFJlbmRlckZs
b3cqPihiZWZvcmVDaGlsZC0+cGFyZW50KCkpOworICAgIGVsc2UgeworICAgICAgICBSZW5kZXJG
bG93KiBjb250ID0gbmV4dENvbnRpbnVhdGlvbihmbG93KTsKKyAgICAgICAgaWYgKGNvbnQpCisg
ICAgICAgICAgICBiZWZvcmVDaGlsZFBhcmVudCA9IGNvbnQ7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGJlZm9yZUNoaWxkUGFyZW50ID0gZmxvdzsKKyAgICB9CiAKICAgICBpZiAobmV3Q2hp
bGQtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxk
UGFyZW50LT5hZGRDaGlsZFRvRmxvdyhuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwpAQCAtMTI2LDcg
KzE0MSw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6YWRkQ2hpbGRXaXRoQ29udGludWF0aW8KIAogdm9p
ZCBSZW5kZXJGbG93OjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQogewotICAgIGlmIChjb250aW51YXRpb24oKSkKKyAgICBpZiAobmV4
dENvbnRpbnVhdGlvbih0aGlzKSkKICAgICAgICAgcmV0dXJuIGFkZENoaWxkV2l0aENvbnRpbnVh
dGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAgIHJldHVybiBhZGRDaGlsZFRvRmxvdyhu
ZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogfQpAQCAtMTk4LDExICsyMTMsNiBAQCB2b2lkIFJlbmRl
ckZsb3c6OmRlbGV0ZUxpbmVCb3hlcygpCiAKIHZvaWQgUmVuZGVyRmxvdzo6ZGVzdHJveSgpCiB7
Ci0gICAgLy8gRGV0YWNoIG91ciBjb250aW51YXRpb24gZmlyc3QuCi0gICAgaWYgKG1fY29udGlu
dWF0aW9uKQotICAgICAgICBtX2NvbnRpbnVhdGlvbi0+ZGVzdHJveSgpOwotICAgIG1fY29udGlu
dWF0aW9uID0gMDsKLQogICAgIC8vIE1ha2Ugc3VyZSB0byBkZXN0cm95IGFub255bW91cyBjaGls
ZHJlbiBmaXJzdCB3aGlsZSB0aGV5IGFyZSBzdGlsbCBjb25uZWN0ZWQgdG8gdGhlIHJlc3Qgb2Yg
dGhlIHRyZWUsIHNvIHRoYXQgdGhleSB3aWxsCiAgICAgLy8gcHJvcGVybHkgZGlydHkgbGluZSBi
b3hlcyB0aGF0IHRoZXkgYXJlIHJlbW92ZWQgZnJvbS4gIEVmZmVjdHMgdGhhdCBkbyA6YmVmb3Jl
LzphZnRlciBvbmx5IG9uIGhvdmVyIGNvdWxkIGNyYXNoIG90aGVyd2lzZS4KICAgICBSZW5kZXJD
b250YWluZXI6OmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7CkBAIC01NjIsMTAgKzU3MiwxNCBA
QCBJbnRSZWN0IFJlbmRlckZsb3c6OmxvY2FsQ2FyZXRSZWN0KElubGluCiB2b2lkIFJlbmRlckZs
b3c6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBp
bnQgdHgsIGludCB0eSkKIHsKICAgICBpZiAoaXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgIC8v
IENvbnRpbnVhdGlvbnMgc2hvdWxkIGluY2x1ZGUgdGhlaXIgbWFyZ2lucyBpbiB0aGUgb3V0bGlu
ZSByZWN0LgotICAgICAgICBpZiAoY29udGludWF0aW9uKCkpIHsKLSAgICAgICAgICAgIGJvb2wg
bmV4dElubGluZUhhc0xpbmVCb3ggPSBjb250aW51YXRpb24oKS0+Zmlyc3RMaW5lQm94KCk7Ci0g
ICAgICAgICAgICBib29sIHByZXZJbmxpbmVIYXNMaW5lQm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVy
Rmxvdyo+KGNvbnRpbnVhdGlvbigpLT5lbGVtZW50KCktPnJlbmRlcmVyKCkpLT5maXJzdExpbmVC
b3goKTsKKyAgICAgICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQg
YW5kIGluY2x1ZGUgbWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKKyAgICAg
ICAgLy8gaW5saW5lIGJveGVzIGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1lcmdl
ZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNpbmdsZSBpcnJlZ3VsYXIKKyAgICAgICAgLy8gc2hhcGUp
LgorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPih0aGlzKS0+aW5saW5lQ29u
dGludWF0aW9uKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIHJlYWxseSBp
c24ndCBhY2N1cmF0ZS4gCisgICAgICAgICAgICBib29sIG5leHRJbmxpbmVIYXNMaW5lQm94ID0g
c3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPih0aGlzKS0+aW5saW5lQ29udGludWF0aW9uKCktPmZp
cnN0TGluZUJveCgpOworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcuIFRoZSBw
cmluY2lwYWwgcmVuZGVyZXIgbWF5IG5vdCBiZSB0aGUgY29udGludWF0aW9uIHByZWNlZGluZyB0
aGlzIGJsb2NrLgorICAgICAgICAgICAgYm9vbCBwcmV2SW5saW5lSGFzTGluZUJveCA9IHN0YXRp
Y19jYXN0PFJlbmRlckZsb3cqPihzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KHRoaXMpLT5pbmxp
bmVDb250aW51YXRpb24oKS0+ZWxlbWVudCgpLT5yZW5kZXJlcigpKS0+Zmlyc3RMaW5lQm94KCk7
IAogICAgICAgICAgICAgaW50IHRvcE1hcmdpbiA9IHByZXZJbmxpbmVIYXNMaW5lQm94ID8gY29s
bGFwc2VkTWFyZ2luVG9wKCkgOiAwOwogICAgICAgICAgICAgaW50IGJvdHRvbU1hcmdpbiA9IG5l
eHRJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQm90dG9tKCkgOiAwOwogICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KEludFJlY3QodHgsIHR5IC0g
dG9wTWFyZ2luLCAKQEAgLTU5MSwxNSArNjA1LDE2IEBAIHZvaWQgUmVuZGVyRmxvdzo6YWRkRm9j
dXNSaW5nUmVjdHMoR3JhcGgKICAgICAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY29udGlu
dWF0aW9uKCkpIHsKKyAgICBSZW5kZXJCb3gqIGNvbnRpbnVhdGlvbiA9IG5leHRDb250aW51YXRp
b24odGhpcyk7CisgICAgaWYgKGNvbnRpbnVhdGlvbikgewogICAgICAgICBpZiAoaXNJbmxpbmUo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhncmFwaGlj
c0NvbnRleHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPngoKSArIGNvbnRpbnVhdGlvbigpLT54KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSBjb250YWluaW5n
QmxvY2soKS0+eSgpICsgY29udGludWF0aW9uKCktPnkoKSk7CisgICAgICAgICAgICBjb250aW51
YXRpb24tPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPngo
KSArIGNvbnRpbnVhdGlvbi0+eCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55KCkgKyBjb250aW51YXRpb24tPnko
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1Jp
bmdSZWN0cyhncmFwaGljc0NvbnRleHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR4IC0geCgpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9j
aygpLT54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHkgLSB5KCkgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPnkoKSk7CisgICAg
ICAgICAgICBjb250aW51YXRpb24tPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0geCgpICsg
Y29udGludWF0aW9uLT5jb250YWluaW5nQmxvY2soKS0+eCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIHkoKSArIGNvbnRpbnVhdGlvbi0+Y29udGFp
bmluZ0Jsb2NrKCktPnkoKSk7CiAgICAgfQogfQogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmxv
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbG93LmgJKHJldmlzaW9uIDQwMzAz
KQorKysgcmVuZGVyaW5nL1JlbmRlckZsb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjggKzQw
LDE1IEBAIGNsYXNzIFJlbmRlckZsb3cgOiBwdWJsaWMgUmVuZGVyQ29udGFpbmUKIHB1YmxpYzoK
ICAgICBSZW5kZXJGbG93KE5vZGUqIG5vZGUpCiAgICAgICAgIDogUmVuZGVyQ29udGFpbmVyKG5v
ZGUpCi0gICAgICAgICwgbV9jb250aW51YXRpb24oMCkKICAgICAgICAgLCBtX2ZpcnN0TGluZUJv
eCgwKQogICAgICAgICAsIG1fbGFzdExpbmVCb3goMCkKICAgICAgICAgLCBtX2xpbmVIZWlnaHQo
LTEpCi0gICAgICAgICwgbV9jaGlsZHJlbklubGluZSh0cnVlKQotICAgICAgICAsIG1fZmlyc3RM
aW5lKGZhbHNlKQotICAgICAgICAsIG1fdG9wTWFyZ2luUXVpcmsoZmFsc2UpIAotICAgICAgICAs
IG1fYm90dG9tTWFyZ2luUXVpcmsoZmFsc2UpCi0gICAgICAgICwgbV9oYXNNYXJrdXBUcnVuY2F0
aW9uKGZhbHNlKQotICAgICAgICAsIG1fc2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uTm9uZSkKLSAg
ICAgICAgLCBtX2hhc0NvbHVtbnMoZmFsc2UpCi0gICAgICAgICwgbV9pc0NvbnRpbnVhdGlvbihm
YWxzZSkKLSAgICAgICAgLCBtX2NlbGxXaWR0aENoYW5nZWQoZmFsc2UpCiAgICAgewogICAgIH0K
ICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCB+UmVuZGVyRmxvdygpOwogI2VuZGlmCiAKLSAg
ICB2aXJ0dWFsIFJlbmRlckZsb3cqIHZpcnR1YWxDb250aW51YXRpb24oKSBjb25zdCB7IHJldHVy
biBjb250aW51YXRpb24oKTsgfQotICAgIFJlbmRlckZsb3cqIGNvbnRpbnVhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGludWF0aW9uOyB9Ci0gICAgdm9pZCBzZXRDb250aW51YXRpb24oUmVu
ZGVyRmxvdyogYykgeyBtX2NvbnRpbnVhdGlvbiA9IGM7IH0KICAgICBSZW5kZXJGbG93KiBjb250
aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAKICAgICB2b2lkIGFk
ZENoaWxkV2l0aENvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKTsKQEAgLTk1LDE5ICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
YWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25z
dCBJbnRSZWN0JiBwcmV2TGluZSwgY29uc3QgSW50UmVjdCYgdGhpc0xpbmUsIGNvbnN0IEludFJl
Y3QmIG5leHRMaW5lKTsKICAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBp
bnQgdHgsIGludCB0eSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQ29sdW1ucygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzQ29sdW1uczsgfQotCiAgICAgdm9pZCBjYWxjTWFyZ2lucyhpbnQgY29udGFp
bmVyV2lkdGgpOwogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7CiAKLXByaXZh
dGU6Ci0gICAgLy8gQW4gaW5saW5lIGNhbiBiZSBzcGxpdCB3aXRoIGJsb2NrcyBvY2N1cnJpbmcg
aW4gYmV0d2VlbiB0aGUgaW5saW5lIGNvbnRlbnQuCi0gICAgLy8gV2hlbiB0aGlzIG9jY3VycyB3
ZSBuZWVkIGEgcG9pbnRlciB0byBvdXIgbmV4dCBvYmplY3QuICBXZSBjYW4gYmFzaWNhbGx5IGJl
Ci0gICAgLy8gc3BsaXQgaW50byBhIHNlcXVlbmNlIG9mIGlubGluZXMgYW5kIGJsb2Nrcy4gIFRo
ZSBjb250aW51YXRpb24gd2lsbCBlaXRoZXIgYmUKLSAgICAvLyBhbiBhbm9ueW1vdXMgYmxvY2sg
KHRoYXQgaG91c2VzIG90aGVyIGJsb2Nrcykgb3IgaXQgd2lsbCBiZSBhbiBpbmxpbmUgZmxvdy4K
LSAgICBSZW5kZXJGbG93KiBtX2NvbnRpbnVhdGlvbjsKLQogcHJvdGVjdGVkOgogICAgIC8vIEZv
ciBibG9jayBmbG93cywgZWFjaCBib3ggcmVwcmVzZW50cyB0aGUgcm9vdCBpbmxpbmUgYm94IGZv
ciBhIGxpbmUgaW4gdGhlCiAgICAgLy8gcGFyYWdyYXBoLgpAQCAtMTE2LDIyICs5NCw2IEBAIHBy
b3RlY3RlZDoKICAgICBJbmxpbmVGbG93Qm94KiBtX2xhc3RMaW5lQm94OwogCiAgICAgbXV0YWJs
ZSBpbnQgbV9saW5lSGVpZ2h0OwotICAgIAotICAgIC8vIFRoZXNlIGJpdGZpZWxkcyBhcmUgbW92
ZWQgaGVyZSBmcm9tIHN1YmNsYXNzZXMgdG8gcGFjayB0aGVtIHRvZ2V0aGVyCi0gICAgLy8gZnJv
bSBSZW5kZXJCbG9jawotICAgIGJvb2wgbV9jaGlsZHJlbklubGluZSA6IDE7Ci0gICAgYm9vbCBt
X2ZpcnN0TGluZSA6IDE7Ci0gICAgYm9vbCBtX3RvcE1hcmdpblF1aXJrIDogMTsKLSAgICBib29s
IG1fYm90dG9tTWFyZ2luUXVpcmsgOiAxOwotICAgIGJvb2wgbV9oYXNNYXJrdXBUcnVuY2F0aW9u
IDogMTsKLSAgICB1bnNpZ25lZCBtX3NlbGVjdGlvblN0YXRlIDogMzsgLy8gU2VsZWN0aW9uU3Rh
dGUKLSAgICBib29sIG1faGFzQ29sdW1ucyA6IDE7Ci0gICAgCi0gICAgLy8gZnJvbSBSZW5kZXJJ
bmxpbmUKLSAgICBib29sIG1faXNDb250aW51YXRpb24gOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB3
ZSdyZSBhIGNvbnRpbnVhdGlvbiBvZiBhbiBpbmxpbmUuCi0gICAgCi0gICAgLy8gZnJvbSBSZW5k
ZXJUYWJsZUNlbGwKLSAgICBib29sIG1fY2VsbFdpZHRoQ2hhbmdlZCA6IDE7CiB9OwogCiAjaWZk
ZWYgTkRFQlVHCkluZGV4OiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gNDAzMDMpCisrKyByZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAi
UmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0zNSwxMyArMzYsMzIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJJbmxpbmU6OlJlbmRlcklubGluZShOb2Rl
KiBub2RlKQogICAgIDogUmVuZGVyRmxvdyhub2RlKQorICAgICwgbV9jb250aW51YXRpb24oMCkK
IHsKKyAgICBzZXRDaGlsZHJlbklubGluZSh0cnVlKTsKIH0KIAogUmVuZGVySW5saW5lOjp+UmVu
ZGVySW5saW5lKCkKIHsKIH0KIAordm9pZCBSZW5kZXJJbmxpbmU6OmRlc3Ryb3koKQoreworICAg
IC8vIERldGFjaCBvdXIgY29udGludWF0aW9uIGZpcnN0LgorICAgIGlmIChtX2NvbnRpbnVhdGlv
bikKKyAgICAgICAgbV9jb250aW51YXRpb24tPmRlc3Ryb3koKTsKKyAgICBtX2NvbnRpbnVhdGlv
biA9IDA7CisgICAgCisgICAgUmVuZGVyRmxvdzo6ZGVzdHJveSgpOworfQorCitSZW5kZXJJbmxp
bmUqIFJlbmRlcklubGluZTo6aW5saW5lQ29udGludWF0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fY29udGludWF0aW9uIHx8IG1fY29udGludWF0aW9uLT5pc0lubGluZSgpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVySW5saW5lKj4obV9jb250aW51YXRpb24pOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG1fY29udGludWF0aW9uKS0+aW5saW5lQ29u
dGludWF0aW9uKCk7Cit9CisKIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShSZW5k
ZXJTdHlsZTo6RGlmZiBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAg
UmVuZGVyRmxvdzo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwpAQCAtNTUsMTUgKzc1
LDExIEBAIHZvaWQgUmVuZGVySW5saW5lOjpzdHlsZURpZENoYW5nZShSZW5kZXIKICAgICAvLyBl
LmcuLCA8Zm9udD5mb28gPGg0PmdvbzwvaDQ+IG1vbzwvZm9udD4uICBUaGUgPGZvbnQ+IGlubGlu
ZXMgYmVmb3JlCiAgICAgLy8gYW5kIGFmdGVyIHRoZSBibG9jayBzaGFyZSB0aGUgc2FtZSBzdHls
ZSwgYnV0IHRoZSBibG9jayBkb2Vzbid0CiAgICAgLy8gbmVlZCB0byBwYXNzIGl0cyBzdHlsZSBv
biB0byBhbnlvbmUgZWxzZS4KLSAgICBSZW5kZXJGbG93KiBjdXJyQ29udCA9IGNvbnRpbnVhdGlv
bigpOwotICAgIHdoaWxlIChjdXJyQ29udCkgewotICAgICAgICBpZiAoY3VyckNvbnQtPmlzSW5s
aW5lKCkpIHsKLSAgICAgICAgICAgIFJlbmRlckZsb3cqIG5leHRDb250ID0gY3VyckNvbnQtPmNv
bnRpbnVhdGlvbigpOwotICAgICAgICAgICAgY3VyckNvbnQtPnNldENvbnRpbnVhdGlvbigwKTsK
LSAgICAgICAgICAgIGN1cnJDb250LT5zZXRTdHlsZShzdHlsZSgpKTsKLSAgICAgICAgICAgIGN1
cnJDb250LT5zZXRDb250aW51YXRpb24obmV4dENvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGN1
cnJDb250ID0gY3VyckNvbnQtPmNvbnRpbnVhdGlvbigpOworICAgIGZvciAoUmVuZGVySW5saW5l
KiBjdXJyQ29udCA9IGlubGluZUNvbnRpbnVhdGlvbigpOyBjdXJyQ29udDsgY3VyckNvbnQgPSBj
dXJyQ29udC0+aW5saW5lQ29udGludWF0aW9uKCkpIHsKKyAgICAgICAgUmVuZGVyQm94KiBuZXh0
Q29udCA9IGN1cnJDb250LT5jb250aW51YXRpb24oKTsKKyAgICAgICAgY3VyckNvbnQtPnNldENv
bnRpbnVhdGlvbigwKTsKKyAgICAgICAgY3VyckNvbnQtPnNldFN0eWxlKHN0eWxlKCkpOworICAg
ICAgICBjdXJyQ29udC0+c2V0Q29udGludWF0aW9uKG5leHRDb250KTsKICAgICB9CiAKICAgICBt
X2xpbmVIZWlnaHQgPSAtMTsKQEAgLTc1LDExICs5MSw2IEBAIHZvaWQgUmVuZGVySW5saW5lOjpz
dHlsZURpZENoYW5nZShSZW5kZXIKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVySW5saW5lOjppc0lu
bGluZUNvbnRpbnVhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faXNDb250aW51YXRpb247
Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FmdGVyQ29udGVudChSZW5kZXJPYmplY3QqIGNo
aWxkKQogewogICAgIGlmICghY2hpbGQpCkBAIC0xMDksNyArMTIwLDcgQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OmFkZENoaWxkVG9GbG93KFJlbmRlcgogCiAgICAgICAgIFJlbmRlckJsb2NrKiBuZXdC
b3ggPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlckJsb2NrKGRvY3VtZW50KCkgLyogYW5vbnlt
b3VzIGJveCAqLyk7CiAgICAgICAgIG5ld0JveC0+c2V0U3R5bGUobmV3U3R5bGUucmVsZWFzZSgp
KTsKLSAgICAgICAgUmVuZGVyRmxvdyogb2xkQ29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7
CisgICAgICAgIFJlbmRlckJveCogb2xkQ29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7CiAg
ICAgICAgIHNldENvbnRpbnVhdGlvbihuZXdCb3gpOwogCiAgICAgICAgIC8vIFNvbWVvbmUgbWF5
IGhhdmUgcHV0IGEgPHA+IGluc2lkZSBhIDxxPiwgY2F1c2luZyBhIHNwbGl0LiAgV2hlbiB0aGlz
IGhhcHBlbnMsIHRoZSA6YWZ0ZXIgY29udGVudApAQCAtMTM0LDE0ICsxNDUsMTMgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93KFJlbmRlcgogUmVuZGVySW5saW5lKiBSZW5kZXJJ
bmxpbmU6OmNsb25lSW5saW5lKFJlbmRlckZsb3cqIHNyYykKIHsKICAgICBSZW5kZXJJbmxpbmUq
IG8gPSBuZXcgKHNyYy0+cmVuZGVyQXJlbmEoKSkgUmVuZGVySW5saW5lKHNyYy0+ZWxlbWVudCgp
KTsKLSAgICBvLT5tX2lzQ29udGludWF0aW9uID0gdHJ1ZTsKICAgICBvLT5zZXRTdHlsZShzcmMt
PnN0eWxlKCkpOwogICAgIHJldHVybiBvOwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJ
bmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogbWlkZGxlQmxvY2ssCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQs
IFJlbmRlckZsb3cqIG9sZENvbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJveCogb2xkQ29udCkKIHsKICAgICAvLyBD
cmVhdGUgYSBjbG9uZSBvZiB0aGlzIGlubGluZS4KICAgICBSZW5kZXJJbmxpbmUqIGNsb25lID0g
Y2xvbmVJbmxpbmUodGhpcyk7CkBAIC0xNTgsNyArMTY4LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgIH0KIAogICAgIC8vIEhvb2sgfGNsb25lfCB1cCBh
cyB0aGUgY29udGludWF0aW9uIG9mIHRoZSBtaWRkbGUgYmxvY2suCi0gICAgbWlkZGxlQmxvY2st
PnNldENvbnRpbnVhdGlvbihjbG9uZSk7CisgICAgbWlkZGxlQmxvY2stPnNldElubGluZUNvbnRp
bnVhdGlvbihjbG9uZSk7CiAKICAgICAvLyBXZSBoYXZlIGJlZW4gcmVwYXJlbnRlZCBhbmQgYXJl
IG5vdyB1bmRlciB0aGUgZnJvbUJsb2NrLiAgV2UgbmVlZAogICAgIC8vIHRvIHdhbGsgdXAgb3Vy
IGlubGluZSBwYXJlbnQgY2hhaW4gdW50aWwgd2UgaGl0IHRoZSBjb250YWluaW5nIGJsb2NrLgpA
QCAtMTgyLDggKzE5Miw5IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVy
QmwKICAgICAgICAgICAgIGNsb25lLT5hZGRDaGlsZFRvRmxvdyhjbG9uZUNoaWxkLCAwKTsKIAog
ICAgICAgICAgICAgLy8gSG9vayB0aGUgY2xvbmUgdXAgYXMgYSBjb250aW51YXRpb24gb2YgfGN1
cnJ8LgotICAgICAgICAgICAgUmVuZGVyRmxvdyogb2xkQ29udCA9IGN1cnItPmNvbnRpbnVhdGlv
bigpOwotICAgICAgICAgICAgY3Vyci0+c2V0Q29udGludWF0aW9uKGNsb25lKTsKKyAgICAgICAg
ICAgIFJlbmRlcklubGluZSogaW5saW5lQ3VyciA9IHN0YXRpY19jYXN0PFJlbmRlcklubGluZSo+
KGN1cnIpOworICAgICAgICAgICAgUmVuZGVyQm94KiBvbGRDb250ID0gaW5saW5lQ3Vyci0+Y29u
dGludWF0aW9uKCk7CisgICAgICAgICAgICBpbmxpbmVDdXJyLT5zZXRDb250aW51YXRpb24oY2xv
bmUpOwogICAgICAgICAgICAgY2xvbmUtPnNldENvbnRpbnVhdGlvbihvbGRDb250KTsKIAogICAg
ICAgICAgICAgLy8gU29tZW9uZSBtYXkgaGF2ZSBpbmRpcmVjdGx5IGNhdXNlZCBhIDxxPiB0byBz
cGxpdC4gIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgOmFmdGVyIGNvbnRlbnQKQEAgLTIyMyw3ICsy
MzQsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiB9CiAKIHZv
aWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVu
ZGVyQmxvY2sqIG5ld0Jsb2NrQm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJGbG93KiBvbGRDb250KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJCb3gqIG9sZENvbnQp
CiB7CiAgICAgUmVuZGVyQmxvY2sqIHByZSA9IDA7CiAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0g
Y29udGFpbmluZ0Jsb2NrKCk7CkBAIC0zNjEsMTQgKzM3MiwxNCBAQCBWaXNpYmxlUG9zaXRpb24g
UmVuZGVySW5saW5lOjpwb3NpdGlvbkZvCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgaW50IHBhcmVudEJsb2NrWCA9IGNiLT54KCkgKyB4OwogICAgIGludCBw
YXJlbnRCbG9ja1kgPSBjYi0+eSgpICsgeTsKLSAgICBmb3IgKFJlbmRlckZsb3cqIGMgPSBjb250
aW51YXRpb24oKTsgYzsgYyA9IGMtPmNvbnRpbnVhdGlvbigpKSB7Ci0gICAgICAgIFJlbmRlckZs
b3cqIGNvbnRCbG9jayA9IGM7Ci0gICAgICAgIGlmIChjLT5pc0lubGluZSgpKQotICAgICAgICAg
ICAgY29udEJsb2NrID0gYy0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgUmVuZGVyQm94KiBjID0g
Y29udGludWF0aW9uKCk7CisgICAgd2hpbGUgKGMpIHsKKyAgICAgICAgUmVuZGVyQm94KiBjb250
QmxvY2sgPSBjOwogICAgICAgICBpZiAoYy0+aXNJbmxpbmUoKSB8fCBjLT5maXJzdENoaWxkKCkp
CiAgICAgICAgICAgICByZXR1cm4gYy0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhwYXJlbnRCbG9j
a1ggLSBjb250QmxvY2stPngoKSwgcGFyZW50QmxvY2tZIC0gY29udEJsb2NrLT55KCkpOworICAg
ICAgICBjID0gc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjKS0+aW5saW5lQ29udGludWF0aW9u
KCk7CiAgICAgfQotCisgICAgCiAgICAgcmV0dXJuIFJlbmRlckZsb3c6OnBvc2l0aW9uRm9yQ29v
cmRpbmF0ZXMoeCwgeSk7CiB9CiAKQEAgLTQ1OSw0ICs0NzAsNjAgQEAgSW50UmVjdCBSZW5kZXJJ
bmxpbmU6OmNsaXBwZWRPdmVyZmxvd1JlYwogICAgIHJldHVybiByOwogfQogCitJbnRSZWN0IFJl
bmRlcklubGluZTo6cmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRD
b250YWluZXIsIGludCBvdXRsaW5lV2lkdGgpCit7CisgICAgSW50UmVjdCByKFJlbmRlckZsb3c6
OnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgb3V0bGluZVdpZHRo
KSk7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkp
CisgICAgICAgICAgICByLnVuaXRlKGN1cnItPnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQocmVw
YWludENvbnRhaW5lciwgb3V0bGluZVdpZHRoKSk7CisgICAgfQorICAgIHJldHVybiByOworfQor
Cit2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlRHJhZ1N0YXRlKGJvb2wgZHJhZ09uKQoreworICAg
IFJlbmRlckZsb3c6OnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOworICAgIGlmIChjb250aW51YXRp
b24oKSkKKyAgICAgICAgY29udGludWF0aW9uKCktPnVwZGF0ZURyYWdTdGF0ZShkcmFnT24pOwor
fQorCit2b2lkIFJlbmRlcklubGluZTo6Y2hpbGRCZWNhbWVOb25JbmxpbmUoUmVuZGVyT2JqZWN0
KiBjaGlsZCkKK3sKKyAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgZmxvdy4KKyAg
ICBSZW5kZXJCbG9jayogbmV3Qm94ID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICBSZW5k
ZXJCb3gqIG9sZENvbnRpbnVhdGlvbiA9IGNvbnRpbnVhdGlvbigpOworICAgIHNldENvbnRpbnVh
dGlvbihuZXdCb3gpOworICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKKyAgICByZW1vdmVDaGlsZE5vZGUoY2hpbGQpOworICAgIHNwbGl0Rmxvdyhi
ZWZvcmVDaGlsZCwgbmV3Qm94LCBjaGlsZCwgb2xkQ29udGludWF0aW9uKTsKK30KKwordm9pZCBS
ZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTm9kZSogbm9kZSA9IGVsZW1lbnQoKTsKKyAgICBJbnRQb2lu
dCBsb2NhbFBvaW50KHBvaW50KTsKKyAgICBpZiAobm9kZSkgeworICAgICAgICBpZiAoaXNJbmxp
bmVDb250aW51YXRpb24oKSkgeworICAgICAgICAgICAgLy8gV2UncmUgaW4gdGhlIGNvbnRpbnVh
dGlvbiBvZiBhIHNwbGl0IGlubGluZS4gIEFkanVzdCBvdXIgbG9jYWwgcG9pbnQgdG8gYmUgaW4g
dGhlIGNvb3JkaW5hdGUgc3BhY2UKKyAgICAgICAgICAgIC8vIG9mIHRoZSBwcmluY2lwYWwgcmVu
ZGVyZXIncyBjb250YWluaW5nIGJsb2NrLiAgVGhpcyB3aWxsIGVuZCB1cCBiZWluZyB0aGUgaW5u
ZXJOb25TaGFyZWROb2RlLgorICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGZpcnN0QmxvY2sgPSBu
b2RlLT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gR2V0IG91ciBjb250YWluaW5nIGJsb2NrLgorICAgICAgICAgICAgUmVuZGVyQm94
KiBibG9jayA9IHRvUmVuZGVyQm94KHRoaXMpOworICAgICAgICAgICAgaWYgKGlzSW5saW5lKCkp
CisgICAgICAgICAgICAgICAgYmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgCisg
ICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUoYmxvY2stPngoKSAtIGZpcnN0QmxvY2stPngoKSwg
YmxvY2stPnkoKSAtIGZpcnN0QmxvY2stPnkoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXN1
bHQuc2V0SW5uZXJOb2RlKG5vZGUpOworICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJl
ZE5vZGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vblNoYXJlZE5vZGUobm9kZSk7
CisgICAgICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50KGxvY2FsUG9pbnQpOworICAgIH0KK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gNDAzMDMpCisr
KyByZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiwx
NyBAQCBwdWJsaWM6CiAgICAgUmVuZGVySW5saW5lKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5k
ZXJJbmxpbmUoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1Jl
bmRlcklubGluZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgY2hp
bGRyZW5JbmxpbmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNJbmxpbmVDb250aW51YXRpb24oKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZFRvRmxvdyhSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KTsKICAgICB2b2lkIHNwbGl0SW5saW5lcyhSZW5kZXJCbG9jayogZnJvbUJsb2NrLCBSZW5kZXJC
bG9jayogdG9CbG9jaywgUmVuZGVyQmxvY2sqIG1pZGRsZUJsb2NrLAotICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckZsb3cqIG9sZENvbnQpOwor
ICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJv
eCogb2xkQ29udCk7CiAgICAgdm9pZCBzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCwgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrQm94LAotICAgICAgICAgICAgICAgICAgIFJlbmRlck9i
amVjdCogbmV3Q2hpbGQsIFJlbmRlckZsb3cqIG9sZENvbnQpOworICAgICAgICAgICAgICAgICAg
IFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlckJveCogb2xkQ29udCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCkgeyB9IC8vIERvIG5vdGhpbmcgZm9yIGxheW91dCgpCiAKQEAgLTYy
LDEwICs2MSwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgb2Zmc2V0V2lkdGgoKSBjb25z
dCB7IHJldHVybiBsaW5lc0JvdW5kaW5nQm94KCkud2lkdGgoKTsgfQogICAgIHZpcnR1YWwgaW50
IG9mZnNldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS5oZWlnaHQo
KTsgfQogCi0gICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwg
aW50IHR5LCBib29sIHRvcExldmVsID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHksIGJvb2wgdG9wTGV2ZWwgPSB0
cnVlKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYs
IGJvb2wgdG9wTGV2ZWwgPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChSZW5kZXJCb3gqIHJlcGFpbnRDb250YWluZXIpOworICAgIHZp
cnR1YWwgSW50UmVjdCByZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KFJlbmRlckJveCogcmVwYWlu
dENvbnRhaW5lciwgaW50IG91dGxpbmVXaWR0aCk7CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkZvckNvb3JkaW5hdGVzKGludCB4LCBpbnQgeSk7CiAKQEAgLTc3LDExICs3
NywyNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIGJvdW5kaW5nQm94
LndpZHRoKCksIGJvdW5kaW5nQm94LmhlaWdodCgpKTsKICAgICB9CiAKKyAgICBSZW5kZXJCb3gq
IGNvbnRpbnVhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGludWF0aW9uOyB9CisgICAgUmVu
ZGVySW5saW5lKiBpbmxpbmVDb250aW51YXRpb24oKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRp
bnVhdGlvbihSZW5kZXJCb3gqIGMpIHsgbV9jb250aW51YXRpb24gPSBjOyB9CisgICAgCisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZURyYWdTdGF0ZShib29sIGRyYWdPbik7CisgICAgCisgICAgdmly
dHVhbCB2b2lkIGNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlck9iamVjdCogY2hpbGQpOworCisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEludFBvaW50Jik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoUmVuZGVyU3R5bGU6OkRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKICAg
ICBzdGF0aWMgUmVuZGVySW5saW5lKiBjbG9uZUlubGluZShSZW5kZXJGbG93KiBzcmMpOwogCitw
cml2YXRlOgorICAgIFJlbmRlckJveCogbV9jb250aW51YXRpb247IC8vIENhbiBiZSBlaXRoZXIg
YSBibG9jayBvciBhbiBpbmxpbmUuIDxiPjxpPjxwPkhlbGxvPC9wPjwvaT48L2I+LiBJbiB0aGlz
IGV4YW1wbGUgdGhlIDxpPiB3aWxsIGhhdmUgYSBibG9jayBhcyBpdHMgY29udGludWF0aW9uIGJ1
dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8Yj4gd2lsbCBqdXN0IGhh
dmUgYW4gaW5saW5lIGFzIGl0cyBjb250aW51YXRpb24uCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDQwMzAzKQorKysgcmVuZGVy
aW5nL1JlbmRlckxpc3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDcgKzI0OCw3IEBA
IHZvaWQgUmVuZGVyTGlzdEl0ZW06OnBvc2l0aW9uTGlzdE1hcmtlcigKICAgICAgICAgUm9vdElu
bGluZUJveCogcm9vdCA9IG1fbWFya2VyLT5pbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKIAog
ICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7Ci0gICAgICAgICAgICBp
bnQgbGVmdExpbmVPZmZzZXQgPSBsZWZ0UmVsT2Zmc2V0KHlPZmZzZXQsIGxlZnRPZmZzZXQoeU9m
ZnNldCkpOworICAgICAgICAgICAgaW50IGxlZnRMaW5lT2Zmc2V0ID0gbGVmdFJlbE9mZnNldCh5
T2Zmc2V0LCBsZWZ0T2Zmc2V0KHlPZmZzZXQsIGZhbHNlKSwgZmFsc2UpOwogICAgICAgICAgICAg
bWFya2VyWFBvcyA9IGxlZnRMaW5lT2Zmc2V0IC0geE9mZnNldCAtIHBhZGRpbmdMZWZ0KCkgLSBi
b3JkZXJMZWZ0KCkgKyBtX21hcmtlci0+bWFyZ2luTGVmdCgpOwogICAgICAgICAgICAgbV9tYXJr
ZXItPmlubGluZUJveFdyYXBwZXIoKS0+YWRqdXN0UG9zaXRpb24obWFya2VyWFBvcyAtIG1hcmtl
ck9sZFgsIDApOwogICAgICAgICAgICAgaWYgKG1hcmtlclhQb3MgPCByb290LT5sZWZ0T3ZlcmZs
b3coKSkgewpAQCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnBvc2l0aW9u
TGlzdE1hcmtlcigKICAgICAgICAgICAgICAgICBhZGp1c3RPdmVyZmxvdyA9IHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnQgcmlnaHRMaW5lT2Zm
c2V0ID0gcmlnaHRSZWxPZmZzZXQoeU9mZnNldCwgcmlnaHRPZmZzZXQoeU9mZnNldCkpOworICAg
ICAgICAgICAgaW50IHJpZ2h0TGluZU9mZnNldCA9IHJpZ2h0UmVsT2Zmc2V0KHlPZmZzZXQsIHJp
Z2h0T2Zmc2V0KHlPZmZzZXQsIGZhbHNlKSwgZmFsc2UpOwogICAgICAgICAgICAgbWFya2VyWFBv
cyA9IHJpZ2h0TGluZU9mZnNldCAtIHhPZmZzZXQgKyBwYWRkaW5nUmlnaHQoKSArIGJvcmRlclJp
Z2h0KCkgKyBtX21hcmtlci0+bWFyZ2luTGVmdCgpOwogICAgICAgICAgICAgbV9tYXJrZXItPmlu
bGluZUJveFdyYXBwZXIoKS0+YWRqdXN0UG9zaXRpb24obWFya2VyWFBvcyAtIG1hcmtlck9sZFgs
IDApOwogICAgICAgICAgICAgaWYgKG1hcmtlclhQb3MgKyBtX21hcmtlci0+d2lkdGgoKSA+IHJv
b3QtPnJpZ2h0T3ZlcmZsb3coKSkgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNp
b24gNDAzMDMpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3Miw3ICs0NzIsNiBAQCBTdHJpbmcgbGlzdE1hcmtlclRleHQoRUxpc3RTdHlsZVR5
cGUgdHlwCiBSZW5kZXJMaXN0TWFya2VyOjpSZW5kZXJMaXN0TWFya2VyKFJlbmRlckxpc3RJdGVt
KiBpdGVtKQogICAgIDogUmVuZGVyQm94KGl0ZW0tPmRvY3VtZW50KCkpCiAgICAgLCBtX2xpc3RJ
dGVtKGl0ZW0pCi0gICAgLCBtX3NlbGVjdGlvblN0YXRlKFNlbGVjdGlvbk5vbmUpCiB7CiAgICAg
Ly8gaW5pdCBSZW5kZXJPYmplY3QgYXR0cmlidXRlcwogICAgIHNldElubGluZSh0cnVlKTsgICAv
LyBvdXIgb2JqZWN0IGlzIElubGluZQpAQCAtODc0LDcgKzg3Myw3IEBAIEludFJlY3QgUmVuZGVy
TGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXIKIAogdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpzZXRT
ZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKIHsKLSAgICBtX3NlbGVjdGlvblN0
YXRlID0gc3RhdGU7CisgICAgUmVuZGVyQm94OjpzZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7CiAg
ICAgaWYgKElubGluZUJveCogYm94ID0gaW5saW5lQm94V3JhcHBlcigpKQogICAgICAgICBpZiAo
Um9vdElubGluZUJveCogcm9vdCA9IGJveC0+cm9vdCgpKQogICAgICAgICAgICAgcm9vdC0+c2V0
SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBTZWxlY3Rpb25Ob25lKTsKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuaAkocmV2aXNpb24gNDAzMDMpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wg
aXNJbnNpZGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgU2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9u
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKTsKICAgICB2aXJ0dWFsIEludFJl
Y3Qgc2VsZWN0aW9uUmVjdChib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7CiAgICAg
dmlydHVhbCBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
QEAgLTc3LDcgKzc2LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV90ZXh0OwogICAgIFJlZlB0
cjxTdHlsZUltYWdlPiBtX2ltYWdlOwogICAgIFJlbmRlckxpc3RJdGVtKiBtX2xpc3RJdGVtOwot
ICAgIFNlbGVjdGlvblN0YXRlIG1fc2VsZWN0aW9uU3RhdGU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDAzMDMpCisrKyByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxMyBAQCBS
ZW5kZXJPYmplY3Q6OlJlbmRlck9iamVjdChOb2RlKiBub2RlKQogICAgICwgbV9oYXNPdmVycmlk
ZVNpemUoZmFsc2UpCiAgICAgLCBtX2hhc0NvdW50ZXJOb2RlTWFwKGZhbHNlKQogICAgICwgbV9l
dmVySGFkTGF5b3V0KGZhbHNlKQorICAgICwgbV9jaGlsZHJlbklubGluZShmYWxzZSkKKyAgICAs
IG1fdG9wTWFyZ2luUXVpcmsoZmFsc2UpIAorICAgICwgbV9ib3R0b21NYXJnaW5RdWlyayhmYWxz
ZSkKKyAgICAsIG1faGFzTWFya3VwVHJ1bmNhdGlvbihmYWxzZSkKKyAgICAsIG1fc2VsZWN0aW9u
U3RhdGUoU2VsZWN0aW9uTm9uZSkKKyAgICAsIG1faGFzQ29sdW1ucyhmYWxzZSkKKyAgICAsIG1f
Y2VsbFdpZHRoQ2hhbmdlZChmYWxzZSkKIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgcmVuZGVyT2Jq
ZWN0Q291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTIyNywxMSArMjM0LDYgQEAgYm9vbCBSZW5kZXJP
YmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBSZW5kZXJPYmplY3Q6OmlzSW5saW5lQ29udGludWF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRDaGlsZChSZW5kZXJPYmplY3Qq
LCBSZW5kZXJPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTc2Myw4
ICsxNzY1LDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogCiAg
ICAgLy8gV2UgZGlkbid0IG1vdmUsIGJ1dCB3ZSBkaWQgY2hhbmdlIHNpemUuICBJbnZhbGlkYXRl
IHRoZSBkZWx0YSwgd2hpY2ggd2lsbCBjb25zaXN0IG9mIHBvc3NpYmx5CiAgICAgLy8gdHdvIHJl
Y3RhbmdsZXMgKGJ1dCB0eXBpY2FsbHkgb25seSBvbmUpLgotICAgIFJlbmRlckZsb3cqIGNvbnRp
bnVhdGlvbiA9IHZpcnR1YWxDb250aW51YXRpb24oKTsKLSAgICBSZW5kZXJTdHlsZSogb3V0bGlu
ZVN0eWxlID0gIWlzSW5saW5lKCkgJiYgY29udGludWF0aW9uID8gY29udGludWF0aW9uLT5zdHls
ZSgpIDogc3R5bGUoKTsKKyAgICBSZW5kZXJTdHlsZSogb3V0bGluZVN0eWxlID0gb3V0bGluZVN0
eWxlRm9yUmVwYWludCgpOwogICAgIGludCBvdyA9IG91dGxpbmVTdHlsZS0+b3V0bGluZVNpemUo
KTsKICAgICBTaGFkb3dEYXRhKiBib3hTaGFkb3cgPSBzdHlsZSgpLT5ib3hTaGFkb3coKTsKICAg
ICBpbnQgd2lkdGggPSBhYnMobmV3T3V0bGluZUJveC53aWR0aCgpIC0gb2xkT3V0bGluZUJveC53
aWR0aCgpKTsKQEAgLTE4MjYsMTcgKzE4MjcsNiBAQCBJbnRSZWN0IFJlbmRlck9iamVjdDo6cmVj
dFdpdGhPdXRsaW5lRm9yCiB7CiAgICAgSW50UmVjdCByKGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KHJlcGFpbnRDb250YWluZXIpKTsKICAgICByLmluZmxhdGUob3V0bGluZVdpZHRoKTsK
LQotICAgIGlmICh2aXJ0dWFsQ29udGludWF0aW9uKCkgJiYgIWlzSW5saW5lKCkpCi0gICAgICAg
IHIuaW5mbGF0ZVkodG9SZW5kZXJCb3godGhpcyktPmNvbGxhcHNlZE1hcmdpblRvcCgpKTsKLQot
ICAgIGlmIChpc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
dXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewot
ICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSkKLSAgICAgICAgICAgICAgICByLnVuaXRl
KGN1cnItPnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgb3V0bGlu
ZVdpZHRoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICByZXR1cm4gcjsKIH0KIApAQCAtMTk4
NSwyNiArMTk3NSw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpoYW5kbGVEeW5hbWljRmxvYXRQb3MK
ICAgICAvLyBjaGlsZHJlbklubGluZSgpIHN0YXRlIGFuZCBvdXIgc3RhdGUuCiAgICAgc2V0SW5s
aW5lKHN0eWxlKCktPmlzRGlzcGxheUlubGluZVR5cGUoKSk7CiAgICAgaWYgKGlzSW5saW5lKCkg
IT0gcGFyZW50KCktPmNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgaWYgKCFpc0lubGluZSgp
KSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50KCktPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgZmxvdy4KLSAgICAgICAg
ICAgICAgICBSZW5kZXJJbmxpbmUqIHBhcmVudElubGluZSA9IHN0YXRpY19jYXN0PFJlbmRlcklu
bGluZSo+KHBhcmVudCgpKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogbmV3Qm94ID0g
cGFyZW50SW5saW5lLT5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOwotCi0gICAgICAgICAgICAgICAg
UmVuZGVyRmxvdyogb2xkQ29udGludWF0aW9uID0gcGFyZW50SW5saW5lLT5jb250aW51YXRpb24o
KTsKLSAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmUtPnNldENvbnRpbnVhdGlvbihuZXdCb3gp
OwotCi0gICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG5leHRTaWJs
aW5nKCk7Ci0gICAgICAgICAgICAgICAgcGFyZW50KCktPnJlbW92ZUNoaWxkTm9kZSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmUtPnNwbGl0RmxvdyhiZWZvcmVDaGlsZCwgbmV3
Qm94LCB0aGlzLCBvbGRDb250aW51YXRpb24pOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJl
bnQoKS0+aXNSZW5kZXJCbG9jaygpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIG8g
PSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KHBhcmVudCgpKTsKLSAgICAgICAgICAgICAgICBv
LT5tYWtlQ2hpbGRyZW5Ob25JbmxpbmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoby0+aXNBbm9u
eW1vdXNCbG9jaygpICYmIG8tPnBhcmVudCgpKQotICAgICAgICAgICAgICAgICAgICBvLT5wYXJl
bnQoKS0+cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhvKTsKLSAgICAgICAgICAgICAgICAv
LyBvIG1heSBiZSBkZWFkIGhlcmUKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKCFpc0lubGluZSgpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyQm94
Kj4ocGFyZW50KCkpLT5jaGlsZEJlY2FtZU5vbklubGluZSh0aGlzKTsKKyAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAvLyBBbiBhbm9ueW1vdXMgYmxvY2sgbXVzdCBiZSBtYWRlIHRvIHdyYXAg
dGhpcyBpbmxpbmUuCiAgICAgICAgICAgICBSZW5kZXJCbG9jayogYm94ID0gY3JlYXRlQW5vbnlt
b3VzQmxvY2soKTsKICAgICAgICAgICAgIHBhcmVudCgpLT5pbnNlcnRDaGlsZE5vZGUoYm94LCB0
aGlzKTsKQEAgLTIyNzgsMTMgKzIyNTEsNiBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6
Y29udGFpbmVyKCkgCiAgICAgcmV0dXJuIG87CiB9CiAKLS8vIFRoaXMgY29kZSBoYXMgYmVlbiB3
cml0dGVuIHRvIGFudGljaXBhdGUgdGhlIGFkZGl0aW9uIG9mIENTUzMtOjpvdXRzaWRlIGFuZCA6
Omluc2lkZSBnZW5lcmF0ZWQKLS8vIGNvbnRlbnQgKGFuZCBwZXJoYXBzIFhCTCkuICBUaGF0J3Mg
d2h5IGl0IHVzZXMgdGhlIHJlbmRlciB0cmVlIGFuZCBub3QgdGhlIERPTSB0cmVlLgotUmVuZGVy
T2JqZWN0KiBSZW5kZXJPYmplY3Q6OmhvdmVyQW5jZXN0b3IoKSBjb25zdAotewotICAgIHJldHVy
biAoIWlzSW5saW5lKCkgJiYgdmlydHVhbENvbnRpbnVhdGlvbigpKSA/IHZpcnR1YWxDb250aW51
YXRpb24oKSA6IHBhcmVudCgpOwotfQotCiBib29sIFJlbmRlck9iamVjdDo6aXNTZWxlY3Rpb25C
b3JkZXIoKSBjb25zdAogewogICAgIFNlbGVjdGlvblN0YXRlIHN0ID0gc2VsZWN0aW9uU3RhdGUo
KTsKQEAgLTI0MDEsOSArMjM2Nyw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVEcmFnU3Rh
dGUoYm9vbCAKICAgICAgICAgZWxlbWVudCgpLT5zZXRDaGFuZ2VkKCk7CiAgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2li
bGluZygpKQogICAgICAgICBjdXJyLT51cGRhdGVEcmFnU3RhdGUoZHJhZ09uKTsKLSAgICBSZW5k
ZXJGbG93KiBjb250aW51YXRpb24gPSB2aXJ0dWFsQ29udGludWF0aW9uKCk7Ci0gICAgaWYgKGNv
bnRpbnVhdGlvbikKLSAgICAgICAgY29udGludWF0aW9uLT51cGRhdGVEcmFnU3RhdGUoZHJhZ09u
KTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBp
bnQgdHgsIGludCB0eSwgSGl0VGVzdEZpbHRlciBoaXRUZXN0RmlsdGVyKQpAQCAtMjQzNSwzMyAr
MjM5OCwxMSBAQCB2b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlSGl0VGVzdFJlc3VsdChICiAgICAg
ICAgIHJldHVybjsKIAogICAgIE5vZGUqIG5vZGUgPSBlbGVtZW50KCk7Ci0gICAgSW50UG9pbnQg
bG9jYWxQb2ludChwb2ludCk7Ci0gICAgaWYgKGlzUmVuZGVyVmlldygpKQotICAgICAgICBub2Rl
ID0gZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgZWxzZSBpZiAoIWlzSW5saW5l
KCkgJiYgdmlydHVhbENvbnRpbnVhdGlvbigpKQotICAgICAgICAvLyBXZSBhcmUgaW4gdGhlIG1h
cmdpbnMgb2YgYmxvY2sgZWxlbWVudHMgdGhhdCBhcmUgcGFydCBvZiBhIGNvbnRpbnVhdGlvbi4g
IEluCi0gICAgICAgIC8vIHRoaXMgY2FzZSB3ZSdyZSBhY3R1YWxseSBzdGlsbCBpbnNpZGUgdGhl
IGVuY2xvc2luZyBpbmxpbmUgZWxlbWVudCB0aGF0IHdhcwotICAgICAgICAvLyBzcGxpdC4gIEdv
IGFoZWFkIGFuZCBzZXQgb3VyIGlubmVyIG5vZGUgYWNjb3JkaW5nbHkuCi0gICAgICAgIG5vZGUg
PSB2aXJ0dWFsQ29udGludWF0aW9uKCktPmVsZW1lbnQoKTsKLQogICAgIGlmIChub2RlKSB7Ci0g
ICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPnZpcnR1YWxD
b250aW51YXRpb24oKSAmJiBub2RlLT5yZW5kZXJlcigpICE9IHRoaXMpIHsKLSAgICAgICAgICAg
IC8vIFdlJ3JlIGluIHRoZSBjb250aW51YXRpb24gb2YgYSBzcGxpdCBpbmxpbmUuICBBZGp1c3Qg
b3VyIGxvY2FsIHBvaW50IHRvIGJlIGluIHRoZSBjb29yZGluYXRlIHNwYWNlCi0gICAgICAgICAg
ICAvLyBvZiB0aGUgcHJpbmNpcGFsIHJlbmRlcmVyJ3MgY29udGFpbmluZyBibG9jay4gIFRoaXMg
d2lsbCBlbmQgdXAgYmVpbmcgdGhlIGlubmVyTm9uU2hhcmVkTm9kZS4KLSAgICAgICAgICAgIFJl
bmRlckJsb2NrKiBmaXJzdEJsb2NrID0gbm9kZS0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdldCBvdXIgY29udGFpbmluZyBibG9j
ay4KLSAgICAgICAgICAgIFJlbmRlckJveCogYmxvY2sgPSB0b1JlbmRlckJveCh0aGlzKTsKLSAg
ICAgICAgICAgIGlmIChpc0lubGluZSgpKQotICAgICAgICAgICAgICAgIGJsb2NrID0gY29udGFp
bmluZ0Jsb2NrKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgbG9jYWxQb2ludC5tb3ZlKGJsb2Nr
LT54KCkgLSBmaXJzdEJsb2NrLT54KCksIGJsb2NrLT55KCkgLSBmaXJzdEJsb2NrLT55KCkpOwot
ICAgICAgICB9Ci0KICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShub2RlKTsKICAgICAgICAg
aWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0
SW5uZXJOb25TaGFyZWROb2RlKG5vZGUpOwotICAgICAgICByZXN1bHQuc2V0TG9jYWxQb2ludChs
b2NhbFBvaW50KTsKKyAgICAgICAgcmVzdWx0LnNldExvY2FsUG9pbnQocG9pbnQpOwogICAgIH0K
IH0KIApAQCAtMjY5MCw4ICsyNjMxLDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNv
cmF0aW9uQ29sbwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGN1cnIgPSBjdXJy
LT5wYXJlbnQoKTsKLSAgICAgICAgaWYgKGN1cnIgJiYgY3Vyci0+aXNSZW5kZXJCbG9jaygpICYm
IGN1cnItPnZpcnR1YWxDb250aW51YXRpb24oKSkKLSAgICAgICAgICAgIGN1cnIgPSBjdXJyLT52
aXJ0dWFsQ29udGludWF0aW9uKCk7CisgICAgICAgIGlmIChjdXJyICYmIGN1cnItPmlzUmVuZGVy
QmxvY2soKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGN1cnIpLT5pbmxpbmVDb250aW51
YXRpb24oKSkKKyAgICAgICAgICAgIGN1cnIgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KGN1
cnIpLT5pbmxpbmVDb250aW51YXRpb24oKTsKICAgICB9IHdoaWxlIChjdXJyICYmIGRlY29yYXRp
b25zICYmICghcXVpcmtzTW9kZSB8fCAhY3Vyci0+ZWxlbWVudCgpIHx8CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCFjdXJyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoYVRh
ZykgJiYgIWN1cnItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShmb250VGFnKSkpKTsKIApAQCAtMjgz
Nyw3ICsyNzc4LDcgQEAgaW50IFJlbmRlck9iamVjdDo6bmV4dE9mZnNldChpbnQgY3VycmVudAog
CiB2b2lkIFJlbmRlck9iamVjdDo6YWRqdXN0UmVjdEZvck91dGxpbmVBbmRTaGFkb3coSW50UmVj
dCYgcmVjdCkgY29uc3QKIHsKLSAgICBpbnQgb3V0bGluZVNpemUgPSAhaXNJbmxpbmUoKSAmJiB2
aXJ0dWFsQ29udGludWF0aW9uKCkgPyB2aXJ0dWFsQ29udGludWF0aW9uKCktPnN0eWxlKCktPm91
dGxpbmVTaXplKCkgOiBzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpOworICAgIGludCBvdXRsaW5lU2l6
ZSA9IG91dGxpbmVTdHlsZUZvclJlcGFpbnQoKS0+b3V0bGluZVNpemUoKTsKICAgICBpZiAoU2hh
ZG93RGF0YSogYm94U2hhZG93ID0gc3R5bGUoKS0+Ym94U2hhZG93KCkpIHsKICAgICAgICAgaW50
IHNoYWRvd0xlZnQgPSAwOwogICAgICAgICBpbnQgc2hhZG93UmlnaHQgPSAwOwpJbmRleDogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAkocmV2aXNpb24gNDAzMDMpCisrKyByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0OCw3ICsyNDgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
RnJhbWVTZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0lt
YWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVC
bG9ja09ySW5saW5lVGFibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc0lubGluZUNvbnRpbnVhdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0xp
c3RCb3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xpc3RJ
dGVtKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0TWFy
a2VyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTI3NSwxMCArMjc0LDEyIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNIVE1MTWFycXVlZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29s
IGNoaWxkcmVuSW5saW5lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Q2hpbGRyZW5JbmxpbmUoYm9vbCkgeyB9Ci0KLSAgICB2aXJ0dWFsIFJlbmRlckZsb3cq
IHZpcnR1YWxDb250aW51YXRpb24oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgYm9vbCBjaGls
ZHJlbklubGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5JbmxpbmU7IH0KKyAgICB2b2lk
IHNldENoaWxkcmVuSW5saW5lKGJvb2wgYiA9IHRydWUpIHsgbV9jaGlsZHJlbklubGluZSA9IGI7
IH0KKyAgICBib29sIGhhc0NvbHVtbnMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbHVtbnM7IH0K
KyAgICB2b2lkIHNldEhhc0NvbHVtbnMoYm9vbCBiID0gdHJ1ZSkgeyBtX2hhc0NvbHVtbnMgPSBi
OyB9CisgICAgYm9vbCBjZWxsV2lkdGhDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsV2lk
dGhDaGFuZ2VkOyB9CisgICAgdm9pZCBzZXRDZWxsV2lkdGhDaGFuZ2VkKGJvb2wgYiA9IHRydWUp
IHsgbV9jZWxsV2lkdGhDaGFuZ2VkID0gYjsgfQogCiAjaWYgRU5BQkxFKFNWRykKICAgICB2aXJ0
dWFsIGJvb2wgaXNTVkdSb290KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTMwMSw3ICsz
MDIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9pc0Fub255bW91cyAmJiBz
dHlsZSgpLT5kaXNwbGF5KCkgPT0gQkxPQ0sgJiYgc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gUmVu
ZGVyU3R5bGU6Ok5PUFNFVURPICYmICFpc0xpc3RNYXJrZXIoKTsKICAgICB9Ci0KKyAgICBib29s
IGlzSW5saW5lQ29udGludWF0aW9uKCkgY29uc3QgeyByZXR1cm4gaXNJbmxpbmUoKSAmJiBpc0Jv
eCgpICYmIChlbGVtZW50KCkgPyBlbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gdGhpcyA6IGZhbHNl
KTsgfQogICAgIGJvb2wgaXNGbG9hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZmxvYXRpbmc7IH0K
ICAgICBib29sIGlzUG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb25lZDsgfSAv
LyBhYnNvbHV0ZSBvciBmaXhlZCBwb3NpdGlvbmluZwogICAgIGJvb2wgaXNSZWxQb3NpdGlvbmVk
KCkgY29uc3QgeyByZXR1cm4gbV9yZWxQb3NpdGlvbmVkOyB9IC8vIHJlbGF0aXZlIHBvc2l0aW9u
aW5nCkBAIC0zNDEsNyArMzQyLDcgQEAgcHVibGljOgogICAgIFJlbmRlclN0eWxlKiBnZXRDYWNo
ZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6UHNldWRvSWQsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IDApIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGdldFVuY2FjaGVk
UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlBzZXVkb0lkLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5
bGUgPSAwKSBjb25zdDsKICAgICAKLSAgICB2b2lkIHVwZGF0ZURyYWdTdGF0ZShib29sIGRyYWdP
bik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZURyYWdTdGF0ZShib29sIGRyYWdPbik7CiAKICAg
ICBSZW5kZXJWaWV3KiB2aWV3KCkgY29uc3Q7CiAKQEAgLTM1OSw3ICszNjAsNyBAQCBwdWJsaWM6
CiAgICAgICogcG9zaXRpb25lZCBlbGVtZW50cwogICAgICAqLwogICAgIFJlbmRlck9iamVjdCog
Y29udGFpbmVyKCkgY29uc3Q7Ci0gICAgUmVuZGVyT2JqZWN0KiBob3ZlckFuY2VzdG9yKCkgY29u
c3Q7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGhvdmVyQW5jZXN0b3IoKSBjb25zdCB7IHJl
dHVybiBwYXJlbnQoKTsgfQogCiAgICAgdm9pZCBtYXJrQ29udGFpbmluZ0Jsb2Nrc0ZvckxheW91
dChib29sIHNjaGVkdWxlUmVsYXlvdXQgPSB0cnVlLCBSZW5kZXJPYmplY3QqIG5ld1Jvb3QgPSAw
KTsKICAgICB2b2lkIHNldE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cyA9IHRy
dWUpOwpAQCAtNDg1LDcgKzQ4Niw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGl0VGVzdChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYsIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0RmlsdGVyID0gSGl0VGVzdEFsbCk7CiAgICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4
LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwotICAgIHZvaWQgdXBkYXRl
SGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9p
bnQmKTsKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yQ29vcmRpbmF0
ZXMoaW50IHgsIGludCB5KTsKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChj
b25zdCBJbnRQb2ludCYpOwpAQCAtNTUzLDcgKzU1NCwxMSBAQCBwdWJsaWM6CiAgICAgUmVuZGVy
U3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQogICAgIFJlbmRl
clN0eWxlKiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0OwogICAgIFJlbmRlclN0eWxlKiBzdHlsZShi
b29sIGZpcnN0TGluZSkgY29uc3QgeyByZXR1cm4gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUo
KSA6IHN0eWxlKCk7IH0KLQorICAgIAorICAgIC8vIEFub255bW91cyBibG9ja3MgdGhhdCBhcmUg
cGFydCBvZiBvZiBhIGNvbnRpbnVhdGlvbiBjaGFpbiB3aWxsIHJldHVybiB0aGVpciBpbmxpbmUg
Y29udGludWF0aW9uJ3Mgb3V0bGluZSBzdHlsZSBpbnN0ZWFkLgorICAgIC8vIFRoaXMgaXMgdHlw
aWNhbGx5IG9ubHkgcmVsZXZhbnQgd2hlbiByZXBhaW50aW5nLgorICAgIHZpcnR1YWwgUmVuZGVy
U3R5bGUqIG91dGxpbmVTdHlsZUZvclJlcGFpbnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpOyB9
CisgICAgCiAgICAgdm9pZCBnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycyhpbnQgZGVjb3JhdGlvbnMs
IENvbG9yJiB1bmRlcmxpbmUsIENvbG9yJiBvdmVybGluZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvbG9yJiBsaW5ldGhyb3VnaCwgYm9vbCBxdWlya3NNb2RlID0gZmFsc2Up
OwogCkBAIC02MDEsOSArNjA2LDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGNs
aXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KDApOwogICAgIH0KLSAgICB2aXJ0dWFsIEludFJl
Y3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFp
bmVyKTsKLSAgICAKLSAgICBJbnRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoUmVuZGVy
Qm94KiByZXBhaW50Q29udGFpbmVyLCBpbnQgb3V0bGluZVdpZHRoKTsKKyAgICB2aXJ0dWFsIElu
dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoUmVuZGVyQm94KiByZXBhaW50Q29u
dGFpbmVyKTsgICAgCisgICAgdmlydHVhbCBJbnRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFp
bnQoUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBpbnQgb3V0bGluZVdpZHRoKTsKIAogICAg
IC8vIEdpdmVuIGEgcmVjdCBpbiB0aGUgb2JqZWN0J3MgY29vcmRpbmF0ZSBzcGFjZSwgY29tcHV0
ZSBhIHJlY3Qgc3VpdGFibGUgZm9yIHJlcGFpbnRpbmcKICAgICAvLyB0aGF0IHJlY3QgaW4gdmll
dyBjb29yZGluYXRlcy4KQEAgLTYzNiw2ICs2NDAsOSBAQCBwdWJsaWM6CiAgICAgLy8gQXBwbGll
ZCBhcyBhICJzbG9wIiB0byBkaXJ0eSByZWN0IGNoZWNrcyBkdXJpbmcgdGhlIG91dGxpbmUgcGFp
bnRpbmcgcGhhc2UncyBkaXJ0eS1yZWN0IGNoZWNrcy4KICAgICBpbnQgbWF4aW1hbE91dGxpbmVT
aXplKFBhaW50UGhhc2UpIGNvbnN0OwogCisgICAgdm9pZCBzZXRIYXNNYXJrdXBUcnVuY2F0aW9u
KGJvb2wgYiA9IHRydWUpIHsgbV9oYXNNYXJrdXBUcnVuY2F0aW9uID0gYjsgfQorICAgIGJvb2wg
aGFzTWFya3VwVHJ1bmNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWFya3VwVHJ1bmNhdGlv
bjsgfQorCiAgICAgZW51bSBTZWxlY3Rpb25TdGF0ZSB7CiAgICAgICAgIFNlbGVjdGlvbk5vbmUs
IC8vIFRoZSBvYmplY3QgaXMgbm90IHNlbGVjdGVkLgogICAgICAgICBTZWxlY3Rpb25TdGFydCwg
Ly8gVGhlIG9iamVjdCBlaXRoZXIgY29udGFpbnMgdGhlIHN0YXJ0IG9mIGEgc2VsZWN0aW9uIHJ1
biBvciBpcyB0aGUgc3RhcnQgb2YgYSBydW4KQEAgLTY0NiwxMCArNjUzLDEwIEBAIHB1YmxpYzoK
IAogICAgIC8vIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBzdGF0ZSBmb3IgYW4gb2JqZWN0LiAgRm9y
IGJsb2NrcywgdGhlIHN0YXRlIHJlZmVycyB0byB0aGUgc3RhdGUgb2YgdGhlIGxlYWYKICAgICAv
LyBkZXNjZW5kYW50cyAoYXMgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBTZWxlY3Rpb25TdGF0ZSBl
bnVtIGRlY2xhcmF0aW9uKS4KLSAgICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0
YXRlKCkgY29uc3QgeyByZXR1cm4gU2VsZWN0aW9uTm9uZTsgfQorICAgIFNlbGVjdGlvblN0YXRl
IHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZWN0aW9uU3Rh
dGU+KG1fc2VsZWN0aW9uU3RhdGUpOzsgfQogCiAgICAgLy8gU2V0cyB0aGUgc2VsZWN0aW9uIHN0
YXRlIGZvciBhbiBvYmplY3QuCi0gICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNl
bGVjdGlvblN0YXRlIHN0YXRlKSB7IGlmIChwYXJlbnQoKSkgcGFyZW50KCktPnNldFNlbGVjdGlv
blN0YXRlKHN0YXRlKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxl
Y3Rpb25TdGF0ZSBzdGF0ZSkgeyBtX3NlbGVjdGlvblN0YXRlID0gc3RhdGU7IH0KIAogICAgIC8v
IEEgc2luZ2xlIHJlY3RhbmdsZSB0aGF0IGVuY29tcGFzc2VzIGFsbCBvZiB0aGUgc2VsZWN0ZWQg
b2JqZWN0cyB3aXRoaW4gdGhpcyBvYmplY3QuICBVc2VkIHRvIGRldGVybWluZSB0aGUgdGlnaHRl
c3QKICAgICAvLyBwb3NzaWJsZSBib3VuZGluZyBib3ggZm9yIHRoZSBzZWxlY3Rpb24uCkBAIC02
NTksNyArNjY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxl
YWYoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgYSBi
bG9jayBoYXMgc2VsZWN0ZWQgY2hpbGRyZW4uCi0gICAgdmlydHVhbCBib29sIGhhc1NlbGVjdGVk
Q2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaGFzU2VsZWN0ZWRD
aGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhdGUgIT0gU2VsZWN0aW9uTm9u
ZTsgfQogCiAgICAgLy8gT2J0YWlucyB0aGUgc2VsZWN0aW9uIGNvbG9ycyB0aGF0IHNob3VsZCBi
ZSB1c2VkIHdoZW4gcGFpbnRpbmcgYSBzZWxlY3Rpb24uCiAgICAgQ29sb3Igc2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC03MDcsNiArNzE0LDExIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGludCBsZWZ0bW9zdFBvc2l0aW9uKGJvb2wgLyppbmNsdWRlT3ZlcmZsb3dJbnRlcmlv
ciovID0gdHJ1ZSwgYm9vbCAvKmluY2x1ZGVTZWxmKi8gPSB0cnVlKSBjb25zdCB7IHJldHVybiAw
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1ZlcnRpY2FsTWFyZ2lucygpIHsgfQorICAgIGJv
b2wgaXNUb3BNYXJnaW5RdWlyaygpIGNvbnN0IHsgcmV0dXJuIG1fdG9wTWFyZ2luUXVpcms7IH0K
KyAgICBib29sIGlzQm90dG9tTWFyZ2luUXVpcmsoKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbU1h
cmdpblF1aXJrOyB9CisgICAgdm9pZCBzZXRUb3BNYXJnaW5RdWlyayhib29sIGIgPSB0cnVlKSB7
IG1fdG9wTWFyZ2luUXVpcmsgPSBiOyB9CisgICAgdm9pZCBzZXRCb3R0b21NYXJnaW5RdWlyayhi
b29sIGIgPSB0cnVlKSB7IG1fYm90dG9tTWFyZ2luUXVpcmsgPSBiOyB9CisKICAgICB2b2lkIHJl
bW92ZUZyb21PYmplY3RMaXN0cygpOwogCiAgICAgLy8gV2hlbiBwZXJmb3JtaW5nIGEgZ2xvYmFs
IGRvY3VtZW50IHRlYXItZG93biwgdGhlIHJlbmRlcmVyIG9mIHRoZSBkb2N1bWVudCBpcyBjbGVh
cmVkLiAgV2UgdXNlIHRoaXMKQEAgLTgzMSw2ICs4NDMsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAg
ICAgbXV0YWJsZSBpbnQgbV92ZXJ0aWNhbFBvc2l0aW9uOwogCisgICAgLy8gMzEgYml0cyBoYXZl
IGJlZW4gdXNlZCBoZXJlLiAgQ291bnQgdGhlIGJpdHMgYmVmb3JlIHlvdSBhZGQgYW55IGFuZCB1
cGRhdGUgdGhlIGNvbW1lbnQKKyAgICAvLyB3aXRoIHRoZSBuZXcgdG90YWwuCiAgICAgYm9vbCBt
X25lZWRzTGF5b3V0ICAgICAgICAgICAgICAgOiAxOwogICAgIGJvb2wgbV9uZWVkc1Bvc2l0aW9u
ZWRNb3ZlbWVudExheW91dCA6MTsKICAgICBib29sIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dCAg
ICA6IDE7CkBAIC04NjIsNiArODc2LDE5IEBAIHB1YmxpYzoKICAgICBib29sIG1fZXZlckhhZExh
eW91dCAgICAgICAgICAgICA6IDE7CiAKIHByaXZhdGU6CisgICAgLy8gVGhlc2UgYml0ZmllbGRz
IGFyZSBtb3ZlZCBoZXJlIGZyb20gc3ViY2xhc3NlcyB0byBwYWNrIHRoZW0gdG9nZXRoZXIKKyAg
ICAvLyBmcm9tIFJlbmRlckJsb2NrCisgICAgYm9vbCBtX2NoaWxkcmVuSW5saW5lIDogMTsKKyAg
ICBib29sIG1fdG9wTWFyZ2luUXVpcmsgOiAxOworICAgIGJvb2wgbV9ib3R0b21NYXJnaW5RdWly
ayA6IDE7CisgICAgYm9vbCBtX2hhc01hcmt1cFRydW5jYXRpb24gOiAxOworICAgIHVuc2lnbmVk
IG1fc2VsZWN0aW9uU3RhdGUgOiAzOyAvLyBTZWxlY3Rpb25TdGF0ZQorICAgIGJvb2wgbV9oYXND
b2x1bW5zIDogMTsKKyAgICAKKyAgICAvLyBmcm9tIFJlbmRlclRhYmxlQ2VsbAorICAgIGJvb2wg
bV9jZWxsV2lkdGhDaGFuZ2VkIDogMTsKKworcHJpdmF0ZToKICAgICAvLyBTdG9yZSBzdGF0ZSBi
ZXR3ZWVuIHN0eWxlV2lsbENoYW5nZSBhbmQgc3R5bGVEaWRDaGFuZ2UKICAgICBzdGF0aWMgYm9v
bCBzX2FmZmVjdHNQYXJlbnRCbG9jazsKIH07CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlz
aW9uIDQwMzAzKQorKysgcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNiBAQCBjb25zdCBpbnQgY0RlZmF1bHRIZWlnaHQgPSAxNTA7CiBSZW5k
ZXJSZXBsYWNlZDo6UmVuZGVyUmVwbGFjZWQoTm9kZSogbm9kZSkKICAgICA6IFJlbmRlckJveChu
b2RlKQogICAgICwgbV9pbnRyaW5zaWNTaXplKGNEZWZhdWx0V2lkdGgsIGNEZWZhdWx0SGVpZ2h0
KQotICAgICwgbV9zZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25Ob25lKQogICAgICwgbV9oYXNPdmVy
ZmxvdyhmYWxzZSkKIHsKICAgICBzZXRSZXBsYWNlZCh0cnVlKTsKQEAgLTUxLDcgKzUwLDYgQEAg
UmVuZGVyUmVwbGFjZWQ6OlJlbmRlclJlcGxhY2VkKE5vZGUqIG5vZAogUmVuZGVyUmVwbGFjZWQ6
OlJlbmRlclJlcGxhY2VkKE5vZGUqIG5vZGUsIGNvbnN0IEludFNpemUmIGludHJpbnNpY1NpemUp
CiAgICAgOiBSZW5kZXJCb3gobm9kZSkKICAgICAsIG1faW50cmluc2ljU2l6ZShpbnRyaW5zaWNT
aXplKQotICAgICwgbV9zZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25Ob25lKQogICAgICwgbV9oYXNP
dmVyZmxvdyhmYWxzZSkKIHsKICAgICBzZXRSZXBsYWNlZCh0cnVlKTsKQEAgLTI3Myw3ICsyNzEs
NyBAQCBJbnRSZWN0IFJlbmRlclJlcGxhY2VkOjpsb2NhbFNlbGVjdGlvblJlCiAKIHZvaWQgUmVu
ZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHMpCiB7Ci0gICAg
bV9zZWxlY3Rpb25TdGF0ZSA9IHM7CisgICAgUmVuZGVyQm94OjpzZXRTZWxlY3Rpb25TdGF0ZShz
KTsKICAgICBpZiAobV9pbmxpbmVCb3hXcmFwcGVyKSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gq
IGxpbmUgPSBtX2lubGluZUJveFdyYXBwZXItPnJvb3QoKTsKICAgICAgICAgaWYgKGxpbmUpCklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuaAkocmV2aXNpb24gNDAzMDMpCisrKyByZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkp
OwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNlbGVjdGlvblN0YXRlPihtX3NlbGVjdGlvblN0
YXRlKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0
ZSk7CiAgICAgdmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoYm9vbCBjbGlwVG9WaXNpYmxl
Q29udGVudCA9IHRydWUpOwogCkBAIC03Nyw5ICs3Niw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0
ZToKICAgICBJbnRTaXplIG1faW50cmluc2ljU2l6ZTsKLSAgICAKLSAgICB1bnNpZ25lZCBtX3Nl
bGVjdGlvblN0YXRlIDogMzsgLy8gU2VsZWN0aW9uU3RhdGUKLSAgICBib29sIG1faGFzT3ZlcmZs
b3cgOiAxOworICAgIGJvb2wgbV9oYXNPdmVyZmxvdzsKIH07CiAKIH0KSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cAkocmV2aXNpb24gNDAzMDMpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY1dpZHRoKCkK
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBBbiBhdXRvIHdpZHRoIHRhYmxlIHNob3VsZCBzaHJp
bmsgdG8gZml0IHdpdGhpbiB0aGUgbGluZSB3aWR0aCBpZiBuZWNlc3NhcnkgaW4gb3JkZXIgdG8g
CiAgICAgICAgIC8vIGF2b2lkIG92ZXJsYXBwaW5nIGZsb2F0cy4KLSAgICAgICAgYXZhaWxhYmxl
V2lkdGggPSBjYi0+bGluZVdpZHRoKHkoKSk7CisgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gY2It
PmxpbmVXaWR0aCh5KCksIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIC8vIFN1YnRyYWN0IG91
dCBhbnkgZml4ZWQgbWFyZ2lucyBmcm9tIG91ciBhdmFpbGFibGUgd2lkdGggZm9yIGF1dG8gd2lk
dGggdGFibGVzLgogICAgICAgICBpbnQgbWFyZ2luVG90YWwgPSAwOwpJbmRleDogcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAJKHJldmlzaW9uIDQwMzAzKQorKysgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNywxNCArMTI3LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVD
ZWxsOjp1cGRhdGVXaWR0aChpbnQgdykKIHsKICAgICBpZiAodyAhPSB3aWR0aCgpKSB7CiAgICAg
ICAgIHNldFdpZHRoKHcpOwotICAgICAgICBtX2NlbGxXaWR0aENoYW5nZWQgPSB0cnVlOworICAg
ICAgICBzZXRDZWxsV2lkdGhDaGFuZ2VkKHRydWUpOwogICAgIH0KIH0KIAogdm9pZCBSZW5kZXJU
YWJsZUNlbGw6OmxheW91dCgpCiB7Ci0gICAgbGF5b3V0QmxvY2sobV9jZWxsV2lkdGhDaGFuZ2Vk
KTsKLSAgICBtX2NlbGxXaWR0aENoYW5nZWQgPSBmYWxzZTsKKyAgICBsYXlvdXRCbG9jayhjZWxs
V2lkdGhDaGFuZ2VkKCkpOworICAgIHNldENlbGxXaWR0aENoYW5nZWQoZmFsc2UpOwogfQogCiBp
bnQgUmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nVG9wKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRp
bmcpIGNvbnN0CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA0MDMwMykKKysrIHJlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQCBSZW5kZXJUZXh0
OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSCiAgICAgICwgbV9tYXhXaWR0aCgtMSkKICAg
ICAgLCBtX2JlZ2luTWluV2lkdGgoMCkKICAgICAgLCBtX2VuZE1pbldpZHRoKDApCi0gICAgICwg
bV9zZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25Ob25lKQogICAgICAsIG1faGFzVGFiKGZhbHNlKQog
ICAgICAsIG1fbGluZXNEaXJ0eShmYWxzZSkKICAgICAgLCBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0
KGZhbHNlKQpAQCAtMzk0LDcgKzM5Myw3IEBAIEludFJlY3QgUmVuZGVyVGV4dDo6bG9jYWxDYXJl
dFJlY3QoSW5saW4KIAogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwog
ICAgIGlmIChzdHlsZSgpLT5hdXRvV3JhcCgpKSB7Ci0gICAgICAgIGludCBhdmFpbGFibGVXaWR0
aCA9IGNiLT5saW5lV2lkdGgodG9wKTsKKyAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gY2It
PmxpbmVXaWR0aCh0b3AsIGZhbHNlKTsKICAgICAgICAgaWYgKGJveC0+ZGlyZWN0aW9uKCkgPT0g
TFRSKQogICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCByb290TGVmdCArIGF2YWlsYWJsZVdp
ZHRoIC0gMSk7CiAgICAgICAgIGVsc2UKQEAgLTc1MCw3ICs3NDksNyBAQCB2b2lkIFJlbmRlclRl
eHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjCiB7CiAgICAgSW5saW5lVGV4dEJveCogYm94Owog
Ci0gICAgbV9zZWxlY3Rpb25TdGF0ZSA9IHN0YXRlOworICAgIFJlbmRlck9iamVjdDo6c2V0U2Vs
ZWN0aW9uU3RhdGUoc3RhdGUpOwogICAgIGlmIChzdGF0ZSA9PSBTZWxlY3Rpb25TdGFydCB8fCBz
dGF0ZSA9PSBTZWxlY3Rpb25FbmQgfHwgc3RhdGUgPT0gU2VsZWN0aW9uQm90aCkgewogICAgICAg
ICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKICAgICAgICAgc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQ
b3MsIGVuZFBvcyk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDQwMzAzKQorKysgcmVuZGVyaW5nL1Jl
bmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRUZXh0V2l0aE9mZnNldChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbiwgYm9vbCBmb3JjZSA9IGZhbHNlKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFNlbGVjdGlvblN0YXRlPihtX3NlbGVjdGlvblN0YXRlKTsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzKTsKICAgICB2aXJ0dWFsIElu
dFJlY3Qgc2VsZWN0aW9uUmVjdChib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSk7CiAg
ICAgdmlydHVhbCBJbnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9m
ZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKQEAgLTE1NSw3ICsxNTQsNiBA
QCBwcml2YXRlOgogICAgIGludCBtX2JlZ2luTWluV2lkdGg7CiAgICAgaW50IG1fZW5kTWluV2lk
dGg7CiAKLSAgICB1bnNpZ25lZCBtX3NlbGVjdGlvblN0YXRlIDogMzsgLy8gZW51bXMgb24gV2lu
ZG93cyBhcmUgc2lnbmVkLCBzbyB0aGlzIG5lZWRzIHRvIGJlIHVuc2lnbmVkIHRvIHByZXZlbnQg
aXQgdHVybmluZyBuZWdhdGl2ZS4gCiAgICAgYm9vbCBtX2hhc0JyZWFrYWJsZUNoYXIgOiAxOyAv
LyBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYmUgYnJva2VuIGludG8gbXVsdGlwbGUgbGluZXMuCiAg
ICAgYm9vbCBtX2hhc0JyZWFrIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UgaGF2ZSBhIGhhcmQg
YnJlYWsgKGUuZy4sIDxwcmU+IHdpdGggJ1xuJykuCiAgICAgYm9vbCBtX2hhc1RhYiA6IDE7IC8v
IFdoZXRoZXIgb3Igbm90IHdlIGhhdmUgYSB2YXJpYWJsZSB3aWR0aCB0YWIgY2hhcmFjdGVyIChl
LmcuLCA8cHJlPiB3aXRoICdcdCcpLgpJbmRleDogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gNDAzMDMpCisr
KyByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02MTEsNCArNjEyLDE4
IEBAIHZvaWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlKFJlbmRlck8KICAgICBtX2xheW91
dFN0YXRlID0gbmV3IChyZW5kZXJBcmVuYSgpKSBMYXlvdXRTdGF0ZShyb290KTsKIH0KIAordm9p
ZCBSZW5kZXJWaWV3Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVudCgpLT5kb2N1bWVudEVs
ZW1lbnQoKTsKKyAgICBpZiAobm9kZSkgeworICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG5v
ZGUpOworICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXRJbm5lck5vblNoYXJlZE5vZGUobm9kZSk7CisgICAgICAgIHJlc3VsdC5z
ZXRMb2NhbFBvaW50KHBvaW50KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAkocmV2aXNpb24gNDAzMDMpCisrKyByZW5kZXJpbmcvUmVuZGVyVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDQsNiArMTQ0LDggQEAgcHVibGljOgogICAgIHZvaWQgZGlzYWJs
ZUxheW91dFN0YXRlKCkgeyBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50Kys7IH0KICAgICB2b2lk
IGVuYWJsZUxheW91dFN0YXRlKCkgeyBBU1NFUlQobV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCA+
IDApOyBtX2xheW91dFN0YXRlRGlzYWJsZUNvdW50LS07IH0KIAorICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYpOworCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBGbG9hdFF1YWQgbG9jYWxUb0NvbnRhaW5lclF1YWQoY29u
c3QgRmxvYXRRdWFkJiwgUmVuZGVyQm94KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZpeGVkID0g
ZmFsc2UpIGNvbnN0OwogCkluZGV4OiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA0MDMwMykKKysr
IHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI2LDEwICsz
MjYsMTAgQEAgaW50IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcCgpCiAgICAgICAgIC8vIFRo
aXMgbGluZSBoYXMgYWN0dWFsbHkgYmVlbiBtb3ZlZCBmdXJ0aGVyIGRvd24sIHByb2JhYmx5IGZy
b20gYSBsYXJnZSBsaW5lLWhlaWdodCwgYnV0IHBvc3NpYmx5IGJlY2F1c2UgdGhlCiAgICAgICAg
IC8vIGxpbmUgd2FzIGZvcmNlZCB0byBjbGVhciBmbG9hdHMuICBJZiBzbywgbGV0J3MgY2hlY2sg
dGhlIG9mZnNldHMsIGFuZCBvbmx5IGJlIHdpbGxpbmcgdG8gdXNlIHRoZSBwcmV2aW91cwogICAg
ICAgICAvLyBsaW5lJ3MgYm90dG9tIG92ZXJmbG93IGlmIHRoZSBvZmZzZXRzIGFyZSBncmVhdGVy
IG9uIGJvdGggc2lkZXMuCi0gICAgICAgIGludCBwcmV2TGVmdCA9IGJsb2NrKCktPmxlZnRPZmZz
ZXQocHJldkJvdHRvbSk7Ci0gICAgICAgIGludCBwcmV2UmlnaHQgPSBibG9jaygpLT5yaWdodE9m
ZnNldChwcmV2Qm90dG9tKTsKLSAgICAgICAgaW50IG5ld0xlZnQgPSBibG9jaygpLT5sZWZ0T2Zm
c2V0KHNlbGVjdGlvblRvcCk7Ci0gICAgICAgIGludCBuZXdSaWdodCA9IGJsb2NrKCktPnJpZ2h0
T2Zmc2V0KHNlbGVjdGlvblRvcCk7CisgICAgICAgIGludCBwcmV2TGVmdCA9IGJsb2NrKCktPmxl
ZnRPZmZzZXQocHJldkJvdHRvbSwgIXByZXZSb290Qm94KCkpOworICAgICAgICBpbnQgcHJldlJp
Z2h0ID0gYmxvY2soKS0+cmlnaHRPZmZzZXQocHJldkJvdHRvbSwgIXByZXZSb290Qm94KCkpOwor
ICAgICAgICBpbnQgbmV3TGVmdCA9IGJsb2NrKCktPmxlZnRPZmZzZXQoc2VsZWN0aW9uVG9wLCAh
cHJldlJvb3RCb3goKSk7CisgICAgICAgIGludCBuZXdSaWdodCA9IGJsb2NrKCktPnJpZ2h0T2Zm
c2V0KHNlbGVjdGlvblRvcCwgIXByZXZSb290Qm94KCkpOwogICAgICAgICBpZiAocHJldkxlZnQg
PiBuZXdMZWZ0IHx8IHByZXZSaWdodCA8IG5ld1JpZ2h0KQogICAgICAgICAgICAgcmV0dXJuIHNl
bGVjdGlvblRvcDsKICAgICB9CkluZGV4OiByZW5kZXJpbmcvYmlkaS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL2JpZGkuY3BwCShyZXZpc2lvbiA0MDMwMykKKysrIHJlbmRlcmluZy9iaWRp
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgSW5saW5lQmlkaVJl
c29sdmVyOjphcHBlbmRSdW4oKQogICAgIG1fc3RhdHVzLmVvciA9IE90aGVyTmV1dHJhbDsKIH0K
IAotSW5saW5lRmxvd0JveCogUmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmpl
Y3QqIG9iaikKK0lubGluZUZsb3dCb3gqIFJlbmRlckJsb2NrOjpjcmVhdGVMaW5lQm94ZXMoUmVu
ZGVyT2JqZWN0KiBvYmosIGJvb2wgZmlyc3RMaW5lKQogewogICAgIC8vIFNlZSBpZiB3ZSBoYXZl
IGFuIHVuY29uc3RydWN0ZWQgbGluZSBib3ggZm9yIHRoaXMgb2JqZWN0IHRoYXQgaXMgYWxzbwog
ICAgIC8vIHRoZSBsYXN0IGl0ZW0gb24gdGhlIGxpbmUuCkBAIC00ODIsNyArNDgyLDcgQEAgSW5s
aW5lRmxvd0JveCogUmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCbwogICAgICAgICAgICAgSW5saW5l
Qm94KiBuZXdCb3ggPSBvYmotPmNyZWF0ZUlubGluZUJveChmYWxzZSwgb2JqID09IHRoaXMpOwog
ICAgICAgICAgICAgQVNTRVJUKG5ld0JveC0+aXNJbmxpbmVGbG93Qm94KCkpOwogICAgICAgICAg
ICAgcGFyZW50Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KG5ld0JveCk7Ci0gICAg
ICAgICAgICBwYXJlbnRCb3gtPnNldEZpcnN0TGluZVN0eWxlQml0KG1fZmlyc3RMaW5lKTsKKyAg
ICAgICAgICAgIHBhcmVudEJveC0+c2V0Rmlyc3RMaW5lU3R5bGVCaXQoZmlyc3RMaW5lKTsKICAg
ICAgICAgICAgIGNvbnN0cnVjdGVkTmV3Qm94ID0gdHJ1ZTsKICAgICAgICAgfQogCkBAIC01MDks
NyArNTA5LDcgQEAgSW5saW5lRmxvd0JveCogUmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCbwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLVJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RMaW5lKHVuc2lnbmVkIHJ1bkNvdW50LCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogbGFz
dFJ1biwgYm9vbCBsYXN0TGluZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpCitSb290SW5saW5l
Qm94KiBSZW5kZXJCbG9jazo6Y29uc3RydWN0TGluZSh1bnNpZ25lZCBydW5Db3VudCwgQmlkaVJ1
biogZmlyc3RSdW4sIEJpZGlSdW4qIGxhc3RSdW4sIGJvb2wgZmlyc3RMaW5lLCBib29sIGxhc3RM
aW5lLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCkKIHsKICAgICBBU1NFUlQoZmlyc3RSdW4pOwog
CkBAIC01MjksNyArNTI5LDcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dExpbgogICAgICAgICAgICAgLy8gcnVuJ3MgaW5saW5lIGJveC4KICAgICAgICAgICAgIGlmICgh
cGFyZW50Qm94IHx8IHBhcmVudEJveC0+b2JqZWN0KCkgIT0gci0+bV9vYmplY3QtPnBhcmVudCgp
KQogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgaW5saW5lIGJveGVzIGFsbCB0aGUgd2F5
IGJhY2sgdG8gdGhlIGFwcHJvcHJpYXRlIGluc2VydGlvbiBwb2ludC4KLSAgICAgICAgICAgICAg
ICBwYXJlbnRCb3ggPSBjcmVhdGVMaW5lQm94ZXMoci0+bV9vYmplY3QtPnBhcmVudCgpKTsKKyAg
ICAgICAgICAgICAgICBwYXJlbnRCb3ggPSBjcmVhdGVMaW5lQm94ZXMoci0+bV9vYmplY3QtPnBh
cmVudCgpLCBmaXJzdExpbmUpOwogCiAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIGlubGluZSBi
b3ggdG8gdGhpcyBsaW5lLgogICAgICAgICAgICAgcGFyZW50Qm94LT5hZGRUb0xpbmUoYm94KTsK
QEAgLTU2MywxMCArNTYzLDEwIEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RMaW4KICAgICByZXR1cm4gbGFzdFJvb3RCb3goKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6
Y29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gs
IEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNo
ZWRFbmQpCit2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSG9yaXpvbnRhbFBvc2l0aW9uc0Zvckxp
bmUoUm9vdElubGluZUJveCogbGluZUJveCwgYm9vbCBmaXJzdExpbmUsIEJpZGlSdW4qIGZpcnN0
UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNoZWRFbmQpCiB7CiAgICAg
Ly8gRmlyc3QgZGV0ZXJtaW5lIG91ciB0b3RhbCB3aWR0aC4KLSAgICBpbnQgYXZhaWxhYmxlV2lk
dGggPSBsaW5lV2lkdGgoaGVpZ2h0KCkpOworICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGxpbmVX
aWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICBpbnQgdG90V2lkdGggPSBsaW5lQm94LT5n
ZXRGbG93U3BhY2luZ1dpZHRoKCk7CiAgICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5nID0gZmFsc2U7
CiAgICAgdW5zaWduZWQgbnVtU3BhY2VzID0gMDsKQEAgLTU5MSwxMCArNTkxLDEwIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNvbXB1dGVIb3Jpem9udGFsUG9zaXQKIAogICAgICAgICAgICAgaWYgKGlu
dCBsZW5ndGggPSBydC0+dGV4dExlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyLT5t
X3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9yTmV3bGluZShydC0+Y2hhcmFj
dGVycygpW3ItPm1fc3RhcnRdKSkKLSAgICAgICAgICAgICAgICAgICAgdG90V2lkdGggKz0gcnQt
PnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLndvcmRTcGFjaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIHRvdFdpZHRoICs9IHJ0LT5zdHlsZShmaXJzdExpbmUpLT5mb250KCkud29yZFNwYWNp
bmcoKTsKICAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gIWlzU3BhY2VPck5ld2xp
bmUocnQtPmNoYXJhY3RlcnMoKVtyLT5tX3N0b3AgLSAxXSkgJiYgci0+bV9zdG9wID09IGxlbmd0
aDsgICAgICAgICAgCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByLT5tX2JveC0+c2V0V2lk
dGgocnQtPndpZHRoKHItPm1fc3RhcnQsIHItPm1fc3RvcCAtIHItPm1fc3RhcnQsIHRvdFdpZHRo
LCBtX2ZpcnN0TGluZSkpOworICAgICAgICAgICAgci0+bV9ib3gtPnNldFdpZHRoKHJ0LT53aWR0
aChyLT5tX3N0YXJ0LCByLT5tX3N0b3AgLSByLT5tX3N0YXJ0LCB0b3RXaWR0aCwgZmlyc3RMaW5l
KSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXItPm1fb2JqZWN0LT5pc1JlbmRlcklubGluZSgpKSB7
CiAgICAgICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KHItPm1fb2Jq
ZWN0KTsKICAgICAgICAgICAgIHJlbmRlckJveC0+Y2FsY1dpZHRoKCk7CkBAIC02MDksNyArNjA5
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdAogICAgIC8vIHdl
IG5vdyBleGFtaW5lIG91ciB0ZXh0LWFsaWduIHByb3BlcnR5IGluIG9yZGVyIHRvIGRldGVybWlu
ZSB3aGVyZSB0byBwb3NpdGlvbiB0aGUKICAgICAvLyBvYmplY3RzIGhvcml6b250YWxseS4gIFRo
ZSB0b3RhbCB3aWR0aCBvZiB0aGUgbGluZSBjYW4gYmUgaW5jcmVhc2VkIGlmIHdlIGVuZCB1cAog
ICAgIC8vIGp1c3RpZnlpbmcgdGV4dC4KLSAgICBpbnQgeCA9IGxlZnRPZmZzZXQoaGVpZ2h0KCkp
OworICAgIGludCB4ID0gbGVmdE9mZnNldChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICBzd2l0
Y2godGV4dEFsaWduKSB7CiAgICAgICAgIGNhc2UgTEVGVDoKICAgICAgICAgY2FzZSBXRUJLSVRf
TEVGVDoKQEAgLTgzNCw3ICs4MzQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVD
aGlsZHJlbihiCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gc2tpcCBhaGVhZCB0byB0aGUgZmlyc3Qg
ZGlydHkgbGluZQogICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXIgcmVzb2x2ZXI7CiAgICAgICAg
IHVuc2lnbmVkIGZsb2F0SW5kZXg7Ci0gICAgICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9
IGRldGVybWluZVN0YXJ0UG9zaXRpb24oZnVsbExheW91dCwgcmVzb2x2ZXIsIGZsb2F0cywgZmxv
YXRJbmRleCk7CisgICAgICAgIGJvb2wgZmlyc3RMaW5lID0gdHJ1ZTsKKyAgICAgICAgUm9vdElu
bGluZUJveCogc3RhcnRMaW5lID0gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihmaXJzdExpbmUsIGZ1
bGxMYXlvdXQsIHJlc29sdmVyLCBmbG9hdHMsIGZsb2F0SW5kZXgpOwogCiAgICAgICAgIGlmIChm
dWxsTGF5b3V0ICYmICFzZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAgICAgc2V0TmVlZHNM
YXlvdXQodHJ1ZSwgZmFsc2UpOyAgLy8gTWFyayBvdXJzZWx2ZXMgYXMgbmVlZGluZyBhIGZ1bGwg
bGF5b3V0LiBUaGlzIHdheSB3ZSdsbCByZXBhaW50IGxpa2UKQEAgLTkxMiw3ICs5MTMsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAgICAgICAgICAgICBpc0xp
bmVFbXB0eSA9IHRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEVDbGVhciBjbGVhciA9
IENOT05FOwotICAgICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsocmVzb2x2ZXIsICZj
bGVhcik7CisgICAgICAgICAgICBlbmQgPSBmaW5kTmV4dExpbmVCcmVhayhyZXNvbHZlciwgZmly
c3RMaW5lLCAmY2xlYXIpOwogICAgICAgICAgICAgaWYgKHJlc29sdmVyLnBvc2l0aW9uKCkuYXRF
bmQoKSkgewogICAgICAgICAgICAgICAgIHJlc29sdmVyLmRlbGV0ZVJ1bnMoKTsKICAgICAgICAg
ICAgICAgICBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSA9IHRydWU7CkBAIC05ODUsMTIgKzk4
NiwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbihiCiAKICAgICAg
ICAgICAgICAgICBSb290SW5saW5lQm94KiBsaW5lQm94ID0gMDsKICAgICAgICAgICAgICAgICBp
ZiAocmVzb2x2ZXIucnVuQ291bnQoKSkgewotICAgICAgICAgICAgICAgICAgICBsaW5lQm94ID0g
Y29uc3RydWN0TGluZShyZXNvbHZlci5ydW5Db3VudCgpLCByZXNvbHZlci5maXJzdFJ1bigpLCBy
ZXNvbHZlci5sYXN0UnVuKCksICFlbmQub2JqLCBlbmQub2JqICYmICFlbmQucG9zID8gZW5kLm9i
aiA6IDApOworICAgICAgICAgICAgICAgICAgICBsaW5lQm94ID0gY29uc3RydWN0TGluZShyZXNv
bHZlci5ydW5Db3VudCgpLCByZXNvbHZlci5maXJzdFJ1bigpLCByZXNvbHZlci5sYXN0UnVuKCks
IGZpcnN0TGluZSwgIWVuZC5vYmosIGVuZC5vYmogJiYgIWVuZC5wb3MgPyBlbmQub2JqIDogMCk7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lQm94KSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5lQm94LT5zZXRFbmRzV2l0aEJyZWFrKHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7
CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSBwb3NpdGlvbiBhbGwgb2Ygb3Vy
IHRleHQgcnVucyBob3Jpem9udGFsbHkuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRl
SG9yaXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUobGluZUJveCwgcmVzb2x2ZXIuZmlyc3RSdW4oKSwg
dHJhaWxpbmdTcGFjZVJ1biwgZW5kLmF0RW5kKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcHV0ZUhvcml6b250YWxQb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gsIGZpcnN0TGluZSwgcmVz
b2x2ZXIuZmlyc3RSdW4oKSwgdHJhaWxpbmdTcGFjZVJ1biwgZW5kLmF0RW5kKCkpOwogCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBOb3cgcG9zaXRpb24gb3VyIHRleHQgcnVucyB2ZXJ0aWNh
bGx5LgogICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZlcnRpY2FsUG9zaXRpb25zRm9y
TGluZShsaW5lQm94LCByZXNvbHZlci5maXJzdFJ1bigpKTsKQEAgLTEwMTgsNyArMTAxOSw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fZmlyc3RMaW5l
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZmlyc3RMaW5lID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgbmV3TGluZShjbGVhcik7CiAgICAgICAgICAgICB9CiAKQEAgLTExMjEsNyArMTEyMiw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGIKICAgICAgICAgY2hl
Y2tMaW5lc0ZvclRleHRPdmVyZmxvdygpOwogfQogCi1Sb290SW5saW5lQm94KiBSZW5kZXJCbG9j
azo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihib29sJiBmdWxsTGF5b3V0LCBJbmxpbmVCaWRpUmVz
b2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWduZWQm
IG51bUNsZWFuRmxvYXRzKQorUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0
YXJ0UG9zaXRpb24oYm9vbCYgZmlyc3RMaW5lLCBib29sJiBmdWxsTGF5b3V0LCBJbmxpbmVCaWRp
UmVzb2x2ZXImIHJlc29sdmVyLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cywgdW5zaWdu
ZWQmIG51bUNsZWFuRmxvYXRzKQogewogICAgIFJvb3RJbmxpbmVCb3gqIGN1cnIgPSAwOwogICAg
IFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwpAQCAtMTIxNCw3ICsxMjE1LDcgQEAgUm9vdElubGlu
ZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YQogICAgICAgICBzZXRIZWlnaHQoc2F2ZWRI
ZWlnaHQpOwogICAgIH0KIAotICAgIG1fZmlyc3RMaW5lID0gIWxhc3Q7CisgICAgZmlyc3RMaW5l
ID0gIWxhc3Q7CiAgICAgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gIWxhc3QgfHwgbGFzdC0+
ZW5kc1dpdGhCcmVhaygpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBzdGFydE9iajsKQEAgLTE0Mzcs
MTMgKzE0MzgsMTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZQog
ICAgICAgICAgICAgICAgIC8vIEEgcmVsYXRpdmUgcG9zaXRpb25lZCBpbmxpbmUgZW5jbG9zZXMg
dXMuICBJbiB0aGlzIGNhc2UsIHdlIGFsc28gaGF2ZSB0byBkZXRlcm1pbmUgb3VyCiAgICAgICAg
ICAgICAgICAgLy8gcG9zaXRpb24gYXMgdGhvdWdoIHdlIHdlcmUgYW4gaW5saW5lLiAgU2V0IHxz
dGF0aWNYfCBhbmQgfHN0YXRpY1l8IG9uIHRoZSByZWxhdGl2ZSBwb3NpdGlvbmVkCiAgICAgICAg
ICAgICAgICAgLy8gaW5saW5lIHNvIHRoYXQgd2UgY2FuIG9idGFpbiB0aGUgdmFsdWUgbGF0ZXIu
Ci0gICAgICAgICAgICAgICAgYy0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFIgPyBsZWZ0T2Zmc2V0KGhlaWdodCgpKSA6IHJpZ2h0T2Zmc2V0KGhlaWdodCgpKSk7CisgICAg
ICAgICAgICAgICAgYy0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBs
ZWZ0T2Zmc2V0KGhlaWdodCgpLCBmYWxzZSkgOiByaWdodE9mZnNldChoZWlnaHQoKSwgZmFsc2Up
KTsKICAgICAgICAgICAgICAgICBjLT5zZXRTdGF0aWNZKGhlaWdodCgpKTsKICAgICAgICAgICAg
IH0KICAgICAKICAgICAgICAgICAgIGlmIChvYmplY3QtPmhhc1N0YXRpY1goKSkgewogICAgICAg
ICAgICAgICAgIGlmIChvYmplY3QtPnN0eWxlKCktPmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlw
ZSgpKQotICAgICAgICAgICAgICAgICAgICBvYmplY3QtPnNldFN0YXRpY1goc3R5bGUoKS0+ZGly
ZWN0aW9uKCkgPT0gTFRSID8gbGVmdE9mZnNldChoZWlnaHQoKSkgOiB3aWR0aCgpIC0gcmlnaHRP
ZmZzZXQoaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5zZXRTdGF0aWNY
KHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUiA/IGxlZnRPZmZzZXQoaGVpZ2h0KCksIGZhbHNl
KSA6IHdpZHRoKCkgLSByaWdodE9mZnNldChoZWlnaHQoKSwgZmFsc2UpKTsKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0U3RhdGljWChzdHlsZSgp
LT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9y
ZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgpKTsKICAgICAgICAgICAgIH0KQEAgLTE0NTUsMTUg
KzE0NTYsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2tpcFRyYWlsaW5nV2hpdGVzcGFjZQogICAg
IH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlk
aVJlc29sdmVyJiByZXNvbHZlcikKK2ludCBSZW5kZXJCbG9jazo6c2tpcExlYWRpbmdXaGl0ZXNw
YWNlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGJvb2wgZmlyc3RMaW5lKQogewotICAg
IGludCBhdmFpbGFibGVXaWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSk7CisgICAgaW50IGF2YWls
YWJsZVdpZHRoID0gbGluZVdpZHRoKGhlaWdodCgpLCBmaXJzdExpbmUpOwogICAgIHdoaWxlICgh
cmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpICYmICFyZXF1aXJlc0xpbmVCb3gocmVzb2x2ZXIu
cG9zaXRpb24oKSkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmplY3QgPSByZXNvbHZlci5w
b3NpdGlvbigpLm9iajsKICAgICAgICAgaWYgKG9iamVjdC0+aXNGbG9hdGluZygpKSB7CiAgICAg
ICAgICAgICBpbnNlcnRGbG9hdGluZ09iamVjdCh0b1JlbmRlckJveChvYmplY3QpKTsKICAgICAg
ICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7Ci0gICAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9
IGxpbmVXaWR0aChoZWlnaHQoKSk7CisgICAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGxpbmVX
aWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QtPmlz
UG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIG1hdGggaGVyZSBpcyBh
Y3R1YWxseSBub3QgcmVhbGx5IHJpZ2h0LiAgSXQncyBhIGJlc3QtZ3Vlc3MgYXBwcm94aW1hdGlv
biB0aGF0CiAgICAgICAgICAgICAvLyB3aWxsIHdvcmsgZm9yIHRoZSBjb21tb24gY2FzZXMKQEAg
LTE0NzIsMTMgKzE0NzMsMTMgQEAgaW50IFJlbmRlckJsb2NrOjpza2lwTGVhZGluZ1doaXRlc3Bh
Y2UoSQogICAgICAgICAgICAgICAgIC8vIEEgcmVsYXRpdmUgcG9zaXRpb25lZCBpbmxpbmUgZW5j
bG9zZXMgdXMuICBJbiB0aGlzIGNhc2UsIHdlIGFsc28gaGF2ZSB0byBkZXRlcm1pbmUgb3VyCiAg
ICAgICAgICAgICAgICAgLy8gcG9zaXRpb24gYXMgdGhvdWdoIHdlIHdlcmUgYW4gaW5saW5lLiAg
U2V0IHxzdGF0aWNYfCBhbmQgfHN0YXRpY1l8IG9uIHRoZSByZWxhdGl2ZSBwb3NpdGlvbmVkCiAg
ICAgICAgICAgICAgICAgLy8gaW5saW5lIHNvIHRoYXQgd2UgY2FuIG9idGFpbiB0aGUgdmFsdWUg
bGF0ZXIuCi0gICAgICAgICAgICAgICAgYy0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBMVFIgPyBsZWZ0T2Zmc2V0KGhlaWdodCgpKSA6IHJpZ2h0T2Zmc2V0KGhlaWdodCgpKSk7
CisgICAgICAgICAgICAgICAgYy0+c2V0U3RhdGljWChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFIgPyBsZWZ0T2Zmc2V0KGhlaWdodCgpLCBmaXJzdExpbmUpIDogcmlnaHRPZmZzZXQoaGVpZ2h0
KCksIGZpcnN0TGluZSkpOwogICAgICAgICAgICAgICAgIGMtPnNldFN0YXRpY1koaGVpZ2h0KCkp
OwogICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgaWYgKG9iamVjdC0+aGFzU3RhdGlj
WCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG9iamVjdC0+c3R5bGUoKS0+aXNPcmlnaW5hbERp
c3BsYXlJbmxpbmVUeXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIG9iamVjdC0+c2V0U3RhdGlj
WChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBsZWZ0T2Zmc2V0KGhlaWdodCgpKSA6IHdp
ZHRoKCkgLSByaWdodE9mZnNldChoZWlnaHQoKSkpOworICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QtPnNldFN0YXRpY1goc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gbGVmdE9mZnNldCho
ZWlnaHQoKSwgZmlyc3RMaW5lKSA6IHdpZHRoKCkgLSByaWdodE9mZnNldChoZWlnaHQoKSwgZmly
c3RMaW5lKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QtPnNldFN0YXRpY1goc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSID8gYm9yZGVyTGVmdCgp
ICsgcGFkZGluZ0xlZnQoKSA6IGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nUmlnaHQoKSk7CiAgICAg
ICAgICAgICB9CkBAIC0xNTA5LDcgKzE1MTAsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRTa2lwV2hp
dGVzcGFjZUFmdGVyU3RhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlckJsb2Nr
OjpmaXRCZWxvd0Zsb2F0cyhpbnQgd2lkdGhUb0ZpdCwgaW50JiBhdmFpbGFibGVXaWR0aCkKK3Zv
aWQgUmVuZGVyQmxvY2s6OmZpdEJlbG93RmxvYXRzKGludCB3aWR0aFRvRml0LCBib29sIGZpcnN0
TGluZSwgaW50JiBhdmFpbGFibGVXaWR0aCkKIHsKICAgICBBU1NFUlQod2lkdGhUb0ZpdCA+IGF2
YWlsYWJsZVdpZHRoKTsKIApAQCAtMTUyMSw3ICsxNTIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
Zml0QmVsb3dGbG9hdHMoaW50IHdpZAogICAgICAgICBpZiAoIWZsb2F0Qm90dG9tKQogICAgICAg
ICAgICAgYnJlYWs7CiAKLSAgICAgICAgbmV3TGluZVdpZHRoID0gbGluZVdpZHRoKGZsb2F0Qm90
dG9tKTsKKyAgICAgICAgbmV3TGluZVdpZHRoID0gbGluZVdpZHRoKGZsb2F0Qm90dG9tLCBmaXJz
dExpbmUpOwogICAgICAgICBsYXN0RmxvYXRCb3R0b20gPSBmbG9hdEJvdHRvbTsKICAgICAgICAg
aWYgKG5ld0xpbmVXaWR0aCA+PSB3aWR0aFRvRml0KQogICAgICAgICAgICAgYnJlYWs7CkBAIC0x
NTMzLDEzICsxNTM0LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmZpdEJlbG93RmxvYXRzKGludCB3
aWQKICAgICB9CiB9CiAKLUlubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVC
cmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBFQ2xlYXIqIGNsZWFyKQorSW5saW5l
SXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrKElubGluZUJpZGlSZXNvbHZl
ciYgcmVzb2x2ZXIsIGJvb2wgZmlyc3RMaW5lLCBFQ2xlYXIqIGNsZWFyKQogewogICAgIEFTU0VS
VChyZXNvbHZlci5wb3NpdGlvbigpLmJsb2NrID09IHRoaXMpOwogCiAgICAgYm9vbCBhcHBsaWVk
U3RhcnRXaWR0aCA9IHJlc29sdmVyLnBvc2l0aW9uKCkucG9zID4gMDsKIAotICAgIGludCB3aWR0
aCA9IHNraXBMZWFkaW5nV2hpdGVzcGFjZShyZXNvbHZlcik7CisgICAgaW50IHdpZHRoID0gc2tp
cExlYWRpbmdXaGl0ZXNwYWNlKHJlc29sdmVyLCBmaXJzdExpbmUpOwogCiAgICAgaW50IHcgPSAw
OwogICAgIGludCB0bXBXID0gMDsKQEAgLTE2MjgsNyArMTYyOSw3IEBAIElubGluZUl0ZXJhdG9y
IFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmUKICAgICAgICAgICAgICAgICAvLyBpdCBhZnRlciBt
b3ZpbmcgdG8gbmV4dCBsaW5lIChpbiBuZXdMaW5lKCkgZnVuYykKICAgICAgICAgICAgICAgICBp
ZiAoZmxvYXRzRml0T25MaW5lICYmIGZsb2F0Qm94LT53aWR0aCgpICsgZmxvYXRCb3gtPm1hcmdp
bkxlZnQoKSArIGZsb2F0Qm94LT5tYXJnaW5SaWdodCgpICsgdyArIHRtcFcgPD0gd2lkdGgpIHsK
ICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKLSAgICAgICAgICAgICAg
ICAgICAgd2lkdGggPSBsaW5lV2lkdGgoaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICB3
aWR0aCA9IGxpbmVXaWR0aChoZWlnaHQoKSwgZmlyc3RMaW5lKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgZmxvYXRzRml0T25MaW5lID0gZmFsc2U7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG8tPmlzUG9zaXRpb25lZCgpKSB7CkBAIC0xNzQwLDcgKzE3NDEs
NyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAg
ICBpbnQgbGVuID0gc3RybGVuIC0gcG9zOwogICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0ciA9
IHQtPmNoYXJhY3RlcnMoKTsKIAotICAgICAgICAgICAgY29uc3QgRm9udCYgZiA9IHQtPnN0eWxl
KG1fZmlyc3RMaW5lKS0+Zm9udCgpOworICAgICAgICAgICAgY29uc3QgRm9udCYgZiA9IHQtPnN0
eWxlKGZpcnN0TGluZSktPmZvbnQoKTsKIAogICAgICAgICAgICAgaW50IGxhc3RTcGFjZSA9IHBv
czsKICAgICAgICAgICAgIGludCB3b3JkU3BhY2luZyA9IG8tPnN0eWxlKCktPndvcmRTcGFjaW5n
KCk7CkBAIC0xODQ5LDcgKzE4NTAsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6Zmlu
ZE5leHRMaW5lCiAgICAgICAgICAgICAgICAgICAgIGFwcGx5V29yZFNwYWNpbmcgPSAgd29yZFNw
YWNpbmcgJiYgY3VycmVudENoYXJhY3RlcklzU3BhY2UgJiYgIXByZXZpb3VzQ2hhcmFjdGVySXNT
cGFjZTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoIXcgJiYgYXV0b1dyYXAgJiYgdG1wVyA+
IHdpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgZml0QmVsb3dGbG9hdHModG1wVywgd2lk
dGgpOworICAgICAgICAgICAgICAgICAgICAgICAgZml0QmVsb3dGbG9hdHModG1wVywgZmlyc3RM
aW5lLCB3aWR0aCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9XcmFwIHx8IGJyZWFr
V29yZHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGJyZWFrIG9ubHkgYWZ0
ZXIgd2hpdGUtc3BhY2UsIGNvbnNpZGVyIHRoZSBjdXJyZW50IGNoYXJhY3RlcgpAQCAtMjAwNCw3
ICsyMDA1LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZQogICAg
ICAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JCcmVhayA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgd2lsbEZpdE9uTGluZSA9IHcgKyB0bXBXIDw9IHdpZHRoOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIXdpbGxGaXRPbkxpbmUgJiYgIXcpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZpdEJlbG93RmxvYXRzKHRtcFcsIHdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZpdEJlbG93RmxvYXRzKHRtcFcsIGZpcnN0TGluZSwgd2lkdGgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgd2lsbEZpdE9uTGluZSA9IHRtcFcgPD0gd2lkdGg7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5QbGFjZU9uTGluZSA9IHdpbGxG
aXRPbkxpbmUgfHwgIWF1dG9XcmFwV2FzRXZlclRydWVPbkxpbmU7CkBAIC0yMDI3LDcgKzIwMjgs
NyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lCiAgICAgICAgICAg
ICBpZiAodykKICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKIAotICAgICAgICAgICAgZml0QmVs
b3dGbG9hdHModG1wVywgd2lkdGgpOworICAgICAgICAgICAgZml0QmVsb3dGbG9hdHModG1wVywg
Zmlyc3RMaW5lLCB3aWR0aCk7CiAKICAgICAgICAgICAgIC8vIHx3aWR0aHwgbWF5IGhhdmUgYmVl
biBhZGp1c3RlZCBiZWNhdXNlIHdlIGdvdCBzaG92ZWQgZG93biBwYXN0IGEgZmxvYXQgKHRodXMK
ICAgICAgICAgICAgIC8vIGdpdmluZyB1cyBtb3JlIHJvb20pLCBzbyB3ZSBuZWVkIHRvIHJldGVz
dCwgYW5kIG9ubHkganVtcCB0bwpAQCAtMjE3OCw3ICsyMTc5LDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6Y2hlY2tMaW5lc0ZvclRleHRPdmVyZgogICAgIC8vIEluY2x1ZGUgdGhlIHNjcm9sbGJhciBm
b3Igb3ZlcmZsb3cgYmxvY2tzLCB3aGljaCBtZWFucyB3ZSB3YW50IHRvIHVzZSAiY29udGVudFdp
ZHRoKCkiCiAgICAgYm9vbCBsdHIgPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFI7CiAgICAg
Zm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0Um9vdEJveCgpKSB7Ci0gICAgICAgIGludCBibG9ja0VkZ2UgPSBsdHIgPyByaWdo
dE9mZnNldChjdXJyLT55UG9zKCkpIDogbGVmdE9mZnNldChjdXJyLT55UG9zKCkpOworICAgICAg
ICBpbnQgYmxvY2tFZGdlID0gbHRyID8gcmlnaHRPZmZzZXQoY3Vyci0+eVBvcygpLCBjdXJyID09
IGZpcnN0Um9vdEJveCgpKSA6IGxlZnRPZmZzZXQoY3Vyci0+eVBvcygpLCBjdXJyID09IGZpcnN0
Um9vdEJveCgpKTsKICAgICAgICAgaW50IGxpbmVCb3hFZGdlID0gbHRyID8gY3Vyci0+eFBvcygp
ICsgY3Vyci0+d2lkdGgoKSA6IGN1cnItPnhQb3MoKTsKICAgICAgICAgaWYgKChsdHIgJiYgbGlu
ZUJveEVkZ2UgPiBibG9ja0VkZ2UpIHx8ICghbHRyICYmIGxpbmVCb3hFZGdlIDwgYmxvY2tFZGdl
KSkgewogICAgICAgICAgICAgLy8gVGhpcyBsaW5lIHNwaWxscyBvdXQgb2Ygb3VyIGJveCBpbiB0
aGUgYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgTm93IHdlIG5lZWQgdG8gc2VlIGlmIHRoZSBsaW5l
Cg==
</data>
<flag name="review"
          id="13011"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>