<?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>91947</bug_id>
          
          <creation_ts>2012-07-22 14:36:08 -0700</creation_ts>
          <short_desc>Rename TextCodecWinCE to TextCodecWin</short_desc>
          <delta_ts>2012-07-23 01:06:31 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</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="Patrick R. Gansterer">paroga</reporter>
          <assigned_to name="Patrick R. Gansterer">paroga</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>675346</commentid>
    <comment_count>0</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-07-22 14:36:08 -0700</bug_when>
    <thetext>Rename TextCodecWinCE to TextCodecWin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675347</commentid>
    <comment_count>1</comment_count>
      <attachid>153704</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-07-22 14:46:15 -0700</bug_when>
    <thetext>Created attachment 153704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675348</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-22 14:50:08 -0700</bug_when>
    <thetext>Attachment 153704 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/text/win/TextCodecWin.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/text/win/TextCodecWin.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/text/win/TextCodecWin.h:61:  The parameter name &quot;receiver&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675349</commentid>
    <comment_count>3</comment_count>
      <attachid>153705</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-07-22 14:52:20 -0700</bug_when>
    <thetext>Created attachment 153705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675350</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-22 14:55:43 -0700</bug_when>
    <thetext>Attachment 153705 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/text/win/TextCodecWin.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/text/win/TextCodecWin.h:61:  The parameter name &quot;receiver&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675351</commentid>
    <comment_count>5</comment_count>
      <attachid>153706</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2012-07-22 14:57:33 -0700</bug_when>
    <thetext>Created attachment 153706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675504</commentid>
    <comment_count>6</comment_count>
      <attachid>153706</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-23 00:54:39 -0700</bug_when>
    <thetext>Comment on attachment 153706
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675514</commentid>
    <comment_count>7</comment_count>
      <attachid>153706</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-23 01:06:27 -0700</bug_when>
    <thetext>Comment on attachment 153706
Patch

Clearing flags on attachment: 153706

Committed r123311: &lt;http://trac.webkit.org/changeset/123311&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675515</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-23 01:06:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153704</attachid>
            <date>2012-07-22 14:46:15 -0700</date>
            <delta_ts>2012-07-22 14:52:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91947.patch</filename>
            <type>text/plain</type>
            <size>29724</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MTU4NThkLi5iMmI0NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTItMDctMjIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmVuYW1lIFRleHRDb2RlY1dpbkNFIHRvIFRleHRDb2RlY1dpbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5NDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSBUZXh0Q29kZWNXaW5D
