<?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>41200</bug_id>
          
          <creation_ts>2010-06-25 02:04:06 -0700</creation_ts>
          <short_desc>SVG Text Highlighting not yet supported (in Safari)</short_desc>
          <delta_ts>2010-07-01 06:03:51 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>yoah</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242893</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-25 02:04:06 -0700</bug_when>
    <thetext>Safari draws white rectangles for each text match, and a bouncing yellow rectangle for the currently shown text match. This is not yet supported by SVG. Will upload a patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242927</commentid>
    <comment_count>1</comment_count>
      <attachid>59753</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-25 03:23:26 -0700</bug_when>
    <thetext>Created attachment 59753
Initial patch

Works fine with textPath, tspans/tref, rotated text, textLength/lengthAdjust - tested all svg/text testcases manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242950</commentid>
    <comment_count>2</comment_count>
      <attachid>59756</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-25 04:32:42 -0700</bug_when>
    <thetext>Created attachment 59756
Updated patch

Small changes, after IRC review with Dirk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242951</commentid>
    <comment_count>3</comment_count>
      <attachid>59756</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-06-25 04:35:12 -0700</bug_when>
    <thetext>Comment on attachment 59756
Updated patch

Great patch, as always. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242959</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-25 04:56:57 -0700</bug_when>
    <thetext>Landed in r61850.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245292</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-07-01 06:03:51 -0700</bug_when>
    <thetext>*** Bug 14508 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59753</attachid>
            <date>2010-06-25 03:23:26 -0700</date>
            <delta_ts>2010-06-25 04:32:42 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>Highlight.diff</filename>
            <type>text/plain</type>
            <size>21886</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTg0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDYtMjUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU1ZHIFRleHQgSGlnaGxpZ2h0aW5nIG5vdCB5ZXQgc3VwcG9ydGVkIChpbiBTYWZhcmkp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTIwMAor
