<?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>41727</bug_id>
          
          <creation_ts>2010-07-06 18:09:01 -0700</creation_ts>
          <short_desc>More OwnPtr work, including making clear set the pointer to 0 before deletion</short_desc>
          <delta_ts>2010-07-07 10:05:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>247255</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-06 18:09:01 -0700</bug_when>
    <thetext>More OwnPtr work, including making clear set the pointer to 0 before deltion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247257</commentid>
    <comment_count>1</comment_count>
      <attachid>60669</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-06 18:16:51 -0700</bug_when>
    <thetext>Created attachment 60669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247428</commentid>
    <comment_count>2</comment_count>
      <attachid>60669</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-07 02:57:58 -0700</bug_when>
    <thetext>Comment on attachment 60669
Patch

Glad to see this work continue.  Please consider landing this patch in two pieces as described below.

JavaScriptCore/wtf/OwnArrayPtr.h:72
 +      template&lt;typename T&gt; inline void OwnArrayPtr&lt;T&gt;::clear()
This change to clear() seems independent of deploying adoptPtr.  Why are we doing them in the same patch?  It&apos;s a bit hard to foresee the consequences of this change.  It seems like we&apos;d be better off doing that in a separate patch.

WebCore/css/CSSSelector.h:311
 +              m_data.m_rareData = new RareData(adoptPtr(m_data.m_tagHistory));
This adoptPtr is unfortunately far from the new...  Why doesn&apos;t the &quot;new RareData&quot; have an adoptPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247591</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-07 09:03:46 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; JavaScriptCore/wtf/OwnArrayPtr.h:72
&gt;  +      template&lt;typename T&gt; inline void OwnArrayPtr&lt;T&gt;::clear()
&gt; This change to clear() seems independent of deploying adoptPtr.  Why are we doing them in the same patch?  It&apos;s a bit hard to foresee the consequences of this change.  It seems like we&apos;d be better off doing that in a separate patch.

Yes, OK. I’ll land these separately.

&gt; WebCore/css/CSSSelector.h:311
&gt;  +              m_data.m_rareData = new RareData(adoptPtr(m_data.m_tagHistory));
&gt; This adoptPtr is unfortunately far from the new...  Why doesn&apos;t the &quot;new RareData&quot; have an adoptPtr?

The answer to both questions is the same. The m_data object is a union and so has raw pointers in it rather than smart pointers. Thus, we need to leak the pointers on the way in, and adopt then pointers on the way out. There are probably multiple ways to refactor this so it&apos;s cleaner, but none immediately come to mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247608</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-07 09:54:08 -0700</bug_when>
    <thetext>Committed r62677: &lt;http://trac.webkit.org/changeset/62677&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247618</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-07 10:05:46 -0700</bug_when>
    <thetext>The clear change is in &lt;http://trac.webkit.org/changeset/62674&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60669</attachid>
            <date>2010-07-06 18:16:51 -0700</date>
            <delta_ts>2010-07-07 02:57:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41727-20100706181650.patch</filename>
            <type>text/plain</type>
            <size>49425</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyNjA5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTAtMDctMDYgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1vcmUgT3duUHRyIHdvcmssIGluY2x1ZGluZyBtYWtpbmcgY2xlYXIg