RSBpcyB1c2VkIGJ5IG90aGVyIChub24tdXBzdHJlYW1lZCkgd2luZG93cyBwb3J0cyB0b28sCisg
ICAgICAgIFRleHRDb2RlY1dpbiBpcyBhIGJldHRlciBuYW1lIGZvciB0aGUgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIEFsc28gcmVtb3ZlIHRoZSBkZXBlbmRlbmN5IG9uIFdpbkNFIEZvbnRDYWNo
ZSB0byBtYWtlIGl0IG1vcmUgdXNhYmxlLgorCisgICAgICAgICogUGxhdGZvcm1XaW5DRS5jbWFr
ZToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRDb2RlY01hcHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaC4KKwogMjAxMi0wNy0yMSAgUGF0cmlj
ayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDbGVhbnVwIFRleHRF
bmNvZGluZyBVU0UoWFhYX1VOSUNPREUpIG1hY3JvcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1XaW5DRS5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ0UuY21h
a2UKaW5kZXggNjZmYTkwMy4uMTAyZTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNFLmNtYWtl
CkBAIC0xLDcgKzEsNiBAQAogTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVT
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbmNlIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvd2luY2Ui
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93aW4iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL25ldHdvcmsvd2luIgpAQCAtMTE0LDggKzExMyw5IEBAIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmUu
Y3BwCiAKKyAgICBwbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCisKICAgICBwbGF0
Zm9ybS90ZXh0L3dpbmNlL1RleHRCcmVha0l0ZXJhdG9yV2luY2UuY3BwCi0gICAgcGxhdGZvcm0v
dGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKICkKIAogTElTVChBUFBFTkQgV2ViQ29yZV9M
SUJSQVJJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggODI4MTUzOC4uYmQ4YjdhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAg
LTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJndGsvVGV4dENvZGVjR3RrLmgiCiAjZW5kaWYKICNp
ZiBVU0UoV0lOQ0VfVU5JQ09ERSkKLSNpbmNsdWRlICJUZXh0Q29kZWNXaW5DRS5oIgorI2luY2x1
ZGUgIndpbi9UZXh0Q29kZWNXaW4uaCIKICNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CkBAIC0zMTIsOCArMzEyLDggQEAgc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFw
cygpCiAjZW5kaWYKIAogI2lmIFVTRShXSU5DRV9VTklDT0RFKQotICAgIFRleHRDb2RlY1dpbkNF
OjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXAp
OwotICAgIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENv
ZGVjTWFwKTsKKyAgICBUZXh0Q29kZWNXaW46OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVz
KGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjV2luOjpyZWdpc3RlckV4
dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgogCiAgICAgcHJ1bmVCbGFj
a2xpc3RlZENvZGVjcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vVGV4dENvZGVjV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2lu
L1RleHRDb2RlY1dpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMx
MDQ4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2lu
L1RleHRDb2RlY1dpbi5jcHAKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDEyIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNv
bT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaSB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRleHRDb2RlY1dpbi5oIgorCisjaW5jbHVkZSAiQ09NUHRyLmgiCisjaW5jbHVk
ZSA8bWxhbmcuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENoYXJzZXRJbmZv
IHsKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9mcmllbmRseU5hbWU7CisgICAg
VUlOVCBtX2NvZGVQYWdlOworICAgIFZlY3RvcjxDU3RyaW5nPiBtX2FsaWFzZXM7Cit9OworCitj
bGFzcyBMYW5ndWFnZU1hbmFnZXIgeworcHJpdmF0ZToKKyAgICBMYW5ndWFnZU1hbmFnZXIoKTsK
KworICAgIGZyaWVuZCBMYW5ndWFnZU1hbmFnZXImIGxhbmd1YWdlTWFuYWdlcigpOworfTsKKwor
Ly8gVXNhZ2U6IGEgbG9va3VwIHRhYmxlIHVzZWQgdG8gZ2V0IENoYXJzZXRJbmZvIHdpdGggY29k
ZSBwYWdlIElELgorLy8gS2V5OiBjb2RlIHBhZ2UgSUQuIFZhbHVlOiBjaGFyc2V0IGluZm9ybWF0
aW9uLgorc3RhdGljIEhhc2hNYXA8VUlOVCwgQ1N0cmluZz4mIGNvZGVQYWdlQ2hhcnNldHMoKQor
eworICAgIHN0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+IGNjOworICAgIHJldHVybiBjYzsK
K30KKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGtub3duQ2hhcnNldHMo
KQoreworICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+IGtjOworICAgIHJl
dHVybiBrYzsKK30KKworLy8gVXNhZ2U6IGEgbWFwIHRoYXQgc3RvcmVzIGNoYXJzZXRzIHRoYXQg
YXJlIHN1cHBvcnRlZCBieSBzeXN0ZW0uIFNvcnRlZCBieSBuYW1lLgorLy8gS2V5OiBjaGFyc2V0
LiBWYWx1ZTogY29kZSBwYWdlIElELgordHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gQ2hhcnNldFNl
dDsKK3N0YXRpYyBDaGFyc2V0U2V0JiBzdXBwb3J0ZWRDaGFyc2V0cygpCit7CisgICAgc3RhdGlj
IENoYXJzZXRTZXQgc2w7CisgICAgcmV0dXJuIHNsOworfQorCitzdGF0aWMgTGFuZ3VhZ2VNYW5h
Z2VyJiBsYW5ndWFnZU1hbmFnZXIoKQoreworICAgIHN0YXRpYyBMYW5ndWFnZU1hbmFnZXIgbG07
CisgICAgcmV0dXJuIGxtOworfQorCitMYW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcigp
Cit7CisgICAgQ09NUHRyPElNdWx0aUxhbmd1YWdlPiBtdWx0aUxhbmd1YWdlOworICAgIGlmIChG
QUlMRUQoOjpDb0NyZWF0ZUluc3RhbmNlKENMU0lEX0NNdWx0aUxhbmd1YWdlLCAwLCBDTFNDVFhf
SU5QUk9DX1NFUlZFUiwgSUlEX0lNdWx0aUxhbmd1YWdlLCByZWludGVycHJldF9jYXN0PExQVk9J
RCo+KCZtdWx0aUxhbmd1YWdlKSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SUVu
dW1Db2RlUGFnZT4gZW51bUludGVyZmFjZTsKKyAgICBpZiAoRkFJTEVEKG11bHRpTGFuZ3VhZ2Ut
PkVudW1Db2RlUGFnZXMoTUlNRUNPTlRGX0JST1dTRVIsICZlbnVtSW50ZXJmYWNlKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE1JTUVDUElORk8gY3BJbmZvOworICAgIFVMT05HIGNjcEluZm87
CisgICAgd2hpbGUgKFNVQ0NFRURFRChlbnVtSW50ZXJmYWNlLT5OZXh0KDEsICZjcEluZm8sICZj
Y3BJbmZvKSkgJiYgY2NwSW5mbykgeworICAgICAgICBpZiAoIUlzVmFsaWRDb2RlUGFnZShjcElu
Zm8udWlDb2RlUGFnZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBIYXNoTWFw
PFVJTlQsIENTdHJpbmc+OjppdGVyYXRvciBpID0gY29kZVBhZ2VDaGFyc2V0cygpLmZpbmQoY3BJ
bmZvLnVpQ29kZVBhZ2UpOworCisgICAgICAgIENTdHJpbmcgbmFtZShTdHJpbmcoY3BJbmZvLndz
eldlYkNoYXJzZXQpLmxhdGluMSgpKTsKKyAgICAgICAgaWYgKGkgPT0gY29kZVBhZ2VDaGFyc2V0
cygpLmVuZCgpKSB7CisgICAgICAgICAgICBDaGFyc2V0SW5mbyBpbmZvOworICAgICAgICAgICAg
aW5mby5tX2NvZGVQYWdlID0gY3BJbmZvLnVpQ29kZVBhZ2U7CisgICAgICAgICAgICBrbm93bkNo
YXJzZXRzKCkuc2V0KG5hbWUuZGF0YSgpLCBpbmZvKTsKKyAgICAgICAgICAgIGkgPSBjb2RlUGFn
ZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKKyAgICAg
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNo
YXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgp
KSk7CisgICAgICAgICAgICBBU1NFUlQoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpOworICAg
ICAgICAgICAgQ2hhcnNldEluZm8mIGluZm8gPSBqLT5zZWNvbmQ7CisgICAgICAgICAgICBpbmZv
Lm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7CisgICAgICAgICAgICBpbmZvLm1fZnJpZW5kbHlO
YW1lID0gY3BJbmZvLndzekRlc2NyaXB0aW9uOworICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMu
YXBwZW5kKG5hbWUpOworICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhj
cEluZm8ud3N6SGVhZGVyQ2hhcnNldCkubGF0aW4xKCkpOworICAgICAgICAgICAgaW5mby5tX2Fs
aWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6Qm9keUNoYXJzZXQpLmxhdGluMSgpKTsKKyAg
ICAgICAgICAgIFN0cmluZyBjcE5hbWUgPSAiY3AiICsgU3RyaW5nOjpudW1iZXIoY3BJbmZvLnVp
Q29kZVBhZ2UpOworICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRp
bjEoKSk7CisgICAgICAgICAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChpLT5zZWNvbmQuZGF0
YSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIFVJTlQgZ2V0Q29kZVBhZ2UoY29u
c3QgY2hhciogbmFtZSkKK3sKKyAgICAvLyBFeHBsaWNpdGx5IHVzZSBhICJjb25zdCIgcmVmZXJl
bmNlIHRvIGZpeCB0aGUgc2lsbHkgVlMgYnVpbGQgZXJyb3IKKyAgICAvLyBzYXlpbmcgIj09IiBp
cyBub3QgZm91bmQgZm9yIGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgorICAgIGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFy
c2V0cy5maW5kKG5hbWUpOworICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQ
IDogaS0+c2Vjb25kLm1fY29kZVBhZ2U7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFRleHRDb2Rl
Yz4gbmV3VGV4dENvZGVjV2luKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZv
aWQqKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dENvZGVjV2luKGdldENvZGVQYWdl
KGVuY29kaW5nLm5hbWUoKSkpKTsKK30KKworVGV4dENvZGVjV2luOjpUZXh0Q29kZWNXaW4oVUlO
VCBjb2RlUGFnZSkKKyAgICA6IG1fY29kZVBhZ2UoY29kZVBhZ2UpCit7Cit9CisKK1RleHRDb2Rl
Y1dpbjo6flRleHRDb2RlY1dpbigpCit7Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luOjpyZWdpc3Rl
ckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQor
eworICAgIGxhbmd1YWdlTWFuYWdlcigpOworICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3Ig
aSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygp
LmVuZCgpOyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRl
cmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKKyAgICAgICAgaWYgKGogIT0ga25v
d25DaGFyc2V0cygpLmVuZCgpKSB7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1f
bmFtZS5kYXRhKCksIGotPnNlY29uZC5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAo
VmVjdG9yPENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhbGlhcyA9IGotPnNlY29uZC5tX2FsaWFz
ZXMuYmVnaW4oKTsgYWxpYXMgIT0gai0+c2Vjb25kLm1fYWxpYXNlcy5lbmQoKTsgKythbGlhcykK
KyAgICAgICAgICAgICAgICByZWdpc3RyYXIoYWxpYXMtPmRhdGEoKSwgai0+c2Vjb25kLm1fbmFt
ZS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY1dpbjo6cmVn
aXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAg
IGxhbmd1YWdlTWFuYWdlcigpOworICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1
cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgp
OyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3Ig
aiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFy
c2V0cygpLmVuZCgpKQorICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0
YSgpLCBuZXdUZXh0Q29kZWNXaW4sIDApOworICAgIH0KK30KKworc3RhdGljIERXT1JEIGdldENv
ZGVQYWdlRmxhZ3MoVUlOVCBjb2RlUGFnZSkKK3sKKyAgICBpZiAoY29kZVBhZ2UgPT0gNDIpIC8v
IFN5bWJvbAorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIE1pY3Jvc29mdCBzYXlzIHRoZSBm
bGFnIG11c3QgYmUgMCBmb3IgdGhlIGZvbGxvd2luZyBjb2RlIHBhZ2VzCisgICAgaWYgKGNvZGVQ
YWdlID4gNTAwMDApIHsKKyAgICAgICAgaWYgKChjb2RlUGFnZSA+PSA1MDIyMCAmJiBjb2RlUGFn
ZSA8PSA1MDIyMikKKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUwMjI1CisgICAgICAgICAg
ICB8fCBjb2RlUGFnZSA9PSA1MDIyNworICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNTAyMjkK
KyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUyOTM2CisgICAgICAgICAgICB8fCBjb2RlUGFn
ZSA9PSA1NDkzNgorICAgICAgICAgICAgfHwgKGNvZGVQYWdlID49IDU3MDAyICYmIGNvZGVQYWdl
IDw9IDU3MDAxKQorICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNjUwMDAgLy8gVVRGLTcKKyAg
ICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBN
Ql9QUkVDT01QT1NFRCB8IE1CX0VSUl9JTlZBTElEX0NIQVJTOworfQorCitzdGF0aWMgaW5saW5l
IGNvbnN0IGNoYXIqIGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNvbnN0IGNoYXIqIGJ5dGVz
LCBzaXplX3QgbGVuZ3RoKQoreworICAgIGZvciAoY29uc3QgY2hhciogYnl0ZXNFbmQgPSBieXRl
cyArIGxlbmd0aDsgYnl0ZXMgPCBieXRlc0VuZDsgKytieXRlcykgeworICAgICAgICBpZiAoKmJ5
dGVzICYgMHg4MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gYnl0ZXM7
Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZUludGVybmFsKFZlY3RvcjxVQ2hhciwgODE5Mj4mIHJl
c3VsdCwgVUlOVCBjb2RlUGFnZSwgY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNp
emVfdCogbGVmdCkKK3sKKyAgICAqbGVmdCA9IGxlbmd0aDsKKyAgICBpZiAoIWJ5dGVzIHx8ICFs
ZW5ndGgpCisgICAgICAgIHJldHVybjsKKworICAgIERXT1JEIGZsYWdzID0gZ2V0Q29kZVBhZ2VG
bGFncyhjb2RlUGFnZSk7CisKKyAgICBpbnQgdGVzdExlbmd0aCA9IGxlbmd0aDsKKyAgICBpbnQg
dW50ZXN0ZWRMZW5ndGggPSBsZW5ndGg7CisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgcmVz
dWx0TGVuZ3RoID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0
ZXN0TGVuZ3RoLCAwLCAwKTsKKworICAgICAgICBpZiAocmVzdWx0TGVuZ3RoID4gMCkgeworICAg
ICAgICAgICAgaW50IG9sZFNpemUgPSByZXN1bHQuc2l6ZSgpOworICAgICAgICAgICAgcmVzdWx0
LnJlc2l6ZShvbGRTaXplICsgcmVzdWx0TGVuZ3RoKTsKKworICAgICAgICAgICAgTXVsdGlCeXRl
VG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0ZXN0TGVuZ3RoLCByZXN1bHQuZGF0
YSgpICsgb2xkU2l6ZSwgcmVzdWx0TGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKHRlc3RMZW5n
dGggPT0gdW50ZXN0ZWRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqbGVmdCA9IGxlbmd0aCAt
IHRlc3RMZW5ndGg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB1bnRlc3RlZExlbmd0aCAtPSB0ZXN0TGVuZ3RoOworICAgICAgICAgICAgbGVuZ3Ro
IC09IHRlc3RMZW5ndGg7CisgICAgICAgICAgICBieXRlcyArPSB0ZXN0TGVuZ3RoOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdW50ZXN0ZWRMZW5ndGggPSB0ZXN0TGVuZ3RoIC0gMTsK
KyAgICAgICAgICAgIGlmICghdW50ZXN0ZWRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqbGVm
dCA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB0ZXN0TGVuZ3RoID0gKHVudGVzdGVkTGVuZ3RoICsgMSkgLyAyOworICAg
IH0KK30KKworU3RyaW5nIFRleHRDb2RlY1dpbjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBz
aXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJv
cikKK3sKKyAgICBpZiAoIW1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSkgeworICAgICAgICBtX2Rl
Y29kZUJ1ZmZlci5hcHBlbmQoYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgIGJ5dGVzID0gbV9kZWNv
ZGVCdWZmZXIuZGF0YSgpOworICAgICAgICBsZW5ndGggPSBtX2RlY29kZUJ1ZmZlci5zaXplKCk7
CisgICAgfQorCisgICAgc2l6ZV90IGxlZnQ7CisgICAgVmVjdG9yPFVDaGFyLCA4MTkyPiByZXN1
bHQ7CisgICAgZm9yICg7OykgeworICAgICAgICBkZWNvZGVJbnRlcm5hbChyZXN1bHQsIG1fY29k
ZVBhZ2UsIGJ5dGVzLCBsZW5ndGgsICZsZWZ0KTsKKyAgICAgICAgaWYgKCFsZWZ0KQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCFmbHVzaCAmJiBsZWZ0IDwgMTYpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICByZXN1bHQuYXBwZW5kKEwnPycpOworICAgICAgICBzYXdF
cnJvciA9IHRydWU7CisgICAgICAgIGlmIChzdG9wT25FcnJvcikKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGxlZnQgPT0gMSkKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGJ5dGVzICs9IGxlbmd0aCAtIGxlZnQgKyAxOworICAg
ICAgICBsZW5ndGggPSBsZWZ0IC0gMTsKKyAgICB9CisgICAgaWYgKGxlZnQgJiYgIWZsdXNoKSB7
CisgICAgICAgIGlmIChtX2RlY29kZUJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2Rl
Y29kZUJ1ZmZlci5hcHBlbmQoYnl0ZXMgKyBsZW5ndGggLSBsZWZ0LCBsZWZ0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtZW1tb3ZlKG1fZGVjb2RlQnVmZmVyLmRhdGEoKSwgYnl0ZXMg
KyBsZW5ndGggLSBsZWZ0LCBsZWZ0KTsKKyAgICAgICAgICAgIG1fZGVjb2RlQnVmZmVyLnJlc2l6
ZShsZWZ0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBtX2RlY29kZUJ1ZmZlci5j
bGVhcigpOworCisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKK30KKworQ1N0cmlu
ZyBUZXh0Q29kZWNXaW46OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykKK3sKKyAgICBpZiAoIWNoYXJhY3RlcnMgfHwgIWxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKworICAgIGludCByZXN1bHRMZW5ndGgg
PSBXaWRlQ2hhclRvTXVsdGlCeXRlKG1fY29kZVBhZ2UsIFdDX0NPTVBPU0lURUNIRUNLLCBjaGFy
YWN0ZXJzLCBsZW5ndGgsIDAsIDAsIDAsIDApOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
aW1wbGVtZW50IFVuZW5jb2RhYmxlSGFuZGxpbmc6IFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJs
ZXMsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLCBhbmQgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzLgorCisgICAgaWYgKHJlc3VsdExlbmd0aCA8PSAwKQorICAgICAgICByZXR1cm4g
Ij8iOworCisgICAgY2hhciogY2hhcmFjdGVyQnVmZmVyOworICAgIENTdHJpbmcgcmVzdWx0ID0g
Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChyZXN1bHRMZW5ndGgsIGNoYXJhY3RlckJ1ZmZlcik7
CisKKyAgICBXaWRlQ2hhclRvTXVsdGlCeXRlKG1fY29kZVBhZ2UsIFdDX0NPTVBPU0lURUNIRUNL
LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGNoYXJhY3RlckJ1ZmZlciwgcmVzdWx0TGVuZ3RoLCAwLCAw
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luOjplbnVtZXJh
dGVTdXBwb3J0ZWRFbmNvZGluZ3MoRW5jb2RpbmdSZWNlaXZlciYgcmVjZWl2ZXIpCit7CisgICAg
bGFuZ3VhZ2VNYW5hZ2VyKCk7CisgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3Vw
cG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7
ICsraSkgeworICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBq
ID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOworICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJz
ZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCks
IGotPnNlY29uZC5tX2ZyaWVuZGx5TmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LCBqLT5zZWNvbmQubV9jb2RlUGFnZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vVGV4dENvZGVjV2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjNhOTU4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
d2luL1RleHRDb2RlY1dpbi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDEwLTIwMTIgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgVGV4dENvZGVjV2luX2gKKyNkZWZpbmUgVGV4dENvZGVjV2luX2gKKworI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHdpbmRv
d3MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0Q29kZWNXaW4gOiBwdWJs
aWMgVGV4dENvZGVjIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVk
RW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgIFRleHRDb2Rl
Y1dpbihVSU5UIGNvZGVQYWdlKTsKKyAgICB2aXJ0dWFsIH5UZXh0Q29kZWNXaW4oKTsKKworICAg
IHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBm
bHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpOworICAgIHZpcnR1YWwgQ1N0
cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRs
aW5nKTsKKworICAgIHN0cnVjdCBFbmNvZGluZ0luZm8geworICAgICAgICBTdHJpbmcgbV9lbmNv
ZGluZzsKKyAgICAgICAgU3RyaW5nIG1fZnJpZW5kbHlOYW1lOworICAgIH07CisKKyAgICBzdHJ1
Y3QgRW5jb2RpbmdSZWNlaXZlciB7CisgICAgICAgIC8vIFJldHVybiBmYWxzZSB0byBzdG9wIGVu
dW1lcmF0aW5nLgorICAgICAgICB2aXJ0dWFsIGJvb2wgcmVjZWl2ZShjb25zdCBjaGFyKiBlbmNv
ZGluZywgY29uc3Qgd2NoYXJfdCogZnJpZW5kbHlOYW1lLCB1bnNpZ25lZCBpbnQgY29kZVBhZ2Up
ID0gMDsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgZW51bWVyYXRlU3VwcG9ydGVkRW5jb2Rp
bmdzKEVuY29kaW5nUmVjZWl2ZXImIHJlY2VpdmVyKTsKKworcHJpdmF0ZToKKyAgICBVSU5UIG1f
Y29kZVBhZ2U7CisgICAgVmVjdG9yPGNoYXI+IG1fZGVjb2RlQnVmZmVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGV4dENvZGVjV2luX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNGVjNTAuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMTEgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4
dENvZGVjV2luQ0UuaCIKLQotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgPG1sYW5n
Lmg+Ci0jaW5jbHVkZSA8d2luYmFzZS5oPgotI2luY2x1ZGUgPHdpbm5scy5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVj
dCBDaGFyc2V0SW5mbyB7Ci0gICAgQ1N0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fZnJpZW5k
bHlOYW1lOwotICAgIFVJTlQgbV9jb2RlUGFnZTsKLSAgICBWZWN0b3I8Q1N0cmluZz4gbV9hbGlh
c2VzOwotfTsKLQotY2xhc3MgTGFuZ3VhZ2VNYW5hZ2VyIHsKLXByaXZhdGU6Ci0gICAgTGFuZ3Vh
Z2VNYW5hZ2VyKCk7Ci0KLSAgICBmcmllbmQgTGFuZ3VhZ2VNYW5hZ2VyJiBsYW5ndWFnZU1hbmFn
ZXIoKTsKLX07Ci0KLS8vIFVzYWdlOiBhIGxvb2t1cCB0YWJsZSB1c2VkIHRvIGdldCBDaGFyc2V0
SW5mbyB3aXRoIGNvZGUgcGFnZSBJRC4KLS8vIEtleTogY29kZSBwYWdlIElELiBWYWx1ZTogY2hh
cnNldCBpbmZvcm1hdGlvbi4KLXN0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+JiBjb2RlUGFn
ZUNoYXJzZXRzKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxVSU5ULCBDU3RyaW5nPiBjYzsKLSAg
ICByZXR1cm4gY2M7Ci19Ci0KLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+JiBr
bm93bkNoYXJzZXRzKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZv
PiBrYzsKLSAgICByZXR1cm4ga2M7Ci19Ci0KLS8vIFVzYWdlOiBhIG1hcCB0aGF0IHN0b3JlcyBj
aGFyc2V0cyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgc3lzdGVtLiBTb3J0ZWQgYnkgbmFtZS4KLS8v
IEtleTogY2hhcnNldC4gVmFsdWU6IGNvZGUgcGFnZSBJRC4KLXR5cGVkZWYgSGFzaFNldDxTdHJp
bmc+IENoYXJzZXRTZXQ7Ci1zdGF0aWMgQ2hhcnNldFNldCYgc3VwcG9ydGVkQ2hhcnNldHMoKQot
ewotICAgIHN0YXRpYyBDaGFyc2V0U2V0IHNsOwotICAgIHJldHVybiBzbDsKLX0KLQotc3RhdGlj
IExhbmd1YWdlTWFuYWdlciYgbGFuZ3VhZ2VNYW5hZ2VyKCkKLXsKLSAgICBzdGF0aWMgTGFuZ3Vh
Z2VNYW5hZ2VyIGxtOwotICAgIHJldHVybiBsbTsKLX0KLQotTGFuZ3VhZ2VNYW5hZ2VyOjpMYW5n
dWFnZU1hbmFnZXIoKQotewotICAgIElFbnVtQ29kZVBhZ2UqIGVudW1JbnRlcmZhY2U7Ci0gICAg
SU11bHRpTGFuZ3VhZ2UqIG1saSA9IEZvbnRDYWNoZTo6Z2V0TXVsdGlMYW5ndWFnZUludGVyZmFj
ZSgpOwotICAgIGlmIChtbGkgJiYgU19PSyA9PSBtbGktPkVudW1Db2RlUGFnZXMoTUlNRUNPTlRG
X0JST1dTRVIsICZlbnVtSW50ZXJmYWNlKSkgewotICAgICAgICBNSU1FQ1BJTkZPIGNwSW5mbzsK
LSAgICAgICAgVUxPTkcgY2NwSW5mbzsKLSAgICAgICAgd2hpbGUgKFNfT0sgPT0gZW51bUludGVy
ZmFjZS0+TmV4dCgxLCAmY3BJbmZvLCAmY2NwSW5mbykgJiYgY2NwSW5mbykgewotICAgICAgICAg
ICAgaWYgKCFJc1ZhbGlkQ29kZVBhZ2UoY3BJbmZvLnVpQ29kZVBhZ2UpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBIYXNoTWFwPFVJTlQsIENTdHJpbmc+OjppdGVy
YXRvciBpID0gY29kZVBhZ2VDaGFyc2V0cygpLmZpbmQoY3BJbmZvLnVpQ29kZVBhZ2UpOwotCi0g
ICAgICAgICAgICBDU3RyaW5nIG5hbWUoU3RyaW5nKGNwSW5mby53c3pXZWJDaGFyc2V0KS5sYXRp
bjEoKSk7Ci0gICAgICAgICAgICBpZiAoaSA9PSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsK
LSAgICAgICAgICAgICAgICBDaGFyc2V0SW5mbyBpbmZvOwotICAgICAgICAgICAgICAgIGluZm8u
bV9jb2RlUGFnZSA9IGNwSW5mby51aUNvZGVQYWdlOwotICAgICAgICAgICAgICAgIGtub3duQ2hh
cnNldHMoKS5zZXQobmFtZS5kYXRhKCksIGluZm8pOwotICAgICAgICAgICAgICAgIGkgPSBjb2Rl
UGFnZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpICE9IGNvZGVQYWdlQ2hhcnNldHMoKS5lbmQo
KSkgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJh
dG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+
c2Vjb25kLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGogIT0ga25vd25DaGFy
c2V0cygpLmVuZCgpKTsKLSAgICAgICAgICAgICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnNl
Y29uZDsKLSAgICAgICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pEZXNjcmlwdGlv
bjsKLSAgICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7Ci0gICAgICAg
ICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVhZGVyQ2hh
cnNldCkubGF0aW4xKCkpOwotICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChT
dHJpbmcoY3BJbmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIGNwTmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7
Ci0gICAgICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7
Ci0gICAgICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEo
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZW51bUludGVyZmFjZS0+UmVs
ZWFzZSgpOwotICAgIH0KLX0KLQotc3RhdGljIFVJTlQgZ2V0Q29kZVBhZ2UoY29uc3QgY2hhciog
bmFtZSkKLXsKLSAgICAvLyBFeHBsaWNpdGx5IHVzZSBhICJjb25zdCIgcmVmZXJlbmNlIHRvIGZp
eCB0aGUgc2lsbHkgVlMgYnVpbGQgZXJyb3IKLSAgICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91
bmQgZm9yIGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgotICAgIGNvbnN0IEhhc2hNYXA8U3Ry
aW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5k
KG5hbWUpOwotICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vj
b25kLm1fY29kZVBhZ2U7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4
dENvZGVjV2luQ0UoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCi17
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0Q29kZWNXaW5DRShnZXRDb2RlUGFnZShlbmNv
ZGluZy5uYW1lKCkpKSk7Ci19Ci0KLVRleHRDb2RlY1dpbkNFOjpUZXh0Q29kZWNXaW5DRShVSU5U
IGNvZGVQYWdlKQotICAgIDogbV9jb2RlUGFnZShjb2RlUGFnZSkKLXsKLX0KLQotVGV4dENvZGVj
V2luQ0U6On5UZXh0Q29kZWNXaW5DRSgpCi17Ci19Ci0KLXZvaWQgVGV4dENvZGVjV2luQ0U6OnJl
Z2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3Ry
YXIpCi17Ci0gICAgbGFuZ3VhZ2VNYW5hZ2VyKCk7Ci0gICAgZm9yIChDaGFyc2V0U2V0OjppdGVy
YXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJz
ZXRzKCkuZW5kKCk7ICsraSkgewotICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+
OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwotICAgICAgICBpZiAoaiAh
PSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNv
bmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAgICAgICAg
Zm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1f
YWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2Fs
aWFzKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQu
bV9uYW1lLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dENvZGVjV2lu
Q0U6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikK
LXsKLSAgICBsYW5ndWFnZU1hbmFnZXIoKTsKLSAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9y
IGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMo
KS5lbmQoKTsgKytpKSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0
ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7Ci0gICAgICAgIGlmIChqICE9IGtu
b3duQ2hhcnNldHMoKS5lbmQoKSkKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9u
YW1lLmRhdGEoKSwgbmV3VGV4dENvZGVjV2luQ0UsIDApOwotICAgIH0KLX0KLQotc3RhdGljIERX
T1JEIGdldENvZGVQYWdlRmxhZ3MoVUlOVCBjb2RlUGFnZSkKLXsKLSAgICBpZiAoY29kZVBhZ2Ug
PT0gNDIpIC8vIFN5bWJvbAotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIE1pY3Jvc29mdCBz
YXlzIHRoZSBmbGFnIG11c3QgYmUgMCBmb3IgdGhlIGZvbGxvd2luZyBjb2RlIHBhZ2VzCi0gICAg
aWYgKGNvZGVQYWdlID4gNTAwMDApIHsKLSAgICAgICAgaWYgKChjb2RlUGFnZSA+PSA1MDIyMCAm
JiBjb2RlUGFnZSA8PSA1MDIyMikKLSAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUwMjI1Ci0g
ICAgICAgICAgICB8fCBjb2RlUGFnZSA9PSA1MDIyNwotICAgICAgICAgICAgfHwgY29kZVBhZ2Ug
PT0gNTAyMjkKLSAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUyOTM2Ci0gICAgICAgICAgICB8
fCBjb2RlUGFnZSA9PSA1NDkzNgotICAgICAgICAgICAgfHwgKGNvZGVQYWdlID49IDU3MDAyICYm
IGNvZGVQYWdlIDw9IDU3MDAxKQotICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNjUwMDAgLy8g
VVRGLTcKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IHJldHVybiBNQl9QUkVDT01QT1NFRCB8IE1CX0VSUl9JTlZBTElEX0NIQVJTOwotfQotCi1zdGF0
aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNvbnN0IGNo
YXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKQotewotICAgIGZvciAoY29uc3QgY2hhciogYnl0ZXNF
bmQgPSBieXRlcyArIGxlbmd0aDsgYnl0ZXMgPCBieXRlc0VuZDsgKytieXRlcykgewotICAgICAg
ICBpZiAoKmJ5dGVzICYgMHg4MCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1
cm4gYnl0ZXM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlY29kZUludGVybmFsKFZlY3RvcjxVQ2hhciwg
ODE5Mj4mIHJlc3VsdCwgVUlOVCBjb2RlUGFnZSwgY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBs
ZW5ndGgsIHNpemVfdCogbGVmdCkKLXsKLSAgICAqbGVmdCA9IGxlbmd0aDsKLSAgICBpZiAoIWJ5
dGVzIHx8ICFsZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIERXT1JEIGZsYWdzID0gZ2V0
Q29kZVBhZ2VGbGFncyhjb2RlUGFnZSk7Ci0KLSAgICBpbnQgdGVzdExlbmd0aCA9IGxlbmd0aDsK
LSAgICBpbnQgdW50ZXN0ZWRMZW5ndGggPSBsZW5ndGg7Ci0gICAgZm9yICg7OykgewotICAgICAg
ICBpbnQgcmVzdWx0TGVuZ3RoID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3Ms
IGJ5dGVzLCB0ZXN0TGVuZ3RoLCAwLCAwKTsKLQotICAgICAgICBpZiAocmVzdWx0TGVuZ3RoID4g
MCkgewotICAgICAgICAgICAgaW50IG9sZFNpemUgPSByZXN1bHQuc2l6ZSgpOwotICAgICAgICAg
ICAgcmVzdWx0LnJlc2l6ZShvbGRTaXplICsgcmVzdWx0TGVuZ3RoKTsKLQotICAgICAgICAgICAg
TXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0ZXN0TGVuZ3RoLCBy
ZXN1bHQuZGF0YSgpICsgb2xkU2l6ZSwgcmVzdWx0TGVuZ3RoKTsKLQotICAgICAgICAgICAgaWYg
KHRlc3RMZW5ndGggPT0gdW50ZXN0ZWRMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAqbGVmdCA9
IGxlbmd0aCAtIHRlc3RMZW5ndGg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB1bnRlc3RlZExlbmd0aCAtPSB0ZXN0TGVuZ3RoOwotICAgICAgICAg
ICAgbGVuZ3RoIC09IHRlc3RMZW5ndGg7Ci0gICAgICAgICAgICBieXRlcyArPSB0ZXN0TGVuZ3Ro
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdW50ZXN0ZWRMZW5ndGggPSB0ZXN0TGVu
Z3RoIC0gMTsKLSAgICAgICAgICAgIGlmICghdW50ZXN0ZWRMZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICAqbGVmdCA9IGxlbmd0aDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICB0ZXN0TGVuZ3RoID0gKHVudGVzdGVkTGVuZ3RoICsgMSkg
LyAyOwotICAgIH0KLX0KLQotU3RyaW5nIFRleHRDb2RlY1dpbkNFOjpkZWNvZGUoY29uc3QgY2hh
ciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJv
b2wmIHNhd0Vycm9yKQotewotICAgIGlmICghbV9kZWNvZGVCdWZmZXIuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG1fZGVjb2RlQnVmZmVyLmFwcGVuZChieXRlcywgbGVuZ3RoKTsKLSAgICAgICAgYnl0
ZXMgPSBtX2RlY29kZUJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fZGVjb2RlQnVm
ZmVyLnNpemUoKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbGVmdDsKLSAgICBWZWN0b3I8VUNoYXIs
IDgxOTI+IHJlc3VsdDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGRlY29kZUludGVybmFsKHJl
c3VsdCwgbV9jb2RlUGFnZSwgYnl0ZXMsIGxlbmd0aCwgJmxlZnQpOwotICAgICAgICBpZiAoIWxl
ZnQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoIWZsdXNoICYmIGxlZnQgPCAx
NikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoTCc/Jyk7Ci0g
ICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKLSAgICAgICAgaWYgKHN0b3BPbkVycm9yKQotICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKLQotICAgICAgICBpZiAobGVmdCA9
PSAxKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYnl0ZXMgKz0gbGVuZ3RoIC0gbGVm
dCArIDE7Ci0gICAgICAgIGxlbmd0aCA9IGxlZnQgLSAxOwotICAgIH0KLSAgICBpZiAobGVmdCAm
JiAhZmx1c2gpIHsKLSAgICAgICAgaWYgKG1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIG1fZGVjb2RlQnVmZmVyLmFwcGVuZChieXRlcyArIGxlbmd0aCAtIGxlZnQsIGxlZnQp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1lbW1vdmUobV9kZWNvZGVCdWZmZXIuZGF0
YSgpLCBieXRlcyArIGxlbmd0aCAtIGxlZnQsIGxlZnQpOwotICAgICAgICAgICAgbV9kZWNvZGVC
dWZmZXIucmVzaXplKGxlZnQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fZGVj
b2RlQnVmZmVyLmNsZWFyKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwot
fQotCi1DU3RyaW5nIFRleHRDb2RlY1dpbkNFOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCi17Ci0gICAgaWYgKCFjaGFy
YWN0ZXJzIHx8ICFsZW5ndGgpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7Ci0KLSAgICBpbnQg
cmVzdWx0TGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZShtX2NvZGVQYWdlLCBXQ19DT01QT1NJ
VEVDSEVDSywgY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCAwLCAwKTsKLQotICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIGltcGxlbWVudCBVbmVuY29kYWJsZUhhbmRsaW5nOiBRdWVzdGlvbk1hcmtz
Rm9yVW5lbmNvZGFibGVzLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcywgYW5kIFVSTEVuY29kZWRF
bnRpdGllc0ZvclVuZW5jb2RhYmxlcy4KLQotICAgIGlmIChyZXN1bHRMZW5ndGggPD0gMCkKLSAg
ICAgICAgcmV0dXJuICI/IjsKLQotICAgIGNoYXIqIGNoYXJhY3RlckJ1ZmZlcjsKLSAgICBDU3Ry
aW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQocmVzdWx0TGVuZ3RoLCBjaGFy
YWN0ZXJCdWZmZXIpOwotCi0gICAgV2lkZUNoYXJUb011bHRpQnl0ZShtX2NvZGVQYWdlLCBXQ19D
T01QT1NJVEVDSEVDSywgY2hhcmFjdGVycywgbGVuZ3RoLCBjaGFyYWN0ZXJCdWZmZXIsIHJlc3Vs
dExlbmd0aCwgMCwgMCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFRleHRDb2Rl
Y1dpbkNFOjplbnVtZXJhdGVTdXBwb3J0ZWRFbmNvZGluZ3MoRW5jb2RpbmdSZWNlaXZlciYgcmVj
ZWl2ZXIpCi17Ci0gICAgbGFuZ3VhZ2VNYW5hZ2VyKCk7Ci0gICAgZm9yIChDaGFyc2V0U2V0Ojpp
dGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENo
YXJzZXRzKCkuZW5kKCk7ICsraSkgewotICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldElu
Zm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwotICAgICAgICBpZiAo
aiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+c2Vjb25k
Lm1fbmFtZS5kYXRhKCksIGotPnNlY29uZC5tX2ZyaWVuZGx5TmFtZS5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLCBqLT5zZWNvbmQubV9jb2RlUGFnZSkpCi0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTAwYThjZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJv
c2t1cnlha292IDxhcEBueXBvcC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3Jj
aCBNb2JpbGUsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8
cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVGV4dENvZGVjV2luQ0VfaAotI2Rl
ZmluZSBUZXh0Q29kZWNXaW5DRV9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2lu
Y2x1ZGUgIlRleHRDb2RlYy5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgVGV4dENvZGVjV2luQ0UgOiBwdWJsaWMgVGV4dENvZGVjIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05h
bWVSZWdpc3RyYXIpOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyKTsKLQotICAgIFRleHRDb2RlY1dpbkNFKFVJTlQgY29kZVBhZ2UpOwot
ICAgIHZpcnR1YWwgflRleHRDb2RlY1dpbkNFKCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBkZWNv
ZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKTsKLSAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVD
aGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7Ci0KLSAgICBzdHJ1Y3Qg
RW5jb2RpbmdJbmZvIHsKLSAgICAgICAgU3RyaW5nIG1fZW5jb2Rpbmc7Ci0gICAgICAgIFN0cmlu
ZyBtX2ZyaWVuZGx5TmFtZTsKLSAgICB9OwotCi0gICAgc3RydWN0IEVuY29kaW5nUmVjZWl2ZXIg
ewotICAgICAgICAvLyBSZXR1cm4gZmFsc2UgdG8gc3RvcCBlbnVtZXJhdGluZy4KLSAgICAgICAg
dmlydHVhbCBib29sIHJlY2VpdmUoY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IHdjaGFyX3Qq
IGZyaWVuZGx5TmFtZSwgdW5zaWduZWQgaW50IGNvZGVQYWdlKSA9IDA7Ci0gICAgfTsKLQotICAg
IHN0YXRpYyB2b2lkIGVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGluZ1JlY2VpdmVy
JiByZWNlaXZlcik7Ci0KLXByaXZhdGU6Ci0gICAgVUlOVCBtX2NvZGVQYWdlOwotICAgIFZlY3Rv
cjxjaGFyPiBtX2RlY29kZUJ1ZmZlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFRleHRDb2RlY1dpbkNFX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153705</attachid>
            <date>2012-07-22 14:52:20 -0700</date>
            <delta_ts>2012-07-22 14:57:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91947.patch</filename>
            <type>text/plain</type>
            <size>29724</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MTU4NThkLi5iMmI0NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTItMDctMjIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmVuYW1lIFRleHRDb2RlY1dpbkNFIHRvIFRleHRDb2RlY1dpbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5NDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSBUZXh0Q29kZWNXaW5D
