<?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>64116</bug_id>
          
          <creation_ts>2011-07-07 12:04:47 -0700</creation_ts>
          <short_desc>Switch remaining paint functions to new layout types</short_desc>
          <delta_ts>2011-07-07 16:18:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>433637</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-07 12:04:47 -0700</bug_when>
    <thetext>Catching all remaining IntPoint&amp; paintOffsets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433700</commentid>
    <comment_count>1</comment_count>
      <attachid>100032</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-07 14:20:15 -0700</bug_when>
    <thetext>Created attachment 100032
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433747</commentid>
    <comment_count>2</comment_count>
      <attachid>100041</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-07-07 15:36:51 -0700</bug_when>
    <thetext>Created attachment 100041
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433772</commentid>
    <comment_count>3</comment_count>
      <attachid>100041</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-07 16:18:10 -0700</bug_when>
    <thetext>Comment on attachment 100041
Patch for landing

Clearing flags on attachment: 100041

Committed r90600: &lt;http://trac.webkit.org/changeset/90600&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433773</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-07 16:18:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100032</attachid>
            <date>2011-07-07 14:20:15 -0700</date>
            <delta_ts>2011-07-07 15:36:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64116-20110707142014.patch</filename>
            <type>text/plain</type>
            <size>83036</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNTgzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTEtMDctMDcgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCByZW1haW5pbmcg
