<?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>122706</bug_id>
          
          <creation_ts>2013-10-12 16:56:00 -0700</creation_ts>
          <short_desc>Move absoluteRects/Quads to RenderTextLineBoxes</short_desc>
          <delta_ts>2013-10-13 02:39: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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>buildbot</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>d-r</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mario</cc>
    
    <cc>pdr</cc>
    
    <cc>philn</cc>
    
    <cc>rniwa</cc>
    
    <cc>schenney</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>939142</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-12 16:56:00 -0700</bug_when>
    <thetext>Move more code iterating line boxes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939146</commentid>
    <comment_count>1</comment_count>
      <attachid>214070</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-12 17:06:01 -0700</bug_when>
    <thetext>Created attachment 214070
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939147</commentid>
    <comment_count>2</comment_count>
      <attachid>214070</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-12 17:11:02 -0700</bug_when>
    <thetext>Comment on attachment 214070
patch

Attachment 214070 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/3339160</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939148</commentid>
    <comment_count>3</comment_count>
      <attachid>214070</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-12 17:11:09 -0700</bug_when>
    <thetext>Comment on attachment 214070
patch

Attachment 214070 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/3901172</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939155</commentid>
    <comment_count>4</comment_count>
      <attachid>214070</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-12 17:38:25 -0700</bug_when>
    <thetext>Comment on attachment 214070
patch

Attachment 214070 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/3936098</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939157</commentid>
    <comment_count>5</comment_count>
      <attachid>214070</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-12 17:48:35 -0700</bug_when>
    <thetext>Comment on attachment 214070
patch

Attachment 214070 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/3931098</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939158</commentid>
    <comment_count>6</comment_count>
      <attachid>214070</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-12 17:49:12 -0700</bug_when>
    <thetext>Comment on attachment 214070
patch

Attachment 214070 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/3933093</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939159</commentid>
    <comment_count>7</comment_count>
      <attachid>214070</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-10-12 17:54:57 -0700</bug_when>
    <thetext>Comment on attachment 214070
patch

Attachment 214070 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/3929107</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939229</commentid>
    <comment_count>8</comment_count>
      <attachid>214091</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-13 02:14:37 -0700</bug_when>
    <thetext>Created attachment 214091
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939230</commentid>
    <comment_count>9</comment_count>
      <attachid>214091</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-13 02:28:06 -0700</bug_when>
    <thetext>Comment on attachment 214091
another

r=me

The use of out args for Vectors looks very last year. :|</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939234</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-10-13 02:39:15 -0700</bug_when>
    <thetext>https://trac.webkit.org/r157362</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214070</attachid>
            <date>2013-10-12 17:06:01 -0700</date>
            <delta_ts>2013-10-13 02:14:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>rendertextlineboxes-absolutequad-2.patch</filename>
            <type>text/plain</type>
            <size>25257</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzM0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEzLTEwLTEyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGFic29sdXRlUmVjdHMv