RSBpcyB1c2VkIGJ5IG90aGVyIChub24tdXBzdHJlYW1lZCkgd2luZG93cyBwb3J0cyB0b28sCisg
ICAgICAgIFRleHRDb2RlY1dpbiBpcyBhIGJldHRlciBuYW1lIGZvciB0aGUgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIEFsc28gcmVtb3ZlIHRoZSBkZXBlbmRlbmN5IG9uIFdpbkNFIEZvbnRDYWNo
ZSB0byBtYWtlIGl0IG1vcmUgdXNhYmxlLgorCisgICAgICAgICogUGxhdGZvcm1XaW5DRS5jbWFr
ZToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRDb2RlY01hcHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaC4KKwogMjAxMi0wNy0yMSAgUGF0cmlj
ayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDbGVhbnVwIFRleHRF
bmNvZGluZyBVU0UoWFhYX1VOSUNPREUpIG1hY3JvcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1XaW5DRS5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ0UuY21h
a2UKaW5kZXggNjZmYTkwMy4uMTAyZTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNFLmNtYWtl
CkBAIC0xLDcgKzEsNiBAQAogTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVT
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbmNlIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvd2luY2Ui
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93aW4iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL25ldHdvcmsvd2luIgpAQCAtMTE0LDggKzExMyw5IEBAIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmUu
Y3BwCiAKKyAgICBwbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCisKICAgICBwbGF0
Zm9ybS90ZXh0L3dpbmNlL1RleHRCcmVha0l0ZXJhdG9yV2luY2UuY3BwCi0gICAgcGxhdGZvcm0v
dGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKICkKIAogTElTVChBUFBFTkQgV2ViQ29yZV9M
SUJSQVJJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggODI4MTUzOC4uYmQ4YjdhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAg
LTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJndGsvVGV4dENvZGVjR3RrLmgiCiAjZW5kaWYKICNp
ZiBVU0UoV0lOQ0VfVU5JQ09ERSkKLSNpbmNsdWRlICJUZXh0Q29kZWNXaW5DRS5oIgorI2luY2x1
ZGUgIndpbi9UZXh0Q29kZWNXaW4uaCIKICNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CkBAIC0zMTIsOCArMzEyLDggQEAgc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFw
cygpCiAjZW5kaWYKIAogI2lmIFVTRShXSU5DRV9VTklDT0RFKQotICAgIFRleHRDb2RlY1dpbkNF
OjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXAp
OwotICAgIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENv
ZGVjTWFwKTsKKyAgICBUZXh0Q29kZWNXaW46OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVz
KGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjV2luOjpyZWdpc3RlckV4
dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgogCiAgICAgcHJ1bmVCbGFj
a2xpc3RlZENvZGVjcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vVGV4dENvZGVjV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2lu
L1RleHRDb2RlY1dpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMx
MDQ4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2lu
L1RleHRDb2RlY1dpbi5jcHAKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDEyIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNv
bT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaSB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRleHRDb2RlY1dpbi5oIgorCisjaW5jbHVkZSAiQ09NUHRyLmgiCisjaW5jbHVk
ZSA8bWxhbmcuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENoYXJzZXRJbmZv
IHsKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9mcmllbmRseU5hbWU7CisgICAg
VUlOVCBtX2NvZGVQYWdlOworICAgIFZlY3RvcjxDU3RyaW5nPiBtX2FsaWFzZXM7Cit9OworCitj
bGFzcyBMYW5ndWFnZU1hbmFnZXIgeworcHJpdmF0ZToKKyAgICBMYW5ndWFnZU1hbmFnZXIoKTsK
KworICAgIGZyaWVuZCBMYW5ndWFnZU1hbmFnZXImIGxhbmd1YWdlTWFuYWdlcigpOworfTsKKwor
Ly8gVXNhZ2U6IGEgbG9va3VwIHRhYmxlIHVzZWQgdG8gZ2V0IENoYXJzZXRJbmZvIHdpdGggY29k
ZSBwYWdlIElELgorLy8gS2V5OiBjb2RlIHBhZ2UgSUQuIFZhbHVlOiBjaGFyc2V0IGluZm9ybWF0
aW9uLgorc3RhdGljIEhhc2hNYXA8VUlOVCwgQ1N0cmluZz4mIGNvZGVQYWdlQ2hhcnNldHMoKQor
eworICAgIHN0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+IGNjOworICAgIHJldHVybiBjYzsK
K30KKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGtub3duQ2hhcnNldHMo
KQoreworICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+IGtjOworICAgIHJl
dHVybiBrYzsKK30KKworLy8gVXNhZ2U6IGEgbWFwIHRoYXQgc3RvcmVzIGNoYXJzZXRzIHRoYXQg
YXJlIHN1cHBvcnRlZCBieSBzeXN0ZW0uIFNvcnRlZCBieSBuYW1lLgorLy8gS2V5OiBjaGFyc2V0
LiBWYWx1ZTogY29kZSBwYWdlIElELgordHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gQ2hhcnNldFNl
dDsKK3N0YXRpYyBDaGFyc2V0U2V0JiBzdXBwb3J0ZWRDaGFyc2V0cygpCit7CisgICAgc3RhdGlj
IENoYXJzZXRTZXQgc2w7CisgICAgcmV0dXJuIHNsOworfQorCitzdGF0aWMgTGFuZ3VhZ2VNYW5h
Z2VyJiBsYW5ndWFnZU1hbmFnZXIoKQoreworICAgIHN0YXRpYyBMYW5ndWFnZU1hbmFnZXIgbG07
CisgICAgcmV0dXJuIGxtOworfQorCitMYW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcigp
Cit7CisgICAgQ09NUHRyPElNdWx0aUxhbmd1YWdlPiBtdWx0aUxhbmd1YWdlOworICAgIGlmIChG
QUlMRUQoOjpDb0NyZWF0ZUluc3RhbmNlKENMU0lEX0NNdWx0aUxhbmd1YWdlLCAwLCBDTFNDVFhf
SU5QUk9DX1NFUlZFUiwgSUlEX0lNdWx0aUxhbmd1YWdlLCByZWludGVycHJldF9jYXN0PExQVk9J
RCo+KCZtdWx0aUxhbmd1YWdlKSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SUVu
dW1Db2RlUGFnZT4gZW51bUludGVyZmFjZTsKKyAgICBpZiAoRkFJTEVEKG11bHRpTGFuZ3VhZ2Ut
PkVudW1Db2RlUGFnZXMoTUlNRUNPTlRGX0JST1dTRVIsICZlbnVtSW50ZXJmYWNlKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE1JTUVDUElORk8gY3BJbmZvOworICAgIFVMT05HIGNjcEluZm87
CisgICAgd2hpbGUgKFNVQ0NFRURFRChlbnVtSW50ZXJmYWNlLT5OZXh0KDEsICZjcEluZm8sICZj
Y3BJbmZvKSkgJiYgY2NwSW5mbykgeworICAgICAgICBpZiAoIUlzVmFsaWRDb2RlUGFnZShjcElu
Zm8udWlDb2RlUGFnZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBIYXNoTWFw
PFVJTlQsIENTdHJpbmc+OjppdGVyYXRvciBpID0gY29kZVBhZ2VDaGFyc2V0cygpLmZpbmQoY3BJ
bmZvLnVpQ29kZVBhZ2UpOworCisgICAgICAgIENTdHJpbmcgbmFtZShTdHJpbmcoY3BJbmZvLndz
eldlYkNoYXJzZXQpLmxhdGluMSgpKTsKKyAgICAgICAgaWYgKGkgPT0gY29kZVBhZ2VDaGFyc2V0
cygpLmVuZCgpKSB7CisgICAgICAgICAgICBDaGFyc2V0SW5mbyBpbmZvOworICAgICAgICAgICAg
aW5mby5tX2NvZGVQYWdlID0gY3BJbmZvLnVpQ29kZVBhZ2U7CisgICAgICAgICAgICBrbm93bkNo
YXJzZXRzKCkuc2V0KG5hbWUuZGF0YSgpLCBpbmZvKTsKKyAgICAgICAgICAgIGkgPSBjb2RlUGFn
ZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKKyAgICAg
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNo
YXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgp
KSk7CisgICAgICAgICAgICBBU1NFUlQoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpOworICAg
ICAgICAgICAgQ2hhcnNldEluZm8mIGluZm8gPSBqLT5zZWNvbmQ7CisgICAgICAgICAgICBpbmZv
Lm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7CisgICAgICAgICAgICBpbmZvLm1fZnJpZW5kbHlO
YW1lID0gY3BJbmZvLndzekRlc2NyaXB0aW9uOworICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMu
YXBwZW5kKG5hbWUpOworICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhj
cEluZm8ud3N6SGVhZGVyQ2hhcnNldCkubGF0aW4xKCkpOworICAgICAgICAgICAgaW5mby5tX2Fs
aWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6Qm9keUNoYXJzZXQpLmxhdGluMSgpKTsKKyAg
ICAgICAgICAgIFN0cmluZyBjcE5hbWUgPSAiY3AiICsgU3RyaW5nOjpudW1iZXIoY3BJbmZvLnVp
Q29kZVBhZ2UpOworICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRp
bjEoKSk7CisgICAgICAgICAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChpLT5zZWNvbmQuZGF0
YSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIFVJTlQgZ2V0Q29kZVBhZ2UoY29u
c3QgY2hhciogbmFtZSkKK3sKKyAgICAvLyBFeHBsaWNpdGx5IHVzZSBhICJjb25zdCIgcmVmZXJl
bmNlIHRvIGZpeCB0aGUgc2lsbHkgVlMgYnVpbGQgZXJyb3IKKyAgICAvLyBzYXlpbmcgIj09IiBp
cyBub3QgZm91bmQgZm9yIGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgorICAgIGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFy
c2V0cy5maW5kKG5hbWUpOworICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQ
IDogaS0+c2Vjb25kLm1fY29kZVBhZ2U7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFRleHRDb2Rl
Yz4gbmV3VGV4dENvZGVjV2luKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZv
aWQqKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dENvZGVjV2luKGdldENvZGVQYWdl
KGVuY29kaW5nLm5hbWUoKSkpKTsKK30KKworVGV4dENvZGVjV2luOjpUZXh0Q29kZWNXaW4oVUlO
VCBjb2RlUGFnZSkKKyAgICA6IG1fY29kZVBhZ2UoY29kZVBhZ2UpCit7Cit9CisKK1RleHRDb2Rl
Y1dpbjo6flRleHRDb2RlY1dpbigpCit7Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luOjpyZWdpc3Rl
ckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQor
eworICAgIGxhbmd1YWdlTWFuYWdlcigpOworICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3Ig
aSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygp
LmVuZCgpOyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRl
cmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKKyAgICAgICAgaWYgKGogIT0ga25v
d25DaGFyc2V0cygpLmVuZCgpKSB7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1f
bmFtZS5kYXRhKCksIGotPnNlY29uZC5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAo
VmVjdG9yPENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhbGlhcyA9IGotPnNlY29uZC5tX2FsaWFz
ZXMuYmVnaW4oKTsgYWxpYXMgIT0gai0+c2Vjb25kLm1fYWxpYXNlcy5lbmQoKTsgKythbGlhcykK
KyAgICAgICAgICAgICAgICByZWdpc3RyYXIoYWxpYXMtPmRhdGEoKSwgai0+c2Vjb25kLm1fbmFt
ZS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY1dpbjo6cmVn
aXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAg
IGxhbmd1YWdlTWFuYWdlcigpOworICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1
cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgp
OyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3Ig
aiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFy
c2V0cygpLmVuZCgpKQorICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0
YSgpLCBuZXdUZXh0Q29kZWNXaW4sIDApOworICAgIH0KK30KKworc3RhdGljIERXT1JEIGdldENv
ZGVQYWdlRmxhZ3MoVUlOVCBjb2RlUGFnZSkKK3sKKyAgICBpZiAoY29kZVBhZ2UgPT0gNDIpIC8v
IFN5bWJvbAorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIE1pY3Jvc29mdCBzYXlzIHRoZSBm
bGFnIG11c3QgYmUgMCBmb3IgdGhlIGZvbGxvd2luZyBjb2RlIHBhZ2VzCisgICAgaWYgKGNvZGVQ
YWdlID4gNTAwMDApIHsKKyAgICAgICAgaWYgKChjb2RlUGFnZSA+PSA1MDIyMCAmJiBjb2RlUGFn
ZSA8PSA1MDIyMikKKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUwMjI1CisgICAgICAgICAg
ICB8fCBjb2RlUGFnZSA9PSA1MDIyNworICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNTAyMjkK
KyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUyOTM2CisgICAgICAgICAgICB8fCBjb2RlUGFn
ZSA9PSA1NDkzNgorICAgICAgICAgICAgfHwgKGNvZGVQYWdlID49IDU3MDAyICYmIGNvZGVQYWdl
IDw9IDU3MDAxKQorICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNjUwMDAgLy8gVVRGLTcKKyAg
ICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBN
Ql9QUkVDT01QT1NFRCB8IE1CX0VSUl9JTlZBTElEX0NIQVJTOworfQorCitzdGF0aWMgaW5saW5l
IGNvbnN0IGNoYXIqIGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNvbnN0IGNoYXIqIGJ5dGVz
LCBzaXplX3QgbGVuZ3RoKQoreworICAgIGZvciAoY29uc3QgY2hhciogYnl0ZXNFbmQgPSBieXRl
cyArIGxlbmd0aDsgYnl0ZXMgPCBieXRlc0VuZDsgKytieXRlcykgeworICAgICAgICBpZiAoKmJ5
dGVzICYgMHg4MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gYnl0ZXM7
Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZUludGVybmFsKFZlY3RvcjxVQ2hhciwgODE5Mj4mIHJl
c3VsdCwgVUlOVCBjb2RlUGFnZSwgY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNp
emVfdCogbGVmdCkKK3sKKyAgICAqbGVmdCA9IGxlbmd0aDsKKyAgICBpZiAoIWJ5dGVzIHx8ICFs
ZW5ndGgpCisgICAgICAgIHJldHVybjsKKworICAgIERXT1JEIGZsYWdzID0gZ2V0Q29kZVBhZ2VG
bGFncyhjb2RlUGFnZSk7CisKKyAgICBpbnQgdGVzdExlbmd0aCA9IGxlbmd0aDsKKyAgICBpbnQg
dW50ZXN0ZWRMZW5ndGggPSBsZW5ndGg7CisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgcmVz
dWx0TGVuZ3RoID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0
ZXN0TGVuZ3RoLCAwLCAwKTsKKworICAgICAgICBpZiAocmVzdWx0TGVuZ3RoID4gMCkgeworICAg
ICAgICAgICAgaW50IG9sZFNpemUgPSByZXN1bHQuc2l6ZSgpOworICAgICAgICAgICAgcmVzdWx0
LnJlc2l6ZShvbGRTaXplICsgcmVzdWx0TGVuZ3RoKTsKKworICAgICAgICAgICAgTXVsdGlCeXRl
VG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0ZXN0TGVuZ3RoLCByZXN1bHQuZGF0
YSgpICsgb2xkU2l6ZSwgcmVzdWx0TGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKHRlc3RMZW5n
dGggPT0gdW50ZXN0ZWRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqbGVmdCA9IGxlbmd0aCAt
IHRlc3RMZW5ndGg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB1bnRlc3RlZExlbmd0aCAtPSB0ZXN0TGVuZ3RoOworICAgICAgICAgICAgbGVuZ3Ro
IC09IHRlc3RMZW5ndGg7CisgICAgICAgICAgICBieXRlcyArPSB0ZXN0TGVuZ3RoOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdW50ZXN0ZWRMZW5ndGggPSB0ZXN0TGVuZ3RoIC0gMTsK
KyAgICAgICAgICAgIGlmICghdW50ZXN0ZWRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqbGVm
dCA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB0ZXN0TGVuZ3RoID0gKHVudGVzdGVkTGVuZ3RoICsgMSkgLyAyOworICAg
IH0KK30KKworU3RyaW5nIFRleHRDb2RlY1dpbjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBz
aXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJv
cikKK3sKKyAgICBpZiAoIW1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSkgeworICAgICAgICBtX2Rl
Y29kZUJ1ZmZlci5hcHBlbmQoYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgIGJ5dGVzID0gbV9kZWNv
ZGVCdWZmZXIuZGF0YSgpOworICAgICAgICBsZW5ndGggPSBtX2RlY29kZUJ1ZmZlci5zaXplKCk7
CisgICAgfQorCisgICAgc2l6ZV90IGxlZnQ7CisgICAgVmVjdG9yPFVDaGFyLCA4MTkyPiByZXN1
bHQ7CisgICAgZm9yICg7OykgeworICAgICAgICBkZWNvZGVJbnRlcm5hbChyZXN1bHQsIG1fY29k
ZVBhZ2UsIGJ5dGVzLCBsZW5ndGgsICZsZWZ0KTsKKyAgICAgICAgaWYgKCFsZWZ0KQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCFmbHVzaCAmJiBsZWZ0IDwgMTYpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICByZXN1bHQuYXBwZW5kKEwnPycpOworICAgICAgICBzYXdF
cnJvciA9IHRydWU7CisgICAgICAgIGlmIChzdG9wT25FcnJvcikKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGxlZnQgPT0gMSkKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGJ5dGVzICs9IGxlbmd0aCAtIGxlZnQgKyAxOworICAg
ICAgICBsZW5ndGggPSBsZWZ0IC0gMTsKKyAgICB9CisgICAgaWYgKGxlZnQgJiYgIWZsdXNoKSB7
CisgICAgICAgIGlmIChtX2RlY29kZUJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2Rl
Y29kZUJ1ZmZlci5hcHBlbmQoYnl0ZXMgKyBsZW5ndGggLSBsZWZ0LCBsZWZ0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtZW1tb3ZlKG1fZGVjb2RlQnVmZmVyLmRhdGEoKSwgYnl0ZXMg
KyBsZW5ndGggLSBsZWZ0LCBsZWZ0KTsKKyAgICAgICAgICAgIG1fZGVjb2RlQnVmZmVyLnJlc2l6
ZShsZWZ0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBtX2RlY29kZUJ1ZmZlci5j
bGVhcigpOworCisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKK30KKworQ1N0cmlu
ZyBUZXh0Q29kZWNXaW46OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykKK3sKKyAgICBpZiAoIWNoYXJhY3RlcnMgfHwgIWxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKworICAgIGludCByZXN1bHRMZW5ndGgg
PSBXaWRlQ2hhclRvTXVsdGlCeXRlKG1fY29kZVBhZ2UsIFdDX0NPTVBPU0lURUNIRUNLLCBjaGFy
YWN0ZXJzLCBsZW5ndGgsIDAsIDAsIDAsIDApOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
aW1wbGVtZW50IFVuZW5jb2RhYmxlSGFuZGxpbmc6IFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJs
ZXMsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLCBhbmQgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzLgorCisgICAgaWYgKHJlc3VsdExlbmd0aCA8PSAwKQorICAgICAgICByZXR1cm4g
Ij8iOworCisgICAgY2hhciogY2hhcmFjdGVyQnVmZmVyOworICAgIENTdHJpbmcgcmVzdWx0ID0g
Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChyZXN1bHRMZW5ndGgsIGNoYXJhY3RlckJ1ZmZlcik7
CisKKyAgICBXaWRlQ2hhclRvTXVsdGlCeXRlKG1fY29kZVBhZ2UsIFdDX0NPTVBPU0lURUNIRUNL
LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGNoYXJhY3RlckJ1ZmZlciwgcmVzdWx0TGVuZ3RoLCAwLCAw
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luOjplbnVtZXJh
dGVTdXBwb3J0ZWRFbmNvZGluZ3MoRW5jb2RpbmdSZWNlaXZlciYgcmVjZWl2ZXIpCit7CisgICAg
bGFuZ3VhZ2VNYW5hZ2VyKCk7CisgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3Vw
cG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7
ICsraSkgeworICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBq
ID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOworICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJz
ZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCks
IGotPnNlY29uZC5tX2ZyaWVuZGx5TmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LCBqLT5zZWNvbmQubV9jb2RlUGFnZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vVGV4dENvZGVjV2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjNhOTU4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
d2luL1RleHRDb2RlY1dpbi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDEwLTIwMTIgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgVGV4dENvZGVjV2luX2gKKyNkZWZpbmUgVGV4dENvZGVjV2luX2gKKworI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHdpbmRv
d3MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0Q29kZWNXaW4gOiBwdWJs
aWMgVGV4dENvZGVjIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVk
RW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgIFRleHRDb2Rl
Y1dpbihVSU5UIGNvZGVQYWdlKTsKKyAgICB2aXJ0dWFsIH5UZXh0Q29kZWNXaW4oKTsKKworICAg
IHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBm
bHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpOworICAgIHZpcnR1YWwgQ1N0
cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRs
aW5nKTsKKworICAgIHN0cnVjdCBFbmNvZGluZ0luZm8geworICAgICAgICBTdHJpbmcgbV9lbmNv
ZGluZzsKKyAgICAgICAgU3RyaW5nIG1fZnJpZW5kbHlOYW1lOworICAgIH07CisKKyAgICBzdHJ1
Y3QgRW5jb2RpbmdSZWNlaXZlciB7CisgICAgICAgIC8vIFJldHVybiBmYWxzZSB0byBzdG9wIGVu
dW1lcmF0aW5nLgorICAgICAgICB2aXJ0dWFsIGJvb2wgcmVjZWl2ZShjb25zdCBjaGFyKiBlbmNv
ZGluZywgY29uc3Qgd2NoYXJfdCogZnJpZW5kbHlOYW1lLCB1bnNpZ25lZCBpbnQgY29kZVBhZ2Up
ID0gMDsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgZW51bWVyYXRlU3VwcG9ydGVkRW5jb2Rp
bmdzKEVuY29kaW5nUmVjZWl2ZXImIHJlY2VpdmVyKTsKKworcHJpdmF0ZToKKyAgICBVSU5UIG1f
Y29kZVBhZ2U7CisgICAgVmVjdG9yPGNoYXI+IG1fZGVjb2RlQnVmZmVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGV4dENvZGVjV2luX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNGVjNTAuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwzMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRv
cmNoIE1vYmlsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwLTIwMTEgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdp
bGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4
dENvZGVjV2luQ0UuaCIKLQotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgPG1sYW5n
Lmg+Ci0jaW5jbHVkZSA8d2luYmFzZS5oPgotI2luY2x1ZGUgPHdpbm5scy5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVj
dCBDaGFyc2V0SW5mbyB7Ci0gICAgQ1N0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fZnJpZW5k
bHlOYW1lOwotICAgIFVJTlQgbV9jb2RlUGFnZTsKLSAgICBWZWN0b3I8Q1N0cmluZz4gbV9hbGlh
c2VzOwotfTsKLQotY2xhc3MgTGFuZ3VhZ2VNYW5hZ2VyIHsKLXByaXZhdGU6Ci0gICAgTGFuZ3Vh
Z2VNYW5hZ2VyKCk7Ci0KLSAgICBmcmllbmQgTGFuZ3VhZ2VNYW5hZ2VyJiBsYW5ndWFnZU1hbmFn
ZXIoKTsKLX07Ci0KLS8vIFVzYWdlOiBhIGxvb2t1cCB0YWJsZSB1c2VkIHRvIGdldCBDaGFyc2V0
SW5mbyB3aXRoIGNvZGUgcGFnZSBJRC4KLS8vIEtleTogY29kZSBwYWdlIElELiBWYWx1ZTogY2hh
cnNldCBpbmZvcm1hdGlvbi4KLXN0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+JiBjb2RlUGFn
ZUNoYXJzZXRzKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxVSU5ULCBDU3RyaW5nPiBjYzsKLSAg
ICByZXR1cm4gY2M7Ci19Ci0KLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+JiBr
bm93bkNoYXJzZXRzKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZv
PiBrYzsKLSAgICByZXR1cm4ga2M7Ci19Ci0KLS8vIFVzYWdlOiBhIG1hcCB0aGF0IHN0b3JlcyBj
aGFyc2V0cyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgc3lzdGVtLiBTb3J0ZWQgYnkgbmFtZS4KLS8v
IEtleTogY2hhcnNldC4gVmFsdWU6IGNvZGUgcGFnZSBJRC4KLXR5cGVkZWYgSGFzaFNldDxTdHJp
bmc+IENoYXJzZXRTZXQ7Ci1zdGF0aWMgQ2hhcnNldFNldCYgc3VwcG9ydGVkQ2hhcnNldHMoKQot
ewotICAgIHN0YXRpYyBDaGFyc2V0U2V0IHNsOwotICAgIHJldHVybiBzbDsKLX0KLQotc3RhdGlj
IExhbmd1YWdlTWFuYWdlciYgbGFuZ3VhZ2VNYW5hZ2VyKCkKLXsKLSAgICBzdGF0aWMgTGFuZ3Vh
Z2VNYW5hZ2VyIGxtOwotICAgIHJldHVybiBsbTsKLX0KLQotTGFuZ3VhZ2VNYW5hZ2VyOjpMYW5n
dWFnZU1hbmFnZXIoKQotewotICAgIElFbnVtQ29kZVBhZ2UqIGVudW1JbnRlcmZhY2U7Ci0gICAg
SU11bHRpTGFuZ3VhZ2UqIG1saSA9IEZvbnRDYWNoZTo6Z2V0TXVsdGlMYW5ndWFnZUludGVyZmFj
ZSgpOwotICAgIGlmIChtbGkgJiYgU19PSyA9PSBtbGktPkVudW1Db2RlUGFnZXMoTUlNRUNPTlRG
X0JST1dTRVIsICZlbnVtSW50ZXJmYWNlKSkgewotICAgICAgICBNSU1FQ1BJTkZPIGNwSW5mbzsK
LSAgICAgICAgVUxPTkcgY2NwSW5mbzsKLSAgICAgICAgd2hpbGUgKFNfT0sgPT0gZW51bUludGVy
ZmFjZS0+TmV4dCgxLCAmY3BJbmZvLCAmY2NwSW5mbykgJiYgY2NwSW5mbykgewotICAgICAgICAg
ICAgaWYgKCFJc1ZhbGlkQ29kZVBhZ2UoY3BJbmZvLnVpQ29kZVBhZ2UpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBIYXNoTWFwPFVJTlQsIENTdHJpbmc+OjppdGVy
YXRvciBpID0gY29kZVBhZ2VDaGFyc2V0cygpLmZpbmQoY3BJbmZvLnVpQ29kZVBhZ2UpOwotCi0g
ICAgICAgICAgICBDU3RyaW5nIG5hbWUoU3RyaW5nKGNwSW5mby53c3pXZWJDaGFyc2V0KS5sYXRp
bjEoKSk7Ci0gICAgICAgICAgICBpZiAoaSA9PSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsK
LSAgICAgICAgICAgICAgICBDaGFyc2V0SW5mbyBpbmZvOwotICAgICAgICAgICAgICAgIGluZm8u
bV9jb2RlUGFnZSA9IGNwSW5mby51aUNvZGVQYWdlOwotICAgICAgICAgICAgICAgIGtub3duQ2hh
cnNldHMoKS5zZXQobmFtZS5kYXRhKCksIGluZm8pOwotICAgICAgICAgICAgICAgIGkgPSBjb2Rl
UGFnZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpICE9IGNvZGVQYWdlQ2hhcnNldHMoKS5lbmQo
KSkgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJh
dG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+
c2Vjb25kLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGogIT0ga25vd25DaGFy
c2V0cygpLmVuZCgpKTsKLSAgICAgICAgICAgICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnNl
Y29uZDsKLSAgICAgICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pEZXNjcmlwdGlv
bjsKLSAgICAgICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7Ci0gICAgICAg
ICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVhZGVyQ2hh
cnNldCkubGF0aW4xKCkpOwotICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChT
dHJpbmcoY3BJbmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIGNwTmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7
Ci0gICAgICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7
Ci0gICAgICAgICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEo
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZW51bUludGVyZmFjZS0+UmVs
ZWFzZSgpOwotICAgIH0KLX0KLQotc3RhdGljIFVJTlQgZ2V0Q29kZVBhZ2UoY29uc3QgY2hhciog
bmFtZSkKLXsKLSAgICAvLyBFeHBsaWNpdGx5IHVzZSBhICJjb25zdCIgcmVmZXJlbmNlIHRvIGZp
eCB0aGUgc2lsbHkgVlMgYnVpbGQgZXJyb3IKLSAgICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91
bmQgZm9yIGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgotICAgIGNvbnN0IEhhc2hNYXA8U3Ry
aW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5k
KG5hbWUpOwotICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vj
b25kLm1fY29kZVBhZ2U7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4
dENvZGVjV2luQ0UoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCi17
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXh0Q29kZWNXaW5DRShnZXRDb2RlUGFnZShlbmNv
ZGluZy5uYW1lKCkpKSk7Ci19Ci0KLVRleHRDb2RlY1dpbkNFOjpUZXh0Q29kZWNXaW5DRShVSU5U
IGNvZGVQYWdlKQotICAgIDogbV9jb2RlUGFnZShjb2RlUGFnZSkKLXsKLX0KLQotVGV4dENvZGVj
V2luQ0U6On5UZXh0Q29kZWNXaW5DRSgpCi17Ci19Ci0KLXZvaWQgVGV4dENvZGVjV2luQ0U6OnJl
Z2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3Ry
YXIpCi17Ci0gICAgbGFuZ3VhZ2VNYW5hZ2VyKCk7Ci0gICAgZm9yIChDaGFyc2V0U2V0OjppdGVy
YXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJz
ZXRzKCkuZW5kKCk7ICsraSkgewotICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+
OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwotICAgICAgICBpZiAoaiAh
PSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNv
bmQubV9uYW1lLmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAgICAgICAg
Zm9yIChWZWN0b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1f
YWxpYXNlcy5iZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2Fs
aWFzKQotICAgICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQu
bV9uYW1lLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dENvZGVjV2lu
Q0U6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikK
LXsKLSAgICBsYW5ndWFnZU1hbmFnZXIoKTsKLSAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9y
IGkgPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMo
KS5lbmQoKTsgKytpKSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0
ZXJhdG9yIGogPSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7Ci0gICAgICAgIGlmIChqICE9IGtu
b3duQ2hhcnNldHMoKS5lbmQoKSkKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9u
YW1lLmRhdGEoKSwgbmV3VGV4dENvZGVjV2luQ0UsIDApOwotICAgIH0KLX0KLQotc3RhdGljIERX
T1JEIGdldENvZGVQYWdlRmxhZ3MoVUlOVCBjb2RlUGFnZSkKLXsKLSAgICBpZiAoY29kZVBhZ2Ug
PT0gNDIpIC8vIFN5bWJvbAotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIE1pY3Jvc29mdCBz
YXlzIHRoZSBmbGFnIG11c3QgYmUgMCBmb3IgdGhlIGZvbGxvd2luZyBjb2RlIHBhZ2VzCi0gICAg
aWYgKGNvZGVQYWdlID4gNTAwMDApIHsKLSAgICAgICAgaWYgKChjb2RlUGFnZSA+PSA1MDIyMCAm
JiBjb2RlUGFnZSA8PSA1MDIyMikKLSAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUwMjI1Ci0g
ICAgICAgICAgICB8fCBjb2RlUGFnZSA9PSA1MDIyNwotICAgICAgICAgICAgfHwgY29kZVBhZ2Ug
PT0gNTAyMjkKLSAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUyOTM2Ci0gICAgICAgICAgICB8
fCBjb2RlUGFnZSA9PSA1NDkzNgotICAgICAgICAgICAgfHwgKGNvZGVQYWdlID49IDU3MDAyICYm
IGNvZGVQYWdlIDw9IDU3MDAxKQotICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNjUwMDAgLy8g
VVRGLTcKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IHJldHVybiBNQl9QUkVDT01QT1NFRCB8IE1CX0VSUl9JTlZBTElEX0NIQVJTOwotfQotCi1zdGF0
aWMgaW5saW5lIGNvbnN0IGNoYXIqIGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNvbnN0IGNo
YXIqIGJ5dGVzLCBzaXplX3QgbGVuZ3RoKQotewotICAgIGZvciAoY29uc3QgY2hhciogYnl0ZXNF
bmQgPSBieXRlcyArIGxlbmd0aDsgYnl0ZXMgPCBieXRlc0VuZDsgKytieXRlcykgewotICAgICAg
ICBpZiAoKmJ5dGVzICYgMHg4MCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1
cm4gYnl0ZXM7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlY29kZUludGVybmFsKFZlY3RvcjxVQ2hhciwg
ODE5Mj4mIHJlc3VsdCwgVUlOVCBjb2RlUGFnZSwgY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBs
ZW5ndGgsIHNpemVfdCogbGVmdCkKLXsKLSAgICAqbGVmdCA9IGxlbmd0aDsKLSAgICBpZiAoIWJ5
dGVzIHx8ICFsZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIERXT1JEIGZsYWdzID0gZ2V0
Q29kZVBhZ2VGbGFncyhjb2RlUGFnZSk7Ci0KLSAgICBpbnQgdGVzdExlbmd0aCA9IGxlbmd0aDsK
LSAgICBpbnQgdW50ZXN0ZWRMZW5ndGggPSBsZW5ndGg7Ci0gICAgZm9yICg7OykgewotICAgICAg
ICBpbnQgcmVzdWx0TGVuZ3RoID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3Ms
IGJ5dGVzLCB0ZXN0TGVuZ3RoLCAwLCAwKTsKLQotICAgICAgICBpZiAocmVzdWx0TGVuZ3RoID4g
MCkgewotICAgICAgICAgICAgaW50IG9sZFNpemUgPSByZXN1bHQuc2l6ZSgpOwotICAgICAgICAg
ICAgcmVzdWx0LnJlc2l6ZShvbGRTaXplICsgcmVzdWx0TGVuZ3RoKTsKLQotICAgICAgICAgICAg
TXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0ZXN0TGVuZ3RoLCBy
ZXN1bHQuZGF0YSgpICsgb2xkU2l6ZSwgcmVzdWx0TGVuZ3RoKTsKLQotICAgICAgICAgICAgaWYg
KHRlc3RMZW5ndGggPT0gdW50ZXN0ZWRMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAqbGVmdCA9
IGxlbmd0aCAtIHRlc3RMZW5ndGg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB1bnRlc3RlZExlbmd0aCAtPSB0ZXN0TGVuZ3RoOwotICAgICAgICAg
ICAgbGVuZ3RoIC09IHRlc3RMZW5ndGg7Ci0gICAgICAgICAgICBieXRlcyArPSB0ZXN0TGVuZ3Ro
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdW50ZXN0ZWRMZW5ndGggPSB0ZXN0TGVu
Z3RoIC0gMTsKLSAgICAgICAgICAgIGlmICghdW50ZXN0ZWRMZW5ndGgpIHsKLSAgICAgICAgICAg
ICAgICAqbGVmdCA9IGxlbmd0aDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICB0ZXN0TGVuZ3RoID0gKHVudGVzdGVkTGVuZ3RoICsgMSkg
LyAyOwotICAgIH0KLX0KLQotU3RyaW5nIFRleHRDb2RlY1dpbkNFOjpkZWNvZGUoY29uc3QgY2hh
ciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJv
b2wmIHNhd0Vycm9yKQotewotICAgIGlmICghbV9kZWNvZGVCdWZmZXIuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG1fZGVjb2RlQnVmZmVyLmFwcGVuZChieXRlcywgbGVuZ3RoKTsKLSAgICAgICAgYnl0
ZXMgPSBtX2RlY29kZUJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fZGVjb2RlQnVm
ZmVyLnNpemUoKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbGVmdDsKLSAgICBWZWN0b3I8VUNoYXIs
IDgxOTI+IHJlc3VsdDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGRlY29kZUludGVybmFsKHJl
c3VsdCwgbV9jb2RlUGFnZSwgYnl0ZXMsIGxlbmd0aCwgJmxlZnQpOwotICAgICAgICBpZiAoIWxl
ZnQpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoIWZsdXNoICYmIGxlZnQgPCAx
NikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoTCc/Jyk7Ci0g
ICAgICAgIHNhd0Vycm9yID0gdHJ1ZTsKLSAgICAgICAgaWYgKHN0b3BPbkVycm9yKQotICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKLQotICAgICAgICBpZiAobGVmdCA9
PSAxKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYnl0ZXMgKz0gbGVuZ3RoIC0gbGVm
dCArIDE7Ci0gICAgICAgIGxlbmd0aCA9IGxlZnQgLSAxOwotICAgIH0KLSAgICBpZiAobGVmdCAm
JiAhZmx1c2gpIHsKLSAgICAgICAgaWYgKG1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIG1fZGVjb2RlQnVmZmVyLmFwcGVuZChieXRlcyArIGxlbmd0aCAtIGxlZnQsIGxlZnQp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1lbW1vdmUobV9kZWNvZGVCdWZmZXIuZGF0
YSgpLCBieXRlcyArIGxlbmd0aCAtIGxlZnQsIGxlZnQpOwotICAgICAgICAgICAgbV9kZWNvZGVC
dWZmZXIucmVzaXplKGxlZnQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fZGVj
b2RlQnVmZmVyLmNsZWFyKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwot
fQotCi1DU3RyaW5nIFRleHRDb2RlY1dpbkNFOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCi17Ci0gICAgaWYgKCFjaGFy
YWN0ZXJzIHx8ICFsZW5ndGgpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7Ci0KLSAgICBpbnQg
cmVzdWx0TGVuZ3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZShtX2NvZGVQYWdlLCBXQ19DT01QT1NJ
VEVDSEVDSywgY2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCAwLCAwKTsKLQotICAgIC8vIEZJWE1F
OiBXZSBuZWVkIHRvIGltcGxlbWVudCBVbmVuY29kYWJsZUhhbmRsaW5nOiBRdWVzdGlvbk1hcmtz
Rm9yVW5lbmNvZGFibGVzLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcywgYW5kIFVSTEVuY29kZWRF
bnRpdGllc0ZvclVuZW5jb2RhYmxlcy4KLQotICAgIGlmIChyZXN1bHRMZW5ndGggPD0gMCkKLSAg
ICAgICAgcmV0dXJuICI/IjsKLQotICAgIGNoYXIqIGNoYXJhY3RlckJ1ZmZlcjsKLSAgICBDU3Ry
aW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQocmVzdWx0TGVuZ3RoLCBjaGFy
YWN0ZXJCdWZmZXIpOwotCi0gICAgV2lkZUNoYXJUb011bHRpQnl0ZShtX2NvZGVQYWdlLCBXQ19D
T01QT1NJVEVDSEVDSywgY2hhcmFjdGVycywgbGVuZ3RoLCBjaGFyYWN0ZXJCdWZmZXIsIHJlc3Vs
dExlbmd0aCwgMCwgMCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFRleHRDb2Rl
Y1dpbkNFOjplbnVtZXJhdGVTdXBwb3J0ZWRFbmNvZGluZ3MoRW5jb2RpbmdSZWNlaXZlciYgcmVj
ZWl2ZXIpCi17Ci0gICAgbGFuZ3VhZ2VNYW5hZ2VyKCk7Ci0gICAgZm9yIChDaGFyc2V0U2V0Ojpp
dGVyYXRvciBpID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENo
YXJzZXRzKCkuZW5kKCk7ICsraSkgewotICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldElu
Zm8+OjppdGVyYXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwotICAgICAgICBpZiAo
aiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+c2Vjb25k
Lm1fbmFtZS5kYXRhKCksIGotPnNlY29uZC5tX2ZyaWVuZGx5TmFtZS5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLCBqLT5zZWNvbmQubV9jb2RlUGFnZSkpCi0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTAwYThjZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJv
c2t1cnlha292IDxhcEBueXBvcC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3Jj
aCBNb2JpbGUsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8
cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVGV4dENvZGVjV2luQ0VfaAotI2Rl
ZmluZSBUZXh0Q29kZWNXaW5DRV9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2lu
Y2x1ZGUgIlRleHRDb2RlYy5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgVGV4dENvZGVjV2luQ0UgOiBwdWJsaWMgVGV4dENvZGVjIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05h
bWVSZWdpc3RyYXIpOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyKTsKLQotICAgIFRleHRDb2RlY1dpbkNFKFVJTlQgY29kZVBhZ2UpOwot
ICAgIHZpcnR1YWwgflRleHRDb2RlY1dpbkNFKCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBkZWNv
ZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKTsKLSAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVD
aGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7Ci0KLSAgICBzdHJ1Y3Qg
RW5jb2RpbmdJbmZvIHsKLSAgICAgICAgU3RyaW5nIG1fZW5jb2Rpbmc7Ci0gICAgICAgIFN0cmlu
ZyBtX2ZyaWVuZGx5TmFtZTsKLSAgICB9OwotCi0gICAgc3RydWN0IEVuY29kaW5nUmVjZWl2ZXIg
ewotICAgICAgICAvLyBSZXR1cm4gZmFsc2UgdG8gc3RvcCBlbnVtZXJhdGluZy4KLSAgICAgICAg
dmlydHVhbCBib29sIHJlY2VpdmUoY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IHdjaGFyX3Qq
IGZyaWVuZGx5TmFtZSwgdW5zaWduZWQgaW50IGNvZGVQYWdlKSA9IDA7Ci0gICAgfTsKLQotICAg
IHN0YXRpYyB2b2lkIGVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGluZ1JlY2VpdmVy
JiByZWNlaXZlcik7Ci0KLXByaXZhdGU6Ci0gICAgVUlOVCBtX2NvZGVQYWdlOwotICAgIFZlY3Rv
cjxjaGFyPiBtX2RlY29kZUJ1ZmZlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFRleHRDb2RlY1dpbkNFX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153706</attachid>
            <date>2012-07-22 14:57:33 -0700</date>
            <delta_ts>2012-07-23 01:06:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91947.patch</filename>
            <type>text/plain</type>
            <size>29715</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MTU4NThkLi5iMmI0NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTItMDctMjIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmVuYW1lIFRleHRDb2RlY1dpbkNFIHRvIFRleHRDb2RlY1dpbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5NDcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSBUZXh0Q29kZWNXaW5D
