<?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>54298</bug_id>
          
          <creation_ts>2011-02-11 11:15:59 -0800</creation_ts>
          <short_desc>A little more encapsulation for the heap: Removed CollectorHeapIterator</short_desc>
          <delta_ts>2011-02-15 09:09:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>349860</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-11 11:15:59 -0800</bug_when>
    <thetext>A little more encapsulation for the heap: Removed CollectorHeapIterator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349865</commentid>
    <comment_count>1</comment_count>
      <attachid>82150</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-11 11:26:19 -0800</bug_when>
    <thetext>Created attachment 82150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349894</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-11 11:55:16 -0800</bug_when>
    <thetext>Attachment 82150 did not build on qt:
Build output: http://queues.webkit.org/results/7886725</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349901</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-11 12:05:21 -0800</bug_when>
    <thetext>Attachment 82150 did not build on win:
Build output: http://queues.webkit.org/results/7875684</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350011</commentid>
    <comment_count>4</comment_count>
      <attachid>82172</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-11 14:08:29 -0800</bug_when>
    <thetext>Created attachment 82172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350049</commentid>
    <comment_count>5</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-11 14:40:10 -0800</bug_when>
    <thetext>Attachment 82172 did not build on qt:
Build output: http://queues.webkit.org/results/7884690</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350054</commentid>
    <comment_count>6</comment_count>
      <attachid>82182</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-11 14:43:47 -0800</bug_when>
    <thetext>Created attachment 82182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350099</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-11 15:31:27 -0800</bug_when>
    <thetext>Committed r78382: &lt;http://trac.webkit.org/changeset/78382&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350113</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-11 15:43:09 -0800</bug_when>
    <thetext>Attachment 82172 did not build on win:
Build output: http://queues.webkit.org/results/7870793</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350123</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-11 15:50:36 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78382 might have broken Qt Linux Release, Qt Linux Release minimal, Qt Linux ARMv5 Release, Qt Linux ARMv7 Release, and Qt Windows 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351330</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-15 09:09:01 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; http://trac.webkit.org/changeset/78382 might have broken Qt Linux Release, Qt Linux Release minimal, Qt Linux ARMv5 Release, Qt Linux ARMv7 Release, and Qt Windows 32-bit Release

Sorry for this annoyance, it was an incremental build problem.
I filed a new bug report to fix it: https://bugs.webkit.org/show_bug.cgi?id=54466</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82150</attachid>
            <date>2011-02-11 11:26:19 -0800</date>
            <delta_ts>2011-02-11 14:08:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54298-20110211112618.patch</filename>
            <type>text/plain</type>
            <size>22170</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzgzNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAK
KzIwMTEtMDItMTEgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGxpdHRsZSBtb3JlIGVu
Y2Fwc3VsYXRpb24gZm9yIHRoZSBoZWFwOiBSZW1vdmVkIENvbGxlY3RvckhlYXBJdGVyYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQyOTgKKyAg
ICAgICAgCisgICAgICAgIENvbGxlY3RvckhlYXBJdGVyYXRvciBpcyBhIEdvZCBvYmplY3QgdGhh
dCBrbm93cyB0aGUgaW50ZXJuYWxzIG9mIGVhY2gKKyAgICAgICAgb2YgdGhlIHBpZWNlcyBvZiB0
aGUgaGVhcC4gVGhpcyB1bmRlcm1pbmVzIHRoZSBlbmNhcHN1bGF0aW9uIEknbSB0cnlpbmcKKyAg
ICAgICAgdG8gYWNoaWV2ZSBieSBzcGxpdHRpbmcgY29uY2VwdHMgaW50byBkaWZmZXJlbnQgY2xh
c3Nlcy4KKyAgICAgICAgCisgICAgICAgIEFzIGFuIGFsdGVybmF0aXZlLCBJJ3ZlIGdpdmVuIGVh
Y2ggY2xhc3MgYSBmb3JFYWNoIGl0ZXJhdGlvbiBmdW5jdGlvbiwKKyAgICAgICAgd2hpY2ggdGFr
ZXMgYSBmdW5jdG9yIGFzIGFuIGFyZ3VtZW50LiBOb3csIGVhY2ggY2xhc3MganVzdCBuZWVkcyB0
bworICAgICAgICBrbm93IGhvdyB0byBpdGVyYXRlIHRoZSB0aGluZ3MgaXQga25vd3MgYWJvdXQu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5l
eHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOiBSZW1vdmVk
IENvbGxlY3RvckhlYXBJdGVyYXRvci4KKworICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6UmVjb21waWxlcjo6UmVjb21waWxlcik6CisgICAgICAgIChKU0M6
OlJlY29tcGlsZXI6On5SZWNvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6UmVjb21waWxlcjo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cyk6IFVwZGF0ZWQgdG8gdXNlIGZvckVhY2ggaW50ZXJmYWNlCisgICAgICAgIGluc3RlYWQgb2Yg
YW4gaXRlcmF0b3IuCisKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5o
OiBSZW1vdmVkLgorCisgICAgICAgICogcnVudGltZS9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6
VHlwZUNvdW50ZXI6OlR5cGVDb3VudGVyKToKKyAgICAgICAgKEpTQzo6VHlwZUNvdW50ZXI6OnR5
cGVOYW1lKToKKyAgICAgICAgKEpTQzo6VHlwZUNvdW50ZXI6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpUeXBlQ291bnRlcjo6dGFrZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpvYmplY3RUeXBlQ291bnRz
KTogQWRkZWQgZm9yRWFjaCBhbmQgcmVtb3ZlZCBpdGVyYXRvci4KKworICAgICAgICAqIHJ1bnRp
bWUvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoKToKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OlJlY29tcGlsZXI6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25z
KToKKworICAgICAgICAqIHJ1bnRpbWUvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OmZvckVhY2gpOiBBZGRlZCBmb3JFYWNoLiBSZW1vdmVkIGZyaWVuZCBkZWNsYXJh
dGlvbgorICAgICAgICBmb3IgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLiBOb3csIHdlIGNhbiBtYWtl
IGFsbCBvdXIgZGF0YSBwcml2YXRlIGFuZAorICAgICAgICBjaGFuZ2UgaXQgd2l0aG91dCBicmVh
a2luZyBhbnkgb3RoZXIgY2xhc3Nlcy4KKworICAgICAgICAqIHJ1bnRpbWUvTWFya2VkU3BhY2Uu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmZvckVhY2gpOiBBZGRlZCBmb3JFYWNoIGFuZCByZW1vdmVkIGl0ZXJhdG9yLgor
CiAyMDExLTAyLTExICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUuYW0JKHJldmlzaW9uIDc4Mjg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDYgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3Bh
Y2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcC5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCShyZXZpc2lvbiA3ODI4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxMCArMjA1LDggQEAgX19a
TjNKU0MyNGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvckVQTlNfOQogX19aTjNKU0MyNWV2YWx1YXRl
SW5HbG9iYWxDYWxsRnJhbWVFUktOU183VVN0cmluZ0VSTlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9i
YWxPYmplY3RFCiBfX1pOM0pTQzM1Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb25F
UE5TXzEySlNHbG9iYWxEYXRhRQogX19aTjNKU0MzTmFORQotX19aTjNKU0M0SGVhcDE0cHJpbWFy
eUhlYXBFbmRFdgogX19aTjNKU0M0SGVhcDE1YWRkV2Vha0dDSGFuZGxlRVBOU182SlNDZWxsRQog
X19aTjNKU0M0SGVhcDE2b2JqZWN0VHlwZUNvdW50c0V2Ci1fX1pOM0pTQzRIZWFwMTZwcmltYXJ5
SGVhcEJlZ2luRXYKIF9fWk4zSlNDNEhlYXAxN2NvbGxlY3RBbGxHYXJiYWdlRXYKIF9fWk4zSlND
NEhlYXAxN2dsb2JhbE9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhlYXAxOXNldEFjdGl2aXR5Q2Fs
bGJhY2tFTjNXVEYxMFBhc3NPd25QdHJJTlNfMThHQ0FjdGl2aXR5Q2FsbGJhY2tFRUUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiA3ODI4
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAKICAgICAgICAgICAgICdydW50aW1lL01hcmtlZFNw
YWNlLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSGVhcC5jcHAnLAogICAgICAgICAgICAgJ3J1
bnRpbWUvSGVhcC5oJywKLSAgICAgICAgICAgICdydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRv
ci5oJywKICAgICAgICAgICAgICdydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCcsCiAgICAg
ICAgICAgICAncnVudGltZS9Db21tb25JZGVudGlmaWVycy5oJywKICAgICAgICAgICAgICdydW50
aW1lL0NvbXBsZXRpb24uY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lvbiA3ODI4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTAsMTAgKzYxMCw2IEBA
CiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1
bnRpbWVcQ29sbGVjdG9ySGVhcEludHJvc3BlY3Rvci5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXENvbW1vbklkZW50aWZpZXJz
LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDc4Mjg0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAKLSNpbmNs
dWRlICJDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1
ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgpAQCAtMzIsNiArMzEs
NTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFJlY29tcGlsZXIgeworcHVibGljOgor
ICAgIFJlY29tcGlsZXIoRGVidWdnZXIqKTsKKyAgICB+UmVjb21waWxlcigpOworICAgIHZvaWQg
b3BlcmF0b3IoKShKU0NlbGwqKTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hTZXQ8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4gRnVuY3Rpb25FeGVjdXRhYmxlU2V0OworICAgIHR5cGVkZWYgSGFz
aE1hcDxTb3VyY2VQcm92aWRlciosIEV4ZWNTdGF0ZSo+IFNvdXJjZVByb3ZpZGVyTWFwOworICAg
IAorICAgIERlYnVnZ2VyKiBtX2RlYnVnZ2VyOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZVNldCBt
X2Z1bmN0aW9uRXhlY3V0YWJsZXM7CisgICAgU291cmNlUHJvdmlkZXJNYXAgbV9zb3VyY2VQcm92
aWRlcnM7Cit9OworCitpbmxpbmUgUmVjb21waWxlcjo6UmVjb21waWxlcihEZWJ1Z2dlciogZGVi
dWdnZXIpCisgICAgOiBtX2RlYnVnZ2VyKGRlYnVnZ2VyKQoreworfQorCitpbmxpbmUgUmVjb21w
aWxlcjo6flJlY29tcGlsZXIoKQoreworICAgIC8vIENhbGwgc291cmNlUGFyc2VkKCkgYWZ0ZXIg
cmVwYXJzaW5nIGFsbCBmdW5jdGlvbnMgYmVjYXVzZSBpdCB3aWxsIGV4ZWN1dGUKKyAgICAvLyBK
YXZhU2NyaXB0IGluIHRoZSBpbnNwZWN0b3IuCisgICAgU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fc291cmNlUHJvdmlkZXJzLmVuZCgpOworICAgIGZvciAoU291cmNl
UHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3NvdXJjZVByb3ZpZGVycy5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBtX2RlYnVnZ2VyLT5zb3VyY2VQYXJz
ZWQoaXRlci0+c2Vjb25kLCBpdGVyLT5maXJzdCwgLTEsIFVTdHJpbmcoKSk7Cit9CisKK2lubGlu
ZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICgh
Y2VsbC0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pKQorICAgICAgICByZXR1cm47CisKKyAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oY2VsbCk7CisgICAgaWYgKGZ1bmN0
aW9uLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFi
bGUoKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBmdW5jdGlvbiBpcyBhbHJlYWR5IGluIHRoZSBz
ZXQgLSBpZiBzbywKKyAgICAvLyB3ZSd2ZSBhbHJlYWR5IHJldHJhbnNsYXRlZCBpdCwgbm90aGlu
ZyB0byBkbyBoZXJlLgorICAgIGlmICghbV9mdW5jdGlvbkV4ZWN1dGFibGVzLmFkZChleGVjdXRh
YmxlKS5zZWNvbmQpCisgICAgICAgIHJldHVybjsKKworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZ1
bmN0aW9uLT5zY29wZSgpLmdsb2JhbE9iamVjdCgpLT5KU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhl
YygpOworICAgIGV4ZWN1dGFibGUtPmRpc2NhcmRDb2RlKCk7CisgICAgaWYgKG1fZGVidWdnZXIg
PT0gZnVuY3Rpb24tPnNjb3BlKCkuZ2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCisgICAgICAg
IG1fc291cmNlUHJvdmlkZXJzLmFkZChleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBl
eGVjKTsKK30KKwogRGVidWdnZXI6On5EZWJ1Z2dlcigpCiB7CiAgICAgSGFzaFNldDxKU0dsb2Jh
bE9iamVjdCo+OjppdGVyYXRvciBlbmQgPSBtX2dsb2JhbE9iamVjdHMuZW5kKCk7CkBAIC02MSw0
MCArMTExLDggQEAgdm9pZCBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoSgogICAg
IGlmIChnbG9iYWxEYXRhLT5keW5hbWljR2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAK
LSAgICB0eXBlZGVmIEhhc2hTZXQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4gRnVuY3Rpb25FeGVjdXRh
YmxlU2V0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxTb3VyY2VQcm92aWRlciosIEV4ZWNTdGF0ZSo+
IFNvdXJjZVByb3ZpZGVyTWFwOwotCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlU2V0IGZ1bmN0aW9u
RXhlY3V0YWJsZXM7Ci0gICAgU291cmNlUHJvdmlkZXJNYXAgc291cmNlUHJvdmlkZXJzOwotCi0g
ICAgTGl2ZU9iamVjdEl0ZXJhdG9yIGl0ID0gZ2xvYmFsRGF0YS0+aGVhcC5wcmltYXJ5SGVhcEJl
Z2luKCk7Ci0gICAgTGl2ZU9iamVjdEl0ZXJhdG9yIGhlYXBFbmQgPSBnbG9iYWxEYXRhLT5oZWFw
LnByaW1hcnlIZWFwRW5kKCk7Ci0gICAgZm9yICggOyBpdCAhPSBoZWFwRW5kOyArK2l0KSB7Ci0g
ICAgICAgIGlmICghKCppdCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlv
bigqaXQpOwotICAgICAgICBpZiAoZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rp
b24oKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsKLQotICAgICAgICAvLyBD
aGVjayBpZiB0aGUgZnVuY3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgc2V0IC0gaWYgc28sCi0gICAg
ICAgIC8vIHdlJ3ZlIGFscmVhZHkgcmV0cmFuc2xhdGVkIGl0LCBub3RoaW5nIHRvIGRvIGhlcmUu
Ci0gICAgICAgIGlmICghZnVuY3Rpb25FeGVjdXRhYmxlcy5hZGQoZXhlY3V0YWJsZSkuc2Vjb25k
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZnVu
Y3Rpb24tPnNjb3BlKCkuZ2xvYmFsT2JqZWN0KCktPkpTR2xvYmFsT2JqZWN0OjpnbG9iYWxFeGVj
KCk7Ci0gICAgICAgIGV4ZWN1dGFibGUtPmRpc2NhcmRDb2RlKCk7Ci0gICAgICAgIGlmIChmdW5j
dGlvbi0+c2NvcGUoKS5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSA9PSB0aGlzKQotICAgICAg
ICAgICAgc291cmNlUHJvdmlkZXJzLmFkZChleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigp
LCBleGVjKTsKLSAgICB9Ci0KLSAgICAvLyBDYWxsIHNvdXJjZVBhcnNlZCgpIGFmdGVyIHJlcGFy
c2luZyBhbGwgZnVuY3Rpb25zIGJlY2F1c2UgaXQgd2lsbCBleGVjdXRlCi0gICAgLy8gSmF2YVNj
cmlwdCBpbiB0aGUgaW5zcGVjdG9yLgotICAgIFNvdXJjZVByb3ZpZGVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBzb3VyY2VQcm92aWRlcnMuZW5kKCk7Ci0gICAgZm9yIChTb3VyY2VQcm92aWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHNvdXJjZVByb3ZpZGVycy5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKQotICAgICAgICBzb3VyY2VQYXJzZWQoaXRlci0+c2Vjb25kLCBpdGVy
LT5maXJzdCwgLTEsIFVTdHJpbmcoKSk7CisgICAgUmVjb21waWxlciByZWNvbXBpbGVyKHRoaXMp
OworICAgIGdsb2JhbERhdGEtPmhlYXAuZm9yRWFjaChyZWNvbXBpbGVyKTsKIH0KIAogSlNWYWx1
ZSBldmFsdWF0ZUluR2xvYmFsQ2FsbEZyYW1lKGNvbnN0IFVTdHJpbmcmIHNjcmlwdCwgSlNWYWx1
ZSYgZXhjZXB0aW9uLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJhdG9y
LmgJKHJldmlzaW9uIDc4MzEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29s
bGVjdG9ySGVhcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTExICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLQotI2lmbmRlZiBDb2xsZWN0b3JIZWFw
SXRlcmF0b3JfaAotI2RlZmluZSBDb2xsZWN0b3JIZWFwSXRlcmF0b3JfaAotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotICAgIGNsYXNzIENvbGxlY3RvckhlYXBJdGVyYXRvciB7Ci0gICAgcHVibGljOgot
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yJiBvdGhl
cik7Ci0gICAgICAgIEpTQ2VsbCogb3BlcmF0b3IqKCkgY29uc3Q7Ci0gICAgCi0gICAgcHJvdGVj
dGVkOgotICAgICAgICBDb2xsZWN0b3JIZWFwSXRlcmF0b3IoQ29sbGVjdG9ySGVhcCYsIHNpemVf
dCBzdGFydEJsb2NrLCBzaXplX3Qgc3RhcnRDZWxsKTsKLSAgICAgICAgdm9pZCBhZHZhbmNlKCk7
Ci0gICAgICAgIGJvb2wgaXNWYWxpZCgpOwotICAgICAgICBib29sIGlzTGl2ZSgpOwotCi0gICAg
ICAgIENvbGxlY3RvckhlYXAmIG1faGVhcDsKLSAgICAgICAgc2l6ZV90IG1fYmxvY2s7Ci0gICAg
ICAgIHNpemVfdCBtX2NlbGw7Ci0gICAgfTsKLQotICAgIGNsYXNzIExpdmVPYmplY3RJdGVyYXRv
ciA6IHB1YmxpYyBDb2xsZWN0b3JIZWFwSXRlcmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAg
TGl2ZU9iamVjdEl0ZXJhdG9yKENvbGxlY3RvckhlYXAmLCBzaXplX3Qgc3RhcnRCbG9jaywgc2l6
ZV90IHN0YXJ0Q2VsbCA9IDApOwotICAgICAgICBMaXZlT2JqZWN0SXRlcmF0b3ImIG9wZXJhdG9y
KysoKTsKLSAgICB9OwotCi0gICAgaW5saW5lIENvbGxlY3RvckhlYXBJdGVyYXRvcjo6Q29sbGVj
dG9ySGVhcEl0ZXJhdG9yKENvbGxlY3RvckhlYXAmIGhlYXAsIHNpemVfdCBzdGFydEJsb2NrLCBz
aXplX3Qgc3RhcnRDZWxsKQotICAgICAgICA6IG1faGVhcChoZWFwKQotICAgICAgICAsIG1fYmxv
Y2soc3RhcnRCbG9jaykKLSAgICAgICAgLCBtX2NlbGwoc3RhcnRDZWxsKQotICAgIHsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBDb2xsZWN0b3JIZWFwSXRlcmF0b3I6Om9wZXJhdG9yIT0oY29u
c3QgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2Jsb2NrICE9IG90aGVyLm1fYmxvY2sgfHwgbV9jZWxsICE9IG90aGVyLm1fY2VsbDsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBDb2xsZWN0b3JIZWFwSXRlcmF0b3I6OmlzVmFsaWQoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2sgPCBtX2hlYXAuYmxvY2tzLnNpemUoKTsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBDb2xsZWN0b3JIZWFwSXRlcmF0b3I6OmlzTGl2ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gbV9oZWFwLmNvbGxlY3RvckJsb2NrKG1fYmxvY2spLT5tYXJrZWQu
Z2V0KG1fY2VsbCk7Ci0gICAgfQotCi0gICAgaW5saW5lIEpTQ2VsbCogQ29sbGVjdG9ySGVhcEl0
ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8SlNDZWxsKj4oJm1faGVhcC5jb2xsZWN0b3JCbG9jayhtX2Jsb2NrKS0+Y2VsbHNb
bV9jZWxsXSk7Ci0gICAgfQotICAgIAotICAgIC8vIEl0ZXJhdG9ycyBhZHZhbmNlIHVwIHRvIHRo
ZSBuZXh0LXRvLWxhc3QgLS0gYW5kIG5vdCB0aGUgbGFzdCAtLSBjZWxsIGluIGEKLSAgICAvLyBi
bG9jaywgc2luY2UgdGhlIGxhc3QgY2VsbCBpcyBhIGR1bW15IHNlbnRpbmVsLgotICAgIGlubGlu
ZSB2b2lkIENvbGxlY3RvckhlYXBJdGVyYXRvcjo6YWR2YW5jZSgpCi0gICAgewotICAgICAgICAr
K21fY2VsbDsKLSAgICAgICAgaWYgKG1fY2VsbCA9PSBNYXJrZWRCbG9jazo6Q0VMTFNfUEVSX0JM
T0NLIC0gMSkgewotICAgICAgICAgICAgbV9jZWxsID0gMDsKLSAgICAgICAgICAgICsrbV9ibG9j
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlubGluZSBMaXZlT2JqZWN0SXRlcmF0b3I6Okxp
dmVPYmplY3RJdGVyYXRvcihDb2xsZWN0b3JIZWFwJiBoZWFwLCBzaXplX3Qgc3RhcnRCbG9jaywg
c2l6ZV90IHN0YXJ0Q2VsbCkKLSAgICAgICAgOiBDb2xsZWN0b3JIZWFwSXRlcmF0b3IoaGVhcCwg
c3RhcnRCbG9jaywgc3RhcnRDZWxsKQotICAgIHsKLSAgICAgICAgaWYgKGlzVmFsaWQoKSAmJiAh
aXNMaXZlKCkpCi0gICAgICAgICAgICArKygqdGhpcyk7Ci0gICAgfQotCi0gICAgaW5saW5lIExp
dmVPYmplY3RJdGVyYXRvciYgTGl2ZU9iamVjdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKLSAgICB7
Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgfSB3aGlsZSAo
aXNWYWxpZCgpICYmICFpc0xpdmUoKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ29sbGVjdG9ySGVhcEl0ZXJhdG9yX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuY3BwCShyZXZpc2lvbiA3ODMx
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
Q29uc2VydmF0aXZlU2V0LmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5j
bHVkZSAiR0NIYW5kbGUuaCIKQEAgLTMyMSw3ICszMjAsMjMgQEAgc2l6ZV90IEhlYXA6OnByb3Rl
Y3RlZE9iamVjdENvdW50KCkKICAgICByZXR1cm4gbV9wcm90ZWN0ZWRWYWx1ZXMuc2l6ZSgpOwog
fQogCi1zdGF0aWMgY29uc3QgY2hhciogdHlwZU5hbWUoSlNDZWxsKiBjZWxsKQorY2xhc3MgVHlw
ZUNvdW50ZXIgeworcHVibGljOgorICAgIFR5cGVDb3VudGVyKCk7CisgICAgdm9pZCBvcGVyYXRv
cigpKEpTQ2VsbCopOworICAgIFBhc3NPd25QdHI8VHlwZUNvdW50U2V0PiB0YWtlKCk7CisgICAg
Citwcml2YXRlOgorICAgIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpTQ2VsbCopOworICAgIE93blB0
cjxUeXBlQ291bnRTZXQ+IG1fdHlwZUNvdW50U2V0OworfTsKKworaW5saW5lIFR5cGVDb3VudGVy
OjpUeXBlQ291bnRlcigpCisgICAgOiBtX3R5cGVDb3VudFNldChuZXcgVHlwZUNvdW50U2V0KQor
eworfQorCitpbmxpbmUgY29uc3QgY2hhciogVHlwZUNvdW50ZXI6OnR5cGVOYW1lKEpTQ2VsbCog
Y2VsbCkKIHsKICAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuICJzdHJp
bmciOwpAQCAtMzM3LDI3ICszNTIsMzIgQEAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKEpT
Q2VsbCogY2VsbAogICAgIHJldHVybiBpbmZvID8gaW5mby0+Y2xhc3NOYW1lIDogIk9iamVjdCI7
CiB9CiAKLUhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiogSGVhcDo6cHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cygpCitpbmxpbmUgdm9pZCBUeXBlQ291bnRlcjo6b3BlcmF0b3IoKShKU0NlbGwq
IGNlbGwpCiB7Ci0gICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+KiBjb3VudHMgPSBuZXcg
SGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OworICAgIG1fdHlwZUNvdW50U2V0LT5hZGQodHlw
ZU5hbWUoY2VsbCkpOworfQorCitpbmxpbmUgUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IFR5cGVD
b3VudGVyOjp0YWtlKCkKK3sKKyAgICByZXR1cm4gbV90eXBlQ291bnRTZXQucmVsZWFzZSgpOwor
fQorCitQYXNzT3duUHRyPFR5cGVDb3VudFNldD4gSGVhcDo6cHJvdGVjdGVkT2JqZWN0VHlwZUNv
dW50cygpCit7CisgICAgVHlwZUNvdW50ZXIgdHlwZUNvdW50ZXI7CiAKICAgICBQcm90ZWN0Q291
bnRTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvdGVjdGVkVmFsdWVzLmVuZCgpOwogICAgIGZvciAo
UHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBpdCA9IG1fcHJvdGVjdGVkVmFsdWVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY291bnRzLT5hZGQodHlwZU5hbWUoaXQtPmZpcnN0
KSk7CisgICAgICAgIHR5cGVDb3VudGVyKGl0LT5maXJzdCk7CiAKLSAgICByZXR1cm4gY291bnRz
OworICAgIHJldHVybiB0eXBlQ291bnRlci50YWtlKCk7CiB9CiAKLUhhc2hDb3VudGVkU2V0PGNv
bnN0IGNoYXIqPiogSGVhcDo6b2JqZWN0VHlwZUNvdW50cygpCitQYXNzT3duUHRyPFR5cGVDb3Vu
dFNldD4gSGVhcDo6b2JqZWN0VHlwZUNvdW50cygpCiB7Ci0gICAgSGFzaENvdW50ZWRTZXQ8Y29u
c3QgY2hhcio+KiBjb3VudHMgPSBuZXcgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+OwotCi0g
ICAgTGl2ZU9iamVjdEl0ZXJhdG9yIGl0ID0gcHJpbWFyeUhlYXBCZWdpbigpOwotICAgIExpdmVP
YmplY3RJdGVyYXRvciBoZWFwRW5kID0gcHJpbWFyeUhlYXBFbmQoKTsKLSAgICBmb3IgKCA7IGl0
ICE9IGhlYXBFbmQ7ICsraXQpCi0gICAgICAgIGNvdW50cy0+YWRkKHR5cGVOYW1lKCppdCkpOwot
Ci0gICAgcmV0dXJuIGNvdW50czsKKyAgICBUeXBlQ291bnRlciB0eXBlQ291bnRlcjsKKyAgICBm
b3JFYWNoKHR5cGVDb3VudGVyKTsKKyAgICByZXR1cm4gdHlwZUNvdW50ZXIudGFrZSgpOwogfQog
CiBib29sIEhlYXA6OmlzQnVzeSgpCkBAIC0zOTUsMTYgKzQxNSw2IEBAIHZvaWQgSGVhcDo6cmVz
ZXQoU3dlZXBUb2dnbGUgc3dlZXBUb2dnbGUKICAgICAoKm1fYWN0aXZpdHlDYWxsYmFjaykoKTsK
IH0KIAotTGl2ZU9iamVjdEl0ZXJhdG9yIEhlYXA6OnByaW1hcnlIZWFwQmVnaW4oKQotewotICAg
IHJldHVybiBtX21hcmtlZFNwYWNlLnByaW1hcnlIZWFwQmVnaW4oKTsKLX0KLQotTGl2ZU9iamVj
dEl0ZXJhdG9yIEhlYXA6OnByaW1hcnlIZWFwRW5kKCkKLXsKLSAgICByZXR1cm4gbV9tYXJrZWRT
cGFjZS5wcmltYXJ5SGVhcEVuZCgpOwotfQotCiB2b2lkIEhlYXA6OnNldEFjdGl2aXR5Q2FsbGJh
Y2soUGFzc093blB0cjxHQ0FjdGl2aXR5Q2FsbGJhY2s+IGFjdGl2aXR5Q2FsbGJhY2spCiB7CiAg
ICAgbV9hY3Rpdml0eUNhbGxiYWNrID0gYWN0aXZpdHlDYWxsYmFjazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IZWFwLmgJKHJldmlzaW9uIDc4MzEyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8SlNWYWx1ZSwgVVN0cmlu
Zz4gVmFsdWVTdHJpbmdQYWlyOwogICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8SlNDZWxsKj4g
UHJvdGVjdENvdW50U2V0OworICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+
IFR5cGVDb3VudFNldDsKIAogICAgIGVudW0gT3BlcmF0aW9uSW5Qcm9ncmVzcyB7IE5vT3BlcmF0
aW9uLCBBbGxvY2F0aW9uLCBDb2xsZWN0aW9uIH07CiAKQEAgLTg1LDggKzg2LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCBnbG9iYWxPYmplY3RDb3VudCgpOwogICAgICAgICBz
aXplX3QgcHJvdGVjdGVkT2JqZWN0Q291bnQoKTsKICAgICAgICAgc2l6ZV90IHByb3RlY3RlZEds
b2JhbE9iamVjdENvdW50KCk7Ci0gICAgICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiog
cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpOwotICAgICAgICBIYXNoQ291bnRlZFNldDxjb25z
dCBjaGFyKj4qIG9iamVjdFR5cGVDb3VudHMoKTsKKyAgICAgICAgUGFzc093blB0cjxUeXBlQ291
bnRTZXQ+IHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKTsKKyAgICAgICAgUGFzc093blB0cjxU
eXBlQ291bnRTZXQ+IG9iamVjdFR5cGVDb3VudHMoKTsKIAogICAgICAgICBXZWFrR0NIYW5kbGUq
IGFkZFdlYWtHQ0hhbmRsZShKU0NlbGwqKTsKIApAQCAtOTYsOSArOTcsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgSGFzaFNldDxHbG9iYWxDb2RlQmxvY2sqPiYgY29kZUJsb2NrcygpIHsg
cmV0dXJuIG1fY29kZUJsb2NrczsgfQogCiAgICAgICAgIEhhc2hTZXQ8TWFya2VkQXJndW1lbnRC
dWZmZXIqPiYgbWFya0xpc3RTZXQoKSB7IGlmICghbV9tYXJrTGlzdFNldCkgbV9tYXJrTGlzdFNl
dCA9IG5ldyBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj47IHJldHVybiAqbV9tYXJrTGlz
dFNldDsgfQotCi0gICAgICAgIExpdmVPYmplY3RJdGVyYXRvciBwcmltYXJ5SGVhcEJlZ2luKCk7
Ci0gICAgICAgIExpdmVPYmplY3RJdGVyYXRvciBwcmltYXJ5SGVhcEVuZCgpOworICAgICAgICAK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaChGdW5jdG9y
Jik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2Jh
bERhdGE7CkBAIC0xNzEsNiArMTcxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V2Vha0dDSGFuZGxlUG9vbCo+KG1fd2Vha0dDSGFuZGxlUG9vbHNbaW5k
ZXhdLmJhc2UoKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlu
bGluZSB2b2lkIEhlYXA6OmZvckVhY2goRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IG1fbWFya2VkU3BhY2UuZm9yRWFjaChmdW5jdG9yKTsKKyAgICB9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gSGVhcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDc4MzEyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkhlYXAuaCIK
LSNpbmNsdWRlICJDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJDb21tb25JZGVu
dGlmaWVycy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJH
ZXR0ZXJTZXR0ZXIuaCIKQEAgLTMxNCwyMSArMzEzLDMwIEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpk
dW1wU2FtcGxlRGF0YShFeGVjU3QKICAgICBpbnRlcnByZXRlci0+ZHVtcFNhbXBsZURhdGEoZXhl
Yyk7CiB9CiAKK2NsYXNzIFJlY29tcGlsZXIgeworcHVibGljOgorICAgIHZvaWQgb3BlcmF0b3Io
KShKU0NlbGwqKTsKK307CisKK2lubGluZSB2b2lkIFJlY29tcGlsZXI6Om9wZXJhdG9yKCkoSlND
ZWxsKiBjZWxsKQoreworICAgIGlmICghY2VsbC0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8p
KQorICAgICAgICByZXR1cm47CisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9u
KGNlbGwpOworICAgIGlmIChmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigp
KQorICAgICAgICByZXR1cm47CisgICAgZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLT5kaXNjYXJk
Q29kZSgpOworfQorCisKIHZvaWQgSlNHbG9iYWxEYXRhOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cygpCiB7CiAgICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRv
IHJlY29tcGlsZSwgc2luY2Ugd2UnbGwgZW5kCiAgICAgLy8gdXAgdGhyb3dpbmcgYXdheSBjb2Rl
IHRoYXQgaXMgbGl2ZSBvbiB0aGUgc3RhY2suCiAgICAgQVNTRVJUKCFkeW5hbWljR2xvYmFsT2Jq
ZWN0KTsKLQotICAgIExpdmVPYmplY3RJdGVyYXRvciBpdCA9IGhlYXAucHJpbWFyeUhlYXBCZWdp
bigpOwotICAgIExpdmVPYmplY3RJdGVyYXRvciBoZWFwRW5kID0gaGVhcC5wcmltYXJ5SGVhcEVu
ZCgpOwotICAgIGZvciAoIDsgaXQgIT0gaGVhcEVuZDsgKytpdCkgewotICAgICAgICBpZiAoKCpp
dCktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSkgewotICAgICAgICAgICAgSlNGdW5jdGlv
biogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKCppdCk7Ci0gICAgICAgICAgICBpZiAoIWZ1bmN0aW9u
LT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgICAgICAgICAgZnVuY3Rp
b24tPmpzRXhlY3V0YWJsZSgpLT5kaXNjYXJkQ29kZSgpOwotICAgICAgICB9Ci0gICAgfQorICAg
IAorICAgIFJlY29tcGlsZXIgcmVjb21waWxlcjsKKyAgICBoZWFwLmZvckVhY2gocmVjb21waWxl
cik7CiB9CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDc4MzEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBIZWFwOworICAg
IGNsYXNzIEpTQ2VsbDsKICAgICBjbGFzcyBKU0dsb2JhbERhdGE7CiAKICAgICBjbGFzcyBNYXJr
ZWRCbG9jayB7CkBAIC02MSw4ICs2Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBD
ZWxsIHNpemUgbmVlZHMgdG8gYmUgYSBwb3dlciBvZiB0d28gZm9yIENFTExfTUFTSyB0byBiZSB2
YWxpZC4KICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShzaXplb2YoQ29sbGVjdG9yQ2VsbCkgJSAy
KSwgQ29sbGVjdG9yX2NlbGxfc2l6ZV9pc19wb3dlcl9vZl90d28pOwogCi0gICAgICAgIGZyaWVu
ZCBjbGFzcyBDb2xsZWN0b3JIZWFwSXRlcmF0b3I7Ci0KICAgICBwdWJsaWM6CiAgICAgICAgIHN0
YXRpYyBNYXJrZWRCbG9jayogY3JlYXRlKEpTR2xvYmFsRGF0YSopOwogICAgICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KE1hcmtlZEJsb2NrKik7CkBAIC04Niw2ICs4NSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIGlzTWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgYm9vbCB0
ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKICAgICAgICAgdm9pZCBzZXRNYXJrZWQoY29u
c3Qgdm9pZCopOworICAgICAgICAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaChGdW5jdG9yJik7CiAKICAgICAgICAgRml4ZWRBcnJheTxDb2xsZWN0b3JD
ZWxsLCBDRUxMU19QRVJfQkxPQ0s+IGNlbGxzOwogCkBAIC0xNjIsNiArMTYzLDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBtYXJrZWQuc2V0KGNlbGxOdW1iZXIoY2VsbCkpOwogICAgIH0K
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9j
azo6Zm9yRWFjaChGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBDRUxMU19QRVJfQkxPQ0sgLSAxOyArK2kpIHsgLy8gVGhlIGxhc3QgY2VsbCBp
cyBhIGR1bW15IHBsYWNlLWhvbGRlci4KKyAgICAgICAgICAgIGlmICghbWFya2VkLmdldChpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZ1bmN0b3IocmVpbnRlcnBy
ZXRfY2FzdDxKU0NlbGwqPigmY2VsbHNbaV0pKTsKKyAgICAgICAgfQorICAgIH0KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBNYXJrZWRTcGFjZV9oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiA3ODMxMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZFNwYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik1hcmtlZFNwYWNlLmgiCiAKLSNpbmNsdWRlICJDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaCIKICNp
bmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJK
U0xvY2suaCIKQEAgLTEzNiwxNCArMTM1LDQgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cmVzZXQoKQog
I2VuZGlmCiB9CiAKLUxpdmVPYmplY3RJdGVyYXRvciBNYXJrZWRTcGFjZTo6cHJpbWFyeUhlYXBC
ZWdpbigpCi17Ci0gICAgcmV0dXJuIExpdmVPYmplY3RJdGVyYXRvcihtX2hlYXAsIDAsIDApOwot
fQotCi1MaXZlT2JqZWN0SXRlcmF0b3IgTWFya2VkU3BhY2U6OnByaW1hcnlIZWFwRW5kKCkKLXsK
LSAgICByZXR1cm4gTGl2ZU9iamVjdEl0ZXJhdG9yKG1faGVhcCwgbV9oZWFwLmJsb2Nrcy5zaXpl
KCksIDApOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gNzgzMTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw4ICs4OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgY29udGFpbnMoY29u
c3Qgdm9pZCopOwogCi0gICAgICAgIExpdmVPYmplY3RJdGVyYXRvciBwcmltYXJ5SGVhcEJlZ2lu
KCk7Ci0gICAgICAgIExpdmVPYmplY3RJdGVyYXRvciBwcmltYXJ5SGVhcEVuZCgpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2goRnVuY3RvciYpOwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgTkVWRVJfSU5MSU5FIE1hcmtlZEJsb2NrKiBhbGxvY2F0ZUJs
b2NrKCk7CkBAIC0xNDYsNiArMTQ1LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB2b2lkIE1hcmtlZFNwYWNlOjpmb3JFYWNoKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faGVhcC5ibG9ja3Muc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICBtX2hlYXAuY29sbGVjdG9yQmxvY2soaSktPmZvckVhY2goZnVuY3Rvcik7Cisg
ICAgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE1hcmtlZFNwYWNlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82172</attachid>
            <date>2011-02-11 14:08:29 -0800</date>
            <delta_ts>2011-02-11 14:43:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54298-20110211140828.patch</filename>
            <type>text/plain</type>
            <size>30357</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzgzNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAK
KzIwMTEtMDItMTEgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGxpdHRsZSBtb3JlIGVu
Y2Fwc3VsYXRpb24gZm9yIHRoZSBoZWFwOiBSZW1vdmVkIENvbGxlY3RvckhlYXBJdGVyYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQyOTgKKyAg
ICAgICAgCisgICAgICAgIENvbGxlY3RvckhlYXBJdGVyYXRvciBpcyBhIEdvZCBvYmplY3QgdGhh
dCBrbm93cyB0aGUgaW50ZXJuYWxzIG9mIGVhY2gKKyAgICAgICAgb2YgdGhlIHBpZWNlcyBvZiB0
aGUgaGVhcC4gVGhpcyB1bmRlcm1pbmVzIHRoZSBlbmNhcHN1bGF0aW9uIEknbSB0cnlpbmcKKyAg
ICAgICAgdG8gYWNoaWV2ZSBieSBzcGxpdHRpbmcgY29uY2VwdHMgaW50byBkaWZmZXJlbnQgY2xh
c3Nlcy4KKyAgICAgICAgCisgICAgICAgIEFzIGFuIGFsdGVybmF0aXZlLCBJJ3ZlIGdpdmVuIGVh
Y2ggY2xhc3MgYSBmb3JFYWNoIGl0ZXJhdGlvbiBmdW5jdGlvbiwKKyAgICAgICAgd2hpY2ggdGFr
ZXMgYSBmdW5jdG9yIGFzIGFuIGFyZ3VtZW50LiBOb3csIGVhY2ggY2xhc3MganVzdCBuZWVkcyB0
bworICAgICAgICBrbm93IGhvdyB0byBpdGVyYXRlIHRoZSB0aGluZ3MgaXQga25vd3MgYWJvdXQu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5l
eHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOiBSZW1vdmVk
IENvbGxlY3RvckhlYXBJdGVyYXRvci4KKworICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6UmVjb21waWxlcjo6UmVjb21waWxlcik6CisgICAgICAgIChKU0M6
OlJlY29tcGlsZXI6On5SZWNvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6UmVjb21waWxlcjo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cyk6IFVwZGF0ZWQgdG8gdXNlIGZvckVhY2ggaW50ZXJmYWNlCisgICAgICAgIGluc3RlYWQgb2Yg
YW4gaXRlcmF0b3IuCisKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5o
OiBSZW1vdmVkLgorCisgICAgICAgICogcnVudGltZS9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6
VHlwZUNvdW50ZXI6OlR5cGVDb3VudGVyKToKKyAgICAgICAgKEpTQzo6VHlwZUNvdW50ZXI6OnR5
cGVOYW1lKToKKyAgICAgICAgKEpTQzo6VHlwZUNvdW50ZXI6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpUeXBlQ291bnRlcjo6dGFrZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpvYmplY3RUeXBlQ291bnRz
KTogQWRkZWQgZm9yRWFjaCBhbmQgcmVtb3ZlZCBpdGVyYXRvci4KKworICAgICAgICAqIHJ1bnRp
bWUvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoKToKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OlJlY29tcGlsZXI6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25z
KToKKworICAgICAgICAqIHJ1bnRpbWUvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OmZvckVhY2gpOiBBZGRlZCBmb3JFYWNoLiBSZW1vdmVkIGZyaWVuZCBkZWNsYXJh
dGlvbgorICAgICAgICBmb3IgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLiBOb3csIHdlIGNhbiBtYWtl
IGFsbCBvdXIgZGF0YSBwcml2YXRlIGFuZAorICAgICAgICBjaGFuZ2UgaXQgd2l0aG91dCBicmVh
a2luZyBhbnkgb3RoZXIgY2xhc3Nlcy4KKworICAgICAgICAqIHJ1bnRpbWUvTWFya2VkU3BhY2Uu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmZvckVhY2gpOiBBZGRlZCBmb3JFYWNoIGFuZCByZW1vdmVkIGl0ZXJhdG9yLgor
CiAyMDExLTAyLTExICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUuYW0JKHJldmlzaW9uIDc4MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDYgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3Bh
Y2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcC5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCShyZXZpc2lvbiA3ODM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMCArMjA2LDggQEAgX19a
TjNKU0MyNGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvckVQTlNfOQogX19aTjNKU0MyNWV2YWx1YXRl
SW5HbG9iYWxDYWxsRnJhbWVFUktOU183VVN0cmluZ0VSTlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9i
YWxPYmplY3RFCiBfX1pOM0pTQzM1Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb25F
UE5TXzEySlNHbG9iYWxEYXRhRQogX19aTjNKU0MzTmFORQotX19aTjNKU0M0SGVhcDE0cHJpbWFy
eUhlYXBFbmRFdgogX19aTjNKU0M0SGVhcDE1YWRkV2Vha0dDSGFuZGxlRVBOU182SlNDZWxsRQog
X19aTjNKU0M0SGVhcDE2b2JqZWN0VHlwZUNvdW50c0V2Ci1fX1pOM0pTQzRIZWFwMTZwcmltYXJ5
SGVhcEJlZ2luRXYKIF9fWk4zSlNDNEhlYXAxN2NvbGxlY3RBbGxHYXJiYWdlRXYKIF9fWk4zSlND
NEhlYXAxN2dsb2JhbE9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhlYXAxOXNldEFjdGl2aXR5Q2Fs
bGJhY2tFTjNXVEYxMFBhc3NPd25QdHJJTlNfMThHQ0FjdGl2aXR5Q2FsbGJhY2tFRUUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiA3ODM1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAKICAgICAgICAgICAgICdydW50aW1lL01hcmtlZFNw
YWNlLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSGVhcC5jcHAnLAogICAgICAgICAgICAgJ3J1
bnRpbWUvSGVhcC5oJywKLSAgICAgICAgICAgICdydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRv
ci5oJywKICAgICAgICAgICAgICdydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCcsCiAgICAg
ICAgICAgICAncnVudGltZS9Db21tb25JZGVudGlmaWVycy5oJywKICAgICAgICAgICAgICdydW50
aW1lL0NvbXBsZXRpb24uY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiA3ODM1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDYgQEAgRVhQT1JUUwog
ICAgID9wcm90ZWN0QEhlYXBASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgogICAgID9wcm90ZWN0ZWRH
bG9iYWxPYmplY3RDb3VudEBIZWFwQEpTQ0BAUUFFSVhaCiAgICAgP3Byb3RlY3RlZE9iamVjdENv
dW50QEhlYXBASlNDQEBRQUVJWFoKLSAgICA/cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c0BIZWFw
QEpTQ0BAUUFFUEFWPyRIYXNoQ291bnRlZFNldEBQQkRVPyRQdHJIYXNoQFBCREBXVEZAQFU/JEhh
c2hUcmFpdHNAUEJEQDJAQFdURkBAWFoKICAgICA/cHV0QEpTQ2VsbEBKU0NAQFVBRVhQQVZFeGVj
U3RhdGVAMkBBQlZJZGVudGlmaWVyQDJAVkpTVmFsdWVAMkBBQVZQdXRQcm9wZXJ0eVNsb3RAMkBA
WgogICAgID9wdXRASlNDZWxsQEpTQ0BAVUFFWFBBVkV4ZWNTdGF0ZUAyQElWSlNWYWx1ZUAyQEBa
CiAgICAgP3B1dEBKU0dsb2JhbE9iamVjdEBKU0NAQFVBRVhQQVZFeGVjU3RhdGVAMkBBQlZJZGVu
dGlmaWVyQDJAVkpTVmFsdWVAMkBBQVZQdXRQcm9wZXJ0eVNsb3RAMkBAWgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHJldmlzaW9uIDc4MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTYxMCwxMCArNjEwLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxDb2xsZWN0b3JIZWFwSW50cm9zcGVjdG9yLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1
bnRpbWVcQ29tbW9uSWRlbnRpZmllcnMuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3ODM1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDYgQEAKIAkJMTRDODI0QUIxMkY3Qzc3RTAwOEYzNUUw
IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0QzgyNEFBMTJGN0M3N0UwMDhGMzVFMCAvKiBNYXJrZWRCbG9jay5jcHAgKi87
IH07CiAJCTE0QzgyNEFEMTJGN0M3ODUwMDhGMzVFMCAvKiBNYXJrZWRCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDODI0QUMxMkY3Qzc4NTAw
OEYzNUUwIC8qIE1hcmtlZEJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDNzU2RkM2MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAgKi87IH07Ci0JCTE0RjM0ODhGMEU5NUVGOEEwMDM2NDhCQyAvKiBDb2xsZWN0b3JIZWFw
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0RjM0ODhFMEU5NUVGOEEwMDM2NDhCQyAvKiBDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkxNEY4QkEzRTEwN0VDODg2MDA5
ODkyREMgLyogRmFzdE1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUUyMTdCOTA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5jcHAg
Ki87IH07CiAJCTE0RjhCQTQzMTA3RUM4OEMwMDk4OTJEQyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDcwMDhF
ODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCAqLzsgfTsKIAkJMTRGRkY5OEMxMkJG
RkY3NTAwNzk1QkI4IC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEZGRjk4QTEyQkZGRjc1MDA3OTVCQjgg
LyogUGFnZUFsbG9jYXRpb25BbGlnbmVkLmNwcCAqLzsgfTsKQEAgLTc2MCw3ICs3NTksNiBAQAog
CQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9i
amVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbE9i
amVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjI1MjU2MEQwOEREOEQw
MDRFQ0ZGRiAvKiBKU1ZhcmlhYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTVmFyaWFibGVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MTRGMzQ4OEUwRTk1RUY4QTAwMzY0OEJDIC8qIENvbGxlY3RvckhlYXBJdGVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGRkY5OEExMkJGRkY3NTAwNzk1QkI4IC8qIFBh
Z2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQYWdlQWxsb2NhdGlvbkFsaWduZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNEZGRjk4QjEyQkZGRjc1MDA3OTVCQjggLyogUGFnZUFsbG9jYXRpb25BbGlnbmVkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxODBCOUFFRjBGMTZDNTY5MDA5QkRCQzUg
LyogQ3VycmVudFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q3VycmVudFRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5OSw3ICsx
Njk3LDYgQEAKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICov
LAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLAogCQkJCUJD
NkFBQUU0MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAqLywKLQkJCQkxNEYzNDg4RTBF
OTVFRjhBMDAzNjQ4QkMgLyogQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmggKi8sCiAJCQkJNjVFQTcz
NjIwQkFFMzVEMTAwMUJCNTYwIC8qIENvbW1vbklkZW50aWZpZXJzLmNwcCAqLywKIAkJCQk2NUVB
NzM2MzBCQUUzNUQxMDAxQkI1NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCAqLywKIAkJCQk5NjlB
MDkyMjBFRDFFMDlDMDBGMUY2ODEgLyogQ29tcGxldGlvbi5jcHAgKi8sCkBAIC0yMTI5LDcgKzIx
MjYsNiBAQAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb2xsYXRv
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRGMzQ4OEYwRTk1RUY4QTAwMzY0OEJDIC8qIENvbGxl
Y3RvckhlYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAw
QjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNG
NDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRB
MTVDMUUxMkIwMzA1QzAwM0E1ODNBIC8qIENvbXBsZXguaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiA3
ODM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJEZWJ1Z2dlci5oIgogCi0jaW5jbHVkZSAiQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKQEAgLTMyLDYgKzMxLDU3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFz
cyBSZWNvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBSZWNvbXBpbGVyKERlYnVnZ2VyKik7CisgICAg
flJlY29tcGlsZXIoKTsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKik7CisKK3ByaXZhdGU6
CisgICAgdHlwZWRlZiBIYXNoU2V0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+IEZ1bmN0aW9uRXhlY3V0
YWJsZVNldDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U291cmNlUHJvdmlkZXIqLCBFeGVjU3RhdGUq
PiBTb3VyY2VQcm92aWRlck1hcDsKKyAgICAKKyAgICBEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsKKyAg
ICBGdW5jdGlvbkV4ZWN1dGFibGVTZXQgbV9mdW5jdGlvbkV4ZWN1dGFibGVzOworICAgIFNvdXJj
ZVByb3ZpZGVyTWFwIG1fc291cmNlUHJvdmlkZXJzOworfTsKKworaW5saW5lIFJlY29tcGlsZXI6
OlJlY29tcGlsZXIoRGVidWdnZXIqIGRlYnVnZ2VyKQorICAgIDogbV9kZWJ1Z2dlcihkZWJ1Z2dl
cikKK3sKK30KKworaW5saW5lIFJlY29tcGlsZXI6On5SZWNvbXBpbGVyKCkKK3sKKyAgICAvLyBD
YWxsIHNvdXJjZVBhcnNlZCgpIGFmdGVyIHJlcGFyc2luZyBhbGwgZnVuY3Rpb25zIGJlY2F1c2Ug
aXQgd2lsbCBleGVjdXRlCisgICAgLy8gSmF2YVNjcmlwdCBpbiB0aGUgaW5zcGVjdG9yLgorICAg
IFNvdXJjZVByb3ZpZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NvdXJjZVByb3ZpZGVy
cy5lbmQoKTsKKyAgICBmb3IgKFNvdXJjZVByb3ZpZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9zb3VyY2VQcm92aWRlcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAg
ICAgbV9kZWJ1Z2dlci0+c291cmNlUGFyc2VkKGl0ZXItPnNlY29uZCwgaXRlci0+Zmlyc3QsIC0x
LCBVU3RyaW5nKCkpOworfQorCitpbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIWNlbGwtPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZv
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0
aW9uKGNlbGwpOworICAgIGlmIChmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlv
bigpKQorICAgICAgICByZXR1cm47CisKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgZnVu
Y3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgc2V0IC0gaWYgc28sCisgICAgLy8gd2UndmUgYWxyZWFk
eSByZXRyYW5zbGF0ZWQgaXQsIG5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICBpZiAoIW1fZnVuY3Rp
b25FeGVjdXRhYmxlcy5hZGQoZXhlY3V0YWJsZSkuc2Vjb25kKQorICAgICAgICByZXR1cm47CisK
KyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUoKS5nbG9iYWxPYmplY3QoKS0+
SlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKTsKKyAgICBleGVjdXRhYmxlLT5kaXNjYXJkQ29k
ZSgpOworICAgIGlmIChtX2RlYnVnZ2VyID09IGZ1bmN0aW9uLT5zY29wZSgpLmdsb2JhbE9iamVj
dCgpLT5kZWJ1Z2dlcigpKQorICAgICAgICBtX3NvdXJjZVByb3ZpZGVycy5hZGQoZXhlY3V0YWJs
ZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlYyk7Cit9CisKIERlYnVnZ2VyOjp+RGVidWdnZXIo
KQogewogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gbV9nbG9i
YWxPYmplY3RzLmVuZCgpOwpAQCAtNjEsNDAgKzExMSw4IEBAIHZvaWQgRGVidWdnZXI6OnJlY29t
cGlsZUFsbEpTRnVuY3Rpb25zKEoKICAgICBpZiAoZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9i
amVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+IEZ1bmN0aW9uRXhlY3V0YWJsZVNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U291
cmNlUHJvdmlkZXIqLCBFeGVjU3RhdGUqPiBTb3VyY2VQcm92aWRlck1hcDsKLQotICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZVNldCBmdW5jdGlvbkV4ZWN1dGFibGVzOwotICAgIFNvdXJjZVByb3ZpZGVy
TWFwIHNvdXJjZVByb3ZpZGVyczsKLQotICAgIExpdmVPYmplY3RJdGVyYXRvciBpdCA9IGdsb2Jh
bERhdGEtPmhlYXAucHJpbWFyeUhlYXBCZWdpbigpOwotICAgIExpdmVPYmplY3RJdGVyYXRvciBo
ZWFwRW5kID0gZ2xvYmFsRGF0YS0+aGVhcC5wcmltYXJ5SGVhcEVuZCgpOwotICAgIGZvciAoIDsg
aXQgIT0gaGVhcEVuZDsgKytpdCkgewotICAgICAgICBpZiAoISgqaXQpLT5pbmhlcml0cygmSlNG
dW5jdGlvbjo6aW5mbykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oKml0KTsKLSAgICAgICAgaWYgKGZ1bmN0aW9uLT5l
eGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+anNFeGVj
dXRhYmxlKCk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZ1bmN0aW9uIGlzIGFscmVhZHkg
aW4gdGhlIHNldCAtIGlmIHNvLAotICAgICAgICAvLyB3ZSd2ZSBhbHJlYWR5IHJldHJhbnNsYXRl
ZCBpdCwgbm90aGluZyB0byBkbyBoZXJlLgotICAgICAgICBpZiAoIWZ1bmN0aW9uRXhlY3V0YWJs
ZXMuYWRkKGV4ZWN1dGFibGUpLnNlY29uZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZ1bmN0aW9uLT5zY29wZSgpLmdsb2JhbE9iamVjdCgpLT5K
U0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpOwotICAgICAgICBleGVjdXRhYmxlLT5kaXNjYXJk
Q29kZSgpOwotICAgICAgICBpZiAoZnVuY3Rpb24tPnNjb3BlKCkuZ2xvYmFsT2JqZWN0KCktPmRl
YnVnZ2VyKCkgPT0gdGhpcykKLSAgICAgICAgICAgIHNvdXJjZVByb3ZpZGVycy5hZGQoZXhlY3V0
YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlYyk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBz
b3VyY2VQYXJzZWQoKSBhZnRlciByZXBhcnNpbmcgYWxsIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IHdp
bGwgZXhlY3V0ZQotICAgIC8vIEphdmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KLSAgICBTb3Vy
Y2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc291cmNlUHJvdmlkZXJzLmVuZCgp
OwotICAgIGZvciAoU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzb3Vy
Y2VQcm92aWRlcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgc291cmNl
UGFyc2VkKGl0ZXItPnNlY29uZCwgaXRlci0+Zmlyc3QsIC0xLCBVU3RyaW5nKCkpOworICAgIFJl
Y29tcGlsZXIgcmVjb21waWxlcih0aGlzKTsKKyAgICBnbG9iYWxEYXRhLT5oZWFwLmZvckVhY2go
cmVjb21waWxlcik7CiB9CiAKIEpTVmFsdWUgZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShjb25z
dCBVU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbiwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rv
ckhlYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5oCShyZXZpc2lvbiA3ODM1NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIZWFwLmgi
Ci0KLSNpZm5kZWYgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yX2gKLSNkZWZpbmUgQ29sbGVjdG9ySGVh
cEl0ZXJhdG9yX2gKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSAgICBjbGFzcyBDb2xsZWN0b3JIZWFw
SXRlcmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENv
bGxlY3RvckhlYXBJdGVyYXRvciYgb3RoZXIpOwotICAgICAgICBKU0NlbGwqIG9wZXJhdG9yKigp
IGNvbnN0OwotICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgQ29sbGVjdG9ySGVhcEl0ZXJh
dG9yKENvbGxlY3RvckhlYXAmLCBzaXplX3Qgc3RhcnRCbG9jaywgc2l6ZV90IHN0YXJ0Q2VsbCk7
Ci0gICAgICAgIHZvaWQgYWR2YW5jZSgpOwotICAgICAgICBib29sIGlzVmFsaWQoKTsKLSAgICAg
ICAgYm9vbCBpc0xpdmUoKTsKLQotICAgICAgICBDb2xsZWN0b3JIZWFwJiBtX2hlYXA7Ci0gICAg
ICAgIHNpemVfdCBtX2Jsb2NrOwotICAgICAgICBzaXplX3QgbV9jZWxsOwotICAgIH07Ci0KLSAg
ICBjbGFzcyBMaXZlT2JqZWN0SXRlcmF0b3IgOiBwdWJsaWMgQ29sbGVjdG9ySGVhcEl0ZXJhdG9y
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExpdmVPYmplY3RJdGVyYXRvcihDb2xsZWN0b3JIZWFw
Jiwgc2l6ZV90IHN0YXJ0QmxvY2ssIHNpemVfdCBzdGFydENlbGwgPSAwKTsKLSAgICAgICAgTGl2
ZU9iamVjdEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0gICAgfTsKLQotICAgIGlubGluZSBDb2xs
ZWN0b3JIZWFwSXRlcmF0b3I6OkNvbGxlY3RvckhlYXBJdGVyYXRvcihDb2xsZWN0b3JIZWFwJiBo
ZWFwLCBzaXplX3Qgc3RhcnRCbG9jaywgc2l6ZV90IHN0YXJ0Q2VsbCkKLSAgICAgICAgOiBtX2hl
YXAoaGVhcCkKLSAgICAgICAgLCBtX2Jsb2NrKHN0YXJ0QmxvY2spCi0gICAgICAgICwgbV9jZWxs
KHN0YXJ0Q2VsbCkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgQ29sbGVjdG9ySGVh
cEl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IENvbGxlY3RvckhlYXBJdGVyYXRvciYgb3RoZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ibG9jayAhPSBvdGhlci5tX2Jsb2NrIHx8IG1fY2Vs
bCAhPSBvdGhlci5tX2NlbGw7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgQ29sbGVjdG9ySGVh
cEl0ZXJhdG9yOjppc1ZhbGlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrIDwgbV9o
ZWFwLmJsb2Nrcy5zaXplKCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgQ29sbGVjdG9ySGVh
cEl0ZXJhdG9yOjppc0xpdmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGVhcC5jb2xsZWN0
b3JCbG9jayhtX2Jsb2NrKS0+bWFya2VkLmdldChtX2NlbGwpOwotICAgIH0KLQotICAgIGlubGlu
ZSBKU0NlbGwqIENvbGxlY3RvckhlYXBJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZtX2hlYXAuY29sbGVj
dG9yQmxvY2sobV9ibG9jayktPmNlbGxzW21fY2VsbF0pOwotICAgIH0KLSAgICAKLSAgICAvLyBJ
dGVyYXRvcnMgYWR2YW5jZSB1cCB0byB0aGUgbmV4dC10by1sYXN0IC0tIGFuZCBub3QgdGhlIGxh
c3QgLS0gY2VsbCBpbiBhCi0gICAgLy8gYmxvY2ssIHNpbmNlIHRoZSBsYXN0IGNlbGwgaXMgYSBk
dW1teSBzZW50aW5lbC4KLSAgICBpbmxpbmUgdm9pZCBDb2xsZWN0b3JIZWFwSXRlcmF0b3I6OmFk
dmFuY2UoKQotICAgIHsKLSAgICAgICAgKyttX2NlbGw7Ci0gICAgICAgIGlmIChtX2NlbGwgPT0g
TWFya2VkQmxvY2s6OkNFTExTX1BFUl9CTE9DSyAtIDEpIHsKLSAgICAgICAgICAgIG1fY2VsbCA9
IDA7Ci0gICAgICAgICAgICArK21fYmxvY2s7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbmxp
bmUgTGl2ZU9iamVjdEl0ZXJhdG9yOjpMaXZlT2JqZWN0SXRlcmF0b3IoQ29sbGVjdG9ySGVhcCYg
aGVhcCwgc2l6ZV90IHN0YXJ0QmxvY2ssIHNpemVfdCBzdGFydENlbGwpCi0gICAgICAgIDogQ29s
bGVjdG9ySGVhcEl0ZXJhdG9yKGhlYXAsIHN0YXJ0QmxvY2ssIHN0YXJ0Q2VsbCkKLSAgICB7Ci0g
ICAgICAgIGlmIChpc1ZhbGlkKCkgJiYgIWlzTGl2ZSgpKQotICAgICAgICAgICAgKysoKnRoaXMp
OwotICAgIH0KLQotICAgIGlubGluZSBMaXZlT2JqZWN0SXRlcmF0b3ImIExpdmVPYmplY3RJdGVy
YXRvcjo6b3BlcmF0b3IrKygpCi0gICAgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBhZHZh
bmNlKCk7Ci0gICAgICAgIH0gd2hpbGUgKGlzVmFsaWQoKSAmJiAhaXNMaXZlKCkpOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8v
IENvbGxlY3RvckhlYXBJdGVyYXRvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IZWFwLmNwcAkocmV2aXNpb24gNzgzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUg
IkhlYXAuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvbGxlY3Rvckhl
YXBJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVNldC5oIgogI2luY2x1ZGUgIkdD
QWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkdDSGFuZGxlLmgiCkBAIC0zMjEsNyArMzIw
LDIzIEBAIHNpemVfdCBIZWFwOjpwcm90ZWN0ZWRPYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIG1f
cHJvdGVjdGVkVmFsdWVzLnNpemUoKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1l
KEpTQ2VsbCogY2VsbCkKK2NsYXNzIFR5cGVDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBUeXBlQ291
bnRlcigpOworICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqKTsKKyAgICBQYXNzT3duUHRyPFR5
cGVDb3VudFNldD4gdGFrZSgpOworICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCBjaGFyKiB0eXBl
TmFtZShKU0NlbGwqKTsKKyAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBtX3R5cGVDb3VudFNldDsK
K307CisKK2lubGluZSBUeXBlQ291bnRlcjo6VHlwZUNvdW50ZXIoKQorICAgIDogbV90eXBlQ291
bnRTZXQobmV3IFR5cGVDb3VudFNldCkKK3sKK30KKworaW5saW5lIGNvbnN0IGNoYXIqIFR5cGVD
b3VudGVyOjp0eXBlTmFtZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgaWYgKGNlbGwtPmlzU3RyaW5n
KCkpCiAgICAgICAgIHJldHVybiAic3RyaW5nIjsKQEAgLTMzNywyNyArMzUyLDMyIEBAIHN0YXRp
YyBjb25zdCBjaGFyKiB0eXBlTmFtZShKU0NlbGwqIGNlbGwKICAgICByZXR1cm4gaW5mbyA/IGlu
Zm8tPmNsYXNzTmFtZSA6ICJPYmplY3QiOwogfQogCi1IYXNoQ291bnRlZFNldDxjb25zdCBjaGFy
Kj4qIEhlYXA6OnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKQoraW5saW5lIHZvaWQgVHlwZUNv
dW50ZXI6Om9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQogewotICAgIEhhc2hDb3VudGVkU2V0PGNv
bnN0IGNoYXIqPiogY291bnRzID0gbmV3IEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjsKKyAg
ICBtX3R5cGVDb3VudFNldC0+YWRkKHR5cGVOYW1lKGNlbGwpKTsKK30KKworaW5saW5lIFBhc3NP
d25QdHI8VHlwZUNvdW50U2V0PiBUeXBlQ291bnRlcjo6dGFrZSgpCit7CisgICAgcmV0dXJuIG1f
dHlwZUNvdW50U2V0LnJlbGVhc2UoKTsKK30KKworUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IEhl
YXA6OnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKQoreworICAgIFR5cGVDb3VudGVyIHR5cGVD
b3VudGVyOwogCiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3Rl
ZFZhbHVlcy5lbmQoKTsKICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBt
X3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGNvdW50
cy0+YWRkKHR5cGVOYW1lKGl0LT5maXJzdCkpOworICAgICAgICB0eXBlQ291bnRlcihpdC0+Zmly
c3QpOwogCi0gICAgcmV0dXJuIGNvdW50czsKKyAgICByZXR1cm4gdHlwZUNvdW50ZXIudGFrZSgp
OwogfQogCi1IYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4qIEhlYXA6Om9iamVjdFR5cGVDb3Vu
dHMoKQorUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IEhlYXA6Om9iamVjdFR5cGVDb3VudHMoKQog
ewotICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiogY291bnRzID0gbmV3IEhhc2hDb3Vu
dGVkU2V0PGNvbnN0IGNoYXIqPjsKLQotICAgIExpdmVPYmplY3RJdGVyYXRvciBpdCA9IHByaW1h
cnlIZWFwQmVnaW4oKTsKLSAgICBMaXZlT2JqZWN0SXRlcmF0b3IgaGVhcEVuZCA9IHByaW1hcnlI
ZWFwRW5kKCk7Ci0gICAgZm9yICggOyBpdCAhPSBoZWFwRW5kOyArK2l0KQotICAgICAgICBjb3Vu
dHMtPmFkZCh0eXBlTmFtZSgqaXQpKTsKLQotICAgIHJldHVybiBjb3VudHM7CisgICAgVHlwZUNv
dW50ZXIgdHlwZUNvdW50ZXI7CisgICAgZm9yRWFjaCh0eXBlQ291bnRlcik7CisgICAgcmV0dXJu
IHR5cGVDb3VudGVyLnRha2UoKTsKIH0KIAogYm9vbCBIZWFwOjppc0J1c3koKQpAQCAtMzk1LDE2
ICs0MTUsNiBAQCB2b2lkIEhlYXA6OnJlc2V0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZ2xlCiAgICAg
KCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7CiB9CiAKLUxpdmVPYmplY3RJdGVyYXRvciBIZWFwOjpw
cmltYXJ5SGVhcEJlZ2luKCkKLXsKLSAgICByZXR1cm4gbV9tYXJrZWRTcGFjZS5wcmltYXJ5SGVh
cEJlZ2luKCk7Ci19Ci0KLUxpdmVPYmplY3RJdGVyYXRvciBIZWFwOjpwcmltYXJ5SGVhcEVuZCgp
Ci17Ci0gICAgcmV0dXJuIG1fbWFya2VkU3BhY2UucHJpbWFyeUhlYXBFbmQoKTsKLX0KLQogdm9p
ZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNr
PiBhY3Rpdml0eUNhbGxiYWNrKQogewogICAgIG1fYWN0aXZpdHlDYWxsYmFjayA9IGFjdGl2aXR5
Q2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcC5oCShyZXZpc2lv
biA3ODM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHR5cGVkZWYg
c3RkOjpwYWlyPEpTVmFsdWUsIFVTdHJpbmc+IFZhbHVlU3RyaW5nUGFpcjsKICAgICB0eXBlZGVm
IEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RDb3VudFNldDsKKyAgICB0eXBlZGVmIEhh
c2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlQ291bnRTZXQ7CiAKICAgICBlbnVtIE9wZXJh
dGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgQ29sbGVjdGlvbiB9Owog
CkBAIC04NSw4ICs4Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgZ2xvYmFs
T2JqZWN0Q291bnQoKTsKICAgICAgICAgc2l6ZV90IHByb3RlY3RlZE9iamVjdENvdW50KCk7CiAg
ICAgICAgIHNpemVfdCBwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwotICAgICAgICBIYXNo
Q291bnRlZFNldDxjb25zdCBjaGFyKj4qIHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKTsKLSAg
ICAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+KiBvYmplY3RUeXBlQ291bnRzKCk7Cisg
ICAgICAgIFBhc3NPd25QdHI8VHlwZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRz
KCk7CisgICAgICAgIFBhc3NPd25QdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKCk7
CiAKICAgICAgICAgV2Vha0dDSGFuZGxlKiBhZGRXZWFrR0NIYW5kbGUoSlNDZWxsKik7CiAKQEAg
LTk2LDkgKzk3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hTZXQ8R2xvYmFsQ29k
ZUJsb2NrKj4mIGNvZGVCbG9ja3MoKSB7IHJldHVybiBtX2NvZGVCbG9ja3M7IH0KIAogICAgICAg
ICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4mIG1hcmtMaXN0U2V0KCkgeyBpZiAoIW1f
bWFya0xpc3RTZXQpIG1fbWFya0xpc3RTZXQgPSBuZXcgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1
ZmZlcio+OyByZXR1cm4gKm1fbWFya0xpc3RTZXQ7IH0KLQotICAgICAgICBMaXZlT2JqZWN0SXRl
cmF0b3IgcHJpbWFyeUhlYXBCZWdpbigpOwotICAgICAgICBMaXZlT2JqZWN0SXRlcmF0b3IgcHJp
bWFyeUhlYXBFbmQoKTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2goRnVuY3RvciYpOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAg
ICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwpAQCAtMTcxLDYgKzE3MSwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYWtHQ0hhbmRsZVBvb2wq
PihtX3dlYWtHQ0hhbmRsZVBvb2xzW2luZGV4XS5iYXNlKCkpOwogICAgIH0KIAorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBIZWFwOjpmb3JFYWNoKEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX21hcmtlZFNwYWNlLmZvckVhY2goZnVuY3Rvcik7
CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEhlYXBfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZp
c2lvbiA3ODM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkFyZ0xp
c3QuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiQ29sbGVjdG9ySGVhcEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCkBAIC0zMTQsMjEgKzMxMywz
MCBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0CiAgICAgaW50ZXJw
cmV0ZXItPmR1bXBTYW1wbGVEYXRhKGV4ZWMpOwogfQogCitjbGFzcyBSZWNvbXBpbGVyIHsKK3B1
YmxpYzoKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKik7Cit9OworCitpbmxpbmUgdm9pZCBS
ZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIWNlbGwtPmlu
aGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihjZWxsKTsKKyAgICBpZiAoZnVuY3Rpb24tPmV4ZWN1
dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZ1bmN0aW9u
LT5qc0V4ZWN1dGFibGUoKS0+ZGlzY2FyZENvZGUoKTsKK30KKworCiB2b2lkIEpTR2xvYmFsRGF0
YTo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKQogewogICAgIC8vIElmIEphdmFTY3JpcHQgaXMg
cnVubmluZywgaXQncyBub3Qgc2FmZSB0byByZWNvbXBpbGUsIHNpbmNlIHdlJ2xsIGVuZAogICAg
IC8vIHVwIHRocm93aW5nIGF3YXkgY29kZSB0aGF0IGlzIGxpdmUgb24gdGhlIHN0YWNrLgogICAg
IEFTU0VSVCghZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0KLSAgICBMaXZlT2JqZWN0SXRlcmF0b3Ig
aXQgPSBoZWFwLnByaW1hcnlIZWFwQmVnaW4oKTsKLSAgICBMaXZlT2JqZWN0SXRlcmF0b3IgaGVh
cEVuZCA9IGhlYXAucHJpbWFyeUhlYXBFbmQoKTsKLSAgICBmb3IgKCA7IGl0ICE9IGhlYXBFbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykp
IHsKLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbigqaXQpOwot
ICAgICAgICAgICAgaWYgKCFmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigp
KQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKS0+ZGlzY2FyZENvZGUo
KTsKLSAgICAgICAgfQotICAgIH0KKyAgICAKKyAgICBSZWNvbXBpbGVyIHJlY29tcGlsZXI7Cisg
ICAgaGVhcC5mb3JFYWNoKHJlY29tcGlsZXIpOwogfQogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFD
SU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRCbG9jay5o
CShyZXZpc2lvbiA3ODM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtl
ZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgSGVhcDsKKyAgICBjbGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgSlNHbG9i
YWxEYXRhOwogCiAgICAgY2xhc3MgTWFya2VkQmxvY2sgewpAQCAtNjEsOCArNjIsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gQ2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2Yg
dHdvIGZvciBDRUxMX01BU0sgdG8gYmUgdmFsaWQuCiAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
c2l6ZW9mKENvbGxlY3RvckNlbGwpICUgMiksIENvbGxlY3Rvcl9jZWxsX3NpemVfaXNfcG93ZXJf
b2ZfdHdvKTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yOwot
CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShKU0dsb2Jh
bERhdGEqKTsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShNYXJrZWRCbG9jayopOwpAQCAt
ODYsNiArODUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc01hcmtlZChjb25z
dCB2b2lkKik7CiAgICAgICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAg
ICAgICAgIHZvaWQgc2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2goRnVuY3RvciYpOwogCiAgICAg
ICAgIEZpeGVkQXJyYXk8Q29sbGVjdG9yQ2VsbCwgQ0VMTFNfUEVSX0JMT0NLPiBjZWxsczsKIApA
QCAtMTYyLDYgKzE2MywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFya2VkLnNldChj
ZWxsTnVtYmVyKGNlbGwpKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rv
cj4gaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmZvckVhY2goRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQ0VMTFNfUEVSX0JMT0NLIC0gMTsg
KytpKSB7IC8vIFRoZSBsYXN0IGNlbGwgaXMgYSBkdW1teSBwbGFjZS1ob2xkZXIuCisgICAgICAg
ICAgICBpZiAoIW1hcmtlZC5nZXQoaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBmdW5jdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmNlbGxzW2ldKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gTWFya2Vk
U3BhY2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3BhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZFNw
YWNlLmNwcAkocmV2aXNpb24gNzgzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogCi0jaW5jbHVkZSAiQ29s
bGVjdG9ySGVhcEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC0xMzYsMTQgKzEzNSw0IEBAIHZv
aWQgTWFya2VkU3BhY2U6OnJlc2V0KCkKICNlbmRpZgogfQogCi1MaXZlT2JqZWN0SXRlcmF0b3Ig
TWFya2VkU3BhY2U6OnByaW1hcnlIZWFwQmVnaW4oKQotewotICAgIHJldHVybiBMaXZlT2JqZWN0
SXRlcmF0b3IobV9oZWFwLCAwLCAwKTsKLX0KLQotTGl2ZU9iamVjdEl0ZXJhdG9yIE1hcmtlZFNw
YWNlOjpwcmltYXJ5SGVhcEVuZCgpCi17Ci0gICAgcmV0dXJuIExpdmVPYmplY3RJdGVyYXRvciht
X2hlYXAsIG1faGVhcC5ibG9ja3Muc2l6ZSgpLCAwKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZFNwYWNlLmgJKHJl
dmlzaW9uIDc4MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHZvaWQqKTsKIAotICAgICAgICBMaXZlT2JqZWN0
SXRlcmF0b3IgcHJpbWFyeUhlYXBCZWdpbigpOwotICAgICAgICBMaXZlT2JqZWN0SXRlcmF0b3Ig
cHJpbWFyeUhlYXBFbmQoKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoKEZ1bmN0b3ImKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE5FVkVSX0lOTElO
RSBNYXJrZWRCbG9jayogYWxsb2NhdGVCbG9jaygpOwpAQCAtMTQ2LDYgKzE0NSwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaChGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hl
YXAuYmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9oZWFwLmNvbGxlY3RvckJsb2Nr
KGkpLT5mb3JFYWNoKGZ1bmN0b3IpOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBNYXJrZWRTcGFjZV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3ODM1
NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDExLTAyLTExICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBsaXR0
bGUgbW9yZSBlbmNhcHN1bGF0aW9uIGZvciB0aGUgaGVhcDogUmVtb3ZlZCBDb2xsZWN0b3JIZWFw
SXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0Mjk4CisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAo
K1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10p
OgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50
c10pOiBVcGRhdGVkIGZvciBuZXcgdHlwZWRlZi4KKwogMjAxMS0wMi0xMCAgTmF0ZSBDaGFwaW4g
IDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgu
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHJl
dmlzaW9uIDc4MzU1KQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGlj
cy5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCArIChOU0NvdW50ZWRTZXQgKilq
YXZhU2NyaXB0UHJvdGVjdGVkT2JqCiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBb
TlNDb3VudGVkU2V0IHNldF07CiAKLSAgICBPd25QdHI8SGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hh
cio+ID4gY291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOworICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50
cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9y
IGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFy
Kj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdE9iamVjdFR5cGVDbwogICAgIAog
ICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwogCi0gICAgT3du
UHRyPEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiA+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICBPd25QdHI8
VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+
OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnNlY29uZDsgKytpKQpJ
bmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNzgzNTUpCisrKyBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMi0xMSAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgbGl0dGxlIG1vcmUgZW5jYXBzdWxhdGlvbiBm
b3IgdGhlIGhlYXA6IFJlbW92ZWQgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDI5OAorCisgICAgICAgICogV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3Jp
cHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKwogMjAxMS0wMi0wOSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNl
bWlraGF0c2t5LgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAko
cmV2aXNpb24gNzgzNTUpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw4ICsxMzksOCBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlC
YWcyKiogdHlwZU5hbWVzQW5kQ291bnRzKQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7Ci0gICAgT3duUHRyPEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiA+IGpz
T2JqZWN0VHlwZU5hbWVzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5w
cm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwotICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKKyAgICBPd25QdHI8VHlwZUNv
dW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICB0eXBlZGVmIFR5cGVD
b3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgZW5kID0ganNP
YmplY3RUeXBlTmFtZXMtPmVuZCgpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IHR5cGVDb3Vu
dE1hcDsKICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBqc09iamVjdFR5cGVOYW1lcy0+YmVn
aW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82182</attachid>
            <date>2011-02-11 14:43:47 -0800</date>
            <delta_ts>2011-02-12 18:56:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54298-20110211144346.patch</filename>
            <type>text/plain</type>
            <size>30357</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzgzNzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAK
KzIwMTEtMDItMTEgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGxpdHRsZSBtb3JlIGVu
Y2Fwc3VsYXRpb24gZm9yIHRoZSBoZWFwOiBSZW1vdmVkIENvbGxlY3RvckhlYXBJdGVyYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQyOTgKKyAg
ICAgICAgCisgICAgICAgIENvbGxlY3RvckhlYXBJdGVyYXRvciBpcyBhIEdvZCBvYmplY3QgdGhh
dCBrbm93cyB0aGUgaW50ZXJuYWxzIG9mIGVhY2gKKyAgICAgICAgb2YgdGhlIHBpZWNlcyBvZiB0
aGUgaGVhcC4gVGhpcyB1bmRlcm1pbmVzIHRoZSBlbmNhcHN1bGF0aW9uIEknbSB0cnlpbmcKKyAg
ICAgICAgdG8gYWNoaWV2ZSBieSBzcGxpdHRpbmcgY29uY2VwdHMgaW50byBkaWZmZXJlbnQgY2xh
c3Nlcy4KKyAgICAgICAgCisgICAgICAgIEFzIGFuIGFsdGVybmF0aXZlLCBJJ3ZlIGdpdmVuIGVh
Y2ggY2xhc3MgYSBmb3JFYWNoIGl0ZXJhdGlvbiBmdW5jdGlvbiwKKyAgICAgICAgd2hpY2ggdGFr
ZXMgYSBmdW5jdG9yIGFzIGFuIGFyZ3VtZW50LiBOb3csIGVhY2ggY2xhc3MganVzdCBuZWVkcyB0
bworICAgICAgICBrbm93IGhvdyB0byBpdGVyYXRlIHRoZSB0aGluZ3MgaXQga25vd3MgYWJvdXQu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5l
eHA6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOiBSZW1vdmVk
IENvbGxlY3RvckhlYXBJdGVyYXRvci4KKworICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6UmVjb21waWxlcjo6UmVjb21waWxlcik6CisgICAgICAgIChKU0M6
OlJlY29tcGlsZXI6On5SZWNvbXBpbGVyKToKKyAgICAgICAgKEpTQzo6UmVjb21waWxlcjo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cyk6IFVwZGF0ZWQgdG8gdXNlIGZvckVhY2ggaW50ZXJmYWNlCisgICAgICAgIGluc3RlYWQgb2Yg
YW4gaXRlcmF0b3IuCisKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5o
OiBSZW1vdmVkLgorCisgICAgICAgICogcnVudGltZS9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6
VHlwZUNvdW50ZXI6OlR5cGVDb3VudGVyKToKKyAgICAgICAgKEpTQzo6VHlwZUNvdW50ZXI6OnR5
cGVOYW1lKToKKyAgICAgICAgKEpTQzo6VHlwZUNvdW50ZXI6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpUeXBlQ291bnRlcjo6dGFrZSk6CisgICAgICAgIChKU0M6OkhlYXA6OnByb3RlY3Rl
ZE9iamVjdFR5cGVDb3VudHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpvYmplY3RUeXBlQ291bnRz
KTogQWRkZWQgZm9yRWFjaCBhbmQgcmVtb3ZlZCBpdGVyYXRvci4KKworICAgICAgICAqIHJ1bnRp
bWUvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpmb3JFYWNoKToKKyAgICAgICAgKiBydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OlJlY29tcGlsZXI6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25z
KToKKworICAgICAgICAqIHJ1bnRpbWUvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OmZvckVhY2gpOiBBZGRlZCBmb3JFYWNoLiBSZW1vdmVkIGZyaWVuZCBkZWNsYXJh
dGlvbgorICAgICAgICBmb3IgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLiBOb3csIHdlIGNhbiBtYWtl
IGFsbCBvdXIgZGF0YSBwcml2YXRlIGFuZAorICAgICAgICBjaGFuZ2UgaXQgd2l0aG91dCBicmVh
a2luZyBhbnkgb3RoZXIgY2xhc3Nlcy4KKworICAgICAgICAqIHJ1bnRpbWUvTWFya2VkU3BhY2Uu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvTWFya2VkU3BhY2UuaDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkU3BhY2U6OmZvckVhY2gpOiBBZGRlZCBmb3JFYWNoIGFuZCByZW1vdmVkIGl0ZXJhdG9yLgor
CiAyMDExLTAyLTExICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQW5kcmVhcyBLbGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUuYW0JKHJldmlzaW9uIDc4MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDYgQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3Bh
Y2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcC5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwCShyZXZpc2lvbiA3ODM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMCArMjA2LDggQEAgX19a
TjNKU0MyNGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvckVQTlNfOQogX19aTjNKU0MyNWV2YWx1YXRl
SW5HbG9iYWxDYWxsRnJhbWVFUktOU183VVN0cmluZ0VSTlNfN0pTVmFsdWVFUE5TXzE0SlNHbG9i
YWxPYmplY3RFCiBfX1pOM0pTQzM1Y3JlYXRlSW50ZXJydXB0ZWRFeGVjdXRpb25FeGNlcHRpb25F
UE5TXzEySlNHbG9iYWxEYXRhRQogX19aTjNKU0MzTmFORQotX19aTjNKU0M0SGVhcDE0cHJpbWFy
eUhlYXBFbmRFdgogX19aTjNKU0M0SGVhcDE1YWRkV2Vha0dDSGFuZGxlRVBOU182SlNDZWxsRQog
X19aTjNKU0M0SGVhcDE2b2JqZWN0VHlwZUNvdW50c0V2Ci1fX1pOM0pTQzRIZWFwMTZwcmltYXJ5
SGVhcEJlZ2luRXYKIF9fWk4zSlNDNEhlYXAxN2NvbGxlY3RBbGxHYXJiYWdlRXYKIF9fWk4zSlND
NEhlYXAxN2dsb2JhbE9iamVjdENvdW50RXYKIF9fWk4zSlNDNEhlYXAxOXNldEFjdGl2aXR5Q2Fs
bGJhY2tFTjNXVEYxMFBhc3NPd25QdHJJTlNfMThHQ0FjdGl2aXR5Q2FsbGJhY2tFRUUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCShyZXZpc2lvbiA3ODM3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCSh3b3JraW5n
IGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAKICAgICAgICAgICAgICdydW50aW1lL01hcmtlZFNw
YWNlLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvSGVhcC5jcHAnLAogICAgICAgICAgICAgJ3J1
bnRpbWUvSGVhcC5oJywKLSAgICAgICAgICAgICdydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRv
ci5oJywKICAgICAgICAgICAgICdydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcCcsCiAgICAg
ICAgICAgICAncnVudGltZS9Db21tb25JZGVudGlmaWVycy5oJywKICAgICAgICAgICAgICdydW50
aW1lL0NvbXBsZXRpb24uY3BwJywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCShyZXZpc2lvbiA3ODM3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNyArMjUyLDYgQEAgRVhQT1JUUwog
ICAgID9wcm90ZWN0QEhlYXBASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgogICAgID9wcm90ZWN0ZWRH
bG9iYWxPYmplY3RDb3VudEBIZWFwQEpTQ0BAUUFFSVhaCiAgICAgP3Byb3RlY3RlZE9iamVjdENv
dW50QEhlYXBASlNDQEBRQUVJWFoKLSAgICA/cHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c0BIZWFw
QEpTQ0BAUUFFUEFWPyRIYXNoQ291bnRlZFNldEBQQkRVPyRQdHJIYXNoQFBCREBXVEZAQFU/JEhh
c2hUcmFpdHNAUEJEQDJAQFdURkBAWFoKICAgICA/cHV0QEpTQ2VsbEBKU0NAQFVBRVhQQVZFeGVj
U3RhdGVAMkBBQlZJZGVudGlmaWVyQDJAVkpTVmFsdWVAMkBBQVZQdXRQcm9wZXJ0eVNsb3RAMkBA
WgogICAgID9wdXRASlNDZWxsQEpTQ0BAVUFFWFBBVkV4ZWNTdGF0ZUAyQElWSlNWYWx1ZUAyQEBa
CiAgICAgP3B1dEBKU0dsb2JhbE9iamVjdEBKU0NAQFVBRVhQQVZFeGVjU3RhdGVAMkBBQlZJZGVu
dGlmaWVyQDJAVkpTVmFsdWVAMkBBQVZQdXRQcm9wZXJ0eVNsb3RAMkBAWgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJ
KHJldmlzaW9uIDc4MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTYxMCwxMCArNjEwLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxDb2xsZWN0b3JIZWFwSW50cm9zcGVjdG9yLmgi
Ci0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1
bnRpbWVcQ29tbW9uSWRlbnRpZmllcnMuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3ODM3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDYgQEAKIAkJMTRDODI0QUIxMkY3Qzc3RTAwOEYzNUUw
IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0QzgyNEFBMTJGN0M3N0UwMDhGMzVFMCAvKiBNYXJrZWRCbG9jay5jcHAgKi87
IH07CiAJCTE0QzgyNEFEMTJGN0M3ODUwMDhGMzVFMCAvKiBNYXJrZWRCbG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDODI0QUMxMkY3Qzc4NTAw
OEYzNUUwIC8qIE1hcmtlZEJsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDNzU2RkM2MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAgKi87IH07Ci0JCTE0RjM0ODhGMEU5NUVGOEEwMDM2NDhCQyAvKiBDb2xsZWN0b3JIZWFw
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0RjM0ODhFMEU5NUVGOEEwMDM2NDhCQyAvKiBDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkxNEY4QkEzRTEwN0VDODg2MDA5
ODkyREMgLyogRmFzdE1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUUyMTdCOTA4RTdFRUNDMDAyM0U1RjYgLyogRmFzdE1hbGxvYy5jcHAg
Ki87IH07CiAJCTE0RjhCQTQzMTA3RUM4OEMwMDk4OTJEQyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDcwMDhF
ODBBMTcwMDJDQkVFNyAvKiBUQ1N5c3RlbUFsbG9jLmNwcCAqLzsgfTsKIAkJMTRGRkY5OEMxMkJG
RkY3NTAwNzk1QkI4IC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEZGRjk4QTEyQkZGRjc1MDA3OTVCQjgg
LyogUGFnZUFsbG9jYXRpb25BbGlnbmVkLmNwcCAqLzsgfTsKQEAgLTc2MCw3ICs3NTksNiBAQAog
CQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNBY3RpdmF0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQWN0aXZhdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0REUwRDY4MEQwMjQzMTQwMEFBQ0NBMiAvKiBKU0dsb2JhbE9i
amVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbE9i
amVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjI1MjU2MEQwOEREOEQw
MDRFQ0ZGRiAvKiBKU1ZhcmlhYmxlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTVmFyaWFibGVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MTRGMzQ4OEUwRTk1RUY4QTAwMzY0OEJDIC8qIENvbGxlY3RvckhlYXBJdGVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xsZWN0b3JIZWFwSXRlcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGRkY5OEExMkJGRkY3NTAwNzk1QkI4IC8qIFBh
Z2VBbGxvY2F0aW9uQWxpZ25lZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQYWdlQWxsb2NhdGlvbkFsaWduZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNEZGRjk4QjEyQkZGRjc1MDA3OTVCQjggLyogUGFnZUFsbG9jYXRpb25BbGlnbmVkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxODBCOUFFRjBGMTZDNTY5MDA5QkRCQzUg
LyogQ3VycmVudFRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q3VycmVudFRpbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5OSw3ICsx
Njk3LDYgQEAKIAkJCQlCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICov
LAogCQkJCTE0NUM1MDdGMEQ5REY2M0IwMDg4RjZCOSAvKiBDYWxsRGF0YS5oICovLAogCQkJCUJD
NkFBQUU0MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCAqLywKLQkJCQkxNEYzNDg4RTBF
OTVFRjhBMDAzNjQ4QkMgLyogQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmggKi8sCiAJCQkJNjVFQTcz
NjIwQkFFMzVEMTAwMUJCNTYwIC8qIENvbW1vbklkZW50aWZpZXJzLmNwcCAqLywKIAkJCQk2NUVB
NzM2MzBCQUUzNUQxMDAxQkI1NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCAqLywKIAkJCQk5NjlB
MDkyMjBFRDFFMDlDMDBGMUY2ODEgLyogQ29tcGxldGlvbi5jcHAgKi8sCkBAIC0yMTI5LDcgKzIx
MjYsNiBAQAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb2xsYXRv
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRGMzQ4OEYwRTk1RUY4QTAwMzY0OEJDIC8qIENvbGxl
Y3RvckhlYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAw
QjM0NDYwIC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNG
NDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkRB
MTVDMUUxMkIwMzA1QzAwM0E1ODNBIC8qIENvbXBsZXguaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiA3
ODM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJEZWJ1Z2dlci5oIgogCi0jaW5jbHVkZSAiQ29sbGVjdG9ySGVhcEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb24uaCIKQEAgLTMyLDYgKzMxLDU3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFz
cyBSZWNvbXBpbGVyIHsKK3B1YmxpYzoKKyAgICBSZWNvbXBpbGVyKERlYnVnZ2VyKik7CisgICAg
flJlY29tcGlsZXIoKTsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKik7CisKK3ByaXZhdGU6
CisgICAgdHlwZWRlZiBIYXNoU2V0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+IEZ1bmN0aW9uRXhlY3V0
YWJsZVNldDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U291cmNlUHJvdmlkZXIqLCBFeGVjU3RhdGUq
PiBTb3VyY2VQcm92aWRlck1hcDsKKyAgICAKKyAgICBEZWJ1Z2dlciogbV9kZWJ1Z2dlcjsKKyAg
ICBGdW5jdGlvbkV4ZWN1dGFibGVTZXQgbV9mdW5jdGlvbkV4ZWN1dGFibGVzOworICAgIFNvdXJj
ZVByb3ZpZGVyTWFwIG1fc291cmNlUHJvdmlkZXJzOworfTsKKworaW5saW5lIFJlY29tcGlsZXI6
OlJlY29tcGlsZXIoRGVidWdnZXIqIGRlYnVnZ2VyKQorICAgIDogbV9kZWJ1Z2dlcihkZWJ1Z2dl
cikKK3sKK30KKworaW5saW5lIFJlY29tcGlsZXI6On5SZWNvbXBpbGVyKCkKK3sKKyAgICAvLyBD
YWxsIHNvdXJjZVBhcnNlZCgpIGFmdGVyIHJlcGFyc2luZyBhbGwgZnVuY3Rpb25zIGJlY2F1c2Ug
aXQgd2lsbCBleGVjdXRlCisgICAgLy8gSmF2YVNjcmlwdCBpbiB0aGUgaW5zcGVjdG9yLgorICAg
IFNvdXJjZVByb3ZpZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3NvdXJjZVByb3ZpZGVy
cy5lbmQoKTsKKyAgICBmb3IgKFNvdXJjZVByb3ZpZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9zb3VyY2VQcm92aWRlcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAg
ICAgbV9kZWJ1Z2dlci0+c291cmNlUGFyc2VkKGl0ZXItPnNlY29uZCwgaXRlci0+Zmlyc3QsIC0x
LCBVU3RyaW5nKCkpOworfQorCitpbmxpbmUgdm9pZCBSZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIWNlbGwtPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZv
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0
aW9uKGNlbGwpOworICAgIGlmIChmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlv
bigpKQorICAgICAgICByZXR1cm47CisKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgZnVu
Y3Rpb24gaXMgYWxyZWFkeSBpbiB0aGUgc2V0IC0gaWYgc28sCisgICAgLy8gd2UndmUgYWxyZWFk
eSByZXRyYW5zbGF0ZWQgaXQsIG5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICBpZiAoIW1fZnVuY3Rp
b25FeGVjdXRhYmxlcy5hZGQoZXhlY3V0YWJsZSkuc2Vjb25kKQorICAgICAgICByZXR1cm47CisK
KyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBmdW5jdGlvbi0+c2NvcGUoKS5nbG9iYWxPYmplY3QoKS0+
SlNHbG9iYWxPYmplY3Q6Omdsb2JhbEV4ZWMoKTsKKyAgICBleGVjdXRhYmxlLT5kaXNjYXJkQ29k
ZSgpOworICAgIGlmIChtX2RlYnVnZ2VyID09IGZ1bmN0aW9uLT5zY29wZSgpLmdsb2JhbE9iamVj
dCgpLT5kZWJ1Z2dlcigpKQorICAgICAgICBtX3NvdXJjZVByb3ZpZGVycy5hZGQoZXhlY3V0YWJs
ZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlYyk7Cit9CisKIERlYnVnZ2VyOjp+RGVidWdnZXIo
KQogewogICAgIEhhc2hTZXQ8SlNHbG9iYWxPYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gbV9nbG9i
YWxPYmplY3RzLmVuZCgpOwpAQCAtNjEsNDAgKzExMSw4IEBAIHZvaWQgRGVidWdnZXI6OnJlY29t
cGlsZUFsbEpTRnVuY3Rpb25zKEoKICAgICBpZiAoZ2xvYmFsRGF0YS0+ZHluYW1pY0dsb2JhbE9i
amVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHlwZWRlZiBIYXNoU2V0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+IEZ1bmN0aW9uRXhlY3V0YWJsZVNldDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U291
cmNlUHJvdmlkZXIqLCBFeGVjU3RhdGUqPiBTb3VyY2VQcm92aWRlck1hcDsKLQotICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZVNldCBmdW5jdGlvbkV4ZWN1dGFibGVzOwotICAgIFNvdXJjZVByb3ZpZGVy
TWFwIHNvdXJjZVByb3ZpZGVyczsKLQotICAgIExpdmVPYmplY3RJdGVyYXRvciBpdCA9IGdsb2Jh
bERhdGEtPmhlYXAucHJpbWFyeUhlYXBCZWdpbigpOwotICAgIExpdmVPYmplY3RJdGVyYXRvciBo
ZWFwRW5kID0gZ2xvYmFsRGF0YS0+aGVhcC5wcmltYXJ5SGVhcEVuZCgpOwotICAgIGZvciAoIDsg
aXQgIT0gaGVhcEVuZDsgKytpdCkgewotICAgICAgICBpZiAoISgqaXQpLT5pbmhlcml0cygmSlNG
dW5jdGlvbjo6aW5mbykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oKml0KTsKLSAgICAgICAgaWYgKGZ1bmN0aW9uLT5l
eGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+anNFeGVj
dXRhYmxlKCk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZ1bmN0aW9uIGlzIGFscmVhZHkg
aW4gdGhlIHNldCAtIGlmIHNvLAotICAgICAgICAvLyB3ZSd2ZSBhbHJlYWR5IHJldHJhbnNsYXRl
ZCBpdCwgbm90aGluZyB0byBkbyBoZXJlLgotICAgICAgICBpZiAoIWZ1bmN0aW9uRXhlY3V0YWJs
ZXMuYWRkKGV4ZWN1dGFibGUpLnNlY29uZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGZ1bmN0aW9uLT5zY29wZSgpLmdsb2JhbE9iamVjdCgpLT5K
U0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygpOwotICAgICAgICBleGVjdXRhYmxlLT5kaXNjYXJk
Q29kZSgpOwotICAgICAgICBpZiAoZnVuY3Rpb24tPnNjb3BlKCkuZ2xvYmFsT2JqZWN0KCktPmRl
YnVnZ2VyKCkgPT0gdGhpcykKLSAgICAgICAgICAgIHNvdXJjZVByb3ZpZGVycy5hZGQoZXhlY3V0
YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlYyk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBz
b3VyY2VQYXJzZWQoKSBhZnRlciByZXBhcnNpbmcgYWxsIGZ1bmN0aW9ucyBiZWNhdXNlIGl0IHdp
bGwgZXhlY3V0ZQotICAgIC8vIEphdmFTY3JpcHQgaW4gdGhlIGluc3BlY3Rvci4KLSAgICBTb3Vy
Y2VQcm92aWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc291cmNlUHJvdmlkZXJzLmVuZCgp
OwotICAgIGZvciAoU291cmNlUHJvdmlkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzb3Vy
Y2VQcm92aWRlcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgc291cmNl
UGFyc2VkKGl0ZXItPnNlY29uZCwgaXRlci0+Zmlyc3QsIC0xLCBVU3RyaW5nKCkpOworICAgIFJl
Y29tcGlsZXIgcmVjb21waWxlcih0aGlzKTsKKyAgICBnbG9iYWxEYXRhLT5oZWFwLmZvckVhY2go
cmVjb21waWxlcik7CiB9CiAKIEpTVmFsdWUgZXZhbHVhdGVJbkdsb2JhbENhbGxGcmFtZShjb25z
dCBVU3RyaW5nJiBzY3JpcHQsIEpTVmFsdWUmIGV4Y2VwdGlvbiwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rv
ckhlYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5oCShyZXZpc2lvbiA3ODM3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3RvckhlYXBJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIZWFwLmgi
Ci0KLSNpZm5kZWYgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yX2gKLSNkZWZpbmUgQ29sbGVjdG9ySGVh
cEl0ZXJhdG9yX2gKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSAgICBjbGFzcyBDb2xsZWN0b3JIZWFw
SXRlcmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENv
bGxlY3RvckhlYXBJdGVyYXRvciYgb3RoZXIpOwotICAgICAgICBKU0NlbGwqIG9wZXJhdG9yKigp
IGNvbnN0OwotICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgQ29sbGVjdG9ySGVhcEl0ZXJh
dG9yKENvbGxlY3RvckhlYXAmLCBzaXplX3Qgc3RhcnRCbG9jaywgc2l6ZV90IHN0YXJ0Q2VsbCk7
Ci0gICAgICAgIHZvaWQgYWR2YW5jZSgpOwotICAgICAgICBib29sIGlzVmFsaWQoKTsKLSAgICAg
ICAgYm9vbCBpc0xpdmUoKTsKLQotICAgICAgICBDb2xsZWN0b3JIZWFwJiBtX2hlYXA7Ci0gICAg
ICAgIHNpemVfdCBtX2Jsb2NrOwotICAgICAgICBzaXplX3QgbV9jZWxsOwotICAgIH07Ci0KLSAg
ICBjbGFzcyBMaXZlT2JqZWN0SXRlcmF0b3IgOiBwdWJsaWMgQ29sbGVjdG9ySGVhcEl0ZXJhdG9y
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExpdmVPYmplY3RJdGVyYXRvcihDb2xsZWN0b3JIZWFw
Jiwgc2l6ZV90IHN0YXJ0QmxvY2ssIHNpemVfdCBzdGFydENlbGwgPSAwKTsKLSAgICAgICAgTGl2
ZU9iamVjdEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0gICAgfTsKLQotICAgIGlubGluZSBDb2xs
ZWN0b3JIZWFwSXRlcmF0b3I6OkNvbGxlY3RvckhlYXBJdGVyYXRvcihDb2xsZWN0b3JIZWFwJiBo
ZWFwLCBzaXplX3Qgc3RhcnRCbG9jaywgc2l6ZV90IHN0YXJ0Q2VsbCkKLSAgICAgICAgOiBtX2hl
YXAoaGVhcCkKLSAgICAgICAgLCBtX2Jsb2NrKHN0YXJ0QmxvY2spCi0gICAgICAgICwgbV9jZWxs
KHN0YXJ0Q2VsbCkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgQ29sbGVjdG9ySGVh
cEl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IENvbGxlY3RvckhlYXBJdGVyYXRvciYgb3RoZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ibG9jayAhPSBvdGhlci5tX2Jsb2NrIHx8IG1fY2Vs
bCAhPSBvdGhlci5tX2NlbGw7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgQ29sbGVjdG9ySGVh
cEl0ZXJhdG9yOjppc1ZhbGlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrIDwgbV9o
ZWFwLmJsb2Nrcy5zaXplKCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgQ29sbGVjdG9ySGVh
cEl0ZXJhdG9yOjppc0xpdmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGVhcC5jb2xsZWN0
b3JCbG9jayhtX2Jsb2NrKS0+bWFya2VkLmdldChtX2NlbGwpOwotICAgIH0KLQotICAgIGlubGlu
ZSBKU0NlbGwqIENvbGxlY3RvckhlYXBJdGVyYXRvcjo6b3BlcmF0b3IqKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2VsbCo+KCZtX2hlYXAuY29sbGVj
dG9yQmxvY2sobV9ibG9jayktPmNlbGxzW21fY2VsbF0pOwotICAgIH0KLSAgICAKLSAgICAvLyBJ
dGVyYXRvcnMgYWR2YW5jZSB1cCB0byB0aGUgbmV4dC10by1sYXN0IC0tIGFuZCBub3QgdGhlIGxh
c3QgLS0gY2VsbCBpbiBhCi0gICAgLy8gYmxvY2ssIHNpbmNlIHRoZSBsYXN0IGNlbGwgaXMgYSBk
dW1teSBzZW50aW5lbC4KLSAgICBpbmxpbmUgdm9pZCBDb2xsZWN0b3JIZWFwSXRlcmF0b3I6OmFk
dmFuY2UoKQotICAgIHsKLSAgICAgICAgKyttX2NlbGw7Ci0gICAgICAgIGlmIChtX2NlbGwgPT0g
TWFya2VkQmxvY2s6OkNFTExTX1BFUl9CTE9DSyAtIDEpIHsKLSAgICAgICAgICAgIG1fY2VsbCA9
IDA7Ci0gICAgICAgICAgICArK21fYmxvY2s7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbmxp
bmUgTGl2ZU9iamVjdEl0ZXJhdG9yOjpMaXZlT2JqZWN0SXRlcmF0b3IoQ29sbGVjdG9ySGVhcCYg
aGVhcCwgc2l6ZV90IHN0YXJ0QmxvY2ssIHNpemVfdCBzdGFydENlbGwpCi0gICAgICAgIDogQ29s
bGVjdG9ySGVhcEl0ZXJhdG9yKGhlYXAsIHN0YXJ0QmxvY2ssIHN0YXJ0Q2VsbCkKLSAgICB7Ci0g
ICAgICAgIGlmIChpc1ZhbGlkKCkgJiYgIWlzTGl2ZSgpKQotICAgICAgICAgICAgKysoKnRoaXMp
OwotICAgIH0KLQotICAgIGlubGluZSBMaXZlT2JqZWN0SXRlcmF0b3ImIExpdmVPYmplY3RJdGVy
YXRvcjo6b3BlcmF0b3IrKygpCi0gICAgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBhZHZh
bmNlKCk7Ci0gICAgICAgIH0gd2hpbGUgKGlzVmFsaWQoKSAmJiAhaXNMaXZlKCkpOwotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8v
IENvbGxlY3RvckhlYXBJdGVyYXRvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IZWFwLmNwcAkocmV2aXNpb24gNzgzNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUg
IkhlYXAuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvbGxlY3Rvckhl
YXBJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVNldC5oIgogI2luY2x1ZGUgIkdD
QWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkdDSGFuZGxlLmgiCkBAIC0zMjEsNyArMzIw
LDIzIEBAIHNpemVfdCBIZWFwOjpwcm90ZWN0ZWRPYmplY3RDb3VudCgpCiAgICAgcmV0dXJuIG1f
cHJvdGVjdGVkVmFsdWVzLnNpemUoKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1l
KEpTQ2VsbCogY2VsbCkKK2NsYXNzIFR5cGVDb3VudGVyIHsKK3B1YmxpYzoKKyAgICBUeXBlQ291
bnRlcigpOworICAgIHZvaWQgb3BlcmF0b3IoKShKU0NlbGwqKTsKKyAgICBQYXNzT3duUHRyPFR5
cGVDb3VudFNldD4gdGFrZSgpOworICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCBjaGFyKiB0eXBl
TmFtZShKU0NlbGwqKTsKKyAgICBPd25QdHI8VHlwZUNvdW50U2V0PiBtX3R5cGVDb3VudFNldDsK
K307CisKK2lubGluZSBUeXBlQ291bnRlcjo6VHlwZUNvdW50ZXIoKQorICAgIDogbV90eXBlQ291
bnRTZXQobmV3IFR5cGVDb3VudFNldCkKK3sKK30KKworaW5saW5lIGNvbnN0IGNoYXIqIFR5cGVD
b3VudGVyOjp0eXBlTmFtZShKU0NlbGwqIGNlbGwpCiB7CiAgICAgaWYgKGNlbGwtPmlzU3RyaW5n
KCkpCiAgICAgICAgIHJldHVybiAic3RyaW5nIjsKQEAgLTMzNywyNyArMzUyLDMyIEBAIHN0YXRp
YyBjb25zdCBjaGFyKiB0eXBlTmFtZShKU0NlbGwqIGNlbGwKICAgICByZXR1cm4gaW5mbyA/IGlu
Zm8tPmNsYXNzTmFtZSA6ICJPYmplY3QiOwogfQogCi1IYXNoQ291bnRlZFNldDxjb25zdCBjaGFy
Kj4qIEhlYXA6OnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKQoraW5saW5lIHZvaWQgVHlwZUNv
dW50ZXI6Om9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQogewotICAgIEhhc2hDb3VudGVkU2V0PGNv
bnN0IGNoYXIqPiogY291bnRzID0gbmV3IEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPjsKKyAg
ICBtX3R5cGVDb3VudFNldC0+YWRkKHR5cGVOYW1lKGNlbGwpKTsKK30KKworaW5saW5lIFBhc3NP
d25QdHI8VHlwZUNvdW50U2V0PiBUeXBlQ291bnRlcjo6dGFrZSgpCit7CisgICAgcmV0dXJuIG1f
dHlwZUNvdW50U2V0LnJlbGVhc2UoKTsKK30KKworUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IEhl
YXA6OnByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKQoreworICAgIFR5cGVDb3VudGVyIHR5cGVD
b3VudGVyOwogCiAgICAgUHJvdGVjdENvdW50U2V0OjppdGVyYXRvciBlbmQgPSBtX3Byb3RlY3Rl
ZFZhbHVlcy5lbmQoKTsKICAgICBmb3IgKFByb3RlY3RDb3VudFNldDo6aXRlcmF0b3IgaXQgPSBt
X3Byb3RlY3RlZFZhbHVlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGNvdW50
cy0+YWRkKHR5cGVOYW1lKGl0LT5maXJzdCkpOworICAgICAgICB0eXBlQ291bnRlcihpdC0+Zmly
c3QpOwogCi0gICAgcmV0dXJuIGNvdW50czsKKyAgICByZXR1cm4gdHlwZUNvdW50ZXIudGFrZSgp
OwogfQogCi1IYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj4qIEhlYXA6Om9iamVjdFR5cGVDb3Vu
dHMoKQorUGFzc093blB0cjxUeXBlQ291bnRTZXQ+IEhlYXA6Om9iamVjdFR5cGVDb3VudHMoKQog
ewotICAgIEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiogY291bnRzID0gbmV3IEhhc2hDb3Vu
dGVkU2V0PGNvbnN0IGNoYXIqPjsKLQotICAgIExpdmVPYmplY3RJdGVyYXRvciBpdCA9IHByaW1h
cnlIZWFwQmVnaW4oKTsKLSAgICBMaXZlT2JqZWN0SXRlcmF0b3IgaGVhcEVuZCA9IHByaW1hcnlI
ZWFwRW5kKCk7Ci0gICAgZm9yICggOyBpdCAhPSBoZWFwRW5kOyArK2l0KQotICAgICAgICBjb3Vu
dHMtPmFkZCh0eXBlTmFtZSgqaXQpKTsKLQotICAgIHJldHVybiBjb3VudHM7CisgICAgVHlwZUNv
dW50ZXIgdHlwZUNvdW50ZXI7CisgICAgZm9yRWFjaCh0eXBlQ291bnRlcik7CisgICAgcmV0dXJu
IHR5cGVDb3VudGVyLnRha2UoKTsKIH0KIAogYm9vbCBIZWFwOjppc0J1c3koKQpAQCAtMzk1LDE2
ICs0MTUsNiBAQCB2b2lkIEhlYXA6OnJlc2V0KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZ2xlCiAgICAg
KCptX2FjdGl2aXR5Q2FsbGJhY2spKCk7CiB9CiAKLUxpdmVPYmplY3RJdGVyYXRvciBIZWFwOjpw
cmltYXJ5SGVhcEJlZ2luKCkKLXsKLSAgICByZXR1cm4gbV9tYXJrZWRTcGFjZS5wcmltYXJ5SGVh
cEJlZ2luKCk7Ci19Ci0KLUxpdmVPYmplY3RJdGVyYXRvciBIZWFwOjpwcmltYXJ5SGVhcEVuZCgp
Ci17Ci0gICAgcmV0dXJuIG1fbWFya2VkU3BhY2UucHJpbWFyeUhlYXBFbmQoKTsKLX0KLQogdm9p
ZCBIZWFwOjpzZXRBY3Rpdml0eUNhbGxiYWNrKFBhc3NPd25QdHI8R0NBY3Rpdml0eUNhbGxiYWNr
PiBhY3Rpdml0eUNhbGxiYWNrKQogewogICAgIG1fYWN0aXZpdHlDYWxsYmFjayA9IGFjdGl2aXR5
Q2FsbGJhY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGVhcC5oCShyZXZpc2lv
biA3ODM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHR5cGVkZWYg
c3RkOjpwYWlyPEpTVmFsdWUsIFVTdHJpbmc+IFZhbHVlU3RyaW5nUGFpcjsKICAgICB0eXBlZGVm
IEhhc2hDb3VudGVkU2V0PEpTQ2VsbCo+IFByb3RlY3RDb3VudFNldDsKKyAgICB0eXBlZGVmIEhh
c2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiBUeXBlQ291bnRTZXQ7CiAKICAgICBlbnVtIE9wZXJh
dGlvbkluUHJvZ3Jlc3MgeyBOb09wZXJhdGlvbiwgQWxsb2NhdGlvbiwgQ29sbGVjdGlvbiB9Owog
CkBAIC04NSw4ICs4Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgZ2xvYmFs
T2JqZWN0Q291bnQoKTsKICAgICAgICAgc2l6ZV90IHByb3RlY3RlZE9iamVjdENvdW50KCk7CiAg
ICAgICAgIHNpemVfdCBwcm90ZWN0ZWRHbG9iYWxPYmplY3RDb3VudCgpOwotICAgICAgICBIYXNo
Q291bnRlZFNldDxjb25zdCBjaGFyKj4qIHByb3RlY3RlZE9iamVjdFR5cGVDb3VudHMoKTsKLSAg
ICAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+KiBvYmplY3RUeXBlQ291bnRzKCk7Cisg
ICAgICAgIFBhc3NPd25QdHI8VHlwZUNvdW50U2V0PiBwcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRz
KCk7CisgICAgICAgIFBhc3NPd25QdHI8VHlwZUNvdW50U2V0PiBvYmplY3RUeXBlQ291bnRzKCk7
CiAKICAgICAgICAgV2Vha0dDSGFuZGxlKiBhZGRXZWFrR0NIYW5kbGUoSlNDZWxsKik7CiAKQEAg
LTk2LDkgKzk3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEhhc2hTZXQ8R2xvYmFsQ29k
ZUJsb2NrKj4mIGNvZGVCbG9ja3MoKSB7IHJldHVybiBtX2NvZGVCbG9ja3M7IH0KIAogICAgICAg
ICBIYXNoU2V0PE1hcmtlZEFyZ3VtZW50QnVmZmVyKj4mIG1hcmtMaXN0U2V0KCkgeyBpZiAoIW1f
bWFya0xpc3RTZXQpIG1fbWFya0xpc3RTZXQgPSBuZXcgSGFzaFNldDxNYXJrZWRBcmd1bWVudEJ1
ZmZlcio+OyByZXR1cm4gKm1fbWFya0xpc3RTZXQ7IH0KLQotICAgICAgICBMaXZlT2JqZWN0SXRl
cmF0b3IgcHJpbWFyeUhlYXBCZWdpbigpOwotICAgICAgICBMaXZlT2JqZWN0SXRlcmF0b3IgcHJp
bWFyeUhlYXBFbmQoKTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2goRnVuY3RvciYpOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAg
ICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwpAQCAtMTcxLDYgKzE3MSwxMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYWtHQ0hhbmRsZVBvb2wq
PihtX3dlYWtHQ0hhbmRsZVBvb2xzW2luZGV4XS5iYXNlKCkpOwogICAgIH0KIAorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBIZWFwOjpmb3JFYWNoKEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX21hcmtlZFNwYWNlLmZvckVhY2goZnVuY3Rvcik7
CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEhlYXBfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZp
c2lvbiA3ODM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkFyZ0xp
c3QuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiQ29sbGVjdG9ySGVhcEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJGdW5jdGlvbkNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCkBAIC0zMTQsMjEgKzMxMywz
MCBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0CiAgICAgaW50ZXJw
cmV0ZXItPmR1bXBTYW1wbGVEYXRhKGV4ZWMpOwogfQogCitjbGFzcyBSZWNvbXBpbGVyIHsKK3B1
YmxpYzoKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDZWxsKik7Cit9OworCitpbmxpbmUgdm9pZCBS
ZWNvbXBpbGVyOjpvcGVyYXRvcigpKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIWNlbGwtPmlu
aGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihjZWxsKTsKKyAgICBpZiAoZnVuY3Rpb24tPmV4ZWN1
dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZ1bmN0aW9u
LT5qc0V4ZWN1dGFibGUoKS0+ZGlzY2FyZENvZGUoKTsKK30KKworCiB2b2lkIEpTR2xvYmFsRGF0
YTo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKQogewogICAgIC8vIElmIEphdmFTY3JpcHQgaXMg
cnVubmluZywgaXQncyBub3Qgc2FmZSB0byByZWNvbXBpbGUsIHNpbmNlIHdlJ2xsIGVuZAogICAg
IC8vIHVwIHRocm93aW5nIGF3YXkgY29kZSB0aGF0IGlzIGxpdmUgb24gdGhlIHN0YWNrLgogICAg
IEFTU0VSVCghZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0KLSAgICBMaXZlT2JqZWN0SXRlcmF0b3Ig
aXQgPSBoZWFwLnByaW1hcnlIZWFwQmVnaW4oKTsKLSAgICBMaXZlT2JqZWN0SXRlcmF0b3IgaGVh
cEVuZCA9IGhlYXAucHJpbWFyeUhlYXBFbmQoKTsKLSAgICBmb3IgKCA7IGl0ICE9IGhlYXBFbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykp
IHsKLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbigqaXQpOwot
ICAgICAgICAgICAgaWYgKCFmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigp
KQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKS0+ZGlzY2FyZENvZGUo
KTsKLSAgICAgICAgfQotICAgIH0KKyAgICAKKyAgICBSZWNvbXBpbGVyIHJlY29tcGlsZXI7Cisg
ICAgaGVhcC5mb3JFYWNoKHJlY29tcGlsZXIpOwogfQogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFD
SU5HKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRCbG9jay5o
CShyZXZpc2lvbiA3ODM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtl
ZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgY2xhc3MgSGVhcDsKKyAgICBjbGFzcyBKU0NlbGw7CiAgICAgY2xhc3MgSlNHbG9i
YWxEYXRhOwogCiAgICAgY2xhc3MgTWFya2VkQmxvY2sgewpAQCAtNjEsOCArNjIsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgLy8gQ2VsbCBzaXplIG5lZWRzIHRvIGJlIGEgcG93ZXIgb2Yg
dHdvIGZvciBDRUxMX01BU0sgdG8gYmUgdmFsaWQuCiAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
c2l6ZW9mKENvbGxlY3RvckNlbGwpICUgMiksIENvbGxlY3Rvcl9jZWxsX3NpemVfaXNfcG93ZXJf
b2ZfdHdvKTsKIAotICAgICAgICBmcmllbmQgY2xhc3MgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yOwot
CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGNyZWF0ZShKU0dsb2Jh
bERhdGEqKTsKICAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShNYXJrZWRCbG9jayopOwpAQCAt
ODYsNiArODUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc01hcmtlZChjb25z
dCB2b2lkKik7CiAgICAgICAgIGJvb2wgdGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKik7CiAg
ICAgICAgIHZvaWQgc2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2goRnVuY3RvciYpOwogCiAgICAg
ICAgIEZpeGVkQXJyYXk8Q29sbGVjdG9yQ2VsbCwgQ0VMTFNfUEVSX0JMT0NLPiBjZWxsczsKIApA
QCAtMTYyLDYgKzE2MywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFya2VkLnNldChj
ZWxsTnVtYmVyKGNlbGwpKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rv
cj4gaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OmZvckVhY2goRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQ0VMTFNfUEVSX0JMT0NLIC0gMTsg
KytpKSB7IC8vIFRoZSBsYXN0IGNlbGwgaXMgYSBkdW1teSBwbGFjZS1ob2xkZXIuCisgICAgICAg
ICAgICBpZiAoIW1hcmtlZC5nZXQoaSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBmdW5jdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4oJmNlbGxzW2ldKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gTWFya2Vk
U3BhY2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3BhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZFNw
YWNlLmNwcAkocmV2aXNpb24gNzgzNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogCi0jaW5jbHVkZSAiQ29s
bGVjdG9ySGVhcEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCkBAIC0xMzYsMTQgKzEzNSw0IEBAIHZv
aWQgTWFya2VkU3BhY2U6OnJlc2V0KCkKICNlbmRpZgogfQogCi1MaXZlT2JqZWN0SXRlcmF0b3Ig
TWFya2VkU3BhY2U6OnByaW1hcnlIZWFwQmVnaW4oKQotewotICAgIHJldHVybiBMaXZlT2JqZWN0
SXRlcmF0b3IobV9oZWFwLCAwLCAwKTsKLX0KLQotTGl2ZU9iamVjdEl0ZXJhdG9yIE1hcmtlZFNw
YWNlOjpwcmltYXJ5SGVhcEVuZCgpCi17Ci0gICAgcmV0dXJuIExpdmVPYmplY3RJdGVyYXRvciht
X2hlYXAsIG1faGVhcC5ibG9ja3Muc2l6ZSgpLCAwKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXJrZWRTcGFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcmtlZFNwYWNlLmgJKHJl
dmlzaW9uIDc4MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFya2VkU3Bh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IHZvaWQqKTsKIAotICAgICAgICBMaXZlT2JqZWN0
SXRlcmF0b3IgcHJpbWFyeUhlYXBCZWdpbigpOwotICAgICAgICBMaXZlT2JqZWN0SXRlcmF0b3Ig
cHJpbWFyeUhlYXBFbmQoKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoKEZ1bmN0b3ImKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIE5FVkVSX0lOTElO
RSBNYXJrZWRCbG9jayogYWxsb2NhdGVCbG9jaygpOwpAQCAtMTQ2LDYgKzE0NSwxMiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBNYXJrZWRTcGFjZTo6Zm9yRWFjaChGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hl
YXAuYmxvY2tzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9oZWFwLmNvbGxlY3RvckJsb2Nr
KGkpLT5mb3JFYWNoKGZ1bmN0b3IpOworICAgIH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBNYXJrZWRTcGFjZV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3ODM3
MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDExLTAyLTExICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBsaXR0
bGUgbW9yZSBlbmNhcHN1bGF0aW9uIGZvciB0aGUgaGVhcDogUmVtb3ZlZCBDb2xsZWN0b3JIZWFw
SXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU0Mjk4CisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAo
K1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0UHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50c10p
OgorICAgICAgICAoK1tXZWJDb3JlU3RhdGlzdGljcyBqYXZhU2NyaXB0T2JqZWN0VHlwZUNvdW50
c10pOiBVcGRhdGVkIGZvciBuZXcgdHlwZWRlZi4KKwogMjAxMS0wMi0xMCAgTmF0ZSBDaGFwaW4g
IDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgu
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0JKHJl
dmlzaW9uIDc4MzcxKQorKysgU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGlj
cy5tbQkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCArIChOU0NvdW50ZWRTZXQgKilq
YXZhU2NyaXB0UHJvdGVjdGVkT2JqCiAgICAgCiAgICAgTlNDb3VudGVkU2V0ICpyZXN1bHQgPSBb
TlNDb3VudGVkU2V0IHNldF07CiAKLSAgICBPd25QdHI8SGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hh
cio+ID4gY291bnRzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5wcm90
ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOworICAgIE93blB0cjxUeXBlQ291bnRTZXQ+IGNvdW50
cyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAucHJvdGVjdGVkT2JqZWN0
VHlwZUNvdW50cygpKTsKICAgICBIYXNoQ291bnRlZFNldDxjb25zdCBjaGFyKj46Oml0ZXJhdG9y
IGVuZCA9IGNvdW50cy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoQ291bnRlZFNldDxjb25zdCBjaGFy
Kj46Oml0ZXJhdG9yIGl0ID0gY291bnRzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC0+c2Vjb25kOyArK2kpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgKyAoTlNDb3VudGVkU2V0ICopamF2YVNjcmlwdE9iamVjdFR5cGVDbwogICAgIAog
ICAgIE5TQ291bnRlZFNldCAqcmVzdWx0ID0gW05TQ291bnRlZFNldCBzZXRdOwogCi0gICAgT3du
UHRyPEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiA+IGNvdW50cyhKU0RPTVdpbmRvdzo6Y29t
bW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICBPd25QdHI8
VHlwZUNvdW50U2V0PiBjb3VudHMoSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5o
ZWFwLm9iamVjdFR5cGVDb3VudHMoKSk7CiAgICAgSGFzaENvdW50ZWRTZXQ8Y29uc3QgY2hhcio+
OjppdGVyYXRvciBlbmQgPSBjb3VudHMtPmVuZCgpOwogICAgIGZvciAoSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+OjppdGVyYXRvciBpdCA9IGNvdW50cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXQtPnNlY29uZDsgKytpKQpJ
bmRleDogU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNpb24gNzgzNzEpCisrKyBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMi0xMSAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgbGl0dGxlIG1vcmUgZW5jYXBzdWxhdGlvbiBm
b3IgdGhlIGhlYXA6IFJlbW92ZWQgQ29sbGVjdG9ySGVhcEl0ZXJhdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDI5OAorCisgICAgICAgICogV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZVN0YXRpc3RpY3M6OmphdmFTY3Jp
cHRQcm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKToKKwogMjAxMS0wMi0wOSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNl
bWlraGF0c2t5LgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAko
cmV2aXNpb24gNzgzNzEpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw4ICsxMzksOCBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkNvcmVTdGF0aXN0CiAgICAgLyogW3JldHZhbF1bb3V0XSAqLyBJUHJvcGVydHlC
YWcyKiogdHlwZU5hbWVzQW5kQ291bnRzKQogewogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7Ci0gICAgT3duUHRyPEhhc2hDb3VudGVkU2V0PGNvbnN0IGNoYXIqPiA+IGpz
T2JqZWN0VHlwZU5hbWVzKEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5w
cm90ZWN0ZWRPYmplY3RUeXBlQ291bnRzKCkpOwotICAgIHR5cGVkZWYgSGFzaENvdW50ZWRTZXQ8
Y29uc3QgY2hhcio+Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKKyAgICBPd25QdHI8VHlwZUNv
dW50U2V0PiBqc09iamVjdFR5cGVOYW1lcyhKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRh
KCktPmhlYXAucHJvdGVjdGVkT2JqZWN0VHlwZUNvdW50cygpKTsKKyAgICB0eXBlZGVmIFR5cGVD
b3VudFNldDo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7CiAgICAgSXRlcmF0b3IgZW5kID0ganNP
YmplY3RUeXBlTmFtZXMtPmVuZCgpOwogICAgIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IHR5cGVDb3Vu
dE1hcDsKICAgICBmb3IgKEl0ZXJhdG9yIGN1cnJlbnQgPSBqc09iamVjdFR5cGVOYW1lcy0+YmVn
aW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkK
</data>
<flag name="review"
          id="73828"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>