c2V0IHRoZSBwb2ludGVyIHRvIDAgYmVmb3JlIGRlbGV0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTcyNworCisgICAgICAgICogQVBJL0pTQ2Fs
bGJhY2tPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja09iamVjdERhdGE6OnNldFBy
aXZhdGVQcm9wZXJ0eSk6IFVzZSBhZG9wdFB0ci4KKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09i
amVjdEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjpKU0NhbGxiYWNrT2JqZWN0OjpKU0NhbGxi
YWNrT2JqZWN0KTogRGl0dG8uCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOiBEaXR0by4KKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KTogRGl0dG8uCisgICAgICAgICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2NvcGVOb2RlOjpTY29wZU5vZGUpOiBEaXR0by4KKyAgICAgICAgKiBwYXJzZXIv
UGFyc2VyQXJlbmEuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYTo6UGFyc2VyQXJlbmEp
OiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50cy5oOgorICAgICAgICAoSlNDOjpB
cmd1bWVudHM6OkFyZ3VtZW50cyk6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxlKTogRGl0dG8uCisg
ICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlKTogRGl0dG8uCisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGwpOiBEaXR0by4KKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0KTogRGl0dG8u
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwYXJzZUV4Y2VwdGlvbkluZm8p
OiBEaXR0by4KKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OnJlcGFyc2VFeGNlcHRpb25J
bmZvKTogRGl0dG8uCisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNBcnJheTo6c29ydCk6IERpdHRvLgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6UmVnRXhwQ29uc3Ry
dWN0b3IpOiBEaXR0by4KKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6UmVnRXhwT2JqZWN0KTogRGl0dG8uCisgICAgICAgICog
cnVudGltZS9TbWFsbFN0cmluZ3MuY3BwOgorICAgICAgICAoSlNDOjpTbWFsbFN0cmluZ3M6OmNy
ZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyk6IERpdHRvLgorICAgICAgICAoSlNDOjpTbWFsbFN0
cmluZ3M6OnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcCk6IERpdHRvLgorCisgICAgICAgICogd3Rm
L093bkFycmF5UHRyLmg6IENoYW5nZWQgY29kZSBzbyB3ZSBhbHdheXMgc2V0IHRoZSBwb2ludGVy
IHRvIGl0cyBuZXcKKyAgICAgICAgdmFsdWUgYmVmb3JlIGRlbGV0aW5nIHRoZSBvbGQgb25lLCBp
bmNsdWRpbmcgaW4gdGggc2V0IGZ1bmN0aW9uIGFuZCB0aGUKKyAgICAgICAgY2xlYXIgZnVuY3Rp
b24uIFRoaXMgcmVxdWlyZWQgY2hhbmdpbmcgc2FmZURlbGV0ZS4KKyAgICAgICAgKiB3dGYvT3du
UHRyLmg6IERpdHRvLiBBbHNvIHJlbW92ZWQgc29tZSBleHRyYSBudWxsIGNoZWNrcy4KKyAgICAg
ICAgKiB3dGYvUGFzc093blB0ci5oOiBEaXR0by4KKworICAgICAgICAqIHd0Zi9QYXNzUmVmUHRy
Lmg6IENoYW5nZWQgY29kZSBzbyB3ZSBhbHdheXMgc2V0IHRoZSBwb2ludGVyIHRvIGl0cyBuZXcK
KyAgICAgICAgdmFsdWUgYmVmb3JlIGRlZXJlZidpbmcgdGhlIG9sZCBvbmUgaW4gdGhlIGNsZWFy
IGZ1bmN0aW9uLiBBbHNvIGFkZGVkIGEKKyAgICAgICAgbGVha1JlZiBmdW5jdGlvbiBmb3IgTm9u
TnVsbFBhc3NSZWZQdHIuCisgICAgICAgICogd3RmL1JlZlB0ci5oOiBEaXR0by4KKworICAgICAg
ICAqIHd0Zi9nb2JqZWN0L0dPd25QdHIuaDogTW9yZSBmbyB0aGUgc2FtZS4KKyAgICAgICAgKiB3
dGYvZ29iamVjdC9HUmVmUHRyLmg6IERpdHRvLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvaWN1
L0NvbGxhdG9ySUNVLmNwcDoKKyAgICAgICAgKFdURjo6Q29sbGF0b3I6OnVzZXJEZWZhdWx0KTog
VXNlIGFkb3B0UHRyLgorICAgICAgICAqIHlhcnIvUmVnZXhJbnRlcnByZXRlci5jcHA6CisgICAg
ICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6Qnl0ZUNvbXBpbGVyKTogRGl0dG8uCisgICAg
ICAgIChKU0M6OllhcnI6OkJ5dGVDb21waWxlcjo6Y29tcGlsZSk6IERpdHRvLgorICAgICAgICAo
SlNDOjpZYXJyOjpCeXRlQ29tcGlsZXI6OnJlZ2V4QmVnaW4pOiBEaXR0by4KKyAgICAgICAgKEpT
Qzo6WWFycjo6Ynl0ZUNvbXBpbGVSZWdleCk6IERpdHRvLgorICAgICAgICAqIHlhcnIvUmVnZXhJ
bnRlcnByZXRlci5oOgorICAgICAgICAoSlNDOjpZYXJyOjpCeXRlY29kZVBhdHRlcm46OkJ5dGVj
b2RlUGF0dGVybik6IERpdHRvLgorCiAyMDEwLTA3LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiA2MjU5NykKKysrIEphdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
RXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJKU09iamVjdFJlZi5oIgogI2luY2x1ZGUgIkpTVmFsdWVSZWYu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC01Niw3ICs1Nyw3IEBAIHN0cnVjdCBKU0NhbGxiYWNrT2Jq
ZWN0RGF0YSB7CiAgICAgdm9pZCBzZXRQcml2YXRlUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCFtX3ByaXZh
dGVQcm9wZXJ0aWVzKQotICAgICAgICAgICAgbV9wcml2YXRlUHJvcGVydGllcy5zZXQobmV3IEpT
UHJpdmF0ZVByb3BlcnR5TWFwKTsKKyAgICAgICAgICAgIG1fcHJpdmF0ZVByb3BlcnRpZXMgPSBh
ZG9wdFB0cihuZXcgSlNQcml2YXRlUHJvcGVydHlNYXApOwogICAgICAgICBtX3ByaXZhdGVQcm9w
ZXJ0aWVzLT5zZXRQcml2YXRlUHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgfQog
ICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0
aW9ucy5oCShyZXZpc2lvbiA2MjU5NykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
T2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgaW5saW5l
IEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT4qIEpTQ2FsbGJhYwogdGVtcGxhdGUgPGNsYXNzIEJhc2U+
CiBKU0NhbGxiYWNrT2JqZWN0PEJhc2U+OjpKU0NhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm9uTnVsbFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBzdHJ1Y3R1cmUsIEpTQ2xhc3NSZWYganNDbGFzcywgdm9pZCogZGF0YSkKICAgICA6IEJh
c2UoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCi0gICAgLCBtX2NhbGxiYWNrT2JqZWN0RGF0YShu
ZXcgSlNDYWxsYmFja09iamVjdERhdGEoZGF0YSwganNDbGFzcykpCisgICAgLCBtX2NhbGxiYWNr
T2JqZWN0RGF0YShhZG9wdFB0cihuZXcgSlNDYWxsYmFja09iamVjdERhdGEoZGF0YSwganNDbGFz
cykpKQogewogICAgIGluaXQoZXhlYyk7CiB9CkBAIC02Miw3ICs2Miw3IEBAIEpTQ2FsbGJhY2tP
YmplY3Q8QmFzZT46OkpTQ2FsbGJhY2tPYmplY3QKIHRlbXBsYXRlIDxjbGFzcyBCYXNlPgogSlND
YWxsYmFja09iamVjdDxCYXNlPjo6SlNDYWxsYmFja09iamVjdChKU0NsYXNzUmVmIGpzQ2xhc3Ms
IE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogQmFzZShzdHJ1
Y3R1cmUpCi0gICAgLCBtX2NhbGxiYWNrT2JqZWN0RGF0YShuZXcgSlNDYWxsYmFja09iamVjdERh
dGEoMCwganNDbGFzcykpCisgICAgLCBtX2NhbGxiYWNrT2JqZWN0RGF0YShhZG9wdFB0cihuZXcg
SlNDYWxsYmFja09iamVjdERhdGEoMCwganNDbGFzcykpKQogewogICAgIEFTU0VSVChCYXNlOjpp
c0dsb2JhbE9iamVjdCgpKTsKICAgICBpbml0KHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
dGhpcyktPmdsb2JhbEV4ZWMoKSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDYyNTk3KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2Miw3ICsxMzYyLDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlk
ZXIpCiAgICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5bWJvbFRh
YmxlKHN5bVRhYikKLSAgICAsIG1fZXhjZXB0aW9uSW5mbyhuZXcgRXhjZXB0aW9uSW5mbykKKyAg
ICAsIG1fZXhjZXB0aW9uSW5mbyhhZG9wdFB0cihuZXcgRXhjZXB0aW9uSW5mbykpCiB7CiAgICAg
QVNTRVJUKG1fc291cmNlKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDYyNTk3KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyOCw3ICs1MjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX3JhcmVEYXRhKQotICAgICAgICAgICAgICAgIG1fcmFyZURhdGEuc2V0KG5ldyBS
YXJlRGF0YSk7CisgICAgICAgICAgICAgICAgbV9yYXJlRGF0YSA9IGFkb3B0UHRyKG5ldyBSYXJl
RGF0YSk7CiAgICAgICAgIH0KIAogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBtX293bmVyRXhl
Y3V0YWJsZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gNjI1OTcpCisr
KyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3
ICs5OCw3IEBAIFNjb3BlTm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmEKIFNjb3Bl
Tm9kZTo6U2NvcGVOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywg
RnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1D
b25zdGFudHMpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGdsb2JhbERhdGEpCiAgICAgLCBQYXJzZXJB
cmVuYVJlZkNvdW50ZWQoZ2xvYmFsRGF0YSkKLSAgICAsIG1fZGF0YShuZXcgU2NvcGVOb2RlRGF0
YShnbG9iYWxEYXRhLT5wYXJzZXItPmFyZW5hKCksIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0
YWNrLCBudW1Db25zdGFudHMpKQorICAgICwgbV9kYXRhKGFkb3B0UHRyKG5ldyBTY29wZU5vZGVE
YXRhKGdsb2JhbERhdGEtPnBhcnNlci0+YXJlbmEoKSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5j
U3RhY2ssIG51bUNvbnN0YW50cykpKQogICAgICwgbV9mZWF0dXJlcyhmZWF0dXJlcykKICAgICAs
IG1fc291cmNlKHNvdXJjZSkKIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJB
cmVuYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5h
LmNwcAkocmV2aXNpb24gNjI1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJl
bmEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMyArMjcsMTQgQEAKICNpbmNsdWRlICJQYXJzZXJB
cmVuYS5oIgogCiAjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIAogUGFyc2VyQXJlbmE6OlBhcnNlckFyZW5hKCkKICAgICA6
IG1fZnJlZWFibGVNZW1vcnkoMCkKICAgICAsIG1fZnJlZWFibGVQb29sRW5kKDApCi0gICAgLCBt
X2lkZW50aWZpZXJBcmVuYShuZXcgSWRlbnRpZmllckFyZW5hKQorICAgICwgbV9pZGVudGlmaWVy
QXJlbmEoYWRvcHRQdHIobmV3IElkZW50aWZpZXJBcmVuYSkpCiB7CiB9CiAKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Bcmd1bWVudHMuaAkocmV2aXNpb24gNjI1OTcpCisrKyBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FyZ3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBpbmxpbmUgQXJndW1lbnRzOjpBcmd1bWVudHMoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiAgICAgICAgIDogSlNPYmplY3QoY2FsbEZyYW1lLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmFyZ3VtZW50c1N0cnVjdHVyZSgpKQotICAgICAgICAsIGQobmV3IEFyZ3Vt
ZW50c0RhdGEpCisgICAgICAgICwgZChhZG9wdFB0cihuZXcgQXJndW1lbnRzRGF0YSkpCiAgICAg
ewogICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWU7CiAgICAgICAgIHB0cmRpZmZfdCBmaXJzdFBh
cmFtZXRlckluZGV4OwpAQCAtMTc2LDcgKzE3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
aW5saW5lIEFyZ3VtZW50czo6QXJndW1lbnRzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBOb1BhcmFt
ZXRlcnNUeXBlKQogICAgICAgICA6IEpTT2JqZWN0KGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUoKSkKLSAgICAgICAgLCBkKG5ldyBBcmd1bWVudHNE
YXRhKQorICAgICAgICAsIGQoYWRvcHRQdHIobmV3IEFyZ3VtZW50c0RhdGEpKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKCFhc0Z1bmN0aW9uKGNhbGxGcmFtZS0+Y2FsbGVlKCkpLT5qc0V4ZWN1dGFi
bGUoKS0+cGFyYW1ldGVyQ291bnQoKSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAkocmV2aXNpb24gNjI1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIEpTT2JqZWN0KiBF
dmFsRXhlY3V0YWJsZTo6Y29tcGlsZShFeGVjU3QKIAogICAgIEFTU0VSVCghbV9ldmFsQ29kZUJs
b2NrKTsKICAgICBtX2V2YWxDb2RlQmxvY2sgPSBuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9i
YWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNjb3BlQ2hhaW4ubG9jYWxEZXB0aCgpKTsK
LSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihuZXcgQnl0ZWNvZGVHZW5l
cmF0b3IoZXZhbE5vZGUuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFp
biwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2spKTsKKyAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2Nv
cGVDaGFpbiwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2YWxDb2RlQmxvY2sp
KSk7CiAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOwogICAgIAogICAgIGV2YWxOb2RlLT5kZXN0
cm95RGF0YSgpOwpAQCAtMTEyLDcgKzExMiw3IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJs
ZTo6Y29tcGlsZShFeGUKICAgICAKICAgICBBU1NFUlQoIW1fcHJvZ3JhbUNvZGVCbG9jayk7CiAg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gbmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFs
Q29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpKTsKLSAgICBPd25QdHI8Qnl0
ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5v
ZGUuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwgJmdsb2JhbE9i
amVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrKSk7CisgICAgT3duUHRyPEJ5
dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9y
KHByb2dyYW1Ob2RlLmdldCgpLCBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4s
ICZnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jaykpKTsKICAg
ICBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAKICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEo
KTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBib29sIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZv
ckNhbGwoCiAKICAgICBBU1NFUlQoIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgbV9jb2RlQmxv
Y2tGb3JDYWxsID0gbmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgc291
cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQoKSwgZmFsc2UpOwotICAgIE93
blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKG5ldyBCeXRlY29kZUdlbmVyYXRvcihi
b2R5LmdldCgpLCBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG1fY29kZUJs
b2NrRm9yQ2FsbC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDYWxsKSk7CisgICAgT3du
UHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2Vu
ZXJhdG9yKGJvZHkuZ2V0KCksIGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgc2NvcGVDaGFpbiwg
bV9jb2RlQmxvY2tGb3JDYWxsLT5zeW1ib2xUYWJsZSgpLCBtX2NvZGVCbG9ja0ZvckNhbGwpKSk7
CiAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOwogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwg
PSBtX2NvZGVCbG9ja0ZvckNhbGwtPm1fbnVtUGFyYW1ldGVyczsKICAgICBBU1NFUlQobV9udW1Q
YXJhbWV0ZXJzRm9yQ2FsbCk7CkBAIC0xNjIsNyArMTYyLDcgQEAgYm9vbCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3JDb25zdAogCiAgICAgQVNTRVJUKCFtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdCk7CiAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBuZXcgRnVuY3Rpb25Db2RlQmxv
Y2sodGhpcywgRnVuY3Rpb25Db2RlLCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFy
dE9mZnNldCgpLCB0cnVlKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRv
cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dl
cigpLCBzY29wZUNoYWluLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c3ltYm9sVGFibGUoKSwg
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpKTsKKyAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+
IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoYm9keS5nZXQoKSwgZ2xv
YmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpKSk7CiAgICAgZ2VuZXJh
dG9yLT5nZW5lcmF0ZSgpOwogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5tX251bVBhcmFtZXRlcnM7CiAgICAgQVNTRVJUKG1fbnVtUGFy
YW1ldGVyc0ZvckNvbnN0cnVjdCk7CkBAIC0yNDEsMTAgKzI0MSwxMCBAQCBQYXNzT3duUHRyPEV4
Y2VwdGlvbkluZm8+IEZ1bmN0aW9uRXhlY3V0CiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNj
b3BlQ2hhaW5Ob2RlKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVD
aGFpbi5nbG9iYWxPYmplY3QoKTsKIAotICAgIE93blB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9j
ayhuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBzb3VyY2UoKS5wcm92
aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3Rv
cikpOworICAgIE93blB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jayhhZG9wdFB0cihuZXcgRnVu
Y3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25Db2RlLCBzb3VyY2UoKS5wcm92aWRlcigpLCBz
b3VyY2UoKS5zdGFydE9mZnNldCgpLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvcikpKTsKICAg
ICBnbG9iYWxEYXRhLT5mdW5jdGlvbkNvZGVCbG9ja0JlaW5nUmVwYXJzZWQgPSBuZXdDb2RlQmxv
Y2suZ2V0KCk7CiAKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihuZXcg
Qnl0ZWNvZGVHZW5lcmF0b3IobmV3RnVuY3Rpb25Cb2R5LmdldCgpLCBnbG9iYWxPYmplY3QtPmRl
YnVnZ2VyKCksIHNjb3BlQ2hhaW4sIG5ld0NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbmV3Q29k
ZUJsb2NrLmdldCgpKSk7CisgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3Io
YWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKG5ld0Z1bmN0aW9uQm9keS5nZXQoKSwgZ2xv
YmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCBuZXdDb2RlQmxvY2stPnN5bWJvbFRh
YmxlKCksIG5ld0NvZGVCbG9jay5nZXQoKSkpKTsKICAgICBnZW5lcmF0b3ItPnNldFJlZ2VuZXJh
dGluZ0ZvckV4Y2VwdGlvbkluZm8oc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjb2Rl
QmxvY2spKTsKICAgICBnZW5lcmF0b3ItPmdlbmVyYXRlKCk7CiAKQEAgLTI2OSw5ICsyNjksOSBA
QCBQYXNzT3duUHRyPEV4Y2VwdGlvbkluZm8+IEV2YWxFeGVjdXRhYmxlCiAgICAgU2NvcGVDaGFp
biBzY29wZUNoYWluKHNjb3BlQ2hhaW5Ob2RlKTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gc2NvcGVDaGFpbi5nbG9iYWxPYmplY3QoKTsKIAotICAgIE93blB0cjxFdmFsQ29k
ZUJsb2NrPiBuZXdDb2RlQmxvY2sobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0
LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluLmxvY2FsRGVwdGgoKSkpOworICAgIE93
blB0cjxFdmFsQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2soYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxv
Y2sodGhpcywgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluLmxv
Y2FsRGVwdGgoKSkpKTsKIAotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9y
KG5ldyBCeXRlY29kZUdlbmVyYXRvcihuZXdFdmFsQm9keS5nZXQoKSwgZ2xvYmFsT2JqZWN0LT5k
ZWJ1Z2dlcigpLCBzY29wZUNoYWluLCBuZXdDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG5ld0Nv
ZGVCbG9jay5nZXQoKSkpOworICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9y
KGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihuZXdFdmFsQm9keS5nZXQoKSwgZ2xvYmFs
T2JqZWN0LT5kZWJ1Z2dlcigpLCBzY29wZUNoYWluLCBuZXdDb2RlQmxvY2stPnN5bWJvbFRhYmxl
KCksIG5ld0NvZGVCbG9jay5nZXQoKSkpKTsKICAgICBnZW5lcmF0b3ItPnNldFJlZ2VuZXJhdGlu
Z0ZvckV4Y2VwdGlvbkluZm8oc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9jayo+KGNvZGVCbG9jaykp
OwogICAgIGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCShyZXZpc2lvbiA2MjU5NykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0Nyw3ICs4NDcsNyBAQCB2b2lkIEpTQXJyYXk6
OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rl
cy5yZXNpemUodXNlZFZlY3Rvckxlbmd0aCArIChtX3N0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAg
PyBtX3N0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAtPnNpemUoKSA6IDApKTsKIAogICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZUpTKQotICAgICAgICB0cmVlLmFic3RyYWN0b3IoKS5tX2NhY2hl
ZENhbGwuc2V0KG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGFzRnVuY3Rpb24oY29tcGFyZUZ1bmN0aW9u
KSwgMiwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSk7CisgICAgICAgIHRyZWUuYWJzdHJhY3Rvcigp
Lm1fY2FjaGVkQ2FsbCA9IGFkb3B0UHRyKG5ldyBDYWNoZWRDYWxsKGV4ZWMsIGFzRnVuY3Rpb24o
Y29tcGFyZUZ1bmN0aW9uKSwgMiwgZXhlYy0+ZXhjZXB0aW9uU2xvdCgpKSk7CiAKICAgICBpZiAo
IXRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXMuYmVnaW4oKSkgewogICAgICAgICB0aHJvd091dE9m
TWVtb3J5RXJyb3IoZXhlYyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNjI1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBA
QCBjb25zdCBDbGFzc0luZm8gUmVnRXhwQ29uc3RydWN0b3I6OmluZm8gCiAKIFJlZ0V4cENvbnN0
cnVjdG9yOjpSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBS
ZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlwZSkKICAgICA6IEludGVybmFsRnVuY3Rpb24o
JmV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIo
ZXhlYywgIlJlZ0V4cCIpKQotICAgICwgZChuZXcgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKQor
ICAgICwgZChhZG9wdFB0cihuZXcgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlKSkKIHsKICAgICAv
LyBFQ01BIDE1LjEwLjUuMSBSZWdFeHAucHJvdG90eXBlCiAgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgcmVnRXhwUHJvdG90eXBl
LCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiA2MjU5NykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQCBjb25zdCBDbGFzc0luZm8gUmVnRXhwT2JqZWN0OjppbmZvID0geyAiCiAKIFJlZ0V4cE9i
amVjdDo6UmVnRXhwT2JqZWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIE5vbk51bGxQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBOb25OdWxsUGFzc1JlZlB0cjxSZWdFeHA+
IHJlZ0V4cCkKICAgICA6IEpTT2JqZWN0V2l0aEdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSkKLSAgICAsIGQobmV3IFJlZ0V4cE9iamVjdERhdGEocmVnRXhwLCAwKSkKKyAgICAs
IGQoYWRvcHRQdHIobmV3IFJlZ0V4cE9iamVjdERhdGEocmVnRXhwLCAwKSkpCiB7CiB9CiAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5jcHAJKHJldmlzaW9uIDYyNTk3
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCwxMCArMjgsMTEgQEAKIAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKLQogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeworCiBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbnVtQ2hhcmFjdGVyc1RvU3RvcmUgPSAweDEwMDsKIAogc3RhdGljIGlubGluZSBi
b29sIGlzTWFya2VkKEpTU3RyaW5nKiBzdHJpbmcpCkBAIC0xMjYsNyArMTI3LDcgQEAgdm9pZCBT
bWFsbFN0cmluZ3M6OmNyZWF0ZUVtcHR5U3RyaW5nKEpTRwogdm9pZCBTbWFsbFN0cmluZ3M6OmNy
ZWF0ZVNpbmdsZUNoYXJhY3RlclN0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGNoYXIgY2hhcmFjdGVyKQogewogICAgIGlmICghbV9zdG9yYWdlKQotICAgICAgICBtX3N0
b3JhZ2Uuc2V0KG5ldyBTbWFsbFN0cmluZ3NTdG9yYWdlKTsKKyAgICAgICAgbV9zdG9yYWdlID0g
YWRvcHRQdHIobmV3IFNtYWxsU3RyaW5nc1N0b3JhZ2UpOwogICAgIEFTU0VSVCghbV9zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzW2NoYXJhY3Rlcl0pOwogICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5n
c1tjaGFyYWN0ZXJdID0gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBtX3N0
b3JhZ2UtPnJlcChjaGFyYWN0ZXIpLCBKU1N0cmluZzo6SGFzT3RoZXJPd25lcik7CiB9CkBAIC0x
MzQsNyArMTM1LDcgQEAgdm9pZCBTbWFsbFN0cmluZ3M6OmNyZWF0ZVNpbmdsZUNoYXJhY3Rlcgog
VVN0cmluZzo6UmVwKiBTbWFsbFN0cmluZ3M6OnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcCh1bnNp
Z25lZCBjaGFyIGNoYXJhY3RlcikKIHsKICAgICBpZiAoIW1fc3RvcmFnZSkKLSAgICAgICAgbV9z
dG9yYWdlLnNldChuZXcgU21hbGxTdHJpbmdzU3RvcmFnZSk7CisgICAgICAgIG1fc3RvcmFnZSA9
IGFkb3B0UHRyKG5ldyBTbWFsbFN0cmluZ3NTdG9yYWdlKTsKICAgICByZXR1cm4gbV9zdG9yYWdl
LT5yZXAoY2hhcmFjdGVyKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5
UHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRyLmgJKHJl
dmlzaW9uIDYyNTk3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL093bkFycmF5UHRyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDIwICszMCwyMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gY2xhc3MgT3duQXJyYXlQdHIgOiBwdWJsaWMgTm9uY29weWFibGUgewog
ICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgT3duQXJyYXlQdHIoVCogcHRyID0gMCkgOiBt
X3B0cihwdHIpIHsgfQotICAgICAgICB+T3duQXJyYXlQdHIoKSB7IHNhZmVEZWxldGUoKTsgfQor
ICAgICAgICB+T3duQXJyYXlQdHIoKSB7IHNhZmVEZWxldGUobV9wdHIpOyB9CiAKICAgICAgICAg
VCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KICAgICAgICAgVCogcmVsZWFzZSgpIHsg
VCogcHRyID0gbV9wdHI7IG1fcHRyID0gMDsgcmV0dXJuIHB0cjsgfQogCi0gICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSByZW5hbWVkIHRvIGFkb3B0LiAKKyAgICAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggUGFzc093bkFycmF5UHRy
LiAKICAgICAgICAgdm9pZCBzZXQoVCogcHRyKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NF
UlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIpOwotICAgICAgICAgICAgc2FmZURlbGV0ZSgpOworICAg
ICAgICAgICAgVCogb2xkUHRyID0gbV9wdHI7CiAgICAgICAgICAgICBtX3B0ciA9IHB0cjsKKyAg
ICAgICAgICAgIHNhZmVEZWxldGUob2xkUHRyKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQg
Y2xlYXIoKSB7IHNhZmVEZWxldGUoKTsgbV9wdHIgPSAwOyB9CisgICAgICAgIHZvaWQgY2xlYXIo
KTsKIAogICAgICAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VSVChtX3B0cik7IHJldHVy
biAqbV9wdHI7IH0KICAgICAgICAgVCogb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fcHRy
KTsgcmV0dXJuIG1fcHRyOyB9CkBAIC02MywxMSArNjQsMjUgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIHZvaWQgc3dhcChPd25BcnJheVB0ciYgbykgeyBzdGQ6OnN3YXAobV9wdHIsIG8ubV9w
dHIpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHNhZmVEZWxldGUoKSB7IHR5cGVk
ZWYgY2hhciBrbm93bltzaXplb2YoVCkgPyAxIDogLTFdOyBpZiAoc2l6ZW9mKGtub3duKSkgZGVs
ZXRlIFtdIG1fcHRyOyB9CisgICAgICAgIHN0YXRpYyB2b2lkIHNhZmVEZWxldGUoVCopOwogCiAg
ICAgICAgIFQqIG1fcHRyOwogICAgIH07CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHZvaWQgT3duQXJyYXlQdHI8VD46OmNsZWFyKCkKKyAgICB7CisgICAgICAgIFQqIHB0
ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IDA7CisgICAgICAgIHNhZmVEZWxldGUocHRyKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBPd25BcnJheVB0
cjxUPjo6c2FmZURlbGV0ZShUKiBwdHIpCisgICAgeworICAgICAgICB0eXBlZGVmIGNoYXIga25v
d25bc2l6ZW9mKFQpID8gMSA6IC0xXTsKKyAgICAgICAgaWYgKHNpemVvZihrbm93bikpCisgICAg
ICAgICAgICBkZWxldGUgW10gcHRyOworICAgIH0KKwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgdm9pZCBzd2FwKE93bkFycmF5UHRyPFQ+JiBhLCBPd25BcnJheVB0cjxUPiYgYikg
eyBhLnN3YXAoYik7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0
UHRyKGNvbnN0IE93bkFycmF5UHRyPFQ+JiBwKQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL093
blB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9Pd25QdHIuaAkocmV2aXNp
b24gNjI1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvT3duUHRyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgUHRyVHlwZSBnZXQo
KSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCi0gICAgICAgIHZvaWQgY2xlYXIoKSB7IGRlbGV0
ZU93bmVkUHRyKG1fcHRyKTsgbV9wdHIgPSAwOyB9CisgICAgICAgIHZvaWQgY2xlYXIoKTsKICAg
ICAgICAgUGFzc093blB0cjxUPiByZWxlYXNlKCk7CiAgICAgICAgIFB0clR5cGUgbGVha1B0cigp
OwogCkBAIC05MCw2ICs5MCwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB7CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgT3duUHRyPFQ+OjpjbGVhcigpCisg
ICAgeworICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOworICAgICAgICBtX3B0ciA9IDA7Cisg
ICAgICAgIGRlbGV0ZU93bmVkUHRyKHB0cik7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFBhc3NPd25QdHI8VD4gT3duUHRyPFQ+OjpyZWxlYXNlKCkKICAgICB7CiAg
ICAgICAgIFB0clR5cGUgcHRyID0gbV9wdHI7CkBAIC0xMDgsMjggKzExNSwyNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBPd25QdHI8VD46
OnNldChQdHJUeXBlIHB0cikKICAgICB7CiAgICAgICAgIEFTU0VSVCghcHRyIHx8IG1fcHRyICE9
IHB0cik7Ci0gICAgICAgIGRlbGV0ZU93bmVkUHRyKG1fcHRyKTsKKyAgICAgICAgUHRyVHlwZSBv
bGRQdHIgPSBtX3B0cjsKICAgICAgICAgbV9wdHIgPSBwdHI7CisgICAgICAgIGRlbGV0ZU93bmVk
UHRyKG9sZFB0cik7CiAgICAgfQogI2VuZGlmCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgT3duUHRyPFQ+JiBPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFQ+
JiBvKQogICAgIHsKLSAgICAgICAgVCogcHRyID0gbV9wdHI7CisgICAgICAgIFB0clR5cGUgcHRy
ID0gbV9wdHI7CiAgICAgICAgIG1fcHRyID0gby5sZWFrUHRyKCk7CiAgICAgICAgIEFTU0VSVCgh
cHRyIHx8IG1fcHRyICE9IHB0cik7Ci0gICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICBkZWxl
dGVPd25lZFB0cihwdHIpOworICAgICAgICBkZWxldGVPd25lZFB0cihwdHIpOwogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8
dHlwZW5hbWUgVT4gaW5saW5lIE93blB0cjxUPiYgT3duUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3Qg
UGFzc093blB0cjxVPiYgbykKICAgICB7Ci0gICAgICAgIFQqIHB0ciA9IG1fcHRyOworICAgICAg
ICBQdHJUeXBlIHB0ciA9IG1fcHRyOwogICAgICAgICBtX3B0ciA9IG8ubGVha1B0cigpOwogICAg
ICAgICBBU1NFUlQoIXB0ciB8fCBtX3B0ciAhPSBwdHIpOwotICAgICAgICBpZiAocHRyKQotICAg
ICAgICAgICAgZGVsZXRlT3duZWRQdHIocHRyKTsKKyAgICAgICAgZGVsZXRlT3duZWRQdHIocHRy
KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUv
d3RmL1Bhc3NPd25QdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGFzc093
blB0ci5oCShyZXZpc2lvbiA2MjU5NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duUHRy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAg
ICAgICAgUHRyVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCi0gICAgICAgIHZv
aWQgY2xlYXIoKSB7IG1fcHRyID0gMDsgfQorICAgICAgICB2b2lkIGNsZWFyKCk7CiAgICAgICAg
IFB0clR5cGUgbGVha1B0cigpIGNvbnN0OwogCiAgICAgICAgIFZhbHVlVHlwZSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyBBU1NFUlQobV9wdHIpOyByZXR1cm4gKm1fcHRyOyB9CkBAIC04OCw2ICs4OCwx
MyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgbXV0YWJsZSBQdHJUeXBlIG1fcHRyOwogICAg
IH07CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBQYXNzT3duUHRyPFQ+
OjpjbGVhcigpCisgICAgeworICAgICAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOworICAgICAgICBt
X3B0ciA9IDA7CisgICAgICAgIGRlbGV0ZU93bmVkUHRyKHB0cik7CisgICAgfQorCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIFBhc3NPd25QdHI8VD46OlB0clR5cGUg
UGFzc093blB0cjxUPjo6bGVha1B0cigpIGNvbnN0CiAgICAgewogICAgICAgICBQdHJUeXBlIHB0
ciA9IG1fcHRyOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oCShyZXZpc2lvbiA2MjU5NykK
KysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2
LDcgKzc2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIAogICAgICAgICBUKiBnZXQoKSBj
b25zdCB7IHJldHVybiBtX3B0cjsgfQogCi0gICAgICAgIHZvaWQgY2xlYXIoKSB7IFQqIHB0ciA9
IG1fcHRyOyBkZXJlZklmTm90TnVsbChwdHIpOyBtX3B0ciA9IDA7IH0KKyAgICAgICAgdm9pZCBj
bGVhcigpOwogICAgICAgICBUKiBsZWFrUmVmKCkgY29uc3Q7CiAKICAgICAgICAgVCYgb3BlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CkBAIC0xNTEsMTIgKzE1MSwxNSBAQCBuYW1l
c3BhY2UgV1RGIHsKIAogICAgICAgICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQog
Ci0gICAgICAgIHZvaWQgY2xlYXIoKSB7IGRlcmVmSWZOb3ROdWxsKG1fcHRyKTsgbV9wdHIgPSAw
OyB9Ci0gICAgICAgIFQqIHJlbGVhc2VSZWYoKSBjb25zdCB7IFQqIHRtcCA9IG1fcHRyOyBtX3B0
ciA9IDA7IHJldHVybiB0bXA7IH0KKyAgICAgICAgdm9pZCBjbGVhcigpOworICAgICAgICBUKiBs
ZWFrUmVmKCkgY29uc3QgeyBUKiB0bXAgPSBtX3B0cjsgbV9wdHIgPSAwOyByZXR1cm4gdG1wOyB9
CiAKICAgICAgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CiAgICAg
ICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCisgICAgICAgIC8v
IEZJWE1FOiBSZW1vdmUgcmVsZWFzZVJlZiBvbmNlIHdlIGNoYW5nZSBhbGwgY2FsbGVycyB0byBj
YWxsIGxlYWtSZWYgaW5zdGVhZC4KKyAgICAgICAgVCogcmVsZWFzZVJlZigpIGNvbnN0IHsgcmV0
dXJuIGxlYWtSZWYoKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgbXV0YWJsZSBUKiBtX3B0
cjsKICAgICB9OwpAQCAtMTY4LDYgKzE3MSwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
cmVmSWZOb3ROdWxsKHB0cik7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHZvaWQgUGFzc1JlZlB0cjxUPjo6Y2xlYXIoKQorICAgIHsKKyAgICAgICAgVCogcHRyID0g
bV9wdHI7CisgICAgICAgIG1fcHRyID0gMDsKKyAgICAgICAgZGVyZWZJZk5vdE51bGwocHRyKTsK
KyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogUGFzc1JlZlB0cjxU
Pjo6bGVha1JlZigpIGNvbnN0CiAgICAgewogICAgICAgICBUKiBwdHIgPSBtX3B0cjsKQEAgLTI4
MSw2ICsyOTEsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJldHVybiBwLmdldCgpOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIE5vbk51bGxQYXNz
UmVmUHRyPFQ+OjpjbGVhcigpCisgICAgeworICAgICAgICBUKiBwdHIgPSBtX3B0cjsKKyAgICAg
ICAgbV9wdHIgPSAwOworICAgICAgICBkZXJlZklmTm90TnVsbChwdHIpOworICAgIH0KKwogfSAv
LyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6UGFzc1JlZlB0cjsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3d0Zi9SZWZQdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUmVm
UHRyLmgJKHJldmlzaW9uIDYyNTk3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTksNyArNTks
NyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgCiAgICAgICAgIFQqIGdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHRyOyB9CiAgICAgICAgIAotICAgICAgICB2b2lkIGNsZWFyKCkgeyBkZXJlZklm
Tm90TnVsbChtX3B0cik7IG1fcHRyID0gMDsgfQorICAgICAgICB2b2lkIGNsZWFyKCk7CiAgICAg
ICAgIFBhc3NSZWZQdHI8VD4gcmVsZWFzZSgpIHsgUGFzc1JlZlB0cjxUPiB0bXAgPSBhZG9wdFJl
ZihtX3B0cik7IG1fcHRyID0gMDsgcmV0dXJuIHRtcDsgfQogCiAgICAgICAgIFQmIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuICptX3B0cjsgfQpAQCAtOTcsNiArOTcsMTMgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgewogICAgIH0KIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUg
dm9pZCBSZWZQdHI8VD46OmNsZWFyKCkKKyAgICB7CisgICAgICAgIFQqIHB0ciA9IG1fcHRyOwor
ICAgICAgICBtX3B0ciA9IDA7CisgICAgICAgIGRlcmVmSWZOb3ROdWxsKHB0cik7CisgICAgfQor
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBSZWZQdHI8VD4mIFJlZlB0cjxUPjo6
b3BlcmF0b3I9KGNvbnN0IFJlZlB0cjxUPiYgbykKICAgICB7CiAgICAgICAgIFQqIG9wdHIgPSBv
LmdldCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3QvR093blB0ci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0L0dPd25QdHIuaAkocmV2aXNpb24g
NjI1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvZ29iamVjdC9HT3duUHRyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDggKzc4LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpCiAgICAg
ewotICAgICAgICBmcmVlT3duZWRHUHRyKG1fcHRyKTsKKyAgICAgICAgVCogcHRyID0gbV9wdHI7
CiAgICAgICAgIG1fcHRyID0gMDsKKyAgICAgICAgZnJlZU93bmVkR1B0cihwdHIpOwogICAgIH0K
IAogICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvZ29i
amVjdC9HUmVmUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL2dvYmplY3Qv
R1JlZlB0ci5oCShyZXZpc2lvbiA2MjU5NykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9nb2JqZWN0
L0dSZWZQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTAgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBjbGVhcigpCiAgICAgewotICAgICAgICBpZiAoVCogcHRyID0gbV9wdHIpCi0gICAg
ICAgICAgICBkZXJlZkdQdHIocHRyKTsKKyAgICAgICAgVCogcHRyID0gbV9wdHI7CiAgICAgICAg
IG1fcHRyID0gMDsKKyAgICAgICAgaWYgKHB0cikKKyAgICAgICAgICAgIGRlcmVmR1B0cihwdHIp
OwogICAgIH0KIAogICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAJKHJldmlz
aW9uIDYyNTk3KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNV
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTMgKzY5LDEyIEBAIFBhc3NPd25QdHI8Q29sbGF0
b3I+IENvbGxhdG9yOjp1c2VyRGVmYXUKICAgICBDRlN0cmluZ1JlZiBjb2xsYXRpb25PcmRlciA9
IGNvbGxhdGlvbk9yZGVyUmV0YWluZXIuZ2V0KCk7CiAjZW5kaWYKICAgICBjaGFyIGJ1ZlsyNTZd
OwotICAgIGlmIChjb2xsYXRpb25PcmRlcikgewotICAgICAgICBDRlN0cmluZ0dldENTdHJpbmco
Y29sbGF0aW9uT3JkZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUkp
OwotICAgICAgICByZXR1cm4gbmV3IENvbGxhdG9yKGJ1Zik7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldHVybiBuZXcgQ29sbGF0b3IoIiIpOworICAgIGlmICghY29sbGF0aW9uT3JkZXIpCisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ29sbGF0b3IoIiIpKTsKKyAgICBDRlN0cmluZ0dldENT
dHJpbmcoY29sbGF0aW9uT3JkZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGtDRlN0cmluZ0VuY29kaW5n
QVNDSUkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ29sbGF0b3IoYnVmKSk7CiAjZWxzZQot
ICAgIHJldHVybiBuZXcgQ29sbGF0b3IoMCk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb2xs
YXRvcigwKSk7CiAjZW5kaWYKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUveWFyci9SZWdleElu
dGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50
ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA2MjU5NykKKysrIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVn
ZXhJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzUsMTcgKzEyMzUsMTYgQEAg
cHVibGljOgogICAgIEJ5dGVDb21waWxlcihSZWdleFBhdHRlcm4mIHBhdHRlcm4pCiAgICAgICAg
IDogbV9wYXR0ZXJuKHBhdHRlcm4pCiAgICAgewotICAgICAgICBtX2JvZHlEaXNqdW5jdGlvbiA9
IDA7CiAgICAgICAgIG1fY3VycmVudEFsdGVybmF0aXZlSW5kZXggPSAwOwogICAgIH0KIAotICAg
IEJ5dGVjb2RlUGF0dGVybiogY29tcGlsZSgpCisgICAgUGFzc093blB0cjxCeXRlY29kZVBhdHRl
cm4+IGNvbXBpbGUoKQogICAgIHsKICAgICAgICAgcmVnZXhCZWdpbihtX3BhdHRlcm4ubV9udW1T
dWJwYXR0ZXJucywgbV9wYXR0ZXJuLm1fYm9keS0+bV9jYWxsRnJhbWVTaXplKTsKICAgICAgICAg
ZW1pdERpc2p1bmN0aW9uKG1fcGF0dGVybi5tX2JvZHkpOwogICAgICAgICByZWdleEVuZCgpOwog
Ci0gICAgICAgIHJldHVybiBuZXcgQnl0ZWNvZGVQYXR0ZXJuKG1fYm9keURpc2p1bmN0aW9uLCBt
X2FsbFBhcmVudGhlc2VzSW5mbywgbV9wYXR0ZXJuKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBCeXRlY29kZVBhdHRlcm4obV9ib2R5RGlzanVuY3Rpb24ucmVsZWFzZSgpLCBtX2FsbFBh
cmVudGhlc2VzSW5mbywgbV9wYXR0ZXJuKSk7CiAgICAgfQogCiAgICAgdm9pZCBjaGVja0lucHV0
KHVuc2lnbmVkIGNvdW50KQpAQCAtMTQ0OCw3ICsxNDQ3LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCByZWdleEJlZ2luKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zLCB1bnNpZ25lZCBjYWxsRnJhbWVT
aXplKQogICAgIHsKLSAgICAgICAgbV9ib2R5RGlzanVuY3Rpb24gPSBuZXcgQnl0ZURpc2p1bmN0
aW9uKG51bVN1YnBhdHRlcm5zLCBjYWxsRnJhbWVTaXplKTsKKyAgICAgICAgbV9ib2R5RGlzanVu
Y3Rpb24gPSBhZG9wdFB0cihuZXcgQnl0ZURpc2p1bmN0aW9uKG51bVN1YnBhdHRlcm5zLCBjYWxs
RnJhbWVTaXplKSk7CiAgICAgICAgIG1fYm9keURpc2p1bmN0aW9uLT50ZXJtcy5hcHBlbmQoQnl0
ZVRlcm06OkJvZHlBbHRlcm5hdGl2ZUJlZ2luKCkpOwogICAgICAgICBtX2JvZHlEaXNqdW5jdGlv
bi0+dGVybXNbMF0uZnJhbWVMb2NhdGlvbiA9IDA7CiAgICAgICAgIG1fY3VycmVudEFsdGVybmF0
aXZlSW5kZXggPSAwOwpAQCAtMTU2OCwxOSArMTU2NywxOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgUmVnZXhQYXR0ZXJuJiBtX3BhdHRlcm47Ci0gICAgQnl0ZURpc2p1bmN0aW9uKiBtX2Jv
ZHlEaXNqdW5jdGlvbjsKKyAgICBPd25QdHI8Qnl0ZURpc2p1bmN0aW9uPiBtX2JvZHlEaXNqdW5j
dGlvbjsKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRBbHRlcm5hdGl2ZUluZGV4OwogICAgIFZlY3Rv
cjxQYXJlbnRoZXNlc1N0YWNrRW50cnk+IG1fcGFyZW50aGVzZXNTdGFjazsKICAgICBWZWN0b3I8
Qnl0ZURpc2p1bmN0aW9uKj4gbV9hbGxQYXJlbnRoZXNlc0luZm87CiB9OwogCiAKLUJ5dGVjb2Rl
UGF0dGVybiogYnl0ZUNvbXBpbGVSZWdleChjb25zdCBVU3RyaW5nJiBwYXR0ZXJuU3RyaW5nLCB1
bnNpZ25lZCYgbnVtU3VicGF0dGVybnMsIGNvbnN0IGNoYXIqJiBlcnJvciwgYm9vbCBpZ25vcmVD
YXNlLCBib29sIG11bHRpbGluZSkKK1Bhc3NPd25QdHI8Qnl0ZWNvZGVQYXR0ZXJuPiBieXRlQ29t
cGlsZVJlZ2V4KGNvbnN0IFVTdHJpbmcmIHBhdHRlcm5TdHJpbmcsIHVuc2lnbmVkJiBudW1TdWJw
YXR0ZXJucywgY29uc3QgY2hhciomIGVycm9yLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVsdGls
aW5lKQogewogICAgIFJlZ2V4UGF0dGVybiBwYXR0ZXJuKGlnbm9yZUNhc2UsIG11bHRpbGluZSk7
CiAKICAgICBpZiAoKGVycm9yID0gY29tcGlsZVJlZ2V4KHBhdHRlcm5TdHJpbmcsIHBhdHRlcm4p
KSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPEJ5dGVjb2Rl
UGF0dGVybj4oKTsKIAogICAgIG51bVN1YnBhdHRlcm5zID0gcGF0dGVybi5tX251bVN1YnBhdHRl
cm5zOwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaAkocmV2aXNp
b24gNjI1OTcpCisrKyBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SW50ZXJwcmV0ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiUmVnZXhQYXJzZXIuaCIKICNp
bmNsdWRlICJSZWdleFBhdHRlcm4uaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBZYXJyIHsKQEAgLTI5Miw3ICsyOTMsNyBAQCBwdWJsaWM6CiB9OwogCiBzdHJ1Y3QgQnl0ZWNv
ZGVQYXR0ZXJuIDogRmFzdEFsbG9jQmFzZSB7Ci0gICAgQnl0ZWNvZGVQYXR0ZXJuKEJ5dGVEaXNq
dW5jdGlvbiogYm9keSwgVmVjdG9yPEJ5dGVEaXNqdW5jdGlvbio+IGFsbFBhcmVudGhlc2VzSW5m
bywgUmVnZXhQYXR0ZXJuJiBwYXR0ZXJuKQorICAgIEJ5dGVjb2RlUGF0dGVybihQYXNzT3duUHRy
PEJ5dGVEaXNqdW5jdGlvbj4gYm9keSwgVmVjdG9yPEJ5dGVEaXNqdW5jdGlvbio+IGFsbFBhcmVu
dGhlc2VzSW5mbywgUmVnZXhQYXR0ZXJuJiBwYXR0ZXJuKQogICAgICAgICA6IG1fYm9keShib2R5
KQogICAgICAgICAsIG1faWdub3JlQ2FzZShwYXR0ZXJuLm1faWdub3JlQ2FzZSkKICAgICAgICAg
LCBtX211bHRpbGluZShwYXR0ZXJuLm1fbXVsdGlsaW5lKQpAQCAtMzI1LDcgKzMyNiw3IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPENoYXJhY3RlckNsYXNzKj4gbV91c2VyQ2hhcmFjdGVyQ2xhc3Nl
czsKIH07CiAKLUJ5dGVjb2RlUGF0dGVybiogYnl0ZUNvbXBpbGVSZWdleChjb25zdCBVU3RyaW5n
JiBwYXR0ZXJuLCB1bnNpZ25lZCYgbnVtU3VicGF0dGVybnMsIGNvbnN0IGNoYXIqJiBlcnJvciwg
Ym9vbCBpZ25vcmVDYXNlID0gZmFsc2UsIGJvb2wgbXVsdGlsaW5lID0gZmFsc2UpOworUGFzc093
blB0cjxCeXRlY29kZVBhdHRlcm4+IGJ5dGVDb21waWxlUmVnZXgoY29uc3QgVVN0cmluZyYgcGF0
dGVybiwgdW5zaWduZWQmIG51bVN1YnBhdHRlcm5zLCBjb25zdCBjaGFyKiYgZXJyb3IsIGJvb2wg
aWdub3JlQ2FzZSA9IGZhbHNlLCBib29sIG11bHRpbGluZSA9IGZhbHNlKTsKIGludCBpbnRlcnBy
ZXRSZWdleChCeXRlY29kZVBhdHRlcm4qIHZfcmVnZXgsIGNvbnN0IFVDaGFyKiBpbnB1dCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgaW50KiBvdXRwdXQpOwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6WWFycgpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyNjA5KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MiBAQAorMjAxMC0wNy0wNiAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW9yZSBPd25QdHIgd29yaywgaW5jbHVkaW5nIG1ha2luZyBjbGVhciBzZXQg
dGhlIHBvaW50ZXIgdG8gMCBiZWZvcmUgZGVsZXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNzI3CisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2Uu
ZXhwOiBVcGRhdGVkLgorCisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OlJhcmVEYXRhKTogVXNlIGFkb3B0UHRyLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKTogRGl0dG8uCisg
ICAgICAgICogZG9tL1NwYWNlU3BsaXRTdHJpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNl
U3BsaXRTdHJpbmc6OlNwYWNlU3BsaXRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlNwYWNlU3BsaXRTdHJpbmc6OnNldCk6IERpdHRvLgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVk
RnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OkNhY2hlZEZyYW1lKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGcmFtZTo6c2V0Q2FjaGVkRnJhbWVQbGF0
Zm9ybURhdGEpOiBEaXR0by4KKworICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuaDogVXNl
IFBhc3NPd25QdHIuCisKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNo
ZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxDYWNoZUxpc3RlbmVyVGFzazo6Y3Jl
YXRlKTogVXNlIGFkb3B0UHRyLgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZTo6c3RvcmVDb3B5T2ZDYWNoZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL1B1cmdl
YWJsZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6UHVyZ2VhYmxlQnVmZmVyOjpjcmVhdGUp
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaDoK
KyAgICAgICAgKFdlYkNvcmU6Ojo6bG9jYXRlUGFnZVNsb3dDYXNlKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6
QW5pbWF0aW9uVmFsdWU6OkFuaW1hdGlvblZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZTo6VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWUpOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6Ym91bmRzRm9yR2x5cGgpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUHVy
Z2VhYmxlQnVmZmVyTWFjLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlB1cmdlYWJsZUJ1ZmZlcjo6
Y3JlYXRlKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnNldEhvcml6b250YWxPdmVyZmxvd1Bvc2l0
aW9ucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6c2V0VmVydGlj
YWxPdmVyZmxvd1Bvc2l0aW9ucyk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5s
aW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpmbG9hdHMpOiBEaXR0
by4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkluaGVyaXRlZEZsYWdzOjppbmhlcml0QW5pbWF0aW9ucyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmluaGVyaXRUcmFuc2l0aW9ucyk6IERpdHRvLgor
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5oOiBVc2UgUGFz
c093blB0ci4KKwogMjAxMC0wNy0wNiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAg
ICAgICAgIEJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDYyNTk3KQorKysgV2Vi
Q29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAg
X19aTjdXZWJDb3JlMTBoYW5kQ3Vyc29yRXYKIF9fWk43V2ViQ29yZTEwc2V0Q29va2llc0VQTlNf
OERvY3VtZW50RVJLTlNfNEtVUkxFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTFCaXRtYXBJ
bWFnZUMxRVA3Q0dJbWFnZVBOU18xM0ltYWdlT2JzZXJ2ZXJFCiBfX1pON1dlYkNvcmUxMUNhY2hl
ZEZyYW1lMjNjYWNoZWRGcmFtZVBsYXRmb3JtRGF0YUV2Ci1fX1pON1dlYkNvcmUxMUNhY2hlZEZy
YW1lMjZzZXRDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YUVQTlNfMjNDYWNoZWRGcmFtZVBsYXRmb3Jt
RGF0YUUKK19fWk43V2ViQ29yZTExQ2FjaGVkRnJhbWUyNnNldENhY2hlZEZyYW1lUGxhdGZvcm1E
YXRhRU4zV1RGMTBQYXNzT3duUHRySU5TXzIzQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGFFRUUKIF9f
Wk43V2ViQ29yZTExRWRpdENvbW1hbmQ3cmVhcHBseUV2CiBfX1pON1dlYkNvcmUxMUVkaXRDb21t
YW5kN3VuYXBwbHlFdgogX19aTjdXZWJDb3JlMTFGaWxlQ2hvb3NlcjEwY2hvb3NlRmlsZUVSS05T
XzZTdHJpbmdFCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgJKHJldmlzaW9uIDYyNTk3KQorKysgV2ViQ29yZS9j
c3MvQ1NTU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0yODMsMTEgKzI4NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgZXh0cmFjdFBzZXVkb1R5cGUoKSBjb25zdDsKIAogICAgICAgICBzdHJ1
Y3QgUmFyZURhdGEgOiBOb25jb3B5YWJsZSB7Ci0gICAgICAgICAgICBSYXJlRGF0YShDU1NTZWxl
Y3RvciogdGFnSGlzdG9yeSkKKyAgICAgICAgICAgIFJhcmVEYXRhKFBhc3NPd25QdHI8Q1NTU2Vs
ZWN0b3I+IHRhZ0hpc3RvcnkpCiAgICAgICAgICAgICAgICAgOiBtX2EoMCkKICAgICAgICAgICAg
ICAgICAsIG1fYigwKQogICAgICAgICAgICAgICAgICwgbV90YWdIaXN0b3J5KHRhZ0hpc3Rvcnkp
Ci0gICAgICAgICAgICAgICAgLCBtX3NpbXBsZVNlbGVjdG9yKDApCiAgICAgICAgICAgICAgICAg
LCBtX2F0dHJpYnV0ZShhbnlRTmFtZSgpKQogICAgICAgICAgICAgICAgICwgbV9hcmd1bWVudChu
dWxsQXRvbSkKICAgICAgICAgICAgIHsKQEAgLTMwOCw3ICszMDgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX2hhc1JhcmVEYXRhKSAKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX2RhdGEubV9yYXJlRGF0YSA9IG5ldyBS
YXJlRGF0YShtX2RhdGEubV90YWdIaXN0b3J5KTsgCisgICAgICAgICAgICBtX2RhdGEubV9yYXJl
RGF0YSA9IG5ldyBSYXJlRGF0YShhZG9wdFB0cihtX2RhdGEubV90YWdIaXN0b3J5KSk7CiAgICAg
ICAgICAgICBtX2hhc1JhcmVEYXRhID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6
IFdlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9TcGFjZVNwbGl0U3RyaW5nLmgJKHJldmlzaW9uIDYyNTk3KQorKysgV2ViQ29yZS9kb20vU3Bh
Y2VTcGxpdFN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRl
ICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTY0LDkgKzY1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNw
YWNlU3BsaXRTdHJpbmcgewogICAgIHB1YmxpYzoKICAgICAgICAgU3BhY2VTcGxpdFN0cmluZygp
IHsgfQotICAgICAgICBTcGFjZVNwbGl0U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29s
IHNob3VsZEZvbGRDYXNlKSA6IG1fZGF0YShuZXcgU3BhY2VTcGxpdFN0cmluZ0RhdGEoc3RyaW5n
LCBzaG91bGRGb2xkQ2FzZSkpIHsgfQorICAgICAgICBTcGFjZVNwbGl0U3RyaW5nKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBib29sIHNob3VsZEZvbGRDYXNlKSA6IG1fZGF0YShhZG9wdFB0cihuZXcg
U3BhY2VTcGxpdFN0cmluZ0RhdGEoc3RyaW5nLCBzaG91bGRGb2xkQ2FzZSkpKSB7IH0KIAotICAg
ICAgICB2b2lkIHNldChjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBzaG91bGRGb2xkQ2FzZSkg
eyBtX2RhdGEuc2V0KG5ldyBTcGFjZVNwbGl0U3RyaW5nRGF0YShzdHJpbmcsIHNob3VsZEZvbGRD
YXNlKSk7IH0KKyAgICAgICAgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgc2hv
dWxkRm9sZENhc2UpIHsgbV9kYXRhID0gYWRvcHRQdHIobmV3IFNwYWNlU3BsaXRTdHJpbmdEYXRh
KHN0cmluZywgc2hvdWxkRm9sZENhc2UpKTsgfQogICAgICAgICB2b2lkIGNsZWFyKCkgeyBtX2Rh
dGEuY2xlYXIoKTsgfQogCiAgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgQXRvbWljU3RyaW5n
JiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEtPmNvbnRhaW5zKHN0cmlu
Zyk7IH0KSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAkocmV2aXNpb24gNjI1OTcpCisrKyBX
ZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyAr
MTI0LDcgQEAgQ2FjaGVkRnJhbWU6OkNhY2hlZEZyYW1lKEZyYW1lKiBmcmFtZSkKIAogICAgIC8v
IEFjdGl2ZSBET00gb2JqZWN0cyBtdXN0IGJlIHN1c3BlbmRlZCBiZWZvcmUgd2UgY2FjaGVkIHRo
ZSBmcmFtZSBzY3JpcHQgZGF0YQogICAgIG1fZG9jdW1lbnQtPnN1c3BlbmRBY3RpdmVET01PYmpl
Y3RzKCk7Ci0gICAgbV9jYWNoZWRGcmFtZVNjcmlwdERhdGEuc2V0KG5ldyBTY3JpcHRDYWNoZWRG
cmFtZURhdGEoZnJhbWUpKTsKKyAgICBtX2NhY2hlZEZyYW1lU2NyaXB0RGF0YSA9IGFkb3B0UHRy
KG5ldyBTY3JpcHRDYWNoZWRGcmFtZURhdGEoZnJhbWUpKTsKICAgICAKICAgICAvLyBDdXN0b20g
c2Nyb2xsYmFyIHJlbmRlcmVycyB3aWxsIGdldCByZWF0dGFjaGVkIHdoZW4gdGhlIGRvY3VtZW50
IGNvbWVzIG91dCBvZiB0aGUgcGFnZSBjYWNoZQogICAgIG1fdmlldy0+ZGV0YWNoQ3VzdG9tU2Ny
b2xsYmFycygpOwpAQCAtMjMyLDkgKzIzMiw5IEBAIHZvaWQgQ2FjaGVkRnJhbWU6OmRlc3Ryb3ko
KQogICAgIGNsZWFyKCk7CiB9CiAKLXZvaWQgQ2FjaGVkRnJhbWU6OnNldENhY2hlZEZyYW1lUGxh
dGZvcm1EYXRhKENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhKiBkYXRhKQordm9pZCBDYWNoZWRGcmFt
ZTo6c2V0Q2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEoUGFzc093blB0cjxDYWNoZWRGcmFtZVBsYXRm
b3JtRGF0YT4gZGF0YSkKIHsKLSAgICBtX2NhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLnNldChkYXRh
KTsKKyAgICBtX2NhY2hlZEZyYW1lUGxhdGZvcm1EYXRhID0gZGF0YTsKIH0KIAogQ2FjaGVkRnJh
bWVQbGF0Zm9ybURhdGEqIENhY2hlZEZyYW1lOjpjYWNoZWRGcmFtZVBsYXRmb3JtRGF0YSgpCklu
ZGV4OiBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkRnJhbWUuaAkocmV2aXNpb24gNjI1OTcpCisrKyBXZWJDb3JlL2hpc3Rv
cnkvQ2FjaGVkRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNjcmlwdENhY2hlZEZyYW1lRGF0YS5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC03NSw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCk7CiAg
ICAgdm9pZCBkZXN0cm95KCk7CiAKLSAgICB2b2lkIHNldENhY2hlZEZyYW1lUGxhdGZvcm1EYXRh
KENhY2hlZEZyYW1lUGxhdGZvcm1EYXRhKiBkYXRhKTsKKyAgICB2b2lkIHNldENhY2hlZEZyYW1l
UGxhdGZvcm1EYXRhKFBhc3NPd25QdHI8Q2FjaGVkRnJhbWVQbGF0Zm9ybURhdGE+KTsKICAgICBD
YWNoZWRGcmFtZVBsYXRmb3JtRGF0YSogY2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEoKTsKIAogICAg
IHVzaW5nIENhY2hlZEZyYW1lQmFzZTo6ZG9jdW1lbnQ7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9h
cHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAJKHJldmlzaW9uIDYyNTk3
KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZUdyb3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAyNyw3ICsxMDI3LDcgQEAgY2xhc3MgQ2FsbENhY2hlTGlzdGVu
ZXJUYXNrIDogcHVibGljIFNjcgogcHVibGljOgogICAgIHN0YXRpYyBQYXNzT3duUHRyPENhbGxD
YWNoZUxpc3RlbmVyVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRl
ciwgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkV2ZW50SUQgZXZlbnRJRCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBuZXcgQ2FsbENhY2hlTGlzdGVuZXJUYXNrKGxvYWRlciwgZXZlbnRJRCk7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2FsbENhY2hlTGlzdGVuZXJUYXNrKGxvYWRlciwgZXZl
bnRJRCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQpJbmRleDogV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBw
bGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAkocmV2aXNpb24gNjI1OTcpCisrKyBX
ZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk5OSw3ICs5OTksNyBAQCBib29sIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
OjpzdG9yZUNvcHlPCiAgICAgfQogICAgIAogICAgIC8vIE5vdyBjcmVhdGUgYSBuZXcgY2FjaGUg
Z3JvdXAuCi0gICAgT3duUHRyPEFwcGxpY2F0aW9uQ2FjaGVHcm91cD4gZ3JvdXBDb3B5KG5ldyBB
cHBsaWNhdGlvbkNhY2hlR3JvdXAoY2FjaGUtPmdyb3VwKCktPm1hbmlmZXN0VVJMKCksIHRydWUp
KTsKKyAgICBPd25QdHI8QXBwbGljYXRpb25DYWNoZUdyb3VwPiBncm91cENvcHkoYWRvcHRQdHIo
bmV3IEFwcGxpY2F0aW9uQ2FjaGVHcm91cChjYWNoZS0+Z3JvdXAoKS0+bWFuaWZlc3RVUkwoKSwg
dHJ1ZSkpKTsKICAgICAKICAgICBncm91cENvcHktPnNldE5ld2VzdENhY2hlKGNhY2hlQ29weSk7
CiAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1B1cmdlYWJsZUJ1ZmZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUHVyZ2VhYmxlQnVmZmVyLmgJKHJldmlzaW9uIDYyNTk3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QdXJnZWFibGVCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcsMTQgKzI3LDE1IEBACiAjZGVmaW5lIFB1cmdlYWJsZUJ1ZmZlcl9oCiAKICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAgIGNsYXNzIFB1
cmdlYWJsZUJ1ZmZlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAg
ICBzdGF0aWMgUHVyZ2VhYmxlQnVmZmVyKiBjcmVhdGUoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90
KTsKLSAgICAgICAgc3RhdGljIFB1cmdlYWJsZUJ1ZmZlciogY3JlYXRlKGNvbnN0IFZlY3Rvcjxj
aGFyPiYgdikgeyByZXR1cm4gY3JlYXRlKHYuZGF0YSgpLCB2LnNpemUoKSk7IH0KKyAgICAgICAg
c3RhdGljIFBhc3NPd25QdHI8UHVyZ2VhYmxlQnVmZmVyPiBjcmVhdGUoY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90KTsKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8UHVyZ2VhYmxlQnVmZmVyPiBj
cmVhdGUoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpIHsgcmV0dXJuIGNyZWF0ZSh2ZWN0b3Iu
ZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsgfQogICAgICAgICAKICAgICAgICAgflB1cmdlYWJsZUJ1
ZmZlcigpOwogCkBAIC02Myw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB9Owog
CiAjaWYgIU9TKERBUldJTikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKLSAgICBpbmxpbmUgUHVyZ2VhYmxlQnVmZmVyKiBQdXJn
ZWFibGVCdWZmZXI6OmNyZWF0ZShjb25zdCBjaGFyKiwgc2l6ZV90KSB7IHJldHVybiAwOyB9Cisg
ICAgaW5saW5lIFBhc3NPd25QdHI8UHVyZ2VhYmxlQnVmZmVyPiBQdXJnZWFibGVCdWZmZXI6OmNy
ZWF0ZShjb25zdCBjaGFyKiwgc2l6ZV90KSB7IHJldHVybiBQYXNzT3duUHRyPFB1cmdlYWJsZUJ1
ZmZlcj4oKTsgfQogICAgIGlubGluZSBQdXJnZWFibGVCdWZmZXI6On5QdXJnZWFibGVCdWZmZXIo
KSB7IH0KICAgICBpbmxpbmUgY29uc3QgY2hhciogUHVyZ2VhYmxlQnVmZmVyOjpkYXRhKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogICAgIGlubGluZSB2b2lkIFB1cmdlYWJsZUJ1ZmZlcjo6c2V0UHVy
Z2VQcmlvcml0eShQdXJnZVByaW9yaXR5KSB7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR2x5cGhNZXRyaWNzTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaE1ldHJpY3NNYXAuaAkocmV2aXNpb24gNjI1OTcpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dseXBoTWV0cmljc01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMs
NyArMTEzLDcgQEAgdGVtcGxhdGU8Y2xhc3MgVD4gdHlwZW5hbWUgR2x5cGhNZXRyaWNzTQogICAg
ICAgICAgICAgaWYgKChwYWdlID0gbV9wYWdlcy0+Z2V0KHBhZ2VOdW1iZXIpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gcGFnZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3BhZ2Vz
LnNldChuZXcgSGFzaE1hcDxpbnQsIEdseXBoTWV0cmljc1BhZ2UqPik7CisgICAgICAgICAgICBt
X3BhZ2VzID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8aW50LCBHbHlwaE1ldHJpY3NQYWdlKj4pOwog
ICAgICAgICBwYWdlID0gbmV3IEdseXBoTWV0cmljc1BhZ2U7CiAgICAgICAgIG1fcGFnZXMtPnNl
dChwYWdlTnVtYmVyLCBwYWdlKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXIuaAkocmV2aXNpb24gNjI1OTcpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTAgKzk0LDkg
QEAgY2xhc3MgQW5pbWF0aW9uVmFsdWUgOiBwdWJsaWMgTm9uY29weWFibAogcHVibGljOgogICAg
IEFuaW1hdGlvblZhbHVlKGZsb2F0IGtleVRpbWUsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1p
bmdGdW5jdGlvbiA9IDApCiAgICAgICAgIDogbV9rZXlUaW1lKGtleVRpbWUpCi0gICAgICAgICwg
bV90aW1pbmdGdW5jdGlvbigwKQogICAgIHsKICAgICAgICAgaWYgKHRpbWluZ0Z1bmN0aW9uKQot
ICAgICAgICAgICAgbV90aW1pbmdGdW5jdGlvbi5zZXQobmV3IFRpbWluZ0Z1bmN0aW9uKCp0aW1p
bmdGdW5jdGlvbikpOworICAgICAgICAgICAgbV90aW1pbmdGdW5jdGlvbiA9IGFkb3B0UHRyKG5l
dyBUaW1pbmdGdW5jdGlvbigqdGltaW5nRnVuY3Rpb24pKTsKICAgICB9CiAgICAgCiAgICAgdmly
dHVhbCB+QW5pbWF0aW9uVmFsdWUoKSB7IH0KQEAgLTEzMiw3ICsxMzEsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIDogQW5pbWF0aW9uVmFsdWUoa2V5VGltZSwgdGltaW5nRnVuY3Rpb24pCiAgICAgewog
ICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBtX3ZhbHVlLnNldChuZXcgVHJhbnNmb3Jt
T3BlcmF0aW9ucygqdmFsdWUpKTsKKyAgICAgICAgICAgIG1fdmFsdWUgPSBhZG9wdFB0cihuZXcg
VHJhbnNmb3JtT3BlcmF0aW9ucygqdmFsdWUpKTsKICAgICB9CiAKICAgICBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgJKHJldmlzaW9uIDYyNTk3
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8
TWVkaWFQbGF5ZXI+IGNyZWF0ZShNZWRpYVBsYXllckNsaWVudCogY2xpZW50KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG5ldyBNZWRpYVBsYXllcihjbGllbnQpOworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IE1lZGlhUGxheWVyKGNsaWVudCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5NZWRp
YVBsYXllcigpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5oCShyZXZpc2lvbiA2MjU5NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkdseXBoUGFnZVRyZWVOb2RlLmgiCiAjaW5jbHVkZSAiVHlwZXNldHRpbmdGZWF0dXJlcy5oIgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiAj
aWYgVVNFKEFUU1VJKQogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQVRTVVN0eWxlKiBBVFNVU3R5bGU7
CkBAIC0yNjQsNyArMjY1LDcgQEAgQUxXQVlTX0lOTElORSBGbG9hdFJlY3QgU2ltcGxlRm9udERh
dGE6OgogCiAgICAgYm91bmRzID0gcGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChnbHlwaCk7CiAgICAg
aWYgKCFtX2dseXBoVG9Cb3VuZHNNYXApCi0gICAgICAgIG1fZ2x5cGhUb0JvdW5kc01hcC5zZXQo
bmV3IEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+KCkpOworICAgICAgICBtX2dseXBoVG9Cb3Vu
ZHNNYXAgPSBhZG9wdFB0cihuZXcgR2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4pOwogICAgIG1f
Z2x5cGhUb0JvdW5kc01hcC0+c2V0TWV0cmljc0ZvckdseXBoKGdseXBoLCBib3VuZHMpOwogICAg
IHJldHVybiBib3VuZHM7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9QdXJnZWFibGVC
dWZmZXJNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1B1cmdlYWJs
ZUJ1ZmZlck1hYy5jcHAJKHJldmlzaW9uIDYyNTk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UHVyZ2VhYmxlQnVmZmVyTWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjcgKzUwLDI3IEBA
IFB1cmdlYWJsZUJ1ZmZlcjo6flB1cmdlYWJsZUJ1ZmZlcigpCiAgICAgdm1fZGVhbGxvY2F0ZSht
YWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4obV9kYXRhKSwg
bV9zaXplKTsKIH0KIAotUHVyZ2VhYmxlQnVmZmVyKiBQdXJnZWFibGVCdWZmZXI6OmNyZWF0ZShj
b25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK1Bhc3NPd25QdHI8UHVyZ2VhYmxlQnVmZmVy
PiBQdXJnZWFibGVCdWZmZXI6OmNyZWF0ZShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSkK
IHsKICAgICBpZiAoc2l6ZSA8IG1pblB1cmdlYWJsZUJ1ZmZlclNpemUpCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gUGFzc093blB0cjxQdXJnZWFibGVCdWZmZXI+KCk7CiAKICAg
ICB2bV9hZGRyZXNzX3QgYnVmZmVyID0gMDsKICAgICBrZXJuX3JldHVybl90IHJldCA9IHZtX2Fs
bG9jYXRlKG1hY2hfdGFza19zZWxmKCksICZidWZmZXIsIHNpemUsIFZNX0ZMQUdTX1BVUkdBQkxF
IHwgVk1fRkxBR1NfQU5ZV0hFUkUgfCBWTV9UQUdfRk9SX1dFQkNPUkVfUFVSR0VBQkxFX01FTU9S
WSk7CiAKICAgICBBU1NFUlQocmV0ID09IEtFUk5fU1VDQ0VTUyk7CiAgICAgaWYgKHJldCAhPSBL
RVJOX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gUGFzc093blB0
cjxQdXJnZWFibGVCdWZmZXI+KCk7CiAKICAgICByZXQgPSB2bV9jb3B5KG1hY2hfdGFza19zZWxm
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihkYXRhKSwgc2l6ZSwgYnVmZmVyKTsK
IAogICAgIEFTU0VSVChyZXQgPT0gS0VSTl9TVUNDRVNTKTsKICAgICBpZiAocmV0ICE9IEtFUk5f
U1VDQ0VTUykgewogICAgICAgICB2bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGJ1ZmZl
ciwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gUGFzc093blB0cjxQ
dXJnZWFibGVCdWZmZXI+KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG5ldyBQdXJnZWFibGVCdWZm
ZXIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyKSwgc2l6ZSk7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBQdXJnZWFibGVCdWZmZXIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVy
KSwgc2l6ZSkpOwogfQogCiBib29sIFB1cmdlYWJsZUJ1ZmZlcjo6bWFrZVB1cmdlYWJsZShib29s
IHB1cmdlYWJsZSkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDYy
NTk3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTMsNyArMTkzLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6c2V0SG9yaXpv
bnRhbAogICAgIGlmICghbV9vdmVyZmxvdykgewogICAgICAgICBpZiAobGVmdExheW91dE92ZXJm
bG93ID09IG1feCAmJiByaWdodExheW91dE92ZXJmbG93ID09IG1feCArIG1fd2lkdGggJiYgbGVm
dFZpc3VhbE92ZXJmbG93ID09IG1feCAmJiByaWdodFZpc3VhbE92ZXJmbG93ID09IG1feCArIG1f
d2lkdGgpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fb3ZlcmZsb3cuc2V0KG5ldyBS
ZW5kZXJPdmVyZmxvdyhJbnRSZWN0KG1feCwgbV95LCBtX3dpZHRoLCBtX3JlbmRlcmVyLT5zdHls
ZShtX2ZpcnN0TGluZSktPmZvbnQoKS5oZWlnaHQoKSkpKTsgICAgCisgICAgICAgIG1fb3ZlcmZs
b3cgPSBhZG9wdFB0cihuZXcgUmVuZGVyT3ZlcmZsb3coSW50UmVjdChtX3gsIG1feSwgbV93aWR0
aCwgbV9yZW5kZXJlci0+c3R5bGUobV9maXJzdExpbmUpLT5mb250KCkuaGVpZ2h0KCkpKSk7ICAg
IAogICAgIH0KIAogICAgIG1fb3ZlcmZsb3ctPnNldExlZnRMYXlvdXRPdmVyZmxvdyhsZWZ0TGF5
b3V0T3ZlcmZsb3cpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dC
b3g6OnNldFZlcnRpY2FsT3YKICAgICBpZiAoIW1fb3ZlcmZsb3cpIHsKICAgICAgICAgaWYgKHRv
cExheW91dE92ZXJmbG93ID09IG1feSAmJiBib3R0b21MYXlvdXRPdmVyZmxvdyA9PSBtX3kgKyBi
b3hIZWlnaHQgJiYgdG9wVmlzdWFsT3ZlcmZsb3cgPT0gbV95ICYmIGJvdHRvbVZpc3VhbE92ZXJm
bG93ID09IG1feSArIGJveEhlaWdodCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9v
dmVyZmxvdy5zZXQobmV3IFJlbmRlck92ZXJmbG93KEludFJlY3QobV94LCBtX3ksIG1fd2lkdGgs
IGJveEhlaWdodCkpKTsKKyAgICAgICAgbV9vdmVyZmxvdyA9IGFkb3B0UHRyKG5ldyBSZW5kZXJP
dmVyZmxvdyhJbnRSZWN0KG1feCwgbV95LCBtX3dpZHRoLCBib3hIZWlnaHQpKSk7CiAgICAgfQog
CiAgICAgbV9vdmVyZmxvdy0+c2V0VG9wTGF5b3V0T3ZlcmZsb3codG9wTGF5b3V0T3ZlcmZsb3cp
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gNjI1OTcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3
ICsxMTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzRGlydHkoKSk7CiAg
ICAgICAgIGlmICghbV9mbG9hdHMpCi0gICAgICAgICAgICBtX2Zsb2F0cy5zZXQobmV3IFZlY3Rv
cjxSZW5kZXJCb3gqPigpKTsKKyAgICAgICAgICAgIG1fZmxvYXRzPSBhZG9wdFB0cihuZXcgVmVj
dG9yPFJlbmRlckJveCo+KTsKICAgICAgICAgcmV0dXJuICptX2Zsb2F0czsKICAgICB9CiAKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gNjI1OTcpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDI1LDggKzEwMjUsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRh
LmFjY2VzcygpLT5tX3RyYW5zaXRpb25zLmNsZWFyKCk7CiAgICAgfQogCi0gICAgdm9pZCBpbmhl
cml0QW5pbWF0aW9ucyhjb25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnQpIHsgcmFyZU5vbkluaGVy
aXRlZERhdGEuYWNjZXNzKCktPm1fYW5pbWF0aW9ucy5zZXQocGFyZW50ID8gbmV3IEFuaW1hdGlv
bkxpc3QoKnBhcmVudCkgOiAwKTsgfQotICAgIHZvaWQgaW5oZXJpdFRyYW5zaXRpb25zKGNvbnN0
IEFuaW1hdGlvbkxpc3QqIHBhcmVudCkgeyByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+
bV90cmFuc2l0aW9ucy5zZXQocGFyZW50ID8gbmV3IEFuaW1hdGlvbkxpc3QoKnBhcmVudCkgOiAw
KTsgfQorICAgIHZvaWQgaW5oZXJpdEFuaW1hdGlvbnMoY29uc3QgQW5pbWF0aW9uTGlzdCogcGFy
ZW50KSB7IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2FuaW1hdGlvbnMgPSBwYXJl
bnQgPyBhZG9wdFB0cihuZXcgQW5pbWF0aW9uTGlzdCgqcGFyZW50KSkgOiBQYXNzT3duUHRyPEFu
aW1hdGlvbkxpc3Q+KCk7IH0KKyAgICB2b2lkIGluaGVyaXRUcmFuc2l0aW9ucyhjb25zdCBBbmlt
YXRpb25MaXN0KiBwYXJlbnQpIHsgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJh
bnNpdGlvbnMgPSBwYXJlbnQgPyBhZG9wdFB0cihuZXcgQW5pbWF0aW9uTGlzdCgqcGFyZW50KSkg
OiBQYXNzT3duUHRyPEFuaW1hdGlvbkxpc3Q+KCk7IH0KICAgICB2b2lkIGFkanVzdEFuaW1hdGlv
bnMoKTsKICAgICB2b2lkIGFkanVzdFRyYW5zaXRpb25zKCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5oCShyZXZpc2lvbiA2MjU5NykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlRGVmcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSwxMCArMjksMTIgQEAKICNkZWZpbmUgU1ZHUmVuZGVyU3R5bGVEZWZzX2gKIAog
I2lmIEVOQUJMRShTVkcpCisKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC02Nyw4ICs2OSw4IEBACiAKICNkZWZp
bmUgU1ZHX1JTX0RFRklORV9BVFRSSUJVVEVfREFUQVJFRl9XSVRIX0lOSVRJQUxfT1dOUFRSKERh
dGEsIEdyb3VwLCBWYXJpYWJsZSwgVHlwZSwgTmFtZSwgSW5pdGlhbCkgXAogICAgIERhdGEqIE5h
bWUoKSBjb25zdCB7IHJldHVybiBHcm91cC0+VmFyaWFibGUuZ2V0KCk7IH0gXAotICAgIHZvaWQg
c2V0IyNUeXBlKERhdGEqIG9iaikgeyBcCi0gICAgICAgIEdyb3VwLmFjY2VzcygpLT5WYXJpYWJs
ZS5zZXQob2JqKTsgXAorICAgIHZvaWQgc2V0IyNUeXBlKFBhc3NPd25QdHI8RGF0YT4gb2JqKSB7
IFwKKyAgICAgICAgR3JvdXAuYWNjZXNzKCktPlZhcmlhYmxlID0gb2JqOyBcCiAgICAgfSBcCiAg
ICAgc3RhdGljIERhdGEqIGluaXRpYWwjI1R5cGUoKSB7IHJldHVybiBJbml0aWFsOyB9CiAKQEAg
LTMwMCw0ICszMDIsNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorCiAjZW5kaWYgLy8gU1ZHUmVuZGVyU3R5bGVE
ZWZzX2gK
</data>
<flag name="review"
          id="48323"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>