UXVhZHMgdG8gUmVuZGVyVGV4dExpbmVCb3hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNzA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjphYnNvbHV0ZVJlY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUmVjdHNGb3JS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjphYnNvbHV0ZVF1
YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUXVh
ZHNGb3JSYW5nZSk6CisgICAgICAgIAorICAgICAgICAgICAgVGhlc2UgbW92ZS4KKworICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2VsZWN0aW9uUmVjdEZvclJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRl
KToKKyAgICAgICAgCisgICAgICAgICAgICBBbHNvIG1vdmVkIGEgZmV3IHNtYWxsZXIgZnVuY3Rp
b25zLgorCiAyMDEzLTEwLTEyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNb3ZlIHBvc2l0aW9uRm9yUG9pbnQgdG8gUmVuZGVyVGV4dExpbmVCb3hlcwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OTAsNyArNzkwLDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpibwogICAgICAgICBpc1NWR1Jvb3QgPSB0cnVlOwogI2VuZGlmCiAgICAgaWYgKG9iai0+
aXNUZXh0KCkpCi0gICAgICAgIHRvUmVuZGVyVGV4dChvYmopLT5hYnNvbHV0ZVF1YWRzKHF1YWRz
LCAwLCBSZW5kZXJUZXh0OjpDbGlwVG9FbGxpcHNpcyk7CisgICAgICAgIHRvUmVuZGVyVGV4dChv
YmopLT5hYnNvbHV0ZVF1YWRzQ2xpcHBlZFRvRWxsaXBzaXMocXVhZHMpOwogICAgIGVsc2UgaWYg
KGlzV2ViQXJlYSgpIHx8IGlzU2VhbWxlc3NXZWJBcmVhKCkgfHwgaXNTVkdSb290KQogICAgICAg
ICBvYmotPmFic29sdXRlUXVhZHMocXVhZHMpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE1NzM0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE1LDE3ICsxMTUsMTcgQEAgTGF5b3V0VW5pdCBJbmxpbmVUZXh0Qm94OjpsaW5lSGVpZ2h0
KCkgYwogICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKCkucGFyZW50
KCkpLT5saW5lSGVpZ2h0KGlzRmlyc3RMaW5lKCksIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRh
bExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7CiB9CiAKLUxh
eW91dFVuaXQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uVG9wKCkKK0xheW91dFVuaXQgSW5saW5l
VGV4dEJveDo6c2VsZWN0aW9uVG9wKCkgY29uc3QKIHsKICAgICByZXR1cm4gcm9vdCgpLnNlbGVj
dGlvblRvcCgpOwogfQogCi1MYXlvdXRVbml0IElubGluZVRleHRCb3g6OnNlbGVjdGlvbkJvdHRv
bSgpCitMYXlvdXRVbml0IElubGluZVRleHRCb3g6OnNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHJvb3QoKS5zZWxlY3Rpb25Cb3R0b20oKTsKIH0KIAotTGF5b3V0VW5pdCBJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQoKQorTGF5b3V0VW5pdCBJbmxpbmVUZXh0Qm94
OjpzZWxlY3Rpb25IZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiByb290KCkuc2VsZWN0aW9u
SGVpZ2h0KCk7CiB9CkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGljIGNvbnN0IEZvbnQmIGZvbnRU
b1VzZShjb25zdCBSZW5kZQogICAgIHJldHVybiBzdHlsZS5mb250KCk7CiB9CiAKLUxheW91dFJl
Y3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvcywgaW50IGVu
ZFBvcykKK0xheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBz
dGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKIHsKICAgICBpbnQgc1BvcyA9IG1heChzdGFydFBv
cyAtIG1fc3RhcnQsIDApOwogICAgIGludCBlUG9zID0gbWluKGVuZFBvcyAtIG1fc3RhcnQsIChp
bnQpbV9sZW4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
CShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgb2Zmc2V0UnVuKGludCBkKSB7IEFTU0VSVCghaXNEaXJ0eSgpKTsgbV9zdGFydCArPSBkOyB9
CiAKLSAgICB1bnNpZ25lZCBzaG9ydCB0cnVuY2F0aW9uKCkgeyByZXR1cm4gbV90cnVuY2F0aW9u
OyB9CisgICAgdW5zaWduZWQgc2hvcnQgdHJ1bmNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJ1
bmNhdGlvbjsgfQogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtEaXJ0eShib29sIGRpcnR5ID0gdHJ1
ZSkgT1ZFUlJJREUgRklOQUw7CiAKQEAgLTEwMiw5ICsxMDIsOSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogcHJpdmF0ZToKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCgpOwotICAgIExheW91dFVu
aXQgc2VsZWN0aW9uQm90dG9tKCk7Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKTsK
KyAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgc2Vs
ZWN0aW9uQm90dG9tKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKSBj
b25zdDsKIAogICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEZvbnQmLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qID0gMCkgY29uc3Q7CiAgICAg
VGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYs
IFN0cmluZywgaW50IG1heGltdW1MZW5ndGgsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAw
KSBjb25zdDsKQEAgLTExMiw3ICsxMTIsNyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHZpcnR1
YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBGbG9hdFJl
Y3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQogCi0gICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOworICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5k
UG9zKSBjb25zdDsKICAgICBib29sIGlzU2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9z
KSBjb25zdDsKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9z
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNp
b24gMTU3MzQ5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjQsMjcgKzI2NCw2IEBAIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1
dGVSZWN0cyhWZWN0b3I8SW4KICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3Qo
RmxvYXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgYm94LT50b3BMZWZ0KCksIGJveC0+c2l6ZSgp
KSkpOwogfQogCi1zdGF0aWMgRmxvYXRSZWN0IGxvY2FsUXVhZEZvclRleHRCb3goSW5saW5lVGV4
dEJveCogYm94LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCkKLXsKLSAgICB1bnNpZ25lZCByZWFsRW5kID0gbWluKGJveC0+ZW5kKCkgKyAxLCBl
bmQpOwotICAgIExheW91dFJlY3QgciA9IGJveC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0LCBy
ZWFsRW5kKTsKLSAgICBpZiAoci5oZWlnaHQoKSkgewotICAgICAgICBpZiAoIXVzZVNlbGVjdGlv
bkhlaWdodCkgewotICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBoZWlnaHQgYW5kIHkgcG9zaXRp
b24gKG9yIHdpZHRoIGFuZCB4IGZvciB2ZXJ0aWNhbCB0ZXh0KQotICAgICAgICAgICAgLy8gYmVj
YXVzZSBzZWxlY3Rpb25SZWN0IHVzZXMgc2VsZWN0aW9uLXNwZWNpZmljIHZhbHVlcy4KLSAgICAg
ICAgICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7Ci0gICAgICAgICAgICAgICAgci5zZXRI
ZWlnaHQoYm94LT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgci5zZXRZKGJveC0+eSgpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgci5zZXRXaWR0aChib3gtPndp
ZHRoKCkpOwotICAgICAgICAgICAgICAgIHIuc2V0WChib3gtPngoKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChyKTsKLSAgICB9Ci0gICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotfQotCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHNGb3JS
YW5nZShWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5k
LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgYm9vbCogd2FzRml4ZWQpCiB7CiAgICAgLy8gV29y
ayBhcm91bmQgc2lnbmVkL3Vuc2lnbmVkIGlzc3Vlcy4gVGhpcyBmdW5jdGlvbiB0YWtlcyB1bnNp
Z25lZHMsIGFuZCBpcyBvZnRlbiBwYXNzZWQgVUlOVF9NQVgKQEAgLTI5Nyw3NSArMjc2LDE3IEBA
IHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKFYKICAgICBzdGFydCA9IG1p
bihzdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKICAgICBlbmQgPSBtaW4o
ZW5kLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UX01BWCkpOwogICAgIAotICAgIGZvciAoSW5s
aW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4
dEJveCgpKSB7Ci0gICAgICAgIC8vIE5vdGU6IGJveC0+ZW5kKCkgcmV0dXJucyB0aGUgaW5kZXgg
b2YgdGhlIGxhc3QgY2hhcmFjdGVyLCBub3QgdGhlIGluZGV4IHBhc3QgaXQKLSAgICAgICAgaWYg
KHN0YXJ0IDw9IGJveC0+c3RhcnQoKSAmJiBib3gtPmVuZCgpIDwgZW5kKSB7Ci0gICAgICAgICAg
ICBGbG9hdFJlY3QgciA9IGJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygpOwotICAgICAgICAgICAg
aWYgKHVzZVNlbGVjdGlvbkhlaWdodCkgewotICAgICAgICAgICAgICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCA9IGJveC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0LCBlbmQpOwotICAgICAg
ICAgICAgICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHIuc2V0SGVpZ2h0KHNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgICAg
ICByLnNldFkoc2VsZWN0aW9uUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHIuc2V0V2lkdGgoc2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgci5zZXRYKHNlbGVjdGlvblJlY3QueCgpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWN0cy5hcHBlbmQobG9jYWxUb0Fi
c29sdXRlUXVhZChyLCAwLCB3YXNGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIHdyb25nLiBJ
dCdzIGNvbnZlcnRpbmcgbG9jYWwgdG8gYWJzb2x1dGUgdHdpY2UuIGh0dHA6Ly93ZWJraXQub3Jn
L2IvNjU3MjIKLSAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gbG9jYWxRdWFkRm9yVGV4dEJv
eChib3gsIHN0YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCk7Ci0gICAgICAgICAgICBpZiAo
IXJlY3QuaXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGxvY2FsVG9BYnNv
bHV0ZVF1YWQocmVjdCwgMCwgd2FzRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG1fbGluZUJveGVzLmFic29sdXRlUmVjdHNGb3JSYW5nZSgqdGhp
cywgcmVjdHMsIHN0YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCwgd2FzRml4ZWQpOwogfQog
Ci1zdGF0aWMgSW50UmVjdCBlbGxpcHNpc1JlY3RGb3JCb3goSW5saW5lVGV4dEJveCogYm94LCB1
bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKQordm9pZCBSZW5kZXJUZXh0OjphYnNv
bHV0ZVF1YWRzQ2xpcHBlZFRvRWxsaXBzaXMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKSBjb25z
dAogewotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIAotICAg
IHVuc2lnbmVkIHNob3J0IHRydW5jYXRpb24gPSBib3gtPnRydW5jYXRpb24oKTsKLSAgICBpZiAo
dHJ1bmNhdGlvbiA9PSBjTm9UcnVuY2F0aW9uKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwot
ICAgIAotICAgIEludFJlY3QgcmVjdDsKLSAgICBpZiAoRWxsaXBzaXNCb3gqIGVsbGlwc2lzID0g
Ym94LT5yb290KCkuZWxsaXBzaXNCb3goKSkgewotICAgICAgICBpbnQgZWxsaXBzaXNTdGFydFBv
c2l0aW9uID0gbWF4PGludD4oc3RhcnRQb3MgLSBib3gtPnN0YXJ0KCksIDApOwotICAgICAgICBp
bnQgZWxsaXBzaXNFbmRQb3NpdGlvbiA9IG1pbjxpbnQ+KGVuZFBvcyAtIGJveC0+c3RhcnQoKSwg
Ym94LT5sZW4oKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgZWxsaXBzaXMgc2hvdWxkIGJl
IGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVuZCBvZgotICAgICAgICAvLyB0aGUg
c2VsZWN0aW9uIGlzIHBhc3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbiBhbmQgdGhl
Ci0gICAgICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlZm9yZSBvciBhdCB0
aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uLgotICAgICAgICBpZiAoZWxsaXBzaXNFbmRQ
b3NpdGlvbiA+PSB0cnVuY2F0aW9uICYmIGVsbGlwc2lzU3RhcnRQb3NpdGlvbiA8PSB0cnVuY2F0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIGVsbGlwc2lzLT5zZWxlY3Rpb25SZWN0KCk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgcmV0dXJuIG1fbGluZUJveGVzLmFi
c29sdXRlUXVhZHMoKnRoaXMsIHF1YWRzLCBudWxscHRyLCBSZW5kZXJUZXh0TGluZUJveGVzOjpD
bGlwVG9FbGxpcHNpcyk7CiB9Ci0gICAgCi12b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMo
VmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCwgQ2xpcHBpbmdPcHRpb24g
b3B0aW9uKSBjb25zdAotewotICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0
Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCBib3VuZGFyaWVzID0gYm94LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCk7CiAKLSAgICAgICAgLy8g
U2hvcnRlbiB0aGUgd2lkdGggb2YgdGhpcyB0ZXh0IGJveCBpZiBpdCBlbmRzIGluIGFuIGVsbGlw
c2lzLgotICAgICAgICAvLyBGSVhNRTogZWxsaXBzaXNSZWN0Rm9yQm94IHNob3VsZCBzd2l0Y2gg
dG8gcmV0dXJuIEZsb2F0UmVjdCBzb29uIHdpdGggdGhlIHN1YnBpeGVsbGF5b3V0IGJyYW5jaC4K
LSAgICAgICAgSW50UmVjdCBlbGxpcHNpc1JlY3QgPSAob3B0aW9uID09IENsaXBUb0VsbGlwc2lz
KSA/IGVsbGlwc2lzUmVjdEZvckJveChib3gsIDAsIHRleHRMZW5ndGgoKSkgOiBJbnRSZWN0KCk7
Ci0gICAgICAgIGlmICghZWxsaXBzaXNSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYg
KHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICAgICAgYm91
bmRhcmllcy5zZXRXaWR0aChlbGxpcHNpc1JlY3QubWF4WCgpIC0gYm91bmRhcmllcy54KCkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0SGVpZ2h0KGVs
bGlwc2lzUmVjdC5tYXhZKCkgLSBib3VuZGFyaWVzLnkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoYm91bmRhcmllcywgMCwgd2FzRml4ZWQp
KTsKLSAgICB9Ci19Ci0gICAgCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKIHsKLSAgICBhYnNvbHV0
ZVF1YWRzKHF1YWRzLCB3YXNGaXhlZCwgTm9DbGlwcGluZyk7CisgICAgcmV0dXJuIG1fbGluZUJv
eGVzLmFic29sdXRlUXVhZHMoKnRoaXMsIHF1YWRzLCB3YXNGaXhlZCwgUmVuZGVyVGV4dExpbmVC
b3hlczo6Tm9DbGlwcGluZyk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0Zv
clJhbmdlKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIGJvb2wqIHdhc0ZpeGVkKQpAQCAtMzgwLDI3
ICszMDEsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHNGb3JSYW5nZShWCiAgICAg
c3RhcnQgPSBtaW4oc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlRfTUFYKSk7CiAgICAg
ZW5kID0gbWluKGVuZCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKICAgICAKLSAg
ICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJv
eC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICAvLyBOb3RlOiBib3gtPmVuZCgpIHJldHVybnMg
dGhlIGluZGV4IG9mIHRoZSBsYXN0IGNoYXJhY3Rlciwgbm90IHRoZSBpbmRleCBwYXN0IGl0Ci0g
ICAgICAgIGlmIChzdGFydCA8PSBib3gtPnN0YXJ0KCkgJiYgYm94LT5lbmQoKSA8IGVuZCkgewot
ICAgICAgICAgICAgRmxvYXRSZWN0IHIgPSBib3gtPmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKLSAg
ICAgICAgICAgIGlmICh1c2VTZWxlY3Rpb25IZWlnaHQpIHsKLSAgICAgICAgICAgICAgICBMYXlv
dXRSZWN0IHNlbGVjdGlvblJlY3QgPSBib3gtPmxvY2FsU2VsZWN0aW9uUmVjdChzdGFydCwgZW5k
KTsKLSAgICAgICAgICAgICAgICBpZiAoYm94LT5pc0hvcml6b250YWwoKSkgewotICAgICAgICAg
ICAgICAgICAgICByLnNldEhlaWdodChzZWxlY3Rpb25SZWN0LmhlaWdodCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgci5zZXRZKHNlbGVjdGlvblJlY3QueSgpKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByLnNldFdpZHRoKHNlbGVjdGlvblJlY3Qud2lk
dGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHIuc2V0WChzZWxlY3Rpb25SZWN0LngoKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcXVhZHMuYXBwZW5k
KGxvY2FsVG9BYnNvbHV0ZVF1YWQociwgMCwgd2FzRml4ZWQpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gbG9jYWxRdWFkRm9yVGV4dEJveChib3gsIHN0
YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCk7Ci0gICAgICAgICAgICBpZiAoIXJlY3QuaXNa
ZXJvKCkpCi0gICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQo
cmVjdCwgMCwgd2FzRml4ZWQpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX2xpbmVCb3hlcy5h
YnNvbHV0ZVF1YWRzRm9yUmFuZ2UoKnRoaXMsIHF1YWRzLCBzdGFydCwgZW5kLCB1c2VTZWxlY3Rp
b25IZWlnaHQsIHdhc0ZpeGVkKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBv
c2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQpAQCAtOTI0LDI5ICs4MjUs
OCBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjCiB7CiAgICAgUmVu
ZGVyT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7CiAKLSAgICBpZiAoY2FuVXBkYXRl
U2VsZWN0aW9uT25Sb290TGluZUJveGVzKCkpIHsKLSAgICAgICAgaWYgKHN0YXRlID09IFNlbGVj
dGlvblN0YXJ0IHx8IHN0YXRlID09IFNlbGVjdGlvbkVuZCB8fCBzdGF0ZSA9PSBTZWxlY3Rpb25C
b3RoKSB7Ci0gICAgICAgICAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKLSAgICAgICAgICAgIHNl
bGVjdGlvblN0YXJ0RW5kKHN0YXJ0UG9zLCBlbmRQb3MpOwotICAgICAgICAgICAgaWYgKHNlbGVj
dGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uU3RhcnQpIHsKLSAgICAgICAgICAgICAgICBlbmRQb3Mg
PSB0ZXh0TGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUgc2VsZWN0aW9u
IGZyb20gZW5kIG9mIHRleHQgdG8gZW5kIG9mIGxpbmUKLSAgICAgICAgICAgICAgICBpZiAoc3Rh
cnRQb3MgJiYgc3RhcnRQb3MgPT0gZW5kUG9zKQotICAgICAgICAgICAgICAgICAgICBzdGFydFBv
cyA9IGVuZFBvcyAtIDE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblN0YXRlKCkg
PT0gU2VsZWN0aW9uRW5kKQotICAgICAgICAgICAgICAgIHN0YXJ0UG9zID0gMDsKLQotICAgICAg
ICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3gg
PSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYm94LT5pc1NlbGVj
dGVkKHN0YXJ0UG9zLCBlbmRQb3MpKQotICAgICAgICAgICAgICAgICAgICBib3gtPnJvb3QoKS5z
ZXRIYXNTZWxlY3RlZENoaWxkcmVuKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3go
KTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBib3gt
PnJvb3QoKS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlID09IFNlbGVjdGlvbkluc2lkZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGNhblVwZGF0ZVNlbGVj
dGlvbk9uUm9vdExpbmVCb3hlcygpKQorICAgICAgICBtX2xpbmVCb3hlcy5zZXRTZWxlY3Rpb25T
dGF0ZSgqdGhpcywgc3RhdGUpOwogCiAgICAgLy8gVGhlIGNvbnRhaW5pbmcgYmxvY2sgY2FuIGJl
IG51bGwgaW4gY2FzZSBvZiBhbiBvcnBoYW5lZCB0cmVlLgogICAgIFJlbmRlckJsb2NrKiBjb250
YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKQEAgLTEyMzMsMTEgKzExMTMs
NyBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RGb3JSCiAgICAgaWYgKHN0
YXJ0UG9zID09IGVuZFBvcykKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIExheW91
dFJlY3QgcmVjdDsKLSAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgp
OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICByZWN0LnVuaXRlKGJv
eC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0UG9zLCBlbmRQb3MpKTsKLSAgICAgICAgcmVjdC51
bml0ZShlbGxpcHNpc1JlY3RGb3JCb3goYm94LCBzdGFydFBvcywgZW5kUG9zKSk7Ci0gICAgfQor
ICAgIExheW91dFJlY3QgcmVjdCA9IG1fbGluZUJveGVzLnNlbGVjdGlvblJlY3RGb3JSYW5nZShz
dGFydFBvcywgZW5kUG9zKTsKIAogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAg
ICAgY29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiAxNTczNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OCw4ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBPVkVSUklERSBGSU5BTDsKICAg
ICB2b2lkIGFic29sdXRlUXVhZHNGb3JSYW5nZShWZWN0b3I8RmxvYXRRdWFkPiYsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gVUlOVF9NQVgsIGJvb2wgdXNl
U2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UsIGJvb2wqIHdhc0ZpeGVkID0gMCk7CiAKLSAgICBlbnVt
IENsaXBwaW5nT3B0aW9uIHsgTm9DbGlwcGluZywgQ2xpcFRvRWxsaXBzaXMgfTsKLSAgICB2b2lk
IGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCA9IDAsIENs
aXBwaW5nT3B0aW9uID0gTm9DbGlwcGluZykgY29uc3Q7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRz
Q2xpcHBlZFRvRWxsaXBzaXMoVmVjdG9yPEZsb2F0UXVhZD4mKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKSBP
VkVSUklERTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5l
Qm94ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0TGluZUJveGVzLmNwcAkocmV2aXNpb24gMTU3MzQ5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dExpbmVCb3hl
cy5oIgogCisjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpA
QCAtMjI1LDYgKzIyNiwxNiBAQCBpbnQgUmVuZGVyVGV4dExpbmVCb3hlczo6Y2FyZXRNYXhPZmZz
ZXQoCiAgICAgcmV0dXJuIG1heE9mZnNldDsKIH0KIAorTGF5b3V0UmVjdCBSZW5kZXJUZXh0TGlu
ZUJveGVzOjpzZWxlY3Rpb25SZWN0Rm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVu
ZCkKK3sKKyAgICBMYXlvdXRSZWN0IHJlY3Q7CisgICAgZm9yIChhdXRvIGJveCA9IG1fZmlyc3Q7
IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CisgICAgICAgIHJlY3QudW5pdGUoYm94
LT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIGVuZCkpOworICAgICAgICByZWN0LnVuaXRlKGVs
bGlwc2lzUmVjdEZvckJveCgqYm94LCBzdGFydCwgZW5kKSk7CisgICAgfQorICAgIHJldHVybiBy
ZWN0OworfQorCiBlbnVtIFNob3VsZEFmZmluaXR5QmVEb3duc3RyZWFtIHsgQWx3YXlzRG93bnN0
cmVhbSwgQWx3YXlzVXBzdHJlYW0sIFVwc3RyZWFtSWZQb3NpdGlvbklzTm90QXRTdGFydCB9Owog
CiBzdGF0aWMgYm9vbCBsaW5lRGlyZWN0aW9uUG9pbnRGaXRzSW5Cb3goaW50IHBvaW50TGluZURp
cmVjdGlvbiwgY29uc3QgSW5saW5lVGV4dEJveCYgYm94LCBTaG91bGRBZmZpbml0eUJlRG93bnN0
cmVhbSYgc2hvdWxkQWZmaW5pdHlCZURvd25zdHJlYW0pCkBAIC0zODksNiArNDAwLDE0OCBAQCBW
aXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dExpbmVCb3hlczo6cG9zCiAgICAgcmV0dXJuIHJlbmRl
cmVyLmNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RSRUFNKTsKIH0KIAordm9pZCBSZW5k
ZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwg
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICBpZiAoc3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25Ob25lKSB7CisgICAgICAgIGZvciAoYXV0byBib3ggPSBtX2ZpcnN0OyBib3g7IGJv
eCA9IGJveC0+bmV4dFRleHRCb3goKSkKKyAgICAgICAgICAgIGJveC0+cm9vdCgpLnNldEhhc1Nl
bGVjdGVkQ2hpbGRyZW4oc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHN0YXJ0LCBlbmQ7CisgICAgcmVuZGVy
ZXIuc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnQsIGVuZCk7CisgICAgaWYgKHN0YXRlID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uU3RhcnQpIHsKKyAgICAgICAgZW5kID0gcmVuZGVyZXIudGV4dExl
bmd0aCgpOworCisgICAgICAgIC8vIHRvIGhhbmRsZSBzZWxlY3Rpb24gZnJvbSBlbmQgb2YgdGV4
dCB0byBlbmQgb2YgbGluZQorICAgICAgICBpZiAoc3RhcnQgJiYgc3RhcnQgPT0gZW5kKQorICAg
ICAgICAgICAgc3RhcnQgPSBlbmQgLSAxOworICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25FbmQpCisgICAgICAgIHN0YXJ0ID0gMDsKKworICAgIGZvciAoYXV0
byBib3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAg
ICBpZiAoYm94LT5pc1NlbGVjdGVkKHN0YXJ0LCBlbmQpKQorICAgICAgICAgICAgYm94LT5yb290
KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbih0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVy
VGV4dExpbmVCb3hlczo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0Cit7CisgICAgZm9yIChhdXRv
IGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQorICAgICAgICBy
ZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QoYWNjdW11bGF0ZWRPZmZzZXQg
KyBib3gtPnRvcExlZnQoKSwgYm94LT5zaXplKCkpKSk7Cit9CisKK3N0YXRpYyBGbG9hdFJlY3Qg
bG9jYWxRdWFkRm9yVGV4dEJveChjb25zdCBJbmxpbmVUZXh0Qm94JiBib3gsIHVuc2lnbmVkIHN0
YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQoreworICAgIHVuc2ln
bmVkIHJlYWxFbmQgPSBzdGQ6Om1pbihib3guZW5kKCkgKyAxLCBlbmQpOworICAgIExheW91dFJl
Y3QgYm94U2VsZWN0aW9uUmVjdCA9IGJveC5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIHJlYWxF
bmQpOworICAgIGlmICghYm94U2VsZWN0aW9uUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworICAgIGlmICh1c2VTZWxlY3Rpb25IZWlnaHQpCisgICAgICAgIHJldHVy
biBib3hTZWxlY3Rpb25SZWN0OworICAgIC8vIENoYW5nZSB0aGUgaGVpZ2h0IGFuZCB5IHBvc2l0
aW9uIChvciB3aWR0aCBhbmQgeCBmb3IgdmVydGljYWwgdGV4dCkKKyAgICAvLyBiZWNhdXNlIHNl
bGVjdGlvblJlY3QgdXNlcyBzZWxlY3Rpb24tc3BlY2lmaWMgdmFsdWVzLgorICAgIGlmIChib3gu
aXNIb3Jpem9udGFsKCkpIHsKKyAgICAgICAgYm94U2VsZWN0aW9uUmVjdC5zZXRIZWlnaHQoYm94
LmhlaWdodCgpKTsKKyAgICAgICAgYm94U2VsZWN0aW9uUmVjdC5zZXRZKGJveC55KCkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJveFNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYm94LndpZHRoKCkp
OworICAgICAgICBib3hTZWxlY3Rpb25SZWN0LnNldFgoYm94LngoKSk7CisgICAgfQorICAgIHJl
dHVybiBib3hTZWxlY3Rpb25SZWN0OworfQorCit2b2lkIFJlbmRlclRleHRMaW5lQm94ZXM6OmFi
c29sdXRlUmVjdHNGb3JSYW5nZShjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlciwgVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgYm9vbCB1c2VTZWxl
Y3Rpb25IZWlnaHQsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAoreworICAgIGZvciAoYXV0byBib3gg
PSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICAvLyBO
b3RlOiBib3gtPmVuZCgpIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNoYXJhY3Rlciwg
bm90IHRoZSBpbmRleCBwYXN0IGl0CisgICAgICAgIGlmIChzdGFydCA8PSBib3gtPnN0YXJ0KCkg
JiYgYm94LT5lbmQoKSA8IGVuZCkgeworICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kYXJpZXMg
PSBib3gtPmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKKyAgICAgICAgICAgIGlmICh1c2VTZWxlY3Rp
b25IZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBi
b3gtPmxvY2FsU2VsZWN0aW9uUmVjdChzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICBpZiAo
Ym94LT5pc0hvcml6b250YWwoKSkgeworICAgICAgICAgICAgICAgICAgICBib3VuZGFyaWVzLnNl
dEhlaWdodChzZWxlY3Rpb25SZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYm91
bmRhcmllcy5zZXRZKHNlbGVjdGlvblJlY3QueSgpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBib3VuZGFyaWVzLnNldFdpZHRoKHNlbGVjdGlvblJlY3Qu
d2lkdGgoKSk7CisgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0WChzZWxlY3Rpb25S
ZWN0LngoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmVjdHMuYXBwZW5kKHJlbmRlcmVyLmxvY2FsVG9BYnNvbHV0ZVF1YWQoYm91bmRhcmllcywgMCwg
d2FzRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyB3cm9uZy4gSXQncyBj
b252ZXJ0aW5nIGxvY2FsIHRvIGFic29sdXRlIHR3aWNlLiBodHRwOi8vd2Via2l0Lm9yZy9iLzY1
NzIyCisgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gbG9jYWxRdWFkRm9yVGV4dEJveCgqYm94LCBz
dGFydCwgZW5kLCB1c2VTZWxlY3Rpb25IZWlnaHQpOworICAgICAgICBpZiAoIXJlY3QuaXNaZXJv
KCkpCisgICAgICAgICAgICByZWN0cy5hcHBlbmQocmVuZGVyZXIubG9jYWxUb0Fic29sdXRlUXVh
ZChyZWN0LCAwLCB3YXNGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgfQorfQor
CitzdGF0aWMgSW50UmVjdCBlbGxpcHNpc1JlY3RGb3JCb3goY29uc3QgSW5saW5lVGV4dEJveCYg
Ym94LCB1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKQoreworICAgIHVuc2lnbmVk
IHNob3J0IHRydW5jYXRpb24gPSBib3gudHJ1bmNhdGlvbigpOworICAgIGlmICh0cnVuY2F0aW9u
ID09IGNOb1RydW5jYXRpb24pCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBhdXRv
IGVsbGlwc2lzID0gYm94LnJvb3QoKS5lbGxpcHNpc0JveCgpOworICAgIGlmICghZWxsaXBzaXMp
CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgCisgICAgSW50UmVjdCByZWN0OworICAg
IGludCBlbGxpcHNpc1N0YXJ0UG9zaXRpb24gPSBzdGQ6Om1heDxpbnQ+KHN0YXJ0UG9zIC0gYm94
LnN0YXJ0KCksIDApOworICAgIGludCBlbGxpcHNpc0VuZFBvc2l0aW9uID0gc3RkOjptaW48aW50
PihlbmRQb3MgLSBib3guc3RhcnQoKSwgYm94LmxlbigpKTsKKyAgICAKKyAgICAvLyBUaGUgZWxs
aXBzaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVuZCBvZgor
ICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0
aW9uIGFuZCB0aGUKKyAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBpcyBiZWZvcmUg
b3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbi4KKyAgICBpZiAoZWxsaXBzaXNF
bmRQb3NpdGlvbiA8IHRydW5jYXRpb24gJiYgZWxsaXBzaXNTdGFydFBvc2l0aW9uID4gdHJ1bmNh
dGlvbikKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gZWxsaXBzaXMtPnNl
bGVjdGlvblJlY3QoKTsKK30KKwordm9pZCBSZW5kZXJUZXh0TGluZUJveGVzOjphYnNvbHV0ZVF1
YWRzKGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyLCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMs
IGJvb2wqIHdhc0ZpeGVkLCBDbGlwcGluZ09wdGlvbiBvcHRpb24pIGNvbnN0Cit7CisgICAgZm9y
IChhdXRvIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Cisg
ICAgICAgIEZsb2F0UmVjdCBib3VuZGFyaWVzID0gYm94LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCk7
CisKKyAgICAgICAgLy8gU2hvcnRlbiB0aGUgd2lkdGggb2YgdGhpcyB0ZXh0IGJveCBpZiBpdCBl
bmRzIGluIGFuIGVsbGlwc2lzLgorICAgICAgICAvLyBGSVhNRTogZWxsaXBzaXNSZWN0Rm9yQm94
IHNob3VsZCBzd2l0Y2ggdG8gcmV0dXJuIEZsb2F0UmVjdCBzb29uIHdpdGggdGhlIHN1YnBpeGVs
bGF5b3V0IGJyYW5jaC4KKyAgICAgICAgSW50UmVjdCBlbGxpcHNpc1JlY3QgPSAob3B0aW9uID09
IENsaXBUb0VsbGlwc2lzKSA/IGVsbGlwc2lzUmVjdEZvckJveCgqYm94LCAwLCByZW5kZXJlci50
ZXh0TGVuZ3RoKCkpIDogSW50UmVjdCgpOworICAgICAgICBpZiAoIWVsbGlwc2lzUmVjdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQorICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0V2lkdGgoZWxsaXBz
aXNSZWN0Lm1heFgoKSAtIGJvdW5kYXJpZXMueCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBib3VuZGFyaWVzLnNldEhlaWdodChlbGxpcHNpc1JlY3QubWF4WSgpIC0gYm91
bmRhcmllcy55KCkpOworICAgICAgICB9CisgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlci5s
b2NhbFRvQWJzb2x1dGVRdWFkKGJvdW5kYXJpZXMsIDAsIHdhc0ZpeGVkKSk7CisgICAgfQorfQor
Cit2b2lkIFJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUXVhZHNGb3JSYW5nZShjb25zdCBS
ZW5kZXJUZXh0JiByZW5kZXJlciwgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCB1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgYm9vbCogd2FzRml4
ZWQpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94
LT5uZXh0VGV4dEJveCgpKSB7CisgICAgICAgIC8vIE5vdGU6IGJveC0+ZW5kKCkgcmV0dXJucyB0
aGUgaW5kZXggb2YgdGhlIGxhc3QgY2hhcmFjdGVyLCBub3QgdGhlIGluZGV4IHBhc3QgaXQKKyAg
ICAgICAgaWYgKHN0YXJ0IDw9IGJveC0+c3RhcnQoKSAmJiBib3gtPmVuZCgpIDwgZW5kKSB7Cisg
ICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRhcmllcyA9IGJveC0+Y2FsY3VsYXRlQm91bmRhcmll
cygpOworICAgICAgICAgICAgaWYgKHVzZVNlbGVjdGlvbkhlaWdodCkgeworICAgICAgICAgICAg
ICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IGJveC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0
YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0SGVpZ2h0KHNlbGVjdGlvblJlY3QuaGVp
Z2h0KCkpOworICAgICAgICAgICAgICAgICAgICBib3VuZGFyaWVzLnNldFkoc2VsZWN0aW9uUmVj
dC55KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJv
dW5kYXJpZXMuc2V0V2lkdGgoc2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYm91bmRhcmllcy5zZXRYKHNlbGVjdGlvblJlY3QueCgpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBxdWFkcy5hcHBlbmQocmVuZGVyZXIubG9j
YWxUb0Fic29sdXRlUXVhZChib3VuZGFyaWVzLCAwLCB3YXNGaXhlZCkpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBsb2NhbFF1YWRG
b3JUZXh0Qm94KCpib3gsIHN0YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCk7CisgICAgICAg
IGlmICghcmVjdC5pc1plcm8oKSkKKyAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlci5s
b2NhbFRvQWJzb2x1dGVRdWFkKHJlY3QsIDAsIHdhc0ZpeGVkKSk7CisgICAgfQorfQorCiB2b2lk
IFJlbmRlclRleHRMaW5lQm94ZXM6OmRpcnR5QWxsKCkKIHsKICAgICBmb3IgKGF1dG8gYm94ID0g
bV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgJKHJldmlzaW9uIDE1NzM0
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgUmVuZGVyVGV4dExpbmVCb3hl
c19oCiAKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTU5LDkgKzYwLDE4IEBAIHB1YmxpYzoKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZv
clBvaW50KGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCisg
ICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiwgUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25TdGF0ZSk7CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmFuZ2UodW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7CisKICAgICBJbnRSZWN0IGJvdW5kaW5nQm94KGNvbnN0
IFJlbmRlclRleHQmKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93Qm91bmRp
bmdCb3goY29uc3QgUmVuZGVyVGV4dCYpIGNvbnN0OwogCisgICAgdm9pZCBhYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkg
Y29uc3Q7CisgICAgdm9pZCBhYnNvbHV0ZVJlY3RzRm9yUmFuZ2UoY29uc3QgUmVuZGVyVGV4dCYs
IFZlY3RvcjxJbnRSZWN0PiYsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNl
U2VsZWN0aW9uSGVpZ2h0LCBib29sKiB3YXNGaXhlZCkgY29uc3Q7CisgICAgZW51bSBDbGlwcGlu
Z09wdGlvbiB7IE5vQ2xpcHBpbmcsIENsaXBUb0VsbGlwc2lzIH07CisgICAgdm9pZCBhYnNvbHV0
ZVF1YWRzKGNvbnN0IFJlbmRlclRleHQmLCBWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0Zp
eGVkLCBDbGlwcGluZ09wdGlvbikgY29uc3Q7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzRm9yUmFu
Z2UoY29uc3QgUmVuZGVyVGV4dCYsIFZlY3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIGJvb2wqIHdhc0ZpeGVkKSBj
b25zdDsKKwogICAgIHZvaWQgZGlydHlBbGwoKTsKICAgICBib29sIGRpcnR5UmFuZ2UoUmVuZGVy
VGV4dCYsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGludCBsZW5ndGhEZWx0YSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAkocmV2aXNpb24gMTU3MzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBA
IGZsb2F0IFNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2UKICAgICByZXR1cm4gMDsK
IH0KIAotRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJh
Z21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24s
IGludCBlbmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqIHN0eWxlKQorRmxvYXRSZWN0IFNWR0lubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwgUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIEFTU0VSVChzdGFydFBvc2l0aW9uIDwgZW5kUG9z
aXRpb24pOwogICAgIEFTU0VSVChzdHlsZSk7CkBAIC0xMzIsNyArMTMyLDcgQEAgRmxvYXRSZWN0
IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlYwogICAgIHJldHVybiBzZWxlY3Rpb25SZWN0
OwogfQogCi1MYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChp
bnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKQorTGF5b3V0UmVjdCBTVkdJbmxpbmVU
ZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3Np
dGlvbikgY29uc3QKIHsKICAgICBpbnQgYm94U3RhcnQgPSBzdGFydCgpOwogICAgIHN0YXJ0UG9z
aXRpb24gPSBtYXgoc3RhcnRQb3NpdGlvbiAtIGJveFN0YXJ0LCAwKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAx
NTczMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBh
aW50U2VsZWN0aW9uQmFja2dyb3VuZChQYWludEluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0
aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKKyAgICB2aXJ0dWFs
IExheW91dFJlY3QgbG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5k
UG9zaXRpb24pIGNvbnN0IE9WRVJSSURFOwogCiAgICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9u
c0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCYgc3Rh
cnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKQEAgLTY2LDcgKzY2LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0U3RhcnRzTmV3VGV4dENodW5rKGJvb2wgbmV3VGV4dENodW5r
KSB7IG1fc3RhcnRzTmV3VGV4dENodW5rID0gbmV3VGV4dENodW5rOyB9CiAKICAgICBpbnQgb2Zm
c2V0Rm9yUG9zaXRpb25JbkZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGZsb2F0IHBv
c2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qg
c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQg
ZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgUmVuZGVyU3R5
bGUqKTsKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBT
VkdUZXh0RnJhZ21lbnQmLCBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRF
bmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBUZXh0UnVu
IGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBj
b25zdDsK
</data>
<flag name="commit-queue"
          id="236563"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214091</attachid>
            <date>2013-10-13 02:14:37 -0700</date>
            <delta_ts>2013-10-13 02:28:06 -0700</delta_ts>
            <desc>another</desc>
            <filename>rendertextlineboxes-absolutequad-3.patch</filename>
            <type>text/plain</type>
            <size>24903</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzM0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEzLTEwLTEyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIGFic29sdXRlUmVjdHMv