CisgICAgICAgIEFkZCB0ZXh0IG1hdGNoIG1hcmtlciBoaWdobGlnaHRpbmcgc3VwcG9ydCBmb3Ig
U1ZHIHRleHQgLSBzZWFyY2hpbmcgZm9yIFNWRyB0ZXh0IGluIFNhZmFyaSBub3cgcGFpbnRzIHRo
ZSBuaWNlIHllbGxvdyBoaWdobGlnaHRpbmcgcmVjdCwgYW5kIHRoZQorICAgICAgICB3aGl0ZSBy
ZWN0YW5nbGVzIGZvciBhbGwgdGV4dCBtYXRjaGVzLiBCZWhhdmVzIGV4YWN0bHkgbGlrZSBIVE1M
IHRleHQsIGJ1dCByZXNwZWN0aW5nIFNWR3MgcGVyLWNoYXJhY3Rlci9wZXItY2h1bmsgdHJhbnNm
b3JtYXRpb25zLAorICAgICAgICBhbGxvd2luZyB0byBoaWdobGlnaHQgdGV4dFBhdGhzLCB0c3Bh
bnMgd2l0aCBhYnNvbHV0ZSBwZXItY2hhcmFjdGVyIHBvc2l0aW9ucyBldGMuLgorCisgICAgICAg
IE9ubHkgbWFudWFsbHkgdGVzdGFibGUsIHRodXMgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZUJveC5oOiBFeHBvc2UgY2FsY3VsYXRlQm91bmRhcmllcygpIGluIG5v
bi1TVkcgYnVpbGRzIGFzIHdlbGwsIG5vdyB1c2VkIGJ5IElubGluZVRleHRCb3ggdG9vLgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6IEFkZCBjYWxjdWxhdGVCb3VuZGFyaWVz
KCksIHdoaWNoIHdpbGwgYmUgdXNlZCB0byByZWZhY3RvciBzb21lIGNvZGUgaW4gUmVuZGVyVGV4
dCwgc2VlIGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y2FsY3VsYXRl
Qm91bmRhcmllcyk6IEp1c3QgcmV0dXJuIGEgSW50UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVp
Z2h0KCkpIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHSW5saW5l
VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmlzU1ZHSW5saW5lVGV4dCk6IFJldHVy
biB0cnVlIGZvciBpc1NWR0lubGluZVRleHQoKSwgcmV0dXJuIGZhbHNlIGZvciBpc1NWR1RleHQo
KSAoZGVmYXVsdCBpbiBSZW5kZXJPYmplY3QuaCkKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpwYWludCk6IE9u
bHkgcGFpbnQgYm94IGRlY29yYXRpb25zIGluIFBhaW50UGhhc2UoQ2hpbGQpQmxvY2tCYWNrZ3Jv
dW5kLCBleGl0IGFmdGVyd2FyZHMganVzdCBsaWtlIFJlbmRlckJsb2NrIGRvZXMuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSB0aGUgd2hpdGUgdGV4
dCBtYXRjaCBtYXJrZXIgcmVjdGFuZ2xlIGdldHMgZHJhd24gb3ZlciB0aGUgeWVsbG93IGhpZ2hs
aWdodCB0aGF0IFNhZmFyaSBkcmF3cy4gCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6cGFpbnQpOiBBY2NlcHQg
YSBuZXcgcGFpbnRpbmcgcGhhc2U6IFBhaW50UGhhc2VTZWxlY3Rpb24sIHVzZWQgYnkgU2FmYXJp
IHdoZW4gZHJhd2luZyB0aGUgeWVsbG93IGhpZ2hsaWdodCByZWN0LgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29s
dXRlUXVhZHMpOiBVc2UgY2FsY3VsYXRlQm91bmRhcmllcygpIGluc3RlYWQgb2YgSW50UmVjdCh4
KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpLiBTVkcgcHJvdmlkZXMgZGlmZmVyZW50IGJvdW5k
YXJpZXMgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29sdXRlUXVhZHNG
b3JSYW5nZSk6IERpdHRvLiBUaGlzIGlzIHRoZSBtYWluIGNoYW5nZSwgbGVhZGluZyB0byBjb3Jy
ZWN0IHRleHQgaGlnaGxpZ2h0IHBsYWNlbWVudC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHSW5s
aW5lRmxvd0JveC5jcHA6IEFkZCBhc3NlcnRpb24gdGhhdCBwYWludGluZyBpcyBub3QgZGlzYWJs
ZWQsIGZvciBjb25zaXN0ZW5jeS4gQ2hhbmdlIHBhaW50IHBoYXNlIGFzc2VydGlvbiB0byBpbmNs
dWRlIFBhaW50UGhhc2VTZWxlY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93
Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRD
aHVua1BhcnQpOiBSZWZhY3RvcmVkIGZyb20gc2VsZWN0aW9uUmVjdCgpLCB0byBzaGFyZSBjb2Rl
IGJldHdlZW4gc2VsZWN0aW9uUmVjdC9jb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QpOiBVc2UgbmV3IGhl
bHBlciBmdW5jdGlvbiBzZWxlY3Rpb25SZWN0Rm9yVGV4dENodW5rUGFydCgpLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnQpOiBEaXR0by4gQ2FsbCBuZXcgY29tcHV0
ZVRleHRNYXRjaE1hcmtlclJlY3QoKSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0lu
bGluZVRleHRCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0KTogSW1wbGVtZW50ZWQgc2lt
aWxhciB0byBIVE1MLCBidXQgcmVzcGVjdGluZyBTVkdzIGNvbmNlcHQgb2YgdGV4dCBjaHVuayBw
YXJ0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dCk6IElu
IFBhaW50UGhhc2VTZWxlY3Rpb24sIG9ubHkgcGFpbnQgc2VsZWN0ZWQgdGV4dCwgbm90IGFueXRo
aW5nIGJlZm9yZS9hZnRlciB0aGUgc2VsZWN0aW9uIHN0YXJ0L2VuZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OmNhbGN1bGF0ZUJvdW5kYXJpZXMpOiBFYXJseSBleGl0LCBp
ZiBtX2NodW5rVHJhbnNmb3JtYXRpb24gaXMgaWRlbnRpdHkuCisgICAgICAgICogcmVuZGVyaW5n
L1NWR0lubGluZVRleHRCb3guaDogQWRkZWQgImJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5IiB0
byBwYWludFRleHQoKSBhbmQgYWRkIG5ldyBjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdChSZW5k
ZXJTdHlsZSopIGZ1bmN0aW9uLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KTogQ2hhbmdl
IHBhaW50IHBoYXNlIGFzc2VydGlvbiB0byBpbmNsdWRlIFBhaW50UGhhc2VTZWxlY3Rpb24uCisK
IDIwMTAtMDYtMjUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgUm9iIEJ1aXMuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAko
cmV2aXNpb24gNjE3NTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDE0ICsxNDcsMTQgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorI2VuZGlmCiAKICAgICB2aXJ0
dWFsIEludFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKICAgICB9Ci0j
ZW5kaWYKLSAgICAKKwogICAgIGJvb2wgaXNDb25zdHJ1Y3RlZCgpIHsgcmV0dXJuIG1fY29uc3Ry
dWN0ZWQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29uc3RydWN0ZWQoKQogICAgIHsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDYxNzU5KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw4IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uSGVpZ2h0KCk7CiAKIHB1YmxpYzoK
KyAgICB2aXJ0dWFsIEludFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJu
IEludFJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQorCiAgICAgdmlydHVhbCBJ
bnRSZWN0IHNlbGVjdGlvblJlY3QoaW50IGFic3gsIGludCBhYnN5LCBpbnQgc3RhcnRQb3MsIGlu
dCBlbmRQb3MpOwogICAgIGJvb2wgaXNTZWxlY3RlZChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3Mp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNQb3MsIGlu
dCYgZVBvcyk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24g
NjE3NTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDEyICsxNDEsMTYgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpwYWludChQYWlu
dEluZm8mIHBhaQogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBib29sIGlzVmlzaWJsZSA9IHN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFOwogICAgIEludFBvaW50IHBhcmVudE9yaWdpbkluQ29udGFpbmVy
KHBhcmVudFgsIHBhcmVudFkpOwogICAgIEludFBvaW50IGJvcmRlckJveE9yaWdpbkluQ29udGFp
bmVyID0gcGFyZW50T3JpZ2luSW5Db250YWluZXIgKyBwYXJlbnRPcmlnaW5Ub0JvcmRlckJveCgp
OwogCi0gICAgaWYgKGhhc0JveERlY29yYXRpb25zKCkgJiYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVj
dGlvbikpIAorICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1Zpc2libGUpCiAgICAgICAgIHBhaW50Qm94
RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJv
cmRlckJveE9yaWdpbkluQ29udGFpbmVyLnkoKSk7CiAKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCisgICAgICAgIHJldHVybjsKKwogICAgIC8v
IEFuIGVtcHR5IHZpZXdwb3J0IGRpc2FibGVzIHJlbmRlcmluZy4gIEZJWE1FOiBTaG91bGQgd2Ug
c3RpbGwgcmVuZGVyIGZpbHRlcnM/CiAgICAgaWYgKG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTgxLDcgKzE4NSw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWkKIAogICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnJlc3Rv
cmUoKTsKIAotICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8
IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91
dGxpbmVXaWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQorICAgIGlm
ICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYm
IGlzVmlzaWJsZSkKICAgICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBib3Jk
ZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJvcmRlckJveE9yaWdpbkluQ29udGFpbmVyLnko
KSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0LmNwcAkocmV2aXNpb24gNjE3NTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDkgKzE0NiwxNCBAQCB2b2lkIFJlbmRlclNW
R1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yCiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQogewotICAgIGlmIChwYWludEluZm8uY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSkp
CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91
bmQKKyAgICAgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZQorICAg
ICAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikKKyAgICAgICAgIHJl
dHVybjsKKwogICAgIFBhaW50SW5mbyBibG9ja0luZm8ocGFpbnRJbmZvKTsKICAgICBibG9ja0lu
Zm8uY29udGV4dC0+c2F2ZSgpOwogICAgIGFwcGx5VHJhbnNmb3JtVG9QYWludEluZm8oYmxvY2tJ
bmZvLCBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAJKHJldmlzaW9uIDYxODQ0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw3ICszMTQsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFi
c29sdXRlUmVjdHNGb3JSYW5nZShWCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mIHF1YWRzKQogewogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0g
Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQotICAgICAgICBx
dWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm94LT54KCksIGJveC0+
eSgpLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpKSk7CisgICAgICAgIHF1YWRzLmFwcGVu
ZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3gtPmNhbGN1bGF0ZUJvdW5kYXJpZXMo
KSkpKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoVmVjdG9y
PEZsb2F0UXVhZD4mIHF1YWRzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVz
ZVNlbGVjdGlvbkhlaWdodCkKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFi
c29sdXRlUXVhZHNGb3JSYW5nZShWCiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJz
dFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgLy8g
Tm90ZTogYm94LT5lbmQoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIs
IG5vdCB0aGUgaW5kZXggcGFzdCBpdAogICAgICAgICBpZiAoc3RhcnQgPD0gYm94LT5zdGFydCgp
ICYmIGJveC0+ZW5kKCkgPCBlbmQpIHsKLSAgICAgICAgICAgIEludFJlY3QgciA9IEludFJlY3Qo
Ym94LT54KCksIGJveC0+eSgpLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgICAg
ICAgICAgSW50UmVjdCByKGJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygpKTsKICAgICAgICAgICAg
IGlmICh1c2VTZWxlY3Rpb25IZWlnaHQpIHsKICAgICAgICAgICAgICAgICBJbnRSZWN0IHNlbGVj
dGlvblJlY3QgPSBib3gtPnNlbGVjdGlvblJlY3QoMCwgMCwgc3RhcnQsIGVuZCk7CiAgICAgICAg
ICAgICAgICAgci5zZXRIZWlnaHQoc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gNjE3NTkpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6
cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCiB7Ci0g
ICAgQVNTRVJUKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCk7CisgICAg
QVNTRVJUKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7CisgICAgQVNTRVJUKCFwYWludEluZm8u
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKTsKIAogICAgIFJlbmRlck9iamVjdCogYm94UmVu
ZGVyZXIgPSByZW5kZXJlcigpOwogICAgIEFTU0VSVChib3hSZW5kZXJlcik7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNjE3NTkpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDYgKzEzNywyNyBAQCBpbnQgU1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoCiAg
ICAgcmV0dXJuIDA7CiB9CiAKK0Zsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25S
ZWN0Rm9yVGV4dENodW5rUGFydChjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0LCBpbnQgcGFy
dFN0YXJ0UG9zLCBpbnQgcGFydEVuZFBvcywgUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAgIC8v
IE1hcCBzdGFydFBvcy9lbmRQb3MgcG9zaXRpb25zIGludG8gY2h1bmsgcGFydAorICAgIG1hcFN0
YXJ0RW5kUG9zaXRpb25zSW50b0NodW5rUGFydENvb3JkaW5hdGVzKHBhcnRTdGFydFBvcywgcGFy
dEVuZFBvcywgcGFydCk7CisKKyAgICBpZiAocGFydFN0YXJ0UG9zID49IHBhcnRFbmRQb3MpCisg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIC8vIFNldCBjdXJyZW50IGNodW5rIHBh
cnQsIHNvIGNvbnN0cnVjdFRleHRSdW4oKSB3b3JrcyBwcm9wZXJseS4KKyAgICBtX2N1cnJlbnRD
aHVua1BhcnQgPSBwYXJ0OworCisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7
CisgICAgVmVjdG9yPFNWR0NoYXI+Ojpjb25zdF9pdGVyYXRvciBjaGFyYWN0ZXIgPSBwYXJ0LmZp
cnN0Q2hhcmFjdGVyOworICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihjaGFyYWN0ZXItPngsIGNo
YXJhY3Rlci0+eSAtIGZvbnQuYXNjZW50KCkpOworCisgICAgRmxvYXRSZWN0IHBhcnRSZWN0KGZv
bnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3RydWN0VGV4dFJ1bihzdHlsZSksIHRleHRPcmln
aW4sIHBhcnQuaGVpZ2h0LCBwYXJ0U3RhcnRQb3MsIHBhcnRFbmRQb3MpKTsKKyAgICBtX2N1cnJl
bnRDaHVua1BhcnQgPSBTVkdUZXh0Q2h1bmtQYXJ0KCk7CisKKyAgICByZXR1cm4gY2hhcmFjdGVy
LT5jaGFyYWN0ZXJUcmFuc2Zvcm0oKS5tYXBSZWN0KHBhcnRSZWN0KTsKK30KKwogSW50UmVjdCBT
VkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KGludCwgaW50LCBpbnQgc3RhcnRQb3MsIGlu
dCBlbmRQb3MpCiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRDaHVua1BhcnQuaXNWYWxpZCgpKTsK
QEAgLTE1NCwzMiArMTc1LDEyIEBAIEludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9u
UmVjdCgKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwogICAgIEFTU0VS
VChzdHlsZSk7CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKLSAgICBp
bnQgYmFzZWxpbmUgPSBmb250LmFzY2VudCgpOwogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0
OwogCiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB0ZXh0IGNodW5rIHBhcnQgaXMgaGl0Ci0gICAg
aW50IHBhcnRTdGFydFBvcyA9IDA7Ci0gICAgaW50IHBhcnRFbmRQb3MgPSAwOwotCiAgICAgY29u
c3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N2Z1Rl
eHRDaHVua1BhcnRzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fc3ZnVGV4dENodW5rUGFydHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIHBhcnRTdGFydFBvcyA9IHN0YXJ0UG9zOwotICAgICAgICBwYXJ0
RW5kUG9zID0gZW5kUG9zOwotCi0gICAgICAgIC8vIFNlbGVjdCBjdXJyZW50IGNodW5rIHBhcnQs
IG1hcCBzdGFydFBvcy9lbmRQb3MgcG9zaXRpb25zIGludG8gY2h1bmsgcGFydAotICAgICAgICBt
X2N1cnJlbnRDaHVua1BhcnQgPSAqaXQ7Ci0gICAgICAgIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50
b0NodW5rUGFydENvb3JkaW5hdGVzKHBhcnRTdGFydFBvcywgcGFydEVuZFBvcywgbV9jdXJyZW50
Q2h1bmtQYXJ0KTsKLQotICAgICAgICBpZiAocGFydFN0YXJ0UG9zIDwgcGFydEVuZFBvcykgewot
ICAgICAgICAgICAgVmVjdG9yPFNWR0NoYXI+Ojpjb25zdF9pdGVyYXRvciBjaGFyYWN0ZXIgPSBt
X2N1cnJlbnRDaHVua1BhcnQuZmlyc3RDaGFyYWN0ZXI7Ci0gICAgICAgICAgICBGbG9hdFBvaW50
IHRleHRPcmlnaW4oY2hhcmFjdGVyLT54LCBjaGFyYWN0ZXItPnkgLSBiYXNlbGluZSk7Ci0gICAg
ICAgICAgICBGbG9hdFJlY3QgcGFydFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25z
dHJ1Y3RUZXh0UnVuKHN0eWxlKSwgdGV4dE9yaWdpbiwgbV9jdXJyZW50Q2h1bmtQYXJ0LmhlaWdo
dCwgcGFydFN0YXJ0UG9zLCBwYXJ0RW5kUG9zKSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25SZWN0
LnVuaXRlKGNoYXJhY3Rlci0+Y2hhcmFjdGVyVHJhbnNmb3JtKCkubWFwUmVjdChwYXJ0UmVjdCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9jdXJyZW50Q2h1bmtQYXJ0ID0gU1ZHVGV4dENodW5r
UGFydCgpOwotICAgIH0KKyAgICBmb3IgKFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3N2Z1RleHRDaHVua1BhcnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgc2VsZWN0aW9uUmVjdC51bml0ZShzZWxlY3Rpb25SZWN0Rm9yVGV4dENodW5r
UGFydCgqaXQsIHN0YXJ0UG9zLCBlbmRQb3MsIHN0eWxlKSk7CiAKICAgICAvLyBSZXNlcGVjdCBw
b3NzaWJsZSBjaHVuayB0cmFuc2Zvcm1hdGlvbgogICAgIGlmIChtX2NodW5rVHJhbnNmb3JtYXRp
b24uaXNJZGVudGl0eSgpKQpAQCAtMTkxLDcgKzE5Miw3IEBAIEludFJlY3QgU1ZHSW5saW5lVGV4
dEJveDo6c2VsZWN0aW9uUmVjdCgKIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCiB7CiAgICAgQVNTRVJUKHJl
bmRlcmVyKCktPnNob3VsZFBhaW50V2l0aGluUm9vdChwYWludEluZm8pKTsKLSAgICBBU1NFUlQo
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKTsKKyAgICBBU1NFUlQocGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKICAgICBBU1NFUlQodHJ1bmNhdGlvbigpID09IGNOb1Ry
dW5jYXRpb24pOwogCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAh
PSBWSVNJQkxFKQpAQCAtMjExLDEwICsyMTIsMTMgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludChSZW5kZXJPYmplYwogCiAgICAgYm9vbCBoYXNGaWxsID0gc3ZnU3R5bGUtPmhhc0ZpbGwo
KTsKICAgICBib29sIGhhc1N0cm9rZSA9IHN2Z1N0eWxlLT5oYXNTdHJva2UoKTsKKyAgICBib29s
IHBhaW50U2VsZWN0ZWRUZXh0T25seSA9IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2Vs
ZWN0aW9uOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlJ3JlIHNlbGVjdGVk
LgogICAgIGJvb2wgaXNQcmludGluZyA9IHBhcmVudFJlbmRlcmVyLT5kb2N1bWVudCgpLT5wcmlu
dGluZygpOwogICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9u
U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgaWYgKCFoYXNTZWxl
Y3Rpb24gJiYgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQorICAgICAgICByZXR1cm47CiAKICAgICBS
ZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUgPSBzdHlsZTsKICAgICBpZiAoaGFzU2VsZWN0aW9u
KSB7CkBAIC0yMzEsNiArMjM1LDkgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludChSZW5k
ZXJPYmplYwogICAgICAgICAgICAgc2VsZWN0aW9uU3R5bGUgPSBzdHlsZTsKICAgICB9CiAKKyAg
ICAvLyBDb21wdXRlIHRleHQgbWF0Y2ggbWFya2VyIHJlY3RzLiBJdCBuZWVkcyB0byB0cmF2ZXJz
ZSBhbGwgdGV4dCBjaHVuayBwYXJ0cyB0byBmaWd1cmUKKyAgICAvLyBvdXQgdGhlIHVuaW9uIHNl
bGVjdGlvbiByZWN0IG9mIGFsbCB0ZXh0IGNodW5rIHBhcnRzIHRoYXQgY29udHJpYnV0ZSB0byB0
aGUgc2VsZWN0aW9uLgorICAgIGNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0KHN0eWxlKTsKICAg
ICBBU1NFUlQoIW1fY3VycmVudENodW5rUGFydC5pc1ZhbGlkKCkpOwogCiAgICAgY29uc3QgVmVj
dG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N2Z1RleHRDaHVu
a1BhcnRzLmVuZCgpOwpAQCAtMjUzLDEyICsyNjAsOCBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6
OnBhaW50KFJlbmRlck9iamVjCiAgICAgICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmaXJzdENo
YXJhY3Rlci0+eCwgZmlyc3RDaGFyYWN0ZXItPnkpOwogCiAgICAgICAgIC8vIERyYXcgYmFja2dy
b3VuZCBvbmNlIChub3QgaW4gYm90aCBmaWxsL3N0cm9rZSBwaGFzZXMpCi0gICAgICAgIGlmICgh
aXNQcmludGluZykgewotICAgICAgICAgICAgLy8gRklYTUU6IHBhaW50RG9jdW1lbnRNYXJrZXJz
KHBhaW50SW5mby5jb250ZXh0LCB4T3JpZ2luLCB5T3JpZ2luLCBzdHlsZSwgZm9udCwgdHJ1ZSk7
Ci0KLSAgICAgICAgICAgIGlmIChoYXNTZWxlY3Rpb24pCi0gICAgICAgICAgICAgICAgcGFpbnRT
ZWxlY3Rpb24ocGFpbnRJbmZvLmNvbnRleHQsIHRleHRPcmlnaW4sIHN0eWxlKTsKLSAgICAgICAg
fQorICAgICAgICBpZiAoIWlzUHJpbnRpbmcgJiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSAmJiBo
YXNTZWxlY3Rpb24pCisgICAgICAgICAgICBwYWludFNlbGVjdGlvbihwYWludEluZm8uY29udGV4
dCwgdGV4dE9yaWdpbiwgc3R5bGUpOwogCiAgICAgICAgIC8vIFNwZWM6IEFsbCB0ZXh0IGRlY29y
YXRpb25zIGV4Y2VwdCBsaW5lLXRocm91Z2ggc2hvdWxkIGJlIGRyYXduIGJlZm9yZSB0aGUgdGV4
dCBpcyBmaWxsZWQgYW5kIHN0cm9rZWQ7IHRodXMsIHRoZSB0ZXh0IGlzIHJlbmRlcmVkIG9uIHRv
cCBvZiB0aGVzZSBkZWNvcmF0aW9ucy4KICAgICAgICAgaW50IGRlY29yYXRpb25zID0gc3R5bGUt
PnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CkBAIC0yNzAsMjIgKzI3MywxOSBAQCB2b2lkIFNW
R0lubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVjCiAgICAgICAgIC8vIEZpbGwgdGV4dAog
ICAgICAgICBpZiAoaGFzRmlsbCkgewogICAgICAgICAgICAgbV9wYWludGluZ1Jlc291cmNlTW9k
ZSA9IEFwcGx5VG9GaWxsTW9kZSB8IEFwcGx5VG9UZXh0TW9kZTsKLSAgICAgICAgICAgIHBhaW50
VGV4dChwYWludEluZm8uY29udGV4dCwgdGV4dE9yaWdpbiwgc3R5bGUsIHNlbGVjdGlvblN0eWxl
LCBoYXNTZWxlY3Rpb24pOworICAgICAgICAgICAgcGFpbnRUZXh0KHBhaW50SW5mby5jb250ZXh0
LCB0ZXh0T3JpZ2luLCBzdHlsZSwgc2VsZWN0aW9uU3R5bGUsIGhhc1NlbGVjdGlvbiwgcGFpbnRT
ZWxlY3RlZFRleHRPbmx5KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFN0cm9rZSB0ZXh0CiAg
ICAgICAgIGlmIChoYXNTdHJva2UpIHsKICAgICAgICAgICAgIG1fcGFpbnRpbmdSZXNvdXJjZU1v
ZGUgPSBBcHBseVRvU3Ryb2tlTW9kZSB8IEFwcGx5VG9UZXh0TW9kZTsKLSAgICAgICAgICAgIHBh
aW50VGV4dChwYWludEluZm8uY29udGV4dCwgdGV4dE9yaWdpbiwgc3R5bGUsIHNlbGVjdGlvblN0
eWxlLCBoYXNTZWxlY3Rpb24pOworICAgICAgICAgICAgcGFpbnRUZXh0KHBhaW50SW5mby5jb250
ZXh0LCB0ZXh0T3JpZ2luLCBzdHlsZSwgc2VsZWN0aW9uU3R5bGUsIGhhc1NlbGVjdGlvbiwgcGFp
bnRTZWxlY3RlZFRleHRPbmx5KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFNwZWM6IExpbmUt
dGhyb3VnaCBzaG91bGQgYmUgZHJhd24gYWZ0ZXIgdGhlIHRleHQgaXMgZmlsbGVkIGFuZCBzdHJv
a2VkOyB0aHVzLCB0aGUgbGluZS10aHJvdWdoIGlzIHJlbmRlcmVkIG9uIHRvcCBvZiB0aGUgdGV4
dC4KICAgICAgICAgaWYgKGRlY29yYXRpb25zICYgTElORV9USFJPVUdIKQogICAgICAgICAgICAg
cGFpbnREZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0LCB0ZXh0T3JpZ2luLCBMSU5FX1RIUk9V
R0gsIGhhc1NlbGVjdGlvbik7CiAKLSAgICAgICAgLy8gUGFpbnQgZG9jdW1lbnQgbWFya2Vycwot
ICAgICAgICAvLyBGSVhNRTogcGFpbnREb2N1bWVudE1hcmtlcnMocGFpbnRJbmZvLmNvbnRleHQs
IHhPcmlnaW4sIHlPcmlnaW4sIHN0eWxlLCBmb250LCBmYWxzZSk7Ci0KICAgICAgICAgbV9wYWlu
dGluZ1Jlc291cmNlTW9kZSA9IEFwcGx5VG9EZWZhdWx0TW9kZTsKICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CkBAIC00MDAsNiArNDAwLDQyIEBAIHZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQKICAgICBtYXBTdGFydEVuZFBvc2l0aW9u
c0ludG9DaHVua1BhcnRDb29yZGluYXRlcyhzdGFydFBvcywgZW5kUG9zLCBtX2N1cnJlbnRDaHVu
a1BhcnQpOwogfQogCit2b2lkIFNWR0lubGluZVRleHRCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJr
ZXJSZWN0KFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudENodW5r
UGFydC5pc1ZhbGlkKCkpOworICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlcigpLT5ub2RlKCk7Cisg
ICAgaWYgKCFub2RlIHx8ICFub2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCk7CisKKyAgICBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI+IG1hcmtlcnMgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzRm9yTm9kZShyZW5kZXJlcigpLT5ub2RlKCkpOworICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcj46Oml0ZXJhdG9yIG1hcmtlckVuZCA9IG1hcmtlcnMuZW5kKCk7CisKKyAgICBmb3IgKFZl
Y3RvcjxEb2N1bWVudE1hcmtlcj46Oml0ZXJhdG9yIG1hcmtlckl0ID0gbWFya2Vycy5iZWdpbigp
OyBtYXJrZXJJdCAhPSBtYXJrZXJFbmQ7ICsrbWFya2VySXQpIHsKKyAgICAgICAgY29uc3QgRG9j
dW1lbnRNYXJrZXImIG1hcmtlciA9ICptYXJrZXJJdDsKKworICAgICAgICAvLyBTVkcgaXMgb25s
eSBpbnRlcmVzc3RlZCBpbiB0aGUgVGV4dE1hdGNoIG1hcmtlciwgZm9yIG5vdy4KKyAgICAgICAg
aWYgKG1hcmtlci50eXBlICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBGbG9hdFJlY3QgbWFya2VyUmVjdDsKKworICAgICAgICAv
LyBJdGVyYXRlIG92ZXIgYWxsIHRleHQgY2h1bmsgcGFydHMsIHRvIHNlZSB3aGljaCBvbmVzIGhh
dmUgdG8gYmUgaGlnaGxpZ2h0ZWQKKyAgICAgICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1Bh
cnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N2Z1RleHRDaHVua1BhcnRzLmVuZCgpOworICAg
ICAgICBmb3IgKFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3N2Z1RleHRDaHVua1BhcnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgaW50IHBhcnRTdGFydFBvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQgLSBzdGFydCgpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oMCkpOworICAgICAgICAgICAgaW50IHBhcnRFbmRQb3MgPSBt
aW4obWFya2VyLmVuZE9mZnNldCAtIHN0YXJ0KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW4o
KSkpOworICAgICAgICAgICAgbWFya2VyUmVjdC51bml0ZShzZWxlY3Rpb25SZWN0Rm9yVGV4dENo
dW5rUGFydCgqaXQsIHBhcnRTdGFydFBvcywgcGFydEVuZFBvcywgc3R5bGUpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghbV9jaHVua1RyYW5zZm9ybWF0aW9uLmlzSWRlbnRpdHkoKSkKKyAg
ICAgICAgICAgIG1hcmtlclJlY3QgPSBtX2NodW5rVHJhbnNmb3JtYXRpb24ubWFwUmVjdChtYXJr
ZXJSZWN0KTsKKworICAgICAgICBkb2N1bWVudC0+c2V0UmVuZGVyZWRSZWN0Rm9yTWFya2VyKG5v
ZGUsIG1hcmtlciwgcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29sdXRlUXVhZChtYXJrZXJSZWN0KS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKKyAgICB9Cit9CisKIHN0YXRpYyBpbmxpbmUgZmxvYXQg
cG9zaXRpb25PZmZzZXRGb3JEZWNvcmF0aW9uKEVUZXh0RGVjb3JhdGlvbiBkZWNvcmF0aW9uLCBj
b25zdCBGb250JiBmb250LCBmbG9hdCB0aGlja25lc3MpCiB7CiAgICAgLy8gRklYTUU6IEZvciBT
VkcgRm9udHMgd2UgbmVlZCB0byB1c2UgdGhlIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUgPGZv
bnQtZmFjZT4gaWYgc3BlY2lmaWVkLgpAQCAtNTI4LDcgKzU2NCw3IEBAIHZvaWQgU1ZHSW5saW5l
VGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3IKICAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAK
LXZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5k
ZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGJvb2wgaGFzU2VsZWN0aW9uKQordm9pZCBTVkdJbmxp
bmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9h
dFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBzZWxl
Y3Rpb25TdHlsZSwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5
KQogewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKHNlbGVjdGlvblN0eWxlKTsKQEAg
LTU1Miw3ICs1ODgsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGlj
CiAgICAgfQogCiAgICAgLy8gRXZlbnR1YWxseSBkcmF3IHRleHQgdXNpbmcgcmVndWxhciBzdHls
ZSB1bnRpbCB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGlvbgotICAgIGlmIChzdGFy
dFBvcyA+IDApIHsKKyAgICBpZiAoc3RhcnRQb3MgPiAwICYmICFwYWludFNlbGVjdGVkVGV4dE9u
bHkpIHsKICAgICAgICAgaWYgKHByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmco
Y29udGV4dCwgdGV4dFJ1biwgc3R5bGUpKSB7CiAgICAgICAgICAgICBmb250LmRyYXdUZXh0KGNv
bnRleHQsIHRleHRSdW4sIHRleHRPcmlnaW4sIDAsIHN0YXJ0UG9zKTsKICAgICAgICAgICAgIHJl
c3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyhjb250ZXh0LCB0ZXh0UnVuKTsK
QEAgLTU2Nyw3ICs2MDMsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFw
aGljCiAgICAgfQogCiAgICAgLy8gRXZlbnR1YWxseSBkcmF3IHRleHQgdXNpbmcgcmVndWxhciBz
dHlsZSBmcm9tIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGlvbiB0byB0aGUgZW5kIG9m
IHRoZSBjdXJyZW50IGNodW5rIHBhcnQKLSAgICBpZiAoZW5kUG9zIDwgbV9jdXJyZW50Q2h1bmtQ
YXJ0Lmxlbmd0aCkgeworICAgIGlmIChlbmRQb3MgPCBtX2N1cnJlbnRDaHVua1BhcnQubGVuZ3Ro
ICYmICFwYWludFNlbGVjdGVkVGV4dE9ubHkpIHsKICAgICAgICAgaWYgKHByZXBhcmVHcmFwaGlj
c0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoY29udGV4dCwgdGV4dFJ1biwgc3R5bGUpKSB7CiAgICAg
ICAgICAgICBmb250LmRyYXdUZXh0KGNvbnRleHQsIHRleHRSdW4sIHRleHRPcmlnaW4sIGVuZFBv
cywgbV9jdXJyZW50Q2h1bmtQYXJ0Lmxlbmd0aCk7CiAgICAgICAgICAgICByZXN0b3JlR3JhcGhp
Y3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRpbmcoY29udGV4dCwgdGV4dFJ1bik7CkBAIC01NzUsNyAr
NjExLDYgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpYwogICAgIH0K
IH0KIAotCiB2b2lkIFNWR0lubGluZVRleHRCb3g6OmJ1aWxkTGF5b3V0SW5mb3JtYXRpb24oU1ZH
Q2hhcmFjdGVyTGF5b3V0SW5mbyYgaW5mbywgU1ZHTGFzdEdseXBoSW5mbyYgbGFzdEdseXBoKQog
ewogICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRoaXMtPnRleHRSZW5kZXJlcigpOwpA
QCAtODE4LDYgKzg1Myw5IEBAIEludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlQm91
bmQKICAgICBmb3IgKFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3N2Z1RleHRDaHVua1BhcnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAg
dGV4dFJlY3QudW5pdGUoaXQtPmZpcnN0Q2hhcmFjdGVyLT5jaGFyYWN0ZXJUcmFuc2Zvcm0oKS5t
YXBSZWN0KEZsb2F0UmVjdChpdC0+Zmlyc3RDaGFyYWN0ZXItPngsIGl0LT5maXJzdENoYXJhY3Rl
ci0+eSAtIGJhc2VsaW5lLCBpdC0+d2lkdGgsIGl0LT5oZWlnaHQpKSk7CiAKKyAgICBpZiAobV9j
aHVua1RyYW5zZm9ybWF0aW9uLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QodGV4dFJlY3QpOworCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QobV9jaHVu
a1RyYW5zZm9ybWF0aW9uLm1hcFJlY3QodGV4dFJlY3QpKTsKIH0KIApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR0lubGluZVRleHRCb3guaAkocmV2aXNpb24gNjE3NTkpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9TVkdJbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEwICs4MSwxMyBA
QCBwcml2YXRlOgogICAgIGJvb2wgcHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGlu
ZyhHcmFwaGljc0NvbnRleHQqJiwgVGV4dFJ1biYsIFJlbmRlclN0eWxlKik7CiAgICAgdm9pZCBy
ZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYs
IFRleHRSdW4mKTsKIAorICAgIHZvaWQgY29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3QoUmVuZGVy
U3R5bGUqKTsKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBFVGV4dERlY29yYXRpb24sIGJvb2wgaGFzU2VsZWN0
aW9uKTsKICAgICB2b2lkIHBhaW50RGVjb3JhdGlvbldpdGhTdHlsZShHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5kZXJTdHlsZSosIEVUZXh0RGVjb3Jh
dGlvbik7CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5kZXJTdHlsZSopOwotICAgIHZvaWQgcGFpbnRUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIFJlbmRlclN0
eWxlKiwgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBib29sIGhhc1NlbGVjdGlvbik7Cisg
ICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgdGV4
dE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGJvb2wg
aGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CisKKyAgICBGbG9hdFJl
Y3Qgc2VsZWN0aW9uUmVjdEZvclRleHRDaHVua1BhcnQoY29uc3QgU1ZHVGV4dENodW5rUGFydCYs
IGludCBwYXJ0U3RhcnRQb3MsIGludCBwYXJ0RW5kUG9zLCBSZW5kZXJTdHlsZSopOwogCiBwcml2
YXRlOgogICAgIGludCBtX2hlaWdodDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJ
bmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJbmxp
bmVCb3guY3BwCShyZXZpc2lvbiA2MTc1OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR1Jvb3RJ
bmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdm9pZCBTVkdSb290SW5saW5lQm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQsIGludCkKIHsKLSAgICBBU1NFUlQocGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKTsKKyAgICBBU1NFUlQocGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
U2VsZWN0aW9uKTsKICAgICBBU1NFUlQoIXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBib3hSZW5kZXJlciA9IHJlbmRlcmVyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59756</attachid>
            <date>2010-06-25 04:32:42 -0700</date>
            <delta_ts>2010-06-25 04:35:12 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>Highlight.diff</filename>
            <type>text/plain</type>
            <size>21849</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTg0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDYtMjUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU1ZHIFRleHQgSGlnaGxpZ2h0aW5nIG5vdCB5ZXQgc3VwcG9ydGVkIChpbiBTYWZhcmkp
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTIwMAor
CisgICAgICAgIEFkZCB0ZXh0IG1hdGNoIG1hcmtlciBoaWdobGlnaHRpbmcgc3VwcG9ydCBmb3Ig
U1ZHIHRleHQgLSBzZWFyY2hpbmcgZm9yIFNWRyB0ZXh0IGluIFNhZmFyaSBub3cgcGFpbnRzIHRo
ZSBuaWNlIHllbGxvdyBoaWdobGlnaHRpbmcgcmVjdCwgYW5kIHRoZQorICAgICAgICB3aGl0ZSBy
ZWN0YW5nbGVzIGZvciBhbGwgdGV4dCBtYXRjaGVzLiBCZWhhdmVzIGV4YWN0bHkgbGlrZSBIVE1M
IHRleHQsIGJ1dCByZXNwZWN0aW5nIFNWR3MgcGVyLWNoYXJhY3Rlci9wZXItY2h1bmsgdHJhbnNm
b3JtYXRpb25zLAorICAgICAgICBhbGxvd2luZyB0byBoaWdobGlnaHQgdGV4dFBhdGhzLCB0c3Bh
bnMgd2l0aCBhYnNvbHV0ZSBwZXItY2hhcmFjdGVyIHBvc2l0aW9ucyBldGMuLgorCisgICAgICAg
IE9ubHkgbWFudWFsbHkgdGVzdGFibGUsIHRodXMgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZUJveC5oOiBFeHBvc2UgY2FsY3VsYXRlQm91bmRhcmllcygpIGluIG5v
bi1TVkcgYnVpbGRzIGFzIHdlbGwsIG5vdyB1c2VkIGJ5IElubGluZVRleHRCb3ggdG9vLgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6IEFkZCBjYWxjdWxhdGVCb3VuZGFyaWVz
KCksIHdoaWNoIHdpbGwgYmUgdXNlZCB0byByZWZhY3RvciBzb21lIGNvZGUgaW4gUmVuZGVyVGV4
dCwgc2VlIGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y2FsY3VsYXRl
Qm91bmRhcmllcyk6IEp1c3QgcmV0dXJuIGEgSW50UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVp
Z2h0KCkpIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU1ZHSW5saW5l
VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZVRleHQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGluZVRleHQ6OmlzU1ZHSW5saW5lVGV4dCk6IFJldHVy
biB0cnVlIGZvciBpc1NWR0lubGluZVRleHQoKSwgcmV0dXJuIGZhbHNlIGZvciBpc1NWR1RleHQo
KSAoZGVmYXVsdCBpbiBSZW5kZXJPYmplY3QuaCkKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjpwYWludCk6IE9u
bHkgcGFpbnQgYm94IGRlY29yYXRpb25zIGluIFBhaW50UGhhc2UoQ2hpbGQpQmxvY2tCYWNrZ3Jv
dW5kLCBleGl0IGFmdGVyd2FyZHMganVzdCBsaWtlIFJlbmRlckJsb2NrIGRvZXMuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyd2lzZSB0aGUgd2hpdGUgdGV4
dCBtYXRjaCBtYXJrZXIgcmVjdGFuZ2xlIGdldHMgZHJhd24gb3ZlciB0aGUgeWVsbG93IGhpZ2hs
aWdodCB0aGF0IFNhZmFyaSBkcmF3cy4gCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6cGFpbnQpOiBBY2NlcHQg
YSBuZXcgcGFpbnRpbmcgcGhhc2U6IFBhaW50UGhhc2VTZWxlY3Rpb24sIHVzZWQgYnkgU2FmYXJp
IHdoZW4gZHJhd2luZyB0aGUgeWVsbG93IGhpZ2hsaWdodCByZWN0LgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29s
dXRlUXVhZHMpOiBVc2UgY2FsY3VsYXRlQm91bmRhcmllcygpIGluc3RlYWQgb2YgSW50UmVjdCh4
KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpLiBTVkcgcHJvdmlkZXMgZGlmZmVyZW50IGJvdW5k
YXJpZXMgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29sdXRlUXVhZHNG
b3JSYW5nZSk6IERpdHRvLiBUaGlzIGlzIHRoZSBtYWluIGNoYW5nZSwgbGVhZGluZyB0byBjb3Jy
ZWN0IHRleHQgaGlnaGxpZ2h0IHBsYWNlbWVudC4KKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHSW5s
aW5lRmxvd0JveC5jcHA6IEFkZCBhc3NlcnRpb24gdGhhdCBwYWludGluZyBpcyBub3QgZGlzYWJs
ZWQsIGZvciBjb25zaXN0ZW5jeS4gQ2hhbmdlIHBhaW50IHBoYXNlIGFzc2VydGlvbiB0byBpbmNs
dWRlIFBhaW50UGhhc2VTZWxlY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93
Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRD
aHVua1BhcnQpOiBSZWZhY3RvcmVkIGZyb20gc2VsZWN0aW9uUmVjdCgpLCB0byBzaGFyZSBjb2Rl
IGJldHdlZW4gc2VsZWN0aW9uUmVjdC9jb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QpOiBVc2UgbmV3IGhl
bHBlciBmdW5jdGlvbiBzZWxlY3Rpb25SZWN0Rm9yVGV4dENodW5rUGFydCgpLgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnQpOiBEaXR0by4gQ2FsbCBuZXcgY29tcHV0
ZVRleHRNYXRjaE1hcmtlclJlY3QoKSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0lu
bGluZVRleHRCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0KTogSW1wbGVtZW50ZWQgc2lt
aWxhciB0byBIVE1MLCBidXQgcmVzcGVjdGluZyBTVkdzIGNvbmNlcHQgb2YgdGV4dCBjaHVuayBw
YXJ0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dCk6IElu
IFBhaW50UGhhc2VTZWxlY3Rpb24sIG9ubHkgcGFpbnQgc2VsZWN0ZWQgdGV4dCwgbm90IGFueXRo
aW5nIGJlZm9yZS9hZnRlciB0aGUgc2VsZWN0aW9uIHN0YXJ0L2VuZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OmNhbGN1bGF0ZUJvdW5kYXJpZXMpOiBFYXJseSBleGl0LCBp
ZiBtX2NodW5rVHJhbnNmb3JtYXRpb24gaXMgaWRlbnRpdHkuCisgICAgICAgICogcmVuZGVyaW5n
L1NWR0lubGluZVRleHRCb3guaDogQWRkZWQgImJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5IiB0
byBwYWludFRleHQoKSBhbmQgYWRkIG5ldyBjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdChSZW5k
ZXJTdHlsZSopIGZ1bmN0aW9uLgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSb290SW5saW5lQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KTogQ2hhbmdl
IHBhaW50IHBoYXNlIGFzc2VydGlvbiB0byBpbmNsdWRlIFBhaW50UGhhc2VTZWxlY3Rpb24uCisK
IDIwMTAtMDYtMjUgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHBhcm9nYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAko
cmV2aXNpb24gNjE3NTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDE0ICsxNDcsMTQgQEAgcHVibGljOgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorI2VuZGlmCiAKICAgICB2aXJ0
dWFsIEludFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKICAgICB9Ci0j
ZW5kaWYKLSAgICAKKwogICAgIGJvb2wgaXNDb25zdHJ1Y3RlZCgpIHsgcmV0dXJuIG1fY29uc3Ry
dWN0ZWQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29uc3RydWN0ZWQoKQogICAgIHsKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDYxNzU5KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw4IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uSGVpZ2h0KCk7CiAKIHB1YmxpYzoK
KyAgICB2aXJ0dWFsIEludFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJu
IEludFJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQorCiAgICAgdmlydHVhbCBJ
bnRSZWN0IHNlbGVjdGlvblJlY3QoaW50IGFic3gsIGludCBhYnN5LCBpbnQgc3RhcnRQb3MsIGlu
dCBlbmRQb3MpOwogICAgIGJvb2wgaXNTZWxlY3RlZChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3Mp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNQb3MsIGlu
dCYgZVBvcyk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24g
NjE3NTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDEyICsxNDEsMTYgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpwYWludChQYWlu
dEluZm8mIHBhaQogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBib29sIGlzVmlzaWJsZSA9IHN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFOwogICAgIEludFBvaW50IHBhcmVudE9yaWdpbkluQ29udGFpbmVy
KHBhcmVudFgsIHBhcmVudFkpOwogICAgIEludFBvaW50IGJvcmRlckJveE9yaWdpbkluQ29udGFp
bmVyID0gcGFyZW50T3JpZ2luSW5Db250YWluZXIgKyBwYXJlbnRPcmlnaW5Ub0JvcmRlckJveCgp
OwogCi0gICAgaWYgKGhhc0JveERlY29yYXRpb25zKCkgJiYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVj
dGlvbikpIAorICAgIGlmIChoYXNCb3hEZWNvcmF0aW9ucygpICYmIChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBpc1Zpc2libGUpCiAgICAgICAgIHBhaW50Qm94
RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBib3JkZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJv
cmRlckJveE9yaWdpbkluQ29udGFpbmVyLnkoKSk7CiAKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCisgICAgICAgIHJldHVybjsKKwogICAgIC8v
IEFuIGVtcHR5IHZpZXdwb3J0IGRpc2FibGVzIHJlbmRlcmluZy4gIEZJWE1FOiBTaG91bGQgd2Ug
c3RpbGwgcmVuZGVyIGZpbHRlcnM/CiAgICAgaWYgKG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTgxLDcgKzE4NSw3IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6
cGFpbnQoUGFpbnRJbmZvJiBwYWkKIAogICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnJlc3Rv
cmUoKTsKIAotICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8
IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91
dGxpbmVXaWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQorICAgIGlm
ICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYm
IGlzVmlzaWJsZSkKICAgICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBib3Jk
ZXJCb3hPcmlnaW5JbkNvbnRhaW5lci54KCksIGJvcmRlckJveE9yaWdpbkluQ29udGFpbmVyLnko
KSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0LmNwcAkocmV2aXNpb24gNjE3NTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDkgKzE0NiwxNCBAQCB2b2lkIFJlbmRlclNW
R1RleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yCiAKIHZvaWQgUmVuZGVyU1ZHVGV4dDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQogewotICAgIGlmIChwYWludEluZm8uY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSkp
CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91
bmQKKyAgICAgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZQorICAg
ICAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikKKyAgICAgICAgIHJl
dHVybjsKKwogICAgIFBhaW50SW5mbyBibG9ja0luZm8ocGFpbnRJbmZvKTsKICAgICBibG9ja0lu
Zm8uY29udGV4dC0+c2F2ZSgpOwogICAgIGFwcGx5VHJhbnNmb3JtVG9QYWludEluZm8oYmxvY2tJ
bmZvLCBsb2NhbFRvUGFyZW50VHJhbnNmb3JtKCkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHAJKHJldmlzaW9uIDYxODQ0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNCw3ICszMTQsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFi
c29sdXRlUmVjdHNGb3JSYW5nZShWCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mIHF1YWRzKQogewogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0g
Zmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKQotICAgICAgICBx
dWFkcy5hcHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm94LT54KCksIGJveC0+
eSgpLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpKSk7CisgICAgICAgIHF1YWRzLmFwcGVu
ZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3gtPmNhbGN1bGF0ZUJvdW5kYXJpZXMo
KSkpKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzRm9yUmFuZ2UoVmVjdG9y
PEZsb2F0UXVhZD4mIHF1YWRzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVz
ZVNlbGVjdGlvbkhlaWdodCkKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFi
c29sdXRlUXVhZHNGb3JSYW5nZShWCiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJz
dFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgLy8g
Tm90ZTogYm94LT5lbmQoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIs
IG5vdCB0aGUgaW5kZXggcGFzdCBpdAogICAgICAgICBpZiAoc3RhcnQgPD0gYm94LT5zdGFydCgp
ICYmIGJveC0+ZW5kKCkgPCBlbmQpIHsKLSAgICAgICAgICAgIEludFJlY3QgciA9IEludFJlY3Qo
Ym94LT54KCksIGJveC0+eSgpLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgICAg
ICAgICAgSW50UmVjdCByKGJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygpKTsKICAgICAgICAgICAg
IGlmICh1c2VTZWxlY3Rpb25IZWlnaHQpIHsKICAgICAgICAgICAgICAgICBJbnRSZWN0IHNlbGVj
dGlvblJlY3QgPSBib3gtPnNlbGVjdGlvblJlY3QoMCwgMCwgc3RhcnQsIGVuZCk7CiAgICAgICAg
ICAgICAgICAgci5zZXRIZWlnaHQoc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gNjE3NTkpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6
cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCiB7Ci0g
ICAgQVNTRVJUKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCk7CisgICAg
QVNTRVJUKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7CisgICAgQVNTRVJUKCFwYWludEluZm8u
Y29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKTsKIAogICAgIFJlbmRlck9iamVjdCogYm94UmVu
ZGVyZXIgPSByZW5kZXJlcigpOwogICAgIEFTU0VSVChib3hSZW5kZXJlcik7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gNjE3NTkpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDYgKzEzNywyNyBAQCBpbnQgU1ZHSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoCiAg
ICAgcmV0dXJuIDA7CiB9CiAKK0Zsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25S
ZWN0Rm9yVGV4dENodW5rUGFydChjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiBwYXJ0LCBpbnQgcGFy
dFN0YXJ0UG9zLCBpbnQgcGFydEVuZFBvcywgUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAgIC8v
IE1hcCBzdGFydFBvcy9lbmRQb3MgcG9zaXRpb25zIGludG8gY2h1bmsgcGFydAorICAgIG1hcFN0
YXJ0RW5kUG9zaXRpb25zSW50b0NodW5rUGFydENvb3JkaW5hdGVzKHBhcnRTdGFydFBvcywgcGFy
dEVuZFBvcywgcGFydCk7CisKKyAgICBpZiAocGFydFN0YXJ0UG9zID49IHBhcnRFbmRQb3MpCisg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIC8vIFNldCBjdXJyZW50IGNodW5rIHBh
cnQsIHNvIGNvbnN0cnVjdFRleHRSdW4oKSB3b3JrcyBwcm9wZXJseS4KKyAgICBtX2N1cnJlbnRD
aHVua1BhcnQgPSBwYXJ0OworCisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7
CisgICAgVmVjdG9yPFNWR0NoYXI+Ojpjb25zdF9pdGVyYXRvciBjaGFyYWN0ZXIgPSBwYXJ0LmZp
cnN0Q2hhcmFjdGVyOworICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihjaGFyYWN0ZXItPngsIGNo
YXJhY3Rlci0+eSAtIGZvbnQuYXNjZW50KCkpOworCisgICAgRmxvYXRSZWN0IHBhcnRSZWN0KGZv
bnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3RydWN0VGV4dFJ1bihzdHlsZSksIHRleHRPcmln
aW4sIHBhcnQuaGVpZ2h0LCBwYXJ0U3RhcnRQb3MsIHBhcnRFbmRQb3MpKTsKKyAgICBtX2N1cnJl
bnRDaHVua1BhcnQgPSBTVkdUZXh0Q2h1bmtQYXJ0KCk7CisKKyAgICByZXR1cm4gY2hhcmFjdGVy
LT5jaGFyYWN0ZXJUcmFuc2Zvcm0oKS5tYXBSZWN0KHBhcnRSZWN0KTsKK30KKwogSW50UmVjdCBT
VkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KGludCwgaW50LCBpbnQgc3RhcnRQb3MsIGlu
dCBlbmRQb3MpCiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRDaHVua1BhcnQuaXNWYWxpZCgpKTsK
QEAgLTE1NCwzMiArMTc1LDEyIEBAIEludFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9u
UmVjdCgKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0LT5zdHlsZSgpOwogICAgIEFTU0VS
VChzdHlsZSk7CiAKLSAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKLSAgICBp
bnQgYmFzZWxpbmUgPSBmb250LmFzY2VudCgpOwogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0
OwogCiAgICAgLy8gRmlndXJlIG91dCB3aGljaCB0ZXh0IGNodW5rIHBhcnQgaXMgaGl0Ci0gICAg
aW50IHBhcnRTdGFydFBvcyA9IDA7Ci0gICAgaW50IHBhcnRFbmRQb3MgPSAwOwotCiAgICAgY29u
c3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N2Z1Rl
eHRDaHVua1BhcnRzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fc3ZnVGV4dENodW5rUGFydHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIHBhcnRTdGFydFBvcyA9IHN0YXJ0UG9zOwotICAgICAgICBwYXJ0
RW5kUG9zID0gZW5kUG9zOwotCi0gICAgICAgIC8vIFNlbGVjdCBjdXJyZW50IGNodW5rIHBhcnQs
IG1hcCBzdGFydFBvcy9lbmRQb3MgcG9zaXRpb25zIGludG8gY2h1bmsgcGFydAotICAgICAgICBt
X2N1cnJlbnRDaHVua1BhcnQgPSAqaXQ7Ci0gICAgICAgIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50
b0NodW5rUGFydENvb3JkaW5hdGVzKHBhcnRTdGFydFBvcywgcGFydEVuZFBvcywgbV9jdXJyZW50
Q2h1bmtQYXJ0KTsKLQotICAgICAgICBpZiAocGFydFN0YXJ0UG9zIDwgcGFydEVuZFBvcykgewot
ICAgICAgICAgICAgVmVjdG9yPFNWR0NoYXI+Ojpjb25zdF9pdGVyYXRvciBjaGFyYWN0ZXIgPSBt
X2N1cnJlbnRDaHVua1BhcnQuZmlyc3RDaGFyYWN0ZXI7Ci0gICAgICAgICAgICBGbG9hdFBvaW50
IHRleHRPcmlnaW4oY2hhcmFjdGVyLT54LCBjaGFyYWN0ZXItPnkgLSBiYXNlbGluZSk7Ci0gICAg
ICAgICAgICBGbG9hdFJlY3QgcGFydFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChjb25z
dHJ1Y3RUZXh0UnVuKHN0eWxlKSwgdGV4dE9yaWdpbiwgbV9jdXJyZW50Q2h1bmtQYXJ0LmhlaWdo
dCwgcGFydFN0YXJ0UG9zLCBwYXJ0RW5kUG9zKSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25SZWN0
LnVuaXRlKGNoYXJhY3Rlci0+Y2hhcmFjdGVyVHJhbnNmb3JtKCkubWFwUmVjdChwYXJ0UmVjdCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9jdXJyZW50Q2h1bmtQYXJ0ID0gU1ZHVGV4dENodW5r
UGFydCgpOwotICAgIH0KKyAgICBmb3IgKFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3N2Z1RleHRDaHVua1BhcnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgc2VsZWN0aW9uUmVjdC51bml0ZShzZWxlY3Rpb25SZWN0Rm9yVGV4dENodW5r
UGFydCgqaXQsIHN0YXJ0UG9zLCBlbmRQb3MsIHN0eWxlKSk7CiAKICAgICAvLyBSZXNlcGVjdCBw
b3NzaWJsZSBjaHVuayB0cmFuc2Zvcm1hdGlvbgogICAgIGlmIChtX2NodW5rVHJhbnNmb3JtYXRp
b24uaXNJZGVudGl0eSgpKQpAQCAtMTkxLDcgKzE5Miw3IEBAIEludFJlY3QgU1ZHSW5saW5lVGV4
dEJveDo6c2VsZWN0aW9uUmVjdCgKIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50LCBpbnQpCiB7CiAgICAgQVNTRVJUKHJl
bmRlcmVyKCktPnNob3VsZFBhaW50V2l0aGluUm9vdChwYWludEluZm8pKTsKLSAgICBBU1NFUlQo
cGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKTsKKyAgICBBU1NFUlQocGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKICAgICBBU1NFUlQodHJ1bmNhdGlvbigpID09IGNOb1Ry
dW5jYXRpb24pOwogCiAgICAgaWYgKHJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAh
PSBWSVNJQkxFKQpAQCAtMjExLDEwICsyMTIsMTMgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludChSZW5kZXJPYmplYwogCiAgICAgYm9vbCBoYXNGaWxsID0gc3ZnU3R5bGUtPmhhc0ZpbGwo
KTsKICAgICBib29sIGhhc1N0cm9rZSA9IHN2Z1N0eWxlLT5oYXNTdHJva2UoKTsKKyAgICBib29s
IHBhaW50U2VsZWN0ZWRUZXh0T25seSA9IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2Vs
ZWN0aW9uOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlJ3JlIHNlbGVjdGVk
LgogICAgIGJvb2wgaXNQcmludGluZyA9IHBhcmVudFJlbmRlcmVyLT5kb2N1bWVudCgpLT5wcmlu
dGluZygpOwogICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9u
U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgaWYgKCFoYXNTZWxl
Y3Rpb24gJiYgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQorICAgICAgICByZXR1cm47CiAKICAgICBS
ZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUgPSBzdHlsZTsKICAgICBpZiAoaGFzU2VsZWN0aW9u
KSB7CkBAIC0yMzEsNiArMjM1LDkgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludChSZW5k
ZXJPYmplYwogICAgICAgICAgICAgc2VsZWN0aW9uU3R5bGUgPSBzdHlsZTsKICAgICB9CiAKKyAg
ICAvLyBDb21wdXRlIHRleHQgbWF0Y2ggbWFya2VyIHJlY3RzLiBJdCBuZWVkcyB0byB0cmF2ZXJz
ZSBhbGwgdGV4dCBjaHVuayBwYXJ0cyB0byBmaWd1cmUKKyAgICAvLyBvdXQgdGhlIHVuaW9uIHNl
bGVjdGlvbiByZWN0IG9mIGFsbCB0ZXh0IGNodW5rIHBhcnRzIHRoYXQgY29udHJpYnV0ZSB0byB0
aGUgc2VsZWN0aW9uLgorICAgIGNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0KHN0eWxlKTsKICAg
ICBBU1NFUlQoIW1fY3VycmVudENodW5rUGFydC5pc1ZhbGlkKCkpOwogCiAgICAgY29uc3QgVmVj
dG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3N2Z1RleHRDaHVu
a1BhcnRzLmVuZCgpOwpAQCAtMjUzLDEyICsyNjAsOCBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6
OnBhaW50KFJlbmRlck9iamVjCiAgICAgICAgIEZsb2F0UG9pbnQgdGV4dE9yaWdpbihmaXJzdENo
YXJhY3Rlci0+eCwgZmlyc3RDaGFyYWN0ZXItPnkpOwogCiAgICAgICAgIC8vIERyYXcgYmFja2dy
b3VuZCBvbmNlIChub3QgaW4gYm90aCBmaWxsL3N0cm9rZSBwaGFzZXMpCi0gICAgICAgIGlmICgh
aXNQcmludGluZykgewotICAgICAgICAgICAgLy8gRklYTUU6IHBhaW50RG9jdW1lbnRNYXJrZXJz
KHBhaW50SW5mby5jb250ZXh0LCB4T3JpZ2luLCB5T3JpZ2luLCBzdHlsZSwgZm9udCwgdHJ1ZSk7
Ci0KLSAgICAgICAgICAgIGlmIChoYXNTZWxlY3Rpb24pCi0gICAgICAgICAgICAgICAgcGFpbnRT
ZWxlY3Rpb24ocGFpbnRJbmZvLmNvbnRleHQsIHRleHRPcmlnaW4sIHN0eWxlKTsKLSAgICAgICAg
fQorICAgICAgICBpZiAoIWlzUHJpbnRpbmcgJiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSAmJiBo
YXNTZWxlY3Rpb24pCisgICAgICAgICAgICBwYWludFNlbGVjdGlvbihwYWludEluZm8uY29udGV4
dCwgdGV4dE9yaWdpbiwgc3R5bGUpOwogCiAgICAgICAgIC8vIFNwZWM6IEFsbCB0ZXh0IGRlY29y
YXRpb25zIGV4Y2VwdCBsaW5lLXRocm91Z2ggc2hvdWxkIGJlIGRyYXduIGJlZm9yZSB0aGUgdGV4
dCBpcyBmaWxsZWQgYW5kIHN0cm9rZWQ7IHRodXMsIHRoZSB0ZXh0IGlzIHJlbmRlcmVkIG9uIHRv
cCBvZiB0aGVzZSBkZWNvcmF0aW9ucy4KICAgICAgICAgaW50IGRlY29yYXRpb25zID0gc3R5bGUt
PnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCk7CkBAIC0yNzAsMjIgKzI3MywxOSBAQCB2b2lkIFNW
R0lubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVjCiAgICAgICAgIC8vIEZpbGwgdGV4dAog
ICAgICAgICBpZiAoaGFzRmlsbCkgewogICAgICAgICAgICAgbV9wYWludGluZ1Jlc291cmNlTW9k
ZSA9IEFwcGx5VG9GaWxsTW9kZSB8IEFwcGx5VG9UZXh0TW9kZTsKLSAgICAgICAgICAgIHBhaW50
VGV4dChwYWludEluZm8uY29udGV4dCwgdGV4dE9yaWdpbiwgc3R5bGUsIHNlbGVjdGlvblN0eWxl
LCBoYXNTZWxlY3Rpb24pOworICAgICAgICAgICAgcGFpbnRUZXh0KHBhaW50SW5mby5jb250ZXh0
LCB0ZXh0T3JpZ2luLCBzdHlsZSwgc2VsZWN0aW9uU3R5bGUsIGhhc1NlbGVjdGlvbiwgcGFpbnRT
ZWxlY3RlZFRleHRPbmx5KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFN0cm9rZSB0ZXh0CiAg
ICAgICAgIGlmIChoYXNTdHJva2UpIHsKICAgICAgICAgICAgIG1fcGFpbnRpbmdSZXNvdXJjZU1v
ZGUgPSBBcHBseVRvU3Ryb2tlTW9kZSB8IEFwcGx5VG9UZXh0TW9kZTsKLSAgICAgICAgICAgIHBh
aW50VGV4dChwYWludEluZm8uY29udGV4dCwgdGV4dE9yaWdpbiwgc3R5bGUsIHNlbGVjdGlvblN0
eWxlLCBoYXNTZWxlY3Rpb24pOworICAgICAgICAgICAgcGFpbnRUZXh0KHBhaW50SW5mby5jb250
ZXh0LCB0ZXh0T3JpZ2luLCBzdHlsZSwgc2VsZWN0aW9uU3R5bGUsIGhhc1NlbGVjdGlvbiwgcGFp
bnRTZWxlY3RlZFRleHRPbmx5KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFNwZWM6IExpbmUt
dGhyb3VnaCBzaG91bGQgYmUgZHJhd24gYWZ0ZXIgdGhlIHRleHQgaXMgZmlsbGVkIGFuZCBzdHJv
a2VkOyB0aHVzLCB0aGUgbGluZS10aHJvdWdoIGlzIHJlbmRlcmVkIG9uIHRvcCBvZiB0aGUgdGV4
dC4KICAgICAgICAgaWYgKGRlY29yYXRpb25zICYgTElORV9USFJPVUdIKQogICAgICAgICAgICAg
cGFpbnREZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0LCB0ZXh0T3JpZ2luLCBMSU5FX1RIUk9V
R0gsIGhhc1NlbGVjdGlvbik7CiAKLSAgICAgICAgLy8gUGFpbnQgZG9jdW1lbnQgbWFya2Vycwot
ICAgICAgICAvLyBGSVhNRTogcGFpbnREb2N1bWVudE1hcmtlcnMocGFpbnRJbmZvLmNvbnRleHQs
IHhPcmlnaW4sIHlPcmlnaW4sIHN0eWxlLCBmb250LCBmYWxzZSk7Ci0KICAgICAgICAgbV9wYWlu
dGluZ1Jlc291cmNlTW9kZSA9IEFwcGx5VG9EZWZhdWx0TW9kZTsKICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CkBAIC00MDAsNiArNDAwLDQwIEBAIHZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQKICAgICBtYXBTdGFydEVuZFBvc2l0aW9u
c0ludG9DaHVua1BhcnRDb29yZGluYXRlcyhzdGFydFBvcywgZW5kUG9zLCBtX2N1cnJlbnRDaHVu
a1BhcnQpOwogfQogCit2b2lkIFNWR0lubGluZVRleHRCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJr
ZXJSZWN0KFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBBU1NFUlQoIW1fY3VycmVudENodW5r
UGFydC5pc1ZhbGlkKCkpOworICAgIE5vZGUqIG5vZGUgPSByZW5kZXJlcigpLT5ub2RlKCk7Cisg
ICAgaWYgKCFub2RlIHx8ICFub2RlLT5pbkRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCk7CisgICAgVmVj
dG9yPERvY3VtZW50TWFya2VyPiBtYXJrZXJzID0gZG9jdW1lbnQtPm1hcmtlcnNGb3JOb2RlKHJl
bmRlcmVyKCktPm5vZGUoKSk7CisKKyAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+OjppdGVyYXRv
ciBtYXJrZXJFbmQgPSBtYXJrZXJzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPERvY3VtZW50TWFy
a2VyPjo6aXRlcmF0b3IgbWFya2VySXQgPSBtYXJrZXJzLmJlZ2luKCk7IG1hcmtlckl0ICE9IG1h
cmtlckVuZDsgKyttYXJrZXJJdCkgeworICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFy
a2VyID0gKm1hcmtlckl0OworCisgICAgICAgIC8vIFNWRyBpcyBvbmx5IGludGVyZXNzdGVkIGlu
IHRoZSBUZXh0TWF0Y2ggbWFya2VyLCBmb3Igbm93LgorICAgICAgICBpZiAobWFya2VyLnR5cGUg
IT0gRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIEZsb2F0UmVjdCBtYXJrZXJSZWN0OworICAgICAgICBpbnQgcGFydFN0YXJ0UG9zID0g
bWF4KG1hcmtlci5zdGFydE9mZnNldCAtIHN0YXJ0KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPigw
KSk7CisgICAgICAgIGludCBwYXJ0RW5kUG9zID0gbWluKG1hcmtlci5lbmRPZmZzZXQgLSBzdGFy
dCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuKCkpKTsKKworICAgICAgICAvLyBJdGVyYXRl
IG92ZXIgYWxsIHRleHQgY2h1bmsgcGFydHMsIHRvIHNlZSB3aGljaCBvbmVzIGhhdmUgdG8gYmUg
aGlnaGxpZ2h0ZWQKKyAgICAgICAgY29uc3QgVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3N2Z1RleHRDaHVua1BhcnRzLmVuZCgpOworICAgICAgICBmb3Ig
KFZlY3RvcjxTVkdUZXh0Q2h1bmtQYXJ0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N2Z1RleHRD
aHVua1BhcnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIG1hcmtlclJl
Y3QudW5pdGUoc2VsZWN0aW9uUmVjdEZvclRleHRDaHVua1BhcnQoKml0LCBwYXJ0U3RhcnRQb3Ms
IHBhcnRFbmRQb3MsIHN0eWxlKSk7CisKKyAgICAgICAgaWYgKCFtX2NodW5rVHJhbnNmb3JtYXRp
b24uaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgbWFya2VyUmVjdCA9IG1fY2h1bmtUcmFuc2Zv
cm1hdGlvbi5tYXBSZWN0KG1hcmtlclJlY3QpOworCisgICAgICAgIGRvY3VtZW50LT5zZXRSZW5k
ZXJlZFJlY3RGb3JNYXJrZXIobm9kZSwgbWFya2VyLCByZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKG1hcmtlclJlY3QpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgIH0KK30KKwog
c3RhdGljIGlubGluZSBmbG9hdCBwb3NpdGlvbk9mZnNldEZvckRlY29yYXRpb24oRVRleHREZWNv
cmF0aW9uIGRlY29yYXRpb24sIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHRoaWNrbmVzcykKIHsK
ICAgICAvLyBGSVhNRTogRm9yIFNWRyBGb250cyB3ZSBuZWVkIHRvIHVzZSB0aGUgYXR0cmlidXRl
cyBkZWZpbmVkIGluIHRoZSA8Zm9udC1mYWNlPiBpZiBzcGVjaWZpZWQuCkBAIC01MjgsNyArNTYy
LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcgogICAgIGNvbnRl
eHQtPnJlc3RvcmUoKTsKIH0KIAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBzZWxlY3Rpb25TdHlsZSwgYm9vbCBoYXNTZWxl
Y3Rpb24pCit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIFJlbmRlclN0eWxlKiBzdHls
ZSwgUmVuZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBib29sIGhhc1NlbGVjdGlvbiwgYm9vbCBw
YWludFNlbGVjdGVkVGV4dE9ubHkpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQo
c2VsZWN0aW9uU3R5bGUpOwpAQCAtNTUyLDcgKzU4Niw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0KEdyYXBoaWMKICAgICB9CiAKICAgICAvLyBFdmVudHVhbGx5IGRyYXcgdGV4
dCB1c2luZyByZWd1bGFyIHN0eWxlIHVudGlsIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc2Vs
ZWN0aW9uCi0gICAgaWYgKHN0YXJ0UG9zID4gMCkgeworICAgIGlmIChzdGFydFBvcyA+IDAgJiYg
IXBhaW50U2VsZWN0ZWRUZXh0T25seSkgewogICAgICAgICBpZiAocHJlcGFyZUdyYXBoaWNzQ29u
dGV4dEZvclRleHRQYWludGluZyhjb250ZXh0LCB0ZXh0UnVuLCBzdHlsZSkpIHsKICAgICAgICAg
ICAgIGZvbnQuZHJhd1RleHQoY29udGV4dCwgdGV4dFJ1biwgdGV4dE9yaWdpbiwgMCwgc3RhcnRQ
b3MpOwogICAgICAgICAgICAgcmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5n
KGNvbnRleHQsIHRleHRSdW4pOwpAQCAtNTY3LDcgKzYwMSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4
dEJveDo6cGFpbnRUZXh0KEdyYXBoaWMKICAgICB9CiAKICAgICAvLyBFdmVudHVhbGx5IGRyYXcg
dGV4dCB1c2luZyByZWd1bGFyIHN0eWxlIGZyb20gdGhlIGVuZCBwb3NpdGlvbiBvZiB0aGUgc2Vs
ZWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY2h1bmsgcGFydAotICAgIGlmIChlbmRQ
b3MgPCBtX2N1cnJlbnRDaHVua1BhcnQubGVuZ3RoKSB7CisgICAgaWYgKGVuZFBvcyA8IG1fY3Vy
cmVudENodW5rUGFydC5sZW5ndGggJiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSkgewogICAgICAg
ICBpZiAocHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhjb250ZXh0LCB0ZXh0
UnVuLCBzdHlsZSkpIHsKICAgICAgICAgICAgIGZvbnQuZHJhd1RleHQoY29udGV4dCwgdGV4dFJ1
biwgdGV4dE9yaWdpbiwgZW5kUG9zLCBtX2N1cnJlbnRDaHVua1BhcnQubGVuZ3RoKTsKICAgICAg
ICAgICAgIHJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyhjb250ZXh0LCB0
ZXh0UnVuKTsKQEAgLTU3NSw3ICs2MDksNiBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50
VGV4dChHcmFwaGljCiAgICAgfQogfQogCi0KIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6YnVpbGRM
YXlvdXRJbmZvcm1hdGlvbihTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvJiBpbmZvLCBTVkdMYXN0R2x5
cGhJbmZvJiBsYXN0R2x5cGgpCiB7CiAgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdGhp
cy0+dGV4dFJlbmRlcmVyKCk7CkBAIC04MTgsNiArODUxLDkgQEAgSW50UmVjdCBTVkdJbmxpbmVU
ZXh0Qm94OjpjYWxjdWxhdGVCb3VuZAogICAgIGZvciAoVmVjdG9yPFNWR1RleHRDaHVua1BhcnQ+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3ZnVGV4dENodW5rUGFydHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICB0ZXh0UmVjdC51bml0ZShpdC0+Zmlyc3RDaGFyYWN0ZXItPmNo
YXJhY3RlclRyYW5zZm9ybSgpLm1hcFJlY3QoRmxvYXRSZWN0KGl0LT5maXJzdENoYXJhY3Rlci0+
eCwgaXQtPmZpcnN0Q2hhcmFjdGVyLT55IC0gYmFzZWxpbmUsIGl0LT53aWR0aCwgaXQtPmhlaWdo
dCkpKTsKIAorICAgIGlmIChtX2NodW5rVHJhbnNmb3JtYXRpb24uaXNJZGVudGl0eSgpKQorICAg
ICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdCh0ZXh0UmVjdCk7CisKICAgICByZXR1cm4gZW5j
bG9zaW5nSW50UmVjdChtX2NodW5rVHJhbnNmb3JtYXRpb24ubWFwUmVjdCh0ZXh0UmVjdCkpOwog
fQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA2MTc1
OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NWR0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtODEsMTAgKzgxLDEzIEBAIHByaXZhdGU6CiAgICAgYm9vbCBwcmVwYXJlR3JhcGhpY3ND
b250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBUZXh0UnVuJiwgUmVuZGVy
U3R5bGUqKTsKICAgICB2b2lkIHJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGlu
ZyhHcmFwaGljc0NvbnRleHQqJiwgVGV4dFJ1biYpOwogCisgICAgdm9pZCBjb21wdXRlVGV4dE1h
dGNoTWFya2VyUmVjdChSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIEVUZXh0RGVjb3Jh
dGlvbiwgYm9vbCBoYXNTZWxlY3Rpb24pOwogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uV2l0aFN0
eWxlKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIFJlbmRl
clN0eWxlKiwgRVRleHREZWNvcmF0aW9uKTsKICAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIFJlbmRlclN0eWxlKik7
Ci0gICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYg
dGV4dE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGJv
b2wgaGFzU2VsZWN0aW9uKTsKKyAgICB2b2lkIHBhaW50VGV4dChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBz
ZWxlY3Rpb25TdHlsZSwgYm9vbCBoYXNTZWxlY3Rpb24sIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRP
bmx5KTsKKworICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dENodW5rUGFydChjb25z
dCBTVkdUZXh0Q2h1bmtQYXJ0JiwgaW50IHBhcnRTdGFydFBvcywgaW50IHBhcnRFbmRQb3MsIFJl
bmRlclN0eWxlKik7CiAKIHByaXZhdGU6CiAgICAgaW50IG1faGVpZ2h0OwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDYxNzU5KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBh
aW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQogewotICAg
IEFTU0VSVChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpOworICAgIEFT
U0VSVChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pOwogICAgIEFTU0VSVCghcGFpbnRJbmZvLmNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSk7CiAKICAgICBSZW5kZXJPYmplY3QqIGJveFJlbmRl
cmVyID0gcmVuZGVyZXIoKTsK
</data>
<flag name="review"
          id="46818"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>