RSBpcyB1c2VkIGJ5IG90aGVyIChub24tdXBzdHJlYW1lZCkgd2luZG93cyBwb3J0cyB0b28sCisg
ICAgICAgIFRleHRDb2RlY1dpbiBpcyBhIGJldHRlciBuYW1lIGZvciB0aGUgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIEFsc28gcmVtb3ZlIHRoZSBkZXBlbmRlbmN5IG9uIFdpbkNFIEZvbnRDYWNo
ZSB0byBtYWtlIGl0IG1vcmUgdXNhYmxlLgorCisgICAgICAgICogUGxhdGZvcm1XaW5DRS5jbWFr
ZToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmV4dGVuZFRleHRDb2RlY01hcHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaC4KKwogMjAxMi0wNy0yMSAgUGF0cmlj
ayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBDbGVhbnVwIFRleHRF
bmNvZGluZyBVU0UoWFhYX1VOSUNPREUpIG1hY3JvcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1XaW5DRS5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ0UuY21h
a2UKaW5kZXggNjZmYTkwMy4uMTAyZTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNFLmNtYWtl
CkBAIC0xLDcgKzEsNiBAQAogTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVT
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dpbmNlIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS93aW4iCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3RleHQvd2luY2Ui
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy93aW4iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL25ldHdvcmsvd2luIgpAQCAtMTE0LDggKzExMyw5IEBAIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdEZXRlY3Rvck5vbmUu
Y3BwCiAKKyAgICBwbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwCisKICAgICBwbGF0
Zm9ybS90ZXh0L3dpbmNlL1RleHRCcmVha0l0ZXJhdG9yV2luY2UuY3BwCi0gICAgcGxhdGZvcm0v
dGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKICkKIAogTElTVChBUFBFTkQgV2ViQ29yZV9M
SUJSQVJJRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmdSZWdpc3RyeS5jcHAKaW5kZXggODI4MTUzOC4uYmQ4YjdhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdSZWdpc3RyeS5jcHAKQEAg
LTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJndGsvVGV4dENvZGVjR3RrLmgiCiAjZW5kaWYKICNp
ZiBVU0UoV0lOQ0VfVU5JQ09ERSkKLSNpbmNsdWRlICJUZXh0Q29kZWNXaW5DRS5oIgorI2luY2x1
ZGUgIndpbi9UZXh0Q29kZWNXaW4uaCIKICNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CkBAIC0zMTIsOCArMzEyLDggQEAgc3RhdGljIHZvaWQgZXh0ZW5kVGV4dENvZGVjTWFw
cygpCiAjZW5kaWYKIAogI2lmIFVTRShXSU5DRV9VTklDT0RFKQotICAgIFRleHRDb2RlY1dpbkNF
OjpyZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhhZGRUb1RleHRFbmNvZGluZ05hbWVNYXAp
OwotICAgIFRleHRDb2RlY1dpbkNFOjpyZWdpc3RlckV4dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENv
ZGVjTWFwKTsKKyAgICBUZXh0Q29kZWNXaW46OnJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVz
KGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVjV2luOjpyZWdpc3RlckV4
dGVuZGVkQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKICNlbmRpZgogCiAgICAgcHJ1bmVCbGFj
a2xpc3RlZENvZGVjcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vVGV4dENvZGVjV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2lu
L1RleHRDb2RlY1dpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMx
MDQ4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2lu
L1RleHRDb2RlY1dpbi5jcHAKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDEyIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNv
bT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaSB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRleHRDb2RlY1dpbi5oIgorCisjaW5jbHVkZSAiQ09NUHRyLmgiCisjaW5jbHVk
ZSA8bWxhbmcuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IENoYXJzZXRJbmZv
IHsKKyAgICBDU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV9mcmllbmRseU5hbWU7CisgICAg
VUlOVCBtX2NvZGVQYWdlOworICAgIFZlY3RvcjxDU3RyaW5nPiBtX2FsaWFzZXM7Cit9OworCitj
bGFzcyBMYW5ndWFnZU1hbmFnZXIgeworcHJpdmF0ZToKKyAgICBMYW5ndWFnZU1hbmFnZXIoKTsK
KworICAgIGZyaWVuZCBMYW5ndWFnZU1hbmFnZXImIGxhbmd1YWdlTWFuYWdlcigpOworfTsKKwor
Ly8gVXNhZ2U6IGEgbG9va3VwIHRhYmxlIHVzZWQgdG8gZ2V0IENoYXJzZXRJbmZvIHdpdGggY29k
ZSBwYWdlIElELgorLy8gS2V5OiBjb2RlIHBhZ2UgSUQuIFZhbHVlOiBjaGFyc2V0IGluZm9ybWF0
aW9uLgorc3RhdGljIEhhc2hNYXA8VUlOVCwgQ1N0cmluZz4mIGNvZGVQYWdlQ2hhcnNldHMoKQor
eworICAgIHN0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+IGNjOworICAgIHJldHVybiBjYzsK
K30KKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGtub3duQ2hhcnNldHMo
KQoreworICAgIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+IGtjOworICAgIHJl
dHVybiBrYzsKK30KKworLy8gVXNhZ2U6IGEgbWFwIHRoYXQgc3RvcmVzIGNoYXJzZXRzIHRoYXQg
YXJlIHN1cHBvcnRlZCBieSBzeXN0ZW0uIFNvcnRlZCBieSBuYW1lLgorLy8gS2V5OiBjaGFyc2V0
LiBWYWx1ZTogY29kZSBwYWdlIElELgordHlwZWRlZiBIYXNoU2V0PFN0cmluZz4gQ2hhcnNldFNl
dDsKK3N0YXRpYyBDaGFyc2V0U2V0JiBzdXBwb3J0ZWRDaGFyc2V0cygpCit7CisgICAgc3RhdGlj
IENoYXJzZXRTZXQgc2w7CisgICAgcmV0dXJuIHNsOworfQorCitzdGF0aWMgTGFuZ3VhZ2VNYW5h
Z2VyJiBsYW5ndWFnZU1hbmFnZXIoKQoreworICAgIHN0YXRpYyBMYW5ndWFnZU1hbmFnZXIgbG07
CisgICAgcmV0dXJuIGxtOworfQorCitMYW5ndWFnZU1hbmFnZXI6Okxhbmd1YWdlTWFuYWdlcigp
Cit7CisgICAgQ09NUHRyPElNdWx0aUxhbmd1YWdlPiBtdWx0aUxhbmd1YWdlOworICAgIGlmIChG
QUlMRUQoOjpDb0NyZWF0ZUluc3RhbmNlKENMU0lEX0NNdWx0aUxhbmd1YWdlLCAwLCBDTFNDVFhf
SU5QUk9DX1NFUlZFUiwgSUlEX0lNdWx0aUxhbmd1YWdlLCByZWludGVycHJldF9jYXN0PExQVk9J
RCo+KCZtdWx0aUxhbmd1YWdlKSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SUVu
dW1Db2RlUGFnZT4gZW51bUludGVyZmFjZTsKKyAgICBpZiAoRkFJTEVEKG11bHRpTGFuZ3VhZ2Ut
PkVudW1Db2RlUGFnZXMoTUlNRUNPTlRGX0JST1dTRVIsICZlbnVtSW50ZXJmYWNlKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE1JTUVDUElORk8gY3BJbmZvOworICAgIFVMT05HIGNjcEluZm87
CisgICAgd2hpbGUgKFNVQ0NFRURFRChlbnVtSW50ZXJmYWNlLT5OZXh0KDEsICZjcEluZm8sICZj
Y3BJbmZvKSkgJiYgY2NwSW5mbykgeworICAgICAgICBpZiAoIUlzVmFsaWRDb2RlUGFnZShjcElu
Zm8udWlDb2RlUGFnZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBIYXNoTWFw
PFVJTlQsIENTdHJpbmc+OjppdGVyYXRvciBpID0gY29kZVBhZ2VDaGFyc2V0cygpLmZpbmQoY3BJ
bmZvLnVpQ29kZVBhZ2UpOworCisgICAgICAgIENTdHJpbmcgbmFtZShTdHJpbmcoY3BJbmZvLndz
eldlYkNoYXJzZXQpLmxhdGluMSgpKTsKKyAgICAgICAgaWYgKGkgPT0gY29kZVBhZ2VDaGFyc2V0
cygpLmVuZCgpKSB7CisgICAgICAgICAgICBDaGFyc2V0SW5mbyBpbmZvOworICAgICAgICAgICAg
aW5mby5tX2NvZGVQYWdlID0gY3BJbmZvLnVpQ29kZVBhZ2U7CisgICAgICAgICAgICBrbm93bkNo
YXJzZXRzKCkuc2V0KG5hbWUuZGF0YSgpLCBpbmZvKTsKKyAgICAgICAgICAgIGkgPSBjb2RlUGFn
ZUNoYXJzZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoaSAhPSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKKyAgICAg
ICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBrbm93bkNo
YXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxlbmd0aCgp
KSk7CisgICAgICAgICAgICBBU1NFUlQoaiAhPSBrbm93bkNoYXJzZXRzKCkuZW5kKCkpOworICAg
ICAgICAgICAgQ2hhcnNldEluZm8mIGluZm8gPSBqLT5zZWNvbmQ7CisgICAgICAgICAgICBpbmZv
Lm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7CisgICAgICAgICAgICBpbmZvLm1fZnJpZW5kbHlO
YW1lID0gY3BJbmZvLndzekRlc2NyaXB0aW9uOworICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMu
YXBwZW5kKG5hbWUpOworICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhj
cEluZm8ud3N6SGVhZGVyQ2hhcnNldCkubGF0aW4xKCkpOworICAgICAgICAgICAgaW5mby5tX2Fs
aWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6Qm9keUNoYXJzZXQpLmxhdGluMSgpKTsKKyAg
ICAgICAgICAgIFN0cmluZyBjcE5hbWUgPSAiY3AiICsgU3RyaW5nOjpudW1iZXIoY3BJbmZvLnVp
Q29kZVBhZ2UpOworICAgICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRp
bjEoKSk7CisgICAgICAgICAgICBzdXBwb3J0ZWRDaGFyc2V0cygpLmFkZChpLT5zZWNvbmQuZGF0
YSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIFVJTlQgZ2V0Q29kZVBhZ2UoY29u
c3QgY2hhciogbmFtZSkKK3sKKyAgICAvLyBFeHBsaWNpdGx5IHVzZSBhICJjb25zdCIgcmVmZXJl
bmNlIHRvIGZpeCB0aGUgc2lsbHkgVlMgYnVpbGQgZXJyb3IKKyAgICAvLyBzYXlpbmcgIj09IiBp
cyBub3QgZm91bmQgZm9yIGNvbnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgorICAgIGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFy
c2V0cy5maW5kKG5hbWUpOworICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQ
IDogaS0+c2Vjb25kLm1fY29kZVBhZ2U7Cit9CisKK3N0YXRpYyBQYXNzT3duUHRyPFRleHRDb2Rl
Yz4gbmV3VGV4dENvZGVjV2luKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGNvbnN0IHZv
aWQqKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dENvZGVjV2luKGdldENvZGVQYWdl
KGVuY29kaW5nLm5hbWUoKSkpKTsKK30KKworVGV4dENvZGVjV2luOjpUZXh0Q29kZWNXaW4oVUlO
VCBjb2RlUGFnZSkKKyAgICA6IG1fY29kZVBhZ2UoY29kZVBhZ2UpCit7Cit9CisKK1RleHRDb2Rl
Y1dpbjo6flRleHRDb2RlY1dpbigpCit7Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luOjpyZWdpc3Rl
ckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQor
eworICAgIGxhbmd1YWdlTWFuYWdlcigpOworICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3Ig
aSA9IHN1cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygp
LmVuZCgpOyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRl
cmF0b3IgaiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKKyAgICAgICAgaWYgKGogIT0ga25v
d25DaGFyc2V0cygpLmVuZCgpKSB7CisgICAgICAgICAgICByZWdpc3RyYXIoai0+c2Vjb25kLm1f
bmFtZS5kYXRhKCksIGotPnNlY29uZC5tX25hbWUuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAo
VmVjdG9yPENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBhbGlhcyA9IGotPnNlY29uZC5tX2FsaWFz
ZXMuYmVnaW4oKTsgYWxpYXMgIT0gai0+c2Vjb25kLm1fYWxpYXNlcy5lbmQoKTsgKythbGlhcykK
KyAgICAgICAgICAgICAgICByZWdpc3RyYXIoYWxpYXMtPmRhdGEoKSwgai0+c2Vjb25kLm1fbmFt
ZS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHRDb2RlY1dpbjo6cmVn
aXN0ZXJFeHRlbmRlZENvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIgcmVnaXN0cmFyKQoreworICAg
IGxhbmd1YWdlTWFuYWdlcigpOworICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1
cHBvcnRlZENoYXJzZXRzKCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgp
OyArK2kpIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3Ig
aiA9IGtub3duQ2hhcnNldHMoKS5maW5kKCppKTsKKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFy
c2V0cygpLmVuZCgpKQorICAgICAgICAgICAgcmVnaXN0cmFyKGotPnNlY29uZC5tX25hbWUuZGF0
YSgpLCBuZXdUZXh0Q29kZWNXaW4sIDApOworICAgIH0KK30KKworc3RhdGljIERXT1JEIGdldENv
ZGVQYWdlRmxhZ3MoVUlOVCBjb2RlUGFnZSkKK3sKKyAgICBpZiAoY29kZVBhZ2UgPT0gNDIpIC8v
IFN5bWJvbAorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIE1pY3Jvc29mdCBzYXlzIHRoZSBm
bGFnIG11c3QgYmUgMCBmb3IgdGhlIGZvbGxvd2luZyBjb2RlIHBhZ2VzCisgICAgaWYgKGNvZGVQ
YWdlID4gNTAwMDApIHsKKyAgICAgICAgaWYgKChjb2RlUGFnZSA+PSA1MDIyMCAmJiBjb2RlUGFn
ZSA8PSA1MDIyMikKKyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUwMjI1CisgICAgICAgICAg
ICB8fCBjb2RlUGFnZSA9PSA1MDIyNworICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNTAyMjkK
KyAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUyOTM2CisgICAgICAgICAgICB8fCBjb2RlUGFn
ZSA9PSA1NDkzNgorICAgICAgICAgICAgfHwgKGNvZGVQYWdlID49IDU3MDAyICYmIGNvZGVQYWdl
IDw9IDU3MDAxKQorICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNjUwMDAgLy8gVVRGLTcKKyAg
ICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBN
Ql9QUkVDT01QT1NFRCB8IE1CX0VSUl9JTlZBTElEX0NIQVJTOworfQorCitzdGF0aWMgaW5saW5l
IGNvbnN0IGNoYXIqIGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNvbnN0IGNoYXIqIGJ5dGVz
LCBzaXplX3QgbGVuZ3RoKQoreworICAgIGZvciAoY29uc3QgY2hhciogYnl0ZXNFbmQgPSBieXRl
cyArIGxlbmd0aDsgYnl0ZXMgPCBieXRlc0VuZDsgKytieXRlcykgeworICAgICAgICBpZiAoKmJ5
dGVzICYgMHg4MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gYnl0ZXM7
Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZUludGVybmFsKFZlY3RvcjxVQ2hhciwgODE5Mj4mIHJl
c3VsdCwgVUlOVCBjb2RlUGFnZSwgY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNp
emVfdCogbGVmdCkKK3sKKyAgICAqbGVmdCA9IGxlbmd0aDsKKyAgICBpZiAoIWJ5dGVzIHx8ICFs
ZW5ndGgpCisgICAgICAgIHJldHVybjsKKworICAgIERXT1JEIGZsYWdzID0gZ2V0Q29kZVBhZ2VG
bGFncyhjb2RlUGFnZSk7CisKKyAgICBpbnQgdGVzdExlbmd0aCA9IGxlbmd0aDsKKyAgICBpbnQg
dW50ZXN0ZWRMZW5ndGggPSBsZW5ndGg7CisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgcmVz
dWx0TGVuZ3RoID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0
ZXN0TGVuZ3RoLCAwLCAwKTsKKworICAgICAgICBpZiAocmVzdWx0TGVuZ3RoID4gMCkgeworICAg
ICAgICAgICAgaW50IG9sZFNpemUgPSByZXN1bHQuc2l6ZSgpOworICAgICAgICAgICAgcmVzdWx0
LnJlc2l6ZShvbGRTaXplICsgcmVzdWx0TGVuZ3RoKTsKKworICAgICAgICAgICAgTXVsdGlCeXRl
VG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0ZXN0TGVuZ3RoLCByZXN1bHQuZGF0
YSgpICsgb2xkU2l6ZSwgcmVzdWx0TGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKHRlc3RMZW5n
dGggPT0gdW50ZXN0ZWRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqbGVmdCA9IGxlbmd0aCAt
IHRlc3RMZW5ndGg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB1bnRlc3RlZExlbmd0aCAtPSB0ZXN0TGVuZ3RoOworICAgICAgICAgICAgbGVuZ3Ro
IC09IHRlc3RMZW5ndGg7CisgICAgICAgICAgICBieXRlcyArPSB0ZXN0TGVuZ3RoOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdW50ZXN0ZWRMZW5ndGggPSB0ZXN0TGVuZ3RoIC0gMTsK
KyAgICAgICAgICAgIGlmICghdW50ZXN0ZWRMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAqbGVm
dCA9IGxlbmd0aDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICB0ZXN0TGVuZ3RoID0gKHVudGVzdGVkTGVuZ3RoICsgMSkgLyAyOworICAg
IH0KK30KKworU3RyaW5nIFRleHRDb2RlY1dpbjo6ZGVjb2RlKGNvbnN0IGNoYXIqIGJ5dGVzLCBz
aXplX3QgbGVuZ3RoLCBib29sIGZsdXNoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJv
cikKK3sKKyAgICBpZiAoIW1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSkgeworICAgICAgICBtX2Rl
Y29kZUJ1ZmZlci5hcHBlbmQoYnl0ZXMsIGxlbmd0aCk7CisgICAgICAgIGJ5dGVzID0gbV9kZWNv
ZGVCdWZmZXIuZGF0YSgpOworICAgICAgICBsZW5ndGggPSBtX2RlY29kZUJ1ZmZlci5zaXplKCk7
CisgICAgfQorCisgICAgc2l6ZV90IGxlZnQ7CisgICAgVmVjdG9yPFVDaGFyLCA4MTkyPiByZXN1
bHQ7CisgICAgZm9yICg7OykgeworICAgICAgICBkZWNvZGVJbnRlcm5hbChyZXN1bHQsIG1fY29k
ZVBhZ2UsIGJ5dGVzLCBsZW5ndGgsICZsZWZ0KTsKKyAgICAgICAgaWYgKCFsZWZ0KQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKCFmbHVzaCAmJiBsZWZ0IDwgMTYpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICByZXN1bHQuYXBwZW5kKEwnPycpOworICAgICAgICBzYXdF
cnJvciA9IHRydWU7CisgICAgICAgIGlmIChzdG9wT25FcnJvcikKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGxlZnQgPT0gMSkKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGJ5dGVzICs9IGxlbmd0aCAtIGxlZnQgKyAxOworICAg
ICAgICBsZW5ndGggPSBsZWZ0IC0gMTsKKyAgICB9CisgICAgaWYgKGxlZnQgJiYgIWZsdXNoKSB7
CisgICAgICAgIGlmIChtX2RlY29kZUJ1ZmZlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2Rl
Y29kZUJ1ZmZlci5hcHBlbmQoYnl0ZXMgKyBsZW5ndGggLSBsZWZ0LCBsZWZ0KTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBtZW1tb3ZlKG1fZGVjb2RlQnVmZmVyLmRhdGEoKSwgYnl0ZXMg
KyBsZW5ndGggLSBsZWZ0LCBsZWZ0KTsKKyAgICAgICAgICAgIG1fZGVjb2RlQnVmZmVyLnJlc2l6
ZShsZWZ0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBtX2RlY29kZUJ1ZmZlci5j
bGVhcigpOworCisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKK30KKworQ1N0cmlu
ZyBUZXh0Q29kZWNXaW46OmVuY29kZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxl
bmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZykKK3sKKyAgICBpZiAoIWNoYXJhY3RlcnMgfHwgIWxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKworICAgIGludCByZXN1bHRMZW5ndGgg
PSBXaWRlQ2hhclRvTXVsdGlCeXRlKG1fY29kZVBhZ2UsIFdDX0NPTVBPU0lURUNIRUNLLCBjaGFy
YWN0ZXJzLCBsZW5ndGgsIDAsIDAsIDAsIDApOworCisgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
aW1wbGVtZW50IFVuZW5jb2RhYmxlSGFuZGxpbmc6IFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJs
ZXMsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzLCBhbmQgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzLgorCisgICAgaWYgKHJlc3VsdExlbmd0aCA8PSAwKQorICAgICAgICByZXR1cm4g
Ij8iOworCisgICAgY2hhciogY2hhcmFjdGVyQnVmZmVyOworICAgIENTdHJpbmcgcmVzdWx0ID0g
Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChyZXN1bHRMZW5ndGgsIGNoYXJhY3RlckJ1ZmZlcik7
CisKKyAgICBXaWRlQ2hhclRvTXVsdGlCeXRlKG1fY29kZVBhZ2UsIFdDX0NPTVBPU0lURUNIRUNL
LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGNoYXJhY3RlckJ1ZmZlciwgcmVzdWx0TGVuZ3RoLCAwLCAw
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgVGV4dENvZGVjV2luOjplbnVtZXJh
dGVTdXBwb3J0ZWRFbmNvZGluZ3MoRW5jb2RpbmdSZWNlaXZlciYgcmVjZWl2ZXIpCit7CisgICAg
bGFuZ3VhZ2VNYW5hZ2VyKCk7CisgICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0gc3Vw
cG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5kKCk7
ICsraSkgeworICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRvciBq
ID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOworICAgICAgICBpZiAoaiAhPSBrbm93bkNoYXJz
ZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+c2Vjb25kLm1fbmFtZS5kYXRhKCks
IGotPnNlY29uZC5tX2ZyaWVuZGx5TmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LCBqLT5zZWNvbmQubV9jb2RlUGFnZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC93aW4vVGV4dENvZGVjV2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MjNhOTU4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
d2luL1RleHRDb2RlY1dpbi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgPGFwQG55cG9wLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDEwLTIwMTIgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgVGV4dENvZGVjV2luX2gKKyNkZWZpbmUgVGV4dENvZGVjV2luX2gKKworI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0Q29kZWNXaW4gOiBwdWJs
aWMgVGV4dENvZGVjIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckV4dGVuZGVk
RW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIpOworICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKKworICAgIFRleHRDb2Rl
Y1dpbihVSU5UIGNvZGVQYWdlKTsKKyAgICB2aXJ0dWFsIH5UZXh0Q29kZWNXaW4oKTsKKworICAg
IHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBm
bHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpOworICAgIHZpcnR1YWwgQ1N0
cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRs
aW5nKTsKKworICAgIHN0cnVjdCBFbmNvZGluZ0luZm8geworICAgICAgICBTdHJpbmcgbV9lbmNv
ZGluZzsKKyAgICAgICAgU3RyaW5nIG1fZnJpZW5kbHlOYW1lOworICAgIH07CisKKyAgICBzdHJ1
Y3QgRW5jb2RpbmdSZWNlaXZlciB7CisgICAgICAgIC8vIFJldHVybiBmYWxzZSB0byBzdG9wIGVu
dW1lcmF0aW5nLgorICAgICAgICB2aXJ0dWFsIGJvb2wgcmVjZWl2ZShjb25zdCBjaGFyKiBlbmNv
ZGluZywgY29uc3Qgd2NoYXJfdCogZnJpZW5kbHlOYW1lLCB1bnNpZ25lZCBpbnQgY29kZVBhZ2Up
ID0gMDsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgZW51bWVyYXRlU3VwcG9ydGVkRW5jb2Rp
bmdzKEVuY29kaW5nUmVjZWl2ZXImKTsKKworcHJpdmF0ZToKKyAgICBVSU5UIG1fY29kZVBhZ2U7
CisgICAgVmVjdG9yPGNoYXI+IG1fZGVjb2RlQnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVGV4dENvZGVjV2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDBjNGVjNTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC93aW5jZS9UZXh0Q29kZWNXaW5DRS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwzMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmls
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEg
UGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpIHdpbGwgYmUgdXNl
ZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dENvZGVjV2lu
Q0UuaCIKLQotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgPG1sYW5nLmg+Ci0jaW5j
bHVkZSA8d2luYmFzZS5oPgotI2luY2x1ZGUgPHdpbm5scy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBDaGFyc2V0
SW5mbyB7Ci0gICAgQ1N0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fZnJpZW5kbHlOYW1lOwot
ICAgIFVJTlQgbV9jb2RlUGFnZTsKLSAgICBWZWN0b3I8Q1N0cmluZz4gbV9hbGlhc2VzOwotfTsK
LQotY2xhc3MgTGFuZ3VhZ2VNYW5hZ2VyIHsKLXByaXZhdGU6Ci0gICAgTGFuZ3VhZ2VNYW5hZ2Vy
KCk7Ci0KLSAgICBmcmllbmQgTGFuZ3VhZ2VNYW5hZ2VyJiBsYW5ndWFnZU1hbmFnZXIoKTsKLX07
Ci0KLS8vIFVzYWdlOiBhIGxvb2t1cCB0YWJsZSB1c2VkIHRvIGdldCBDaGFyc2V0SW5mbyB3aXRo
IGNvZGUgcGFnZSBJRC4KLS8vIEtleTogY29kZSBwYWdlIElELiBWYWx1ZTogY2hhcnNldCBpbmZv
cm1hdGlvbi4KLXN0YXRpYyBIYXNoTWFwPFVJTlQsIENTdHJpbmc+JiBjb2RlUGFnZUNoYXJzZXRz
KCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxVSU5ULCBDU3RyaW5nPiBjYzsKLSAgICByZXR1cm4g
Y2M7Ci19Ci0KLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+JiBrbm93bkNoYXJz
ZXRzKCkKLXsKLSAgICBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPiBrYzsKLSAg
ICByZXR1cm4ga2M7Ci19Ci0KLS8vIFVzYWdlOiBhIG1hcCB0aGF0IHN0b3JlcyBjaGFyc2V0cyB0
aGF0IGFyZSBzdXBwb3J0ZWQgYnkgc3lzdGVtLiBTb3J0ZWQgYnkgbmFtZS4KLS8vIEtleTogY2hh
cnNldC4gVmFsdWU6IGNvZGUgcGFnZSBJRC4KLXR5cGVkZWYgSGFzaFNldDxTdHJpbmc+IENoYXJz
ZXRTZXQ7Ci1zdGF0aWMgQ2hhcnNldFNldCYgc3VwcG9ydGVkQ2hhcnNldHMoKQotewotICAgIHN0
YXRpYyBDaGFyc2V0U2V0IHNsOwotICAgIHJldHVybiBzbDsKLX0KLQotc3RhdGljIExhbmd1YWdl
TWFuYWdlciYgbGFuZ3VhZ2VNYW5hZ2VyKCkKLXsKLSAgICBzdGF0aWMgTGFuZ3VhZ2VNYW5hZ2Vy
IGxtOwotICAgIHJldHVybiBsbTsKLX0KLQotTGFuZ3VhZ2VNYW5hZ2VyOjpMYW5ndWFnZU1hbmFn
ZXIoKQotewotICAgIElFbnVtQ29kZVBhZ2UqIGVudW1JbnRlcmZhY2U7Ci0gICAgSU11bHRpTGFu
Z3VhZ2UqIG1saSA9IEZvbnRDYWNoZTo6Z2V0TXVsdGlMYW5ndWFnZUludGVyZmFjZSgpOwotICAg
IGlmIChtbGkgJiYgU19PSyA9PSBtbGktPkVudW1Db2RlUGFnZXMoTUlNRUNPTlRGX0JST1dTRVIs
ICZlbnVtSW50ZXJmYWNlKSkgewotICAgICAgICBNSU1FQ1BJTkZPIGNwSW5mbzsKLSAgICAgICAg
VUxPTkcgY2NwSW5mbzsKLSAgICAgICAgd2hpbGUgKFNfT0sgPT0gZW51bUludGVyZmFjZS0+TmV4
dCgxLCAmY3BJbmZvLCAmY2NwSW5mbykgJiYgY2NwSW5mbykgewotICAgICAgICAgICAgaWYgKCFJ
c1ZhbGlkQ29kZVBhZ2UoY3BJbmZvLnVpQ29kZVBhZ2UpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICBIYXNoTWFwPFVJTlQsIENTdHJpbmc+OjppdGVyYXRvciBpID0g
Y29kZVBhZ2VDaGFyc2V0cygpLmZpbmQoY3BJbmZvLnVpQ29kZVBhZ2UpOwotCi0gICAgICAgICAg
ICBDU3RyaW5nIG5hbWUoU3RyaW5nKGNwSW5mby53c3pXZWJDaGFyc2V0KS5sYXRpbjEoKSk7Ci0g
ICAgICAgICAgICBpZiAoaSA9PSBjb2RlUGFnZUNoYXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAg
ICAgICAgICBDaGFyc2V0SW5mbyBpbmZvOwotICAgICAgICAgICAgICAgIGluZm8ubV9jb2RlUGFn
ZSA9IGNwSW5mby51aUNvZGVQYWdlOwotICAgICAgICAgICAgICAgIGtub3duQ2hhcnNldHMoKS5z
ZXQobmFtZS5kYXRhKCksIGluZm8pOwotICAgICAgICAgICAgICAgIGkgPSBjb2RlUGFnZUNoYXJz
ZXRzKCkuc2V0KGNwSW5mby51aUNvZGVQYWdlLCBuYW1lKS5pdGVyYXRvcjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChpICE9IGNvZGVQYWdlQ2hhcnNldHMoKS5lbmQoKSkgewotICAg
ICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGogPSBr
bm93bkNoYXJzZXRzKCkuZmluZChTdHJpbmcoaS0+c2Vjb25kLmRhdGEoKSwgaS0+c2Vjb25kLmxl
bmd0aCgpKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGogIT0ga25vd25DaGFyc2V0cygpLmVu
ZCgpKTsKLSAgICAgICAgICAgICAgICBDaGFyc2V0SW5mbyYgaW5mbyA9IGotPnNlY29uZDsKLSAg
ICAgICAgICAgICAgICBpbmZvLm1fbmFtZSA9IGktPnNlY29uZC5kYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgaW5mby5tX2ZyaWVuZGx5TmFtZSA9IGNwSW5mby53c3pEZXNjcmlwdGlvbjsKLSAgICAg
ICAgICAgICAgICBpbmZvLm1fYWxpYXNlcy5hcHBlbmQobmFtZSk7Ci0gICAgICAgICAgICAgICAg
aW5mby5tX2FsaWFzZXMuYXBwZW5kKFN0cmluZyhjcEluZm8ud3N6SGVhZGVyQ2hhcnNldCkubGF0
aW4xKCkpOwotICAgICAgICAgICAgICAgIGluZm8ubV9hbGlhc2VzLmFwcGVuZChTdHJpbmcoY3BJ
bmZvLndzekJvZHlDaGFyc2V0KS5sYXRpbjEoKSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGNw
TmFtZSA9ICJjcCIgKyBTdHJpbmc6Om51bWJlcihjcEluZm8udWlDb2RlUGFnZSk7Ci0gICAgICAg
ICAgICAgICAgaW5mby5tX2FsaWFzZXMuYXBwZW5kKGNwTmFtZS5sYXRpbjEoKSk7Ci0gICAgICAg
ICAgICAgICAgc3VwcG9ydGVkQ2hhcnNldHMoKS5hZGQoaS0+c2Vjb25kLmRhdGEoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZW51bUludGVyZmFjZS0+UmVsZWFzZSgpOwot
ICAgIH0KLX0KLQotc3RhdGljIFVJTlQgZ2V0Q29kZVBhZ2UoY29uc3QgY2hhciogbmFtZSkKLXsK
LSAgICAvLyBFeHBsaWNpdGx5IHVzZSBhICJjb25zdCIgcmVmZXJlbmNlIHRvIGZpeCB0aGUgc2ls
bHkgVlMgYnVpbGQgZXJyb3IKLSAgICAvLyBzYXlpbmcgIj09IiBpcyBub3QgZm91bmQgZm9yIGNv
bnN0X2l0ZXJhdG9yIGFuZCBpdGVyYXRvcgotICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDaGFy
c2V0SW5mbz4mIGNoYXJzZXRzID0ga25vd25DaGFyc2V0cygpOwotICAgIEhhc2hNYXA8U3RyaW5n
LCBDaGFyc2V0SW5mbz46OmNvbnN0X2l0ZXJhdG9yIGkgPSBjaGFyc2V0cy5maW5kKG5hbWUpOwot
ICAgIHJldHVybiBpID09IGNoYXJzZXRzLmVuZCgpID8gQ1BfQUNQIDogaS0+c2Vjb25kLm1fY29k
ZVBhZ2U7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gbmV3VGV4dENvZGVjV2lu
Q0UoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBUZXh0Q29kZWNXaW5DRShnZXRDb2RlUGFnZShlbmNvZGluZy5uYW1l
KCkpKSk7Ci19Ci0KLVRleHRDb2RlY1dpbkNFOjpUZXh0Q29kZWNXaW5DRShVSU5UIGNvZGVQYWdl
KQotICAgIDogbV9jb2RlUGFnZShjb2RlUGFnZSkKLXsKLX0KLQotVGV4dENvZGVjV2luQ0U6On5U
ZXh0Q29kZWNXaW5DRSgpCi17Ci19Ci0KLXZvaWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lzdGVyRXh0
ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCi17Ci0g
ICAgbGFuZ3VhZ2VNYW5hZ2VyKCk7Ci0gICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBpID0g
c3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCkuZW5k
KCk7ICsraSkgewotICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVyYXRv
ciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwotICAgICAgICBpZiAoaiAhPSBrbm93bkNo
YXJzZXRzKCkuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1l
LmRhdGEoKSwgai0+c2Vjb25kLm1fbmFtZS5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChWZWN0
b3I8Q1N0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGFsaWFzID0gai0+c2Vjb25kLm1fYWxpYXNlcy5i
ZWdpbigpOyBhbGlhcyAhPSBqLT5zZWNvbmQubV9hbGlhc2VzLmVuZCgpOyArK2FsaWFzKQotICAg
ICAgICAgICAgICAgIHJlZ2lzdHJhcihhbGlhcy0+ZGF0YSgpLCBqLT5zZWNvbmQubV9uYW1lLmRh
dGEoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGV4dENvZGVjV2luQ0U6OnJlZ2lz
dGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICBs
YW5ndWFnZU1hbmFnZXIoKTsKLSAgICBmb3IgKENoYXJzZXRTZXQ6Oml0ZXJhdG9yIGkgPSBzdXBw
b3J0ZWRDaGFyc2V0cygpLmJlZ2luKCk7IGkgIT0gc3VwcG9ydGVkQ2hhcnNldHMoKS5lbmQoKTsg
KytpKSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBDaGFyc2V0SW5mbz46Oml0ZXJhdG9yIGog
PSBrbm93bkNoYXJzZXRzKCkuZmluZCgqaSk7Ci0gICAgICAgIGlmIChqICE9IGtub3duQ2hhcnNl
dHMoKS5lbmQoKSkKLSAgICAgICAgICAgIHJlZ2lzdHJhcihqLT5zZWNvbmQubV9uYW1lLmRhdGEo
KSwgbmV3VGV4dENvZGVjV2luQ0UsIDApOwotICAgIH0KLX0KLQotc3RhdGljIERXT1JEIGdldENv
ZGVQYWdlRmxhZ3MoVUlOVCBjb2RlUGFnZSkKLXsKLSAgICBpZiAoY29kZVBhZ2UgPT0gNDIpIC8v
IFN5bWJvbAotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIE1pY3Jvc29mdCBzYXlzIHRoZSBm
bGFnIG11c3QgYmUgMCBmb3IgdGhlIGZvbGxvd2luZyBjb2RlIHBhZ2VzCi0gICAgaWYgKGNvZGVQ
YWdlID4gNTAwMDApIHsKLSAgICAgICAgaWYgKChjb2RlUGFnZSA+PSA1MDIyMCAmJiBjb2RlUGFn
ZSA8PSA1MDIyMikKLSAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUwMjI1Ci0gICAgICAgICAg
ICB8fCBjb2RlUGFnZSA9PSA1MDIyNwotICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNTAyMjkK
LSAgICAgICAgICAgIHx8IGNvZGVQYWdlID09IDUyOTM2Ci0gICAgICAgICAgICB8fCBjb2RlUGFn
ZSA9PSA1NDkzNgotICAgICAgICAgICAgfHwgKGNvZGVQYWdlID49IDU3MDAyICYmIGNvZGVQYWdl
IDw9IDU3MDAxKQotICAgICAgICAgICAgfHwgY29kZVBhZ2UgPT0gNjUwMDAgLy8gVVRGLTcKLSAg
ICAgICAgICAgICkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBN
Ql9QUkVDT01QT1NFRCB8IE1CX0VSUl9JTlZBTElEX0NIQVJTOwotfQotCi1zdGF0aWMgaW5saW5l
IGNvbnN0IGNoYXIqIGZpbmRGaXJzdE5vbkFzY2lpQ2hhcmFjdGVyKGNvbnN0IGNoYXIqIGJ5dGVz
LCBzaXplX3QgbGVuZ3RoKQotewotICAgIGZvciAoY29uc3QgY2hhciogYnl0ZXNFbmQgPSBieXRl
cyArIGxlbmd0aDsgYnl0ZXMgPCBieXRlc0VuZDsgKytieXRlcykgewotICAgICAgICBpZiAoKmJ5
dGVzICYgMHg4MCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gYnl0ZXM7
Ci19Ci0KLXN0YXRpYyB2b2lkIGRlY29kZUludGVybmFsKFZlY3RvcjxVQ2hhciwgODE5Mj4mIHJl
c3VsdCwgVUlOVCBjb2RlUGFnZSwgY29uc3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIHNp
emVfdCogbGVmdCkKLXsKLSAgICAqbGVmdCA9IGxlbmd0aDsKLSAgICBpZiAoIWJ5dGVzIHx8ICFs
ZW5ndGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIERXT1JEIGZsYWdzID0gZ2V0Q29kZVBhZ2VG
bGFncyhjb2RlUGFnZSk7Ci0KLSAgICBpbnQgdGVzdExlbmd0aCA9IGxlbmd0aDsKLSAgICBpbnQg
dW50ZXN0ZWRMZW5ndGggPSBsZW5ndGg7Ci0gICAgZm9yICg7OykgewotICAgICAgICBpbnQgcmVz
dWx0TGVuZ3RoID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0
ZXN0TGVuZ3RoLCAwLCAwKTsKLQotICAgICAgICBpZiAocmVzdWx0TGVuZ3RoID4gMCkgewotICAg
ICAgICAgICAgaW50IG9sZFNpemUgPSByZXN1bHQuc2l6ZSgpOwotICAgICAgICAgICAgcmVzdWx0
LnJlc2l6ZShvbGRTaXplICsgcmVzdWx0TGVuZ3RoKTsKLQotICAgICAgICAgICAgTXVsdGlCeXRl
VG9XaWRlQ2hhcihjb2RlUGFnZSwgZmxhZ3MsIGJ5dGVzLCB0ZXN0TGVuZ3RoLCByZXN1bHQuZGF0
YSgpICsgb2xkU2l6ZSwgcmVzdWx0TGVuZ3RoKTsKLQotICAgICAgICAgICAgaWYgKHRlc3RMZW5n
dGggPT0gdW50ZXN0ZWRMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAqbGVmdCA9IGxlbmd0aCAt
IHRlc3RMZW5ndGg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB1bnRlc3RlZExlbmd0aCAtPSB0ZXN0TGVuZ3RoOwotICAgICAgICAgICAgbGVuZ3Ro
IC09IHRlc3RMZW5ndGg7Ci0gICAgICAgICAgICBieXRlcyArPSB0ZXN0TGVuZ3RoOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgdW50ZXN0ZWRMZW5ndGggPSB0ZXN0TGVuZ3RoIC0gMTsK
LSAgICAgICAgICAgIGlmICghdW50ZXN0ZWRMZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAqbGVm
dCA9IGxlbmd0aDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICB0ZXN0TGVuZ3RoID0gKHVudGVzdGVkTGVuZ3RoICsgMSkgLyAyOwotICAg
IH0KLX0KLQotU3RyaW5nIFRleHRDb2RlY1dpbkNFOjpkZWNvZGUoY29uc3QgY2hhciogYnl0ZXMs
IHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vy
cm9yKQotewotICAgIGlmICghbV9kZWNvZGVCdWZmZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
ZGVjb2RlQnVmZmVyLmFwcGVuZChieXRlcywgbGVuZ3RoKTsKLSAgICAgICAgYnl0ZXMgPSBtX2Rl
Y29kZUJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIGxlbmd0aCA9IG1fZGVjb2RlQnVmZmVyLnNpemUo
KTsKLSAgICB9Ci0KLSAgICBzaXplX3QgbGVmdDsKLSAgICBWZWN0b3I8VUNoYXIsIDgxOTI+IHJl
c3VsdDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGRlY29kZUludGVybmFsKHJlc3VsdCwgbV9j
b2RlUGFnZSwgYnl0ZXMsIGxlbmd0aCwgJmxlZnQpOwotICAgICAgICBpZiAoIWxlZnQpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoIWZsdXNoICYmIGxlZnQgPCAxNikKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoTCc/Jyk7Ci0gICAgICAgIHNh
d0Vycm9yID0gdHJ1ZTsKLSAgICAgICAgaWYgKHN0b3BPbkVycm9yKQotICAgICAgICAgICAgcmV0
dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKLQotICAgICAgICBpZiAobGVmdCA9PSAxKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYnl0ZXMgKz0gbGVuZ3RoIC0gbGVmdCArIDE7Ci0g
ICAgICAgIGxlbmd0aCA9IGxlZnQgLSAxOwotICAgIH0KLSAgICBpZiAobGVmdCAmJiAhZmx1c2gp
IHsKLSAgICAgICAgaWYgKG1fZGVjb2RlQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
ZGVjb2RlQnVmZmVyLmFwcGVuZChieXRlcyArIGxlbmd0aCAtIGxlZnQsIGxlZnQpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIG1lbW1vdmUobV9kZWNvZGVCdWZmZXIuZGF0YSgpLCBieXRl
cyArIGxlbmd0aCAtIGxlZnQsIGxlZnQpOwotICAgICAgICAgICAgbV9kZWNvZGVCdWZmZXIucmVz
aXplKGxlZnQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fZGVjb2RlQnVmZmVy
LmNsZWFyKCk7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwotfQotCi1DU3Ry
aW5nIFRleHRDb2RlY1dpbkNFOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgsIFVuZW5jb2RhYmxlSGFuZGxpbmcpCi17Ci0gICAgaWYgKCFjaGFyYWN0ZXJzIHx8
ICFsZW5ndGgpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7Ci0KLSAgICBpbnQgcmVzdWx0TGVu
Z3RoID0gV2lkZUNoYXJUb011bHRpQnl0ZShtX2NvZGVQYWdlLCBXQ19DT01QT1NJVEVDSEVDSywg
Y2hhcmFjdGVycywgbGVuZ3RoLCAwLCAwLCAwLCAwKTsKLQotICAgIC8vIEZJWE1FOiBXZSBuZWVk
IHRvIGltcGxlbWVudCBVbmVuY29kYWJsZUhhbmRsaW5nOiBRdWVzdGlvbk1hcmtzRm9yVW5lbmNv
ZGFibGVzLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcywgYW5kIFVSTEVuY29kZWRFbnRpdGllc0Zv
clVuZW5jb2RhYmxlcy4KLQotICAgIGlmIChyZXN1bHRMZW5ndGggPD0gMCkKLSAgICAgICAgcmV0
dXJuICI/IjsKLQotICAgIGNoYXIqIGNoYXJhY3RlckJ1ZmZlcjsKLSAgICBDU3RyaW5nIHJlc3Vs
dCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQocmVzdWx0TGVuZ3RoLCBjaGFyYWN0ZXJCdWZm
ZXIpOwotCi0gICAgV2lkZUNoYXJUb011bHRpQnl0ZShtX2NvZGVQYWdlLCBXQ19DT01QT1NJVEVD
SEVDSywgY2hhcmFjdGVycywgbGVuZ3RoLCBjaGFyYWN0ZXJCdWZmZXIsIHJlc3VsdExlbmd0aCwg
MCwgMCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFRleHRDb2RlY1dpbkNFOjpl
bnVtZXJhdGVTdXBwb3J0ZWRFbmNvZGluZ3MoRW5jb2RpbmdSZWNlaXZlciYgcmVjZWl2ZXIpCi17
Ci0gICAgbGFuZ3VhZ2VNYW5hZ2VyKCk7Ci0gICAgZm9yIChDaGFyc2V0U2V0OjppdGVyYXRvciBp
ID0gc3VwcG9ydGVkQ2hhcnNldHMoKS5iZWdpbigpOyBpICE9IHN1cHBvcnRlZENoYXJzZXRzKCku
ZW5kKCk7ICsraSkgewotICAgICAgICBIYXNoTWFwPFN0cmluZywgQ2hhcnNldEluZm8+OjppdGVy
YXRvciBqID0ga25vd25DaGFyc2V0cygpLmZpbmQoKmkpOwotICAgICAgICBpZiAoaiAhPSBrbm93
bkNoYXJzZXRzKCkuZW5kKCkgJiYgIXJlY2VpdmVyLnJlY2VpdmUoai0+c2Vjb25kLm1fbmFtZS5k
YXRhKCksIGotPnNlY29uZC5tX2ZyaWVuZGx5TmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCBqLT5zZWNvbmQubV9jb2RlUGFnZSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvd2luY2UvVGV4dENvZGVjV2luQ0UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNTAwYThjZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L3dpbmNlL1RleHRDb2RlY1dpbkNFLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292
IDxhcEBueXBvcC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUs
IEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBh
cm9nYS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVGV4dENvZGVjV2luQ0VfaAotI2RlZmluZSBUZXh0
Q29kZWNXaW5DRV9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlRl
eHRDb2RlYy5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgVGV4dENvZGVjV2luQ0UgOiBwdWJsaWMgVGV4dENvZGVjIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgdm9pZCByZWdpc3RlckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3Ry
YXIpOwotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4dENvZGVjUmVn
aXN0cmFyKTsKLQotICAgIFRleHRDb2RlY1dpbkNFKFVJTlQgY29kZVBhZ2UpOwotICAgIHZpcnR1
YWwgflRleHRDb2RlY1dpbkNFKCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJyb3IsIGJvb2wm
IHNhd0Vycm9yKTsKLSAgICB2aXJ0dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6
ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyk7Ci0KLSAgICBzdHJ1Y3QgRW5jb2RpbmdJ
bmZvIHsKLSAgICAgICAgU3RyaW5nIG1fZW5jb2Rpbmc7Ci0gICAgICAgIFN0cmluZyBtX2ZyaWVu
ZGx5TmFtZTsKLSAgICB9OwotCi0gICAgc3RydWN0IEVuY29kaW5nUmVjZWl2ZXIgewotICAgICAg
ICAvLyBSZXR1cm4gZmFsc2UgdG8gc3RvcCBlbnVtZXJhdGluZy4KLSAgICAgICAgdmlydHVhbCBi
b29sIHJlY2VpdmUoY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IHdjaGFyX3QqIGZyaWVuZGx5
TmFtZSwgdW5zaWduZWQgaW50IGNvZGVQYWdlKSA9IDA7Ci0gICAgfTsKLQotICAgIHN0YXRpYyB2
b2lkIGVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyhFbmNvZGluZ1JlY2VpdmVyJiByZWNlaXZl
cik7Ci0KLXByaXZhdGU6Ci0gICAgVUlOVCBtX2NvZGVQYWdlOwotICAgIFZlY3RvcjxjaGFyPiBt
X2RlY29kZUJ1ZmZlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8v
IFRleHRDb2RlY1dpbkNFX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>