UXVhZHMgdG8gUmVuZGVyVGV4dExpbmVCb3hlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNzA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjphYnNvbHV0ZVJlY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUmVjdHNGb3JS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjphYnNvbHV0ZVF1
YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUXVh
ZHNGb3JSYW5nZSk6CisgICAgICAgIAorICAgICAgICAgICAgVGhlc2UgbW92ZS4KKworICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2VsZWN0aW9uUmVjdEZvclJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRl
KToKKyAgICAgICAgCisgICAgICAgICAgICBBbHNvIG1vdmVkIGEgZmV3IHNtYWxsZXIgZnVuY3Rp
b25zLgorCiAyMDEzLTEwLTEyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBNb3ZlIHBvc2l0aW9uRm9yUG9pbnQgdG8gUmVuZGVyVGV4dExpbmVCb3hlcwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OTAsNyArNzkwLDcgQEAgTGF5b3V0UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpibwogICAgICAgICBpc1NWR1Jvb3QgPSB0cnVlOwogI2VuZGlmCiAgICAgaWYgKG9iai0+
aXNUZXh0KCkpCi0gICAgICAgIHRvUmVuZGVyVGV4dChvYmopLT5hYnNvbHV0ZVF1YWRzKHF1YWRz
LCAwLCBSZW5kZXJUZXh0OjpDbGlwVG9FbGxpcHNpcyk7CisgICAgICAgIHRvUmVuZGVyVGV4dChv
YmopLT5hYnNvbHV0ZVF1YWRzQ2xpcHBlZFRvRWxsaXBzaXMocXVhZHMpOwogICAgIGVsc2UgaWYg
KGlzV2ViQXJlYSgpIHx8IGlzU2VhbWxlc3NXZWJBcmVhKCkgfHwgaXNTVkdSb290KQogICAgICAg
ICBvYmotPmFic29sdXRlUXVhZHMocXVhZHMpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE1NzM0MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE1LDE3ICsxMTUsMTcgQEAgTGF5b3V0VW5pdCBJbmxpbmVUZXh0Qm94OjpsaW5lSGVpZ2h0
KCkgYwogICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRlcmVyKCkucGFyZW50
KCkpLT5saW5lSGVpZ2h0KGlzRmlyc3RMaW5lKCksIGlzSG9yaXpvbnRhbCgpID8gSG9yaXpvbnRh
bExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT25Db250YWluaW5nTGluZSk7CiB9CiAKLUxh
eW91dFVuaXQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uVG9wKCkKK0xheW91dFVuaXQgSW5saW5l
VGV4dEJveDo6c2VsZWN0aW9uVG9wKCkgY29uc3QKIHsKICAgICByZXR1cm4gcm9vdCgpLnNlbGVj
dGlvblRvcCgpOwogfQogCi1MYXlvdXRVbml0IElubGluZVRleHRCb3g6OnNlbGVjdGlvbkJvdHRv
bSgpCitMYXlvdXRVbml0IElubGluZVRleHRCb3g6OnNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHJvb3QoKS5zZWxlY3Rpb25Cb3R0b20oKTsKIH0KIAotTGF5b3V0VW5pdCBJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQoKQorTGF5b3V0VW5pdCBJbmxpbmVUZXh0Qm94
OjpzZWxlY3Rpb25IZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiByb290KCkuc2VsZWN0aW9u
SGVpZ2h0KCk7CiB9CkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGljIGNvbnN0IEZvbnQmIGZvbnRU
b1VzZShjb25zdCBSZW5kZQogICAgIHJldHVybiBzdHlsZS5mb250KCk7CiB9CiAKLUxheW91dFJl
Y3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvcywgaW50IGVu
ZFBvcykKK0xheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBz
dGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKIHsKICAgICBpbnQgc1BvcyA9IG1heChzdGFydFBv
cyAtIG1fc3RhcnQsIDApOwogICAgIGludCBlUG9zID0gbWluKGVuZFBvcyAtIG1fc3RhcnQsIChp
bnQpbV9sZW4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
CShyZXZpc2lvbiAxNTczMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgb2Zmc2V0UnVuKGludCBkKSB7IEFTU0VSVCghaXNEaXJ0eSgpKTsgbV9zdGFydCArPSBkOyB9
CiAKLSAgICB1bnNpZ25lZCBzaG9ydCB0cnVuY2F0aW9uKCkgeyByZXR1cm4gbV90cnVuY2F0aW9u
OyB9CisgICAgdW5zaWduZWQgc2hvcnQgdHJ1bmNhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJ1
bmNhdGlvbjsgfQogCiAgICAgdmlydHVhbCB2b2lkIG1hcmtEaXJ0eShib29sIGRpcnR5ID0gdHJ1
ZSkgT1ZFUlJJREUgRklOQUw7CiAKQEAgLTEwMiw5ICsxMDIsOSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogcHJpdmF0ZToKLSAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCgpOwotICAgIExheW91dFVu
aXQgc2VsZWN0aW9uQm90dG9tKCk7Ci0gICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKTsK
KyAgICBMYXlvdXRVbml0IHNlbGVjdGlvblRvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgc2Vs
ZWN0aW9uQm90dG9tKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKSBj
b25zdDsKIAogICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEZvbnQmLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qID0gMCkgY29uc3Q7CiAgICAg
VGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYs
IFN0cmluZywgaW50IG1heGltdW1MZW5ndGgsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAw
KSBjb25zdDsKQEAgLTExMiw3ICsxMTIsNyBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHZpcnR1
YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBGbG9hdFJl
Y3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQogCi0gICAgdmlydHVhbCBMYXlvdXRS
ZWN0IGxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOworICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5k
UG9zKSBjb25zdDsKICAgICBib29sIGlzU2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9z
KSBjb25zdDsKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9z
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNp
b24gMTU3MzQ5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjQsMjcgKzI2NCw2IEBAIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1
dGVSZWN0cyhWZWN0b3I8SW4KICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3Qo
RmxvYXRSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgYm94LT50b3BMZWZ0KCksIGJveC0+c2l6ZSgp
KSkpOwogfQogCi1zdGF0aWMgRmxvYXRSZWN0IGxvY2FsUXVhZEZvclRleHRCb3goSW5saW5lVGV4
dEJveCogYm94LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCkKLXsKLSAgICB1bnNpZ25lZCByZWFsRW5kID0gbWluKGJveC0+ZW5kKCkgKyAxLCBl
bmQpOwotICAgIExheW91dFJlY3QgciA9IGJveC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0LCBy
ZWFsRW5kKTsKLSAgICBpZiAoci5oZWlnaHQoKSkgewotICAgICAgICBpZiAoIXVzZVNlbGVjdGlv
bkhlaWdodCkgewotICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBoZWlnaHQgYW5kIHkgcG9zaXRp
b24gKG9yIHdpZHRoIGFuZCB4IGZvciB2ZXJ0aWNhbCB0ZXh0KQotICAgICAgICAgICAgLy8gYmVj
YXVzZSBzZWxlY3Rpb25SZWN0IHVzZXMgc2VsZWN0aW9uLXNwZWNpZmljIHZhbHVlcy4KLSAgICAg
ICAgICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7Ci0gICAgICAgICAgICAgICAgci5zZXRI
ZWlnaHQoYm94LT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgci5zZXRZKGJveC0+eSgpKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgci5zZXRXaWR0aChib3gtPndp
ZHRoKCkpOwotICAgICAgICAgICAgICAgIHIuc2V0WChib3gtPngoKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChyKTsKLSAgICB9Ci0gICAgcmV0
dXJuIEZsb2F0UmVjdCgpOwotfQotCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHNGb3JS
YW5nZShWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5k
LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgYm9vbCogd2FzRml4ZWQpCiB7CiAgICAgLy8gV29y
ayBhcm91bmQgc2lnbmVkL3Vuc2lnbmVkIGlzc3Vlcy4gVGhpcyBmdW5jdGlvbiB0YWtlcyB1bnNp
Z25lZHMsIGFuZCBpcyBvZnRlbiBwYXNzZWQgVUlOVF9NQVgKQEAgLTI5Nyw3NSArMjc2LDE3IEBA
IHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKFYKICAgICBzdGFydCA9IG1p
bihzdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKICAgICBlbmQgPSBtaW4o
ZW5kLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UX01BWCkpOwogICAgIAotICAgIGZvciAoSW5s
aW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4
dEJveCgpKSB7Ci0gICAgICAgIC8vIE5vdGU6IGJveC0+ZW5kKCkgcmV0dXJucyB0aGUgaW5kZXgg
b2YgdGhlIGxhc3QgY2hhcmFjdGVyLCBub3QgdGhlIGluZGV4IHBhc3QgaXQKLSAgICAgICAgaWYg
KHN0YXJ0IDw9IGJveC0+c3RhcnQoKSAmJiBib3gtPmVuZCgpIDwgZW5kKSB7Ci0gICAgICAgICAg
ICBGbG9hdFJlY3QgciA9IGJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygpOwotICAgICAgICAgICAg
aWYgKHVzZVNlbGVjdGlvbkhlaWdodCkgewotICAgICAgICAgICAgICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCA9IGJveC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0LCBlbmQpOwotICAgICAg
ICAgICAgICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHIuc2V0SGVpZ2h0KHNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgICAg
ICByLnNldFkoc2VsZWN0aW9uUmVjdC55KCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHIuc2V0V2lkdGgoc2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgci5zZXRYKHNlbGVjdGlvblJlY3QueCgpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWN0cy5hcHBlbmQobG9jYWxUb0Fi
c29sdXRlUXVhZChyLCAwLCB3YXNGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIHdyb25nLiBJ
dCdzIGNvbnZlcnRpbmcgbG9jYWwgdG8gYWJzb2x1dGUgdHdpY2UuIGh0dHA6Ly93ZWJraXQub3Jn
L2IvNjU3MjIKLSAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gbG9jYWxRdWFkRm9yVGV4dEJv
eChib3gsIHN0YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCk7Ci0gICAgICAgICAgICBpZiAo
IXJlY3QuaXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGxvY2FsVG9BYnNv
bHV0ZVF1YWQocmVjdCwgMCwgd2FzRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwotICAg
ICAgICB9Ci0gICAgfQorICAgIG1fbGluZUJveGVzLmFic29sdXRlUmVjdHNGb3JSYW5nZSgqdGhp
cywgcmVjdHMsIHN0YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCwgd2FzRml4ZWQpOwogfQog
Ci1zdGF0aWMgSW50UmVjdCBlbGxpcHNpc1JlY3RGb3JCb3goSW5saW5lVGV4dEJveCogYm94LCB1
bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKQordm9pZCBSZW5kZXJUZXh0OjphYnNv
bHV0ZVF1YWRzQ2xpcHBlZFRvRWxsaXBzaXMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKSBjb25z
dAogewotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIAotICAg
IHVuc2lnbmVkIHNob3J0IHRydW5jYXRpb24gPSBib3gtPnRydW5jYXRpb24oKTsKLSAgICBpZiAo
dHJ1bmNhdGlvbiA9PSBjTm9UcnVuY2F0aW9uKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwot
ICAgIAotICAgIEludFJlY3QgcmVjdDsKLSAgICBpZiAoRWxsaXBzaXNCb3gqIGVsbGlwc2lzID0g
Ym94LT5yb290KCkuZWxsaXBzaXNCb3goKSkgewotICAgICAgICBpbnQgZWxsaXBzaXNTdGFydFBv
c2l0aW9uID0gbWF4PGludD4oc3RhcnRQb3MgLSBib3gtPnN0YXJ0KCksIDApOwotICAgICAgICBp
bnQgZWxsaXBzaXNFbmRQb3NpdGlvbiA9IG1pbjxpbnQ+KGVuZFBvcyAtIGJveC0+c3RhcnQoKSwg
Ym94LT5sZW4oKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgZWxsaXBzaXMgc2hvdWxkIGJl
IGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVuZCBvZgotICAgICAgICAvLyB0aGUg
c2VsZWN0aW9uIGlzIHBhc3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbiBhbmQgdGhl
Ci0gICAgICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlZm9yZSBvciBhdCB0
aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uLgotICAgICAgICBpZiAoZWxsaXBzaXNFbmRQ
b3NpdGlvbiA+PSB0cnVuY2F0aW9uICYmIGVsbGlwc2lzU3RhcnRQb3NpdGlvbiA8PSB0cnVuY2F0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIGVsbGlwc2lzLT5zZWxlY3Rpb25SZWN0KCk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgcmV0dXJuIG1fbGluZUJveGVzLmFi
c29sdXRlUXVhZHMoKnRoaXMsIHF1YWRzLCBudWxscHRyLCBSZW5kZXJUZXh0TGluZUJveGVzOjpD
bGlwVG9FbGxpcHNpcyk7CiB9Ci0gICAgCi12b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMo
VmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCwgQ2xpcHBpbmdPcHRpb24g
b3B0aW9uKSBjb25zdAotewotICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RUZXh0
Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCBib3VuZGFyaWVzID0gYm94LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCk7CiAKLSAgICAgICAgLy8g
U2hvcnRlbiB0aGUgd2lkdGggb2YgdGhpcyB0ZXh0IGJveCBpZiBpdCBlbmRzIGluIGFuIGVsbGlw
c2lzLgotICAgICAgICAvLyBGSVhNRTogZWxsaXBzaXNSZWN0Rm9yQm94IHNob3VsZCBzd2l0Y2gg
dG8gcmV0dXJuIEZsb2F0UmVjdCBzb29uIHdpdGggdGhlIHN1YnBpeGVsbGF5b3V0IGJyYW5jaC4K
LSAgICAgICAgSW50UmVjdCBlbGxpcHNpc1JlY3QgPSAob3B0aW9uID09IENsaXBUb0VsbGlwc2lz
KSA/IGVsbGlwc2lzUmVjdEZvckJveChib3gsIDAsIHRleHRMZW5ndGgoKSkgOiBJbnRSZWN0KCk7
Ci0gICAgICAgIGlmICghZWxsaXBzaXNSZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYg
KHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICAgICAgYm91
bmRhcmllcy5zZXRXaWR0aChlbGxpcHNpc1JlY3QubWF4WCgpIC0gYm91bmRhcmllcy54KCkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0SGVpZ2h0KGVs
bGlwc2lzUmVjdC5tYXhZKCkgLSBib3VuZGFyaWVzLnkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoYm91bmRhcmllcywgMCwgd2FzRml4ZWQp
KTsKLSAgICB9Ci19Ci0gICAgCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKIHsKLSAgICBhYnNvbHV0
ZVF1YWRzKHF1YWRzLCB3YXNGaXhlZCwgTm9DbGlwcGluZyk7CisgICAgcmV0dXJuIG1fbGluZUJv
eGVzLmFic29sdXRlUXVhZHMoKnRoaXMsIHF1YWRzLCB3YXNGaXhlZCwgUmVuZGVyVGV4dExpbmVC
b3hlczo6Tm9DbGlwcGluZyk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVRdWFkc0Zv
clJhbmdlKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIGJvb2wqIHdhc0ZpeGVkKQpAQCAtMzgwLDI3
ICszMDEsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHNGb3JSYW5nZShWCiAgICAg
c3RhcnQgPSBtaW4oc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlRfTUFYKSk7CiAgICAg
ZW5kID0gbWluKGVuZCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKICAgICAKLSAg
ICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJv
eC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICAvLyBOb3RlOiBib3gtPmVuZCgpIHJldHVybnMg
dGhlIGluZGV4IG9mIHRoZSBsYXN0IGNoYXJhY3Rlciwgbm90IHRoZSBpbmRleCBwYXN0IGl0Ci0g
ICAgICAgIGlmIChzdGFydCA8PSBib3gtPnN0YXJ0KCkgJiYgYm94LT5lbmQoKSA8IGVuZCkgewot
ICAgICAgICAgICAgRmxvYXRSZWN0IHIgPSBib3gtPmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKLSAg
ICAgICAgICAgIGlmICh1c2VTZWxlY3Rpb25IZWlnaHQpIHsKLSAgICAgICAgICAgICAgICBMYXlv
dXRSZWN0IHNlbGVjdGlvblJlY3QgPSBib3gtPmxvY2FsU2VsZWN0aW9uUmVjdChzdGFydCwgZW5k
KTsKLSAgICAgICAgICAgICAgICBpZiAoYm94LT5pc0hvcml6b250YWwoKSkgewotICAgICAgICAg
ICAgICAgICAgICByLnNldEhlaWdodChzZWxlY3Rpb25SZWN0LmhlaWdodCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgci5zZXRZKHNlbGVjdGlvblJlY3QueSgpKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByLnNldFdpZHRoKHNlbGVjdGlvblJlY3Qud2lk
dGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHIuc2V0WChzZWxlY3Rpb25SZWN0LngoKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcXVhZHMuYXBwZW5k
KGxvY2FsVG9BYnNvbHV0ZVF1YWQociwgMCwgd2FzRml4ZWQpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEZsb2F0UmVjdCByZWN0ID0gbG9jYWxRdWFkRm9yVGV4dEJveChib3gsIHN0
YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCk7Ci0gICAgICAgICAgICBpZiAoIXJlY3QuaXNa
ZXJvKCkpCi0gICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQo
cmVjdCwgMCwgd2FzRml4ZWQpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX2xpbmVCb3hlcy5h
YnNvbHV0ZVF1YWRzRm9yUmFuZ2UoKnRoaXMsIHF1YWRzLCBzdGFydCwgZW5kLCB1c2VTZWxlY3Rp
b25IZWlnaHQsIHdhc0ZpeGVkKTsKIH0KIAogVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6OnBv
c2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQpAQCAtOTI0LDI5ICs4MjUs
OCBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjCiB7CiAgICAgUmVu
ZGVyT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7CiAKLSAgICBpZiAoY2FuVXBkYXRl
U2VsZWN0aW9uT25Sb290TGluZUJveGVzKCkpIHsKLSAgICAgICAgaWYgKHN0YXRlID09IFNlbGVj
dGlvblN0YXJ0IHx8IHN0YXRlID09IFNlbGVjdGlvbkVuZCB8fCBzdGF0ZSA9PSBTZWxlY3Rpb25C
b3RoKSB7Ci0gICAgICAgICAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKLSAgICAgICAgICAgIHNl
bGVjdGlvblN0YXJ0RW5kKHN0YXJ0UG9zLCBlbmRQb3MpOwotICAgICAgICAgICAgaWYgKHNlbGVj
dGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uU3RhcnQpIHsKLSAgICAgICAgICAgICAgICBlbmRQb3Mg
PSB0ZXh0TGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUgc2VsZWN0aW9u
IGZyb20gZW5kIG9mIHRleHQgdG8gZW5kIG9mIGxpbmUKLSAgICAgICAgICAgICAgICBpZiAoc3Rh
cnRQb3MgJiYgc3RhcnRQb3MgPT0gZW5kUG9zKQotICAgICAgICAgICAgICAgICAgICBzdGFydFBv
cyA9IGVuZFBvcyAtIDE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblN0YXRlKCkg
PT0gU2VsZWN0aW9uRW5kKQotICAgICAgICAgICAgICAgIHN0YXJ0UG9zID0gMDsKLQotICAgICAg
ICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3gg
PSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYm94LT5pc1NlbGVj
dGVkKHN0YXJ0UG9zLCBlbmRQb3MpKQotICAgICAgICAgICAgICAgICAgICBib3gtPnJvb3QoKS5z
ZXRIYXNTZWxlY3RlZENoaWxkcmVuKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3go
KTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBib3gt
PnJvb3QoKS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlID09IFNlbGVjdGlvbkluc2lkZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKGNhblVwZGF0ZVNlbGVj
dGlvbk9uUm9vdExpbmVCb3hlcygpKQorICAgICAgICBtX2xpbmVCb3hlcy5zZXRTZWxlY3Rpb25T
dGF0ZSgqdGhpcywgc3RhdGUpOwogCiAgICAgLy8gVGhlIGNvbnRhaW5pbmcgYmxvY2sgY2FuIGJl
IG51bGwgaW4gY2FzZSBvZiBhbiBvcnBoYW5lZCB0cmVlLgogICAgIFJlbmRlckJsb2NrKiBjb250
YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKQEAgLTEyMzMsMTEgKzExMTMs
NyBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RGb3JSCiAgICAgaWYgKHN0
YXJ0UG9zID09IGVuZFBvcykKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIExheW91
dFJlY3QgcmVjdDsKLSAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZpcnN0VGV4dEJveCgp
OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICByZWN0LnVuaXRlKGJv
eC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0UG9zLCBlbmRQb3MpKTsKLSAgICAgICAgcmVjdC51
bml0ZShlbGxpcHNpc1JlY3RGb3JCb3goYm94LCBzdGFydFBvcywgZW5kUG9zKSk7Ci0gICAgfQor
ICAgIExheW91dFJlY3QgcmVjdCA9IG1fbGluZUJveGVzLnNlbGVjdGlvblJlY3RGb3JSYW5nZShz
dGFydFBvcywgZW5kUG9zKTsKIAogICAgIGlmIChjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAg
ICAgY29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIHJlY3QpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiAxNTczNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OCw4ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBPVkVSUklERSBGSU5BTDsKICAg
ICB2b2lkIGFic29sdXRlUXVhZHNGb3JSYW5nZShWZWN0b3I8RmxvYXRRdWFkPiYsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gVUlOVF9NQVgsIGJvb2wgdXNl
U2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UsIGJvb2wqIHdhc0ZpeGVkID0gMCk7CiAKLSAgICBlbnVt
IENsaXBwaW5nT3B0aW9uIHsgTm9DbGlwcGluZywgQ2xpcFRvRWxsaXBzaXMgfTsKLSAgICB2b2lk
IGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiB3YXNGaXhlZCA9IDAsIENs
aXBwaW5nT3B0aW9uID0gTm9DbGlwcGluZykgY29uc3Q7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRz
Q2xpcHBlZFRvRWxsaXBzaXMoVmVjdG9yPEZsb2F0UXVhZD4mKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKSBP
VkVSUklERTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5l
Qm94ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0TGluZUJveGVzLmNwcAkocmV2aXNpb24gMTU3MzQ5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dExpbmVCb3hl
cy5oIgogCisjaW5jbHVkZSAiRWxsaXBzaXNCb3guaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94
LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpA
QCAtMzg5LDYgKzM5MCwxNTggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRMaW5lQm94ZXM6
OnBvcwogICAgIHJldHVybiByZW5kZXJlci5jcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9XTlNU
UkVBTSk7CiB9CiAKK3ZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6c2V0U2VsZWN0aW9uU3RhdGUo
UmVuZGVyVGV4dCYgcmVuZGVyZXIsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc3RhdGUp
Cit7CisgICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlIHx8IHN0
YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkgeworICAgICAgICBmb3IgKGF1dG8g
Ym94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCisgICAgICAgICAg
ICBib3gtPnJvb3QoKS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlID09IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uSW5zaWRlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBz
dGFydCwgZW5kOworICAgIHJlbmRlcmVyLnNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOwor
ICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KSB7CisgICAgICAg
IGVuZCA9IHJlbmRlcmVyLnRleHRMZW5ndGgoKTsKKworICAgICAgICAvLyB0byBoYW5kbGUgc2Vs
ZWN0aW9uIGZyb20gZW5kIG9mIHRleHQgdG8gZW5kIG9mIGxpbmUKKyAgICAgICAgaWYgKHN0YXJ0
ICYmIHN0YXJ0ID09IGVuZCkKKyAgICAgICAgICAgIHN0YXJ0ID0gZW5kIC0gMTsKKyAgICB9IGVs
c2UgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKQorICAgICAgICBzdGFy
dCA9IDA7CisKKyAgICBmb3IgKGF1dG8gYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5l
eHRUZXh0Qm94KCkpIHsKKyAgICAgICAgaWYgKGJveC0+aXNTZWxlY3RlZChzdGFydCwgZW5kKSkK
KyAgICAgICAgICAgIGJveC0+cm9vdCgpLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4odHJ1ZSk7Cisg
ICAgfQorfQorCitzdGF0aWMgSW50UmVjdCBlbGxpcHNpc1JlY3RGb3JCb3goY29uc3QgSW5saW5l
VGV4dEJveCYgYm94LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQoreworICAgIHVuc2ln
bmVkIHNob3J0IHRydW5jYXRpb24gPSBib3gudHJ1bmNhdGlvbigpOworICAgIGlmICh0cnVuY2F0
aW9uID09IGNOb1RydW5jYXRpb24pCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBh
dXRvIGVsbGlwc2lzID0gYm94LnJvb3QoKS5lbGxpcHNpc0JveCgpOworICAgIGlmICghZWxsaXBz
aXMpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgCisgICAgSW50UmVjdCByZWN0Owor
ICAgIGludCBlbGxpcHNpc1N0YXJ0UG9zaXRpb24gPSBzdGQ6Om1heDxpbnQ+KHN0YXJ0IC0gYm94
LnN0YXJ0KCksIDApOworICAgIGludCBlbGxpcHNpc0VuZFBvc2l0aW9uID0gc3RkOjptaW48aW50
PihlbmQgLSBib3guc3RhcnQoKSwgYm94LmxlbigpKTsKKyAgICAKKyAgICAvLyBUaGUgZWxsaXBz
aXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVuZCBvZgorICAg
IC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9u
IGFuZCB0aGUKKyAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbiBpcyBiZWZvcmUgb3Ig
YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbi4KKyAgICBpZiAoZWxsaXBzaXNFbmRQ
b3NpdGlvbiA8IHRydW5jYXRpb24gJiYgZWxsaXBzaXNTdGFydFBvc2l0aW9uID4gdHJ1bmNhdGlv
bikKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gZWxsaXBzaXMtPnNlbGVj
dGlvblJlY3QoKTsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJUZXh0TGluZUJveGVzOjpzZWxlY3Rp
b25SZWN0Rm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICBMYXlv
dXRSZWN0IHJlY3Q7CisgICAgZm9yIChhdXRvIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94
LT5uZXh0VGV4dEJveCgpKSB7CisgICAgICAgIHJlY3QudW5pdGUoYm94LT5sb2NhbFNlbGVjdGlv
blJlY3Qoc3RhcnQsIGVuZCkpOworICAgICAgICByZWN0LnVuaXRlKGVsbGlwc2lzUmVjdEZvckJv
eCgqYm94LCBzdGFydCwgZW5kKSk7CisgICAgfQorICAgIHJldHVybiByZWN0OworfQorCit2b2lk
IFJlbmRlclRleHRMaW5lQm94ZXM6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0
cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdAoreworICAgIGZv
ciAoYXV0byBib3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKKyAg
ICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KGFjY3VtdWxhdGVk
T2Zmc2V0ICsgYm94LT50b3BMZWZ0KCksIGJveC0+c2l6ZSgpKSkpOworfQorCitzdGF0aWMgRmxv
YXRSZWN0IGxvY2FsUXVhZEZvclRleHRCb3goY29uc3QgSW5saW5lVGV4dEJveCYgYm94LCB1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKK3sKKyAg
ICB1bnNpZ25lZCByZWFsRW5kID0gc3RkOjptaW4oYm94LmVuZCgpICsgMSwgZW5kKTsKKyAgICBM
YXlvdXRSZWN0IGJveFNlbGVjdGlvblJlY3QgPSBib3gubG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0
LCByZWFsRW5kKTsKKyAgICBpZiAoIWJveFNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpCisgICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICBpZiAodXNlU2VsZWN0aW9uSGVpZ2h0KQorICAgICAg
ICByZXR1cm4gYm94U2VsZWN0aW9uUmVjdDsKKyAgICAvLyBDaGFuZ2UgdGhlIGhlaWdodCBhbmQg
eSBwb3NpdGlvbiAob3Igd2lkdGggYW5kIHggZm9yIHZlcnRpY2FsIHRleHQpCisgICAgLy8gYmVj
YXVzZSBzZWxlY3Rpb25SZWN0IHVzZXMgc2VsZWN0aW9uLXNwZWNpZmljIHZhbHVlcy4KKyAgICBp
ZiAoYm94LmlzSG9yaXpvbnRhbCgpKSB7CisgICAgICAgIGJveFNlbGVjdGlvblJlY3Quc2V0SGVp
Z2h0KGJveC5oZWlnaHQoKSk7CisgICAgICAgIGJveFNlbGVjdGlvblJlY3Quc2V0WShib3gueSgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBib3hTZWxlY3Rpb25SZWN0LnNldFdpZHRoKGJveC53
aWR0aCgpKTsKKyAgICAgICAgYm94U2VsZWN0aW9uUmVjdC5zZXRYKGJveC54KCkpOworICAgIH0K
KyAgICByZXR1cm4gYm94U2VsZWN0aW9uUmVjdDsKK30KKwordm9pZCBSZW5kZXJUZXh0TGluZUJv
eGVzOjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2UoY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wg
dXNlU2VsZWN0aW9uSGVpZ2h0LCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBmb3IgKGF1
dG8gYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKKyAgICAg
ICAgLy8gTm90ZTogYm94LT5lbmQoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjaGFy
YWN0ZXIsIG5vdCB0aGUgaW5kZXggcGFzdCBpdAorICAgICAgICBpZiAoc3RhcnQgPD0gYm94LT5z
dGFydCgpICYmIGJveC0+ZW5kKCkgPCBlbmQpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBib3Vu
ZGFyaWVzID0gYm94LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCk7CisgICAgICAgICAgICBpZiAodXNl
U2VsZWN0aW9uSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25S
ZWN0ID0gYm94LT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIGVuZCk7CisgICAgICAgICAgICAg
ICAgaWYgKGJveC0+aXNIb3Jpem9udGFsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm91bmRh
cmllcy5zZXRIZWlnaHQoc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJvdW5kYXJpZXMuc2V0WShzZWxlY3Rpb25SZWN0LnkoKSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRXaWR0aChzZWxlY3Rp
b25SZWN0LndpZHRoKCkpOworICAgICAgICAgICAgICAgICAgICBib3VuZGFyaWVzLnNldFgoc2Vs
ZWN0aW9uUmVjdC54KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJlY3RzLmFwcGVuZChyZW5kZXJlci5sb2NhbFRvQWJzb2x1dGVRdWFkKGJvdW5kYXJp
ZXMsIDAsIHdhc0ZpeGVkKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgd3Jvbmcu
IEl0J3MgY29udmVydGluZyBsb2NhbCB0byBhYnNvbHV0ZSB0d2ljZS4gaHR0cDovL3dlYmtpdC5v
cmcvYi82NTcyMgorICAgICAgICBGbG9hdFJlY3QgcmVjdCA9IGxvY2FsUXVhZEZvclRleHRCb3go
KmJveCwgc3RhcnQsIGVuZCwgdXNlU2VsZWN0aW9uSGVpZ2h0KTsKKyAgICAgICAgaWYgKCFyZWN0
LmlzWmVybygpKQorICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHJlbmRlcmVyLmxvY2FsVG9BYnNv
bHV0ZVF1YWQocmVjdCwgMCwgd2FzRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAg
IH0KK30KKwordm9pZCBSZW5kZXJUZXh0TGluZUJveGVzOjphYnNvbHV0ZVF1YWRzKGNvbnN0IFJl
bmRlclRleHQmIHJlbmRlcmVyLCBWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0Zp
eGVkLCBDbGlwcGluZ09wdGlvbiBvcHRpb24pIGNvbnN0Cit7CisgICAgZm9yIChhdXRvIGJveCA9
IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CisgICAgICAgIEZsb2F0
UmVjdCBib3VuZGFyaWVzID0gYm94LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCk7CisKKyAgICAgICAg
Ly8gU2hvcnRlbiB0aGUgd2lkdGggb2YgdGhpcyB0ZXh0IGJveCBpZiBpdCBlbmRzIGluIGFuIGVs
bGlwc2lzLgorICAgICAgICAvLyBGSVhNRTogZWxsaXBzaXNSZWN0Rm9yQm94IHNob3VsZCBzd2l0
Y2ggdG8gcmV0dXJuIEZsb2F0UmVjdCBzb29uIHdpdGggdGhlIHN1YnBpeGVsbGF5b3V0IGJyYW5j
aC4KKyAgICAgICAgSW50UmVjdCBlbGxpcHNpc1JlY3QgPSAob3B0aW9uID09IENsaXBUb0VsbGlw
c2lzKSA/IGVsbGlwc2lzUmVjdEZvckJveCgqYm94LCAwLCByZW5kZXJlci50ZXh0TGVuZ3RoKCkp
IDogSW50UmVjdCgpOworICAgICAgICBpZiAoIWVsbGlwc2lzUmVjdC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KQorICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0V2lkdGgoZWxsaXBzaXNSZWN0Lm1heFgo
KSAtIGJvdW5kYXJpZXMueCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBi
b3VuZGFyaWVzLnNldEhlaWdodChlbGxpcHNpc1JlY3QubWF4WSgpIC0gYm91bmRhcmllcy55KCkp
OworICAgICAgICB9CisgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlci5sb2NhbFRvQWJzb2x1
dGVRdWFkKGJvdW5kYXJpZXMsIDAsIHdhc0ZpeGVkKSk7CisgICAgfQorfQorCit2b2lkIFJlbmRl
clRleHRMaW5lQm94ZXM6OmFic29sdXRlUXVhZHNGb3JSYW5nZShjb25zdCBSZW5kZXJUZXh0JiBy
ZW5kZXJlciwgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWdu
ZWQgZW5kLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7
CisgICAgZm9yIChhdXRvIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJv
eCgpKSB7CisgICAgICAgIC8vIE5vdGU6IGJveC0+ZW5kKCkgcmV0dXJucyB0aGUgaW5kZXggb2Yg
dGhlIGxhc3QgY2hhcmFjdGVyLCBub3QgdGhlIGluZGV4IHBhc3QgaXQKKyAgICAgICAgaWYgKHN0
YXJ0IDw9IGJveC0+c3RhcnQoKSAmJiBib3gtPmVuZCgpIDwgZW5kKSB7CisgICAgICAgICAgICBG
bG9hdFJlY3QgYm91bmRhcmllcyA9IGJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygpOworICAgICAg
ICAgICAgaWYgKHVzZVNlbGVjdGlvbkhlaWdodCkgeworICAgICAgICAgICAgICAgIExheW91dFJl
Y3Qgc2VsZWN0aW9uUmVjdCA9IGJveC0+bG9jYWxTZWxlY3Rpb25SZWN0KHN0YXJ0LCBlbmQpOwor
ICAgICAgICAgICAgICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGJvdW5kYXJpZXMuc2V0SGVpZ2h0KHNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgICAgICBib3VuZGFyaWVzLnNldFkoc2VsZWN0aW9uUmVjdC55KCkpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0
V2lkdGgoc2VsZWN0aW9uUmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYm91bmRh
cmllcy5zZXRYKHNlbGVjdGlvblJlY3QueCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBxdWFkcy5hcHBlbmQocmVuZGVyZXIubG9jYWxUb0Fic29sdXRl
UXVhZChib3VuZGFyaWVzLCAwLCB3YXNGaXhlZCkpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgRmxvYXRSZWN0IHJlY3QgPSBsb2NhbFF1YWRGb3JUZXh0Qm94KCpi
b3gsIHN0YXJ0LCBlbmQsIHVzZVNlbGVjdGlvbkhlaWdodCk7CisgICAgICAgIGlmICghcmVjdC5p
c1plcm8oKSkKKyAgICAgICAgICAgIHF1YWRzLmFwcGVuZChyZW5kZXJlci5sb2NhbFRvQWJzb2x1
dGVRdWFkKHJlY3QsIDAsIHdhc0ZpeGVkKSk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlclRleHRM
aW5lQm94ZXM6OmRpcnR5QWxsKCkKIHsKICAgICBmb3IgKGF1dG8gYm94ID0gbV9maXJzdDsgYm94
OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgJKHJldmlzaW9uIDE1NzM0OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgUmVuZGVyVGV4dExpbmVCb3hlc19oCiAKICNpbmNs
dWRlICJMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAi
VmlzaWJsZVBvc2l0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDkgKzYwLDE4
IEBAIHB1YmxpYzoKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0
IFJlbmRlclRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCisgICAgdm9pZCBzZXRT
ZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiwgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSk7
CisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVu
c2lnbmVkIGVuZCk7CisKICAgICBJbnRSZWN0IGJvdW5kaW5nQm94KGNvbnN0IFJlbmRlclRleHQm
KSBjb25zdDsKICAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3goY29uc3Qg
UmVuZGVyVGV4dCYpIGNvbnN0OwogCisgICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3Q7CisgICAg
dm9pZCBhYnNvbHV0ZVJlY3RzRm9yUmFuZ2UoY29uc3QgUmVuZGVyVGV4dCYsIFZlY3RvcjxJbnRS
ZWN0PiYsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVp
Z2h0LCBib29sKiB3YXNGaXhlZCkgY29uc3Q7CisgICAgZW51bSBDbGlwcGluZ09wdGlvbiB7IE5v
Q2xpcHBpbmcsIENsaXBUb0VsbGlwc2lzIH07CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzKGNvbnN0
IFJlbmRlclRleHQmLCBWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkLCBDbGlwcGlu
Z09wdGlvbikgY29uc3Q7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoY29uc3QgUmVu
ZGVyVGV4dCYsIFZlY3RvcjxGbG9hdFF1YWQ+JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVu
ZCwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdDsKKwogICAg
IHZvaWQgZGlydHlBbGwoKTsKICAgICBib29sIGRpcnR5UmFuZ2UoUmVuZGVyVGV4dCYsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIGludCBsZW5ndGhEZWx0YSk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2
aXNpb24gMTU3MzM5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIGZsb2F0IFNWR0lu
bGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2UKICAgICByZXR1cm4gMDsKIH0KIAotRmxvYXRS
ZWN0IFNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3Np
dGlvbiwgUmVuZGVyU3R5bGUqIHN0eWxlKQorRmxvYXRSZWN0IFNWR0lubGluZVRleHRCb3g6OnNl
bGVjdGlvblJlY3RGb3JUZXh0RnJhZ21lbnQoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVu
dCwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAogewogICAgIEFTU0VSVChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pOwogICAg
IEFTU0VSVChzdHlsZSk7CkBAIC0xMzIsNyArMTMyLDcgQEAgRmxvYXRSZWN0IFNWR0lubGluZVRl
eHRCb3g6OnNlbGVjdGlvblJlYwogICAgIHJldHVybiBzZWxlY3Rpb25SZWN0OwogfQogCi1MYXlv
dXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3Np
dGlvbiwgaW50IGVuZFBvc2l0aW9uKQorTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2Nh
bFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikgY29uc3QK
IHsKICAgICBpbnQgYm94U3RhcnQgPSBzdGFydCgpOwogICAgIHN0YXJ0UG9zaXRpb24gPSBtYXgo
c3RhcnRQb3NpdGlvbiAtIGJveFN0YXJ0LCAwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiAxNTczMzkpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhaW50U2VsZWN0aW9u
QmFja2dyb3VuZChQYWludEluZm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGlu
ZUJvdHRvbSk7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdChpbnQg
c3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3Qg
bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24pIGNv
bnN0IE9WRVJSSURFOwogCiAgICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVu
dENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGludCYgc3RhcnRQb3NpdGlvbiwg
aW50JiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U3RhcnRzTmV3VGV4dENodW5rKGJvb2wgbmV3VGV4dENodW5rKSB7IG1fc3RhcnRz
TmV3VGV4dENodW5rID0gbmV3VGV4dENodW5rOyB9CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRp
b25JbkZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIGZsb2F0IHBvc2l0aW9uLCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVj
dEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQgZnJhZ21lbnRTdGFy
dFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwgUmVuZGVyU3R5bGUqKTsKKyAgICBG
bG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21l
bnQmLCBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiwg
UmVuZGVyU3R5bGUqKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBUZXh0UnVuIGNvbnN0cnVjdFRl
eHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsK
</data>
<flag name="review"
          id="236594"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>