cGFpbnQgZnVuY3Rpb25zIHRvIG5ldyBsYXlvdXQgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3dpdGNoaW5nIGFsbCBmdW5jdGlvbnMgd2l0aCBJ
bnRQb2ludCBwYWludE9mZnNldHMgdG8gdGhlIG5ldyBMYXlvdXQgdHlwZXMuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnBhaW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQp
OgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL0xheW91dFR5cGVzLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpwYWludENhcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50RWxsaXBzaXNCb3hlcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDb250aW51YXRpb25PdXRsaW5lcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpwYWludE91dGxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5l
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWlu
dE92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50
U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6
ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5l
Qm94TGlzdDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50U2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cGFpbnRGb2N1c1Jp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnNob3Vs
ZFBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTY3JvbGxiYXJQYXJ0OjpwYWludEludG9SZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyUGFydC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludEJhY2tncm91
bmRzQmVoaW5kQ2VsbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Q2VsbCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbDo6cGFpbnRQbGFjZWhvbGRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6cGFpbnRFbGxpcHNp
c0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwYWludEN1c3RvbUhpZ2hs
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwYWludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJs
b2NrOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290OjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KToKKwogMjAxMS0wNy0wNyAgRGlyayBTY2h1
bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFJvYiBCdWlzLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiA5
MDU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQm
IHBhaW50T2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCit2b2lkIEVsbGlwc2lz
Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsKICAg
ICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKICAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSBtX3JlbmRlcmVyLT5zdHlsZShtX2ZpcnN0TGluZSk7CkBAIC0zOSw3
ICszOSw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwgc3R5bGUtPmNvbG9yU3BhY2UoKSk7
CiAgICAgYm9vbCBzZXRTaGFkb3cgPSBmYWxzZTsKICAgICBpZiAoc3R5bGUtPnRleHRTaGFkb3co
KSkgewotICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coSW50U2l6ZShzdHlsZS0+dGV4dFNoYWRv
dygpLT54KCksIHN0eWxlLT50ZXh0U2hhZG93KCktPnkoKSksCisgICAgICAgIGNvbnRleHQtPnNl
dFNoYWRvdyhMYXlvdXRTaXplKHN0eWxlLT50ZXh0U2hhZG93KCktPngoKSwgc3R5bGUtPnRleHRT
aGFkb3coKS0+eSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT50ZXh0U2hh
ZG93KCktPmJsdXIoKSwgc3R5bGUtPnRleHRTaGFkb3coKS0+Y29sb3IoKSwgc3R5bGUtPmNvbG9y
U3BhY2UoKSk7CiAgICAgICAgIHNldFNoYWRvdyA9IHRydWU7CiAgICAgfQpAQCAtNTUsNyArNTUs
NyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgfQogCiAg
ICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJl
Y3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxl
LCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgSW50UG9pbnQoeCgpICsgcGFpbnRP
ZmZzZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55KCkgKyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5h
c2NlbnQoKSkpOworICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKHJlbmRlcmVyKCksIGZvbnQsIG1fc3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxs
b3dUcmFpbGluZ0V4cGFuc2lvbiksIExheW91dFBvaW50KHgoKSArIHBhaW50T2Zmc2V0LngoKSwg
eSgpICsgcGFpbnRPZmZzZXQueSgpICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsK
IAogICAgIC8vIFJlc3RvcmUgdGhlIHJlZ3VsYXIgZmlsbCBjb2xvci4KICAgICBpZiAodGV4dENv
bG9yICE9IGNvbnRleHQtPmZpbGxDb2xvcigpKQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIEVsbGlw
c2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAKICAgICBpZiAobV9tYXJrdXBCb3gpIHsK
ICAgICAgICAgLy8gUGFpbnQgdGhlIG1hcmt1cCBib3gKLSAgICAgICAgSW50UG9pbnQgYWRqdXN0
ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OworICAgICAgICBMYXlvdXRQb2ludCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CiAgICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQu
bW92ZSh4KCkgKyBtX2xvZ2ljYWxXaWR0aCAtIG1fbWFya3VwQm94LT54KCksCiAgICAgICAgICAg
ICB5KCkgKyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIChtX21hcmt1cEJveC0+eSgp
ICsgbV9tYXJrdXBCb3gtPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSkpOwogICAgICAgICBtX21hcmt1cEJveC0+cGFpbnQocGFpbnRJbmZvLCBh
ZGp1c3RlZFBhaW50T2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKQEAgLTgxLDcgKzgxLDcg
QEAgSW50UmVjdCBFbGxpcHNpc0JveDo6c2VsZWN0aW9uUmVjdCgpCiAgICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUsIFRleHRSdW46OkFsbG93
VHJhaWxpbmdFeHBhbnNpb24pLCBJbnRQb2ludCh4KCksIHkoKSArIHJvb3QoKS0+c2VsZWN0aW9u
VG9wKCkpLCByb290KCktPnNlbGVjdGlvbkhlaWdodCgpKSk7CiB9CiAKLXZvaWQgRWxsaXBzaXNC
b3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UG9p
bnQmIHBhaW50T2Zmc2V0LCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCit2
b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBGb250JiBmb250KQogewogICAgIENvbG9yIHRleHRDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgQ29sb3IgYyA9IG1fcmVuZGVyZXIt
PnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwpAQCAtOTQsOCArOTQsOSBAQCB2b2lkIEVsbGlw
c2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgICAgIGMgPSBDb2xvcigweGZmIC0g
Yy5yZWQoKSwgMHhmZiAtIGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1ZSgpKTsKIAogICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7Ci0gICAgaW50IHRvcCA9
IHJvb3QoKS0+c2VsZWN0aW9uVG9wKCk7Ci0gICAgaW50IGggPSByb290KCktPnNlbGVjdGlvbkhl
aWdodCgpOworICAgIExheW91dFVuaXQgdG9wID0gcm9vdCgpLT5zZWxlY3Rpb25Ub3AoKTsKKyAg
ICBMYXlvdXRVbml0IGggPSByb290KCktPnNlbGVjdGlvbkhlaWdodCgpOworICAgIC8vIEZJWE1F
OiBXZSdsbCBuZWVkIHRvIGFwcGx5IHRoZSBjb3JyZWN0IGNsaXAgcm91bmRpbmcgaGVyZTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNjU2CiAgICAgY29udGV4dC0+
Y2xpcChJbnRSZWN0KHgoKSArIHBhaW50T2Zmc2V0LngoKSwgdG9wICsgcGFpbnRPZmZzZXQueSgp
LCBtX2xvZ2ljYWxXaWR0aCwgaCkpOwogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdheXMg
TFRSPyBGaXggYnkgcGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93LgogICAgIGNv
bnRleHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKHJlbmRlcmVyKCksIGZvbnQsIG1fc3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFp
bGluZ0V4cGFuc2lvbiksIEludFBvaW50KHgoKSArIHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFp
bnRPZmZzZXQueSgpICsgdG9wKSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAkocmV2aXNpb24gOTA1NzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJv
dHRvbSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwogICAgIHZp
cnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pOwogICAg
IHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzKSB7
IG1fc2VsZWN0aW9uU3RhdGUgPSBzOyB9CiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCk7CkBA
IC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgaGVpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRl
OyB9Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRQ
b2ludCYsIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rp
b24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBSZW5kZXJTdHlsZSosIGNv
bnN0IEZvbnQmKTsKIAogICAgIGludCBtX2hlaWdodDsKICAgICBBdG9taWNTdHJpbmcgbV9zdHI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gOTA1
NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTk2LDEyICsxOTYsMTIgQEAgdm9pZCBJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9u
KGZsb2F0IGR4LAogICAgICAgICB0b1JlbmRlckJveChtX3JlbmRlcmVyKS0+bW92ZShkeCwgZHkp
OyAKIH0KIAotdm9pZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGludCAvKiBsaW5lVG9wICovLCBpbnQgLypsaW5lQm90
dG9tKi8pCit2b2lkIElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCAvKiBsaW5lVG9wICovLCBMYXlv
dXRVbml0IC8qbGluZUJvdHRvbSovKQogewogICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50
V2l0aGluUm9vdChyZW5kZXJlcigpKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VG
b3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IHBhaW50T2Zmc2V0Owor
ICAgIExheW91dFBvaW50IGNoaWxkUG9pbnQgPSBwYWludE9mZnNldDsKICAgICBpZiAocGFyZW50
KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIC8v
IEZhc3RlciB0aGFuIGNhbGxpbmcgY29udGFpbmluZ0Jsb2NrKCkuCiAgICAgICAgIGNoaWxkUG9p
bnQgPSByZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHRv
UmVuZGVyQm94KHJlbmRlcmVyKCkpLCBjaGlsZFBvaW50LCBSZW5kZXJCb3g6OlBhcmVudFRvQ2hp
bGRGbGlwcGluZ0FkanVzdG1lbnQpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guaAkocmV2aXNpb24gOTA1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBhZGp1c3RQb3NpdGlvbihkZWx0YSwgMCk7CiAgICAgfQogCi0gICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGlu
dCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSk7CiAKICAgICBJbmxpbmVCb3gqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9u
IDkwNTc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NDYsOSArOTQ2LDkgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBJbmxpbmVGbG93
Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCit2b2lkIElubGluZUZsb3dCb3g6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
IExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQogewotICAgIEludFJl
Y3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdChsaW5lVG9wLCBsaW5lQm90dG9tKSk7
CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3As
IGxpbmVCb3R0b20pKTsKICAgICBvdmVyZmxvd1JlY3QuaW5mbGF0ZShyZW5kZXJlcigpLT5tYXhp
bWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKSk7CiAgICAgZmxpcEZvcldyaXRpbmdNb2Rl
KG92ZXJmbG93UmVjdCk7CiAgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDkw
NTc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50RmlsbExh
eWVycyhjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllciosIGNv
bnN0IExheW91dFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIp
OwogICAgIHZvaWQgcGFpbnRGaWxsTGF5ZXIoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgQ29sb3Im
LCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBMYXlvdXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3Ig
PSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICB2b2lkIHBhaW50Qm94U2hhZG93KEdyYXBoaWNz
Q29udGV4dCosIFJlbmRlclN0eWxlKiwgU2hhZG93U3R5bGUsIGNvbnN0IExheW91dFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQg
bGluZVRvcCwgaW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBs
aW5lQm90dG9tKTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGlu
dCBsaW5lQm90dG9tKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyTGluZUJveExpc3QqIHJlbmRlcmVy
TGluZUJveGVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCShyZXZpc2lvbiA5MDU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDcgKzQ2Niw3IEBAIHN0
YXRpYyBpbmxpbmUgQWZmaW5lVHJhbnNmb3JtIHJvdGF0aW9uKGMKICAgICAgICAgOiBBZmZpbmVU
cmFuc2Zvcm0oMCwgLTEsIDEsIDAsIGJveFJlY3QueCgpIC0gYm94UmVjdC5tYXhZKCksIGJveFJl
Y3QueCgpICsgYm94UmVjdC5tYXhZKCkpOwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGludCAv
KmxpbmVUb3AqLywgaW50IC8qbGluZUJvdHRvbSovKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBM
YXlvdXRVbml0IC8qbGluZVRvcCovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRvbSovKQogewogICAg
IGlmIChpc0xpbmVCcmVhaygpIHx8ICFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJl
bmRlcmVyKCkpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
IHx8CiAgICAgICAgIG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24gfHwgcGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8ICFtX2xlbikKQEAgLTQ3NCwxNSArNDc0LDE1
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKIAogICAgIEFTU0VS
VChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lICYmIHBhaW50SW5mby5w
aGFzZSAhPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcyk7CiAKLSAgICBpbnQgbG9naWNhbExlZnRT
aWRlID0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpOwotICAgIGludCBsb2dpY2FsUmlnaHRT
aWRlID0gbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKTsKLSAgICBpbnQgbG9naWNhbFN0YXJ0
ID0gbG9naWNhbExlZnRTaWRlICsgKGlzSG9yaXpvbnRhbCgpID8gcGFpbnRPZmZzZXQueCgpIDog
cGFpbnRPZmZzZXQueSgpKTsKLSAgICBpbnQgbG9naWNhbEV4dGVudCA9IGxvZ2ljYWxSaWdodFNp
ZGUgLSBsb2dpY2FsTGVmdFNpZGU7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFNpZGUgPSBs
b2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRT
aWRlID0gbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKTsKKyAgICBMYXlvdXRVbml0IGxvZ2lj
YWxTdGFydCA9IGxvZ2ljYWxMZWZ0U2lkZSArIChpc0hvcml6b250YWwoKSA/IHBhaW50T2Zmc2V0
LngoKSA6IHBhaW50T2Zmc2V0LnkoKSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsRXh0ZW50ID0g
bG9naWNhbFJpZ2h0U2lkZSAtIGxvZ2ljYWxMZWZ0U2lkZTsKICAgICAKLSAgICBpbnQgcGFpbnRF
bmQgPSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5mby5yZWN0Lm1heFgoKSA6IHBhaW50SW5mby5y
ZWN0Lm1heFkoKTsKLSAgICBpbnQgcGFpbnRTdGFydCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJ
bmZvLnJlY3QueCgpIDogcGFpbnRJbmZvLnJlY3QueSgpOworICAgIExheW91dFVuaXQgcGFpbnRF
bmQgPSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5mby5yZWN0Lm1heFgoKSA6IHBhaW50SW5mby5y
ZWN0Lm1heFkoKTsKKyAgICBMYXlvdXRVbml0IHBhaW50U3RhcnQgPSBpc0hvcml6b250YWwoKSA/
IHBhaW50SW5mby5yZWN0LngoKSA6IHBhaW50SW5mby5yZWN0LnkoKTsKICAgICAKLSAgICBJbnRQ
b2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgTGF5b3V0UG9pbnQg
YWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwogICAgIAogICAgIGlmIChsb2dpY2Fs
U3RhcnQgPj0gcGFpbnRFbmQgfHwgbG9naWNhbFN0YXJ0ICsgbG9naWNhbEV4dGVudCA8PSBwYWlu
dFN0YXJ0KQogICAgICAgICByZXR1cm47CkBAIC01MDUsMTAgKzUwNSwxMCBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgICAgICAvLyBmYXJ0aGVyIHRv
IHRoZSByaWdodC4KICAgICAgICAgICAgIC8vIE5PVEU6IFdlYktpdCdzIGJlaGF2aW9yIGRpZmZl
cnMgZnJvbSB0aGF0IG9mIElFIHdoaWNoIGFwcGVhcnMgdG8ganVzdCBvdmVybGF5IHRoZSBlbGxp
cHNpcyBvbiB0b3Agb2YgdGhlCiAgICAgICAgICAgICAvLyB0cnVuY2F0ZWQgc3RyaW5nIGkuZS4g
IHxIZWxsb3xDQkF8IC0+IHwuLi5sb3xDQkF8Ci0gICAgICAgICAgICBpbnQgd2lkdGhPZlZpc2li
bGVUZXh0ID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT53aWR0aChtX3N0YXJ0LCBtX3RydW5j
YXRpb24sIHRleHRQb3MoKSwgbV9maXJzdExpbmUpOwotICAgICAgICAgICAgaW50IHdpZHRoT2ZI
aWRkZW5UZXh0ID0gbV9sb2dpY2FsV2lkdGggLSB3aWR0aE9mVmlzaWJsZVRleHQ7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogVGhlIGhpdCB0ZXN0aW5nIGxvZ2ljIGFsc28gbmVlZHMgdG8gdGFrZSB0
aGlzIHRyYW5zbGF0aW9uIGludCBhY2NvdW50LgotICAgICAgICAgICAgSW50U2l6ZSB0cnVuY2F0
aW9uT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHdpZHRoT2ZIaWRkZW5UZXh0IDog
LXdpZHRoT2ZIaWRkZW5UZXh0LCAwKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGhPZlZp
c2libGVUZXh0ID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT53aWR0aChtX3N0YXJ0LCBtX3Ry
dW5jYXRpb24sIHRleHRQb3MoKSwgbV9maXJzdExpbmUpOworICAgICAgICAgICAgTGF5b3V0VW5p
dCB3aWR0aE9mSGlkZGVuVGV4dCA9IG1fbG9naWNhbFdpZHRoIC0gd2lkdGhPZlZpc2libGVUZXh0
OworICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBoaXQgdGVzdGluZyBsb2dpYyBhbHNvIG5lZWRz
IHRvIHRha2UgdGhpcyB0cmFuc2xhdGlvbiBpbnRvIGFjY291bnQuCisgICAgICAgICAgICBMYXlv
dXRTaXplIHRydW5jYXRpb25PZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gd2lkdGhP
ZkhpZGRlblRleHQgOiAtd2lkdGhPZkhpZGRlblRleHQsIDApOwogICAgICAgICAgICAgYWRqdXN0
ZWRQYWludE9mZnNldC5tb3ZlKGlzSG9yaXpvbnRhbCgpID8gdHJ1bmNhdGlvbk9mZnNldCA6IHRy
dW5jYXRpb25PZmZzZXQudHJhbnNwb3NlZFNpemUoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC01
MjEsNyArNTIxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQog
CiAgICAgRmxvYXRQb2ludCBib3hPcmlnaW4gPSBsb2NhdGlvbkluY2x1ZGluZ0ZsaXBwaW5nKCk7
CiAgICAgYm94T3JpZ2luLm1vdmUoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFp
bnRPZmZzZXQueSgpKTsKLSAgICBGbG9hdFJlY3QgYm94UmVjdChib3hPcmlnaW4sIEludFNpemUo
bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQoKSkpOworICAgIEZsb2F0UmVjdCBib3hSZWN0
KGJveE9yaWdpbiwgTGF5b3V0U2l6ZShsb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCgpKSk7
CiAKICAgICBSZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0ID0gc3R5bGVUb1VzZS0+aGFz
VGV4dENvbWJpbmUoKSAmJiB0ZXh0UmVuZGVyZXIoKS0+aXNDb21iaW5lVGV4dCgpICYmIHRvUmVu
ZGVyQ29tYmluZVRleHQodGV4dFJlbmRlcmVyKCkpLT5pc0NvbWJpbmVkKCkgPyB0b1JlbmRlckNv
bWJpbmVUZXh0KHRleHRSZW5kZXJlcigpKSA6IDA7CiAKQEAgLTg1Myw3ICs4NTMsNyBAQCB2b2lk
IElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrCiAKICNpZiBQTEFURk9STShNQUMp
CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoY29uc3QgSW50UG9p
bnQmIHBhaW50T2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCit2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQogewogICAgIEZyYW1lKiBmcmFtZSA9IHJlbmRl
cmVyKCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gOTA1NzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsOCArMTEw
LDggQEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQoaW50JiBzUG9zLCBpbnQm
IGVQb3MpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKLSAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExh
eW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKIAog
cHVibGljOgogICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlcigpIGNvbnN0OwpAQCAtMTY5LDcg
KzE2OSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBj
b25zdCBGb250JiwgYm9vbCBiYWNrZ3JvdW5kKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25V
bmRlcmxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBj
b25zdCBDb21wb3NpdGlvblVuZGVybGluZSYpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lk
IHBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IEludFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlKTsKKyAgICB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IExheW91dFBvaW50
JiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHJldmlzaW9uIDkwNTc0KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xheW91dFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDYgQEAKICNpZm5kZWYgTGF5b3V0VHlwZXNfaAogI2RlZmluZSBMYXlvdXRUeXBl
c19oCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDkwNTc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5Myw3ICsyMjkzLDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgICAgICBsYXllcigpLT5w
YWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZz
ZXQsIHBhaW50SW5mby5yZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5S
dWxlcyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQor
dm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlmIChwYWludEluZm8uY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0yMzAxLDggKzIz
MDEsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVzKFBhaW50CiAgICAgY29u
c3QgQ29sb3ImIHJ1bGVDb2xvciA9IHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcik7CiAgICAgYm9vbCBydWxlVHJhbnNwYXJlbnQg
PSBzdHlsZSgpLT5jb2x1bW5SdWxlSXNUcmFuc3BhcmVudCgpOwogICAgIEVCb3JkZXJTdHlsZSBy
dWxlU3R5bGUgPSBzdHlsZSgpLT5jb2x1bW5SdWxlU3R5bGUoKTsKLSAgICBpbnQgcnVsZVdpZHRo
ID0gc3R5bGUoKS0+Y29sdW1uUnVsZVdpZHRoKCk7Ci0gICAgaW50IGNvbEdhcCA9IGNvbHVtbkdh
cCgpOworICAgIExheW91dFVuaXQgcnVsZVdpZHRoID0gc3R5bGUoKS0+Y29sdW1uUnVsZVdpZHRo
KCk7CisgICAgTGF5b3V0VW5pdCBjb2xHYXAgPSBjb2x1bW5HYXAoKTsKICAgICBib29sIHJlbmRl
clJ1bGUgPSBydWxlU3R5bGUgPiBCSElEREVOICYmICFydWxlVHJhbnNwYXJlbnQgJiYgcnVsZVdp
ZHRoIDw9IGNvbEdhcDsKICAgICBpZiAoIXJlbmRlclJ1bGUpCiAgICAgICAgIHJldHVybjsKQEAg
LTIzMTAsOSArMjMxMCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFp
bnQKICAgICAvLyBXZSBuZWVkIHRvIGRvIG11bHRpcGxlIHBhc3NlcywgYnJlYWtpbmcgdXAgb3Vy
IGNoaWxkIHBhaW50aW5nIGludG8gc3RyaXBzLgogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBj
b2x1bW5JbmZvKCk7CiAgICAgdW5zaWduZWQgY29sQ291bnQgPSBjb2x1bW5Db3VudChjb2xJbmZv
KTsKLSAgICBpbnQgY3VyckxvZ2ljYWxMZWZ0T2Zmc2V0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gMCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKLSAgICBpbnQgcnVsZUFk
ZCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwotICAgIGludCBydWxlTG9naWNhbExl
ZnQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyAwIDogY29udGVudExvZ2lj
YWxXaWR0aCgpOworICAgIExheW91dFVuaXQgY3VyckxvZ2ljYWxMZWZ0T2Zmc2V0ID0gc3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMCA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsK
KyAgICBMYXlvdXRVbml0IHJ1bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKTsK
KyAgICBMYXlvdXRVbml0IHJ1bGVMb2dpY2FsTGVmdCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IDAgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7CiAKICAgICBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGN1cnJlbnRDVE0gPSBwYWludEluZm8uY29udGV4dC0+Z2V0Q1RNKCk7CiAg
ICAgYm9vbCBhbnRpYWxpYXMgPSAhY3VycmVudENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9y
RmxpcHBlZCgpOwpAQCAtMjMyMCw3ICsyMzIwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
b2x1bW5SdWxlcyhQYWludAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2xDb3VudDsg
aSsrKSB7CiAgICAgICAgIExheW91dFJlY3QgY29sUmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZv
LCBpKTsKIAotICAgICAgICBpbnQgaW5saW5lRGlyZWN0aW9uU2l6ZSA9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBjb2xSZWN0LndpZHRoKCkgOiBjb2xSZWN0LmhlaWdodCgpOworICAgICAg
ICBMYXlvdXRVbml0IGlubGluZURpcmVjdGlvblNpemUgPSBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gY29sUmVjdC53aWR0aCgpIDogY29sUmVjdC5oZWlnaHQoKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAgICAgIGlmIChzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTIzMzMsMTAgKzIzMzMsMTAgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWludAogICAgICAgIAogICAgICAgICAvLyBO
b3cgcGFpbnQgdGhlIGNvbHVtbiBydWxlLgogICAgICAgICBpZiAoaSA8IGNvbENvdW50IC0gMSkg
ewotICAgICAgICAgICAgaW50IHJ1bGVMZWZ0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IHBhaW50T2Zmc2V0LngoKSArIHJ1bGVMb2dpY2FsTGVmdCAtIHJ1bGVXaWR0aCAvIDIgKyBydWxl
QWRkIDogcGFpbnRPZmZzZXQueCgpICsgYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCk7
Ci0gICAgICAgICAgICBpbnQgcnVsZVJpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IHJ1bGVMZWZ0ICsgcnVsZVdpZHRoIDogcnVsZUxlZnQgKyBjb250ZW50V2lkdGgoKTsKLSAgICAg
ICAgICAgIGludCBydWxlVG9wID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBhaW50T2Zm
c2V0LnkoKSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIDogcGFpbnRPZmZzZXQueSgpICsg
cnVsZUxvZ2ljYWxMZWZ0IC0gcnVsZVdpZHRoIC8gMiArIHJ1bGVBZGQ7Ci0gICAgICAgICAgICBp
bnQgcnVsZUJvdHRvbSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBydWxlVG9wICsgY29u
dGVudEhlaWdodCgpIDogcnVsZVRvcCArIHJ1bGVXaWR0aDsKKyAgICAgICAgICAgIExheW91dFVu
aXQgcnVsZUxlZnQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcGFpbnRPZmZzZXQueCgp
ICsgcnVsZUxvZ2ljYWxMZWZ0IC0gcnVsZVdpZHRoIC8gMiArIHJ1bGVBZGQgOiBwYWludE9mZnNl
dC54KCkgKyBib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKTsKKyAgICAgICAgICAgIExh
eW91dFVuaXQgcnVsZVJpZ2h0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJ1bGVMZWZ0
ICsgcnVsZVdpZHRoIDogcnVsZUxlZnQgKyBjb250ZW50V2lkdGgoKTsKKyAgICAgICAgICAgIExh
eW91dFVuaXQgcnVsZVRvcCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBwYWludE9mZnNl
dC55KCkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSA6IHBhaW50T2Zmc2V0LnkoKSArIHJ1
bGVMb2dpY2FsTGVmdCAtIHJ1bGVXaWR0aCAvIDIgKyBydWxlQWRkOworICAgICAgICAgICAgTGF5
b3V0VW5pdCBydWxlQm90dG9tID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJ1bGVUb3Ag
KyBjb250ZW50SGVpZ2h0KCkgOiBydWxlVG9wICsgcnVsZVdpZHRoOwogICAgICAgICAgICAgZHJh
d0xpbmVGb3JCb3hTaWRlKHBhaW50SW5mby5jb250ZXh0LCBydWxlTGVmdCwgcnVsZVRvcCwgcnVs
ZVJpZ2h0LCBydWxlQm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
KCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IEJTTGVmdCA6IEJTUmlnaHQsIHJ1bGVDb2xv
ciwgcnVsZVN0eWxlLCAwLCAwLCBhbnRpYWxpYXMpOwogICAgICAgICB9CkBAIC0yMzQ1LDcgKzIz
NDUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVzKFBhaW50CiAgICAgfQog
fQogCi12b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRlbnRzKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGJvb2wgcGFpbnRpbmdGbG9hdHMp
Cit2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGJvb2wgcGFpbnRpbmdGbG9hdHMp
CiB7CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFraW5nIHVwIG91
ciBjaGlsZCBwYWludGluZyBpbnRvIHN0cmlwcy4KICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQgPSBwYWludEluZm8uY29udGV4dDsKQEAgLTIzNTMsMTMgKzIzNTMsMTMgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQYQogICAgIHVuc2lnbmVkIGNvbENvdW50ID0g
Y29sdW1uQ291bnQoY29sSW5mbyk7CiAgICAgaWYgKCFjb2xDb3VudCkKICAgICAgICAgcmV0dXJu
OwotICAgIGludCBjdXJyTG9naWNhbFRvcE9mZnNldCA9IDA7CisgICAgTGF5b3V0VW5pdCBjdXJy
TG9naWNhbFRvcE9mZnNldCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbENv
dW50OyBpKyspIHsKICAgICAgICAgLy8gRm9yIGVhY2ggcmVjdCwgd2UgY2xpcCB0byB0aGUgcmVj
dCwgYW5kIHRoZW4gd2UgYWRqdXN0IG91ciBjb29yZHMuCiAgICAgICAgIExheW91dFJlY3QgY29s
UmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgZmxpcEZvcldyaXRpbmdN
b2RlKGNvbFJlY3QpOwotICAgICAgICBpbnQgbG9naWNhbExlZnRPZmZzZXQgPSAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGNvbFJlY3QueCgpIDogY29sUmVjdC55KCkpIC0gbG9naWNhbExl
ZnRPZmZzZXRGb3JDb250ZW50KCk7Ci0gICAgICAgIEludFNpemUgb2Zmc2V0ID0gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IEludFNpemUobG9naWNhbExlZnRPZmZzZXQsIGN1cnJMb2dpY2Fs
VG9wT2Zmc2V0KSA6IEludFNpemUoY3VyckxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxMZWZ0T2Zm
c2V0KTsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCA9IChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gY29sUmVjdC54KCkgOiBjb2xSZWN0LnkoKSkgLSBsb2dpY2FsTGVm
dE9mZnNldEZvckNvbnRlbnQoKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gTGF5b3V0U2l6ZShsb2dpY2FsTGVmdE9mZnNldCwgY3Vyckxv
Z2ljYWxUb3BPZmZzZXQpIDogTGF5b3V0U2l6ZShjdXJyTG9naWNhbFRvcE9mZnNldCwgbG9naWNh
bExlZnRPZmZzZXQpOwogICAgICAgICBjb2xSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAgICAg
ICAgIFBhaW50SW5mbyBpbmZvKHBhaW50SW5mbyk7CiAgICAgICAgIGluZm8ucmVjdC5pbnRlcnNl
Y3QoY29sUmVjdCk7CkBAIC0yMzcyLDE0ICsyMzcyLDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50Q29sdW1uQ29udGVudHMoUGEKICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAoY29sUmVjdCk7
CiAKICAgICAgICAgICAgIC8vIEFkanVzdCBvdXIgeCBhbmQgeSB3aGVuIHBhaW50aW5nLgotICAg
ICAgICAgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgb2Zm
c2V0OworICAgICAgICAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50
T2Zmc2V0ICsgb2Zmc2V0OwogICAgICAgICAgICAgaWYgKHBhaW50aW5nRmxvYXRzKQogICAgICAg
ICAgICAgICAgIHBhaW50RmxvYXRzKGluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQsIHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlVGV4dENsaXApOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBhaW50
Q29udGVudHMoaW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBpbnQgYmxvY2tEZWx0YSA9IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29sUmVjdC5o
ZWlnaHQoKSA6IGNvbFJlY3Qud2lkdGgoKSk7CisgICAgICAgIExheW91dFVuaXQgYmxvY2tEZWx0
YSA9IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29sUmVjdC5oZWlnaHQoKSA6IGNvbFJl
Y3Qud2lkdGgoKSk7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKQogICAgICAgICAgICAgY3VyckxvZ2ljYWxUb3BPZmZzZXQgKz0gYmxvY2tEZWx0YTsK
ICAgICAgICAgZWxzZQpAQCAtMjM4Nyw3ICsyMzg3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFp
bnRDb2x1bW5Db250ZW50cyhQYQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
b250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0
KQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIC8vIEF2b2lkIHBhaW50aW5n
IGRlc2NlbmRhbnRzIG9mIHRoZSByb290IGVsZW1lbnQgd2hlbiBzdHlsZXNoZWV0cyBoYXZlbid0
IGxvYWRlZC4gIFRoaXMgZWxpbWluYXRlcyBGT1VDLgogICAgIC8vIEl0J3Mgb2sgbm90IHRvIGRy
YXcsIGJlY2F1c2UgbGF0ZXIgb24sIHdoZW4gYWxsIHRoZSBzdHlsZXNoZWV0cyBkbyBsb2FkLCB1
cGRhdGVTdHlsZVNlbGVjdG9yIG9uIHRoZSBEb2N1bWVudApAQCAtMjQwMSw3ICsyNDAxLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludEluZgogICAgICAgICBwYWludENo
aWxkcmVuKHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpw
YWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRP
ZmZzZXQpCit2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUGFpbnRQaGFzZSBu
ZXdQaGFzZSA9IChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpID8g
UGFpbnRQaGFzZU91dGxpbmUgOiBwYWludEluZm8ucGhhc2U7CiAgICAgbmV3UGhhc2UgPSAobmV3
UGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcykgPyBQYWludFBoYXNlQ2hp
bGRCbG9ja0JhY2tncm91bmQgOiBuZXdQaGFzZTsKQEAgLTI0MTksNyArMjQxOSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICBmb3IgKFJlbmRlckJveCog
Y2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
Z0JveCgpKSB7ICAgICAgICAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYmVmb3Jl
OiBhbHdheXMsIGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCiAgICAgICAgIGJvb2wg
Y2hlY2tCZWZvcmVBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAodXNlUHJpbnRSZWN0ICYm
IGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7Ci0gICAgICAg
IGludCBhYnNvbHV0ZUNoaWxkWSA9IHBhaW50T2Zmc2V0LnkoKSArIGNoaWxkLT55KCk7CisgICAg
ICAgIExheW91dFVuaXQgYWJzb2x1dGVDaGlsZFkgPSBwYWludE9mZnNldC55KCkgKyBjaGlsZC0+
eSgpOwogICAgICAgICBpZiAoY2hlY2tCZWZvcmVBbHdheXMKICAgICAgICAgICAgICYmIGFic29s
dXRlQ2hpbGRZID4gcGFpbnRJbmZvLnJlY3QueSgpCiAgICAgICAgICAgICAmJiBhYnNvbHV0ZUNo
aWxkWSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSkgewpAQCAtMjQzOCw3ICsyNDM4LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9k
ZShjaGlsZCwgcGFpbnRPZmZzZXQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwor
ICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKGNoaWxk
LCBwYWludE9mZnNldCwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CiAgICAgICAg
IGlmICghY2hpbGQtPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWNoaWxkLT5pc0Zsb2F0aW5n
KCkpCiAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgY2hpbGRQb2ludCk7CiAKQEAgLTI0
NTMsNyArMjQ1Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2FyZXQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgQ2FyZXRUeXBlIHR5cGUpCit2b2lk
IFJlbmRlckJsb2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQsIENhcmV0VHlwZSB0eXBlKQogewogICAgIC8vIFBhaW50IHRo
ZSBjYXJldCBpZiB0aGUgRnJhbWVTZWxlY3Rpb24gc2F5cyBzbyBvciBpZiBjYXJldCBicm93c2lu
ZyBpcyBlbmFibGVkCiAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gZnJhbWUoKS0+c2V0dGluZ3Mo
KSAmJiBmcmFtZSgpLT5zZXR0aW5ncygpLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwpAQCAtMjQ3
MCw3ICsyNDcwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDYXJldChQYWludEluZm8mIAog
ICAgIGlmIChjYXJldFBhaW50ZXIgPT0gdGhpcyAmJiAoaXNDb250ZW50RWRpdGFibGUgfHwgY2Fy
ZXRCcm93c2luZykpIHsKICAgICAgICAgLy8gQ29udmVydCB0aGUgcGFpbnRpbmcgb2Zmc2V0IGlu
dG8gdGhlIGxvY2FsIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoaXMgcmVuZGVyZXIsCiAgICAgICAg
IC8vIHRvIG1hdGNoIHRoZSBsb2NhbENhcmV0UmVjdCBjb21wdXRlZCBieSB0aGUgRnJhbWVTZWxl
Y3Rpb24KLSAgICAgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0
OworICAgICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7
CiAgICAgICAgIG9mZnNldEZvckNvbnRlbnRzKGFkanVzdGVkUGFpbnRPZmZzZXQpOwogCiAgICAg
ICAgIGlmICh0eXBlID09IEN1cnNvckNhcmV0KQpAQCAtMjUzMCw3ICsyNTMwLDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJgogCiAgICAgLy8gNS4gcGFpbnQgb3V0
bGluZS4KICAgICBpZiAoKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFpbnRQ
aGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIGhhc091dGxpbmUoKSAmJiBzdHlsZSgp
LT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5m
by5jb250ZXh0LCBJbnRSZWN0KHBhaW50T2Zmc2V0LCBzaXplKCkpKTsKKyAgICAgICAgcGFpbnRP
dXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBMYXlvdXRSZWN0KHBhaW50T2Zmc2V0LCBzaXplKCkp
KTsKIAogICAgIC8vIDYuIHBhaW50IGNvbnRpbnVhdGlvbiBvdXRsaW5lcy4KICAgICBpZiAoKHBh
aW50UGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNl
Q2hpbGRPdXRsaW5lcykpIHsKQEAgLTI1NzcsNyArMjU3Nyw3IEBAIEludFBvaW50IFJlbmRlckJs
b2NrOjpmbGlwRmxvYXRGb3JXcml0aW4KICAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsg
d2lkdGgoKSAtIGNoaWxkLT53aWR0aCgpIC0gMiAqIHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5n
TWFyZ2luKGNoaWxkKSwgcG9pbnQueSgpKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRG
bG9hdHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwg
Ym9vbCBwcmVzZXJ2ZVBoYXNlKQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgYm9vbCBwcmVz
ZXJ2ZVBoYXNlKQogewogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI1OTAsNyArMjU5MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKFBh
aW50SW5mbyYKICAgICAgICAgaWYgKHItPm1fc2hvdWxkUGFpbnQgJiYgIXItPm1fcmVuZGVyZXIt
Pmhhc1NlbGZQYWludGluZ0xheWVyKCkpIHsKICAgICAgICAgICAgIFBhaW50SW5mbyBjdXJyZW50
UGFpbnRJbmZvKHBhaW50SW5mbyk7CiAgICAgICAgICAgICBjdXJyZW50UGFpbnRJbmZvLnBoYXNl
ID0gcHJlc2VydmVQaGFzZSA/IHBhaW50SW5mby5waGFzZSA6IFBhaW50UGhhc2VCbG9ja0JhY2tn
cm91bmQ7Ci0gICAgICAgICAgICBJbnRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZsb2F0Rm9yV3Jp
dGluZ01vZGUociwgSW50UG9pbnQocGFpbnRPZmZzZXQueCgpICsgeFBvc2l0aW9uRm9yRmxvYXRJ
bmNsdWRpbmdNYXJnaW4ocikgLSByLT5tX3JlbmRlcmVyLT54KCksIHBhaW50T2Zmc2V0LnkoKSAr
IHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+bV9yZW5kZXJlci0+eSgp
KSk7CisgICAgICAgICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gZmxpcEZsb2F0Rm9yV3Jp
dGluZ01vZGUociwgTGF5b3V0UG9pbnQocGFpbnRPZmZzZXQueCgpICsgeFBvc2l0aW9uRm9yRmxv
YXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5tX3JlbmRlcmVyLT54KCksIHBhaW50T2Zmc2V0Lnko
KSArIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+bV9yZW5kZXJlci0+
eSgpKSk7CiAgICAgICAgICAgICByLT5tX3JlbmRlcmVyLT5wYWludChjdXJyZW50UGFpbnRJbmZv
LCBjaGlsZFBvaW50KTsKICAgICAgICAgICAgIGlmICghcHJlc2VydmVQaGFzZSkgewogICAgICAg
ICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0Jh
Y2tncm91bmRzOwpAQCAtMjYwNiw3ICsyNjA2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRG
bG9hdHMoUGFpbnRJbmZvJgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRFbGxp
cHNpc0JveGVzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZz
ZXQpCit2b2lkIFJlbmRlckJsb2NrOjpwYWludEVsbGlwc2lzQm94ZXMoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoIXBhaW50
SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QodGhpcykgfHwgIWZpcnN0TGluZUJveCgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yNjE0LDggKzI2MTQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWlu
dEVsbGlwc2lzQm94ZXMoUGFpCiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFICYmIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewogICAgICAg
ICAvLyBXZSBjYW4gY2hlY2sgdGhlIGZpcnN0IGJveCBhbmQgbGFzdCBib3ggYW5kIGF2b2lkIHBh
aW50aW5nIGlmIHdlIGRvbid0CiAgICAgICAgIC8vIGludGVyc2VjdC4KLSAgICAgICAgaW50IHlQ
b3MgPSBwYWludE9mZnNldC55KCkgKyBmaXJzdExpbmVCb3goKS0+eSgpOwotICAgICAgICBpbnQg
aCA9IGxhc3RMaW5lQm94KCktPnkoKSArIGxhc3RMaW5lQm94KCktPmxvZ2ljYWxIZWlnaHQoKSAt
IGZpcnN0TGluZUJveCgpLT55KCk7CisgICAgICAgIExheW91dFVuaXQgeVBvcyA9IHBhaW50T2Zm
c2V0LnkoKSArIGZpcnN0TGluZUJveCgpLT55KCk7CisgICAgICAgIExheW91dFVuaXQgaCA9IGxh
c3RMaW5lQm94KCktPnkoKSArIGxhc3RMaW5lQm94KCktPmxvZ2ljYWxIZWlnaHQoKSAtIGZpcnN0
TGluZUJveCgpLT55KCk7CiAgICAgICAgIGlmICh5UG9zID49IHBhaW50SW5mby5yZWN0Lm1heFko
KSB8fCB5UG9zICsgaCA8PSBwYWludEluZm8ucmVjdC55KCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKQEAgLTI2ODMsNyArMjY4Myw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnBhaW50c0NvbnRpbnVh
dGlvbk91dGwKICAgICByZXR1cm4gY29udGludWF0aW9ucy0+Y29udGFpbnMoZmxvdyk7CiB9CiAK
LXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGludWF0aW9uT3V0bGluZXMoUGFpbnRJbmZvJiBp
bmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlckJsb2NrOjpwYWlu
dENvbnRpbnVhdGlvbk91dGxpbmVzKFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQogewogICAgIENvbnRpbnVhdGlvbk91dGxpbmVUYWJsZU1hcCogdGFibGUg
PSBjb250aW51YXRpb25PdXRsaW5lVGFibGUoKTsKICAgICBpZiAodGFibGUtPmlzRW1wdHkoKSkK
QEAgLTI2OTMsNyArMjY5Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGludWF0aW9u
T3V0bGkKICAgICBpZiAoIWNvbnRpbnVhdGlvbnMpCiAgICAgICAgIHJldHVybjsKIAotICAgIElu
dFBvaW50IGFjY3VtdWxhdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICBMYXlvdXRQ
b2ludCBhY2N1bXVsYXRlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CiAgICAgLy8gUGFpbnQg
ZWFjaCBjb250aW51YXRpb24gb3V0bGluZS4KICAgICBMaXN0SGFzaFNldDxSZW5kZXJJbmxpbmUq
Pjo6aXRlcmF0b3IgZW5kID0gY29udGludWF0aW9ucy0+ZW5kKCk7CiAgICAgZm9yIChMaXN0SGFz
aFNldDxSZW5kZXJJbmxpbmUqPjo6aXRlcmF0b3IgaXQgPSBjb250aW51YXRpb25zLT5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTI3NjEsMjAgKzI3NjEsMjAgQEAgR2FwUmVjdHMgUmVu
ZGVyQmxvY2s6OnNlbGVjdGlvbkdhcFJlY3RzRgogICAgIHJldHVybiBzZWxlY3Rpb25HYXBzKHRo
aXMsIG9mZnNldEZyb21SZXBhaW50Q29udGFpbmVyLCBJbnRTaXplKCksIGxhc3RUb3AsIGxhc3RM
ZWZ0LCBsYXN0UmlnaHQpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb25H
YXBzKCkgJiYgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAg
ICAgIGludCBsYXN0VG9wID0gMDsKLSAgICAgICAgaW50IGxhc3RMZWZ0ID0gbG9naWNhbExlZnRT
ZWxlY3Rpb25PZmZzZXQodGhpcywgbGFzdFRvcCk7Ci0gICAgICAgIGludCBsYXN0UmlnaHQgPSBs
b2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQodGhpcywgbGFzdFRvcCk7CisgICAgICAgIExheW91
dFVuaXQgbGFzdFRvcCA9IDA7CisgICAgICAgIExheW91dFVuaXQgbGFzdExlZnQgPSBsb2dpY2Fs
TGVmdFNlbGVjdGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wKTsKKyAgICAgICAgTGF5b3V0VW5pdCBs
YXN0UmlnaHQgPSBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQodGhpcywgbGFzdFRvcCk7CiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZvLmNv
bnRleHQpOwogCi0gICAgICAgIEludFJlY3QgZ2FwUmVjdHNCb3VuZHMgPSBzZWxlY3Rpb25HYXBz
KHRoaXMsIHBhaW50T2Zmc2V0LCBJbnRTaXplKCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0Umln
aHQsICZwYWludEluZm8pOworICAgICAgICBMYXlvdXRSZWN0IGdhcFJlY3RzQm91bmRzID0gc2Vs
ZWN0aW9uR2Fwcyh0aGlzLCBwYWludE9mZnNldCwgTGF5b3V0U2l6ZSgpLCBsYXN0VG9wLCBsYXN0
TGVmdCwgbGFzdFJpZ2h0LCAmcGFpbnRJbmZvKTsKICAgICAgICAgaWYgKCFnYXBSZWN0c0JvdW5k
cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBlbmNs
b3NpbmdMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KC1w
YWludE9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKCFoYXNMYXllcigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIEludFJlY3QgbG9jYWxCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOworICAgICAg
ICAgICAgICAgICAgICBMYXlvdXRSZWN0IGxvY2FsQm91bmRzKGdhcFJlY3RzQm91bmRzKTsKICAg
ICAgICAgICAgICAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2FsQm91bmRzKTsKICAgICAg
ICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9h
dFJlY3QobG9jYWxCb3VuZHMpLCBsYXllci0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKICAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZShsYXllci0+c2Ny
b2xsZWRDb250ZW50T2Zmc2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHJldmlzaW9uIDkwNTc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2MiwxNCArNTYyLDE0IEBAIHByaXZhdGU6
CiAKICAgICAvLyBFbmQgb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcC4KIAotICAgIHZvaWQgcGFpbnRGbG9hdHMoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9p
bnQmLCBib29sIHByZXNlcnZlUGhhc2UgPSBmYWxzZSk7Ci0gICAgdm9pZCBwYWludENvbnRlbnRz
KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7Ci0gICAgdm9pZCBwYWludENvbHVtbkNvbnRl
bnRzKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgYm9vbCBwYWludEZsb2F0cyA9IGZhbHNl
KTsKLSAgICB2b2lkIHBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQm
KTsKLSAgICB2b2lkIHBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsK
LSAgICB2b2lkIHBhaW50RWxsaXBzaXNCb3hlcyhQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYp
OwotICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsK
LSAgICB2b2lkIHBhaW50Q2FyZXQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBDYXJldFR5
cGUpOworICAgIHZvaWQgcGFpbnRGbG9hdHMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQm
LCBib29sIHByZXNlcnZlUGhhc2UgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludENvbnRlbnRzKFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CisgICAgdm9pZCBwYWludENvbHVtbkNvbnRl
bnRzKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgYm9vbCBwYWludEZsb2F0cyA9IGZh
bHNlKTsKKyAgICB2b2lkIHBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50Q2hpbGRyZW4oUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50RWxsaXBzaXNCb3hlcyhQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50Q2FyZXQoUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBDYXJldFR5cGUpOwogCiAgICAgRmxvYXRpbmdPYmplY3QqIGluc2VydEZsb2F0
aW5nT2JqZWN0KFJlbmRlckJveCopOwogICAgIHZvaWQgcmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVu
ZGVyQm94Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2
aXNpb24gOTA1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgYm9vbCBSZW5kZXJCb3g6OnJlcGFp
bnRMYXllclJlY3RzRm9ySW1hZwogCiAjaWYgUExBVEZPUk0oTUFDKQogCi12b2lkIFJlbmRlckJv
eDo6cGFpbnRDdXN0b21IaWdobGlnaHQoY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYmVoaW5kVGV4dCkKK3ZvaWQgUmVuZGVyQm94Ojpw
YWludEN1c3RvbUhpZ2hsaWdodChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBiZWhpbmRUZXh0KQogewogICAgIEZyYW1lKiBmcmFt
ZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDkwNTc0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsNyArNDIwLDcgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgcGFpbnRNYXNrSW1hZ2VzKGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IExheW91dFJlY3QmKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIHBhaW50Q3VzdG9t
SGlnaGxpZ2h0KGNvbnN0IEludFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29s
IGJlaGluZFRleHQpOworICAgIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoY29uc3QgTGF5b3V0
UG9pbnQmLCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYmVoaW5kVGV4dCk7CiAjZW5k
aWYKIAogICAgIHZvaWQgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGgoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA5MDU3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzYzLDcgKzEzNjMsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5n
UmVjdHMoVmVjCiAgICAgfQogfQogCi12b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lKEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZz
ZXQpCit2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYg
KCFoYXNPdXRsaW5lKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEzODIsMTYgKzEzODIsMTYgQEAg
dm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZShHcmFwaGljcwogICAgIGlmIChzdHlsZVRv
VXNlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSB8fCBzdHlsZVRvVXNlLT5vdXRsaW5lU3R5bGUoKSA9
PSBCTk9ORSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwor
ICAgIFZlY3RvcjxMYXlvdXRSZWN0PiByZWN0czsKIAotICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0
KCkpOworICAgIHJlY3RzLmFwcGVuZChMYXlvdXRSZWN0KCkpOwogICAgIGZvciAoSW5saW5lRmxv
d0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVC
b3goKSkgewogICAgICAgICBSb290SW5saW5lQm94KiByb290ID0gY3Vyci0+cm9vdCgpOwotICAg
ICAgICBpbnQgdG9wID0gbWF4KHJvb3QtPmxpbmVUb3AoKSwgY3Vyci0+bG9naWNhbFRvcCgpKTsK
LSAgICAgICAgaW50IGJvdHRvbSA9IG1pbihyb290LT5saW5lQm90dG9tKCksIGN1cnItPmxvZ2lj
YWxCb3R0b20oKSk7Ci0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KGN1cnItPngoKSwgdG9w
LCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwgYm90dG9tIC0gdG9wKSk7CisgICAgICAgIExheW91dFVu
aXQgdG9wID0gbWF4KHJvb3QtPmxpbmVUb3AoKSwgY3Vyci0+bG9naWNhbFRvcCgpKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBib3R0b20gPSBtaW4ocm9vdC0+bGluZUJvdHRvbSgpLCBjdXJyLT5sb2dp
Y2FsQm90dG9tKCkpOworICAgICAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdChjdXJyLT54KCks
IHRvcCwgY3Vyci0+bG9naWNhbFdpZHRoKCksIGJvdHRvbSAtIHRvcCkpOwogICAgIH0KLSAgICBy
ZWN0cy5hcHBlbmQoSW50UmVjdCgpKTsKKyAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdCgpKTsK
IAogICAgIENvbG9yIG91dGxpbmVDb2xvciA9IHN0eWxlVG9Vc2UtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcik7CiAvLyBGSVhNRTogVXNpbmcgYSB0cmFuc3Bh
cmVuY3kgbGF5ZXIgZm9yIHJnYmEgb3V0bGluZXMgZXhhY2VyYmF0ZXMgYW4gZXhpc3RpbmcgU0tJ
QSBidWcuIFRoZSAjaWYKQEAgLTE0MTUsOTAgKzE0MTUsOTAgQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OnBhaW50T3V0bGluZShHcmFwaGljcwogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjpw
YWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiBsYXN0bGluZSwgY29uc3QgSW50UmVjdCYgdGhpc2xpbmUs
IGNvbnN0IEludFJlY3QmIG5leHRsaW5lLAordm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGlu
ZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IExheW91dFJlY3QmIGxhc3RsaW5lLCBjb25zdCBMYXlvdXRSZWN0JiB0aGlzbGluZSwg
Y29uc3QgTGF5b3V0UmVjdCYgbmV4dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDb2xvciBvdXRsaW5lQ29sb3IpCiB7CiAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwotICAgIGludCBvdyA9IHN0eWxlVG9Vc2UtPm91dGxpbmVX
aWR0aCgpOwotICAgIEVCb3JkZXJTdHlsZSBvcyA9IHN0eWxlVG9Vc2UtPm91dGxpbmVTdHlsZSgp
OworICAgIExheW91dFVuaXQgb3V0bGluZVdpZHRoID0gc3R5bGVUb1VzZS0+b3V0bGluZVdpZHRo
KCk7CisgICAgRUJvcmRlclN0eWxlIG91dGxpbmVTdHlsZSA9IHN0eWxlVG9Vc2UtPm91dGxpbmVT
dHlsZSgpOwogCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdXJyZW50Q1RNID0gZ3JhcGhp
Y3NDb250ZXh0LT5nZXRDVE0oKTsKICAgICBib29sIGFudGlhbGlhcyA9ICFjdXJyZW50Q1RNLmlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCk7CiAKLSAgICBpbnQgb2Zmc2V0ID0gc3R5
bGUoKS0+b3V0bGluZU9mZnNldCgpOworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gc3R5bGUoKS0+
b3V0bGluZU9mZnNldCgpOwogCi0gICAgaW50IHQgPSBwYWludE9mZnNldC55KCkgKyB0aGlzbGlu
ZS55KCkgLSBvZmZzZXQ7Ci0gICAgaW50IGwgPSBwYWludE9mZnNldC54KCkgKyB0aGlzbGluZS54
KCkgLSBvZmZzZXQ7Ci0gICAgaW50IGIgPSBwYWludE9mZnNldC55KCkgKyB0aGlzbGluZS5tYXhZ
KCkgKyBvZmZzZXQ7Ci0gICAgaW50IHIgPSBwYWludE9mZnNldC54KCkgKyB0aGlzbGluZS5tYXhY
KCkgKyBvZmZzZXQ7CisgICAgTGF5b3V0VW5pdCB0b3AgPSBwYWludE9mZnNldC55KCkgKyB0aGlz
bGluZS55KCkgLSBvZmZzZXQ7CisgICAgTGF5b3V0VW5pdCBsZWZ0ID0gcGFpbnRPZmZzZXQueCgp
ICsgdGhpc2xpbmUueCgpIC0gb2Zmc2V0OworICAgIExheW91dFVuaXQgYm90dG9tID0gcGFpbnRP
ZmZzZXQueSgpICsgdGhpc2xpbmUubWF4WSgpICsgb2Zmc2V0OworICAgIExheW91dFVuaXQgcmln
aHQgPSBwYWludE9mZnNldC54KCkgKyB0aGlzbGluZS5tYXhYKCkgKyBvZmZzZXQ7CiAgICAgCiAg
ICAgLy8gbGVmdCBlZGdlCiAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwK
LSAgICAgICAgICAgICAgIGwgLSBvdywKLSAgICAgICAgICAgICAgIHQgLSAobGFzdGxpbmUuaXNF
bXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgp
IC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAwKSwKLSAgICAgICAgICAgICAgIGwsCi0gICAg
ICAgICAgICAgICBiICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPD0gbmV4
dGxpbmUueCgpIHx8IChuZXh0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdyA6
IDApLAotICAgICAgICAgICAgICAgQlNMZWZ0LAotICAgICAgICAgICAgICAgb3V0bGluZUNvbG9y
LCBvcywKLSAgICAgICAgICAgICAgIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgp
IDwgbGFzdGxpbmUueCgpIHx8IChsYXN0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkg
PyBvdyA6IC1vdyksCi0gICAgICAgICAgICAgICAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNs
aW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwgKG5leHRsaW5lLm1heFgoKSAtIDEpIDw9IHRoaXNs
aW5lLngoKSA/IG93IDogLW93KSwKLSAgICAgICAgICAgICAgIGFudGlhbGlhcyk7CisgICAgICAg
IGxlZnQgLSBvdXRsaW5lV2lkdGgsCisgICAgICAgIHRvcCAtIChsYXN0bGluZS5pc0VtcHR5KCkg
fHwgdGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0bGluZS5tYXhYKCkgLSAxKSA8
PSB0aGlzbGluZS54KCkgPyBvdXRsaW5lV2lkdGggOiAwKSwKKyAgICAgICAgbGVmdCwKKyAgICAg
ICAgYm90dG9tICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPD0gbmV4dGxp
bmUueCgpIHx8IChuZXh0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdXRsaW5l
V2lkdGggOiAwKSwKKyAgICAgICAgQlNMZWZ0LAorICAgICAgICBvdXRsaW5lQ29sb3IsIG91dGxp
bmVTdHlsZSwKKyAgICAgICAgKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPCBs
YXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLm1heFgoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG91
dGxpbmVXaWR0aCA6IC1vdXRsaW5lV2lkdGgpLAorICAgICAgICAobmV4dGxpbmUuaXNFbXB0eSgp
IHx8IHRoaXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwgKG5leHRsaW5lLm1heFgoKSAtIDEp
IDw9IHRoaXNsaW5lLngoKSA/IG91dGxpbmVXaWR0aCA6IC1vdXRsaW5lV2lkdGgpLAorICAgICAg
ICBhbnRpYWxpYXMpOwogICAgIAogICAgIC8vIHJpZ2h0IGVkZ2UKICAgICBkcmF3TGluZUZvckJv
eFNpZGUoZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICAgICAgICAgciwKLSAgICAgICAgICAgICAg
IHQgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1h
eFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cgOiAwKSwK
LSAgICAgICAgICAgICAgIHIgKyBvdywKLSAgICAgICAgICAgICAgIGIgKyAobmV4dGxpbmUuaXNF
bXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0aGlzbGluZS5tYXhYKCkgfHwgKHRoaXNsaW5l
Lm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDogMCksCi0gICAgICAgICAgICAgICBC
U1JpZ2h0LAotICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yLCBvcywKLSAgICAgICAgICAgICAg
IChsYXN0bGluZS5pc0VtcHR5KCkgfHwgbGFzdGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4WCgp
IHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6IC1vdyksCi0g
ICAgICAgICAgICAgICAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0
aGlzbGluZS5tYXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/
IG93IDogLW93KSwKLSAgICAgICAgICAgICAgIGFudGlhbGlhcyk7CisgICAgICAgIHJpZ2h0LAor
ICAgICAgICB0b3AgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLm1heFgoKSA8IHRo
aXNsaW5lLm1heFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8g
b3V0bGluZVdpZHRoIDogMCksCisgICAgICAgIHJpZ2h0ICsgb3V0bGluZVdpZHRoLAorICAgICAg
ICBib3R0b20gKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0aGlz
bGluZS5tYXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG91
dGxpbmVXaWR0aCA6IDApLAorICAgICAgICBCU1JpZ2h0LAorICAgICAgICBvdXRsaW5lQ29sb3Is
IG91dGxpbmVTdHlsZSwKKyAgICAgICAgKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCBsYXN0bGluZS5t
YXhYKCkgPCB0aGlzbGluZS5tYXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IGxhc3Rs
aW5lLngoKSA/IG91dGxpbmVXaWR0aCA6IC1vdXRsaW5lV2lkdGgpLAorICAgICAgICAobmV4dGxp
bmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0aGlzbGluZS5tYXhYKCkgfHwgKHRo
aXNsaW5lLm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG91dGxpbmVXaWR0aCA6IC1vdXRs
aW5lV2lkdGgpLAorICAgICAgICBhbnRpYWxpYXMpOwogICAgIC8vIHVwcGVyIGVkZ2UKICAgICBp
ZiAodGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNp
ZGUoZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICAgICAgICAgICAgIGwgLSBvdywKLSAgICAgICAg
ICAgICAgICAgICB0IC0gb3csCi0gICAgICAgICAgICAgICAgICAgbWluKHIrb3csIChsYXN0bGlu
ZS5pc0VtcHR5KCkgPyAxMDAwMDAwIDogcGFpbnRPZmZzZXQueCgpICsgbGFzdGxpbmUueCgpKSks
Ci0gICAgICAgICAgICAgICAgICAgdCwKLSAgICAgICAgICAgICAgICAgICBCU1RvcCwgb3V0bGlu
ZUNvbG9yLCBvcywKLSAgICAgICAgICAgICAgICAgICBvdywKLSAgICAgICAgICAgICAgICAgICAo
IWxhc3RsaW5lLmlzRW1wdHkoKSAmJiBwYWludE9mZnNldC54KCkgKyBsYXN0bGluZS54KCkgKyAx
IDwgciArIG93KSA/IC1vdyA6IG93LAotICAgICAgICAgICAgICAgICAgIGFudGlhbGlhcyk7Cisg
ICAgICAgICAgICBsZWZ0IC0gb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgdG9wIC0gb3V0bGlu
ZVdpZHRoLAorICAgICAgICAgICAgbWluKHJpZ2h0ICsgb3V0bGluZVdpZHRoLCAobGFzdGxpbmUu
aXNFbXB0eSgpID8gMTAwMDAwMCA6IHBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLngoKSkpLAor
ICAgICAgICAgICAgdG9wLAorICAgICAgICAgICAgQlNUb3AsIG91dGxpbmVDb2xvciwgb3V0bGlu
ZVN0eWxlLAorICAgICAgICAgICAgb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgKCFsYXN0bGlu
ZS5pc0VtcHR5KCkgJiYgcGFpbnRPZmZzZXQueCgpICsgbGFzdGxpbmUueCgpICsgMSA8IHJpZ2h0
ICsgb3V0bGluZVdpZHRoKSA/IC1vdXRsaW5lV2lkdGggOiBvdXRsaW5lV2lkdGgsCisgICAgICAg
ICAgICBhbnRpYWxpYXMpOwogICAgIAogICAgIGlmIChsYXN0bGluZS5tYXhYKCkgPCB0aGlzbGlu
ZS5tYXhYKCkpCiAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsCi0g
ICAgICAgICAgICAgICAgICAgbWF4KGxhc3RsaW5lLmlzRW1wdHkoKSA/IC0xMDAwMDAwIDogcGFp
bnRPZmZzZXQueCgpICsgbGFzdGxpbmUubWF4WCgpLCBsIC0gb3cpLAotICAgICAgICAgICAgICAg
ICAgIHQgLSBvdywKLSAgICAgICAgICAgICAgICAgICByICsgb3csCi0gICAgICAgICAgICAgICAg
ICAgdCwKLSAgICAgICAgICAgICAgICAgICBCU1RvcCwgb3V0bGluZUNvbG9yLCBvcywKLSAgICAg
ICAgICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1wdHkoKSAmJiBsIC0gb3cgPCBwYWludE9mZnNl
dC54KCkgKyBsYXN0bGluZS5tYXhYKCkpID8gLW93IDogb3csCi0gICAgICAgICAgICAgICAgICAg
b3csIGFudGlhbGlhcyk7CisgICAgICAgICAgICBtYXgobGFzdGxpbmUuaXNFbXB0eSgpID8gLTEw
MDAwMDAgOiBwYWludE9mZnNldC54KCkgKyBsYXN0bGluZS5tYXhYKCksIGxlZnQgLSBvdXRsaW5l
V2lkdGgpLAorICAgICAgICAgICAgdG9wIC0gb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgcmln
aHQgKyBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICB0b3AsCisgICAgICAgICAgICBCU1RvcCwg
b3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsCisgICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1w
dHkoKSAmJiBsZWZ0IC0gb3V0bGluZVdpZHRoIDwgcGFpbnRPZmZzZXQueCgpICsgbGFzdGxpbmUu
bWF4WCgpKSA/IC1vdXRsaW5lV2lkdGggOiBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICBvdXRs
aW5lV2lkdGgsIGFudGlhbGlhcyk7CiAgICAgCiAgICAgLy8gbG93ZXIgZWRnZQogICAgIGlmICh0
aGlzbGluZS54KCkgPCBuZXh0bGluZS54KCkpCiAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShn
cmFwaGljc0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgbCAtIG93LAotICAgICAgICAgICAg
ICAgICAgIGIsCi0gICAgICAgICAgICAgICAgICAgbWluKHIgKyBvdywgIW5leHRsaW5lLmlzRW1w
dHkoKSA/IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLngoKSArIDEgOiAxMDAwMDAwKSwKLSAg
ICAgICAgICAgICAgICAgICBiICsgb3csCi0gICAgICAgICAgICAgICAgICAgQlNCb3R0b20sIG91
dGxpbmVDb2xvciwgb3MsCi0gICAgICAgICAgICAgICAgICAgb3csCi0gICAgICAgICAgICAgICAg
ICAgKCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgcGFpbnRPZmZzZXQueCgpICsgbmV4dGxpbmUueCgp
ICsgMSA8IHIgKyBvdykgPyAtb3cgOiBvdywKLSAgICAgICAgICAgICAgICAgICBhbnRpYWxpYXMp
OworICAgICAgICAgICAgbGVmdCAtIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIGJvdHRvbSwK
KyAgICAgICAgICAgIG1pbihyaWdodCArIG91dGxpbmVXaWR0aCwgIW5leHRsaW5lLmlzRW1wdHko
KSA/IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLngoKSArIDEgOiAxMDAwMDAwKSwKKyAgICAg
ICAgICAgIGJvdHRvbSArIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIEJTQm90dG9tLCBvdXRs
aW5lQ29sb3IsIG91dGxpbmVTdHlsZSwKKyAgICAgICAgICAgIG91dGxpbmVXaWR0aCwKKyAgICAg
ICAgICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYmIHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5l
LngoKSArIDEgPCByaWdodCArIG91dGxpbmVXaWR0aCkgPyAtb3V0bGluZVdpZHRoIDogb3V0bGlu
ZVdpZHRoLAorICAgICAgICAgICAgYW50aWFsaWFzKTsKICAgICAKICAgICBpZiAobmV4dGxpbmUu
bWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3Jh
cGhpY3NDb250ZXh0LAotICAgICAgICAgICAgICAgICAgIG1heCghbmV4dGxpbmUuaXNFbXB0eSgp
ID8gcGFpbnRPZmZzZXQueCgpICsgbmV4dGxpbmUubWF4WCgpIDogLTEwMDAwMDAsIGwgLSBvdyks
Ci0gICAgICAgICAgICAgICAgICAgYiwKLSAgICAgICAgICAgICAgICAgICByICsgb3csCi0gICAg
ICAgICAgICAgICAgICAgYiArIG93LAotICAgICAgICAgICAgICAgICAgIEJTQm90dG9tLCBvdXRs
aW5lQ29sb3IsIG9zLAotICAgICAgICAgICAgICAgICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYm
IGwgLSBvdyA8IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLm1heFgoKSkgPyAtb3cgOiBvdywK
LSAgICAgICAgICAgICAgICAgICBvdywgYW50aWFsaWFzKTsKKyAgICAgICAgICAgIG1heCghbmV4
dGxpbmUuaXNFbXB0eSgpID8gcGFpbnRPZmZzZXQueCgpICsgbmV4dGxpbmUubWF4WCgpIDogLTEw
MDAwMDAsIGxlZnQgLSBvdXRsaW5lV2lkdGgpLAorICAgICAgICAgICAgYm90dG9tLAorICAgICAg
ICAgICAgcmlnaHQgKyBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICBib3R0b20gKyBvdXRsaW5l
V2lkdGgsCisgICAgICAgICAgICBCU0JvdHRvbSwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUs
CisgICAgICAgICAgICAoIW5leHRsaW5lLmlzRW1wdHkoKSAmJiBsZWZ0IC0gb3V0bGluZVdpZHRo
IDwgcGFpbnRPZmZzZXQueCgpICsgbmV4dGxpbmUubWF4WCgpKSA/IC1vdXRsaW5lV2lkdGggOiBv
dXRsaW5lV2lkdGgsCisgICAgICAgICAgICBvdXRsaW5lV2lkdGgsIGFudGlhbGlhcyk7CiB9CiAK
ICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiA5MDU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBw
dWJsaWM6CiAgICAgTGF5b3V0U2l6ZSByZWxhdGl2ZVBvc2l0aW9uZWRJbmxpbmVPZmZzZXQoY29u
c3QgUmVuZGVyQm94KiBjaGlsZCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNS
aW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICB2b2lkIHBh
aW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYpOworICAgIHZvaWQg
cGFpbnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50Jik7CiAKICAg
ICB1c2luZyBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29udGludWF0aW9uOwogICAgIHVzaW5nIFJl
bmRlckJveE1vZGVsT2JqZWN0OjpzZXRDb250aW51YXRpb247CkBAIC0xNjIsOCArMTYyLDggQEAg
cHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgUmVuZGVySW5saW5lKiBjbG9uZUlubGluZShSZW5k
ZXJJbmxpbmUqIHNyYyk7CiAKLSAgICB2b2lkIHBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBwcmV2TGluZSwgY29uc3Qg
SW50UmVjdCYgdGhpc0xpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFJlY3QmIG5leHRMaW5lLCBjb25zdCBDb2xvcik7CisgICAgdm9pZCBwYWludE91dGxpbmVGb3JM
aW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVj
dCYgcHJldkxpbmUsIGNvbnN0IExheW91dFJlY3QmIHRoaXNMaW5lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBuZXh0TGluZSwgY29uc3QgQ29sb3IpOwog
ICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250aW51YXRpb25CZWZvcmUoUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCk7CiAKICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
OTA1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjc5LDcgKzIyNzksNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMCiAgICAgICAgIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGhvcml6b250YWxP
dmVyZmxvdywgdmVydGljYWxPdmVyZmxvdyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50
JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092
ZXJsYXlDb250cm9scykKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykK
IHsKICAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgogICAg
IGlmICghcmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkpCkBAIC0yMzAzLDcgKzIzMDMsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoCiAgICAgaWYgKHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7
CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwogICAg
IGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKICAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKIApAQCAtMjMzOSwxMiArMjMzOSwx
MiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoCiAgICAgcGFpbnRS
ZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwogfQogCi12
b2lkIFJlbmRlckxheWVyOjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0
JiBkYW1hZ2VSZWN0KQogewogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAg
QVNTRVJUKGJveCk7CiAKLSAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7
CisgICAgTGF5b3V0UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwogICAgIGFic1Jl
Y3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKICAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1h
Z2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM2NSw3ICsyMzY1LDcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcAogICAgICAgICBjb250ZXh0LT5maWxsUmVj
dChhYnNSZWN0LCBDb2xvcjo6d2hpdGUsIGJveC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpKTsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KQordm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0KQogewogICAgIGlmIChyZW5kZXJlcigpLT5zdHlsZSgpLT5yZXNpemUoKSA9PSBSRVNJ
WkVfTk9ORSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM3Myw3ICsyMzczLDcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQwogICAgIFJlbmRlckJveCogYm94ID0gcmVu
ZGVyQm94KCk7CiAgICAgQVNTRVJUKGJveCk7CiAKLSAgICBJbnRSZWN0IGFic1JlY3QgPSByZXNp
emVyQ29ybmVyUmVjdCh0aGlzLCBib3gtPmJvcmRlckJveFJlY3QoKSk7CisgICAgTGF5b3V0UmVj
dCBhYnNSZWN0ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYm94LT5ib3JkZXJCb3hSZWN0KCkp
OwogICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKICAgICBpZiAoIWFic1JlY3QuaW50
ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM5MCw3ICsyMzkwLDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQwogCiAgICAgLy8gUGFp
bnQgdGhlIHJlc2l6ZXIgY29udHJvbC4KICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJ
bWFnZT4sIHJlc2l6ZUNvcm5lckltYWdlLCAoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0
ZXh0QXJlYVJlc2l6ZUNvcm5lciIpKSk7Ci0gICAgSW50UG9pbnQgaW1hZ2VQb2ludChhYnNSZWN0
Lm1heFgoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0aCgpLCBhYnNSZWN0Lm1heFkoKSAtIHJl
c2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7CisgICAgTGF5b3V0UG9pbnQgaW1hZ2VQb2ludChh
YnNSZWN0Lm1heFgoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0aCgpLCBhYnNSZWN0Lm1heFko
KSAtIHJlc2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7CiAgICAgY29udGV4dC0+ZHJhd0ltYWdl
KHJlc2l6ZUNvcm5lckltYWdlLmdldCgpLCBib3gtPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgaW1h
Z2VQb2ludCk7CiAKICAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHgg
Z3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KQEAgLTIzOTgs
OCArMjM5OCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0MKICAg
ICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7CiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAg
ICAgICAgIGNvbnRleHQtPmNsaXAoYWJzUmVjdCk7Ci0gICAgICAgIEludFJlY3QgbGFyZ2VyQ29y
bmVyID0gYWJzUmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoSW50U2l6ZShsYXJn
ZXJDb3JuZXIud2lkdGgoKSArIDEsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDEpKTsKKyAgICAg
ICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSBhYnNSZWN0OworICAgICAgICBsYXJnZXJDb3Ju
ZXIuc2V0U2l6ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMSwgbGFyZ2VyQ29y
bmVyLmhlaWdodCgpICsgMSkpOwogICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xv
cihtYWtlUkdCKDIxNywgMjE3LCAyMTcpKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAg
IGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICAgICAgY29udGV4dC0+c2V0
RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCwgQ29sb3JTcGFjZURldmljZVJHQik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gOTA1NzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjY5LDkgKzI2OSw5IEBAIHB1YmxpYzoKICAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRy
b2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CiAgICAgTGF5
b3V0U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IExheW91dFBvaW50JiBhYnNvbHV0
ZVBvaW50KSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9v
bCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50U2Nyb2xs
Q29ybmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50
T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRQb2ludCYsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMg
PSBmYWxzZSk7CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZv
aWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7CiAKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJveExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDkwNTc0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDcgKzIw
MCw3IEBAIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OmxpbmVJbnRlcnNlY3RzRGkKICAgICByZXR1
cm4gcmFuZ2VJbnRlcnNlY3RzUmVjdChyZW5kZXJlciwgbG9naWNhbFRvcCwgbG9naWNhbEJvdHRv
bSwgcGFpbnRJbmZvLnJlY3QsIG9mZnNldCk7CiB9CiAKLXZvaWQgUmVuZGVyTGluZUJveExpc3Q6
OnBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkgY29uc3QKK3ZvaWQgUmVuZGVyTGluZUJv
eExpc3Q6OnBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkgY29uc3QKIHsKICAgICAv
LyBPbmx5IHBhaW50IGR1cmluZyB0aGUgZm9yZWdyb3VuZC9zZWxlY3Rpb24gcGhhc2VzLgogICAg
IGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50
UGhhc2VPdXRsaW5lIApAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6
OnBhaW50KFJlbmRlckJveE0KICAgICAvLyBOU1ZpZXdzLiAgRG8gbm90IGFkZCBhbnkgbW9yZSBj
b2RlIGZvciB0aGlzLgogICAgIFJlbmRlclZpZXcqIHYgPSByZW5kZXJlci0+dmlldygpOwogICAg
IGJvb2wgdXNlUHJpbnRSZWN0ID0gIXYtPnByaW50UmVjdCgpLmlzRW1wdHkoKTsKLSAgICBpbnQg
b3V0bGluZVNpemUgPSByZW5kZXJlci0+bWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFz
ZSk7CisgICAgTGF5b3V0VW5pdCBvdXRsaW5lU2l6ZSA9IHJlbmRlcmVyLT5tYXhpbWFsT3V0bGlu
ZVNpemUocGFpbnRJbmZvLnBoYXNlKTsKICAgICBpZiAoIWFueUxpbmVJbnRlcnNlY3RzUmVjdChy
ZW5kZXJlciwgcGFpbnRJbmZvLnJlY3QsIHBhaW50T2Zmc2V0LCB1c2VQcmludFJlY3QsIG91dGxp
bmVTaXplKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzUsOCArMjM1LDggQEAgdm9pZCBSZW5k
ZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgICAgICAgICAgLy8gZm9yIGVtYmVk
ZGVkIHZpZXdzIGluc2lkZSBBcHBLaXQuICBBcHBLaXQgaXMgaW5jYXBhYmxlIG9mIHBhZ2luYXRp
bmcgdmVydGljYWwKICAgICAgICAgICAgIC8vIHRleHQgcGFnZXMsIHNvIHdlIGRvbid0IGhhdmUg
dG8gZGVhbCB3aXRoIHZlcnRpY2FsIGxpbmVzIGF0IGFsbCBoZXJlLgogICAgICAgICAgICAgUm9v
dElubGluZUJveCogcm9vdCA9IGN1cnItPnJvb3QoKTsKLSAgICAgICAgICAgIGludCB0b3BGb3JQ
YWdpbmF0aW9uQ2hlY2sgPSBjdXJyLT5sb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cocm9vdC0+bGlu
ZVRvcCgpKTsKLSAgICAgICAgICAgIGludCBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPSBjdXJy
LT5sb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IHRv
cEZvclBhZ2luYXRpb25DaGVjayA9IGN1cnItPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyhyb290
LT5saW5lVG9wKCkpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21Gb3JQYWdpbmF0aW9u
Q2hlY2sgPSBjdXJyLT5sb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7CiAgICAgICAgICAgICBp
ZiAoIWN1cnItPnBhcmVudCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UncmUgYSByb290IGJv
eC4gIFVzZSBsaW5lVG9wIGFuZCBsaW5lQm90dG9tIGFzIHdlbGwgaGVyZS4KICAgICAgICAgICAg
ICAgICB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPSBtaW4odG9wRm9yUGFnaW5hdGlvbkNoZWNrLCBy
b290LT5saW5lVG9wKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAkocmV2aXNpb24gOTA1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMCwxMyArMzMwLDEzIEBAIHZv
aWQgUmVuZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmUKICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyTGlzdEJveDo6cGFpbnRTY3JvbGxiYXIoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRTY3JvbGxi
YXIoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkK
IHsKICAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsUmVjdChwYWludE9m
ZnNldC54KCkgKyB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lkdGgoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50T2Zmc2V0LnkoKSArIGJvcmRlclRvcCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAoYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkp
OworICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbFJlY3QocGFpbnRPZmZzZXQueCgpICsgd2lkdGgo
KSAtIGJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCisgICAgICAgICAgICBwYWludE9m
ZnNldC55KCkgKyBib3JkZXJUb3AoKSwKKyAgICAgICAgICAgIG1fdkJhci0+d2lkdGgoKSwKKyAg
ICAgICAgICAgIGhlaWdodCgpIC0gKGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkpKTsKICAg
ICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsUmVjdCk7CiAgICAgICAgIG1fdkJhci0+
cGFpbnQocGFpbnRJbmZvLmNvbnRleHQsIHBhaW50SW5mby5yZWN0KTsKICAgICB9CkBAIC0zNjEs
NyArMzYxLDcgQEAgc3RhdGljIEludFNpemUgaXRlbU9mZnNldEZvckFsaWdubWVudChUZQogICAg
IHJldHVybiBvZmZzZXQ7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdy
b3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBp
bnQgbGlzdEluZGV4KQordm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGludCBs
aXN0SW5kZXgpCiB7CiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQ
cmV2ZW50ZXI7CiAKQEAgLTM5OSw3ICszOTksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50
SXRlbUZvcmVncm91bmQoCiAgICAgY29uc3QgVUNoYXIqIHN0cmluZyA9IGl0ZW1UZXh0LmNoYXJh
Y3RlcnMoKTsKICAgICBUZXh0UnVuIHRleHRSdW4oc3RyaW5nLCBsZW5ndGgsIGZhbHNlLCAwLCAw
LCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBpdGVtU3R5bGUtPmRpcmVjdGlvbigp
LCBpdGVtU3R5bGUtPnVuaWNvZGVCaWRpKCkgPT0gT3ZlcnJpZGUsIFRleHRSdW46Ok5vUm91bmRp
bmcpOwogICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgSW50UmVjdCBy
ID0gaXRlbUJvdW5kaW5nQm94UmVjdChwYWludE9mZnNldCwgbGlzdEluZGV4KTsKKyAgICBMYXlv
dXRSZWN0IHIgPSBpdGVtQm91bmRpbmdCb3hSZWN0KHBhaW50T2Zmc2V0LCBsaXN0SW5kZXgpOwog
ICAgIHIubW92ZShpdGVtT2Zmc2V0Rm9yQWxpZ25tZW50KHRleHRSdW4sIGl0ZW1TdHlsZSwgaXRl
bUZvbnQsIHIpKTsKIAogICAgIGlmIChpc09wdGlvbkdyb3VwRWxlbWVudChlbGVtZW50KSkgewpA
QCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZCgKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdCaWRpVGV4dChpdGVtRm9udCwgdGV4
dFJ1biwgci5sb2NhdGlvbigpKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1C
YWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZz
ZXQsIGludCBsaXN0SW5kZXgpCit2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUJhY2tncm91
bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
aW50IGxpc3RJbmRleCkKIHsKICAgICBTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSB0b1NlbGVjdEVs
ZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwogICAgIGNvbnN0IFZlY3RvcjxF
bGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CkBAIC00MzMsNyArNDMz
LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKAogICAgIC8vIERy
YXcgdGhlIGJhY2tncm91bmQgZm9yIHRoaXMgbGlzdCBib3ggaXRlbQogICAgIGlmICghZWxlbWVu
dC0+cmVuZGVyU3R5bGUoKSB8fCBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT52aXNpYmlsaXR5KCkg
IT0gSElEREVOKSB7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IGVsZW1lbnQtPnJl
bmRlclN0eWxlKCkgPyBlbGVtZW50LT5yZW5kZXJTdHlsZSgpLT5jb2xvclNwYWNlKCkgOiBzdHls
ZSgpLT5jb2xvclNwYWNlKCk7Ci0gICAgICAgIEludFJlY3QgaXRlbVJlY3QgPSBpdGVtQm91bmRp
bmdCb3hSZWN0KHBhaW50T2Zmc2V0LCBsaXN0SW5kZXgpOworICAgICAgICBMYXlvdXRSZWN0IGl0
ZW1SZWN0ID0gaXRlbUJvdW5kaW5nQm94UmVjdChwYWludE9mZnNldCwgbGlzdEluZGV4KTsKICAg
ICAgICAgaXRlbVJlY3QuaW50ZXJzZWN0KGNvbnRyb2xDbGlwUmVjdChwYWludE9mZnNldCkpOwog
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJlY3QoaXRlbVJlY3QsIGJhY2tDb2xvciwg
Y29sb3JTcGFjZSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5oCShyZXZpc2lvbiA5MDU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw5ICsxMzUsOSBAQCBwcml2YXRl
OgogICAgIGludCBudW1WaXNpYmxlSXRlbXMoKSBjb25zdDsKICAgICBpbnQgbnVtSXRlbXMoKSBj
b25zdDsKICAgICBpbnQgbGlzdEhlaWdodCgpIGNvbnN0OwotICAgIHZvaWQgcGFpbnRTY3JvbGxi
YXIoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50SXRlbUZvcmVn
cm91bmQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGlzdEluZGV4KTsKLSAgICB2
b2lkIHBhaW50SXRlbUJhY2tncm91bmQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQg
bGlzdEluZGV4KTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsYmFyKFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50Jik7CisgICAgdm9pZCBwYWludEl0ZW1Gb3JlZ3JvdW5kKFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50JiwgaW50IGxpc3RJbmRleCk7CisgICAgdm9pZCBwYWludEl0ZW1CYWNr
Z3JvdW5kKFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgaW50IGxpc3RJbmRleCk7CiAg
ICAgdm9pZCBzY3JvbGxUb1JldmVhbFNlbGVjdGlvbigpOwogCiAgICAgYm9vbCBtX29wdGlvbnND
aGFuZ2VkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHJldmlzaW9uIDkwNTc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDUsOSArMTAwNSw5IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpkcmF3QXJjRm9yQm94U2lkZShHcmEKIH0KICNlbmRpZgogICAgIAotdm9pZCBSZW5kZXJP
YmplY3Q6OnBhaW50Rm9jdXNSaW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIFJlbmRlck9iamVj
dDo6cGFpbnRGb2N1c1JpbmcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICBWZWN0b3I8SW50
UmVjdD4gZm9jdXNSaW5nUmVjdHM7CisgICAgVmVjdG9yPExheW91dFJlY3Q+IGZvY3VzUmluZ1Jl
Y3RzOwogICAgIGFkZEZvY3VzUmluZ1JlY3RzKGZvY3VzUmluZ1JlY3RzLCBwYWludE9mZnNldCk7
CiAgICAgaWYgKHN0eWxlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSkKICAgICAgICAgY29udGV4dC0+
ZHJhd0ZvY3VzUmluZyhmb2N1c1JpbmdSZWN0cywgc3R5bGUtPm91dGxpbmVXaWR0aCgpLCBzdHls
ZS0+b3V0bGluZU9mZnNldCgpLCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5T3V0bGluZUNvbG9yKSk7CkBAIC0xMDI4LDE4ICsxMDI4LDE4IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjphZGRQREZVUkxSZWN0KEdyYXBoaWMKICAgICBjb250ZXh0LT5zZXRVUkxGb3JSZWN0KG4t
PmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGhyZWYpLCByZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJP
YmplY3Q6OnBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgSW50UmVjdCYgcGFpbnRSZWN0KQordm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRS
ZWN0KQogewogICAgIGlmICghaGFzT3V0bGluZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBS
ZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHN0eWxlKCk7Ci0gICAgaW50IG91dGxpbmVXaWR0aCA9
IHN0eWxlVG9Vc2UtPm91dGxpbmVXaWR0aCgpOworICAgIExheW91dFVuaXQgb3V0bGluZVdpZHRo
ID0gc3R5bGVUb1VzZS0+b3V0bGluZVdpZHRoKCk7CiAgICAgRUJvcmRlclN0eWxlIG91dGxpbmVT
dHlsZSA9IHN0eWxlVG9Vc2UtPm91dGxpbmVTdHlsZSgpOwogCiAgICAgQ29sb3Igb3V0bGluZUNv
bG9yID0gc3R5bGVUb1VzZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5T3V0bGlu
ZUNvbG9yKTsKIAotICAgIGludCBvZmZzZXQgPSBzdHlsZVRvVXNlLT5vdXRsaW5lT2Zmc2V0KCk7
CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBzdHlsZVRvVXNlLT5vdXRsaW5lT2Zmc2V0KCk7CiAK
ICAgICBpZiAoc3R5bGVUb1VzZS0+b3V0bGluZVN0eWxlSXNBdXRvKCkgfHwgaGFzT3V0bGluZUFu
bm90YXRpb24oKSkgewogICAgICAgICBpZiAoIXRoZW1lKCktPnN1cHBvcnRzRm9jdXNSaW5nKHN0
eWxlVG9Vc2UpKSB7CkBAIC0xMDUxLDcgKzEwNTEsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFp
bnRPdXRsaW5lKEdyYXBoaWNzCiAgICAgaWYgKHN0eWxlVG9Vc2UtPm91dGxpbmVTdHlsZUlzQXV0
bygpIHx8IHN0eWxlVG9Vc2UtPm91dGxpbmVTdHlsZSgpID09IEJOT05FKQogICAgICAgICByZXR1
cm47CiAKLSAgICBJbnRSZWN0IGFkanVzdGVkUGFpbnRSZWMgPSBwYWludFJlY3Q7CisgICAgTGF5
b3V0UmVjdCBhZGp1c3RlZFBhaW50UmVjID0gcGFpbnRSZWN0OwogICAgIGFkanVzdGVkUGFpbnRS
ZWMuaW5mbGF0ZShvZmZzZXQpOwogCiAgICAgaWYgKGFkanVzdGVkUGFpbnRSZWMuaXNFbXB0eSgp
KQpAQCAtMTA2NywxNCArMTA2NywxNCBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5l
KEdyYXBoaWNzCiAgICAgfQogI2VuZGlmCiAKLSAgICBpbnQgbGVmdE91dGVyID0gYWRqdXN0ZWRQ
YWludFJlYy54KCkgLSBvdXRsaW5lV2lkdGg7Ci0gICAgaW50IGxlZnRJbm5lciA9IGFkanVzdGVk
UGFpbnRSZWMueCgpOwotICAgIGludCByaWdodE91dGVyID0gYWRqdXN0ZWRQYWludFJlYy5tYXhY
KCkgKyBvdXRsaW5lV2lkdGg7Ci0gICAgaW50IHJpZ2h0SW5uZXIgPSBhZGp1c3RlZFBhaW50UmVj
Lm1heFgoKTsKLSAgICBpbnQgdG9wT3V0ZXIgPSBhZGp1c3RlZFBhaW50UmVjLnkoKSAtIG91dGxp
bmVXaWR0aDsKLSAgICBpbnQgdG9wSW5uZXIgPSBhZGp1c3RlZFBhaW50UmVjLnkoKTsKLSAgICBp
bnQgYm90dG9tT3V0ZXIgPSBhZGp1c3RlZFBhaW50UmVjLm1heFkoKSArIG91dGxpbmVXaWR0aDsK
LSAgICBpbnQgYm90dG9tSW5uZXIgPSBhZGp1c3RlZFBhaW50UmVjLm1heFkoKTsKKyAgICBMYXlv
dXRVbml0IGxlZnRPdXRlciA9IGFkanVzdGVkUGFpbnRSZWMueCgpIC0gb3V0bGluZVdpZHRoOwor
ICAgIExheW91dFVuaXQgbGVmdElubmVyID0gYWRqdXN0ZWRQYWludFJlYy54KCk7CisgICAgTGF5
b3V0VW5pdCByaWdodE91dGVyID0gYWRqdXN0ZWRQYWludFJlYy5tYXhYKCkgKyBvdXRsaW5lV2lk
dGg7CisgICAgTGF5b3V0VW5pdCByaWdodElubmVyID0gYWRqdXN0ZWRQYWludFJlYy5tYXhYKCk7
CisgICAgTGF5b3V0VW5pdCB0b3BPdXRlciA9IGFkanVzdGVkUGFpbnRSZWMueSgpIC0gb3V0bGlu
ZVdpZHRoOworICAgIExheW91dFVuaXQgdG9wSW5uZXIgPSBhZGp1c3RlZFBhaW50UmVjLnkoKTsK
KyAgICBMYXlvdXRVbml0IGJvdHRvbU91dGVyID0gYWRqdXN0ZWRQYWludFJlYy5tYXhZKCkgKyBv
dXRsaW5lV2lkdGg7CisgICAgTGF5b3V0VW5pdCBib3R0b21Jbm5lciA9IGFkanVzdGVkUGFpbnRS
ZWMubWF4WSgpOwogICAgIAogICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQs
IGxlZnRPdXRlciwgdG9wT3V0ZXIsIGxlZnRJbm5lciwgYm90dG9tT3V0ZXIsIEJTTGVmdCwgb3V0
bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsIG91dGxpbmVXaWR0aCwgb3V0bGluZVdpZHRoKTsKICAg
ICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBsZWZ0T3V0ZXIsIHRvcE91dGVy
LCByaWdodE91dGVyLCB0b3BJbm5lciwgQlNUb3AsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxl
LCBvdXRsaW5lV2lkdGgsIG91dGxpbmVXaWR0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA5MDU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzkzLDggKzc5Myw4IEBA
IHByb3RlY3RlZDoKICAgICB2b2lkIGRyYXdMaW5lRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQq
LCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIsIEJveFNpZGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29sb3IsIEVCb3JkZXJTdHlsZSwgaW50IGFkamJ3MSwgaW50IGFkamJ3
MiwgYm9vbCBhbnRpYWxpYXMgPSBmYWxzZSk7CiAKLSAgICB2b2lkIHBhaW50Rm9jdXNSaW5nKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2b2lk
IHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9p
ZCBwYWludEZvY3VzUmluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRQb2ludCYsIFJl
bmRlclN0eWxlKik7CisgICAgdm9pZCBwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQgYWRkUERGVVJMUmVjdChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICB2aXJ0dWFsIEludFJlY3Qgdmlld1JlY3QoKSBjb25z
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAko
cmV2aXNpb24gOTA1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBSZW5kZXJSZXBs
YWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYQogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJSZXBsYWNl
ZDo6c2hvdWxkUGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCkKK2Jvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZU91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0
bGluZSAKICAgICAgICAgICAgICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0
aW9uICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlTWFzaykKQEAgLTE3NiwxOSArMTc2
LDE5IEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW4KICAgICBpZiAo
c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0
aW9uKCk7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0
ICsgbG9jYXRpb24oKTsKIAogICAgIC8vIEVhcmx5IGV4aXQgaWYgdGhlIGVsZW1lbnQgdG91Y2hl
cyB0aGUgZWRnZXMuCi0gICAgaW50IHRvcCA9IGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgbWlu
WVZpc3VhbE92ZXJmbG93KCk7Ci0gICAgaW50IGJvdHRvbSA9IGFkanVzdGVkUGFpbnRPZmZzZXQu
eSgpICsgbWF4WVZpc3VhbE92ZXJmbG93KCk7CisgICAgTGF5b3V0VW5pdCB0b3AgPSBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LnkoKSArIG1pbllWaXN1YWxPdmVyZmxvdygpOworICAgIExheW91dFVuaXQg
Ym90dG9tID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBtYXhZVmlzdWFsT3ZlcmZsb3coKTsK
ICAgICBpZiAoaXNTZWxlY3RlZCgpICYmIG1faW5saW5lQm94V3JhcHBlcikgewotICAgICAgICBp
bnQgc2VsVG9wID0gcGFpbnRPZmZzZXQueSgpICsgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkt
PnNlbGVjdGlvblRvcCgpOwotICAgICAgICBpbnQgc2VsQm90dG9tID0gcGFpbnRPZmZzZXQueSgp
ICsgc2VsVG9wICsgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCktPnNlbGVjdGlvbkhlaWdodCgp
OworICAgICAgICBMYXlvdXRVbml0IHNlbFRvcCA9IHBhaW50T2Zmc2V0LnkoKSArIG1faW5saW5l
Qm94V3JhcHBlci0+cm9vdCgpLT5zZWxlY3Rpb25Ub3AoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBz
ZWxCb3R0b20gPSBwYWludE9mZnNldC55KCkgKyBzZWxUb3AgKyBtX2lubGluZUJveFdyYXBwZXIt
PnJvb3QoKS0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgICAgIHRvcCA9IG1pbihzZWxUb3AsIHRv
cCk7CiAgICAgICAgIGJvdHRvbSA9IG1heChzZWxCb3R0b20sIGJvdHRvbSk7CiAgICAgfQogICAg
IAotICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsK
KyAgICBMYXlvdXRVbml0IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhh
c2UpOwogICAgIGlmIChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG1pblhWaXN1YWxPdmVyZmxv
dygpID49IHBhaW50SW5mby5yZWN0Lm1heFgoKSArIG9zIHx8IGFkanVzdGVkUGFpbnRPZmZzZXQu
eCgpICsgbWF4WFZpc3VhbE92ZXJmbG93KCkgPD0gcGFpbnRJbmZvLnJlY3QueCgpIC0gb3MpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAodG9wID49IHBhaW50SW5mby5yZWN0Lm1heFko
KSArIG9zIHx8IGJvdHRvbSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCShyZXZpc2lvbiA5MDU3NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw3ICs1NSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldEhhc0ludHJpbnNpY1Np
emUoKSB7IG1faGFzSW50cmluc2ljU2l6ZSA9IHRydWU7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIGJvb2wgc2hvdWxkUGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICBib29sIHNob3VsZFBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAgICAgSW50UmVjdCBsb2NhbFNlbGVjdGlv
blJlY3QoYm9vbCBjaGVja1doZXRoZXJTZWxlY3RlZCA9IHRydWUpIGNvbnN0OyAvLyBUaGlzIGlz
IGluIGxvY2FsIGNvb3JkaW5hdGVzLCBidXQgaXQncyBhIHBoeXNpY2FsIHJlY3QgKHNvIHRoZSB0
b3AgbGVmdCBjb3JuZXIgaXMgcGh5c2ljYWwgdG9wIGxlZnQpLgogCiBwcml2YXRlOgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcAko
cmV2aXNpb24gOTA1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xs
YmFyUGFydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIFJlbmRl
clNjcm9sbGJhclBhcnQ6OmltYWdlQ2hhbmdlZChXCiAgICAgfQogfQogCi12b2lkIFJlbmRlclNj
cm9sbGJhclBhcnQ6OnBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3Zv
aWQgUmVuZGVyU2Nyb2xsYmFyUGFydDo6cGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlv
dXRSZWN0JiByZWN0KQogewogICAgIC8vIE1ha2Ugc3VyZSBvdXIgZGltZW5zaW9ucyBtYXRjaCB0
aGUgcmVjdC4KICAgICBzZXRMb2NhdGlvbihyZWN0LmxvY2F0aW9uKCkgLSB0b1NpemUocGFpbnRP
ZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQ
YXJ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclBhcnQuaAkocmV2aXNpb24gOTA1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyUGFydC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgCi0gICAgdm9pZCBwYWludEludG9SZWN0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZvaWQgcGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRQb2ludCYs
IGNvbnN0IExheW91dFJlY3QmKTsKICAgICAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
bmV3U3R5bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAJKHJldmlzaW9uIDkwNTc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2MCw3ICs5NjAsNyBAQCB2b2lk
IFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRDb2xsYXBzZWRCb3JkCiAgICAgfQogfQogCi12b2lkIFJl
bmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgUmVuZGVyT2JqZWN0KiBiYWNrZ3Jv
dW5kT2JqZWN0KQordm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZWhpbmRD
ZWxsKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
IFJlbmRlck9iamVjdCogYmFja2dyb3VuZE9iamVjdCkKIHsKICAgICBpZiAoIXBhaW50SW5mby5z
aG91bGRQYWludFdpdGhpblJvb3QodGhpcykpCiAgICAgICAgIHJldHVybjsKQEAgLTk3NSw3ICs5
NzUsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlCiAgICAgaWYg
KCF0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkgJiYgc3R5bGUoKS0+ZW1wdHlDZWxscygpID09
IEhJREUgJiYgIWZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UG9pbnQg
YWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OworICAgIExheW91dFBvaW50IGFkanVz
dGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKICAgICBpZiAoYmFja2dyb3VuZE9iamVjdCAh
PSB0aGlzKQogICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0Lm1vdmUobG9jYXRpb24oKSk7CiAK
QEAgLTk4OCwxMSArOTg4LDExIEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludEJhY2tncm91
bmRzQmUKICAgICAgICAgYm9vbCBzaG91bGRDbGlwID0gYmFja2dyb3VuZE9iamVjdC0+aGFzTGF5
ZXIoKSAmJiAoYmFja2dyb3VuZE9iamVjdCA9PSB0aGlzIHx8IGJhY2tncm91bmRPYmplY3QgPT0g
cGFyZW50KCkpICYmIHRhYmxlRWx0LT5jb2xsYXBzZUJvcmRlcnMoKTsKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpwYWludEluZm8uY29udGV4dCwgc2hvdWxk
Q2xpcCk7CiAgICAgICAgIGlmIChzaG91bGRDbGlwKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGNs
aXBSZWN0KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgYm9yZGVyTGVmdCgpLCBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSArIGJvcmRlclRvcCgpLAorICAgICAgICAgICAgTGF5b3V0UmVjdCBjbGlw
UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGJvcmRlckxlZnQoKSwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkgKyBib3JkZXJUb3AoKSwKICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gYm9y
ZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRl
ckJvdHRvbSgpKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGNsaXBSZWN0
KTsKICAgICAgICAgfQotICAgICAgICBwYWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBjLCBiZ0xh
eWVyLCBJbnRSZWN0KGFkanVzdGVkUGFpbnRPZmZzZXQsIHNpemUoKSksIEJhY2tncm91bmRCbGVl
ZE5vbmUsIENvbXBvc2l0ZVNvdXJjZU92ZXIsIGJhY2tncm91bmRPYmplY3QpOworICAgICAgICBw
YWludEZpbGxMYXllcnMocGFpbnRJbmZvLCBjLCBiZ0xheWVyLCBMYXlvdXRSZWN0KGFkanVzdGVk
UGFpbnRPZmZzZXQsIHNpemUoKSksIEJhY2tncm91bmRCbGVlZE5vbmUsIENvbXBvc2l0ZVNvdXJj
ZU92ZXIsIGJhY2tncm91bmRPYmplY3QpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDkwNTc0
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkxMyw5ICs5MTMsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFy
ZUNlbGxQb3NpdGlvbnMoCiAgICAgcmV0dXJuIGVsZW0xLT5yb3coKSA8IGVsZW0yLT5yb3coKTsK
IH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Q2VsbChSZW5kZXJUYWJsZUNlbGwq
IGNlbGwsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQp
Cit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRDZWxsKFJlbmRlclRhYmxlQ2VsbCogY2Vs
bCwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkK
IHsKLSAgICBJbnRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUoY2VsbCwgcGFp
bnRPZmZzZXQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOworICAgIExheW91dFBv
aW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZShjZWxsLCBwYWludE9mZnNldCwgUGFy
ZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CiAgICAgUGFpbnRQaGFzZSBwYWludFBoYXNl
ID0gcGFpbnRJbmZvLnBoYXNlOwogICAgIFJlbmRlclRhYmxlUm93KiByb3cgPSB0b1JlbmRlclRh
YmxlUm93KGNlbGwtPnBhcmVudCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNpb24gOTA1NzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Myw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QqIG9sZENoaWxkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludENlbGwoUmVuZGVy
VGFibGVDZWxsKiwgUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRDZWxsKFJlbmRlclRhYmxlQ2VsbCosIFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBv
aW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50T2JqZWN0KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFn
ZVB0ciwgY29uc3QgSW50UmVjdCogPSAwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gOTA1NzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OTcsMTIgKzU5NywxMiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjp1cGRhdGVQbGFjZWhv
bGRlCiAgICAgICAgIHJlcGFpbnQoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6cGFp
bnRQbGFjZWhvbGRlcihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50
T2Zmc2V0KQordm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6cGFpbnRQbGFjZWhvbGRlcihQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGlm
IChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIEludFJlY3QgY2xpcFJlY3QocGFpbnRPZmZzZXQueCgpICsgYm9yZGVyTGVmdCgpLCBw
YWludE9mZnNldC55KCkgKyBib3JkZXJUb3AoKSwgd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAtIGJv
cmRlclJpZ2h0KCksIGhlaWdodCgpIC0gYm9yZGVyQm90dG9tKCkgLSBib3JkZXJUb3AoKSk7Cisg
ICAgTGF5b3V0UmVjdCBjbGlwUmVjdChwYWludE9mZnNldC54KCkgKyBib3JkZXJMZWZ0KCksIHBh
aW50T2Zmc2V0LnkoKSArIGJvcmRlclRvcCgpLCB3aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9y
ZGVyUmlnaHQoKSwgaGVpZ2h0KCkgLSBib3JkZXJCb3R0b20oKSAtIGJvcmRlclRvcCgpKTsKICAg
ICBpZiAoY2xpcFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC02MjAs
OSArNjIwLDkgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6cGFpbnRQbGFjZWhvbGRlcgogICAg
IAogICAgIFJlbmRlckJveCogdGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpID8gaW5u
ZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDA7CiAgICAgaWYgKHRleHRSZW5kZXJlcikg
ewotICAgICAgICBJbnRQb2ludCB0ZXh0UG9pbnQ7CisgICAgICAgIExheW91dFBvaW50IHRleHRQ
b2ludDsKICAgICAgICAgdGV4dFBvaW50LnNldFkocGFpbnRPZmZzZXQueSgpICsgdGV4dEJsb2Nr
SW5zZXRUb3AoKSArIHBsYWNlaG9sZGVyU3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwot
ICAgICAgICBpbnQgc3R5bGVUZXh0SW5kZW50ID0gcGxhY2Vob2xkZXJTdHlsZS0+dGV4dEluZGVu
dCgpLmlzRml4ZWQoKSA/IHBsYWNlaG9sZGVyU3R5bGUtPnRleHRJbmRlbnQoKS5jYWxjTWluVmFs
dWUoMCkgOiAwOworICAgICAgICBMYXlvdXRVbml0IHN0eWxlVGV4dEluZGVudCA9IHBsYWNlaG9s
ZGVyU3R5bGUtPnRleHRJbmRlbnQoKS5pc0ZpeGVkKCkgPyBwbGFjZWhvbGRlclN0eWxlLT50ZXh0
SW5kZW50KCkuY2FsY01pblZhbHVlKDApIDogMDsKICAgICAgICAgaWYgKHBsYWNlaG9sZGVyU3R5
bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIHRleHRQb2ludC5zZXRY
KHBhaW50T2Zmc2V0LngoKSArIHN0eWxlVGV4dEluZGVudCArIHRleHRCbG9ja0luc2V0TGVmdCgp
KTsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcAkocmV2aXNpb24gOTA1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBmbG9h
dCBSb290SW5saW5lQm94OjpwbGFjZUVsbGlwc2lzQm94KGJvCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBSb290SW5saW5lQm94OjpwYWludEVsbGlwc2lzQm94KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGlu
ZUJvdHRvbSkgY29uc3QKK3ZvaWQgUm9vdElubGluZUJveDo6cGFpbnRFbGxpcHNpc0JveChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3QKIHsKICAgICBpZiAoaGFz
RWxsaXBzaXNCb3goKSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVy
KCkpICYmIHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFCiAgICAg
ICAgICAgICAmJiBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCkBAIC0x
NTcsNyArMTU3LDcgQEAgdm9pZCBSb290SW5saW5lQm94OjphZGRIaWdobGlnaHRPdmVyZmxvdwog
ICAgIHNldE92ZXJmbG93RnJvbUxvZ2ljYWxSZWN0cyhpbmZsYXRlZFJlY3QsIGluZmxhdGVkUmVj
dCwgbGluZVRvcCgpLCBsaW5lQm90dG9tKCkpOwogfQogCi12b2lkIFJvb3RJbmxpbmVCb3g6OnBh
aW50Q3VzdG9tSGlnaGxpZ2h0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYg
cGFpbnRPZmZzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgaGlnaGxpZ2h0VHlwZSkKK3ZvaWQgUm9v
dElubGluZUJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgQXRvbWljU3RyaW5nJiBoaWdobGln
aHRUeXBlKQogewogICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5k
ZXJlcigpKSB8fCByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8
fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50Q3VzdG9tSGln
aGxpZ2h0CiAKICNlbmRpZgogCi12b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQg
bGluZUJvdHRvbSkKK3ZvaWQgUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBM
YXlvdXRVbml0IGxpbmVCb3R0b20pCiB7CiAgICAgSW5saW5lRmxvd0JveDo6cGFpbnQocGFpbnRJ
bmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CiAgICAgcGFpbnRFbGxpcHNp
c0JveChwYWludEluZm8sIHBhaW50T2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gOTA1NzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKIAogICAgIEVsbGlwc2lzQm94KiBlbGxpcHNp
c0JveCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYWludEVsbGlwc2lzQm94KFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKSBjb25zdDsKKyAgICB2
b2lkIHBhaW50RWxsaXBzaXNCb3goUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlv
dXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJUcnVuY2F0aW9uKCk7CiAKQEAgLTk0LDEwICs5NCwxMCBAQCBwdWJsaWM6
CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBhZGRIaWdobGlnaHRPdmVyZmxvdygpOwot
ICAgIHZvaWQgcGFpbnRDdXN0b21IaWdobGlnaHQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBBdG9taWNTdHJpbmcmIGhpZ2hsaWdodFR5cGUpOworICAgIHZvaWQgcGFpbnRDdXN0
b21IaWdobGlnaHQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBBdG9taWNT
dHJpbmcmIGhpZ2hsaWdodFR5cGUpOwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20p
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYs
IExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKICAgICB2aXJ0dWFs
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKIAogICAgIGJv
b2wgaGFzU2VsZWN0ZWRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2VsZWN0ZWRDaGls
ZHJlbk9yQ2FuSGF2ZUxlYWRpbmdFeHBhbnNpb247IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCShyZXZpc2lv
biA5MDU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxNCArNzUsMTQgQEAgdm9pZCBSZW5kZXJN
YXRoTUxCbG9jazo6c3RyZXRjaFRvSGVpZ2h0KAogfQogCiAjaWYgRU5BQkxFKERFQlVHX01BVEhf
TEFZT1VUKQotdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWlu
dChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAg
ICBSZW5kZXJCbG9jazo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwogICAgIAogICAgIGlmIChp
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhh
c2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRQb2ludCBhZGp1c3RlZFBh
aW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIExheW91dFBvaW50IGFk
anVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CiAgICAgCkBA
IC05MCwyMiArOTAsMjIgQEAgdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZv
JgogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIGlu
Zm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSwgQ29sb3JTcGFjZVNS
R0IpOwogICAgIAotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNl
dCwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1
c3RlZFBhaW50T2Zmc2V0LnkoKSkpOwotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9p
bnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50
T2Zmc2V0LnkoKSksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lk
dGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSkpOwotICAgIGlu
Zm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFk
anVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpLCBJbnRQb2ludChhZGp1c3Rl
ZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
ICsgb2Zmc2V0SGVpZ2h0KCkpKTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKGFkanVzdGVk
UGFpbnRPZmZzZXQsIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3
TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0
LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CisgICAgaW5m
by5jb250ZXh0LT5kcmF3TGluZShMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAr
IG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSwgTGF5b3V0UG9pbnQoYWRq
dXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0
LnkoKSArIG9mZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShMYXlv
dXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkg
KyBvZmZzZXRIZWlnaHQoKSksIExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsg
b2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSkp
OworICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgTGF5b3V0
UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsg
b2Zmc2V0SGVpZ2h0KCkpKTsKICAgICAKICAgICBpbnQgdG9wU3RhcnQgPSBwYWRkaW5nVG9wKCk7
CiAgICAgCiAgICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAyNTUsIDAp
LCBDb2xvclNwYWNlU1JHQik7CiAgICAgCi0gICAgaW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQ
b2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0
b3BTdGFydCksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgo
KSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCkpOworICAgIGluZm8uY29udGV4
dC0+ZHJhd0xpbmUoTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpICsgdG9wU3RhcnQpLCBMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zm
c2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgdG9wU3Rh
cnQpKTsKICAgICAKICAgICBpbnQgYmFzZWxpbmUgPSBiYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0
aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpOwogICAgIAogICAgIGluZm8uY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMjU1LCAwLCAwKSwgQ29sb3JTcGFjZVNSR0IpOwogICAg
IAotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgYmFzZWxpbmUpLCBJbnRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQu
eSgpICsgYmFzZWxpbmUpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKExheW91dFBvaW50
KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2Vs
aW5lKSwgTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgp
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2VsaW5lKSk7CiB9CiAjZW5kaWYgLy8gRU5B
QkxFKERFQlVHX01BVEhfTEFZT1VUKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAkocmV2aXNpb24g
OTA1NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZy
YWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgUmVuZGVy
TWF0aE1MRnJhY3Rpb246OmxheW91dCgpCiAKIH0KIAotdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlv
bjo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2
b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQo
aW5mbywgcGFpbnRPZmZzZXQpOwogICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQpAQCAtMTQwLDcgKzE0
MCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50SW4KICAgICBpZiAo
IWZpcnN0Q2hpbGQoKSB8fCFtX2xpbmVUaGlja25lc3MpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGludCB2ZXJ0aWNhbE9mZnNldCA9IDA7CisgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE9mZnNldCA9
IDA7CiAgICAgLy8gVGhlIGNoaWxkcmVuIGFyZSBhbHdheXMgUmVuZGVyTWF0aE1MQmxvY2sgaW5z
dGFuY2VzCiAgICAgaWYgKGZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7CiAg
ICAgICAgIGludCBhZGp1c3RGb3JUaGlja25lc3MgPSBtX2xpbmVUaGlja25lc3MgPiAxID8gaW50
KG1fbGluZVRoaWNrbmVzcyAvIDIpIDogMTsKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTEZyYWN0aW9uOjpwYWludChQYWludEluCiAgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNl
dCA9IG51bWVyYXRvci0+b2Zmc2V0SGVpZ2h0KCk7ICAgICAgICAKICAgICB9CiAgICAgCi0gICAg
SW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsK
KyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2Nh
dGlvbigpOwogICAgIGFkanVzdGVkUGFpbnRPZmZzZXQuc2V0WShhZGp1c3RlZFBhaW50T2Zmc2V0
LnkoKSArIHZlcnRpY2FsT2Zmc2V0KTsKICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoKmluZm8uY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHJldmlzaW9uIDkw
NTc0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJv
b3Q6OmFkZENoaWxkKFJlbmRlck9iCiAgICAgfQogfQogICAgIAotdm9pZCBSZW5kZXJNYXRoTUxS
b290OjpwYWludChQYWludEluZm8mIGluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkK
K3ZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KGlu
Zm8sIHBhaW50T2Zmc2V0KTsKICAgICAKQEAgLTEwNCwxNyArMTA0LDE3IEBAIHZvaWQgUmVuZGVy
TWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSB8fCAh
bGFzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CisgICAgTGF5b3V0UG9pbnQgYWRq
dXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICAKICAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogaW5kZXhCb3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGxh
c3RDaGlsZCgpKTsKICAgICAKLSAgICBpbnQgbWF4SGVpZ2h0ID0gaW5kZXhCb3gtPm9mZnNldEhl
aWdodCgpOworICAgIExheW91dFVuaXQgbWF4SGVpZ2h0ID0gaW5kZXhCb3gtPm9mZnNldEhlaWdo
dCgpOwogICAgIC8vIGRlZmF1bHQgdG8gdGhlIGZvbnQgc2l6ZSBpbiBwaXhlbHMgaWYgd2UncmUg
ZW1wdHkKICAgICBpZiAoIW1heEhlaWdodCkKICAgICAgICAgbWF4SGVpZ2h0ID0gc3R5bGUoKS0+
Zm9udFNpemUoKTsKLSAgICBpbnQgd2lkdGggPSBpbmRleEJveC0+b2Zmc2V0V2lkdGgoKTsKKyAg
ICBMYXlvdXRVbml0IHdpZHRoID0gaW5kZXhCb3gtPm9mZnNldFdpZHRoKCk7CiAgICAgCi0gICAg
aW50IGluZGV4V2lkdGggPSAwOworICAgIExheW91dFVuaXQgaW5kZXhXaWR0aCA9IDA7CiAgICAg
UmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjdXJyZW50
ICE9IGxhc3RDaGlsZCgpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc0JveE1vZGVsT2JqZWN0
KCkpIHsKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBh
aW50SW5mbyYgCiAgICAgd2lkdGggKz0gdG9wU3RhcnRTaGlmdDsKICAgICAKICAgICBpbnQgcm9v
dFBhZCA9IHN0YXRpY19jYXN0PGludD4oZ1Jvb3RQYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUo
KSk7Ci0gICAgaW50IHN0YXJ0ID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBpbmRleFdpZHRo
ICsgZ1JhZGljYWxMZWZ0TWFyZ2luICsgc3R5bGUoKS0+cGFkZGluZ0xlZnQoKS52YWx1ZSgpIC0g
cm9vdFBhZDsKKyAgICBMYXlvdXRVbml0IHN0YXJ0ID0gYWRqdXN0ZWRQYWludE9mZnNldC54KCkg
KyBpbmRleFdpZHRoICsgZ1JhZGljYWxMZWZ0TWFyZ2luICsgc3R5bGUoKS0+cGFkZGluZ0xlZnQo
KS52YWx1ZSgpIC0gcm9vdFBhZDsKICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0LnNldFkoYWRqdXN0
ZWRQYWludE9mZnNldC55KCkgKyBzdHlsZSgpLT5wYWRkaW5nVG9wKCkudmFsdWUoKSAtIHJvb3RQ
YWQpOwogICAgIAogICAgIEZsb2F0UG9pbnQgdG9wU3RhcnQoc3RhcnQgLSB0b3BTdGFydFNoaWZ0
LCBwYWludE9mZnNldC55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCShyZXZpc2lvbiA5
MDU3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE3ICs2NiwxNyBAQCBSZW5kZXJNYXRo
TUxTcXVhcmVSb290OjpSZW5kZXJNYXRoTUxTcXVhCiB7CiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1M
U3F1YXJlUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRP
ZmZzZXQpCit2b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIFJlbmRlck1hdGhNTEJs
b2NrOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAgICAKICAgICBpZiAoaW5mby5jb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBJbnRQb2lu
dCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIExh
eW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7
CiAKLSAgICBpbnQgbWF4SGVpZ2h0ID0gMDsKLSAgICBpbnQgd2lkdGggPSAwOworICAgIExheW91
dFVuaXQgbWF4SGVpZ2h0ID0gMDsKKyAgICBMYXlvdXRVbml0IHdpZHRoID0gMDsKICAgICBSZW5k
ZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKGN1cnJlbnQpIHsK
ICAgICAgICAgaWYgKGN1cnJlbnQtPmlzQm94TW9kZWxPYmplY3QoKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100041</attachid>
            <date>2011-07-07 15:36:51 -0700</date>
            <delta_ts>2011-07-07 16:18:10 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-64116-20110707153649.patch</filename>
            <type>text/plain</type>
            <size>83052</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTEtMDctMDcgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCByZW1haW5pbmcg
cGFpbnQgZnVuY3Rpb25zIHRvIG5ldyBsYXlvdXQgdHlwZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCisKKyAgICAgICAgU3dpdGNoaW5nIGFsbCBmdW5jdGlvbnMgd2l0aCBJbnRQ
b2ludCBwYWludE9mZnNldHMgdG8gdGhlIG5ldyBMYXlvdXQgdHlwZXMuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZXMuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbik6CisgICAg
ICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnBhaW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L0xheW91dFR5cGVzLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbHVtblJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpwYWludENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpwYWludENhcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50RWxsaXBzaXNCb3hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDb250aW51YXRpb25PdXRsaW5lcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpwYWludE91dGxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92
ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50U2Ny
b2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94
TGlzdDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50U2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cGFpbnRGb2N1c1Jpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTY3JvbGxiYXJQYXJ0OjpwYWludEludG9SZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyUGFydC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludEJhY2tncm91bmRz
QmVoaW5kQ2VsbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Q2VsbCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbDo6cGFpbnRQbGFjZWhvbGRlcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6cGFpbnRFbGxpcHNpc0Jv
eCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwYWludEN1c3RvbUhpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwYWludCk6CisgICAgICAgICog
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTEJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEJsb2Nr
OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb290OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KToKKwogMjAxMS0wNy0wNyAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
UnVzc2VsbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAko
cmV2aXNpb24gOTA1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQordm9p
ZCBFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0
b20pCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7
CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUobV9maXJzdExpbmUp
OwpAQCAtMzksNyArMzksNyBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBh
aW50CiAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcih0ZXh0Q29sb3IsIHN0eWxlLT5jb2xv
clNwYWNlKCkpOwogICAgIGJvb2wgc2V0U2hhZG93ID0gZmFsc2U7CiAgICAgaWYgKHN0eWxlLT50
ZXh0U2hhZG93KCkpIHsKLSAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEludFNpemUoc3R5bGUt
PnRleHRTaGFkb3coKS0+eCgpLCBzdHlsZS0+dGV4dFNoYWRvdygpLT55KCkpLAorICAgICAgICBj
b250ZXh0LT5zZXRTaGFkb3coTGF5b3V0U2l6ZShzdHlsZS0+dGV4dFNoYWRvdygpLT54KCksIHN0
eWxlLT50ZXh0U2hhZG93KCktPnkoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHls
ZS0+dGV4dFNoYWRvdygpLT5ibHVyKCksIHN0eWxlLT50ZXh0U2hhZG93KCktPmNvbG9yKCksIHN0
eWxlLT5jb2xvclNwYWNlKCkpOwogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KQEAg
LTU1LDcgKzU1LDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAog
ICAgIH0KIAogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdheXMgTFRSPyBGaXggYnkgcGFz
c2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93LgotICAgIGNvbnRleHQtPmRyYXdUZXh0
KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyKCksIGZvbnQsIG1f
c3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiksIEludFBvaW50KHgo
KSArIHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFpbnRPZmZzZXQueSgpICsgc3R5bGUtPmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkpKTsKKyAgICBjb250ZXh0LT5kcmF3VGV4dChmb250LCBSZW5kZXJC
bG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUsIFRl
eHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24pLCBMYXlvdXRQb2ludCh4KCkgKyBwYWludE9m
ZnNldC54KCksIHkoKSArIHBhaW50T2Zmc2V0LnkoKSArIHN0eWxlLT5mb250TWV0cmljcygpLmFz
Y2VudCgpKSk7CiAKICAgICAvLyBSZXN0b3JlIHRoZSByZWd1bGFyIGZpbGwgY29sb3IuCiAgICAg
aWYgKHRleHRDb2xvciAhPSBjb250ZXh0LT5maWxsQ29sb3IoKSkKQEAgLTY2LDcgKzY2LDcgQEAg
dm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogCiAgICAgaWYgKG1fbWFy
a3VwQm94KSB7CiAgICAgICAgIC8vIFBhaW50IHRoZSBtYXJrdXAgYm94Ci0gICAgICAgIEludFBv
aW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICAgICAgTGF5b3V0UG9p
bnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwogICAgICAgICBhZGp1c3RlZFBh
aW50T2Zmc2V0Lm1vdmUoeCgpICsgbV9sb2dpY2FsV2lkdGggLSBtX21hcmt1cEJveC0+eCgpLAog
ICAgICAgICAgICAgeSgpICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSAobV9tYXJr
dXBCb3gtPnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSkt
PmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKICAgICAgICAgbV9tYXJrdXBCb3gtPnBhaW50KHBh
aW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CkBAIC04
MSw3ICs4MSw3IEBAIEludFJlY3QgRWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoKQogICAgIHJl
dHVybiBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgSW50UG9pbnQoeCgpLCB5KCkgKyByb290KCkt
PnNlbGVjdGlvblRvcCgpKSwgcm9vdCgpLT5zZWxlY3Rpb25IZWlnaHQoKSkpOwogfQogCi12b2lk
IEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250
JiBmb250KQordm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgRm9udCYgZm9udCkKIHsKICAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwogICAgIENvbG9yIGMgPSBt
X3JlbmRlcmVyLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTk0LDggKzk0LDkgQEAg
dm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpYwogICAgICAgICBjID0gQ29s
b3IoMHhmZiAtIGMucmVkKCksIDB4ZmYgLSBjLmdyZWVuKCksIDB4ZmYgLSBjLmJsdWUoKSk7CiAK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotICAg
IGludCB0b3AgPSByb290KCktPnNlbGVjdGlvblRvcCgpOwotICAgIGludCBoID0gcm9vdCgpLT5z
ZWxlY3Rpb25IZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IHRvcCA9IHJvb3QoKS0+c2VsZWN0aW9u
VG9wKCk7CisgICAgTGF5b3V0VW5pdCBoID0gcm9vdCgpLT5zZWxlY3Rpb25IZWlnaHQoKTsKKyAg
ICAvLyBGSVhNRTogV2UnbGwgbmVlZCB0byBhcHBseSB0aGUgY29ycmVjdCBjbGlwIHJvdW5kaW5n
IGhlcmU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzY1NgogICAg
IGNvbnRleHQtPmNsaXAoSW50UmVjdCh4KCkgKyBwYWludE9mZnNldC54KCksIHRvcCArIHBhaW50
T2Zmc2V0LnkoKSwgbV9sb2dpY2FsV2lkdGgsIGgpKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRo
aXMgYWx3YXlzIExUUj8gRml4IGJ5IHBhc3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxv
dy4KICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBSZW5kZXJCbG9jazo6
Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUsIFRleHRSdW46
OkFsbG93VHJhaWxpbmdFeHBhbnNpb24pLCBJbnRQb2ludCh4KCkgKyBwYWludE9mZnNldC54KCks
IHkoKSArIHBhaW50T2Zmc2V0LnkoKSArIHRvcCksIGgsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDkw
NTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmLCBpbnQgbGluZVRvcCwg
aW50IGxpbmVCb3R0b20pOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25z
dCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9t
KTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0
IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90
dG9tKTsKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
U3RhdGUgcykgeyBtX3NlbGVjdGlvblN0YXRlID0gczsgfQogICAgIEludFJlY3Qgc2VsZWN0aW9u
UmVjdCgpOwpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwg
aW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgeyByZXR1cm4gbV9zZWxl
Y3Rpb25TdGF0ZTsgfQotICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UG9pbnQmLCBSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIHBh
aW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IExheW91dFBvaW50JiwgUmVuZGVy
U3R5bGUqLCBjb25zdCBGb250Jik7CiAKICAgICBpbnQgbV9oZWlnaHQ7CiAgICAgQXRvbWljU3Ry
aW5nIG1fc3RyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHJl
dmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5NiwxMiArMTk2LDEyIEBAIHZvaWQgSW5saW5lQm94OjphZGp1
c3RQb3NpdGlvbihmbG9hdCBkeCwKICAgICAgICAgdG9SZW5kZXJCb3gobV9yZW5kZXJlciktPm1v
dmUoZHgsIGR5KTsgCiB9CiAKLXZvaWQgSW5saW5lQm94OjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgLyogbGluZVRvcCAqLywgaW50
IC8qbGluZUJvdHRvbSovKQordm9pZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRv
cCAqLywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0b20qLykKIHsKICAgICBpZiAoIXBhaW50SW5mby5z
aG91bGRQYWludFdpdGhpblJvb3QocmVuZGVyZXIoKSkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQ
YWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVj
dGlvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBwYWlu
dE9mZnNldDsKKyAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gcGFpbnRPZmZzZXQ7CiAgICAg
aWYgKHBhcmVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKSAvLyBGYXN0ZXIgdGhhbiBjYWxsaW5nIGNvbnRhaW5pbmdCbG9jaygpLgogICAgICAg
ICBjaGlsZFBvaW50ID0gcmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCktPmZsaXBGb3JXcml0
aW5nTW9kZSh0b1JlbmRlckJveChyZW5kZXJlcigpKSwgY2hpbGRQb2ludCwgUmVuZGVyQm94OjpQ
YXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgYWRqdXN0UG9zaXRpb24oZGVsdGEsIDApOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBs
aW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxp
bmVCb3R0b20pOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBpbnQgbGluZVRvcCwgaW50
IGxpbmVCb3R0b20pOwogCiAgICAgSW5saW5lQm94KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
CShyZXZpc2lvbiA5MDU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ2LDkgKzk0Niw5IEBAIGJvb2wgSW5saW5lRmxv
d0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
SW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50
JiBwYWludE9mZnNldCwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKQordm9pZCBJbmxpbmVG
bG93Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKIHsK
LSAgICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwgbGlu
ZUJvdHRvbSkpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVj
dChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CiAgICAgb3ZlcmZsb3dSZWN0LmluZmxhdGUocmVuZGVy
ZXIoKS0+bWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOwogICAgIGZsaXBGb3JX
cml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwogICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkocGFpbnRP
ZmZzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShy
ZXZpc2lvbiA5MDU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
YWludEZpbGxMYXllcnMoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgQ29sb3ImLCBjb25zdCBGaWxs
TGF5ZXIqLCBjb25zdCBMYXlvdXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyKTsKICAgICB2b2lkIHBhaW50RmlsbExheWVyKGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgTGF5b3V0UmVjdCYsIENvbXBvc2l0
ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAgICAgdm9pZCBwYWludEJveFNoYWRv
dyhHcmFwaGljc0NvbnRleHQqLCBSZW5kZXJTdHlsZSosIFNoYWRvd1N0eWxlLCBjb25zdCBMYXlv
dXRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBv
aW50JiwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUJvdHRvbSk7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBs
aW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckxpbmVCb3hMaXN0
KiByZW5kZXJlckxpbmVCb3hlcygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gOTA1OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw3ICs0
NjYsNyBAQCBzdGF0aWMgaW5saW5lIEFmZmluZVRyYW5zZm9ybSByb3RhdGlvbihjCiAgICAgICAg
IDogQWZmaW5lVHJhbnNmb3JtKDAsIC0xLCAxLCAwLCBib3hSZWN0LngoKSAtIGJveFJlY3QubWF4
WSgpLCBib3hSZWN0LngoKSArIGJveFJlY3QubWF4WSgpKTsKIH0KIAotdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0LCBpbnQgLypsaW5lVG9wKi8sIGludCAvKmxpbmVCb3R0b20qLykKK3ZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwgTGF5b3V0VW5pdCAvKmxpbmVUb3AqLywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0b20q
LykKIHsKICAgICBpZiAoaXNMaW5lQnJlYWsoKSB8fCAhcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0
aGluUm9vdChyZW5kZXJlcigpKSB8fCByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkg
IT0gVklTSUJMRSB8fAogICAgICAgICBtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uIHx8
IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCAhbV9sZW4pCkBAIC00NzQs
MTUgKzQ3NCwxNSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAK
ICAgICBBU1NFUlQocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSAmJiBw
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpOwogCi0gICAgaW50IGxv
Z2ljYWxMZWZ0U2lkZSA9IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKTsKLSAgICBpbnQgbG9n
aWNhbFJpZ2h0U2lkZSA9IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCk7Ci0gICAgaW50IGxv
Z2ljYWxTdGFydCA9IGxvZ2ljYWxMZWZ0U2lkZSArIChpc0hvcml6b250YWwoKSA/IHBhaW50T2Zm
c2V0LngoKSA6IHBhaW50T2Zmc2V0LnkoKSk7Ci0gICAgaW50IGxvZ2ljYWxFeHRlbnQgPSBsb2dp
Y2FsUmlnaHRTaWRlIC0gbG9naWNhbExlZnRTaWRlOworICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnRTaWRlID0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpOworICAgIExheW91dFVuaXQgbG9n
aWNhbFJpZ2h0U2lkZSA9IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCk7CisgICAgTGF5b3V0
VW5pdCBsb2dpY2FsU3RhcnQgPSBsb2dpY2FsTGVmdFNpZGUgKyAoaXNIb3Jpem9udGFsKCkgPyBw
YWludE9mZnNldC54KCkgOiBwYWludE9mZnNldC55KCkpOworICAgIExheW91dFVuaXQgbG9naWNh
bEV4dGVudCA9IGxvZ2ljYWxSaWdodFNpZGUgLSBsb2dpY2FsTGVmdFNpZGU7CiAgICAgCi0gICAg
aW50IHBhaW50RW5kID0gaXNIb3Jpem9udGFsKCkgPyBwYWludEluZm8ucmVjdC5tYXhYKCkgOiBw
YWludEluZm8ucmVjdC5tYXhZKCk7Ci0gICAgaW50IHBhaW50U3RhcnQgPSBpc0hvcml6b250YWwo
KSA/IHBhaW50SW5mby5yZWN0LngoKSA6IHBhaW50SW5mby5yZWN0LnkoKTsKKyAgICBMYXlvdXRV
bml0IHBhaW50RW5kID0gaXNIb3Jpem9udGFsKCkgPyBwYWludEluZm8ucmVjdC5tYXhYKCkgOiBw
YWludEluZm8ucmVjdC5tYXhZKCk7CisgICAgTGF5b3V0VW5pdCBwYWludFN0YXJ0ID0gaXNIb3Jp
em9udGFsKCkgPyBwYWludEluZm8ucmVjdC54KCkgOiBwYWludEluZm8ucmVjdC55KCk7CiAgICAg
Ci0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OworICAgIExh
eW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKICAgICAKICAgICBp
ZiAobG9naWNhbFN0YXJ0ID49IHBhaW50RW5kIHx8IGxvZ2ljYWxTdGFydCArIGxvZ2ljYWxFeHRl
bnQgPD0gcGFpbnRTdGFydCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTA1LDEwICs1MDUsMTAgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAgICAgICAgLy8g
ZmFydGhlciB0byB0aGUgcmlnaHQuCiAgICAgICAgICAgICAvLyBOT1RFOiBXZWJLaXQncyBiZWhh
dmlvciBkaWZmZXJzIGZyb20gdGhhdCBvZiBJRSB3aGljaCBhcHBlYXJzIHRvIGp1c3Qgb3Zlcmxh
eSB0aGUgZWxsaXBzaXMgb24gdG9wIG9mIHRoZQogICAgICAgICAgICAgLy8gdHJ1bmNhdGVkIHN0
cmluZyBpLmUuICB8SGVsbG98Q0JBfCAtPiB8Li4ubG98Q0JBfAotICAgICAgICAgICAgaW50IHdp
ZHRoT2ZWaXNpYmxlVGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+d2lkdGgobV9zdGFy
dCwgbV90cnVuY2F0aW9uLCB0ZXh0UG9zKCksIG1fZmlyc3RMaW5lKTsKLSAgICAgICAgICAgIGlu
dCB3aWR0aE9mSGlkZGVuVGV4dCA9IG1fbG9naWNhbFdpZHRoIC0gd2lkdGhPZlZpc2libGVUZXh0
OwotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBoaXQgdGVzdGluZyBsb2dpYyBhbHNvIG5lZWRz
IHRvIHRha2UgdGhpcyB0cmFuc2xhdGlvbiBpbnQgYWNjb3VudC4KLSAgICAgICAgICAgIEludFNp
emUgdHJ1bmNhdGlvbk9mZnNldChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyB3aWR0aE9mSGlk
ZGVuVGV4dCA6IC13aWR0aE9mSGlkZGVuVGV4dCwgMCk7CisgICAgICAgICAgICBMYXlvdXRVbml0
IHdpZHRoT2ZWaXNpYmxlVGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+d2lkdGgobV9z
dGFydCwgbV90cnVuY2F0aW9uLCB0ZXh0UG9zKCksIG1fZmlyc3RMaW5lKTsKKyAgICAgICAgICAg
IExheW91dFVuaXQgd2lkdGhPZkhpZGRlblRleHQgPSBtX2xvZ2ljYWxXaWR0aCAtIHdpZHRoT2ZW
aXNpYmxlVGV4dDsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgaGl0IHRlc3RpbmcgbG9naWMg
YWxzbyBuZWVkcyB0byB0YWtlIHRoaXMgdHJhbnNsYXRpb24gaW50byBhY2NvdW50LgorICAgICAg
ICAgICAgTGF5b3V0U2l6ZSB0cnVuY2F0aW9uT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IHdpZHRoT2ZIaWRkZW5UZXh0IDogLXdpZHRoT2ZIaWRkZW5UZXh0LCAwKTsKICAgICAgICAg
ICAgIGFkanVzdGVkUGFpbnRPZmZzZXQubW92ZShpc0hvcml6b250YWwoKSA/IHRydW5jYXRpb25P
ZmZzZXQgOiB0cnVuY2F0aW9uT2Zmc2V0LnRyYW5zcG9zZWRTaXplKCkpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNTIxLDcgKzUyMSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWkKIAogICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25JbmNsdWRpbmdG
bGlwcGluZygpOwogICAgIGJveE9yaWdpbi5tb3ZlKGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBh
ZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSk7Ci0gICAgRmxvYXRSZWN0IGJveFJlY3QoYm94T3JpZ2lu
LCBJbnRTaXplKGxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsKKyAgICBGbG9hdFJl
Y3QgYm94UmVjdChib3hPcmlnaW4sIExheW91dFNpemUobG9naWNhbFdpZHRoKCksIGxvZ2ljYWxI
ZWlnaHQoKSkpOwogCiAgICAgUmVuZGVyQ29tYmluZVRleHQqIGNvbWJpbmVkVGV4dCA9IHN0eWxl
VG9Vc2UtPmhhc1RleHRDb21iaW5lKCkgJiYgdGV4dFJlbmRlcmVyKCktPmlzQ29tYmluZVRleHQo
KSAmJiB0b1JlbmRlckNvbWJpbmVUZXh0KHRleHRSZW5kZXJlcigpKS0+aXNDb21iaW5lZCgpID8g
dG9SZW5kZXJDb21iaW5lVGV4dCh0ZXh0UmVuZGVyZXIoKSkgOiAwOwogCkBAIC04NTMsNyArODUz
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFjawogCiAjaWYgUExB
VEZPUk0oTUFDKQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNv
bnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQordm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludEN1c3RvbUhpZ2hsaWdodChjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkKIHsKICAgICBGcmFtZSogZnJh
bWUgPSByZW5kZXJlcigpLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDkwNTkzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MTEwLDggKzExMCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYg
c1BvcywgaW50JiBlUG9zKTsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSk7
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOworICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSk7CiAKIHB1YmxpYzoKICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIoKSBjb25zdDsK
QEAgLTE2OSw3ICsxNjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwYWludERvY3VtZW50TWFy
a2VycyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRl
clN0eWxlKiwgY29uc3QgRm9udCYsIGJvb2wgYmFja2dyb3VuZCk7CiAgICAgdm9pZCBwYWludENv
bXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKICNpZiBQTEFURk9STShNQUMp
Ci0gICAgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChjb25zdCBJbnRQb2ludCYsIGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSk7CisgICAgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChjb25zdCBM
YXlvdXRQb2ludCYsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CiAjZW5kaWYKIAogcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCShyZXZpc2lvbiA5
MDU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaWZuZGVmIExheW91dFR5cGVzX2gKICNkZWZpbmUg
TGF5b3V0VHlwZXNfaAogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5MDU5MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOTMsNyArMjI5
Myw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICAgICAg
bGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0LCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LCBwYWludEluZm8ucmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBpZiAocGFp
bnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MjMwMSw4ICsyMzAxLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWlu
dAogICAgIGNvbnN0IENvbG9yJiBydWxlQ29sb3IgPSBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50
Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3IpOwogICAgIGJvb2wgcnVsZVRy
YW5zcGFyZW50ID0gc3R5bGUoKS0+Y29sdW1uUnVsZUlzVHJhbnNwYXJlbnQoKTsKICAgICBFQm9y
ZGVyU3R5bGUgcnVsZVN0eWxlID0gc3R5bGUoKS0+Y29sdW1uUnVsZVN0eWxlKCk7Ci0gICAgaW50
IHJ1bGVXaWR0aCA9IHN0eWxlKCktPmNvbHVtblJ1bGVXaWR0aCgpOwotICAgIGludCBjb2xHYXAg
PSBjb2x1bW5HYXAoKTsKKyAgICBMYXlvdXRVbml0IHJ1bGVXaWR0aCA9IHN0eWxlKCktPmNvbHVt
blJ1bGVXaWR0aCgpOworICAgIExheW91dFVuaXQgY29sR2FwID0gY29sdW1uR2FwKCk7CiAgICAg
Ym9vbCByZW5kZXJSdWxlID0gcnVsZVN0eWxlID4gQkhJRERFTiAmJiAhcnVsZVRyYW5zcGFyZW50
ICYmIHJ1bGVXaWR0aCA8PSBjb2xHYXA7CiAgICAgaWYgKCFyZW5kZXJSdWxlKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMzEwLDkgKzIzMTAsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVt
blJ1bGVzKFBhaW50CiAgICAgLy8gV2UgbmVlZCB0byBkbyBtdWx0aXBsZSBwYXNzZXMsIGJyZWFr
aW5nIHVwIG91ciBjaGlsZCBwYWludGluZyBpbnRvIHN0cmlwcy4KICAgICBDb2x1bW5JbmZvKiBj
b2xJbmZvID0gY29sdW1uSW5mbygpOwogICAgIHVuc2lnbmVkIGNvbENvdW50ID0gY29sdW1uQ291
bnQoY29sSW5mbyk7Ci0gICAgaW50IGN1cnJMb2dpY2FsTGVmdE9mZnNldCA9IHN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IDAgOiBjb250ZW50TG9naWNhbFdpZHRoKCk7Ci0gICAg
aW50IHJ1bGVBZGQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKTsKLSAgICBpbnQgcnVs
ZUxvZ2ljYWxMZWZ0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gMCA6IGNv
bnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGN1cnJMb2dpY2FsTGVmdE9mZnNl
dCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IDAgOiBjb250ZW50TG9naWNh
bFdpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBydWxlQWRkID0gbG9naWNhbExlZnRPZmZzZXRGb3JD
b250ZW50KCk7CisgICAgTGF5b3V0VW5pdCBydWxlTG9naWNhbExlZnQgPSBzdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyAwIDogY29udGVudExvZ2ljYWxXaWR0aCgpOwogCiAgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdXJyZW50Q1RNID0gcGFpbnRJbmZvLmNvbnRleHQtPmdl
dENUTSgpOwogICAgIGJvb2wgYW50aWFsaWFzID0gIWN1cnJlbnRDVE0uaXNJZGVudGl0eU9yVHJh
bnNsYXRpb25PckZsaXBwZWQoKTsKQEAgLTIzMjAsNyArMjMyMCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnQKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y29sQ291bnQ7IGkrKykgewogICAgICAgICBMYXlvdXRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0
QXQoY29sSW5mbywgaSk7CiAKLSAgICAgICAgaW50IGlubGluZURpcmVjdGlvblNpemUgPSBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gY29sUmVjdC53aWR0aCgpIDogY29sUmVjdC5oZWlnaHQo
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rpb25TaXplID0gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGNvbFJlY3Qud2lkdGgoKSA6IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHBvc2l0aW9uLgogICAgICAgICBpZiAo
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CkBAIC0yMzMzLDEwICsyMzMzLDEw
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uUnVsZXMoUGFpbnQKICAgICAgICAKICAg
ICAgICAgLy8gTm93IHBhaW50IHRoZSBjb2x1bW4gcnVsZS4KICAgICAgICAgaWYgKGkgPCBjb2xD
b3VudCAtIDEpIHsKLSAgICAgICAgICAgIGludCBydWxlTGVmdCA9IGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBwYWludE9mZnNldC54KCkgKyBydWxlTG9naWNhbExlZnQgLSBydWxlV2lkdGgg
LyAyICsgcnVsZUFkZCA6IHBhaW50T2Zmc2V0LngoKSArIGJvcmRlckJlZm9yZSgpICsgcGFkZGlu
Z0JlZm9yZSgpOwotICAgICAgICAgICAgaW50IHJ1bGVSaWdodCA9IGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBydWxlTGVmdCArIHJ1bGVXaWR0aCA6IHJ1bGVMZWZ0ICsgY29udGVudFdpZHRo
KCk7Ci0gICAgICAgICAgICBpbnQgcnVsZVRvcCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBwYWludE9mZnNldC55KCkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSA6IHBhaW50T2Zm
c2V0LnkoKSArIHJ1bGVMb2dpY2FsTGVmdCAtIHJ1bGVXaWR0aCAvIDIgKyBydWxlQWRkOwotICAg
ICAgICAgICAgaW50IHJ1bGVCb3R0b20gPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gcnVs
ZVRvcCArIGNvbnRlbnRIZWlnaHQoKSA6IHJ1bGVUb3AgKyBydWxlV2lkdGg7CisgICAgICAgICAg
ICBMYXlvdXRVbml0IHJ1bGVMZWZ0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHBhaW50
T2Zmc2V0LngoKSArIHJ1bGVMb2dpY2FsTGVmdCAtIHJ1bGVXaWR0aCAvIDIgKyBydWxlQWRkIDog
cGFpbnRPZmZzZXQueCgpICsgYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCk7CisgICAg
ICAgICAgICBMYXlvdXRVbml0IHJ1bGVSaWdodCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBydWxlTGVmdCArIHJ1bGVXaWR0aCA6IHJ1bGVMZWZ0ICsgY29udGVudFdpZHRoKCk7CisgICAg
ICAgICAgICBMYXlvdXRVbml0IHJ1bGVUb3AgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
cGFpbnRPZmZzZXQueSgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgOiBwYWludE9mZnNl
dC55KCkgKyBydWxlTG9naWNhbExlZnQgLSBydWxlV2lkdGggLyAyICsgcnVsZUFkZDsKKyAgICAg
ICAgICAgIExheW91dFVuaXQgcnVsZUJvdHRvbSA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBydWxlVG9wICsgY29udGVudEhlaWdodCgpIDogcnVsZVRvcCArIHJ1bGVXaWR0aDsKICAgICAg
ICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShwYWludEluZm8uY29udGV4dCwgcnVsZUxlZnQsIHJ1
bGVUb3AsIHJ1bGVSaWdodCwgcnVsZUJvdHRvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBCU0xlZnQgOiBCU1JpZ2h0
LCBydWxlQ29sb3IsIHJ1bGVTdHlsZSwgMCwgMCwgYW50aWFsaWFzKTsKICAgICAgICAgfQpAQCAt
MjM0NSw3ICsyMzQ1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5SdWxlcyhQYWlu
dAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBib29sIHBhaW50
aW5nRmxvYXRzKQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyhQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBib29sIHBhaW50
aW5nRmxvYXRzKQogewogICAgIC8vIFdlIG5lZWQgdG8gZG8gbXVsdGlwbGUgcGFzc2VzLCBicmVh
a2luZyB1cCBvdXIgY2hpbGQgcGFpbnRpbmcgaW50byBzdHJpcHMuCiAgICAgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CkBAIC0yMzUzLDEzICsyMzUzLDEzIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29sdW1uQ29udGVudHMoUGEKICAgICB1bnNpZ25lZCBj
b2xDb3VudCA9IGNvbHVtbkNvdW50KGNvbEluZm8pOwogICAgIGlmICghY29sQ291bnQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBpbnQgY3VyckxvZ2ljYWxUb3BPZmZzZXQgPSAwOworICAgIExheW91
dFVuaXQgY3VyckxvZ2ljYWxUb3BPZmZzZXQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb2xDb3VudDsgaSsrKSB7CiAgICAgICAgIC8vIEZvciBlYWNoIHJlY3QsIHdlIGNsaXAg
dG8gdGhlIHJlY3QsIGFuZCB0aGVuIHdlIGFkanVzdCBvdXIgY29vcmRzLgogICAgICAgICBMYXlv
dXRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGZsaXBG
b3JXcml0aW5nTW9kZShjb2xSZWN0KTsKLSAgICAgICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0g
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb2xSZWN0LngoKSA6IGNvbFJlY3QueSgpKSAt
IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwotICAgICAgICBJbnRTaXplIG9mZnNldCA9
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBJbnRTaXplKGxvZ2ljYWxMZWZ0T2Zmc2V0LCBj
dXJyTG9naWNhbFRvcE9mZnNldCkgOiBJbnRTaXplKGN1cnJMb2dpY2FsVG9wT2Zmc2V0LCBsb2dp
Y2FsTGVmdE9mZnNldCk7CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbFJlY3QueCgpIDogY29sUmVjdC55KCkpIC0g
bG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KCk7CisgICAgICAgIExheW91dFNpemUgb2Zmc2V0
ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IExheW91dFNpemUobG9naWNhbExlZnRPZmZz
ZXQsIGN1cnJMb2dpY2FsVG9wT2Zmc2V0KSA6IExheW91dFNpemUoY3VyckxvZ2ljYWxUb3BPZmZz
ZXQsIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKICAgICAgICAgY29sUmVjdC5tb3ZlQnkocGFpbnRPZmZz
ZXQpOwogICAgICAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOwogICAgICAgICBpbmZvLnJl
Y3QuaW50ZXJzZWN0KGNvbFJlY3QpOwpAQCAtMjM3MiwxNCArMjM3MiwxNCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludENvbHVtbkNvbnRlbnRzKFBhCiAgICAgICAgICAgICBjb250ZXh0LT5jbGlw
KGNvbFJlY3QpOwogCiAgICAgICAgICAgICAvLyBBZGp1c3Qgb3VyIHggYW5kIHkgd2hlbiBwYWlu
dGluZy4KLSAgICAgICAgICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9m
ZnNldCArIG9mZnNldDsKKyAgICAgICAgICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZz
ZXQgPSBwYWludE9mZnNldCArIG9mZnNldDsKICAgICAgICAgICAgIGlmIChwYWludGluZ0Zsb2F0
cykKICAgICAgICAgICAgICAgICBwYWludEZsb2F0cyhpbmZvLCBhZGp1c3RlZFBhaW50T2Zmc2V0
LCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbiB8fCBwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZVRleHRDbGlwKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBwYWludENvbnRlbnRzKGluZm8sIGFkanVzdGVkUGFpbnRPZmZzZXQpOwogICAgICAgICB9
CiAKLSAgICAgICAgaW50IGJsb2NrRGVsdGEgPSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/
IGNvbFJlY3QuaGVpZ2h0KCkgOiBjb2xSZWN0LndpZHRoKCkpOworICAgICAgICBMYXlvdXRVbml0
IGJsb2NrRGVsdGEgPSAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbFJlY3QuaGVpZ2h0
KCkgOiBjb2xSZWN0LndpZHRoKCkpOwogICAgICAgICBpZiAoc3R5bGUoKS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAgIGN1cnJMb2dpY2FsVG9wT2Zmc2V0ICs9IGJs
b2NrRGVsdGE7CiAgICAgICAgIGVsc2UKQEAgLTIzODcsNyArMjM4Nyw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnBhaW50Q29sdW1uQ29udGVudHMoUGEKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBw
YWludE9mZnNldCkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICAvLyBBdm9p
ZCBwYWludGluZyBkZXNjZW5kYW50cyBvZiB0aGUgcm9vdCBlbGVtZW50IHdoZW4gc3R5bGVzaGVl
dHMgaGF2ZW4ndCBsb2FkZWQuICBUaGlzIGVsaW1pbmF0ZXMgRk9VQy4KICAgICAvLyBJdCdzIG9r
IG5vdCB0byBkcmF3LCBiZWNhdXNlIGxhdGVyIG9uLCB3aGVuIGFsbCB0aGUgc3R5bGVzaGVldHMg
ZG8gbG9hZCwgdXBkYXRlU3R5bGVTZWxlY3RvciBvbiB0aGUgRG9jdW1lbnQKQEAgLTI0MDEsNyAr
MjQwMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmYKICAgICAg
ICAgcGFpbnRDaGlsZHJlbihwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKIH0KIAotdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9p
bnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIFBh
aW50UGhhc2UgbmV3UGhhc2UgPSAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDaGlsZE91
dGxpbmVzKSA/IFBhaW50UGhhc2VPdXRsaW5lIDogcGFpbnRJbmZvLnBoYXNlOwogICAgIG5ld1Bo
YXNlID0gKG5ld1BoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpID8gUGFp
bnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kIDogbmV3UGhhc2U7CkBAIC0yNDE5LDcgKzI0MTks
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgZm9yIChS
ZW5kZXJCb3gqIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmdCb3goKSkgeyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJy
ZWFrLWJlZm9yZTogYWx3YXlzLCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgogICAg
ICAgICBib29sIGNoZWNrQmVmb3JlQWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKHVzZVBy
aW50UmVjdCAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMp
OwotICAgICAgICBpbnQgYWJzb2x1dGVDaGlsZFkgPSBwYWludE9mZnNldC55KCkgKyBjaGlsZC0+
eSgpOworICAgICAgICBMYXlvdXRVbml0IGFic29sdXRlQ2hpbGRZID0gcGFpbnRPZmZzZXQueSgp
ICsgY2hpbGQtPnkoKTsKICAgICAgICAgaWYgKGNoZWNrQmVmb3JlQWx3YXlzCiAgICAgICAgICAg
ICAmJiBhYnNvbHV0ZUNoaWxkWSA+IHBhaW50SW5mby5yZWN0LnkoKQogICAgICAgICAgICAgJiYg
YWJzb2x1dGVDaGlsZFkgPCBwYWludEluZm8ucmVjdC5tYXhZKCkpIHsKQEAgLTI0MzgsNyArMjQz
OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEludFBvaW50IGNoaWxkUG9pbnQgPSBmbGlwRm9y
V3JpdGluZ01vZGUoY2hpbGQsIHBhaW50T2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1
c3RtZW50KTsKKyAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBGb3JXcml0aW5n
TW9kZShjaGlsZCwgcGFpbnRPZmZzZXQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQp
OwogICAgICAgICBpZiAoIWNoaWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFjaGlsZC0+
aXNGbG9hdGluZygpKQogICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIGNoaWxkUG9pbnQp
OwogCkBAIC0yNDUzLDcgKzI0NTMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVu
KFBhaW50SW5mCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpwYWludENhcmV0KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIENhcmV0VHlwZSB0
eXBlKQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDYXJldChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBDYXJldFR5cGUgdHlwZSkKIHsKICAgICAv
LyBQYWludCB0aGUgY2FyZXQgaWYgdGhlIEZyYW1lU2VsZWN0aW9uIHNheXMgc28gb3IgaWYgY2Fy
ZXQgYnJvd3NpbmcgaXMgZW5hYmxlZAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IGZyYW1lKCkt
PnNldHRpbmdzKCkgJiYgZnJhbWUoKS0+c2V0dGluZ3MoKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQo
KTsKQEAgLTI0NzAsNyArMjQ3MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2FyZXQoUGFp
bnRJbmZvJiAKICAgICBpZiAoY2FyZXRQYWludGVyID09IHRoaXMgJiYgKGlzQ29udGVudEVkaXRh
YmxlIHx8IGNhcmV0QnJvd3NpbmcpKSB7CiAgICAgICAgIC8vIENvbnZlcnQgdGhlIHBhaW50aW5n
IG9mZnNldCBpbnRvIHRoZSBsb2NhbCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGlzIHJlbmRlcmVy
LAogICAgICAgICAvLyB0byBtYXRjaCB0aGUgbG9jYWxDYXJldFJlY3QgY29tcHV0ZWQgYnkgdGhl
IEZyYW1lU2VsZWN0aW9uCi0gICAgICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBw
YWludE9mZnNldDsKKyAgICAgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBh
aW50T2Zmc2V0OwogICAgICAgICBvZmZzZXRGb3JDb250ZW50cyhhZGp1c3RlZFBhaW50T2Zmc2V0
KTsKIAogICAgICAgICBpZiAodHlwZSA9PSBDdXJzb3JDYXJldCkKQEAgLTI1MzAsNyArMjUzMCw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYKIAogICAgIC8vIDUu
IHBhaW50IG91dGxpbmUuCiAgICAgaWYgKChwYWludFBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5l
IHx8IHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBoYXNPdXRsaW5lKCkg
JiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCi0gICAgICAgIHBhaW50T3V0bGlu
ZShwYWludEluZm8uY29udGV4dCwgSW50UmVjdChwYWludE9mZnNldCwgc2l6ZSgpKSk7CisgICAg
ICAgIHBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgTGF5b3V0UmVjdChwYWludE9mZnNl
dCwgc2l6ZSgpKSk7CiAKICAgICAvLyA2LiBwYWludCBjb250aW51YXRpb24gb3V0bGluZXMuCiAg
ICAgaWYgKChwYWludFBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50UGhhc2UgPT0g
UGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpKSB7CkBAIC0yNTc3LDcgKzI1NzcsNyBAQCBJbnRQb2lu
dCBSZW5kZXJCbG9jazo6ZmxpcEZsb2F0Rm9yV3JpdGluCiAgICAgcmV0dXJuIEludFBvaW50KHBv
aW50LngoKSArIHdpZHRoKCkgLSBjaGlsZC0+d2lkdGgoKSAtIDIgKiB4UG9zaXRpb25Gb3JGbG9h
dEluY2x1ZGluZ01hcmdpbihjaGlsZCksIHBvaW50LnkoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFp
bnRPZmZzZXQsIGJvb2wgcHJlc2VydmVQaGFzZSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Rmxv
YXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
IGJvb2wgcHJlc2VydmVQaGFzZSkKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTkwLDcgKzI1OTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWlu
dEZsb2F0cyhQYWludEluZm8mCiAgICAgICAgIGlmIChyLT5tX3Nob3VsZFBhaW50ICYmICFyLT5t
X3JlbmRlcmVyLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBQYWludElu
Zm8gY3VycmVudFBhaW50SW5mbyhwYWludEluZm8pOwogICAgICAgICAgICAgY3VycmVudFBhaW50
SW5mby5waGFzZSA9IHByZXNlcnZlUGhhc2UgPyBwYWludEluZm8ucGhhc2UgOiBQYWludFBoYXNl
QmxvY2tCYWNrZ3JvdW5kOwotICAgICAgICAgICAgSW50UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBG
bG9hdEZvcldyaXRpbmdNb2RlKHIsIEludFBvaW50KHBhaW50T2Zmc2V0LngoKSArIHhQb3NpdGlv
bkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+bV9yZW5kZXJlci0+eCgpLCBwYWludE9m
ZnNldC55KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPm1fcmVu
ZGVyZXItPnkoKSkpOworICAgICAgICAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9IGZsaXBG
bG9hdEZvcldyaXRpbmdNb2RlKHIsIExheW91dFBvaW50KHBhaW50T2Zmc2V0LngoKSArIHhQb3Np
dGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+bV9yZW5kZXJlci0+eCgpLCBwYWlu
dE9mZnNldC55KCkgKyB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSAtIHItPm1f
cmVuZGVyZXItPnkoKSkpOwogICAgICAgICAgICAgci0+bV9yZW5kZXJlci0+cGFpbnQoY3VycmVu
dFBhaW50SW5mbywgY2hpbGRQb2ludCk7CiAgICAgICAgICAgICBpZiAoIXByZXNlcnZlUGhhc2Up
IHsKICAgICAgICAgICAgICAgICBjdXJyZW50UGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUNo
aWxkQmxvY2tCYWNrZ3JvdW5kczsKQEAgLTI2MDYsNyArMjYwNiw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6
OnBhaW50RWxsaXBzaXNCb3hlcyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQm
IHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRFbGxpcHNpc0JveGVzKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAg
aWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpIHx8ICFmaXJzdExpbmVC
b3goKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxNCw4ICsyNjE0LDggQEAgdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRFbGxpcHNpc0JveGVzKFBhaQogICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5
KCkgPT0gVklTSUJMRSAmJiBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQp
IHsKICAgICAgICAgLy8gV2UgY2FuIGNoZWNrIHRoZSBmaXJzdCBib3ggYW5kIGxhc3QgYm94IGFu
ZCBhdm9pZCBwYWludGluZyBpZiB3ZSBkb24ndAogICAgICAgICAvLyBpbnRlcnNlY3QuCi0gICAg
ICAgIGludCB5UG9zID0gcGFpbnRPZmZzZXQueSgpICsgZmlyc3RMaW5lQm94KCktPnkoKTsKLSAg
ICAgICAgaW50IGggPSBsYXN0TGluZUJveCgpLT55KCkgKyBsYXN0TGluZUJveCgpLT5sb2dpY2Fs
SGVpZ2h0KCkgLSBmaXJzdExpbmVCb3goKS0+eSgpOworICAgICAgICBMYXlvdXRVbml0IHlQb3Mg
PSBwYWludE9mZnNldC55KCkgKyBmaXJzdExpbmVCb3goKS0+eSgpOworICAgICAgICBMYXlvdXRV
bml0IGggPSBsYXN0TGluZUJveCgpLT55KCkgKyBsYXN0TGluZUJveCgpLT5sb2dpY2FsSGVpZ2h0
KCkgLSBmaXJzdExpbmVCb3goKS0+eSgpOwogICAgICAgICBpZiAoeVBvcyA+PSBwYWludEluZm8u
cmVjdC5tYXhZKCkgfHwgeVBvcyArIGggPD0gcGFpbnRJbmZvLnJlY3QueSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCkBAIC0yNjgzLDcgKzI2ODMsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwYWlu
dHNDb250aW51YXRpb25PdXRsCiAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbnMtPmNvbnRhaW5zKGZs
b3cpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpwYWludENvbnRpbnVhdGlvbk91dGxpbmVzKFBh
aW50SW5mbyYgaW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRDb250aW51YXRpb25PdXRsaW5lcyhQYWludEluZm8mIGluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBDb250aW51YXRpb25PdXRsaW5lVGFibGVN
YXAqIHRhYmxlID0gY29udGludWF0aW9uT3V0bGluZVRhYmxlKCk7CiAgICAgaWYgKHRhYmxlLT5p
c0VtcHR5KCkpCkBAIC0yNjkzLDcgKzI2OTMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENv
bnRpbnVhdGlvbk91dGxpCiAgICAgaWYgKCFjb250aW51YXRpb25zKQogICAgICAgICByZXR1cm47
CiAKLSAgICBJbnRQb2ludCBhY2N1bXVsYXRlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Cisg
ICAgTGF5b3V0UG9pbnQgYWNjdW11bGF0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwogICAg
IC8vIFBhaW50IGVhY2ggY29udGludWF0aW9uIG91dGxpbmUuCiAgICAgTGlzdEhhc2hTZXQ8UmVu
ZGVySW5saW5lKj46Oml0ZXJhdG9yIGVuZCA9IGNvbnRpbnVhdGlvbnMtPmVuZCgpOwogICAgIGZv
ciAoTGlzdEhhc2hTZXQ8UmVuZGVySW5saW5lKj46Oml0ZXJhdG9yIGl0ID0gY29udGludWF0aW9u
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC0yNzYxLDIwICsyNzYxLDIwIEBAIEdh
cFJlY3RzIFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBSZWN0c0YKICAgICByZXR1cm4gc2VsZWN0
aW9uR2Fwcyh0aGlzLCBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lciwgSW50U2l6ZSgpLCBsYXN0
VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0KTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRT
ZWxlY3Rpb24oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNl
dCkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKHNob3VsZFBhaW50
U2VsZWN0aW9uR2FwcygpICYmIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkgewotICAgICAgICBpbnQgbGFzdFRvcCA9IDA7Ci0gICAgICAgIGludCBsYXN0TGVmdCA9IGxv
Z2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwotICAgICAgICBpbnQgbGFz
dFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOworICAg
ICAgICBMYXlvdXRVbml0IGxhc3RUb3AgPSAwOworICAgICAgICBMYXlvdXRVbml0IGxhc3RMZWZ0
ID0gbG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQodGhpcywgbGFzdFRvcCk7CisgICAgICAgIExh
eW91dFVuaXQgbGFzdFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxh
c3RUb3ApOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnBh
aW50SW5mby5jb250ZXh0KTsKIAotICAgICAgICBJbnRSZWN0IGdhcFJlY3RzQm91bmRzID0gc2Vs
ZWN0aW9uR2Fwcyh0aGlzLCBwYWludE9mZnNldCwgSW50U2l6ZSgpLCBsYXN0VG9wLCBsYXN0TGVm
dCwgbGFzdFJpZ2h0LCAmcGFpbnRJbmZvKTsKKyAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0c0Jv
dW5kcyA9IHNlbGVjdGlvbkdhcHModGhpcywgcGFpbnRPZmZzZXQsIExheW91dFNpemUoKSwgbGFz
dFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgJnBhaW50SW5mbyk7CiAgICAgICAgIGlmICghZ2Fw
UmVjdHNCb3VuZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxh
eWVyID0gZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRz
Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIGlmICghaGFzTGF5ZXIoKSkg
ewotICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IGxvY2FsQm91bmRzKGdhcFJlY3RzQm91bmRz
KTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kcyhnYXBSZWN0c0Jv
dW5kcyk7CiAgICAgICAgICAgICAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhbEJvdW5k
cyk7CiAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5l
clF1YWQoRmxvYXRSZWN0KGxvY2FsQm91bmRzKSwgbGF5ZXItPnJlbmRlcmVyKCkpLmVuY2xvc2lu
Z0JvdW5kaW5nQm94KCk7CiAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmUo
bGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA5MDU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsMTQgKzU2MiwxNCBA
QCBwcml2YXRlOgogCiAgICAgLy8gRW5kIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIFJlbmRlckJs
b2NrTGluZUxheW91dC5jcHAuCiAKLSAgICB2b2lkIHBhaW50RmxvYXRzKFBhaW50SW5mbyYsIGNv
bnN0IEludFBvaW50JiwgYm9vbCBwcmVzZXJ2ZVBoYXNlID0gZmFsc2UpOwotICAgIHZvaWQgcGFp
bnRDb250ZW50cyhQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYpOwotICAgIHZvaWQgcGFpbnRD
b2x1bW5Db250ZW50cyhQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGJvb2wgcGFpbnRGbG9h
dHMgPSBmYWxzZSk7Ci0gICAgdm9pZCBwYWludENvbHVtblJ1bGVzKFBhaW50SW5mbyYsIGNvbnN0
IEludFBvaW50Jik7Ci0gICAgdm9pZCBwYWludENoaWxkcmVuKFBhaW50SW5mbyYsIGNvbnN0IElu
dFBvaW50Jik7Ci0gICAgdm9pZCBwYWludEVsbGlwc2lzQm94ZXMoUGFpbnRJbmZvJiwgY29uc3Qg
SW50UG9pbnQmKTsKLSAgICB2b2lkIHBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYsIGNvbnN0IElu
dFBvaW50Jik7Ci0gICAgdm9pZCBwYWludENhcmV0KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50
JiwgQ2FyZXRUeXBlKTsKKyAgICB2b2lkIHBhaW50RmxvYXRzKFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50JiwgYm9vbCBwcmVzZXJ2ZVBoYXNlID0gZmFsc2UpOworICAgIHZvaWQgcGFpbnRD
b250ZW50cyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgcGFpbnRD
b2x1bW5Db250ZW50cyhQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIGJvb2wgcGFpbnRG
bG9hdHMgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludENvbHVtblJ1bGVzKFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7CisgICAgdm9pZCBwYWludENoaWxkcmVuKFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jik7CisgICAgdm9pZCBwYWludEVsbGlwc2lzQm94ZXMoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50U2VsZWN0aW9uKFBhaW50SW5m
byYsIGNvbnN0IExheW91dFBvaW50Jik7CisgICAgdm9pZCBwYWludENhcmV0KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50JiwgQ2FyZXRUeXBlKTsKIAogICAgIEZsb2F0aW5nT2JqZWN0KiBp
bnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqKTsKICAgICB2b2lkIHJlbW92ZUZsb2F0aW5n
T2JqZWN0KFJlbmRlckJveCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzksNyArMTA3OSw3IEBAIGJvb2wgUmVuZGVy
Qm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWcKIAogI2lmIFBMQVRGT1JNKE1BQykKIAotdm9p
ZCBSZW5kZXJCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IEludFBvaW50JiBwYWludE9m
ZnNldCwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGJlaGluZFRleHQpCit2b2lkIFJl
bmRlckJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgYmVoaW5kVGV4dCkKIHsKICAgICBG
cmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA5MDU5MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDcgKzQy
MCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50TWFza0ltYWdlcyhjb25zdCBQYWludElu
Zm8mLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBw
YWludEN1c3RvbUhpZ2hsaWdodChjb25zdCBJbnRQb2ludCYsIGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSwgYm9vbCBiZWhpbmRUZXh0KTsKKyAgICB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KGNv
bnN0IExheW91dFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGJlaGluZFRl
eHQpOwogI2VuZGlmCiAKICAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNp
b24gOTA1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2Myw3ICsxMzYzLDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFk
ZEZvY3VzUmluZ1JlY3RzKFZlYwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50
T3V0bGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UG9pbnQm
IHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZShHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQog
ewogICAgIGlmICghaGFzT3V0bGluZSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzgyLDE2ICsx
MzgyLDE2IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmUoR3JhcGhpY3MKICAgICBp
ZiAoc3R5bGVUb1VzZS0+b3V0bGluZVN0eWxlSXNBdXRvKCkgfHwgc3R5bGVUb1VzZS0+b3V0bGlu
ZVN0eWxlKCkgPT0gQk5PTkUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxJbnRSZWN0
PiByZWN0czsKKyAgICBWZWN0b3I8TGF5b3V0UmVjdD4gcmVjdHM7CiAKLSAgICByZWN0cy5hcHBl
bmQoSW50UmVjdCgpKTsKKyAgICByZWN0cy5hcHBlbmQoTGF5b3V0UmVjdCgpKTsKICAgICBmb3Ig
KElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnIt
Pm5leHRMaW5lQm94KCkpIHsKICAgICAgICAgUm9vdElubGluZUJveCogcm9vdCA9IGN1cnItPnJv
b3QoKTsKLSAgICAgICAgaW50IHRvcCA9IG1heChyb290LT5saW5lVG9wKCksIGN1cnItPmxvZ2lj
YWxUb3AoKSk7Ci0gICAgICAgIGludCBib3R0b20gPSBtaW4ocm9vdC0+bGluZUJvdHRvbSgpLCBj
dXJyLT5sb2dpY2FsQm90dG9tKCkpOwotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdChjdXJy
LT54KCksIHRvcCwgY3Vyci0+bG9naWNhbFdpZHRoKCksIGJvdHRvbSAtIHRvcCkpOworICAgICAg
ICBMYXlvdXRVbml0IHRvcCA9IG1heChyb290LT5saW5lVG9wKCksIGN1cnItPmxvZ2ljYWxUb3Ao
KSk7CisgICAgICAgIExheW91dFVuaXQgYm90dG9tID0gbWluKHJvb3QtPmxpbmVCb3R0b20oKSwg
Y3Vyci0+bG9naWNhbEJvdHRvbSgpKTsKKyAgICAgICAgcmVjdHMuYXBwZW5kKExheW91dFJlY3Qo
Y3Vyci0+eCgpLCB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0b20gLSB0b3ApKTsKICAg
ICB9Ci0gICAgcmVjdHMuYXBwZW5kKEludFJlY3QoKSk7CisgICAgcmVjdHMuYXBwZW5kKExheW91
dFJlY3QoKSk7CiAKICAgICBDb2xvciBvdXRsaW5lQ29sb3IgPSBzdHlsZVRvVXNlLT52aXNpdGVk
RGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IpOwogLy8gRklYTUU6IFVzaW5n
IGEgdHJhbnNwYXJlbmN5IGxheWVyIGZvciByZ2JhIG91dGxpbmVzIGV4YWNlcmJhdGVzIGFuIGV4
aXN0aW5nIFNLSUEgYnVnLiBUaGUgI2lmCkBAIC0xNDE1LDkwICsxNDE1LDkwIEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpwYWludE91dGxpbmUoR3JhcGhpY3MKICNlbmRpZgogfQogCi12b2lkIFJlbmRl
cklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgbGFzdGxpbmUsIGNvbnN0IEludFJlY3Qm
IHRoaXNsaW5lLCBjb25zdCBJbnRSZWN0JiBuZXh0bGluZSwKK3ZvaWQgUmVuZGVySW5saW5lOjpw
YWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBsYXN0bGluZSwgY29uc3QgTGF5b3V0UmVjdCYg
dGhpc2xpbmUsIGNvbnN0IExheW91dFJlY3QmIG5leHRsaW5lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29sb3Igb3V0bGluZUNvbG9yKQogewogICAgIFJl
bmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAgICBpbnQgb3cgPSBzdHlsZVRvVXNl
LT5vdXRsaW5lV2lkdGgoKTsKLSAgICBFQm9yZGVyU3R5bGUgb3MgPSBzdHlsZVRvVXNlLT5vdXRs
aW5lU3R5bGUoKTsKKyAgICBMYXlvdXRVbml0IG91dGxpbmVXaWR0aCA9IHN0eWxlVG9Vc2UtPm91
dGxpbmVXaWR0aCgpOworICAgIEVCb3JkZXJTdHlsZSBvdXRsaW5lU3R5bGUgPSBzdHlsZVRvVXNl
LT5vdXRsaW5lU3R5bGUoKTsKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3VycmVudENU
TSA9IGdyYXBoaWNzQ29udGV4dC0+Z2V0Q1RNKCk7CiAgICAgYm9vbCBhbnRpYWxpYXMgPSAhY3Vy
cmVudENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpOwogCi0gICAgaW50IG9m
ZnNldCA9IHN0eWxlKCktPm91dGxpbmVPZmZzZXQoKTsKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9
IHN0eWxlKCktPm91dGxpbmVPZmZzZXQoKTsKIAotICAgIGludCB0ID0gcGFpbnRPZmZzZXQueSgp
ICsgdGhpc2xpbmUueSgpIC0gb2Zmc2V0OwotICAgIGludCBsID0gcGFpbnRPZmZzZXQueCgpICsg
dGhpc2xpbmUueCgpIC0gb2Zmc2V0OwotICAgIGludCBiID0gcGFpbnRPZmZzZXQueSgpICsgdGhp
c2xpbmUubWF4WSgpICsgb2Zmc2V0OwotICAgIGludCByID0gcGFpbnRPZmZzZXQueCgpICsgdGhp
c2xpbmUubWF4WCgpICsgb2Zmc2V0OworICAgIExheW91dFVuaXQgdG9wID0gcGFpbnRPZmZzZXQu
eSgpICsgdGhpc2xpbmUueSgpIC0gb2Zmc2V0OworICAgIExheW91dFVuaXQgbGVmdCA9IHBhaW50
T2Zmc2V0LngoKSArIHRoaXNsaW5lLngoKSAtIG9mZnNldDsKKyAgICBMYXlvdXRVbml0IGJvdHRv
bSA9IHBhaW50T2Zmc2V0LnkoKSArIHRoaXNsaW5lLm1heFkoKSArIG9mZnNldDsKKyAgICBMYXlv
dXRVbml0IHJpZ2h0ID0gcGFpbnRPZmZzZXQueCgpICsgdGhpc2xpbmUubWF4WCgpICsgb2Zmc2V0
OwogICAgIAogICAgIC8vIGxlZnQgZWRnZQogICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGlj
c0NvbnRleHQsCi0gICAgICAgICAgICAgICBsIC0gb3csCi0gICAgICAgICAgICAgICB0IC0gKGxh
c3RsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3Rs
aW5lLm1heFgoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogMCksCi0gICAgICAgICAgICAg
ICBsLAotICAgICAgICAgICAgICAgYiArIChuZXh0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUu
eCgpIDw9IG5leHRsaW5lLngoKSB8fCAobmV4dGxpbmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUu
eCgpID8gb3cgOiAwKSwKLSAgICAgICAgICAgICAgIEJTTGVmdCwKLSAgICAgICAgICAgICAgIG91
dGxpbmVDb2xvciwgb3MsCi0gICAgICAgICAgICAgICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRo
aXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgpIC0gMSkgPD0gdGhp
c2xpbmUueCgpID8gb3cgOiAtb3cpLAotICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1wdHko
KSB8fCB0aGlzbGluZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5tYXhYKCkgLSAx
KSA8PSB0aGlzbGluZS54KCkgPyBvdyA6IC1vdyksCi0gICAgICAgICAgICAgICBhbnRpYWxpYXMp
OworICAgICAgICBsZWZ0IC0gb3V0bGluZVdpZHRoLAorICAgICAgICB0b3AgLSAobGFzdGxpbmUu
aXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUubWF4
WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3V0bGluZVdpZHRoIDogMCksCisgICAgICAgIGxl
ZnQsCisgICAgICAgIGJvdHRvbSArIChuZXh0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgp
IDw9IG5leHRsaW5lLngoKSB8fCAobmV4dGxpbmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgp
ID8gb3V0bGluZVdpZHRoIDogMCksCisgICAgICAgIEJTTGVmdCwKKyAgICAgICAgb3V0bGluZUNv
bG9yLCBvdXRsaW5lU3R5bGUsCisgICAgICAgIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xp
bmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGlu
ZS54KCkgPyBvdXRsaW5lV2lkdGggOiAtb3V0bGluZVdpZHRoKSwKKyAgICAgICAgKG5leHRsaW5l
LmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5t
YXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdXRsaW5lV2lkdGggOiAtb3V0bGluZVdpZHRo
KSwKKyAgICAgICAgYW50aWFsaWFzKTsKICAgICAKICAgICAvLyByaWdodCBlZGdlCiAgICAgZHJh
d0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgICAgIHIsCi0gICAg
ICAgICAgICAgICB0IC0gKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCBsYXN0bGluZS5tYXhYKCkgPCB0
aGlzbGluZS5tYXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IGxhc3RsaW5lLngoKSA/
IG93IDogMCksCi0gICAgICAgICAgICAgICByICsgb3csCi0gICAgICAgICAgICAgICBiICsgKG5l
eHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5tYXhYKCkgPD0gdGhpc2xpbmUubWF4WCgpIHx8
ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBuZXh0bGluZS54KCkgPyBvdyA6IDApLAotICAgICAg
ICAgICAgICAgQlNSaWdodCwKLSAgICAgICAgICAgICAgIG91dGxpbmVDb2xvciwgb3MsCi0gICAg
ICAgICAgICAgICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLm1heFgoKSA8IHRoaXNs
aW5lLm1heFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cg
OiAtb3cpLAotICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5t
YXhYKCkgPD0gdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBuZXh0
bGluZS54KCkgPyBvdyA6IC1vdyksCi0gICAgICAgICAgICAgICBhbnRpYWxpYXMpOworICAgICAg
ICByaWdodCwKKyAgICAgICAgdG9wIC0gKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCBsYXN0bGluZS5t
YXhYKCkgPCB0aGlzbGluZS5tYXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IGxhc3Rs
aW5lLngoKSA/IG91dGxpbmVXaWR0aCA6IDApLAorICAgICAgICByaWdodCArIG91dGxpbmVXaWR0
aCwKKyAgICAgICAgYm90dG9tICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5tYXhY
KCkgPD0gdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBuZXh0bGlu
ZS54KCkgPyBvdXRsaW5lV2lkdGggOiAwKSwKKyAgICAgICAgQlNSaWdodCwKKyAgICAgICAgb3V0
bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsCisgICAgICAgIChsYXN0bGluZS5pc0VtcHR5KCkgfHwg
bGFzdGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAx
KSA8PSBsYXN0bGluZS54KCkgPyBvdXRsaW5lV2lkdGggOiAtb3V0bGluZVdpZHRoKSwKKyAgICAg
ICAgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5tYXhYKCkgPD0gdGhpc2xpbmUubWF4
WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBuZXh0bGluZS54KCkgPyBvdXRsaW5lV2lk
dGggOiAtb3V0bGluZVdpZHRoKSwKKyAgICAgICAgYW50aWFsaWFzKTsKICAgICAvLyB1cHBlciBl
ZGdlCiAgICAgaWYgKHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSkKICAgICAgICAgZHJhd0xp
bmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICBsIC0gb3cs
Ci0gICAgICAgICAgICAgICAgICAgdCAtIG93LAotICAgICAgICAgICAgICAgICAgIG1pbihyK293
LCAobGFzdGxpbmUuaXNFbXB0eSgpID8gMTAwMDAwMCA6IHBhaW50T2Zmc2V0LngoKSArIGxhc3Rs
aW5lLngoKSkpLAotICAgICAgICAgICAgICAgICAgIHQsCi0gICAgICAgICAgICAgICAgICAgQlNU
b3AsIG91dGxpbmVDb2xvciwgb3MsCi0gICAgICAgICAgICAgICAgICAgb3csCi0gICAgICAgICAg
ICAgICAgICAgKCFsYXN0bGluZS5pc0VtcHR5KCkgJiYgcGFpbnRPZmZzZXQueCgpICsgbGFzdGxp
bmUueCgpICsgMSA8IHIgKyBvdykgPyAtb3cgOiBvdywKLSAgICAgICAgICAgICAgICAgICBhbnRp
YWxpYXMpOworICAgICAgICAgICAgbGVmdCAtIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIHRv
cCAtIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIG1pbihyaWdodCArIG91dGxpbmVXaWR0aCwg
KGxhc3RsaW5lLmlzRW1wdHkoKSA/IDEwMDAwMDAgOiBwYWludE9mZnNldC54KCkgKyBsYXN0bGlu
ZS54KCkpKSwKKyAgICAgICAgICAgIHRvcCwKKyAgICAgICAgICAgIEJTVG9wLCBvdXRsaW5lQ29s
b3IsIG91dGxpbmVTdHlsZSwKKyAgICAgICAgICAgIG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAg
ICghbGFzdGxpbmUuaXNFbXB0eSgpICYmIHBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLngoKSAr
IDEgPCByaWdodCArIG91dGxpbmVXaWR0aCkgPyAtb3V0bGluZVdpZHRoIDogb3V0bGluZVdpZHRo
LAorICAgICAgICAgICAgYW50aWFsaWFzKTsKICAgICAKICAgICBpZiAobGFzdGxpbmUubWF4WCgp
IDwgdGhpc2xpbmUubWF4WCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3ND
b250ZXh0LAotICAgICAgICAgICAgICAgICAgIG1heChsYXN0bGluZS5pc0VtcHR5KCkgPyAtMTAw
MDAwMCA6IHBhaW50T2Zmc2V0LngoKSArIGxhc3RsaW5lLm1heFgoKSwgbCAtIG93KSwKLSAgICAg
ICAgICAgICAgICAgICB0IC0gb3csCi0gICAgICAgICAgICAgICAgICAgciArIG93LAotICAgICAg
ICAgICAgICAgICAgIHQsCi0gICAgICAgICAgICAgICAgICAgQlNUb3AsIG91dGxpbmVDb2xvciwg
b3MsCi0gICAgICAgICAgICAgICAgICAgKCFsYXN0bGluZS5pc0VtcHR5KCkgJiYgbCAtIG93IDwg
cGFpbnRPZmZzZXQueCgpICsgbGFzdGxpbmUubWF4WCgpKSA/IC1vdyA6IG93LAotICAgICAgICAg
ICAgICAgICAgIG93LCBhbnRpYWxpYXMpOworICAgICAgICAgICAgbWF4KGxhc3RsaW5lLmlzRW1w
dHkoKSA/IC0xMDAwMDAwIDogcGFpbnRPZmZzZXQueCgpICsgbGFzdGxpbmUubWF4WCgpLCBsZWZ0
IC0gb3V0bGluZVdpZHRoKSwKKyAgICAgICAgICAgIHRvcCAtIG91dGxpbmVXaWR0aCwKKyAgICAg
ICAgICAgIHJpZ2h0ICsgb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgdG9wLAorICAgICAgICAg
ICAgQlNUb3AsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLAorICAgICAgICAgICAgKCFsYXN0
bGluZS5pc0VtcHR5KCkgJiYgbGVmdCAtIG91dGxpbmVXaWR0aCA8IHBhaW50T2Zmc2V0LngoKSAr
IGxhc3RsaW5lLm1heFgoKSkgPyAtb3V0bGluZVdpZHRoIDogb3V0bGluZVdpZHRoLAorICAgICAg
ICAgICAgb3V0bGluZVdpZHRoLCBhbnRpYWxpYXMpOwogICAgIAogICAgIC8vIGxvd2VyIGVkZ2UK
ICAgICBpZiAodGhpc2xpbmUueCgpIDwgbmV4dGxpbmUueCgpKQogICAgICAgICBkcmF3TGluZUZv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICAgICAgICAgICAgIGwgLSBvdywKLSAg
ICAgICAgICAgICAgICAgICBiLAotICAgICAgICAgICAgICAgICAgIG1pbihyICsgb3csICFuZXh0
bGluZS5pc0VtcHR5KCkgPyBwYWludE9mZnNldC54KCkgKyBuZXh0bGluZS54KCkgKyAxIDogMTAw
MDAwMCksCi0gICAgICAgICAgICAgICAgICAgYiArIG93LAotICAgICAgICAgICAgICAgICAgIEJT
Qm90dG9tLCBvdXRsaW5lQ29sb3IsIG9zLAotICAgICAgICAgICAgICAgICAgIG93LAotICAgICAg
ICAgICAgICAgICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYmIHBhaW50T2Zmc2V0LngoKSArIG5l
eHRsaW5lLngoKSArIDEgPCByICsgb3cpID8gLW93IDogb3csCi0gICAgICAgICAgICAgICAgICAg
YW50aWFsaWFzKTsKKyAgICAgICAgICAgIGxlZnQgLSBvdXRsaW5lV2lkdGgsCisgICAgICAgICAg
ICBib3R0b20sCisgICAgICAgICAgICBtaW4ocmlnaHQgKyBvdXRsaW5lV2lkdGgsICFuZXh0bGlu
ZS5pc0VtcHR5KCkgPyBwYWludE9mZnNldC54KCkgKyBuZXh0bGluZS54KCkgKyAxIDogMTAwMDAw
MCksCisgICAgICAgICAgICBib3R0b20gKyBvdXRsaW5lV2lkdGgsCisgICAgICAgICAgICBCU0Jv
dHRvbSwgb3V0bGluZUNvbG9yLCBvdXRsaW5lU3R5bGUsCisgICAgICAgICAgICBvdXRsaW5lV2lk
dGgsCisgICAgICAgICAgICAoIW5leHRsaW5lLmlzRW1wdHkoKSAmJiBwYWludE9mZnNldC54KCkg
KyBuZXh0bGluZS54KCkgKyAxIDwgcmlnaHQgKyBvdXRsaW5lV2lkdGgpID8gLW91dGxpbmVXaWR0
aCA6IG91dGxpbmVXaWR0aCwKKyAgICAgICAgICAgIGFudGlhbGlhcyk7CiAgICAgCiAgICAgaWYg
KG5leHRsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSkKICAgICAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICBtYXgoIW5leHRsaW5l
LmlzRW1wdHkoKSA/IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLm1heFgoKSA6IC0xMDAwMDAw
LCBsIC0gb3cpLAotICAgICAgICAgICAgICAgICAgIGIsCi0gICAgICAgICAgICAgICAgICAgciAr
IG93LAotICAgICAgICAgICAgICAgICAgIGIgKyBvdywKLSAgICAgICAgICAgICAgICAgICBCU0Jv
dHRvbSwgb3V0bGluZUNvbG9yLCBvcywKLSAgICAgICAgICAgICAgICAgICAoIW5leHRsaW5lLmlz
RW1wdHkoKSAmJiBsIC0gb3cgPCBwYWludE9mZnNldC54KCkgKyBuZXh0bGluZS5tYXhYKCkpID8g
LW93IDogb3csCi0gICAgICAgICAgICAgICAgICAgb3csIGFudGlhbGlhcyk7CisgICAgICAgICAg
ICBtYXgoIW5leHRsaW5lLmlzRW1wdHkoKSA/IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLm1h
eFgoKSA6IC0xMDAwMDAwLCBsZWZ0IC0gb3V0bGluZVdpZHRoKSwKKyAgICAgICAgICAgIGJvdHRv
bSwKKyAgICAgICAgICAgIHJpZ2h0ICsgb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgYm90dG9t
ICsgb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgQlNCb3R0b20sIG91dGxpbmVDb2xvciwgb3V0
bGluZVN0eWxlLAorICAgICAgICAgICAgKCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgbGVmdCAtIG91
dGxpbmVXaWR0aCA8IHBhaW50T2Zmc2V0LngoKSArIG5leHRsaW5lLm1heFgoKSkgPyAtb3V0bGlu
ZVdpZHRoIDogb3V0bGluZVdpZHRoLAorICAgICAgICAgICAgb3V0bGluZVdpZHRoLCBhbnRpYWxp
YXMpOwogfQogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gOTA1OTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcg
Kzc2LDcgQEAgcHVibGljOgogICAgIExheW91dFNpemUgcmVsYXRpdmVQb3NpdGlvbmVkSW5saW5l
T2Zmc2V0KGNvbnN0IFJlbmRlckJveCogY2hpbGQpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lk
IGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50
Jik7Ci0gICAgdm9pZCBwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UG9p
bnQmKTsKKyAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlv
dXRQb2ludCYpOwogCiAgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnRpbnVhdGlv
bjsKICAgICB1c2luZyBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0Q29udGludWF0aW9uOwpAQCAt
MTYyLDggKzE2Miw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFJlbmRlcklubGluZSog
Y2xvbmVJbmxpbmUoUmVuZGVySW5saW5lKiBzcmMpOwogCi0gICAgdm9pZCBwYWludE91dGxpbmVG
b3JMaW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYg
cHJldkxpbmUsIGNvbnN0IEludFJlY3QmIHRoaXNMaW5lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiBuZXh0TGluZSwgY29uc3QgQ29sb3IpOworICAgIHZvaWQg
cGFpbnRPdXRsaW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQqLCBjb25zdCBMYXlvdXRQb2ludCYs
IGNvbnN0IExheW91dFJlY3QmIHByZXZMaW5lLCBjb25zdCBMYXlvdXRSZWN0JiB0aGlzTGluZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgbmV4dExpbmUs
IGNvbnN0IENvbG9yKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGludWF0aW9uQmVm
b3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogCiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0IG1fY2hpbGRyZW47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3OSw3ICsyMjc5LDcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTAogICAgICAgICB1cGRhdGVPdmVyZmxvd1N0
YXR1cyhob3Jpem9udGFsT3ZlcmZsb3csIHZlcnRpY2FsT3ZlcmZsb3cpOwogfQogCi12b2lkIFJl
bmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3Qs
IGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCit2b2lkIFJlbmRlckxheWVyOjpwYWludE92
ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdP
dmVybGF5Q29udHJvbHMpCiB7CiAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBu
byBvdmVyZmxvdy4KICAgICBpZiAoIXJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKQpAQCAt
MjMwMyw3ICsyMzAzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xz
KAogICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IHBhaW50T2Zmc2V0OworICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBw
YWludE9mZnNldDsKICAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCiAgICAgICAgIGFk
anVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CiAKQEAg
LTIzMzksMTIgKzIzMzksMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRy
b2xzKAogICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1h
Z2VSZWN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QpCit2b2lkIFJlbmRlckxheWVyOjpwYWludFNjcm9sbENvcm5lcihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKIHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwogICAgIEFTU0VSVChib3gpOwogCi0gICAgSW50UmVjdCBhYnNSZWN0ID0gc2Ny
b2xsQ29ybmVyUmVjdCgpOworICAgIExheW91dFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJl
Y3QoKTsKICAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAgICAgaWYgKCFhYnNSZWN0
LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNjUsNyArMjM2
NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXAKICAgICAgICAg
Y29udGV4dC0+ZmlsbFJlY3QoYWJzUmVjdCwgQ29sb3I6OndoaXRlLCBib3gtPnN0eWxlKCktPmNv
bG9yU3BhY2UoKSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50
UmVjdCYgZGFtYWdlUmVjdCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
TGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKIHsKICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+
cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpCiAgICAgICAgIHJldHVybjsKQEAgLTIzNzMsNyArMjM3
Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0MKICAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgIEFTU0VSVChib3gpOwogCi0gICAgSW50UmVj
dCBhYnNSZWN0ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYm94LT5ib3JkZXJCb3hSZWN0KCkp
OworICAgIExheW91dFJlY3QgYWJzUmVjdCA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGJveC0+
Ym9yZGVyQm94UmVjdCgpKTsKICAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAgICAg
aWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTIzOTAsNyArMjM5MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGlj
c0MKIAogICAgIC8vIFBhaW50IHRoZSByZXNpemVyIGNvbnRyb2wuCiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChSZWZQdHI8SW1hZ2U+LCByZXNpemVDb3JuZXJJbWFnZSwgKEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKSkpOwotICAgIEludFBvaW50IGlt
YWdlUG9pbnQoYWJzUmVjdC5tYXhYKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+d2lkdGgoKSwgYWJz
UmVjdC5tYXhZKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+aGVpZ2h0KCkpOworICAgIExheW91dFBv
aW50IGltYWdlUG9pbnQoYWJzUmVjdC5tYXhYKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+d2lkdGgo
KSwgYWJzUmVjdC5tYXhZKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+aGVpZ2h0KCkpOwogICAgIGNv
bnRleHQtPmRyYXdJbWFnZShyZXNpemVDb3JuZXJJbWFnZS5nZXQoKSwgYm94LT5zdHlsZSgpLT5j
b2xvclNwYWNlKCksIGltYWdlUG9pbnQpOwogCiAgICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0
aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHBy
ZXNlbnQuCkBAIC0yMzk4LDggKzIzOTgsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6
ZXIoR3JhcGhpY3NDCiAgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZCYXIg
fHwgbV9oQmFyKSkgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQpOwogICAgICAgICBjb250ZXh0LT5jbGlwKGFic1JlY3QpOwotICAgICAgICBJ
bnRSZWN0IGxhcmdlckNvcm5lciA9IGFic1JlY3Q7Ci0gICAgICAgIGxhcmdlckNvcm5lci5zZXRT
aXplKEludFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxLCBsYXJnZXJDb3JuZXIuaGVpZ2h0
KCkgKyAxKSk7CisgICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gYWJzUmVjdDsKKyAg
ICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgo
KSArIDEsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDEpKTsKICAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlQ29sb3IoQ29sb3IobWFrZVJHQigyMTcsIDIxNywgMjE3KSksIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7CiAgICAg
ICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQsIENvbG9yU3BhY2VE
ZXZpY2VSR0IpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJl
dmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2OSw5ICsyNjksOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoaXRU
ZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2Fs
UG9pbnQpOwogICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBMYXlv
dXRQb2ludCYgYWJzb2x1dGVQb2ludCkgY29uc3Q7CiAKLSAgICB2b2lkIHBhaW50T3ZlcmZsb3dD
b250cm9scyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3Qm
IGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7Ci0gICAg
dm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwotICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7
CisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
TGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOworICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0KTsKKyAgICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBM
YXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOwogCiAgICAgdm9pZCB1
cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA5MDU5MykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMCw3ICsyMDAsNyBAQCBib29sIFJlbmRlckxpbmVCb3hMaXN0OjpsaW5lSW50ZXJz
ZWN0c0RpCiAgICAgcmV0dXJuIHJhbmdlSW50ZXJzZWN0c1JlY3QocmVuZGVyZXIsIGxvZ2ljYWxU
b3AsIGxvZ2ljYWxCb3R0b20sIHBhaW50SW5mby5yZWN0LCBvZmZzZXQpOwogfQogCi12b2lkIFJl
bmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpIGNvbnN0Cit2
b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVy
ZXIsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
IGNvbnN0CiB7CiAgICAgLy8gT25seSBwYWludCBkdXJpbmcgdGhlIGZvcmVncm91bmQvc2VsZWN0
aW9uIHBoYXNlcy4KICAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uICYmIHBhaW50SW5m
by5waGFzZSAhPSBQYWludFBoYXNlT3V0bGluZSAKQEAgLTIxOCw3ICsyMTgsNyBAQCB2b2lkIFJl
bmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgLy8gTlNWaWV3cy4gIERvIG5v
dCBhZGQgYW55IG1vcmUgY29kZSBmb3IgdGhpcy4KICAgICBSZW5kZXJWaWV3KiB2ID0gcmVuZGVy
ZXItPnZpZXcoKTsKICAgICBib29sIHVzZVByaW50UmVjdCA9ICF2LT5wcmludFJlY3QoKS5pc0Vt
cHR5KCk7Ci0gICAgaW50IG91dGxpbmVTaXplID0gcmVuZGVyZXItPm1heGltYWxPdXRsaW5lU2l6
ZShwYWludEluZm8ucGhhc2UpOworICAgIExheW91dFVuaXQgb3V0bGluZVNpemUgPSByZW5kZXJl
ci0+bWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7CiAgICAgaWYgKCFhbnlMaW5l
SW50ZXJzZWN0c1JlY3QocmVuZGVyZXIsIHBhaW50SW5mby5yZWN0LCBwYWludE9mZnNldCwgdXNl
UHJpbnRSZWN0LCBvdXRsaW5lU2l6ZSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjM1LDggKzIz
NSw4IEBAIHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE0KICAgICAgICAg
ICAgIC8vIGZvciBlbWJlZGRlZCB2aWV3cyBpbnNpZGUgQXBwS2l0LiAgQXBwS2l0IGlzIGluY2Fw
YWJsZSBvZiBwYWdpbmF0aW5nIHZlcnRpY2FsCiAgICAgICAgICAgICAvLyB0ZXh0IHBhZ2VzLCBz
byB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aCB2ZXJ0aWNhbCBsaW5lcyBhdCBhbGwgaGVyZS4K
ICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3QgPSBjdXJyLT5yb290KCk7Ci0gICAgICAg
ICAgICBpbnQgdG9wRm9yUGFnaW5hdGlvbkNoZWNrID0gY3Vyci0+bG9naWNhbFRvcFZpc3VhbE92
ZXJmbG93KHJvb3QtPmxpbmVUb3AoKSk7Ci0gICAgICAgICAgICBpbnQgYm90dG9tRm9yUGFnaW5h
dGlvbkNoZWNrID0gY3Vyci0+bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpOworICAgICAgICAg
ICAgTGF5b3V0VW5pdCB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPSBjdXJyLT5sb2dpY2FsVG9wVmlz
dWFsT3ZlcmZsb3cocm9vdC0+bGluZVRvcCgpKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgYm90
dG9tRm9yUGFnaW5hdGlvbkNoZWNrID0gY3Vyci0+bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygp
OwogICAgICAgICAgICAgaWYgKCFjdXJyLT5wYXJlbnQoKSkgewogICAgICAgICAgICAgICAgIC8v
IFdlJ3JlIGEgcm9vdCBib3guICBVc2UgbGluZVRvcCBhbmQgbGluZUJvdHRvbSBhcyB3ZWxsIGhl
cmUuCiAgICAgICAgICAgICAgICAgdG9wRm9yUGFnaW5hdGlvbkNoZWNrID0gbWluKHRvcEZvclBh
Z2luYXRpb25DaGVjaywgcm9vdC0+bGluZVRvcCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzAs
MTMgKzMzMCwxMyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlCiAg
ICAgfQogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50U2Nyb2xsYmFyKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlckxpc3RC
b3g6OnBhaW50U2Nyb2xsYmFyKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgaWYgKG1fdkJhcikgewotICAgICAgICBJbnRSZWN0IHNj
cm9sbFJlY3QocGFpbnRPZmZzZXQueCgpICsgd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBtX3ZC
YXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludE9mZnNldC55KCkg
KyBib3JkZXJUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdkJhci0+d2lkdGgo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gKGJvcmRlclRvcCgpICsg
Ym9yZGVyQm90dG9tKCkpKTsKKyAgICAgICAgTGF5b3V0UmVjdCBzY3JvbGxSZWN0KHBhaW50T2Zm
c2V0LngoKSArIHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLAorICAg
ICAgICAgICAgcGFpbnRPZmZzZXQueSgpICsgYm9yZGVyVG9wKCksCisgICAgICAgICAgICBtX3ZC
YXItPndpZHRoKCksCisgICAgICAgICAgICBoZWlnaHQoKSAtIChib3JkZXJUb3AoKSArIGJvcmRl
ckJvdHRvbSgpKSk7CiAgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHNjcm9sbFJlY3QpOwog
ICAgICAgICBtX3ZCYXItPnBhaW50KHBhaW50SW5mby5jb250ZXh0LCBwYWludEluZm8ucmVjdCk7
CiAgICAgfQpAQCAtMzYxLDcgKzM2MSw3IEBAIHN0YXRpYyBJbnRTaXplIGl0ZW1PZmZzZXRGb3JB
bGlnbm1lbnQoVGUKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUZvcmVncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFBvaW50
JiBwYWludE9mZnNldCwgaW50IGxpc3RJbmRleCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJ
dGVtRm9yZWdyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBpbnQgbGlzdEluZGV4KQogewogICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVy
IGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCkBAIC0zOTksNyArMzk5LDcgQEAgdm9pZCBSZW5k
ZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgIGNvbnN0IFVDaGFyKiBzdHJpbmcg
PSBpdGVtVGV4dC5jaGFyYWN0ZXJzKCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuKHN0cmluZywgbGVu
Z3RoLCBmYWxzZSwgMCwgMCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgaXRlbVN0
eWxlLT5kaXJlY3Rpb24oKSwgaXRlbVN0eWxlLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRlLCBU
ZXh0UnVuOjpOb1JvdW5kaW5nKTsKICAgICBGb250IGl0ZW1Gb250ID0gc3R5bGUoKS0+Zm9udCgp
OwotICAgIEludFJlY3QgciA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFpbnRPZmZzZXQsIGxpc3RJ
bmRleCk7CisgICAgTGF5b3V0UmVjdCByID0gaXRlbUJvdW5kaW5nQm94UmVjdChwYWludE9mZnNl
dCwgbGlzdEluZGV4KTsKICAgICByLm1vdmUoaXRlbU9mZnNldEZvckFsaWdubWVudCh0ZXh0UnVu
LCBpdGVtU3R5bGUsIGl0ZW1Gb250LCByKSk7CiAKICAgICBpZiAoaXNPcHRpb25Hcm91cEVsZW1l
bnQoZWxlbWVudCkpIHsKQEAgLTQxNCw3ICs0MTQsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBh
aW50SXRlbUZvcmVncm91bmQoCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3QmlkaVRl
eHQoaXRlbUZvbnQsIHRleHRSdW4sIHIubG9jYXRpb24oKSk7CiB9CiAKLXZvaWQgUmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQgbGlzdEluZGV4KQordm9pZCBSZW5kZXJMaXN0Qm94Ojpw
YWludEl0ZW1CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQsIGludCBsaXN0SW5kZXgpCiB7CiAgICAgU2VsZWN0RWxlbWVudCogc2Vs
ZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKICAg
ICBjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygp
OwpAQCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFja2dy
b3VuZCgKICAgICAvLyBEcmF3IHRoZSBiYWNrZ3JvdW5kIGZvciB0aGlzIGxpc3QgYm94IGl0ZW0K
ICAgICBpZiAoIWVsZW1lbnQtPnJlbmRlclN0eWxlKCkgfHwgZWxlbWVudC0+cmVuZGVyU3R5bGUo
KS0+dmlzaWJpbGl0eSgpICE9IEhJRERFTikgewogICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UgPSBlbGVtZW50LT5yZW5kZXJTdHlsZSgpID8gZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+Y29s
b3JTcGFjZSgpIDogc3R5bGUoKS0+Y29sb3JTcGFjZSgpOwotICAgICAgICBJbnRSZWN0IGl0ZW1S
ZWN0ID0gaXRlbUJvdW5kaW5nQm94UmVjdChwYWludE9mZnNldCwgbGlzdEluZGV4KTsKKyAgICAg
ICAgTGF5b3V0UmVjdCBpdGVtUmVjdCA9IGl0ZW1Cb3VuZGluZ0JveFJlY3QocGFpbnRPZmZzZXQs
IGxpc3RJbmRleCk7CiAgICAgICAgIGl0ZW1SZWN0LmludGVyc2VjdChjb250cm9sQ2xpcFJlY3Qo
cGFpbnRPZmZzZXQpKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0KGl0ZW1S
ZWN0LCBiYWNrQ29sb3IsIGNvbG9yU3BhY2UpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gOTA1OTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsOSAr
MTM1LDkgQEAgcHJpdmF0ZToKICAgICBpbnQgbnVtVmlzaWJsZUl0ZW1zKCkgY29uc3Q7CiAgICAg
aW50IG51bUl0ZW1zKCkgY29uc3Q7CiAgICAgaW50IGxpc3RIZWlnaHQoKSBjb25zdDsKLSAgICB2
b2lkIHBhaW50U2Nyb2xsYmFyKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7Ci0gICAgdm9p
ZCBwYWludEl0ZW1Gb3JlZ3JvdW5kKFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgaW50IGxp
c3RJbmRleCk7Ci0gICAgdm9pZCBwYWludEl0ZW1CYWNrZ3JvdW5kKFBhaW50SW5mbyYsIGNvbnN0
IEludFBvaW50JiwgaW50IGxpc3RJbmRleCk7CisgICAgdm9pZCBwYWludFNjcm9sbGJhcihQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOworICAgIHZvaWQgcGFpbnRJdGVtRm9yZWdyb3Vu
ZChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIGludCBsaXN0SW5kZXgpOworICAgIHZv
aWQgcGFpbnRJdGVtQmFja2dyb3VuZChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIGlu
dCBsaXN0SW5kZXgpOwogICAgIHZvaWQgc2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24oKTsKIAogICAg
IGJvb2wgbV9vcHRpb25zQ2hhbmdlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA5MDU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA1LDkgKzEwMDUsOSBA
QCB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0FyY0ZvckJveFNpZGUoR3JhCiB9CiAjZW5kaWYKICAg
ICAKLXZvaWQgUmVuZGVyT2JqZWN0OjpwYWludEZvY3VzUmluZyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgUmVuZGVyU3R5bGUqIHN0eWxlKQor
dm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50Rm9jdXNSaW5nKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7
Ci0gICAgVmVjdG9yPEludFJlY3Q+IGZvY3VzUmluZ1JlY3RzOworICAgIFZlY3RvcjxMYXlvdXRS
ZWN0PiBmb2N1c1JpbmdSZWN0czsKICAgICBhZGRGb2N1c1JpbmdSZWN0cyhmb2N1c1JpbmdSZWN0
cywgcGFpbnRPZmZzZXQpOwogICAgIGlmIChzdHlsZS0+b3V0bGluZVN0eWxlSXNBdXRvKCkpCiAg
ICAgICAgIGNvbnRleHQtPmRyYXdGb2N1c1JpbmcoZm9jdXNSaW5nUmVjdHMsIHN0eWxlLT5vdXRs
aW5lV2lkdGgoKSwgc3R5bGUtPm91dGxpbmVPZmZzZXQoKSwgc3R5bGUtPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcikpOwpAQCAtMTAyOCwxOCArMTAyOCwxOCBA
QCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChHcmFwaGljCiAgICAgY29udGV4dC0+
c2V0VVJMRm9yUmVjdChuLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChocmVmKSwgcmVjdCk7CiB9
CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHBhaW50UmVjdCkKK3ZvaWQgUmVuZGVyT2JqZWN0
OjpwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIHBhaW50UmVjdCkKIHsKICAgICBpZiAoIWhhc091dGxpbmUoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwotICAgIGlu
dCBvdXRsaW5lV2lkdGggPSBzdHlsZVRvVXNlLT5vdXRsaW5lV2lkdGgoKTsKKyAgICBMYXlvdXRV
bml0IG91dGxpbmVXaWR0aCA9IHN0eWxlVG9Vc2UtPm91dGxpbmVXaWR0aCgpOwogICAgIEVCb3Jk
ZXJTdHlsZSBvdXRsaW5lU3R5bGUgPSBzdHlsZVRvVXNlLT5vdXRsaW5lU3R5bGUoKTsKIAogICAg
IENvbG9yIG91dGxpbmVDb2xvciA9IHN0eWxlVG9Vc2UtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eU91dGxpbmVDb2xvcik7CiAKLSAgICBpbnQgb2Zmc2V0ID0gc3R5bGVUb1VzZS0+
b3V0bGluZU9mZnNldCgpOworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gc3R5bGVUb1VzZS0+b3V0
bGluZU9mZnNldCgpOwogCiAgICAgaWYgKHN0eWxlVG9Vc2UtPm91dGxpbmVTdHlsZUlzQXV0bygp
IHx8IGhhc091dGxpbmVBbm5vdGF0aW9uKCkpIHsKICAgICAgICAgaWYgKCF0aGVtZSgpLT5zdXBw
b3J0c0ZvY3VzUmluZyhzdHlsZVRvVXNlKSkgewpAQCAtMTA1MSw3ICsxMDUxLDcgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OnBhaW50T3V0bGluZShHcmFwaGljcwogICAgIGlmIChzdHlsZVRvVXNlLT5v
dXRsaW5lU3R5bGVJc0F1dG8oKSB8fCBzdHlsZVRvVXNlLT5vdXRsaW5lU3R5bGUoKSA9PSBCTk9O
RSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50UmVjdCBhZGp1c3RlZFBhaW50UmVjID0gcGFp
bnRSZWN0OworICAgIExheW91dFJlY3QgYWRqdXN0ZWRQYWludFJlYyA9IHBhaW50UmVjdDsKICAg
ICBhZGp1c3RlZFBhaW50UmVjLmluZmxhdGUob2Zmc2V0KTsKIAogICAgIGlmIChhZGp1c3RlZFBh
aW50UmVjLmlzRW1wdHkoKSkKQEAgLTEwNjcsMTQgKzEwNjcsMTQgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OnBhaW50T3V0bGluZShHcmFwaGljcwogICAgIH0KICNlbmRpZgogCi0gICAgaW50IGxlZnRP
dXRlciA9IGFkanVzdGVkUGFpbnRSZWMueCgpIC0gb3V0bGluZVdpZHRoOwotICAgIGludCBsZWZ0
SW5uZXIgPSBhZGp1c3RlZFBhaW50UmVjLngoKTsKLSAgICBpbnQgcmlnaHRPdXRlciA9IGFkanVz
dGVkUGFpbnRSZWMubWF4WCgpICsgb3V0bGluZVdpZHRoOwotICAgIGludCByaWdodElubmVyID0g
YWRqdXN0ZWRQYWludFJlYy5tYXhYKCk7Ci0gICAgaW50IHRvcE91dGVyID0gYWRqdXN0ZWRQYWlu
dFJlYy55KCkgLSBvdXRsaW5lV2lkdGg7Ci0gICAgaW50IHRvcElubmVyID0gYWRqdXN0ZWRQYWlu
dFJlYy55KCk7Ci0gICAgaW50IGJvdHRvbU91dGVyID0gYWRqdXN0ZWRQYWludFJlYy5tYXhZKCkg
KyBvdXRsaW5lV2lkdGg7Ci0gICAgaW50IGJvdHRvbUlubmVyID0gYWRqdXN0ZWRQYWludFJlYy5t
YXhZKCk7CisgICAgTGF5b3V0VW5pdCBsZWZ0T3V0ZXIgPSBhZGp1c3RlZFBhaW50UmVjLngoKSAt
IG91dGxpbmVXaWR0aDsKKyAgICBMYXlvdXRVbml0IGxlZnRJbm5lciA9IGFkanVzdGVkUGFpbnRS
ZWMueCgpOworICAgIExheW91dFVuaXQgcmlnaHRPdXRlciA9IGFkanVzdGVkUGFpbnRSZWMubWF4
WCgpICsgb3V0bGluZVdpZHRoOworICAgIExheW91dFVuaXQgcmlnaHRJbm5lciA9IGFkanVzdGVk
UGFpbnRSZWMubWF4WCgpOworICAgIExheW91dFVuaXQgdG9wT3V0ZXIgPSBhZGp1c3RlZFBhaW50
UmVjLnkoKSAtIG91dGxpbmVXaWR0aDsKKyAgICBMYXlvdXRVbml0IHRvcElubmVyID0gYWRqdXN0
ZWRQYWludFJlYy55KCk7CisgICAgTGF5b3V0VW5pdCBib3R0b21PdXRlciA9IGFkanVzdGVkUGFp
bnRSZWMubWF4WSgpICsgb3V0bGluZVdpZHRoOworICAgIExheW91dFVuaXQgYm90dG9tSW5uZXIg
PSBhZGp1c3RlZFBhaW50UmVjLm1heFkoKTsKICAgICAKICAgICBkcmF3TGluZUZvckJveFNpZGUo
Z3JhcGhpY3NDb250ZXh0LCBsZWZ0T3V0ZXIsIHRvcE91dGVyLCBsZWZ0SW5uZXIsIGJvdHRvbU91
dGVyLCBCU0xlZnQsIG91dGxpbmVDb2xvciwgb3V0bGluZVN0eWxlLCBvdXRsaW5lV2lkdGgsIG91
dGxpbmVXaWR0aCk7CiAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgbGVm
dE91dGVyLCB0b3BPdXRlciwgcmlnaHRPdXRlciwgdG9wSW5uZXIsIEJTVG9wLCBvdXRsaW5lQ29s
b3IsIG91dGxpbmVTdHlsZSwgb3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gOTA1OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5Myw4ICs3OTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUo
R3JhcGhpY3NDb250ZXh0KiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBCb3hTaWRl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yLCBFQm9yZGVyU3R5bGUsIGludCBh
ZGpidzEsIGludCBhZGpidzIsIGJvb2wgYW50aWFsaWFzID0gZmFsc2UpOwogCi0gICAgdm9pZCBw
YWludEZvY3VzUmluZyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYsIFJlbmRlclN0
eWxlKik7Ci0gICAgdm9pZCBwYWludE91dGxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZvaWQgcGFpbnRGb2N1c1JpbmcoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
TGF5b3V0UG9pbnQmLCBSZW5kZXJTdHlsZSopOworICAgIHZvaWQgcGFpbnRPdXRsaW5lKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IExheW91dFJlY3QmKTsKICAgICB2b2lkIGFkZFBERlVSTFJlY3Qo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCBJbnRSZWN0
IHZpZXdSZWN0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBA
IHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICB9CiB9CiAKLWJv
b2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCitib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQog
ewogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAhPSBQ
YWludFBoYXNlU2VsZk91dGxpbmUgCiAgICAgICAgICAgICAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZU1hc2sp
CkBAIC0xNzYsMTkgKzE3NiwxOSBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQ
YWludEluCiAgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFp
bnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAgIExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZz
ZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAKICAgICAvLyBFYXJseSBleGl0IGlmIHRo
ZSBlbGVtZW50IHRvdWNoZXMgdGhlIGVkZ2VzLgotICAgIGludCB0b3AgPSBhZGp1c3RlZFBhaW50
T2Zmc2V0LnkoKSArIG1pbllWaXN1YWxPdmVyZmxvdygpOwotICAgIGludCBib3R0b20gPSBhZGp1
c3RlZFBhaW50T2Zmc2V0LnkoKSArIG1heFlWaXN1YWxPdmVyZmxvdygpOworICAgIExheW91dFVu
aXQgdG9wID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBtaW5ZVmlzdWFsT3ZlcmZsb3coKTsK
KyAgICBMYXlvdXRVbml0IGJvdHRvbSA9IGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgbWF4WVZp
c3VhbE92ZXJmbG93KCk7CiAgICAgaWYgKGlzU2VsZWN0ZWQoKSAmJiBtX2lubGluZUJveFdyYXBw
ZXIpIHsKLSAgICAgICAgaW50IHNlbFRvcCA9IHBhaW50T2Zmc2V0LnkoKSArIG1faW5saW5lQm94
V3JhcHBlci0+cm9vdCgpLT5zZWxlY3Rpb25Ub3AoKTsKLSAgICAgICAgaW50IHNlbEJvdHRvbSA9
IHBhaW50T2Zmc2V0LnkoKSArIHNlbFRvcCArIG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgpLT5z
ZWxlY3Rpb25IZWlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBzZWxUb3AgPSBwYWludE9mZnNl
dC55KCkgKyBtX2lubGluZUJveFdyYXBwZXItPnJvb3QoKS0+c2VsZWN0aW9uVG9wKCk7CisgICAg
ICAgIExheW91dFVuaXQgc2VsQm90dG9tID0gcGFpbnRPZmZzZXQueSgpICsgc2VsVG9wICsgbV9p
bmxpbmVCb3hXcmFwcGVyLT5yb290KCktPnNlbGVjdGlvbkhlaWdodCgpOwogICAgICAgICB0b3Ag
PSBtaW4oc2VsVG9wLCB0b3ApOwogICAgICAgICBib3R0b20gPSBtYXgoc2VsQm90dG9tLCBib3R0
b20pOwogICAgIH0KICAgICAKLSAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91dGxpbmVTaXplKHBh
aW50SW5mby5waGFzZSk7CisgICAgTGF5b3V0VW5pdCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNp
emUocGFpbnRJbmZvLnBoYXNlKTsKICAgICBpZiAoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBt
aW5YVmlzdWFsT3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5tYXhYKCkgKyBvcyB8fCBhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSArIG1heFhWaXN1YWxPdmVyZmxvdygpIDw9IHBhaW50SW5mby5y
ZWN0LngoKSAtIG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHRvcCA+PSBwYWlu
dEluZm8ucmVjdC5tYXhZKCkgKyBvcyB8fCBib3R0b20gPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0g
b3MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkocmV2
aXNpb24gOTA1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBz
ZXRIYXNJbnRyaW5zaWNTaXplKCkgeyBtX2hhc0ludHJpbnNpY1NpemUgPSB0cnVlOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAg
ICBib29sIHNob3VsZFBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7CisgICAgYm9v
bCBzaG91bGRQYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIEludFJl
Y3QgbG9jYWxTZWxlY3Rpb25SZWN0KGJvb2wgY2hlY2tXaGV0aGVyU2VsZWN0ZWQgPSB0cnVlKSBj
b25zdDsgLy8gVGhpcyBpcyBpbiBsb2NhbCBjb29yZGluYXRlcywgYnV0IGl0J3MgYSBwaHlzaWNh
bCByZWN0IChzbyB0aGUgdG9wIGxlZnQgY29ybmVyIGlzIHBoeXNpY2FsIHRvcCBsZWZ0KS4KIAog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQ
YXJ0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyUGFydC5jcHAJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNyArMTU5
LDcgQEAgdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjppbWFnZUNoYW5nZWQoVwogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJTY3JvbGxiYXJQYXJ0OjpwYWludEludG9SZWN0KEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit2b2lkIFJlbmRlclNjcm9sbGJhclBhcnQ6OnBhaW50SW50b1JlY3QoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIHsKICAgICAvLyBNYWtlIHN1cmUgb3VyIGRp
bWVuc2lvbnMgbWF0Y2ggdGhlIHJlY3QuCiAgICAgc2V0TG9jYXRpb24ocmVjdC5sb2NhdGlvbigp
IC0gdG9TaXplKHBhaW50T2Zmc2V0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyUGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmgJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZp
cnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgIAotICAgIHZv
aWQgcGFpbnRJbnRvUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2b2lkIHBhaW50SW50b1JlY3QoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAgICAgCiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA5MDU5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjAs
NyArOTYwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Q29sbGFwc2VkQm9yZAogICAg
IH0KIH0KIAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxs
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIFJlbmRl
ck9iamVjdCogYmFja2dyb3VuZE9iamVjdCkKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludEJh
Y2tncm91bmRzQmVoaW5kQ2VsbChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LCBSZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpCiB7CiAgICAg
aWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHRoaXMpKQogICAgICAgICByZXR1
cm47CkBAIC05NzUsNyArOTc1LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dy
b3VuZHNCZQogICAgIGlmICghdGFibGVFbHQtPmNvbGxhcHNlQm9yZGVycygpICYmIHN0eWxlKCkt
PmVtcHR5Q2VsbHMoKSA9PSBISURFICYmICFmaXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICBM
YXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CiAgICAgaWYgKGJh
Y2tncm91bmRPYmplY3QgIT0gdGhpcykKICAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5tb3Zl
KGxvY2F0aW9uKCkpOwogCkBAIC05ODgsMTEgKzk4OCwxMSBAQCB2b2lkIFJlbmRlclRhYmxlQ2Vs
bDo6cGFpbnRCYWNrZ3JvdW5kc0JlCiAgICAgICAgIGJvb2wgc2hvdWxkQ2xpcCA9IGJhY2tncm91
bmRPYmplY3QtPmhhc0xheWVyKCkgJiYgKGJhY2tncm91bmRPYmplY3QgPT0gdGhpcyB8fCBiYWNr
Z3JvdW5kT2JqZWN0ID09IHBhcmVudCgpKSAmJiB0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCk7
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqcGFpbnRJbmZv
LmNvbnRleHQsIHNob3VsZENsaXApOwogICAgICAgICBpZiAoc2hvdWxkQ2xpcCkgewotICAgICAg
ICAgICAgSW50UmVjdCBjbGlwUmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIGJvcmRlckxl
ZnQoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBib3JkZXJUb3AoKSwKKyAgICAgICAgICAg
IExheW91dFJlY3QgY2xpcFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBib3JkZXJMZWZ0
KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgYm9yZGVyVG9wKCksCiAgICAgICAgICAgICAg
ICAgd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGhlaWdodCgpIC0gYm9y
ZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7CiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4
dC0+Y2xpcChjbGlwUmVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgcGFpbnRGaWxsTGF5ZXJzKHBh
aW50SW5mbywgYywgYmdMYXllciwgSW50UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LCBzaXplKCkp
LCBCYWNrZ3JvdW5kQmxlZWROb25lLCBDb21wb3NpdGVTb3VyY2VPdmVyLCBiYWNrZ3JvdW5kT2Jq
ZWN0KTsKKyAgICAgICAgcGFpbnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgYywgYmdMYXllciwgTGF5
b3V0UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0LCBzaXplKCkpLCBCYWNrZ3JvdW5kQmxlZWROb25l
LCBDb21wb3NpdGVTb3VyY2VPdmVyLCBiYWNrZ3JvdW5kT2JqZWN0KTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3Bw
CShyZXZpc2lvbiA5MDU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTMsOSArOTEzLDkgQEAgc3RhdGljIGlu
bGluZSBib29sIGNvbXBhcmVDZWxsUG9zaXRpb25zKAogICAgIHJldHVybiBlbGVtMS0+cm93KCkg
PCBlbGVtMi0+cm93KCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludENlbGwo
UmVuZGVyVGFibGVDZWxsKiBjZWxsLCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9p
bnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Q2VsbChSZW5k
ZXJUYWJsZUNlbGwqIGNlbGwsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQpCiB7Ci0gICAgSW50UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRp
bmdNb2RlKGNlbGwsIHBhaW50T2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50
KTsKKyAgICBMYXlvdXRQb2ludCBjZWxsUG9pbnQgPSBmbGlwRm9yV3JpdGluZ01vZGUoY2VsbCwg
cGFpbnRPZmZzZXQsIFBhcmVudFRvQ2hpbGRGbGlwcGluZ0FkanVzdG1lbnQpOwogICAgIFBhaW50
UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5mby5waGFzZTsKICAgICBSZW5kZXJUYWJsZVJvdyog
cm93ID0gdG9SZW5kZXJUYWJsZVJvdyhjZWxsLT5wYXJlbnQoKSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDkwNTkz
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0KiBvbGRDaGlsZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRDZWxsKFJlbmRlclRhYmxlQ2VsbCosIFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50Jik7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q2VsbChSZW5kZXJUYWJsZUNlbGwqLCBQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWlu
dEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hh
bmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDkw
NTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTg3LDEyICs1ODcsMTIgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJv
bDo6dXBkYXRlUGxhY2Vob2xkZQogICAgICAgICByZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVy
VGV4dENvbnRyb2w6OnBhaW50UGxhY2Vob2xkZXIoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCkKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnBhaW50UGxh
Y2Vob2xkZXIoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCkKIHsKICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBJbnRSZWN0IGNsaXBSZWN0KHBhaW50T2Zmc2V0LngoKSAr
IGJvcmRlckxlZnQoKSwgcGFpbnRPZmZzZXQueSgpICsgYm9yZGVyVG9wKCksIHdpZHRoKCkgLSBi
b3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpLCBoZWlnaHQoKSAtIGJvcmRlckJvdHRvbSgpIC0g
Ym9yZGVyVG9wKCkpOworICAgIExheW91dFJlY3QgY2xpcFJlY3QocGFpbnRPZmZzZXQueCgpICsg
Ym9yZGVyTGVmdCgpLCBwYWludE9mZnNldC55KCkgKyBib3JkZXJUb3AoKSwgd2lkdGgoKSAtIGJv
cmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGhlaWdodCgpIC0gYm9yZGVyQm90dG9tKCkgLSBi
b3JkZXJUb3AoKSk7CiAgICAgaWYgKGNsaXBSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIApAQCAtNjEwLDkgKzYxMCw5IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnBhaW50
UGxhY2Vob2xkZXIKICAgICAKICAgICBSZW5kZXJCb3gqIHRleHRSZW5kZXJlciA9IGlubmVyVGV4
dEVsZW1lbnQoKSA/IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwOwogICAgIGlm
ICh0ZXh0UmVuZGVyZXIpIHsKLSAgICAgICAgSW50UG9pbnQgdGV4dFBvaW50OworICAgICAgICBM
YXlvdXRQb2ludCB0ZXh0UG9pbnQ7CiAgICAgICAgIHRleHRQb2ludC5zZXRZKHBhaW50T2Zmc2V0
LnkoKSArIHRleHRCbG9ja0luc2V0VG9wKCkgKyBwbGFjZWhvbGRlclN0eWxlLT5mb250TWV0cmlj
cygpLmFzY2VudCgpKTsKLSAgICAgICAgaW50IHN0eWxlVGV4dEluZGVudCA9IHBsYWNlaG9sZGVy
U3R5bGUtPnRleHRJbmRlbnQoKS5pc0ZpeGVkKCkgPyBwbGFjZWhvbGRlclN0eWxlLT50ZXh0SW5k
ZW50KCkuY2FsY01pblZhbHVlKDApIDogMDsKKyAgICAgICAgTGF5b3V0VW5pdCBzdHlsZVRleHRJ
bmRlbnQgPSBwbGFjZWhvbGRlclN0eWxlLT50ZXh0SW5kZW50KCkuaXNGaXhlZCgpID8gcGxhY2Vo
b2xkZXJTdHlsZS0+dGV4dEluZGVudCgpLmNhbGNNaW5WYWx1ZSgwKSA6IDA7CiAgICAgICAgIGlm
IChwbGFjZWhvbGRlclN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAg
ICB0ZXh0UG9pbnQuc2V0WChwYWludE9mZnNldC54KCkgKyBzdHlsZVRleHRJbmRlbnQgKyB0ZXh0
QmxvY2tJbnNldExlZnQoKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMs
NyArMTMzLDcgQEAgZmxvYXQgUm9vdElubGluZUJveDo6cGxhY2VFbGxpcHNpc0JveChibwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUm9vdElubGluZUJveDo6cGFpbnRFbGxpcHNpc0Jv
eChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBpbnQg
bGluZVRvcCwgaW50IGxpbmVCb3R0b20pIGNvbnN0Cit2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50
RWxsaXBzaXNCb3goUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIGNvbnN0
CiB7CiAgICAgaWYgKGhhc0VsbGlwc2lzQm94KCkgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0
aGluUm9vdChyZW5kZXJlcigpKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRQogICAgICAgICAgICAgJiYgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VG
b3JlZ3JvdW5kKQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6YWRkSGln
aGxpZ2h0T3ZlcmZsb3cKICAgICBzZXRPdmVyZmxvd0Zyb21Mb2dpY2FsUmVjdHMoaW5mbGF0ZWRS
ZWN0LCBpbmZsYXRlZFJlY3QsIGxpbmVUb3AoKSwgbGluZUJvdHRvbSgpKTsKIH0KIAotdm9pZCBS
b290SW5saW5lQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGhpZ2hsaWdo
dFR5cGUpCit2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgaGlnaGxpZ2h0VHlwZSkKIHsKICAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWlu
dFdpdGhpblJvb3QocmVuZGVyZXIoKSkgfHwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0
eSgpICE9IFZJU0lCTEUgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5k
KQogICAgICAgICByZXR1cm47CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBSb290SW5saW5lQm94
OjpwYWludEN1c3RvbUhpZ2hsaWdodAogCiAjZW5kaWYKIAotdm9pZCBSb290SW5saW5lQm94Ojpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBp
bnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCit2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91
dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQogewogICAgIElubGluZUZsb3dC
b3g6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pOwog
ICAgIHBhaW50RWxsaXBzaXNCb3gocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGlu
ZUJvdHRvbSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgJ
KHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAKICAgICBFbGxp
cHNpc0JveCogZWxsaXBzaXNCb3goKSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRFbGxpcHNpc0Jv
eChQYWludEluZm8mLCBjb25zdCBJbnRQb2ludCYsIGludCBsaW5lVG9wLCBpbnQgbGluZUJvdHRv
bSkgY29uc3Q7CisgICAgdm9pZCBwYWludEVsbGlwc2lzQm94KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIGNv
bnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyVHJ1bmNhdGlvbigpOwogCkBAIC05NCwxMCAr
OTQsMTAgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgYWRkSGlnaGxp
Z2h0T3ZlcmZsb3coKTsKLSAgICB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KFBhaW50SW5mbyYs
IGNvbnN0IEludFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBoaWdobGlnaHRUeXBlKTsKKyAg
ICB2b2lkIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
JiwgY29uc3QgQXRvbWljU3RyaW5nJiBoaWdobGlnaHRUeXBlKTsKICNlbmRpZgogCi0gICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IEludFBvaW50JiwgaW50IGxpbmVUb3As
IGludCBsaW5lQm90dG9tKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRv
bSk7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIGludCBsaW5lVG9wLCBpbnQgbGluZUJv
dHRvbSk7CiAKICAgICBib29sIGhhc1NlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBt
X2hhc1NlbGVjdGVkQ2hpbGRyZW5PckNhbkhhdmVMZWFkaW5nRXhwYW5zaW9uOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcAkocmV2aXNpb24gOTA1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTQgKzc1LDE0
IEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnN0cmV0Y2hUb0hlaWdodCgKIH0KIAogI2lmIEVO
QUJMRShERUJVR19NQVRIX0xBWU9VVCkKLXZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KFBh
aW50SW5mbyYgaW5mbywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJN
YXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpCiB7CiAgICAgUmVuZGVyQmxvY2s6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsK
ICAgICAKICAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5w
aGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50
UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKKyAg
ICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlv
bigpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZvLmNv
bnRleHQpOwogICAgIApAQCAtOTAsMjIgKzkwLDIyIEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6
OnBhaW50KFBhaW50SW5mbyYKICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlk
U3Ryb2tlKTsKICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1
NSksIENvbG9yU3BhY2VTUkdCKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKGFk
anVzdGVkUGFpbnRPZmZzZXQsIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zm
c2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKLSAgICBpbmZvLmNvbnRleHQt
PmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgo
KSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0
LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVp
Z2h0KCkpKTsKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFp
bnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSwg
SW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSk7Ci0gICAgaW5mby5jb250ZXh0LT5k
cmF3TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0
LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSkpOworICAgIGlu
Zm8uY29udGV4dC0+ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgTGF5b3V0UG9pbnQoYWRq
dXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0
LnkoKSkpOworICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoTGF5b3V0UG9pbnQoYWRqdXN0ZWRQ
YWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSks
IExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgb2Zmc2V0V2lkdGgoKSwgYWRq
dXN0ZWRQYWludE9mZnNldC55KCkgKyBvZmZzZXRIZWlnaHQoKSkpOworICAgIGluZm8uY29udGV4
dC0+ZHJhd0xpbmUoTGF5b3V0UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVk
UGFpbnRPZmZzZXQueSgpICsgb2Zmc2V0SGVpZ2h0KCkpLCBMYXlvdXRQb2ludChhZGp1c3RlZFBh
aW50T2Zmc2V0LngoKSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsg
b2Zmc2V0SGVpZ2h0KCkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKGFkanVzdGVkUGFp
bnRPZmZzZXQsIExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSArIG9mZnNldEhlaWdodCgpKSk7CiAgICAgCiAgICAgaW50IHRvcFN0YXJ0
ID0gcGFkZGluZ1RvcCgpOwogICAgIAogICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
Q29sb3IoMCwgMjU1LCAwKSwgQ29sb3JTcGFjZVNSR0IpOwogICAgIAotICAgIGluZm8uY29udGV4
dC0+ZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFp
bnRPZmZzZXQueSgpICsgdG9wU3RhcnQpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0Lngo
KSArIG9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgdG9wU3RhcnQpKTsK
KyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZz
ZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSwgTGF5b3V0UG9pbnQo
YWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zm
c2V0LnkoKSArIHRvcFN0YXJ0KSk7CiAgICAgCiAgICAgaW50IGJhc2VsaW5lID0gYmFzZWxpbmVQ
b3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKTsKICAgICAK
ICAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDI1NSwgMCwgMCksIENvbG9y
U3BhY2VTUkdCKTsKICAgICAKLSAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGFk
anVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2VsaW5l
KSwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBvZmZzZXRXaWR0aCgpLCBhZGp1
c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2VsaW5lKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3
TGluZShMYXlvdXRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9m
ZnNldC55KCkgKyBiYXNlbGluZSksIExheW91dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgp
ICsgb2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGluZSkpOwog
fQogI2VuZGlmIC8vIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlv
bi5jcHAJKHJldmlzaW9uIDkwNTkzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEs
NyBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpsYXlvdXQoKQogCiB9CiAKLXZvaWQgUmVu
ZGVyTWF0aE1MRnJhY3Rpb246OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3QgSW50UG9pbnQm
IHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQoUGFpbnRJbmZv
JiBpbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUmVuZGVyTWF0
aE1MQmxvY2s6OnBhaW50KGluZm8sIHBhaW50T2Zmc2V0KTsKICAgICBpZiAoaW5mby5jb250ZXh0
LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWludChQ
YWludEluCiAgICAgaWYgKCFmaXJzdENoaWxkKCkgfHwhbV9saW5lVGhpY2tuZXNzKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpbnQgdmVydGljYWxPZmZzZXQgPSAwOworICAgIExheW91dFVuaXQg
dmVydGljYWxPZmZzZXQgPSAwOwogICAgIC8vIFRoZSBjaGlsZHJlbiBhcmUgYWx3YXlzIFJlbmRl
ck1hdGhNTEJsb2NrIGluc3RhbmNlcwogICAgIGlmIChmaXJzdENoaWxkKCktPmlzUmVuZGVyTWF0
aE1MQmxvY2soKSkgewogICAgICAgICBpbnQgYWRqdXN0Rm9yVGhpY2tuZXNzID0gbV9saW5lVGhp
Y2tuZXNzID4gMSA/IGludChtX2xpbmVUaGlja25lc3MgLyAyKSA6IDE7CkBAIC0xNTMsNyArMTUz
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQoUGFpbnRJbgogICAgICAgICAg
ICAgdmVydGljYWxPZmZzZXQgPSBudW1lcmF0b3ItPm9mZnNldEhlaWdodCgpOyAgICAgICAgCiAg
ICAgfQogICAgIAotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNl
dCArIGxvY2F0aW9uKCk7CisgICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBh
aW50T2Zmc2V0ICsgbG9jYXRpb24oKTsKICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0LnNldFkoYWRq
dXN0ZWRQYWludE9mZnNldC55KCkgKyB2ZXJ0aWNhbE9mZnNldCk7CiAgICAgCiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCppbmZvLmNvbnRleHQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3Qu
Y3BwCShyZXZpc2lvbiA5MDU5MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxSb290OjphZGRDaGlsZChSZW5kZXJPYgogICAgIH0KIH0KICAgICAKLXZv
aWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBJbnRQb2lu
dCYgcGFpbnRPZmZzZXQpCit2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYg
aW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIFJlbmRlck1hdGhN
TEJsb2NrOjpwYWludChpbmZvLCBwYWludE9mZnNldCk7CiAgICAgCkBAIC0xMDQsMTcgKzEwNCwx
NyBAQCB2b2lkIFJlbmRlck1hdGhNTFJvb3Q6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgaWYgKCFm
aXJzdENoaWxkKCkgfHwgIWxhc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRQ
b2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpOworICAg
IExheW91dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9u
KCk7CiAgICAgCiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGluZGV4Qm94ID0gdG9SZW5kZXJC
b3hNb2RlbE9iamVjdChsYXN0Q2hpbGQoKSk7CiAgICAgCi0gICAgaW50IG1heEhlaWdodCA9IGlu
ZGV4Qm94LT5vZmZzZXRIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IG1heEhlaWdodCA9IGluZGV4
Qm94LT5vZmZzZXRIZWlnaHQoKTsKICAgICAvLyBkZWZhdWx0IHRvIHRoZSBmb250IHNpemUgaW4g
cGl4ZWxzIGlmIHdlJ3JlIGVtcHR5CiAgICAgaWYgKCFtYXhIZWlnaHQpCiAgICAgICAgIG1heEhl
aWdodCA9IHN0eWxlKCktPmZvbnRTaXplKCk7Ci0gICAgaW50IHdpZHRoID0gaW5kZXhCb3gtPm9m
ZnNldFdpZHRoKCk7CisgICAgTGF5b3V0VW5pdCB3aWR0aCA9IGluZGV4Qm94LT5vZmZzZXRXaWR0
aCgpOwogICAgIAotICAgIGludCBpbmRleFdpZHRoID0gMDsKKyAgICBMYXlvdXRVbml0IGluZGV4
V2lkdGggPSAwOwogICAgIFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKICAg
ICB3aGlsZSAoY3VycmVudCAhPSBsYXN0Q2hpbGQoKSkgewogICAgICAgICBpZiAoY3VycmVudC0+
aXNCb3hNb2RlbE9iamVjdCgpKSB7CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBSZW5kZXJNYXRo
TUxSb290OjpwYWludChQYWludEluZm8mIAogICAgIHdpZHRoICs9IHRvcFN0YXJ0U2hpZnQ7CiAg
ICAgCiAgICAgaW50IHJvb3RQYWQgPSBzdGF0aWNfY2FzdDxpbnQ+KGdSb290UGFkZGluZyAqIHN0
eWxlKCktPmZvbnRTaXplKCkpOwotICAgIGludCBzdGFydCA9IGFkanVzdGVkUGFpbnRPZmZzZXQu
eCgpICsgaW5kZXhXaWR0aCArIGdSYWRpY2FsTGVmdE1hcmdpbiArIHN0eWxlKCktPnBhZGRpbmdM
ZWZ0KCkudmFsdWUoKSAtIHJvb3RQYWQ7CisgICAgTGF5b3V0VW5pdCBzdGFydCA9IGFkanVzdGVk
UGFpbnRPZmZzZXQueCgpICsgaW5kZXhXaWR0aCArIGdSYWRpY2FsTGVmdE1hcmdpbiArIHN0eWxl
KCktPnBhZGRpbmdMZWZ0KCkudmFsdWUoKSAtIHJvb3RQYWQ7CiAgICAgYWRqdXN0ZWRQYWludE9m
ZnNldC5zZXRZKGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgc3R5bGUoKS0+cGFkZGluZ1RvcCgp
LnZhbHVlKCkgLSByb290UGFkKTsKICAgICAKICAgICBGbG9hdFBvaW50IHRvcFN0YXJ0KHN0YXJ0
IC0gdG9wU3RhcnRTaGlmdCwgcGFpbnRPZmZzZXQueSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290
LmNwcAkocmV2aXNpb24gOTA1OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxNyArNjYs
MTcgQEAgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6UmVuZGVyTWF0aE1MU3F1YQogewogfQogCi12
b2lkIFJlbmRlck1hdGhNTFNxdWFyZVJvb3Q6OnBhaW50KFBhaW50SW5mbyYgaW5mbywgY29uc3Qg
SW50UG9pbnQmIHBhaW50T2Zmc2V0KQordm9pZCBSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWlu
dChQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAg
ICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywgcGFpbnRPZmZzZXQpOwogICAgCiAgICAg
aWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0ICsgbG9j
YXRpb24oKTsKKyAgICBMYXlvdXRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZz
ZXQgKyBsb2NhdGlvbigpOwogCi0gICAgaW50IG1heEhlaWdodCA9IDA7Ci0gICAgaW50IHdpZHRo
ID0gMDsKKyAgICBMYXlvdXRVbml0IG1heEhlaWdodCA9IDA7CisgICAgTGF5b3V0VW5pdCB3aWR0
aCA9IDA7CiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwogICAgIHdo
aWxlIChjdXJyZW50KSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5pc0JveE1vZGVsT2JqZWN0KCkp
IHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>