<?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>193467</bug_id>
          
          <creation_ts>2019-01-15 15:06:02 -0800</creation_ts>
          <short_desc>Refactor new bytecode structs so that the fields are prefixed with &quot;m_&quot;.</short_desc>
          <delta_ts>2019-01-17 16:39:04 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>193557</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1494839</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-15 15:06:02 -0800</bug_when>
    <thetext>This makes it easier to do a manual audit of type correctness of the LLInt instructions used to access these fields.  Without this change, it would be difficult (and error prone) to distinguish the difference between field names and macro variables.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494845</commentid>
    <comment_count>1</comment_count>
      <attachid>359210</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-15 15:13:17 -0800</bug_when>
    <thetext>Created attachment 359210
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494866</commentid>
    <comment_count>2</comment_count>
      <attachid>359210</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-15 15:50:21 -0800</bug_when>
    <thetext>Comment on attachment 359210
proposed patch.

r=me but we should probably wait for Tadeu to say it&apos;s ok too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494912</commentid>
    <comment_count>3</comment_count>
      <attachid>359210</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-15 17:02:14 -0800</bug_when>
    <thetext>Comment on attachment 359210
proposed patch.

Attachment 359210 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/10764813

New failing tests:
stress/arith-abs-to-arith-negate-range-optimizaton.js.no-llint
apiTests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494917</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-15 17:14:19 -0800</bug_when>
    <thetext>(In reply to Build Bot from comment #3)
&gt; Comment on attachment 359210 [details]
&gt; proposed patch.
&gt; 
&gt; Attachment 359210 [details] did not pass jsc-ews (mac):
&gt; Output: https://webkit-queues.webkit.org/results/10764813
&gt; 
&gt; New failing tests:
&gt; stress/arith-abs-to-arith-negate-range-optimizaton.js.no-llint
&gt; apiTests

Found the issue: I missed one place: the SFINAE condition for JIT::emitValueProfilingSiteIfProfiledOpcode which depends on Metadata::m_profile.  Will upload patch for landing with this fix shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494924</commentid>
    <comment_count>5</comment_count>
      <attachid>359230</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-15 17:16:21 -0800</bug_when>
    <thetext>Created attachment 359230
patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494965</commentid>
    <comment_count>6</comment_count>
      <attachid>359243</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-15 19:07:57 -0800</bug_when>
    <thetext>Created attachment 359243
patch for landing.

Rebased to ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494973</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-15 19:12:06 -0800</bug_when>
    <thetext>Attachment 359243 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1307:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495025</commentid>
    <comment_count>8</comment_count>
      <attachid>359243</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2019-01-15 23:56:09 -0800</bug_when>
    <thetext>Comment on attachment 359243
patch for landing.

View in context: https://bugs.webkit.org/attachment.cgi?id=359243&amp;action=review

Looks good to me, I think the rationale makes sense. Just a couple nits in the ruby code.

&gt; Source/JavaScriptCore/generator/Argument.rb:38
&gt; +        &quot;#{@type.to_s} m_#{@name};&quot;

Just a nit, but this should probably use `field_name` here. You might also want to remove the `attr_reader :name` to avoid accidentally referring to the unprefixed name.

&gt; Source/JavaScriptCore/generator/Opcode.rb:83
&gt; +    def untyped_params

This seems to be unused</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495111</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-16 10:35:25 -0800</bug_when>
    <thetext>Thanks.

(In reply to Tadeu Zagallo from comment #8)
&gt; Comment on attachment 359243 [details]
&gt; patch for landing.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=359243&amp;action=review
&gt; 
&gt; Looks good to me, I think the rationale makes sense. Just a couple nits in
&gt; the ruby code.
&gt; 
&gt; &gt; Source/JavaScriptCore/generator/Argument.rb:38
&gt; &gt; +        &quot;#{@type.to_s} m_#{@name};&quot;

Fixed.

&gt; Just a nit, but this should probably use `field_name` here. You might also
&gt; want to remove the `attr_reader :name` to avoid accidentally referring to
&gt; the unprefixed name.

Hmmm, I&apos;m not too knowledgeable about ruby but we still need a name property, and it should be write once i.e. read only after the Argument is constructed.  So, I think attr_reader :name is appropriate.

&gt; &gt; Source/JavaScriptCore/generator/Opcode.rb:83
&gt; &gt; +    def untyped_params
&gt; 
&gt; This seems to be unused

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495115</commentid>
    <comment_count>10</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-01-16 10:45:39 -0800</bug_when>
    <thetext>Landed in r240041: &lt;http://trac.webkit.org/r240041&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495116</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-16 10:48:56 -0800</bug_when>
    <thetext>&lt;rdar://problem/47321555&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359210</attachid>
            <date>2019-01-15 15:13:17 -0800</date>
            <delta_ts>2019-01-15 17:16:21 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-193467.patch</filename>
            <type>text/plain</type>
            <size>531869</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwMDExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0MCBA
QAorMjAxOS0wMS0xNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3IgbmV3IGJ5dGVjb2RlIHN0cnVjdHMgc28gdGhhdCB0aGUgZmllbGRzIGFyZSBwcmVm
aXhlZCB3aXRoICJtXyIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTM0NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBkbyBhIG1hbnVhbCBhdWRpdCBvZiB0eXBl
IGNvcnJlY3RuZXNzIG9mIHRoZSBMTEludAorICAgICAgICBpbnN0cnVjdGlvbnMgdXNlZCB0byBh
Y2Nlc3MgdGhlc2UgZmllbGRzLiAgV2l0aG91dCB0aGlzIGNoYW5nZSwgaXQgd291bGQgYmUKKyAg
ICAgICAgZGlmZmljdWx0IChhbmQgZXJyb3IgcHJvbmUpIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWZm
ZXJlbmNlIGJldHdlZW4gZmllbGQgbmFtZXMgYW5kCisgICAgICAgIG1hY3JvIHZhcmlhYmxlcy4g
IFRoaXMgYXVkaXQgd2lsbCBiZSBkb25lIGFmdGVyIHRoaXMgcGF0Y2ggbGFuZHMuCisKKyAgICAg
ICAgKiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlv
bik6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21M
TEludCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJv
cGFnYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplTExJ
bnRJbmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2
ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93KToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6Om5vdGlmeUxleGljYWxCaW5kaW5nU2hhZG93aW5nKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxl
cik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmZvckVhY2hBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVh
Y2hBcnJheUFsbG9jYXRpb25Qcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JF
YWNoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZv
ckVhY2hMTEludENhbGxMaW5rSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1
cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0
Y2hwb2ludC5jcHA6CisgICAgICAgIChKU0M6OkxMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3Ry
dWN0dXJlV2F0Y2hwb2ludDo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZSk6CisgICAgICAgICogYnl0
ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpqdW1wVGFy
Z2V0Rm9ySW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpleHRyYWN0U3RvcmVkSnVtcFRhcmdl
dHNGb3JJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OnVwZGF0ZVN0b3JlZEp1bXBUYXJnZXRz
Rm9ySW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAg
KiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OmR1bXBMaW5l
Q29sdW1uRW50cnkpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmdXNlQ29tcGFyZUFuZEp1bXAp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZnVzZVRlc3RBbmRKbXApOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3ApOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW5kU3dpdGNoKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QWNjZXNzb3JCeUlkKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QWNjZXNzb3JCeVZhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU5ld0Z1bmMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVOZXdGdW5jRXhwKToKKyAgICAgICAgKiBkZmcvREZH
T1NSRW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KToK
KyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3Bl
cmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZ2VuZXJhdG9yL0FyZ3Vt
ZW50LnJiOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBnZW5l
cmF0b3IvT3Bjb2RlLnJiOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Vuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNpZ25l
ZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVjKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX21vZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdG5vdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hZGQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNGYXN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TWF0aElDU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kaXYpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbXVsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3N1Yik6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlYyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX21vZCk6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlU2V0dXBGcmFtZSk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBp
bGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkR2V0
UHV0SW5mbyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29waWVkQXJpdGhQcm9maWxlKToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3Yp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2ptcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19lbXB0eSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aXNfYm9vbGVhbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19udW1iZXIpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jl
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3Bfbm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXFK
dW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19vYmplY3QpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Bh
cmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVi
dWcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
c2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fdGhpcyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9jaGVja190ZHopOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5l
d0Z1bmNDb21tb24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGly
ZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJp
Y19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2dldF9yZXN0X2xlbmd0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Vt
cHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lz
X251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Nl
dF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2plcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcSk6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRj
aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fdGhpcyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVj
dF9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVy
ZV9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNf
cG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCk6CisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlW
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRo
X3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zy
b21fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRU
eXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfc2V0dGVyX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlf
aWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0
QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAqIGxsaW50L0xMSW50
U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldHVwR2V0QnlJZFByb3RvdHlwZUNhY2hlKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmdlbmVy
aWNDYWxsKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnZhcmFyZ3NTZXR1cCk6CisgICAgICAgIChK
U0M6OkxMSW50Ojpjb21tb25DYWxsRXZhbCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAq
IHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAoSlNDOjp1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3ApOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1v
blNsb3dQYXRoczo6dHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6Q29t
bW9uU2xvd1BhdGhzOjp0cnlDYWNoZUdldEZyb21TY29wZUdsb2JhbCk6CisKIDIwMTktMDEtMTUg
IFRvbWFzIFBvcGVsYSAgPHRwb3BlbGFAcmVkaGF0LmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
OiBGaXggdGhlIC1XZm9ybWF0IGNvbXBpbGVyIHdhcm5pbmdzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlm
aWNhdGlvbi5jcHAJKHJldmlzaW9uIDIzOTk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTc0LDEyICs3NCwxMiBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgICAgICBjYXNlIG9wX3lpZWxk
OiB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3BZaWVsZD4oKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGl2ZUNhbGxlZUxvY2Fs
c0luZGV4ID0gYnl0ZWNvZGUueWllbGRQb2ludDsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGl2ZUNhbGxlZUxvY2Fsc0luZGV4ID0gYnl0ZWNvZGUubV95aWVsZFBvaW50OwogICAgICAg
ICAgICAgICAgICAgICBpZiAobGl2ZUNhbGxlZUxvY2Fsc0luZGV4ID49IG1feWllbGRzLnNpemUo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1feWllbGRzLnJlc2l6ZShsaXZlQ2FsbGVlTG9j
YWxzSW5kZXggKyAxKTsKICAgICAgICAgICAgICAgICAgICAgWWllbGREYXRhJiBkYXRhID0gbV95
aWVsZHNbbGl2ZUNhbGxlZUxvY2Fsc0luZGV4XTsKICAgICAgICAgICAgICAgICAgICAgZGF0YS5w
b2ludCA9IGluc3RydWN0aW9uLm9mZnNldCgpOwotICAgICAgICAgICAgICAgICAgICBkYXRhLmFy
Z3VtZW50ID0gYnl0ZWNvZGUuYXJndW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIGRhdGEuYXJn
dW1lbnQgPSBieXRlY29kZS5tX2FyZ3VtZW50OwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAyMzk5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMyLDcgKzMyLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiAjZGVmaW5lIENBTExfRlVOQ1RPUihf
X2FyZykgXAotICAgIGZ1bmN0b3IoX19ieXRlY29kZS5fX2FyZyk7CisgICAgZnVuY3RvcihfX2J5
dGVjb2RlLm1fIyNfX2FyZyk7CiAKICNkZWZpbmUgVVNFU19PUl9ERUZTKF9fb3Bjb2RlLCAuLi4p
IFwKICAgICBjYXNlIF9fb3Bjb2RlOjpvcGNvZGVJRDogeyBcCkBAIC01MSwxNSArNTEsMTUgQEAg
dm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KEJsb2NrKgogICAgICAgICBmdW5jdG9y
KGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKTsKIAogICAgIGF1dG8gaGFuZGxlTmV3QXJyYXlM
aWtlID0gWyZdKGF1dG8gb3ApIHsKLSAgICAgICAgaW50IGJhc2UgPSBvcC5hcmd2Lm9mZnNldCgp
OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4ob3AuYXJnYyk7
IGkrKykKKyAgICAgICAgaW50IGJhc2UgPSBvcC5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihvcC5tX2FyZ2MpOyBpKyspCiAgICAg
ICAgICAgICBmdW5jdG9yKFZpcnR1YWxSZWdpc3RlciB7IGJhc2UgLSBpIH0pOwogICAgIH07CiAK
ICAgICBhdXRvIGhhbmRsZU9wQ2FsbExpa2UgPSBbJl0oYXV0byBvcCkgewotICAgICAgICBmdW5j
dG9yKG9wLmNhbGxlZSk7Ci0gICAgICAgIGludCBsYXN0QXJnID0gLXN0YXRpY19jYXN0PGludD4o
b3AuYXJndikgKyBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4ob3AuYXJnYyk7IGkrKykKKyAgICAgICAg
ZnVuY3RvcihvcC5tX2NhbGxlZSk7CisgICAgICAgIGludCBsYXN0QXJnID0gLXN0YXRpY19jYXN0
PGludD4ob3AubV9hcmd2KSArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihvcC5tX2FyZ2MpOyBpKysp
CiAgICAgICAgICAgICBmdW5jdG9yKFZpcnR1YWxSZWdpc3RlciB7IGxhc3RBcmcgKyBpIH0pOwog
ICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKQogICAgICAgICAgICAgZnVuY3Rv
cihjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSk7CkBAIC0yNTgsOCArMjU4LDggQEAgdm9pZCBj
b21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KEJsb2NrKgogCiAgICAgY2FzZSBvcF9zdHJjYXQ6
IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFN0cmNhdD4oKTsK
LSAgICAgICAgaW50IGJhc2UgPSBieXRlY29kZS5zcmMub2Zmc2V0KCk7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgYnl0ZWNvZGUuY291bnQ7IGkrKykKKyAgICAgICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRl
Y29kZS5tX2NvdW50OyBpKyspCiAgICAgICAgICAgICBmdW5jdG9yKFZpcnR1YWxSZWdpc3RlciB7
IGJhc2UgLSBpIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAy
Mzk5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzMsMTMgKzczLDEzIEBAIENhbGxMaW5rU3RhdHVzIENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICBMTEludENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvOwogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAgIGNhbGxM
aW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxv
Y2spLmNhbGxMaW5rSW5mbzsKKyAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5h
czxPcENhbGw+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9jYWxsTGlua0luZm87CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgICAgICBjYWxsTGlua0luZm8g
PSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2sp
LmNhbGxMaW5rSW5mbzsKKyAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxP
cENvbnN0cnVjdD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF90YWlsX2NhbGw6Ci0gICAgICAgIGNhbGxMaW5rSW5m
byA9ICZpbnN0cnVjdGlvbi0+YXM8T3BUYWlsQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2Nr
KS5jYWxsTGlua0luZm87CisgICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8
T3BUYWlsQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5tX2NhbGxMaW5rSW5mbzsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVz
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMjM5OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5j
YT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTUwNywyMyArNTA3LDIzIEBAIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKIAogICAgIGF1dG8gbGlua19wcm9maWxlID0gWyZd
KGNvbnN0IGF1dG8mIGluc3RydWN0aW9uLCBhdXRvIC8qYnl0ZWNvZGUqLywgYXV0byYgbWV0YWRh
dGEpIHsKICAgICAgICAgbV9udW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcysrOwotICAg
ICAgICBtZXRhZGF0YS5wcm9maWxlLm1fYnl0ZWNvZGVPZmZzZXQgPSBpbnN0cnVjdGlvbi5vZmZz
ZXQoKTsKKyAgICAgICAgbWV0YWRhdGEubV9wcm9maWxlLm1fYnl0ZWNvZGVPZmZzZXQgPSBpbnN0
cnVjdGlvbi5vZmZzZXQoKTsKICAgICB9OwogCiAgICAgYXV0byBsaW5rX2FycmF5UHJvZmlsZSA9
IFsmXShjb25zdCBhdXRvJiBpbnN0cnVjdGlvbiwgYXV0byAvKmJ5dGVjb2RlKi8sIGF1dG8mIG1l
dGFkYXRhKSB7Ci0gICAgICAgIG1ldGFkYXRhLmFycmF5UHJvZmlsZS5tX2J5dGVjb2RlT2Zmc2V0
ID0gaW5zdHJ1Y3Rpb24ub2Zmc2V0KCk7CisgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
Lm1fYnl0ZWNvZGVPZmZzZXQgPSBpbnN0cnVjdGlvbi5vZmZzZXQoKTsKICAgICB9OwogCiAgICAg
YXV0byBsaW5rX29iamVjdEFsbG9jYXRpb25Qcm9maWxlID0gWyZdKGNvbnN0IGF1dG8mIC8qaW5z
dHJ1Y3Rpb24qLywgYXV0byBieXRlY29kZSwgYXV0byYgbWV0YWRhdGEpIHsKLSAgICAgICAgbWV0
YWRhdGEub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaW5pdGlhbGl6ZVByb2ZpbGUodm0sIG1fZ2xv
YmFsT2JqZWN0LmdldCgpLCB0aGlzLCBtX2dsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCks
IGJ5dGVjb2RlLmlubGluZUNhcGFjaXR5KTsKKyAgICAgICAgbWV0YWRhdGEubV9vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS5pbml0aWFsaXplUHJvZmlsZSh2bSwgbV9nbG9iYWxPYmplY3QuZ2V0KCks
IHRoaXMsIG1fZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgYnl0ZWNvZGUubV9pbmxp
bmVDYXBhY2l0eSk7CiAgICAgfTsKIAogICAgIGF1dG8gbGlua19hcnJheUFsbG9jYXRpb25Qcm9m
aWxlID0gWyZdKGNvbnN0IGF1dG8mIC8qaW5zdHJ1Y3Rpb24qLywgYXV0byBieXRlY29kZSwgYXV0
byYgbWV0YWRhdGEpIHsKLSAgICAgICAgbWV0YWRhdGEuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5p
bml0aWFsaXplSW5kZXhpbmdNb2RlKGJ5dGVjb2RlLnJlY29tbWVuZGVkSW5kZXhpbmdUeXBlKTsK
KyAgICAgICAgbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLmluaXRpYWxpemVJbmRl
eGluZ01vZGUoYnl0ZWNvZGUubV9yZWNvbW1lbmRlZEluZGV4aW5nVHlwZSk7CiAgICAgfTsKIAog
ICAgIGF1dG8gbGlua19oaXRDb3VudEZvckxMSW50Q2FjaGluZyA9IFsmXShjb25zdCBhdXRvJiAv
Kmluc3RydWN0aW9uKi8sIGF1dG8gLypieXRlY29kZSovLCBhdXRvJiBtZXRhZGF0YSkgewotICAg
ICAgICBtZXRhZGF0YS5oaXRDb3VudEZvckxMSW50Q2FjaGluZyA9IE9wdGlvbnM6OnByb3RvdHlw
ZUhpdENvdW50Rm9yTExJbnRDYWNoaW5nKCk7CisgICAgICAgIG1ldGFkYXRhLm1faGl0Q291bnRG
b3JMTEludENhY2hpbmcgPSBPcHRpb25zOjpwcm90b3R5cGVIaXRDb3VudEZvckxMSW50Q2FjaGlu
ZygpOwogICAgIH07CiAKICNkZWZpbmUgTElOS19GSUVMRChfX2ZpZWxkKSBcCkBAIC02MDcsMjgg
KzYwNywyOCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAg
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogewogICAgICAgICAgICAgSU5JVElBTElaRV9NRVRB
REFUQShPcFJlc29sdmVTY29wZSkKIAotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLnZhcik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChieXRlY29kZS5yZXNvbHZlVHlwZSAhPSBMb2NhbENsb3N1cmVWYXIpOworICAgICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlLm1fcmVzb2x2ZVR5cGUgIT0gTG9jYWxD
bG9zdXJlVmFyKTsKIAotICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJh
Y3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2RlLmxvY2FsU2Nv
cGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGJ5dGVjb2RlLnJlc29sdmVUeXBlLCBJbml0aWFs
aXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAgIFJlc29sdmVPcCBv
cCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBieXRlY29kZS5tX2xvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGJ5dGVjb2Rl
Lm1fcmVzb2x2ZVR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pOwog
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7CiAKLSAg
ICAgICAgICAgIG1ldGFkYXRhLnJlc29sdmVUeXBlID0gb3AudHlwZTsKLSAgICAgICAgICAgIG1l
dGFkYXRhLmxvY2FsU2NvcGVEZXB0aCA9IG9wLmRlcHRoOworICAgICAgICAgICAgbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZSA9IG9wLnR5cGU7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2xvY2FsU2Nv
cGVEZXB0aCA9IG9wLmRlcHRoOwogICAgICAgICAgICAgaWYgKG9wLmxleGljYWxFbnZpcm9ubWVu
dCkgewogICAgICAgICAgICAgICAgIGlmIChvcC50eXBlID09IE1vZHVsZVZhcikgewogICAgICAg
ICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBsaW5rZWQgbW9kdWxlIGVudmlyb25tZW50IHN0cm9u
Z2x5IHJlZmVyZW5jZWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJvbmdseVJlZmVyZW5j
ZWRNb2R1bGVFbnZpcm9ubWVudHMuYWRkKGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4ob3Au
bGV4aWNhbEVudmlyb25tZW50KSkuaXNOZXdFbnRyeSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGFkZENvbnN0YW50KG9wLmxleGljYWxFbnZpcm9ubWVudCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1ldGFkYXRhLmxleGljYWxFbnZpcm9ubWVudC5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZp
cm9ubWVudCk7CisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25t
ZW50LnNldCh2bSwgdGhpcywgb3AubGV4aWNhbEVudmlyb25tZW50KTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuc3ltYm9sVGFibGUuc2V0KHZt
LCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICAg
ICAgICAgICAgICBtZXRhZGF0YS5tX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgb3AubGV4aWNh
bEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
b3AudHlwZSwgdGhpcykpIHsKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5jb25zdGFudFNjb3Bl
LnNldCh2bSwgdGhpcywgY29uc3RhbnRTY29wZSk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEu
bV9jb25zdGFudFNjb3BlLnNldCh2bSwgdGhpcywgY29uc3RhbnRTY29wZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBvcC50eXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgICAgICBt
ZXRhZGF0YS5sb2NhbFNjb3BlRGVwdGggPSAwOworICAgICAgICAgICAgICAgICAgICBtZXRhZGF0
YS5tX2xvY2FsU2NvcGVEZXB0aCA9IDA7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBtZXRhZGF0YS5nbG9iYWxPYmplY3QgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1l
dGFkYXRhLm1fZ2xvYmFsT2JqZWN0ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKQEAgLTYzNiw2MSArNjM2LDYxIEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0sIFMKICAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BHZXRGcm9t
U2NvcGUpCiAKICAgICAgICAgICAgIGxpbmtfcHJvZmlsZShpbnN0cnVjdGlvbiwgYnl0ZWNvZGUs
IG1ldGFkYXRhKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQgPSBudWxscHRy
OworICAgICAgICAgICAgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKIAotICAg
ICAgICAgICAgQVNTRVJUKCFpc0luaXRpYWxpemF0aW9uKGJ5dGVjb2RlLmdldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpKTsKLSAgICAgICAgICAgIGlmIChieXRlY29kZS5nZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7Ci0gICAgICAgICAgICAgICAgbWV0
YWRhdGEuZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oYnl0ZWNvZGUuZ2V0UHV0SW5mby5yZXNvbHZl
TW9kZSgpLCBDbG9zdXJlVmFyLCBieXRlY29kZS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXNJbml0aWFsaXphdGlvbihieXRlY29kZS5tX2dl
dFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpKTsKKyAgICAgICAgICAgIGlmIChieXRlY29k
ZS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKKyAgICAg
ICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKGJ5dGVjb2RlLm1f
Z2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBDbG9zdXJlVmFyLCBieXRlY29kZS5tX2dldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZp
ZXIoYnl0ZWNvZGUudmFyKTsKLSAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFi
c3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5sb2Nh
bFNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgR2V0LCBieXRlY29kZS5nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCksIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pOworICAgICAg
ICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFy
KTsKKyAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZSht
X2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5tX2xvY2FsU2NvcGVEZXB0aCwg
c2NvcGUsIGlkZW50LCBHZXQsIGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpLCBJ
bml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogCi0gICAgICAgICAgICBtZXRhZGF0
YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhieXRlY29kZS5nZXRQdXRJbmZvLnJlc29sdmVNb2Rl
KCksIG9wLnR5cGUsIGJ5dGVjb2RlLmdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwor
ICAgICAgICAgICAgbWV0YWRhdGEubV9nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhieXRlY29kZS5t
X2dldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgb3AudHlwZSwgYnl0ZWNvZGUubV9nZXRQdXRJbmZv
LmluaXRpYWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgIGlmIChvcC50eXBlID09IE1vZHVs
ZVZhcikKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhi
eXRlY29kZS5nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGJ5dGVjb2RlLmdl
dFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOworICAgICAgICAgICAgICAgIG1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVN
b2RlKCksIENsb3N1cmVWYXIsIGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1v
ZGUoKSk7CiAgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9
PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQotICAgICAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBv
aW50U2V0OworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCA9IG9wLndh
dGNocG9pbnRTZXQ7CiAgICAgICAgICAgICBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCi0gICAgICAg
ICAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3Auc3RydWN0dXJlKTsK
LSAgICAgICAgICAgIG1ldGFkYXRhLm9wZXJhbmQgPSBvcC5vcGVyYW5kOworICAgICAgICAgICAg
ICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3Auc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgIG1ldGFkYXRhLm1fb3BlcmFuZCA9IG9wLm9wZXJhbmQ7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAg
ICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKE9wUHV0VG9TY29wZSkKIAotICAgICAgICAgICAg
aWYgKGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIp
IHsKKyAgICAgICAgICAgIGlmIChieXRlY29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9
PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgICAgICAgICAvLyBPbmx5IGRvIHdhdGNoaW5n
IGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBwdXR0aW5nIHRvIGlzIG5vdCBhbm9ueW1vdXMuCi0gICAg
ICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLnZhciAhPSBVSU5UX01BWCkgewotICAgICAgICAgICAg
ICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihn
ZXRDb25zdGFudChieXRlY29kZS5zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aCkpOwotICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUu
dmFyKTsKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV92YXIgIT0gVUlOVF9NQVgpIHsK
KyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5
bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0
aCkpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50
aWZpZXIoYnl0ZWNvZGUubV92YXIpOwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBh
dXRvIGl0ZXIgPSBzeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIGlkZW50LmltcGwoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKSk7
CiAgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLnByZXBhcmVUb1dhdGNoKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRj
aHBvaW50U2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEud2F0Y2hwb2ludFNldCA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCA9IG51bGxwdHI7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS52YXIpOwotICAgICAgICAg
ICAgbWV0YWRhdGEud2F0Y2hwb2ludFNldCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBSZXNvbHZl
T3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwgYnl0ZWNvZGUuc3ltYm9sVGFibGVPclNjb3BlRGVwdGgsIHNjb3BlLCBpZGVudCwgUHV0
LCBieXRlY29kZS5nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCksIGJ5dGVjb2RlLmdldFB1dEluZm8u
aW5pdGlhbGl6YXRpb25Nb2RlKCkpOworICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1f
d2F0Y2hwb2ludFNldCA9IG51bGxwdHI7CisgICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Nj
b3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgYnl0ZWNv
ZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBQdXQsIGJ5dGVjb2Rl
Lm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpLCBieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBmYWxzZSk7CiAKLSAgICAgICAgICAgIG1ldGFkYXRhLmdldFB1dEluZm8gPSBHZXRQdXRJ
bmZvKGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgb3AudHlwZSwgYnl0ZWNvZGUu
Z2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAgICBtZXRhZGF0YS5t
X2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9k
ZSgpLCBvcC50eXBlLCBieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkp
OwogICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxW
YXIgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
LSAgICAgICAgICAgICAgICBtZXRhZGF0YS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNl
dDsKKyAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBv
aW50U2V0OwogICAgICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9w
LnR5cGUgPT0gQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgICAg
ICAgICBpZiAob3Aud2F0Y2hwb2ludFNldCkKICAgICAgICAgICAgICAgICAgICAgb3Aud2F0Y2hw
b2ludFNldC0+aW52YWxpZGF0ZSh2bSwgUHV0VG9TY29wZUZpcmVEZXRhaWwodGhpcywgaWRlbnQp
KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3Auc3RydWN0dXJlKQotICAgICAgICAgICAgICAg
IG1ldGFkYXRhLnN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIG9wLnN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICBtZXRhZGF0YS5vcGVyYW5kID0gb3Aub3BlcmFuZDsKKyAgICAgICAgICAgICAgICBtZXRh
ZGF0YS5tX3N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIG9wLnN0cnVjdHVyZSk7CisgICAgICAgICAg
ICBtZXRhZGF0YS5tX29wZXJhbmQgPSBvcC5vcGVyYW5kOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIApAQCAtNzA2LDEzICs3MDYsMTMgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICAgICAgYm9vbCBzaG91bGRBbmFseXplID0gbV91bmxp
bmtlZENvZGUtPnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQoaW5z
dHJ1Y3Rpb25PZmZzZXQsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICAgICAgICAgIFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAKLSAgICAgICAgICAgIHN3aXRjaCAoYnl0
ZWNvZGUuZmxhZykgeworICAgICAgICAgICAgc3dpdGNoIChieXRlY29kZS5tX2ZsYWcpIHsKICAg
ICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUNsb3N1cmVWYXI6IHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUuaWRl
bnRpZmllcik7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbG9jYWxTY29wZURlcHRoID0gYnl0
ZWNvZGUuc3ltYm9sVGFibGVPclNjb3BlRGVwdGg7CisgICAgICAgICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1faWRlbnRpZmllcik7CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbG9jYWxTY29wZURlcHRoID0gYnl0ZWNvZGUubV9zeW1ib2xU
YWJsZU9yU2NvcGVEZXB0aDsKICAgICAgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCB0eXBlIHBy
b2ZpbGluZyBtYXkgYmUgcHJvZmlsaW5nIGVpdGhlciBhIEdldCBvciBhIFB1dCwgd2UgY2FuIGFs
d2F5cyBjbGFpbSBhIEdldCBiZWNhdXNlCiAgICAgICAgICAgICAgICAgLy8gd2UncmUgYWJzdHJh
Y3RseSAicmVhZCJpbmcgZnJvbSBhIEpTU2NvcGUuCi0gICAgICAgICAgICAgICAgUmVzb2x2ZU9w
IG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVj
KCksIGxvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGJ5dGVjb2RlLnJlc29sdmVU
eXBlLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKKyAgICAgICAgICAg
ICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgYnl0
ZWNvZGUubV9yZXNvbHZlVHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlv
bik7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAKICAgICAgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5
cGUgPT0gTW9kdWxlVmFyKQpAQCAtNzMzLDkgKzczMyw5IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2FsbHlSZXNvbHZlZDog
ewotICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4ID0gYnl0ZWNvZGUuc3ltYm9s
VGFibGVPclNjb3BlRGVwdGg7CisgICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxlSW5kZXgg
PSBieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoOwogICAgICAgICAgICAgICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50
KHN5bWJvbFRhYmxlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUuaWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5dGVjb2RlLm1faWRlbnRpZmll
cik7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJs
ZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBj
cmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJl
cGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCiAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJ
RCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgp
LCB2bSk7CkBAIC03NzAsMjQgKzc3MCwyNCBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBTCiAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRp
b25QYWlyLmZpcnN0OwogICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25Q
YWlyLnNlY29uZDsKIAotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLmZsYWcgPT0gUHJvZmlsZVR5
cGVCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KQorICAgICAgICAgICAgaWYgKGJ5dGVj
b2RlLm1fZmxhZyA9PSBQcm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQp
CiAgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0
dXJuU3RhdGVtZW50ID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQo
KTsKIAogICAgICAgICAgICAgaWYgKHNob3VsZEFuYWx5emUgJiYgaXNOZXdMb2NhdGlvbikKICAg
ICAgICAgICAgICAgICB2bS50eXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRpb24obG9jYXRp
b24pOwogCi0gICAgICAgICAgICBtZXRhZGF0YS50eXBlTG9jYXRpb24gPSBsb2NhdGlvbjsKKyAg
ICAgICAgICAgIG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uID0gbG9jYXRpb247CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAg
ICAgIGlmIChpbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4oKS5kZWJ1Z0hvb2tUeXBlID09IERpZFJl
YWNoQnJlYWtwb2ludCkKKyAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+YXM8T3BEZWJ1Zz4o
KS5tX2RlYnVnSG9va1R5cGUgPT0gRGlkUmVhY2hCcmVha3BvaW50KQogICAgICAgICAgICAgICAg
IG1faGFzRGVidWdnZXJTdGF0ZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OiB7Ci0gICAgICAgICAgICBpbnQg
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0Pigp
Lm51bVBhcmFtZXRlcnNUb1NraXA7CisgICAgICAgICAgICBpbnQgbnVtYmVyT2ZBcmd1bWVudHNU
b1NraXAgPSBpbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVSZXN0PigpLm1fbnVtUGFyYW1ldGVyc1Rv
U2tpcDsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZBcmd1bWVudHNUb1NraXAs
IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID49IDApOwogICAgICAgICAgICAgLy8gVGhpcyBpcyB1
c2VkIHdoZW4gcmVtYXRlcmlhbGl6aW5nIHRoZSByZXN0IHBhcmFtZXRlciBkdXJpbmcgT1NSIGV4
aXQgaW4gdGhlIEZUTCBKSVQuIik7CiAgICAgICAgICAgICBtX251bWJlck9mQXJndW1lbnRzVG9T
a2lwID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CkBAIC0xMDk1LDggKzEwOTUsOCBAQCB2b2lk
IENvZGVCbG9jazo6cHJvcGFnYXRlVHJhbnNpdGlvbnMoY29uCiAgICAgICAgICAgICBhdXRvIGlu
c3RydWN0aW9uID0gbV9pbnN0cnVjdGlvbnMtPmF0KHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
W2ldKTsKICAgICAgICAgICAgIGlmIChpbnN0cnVjdGlvbi0+aXM8T3BQdXRCeUlkPigpKSB7CiAg
ICAgICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBpbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlk
PigpLm1ldGFkYXRhKHRoaXMpOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVj
dHVyZUlEID0gbWV0YWRhdGEub2xkU3RydWN0dXJlOwotICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubmV3U3RydWN0dXJlOworICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmU7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5t
X25ld1N0cnVjdHVyZTsKICAgICAgICAgICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZUlEIHx8ICFu
ZXdTdHJ1Y3R1cmVJRCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPQpAQCAtMTIwNywxMSArMTIwNywxMSBAQCB2
b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgY29uc3QgVmVjdG9y
PEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+JiBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucyA9
IG1fdW5saW5rZWRDb2RlLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucygpOwogCiAgICAgYXV0
byBoYW5kbGVHZXRQdXRGcm9tU2NvcGUgPSBbXShhdXRvJiBtZXRhZGF0YSkgewotICAgICAgICBH
ZXRQdXRJbmZvIGdldFB1dEluZm8gPSBtZXRhZGF0YS5nZXRQdXRJbmZvOworICAgICAgICBHZXRQ
dXRJbmZvIGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dldFB1dEluZm87CiAgICAgICAgIGlmIChn
ZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsVmFyIHx8IGdldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIAogICAgICAgICAgICAg
fHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhciB8fCBnZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCkgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBnZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCkgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiYgc3Ry
dWN0dXJlID0gbWV0YWRhdGEuc3RydWN0dXJlOworICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0
cnVjdHVyZT4mIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fc3RydWN0dXJlOwogICAgICAgICBpZiAo
IXN0cnVjdHVyZSB8fCBIZWFwOjppc01hcmtlZChzdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQpAQCAtMTIyNCw5
ICsxMjI0LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZQogICAg
ICAgICBzd2l0Y2ggKGN1ckluc3RydWN0aW9uLT5vcGNvZGVJRCgpKSB7CiAgICAgICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkOiB7CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGN1ckluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWQ+KCkubWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBpZiAobWV0
YWRhdGEubW9kZSAhPSBHZXRCeUlkTW9kZTo6RGVmYXVsdCkKKyAgICAgICAgICAgIGlmIChtZXRh
ZGF0YS5tX21vZGUgIT0gR2V0QnlJZE1vZGU6OkRlZmF1bHQpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1v
ZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmU7CisgICAgICAgICAgICBTdHJ1Y3R1cmVJ
RCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0
cnVjdHVyZTsKICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJr
ZWQodm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQpAQCAtMTIzNiwzMCArMTIzNiwzMCBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElu
bGluZUNhY2hlCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OiB7
CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGN1ckluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCkubWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRT
dHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLnN0cnVjdHVyZTsKKyAgICAgICAgICAgIFN0cnVjdHVyZUlE
IG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmU7CiAgICAgICAgICAgICBpZiAo
IW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6OmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJs
ZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
RigiQ2xlYXJpbmcgTExJbnQgcHJvcGVydHkgYWNjZXNzLlxuIik7Ci0gICAgICAgICAgICBtZXRh
ZGF0YS5zdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgbWV0YWRhdGEub2Zmc2V0ID0gMDsKKyAg
ICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgIG1ldGFkYXRh
Lm1fb2Zmc2V0ID0gMDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2Ugb3BfcHV0X2J5X2lkOiB7CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGN1ckluc3Ry
dWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCkubWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBTdHJ1
Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm9sZFN0cnVjdHVyZTsKLSAgICAgICAg
ICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVyZUlEID0gbWV0YWRhdGEubmV3U3RydWN0dXJlOwot
ICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbWV0YWRhdGEuc3RydWN0dXJlQ2hh
aW4uZ2V0KCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFk
YXRhLm1fb2xkU3RydWN0dXJlOworICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJl
SUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZTsKKyAgICAgICAgICAgIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiA9IG1ldGFkYXRhLm1fc3RydWN0dXJlQ2hhaW4uZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoKCFvbGRTdHJ1Y3R1cmVJRCB8fCBIZWFwOjppc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlE
VGFibGUoKS5nZXQob2xkU3RydWN0dXJlSUQpKSkKICAgICAgICAgICAgICAgICAmJiAoIW5ld1N0
cnVjdHVyZUlEIHx8IEhlYXA6OmlzTWFya2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdl
dChuZXdTdHJ1Y3R1cmVJRCkpKQogICAgICAgICAgICAgICAgICYmICghY2hhaW4gfHwgSGVhcDo6
aXNNYXJrZWQoY2hhaW4pKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFy
aW5nIExMSW50IHB1dCB0cmFuc2l0aW9uLlxuIik7Ci0gICAgICAgICAgICBtZXRhZGF0YS5vbGRT
dHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgbWV0YWRhdGEub2Zmc2V0ID0gMDsKLSAgICAgICAg
ICAgIG1ldGFkYXRhLm5ld1N0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBtZXRhZGF0YS5zdHJ1
Y3R1cmVDaGFpbi5jbGVhcigpOworICAgICAgICAgICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmUg
PSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSAwOworICAgICAgICAgICAgbWV0
YWRhdGEubV9uZXdTdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1
cmVDaGFpbi5jbGVhcigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0MTgK
QEAgLTEyNjgsMTcgKzEyNjgsMTcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxp
bmVDYWNoZQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ugb3BfdG9fdGhpczogewog
ICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBjdXJJbnN0cnVjdGlvbi0+YXM8T3BUb1RoaXM+
KCkubWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBpZiAoIW1ldGFkYXRhLmNhY2hlZFN0cnVj
dHVyZSB8fCBIZWFwOjppc01hcmtlZChtZXRhZGF0YS5jYWNoZWRTdHJ1Y3R1cmUuZ2V0KCkpKQor
ICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZSB8fCBIZWFwOjppc01h
cmtlZChtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAg
ICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCB0b190aGlzIHdpdGggc3RydWN0dXJlICVw
LlxuIiwgbWV0YWRhdGEuY2FjaGVkU3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgICAgIG1ldGFk
YXRhLmNhY2hlZFN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICAgICAgbWV0YWRhdGEudG9UaGlz
U3RhdHVzID0gbWVyZ2UobWV0YWRhdGEudG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7
CisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHRvX3RoaXMgd2l0aCBz
dHJ1Y3R1cmUgJXAuXG4iLCBtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZS5nZXQoKSk7CisgICAg
ICAgICAgICBtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAg
bWV0YWRhdGEubV90b1RoaXNTdGF0dXMgPSBtZXJnZShtZXRhZGF0YS5tX3RvVGhpc1N0YXR1cywg
VG9UaGlzQ2xlYXJlZEJ5R0MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewogICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBj
dXJJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpLm1ldGFkYXRhKHRoaXMpOwotICAgICAg
ICAgICAgYXV0byYgY2FjaGVXcml0ZUJhcnJpZXIgPSBtZXRhZGF0YS5jYWNoZWRDYWxsZWU7Cisg
ICAgICAgICAgICBhdXRvJiBjYWNoZVdyaXRlQmFycmllciA9IG1ldGFkYXRhLm1fY2FjaGVkQ2Fs
bGVlOwogICAgICAgICAgICAgaWYgKCFjYWNoZVdyaXRlQmFycmllciB8fCBjYWNoZVdyaXRlQmFy
cmllci51bnZhbGlkYXRlZEdldCgpID09IEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0
cygpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgSlNDZWxsKiBjYWNoZWRG
dW5jdGlvbiA9IGNhY2hlV3JpdGVCYXJyaWVyLmdldCgpOwpAQCAtMTI5NCw3ICsxMjk0LDcgQEAg
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZQogICAgICAgICAgICAgLy8g
YXJlIGZvciBvdXRlciBmdW5jdGlvbnMsIGFuZCB3ZSByZWZlciB0byB0aG9zZSBmdW5jdGlvbnMg
c3Ryb25nbHksIGFuZCB0aGV5IHJlZmVyCiAgICAgICAgICAgICAvLyB0byB0aGUgc3ltYm9sIHRh
YmxlIHN0cm9uZ2x5LiBCdXQgaXQncyBuaWNlIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuCiAgICAg
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGN1ckluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29w
ZT4oKS5tZXRhZGF0YSh0aGlzKTsKLSAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3ltYm9s
VGFibGU+JiBzeW1ib2xUYWJsZSA9IG1ldGFkYXRhLnN5bWJvbFRhYmxlOworICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTeW1ib2xUYWJsZT4mIHN5bWJvbFRhYmxlID0gbWV0YWRhdGEubV9z
eW1ib2xUYWJsZTsKICAgICAgICAgICAgIGlmICghc3ltYm9sVGFibGUgfHwgSGVhcDo6aXNNYXJr
ZWQoc3ltYm9sVGFibGUuZ2V0KCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKQEAgLTE2NjUsMTIgKzE2NjUsMTIgQEAgdm9p
ZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbQogICAgIGF1dG8gaW5zdHJ1Y3Rp
b24gPSBtX2luc3RydWN0aW9ucy0+YXQoYnl0ZWNvZGVPZmZzZXQpOwogICAgIE9wQ2F0Y2ggb3Ag
PSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IG9wLm1l
dGFkYXRhKHRoaXMpOwotICAgIGlmICghIW1ldGFkYXRhLmJ1ZmZlcikgeworICAgIGlmICghIW1l
dGFkYXRhLm1fYnVmZmVyKSB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
ICAgICAgICAgZm9yIChhdXRvJiBwcm9maWxlIDogbV9jYXRjaFByb2ZpbGVzKSB7Ci0gICAgICAg
ICAgICBpZiAocHJvZmlsZS5nZXQoKSA9PSBtZXRhZGF0YS5idWZmZXIpIHsKKyAgICAgICAgICAg
IGlmIChwcm9maWxlLmdldCgpID09IG1ldGFkYXRhLm1fYnVmZmVyKSB7CiAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMTcxMyw3ICsxNzEzLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5lc3NJ
c0NvbQogICAgIC8vIHRoZSBjb21waWxlciB0aHJlYWQgcmVhZHMgZnVsbHkgaW5pdGlhbGl6ZWQg
ZGF0YS4KICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAKIAotICAgIG9wLm1ldGFkYXRhKHRo
aXMpLmJ1ZmZlciA9IHByb2ZpbGVzLmdldCgpOworICAgIG9wLm1ldGFkYXRhKHRoaXMpLm1fYnVm
ZmVyID0gcHJvZmlsZXMuZ2V0KCk7CiAKICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIobV9sb2NrKTsKQEAgLTI0OTEsNyArMjQ5MSw3IEBAIEFycmF5UHJvZmlsZSogQ29k
ZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUKICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5vcGNvZGVJ
RCgpKSB7CiAjZGVmaW5lIENBU0UoT3ApIFwKICAgICBjYXNlIE9wOjpvcGNvZGVJRDogXAotICAg
ICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlzKS5hcnJheVBy
b2ZpbGU7CisgICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRo
aXMpLm1fYXJyYXlQcm9maWxlOwogCiAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJP
RklMRShDQVNFKQogI3VuZGVmIENBU0UKQEAgLTI0OTksOCArMjQ5OSw4IEBAIEFycmF5UHJvZmls
ZSogQ29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUKICAgICBjYXNlIE9wR2V0QnlJZDo6b3Bjb2Rl
SUQ6IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+
KCk7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEodGhpcyk7Ci0g
ICAgICAgIGlmIChtZXRhZGF0YS5tb2RlID09IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybiAmbWV0YWRhdGEubW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5h
cnJheVByb2ZpbGU7CisgICAgICAgIGlmIChtZXRhZGF0YS5tX21vZGUgPT0gR2V0QnlJZE1vZGU6
OkFycmF5TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tX21vZGVNZXRhZGF0
YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKQEAgLTI2ODYsMjIgKzI2ODYsMjIgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGlm
eUxleGljYWxCaW5kaW5nU2hhZAogICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+
KCk7CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHRoaXMp
OwotICAgICAgICAgICAgUmVzb2x2ZVR5cGUgb3JpZ2luYWxSZXNvbHZlVHlwZSA9IG1ldGFkYXRh
LnJlc29sdmVUeXBlOworICAgICAgICAgICAgUmVzb2x2ZVR5cGUgb3JpZ2luYWxSZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAgICAgICAgICBpZiAob3JpZ2luYWxSZXNv
bHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBvcmlnaW5hbFJlc29sdmVUeXBlID09IEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICAgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS52YXIpOworICAgICAgICAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zh
cik7CiAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhpZGVudC5pbXBsKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIHBhc3MgSlNHbG9iYWxMZXhpY2FsU2NvcGUgYXMgYSBz
dGFydCBwb2ludCBvZiB0aGUgc2NvcGUgY2hhaW4uCiAgICAgICAgICAgICAgICAgICAgIC8vIEl0
IHNob3VsZCBpbW1lZGlhdGVseSBmaW5kIHRoZSBsZXhpY2FsIGJpbmRpbmcgYmVjYXVzZSB0aGF0
J3MgdGhlIHJlYXNvbiB3aHkgd2UgcGVyZm9ybSB0aGlzIHJld3JpdGluZyBub3cuCi0gICAgICAg
ICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2ds
b2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5sb2NhbFNjb3BlRGVwdGgsIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsU2NvcGUoKSwgaWRlbnQsIEdldCwgYnl0ZWNvZGUucmVzb2x2ZVR5cGUs
IEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pOworICAgICAgICAgICAgICAg
ICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgYnl0ZWNvZGUubV9sb2NhbFNjb3BlRGVwdGgsIGdsb2JhbE9iamVj
dC0+Z2xvYmFsU2NvcGUoKSwgaWRlbnQsIEdldCwgYnl0ZWNvZGUubV9yZXNvbHZlVHlwZSwgSW5p
dGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CiAgICAgICAgICAgICAgICAgICAg
IHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQob3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyB8
fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICAgICAgICAgICAgICBtZXRh
ZGF0YS5yZXNvbHZlVHlwZSA9IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKG9yaWdpbmFsUmVzb2x2
ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBHbG9iYWxM
ZXhpY2FsVmFyOwotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5sb2NhbFNjb3BlRGVwdGgg
PSAwOworICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlID0gbmVlZHNW
YXJJbmplY3Rpb25DaGVja3Mob3JpZ2luYWxSZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXI7CisgICAgICAgICAgICAg
ICAgICAgIG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoID0gMDsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFvcC5sZXhpY2FsRW52aXJvbm1lbnQpOwotICAgICAgICAgICAgICAgICAgICBK
U1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9j
ayhtZXRhZGF0YS5yZXNvbHZlVHlwZSwgdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIEpTU2Nv
cGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKG1l
dGFkYXRhLm1fcmVzb2x2ZVR5cGUsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Y29uc3RhbnRTY29wZSA9PSBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlKCkpOwotICAgICAgICAg
ICAgICAgICAgICBtZXRhZGF0YS5jb25zdGFudFNjb3BlLnNldCh2bSwgdGhpcywgY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKENvZGVCbG9ja0ludGVybmFs
Ojp2ZXJib3NlLCAiUmV3cml0ZSBvcF9yZXNvbHZlX3Njb3BlIGZyb20gIiwgb3JpZ2luYWxSZXNv
bHZlVHlwZSwgIiB0byAiLCBtZXRhZGF0YS5yZXNvbHZlVHlwZSk7CisgICAgICAgICAgICAgICAg
ICAgIG1ldGFkYXRhLm1fY29uc3RhbnRTY29wZS5zZXQodm0sIHRoaXMsIGNvbnN0YW50U2NvcGUp
OworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihDb2RlQmxvY2tJbnRlcm5hbDo6dmVy
Ym9zZSwgIlJld3JpdGUgb3BfcmVzb2x2ZV9zY29wZSBmcm9tICIsIG9yaWdpbmFsUmVzb2x2ZVR5
cGUsICIgdG8gIiwgbWV0YWRhdGEubV9yZXNvbHZlVHlwZSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzEwLDE5ICsyNzEwLDE5IEBA
IHZvaWQgQ29kZUJsb2NrOjpub3RpZnlMZXhpY2FsQmluZGluZ1NoYWQKICAgICAgICAgY2FzZSBv
cF9nZXRfZnJvbV9zY29wZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBSZXNvbHZlVHlwZSBvcmlnaW5h
bFJlc29sdmVUeXBlID0gbWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgICAg
ICAgICAgUmVzb2x2ZVR5cGUgb3JpZ2luYWxSZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpOwogICAgICAgICAgICAgaWYgKG9yaWdpbmFsUmVzb2x2ZVR5cGUg
PT0gR2xvYmFsUHJvcGVydHkgfHwgb3JpZ2luYWxSZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUudmFyKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwogICAg
ICAgICAgICAgICAgIGlmIChzZXQuY29udGFpbnMoaWRlbnQuaW1wbCgpKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBwYXNzIEpTR2xvYmFsTGV4aWNhbFNjb3BlIGFzIGEgc3RhcnQgcG9p
bnQgb2YgdGhlIHNjb3BlIGNoYWluLgogICAgICAgICAgICAgICAgICAgICAvLyBJdCBzaG91bGQg
aW1tZWRpYXRlbHkgZmluZCB0aGUgbGV4aWNhbCBiaW5kaW5nIGJlY2F1c2UgdGhhdCdzIHRoZSBy
ZWFzb24gd2h5IHdlIHBlcmZvcm0gdGhpcyByZXdyaXRpbmcgbm93LgotICAgICAgICAgICAgICAg
ICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgYnl0ZWNvZGUubG9jYWxTY29wZURlcHRoLCBnbG9iYWxPYmplY3Qt
Pmdsb2JhbFNjb3BlKCksIGlkZW50LCBHZXQsIGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5tX2xvY2FsU2NvcGVEZXB0aCwgZ2xvYmFs
T2JqZWN0LT5nbG9iYWxTY29wZSgpLCBpZGVudCwgR2V0LCBieXRlY29kZS5tX2dldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CiAg
ICAgICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQob3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcyB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXIpOwotICAgICAg
ICAgICAgICAgICAgICBtZXRhZGF0YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhieXRlY29kZS5n
ZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKG9yaWdpbmFs
UmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgOiBH
bG9iYWxMZXhpY2FsVmFyLCBieXRlY29kZS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEud2F0Y2hwb2ludFNldCA9IG9wLndhdGNo
cG9pbnRTZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9wZXJhbmQgPSBvcC5vcGVy
YW5kOwotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihDb2RlQmxvY2tJbnRlcm5hbDo6
dmVyYm9zZSwgIlJld3JpdGUgb3BfZ2V0X2Zyb21fc2NvcGUgZnJvbSAiLCBvcmlnaW5hbFJlc29s
dmVUeXBlLCAiIHRvICIsIG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oYnl0ZWNv
ZGUubV9nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKG9y
aWdpbmFsUmVzb2x2ZVR5cGUpID8gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MgOiBHbG9iYWxMZXhpY2FsVmFyLCBieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpOworICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQg
PSBvcC53YXRjaHBvaW50U2V0OworICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX29wZXJh
bmQgPSBvcC5vcGVyYW5kOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihDb2RlQmxv
Y2tJbnRlcm5hbDo6dmVyYm9zZSwgIlJld3JpdGUgb3BfZ2V0X2Zyb21fc2NvcGUgZnJvbSAiLCBv
cmlnaW5hbFJlc29sdmVUeXBlLCAiIHRvICIsIG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZl
VHlwZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTI3MzEsMjUgKzI3MzEsMjUgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGlmeUxleGlj
YWxCaW5kaW5nU2hhZAogICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewogICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAg
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKHRoaXMpOwotICAgICAg
ICAgICAgUmVzb2x2ZVR5cGUgb3JpZ2luYWxSZXNvbHZlVHlwZSA9IG1ldGFkYXRhLmdldFB1dElu
Zm8ucmVzb2x2ZVR5cGUoKTsKKyAgICAgICAgICAgIFJlc29sdmVUeXBlIG9yaWdpbmFsUmVzb2x2
ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICAgICAgICAg
IGlmIChvcmlnaW5hbFJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IG9yaWdpbmFsUmVz
b2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5dGVjb2Rl
LnZhcik7CisgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlm
aWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKGlk
ZW50LmltcGwoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcGFzcyBKU0dsb2JhbExl
eGljYWxTY29wZSBhcyBhIHN0YXJ0IHBvaW50IG9mIHRoZSBzY29wZSBjaGFpbi4KICAgICAgICAg
ICAgICAgICAgICAgLy8gSXQgc2hvdWxkIGltbWVkaWF0ZWx5IGZpbmQgdGhlIGxleGljYWwgYmlu
ZGluZyBiZWNhdXNlIHRoYXQncyB0aGUgcmVhc29uIHdoeSB3ZSBwZXJmb3JtIHRoaXMgcmV3cml0
aW5nIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJz
dHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2RlLnN5bWJv
bFRhYmxlT3JTY29wZURlcHRoLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlKCksIGlkZW50LCBQ
dXQsIGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSwgYnl0ZWNvZGUuZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIFJlc29sdmVPcCBv
cCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
LCBieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLCBnbG9iYWxPYmplY3QtPmdsb2Jh
bFNjb3BlKCksIGlkZW50LCBQdXQsIGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
LCBieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwogICAgICAgICAg
ICAgICAgICAgICBzY29wZS5yZWxlYXNlQXNzZXJ0Tm9FeGNlcHRpb24oKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0gRHlu
YW1pYyk7CiAKICAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBv
cC50eXBlOwotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS53YXRjaHBvaW50U2V0ID0gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0ID0gbnVs
bHB0cjsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVUeXBlID0gbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3Mob3JpZ2luYWxSZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtZXRhZGF0YS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCA9IG9wLndhdGNocG9p
bnRTZXQ7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbWV0YWRh
dGEuZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oYnl0ZWNvZGUuZ2V0UHV0SW5mby5yZXNvbHZlTW9k
ZSgpLCByZXNvbHZlVHlwZSwgYnl0ZWNvZGUuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9wZXJhbmQgPSBvcC5vcGVyYW5kOwot
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihDb2RlQmxvY2tJbnRlcm5hbDo6dmVyYm9z
ZSwgIlJld3JpdGUgb3BfcHV0X3RvX3Njb3BlIGZyb20gIiwgb3JpZ2luYWxSZXNvbHZlVHlwZSwg
IiB0byAiLCBtZXRhZGF0YS5nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkpOworICAgICAgICAgICAg
ICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKGJ5dGVjb2RlLm1fZ2V0
UHV0SW5mby5yZXNvbHZlTW9kZSgpLCByZXNvbHZlVHlwZSwgYnl0ZWNvZGUubV9nZXRQdXRJbmZv
LmluaXRpYWxpemF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9v
cGVyYW5kID0gb3Aub3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoQ29k
ZUJsb2NrSW50ZXJuYWw6OnZlcmJvc2UsICJSZXdyaXRlIG9wX3B1dF90b19zY29wZSBmcm9tICIs
IG9yaWdpbmFsUmVzb2x2ZVR5cGUsICIgdG8gIiwgbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMjg3OSw3ICsyODc5LDcgQEAgVmFsdWVQcm9maWxlKiBDb2RlQmxvY2s6OnRy
eUdldFZhbHVlUHJvZgogCiAjZGVmaW5lIENBU0UoT3ApIFwKICAgICBjYXNlIE9wOjpvcGNvZGVJ
RDogXAotICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0YSh0aGlz
KS5wcm9maWxlOworICAgICAgICByZXR1cm4gJmluc3RydWN0aW9uLT5hczxPcD4oKS5tZXRhZGF0
YSh0aGlzKS5tX3Byb2ZpbGU7CiAKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVf
UFJPRklMRShDQVNFKQogCkBAIC0zMDE4LDE1ICszMDE4LDE1IEBAIEFyaXRoUHJvZmlsZSogQ29k
ZUJsb2NrOjphcml0aFByb2ZpbGVGb3IKIHsKICAgICBzd2l0Y2ggKHBjLT5vcGNvZGVJRCgpKSB7
CiAgICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wTmVnYXRlPigp
Lm1ldGFkYXRhKHRoaXMpLmFyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BO
ZWdhdGU+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9hZGQ6
Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wQWRkPigpLm1ldGFkYXRhKHRoaXMpLmFyaXRoUHJv
ZmlsZTsKKyAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCkubWV0YWRhdGEodGhpcykubV9h
cml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9tdWw6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9w
TXVsPigpLm1ldGFkYXRhKHRoaXMpLmFyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuICZwYy0+
YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9z
dWI6Ci0gICAgICAgIHJldHVybiAmcGMtPmFzPE9wU3ViPigpLm1ldGFkYXRhKHRoaXMpLmFyaXRo
UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+KCkubWV0YWRhdGEodGhpcyku
bV9hcml0aFByb2ZpbGU7CiAgICAgY2FzZSBvcF9kaXY6Ci0gICAgICAgIHJldHVybiAmcGMtPmFz
PE9wRGl2PigpLm1ldGFkYXRhKHRoaXMpLmFyaXRoUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuICZw
Yy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykubV9hcml0aFByb2ZpbGU7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzA2NiwxMyArMzA2NiwxMyBAQCB2b2lkIENv
ZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93KTsKICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxv
dz4oKTsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSh0aGlzKTsK
LSAgICAgICAgaW50IGJhc2ljQmxvY2tTdGFydE9mZnNldCA9IGJ5dGVjb2RlLnRleHRPZmZzZXQ7
CisgICAgICAgIGludCBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBieXRlY29kZS5tX3RleHRPZmZz
ZXQ7CiAgICAgICAgIGludCBiYXNpY0Jsb2NrRW5kT2Zmc2V0OwogICAgICAgICBpZiAoaSArIDEg
PCBvZmZzZXRzTGVuZ3RoKSB7CiAgICAgICAgICAgICBzaXplX3QgZW5kSWR4ID0gYnl0ZWNvZGVP
ZmZzZXRzW2kgKyAxXTsKICAgICAgICAgICAgIGF1dG8gZW5kSW5zdHJ1Y3Rpb24gPSBtX2luc3Ry
dWN0aW9ucy0+YXQoZW5kSWR4KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVuZEluc3Ry
dWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3Byb2ZpbGVfY29udHJvbF9mbG93KTsKLSAgICAgICAg
ICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBlbmRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29u
dHJvbEZsb3c+KCkudGV4dE9mZnNldCAtIDE7CisgICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zm
c2V0ID0gZW5kSW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpLm1fdGV4dE9m
ZnNldCAtIDE7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBiYXNpY0Jsb2NrRW5kT2Zm
c2V0ID0gbV9zb3VyY2VPZmZzZXQgKyBvd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+c291cmNlKCku
bGVuZ3RoKCkgLSAxOyAvLyBPZmZzZXQgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlLgogICAgICAg
ICAgICAgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0ID0gc3RkOjptaW4oYmFzaWNCbG9ja1N0YXJ0T2Zm
c2V0LCBiYXNpY0Jsb2NrRW5kT2Zmc2V0KTsgLy8gU29tZSBzdGFydCBvZmZzZXRzIG1heSBiZSBh
dCB0aGUgY2xvc2luZyBicmFjZSwgZW5zdXJlIGl0IGlzIHRoZSBvZmZzZXQgYmVmb3JlLgpAQCAt
MzA5OCw3ICszMDk4LDcgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFy
aQogICAgICAgICAvLyBtOiBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdwogICAgICAgICBpZiAoYmFz
aWNCbG9ja0VuZE9mZnNldCA8IGJhc2ljQmxvY2tTdGFydE9mZnNldCkgewogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaSArIDEgPCBvZmZzZXRzTGVuZ3RoKTsgLy8gV2Ugc2hvdWxkIG5ldmVy
IGVuY291bnRlciBkdW1teSBibG9ja3MgYXQgdGhlIGVuZCBvZiBhIENvZGVCbG9jay4KLSAgICAg
ICAgICAgIG1ldGFkYXRhLmJhc2ljQmxvY2tMb2NhdGlvbiA9IHZtKCktPmNvbnRyb2xGbG93UHJv
ZmlsZXIoKS0+ZHVtbXlCYXNpY0Jsb2NrKCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2Jhc2lj
QmxvY2tMb2NhdGlvbiA9IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+ZHVtbXlCYXNpY0Js
b2NrKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0zMTIyLDcgKzMx
MjIsNyBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiAgICAgICAg
IGZvciAoY29uc3QgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4mIGV4ZWN1dGFibGUg
OiBtX2Z1bmN0aW9uRXhwcnMpCiAgICAgICAgICAgICBpbnNlcnRGdW5jdGlvbkdhcHMoZXhlY3V0
YWJsZSk7CiAKLSAgICAgICAgbWV0YWRhdGEuYmFzaWNCbG9ja0xvY2F0aW9uID0gYmFzaWNCbG9j
a0xvY2F0aW9uOworICAgICAgICBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbiA9IGJhc2lj
QmxvY2tMb2NhdGlvbjsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMjM5OTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaFZhbHVlUHJv
ZmlsZShjb25zCiAKICAgICBpZiAobV9tZXRhZGF0YSkgewogI2RlZmluZSBWSVNJVChfX29wKSBc
Ci0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1
bmMobWV0YWRhdGEucHJvZmlsZSk7IH0pOworICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4o
WyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLm1fcHJvZmlsZSk7IH0pOwogCiAg
ICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX1ZBTFVFX1BST0ZJTEUoVklTSVQpCiAKQEAgLTUz
LDEyICs1MywxMiBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaEFycmF5UHJvZmlsZShjb25zCiB7
CiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICAgICAgICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxPcEdl
dEJ5SWQ+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsKLSAgICAgICAgICAgIGlmIChtZXRhZGF0YS5t
b2RlID09IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkKLSAgICAgICAgICAgICAgICBmdW5jKG1l
dGFkYXRhLm1vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKKyAgICAg
ICAgICAgIGlmIChtZXRhZGF0YS5tX21vZGUgPT0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKQor
ICAgICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhN
b2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIH0pOwogCiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwK
LSAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVu
YyhtZXRhZGF0YS5hcnJheVByb2ZpbGUpOyB9KTsKKyAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9f
b3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSk7
IH0pOwogCiAgICAgICAgIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUoVklTSVQp
CiAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hBcnJheUFsbG9jYXRp
b25QcgogewogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKLSAg
ICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyht
ZXRhZGF0YS5hcnJheUFsbG9jYXRpb25Qcm9maWxlKTsgfSk7CisgICAgbV9tZXRhZGF0YS0+Zm9y
RWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEubV9hcnJheUFs
bG9jYXRpb25Qcm9maWxlKTsgfSk7CiAKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJS
QVlfQUxMT0NBVElPTl9QUk9GSUxFKFZJU0lUKQogCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpmb3JFYWNoT2JqZWN0QWxsb2NhdGlvblAKIHsKICAgICBpZiAobV9tZXRhZGF0YSkg
ewogI2RlZmluZSBWSVNJVChfX29wKSBcCi0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihb
Jl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEub2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUpOyB9KTsKKyAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRh
dGEpIHsgZnVuYyhtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlKTsgfSk7CiAKICAg
ICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfT0JKRUNUX0FMTE9DQVRJT05fUFJPRklMRShWSVNJ
VCkKIApAQCAtOTcsNyArOTcsNyBAQCB2b2lkIENvZGVCbG9jazo6Zm9yRWFjaExMSW50Q2FsbExp
bmtJbmZvCiB7CiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICNkZWZpbmUgVklTSVQoX19vcCkgXAot
ICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5j
KG1ldGFkYXRhLmNhbGxMaW5rSW5mbyk7IH0pOworICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19v
cD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvKTsg
fSk7CiAKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfTExJTlRfQ0FMTF9MSU5LX0lORk8o
VklTSVQpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDIzOTk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDEzICs2
NCwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAg
IGF1dG8mIG1ldGFkYXRhID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKS5tZXRhZGF0YShw
cm9maWxlZEJsb2NrKTsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QganVzdCBiYWls
IGlmIHdlIHNlZSBhIGdldF9ieV9pZF9wcm90b19sb2FkLgogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MDM5Ci0gICAgICAgIGlmIChtZXRhZGF0
YS5tb2RlICE9IEdldEJ5SWRNb2RlOjpEZWZhdWx0KQorICAgICAgICBpZiAobWV0YWRhdGEubV9t
b2RlICE9IEdldEJ5SWRNb2RlOjpEZWZhdWx0KQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwotICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1ldGFk
YXRhLm1vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmU7CisgICAgICAgIHN0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZGlyZWN0OgotICAgICAg
ICBzdHJ1Y3R1cmVJRCA9IGluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkubWV0YWRh
dGEocHJvZmlsZWRCbG9jaykuc3RydWN0dXJlOworICAgICAgICBzdHJ1Y3R1cmVJRCA9IGluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykubV9z
dHJ1Y3R1cmU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ugb3BfdHJ5X2dldF9ieV9pZDogewog
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBqdXN0IGJhaWwgaWYgd2Ugc2VlIGEgdHJ5
X2dldF9ieV9pZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludFBy
b3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludFByb3RvdHlwZUxvYWRBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAyMzk5OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDkgKzU5LDkgQEAgdm9pZCBMTElu
dFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZQogCiB2b2lkIExMSW50UHJvdG90eXBlTG9h
ZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludDo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZShPcEdl
dEJ5SWQ6Ok1ldGFkYXRhJiBtZXRhZGF0YSkKIHsKLSAgICBtZXRhZGF0YS5tb2RlID0gR2V0QnlJ
ZE1vZGU6OkRlZmF1bHQ7Ci0gICAgbWV0YWRhdGEubW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLmNh
Y2hlZE9mZnNldCA9IDA7Ci0gICAgbWV0YWRhdGEubW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0
cnVjdHVyZSA9IDA7CisgICAgbWV0YWRhdGEubV9tb2RlID0gR2V0QnlJZE1vZGU6OkRlZmF1bHQ7
CisgICAgbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0ID0g
MDsKKyAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmUgPSAw
OwogfQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVt
cFRhcmdldHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMuaAkocmV2aXNpb24gMjM5OTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Q0FTRV9PUChPcEpiZWxvd2VxKSBcCiAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7IFwKICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsgXAotICAg
ICAgICBhdXRvJiB0YWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGJ5dGVjb2RlLnRh
YmxlSW5kZXgpOyBcCisgICAgICAgIGF1dG8mIHRhYmxlID0gY29kZUJsb2NrLT5zd2l0Y2hKdW1w
VGFibGUoYnl0ZWNvZGUubV90YWJsZUluZGV4KTsgXAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKTsgaS0tOykgXAogICAgICAgICAgICAgU1dJVENI
X0NBU0UodGFibGUuYnJhbmNoT2Zmc2V0c1tpXSk7IFwKICAgICAgICAgU1dJVENIX0RFRkFVTFRf
T0ZGU0VUKE9wU3dpdGNoSW1tKTsgXApAQCAtNjYsNyArNjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB9IFwKICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7IFwKICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7IFwKLSAgICAgICAgYXV0byYg
dGFibGUgPSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShieXRlY29kZS50YWJsZUluZGV4KTsg
XAorICAgICAgICBhdXRvJiB0YWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGJ5dGVj
b2RlLm1fdGFibGVJbmRleCk7IFwKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdGFibGUuYnJh
bmNoT2Zmc2V0cy5zaXplKCk7IGktLTspIFwKICAgICAgICAgICAgIFNXSVRDSF9DQVNFKHRhYmxl
LmJyYW5jaE9mZnNldHNbaV0pOyBcCiAgICAgICAgIFNXSVRDSF9ERUZBVUxUX09GRlNFVChPcFN3
aXRjaENoYXIpOyBcCkBAIC03NCw3ICs3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0gXAog
ICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzogeyBcCiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7IFwKLSAgICAgICAgYXV0byYgdGFibGUg
PSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShieXRlY29kZS50YWJsZUluZGV4KTsg
XAorICAgICAgICBhdXRvJiB0YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGJ5dGVjb2RlLm1fdGFibGVJbmRleCk7IFwKICAgICAgICAgYXV0byBpdGVyID0gdGFibGUub2Zm
c2V0VGFibGUuYmVnaW4oKTsgXAogICAgICAgICBhdXRvIGVuZCA9IHRhYmxlLm9mZnNldFRhYmxl
LmVuZCgpOyBcCiAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSBcCkBAIC0xMDgs
NyArMTA4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEJsb2NrPgogaW5saW5l
IGludCBqdW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24oQmxvY2smJiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgcmV0dXJuIGp1bXBUYXJnZXRGb3JJbnN0cnVj
dGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIHJldHVy
biBqdW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaywgdHlwZW5hbWUgRnVu
Y3Rpb24+CkBAIC0xMjMsNyArMTIzLDcgQEAgaW5saW5lIHZvaWQgZXh0cmFjdFN0b3JlZEp1bXBU
YXJnZXRzRm9ySQogICAgIGZ1bmN0aW9uKF9fdGFyZ2V0KQogCiAjZGVmaW5lIFNXSVRDSF9ERUZB
VUxUX09GRlNFVChfX29wKSBcCi0gICAgZnVuY3Rpb24oanVtcFRhcmdldEZvckluc3RydWN0aW9u
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpKSBcCisgICAg
ZnVuY3Rpb24oanVtcFRhcmdldEZvckluc3RydWN0aW9uKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCkpIFwKIAogU1dJVENIX0pNUChDQVNFX09QLCBTV0lU
Q0hfQ0FTRSwgU1dJVENIX0RFRkFVTFRfT0ZGU0VUKQogCkBAIC0xNTQsNyArMTU0LDcgQEAgaW5s
aW5lIHZvaWQgdXBkYXRlU3RvcmVkSnVtcFRhcmdldHNGb3JJbgogCiAjZGVmaW5lIFNXSVRDSF9E
RUZBVUxUX09GRlNFVChfX29wKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGludDMyX3QgdGFyZ2V0
ID0ganVtcFRhcmdldEZvckluc3RydWN0aW9uKGNvZGVCbG9ja09ySGFzaE1hcCwgaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOyBcCisgICAgICAgIGludDMyX3QgdGFyZ2V0ID0g
anVtcFRhcmdldEZvckluc3RydWN0aW9uKGNvZGVCbG9ja09ySGFzaE1hcCwgaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7IFwKICAgICAgICAgaW50MzJfdCBuZXdUYXJnZXQg
PSBmdW5jdGlvbih0YXJnZXQpOyBcCiAgICAgICAgIGluc3RydWN0aW9uLT5jYXN0PF9fb3A+KCkt
PnNldERlZmF1bHRPZmZzZXQoQm91bmRMYWJlbChuZXdUYXJnZXQpLCBbJl0oKSB7IFwKICAgICAg
ICAgICAgIGNvZGVCbG9jay0+YWRkT3V0T2ZMaW5lSnVtcFRhcmdldChmaW5hbE9mZnNldCArIGlu
c3RydWN0aW9uLm9mZnNldCgpLCBuZXdUYXJnZXQpOyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAyMzk5OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC01NCwxMyArNTQsMTMgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRnJvbQogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZEJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGlu
c3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jayk7CiAKLSAg
ICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm9sZFN0cnVjdHVyZTsKKyAgICBT
dHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlOwogICAgIGlm
ICghc3RydWN0dXJlSUQpCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uaGVhcC5zdHJ1Y3R1cmVJ
RFRhYmxlKCkuZ2V0KHN0cnVjdHVyZUlEKTsKIAotICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubmV3U3RydWN0dXJlOworICAgIFN0cnVjdHVyZUlEIG5ld1N0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubV9uZXdTdHJ1Y3R1cmU7CiAgICAgaWYgKCFuZXdTdHJ1Y3R1cmVJRCkg
ewogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJl
bnRseSh1aWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKQEAgLTc4LDcg
Kzc4LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAKICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0gICAgaWYgKCEobWV0YWRhdGEuZmxh
Z3MgJiBQdXRCeUlkSXNEaXJlY3QpKSB7CisgICAgaWYgKCEobWV0YWRhdGEubV9mbGFncyAmIFB1
dEJ5SWRJc0RpcmVjdCkpIHsKICAgICAgICAgY29uZGl0aW9uU2V0ID0KICAgICAgICAgICAgIGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5U2V0dGVyTWlzc0NvbmN1cnJlbnRseSgKICAgICAg
ICAgICAgICAgICB2bSwgcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSwg
dWlkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjM5OTkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE0NSw3ICsxNDUsNyBAQCBzdGF0aWMgdm9pZCBkdW1wTGluZUNvbHVtbkVudHJ5KHNpemVfdCBp
CiAgICAgY29uc3QgYXV0byBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uU3RyZWFtLmF0KGluc3Ry
dWN0aW9uT2Zmc2V0KTsKICAgICBjb25zdCBjaGFyKiBldmVudCA9ICIiOwogICAgIGlmIChpbnN0
cnVjdGlvbi0+aXM8T3BEZWJ1Zz4oKSkgewotICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5h
czxPcERlYnVnPigpLmRlYnVnSG9va1R5cGUpIHsKKyAgICAgICAgc3dpdGNoIChpbnN0cnVjdGlv
bi0+YXM8T3BEZWJ1Zz4oKS5tX2RlYnVnSG9va1R5cGUpIHsKICAgICAgICAgY2FzZSBXaWxsRXhl
Y3V0ZVByb2dyYW06IGV2ZW50ID0gIiBXaWxsRXhlY3V0ZVByb2dyYW0iOyBicmVhazsKICAgICAg
ICAgY2FzZSBEaWRFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIERpZEV4ZWN1dGVQcm9ncmFtIjsg
YnJlYWs7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6IGV2ZW50ID0gIiBEaWRFbnRl
ckNhbGxGcmFtZSI7IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIzOTk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCiAgKgpAQCAtMTM4OSwxMyArMTM4OSwx
MyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiBib29sIEJ5dGVj
b2RlR2VuZXJhdG9yOjpmdXNlQ29tcGFyZUFuZEp1bXAoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwm
IHRhcmdldCwgYm9vbCBzd2FwT3BlcmFuZHMpCiB7CiAgICAgYXV0byBiaW5vcCA9IG1fbGFzdElu
c3RydWN0aW9uLT5hczxCaW5PcD4oKTsKLSAgICBpZiAoY29uZC0+aW5kZXgoKSA9PSBiaW5vcC5k
c3Qub2Zmc2V0KCkgJiYgY29uZC0+aXNUZW1wb3JhcnkoKSAmJiAhY29uZC0+cmVmQ291bnQoKSkg
eworICAgIGlmIChjb25kLT5pbmRleCgpID09IGJpbm9wLm1fZHN0Lm9mZnNldCgpICYmIGNvbmQt
PmlzVGVtcG9yYXJ5KCkgJiYgIWNvbmQtPnJlZkNvdW50KCkpIHsKICAgICAgICAgcmV3aW5kKCk7
CiAKICAgICAgICAgaWYgKHN3YXBPcGVyYW5kcykKLSAgICAgICAgICAgIHN0ZDo6c3dhcChiaW5v
cC5saHMsIGJpbm9wLnJocyk7CisgICAgICAgICAgICBzdGQ6OnN3YXAoYmlub3AubV9saHMsIGJp
bm9wLm1fcmhzKTsKIAotICAgICAgICBKbXBPcDo6ZW1pdCh0aGlzLCBiaW5vcC5saHMsIGJpbm9w
LnJocywgdGFyZ2V0LmJpbmQodGhpcykpOworICAgICAgICBKbXBPcDo6ZW1pdCh0aGlzLCBiaW5v
cC5tX2xocywgYmlub3AubV9yaHMsIHRhcmdldC5iaW5kKHRoaXMpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MDUsMTAgKzE0MDUsMTAgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVW5hcnlPcCwgdHlwZW5hbWUgSm1wTwogYm9vbCBCeXRlY29kZUdl
bmVyYXRvcjo6ZnVzZVRlc3RBbmRKbXAoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCkK
IHsKICAgICBhdXRvIHVub3AgPSBtX2xhc3RJbnN0cnVjdGlvbi0+YXM8VW5hcnlPcD4oKTsKLSAg
ICBpZiAoY29uZC0+aW5kZXgoKSA9PSB1bm9wLmRzdC5vZmZzZXQoKSAmJiBjb25kLT5pc1RlbXBv
cmFyeSgpICYmICFjb25kLT5yZWZDb3VudCgpKSB7CisgICAgaWYgKGNvbmQtPmluZGV4KCkgPT0g
dW5vcC5tX2RzdC5vZmZzZXQoKSAmJiBjb25kLT5pc1RlbXBvcmFyeSgpICYmICFjb25kLT5yZWZD
b3VudCgpKSB7CiAgICAgICAgIHJld2luZCgpOwogCi0gICAgICAgIEptcE9wOjplbWl0KHRoaXMs
IHVub3Aub3BlcmFuZCwgdGFyZ2V0LmJpbmQodGhpcykpOworICAgICAgICBKbXBPcDo6ZW1pdCh0
aGlzLCB1bm9wLm1fb3BlcmFuZCwgdGFyZ2V0LmJpbmQodGhpcykpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcwOSw0OSArMTcwOSw0OSBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsCiB7CiAgICAgaWYgKG1fbGFz
dEluc3RydWN0aW9uLT5pczxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0
SW5zdHJ1Y3Rpb24tPmFzPE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9
PSBvcC5kc3Qub2Zmc2V0KCkKKyAgICAgICAgaWYgKHNyYzEtPmluZGV4KCkgPT0gb3AubV9kc3Qu
b2Zmc2V0KCkKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKICAgICAgICAgICAg
ICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRleCgpKQog
ICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgo
KSkuZ2V0KCkuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9
IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmdl
dCgpKS0+dHJ5R2V0VmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAidW5kZWZpbmVk
IikgewogICAgICAgICAgICAgICAgIHJld2luZCgpOwotICAgICAgICAgICAgICAgIE9wSXNVbmRl
ZmluZWQ6OmVtaXQodGhpcywgZHN0LCBvcC52YWx1ZSk7CisgICAgICAgICAgICAgICAgT3BJc1Vu
ZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBkc3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gImJvb2xl
YW4iKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7Ci0gICAgICAgICAgICAgICAgT3BJc0Jv
b2xlYW46OmVtaXQodGhpcywgZHN0LCBvcC52YWx1ZSk7CisgICAgICAgICAgICAgICAgT3BJc0Jv
b2xlYW46OmVtaXQodGhpcywgZHN0LCBvcC5tX3ZhbHVlKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gZHN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJudW1iZXIi
KSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7Ci0gICAgICAgICAgICAgICAgT3BJc051bWJl
cjo6ZW1pdCh0aGlzLCBkc3QsIG9wLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBPcElzTnVtYmVy
OjplbWl0KHRoaXMsIGRzdCwgb3AubV92YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRz
dDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAic3RyaW5nIikgewog
ICAgICAgICAgICAgICAgIHJld2luZCgpOwotICAgICAgICAgICAgICAgIE9wSXNDZWxsV2l0aFR5
cGU6OmVtaXQodGhpcywgZHN0LCBvcC52YWx1ZSwgU3RyaW5nVHlwZSk7CisgICAgICAgICAgICAg
ICAgT3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUsIFN0cmluZ1R5
cGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAodmFsdWUgPT0gInN5bWJvbCIpIHsKICAgICAgICAgICAgICAgICByZXdpbmQoKTsK
LSAgICAgICAgICAgICAgICBPcElzQ2VsbFdpdGhUeXBlOjplbWl0KHRoaXMsIGRzdCwgb3AudmFs
dWUsIFN5bWJvbFR5cGUpOworICAgICAgICAgICAgICAgIE9wSXNDZWxsV2l0aFR5cGU6OmVtaXQo
dGhpcywgZHN0LCBvcC5tX3ZhbHVlLCBTeW1ib2xUeXBlKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gZHN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUJpZ0lu
dCgpICYmIHZhbHVlID09ICJiaWdpbnQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7Ci0g
ICAgICAgICAgICAgICAgT3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIG9wLnZhbHVl
LCBCaWdJbnRUeXBlKTsKKyAgICAgICAgICAgICAgICBPcElzQ2VsbFdpdGhUeXBlOjplbWl0KHRo
aXMsIGRzdCwgb3AubV92YWx1ZSwgQmlnSW50VHlwZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGRzdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAib2JqZWN0Iikg
ewogICAgICAgICAgICAgICAgIHJld2luZCgpOwotICAgICAgICAgICAgICAgIE9wSXNPYmplY3RP
ck51bGw6OmVtaXQodGhpcywgZHN0LCBvcC52YWx1ZSk7CisgICAgICAgICAgICAgICAgT3BJc09i
amVjdE9yTnVsbDo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwogICAgICAgICAgICAgICAg
IHJldHVybiBkc3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gImZ1
bmN0aW9uIikgewogICAgICAgICAgICAgICAgIHJld2luZCgpOwotICAgICAgICAgICAgICAgIE9w
SXNGdW5jdGlvbjo6ZW1pdCh0aGlzLCBkc3QsIG9wLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBP
cElzRnVuY3Rpb246OmVtaXQodGhpcywgZHN0LCBvcC5tX3ZhbHVlKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZHN0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zODg5LDcgKzM4ODks
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbmRTd2l0Y2godWludDMyCiAgICAgICAgICAg
ICByZXR1cm4gQm91bmRMYWJlbCgpOwogICAgICAgICB9KTsKIAotICAgICAgICBVbmxpbmtlZFNp
bXBsZUp1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShi
eXRlY29kZS50YWJsZUluZGV4KTsKKyAgICAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIGp1
bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoYnl0ZWNvZGUubV90YWJsZUlu
ZGV4KTsKICAgICAgICAgcHJlcGFyZUp1bXBUYWJsZUZvclN3aXRjaCgKICAgICAgICAgICAgIGp1
bXBUYWJsZSwgc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgY2xhdXNlQ291bnQsIGxhYmVscywg
bm9kZXMsIG1pbiwgbWF4LAogICAgICAgICAgICAgc3dpdGNoSW5mby5zd2l0Y2hUeXBlID09IFN3
aXRjaEluZm86OlN3aXRjaEltbWVkaWF0ZQpAQCAtMzkxNCw3ICszOTE0LDcgQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW5kU3dpdGNoKHVpbnQzMgogICAgICAgICAgICAgcmV0dXJuIEJvdW5k
TGFiZWwoKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUocmVmLT5hczxP
cFN3aXRjaFN0cmluZz4oKS50YWJsZUluZGV4KTsKKyAgICAgICAgVW5saW5rZWRTdHJpbmdKdW1w
VGFibGUmIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUocmVm
LT5hczxPcFN3aXRjaFN0cmluZz4oKS5tX3RhYmxlSW5kZXgpOwogICAgICAgICBwcmVwYXJlSnVt
cFRhYmxlRm9yU3RyaW5nU3dpdGNoKGp1bXBUYWJsZSwgc3dpdGNoSW5mby5ieXRlY29kZU9mZnNl
dCwgY2xhdXNlQ291bnQsIGxhYmVscywgbm9kZXMpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC00ODYwLDcgKzQ4NjAsNyBAQCB2b2lkIFN0cnVjdHVyZUZvckluQ29udGV4dDo6ZmluYWxpemUo
Qnl0CiAgICAgICAgIC8vIDEuIGRzdCBzdGF5cyB0aGUgc2FtZS4KICAgICAgICAgLy8gMi4gYmFz
ZSBzdGF5cyB0aGUgc2FtZS4KICAgICAgICAgLy8gMy4gcHJvcGVydHkgZ2V0cyBzd2l0Y2hlZCB0
byB0aGUgb3JpZ2luYWwgcHJvcGVydHkuCi0gICAgICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2Rl
U2l6ZTo6V2lkZT4oJmdlbmVyYXRvciwgYnl0ZWNvZGUuZHN0LCBieXRlY29kZS5iYXNlLCBWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRleCkpOworICAgICAgICBPcEdldEJ5VmFsOjplbWl0
PE9wY29kZVNpemU6OldpZGU+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5t
X2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAgICAgLy8g
NC4gbm9wIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzCiAgICAgICAgIHdoaWxlIChnZW5lcmF0b3Iu
bV93cml0ZXIucG9zaXRpb24oKSA8IGVuZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMzk5OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEyMzEsOCArMTIzMSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxPcD4KIEJ5dGVD
b2RlUGFyc2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPENhbGxPcD4oKTsKLSAgICBOb2RlKiBjYWxsVGFyZ2V0ID0g
Z2V0KGJ5dGVjb2RlLmNhbGxlZSk7Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19j
YXN0PGludD4oYnl0ZWNvZGUuYXJndik7CisgICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChieXRl
Y29kZS5tX2NhbGxlZSk7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGlu
dD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVz
ID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKQEAgLTEyNDAsOCArMTI0MCw4
IEBAIEJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnMKIAogICAgIElubGlu
ZUNhbGxGcmFtZTo6S2luZCBraW5kID0gSW5saW5lQ2FsbEZyYW1lOjpraW5kRm9yKGNhbGxNb2Rl
KTsKIAotICAgIHJldHVybiBoYW5kbGVDYWxsKGJ5dGVjb2RlLmRzdCwgb3AsIGtpbmQsIHBjLT5z
aXplKCksIGNhbGxUYXJnZXQsCi0gICAgICAgIGJ5dGVjb2RlLmFyZ2MsIHJlZ2lzdGVyT2Zmc2V0
LCBjYWxsTGlua1N0YXR1cywgZ2V0UHJlZGljdGlvbigpKTsKKyAgICByZXR1cm4gaGFuZGxlQ2Fs
bChieXRlY29kZS5tX2RzdCwgb3AsIGtpbmQsIHBjLT5zaXplKCksIGNhbGxUYXJnZXQsCisgICAg
ICAgIGJ5dGVjb2RlLm1fYXJnYywgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzLCBnZXRQ
cmVkaWN0aW9uKCkpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpyZWZpbmVTdGF0aWNhbGx5
KENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgTm9kZSogY2FsbFRhcmdldCkKQEAgLTEy
ODcsMTIgKzEyODcsMTIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbE9wPgogQnl0ZUNvZGVQYXJz
ZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChjb25zdCBJ
bnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPENhbGxPcD4oKTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnID0g
Ynl0ZWNvZGUuZmlyc3RGcmVlLm9mZnNldCgpOwotICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9
IGJ5dGVjb2RlLmZpcnN0VmFyQXJnOworICAgIGludCBmaXJzdEZyZWVSZWcgPSBieXRlY29kZS5t
X2ZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBieXRlY29k
ZS5tX2ZpcnN0VmFyQXJnOwogICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBn
ZXRQcmVkaWN0aW9uKCk7CiAgICAgCi0gICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChieXRlY29k
ZS5jYWxsZWUpOworICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoYnl0ZWNvZGUubV9jYWxsZWUp
OwogICAgIAogICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
aywgY3VycmVudENvZGVPcmlnaW4oKSwKQEAgLTEzMDQsOCArMTMwNCw4IEBAIEJ5dGVDb2RlUGFy
c2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnMKICAgICBpZiAoY2FsbExpbmtTdGF0dXMuY2Fu
T3B0aW1pemUoKSkgewogICAgICAgICBhZGRUb0dyYXBoKEZpbHRlckNhbGxMaW5rU3RhdHVzLCBP
cEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0dXNlcygpLmFkZENhbGxMaW5rU3RhdHVz
KGN1cnJlbnRDb2RlT3JpZ2luKCksIGNhbGxMaW5rU3RhdHVzKSksIGNhbGxUYXJnZXQpOwogCi0g
ICAgICAgIGlmIChoYW5kbGVWYXJhcmdzSW5saW5pbmcoY2FsbFRhcmdldCwgYnl0ZWNvZGUuZHN0
LAotICAgICAgICAgICAgY2FsbExpbmtTdGF0dXMsIGZpcnN0RnJlZVJlZywgYnl0ZWNvZGUudGhp
c1ZhbHVlLCBieXRlY29kZS5hcmd1bWVudHMsCisgICAgICAgIGlmIChoYW5kbGVWYXJhcmdzSW5s
aW5pbmcoY2FsbFRhcmdldCwgYnl0ZWNvZGUubV9kc3QsCisgICAgICAgICAgICBjYWxsTGlua1N0
YXR1cywgZmlyc3RGcmVlUmVnLCBieXRlY29kZS5tX3RoaXNWYWx1ZSwgYnl0ZWNvZGUubV9hcmd1
bWVudHMsCiAgICAgICAgICAgICBmaXJzdFZhckFyZ09mZnNldCwgb3AsCiAgICAgICAgICAgICBJ
bmxpbmVDYWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGNhbGxNb2RlKSkpIHsKICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShtX2dyYXBoLmNvbXBpbGF0aW9uKCkpKQpAQCAtMTMxNywxMCArMTMxNywx
MCBAQCBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzCiAgICAgQ2FsbFZh
cmFyZ3NEYXRhKiBkYXRhID0gbV9ncmFwaC5tX2NhbGxWYXJhcmdzRGF0YS5hZGQoKTsKICAgICBk
YXRhLT5maXJzdFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIAotICAgIE5v
ZGUqIHRoaXNDaGlsZCA9IGdldChieXRlY29kZS50aGlzVmFsdWUpOworICAgIE5vZGUqIHRoaXND
aGlsZCA9IGdldChieXRlY29kZS5tX3RoaXNWYWx1ZSk7CiAgICAgTm9kZSogYXJndW1lbnRzQ2hp
bGQgPSBudWxscHRyOwogICAgIGlmIChvcCAhPSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKQotICAg
ICAgICBhcmd1bWVudHNDaGlsZCA9IGdldChieXRlY29kZS5hcmd1bWVudHMpOworICAgICAgICBh
cmd1bWVudHNDaGlsZCA9IGdldChieXRlY29kZS5tX2FyZ3VtZW50cyk7CiAKICAgICBpZiAob3Ag
PT0gVGFpbENhbGxWYXJhcmdzIHx8IG9wID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpIHsKICAg
ICAgICAgaWYgKGFsbElubGluZUZyYW1lc0FyZVRhaWxDYWxscygpKSB7CkBAIC0xMzMxLDggKzEz
MzEsOCBAQCBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzCiAgICAgfQog
CiAgICAgTm9kZSogY2FsbCA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBjYWxsVGFyZ2V0LCB0aGlzQ2hpbGQsIGFyZ3VtZW50c0NoaWxkKTsKLSAgICBp
ZiAoYnl0ZWNvZGUuZHN0LmlzVmFsaWQoKSkKLSAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgY2Fs
bCk7CisgICAgaWYgKGJ5dGVjb2RlLm1fZHN0LmlzVmFsaWQoKSkKKyAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBjYWxsKTsKICAgICByZXR1cm4gTm9uVGVybWluYWw7CiB9CiAKQEAgLTQ1OTYs
OCArNDU5Niw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlR2V0QnlJZChjb25zdCAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgIAotICAgIE5vZGUq
IGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLnByb3BlcnR5
XTsKKyAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5
dGVjb2RlLm1fcHJvcGVydHldOwogICAgIAogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBt
X2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAgICAgR2V0QnlJZFN0YXR1
cyBnZXRCeUlkU3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKQEAgLTQ2MTMsNyAr
NDYxMyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlR2V0QnlJZChjb25zdCAKICAgICAg
ICAgdHlwZSA9IEFjY2Vzc1R5cGU6OkdldERpcmVjdDsKIAogICAgIGhhbmRsZUdldEJ5SWQoCi0g
ICAgICAgIGJ5dGVjb2RlLmRzdCwgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwg
Z2V0QnlJZFN0YXR1cywgdHlwZSwgb3Bjb2RlTGVuZ3RoKTsKKyAgICAgICAgYnl0ZWNvZGUubV9k
c3QsIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIGdldEJ5SWRTdGF0dXMsIHR5
cGUsIG9wY29kZUxlbmd0aCk7CiAKIH0KIApAQCAtNDc1MCw4ICs0NzUwLDggQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0VGhpcygpOwogICAgICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1RoaXMpIHsKICAgICAg
ICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1Ro
aXM+KCkubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGNh
Y2hlZFN0cnVjdHVyZSA9IG1ldGFkYXRhLmNhY2hlZFN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAobWV0YWRhdGEudG9UaGlzU3RhdHVzICE9IFRvVGhpc09LCisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBjYWNoZWRTdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX2NhY2hlZFN0cnVj
dHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEubV90b1RoaXNTdGF0dXMg
IT0gVG9UaGlzT0sKICAgICAgICAgICAgICAgICAgICAgfHwgIWNhY2hlZFN0cnVjdHVyZQogICAg
ICAgICAgICAgICAgICAgICB8fCBjYWNoZWRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RU
YWJsZS50b1RoaXMgIT0gSlNPYmplY3Q6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzCiAgICAg
ICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291
bGRUYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCkBAIC00NzcwLDExICs0NzcwLDExIEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9w
X2NyZWF0ZV90aGlzOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7Ci0gICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmNhbGxlZSkpOworICAgICAgICAgICAgTm9kZSog
Y2FsbGVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NhbGxlZSkpOwogCiAgICAg
ICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFu
dDxKU0Z1bmN0aW9uKj4oKm1fdm0pOwogICAgICAgICAgICAgaWYgKCFmdW5jdGlvbikgewotICAg
ICAgICAgICAgICAgIEpTQ2VsbCogY2FjaGVkRnVuY3Rpb24gPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spLmNhY2hlZENhbGxlZS51bnZhbGlkYXRlZEdldCgpOworICAgICAgICAgICAgICAg
IEpTQ2VsbCogY2FjaGVkRnVuY3Rpb24gPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1f
Y2FjaGVkQ2FsbGVlLnVudmFsaWRhdGVkR2V0KCk7CiAgICAgICAgICAgICAgICAgaWYgKGNhY2hl
ZEZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICYmIGNhY2hlZEZ1bmN0aW9uICE9IEpTQ2Vs
bDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpCiAgICAgICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDZWxsKSkgewpAQCAtNDgxMyw2NiArNDgxMyw2NiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpc0lubGluZU9mZnNldChrbm93blBvbHlQcm90b09mZnNldCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8oZGF0YSks
IG9iamVjdCwgb2JqZWN0LCB3ZWFrSlNDb25zdGFudChwcm90b3R5cGUpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5kc3QpLCBvYmplY3QpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpLCBvYmplY3QpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlFbWl0dGVkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghYWxyZWFkeUVtaXR0ZWQpIHsKLSAg
ICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCksCi0gICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ3JlYXRlVGhpcywgT3BJbmZvKGJ5dGVjb2RlLmlubGlu
ZUNhcGFjaXR5KSwgY2FsbGVlKSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCksCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ3JlYXRl
VGhpcywgT3BJbmZvKGJ5dGVjb2RlLm1faW5saW5lQ2FwYWNpdHkpLCBjYWxsZWUpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV90aGlzKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbmV3X29iamVjdDogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7Ci0gICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUuZHN0LAorICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LAog
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3T2JqZWN0LAotICAgICAgICAgICAgICAgICAg
ICBPcEluZm8obV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spLm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpKSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpKSkp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19vYmplY3QpOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXk6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7Ci0gICAg
ICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0gYnl0ZWNvZGUuYXJndi5vZmZzZXQoKTsKLSAgICAg
ICAgICAgIGludCBudW1PcGVyYW5kcyA9IGJ5dGVjb2RlLmFyZ2M7Ci0gICAgICAgICAgICBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KS5hcnJheUFsbG9jYXRpb25Qcm9maWxlOworICAgICAgICAgICAgaW50IHN0YXJ0T3BlcmFuZCA9
IGJ5dGVjb2RlLm1fYXJndi5vZmZzZXQoKTsKKyAgICAgICAgICAgIGludCBudW1PcGVyYW5kcyA9
IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICAgICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUmIHBy
b2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZTsKICAgICAgICAgICAgIGZvciAoaW50IG9wZXJhbmRJZHggPSBzdGFydE9wZXJhbmQ7IG9w
ZXJhbmRJZHggPiBzdGFydE9wZXJhbmQgLSBudW1PcGVyYW5kczsgLS1vcGVyYW5kSWR4KQogICAg
ICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZElk
eCkpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aEhpbnQgPSBzdGQ6Om1heDx1
bnNpZ25lZD4ocHJvZmlsZS52ZWN0b3JMZW5ndGhIaW50KCksIG51bU9wZXJhbmRzKTsKLSAgICAg
ICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBOZXdBcnJh
eSwgT3BJbmZvKHByb2ZpbGUuc2VsZWN0SW5kZXhpbmdUeXBlKCkpLCBPcEluZm8odmVjdG9yTGVu
Z3RoSGludCkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChO
b2RlOjpWYXJBcmcsIE5ld0FycmF5LCBPcEluZm8ocHJvZmlsZS5zZWxlY3RJbmRleGluZ1R5cGUo
KSksIE9wSW5mbyh2ZWN0b3JMZW5ndGhIaW50KSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfbmV3X2FycmF5KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dp
dGhfc3ByZWFkOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKTsKLSAgICAgICAgICAgIGludCBzdGFydE9w
ZXJhbmQgPSBieXRlY29kZS5hcmd2Lm9mZnNldCgpOwotICAgICAgICAgICAgaW50IG51bU9wZXJh
bmRzID0gYnl0ZWNvZGUuYXJnYzsKLSAgICAgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgYml0VmVj
dG9yID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9j
aygpLT5iaXRWZWN0b3IoYnl0ZWNvZGUuYml0VmVjdG9yKTsKKyAgICAgICAgICAgIGludCBzdGFy
dE9wZXJhbmQgPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgICAgICAgICBpbnQgbnVt
T3BlcmFuZHMgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgICAgICAgICBjb25zdCBCaXRWZWN0b3Im
IGJpdFZlY3RvciA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+dW5saW5rZWRD
b2RlQmxvY2soKS0+Yml0VmVjdG9yKGJ5dGVjb2RlLm1fYml0VmVjdG9yKTsKICAgICAgICAgICAg
IGZvciAoaW50IG9wZXJhbmRJZHggPSBzdGFydE9wZXJhbmQ7IG9wZXJhbmRJZHggPiBzdGFydE9w
ZXJhbmQgLSBudW1PcGVyYW5kczsgLS1vcGVyYW5kSWR4KQogICAgICAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKGdldChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZElkeCkpKTsKIAogICAgICAgICAg
ICAgQml0VmVjdG9yKiBjb3B5ID0gbV9ncmFwaC5tX2JpdFZlY3RvcnMuYWRkKGJpdFZlY3Rvcik7
CiAgICAgICAgICAgICBBU1NFUlQoKmNvcHkgPT0gYml0VmVjdG9yKTsKIAotICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLmRzdCwKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgTmV3QXJyYXlXaXRoU3ByZWFkLCBP
cEluZm8oY29weSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19hcnJheV93aXRo
X3NwcmVhZCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3NwcmVhZDogewogICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTcHJlYWQ+KCk7
Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LAotICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoU3ByZWFkLCBnZXQoYnl0ZWNvZGUuYXJndW1lbnQpKSk7CisgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9kc3QsCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChTcHJlYWQsIGdldChieXRl
Y29kZS5tX2FyZ3VtZW50KSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3ByZWFkKTsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhf
c2l6ZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdBcnJheVdpdGhTaXplPigpOwotICAgICAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykuYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoTmV3
QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKHByb2ZpbGUuc2VsZWN0SW5kZXhpbmdUeXBlKCkpLCBnZXQo
Ynl0ZWNvZGUubGVuZ3RoKSkpOworICAgICAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSYg
cHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheUFsbG9jYXRpb25Q
cm9maWxlOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5ld0Fy
cmF5V2l0aFNpemUsIE9wSW5mbyhwcm9maWxlLnNlbGVjdEluZGV4aW5nVHlwZSgpKSwgZ2V0KGJ5
dGVjb2RlLm1fbGVuZ3RoKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X2FycmF5
X3dpdGhfc2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDg4MSwyMiArNDg4MSwy
MiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICAvLyBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW4ndCBhbGxvY2F0ZSBhIG5ldyBKU0ltbXV0YWJsZUJ1
dHRlcmZseSBpZiB0aGUgcHJvZmlsZSB0ZWxscyB1cyBuZXcgaW5mb3JtYXRpb24gYmVjYXVzZSB3
ZQogICAgICAgICAgICAgLy8gY2Fubm90IGFsbG9jYXRlIGZyb20gY29tcGlsYXRpb24gdGhyZWFk
cy4KICAgICAgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICAgICAgRnJvemVu
VmFsdWUqIGZyb3plbiA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuaW1tdXRhYmxlQnV0
dGVyZmx5KSktPmNvbnN0YW50KCk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0g
Z2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkpLT5jb25z
dGFudCgpOwogICAgICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CiAgICAgICAgICAgICBK
U0ltbXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gZnJvemVuLT5jYXN0PEpT
SW1tdXRhYmxlQnV0dGVyZmx5Kj4oKTsKICAgICAgICAgICAgIE5ld0FycmF5QnVmZmVyRGF0YSBk
YXRhIHsgfTsKICAgICAgICAgICAgIGRhdGEuaW5kZXhpbmdNb2RlID0gaW1tdXRhYmxlQnV0dGVy
Zmx5LT5pbmRleGluZ01vZGUoKTsKICAgICAgICAgICAgIGRhdGEudmVjdG9yTGVuZ3RoSGludCA9
IGltbXV0YWJsZUJ1dHRlcmZseS0+dG9CdXR0ZXJmbHkoKS0+dmVjdG9yTGVuZ3RoKCk7CiAKLSAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZHN0KSwgYWRkVG9HcmFwaChO
ZXdBcnJheUJ1ZmZlciwgT3BJbmZvKGZyb3plbiksIE9wSW5mbyhkYXRhLmFzUXVhZFdvcmQpKSk7
CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KSwgYWRkVG9H
cmFwaChOZXdBcnJheUJ1ZmZlciwgT3BJbmZvKGZyb3plbiksIE9wSW5mbyhkYXRhLmFzUXVhZFdv
cmQpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfYXJyYXlfYnVmZmVyKTsKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogewogICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdl
eHA+KCk7Ci0gICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUucmVnZXhwLmlzQ29uc3RhbnQoKSk7
Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVlemVT
dHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2Rl
LnJlZ2V4cC5vZmZzZXQoKSkpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9H
cmFwaChOZXdSZWdleHAsIE9wSW5mbyhmcm96ZW5SZWdFeHApLCBqc0NvbnN0YW50KGpzTnVtYmVy
KDApKSkpOworICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlzQ29uc3RhbnQo
KSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5mcmVl
emVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVj
b2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVuUmVnRXhwKSwganNDb25zdGFudChq
c051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19yZWdleHApOwog
ICAgICAgICB9CiAKQEAgLTQ5MDcsMjQgKzQ5MDcsMjQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAh
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGFyZ3VtZW50c0xlbmd0aCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAxOwogICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdExlbmd0aDsKLSAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDw9IGJ5dGVjb2RlLm51bVBhcmFtZXRlcnNUb1Nr
aXApCisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8PSBieXRlY29kZS5tX251
bVBhcmFtZXRlcnNUb1NraXApCiAgICAgICAgICAgICAgICAgICAgIHJlc3RMZW5ndGggPSBqc051
bWJlcigwKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3RM
ZW5ndGggPSBqc051bWJlcihhcmd1bWVudHNMZW5ndGggLSBieXRlY29kZS5udW1QYXJhbWV0ZXJz
VG9Ta2lwKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aCA9IGpzTnVtYmVyKGFyZ3Vt
ZW50c0xlbmd0aCAtIGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcCk7CiAKICAgICAgICAg
ICAgICAgICBsZW5ndGggPSBqc0NvbnN0YW50KHJlc3RMZW5ndGgpOwogICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gYWRkVG9HcmFwaChHZXRSZXN0TGVuZ3RoLCBP
cEluZm8oYnl0ZWNvZGUubnVtUGFyYW1ldGVyc1RvU2tpcCkpOwotICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLmRzdCwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBhZGRUb0dyYXBo
KEdldFJlc3RMZW5ndGgsIE9wSW5mbyhieXRlY29kZS5tX251bVBhcmFtZXRlcnNUb1NraXApKTsK
KyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbGVuZ3RoKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2dldF9yZXN0X2xlbmd0aCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX2NyZWF0ZV9yZXN0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCk7CiAgICAgICAgICAgICBub3RpY2VBcmd1bWVu
dHNVc2UoKTsKLSAgICAgICAgICAgIE5vZGUqIGFycmF5TGVuZ3RoID0gZ2V0KGJ5dGVjb2RlLmFy
cmF5U2l6ZSk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LAotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoQ3JlYXRlUmVzdCwgT3BJbmZvKGJ5dGVjb2RlLm51bVBhcmFtZXRlcnNUb1Nr
aXApLCBhcnJheUxlbmd0aCkpOworICAgICAgICAgICAgTm9kZSogYXJyYXlMZW5ndGggPSBnZXQo
Ynl0ZWNvZGUubV9hcnJheVNpemUpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LAor
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ3JlYXRlUmVzdCwgT3BJbmZvKGJ5dGVjb2RlLm1f
bnVtUGFyYW1ldGVyc1RvU2tpcCksIGFycmF5TGVuZ3RoKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9jcmVhdGVfcmVzdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDkzMiw3
NCArNDkzMiw3NCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAK
ICAgICAgICAgY2FzZSBvcF9iaXRub3Q6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0bm90PigpOwotICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGJ5dGVjb2RlLm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwg
YWRkVG9HcmFwaChBcml0aEJpdE5vdCwgb3AxKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChBcml0aEJpdE5vdCwgb3AxKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9iaXRub3QpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0YW5kPigp
OwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24o
KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLm1fcmhzKTsKICAgICAgICAgICAgIGlmIChvcDEtPmhhc051bWJlck9yQW55SW50UmVzdWx0
KCkgJiYgb3AyLT5oYXNOdW1iZXJPckFueUludFJlc3VsdCgpKQotICAgICAgICAgICAgICAgIHNl
dChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoQXJpdGhCaXRBbmQsIG9wMSwgb3AyKSk7CisgICAg
ICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0QW5kLCBv
cDEsIG9wMikpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldChieXRlY29k
ZS5kc3QsIGFkZFRvR3JhcGgoVmFsdWVCaXRBbmQsIE9wSW5mbygpLCBPcEluZm8ocHJlZGljdGlv
biksIG9wMSwgb3AyKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKFZhbHVlQml0QW5kLCBPcEluZm8oKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBvcDEsIG9w
MikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0YW5kKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfYml0b3I6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0b3I+KCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwotICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUu
cmhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAg
ICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgaWYg
KG9wMS0+aGFzTnVtYmVyT3JBbnlJbnRSZXN1bHQoKSAmJiBvcDItPmhhc051bWJlck9yQW55SW50
UmVzdWx0KCkpCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChB
cml0aEJpdE9yLCBvcDEsIG9wMikpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChBcml0aEJpdE9yLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoVmFsdWVCaXRPciwg
T3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgb3AxLCBvcDIpKTsKKyAgICAgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoVmFsdWVCaXRPciwgT3BJbmZvKCksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2JpdG9yKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7CiAgICAgICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdHhvcj4oKTsK
ICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7
Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29k
ZS5tX3Jocyk7CiAgICAgICAgICAgICBpZiAob3AxLT5oYXNOdW1iZXJPckFueUludFJlc3VsdCgp
ICYmIG9wMi0+aGFzTnVtYmVyT3JBbnlJbnRSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0WG9yLCBvcDEsIG9wMikpOworICAgICAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChBcml0aEJpdFhvciwgb3Ax
LCBvcDIpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
ZHN0LCBhZGRUb0dyYXBoKFZhbHVlQml0WG9yLCBPcEluZm8oKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBvcDEsIG9wMikpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9H
cmFwaChWYWx1ZUJpdFhvciwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgb3AxLCBvcDIp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdG9yKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJo
cyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEJpdFJTaGlmdCwg
b3AxLCBvcDIpKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7
CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEJpdFJTaGlmdCwgb3AxLCBvcDIpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3JzaGlmdCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2xzaGlmdDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Ynl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChCaXRMU2hpZnQsIG9w
MSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChCaXRMU2hpZnQsIG9wMSwgb3AyKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9sc2hpZnQpOwogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBvcF91cnNoaWZ0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Ynl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChCaXRVUlNoaWZ0LCBv
cDEsIG9wMikpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoQml0VVJTaGlmdCwgb3AxLCBvcDIpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Vyc2hpZnQpOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF91bnNpZ25lZDogewogICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICAgICAgICAg
IHNldChieXRlY29kZS5kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9OdW1iZXIsIGdl
dChieXRlY29kZS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChVSW50MzJUb051bWJlciwgZ2V0KGJ5dGVjb2RlLm1fb3BlcmFu
ZCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF91bnNpZ25lZCk7CiAgICAgICAgIH0K
IApAQCAtNTAwNywxNSArNTAwNywxNSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9pbmM6IHsKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgICAgICAgICAgTm9k
ZSogb3AgPSBnZXQoYnl0ZWNvZGUuc3JjRHN0KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5z
cmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CisgICAgICAgICAgICBOb2RlKiBvcCA9
IGdldChieXRlY29kZS5tX3NyY0RzdCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9zcmNE
c3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBhZGRUb0dyYXBoKEpTQ29uc3Rh
bnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9pbmMpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9kZWM6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwotICAgICAg
ICAgICAgTm9kZSogb3AgPSBnZXQoYnl0ZWNvZGUuc3JjRHN0KTsKLSAgICAgICAgICAgIHNldChi
eXRlY29kZS5zcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CisgICAgICAgICAgICBO
b2RlKiBvcCA9IGdldChieXRlY29kZS5tX3NyY0RzdCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9zcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBhZGRUb0dyYXBo
KEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9kZWMpOwogICAgICAgICB9CiAKQEAgLTUwMjMsNTMgKzUwMjMsNTMgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3Bf
YWRkOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEFkZD4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwot
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIGlmIChvcDEtPmhhc051bWJlclJlc3Vs
dCgpICYmIG9wMi0+aGFzTnVtYmVyUmVzdWx0KCkpCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgb3AxLCBvcDIpKSk7CisgICAg
ICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRo
QWRkLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUuZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKFZhbHVlQWRkLCBvcDEsIG9wMikpKTsK
KyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgo
VmFsdWVBZGQsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYWRkKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3ViOiB7CiAgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKLSAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0
KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9s
aHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAg
ICAgICAgIGlmIChvcDEtPmhhc051bWJlclJlc3VsdCgpICYmIG9wMi0+aGFzTnVtYmVyUmVzdWx0
KCkpCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9HcmFw
aChBcml0aFN1Yiwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1f
ZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcDEsIG9wMikpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBtYWtlU2FmZShhZGRU
b0dyYXBoKFZhbHVlU3ViLCBvcDEsIG9wMikpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVTdWIsIG9wMSwgb3AyKSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3Bfc3ViKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfbmVnYXRlOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcE5lZ2F0ZT4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29k
ZS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX29wZXJh
bmQpOwogICAgICAgICAgICAgaWYgKG9wMS0+aGFzTnVtYmVyUmVzdWx0KCkpCi0gICAgICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwg
b3AxKSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbWFrZVNhZmUoYWRk
VG9HcmFwaChBcml0aE5lZ2F0ZSwgb3AxKSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVOZWdhdGUs
IG9wMSkpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIG1ha2VTYWZlKGFk
ZFRvR3JhcGgoVmFsdWVOZWdhdGUsIG9wMSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X25lZ2F0ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX211bDogewogICAgICAgICAg
ICAgLy8gTXVsdGlwbHkgcmVxdWlyZXMgdGhhdCB0aGUgaW5wdXRzIGFyZSBub3QgdHJ1bmNhdGVk
LCB1bmZvcnR1bmF0ZWx5LgogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BNdWw+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNv
ZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBpZiAob3AxLT5oYXNO
dW1iZXJSZXN1bHQoKSAmJiBvcDItPmhhc051bWJlclJlc3VsdCgpKQotICAgICAgICAgICAgICAg
IHNldChieXRlY29kZS5kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNdWwsIG9wMSwgb3Ay
KSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbWFrZVNhZmUoYWRkVG9H
cmFwaChBcml0aE11bCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChWYWx1ZU11bCwgb3Ax
LCBvcDIpKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBtYWtlU2FmZShh
ZGRUb0dyYXBoKFZhbHVlTXVsLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX211bCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX21vZDogewogICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUq
IG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbWFr
ZVNhZmUoYWRkVG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9tb2QpOwogICAgICAgICB9CiAKQEAgLTUwNzcsMjAgKzUwNzcsMjAgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgLy8gRklY
TUU6IEFyaXRoUG93KFVudHlwZWQsIFVudHlwZWQpIHNob3VsZCBiZSBzdXBwb3J0ZWQgYXMgdGhl
IHNhbWUgdG8gQXJpdGhNdWwsIEFyaXRoU3ViIGV0Yy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAwMTIKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpOwotICAgICAgICAgICAg
Tm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIgPSBn
ZXQoYnl0ZWNvZGUucmhzKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3Jh
cGgoQXJpdGhQb3csIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhz
KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChBcml0aFBvdywg
b3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Bvdyk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2RpdjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5y
aHMpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBpZiAo
b3AxLT5oYXNOdW1iZXJSZXN1bHQoKSAmJiBvcDItPmhhc051bWJlclJlc3VsdCgpKQotICAgICAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VEaXZTYWZlKGFkZFRvR3JhcGgoQXJpdGhE
aXYsIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbWFr
ZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZURpdlNhZmUoYWRkVG9H
cmFwaChWYWx1ZURpdiwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBtYWtlRGl2U2FmZShhZGRUb0dyYXBoKFZhbHVlRGl2LCBvcDEsIG9wMikpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Rpdik7CiAgICAgICAgIH0KIApAQCAtNTEwNSwxNCAr
NTEwNSwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAg
ICAgICAgY2FzZSBvcF9tb3Y6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoYnl0
ZWNvZGUuc3JjKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG9wKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9wID0gZ2V0KGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgICAgIHNldChieXRl
Y29kZS5tX2RzdCwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92KTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdGR6OiB7CiAgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja05vdEVtcHR5LCBnZXQoYnl0ZWNvZGUudGFyZ2V0KSk7CisgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrTm90RW1wdHksIGdldChieXRlY29kZS5tX3RhcmdldCkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2hlY2tfdGR6KTsKICAgICAgICAgfQogCkBA
IC01MTIwLDE4ICs1MTIwLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7CiAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBkZWZh
dWx0SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3RGb3IoY3VycmVudENvZGVPcmlnaW4oKSktPmZ1bmN0aW9uUHJvdG9I
YXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCk7CiAKLSAgICAgICAgICAgIE5vZGUqIGNvbnN0cnVj
dG9yID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5jb25zdHJ1Y3RvcikpOwotICAgICAg
ICAgICAgTm9kZSogaGFzSW5zdGFuY2VWYWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUuaGFzSW5zdGFuY2VWYWx1ZSkpOworICAgICAgICAgICAgTm9kZSogY29uc3RydWN0b3IgPSBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uc3RydWN0b3IpKTsKKyAgICAgICAgICAg
IE5vZGUqIGhhc0luc3RhbmNlVmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
aGFzSW5zdGFuY2VWYWx1ZSkpOwogCi0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLmRzdCksIGFkZFRvR3JhcGgoT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIE9wSW5mbyhtX2dy
YXBoLmZyZWV6ZShkZWZhdWx0SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpLCBjb25zdHJ1Y3Rv
ciwgaGFzSW5zdGFuY2VWYWx1ZSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX2RzdCksIGFkZFRvR3JhcGgoT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIE9wSW5mbyht
X2dyYXBoLmZyZWV6ZShkZWZhdWx0SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpLCBjb25zdHJ1
Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfb3Zl
cnJpZGVzX2hhc19pbnN0YW5jZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lkZW50
aXR5X3dpdGhfcHJvZmlsZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOwotICAgICAgICAgICAgTm9k
ZSogc3JjRHN0ID0gZ2V0KGJ5dGVjb2RlLnNyY0RzdCk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS50
b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5i
b3R0b21Qcm9maWxlKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5zcmNEc3QsIGFkZFRvR3Jh
cGgoSWRlbnRpdHlXaXRoUHJvZmlsZSwgT3BJbmZvKHNwZWN1bGF0aW9uKSwgc3JjRHN0KSk7Cisg
ICAgICAgICAgICBOb2RlKiBzcmNEc3QgPSBnZXQoYnl0ZWNvZGUubV9zcmNEc3QpOworICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxhdGVk
VHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0
ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fc3JjRHN0LCBhZGRUb0dyYXBoKElkZW50aXR5V2l0aFByb2ZpbGUsIE9wSW5mbyhzcGVj
dWxhdGlvbiksIHNyY0RzdCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaWRlbnRpdHlf
d2l0aF9wcm9maWxlKTsKICAgICAgICAgfQogCkBAIC01MTQyLDggKzUxNDIsOCBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2VsaW5l
TWFwLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUudmFsdWUpOwotICAgICAgICAgICAg
Tm9kZSogcHJvdG90eXBlID0gZ2V0KGJ5dGVjb2RlLnByb3RvdHlwZSk7CisgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIE5vZGUqIHBy
b3RvdHlwZSA9IGdldChieXRlY29kZS5tX3Byb3RvdHlwZSk7CiAKICAgICAgICAgICAgIC8vIE9u
bHkgaW5saW5lIGl0IGlmIGl0J3MgU2ltcGxlIHdpdGggYSBjb21tb25Qcm90b3R5cGU7IGJvdHRv
bS90b3Agb3IgdmFyaWFibGUKICAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgYm90aCBnZXQgaGFu
ZGxlZCBieSB0aGUgSUMuIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIGJvdHRvbSAodW5wcm9maWxlZCkK
QEAgLTUxNzEsMTAyICs1MTcxLDEwMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGFsbE9LKSB7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGNoID0gYWRkVG9HcmFwaChNYXRjaFN0cnVj
dHVyZSwgT3BJbmZvKGRhdGEpLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldChieXRl
Y29kZS5kc3QsIG1hdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0
LCBtYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNlb2Yp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1ZSwgcHJv
dG90eXBlKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5z
dGFuY2VPZiwgdmFsdWUsIHByb3RvdHlwZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
aW5zdGFuY2VvZik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2ZfY3Vz
dG9tOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChi
eXRlY29kZS52YWx1ZSk7Ci0gICAgICAgICAgICBOb2RlKiBjb25zdHJ1Y3RvciA9IGdldChieXRl
Y29kZS5jb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICBOb2RlKiBoYXNJbnN0YW5jZVZhbHVlID0g
Z2V0KGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
LmRzdCwgYWRkVG9HcmFwaChJbnN0YW5jZU9mQ3VzdG9tLCB2YWx1ZSwgY29uc3RydWN0b3IsIGhh
c0luc3RhbmNlVmFsdWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2Rl
Lm1fdmFsdWUpOworICAgICAgICAgICAgTm9kZSogY29uc3RydWN0b3IgPSBnZXQoYnl0ZWNvZGUu
bV9jb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBOb2RlKiBoYXNJbnN0YW5jZVZhbHVlID0gZ2V0
KGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoSW5zdGFuY2VPZkN1c3RvbSwgdmFsdWUsIGNvbnN0cnVjdG9yLCBo
YXNJbnN0YW5jZVZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0YW5jZW9m
X2N1c3RvbSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9pc19lbXB0eTogewogICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5Pigp
OwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzRW1wdHksIHZhbHVlKSk7Cisg
ICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKElzRW1wdHksIHZhbHVlKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19lbXB0eSk7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9pc191bmRlZmluZWQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0gICAgICAgICAgICBOb2RlKiB2
YWx1ZSA9IGdldChieXRlY29kZS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5k
c3QsIGFkZFRvR3JhcGgoSXNVbmRlZmluZWQsIHZhbHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2
YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKElzVW5kZWZpbmVkLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfaXNfdW5kZWZpbmVkKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2lz
X3VuZGVmaW5lZF9vcl9udWxsOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUuZHN0LCBhZGRUb0dyYXBoKElzVW5kZWZpbmVkT3JOdWxsLCB2YWx1ZSkpOworICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNl
dChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc1VuZGVmaW5lZE9yTnVsbCwgdmFsdWUpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNl
dChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoSXNCb29sZWFuLCB2YWx1ZSkpOworICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNl
dChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc0Jvb2xlYW4sIHZhbHVlKSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9pc19ib29sZWFuKTsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2Ugb3BfaXNfbnVtYmVyOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBn
ZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRU
b0dyYXBoKElzTnVtYmVyLCB2YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQo
Ynl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRk
VG9HcmFwaChJc051bWJlciwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lz
X251bWJlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90eXBl
OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cElzQ2VsbFdpdGhUeXBlPigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNv
ZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElz
Q2VsbFdpdGhUeXBlLCBPcEluZm8oYnl0ZWNvZGUudHlwZSksIHZhbHVlKSk7CisgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKElzQ2VsbFdpdGhUeXBlLCBPcEluZm8oYnl0ZWNv
ZGUubV90eXBlKSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX2NlbGxf
d2l0aF90eXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0OiB7CiAg
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzT2Jq
ZWN0PigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzT2JqZWN0LCB2YWx1
ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsK
KyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc09iamVjdCwgdmFs
dWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX29iamVjdCk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2lzX29iamVjdF9vcl9udWxsOiB7CiAgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0T3JOdWxsPigpOwot
ICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzT2JqZWN0T3JOdWxsLCB2YWx1ZSkp
OworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc09iamVjdE9yTnVsbCwg
dmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX29iamVjdF9vcl9udWxsKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNGdW5jdGlvbj4oKTsK
LSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm9wZXJhbmQpOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChJc0Z1bmN0aW9uLCB2YWx1ZSkpOwor
ICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAg
ICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc0Z1bmN0aW9uLCB2YWx1ZSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfZnVuY3Rpb24pOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9ub3Q6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBn
ZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRU
b0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBh
ZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9ub3QpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF90b19wcmlt
aXRpdmU6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRl
Y29kZS5zcmMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChUb1By
aW1pdGl2ZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2Rl
Lm1fc3JjKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb1By
aW1pdGl2ZSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX3ByaW1pdGl2
ZSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3N0cmNhdDogewog
ICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdHJj
YXQ+KCk7Ci0gICAgICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0gYnl0ZWNvZGUuc3JjLm9mZnNl
dCgpOwotICAgICAgICAgICAgaW50IG51bU9wZXJhbmRzID0gYnl0ZWNvZGUuY291bnQ7CisgICAg
ICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CisgICAg
ICAgICAgICBpbnQgbnVtT3BlcmFuZHMgPSBieXRlY29kZS5tX2NvdW50OwogI2lmIENQVShYODYp
CiAgICAgICAgICAgICAvLyBYODYgZG9lc24ndCBoYXZlIGVub3VnaCByZWdpc3RlcnMgdG8gY29t
cGlsZSBNYWtlUm9wZSB3aXRoIHRocmVlIGFyZ3VtZW50cy4gVGhlCiAgICAgICAgICAgICAvLyBT
dHJDYXQgd2UgZW1pdCBoZXJlIG1heSBiZSB0dXJuZWQgaW50byBhIE1ha2VSb3BlLiBSYXRoZXIg
dGhhbiB0cnkgdG8gYmUgY2xldmVyLApAQCAtNTI5MSwxMDUgKzUyOTEsMTA1IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBBU1NFUlQo
aW5kZXhJbk9wZXJhbmRzIDwgbWF4QXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICBvcGVyYW5k
c1tpbmRleEluT3BlcmFuZHMrK10gPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHN0YXJ0T3BlcmFuZCAt
IG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChieXRlY29kZS5k
c3QsIGFkZFRvR3JhcGgoU3RyQ2F0LCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRz
WzJdKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoU3RyQ2F0
LCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9zdHJjYXQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9sZXNz
OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cExlc3M+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1f
ZHN0LCBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfbGVzcyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xlc3NlcTog
ewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BM
ZXNzZXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMikpOworICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2xlc3NlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dy
ZWF0ZXI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR3JlYXRlcj4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5s
aHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7Ci0gICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEsIG9w
MikpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9ncmVhdGVyKTsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2Ugb3BfZ3JlYXRlcmVxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9
IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2Rl
LnJocyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKENvbXBhcmVH
cmVhdGVyRXEsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNv
ZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsK
KyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChDb21wYXJlR3JlYXRl
ckVxLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ3JlYXRlcmVxKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfYmVsb3c6IHsKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCk7Ci0gICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9
IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9H
cmFwaChDb21wYXJlQmVsb3csIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2Rl
Lm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChDb21w
YXJlQmVsb3csIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9iZWxvdyk7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2JlbG93ZXE6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKTsKLSAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBh
ZGRUb0dyYXBoKENvbXBhcmVCZWxvd0VxLCBvcDEsIG9wMikpOworICAgICAgICAgICAgTm9kZSog
b3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChi
eXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoQ29tcGFyZUJlbG93RXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9iZWxvd2VxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZXE6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUq
IG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwg
YWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChD
b21wYXJlRXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lcSk7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2VxX251bGw6IHsKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOwotICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgTm9kZSogbnVs
bENvbnN0YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwp
KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2
YWx1ZSwgbnVsbENvbnN0YW50KSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50KSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9lcV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3Ry
aWN0ZXE6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wU3RyaWN0ZXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUu
bGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwg
b3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAg
ICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNl
dChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdHJpY3RlcSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX25lcTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0
ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwot
ICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRU
b0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2Rl
Lm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChMb2dp
Y2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9uZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXFfbnVs
bDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3Bl
cmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQp
OwogICAgICAgICAgICAgTm9kZSogbnVsbENvbnN0YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8obV9jb25zdGFudE51bGwpKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3Qs
IGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxs
Q29uc3RhbnQpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgo
TG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxsQ29uc3RhbnQpKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX25zdHJpY3RlcTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRl
Y29kZS5yaHMpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAg
ICBOb2RlKiBpbnZlcnRlZFJlc3VsdDsKICAgICAgICAgICAgIGludmVydGVkUmVzdWx0ID0gYWRk
VG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIHNldChieXRl
Y29kZS5kc3QsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgaW52ZXJ0ZWRSZXN1bHQpKTsKKyAgICAg
ICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBpbnZlcnRl
ZFJlc3VsdCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbnN0cmljdGVxKTsKICAgICAg
ICAgfQogCkBAIC01Mzk5LDggKzUzOTksOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOwogCi0gICAgICAgICAgICBOb2Rl
KiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgICAgICAgICAgTm9kZSogcHJvcGVydHkg
PSBnZXQoYnl0ZWNvZGUucHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChi
eXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBib29sIGNvbXBpbGVkQXNHZXRCeUlkID0gZmFs
c2U7CiAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIGdldEJ5SWRTdGF0dXM7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gMDsKQEAgLTU0MzQsOSArNTQzNCw5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgaWYgKGNvbXBpbGVkQXNHZXRCeUlkKQotICAgICAgICAgICAgICAgIGhhbmRs
ZUdldEJ5SWQoYnl0ZWNvZGUuZHN0LCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVy
LCBnZXRCeUlkU3RhdHVzLCBBY2Nlc3NUeXBlOjpHZXQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fZHN0LCBwcmVk
aWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeUlkU3RhdHVzLCBBY2Nlc3NUeXBl
OjpHZXQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKS5hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAg
ICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgY29uc2lkZXIgbWFraW5nIHRoaXMgbm90IHZhcmFy
Zywgc2luY2UgaXQgb25seSB1c2VzIHRocmVlIGNoaWxkCiAgICAgICAgICAgICAgICAgLy8gc2xv
dHMuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NDE5MgpAQCAtNTQ0NSw3ICs1NDQ1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDApOyAv
LyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAgICAgICAgICAgICAgIE5vZGUq
IGdldEJ5VmFsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEdldEJ5VmFsLCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAgICBt
X2V4aXRPSyA9IGZhbHNlOyAvLyBHZXRCeVZhbCBtdXN0IGJlIHRyZWF0ZWQgYXMgaWYgaXQgY2xv
YmJlcnMgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSBpdCBnZW5lcmljLgot
ICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGdldEJ5VmFsKTsKKyAgICAgICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGdldEJ5VmFsKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CkBAIC01NDU1LDExICs1NDU1LDEx
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRoVGhp
cz4oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0
aW9uKCk7CiAKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0g
ICAgICAgICAgICBOb2RlKiB0aGlzVmFsdWUgPSBnZXQoYnl0ZWNvZGUudGhpc1ZhbHVlKTsKLSAg
ICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKKyAgICAg
ICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5v
ZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAgICBO
b2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAgICAgIE5v
ZGUqIGdldEJ5VmFsV2l0aFRoaXMgPSBhZGRUb0dyYXBoKEdldEJ5VmFsV2l0aFRoaXMsIE9wSW5m
bygpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpOwotICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgZ2V0QnlWYWxXaXRoVGhpcyk7CisgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGdldEJ5VmFsV2l0aFRoaXMpOwogCiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9nZXRfYnlfdmFsX3dpdGhfdGhpcyk7CiAgICAgICAgIH0KQEAgLTU0NzUs
MTAgKzU0NzUsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
CiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxXaXRoVGhpcz4o
KTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAg
ICAgICBOb2RlKiB0aGlzVmFsdWUgPSBnZXQoYnl0ZWNvZGUudGhpc1ZhbHVlKTsKLSAgICAgICAg
ICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKKyAgICAgICAgICAgIE5vZGUqIGJh
c2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9
IGdldChieXRlY29kZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9
IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0
KGJ5dGVjb2RlLm1fdmFsdWUpOwogCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsK
ICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHRoaXNWYWx1ZSk7CkBAIC01NDkxLDEwICs1NDkx
LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAg
ICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlZmluZURhdGFQcm9wZXJ0eT4oKTsKLSAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICBO
b2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChieXRlY29kZS52YWx1ZSk7Ci0gICAgICAgICAgICBOb2RlKiBhdHRyaWJ1
dGVzID0gZ2V0KGJ5dGVjb2RlLmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9
IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRl
Y29kZS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIE5vZGUqIGF0dHJpYnV0ZXMgPSBnZXQoYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzKTsKIAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CiAg
ICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CkBAIC01NTA3LDExICs1NTA3LDEx
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBj
YXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eTogewogICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWZpbmVBY2Nlc3NvclByb3BlcnR5Pigp
OwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAgICAgICAg
ICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICAgICAgICAg
IE5vZGUqIGdldHRlciA9IGdldChieXRlY29kZS5nZXR0ZXIpOwotICAgICAgICAgICAgTm9kZSog
c2V0dGVyID0gZ2V0KGJ5dGVjb2RlLnNldHRlcik7Ci0gICAgICAgICAgICBOb2RlKiBhdHRyaWJ1
dGVzID0gZ2V0KGJ5dGVjb2RlLmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9
IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgICAgICAgICBOb2RlKiBnZXR0ZXIgPSBnZXQoYnl0
ZWNvZGUubV9nZXR0ZXIpOworICAgICAgICAgICAgTm9kZSogc2V0dGVyID0gZ2V0KGJ5dGVjb2Rl
Lm1fc2V0dGVyKTsKKyAgICAgICAgICAgIE5vZGUqIGF0dHJpYnV0ZXMgPSBnZXQoYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzKTsKIAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CiAgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CkBAIC01NTM5LDIxICs1NTM5LDIxIEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlz
PigpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAgICAg
ICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS50aGlzVmFsdWUpOwotICAgICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRl
bnRpZmllclJlbWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2Ug
PSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9IGdl
dChieXRlY29kZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUubV9w
cm9wZXJ0eV07CiAKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsCisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRCeUlkV2l0
aFRoaXMsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNl
LCB0aGlzVmFsdWUpKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4o
KTsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKLSAgICAg
ICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVt
YXBbYnl0ZWNvZGUucHJvcGVydHldOwotICAgICAgICAgICAgYm9vbCBkaXJlY3QgPSBieXRlY29k
ZS5tZXRhZGF0YShjb2RlQmxvY2spLmZsYWdzICYgUHV0QnlJZElzRGlyZWN0OworICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CisgICAgICAgICAgICBOb2Rl
KiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNv
ZGUubV9wcm9wZXJ0eV07CisgICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jaykubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKIAogICAgICAgICAgICAg
UHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCkBAIC01
NTY2LDEwICs1NTY2LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKIAogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZFdpdGhUaGlz
PigpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAgICAg
ICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS50aGlzVmFsdWUpOwotICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUudmFsdWUpOwotICAgICAgICAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJl
bWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0
ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29k
ZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5t
X3ZhbHVlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3Byb3BlcnR5XTsKIAogICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkV2l0aFRoaXMsIE9wSW5mbyhpZGVudGlmaWVyTnVt
YmVyKSwgYmFzZSwgdGhpc1ZhbHVlLCB2YWx1ZSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9wdXRfYnlfaWRfd2l0aF90aGlzKTsKQEAgLTU1ODUsMTEgKzU1ODUsMTEgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2dl
dHRlcl9zZXR0ZXJfYnlfaWQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICAgICAgICAgIE5v
ZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNv
ZGUucHJvcGVydHldOwotICAgICAgICAgICAgTm9kZSogZ2V0dGVyID0gZ2V0KGJ5dGVjb2RlLmdl
dHRlcik7Ci0gICAgICAgICAgICBOb2RlKiBzZXR0ZXIgPSBnZXQoYnl0ZWNvZGUuc2V0dGVyKTsK
LSAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0R2V0dGVyU2V0dGVyQnlJZCwgT3BJbmZvKGlkZW50
aWZpZXJOdW1iZXIpLCBPcEluZm8oYnl0ZWNvZGUuYXR0cmlidXRlcyksIGJhc2UsIGdldHRlciwg
c2V0dGVyKTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9w
LT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3Byb3BlcnR5XTsKKyAgICAgICAgICAgIE5v
ZGUqIGdldHRlciA9IGdldChieXRlY29kZS5tX2dldHRlcik7CisgICAgICAgICAgICBOb2RlKiBz
ZXR0ZXIgPSBnZXQoYnl0ZWNvZGUubV9zZXR0ZXIpOworICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRHZXR0ZXJTZXR0ZXJCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhieXRl
Y29kZS5tX2F0dHJpYnV0ZXMpLCBiYXNlLCBnZXR0ZXIsIHNldHRlcik7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk7CiAgICAgICAgIH0KIApAQCAt
NTYwMywzMSArNTYwMywzMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0
ZWNvZGUucHJvcGVydHldOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFw
aChEZWxldGVCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UpKTsKKyAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1h
cFtieXRlY29kZS5tX3Byb3BlcnR5XTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChEZWxldGVCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2RlbF9ieV9pZCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX2RlbF9ieV92YWw6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0gICAgICAgICAgICBOb2RlKiBi
YXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KGJ5
dGVjb2RlLnByb3BlcnR5KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3Jh
cGgoRGVsZXRlQnlWYWwsIGJhc2UsIGtleSkpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdl
dChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KGJ5dGVjb2Rl
Lm1fcHJvcGVydHkpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBo
KERlbGV0ZUJ5VmFsLCBiYXNlLCBrZXkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Rl
bF9ieV92YWwpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6IHsK
ICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJv
ZmlsZVR5cGU+KCk7CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZVRvUHJvZmlsZSA9IGdldChi
eXRlY29kZS50YXJnZXQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChQcm9maWxlVHlwZSwgT3BJ
bmZvKG1ldGFkYXRhLnR5cGVMb2NhdGlvbiksIHZhbHVlVG9Qcm9maWxlKTsKKyAgICAgICAgICAg
IE5vZGUqIHZhbHVlVG9Qcm9maWxlID0gZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUHJvZmlsZVR5cGUsIE9wSW5mbyhtZXRhZGF0YS5tX3R5cGVMb2NhdGlv
biksIHZhbHVlVG9Qcm9maWxlKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Byb2ZpbGVf
dHlwZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93
OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICAgICAgICAgIEJhc2ljQmxvY2tMb2NhdGlvbiog
YmFzaWNCbG9ja0xvY2F0aW9uID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5iYXNpY0Js
b2NrTG9jYXRpb247CisgICAgICAgICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tM
b2NhdGlvbiA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9iYXNpY0Jsb2NrTG9jYXRp
b247CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFByb2ZpbGVDb250cm9sRmxvdywgT3BJbmZvKGJh
c2ljQmxvY2tMb2NhdGlvbikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHJvZmlsZV9j
b250cm9sX2Zsb3cpOwogICAgICAgICB9CkBAIC01NjM3LDcgKzU2MzcsNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3Bfam1wOiB7CiAg
ICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm1wPigpOwotICAg
ICAgICAgICAgaW50IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQp
OworICAgICAgICAgICAgaW50IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5t
X3RhcmdldCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJ
bmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAocmVsYXRpdmVPZmZzZXQg
PD0gMCkKICAgICAgICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7CkBAIC01NjQ2LDI0ICs1
NjQ2LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAg
ICAgICBjYXNlIG9wX2p0cnVlOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRp
dmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2Rl
KiBjb25kaXRpb24gPSBnZXQoYnl0ZWNvZGUuY29uZGl0aW9uKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBnZXQoYnl0ZWNvZGUubV9jb25kaXRpb24pOwogICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2p0cnVl
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7CiAgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJn
ZXQpOwotICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGJ5dGVjb2RlLmNvbmRpdGlv
bik7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0
ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGJ5dGVj
b2RlLm1fY29uZGl0aW9uKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8o
YnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBt
X2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAg
ICBMQVNUX09QQ09ERShvcF9qZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9q
ZXFfbnVsbDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXFOdWxsPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQg
PSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChieXRlY29kZS52YWx1ZSk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNl
dCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogdmFs
dWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBOb2RlKiBudWxsQ29uc3Rh
bnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpOwogICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBu
dWxsQ29uc3RhbnQpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFu
Y2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKQEAgLTU2NzIsOCArNTY3
Miw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAg
ICBjYXNlIG9wX2puZXFfbnVsbDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJl
bGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUudmFsdWUpOworICAgICAgICAgICAgdW5zaWduZWQg
cmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICAgICAg
ICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgTm9k
ZSogbnVsbENvbnN0YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFu
dE51bGwpKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFy
ZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50KTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNo
LCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+
c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CkBA
IC01NjgyLDkgKzU2ODIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgY2FzZSBvcF9qbGVzczogewogICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbGVzcz4oKTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAgICAg
ICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zm
c2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5
dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgo
Q29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJl
bnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF9qbGVzcyk7CkBAIC01NjkyLDkgKzU2OTIsOSBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9q
bGVzc2VxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpsZXNzZXE+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9
IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJo
cyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0
ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1f
bGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9wMSwg
b3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YSht
X2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJ
bnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09E
RShvcF9qbGVzc2VxKTsKQEAgLTU3MDIsOSArNTcwMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2pncmVhdGVyOiB7CiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpncmVhdGVy
PigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5
dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhz
KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAg
ICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAg
ICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpOwogICAgICAg
ICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4
ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVy
KTsKQEAgLTU3MTIsOSArNTcxMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmdyZWF0ZXJlcT4oKTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50
YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAg
ICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkp
KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVyZXEpOwpA
QCAtNTcyMiw5ICs1NzIyLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogCiAgICAgICAgIGNhc2Ugb3BfamVxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAgICAgICAg
ICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0
ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29t
cGFyZUVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5k
ZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAg
ICAgTEFTVF9PUENPREUob3BfamVxKTsKQEAgLTU3MzIsOSArNTczMiw5IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2pzdHJpY3Rl
cTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKc3RyaWN0ZXE+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1
bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChi
eXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7
CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNv
ZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAg
ICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgb3AxLCBv
cDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1f
Y3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2pzdHJpY3RlcSk7CkBAIC01NzQyLDkgKzU3NDIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5sZXNzPigp
OwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVj
b2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsK
LSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAgICAg
dW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAgICAg
ICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29u
ZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwogICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgY3Vy
cmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQp
KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzcyk7CkBAIC01
NzUyLDkgKzU3NTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAKICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcTogewogICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmxlc3NlcT4oKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZl
T2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0
KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3Jh
cGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFu
Y2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzc2VxKTsKQEAgLTU3NjIsOSArNTc2Miw5
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBj
YXNlIG9wX2puZ3JlYXRlcjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKbmdyZWF0ZXI+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0
KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1
bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5t
X3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVH
cmVhdGVyLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwg
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAg
ICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVyKTsKQEAgLTU3NzIsOSArNTc3Miw5IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2pu
Z3JlYXRlcmVxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZ3JlYXRlcmVxPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVP
ZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRl
Y29kZS5yaHMpOworICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFy
Z2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRl
Y29kZS5tX2xocyk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMp
OwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRl
ckVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJy
YW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9j
dXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAg
TEFTVF9PUENPREUob3Bfam5ncmVhdGVyZXEpOwpAQCAtNTc4Miw5ICs1NzgyLDkgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3Bfam5l
cTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbmVxPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFy
Z2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNv
ZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAg
ICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1f
dGFyZ2V0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7Cisg
ICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAg
Tm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKTsKICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRl
eCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZl
T2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVxKTsK
QEAgLTU3OTIsOSArNTc5Miw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKIAogICAgICAgICBjYXNlIG9wX2puc3RyaWN0ZXE6IHsKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJn
ZXQpOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAg
ICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAg
ICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9
IGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50
SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBj
b25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5zdHJpY3RlcSk7CkBAIC01
ODAyLDkgKzU4MDIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAKICAgICAgICAgY2FzZSBvcF9qYmVsb3c6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmJlbG93PigpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAg
ICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9w
MiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZz
ZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0
ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChD
b21wYXJlQmVsb3csIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJl
bnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF9qYmVsb3cpOwpAQCAtNTgxMiw5ICs1ODEyLDkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3Bf
amJlbG93ZXE6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmJlbG93ZXE+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNl
dCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9
IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2Rl
LnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQo
Ynl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAg
ICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVCZWxvd0VxLCBv
cDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERh
dGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3BfamJlbG93ZXEpOwpAQCAtNTgyNCw4ICs1ODI0LDggQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CiAgICAgICAgICAgICBTd2l0Y2hE
YXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFkZCgpOwogICAgICAgICAgICAgZGF0
YS5raW5kID0gU3dpdGNoSW1tOwotICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtieXRlY29kZS50YWJsZUluZGV4XTsKLSAg
ICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRl
eCArIGp1bXBUYXJnZXQoYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCkpOworICAgICAgICAgICAgZGF0
YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtieXRl
Y29kZS5tX3RhYmxlSW5kZXhdOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRl
Y29kZUluZGV4KG1fY3VycmVudEluZGV4ICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRP
ZmZzZXQpKTsKICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgICAgIGlmICghdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKQEAgLTU4MzUs
NyArNTgzNSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5h
cHBlbmQoU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgobV9ncmFwaC5mcmVlemUoanNOdW1i
ZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGFibGUubWluICsgaSkpKSwgdGFyZ2V0KSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwg
Z2V0KGJ5dGVjb2RlLnNjcnV0aW5lZSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gs
IE9wSW5mbygmZGF0YSksIGdldChieXRlY29kZS5tX3NjcnV0aW5lZSkpOwogICAgICAgICAgICAg
Zmx1c2hJZlRlcm1pbmFsKGRhdGEpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNo
X2ltbSk7CiAgICAgICAgIH0KQEAgLTU4NDQsOCArNTg0NCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKICAgICAgICAgICAgIFN3aXRjaERh
dGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRh
LmtpbmQgPSBTd2l0Y2hDaGFyOwotICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtieXRlY29kZS50YWJsZUluZGV4XTsKLSAg
ICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRl
eCArIGp1bXBUYXJnZXQoYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCkpOworICAgICAgICAgICAgZGF0
YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtieXRl
Y29kZS5tX3RhYmxlSW5kZXhdOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRl
Y29kZUluZGV4KG1fY3VycmVudEluZGV4ICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1bHRP
ZmZzZXQpKTsKICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVCbG9j
ay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgICAgIGlmICghdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKQEAgLTU4NTYs
NyArNTg1Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAgU3dp
dGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0
cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0KGJ5dGVjb2RlLnNjcnV0aW5l
ZSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmZGF0YSksIGdldChi
eXRlY29kZS5tX3NjcnV0aW5lZSkpOwogICAgICAgICAgICAgZmx1c2hJZlRlcm1pbmFsKGRhdGEp
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2NoYXIpOwogICAgICAgICB9CkBA
IC01ODY1LDggKzU4NjUsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN3aXRjaFN0cmluZz4oKTsKICAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFw
aC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hTdHJp
bmc7Ci0gICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBieXRlY29kZS50YWJsZUlu
ZGV4OwotICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1fY3Vy
cmVudEluZGV4ICsganVtcFRhcmdldChieXRlY29kZS5kZWZhdWx0T2Zmc2V0KSk7CisgICAgICAg
ICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CisgICAg
ICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgg
KyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCkpOwogICAgICAgICAgICAgU3Ry
aW5nSnVtcFRhYmxlJiB0YWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
ZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3Ry
aW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFi
bGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJsZS5l
bmQoKTsKQEAgLTU4NzcsNyArNTg3Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAgICAg
ICAgICAgICAgICAgU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6Omtu
b3duU3RyaW5nSW1wbChpdGVyLT5rZXkuZ2V0KCkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoYnl0ZWNv
ZGUuc2NydXRpbmVlKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZk
YXRhKSwgZ2V0KGJ5dGVjb2RlLm1fc2NydXRpbmVlKSk7CiAgICAgICAgICAgICBmbHVzaElmVGVy
bWluYWwoZGF0YSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfc3RyaW5nKTsK
ICAgICAgICAgfQpAQCAtNTg4NywxNCArNTg4NywxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT50
ZXJtaW5hbCgpKTsKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBTaW1wbGUgY2FzZTogd2UgYXJlIGp1c3QgcHJvZHVjaW5nIGEgcmV0dXJu
Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChieXRlY29kZS52YWx1ZSkp
OworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBnZXQoYnl0ZWNvZGUubV92YWx1
ZSkpOwogICAgICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAgICAgICAgICAgICAgICAg
TEFTVF9PUENPREUob3BfcmV0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmx1c2hG
b3JSZXR1cm4oKTsKICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZh
bHVlLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1Rv
cC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KGJ5dGVjb2RlLnZhbHVlKSwgSW1tZWRpYXRlU2V0V2l0aEZs
dXNoKTsKKyAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1
cm5WYWx1ZSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gpOwog
CiAgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY29udGludWF0aW9uQmxvY2sg
JiYgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSAhPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhbiBlYXJseSByZXR1cm4gZnJvbSBhbiBpbmxpbmVkIGZ1bmN0
aW9uIGFuZCB3ZSBkbyBub3QgaGF2ZSBhIGNvbnRpbnVhdGlvbiBibG9jaywgc28gd2UgbXVzdCBh
bGxvY2F0ZSBvbmUuCkBAIC01OTEzLDE4ICs1OTEzLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2VuZDoKICAg
ICAgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAgICAgYWRkVG9H
cmFwaChSZXR1cm4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpLnZhbHVlKSk7
CisgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFbmQ+KCkubV92YWx1ZSkpOwogICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4oKTsKICAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2VuZCk7CiAKICAgICAgICAgY2FzZSBvcF90aHJvdzoK
LSAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3csIGdldChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVGhyb3c+KCkudmFsdWUpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3csIGdldChj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCkubV92YWx1ZSkpOwogICAgICAgICAgICAg
Zmx1c2hGb3JUZXJtaW5hbCgpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfdGhyb3cpOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOiB7CiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93U3Rh
dGljRXJyb3I+KCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFRocm93U3RhdGljRXJyb3IsIE9w
SW5mbyhieXRlY29kZS5lcnJvclR5cGUpLCBnZXQoYnl0ZWNvZGUubWVzc2FnZSkpOworICAgICAg
ICAgICAgYWRkVG9HcmFwaChUaHJvd1N0YXRpY0Vycm9yLCBPcEluZm8oYnl0ZWNvZGUubV9lcnJv
clR5cGUpLCBnZXQoYnl0ZWNvZGUubV9tZXNzYWdlKSk7CiAgICAgICAgICAgICBmbHVzaEZvclRl
cm1pbmFsKCk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19zdGF0aWNfZXJyb3Ip
OwogICAgICAgICB9CkBAIC01OTQ0LDcgKzU5NDQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJl
bnRCbG9jay0+c2l6ZSgpIHx8IChtX2dyYXBoLmNvbXBpbGF0aW9uKCkgJiYgbV9jdXJyZW50Qmxv
Y2stPnNpemUoKSA9PSAxICYmIG1fY3VycmVudEJsb2NrLT5hdCgwKS0+b3AoKSA9PSBDb3VudEV4
ZWN1dGlvbikpOwogCi0gICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBi
dWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLmJ1ZmZlcjsKKyAgICAgICAgICAg
IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAg
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gpOyAvLyBUaGlzIGNhdGNoIGhhcyB5ZXQg
dG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4gdGhy
ZWFkLgpAQCAtNjExNywyMSArNjExNywyMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsK
ICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2Fs
bEV2YWw+KCk7Ci0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUuYXJn
djsKLSAgICAgICAgICAgIGFkZENhbGwoYnl0ZWNvZGUuZHN0LCBDYWxsRXZhbCwgbnVsbHB0ciwg
Z2V0KGJ5dGVjb2RlLmNhbGxlZSksIGJ5dGVjb2RlLmFyZ2MsIHJlZ2lzdGVyT2Zmc2V0LCBnZXRQ
cmVkaWN0aW9uKCkpOworICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2Rl
Lm1fYXJndjsKKyAgICAgICAgICAgIGFkZENhbGwoYnl0ZWNvZGUubV9kc3QsIENhbGxFdmFsLCBu
dWxscHRyLCBnZXQoYnl0ZWNvZGUubV9jYWxsZWUpLCBieXRlY29kZS5tX2FyZ2MsIHJlZ2lzdGVy
T2Zmc2V0LCBnZXRQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2Fs
bF9ldmFsKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bfam5lcV9w
dHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIFNwZWNpYWw6OlBvaW50ZXIgc3BlY2lhbFBvaW50
ZXIgPSBieXRlY29kZS5zcGVjaWFsUG9pbnRlcjsKKyAgICAgICAgICAgIFNwZWNpYWw6OlBvaW50
ZXIgc3BlY2lhbFBvaW50ZXIgPSBieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyOwogICAgICAgICAg
ICAgQVNTRVJUKHBvaW50ZXJJc0NlbGwoc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIEpT
Q2VsbCogYWN0dWFsUG9pbnRlciA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KAogICAgICAgICAgICAg
ICAgIGFjdHVhbFBvaW50ZXJGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2ssIHNwZWNp
YWxQb2ludGVyKSk7CiAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9IG1f
Z3JhcGguZnJlZXplKGFjdHVhbFBvaW50ZXIpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRp
dmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2Rl
KiBjaGlsZCA9IGdldChieXRlY29kZS52YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5oYXNKdW1wZWQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJl
bGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIGlmIChi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1faGFzSnVtcGVkKSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFQdHIsIE9wSW5mbyhmcm96
ZW5Qb2ludGVyKSwgY2hpbGQpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBP
cEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAg
ICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwpAQCAtNjE1MSw4ICs2MTUxLDgg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlVHlwZSA9IG1l
dGFkYXRhLnJlc29sdmVUeXBlOwotICAgICAgICAgICAgICAgIGRlcHRoID0gbWV0YWRhdGEubG9j
YWxTY29wZURlcHRoOworICAgICAgICAgICAgICAgIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9y
ZXNvbHZlVHlwZTsKKyAgICAgICAgICAgICAgICBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxTY29w
ZURlcHRoOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICAgICAgICAgIGNhc2UgR2xvYmFs
VmFyOgpAQCAtNjE2MCwxNSArNjE2MCwxNSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgogICAgICAgICAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAg
ICAgICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgICAgICAgICBjb25zdGFudFNjb3BlID0gbWV0YWRhdGEuY29uc3RhbnRTY29w
ZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRTY29wZSA9IG1ldGFkYXRhLm1f
Y29uc3RhbnRTY29wZS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICAgICAgICAgIGxleGljYWxFbnZp
cm9ubWVudCA9IG1ldGFkYXRhLmxleGljYWxFbnZpcm9ubWVudC5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGV4aWNhbEVudmlyb25tZW50ID0gbWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1l
bnQuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAg
ICAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1ldGFkYXRhLnN5bWJvbFRhYmxlLmdldCgp
OworICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1ldGFkYXRhLm1fc3ltYm9sVGFi
bGUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjE3Niw4ICs2MTc2LDggQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAobmVlZHNEeW5hbWljTG9va3VwKHJlc29sdmVUeXBlLCBvcF9yZXNv
bHZlX3Njb3BlKSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIg
PSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS52YXJdOwotICAg
ICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoUmVzb2x2ZVNjb3BlLCBP
cEluZm8oaWRlbnRpZmllck51bWJlciksIGdldChieXRlY29kZS5zY29wZSkpKTsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9p
ZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUubV92YXJdOworICAgICAgICAgICAgICAgIHNldChieXRl
Y29kZS5tX2RzdCwgYWRkVG9HcmFwaChSZXNvbHZlU2NvcGUsIE9wSW5mbyhpZGVudGlmaWVyTnVt
YmVyKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfcmVzb2x2ZV9zY29wZSk7CiAgICAgICAgICAgICB9CiAKQEAgLTYxODksNyArNjE4OSw3
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTMzNDcKICAgICAg
ICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c2NyaXB0TW9kZSgpICE9
IEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJlc29s
dmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0
ZWNvZGUudmFyXTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLm1fdmFyXTsK
ICAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5nbG9iYWxQcm9wZXJ0aWVzKCkuYWRkTGF6aWx5KERlc2lyZWRHbG9iYWxQ
cm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgICAgICAg
ICB9CkBAIC02MjA0LDIxICs2MjA0LDIxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNj
b3BlKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlID09IEpT
U2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwg
d2Vha0pTQ29uc3RhbnQoY29uc3RhbnRTY29wZSkpOwotICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLnNjb3BlKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLm1fZHN0LCB3ZWFrSlNDb25zdGFudChjb25zdGFudFNjb3BlKSk7CisgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUubV9zY29wZSkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBNb2R1bGVW
YXI6IHsKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWUgb2YgdGhlICJzY29wZSIg
dmlydHVhbCByZWdpc3RlciBpcyBub3QgdXNlZCBpbiBMTEludCAvIGJhc2VsaW5lIG9wX3Jlc29s
dmVfc2NvcGUgd2l0aCBNb2R1bGVWYXIsCiAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBub3Qg
dG8ga2VlcCBpdCBhbGl2ZSBieSB0aGUgUGhhbnRvbSBub2RlLgogICAgICAgICAgICAgICAgIC8v
IE1vZHVsZSBlbnZpcm9ubWVudCBpcyBhbHJlYWR5IHN0cm9uZ2x5IHJlZmVyZW5jZWQgYnkgdGhl
IENvZGVCbG9jay4KLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCB3ZWFrSlNDb25z
dGFudChsZXhpY2FsRW52aXJvbm1lbnQpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIHdlYWtKU0NvbnN0YW50KGxleGljYWxFbnZpcm9ubWVudCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVW
YXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbG9j
YWxCYXNlID0gZ2V0KGJ5dGVjb2RlLnNjb3BlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBsb2Nh
bEJhc2UgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQaGFudG9tLCBsb2NhbEJhc2UpOyAvLyBPU1IgZXhpdCBjYW5ub3QgaGFuZGxlIHJlc29sdmVf
c2NvcGUgb24gYSBEQ0UnZCBzY29wZS4KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvLyBXZSBoYXZlIHZhcmlvdXMgZm9ybXMgb2YgY29uc3RhbnQgZm9sZGluZyBoZXJlLiBUaGlz
IGlzIG5lY2Vzc2FyeSB0byBhdm9pZApAQCAtNjIyNywyNiArNjIyNywyNiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIEluZmVy
cmVkVmFsdWUqIHNpbmdsZXRvbiA9IHN5bWJvbFRhYmxlLT5zaW5nbGV0b25TY29wZSgpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNpbmdsZXRvbi0+aW5mZXJyZWRW
YWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCku
YWRkTGF6aWx5KHNpbmdsZXRvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUuZHN0LCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fZHN0LCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgaWYgKEpTU2NvcGUqIHNjb3BlID0gbG9jYWxCYXNlLT5keW5h
bWljQ2FzdENvbnN0YW50PEpTU2NvcGUqPigqbV92bSkpIHsKICAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBuID0gZGVwdGg7IG4tLTspCiAgICAgICAgICAgICAgICAgICAgICAgICBz
Y29wZSA9IHNjb3BlLT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5k
c3QsIHdlYWtKU0NvbnN0YW50KHNjb3BlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldChieXRl
Y29kZS5tX2RzdCwgd2Vha0pTQ29uc3RhbnQoc2NvcGUpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
biA9IGRlcHRoOyBuLS07KQogICAgICAgICAgICAgICAgICAgICBsb2NhbEJhc2UgPSBhZGRUb0dy
YXBoKFNraXBTY29wZSwgbG9jYWxCYXNlKTsKLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
ZHN0LCBsb2NhbEJhc2UpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbG9j
YWxCYXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgICAgICAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUuc2NvcGUpKTsKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20sIGdldChieXRlY29kZS5tX3Njb3BlKSk7CiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5k
c3QsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSkpOworICAg
ICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9jb25zdGFudE51bGwpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC02MjU3LDkgKzYyNTcsOSBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbDog
ewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BS
ZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpOwotICAgICAgICAgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJl
bWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3By
b3BlcnR5XTsKIAotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChSZXNv
bHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsLCBPcEluZm8oaWRlbnRpZmllck51bWJl
ciksIGdldChieXRlY29kZS5zY29wZSkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsLCBPcElu
Zm8oaWRlbnRpZmllck51bWJlciksIGdldChieXRlY29kZS5tX3Njb3BlKSkpOwogCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xf
aW5fZXZhbCk7CiAgICAgICAgIH0KQEAgLTYyNjcsNyArNjI2Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29w
ZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUudmFyXTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9w
LT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3Zhcl07CiAgICAgICAgICAgICBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJd
OwogCiAgICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZTsKQEAgLTYyNzcsMjAgKzYy
NzcsMjAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgdWludHB0cl90IG9wZXJhbmQ7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLmdldFB1
dEluZm87CisgICAgICAgICAgICAgICAgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5m
bzsKICAgICAgICAgICAgICAgICByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgcmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2ludHMgPSBt
ZXRhZGF0YS53YXRjaHBvaW50U2V0OworICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50cyA9
IG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldDsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNv
bHZlVHlwZSAhPSBVbnJlc29sdmVkUHJvcGVydHkgJiYgcmVzb2x2ZVR5cGUgIT0gVW5yZXNvbHZl
ZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0dXJlID0gbWV0YWRhdGEuc3RydWN0dXJlLmdldCgpOwotICAgICAgICAgICAgICAgIG9wZXJh
bmQgPSBtZXRhZGF0YS5vcGVyYW5kOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBt
ZXRhZGF0YS5tX3N0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBvcGVyYW5kID0gbWV0
YWRhdGEubV9vcGVyYW5kOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobmVlZHNE
eW5hbWljTG9va3VwKHJlc29sdmVUeXBlLCBvcF9nZXRfZnJvbV9zY29wZSkpIHsKICAgICAgICAg
ICAgICAgICB1aW50NjRfdCBvcEluZm8xID0gbWFrZUR5bmFtaWNWYXJPcEluZm8oaWRlbnRpZmll
ck51bWJlciwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLmRzdCwKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXREeW5hbWlj
VmFyLCBPcEluZm8ob3BJbmZvMSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KGJ5dGVjb2RlLnNj
b3BlKSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwKKyAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChHZXREeW5hbWljVmFyLCBPcEluZm8ob3BJbmZvMSksIE9wSW5m
byhwcmVkaWN0aW9uKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfZ2V0X2Zyb21fc2NvcGUpOwogICAgICAgICAgICAgfQogCkBAIC02MzEy
LDIxICs2MzEyLDIxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnN0YXRlKCkgIT0gR2V0QnlJZFN0YXR1czo6U2lt
cGxlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEKICAg
ICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLnNpemUoKSAhPSAx
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoR2V0
QnlJZEZsdXNoLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
Z2V0KGJ5dGVjb2RlLnNjb3BlKSkpOworICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoR2V0QnlJZEZsdXNoLCBPcEluZm8oaWRlbnRpZmllck51bWJlciks
IE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIE5v
ZGUqIGJhc2UgPSB3ZWFrSlNDb25zdGFudChnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAgICAg
IE5vZGUqIHJlc3VsdCA9IGxvYWQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwg
c3RhdHVzWzBdKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChieXRl
Y29kZS5zY29wZSkpOwotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUubV9zY29w
ZSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgcmVzdWx0KTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xvYmFs
VmFyOgogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgog
ICAgICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLnNjb3BlKSk7CisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUubV9zY29wZSkpOwogICAgICAgICAgICAg
ICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgICAgICAgICAgICAgU2NvcGVP
ZmZzZXQgb2Zmc2V0OwogICAgICAgICAgICAgICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qq
IHNjb3BlT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihKU1Njb3Bl
Ojpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jaykpOwpAQCAtNjM4Miw3ICs2MzgyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gcG9pbnRlci0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSh3YXRj
aHBvaW50U2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIHdl
YWtKU0NvbnN0YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIHdlYWtKU0NvbnN0YW50KHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTYz
OTYsMTMgKzYzOTYsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChub2RlVHlwZSwgT3BJ
bmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgICAgIGlmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrTm90RW1wdHksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUuZHN0LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoYnl0ZWNvZGUuc2NvcGUpOworICAgICAgICAg
ICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9IGdldChieXRlY29kZS5tX3Njb3BlKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJZGVhbGx5IHdlIHdvdWxkbid0IGhhdmUgdG8g
ZG8gdGhpcyBQaGFudG9tLiBCdXQ6CiAgICAgICAgICAgICAgICAgLy8KQEAgLTY0MTgsMTEgKzY0
MTgsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgICAgIC8vIHByZWRpY3Rpb24sIHdlJ2Qgb3RoZXJ3aXNlIHRoaW5rIHRoYXQgaXQgaGFz
IHRvIGV4aXQuIFRoZW4gd2hlbiBpdCBkaWQgZXhlY3V0ZSwgd2UKICAgICAgICAgICAgICAgICAv
LyB3b3VsZCByZWNvbXBpbGUuIEJ1dCBpZiB3ZSBjYW4gZm9sZCBpdCBoZXJlLCB3ZSBhdm9pZCB0
aGUgZXhpdC4KICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5
R2V0Q29uc3RhbnRDbG9zdXJlVmFyKHNjb3BlTm9kZSwgU2NvcGVPZmZzZXQob3BlcmFuZCkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIHdlYWtKU0NvbnN0YW50KHZh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgd2Vha0pTQ29u
c3RhbnQodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVk
aWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwKKyAgICAgICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
R2V0Q2xvc3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIHNjb3Bl
Tm9kZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNjQzOSw3
ICs2NDM5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgICAgICAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IGJ5dGVjb2RlLnZhcjsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBieXRlY29kZS5tX3ZhcjsKICAgICAgICAgICAgIGlm
IChpZGVudGlmaWVyTnVtYmVyICE9IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGlkZW50aWZp
ZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtpZGVudGlmaWVy
TnVtYmVyXTsKICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQ7CkBAIC02NDU1LDEz
ICs2NDU1LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIHVpbnRwdHJfdCBvcGVyYW5kOwogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGdldFB1dEluZm8gPSBtZXRhZGF0YS5n
ZXRQdXRJbmZvOworICAgICAgICAgICAgICAgIGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dldFB1
dEluZm87CiAgICAgICAgICAgICAgICAgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVU
eXBlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCBy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IHJlc29sdmVU
eXBlID09IExvY2FsQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KQotICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50cyA9IG1ldGFkYXRhLndhdGNocG9pbnRT
ZXQ7CisgICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRzID0gbWV0YWRhdGEubV93YXRjaHBv
aW50U2V0OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc29sdmVUeXBlICE9IFVucmVzb2x2
ZWRQcm9wZXJ0eSAmJiByZXNvbHZlVHlwZSAhPSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5z
dHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgb3BlcmFuZCA9IG1ldGFkYXRhLm9wZXJh
bmQ7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fc3RydWN0dXJl
LmdldCgpOworICAgICAgICAgICAgICAgIG9wZXJhbmQgPSBtZXRhZGF0YS5tX29wZXJhbmQ7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CkBAIC02NDY5
LDcgKzY0NjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICBpZiAobmVlZHNEeW5hbWljTG9va3VwKHJlc29sdmVUeXBlLCBvcF9wdXRfdG9f
c2NvcGUpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50aWZpZXJOdW1iZXIgIT0gVUlO
VF9NQVgpOwogICAgICAgICAgICAgICAgIHVpbnQ2NF90IG9wSW5mbzEgPSBtYWtlRHluYW1pY1Zh
ck9wSW5mbyhpZGVudGlmaWVyTnVtYmVyLCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXREeW5hbWljVmFyLCBPcEluZm8ob3BJbmZvMSksIE9wSW5m
bygpLCBnZXQoYnl0ZWNvZGUuc2NvcGUpLCBnZXQoYnl0ZWNvZGUudmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFB1dER5bmFtaWNWYXIsIE9wSW5mbyhvcEluZm8xKSwgT3BJbmZv
KCksIGdldChieXRlY29kZS5tX3Njb3BlKSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpKTsKICAgICAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfdG9fc2NvcGUpOwogICAgICAgICAgICAgfQog
CkBAIC02NDg5LDEzICs2NDg5LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMQog
ICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50
OjpSZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmUoKS5z
aXplKCkgIT0gMSkgewotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9w
SW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgZ2V0KGJ5dGVjb2RlLnNjb3BlKSwgZ2V0KGJ5dGVjb2Rl
LnZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZv
KGlkZW50aWZpZXJOdW1iZXIpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSksIGdldChieXRlY29kZS5t
X3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gd2Vha0pTQ29uc3RhbnQoZ2xvYmFsT2JqZWN0
KTsKLSAgICAgICAgICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0dXNb
MF0sIGdldChieXRlY29kZS52YWx1ZSkpOworICAgICAgICAgICAgICAgIHN0b3JlKGJhc2UsIGlk
ZW50aWZpZXJOdW1iZXIsIHN0YXR1c1swXSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpKTsKICAgICAg
ICAgICAgICAgICAvLyBLZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KLSAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChieXRlY29kZS5zY29wZSkpOworICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKQEAgLTY1MTMsMjEgKzY1MTMsMjEgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVu
dHJ5IGVudHJ5ID0gc2NvcGVPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVudHJ5LCB3YXRjaHBvaW50cyA9PSBlbnRyeS53
YXRjaHBvaW50U2V0KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZU5vZGUgPSBnZXQoYnl0ZWNvZGUudmFsdWUpOworICAgICAgICAgICAgICAgIE5vZGUq
IHZhbHVlTm9kZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFB1dEdsb2JhbFZhcmlhYmxlLCBPcEluZm8ob3BlcmFuZCksIHdlYWtKU0NvbnN0YW50
KHNjb3BlT2JqZWN0KSwgdmFsdWVOb2RlKTsKICAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2lu
dHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBNdXN0IGhhcHBlbiBhZnRlciB0aGUgc3RvcmUuIFNlZSBjb21tZW50IGZv
ciBHZXRHbG9iYWxWYXIuCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3Jp
dGUsIE9wSW5mbyh3YXRjaHBvaW50cykpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAvLyBLZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KLSAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChieXRlY29kZS5zY29wZSkpOworICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgTG9jYWxDbG9z
dXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgICAgIE5vZGUq
IHNjb3BlTm9kZSA9IGdldChieXRlY29kZS5zY29wZSk7Ci0gICAgICAgICAgICAgICAgTm9kZSog
dmFsdWVOb2RlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBz
Y29wZU5vZGUgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgICAgICAgICAgTm9kZSog
dmFsdWVOb2RlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogCiAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQdXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIHNjb3BlTm9kZSwgdmFsdWVO
b2RlKTsKIApAQCAtNjU5MSwyOCArNjU5MSwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9u
bWVudDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7Ci0gICAgICAgICAgICBBU1NFUlQoYnl0
ZWNvZGUuc3ltYm9sVGFibGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLmluaXRpYWxWYWx1ZS5p
c0NvbnN0YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0gbV9n
cmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0
YW50KGJ5dGVjb2RlLnN5bWJvbFRhYmxlLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBGcm96ZW5W
YWx1ZSogaW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLmluaXRpYWxWYWx1ZS5vZmZzZXQo
KSkpOwotICAgICAgICAgICAgTm9kZSogc2NvcGUgPSBnZXQoYnl0ZWNvZGUuc2NvcGUpOworICAg
ICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUuaXNDb25zdGFudCgpICYmIGJ5
dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBGcm96ZW5W
YWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZS5vZmZzZXQo
KSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRl
Y29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAgICAgICAgICAgTm9kZSogc2NvcGUg
PSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICBOb2RlKiBsZXhpY2FsRW52aXJv
bm1lbnQgPSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIE9wSW5mbyhzeW1ib2xUYWJsZSks
IE9wSW5mbyhpbml0aWFsVmFsdWUpLCBzY29wZSk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
ZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0
LCBsZXhpY2FsRW52aXJvbm1lbnQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3JlYXRl
X2xleGljYWxfZW52aXJvbm1lbnQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wdXNo
X3dpdGhfc2NvcGU6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGN1cnJlbnRT
Y29wZSA9IGdldChieXRlY29kZS5jdXJyZW50U2NvcGUpOwotICAgICAgICAgICAgTm9kZSogb2Jq
ZWN0ID0gZ2V0KGJ5dGVjb2RlLm5ld1Njb3BlKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5k
c3QsIGFkZFRvR3JhcGgoUHVzaFdpdGhTY29wZSwgY3VycmVudFNjb3BlLCBvYmplY3QpKTsKKyAg
ICAgICAgICAgIE5vZGUqIGN1cnJlbnRTY29wZSA9IGdldChieXRlY29kZS5tX2N1cnJlbnRTY29w
ZSk7CisgICAgICAgICAgICBOb2RlKiBvYmplY3QgPSBnZXQoYnl0ZWNvZGUubV9uZXdTY29wZSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoUHVzaFdpdGhTY29w
ZSwgY3VycmVudFNjb3BlLCBvYmplY3QpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1
c2hfd2l0aF9zY29wZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dldF9wYXJlbnRf
c2NvcGU6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7Ci0gICAgICAgICAgICBOb2RlKiBjdXJyZW50U2NvcGUg
PSBnZXQoYnl0ZWNvZGUuc2NvcGUpOworICAgICAgICAgICAgTm9kZSogY3VycmVudFNjb3BlID0g
Z2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbmV3U2NvcGUgPSBhZGRU
b0dyYXBoKFNraXBTY29wZSwgY3VycmVudFNjb3BlKTsKLSAgICAgICAgICAgIHNldChieXRlY29k
ZS5kc3QsIG5ld1Njb3BlKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbmV3U2Nv
cGUpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjdXJyZW50U2NvcGUpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3BhcmVudF9zY29wZSk7CiAgICAgICAgIH0KQEAg
LTY2MjksMTQgKzY2MjksMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9uLT5z
Y29wZSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXN1bHQgPSBhZGRU
b0dyYXBoKEdldFNjb3BlLCBjYWxsZWUpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgcmVzdWx0KTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9zY29wZSk7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIG9wX2FyZ3VtZW50X2NvdW50OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgICAgICAgICBOb2Rl
KiBzdWIgPSBhZGRUb0dyYXBoKEFyaXRoU3ViLCBPcEluZm8oQXJpdGg6OlVuY2hlY2tlZCksIE9w
SW5mbyhTcGVjSW50MzJPbmx5KSwgZ2V0QXJndW1lbnRDb3VudCgpLCBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
LmRzdCwgc3ViKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgc3ViKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2FyZ3VtZW50X2NvdW50KTsKICAgICAgICAgfQogCkBAIC02
NjQ0LDE1ICs2NjQ0LDE1IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q3JlYXRlRGlyZWN0QXJndW1lbnRzPigpOwogICAgICAgICAgICAgbm90aWNlQXJndW1lbnRzVXNl
KCk7CiAgICAgICAgICAgICBOb2RlKiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0
ZURpcmVjdEFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBjcmVhdGVB
cmd1bWVudHMpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBjcmVhdGVBcmd1bWVu
dHMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVk
X2FyZ3VtZW50czogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCk7CiAgICAgICAgICAgICBub3RpY2VB
cmd1bWVudHNVc2UoKTsKLSAgICAgICAgICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50cyA9IGFkZFRv
R3JhcGgoQ3JlYXRlU2NvcGVkQXJndW1lbnRzLCBnZXQoYnl0ZWNvZGUuc2NvcGUpKTsKLSAgICAg
ICAgICAgIHNldChieXRlY29kZS5kc3QsIGNyZWF0ZUFyZ3VtZW50cyk7CisgICAgICAgICAgICBO
b2RlKiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZVNjb3BlZEFyZ3VtZW50cywg
Z2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
Y3JlYXRlQXJndW1lbnRzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9zY29w
ZWRfYXJndW1lbnRzKTsKICAgICAgICAgfQogCkBAIC02NjYwLDE4ICs2NjYwLDE4IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRzPigp
OwogICAgICAgICAgICAgbm90aWNlQXJndW1lbnRzVXNlKCk7CiAgICAgICAgICAgICBOb2RlKiBj
cmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZUNsb25lZEFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBjcmVhdGVBcmd1bWVudHMpOworICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fZHN0LCBjcmVhdGVBcmd1bWVudHMpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4o
KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsCisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICAg
ICAgR2V0RnJvbUFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGJ5dGVjb2Rl
LmluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGJ5dGVjb2RlLm1faW5kZXgpLAog
ICAgICAgICAgICAgICAgICAgICBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwKLSAgICAgICAgICAg
ICAgICAgICAgZ2V0KGJ5dGVjb2RlLmFyZ3VtZW50cykpKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2V0KGJ5dGVjb2RlLm1fYXJndW1lbnRzKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02Njc5LDkg
KzY2NzksOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJn
dW1lbnRzPigpOwogICAgICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICBQdXRU
b0FyZ3VtZW50cywKLSAgICAgICAgICAgICAgICBPcEluZm8oYnl0ZWNvZGUuaW5kZXgpLAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5hcmd1bWVudHMpLAotICAgICAgICAgICAgICAgIGdl
dChieXRlY29kZS52YWx1ZSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyhieXRlY29kZS5tX2lu
ZGV4KSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9hcmd1bWVudHMpLAorICAgICAg
ICAgICAgICAgIGdldChieXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9wdXRfdG9fYXJndW1lbnRzKTsKICAgICAgICAgfQogCkBAIC02Njg5LDcgKzY2ODksNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50PigpOwog
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0aGlzLT5pbmxp
bmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50OwotICAgICAgICAgICAg
aW50MzJfdCBhcmd1bWVudEluZGV4SW5jbHVkaW5nVGhpcyA9IGJ5dGVjb2RlLmluZGV4OworICAg
ICAgICAgICAgaW50MzJfdCBhcmd1bWVudEluZGV4SW5jbHVkaW5nVGhpcyA9IGJ5dGVjb2RlLm1f
aW5kZXg7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJh
bWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpc1dpdGhGaXh1cCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0aEZp
eHVwLnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleEluY2x1ZGluZ1Ro
aXMgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc1dpdGhGaXh1cCkKQEAgLTY2OTgsNyArNjY5
OCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2Nv
bnN0YW50VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBh
cmd1bWVudCA9IGFkZFRvR3JhcGgoR2V0QXJndW1lbnQsIE9wSW5mbyhhcmd1bWVudEluZGV4SW5j
bHVkaW5nVGhpcyksIE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIHNldChi
eXRlY29kZS5kc3QsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YXJndW1lbnQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2FyZ3VtZW50KTsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKQEAgLTY3
MjksNTMgKzY3MjksNTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogCiAgICAgICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigp
OwotICAgICAgICAgICAgTm9kZSogZnVuYyA9IGdldChieXRlY29kZS5mdW5jdGlvbik7Ci0gICAg
ICAgICAgICBOb2RlKiBuYW1lID0gZ2V0KGJ5dGVjb2RlLm5hbWUpOworICAgICAgICAgICAgTm9k
ZSogZnVuYyA9IGdldChieXRlY29kZS5tX2Z1bmN0aW9uKTsKKyAgICAgICAgICAgIE5vZGUqIG5h
bWUgPSBnZXQoYnl0ZWNvZGUubV9uYW1lKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU2V0RnVu
Y3Rpb25OYW1lLCBmdW5jLCBuYW1lKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3NldF9m
dW5jdGlvbl9uYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfdHlwZW9mOiB7CiAg
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5cGVv
Zj4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoVHlwZU9mLCBn
ZXQoYnl0ZWNvZGUudmFsdWUpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoVHlwZU9mLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3R5cGVvZik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3RvX251
bWJlcjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUb051bWJlcj4oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29k
ZS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoVG9O
dW1iZXIsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCB2YWx1ZSkpOworICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNl
dChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb051bWJlciwgT3BJbmZvKDApLCBPcEluZm8o
cHJlZGljdGlvbiksIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF90b19udW1i
ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF90b19zdHJpbmc6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7
Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoVG9TdHJpbmcsIHZhbHVlKSk7Cisg
ICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKFRvU3RyaW5nLCB2YWx1ZSkpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG9fc3RyaW5nKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2Ugb3BfdG9fb2JqZWN0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwogICAgICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGJ5dGVjb2RlLm9wZXJhbmQpOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2Rl
Lm1lc3NhZ2VdOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChUb09i
amVjdCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIHZhbHVl
KSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOwor
ICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3At
Pm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLm1fbWVzc2FnZV07CisgICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoVG9PYmplY3QsIE9wSW5mbyhpZGVudGlmaWVyTnVt
YmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfdG9fb2JqZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaW5fYnlfdmFs
OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlWYWw+KCk7Ci0gICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlN
b2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykuYXJyYXlQcm9maWxlLCBBcnJheTo6UmVh
ZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEluQnlWYWwsIE9w
SW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBnZXQoYnl0ZWNvZGUuYmFzZSksIGdldChieXRlY29k
ZS5wcm9wZXJ0eSkpKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJh
eU1vZGUoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6
OlJlYWQpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEluQnlW
YWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwgZ2V0
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbl9i
eV92YWwpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pbl9ieV9pZDogewogICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7
Ci0gICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgICAgICAg
ICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRp
ZmllclJlbWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBn
ZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3Byb3Bl
cnR5XTsKICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50
aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAKICAgICAgICAgICAgIEluQnlJZFN0YXR1cyBz
dGF0dXMgPSBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCkBAIC02ODA0LDQzICs2ODA0LDQzIEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChGaWx0ZXJJbkJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxh
bi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkSW5CeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2luKCks
IHN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRjaCA9IGFk
ZFRvR3JhcGgoTWF0Y2hTdHJ1Y3R1cmUsIE9wSW5mbyhkYXRhKSwgYmFzZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1hdGNoKTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fZHN0LCBtYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2luX2J5X2lkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoSW5CeUlkLCBPcEluZm8oaWRl
bnRpZmllck51bWJlciksIGJhc2UpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChJbkJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaW5fYnlfaWQpOwogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKTsKLSAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxlbmd0
aCwgZ2V0KGJ5dGVjb2RlLmJhc2UpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxlbmd0aCwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7CiAgICAgICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVyaWNQ
cm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoSGFz
R2VuZXJpY1Byb3BlcnR5LCBnZXQoYnl0ZWNvZGUuYmFzZSksIGdldChieXRlY29kZS5wcm9wZXJ0
eSkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNHZW5l
cmljUHJvcGVydHksIGdldChieXRlY29kZS5tX2Jhc2UpLCBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5KTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eTogewog
ICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRv
R3JhcGgoSGFzU3RydWN0dXJlUHJvcGVydHksIAotICAgICAgICAgICAgICAgIGdldChieXRlY29k
ZS5iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUucHJvcGVydHkpLAotICAgICAg
ICAgICAgICAgIGdldChieXRlY29kZS5lbnVtZXJhdG9yKSkpOworICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc1N0cnVjdHVyZVByb3BlcnR5LAorICAgICAgICAg
ICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAorICAgICAgICAgICAgICAgIGdldChieXRlY29k
ZS5tX3Byb3BlcnR5KSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9y
KSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OiB7CiAg
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0lu
ZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUu
YmFzZSk7Ci0gICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykuYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7Ci0g
ICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5wcm9wZXJ0eSk7CisgICAg
ICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAgICBB
cnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVC
bG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIE5vZGUqIHBy
b3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAgICAgICAgTm9kZSogaGFz
SXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoSGFzSW5kZXhlZFByb3BlcnR5LCBPcEluZm8o
YXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHN0YXRpY19jYXN0PHVpbnQzMl90PihQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpKSwgYmFzZSwgcHJvcGVy
dHkpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgaGFzSXRlcmFibGVQcm9wZXJ0eSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGhhc0l0ZXJhYmxlUHJvcGVydHkpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOwogICAgICAg
ICB9CiAKQEAgLTY4NDgsNTIgKzY4NDgsNTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAgICAgICAg
ICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICAgICAgICAg
IE5vZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLmluZGV4KTsKLSAgICAgICAgICAgIE5vZGUqIGVu
dW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUuZW51bWVyYXRvcik7CisgICAgICAgICAgICBOb2RlKiBi
YXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9
IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0
KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9IGdldChi
eXRlY29kZS5tX2VudW1lcmF0b3IpOwogCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNl
KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKICAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKGluZGV4KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0
b3IpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJB
cmcsIEdldERpcmVjdFBuYW1lLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOworICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0
RGlyZWN0UG5hbWUsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2dldF9kaXJlY3RfcG5hbWUpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+
KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEdldFByb3BlcnR5
RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLmJhc2UpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUu
bV9iYXNlKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1l
cmF0b3IpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVy
ZV9wbmFtZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0
ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwKLSAgICAg
ICAgICAgICAgICBnZXQoYnl0ZWNvZGUuZW51bWVyYXRvciksCi0gICAgICAgICAgICAgICAgZ2V0
KGJ5dGVjb2RlLmluZGV4KSkpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwKKyAgICAgICAgICAgICAgICBnZXQo
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yKSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9p
bmRleCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmlj
X3BuYW1lOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUuZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUsCi0gICAgICAgICAg
ICAgICAgZ2V0KGJ5dGVjb2RlLmVudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5pbmRleCkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFw
aChHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLAorICAgICAgICAgICAgICAgIGdldChieXRlY29k
ZS5tX2VudW1lcmF0b3IpLAorICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2luZGV4KSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5n
OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dy
YXBoKFRvSW5kZXhTdHJpbmcsIGdldChieXRlY29kZS5pbmRleCkpKTsKKyAgICAgICAgICAgIHNl
dChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb0luZGV4U3RyaW5nLCBnZXQoYnl0ZWNvZGUu
bV9pbmRleCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmluZyk7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hp
Y2tlbl9wcm9sb2d1ZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CiAgICAgICAgICAgICBp
ZiAoIW1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlLCBnZXQoYnl0ZWNvZGUuc2NvcGUp
KTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZSwg
Z2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xvZ19z
aGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSk7CiAgICAgICAgIH0KIApAQCAtNjkwMyw3ICs2OTAzLDcg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgcmlnaHQgc29sdXRpb24gZm9yIGlubGluaW5nIGlzIHRvIGVsaWRl
IHRoZXNlIHdoZW5ldmVyIHRoZSB0YWlsIGNhbGwKICAgICAgICAgICAgICAgICAvLyBlbmRzIHVw
IGJlaW5nIGlubGluZWQuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NTY4NgotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTG9n
U2hhZG93Q2hpY2tlblRhaWwsIGdldChieXRlY29kZS50aGlzVmFsdWUpLCBnZXQoYnl0ZWNvZGUu
c2NvcGUpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKExvZ1NoYWRvd0NoaWNrZW5UYWls
LCBnZXQoYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbG9nX3NoYWRvd19jaGlja2Vu
X3RhaWwpOwogICAgICAgICB9CkBAIC03MTY3LDkgKzcxNjcsOSBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUNvZGVCbG9jaygpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29kZSBieXRlY29kZSwgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25TaXplKQogewotICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFz
ZSk7Ci0gICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUucHJvcGVydHkpOwotICAgIE5v
ZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKKyAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5
dGVjb2RlLm1fYmFzZSk7CisgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSk7CisgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgYm9v
bCBpc0RpcmVjdCA9IEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsK
ICAgICBib29sIGNvbXBpbGVkQXNQdXRCeUlkID0gZmFsc2U7CiAgICAgewpAQCAtNzIxMCw3ICs3
MjEwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZQogICAgIH0K
IAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKLSAgICAgICAgQXJyYXlNb2RlIGFycmF5
TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jaykuYXJyYXlQcm9maWxlLCBBcnJheTo6V3JpdGUpOworICAgICAgICBBcnJheU1v
ZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKIAogICAg
ICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVy
dHkpOwpAQCAtNzIyNCwyOCArNzIyNCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeVZhbChCeXRlCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZVR5cGUgb3AsIEJ5dGVjb2RlIGJ5dGVj
b2RlKQogewotICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFw
W2J5dGVjb2RlLnByb3BlcnR5XTsKLSAgICBOb2RlKiBhY2Nlc3NvciA9IGdldChieXRlY29kZS5h
Y2Nlc3Nvcik7Ci0gICAgYWRkVG9HcmFwaChvcCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBP
cEluZm8oYnl0ZWNvZGUuYXR0cmlidXRlcyksIGJhc2UsIGFjY2Vzc29yKTsKKyAgICBOb2RlKiBi
YXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLm1fcHJvcGVy
dHldOworICAgIE5vZGUqIGFjY2Vzc29yID0gZ2V0KGJ5dGVjb2RlLm1fYWNjZXNzb3IpOworICAg
IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKGJ5dGVjb2Rl
Lm1fYXR0cmlidXRlcyksIGJhc2UsIGFjY2Vzc29yKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1l
IEJ5dGVjb2RlPgogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QWNjZXNzb3JCeVZhbChO
b2RlVHlwZSBvcCwgQnl0ZWNvZGUgYnl0ZWNvZGUpCiB7Ci0gICAgTm9kZSogYmFzZSA9IGdldChi
eXRlY29kZS5iYXNlKTsKLSAgICBOb2RlKiBzdWJzY3JpcHQgPSBnZXQoYnl0ZWNvZGUucHJvcGVy
dHkpOwotICAgIE5vZGUqIGFjY2Vzc29yID0gZ2V0KGJ5dGVjb2RlLmFjY2Vzc29yKTsKLSAgICBh
ZGRUb0dyYXBoKG9wLCBPcEluZm8oYnl0ZWNvZGUuYXR0cmlidXRlcyksIGJhc2UsIHN1YnNjcmlw
dCwgYWNjZXNzb3IpOworICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAg
ICBOb2RlKiBzdWJzY3JpcHQgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgTm9kZSog
YWNjZXNzb3IgPSBnZXQoYnl0ZWNvZGUubV9hY2Nlc3Nvcik7CisgICAgYWRkVG9HcmFwaChvcCwg
T3BJbmZvKGJ5dGVjb2RlLm1fYXR0cmlidXRlcyksIGJhc2UsIHN1YnNjcmlwdCwgYWNjZXNzb3Ip
OwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVOZXdGdW5jKE5vZGVUeXBlIG9wLCBCeXRlY29kZSBieXRlY29kZSkKIHsKLSAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGRlY2wgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5mdW5jdGlvbkRlY2wpOworICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZGVjbCA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+ZnVuY3Rp
b25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBGcm96ZW5WYWx1ZSogZnJvemVu
ID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoZGVjbCk7Ci0gICAgTm9kZSogc2NvcGUgPSBnZXQoYnl0
ZWNvZGUuc2NvcGUpOwotICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgob3AsIE9wSW5m
byhmcm96ZW4pLCBzY29wZSkpOworICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2RlLm1fc2Nv
cGUpOworICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChvcCwgT3BJbmZvKGZyb3pl
biksIHNjb3BlKSk7CiAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMg
UGhhbnRvbS4gQnV0OgogICAgIC8vCiAgICAgLy8gRm9yIHRoZSBjb25zdGFudCBjYXNlOiB3ZSBt
dXN0IGRvIGl0IGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgbm8gd2F5IG9mIGtub3dp
bmcKQEAgLTcyNTksMTAgKzcyNTksMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTmV3
RnVuYyhOb2RlVAogdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlTmV3RnVuY0V4cChOb2RlVHlwZSBvcCwgQnl0ZWNvZGUgYnl0ZWNvZGUpCiB7
Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleHByID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUuZnVuY3Rpb25EZWNsKTsKKyAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4cHIgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
PmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgRnJvemVuVmFsdWUq
IGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGV4cHIpOwotICAgIE5vZGUqIHNjb3BlID0g
Z2V0KGJ5dGVjb2RlLnNjb3BlKTsKLSAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKG9w
LCBPcEluZm8oZnJvemVuKSwgc2NvcGUpKTsKKyAgICBOb2RlKiBzY29wZSA9IGdldChieXRlY29k
ZS5tX3Njb3BlKTsKKyAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgob3AsIE9wSW5m
byhmcm96ZW4pLCBzY29wZSkpOwogICAgIC8vIElkZWFsbHkgd2Ugd291bGRuJ3QgaGF2ZSB0byBk
byB0aGlzIFBoYW50b20uIEJ1dDoKICAgICAvLwogICAgIC8vIEZvciB0aGUgY29uc3RhbnQgY2Fz
ZTogd2UgbXVzdCBkbyBpdCBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIG5vIHdheSBv
ZiBrbm93aW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAkocmV2aXNpb24gMjM5OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTIsNyArMzkyLDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdAogCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChleGVjLT5ieXRlY29kZU9mZnNldCgp
KTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwotICAgIFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigp
Lm1ldGFkYXRhKGV4ZWMpLmJ1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVy
KiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShleGVjKS5tX2J1
ZmZlcjsKICAgICBKU1ZhbHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVl
Kj4oZGZnQ29tbW9uLT5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAgIHVu
c2lnbmVkIGluZGV4ID0gMDsKICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kJiBwcm9maWxlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIzOTk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzcsNyArNDc3
LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLmJ5dGVjb2RlSW5kZXgpLnB0cigp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPmlzPE9wTmV3QXJy
YXlCdWZmZXI+KCkpOwogICAgICAgICBhdXRvIG5ld0FycmF5QnVmZmVyID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpOwotICAgICAgICBBcnJheUFsbG9jYXRpb25Q
cm9maWxlKiBwcm9maWxlID0gJm5ld0FycmF5QnVmZmVyLm1ldGFkYXRhKGNvZGVCbG9jaykuYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJv
ZmlsZSA9ICZuZXdBcnJheUJ1ZmZlci5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlBbGxvY2F0
aW9uUHJvZmlsZTsKIAogICAgICAgICAvLyBGSVhNRTogU2hhcmUgdGhlIGNvZGUgd2l0aCBDb21t
b25TbG93UGF0aHMuIEN1cnJlbnRseSwgY29kZUJsb2NrIGV0Yy4gYXJlIHNsaWdodGx5IGRpZmZl
cmVudC4KICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nTW9kZSA9IHByb2ZpbGUtPnNlbGVj
dEluZGV4aW5nVHlwZSgpOwpAQCAtNDk1LDcgKzQ5NSw3IEBAIGV4dGVybiAiQyIgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgIC8vIFdlIGFsc28gY2Fubm90IGFsbG9j
YXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVhZHMgc2luY2UgaXQncyBp
bnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgICAgIC8vIGEgY29tcGlsYXRp
b24gdGhyZWFkLgogICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAg
ICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5pbW11dGFibGVC
dXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJmbHkp
OworICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVmZmVy
Lm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRh
YmxlQnV0dGVyZmx5KTsKICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAg
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9Bcmd1bWVudC5y
Ygo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0FyZ3VtZW50
LnJiCShyZXZpc2lvbiAyMzk5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L0FyZ3VtZW50LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEzICszNSwxNyBAQCBjbGFzcyBBcmd1bWVudAogICAgIGVu
ZAogCiAgICAgZGVmIGZpZWxkCi0gICAgICAgICIje0B0eXBlLnRvX3N9ICN7QG5hbWV9OyIKKyAg
ICAgICAgIiN7QHR5cGUudG9fc30gbV8je0BuYW1lfTsiCiAgICAgZW5kCiAKICAgICBkZWYgY3Jl
YXRlX3BhcmFtCiAgICAgICAgICIje0B0eXBlLnRvX3N9ICN7QG5hbWV9IgogICAgIGVuZAogCisg
ICAgZGVmIGZpZWxkX25hbWUKKyAgICAgICAgIm1fI3tAbmFtZX0iCisgICAgZW5kCisKICAgICBk
ZWYgZml0c19jaGVjayhzaXplKQogICAgICAgICBGaXRzOjpjaGVjayBzaXplLCBAbmFtZSwgQHR5
cGUKICAgICBlbmQKQEAgLTU1LDcgKzU5LDcgQEAgY2xhc3MgQXJndW1lbnQKICAgICBlbmQKIAog
ICAgIGRlZiBsb2FkX2Zyb21fc3RyZWFtKGluZGV4LCBzaXplKQotICAgICAgICAiI3tAbmFtZX0o
I3tGaXRzOjpjb252ZXJ0KHNpemUsICJzdHJlYW1bI3tpbmRleH1dIiwgQHR5cGUpfSkiCisgICAg
ICAgICIje2ZpZWxkX25hbWV9KCN7Rml0czo6Y29udmVydChzaXplLCAic3RyZWFtWyN7aW5kZXh9
XSIsIEB0eXBlKX0pIgogICAgIGVuZAogCiAgICAgZGVmIHNldHRlcgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyMzk5OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcg
KzQ3LDcgQEAgY2xhc3MgTWV0YWRhdGEKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRfb2Y/
IEhhc2gKICAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVydEZp
ZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9ICN7Zmll
bGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9IG1f
I3tmaWVsZC50b19zfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQuam9p
bigiXG4iKQogICAgICAgICBlbmQKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgTWV0YWRhdGEKICAg
ICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBpbml0
aWFsaXplcnMuZW1wdHk/KQogICAgICAgICAgICAgaW5pdHMgPSAiXG4gICAgICAgICAgICA6ICIg
KyBAaW5pdGlhbGl6ZXJzLm1hcCBkbyB8bWV0YWRhdGEsIGFyZ3wKLSAgICAgICAgICAgICAgICAi
I3ttZXRhZGF0YX0oX19vcC4je2FyZ30pIgorICAgICAgICAgICAgICAgICJtXyN7bWV0YWRhdGF9
KF9fb3AubV8je2FyZ30pIgogICAgICAgICAgICAgZW5kLmpvaW4oIlxuICAgICAgICAgICAgLCAi
KS5jb25jYXQoIlxuICAgICAgICIpOwogICAgICAgICBlbmQKIApAQCAtMTIxLDYgKzEyMSw2IEBA
IEVPRgogICAgIGVuZAogCiAgICAgZGVmIHNlbGYuZmllbGRfbmFtZQotICAgICAgICAibWV0YWRh
dGFJRCIKKyAgICAgICAgIm1fbWV0YWRhdGFJRCIKICAgICBlbmQKIGVuZApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIJKHJldmlzaW9uIDIzOTk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDYgKzgw
LDEyIEBAIGNsYXNzIE9wY29kZQogICAgICAgICBAYXJncy5tYXAoJjpuYW1lKS51bnNoaWZ0KCIi
KS5qb2luKCIsICIpCiAgICAgZW5kCiAKKyAgICBkZWYgdW50eXBlZF9wYXJhbXMKKyAgICAgICAg
cmV0dXJuIGlmIEBhcmdzLm5pbD8KKworICAgICAgICBAYXJncy5tYXAoJjpmaWVsZF9uYW1lKS51
bnNoaWZ0KCIiKS5qb2luKCIsICIpCisgICAgZW5kCisKICAgICBkZWYgbWFwX2ZpZWxkc193aXRo
X3NpemUocHJlZml4LCBzaXplLCAmYmxvY2spCiAgICAgICAgIGFyZ3MgPSBbQXJndW1lbnQubmV3
KCJvcGNvZGVJRCIsIDp1bnNpZ25lZCwgMCldCiAgICAgICAgIGFyZ3MgKz0gQGFyZ3MuZHVwIGlm
IEBhcmdzCkBAIC0xNjQsNyArMTcwLDcgQEAgRU9GCiAgICAgICAgIGR1bXBlci0+cHJpbnRMb2Nh
dGlvbkFuZE9wKF9fbG9jYXRpb24sICYiKiN7QG5hbWV9IlshX19pc1dpZGVdKTsKICN7cHJpbnRf
YXJncyB7IHxhcmd8CiA8PC1FT0YuY2hvbXAKLSAgICAgICAgZHVtcGVyLT5kdW1wT3BlcmFuZCgj
e2FyZy5uYW1lfSwgI3thcmcuaW5kZXggPT0gMX0pOworICAgICAgICBkdW1wZXItPmR1bXBPcGVy
YW5kKCN7YXJnLmZpZWxkX25hbWV9LCAje2FyZy5pbmRleCA9PSAxfSk7CiBFT0YKICAgICB9fQog
ICAgIH0KQEAgLTIyNSw3ICsyMzEsNyBAQCBFT0YKIAogICAgIGRlZiBzdHJ1Y3RfaW5kaWNlcwog
ICAgICAgICBvdXQgPSBbXQotICAgICAgICBvdXQgKz0gQGFyZ3MubWFwKCY6bmFtZSkgdW5sZXNz
IEBhcmdzLm5pbD8KKyAgICAgICAgb3V0ICs9IEBhcmdzLm1hcCgmOmZpZWxkX25hbWUpIHVubGVz
cyBAYXJncy5uaWw/CiAgICAgICAgIG91dCA8PCBNZXRhZGF0YS5maWVsZF9uYW1lIHVubGVzcyBA
bWV0YWRhdGEuZW1wdHk/CiAgICAgICAgIG91dC5tYXAud2l0aF9pbmRleCBkbyB8bmFtZSwgaW5k
ZXh8CiAgICAgICAgICAgICAiY29uc3QgdW5zaWduZWQgI3tjYXBpdGFsaXplZF9uYW1lfV8je25h
bWV9X2luZGV4ID0gI3tpbmRleCArIDF9OyIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHJldmlzaW9uIDIzOTk5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDgsOSArNDgsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJ
bnN0CiAgICAgSnVtcExpc3Qgbm90SW50MzJPcDI7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7
Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKLSAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBv
cDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9y
aHMub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAgLy8gQ2hhcmFjdGVyIGxlc3MuCiAgICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CkBAIC0xMDIsOSArMTAyLDkgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
cmhzLm9mZnNldCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAK
ICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewogICAgICAgICBlbWl0TG9hZChv
cDIsIHJlZ1QzLCByZWdUMik7CkBAIC0xMjIsOSArMTIyLDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAg
aW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwor
ICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEludChvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKQEAgLTE0Myw5ICsxNDMsOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBE
b3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IApAQCAtMTU4LDggKzE1OCw4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhj
b25zdCAKIHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNl
dCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBy
ZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bV9vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1Qw
KTsKICAgICAKQEAgLTE3MSw3ICsxNzEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChj
b25zdCBJbnN0cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUuc3JjRHN0Lm9mZnNl
dCgpOworICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKIAogICAg
IGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMTgzLDcgKzE4Myw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29w
X2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwotICAgIGludCBzcmNE
c3QgPSBieXRlY29kZS5zcmNEc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyY0RzdCA9IGJ5dGVjb2Rl
Lm1fc3JjRHN0Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjRHN0LCByZWdUMSwgcmVnVDAp
OwogCkBAIC0xOTksOSArMTk5LDkgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChjb25z
dCBJbnN0cgogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKICAg
ICBpbnQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7Ci0gICAgaW50IHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2Rl
Lmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAg
IGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7
CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGlmICghbm90SW50MzJPcDEuZW1wdHkoKSkg
ewogICAgICAgICAvLyBEb3VibGUgY2FzZSAxOiBPcDEgaXMgbm90IGludDMyOyBPcDIgaXMgdW5r
bm93bi4KQEAgLTMzNiw5ICszMzYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5z
dHJ1Y3Rpb24qCiB7CiAjaWYgQ1BVKFg4NikKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wTW9kPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNv
ZGUucmhzLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5
dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUg
Y29ycmVjdCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVChyZWdUMCA9PSBY
ODZSZWdpc3RlcnM6OmVheCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDIzOTk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTcsOCArMTU3LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfamJlbG93ZXEoY29uc3QgSW5zdHJ1Ywogdm9pZCBKSVQ6OmVt
aXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigp
OwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMTc2LDkgKzE3Niw5IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICAvLyAtIGludCBpbW1lZGlhdGUg
dG8gaW50IGltbWVkaWF0ZQogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxP
cD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBvcDIg
PSBieXRlY29kZS5yaHMub2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwor
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0KTsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC0yMjMsOSArMjIzLDkgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3Ax
ID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5yaHMub2Zm
c2V0KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0
ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Cisg
ICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKICAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMSwgcmVnVDApOwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25z
dGFudEludChvcDIpOwpAQCAtMjQ0LDkgKzI0NCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9m
ZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9w
MiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGlu
dCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDAp
OwogICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIpOwpA
QCAtMjY3LDkgKzI2Nyw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxocy5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7Cisg
ICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGlu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAKICAgICAvLyBXZSBnZW5lcmF0ZSBpbmxp
bmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgogICAgIC8v
IC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTM2
NSw3ICszNjUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4o
KTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUuc3JjRHN0Lm9mZnNldCgpOworICAgIGludCBz
cmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJl
Z1QwKTsKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5z
dHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUuc3JjRHN0Lm9mZnNldCgp
OworICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwKTsKQEAgLTM5Myw5ICszOTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWMoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwor
ICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBB
U1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtNDUxLDcgKzQ1MSw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbmVnYXRlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
Z2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykuYXJpdGhQcm9maWxlOworICAgIEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCku
bWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogICAgIEpJVE5lZ0lDKiBuZWdh
dGVJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0
cnVjdGlvbik7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rp
b24sIG5lZ2F0ZUlDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcE5lZ2F0ZT4obmVnYXRlSUMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9u
QXJpdGhOZWdhdGUpOwpAQCAtNDY5LDkgKzQ2OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0
eXBlbmFtZSBTbmlwcGV0R2UKIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxpbmdQb2xpY3kgcHJvZmls
aW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhz
Lm9mZnNldCgpOworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVj
b2RlLm1fcmhzLm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTUxNiw4ICs1MTYsOCBAQCB2b2lk
IEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9i
aXRub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEJpdG5vdD4oKTsKLSAgICBpbnQg
cmVzdWx0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5v
cGVyYW5kLm9mZnNldCgpOworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qw
KTsKQEAgLTU3Nyw5ICs1NzcsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpl
bWl0UmlnaHRTaGlmdEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNoaWZ0VHlwZSBzbmlwcGV0U2hpZnRUeXBlKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAg
IGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVj
b2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwor
ICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3AxID0g
Ynl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9m
ZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKQEAgLTYzOSw3ICs2MzksNyBAQCBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBPcGVyYW5kVHlwZXMgZ2V0T3BlCiAKIHZvaWQgSklUOjplbWl0X29wX2FkZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BBZGQ+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLmFyaXRoUHJvZmlsZTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5t
X2FyaXRoUHJvZmlsZTsKICAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
QWRkSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Q8T3BBZGQ+KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRk
UHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKQEAgLTY1Nyw4ICs2NTcsOCBAQCB0ZW1wbGF0
ZSA8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEdlbmVyYXRvCiB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5v
blByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBvcGVyYW5kID0gYnl0ZWNvZGUub3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUg
cmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCkBAIC03MDgsOSArNzA4LDkgQEAgdm9pZCBKSVQ6OmVt
aXRNYXRoSUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9w
ZXJhbmRUeXBlcyhjb3BpZWRBcml0aFByb2ZpbGUoYnl0ZWNvZGUpKTsKLSAgICBpbnQgcmVzdWx0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zm
c2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgcmVz
dWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1f
bGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSk7CkBAIC03ODMsNyArNzgzLDcgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJ
VFVuYXJ5TWF0aElDPAogICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0g
bGFiZWwoKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtODMwLDkgKzgz
MCw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRoSUMKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIE9wZXJhbmRU
eXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjb3BpZWRBcml0aFByb2ZpbGUoYnl0ZWNvZGUp
KTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEg
PSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZz
ZXQoKTsKKyAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5t
X3Jocy5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CkBAIC04OTIsMTggKzg5MiwxOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAg
IGludCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhtZXRhZGF0
YS5hcml0aFByb2ZpbGUpOworICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBl
cyhtZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSk7CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwogICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwogI2Vsc2UKLSAgICBPcGVyYW5kVHlwZXMgdHlwZXMg
PSBnZXRPcGVyYW5kVHlwZXMobWV0YWRhdGEuYXJpdGhQcm9maWxlKTsKKyAgICBPcGVyYW5kVHlw
ZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMobWV0YWRhdGEubV9hcml0aFByb2ZpbGUpOwogICAg
IEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBK
U1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwogICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKQEAgLTkxMyw3ICs5MTMsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1Y3Rpb24qCiAKICAgICBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7CiAgICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkK
LSAgICAgICAgYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCku
bWV0YWRhdGEobV9jb2RlQmxvY2spLmFyaXRoUHJvZmlsZTsKKyAgICAgICAgYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
Lm1fYXJpdGhQcm9maWxlOwogCiAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQodHlwZXMu
Zmlyc3QoKSk7CiAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKHR5cGVzLnNlY29uZCgp
KTsKQEAgLTk1OCw3ICs5NTgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAKIHZvaWQgSklUOjplbWl0X29wX211bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLmFyaXRoUHJv
ZmlsZTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKICAg
ICBKSVRNdWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxl
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3Vy
cmVudEluc3RydWN0aW9uLCBtdWxJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BNdWw+KG11bElD
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlv
blZhbHVlTXVsKTsKQEAgLTk3NCw3ICs5NzQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVs
KGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX3N1Yihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0YWRhdGEobV9jb2RlQmxvY2sp
LmFyaXRoUHJvZmlsZTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKICAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJp
dGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BT
dWI+KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQs
IG9wZXJhdGlvblZhbHVlU3ViKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDIzOTk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDEzICs0OSwxMyBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25z
dCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRTdG9yZShieXRlY29kZS5kc3Qub2Zmc2V0
KCksIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdFN0b3JlKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
LCByZWdUMSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1
ZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwog
CiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTE1MywxNCArMTUzLDE0
IEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBi
eXRlY29kZSwgQ2FsbExpbmtJbmZvKikKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYXJnQ291bnQgPSBieXRlY29kZS5hcmdj
OwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLmFy
Z3YpOworICAgIGludCBhcmdDb3VudCA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3YpOwogCiAgICAgaWYg
KE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAg
ICAgICBlbWl0TG9hZChyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJ
bmNsdWRpbmdUaGlzKDApLCByZWdUMCwgcmVnVDEpOwogICAgICAgICBKdW1wIGRvbmUgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwogICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICBzdG9yZTMyKHJlZ1QxLCBt
ZXRhZGF0YS5hcnJheVByb2ZpbGUuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAg
ICAgICAgc3RvcmUzMihyZWdUMSwgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUuYWRkcmVzc09mTGFz
dFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwogICAgIH0KIApA
QCAtMTc2LDEwICsxNzYsMTAgQEAgc3RkOjplbmFibGVfaWZfdDwKIEpJVDo6Y29tcGlsZVNldHVw
RnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCiB7CiAgICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVj
b2RlLnRoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUuYXJn
dW1lbnRzLm9mZnNldCgpOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLmZp
cnN0RnJlZS5vZmZzZXQoKTsKLSAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBieXRlY29kZS5m
aXJzdFZhckFyZzsKKyAgICBpbnQgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zm
c2V0KCk7CisgICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgp
OworICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNl
dCgpOworICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmc7
CiAKICAgICBlbWl0TG9hZChhcmd1bWVudHMsIHJlZ1QxLCByZWdUMCk7CiAgICAgWl9KSVRPcGVy
YXRpb25fRUpaWiBzaXplT3BlcmF0aW9uOwpAQCAtMjQ4LDggKzI0OCw4IEBAIHZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCAKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBt
X2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxM
aW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOwogCi0g
ICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLmFyZ3Y7Ci0gICAgaW50IGNhbGxlZSA9
IGJ5dGVjb2RlLmNhbGxlZS5vZmZzZXQoKTsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0
ZWNvZGUubV9hcmd2OworICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQo
KTsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIApAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgSklUOjpjb21w
aWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9w
OjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwot
ICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5jYWxsZWUub2Zmc2V0KCk7CisgICAgaW50IGNhbGxl
ZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5czoK
ICAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDIzOTk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01MSw3ICs1MSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVt
aXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KQEAgLTYyLDE0ICs2MiwxNCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGFy
Z0NvdW50ID0gYnl0ZWNvZGUuYXJnYzsKLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGlj
X2Nhc3Q8aW50PihieXRlY29kZS5hcmd2KTsKKyAgICBpbnQgYXJnQ291bnQgPSBieXRlY29kZS5t
X2FyZ2M7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNv
ZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rl
ck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdU
MCk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLmFycmF5UHJvZmlsZS5hZGRyZXNz
T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyKHJlZ1QwLCBtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC04NSwxMCArODUsMTAgQEAgc3RkOjplbmFi
bGVfaWZfdDwKICwgdm9pZD4KIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVj
b2RlLCBDYWxsTGlua0luZm8qIGluZm8pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVjb2Rl
LnRoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUuYXJndW1l
bnRzLm9mZnNldCgpOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLmZpcnN0
RnJlZS5vZmZzZXQoKTsKLSAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBieXRlY29kZS5maXJz
dFZhckFyZzsKKyAgICBpbnQgdGhpc1ZhbHVlID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0
KCk7CisgICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOwor
ICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgp
OworICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmc7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDEpOwogICAgIFpfSklU
T3BlcmF0aW9uX0VKWlogc2l6ZU9wZXJhdGlvbjsKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEpJ
VDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwogICAgIGluZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OkNhbGwsIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsK
IAotICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5hcmd2OworICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKQEAgLTE4
MSwxNSArMTgxLDE1IEBAIHRlbXBsYXRlPD4KIGJvb2wgSklUOjpjb21waWxlVGFpbENhbGwoY29u
c3QgT3BUYWlsQ2FsbCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbywgdW5zaWduZWQgY2Fs
bExpbmtJbmZvSW5kZXgpCiB7CiAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7
Ci0gICAgc2h1ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLmFyZ2M7CisgICAgc2h1
ZmZsZURhdGEubnVtUGFzc2VkQXJncyA9IGJ5dGVjb2RlLm1fYXJnYzsKICAgICBzaHVmZmxlRGF0
YS50YWdUeXBlTnVtYmVyID0gR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyOwogICAgIHNo
dWZmbGVEYXRhLm51bUxvY2FscyA9Ci0gICAgICAgIGJ5dGVjb2RlLmFyZ3YgLSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOwotICAgIHNodWZmbGVEYXRhLmFyZ3Mu
cmVzaXplKGJ5dGVjb2RlLmFyZ2MpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRl
Y29kZS5hcmdjOyArK2kpIHsKKyAgICAgICAgYnl0ZWNvZGUubV9hcmd2IC0gc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICBzaHVmZmxlRGF0YS5hcmdzLnJl
c2l6ZShieXRlY29kZS5tX2FyZ2MpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBieXRl
Y29kZS5tX2FyZ2M7ICsraSkgewogICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KICAgICAg
ICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgICAg
ICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSAtIGJ5dGVjb2RlLmFyZ3YsCisgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgLSBieXRlY29kZS5tX2FyZ3Ys
CiAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdEpTKTsKICAgICB9CiAgICAgc2h1ZmZsZURhdGEu
Y2FsbGVlID0KQEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChjb25z
dCBJbnN0cnVjdGlvCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgY2FsbGVl
ID0gYnl0ZWNvZGUuY2FsbGVlLm9mZnNldCgpOworICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5t
X2NhbGxlZS5vZmZzZXQoKTsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBk
YXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDIzOTk5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQx
LDcgKzM0MSw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgKIHsK
ICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEucHJvZmlsZSk7CisgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShtZXRhZGF0YS5tX3Byb2ZpbGUpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQg
aW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKQEAgLTcxMCwxMSArNzEw
LDExIEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIAogQUxXQVlT
X0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUgYnl0
ZWNvZGUpCiB7Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubWV0YWRhdGFJRCArIDE7IC8v
IEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKKyAgICB1bnNpZ25lZCBrZXkgPSBieXRl
Y29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEga2V5
CiAgICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwogICAg
IGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQogICAgICAgICByZXR1
cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5m
byA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5nZXRQdXRJbmZvOworICAgIEdldFB1
dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dldFB1
dEluZm87CiAgICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9wZXJh
bmQoKSk7CiAgICAgcmV0dXJuIGdldFB1dEluZm87CiB9CkBAIC03MjIsMTEgKzcyMiwxMSBAQCBB
TFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCaW5hcnlPcD4KIEFMV0FZU19JTkxJTkUgQXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQ
cm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQogewotICAgIHVpbnQ2NF90IGtleSA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGJ5dGVjb2RlLm1ldGFkYXRhSUQpOworICAgIHVpbnQ2NF90IGtleSA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7CiAgICAgYXV0byBpdGVyYXRvciA9IG1fY29w
aWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fY29waWVk
QXJpdGhQcm9maWxlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKLSAg
ICBBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spLmFyaXRoUHJvZmlsZTsKKyAgICBBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogICAgIG1fY29waWVkQXJp
dGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwogICAgIHJldHVybiBhcml0aFByb2Zp
bGU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCShyZXZpc2lvbiAyMzk5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dh
LmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTUwLDggKzUwLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1v
dj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMg
PSBieXRlY29kZS5zcmMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKICAgICAKICAg
ICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpCiAgICAgICAg
IGVtaXRTdG9yZShkc3QsIGdldENvbnN0YW50T3BlcmFuZChzcmMpKTsKQEAgLTY1LDcgKzY1LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKgogewogICAgIEFTU0VS
VChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7Ci0gICAgZW1pdExvYWQoYnl0ZWNv
ZGUudmFsdWUub2Zmc2V0KCksIHJlZ1QxLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdExvYWQo
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDEsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAg
ICByZXQoKTsKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKGNvbnN0IElu
c3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbXA+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKICAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKIH0KIApAQCAtODIsNyArODIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtZXRhZGF0YS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3Ry
dWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxs
b2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3Ig
YWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cgogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJ
VEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAg
ICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAg
ZW1pdFN0b3JlQ2VsbChieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlc3VsdFJlZyk7CisgICAgICAg
IGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlc3VsdFJlZyk7CiAgICAg
fQogfQogCkBAIC0xMDgsOCArMTA4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIHN0cnVj
dHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEx
Nyw5ICsxMTcsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJCiB2
b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLmNvbnN0
cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFz
SW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZz
ZXQoKTsKKyAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VW
YWx1ZS5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCBy
ZWdUMCk7CiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0lu
c3RhbmNlIHdvdWxkIGRvLgpAQCAtMTQ1LDkgKzE0NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX292
ZXJyaWRlc19oYXNfaW5zdGFuY2UKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZz
ZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5cGUub2Zmc2V0KCk7CisgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5
cGUub2Zmc2V0KCk7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyBpbnRvIHJlZ2lzdGVycy4K
ICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdp
dGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KQEAg
LTE4Miw5ICsxODIsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJ
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZz
ZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5cGUub2Zmc2V0KCk7CisgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5
cGUub2Zmc2V0KCk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9p
bnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAgLTIwMCwxMCArMjAwLDEw
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0gICAg
aW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50
IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2Rl
Lm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7CisgICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRl
Y29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZCh2YWx1ZSwg
cmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QyKTsK
QEAgLTIxNSw4ICsyMTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0
b20oCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZyksIHJlZ1QwKTsKQEAgLTIyNyw4ICsyMjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19lbXB0eShjb25zdCBJbnN0cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRM
b2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QxKTsKQEAgLTI1NSw4ICsyNTUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmlu
ZWQoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5v
cGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0
TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwogICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVm
aW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAw
eDEpLCAiIik7CkBAIC0yNjgsOCArMjY4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZp
bmVkX29yX251bGwoYwogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkVGFnKHZhbHVl
LCByZWdUMCk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkJvb2xlYW5UYWcpLCByZWdUMCk7CkBAIC0yNzksOCArMjc5LDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJh
bmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0
TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDAp
OwpAQCAtMjkxLDkgKzI5MSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJ
bnN0cnUKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0
KCk7Ci0gICAgaW50IHR5cGUgPSBieXRlY29kZS50eXBlOworICAgIGludCBkc3QgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zm
c2V0KCk7CisgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMSk7CkBAIC0zMTEsOCArMzExLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93
aXRoX3R5cGUoY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKQEAg
LTMzMCw4ICszMzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1
CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLnNyYy5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9m
ZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNDYsOCAr
MzQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogdm9pZCBK
SVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBpbnQgZnVuYyA9IGJ5dGVjb2RlLmZ1bmN0aW9u
Lm9mZnNldCgpOwotICAgIGludCBuYW1lID0gYnl0ZWNvZGUubmFtZS5vZmZzZXQoKTsKKyAgICBp
bnQgZnVuYyA9IGJ5dGVjb2RlLm1fZnVuY3Rpb24ub2Zmc2V0KCk7CisgICAgaW50IG5hbWUgPSBi
eXRlY29kZS5tX25hbWUub2Zmc2V0KCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGZ1bmMsIHJlZ1Qx
KTsKICAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CkBAIC0zNTYsOCArMzU2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25h
bWUoY29ucwogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOb3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBp
bnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZz
ZXQoKTsKIAogICAgIGVtaXRMb2FkVGFnKHNyYywgcmVnVDApOwogCkBAIC0zNzEsOCArMzcxLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVt
aXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7Ci0g
ICAgaW50IGNvbmQgPSBieXRlY29kZS5jb25kaXRpb24ub2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7
CisgICAgaW50IGNvbmQgPSBieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKTsKKyAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXQpOwogCiAgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzg2LDgg
KzM4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKIHZvaWQg
SklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4o
KTsKLSAgICBpbnQgY29uZCA9IGJ5dGVjb2RlLmNvbmRpdGlvbi5vZmZzZXQoKTsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFy
Z2V0KTsKKyAgICBpbnQgY29uZCA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpOworICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldCk7CiAKICAgICBlbWl0TG9hZChjb25kLCByZWdUMSwgcmVnVDApOwogICAgIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKQEAgLTQwMCw4ICs0
MDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVs
bD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdl
dCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0KTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKIApAQCAtNDI2LDggKzQy
Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKIHZvaWQgSklU
OjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51
bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJn
ZXQpOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIHVuc2ln
bmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rh
cmdldCk7CiAKICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTQ1MywxNSAr
NDUzLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIFNwZWNpYWw6OlBvaW50ZXIg
cHRyID0gYnl0ZWNvZGUuc3BlY2lhbFBvaW50ZXI7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50IHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgU3BlY2lhbDo6UG9pbnRlciBwdHIg
PSBieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAKICAgICBlbWl0
TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QxKTsKICAgICBKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihhY3R1YWxQb2ludGVyRm9yKG1fY29kZUJsb2NrLCBwdHIpKSk7CiAgICAgbm90
Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5o
YXNKdW1wZWQpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hhc0p1
bXBlZCk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlz
KTsKIH0KQEAgLTQ3MCw5ICs0NzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0
cnVjdGlvbiogCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFcT4oKTsKIAotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IHNyYzEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5y
aHMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAs
IHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCByZWdUMykpOwpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Vx
KGNvbnN0IEluc3RydWN0aW9uKiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRXE+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CiAKICAgICBKdW1wTGlzdCBzdG9yZVJlc3Vs
dDsKICAgICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsKQEAgLTUxNCw5ICs1MTQsOSBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKLSAg
ICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVj
b2RlLnJocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOworICAgIGludCBzcmMxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQo
KTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdU
Mik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwpA
QCAtNTU0LDE2ICs1NTQsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9y
PFNsbwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgY29tcGlsZU9wRXFKdW1wU2xvdyhpdGVy
LCBDb21waWxlT3BFcVR5cGU6OkVxLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubGhzLm9mZnNl
dCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhz
Lm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAg
ICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKQEAgLTU3OCw3
ICs1NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CiAKICAgICBKdW1wTGlzdCBzdG9yZVJlc3VsdDsKICAgICBKdW1wTGlzdCBnZW5lcmlj
Q2FzZTsKQEAgLTYwNiw5ICs2MDYsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0
IEluc3RydWN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUu
bGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5tX3RhcmdldCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAg
ICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQyKHNy
YzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC02MjEsNyArNjIxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0KTsKICAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6TkVx
LCB0YXJnZXQpOwogfQogCkBAIC02MjksOSArNjI5LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7
Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zm
c2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGVt
aXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CiAKQEAgLTY2
OSw5ICs2NjksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpjb21waWxlT3BT
dHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubGhz
Lm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAgIGlu
dCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXQpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IHNy
YzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdU
MSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CiAKQEAgLTcwOCw3ICs3MDgsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SnN0cmljdGVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC03MTgs
NyArNzE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KQEAgLTcyNiw4ICs3MjYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShjb25zdCBJCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKICAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKQEAgLTc1OCw4ICs3NTgs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBi
eXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAg
ICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDEpOwpAQCAtNzkyLDcgKzc5Miw3IEBAIHZvaWQgSklUOjplbWl0
X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1
ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS0+dG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdExvYWQoYnl0ZWNvZGUudmFsdWUub2Zmc2V0
KCksIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KSwgcmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25UaHJvdywgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0oKSk7CiB9CkBAIC04MDAsOCArODAwLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpbwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9m
ZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
c3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCBy
ZWdUMSwgcmVnVDApOwogCkBAIC04MTcsOCArODE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9f
bnVtYmVyKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgp
OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwg
cmVnVDApOwogCkBAIC04MzIsOCArODMyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5n
KGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNv
ZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDAp
OwogCkBAIC04NzEsMTMgKzg3MSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJ
bnN0cnVjdGlvCiAKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMywg
Vk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAKLSAgICB1bnNpZ25lZCBleGNlcHRpb24gPSBieXRl
Y29kZS5leGNlcHRpb24ub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgZXhjZXB0aW9uID0gYnl0ZWNv
ZGUubV9leGNlcHRpb24ub2Zmc2V0KCk7CiAgICAgZW1pdFN0b3JlKGV4Y2VwdGlvbiwgcmVnVDEs
IHJlZ1QyKTsKIAogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zm
c2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdU
MCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwogCi0gICAg
dW5zaWduZWQgdGhyb3duVmFsdWUgPSBieXRlY29kZS50aHJvd25WYWx1ZS5vZmZzZXQoKTsKKyAg
ICB1bnNpZ25lZCB0aHJvd25WYWx1ZSA9IGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCk7
CiAgICAgZW1pdFN0b3JlKHRocm93blZhbHVlLCByZWdUMSwgcmVnVDApOwogCiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC04ODYsNyArODg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29u
c3QgSW5zdHJ1Y3RpbwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1l
dGFkYXRhLmJ1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIg
PSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBlbHNlCkBAIC05MTMsMTggKzkxMywxOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRT
Y29wZT4oKTsKLSAgICBpbnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCk7
CisgICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CiAgICAg
ZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Q2VsbChieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKLSAg
ICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLnRhYmxlSW5kZXg7Ci0gICAgdW5zaWduZWQg
ZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5k
ZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5zY3J1dGlu
ZWUub2Zmc2V0KCk7CisgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5k
ZXg7CisgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOworICAgIHVuc2lnbmVkIHNjcnV0aW5l
ZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtOTM5LDkgKzkzOSw5IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOwotICAgIHNpemVf
dCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0
T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1bHRP
ZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLnNjcnV0aW5lZS5vZmZz
ZXQoKTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAg
IFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CkBAIC05NTYsOSArOTU2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2NoYXIoY29uc3QgSW5zdAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwotICAgIHNpemVfdCB0
YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zm
c2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1bHRPZmZz
ZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLnNjcnV0aW5lZS5vZmZzZXQo
KTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKKyAgICB1
bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNv
ZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Ig
c3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0
cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CkBAIC05NzQsNyArOTc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVidWcoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRGVidWc+KCk7CiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJl
cXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVi
dWcsIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUuZGVidWdIb29rVHlwZSkpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVidWcsIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9kZWJ1
Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKQEAg
LTk5Niw3ICs5OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlv
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEdldFNjb3BlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwogICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdU
MCk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKQEAgLTEwMDYsOCArMTAwNiw4IEBA
IHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGNh
bGxlZSA9IGJ5dGVjb2RlLmNhbGxlZS5vZmZzZXQoKTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPEpT
Q2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLmNhY2hlZENhbGxlZTsKKyAgICBpbnQg
Y2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAgV3JpdGVCYXJyaWVyQmFz
ZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsKICAg
ICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFS
ZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTAzNiwx
NSArMTAzNiwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiAg
ICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5s
aW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dD
YXNlcyk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlc3VsdFJl
Zyk7CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmVzdWx0UmVn
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiogY2FjaGVk
U3RydWN0dXJlID0gJm1ldGFkYXRhLmNhY2hlZFN0cnVjdHVyZTsKLSAgICBpbnQgdGhpc1JlZ2lz
dGVyID0gYnl0ZWNvZGUuc3JjRHN0Lm9mZnNldCgpOworICAgIFdyaXRlQmFycmllckJhc2U8U3Ry
dWN0dXJlPiogY2FjaGVkU3RydWN0dXJlID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlOwor
ICAgIGludCB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKIAogICAg
IGVtaXRMb2FkKHRoaXNSZWdpc3RlciwgcmVnVDMsIHJlZ1QyKTsKIApAQCAtMTA1OCwxNiArMTA1
OCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNr
VGR6PigpOwotICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLnRhcmdldC5vZmZzZXQoKSwgcmVnVDAp
OworICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0Lm9mZnNldCgpLCByZWdUMCk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9m
ZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9m
ZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7CkBAIC0xMTEyLDEwICsxMTEyLDEwIEBAIHZvaWQg
SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQo
KTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEuYXJyYXlQcm9maWxlOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5Lm9mZnNldCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5t
X2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5h
ZGRCeVZhbEluZm8oKTsKICAgICAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwpA
QCAtMTE1OSw5ICsxMTU5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3By
b3BlcgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQo
KTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAogICAg
IExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTExNzgsMTAgKzExNzgsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Blcgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5h
bWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUuaW5k
ZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVtZXJhdG9yLm9m
ZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4Lm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yLm9mZnNldCgpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAogICAg
IGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CkBAIC0xMjE5LDkgKzEyMTksOSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVtZXJhdG9yLm9mZnNl
dCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLmluZGV4Lm9mZnNldCgpOworICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVj
b2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7CiAgICAg
ZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTEyNDQsOSArMTI0NCw5IEBA
IHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKIHZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZz
ZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleC5vZmZzZXQoKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwogICAg
IGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjcwLDggKzEyNzAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBUeXBl
TG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLnR5cGVMb2NhdGlvbjsKLSAg
ICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS50YXJnZXQub2Zmc2V0KCk7CisgICAgVHlw
ZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsK
KyAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldC5vZmZzZXQoKTsKIAog
ICAgIC8vIExvYWQgcGF5bG9hZCBpbiBUMC4gTG9hZCB0YWcgaW4gVDMuCiAgICAgZW1pdExvYWRQ
YXlsb2FkKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CkBAIC0xMzQ0LDcgKzEzNDQsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiAgICAgZW5zdXJlU2hhZG93Q2hp
Y2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJS
ZWcpOwogCiAgICAgc2NyYXRjaDFSZWcgPSByZWdUNDsKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUuc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNv
ZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1
ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAgLTEz
NTcsMTAgKzEzNTcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aQogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBh
IG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsK
ICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLnRo
aXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwotICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLnRoaXNW
YWx1ZS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Ro
aXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlLm9mZnNldCgpLCByZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MocmVnVDEs
IHJlZ1QyKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCksIHJl
Z1QzKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVn
VDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhp
c1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rp
b24pKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CShyZXZpc2lvbiAyMzk5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6
OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUu
c3JjLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CiAKICAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwpAQCAtNzcsNyArNzcsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
cmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVyblZh
bHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbXA+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0KTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTQsNyArOTQsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1
cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNG
aW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
ICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1f
dm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCkpOwogICAgIH0KIH0KIApAQCAtMTIwLDggKzEyMCw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9j
YXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
T2JqZWN0LCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQ
Uik7CiB9CkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmpl
Y3QoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBi
eXRlY29kZS5jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9
IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29u
c3RydWN0b3Iub2Zmc2V0KCk7CisgICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5t
X2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZvaWQgSklU
OjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKIHZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS52YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5cGUub2Zm
c2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2
YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNv
ZGUubV9wcm90b3R5cGUub2Zmc2V0KCk7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFz
ZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgogICAg
IC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0
aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAtMTg2
LDcgKzE4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1f
aW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0yMDQsOCArMjA0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTY0
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwg
cmVnVDApOwpAQCAtMjE3LDggKzIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNv
bnN0IEluc3RydWMKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgp
OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJl
Z1QwKTsKQEAgLTI0Niw4ICsyNDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQo
Y29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVy
YW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKQEAgLTI2MSw4ICsyNjEsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiB2b2lkIEpJVDo6ZW1pdF9vcF9p
c19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAg
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKQEAg
LTI3NCw4ICsyNzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3Ry
CiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVy
YW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cmVnVDApOwpAQCAtMjg2LDkgKzI4Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihj
b25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQu
b2Zmc2V0KCk7Ci0gICAgaW50IHR5cGUgPSBieXRlY29kZS50eXBlOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CisgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzA3LDggKzMwNyw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVyYW5k
Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXgu
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS52YWx1ZS5vZmZzZXQoKSwgcmV0dXJu
VmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZS5v
ZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNDMsOCArMzQzLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1pdGl2
ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMg
PSBieXRlY29kZS5zcmMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAgCkBAIC0zNjAsMTUgKzM2MCwx
NSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiB2b2lkIEpJVDo6
ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
ZnVuY3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm5hbWUub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZnVuY3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZS5vZmZzZXQoKSwgcmVnVDEpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCByZWdUMCwgcmVnVDEpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCksIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZz
ZXQoKSwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlm
IHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJl
CiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9y
IDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCkBAIC0zNzcsMjggKzM3
NywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUuZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7Ci0gICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0KTsKIAogICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIEdQUlJl
ZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAgIGJv
b2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwg
dmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkoKnZtKCksIEpTVmFsdWVSZWdzKHZh
bHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdl
dCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS52YWx1ZS5vZmZz
ZXQoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
QEAgLTQyMSw4ICs0MjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0
cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQo
KTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAg
LTQ0NiwxMyArNDQ2LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3Ry
dWMKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQ
dHI+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIFNwZWNpYWw6
OlBvaW50ZXIgcHRyID0gYnl0ZWNvZGUuc3BlY2lhbFBvaW50ZXI7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7Cisg
ICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgU3BlY2lhbDo6UG9p
bnRlciBwdHIgPSBieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyOworICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAg
ICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRy
KGFjdHVhbFBvaW50ZXJGb3IobV9jb2RlQmxvY2ssIHB0cikpKTsKLSAgICBzdG9yZTgoVHJ1c3Rl
ZEltbTMyKDEpLCAmbWV0YWRhdGEuaGFzSnVtcGVkKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQp
OwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC00NjAsMTggKzQ2MCwxOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYnl0ZWNvZGUubGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUucmhzLm9mZnNl
dCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOwogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21wYXJl
MzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAsIEpT
VmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhieXRlY29kZS5saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5yaHMub2Zm
c2V0KCksIHJlZ1QxKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0
KCksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCBy
ZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0
KTsKIH0KQEAgLTQ3OSwzMiArNDc5LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJ
bnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogCiAg
ICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7CiAg
ICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUuY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJh
bmNoSWZUcnV0aHkoKnZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gy
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLmxocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2Rl
LnJocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1Qx
KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAg
ICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLmxocy5vZmZzZXQoKSwgcmVnVDAs
IGJ5dGVjb2RlLnJocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRl
Y29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQpAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5W
YWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS52YWx1ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25Ob0V4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9u
SGFuZGxlcigqdm0oKSk7CiB9CkBAIC01MjMsOSArNTIzLDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
T3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKICAgICAK
QEAgLTU2Niw5ICs1NjYsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpjb21w
aWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
Q29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwotICAgIGludCBzcmMxID0gYnl0ZWNv
ZGUubGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwor
ICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXQpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAg
aW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAKQEAgLTYwNyw3ICs2MDcsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSnN0cmljdGVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QwLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKIH0KQEAgLTYxNyw3ICs2MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
am5zdHJpY3RlcShjb25zdCBJCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUudGFyZ2V0KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29tcGFyZVN0cmljdEVxLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC02MjUsOCAr
NjI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051
bWJlcj4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBp
bnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdFZSZWcg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZC5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJl
Z1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwpA
QCAtNjM5LDIwICs2MzksMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IElu
c3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm9wZXJhbmQu
b2Zmc2V0KCk7CisgICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIGludCBkc3RWUmVnID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUub3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC02ODMsMTAgKzY4MywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCBy
ZWdUMyk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSks
IHJlZ1QwKTsKICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZXhjZXB0aW9uLm9mZnNldCgpKTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9mZnNldCgpKTsKIAogICAg
IGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS50aHJvd25WYWx1ZS5vZmZzZXQo
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlLm9m
ZnNldCgpKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEZJWE1FOiBjb25zaWRlciBp
bmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50cnksIGluY2x1ZGluZwpA
QCAtNjk0LDcgKzY5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0
aW8KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4
CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5idWZm
ZXI7CisgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEu
bV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgbV9ieXRlY29k
ZU9mZnNldCk7CiAgICAgZWxzZQpAQCAtNzIxLDE4ICs3MjEsMTggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9z
Y29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7Ci0g
ICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOworICAgIGludCBj
dXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwotICAgIHNp
emVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZh
dWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1
bHRPZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLnNjcnV0aW5lZS5v
ZmZzZXQoKTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsK
KyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgog
ICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CkBAIC03NDcsOSArNzQ3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX2ltbShjb25zdCBJbnN0cgogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7Ci0gICAgc2l6ZV90IHRh
YmxlSW5kZXggPSBieXRlY29kZS50YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZz
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9mZnNl
dCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUuc2NydXRpbmVlLm9mZnNldCgp
OworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OworICAgIHVu
c2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2lt
cGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0
YWJsZUluZGV4KTsKQEAgLTc2NCw5ICs3NjQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
Y2hhcihjb25zdCBJbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7Ci0gICAgc2l6ZV90IHRhYmxl
SW5kZXggPSBieXRlY29kZS50YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCk7
Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUuc2NydXRpbmVlLm9mZnNldCgpOwor
ICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OworICAgIHVuc2ln
bmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV9kZWZhdWx0T2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5t
X3NjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU3RyaW5n
SnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKQEAgLTc4MiwxNSArNzgyLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2Rl
YnVnKGNvbnN0IEluc3RydWN0aW8KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlYnVnPigpOwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1
ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVn
LCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLmRlYnVnSG9va1R5cGUpKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdI
b29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51
bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3Jj
MSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBp
c0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04MjIsOCArODIyLDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogdm9pZCBKSVQ6OmVtaXRf
b3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVj
b2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpbwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVT
bG90OjpjYWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rp
b246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZWdUMCk7CkBAIC04NzgsOCArODc4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhj
b25zdCBJbnN0cnVjdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiogY2FjaGVkU3Ry
dWN0dXJlID0gJm1ldGFkYXRhLmNhY2hlZFN0cnVjdHVyZTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLnNyY0RzdC5vZmZzZXQoKSwgcmVnVDEpOworICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiogY2FjaGVkU3RydWN0dXJlID0gJm1ldGFkYXRhLm1fY2FjaGVkU3Ry
dWN0dXJlOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qub2Zm
c2V0KCksIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSk7
CiAKQEAgLTg5NCw4ICs4OTQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25z
dCBJbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
cmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5jYWxsZWUub2Zmc2V0KCk7Ci0g
ICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5j
YWNoZWRDYWxsZWU7CisgICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgp
OworICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRh
dGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKICAg
ICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKQEAgLTkyNiwxMyArOTI2LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0
ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoUmVnLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CiAg
ICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAg
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLmRzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS50YXJnZXQub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0Lm9mZnNldCgpLCByZWdUMCk7CiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQogCkBAIC05NDYsNyArOTQ2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJldHVy
blZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQpAQCAtOTU3LDcgKzk1Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3QKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDAs
IHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJveEJv
b2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpLCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKQEAgLTk2NSw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfamVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50
YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlRXEsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTk3NSw3ICs5NzUsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CkBAIC05ODUsMTAgKzk4NSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20oCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZh
bHVlLm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLmNvbnN0cnVjdG9y
Lm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5zdGFu
Y2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgY29u
c3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOworICAgIGludCBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKQEAgLTEwNjUsOCArMTA2NSw4IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKIHZvaWQgSklUOjplbWl0X29w
X25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCByZWdleHAgPSBi
eXRlY29kZS5yZWdleHAub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIGludCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwganNDYXN0PFJlZ0V4cCo+KG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KQEAgLTEwNzYsMTQgKzEwNzYsMTQgQEAgdm9pZCBKSVQ6OmVtaXRO
ZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUuc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQ
YXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKICNlbmRpZgotICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5
dGVjb2RlLmZ1bmN0aW9uRGVjbCk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhlYyA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogCiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlEID09
IG9wX25ld19mdW5jKQpAQCAtMTEyMiwxNCArMTEyMiwxNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAg
IGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCksIHJlZ1Qw
KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCks
IHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLnNjb3BlLm9mZnNl
dCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCksIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9
IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUuZnVuY3Rpb25EZWNsKTsKKyAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihi
eXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bj
b2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQpAQCAtMTE2OCwy
OCArMTE2OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1CiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZXNJbmRl
eCA9IGJ5dGVjb2RlLmFyZ3Yub2Zmc2V0KCk7Ci0gICAgaW50IHNpemUgPSBieXRlY29kZS5hcmdj
OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWVz
SW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgaW50IHNpemUgPSBieXRlY29k
ZS5tX2FyZ2M7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNJbmRleCAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LAotICAgICAgICAmbWV0YWRhdGEuYXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgICAgICAmbWV0YWRhdGEubV9h
cnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5l
d0FycmF5V2l0aFNpemU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubGVuZ3RoLm9mZnNldCgpOworICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUu
bV9sZW5ndGgub2Zmc2V0KCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwKLSAgICAgICAgJm1ldGFkYXRhLmFycmF5
QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0TG9hZChzaXplSW5kZXgsIHJl
Z1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXpl
QW5kUHJvZmlsZSwgZHN0LAotICAgICAgICAmbWV0YWRhdGEuYXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5
QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlmCiB9
CiAKQEAgLTExOTcsOSArMTE5Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRo
X3NpemUoY28KIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5i
YXNlLm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5v
ZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QxKTsKQEAgLTEyNDMsMTAgKzEyNDMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoYwogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwotICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CisgICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7Cisg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogICAg
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVn
VDEpOwpAQCAtMTI4OSw5ICsxMjg5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRl
eGVkX3Byb3BlcgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5v
ZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsK
IAogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTEzMDgsMTAgKzEzMDgsMTAgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Blcgogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGly
ZWN0UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUuaW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVtZXJh
dG9yLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yLm9mZnNldCgpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2Vs
bAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTM0OSw5ICsx
MzQ5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51
bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleC5vZmZzZXQo
KTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKQEAgLTEzNzMsOSArMTM3Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
c3RydWN0dXJlX3AKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29k
ZS5pbmRleC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7Cisg
ICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTEzOTgsOCArMTM5OCw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFR5cGVMb2NhdGlvbiogY2FjaGVk
VHlwZUxvY2F0aW9uID0gbWV0YWRhdGEudHlwZUxvY2F0aW9uOwotICAgIGludCB2YWx1ZVRvUHJv
ZmlsZSA9IGJ5dGVjb2RlLnRhcmdldC5vZmZzZXQoKTsKKyAgICBUeXBlTG9jYXRpb24qIGNhY2hl
ZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOworICAgIGludCB2YWx1ZVRv
UHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0Lm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCkBAIC0xNDY3LDcgKzE0NjcsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiAgICAgR1BSUmVnIHNj
cmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJl
Z2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0
Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLnNjb3BlLm9mZnNl
dCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3Bl
Lm9mZnNldCgpLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNo
YWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTQ4MCw4ICsxNDgw
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIEdQUlJl
ZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVu
dCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBz
Y3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS50aGlzVmFs
dWUub2Zmc2V0KCksIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
LnNjb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0No
aWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdU
MywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCkpOwogfQogCkBA
IC0xNDkxLDcgKzE0OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxv
dyhjCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9m
aWxlQ29udHJvbEZsb3c+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRp
b24gPSBtZXRhZGF0YS5iYXNpY0Jsb2NrTG9jYXRpb247CisgICAgQmFzaWNCbG9ja0xvY2F0aW9u
KiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2Rl
KCp0aGlzKTsKICNlbHNlCkBAIC0xNTAyLDcgKzE1MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX2NvbnRyb2xfZmxvdyhjCiB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3VudChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhy
ZWdUMCwgcmVnVDEpOwpAQCAtMTUxMyw4ICsxNTEzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfYXJn
dW1lbnRfY291bnQoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lw
ID0gYnl0ZWNvZGUubnVtUGFyYW1ldGVyc1RvU2tpcDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUu
bV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7CiAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBy
ZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CkBAIC0xNTQzLDggKzE1NDMsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50Pigp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0g
Ynl0ZWNvZGUuaW5kZXg7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIzOTk5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNjYxLDcgKzE2NjEsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRy
eU9TUkVudGVyCiAgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRlZEZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjb2Rl
QmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNoPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBt
ZXRhZGF0YS5idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9m
aWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9wcm9maWxlLm1fYnVja2V0
c1swXSA9IEpTVmFsdWU6OmVuY29kZShleGVjLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVyYW5k
KS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0yMjkyLDkgKzIyOTIsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBleGVjLT5jb2RlQmxvY2soKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRG
cm9tU2NvcGU+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUudmFyKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNP
YmplY3QqPihleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpKS5qc1ZhbHVl
KCkpOwotICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spLmdldFB1dEluZm87CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpz
Q2FzdDxKU09iamVjdCo+KGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQo
KSkuanNWYWx1ZSgpKTsKKyAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgaXMgYWx3
YXlzIGNvbnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29wZS4KICAgICBBU1NF
UlQoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpICE9IE1vZHVsZVZhcik7CkBAIC0yMzM0LDE4ICsy
MzM0LDE4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEUKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAKLSAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS52YXIpOwotICAgIEpTT2Jq
ZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
c2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnIo
Ynl0ZWNvZGUudmFsdWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsKLSAgICBHZXRQdXRJbmZvJiBnZXRQ
dXRJbmZvID0gbWV0YWRhdGEuZ2V0UHV0SW5mbzsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7CisgICAgSlNPYmplY3Qq
IHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5yKGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICBHZXRQdXRJbmZvJiBnZXRQ
dXRJbmZvID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGRvZXMg
bm90IGtlZXAgdGhlIHNjb3BlIHJlZ2lzdGVyIHZhbHVlIGFsaXZlIGluIERGRy4KICAgICBBU1NF
UlQoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpICE9IE1vZHVsZVZhcik7CiAKICAgICBpZiAoZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICBKU0xl
eGljYWxFbnZpcm9ubWVudCogZW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1l
bnQqPihzY29wZSk7Ci0gICAgICAgIGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0
KG1ldGFkYXRhLm9wZXJhbmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7Ci0gICAgICAg
IGlmIChXYXRjaHBvaW50U2V0KiBzZXQgPSBtZXRhZGF0YS53YXRjaHBvaW50U2V0KQorICAgICAg
ICBlbnZpcm9ubWVudC0+dmFyaWFibGVBdChTY29wZU9mZnNldChtZXRhZGF0YS5tX29wZXJhbmQp
KS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7CisgICAgICAgIGlmIChXYXRjaHBvaW50U2V0
KiBzZXQgPSBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpCiAgICAgICAgICAgICBzZXQtPnRvdWNo
KHZtLCAiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjM5OTkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUwLDEwICs1MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdl
dHRlckJ5SWQ+KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5OwotICAgIGludCBvcHRpb25zID0gYnl0
ZWNvZGUuYXR0cmlidXRlczsKLSAgICBpbnQgZ2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zm
c2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBpbnQgb3B0aW9ucyA9IGJ5dGVj
b2RlLm1fYXR0cmlidXRlczsKKyAgICBpbnQgZ2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3Nvci5v
ZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExv
YWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwpAQCAtNjMsMTAgKzYzLDEwIEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7
Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLnByb3BlcnR5OwotICAgIGludCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0cmli
dXRlczsKLSAgICBpbnQgc2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCk7CisgICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBpbnQgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmli
dXRlczsKKyAgICBpbnQgc2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKTsKIAog
ICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNl
dHRlciwgcmVnVDMpOwpAQCAtNzYsMTEgKzc2LDExIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigp
OwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVy
dHkgPSBieXRlY29kZS5wcm9wZXJ0eTsKLSAgICBpbnQgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLmF0
dHJpYnV0ZXM7Ci0gICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLmdldHRlci5vZmZzZXQoKTsKLSAg
ICBpbnQgc2V0dGVyID0gYnl0ZWNvZGUuc2V0dGVyLm9mZnNldCgpOworICAgIGludCBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7CisgICAgaW50IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Cisg
ICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLm1fZ2V0dGVyLm9mZnNldCgpOworICAgIGludCBzZXR0
ZXIgPSBieXRlY29kZS5tX3NldHRlci5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChi
YXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwpAQCAtOTEs
MTAgKzkxLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kKIHZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uu
b2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7
Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUuYXR0cmlidXRlczsKLSAgICBpbnQg
Z2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eS5vZmZzZXQoKTsKKyAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJp
YnV0ZXM7CisgICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCk7CiAK
ICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5
LCByZWdUMSwgcmVnVDApOwpAQCAtMTA1LDEwICsxMDUsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwoY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAg
IGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5hdHRyaWJ1dGVzOwotICAgIGludCBzZXR0ZXIgPSBieXRlY29kZS5hY2Nlc3Nvci5vZmZz
ZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICBpbnQgc2V0dGVyID0gYnl0ZWNv
ZGUubV9hY2Nlc3Nvci5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdU
Mik7CiAgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7CkBAIC0xMTksOSArMTE5
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlk
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2Ug
PSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnBy
b3BlcnR5OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1bHQsIGRzdCwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwo
KSk7CiB9CkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNv
bnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50
IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7
CiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdU
Mik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwog
fQpAQCAtMTQwLDEwICsxNDAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNv
ZGUucHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLmFycmF5UHJvZmlsZTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKICAgICBlbWl0TG9hZDIoYmFzZSwg
cmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKQEAgLTIwMCw3ICsyMDAsNyBA
QCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0CiAgICAgLy8gcHJvcGVy
dHk6IHRhZyhyZWdUMyksIHBheWxvYWQocmVnVDIpCiAgICAgLy8gc2NyYXRjaDogcmVnVDQKIAot
ICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENl
bGwocmVnVDMpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCByZWdU
MiwgcmVnVDQsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTIyNiw5ICsyMjYsOSBAQCBK
SVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0CiB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zm
c2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHkub2Zmc2V0KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCkBAIC0y
NzEsOSArMjcxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cgog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRl
Y29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEuYXJyYXlQcm9maWxlOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7Cisg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwogICAg
IAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVn
VDIpOwpAQCAtMzIxLDkgKzMyMSw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KIEpJVDo6SnVt
cExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCiB7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2Rl
LnZhbHVlLm9mZnNldCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5h
cnJheVByb2ZpbGU7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Cisg
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgCkBAIC0zODIsOSArMzgyLDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9w
PgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29k
ZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uu
b2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0gICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKKyAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKQEAgLTQy
Myw4ICs0MjMsOCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0CiAg
ICAgLy8gYmFzZTogdGFnKHJlZ1QxKSwgcGF5bG9hZChyZWdUMCkKICAgICAvLyBwcm9wZXJ0eTog
dGFnKHJlZ1QzKSwgcGF5bG9hZChyZWdUMikKIAotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwocmVnVDMpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZv
LCByZWdUMiwgcmVnVDIsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTQ2Myw5ICs0NjMs
OSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgaW50IHZh
bHVlOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKLSAgICAgICAgYmFz
ZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgICAgIHByb3BlcnR5ID0gYnl0ZWNvZGUu
cHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgICAgIHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0
KCk7CisgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgICAgIHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICAgICAgdmFsdWUgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3QpCkBA
IC00OTMsOSArNDkzLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNl
dCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJv
cGVydHkpKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTUxNiw4ICs1MTYsOCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0
QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
JiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCkBAIC01MzIsOSArNTMyLDkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAg
IGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsK
KyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU1NSw4ICs1NTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4o
KTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
cHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCkBAIC01NzIsMTYgKzU3MiwxNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNl
dCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAgIGlm
ICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90
RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsICZtZXRhZGF0YS5tb2Rl
TWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEp1bXAgbm90
QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRh
ZGF0YS5tX21vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1v
ZGU6OkFycmF5TGVuZ3RoKSkpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENl
bGwocmVnVDAsIHJlZ1QyLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2Rl
LmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwog
ICAgIH0KIApAQCAtNjAxLDggKzYwMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CiAgICAgCkBAIC02MTYsMTAgKzYxNiwxMCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9
IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHRoaXNWUmVnID0gYnl0ZWNvZGUudGhp
c1ZhbHVlLm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKTsKKyAgICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgZW1pdExvYWQodGhpc1ZSZWcsIHJlZ1Q0LCByZWdUMyk7CkBAIC02NDIsOCAr
NjQyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhp
c1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIApAQCAtNjYyLDkgKzY2Miw5IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2Ug
PSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVl
Lm9mZnNldCgpOwotICAgIGludCBkaXJlY3QgPSBtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRJc0Rp
cmVjdDsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIGludCBkaXJlY3QgPSBtZXRh
ZGF0YS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogICAgIAogICAgIGVtaXRMb2FkMihiYXNl
LCByZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIApAQCAtNjg4LDggKzY4
OCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZz
ZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbih0aGlzKTsKIApAQCAtNzA3LDkgKzcwNyw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLnByb3BlcnR5KSk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC03MjksOCArNzI5LDggQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCkBAIC03NjIsMTAgKzc2Miwx
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29k
ZS5zY29wZS5vZmZzZXQoKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRh
LnJlc29sdmVUeXBlOwotICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubG9jYWxTY29wZURl
cHRoOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc2Nv
cGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKKyAgICB1bnNpZ25lZCBkZXB0aCA9IG1ldGFk
YXRhLm1fbG9jYWxTY29wZURlcHRoOwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewpAQCAt
Nzg5LDcgKzc4OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwg
cmVnVDApOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4aWNh
bEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwg
cmVnVDEsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6
CkBAIC04MDUsNyArODA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25z
dCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgLy8gU2luY2UgdGhlc2UgR2xvYmFsUHJv
cGVydHkgY2FuIGJlIGNoYW5nZWQgdG8gR2xvYmFsTGV4aWNhbFZhciwgd2Ugc2hvdWxkIGxvYWQg
dGhlIHZhbHVlIGZyb20gbWV0YWRhdGEuCi0gICAgICAgIEpTU2NvcGUqKiBjb25zdGFudFNjb3Bl
U2xvdCA9IG1ldGFkYXRhLmNvbnN0YW50U2NvcGUuc2xvdCgpOworICAgICAgICBKU1Njb3BlKiog
Y29uc3RhbnRTY29wZVNsb3QgPSBtZXRhZGF0YS5tX2NvbnN0YW50U2NvcGUuc2xvdCgpOwogICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJl
Z1QxKTsKICAgICAgICAgbG9hZFB0cihjb25zdGFudFNjb3BlU2xvdCwgcmVnVDApOwpAQCAtODE1
LDcgKzgxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLnJlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwogCiAgICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CkBAIC04Nzks
MTEgKzg3OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2Nv
cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUg
PSBieXRlY29kZS5zY29wZS5vZmZzZXQoKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9
IG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1
Y3R1cmVTbG90ID0gbWV0YWRhdGEuc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9w
ZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEub3BlcmFu
ZCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBzY29w
ZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOworICAgIHVpbnRw
dHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0
YS5tX29wZXJhbmQpOwogICAgIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewpAQCAtOTQwLDcgKzk0MCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBM
aXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5nZXRQdXRJbmZvLCByZWdU
MCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CiAgICAg
ICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8g
TG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc05vdEdsb2JhbFByb3Bl
cnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5cGUp
KTsKQEAgLTk1NSw3ICs5NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBU
b0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5nZXRQdXRJbmZvLCByZWdUMCk7CisgICAg
ICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CiAgICAgICAgIGFuZDMy
KFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNv
bHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKQEAgLTk5NCw3
ICs5OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAg
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayks
IG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCkBA
IC0xMDMwLDEyICsxMDMwLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25z
dCBJbnMKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCk7Ci0gICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHNjb3BlID0gYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8o
Ynl0ZWNvZGUpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5zdHJ1
Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5vcGVyYW5kKTsKKyAgICBTdHJ1Y3R1cmUqKiBzdHJ1
Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOworICAgIHVpbnRwdHJfdCog
b3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5tX29w
ZXJhbmQpOwogICAgIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChy
ZXNvbHZlVHlwZSkgewpAQCAtMTA2OSw5ICsxMDY5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGly
ZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0
YS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJ
bmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0
YWRhdGEubV93YXRjaHBvaW50U2V0KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNs
b3QpLCB2YWx1ZSwgbWV0YWRhdGEud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
dmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKQEAgLTEwNzksNyArMTA3OSw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZh
bHVlLCBtZXRhZGF0YS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJl
VmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBj
YXNlIER5bmFtaWM6CkBAIC0xMDk1LDcgKzEwOTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoY29uc3QgSW5zCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBz
a2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEuZ2V0UHV0SW5mbywgcmVnVDApOwor
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwogICAgICAgICBh
bmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQg
UmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CkBAIC0xMTE0
LDcgKzExMTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAg
ICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAg
ICAgICAgbG9hZDMyKCZtZXRhZGF0YS5nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQz
MigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBp
bnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKQEAgLTExNjIsOSArMTE2Miw5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKIHZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0RnJvbUFyZ3VtZW50cz4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgp
OwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXg7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZz
ZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAgIGVtaXRM
b2FkUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
RGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJh
cnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVnVDEpOwpAQCAtMTE3Niw5ICsxMTc2LDkg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
VG9Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFyZ3VtZW50cy5v
ZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleDsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUu
bV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
KyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogICAgIAogICAgIGVt
aXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDIzOTk5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMTAgKzU1LDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNl
dCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CisgICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHku
b2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFs
SW5mbygpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0x
MzQsNyArMTM0LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdAog
ICAgIC8vIHByb3BlcnR5OiByZWdUMQogICAgIC8vIHNjcmF0Y2g6IHJlZ1QzCiAKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qx
KSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1Qz
LCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0xNTksOSArMTU5LDkgQEAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwot
ICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9m
ZnNldCgpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAogICAgIGxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKQEAgLTIwNSw5
ICsyMDUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJh
c2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
LnByb3BlcnR5Lm9mZnNldCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5hcnJheVByb2ZpbGU7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTI2NSw4ICsyNjUsOCBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRp
Z3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhp
bmdUeXBlIGluZGV4aW5nU2hhcGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zm
c2V0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmls
ZTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CiAKQEAgLTI5Niw3ICsyOTYsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzCiAgICAgfQogICAgIGNhc2UgQ29udGlndW91c1NoYXBl
OgogICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0Vp
Z2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihieXRl
Y29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0zMjMsOCArMzIzLDgg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGlu
dCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIApAQCAt
MzM3LDcgKzMzNyw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnkK
ICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMyk7CiAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCByZWdU
MSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVtaXRX
cml0ZUJhcnJpZXIoYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAKICAg
ICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMzYyLDggKzM2Miw4IEBAIEpJVFB1dEJ5SWRHZW5lcmF0
b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAvLyBwcm9wZXJ0eTogcmVnVDEKICAgICAvLyBz
Y3JhdGNoOiByZWdUMgogCi0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIGludCBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdU
MSkpOwogICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QxLCByZWdU
MSwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwpAQCAtMzk3LDkgKzM5Nyw5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBpbnQgdmFsdWU7CiAKICAgICBh
dXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBiYXNlID0gYnl0ZWNvZGUu
YmFzZS5vZmZzZXQoKTsKLSAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZz
ZXQoKTsKLSAgICAgICAgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICAgICAgcHJvcGVydHkgPSBieXRl
Y29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQyNSw1NyArNDI1
LDU3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5i
YXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0
cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmFjY2Vzc29yLm9m
ZnNldCgpLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlk
LCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpLmltcGwo
KSwgb3B0aW9ucywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nl
c3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0
dGVyQnlJZCwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlk
PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKSwg
cmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQo
KSwgcmVnVDApOworICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCks
IHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1Qw
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9w
dGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJf
YnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5SWQ+
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5iYXNlLm9mZnNldCgpLCBy
ZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5hdHRyaWJ1dGVzOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZ2V0dGVyLm9mZnNldCgpLCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5zZXR0ZXIub2Zmc2V0KCksIHJl
Z1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDAs
IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KS5pbXBsKCksIGF0dHJp
YnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9n
ZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUuYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0
ZXMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUuYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGludDMyX3QgYXR0cmli
dXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5VmFsLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUuYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QyKTsKICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMCwgcmVnVDEsIGF0dHJp
YnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwot
ICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5OworICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihwcm9wZXJ0eSkuaW1wbCgpKTsKIH0KQEAgLTQ4Myw5ICs0ODMsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5v
ZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsK
KyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eS5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIHJlZ1QwLCByZWdU
MSk7CkBAIC00OTQsOSArNDk0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25z
dCBJbnN0cgogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5iYXNlLm9mZnNl
dCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNl
dCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CiAKQEAgLTUxOCw4ICs1MTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4o
KTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
cHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCkBAIC01MzMsOSArNTMzLDkgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERp
cmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0
eSkpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CiAK
QEAgLTU1Nyw4ICs1NTcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVj
dChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBp
bnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOwogCkBAIC01NzMsMTcgKzU3MywxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLnByb3BlcnR5KSk7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZS
ZWcsIHJlZ1QwKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAs
IGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RBcnJh
eUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRh
Lm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFy
cmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHJlZ1QxLCAmbWV0YWRhdGEubW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVBy
b2ZpbGUpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1
YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlKSwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKKyAgICAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1fbW9k
ZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RBcnJh
eUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTYwMSwxMCArNjAxLDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5
SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCB0
aGlzVlJlZyA9IGJ5dGVjb2RlLnRoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkp
KTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGlu
dCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdGhpc1ZSZWcg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKQEAgLTYyNyw4ICs2MjcsOCBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIApAQCAtNjQ0
LDggKzY0NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAgaW50IHJl
c3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0
aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKQEAgLTY2MCw5ICs2NjAsOSBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBiYXNl
VlJlZyA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlVlJlZyA9IGJ5dGVj
b2RlLnZhbHVlLm9mZnNldCgpOwotICAgIHVuc2lnbmVkIGRpcmVjdCA9IG1ldGFkYXRhLmZsYWdz
ICYgUHV0QnlJZElzRGlyZWN0OworICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5v
ZmZzZXQoKTsKKyAgICBpbnQgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsK
KyAgICB1bnNpZ25lZCBkaXJlY3QgPSBtZXRhZGF0YS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0
OwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1
cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8g
dG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3Rl
cnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCkBAIC02OTAsNyArNjkwLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCkBAIC03MDQsOSAr
NzA0LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogdm9pZCBK
SVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJ
ZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZVZSZWcgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkp
OworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50
IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CiAKQEAg
LTcyNyw4ICs3MjcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5z
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107
CiAKQEAgLTc1OSwxMCArNzU5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
Y29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAg
IGludCBzY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOwotICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gbWV0YWRhdGEucmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBt
ZXRhZGF0YS5sb2NhbFNjb3BlRGVwdGg7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOworICAgIHVu
c2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKICAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7CkBAIC03ODQsNyArNzg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwg
c2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLmxleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxFbnZp
cm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC04
MDEsNyArODAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgog
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgLy8gU2luY2UgdGhlc2UgR2xvYmFsUHJvcGVydHkg
Y2FuIGJlIGNoYW5nZWQgdG8gR2xvYmFsTGV4aWNhbFZhciwgd2Ugc2hvdWxkIGxvYWQgdGhlIHZh
bHVlIGZyb20gbWV0YWRhdGEuCi0gICAgICAgIEpTU2NvcGUqKiBjb25zdGFudFNjb3BlU2xvdCA9
IG1ldGFkYXRhLmNvbnN0YW50U2NvcGUuc2xvdCgpOworICAgICAgICBKU1Njb3BlKiogY29uc3Rh
bnRTY29wZVNsb3QgPSBtZXRhZGF0YS5tX2NvbnN0YW50U2NvcGUuc2xvdCgpOwogICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKICAgICAgICAgbG9hZFB0cihjb25zdGFudFNjb3BlU2xvdCwgcmVnVDApOwogICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CkBAIC04MTAsNyArODEwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
ewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEu
cmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVU
eXBlLCByZWdUMCk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAg
IGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKQEAgLTg3MywxMSArODczLDExIEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNl
dCgpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEuZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5z
dHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5vcGVyYW5kKTsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5v
ZmZzZXQoKTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRh
ZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKICAgICBh
dXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKQEAgLTkz
Nyw3ICs5MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJCiAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxv
YWQzMigmbWV0YWRhdGEuZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFk
YXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAog
CiAgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CkBAIC05NTMsNyArOTUzLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0
YWRhdGEuZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0
UHV0SW5mbywgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6
dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAg
IEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEdsb2JhbFByb3BlcnR5KSk7CkBAIC05OTIsNyArOTkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29w
ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRz
dCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIApAQCAtMTAyMywxMiArMTAyMywxMiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzY29wZSA9
IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVl
Lm9mZnNldCgpOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Cisg
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKICAgICBHZXRQdXRJbmZv
IGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEuc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRy
X3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEu
b3BlcmFuZCk7CisgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3Ry
dWN0dXJlLnNsb3QoKTsKKyAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAogICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewpAQCAtMTA2NCw5ICsxMDY0
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAg
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoq
PihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEud2F0Y2hwb2lu
dFNldCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNl
dCk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTA3
NCw3ICsxMDc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwog
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9z
dXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS53YXRjaHBvaW50U2V0
KTsKKyAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZh
bHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwogICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTEwOTIsNyArMTA5Miw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAg
ICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5nZXRQdXRJ
bmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdU
MCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJl
Z1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2Jh
bFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKQEAgLTExMTEsNyArMTExMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShjb25zdCBJbnMKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qg
c2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLmdldFB1dEluZm8sIHJlZ1QwKTsK
KyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKICAgICAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2Fk
IFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBi
cmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwpAQCAt
MTE1OSw5ICsxMTU5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25z
dAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFyZ3VtZW50cy5v
ZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleDsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1f
YXJndW1lbnRzLm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAg
ICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBs
b2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBp
bmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwpAQCAtMTE3Miw5
ICsxMTcyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFy
Z3VtZW50cy5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleDsKLSAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRzID0g
Ynl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogICAg
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwpAQCAtMTczOCwxMCArMTczOCwxMCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRB
cnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFy
cmF5VHlwZSB0eXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJh
eVByb2ZpbGU7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0g
cmVnVDA7CkBAIC0xODEzLDEwICsxODEzLDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEuYXJyYXlQcm9maWxlOworICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNGbG9h
dCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7
CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKIAogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIzOTk5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMzMsNyArMTMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBMTEludCB7CiAgICAgICAgIGJvb2wgX19iX2NvbmRpdGlvbiA9IChjb25kaXRpb24pOyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChfX2JfY29uZGl0
aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICBKVU1QX1RPKEpVTVBfT0ZGU0VUKGJ5dGVjb2RlLnRhcmdldCkpOyBcCisgICAgICAgICAgICBK
VU1QX1RPKEpVTVBfT0ZGU0VUKGJ5dGVjb2RlLm1fdGFyZ2V0KSk7IFwKICAgICAgICAgZWxzZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgICAgIEpVTVBfVE8ocGMtPnNpemUoKSk7IFwKICAgICAgICAgTExJTlRfRU5EX0lNUEwo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE0MiwyMCAr
MTQyLDIwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogI2RlZmluZSBMTElO
VF9SRVRVUk4odmFsdWUpIGRvIHsgICAgICAgICAgICAgICAgXAogICAgICAgICBKU1ZhbHVlIF9f
cl9yZXR1cm5WYWx1ZSA9ICh2YWx1ZSk7ICAgICAgXAogICAgICAgICBMTElOVF9DSEVDS19FWENF
UFRJT04oKTsgICAgICAgICAgICAgICAgXAotICAgICAgICBMTElOVF9PUChieXRlY29kZS5kc3Qp
ID0gX19yX3JldHVyblZhbHVlOyAgICAgICAgICBcCisgICAgICAgIExMSU5UX09QKGJ5dGVjb2Rl
Lm1fZHN0KSA9IF9fcl9yZXR1cm5WYWx1ZTsgICAgICAgICAgXAogICAgICAgICBMTElOVF9FTkRf
SU1QTCgpOyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAj
ZGVmaW5lIExMSU5UX1JFVFVSTl9QUk9GSUxFRCh2YWx1ZSkgZG8geyAgICAgICAgICAgICAgIFwK
ICAgICAgICAgSlNWYWx1ZSBfX3JwX3JldHVyblZhbHVlID0gKHZhbHVlKTsgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBMTElOVF9PUChieXRlY29kZS5kc3QpID0gX19y
cF9yZXR1cm5WYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBMTElOVF9P
UChieXRlY29kZS5tX2RzdCkgPSBfX3JwX3JldHVyblZhbHVlOyAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgICAgIExMSU5UX1BST0ZJTEVfVkFMVUUoX19ycF9yZXR1cm5WYWx1ZSk7ICAg
ICAgICAgIFwKICAgICAgICAgTExJTlRfRU5EX0lNUEwoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgTExJTlRf
UFJPRklMRV9WQUxVRSh2YWx1ZSkgZG8geyBcCi0gICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRhKGV4
ZWMpLnByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAorICAg
ICAgICBieXRlY29kZS5tZXRhZGF0YShleGVjKS5tX3Byb2ZpbGUubV9idWNrZXRzWzBdID0gSlNW
YWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExM
SU5UX0NBTExfRU5EX0lNUEwoZXhlYywgY2FsbFRhcmdldCwgY2FsbFRhcmdldFRhZykgXApAQCAt
NTcxLDcgKzU3MSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfb2JqZWMK
ICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdPYmpl
Y3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAg
ICBMTElOVF9SRVRVUk4oY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgbWV0YWRhdGEub2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCkpKTsKKyAgICBMTElOVF9SRVRVUk4oY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYywgbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5z
dHJ1Y3R1cmUoKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Fy
cmF5KQpAQCAtNTc5LDcgKzU3OSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9u
ZXdfYXJyYXkKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4
ZWMpOwotICAgIExMSU5UX1JFVFVSTihjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChleGVj
LCAmbWV0YWRhdGEuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYml0d2lzZV9jYXN0PEpTVmFsdWUq
PigmTExJTlRfT1AoYnl0ZWNvZGUuYXJndikpLCBieXRlY29kZS5hcmdjKSk7CisgICAgTExJTlRf
UkVUVVJOKGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJkxMSU5UX09QKGJ5
dGVjb2RlLm1fYXJndikpLCBieXRlY29kZS5tX2FyZ2MpKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25ld19hcnJheV93aXRoX3NpemUpCkBAIC01ODcsMTQgKzU4NywxNCBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5CiAgICAgTExJTlRfQkVH
SU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgIExMSU5U
X1JFVFVSTihjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgJm1ldGFkYXRhLmFycmF5
QWxsb2NhdGlvblByb2ZpbGUsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgTExJTlRfT1Bf
QyhieXRlY29kZS5sZW5ndGgpLmpzVmFsdWUoKSkpOworICAgIExMSU5UX1JFVFVSTihjb25zdHJ1
Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1f
bGVuZ3RoKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X25ld19yZWdleHApCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIFJlZ0V4cCogcmVnRXhwID0ganNDYXN0PFJlZ0V4
cCo+KExMSU5UX09QX0MoYnl0ZWNvZGUucmVnZXhwKS5qc1ZhbHVlKCkpOworICAgIFJlZ0V4cCog
cmVnRXhwID0ganNDYXN0PFJlZ0V4cCo+KExMSU5UX09QX0MoYnl0ZWNvZGUubV9yZWdleHApLmpz
VmFsdWUoKSk7CiAgICAgQVNTRVJUKHJlZ0V4cC0+aXNWYWxpZCgpKTsKICAgICBMTElOVF9SRVRV
Uk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOwogfQpAQCAtNjAzLDggKzYwMyw4IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pbnN0YW5jZW8KIHsKICAgICBMTElOVF9CRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIEpTVmFs
dWUgdmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCk7Ci0gICAgSlNW
YWx1ZSBwcm90byA9IExMSU5UX09QX0MoYnl0ZWNvZGUucHJvdG90eXBlKS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgp
OworICAgIEpTVmFsdWUgcHJvdG8gPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fcHJvdG90eXBlKS5q
c1ZhbHVlKCk7CiAgICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbihKU09iamVjdDo6ZGVmYXVsdEhh
c0luc3RhbmNlKGV4ZWMsIHZhbHVlLCBwcm90bykpKTsKIH0KIApAQCAtNjEzLDkgKzYxMyw5IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pbnN0YW5jZW8KICAgICBMTElOVF9CRUdJ
TigpOwogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7
Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUudmFsdWUpLmpzVmFsdWUo
KTsKLSAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gTExJTlRfT1BfQyhieXRlY29kZS5jb25zdHJ1
Y3RvcikuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSA9IExMSU5UX09Q
X0MoYnl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IGNvbnN0cnVjdG9yID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2NvbnN0cnVjdG9yKS5qc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSBoYXNJbnN0YW5jZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5t
X2hhc0luc3RhbmNlVmFsdWUpLmpzVmFsdWUoKTsKIAogICAgIEFTU0VSVChjb25zdHJ1Y3Rvci5p
c09iamVjdCgpKTsKICAgICBBU1NFUlQoaGFzSW5zdGFuY2VWYWx1ZSAhPSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkg
fHwgIWNvbnN0cnVjdG9yLmdldE9iamVjdCgpLT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmlt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSk7CkBAIC02MjksOCArNjI5LDggQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RyeV9nZXRfYgogICAgIExMSU5UX0JFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNv
ZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQ
cm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkp
OwogCiAgICAgYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7CkBA
IC02NDQsOCArNjQ0LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9p
ZAogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEJ5
SWREaXJlY3Q+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5
dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgUHJv
cGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAKICAgICBib29sIGZvdW5kID0gYmFz
ZVZhbHVlLmdldE93blByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7CkBAIC02NTYsNyAr
NjU2LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgIGlm
ICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIHNsb3QuaXNDYWNoZWFibGUoKSkgewogICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwogICAgICAgICB7
Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLnN0cnVj
dHVyZTsKKyAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEu
bV9zdHJ1Y3R1cmU7CiAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlSUQpIHsKICAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIGEgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xk
U3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYiA9IGJhc2VWYWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKQEAgLTY3Miw4ICs2NzIsOCBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzbG90LmlzVmFsdWUoKSkg
ewogICAgICAgICAgICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xkIGNhY2hl
LgotICAgICAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIG1ldGFk
YXRhLm9mZnNldCA9IDA7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZSA9IDA7Cisg
ICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IDA7CiAKICAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQogICAgICAgICAgICAgICAgICYm
ICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewpAQCAtNjgxLDgg
KzY4MSw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKIAogICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2sp
OwogCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgp
OwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7
CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNzM1LDE5ICs3MzUsMTkgQEAg
c3RhdGljIHZvaWQgc2V0dXBHZXRCeUlkUHJvdG90eXBlQ2FjaGUoRQogICAgIENvbmN1cnJlbnRK
U0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogCiAgICAgaWYgKHNsb3QuaXNVbnNl
dCgpKSB7Ci0gICAgICAgIG1ldGFkYXRhLm1vZGUgPSBHZXRCeUlkTW9kZTo6VW5zZXQ7Ci0gICAg
ICAgIG1ldGFkYXRhLm1vZGVNZXRhZGF0YS51bnNldE1vZGUuc3RydWN0dXJlID0gc3RydWN0dXJl
LT5pZCgpOworICAgICAgICBtZXRhZGF0YS5tX21vZGUgPSBHZXRCeUlkTW9kZTo6VW5zZXQ7Cisg
ICAgICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLnVuc2V0TW9kZS5zdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUtPmlkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKHNsb3QuaXNW
YWx1ZSgpKTsKIAotICAgIG1ldGFkYXRhLm1vZGUgPSBHZXRCeUlkTW9kZTo6UHJvdG9Mb2FkOwot
ICAgIG1ldGFkYXRhLm1vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVjdHVyZSA9IHN0cnVj
dHVyZS0+aWQoKTsKLSAgICBtZXRhZGF0YS5tb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5jYWNo
ZWRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbWV0YWRhdGEubW9kZU1ldGFkYXRhLnByb3RvTG9hZE1v
ZGUuY2FjaGVkU2xvdCA9IHNsb3Quc2xvdEJhc2UoKTsKKyAgICBtZXRhZGF0YS5tX21vZGUgPSBH
ZXRCeUlkTW9kZTo6UHJvdG9Mb2FkOworICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLnByb3Rv
TG9hZE1vZGUuc3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgpOworICAgIG1ldGFkYXRhLm1fbW9k
ZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkT2Zmc2V0ID0gb2Zmc2V0OworICAgIG1ldGFk
YXRhLm1fbW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkU2xvdCA9IHNsb3Quc2xvdEJh
c2UoKTsKICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBwb2ludGVyIHdpbGwgcmVtYWluIHZhbGlk
IGJlY2F1c2UgaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IGVpdGhlciBhIHdhdGNocG9pbnQgZmlyZSBv
cgogICAgIC8vIGR1cmluZyBHQyB3aGVuIHdlIGNsZWFyIHRoZSBMTEludCBjYWNoZXMuCi0gICAg
bWV0YWRhdGEubW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkU2xvdCA9IHNsb3Quc2xv
dEJhc2UoKTsKKyAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLmNhY2hl
ZFNsb3QgPSBzbG90LnNsb3RCYXNlKCk7CiB9CiAKIApAQCAtNzU3LDI5ICs3NTcsMjkgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEoZXhlYyk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5
dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgUHJv
cGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFsdWUu
Z2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsKLSAg
ICBMTElOVF9PUChieXRlY29kZS5kc3QpID0gcmVzdWx0OworICAgIExMSU5UX09QKGJ5dGVjb2Rl
Lm1fZHN0KSA9IHJlc3VsdDsKICAgICAKICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xP
VwogICAgICAgICAmJiBiYXNlVmFsdWUuaXNDZWxsKCkKICAgICAgICAgJiYgc2xvdC5pc0NhY2hl
YWJsZSgpKSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVy
ZUlEOwotICAgICAgICAgICAgYXV0byBtb2RlID0gbWV0YWRhdGEubW9kZTsKKyAgICAgICAgICAg
IGF1dG8gbW9kZSA9IG1ldGFkYXRhLm1fbW9kZTsKICAgICAgICAgICAgIHN3aXRjaCAobW9kZSkg
ewogICAgICAgICAgICAgY2FzZSBHZXRCeUlkTW9kZTo6RGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1
Y3R1cmU7CisgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX21vZGVN
ZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIEdldEJ5SWRNb2RlOjpVbnNldDoKLSAgICAgICAgICAgICAgICBvbGRT
dHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1vZGVNZXRhZGF0YS51bnNldE1vZGUuc3RydWN0dXJlOwor
ICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEu
dW5zZXRNb2RlLnN0cnVjdHVyZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgR2V0QnlJZE1vZGU6OlByb3RvTG9hZDoKLSAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1
cmVJRCA9IG1ldGFkYXRhLm1vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVjdHVyZTsKKyAg
ICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLnBy
b3RvTG9hZE1vZGUuc3RydWN0dXJlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmVJRCA9IDA7CkBAIC03OTks
MTIgKzc5OSwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CiAg
ICAgICAgIGlmIChzbG90LmlzVmFsdWUoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVl
KSB7CiAgICAgICAgICAgICAvLyBTdGFydCBvdXQgYnkgY2xlYXJpbmcgb3V0IHRoZSBvbGQgY2Fj
aGUuCi0gICAgICAgICAgICBtZXRhZGF0YS5tb2RlID0gR2V0QnlJZE1vZGU6OkRlZmF1bHQ7Ci0g
ICAgICAgICAgICBtZXRhZGF0YS5tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlID0g
MDsKLSAgICAgICAgICAgIG1ldGFkYXRhLm1vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5jYWNoZWRP
ZmZzZXQgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9tb2RlID0gR2V0QnlJZE1vZGU6OkRl
ZmF1bHQ7CisgICAgICAgICAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5z
dHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuZGVmYXVs
dE1vZGUuY2FjaGVkT2Zmc2V0ID0gMDsKIAogICAgICAgICAgICAgLy8gUHJldmVudCB0aGUgcHJv
dG90eXBlIGNhY2hlIGZyb20gZXZlciBoYXBwZW5pbmcuCi0gICAgICAgICAgICBtZXRhZGF0YS5o
aXRDb3VudEZvckxMSW50Q2FjaGluZyA9IDA7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2hpdENv
dW50Rm9yTExJbnRDYWNoaW5nID0gMDsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKICAgICAgICAgICAgICAgICAmJiAh
c3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKQEAgLTgxMiwyNCAr
ODEyLDI0IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1vZGVNZXRhZGF0
YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0gICAgICAgICAgICAg
ICAgbWV0YWRhdGEubW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLmNhY2hlZE9mZnNldCA9IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEu
ZGVmYXVsdE1vZGUuc3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgpOworICAgICAgICAgICAgICAg
IG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLmNhY2hlZE9mZnNldCA9IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoVU5MSUtF
TFkobWV0YWRhdGEuaGl0Q291bnRGb3JMTEludENhY2hpbmcgJiYgKHNsb3QuaXNWYWx1ZSgpIHx8
IHNsb3QuaXNVbnNldCgpKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtZXRhZGF0
YS5tX2hpdENvdW50Rm9yTExJbnRDYWNoaW5nICYmIChzbG90LmlzVmFsdWUoKSB8fCBzbG90Lmlz
VW5zZXQoKSkpKSB7CiAgICAgICAgICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpICE9IGJhc2VW
YWx1ZSk7CiAKLSAgICAgICAgICAgIGlmICghKC0tbWV0YWRhdGEuaGl0Q291bnRGb3JMTEludENh
Y2hpbmcpKQorICAgICAgICAgICAgaWYgKCEoLS1tZXRhZGF0YS5tX2hpdENvdW50Rm9yTExJbnRD
YWNoaW5nKSkKICAgICAgICAgICAgICAgICBzZXR1cEdldEJ5SWRQcm90b3R5cGVDYWNoZShleGVj
LCB2bSwgcGMsIG1ldGFkYXRhLCBiYXNlQ2VsbCwgc2xvdCwgaWRlbnQpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XCiAgICAgICAgICYmIGlzSlNB
cnJheShiYXNlVmFsdWUpCiAgICAgICAgICYmIGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCkgewotICAgICAgICBtZXRhZGF0YS5tb2RlID0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3Ro
OwotICAgICAgICBuZXcgKCZtZXRhZGF0YS5tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFy
cmF5UHJvZmlsZSkgQXJyYXlQcm9maWxlKGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQocGMpKTsK
LSAgICAgICAgbWV0YWRhdGEubW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2Zp
bGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkpOwor
ICAgICAgICBtZXRhZGF0YS5tX21vZGUgPSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGg7CisgICAg
ICAgIG5ldyAoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVBy
b2ZpbGUpIEFycmF5UHJvZmlsZShjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKSk7CisgICAg
ICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUu
b2JzZXJ2ZVN0cnVjdHVyZShiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkpOwogCiAg
ICAgICAgIC8vIFByZXZlbnQgdGhlIHByb3RvdHlwZSBjYWNoZSBmcm9tIGV2ZXIgaGFwcGVuaW5n
LgotICAgICAgICBtZXRhZGF0YS5oaXRDb3VudEZvckxMSW50Q2FjaGluZyA9IDA7CisgICAgICAg
IG1ldGFkYXRhLm1faGl0Q291bnRGb3JMTEludENhY2hpbmcgPSAwOwogICAgIH0KIAogICAgIExM
SU5UX1BST0ZJTEVfVkFMVUUocmVzdWx0KTsKQEAgLTg0MiwxNCArODQyLDE0IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wUHV0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGV4ZWMpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUucHJvcGVydHkpOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgIAotICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwg
Y29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBpZiAobWV0YWRhdGEuZmxhZ3MgJiBQ
dXRCeUlkSXNEaXJlY3QpCi0gICAgICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJl
aWZ5KHZtLCBleGVjLCBhc09iamVjdChiYXNlVmFsdWUpLCBpZGVudCwgTExJTlRfT1BfQyhieXRl
Y29kZS52YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsKKyAgICBpZiAobWV0YWRhdGEubV9mbGFncyAm
IFB1dEJ5SWRJc0RpcmVjdCkKKyAgICAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RXaXRo
UmVpZnkodm0sIGV4ZWMsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIGlkZW50LCBMTElOVF9PUF9DKGJ5
dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAgZWxzZQotICAgICAgICBiYXNl
VmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVlKS5q
c1ZhbHVlKCksIHNsb3QpOworICAgICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50
LCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAgTExJ
TlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNT
X1NMT1cKQEAgLTg1Nyw3ICs4NTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cHV0X2J5X2lkCiAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewogCiAgICAgICAg
IHsKLSAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEub2xk
U3RydWN0dXJlOworICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtZXRh
ZGF0YS5tX29sZFN0cnVjdHVyZTsKICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmVJRCkgewog
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgp
LmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBiID0gYmFz
ZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwpAQCAtODcyLDExICs4NzIsMTEgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICB9CiAKICAgICAg
ICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xkIGNhY2hlLgotICAgICAgICBt
ZXRhZGF0YS5vbGRTdHJ1Y3R1cmUgPSAwOwotICAgICAgICBtZXRhZGF0YS5vZmZzZXQgPSAwOwot
ICAgICAgICBtZXRhZGF0YS5uZXdTdHJ1Y3R1cmUgPSAwOwotICAgICAgICBtZXRhZGF0YS5zdHJ1
Y3R1cmVDaGFpbi5jbGVhcigpOwotICAgICAgICBtZXRhZGF0YS5mbGFncyA9IHN0YXRpY19jYXN0
PFB1dEJ5SWRGbGFncz4obWV0YWRhdGEuZmxhZ3MgJiBQdXRCeUlkUGVyc2lzdGVudEZsYWdzTWFz
ayk7CisgICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlID0gMDsKKyAgICAgICAgbWV0YWRh
dGEubV9vZmZzZXQgPSAwOworICAgICAgICBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZSA9IDA7Cisg
ICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlQ2hhaW4uY2xlYXIoKTsKKyAgICAgICAgbWV0YWRh
dGEubV9mbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4obWV0YWRhdGEubV9mbGFncyAm
IFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrKTsKICAgICAgICAgCiAgICAgICAgIEpTQ2VsbCog
YmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CkBAIC04OTcsMjUgKzg5NywyNSBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGwsIHNh
d1BvbHlQcm90byk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxpZFBy
b3RvdHlwZUNoYWluICYmICFzYXdQb2x5UHJvdG8pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKS0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtZXRhZGF0YS5vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3Vz
SUQoKS0+aWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9mZnNldCA9IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5uZXdT
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IShtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkt
PmlkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX25ld1N0
cnVjdHVyZSA9IHN0cnVjdHVyZS0+aWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
KG1ldGFkYXRhLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihleGVjLCBhc09iamVjdChiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChjaGFpbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEu
c3RydWN0dXJlQ2hhaW4uc2V0KHZtLCBjb2RlQmxvY2ssIGNoYWluKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUNoYWluLnNldCh2bSwgY29kZUJsb2Nr
LCBjaGFpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtZXRhZGF0YS5mbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgfAorICAgICAgICAgICAgICAgICAg
ICAgICAgbWV0YWRhdGEubV9mbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9mbGFncyB8CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50
LmltcGwoKSkucHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGEub2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgp
OwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxh
Z3M+KAotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5mbGFncyB8CisgICAgICAgICAgICAg
ICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7CisgICAgICAgICAg
ICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAg
ICAgICAgIG1ldGFkYXRhLm1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAorICAg
ICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX2ZsYWdzIHwKICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0QnlJ
ZEZsYWdzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05MjksOSArOTI5LDkgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlbF9ieV9pZAogICAgIExMSU5UX0JFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU09iamVjdCogYmFzZU9i
amVjdCA9IExMSU5UX09QX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMp
OworICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2Jhc2Up
LmpzVmFsdWUoKS50b09iamVjdChleGVjKTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsK
LSAgICBib29sIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxl
dGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBleGVjLCBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUucHJvcGVydHkpKTsKKyAgICBib29sIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9k
VGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBleGVjLCBjb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElP
TigpOwogICAgIGlmICghY291bGREZWxldGUgJiYgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkK
ICAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVHlwZUVycm9yKGV4ZWMsIFVuYWJsZVRvRGVsZXRl
UHJvcGVydHlFcnJvcikpOwpAQCAtOTQwLDggKzk0MCw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9kZWxfYnlfaWQKIAogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRC
eVZhbChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgT3BHZXRCeVZhbCBieXRlY29kZSkKIHsKLSAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgp
OwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1BfQyhieXRlY29kZS5wcm9wZXJ0eSku
anNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5t
X2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IExMSU5UX09QX0MoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1
YnNjcmlwdC5pc1N0cmluZygpKSkgewpAQCAtOTU3LDcgKzk1Nyw3IEBAIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUgZ2V0QnlWYWwoVk0KICAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMyKCkp
IHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgICAgICBBcnJheVBy
b2ZpbGUqIGFycmF5UHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CisgICAgICAgIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAg
ICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIGlmIChhc1N0
cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewpAQCAtMTAwNyw5ICsxMDA3LDkgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQogICAgIExMSU5UX0JFR0lO
KCk7CiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1dEJ5VmFsPigpOwotICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7
Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnByb3BlcnR5KS5q
c1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUudmFsdWUp
LmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUu
bV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9PUF9DKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gTExJTlRf
T1BfQyhieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgYm9vbCBpc1N0cmljdE1vZGUg
PSBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgCiAgICAgaWYgKExJS0VM
WShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKQEAgLTEwMzgsOSArMTAzOCw5IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKICAgICBMTElOVF9CRUdJTigpOwogICAg
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKTsKLSAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOwot
ICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1BfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNW
YWx1ZSgpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVlKS5q
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1f
YmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1BfQyhieXRl
Y29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5UX09Q
X0MoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VW
YWx1ZS5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7CiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjLT5jb2RlQmxvY2soKS0+aXNT
dHJpY3RNb2RlKCk7CkBAIC0xMDc4LDExICsxMDc4LDExIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9kZWxfYnlfdmEKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExM
SU5UX09QX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKICAgICBKU09iamVjdCog
YmFzZU9iamVjdCA9IGJhc2VWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBMTElOVF9DSEVDS19F
WENFUFRJT04oKTsKIAotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1BfQyhieXRlY29k
ZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1Bf
QyhieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CiAgICAgCiAgICAgYm9vbCBjb3VsZERl
bGV0ZTsKICAgICAKQEAgLTExMDcsMTUgKzExMDcsMTUgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3B1dF9nZXR0ZQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgQVNTRVJUKExMSU5UX09QKGJ5
dGVjb2RlLmJhc2UpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCogYmFzZU9i
aiA9IGFzT2JqZWN0KExMSU5UX09QKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKSk7CisgICAgQVNT
RVJUKExMSU5UX09QKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLmlzT2JqZWN0KCkpOworICAg
IEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoTExJTlRfT1AoYnl0ZWNvZGUubV9iYXNlKS5q
c1ZhbHVlKCkpOwogCi0gICAgdW5zaWduZWQgb3B0aW9ucyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7
CisgICAgdW5zaWduZWQgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKIAotICAgIEpT
VmFsdWUgZ2V0dGVyID0gTExJTlRfT1AoYnl0ZWNvZGUuYWNjZXNzb3IpLmpzVmFsdWUoKTsKKyAg
ICBKU1ZhbHVlIGdldHRlciA9IExMSU5UX09QKGJ5dGVjb2RlLm1fYWNjZXNzb3IpLmpzVmFsdWUo
KTsKICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkpOwogCi0gICAgYmFzZU9iai0+cHV0R2V0
dGVyKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5
KSwgYXNPYmplY3QoZ2V0dGVyKSwgb3B0aW9ucyk7CisgICAgYmFzZU9iai0+cHV0R2V0dGVyKGV4
ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLCBh
c09iamVjdChnZXR0ZXIpLCBvcHRpb25zKTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApAQCAtMTEy
MywxNSArMTEyMywxNSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3NldHRl
CiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUHV0
U2V0dGVyQnlJZD4oKTsKLSAgICBBU1NFUlQoTExJTlRfT1AoYnl0ZWNvZGUuYmFzZSkuanNWYWx1
ZSgpLmlzT2JqZWN0KCkpOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoTExJTlRf
T1AoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoTExJTlRfT1AoYnl0ZWNv
ZGUubV9iYXNlKS5qc1ZhbHVlKCkuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmog
PSBhc09iamVjdChMTElOVF9PUChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKSk7CiAKLSAgICB1
bnNpZ25lZCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0cmlidXRlczsKKyAgICB1bnNpZ25lZCBvcHRp
b25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogCi0gICAgSlNWYWx1ZSBzZXR0ZXIgPSBMTElO
VF9PUChieXRlY29kZS5hY2Nlc3NvcikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc2V0dGVyID0g
TExJTlRfT1AoYnl0ZWNvZGUubV9hY2Nlc3NvcikuanNWYWx1ZSgpOwogICAgIEFTU0VSVChzZXR0
ZXIuaXNPYmplY3QoKSk7CiAKLSAgICBiYXNlT2JqLT5wdXRTZXR0ZXIoZXhlYywgZXhlYy0+Y29k
ZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpLCBhc09iamVjdChzZXR0ZXIp
LCBvcHRpb25zKTsKKyAgICBiYXNlT2JqLT5wdXRTZXR0ZXIoZXhlYywgZXhlYy0+Y29kZUJsb2Nr
KCktPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSksIGFzT2JqZWN0KHNldHRlciksIG9w
dGlvbnMpOwogICAgIExMSU5UX0VORCgpOwogfQogCkBAIC0xMTM5LDE1ICsxMTM5LDE1IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2V0dGUKIHsKICAgICBMTElOVF9CRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigp
OwotICAgIEFTU0VSVChMTElOVF9PUChieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkuaXNPYmplY3Qo
KSk7Ci0gICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChMTElOVF9PUChieXRlY29k
ZS5iYXNlKS5qc1ZhbHVlKCkpOworICAgIEFTU0VSVChMTElOVF9PUChieXRlY29kZS5tX2Jhc2Up
LmpzVmFsdWUoKS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2Jq
ZWN0KExMSU5UX09QKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpKTsKIAotICAgIEpTVmFsdWUg
Z2V0dGVyID0gTExJTlRfT1AoYnl0ZWNvZGUuZ2V0dGVyKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1
ZSBzZXR0ZXIgPSBMTElOVF9PUChieXRlY29kZS5zZXR0ZXIpLmpzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIGdldHRlciA9IExMSU5UX09QKGJ5dGVjb2RlLm1fZ2V0dGVyKS5qc1ZhbHVlKCk7CisgICAg
SlNWYWx1ZSBzZXR0ZXIgPSBMTElOVF9PUChieXRlY29kZS5tX3NldHRlcikuanNWYWx1ZSgpOwog
ICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSB8fCBzZXR0ZXIuaXNPYmplY3QoKSk7CiAgICAg
R2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdldHRlciwgc2V0dGVyKTsKIAotICAgIENvbW1vblNsb3dQ
YXRoczo6cHV0RGlyZWN0QWNjZXNzb3JXaXRoUmVpZnkodm0sIGV4ZWMsIGJhc2VPYmplY3QsIGV4
ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSwgYWNjZXNzb3Is
IGJ5dGVjb2RlLmF0dHJpYnV0ZXMpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0QWNj
ZXNzb3JXaXRoUmVpZnkodm0sIGV4ZWMsIGJhc2VPYmplY3QsIGV4ZWMtPmNvZGVCbG9jaygpLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLCBhY2Nlc3NvciwgYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzKTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApAQCAtMTE1NSwxMyArMTE1NSwxMyBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2dldHRlCiB7CiAgICAgTExJTlRfQkVH
SU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0g
ICAgQVNTRVJUKExMSU5UX09QKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsK
LSAgICBKU09iamVjdCogYmFzZU9iaiA9IGFzT2JqZWN0KExMSU5UX09QKGJ5dGVjb2RlLmJhc2Up
LmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9PUF9DKGJ5dGVjb2Rl
LnByb3BlcnR5KS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKExMSU5UX09QKGJ5dGVjb2RlLm1fYmFz
ZSkuanNWYWx1ZSgpLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmpl
Y3QoTExJTlRfT1AoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gTExJTlRfT1BfQyhieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CiAKLSAg
ICB1bnNpZ25lZCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0cmlidXRlczsKKyAgICB1bnNpZ25lZCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogCi0gICAgSlNWYWx1ZSBnZXR0ZXIgPSBM
TElOVF9PUChieXRlY29kZS5hY2Nlc3NvcikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgZ2V0dGVy
ID0gTExJTlRfT1AoYnl0ZWNvZGUubV9hY2Nlc3NvcikuanNWYWx1ZSgpOwogICAgIEFTU0VSVChn
ZXR0ZXIuaXNPYmplY3QoKSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJv
cGVydHlLZXkoZXhlYyk7CkBAIC0xMTc1LDEzICsxMTc1LDEzIEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wdXRfc2V0dGUKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBBU1NFUlQoTExJTlRf
T1AoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpLmlzT2JqZWN0KCkpOwotICAgIEpTT2JqZWN0KiBi
YXNlT2JqID0gYXNPYmplY3QoTExJTlRfT1AoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpKTsKLSAg
ICBKU1ZhbHVlIHN1YnNjcmlwdCA9IExMSU5UX09QX0MoYnl0ZWNvZGUucHJvcGVydHkpLmpzVmFs
dWUoKTsKKyAgICBBU1NFUlQoTExJTlRfT1AoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkuaXNP
YmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmogPSBhc09iamVjdChMTElOVF9PUChieXRl
Y29kZS5tX2Jhc2UpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9P
UF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKIAotICAgIHVuc2lnbmVkIG9wdGlv
bnMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOworICAgIHVuc2lnbmVkIG9wdGlvbnMgPSBieXRlY29k
ZS5tX2F0dHJpYnV0ZXM7CiAKLSAgICBKU1ZhbHVlIHNldHRlciA9IExMSU5UX09QKGJ5dGVjb2Rl
LmFjY2Vzc29yKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzZXR0ZXIgPSBMTElOVF9PUChieXRl
Y29kZS5tX2FjY2Vzc29yKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHNldHRlci5pc09iamVjdCgp
KTsKIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsK
QEAgLTExOTUsMTEyICsxMTk1LDExMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
anRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wSnRydWU+KCk7Ci0gICAgTExJTlRfQlJBTkNIKExMSU5UX09QX0MoYnl0ZWNvZGUuY29uZGl0
aW9uKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBMTElOVF9CUkFOQ0goTExJTlRf
T1BfQyhieXRlY29kZS5tX2NvbmRpdGlvbikuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7CiB9
CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qZmFsc2UpCiB7CiAgICAgTExJTlRf
QkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSmZhbHNlPigpOwotICAgIExM
SU5UX0JSQU5DSCghTExJTlRfT1BfQyhieXRlY29kZS5jb25kaXRpb24pLmpzVmFsdWUoKS50b0Jv
b2xlYW4oZXhlYykpOworICAgIExMSU5UX0JSQU5DSCghTExJTlRfT1BfQyhieXRlY29kZS5tX2Nv
bmRpdGlvbikuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9qbGVzcykKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BKbGVzcz4oKTsKLSAgICBMTElOVF9CUkFOQ0goanNMZXNzPHRy
dWU+KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0Mo
Ynl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goanNMZXNzPHRydWU+
KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhi
eXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9qbmxlc3MpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wSm5sZXNzPigpOwotICAgIExMSU5UX0JSQU5DSCghanNMZXNzPHRydWU+KGV4
ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNv
ZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goIWpzTGVzczx0cnVlPihleGVj
LCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNv
ZGUubV9yaHMpLmpzVmFsdWUoKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfamdyZWF0ZXIpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wSmdyZWF0ZXI+KCk7Ci0gICAgTExJTlRfQlJBTkNIKGpzTGVzczxmYWxzZT4oZXhl
YywgTExJTlRfT1BfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29k
ZS5saHMpLmpzVmFsdWUoKSkpOworICAgIExMSU5UX0JSQU5DSChqc0xlc3M8ZmFsc2U+KGV4ZWMs
IExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29k
ZS5tX2xocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9qbmdyZWF0ZXIpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wSm5ncmVhdGVyPigpOwotICAgIExMSU5UX0JSQU5DSCghanNMZXNzPGZhbHNlPihl
eGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVj
b2RlLmxocykuanNWYWx1ZSgpKSk7CisgICAgTExJTlRfQlJBTkNIKCFqc0xlc3M8ZmFsc2U+KGV4
ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRl
Y29kZS5tX2xocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9qbGVzc2VxKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcEpsZXNzZXE+KCk7Ci0gICAgTExJTlRfQlJBTkNIKGpzTGVzc0VxPHRydWU+KGV4
ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNv
ZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goanNMZXNzRXE8dHJ1ZT4oZXhl
YywgTExJTlRfT1BfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVj
b2RlLm1fcmhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2pubGVzc2VxKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcEpubGVzc2VxPigpOwotICAgIExMSU5UX0JSQU5DSCghanNMZXNzRXE8dHJ1ZT4o
ZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRl
Y29kZS5yaHMpLmpzVmFsdWUoKSkpOworICAgIExMSU5UX0JSQU5DSCghanNMZXNzRXE8dHJ1ZT4o
ZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5
dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2pncmVhdGVyZXEpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wSmdyZWF0ZXJlcT4oKTsKLSAgICBMTElOVF9CUkFOQ0goanNMZXNzRXE8
ZmFsc2U+KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCksIExMSU5UX09Q
X0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goanNMZXNzRXE8
ZmFsc2U+KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSwgTExJTlRf
T1BfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9qbmdyZWF0ZXJlcSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKbmdyZWF0ZXJlcT4oKTsKLSAgICBMTElOVF9CUkFOQ0go
IWpzTGVzc0VxPGZhbHNlPihleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgp
LCBMTElOVF9PUF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpKSk7CisgICAgTExJTlRfQlJBTkNI
KCFqc0xlc3NFcTxmYWxzZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX3JocykuanNWYWx1
ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2plcSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKZXE+KCk7Ci0gICAgTExJTlRfQlJBTkNIKEpTVmFs
dWU6OmVxdWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5U
X09QX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goSlNWYWx1
ZTo6ZXF1YWwoZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBMTElO
VF9PUF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2puZXEpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wSm5lcT4oKTsKLSAgICBMTElOVF9CUkFOQ0goIUpTVmFsdWU6OmVx
dWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0Mo
Ynl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goIUpTVmFsdWU6OmVx
dWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgTExJTlRfT1Bf
QyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9qc3RyaWN0ZXEpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wSnN0cmljdGVxPigpOwotICAgIExMSU5UX0JSQU5DSChKU1ZhbHVl
OjpzdHJpY3RFcXVhbChleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpLCBM
TElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpKSk7CisgICAgTExJTlRfQlJBTkNIKEpT
VmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFs
dWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbnN0cmljdGVxKQogewogICAgIExMSU5UX0JFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEpuc3RyaWN0ZXE+KCk7Ci0gICAgTExJ
TlRfQlJBTkNIKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2Rl
LmxocykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpKSk7Cisg
ICAgTExJTlRfQlJBTkNIKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBMTElOVF9PUF9DKGJ5
dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFs
dWUoKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3dpdGNoX2ltbSkK
IHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BTd2l0
Y2hJbW0+KCk7Ci0gICAgSlNWYWx1ZSBzY3J1dGluZWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnNj
cnV0aW5lZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc2NydXRpbmVlID0gTExJTlRfT1BfQyhi
eXRlY29kZS5tX3NjcnV0aW5lZSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChzY3J1dGluZWUuaXNE
b3VibGUoKSk7CiAgICAgZG91YmxlIHZhbHVlID0gc2NydXRpbmVlLmFzRG91YmxlKCk7CiAgICAg
aW50MzJfdCBpbnRWYWx1ZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKTsKLSAgICBpbnQg
ZGVmYXVsdE9mZnNldCA9IEpVTVBfT0ZGU0VUKGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOworICAg
IGludCBkZWZhdWx0T2Zmc2V0ID0gSlVNUF9PRkZTRVQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0
KTsKICAgICBpZiAodmFsdWUgPT0gaW50VmFsdWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgSlVNUF9UTyhjb2RlQmxvY2stPnN3
aXRjaEp1bXBUYWJsZShieXRlY29kZS50YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZShpbnRWYWx1
ZSwgZGVmYXVsdE9mZnNldCkpOworICAgICAgICBKVU1QX1RPKGNvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKGJ5dGVjb2RlLm1fdGFibGVJbmRleCkub2Zmc2V0Rm9yVmFsdWUoaW50VmFsdWUsIGRl
ZmF1bHRPZmZzZXQpKTsKICAgICB9IGVsc2UKICAgICAgICAgSlVNUF9UTyhkZWZhdWx0T2Zmc2V0
KTsKICAgICBMTElOVF9FTkQoKTsKQEAgLTEzMTAsMTQgKzEzMTAsMTQgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3N3aXRjaF9jaAogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcFN3aXRjaENoYXI+KCk7Ci0gICAgSlNWYWx1ZSBzY3J1
dGluZWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnNjcnV0aW5lZSkuanNWYWx1ZSgpOworICAgIEpT
VmFsdWUgc2NydXRpbmVlID0gTExJTlRfT1BfQyhieXRlY29kZS5tX3NjcnV0aW5lZSkuanNWYWx1
ZSgpOwogICAgIEFTU0VSVChzY3J1dGluZWUuaXNTdHJpbmcoKSk7CiAgICAgSlNTdHJpbmcqIHN0
cmluZyA9IGFzU3RyaW5nKHNjcnV0aW5lZSk7CiAgICAgQVNTRVJUKHN0cmluZy0+bGVuZ3RoKCkg
PT0gMSk7Ci0gICAgaW50IGRlZmF1bHRPZmZzZXQgPSBKVU1QX09GRlNFVChieXRlY29kZS5kZWZh
dWx0T2Zmc2V0KTsKKyAgICBpbnQgZGVmYXVsdE9mZnNldCA9IEpVTVBfT0ZGU0VUKGJ5dGVjb2Rl
Lm1fZGVmYXVsdE9mZnNldCk7CiAgICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmluZy0+dmFsdWUo
ZXhlYykuaW1wbCgpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7Ci0gICAgSlVNUF9UTyhjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShieXRlY29kZS50YWJs
ZUluZGV4KS5vZmZzZXRGb3JWYWx1ZSgoKmltcGwpWzBdLCBkZWZhdWx0T2Zmc2V0KSk7CisgICAg
SlVNUF9UTyhjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShieXRlY29kZS5tX3RhYmxlSW5kZXgp
Lm9mZnNldEZvclZhbHVlKCgqaW1wbClbMF0sIGRlZmF1bHRPZmZzZXQpKTsKICAgICBMTElOVF9F
TkQoKTsKIH0KIApAQCAtMTMyNSwxMyArMTMyNSwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfc3dpdGNoX3N0CiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wU3dpdGNoU3RyaW5nPigpOwotICAgIEpTVmFsdWUgc2NydXRpbmVlID0g
TExJTlRfT1BfQyhieXRlY29kZS5zY3J1dGluZWUpLmpzVmFsdWUoKTsKLSAgICBpbnQgZGVmYXVs
dE9mZnNldCA9IEpVTVBfT0ZGU0VUKGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOworICAgIEpTVmFs
dWUgc2NydXRpbmVlID0gTExJTlRfT1BfQyhieXRlY29kZS5tX3NjcnV0aW5lZSkuanNWYWx1ZSgp
OworICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gSlVNUF9PRkZTRVQoYnl0ZWNvZGUubV9kZWZhdWx0
T2Zmc2V0KTsKICAgICBpZiAoIXNjcnV0aW5lZS5pc1N0cmluZygpKQogICAgICAgICBKVU1QX1RP
KGRlZmF1bHRPZmZzZXQpOwogICAgIGVsc2UgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICBKVU1QX1RPKGNvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGJ5dGVjb2RlLnRhYmxlSW5kZXgpLm9mZnNldEZvclZhbHVlKGFzU3Ry
aW5nKHNjcnV0aW5lZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgZGVmYXVsdE9mZnNldCkpOworICAg
ICAgICBKVU1QX1RPKGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGJ5dGVjb2RlLm1f
dGFibGVJbmRleCkub2Zmc2V0Rm9yVmFsdWUoYXNTdHJpbmcoc2NydXRpbmVlKS0+dmFsdWUoZXhl
YykuaW1wbCgpLCBkZWZhdWx0T2Zmc2V0KSk7CiAgICAgfQogICAgIExMSU5UX0VORCgpOwogfQpA
QCAtMTM0MSw5ICsxMzQxLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19m
dW5jKQogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5l
d0Z1bmM+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUuc2NvcGUpLlJl
Z2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihi
eXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBzbG93UGF0aExvZ0YoIkNy
ZWF0aW5nIGZ1bmN0aW9uIVxuIik7Ci0gICAgTExJTlRfUkVUVVJOKEpTRnVuY3Rpb246OmNyZWF0
ZSh2bSwgY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUuZnVuY3Rpb25EZWNsKSwgc2Nv
cGUpKTsKKyAgICBMTElOVF9SRVRVUk4oSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxvY2st
PmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCksIHNjb3BlKSk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCkBAIC0xMzUx
LDkgKzEzNTEsOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2dlbmVyCiAg
ICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3R2VuZXJh
dG9yRnVuYz4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5zY29wZSku
UmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRS
KGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIHNsb3dQYXRoTG9nRigi
Q3JlYXRpbmcgZnVuY3Rpb24hXG4iKTsKLSAgICBMTElOVF9SRVRVUk4oSlNHZW5lcmF0b3JGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5mdW5jdGlv
bkRlY2wpLCBzY29wZSkpOworICAgIExMSU5UX1JFVFVSTihKU0dlbmVyYXRvckZ1bmN0aW9uOjpj
cmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNs
KSwgc2NvcGUpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hc3lu
Y19mdW5jKQpAQCAtMTM2MSw5ICsxMzYxLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25ld19hc3luYwogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcE5ld0FzeW5jRnVuYz4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRl
Y29kZS5zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBleGVj
LT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIHNs
b3dQYXRoTG9nRigiQ3JlYXRpbmcgYXN5bmMgZnVuY3Rpb24hXG4iKTsKLSAgICBMTElOVF9SRVRV
Uk4oSlNBc3luY0Z1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5
dGVjb2RlLmZ1bmN0aW9uRGVjbCksIHNjb3BlKSk7CisgICAgTExJTlRfUkVUVVJOKEpTQXN5bmNG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1
bmN0aW9uRGVjbCksIHNjb3BlKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpCkBAIC0xMzcxLDkgKzEzNzEsOSBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FzeW5jCiAgICAgTExJTlRfQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpOwogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSog
c2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3BlKS5SZWdpc3Rlcjo6c2NvcGUo
KTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29w
ZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgc2xvd1BhdGhMb2dGKCJDcmVhdGluZyBhc3luYyBn
ZW5lcmF0b3IgZnVuY3Rpb24hXG4iKTsKLSAgICBMTElOVF9SRVRVUk4oSlNBc3luY0dlbmVyYXRv
ckZ1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLmZ1
bmN0aW9uRGVjbCksIHNjb3BlKSk7CisgICAgTExJTlRfUkVUVVJOKEpTQXN5bmNHZW5lcmF0b3JG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1
bmN0aW9uRGVjbCksIHNjb3BlKSk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfbmV3X2Z1bmNfZXhwKQpAQCAtMTM4Miw4ICsxMzgyLDggQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25ld19mdW5jXwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BOZXdGdW5jRXhwPigpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2Rl
LnNjb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBjb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5mdW5jdGlvbkRlY2wpOwor
ICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBj
b2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgCiAg
ICAgTExJTlRfUkVUVVJOKEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZXhlY3V0YWJsZSwgc2NvcGUp
KTsKIH0KQEAgLTEzOTQsOCArMTM5NCw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9uZXdfZ2VuZXIKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdHZW5lcmF0b3JG
dW5jRXhwPigpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
Ci0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3BlKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBj
b2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5mdW5jdGlvbkRlY2wpOworICAgIEpTU2Nv
cGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6
c2NvcGUoKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjb2RlQmxvY2st
PmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAgICBMTElOVF9SRVRV
Uk4oSlNHZW5lcmF0b3JGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjdXRhYmxlLCBzY29wZSkpOwog
fQpAQCAtMTQwNiw4ICsxNDA2LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25l
d19hc3luYwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBc3luY0Z1bmNF
eHA+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAg
ICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUuc2NvcGUpLlJlZ2lz
dGVyOjpzY29wZSgpOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLmZ1bmN0aW9uRGVjbCk7CisgICAgSlNTY29wZSog
c2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29w
ZSgpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICAKICAgICBMTElOVF9SRVRV
Uk4oSlNBc3luY0Z1bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWN1dGFibGUsIHNjb3BlKSk7CiB9CkBA
IC0xNDE4LDggKzE0MTgsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Fz
eW5jCiAgICAgICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBc3luY0dlbmVy
YXRvckZ1bmNFeHA+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUuc2Nv
cGUpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IGNvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLmZ1bmN0aW9uRGVjbCk7CisgICAg
SlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lz
dGVyOjpzY29wZSgpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVC
bG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICAgICAgCiAg
ICAgTExJTlRfUkVUVVJOKEpTQXN5bmNHZW5lcmF0b3JGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVj
dXRhYmxlLCBzY29wZSkpOwogfQpAQCAtMTQyOCw4ICsxNDI4LDggQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3NldF9mdW5jdAogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBKU0Z1bmN0aW9u
KiBmdW5jID0ganNDYXN0PEpTRnVuY3Rpb24qPihMTElOVF9PUChieXRlY29kZS5mdW5jdGlvbiku
UmVnaXN0ZXI6OnVuYm94ZWRDZWxsKCkpOwotICAgIEpTVmFsdWUgbmFtZSA9IExMSU5UX09QX0Mo
Ynl0ZWNvZGUubmFtZSkuUmVnaXN0ZXI6OmpzVmFsdWUoKTsKKyAgICBKU0Z1bmN0aW9uKiBmdW5j
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihMTElOVF9PUChieXRlY29kZS5tX2Z1bmN0aW9uKS5SZWdp
c3Rlcjo6dW5ib3hlZENlbGwoKSk7CisgICAgSlNWYWx1ZSBuYW1lID0gTExJTlRfT1BfQyhieXRl
Y29kZS5tX25hbWUpLlJlZ2lzdGVyOjpqc1ZhbHVlKCk7CiAgICAgZnVuYy0+c2V0RnVuY3Rpb25O
YW1lKGV4ZWMsIG5hbWUpOwogICAgIExMSU5UX0VORCgpOwogfQpAQCAtMTU3OSwxNiArMTU3OSwx
NiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVyaWNDYWxsKEV4CiAgICAgLy8gLSBJ
ZiBwb3NzaWJsZSwgbGluayB0aGUgY2FsbCdzIGlubGluZSBjYWNoZS4KICAgICAvLyAtIFJldHVy
biBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcgY2Fs
bCBmcmFtZS4KICAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUF9DKGJ5
dGVjb2RlLmNhbGxlZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExM
SU5UX09QX0MoYnl0ZWNvZGUubV9jYWxsZWUpLmpzVmFsdWUoKTsKICAgICAKLSAgICBFeGVjU3Rh
dGUqIGV4ZWNDYWxsZWUgPSBleGVjIC0gYnl0ZWNvZGUuYXJndjsKKyAgICBFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUgPSBleGVjIC0gYnl0ZWNvZGUubV9hcmd2OwogICAgIAotICAgIGV4ZWNDYWxsZWUt
PnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLmFyZ2MpOworICAgIGV4ZWND
YWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAg
ICAgZXhlY0NhbGxlZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVl
QXNWYWx1ZTsKICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZXJGcmFtZShleGVjKTsKICAgICAKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgIHJldHVybiBz
ZXRVcENhbGwoZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNWYWx1ZSwgJm1ldGFkYXRhLmNhbGxM
aW5rSW5mbyk7CisgICAgcmV0dXJuIHNldFVwQ2FsbChleGVjQ2FsbGVlLCBraW5kLCBjYWxsZWVB
c1ZhbHVlLCAmbWV0YWRhdGEubV9jYWxsTGlua0luZm8pOwogfQogCiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfY2FsbCkKQEAgLTE2MjEsMjMgKzE2MjEsMjMgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbQogICAgIHN3aXRjaCAocGMtPm9wY29kZUlEKCkp
IHsKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCk7Ci0gICAgICAgIG51bVVzZWRTdGFja1Nsb3RzID0gLWJ5
dGVjb2RlLmZpcnN0RnJlZS5vZmZzZXQoKTsKLSAgICAgICAgYXJndW1lbnRzID0gTExJTlRfT1Bf
QyhieXRlY29kZS5hcmd1bWVudHMpLmpzVmFsdWUoKTsKLSAgICAgICAgZmlyc3RWYXJBcmcgPSBi
eXRlY29kZS5maXJzdFZhckFyZzsKKyAgICAgICAgbnVtVXNlZFN0YWNrU2xvdHMgPSAtYnl0ZWNv
ZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgICAgIGFyZ3VtZW50cyA9IExMSU5UX09QX0Mo
Ynl0ZWNvZGUubV9hcmd1bWVudHMpLmpzVmFsdWUoKTsKKyAgICAgICAgZmlyc3RWYXJBcmcgPSBi
eXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBv
cF90YWlsX2NhbGxfdmFyYXJnczogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
VGFpbENhbGxWYXJhcmdzPigpOwotICAgICAgICBudW1Vc2VkU3RhY2tTbG90cyA9IC1ieXRlY29k
ZS5maXJzdEZyZWUub2Zmc2V0KCk7Ci0gICAgICAgIGFyZ3VtZW50cyA9IExMSU5UX09QX0MoYnl0
ZWNvZGUuYXJndW1lbnRzKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGZpcnN0VmFyQXJnID0gYnl0ZWNv
ZGUuZmlyc3RWYXJBcmc7CisgICAgICAgIG51bVVzZWRTdGFja1Nsb3RzID0gLWJ5dGVjb2RlLm1f
Zmlyc3RGcmVlLm9mZnNldCgpOworICAgICAgICBhcmd1bWVudHMgPSBMTElOVF9PUF9DKGJ5dGVj
b2RlLm1fYXJndW1lbnRzKS5qc1ZhbHVlKCk7CisgICAgICAgIGZpcnN0VmFyQXJnID0gYnl0ZWNv
ZGUubV9maXJzdFZhckFyZzsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ugb3BfY29u
c3RydWN0X3ZhcmFyZ3M6IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENvbnN0
cnVjdFZhcmFyZ3M+KCk7Ci0gICAgICAgIG51bVVzZWRTdGFja1Nsb3RzID0gLWJ5dGVjb2RlLmZp
cnN0RnJlZS5vZmZzZXQoKTsKLSAgICAgICAgYXJndW1lbnRzID0gTExJTlRfT1BfQyhieXRlY29k
ZS5hcmd1bWVudHMpLmpzVmFsdWUoKTsKLSAgICAgICAgZmlyc3RWYXJBcmcgPSBieXRlY29kZS5m
aXJzdFZhckFyZzsKKyAgICAgICAgbnVtVXNlZFN0YWNrU2xvdHMgPSAtYnl0ZWNvZGUubV9maXJz
dEZyZWUub2Zmc2V0KCk7CisgICAgICAgIGFyZ3VtZW50cyA9IExMSU5UX09QX0MoYnl0ZWNvZGUu
bV9hcmd1bWVudHMpLmpzVmFsdWUoKTsKKyAgICAgICAgZmlyc3RWYXJBcmcgPSBieXRlY29kZS5t
X2ZpcnN0VmFyQXJnOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAgLTE2
NjAsNyArMTY2MCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2ZyYW0K
ICAgICAvLyAtIFNldCB1cCBhIGNhbGwgZnJhbWUgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMgYXMg
dGhlIGN1cnJlbnQgZnJhbWUuCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVGFpbENh
bGxGb3J3YXJkQXJndW1lbnRzPigpOwotICAgIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzID0g
LWJ5dGVjb2RlLmZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBudW1Vc2VkU3RhY2tT
bG90cyA9IC1ieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsKIAogICAgIHVuc2lnbmVkIGFy
Z3VtZW50cyA9IHNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHMoZXhlYywgdm0sIG51bVVzZWRT
dGFja1Nsb3RzKTsKICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihleGVjLCBleGVjKTsK
QEAgLTE2ODcsMTUgKzE2ODcsMTUgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdz
U2V0dXAoRQogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3Mg
dG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgogCiAgICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcD4oKTsKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVj
b2RlLmNhbGxlZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5U
X09QX0MoYnl0ZWNvZGUubV9jYWxsZWUpLmpzVmFsdWUoKTsKIAogICAgIEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSA9IHZtLm5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwogCiAgICAgaWYgKHNldCA9PSBT
ZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpIHsKLSAgICAgICAgc2V0dXBWYXJhcmdzRnJhbWVBbmRT
ZXRUaGlzKGV4ZWMsIGV4ZWNDYWxsZWUsIExMSU5UX09QX0MoYnl0ZWNvZGUudGhpc1ZhbHVlKS5q
c1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUuYXJndW1lbnRzKS5qc1ZhbHVlKCksIGJ5dGVj
b2RlLmZpcnN0VmFyQXJnLCB2bS52YXJhcmdzTGVuZ3RoKTsKKyAgICAgICAgc2V0dXBWYXJhcmdz
RnJhbWVBbmRTZXRUaGlzKGV4ZWMsIGV4ZWNDYWxsZWUsIExMSU5UX09QX0MoYnl0ZWNvZGUubV90
aGlzVmFsdWUpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5tX2FyZ3VtZW50cykuanNW
YWx1ZSgpLCBieXRlY29kZS5tX2ZpcnN0VmFyQXJnLCB2bS52YXJhcmdzTGVuZ3RoKTsKICAgICAg
ICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJT04oZXhlYywgZXhlYyk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lQW5kU2V0VGhpcyhleGVjLCBleGVjQ2Fs
bGVlLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnRoaXNWYWx1ZSkuanNWYWx1ZSgpLCB2bS52YXJhcmdz
TGVuZ3RoKTsKKyAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRTZXRUaGlzKGV4
ZWMsIGV4ZWNDYWxsZWUsIExMSU5UX09QX0MoYnl0ZWNvZGUubV90aGlzVmFsdWUpLmpzVmFsdWUo
KSwgdm0udmFyYXJnc0xlbmd0aCk7CiAKICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZXJGcmFtZShl
eGVjKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkg
PSBjYWxsZWVBc1ZhbHVlOwpAQCAtMTcyOCwxMSArMTcyOCwxMSBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsCiB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BDKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhbGxFdmFsPigpOwotICAgIEpTVmFsdWUg
Y2FsbGVlQXNWYWx1ZSA9IExMSU5UX09QKGJ5dGVjb2RlLmNhbGxlZSkuanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5UX09QKGJ5dGVjb2RlLm1fY2FsbGVlKS5qc1Zh
bHVlKCk7CiAgICAgCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyAtIGJ5dGVjb2Rl
LmFyZ3Y7CisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyAtIGJ5dGVjb2RlLm1fYXJn
djsKICAgICAKLSAgICBleGVjQ2FsbGVlLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhi
eXRlY29kZS5hcmdjKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyhieXRlY29kZS5tX2FyZ2MpOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlckZyYW1lKGV4
ZWMpOwogICAgIGV4ZWNDYWxsZWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9
IGNhbGxlZUFzVmFsdWU7CiAgICAgZXhlY0NhbGxlZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9pbnQu
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBAIC0xNzYwLDIxICsxNzYwLDIxIEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wU3RyY2F0PigpOwotICAgIExMSU5UX1JFVFVSTihqc1N0
cmluZ0Zyb21SZWdpc3RlckFycmF5KGV4ZWMsICZMTElOVF9PUChieXRlY29kZS5zcmMpLCBieXRl
Y29kZS5jb3VudCkpOworICAgIExMSU5UX1JFVFVSTihqc1N0cmluZ0Zyb21SZWdpc3RlckFycmF5
KGV4ZWMsICZMTElOVF9PUChieXRlY29kZS5tX3NyYyksIGJ5dGVjb2RlLm1fY291bnQpKTsKIH0K
IAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKIHsKICAgICBM
TElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUb1ByaW1pdGl2ZT4o
KTsKLSAgICBMTElOVF9SRVRVUk4oTExJTlRfT1BfQyhieXRlY29kZS5zcmMpLmpzVmFsdWUoKS50
b1ByaW1pdGl2ZShleGVjKSk7CisgICAgTExJTlRfUkVUVVJOKExMSU5UX09QX0MoYnl0ZWNvZGUu
bV9zcmMpLmpzVmFsdWUoKS50b1ByaW1pdGl2ZShleGVjKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF90aHJvdykKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BUaHJvdz4oKTsKLSAgICBMTElOVF9USFJPVyhMTElOVF9PUF9D
KGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCkpOworICAgIExMSU5UX1RIUk9XKExMSU5UX09QX0Mo
Ynl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2hhbmRsZV90cmFwcykKQEAgLTE3OTAsNyArMTc5MCw3IEBAIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9kZWJ1ZykKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BEZWJ1Zz4oKTsKLSAgICB2bS5pbnRlcnByZXRlci0+ZGVi
dWcoZXhlYywgYnl0ZWNvZGUuZGVidWdIb29rVHlwZSk7CisgICAgdm0uaW50ZXJwcmV0ZXItPmRl
YnVnKGV4ZWMsIGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSk7CiAgICAgCiAgICAgTExJTlRfRU5E
KCk7CiB9CkBAIC0xODA4LDE1ICsxODA4LDE1IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9nZXRfZnJvbV8KICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShleGVjKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnZhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0g
anNDYXN0PEpTT2JqZWN0Kj4oTExJTlRfT1AoYnl0ZWNvZGUuc2NvcGUpLmpzVmFsdWUoKSk7Cisg
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Zhcik7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0
Kj4oTExJTlRfT1AoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKIAogICAgIC8vIE1vZHVs
ZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdldF9mcm9tX3Njb3Bl
LgotICAgIEFTU0VSVChtZXRhZGF0YS5nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgIT0gTW9kdWxl
VmFyKTsKKyAgICBBU1NFUlQobWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgIT0g
TW9kdWxlVmFyKTsKIAogICAgIExMSU5UX1JFVFVSTihzY29wZS0+Z2V0UHJvcGVydHlTbG90KGV4
ZWMsIGlkZW50LCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNWYWx1
ZSB7CiAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIGlmIChtZXRhZGF0YS5nZXRQ
dXRJbmZvLnJlc29sdmVNb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kKQorICAgICAgICAgICAgaWYg
KG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpID09IFRocm93SWZOb3RGb3VuZCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpOwogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KQEAgLTE4NDQsMTggKzE4NDQsMTggQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zYwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEoZXhlYyk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS52YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVj
dCo+KExMSU5UX09QKGJ5dGVjb2RlLnNjb3BlKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKG1ldGFk
YXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKKyAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Zhcik7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oTExJTlRfT1Ao
Ynl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gTExJTlRf
T1BfQyhieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CisgICAgaWYgKG1ldGFkYXRhLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICBKU0xl
eGljYWxFbnZpcm9ubWVudCogZW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1l
bnQqPihzY29wZSk7Ci0gICAgICAgIGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0
KG1ldGFkYXRhLm9wZXJhbmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7CisgICAgICAg
IGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0KG1ldGFkYXRhLm1fb3BlcmFuZCkp
LnNldCh2bSwgZW52aXJvbm1lbnQsIHZhbHVlKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhhdmUg
dG8gZG8gdGhpcyAqYWZ0ZXIqIHRoZSB3cml0ZSwgYmVjYXVzZSBpZiB0aGlzIHB1dHMgdGhlIHNl
dCBpbnRvIElzV2F0Y2hlZCwgdGhlbiB3ZSBuZWVkCiAgICAgICAgIC8vIHRvIGhhdmUgYWxyZWFk
eSBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE90aGVyd2lzZSB3ZSBtaWdodCB3
YXRjaCBhbmQgY29uc3RhbnQtZm9sZAogICAgICAgICAvLyB0byB0aGUgVW5kZWZpbmVkIHZhbHVl
IGZyb20gYmVmb3JlIHRoZSBhc3NpZ25tZW50LgotICAgICAgICBpZiAobWV0YWRhdGEud2F0Y2hw
b2ludFNldCkKLSAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQtPnRvdWNoKHZtLCAi
RXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKKyAgICAgICAgaWYgKG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldC0+dG91Y2godm0sICJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFyPiIp
OwogICAgICAgICBMTElOVF9FTkQoKTsKICAgICB9CiAKQEAgLTE4NjMsNyArMTg2Myw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2MKICAgICBMTElOVF9DSEVDS19F
WENFUFRJT04oKTsKICAgICBpZiAoaGFzUHJvcGVydHkKICAgICAgICAgJiYgc2NvcGUtPmlzR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50KCkKLSAgICAgICAgJiYgIWlzSW5pdGlhbGl6YXRpb24obWV0
YWRhdGEuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpIHsKKyAgICAgICAgJiYgIWlz
SW5pdGlhbGl6YXRpb24obWV0YWRhdGEubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgp
KSkgewogICAgICAgICAvLyBXaGVuIHdlIGNhbid0IHN0YXRpY2FsbHkgcHJvdmUgd2UgbmVlZCBh
IFREWiBjaGVjaywgd2UgbXVzdCBwZXJmb3JtIHRoZSBjaGVjayBvbiB0aGUgc2xvdyBwYXRoLgog
ICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OkdldCk7CiAgICAgICAgIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50OjpnZXRP
d25Qcm9wZXJ0eVNsb3Qoc2NvcGUsIGV4ZWMsIGlkZW50LCBzbG90KTsKQEAgLTE4NzEsMTAgKzE4
NzEsMTAgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zYwogICAgICAg
ICAgICAgTExJTlRfVEhST1coY3JlYXRlVERaRXJyb3IoZXhlYykpOwogICAgIH0KIAotICAgIGlm
IChtZXRhZGF0YS5nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kICYm
ICFoYXNQcm9wZXJ0eSkKKyAgICBpZiAobWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVNb2Rl
KCkgPT0gVGhyb3dJZk5vdEZvdW5kICYmICFoYXNQcm9wZXJ0eSkKICAgICAgICAgTExJTlRfVEhS
T1coY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpOwogCi0gICAgUHV0
UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIFB1dFBy
b3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24obWV0YWRhdGEuZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KHNjb3BlLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBQdXRQcm9wZXJ0eVNsb3Q6OlVua25v
d25Db250ZXh0LCBpc0luaXRpYWxpemF0aW9uKG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5pbml0aWFs
aXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSh2bSktPnB1dChzY29wZSwg
ZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBDb21tb25TbG93UGF0aHM6OnRy
eUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVjLCBjb2RlQmxvY2ssIGJ5dGVjb2RlLCBzY29wZSwg
c2xvdCwgaWRlbnQpOwpAQCAtMTg5Nyw3ICsxODk3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2xvZ19zaGFkbwogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgCiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKLSAgICBKU1Nj
b3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUuc2NvcGUpLlJlZ2lzdGVyOjpz
Y29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5t
X3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICB2bS5zaGFkb3dDaGlja2VuKCkubG9nKHZt
LCBleGVjLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnByb2xvZ3VlKGV4ZWMtPmpzQ2FsbGVlKCks
IGV4ZWMsIGV4ZWMtPmNhbGxlckZyYW1lKCksIHNjb3BlKSk7CiAgICAgCiAgICAgTExJTlRfRU5E
KCk7CkBAIC0xOTA4LDggKzE5MDgsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bG9nX3NoYWRvCiAgICAgTExJTlRfQkVHSU4oKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IExM
SU5UX09QKGJ5dGVjb2RlLnRoaXNWYWx1ZSkuanNWYWx1ZSgpOwotICAgIEpTU2NvcGUqIHNjb3Bl
ID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBMTElOVF9PUChieXRlY29kZS5tX3RoaXNWYWx1ZSkuanNW
YWx1ZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5t
X3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleChleGVjLT5jb2RlQmxvY2soKS0+Ynl0ZWNvZGVP
ZmZzZXQocGMpKTsKQEAgLTE5MjksNyArMTkyOSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9wcm9maWxlX2MKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDYXRjaD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgIG1l
dGFkYXRhLmJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2Zp
bGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmQmIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX3Byb2ZpbGUubV9idWNrZXRz
WzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJhbmQp
LmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAy
Mzk5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChD
KSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDI3ICszNSwyNyBAQCBtYWNybyBuZXh0SW5zdHJ1Y3Rp
b25XaWRlKCkKICAgICBqbXAgW3QxLCB0MCwgNF0sIEJ5dGVjb2RlUHRyVGFnCiBlbmQKIAotbWFj
cm8gZ2V0dU9wZXJhbmROYXJyb3cob3AsIGZpZWxkLCBkc3QpCi0gICAgbG9hZGIgY29uc3RleHBy
ICVvcCVfJWZpZWxkJV9pbmRleFtQQ10sIGRzdAorbWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3As
IGZpZWxkTmFtZSwgZHN0KQorICAgIGxvYWRiIGNvbnN0ZXhwciAlb3AlXyVmaWVsZE5hbWUlX2lu
ZGV4W1BDXSwgZHN0CiBlbmQKIAotbWFjcm8gZ2V0T3BlcmFuZE5hcnJvdyhvcCwgZmllbGQsIGRz
dCkKLSAgICBsb2FkYnNwIGNvbnN0ZXhwciAlb3AlXyVmaWVsZCVfaW5kZXhbUENdLCBkc3QKK21h
Y3JvIGdldE9wZXJhbmROYXJyb3cob3AsIGZpZWxkTmFtZSwgZHN0KQorICAgIGxvYWRic3AgY29u
c3RleHByICVvcCVfJWZpZWxkTmFtZSVfaW5kZXhbUENdLCBkc3QKIGVuZAogCi1tYWNybyBnZXR1
T3BlcmFuZFdpZGUob3AsIGZpZWxkLCBkc3QpCi0gICAgbG9hZGkgY29uc3RleHByICVvcCVfJWZp
ZWxkJV9pbmRleCAqIDQgKyAxW1BDXSwgZHN0CittYWNybyBnZXR1T3BlcmFuZFdpZGUob3AsIGZp
ZWxkTmFtZSwgZHN0KQorICAgIGxvYWRpIGNvbnN0ZXhwciAlb3AlXyVmaWVsZE5hbWUlX2luZGV4
ICogNCArIDFbUENdLCBkc3QKIGVuZAogCi1tYWNybyBnZXRPcGVyYW5kV2lkZShvcCwgZmllbGQs
IGRzdCkKLSAgICBsb2FkaXMgY29uc3RleHByICVvcCVfJWZpZWxkJV9pbmRleCAqIDQgKyAxW1BD
XSwgZHN0CittYWNybyBnZXRPcGVyYW5kV2lkZShvcCwgZmllbGROYW1lLCBkc3QpCisgICAgbG9h
ZGlzIGNvbnN0ZXhwciAlb3AlXyVmaWVsZE5hbWUlX2luZGV4ICogNCArIDFbUENdLCBkc3QKIGVu
ZAogCiBtYWNybyBtYWtlUmV0dXJuKGdldCwgZGlzcGF0Y2gsIGZuKQogICAgIGZuKG1hY3JvKHRh
ZywgcGF5bG9hZCkKICAgICAgICAgbW92ZSB0YWcsIHQ1CiAgICAgICAgIG1vdmUgcGF5bG9hZCwg
dDMKLSAgICAgICAgZ2V0KGRzdCwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAg
IHN0b3JlaSB0NSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCiAgICAgICAgIHN0b3JlaSB0MywgUGF5
bG9hZE9mZnNldFtjZnIsIHQyLCA4XQogICAgICAgICBkaXNwYXRjaCgpCkBAIC02OSw3ICs2OSw3
IEBAIG1hY3JvIG1ha2VSZXR1cm5Qcm9maWxlZChvcCwgZ2V0LCBtZXRhZGEKIAogICAgICAgICBt
ZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIHZhbHVlUHJvZmlsZShvcCwgdDUsIHQxLCB0MCkKLSAg
ICAgICAgZ2V0KGRzdCwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIHN0b3Jl
aSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCiAgICAgICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9m
ZnNldFtjZnIsIHQyLCA4XQogICAgICAgICBkaXNwYXRjaCgpCkBAIC03OSw3ICs3OSw3IEBAIGVu
ZAogCiBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChzaXplLCBvcCwgZGlzcGF0Y2gpCiAgICAgbG9h
ZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwotICAgIGdldChzaXplLCBvcCwg
ZHN0LCB0MykKKyAgICBnZXQoc2l6ZSwgb3AsIG1fZHN0LCB0MykKICAgICBzdG9yZWkgcjEsIFRh
Z09mZnNldFtjZnIsIHQzLCA4XQogICAgIHN0b3JlaSByMCwgUGF5bG9hZE9mZnNldFtjZnIsIHQz
LCA4XQogICAgIG1ldGFkYXRhKHNpemUsIG9wLCB0MiwgdDMpCkBAIC00MzgsMTAgKzQzOCwxMCBA
QCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgIGVuZCkKIGVuZAogCi1t
YWNybyBsb2FkVmFyaWFibGUoZ2V0LCBvcGVyYW5kLCBpbmRleCwgdGFnLCBwYXlsb2FkKQotICAg
IGdldChvcGVyYW5kLCBpbmRleCkKLSAgICBsb2FkaSBUYWdPZmZzZXRbY2ZyLCBpbmRleCwgOF0s
IHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbY2ZyLCBpbmRleCwgOF0sIHBheWxvYWQKK21h
Y3JvIGxvYWRWYXJpYWJsZShnZXQsIGZpZWxkTmFtZSwgaW5kZXhSZWcsIHRhZ1JlZywgcGF5bG9h
ZFJlZykKKyAgICBnZXQoZmllbGROYW1lLCBpbmRleFJlZykKKyAgICBsb2FkaSBUYWdPZmZzZXRb
Y2ZyLCBpbmRleFJlZywgOF0sIHRhZ1JlZworICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbY2ZyLCBp
bmRleFJlZywgOF0sIHBheWxvYWRSZWcKIGVuZAogCiAjIEluZGV4LCB0YWcsIGFuZCBwYXlsb2Fk
IG11c3QgYmUgZGlmZmVyZW50IHJlZ2lzdGVycy4gSW5kZXggaXMgbm90CkBAIC01MzIsOCArNTMy
LDggQEAgbWFjcm8gbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWRVbmNoZQogICAgICAgICBw
YXlsb2FkKQogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZChzaXplLCBnZXQsIGNl
bGxPcGVyYW5kKQotICAgIGdldChjZWxsT3BlcmFuZCwgdDEpCittYWNybyB3cml0ZUJhcnJpZXJP
bk9wZXJhbmQoc2l6ZSwgZ2V0LCBjZWxsRmllbGROYW1lKQorICAgIGdldChjZWxsRmllbGROYW1l
LCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXplLCB0MSwgQ2VsbFRh
ZywgdDIsIC53cml0ZUJhcnJpZXJEb25lKQogICAgIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVu
KAogICAgICAgICB0MiwgCkBAIC01NTAsMjEgKzU1MCwyMSBAQCBtYWNybyB3cml0ZUJhcnJpZXJP
bk9wZXJhbmQoc2l6ZSwgZ2V0LCBjCiAud3JpdGVCYXJyaWVyRG9uZToKIGVuZAogCi1tYWNybyB3
cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgY2VsbE9wZXJhbmQsIHZhbHVlT3BlcmFu
ZCkKLSAgICBnZXQodmFsdWVPcGVyYW5kLCB0MSkKK21hY3JvIHdyaXRlQmFycmllck9uT3BlcmFu
ZHMoc2l6ZSwgZ2V0LCBjZWxsRmllbGROYW1lLCB2YWx1ZUZpZWxkTmFtZSkKKyAgICBnZXQodmFs
dWVGaWVsZE5hbWUsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVUYWcoc2l6ZSwgdDEs
IHQwKQogICAgIGJpbmVxIHQwLCBDZWxsVGFnLCAud3JpdGVCYXJyaWVyRG9uZQogCi0gICAgd3Jp
dGVCYXJyaWVyT25PcGVyYW5kKHNpemUsIGdldCwgY2VsbE9wZXJhbmQpCisgICAgd3JpdGVCYXJy
aWVyT25PcGVyYW5kKHNpemUsIGdldCwgY2VsbEZpZWxkTmFtZSkKIC53cml0ZUJhcnJpZXJEb25l
OgogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmFsdWVPcGVy
YW5kLCBsb2FkSGVscGVyKQotICAgIGdldCh2YWx1ZU9wZXJhbmQsIHQxKQorbWFjcm8gd3JpdGVC
YXJyaWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSwgbG9hZE1hY3JvKQorICAg
IGdldCh2YWx1ZUZpZWxkTmFtZSwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVRhZyhz
aXplLCB0MSwgdDApCiAgICAgYmluZXEgdDAsIENlbGxUYWcsIC53cml0ZUJhcnJpZXJEb25lCiAK
LSAgICBsb2FkSGVscGVyKHQzKQorICAgIGxvYWRNYWNybyh0MykKIAogICAgIHNraXBJZklzUmVt
ZW1iZXJlZE9ySW5FZGVuKAogICAgICAgICB0MywKQEAgLTU4MSwxNiArNTgxLDE2IEBAIG1hY3Jv
IHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmEKIC53cml0ZUJhcnJpZXJEb25lOgog
ZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsT2JqZWN0KHNpemUsIGdldCwgdmFsdWVP
cGVyYW5kKQotICAgIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmFsdWVPcGVyYW5k
LAorbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qoc2l6ZSwgZ2V0LCB2YWx1ZUZpZWxk
TmFtZSkKKyAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZhbHVlRmllbGROYW1l
LAogICAgICAgICBtYWNybyhyZWdpc3RlclRvU3RvcmVHbG9iYWwpCiAgICAgICAgICAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgcmVnaXN0ZXJUb1N0b3JlR2xvYmFsCiAgICAgICAgICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3JlZ2lzdGVyVG9TdG9yZUdsb2JhbF0sIHJlZ2lz
dGVyVG9TdG9yZUdsb2JhbAogICAgICAgICBlbmQpCiBlbmQKIAotbWFjcm8gd3JpdGVCYXJyaWVy
T25HbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoc2l6ZSwgZ2V0LCB2YWx1ZU9wZXJhbmQpCi0gICAg
d3JpdGVCYXJyaWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2YWx1ZU9wZXJhbmQsCittYWNybyB3cml0
ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9ubWVudChzaXplLCBnZXQsIHZhbHVlRmllbGRO
YW1lKQorICAgIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmFsdWVGaWVsZE5hbWUs
CiAgICAgICAgIG1hY3JvKHJlZ2lzdGVyVG9TdG9yZUdsb2JhbCkKICAgICAgICAgICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCByZWdpc3RlclRvU3RvcmVHbG9iYWwKICAgICAgICAgICAgIGxvYWRw
IENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbcmVnaXN0ZXJUb1N0b3JlR2xvYmFsXSwgcmVnaXN0
ZXJUb1N0b3JlR2xvYmFsCkBAIC01OTksOCArNTk5LDggQEAgbWFjcm8gd3JpdGVCYXJyaWVyT25H
bG9iYWxMZXhpY2FsRW52aXJvbgogZW5kCiAKIG1hY3JvIHZhbHVlUHJvZmlsZShvcCwgbWV0YWRh
dGEsIHRhZywgcGF5bG9hZCkKLSAgICBzdG9yZWkgdGFnLCAlb3AlOjpNZXRhZGF0YTo6cHJvZmls
ZS5tX2J1Y2tldHMgKyBUYWdPZmZzZXRbbWV0YWRhdGFdCi0gICAgc3RvcmVpIHBheWxvYWQsICVv
cCU6Ok1ldGFkYXRhOjpwcm9maWxlLm1fYnVja2V0cyArIFBheWxvYWRPZmZzZXRbbWV0YWRhdGFd
CisgICAgc3RvcmVpIHRhZywgJW9wJTo6TWV0YWRhdGE6Om1fcHJvZmlsZS5tX2J1Y2tldHMgKyBU
YWdPZmZzZXRbbWV0YWRhdGFdCisgICAgc3RvcmVpIHBheWxvYWQsICVvcCU6Ok1ldGFkYXRhOjpt
X3Byb2ZpbGUubV9idWNrZXRzICsgUGF5bG9hZE9mZnNldFttZXRhZGF0YV0KIGVuZAogCiAKQEAg
LTcxMyw3ICs3MTMsNyBAQCBfbGxpbnRfb3BfZW50ZXI6CiAKIAogbGxpbnRPcFdpdGhQcm9maWxl
KG9wX2dldF9hcmd1bWVudCwgT3BHZXRBcmd1bWVudCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIHJldHVybikKLSAgICBnZXQoaW5kZXgsIHQyKQorICAgIGdldChtX2luZGV4LCB0MikKICAg
ICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudFtjZnJdLCB0MAogICAgIGJpbHRl
cSB0MCwgdDIsIC5vcEdldEFyZ3VtZW50T3V0T2ZCb3VuZHMKICAgICBsb2FkaSBUaGlzQXJndW1l
bnRPZmZzZXQgKyBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0sIHQwCkBAIC03NDAsMTIgKzc0MCwxMiBA
QCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF90b190aGlzLCBPcFRvVGhpcywgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgZ2V0KHNyY0Rz
dCwgdDApCisgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0
MCwgOF0sIENlbGxUYWcsIC5vcFRvVGhpc1Nsb3cKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2Nm
ciwgdDAsIDhdLCB0MAogICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgRmluYWxPYmplY3RU
eXBlLCAub3BUb1RoaXNTbG93CiAgICAgbWV0YWRhdGEodDIsIHQzKQotICAgIGxvYWRwIE9wVG9U
aGlzOjpNZXRhZGF0YTo6Y2FjaGVkU3RydWN0dXJlW3QyXSwgdDIKKyAgICBsb2FkcCBPcFRvVGhp
czo6TWV0YWRhdGE6Om1fY2FjaGVkU3RydWN0dXJlW3QyXSwgdDIKICAgICBicG5lcSBKU0NlbGw6
Om1fc3RydWN0dXJlSURbdDBdLCB0MiwgLm9wVG9UaGlzU2xvdwogICAgIGRpc3BhdGNoKCkKIApA
QCAtNzU2LDcgKzc1Niw3IEBAIGVuZCkKIAogCiBsbGludE9wKG9wX2NoZWNrX3RkeiwgT3BDaGVj
a1RkeiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZ2V0KHRhcmdldCwgdDApCisg
ICAgZ2V0KG1fdGFyZ2V0LCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlVGFnKHNpemUs
IHQwLCB0MSkKICAgICBiaW5lcSB0MSwgRW1wdHlWYWx1ZVRhZywgLm9wTm90VERaCiAgICAgY2Fs
bFNsb3dQYXRoKF9zbG93X3BhdGhfdGhyb3dfdGR6X2Vycm9yKQpAQCAtNzY3LDE0ICs3NjcsMTQg
QEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX21vdiwgT3BNb3YsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KHNyYywgdDEpCisgICAgZ2V0KG1fc3Jj
LCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MiwgdDMpCiAgICAg
cmV0dXJuKHQyLCB0MykKIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9ub3QsIE9wTm90
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0
MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQwLCB0MiwgdDMpCiAgICAgYmluZXEgdDIsIEJvb2xlYW5UYWcsIC5vcE5vdFNsb3cKICAg
ICB4b3JpIDEsIHQzCkBAIC03ODgsOCArNzg4LDggQEAgZW5kKQogCiBtYWNybyBlcXVhbGl0eUNv
bXBhcmlzb25PcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmlzb24pCiAgICAgbGxpbnRPcFdpdGhS
ZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikK
LSAgICAgICAgZ2V0KHJocywgdDIpCi0gICAgICAgIGdldChsaHMsIHQwKQorICAgICAgICBnZXQo
bV9yaHMsIHQyKQorICAgICAgICBnZXQobV9saHMsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQyLCB0MywgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCB0MywgLm9wRXFTbG93
CkBAIC04MDcsOCArODA3LDggQEAgZW5kCiAKIG1hY3JvIGVxdWFsaXR5SnVtcE9wKG5hbWUsIG9w
LCBpbnRlZ2VyQ29tcGFyaXNvbikKICAgICBsbGludE9wV2l0aEp1bXAob3BfJW5hbWUlLCBvcCwg
bWFjcm8gKHNpemUsIGdldCwganVtcCwgZGlzcGF0Y2gpCi0gICAgICAgIGdldChyaHMsIHQyKQot
ICAgICAgICBnZXQobGhzLCB0MCkKKyAgICAgICAgZ2V0KG1fcmhzLCB0MikKKyAgICAgICAgZ2V0
KG1fbGhzLCB0MCkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDMs
IHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQw
KQogICAgICAgICBiaW5lcSB0MiwgdDMsIC5zbG93CkBAIC04MTgsNyArODE4LDcgQEAgbWFjcm8g
ZXF1YWxpdHlKdW1wT3AobmFtZSwgb3AsIGludGVnZXJDbwogICAgICAgICBkaXNwYXRjaCgpCiAK
ICAgICAuanVtcFRhcmdldDoKLSAgICAgICAganVtcCh0YXJnZXQpCisgICAgICAgIGp1bXAobV90
YXJnZXQpCiAKICAgICAuc2xvdzoKICAgICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3Bh
dGhfJW5hbWUlKQpAQCAtODI5LDcgKzgyOSw3IEBAIGVuZAogCiBtYWNybyBlcXVhbE51bGxDb21w
YXJpc29uT3AobmFtZSwgb3AsIGZuKQogICAgIGxsaW50T3BXaXRoUmV0dXJuKG5hbWUsIG9wLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgICAgICBnZXQob3BlcmFuZCwg
dDApCisgICAgICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgICAgICBhc3NlcnROb3RDb25zdGFu
dChzaXplLCB0MCkKICAgICAgICAgbG9hZGkgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCB0MQogICAg
ICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MApAQCAtODYwLDcgKzg2MCw3
IEBAIGVxdWFsTnVsbENvbXBhcmlzb25PcChvcF9uZXFfbnVsbCwgT3BOZXEKIAogCiBsbGludE9w
V2l0aFJldHVybihvcF9pc191bmRlZmluZWRfb3JfbnVsbCwgT3BJc1VuZGVmaW5lZE9yTnVsbCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQob3BlcmFuZCwgdDAp
CisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgYXNzZXJ0Tm90Q29uc3RhbnQoc2l6ZSwgdDAp
CiAgICAgbG9hZGkgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCB0MQogICAgIG9yaSAxLCB0MQpAQCAt
ODcxLDggKzg3MSw4IEBAIGVuZCkKIAogbWFjcm8gc3RyaWN0RXFPcChuYW1lLCBvcCwgZXF1YWxp
dHlPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KHJocywgdDIpCi0gICAg
ICAgIGdldChsaHMsIHQwKQorICAgICAgICBnZXQobV9yaHMsIHQyKQorICAgICAgICBnZXQobV9s
aHMsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MywgdDEp
CiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAg
ICAgICAgIGJpbmVxIHQyLCB0MywgLnNsb3cKQEAgLTg5Myw4ICs4OTMsOCBAQCBlbmQKIAogbWFj
cm8gc3RyaWN0RXF1YWxpdHlKdW1wT3AobmFtZSwgb3AsIGVxdWFsaXR5T3BlcmF0aW9uKQogICAg
IGxsaW50T3BXaXRoSnVtcChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1wLCBk
aXNwYXRjaCkKLSAgICAgICAgZ2V0KHJocywgdDIpCi0gICAgICAgIGdldChsaHMsIHQwKQorICAg
ICAgICBnZXQobV9yaHMsIHQyKQorICAgICAgICBnZXQobV9saHMsIHQwKQogICAgICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MywgdDEpCiAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCB0Mywg
LnNsb3cKQEAgLTkwNyw3ICs5MDcsNyBAQCBtYWNybyBzdHJpY3RFcXVhbGl0eUp1bXBPcChuYW1l
LCBvcCwgZXF1CiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAg
ICBqdW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKIAogICAgIC5zbG93OgogICAg
ICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC05MzQsNyArOTM0
LDcgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBw
cmVPcChuYW1lLCBvcCwgb3BlcmF0aW9uKQogICAgIGxsaW50T3Aob3BfJW5hbWUlLCBvcCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgICAgIGdldChzcmNEc3QsIHQwKQorICAgICAg
ICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0s
IEludDMyVGFnLCAuc2xvdwogICAgICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhd
LCB0MQogICAgICAgICBvcGVyYXRpb24odDEsIC5zbG93KQpAQCAtOTQ5LDcgKzk0OSw3IEBAIGVu
ZAogCiAKIGxsaW50T3BXaXRoUHJvZmlsZShvcF90b19udW1iZXIsIE9wVG9OdW1iZXIsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQwKQorICAg
IGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAs
IHQyLCB0MykKICAgICBiaWVxIHQyLCBJbnQzMlRhZywgLm9wVG9OdW1iZXJJc0ludAogICAgIGJp
YWVxIHQyLCBMb3dlc3RUYWcsIC5vcFRvTnVtYmVyU2xvdwpAQCAtOTYzLDcgKzk2Myw3IEBAIGVu
ZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF90b19zdHJpbmcsIE9wVG9TdHJpbmcsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQwKQorICAg
IGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAs
IHQyLCB0MykKICAgICBiaW5lcSB0MiwgQ2VsbFRhZywgLm9wVG9TdHJpbmdTbG93CiAgICAgYmJu
ZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BUb1N0cmluZ1Nsb3cKQEAgLTk3
Nyw3ICs5NzcsNyBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhQcm9maWxlKG9wX3RvX29iamVjdCwg
T3BUb09iamVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQo
b3BlcmFuZCwgdDApCisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MCwgdDIsIHQzKQogICAgIGJpbmVxIHQyLCBDZWxsVGFnLCAub3BUb09i
amVjdFNsb3cKICAgICBiYmIgSlNDZWxsOjptX3R5cGVbdDNdLCBPYmplY3RUeXBlLCAub3BUb09i
amVjdFNsb3cKQEAgLTk5MiwxMSArOTkyLDExIEBAIGVuZCkKIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRh
LCByZXR1cm4pCiAKICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3JpIHR5
cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6YXJpdGhQcm9maWxlW3Q1XQorICAgICAgICBvcmkgdHlw
ZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVt0NV0KICAgICBlbmQKIAogICAg
IG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXQob3BlcmFuZCwgdDApCisgICAgZ2V0KG1fb3BlcmFu
ZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQogICAg
IGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0MiwgMHg3
ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwpAQCAtMTAxOCwxOCArMTAxOCwxOCBAQCBlbmQpCiBtYWNy
byBiaW5hcnlPcEN1c3RvbVN0b3JlKG5hbWUsIG9wLCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUs
IGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVuYW1lJSwgb3As
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBt
YWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaSB0eXBlLCAlb3AlOjpNZXRh
ZGF0YTo6YXJpdGhQcm9maWxlW3Q1XQorICAgICAgICAgICAgb3JpIHR5cGUsICVvcCU6Ok1ldGFk
YXRhOjptX2FyaXRoUHJvZmlsZVt0NV0KICAgICAgICAgZW5kCiAKICAgICAgICAgbWV0YWRhdGEo
dDUsIHQyKQotICAgICAgICBnZXQocmhzLCB0MikKLSAgICAgICAgZ2V0KGxocywgdDApCisgICAg
ICAgIGdldChtX3JocywgdDIpCisgICAgICAgIGdldChtX2xocywgdDApCiAgICAgICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQzLCB0MSkKICAgICAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIEludDMy
VGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdEludAog
ICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQotICAgICAgICBnZXQoZHN0
LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlvbkFu
ZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCkBAIC0x
MDQ1LDcgKzEwNDUsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG5hbWUsIG9wLCBpbnRl
CiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFBy
b2ZpbGVOdW1iZXJOdW1iZXIpCiAgICAgLm9wMU5vdEludFJlYWR5OgotICAgICAgICBnZXQoZHN0
LCB0MSkKKyAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBmdDAK
ICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQogICAgICAgICBzdG9yZWQgZnQwLCBb
Y2ZyLCB0MSwgOF0KQEAgLTEwNTMsNyArMTA1Myw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3Rv
cmUobmFtZSwgb3AsIGludGUKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3Bl
cmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmluaXRl
bHkgbm90LgotICAgICAgICBnZXQoZHN0LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAg
ICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVJbnROdW1iZXIpCiAgICAgICAgIGNpMmQgdDAsIGZ0MApAQCAtMTEyMCw3ICsxMTIw
LDcgQEAgYmluYXJ5T3BDdXN0b21TdG9yZShkaXYsIE9wRGl2LAogCiAKIGxsaW50T3BXaXRoUmV0
dXJuKG9wX3Vuc2lnbmVkLCBPcFVuc2lnbmVkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
cmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MSkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXplLCB0MSwgSW50MzJUYWcsIHQyLCAu
b3BVbnNpZ25lZFNsb3cpCiAgICAgYmlsdCB0MiwgMCwgLm9wVW5zaWduZWRTbG93CiAgICAgcmV0
dXJuIChJbnQzMlRhZywgdDIpCkBAIC0xMTMyLDggKzExMzIsOCBAQCBlbmQpCiAKIG1hY3JvIGNv
bW1vbkJpdE9wKG9wS2luZCwgbmFtZSwgb3AsIG9wZXJhdGlvbikKICAgICBvcEtpbmQob3BfJW5h
bWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0
KHJocywgdDIpCi0gICAgICAgIGdldChsaHMsIHQwKQorICAgICAgICBnZXQobV9yaHMsIHQyKQor
ICAgICAgICBnZXQobV9saHMsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQyLCB0MywgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUs
IHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKQEAgLTExNzcs
NyArMTE3Nyw3IEBAIGJpdE9wUHJvZmlsZWQoYml0b3IsIE9wQml0b3IsCiAgICAgbWFjcm8gKGxl
ZnQsIHJpZ2h0KSBvcmkgbGVmdCwgcmlnaHQgZW5kKQogCiBsbGludE9wV2l0aFByb2ZpbGUob3Bf
Yml0bm90LCBPcEJpdG5vdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAg
ICBnZXQob3BlcmFuZCwgdDApCisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDIsIHQzKQogICAgIGJpbmVxIHQyLCBJbnQzMlRhZywg
Lm9wQml0Tm90U2xvdwogICAgIG5vdGkgdDMKQEAgLTExODksMTEgKzExODksMTEgQEAgbGxpbnRP
cFdpdGhQcm9maWxlKG9wX2JpdG5vdCwgT3BCaXRub3QsIAogZW5kKQogCiBsbGludE9wKG9wX292
ZXJyaWRlc19oYXNfaW5zdGFuY2UsIE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoKQotICAgIGdldChkc3QsIHQzKQorICAgIGdldChtX2RzdCwgdDMpCiAg
ICAgc3RvcmVpIEJvb2xlYW5UYWcsIFRhZ09mZnNldFtjZnIsIHQzLCA4XQogCiAgICAgIyBGaXJz
dCBjaGVjayBpZiBoYXNJbnN0YW5jZVZhbHVlIGlzIHRoZSBvbmUgb24gRnVuY3Rpb24ucHJvdG90
eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0KLSAgICBnZXQoaGFzSW5zdGFuY2VWYWx1ZSwgdDApCisg
ICAgZ2V0KG1faGFzSW5zdGFuY2VWYWx1ZSwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQyLCAub3BPdmVycmlkZXNoYXNJbnN0YW5jZVZh
bHVlTm90Q2VsbCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIp
CiAgICAgYmluZXEgdDEsIENlbGxUYWcsIC5vcE92ZXJyaWRlc2hhc0luc3RhbmNlVmFsdWVOb3RD
ZWxsCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBsbGludE9wKG9wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UsIE9wT3ZlCiAgICAgYmluZXEgdDEsIHQyLCAub3BPdmVycmlkZXNoYXNJbnN0YW5jZVZhbHVl
Tm90RGVmYXVsdAogCiAgICAgIyBXZSBrbm93IHRoZSBjb25zdHJ1Y3RvciBpcyBhIGNlbGwuCi0g
ICAgZ2V0KGNvbnN0cnVjdG9yLCB0MCkKKyAgICBnZXQobV9jb25zdHJ1Y3RvciwgdDApCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWRVbmNoZWNrZWQoc2l6ZSwgdDAsIHQxKQogICAg
IHRieiBKU0NlbGw6Om1fZmxhZ3NbdDFdLCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlLCB0
MAogICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XQpAQCAtMTIxOSw3ICsx
MjE5LDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX2VtcHR5LCBPcElzRW1w
dHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQs
IHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDEsIHQyLCB0MykKICAgICBjaWVxIHQyLCBFbXB0eVZhbHVlVGFnLCB0MwogICAgIHJl
dHVybihCb29sZWFuVGFnLCB0MykKQEAgLTEyMjcsNyArMTIyNyw3IEBAIGVuZCkKIAogCiBsbGlu
dE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWQsIE9wSXNVbmRlZmluZWQsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldCht
X29wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyLCB0
MykKICAgICBiaWVxIHQyLCBDZWxsVGFnLCAub3BJc1VuZGVmaW5lZENlbGwKICAgICBjaWVxIHQy
LCBVbmRlZmluZWRUYWcsIHQzCkBAIC0xMjQ1LDcgKzEyNDUsNyBAQCBlbmQpCiAKIAogbGxpbnRP
cFdpdGhSZXR1cm4ob3BfaXNfYm9vbGVhbiwgT3BJc0Jvb2xlYW4sIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29wZXJh
bmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVUYWcoc2l6ZSwgdDEsIHQwKQogICAg
IGNpZXEgdDAsIEJvb2xlYW5UYWcsIHQwCiAgICAgcmV0dXJuKEJvb2xlYW5UYWcsIHQwKQpAQCAt
MTI1Myw3ICsxMjUzLDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX251bWJl
ciwgT3BJc051bWJlciwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBn
ZXQob3BlcmFuZCwgdDEpCisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZVRhZyhzaXplLCB0MSwgdDApCiAgICAgYWRkaSAxLCB0MAogICAgIGNpYiB0MCwg
TG93ZXN0VGFnICsgMSwgdDEKQEAgLTEyNjIsMTAgKzEyNjIsMTAgQEAgZW5kKQogCiAKIGxsaW50
T3BXaXRoUmV0dXJuKG9wX2lzX2NlbGxfd2l0aF90eXBlLCBPcElzQ2VsbFdpdGhUeXBlLCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MSkKKyAg
ICBnZXQobV9vcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQx
LCB0MCwgdDMpCiAgICAgYmluZXEgdDAsIENlbGxUYWcsIC5ub3RDZWxsQ2FzZQotICAgIGdldHUo
c2l6ZSwgT3BJc0NlbGxXaXRoVHlwZSwgdHlwZSwgdDApCisgICAgZ2V0dShzaXplLCBPcElzQ2Vs
bFdpdGhUeXBlLCBtX3R5cGUsIHQwKQogICAgIGNiZXEgSlNDZWxsOjptX3R5cGVbdDNdLCB0MCwg
dDEKICAgICByZXR1cm4oQm9vbGVhblRhZywgdDEpCiAubm90Q2VsbENhc2U6CkBAIC0xMjc0LDcg
KzEyNzQsNyBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfb2JqZWN0LCBPcElz
T2JqZWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVy
YW5kLCB0MSkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQxLCB0MCwgdDMpCiAgICAgYmluZXEgdDAsIENlbGxUYWcsIC5vcElzT2JqZWN0
Tm90Q2VsbAogICAgIGNiYWVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgT2JqZWN0VHlwZSwgdDEKQEAg
LTEzMjcsMTAgKzEzMjcsMTAgQEAgZW5kCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5
X2lkX2RpcmVjdCwgT3BHZXRCeUlkRGlyZWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKICAgICBtZXRhZGF0YSh0NSwgdDApCi0gICAgZ2V0KGJhc2UsIHQw
KQotICAgIGxvYWRpIE9wR2V0QnlJZERpcmVjdDo6TWV0YWRhdGE6OnN0cnVjdHVyZVt0NV0sIHQx
CisgICAgZ2V0KG1fYmFzZSwgdDApCisgICAgbG9hZGkgT3BHZXRCeUlkRGlyZWN0OjpNZXRhZGF0
YTo6bV9zdHJ1Y3R1cmVbdDVdLCB0MQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2Fk
KHNpemUsIHQwLCBDZWxsVGFnLCB0MywgLm9wR2V0QnlJZERpcmVjdFNsb3cpCi0gICAgbG9hZGkg
T3BHZXRCeUlkRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0W3Q1XSwgdDIKKyAgICBsb2FkaSBPcEdl
dEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjptX29mZnNldFt0NV0sIHQyCiAgICAgYmluZXEgSlNDZWxs
OjptX3N0cnVjdHVyZUlEW3QzXSwgdDEsIC5vcEdldEJ5SWREaXJlY3RTbG93CiAgICAgbG9hZFBy
b3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MiwgdDMsIHQwLCB0MSkKICAgICB2YWx1ZVByb2ZpbGUo
T3BHZXRCeUlkRGlyZWN0LCB0NSwgdDAsIHQxKQpAQCAtMTM0NCwxNiArMTM0NCwxNiBAQCBlbmQp
CiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEJ5SWQsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIG1ldGFkYXRhKHQ1LCB0
MCkKLSAgICBsb2FkYiBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlW3Q1XSwgdDEKLSAgICBnZXQo
YmFzZSwgdDApCisgICAgbG9hZGIgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlW3Q1XSwgdDEK
KyAgICBnZXQobV9iYXNlLCB0MCkKIAogLm9wR2V0QnlJZFByb3RvTG9hZDoKICAgICBiYm5lcSB0
MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpQcm90b0xvYWQsIC5vcEdldEJ5SWRBcnJheUxlbmd0
aAotICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5wcm90b0xvYWRN
b2RlLnN0cnVjdHVyZVt0NV0sIHQxCisgICAgbG9hZGkgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9t
b2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5zdHJ1Y3R1cmVbdDVdLCB0MQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGVQYXlsb2FkKHNpemUsIHQwLCBDZWxsVGFnLCB0MywgLm9wR2V0QnlJZFNs
b3cpCi0gICAgbG9hZGlzIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5wcm90b0xv
YWRNb2RlLmNhY2hlZE9mZnNldFt0NV0sIHQyCisgICAgbG9hZGlzIE9wR2V0QnlJZDo6TWV0YWRh
dGE6Om1fbW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkT2Zmc2V0W3Q1XSwgdDIKICAg
ICBiaW5lcSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDNdLCB0MSwgLm9wR2V0QnlJZFNsb3cKLSAg
ICBsb2FkcCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5j
YWNoZWRTbG90W3Q1XSwgdDMKKyAgICBsb2FkcCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVN
ZXRhZGF0YS5wcm90b0xvYWRNb2RlLmNhY2hlZFNsb3RbdDVdLCB0MwogICAgIGxvYWRQcm9wZXJ0
eUF0VmFyaWFibGVPZmZzZXQodDIsIHQzLCB0MCwgdDEpCiAgICAgdmFsdWVQcm9maWxlKE9wR2V0
QnlJZCwgdDUsIHQwLCB0MSkKICAgICByZXR1cm4odDAsIHQxKQpAQCAtMTM2Miw3ICsxMzYyLDcg
QEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QgogICAgIGJibmVxIHQx
LCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoLCAub3BHZXRCeUlkVW5zZXQKICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXplLCB0MCwgQ2VsbFRhZywgdDMsIC5v
cEdldEJ5SWRTbG93KQogICAgIG1vdmUgdDMsIHQyCi0gICAgYXJyYXlQcm9maWxlKE9wR2V0QnlJ
ZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCB0
MiwgdDUsIHQwKQorICAgIGFycmF5UHJvZmlsZShPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVN
ZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCB0MiwgdDUsIHQwKQogICAgIGJ0
aXogdDIsIElzQXJyYXksIC5vcEdldEJ5SWRTbG93CiAgICAgYnRpeiB0MiwgSW5kZXhpbmdTaGFw
ZU1hc2ssIC5vcEdldEJ5SWRTbG93CiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3Qz
XSwgdDAKQEAgLTEzNzMsMTYgKzEzNzMsMTYgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRf
YnlfaWQsIE9wR2V0QgogCiAub3BHZXRCeUlkVW5zZXQ6CiAgICAgYmJuZXEgdDEsIGNvbnN0ZXhw
ciBHZXRCeUlkTW9kZTo6VW5zZXQsIC5vcEdldEJ5SWREZWZhdWx0Ci0gICAgbG9hZGkgT3BHZXRC
eUlkOjpNZXRhZGF0YTo6bW9kZU1ldGFkYXRhLnVuc2V0TW9kZS5zdHJ1Y3R1cmVbdDVdLCB0MQor
ICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fbW9kZU1ldGFkYXRhLnVuc2V0TW9kZS5z
dHJ1Y3R1cmVbdDVdLCB0MQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNpemUs
IHQwLCBDZWxsVGFnLCB0MywgLm9wR2V0QnlJZFNsb3cpCiAgICAgYmluZXEgSlNDZWxsOjptX3N0
cnVjdHVyZUlEW3QzXSwgdDEsIC5vcEdldEJ5SWRTbG93CiAgICAgdmFsdWVQcm9maWxlKE9wR2V0
QnlJZCwgdDUsIFVuZGVmaW5lZFRhZywgMCkKICAgICByZXR1cm4oVW5kZWZpbmVkVGFnLCAwKQog
CiAub3BHZXRCeUlkRGVmYXVsdDoKLSAgICBsb2FkaSBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2Rl
TWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlW3Q1XSwgdDEKKyAgICBsb2FkaSBPcEdldEJ5
SWQ6Ok1ldGFkYXRhOjptX21vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmVbdDVdLCB0
MQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNpemUsIHQwLCBDZWxsVGFnLCB0
MywgLm9wR2V0QnlJZFNsb3cpCi0gICAgbG9hZGlzIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVN
ZXRhZGF0YS5kZWZhdWx0TW9kZS5jYWNoZWRPZmZzZXRbdDVdLCB0MgorICAgIGxvYWRpcyBPcEdl
dEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5jYWNoZWRPZmZzZXRb
dDVdLCB0MgogICAgIGJpbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIHQxLCAub3BHZXRC
eUlkU2xvdwogICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDIsIHQzLCB0MCwgdDEp
CiAgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgdDUsIHQwLCB0MSkKQEAgLTEzOTUsMTIgKzEz
OTUsMTIgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0X2J5X2lkLCBPcFB1
dEJ5SWQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAg
IHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBiYXNlLCB2YWx1ZSkKKyAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9iYXNlLCBtX3ZhbHVlKQogICAgIG1ldGFk
YXRhKHQ1LCB0MykKLSAgICBnZXQoYmFzZSwgdDMpCisgICAgZ2V0KG1fYmFzZSwgdDMpCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDMsIENlbGxUYWcsIHQwLCAub3BQ
dXRCeUlkU2xvdykKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MgotICAg
IGJpbmVxIHQyLCBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpvbGRTdHJ1Y3R1cmVbdDVdLCAub3BQdXRC
eUlkU2xvdworICAgIGJpbmVxIHQyLCBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjptX29sZFN0cnVjdHVy
ZVt0NV0sIC5vcFB1dEJ5SWRTbG93CiAKICAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6CiAg
ICAgIyB0NSAtPiBtZXRhZGF0YQpAQCAtMTQwOCw5ICsxNDA4LDkgQEAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9wdXRfYnlfaWQsIE9wUHV0QgogICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKICAgICAj
IFdlIHdpbGwgbG9zZSBjdXJyZW50U3RydWN0dXJlSUQgaW4gdGhlIHNoZW5hbmlnYW5zIGJlbG93
LgogCi0gICAgZ2V0KHZhbHVlLCB0MSkKKyAgICBnZXQobV92YWx1ZSwgdDEpCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIsIHQzKQotICAgIGxvYWRpIE9wUHV0QnlJZDo6
TWV0YWRhdGE6OmZsYWdzW3Q1XSwgdDEKKyAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpt
X2ZsYWdzW3Q1XSwgdDEKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKICAgICAjIHQw
IC0+IG9iamVjdCBiYXNlCkBAIC0xNDg1LDE2ICsxNDg1LDE2IEBAIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVjdHVy
ZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKIAogLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVzOgot
ICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om5ld1N0cnVjdHVyZVt0NV0sIHQxCisgICAg
bG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bV9uZXdTdHJ1Y3R1cmVbdDVdLCB0MQogCiAgICAg
YnRpeiB0MSwgLm9wUHV0QnlJZE5vdFRyYW5zaXRpb24KIAogICAgICMgVGhpcyBpcyB0aGUgdHJh
bnNpdGlvbiBjYXNlLiB0MSBob2xkcyB0aGUgbmV3IFN0cnVjdHVyZSouIElmIHdlIGhhdmUgYSBj
aGFpbiwgd2UgbmVlZCB0bwogICAgICMgY2hlY2sgaXQuIHQwIGlzIHRoZSBiYXNlLiBXZSBtYXkg
Y2xvYmJlciB0MSB0byB1c2UgaXQgYXMgc2NyYXRjaC4KLSAgICBsb2FkcCBPcFB1dEJ5SWQ6Ok1l
dGFkYXRhOjpzdHJ1Y3R1cmVDaGFpblt0NV0sIHQzCisgICAgbG9hZHAgT3BQdXRCeUlkOjpNZXRh
ZGF0YTo6bV9zdHJ1Y3R1cmVDaGFpblt0NV0sIHQzCiAgICAgYnRweiB0MywgLm9wUHV0QnlJZFRy
YW5zaXRpb25EaXJlY3QKIAotICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om9sZFN0cnVj
dHVyZVt0NV0sIHQyICMgTmVlZCBvbGQgc3RydWN0dXJlIGFnYWluLgorICAgIGxvYWRpIE9wUHV0
QnlJZDo6TWV0YWRhdGE6Om1fb2xkU3RydWN0dXJlW3Q1XSwgdDIgIyBOZWVkIG9sZCBzdHJ1Y3R1
cmUgYWdhaW4uCiAgICAgbG9hZHAgU3RydWN0dXJlQ2hhaW46Om1fdmVjdG9yW3QzXSwgdDMKICAg
ICBhc3NlcnQobWFjcm8gKG9rKSBidHBueiB0Mywgb2sgZW5kKQogCkBAIC0xNTA4LDIyICsxNTA4
LDIyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICBidHBu
eiB0MiwgLm9wUHV0QnlJZFRyYW5zaXRpb25DaGFpbkxvb3AKIAogLm9wUHV0QnlJZFRyYW5zaXRp
b25DaGFpbkRvbmU6Ci0gICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bmV3U3RydWN0dXJl
W3Q1XSwgdDEKKyAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjptX25ld1N0cnVjdHVyZVt0
NV0sIHQxCiAKIC5vcFB1dEJ5SWRUcmFuc2l0aW9uRGlyZWN0OgogICAgIHN0b3JlaSB0MSwgSlND
ZWxsOjptX3N0cnVjdHVyZUlEW3QwXQotICAgIGdldCh2YWx1ZSwgdDEpCisgICAgZ2V0KG1fdmFs
dWUsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyLCB0MykKLSAg
ICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRbdDVdLCB0MQorICAgIGxvYWRpIE9w
UHV0QnlJZDo6TWV0YWRhdGE6Om1fb2Zmc2V0W3Q1XSwgdDEKICAgICBzdG9yZVByb3BlcnR5QXRW
YXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0MykKLSAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmQo
c2l6ZSwgZ2V0LCBiYXNlKQorICAgIHdyaXRlQmFycmllck9uT3BlcmFuZChzaXplLCBnZXQsIG1f
YmFzZSkKICAgICBkaXNwYXRjaCgpCiAKIC5vcFB1dEJ5SWROb3RUcmFuc2l0aW9uOgogICAgICMg
VGhlIG9ubHkgdGhpbmcgbGl2ZSByaWdodCBub3cgaXMgdDAsIHdoaWNoIGhvbGRzIHRoZSBiYXNl
LgotICAgIGdldCh2YWx1ZSwgdDEpCisgICAgZ2V0KG1fdmFsdWUsIHQxKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyLCB0MykKLSAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1l
dGFkYXRhOjpvZmZzZXRbdDVdLCB0MQorICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1f
b2Zmc2V0W3Q1XSwgdDEKICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAs
IHQyLCB0MykKICAgICBkaXNwYXRjaCgpCiAKQEAgLTE1MzUsMTEgKzE1MzUsMTEgQEAgZW5kKQog
CiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0QnlWYWwsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIG1ldGFkYXRhKHQ1LCB0
MikKLSAgICBnZXQoYmFzZSwgdDIpCisgICAgZ2V0KG1fYmFzZSwgdDIpCiAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDIsIENlbGxUYWcsIHQwLCAub3BHZXRCeVZhbFNs
b3cpCiAgICAgbW92ZSB0MCwgdDIKLSAgICBhcnJheVByb2ZpbGUoT3BHZXRCeVZhbDo6TWV0YWRh
dGE6OmFycmF5UHJvZmlsZSwgdDIsIHQ1LCB0MSkKLSAgICBnZXQocHJvcGVydHksIHQzKQorICAg
IGFycmF5UHJvZmlsZShPcEdldEJ5VmFsOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIHQyLCB0
NSwgdDEpCisgICAgZ2V0KG1fcHJvcGVydHksIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGVQYXlsb2FkKHNpemUsIHQzLCBJbnQzMlRhZywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAgICBs
b2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MwogICAgIGFuZGkgSW5kZXhpbmdTaGFw
ZU1hc2ssIHQyCkBAIC0xNTU5LDcgKzE1NTksNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dl
dF9ieV92YWwsIE9wR2V0CiAgICAgYmRuZXF1biBmdDAsIGZ0MCwgLm9wR2V0QnlWYWxTbG93CiAg
ICAgIyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYXNzaXZlbHkgb3B0aW1pemVkLgogICAgIGZkMmlp
IGZ0MCwgdDEsIHQyCi0gICAgZ2V0KGRzdCwgdDApCisgICAgZ2V0KG1fZHN0LCB0MCkKICAgICBq
bXAgLm9wR2V0QnlWYWxOb3RFbXB0eQogCiAub3BHZXRCeVZhbE5vdERvdWJsZToKQEAgLTE1NzAs
NyArMTU3MCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKICAg
ICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgUGF5bG9hZE9mZnNldFt0MywgdDEsIDhd
LCB0MQogCiAub3BHZXRCeVZhbERvbmU6Ci0gICAgZ2V0KGRzdCwgdDApCisgICAgZ2V0KG1fZHN0
LCB0MCkKICAgICBiaWVxIHQyLCBFbXB0eVZhbHVlVGFnLCAub3BHZXRCeVZhbFNsb3cKIC5vcEdl
dEJ5VmFsTm90RW1wdHk6CiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KQEAg
LTE1ODksMjUgKzE1ODksMjUgQEAgbWFjcm8gcHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAgICAg
bWFjcm8gY29udGlndW91c1B1dEJ5VmFsKHN0b3JlQ2FsbGJhY2spCiAgICAgICAgICAgICBiaWFl
cSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMu
cHVibGljTGVuZ3RoW3QwXSwgLm91dE9mQm91bmRzCiAgICAgICAgIC5zdG9yZVJlc3VsdDoKLSAg
ICAgICAgICAgIGdldCh2YWx1ZSwgdDIpCisgICAgICAgICAgICBnZXQobV92YWx1ZSwgdDIpCiAg
ICAgICAgICAgICBzdG9yZUNhbGxiYWNrKHQyLCB0MSwgdDAsIHQzKQogICAgICAgICAgICAgZGlz
cGF0Y2goKQogCiAgICAgICAgIC5vdXRPZkJvdW5kczoKICAgICAgICAgICAgIGJpYWVxIHQzLCAt
c2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy52ZWN0b3JM
ZW5ndGhbdDBdLCAub3BQdXRCeVZhbE91dE9mQm91bmRzCi0gICAgICAgICAgICBzdG9yZWIgMSwg
JW9wJTo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQorICAgICAg
ICAgICAgc3RvcmViIDEsICVvcCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX21heVN0b3Jl
VG9Ib2xlW3Q1XQogICAgICAgICAgICAgYWRkaSAxLCB0MywgdDIKICAgICAgICAgICAgIHN0b3Jl
aSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMu
cHVibGljTGVuZ3RoW3QwXQogICAgICAgICAgICAgam1wIC5zdG9yZVJlc3VsdAogICAgICAgICBl
bmQKIAotICAgICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwgdmFs
dWUpCisgICAgICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX2Jhc2UsIG1f
dmFsdWUpCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICAgICAgZ2V0KGJhc2UsIHQwKQor
ICAgICAgICBnZXQobV9iYXNlLCB0MCkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBh
eWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQxLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgICAgIG1v
dmUgdDEsIHQyCi0gICAgICAgIGFycmF5UHJvZmlsZSglb3AlOjpNZXRhZGF0YTo6YXJyYXlQcm9m
aWxlLCB0MiwgdDUsIHQwKQotICAgICAgICBnZXQocHJvcGVydHksIHQwKQorICAgICAgICBhcnJh
eVByb2ZpbGUoJW9wJTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLCB0MiwgdDUsIHQwKQorICAg
ICAgICBnZXQobV9wcm9wZXJ0eSwgdDApCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQ
YXlsb2FkKHNpemUsIHQwLCBJbnQzMlRhZywgdDMsIC5vcFB1dEJ5VmFsU2xvdykKICAgICAgICAg
bG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKICAgICAgICAgYnRpbnogdDIsIENv
cHlPbldyaXRlLCAub3BQdXRCeVZhbFNsb3cKQEAgLTE2NTMsMTQgKzE2NTMsMTQgQEAgbWFjcm8g
cHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1
dEJ5VmFsT3V0T2ZCb3VuZHMKICAgICAgICAgYmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsg
VGFnT2Zmc2V0W3QwLCB0MywgOF0sIEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5VmFsQXJyYXlTdG9y
YWdlRW1wdHkKICAgICAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0OgotICAgICAg
ICBnZXQodmFsdWUsIHQyKQorICAgICAgICBnZXQobV92YWx1ZSwgdDIpCiAgICAgICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQyLCB0MSwgdDIpCiAgICAgICAgIHN0b3JlaSB0
MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDMsIDhdCiAgICAgICAg
IHN0b3JlaSB0MiwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxvYWRPZmZzZXRbdDAsIHQz
LCA4XQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVt
cHR5OgotICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZS5tX21h
eVN0b3JlVG9Ib2xlW3Q1XQorICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6Om1fYXJy
YXlQcm9maWxlLm1fbWF5U3RvcmVUb0hvbGVbdDVdCiAgICAgICAgIGFkZGkgMSwgQXJyYXlTdG9y
YWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQogICAgICAgICBiaWIgdDMsIC1zaXplb2YgSW5k
ZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0s
IC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKICAgICAgICAgYWRkaSAxLCB0Mywg
dDEKQEAgLTE2NjgsNyArMTY2OCw3IEBAIG1hY3JvIHB1dEJ5VmFsT3AobmFtZSwgb3ApCiAgICAg
ICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAKICAgICAub3BQdXRC
eVZhbE91dE9mQm91bmRzOgotICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6OmFycmF5
UHJvZmlsZS5tX291dE9mQm91bmRzW3Q1XQorICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRh
dGE6Om1fYXJyYXlQcm9maWxlLm1fb3V0T2ZCb3VuZHNbdDVdCiAgICAgLm9wUHV0QnlWYWxTbG93
OgogICAgICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF8lbmFtZSUpCiAgICAgICAg
IGRpc3BhdGNoKCkKQEAgLTE2ODMsMTMgKzE2ODMsMTMgQEAgcHV0QnlWYWxPcChwdXRfYnlfdmFs
X2RpcmVjdCwgT3BQdXRCeVZhbAogCiBtYWNybyBsbGludEp1bXBUcnVlT3JGYWxzZU9wKG5hbWUs
IG9wLCBjb25kaXRpb25PcCkKICAgICBsbGludE9wV2l0aEp1bXAob3BfJW5hbWUlLCBvcCwgbWFj
cm8gKHNpemUsIGdldCwganVtcCwgZGlzcGF0Y2gpCi0gICAgICAgIGdldChjb25kaXRpb24sIHQx
KQorICAgICAgICBnZXQobV9jb25kaXRpb24sIHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlUGF5bG9hZChzaXplLCB0MSwgQm9vbGVhblRhZywgdDAsIC5zbG93KQogICAgICAgICBj
b25kaXRpb25PcCh0MCwgLnRhcmdldCkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnRhcmdl
dDoKLSAgICAgICAganVtcCh0YXJnZXQpCisgICAgICAgIGp1bXAobV90YXJnZXQpCiAKICAgICAu
c2xvdzoKICAgICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfJW5hbWUlKQpAQCAt
MTcwMCw3ICsxNzAwLDcgQEAgZW5kCiAKIG1hY3JvIGVxdWFsTnVsbEp1bXBPcChuYW1lLCBvcCwg
Y2VsbEhhbmRsZXIsIGltbWVkaWF0ZUhhbmRsZXIpCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVu
YW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQo
dmFsdWUsIHQwKQorICAgICAgICBnZXQobV92YWx1ZSwgdDApCiAgICAgICAgIGFzc2VydE5vdENv
bnN0YW50KHNpemUsIHQwKQogICAgICAgICBsb2FkaSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIHQx
CiAgICAgICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0sIHQwCkBAIC0xNzEwLDcg
KzE3MTAsNyBAQCBtYWNybyBlcXVhbE51bGxKdW1wT3AobmFtZSwgb3AsIGNlbGxIYW5kCiAgICAg
ICAgIGRpc3BhdGNoKCkKIAogICAgIC50YXJnZXQ6Ci0gICAgICAgIGp1bXAodGFyZ2V0KQorICAg
ICAgICBqdW1wKG1fdGFyZ2V0KQogCiAgICAgLmltbWVkaWF0ZToKICAgICAgICAgb3JpIDEsIHQx
CkBAIC0xNzQxLDggKzE3NDEsOCBAQCBlcXVhbE51bGxKdW1wT3Aoam5lcV9udWxsLCBPcEpuZXFO
dWxsLAogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bfam5lcV9wdHIsIE9wSm5lcVB0ciwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgZ2V0KHZhbHVl
LCB0MCkKLSAgICBnZXQoc3BlY2lhbFBvaW50ZXIsIHQxKQorICAgIGdldChtX3ZhbHVlLCB0MCkK
KyAgICBnZXQobV9zcGVjaWFsUG9pbnRlciwgdDEpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0s
IHQyCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0Ml0sIHQyCiAgICAgYmlu
ZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBDZWxsVGFnLCAub3BKbmVxUHRyQnJhbmNoCkBAIC0x
NzUwLDggKzE3NTAsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2puZXFfcHRyLCBPcEpuZXFQ
CiAgICAgYnBlcSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MSwgLm9wSm5lcVB0ckZhbGxU
aHJvdWdoCiAub3BKbmVxUHRyQnJhbmNoOgogICAgIG1ldGFkYXRhKHQ1LCB0MikKLSAgICBzdG9y
ZWIgMSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6aGFzSnVtcGVkW3Q1XQotICAgIGdldCh0YXJnZXQs
IHQwKQorICAgIHN0b3JlYiAxLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjptX2hhc0p1bXBlZFt0NV0K
KyAgICBnZXQobV90YXJnZXQsIHQwKQogICAgIGp1bXBJbXBsKHQwKQogLm9wSm5lcVB0ckZhbGxU
aHJvdWdoOgogICAgIGRpc3BhdGNoKCkKQEAgLTE3NjAsMjMgKzE3NjAsMjMgQEAgZW5kKQogCiBt
YWNybyBjb21wYXJlVW5zaWduZWRKdW1wT3AobmFtZSwgb3AsIGludGVnZXJDb21wYXJlKQogICAg
IGxsaW50T3BXaXRoSnVtcChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1wLCBk
aXNwYXRjaCkKLSAgICAgICAgZ2V0KGxocywgdDIpCi0gICAgICAgIGdldChyaHMsIHQzKQorICAg
ICAgICBnZXQobV9saHMsIHQyKQorICAgICAgICBnZXQobV9yaHMsIHQzKQogICAgICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MCwgdDEpCiAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUyUmVnKHNpemUsIHQzLCB0MiwgdDMpCiAgICAgICAgIGludGVnZXJDb21wYXJl
KHQxLCB0MywgLmp1bXBUYXJnZXQpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1wVGFy
Z2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKICAgICBl
bmQpCiBlbmQKIAogCiBtYWNybyBjb21wYXJlVW5zaWduZWRPcChuYW1lLCBvcCwgaW50ZWdlckNv
bXBhcmVBbmRTZXQpCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KHJocywgdDIpCi0gICAg
ICAgIGdldChsaHMsIHQwKQorICAgICAgICBnZXQobV9yaHMsIHQyKQorICAgICAgICBnZXQobV9s
aHMsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MywgdDEp
CiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAg
ICAgICAgIGludGVnZXJDb21wYXJlQW5kU2V0KHQwLCB0MSwgdDApCkBAIC0xNzg3LDggKzE3ODcs
OCBAQCBlbmQKIAogbWFjcm8gY29tcGFyZUp1bXBPcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmUs
IGRvdWJsZUNvbXBhcmUpCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1hY3Jv
IChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQobGhzLCB0MikKLSAgICAg
ICAgZ2V0KHJocywgdDMpCisgICAgICAgIGdldChtX2xocywgdDIpCisgICAgICAgIGdldChtX3Jo
cywgdDMpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQwLCB0MSkK
ICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDMsIHQyLCB0MykKICAg
ICAgICAgYmluZXEgdDAsIEludDMyVGFnLCAub3AxTm90SW50CkBAIC0xODE3LDcgKzE4MTcsNyBA
QCBtYWNybyBjb21wYXJlSnVtcE9wKG5hbWUsIG9wLCBpbnRlZ2VyQ29tCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAg
anVtcChtX3RhcmdldCkKIAogICAgIC5zbG93OgogICAgICAgICBjYWxsU2xvd1BhdGgoX2xsaW50
X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC0xODI3LDggKzE4MjcsOCBAQCBlbmQKIAogCiBsbGludE9w
V2l0aEp1bXAob3Bfc3dpdGNoX2ltbSwgT3BTd2l0Y2hJbW0sIG1hY3JvIChzaXplLCBnZXQsIGp1
bXAsIGRpc3BhdGNoKQotICAgIGdldChzY3J1dGluZWUsIHQyKQotICAgIGdldCh0YWJsZUluZGV4
LCB0MykKKyAgICBnZXQobV9zY3J1dGluZWUsIHQyKQorICAgIGdldChtX3RhYmxlSW5kZXgsIHQz
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQxLCB0MCkKICAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgdDIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fcmFyZURhdGFbdDJd
LCB0MgpAQCAtMTg0Niw3ICsxODQ2LDcgQEAgbGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRjaF9pbW0s
IE9wU3dpdGNoSQogLm9wU3dpdGNoSW1tTm90SW50OgogICAgIGJpYiB0MSwgTG93ZXN0VGFnLCAu
b3BTd2l0Y2hJbW1TbG93ICAjIEdvIHRvIHNsb3cgcGF0aCBpZiBpdCdzIGEgZG91YmxlLgogLm9w
U3dpdGNoSW1tRmFsbFRocm91Z2g6Ci0gICAganVtcChkZWZhdWx0T2Zmc2V0KQorICAgIGp1bXAo
bV9kZWZhdWx0T2Zmc2V0KQogCiAub3BTd2l0Y2hJbW1TbG93OgogICAgIGNhbGxTbG93UGF0aChf
bGxpbnRfc2xvd19wYXRoX3N3aXRjaF9pbW0pCkBAIC0xODU1LDggKzE4NTUsOCBAQCBlbmQpCiAK
IAogbGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRjaF9jaGFyLCBPcFN3aXRjaENoYXIsIG1hY3JvIChz
aXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgIGdldChzY3J1dGluZWUsIHQyKQotICAgIGdl
dCh0YWJsZUluZGV4LCB0MykKKyAgICBnZXQobV9zY3J1dGluZWUsIHQyKQorICAgIGdldChtX3Rh
YmxlSW5kZXgsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQxLCB0
MCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1f
cmFyZURhdGFbdDJdLCB0MgpAQCAtMTg4Myw3ICsxODgzLDcgQEAgbGxpbnRPcFdpdGhKdW1wKG9w
X3N3aXRjaF9jaGFyLCBPcFN3aXRjaAogICAgIGRpc3BhdGNoSW5kaXJlY3QodDEpCiAKIC5vcFN3
aXRjaENoYXJGYWxsVGhyb3VnaDoKLSAgICBqdW1wKGRlZmF1bHRPZmZzZXQpCisgICAganVtcCht
X2RlZmF1bHRPZmZzZXQpCiAKIC5vcFN3aXRjaE9uUm9wZToKICAgICBjYWxsU2xvd1BhdGgoX2xs
aW50X3Nsb3dfcGF0aF9zd2l0Y2hfY2hhcikKQEAgLTE4OTIsMTIgKzE4OTIsMTIgQEAgZW5kKQog
CiAKIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwob3AsIGdldHUpCi0gICAgZ2V0dShhcmd2LCB0
MykKKyAgICBnZXR1KG1fYXJndiwgdDMpCiAgICAgbmVnaSB0MwogICAgIGJpbmVxIFRoaXNBcmd1
bWVudE9mZnNldCArIFRhZ09mZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAgICBs
b2FkaSBUaGlzQXJndW1lbnRPZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0MAog
ICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVwIHQwLCAl
b3AlOjpNZXRhZGF0YTo6YXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAg
ICBzdG9yZXAgdDAsICVvcCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3Ry
dWN0dXJlSURbdDVdCiAuZG9uZToKIGVuZAogCkBAIC0xOTA1LDI2ICsxOTA1LDI2IEBAIG1hY3Jv
IGNvbW1vbkNhbGxPcChuYW1lLCBzbG93UGF0aCwgb3AsIHAKICAgICBsbGludE9wV2l0aE1ldGFk
YXRhKG5hbWUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIHByb2xvZ3VlKG1hY3JvIChm
aWVsZCwgZHN0KQotICAgICAgICAgICAgZ2V0dShzaXplLCBvcCwgZmllbGQsIGRzdCkKKyAgICAg
ICAgcHJvbG9ndWUobWFjcm8gKGZpZWxkTmFtZSwgZHN0KQorICAgICAgICAgICAgZ2V0dShzaXpl
LCBvcCwgZmllbGROYW1lLCBkc3QpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKLSAgICAgICAg
Z2V0KGNhbGxlZSwgdDApCi0gICAgICAgIGxvYWRwICVvcCU6Ok1ldGFkYXRhOjpjYWxsTGlua0lu
Zm8uY2FsbGVlW3Q1XSwgdDIKKyAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAgbG9h
ZHAgJW9wJTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLmNhbGxlZVt0NV0sIHQyCiAgICAgICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNpemUsIHQwLCBDZWxsVGFnLCB0MywgLm9w
Q2FsbFNsb3cpCiAgICAgICAgIGJpbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKLSAgICAgICAgZ2V0
dShzaXplLCBvcCwgYXJndiwgdDMpCisgICAgICAgIGdldHUoc2l6ZSwgb3AsIG1fYXJndiwgdDMp
CiAgICAgICAgIGxzaGlmdGkgMywgdDMKICAgICAgICAgbmVnaSB0MwogICAgICAgICBhZGRwIGNm
ciwgdDMgICMgdDMgY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiBjZnIKICAgICAgICAgc3RvcmVp
IHQyLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W3QzXQotICAgICAgICBnZXR1KHNpemUsIG9wLCBh
cmdjLCB0MikKKyAgICAgICAgZ2V0dShzaXplLCBvcCwgbV9hcmdjLCB0MikKICAgICAgICAgc3Rv
cmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KICAgICAgICAgc3RvcmVpIHQy
LCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAgICAgc3RvcmVpIENlbGxU
YWcsIENhbGxlZSArIFRhZ09mZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywgc3AKLSAgICAgICAg
cHJlcGFyZUNhbGwoJW9wJTo6TWV0YWRhdGE6OmNhbGxMaW5rSW5mby5tYWNoaW5lQ29kZVRhcmdl
dFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJnZXRGdW5j
dGlvbihzaXplLCBvcCwgZGlzcGF0Y2gsICVvcCU6Ok1ldGFkYXRhOjpjYWxsTGlua0luZm8ubWFj
aGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQorICAgICAgICBwcmVwYXJlQ2FsbCgl
b3AlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0Miwg
dDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQorICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oc2l6ZSwg
b3AsIGRpc3BhdGNoLCAlb3AlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubWFjaGluZUNvZGVU
YXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQogCiAgICAgLm9wQ2FsbFNsb3c6CiAgICAgICAgIHNs
b3dQYXRoRm9yQ2FsbChzaXplLCBvcCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkK
QEAgLTE5MzMsMTQgKzE5MzMsMTQgQEAgZW5kCiAKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3Vl
KCkKLSAgICBnZXQodmFsdWUsIHQyKQorICAgIGdldChtX3ZhbHVlLCB0MikKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MSwgdDApCiAgICAgZG9SZXR1cm4oKQogZW5kKQog
CiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX3RvX3ByaW1pdGl2ZSwgT3BUb1ByaW1pdGl2ZSwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQoc3JjLCB0MikKKyAgICBn
ZXQobV9zcmMsIHQyKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQxLCB0
MCkKICAgICBiaW5lcSB0MSwgQ2VsbFRhZywgLm9wVG9QcmltaXRpdmVJc0ltbQogICAgIGJiYWVx
IEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0VHlwZSwgLm9wVG9QcmltaXRpdmVTbG93Q2FzZQpA
QCAtMTk4NCwxMyArMTk4NCwxMyBAQCBjb21tb25PcChsbGludF9vcF9jYXRjaCwgbWFjcm8oKSBl
bmQsIG1hCiAKICAgICBsb2FkaSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAogICAgIHN0b3JlaSAw
LCBWTTo6bV9leGNlcHRpb25bdDNdCi0gICAgZ2V0KHNpemUsIE9wQ2F0Y2gsIGV4Y2VwdGlvbiwg
dDIpCisgICAgZ2V0KHNpemUsIE9wQ2F0Y2gsIG1fZXhjZXB0aW9uLCB0MikKICAgICBzdG9yZWkg
dDAsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MiwgOF0KICAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zm
c2V0W2NmciwgdDIsIDhdCiAKICAgICBsb2FkaSBFeGNlcHRpb246Om1fdmFsdWUgKyBUYWdPZmZz
ZXRbdDBdLCB0MQogICAgIGxvYWRpIEV4Y2VwdGlvbjo6bV92YWx1ZSArIFBheWxvYWRPZmZzZXRb
dDBdLCB0MAotICAgIGdldChzaXplLCBPcENhdGNoLCB0aHJvd25WYWx1ZSwgdDIpCisgICAgZ2V0
KHNpemUsIE9wQ2F0Y2gsIG1fdGhyb3duVmFsdWUsIHQyKQogICAgIHN0b3JlaSB0MCwgUGF5bG9h
ZE9mZnNldFtjZnIsIHQyLCA4XQogICAgIHN0b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhd
CiAKQEAgLTIwMDMsNyArMjAwMyw3IEBAIGVuZCkKIAogbGxpbnRPcChvcF9lbmQsIE9wRW5kLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9n
dWUoKQotICAgIGdldCh2YWx1ZSwgdDApCisgICAgZ2V0KG1fdmFsdWUsIHQwKQogICAgIGFzc2Vy
dE5vdENvbnN0YW50KHNpemUsIHQwKQogICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwg
dDEKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MApAQCAtMjE3MCwxMyAr
MjE3MCwxMyBAQCBlbmQKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcmVzb2x2ZV9zY29wZSwgT3BS
ZXNvbHZlU2NvcGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJu
KQogCiAgICAgbWFjcm8gZ2V0Q29uc3RhbnRTY29wZSgpCi0gICAgICAgIGxvYWRwIE9wUmVzb2x2
ZVNjb3BlOjpNZXRhZGF0YTo6Y29uc3RhbnRTY29wZVt0NV0sICB0MAorICAgICAgICBsb2FkcCBP
cFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om1fY29uc3RhbnRTY29wZVt0NV0sICB0MAogICAgICAg
ICByZXR1cm4oQ2VsbFRhZywgdDApCiAgICAgZW5kCiAKICAgICBtYWNybyByZXNvbHZlU2NvcGUo
KQotICAgICAgICBsb2FkaSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6OmxvY2FsU2NvcGVEZXB0
aFt0NV0sIHQyCi0gICAgICAgIGdldChzY29wZSwgdDApCisgICAgICAgIGxvYWRpIE9wUmVzb2x2
ZVNjb3BlOjpNZXRhZGF0YTo6bV9sb2NhbFNjb3BlRGVwdGhbdDVdLCB0MgorICAgICAgICBnZXQo
bV9zY29wZSwgdDApCiAgICAgICAgIGxvYWRwIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0sIHQw
CiAgICAgICAgIGJ0aXogdDIsIC5yZXNvbHZlU2NvcGVMb29wRW5kCiAKQEAgLTIxOTAsNyArMjE5
MCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcmVzb2x2ZV9zY29wZSwgT3AKICAgICBlbmQK
IAogICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBsb2FkcCBPcFJlc29sdmVTY29wZTo6TWV0YWRh
dGE6OnJlc29sdmVUeXBlW3Q1XSwgdDAKKyAgICBsb2FkcCBPcFJlc29sdmVTY29wZTo6TWV0YWRh
dGE6Om1fcmVzb2x2ZVR5cGVbdDVdLCB0MAogCiAjckdsb2JhbFByb3BlcnR5OgogICAgIGJpbmVx
IHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJHbG9iYWxWYXIKQEAgLTIyMzksMjMgKzIyMzksMjMgQEAg
ZW5kKQogCiAKIG1hY3JvIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2sob3AsIGdldCwgb3BlcmFuZCwg
c2xvd1BhdGgpCi0gICAgZ2V0KHNjb3BlLCB0MCkKKyAgICBnZXQobV9zY29wZSwgdDApCiAgICAg
bG9hZHAgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XSwgdDAKLSAgICBsb2FkcCAlb3AlOjpNZXRh
ZGF0YTo6c3RydWN0dXJlW3Q1XSwgdDEKKyAgICBsb2FkcCAlb3AlOjpNZXRhZGF0YTo6bV9zdHJ1
Y3R1cmVbdDVdLCB0MQogICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQxLCBz
bG93UGF0aAogZW5kCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwg
T3BHZXRGcm9tU2NvcGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQogICAgIG1hY3JvIGdldFByb3BlcnR5KCkKLSAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2Nv
cGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDMKKyAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2Nv
cGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MwogICAgICAgICBsb2FkUHJvcGVydHlBdFZh
cmlhYmxlT2Zmc2V0KHQzLCB0MCwgdDEsIHQyKQogICAgICAgICB2YWx1ZVByb2ZpbGUoT3BHZXRG
cm9tU2NvcGUsIHQ1LCB0MSwgdDIpCiAgICAgICAgIHJldHVybih0MSwgdDIpCiAgICAgZW5kCiAK
ICAgICBtYWNybyBnZXRHbG9iYWxWYXIodGR6Q2hlY2tJZk5lY2Vzc2FyeSkKLSAgICAgICAgbG9h
ZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDAKKyAgICAgICAgbG9h
ZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MAogICAgICAgICBs
b2FkcCBUYWdPZmZzZXRbdDBdLCB0MQogICAgICAgICBsb2FkcCBQYXlsb2FkT2Zmc2V0W3QwXSwg
dDIKICAgICAgICAgdGR6Q2hlY2tJZk5lY2Vzc2FyeSh0MSkKQEAgLTIyNjQsNyArMjI2NCw3IEBA
IGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2Zyb21fc2NvcGUsIE8KICAgICBlbmQKIAogICAg
IG1hY3JvIGdldENsb3N1cmVWYXIoKQotICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0
YWRhdGE6Om9wZXJhbmRbdDVdLCB0MworICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0
YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQzCiAgICAgICAgIGxvYWRwIEpTTGV4aWNhbEVudmlyb25t
ZW50X3ZhcmlhYmxlcyArIFRhZ09mZnNldFt0MCwgdDMsIDhdLCB0MQogICAgICAgICBsb2FkcCBK
U0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXMgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MywgOF0s
IHQyCiAgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgdDUsIHQxLCB0MikKQEAg
LTIyNzIsNyArMjI3Miw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2Zyb21fc2NvcGUs
IE8KICAgICBlbmQKIAogICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBsb2FkaSBPcEdldEZyb21T
Y29wZTo6TWV0YWRhdGE6OmdldFB1dEluZm9bdDVdLCB0MAorICAgIGxvYWRpIE9wR2V0RnJvbVNj
b3BlOjpNZXRhZGF0YTo6bV9nZXRQdXRJbmZvW3Q1XSwgdDAKICAgICBhbmRpIFJlc29sdmVUeXBl
TWFzaywgdDAKIAogI2dHbG9iYWxQcm9wZXJ0eToKQEAgLTIyOTMsNyArMjI5Myw3IEBAIGxsaW50
T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2Zyb21fc2NvcGUsIE8KIAogLmdDbG9zdXJlVmFyOgogICAg
IGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAuZ0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcwotICAgIGxvYWRWYXJpYWJsZShnZXQsIHNjb3BlLCB0MiwgdDEsIHQwKQorICAgIGxvYWRW
YXJpYWJsZShnZXQsIG1fc2NvcGUsIHQyLCB0MSwgdDApCiAgICAgZ2V0Q2xvc3VyZVZhcigpCiAK
IC5nR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgpAQCAtMjMxNyw3ICsyMzE3
LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogLmdDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIC5nRHluYW1pYwogICAgIHZhckluamVjdGlvbkNoZWNrKC5nRHlu
YW1pYykKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAgICBsb2Fk
VmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MiwgdDEsIHQwKQogICAgIGdldENsb3N1cmVWYXIoKQog
CiAuZ0R5bmFtaWM6CkBAIC0yMzI4LDEwNyArMjMyOCwxMDcgQEAgZW5kKQogCiBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX3B1dF90b19zY29wZSwgT3BQdXRUb1Njb3BlLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBtYWNybyBwdXRQcm9wZXJ0eSgpCi0g
ICAgICAgIGdldCh2YWx1ZSwgdDEpCisgICAgICAgIGdldChtX3ZhbHVlLCB0MSkKICAgICAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIsIHQzKQotICAgICAgICBsb2FkaXMg
T3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b3BlcmFuZFt0NV0sIHQxCisgICAgICAgIGxvYWRpcyBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQogICAgICAgICBzdG9yZVBy
b3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0MykKICAgICBlbmQKIAogICAgIG1h
Y3JvIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICAgICAgZ2V0KHZhbHVlLCB0MCkKKyAgICAgICAg
Z2V0KG1fdmFsdWUsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQw
LCB0MSwgdDIpCi0gICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6OndhdGNocG9p
bnRTZXRbdDVdLCB0MworICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX3dh
dGNocG9pbnRTZXRbdDVdLCB0MwogICAgICAgICBub3RpZnlXcml0ZSh0MywgLnBEeW5hbWljKQot
ICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDAKKyAg
ICAgICAgbG9hZHAgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6bV9vcGVyYW5kW3Q1XSwgdDAKICAg
ICAgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbdDBdCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9h
ZE9mZnNldFt0MF0KICAgICBlbmQKIAogICAgIG1hY3JvIHB1dENsb3N1cmVWYXIoKQotICAgICAg
ICBnZXQodmFsdWUsIHQxKQorICAgICAgICBnZXQobV92YWx1ZSwgdDEpCiAgICAgICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyLCB0MykKLSAgICAgICAgbG9hZGlzIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om9wZXJhbmRbdDVdLCB0MQorICAgICAgICBsb2FkaXMgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6bV9vcGVyYW5kW3Q1XSwgdDEKICAgICAgICAgc3RvcmVpIHQyLCBK
U0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXMgKyBUYWdPZmZzZXRbdDAsIHQxLCA4XQogICAg
ICAgICBzdG9yZWkgdDMsIEpTTGV4aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlcyArIFBheWxvYWRP
ZmZzZXRbdDAsIHQxLCA4XQogICAgIGVuZAogCiAgICAgbWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFy
KCkKLSAgICAgICAgZ2V0KHZhbHVlLCB0MSkKKyAgICAgICAgZ2V0KG1fdmFsdWUsIHQxKQogICAg
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MiwgdDMpCi0gICAgICAgIGxv
YWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6OndhdGNocG9pbnRTZXRbdDVdLCB0MQorICAgICAg
ICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX3dhdGNocG9pbnRTZXRbdDVdLCB0MQog
ICAgICAgICBidHB6IHQxLCAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQKICAgICAgICAgbm90aWZ5
V3JpdGUodDEsIC5wRHluYW1pYykKICAgICAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6Ci0gICAg
ICAgIGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAgICAg
ICAgbG9hZGlzIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQxCiAgICAg
ICAgIHN0b3JlaSB0MiwgSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzICsgVGFnT2Zmc2V0
W3QwLCB0MSwgOF0KICAgICAgICAgc3RvcmVpIHQzLCBKU0xleGljYWxFbnZpcm9ubWVudF92YXJp
YWJsZXMgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0KICAgICBlbmQKIAogCiAgICAgbWV0YWRh
dGEodDUsIHQwKQotICAgIGxvYWRpIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6OmdldFB1dEluZm9b
dDVdLCB0MAorICAgIGxvYWRpIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om1fZ2V0UHV0SW5mb1t0
NV0sIHQwCiAgICAgYW5kaSBSZXNvbHZlVHlwZU1hc2ssIHQwCiAKICNwTG9jYWxDbG9zdXJlVmFy
OgogICAgIGJpbmVxIHQwLCBMb2NhbENsb3N1cmVWYXIsIC5wR2xvYmFsUHJvcGVydHkKLSAgICBs
b2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0
LCBtX3Njb3BlLCB0MiwgdDEsIHQwKQogICAgIHB1dExvY2FsQ2xvc3VyZVZhcigpCi0gICAgd3Jp
dGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIHNjb3BlLCB2YWx1ZSkKKyAgICB3cml0ZUJh
cnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9zY29wZSwgbV92YWx1ZSkKICAgICBkaXNwYXRj
aCgpCiAKIC5wR2xvYmFsUHJvcGVydHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAu
cEdsb2JhbFZhcgogICAgIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soT3BQdXRUb1Njb3BlLCBnZXQs
IHNjb3BlLCAucER5bmFtaWMpCiAgICAgcHV0UHJvcGVydHkoKQotICAgIHdyaXRlQmFycmllck9u
T3BlcmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVy
YW5kcyhzaXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEds
b2JhbFZhcjoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFyLCAucEdsb2JhbExleGljYWxWYXIKICAg
ICBwdXRHbG9iYWxWYXJpYWJsZSgpCi0gICAgd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qoc2l6
ZSwgZ2V0LCB2YWx1ZSkKKyAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBnZXQs
IG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEdsb2JhbExleGljYWxWYXI6CiAgICAgYmlu
ZXEgdDAsIEdsb2JhbExleGljYWxWYXIsIC5wQ2xvc3VyZVZhcgogICAgIHB1dEdsb2JhbFZhcmlh
YmxlKCkKLSAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9ubWVudChzaXplLCBn
ZXQsIHZhbHVlKQorICAgIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KHNp
emUsIGdldCwgbV92YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wQ2xvc3VyZVZhcjoKICAgICBi
aW5lcSB0MCwgQ2xvc3VyZVZhciwgLnBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAgICBsb2FkVmFy
aWFibGUoZ2V0LCBtX3Njb3BlLCB0MiwgdDEsIHQwKQogICAgIHB1dENsb3N1cmVWYXIoKQotICAg
IHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3Jp
dGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlz
cGF0Y2goKQogCiAucEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBi
aW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKE9wUHV0
VG9TY29wZSwgZ2V0LCBzY29wZSwgLnBEeW5hbWljKQogICAgIHB1dFByb3BlcnR5KCkKLSAgICB3
cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgc2NvcGUsIHZhbHVlKQorICAgIHdyaXRl
QmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX3Njb3BlLCBtX3ZhbHVlKQogICAgIGRpc3Bh
dGNoKCkKIAogLnBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQw
LCBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnBEeW5hbWljKQogICAg
IHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChzaXpl
LCBnZXQsIHZhbHVlKQorICAgIHdyaXRlQmFycmllck9uR2xvYmFsT2JqZWN0KHNpemUsIGdldCwg
bV92YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzLCAucENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5q
ZWN0aW9uQ2hlY2soLnBEeW5hbWljKQogICAgIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3cml0
ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9ubWVudChzaXplLCBnZXQsIHZhbHVlKQorICAg
IHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KHNpemUsIGdldCwgbV92YWx1
ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucE1vZHVs
ZVZhcgogICAgIHZhckluamVjdGlvbkNoZWNrKC5wRHluYW1pYykKLSAgICBsb2FkVmFyaWFibGUo
Z2V0LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0
MiwgdDEsIHQwKQogICAgIHB1dENsb3N1cmVWYXIoKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFu
ZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhz
aXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucE1vZHVsZVZh
cjoKQEAgLTI0NDMsOSArMjQ0Myw5IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFByb2ZpbGUob3Bf
Z2V0X2Zyb21fYXJndW1lbnRzLCBPcEdldEZyb21Bcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KGFyZ3VtZW50cywgdDApCisgICAgZ2V0KG1fYXJn
dW1lbnRzLCB0MCkKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MAotICAg
IGdldChpbmRleCwgdDEpCisgICAgZ2V0KG1faW5kZXgsIHQxKQogICAgIGxvYWRpIERpcmVjdEFy
Z3VtZW50c19zdG9yYWdlICsgVGFnT2Zmc2V0W3QwLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgRGly
ZWN0QXJndW1lbnRzX3N0b3JhZ2UgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0sIHQzCiAgICAg
cmV0dXJuKHQyLCB0MykKQEAgLTI0NTMsMTIgKzI0NTMsMTIgQEAgZW5kKQogCiAKIGxsaW50T3Ao
b3BfcHV0X3RvX2FyZ3VtZW50cywgT3BQdXRUb0FyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gpCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIGFyZ3VtZW50
cywgdmFsdWUpCi0gICAgZ2V0KGFyZ3VtZW50cywgdDApCisgICAgd3JpdGVCYXJyaWVyT25PcGVy
YW5kcyhzaXplLCBnZXQsIG1fYXJndW1lbnRzLCBtX3ZhbHVlKQorICAgIGdldChtX2FyZ3VtZW50
cywgdDApCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XSwgdDAKLSAgICBnZXQo
dmFsdWUsIHQxKQorICAgIGdldChtX3ZhbHVlLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQxLCB0MiwgdDMpCi0gICAgZ2V0KGluZGV4LCB0MSkKKyAgICBnZXQobV9pbmRl
eCwgdDEpCiAgICAgc3RvcmVpIHQyLCBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSArIFRhZ09mZnNl
dFt0MCwgdDEsIDhdCiAgICAgc3RvcmVpIHQzLCBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSArIFBh
eWxvYWRPZmZzZXRbdDAsIHQxLCA4XQogICAgIGRpc3BhdGNoKCkKQEAgLTI0NjYsNyArMjQ2Niw3
IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9nZXRfcGFyZW50X3Njb3BlLCBPcEdl
dFBhcmVudFNjb3BlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdl
dChzY29wZSwgdDApCisgICAgZ2V0KG1fc2NvcGUsIHQwKQogICAgIGxvYWRwIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MCwgOF0sIHQwCiAgICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3QwXSwgdDAKICAg
ICByZXR1cm4oQ2VsbFRhZywgdDApCkBAIC0yNDgxLDcgKzI0ODEsNyBAQCBsbGludE9wV2l0aE1l
dGFkYXRhKG9wX3Byb2ZpbGVfdHlwZSwgT3BQCiAgICAgbG9hZHAgVk06Om1fdHlwZVByb2ZpbGVy
TG9nW3QxXSwgdDEKIAogICAgICMgdDAgaXMgaG9sZGluZyB0aGUgcGF5bG9hZCwgdDUgaXMgaG9s
ZGluZyB0aGUgdGFnLgotICAgIGdldCh0YXJnZXQsIHQyKQorICAgIGdldChtX3RhcmdldCwgdDIp
CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDUsIHQwKQogCiAgICAgYmll
cSB0NSwgRW1wdHlWYWx1ZVRhZywgLm9wUHJvZmlsZVR5cGVEb25lCkBAIC0yNDk1LDcgKzI0OTUs
NyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3Byb2ZpbGVfdHlwZSwgT3BQCiAgICAgc3RvcmVp
IHQwLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZSArIFBheWxvYWRPZmZzZXRbdDJd
CiAKICAgICAjIFN0b3JlIHRoZSBUeXBlTG9jYXRpb24gb250byB0aGUgbG9nIGVudHJ5LgotICAg
IGxvYWRwIE9wUHJvZmlsZVR5cGU6Ok1ldGFkYXRhOjp0eXBlTG9jYXRpb25bdDNdLCB0MworICAg
IGxvYWRwIE9wUHJvZmlsZVR5cGU6Ok1ldGFkYXRhOjptX3R5cGVMb2NhdGlvblt0M10sIHQzCiAg
ICAgc3RvcmVwIHQzLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvblt0Ml0KIAog
ICAgIGJpZXEgdDUsIENlbGxUYWcsIC5vcFByb2ZpbGVUeXBlSXNDZWxsCkBAIC0yNTIxLDcgKzI1
MjEsNyBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHJvZmlsZV9jb250cm9sX2Zs
b3csIE9wUHJvZmlsZUNvbnRyb2xGbG93LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKICAgICBtZXRhZGF0YSh0NSwgdDApCi0gICAgbG9hZHAgT3BQcm9maWxl
Q29udHJvbEZsb3c6Ok1ldGFkYXRhOjpiYXNpY0Jsb2NrTG9jYXRpb25bdDVdLCB0MAorICAgIGxv
YWRwIE9wUHJvZmlsZUNvbnRyb2xGbG93OjpNZXRhZGF0YTo6bV9iYXNpY0Jsb2NrTG9jYXRpb25b
dDVdLCB0MAogICAgIGxvYWRpIEJhc2ljQmxvY2tMb2NhdGlvbjo6bV9leGVjdXRpb25Db3VudFt0
MF0sIHQxCiAgICAgYmFkZGlvIDEsIHQxLCAuZG9uZQogICAgIHN0b3JlaSB0MSwgQmFzaWNCbG9j
a0xvY2F0aW9uOjptX2V4ZWN1dGlvbkNvdW50W3QwXQpAQCAtMjUzMyw3ICsyNTMzLDcgQEAgZW5k
KQogbGxpbnRPcFdpdGhSZXR1cm4ob3BfZ2V0X3Jlc3RfbGVuZ3RoLCBPcEdldFJlc3RMZW5ndGgs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCiAgICAgbG9hZGkgUGF5bG9hZE9m
ZnNldCArIEFyZ3VtZW50Q291bnRbY2ZyXSwgdDAKICAgICBzdWJpIDEsIHQwCi0gICAgZ2V0KG51
bVBhcmFtZXRlcnNUb1NraXAsIHQxKQorICAgIGdldChtX251bVBhcmFtZXRlcnNUb1NraXAsIHQx
KQogICAgIGJpbHRlcSB0MCwgdDEsIC5zdG9yZVplcm8KICAgICBzdWJpIHQxLCB0MAogICAgIGpt
cCAuZmluaXNoCkBAIC0yNTUxLDcgKzI1NTEsNyBAQCBsbGludE9wKG9wX2xvZ19zaGFkb3dfY2hp
Y2tlbl9wcm9sb2d1ZSwgCiAgICAgc3RvcmVwIHQxLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OmNh
bGxlckZyYW1lW3QwXQogICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDEK
ICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6Y2FsbGVlW3QwXQotICAgIGdl
dChzY29wZSwgdDEpCisgICAgZ2V0KG1fc2NvcGUsIHQxKQogICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MSwgOF0sIHQxCiAgICAgc3RvcmVwIHQxLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6
OnNjb3BlW3QwXQogICAgIGRpc3BhdGNoKCkKQEAgLTI1NjUsMTAgKzI1NjUsMTAgQEAgbGxpbnRP
cChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCwgT3BMbwogICAgIGFjcXVpcmVTaGFkb3dDaGlj
a2VuUGFja2V0KC5vcExvZ1NoYWRvd0NoaWNrZW5UYWlsU2xvdykKICAgICBzdG9yZXAgY2ZyLCBT
aGFkb3dDaGlja2VuOjpQYWNrZXQ6OmZyYW1lW3QwXQogICAgIHN0b3JlcCBTaGFkb3dDaGlja2Vu
VGFpbE1hcmtlciwgU2hhZG93Q2hpY2tlbjo6UGFja2V0OjpjYWxsZWVbdDBdCi0gICAgbG9hZFZh
cmlhYmxlKGdldCwgdGhpc1ZhbHVlLCB0MywgdDIsIHQxKQorICAgIGxvYWRWYXJpYWJsZShnZXQs
IG1fdGhpc1ZhbHVlLCB0MywgdDIsIHQxKQogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0ICsgU2hh
ZG93Q2hpY2tlbjo6UGFja2V0Ojp0aGlzVmFsdWVbdDBdCiAgICAgc3RvcmVpIHQxLCBQYXlsb2Fk
T2Zmc2V0ICsgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aGlzVmFsdWVbdDBdCi0gICAgZ2V0KHNj
b3BlLCB0MSkKKyAgICBnZXQobV9zY29wZSwgdDEpCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldFtj
ZnIsIHQxLCA4XSwgdDEKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6c2Nv
cGVbdDBdCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2
aXNpb24gMjM5OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw0IEBACi0KLSMgQ29weXJp
Z2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDI2ICszNiwyNiBAQCBtYWNybyBuZXh0SW5z
dHJ1Y3Rpb25XaWRlKCkKICAgICBqbXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFn
CiBlbmQKIAotbWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3AsIGZpZWxkLCBkc3QpCi0gICAgbG9h
ZGIgY29uc3RleHByICVvcCVfJWZpZWxkJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKK21hY3JvIGdl
dHVPcGVyYW5kTmFycm93KG9wLCBmaWVsZE5hbWUsIGRzdCkKKyAgICBsb2FkYiBjb25zdGV4cHIg
JW9wJV8lZmllbGROYW1lJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKIGVuZAogCi1tYWNybyBnZXRP
cGVyYW5kTmFycm93KG9wLCBmaWVsZCwgZHN0KQotICAgIGxvYWRic3AgY29uc3RleHByICVvcCVf
JWZpZWxkJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKK21hY3JvIGdldE9wZXJhbmROYXJyb3cob3As
IGZpZWxkTmFtZSwgZHN0KQorICAgIGxvYWRic3AgY29uc3RleHByICVvcCVfJWZpZWxkTmFtZSVf
aW5kZXhbUEIsIFBDLCAxXSwgZHN0CiBlbmQKIAotbWFjcm8gZ2V0dU9wZXJhbmRXaWRlKG9wLCBm
aWVsZCwgZHN0KQotICAgIGxvYWRpIGNvbnN0ZXhwciAlb3AlXyVmaWVsZCVfaW5kZXggKiA0ICsg
MVtQQiwgUEMsIDFdLCBkc3QKK21hY3JvIGdldHVPcGVyYW5kV2lkZShvcCwgZmllbGROYW1lLCBk
c3QpCisgICAgbG9hZGkgY29uc3RleHByICVvcCVfJWZpZWxkTmFtZSVfaW5kZXggKiA0ICsgMVtQ
QiwgUEMsIDFdLCBkc3QKIGVuZAogCi1tYWNybyBnZXRPcGVyYW5kV2lkZShvcCwgZmllbGQsIGRz
dCkKLSAgICBsb2FkaXMgY29uc3RleHByICVvcCVfJWZpZWxkJV9pbmRleCAqIDQgKyAxW1BCLCBQ
QywgMV0sIGRzdAorbWFjcm8gZ2V0T3BlcmFuZFdpZGUob3AsIGZpZWxkTmFtZSwgZHN0KQorICAg
IGxvYWRpcyBjb25zdGV4cHIgJW9wJV8lZmllbGROYW1lJV9pbmRleCAqIDQgKyAxW1BCLCBQQywg
MV0sIGRzdAogZW5kCiAKIG1hY3JvIG1ha2VSZXR1cm4oZ2V0LCBkaXNwYXRjaCwgZm4pCiAgICAg
Zm4obWFjcm8gKHZhbHVlKQogICAgICAgICBtb3ZlIHZhbHVlLCB0MgotICAgICAgICBnZXQoZHN0
LCB0MSkKKyAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgc3RvcmVxIHQyLCBbY2ZyLCB0
MSwgOF0KICAgICAgICAgZGlzcGF0Y2goKQogICAgIGVuZCkKQEAgLTY3LDE0ICs2NiwxNCBAQCBt
YWNybyBtYWtlUmV0dXJuUHJvZmlsZWQob3AsIGdldCwgbWV0YWRhCiAgICAgICAgIG1vdmUgdmFs
dWUsIHQzCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgdmFsdWVQcm9maWxlKG9w
LCB0MSwgdDMpCi0gICAgICAgIGdldChkc3QsIHQxKQorICAgICAgICBnZXQobV9kc3QsIHQxKQog
ICAgICAgICBzdG9yZXEgdDMsIFtjZnIsIHQxLCA4XQogICAgICAgICBkaXNwYXRjaCgpCiAgICAg
ZW5kKQogZW5kCiAKIG1hY3JvIHZhbHVlUHJvZmlsZShvcCwgbWV0YWRhdGEsIHZhbHVlKQotICAg
IHN0b3JlcSB2YWx1ZSwgJW9wJTo6TWV0YWRhdGE6OnByb2ZpbGUubV9idWNrZXRzW21ldGFkYXRh
XQorICAgIHN0b3JlcSB2YWx1ZSwgJW9wJTo6TWV0YWRhdGE6Om1fcHJvZmlsZS5tX2J1Y2tldHNb
bWV0YWRhdGFdCiBlbmQKIAogbWFjcm8gZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3AsIGRpc3Bh
dGNoKQpAQCAtODIsNyArODEsNyBAQCBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChzaXplLCBvcCwg
ZGlzcGF0CiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgogICAgIHVucG9pc29uKF9nX0NvZGVC
bG9ja1BvaXNvbiwgUEIsIHQxKQotICAgIGdldChzaXplLCBvcCwgZHN0LCB0MSkKKyAgICBnZXQo
c2l6ZSwgb3AsIG1fZHN0LCB0MSkKICAgICBzdG9yZXEgcjAsIFtjZnIsIHQxLCA4XQogICAgIG1l
dGFkYXRhKHNpemUsIG9wLCB0MiwgdDEpCiAgICAgdmFsdWVQcm9maWxlKG9wLCB0MiwgcjApCkBA
IC00MjUsOSArNDI0LDkgQEAgbWFjcm8gbG9hZENhZ2VkKGJhc2VQdHIsIG1hc2ssIHNvdXJjZSwg
ZAogICAgIHVuY2FnZShiYXNlUHRyLCBtYXNrLCBkZXN0LCBzY3JhdGNoKQogZW5kCiAKLW1hY3Jv
IGxvYWRWYXJpYWJsZShnZXQsIGZpZWxkLCB2YWx1ZSkKLSAgICBnZXQoZmllbGQsIHZhbHVlKQot
ICAgIGxvYWRxIFtjZnIsIHZhbHVlLCA4XSwgdmFsdWUKK21hY3JvIGxvYWRWYXJpYWJsZShnZXQs
IGZpZWxkTmFtZSwgdmFsdWVSZWcpCisgICAgZ2V0KGZpZWxkTmFtZSwgdmFsdWVSZWcpCisgICAg
bG9hZHEgW2NmciwgdmFsdWVSZWcsIDhdLCB2YWx1ZVJlZwogZW5kCiAKICMgSW5kZXggYW5kIHZh
bHVlIG11c3QgYmUgZGlmZmVyZW50IHJlZ2lzdGVycy4gSW5kZXggbWF5IGJlIGNsb2JiZXJlZC4K
QEAgLTQ2OCw4ICs0NjcsOCBAQCBtYWNybyBsb2FkQ29uc3RhbnRPclZhcmlhYmxlQ2VsbChzaXpl
LCBpCiAgICAgYnRxbnogdmFsdWUsIHRhZ01hc2ssIHNsb3cKIGVuZAogCi1tYWNybyB3cml0ZUJh
cnJpZXJPbk9wZXJhbmRXaXRoUmVsb2FkKHNpemUsIGdldCwgY2VsbE9wZXJhbmQsIHJlbG9hZEFm
dGVyU2xvd1BhdGgpCi0gICAgZ2V0KGNlbGxPcGVyYW5kLCB0MSkKK21hY3JvIHdyaXRlQmFycmll
ck9uT3BlcmFuZFdpdGhSZWxvYWQoc2l6ZSwgZ2V0LCBjZWxsRmllbGROYW1lLCByZWxvYWRBZnRl
clNsb3dQYXRoKQorICAgIGdldChjZWxsRmllbGROYW1lLCB0MSkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlQ2VsbChzaXplLCB0MSwgdDIsIC53cml0ZUJhcnJpZXJEb25lKQogICAgIHNraXBJ
ZklzUmVtZW1iZXJlZE9ySW5FZGVuKAogICAgICAgICB0MiwKQEAgLTQ4NCwyNSArNDgzLDI1IEBA
IG1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZFdpdGhSZWxvYWQoc2kKIC53cml0ZUJhcnJpZXJE
b25lOgogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZChzaXplLCBnZXQsIGNlbGxP
cGVyYW5kKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFuZFdpdGhSZWxvYWQoc2l6ZSwgZ2V0LCBj
ZWxsT3BlcmFuZCwgbWFjcm8gKCkgZW5kKQorbWFjcm8gd3JpdGVCYXJyaWVyT25PcGVyYW5kKHNp
emUsIGdldCwgY2VsbEZpZWxkTmFtZSkKKyAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRXaXRoUmVs
b2FkKHNpemUsIGdldCwgY2VsbEZpZWxkTmFtZSwgbWFjcm8gKCkgZW5kKQogZW5kCiAKLW1hY3Jv
IHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBjZWxsT3BlcmFuZCwgdmFsdWVPcGVy
YW5kKQotICAgIGdldCh2YWx1ZU9wZXJhbmQsIHQxKQorbWFjcm8gd3JpdGVCYXJyaWVyT25PcGVy
YW5kcyhzaXplLCBnZXQsIGNlbGxGaWVsZE5hbWUsIHZhbHVlRmllbGROYW1lKQorICAgIGdldCh2
YWx1ZUZpZWxkTmFtZSwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwg
dDEsIHQwLCAud3JpdGVCYXJyaWVyRG9uZSkKICAgICBidHB6IHQwLCAud3JpdGVCYXJyaWVyRG9u
ZQogCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kKHNpemUsIGdldCwgY2VsbE9wZXJhbmQpCisg
ICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kKHNpemUsIGdldCwgY2VsbEZpZWxkTmFtZSkKIC53cml0
ZUJhcnJpZXJEb25lOgogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdl
dCwgdmFsdWVPcGVyYW5kLCBsb2FkSGVscGVyKQotICAgIGdldCh2YWx1ZU9wZXJhbmQsIHQxKQor
bWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSwgbG9h
ZE1hY3JvKQorICAgIGdldCh2YWx1ZUZpZWxkTmFtZSwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZUNlbGwoc2l6ZSwgdDEsIHQwLCAud3JpdGVCYXJyaWVyRG9uZSkKICAgICBidHB6IHQw
LCAud3JpdGVCYXJyaWVyRG9uZQogCi0gICAgbG9hZEhlbHBlcih0MykKKyAgICBsb2FkTWFjcm8o
dDMpCiAgICAgc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oCiAgICAgICAgIHQzLAogICAgICAg
ICBtYWNybygpCkBAIC01MTUsMTYgKzUxNCwxNiBAQCBtYWNybyB3cml0ZUJhcnJpZXJPbkdsb2Jh
bChzaXplLCBnZXQsIHZhCiAud3JpdGVCYXJyaWVyRG9uZToKIGVuZAogCi1tYWNybyB3cml0ZUJh
cnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBnZXQsIHZhbHVlT3BlcmFuZCkKLSAgICB3cml0ZUJh
cnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZhbHVlT3BlcmFuZCwKK21hY3JvIHdyaXRlQmFycmll
ck9uR2xvYmFsT2JqZWN0KHNpemUsIGdldCwgdmFsdWVGaWVsZE5hbWUpCisgICAgd3JpdGVCYXJy
aWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSwKICAgICAgICAgbWFjcm8ocmVn
aXN0ZXJUb1N0b3JlR2xvYmFsKQogICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHJl
Z2lzdGVyVG9TdG9yZUdsb2JhbAogICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2Jh
bE9iamVjdFtyZWdpc3RlclRvU3RvcmVHbG9iYWxdLCByZWdpc3RlclRvU3RvcmVHbG9iYWwKICAg
ICAgICAgZW5kKQogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmly
b25tZW50KHNpemUsIGdldCwgdmFsdWVPcGVyYW5kKQotICAgIHdyaXRlQmFycmllck9uR2xvYmFs
KHNpemUsIGdldCwgdmFsdWVPcGVyYW5kLAorbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoc2l6ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSkKKyAgICB3cml0ZUJhcnJp
ZXJPbkdsb2JhbChzaXplLCBnZXQsIHZhbHVlRmllbGROYW1lLAogICAgICAgICBtYWNybyhyZWdp
c3RlclRvU3RvcmVHbG9iYWwpCiAgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgcmVn
aXN0ZXJUb1N0b3JlR2xvYmFsCiAgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFs
T2JqZWN0W3JlZ2lzdGVyVG9TdG9yZUdsb2JhbF0sIHJlZ2lzdGVyVG9TdG9yZUdsb2JhbApAQCAt
NjY3LDcgKzY2Niw3IEBAIF9sbGludF9vcF9lbnRlcjoKIAogCiBsbGludE9wV2l0aFByb2ZpbGUo
b3BfZ2V0X2FyZ3VtZW50LCBPcEdldEFyZ3VtZW50LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgcmV0dXJuKQotICAgIGdldChpbmRleCwgdDIpCisgICAgZ2V0KG1faW5kZXgsIHQyKQogICAg
IGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50W2Nmcl0sIHQwCiAgICAgYmlsdGVx
IHQwLCB0MiwgLm9wR2V0QXJndW1lbnRPdXRPZkJvdW5kcwogICAgIGxvYWRxIFRoaXNBcmd1bWVu
dE9mZnNldFtjZnIsIHQyLCA4XSwgdDAKQEAgLTY5NCwxMyArNjkzLDEzIEBAIGVuZCkKIAogCiBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX3RvX3RoaXMsIE9wVG9UaGlzLCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICBnZXQoc3JjRHN0LCB0MCkKKyAgICBn
ZXQobV9zcmNEc3QsIHQwKQogICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDAKICAgICBidHFueiB0
MCwgdGFnTWFzaywgLm9wVG9UaGlzU2xvdwogICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwg
RmluYWxPYmplY3RUeXBlLCAub3BUb1RoaXNTbG93CiAgICAgbG9hZFN0cnVjdHVyZVdpdGhTY3Jh
dGNoKHQwLCB0MSwgdDIsIHQzKQogICAgIG1ldGFkYXRhKHQyLCB0MykKLSAgICBsb2FkcCBPcFRv
VGhpczo6TWV0YWRhdGE6OmNhY2hlZFN0cnVjdHVyZVt0Ml0sIHQyCisgICAgbG9hZHAgT3BUb1Ro
aXM6Ok1ldGFkYXRhOjptX2NhY2hlZFN0cnVjdHVyZVt0Ml0sIHQyCiAgICAgYnBuZXEgdDEsIHQy
LCAub3BUb1RoaXNTbG93CiAgICAgZGlzcGF0Y2goKQogCkBAIC03MTEsNyArNzEwLDcgQEAgZW5k
KQogCiAKIGxsaW50T3Aob3BfY2hlY2tfdGR6LCBPcENoZWNrVGR6LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCkKLSAgICBnZXQodGFyZ2V0LCB0MCkKKyAgICBnZXQobV90YXJnZXQsIHQwKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQogICAgIGJxbmVxIHQxLCBW
YWx1ZUVtcHR5LCAub3BOb3RURFoKICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90aHJvd190
ZHpfZXJyb3IpCkBAIC03MjIsMTQgKzcyMSwxNCBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1
cm4ob3BfbW92LCBPcE1vdiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAg
ICBnZXQoc3JjLCB0MSkKKyAgICBnZXQobV9zcmMsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUoc2l6ZSwgdDEsIHQyKQogICAgIHJldHVybih0MikKIGVuZCkKIAogCiBsbGludE9wV2l0
aFJldHVybihvcF9ub3QsIE9wTm90LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJu
KQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MikKICAgICB4b3JxIFZhbHVlRmFsc2UsIHQy
CiAgICAgYnRxbnogdDIsIH4xLCAub3BOb3RTbG93CkBAIC03NDQsOCArNzQzLDggQEAgZW5kKQog
CiBtYWNybyBlcXVhbGl0eUNvbXBhcmlzb25PcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmlzb24p
CiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwg
ZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KHJocywgdDApCi0gICAgICAgIGdldChsaHMs
IHQyKQorICAgICAgICBnZXQobV9yaHMsIHQwKQorICAgICAgICBnZXQobV9saHMsIHQyKQogICAg
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6ZSwgdDAsIHQxLCAuc2xvdykKICAg
ICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQyLCB0MCwgLnNsb3cpCiAg
ICAgICAgIGludGVnZXJDb21wYXJpc29uKHQwLCB0MSwgdDApCkBAIC03NjEsNyArNzYwLDcgQEAg
ZW5kCiAKIG1hY3JvIGVxdWFsTnVsbENvbXBhcmlzb25PcChuYW1lLCBvcCwgZm4pCiAgICAgbGxp
bnRPcFdpdGhSZXR1cm4obmFtZSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1
cm4pCi0gICAgICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICAgICAgZ2V0KG1fb3BlcmFuZCwgdDAp
CiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDAKICAgICAgICAgYnRxbnogdDAsIHRhZ01h
c2ssIC5pbW1lZGlhdGUKICAgICAgICAgYnRibnogSlNDZWxsOjptX2ZsYWdzW3QwXSwgTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQKQEAgLTc5MSw3ICs3OTAs
NyBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251bGwsIE9wTmVxCiAKIAogbGxpbnRP
cFdpdGhSZXR1cm4ob3BfaXNfdW5kZWZpbmVkX29yX251bGwsIE9wSXNVbmRlZmluZWRPck51bGws
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQw
KQorICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDAKICAg
ICBhbmRxIH5UYWdCaXRVbmRlZmluZWQsIHQwCiAgICAgY3FlcSB0MCwgVmFsdWVOdWxsLCB0MApA
QCAtODAyLDggKzgwMSw4IEBAIGVuZCkKIAogbWFjcm8gc3RyaWN0RXFPcChuYW1lLCBvcCwgZXF1
YWxpdHlPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KHJocywgdDApCi0g
ICAgICAgIGdldChsaHMsIHQyKQorICAgICAgICBnZXQobV9yaHMsIHQwKQorICAgICAgICBnZXQo
bV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkK
ICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDApCiAgICAgICAgIG1v
dmUgdDAsIHQyCkBAIC04MzYsOCArODM1LDggQEAgc3RyaWN0RXFPcChuc3RyaWN0ZXEsIE9wTnN0
cmljdGVxLAogCiBtYWNybyBzdHJpY3RFcXVhbGl0eUp1bXBPcChuYW1lLCBvcCwgZXF1YWxpdHlP
cGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXpl
LCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQobGhzLCB0MikKLSAgICAgICAgZ2V0
KHJocywgdDMpCisgICAgICAgIGdldChtX2xocywgdDIpCisgICAgICAgIGdldChtX3JocywgdDMp
CiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQwKQogICAgICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQzLCB0MSkKICAgICAgICAgbW92ZSB0MCwgdDIK
QEAgLTg1Myw3ICs4NTIsNyBAQCBtYWNybyBzdHJpY3RFcXVhbGl0eUp1bXBPcChuYW1lLCBvcCwg
ZXF1CiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBqdW1w
KHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKIAogICAgIC5zbG93OgogICAgICAgICBj
YWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC04NzIsNyArODcxLDcgQEAg
c3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChu
YW1lLCBvcCwgYXJpdGhtZXRpY09wZXJhdGlvbikKICAgICBsbGludE9wKG9wXyVuYW1lJSwgb3As
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgICAgICBnZXQoc3JjRHN0LCB0MCkKKyAg
ICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQog
ICAgICAgICBicWIgdDEsIHRhZ1R5cGVOdW1iZXIsIC5zbG93CiAgICAgICAgIGFyaXRobWV0aWNP
cGVyYXRpb24odDEsIC5zbG93KQpAQCAtODg2LDcgKzg4NSw3IEBAIG1hY3JvIHByZU9wKG5hbWUs
IG9wLCBhcml0aG1ldGljT3BlcmF0aW8KIGVuZAogCiBsbGludE9wV2l0aFByb2ZpbGUob3BfdG9f
bnVtYmVyLCBPcFRvTnVtYmVyLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQot
ICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MikKICAgICBicWFlcSB0MiwgdGFnVHlwZU51bWJl
ciwgLm9wVG9OdW1iZXJJc0ltbWVkaWF0ZQogICAgIGJ0cXogdDIsIHRhZ1R5cGVOdW1iZXIsIC5v
cFRvTnVtYmVyU2xvdwpAQCAtOTAwLDcgKzg5OSw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFJl
dHVybihvcF90b19zdHJpbmcsIE9wVG9TdHJpbmcsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQogICAgIGJ0cW56IHQwLCB0
YWdNYXNrLCAub3BUb1N0cmluZ1Nsb3cKICAgICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIFN0
cmluZ1R5cGUsIC5vcFRvU3RyaW5nU2xvdwpAQCAtOTE0LDcgKzkxMyw3IEBAIGVuZCkKIAogCiBs
bGludE9wV2l0aFByb2ZpbGUob3BfdG9fb2JqZWN0LCBPcFRvT2JqZWN0LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9v
cGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MikKICAg
ICBidHFueiB0MiwgdGFnTWFzaywgLm9wVG9PYmplY3RTbG93CiAgICAgYmJiIEpTQ2VsbDo6bV90
eXBlW3QyXSwgT2JqZWN0VHlwZSwgLm9wVG9PYmplY3RTbG93CkBAIC05MjcsMjIgKzkyNiwyMiBA
QCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICBnZXQob3BlcmFu
ZCwgdDApCisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQotICAgIGxvYWRpcyBPcE5lZ2F0
ZTo6TWV0YWRhdGE6OmFyaXRoUHJvZmlsZVt0MV0sIHQyCisgICAgbG9hZGlzIE9wTmVnYXRlOjpN
ZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbdDFdLCB0MgogICAgIGJxYiB0MywgdGFnVHlwZU51bWJl
ciwgLm9wTmVnYXRlTm90SW50CiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xv
dwogICAgIG5lZ2kgdDMKICAgICBvcnEgdGFnVHlwZU51bWJlciwgdDMKICAgICBvcmkgQXJpdGhQ
cm9maWxlSW50LCB0MgotICAgIHN0b3JlaSB0MiwgT3BOZWdhdGU6Ok1ldGFkYXRhOjphcml0aFBy
b2ZpbGVbdDFdCisgICAgc3RvcmVpIHQyLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlW3QxXQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCB0
YWdUeXBlTnVtYmVyLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAs
IHQzCiAgICAgb3JpIEFyaXRoUHJvZmlsZU51bWJlciwgdDIKLSAgICBzdG9yZWkgdDIsIE9wTmVn
YXRlOjpNZXRhZGF0YTo6YXJpdGhQcm9maWxlW3QxXQorICAgIHN0b3JlaSB0MiwgT3BOZWdhdGU6
Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVt0MV0KICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0
ZVNsb3c6CkBAIC05NTYsMTYgKzk1NSwxNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG5h
bWUsIG9wLCBpbnRlCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAogICAgICAgICBtYWNybyBw
cm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmkgdHlwZSwgJW9wJTo6TWV0YWRhdGE6OmFyaXRo
UHJvZmlsZVt0NV0KKyAgICAgICAgICAgIG9yaSB0eXBlLCAlb3AlOjpNZXRhZGF0YTo6bV9hcml0
aFByb2ZpbGVbdDVdCiAgICAgICAgIGVuZAogCi0gICAgICAgIGdldChyaHMsIHQwKQotICAgICAg
ICBnZXQobGhzLCB0MikKKyAgICAgICAgZ2V0KG1fcmhzLCB0MCkKKyAgICAgICAgZ2V0KG1fbGhz
LCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCiAgICAg
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQwKQogICAgICAgICBicWIgdDAs
IHRhZ1R5cGVOdW1iZXIsIC5vcDFOb3RJbnQKICAgICAgICAgYnFiIHQxLCB0YWdUeXBlTnVtYmVy
LCAub3AyTm90SW50Ci0gICAgICAgIGdldChkc3QsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQy
KQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAK
ICAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCkBAIC05ODQsNyArOTgzLDcgQEAg
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShuYW1lLCBvcCwgaW50ZQogICAgICAgICBwcm9maWxl
KEFyaXRoUHJvZmlsZU51bWJlckludCkKICAgICAgICAgY2kyZCB0MSwgZnQxCiAgICAgLm9wMU5v
dEludFJlYWR5OgotICAgICAgICBnZXQoZHN0LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikK
ICAgICAgICAgYWRkcSB0YWdUeXBlTnVtYmVyLCB0MAogICAgICAgICBmcTJkIHQwLCBmdDAKICAg
ICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpAQCAtOTk1LDcgKzk5NCw3IEBAIG1hY3Jv
IGJpbmFyeU9wQ3VzdG9tU3RvcmUobmFtZSwgb3AsIGludGUKIAogICAgIC5vcDJOb3RJbnQ6CiAg
ICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBp
cyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KGRzdCwgdDIpCisgICAgICAgIGdldChtX2Rz
dCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIHRhZ1R5cGVOdW1iZXIsIC5zbG93CiAgICAgICAgIHBy
b2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQogICAgICAgICBjaTJkIHQwLCBmdDAKQEAgLTEw
NzQsNyArMTA3Myw3IEBAIGJpbmFyeU9wKHN1YiwgT3BTdWIsCiAKIAogbGxpbnRPcFdpdGhSZXR1
cm4ob3BfdW5zaWduZWQsIE9wVW5zaWduZWQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBy
ZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQogICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyKQogICAgIGJpbHQgdDIsIDAsIC5v
cFVuc2lnbmVkU2xvdwogICAgIHJldHVybih0MikKQEAgLTEwODYsOCArMTA4NSw4IEBAIGVuZCkK
IAogbWFjcm8gY29tbW9uQml0T3Aob3BLaW5kLCBuYW1lLCBvcCwgb3BlcmF0aW9uKQogICAgIG9w
S2luZChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQot
ICAgICAgICBnZXQocmhzLCB0MCkKLSAgICAgICAgZ2V0KGxocywgdDIpCisgICAgICAgIGdldCht
X3JocywgdDApCisgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUoc2l6ZSwgdDAsIHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNp
emUsIHQyLCB0MCkKICAgICAgICAgYnFiIHQwLCB0YWdUeXBlTnVtYmVyLCAuc2xvdwpAQCAtMTEz
MSw3ICsxMTMwLDcgQEAgYml0T3BQcm9maWxlZChiaXR4b3IsIE9wQml0eG9yLAogICAgIG1hY3Jv
IChsZWZ0LCByaWdodCkgeG9yaSBsZWZ0LCByaWdodCBlbmQpCiAKIGxsaW50T3BXaXRoUHJvZmls
ZShvcF9iaXRub3QsIE9wQml0bm90LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJu
KQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6ZSwgdDAsIHQzLCAub3BCaXROb3RTbG93KQogICAg
IG5vdGkgdDMKICAgICBvcnEgdGFnVHlwZU51bWJlciwgdDMKQEAgLTExNDMsMTYgKzExNDIsMTYg
QEAgZW5kKQogCiAKIGxsaW50T3Aob3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSwgT3BPdmVycmlk
ZXNIYXNJbnN0YW5jZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZ2V0KGRzdCwg
dDMpCisgICAgZ2V0KG1fZHN0LCB0MykKIAotICAgIGdldChoYXNJbnN0YW5jZVZhbHVlLCB0MSkK
KyAgICBnZXQobV9oYXNJbnN0YW5jZVZhbHVlLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQxLCB0MCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIKICAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QyXSwgdDIKICAgICBsb2FkcCBKU0dsb2JhbE9i
amVjdDo6bV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvblt0Ml0sIHQyCiAg
ICAgYnFuZXEgdDAsIHQyLCAub3BPdmVycmlkZXNIYXNJbnN0YW5jZU5vdERlZmF1bHRTeW1ib2wK
IAotICAgIGdldChjb25zdHJ1Y3RvciwgdDEpCisgICAgZ2V0KG1fY29uc3RydWN0b3IsIHQxKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQogICAgIHRieiBKU0NlbGw6
Om1fZmxhZ3NbdDBdLCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlLCB0MQogICAgIG9ycSBW
YWx1ZUZhbHNlLCB0MQpAQCAtMTE2Niw3ICsxMTY1LDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRo
UmV0dXJuKG9wX2lzX2VtcHR5LCBPcElzRW1wdHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQogICAgIGNxZXEgdDAsIFZh
bHVlRW1wdHksIHQzCiAgICAgb3JxIFZhbHVlRmFsc2UsIHQzCkBAIC0xMTc1LDcgKzExNzQsNyBA
QCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfdW5kZWZpbmVkLCBPcElzVW5kZWZp
bmVkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5k
LCB0MSkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQxLCB0MCkKICAgICBidHF6IHQwLCB0YWdNYXNrLCAub3BJc1VuZGVmaW5lZENlbGwK
ICAgICBjcWVxIHQwLCBWYWx1ZVVuZGVmaW5lZCwgdDMKQEAgLTExOTYsNyArMTE5NSw3IEBAIGVu
ZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc19ib29sZWFuLCBPcElzQm9vbGVhbiwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQob3BlcmFuZCwgdDEpCisg
ICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0
MSwgdDApCiAgICAgeG9ycSBWYWx1ZUZhbHNlLCB0MAogICAgIHRxeiB0MCwgfjEsIHQwCkBAIC0x
MjA2LDcgKzEyMDUsNyBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfbnVtYmVy
LCBPcElzTnVtYmVyLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdl
dChvcGVyYW5kLCB0MSkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQxLCB0MCkKICAgICB0cW56IHQwLCB0YWdUeXBlTnVtYmVyLCB0MQog
ICAgIG9ycSBWYWx1ZUZhbHNlLCB0MQpAQCAtMTIxNSw4ICsxMjE0LDggQEAgZW5kKQogCiAKIGxs
aW50T3BXaXRoUmV0dXJuKG9wX2lzX2NlbGxfd2l0aF90eXBlLCBPcElzQ2VsbFdpdGhUeXBlLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldHUoc2l6ZSwgT3BJc0Nl
bGxXaXRoVHlwZSwgdHlwZSwgdDApCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldHUoc2l6
ZSwgT3BJc0NlbGxXaXRoVHlwZSwgbV90eXBlLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkK
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MykKICAgICBidHFueiB0Mywg
dGFnTWFzaywgLm5vdENlbGxDYXNlCiAgICAgY2JlcSBKU0NlbGw6Om1fdHlwZVt0M10sIHQwLCB0
MQpAQCAtMTIyOCw3ICsxMjI3LDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lz
X29iamVjdCwgT3BJc09iamVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikK
LSAgICBnZXQob3BlcmFuZCwgdDEpCisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDApCiAgICAgYnRxbnogdDAsIHRhZ01hc2ssIC5v
cElzT2JqZWN0Tm90Q2VsbAogICAgIGNiYWVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0VHlw
ZSwgdDEKQEAgLTEyNjcsMTIgKzEyNjYsMTIgQEAgZW5kCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfZ2V0X2J5X2lkX2RpcmVjdCwgT3BHZXRCeUlkRGlyZWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBtZXRhZGF0YSh0MiwgdDApCi0gICAgZ2V0
KGJhc2UsIHQwKQorICAgIGdldChtX2Jhc2UsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0QnlJZERpcmVjdFNsb3cpCiAgICAgbG9hZGkgSlND
ZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgdDEKLSAgICBsb2FkaSBPcEdldEJ5SWREaXJlY3Q6Ok1l
dGFkYXRhOjpzdHJ1Y3R1cmVbdDJdLCB0MAorICAgIGxvYWRpIE9wR2V0QnlJZERpcmVjdDo6TWV0
YWRhdGE6Om1fc3RydWN0dXJlW3QyXSwgdDAKICAgICBiaW5lcSB0MCwgdDEsIC5vcEdldEJ5SWRE
aXJlY3RTbG93Ci0gICAgbG9hZGkgT3BHZXRCeUlkRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0W3Qy
XSwgdDEKKyAgICBsb2FkaSBPcEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjptX29mZnNldFt0Ml0s
IHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQogICAgIHZh
bHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3QsIHQyLCB0MCkKICAgICByZXR1cm4odDApCkBAIC0x
Mjg1LDE2ICsxMjg0LDE2IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlf
aWQsIE9wR2V0QnlJZCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCiAgICAgbWV0YWRhdGEodDIsIHQxKQotICAgIGxvYWRiIE9wR2V0QnlJZDo6TWV0YWRhdGE6
Om1vZGVbdDJdLCB0MQotICAgIGdldChiYXNlLCB0MCkKKyAgICBsb2FkYiBPcEdldEJ5SWQ6Ok1l
dGFkYXRhOjptX21vZGVbdDJdLCB0MQorICAgIGdldChtX2Jhc2UsIHQwKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0QnlJZFNsb3cpCiAKIC5vcEdl
dEJ5SWREZWZhdWx0OgogICAgIGJibmVxIHQxLCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6OkRlZmF1
bHQsIC5vcEdldEJ5SWRQcm90b0xvYWQKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURb
dDNdLCB0MQotICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5kZWZh
dWx0TW9kZS5zdHJ1Y3R1cmVbdDJdLCB0MAorICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRhdGE6
Om1fbW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0cnVjdHVyZVt0Ml0sIHQwCiAgICAgYmluZXEg
dDAsIHQxLCAub3BHZXRCeUlkU2xvdwotICAgIGxvYWRpcyBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpt
b2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0W3QyXSwgdDEKKyAgICBsb2FkaXMg
T3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuY2FjaGVkT2Zm
c2V0W3QyXSwgdDEKICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MywgdDAp
CiAgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgdDIsIHQwKQogICAgIHJldHVybih0MCkKQEAg
LTEzMDIsMTAgKzEzMDEsMTAgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9w
R2V0QgogLm9wR2V0QnlJZFByb3RvTG9hZDoKICAgICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5
SWRNb2RlOjpQcm90b0xvYWQsIC5vcEdldEJ5SWRBcnJheUxlbmd0aAogICAgIGxvYWRpIEpTQ2Vs
bDo6bV9zdHJ1Y3R1cmVJRFt0M10sIHQxCi0gICAgbG9hZGkgT3BHZXRCeUlkOjpNZXRhZGF0YTo6
bW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuc3RydWN0dXJlW3QyXSwgdDMKKyAgICBsb2FkaSBP
cEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVjdHVy
ZVt0Ml0sIHQzCiAgICAgYmluZXEgdDMsIHQxLCAub3BHZXRCeUlkU2xvdwotICAgIGxvYWRpcyBP
cEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5jYWNoZWRPZmZz
ZXRbdDJdLCB0MQotICAgIGxvYWRwIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5w
cm90b0xvYWRNb2RlLmNhY2hlZFNsb3RbdDJdLCB0MworICAgIGxvYWRpcyBPcEdldEJ5SWQ6Ok1l
dGFkYXRhOjptX21vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLmNhY2hlZE9mZnNldFt0Ml0sIHQx
CisgICAgbG9hZHAgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEucHJvdG9Mb2Fk
TW9kZS5jYWNoZWRTbG90W3QyXSwgdDMKICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0
KHQxLCB0MywgdDApCiAgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgdDIsIHQwKQogICAgIHJl
dHVybih0MCkKQEAgLTEzMTMsNyArMTMxMiw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0
X2J5X2lkLCBPcEdldEIKIC5vcEdldEJ5SWRBcnJheUxlbmd0aDoKICAgICBiYm5lcSB0MSwgY29u
c3RleHByIEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJZFVuc2V0CiAgICAgbW92
ZSB0MywgdDAKLSAgICBhcnJheVByb2ZpbGUoT3BHZXRCeUlkOjpNZXRhZGF0YTo6bW9kZU1ldGFk
YXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHQwLCB0MiwgdDUpCisgICAgYXJyYXlQ
cm9maWxlKE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9k
ZS5hcnJheVByb2ZpbGUsIHQwLCB0MiwgdDUpCiAgICAgYnRpeiB0MCwgSXNBcnJheSwgLm9wR2V0
QnlJZFNsb3cKICAgICBidGl6IHQwLCBJbmRleGluZ1NoYXBlTWFzaywgLm9wR2V0QnlJZFNsb3cK
ICAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6
anNWYWx1ZSwgY29uc3RleHByIEpTVkFMVUVfR0lHQUNBR0VfTUFTSywgSlNPYmplY3Q6Om1fYnV0
dGVyZmx5W3QzXSwgdDAsIHQxKQpAQCAtMTMyNSw3ICsxMzI0LDcgQEAgbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QgogCiAub3BHZXRCeUlkVW5zZXQ6CiAgICAgbG9hZGkg
SlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgdDEKLSAgICBsb2FkaSBPcEdldEJ5SWQ6Ok1ldGFk
YXRhOjptb2RlTWV0YWRhdGEudW5zZXRNb2RlLnN0cnVjdHVyZVt0Ml0sIHQwCisgICAgbG9hZGkg
T3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEudW5zZXRNb2RlLnN0cnVjdHVyZVt0
Ml0sIHQwCiAgICAgYmluZXEgdDAsIHQxLCAub3BHZXRCeUlkU2xvdwogICAgIHZhbHVlUHJvZmls
ZShPcEdldEJ5SWQsIHQyLCBWYWx1ZVVuZGVmaW5lZCkKICAgICByZXR1cm4oVmFsdWVVbmRlZmlu
ZWQpCkBAIC0xMzM3LDEwICsxMzM2LDEwIEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRh
KG9wX3B1dF9ieV9pZCwgT3BQdXRCeUlkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKLSAgICBnZXQoYmFzZSwgdDMpCisgICAgZ2V0KG1fYmFzZSwgdDMpCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDMsIHQwLCAub3BQdXRCeUlkU2xv
dykKICAgICBtZXRhZGF0YSh0NSwgdDIpCi0gICAgbG9hZGlzIE9wUHV0QnlJZDo6TWV0YWRhdGE6
Om9sZFN0cnVjdHVyZVt0NV0sIHQyCisgICAgbG9hZGlzIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1f
b2xkU3RydWN0dXJlW3Q1XSwgdDIKICAgICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVyZUlE
W3QwXSwgLm9wUHV0QnlJZFNsb3cKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKQEAg
LTEzNDgsMTAgKzEzNDcsMTAgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9wdXRfYnlfaWQsIE9w
UHV0QgogICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+IG9iamVj
dCBiYXNlCiAKLSAgICBnZXQodmFsdWUsIHQxKQorICAgIGdldChtX3ZhbHVlLCB0MSkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MykKIAotICAgIGxvYWRpIE9wUHV0QnlJ
ZDo6TWV0YWRhdGE6OmZsYWdzW3Q1XSwgdDEKKyAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRh
OjptX2ZsYWdzW3Q1XSwgdDEKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKICAgICAj
IHQwIC0+IG9iamVjdCBiYXNlCkBAIC0xNDI4LDIwICsxNDI3LDIwIEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKIAogLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
OgotICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om5ld1N0cnVjdHVyZVt0NV0sIHQxCisg
ICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bV9uZXdTdHJ1Y3R1cmVbdDVdLCB0MQogICAg
IAogICAgIGJ0aXogdDEsIC5vcFB1dEJ5SWROb3RUcmFuc2l0aW9uCiAKICAgICAjIFRoaXMgaXMg
dGhlIHRyYW5zaXRpb24gY2FzZS4gdDEgaG9sZHMgdGhlIG5ldyBzdHJ1Y3R1cmVJRC4gdDIgaG9s
ZHMgdGhlIG9sZCBzdHJ1Y3R1cmUgSUQuCiAgICAgIyBJZiB3ZSBoYXZlIGEgY2hhaW4sIHdlIG5l
ZWQgdG8gY2hlY2sgaXQuIHQwIGlzIHRoZSBiYXNlLiBXZSBtYXkgY2xvYmJlciB0MSB0byB1c2Ug
aXQgYXMKICAgICAjIHNjcmF0Y2guCi0gICAgbG9hZHAgT3BQdXRCeUlkOjpNZXRhZGF0YTo6c3Ry
dWN0dXJlQ2hhaW5bdDVdLCB0MworICAgIGxvYWRwIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1fc3Ry
dWN0dXJlQ2hhaW5bdDVdLCB0MwogICAgIGJ0cHogdDMsIC5vcFB1dEJ5SWRUcmFuc2l0aW9uRGly
ZWN0CiAKICAgICBzdHJ1Y3R1cmVJRFRvU3RydWN0dXJlV2l0aFNjcmF0Y2godDIsIHQxLCB0MykK
IAogICAgICMgcmVsb2FkIHRoZSBTdHJ1Y3R1cmVDaGFpbiBzaW5jZSB3ZSB1c2VkIHQzIGFzIGEg
c2NyYXRjaCBhYm92ZQotICAgIGxvYWRwIE9wUHV0QnlJZDo6TWV0YWRhdGE6OnN0cnVjdHVyZUNo
YWluW3Q1XSwgdDMKKyAgICBsb2FkcCBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjptX3N0cnVjdHVyZUNo
YWluW3Q1XSwgdDMKIAogICAgIGxvYWRwIFN0cnVjdHVyZUNoYWluOjptX3ZlY3Rvclt0M10sIHQz
CiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnRwbnogdDMsIG9rIGVuZCkKQEAgLTE0NjIsMjUgKzE0
NjEsMjUgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9wdXRfYnlfaWQsIE9wUHV0QgogCiAub3BQ
dXRCeUlkVHJhbnNpdGlvbkNoYWluRG9uZToKICAgICAjIFJlbG9hZCB0aGUgbmV3IHN0cnVjdHVy
ZSwgc2luY2Ugd2UgY2xvYmJlcmVkIGl0IGFib3ZlLgotICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0
YWRhdGE6Om5ld1N0cnVjdHVyZVt0NV0sIHQxCisgICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0
YTo6bV9uZXdTdHJ1Y3R1cmVbdDVdLCB0MQogCiAub3BQdXRCeUlkVHJhbnNpdGlvbkRpcmVjdDoK
ICAgICBzdG9yZWkgdDEsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0KLSAgICB3cml0ZUJhcnJp
ZXJPbk9wZXJhbmRXaXRoUmVsb2FkKHNpemUsIGdldCwgYmFzZSwgbWFjcm8gKCkKKyAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRXaXRoUmVsb2FkKHNpemUsIGdldCwgbV9iYXNlLCBtYWNybyAoKQog
ICAgICAgICAjIFJlbG9hZCBtZXRhZGF0YSBpbnRvIHQ1CiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0
MSkKICAgICAgICAgIyBSZWxvYWQgYmFzZSBpbnRvIHQwCi0gICAgICAgIGdldChiYXNlLCB0MSkK
KyAgICAgICAgZ2V0KG1fYmFzZSwgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDEsIHQwKQogICAgIGVuZCkKIAogLm9wUHV0QnlJZE5vdFRyYW5zaXRpb246CiAgICAg
IyBUaGUgb25seSB0aGluZyBsaXZlIHJpZ2h0IG5vdyBpcyB0MCwgd2hpY2ggaG9sZHMgdGhlIGJh
c2UuCi0gICAgZ2V0KHZhbHVlLCB0MSkKKyAgICBnZXQobV92YWx1ZSwgdDEpCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIpCi0gICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRh
ZGF0YTo6b2Zmc2V0W3Q1XSwgdDEKKyAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjptX29m
ZnNldFt0NV0sIHQxCiAgICAgc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQwLCB0
MikKLSAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwgdmFsdWUpCisg
ICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1fYmFzZSwgbV92YWx1ZSkKICAg
ICBkaXNwYXRjaCgpCiAKIC5vcFB1dEJ5SWRTbG93OgpAQCAtMTQ5MSw3ICsxNDkwLDcgQEAgZW5k
KQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0QnlWYWwsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIG1hY3JvIGZpbmlz
aEdldEJ5VmFsKHJlc3VsdCwgc2NyYXRjaCkKLSAgICAgICAgZ2V0KGRzdCwgc2NyYXRjaCkKKyAg
ICAgICAgZ2V0KG1fZHN0LCBzY3JhdGNoKQogICAgICAgICBzdG9yZXEgcmVzdWx0LCBbY2ZyLCBz
Y3JhdGNoLCA4XQogICAgICAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeVZhbCwgdDUsIHJlc3VsdCkK
ICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTUxMCwxMyArMTUwOSwxMyBAQCBsbGludE9wV2l0aE1l
dGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAKICAgICBtZXRhZGF0YSh0NSwgdDIpCiAKLSAg
ICBnZXQoYmFzZSwgdDIpCisgICAgZ2V0KG1fYmFzZSwgdDIpCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZUNlbGwoc2l6ZSwgdDIsIHQwLCAub3BHZXRCeVZhbFNsb3cpCiAKICAgICBtb3ZlIHQw
LCB0MgotICAgIGFycmF5UHJvZmlsZShPcEdldEJ5VmFsOjpNZXRhZGF0YTo6YXJyYXlQcm9maWxl
LCB0MiwgdDUsIHQxKQorICAgIGFycmF5UHJvZmlsZShPcEdldEJ5VmFsOjpNZXRhZGF0YTo6bV9h
cnJheVByb2ZpbGUsIHQyLCB0NSwgdDEpCiAKLSAgICBnZXQocHJvcGVydHksIHQzKQorICAgIGdl
dChtX3Byb3BlcnR5LCB0MykKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6ZSwg
dDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnEgdDEsIHQxCiAKQEAgLTE1MjksNyAr
MTUyOCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKIAogLm9w
R2V0QnlWYWxJc0NvbnRpZ3VvdXM6CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFk
ZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5
VmFsU2xvdwotICAgIGdldChkc3QsIHQwKQorICAgIGdldChtX2RzdCwgdDApCiAgICAgbG9hZHEg
W3QzLCB0MSwgOF0sIHQyCiAgICAgYnRxeiB0MiwgLm9wR2V0QnlWYWxTbG93CiAgICAgam1wIC5v
cEdldEJ5VmFsRG9uZQpAQCAtMTUzNyw3ICsxNTM2LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9nZXRfYnlfdmFsLCBPcEdldAogLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzOgogICAgIGJpbmVx
IHQyLCBEb3VibGVTaGFwZSwgLm9wR2V0QnlWYWxOb3REb3VibGUKICAgICBiaWFlcSB0MSwgLXNp
emVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVu
Z3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93Ci0gICAgZ2V0KGRzdCwgdDApCisgICAgZ2V0KG1fZHN0
LCB0MCkKICAgICBsb2FkZCBbdDMsIHQxLCA4XSwgZnQwCiAgICAgYmRuZXF1biBmdDAsIGZ0MCwg
Lm9wR2V0QnlWYWxTbG93CiAgICAgZmQycSBmdDAsIHQyCkBAIC0xNTQ4LDcgKzE1NDcsNyBAQCBs
bGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAgICAgc3ViaSBBcnJheVN0
b3JhZ2VTaGFwZSwgdDIKICAgICBiaWEgdDIsIFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAtIEFy
cmF5U3RvcmFnZVNoYXBlLCAub3BHZXRCeVZhbE5vdEluZGV4ZWRTdG9yYWdlCiAgICAgYmlhZXEg
dDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnZl
Y3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwotICAgIGdldChkc3QsIHQwKQorICAgIGdl
dChtX2RzdCwgdDApCiAgICAgbG9hZHEgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEsIDhd
LCB0MgogICAgIGJ0cXogdDIsIC5vcEdldEJ5VmFsU2xvdwogCkBAIC0xNjYxLDI0ICsxNjYwLDI0
IEBAIG1hY3JvIHB1dEJ5VmFsT3AobmFtZSwgb3ApCiAgICAgICAgIG1hY3JvIGNvbnRpZ3VvdXNQ
dXRCeVZhbChzdG9yZUNhbGxiYWNrKQogICAgICAgICAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5k
ZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0s
IC5vdXRPZkJvdW5kcwogICAgICAgICAuc3RvcmVSZXN1bHQ6Ci0gICAgICAgICAgICBnZXQodmFs
dWUsIHQyKQorICAgICAgICAgICAgZ2V0KG1fdmFsdWUsIHQyKQogICAgICAgICAgICAgc3RvcmVD
YWxsYmFjayh0MiwgdDEsIFt0MCwgdDMsIDhdKQogICAgICAgICAgICAgZGlzcGF0Y2goKQogCiAg
ICAgICAgIC5vdXRPZkJvdW5kczoKICAgICAgICAgICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4
aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy52ZWN0b3JMZW5ndGhbdDBdLCAu
b3BQdXRCeVZhbE91dE9mQm91bmRzCi0gICAgICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRh
dGE6OmFycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQorICAgICAgICAgICAgc3RvcmVi
IDEsICVvcCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQog
ICAgICAgICAgICAgYWRkaSAxLCB0MywgdDIKICAgICAgICAgICAgIHN0b3JlaSB0MiwgLXNpemVv
ZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3Ro
W3QwXQogICAgICAgICAgICAgam1wIC5zdG9yZVJlc3VsdAogICAgICAgICBlbmQKIAotICAgICAg
ICBnZXQoYmFzZSwgdDApCisgICAgICAgIGdldChtX2Jhc2UsIHQwKQogICAgICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlQ2VsbChzaXplLCB0MCwgdDEsIC5vcFB1dEJ5VmFsU2xvdykKICAgICAg
ICAgbW92ZSB0MSwgdDIKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQotICAgICAgICBhcnJheVBy
b2ZpbGUoJW9wJTo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZSwgdDIsIHQ1LCB0MCkKLSAgICAgICAg
Z2V0KHByb3BlcnR5LCB0MCkKKyAgICAgICAgYXJyYXlQcm9maWxlKCVvcCU6Ok1ldGFkYXRhOjpt
X2FycmF5UHJvZmlsZSwgdDIsIHQ1LCB0MCkKKyAgICAgICAgZ2V0KG1fcHJvcGVydHksIHQwKQog
ICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6ZSwgdDAsIHQzLCAub3BQdXRC
eVZhbFNsb3cpCiAgICAgICAgIHN4aTJxIHQzLCB0MwogICAgICAgICBsb2FkQ2FnZWQoX2dfZ2ln
YWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6anNWYWx1ZSwgY29uc3RleHByIEpT
VkFMVUVfR0lHQUNBR0VfTUFTSywgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAsIHRhZ1R5
cGVOdW1iZXIpCkBAIC0xNjkxLDcgKzE2OTAsNyBAQCBtYWNybyBwdXRCeVZhbE9wKG5hbWUsIG9w
KQogICAgICAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgb3BlcmFuZCwg
c2NyYXRjaCkKICAgICAgICAgICAgICAgICBicWIgc2NyYXRjaCwgdGFnVHlwZU51bWJlciwgLm9w
UHV0QnlWYWxTbG93CiAgICAgICAgICAgICAgICAgc3RvcmVxIHNjcmF0Y2gsIGFkZHJlc3MKLSAg
ICAgICAgICAgICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwgdmFs
dWUpCisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1f
YmFzZSwgbV92YWx1ZSkKICAgICAgICAgICAgIGVuZCkKIAogICAgIC5vcFB1dEJ5VmFsTm90SW50
MzI6CkBAIC0xNzA4LDcgKzE3MDcsNyBAQCBtYWNybyBwdXRCeVZhbE9wKG5hbWUsIG9wKQogICAg
ICAgICAgICAgICAgIGJkbmVxdW4gZnQwLCBmdDAsIC5vcFB1dEJ5VmFsU2xvdwogICAgICAgICAg
ICAgLnJlYWR5OgogICAgICAgICAgICAgICAgIHN0b3JlZCBmdDAsIGFkZHJlc3MKLSAgICAgICAg
ICAgICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwgdmFsdWUpCisg
ICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1fYmFzZSwg
bV92YWx1ZSkKICAgICAgICAgICAgIGVuZCkKIAogICAgIC5vcFB1dEJ5VmFsTm90RG91YmxlOgpA
QCAtMTcxNyw3ICsxNzE2LDcgQEAgbWFjcm8gcHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAgICAg
ICAgIG1hY3JvIChvcGVyYW5kLCBzY3JhdGNoLCBhZGRyZXNzKQogICAgICAgICAgICAgICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgb3BlcmFuZCwgc2NyYXRjaCkKICAgICAgICAgICAg
ICAgICBzdG9yZXEgc2NyYXRjaCwgYWRkcmVzcwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmll
ck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBiYXNlLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9iYXNlLCBtX3ZhbHVlKQogICAgICAgICAg
ICAgZW5kKQogCiAgICAgLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgpAQCAtMTcyNSwxNCArMTcy
NCwxNCBAQCBtYWNybyBwdXRCeVZhbE9wKG5hbWUsIG9wKQogICAgICAgICBiaWFlcSB0MywgLXNp
emVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMudmVjdG9yTGVu
Z3RoW3QwXSwgLm9wUHV0QnlWYWxPdXRPZkJvdW5kcwogICAgICAgICBidHF6IEFycmF5U3RvcmFn
ZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQogICAg
IC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6Ci0gICAgICAgIGdldCh2YWx1ZSwg
dDIpCisgICAgICAgIGdldChtX3ZhbHVlLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MiwgdDEpCiAgICAgICAgIHN0b3JlcSB0MSwgQXJyYXlTdG9yYWdlOjptX3Zl
Y3Rvclt0MCwgdDMsIDhdCi0gICAgICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0
LCBiYXNlLCB2YWx1ZSkKKyAgICAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQs
IG1fYmFzZSwgbV92YWx1ZSkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wUHV0QnlWYWxB
cnJheVN0b3JhZ2VFbXB0eToKLSAgICAgICAgc3RvcmViIDEsICVvcCU6Ok1ldGFkYXRhOjphcnJh
eVByb2ZpbGUubV9tYXlTdG9yZVRvSG9sZVt0NV0KKyAgICAgICAgc3RvcmViIDEsICVvcCU6Ok1l
dGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQogICAgICAgICBhZGRp
IDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KICAgICAgICAgYmliIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5wdWJs
aWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAgICAgICAg
IGFkZGkgMSwgdDMsIHQxCkBAIC0xNzQwLDcgKzE3MzksNyBAQCBtYWNybyBwdXRCeVZhbE9wKG5h
bWUsIG9wKQogICAgICAgICBqbXAgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3VsdAog
CiAgICAgLm9wUHV0QnlWYWxPdXRPZkJvdW5kczoKLSAgICAgICAgc3RvcmViIDEsICVvcCU6Ok1l
dGFkYXRhOjphcnJheVByb2ZpbGUubV9vdXRPZkJvdW5kc1t0NV0KKyAgICAgICAgc3RvcmViIDEs
ICVvcCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX291dE9mQm91bmRzW3Q1XQogICAgIC5v
cFB1dEJ5VmFsU2xvdzoKICAgICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfJW5h
bWUlKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xNzU0LDE0ICsxNzUzLDE0IEBAIHB1dEJ5VmFs
T3AocHV0X2J5X3ZhbF9kaXJlY3QsIE9wUHV0QnlWYWwKIAogbWFjcm8gbGxpbnRKdW1wVHJ1ZU9y
RmFsc2VPcChuYW1lLCBvcCwgY29uZGl0aW9uT3ApCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVu
YW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQo
Y29uZGl0aW9uLCB0MSkKKyAgICAgICAgZ2V0KG1fY29uZGl0aW9uLCB0MSkKICAgICAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDApCiAgICAgICAgIGJ0cW56IHQwLCB+MHhm
LCAuc2xvdwogICAgICAgICBjb25kaXRpb25PcCh0MCwgLnRhcmdldCkKICAgICAgICAgZGlzcGF0
Y2goKQogCiAgICAgLnRhcmdldDoKLSAgICAgICAganVtcCh0YXJnZXQpCisgICAgICAgIGp1bXAo
bV90YXJnZXQpCiAKICAgICAuc2xvdzoKICAgICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfJW5hbWUlKQpAQCAtMTc3Miw3ICsxNzcxLDcgQEAgZW5kCiAKIG1hY3JvIGVxdWFsTnVs
bEp1bXBPcChuYW1lLCBvcCwgY2VsbEhhbmRsZXIsIGltbWVkaWF0ZUhhbmRsZXIpCiAgICAgbGxp
bnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3Bh
dGNoKQotICAgICAgICBnZXQodmFsdWUsIHQwKQorICAgICAgICBnZXQobV92YWx1ZSwgdDApCiAg
ICAgICAgIGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0
MCwgOF0sIHQwCiAgICAgICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAuaW1tZWRpYXRlCkBAIC0xNzgx
LDcgKzE3ODAsNyBAQCBtYWNybyBlcXVhbE51bGxKdW1wT3AobmFtZSwgb3AsIGNlbGxIYW5kCiAg
ICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC50YXJnZXQ6Ci0gICAgICAgIGp1bXAodGFyZ2V0KQor
ICAgICAgICBqdW1wKG1fdGFyZ2V0KQogCiAgICAgLmltbWVkaWF0ZToKICAgICAgICAgYW5kcSB+
VGFnQml0VW5kZWZpbmVkLCB0MApAQCAtMTgxMiw4ICsxODExLDggQEAgZXF1YWxOdWxsSnVtcE9w
KGpuZXFfbnVsbCwgT3BKbmVxTnVsbCwKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2puZXFf
cHRyLCBPcEpuZXFQdHIsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQotICAgIGdldCh2YWx1ZSwgdDApCi0gICAgZ2V0KHNwZWNpYWxQb2ludGVyLCB0MSkKKyAg
ICBnZXQobV92YWx1ZSwgdDApCisgICAgZ2V0KG1fc3BlY2lhbFBvaW50ZXIsIHQxKQogICAgIGxv
YWRwIENvZGVCbG9ja1tjZnJdLCB0MgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmpl
Y3RbdDJdLCB0MgogICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX3NwZWNpYWxQb2ludGVyc1t0
MiwgdDEsIFB0clNpemVdLCB0MQpAQCAtMTgyMiwxNiArMTgyMSwxNiBAQCBsbGludE9wV2l0aE1l
dGFkYXRhKG9wX2puZXFfcHRyLCBPcEpuZXFQCiAKIC5vcEpuZXFQdHJUYXJnZXQ6CiAgICAgbWV0
YWRhdGEodDUsIHQwKQotICAgIHN0b3JlYiAxLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpoYXNKdW1w
ZWRbdDVdCi0gICAgZ2V0KHRhcmdldCwgdDApCisgICAgc3RvcmViIDEsIE9wSm5lcVB0cjo6TWV0
YWRhdGE6Om1faGFzSnVtcGVkW3Q1XQorICAgIGdldChtX3RhcmdldCwgdDApCiAgICAganVtcElt
cGwodDApCiBlbmQpCiAKIAogbWFjcm8gY29tcGFyZUp1bXBPcChuYW1lLCBvcCwgaW50ZWdlckNv
bXBhcmUsIGRvdWJsZUNvbXBhcmUpCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwgb3As
IG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQobGhzLCB0MikK
LSAgICAgICAgZ2V0KHJocywgdDMpCisgICAgICAgIGdldChtX2xocywgdDIpCisgICAgICAgIGdl
dChtX3JocywgdDMpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQw
KQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQzLCB0MSkKICAgICAgICAg
YnFiIHQwLCB0YWdUeXBlTnVtYmVyLCAub3AxTm90SW50CkBAIC0xODYzLDcgKzE4NjIsNyBAQCBt
YWNybyBjb21wYXJlSnVtcE9wKG5hbWUsIG9wLCBpbnRlZ2VyQ29tCiAgICAgICAgIGRpc3BhdGNo
KCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAganVt
cChtX3RhcmdldCkKIAogICAgIC5zbG93OgogICAgICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Ns
b3dfcGF0aF8lbmFtZSUpCkBAIC0xODc0LDE1ICsxODczLDE1IEBAIGVuZAogCiBtYWNybyBlcXVh
bGl0eUp1bXBPcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmlzb24pCiAgICAgbGxpbnRPcFdpdGhK
dW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAg
ICAgICBnZXQobGhzLCB0MikKLSAgICAgICAgZ2V0KHJocywgdDMpCisgICAgICAgIGdldChtX2xo
cywgdDIpCisgICAgICAgIGdldChtX3JocywgdDMpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGVJbnQzMihzaXplLCB0MiwgdDAsIC5zbG93KQogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlSW50MzIoc2l6ZSwgdDMsIHQxLCAuc2xvdykKICAgICAgICAgaW50ZWdlckNvbXBhcmlz
b24odDAsIHQxLCAuanVtcFRhcmdldCkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLmp1bXBU
YXJnZXQ6Ci0gICAgICAgIGp1bXAodGFyZ2V0KQorICAgICAgICBqdW1wKG1fdGFyZ2V0KQogCiAg
ICAgLnNsb3c6CiAgICAgICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoXyVuYW1lJSkK
QEAgLTE4OTEsMjUgKzE4OTAsMjUgQEAgbWFjcm8gZXF1YWxpdHlKdW1wT3AobmFtZSwgb3AsIGlu
dGVnZXJDbwogZW5kCiAKIAotbWFjcm8gY29tcGFyZVVuc2lnbmVkSnVtcE9wKG5hbWUsIG9wLCBp
bnRlZ2VyQ29tcGFyZSkKK21hY3JvIGNvbXBhcmVVbnNpZ25lZEp1bXBPcChuYW1lLCBvcCwgaW50
ZWdlckNvbXBhcmVNYWNybykKICAgICBsbGludE9wV2l0aEp1bXAob3BfJW5hbWUlLCBvcCwgbWFj
cm8gKHNpemUsIGdldCwganVtcCwgZGlzcGF0Y2gpCi0gICAgICAgIGdldChsaHMsIHQyKQotICAg
ICAgICBnZXQocmhzLCB0MykKKyAgICAgICAgZ2V0KG1fbGhzLCB0MikKKyAgICAgICAgZ2V0KG1f
cmhzLCB0MykKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDApCiAg
ICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDMsIHQxKQotICAgICAgICBpbnRl
Z2VyQ29tcGFyZSh0MCwgdDEsIC5qdW1wVGFyZ2V0KQorICAgICAgICBpbnRlZ2VyQ29tcGFyZU1h
Y3JvKHQwLCB0MSwgLmp1bXBUYXJnZXQpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1w
VGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKICAg
ICBlbmQpCiBlbmQKIAogCiBtYWNybyBjb21wYXJlVW5zaWduZWRPcChuYW1lLCBvcCwgaW50ZWdl
ckNvbXBhcmVBbmRTZXQpCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KGxocywgdDIpCi0g
ICAgICAgIGdldChyaHMsICB0MCkKKyAgICAgICAgZ2V0KG1fbGhzLCB0MikKKyAgICAgICAgZ2V0
KG1fcmhzLCAgdDApCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQx
KQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MCkKICAgICAgICAg
aW50ZWdlckNvbXBhcmVBbmRTZXQodDAsIHQxLCB0MCkKQEAgLTE5MjAsOCArMTkxOSw4IEBAIGVu
ZAogCiAKIGxsaW50T3BXaXRoSnVtcChvcF9zd2l0Y2hfaW1tLCBPcFN3aXRjaEltbSwgbWFjcm8g
KHNpemUsIGdldCwganVtcCwgZGlzcGF0Y2gpCi0gICAgZ2V0KHNjcnV0aW5lZSwgdDIpCi0gICAg
Z2V0KHRhYmxlSW5kZXgsIHQzKQorICAgIGdldChtX3NjcnV0aW5lZSwgdDIpCisgICAgZ2V0KG1f
dGFibGVJbmRleCwgdDMpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDEp
CiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX3Jh
cmVEYXRhW3QyXSwgdDIKQEAgLTE5MzksNyArMTkzOCw3IEBAIGxsaW50T3BXaXRoSnVtcChvcF9z
d2l0Y2hfaW1tLCBPcFN3aXRjaEkKIC5vcFN3aXRjaEltbU5vdEludDoKICAgICBidHFueiB0MSwg
dGFnVHlwZU51bWJlciwgLm9wU3dpdGNoSW1tU2xvdyAgICMgR28gc2xvdyBpZiBpdCdzIGEgZG91
YmxlLgogLm9wU3dpdGNoSW1tRmFsbFRocm91Z2g6Ci0gICAganVtcChkZWZhdWx0T2Zmc2V0KQor
ICAgIGp1bXAobV9kZWZhdWx0T2Zmc2V0KQogCiAub3BTd2l0Y2hJbW1TbG93OgogICAgIGNhbGxT
bG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3N3aXRjaF9pbW0pCkBAIC0xOTQ4LDggKzE5NDcsOCBA
QCBlbmQpCiAKIAogbGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRjaF9jaGFyLCBPcFN3aXRjaENoYXIs
IG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgIGdldChzY3J1dGluZWUsIHQy
KQotICAgIGdldCh0YWJsZUluZGV4LCB0MykKKyAgICBnZXQobV9zY3J1dGluZWUsIHQyKQorICAg
IGdldChtX3RhYmxlSW5kZXgsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDIsIHQxKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MgogICAgIGxvYWRwIENvZGVCbG9j
azo6bV9yYXJlRGF0YVt0Ml0sIHQyCkBAIC0xOTc2LDcgKzE5NzUsNyBAQCBsbGludE9wV2l0aEp1
bXAob3Bfc3dpdGNoX2NoYXIsIE9wU3dpdGNoCiAgICAgZGlzcGF0Y2hJbmRpcmVjdCh0MSkKIAog
Lm9wU3dpdGNoQ2hhckZhbGxUaHJvdWdoOgotICAgIGp1bXAoZGVmYXVsdE9mZnNldCkKKyAgICBq
dW1wKG1fZGVmYXVsdE9mZnNldCkKIAogLm9wU3dpdGNoT25Sb3BlOgogICAgIGNhbGxTbG93UGF0
aChfbGxpbnRfc2xvd19wYXRoX3N3aXRjaF9jaGFyKQpAQCAtMTk4NiwxMiArMTk4NSwxMiBAQCBl
bmQpCiAKICMgd2UgYXNzdW1lIHQ1IGNvbnRhaW5zIHRoZSBtZXRhZGF0YSwgYW5kIHdlIHNob3Vs
ZCBub3Qgc2NyYXRjaCB0aGF0CiBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKG9wLCBnZXR1KQot
ICAgIGdldHUoYXJndiwgdDMpCisgICAgZ2V0dShtX2FyZ3YsIHQzKQogICAgIG5lZ3AgdDMKICAg
ICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgYnRxbnogdDAs
IHRhZ01hc2ssIC5kb25lCiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgdDMK
LSAgICBzdG9yZWkgdDMsICVvcCU6Ok1ldGFkYXRhOjphcnJheVByb2ZpbGUubV9sYXN0U2VlblN0
cnVjdHVyZUlEW3Q1XQorICAgIHN0b3JlaSB0MywgJW9wJTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9m
aWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKQEAgLTE5OTksMzEg
KzE5OTgsMzEgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG5hbWUsIHNsb3dQYXRoLCBvcCwgcAogICAg
IGxsaW50T3BXaXRoTWV0YWRhdGEobmFtZSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAgICAg
cHJvbG9ndWUobWFjcm8gKGZpZWxkLCBkc3QpCi0gICAgICAgICAgICBnZXR1KHNpemUsIG9wLCBm
aWVsZCwgZHN0KQorICAgICAgICBwcm9sb2d1ZShtYWNybyAoZmllbGROYW1lLCBkc3QpCisgICAg
ICAgICAgICBnZXR1KHNpemUsIG9wLCBmaWVsZE5hbWUsIGRzdCkKICAgICAgICAgZW5kLCBtZXRh
ZGF0YSkKIAotICAgICAgICBnZXQoY2FsbGVlLCB0MCkKLSAgICAgICAgbG9hZHAgJW9wJTo6TWV0
YWRhdGE6OmNhbGxMaW5rSW5mby5jYWxsZWVbdDVdLCB0MgorICAgICAgICBnZXQobV9jYWxsZWUs
IHQwKQorICAgICAgICBsb2FkcCAlb3AlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8uY2FsbGVl
W3Q1XSwgdDIKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAg
ICAgICAgIGJxbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKLSAgICAgICAgZ2V0dShzaXplLCBvcCwg
YXJndiwgdDMpCisgICAgICAgIGdldHUoc2l6ZSwgb3AsIG1fYXJndiwgdDMpCiAgICAgICAgIGxz
aGlmdGkgMywgdDMKICAgICAgICAgbmVncCB0MwogICAgICAgICBhZGRwIGNmciwgdDMKICAgICAg
ICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCi0gICAgICAgIGdldHUoc2l6ZSwgb3AsIGFyZ2MsIHQy
KQorICAgICAgICBnZXR1KHNpemUsIG9wLCBtX2FyZ2MsIHQyKQogICAgICAgICBzdG9yZWkgUEMs
IEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQogICAgICAgICBzdG9yZWkgdDIsIEFyZ3Vt
ZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBzcAogICAgICAg
ICBpZiBQT0lTT04KICAgICAgICAgICAgIGxvYWRwIF9nX0pJVENvZGVQb2lzb24sIHQyCi0gICAg
ICAgICAgICB4b3JwICVvcCU6Ok1ldGFkYXRhOjpjYWxsTGlua0luZm8ubWFjaGluZUNvZGVUYXJn
ZXRbdDVdLCB0MgorICAgICAgICAgICAgeG9ycCAlb3AlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MgogICAgICAgICAgICAgcHJlcGFyZUNhbGwodDIs
IHQxLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCiAgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rp
b24oc2l6ZSwgb3AsIGRpc3BhdGNoLCB0MiwgSlNFbnRyeVB0clRhZykKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcHJlcGFyZUNhbGwoJW9wJTo6TWV0YWRhdGE6OmNhbGxMaW5rSW5mby5tYWNo
aW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgICAg
ICBjYWxsVGFyZ2V0RnVuY3Rpb24oc2l6ZSwgb3AsIGRpc3BhdGNoLCAlb3AlOjpNZXRhZGF0YTo6
Y2FsbExpbmtJbmZvLm1hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgSlNFbnRyeVB0clRhZykKKyAgICAg
ICAgICAgIHByZXBhcmVDYWxsKCVvcCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tYWNoaW5l
Q29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAgICBj
YWxsVGFyZ2V0RnVuY3Rpb24oc2l6ZSwgb3AsIGRpc3BhdGNoLCAlb3AlOjpNZXRhZGF0YTo6bV9j
YWxsTGlua0luZm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQogICAgICAg
ICBlbmQKIAogICAgIC5vcENhbGxTbG93OgpAQCAtMjAzMywxNCArMjAzMiwxNCBAQCBlbmQKIAog
bGxpbnRPcChvcF9yZXQsIE9wUmV0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKICAgICBj
aGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQotICAgIGdldCh2YWx1ZSwgdDIpCisgICAgZ2V0
KG1fdmFsdWUsIHQyKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHIwKQog
ICAgIGRvUmV0dXJuKCkKIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF90b19wcmltaXRp
dmUsIE9wVG9QcmltaXRpdmUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0g
ICAgZ2V0KHNyYywgdDIpCisgICAgZ2V0KG1fc3JjLCB0MikKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQyLCB0MCkKICAgICBidHFueiB0MCwgdGFnTWFzaywgLm9wVG9QcmltaXRp
dmVJc0ltbQogICAgIGJiYWVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0VHlwZSwgLm9wVG9Q
cmltaXRpdmVTbG93Q2FzZQpAQCAtMjA4NSwxMSArMjA4NCwxMSBAQCBjb21tb25PcChsbGludF9v
cF9jYXRjaCwgbWFjcm8oKSBlbmQsIG1hCiAKICAgICBsb2FkcCBWTTo6bV9leGNlcHRpb25bdDNd
LCB0MAogICAgIHN0b3JlcCAwLCBWTTo6bV9leGNlcHRpb25bdDNdCi0gICAgZ2V0KHNpemUsIE9w
Q2F0Y2gsIGV4Y2VwdGlvbiwgdDIpCisgICAgZ2V0KHNpemUsIE9wQ2F0Y2gsIG1fZXhjZXB0aW9u
LCB0MikKICAgICBzdG9yZXEgdDAsIFtjZnIsIHQyLCA4XQogCiAgICAgbG9hZHEgRXhjZXB0aW9u
OjptX3ZhbHVlW3QwXSwgdDMKLSAgICBnZXQoc2l6ZSwgT3BDYXRjaCwgdGhyb3duVmFsdWUsIHQy
KQorICAgIGdldChzaXplLCBPcENhdGNoLCBtX3Rocm93blZhbHVlLCB0MikKICAgICBzdG9yZXEg
dDMsIFtjZnIsIHQyLCA4XQogCiAgICAgdHJhY2VFeGVjdXRpb24oKQpAQCAtMjEwMiw3ICsyMTAx
LDcgQEAgZW5kKQogCiBsbGludE9wKG9wX2VuZCwgT3BFbmQsIG1hY3JvIChzaXplLCBnZXQsIGRp
c3BhdGNoKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCi0gICAgZ2V0KHZhbHVl
LCB0MCkKKyAgICBnZXQobV92YWx1ZSwgdDApCiAgICAgYXNzZXJ0Tm90Q29uc3RhbnQoc2l6ZSwg
dDApCiAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCByMAogICAgIGRvUmV0dXJuKCkKQEAgLTIyMzMs
MTMgKzIyMzIsMTMgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9yZXNvbHZlX3Njb3BlLCBPcAog
ICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAogICAgIG1hY3JvIGdldENvbnN0YW50U2NvcGUoKQotICAg
ICAgICBsb2FkcCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6OmNvbnN0YW50U2NvcGVbdDVdLCAg
dDAKKyAgICAgICAgbG9hZHAgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjptX2NvbnN0YW50U2Nv
cGVbdDVdLCAgdDAKICAgICAgICAgcmV0dXJuKHQwKQogICAgIGVuZAogCiAgICAgbWFjcm8gcmVz
b2x2ZVNjb3BlKCkKLSAgICAgICAgbG9hZGkgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpsb2Nh
bFNjb3BlRGVwdGhbdDVdLCB0MgotICAgICAgICBnZXQoc2NvcGUsIHQwKQorICAgICAgICBsb2Fk
aSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om1fbG9jYWxTY29wZURlcHRoW3Q1XSwgdDIKKyAg
ICAgICAgZ2V0KG1fc2NvcGUsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQwCiAg
ICAgICAgIGJ0aXogdDIsIC5yZXNvbHZlU2NvcGVMb29wRW5kCiAKQEAgLTIyNTIsNyArMjI1MSw3
IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcmVzb2x2ZV9zY29wZSwgT3AKICAgICAgICAgcmV0
dXJuKHQwKQogICAgIGVuZAogCi0gICAgbG9hZHAgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpy
ZXNvbHZlVHlwZVt0NV0sIHQwCisgICAgbG9hZHAgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpt
X3Jlc29sdmVUeXBlW3Q1XSwgdDAKIAogI3JHbG9iYWxQcm9wZXJ0eToKICAgICBiaW5lcSB0MCwg
R2xvYmFsUHJvcGVydHksIC5yR2xvYmFsVmFyCkBAIC0yMzAxLDEwICsyMzAwLDEwIEBAIGVuZCkK
IAogCiBtYWNybyBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9wLCBnZXQsIHNsb3dQYXRoKQotICAg
IGdldChzY29wZSwgdDApCisgICAgZ2V0KG1fc2NvcGUsIHQwKQogICAgIGxvYWRxIFtjZnIsIHQw
LCA4XSwgdDAKICAgICBsb2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSwgdDMpCi0g
ICAgbG9hZHAgJW9wJTo6TWV0YWRhdGE6OnN0cnVjdHVyZVt0NV0sIHQxCisgICAgbG9hZHAgJW9w
JTo6TWV0YWRhdGE6Om1fc3RydWN0dXJlW3Q1XSwgdDEKICAgICBicG5lcSB0MiwgdDEsIHNsb3dQ
YXRoCiBlbmQKIApAQCAtMjMxMiwxNCArMjMxMSwxNCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X2dldF9mcm9tX3Njb3BlLCBPCiAgICAgbWV0YWRhdGEodDUsIHQwKQogCiAgICAgbWFjcm8gZ2V0
UHJvcGVydHkoKQotICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9wZXJh
bmRbdDVdLCB0MQorICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om1fb3Bl
cmFuZFt0NV0sIHQxCiAgICAgICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQw
LCB0MikKICAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCB0NSwgdDIpCiAgICAg
ICAgIHJldHVybih0MikKICAgICBlbmQKIAogICAgIG1hY3JvIGdldEdsb2JhbFZhcih0ZHpDaGVj
a0lmTmVjZXNzYXJ5KQotICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9w
ZXJhbmRbdDVdLCB0MAorICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om1f
b3BlcmFuZFt0NV0sIHQwCiAgICAgICAgIGxvYWRxIFt0MF0sIHQwCiAgICAgICAgIHRkekNoZWNr
SWZOZWNlc3NhcnkodDApCiAgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgdDUs
IHQwKQpAQCAtMjMyNywxMyArMjMyNiwxMyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9m
cm9tX3Njb3BlLCBPCiAgICAgZW5kCiAKICAgICBtYWNybyBnZXRDbG9zdXJlVmFyKCkKLSAgICAg
ICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAgICAg
ICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQogICAg
ICAgICBsb2FkcSBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXNbdDAsIHQxLCA4XSwgdDAK
ICAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCB0NSwgdDApCiAgICAgICAgIHJl
dHVybih0MCkKICAgICBlbmQKIAotICAgIGxvYWRpIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6
Z2V0UHV0SW5mb1t0NV0sIHQwCisgICAgbG9hZGkgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpt
X2dldFB1dEluZm9bdDVdLCB0MAogICAgIGFuZGkgUmVzb2x2ZVR5cGVNYXNrLCB0MAogCiAjZ0ds
b2JhbFByb3BlcnR5OgpAQCAtMjM1NCw3ICsyMzUzLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9nZXRfZnJvbV9zY29wZSwgTwogCiAuZ0Nsb3N1cmVWYXI6CiAgICAgYmluZXEgdDAsIENsb3N1
cmVWYXIsIC5nR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCi0gICAgbG9hZFZh
cmlhYmxlKGdldCwgc2NvcGUsIHQwKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fc2NvcGUsIHQw
KQogICAgIGdldENsb3N1cmVWYXIoKQogCiAuZ0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczoKQEAgLTIzNzgsNyArMjM3Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0
X2Zyb21fc2NvcGUsIE8KIC5nQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
YmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuZ0R5bmFtaWMKICAg
ICB2YXJJbmplY3Rpb25DaGVjayguZ0R5bmFtaWMsIHQyKQotICAgIGxvYWRWYXJpYWJsZShnZXQs
IHNjb3BlLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MCkKICAgICBnZXRD
bG9zdXJlVmFyKCkKIAogLmdEeW5hbWljOgpAQCAtMjM4OSwxMDAgKzIzODgsMTAwIEBAIGVuZCkK
IAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9wdXRfdG9fc2NvcGUsIE9wUHV0VG9TY29wZSwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgbWFjcm8gcHV0
UHJvcGVydHkoKQotICAgICAgICBnZXQodmFsdWUsIHQxKQorICAgICAgICBnZXQobV92YWx1ZSwg
dDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyKQotICAgICAg
ICBsb2FkaXMgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b3BlcmFuZFt0NV0sIHQxCisgICAgICAg
IGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQogICAgICAg
ICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyKQogICAgIGVuZAogCiAg
ICAgbWFjcm8gcHV0R2xvYmFsVmFyaWFibGUoKQotICAgICAgICBnZXQodmFsdWUsIHQwKQorICAg
ICAgICBnZXQobV92YWx1ZSwgdDApCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDAsIHQxKQotICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjp3YXRjaHBv
aW50U2V0W3Q1XSwgdDIKLSAgICAgICAgbG9hZHAgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b3Bl
cmFuZFt0NV0sIHQwCisgICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om1fd2F0
Y2hwb2ludFNldFt0NV0sIHQyCisgICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6
Om1fb3BlcmFuZFt0NV0sIHQwCiAgICAgICAgIG5vdGlmeVdyaXRlKHQyLCAucER5bmFtaWMpCiAg
ICAgICAgIHN0b3JlcSB0MSwgW3QwXQogICAgIGVuZAogCiAgICAgbWFjcm8gcHV0Q2xvc3VyZVZh
cigpCi0gICAgICAgIGdldCh2YWx1ZSwgdDEpCisgICAgICAgIGdldChtX3ZhbHVlLCB0MSkKICAg
ICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIpCi0gICAgICAgIGxvYWRp
cyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAgICAgICAgbG9hZGlz
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQxCiAgICAgICAgIHN0b3Jl
cSB0MiwgSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzW3QwLCB0MSwgOF0KICAgICBlbmQK
IAogICAgIG1hY3JvIHB1dExvY2FsQ2xvc3VyZVZhcigpCi0gICAgICAgIGdldCh2YWx1ZSwgdDEp
CisgICAgICAgIGdldChtX3ZhbHVlLCB0MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MSwgdDIpCi0gICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Ondh
dGNocG9pbnRTZXRbdDVdLCB0MworICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRh
OjptX3dhdGNocG9pbnRTZXRbdDVdLCB0MwogICAgICAgICBidHB6IHQzLCAubm9WYXJpYWJsZVdh
dGNocG9pbnRTZXQKICAgICAgICAgbm90aWZ5V3JpdGUodDMsIC5wRHluYW1pYykKICAgICAubm9W
YXJpYWJsZVdhdGNocG9pbnRTZXQ6Ci0gICAgICAgIGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1ldGFk
YXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAgICAgICAgbG9hZGlzIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om1fb3BlcmFuZFt0NV0sIHQxCiAgICAgICAgIHN0b3JlcSB0MiwgSlNMZXhpY2FsRW52aXJv
bm1lbnRfdmFyaWFibGVzW3QwLCB0MSwgOF0KICAgICBlbmQKIAogICAgIG1hY3JvIGNoZWNrVERa
SW5HbG9iYWxQdXRUb1Njb3BlSWZOZWNlc3NhcnkoKQotICAgICAgICBsb2FkaXMgT3BQdXRUb1Nj
b3BlOjpNZXRhZGF0YTo6Z2V0UHV0SW5mb1t0NV0sIHQwCisgICAgICAgIGxvYWRpcyBPcFB1dFRv
U2NvcGU6Ok1ldGFkYXRhOjptX2dldFB1dEluZm9bdDVdLCB0MAogICAgICAgICBhbmRpIEluaXRp
YWxpemF0aW9uTW9kZU1hc2ssIHQwCiAgICAgICAgIHJzaGlmdGkgSW5pdGlhbGl6YXRpb25Nb2Rl
U2hpZnQsIHQwCiAgICAgICAgIGJpbmVxIHQwLCBOb3RJbml0aWFsaXphdGlvbiwgLm5vTmVlZEZv
clREWkNoZWNrCi0gICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9wZXJhbmRb
dDVdLCB0MAorICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRb
dDVdLCB0MAogICAgICAgICBsb2FkcSBbdDBdLCB0MAogICAgICAgICBicWVxIHQwLCBWYWx1ZUVt
cHR5LCAucER5bmFtaWMKICAgICAubm9OZWVkRm9yVERaQ2hlY2s6CiAgICAgZW5kCiAKICAgICBt
ZXRhZGF0YSh0NSwgdDApCi0gICAgbG9hZGkgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6Z2V0UHV0
SW5mb1t0NV0sIHQwCisgICAgbG9hZGkgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6bV9nZXRQdXRJ
bmZvW3Q1XSwgdDAKICAgICBhbmRpIFJlc29sdmVUeXBlTWFzaywgdDAKIAogI3BMb2NhbENsb3N1
cmVWYXI6CiAgICAgYmluZXEgdDAsIExvY2FsQ2xvc3VyZVZhciwgLnBHbG9iYWxQcm9wZXJ0eQot
ICAgIGxvYWRWYXJpYWJsZShnZXQsIHNjb3BlLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBt
X3Njb3BlLCB0MCkKICAgICBwdXRMb2NhbENsb3N1cmVWYXIoKQotICAgIHdyaXRlQmFycmllck9u
T3BlcmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVy
YW5kcyhzaXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEds
b2JhbFByb3BlcnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnBHbG9iYWxWYXIK
ICAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKE9wUHV0VG9TY29wZSwgZ2V0LCAucER5bmFtaWMp
CiAgICAgcHV0UHJvcGVydHkoKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0
LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1f
c2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEdsb2JhbFZhcjoKICAgICBiaW5l
cSB0MCwgR2xvYmFsVmFyLCAucEdsb2JhbExleGljYWxWYXIKICAgICBwdXRHbG9iYWxWYXJpYWJs
ZSgpCi0gICAgd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qoc2l6ZSwgZ2V0LCB2YWx1ZSkKKyAg
ICB3cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBnZXQsIG1fdmFsdWUpCiAgICAgZGlz
cGF0Y2goKQogCiAucEdsb2JhbExleGljYWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2JhbExleGlj
YWxWYXIsIC5wQ2xvc3VyZVZhcgogICAgIGNoZWNrVERaSW5HbG9iYWxQdXRUb1Njb3BlSWZOZWNl
c3NhcnkoKQogICAgIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3cml0ZUJhcnJpZXJPbkdsb2Jh
bExleGljYWxFbnZpcm9ubWVudChzaXplLCBnZXQsIHZhbHVlKQorICAgIHdyaXRlQmFycmllck9u
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50KHNpemUsIGdldCwgbV92YWx1ZSkKICAgICBkaXNwYXRj
aCgpCiAKIC5wQ2xvc3VyZVZhcjoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhciwgLnBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29w
ZSwgdDApCisgICAgbG9hZFZhcmlhYmxlKGdldCwgbV9zY29wZSwgdDApCiAgICAgcHV0Q2xvc3Vy
ZVZhcigpCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIHNjb3BlLCB2YWx1
ZSkKKyAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9zY29wZSwgbV92YWx1
ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Ms
IC5wR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIGxvYWRXaXRoU3RydWN0dXJl
Q2hlY2soT3BQdXRUb1Njb3BlLCBnZXQsIC5wRHluYW1pYykKICAgICBwdXRQcm9wZXJ0eSgpCi0g
ICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIHNjb3BlLCB2YWx1ZSkKKyAgICB3
cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9zY29wZSwgbV92YWx1ZSkKICAgICBk
aXNwYXRjaCgpCiAKIC5wR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5l
cSB0MCwgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5wRHluYW1pYywg
dDIpCiAgICAgcHV0R2xvYmFsVmFyaWFibGUoKQotICAgIHdyaXRlQmFycmllck9uR2xvYmFsT2Jq
ZWN0KHNpemUsIGdldCwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qoc2l6
ZSwgZ2V0LCBtX3ZhbHVlKQogICAgIGRpc3BhdGNoKCkKIAogLnBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKQEAgLTI0OTAsMTUgKzI0ODksMTUgQEAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9wdXRfdG9fc2NvcGUsIE9wUAogICAgIHZhckluamVjdGlvbkNoZWNrKC5wRHlu
YW1pYywgdDIpCiAgICAgY2hlY2tURFpJbkdsb2JhbFB1dFRvU2NvcGVJZk5lY2Vzc2FyeSgpCiAg
ICAgcHV0R2xvYmFsVmFyaWFibGUoKQotICAgIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50KHNpemUsIGdldCwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25HbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoc2l6ZSwgZ2V0LCBtX3ZhbHVlKQogICAgIGRpc3BhdGNoKCkKIAogLnBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5wTW9kdWxlVmFyCiAgICAgdmFySW5qZWN0aW9uQ2hl
Y2soLnBEeW5hbWljLCB0MikKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDApCisgICAg
bG9hZFZhcmlhYmxlKGdldCwgbV9zY29wZSwgdDApCiAgICAgcHV0Q2xvc3VyZVZhcigpCi0gICAg
d3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIHNjb3BlLCB2YWx1ZSkKKyAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9zY29wZSwgbV92YWx1ZSkKICAgICBkaXNw
YXRjaCgpCiAKIC5wTW9kdWxlVmFyOgpAQCAtMjUxMywyNiArMjUxMiwyNiBAQCBlbmQpCiAKIAog
bGxpbnRPcFdpdGhQcm9maWxlKG9wX2dldF9mcm9tX2FyZ3VtZW50cywgT3BHZXRGcm9tQXJndW1l
bnRzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGxvYWRWYXJpYWJs
ZShnZXQsIGFyZ3VtZW50cywgdDApCi0gICAgZ2V0dShzaXplLCBPcEdldEZyb21Bcmd1bWVudHMs
IGluZGV4LCB0MSkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX2FyZ3VtZW50cywgdDApCisgICAg
Z2V0dShzaXplLCBPcEdldEZyb21Bcmd1bWVudHMsIG1faW5kZXgsIHQxKQogICAgIGxvYWRxIERp
cmVjdEFyZ3VtZW50c19zdG9yYWdlW3QwLCB0MSwgOF0sIHQwCiAgICAgcmV0dXJuKHQwKQogZW5k
KQogCiAKIGxsaW50T3Aob3BfcHV0X3RvX2FyZ3VtZW50cywgT3BQdXRUb0FyZ3VtZW50cywgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgbG9hZFZhcmlhYmxlKGdldCwgYXJndW1lbnRz
LCB0MCkKLSAgICBnZXR1KHNpemUsIE9wUHV0VG9Bcmd1bWVudHMsIGluZGV4LCB0MSkKLSAgICBn
ZXQodmFsdWUsIHQzKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fYXJndW1lbnRzLCB0MCkKKyAg
ICBnZXR1KHNpemUsIE9wUHV0VG9Bcmd1bWVudHMsIG1faW5kZXgsIHQxKQorICAgIGdldChtX3Zh
bHVlLCB0MykKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQzLCB0MikKICAgICBz
dG9yZXEgdDIsIERpcmVjdEFyZ3VtZW50c19zdG9yYWdlW3QwLCB0MSwgOF0KLSAgICB3cml0ZUJh
cnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYXJndW1lbnRzLCB2YWx1ZSkKKyAgICB3cml0ZUJh
cnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9hcmd1bWVudHMsIG1fdmFsdWUpCiAgICAgZGlz
cGF0Y2goKQogZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2dldF9wYXJlbnRfc2NvcGUs
IE9wR2V0UGFyZW50U2NvcGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0g
ICAgbG9hZFZhcmlhYmxlKGdldCwgc2NvcGUsIHQwKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1f
c2NvcGUsIHQwKQogICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFt0MF0sIHQwCiAgICAgcmV0dXJu
KHQwKQogZW5kKQpAQCAtMjU0OCw3ICsyNTQ3LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9w
cm9maWxlX3R5cGUsIE9wUAogICAgIGxvYWRwIFR5cGVQcm9maWxlckxvZzo6bV9jdXJyZW50TG9n
RW50cnlQdHJbdDFdLCB0MgogCiAgICAgIyB0MCBpcyBob2xkaW5nIHRoZSBKU1ZhbHVlIGFyZ3Vt
ZW50LgotICAgIGdldCh0YXJnZXQsIHQzKQorICAgIGdldChtX3RhcmdldCwgdDMpCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MywgdDApCiAKICAgICBicWVxIHQwLCBWYWx1ZUVt
cHR5LCAub3BQcm9maWxlVHlwZURvbmUKQEAgLTI1NTcsNyArMjU1Niw3IEBAIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfcHJvZmlsZV90eXBlLCBPcFAKICAgICAKICAgICAjIFN0b3JlIHRoZSBUeXBl
TG9jYXRpb24gb250byB0aGUgbG9nIGVudHJ5LgogICAgIG1ldGFkYXRhKHQ1LCB0MykKLSAgICBs
b2FkcCBPcFByb2ZpbGVUeXBlOjpNZXRhZGF0YTo6dHlwZUxvY2F0aW9uW3Q1XSwgdDMKKyAgICBs
b2FkcCBPcFByb2ZpbGVUeXBlOjpNZXRhZGF0YTo6bV90eXBlTG9jYXRpb25bdDVdLCB0MwogICAg
IHN0b3JlcCB0MywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25bdDJdCiAKICAg
ICBidHF6IHQwLCB0YWdNYXNrLCAub3BQcm9maWxlVHlwZUlzQ2VsbApAQCAtMjU4Myw3ICsyNTgy
LDcgQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3Byb2ZpbGVfY29udHJvbF9mbG93
LCBPcFByb2ZpbGVDb250cm9sRmxvdywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCiAgICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGxvYWRwIE9wUHJvZmlsZUNv
bnRyb2xGbG93OjpNZXRhZGF0YTo6YmFzaWNCbG9ja0xvY2F0aW9uW3Q1XSwgdDAKKyAgICBsb2Fk
cCBPcFByb2ZpbGVDb250cm9sRmxvdzo6TWV0YWRhdGE6Om1fYmFzaWNCbG9ja0xvY2F0aW9uW3Q1
XSwgdDAKICAgICBhZGRxIDEsIEJhc2ljQmxvY2tMb2NhdGlvbjo6bV9leGVjdXRpb25Db3VudFt0
MF0KICAgICBkaXNwYXRjaCgpCiBlbmQpCkBAIC0yNTkyLDcgKzI1OTEsNyBAQCBlbmQpCiBsbGlu
dE9wV2l0aFJldHVybihvcF9nZXRfcmVzdF9sZW5ndGgsIE9wR2V0UmVzdExlbmd0aCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsg
QXJndW1lbnRDb3VudFtjZnJdLCB0MAogICAgIHN1YmkgMSwgdDAKLSAgICBnZXR1KHNpemUsIE9w
R2V0UmVzdExlbmd0aCwgbnVtUGFyYW1ldGVyc1RvU2tpcCwgdDEpCisgICAgZ2V0dShzaXplLCBP
cEdldFJlc3RMZW5ndGgsIG1fbnVtUGFyYW1ldGVyc1RvU2tpcCwgdDEpCiAgICAgYmlsdGVxIHQw
LCB0MSwgLnN0b3JlWmVybwogICAgIHN1YmkgdDEsIHQwCiAgICAgam1wIC5ib3hVcApAQCAtMjYx
MSw3ICsyNjEwLDcgQEAgbGxpbnRPcChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUsIAog
ICAgIHN0b3JlcCB0MSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0OjpjYWxsZXJGcmFtZVt0MF0KICAg
ICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDEKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNrZW46OlBh
Y2tldDo6Y2FsbGVlW3QwXQotICAgIGxvYWRWYXJpYWJsZShnZXQsIHNjb3BlLCB0MSkKKyAgICBs
b2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MSkKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNr
ZW46OlBhY2tldDo6c2NvcGVbdDBdCiAgICAgZGlzcGF0Y2goKQogLm9wTG9nU2hhZG93Q2hpY2tl
blByb2xvZ3VlU2xvdzoKQEAgLTI2MjQsOSArMjYyMyw5IEBAIGxsaW50T3Aob3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWwsIE9wTG8KICAgICBhY3F1aXJlU2hhZG93Q2hpY2tlblBhY2tldCgub3BM
b2dTaGFkb3dDaGlja2VuVGFpbFNsb3cpCiAgICAgc3RvcmVwIGNmciwgU2hhZG93Q2hpY2tlbjo6
UGFja2V0OjpmcmFtZVt0MF0KICAgICBzdG9yZXAgU2hhZG93Q2hpY2tlblRhaWxNYXJrZXIsIFNo
YWRvd0NoaWNrZW46OlBhY2tldDo6Y2FsbGVlW3QwXQotICAgIGxvYWRWYXJpYWJsZShnZXQsIHRo
aXNWYWx1ZSwgdDEpCisgICAgbG9hZFZhcmlhYmxlKGdldCwgbV90aGlzVmFsdWUsIHQxKQogICAg
IHN0b3JlcCB0MSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aGlzVmFsdWVbdDBdCi0gICAgbG9h
ZFZhcmlhYmxlKGdldCwgc2NvcGUsIHQxKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fc2NvcGUs
IHQxKQogICAgIHN0b3JlcCB0MSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0OjpzY29wZVt0MF0KICAg
ICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNrZW46
OlBhY2tldDo6Y29kZUJsb2NrW3QwXQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjM5OTkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzIzLDE1ICszMjMsMTUgQEAgbWFjcm8gZGlzcGF0Y2hPcChzaXplLCBvcCkKICAgICBz
aXplKGRpc3BhdGNoTmFycm93LCBkaXNwYXRjaFdpZGUsIG1hY3JvIChkaXNwYXRjaCkgZGlzcGF0
Y2goKSBlbmQpCiBlbmQKIAotbWFjcm8gZ2V0dShzaXplLCBvcCwgZmllbGQsIGRzdCkKK21hY3Jv
IGdldHUoc2l6ZSwgb3AsIGZpZWxkTmFtZSwgZHN0KQogICAgIHNpemUoZ2V0dU9wZXJhbmROYXJy
b3csIGdldHVPcGVyYW5kV2lkZSwgbWFjcm8gKGdldHUpCi0gICAgICAgIGdldHUob3AsIGZpZWxk
LCBkc3QpCisgICAgICAgIGdldHUob3AsIGZpZWxkTmFtZSwgZHN0KQogICAgIGVuZCkKIGVuZAog
Ci1tYWNybyBnZXQoc2l6ZSwgb3AsIGZpZWxkLCBkc3QpCittYWNybyBnZXQoc2l6ZSwgb3AsIGZp
ZWxkTmFtZSwgZHN0KQogICAgIHNpemUoZ2V0T3BlcmFuZE5hcnJvdywgZ2V0T3BlcmFuZFdpZGUs
IG1hY3JvIChnZXQpCi0gICAgICAgIGdldChvcCwgZmllbGQsIGRzdCkKKyAgICAgICAgZ2V0KG9w
LCBmaWVsZE5hbWUsIGRzdCkKICAgICBlbmQpCiBlbmQKIApAQCAtMzQ1LDcgKzM0NSw3IEBAIGVu
ZAogCiBtYWNybyBtZXRhZGF0YShzaXplLCBvcGNvZGUsIGRzdCwgc2NyYXRjaCkKICAgICBsb2Fk
aSBjb25zdGV4cHIgJW9wY29kZSU6Om9wY29kZUlEICogNFttZXRhZGF0YVRhYmxlXSwgZHN0ICMg
b2Zmc2V0ID0gbWV0YWRhdGFUYWJsZTx1bnNpZ25lZCo+W29wY29kZUlEXQotICAgIGdldHUoc2l6
ZSwgb3Bjb2RlLCBtZXRhZGF0YUlELCBzY3JhdGNoKSAjIHNjcmF0Y2ggPSBieXRlY29kZS5tZXRh
ZGF0YUlECisgICAgZ2V0dShzaXplLCBvcGNvZGUsIG1fbWV0YWRhdGFJRCwgc2NyYXRjaCkgIyBz
Y3JhdGNoID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlECiAgICAgbXVsaSBzaXplb2YgJW9wY29kZSU6
Ok1ldGFkYXRhLCBzY3JhdGNoICMgc2NyYXRjaCAqPSBzaXplb2YoT3A6Ok1ldGFkYXRhKQogICAg
IGFkZGkgc2NyYXRjaCwgZHN0ICMgb2Zmc2V0ICs9IHNjcmF0Y2gKICAgICBhZGRwIG1ldGFkYXRh
VGFibGUsIGRzdCAjIHJldHVybiAmbWV0YWRhdGFUYWJsZVtvZmZzZXRdCkBAIC0zNzcsOCArMzc3
LDggQEAgZW5kCiAKIG1hY3JvIGxsaW50T3AobmFtZSwgb3AsIGZuKQogICAgIGNvbW1vbk9wKGxs
aW50XyVuYW1lJSwgdHJhY2VFeGVjdXRpb24sIG1hY3JvKHNpemUpCi0gICAgICAgIG1hY3JvIGdl
dEltcGwoZmllbGQsIGRzdCkKLSAgICAgICAgICAgIGdldChzaXplLCBvcCwgZmllbGQsIGRzdCkK
KyAgICAgICAgbWFjcm8gZ2V0SW1wbChmaWVsZE5hbWUsIGRzdCkKKyAgICAgICAgICAgIGdldChz
aXplLCBvcCwgZmllbGROYW1lLCBkc3QpCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3JvIGRp
c3BhdGNoSW1wbCgpCkBAIC00MDgsOCArNDA4LDggQEAgZW5kCiAKIG1hY3JvIGxsaW50T3BXaXRo
SnVtcChuYW1lLCBvcCwgaW1wbCkKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG5hbWUsIG9wLCBt
YWNybyhzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBtYWNy
byBqdW1wKGZpZWxkKQotICAgICAgICAgICAgZ2V0KGZpZWxkLCB0MCkKKyAgICAgICAgbWFjcm8g
anVtcChmaWVsZE5hbWUpCisgICAgICAgICAgICBnZXQoZmllbGROYW1lLCB0MCkKICAgICAgICAg
ICAgIGp1bXBJbXBsKHQwKQogICAgICAgICBlbmQKIApAQCAtODU0LDEwICs4NTQsMTAgQEAgbWFj
cm8gcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKGRlcwogICAgIGVuZAogZW5kCiAKLW1h
Y3JvIHVucG9pc29uKHBvaXNvbiwgZmllbGQsIHNjcmF0Y2gpCittYWNybyB1bnBvaXNvbihwb2lz
b24sIGZpZWxkUmVnLCBzY3JhdGNoKQogICAgIGlmIFBPSVNPTgogICAgICAgICBsb2FkcCBwb2lz
b24sIHNjcmF0Y2gKLSAgICAgICAgeG9ycCBzY3JhdGNoLCBmaWVsZAorICAgICAgICB4b3JwIHNj
cmF0Y2gsIGZpZWxkUmVnCiAgICAgZW5kCiBlbmQKIApAQCAtMTU1NSw3ICsxNTU1LDcgQEAgY29t
cGFyZVVuc2lnbmVkT3AoYmVsb3dlcSwgT3BCZWxvd2VxLAogCiAKIGxsaW50T3BXaXRoSnVtcChv
cF9qbXAsIE9wSm1wLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1wLCBkaXNwYXRjaCkKLSAgICBqdW1w
KHRhcmdldCkKKyAgICBqdW1wKG1fdGFyZ2V0KQogZW5kKQogCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MjM5OTkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNSw4ICsxMjUsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgYm9vbCBiQ29uZGl0aW9uID0gKGNvbmRpdGlvbik7ICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKGJDb25kaXRpb24pICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHBjID0gYnl0ZWNvZGUudGFyZ2V0
IFwKLSAgICAgICAgICAgICAgICA/IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24q
PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwYykgKyBieXRlY29kZS50YXJnZXQp
IFwKKyAgICAgICAgICAgIHBjID0gYnl0ZWNvZGUubV90YXJnZXQgXAorICAgICAgICAgICAgICAg
ID8gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdWludDhfdCo+KHBjKSArIGJ5dGVjb2RlLm1fdGFyZ2V0KSBcCiAgICAgICAgICAgICAg
ICAgOiBleGVjLT5jb2RlQmxvY2soKS0+b3V0T2ZMaW5lSnVtcFRhcmdldChwYyk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcGMgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4ocGMpICsgcGMtPnNpemUoKSk7IFwKQEAgLTE0MSw3ICsxNDEsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgRU5EX0lNUEwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIH0gd2hpbGUgKGZhbHNlKQogCi0jZGVmaW5lIFJFVFVSTl9XSVRIX1BST0ZJTElORyh2YWx1
ZV9fLCBwcm9maWxpbmdBY3Rpb25fXykgUkVUVVJOX1dJVEhfUFJPRklMSU5HX0NVU1RPTShieXRl
Y29kZS5kc3QsIHZhbHVlX18sIHByb2ZpbGluZ0FjdGlvbl9fKQorI2RlZmluZSBSRVRVUk5fV0lU
SF9QUk9GSUxJTkcodmFsdWVfXywgcHJvZmlsaW5nQWN0aW9uX18pIFJFVFVSTl9XSVRIX1BST0ZJ
TElOR19DVVNUT00oYnl0ZWNvZGUubV9kc3QsIHZhbHVlX18sIHByb2ZpbGluZ0FjdGlvbl9fKQog
CiAjZGVmaW5lIFJFVFVSTih2YWx1ZSkgXAogICAgIFJFVFVSTl9XSVRIX1BST0ZJTElORyh2YWx1
ZSwgeyB9KQpAQCAtMTUwLDcgKzE1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIFJFVFVSTl9X
SVRIX1BST0ZJTElORyh2YWx1ZV9fLCBQUk9GSUxFX1ZBTFVFKHJldHVyblZhbHVlX18pKQogCiAj
ZGVmaW5lIFBST0ZJTEVfVkFMVUUodmFsdWUpIGRvIHsgXAotICAgICAgICBieXRlY29kZS5tZXRh
ZGF0YShleGVjKS5wcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7
IFwKKyAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEoZXhlYykubV9wcm9maWxlLm1fYnVja2V0c1sw
XSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAogI2Rl
ZmluZSBDQUxMX0VORF9JTVBMKGV4ZWMsIGNhbGxUYXJnZXQsIGNhbGxUYXJnZXRUYWcpIFwKQEAg
LTIxNSw3ICsyMTUsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3Njb3BlZF9h
CiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzPigpOwotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBzY29wZSA9IGpzQ2Fz
dDxKU0xleGljYWxFbnZpcm9ubWVudCo+KEdFVChieXRlY29kZS5zY29wZSkuanNWYWx1ZSgpKTsK
KyAgICBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJv
bm1lbnQqPihHRVQoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKICAgICBTY29wZWRBcmd1
bWVudHNUYWJsZSogdGFibGUgPSBzY29wZS0+c3ltYm9sVGFibGUoKS0+YXJndW1lbnRzKCk7CiAg
ICAgUkVUVVJOKFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKGV4ZWMsIHRhYmxlLCBz
Y29wZSkpOwogfQpAQCAtMjMyLDE2ICsyMzIsMTYgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2NyZWF0ZV90aGlzKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cENyZWF0ZVRoaXM+KCk7CiAgICAgSlNPYmplY3QqIHJlc3VsdDsKLSAgICBKU09iamVjdCogY29u
c3RydWN0b3JBc09iamVjdCA9IGFzT2JqZWN0KEdFVChieXRlY29kZS5jYWxsZWUpLmpzVmFsdWUo
KSk7CisgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yQXNPYmplY3QgPSBhc09iamVjdChHRVQoYnl0
ZWNvZGUubV9jYWxsZWUpLmpzVmFsdWUoKSk7CiAgICAgaWYgKGNvbnN0cnVjdG9yQXNPYmplY3Qt
PnR5cGUoKSA9PSBKU0Z1bmN0aW9uVHlwZSAmJiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVj
dG9yQXNPYmplY3QpLT5jYW5Vc2VBbGxvY2F0aW9uUHJvZmlsZSgpKSB7CiAgICAgICAgIEpTRnVu
Y3Rpb24qIGNvbnN0cnVjdG9yID0ganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvckFzT2Jq
ZWN0KTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4mIGNhY2hlZENhbGxlZSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGV4ZWMpLmNhY2hlZENhbGxlZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4mIGNhY2hlZENhbGxlZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpLm1fY2FjaGVkQ2Fs
bGVlOwogICAgICAgICBpZiAoIWNhY2hlZENhbGxlZSkKICAgICAgICAgICAgIGNhY2hlZENhbGxl
ZS5zZXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIGVsc2Ug
aWYgKGNhY2hlZENhbGxlZS51bnZhbGlkYXRlZEdldCgpICE9IEpTQ2VsbDo6c2Vlbk11bHRpcGxl
Q2FsbGVlT2JqZWN0cygpICYmIGNhY2hlZENhbGxlZS5nZXQoKSAhPSBjb25zdHJ1Y3RvcikKICAg
ICAgICAgICAgIGNhY2hlZENhbGxlZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTQ2VsbDo6c2Vl
bk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKTsKIAotICAgICAgICBzaXplX3QgaW5saW5lQ2FwYWNp
dHkgPSBieXRlY29kZS5pbmxpbmVDYXBhY2l0eTsKKyAgICAgICAgc2l6ZV90IGlubGluZUNhcGFj
aXR5ID0gYnl0ZWNvZGUubV9pbmxpbmVDYXBhY2l0eTsKICAgICAgICAgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUqIGFsbG9jYXRpb25Qcm9maWxlID0gY29uc3RydWN0b3ItPmVuc3VyZVJhcmVEYXRh
QW5kQWxsb2NhdGlvblByb2ZpbGUoZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFsbG9jYXRpb25Q
cm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYywgc3RydWN0dXJlKTsKQEAgLTI2OSwxOCArMjY5LDE4IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF90b190aGlzKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGV4ZWMpOwotICAgIEpTVmFsdWUgdjEgPSBHRVQoYnl0ZWNvZGUuc3JjRHN0KS5qc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSB2MSA9IEdFVChieXRlY29kZS5tX3NyY0RzdCkuanNWYWx1ZSgpOwogICAg
IGlmICh2MS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIG15U3RydWN0dXJlID0gdjEu
YXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIFN0cnVjdHVyZSogb3RoZXJTdHJ1Y3R1
cmUgPSBtZXRhZGF0YS5jYWNoZWRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVyZSog
b3RoZXJTdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZS5nZXQoKTsKICAgICAg
ICAgaWYgKG15U3RydWN0dXJlICE9IG90aGVyU3RydWN0dXJlKSB7CiAgICAgICAgICAgICBpZiAo
b3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEudG9UaGlzU3RhdHVzID0g
VG9UaGlzQ29uZmxpY3RlZDsKLSAgICAgICAgICAgIG1ldGFkYXRhLmNhY2hlZFN0cnVjdHVyZS5z
ZXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBteVN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAg
bWV0YWRhdGEubV90b1RoaXNTdGF0dXMgPSBUb1RoaXNDb25mbGljdGVkOworICAgICAgICAgICAg
bWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmUuc2V0KHZtLCBleGVjLT5jb2RlQmxvY2soKSwgbXlT
dHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbWV0YWRhdGEudG9U
aGlzU3RhdHVzID0gVG9UaGlzQ29uZmxpY3RlZDsKLSAgICAgICAgbWV0YWRhdGEuY2FjaGVkU3Ry
dWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1ldGFkYXRhLm1fdG9UaGlzU3RhdHVzID0gVG9UaGlz
Q29uZmxpY3RlZDsKKyAgICAgICAgbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmUuY2xlYXIoKTsK
ICAgICB9CiAgICAgLy8gTm90ZTogV2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgdmFsdWUgcHJvZmls
aW5nIGhlcmUgb24gdGhlIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aAogICAgIC8vIGp1c3QgcmV0
dXJucyB0aGUgaW5wdXQgdG8gdG9fdGhpcyBpZiB0aGUgc3RydWN0dXJlIGNoZWNrIHN1Y2NlZWRz
LiBJZiB0aGUgc3RydWN0dXJlCkBAIC0yODksNyArMjg5LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3RvX3RoaXMpCiAgICAgLy8gdGhlIHNhbWUgU3BlY3VsYXRlZFR5cGUuIFRoZXJlZm9y
ZSwgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB2YWx1ZSBwcm9maWxpbmcgb24gdGhlCiAg
ICAgLy8gZmFzdCBwYXRoLgogICAgIGF1dG8gdmFsdWUgPSB2MS50b1RoaXMoZXhlYywgZXhlYy0+
Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0cmljdE1vZGUp
OwotICAgIFJFVFVSTl9XSVRIX1BST0ZJTElOR19DVVNUT00oYnl0ZWNvZGUuc3JjRHN0LCB2YWx1
ZSwgUFJPRklMRV9WQUxVRSh2YWx1ZSkpOworICAgIFJFVFVSTl9XSVRIX1BST0ZJTElOR19DVVNU
T00oYnl0ZWNvZGUubV9zcmNEc3QsIHZhbHVlLCBQUk9GSUxFX1ZBTFVFKHZhbHVlKSk7CiB9CiAK
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90aHJvd190ZHpfZXJyb3IpCkBAIC0zMTQsOTAgKzMx
NCw5MCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbm90KQogewogICAgIEJFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5vdD4oKTsKLSAgICBSRVRVUk4oanNCb29sZWFu
KCFHRVRfQyhieXRlY29kZS5vcGVyYW5kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKSk7Cisg
ICAgUkVUVVJOKGpzQm9vbGVhbighR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCku
dG9Cb29sZWFuKGV4ZWMpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9lcSkKIHsK
ICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFcT4oKTsKLSAgICBS
RVRVUk4oanNCb29sZWFuKEpTVmFsdWU6OmVxdWFsKGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLmxocyku
anNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSkpKTsKKyAgICBSRVRVUk4o
anNCb29sZWFuKEpTVmFsdWU6OmVxdWFsKGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1Zh
bHVlKCksIEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKSk7CiB9CiAKIFNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9uZXEpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wTmVxPigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oIUpTVmFsdWU6OmVxdWFs
KGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5yaHMp
LmpzVmFsdWUoKSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKCFKU1ZhbHVlOjplcXVhbChleGVj
LCBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3Jocyku
anNWYWx1ZSgpKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3RyaWN0ZXEpCiB7
CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wU3RyaWN0ZXE+KCk7
Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBHRVRfQyhi
eXRlY29kZS5saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKSk7
CisgICAgUkVUVVJOKGpzQm9vbGVhbihKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBHRVRfQyhi
eXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgp
KSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbnN0cmljdGVxKQogewogICAgIEJF
R0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5zdHJpY3RlcT4oKTsKLSAgICBS
RVRVUk4oanNCb29sZWFuKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBHRVRfQyhieXRlY29k
ZS5saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKSk7CisgICAg
UkVUVVJOKGpzQm9vbGVhbighSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgR0VUX0MoYnl0ZWNv
ZGUubV9saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsK
IH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xlc3MpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTGVzcz4oKTsKLSAgICBSRVRVUk4oanNCb29sZWFu
KGpzTGVzczx0cnVlPihleGVjLCBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKSwgR0VUX0Mo
Ynl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihqc0xlc3M8
dHJ1ZT4oZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNv
ZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xl
c3NlcSkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BMZXNz
ZXE+KCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihqc0xlc3NFcTx0cnVlPihleGVjLCBHRVRfQyhi
eXRlY29kZS5saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKSk7
CisgICAgUkVUVVJOKGpzQm9vbGVhbihqc0xlc3NFcTx0cnVlPihleGVjLCBHRVRfQyhieXRlY29k
ZS5tX2xocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSkpOwog
fQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ3JlYXRlcikKIHsKICAgICBCRUdJTigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHcmVhdGVyPigpOwotICAgIFJFVFVSTihqc0Jv
b2xlYW4oanNMZXNzPGZhbHNlPihleGVjLCBHRVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSwg
R0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCkpKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihq
c0xlc3M8ZmFsc2U+KGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCksIEdFVF9D
KGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9ncmVhdGVyZXEpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wR3JlYXRlcmVxPigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oanNMZXNzRXE8ZmFsc2U+
KGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5saHMp
LmpzVmFsdWUoKSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGpzTGVzc0VxPGZhbHNlPihleGVj
LCBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX2xocyku
anNWYWx1ZSgpKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW5jKQogewogICAg
IEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEluYz4oKTsKLSAgICBSRVRV
Uk5fV0lUSF9QUk9GSUxJTkdfQ1VTVE9NKGJ5dGVjb2RlLnNyY0RzdCwganNOdW1iZXIoR0VUKGJ5
dGVjb2RlLnNyY0RzdCkuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpICsgMSksIHsgfSk7CisgICAg
UkVUVVJOX1dJVEhfUFJPRklMSU5HX0NVU1RPTShieXRlY29kZS5tX3NyY0RzdCwganNOdW1iZXIo
R0VUKGJ5dGVjb2RlLm1fc3JjRHN0KS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYykgKyAxKSwgeyB9
KTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlYykKIHsKICAgICBCRUdJTigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BEZWM+KCk7Ci0gICAgUkVUVVJOX1dJVEhfUFJP
RklMSU5HX0NVU1RPTShieXRlY29kZS5zcmNEc3QsIGpzTnVtYmVyKEdFVChieXRlY29kZS5zcmNE
c3QpLmpzVmFsdWUoKS50b051bWJlcihleGVjKSAtIDEpLCB7IH0pOworICAgIFJFVFVSTl9XSVRI
X1BST0ZJTElOR19DVVNUT00oYnl0ZWNvZGUubV9zcmNEc3QsIGpzTnVtYmVyKEdFVChieXRlY29k
ZS5tX3NyY0RzdCkuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpIC0gMSksIHsgfSk7CiB9CiAKIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19zdHJpbmcpCiB7CiAgICAgQkVHSU4oKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgUkVUVVJOKEdFVF9DKGJ5
dGVjb2RlLm9wZXJhbmQpLmpzVmFsdWUoKS50b1N0cmluZyhleGVjKSk7CisgICAgUkVUVVJOKEdF
VF9DKGJ5dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAog
I2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFy
aXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpTVmFs
dWUgb3BlcmFuZCkKIHsKLSAgICBBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5hcml0
aFByb2ZpbGU7CisgICAgQXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0aFBy
b2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlTEhTKG9wZXJhbmQpOwogICAgIEFTU0VSVChyZXN1
bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAgICAgaWYgKHJlc3VsdC5pc051
bWJlcigpKSB7CkBAIC00MzQsNyArNDM0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25l
Z2F0ZSkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZWdhdGU+
KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBK
U1ZhbHVlIG9wZXJhbmQgPSBHRVRfQyhieXRlY29kZS5vcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAg
SlNWYWx1ZSBvcGVyYW5kID0gR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7CiAg
ICAgSlNWYWx1ZSBwcmltVmFsdWUgPSBvcGVyYW5kLnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZlck51
bWJlcik7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKQEAgLTQ5MSw3ICs0OTEsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfdG9fbnVtYmVyKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcFRvTnVtYmVyPigpOwotICAgIEpTVmFsdWUgYXJndW1lbnQg
PSBHRVRfQyhieXRlY29kZS5vcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBhcmd1bWVu
dCA9IEdFVF9DKGJ5dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmVz
dWx0ID0ganNOdW1iZXIoYXJndW1lbnQudG9OdW1iZXIoZXhlYykpOwogICAgIFJFVFVSTl9QUk9G
SUxFRChyZXN1bHQpOwogfQpAQCAtNTAwLDkgKzUwMCw5IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF90b19vYmplY3QpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudCA9IEdFVF9DKGJ5dGVjb2Rl
Lm9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gR0VUX0MoYnl0ZWNv
ZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgaWYgKFVOTElLRUxZKGFyZ3VtZW50LmlzVW5k
ZWZpbmVkT3JOdWxsKCkpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZXhl
Yy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUubWVzc2FnZSk7CisgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9tZXNzYWdlKTsKICAgICAgICAgaWYgKCFpZGVudC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywgaWRlbnQuaW1wbCgpKSk7CiAgICAgfQpA
QCAtNTE0LDggKzUxNCw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9hZGQpCiB7CiAgICAg
QkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQWRkPigpOwotICAgIEpTVmFs
dWUgdjEgPSBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHYyID0g
R0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2MSA9IEdFVF9DKGJ5
dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2MiA9IEdFVF9DKGJ5dGVjb2Rl
Lm1fcmhzKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAKICAgICBBcml0aFByb2Zp
bGUmIGFyaXRoUHJvZmlsZSA9ICpleGVjLT5jb2RlQmxvY2soKS0+YXJpdGhQcm9maWxlRm9yUEMo
cGMpOwpAQCAtNTQzLDggKzU0Myw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9tdWwpCiB7
CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTXVsPigpOwotICAg
IEpTVmFsdWUgbGVmdCA9IEdFVF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpOwotICAgIEpTVmFs
dWUgcmlnaHQgPSBHRVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGxl
ZnQgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcmlnaHQg
PSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
anNNdWwoZXhlYywgbGVmdCwgcmlnaHQpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIFJF
VFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKQEAgLTU1Niw4ICs1NTYsOCBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfc3ViKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcFN1Yj4oKTsKLSAgICBKU1ZhbHVlIGxlZnQgPSBHRVRfQyhieXRlY29kZS5s
aHMpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5q
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUo
KTsKICAgICBhdXRvIGxlZnROdW1lcmljID0gbGVmdC50b051bWVyaWMoZXhlYyk7CiAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7CiAgICAgYXV0byByaWdodE51bWVyaWMgPSByaWdodC50b051bWVyaWMo
ZXhlYyk7CkBAIC01ODUsOCArNTg1LDggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RpdikK
IHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BEaXY+KCk7Ci0g
ICAgSlNWYWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCk7Ci0gICAgSlNW
YWx1ZSByaWdodCA9IEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpOworICAgIEpTVmFsdWUg
bGVmdCA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSByaWdo
dCA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCk7CiAgICAgYXV0byBsZWZ0TnVtZXJp
YyA9IGxlZnQudG9OdW1lcmljKGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIGF1
dG8gcmlnaHROdW1lcmljID0gcmlnaHQudG9OdW1lcmljKGV4ZWMpOwpAQCAtNjE2LDggKzYxNiw4
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9tb2QpCiB7CiAgICAgQkVHSU4oKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTW9kPigpOwotICAgIEpTVmFsdWUgbGVmdCA9IEdFVF9D
KGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgcmlnaHQgPSBHRVRfQyhieXRl
Y29kZS5yaHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGxlZnQgPSBHRVRfQyhieXRlY29kZS5t
X2xocykuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcmlnaHQgPSBHRVRfQyhieXRlY29kZS5tX3Jo
cykuanNWYWx1ZSgpOwogICAgIGF1dG8gbGVmdE51bWVyaWMgPSBsZWZ0LnRvTnVtZXJpYyhleGVj
KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IHJpZ2h0
LnRvTnVtZXJpYyhleGVjKTsKQEAgLTY0MiwxMCArNjQyLDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9wb3cpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wUG93PigpOwotICAgIGRvdWJsZSBhID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCku
dG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIGEgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNW
YWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7Ci0gICAgZG91YmxlIGIgPSBHRVRf
QyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKS50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUgYiA9
IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYyk7CiAgICAgaWYg
KFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1
ZSgpKTsKICAgICBSRVRVUk4oanNOdW1iZXIob3BlcmF0aW9uTWF0aFBvdyhhLCBiKSkpOwpAQCAt
NjU1LDggKzY1NSw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sc2hpZnQpCiB7CiAgICAg
QkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTHNoaWZ0PigpOwotICAgIEpT
VmFsdWUgbGVmdCA9IEdFVF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUg
cmlnaHQgPSBHRVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGxlZnQg
PSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcmlnaHQgPSBH
RVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpOwogICAgIGF1dG8gbGVmdE51bWVyaWMgPSBs
ZWZ0LnRvQmlnSW50T3JJbnQzMihleGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBh
dXRvIHJpZ2h0TnVtZXJpYyA9IHJpZ2h0LnRvQmlnSW50T3JJbnQzMihleGVjKTsKQEAgLTY3OSw4
ICs2NzksOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcnNoaWZ0KQogewogICAgIEJFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJzaGlmdD4oKTsKLSAgICBKU1ZhbHVl
IGxlZnQgPSBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHJpZ2h0
ID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBsZWZ0ID0gR0VU
X0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0Mo
Ynl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKTsKICAgICBhdXRvIGxlZnROdW1lcmljID0gbGVmdC50
b0JpZ0ludE9ySW50MzIoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgYXV0byBy
aWdodE51bWVyaWMgPSByaWdodC50b0JpZ0ludE9ySW50MzIoZXhlYyk7CkBAIC03MDMsMTAgKzcw
MywxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdXJzaGlmdCkKIHsKICAgICBCRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BVcnNoaWZ0PigpOwotICAgIHVpbnQzMl90
IGEgPSBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKKyAgICB1
aW50MzJfdCBhID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVj
KTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJF
VFVSTihKU1ZhbHVlKCkpOwotICAgIHVpbnQzMl90IGIgPSBHRVRfQyhieXRlY29kZS5yaHMpLmpz
VmFsdWUoKS50b1VJbnQzMihleGVjKTsKKyAgICB1aW50MzJfdCBiID0gR0VUX0MoYnl0ZWNvZGUu
bV9yaHMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oYSA+PiAoYiAmIDMxKSkpKTsKIH0KIApAQCAtNzE0LDcgKzcxNCw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF91bnNpZ25lZCkKIHsKICAgICBCRUdJTigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICB1aW50MzJfdCBh
ID0gR0VUX0MoYnl0ZWNvZGUub3BlcmFuZCkuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMpOworICAg
IHVpbnQzMl90IGEgPSBHRVRfQyhieXRlY29kZS5tX29wZXJhbmQpLmpzVmFsdWUoKS50b1VJbnQz
MihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSkpOwogfQogCkBAIC03MjIsNyArNzIyLDcg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2JpdG5vdCkKIHsKICAgICBCRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50MzJfdCBvcGVyYW5k
ID0gR0VUX0MoYnl0ZWNvZGUub3BlcmFuZCkuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7CisgICAg
aW50MzJfdCBvcGVyYW5kID0gR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkudG9J
bnQzMihleGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBSRVRVUk5fUFJPRklMRUQo
anNOdW1iZXIofm9wZXJhbmQpKTsKIH0KQEAgLTczMSw5ICs3MzEsOSBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfYml0YW5kKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcEJpdGFuZD4oKTsKLSAgICBhdXRvIGxlZnROdW1lcmljID0gR0VUX0MoYnl0ZWNv
ZGUubGhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGV4ZWMpOworICAgIGF1dG8gbGVmdE51
bWVyaWMgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihl
eGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IEdF
VF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVjKTsKKyAgICBh
dXRvIHJpZ2h0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9CaWdJ
bnRPckludDMyKGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVmdE51bWVyaWMpIHx8IFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSB7CiAgICAgICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVmdE51bWVyaWMpICYmIFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSB7CkBAIC03NTIsOSArNzUyLDkgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2JpdG9yKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcEJpdG9yPigpOwotICAgIGF1dG8gbGVmdE51bWVyaWMgPSBH
RVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKS50b0JpZ0ludE9ySW50MzIoZXhlYyk7CisgICAg
YXV0byBsZWZ0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkudG9CaWdJ
bnRPckludDMyKGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIGF1dG8gcmlnaHRO
dW1lcmljID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGV4
ZWMpOworICAgIGF1dG8gcmlnaHROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFs
dWUoKS50b0JpZ0ludE9ySW50MzIoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAg
aWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgfHwgV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAgICAgICAg
aWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgJiYgV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKQEAgLTc3Myw5
ICs3NzMsOSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfYml0eG9yKQogewogICAgIEJFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEJpdHhvcj4oKTsKLSAgICBhdXRvIGxl
ZnROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMy
KGV4ZWMpOworICAgIGF1dG8gbGVmdE51bWVyaWMgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNW
YWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAg
ICBhdXRvIHJpZ2h0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpLnRvQmln
SW50T3JJbnQzMihleGVjKTsKKyAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2Rl
Lm1fcmhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQ
VElPTigpOwogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVmdE51
bWVyaWMpIHx8IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVyaWMp
KSB7CiAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVmdE51
bWVyaWMpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVyaWMp
KSB7CkBAIC03OTQsMjEgKzc5NCwyMSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdHlwZW9m
KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFR5cGVvZj4o
KTsKLSAgICBSRVRVUk4oanNUeXBlU3RyaW5nRm9yVmFsdWUoZXhlYywgR0VUX0MoYnl0ZWNvZGUu
dmFsdWUpLmpzVmFsdWUoKSkpOworICAgIFJFVFVSTihqc1R5cGVTdHJpbmdGb3JWYWx1ZShleGVj
LCBHRVRfQyhieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCkpKTsKIH0KIAogU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2lzX29iamVjdF9vcl9udWxsKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcElzT2JqZWN0T3JOdWxsPigpOwotICAgIFJFVFVSTihqc0Jv
b2xlYW4oanNJc09iamVjdFR5cGVPck51bGwoZXhlYywgR0VUX0MoYnl0ZWNvZGUub3BlcmFuZCku
anNWYWx1ZSgpKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oanNJc09iamVjdFR5cGVPck51bGwo
ZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkpKSk7CiB9CiAKIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9pc19mdW5jdGlvbikKIHsKICAgICBCRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJc0Z1bmN0aW9uPigpOwotICAgIFJFVFVSTihqc0Jvb2xl
YW4oR0VUX0MoYnl0ZWNvZGUub3BlcmFuZCkuanNWYWx1ZSgpLmlzRnVuY3Rpb24odm0pKSk7Cisg
ICAgUkVUVVJOKGpzQm9vbGVhbihHRVRfQyhieXRlY29kZS5tX29wZXJhbmQpLmpzVmFsdWUoKS5p
c0Z1bmN0aW9uKHZtKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW5fYnlfdmFs
KQpAQCAtODE2LDcgKzgxNiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pbl9ieV92YWwp
CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSW5CeVZhbD4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgIFJFVFVS
Tihqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZXhlYywgR0VUX0MoYnl0ZWNv
ZGUuYmFzZSkuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpLCAm
bWV0YWRhdGEuYXJyYXlQcm9maWxlKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29tbW9uU2xv
d1BhdGhzOjpvcEluQnlWYWwoZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCks
IEdFVF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKSwgJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW5fYnlfaWQpCkBAIC04
MjQsMjIgKzgyNCwyMiBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW5fYnlfaWQpCiAgICAg
QkVHSU4oKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7CisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKICAg
ICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICBUSFJPVyhjcmVhdGVJbnZhbGlk
SW5QYXJhbWV0ZXJFcnJvcihleGVjLCBiYXNlVmFsdWUpKTsKIAotICAgIFJFVFVSTihqc0Jvb2xl
YW4oYXNPYmplY3QoYmFzZVZhbHVlKS0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+Y29kZUJsb2Nr
KCktPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKSkpOworICAgIFJFVFVSTihqc0Jvb2xl
YW4oYXNPYmplY3QoYmFzZVZhbHVlKS0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+Y29kZUJsb2Nr
KCktPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpKSk7CiB9CiAKIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9kZWxfYnlfdmFsKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcERlbEJ5VmFsPigpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VU
X0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VU
X0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmplY3Qg
PSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAg
Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBHRVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1
ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gR0VUX0MoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
anNWYWx1ZSgpOwogICAgIAogICAgIGJvb2wgY291bGREZWxldGU7CiAgICAgCkBAIC04NjMsMTQg
Kzg2MywxNCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3RyY2F0KQogewogICAgIEJFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFN0cmNhdD4oKTsKLSAgICBSRVRVUk4o
anNTdHJpbmdGcm9tUmVnaXN0ZXJBcnJheShleGVjLCAmR0VUKGJ5dGVjb2RlLnNyYyksIGJ5dGVj
b2RlLmNvdW50KSk7CisgICAgUkVUVVJOKGpzU3RyaW5nRnJvbVJlZ2lzdGVyQXJyYXkoZXhlYywg
JkdFVChieXRlY29kZS5tX3NyYyksIGJ5dGVjb2RlLm1fY291bnQpKTsKIH0KIAogU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBSRVRVUk4oR0VUX0MoYnl0
ZWNvZGUuc3JjKS5qc1ZhbHVlKCkudG9QcmltaXRpdmUoZXhlYykpOworICAgIFJFVFVSTihHRVRf
QyhieXRlY29kZS5tX3NyYykuanNWYWx1ZSgpLnRvUHJpbWl0aXZlKGV4ZWMpKTsKIH0KIAogU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2VudGVyKQpAQCAtODg1LDcgKzg4NSw3IEBAIFNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV8KIHsKICAgICBCRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpOwotICAgIEpTVmFs
dWUgZW51bWVyYXRvclZhbHVlID0gR0VUKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKKyAgICBK
U1ZhbHVlIGVudW1lcmF0b3JWYWx1ZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsK
ICAgICBpZiAoZW51bWVyYXRvclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIFJF
VFVSTihqc051bWJlcigwKSk7CiAKQEAgLTg5OSwxMCArODk5LDEwIEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm8KICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVChieXRl
Y29kZS5iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2Ug
PSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5wcm9w
ZXJ0eSkuanNWYWx1ZSgpOwotICAgIG1ldGFkYXRhLmFycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0
dXJlKGJhc2UtPnN0cnVjdHVyZSh2bSkpOworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOworICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
Lm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+c3RydWN0dXJlKHZtKSk7CiAgICAgQVNTRVJUKHByb3Bl
cnR5LmlzVUludDMyKCkpOwogICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHlH
ZW5lcmljKGV4ZWMsIHByb3BlcnR5LmFzVUludDMyKCksIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkpKTsKIH0KQEAgLTkxMSwxMSArOTExLDExIEBAIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3AKIHsKICAgICBCRUdJTigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAg
ICBKU09iamVjdCogYmFzZSA9IEdFVChieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3Qo
ZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVl
KCkudG9PYmplY3QoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBw
cm9wZXJ0eSA9IEdFVChieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUg
cHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwogICAgIEFTU0VS
VChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2Rl
LmVudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdF
VChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgaWYgKGJh
c2UtPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQo
KSkKICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAgICAgSlNTdHJpbmcqIHN0cmlu
ZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKQEAgLTkyOCw5ICs5MjgsOSBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfaGFzX2dlbmVyaWNfcHJvCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpOwotICAgIEpTT2JqZWN0KiBi
YXNlID0gR0VUKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAgICBK
U09iamVjdCogYmFzZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChl
eGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VU
KGJ5dGVjb2RlLnByb3BlcnR5KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdF
VChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHByb3BlcnR5Lmlz
U3RyaW5nKCkpOwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7CiAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihleGVjKTsKQEAgLTk0
Miw4ICs5NDIsOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtCiB7
CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RGlyZWN0UG5h
bWU+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5iYXNlKS5qc1Zh
bHVlKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5wcm9wZXJ0eSkuanNW
YWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5q
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5
KS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwogICAgIEpTU3Ry
aW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBzdHJpbmctPnRvSWRlbnRpZmllcihleGVjKTsKQEAgLTk1NSw3ICs5NTUsNyBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2VuCiB7CiAgICAgQkVHSU4oKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpOwotICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gR0VUKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKICAgICBpZiAo
YmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIFJFVFVSTihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSkpOwogCkBAIC05NjksOCArOTY5LDggQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydQogewogICAgIEJFR0lOKCk7CiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAg
ICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLmVudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0Nl
bGwoKSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUuaW5kZXgpLmpzVmFsdWUo
KS5hc1VJbnQzMigpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9
IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJh
dG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIHVpbnQzMl90IGluZGV4ID0gR0VUKGJ5dGVj
b2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpOwogCiAgICAgSlNTdHJpbmcqIHByb3Bl
cnR5TmFtZSA9IG51bGxwdHI7CiAgICAgaWYgKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleCgpKQpAQCAtOTgyLDggKzk4Miw4IEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9lbnVtZXJhdG9yX2dlbmUKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqPihHRVQoYnl0ZWNvZGUuZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICB1
aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCk7
CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUo
KS5hc0NlbGwoKSk7CisgICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCku
anNWYWx1ZSgpLmFzVUludDMyKCk7CiAKICAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0gbnVs
bHB0cjsKICAgICBpZiAoZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpIDw9
IGluZGV4ICYmIGluZGV4IDwgZW51bWVyYXRvci0+ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgoKSkK
QEAgLTk5NSw3ICs5OTUsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9faW5kZXhfc3Ry
aW5nCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9JbmRl
eFN0cmluZz4oKTsKLSAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJvbShl
eGVjLCBHRVQoYnl0ZWNvZGUuaW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpKS5zdHJpbmcoKSkp
OworICAgIFJFVFVSTihqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIEdFVChi
eXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkuc3RyaW5nKCkpKTsKIH0KIAog
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfdHlwZV9jbGVhcl9sb2cpCkBAIC0xMDE2
LDEwICsxMDE2LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF8K
IHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVhdGVMZXhp
Y2FsRW52aXJvbm1lbnQ+KCk7Ci0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUuc2NvcGUub2Zm
c2V0KCk7CisgICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKICAg
ICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKLSAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3lt
Ym9sVGFibGUqPihHRVRfQyhieXRlY29kZS5zeW1ib2xUYWJsZSkuanNWYWx1ZSgpKTsKLSAgICBK
U1ZhbHVlIGluaXRpYWxWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLmluaXRpYWxWYWx1ZSkuanNWYWx1
ZSgpOworICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+
KEdFVF9DKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSBp
bml0aWFsVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1ZSgpOwog
ICAgIEFTU0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFsdWUg
PT0ganNURFpWYWx1ZSgpKTsKICAgICBKU1Njb3BlKiBuZXdTY29wZSA9IEpTTGV4aWNhbEVudmly
b25tZW50OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY3VycmVudFNj
b3BlLCBzeW1ib2xUYWJsZSwgaW5pdGlhbFZhbHVlKTsKICAgICBSRVRVUk4obmV3U2NvcGUpOwpA
QCAtMTAyOSwxMCArMTAyOSwxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF93aXRo
X3Njb3BlCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUHVz
aFdpdGhTY29wZT4oKTsKLSAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRlY29kZS5u
ZXdTY29wZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBuZXdTY29w
ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fbmV3U2NvcGUpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsK
ICAgICBDSEVDS19FWENFUFRJT04oKTsKIAotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLmN1
cnJlbnRTY29wZS5vZmZzZXQoKTsKKyAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1cnJl
bnRTY29wZS5vZmZzZXQoKTsKICAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBleGVjLT51bmNo
ZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBSRVRVUk4oSlNXaXRoU2Nv
cGU6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjdXJyZW50U2NvcGUs
IG5ld1Njb3BlKSk7CiB9CkBAIC0xMDQxLDggKzEwNDEsOCBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcmVzb2x2ZV9zY29wZV9mCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tl
ZFIoYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSk7CisgICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5
dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTVmFsdWUg
cmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJ
bkV2YWwoZXhlYywgc2NvcGUsIGlkZW50KTsKIAogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAt
MTA1NSwxMyArMTA1NSwxMyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9zY29w
ZSkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2Nv
cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLnZhcik7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5
dGVjb2RlLnNjb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
dmFyKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9z
Y29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNPYmplY3QqIHJlc29sdmVk
U2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsIHNjb3BlLCBpZGVudCk7CiAgICAgLy8gUHJv
eHkgY2FuIHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1lbnQn
cyBAdW5zY29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLnJlc29sdmVUeXBlOworICAgIFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIC8vIE1vZHVsZVZhciBk
b2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCiAgICAg
QVNTRVJUKHJlc29sdmVUeXBlICE9IE1vZHVsZVZhcik7CkBAIC0xMDc0LDIwICsxMDc0LDIwIEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgICAgICAgICAgaWYg
KGhhc1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBpZiAocmVzb2x2
ZVR5cGUgPT0gVW5yZXNvbHZlZFByb3BlcnR5KQotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0
YS5yZXNvbHZlVHlwZSA9IEdsb2JhbFByb3BlcnR5OworICAgICAgICAgICAgICAgICAgICBtZXRh
ZGF0YS5tX3Jlc29sdmVUeXBlID0gR2xvYmFsUHJvcGVydHk7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5yZXNvbHZlVHlwZSA9IEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZSA9IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczsKIAot
ICAgICAgICAgICAgICAgIG1ldGFkYXRhLmdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKKyAg
ICAgICAgICAgICAgICBtZXRhZGF0YS5tX2dsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlZFNjb3BlLT5pc0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudCgpKSB7CiAgICAgICAgICAgICBKU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudCogZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50ID0ganNDYXN0PEpTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50Kj4ocmVzb2x2ZWRTY29wZSk7CiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICAgICAgaWYgKHJl
c29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICBtZXRhZGF0
YS5yZXNvbHZlVHlwZSA9IEdsb2JhbExleGljYWxWYXI7CisgICAgICAgICAgICAgICAgbWV0YWRh
dGEubV9yZXNvbHZlVHlwZSA9IEdsb2JhbExleGljYWxWYXI7CiAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgbWV0YWRhdGEucmVzb2x2ZVR5cGUgPSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczsKLSAgICAgICAgICAgIG1ldGFkYXRhLmdsb2JhbExleGljYWxF
bnZpcm9ubWVudCA9IGdsb2JhbExleGljYWxFbnZpcm9ubWVudDsKKyAgICAgICAgICAgICAgICBt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlID0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2dsb2JhbExleGljYWxFbnZpcm9ubWVudCA9
IGdsb2JhbExleGljYWxFbnZpcm9ubWVudDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTA5OCwx
MCArMTA5OCwxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3Jlc3QpCiB7CiAg
ICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlUmVzdD4oKTsK
LSAgICB1bnNpZ25lZCBhcnJheVNpemUgPSBHRVRfQyhieXRlY29kZS5hcnJheVNpemUpLmpzVmFs
dWUoKS5hc1VJbnQzMigpOworICAgIHVuc2lnbmVkIGFycmF5U2l6ZSA9IEdFVF9DKGJ5dGVjb2Rl
Lm1fYXJyYXlTaXplKS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7Ci0g
ICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubnVtUGFyYW1ldGVyc1RvU2tp
cDsKKyAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFtZXRl
cnNUb1NraXA7CiAgICAgSlNWYWx1ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0gZXhlYy0+YWRk
cmVzc09mQXJndW1lbnRzU3RhcnQoKSArIG51bVBhcmFtc1RvU2tpcDsKICAgICBSRVRVUk4oY29u
c3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCBhcmd1bWVudHNUb0NvcHlSZWdpb24sIGFycmF5
U2l6ZSkpOwogfQpAQCAtMTExMCw5ICsxMTEwLDkgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2dldF9ieV9pZF93aXRoXwogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKLSAgICBK
U1ZhbHVlIHRoaXNWYWwgPSBHRVRfQyhieXRlY29kZS50aGlzVmFsdWUpLmpzVmFsdWUoKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsID0gR0VUX0MoYnl0
ZWNvZGUubV90aGlzVmFsdWUpLmpzVmFsdWUoKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlz
VmFsLCBQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQp
OwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCk7
CiAgICAgUkVUVVJOX1BST0ZJTEVEKHJlc3VsdCk7CkBAIC0xMTIzLDkgKzExMjMsOSBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X3ZhbF93aXRoCiAgICAgQkVHSU4oKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpOwotICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOwotICAgIEpTVmFs
dWUgdGhpc1ZhbHVlID0gR0VUX0MoYnl0ZWNvZGUudGhpc1ZhbHVlKS5qc1ZhbHVlKCk7Ci0gICAg
SlNWYWx1ZSBzdWJzY3JpcHQgPSBHRVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX3RoaXNWYWx1ZSkuanNW
YWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gR0VUX0MoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuanNWYWx1ZSgpOwogCiAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vi
c2NyaXB0LmlzU3RyaW5nKCkpKSB7CiAgICAgICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0gKmJh
c2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKQEAgLTExNTgsMTAgKzExNTgsMTAgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZF93aXRoXwogICAgIEJFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1dEJ5SWRXaXRoVGhpcz4oKTsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKLSAg
ICBKU1ZhbHVlIHRoaXNWYWwgPSBHRVRfQyhieXRlY29kZS50aGlzVmFsdWUpLmpzVmFsdWUoKTsK
LSAgICBKU1ZhbHVlIHB1dFZhbHVlID0gR0VUX0MoYnl0ZWNvZGUudmFsdWUpLmpzVmFsdWUoKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2Rl
Lm1fYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbCA9IEdFVF9DKGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBwdXRWYWx1ZSA9IEdFVF9DKGJ5
dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlz
VmFsLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250ZXh0
KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIHB1dFZhbHVlLCBzbG90
KTsKICAgICBFTkQoKTsKQEAgLTExNzEsMTAgKzExNzEsMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3B1dF9ieV92YWxfd2l0aAogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcFB1dEJ5VmFsV2l0aFRoaXM+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBHRVRfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBHRVRfQyhieXRlY29kZS50aGlzVmFsdWUpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IEdFVF9DKGJ5dGVjb2RlLnByb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB2
YWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKS5qc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSBzdWJzY3JpcHQgPSBHRVRfQyhieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAg
ICAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CiAg
ICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMTg3LDEwICsxMTg3LDEwIEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9kZWZpbmVfZGF0YV9wcm8KIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BEZWZpbmVEYXRhUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3Qq
IGJhc2UgPSBhc09iamVjdChHRVRfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkpOwotICAgIEpT
VmFsdWUgcHJvcGVydHkgPSBHRVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAg
IEpTVmFsdWUgdmFsdWUgPSBHRVRfQyhieXRlY29kZS52YWx1ZSkuanNWYWx1ZSgpOwotICAgIEpT
VmFsdWUgYXR0cmlidXRlcyA9IEdFVF9DKGJ5dGVjb2RlLmF0dHJpYnV0ZXMpLmpzVmFsdWUoKTsK
KyAgICBKU09iamVjdCogYmFzZSA9IGFzT2JqZWN0KEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNW
YWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUX0MoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX3ZhbHVl
KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBhdHRyaWJ1dGVzID0gR0VUX0MoYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGF0dHJpYnV0ZXMuaXNJbnQzMigpKTsK
IAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVjKTsK
QEAgLTEyMDUsMTEgKzEyMDUsMTEgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlZmluZV9h
Y2Nlc3NvcgogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcERl
ZmluZUFjY2Vzc29yUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBhc09iamVjdChH
RVRfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBH
RVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgZ2V0dGVyID0g
R0VUX0MoYnl0ZWNvZGUuZ2V0dGVyKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzZXR0ZXIgPSBH
RVRfQyhieXRlY29kZS5zZXR0ZXIpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIGF0dHJpYnV0ZXMg
PSBHRVRfQyhieXRlY29kZS5hdHRyaWJ1dGVzKS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIGJh
c2UgPSBhc09iamVjdChHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKSk7CisgICAgSlNW
YWx1ZSBwcm9wZXJ0eSA9IEdFVF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKKyAg
ICBKU1ZhbHVlIGdldHRlciA9IEdFVF9DKGJ5dGVjb2RlLm1fZ2V0dGVyKS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSBzZXR0ZXIgPSBHRVRfQyhieXRlY29kZS5tX3NldHRlcikuanNWYWx1ZSgpOwor
ICAgIEpTVmFsdWUgYXR0cmlidXRlcyA9IEdFVF9DKGJ5dGVjb2RlLm1fYXR0cmlidXRlcykuanNW
YWx1ZSgpOwogICAgIEFTU0VSVChhdHRyaWJ1dGVzLmlzSW50MzIoKSk7CiAKICAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xMjI0LDEwICsx
MjI0LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90aHJvd19zdGF0aWNfZXIKIHsKICAg
ICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUaHJvd1N0YXRpY0Vycm9y
PigpOwotICAgIEpTVmFsdWUgZXJyb3JNZXNzYWdlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tZXNz
YWdlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBlcnJvck1lc3NhZ2VWYWx1ZSA9IEdFVF9DKGJ5
dGVjb2RlLm1fbWVzc2FnZSkuanNWYWx1ZSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGVycm9yTWVz
c2FnZVZhbHVlLmlzU3RyaW5nKCkpOwogICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBhc1N0cmlu
ZyhlcnJvck1lc3NhZ2VWYWx1ZSktPnZhbHVlKGV4ZWMpOwotICAgIEVycm9yVHlwZSBlcnJvclR5
cGUgPSBieXRlY29kZS5lcnJvclR5cGU7CisgICAgRXJyb3JUeXBlIGVycm9yVHlwZSA9IGJ5dGVj
b2RlLm1fZXJyb3JUeXBlOwogICAgIFRIUk9XKGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yVHlwZSwg
ZXJyb3JNZXNzYWdlKSk7CiB9CiAKQEAgLTEyMzUsMTEgKzEyMzUsMTEgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX25ld19hcnJheV93aXRoXwogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKTsKLSAgICBpbnQgbnVtSXRl
bXMgPSBieXRlY29kZS5hcmdjOworICAgIGludCBudW1JdGVtcyA9IGJ5dGVjb2RlLm1fYXJnYzsK
ICAgICBBU1NFUlQobnVtSXRlbXMgPj0gMCk7Ci0gICAgY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0
b3IgPSBleGVjLT5jb2RlQmxvY2soKS0+dW5saW5rZWRDb2RlQmxvY2soKS0+Yml0VmVjdG9yKGJ5
dGVjb2RlLmJpdFZlY3Rvcik7CisgICAgY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0b3IgPSBleGVj
LT5jb2RlQmxvY2soKS0+dW5saW5rZWRDb2RlQmxvY2soKS0+Yml0VmVjdG9yKGJ5dGVjb2RlLm1f
Yml0VmVjdG9yKTsKIAotICAgIEpTVmFsdWUqIHZhbHVlcyA9IGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oJkdFVChieXRlY29kZS5hcmd2KSk7CisgICAgSlNWYWx1ZSogdmFsdWVzID0gYml0d2lzZV9j
YXN0PEpTVmFsdWUqPigmR0VUKGJ5dGVjb2RlLm1fYXJndikpOwogCiAgICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRBcnJheVNpemUgPSAwOwogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykgewpAQCAtMTI4OSw5ICsxMjg5LDkgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZQogewogICAgIEJFR0lOKCk7CiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVmZmVyPigpOwotICAgIEFTU0VSVChl
eGVjLT5jb2RlQmxvY2soKS0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoYnl0ZWNvZGUuaW1tdXRh
YmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7Ci0gICAgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGltbXV0
YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KEdFVF9D
KGJ5dGVjb2RlLmltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBh
dXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoZXhlYykuYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZTsKKyAgICBBU1NFUlQoZXhlYy0+Y29kZUJsb2NrKCktPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7CisgICAgSlNJbW11
dGFibGVCdXR0ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0
YWJsZUJ1dHRlcmZseSo+KEdFVF9DKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5qc1Zh
bHVlKCkuYXNDZWxsKCkpOworICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShl
eGVjKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAKICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdNb2RlID0gcHJvZmlsZS5zZWxlY3RJbmRleGluZ1R5cGUoKTsKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nTW9kZSk7CkBAIC0xMzA5LDcgKzEz
MDksNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlCiAgICAgICAg
IC8vIFdlIGFsc28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0
aW9uIHRocmVhZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAg
ICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5pbW11
dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0
ZXJmbHkpOworICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUubV9p
bW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVC
dXR0ZXJmbHkpOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KIApAQCAt
MTMyNCw3ICsxMzI0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NwcmVhZCkKICAgICBC
RUdJTigpOwogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFNwcmVhZD4oKTsKLSAgICBK
U1ZhbHVlIGl0ZXJhYmxlID0gR0VUX0MoYnl0ZWNvZGUuYXJndW1lbnQpLmpzVmFsdWUoKTsKKyAg
ICBKU1ZhbHVlIGl0ZXJhYmxlID0gR0VUX0MoYnl0ZWNvZGUubV9hcmd1bWVudCkuanNWYWx1ZSgp
OwogCiAgICAgaWYgKGl0ZXJhYmxlLmlzQ2VsbCgpICYmIGlzSlNBcnJheShpdGVyYWJsZS5hc0Nl
bGwoKSkpIHsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGl0ZXJh
YmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5oCShyZXZpc2lvbiAyMzk5OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMyw3ICsxMjMsNyBA
QCBpbmxpbmUgdm9pZCB0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoCiB7CiAgICAgLy8gQ292ZXJz
IGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJz
dCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRp
bWUuCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSAhPSBHbG9iYWxQcm9wZXJ0eSAmJiBy
ZXNvbHZlVHlwZSAhPSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MgCiAgICAg
ICAgICYmIHJlc29sdmVUeXBlICE9IFVucmVzb2x2ZWRQcm9wZXJ0eSAmJiByZXNvbHZlVHlwZSAh
PSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICByZXR1
cm47CkBAIC0xMzMsMTYgKzEzMywxNiBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZVB1dFRvU2NvcGVH
bG9iYWwoCiAgICAgICAgICAgICBSZXNvbHZlVHlwZSBuZXdSZXNvbHZlVHlwZSA9IHJlc29sdmVU
eXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSA/IEdsb2JhbFByb3BlcnR5IDogR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOwogICAgICAgICAgICAgcmVzb2x2ZVR5cGUgPSBuZXdS
ZXNvbHZlVHlwZTsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOwotICAgICAgICAgICAgbWV0YWRhdGEuZ2V0UHV0SW5mbyA9IEdldFB1dElu
Zm8obWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0
YWRhdGEuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAgICBtZXRh
ZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNv
bHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRhdGEubV9nZXRQdXRJbmZvLmluaXRpYWxp
emF0aW9uTW9kZSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChzY29wZS0+aXNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQoKSkgewogICAgICAgICAgICAgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQq
IGdsb2JhbExleGljYWxFbnZpcm9ubWVudCA9IGpzQ2FzdDxKU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudCo+KHNjb3BlKTsKICAgICAgICAgICAgIFJlc29sdmVUeXBlIG5ld1Jlc29sdmVUeXBlID0g
cmVzb2x2ZVR5cGUgPT0gVW5yZXNvbHZlZFByb3BlcnR5ID8gR2xvYmFsTGV4aWNhbFZhciA6IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOwotICAgICAgICAgICAgbWV0YWRh
dGEuZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8obWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZlTW9k
ZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRhdGEuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1v
ZGUoKSk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1l
dGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRh
dGEubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgIFN5bWJv
bFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxl
KCktPmdldChpZGVudC5pbXBsKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwo
KSk7CiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBv
aW50U2V0KCk7Ci0gICAgICAgICAgICBtZXRhZGF0YS5vcGVyYW5kID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGdsb2JhbExleGljYWxFbnZpcm9ubWVudC0+dmFyaWFibGVBdChlbnRyeS5z
Y29wZU9mZnNldCgpKS5zbG90KCkpOworICAgICAgICAgICAgbWV0YWRhdGEubV93YXRjaHBvaW50
U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9vcGVy
YW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGdsb2JhbExleGljYWxFbnZpcm9ubWVu
dC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5zbG90KCkpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApAQCAtMTY1LDggKzE2NSw4IEBAIGlubGluZSB2b2lkIHRyeUNhY2hlUHV0VG9T
Y29wZUdsb2JhbCgKICAgICAgICAgc2NvcGUtPnN0cnVjdHVyZSh2bSktPmRpZENhY2hlUHJvcGVy
dHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAKICAgICAgICAgQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1ldGFkYXRh
LnN0cnVjdHVyZS5zZXQodm0sIGNvZGVCbG9jaywgc2NvcGUtPnN0cnVjdHVyZSh2bSkpOwotICAg
ICAgICBtZXRhZGF0YS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgbWV0
YWRhdGEubV9zdHJ1Y3R1cmUuc2V0KHZtLCBjb2RlQmxvY2ssIHNjb3BlLT5zdHJ1Y3R1cmUodm0p
KTsKKyAgICAgICAgbWV0YWRhdGEubV9vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAg
ICB9CiB9CiAKQEAgLTE3NCwyMyArMTc0LDIzIEBAIGlubGluZSB2b2lkIHRyeUNhY2hlR2V0RnJv
bVNjb3BlR2xvYmFsKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBPcEdldEZyb21TY29w
ZSYgYnl0ZWNvZGUsIEpTT2JqZWN0KiBzY29wZSwgUHJvcGVydHlTbG90JiBzbG90LCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGV4ZWMpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEuZ2V0UHV0
SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRh
dGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
VW5yZXNvbHZlZFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKHNjb3BlLT5pc0dsb2JhbE9iamVj
dCgpKSB7CiAgICAgICAgICAgICBSZXNvbHZlVHlwZSBuZXdSZXNvbHZlVHlwZSA9IHJlc29sdmVU
eXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSA/IEdsb2JhbFByb3BlcnR5IDogR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOwogICAgICAgICAgICAgcmVzb2x2ZVR5cGUgPSBuZXdS
ZXNvbHZlVHlwZTsgLy8gQWxsb3cgYmVsb3cgY2FjaGluZyBtZWNoYW5pc20gdG8ga2ljayBpbi4K
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCkt
Pm1fbG9jayk7Ci0gICAgICAgICAgICBtZXRhZGF0YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyht
ZXRhZGF0YS5nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG5ld1Jlc29sdmVUeXBlLCBtZXRhZGF0
YS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgIG1ldGFkYXRh
Lm1fZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8obWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVN
b2RlKCksIG5ld1Jlc29sdmVUeXBlLCBtZXRhZGF0YS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpOwogICAgICAgICB9IGVsc2UgaWYgKHNjb3BlLT5pc0dsb2JhbExleGljYWxFbnZp
cm9ubWVudCgpKSB7CiAgICAgICAgICAgICBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCogZ2xv
YmFsTGV4aWNhbEVudmlyb25tZW50ID0ganNDYXN0PEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
Kj4oc2NvcGUpOwogICAgICAgICAgICAgUmVzb2x2ZVR5cGUgbmV3UmVzb2x2ZVR5cGUgPSByZXNv
bHZlVHlwZSA9PSBVbnJlc29sdmVkUHJvcGVydHkgPyBHbG9iYWxMZXhpY2FsVmFyIDogR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M7CiAgICAgICAgICAgICBTeW1ib2xUYWJs
ZUVudHJ5IGVudHJ5ID0gZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5n
ZXQoaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwog
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+
bV9sb2NrKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLmdldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1l
dGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgbmV3UmVzb2x2ZVR5cGUsIG1ldGFkYXRh
LmdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwotICAgICAgICAgICAgbWV0YWRhdGEu
d2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgICAgIG1ldGFk
YXRhLm9wZXJhbmQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLnNsb3QoKSk7CisgICAg
ICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1ldGFkYXRhLm1fZ2V0
UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRhdGEubV9nZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1f
b3BlcmFuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihnbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuc2xvdCgpKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMjAzLDggKzIwMyw4IEBAIGlubGluZSB2b2lkIHRyeUNhY2hlR2V0RnJv
bVNjb3BlR2xvYmFsKAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzY29wZS0+
c3RydWN0dXJlKHZtKTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBtZXRh
ZGF0YS5zdHJ1Y3R1cmUuc2V0KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICAgICAgbWV0YWRhdGEub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAg
ICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2V0KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAg
fQo=
</data>
<flag name="review"
          id="376011"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="376033"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359230</attachid>
            <date>2019-01-15 17:16:21 -0800</date>
            <delta_ts>2019-01-15 19:07:57 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-193467.patch</filename>
            <type>text/plain</type>
            <size>533240</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwMDE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0MiBA
QAorMjAxOS0wMS0xNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3IgbmV3IGJ5dGVjb2RlIHN0cnVjdHMgc28gdGhhdCB0aGUgZmllbGRzIGFyZSBwcmVm
aXhlZCB3aXRoICJtXyIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTM0NjcKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAg
ICAgICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBkbyBhIG1hbnVhbCBhdWRpdCBvZiB0eXBlIGNv
cnJlY3RuZXNzIG9mIHRoZSBMTEludAorICAgICAgICBpbnN0cnVjdGlvbnMgdXNlZCB0byBhY2Nl
c3MgdGhlc2UgZmllbGRzLiAgV2l0aG91dCB0aGlzIGNoYW5nZSwgaXQgd291bGQgYmUKKyAgICAg
ICAgZGlmZmljdWx0IChhbmQgZXJyb3IgcHJvbmUpIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gZmllbGQgbmFtZXMgYW5kCisgICAgICAgIG1hY3JvIHZhcmlhYmxlcy4gIFRo
aXMgYXVkaXQgd2lsbCBiZSBkb25lIGFmdGVyIHRoaXMgcGF0Y2ggbGFuZHMuCisKKyAgICAgICAg
KiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbik6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTElu
dCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJ
bmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5l
c3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om5vdGlmeUxleGljYWxCaW5kaW5nU2hhZG93aW5nKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcik6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmZvckVhY2hBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hB
cnJheUFsbG9jYXRpb25Qcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNo
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVh
Y2hMTEludENhbGxMaW5rSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHA6CisgICAgICAgIChKU0M6OkxMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludDo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpqdW1wVGFyZ2V0
Rm9ySW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNG
b3JJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OnVwZGF0ZVN0b3JlZEp1bXBUYXJnZXRzRm9y
SW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OmR1bXBMaW5lQ29s
dW1uRW50cnkpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmdXNlQ29tcGFyZUFuZEp1bXApOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZnVzZVRlc3RBbmRKbXApOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3ApOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW5kU3dpdGNoKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QWNjZXNzb3JCeUlkKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QWNjZXNzb3JCeVZhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU5ld0Z1bmMpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVOZXdGdW5jRXhwKToKKyAgICAgICAgKiBkZmcvREZHT1NS
RW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KToKKyAg
ICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0
aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZ2VuZXJhdG9yL0FyZ3VtZW50
LnJiOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBnZW5lcmF0
b3IvT3Bjb2RlLnJiOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQXJp
dGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25lZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Qml0
QmluYXJ5T3BGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9iaXRub3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211bCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Vuc2lnbmVkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwRnJh
bWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bj
b2RlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb3BpZWRHZXRQdXRJbmZvKToKKyAgICAgICAgKEpTQzo6SklUOjpjb3Bp
ZWRBcml0aFByb2ZpbGUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbmQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam1wKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2lzX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dp
dGhfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rv
X3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cp
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rv
X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
cV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19h
cnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250
cm9sX2Zsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2ptcCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292
ZXJyaWRlc19oYXNfaW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9v
cl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfbm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJp
Y3RFcUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19z
dHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2RlYnVnKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3Rkeik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJ
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2Fj
aGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVj
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
YXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9k
ZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9i
eV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyk6
CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTElu
dDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0dXBHZXRC
eUlkUHJvdG90eXBlQ2FjaGUpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6dmFy
YXJnc1NldHVwKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNvbW1vbkNhbGxFdmFsKToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAg
ICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OnVwZGF0ZUFyaXRoUHJv
ZmlsZUZvclVuYXJ5QXJpdGhPcCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
aDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9i
YWwpOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlR2V0RnJvbVNjb3Bl
R2xvYmFsKToKKwogMjAxOS0wMS0xNSAgVG9tYXMgUG9wZWxhICA8dHBvcGVsYUByZWRoYXQuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQ6IEZpeCB0aGUgLVdmb3JtYXQgY29tcGlsZXIgd2Fybmlu
Z3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRv
cmlmaWNhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAkocmV2aXNpb24gMjQwMDE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsMTIgKzc0LDEyIEBAIHB1YmxpYzoKIAogICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfeWllbGQ6IHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFlpZWxkPigpOwotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsaXZlQ2FsbGVlTG9jYWxzSW5kZXggPSBieXRlY29kZS55aWVsZFBvaW50OworICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaXZlQ2FsbGVlTG9jYWxzSW5kZXggPSBieXRlY29k
ZS5tX3lpZWxkUG9pbnQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXZlQ2FsbGVlTG9jYWxz
SW5kZXggPj0gbV95aWVsZHMuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV95aWVs
ZHMucmVzaXplKGxpdmVDYWxsZWVMb2NhbHNJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAg
ICBZaWVsZERhdGEmIGRhdGEgPSBtX3lpZWxkc1tsaXZlQ2FsbGVlTG9jYWxzSW5kZXhdOwogICAg
ICAgICAgICAgICAgICAgICBkYXRhLnBvaW50ID0gaW5zdHJ1Y3Rpb24ub2Zmc2V0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRhdGEuYXJndW1lbnQgPSBieXRlY29kZS5hcmd1bWVudDsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVudCA9IGJ5dGVjb2RlLm1fYXJndW1lbnQ7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9u
IDI0MDAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
ICNkZWZpbmUgQ0FMTF9GVU5DVE9SKF9fYXJnKSBcCi0gICAgZnVuY3RvcihfX2J5dGVjb2RlLl9f
YXJnKTsKKyAgICBmdW5jdG9yKF9fYnl0ZWNvZGUubV8jI19fYXJnKTsKIAogI2RlZmluZSBVU0VT
X09SX0RFRlMoX19vcGNvZGUsIC4uLikgXAogICAgIGNhc2UgX19vcGNvZGU6Om9wY29kZUlEOiB7
IFwKQEAgLTUxLDE1ICs1MSwxNSBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQo
QmxvY2sqCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpOwogCiAg
ICAgYXV0byBoYW5kbGVOZXdBcnJheUxpa2UgPSBbJl0oYXV0byBvcCkgewotICAgICAgICBpbnQg
YmFzZSA9IG9wLmFyZ3Yub2Zmc2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Rh
dGljX2Nhc3Q8aW50PihvcC5hcmdjKTsgaSsrKQorICAgICAgICBpbnQgYmFzZSA9IG9wLm1fYXJn
di5vZmZzZXQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+
KG9wLm1fYXJnYyk7IGkrKykKICAgICAgICAgICAgIGZ1bmN0b3IoVmlydHVhbFJlZ2lzdGVyIHsg
YmFzZSAtIGkgfSk7CiAgICAgfTsKIAogICAgIGF1dG8gaGFuZGxlT3BDYWxsTGlrZSA9IFsmXShh
dXRvIG9wKSB7Ci0gICAgICAgIGZ1bmN0b3Iob3AuY2FsbGVlKTsKLSAgICAgICAgaW50IGxhc3RB
cmcgPSAtc3RhdGljX2Nhc3Q8aW50PihvcC5hcmd2KSArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50Pihv
cC5hcmdjKTsgaSsrKQorICAgICAgICBmdW5jdG9yKG9wLm1fY2FsbGVlKTsKKyAgICAgICAgaW50
IGxhc3RBcmcgPSAtc3RhdGljX2Nhc3Q8aW50PihvcC5tX2FyZ3YpICsgQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2Fz
dDxpbnQ+KG9wLm1fYXJnYyk7IGkrKykKICAgICAgICAgICAgIGZ1bmN0b3IoVmlydHVhbFJlZ2lz
dGVyIHsgbGFzdEFyZyArIGkgfSk7CiAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2
YWwpCiAgICAgICAgICAgICBmdW5jdG9yKGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKTsKQEAg
LTI1OCw4ICsyNTgsOCBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQmxvY2sq
CiAKICAgICBjYXNlIG9wX3N0cmNhdDogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wU3RyY2F0PigpOwotICAgICAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLnNyYy5v
ZmZzZXQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlY29kZS5jb3VudDsgaSsr
KQorICAgICAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fY291bnQ7IGkrKykKICAgICAgICAgICAgIGZ1
bmN0b3IoVmlydHVhbFJlZ2lzdGVyIHsgYmFzZSAtIGkgfSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5jcHAJKHJldmlzaW9uIDI0MDAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MywxMyArNzMs
MTMgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogICAgIExMSW50
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2Ug
b3BfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcENhbGw+
KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykuY2FsbExpbmtJbmZvOworICAgICAgICBjYWxsTGlu
a0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2Nr
KS5tX2NhbGxMaW5rSW5mbzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6
Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCku
bWV0YWRhdGEocHJvZmlsZWRCbG9jaykuY2FsbExpbmtJbmZvOworICAgICAgICBjYWxsTGlua0lu
Zm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxv
Y2spLm1fY2FsbExpbmtJbmZvOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX3RhaWxfY2Fs
bDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcFRhaWxDYWxsPigp
Lm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLmNhbGxMaW5rSW5mbzsKKyAgICAgICAgY2FsbExpbmtJ
bmZvID0gJmluc3RydWN0aW9uLT5hczxPcFRhaWxDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxv
Y2spLm1fY2FsbExpbmtJbmZvOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNo
IDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTA3LDIzICs1
MDcsMjMgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogCiAgICAg
YXV0byBsaW5rX3Byb2ZpbGUgPSBbJl0oY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24sIGF1dG8gLypi
eXRlY29kZSovLCBhdXRvJiBtZXRhZGF0YSkgewogICAgICAgICBtX251bWJlck9mTm9uQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKys7Ci0gICAgICAgIG1ldGFkYXRhLnByb2ZpbGUubV9ieXRlY29kZU9m
ZnNldCA9IGluc3RydWN0aW9uLm9mZnNldCgpOworICAgICAgICBtZXRhZGF0YS5tX3Byb2ZpbGUu
bV9ieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uLm9mZnNldCgpOwogICAgIH07CiAKICAgICBh
dXRvIGxpbmtfYXJyYXlQcm9maWxlID0gWyZdKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uLCBhdXRv
IC8qYnl0ZWNvZGUqLywgYXV0byYgbWV0YWRhdGEpIHsKLSAgICAgICAgbWV0YWRhdGEuYXJyYXlQ
cm9maWxlLm1fYnl0ZWNvZGVPZmZzZXQgPSBpbnN0cnVjdGlvbi5vZmZzZXQoKTsKKyAgICAgICAg
bWV0YWRhdGEubV9hcnJheVByb2ZpbGUubV9ieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uLm9m
ZnNldCgpOwogICAgIH07CiAKICAgICBhdXRvIGxpbmtfb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUg
PSBbJl0oY29uc3QgYXV0byYgLyppbnN0cnVjdGlvbiovLCBhdXRvIGJ5dGVjb2RlLCBhdXRvJiBt
ZXRhZGF0YSkgewotICAgICAgICBtZXRhZGF0YS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5pbml0
aWFsaXplUHJvZmlsZSh2bSwgbV9nbG9iYWxPYmplY3QuZ2V0KCksIHRoaXMsIG1fZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgYnl0ZWNvZGUuaW5saW5lQ2FwYWNpdHkpOworICAgICAg
ICBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLmluaXRpYWxpemVQcm9maWxlKHZt
LCBtX2dsb2JhbE9iamVjdC5nZXQoKSwgdGhpcywgbV9nbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpLCBieXRlY29kZS5tX2lubGluZUNhcGFjaXR5KTsKICAgICB9OwogCiAgICAgYXV0byBs
aW5rX2FycmF5QWxsb2NhdGlvblByb2ZpbGUgPSBbJl0oY29uc3QgYXV0byYgLyppbnN0cnVjdGlv
biovLCBhdXRvIGJ5dGVjb2RlLCBhdXRvJiBtZXRhZGF0YSkgewotICAgICAgICBtZXRhZGF0YS5h
cnJheUFsbG9jYXRpb25Qcm9maWxlLmluaXRpYWxpemVJbmRleGluZ01vZGUoYnl0ZWNvZGUucmVj
b21tZW5kZWRJbmRleGluZ1R5cGUpOworICAgICAgICBtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlv
blByb2ZpbGUuaW5pdGlhbGl6ZUluZGV4aW5nTW9kZShieXRlY29kZS5tX3JlY29tbWVuZGVkSW5k
ZXhpbmdUeXBlKTsKICAgICB9OwogCiAgICAgYXV0byBsaW5rX2hpdENvdW50Rm9yTExJbnRDYWNo
aW5nID0gWyZdKGNvbnN0IGF1dG8mIC8qaW5zdHJ1Y3Rpb24qLywgYXV0byAvKmJ5dGVjb2RlKi8s
IGF1dG8mIG1ldGFkYXRhKSB7Ci0gICAgICAgIG1ldGFkYXRhLmhpdENvdW50Rm9yTExJbnRDYWNo
aW5nID0gT3B0aW9uczo6cHJvdG90eXBlSGl0Q291bnRGb3JMTEludENhY2hpbmcoKTsKKyAgICAg
ICAgbWV0YWRhdGEubV9oaXRDb3VudEZvckxMSW50Q2FjaGluZyA9IE9wdGlvbnM6OnByb3RvdHlw
ZUhpdENvdW50Rm9yTExJbnRDYWNoaW5nKCk7CiAgICAgfTsKIAogI2RlZmluZSBMSU5LX0ZJRUxE
KF9fZmllbGQpIFwKQEAgLTYwNywyOCArNjA3LDI4IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7CiAgICAg
ICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKE9wUmVzb2x2ZVNjb3BlKQogCi0gICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUudmFyKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlLnJlc29sdmVUeXBlICE9IExvY2FsQ2xv
c3VyZVZhcik7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZp
ZXIoYnl0ZWNvZGUubV92YXIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGUu
bV9yZXNvbHZlVHlwZSAhPSBMb2NhbENsb3N1cmVWYXIpOwogCi0gICAgICAgICAgICBSZXNvbHZl
T3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwgYnl0ZWNvZGUubG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgYnl0ZWNv
ZGUucmVzb2x2ZVR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pOwor
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2RlLm1fbG9jYWxTY29wZURlcHRoLCBzY29w
ZSwgaWRlbnQsIEdldCwgYnl0ZWNvZGUubV9yZXNvbHZlVHlwZSwgSW5pdGlhbGl6YXRpb25Nb2Rl
OjpOb3RJbml0aWFsaXphdGlvbik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKIAotICAgICAgICAgICAgbWV0YWRhdGEucmVzb2x2ZVR5cGUgPSBv
cC50eXBlOwotICAgICAgICAgICAgbWV0YWRhdGEubG9jYWxTY29wZURlcHRoID0gb3AuZGVwdGg7
CisgICAgICAgICAgICBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlID0gb3AudHlwZTsKKyAgICAgICAg
ICAgIG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoID0gb3AuZGVwdGg7CiAgICAgICAgICAgICBp
ZiAob3AubGV4aWNhbEVudmlyb25tZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9wLnR5cGUg
PT0gTW9kdWxlVmFyKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGxpbmtlZCBt
b2R1bGUgZW52aXJvbm1lbnQgc3Ryb25nbHkgcmVmZXJlbmNlZC4KICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0cm9uZ2x5UmVmZXJlbmNlZE1vZHVsZUVudmlyb25tZW50cy5hZGQoanNDYXN0PEpT
TW9kdWxlRW52aXJvbm1lbnQqPihvcC5sZXhpY2FsRW52aXJvbm1lbnQpKS5pc05ld0VudHJ5KQog
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RhbnQob3AubGV4aWNhbEVudmlyb25tZW50
KTsKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubGV4aWNhbEVudmlyb25tZW50LnNldCh2
bSwgdGhpcywgb3AubGV4aWNhbEVudmlyb25tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbWV0
YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJv
bm1lbnQpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtZXRh
ZGF0YS5zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZpcm9ubWVudC0+c3lt
Ym9sVGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fc3ltYm9sVGFibGUu
c2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhvcC50eXBlLCB0aGlzKSkgewotICAgICAgICAgICAgICAg
IG1ldGFkYXRhLmNvbnN0YW50U2NvcGUuc2V0KHZtLCB0aGlzLCBjb25zdGFudFNjb3BlKTsKKyAg
ICAgICAgICAgICAgICBtZXRhZGF0YS5tX2NvbnN0YW50U2NvcGUuc2V0KHZtLCB0aGlzLCBjb25z
dGFudFNjb3BlKTsKICAgICAgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmxvY2FsU2NvcGVEZXB0aCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoID0gMDsKICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1ldGFkYXRhLmdsb2JhbE9iamVjdCA9IG51bGxw
dHI7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9nbG9iYWxPYmplY3QgPSBudWxscHRyOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNjM2LDYxICs2MzYsNjEgQEAgYm9v
bCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICAgICAgSU5JVElB
TElaRV9NRVRBREFUQShPcEdldEZyb21TY29wZSkKIAogICAgICAgICAgICAgbGlua19wcm9maWxl
KGluc3RydWN0aW9uLCBieXRlY29kZSwgbWV0YWRhdGEpOwotICAgICAgICAgICAgbWV0YWRhdGEu
d2F0Y2hwb2ludFNldCA9IG51bGxwdHI7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3dhdGNocG9p
bnRTZXQgPSBudWxscHRyOwogCi0gICAgICAgICAgICBBU1NFUlQoIWlzSW5pdGlhbGl6YXRpb24o
Ynl0ZWNvZGUuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwotICAgICAgICAgICAg
aWYgKGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIp
IHsKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhieXRl
Y29kZS5nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGJ5dGVjb2RlLmdldFB1
dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpc0luaXRp
YWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwor
ICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExv
Y2FsQ2xvc3VyZVZhcikgeworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2V0UHV0SW5mbyA9
IEdldFB1dEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVW
YXIsIGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS52YXIpOwotICAgICAgICAgICAgUmVz
b2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGJ5dGVjb2RlLmxvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGJ5
dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJ
bml0aWFsaXphdGlvbik7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlk
ZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOworICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNT
Y29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVj
b2RlLm1fbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgYnl0ZWNvZGUubV9nZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCksIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRp
b24pOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CiAKLSAgICAgICAgICAgIG1ldGFkYXRhLmdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGJ5dGVjb2Rl
LmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgb3AudHlwZSwgYnl0ZWNvZGUuZ2V0UHV0SW5mby5p
bml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8g
PSBHZXRQdXRJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBvcC50eXBl
LCBieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwogICAgICAgICAg
ICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICAgICAgICAgIG1ldGFkYXRhLmdl
dFB1dEluZm8gPSBHZXRQdXRJbmZvKGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwg
Q2xvc3VyZVZhciwgYnl0ZWNvZGUuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7Cisg
ICAgICAgICAgICAgICAgbWV0YWRhdGEubV9nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhieXRlY29k
ZS5tX2dldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgQ2xvc3VyZVZhciwgYnl0ZWNvZGUubV9nZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgIGlmIChvcC50eXBlID09
IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
fHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEud2F0
Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKICAgICAgICAgICAgIGVsc2UgaWYg
KG9wLnN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5zdHJ1Y3R1cmUuc2V0KHZt
LCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOwotICAgICAgICAgICAgbWV0YWRhdGEub3BlcmFuZCA9IG9w
Lm9wZXJhbmQ7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2V0KHZtLCB0
aGlzLCBvcC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAgbWV0YWRhdGEubV9vcGVyYW5kID0gb3Au
b3BlcmFuZDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BQdXRU
b1Njb3BlKQogCi0gICAgICAgICAgICBpZiAoYnl0ZWNvZGUuZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpID09IExvY2FsQ2xvc3VyZVZhcikgeworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICAgICAg
ICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcgdG8g
aXMgbm90IGFub255bW91cy4KLSAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUudmFyICE9IFVJ
TlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLnN5bWJvbFRhYmxlT3JT
Y29wZURlcHRoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gaWRlbnRpZmllcihieXRlY29kZS52YXIpOworICAgICAgICAgICAgICAgIGlmIChieXRlY29k
ZS5tX3ZhciAhPSBVSU5UX01BWCkgeworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChieXRlY29kZS5t
X3N5bWJvbFRhYmxlT3JTY29wZURlcHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7CiAgICAgICAgICAg
ICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7
CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5maW5kKGxvY2tl
ciwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gc3lt
Ym9sVGFibGUtPmVuZChsb2NrZXIpKTsKICAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUu
cHJlcGFyZVRvV2F0Y2goKTsKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEud2F0Y2hwb2lu
dFNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS53YXRj
aHBvaW50U2V0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5
dGVjb2RlLnZhcik7Ci0gICAgICAgICAgICBtZXRhZGF0YS53YXRjaHBvaW50U2V0ID0gbnVsbHB0
cjsKLSAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZSht
X2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5zeW1ib2xUYWJsZU9yU2NvcGVE
ZXB0aCwgc2NvcGUsIGlkZW50LCBQdXQsIGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KSwgYnl0ZWNvZGUuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwor
ICAgICAgICAgICAgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLCBzY29w
ZSwgaWRlbnQsIFB1dCwgYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCksIGJ5dGVj
b2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKIAotICAgICAgICAgICAgbWV0YWRh
dGEuZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oYnl0ZWNvZGUuZ2V0UHV0SW5mby5yZXNvbHZlTW9k
ZSgpLCBvcC50eXBlLCBieXRlY29kZS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsK
KyAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oYnl0ZWNvZGUu
bV9nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG9wLnR5cGUsIGJ5dGVjb2RlLm1fZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9i
YWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9w
LnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9p
bnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0
Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CiAgICAgICAgICAgICBlbHNlIGlmIChvcC50
eXBlID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykgewogICAgICAgICAgICAgICAgIGlmIChvcC53YXRjaHBvaW50U2V0KQogICAgICAg
ICAgICAgICAgICAgICBvcC53YXRjaHBvaW50U2V0LT5pbnZhbGlkYXRlKHZtLCBQdXRUb1Njb3Bl
RmlyZURldGFpbCh0aGlzLCBpZGVudCkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5zdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlLnNldCh2bSwgdGhpcywg
b3Auc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLm9wZXJhbmQgPSBvcC5vcGVyYW5k
OworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3Au
c3RydWN0dXJlKTsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fb3BlcmFuZCA9IG9wLm9wZXJhbmQ7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC03MDYsMTMgKzcwNiwxMyBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgICAgICBib29s
IHNob3VsZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+dHlwZVByb2ZpbGVyRXhwcmVzc2lvbklu
Zm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RF
bmQpOwogICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKIAot
ICAgICAgICAgICAgc3dpdGNoIChieXRlY29kZS5mbGFnKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KGJ5dGVjb2RlLm1fZmxhZykgewogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2Rl
Q2xvc3VyZVZhcjogewotICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
aWRlbnRpZmllcihieXRlY29kZS5pZGVudGlmaWVyKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb2NhbFNjb3BlRGVwdGggPSBieXRlY29kZS5zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aDsKKyAg
ICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9pZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2NhbFNjb3BlRGVw
dGggPSBieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoOwogICAgICAgICAgICAgICAg
IC8vIEV2ZW4gdGhvdWdoIHR5cGUgcHJvZmlsaW5nIG1heSBiZSBwcm9maWxpbmcgZWl0aGVyIGEg
R2V0IG9yIGEgUHV0LCB3ZSBjYW4gYWx3YXlzIGNsYWltIGEgR2V0IGJlY2F1c2UKICAgICAgICAg
ICAgICAgICAvLyB3ZSdyZSBhYnN0cmFjdGx5ICJyZWFkImluZyBmcm9tIGEgSlNTY29wZS4KLSAg
ICAgICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9n
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQs
IEdldCwgYnl0ZWNvZGUucmVzb2x2ZVR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlh
bGl6YXRpb24pOworICAgICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBsb2NhbFNjb3BlRGVwdGgs
IHNjb3BlLCBpZGVudCwgR2V0LCBieXRlY29kZS5tX3Jlc29sdmVUeXBlLCBJbml0aWFsaXphdGlv
bk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKIAogICAgICAgICAgICAgICAgIGlmIChvcC50eXBl
ID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBNb2R1bGVWYXIpCkBAIC03MzMsOSArNzMzLDkg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5
dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0gICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxl
SW5kZXggPSBieXRlY29kZS5zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aDsKKyAgICAgICAgICAgICAg
ICBpbnQgc3ltYm9sVGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVw
dGg7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5
bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRleCkpOwotICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5pZGVudGlm
aWVyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9pZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElm
IG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxl
ZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KICAgICAgICAg
ICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFi
bGUobG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsKQEAgLTc3MCwyNCArNzcwLDI0IEBAIGJvb2wg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgICAgIFR5cGVMb2Nh
dGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7CiAgICAgICAgICAgICBib29sIGlz
TmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOwogCi0gICAgICAgICAgICBpZiAoYnl0
ZWNvZGUuZmxhZyA9PSBQcm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQp
CisgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9mbGFnID09IFByb2ZpbGVUeXBlQnl0ZWNvZGVG
dW5jdGlvblJldHVyblN0YXRlbWVudCkKICAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZv
dEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgPSBvd25lckV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwogCiAgICAgICAgICAgICBpZiAoc2hvdWxkQW5hbHl6
ZSAmJiBpc05ld0xvY2F0aW9uKQogICAgICAgICAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpLT5p
bnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7CiAKLSAgICAgICAgICAgIG1ldGFkYXRhLnR5cGVM
b2NhdGlvbiA9IGxvY2F0aW9uOworICAgICAgICAgICAgbWV0YWRhdGEubV90eXBlTG9jYXRpb24g
PSBsb2NhdGlvbjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9kZWJ1ZzogewotICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5hczxPcERlYnVnPigp
LmRlYnVnSG9va1R5cGUgPT0gRGlkUmVhY2hCcmVha3BvaW50KQorICAgICAgICAgICAgaWYgKGlu
c3RydWN0aW9uLT5hczxPcERlYnVnPigpLm1fZGVidWdIb29rVHlwZSA9PSBEaWRSZWFjaEJyZWFr
cG9pbnQpCiAgICAgICAgICAgICAgICAgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudCA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jl
c3Q6IHsKLSAgICAgICAgICAgIGludCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCkubnVtUGFyYW1ldGVyc1RvU2tpcDsKKyAgICAgICAgICAg
IGludCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJl
c3Q+KCkubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPj0gMCk7CiAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiByZW1hdGVyaWFsaXppbmcgdGhlIHJlc3Qg
cGFyYW1ldGVyIGR1cmluZyBPU1IgZXhpdCBpbiB0aGUgRlRMIEpJVC4iKTsKICAgICAgICAgICAg
IG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKQEAg
LTEwOTUsOCArMTA5NSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhj
b24KICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBtX2luc3RydWN0aW9ucy0+YXQocHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV0pOwogICAgICAgICAgICAgaWYgKGluc3RydWN0aW9u
LT5pczxPcFB1dEJ5SWQ+KCkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGlu
c3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCkubWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICAg
ICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5vbGRTdHJ1Y3R1cmU7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5uZXdT
dHJ1Y3R1cmU7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBt
ZXRhZGF0YS5tX29sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBuZXdT
dHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlOwogICAgICAgICAgICAgICAgIGlm
ICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9CkBA
IC0xMjA3LDExICsxMjA3LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGUKICAgICBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4mIHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zKCk7CiAKICAgICBhdXRvIGhhbmRsZUdldFB1dEZyb21TY29wZSA9IFtdKGF1dG8m
IG1ldGFkYXRhKSB7Ci0gICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLmdl
dFB1dEluZm87CisgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0
UHV0SW5mbzsKICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxW
YXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgCiAgICAgICAgICAgICB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9j
YWxDbG9zdXJlVmFyIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxTdHJ1Y3R1cmU+JiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5zdHJ1Y3R1cmU7CisgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiYgc3RydWN0dXJlID0gbWV0YWRhdGEubV9z
dHJ1Y3R1cmU7CiAgICAgICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVj
dHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCkBAIC0xMjI0LDkgKzEyMjQsOSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVMTEludElubGluZUNhY2hlCiAgICAgICAgIHN3aXRjaCAoY3VySW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkpIHsKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsKICAgICAgICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gY3VySW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKS5tZXRhZGF0YSh0aGlz
KTsKLSAgICAgICAgICAgIGlmIChtZXRhZGF0YS5tb2RlICE9IEdldEJ5SWRNb2RlOjpEZWZhdWx0
KQorICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1fbW9kZSAhPSBHZXRCeUlkTW9kZTo6RGVmYXVs
dCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0
cnVjdHVyZUlEID0gbWV0YWRhdGEubW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0cnVjdHVyZTsK
KyAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9tb2Rl
TWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlOwogICAgICAgICAgICAgaWYgKCFvbGRTdHJ1
Y3R1cmVJRCB8fCBIZWFwOjppc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
b2xkU3RydWN0dXJlSUQpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCkBAIC0xMjM2LDMwICsxMjM2LDMwIEBAIHZvaWQgQ29k
ZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGUKICAgICAgICAgfQogICAgICAgICBjYXNl
IG9wX2dldF9ieV9pZF9kaXJlY3Q6IHsKICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gY3Vy
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKS5tZXRhZGF0YSh0aGlzKTsKLSAgICAg
ICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEuc3RydWN0dXJlOwor
ICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX3N0cnVj
dHVyZTsKICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQo
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQog
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBwcm9wZXJ0eSBhY2Nlc3Mu
XG4iKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLnN0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBt
ZXRhZGF0YS5vZmZzZXQgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmUgPSAw
OworICAgICAgICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSAwOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKICAgICAgICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gY3VySW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKS5tZXRhZGF0YSh0
aGlzKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEu
b2xkU3RydWN0dXJlOwotICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBt
ZXRhZGF0YS5uZXdTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4g
PSBtZXRhZGF0YS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZUlE
IG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBT
dHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlOworICAg
ICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmVDaGFp
bi5nZXQoKTsKICAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6OmlzTWFy
a2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQogICAg
ICAgICAgICAgICAgICYmICghbmV3U3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQodm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAg
ICAgJiYgKCFjaGFpbiB8fCBIZWFwOjppc01hcmtlZChjaGFpbikpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHV0IHRyYW5zaXRpb24uXG4iKTsKLSAg
ICAgICAgICAgIG1ldGFkYXRhLm9sZFN0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBtZXRhZGF0
YS5vZmZzZXQgPSAwOwotICAgICAgICAgICAgbWV0YWRhdGEubmV3U3RydWN0dXJlID0gMDsKLSAg
ICAgICAgICAgIG1ldGFkYXRhLnN0cnVjdHVyZUNoYWluLmNsZWFyKCk7CisgICAgICAgICAgICBt
ZXRhZGF0YS5tX29sZFN0cnVjdHVyZSA9IDA7CisgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNl
dCA9IDA7CisgICAgICAgICAgICBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZSA9IDA7CisgICAgICAg
ICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUNoYWluLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjQxOApAQCAtMTI2OCwxNyArMTI2OCwxNyBAQCB2b2lkIENvZGVC
bG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBvcF90b190aGlzOiB7CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGN1cklu
c3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKS5tZXRhZGF0YSh0aGlzKTsKLSAgICAgICAgICAgIGlm
ICghbWV0YWRhdGEuY2FjaGVkU3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKG1ldGFkYXRhLmNh
Y2hlZFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICBpZiAoIW1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlLmdl
dCgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHRv
X3RoaXMgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBtZXRhZGF0YS5jYWNoZWRTdHJ1Y3R1cmUuZ2V0
KCkpOwotICAgICAgICAgICAgbWV0YWRhdGEuY2FjaGVkU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAg
ICAgICAgICBtZXRhZGF0YS50b1RoaXNTdGF0dXMgPSBtZXJnZShtZXRhZGF0YS50b1RoaXNTdGF0
dXMsIFRvVGhpc0NsZWFyZWRCeUdDKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJp
bmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIG1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJl
LmNsZWFyKCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3RvVGhpc1N0YXR1cyA9IG1lcmdlKG1l
dGFkYXRhLm1fdG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CiAgICAgICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGN1ckluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCku
bWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBhdXRvJiBjYWNoZVdyaXRlQmFycmllciA9IG1l
dGFkYXRhLmNhY2hlZENhbGxlZTsKKyAgICAgICAgICAgIGF1dG8mIGNhY2hlV3JpdGVCYXJyaWVy
ID0gbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgICAgICAgICBpZiAoIWNhY2hlV3JpdGVC
YXJyaWVyIHx8IGNhY2hlV3JpdGVCYXJyaWVyLnVudmFsaWRhdGVkR2V0KCkgPT0gSlNDZWxsOjpz
ZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBKU0NlbGwqIGNhY2hlZEZ1bmN0aW9uID0gY2FjaGVXcml0ZUJhcnJpZXIuZ2V0KCk7
CkBAIC0xMjk0LDcgKzEyOTQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGlu
ZUNhY2hlCiAgICAgICAgICAgICAvLyBhcmUgZm9yIG91dGVyIGZ1bmN0aW9ucywgYW5kIHdlIHJl
ZmVyIHRvIHRob3NlIGZ1bmN0aW9ucyBzdHJvbmdseSwgYW5kIHRoZXkgcmVmZXIKICAgICAgICAg
ICAgIC8vIHRvIHRoZSBzeW1ib2wgdGFibGUgc3Ryb25nbHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUg
b24gdGhlIHNhZmUgc2lkZS4KICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gY3VySW5zdHJ1
Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLm1ldGFkYXRhKHRoaXMpOwotICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTeW1ib2xUYWJsZT4mIHN5bWJvbFRhYmxlID0gbWV0YWRhdGEuc3lt
Ym9sVGFibGU7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN5bWJvbFRhYmxlPiYgc3lt
Ym9sVGFibGUgPSBtZXRhZGF0YS5tX3N5bWJvbFRhYmxlOwogICAgICAgICAgICAgaWYgKCFzeW1i
b2xUYWJsZSB8fCBIZWFwOjppc01hcmtlZChzeW1ib2xUYWJsZS5nZXQoKSkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQpAQCAt
MTY2NSwxMiArMTY2NSwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lz
Q29tCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IG1faW5zdHJ1Y3Rpb25zLT5hdChieXRlY29kZU9m
ZnNldCk7CiAgICAgT3BDYXRjaCBvcCA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gb3AubWV0YWRhdGEodGhpcyk7Ci0gICAgaWYgKCEhbWV0YWRhdGEu
YnVmZmVyKSB7CisgICAgaWYgKCEhbWV0YWRhdGEubV9idWZmZXIpIHsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGUgOiBtX2Nh
dGNoUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9maWxlLmdldCgpID09IG1ldGFkYXRh
LmJ1ZmZlcikgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZ2V0KCkgPT0gbWV0YWRhdGEubV9i
dWZmZXIpIHsKICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNzEzLDcgKzE3MTMsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tCiAgICAgLy8gdGhlIGNvbXBpbGVyIHRocmVhZCBy
ZWFkcyBmdWxseSBpbml0aWFsaXplZCBkYXRhLgogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
IAogCi0gICAgb3AubWV0YWRhdGEodGhpcykuYnVmZmVyID0gcHJvZmlsZXMuZ2V0KCk7CisgICAg
b3AubWV0YWRhdGEodGhpcykubV9idWZmZXIgPSBwcm9maWxlcy5nZXQoKTsKIAogICAgIHsKICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMjQ5MSw3ICsyNDkx
LDcgQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZQogICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKICNkZWZpbmUgQ0FTRShPcCkgXAogICAgIGNh
c2UgT3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
Lm1ldGFkYXRhKHRoaXMpLmFycmF5UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlv
bi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9hcnJheVByb2ZpbGU7CiAKICAgICBGT1JfRUFD
SF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENBU0UpCiAjdW5kZWYgQ0FTRQpAQCAtMjQ5OSw4
ICsyNDk5LDggQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZQogICAg
IGNhc2UgT3BHZXRCeUlkOjpvcGNvZGVJRDogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YSh0aGlzKTsKLSAgICAgICAgaWYgKG1ldGFkYXRhLm1vZGUgPT0gR2V0QnlJ
ZE1vZGU6OkFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tb2RlTWV0
YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZTsKKyAgICAgICAgaWYgKG1ldGFkYXRh
Lm1fbW9kZSA9PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4g
Jm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtMjY4NiwyMiArMjY4NiwyMiBA
QCB2b2lkIENvZGVCbG9jazo6bm90aWZ5TGV4aWNhbEJpbmRpbmdTaGFkCiAgICAgICAgIGNhc2Ug
b3BfcmVzb2x2ZV9zY29wZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBSZXNvbHZlVHlwZSBvcmlnaW5h
bFJlc29sdmVUeXBlID0gbWV0YWRhdGEucmVzb2x2ZVR5cGU7CisgICAgICAgICAgICBSZXNvbHZl
VHlwZSBvcmlnaW5hbFJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICAg
ICAgICAgIGlmIChvcmlnaW5hbFJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IG9yaWdp
bmFsUmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5
dGVjb2RlLnZhcik7CisgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBp
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRh
aW5zKGlkZW50LmltcGwoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcGFzcyBKU0ds
b2JhbExleGljYWxTY29wZSBhcyBhIHN0YXJ0IHBvaW50IG9mIHRoZSBzY29wZSBjaGFpbi4KICAg
ICAgICAgICAgICAgICAgICAgLy8gSXQgc2hvdWxkIGltbWVkaWF0ZWx5IGZpbmQgdGhlIGxleGlj
YWwgYmluZGluZyBiZWNhdXNlIHRoYXQncyB0aGUgcmVhc29uIHdoeSB3ZSBwZXJmb3JtIHRoaXMg
cmV3cml0aW5nIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29w
ZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2Rl
LmxvY2FsU2NvcGVEZXB0aCwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpLCBpZGVudCwgR2V0
LCBieXRlY29kZS5yZXNvbHZlVHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXph
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5tX2xvY2Fs
U2NvcGVEZXB0aCwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpLCBpZGVudCwgR2V0LCBieXRl
Y29kZS5tX3Jlc29sdmVUeXBlLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9u
KTsKICAgICAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvcC50eXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcik7Ci0g
ICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnJlc29sdmVUeXBlID0gbmVlZHNWYXJJbmplY3Rp
b25DaGVja3Mob3JpZ2luYWxSZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXI7Ci0gICAgICAgICAgICAgICAgICAgIG1l
dGFkYXRhLmxvY2FsU2NvcGVEZXB0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGUgPSBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhvcmlnaW5hbFJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcjsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGgg
PSAwOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW9wLmxleGljYWxFbnZpcm9ubWVudCk7
Ci0gICAgICAgICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKG1ldGFkYXRhLnJlc29sdmVUeXBlLCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2sobWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgdGhpcyk7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChjb25zdGFudFNjb3BlID09IGdsb2JhbE9iamVjdC0+Z2xv
YmFsU2NvcGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmNvbnN0YW50U2NvcGUu
c2V0KHZtLCB0aGlzLCBjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoQ29kZUJsb2NrSW50ZXJuYWw6OnZlcmJvc2UsICJSZXdyaXRlIG9wX3Jlc29sdmVfc2Nv
cGUgZnJvbSAiLCBvcmlnaW5hbFJlc29sdmVUeXBlLCAiIHRvICIsIG1ldGFkYXRhLnJlc29sdmVU
eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9jb25zdGFudFNjb3BlLnNldCh2
bSwgdGhpcywgY29uc3RhbnRTY29wZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KENvZGVCbG9ja0ludGVybmFsOjp2ZXJib3NlLCAiUmV3cml0ZSBvcF9yZXNvbHZlX3Njb3BlIGZy
b20gIiwgb3JpZ2luYWxSZXNvbHZlVHlwZSwgIiB0byAiLCBtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
QEAgLTI3MTAsMTkgKzI3MTAsMTkgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGlmeUxleGljYWxCaW5k
aW5nU2hhZAogICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7CiAgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgICAg
ICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSh0aGlzKTsKLSAgICAgICAg
ICAgIFJlc29sdmVUeXBlIG9yaWdpbmFsUmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5nZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCk7CisgICAgICAgICAgICBSZXNvbHZlVHlwZSBvcmlnaW5hbFJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgICAgICAgICBp
ZiAob3JpZ2luYWxSZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBvcmlnaW5hbFJlc29s
dmVUeXBlID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgewotICAgICAg
ICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS52
YXIpOworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmll
cihieXRlY29kZS5tX3Zhcik7CiAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhpZGVu
dC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHBhc3MgSlNHbG9iYWxMZXhp
Y2FsU2NvcGUgYXMgYSBzdGFydCBwb2ludCBvZiB0aGUgc2NvcGUgY2hhaW4uCiAgICAgICAgICAg
ICAgICAgICAgIC8vIEl0IHNob3VsZCBpbW1lZGlhdGVseSBmaW5kIHRoZSBsZXhpY2FsIGJpbmRp
bmcgYmVjYXVzZSB0aGF0J3MgdGhlIHJlYXNvbiB3aHkgd2UgcGVyZm9ybSB0aGlzIHJld3JpdGlu
ZyBub3cuCi0gICAgICAgICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5sb2NhbFNj
b3BlRGVwdGgsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGUoKSwgaWRlbnQsIEdldCwgYnl0ZWNv
ZGUuZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRp
YWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6
YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2RlLm1f
bG9jYWxTY29wZURlcHRoLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlKCksIGlkZW50LCBHZXQs
IGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpLCBJbml0aWFsaXphdGlvbk1vZGU6
Ok5vdEluaXRpYWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFz
c2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvcC50eXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9wLnR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcik7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmdldFB1dEluZm8g
PSBHZXRQdXRJbmZvKGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3Mob3JpZ2luYWxSZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIGJ5dGVjb2RlLmdldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS53
YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKLSAgICAgICAgICAgICAgICAgICAgbWV0
YWRhdGEub3BlcmFuZCA9IG9wLm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dM
bklmKENvZGVCbG9ja0ludGVybmFsOjp2ZXJib3NlLCAiUmV3cml0ZSBvcF9nZXRfZnJvbV9zY29w
ZSBmcm9tICIsIG9yaWdpbmFsUmVzb2x2ZVR5cGUsICIgdG8gIiwgbWV0YWRhdGEuZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9nZXRQdXRJ
bmZvID0gR2V0UHV0SW5mbyhieXRlY29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3Mob3JpZ2luYWxSZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIGJ5dGVjb2RlLm1f
Z2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CisgICAgICAgICAgICAg
ICAgICAgIG1ldGFkYXRhLm1fb3BlcmFuZCA9IG9wLm9wZXJhbmQ7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKENvZGVCbG9ja0ludGVybmFsOjp2ZXJib3NlLCAiUmV3cml0ZSBvcF9n
ZXRfZnJvbV9zY29wZSBmcm9tICIsIG9yaWdpbmFsUmVzb2x2ZVR5cGUsICIgdG8gIiwgbWV0YWRh
dGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjczMSwyNSArMjczMSwyNSBAQCB2b2lk
IENvZGVCbG9jazo6bm90aWZ5TGV4aWNhbEJpbmRpbmdTaGFkCiAgICAgICAgIGNhc2Ugb3BfcHV0
X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0VG9TY29wZT4oKTsKICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBSZXNvbHZlVHlwZSBvcmlnaW5hbFJlc29sdmVU
eXBlID0gbWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgICAgICAgICAgUmVz
b2x2ZVR5cGUgb3JpZ2luYWxSZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOwogICAgICAgICAgICAgaWYgKG9yaWdpbmFsUmVzb2x2ZVR5cGUgPT0gR2xvYmFs
UHJvcGVydHkgfHwgb3JpZ2luYWxSZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUudmFyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwogICAgICAgICAgICAg
ICAgIGlmIChzZXQuY29udGFpbnMoaWRlbnQuaW1wbCgpKSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBwYXNzIEpTR2xvYmFsTGV4aWNhbFNjb3BlIGFzIGEgc3RhcnQgcG9pbnQgb2YgdGhl
IHNjb3BlIGNoYWluLgogICAgICAgICAgICAgICAgICAgICAvLyBJdCBzaG91bGQgaW1tZWRpYXRl
bHkgZmluZCB0aGUgbGV4aWNhbCBiaW5kaW5nIGJlY2F1c2UgdGhhdCdzIHRoZSByZWFzb24gd2h5
IHdlIHBlcmZvcm0gdGhpcyByZXdyaXRpbmcgbm93LgotICAgICAgICAgICAgICAgICAgICBSZXNv
bHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgYnl0ZWNvZGUuc3ltYm9sVGFibGVPclNjb3BlRGVwdGgsIGdsb2JhbE9iamVjdC0+
Z2xvYmFsU2NvcGUoKSwgaWRlbnQsIFB1dCwgYnl0ZWNvZGUuZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpLCBieXRlY29kZS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVw
dGgsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGUoKSwgaWRlbnQsIFB1dCwgYnl0ZWNvZGUubV9n
ZXRQdXRJbmZvLnJlc29sdmVUeXBlKCksIGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXph
dGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4
Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQob3AudHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyB8fCBvcC50eXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgb3AudHlwZSA9PSBEeW5hbWljKTsKIAogICAgICAgICAgICAgICAgICAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG9wLnR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFk
YXRhLndhdGNocG9pbnRTZXQgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBtZXRhZGF0
YS5tX3dhdGNocG9pbnRTZXQgPSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcikgewogICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZVR5cGUgPSBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhvcmlnaW5hbFJlc29sdmVUeXBl
KSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNh
bFZhcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQgPSBv
cC53YXRjaHBvaW50U2V0OworICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBtZXRhZGF0YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhieXRlY29k
ZS5nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIHJlc29sdmVUeXBlLCBieXRlY29kZS5nZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEu
b3BlcmFuZCA9IG9wLm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKENv
ZGVCbG9ja0ludGVybmFsOjp2ZXJib3NlLCAiUmV3cml0ZSBvcF9wdXRfdG9fc2NvcGUgZnJvbSAi
LCBvcmlnaW5hbFJlc29sdmVUeXBlLCAiIHRvICIsIG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2V0UHV0SW5mbyA9IEdl
dFB1dEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIHJlc29sdmVUeXBl
LCBieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOworICAgICAgICAg
ICAgICAgICAgICBtZXRhZGF0YS5tX29wZXJhbmQgPSBvcC5vcGVyYW5kOworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZihDb2RlQmxvY2tJbnRlcm5hbDo6dmVyYm9zZSwgIlJld3JpdGUg
b3BfcHV0X3RvX3Njb3BlIGZyb20gIiwgb3JpZ2luYWxSZXNvbHZlVHlwZSwgIiB0byAiLCBtZXRh
ZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yODc5LDcgKzI4NzksNyBAQCBWYWx1
ZVByb2ZpbGUqIENvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9mCiAKICNkZWZpbmUgQ0FTRShPcCkg
XAogICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLnByb2ZpbGU7CisgICAgICAgIHJldHVybiAmaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fcHJvZmlsZTsKIAogICAgICAgICBGT1Jf
RUFDSF9PUENPREVfV0lUSF9WQUxVRV9QUk9GSUxFKENBU0UpCiAKQEAgLTMwMTgsMTUgKzMwMTgs
MTUgQEAgQXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvcgogewogICAgIHN3
aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykuYXJpdGhQcm9maWxlOworICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJv
ZmlsZTsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCku
bWV0YWRhdGEodGhpcykuYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFk
ZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykuYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykuYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gJnBjLT5hczxP
cFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykuYXJpdGhQcm9m
aWxlOworICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMDY2
LDEzICszMDY2LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3cpOwogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKHRoaXMpOwotICAgICAgICBpbnQgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0
ID0gYnl0ZWNvZGUudGV4dE9mZnNldDsKKyAgICAgICAgaW50IGJhc2ljQmxvY2tTdGFydE9mZnNl
dCA9IGJ5dGVjb2RlLm1fdGV4dE9mZnNldDsKICAgICAgICAgaW50IGJhc2ljQmxvY2tFbmRPZmZz
ZXQ7CiAgICAgICAgIGlmIChpICsgMSA8IG9mZnNldHNMZW5ndGgpIHsKICAgICAgICAgICAgIHNp
emVfdCBlbmRJZHggPSBieXRlY29kZU9mZnNldHNbaSArIDFdOwogICAgICAgICAgICAgYXV0byBl
bmRJbnN0cnVjdGlvbiA9IG1faW5zdHJ1Y3Rpb25zLT5hdChlbmRJZHgpOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZW5kSW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3cpOwotICAgICAgICAgICAgYmFzaWNCbG9ja0VuZE9mZnNldCA9IGVuZEluc3Ry
dWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKS50ZXh0T2Zmc2V0IC0gMTsKKyAgICAg
ICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBlbmRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxl
Q29udHJvbEZsb3c+KCkubV90ZXh0T2Zmc2V0IC0gMTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNldCArIG93bmVyU2NyaXB0
RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBiZWZvcmUgdGhl
IGNsb3NpbmcgYnJhY2UuCiAgICAgICAgICAgICBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBzdGQ6
Om1pbihiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQpOyAvLyBTb21l
IHN0YXJ0IG9mZnNldHMgbWF5IGJlIGF0IHRoZSBjbG9zaW5nIGJyYWNlLCBlbnN1cmUgaXQgaXMg
dGhlIG9mZnNldCBiZWZvcmUuCkBAIC0zMDk4LDcgKzMwOTgsNyBAQCB2b2lkIENvZGVCbG9jazo6
aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiAgICAgICAgIC8vIG06IG9wX3Byb2ZpbGVfY29udHJv
bF9mbG93CiAgICAgICAgIGlmIChiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0YXJ0
T2Zmc2V0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpICsgMSA8IG9mZnNldHNMZW5n
dGgpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZW5jb3VudGVyIGR1bW15IGJsb2NrcyBhdCB0aGUgZW5k
IG9mIGEgQ29kZUJsb2NrLgotICAgICAgICAgICAgbWV0YWRhdGEuYmFzaWNCbG9ja0xvY2F0aW9u
ID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5kdW1teUJhc2ljQmxvY2soKTsKKyAgICAg
ICAgICAgIG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQ
cm9maWxlcigpLT5kdW1teUJhc2ljQmxvY2soKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKQEAgLTMxMjIsNyArMzEyMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNp
Y0Jsb2NrQm91bmRhcmkKICAgICAgICAgZm9yIChjb25zdCBXcml0ZUJhcnJpZXI8RnVuY3Rpb25F
eGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25FeHBycykKICAgICAgICAgICAgIGlu
c2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKIAotICAgICAgICBtZXRhZGF0YS5iYXNpY0Js
b2NrTG9jYXRpb24gPSBiYXNpY0Jsb2NrTG9jYXRpb247CisgICAgICAgIG1ldGFkYXRhLm1fYmFz
aWNCbG9ja0xvY2F0aW9uID0gYmFzaWNCbG9ja0xvY2F0aW9uOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
CShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKIAogICAgIGlmIChtX21ldGFkYXRhKSB7
CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKLSAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsm
XSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5wcm9maWxlKTsgfSk7CisgICAgbV9t
ZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRh
dGEubV9wcm9maWxlKTsgfSk7CiAKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVf
UFJPRklMRShWSVNJVCkKIApAQCAtNTMsMTIgKzUzLDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JF
YWNoQXJyYXlQcm9maWxlKGNvbnMKIHsKICAgICBpZiAobV9tZXRhZGF0YSkgewogICAgICAgICBt
X21ldGFkYXRhLT5mb3JFYWNoPE9wR2V0QnlJZD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgewotICAg
ICAgICAgICAgaWYgKG1ldGFkYXRhLm1vZGUgPT0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKQot
ICAgICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9k
ZS5hcnJheVByb2ZpbGUpOworICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1fbW9kZSA9PSBHZXRC
eUlkTW9kZTo6QXJyYXlMZW5ndGgpCisgICAgICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgfSk7CiAK
ICNkZWZpbmUgVklTSVQoX19vcCkgXAotICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZd
IChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLmFycmF5UHJvZmlsZSk7IH0pOworICAg
IG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlKTsgfSk7CiAKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfQVJSQVlfUFJPRklMRShWSVNJVCkKIApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIENvZGVCbG9j
azo6Zm9yRWFjaEFycmF5QWxsb2NhdGlvblByCiB7CiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICNk
ZWZpbmUgVklTSVQoX19vcCkgXAotICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChh
dXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLmFycmF5QWxsb2NhdGlvblByb2ZpbGUpOyB9
KTsKKyAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsg
ZnVuYyhtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUpOyB9KTsKIAogICAgICAgICBG
T1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUoVklTSVQpCiAKQEAg
LTg0LDcgKzg0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hPYmplY3RBbGxvY2F0aW9uUAog
ewogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKLSAgICBtX21l
dGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0
YS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSk7IH0pOworICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLm1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUpOyB9KTsKIAogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9PQkpFQ1Rf
QUxMT0NBVElPTl9QUk9GSUxFKFZJU0lUKQogCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmb3JFYWNoTExJbnRDYWxsTGlua0luZm8KIHsKICAgICBpZiAobV9tZXRhZGF0YSkgewog
I2RlZmluZSBWSVNJVChfX29wKSBcCi0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0g
KGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEuY2FsbExpbmtJbmZvKTsgfSk7CisgICAg
bV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0
YWRhdGEubV9jYWxsTGlua0luZm8pOyB9KTsKIAogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9MTElOVF9DQUxMX0xJTktfSU5GTyhWSVNJVCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjQwMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjQsMTMgKzY0LDEzIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZyb20KICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwogICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCBqdXN0IGJhaWwgaWYgd2Ugc2VlIGEgZ2V0X2J5X2lkX3Byb3RvX2xvYWQu
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgw
MzkKLSAgICAgICAgaWYgKG1ldGFkYXRhLm1vZGUgIT0gR2V0QnlJZE1vZGU6OkRlZmF1bHQpCisg
ICAgICAgIGlmIChtZXRhZGF0YS5tX21vZGUgIT0gR2V0QnlJZE1vZGU6OkRlZmF1bHQpCiAgICAg
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7Ci0gICAg
ICAgIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0cnVj
dHVyZTsKKyAgICAgICAgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5kZWZh
dWx0TW9kZS5zdHJ1Y3R1cmU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIG9wX2dl
dF9ieV9pZF9kaXJlY3Q6Ci0gICAgICAgIHN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZERpcmVjdD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5zdHJ1Y3R1cmU7CisgICAg
ICAgIHN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKS5tZXRh
ZGF0YShwcm9maWxlZEJsb2NrKS5tX3N0cnVjdHVyZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBvcF90cnlfZ2V0X2J5X2lkOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGp1
c3QgYmFpbCBpZiB3ZSBzZWUgYSB0cnlfZ2V0X2J5X2lkLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9u
IDI0MDAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTksOSArNTksOSBAQCB2b2lkIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlCiAK
IHZvaWQgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpjbGVh
ckxMSW50R2V0QnlJZENhY2hlKE9wR2V0QnlJZDo6TWV0YWRhdGEmIG1ldGFkYXRhKQogewotICAg
IG1ldGFkYXRhLm1vZGUgPSBHZXRCeUlkTW9kZTo6RGVmYXVsdDsKLSAgICBtZXRhZGF0YS5tb2Rl
TWV0YWRhdGEuZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0ID0gMDsKLSAgICBtZXRhZGF0YS5tb2Rl
TWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlID0gMDsKKyAgICBtZXRhZGF0YS5tX21vZGUg
PSBHZXRCeUlkTW9kZTo6RGVmYXVsdDsKKyAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5kZWZh
dWx0TW9kZS5jYWNoZWRPZmZzZXQgPSAwOworICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmRl
ZmF1bHRNb2RlLnN0cnVjdHVyZSA9IDA7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5o
CShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
Y2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBDQVNFX09QKE9wSmJlbG93ZXEpIFwKICAgICBjYXNlIG9w
X3N3aXRjaF9pbW06IHsgXAogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wU3dpdGNoSW1tPigpOyBcCi0gICAgICAgIGF1dG8mIHRhYmxlID0gY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUoYnl0ZWNvZGUudGFibGVJbmRleCk7IFwKKyAgICAgICAgYXV0byYgdGFibGUg
PSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShieXRlY29kZS5tX3RhYmxlSW5kZXgpOyBcCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyBpLS07
KSBcCiAgICAgICAgICAgICBTV0lUQ0hfQ0FTRSh0YWJsZS5icmFuY2hPZmZzZXRzW2ldKTsgXAog
ICAgICAgICBTV0lUQ0hfREVGQVVMVF9PRkZTRVQoT3BTd2l0Y2hJbW0pOyBcCkBAIC02Niw3ICs2
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0gXAogICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6
IHsgXAogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hh
cj4oKTsgXAotICAgICAgICBhdXRvJiB0YWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KGJ5dGVjb2RlLnRhYmxlSW5kZXgpOyBcCisgICAgICAgIGF1dG8mIHRhYmxlID0gY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUoYnl0ZWNvZGUubV90YWJsZUluZGV4KTsgXAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKTsgaS0tOykgXAogICAgICAg
ICAgICAgU1dJVENIX0NBU0UodGFibGUuYnJhbmNoT2Zmc2V0c1tpXSk7IFwKICAgICAgICAgU1dJ
VENIX0RFRkFVTFRfT0ZGU0VUKE9wU3dpdGNoQ2hhcik7IFwKQEAgLTc0LDcgKzc0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfSBcCiAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7IFwKICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4oKTsg
XAotICAgICAgICBhdXRvJiB0YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGJ5dGVjb2RlLnRhYmxlSW5kZXgpOyBcCisgICAgICAgIGF1dG8mIHRhYmxlID0gY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoYnl0ZWNvZGUubV90YWJsZUluZGV4KTsgXAogICAgICAg
ICBhdXRvIGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBcCiAgICAgICAgIGF1dG8g
ZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCk7IFwKICAgICAgICAgZm9yICg7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIFwKQEAgLTEwOCw3ICsxMDgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgQmxvY2s+CiBpbmxpbmUgaW50IGp1bXBUYXJnZXRGb3JJbnN0cnVjdGlvbihCbG9j
ayYmIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICByZXR1
cm4ganVtcFRhcmdldEZvckluc3RydWN0aW9uKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLnRhcmdldCk7CisgICAgcmV0dXJuIGp1bXBUYXJnZXRGb3JJbnN0cnVjdGlvbihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEJsb2NrLCB0eXBlbmFtZSBGdW5jdGlvbj4KQEAgLTEyMyw3ICsxMjMsNyBAQCBpbmxpbmUg
dm9pZCBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JJCiAgICAgZnVuY3Rpb24oX190YXJnZXQp
CiAKICNkZWZpbmUgU1dJVENIX0RFRkFVTFRfT0ZGU0VUKF9fb3ApIFwKLSAgICBmdW5jdGlvbihq
dW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
ZGVmYXVsdE9mZnNldCkpIFwKKyAgICBmdW5jdGlvbihqdW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24o
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSkgXAogCiBT
V0lUQ0hfSk1QKENBU0VfT1AsIFNXSVRDSF9DQVNFLCBTV0lUQ0hfREVGQVVMVF9PRkZTRVQpCiAK
QEAgLTE1NCw3ICsxNTQsNyBAQCBpbmxpbmUgdm9pZCB1cGRhdGVTdG9yZWRKdW1wVGFyZ2V0c0Zv
ckluCiAKICNkZWZpbmUgU1dJVENIX0RFRkFVTFRfT0ZGU0VUKF9fb3ApIFwKICAgICBkbyB7IFwK
LSAgICAgICAgaW50MzJfdCB0YXJnZXQgPSBqdW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24oY29kZUJs
b2NrT3JIYXNoTWFwLCBpbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCk7IFwKKyAg
ICAgICAgaW50MzJfdCB0YXJnZXQgPSBqdW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2Nr
T3JIYXNoTWFwLCBpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsgXAogICAg
ICAgICBpbnQzMl90IG5ld1RhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCk7IFwKICAgICAgICAgaW5z
dHJ1Y3Rpb24tPmNhc3Q8X19vcD4oKS0+c2V0RGVmYXVsdE9mZnNldChCb3VuZExhYmVsKG5ld1Rh
cmdldCksIFsmXSgpIHsgXAogICAgICAgICAgICAgY29kZUJsb2NrLT5hZGRPdXRPZkxpbmVKdW1w
VGFyZ2V0KGZpbmFsT2Zmc2V0ICsgaW5zdHJ1Y3Rpb24ub2Zmc2V0KCksIG5ld1RhcmdldCk7IFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDI0MDAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDEzICs1NCwxMyBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgYXV0byBpbnN0cnVj
dGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gaW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKS5tZXRhZGF0
YShwcm9maWxlZEJsb2NrKTsKIAotICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRh
dGEub2xkU3RydWN0dXJlOworICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEu
bV9vbGRTdHJ1Y3R1cmU7CiAgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlSUQpOwogCi0gICAg
U3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5uZXdTdHJ1Y3R1cmU7CisgICAg
U3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZTsKICAg
ICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAgIGlmICghaXNWYWxpZE9m
ZnNldChvZmZzZXQpKQpAQCAtNzgsNyArNzgsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwogICAgIAogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNldDsK
LSAgICBpZiAoIShtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkpIHsKKyAgICBpZiAo
IShtZXRhZGF0YS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0KSkgewogICAgICAgICBjb25kaXRp
b25TZXQgPQogICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJN
aXNzQ29uY3VycmVudGx5KAogICAgICAgICAgICAgICAgIHZtLCBwcm9maWxlZEJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNDAw
MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyB2b2lkIGR1bXBM
aW5lQ29sdW1uRW50cnkoc2l6ZV90IGkKICAgICBjb25zdCBhdXRvIGluc3RydWN0aW9uID0gaW5z
dHJ1Y3Rpb25TdHJlYW0uYXQoaW5zdHJ1Y3Rpb25PZmZzZXQpOwogICAgIGNvbnN0IGNoYXIqIGV2
ZW50ID0gIiI7CiAgICAgaWYgKGluc3RydWN0aW9uLT5pczxPcERlYnVnPigpKSB7Ci0gICAgICAg
IHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCkuZGVidWdIb29rVHlwZSkgeworICAg
ICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5hczxPcERlYnVnPigpLm1fZGVidWdIb29rVHlwZSkg
ewogICAgICAgICBjYXNlIFdpbGxFeGVjdXRlUHJvZ3JhbTogZXZlbnQgPSAiIFdpbGxFeGVjdXRl
UHJvZ3JhbSI7IGJyZWFrOwogICAgICAgICBjYXNlIERpZEV4ZWN1dGVQcm9ncmFtOiBldmVudCA9
ICIgRGlkRXhlY3V0ZVByb2dyYW0iOyBicmVhazsKICAgICAgICAgY2FzZSBEaWRFbnRlckNhbGxG
cmFtZTogZXZlbnQgPSAiIERpZEVudGVyQ2FsbEZyYW1lIjsgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkocmV2aXNpb24gMjQwMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6
d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4K
ICAqCkBAIC0xMzg5LDEzICsxMzg5LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIEJpbk9wLCB0eXBl
bmFtZSBKbXBPcD4KIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmZ1c2VDb21wYXJlQW5kSnVtcChS
ZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0LCBib29sIHN3YXBPcGVyYW5kcykKIHsKICAg
ICBhdXRvIGJpbm9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPEJpbk9wPigpOwotICAgIGlmIChj
b25kLT5pbmRleCgpID09IGJpbm9wLmRzdC5vZmZzZXQoKSAmJiBjb25kLT5pc1RlbXBvcmFyeSgp
ICYmICFjb25kLT5yZWZDb3VudCgpKSB7CisgICAgaWYgKGNvbmQtPmluZGV4KCkgPT0gYmlub3Au
bV9kc3Qub2Zmc2V0KCkgJiYgY29uZC0+aXNUZW1wb3JhcnkoKSAmJiAhY29uZC0+cmVmQ291bnQo
KSkgewogICAgICAgICByZXdpbmQoKTsKIAogICAgICAgICBpZiAoc3dhcE9wZXJhbmRzKQotICAg
ICAgICAgICAgc3RkOjpzd2FwKGJpbm9wLmxocywgYmlub3AucmhzKTsKKyAgICAgICAgICAgIHN0
ZDo6c3dhcChiaW5vcC5tX2xocywgYmlub3AubV9yaHMpOwogCi0gICAgICAgIEptcE9wOjplbWl0
KHRoaXMsIGJpbm9wLmxocywgYmlub3AucmhzLCB0YXJnZXQuYmluZCh0aGlzKSk7CisgICAgICAg
IEptcE9wOjplbWl0KHRoaXMsIGJpbm9wLm1fbGhzLCBiaW5vcC5tX3JocywgdGFyZ2V0LmJpbmQo
dGhpcykpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTQwNSwxMCArMTQwNSwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBVbmFyeU9wLCB0eXBlbmFt
ZSBKbXBPCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpmdXNlVGVzdEFuZEptcChSZWdpc3RlcklE
KiBjb25kLCBMYWJlbCYgdGFyZ2V0KQogewogICAgIGF1dG8gdW5vcCA9IG1fbGFzdEluc3RydWN0
aW9uLT5hczxVbmFyeU9wPigpOwotICAgIGlmIChjb25kLT5pbmRleCgpID09IHVub3AuZHN0Lm9m
ZnNldCgpICYmIGNvbmQtPmlzVGVtcG9yYXJ5KCkgJiYgIWNvbmQtPnJlZkNvdW50KCkpIHsKKyAg
ICBpZiAoY29uZC0+aW5kZXgoKSA9PSB1bm9wLm1fZHN0Lm9mZnNldCgpICYmIGNvbmQtPmlzVGVt
cG9yYXJ5KCkgJiYgIWNvbmQtPnJlZkNvdW50KCkpIHsKICAgICAgICAgcmV3aW5kKCk7CiAKLSAg
ICAgICAgSm1wT3A6OmVtaXQodGhpcywgdW5vcC5vcGVyYW5kLCB0YXJnZXQuYmluZCh0aGlzKSk7
CisgICAgICAgIEptcE9wOjplbWl0KHRoaXMsIHVub3AubV9vcGVyYW5kLCB0YXJnZXQuYmluZCh0
aGlzKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xNzA5LDQ5ICsxNzA5LDQ5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
RXF1YWwKIHsKICAgICBpZiAobV9sYXN0SW5zdHJ1Y3Rpb24tPmlzPE9wVHlwZW9mPigpKSB7CiAg
ICAgICAgIGF1dG8gb3AgPSBtX2xhc3RJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAg
ICAgIGlmIChzcmMxLT5pbmRleCgpID09IG9wLmRzdC5vZmZzZXQoKQorICAgICAgICBpZiAoc3Jj
MS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQogICAgICAgICAgICAgJiYgc3JjMS0+aXNU
ZW1wb3JhcnkoKQogICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KHNyYzItPmluZGV4KCkpCiAgICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+Y29uc3Rh
bnRSZWdpc3RlcihzcmMyLT5pbmRleCgpKS5nZXQoKS5pc1N0cmluZygpKSB7CiAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAgICAgICAgICAg
aWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7Ci0g
ICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9wLnZhbHVlKTsK
KyAgICAgICAgICAgICAgICBPcElzVW5kZWZpbmVkOjplbWl0KHRoaXMsIGRzdCwgb3AubV92YWx1
ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmICh2YWx1ZSA9PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgICAgICByZXdpbmQoKTsK
LSAgICAgICAgICAgICAgICBPcElzQm9vbGVhbjo6ZW1pdCh0aGlzLCBkc3QsIG9wLnZhbHVlKTsK
KyAgICAgICAgICAgICAgICBPcElzQm9vbGVhbjo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUp
OwogICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAodmFsdWUgPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAgICByZXdpbmQoKTsKLSAg
ICAgICAgICAgICAgICBPcElzTnVtYmVyOjplbWl0KHRoaXMsIGRzdCwgb3AudmFsdWUpOworICAg
ICAgICAgICAgICAgIE9wSXNOdW1iZXI6OmVtaXQodGhpcywgZHN0LCBvcC5tX3ZhbHVlKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KHZhbHVlID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7Ci0gICAgICAg
ICAgICAgICAgT3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIG9wLnZhbHVlLCBTdHJp
bmdUeXBlKTsKKyAgICAgICAgICAgICAgICBPcElzQ2VsbFdpdGhUeXBlOjplbWl0KHRoaXMsIGRz
dCwgb3AubV92YWx1ZSwgU3RyaW5nVHlwZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAic3ltYm9sIikgewogICAg
ICAgICAgICAgICAgIHJld2luZCgpOwotICAgICAgICAgICAgICAgIE9wSXNDZWxsV2l0aFR5cGU6
OmVtaXQodGhpcywgZHN0LCBvcC52YWx1ZSwgU3ltYm9sVHlwZSk7CisgICAgICAgICAgICAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFsdWUsIFN5bWJvbFR5cGUp
OwogICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlQmlnSW50KCkgJiYgdmFsdWUgPT0gImJpZ2ludCIpIHsKICAgICAg
ICAgICAgICAgICByZXdpbmQoKTsKLSAgICAgICAgICAgICAgICBPcElzQ2VsbFdpdGhUeXBlOjpl
bWl0KHRoaXMsIGRzdCwgb3AudmFsdWUsIEJpZ0ludFR5cGUpOworICAgICAgICAgICAgICAgIE9w
SXNDZWxsV2l0aFR5cGU6OmVtaXQodGhpcywgZHN0LCBvcC5tX3ZhbHVlLCBCaWdJbnRUeXBlKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKHZhbHVlID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5kKCk7Ci0gICAg
ICAgICAgICAgICAgT3BJc09iamVjdE9yTnVsbDo6ZW1pdCh0aGlzLCBkc3QsIG9wLnZhbHVlKTsK
KyAgICAgICAgICAgICAgICBPcElzT2JqZWN0T3JOdWxsOjplbWl0KHRoaXMsIGRzdCwgb3AubV92
YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmICh2YWx1ZSA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICAgcmV3aW5k
KCk7Ci0gICAgICAgICAgICAgICAgT3BJc0Z1bmN0aW9uOjplbWl0KHRoaXMsIGRzdCwgb3AudmFs
dWUpOworICAgICAgICAgICAgICAgIE9wSXNGdW5jdGlvbjo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1f
dmFsdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTM4ODksNyArMzg4OSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVuZFN3
aXRjaCh1aW50MzIKICAgICAgICAgICAgIHJldHVybiBCb3VuZExhYmVsKCk7CiAgICAgICAgIH0p
OwogCi0gICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFibGUgPSBtX2NvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKGJ5dGVjb2RlLnRhYmxlSW5kZXgpOworICAgICAgICBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZShieXRlY29kZS5tX3RhYmxlSW5kZXgpOwogICAgICAgICBwcmVwYXJlSnVtcFRhYmxlRm9y
U3dpdGNoKAogICAgICAgICAgICAganVtcFRhYmxlLCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0
LCBjbGF1c2VDb3VudCwgbGFiZWxzLCBub2RlcywgbWluLCBtYXgsCiAgICAgICAgICAgICBzd2l0
Y2hJbmZvLnN3aXRjaFR5cGUgPT0gU3dpdGNoSW5mbzo6U3dpdGNoSW1tZWRpYXRlCkBAIC0zOTE0
LDcgKzM5MTQsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbmRTd2l0Y2godWludDMyCiAg
ICAgICAgICAgICByZXR1cm4gQm91bmRMYWJlbCgpOwogICAgICAgICB9KTsKIAotICAgICAgICBV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3
aXRjaEp1bXBUYWJsZShyZWYtPmFzPE9wU3dpdGNoU3RyaW5nPigpLnRhYmxlSW5kZXgpOworICAg
ICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPnN0
cmluZ1N3aXRjaEp1bXBUYWJsZShyZWYtPmFzPE9wU3dpdGNoU3RyaW5nPigpLm1fdGFibGVJbmRl
eCk7CiAgICAgICAgIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0Y2goanVtcFRhYmxlLCBz
d2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBjbGF1c2VDb3VudCwgbGFiZWxzLCBub2Rlcyk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ4NjAsNyArNDg2MCw3IEBAIHZvaWQgU3RydWN0dXJl
Rm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXQKICAgICAgICAgLy8gMS4gZHN0IHN0YXlzIHRoZSBz
YW1lLgogICAgICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgICAgICAvLyAzLiBw
cm9wZXJ0eSBnZXRzIHN3aXRjaGVkIHRvIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eS4KLSAgICAgICAg
T3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlPigmZ2VuZXJhdG9yLCBieXRlY29kZS5k
c3QsIGJ5dGVjb2RlLmJhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Cisg
ICAgICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZT4oJmdlbmVyYXRvciwgYnl0
ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5UmVn
SW5kZXgpKTsKIAogICAgICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMKICAg
ICAgICAgd2hpbGUgKGdlbmVyYXRvci5tX3dyaXRlci5wb3NpdGlvbigpIDwgZW5kKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDI0MDAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIzMSw4ICsxMjMxLDggQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2FsbE9wPgogQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENhbGxN
b2RlIGNhbGxNb2RlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8Q2FsbE9wPigpOwot
ICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoYnl0ZWNvZGUuY2FsbGVlKTsKLSAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5hcmd2KTsKKyAgICBOb2Rl
KiBjYWxsVGFyZ2V0ID0gZ2V0KGJ5dGVjb2RlLm1fY2FsbGVlKTsKKyAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3YpOwogCiAgICAgQ2FsbExp
bmtTdGF0dXMgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdp
bigpLApAQCAtMTI0MCw4ICsxMjQwLDggQEAgQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5
dGVDb2RlUGFycwogCiAgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQgPSBJbmxpbmVDYWxs
RnJhbWU6OmtpbmRGb3IoY2FsbE1vZGUpOwogCi0gICAgcmV0dXJuIGhhbmRsZUNhbGwoYnl0ZWNv
ZGUuZHN0LCBvcCwga2luZCwgcGMtPnNpemUoKSwgY2FsbFRhcmdldCwKLSAgICAgICAgYnl0ZWNv
ZGUuYXJnYywgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzLCBnZXRQcmVkaWN0aW9uKCkp
OworICAgIHJldHVybiBoYW5kbGVDYWxsKGJ5dGVjb2RlLm1fZHN0LCBvcCwga2luZCwgcGMtPnNp
emUoKSwgY2FsbFRhcmdldCwKKyAgICAgICAgYnl0ZWNvZGUubV9hcmdjLCByZWdpc3Rlck9mZnNl
dCwgY2FsbExpbmtTdGF0dXMsIGdldFByZWRpY3Rpb24oKSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnJlZmluZVN0YXRpY2FsbHkoQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBO
b2RlKiBjYWxsVGFyZ2V0KQpAQCAtMTI4NywxMiArMTI4NywxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDYWxsT3A+CiBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVZhcmFyZ3NDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENhbGxN
b2RlIGNhbGxNb2RlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8Q2FsbE9wPigpOwot
ICAgIGludCBmaXJzdEZyZWVSZWcgPSBieXRlY29kZS5maXJzdEZyZWUub2Zmc2V0KCk7Ci0gICAg
aW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUuZmlyc3RWYXJBcmc7CisgICAgaW50IGZp
cnN0RnJlZVJlZyA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgpOworICAgIGludCBmaXJz
dFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmc7CiAgICAgCiAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAKLSAgICBOb2RlKiBj
YWxsVGFyZ2V0ID0gZ2V0KGJ5dGVjb2RlLmNhbGxlZSk7CisgICAgTm9kZSogY2FsbFRhcmdldCA9
IGdldChieXRlY29kZS5tX2NhbGxlZSk7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExp
bmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLApAQCAtMTMwNCw4
ICsxMzA0LDggQEAgQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFycwogICAg
IGlmIChjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CiAgICAgICAgIGFkZFRvR3JhcGgo
RmlsdGVyQ2FsbExpbmtTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxhbi5yZWNvcmRlZFN0YXR1
c2VzKCkuYWRkQ2FsbExpbmtTdGF0dXMoY3VycmVudENvZGVPcmlnaW4oKSwgY2FsbExpbmtTdGF0
dXMpKSwgY2FsbFRhcmdldCk7CiAKLSAgICAgICAgaWYgKGhhbmRsZVZhcmFyZ3NJbmxpbmluZyhj
YWxsVGFyZ2V0LCBieXRlY29kZS5kc3QsCi0gICAgICAgICAgICBjYWxsTGlua1N0YXR1cywgZmly
c3RGcmVlUmVnLCBieXRlY29kZS50aGlzVmFsdWUsIGJ5dGVjb2RlLmFyZ3VtZW50cywKKyAgICAg
ICAgaWYgKGhhbmRsZVZhcmFyZ3NJbmxpbmluZyhjYWxsVGFyZ2V0LCBieXRlY29kZS5tX2RzdCwK
KyAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzLCBmaXJzdEZyZWVSZWcsIGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlLCBieXRlY29kZS5tX2FyZ3VtZW50cywKICAgICAgICAgICAgIGZpcnN0VmFyQXJnT2Zm
c2V0LCBvcCwKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZTo6dmFyYXJnc0tpbmRGb3IoY2Fs
bE1vZGUpKSkgewogICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3JhcGguY29tcGlsYXRpb24o
KSkpCkBAIC0xMzE3LDEwICsxMzE3LDEwIEBAIEJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0eSBC
eXRlQ29kZVBhcnMKICAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX2dyYXBoLm1fY2FsbFZh
cmFyZ3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0ID0gZmlyc3RWYXJB
cmdPZmZzZXQ7CiAgICAgCi0gICAgTm9kZSogdGhpc0NoaWxkID0gZ2V0KGJ5dGVjb2RlLnRoaXNW
YWx1ZSk7CisgICAgTm9kZSogdGhpc0NoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKTsK
ICAgICBOb2RlKiBhcmd1bWVudHNDaGlsZCA9IG51bGxwdHI7CiAgICAgaWYgKG9wICE9IFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgIGFyZ3VtZW50c0NoaWxkID0gZ2V0KGJ5dGVjb2Rl
LmFyZ3VtZW50cyk7CisgICAgICAgIGFyZ3VtZW50c0NoaWxkID0gZ2V0KGJ5dGVjb2RlLm1fYXJn
dW1lbnRzKTsKIAogICAgIGlmIChvcCA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwgb3AgPT0gVGFpbENh
bGxGb3J3YXJkVmFyYXJncykgewogICAgICAgICBpZiAoYWxsSW5saW5lRnJhbWVzQXJlVGFpbENh
bGxzKCkpIHsKQEAgLTEzMzEsOCArMTMzMSw4IEBAIEJ5dGVDb2RlUGFyc2VyOjpUZXJtaW5hbGl0
eSBCeXRlQ29kZVBhcnMKICAgICB9CiAKICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChvcCwg
T3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlvbiksIGNhbGxUYXJnZXQsIHRoaXNDaGlsZCwg
YXJndW1lbnRzQ2hpbGQpOwotICAgIGlmIChieXRlY29kZS5kc3QuaXNWYWxpZCgpKQotICAgICAg
ICBzZXQoYnl0ZWNvZGUuZHN0LCBjYWxsKTsKKyAgICBpZiAoYnl0ZWNvZGUubV9kc3QuaXNWYWxp
ZCgpKQorICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGNhbGwpOwogICAgIHJldHVybiBOb25U
ZXJtaW5hbDsKIH0KIApAQCAtNDU5Niw4ICs0NTk2LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VHZXRCeUlkKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0
aW9uKCk7CiAgICAgCi0gICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVy
UmVtYXBbYnl0ZWNvZGUucHJvcGVydHldOworICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUu
bV9iYXNlKTsKKyAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUubV9wcm9wZXJ0eV07CiAgICAgCiAgICAgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVt
YmVyXTsKICAgICBHZXRCeUlkU3RhdHVzIGdldEJ5SWRTdGF0dXMgPSBHZXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yKApAQCAtNDYxMyw3ICs0NjEzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VHZXRCeUlkKGNvbnN0IAogICAgICAgICB0eXBlID0gQWNjZXNzVHlwZTo6R2V0RGlyZWN0Owog
CiAgICAgaGFuZGxlR2V0QnlJZCgKLSAgICAgICAgYnl0ZWNvZGUuZHN0LCBwcmVkaWN0aW9uLCBi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeUlkU3RhdHVzLCB0eXBlLCBvcGNvZGVMZW5ndGgp
OworICAgICAgICBieXRlY29kZS5tX2RzdCwgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51
bWJlciwgZ2V0QnlJZFN0YXR1cywgdHlwZSwgb3Bjb2RlTGVuZ3RoKTsKIAogfQogCkBAIC00NzUw
LDggKzQ3NTAsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUaGlzKCk7CiAgICAgICAgICAgICBpZiAob3AxLT5v
cCgpICE9IFRvVGhpcykgewogICAgICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogY2FjaGVkU3RydWN0dXJlID0gbWV0YWRhdGEuY2FjaGVkU3Ry
dWN0dXJlLmdldCgpOwotICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0YS50b1RoaXNTdGF0dXMg
IT0gVG9UaGlzT0sKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGNhY2hlZFN0cnVjdHVyZSA9
IG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgIGlmICht
ZXRhZGF0YS5tX3RvVGhpc1N0YXR1cyAhPSBUb1RoaXNPSwogICAgICAgICAgICAgICAgICAgICB8
fCAhY2FjaGVkU3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIHx8IGNhY2hlZFN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLnRvVGhpcyAhPSBKU09iamVjdDo6aW5mbygpLT5t
ZXRob2RUYWJsZS50b1RoaXMKICAgICAgICAgICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKQEAg
LTQ3NzAsMTEgKzQ3NzAsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKLSAgICAg
ICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuY2FsbGVl
KSk7CisgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fY2FsbGVlKSk7CiAKICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2Fs
bGVlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTRnVuY3Rpb24qPigqbV92bSk7CiAgICAgICAgICAg
ICBpZiAoIWZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBjYWNoZWRGdW5jdGlv
biA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykuY2FjaGVkQ2FsbGVlLnVudmFsaWRhdGVk
R2V0KCk7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBjYWNoZWRGdW5jdGlvbiA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jaykubV9jYWNoZWRDYWxsZWUudW52YWxpZGF0ZWRHZXQoKTsKICAg
ICAgICAgICAgICAgICBpZiAoY2FjaGVkRnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgJiYg
Y2FjaGVkRnVuY3Rpb24gIT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkKICAg
ICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFz
RXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENlbGwpKSB7CkBAIC00ODEzLDY2ICs0ODEzLDY2
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSW5saW5lT2Zmc2V0KGtub3duUG9seVByb3Rv
T2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0
QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgb2JqZWN0LCBvYmplY3QsIHdlYWtKU0NvbnN0YW50KHBy
b3RvdHlwZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCksIG9iamVjdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX2RzdCksIG9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUVt
aXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KCFhbHJlYWR5RW1pdHRlZCkgewotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUuZHN0KSwKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDcmVhdGVUaGlz
LCBPcEluZm8oYnl0ZWNvZGUuaW5saW5lQ2FwYWNpdHkpLCBjYWxsZWUpKTsKKyAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KSwKKyAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDcmVhdGVUaGlzLCBPcEluZm8oYnl0ZWNvZGUubV9pbmxpbmVDYXBh
Y2l0eSksIGNhbGxlZSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY3JlYXRlX3RoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXdfb2JqZWN0
OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsCisgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdPYmpl
Y3QsCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJl
KGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3Ry
dWN0dXJlKCkpKSkpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5yZWdpc3Rl
clN0cnVjdHVyZShieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fb2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUuc3RydWN0dXJlKCkpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3
X29iamVjdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX25ld19h
cnJheTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdBcnJheT4oKTsKLSAgICAgICAgICAgIGludCBzdGFydE9wZXJhbmQgPSBieXRlY29k
ZS5hcmd2Lm9mZnNldCgpOwotICAgICAgICAgICAgaW50IG51bU9wZXJhbmRzID0gYnl0ZWNvZGUu
YXJnYzsKLSAgICAgICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUmIHByb2ZpbGUgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spLmFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgICAg
ICAgICBpbnQgc3RhcnRPcGVyYW5kID0gYnl0ZWNvZGUubV9hcmd2Lm9mZnNldCgpOworICAgICAg
ICAgICAgaW50IG51bU9wZXJhbmRzID0gYnl0ZWNvZGUubV9hcmdjOworICAgICAgICAgICAgQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
aykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlOwogICAgICAgICAgICAgZm9yIChpbnQgb3BlcmFu
ZElkeCA9IHN0YXJ0T3BlcmFuZDsgb3BlcmFuZElkeCA+IHN0YXJ0T3BlcmFuZCAtIG51bU9wZXJh
bmRzOyAtLW9wZXJhbmRJZHgpCiAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kSWR4KSkpOwogICAgICAgICAgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoSGludCA9IHN0ZDo6bWF4PHVuc2lnbmVkPihwcm9maWxlLnZlY3Rvckxlbmd0aEhpbnQo
KSwgbnVtT3BlcmFuZHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFw
aChOb2RlOjpWYXJBcmcsIE5ld0FycmF5LCBPcEluZm8ocHJvZmlsZS5zZWxlY3RJbmRleGluZ1R5
cGUoKSksIE9wSW5mbyh2ZWN0b3JMZW5ndGhIaW50KSkpOworICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgTmV3QXJyYXksIE9wSW5mbyhwcm9m
aWxlLnNlbGVjdEluZGV4aW5nVHlwZSgpKSwgT3BJbmZvKHZlY3Rvckxlbmd0aEhpbnQpKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfYXJyYXkpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlXaXRoU3ByZWFkPigpOwot
ICAgICAgICAgICAgaW50IHN0YXJ0T3BlcmFuZCA9IGJ5dGVjb2RlLmFyZ3Yub2Zmc2V0KCk7Ci0g
ICAgICAgICAgICBpbnQgbnVtT3BlcmFuZHMgPSBieXRlY29kZS5hcmdjOwotICAgICAgICAgICAg
Y29uc3QgQml0VmVjdG9yJiBiaXRWZWN0b3IgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmJpdFZlY3RvcihieXRlY29kZS5iaXRWZWN0b3Ip
OworICAgICAgICAgICAgaW50IHN0YXJ0T3BlcmFuZCA9IGJ5dGVjb2RlLm1fYXJndi5vZmZzZXQo
KTsKKyAgICAgICAgICAgIGludCBudW1PcGVyYW5kcyA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICAg
ICAgICAgIGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yID0gbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5iaXRWZWN0b3IoYnl0ZWNvZGUubV9i
aXRWZWN0b3IpOwogICAgICAgICAgICAgZm9yIChpbnQgb3BlcmFuZElkeCA9IHN0YXJ0T3BlcmFu
ZDsgb3BlcmFuZElkeCA+IHN0YXJ0T3BlcmFuZCAtIG51bU9wZXJhbmRzOyAtLW9wZXJhbmRJZHgp
CiAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KFZpcnR1YWxSZWdpc3RlcihvcGVy
YW5kSWR4KSkpOwogCiAgICAgICAgICAgICBCaXRWZWN0b3IqIGNvcHkgPSBtX2dyYXBoLm1fYml0
VmVjdG9ycy5hZGQoYml0VmVjdG9yKTsKICAgICAgICAgICAgIEFTU0VSVCgqY29weSA9PSBiaXRW
ZWN0b3IpOwogCi0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LAorICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLm1fZHN0LAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBOZXdBcnJheVdpdGhTcHJlYWQsIE9wSW5mbyhjb3B5KSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkKTsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2Ugb3Bfc3ByZWFkOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFNwcmVhZD4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsCi0g
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChTcHJlYWQsIGdldChieXRlY29kZS5hcmd1bWVudCkp
KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFNwcmVhZCwgZ2V0KGJ5dGVjb2RlLm1fYXJndW1lbnQpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9zcHJlYWQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7Ci0gICAgICAg
ICAgICBBcnJheUFsbG9jYXRpb25Qcm9maWxlJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKS5hcnJheUFsbG9jYXRpb25Qcm9maWxlOwotICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLmRzdCwgYWRkVG9HcmFwaChOZXdBcnJheVdpdGhTaXplLCBPcEluZm8ocHJvZmlsZS5zZWxl
Y3RJbmRleGluZ1R5cGUoKSksIGdldChieXRlY29kZS5sZW5ndGgpKSk7CisgICAgICAgICAgICBB
cnJheUFsbG9jYXRpb25Qcm9maWxlJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKHByb2ZpbGUuc2VsZWN0
SW5kZXhpbmdUeXBlKCkpLCBnZXQoYnl0ZWNvZGUubV9sZW5ndGgpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9uZXdfYXJyYXlfd2l0aF9zaXplKTsKICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC00ODgxLDIyICs0ODgxLDIyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IGFsbG9j
YXRlIGEgbmV3IEpTSW1tdXRhYmxlQnV0dGVyZmx5IGlmIHRoZSBwcm9maWxlIHRlbGxzIHVzIG5l
dyBpbmZvcm1hdGlvbiBiZWNhdXNlIHdlCiAgICAgICAgICAgICAvLyBjYW5ub3QgYWxsb2NhdGUg
ZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzLgogICAgICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNl
KCk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5pbW11dGFibGVCdXR0ZXJmbHkpKS0+Y29uc3RhbnQoKTsKKyAgICAgICAgICAg
IEZyb3plblZhbHVlKiBmcm96ZW4gPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1t
dXRhYmxlQnV0dGVyZmx5KSktPmNvbnN0YW50KCk7CiAgICAgICAgICAgICBXVEY6OmxvYWRMb2Fk
RmVuY2UoKTsKICAgICAgICAgICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0
ZXJmbHkgPSBmcm96ZW4tPmNhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPigpOwogICAgICAgICAg
ICAgTmV3QXJyYXlCdWZmZXJEYXRhIGRhdGEgeyB9OwogICAgICAgICAgICAgZGF0YS5pbmRleGlu
Z01vZGUgPSBpbW11dGFibGVCdXR0ZXJmbHktPmluZGV4aW5nTW9kZSgpOwogICAgICAgICAgICAg
ZGF0YS52ZWN0b3JMZW5ndGhIaW50ID0gaW1tdXRhYmxlQnV0dGVyZmx5LT50b0J1dHRlcmZseSgp
LT52ZWN0b3JMZW5ndGgoKTsKIAotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5kc3QpLCBhZGRUb0dyYXBoKE5ld0FycmF5QnVmZmVyLCBPcEluZm8oZnJvemVuKSwgT3BJ
bmZvKGRhdGEuYXNRdWFkV29yZCkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUubV9kc3QpLCBhZGRUb0dyYXBoKE5ld0FycmF5QnVmZmVyLCBPcEluZm8oZnJvemVu
KSwgT3BJbmZvKGRhdGEuYXNRdWFkV29yZCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X25ld19hcnJheV9idWZmZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKLSAgICAgICAgICAgIEFTU0VSVChieXRlY29k
ZS5yZWdleHAuaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW5S
ZWdFeHAgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUucmVnZXhwLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJbmZvKGZyb3plblJlZ0V4
cCksIGpzQ29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CisgICAgICAgICAgICBBU1NFUlQoYnl0ZWNv
ZGUubV9yZWdleHAuaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96
ZW5SZWdFeHAgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9yZWdleHAub2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOZXdSZWdleHAsIE9wSW5mbyhmcm96
ZW5SZWdFeHApLCBqc0NvbnN0YW50KGpzTnVtYmVyKDApKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfbmV3X3JlZ2V4cCk7CiAgICAgICAgIH0KIApAQCAtNDkwNywyNCArNDkwNywyNCBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzTGVuZ3RoID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSByZXN0TGVuZ3RoOwotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNMZW5ndGggPD0gYnl0
ZWNvZGUubnVtUGFyYW1ldGVyc1RvU2tpcCkKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
TGVuZ3RoIDw9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcCkKICAgICAgICAgICAgICAg
ICAgICAgcmVzdExlbmd0aCA9IGpzTnVtYmVyKDApOwogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aCA9IGpzTnVtYmVyKGFyZ3VtZW50c0xlbmd0aCAt
IGJ5dGVjb2RlLm51bVBhcmFtZXRlcnNUb1NraXApOworICAgICAgICAgICAgICAgICAgICByZXN0
TGVuZ3RoID0ganNOdW1iZXIoYXJndW1lbnRzTGVuZ3RoIC0gYnl0ZWNvZGUubV9udW1QYXJhbWV0
ZXJzVG9Ta2lwKTsKIAogICAgICAgICAgICAgICAgIGxlbmd0aCA9IGpzQ29uc3RhbnQocmVzdExl
bmd0aCk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBhZGRU
b0dyYXBoKEdldFJlc3RMZW5ndGgsIE9wSW5mbyhieXRlY29kZS5udW1QYXJhbWV0ZXJzVG9Ta2lw
KSk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBsZW5ndGgpOworICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IGFkZFRvR3JhcGgoR2V0UmVzdExlbmd0aCwgT3BJbmZvKGJ5dGVjb2RlLm1f
bnVtUGFyYW1ldGVyc1RvU2tpcCkpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBs
ZW5ndGgpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Jlc3RfbGVuZ3RoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlUmVzdD4oKTsKICAg
ICAgICAgICAgIG5vdGljZUFyZ3VtZW50c1VzZSgpOwotICAgICAgICAgICAgTm9kZSogYXJyYXlM
ZW5ndGggPSBnZXQoYnl0ZWNvZGUuYXJyYXlTaXplKTsKLSAgICAgICAgICAgIHNldChieXRlY29k
ZS5kc3QsCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDcmVhdGVSZXN0LCBPcEluZm8oYnl0
ZWNvZGUubnVtUGFyYW1ldGVyc1RvU2tpcCksIGFycmF5TGVuZ3RoKSk7CisgICAgICAgICAgICBO
b2RlKiBhcnJheUxlbmd0aCA9IGdldChieXRlY29kZS5tX2FycmF5U2l6ZSk7CisgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDcmVhdGVS
ZXN0LCBPcEluZm8oYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwKSwgYXJyYXlMZW5ndGgp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9yZXN0KTsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC00OTMyLDc0ICs0OTMyLDc0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2JpdG5vdDogewogICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7
Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0Tm90LCBvcDEpKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0Tm90LCBvcDEpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdG5vdCk7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIG9wX2JpdGFuZDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5
dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAgICAg
ICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgaWYgKG9wMS0+
aGFzTnVtYmVyT3JBbnlJbnRSZXN1bHQoKSAmJiBvcDItPmhhc051bWJlck9yQW55SW50UmVzdWx0
KCkpCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChBcml0aEJp
dEFuZCwgb3AxLCBvcDIpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoQXJpdGhCaXRBbmQsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChWYWx1ZUJpdEFuZCwgT3BJ
bmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgb3AxLCBvcDIpKTsKKyAgICAgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoVmFsdWVCaXRBbmQsIE9wSW5mbygpLCBPcElu
Zm8ocHJlZGljdGlvbiksIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9i
aXRhbmQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9iaXRvcjogewogICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRvcj4oKTsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0g
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5t
X3Jocyk7CiAgICAgICAgICAgICBpZiAob3AxLT5oYXNOdW1iZXJPckFueUludFJlc3VsdCgpICYm
IG9wMi0+aGFzTnVtYmVyT3JBbnlJbnRSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0T3IsIG9wMSwgb3AyKSk7CisgICAgICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0T3IsIG9wMSwgb3Ay
KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwg
YWRkVG9HcmFwaChWYWx1ZUJpdE9yLCBPcEluZm8oKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBvcDEs
IG9wMikpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChW
YWx1ZUJpdE9yLCBPcEluZm8oKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBvcDEsIG9wMikpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfYml0b3IpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9iaXR4b3I6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wQml0eG9yPigpOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRl
Y29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7Cisg
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAg
Tm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIGlmIChvcDEtPmhh
c051bWJlck9yQW55SW50UmVzdWx0KCkgJiYgb3AyLT5oYXNOdW1iZXJPckFueUludFJlc3VsdCgp
KQotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoQXJpdGhCaXRY
b3IsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKEFyaXRoQml0WG9yLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoVmFsdWVCaXRYb3IsIE9wSW5m
bygpLCBPcEluZm8ocHJlZGljdGlvbiksIG9wMSwgb3AyKSk7Ci0gICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9iaXRvcik7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKFZhbHVlQml0WG9yLCBPcEluZm8oKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBvcDEsIG9w
MikpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0eG9yKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9
IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2Rl
LnJocyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEJpdFJTaGlm
dCwgb3AxLCBvcDIpKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xo
cyk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOworICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEJpdFJTaGlmdCwgb3AxLCBvcDIp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3JzaGlmdCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX2xzaGlmdDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5y
aHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChCaXRMU2hpZnQs
IG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMp
OworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAg
ICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChCaXRMU2hpZnQsIG9wMSwgb3AyKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9sc2hpZnQpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF91cnNoaWZ0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5y
aHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChCaXRVUlNoaWZ0
LCBvcDEsIG9wMikpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CisgICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoQml0VVJTaGlmdCwgb3AxLCBvcDIp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Vyc2hpZnQpOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBvcF91bnNpZ25lZDogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICAgICAg
ICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9OdW1iZXIs
IGdldChieXRlY29kZS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgbWFrZVNhZmUoYWRkVG9HcmFwaChVSW50MzJUb051bWJlciwgZ2V0KGJ5dGVjb2RlLm1fb3Bl
cmFuZCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF91bnNpZ25lZCk7CiAgICAgICAg
IH0KIApAQCAtNTAwNywxNSArNTAwNywxNSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9pbmM6IHsKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgICAgICAgICAg
Tm9kZSogb3AgPSBnZXQoYnl0ZWNvZGUuc3JjRHN0KTsKLSAgICAgICAgICAgIHNldChieXRlY29k
ZS5zcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBhZGRUb0dyYXBoKEpT
Q29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CisgICAgICAgICAgICBOb2RlKiBv
cCA9IGdldChieXRlY29kZS5tX3NyY0RzdCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9z
cmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9pbmMpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9kZWM6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwotICAg
ICAgICAgICAgTm9kZSogb3AgPSBnZXQoYnl0ZWNvZGUuc3JjRHN0KTsKLSAgICAgICAgICAgIHNl
dChieXRlY29kZS5zcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CisgICAgICAgICAg
ICBOb2RlKiBvcCA9IGdldChieXRlY29kZS5tX3NyY0RzdCk7CisgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9zcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9kZWMpOwogICAgICAgICB9CiAKQEAgLTUwMjMsNTMgKzUwMjMsNTMgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ug
b3BfYWRkOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEFkZD4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMp
OwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIGlmIChvcDEtPmhhc051bWJlclJl
c3VsdCgpICYmIG9wMi0+aGFzTnVtYmVyUmVzdWx0KCkpCi0gICAgICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgb3AxLCBvcDIpKSk7Cisg
ICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFy
aXRoQWRkLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUuZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKFZhbHVlQWRkLCBvcDEsIG9wMikp
KTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIG1ha2VTYWZlKGFkZFRvR3Jh
cGgoVmFsdWVBZGQsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYWRk
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3ViOiB7CiAgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4oKTsKLSAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUu
bV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAg
ICAgICAgICAgIGlmIChvcDEtPmhhc051bWJlclJlc3VsdCgpICYmIG9wMi0+aGFzTnVtYmVyUmVz
dWx0KCkpCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9H
cmFwaChBcml0aFN1Yiwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcDEsIG9wMikpKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBtYWtlU2FmZShh
ZGRUb0dyYXBoKFZhbHVlU3ViLCBvcDEsIG9wMikpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVTdWIsIG9wMSwgb3AyKSkpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3ViKTsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2Ugb3BfbmVnYXRlOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRl
Y29kZS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX29w
ZXJhbmQpOwogICAgICAgICAgICAgaWYgKG9wMS0+aGFzTnVtYmVyUmVzdWx0KCkpCi0gICAgICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0
ZSwgb3AxKSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbWFrZVNhZmUo
YWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgb3AxKSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVOZWdh
dGUsIG9wMSkpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIG1ha2VTYWZl
KGFkZFRvR3JhcGgoVmFsdWVOZWdhdGUsIG9wMSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX25lZ2F0ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX211bDogewogICAgICAg
ICAgICAgLy8gTXVsdGlwbHkgcmVxdWlyZXMgdGhhdCB0aGUgaW5wdXRzIGFyZSBub3QgdHJ1bmNh
dGVkLCB1bmZvcnR1bmF0ZWx5LgogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0
ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwor
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBpZiAob3AxLT5o
YXNOdW1iZXJSZXN1bHQoKSAmJiBvcDItPmhhc051bWJlclJlc3VsdCgpKQotICAgICAgICAgICAg
ICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhNdWwsIG9wMSwg
b3AyKSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbWFrZVNhZmUoYWRk
VG9HcmFwaChBcml0aE11bCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChWYWx1ZU11bCwg
b3AxLCBvcDIpKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKFZhbHVlTXVsLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX211bCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX21vZDogewogICAgICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0g
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRz
dCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIpKSk7CisgICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9tb2QpOwogICAgICAgICB9CiAKQEAgLTUwNzcsMjAgKzUwNzcsMjAgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgLy8g
RklYTUU6IEFyaXRoUG93KFVudHlwZWQsIFVudHlwZWQpIHNob3VsZCBiZSBzdXBwb3J0ZWQgYXMg
dGhlIHNhbWUgdG8gQXJpdGhNdWwsIEFyaXRoU3ViIGV0Yy4KICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAwMTIKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93PigpOwotICAgICAgICAg
ICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIg
PSBnZXQoYnl0ZWNvZGUucmhzKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRv
R3JhcGgoQXJpdGhQb3csIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Ynl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1f
cmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChBcml0aFBv
dywgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Bvdyk7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIG9wX2RpdjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29k
ZS5yaHMpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBp
ZiAob3AxLT5oYXNOdW1iZXJSZXN1bHQoKSAmJiBvcDItPmhhc051bWJlclJlc3VsdCgpKQotICAg
ICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VEaXZTYWZlKGFkZFRvR3JhcGgoQXJp
dGhEaXYsIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
bWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZURpdlNhZmUoYWRk
VG9HcmFwaChWYWx1ZURpdiwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBtYWtlRGl2U2FmZShhZGRUb0dyYXBoKFZhbHVlRGl2LCBvcDEsIG9wMikpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Rpdik7CiAgICAgICAgIH0KIApAQCAtNTEwNSwx
NCArNTEwNSwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAK
ICAgICAgICAgY2FzZSBvcF9tb3Y6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQo
Ynl0ZWNvZGUuc3JjKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG9wKTsKKyAgICAg
ICAgICAgIE5vZGUqIG9wID0gZ2V0KGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdGR6OiB7CiAgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja05vdEVtcHR5LCBnZXQoYnl0ZWNvZGUudGFyZ2V0KSk7Cisg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrTm90RW1wdHksIGdldChieXRlY29kZS5tX3Rhcmdl
dCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2hlY2tfdGR6KTsKICAgICAgICAgfQog
CkBAIC01MTIwLDE4ICs1MTIwLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7CiAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBk
ZWZhdWx0SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RGb3IoY3VycmVudENvZGVPcmlnaW4oKSktPmZ1bmN0aW9uUHJv
dG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCk7CiAKLSAgICAgICAgICAgIE5vZGUqIGNvbnN0
cnVjdG9yID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5jb25zdHJ1Y3RvcikpOwotICAg
ICAgICAgICAgTm9kZSogaGFzSW5zdGFuY2VWYWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZSkpOworICAgICAgICAgICAgTm9kZSogY29uc3RydWN0b3Ig
PSBnZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uc3RydWN0b3IpKTsKKyAgICAgICAg
ICAgIE5vZGUqIGhhc0luc3RhbmNlVmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1faGFzSW5zdGFuY2VWYWx1ZSkpOwogCi0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLmRzdCksIGFkZFRvR3JhcGgoT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIE9wSW5mbyht
X2dyYXBoLmZyZWV6ZShkZWZhdWx0SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpLCBjb25zdHJ1
Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdCksIGFkZFRvR3JhcGgoT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIE9wSW5m
byhtX2dyYXBoLmZyZWV6ZShkZWZhdWx0SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbikpLCBjb25z
dHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
b3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lk
ZW50aXR5X3dpdGhfcHJvZmlsZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxlPigpOwotICAgICAgICAgICAg
Tm9kZSogc3JjRHN0ID0gZ2V0KGJ5dGVjb2RlLnNyY0RzdCk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29k
ZS50b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29k
ZS5ib3R0b21Qcm9maWxlKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5zcmNEc3QsIGFkZFRv
R3JhcGgoSWRlbnRpdHlXaXRoUHJvZmlsZSwgT3BJbmZvKHNwZWN1bGF0aW9uKSwgc3JjRHN0KSk7
CisgICAgICAgICAgICBOb2RlKiBzcmNEc3QgPSBnZXQoYnl0ZWNvZGUubV9zcmNEc3QpOworICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0aWNfY2FzdDxTcGVjdWxh
dGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1
bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLm1fc3JjRHN0LCBhZGRUb0dyYXBoKElkZW50aXR5V2l0aFByb2ZpbGUsIE9wSW5mbyhz
cGVjdWxhdGlvbiksIHNyY0RzdCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaWRlbnRp
dHlfd2l0aF9wcm9maWxlKTsKICAgICAgICAgfQogCkBAIC01MTQyLDggKzUxNDIsOCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0YWNrVG9wLT5tX2Jhc2Vs
aW5lTWFwLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4KTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUudmFsdWUpOwotICAgICAgICAg
ICAgTm9kZSogcHJvdG90eXBlID0gZ2V0KGJ5dGVjb2RlLnByb3RvdHlwZSk7CisgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIE5vZGUq
IHByb3RvdHlwZSA9IGdldChieXRlY29kZS5tX3Byb3RvdHlwZSk7CiAKICAgICAgICAgICAgIC8v
IE9ubHkgaW5saW5lIGl0IGlmIGl0J3MgU2ltcGxlIHdpdGggYSBjb21tb25Qcm90b3R5cGU7IGJv
dHRvbS90b3Agb3IgdmFyaWFibGUKICAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgYm90aCBnZXQg
aGFuZGxlZCBieSB0aGUgSUMuIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIGJvdHRvbSAodW5wcm9maWxl
ZCkKQEAgLTUxNzEsMTAyICs1MTcxLDEwMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGFsbE9L
KSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGNoID0gYWRkVG9HcmFwaChNYXRjaFN0
cnVjdHVyZSwgT3BJbmZvKGRhdGEpLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldChi
eXRlY29kZS5kc3QsIG1hdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1f
ZHN0LCBtYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luc3RhbmNl
b2YpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2YWx1ZSwg
cHJvdG90eXBlKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgo
SW5zdGFuY2VPZiwgdmFsdWUsIHByb3RvdHlwZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfaW5zdGFuY2VvZik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Zf
Y3VzdG9tOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdl
dChieXRlY29kZS52YWx1ZSk7Ci0gICAgICAgICAgICBOb2RlKiBjb25zdHJ1Y3RvciA9IGdldChi
eXRlY29kZS5jb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICBOb2RlKiBoYXNJbnN0YW5jZVZhbHVl
ID0gZ2V0KGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUpOwotICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLmRzdCwgYWRkVG9HcmFwaChJbnN0YW5jZU9mQ3VzdG9tLCB2YWx1ZSwgY29uc3RydWN0b3Is
IGhhc0luc3RhbmNlVmFsdWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVj
b2RlLm1fdmFsdWUpOworICAgICAgICAgICAgTm9kZSogY29uc3RydWN0b3IgPSBnZXQoYnl0ZWNv
ZGUubV9jb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBOb2RlKiBoYXNJbnN0YW5jZVZhbHVlID0g
Z2V0KGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5zdGFuY2VPZkN1c3RvbSwgdmFsdWUsIGNvbnN0cnVjdG9y
LCBoYXNJbnN0YW5jZVZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0YW5j
ZW9mX2N1c3RvbSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9pc19lbXB0eTogewogICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5
PigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzRW1wdHksIHZhbHVlKSk7
CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKElzRW1wdHksIHZhbHVlKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19lbXB0eSk7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9pc191bmRlZmluZWQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0gICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChieXRlY29kZS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChieXRlY29k
ZS5kc3QsIGFkZFRvR3JhcGgoSXNVbmRlZmluZWQsIHZhbHVlKSk7CisgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKElzVW5kZWZpbmVkLCB2YWx1ZSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfaXNfdW5kZWZpbmVkKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9w
X2lzX3VuZGVmaW5lZF9vcl9udWxsOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0
ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzVW5kZWZpbmVkT3JOdWxsLCB2YWx1ZSkpOworICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc1VuZGVmaW5lZE9yTnVsbCwgdmFsdWUp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjogewogICAgICAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Ci0gICAg
ICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoSXNCb29sZWFuLCB2YWx1ZSkpOworICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc0Jvb2xlYW4sIHZhbHVlKSk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9pc19ib29sZWFuKTsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2Ugb3BfaXNfbnVtYmVyOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBh
ZGRUb0dyYXBoKElzTnVtYmVyLCB2YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBn
ZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChJc051bWJlciwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2lzX251bWJlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX2NlbGxfd2l0aF90
eXBlOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzQ2VsbFdpdGhUeXBlPigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0
ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBo
KElzQ2VsbFdpdGhUeXBlLCBPcEluZm8oYnl0ZWNvZGUudHlwZSksIHZhbHVlKSk7CisgICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKElzQ2VsbFdpdGhUeXBlLCBPcEluZm8oYnl0
ZWNvZGUubV90eXBlKSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX2Nl
bGxfd2l0aF90eXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0OiB7
CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
T2JqZWN0PigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzT2JqZWN0LCB2
YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5k
KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc09iamVjdCwg
dmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX29iamVjdCk7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIG9wX2lzX29iamVjdF9vcl9udWxsOiB7CiAgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0T3JOdWxsPigp
OwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzT2JqZWN0T3JOdWxsLCB2YWx1
ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsK
KyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc09iamVjdE9yTnVs
bCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX29iamVjdF9vcl9udWxs
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNGdW5jdGlvbj4o
KTsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm9wZXJhbmQpOwotICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChJc0Z1bmN0aW9uLCB2YWx1ZSkp
OworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc0Z1bmN0aW9uLCB2YWx1
ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfZnVuY3Rpb24pOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9ub3Q6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBh
ZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0
LCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9ub3QpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF90b19w
cmltaXRpdmU6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChi
eXRlY29kZS5zcmMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChU
b1ByaW1pdGl2ZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVj
b2RlLm1fc3JjKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChU
b1ByaW1pdGl2ZSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX3ByaW1p
dGl2ZSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3N0cmNhdDog
ewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BT
dHJjYXQ+KCk7Ci0gICAgICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0gYnl0ZWNvZGUuc3JjLm9m
ZnNldCgpOwotICAgICAgICAgICAgaW50IG51bU9wZXJhbmRzID0gYnl0ZWNvZGUuY291bnQ7Cisg
ICAgICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7Cisg
ICAgICAgICAgICBpbnQgbnVtT3BlcmFuZHMgPSBieXRlY29kZS5tX2NvdW50OwogI2lmIENQVShY
ODYpCiAgICAgICAgICAgICAvLyBYODYgZG9lc24ndCBoYXZlIGVub3VnaCByZWdpc3RlcnMgdG8g
Y29tcGlsZSBNYWtlUm9wZSB3aXRoIHRocmVlIGFyZ3VtZW50cy4gVGhlCiAgICAgICAgICAgICAv
LyBTdHJDYXQgd2UgZW1pdCBoZXJlIG1heSBiZSB0dXJuZWQgaW50byBhIE1ha2VSb3BlLiBSYXRo
ZXIgdGhhbiB0cnkgdG8gYmUgY2xldmVyLApAQCAtNTI5MSwxMDUgKzUyOTEsMTA1IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBBU1NF
UlQoaW5kZXhJbk9wZXJhbmRzIDwgbWF4QXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICBvcGVy
YW5kc1tpbmRleEluT3BlcmFuZHMrK10gPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHN0YXJ0T3BlcmFu
ZCAtIG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldChieXRlY29k
ZS5kc3QsIGFkZFRvR3JhcGgoU3RyQ2F0LCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJh
bmRzWzJdKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoU3Ry
Q2F0LCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9zdHJjYXQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9s
ZXNzOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcExlc3M+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsK
LSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMikpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfbGVzcyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xlc3Nl
cTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BMZXNzZXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsK
LSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMikpOwor
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2xlc3NlcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2dyZWF0ZXI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR3JlYXRlcj4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29k
ZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyLCBvcDEs
IG9wMikpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAg
ICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9ncmVhdGVyKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLnJocyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKENvbXBh
cmVHcmVhdGVyRXEsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhz
KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChDb21wYXJlR3Jl
YXRlckVxLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ3JlYXRlcmVx
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfYmVsb3c6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3c+KCk7Ci0gICAgICAg
ICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9w
MiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRk
VG9HcmFwaChDb21wYXJlQmVsb3csIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChD
b21wYXJlQmVsb3csIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9iZWxv
dyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2JlbG93ZXE6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQmVsb3dlcT4oKTsKLSAg
ICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0
LCBhZGRUb0dyYXBoKENvbXBhcmVCZWxvd0VxLCBvcDEsIG9wMikpOworICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdl
dChieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRv
R3JhcGgoQ29tcGFyZUJlbG93RXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9iZWxvd2VxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZXE6IHsKICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0g
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRz
dCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5
dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFw
aChDb21wYXJlRXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lcSk7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2VxX251bGw6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOwotICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7CisgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgTm9kZSog
bnVsbENvbnN0YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51
bGwpKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUVx
LCB2YWx1ZSwgbnVsbENvbnN0YW50KSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50KSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9lcV9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bf
c3RyaWN0ZXE6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3RyaWN0ZXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNv
ZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9w
MSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3Ay
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdHJpY3RlcSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX25lcTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Ynl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBh
ZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChM
b2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9uZXEpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXFf
bnVsbDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXFOdWxsPigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUu
b3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJh
bmQpOwogICAgICAgICAgICAgTm9kZSogbnVsbENvbnN0YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0
YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5k
c3QsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBu
dWxsQ29uc3RhbnQpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVlLCBudWxsQ29uc3RhbnQp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX25zdHJpY3RlcTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCk7Ci0gICAgICAgICAgICBOb2Rl
KiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChi
eXRlY29kZS5yaHMpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAg
ICAgICBOb2RlKiBpbnZlcnRlZFJlc3VsdDsKICAgICAgICAgICAgIGludmVydGVkUmVzdWx0ID0g
YWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKTsKLSAgICAgICAgICAgIHNldChi
eXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgaW52ZXJ0ZWRSZXN1bHQpKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBpbnZl
cnRlZFJlc3VsdCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbnN0cmljdGVxKTsKICAg
ICAgICAgfQogCkBAIC01Mzk5LDggKzUzOTksOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOwogCi0gICAgICAgICAgICBO
b2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgICAgICAgICAgTm9kZSogcHJvcGVy
dHkgPSBnZXQoYnl0ZWNvZGUucHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdl
dChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0
ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBib29sIGNvbXBpbGVkQXNHZXRCeUlkID0g
ZmFsc2U7CiAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIGdldEJ5SWRTdGF0dXM7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gMDsKQEAgLTU0MzQsOSArNTQzNCw5IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgaWYgKGNvbXBpbGVkQXNHZXRCeUlkKQotICAgICAgICAgICAgICAgIGhh
bmRsZUdldEJ5SWQoYnl0ZWNvZGUuZHN0LCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCBnZXRCeUlkU3RhdHVzLCBBY2Nlc3NUeXBlOjpHZXQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+
c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5dGVjb2RlLm1fZHN0LCBw
cmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeUlkU3RhdHVzLCBBY2Nlc3NU
eXBlOjpHZXQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAg
ICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgY29uc2lkZXIgbWFraW5nIHRoaXMgbm90IHZh
cmFyZywgc2luY2UgaXQgb25seSB1c2VzIHRocmVlIGNoaWxkCiAgICAgICAgICAgICAgICAgLy8g
c2xvdHMuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE4NDE5MgpAQCAtNTQ0NSw3ICs1NDQ1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDAp
OyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAgICAgICAgICAgICAgIE5v
ZGUqIGdldEJ5VmFsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEdldEJ5VmFsLCBPcEluZm8o
YXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAg
ICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBHZXRCeVZhbCBtdXN0IGJlIHRyZWF0ZWQgYXMgaWYgaXQg
Y2xvYmJlcnMgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSBpdCBnZW5lcmlj
LgotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGdldEJ5VmFsKTsKKyAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGdldEJ5VmFsKTsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CkBAIC01NDU1LDExICs1NDU1
LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWxXaXRo
VGhpcz4oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVk
aWN0aW9uKCk7CiAKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7
Ci0gICAgICAgICAgICBOb2RlKiB0aGlzVmFsdWUgPSBnZXQoYnl0ZWNvZGUudGhpc1ZhbHVlKTsK
LSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKKyAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAg
IE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAg
ICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAgICAg
IE5vZGUqIGdldEJ5VmFsV2l0aFRoaXMgPSBhZGRUb0dyYXBoKEdldEJ5VmFsV2l0aFRoaXMsIE9w
SW5mbygpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpOwot
ICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgZ2V0QnlWYWxXaXRoVGhpcyk7CisgICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGdldEJ5VmFsV2l0aFRoaXMpOwogCiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9nZXRfYnlfdmFsX3dpdGhfdGhpcyk7CiAgICAgICAgIH0KQEAgLTU0
NzUsMTAgKzU0NzUsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxXaXRoVGhp
cz4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAg
ICAgICAgICBOb2RlKiB0aGlzVmFsdWUgPSBnZXQoYnl0ZWNvZGUudGhpc1ZhbHVlKTsKLSAgICAg
ICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICAgICAg
ICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKKyAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUqIHRoaXNWYWx1
ZSA9IGdldChieXRlY29kZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0
eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNl
KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHRoaXNWYWx1ZSk7CkBAIC01NDkxLDEwICs1
NDkxLDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAg
ICAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OiB7CiAgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlZmluZURhdGFQcm9wZXJ0eT4oKTsK
LSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAg
ICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS52YWx1ZSk7Ci0gICAgICAgICAgICBOb2RlKiBhdHRy
aWJ1dGVzID0gZ2V0KGJ5dGVjb2RlLmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgTm9kZSogYmFz
ZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBn
ZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChi
eXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIE5vZGUqIGF0dHJpYnV0ZXMgPSBnZXQoYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzKTsKIAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7
CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CkBAIC01NTA3LDExICs1NTA3
LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAg
ICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eTogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWZpbmVBY2Nlc3NvclByb3BlcnR5
PigpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAgICAg
ICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICAgICAg
ICAgIE5vZGUqIGdldHRlciA9IGdldChieXRlY29kZS5nZXR0ZXIpOwotICAgICAgICAgICAgTm9k
ZSogc2V0dGVyID0gZ2V0KGJ5dGVjb2RlLnNldHRlcik7Ci0gICAgICAgICAgICBOb2RlKiBhdHRy
aWJ1dGVzID0gZ2V0KGJ5dGVjb2RlLmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgTm9kZSogYmFz
ZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBn
ZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgICAgICAgICBOb2RlKiBnZXR0ZXIgPSBnZXQo
Ynl0ZWNvZGUubV9nZXR0ZXIpOworICAgICAgICAgICAgTm9kZSogc2V0dGVyID0gZ2V0KGJ5dGVj
b2RlLm1fc2V0dGVyKTsKKyAgICAgICAgICAgIE5vZGUqIGF0dHJpYnV0ZXMgPSBnZXQoYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzKTsKIAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CiAg
ICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CkBAIC01NTM5LDIxICs1NTM5LDIx
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhU
aGlzPigpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAg
ICAgICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS50aGlzVmFsdWUpOwotICAg
ICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1f
aWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKKyAgICAgICAgICAgIE5vZGUqIGJh
c2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9
IGdldChieXRlY29kZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUu
bV9wcm9wZXJ0eV07CiAKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsCisgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRCeUlk
V2l0aFRoaXMsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBi
YXNlLCB0aGlzVmFsdWUpKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X2lk
X3dpdGhfdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJ
ZD4oKTsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKLSAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVy
UmVtYXBbYnl0ZWNvZGUucHJvcGVydHldOwotICAgICAgICAgICAgYm9vbCBkaXJlY3QgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spLmZsYWdzICYgUHV0QnlJZElzRGlyZWN0OworICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CisgICAgICAgICAgICBO
b2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0
ZWNvZGUubV9wcm9wZXJ0eV07CisgICAgICAgICAgICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jaykubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKIAogICAgICAgICAg
ICAgUHV0QnlJZFN0YXR1cyBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssCkBA
IC01NTY2LDEwICs1NTY2LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKIAogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF93aXRoX3RoaXM6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZFdpdGhU
aGlzPigpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAg
ICAgICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS50aGlzVmFsdWUpOwotICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUudmFsdWUpOwotICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmll
clJlbWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQo
Ynl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRl
Y29kZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29k
ZS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3Byb3BlcnR5XTsKIAog
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkV2l0aFRoaXMsIE9wSW5mbyhpZGVudGlmaWVy
TnVtYmVyKSwgYmFzZSwgdGhpc1ZhbHVlLCB2YWx1ZSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9wdXRfYnlfaWRfd2l0aF90aGlzKTsKQEAgLTU1ODUsMTEgKzU1ODUsMTEgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXJfYnlfaWQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0
ZWNvZGUucHJvcGVydHldOwotICAgICAgICAgICAgTm9kZSogZ2V0dGVyID0gZ2V0KGJ5dGVjb2Rl
LmdldHRlcik7Ci0gICAgICAgICAgICBOb2RlKiBzZXR0ZXIgPSBnZXQoYnl0ZWNvZGUuc2V0dGVy
KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0R2V0dGVyU2V0dGVyQnlJZCwgT3BJbmZvKGlk
ZW50aWZpZXJOdW1iZXIpLCBPcEluZm8oYnl0ZWNvZGUuYXR0cmlidXRlcyksIGJhc2UsIGdldHRl
ciwgc2V0dGVyKTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNl
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNr
VG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3Byb3BlcnR5XTsKKyAgICAgICAgICAg
IE5vZGUqIGdldHRlciA9IGdldChieXRlY29kZS5tX2dldHRlcik7CisgICAgICAgICAgICBOb2Rl
KiBzZXR0ZXIgPSBnZXQoYnl0ZWNvZGUubV9zZXR0ZXIpOworICAgICAgICAgICAgYWRkVG9HcmFw
aChQdXRHZXR0ZXJTZXR0ZXJCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhi
eXRlY29kZS5tX2F0dHJpYnV0ZXMpLCBiYXNlLCBnZXR0ZXIsIHNldHRlcik7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZCk7CiAgICAgICAgIH0KIApA
QCAtNTYwMywzMSArNTYwMywzMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBb
Ynl0ZWNvZGUucHJvcGVydHldOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9H
cmFwaChEZWxldGVCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UpKTsKKyAgICAg
ICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJS
ZW1hcFtieXRlY29kZS5tX3Byb3BlcnR5XTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChEZWxldGVCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2Up
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2RlbF9ieV9pZCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2RlbF9ieV92YWw6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0gICAgICAgICAgICBOb2Rl
KiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0
KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRv
R3JhcGgoRGVsZXRlQnlWYWwsIGJhc2UsIGtleSkpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9
IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSoga2V5ID0gZ2V0KGJ5dGVj
b2RlLm1fcHJvcGVydHkpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dy
YXBoKERlbGV0ZUJ5VmFsLCBiYXNlLCBrZXkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2RlbF9ieV92YWwpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5cGU6
IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZVR5cGU+KCk7CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZVRvUHJvZmlsZSA9IGdl
dChieXRlY29kZS50YXJnZXQpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChQcm9maWxlVHlwZSwg
T3BJbmZvKG1ldGFkYXRhLnR5cGVMb2NhdGlvbiksIHZhbHVlVG9Qcm9maWxlKTsKKyAgICAgICAg
ICAgIE5vZGUqIHZhbHVlVG9Qcm9maWxlID0gZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUHJvZmlsZVR5cGUsIE9wSW5mbyhtZXRhZGF0YS5tX3R5cGVMb2Nh
dGlvbiksIHZhbHVlVG9Qcm9maWxlKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Byb2Zp
bGVfdHlwZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9m
bG93OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFByb2ZpbGVDb250cm9sRmxvdz4oKTsKLSAgICAgICAgICAgIEJhc2ljQmxvY2tMb2NhdGlv
biogYmFzaWNCbG9ja0xvY2F0aW9uID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5iYXNp
Y0Jsb2NrTG9jYXRpb247CisgICAgICAgICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxv
Y2tMb2NhdGlvbiA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9iYXNpY0Jsb2NrTG9j
YXRpb247CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFByb2ZpbGVDb250cm9sRmxvdywgT3BJbmZv
KGJhc2ljQmxvY2tMb2NhdGlvbikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHJvZmls
ZV9jb250cm9sX2Zsb3cpOwogICAgICAgICB9CkBAIC01NjM3LDcgKzU2MzcsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3Bfam1wOiB7
CiAgICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKTsKICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm1wPigpOwot
ICAgICAgICAgICAgaW50IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJn
ZXQpOworICAgICAgICAgICAgaW50IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29k
ZS5tX3RhcmdldCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJl
bnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CiAgICAgICAgICAgICBpZiAocmVsYXRpdmVPZmZz
ZXQgPD0gMCkKICAgICAgICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7CkBAIC01NjQ2LDI0
ICs1NjQ2LDI0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAog
ICAgICAgICBjYXNlIG9wX2p0cnVlOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEp0cnVlPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVs
YXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBO
b2RlKiBjb25kaXRpb24gPSBnZXQoYnl0ZWNvZGUuY29uZGl0aW9uKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7Cisg
ICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBnZXQoYnl0ZWNvZGUubV9jb25kaXRpb24pOwog
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0
aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2p0
cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7CiAgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50
YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGJ5dGVjb2RlLmNvbmRp
dGlvbik7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQo
Ynl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gZ2V0KGJ5
dGVjb2RlLm1fY29uZGl0aW9uKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcElu
Zm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgp
LCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICBMQVNUX09QQ09ERShvcF9qZmFsc2UpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBv
cF9qZXFfbnVsbDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZz
ZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1
ZSA9IGdldChieXRlY29kZS52YWx1ZSk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSog
dmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICBOb2RlKiBudWxsQ29u
c3RhbnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpOwog
ICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVl
LCBudWxsQ29uc3RhbnQpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhi
cmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4
ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKQEAgLTU2NzIsOCAr
NTY3Miw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAg
ICAgICBjYXNlIG9wX2puZXFfbnVsbDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUudmFsdWUpOworICAgICAgICAgICAgdW5zaWdu
ZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICAg
ICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgICAgICAgICAg
Tm9kZSogbnVsbENvbnN0YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25z
dGFudE51bGwpKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29t
cGFyZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50KTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlv
bi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7
CkBAIC01NjgyLDkgKzU2ODIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbGVzczogewogICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbGVzcz4oKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAg
ICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2Rl
KiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZl
T2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBOb2Rl
KiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0
KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3Jh
cGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNo
LCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1
cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbGVzcyk7CkBAIC01NjkyLDkgKzU2OTIsOSBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBv
cF9qbGVzc2VxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpsZXNzZXE+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNl
dCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9
IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2Rl
LnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQo
Ynl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAg
ICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzRXEsIG9w
MSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0
YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09Q
Q09ERShvcF9qbGVzc2VxKTsKQEAgLTU3MDIsOSArNTcwMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2pncmVhdGVyOiB7CiAg
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpncmVh
dGVyPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0
KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUu
bGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAg
ICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFy
Z2V0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAg
ICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9k
ZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBvcDIpOwogICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVh
dGVyKTsKQEAgLTU3MTIsOSArNTcxMiw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmdyZWF0ZXJlcT4oKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29k
ZS50YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0g
ICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7Cisg
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAg
Tm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRp
dGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIpOwogICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsg
cmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXpl
KCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pncmVhdGVyZXEp
OwpAQCAtNTcyMiw5ICs1NzIyLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfamVxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAgICAg
ICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBv
cDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zm
c2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5
dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgo
Q29tcGFyZUVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJ
bmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50
SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAg
ICAgICAgTEFTVF9PUENPREUob3BfamVxKTsKQEAgLTU3MzIsOSArNTczMiw5IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2pzdHJp
Y3RlcTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKc3RyaWN0ZXE+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9
IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJo
cyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0
ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1f
bGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVTdHJpY3RFcSwgb3Ax
LCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRh
KG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVu
dEluc3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BD
T0RFKG9wX2pzdHJpY3RlcSk7CkBAIC01NzQyLDkgKzU3NDIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5sZXNz
PigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5
dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhz
KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAg
ICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAg
ICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzcywgb3AxLCBvcDIpOwogICAgICAgICAg
ICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsg
Y3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZz
ZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzcyk7CkBA
IC01NzUyLDkgKzU3NTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcTogewogICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmxlc3NlcT4oKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwot
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRv
R3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChC
cmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0
aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9u
KTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pubGVzc2VxKTsKQEAgLTU3NjIsOSArNTc2
Miw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAg
ICBjYXNlIG9wX2puZ3JlYXRlcjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbmdyZWF0ZXI+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBy
ZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAg
IE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9
IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0g
Z2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29k
ZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBh
cmVHcmVhdGVyLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJ
bmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAg
ICAgICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVyKTsKQEAgLTU3NzIsOSArNTc3Miw5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9w
X2puZ3JlYXRlcmVxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZ3JlYXRlcmVxPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRp
dmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2Rl
KiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChi
eXRlY29kZS5yaHMpOworICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1w
VGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChi
eXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9y
aHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3Jl
YXRlckVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZv
KGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwg
bV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAg
ICAgTEFTVF9PUENPREUob3Bfam5ncmVhdGVyZXEpOwpAQCAtNTc4Miw5ICs1NzgyLDkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3Bf
am5lcTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1w
VGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0
ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwor
ICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2Rl
Lm1fdGFyZ2V0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7
CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAg
ICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKTsKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJ
bmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0
aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmVx
KTsKQEAgLTU3OTIsOSArNTc5Miw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2puc3RyaWN0ZXE6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50
YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAg
ICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZVN0cmljdEVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkp
LCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5zdHJpY3RlcSk7CkBA
IC01ODAyLDkgKzU4MDIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgY2FzZSBvcF9qYmVsb3c6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmJlbG93PigpOwotICAgICAgICAgICAgdW5z
aWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUq
IG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVP
ZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICAgICAgICAgIE5vZGUq
IG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQo
Ynl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFw
aChDb21wYXJlQmVsb3csIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNo
LCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1
cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CiAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qYmVsb3cpOwpAQCAtNTgxMiw5ICs1ODEyLDkgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ug
b3BfamJlbG93ZXE6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSmJlbG93ZXE+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJn
ZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVj
b2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7
CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVCZWxvd0Vx
LCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5j
aERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBj
dXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFT
VF9PUENPREUob3BfamJlbG93ZXEpOwpAQCAtNTgyNCw4ICs1ODI0LDggQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CiAgICAgICAgICAgICBTd2l0
Y2hEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFkZCgpOwogICAgICAgICAgICAg
ZGF0YS5raW5kID0gU3dpdGNoSW1tOwotICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4
ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtieXRlY29kZS50YWJsZUluZGV4XTsK
LSAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJ
bmRleCArIGp1bXBUYXJnZXQoYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCkpOworICAgICAgICAgICAg
ZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFti
eXRlY29kZS5tX3RhYmxlSW5kZXhdOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRC
eXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1
bHRPZmZzZXQpKTsKICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIGlmICghdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKQEAgLTU4
MzUsNyArNTgzNSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgZGF0YS5jYXNl
cy5hcHBlbmQoU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgobV9ncmFwaC5mcmVlemUoanNO
dW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGFibGUubWluICsgaSkpKSwgdGFyZ2V0KSk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRh
KSwgZ2V0KGJ5dGVjb2RlLnNjcnV0aW5lZSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0
Y2gsIE9wSW5mbygmZGF0YSksIGdldChieXRlY29kZS5tX3NjcnV0aW5lZSkpOwogICAgICAgICAg
ICAgZmx1c2hJZlRlcm1pbmFsKGRhdGEpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dp
dGNoX2ltbSk7CiAgICAgICAgIH0KQEAgLTU4NDQsOCArNTg0NCw4IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKICAgICAgICAgICAgIFN3aXRj
aERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBk
YXRhLmtpbmQgPSBTd2l0Y2hDaGFyOwotICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4
ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFtieXRlY29kZS50YWJsZUluZGV4XTsK
LSAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJ
bmRleCArIGp1bXBUYXJnZXQoYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCkpOworICAgICAgICAgICAg
ZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9zd2l0Y2hSZW1hcFti
eXRlY29kZS5tX3RhYmxlSW5kZXhdOworICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRC
eXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsganVtcFRhcmdldChieXRlY29kZS5tX2RlZmF1
bHRPZmZzZXQpKTsKICAgICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2NvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUuYnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgICAgIGlmICghdGFibGUuYnJhbmNoT2Zmc2V0c1tpXSkKQEAgLTU4
NTYsNyArNTg1Niw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAgICAgICAgICAgICAgICAg
U3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3Rl
clN0cmluZyh0YWJsZS5taW4gKyBpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0KGJ5dGVjb2RlLnNjcnV0
aW5lZSkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmZGF0YSksIGdl
dChieXRlY29kZS5tX3NjcnV0aW5lZSkpOwogICAgICAgICAgICAgZmx1c2hJZlRlcm1pbmFsKGRh
dGEpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2NoYXIpOwogICAgICAgICB9
CkBAIC01ODY1LDggKzU4NjUsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFN3aXRjaFN0cmluZz4oKTsKICAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9n
cmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hT
dHJpbmc7Ci0gICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBieXRlY29kZS50YWJs
ZUluZGV4OwotICAgICAgICAgICAgZGF0YS5mYWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1f
Y3VycmVudEluZGV4ICsganVtcFRhcmdldChieXRlY29kZS5kZWZhdWx0T2Zmc2V0KSk7CisgICAg
ICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7Cisg
ICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5k
ZXggKyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCkpOwogICAgICAgICAgICAg
U3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFi
bGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6
U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXI7CiAgICAgICAgICAgICBTdHJpbmdKdW1w
VGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS5vZmZzZXRUYWJs
ZS5lbmQoKTsKQEAgLTU4NzcsNyArNTg3Nyw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZCgKICAgICAg
ICAgICAgICAgICAgICAgU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoTGF6eUpTVmFsdWU6
Omtub3duU3RyaW5nSW1wbChpdGVyLT5rZXkuZ2V0KCkpLCB0YXJnZXQpKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoYnl0
ZWNvZGUuc2NydXRpbmVlKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZv
KCZkYXRhKSwgZ2V0KGJ5dGVjb2RlLm1fc2NydXRpbmVlKSk7CiAgICAgICAgICAgICBmbHVzaElm
VGVybWluYWwoZGF0YSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfc3RyaW5n
KTsKICAgICAgICAgfQpAQCAtNTg4NywxNCArNTg4NywxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBBU1NFUlQoIW1fY3VycmVudEJsb2Nr
LT50ZXJtaW5hbCgpKTsKICAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBTaW1wbGUgY2FzZTogd2UgYXJlIGp1c3QgcHJvZHVjaW5nIGEgcmV0
dXJuCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChieXRlY29kZS52YWx1
ZSkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBnZXQoYnl0ZWNvZGUubV92
YWx1ZSkpOwogICAgICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAgICAgICAgICAgICAg
ICAgTEFTVF9PUENPREUob3BfcmV0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmx1
c2hGb3JSZXR1cm4oKTsKICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVy
blZhbHVlLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFj
a1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KGJ5dGVjb2RlLnZhbHVlKSwgSW1tZWRpYXRlU2V0V2l0
aEZsdXNoKTsKKyAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+bV9y
ZXR1cm5WYWx1ZSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gp
OwogCiAgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY29udGludWF0aW9uQmxv
Y2sgJiYgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSAhPSBtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBlYXJseSByZXR1cm4gZnJvbSBhbiBpbmxpbmVkIGZ1
bmN0aW9uIGFuZCB3ZSBkbyBub3QgaGF2ZSBhIGNvbnRpbnVhdGlvbiBibG9jaywgc28gd2UgbXVz
dCBhbGxvY2F0ZSBvbmUuCkBAIC01OTEzLDE4ICs1OTEzLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2VuZDoK
ICAgICAgICAgICAgIEFTU0VSVCghaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAgICAgYWRk
VG9HcmFwaChSZXR1cm4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpLnZhbHVl
KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFbmQ+KCkubV92YWx1ZSkpOwogICAgICAgICAgICAgZmx1c2hGb3JSZXR1cm4oKTsK
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2VuZCk7CiAKICAgICAgICAgY2FzZSBvcF90aHJv
dzoKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3csIGdldChjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVGhyb3c+KCkudmFsdWUpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoVGhyb3csIGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCkubV92YWx1ZSkpOwogICAgICAgICAg
ICAgZmx1c2hGb3JUZXJtaW5hbCgpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfdGhyb3cp
OwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOiB7CiAg
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93
U3RhdGljRXJyb3I+KCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKFRocm93U3RhdGljRXJyb3Is
IE9wSW5mbyhieXRlY29kZS5lcnJvclR5cGUpLCBnZXQoYnl0ZWNvZGUubWVzc2FnZSkpOworICAg
ICAgICAgICAgYWRkVG9HcmFwaChUaHJvd1N0YXRpY0Vycm9yLCBPcEluZm8oYnl0ZWNvZGUubV9l
cnJvclR5cGUpLCBnZXQoYnl0ZWNvZGUubV9tZXNzYWdlKSk7CiAgICAgICAgICAgICBmbHVzaEZv
clRlcm1pbmFsKCk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19zdGF0aWNfZXJy
b3IpOwogICAgICAgICB9CkBAIC01OTQ0LDcgKzU5NDQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1
cnJlbnRCbG9jay0+c2l6ZSgpIHx8IChtX2dyYXBoLmNvbXBpbGF0aW9uKCkgJiYgbV9jdXJyZW50
QmxvY2stPnNpemUoKSA9PSAxICYmIG1fY3VycmVudEJsb2NrLT5hdCgwKS0+b3AoKSA9PSBDb3Vu
dEV4ZWN1dGlvbikpOwogCi0gICAgICAgICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVy
KiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLmJ1ZmZlcjsKKyAgICAgICAg
ICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jaykubV9idWZmZXI7CiAKICAgICAgICAgICAgIGlmICghYnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2F0Y2gpOyAvLyBUaGlzIGNhdGNoIGhhcyB5
ZXQgdG8gZXhlY3V0ZS4gTm90ZTogdGhpcyBsb2FkIGNhbiBiZSByYWN5IHdpdGggdGhlIG1haW4g
dGhyZWFkLgpAQCAtNjExNywyMSArNjExNywyMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6
IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q2FsbEV2YWw+KCk7Ci0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUu
YXJndjsKLSAgICAgICAgICAgIGFkZENhbGwoYnl0ZWNvZGUuZHN0LCBDYWxsRXZhbCwgbnVsbHB0
ciwgZ2V0KGJ5dGVjb2RlLmNhbGxlZSksIGJ5dGVjb2RlLmFyZ2MsIHJlZ2lzdGVyT2Zmc2V0LCBn
ZXRQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVj
b2RlLm1fYXJndjsKKyAgICAgICAgICAgIGFkZENhbGwoYnl0ZWNvZGUubV9kc3QsIENhbGxFdmFs
LCBudWxscHRyLCBnZXQoYnl0ZWNvZGUubV9jYWxsZWUpLCBieXRlY29kZS5tX2FyZ2MsIHJlZ2lz
dGVyT2Zmc2V0LCBnZXRQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Y2FsbF9ldmFsKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3Bfam5l
cV9wdHI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcVB0cj4oKTsKLSAgICAgICAgICAgIFNwZWNpYWw6OlBvaW50ZXIgc3BlY2lhbFBv
aW50ZXIgPSBieXRlY29kZS5zcGVjaWFsUG9pbnRlcjsKKyAgICAgICAgICAgIFNwZWNpYWw6OlBv
aW50ZXIgc3BlY2lhbFBvaW50ZXIgPSBieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyOwogICAgICAg
ICAgICAgQVNTRVJUKHBvaW50ZXJJc0NlbGwoc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAg
IEpTQ2VsbCogYWN0dWFsUG9pbnRlciA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KAogICAgICAgICAg
ICAgICAgIGFjdHVhbFBvaW50ZXJGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2ssIHNw
ZWNpYWxQb2ludGVyKSk7CiAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUG9pbnRlciA9
IG1fZ3JhcGguZnJlZXplKGFjdHVhbFBvaW50ZXIpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVs
YXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBO
b2RlKiBjaGlsZCA9IGdldChieXRlY29kZS52YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKS5oYXNKdW1wZWQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1faGFzSnVtcGVkKSB7CiAgICAgICAgICAg
ICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFQdHIsIE9wSW5mbyhm
cm96ZW5Qb2ludGVyKSwgY2hpbGQpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNo
LCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+
c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAg
ICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwpAQCAtNjE1MSw4ICs2MTUx
LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlVHlwZSA9
IG1ldGFkYXRhLnJlc29sdmVUeXBlOwotICAgICAgICAgICAgICAgIGRlcHRoID0gbWV0YWRhdGEu
bG9jYWxTY29wZURlcHRoOworICAgICAgICAgICAgICAgIHJlc29sdmVUeXBlID0gbWV0YWRhdGEu
bV9yZXNvbHZlVHlwZTsKKyAgICAgICAgICAgICAgICBkZXB0aCA9IG1ldGFkYXRhLm1fbG9jYWxT
Y29wZURlcHRoOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICAgICAgICAgIGNhc2UgR2xv
YmFsVmFyOgpAQCAtNjE2MCwxNSArNjE2MCwxNSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKICAg
ICAgICAgICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgICAgICAgICBjb25zdGFudFNjb3BlID0gbWV0YWRhdGEuY29uc3RhbnRT
Y29wZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRTY29wZSA9IG1ldGFkYXRh
Lm1fY29uc3RhbnRTY29wZS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAgICAgICAgICAgICAgIGxleGljYWxF
bnZpcm9ubWVudCA9IG1ldGFkYXRhLmxleGljYWxFbnZpcm9ubWVudC5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGV4aWNhbEVudmlyb25tZW50ID0gbWV0YWRhdGEubV9sZXhpY2FsRW52aXJv
bm1lbnQuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoK
ICAgICAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1ldGFkYXRhLnN5bWJvbFRhYmxlLmdl
dCgpOworICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG1ldGFkYXRhLm1fc3ltYm9s
VGFibGUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjE3Niw4ICs2MTc2LDgg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAobmVlZHNEeW5hbWljTG9va3VwKHJlc29sdmVUeXBlLCBvcF9y
ZXNvbHZlX3Njb3BlKSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS52YXJdOwot
ICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoUmVzb2x2ZVNjb3Bl
LCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGdldChieXRlY29kZS5zY29wZSkpKTsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+
bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUubV92YXJdOworICAgICAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChSZXNvbHZlU2NvcGUsIE9wSW5mbyhpZGVudGlmaWVy
TnVtYmVyKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfcmVzb2x2ZV9zY29wZSk7CiAgICAgICAgICAgICB9CiAKQEAgLTYxODksNyArNjE4
OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTMzNDcKICAg
ICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c2NyaXB0TW9kZSgp
ICE9IEpTUGFyc2VyU2NyaXB0TW9kZTo6TW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJl
c29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBb
Ynl0ZWNvZGUudmFyXTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLm1fdmFy
XTsKICAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
aW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5nbG9iYWxQcm9wZXJ0aWVzKCkuYWRkTGF6aWx5KERlc2lyZWRHbG9i
YWxQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgICAg
ICAgICB9CkBAIC02MjA0LDIxICs2MjA0LDIxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlID09
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRz
dCwgd2Vha0pTQ29uc3RhbnQoY29uc3RhbnRTY29wZSkpOwotICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLnNjb3BlKSk7CisgICAgICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLm1fZHN0LCB3ZWFrSlNDb25zdGFudChjb25zdGFudFNjb3BlKSk7CisgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUubV9zY29wZSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBNb2R1
bGVWYXI6IHsKICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWUgb2YgdGhlICJzY29w
ZSIgdmlydHVhbCByZWdpc3RlciBpcyBub3QgdXNlZCBpbiBMTEludCAvIGJhc2VsaW5lIG9wX3Jl
c29sdmVfc2NvcGUgd2l0aCBNb2R1bGVWYXIsCiAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCBu
b3QgdG8ga2VlcCBpdCBhbGl2ZSBieSB0aGUgUGhhbnRvbSBub2RlLgogICAgICAgICAgICAgICAg
IC8vIE1vZHVsZSBlbnZpcm9ubWVudCBpcyBhbHJlYWR5IHN0cm9uZ2x5IHJlZmVyZW5jZWQgYnkg
dGhlIENvZGVCbG9jay4KLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCB3ZWFrSlND
b25zdGFudChsZXhpY2FsRW52aXJvbm1lbnQpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIHdlYWtKU0NvbnN0YW50KGxleGljYWxFbnZpcm9ubWVudCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBMb2NhbENsb3N1
cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
bG9jYWxCYXNlID0gZ2V0KGJ5dGVjb2RlLnNjb3BlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBs
b2NhbEJhc2UgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBsb2NhbEJhc2UpOyAvLyBPU1IgZXhpdCBjYW5ub3QgaGFuZGxlIHJlc29s
dmVfc2NvcGUgb24gYSBEQ0UnZCBzY29wZS4KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIHZhcmlvdXMgZm9ybXMgb2YgY29uc3RhbnQgZm9sZGluZyBoZXJlLiBU
aGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZApAQCAtNjIyNywyNiArNjIyNywyNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIElu
ZmVycmVkVmFsdWUqIHNpbmdsZXRvbiA9IHN5bWJvbFRhYmxlLT5zaW5nbGV0b25TY29wZSgpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNpbmdsZXRvbi0+aW5mZXJy
ZWRWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRz
KCkuYWRkTGF6aWx5KHNpbmdsZXRvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUuZHN0LCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKEpTU2NvcGUqIHNjb3BlID0gbG9jYWxCYXNlLT5k
eW5hbWljQ2FzdENvbnN0YW50PEpTU2NvcGUqPigqbV92bSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBuID0gZGVwdGg7IG4tLTspCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzY29wZSA9IHNjb3BlLT5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHNldChieXRlY29k
ZS5kc3QsIHdlYWtKU0NvbnN0YW50KHNjb3BlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgd2Vha0pTQ29uc3RhbnQoc2NvcGUpKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbiA9IGRlcHRoOyBuLS07KQogICAgICAgICAgICAgICAgICAgICBsb2NhbEJhc2UgPSBhZGRU
b0dyYXBoKFNraXBTY29wZSwgbG9jYWxCYXNlKTsKLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUuZHN0LCBsb2NhbEJhc2UpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
bG9jYWxCYXNlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAgICAgICAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUuc2NvcGUpKTsKKyAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIGdldChieXRlY29kZS5tX3Njb3BlKSk7CiAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICAgICAgICAgIHNldChieXRlY29k
ZS5kc3QsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSkpOwor
ICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8obV9jb25zdGFudE51bGwpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC02MjU3LDkgKzYyNTcsOSBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZh
bDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsPigpOwotICAgICAgICAgICAg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmll
clJlbWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5t
X3Byb3BlcnR5XTsKIAotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChS
ZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsLCBPcEluZm8oaWRlbnRpZmllck51
bWJlciksIGdldChieXRlY29kZS5zY29wZSkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgYWRkVG9HcmFwaChSZXNvbHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsLCBP
cEluZm8oaWRlbnRpZmllck51bWJlciksIGdldChieXRlY29kZS5tX3Njb3BlKSkpOwogCiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2Rl
Y2xfaW5fZXZhbCk7CiAgICAgICAgIH0KQEAgLTYyNjcsNyArNjI2Nyw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUudmFy
XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNr
VG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3Zhcl07CiAgICAgICAgICAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1i
ZXJdOwogCiAgICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZTsKQEAgLTYyNzcsMjAg
KzYyNzcsMjAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgdWludHB0cl90IG9wZXJhbmQ7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLmdl
dFB1dEluZm87CisgICAgICAgICAgICAgICAgZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0UHV0
SW5mbzsKICAgICAgICAgICAgICAgICByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2ludHMg
PSBtZXRhZGF0YS53YXRjaHBvaW50U2V0OworICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50
cyA9IG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldDsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChy
ZXNvbHZlVHlwZSAhPSBVbnJlc29sdmVkUHJvcGVydHkgJiYgcmVzb2x2ZVR5cGUgIT0gVW5yZXNv
bHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlID0gbWV0YWRhdGEuc3RydWN0dXJlLmdldCgpOwotICAgICAgICAgICAgICAgIG9w
ZXJhbmQgPSBtZXRhZGF0YS5vcGVyYW5kOworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBvcGVyYW5kID0g
bWV0YWRhdGEubV9vcGVyYW5kOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobmVl
ZHNEeW5hbWljTG9va3VwKHJlc29sdmVUeXBlLCBvcF9nZXRfZnJvbV9zY29wZSkpIHsKICAgICAg
ICAgICAgICAgICB1aW50NjRfdCBvcEluZm8xID0gbWFrZUR5bmFtaWNWYXJPcEluZm8oaWRlbnRp
Zmllck51bWJlciwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwogICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLmRzdCwKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXREeW5h
bWljVmFyLCBPcEluZm8ob3BJbmZvMSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KGJ5dGVjb2Rl
LnNjb3BlKSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwKKyAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChHZXREeW5hbWljVmFyLCBPcEluZm8ob3BJbmZvMSksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKSk7CiAgICAgICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfZ2V0X2Zyb21fc2NvcGUpOwogICAgICAgICAgICAgfQogCkBAIC02
MzEyLDIxICs2MzEyLDIxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnN0YXRlKCkgIT0gR2V0QnlJZFN0YXR1czo6
U2ltcGxlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEK
ICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLnNpemUoKSAh
PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgo
R2V0QnlJZEZsdXNoLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0aW9u
KSwgZ2V0KGJ5dGVjb2RlLnNjb3BlKSkpOworICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0QnlJZEZsdXNoLCBPcEluZm8oaWRlbnRpZmllck51bWJl
ciksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSB3ZWFrSlNDb25zdGFudChnbG9iYWxPYmplY3QpOwogICAgICAgICAgICAg
ICAgIE5vZGUqIHJlc3VsdCA9IGxvYWQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgc3RhdHVzWzBdKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChi
eXRlY29kZS5zY29wZSkpOwotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUubV9z
Y29wZSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgcmVzdWx0KTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xv
YmFsVmFyOgogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgogICAgICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLnNjb3BlKSk7CisgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUubV9zY29wZSkpOwogICAgICAgICAg
ICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgICAgICAgICAgICAgU2Nv
cGVPZmZzZXQgb2Zmc2V0OwogICAgICAgICAgICAgICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QqIHNjb3BlT2JqZWN0ID0ganNDYXN0PEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqPihKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jaykpOwpAQCAtNjM4Miw3ICs2MzgyLDcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gcG9pbnRlci0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSh3
YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3Qs
IHdlYWtKU0NvbnN0YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9kc3QsIHdlYWtKU0NvbnN0YW50KHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAg
LTYzOTYsMTMgKzYzOTYsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gYWRkVG9HcmFwaChub2RlVHlwZSwg
T3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICAgICAgICAgIGlm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrTm90RW1wdHksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUuZHN0LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCB2
YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAg
ICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAg
ICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoYnl0ZWNvZGUuc2NvcGUpOworICAgICAg
ICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9IGdldChieXRlY29kZS5tX3Njb3BlKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJZGVhbGx5IHdlIHdvdWxkbid0IGhhdmUg
dG8gZG8gdGhpcyBQaGFudG9tLiBCdXQ6CiAgICAgICAgICAgICAgICAgLy8KQEAgLTY0MTgsMTEg
KzY0MTgsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgICAgIC8vIHByZWRpY3Rpb24sIHdlJ2Qgb3RoZXJ3aXNlIHRoaW5rIHRoYXQgaXQg
aGFzIHRvIGV4aXQuIFRoZW4gd2hlbiBpdCBkaWQgZXhlY3V0ZSwgd2UKICAgICAgICAgICAgICAg
ICAvLyB3b3VsZCByZWNvbXBpbGUuIEJ1dCBpZiB3ZSBjYW4gZm9sZCBpdCBoZXJlLCB3ZSBhdm9p
ZCB0aGUgZXhpdC4KICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgu
dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKHNjb3BlTm9kZSwgU2NvcGVPZmZzZXQob3BlcmFuZCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIHdlYWtKU0NvbnN0YW50
KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgd2Vha0pT
Q29uc3RhbnQodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQ
cmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwKKyAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoR2V0Q2xvc3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIHNj
b3BlTm9kZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNjQz
OSw3ICs2NDM5LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTogewogICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgICAgICAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgICAgICAg
ICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IGJ5dGVjb2RlLnZhcjsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBieXRlY29kZS5tX3ZhcjsKICAgICAgICAgICAg
IGlmIChpZGVudGlmaWVyTnVtYmVyICE9IFVJTlRfTUFYKQogICAgICAgICAgICAgICAgIGlkZW50
aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtpZGVudGlm
aWVyTnVtYmVyXTsKICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQ7CkBAIC02NDU1
LDEzICs2NDU1LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIHVpbnRwdHJfdCBvcGVyYW5kOwogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGdldFB1dEluZm8gPSBtZXRhZGF0
YS5nZXRQdXRJbmZvOworICAgICAgICAgICAgICAgIGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dl
dFB1dEluZm87CiAgICAgICAgICAgICAgICAgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29s
dmVUeXBlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IHJlc29s
dmVUeXBlID09IExvY2FsQ2xvc3VyZVZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQotICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50cyA9IG1ldGFkYXRhLndhdGNocG9p
bnRTZXQ7CisgICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRzID0gbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc29sdmVUeXBlICE9IFVucmVz
b2x2ZWRQcm9wZXJ0eSAmJiByZXNvbHZlVHlwZSAhPSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBtZXRhZGF0
YS5zdHJ1Y3R1cmUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgb3BlcmFuZCA9IG1ldGFkYXRhLm9w
ZXJhbmQ7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fc3RydWN0
dXJlLmdldCgpOworICAgICAgICAgICAgICAgIG9wZXJhbmQgPSBtZXRhZGF0YS5tX29wZXJhbmQ7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CkBAIC02
NDY5LDcgKzY0NjksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBpZiAobmVlZHNEeW5hbWljTG9va3VwKHJlc29sdmVUeXBlLCBvcF9wdXRf
dG9fc2NvcGUpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50aWZpZXJOdW1iZXIgIT0g
VUlOVF9NQVgpOwogICAgICAgICAgICAgICAgIHVpbnQ2NF90IG9wSW5mbzEgPSBtYWtlRHluYW1p
Y1Zhck9wSW5mbyhpZGVudGlmaWVyTnVtYmVyLCBnZXRQdXRJbmZvLm9wZXJhbmQoKSk7Ci0gICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXREeW5hbWljVmFyLCBPcEluZm8ob3BJbmZvMSksIE9w
SW5mbygpLCBnZXQoYnl0ZWNvZGUuc2NvcGUpLCBnZXQoYnl0ZWNvZGUudmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFB1dER5bmFtaWNWYXIsIE9wSW5mbyhvcEluZm8xKSwgT3BJ
bmZvKCksIGdldChieXRlY29kZS5tX3Njb3BlKSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfdG9fc2NvcGUpOwogICAgICAgICAgICAg
fQogCkBAIC02NDg5LDEzICs2NDg5LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0g
MQogICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5SWRWYXJp
YW50OjpSZXBsYWNlCiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmUo
KS5zaXplKCkgIT0gMSkgewotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQs
IE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgZ2V0KGJ5dGVjb2RlLnNjb3BlKSwgZ2V0KGJ5dGVj
b2RlLnZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJ
bmZvKGlkZW50aWZpZXJOdW1iZXIpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSksIGdldChieXRlY29k
ZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gd2Vha0pTQ29uc3RhbnQoZ2xvYmFsT2Jq
ZWN0KTsKLSAgICAgICAgICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0
dXNbMF0sIGdldChieXRlY29kZS52YWx1ZSkpOworICAgICAgICAgICAgICAgIHN0b3JlKGJhc2Us
IGlkZW50aWZpZXJOdW1iZXIsIHN0YXR1c1swXSwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpKTsKICAg
ICAgICAgICAgICAgICAvLyBLZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KLSAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChieXRlY29kZS5zY29wZSkpOworICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2Ug
R2xvYmFsTGV4aWNhbFZhcjoKQEAgLTY1MTMsMjEgKzY1MTMsMjEgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJs
ZUVudHJ5IGVudHJ5ID0gc2NvcGVPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGVudHJ5LCB3YXRjaHBvaW50cyA9PSBlbnRy
eS53YXRjaHBvaW50U2V0KCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBO
b2RlKiB2YWx1ZU5vZGUgPSBnZXQoYnl0ZWNvZGUudmFsdWUpOworICAgICAgICAgICAgICAgIE5v
ZGUqIHZhbHVlTm9kZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEdsb2JhbFZhcmlhYmxlLCBPcEluZm8ob3BlcmFuZCksIHdlYWtKU0NvbnN0
YW50KHNjb3BlT2JqZWN0KSwgdmFsdWVOb2RlKTsKICAgICAgICAgICAgICAgICBpZiAod2F0Y2hw
b2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBNdXN0IGhhcHBlbiBhZnRlciB0aGUgc3RvcmUuIFNlZSBjb21tZW50
IGZvciBHZXRHbG9iYWxWYXIuCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5
V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cykpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAvLyBLZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KLSAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChieXRlY29kZS5zY29wZSkpOworICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgTG9jYWxD
bG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgICAgIE5v
ZGUqIHNjb3BlTm9kZSA9IGdldChieXRlY29kZS5zY29wZSk7Ci0gICAgICAgICAgICAgICAgTm9k
ZSogdmFsdWVOb2RlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBzY29wZU5vZGUgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CisgICAgICAgICAgICAgICAgTm9k
ZSogdmFsdWVOb2RlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogCiAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQdXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIHNjb3BlTm9kZSwgdmFs
dWVOb2RlKTsKIApAQCAtNjU5MSwyOCArNjU5MSwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZp
cm9ubWVudDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BDcmVhdGVMZXhpY2FsRW52aXJvbm1lbnQ+KCk7Ci0gICAgICAgICAgICBBU1NFUlQo
Ynl0ZWNvZGUuc3ltYm9sVGFibGUuaXNDb25zdGFudCgpICYmIGJ5dGVjb2RlLmluaXRpYWxWYWx1
ZS5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRhYmxlID0g
bV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENv
bnN0YW50KGJ5dGVjb2RlLnN5bWJvbFRhYmxlLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBGcm96
ZW5WYWx1ZSogaW5pdGlhbFZhbHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5dGVjb2RlLmluaXRpYWxWYWx1ZS5vZmZz
ZXQoKSkpOwotICAgICAgICAgICAgTm9kZSogc2NvcGUgPSBnZXQoYnl0ZWNvZGUuc2NvcGUpOwor
ICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUuaXNDb25zdGFudCgpICYm
IGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlLmlzQ29uc3RhbnQoKSk7CisgICAgICAgICAgICBGcm96
ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZS5vZmZz
ZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGgu
ZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChi
eXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOworICAgICAgICAgICAgTm9kZSogc2Nv
cGUgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICBOb2RlKiBsZXhpY2FsRW52
aXJvbm1lbnQgPSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIE9wSW5mbyhzeW1ib2xUYWJs
ZSksIE9wSW5mbyhpbml0aWFsVmFsdWUpLCBzY29wZSk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUuZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1f
ZHN0LCBsZXhpY2FsRW52aXJvbm1lbnQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3Jl
YXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9w
dXNoX3dpdGhfc2NvcGU6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHVzaFdpdGhTY29wZT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGN1cnJl
bnRTY29wZSA9IGdldChieXRlY29kZS5jdXJyZW50U2NvcGUpOwotICAgICAgICAgICAgTm9kZSog
b2JqZWN0ID0gZ2V0KGJ5dGVjb2RlLm5ld1Njb3BlKTsKLSAgICAgICAgICAgIHNldChieXRlY29k
ZS5kc3QsIGFkZFRvR3JhcGgoUHVzaFdpdGhTY29wZSwgY3VycmVudFNjb3BlLCBvYmplY3QpKTsK
KyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnRTY29wZSA9IGdldChieXRlY29kZS5tX2N1cnJlbnRT
Y29wZSk7CisgICAgICAgICAgICBOb2RlKiBvYmplY3QgPSBnZXQoYnl0ZWNvZGUubV9uZXdTY29w
ZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoUHVzaFdpdGhT
Y29wZSwgY3VycmVudFNjb3BlLCBvYmplY3QpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3B1c2hfd2l0aF9zY29wZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dldF9wYXJl
bnRfc2NvcGU6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7Ci0gICAgICAgICAgICBOb2RlKiBjdXJyZW50U2Nv
cGUgPSBnZXQoYnl0ZWNvZGUuc2NvcGUpOworICAgICAgICAgICAgTm9kZSogY3VycmVudFNjb3Bl
ID0gZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbmV3U2NvcGUgPSBh
ZGRUb0dyYXBoKFNraXBTY29wZSwgY3VycmVudFNjb3BlKTsKLSAgICAgICAgICAgIHNldChieXRl
Y29kZS5kc3QsIG5ld1Njb3BlKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbmV3
U2NvcGUpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjdXJyZW50U2NvcGUpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3BhcmVudF9zY29wZSk7CiAgICAgICAgIH0K
QEAgLTY2MjksMTQgKzY2MjksMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9u
LT5zY29wZSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXN1bHQgPSBh
ZGRUb0dyYXBoKEdldFNjb3BlLCBjYWxsZWUpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRz
dCwgcmVzdWx0KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgcmVzdWx0KTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9zY29wZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2FyZ3VtZW50X2NvdW50OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7CiAgICAgICAgICAgICBO
b2RlKiBzdWIgPSBhZGRUb0dyYXBoKEFyaXRoU3ViLCBPcEluZm8oQXJpdGg6OlVuY2hlY2tlZCks
IE9wSW5mbyhTcGVjSW50MzJPbmx5KSwgZ2V0QXJndW1lbnRDb3VudCgpLCBhZGRUb0dyYXBoKEpT
Q29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpOwotICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLmRzdCwgc3ViKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgc3ViKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2FyZ3VtZW50X2NvdW50KTsKICAgICAgICAgfQogCkBA
IC02NjQ0LDE1ICs2NjQ0LDE1IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ3JlYXRlRGlyZWN0QXJndW1lbnRzPigpOwogICAgICAgICAgICAgbm90aWNlQXJndW1lbnRz
VXNlKCk7CiAgICAgICAgICAgICBOb2RlKiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENy
ZWF0ZURpcmVjdEFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBjcmVh
dGVBcmd1bWVudHMpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBjcmVhdGVBcmd1
bWVudHMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVu
dHMpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50czogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BDcmVhdGVTY29wZWRBcmd1bWVudHM+KCk7CiAgICAgICAgICAgICBub3Rp
Y2VBcmd1bWVudHNVc2UoKTsKLSAgICAgICAgICAgIE5vZGUqIGNyZWF0ZUFyZ3VtZW50cyA9IGFk
ZFRvR3JhcGgoQ3JlYXRlU2NvcGVkQXJndW1lbnRzLCBnZXQoYnl0ZWNvZGUuc2NvcGUpKTsKLSAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGNyZWF0ZUFyZ3VtZW50cyk7CisgICAgICAgICAg
ICBOb2RlKiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZVNjb3BlZEFyZ3VtZW50
cywgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgY3JlYXRlQXJndW1lbnRzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzKTsKICAgICAgICAgfQogCkBAIC02NjYwLDE4ICs2NjYwLDE4IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
PigpOwogICAgICAgICAgICAgbm90aWNlQXJndW1lbnRzVXNlKCk7CiAgICAgICAgICAgICBOb2Rl
KiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZUNsb25lZEFyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBjcmVhdGVBcmd1bWVudHMpOworICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBjcmVhdGVBcmd1bWVudHMpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY3JlYXRlX2Nsb25lZF9hcmd1bWVudHMpOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1bWVudHM6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50
cz4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsCisgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9kc3QsCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAg
ICAgICAgR2V0RnJvbUFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGJ5dGVj
b2RlLmluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGJ5dGVjb2RlLm1faW5kZXgp
LAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwKLSAgICAgICAg
ICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLmFyZ3VtZW50cykpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2V0KGJ5dGVjb2RlLm1fYXJndW1lbnRzKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZ2V0X2Zyb21fYXJndW1lbnRzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02Njc5
LDkgKzY2NzksOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRv
QXJndW1lbnRzPigpOwogICAgICAgICAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgICAgICAgICBQ
dXRUb0FyZ3VtZW50cywKLSAgICAgICAgICAgICAgICBPcEluZm8oYnl0ZWNvZGUuaW5kZXgpLAot
ICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5hcmd1bWVudHMpLAotICAgICAgICAgICAgICAg
IGdldChieXRlY29kZS52YWx1ZSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyhieXRlY29kZS5t
X2luZGV4KSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9hcmd1bWVudHMpLAorICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9wdXRfdG9fYXJndW1lbnRzKTsKICAgICAgICAgfQogCkBAIC02Njg5LDcgKzY2ODks
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50Pigp
OwogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSB0aGlzLT5p
bmxpbmVDYWxsRnJhbWUoKTsKICAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50OwotICAgICAgICAg
ICAgaW50MzJfdCBhcmd1bWVudEluZGV4SW5jbHVkaW5nVGhpcyA9IGJ5dGVjb2RlLmluZGV4Owor
ICAgICAgICAgICAgaW50MzJfdCBhcmd1bWVudEluZGV4SW5jbHVkaW5nVGhpcyA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpc1dpdGhGaXh1cCA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzV2l0
aEZpeHVwLnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleEluY2x1ZGlu
Z1RoaXMgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc1dpdGhGaXh1cCkKQEAgLTY2OTgsNyAr
NjY5OCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgICAgICAgICAgYXJndW1lbnQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyht
X2NvbnN0YW50VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICBhcmd1bWVudCA9IGFkZFRvR3JhcGgoR2V0QXJndW1lbnQsIE9wSW5mbyhhcmd1bWVudEluZGV4
SW5jbHVkaW5nVGhpcyksIE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgICAgIHNl
dChieXRlY29kZS5kc3QsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYXJndW1lbnQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2FyZ3VtZW50KTsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYzoKQEAg
LTY3MjksNTMgKzY3MjksNTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogCiAgICAgICAgIGNhc2Ugb3Bfc2V0X2Z1bmN0aW9uX25hbWU6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1l
PigpOwotICAgICAgICAgICAgTm9kZSogZnVuYyA9IGdldChieXRlY29kZS5mdW5jdGlvbik7Ci0g
ICAgICAgICAgICBOb2RlKiBuYW1lID0gZ2V0KGJ5dGVjb2RlLm5hbWUpOworICAgICAgICAgICAg
Tm9kZSogZnVuYyA9IGdldChieXRlY29kZS5tX2Z1bmN0aW9uKTsKKyAgICAgICAgICAgIE5vZGUq
IG5hbWUgPSBnZXQoYnl0ZWNvZGUubV9uYW1lKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU2V0
RnVuY3Rpb25OYW1lLCBmdW5jLCBuYW1lKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Nl
dF9mdW5jdGlvbl9uYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfdHlwZW9mOiB7
CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFR5
cGVvZj4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoVHlwZU9m
LCBnZXQoYnl0ZWNvZGUudmFsdWUpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoVHlwZU9mLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX3R5cGVvZik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3Rv
X251bWJlcjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUb051bWJlcj4oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRl
Y29kZS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgo
VG9OdW1iZXIsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCB2YWx1ZSkpOworICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb051bWJlciwgT3BJbmZvKDApLCBPcElu
Zm8ocHJlZGljdGlvbiksIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF90b19u
dW1iZXIpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF90b19zdHJpbmc6IHsKICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+
KCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoVG9TdHJpbmcsIHZhbHVlKSk7
CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKFRvU3RyaW5nLCB2YWx1ZSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG9fc3RyaW5nKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3BfdG9fb2JqZWN0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwogICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIE5vZGUq
IHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm9wZXJhbmQpOwotICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVj
b2RlLm1lc3NhZ2VdOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChU
b09iamVjdCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIHZh
bHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQp
OworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tU
b3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLm1fbWVzc2FnZV07CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoVG9PYmplY3QsIE9wSW5mbyhpZGVudGlmaWVy
TnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfdG9fb2JqZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaW5fYnlf
dmFsOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluQnlWYWw+KCk7Ci0gICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJy
YXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykuYXJyYXlQcm9maWxlLCBBcnJheTo6
UmVhZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEluQnlWYWws
IE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBnZXQoYnl0ZWNvZGUuYmFzZSksIGdldChieXRl
Y29kZS5wcm9wZXJ0eSkpKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRB
cnJheU1vZGUoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJy
YXk6OlJlYWQpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKElu
QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwg
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9p
bl9ieV92YWwpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9pbl9ieV9pZDogewogICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+
KCk7Ci0gICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRl
bnRpZmllclJlbWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2Ug
PSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3By
b3BlcnR5XTsKICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAKICAgICAgICAgICAgIEluQnlJZFN0YXR1
cyBzdGF0dXMgPSBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCkBAIC02ODA0LDQzICs2ODA0LDQz
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChGaWx0ZXJJbkJ5SWRTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1f
cGxhbi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkSW5CeUlkU3RhdHVzKGN1cnJlbnRDb2RlT3JpZ2lu
KCksIHN0YXR1cykpLCBiYXNlKTsKIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBtYXRjaCA9
IGFkZFRvR3JhcGgoTWF0Y2hTdHJ1Y3R1cmUsIE9wSW5mbyhkYXRhKSwgYmFzZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1hdGNoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBtYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2luX2J5X2lkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoSW5CeUlkLCBPcEluZm8o
aWRlbnRpZmllck51bWJlciksIGJhc2UpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChJbkJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSkpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5fYnlfaWQpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKTsK
LSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxl
bmd0aCwgZ2V0KGJ5dGVjb2RlLmJhc2UpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxlbmd0aCwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkp
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2hhc19nZW5lcmljX3Byb3BlcnR5OiB7CiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0dlbmVy
aWNQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgo
SGFzR2VuZXJpY1Byb3BlcnR5LCBnZXQoYnl0ZWNvZGUuYmFzZSksIGdldChieXRlY29kZS5wcm9w
ZXJ0eSkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNH
ZW5lcmljUHJvcGVydHksIGdldChieXRlY29kZS5tX2Jhc2UpLCBnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19nZW5lcmljX3Byb3BlcnR5
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eTog
ewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFk
ZFRvR3JhcGgoSGFzU3RydWN0dXJlUHJvcGVydHksIAotICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUucHJvcGVydHkpLAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5lbnVtZXJhdG9yKSkpOworICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc1N0cnVjdHVyZVByb3BlcnR5LAorICAgICAg
ICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAorICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5tX3Byb3BlcnR5KSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJh
dG9yKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2hhc19pbmRleGVkX3Byb3BlcnR5OiB7
CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c0luZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNv
ZGUuYmFzZSk7Ci0gICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2Rl
KGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykuYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7
Ci0gICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5wcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAg
ICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNv
ZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIE5vZGUq
IHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAgICAgICAgTm9kZSog
aGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoSGFzSW5kZXhlZFByb3BlcnR5LCBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHN0YXRpY19jYXN0PHVpbnQzMl90PihQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpKSwgYmFzZSwgcHJv
cGVydHkpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgaGFzSXRlcmFibGVQcm9wZXJ0
eSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGhhc0l0ZXJhYmxlUHJvcGVydHkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOwogICAg
ICAgICB9CiAKQEAgLTY4NDgsNTIgKzY4NDgsNTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAgICAg
ICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICAgICAg
ICAgIE5vZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLmluZGV4KTsKLSAgICAgICAgICAgIE5vZGUq
IGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUuZW51bWVyYXRvcik7CisgICAgICAgICAgICBOb2Rl
KiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0
eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGUqIGluZGV4ID0g
Z2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9IGdl
dChieXRlY29kZS5tX2VudW1lcmF0b3IpOwogCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChi
YXNlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKICAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1l
cmF0b3IpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChOb2RlOjpW
YXJBcmcsIEdldERpcmVjdFBuYW1lLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOwor
ICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywg
R2V0RGlyZWN0UG5hbWUsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9kaXJlY3RfcG5hbWUpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjogewogICAgICAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0
b3I+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEdldFByb3Bl
cnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLmJhc2UpKSk7CisgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNv
ZGUubV9iYXNlKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0b3IpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwKLSAg
ICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUuZW51bWVyYXRvciksCi0gICAgICAgICAgICAgICAg
Z2V0KGJ5dGVjb2RlLmluZGV4KSkpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBh
ZGRUb0dyYXBoKEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwKKyAgICAgICAgICAgICAgICBn
ZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUu
bV9pbmRleCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0
ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUsCi0gICAgICAg
ICAgICAgICAgZ2V0KGJ5dGVjb2RlLmVudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5pbmRleCkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9H
cmFwaChHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLAorICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5tX2VudW1lcmF0b3IpLAorICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2luZGV4
KSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1l
KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3Ry
aW5nOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRU
b0dyYXBoKFRvSW5kZXhTdHJpbmcsIGdldChieXRlY29kZS5pbmRleCkpKTsKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb0luZGV4U3RyaW5nLCBnZXQoYnl0ZWNv
ZGUubV9pbmRleCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmlu
Zyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CiAgICAgICAgICAg
ICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlLCBnZXQoYnl0ZWNvZGUuc2Nv
cGUpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1
ZSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSk7CiAgICAgICAgIH0KIApAQCAtNjkwMyw3ICs2OTAz
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGUgcmlnaHQgc29sdXRpb24gZm9yIGlubGluaW5nIGlzIHRvIGVs
aWRlIHRoZXNlIHdoZW5ldmVyIHRoZSB0YWlsIGNhbGwKICAgICAgICAgICAgICAgICAvLyBlbmRz
IHVwIGJlaW5nIGlubGluZWQuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTY4NgotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
TG9nU2hhZG93Q2hpY2tlblRhaWwsIGdldChieXRlY29kZS50aGlzVmFsdWUpLCBnZXQoYnl0ZWNv
ZGUuc2NvcGUpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKExvZ1NoYWRvd0NoaWNrZW5U
YWlsLCBnZXQoYnl0ZWNvZGUubV90aGlzVmFsdWUpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbG9nX3NoYWRvd19jaGlj
a2VuX3RhaWwpOwogICAgICAgICB9CkBAIC03MTY3LDkgKzcxNjcsOSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeVZhbChCeXRlY29kZSBieXRlY29kZSwgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25TaXplKQogewotICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUu
YmFzZSk7Ci0gICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUucHJvcGVydHkpOwotICAg
IE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKKyAgICBOb2RlKiBiYXNlID0gZ2V0
KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9w
cm9wZXJ0eSk7CisgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAg
Ym9vbCBpc0RpcmVjdCA9IEJ5dGVjb2RlOjpvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDsKICAgICBib29sIGNvbXBpbGVkQXNQdXRCeUlkID0gZmFsc2U7CiAgICAgewpAQCAtNzIxMCw3
ICs3MjEwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZQogICAg
IH0KIAogICAgIGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKLSAgICAgICAgQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jaykuYXJyYXlQcm9maWxlLCBBcnJheTo6V3JpdGUpOworICAgICAgICBBcnJh
eU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKIAog
ICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJv
cGVydHkpOwpAQCAtNzIyNCwyOCArNzIyNCwyOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVQdXRCeVZhbChCeXRlCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVQdXRBY2Nlc3NvckJ5SWQoTm9kZVR5cGUgb3AsIEJ5dGVjb2RlIGJ5
dGVjb2RlKQogewotICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJl
bWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKLSAgICBOb2RlKiBhY2Nlc3NvciA9IGdldChieXRlY29k
ZS5hY2Nlc3Nvcik7Ci0gICAgYWRkVG9HcmFwaChvcCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIp
LCBPcEluZm8oYnl0ZWNvZGUuYXR0cmlidXRlcyksIGJhc2UsIGFjY2Vzc29yKTsKKyAgICBOb2Rl
KiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLm1fcHJv
cGVydHldOworICAgIE5vZGUqIGFjY2Vzc29yID0gZ2V0KGJ5dGVjb2RlLm1fYWNjZXNzb3IpOwor
ICAgIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKGJ5dGVj
b2RlLm1fYXR0cmlidXRlcyksIGJhc2UsIGFjY2Vzc29yKTsKIH0KIAogdGVtcGxhdGUgPHR5cGVu
YW1lIEJ5dGVjb2RlPgogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QWNjZXNzb3JCeVZh
bChOb2RlVHlwZSBvcCwgQnl0ZWNvZGUgYnl0ZWNvZGUpCiB7Ci0gICAgTm9kZSogYmFzZSA9IGdl
dChieXRlY29kZS5iYXNlKTsKLSAgICBOb2RlKiBzdWJzY3JpcHQgPSBnZXQoYnl0ZWNvZGUucHJv
cGVydHkpOwotICAgIE5vZGUqIGFjY2Vzc29yID0gZ2V0KGJ5dGVjb2RlLmFjY2Vzc29yKTsKLSAg
ICBhZGRUb0dyYXBoKG9wLCBPcEluZm8oYnl0ZWNvZGUuYXR0cmlidXRlcyksIGJhc2UsIHN1YnNj
cmlwdCwgYWNjZXNzb3IpOworICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsK
KyAgICBOb2RlKiBzdWJzY3JpcHQgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgTm9k
ZSogYWNjZXNzb3IgPSBnZXQoYnl0ZWNvZGUubV9hY2Nlc3Nvcik7CisgICAgYWRkVG9HcmFwaChv
cCwgT3BJbmZvKGJ5dGVjb2RlLm1fYXR0cmlidXRlcyksIGJhc2UsIHN1YnNjcmlwdCwgYWNjZXNz
b3IpOwogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQnl0ZWNvZGU+CiB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVOZXdGdW5jKE5vZGVUeXBlIG9wLCBCeXRlY29kZSBieXRlY29kZSkKIHsKLSAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGRlY2wgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5mdW5jdGlvbkRlY2wpOworICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZGVjbCA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+ZnVu
Y3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICBGcm96ZW5WYWx1ZSogZnJv
emVuID0gbV9ncmFwaC5mcmVlemVTdHJvbmcoZGVjbCk7Ci0gICAgTm9kZSogc2NvcGUgPSBnZXQo
Ynl0ZWNvZGUuc2NvcGUpOwotICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgob3AsIE9w
SW5mbyhmcm96ZW4pLCBzY29wZSkpOworICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2RlLm1f
c2NvcGUpOworICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChvcCwgT3BJbmZvKGZy
b3plbiksIHNjb3BlKSk7CiAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRo
aXMgUGhhbnRvbS4gQnV0OgogICAgIC8vCiAgICAgLy8gRm9yIHRoZSBjb25zdGFudCBjYXNlOiB3
ZSBtdXN0IGRvIGl0IGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgbm8gd2F5IG9mIGtu
b3dpbmcKQEAgLTcyNTksMTAgKzcyNTksMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
TmV3RnVuYyhOb2RlVAogdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlTmV3RnVuY0V4cChOb2RlVHlwZSBvcCwgQnl0ZWNvZGUgYnl0ZWNvZGUp
CiB7Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleHByID0gbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUuZnVuY3Rpb25EZWNsKTsKKyAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4cHIgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgRnJvemVuVmFs
dWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKGV4cHIpOwotICAgIE5vZGUqIHNjb3Bl
ID0gZ2V0KGJ5dGVjb2RlLnNjb3BlKTsKLSAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBo
KG9wLCBPcEluZm8oZnJvemVuKSwgc2NvcGUpKTsKKyAgICBOb2RlKiBzY29wZSA9IGdldChieXRl
Y29kZS5tX3Njb3BlKTsKKyAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgob3AsIE9w
SW5mbyhmcm96ZW4pLCBzY29wZSkpOwogICAgIC8vIElkZWFsbHkgd2Ugd291bGRuJ3QgaGF2ZSB0
byBkbyB0aGlzIFBoYW50b20uIEJ1dDoKICAgICAvLwogICAgIC8vIEZvciB0aGUgY29uc3RhbnQg
Y2FzZTogd2UgbXVzdCBkbyBpdCBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIG5vIHdh
eSBvZiBrbm93aW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAkocmV2aXNpb24gMjQwMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOTIsNyArMzkyLDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdAogCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChleGVjLT5ieXRlY29kZU9mZnNl
dCgpKTsKICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wQ2F0Y2g+KCkpOwotICAgIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IGluc3RydWN0aW9uLT5hczxPcENhdGNo
PigpLm1ldGFkYXRhKGV4ZWMpLmJ1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVm
ZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShleGVjKS5t
X2J1ZmZlcjsKICAgICBKU1ZhbHVlKiBkYXRhQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxKU1Zh
bHVlKj4oZGZnQ29tbW9uLT5jYXRjaE9TUkVudHJ5QnVmZmVyLT5kYXRhQnVmZmVyKCkpOwogICAg
IHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0MDAxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NzcsNyAr
NDc3LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChtYXRlcmlhbGl6YXRpb24tPm9yaWdpbigpLmJ5dGVjb2RlSW5kZXgpLnB0
cigpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb24tPmlzPE9wTmV3
QXJyYXlCdWZmZXI+KCkpOwogICAgICAgICBhdXRvIG5ld0FycmF5QnVmZmVyID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld0FycmF5QnVmZmVyPigpOwotICAgICAgICBBcnJheUFsbG9jYXRp
b25Qcm9maWxlKiBwcm9maWxlID0gJm5ld0FycmF5QnVmZmVyLm1ldGFkYXRhKGNvZGVCbG9jayku
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKKyAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSog
cHJvZmlsZSA9ICZuZXdBcnJheUJ1ZmZlci5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZTsKIAogICAgICAgICAvLyBGSVhNRTogU2hhcmUgdGhlIGNvZGUgd2l0aCBD
b21tb25TbG93UGF0aHMuIEN1cnJlbnRseSwgY29kZUJsb2NrIGV0Yy4gYXJlIHNsaWdodGx5IGRp
ZmZlcmVudC4KICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nTW9kZSA9IHByb2ZpbGUtPnNl
bGVjdEluZGV4aW5nVHlwZSgpOwpAQCAtNDk1LDcgKzQ5NSw3IEBAIGV4dGVybiAiQyIgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgIC8vIFdlIGFsc28gY2Fubm90IGFs
bG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBpbGF0aW9uIHRocmVhZHMgc2luY2UgaXQn
cyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20KICAgICAgICAgICAgIC8vIGEgY29tcGls
YXRpb24gdGhyZWFkLgogICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5pbW11dGFi
bGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVCdXR0ZXJm
bHkpOworICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKG5ld0FycmF5QnVm
ZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1t
dXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAg
ICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9Bcmd1bWVu
dC5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0FyZ3Vt
ZW50LnJiCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL0FyZ3VtZW50LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDEzICszNSwxNyBAQCBjbGFzcyBBcmd1bWVudAogICAg
IGVuZAogCiAgICAgZGVmIGZpZWxkCi0gICAgICAgICIje0B0eXBlLnRvX3N9ICN7QG5hbWV9OyIK
KyAgICAgICAgIiN7QHR5cGUudG9fc30gbV8je0BuYW1lfTsiCiAgICAgZW5kCiAKICAgICBkZWYg
Y3JlYXRlX3BhcmFtCiAgICAgICAgICIje0B0eXBlLnRvX3N9ICN7QG5hbWV9IgogICAgIGVuZAog
CisgICAgZGVmIGZpZWxkX25hbWUKKyAgICAgICAgIm1fI3tAbmFtZX0iCisgICAgZW5kCisKICAg
ICBkZWYgZml0c19jaGVjayhzaXplKQogICAgICAgICBGaXRzOjpjaGVjayBzaXplLCBAbmFtZSwg
QHR5cGUKICAgICBlbmQKQEAgLTU1LDcgKzU5LDcgQEAgY2xhc3MgQXJndW1lbnQKICAgICBlbmQK
IAogICAgIGRlZiBsb2FkX2Zyb21fc3RyZWFtKGluZGV4LCBzaXplKQotICAgICAgICAiI3tAbmFt
ZX0oI3tGaXRzOjpjb252ZXJ0KHNpemUsICJzdHJlYW1bI3tpbmRleH1dIiwgQHR5cGUpfSkiCisg
ICAgICAgICIje2ZpZWxkX25hbWV9KCN7Rml0czo6Y29udmVydChzaXplLCAic3RyZWFtWyN7aW5k
ZXh9XSIsIEB0eXBlKX0pIgogICAgIGVuZAogCiAgICAgZGVmIHNldHRlcgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCShyZXZpc2lvbiAyNDAwMTkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL01ldGFkYXRhLnJiCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3
LDcgKzQ3LDcgQEAgY2xhc3MgTWV0YWRhdGEKICAgICAgICAgICAgICAgICBpZiB0eXBlLmtpbmRf
b2Y/IEhhc2gKICAgICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fXVuaW9uIHtcbiN7Y29udmVy
dEZpZWxkcyhwcmVmaXggKyAnICAgICcsIHR5cGUpfVxuI3twcmVmaXh9fTsiCiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9ICN7
ZmllbGQudG9fc307IgorICAgICAgICAgICAgICAgICAgICAiI3twcmVmaXh9I3t0eXBlLnRvX3N9
IG1fI3tmaWVsZC50b19zfTsiCiAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICBlbmQu
am9pbigiXG4iKQogICAgICAgICBlbmQKQEAgLTU3LDcgKzU3LDcgQEAgY2xhc3MgTWV0YWRhdGEK
ICAgICAgICAgaW5pdHMgPSBuaWwKICAgICAgICAgaWYgQGluaXRpYWxpemVycyAmJiAobm90IEBp
bml0aWFsaXplcnMuZW1wdHk/KQogICAgICAgICAgICAgaW5pdHMgPSAiXG4gICAgICAgICAgICA6
ICIgKyBAaW5pdGlhbGl6ZXJzLm1hcCBkbyB8bWV0YWRhdGEsIGFyZ3wKLSAgICAgICAgICAgICAg
ICAiI3ttZXRhZGF0YX0oX19vcC4je2FyZ30pIgorICAgICAgICAgICAgICAgICJtXyN7bWV0YWRh
dGF9KF9fb3AubV8je2FyZ30pIgogICAgICAgICAgICAgZW5kLmpvaW4oIlxuICAgICAgICAgICAg
LCAiKS5jb25jYXQoIlxuICAgICAgICIpOwogICAgICAgICBlbmQKIApAQCAtMTIxLDYgKzEyMSw2
IEBAIEVPRgogICAgIGVuZAogCiAgICAgZGVmIHNlbGYuZmllbGRfbmFtZQotICAgICAgICAibWV0
YWRhdGFJRCIKKyAgICAgICAgIm1fbWV0YWRhdGFJRCIKICAgICBlbmQKIGVuZApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIJKHJldmlzaW9uIDI0MDAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDYg
KzgwLDEyIEBAIGNsYXNzIE9wY29kZQogICAgICAgICBAYXJncy5tYXAoJjpuYW1lKS51bnNoaWZ0
KCIiKS5qb2luKCIsICIpCiAgICAgZW5kCiAKKyAgICBkZWYgdW50eXBlZF9wYXJhbXMKKyAgICAg
ICAgcmV0dXJuIGlmIEBhcmdzLm5pbD8KKworICAgICAgICBAYXJncy5tYXAoJjpmaWVsZF9uYW1l
KS51bnNoaWZ0KCIiKS5qb2luKCIsICIpCisgICAgZW5kCisKICAgICBkZWYgbWFwX2ZpZWxkc193
aXRoX3NpemUocHJlZml4LCBzaXplLCAmYmxvY2spCiAgICAgICAgIGFyZ3MgPSBbQXJndW1lbnQu
bmV3KCJvcGNvZGVJRCIsIDp1bnNpZ25lZCwgMCldCiAgICAgICAgIGFyZ3MgKz0gQGFyZ3MuZHVw
IGlmIEBhcmdzCkBAIC0xNjQsNyArMTcwLDcgQEAgRU9GCiAgICAgICAgIGR1bXBlci0+cHJpbnRM
b2NhdGlvbkFuZE9wKF9fbG9jYXRpb24sICYiKiN7QG5hbWV9IlshX19pc1dpZGVdKTsKICN7cHJp
bnRfYXJncyB7IHxhcmd8CiA8PC1FT0YuY2hvbXAKLSAgICAgICAgZHVtcGVyLT5kdW1wT3BlcmFu
ZCgje2FyZy5uYW1lfSwgI3thcmcuaW5kZXggPT0gMX0pOworICAgICAgICBkdW1wZXItPmR1bXBP
cGVyYW5kKCN7YXJnLmZpZWxkX25hbWV9LCAje2FyZy5pbmRleCA9PSAxfSk7CiBFT0YKICAgICB9
fQogICAgIH0KQEAgLTIyNSw3ICsyMzEsNyBAQCBFT0YKIAogICAgIGRlZiBzdHJ1Y3RfaW5kaWNl
cwogICAgICAgICBvdXQgPSBbXQotICAgICAgICBvdXQgKz0gQGFyZ3MubWFwKCY6bmFtZSkgdW5s
ZXNzIEBhcmdzLm5pbD8KKyAgICAgICAgb3V0ICs9IEBhcmdzLm1hcCgmOmZpZWxkX25hbWUpIHVu
bGVzcyBAYXJncy5uaWw/CiAgICAgICAgIG91dCA8PCBNZXRhZGF0YS5maWVsZF9uYW1lIHVubGVz
cyBAbWV0YWRhdGEuZW1wdHk/CiAgICAgICAgIG91dC5tYXAud2l0aF9pbmRleCBkbyB8bmFtZSwg
aW5kZXh8CiAgICAgICAgICAgICAiY29uc3QgdW5zaWduZWQgI3tjYXBpdGFsaXplZF9uYW1lfV8j
e25hbWV9X2luZGV4ID0gI3tpbmRleCArIDF9OyIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gMjQwMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4gdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KE1ldGFkYXRhJik7CiAgICAgICAgIHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmls
ZWRPcGNvZGUoLi4uKTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+Ci0gICAgICAgIHN0
ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0YTo6cHJvZmls
ZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPgorICAgICAgICBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZhbHVlUHJv
ZmlsZT46OnZhbHVlLCB2b2lkPgogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9m
aWxlZE9wY29kZShPcCBieXRlY29kZSk7CiAKICAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwg
QXJyYXlQcm9maWxlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRBcml0aG1ldGljMzJfNjQuY3BwCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4LDkg
KzQ4LDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdAogICAgIEp1
bXBMaXN0IG5vdEludDMyT3AyOwogCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBv
cDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
Lm1fdGFyZ2V0KTsKIAogICAgIC8vIENoYXJhY3RlciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudENoYXIob3AxKSkgewpAQCAtMTAyLDkgKzEwMiw5IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBi
eXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQo
KTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29k
ZS50YXJnZXQpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBp
bnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywg
cmVnVDIpOwpAQCAtMTIyLDkgKzEyMiw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBi
eXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3Ay
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSkgewogICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CkBAIC0xNDMs
OSArMTQzLDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0
aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGlu
dCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgb3AxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0KTsKIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKQEAgLTE1OCw4
ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgCiB2b2lk
IEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVW5z
aWduZWQ+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBp
bnQgb3AxID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgcmVzdWx0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKTsKICAgICAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CiAgICAgCkBA
IC0xNzEsNyArMTcxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1
Ywogdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJ
bmM+KCk7Ci0gICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLnNyY0RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChz
cmNEc3QsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBpbnQgc3JjRHN0ID0gYnl0ZWNv
ZGUuc3JjRHN0Lm9mZnNldCgpOworICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdC5v
ZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMTk5
LDkgKzE5OSw5IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHIKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IG9wY29k
ZUlEID0gT3A6Om9wY29kZUlEOwotICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0
aW9uLCBieXRlY29kZS50YXJnZXQpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOworICAgIGludCBv
cDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9y
aHMub2Zmc2V0KCk7CiAKICAgICBpZiAoIW5vdEludDMyT3AxLmVtcHR5KCkpIHsKICAgICAgICAg
Ly8gRG91YmxlIGNhc2UgMTogT3AxIGlzIG5vdCBpbnQzMjsgT3AyIGlzIHVua25vd24uCkBAIC0z
MzYsOSArMzM2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKgog
ewogI2lmIENQVShYODYpCiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1v
ZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEg
PSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZz
ZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9w
MSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jo
cy5vZmZzZXQoKTsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9y
IHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJz
OjplYXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTU3LDggKzE1Nyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2piZWxvd2VxKGNvbnN0IEluc3RydWMKIHZvaWQgSklUOjplbWl0X29wX3Vuc2ln
bmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICBpbnQg
cmVzdWx0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5v
cGVyYW5kLm9mZnNldCgpOworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3Niw5ICsxNzYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcChjb25zdCBJbnN0CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBpbW1l
ZGlhdGUKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
cmhzLm9mZnNldCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOwpAQCAtMjIzLDkgKzIyMyw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2Rl
Lmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdl
dCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBvcDIg
PSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KTsKQEAgLTI0NCw5ICsyNDQsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpl
bWl0X2NvbXBhcmVVbnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29k
ZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0
ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
IHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKICAgICAgICAg
aW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKQEAgLTI2Nyw5ICsy
NjcsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBvcDEg
PSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMu
b2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9y
IHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKICAgICAvLyAtIGZsb2F0aW5n
LXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCkBAIC0zNjUsNyArMzY1LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogdm9pZCBKSVQ6OmVt
aXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbmM+KCk7Ci0gICAgaW50
IHNyY0RzdCA9IGJ5dGVjb2RlLnNyY0RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjRHN0ID0gYnl0
ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBAIC0z
NzcsNyArMzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9uKgog
dm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWM+
KCk7Ci0gICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLnNyY0RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
c3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCk7CkBAIC0zOTMsOSArMzkzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IElu
c3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
LSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRl
Y29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3Ay
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJz
IGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKHJlZ1Qw
ID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ1MSw3ICs0NTEsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbW9kKGNvbnN0IEluc3RydWN0CiAKIHZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZWdhdGU+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLmFyaXRoUHJvZmlsZTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKICAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3Q8T3BOZWdhdGU+KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRl
KTsKQEAgLTQ2OSw5ICs0NjksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25p
cHBldEdlCiB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsaW5nUG9saWN5IHByb2ZpbGluZ1BvbGljeSkK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAg
ICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRl
Y29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsK
KyAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5v
ZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01MTYsOCArNTE2LDggQEAgdm9pZCBKSVQ6OmVtaXRC
aXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5
dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZz
ZXQoKTsKKyAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50
IG9wMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CkBAIC01Nzcs
OSArNTc3LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hp
ZnRGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBKSVRSaWdo
dFNoaWZ0R2VuZXJhdG9yOjpTaGlmdFR5cGUgc25pcHBldFNoaWZ0VHlwZSkKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgcmVzdWx0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zm
c2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgcmVz
dWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1f
bGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMCk7CkBAIC02MzksNyArNjM5LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgT3BlcmFu
ZFR5cGVzIGdldE9wZQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQWRkPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5h
cml0aFByb2ZpbGU7CisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2Zp
bGU7CiAgICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRo
UHJvZmlsZSwgY3VycmVudEluc3RydWN0aW9uKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMu
YWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wQWRk
PihhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZUFkZCk7CkBAIC02NTcsOCArNjU3LDggQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IE9wLCB0eXBlbmFtZSBHZW5lcmF0bwogdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5
TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1
bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgb3BlcmFuZCA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcGVyYW5k
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFz
IHNyYyBhbmQgZHN0LgpAQCAtNzA4LDkgKzcwOCw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFz
dChKSVRCaW5hcnlNYXRoSUMKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcD4oKTsKICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMo
Y29waWVkQXJpdGhQcm9maWxlKGJ5dGVjb2RlKSk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAg
IGludCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpA
QCAtNzgzLDcgKzc4Myw3IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzwKICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBp
bnQgcmVzdWx0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJl
Z3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTgzMCw5ICs4MzAsOSBAQCB2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBPcGVyYW5kVHlwZXMgdHlwZXMg
PSBnZXRPcGVyYW5kVHlwZXMoY29waWVkQXJpdGhQcm9maWxlKGJ5dGVjb2RlKSk7Ci0gICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAg
aW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRl
Y29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0
KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEpOwpAQCAtODkyLDE4ICs4OTIsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZGl2KGNvbnN0IEluc3RydWN0aW9uKgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGl2PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0g
Ynl0ZWNvZGUucmhzLm9mZnNldCgpOworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50
IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMobWV0YWRhdGEuYXJpdGhQcm9m
aWxlKTsKKyAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMobWV0YWRhdGEu
bV9hcml0aFByb2ZpbGUpOwogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CiAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSByZWdUMjsKICNlbHNlCi0gICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFu
ZFR5cGVzKG1ldGFkYXRhLmFyaXRoUHJvZmlsZSk7CisgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0g
Z2V0T3BlcmFuZFR5cGVzKG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlKTsKICAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CiAgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CkBAIC05MTMsNyArOTEzLDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBudWxscHRyOwogICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGFy
aXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5hcml0aFByb2ZpbGU7CisgICAgICAgIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2PigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2FyaXRoUHJv
ZmlsZTsKIAogICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKHR5cGVzLmZpcnN0KCkpOwog
ICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZCh0eXBlcy5zZWNvbmQoKSk7CkBAIC05NTgs
NyArOTU4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGl2KGNvbnN0IEluc3RydWN0aW9uKgogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9tdWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wTXVsPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5hcml0aFByb2ZpbGU7CisgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11
bD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAgICAgSklUTXVsSUMq
IG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSwgY3VycmVudElu
c3RydWN0aW9uKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgbXVsSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wTXVsPihtdWxJQywgY3VycmVudElu
c3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7
CkBAIC05NzQsNyArOTc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX211bChjb25zdCBJbnN0
cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9ICZjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3ViPigpLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5hcml0aFByb2Zp
bGU7CisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAgICAg
SklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSwg
Y3VycmVudEluc3RydWN0aW9uKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJl
bnRJbnN0cnVjdGlvbiwgc3ViSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0PE9wU3ViPihzdWJJQywg
Y3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25W
YWx1ZVN1Yik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQu
Y3BwCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OSwxMyArNDksMTMgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVj
b2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKLSAgICBlbWl0U3RvcmUoYnl0ZWNvZGUuZHN0Lm9mZnNldCgpLCByZWdUMSwg
cmVnVDApOworICAgIGVtaXRTdG9yZShieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmVnVDEsIHJl
Z1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BSZXQ+KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7
CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKIAogICAgIGVtaXRM
b2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogCkBAIC0xNTMsMTQgKzE1MywxNCBAQCBzdGQ6OmVu
YWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENh
bGxMaW5rSW5mbyopCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGFyZ0NvdW50ID0gYnl0ZWNvZGUuYXJnYzsKLSAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5hcmd2KTsKKyAgICBp
bnQgYXJnQ291bnQgPSBieXRlY29kZS5tX2FyZ2M7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
LXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAgIGlmIChPcDo6b3Bjb2Rl
SUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgZW1pdExv
YWQocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhp
cygwKSwgcmVnVDAsIHJlZ1QxKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMSwgbWV0YWRhdGEuYXJy
YXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIHN0b3Jl
MzIocmVnVDEsIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTE3NiwxMCAr
MTc2LDEwIEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0
IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewogICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gT3A6Om9wY29kZUlEOwotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29kZS50aGlzVmFs
dWUub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFyZ3VtZW50cy5vZmZz
ZXQoKTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5maXJzdEZyZWUub2Zm
c2V0KCk7Ci0gICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUuZmlyc3RWYXJBcmc7
CisgICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOworICAg
IGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBpbnQg
Zmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICBp
bnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogCiAgICAgZW1p
dExvYWQoYXJndW1lbnRzLCByZWdUMSwgcmVnVDApOwogICAgIFpfSklUT3BlcmF0aW9uX0VKWlog
c2l6ZU9wZXJhdGlvbjsKQEAgLTI0OCw4ICsyNDgsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoY29uc3QgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbygpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNh
bGwsIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKIAotICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1ieXRlY29kZS5hcmd2OwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5j
YWxsZWUub2Zmc2V0KCk7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJn
djsKKyAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CiAKICAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChj
b25zdCBJbnN0cnVjdGlvCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgY2Fs
bGVlID0gYnl0ZWNvZGUuY2FsbGVlLm9mZnNldCgpOworICAgIGludCBjYWxsZWUgPSBieXRlY29k
ZS5tX2NhbGxlZS5vZmZzZXQoKTsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0g
VXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEs
NyArNTEsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJl
c3VsdChjb25zdCBPcCYgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUuZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CkBAIC02
MiwxNCArNjIsMTQgQEAgc3RkOjplbmFibGVfaWZfdDwKIEpJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQogewogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBhcmdDb3VudCA9IGJ5
dGVjb2RlLmFyZ2M7Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4o
Ynl0ZWNvZGUuYXJndik7CisgICAgaW50IGFyZ0NvdW50ID0gYnl0ZWNvZGUubV9hcmdjOworICAg
IGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fYXJndik7
CiAKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGlu
ZygpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgKyBD
YWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwgcmVnVDApOwogICAgICAg
ICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwogICAgICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgICAg
ICBzdG9yZTMyKHJlZ1QwLCBtZXRhZGF0YS5hcnJheVByb2ZpbGUuYWRkcmVzc09mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgc3RvcmUzMihyZWdUMCwgbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGUuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgZG9uZS5saW5r
KHRoaXMpOwogICAgIH0KIApAQCAtODUsMTAgKzg1LDEwIEBAIHN0ZDo6ZW5hYmxlX2lmX3Q8CiAs
IHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExp
bmtJbmZvKiBpbmZvKQogewotICAgIGludCB0aGlzVmFsdWUgPSBieXRlY29kZS50aGlzVmFsdWUu
b2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFyZ3VtZW50cy5vZmZzZXQo
KTsKLSAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5maXJzdEZyZWUub2Zmc2V0
KCk7Ci0gICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUuZmlyc3RWYXJBcmc7Cisg
ICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgpOworICAgIGlu
dCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBpbnQgZmly
c3RGcmVlUmVnaXN0ZXIgPSBieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICBpbnQg
Zmlyc3RWYXJBcmdPZmZzZXQgPSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QxKTsKICAgICBaX0pJVE9wZXJhdGlvbl9F
SlpaIHNpemVPcGVyYXRpb247CkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGNvbnN0IAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRDYWxsTGlua0luZm8oKTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZv
OjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7CiAKLSAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUuYXJndjsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtYnl0ZWNvZGUubV9hcmd2OwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9m
ZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxs
RnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC0xODEsMTUgKzE4MSwx
NSBAQCB0ZW1wbGF0ZTw+CiBib29sIEpJVDo6Y29tcGlsZVRhaWxDYWxsKGNvbnN0IE9wVGFpbENh
bGwmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0lu
ZGV4KQogewogICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgIHNodWZm
bGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5hcmdjOworICAgIHNodWZmbGVEYXRhLm51
bVBhc3NlZEFyZ3MgPSBieXRlY29kZS5tX2FyZ2M7CiAgICAgc2h1ZmZsZURhdGEudGFnVHlwZU51
bWJlciA9IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcjsKICAgICBzaHVmZmxlRGF0YS5u
dW1Mb2NhbHMgPQotICAgICAgICBieXRlY29kZS5hcmd2IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShieXRl
Y29kZS5hcmdjKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUuYXJnYzsg
KytpKSB7CisgICAgICAgIGJ5dGVjb2RlLm1fYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSAvIHNpemVvZihSZWdpc3Rlcik7CisgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNv
ZGUubV9hcmdjKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnl0ZWNvZGUubV9hcmdj
OyArK2kpIHsKICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9CiAgICAgICAgICAgICBWYWx1
ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAgICAgICAgICAgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSkgLSBieXRlY29kZS5hcmd2LAorICAgICAgICAgICAgICAgIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpIC0gYnl0ZWNvZGUubV9hcmd2LAogICAgICAgICAg
ICAgICAgIERhdGFGb3JtYXRKUyk7CiAgICAgfQogICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9CkBA
IC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rp
bwogewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2Rl
LmNhbGxlZS5vZmZzZXQoKTsKKyAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zm
c2V0KCk7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZy
YW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyOSw3ICszMjksNyBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgotaW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0
eXBlKE9wOjpNZXRhZGF0YTo6cHJvZmlsZSksIFZhbHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBK
SVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQor
aW5saW5lIHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19zYW1lPGRlY2x0eXBlKE9wOjpNZXRhZGF0
YTo6bV9wcm9maWxlKSwgVmFsdWVQcm9maWxlPjo6dmFsdWUsIHZvaWQ+IEpJVDo6ZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0ZWNvZGUpCiB7CiAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogfQpAQCAt
MzQxLDcgKzM0MSw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgK
IHsKICAgICBpZiAoIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEucHJvZmlsZSk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShtZXRhZGF0YS5tX3Byb2ZpbGUpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVy
SUQgaW5kZXhpbmdUeXBlLCBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSkKQEAgLTcxMCwxMSAr
NzEwLDExIEBAIEFMV0FZU19JTkxJTkUgaW50IEpJVDo6anVtcFRhcmdldChjb25zdCAKIAogQUxX
QVlTX0lOTElORSBHZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UHV0SW5mbyhPcFB1dFRvU2NvcGUg
Ynl0ZWNvZGUpCiB7Ci0gICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubWV0YWRhdGFJRCArIDE7
IC8vIEhhc2hNYXAgZG9lc24ndCBsaWtlIDAgYXMgYSBrZXkKKyAgICB1bnNpZ25lZCBrZXkgPSBi
eXRlY29kZS5tX21ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNuJ3QgbGlrZSAwIGFzIGEg
a2V5CiAgICAgYXV0byBpdGVyYXRvciA9IG1fY29waWVkR2V0UHV0SW5mb3MuZmluZChrZXkpOwog
ICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEdldFB1dEluZm9zLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gR2V0UHV0SW5mbyhpdGVyYXRvci0+dmFsdWUpOwotICAgIEdldFB1dEluZm8gZ2V0UHV0
SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5nZXRQdXRJbmZvOworICAgIEdl
dFB1dEluZm8gZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5tX2dl
dFB1dEluZm87CiAgICAgbV9jb3BpZWRHZXRQdXRJbmZvcy5hZGQoa2V5LCBnZXRQdXRJbmZvLm9w
ZXJhbmQoKSk7CiAgICAgcmV0dXJuIGdldFB1dEluZm87CiB9CkBAIC03MjIsMTEgKzcyMiwxMSBA
QCBBTFdBWVNfSU5MSU5FIEdldFB1dEluZm8gSklUOjpjb3BpZWRHZXRQCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCaW5hcnlPcD4KIEFMV0FZU19JTkxJTkUgQXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJp
dGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQogewotICAgIHVpbnQ2NF90IGtleSA9IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGJ5dGVjb2RlLm1ldGFkYXRhSUQpOworICAgIHVpbnQ2NF90IGtleSA9IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihCaW5hcnlPcDo6b3Bjb2RlSUQpIDw8IDMyIHwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KGJ5dGVjb2RlLm1fbWV0YWRhdGFJRCk7CiAgICAgYXV0byBpdGVyYXRvciA9IG1f
Y29waWVkQXJpdGhQcm9maWxlcy5maW5kKGtleSk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fY29w
aWVkQXJpdGhQcm9maWxlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsK
LSAgICBBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spLmFyaXRoUHJvZmlsZTsKKyAgICBBcml0aFByb2ZpbGUgYXJpdGhQcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogICAgIG1fY29waWVk
QXJpdGhQcm9maWxlcy5hZGQoa2V5LCBhcml0aFByb2ZpbGUpOwogICAgIHJldHVybiBhcml0aFBy
b2ZpbGU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFy
b2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTUwLDggKzUwLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE1vdj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBz
cmMgPSBieXRlY29kZS5zcmMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKICAgICAK
ICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpCiAgICAg
ICAgIGVtaXRTdG9yZShkc3QsIGdldENvbnN0YW50T3BlcmFuZChzcmMpKTsKQEAgLTY1LDcgKzY1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKgogewogICAgIEFT
U0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7Ci0gICAgZW1pdExvYWQoYnl0
ZWNvZGUudmFsdWUub2Zmc2V0KCksIHJlZ1QxLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdExv
YWQoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDEsIHJldHVyblZhbHVlR1BSKTsKICAg
ICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
ICAgICByZXQoKTsKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKGNvbnN0
IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbXA+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKICAgICBh
ZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKIH0KIApAQCAtODIsNyArODIsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtZXRhZGF0YS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0
b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cgogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAg
ICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAg
ICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlc3VsdFJlZyk7CisgICAg
ICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlc3VsdFJlZyk7CiAg
ICAgfQogfQogCkBAIC0xMDgsOCArMTA4LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSQogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm9iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIHN0
cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKIH0KQEAg
LTExNyw5ICsxMTcsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJ
CiB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNIYXNJbnN0YW5jZT4oKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLmNv
bnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUu
aGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5v
ZmZzZXQoKTsKKyAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFu
Y2VWYWx1ZS5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVl
LCByZWdUMCk7CiAgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhh
c0luc3RhbmNlIHdvdWxkIGRvLgpAQCAtMTQ1LDkgKzE0NSw5IEBAIHZvaWQgSklUOjplbWl0X29w
X292ZXJyaWRlc19oYXNfaW5zdGFuY2UKIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5v
ZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5cGUub2Zmc2V0KCk7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90
b3R5cGUub2Zmc2V0KCk7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyBpbnRvIHJlZ2lzdGVy
cy4KICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25l
IHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4K
QEAgLTE4Miw5ICsxODIsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25z
dCBJCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5v
ZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5cGUub2Zmc2V0KCk7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90
b3R5cGUub2Zmc2V0KCk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0g
bV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAgLTIwMCwxMCArMjAw
LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbSgKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0g
ICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3RydWN0b3Iub2Zmc2V0KCk7Ci0gICAg
aW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgp
OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVj
b2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7CisgICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBi
eXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZCh2YWx1
ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1Qy
KTsKQEAgLTIxNSw4ICsyMTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20oCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNFbXB0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1f
b3BlcmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZyksIHJlZ1QwKTsKQEAgLTIyNyw4ICsyMjcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3Bl
cmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Cisg
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVt
aXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZD
ZWxsKHJlZ1QxKTsKQEAgLTI1NSw4ICsyNTUsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRl
ZmluZWQoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCk7Ci0gICAg
aW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBl
bWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwogICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcg
JiAweDEpLCAiIik7CkBAIC0yNjgsOCArMjY4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5k
ZWZpbmVkX29yX251bGwoYwogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQo
KTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkVGFnKHZh
bHVlLCByZWdUMCk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkJvb2xlYW5UYWcpLCByZWdUMCk7CkBAIC0yNzksOCArMjc5LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVt
YmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9w
ZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBl
bWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwpAQCAtMjkxLDkgKzI5MSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25z
dCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zm
c2V0KCk7Ci0gICAgaW50IHR5cGUgPSBieXRlY29kZS50eXBlOworICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQu
b2Zmc2V0KCk7CisgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMSk7CkBAIC0zMTEsOCArMzExLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2Vs
bF93aXRoX3R5cGUoY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJc09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7
CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdU
MSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsK
QEAgLTMzMCw4ICszMzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5z
dHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLnNyYy5vZmZzZXQoKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3Jj
Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNDYs
OCArMzQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBpbnQgZnVuYyA9IGJ5dGVjb2RlLmZ1bmN0
aW9uLm9mZnNldCgpOwotICAgIGludCBuYW1lID0gYnl0ZWNvZGUubmFtZS5vZmZzZXQoKTsKKyAg
ICBpbnQgZnVuYyA9IGJ5dGVjb2RlLm1fZnVuY3Rpb24ub2Zmc2V0KCk7CisgICAgaW50IG5hbWUg
PSBieXRlY29kZS5tX25hbWUub2Zmc2V0KCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGZ1bmMsIHJl
Z1QxKTsKICAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCByZWdUMSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJl
Z1QyKSk7CkBAIC0zNTYsOCArMzU2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9u
X25hbWUoY29ucwogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOb3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkVGFnKHNyYywgcmVnVDApOwogCkBAIC0zNzEsOCArMzcx
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6
OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7
Ci0gICAgaW50IGNvbmQgPSBieXRlY29kZS5jb25kaXRpb24ub2Zmc2V0KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdl
dCk7CisgICAgaW50IGNvbmQgPSBieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKTsKKyAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXQpOwogCiAgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzg2
LDggKzM4Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGkKIHZv
aWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1
ZT4oKTsKLSAgICBpbnQgY29uZCA9IGJ5dGVjb2RlLmNvbmRpdGlvbi5vZmZzZXQoKTsKLSAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
dGFyZ2V0KTsKKyAgICBpbnQgY29uZCA9IGJ5dGVjb2RlLm1fY29uZGl0aW9uLm9mZnNldCgpOwor
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldCk7CiAKICAgICBlbWl0TG9hZChjb25kLCByZWdUMSwgcmVnVDApOwogICAg
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKQEAgLTQwMCw4
ICs0MDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
TnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0gICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRh
cmdldCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0KTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKIApAQCAtNDI2LDgg
KzQyNiw4IEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWMKIHZvaWQg
SklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5l
cU51bGw+KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50
YXJnZXQpOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X3RhcmdldCk7CiAKICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTQ1Mywx
NSArNDUzLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IEluc3RydWMKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIFNwZWNpYWw6OlBvaW50
ZXIgcHRyID0gYnl0ZWNvZGUuc3BlY2lhbFBvaW50ZXI7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50
IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgU3BlY2lhbDo6UG9pbnRlciBw
dHIgPSBieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAKICAgICBl
bWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QxKTsKICAgICBKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihhY3R1YWxQb2ludGVyRm9yKG1fY29kZUJsb2NrLCBwdHIpKSk7CiAgICAg
bm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0
YS5oYXNKdW1wZWQpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5tX2hh
c0p1bXBlZCk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0
aGlzKTsKIH0KQEAgLTQ3MCw5ICs0NzAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFcT4oKTsKIAotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IHNyYzEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29k
ZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVn
VDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMykpOwpAQCAtNDg3LDcgKzQ4Nyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2VxKGNvbnN0IEluc3RydWN0aW9uKiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CiAKICAgICBKdW1wTGlzdCBzdG9yZVJl
c3VsdDsKICAgICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsKQEAgLTUxNCw5ICs1MTQsOSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsK
LSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5
dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOworICAgIGludCBzcmMxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZz
ZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCBy
ZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykp
OwpAQCAtNTU0LDE2ICs1NTQsMTYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVj
dG9yPFNsbwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwot
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgY29tcGlsZU9wRXFKdW1wU2xvdyhp
dGVyLCBDb21waWxlT3BFcVR5cGU6OkVxLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubGhzLm9m
ZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1f
bGhzLm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAK
ICAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwog
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKQEAgLTU3
OCw3ICs1NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CiAKICAgICBKdW1wTGlzdCBzdG9yZVJlc3VsdDsKICAgICBKdW1wTGlzdCBnZW5l
cmljQ2FzZTsKQEAgLTYwNiw5ICs2MDYsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNv
bnN0IEluc3RydWN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwotICAgIGludCBzcmMxID0gYnl0ZWNv
ZGUubGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwor
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRl
Y29kZS5tX3RhcmdldCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsK
KyAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQy
KHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC02MjEsNyArNjIxLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0KTsKICAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6
TkVxLCB0YXJnZXQpOwogfQogCkBAIC02MjksOSArNjI5LDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgogdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5saHMub2Zmc2V0
KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAg
IGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CiAKQEAg
LTY2OSw5ICs2NjksOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29t
cGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUu
bGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAg
IGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90
YXJnZXQpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50
IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCBy
ZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CiAKQEAgLTcwOCw3ICs3MDgsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSnN0cmljdGVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC03
MTgsNyArNzE4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KQEAgLTcyNiw4ICs3MjYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShjb25zdCBJCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1f
b3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKICAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKQEAgLTc1OCw4ICs3
NTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVs
bD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMg
PSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwog
CiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwpAQCAtNzkyLDcgKzc5Miw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5W
YWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdExvYWQoYnl0ZWNvZGUudmFsdWUub2Zm
c2V0KCksIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQoYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKSwgcmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CiAgICAganVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigqdm0oKSk7CiB9CkBAIC04MDAsOCArODAwLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdGhyb3coY29uc3QgSW5zdHJ1Y3Rpbwogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVy
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5k
Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgc3JjID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3Jj
LCByZWdUMSwgcmVnVDApOwogCkBAIC04MTcsOCArODE3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fbnVtYmVyKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNl
dCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3Jj
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdU
MSwgcmVnVDApOwogCkBAIC04MzIsOCArODMyLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3Ry
aW5nKGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVn
VDApOwogCkBAIC04NzEsMTMgKzg3MSwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25z
dCBJbnN0cnVjdGlvCiAKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdU
MywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAKLSAgICB1bnNpZ25lZCBleGNlcHRpb24gPSBi
eXRlY29kZS5leGNlcHRpb24ub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgZXhjZXB0aW9uID0gYnl0
ZWNvZGUubV9leGNlcHRpb24ub2Zmc2V0KCk7CiAgICAgZW1pdFN0b3JlKGV4Y2VwdGlvbiwgcmVn
VDEsIHJlZ1QyKTsKIAogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVl
T2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBy
ZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQo
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwogCi0g
ICAgdW5zaWduZWQgdGhyb3duVmFsdWUgPSBieXRlY29kZS50aHJvd25WYWx1ZS5vZmZzZXQoKTsK
KyAgICB1bnNpZ25lZCB0aHJvd25WYWx1ZSA9IGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0
KCk7CiAgICAgZW1pdFN0b3JlKHRocm93blZhbHVlLCByZWdUMSwgcmVnVDApOwogCiAjaWYgRU5B
QkxFKERGR19KSVQpCkBAIC04ODYsNyArODg2LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2go
Y29uc3QgSW5zdHJ1Y3RpbwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU1OTgKIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLmJ1ZmZlcjsKKyAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZm
ZXIgPSBtZXRhZGF0YS5tX2J1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENh
dGNoLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBlbHNlCkBAIC05MTMsMTggKzkxMywxOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfcGFyZW50X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJl
bnRTY29wZT4oKTsKLSAgICBpbnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0
KCk7CisgICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CiAg
ICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0
b3JlQ2VsbChieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsK
LSAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLnRhYmxlSW5kZXg7Ci0gICAgdW5zaWdu
ZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS5kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5zY3J1
dGluZWUub2Zmc2V0KCk7CisgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxl
SW5kZXg7CisgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOworICAgIHVuc2lnbmVkIHNjcnV0
aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtOTM5LDkgKzkzOSw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHIKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOwotICAgIHNp
emVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZh
dWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1
bHRPZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLnNjcnV0aW5lZS5v
ZmZzZXQoKTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsK
KyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0g
Ynl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJs
ZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50Lgog
ICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1w
VGFibGUodGFibGVJbmRleCk7CkBAIC05NTYsOSArOTU2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX2NoYXIoY29uc3QgSW5zdAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwotICAgIHNpemVf
dCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0
T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1bHRP
ZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLnNjcnV0aW5lZS5vZmZz
ZXQoKTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0
ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBm
b3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAg
IFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CkBAIC05NzQsNyArOTc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZGVidWcoY29uc3QgSW5zdHJ1Y3RpbwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CiAgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dl
clJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMg
PSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVidWcsIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUuZGVidWdIb29rVHlwZSkpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9k
ZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAK
QEAgLTk5Niw3ICs5OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVj
dGlvCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldFNjb3BlPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7
CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCBy
ZWdUMCk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKQEAgLTEwMDYsOCArMTAwNiw4
IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3QKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IGNhbGxlZSA9IGJ5dGVjb2RlLmNhbGxlZS5vZmZzZXQoKTsKLSAgICBXcml0ZUJhcnJpZXJCYXNl
PEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLmNhY2hlZENhbGxlZTsKKyAgICBp
bnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CisgICAgV3JpdGVCYXJyaWVy
QmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2NhY2hlZENhbGxlZTsK
ICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURh
dGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtMTAz
NiwxNSArMTAzNiwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0
CiAgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlc3Vs
dFJlZyk7CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmVzdWx0
UmVnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiogY2Fj
aGVkU3RydWN0dXJlID0gJm1ldGFkYXRhLmNhY2hlZFN0cnVjdHVyZTsKLSAgICBpbnQgdGhpc1Jl
Z2lzdGVyID0gYnl0ZWNvZGUuc3JjRHN0Lm9mZnNldCgpOworICAgIFdyaXRlQmFycmllckJhc2U8
U3RydWN0dXJlPiogY2FjaGVkU3RydWN0dXJlID0gJm1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJl
OworICAgIGludCB0aGlzUmVnaXN0ZXIgPSBieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKTsKIAog
ICAgIGVtaXRMb2FkKHRoaXNSZWdpc3RlciwgcmVnVDMsIHJlZ1QyKTsKIApAQCAtMTA1OCwxNiAr
MTA1OCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0CiB2b2lk
IEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENo
ZWNrVGR6PigpOwotICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLnRhcmdldC5vZmZzZXQoKSwgcmVn
VDApOworICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1fdGFyZ2V0Lm9mZnNldCgpLCByZWdUMCk7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBp
bnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlLm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7CkBAIC0xMTEyLDEwICsxMTEyLDEwIEBAIHZv
aWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGMKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZz
ZXQoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEuYXJyYXlQcm9maWxl
OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5Lm9mZnNldCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRCeVZhbEluZm8oKTsKICAgICAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDAp
OwpAQCAtMTE1OSw5ICsxMTU5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVk
X3Byb3BlcgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZz
ZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAog
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTExNzgsMTAgKzExNzgsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Blcgogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0
UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUu
aW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVtZXJhdG9y
Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yLm9mZnNldCgpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAog
ICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CkBAIC0xMjE5LDkgKzEyMTksOSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0CiB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVtZXJhdG9yLm9m
ZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLmluZGV4Lm9mZnNldCgpOworICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7CiAg
ICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTEyNDQsOSArMTI0NCw5
IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3AKIHZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5v
ZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleC5vZmZzZXQoKTsKKyAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwog
ICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjcwLDggKzEyNzAs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBU
eXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLnR5cGVMb2NhdGlvbjsK
LSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS50YXJnZXQub2Zmc2V0KCk7CisgICAg
VHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlv
bjsKKyAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3RhcmdldC5vZmZzZXQoKTsK
IAogICAgIC8vIExvYWQgcGF5bG9hZCBpbiBUMC4gTG9hZCB0YWcgaW4gVDMuCiAgICAgZW1pdExv
YWRQYXlsb2FkKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7CkBAIC0xMzQ0LDcgKzEzNDQsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiAgICAgZW5zdXJlU2hhZG93
Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRj
aDJSZWcpOwogCiAgICAgc2NyYXRjaDFSZWcgPSByZWdUNDsKLSAgICBlbWl0TG9hZFBheWxvYWQo
Ynl0ZWNvZGUuc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0
ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9s
b2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAg
LTEzNTcsMTAgKzEzNTcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3RhaQogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBi
ZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdU
MjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcs
IHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2Rl
LnRoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOwotICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLnRo
aXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5t
X3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLm1f
dGhpc1ZhbHVlLm9mZnNldCgpLCByZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MocmVn
VDEsIHJlZ1QyKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCks
IHJlZ1QzKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwg
cmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
dGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1
Y3Rpb24pKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC01Niw4ICs1Niw4IEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBK
SVQ6OmVtaXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNv
ZGUuc3JjLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CiAKICAgICBpZiAobV9jb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKICAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwpAQCAtNzcsNyArNzcsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7CiAgICAgUkVMRUFTRV9BU1NF
UlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVy
blZhbHVlR1BSKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKICAgICByZXQoKTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZW5kKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbXA+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0KTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKIH0KIApAQCAtOTQsNyArOTQs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1
Y3R1cmUoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fb2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKICAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4o
Km1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3RyCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxv
Y2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVn
LCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKSk7CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCkpOwogICAgIH0KIH0KIApAQCAtMTIwLDggKzEyMCw4IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEkKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFs
bG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3T2JqZWN0LCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3Ig
PSBieXRlY29kZS5jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1
ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1f
Y29uc3RydWN0b3Iub2Zmc2V0KCk7CisgICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29k
ZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZvaWQg
SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UKIHZvaWQgSklUOjplbWl0X29wX2lu
c3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS52YWx1ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5cGUu
b2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGlu
dCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHByb3RvID0gYnl0
ZWNvZGUubV9wcm90b3R5cGUub2Zmc2V0KCk7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAo
YmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgog
ICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0
aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAt
MTg2LDcgKzE4Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEkK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBpbnQgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwogICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9
IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0yMDQsOCArMjA0
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oY29ucwogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgY29tcGFy
ZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
KSwgcmVnVDApOwpAQCAtMjE3LDggKzIxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5
KGNvbnN0IEluc3RydWMKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNl
dCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxs
KHJlZ1QwKTsKQEAgLTI0Niw4ICsyNDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmlu
ZWQoY29uc3QgSW5zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWRPck51bGw+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5v
cGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKQEAgLTI2MSw4ICsyNjEsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjCiB2b2lkIEpJVDo6ZW1pdF9v
cF9pc19ib29sZWFuKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAg
ICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHhvcjY0
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsK
QEAgLTI3NCw4ICsyNzQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IElu
c3RyCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzTnVtYmVyPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKICAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVnVDApOwpAQCAtMjg2LDkgKzI4Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJl
cihjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJh
bmQub2Zmc2V0KCk7Ci0gICAgaW50IHR5cGUgPSBieXRlY29kZS50eXBlOworICAgIGludCBkc3Qg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29w
ZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IHR5cGUgPSBieXRlY29kZS5tX3R5cGU7CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzA3LDggKzMwNyw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVj
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVy
YW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwpAQCAtMzMyLDcgKzMzMiw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3JldChjb25zdCBJbnN0cnVjdGlvbioKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVl
YXguCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS52YWx1ZS5vZmZzZXQoKSwgcmV0
dXJuVmFsdWVHUFIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIpOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKTsKICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CkBAIC0zNDMsOCArMzQzLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1p
dGl2ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBz
cmMgPSBieXRlY29kZS5zcmMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAgCkBAIC0zNjAsMTUgKzM2
MCwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoY29uc3QgSW5zCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wU2V0RnVuY3Rpb25OYW1lPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUuZnVuY3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm5hbWUub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24ub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZS5vZmZzZXQoKSwgcmVnVDEpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCByZWdUMCwgcmVnVDEpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5vdD4o
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCks
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKSwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7
IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxs
IGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAw
IG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCkBAIC0zNzcsMjgg
KzM3NywyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlZ1QwKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUuZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamZh
bHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdl
dCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0KTsKIAogICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwogICAgIEdQ
UlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJlZ1QyOwogICAg
IGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQo
KSwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZGYWxzZXkoKnZtKCksIEpTVmFsdWVSZWdz
KHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVj
a01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRh
cmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS52YWx1ZS5v
ZmZzZXQoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5v
ZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKQEAgLTQyMSw4ICs0MjEsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJ
bnN0cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXFOdWxsPigpOwotICAgIGludCBzcmMgPSBieXRlY29kZS52YWx1ZS5vZmZz
ZXQoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMs
IHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsK
QEAgLTQ0NiwxMyArNDQ2LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKGNvbnN0IElu
c3RydWMKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpu
ZXFQdHI+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIFNwZWNp
YWw6OlBvaW50ZXIgcHRyID0gYnl0ZWNvZGUuc3BlY2lhbFBvaW50ZXI7Ci0gICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7
CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgU3BlY2lhbDo6
UG9pbnRlciBwdHIgPSBieXRlY29kZS5tX3NwZWNpYWxQb2ludGVyOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7
CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKGFjdHVhbFBvaW50ZXJGb3IobV9jb2RlQmxvY2ssIHB0cikpKTsKLSAgICBzdG9yZTgoVHJ1
c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEuaGFzSnVtcGVkKTsKKyAgICBzdG9yZTgoVHJ1c3RlZElt
bTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC00NjAsMTggKzQ2MCwxOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9l
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYnl0ZWNvZGUubGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUucmhzLm9m
ZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOwogICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBjb21w
YXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOwogICAgIGJveEJvb2xlYW4ocmVnVDAs
IEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5yaHMu
b2Zmc2V0KCksIHJlZ1QxKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QxKSwgdGFy
Z2V0KTsKIH0KQEAgLTQ3OSwzMiArNDc5LDMyIEBAIHZvaWQgSklUOjplbWl0X29wX2plcShjb25z
dCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwog
CiAgICAgR1BSUmVnIHZhbHVlID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxID0gcmVnVDE7
CiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUuY29uZGl0aW9uLm9mZnNldCgpLCB2YWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOwogICAgIGFkZEp1bXAo
YnJhbmNoSWZUcnV0aHkoKnZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEsIHNjcmF0
Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQs
IG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLmxocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVj
b2RlLnJocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5
dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJl
Z1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7
CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLmxocy5vZmZzZXQoKSwgcmVn
VDAsIGJ5dGVjb2RlLnJocy5vZmZzZXQoKSwgcmVnVDEpOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9saHMub2Zmc2V0KCksIHJlZ1QwLCBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKSwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwogfQpAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW8KICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1
cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS52YWx1ZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb25O
b0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0oKSk7CiB9CkBAIC01MjMsOSArNTIzLDkgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZz
ZXQoKTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKICAg
ICAKQEAgLTU2Niw5ICs1NjYsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpj
b21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwotICAgIGludCBzcmMxID0gYnl0
ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgp
OworICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXQpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7Cisg
ICAgaW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAKQEAgLTYwNyw3ICs2MDcs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IEluCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSnN0cmljdGVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QwLCByZWdUMSk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVl
R1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTYxNyw3ICs2MTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3Bfam5zdHJpY3RlcShjb25zdCBJCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsK
LSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUudGFyZ2V0KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC02MjUs
OCArNjI1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogdm9p
ZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b051bWJlcj4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdFZS
ZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcs
IHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OwpAQCAtNjM5LDIwICs2MzksMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0
IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1N0cmluZz4oKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm9wZXJh
bmQub2Zmc2V0KCk7CisgICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAKICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5kc3Qub2Zmc2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOwotICAgIGludCBkc3RWUmVnID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUub3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC02ODMsMTAgKzY4MywxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0p
LCByZWdUMyk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQo
KSksIHJlZ1QwKTsKICAgICBzdG9yZTY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKSksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZXhjZXB0aW9uLm9mZnNldCgpKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9mZnNldCgpKTsKIAog
ICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS50aHJvd25WYWx1ZS5vZmZz
ZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVl
Lm9mZnNldCgpKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIC8vIEZJWE1FOiBjb25zaWRl
ciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50cnksIGluY2x1ZGlu
ZwpAQCAtNjk0LDcgKzY5NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW8KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1
NTk4CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5i
dWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRh
dGEubV9idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQog
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgbV9ieXRl
Y29kZU9mZnNldCk7CiAgICAgZWxzZQpAQCAtNzIxLDE4ICs3MjEsMTggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVu
dF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7
Ci0gICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOworICAgIGlu
dCBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVD
ZWxsKGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoSW1tPigpOwotICAg
IHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBk
ZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRl
ZmF1bHRPZmZzZXQpOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLnNjcnV0aW5l
ZS5vZmZzZXQoKTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRl
eDsKKyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7CisgICAgdW5zaWduZWQgc2NydXRpbmVl
ID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0
YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50
LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCk7CkBAIC03NDcsOSArNzQ3LDkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cgogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaENoYXI+KCk7Ci0gICAgc2l6ZV90
IHRhYmxlSW5kZXggPSBieXRlY29kZS50YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1bHRP
ZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9m
ZnNldCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUuc2NydXRpbmVlLm9mZnNl
dCgpOworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OworICAg
IHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRl
Y29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAg
U2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKQEAgLTc2NCw5ICs3NjQsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihjb25zdCBJbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7Ci0gICAgc2l6ZV90IHRh
YmxlSW5kZXggPSBieXRlY29kZS50YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZz
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9mZnNl
dCk7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUuc2NydXRpbmVlLm9mZnNldCgp
OworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OworICAgIHVu
c2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29k
ZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU3Ry
aW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKQEAgLTc4MiwxNSArNzgyLDE1IEBAIHZvaWQgSklUOjplbWl0X29w
X2RlYnVnKGNvbnN0IEluc3RydWN0aW8KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlYnVnPigpOwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJS
ZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRl
YnVnLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLmRlYnVnSG9va1R5cGUpKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVi
dWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
cU51bGw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQg
c3JjMSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVt
cCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04MjIsOCArODIyLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5
dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVk
aWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpbwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJh
bWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVu
Y3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwo
ZHN0LCByZWdUMCk7CkBAIC04NzgsOCArODc4LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhp
cyhjb25zdCBJbnN0cnVjdAogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiogY2FjaGVk
U3RydWN0dXJlID0gJm1ldGFkYXRhLmNhY2hlZFN0cnVjdHVyZTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLnNyY0RzdC5vZmZzZXQoKSwgcmVnVDEpOworICAgIFdyaXRlQmFy
cmllckJhc2U8U3RydWN0dXJlPiogY2FjaGVkU3RydWN0dXJlID0gJm1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zcmNEc3Qu
b2Zmc2V0KCksIHJlZ1QxKTsKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MSk7CiAKQEAgLTg5NCw4ICs4OTQsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhj
b25zdCBJbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5jYWxsZWUub2Zmc2V0KCk7
Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0
YS5jYWNoZWRDYWxsZWU7CisgICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNl
dCgpOworICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0
YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsK
ICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAgICAgUmVnaXN0ZXJJRCByZXN1
bHRSZWcgPSByZWdUMDsKQEAgLTkyNiwxMyArOTI2LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKGNvbnN0IEluc3QKICAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoUmVnLCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7
CiAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7
CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tUZHo+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS50YXJnZXQub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGFyZ2V0Lm9mZnNldCgpLCByZWdUMCk7CiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQogCkBAIC05NDYsNyArOTQ2
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aQogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QwLCByZWdUMSk7CiAgICAgYm94Qm9vbGVhbihy
ZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSwgcmV0dXJuVmFsdWVHUFIp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpAQCAtOTU3LDcgKzk1Nyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEo
Y29uc3QgSW5zdHJ1Y3QKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVn
VDAsIHJlZ1QxKTsKICAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwogICAgIGJv
eEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTk2NSw3ICs5NjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKGNvbnN0IEluc3RydWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3Ry
dWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIHJlZ1QwLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KQEAgLTk3NSw3ICs5NzUs
NyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjCiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
CiB9CkBAIC05ODUsMTAgKzk4NSwxMCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2Rl
LnZhbHVlLm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLmNvbnN0cnVj
dG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5z
dGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQg
Y29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNldCgpOworICAgIGludCBo
YXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QxKTsKQEAgLTEwNjUsOCArMTA2NSw4IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhjb25zdCAKIHZvaWQgSklUOjplbWl0
X29wX25ld19yZWdleHAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCByZWdleHAg
PSBieXRlY29kZS5yZWdleHAub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsK
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwganNDYXN0PFJlZ0V4cCo+KG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChyZWdleHApKSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KQEAgLTEwNzYsMTQgKzEwNzYsMTQgQEAgdm9pZCBKSVQ6OmVt
aXROZXdGdW5jQ29tbW9uKGNvbnN0IEluc3RydQogewogICAgIEp1bXAgbGF6eUp1bXA7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExv
YWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QwKTsKICNlbmRpZgotICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNs
KGJ5dGVjb2RlLmZ1bmN0aW9uRGVjbCk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jRXhl
YyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwog
CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CiAgICAgaWYgKG9wY29kZUlE
ID09IG9wX25ld19mdW5jKQpAQCAtMTEyMiwxNCArMTEyMiwxNCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KIHZvaWQgSklUOjplbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCksIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0
KCksIHJlZ1QwKTsKICNlbHNlCi0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLnNjb3BlLm9m
ZnNldCgpLCByZWdUMCk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCksIHJlZ1QwKTsKICNlbmRpZgogCi0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlv
biA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUuZnVuY3Rpb25EZWNsKTsKKyAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhw
cihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6
b3Bjb2RlSUQ7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQpAQCAtMTE2
OCwyOCArMTE2OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXkoY29uc3QgSW5zdHJ1
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJh
eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZXNJ
bmRleCA9IGJ5dGVjb2RlLmFyZ3Yub2Zmc2V0KCk7Ci0gICAgaW50IHNpemUgPSBieXRlY29kZS5h
cmdjOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFs
dWVzSW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CisgICAgaW50IHNpemUgPSBieXRl
Y29kZS5tX2FyZ2M7CiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNJbmRleCAqIHNpemVv
ZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LAotICAgICAgICAmbWV0YWRhdGEu
YXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUpOworICAgICAgICAmbWV0YWRhdGEu
bV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7CiB9CiAKIHZvaWQgSklUOjpl
bWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld0FycmF5V2l0aFNpemU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
LSAgICBpbnQgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubGVuZ3RoLm9mZnNldCgpOworICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc2l6ZUluZGV4ID0gYnl0ZWNv
ZGUubV9sZW5ndGgub2Zmc2V0KCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNpemVJbmRleCwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwKLSAgICAgICAgJm1ldGFkYXRhLmFy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOwogI2Vsc2UKICAgICBlbWl0TG9hZChzaXplSW5kZXgs
IHJlZ1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplQW5kUHJvZmlsZSwgZHN0LAotICAgICAgICAmbWV0YWRhdGEuYXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAgICAgICZtZXRhZGF0YS5tX2Fy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogI2VuZGlm
CiB9CiAKQEAgLTExOTcsOSArMTE5Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93
aXRoX3NpemUoY28KIHZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29k
ZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRv
ci5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKQEAgLTEyNDMsMTAgKzEyNDMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkoYwogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CisgICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7
CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwog
ICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDEpOwpAQCAtMTI4OSw5ICsxMjg5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19p
bmRleGVkX3Byb3BlcgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0
ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0
eS5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5m
bzsKIAogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTEzMDgsMTAgKzEzMDgsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3Blcgogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RGlyZWN0UG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0
ZWNvZGUuaW5kZXgub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVt
ZXJhdG9yLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEg
Y2VsbAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwpAQCAtMTM0OSw5
ICsxMzQ5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
ZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleC5vZmZz
ZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAgaW50IGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QxKTsKQEAgLTEzNzMsOSArMTM3Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3Jfc3RydWN0dXJlX3AKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFt
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRl
Y29kZS5pbmRleC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7
CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTEzOTgsOCArMTM5OCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnMKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFR5cGVMb2NhdGlvbiogY2Fj
aGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEudHlwZUxvY2F0aW9uOwotICAgIGludCB2YWx1ZVRv
UHJvZmlsZSA9IGJ5dGVjb2RlLnRhcmdldC5vZmZzZXQoKTsKKyAgICBUeXBlTG9jYXRpb24qIGNh
Y2hlZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLm1fdHlwZUxvY2F0aW9uOworICAgIGludCB2YWx1
ZVRvUHJvZmlsZSA9IGJ5dGVjb2RlLm1fdGFyZ2V0Lm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJvZmlsZSwgcmVnVDApOwogCkBAIC0xNDY3LDcgKzE0Njcs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvCiAgICAgR1BSUmVn
IHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50
IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNo
YWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNj
cmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLnNjb3BlLm9m
ZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Nj
b3BlLm9mZnNldCgpLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0
KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIApAQCAtMTQ4MCw4ICsx
NDgwLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaQogICAgIEdQ
UlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1
bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1
cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVn
LCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS50aGlz
VmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLnNjb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDMpOwogICAgIGxvZ1NoYWRv
d0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCBy
ZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCkpOwogfQog
CkBAIC0xNDkxLDcgKzE0OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xf
ZmxvdyhjCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
cm9maWxlQ29udHJvbEZsb3c+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9j
YXRpb24gPSBtZXRhZGF0YS5iYXNpY0Jsb2NrTG9jYXRpb247CisgICAgQmFzaWNCbG9ja0xvY2F0
aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBtZXRhZGF0YS5tX2Jhc2ljQmxvY2tMb2NhdGlvbjsK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVD
b2RlKCp0aGlzKTsKICNlbHNlCkBAIC0xNTAyLDcgKzE1MDIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjCiB2b2lkIEpJVDo6ZW1pdF9vcF9hcmd1bWVudF9jb3Vu
dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQXJndW1lbnRDb3VudD4oKTsKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwog
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVn
cyhyZWdUMCwgcmVnVDEpOwpAQCAtMTUxMyw4ICsxNTEzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
YXJndW1lbnRfY291bnQoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3Ro
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRSZXN0TGVuZ3RoPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgbnVtUGFyYW1zVG9T
a2lwID0gYnl0ZWNvZGUubnVtUGFyYW1ldGVyc1RvU2tpcDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNv
ZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CiAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7CiAgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CkBAIC0xNTQzLDggKzE1NDMsOCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEFyZ3VtZW50
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4
ID0gYnl0ZWNvZGUuaW5kZXg7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QwKTsKICNlbHNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0MDAxOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNjYxLDcgKzE2NjEsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blRyeU9TUkVudGVyCiAgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXNDb21wdXRl
ZEZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlSW5kZXgpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLT5hczxPcENhdGNoPigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAg
ICBtZXRhZGF0YS5idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBw
cm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUubV9wcm9maWxlLm1fYnVj
a2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShleGVjLT51bmNoZWNrZWRSKHByb2ZpbGUubV9vcGVy
YW5kKS5qc1ZhbHVlKCkpOwogICAgIH0pOwogCkBAIC0yMjkyLDkgKzIyOTIsOSBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BH
ZXRGcm9tU2NvcGU+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUudmFyKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8
SlNPYmplY3QqPihleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpKS5qc1Zh
bHVlKCkpOwotICAgIEdldFB1dEluZm8mIGdldFB1dEluZm8gPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spLmdldFB1dEluZm87CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOworICAgIEpTT2JqZWN0KiBzY29wZSA9
IGpzQ2FzdDxKU09iamVjdCo+KGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZz
ZXQoKSkuanNWYWx1ZSgpKTsKKyAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgaXMg
YWx3YXlzIGNvbnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29wZS4KICAgICBB
U1NFUlQoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpICE9IE1vZHVsZVZhcik7CkBAIC0yMzM0LDE4
ICsyMzM0LDE4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEUKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CiAKLSAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS52YXIpOwotICAgIEpT
T2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNv
ZGUuc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMt
PnIoYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsKLSAgICBHZXRQdXRJbmZvJiBn
ZXRQdXRJbmZvID0gbWV0YWRhdGEuZ2V0UHV0SW5mbzsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7CisgICAgSlNPYmpl
Y3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5t
X3Njb3BlLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5y
KGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCkpLmpzVmFsdWUoKTsKKyAgICBHZXRQdXRJbmZvJiBn
ZXRQdXRJbmZvID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGRv
ZXMgbm90IGtlZXAgdGhlIHNjb3BlIHJlZ2lzdGVyIHZhbHVlIGFsaXZlIGluIERGRy4KICAgICBB
U1NFUlQoZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpICE9IE1vZHVsZVZhcik7CiAKICAgICBpZiAo
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICBK
U0xleGljYWxFbnZpcm9ubWVudCogZW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJv
bm1lbnQqPihzY29wZSk7Ci0gICAgICAgIGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zm
c2V0KG1ldGFkYXRhLm9wZXJhbmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7Ci0gICAg
ICAgIGlmIChXYXRjaHBvaW50U2V0KiBzZXQgPSBtZXRhZGF0YS53YXRjaHBvaW50U2V0KQorICAg
ICAgICBlbnZpcm9ubWVudC0+dmFyaWFibGVBdChTY29wZU9mZnNldChtZXRhZGF0YS5tX29wZXJh
bmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7CisgICAgICAgIGlmIChXYXRjaHBvaW50
U2V0KiBzZXQgPSBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpCiAgICAgICAgICAgICBzZXQtPnRv
dWNoKHZtLCAiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMjQwMDE5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUwLDEwICs1MCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEdldHRlckJ5SWQ+KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwot
ICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5OwotICAgIGludCBvcHRpb25zID0g
Ynl0ZWNvZGUuYXR0cmlidXRlczsKLSAgICBpbnQgZ2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iu
b2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAg
aW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBpbnQgb3B0aW9ucyA9IGJ5
dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICBpbnQgZ2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3Nv
ci5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1p
dExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwpAQCAtNjMsMTAgKzYzLDEwIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QKIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+
KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5OwotICAgIGludCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0
cmlidXRlczsKLSAgICBpbnQgc2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCk7Cisg
ICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBpbnQgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0
cmlidXRlczsKKyAgICBpbnQgc2V0dGVyID0gYnl0ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKTsK
IAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2Fk
KHNldHRlciwgcmVnVDMpOwpAQCAtNzYsMTEgKzc2LDExIEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9zZXR0ZXJfYnlfaWQoY29uc3QKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlk
PigpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJv
cGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eTsKLSAgICBpbnQgYXR0cmlidXRlcyA9IGJ5dGVjb2Rl
LmF0dHJpYnV0ZXM7Ci0gICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLmdldHRlci5vZmZzZXQoKTsK
LSAgICBpbnQgc2V0dGVyID0gYnl0ZWNvZGUuc2V0dGVyLm9mZnNldCgpOworICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7CisgICAgaW50IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7
CisgICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLm1fZ2V0dGVyLm9mZnNldCgpOworICAgIGludCBz
ZXR0ZXIgPSBieXRlY29kZS5tX3NldHRlci5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9h
ZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwpAQCAt
OTEsMTAgKzkxLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2kK
IHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJh
c2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0
KCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUuYXR0cmlidXRlczsKLSAgICBp
bnQgZ2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5tX2F0
dHJpYnV0ZXM7CisgICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCk7
CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3Bl
cnR5LCByZWdUMSwgcmVnVDApOwpAQCAtMTA1LDEwICsxMDUsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9ieV92YWwoY29ucwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkg
PSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBi
eXRlY29kZS5hdHRyaWJ1dGVzOwotICAgIGludCBzZXR0ZXIgPSBieXRlY29kZS5hY2Nlc3Nvci5v
ZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBp
bnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICBpbnQgc2V0dGVyID0gYnl0
ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCBy
ZWdUMik7CiAgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7CkBAIC0xMTksOSAr
MTE5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29ucwogdm9pZCBK
SVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxC
eUlkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJh
c2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
LnByb3BlcnR5OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1bHQsIGRzdCwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmlt
cGwoKSk7CiB9CkBAIC0xMjksOSArMTI5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lk
KGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAg
aW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0
KCk7CiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCBy
ZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwogfQpAQCAtMTQwLDEwICsxNDAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlWYWw+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0
ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLmFycmF5UHJvZmlsZTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHBy
b3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKICAgICBlbWl0TG9hZDIoYmFz
ZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKQEAgLTIwMCw3ICsyMDAs
NyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0CiAgICAgLy8gcHJv
cGVydHk6IHRhZyhyZWdUMyksIHBheWxvYWQocmVnVDIpCiAgICAgLy8gc2NyYXRjaDogcmVnVDQK
IAotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dENlbGwocmVnVDMpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCBy
ZWdUMiwgcmVnVDQsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTIyNiw5ICsyMjYsOSBA
QCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0CiB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uu
b2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7
CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHkub2Zmc2V0KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBs
aW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCkBA
IC0yNzEsOSArMjcxLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0
cgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEuYXJyYXlQcm9maWxlOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7
CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwog
ICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywg
cmVnVDIpOwpAQCAtMzIxLDkgKzMyMSw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCiB7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAg
aW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLnZhbHVlLm9mZnNldCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5hcnJheVByb2ZpbGU7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CiAgICAgCkBAIC0zODIsOSArMzgyLDkgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRl
Y29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJh
c2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0g
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKKyAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKQEAg
LTQyMyw4ICs0MjMsOCBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0
CiAgICAgLy8gYmFzZTogdGFnKHJlZ1QxKSwgcGF5bG9hZChyZWdUMCkKICAgICAvLyBwcm9wZXJ0
eTogdGFnKHJlZ1QzKSwgcGF5bG9hZChyZWdUMikKIAotICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
YmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsK
KyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwocmVnVDMpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJ
bmZvLCByZWdUMiwgcmVnVDIsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTQ2Myw5ICs0
NjMsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJCiAgICAgaW50
IHZhbHVlOwogCiAgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKLSAgICAgICAg
YmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgICAgIHByb3BlcnR5ID0gYnl0ZWNv
ZGUucHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgICAgIHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zm
c2V0KCk7CisgICAgICAgIGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgICAg
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICAgICAgdmFsdWUg
PSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogICAgIH07CiAKICAgICBpZiAoaXNEaXJlY3Qp
CkBAIC00OTMsOSArNDkzLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9m
ZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
cHJvcGVydHkpKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTUxNiw4ICs1MTYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5
R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCkBAIC01MzIsOSArNTMy
LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkp
KTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU1NSw4ICs1NTUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVj
dD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCkBAIC01NzIsMTYgKzU3MiwxNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9m
ZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKIAogICAg
IGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgo
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsICZtZXRhZGF0YS5t
b2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEp1bXAg
bm90QXJyYXlMZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZt
ZXRhZGF0YS5tX21vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJ
ZE1vZGU6OkFycmF5TGVuZ3RoKSkpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHJlZ1QyLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhN
b2RlLmFycmF5UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMp
OwogICAgIH0KIApAQCAtNjAxLDggKzYwMSw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGludCBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOwor
ICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1f
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNb
bV9nZXRCeUlkSW5kZXgrK107CiAgICAgCkBAIC02MTYsMTAgKzYxNiwxMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRo
aXM+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHRoaXNWUmVnID0gYnl0ZWNvZGUu
dGhpc1ZhbHVlLm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5v
ZmZzZXQoKTsKKyAgICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQo
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgZW1pdExvYWQodGhpc1ZSZWcsIHJlZ1Q0LCByZWdUMyk7CkBAIC02NDIs
OCArNjQyLDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRo
VGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIApAQCAtNjYyLDkgKzY2Miw5IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnUKICAgICAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGJh
c2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZh
bHVlLm9mZnNldCgpOwotICAgIGludCBkaXJlY3QgPSBtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRJ
c0RpcmVjdDsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIGludCBkaXJlY3QgPSBt
ZXRhZGF0YS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogICAgIAogICAgIGVtaXRMb2FkMihi
YXNlLCByZWdUMSwgcmVnVDAsIHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIApAQCAtNjg4LDgg
KzY4OCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5v
ZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbih0aGlzKTsKIApAQCAtNzA3LDkgKzcwNyw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLnByb3BlcnR5KSk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC03MjksOCArNzI5LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCkBAIC03NjIsMTAgKzc2
MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRl
Y29kZS5zY29wZS5vZmZzZXQoKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLnJlc29sdmVUeXBlOwotICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubG9jYWxTY29w
ZURlcHRoOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
c2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKKyAgICB1bnNpZ25lZCBkZXB0aCA9IG1l
dGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewpA
QCAtNzg5LDcgKzc4OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubGV4aWNhbEVudmlyb25tZW50LmdldCgp
KSwgcmVnVDApOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLm1fbGV4
aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFt
aWM6CkBAIC04MDUsNyArODA1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShj
b25zdCBJbgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgLy8gU2luY2UgdGhlc2UgR2xvYmFs
UHJvcGVydHkgY2FuIGJlIGNoYW5nZWQgdG8gR2xvYmFsTGV4aWNhbFZhciwgd2Ugc2hvdWxkIGxv
YWQgdGhlIHZhbHVlIGZyb20gbWV0YWRhdGEuCi0gICAgICAgIEpTU2NvcGUqKiBjb25zdGFudFNj
b3BlU2xvdCA9IG1ldGFkYXRhLmNvbnN0YW50U2NvcGUuc2xvdCgpOworICAgICAgICBKU1Njb3Bl
KiogY29uc3RhbnRTY29wZVNsb3QgPSBtZXRhZGF0YS5tX2NvbnN0YW50U2NvcGUuc2xvdCgpOwog
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IHJlZ1QxKTsKICAgICAgICAgbG9hZFB0cihjb25zdGFudFNjb3BlU2xvdCwgcmVnVDApOwpAQCAt
ODE1LDcgKzgxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4K
ICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwot
ICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLnJlc29sdmVUeXBlLCByZWdUMCk7CisgICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwogCiAgICAgICAgIEp1bXAgbm90
R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7CkBAIC04
NzksMTEgKzg3OSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9t
U2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2Nv
cGUgPSBieXRlY29kZS5zY29wZS5vZmZzZXQoKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEuc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3Qq
IG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEub3Bl
cmFuZCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBz
Y29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOworICAgIHVp
bnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRh
ZGF0YS5tX29wZXJhbmQpOwogICAgIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAg
c3dpdGNoIChyZXNvbHZlVHlwZSkgewpAQCAtOTQwLDcgKzk0MCw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAg
IGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1
bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5nZXRQdXRJbmZvLCBy
ZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CiAg
ICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsg
Ly8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc05vdEdsb2JhbFBy
b3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2ZVR5
cGUpKTsKQEAgLTk1NSw3ICs5NTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29w
ZShjb25zdCBJCiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNr
aXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5nZXRQdXRJbmZvLCByZWdUMCk7Cisg
ICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CiAgICAgICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBS
ZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJh
bmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKQEAgLTk5
NCw3ICs5OTQsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwog
ICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQog
CkBAIC0xMDMwLDEyICsxMDMwLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShj
b25zdCBJbnMKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IHNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlLm9mZnNldCgpOwogICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dElu
Zm8oYnl0ZWNvZGUpOwogICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5z
dHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5vcGVyYW5kKTsKKyAgICBTdHJ1Y3R1cmUqKiBz
dHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOworICAgIHVpbnRwdHJf
dCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5t
X29wZXJhbmQpOwogICAgIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJl
c29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewpAQCAtMTA2OSw5ICsxMDY5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDEpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRh
ZGF0YS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFi
bGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAm
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFu
ZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKQEAgLTEwNzksNyArMTA3
OSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3Qs
IHZhbHVlLCBtZXRhZGF0YS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRQdXRDbG9z
dXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRT
ZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAg
ICBjYXNlIER5bmFtaWM6CkBAIC0xMDk1LDcgKzEwOTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNl
IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlz
dCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEuZ2V0UHV0SW5mbywgcmVnVDAp
OworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwogICAgICAg
ICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExv
YWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CkBAIC0x
MTE0LDcgKzExMTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5z
CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
LSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxv
YWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0
ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlw
ZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKQEAgLTExNjIsOSArMTE2
Miw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0RnJvbUFyZ3VtZW50cz4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNl
dCgpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7Ci0g
ICAgaW50IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXg7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5v
ZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAgIGVt
aXRMb2FkUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVnVDEpOwpAQCAtMTE3Niw5ICsxMTc2
LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFyZ3VtZW50
cy5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleDsKLSAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNv
ZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogICAgIAogICAg
IGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDI0MDAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMTAgKzU1LDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9m
ZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CisgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHkub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5
VmFsSW5mbygpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBA
IC0xMzQsNyArMTM0LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdp
dAogICAgIC8vIHByb3BlcnR5OiByZWdUMQogICAgIC8vIHNjcmF0Y2g6IHJlZ1QzCiAKLSAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5t
X2RzdC5vZmZzZXQoKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJl
Z1QzLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0xNTksOSArMTU5LDkgQEAgSklUR2V0
QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgp
OwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
Lm9mZnNldCgpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAogICAgIGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKQEAgLTIw
NSw5ICsyMDUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RyCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLnByb3BlcnR5Lm9mZnNldCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5hcnJheVByb2ZpbGU7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAg
QnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTI2NSw4ICsyNjUsOCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0Nv
bnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUu
b2Zmc2V0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJv
ZmlsZTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAg
ICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAKQEAgLTI5Niw3ICsyOTYsNyBAQCBKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzCiAgICAgfQogICAgIGNhc2UgQ29udGlndW91c1No
YXBlOgogICAgICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1l
c0VpZ2h0KSk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUuYmFzZS5vZmZzZXQo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIENSQVNIKCk7CkBAIC0zMjMsOCArMzIz
LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CisgICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAgICAgCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIApA
QCAtMzM3LDcgKzMzNyw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0
QnkKICAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMyk7CiAgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1QyLCBy
ZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotICAgIGVt
aXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKICAgICAK
ICAgICBlbXB0eS5saW5rKHRoaXMpOwpAQCAtMzYyLDggKzM2Miw4IEBAIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICAvLyBwcm9wZXJ0eTogcmVnVDEKICAgICAv
LyBzY3JhdGNoOiByZWdUMgogCi0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChy
ZWdUMSkpOwogICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QxLCBy
ZWdUMSwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwpAQCAtMzk3LDkgKzM5Nyw5IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKICAgICBpbnQgdmFsdWU7CiAKICAg
ICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBiYXNlID0gYnl0ZWNv
ZGUuYmFzZS5vZmZzZXQoKTsKLSAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5v
ZmZzZXQoKTsKLSAgICAgICAgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICAg
ICAgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICAgICAgcHJvcGVydHkgPSBi
eXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCk7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTQyNSw1NyAr
NDI1LDU3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUu
YXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmFjY2Vzc29y
Lm9mZnNldCgpLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNv
ZGUubV9hdHRyaWJ1dGVzOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9h
Y2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlJZCwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfc2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJC
eUlkPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuYmFzZS5vZmZzZXQo
KSwgcmVnVDApOwotICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5hY2Nlc3Nvci5vZmZzZXQoKSwgcmVn
VDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDAsIG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMs
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZz
ZXQoKSwgcmVnVDApOworICAgIGludDMyX3Qgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRl
czsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0
KCksIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJl
Z1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0
ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRlckJ5
SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5iYXNlLm9mZnNldCgp
LCByZWdUMCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5hdHRyaWJ1dGVzOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZ2V0dGVyLm9mZnNldCgpLCByZWdU
MSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5zZXR0ZXIub2Zmc2V0KCks
IHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KS5pbXBsKCksIGF0
dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGludDMyX3QgYXR0cmlidXRlID0gYnl0
ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUuYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJp
YnV0ZXMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUuYWNjZXNzb3IsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dEdldHRlckJ5VmFsLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKIH0K
IAogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFNldHRlckJ5VmFsPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0
dHJpYnV0ZXMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOworICAg
IGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QyKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMCwgcmVnVDEsIGF0
dHJpYnV0ZXMsIHJlZ1QyKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgp
OwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5OworICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5v
ZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRp
Zmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKIH0KQEAgLTQ4Myw5ICs0ODMsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQo
KTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIHJlZ1QwLCBy
ZWdUMSk7CkBAIC00OTQsOSArNDk0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChj
b25zdCBJbnN0cgogdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5iYXNlLm9m
ZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2VWUmVnLCByZWdUMCk7CiAKQEAgLTUxOCw4ICs1MTgsOCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJ
ZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCkBAIC01MzMsOSArNTMzLDkgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29ucwogdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
LSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9w
ZXJ0eSkpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Cisg
ICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
CiAKQEAgLTU1Nyw4ICs1NTcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2Rp
cmVjdChjCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBpbnQgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAg
ICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3By
b3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogCkBAIC01NzMsMTcgKzU3MywxNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZVZSZWcsIHJlZ1QwKTsKICAgICAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKICAgICAKICAgICBpZiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFt
ZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgSnVtcCBub3RB
cnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFk
YXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6
OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QxLCAmbWV0YWRhdGEubW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJh
eVByb2ZpbGUpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90
RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlKSwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCkpKTsKKyAgICAgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgJm1ldGFkYXRhLm1f
bW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOwogICAgICAgICBub3RB
cnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTYwMSwxMCArNjAxLDEwIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIHZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGlu
dCB0aGlzVlJlZyA9IGJ5dGVjb2RlLnRoaXNWYWx1ZS5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVy
dHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdGhpc1ZS
ZWcgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkp
OwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKQEAgLTYyNyw4ICs2MjcsOCBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIApAQCAt
NjQ0LDggKzY0NCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZS
ZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
V2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKICAgICAKQEAgLTY2MCw5ICs2NjAs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBi
YXNlVlJlZyA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlVlJlZyA9IGJ5
dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIHVuc2lnbmVkIGRpcmVjdCA9IG1ldGFkYXRhLmZs
YWdzICYgUHV0QnlJZElzRGlyZWN0OworICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQo
KTsKKyAgICB1bnNpZ25lZCBkaXJlY3QgPSBtZXRhZGF0YS5tX2ZsYWdzICYgUHV0QnlJZElzRGly
ZWN0OwogCiAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1
Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAg
Ly8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdp
c3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCkBAIC02OTAsNyArNjkw
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CiAgICAgCkBAIC03MDQs
OSArNzA0LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0
eSkpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CiAK
QEAgLTcyNyw4ICs3MjcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3Qg
SW5zCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCByZXN1
bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsK
IAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgr
K107CiAKQEAgLTc1OSwxMCArNzU5LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2Nv
cGUoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwot
ICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gbWV0YWRhdGEucmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVwdGgg
PSBtZXRhZGF0YS5sb2NhbFNjb3BlRGVwdGg7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7Cisg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOworICAg
IHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKICAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0
Y2ggKHJlc29sdmVUeXBlKSB7CkBAIC03ODQsNyArNzg0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRz
dCwgc2NvcGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1ldGFkYXRhLmxleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5tX2xleGljYWxF
bnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIER5bmFtaWM6CkBA
IC04MDEsNyArODAxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgLy8gU2luY2UgdGhlc2UgR2xvYmFsUHJvcGVy
dHkgY2FuIGJlIGNoYW5nZWQgdG8gR2xvYmFsTGV4aWNhbFZhciwgd2Ugc2hvdWxkIGxvYWQgdGhl
IHZhbHVlIGZyb20gbWV0YWRhdGEuCi0gICAgICAgIEpTU2NvcGUqKiBjb25zdGFudFNjb3BlU2xv
dCA9IG1ldGFkYXRhLmNvbnN0YW50U2NvcGUuc2xvdCgpOworICAgICAgICBKU1Njb3BlKiogY29u
c3RhbnRTY29wZVNsb3QgPSBtZXRhZGF0YS5tX2NvbnN0YW50U2NvcGUuc2xvdCgpOwogICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgbG9hZFB0cihjb25zdGFudFNjb3BlU2xvdCwgcmVnVDApOwogICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CkBAIC04MTAsNyArODEwLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFBy
b3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRh
dGEucmVzb2x2ZVR5cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29s
dmVUeXBlLCByZWdUMCk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKQEAgLTg3MywxMSArODczLDExIEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9m
ZnNldCgpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEuZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0
YS5zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5vcGVyYW5kKTsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29w
ZS5vZmZzZXQoKTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBt
ZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKICAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKQEAg
LTkzNyw3ICs5MzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmbWV0YWRhdGEuZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1l
dGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIo
R2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBU
MAogCiAgICAgICAgIEp1bXAgaXNOb3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CkBAIC05NTMsNyArOTUzLDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigm
bWV0YWRhdGEuZ2V0UHV0SW5mbywgcmVnVDApOworICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLm1f
Z2V0UHV0SW5mbywgcmVnVDApOwogICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5m
bzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAogCiAgICAg
ICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CkBAIC05OTIsNyArOTkyLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21T
Y29wZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUs
IGRzdCwgY3VycmVudEluc3RydWN0aW9uKTsKIH0KIApAQCAtMTAyMywxMiArMTAyMywxMiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzY29w
ZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZh
bHVlLm9mZnNldCgpOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7
CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKICAgICBHZXRQdXRJ
bmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKICAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEuc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50
cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRh
dGEub3BlcmFuZCk7CisgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1f
c3RydWN0dXJlLnNsb3QoKTsKKyAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKIAogICAgIGF1dG8gZW1p
dENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewpAQCAtMTA2NCw5ICsx
MDY0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogICAgICAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAg
ICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAg
ICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCAmbWV0YWRhdGEubV93YXRjaHBvaW50U2V0KTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEud2F0Y2hw
b2ludFNldCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLm1fd2F0Y2hwb2lu
dFNldCk7CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTA3NCw3ICsxMDc0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElu
cwogICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
bG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS53YXRjaHBvaW50
U2V0KTsKKyAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3Qs
IHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwogICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKQEAgLTEwOTIsNyArMTA5Miw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAg
ICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5nZXRQ
dXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQdXRJbmZvLCBy
ZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIocmVzb2x2
ZVR5cGUpKTsKQEAgLTExMTEsNyArMTExMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShjb25zdCBJbnMKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLmdldFB1dEluZm8sIHJlZ1Qw
KTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsKICAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwpA
QCAtMTE1OSw5ICsxMTU5LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShj
b25zdAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFyZ3VtZW50
cy5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleDsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
Lm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAg
ICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkg
KyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwpAQCAtMTE3
Miw5ICsxMTcyLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbgog
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
LmFyZ3VtZW50cy5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleDsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRz
ID0gYnl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwog
ICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwpAQCAtMTczOCwxMCArMTczOCwx
MCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBl
ZEFycmF5VHlwZSB0eXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5h
cnJheVByb2ZpbGU7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlOwogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92
YWx1ZS5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNl
ID0gcmVnVDA7CkBAIC0xODEzLDEwICsxODEzLDEwIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29k
ZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEuYXJyYXlQcm9maWxlOworICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NFUlQoaXNG
bG9hdCh0eXBlKSk7CiAgICAgCi0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0
KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI0
MDAxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xMzMsNyArMTMzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBMTEludCB7CiAgICAgICAgIGJvb2wgX19iX2NvbmRpdGlvbiA9IChjb25kaXRpb24pOyAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChfX2JfY29u
ZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICBKVU1QX1RPKEpVTVBfT0ZGU0VUKGJ5dGVjb2RlLnRhcmdldCkpOyBcCisgICAgICAgICAg
ICBKVU1QX1RPKEpVTVBfT0ZGU0VUKGJ5dGVjb2RlLm1fdGFyZ2V0KSk7IFwKICAgICAgICAgZWxz
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgICAgIEpVTVBfVE8ocGMtPnNpemUoKSk7IFwKICAgICAgICAgTExJTlRfRU5EX0lN
UEwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE0Miwy
MCArMTQyLDIwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogI2RlZmluZSBM
TElOVF9SRVRVUk4odmFsdWUpIGRvIHsgICAgICAgICAgICAgICAgXAogICAgICAgICBKU1ZhbHVl
IF9fcl9yZXR1cm5WYWx1ZSA9ICh2YWx1ZSk7ICAgICAgXAogICAgICAgICBMTElOVF9DSEVDS19F
WENFUFRJT04oKTsgICAgICAgICAgICAgICAgXAotICAgICAgICBMTElOVF9PUChieXRlY29kZS5k
c3QpID0gX19yX3JldHVyblZhbHVlOyAgICAgICAgICBcCisgICAgICAgIExMSU5UX09QKGJ5dGVj
b2RlLm1fZHN0KSA9IF9fcl9yZXR1cm5WYWx1ZTsgICAgICAgICAgXAogICAgICAgICBMTElOVF9F
TkRfSU1QTCgpOyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQog
CiAjZGVmaW5lIExMSU5UX1JFVFVSTl9QUk9GSUxFRCh2YWx1ZSkgZG8geyAgICAgICAgICAgICAg
IFwKICAgICAgICAgSlNWYWx1ZSBfX3JwX3JldHVyblZhbHVlID0gKHZhbHVlKTsgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBMTElOVF9PUChieXRlY29kZS5kc3QpID0g
X19ycF9yZXR1cm5WYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBMTElO
VF9PUChieXRlY29kZS5tX2RzdCkgPSBfX3JwX3JldHVyblZhbHVlOyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgICAgIExMSU5UX1BST0ZJTEVfVkFMVUUoX19ycF9yZXR1cm5WYWx1ZSk7
ICAgICAgICAgIFwKICAgICAgICAgTExJTlRfRU5EX0lNUEwoKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgTExJ
TlRfUFJPRklMRV9WQUxVRSh2YWx1ZSkgZG8geyBcCi0gICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRh
KGV4ZWMpLnByb2ZpbGUubV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAor
ICAgICAgICBieXRlY29kZS5tZXRhZGF0YShleGVjKS5tX3Byb2ZpbGUubV9idWNrZXRzWzBdID0g
SlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5l
IExMSU5UX0NBTExfRU5EX0lNUEwoZXhlYywgY2FsbFRhcmdldCwgY2FsbFRhcmdldFRhZykgXApA
QCAtNTcxLDcgKzU3MSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfb2Jq
ZWMKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdP
YmplY3Q+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsK
LSAgICBMTElOVF9SRVRVUk4oY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgbWV0YWRhdGEub2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCkpKTsKKyAgICBMTElOVF9SRVRVUk4oY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYywgbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS5zdHJ1Y3R1cmUoKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3
X2FycmF5KQpAQCAtNTc5LDcgKzU3OSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9uZXdfYXJyYXkKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGV4ZWMpOwotICAgIExMSU5UX1JFVFVSTihjb25zdHJ1Y3RBcnJheU5lZ2F0aXZlSW5kZXhlZChl
eGVjLCAmbWV0YWRhdGEuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgYml0d2lzZV9jYXN0PEpTVmFs
dWUqPigmTExJTlRfT1AoYnl0ZWNvZGUuYXJndikpLCBieXRlY29kZS5hcmdjKSk7CisgICAgTExJ
TlRfUkVUVVJOKGNvbnN0cnVjdEFycmF5TmVnYXRpdmVJbmRleGVkKGV4ZWMsICZtZXRhZGF0YS5t
X2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJkxMSU5UX09Q
KGJ5dGVjb2RlLm1fYXJndikpLCBieXRlY29kZS5tX2FyZ2MpKTsKIH0KIAogTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV93aXRoX3NpemUpCkBAIC01ODcsMTQgKzU4Nywx
NCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5CiAgICAgTExJTlRf
QkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXJyYXlXaXRoU2l6ZT4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgIExM
SU5UX1JFVFVSTihjb25zdHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgJm1ldGFkYXRhLmFy
cmF5QWxsb2NhdGlvblByb2ZpbGUsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgTExJTlRf
T1BfQyhieXRlY29kZS5sZW5ndGgpLmpzVmFsdWUoKSkpOworICAgIExMSU5UX1JFVFVSTihjb25z
dHJ1Y3RBcnJheVdpdGhTaXplUXVpcmsoZXhlYywgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBMTElOVF9PUF9DKGJ5dGVjb2Rl
Lm1fbGVuZ3RoKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25ld19yZWdleHApCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIFJlZ0V4cCogcmVnRXhwID0ganNDYXN0PFJl
Z0V4cCo+KExMSU5UX09QX0MoYnl0ZWNvZGUucmVnZXhwKS5qc1ZhbHVlKCkpOworICAgIFJlZ0V4
cCogcmVnRXhwID0ganNDYXN0PFJlZ0V4cCo+KExMSU5UX09QX0MoYnl0ZWNvZGUubV9yZWdleHAp
LmpzVmFsdWUoKSk7CiAgICAgQVNTRVJUKHJlZ0V4cC0+aXNWYWxpZCgpKTsKICAgICBMTElOVF9S
RVRVUk4oUmVnRXhwT2JqZWN0OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCkpOwogfQpAQCAtNjAzLDggKzYwMyw4IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pbnN0YW5jZW8KIHsKICAgICBMTElOVF9CRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIEpT
VmFsdWUgdmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCk7Ci0gICAg
SlNWYWx1ZSBwcm90byA9IExMSU5UX09QX0MoYnl0ZWNvZGUucHJvdG90eXBlKS5qc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1
ZSgpOworICAgIEpTVmFsdWUgcHJvdG8gPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fcHJvdG90eXBl
KS5qc1ZhbHVlKCk7CiAgICAgTExJTlRfUkVUVVJOKGpzQm9vbGVhbihKU09iamVjdDo6ZGVmYXVs
dEhhc0luc3RhbmNlKGV4ZWMsIHZhbHVlLCBwcm90bykpKTsKIH0KIApAQCAtNjEzLDkgKzYxMyw5
IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pbnN0YW5jZW8KICAgICBMTElOVF9C
RUdJTigpOwogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+
KCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUudmFsdWUpLmpzVmFs
dWUoKTsKLSAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yID0gTExJTlRfT1BfQyhieXRlY29kZS5jb25z
dHJ1Y3RvcikuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgaGFzSW5zdGFuY2VWYWx1ZSA9IExMSU5U
X09QX0MoYnl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIGNvbnN0cnVjdG9yID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2NvbnN0cnVjdG9yKS5qc1Zh
bHVlKCk7CisgICAgSlNWYWx1ZSBoYXNJbnN0YW5jZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29k
ZS5tX2hhc0luc3RhbmNlVmFsdWUpLmpzVmFsdWUoKTsKIAogICAgIEFTU0VSVChjb25zdHJ1Y3Rv
ci5pc09iamVjdCgpKTsKICAgICBBU1NFUlQoaGFzSW5zdGFuY2VWYWx1ZSAhPSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9u
KCkgfHwgIWNvbnN0cnVjdG9yLmdldE9iamVjdCgpLT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygp
LmltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UoKSk7CkBAIC02MjksOCArNjI5LDggQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RyeV9nZXRfYgogICAgIExMSU5UX0JFR0lOKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRyeUdldEJ5SWQ+KCk7CiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVl
LCBQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVp
cnkpOwogCiAgICAgYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7
CkBAIC02NDQsOCArNjQ0LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9i
eV9pZAogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdl
dEJ5SWREaXJlY3Q+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9D
KGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSk7CiAKICAgICBib29sIGZvdW5kID0g
YmFzZVZhbHVlLmdldE93blByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7CkBAIC02NTYs
NyArNjU2LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAg
IGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIHNsb3QuaXNDYWNoZWFibGUoKSkgewog
ICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwogICAgICAg
ICB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLnN0
cnVjdHVyZTsKKyAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRh
dGEubV9zdHJ1Y3R1cmU7CiAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlSUQpIHsKICAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIGEgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
b2xkU3RydWN0dXJlSUQpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYiA9IGJhc2VWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKQEAgLTY3Miw4ICs2NzIsOCBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIGlmIChzbG90LmlzVmFsdWUo
KSkgewogICAgICAgICAgICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xkIGNh
Y2hlLgotICAgICAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIG1l
dGFkYXRhLm9mZnNldCA9IDA7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZSA9IDA7
CisgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IDA7CiAKICAgICAgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKQogICAgICAgICAgICAgICAg
ICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewpAQCAtNjgx
LDggKzY4MSw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKIAog
ICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwogCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlID0gc3RydWN0dXJlLT5p
ZCgpOwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlk
KCk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNzM1LDE5ICs3MzUsMTkg
QEAgc3RhdGljIHZvaWQgc2V0dXBHZXRCeUlkUHJvdG90eXBlQ2FjaGUoRQogICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogCiAgICAgaWYgKHNsb3QuaXNV
bnNldCgpKSB7Ci0gICAgICAgIG1ldGFkYXRhLm1vZGUgPSBHZXRCeUlkTW9kZTo6VW5zZXQ7Ci0g
ICAgICAgIG1ldGFkYXRhLm1vZGVNZXRhZGF0YS51bnNldE1vZGUuc3RydWN0dXJlID0gc3RydWN0
dXJlLT5pZCgpOworICAgICAgICBtZXRhZGF0YS5tX21vZGUgPSBHZXRCeUlkTW9kZTo6VW5zZXQ7
CisgICAgICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLnVuc2V0TW9kZS5zdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmUtPmlkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKHNsb3Qu
aXNWYWx1ZSgpKTsKIAotICAgIG1ldGFkYXRhLm1vZGUgPSBHZXRCeUlkTW9kZTo6UHJvdG9Mb2Fk
OwotICAgIG1ldGFkYXRhLm1vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVjdHVyZSA9IHN0
cnVjdHVyZS0+aWQoKTsKLSAgICBtZXRhZGF0YS5tb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5j
YWNoZWRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbWV0YWRhdGEubW9kZU1ldGFkYXRhLnByb3RvTG9h
ZE1vZGUuY2FjaGVkU2xvdCA9IHNsb3Quc2xvdEJhc2UoKTsKKyAgICBtZXRhZGF0YS5tX21vZGUg
PSBHZXRCeUlkTW9kZTo6UHJvdG9Mb2FkOworICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLnBy
b3RvTG9hZE1vZGUuc3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgpOworICAgIG1ldGFkYXRhLm1f
bW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkT2Zmc2V0ID0gb2Zmc2V0OworICAgIG1l
dGFkYXRhLm1fbW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkU2xvdCA9IHNsb3Quc2xv
dEJhc2UoKTsKICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBwb2ludGVyIHdpbGwgcmVtYWluIHZh
bGlkIGJlY2F1c2UgaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IGVpdGhlciBhIHdhdGNocG9pbnQgZmly
ZSBvcgogICAgIC8vIGR1cmluZyBHQyB3aGVuIHdlIGNsZWFyIHRoZSBMTEludCBjYWNoZXMuCi0g
ICAgbWV0YWRhdGEubW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkU2xvdCA9IHNsb3Qu
c2xvdEJhc2UoKTsKKyAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLmNh
Y2hlZFNsb3QgPSBzbG90LnNsb3RCYXNlKCk7CiB9CiAKIApAQCAtNzU3LDI5ICs3NTcsMjkgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEoZXhlYyk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9D
KGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBiYXNlVmFs
dWUuZ2V0KGV4ZWMsIGlkZW50LCBzbG90KTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsK
LSAgICBMTElOVF9PUChieXRlY29kZS5kc3QpID0gcmVzdWx0OworICAgIExMSU5UX09QKGJ5dGVj
b2RlLm1fZHN0KSA9IHJlc3VsdDsKICAgICAKICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1Nf
U0xPVwogICAgICAgICAmJiBiYXNlVmFsdWUuaXNDZWxsKCkKICAgICAgICAgJiYgc2xvdC5pc0Nh
Y2hlYWJsZSgpKSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVj
dHVyZUlEOwotICAgICAgICAgICAgYXV0byBtb2RlID0gbWV0YWRhdGEubW9kZTsKKyAgICAgICAg
ICAgIGF1dG8gbW9kZSA9IG1ldGFkYXRhLm1fbW9kZTsKICAgICAgICAgICAgIHN3aXRjaCAobW9k
ZSkgewogICAgICAgICAgICAgY2FzZSBHZXRCeUlkTW9kZTo6RGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5z
dHJ1Y3R1cmU7CisgICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWRNb2RlOjpVbnNldDoKLSAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1vZGVNZXRhZGF0YS51bnNldE1vZGUuc3RydWN0dXJl
OworICAgICAgICAgICAgICAgIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9tb2RlTWV0YWRh
dGEudW5zZXRNb2RlLnN0cnVjdHVyZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgR2V0QnlJZE1vZGU6OlByb3RvTG9hZDoKLSAgICAgICAgICAgICAgICBvbGRTdHJ1
Y3R1cmVJRCA9IG1ldGFkYXRhLm1vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVjdHVyZTsK
KyAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRh
LnByb3RvTG9hZE1vZGUuc3RydWN0dXJlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBvbGRTdHJ1Y3R1cmVJRCA9IDA7CkBAIC03
OTksMTIgKzc5OSwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lk
CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7
CiAgICAgICAgIGlmIChzbG90LmlzVmFsdWUoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSB7CiAgICAgICAgICAgICAvLyBTdGFydCBvdXQgYnkgY2xlYXJpbmcgb3V0IHRoZSBvbGQg
Y2FjaGUuCi0gICAgICAgICAgICBtZXRhZGF0YS5tb2RlID0gR2V0QnlJZE1vZGU6OkRlZmF1bHQ7
Ci0gICAgICAgICAgICBtZXRhZGF0YS5tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJl
ID0gMDsKLSAgICAgICAgICAgIG1ldGFkYXRhLm1vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5jYWNo
ZWRPZmZzZXQgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9tb2RlID0gR2V0QnlJZE1vZGU6
OkRlZmF1bHQ7CisgICAgICAgICAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5kZWZhdWx0TW9k
ZS5zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuZGVm
YXVsdE1vZGUuY2FjaGVkT2Zmc2V0ID0gMDsKIAogICAgICAgICAgICAgLy8gUHJldmVudCB0aGUg
cHJvdG90eXBlIGNhY2hlIGZyb20gZXZlciBoYXBwZW5pbmcuCi0gICAgICAgICAgICBtZXRhZGF0
YS5oaXRDb3VudEZvckxMSW50Q2FjaGluZyA9IDA7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2hp
dENvdW50Rm9yTExJbnRDYWNoaW5nID0gMDsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkKICAgICAgICAgICAgICAgICAm
JiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKQEAgLTgxMiwy
NCArODEyLDI0IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1vZGVNZXRh
ZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0gICAgICAgICAg
ICAgICAgbWV0YWRhdGEubW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLmNhY2hlZE9mZnNldCA9IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9tb2RlTWV0YWRh
dGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgpOworICAgICAgICAgICAg
ICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLmNhY2hlZE9mZnNldCA9IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoVU5M
SUtFTFkobWV0YWRhdGEuaGl0Q291bnRGb3JMTEludENhY2hpbmcgJiYgKHNsb3QuaXNWYWx1ZSgp
IHx8IHNsb3QuaXNVbnNldCgpKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChVTkxJS0VMWShtZXRh
ZGF0YS5tX2hpdENvdW50Rm9yTExJbnRDYWNoaW5nICYmIChzbG90LmlzVmFsdWUoKSB8fCBzbG90
LmlzVW5zZXQoKSkpKSB7CiAgICAgICAgICAgICBBU1NFUlQoc2xvdC5zbG90QmFzZSgpICE9IGJh
c2VWYWx1ZSk7CiAKLSAgICAgICAgICAgIGlmICghKC0tbWV0YWRhdGEuaGl0Q291bnRGb3JMTElu
dENhY2hpbmcpKQorICAgICAgICAgICAgaWYgKCEoLS1tZXRhZGF0YS5tX2hpdENvdW50Rm9yTExJ
bnRDYWNoaW5nKSkKICAgICAgICAgICAgICAgICBzZXR1cEdldEJ5SWRQcm90b3R5cGVDYWNoZShl
eGVjLCB2bSwgcGMsIG1ldGFkYXRhLCBiYXNlQ2VsbCwgc2xvdCwgaWRlbnQpOwogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XCiAgICAgICAgICYmIGlz
SlNBcnJheShiYXNlVmFsdWUpCiAgICAgICAgICYmIGlkZW50ID09IHZtLnByb3BlcnR5TmFtZXMt
Pmxlbmd0aCkgewotICAgICAgICBtZXRhZGF0YS5tb2RlID0gR2V0QnlJZE1vZGU6OkFycmF5TGVu
Z3RoOwotICAgICAgICBuZXcgKCZtZXRhZGF0YS5tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2Rl
LmFycmF5UHJvZmlsZSkgQXJyYXlQcm9maWxlKGNvZGVCbG9jay0+Ynl0ZWNvZGVPZmZzZXQocGMp
KTsKLSAgICAgICAgbWV0YWRhdGEubW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVBy
b2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkp
OworICAgICAgICBtZXRhZGF0YS5tX21vZGUgPSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGg7Cisg
ICAgICAgIG5ldyAoJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJh
eVByb2ZpbGUpIEFycmF5UHJvZmlsZShjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKSk7Cisg
ICAgICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2Zp
bGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSkpOwog
CiAgICAgICAgIC8vIFByZXZlbnQgdGhlIHByb3RvdHlwZSBjYWNoZSBmcm9tIGV2ZXIgaGFwcGVu
aW5nLgotICAgICAgICBtZXRhZGF0YS5oaXRDb3VudEZvckxMSW50Q2FjaGluZyA9IDA7CisgICAg
ICAgIG1ldGFkYXRhLm1faGl0Q291bnRGb3JMTEludENhY2hpbmcgPSAwOwogICAgIH0KIAogICAg
IExMSU5UX1BST0ZJTEVfVkFMVUUocmVzdWx0KTsKQEAgLTg0MiwxNCArODQyLDE0IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wUHV0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGV4ZWMpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUucHJvcGVydHkpOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgIAotICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwogICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBpZiAobWV0YWRhdGEuZmxhZ3Mg
JiBQdXRCeUlkSXNEaXJlY3QpCi0gICAgICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0
aFJlaWZ5KHZtLCBleGVjLCBhc09iamVjdChiYXNlVmFsdWUpLCBpZGVudCwgTExJTlRfT1BfQyhi
eXRlY29kZS52YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsKKyAgICBpZiAobWV0YWRhdGEubV9mbGFn
cyAmIFB1dEJ5SWRJc0RpcmVjdCkKKyAgICAgICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RX
aXRoUmVpZnkodm0sIGV4ZWMsIGFzT2JqZWN0KGJhc2VWYWx1ZSksIGlkZW50LCBMTElOVF9PUF9D
KGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAgZWxzZQotICAgICAgICBi
YXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVl
KS5qc1ZhbHVlKCksIHNsb3QpOworICAgICAgICBiYXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlk
ZW50LCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAg
TExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUND
RVNTX1NMT1cKQEAgLTg1Nyw3ICs4NTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcHV0X2J5X2lkCiAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGVQdXQoKSkgewogCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEu
b2xkU3RydWN0dXJlOworICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBt
ZXRhZGF0YS5tX29sZFN0cnVjdHVyZTsKICAgICAgICAgICAgIGlmIChvbGRTdHJ1Y3R1cmVJRCkg
ewogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYSA9IHZtLmhlYXAuc3RydWN0dXJlSURUYWJs
ZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBiID0g
YmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwpAQCAtODcyLDExICs4NzIsMTEgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICB9CiAKICAg
ICAgICAgLy8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xkIGNhY2hlLgotICAgICAg
ICBtZXRhZGF0YS5vbGRTdHJ1Y3R1cmUgPSAwOwotICAgICAgICBtZXRhZGF0YS5vZmZzZXQgPSAw
OwotICAgICAgICBtZXRhZGF0YS5uZXdTdHJ1Y3R1cmUgPSAwOwotICAgICAgICBtZXRhZGF0YS5z
dHJ1Y3R1cmVDaGFpbi5jbGVhcigpOwotICAgICAgICBtZXRhZGF0YS5mbGFncyA9IHN0YXRpY19j
YXN0PFB1dEJ5SWRGbGFncz4obWV0YWRhdGEuZmxhZ3MgJiBQdXRCeUlkUGVyc2lzdGVudEZsYWdz
TWFzayk7CisgICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlID0gMDsKKyAgICAgICAgbWV0
YWRhdGEubV9vZmZzZXQgPSAwOworICAgICAgICBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZSA9IDA7
CisgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlQ2hhaW4uY2xlYXIoKTsKKyAgICAgICAgbWV0
YWRhdGEubV9mbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4obWV0YWRhdGEubV9mbGFn
cyAmIFB1dEJ5SWRQZXJzaXN0ZW50RmxhZ3NNYXNrKTsKICAgICAgICAgCiAgICAgICAgIEpTQ2Vs
bCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYmFzZUNlbGwtPnN0cnVjdHVyZSh2bSk7CkBAIC04OTcsMjUgKzg5NywyNSBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gbm9ybWFsaXplUHJvdG90eXBlQ2hhaW4oZXhlYywgYmFzZUNlbGws
IHNhd1BvbHlQcm90byk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxp
ZFByb3RvdHlwZUNoYWluICYmICFzYXdQb2x5UHJvdG8pIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKS0+aXNPYmplY3QoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtZXRhZGF0YS5vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZp
b3VzSUQoKS0+aWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9mZnNldCA9
IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5u
ZXdTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIShtZXRhZGF0YS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1ldGFkYXRhLm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lE
KCktPmlkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNldCA9IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX25l
d1N0cnVjdHVyZSA9IHN0cnVjdHVyZS0+aWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghKG1ldGFkYXRhLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3QpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihleGVjLCBhc09iamVjdChiYXNlQ2VsbCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChjaGFpbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRh
dGEuc3RydWN0dXJlQ2hhaW4uc2V0KHZtLCBjb2RlQmxvY2ssIGNoYWluKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUNoYWluLnNldCh2bSwgY29kZUJs
b2NrLCBjaGFpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtZXRhZGF0YS5mbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgbWV0YWRhdGEubV9mbGFncyA9IHN0YXRpY19jYXN0PFB1dEJ5SWRGbGFncz4oCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9mbGFncyB8CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlk
ZW50LmltcGwoKSkucHV0QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGEub2xkU3RydWN0dXJlID0gc3RydWN0dXJlLT5p
ZCgpOwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9mZnNldCA9IHNsb3QuY2FjaGVkT2Zmc2V0
KCk7Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGEuZmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlk
RmxhZ3M+KAotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5mbGFncyB8CisgICAgICAgICAg
ICAgICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7CisgICAgICAg
ICAgICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAg
ICAgICAgICAgIG1ldGFkYXRhLm1fZmxhZ3MgPSBzdGF0aWNfY2FzdDxQdXRCeUlkRmxhZ3M+KAor
ICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX2ZsYWdzIHwKICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5pbmZlcnJlZFR5cGVEZXNjcmlwdG9yRm9yKGlkZW50LmltcGwoKSkucHV0
QnlJZEZsYWdzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05MjksOSArOTI5LDkg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlbF9ieV9pZAogICAgIExMSU5UX0JF
R0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcERlbEJ5SWQ+KCk7CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU09iamVjdCogYmFz
ZU9iamVjdCA9IExMSU5UX09QX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGV4
ZWMpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2Jh
c2UpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsKICAgICBMTElOVF9DSEVDS19FWENFUFRJT04o
KTsKLSAgICBib29sIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0aG9kVGFibGUodm0pLT5k
ZWxldGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBleGVjLCBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0
ZWNvZGUucHJvcGVydHkpKTsKKyAgICBib29sIGNvdWxkRGVsZXRlID0gYmFzZU9iamVjdC0+bWV0
aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBleGVjLCBjb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQ
VElPTigpOwogICAgIGlmICghY291bGREZWxldGUgJiYgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSkKICAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVHlwZUVycm9yKGV4ZWMsIFVuYWJsZVRvRGVs
ZXRlUHJvcGVydHlFcnJvcikpOwpAQCAtOTQwLDggKzk0MCw4IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9kZWxfYnlfaWQKIAogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXRCeVZhbChWTSYgdm0sIEV4ZWNTdGF0ZSogZXhlYywgT3BHZXRCeVZhbCBieXRlY29kZSkKIHsK
LSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1
ZSgpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1BfQyhieXRlY29kZS5wcm9wZXJ0
eSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29k
ZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IExMSU5UX09QX0Mo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYm
IHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewpAQCAtOTU3LDcgKzk1Nyw3IEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0QnlWYWwoVk0KICAgICBpZiAoc3Vic2NyaXB0LmlzVUludDMy
KCkpIHsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgICAgICBBcnJh
eVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CisgICAgICAg
IEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwog
CiAgICAgICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIGlmIChh
c1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewpAQCAtMTAwNyw5ICsxMDA3LDkg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQogICAgIExMSU5UX0JF
R0lOKCk7CiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1dEJ5VmFsPigpOwot
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVl
KCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnByb3BlcnR5
KS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUudmFs
dWUpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNv
ZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9PUF9D
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gTExJ
TlRfT1BfQyhieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgYm9vbCBpc1N0cmljdE1v
ZGUgPSBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgCiAgICAgaWYgKExJ
S0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKQEAgLTEwMzgsOSArMTAzOCw5IEBAIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmEKICAgICBMTElOVF9CRUdJTigpOwog
ICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKTsKLSAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgp
OwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1BfQyhieXRlY29kZS5wcm9wZXJ0eSku
anNWYWx1ZSgpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVl
KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2Rl
Lm1fYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1BfQyhi
eXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5U
X09QX0MoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2VWYWx1ZS5pc09iamVjdCgpKTsKICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0
KGJhc2VWYWx1ZSk7CiAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBleGVjLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCk7CkBAIC0xMDc4LDExICsxMDc4LDExIEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9kZWxfYnlfdmEKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IExMSU5UX09QX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKICAgICBKU09iamVj
dCogYmFzZU9iamVjdCA9IGJhc2VWYWx1ZS50b09iamVjdChleGVjKTsKICAgICBMTElOVF9DSEVD
S19FWENFUFRJT04oKTsKIAotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1BfQyhieXRl
Y29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRf
T1BfQyhieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CiAgICAgCiAgICAgYm9vbCBjb3Vs
ZERlbGV0ZTsKICAgICAKQEAgLTExMDcsMTUgKzExMDcsMTUgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3B1dF9nZXR0ZQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Ci0gICAgQVNTRVJUKExMSU5UX09Q
KGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCogYmFz
ZU9iaiA9IGFzT2JqZWN0KExMSU5UX09QKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKSk7CisgICAg
QVNTRVJUKExMSU5UX09QKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLmlzT2JqZWN0KCkpOwor
ICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoTExJTlRfT1AoYnl0ZWNvZGUubV9iYXNl
KS5qc1ZhbHVlKCkpOwogCi0gICAgdW5zaWduZWQgb3B0aW9ucyA9IGJ5dGVjb2RlLmF0dHJpYnV0
ZXM7CisgICAgdW5zaWduZWQgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKIAotICAg
IEpTVmFsdWUgZ2V0dGVyID0gTExJTlRfT1AoYnl0ZWNvZGUuYWNjZXNzb3IpLmpzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIGdldHRlciA9IExMSU5UX09QKGJ5dGVjb2RlLm1fYWNjZXNzb3IpLmpzVmFs
dWUoKTsKICAgICBBU1NFUlQoZ2V0dGVyLmlzT2JqZWN0KCkpOwogCi0gICAgYmFzZU9iai0+cHV0
R2V0dGVyKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3Bl
cnR5KSwgYXNPYmplY3QoZ2V0dGVyKSwgb3B0aW9ucyk7CisgICAgYmFzZU9iai0+cHV0R2V0dGVy
KGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LCBhc09iamVjdChnZXR0ZXIpLCBvcHRpb25zKTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApAQCAt
MTEyMywxNSArMTEyMywxNSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3Nl
dHRlCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
UHV0U2V0dGVyQnlJZD4oKTsKLSAgICBBU1NFUlQoTExJTlRfT1AoYnl0ZWNvZGUuYmFzZSkuanNW
YWx1ZSgpLmlzT2JqZWN0KCkpOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoTExJ
TlRfT1AoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoTExJTlRfT1AoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VP
YmogPSBhc09iamVjdChMTElOVF9PUChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKSk7CiAKLSAg
ICB1bnNpZ25lZCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0cmlidXRlczsKKyAgICB1bnNpZ25lZCBv
cHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogCi0gICAgSlNWYWx1ZSBzZXR0ZXIgPSBM
TElOVF9PUChieXRlY29kZS5hY2Nlc3NvcikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc2V0dGVy
ID0gTExJTlRfT1AoYnl0ZWNvZGUubV9hY2Nlc3NvcikuanNWYWx1ZSgpOwogICAgIEFTU0VSVChz
ZXR0ZXIuaXNPYmplY3QoKSk7CiAKLSAgICBiYXNlT2JqLT5wdXRTZXR0ZXIoZXhlYywgZXhlYy0+
Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpLCBhc09iamVjdChzZXR0
ZXIpLCBvcHRpb25zKTsKKyAgICBiYXNlT2JqLT5wdXRTZXR0ZXIoZXhlYywgZXhlYy0+Y29kZUJs
b2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSksIGFzT2JqZWN0KHNldHRlciks
IG9wdGlvbnMpOwogICAgIExMSU5UX0VORCgpOwogfQogCkBAIC0xMTM5LDE1ICsxMTM5LDE1IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfZ2V0dGUKIHsKICAgICBMTElOVF9C
RUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlk
PigpOwotICAgIEFTU0VSVChMTElOVF9PUChieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkuaXNPYmpl
Y3QoKSk7Ci0gICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChMTElOVF9PUChieXRl
Y29kZS5iYXNlKS5qc1ZhbHVlKCkpOworICAgIEFTU0VSVChMTElOVF9PUChieXRlY29kZS5tX2Jh
c2UpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFz
T2JqZWN0KExMSU5UX09QKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpKTsKIAotICAgIEpTVmFs
dWUgZ2V0dGVyID0gTExJTlRfT1AoYnl0ZWNvZGUuZ2V0dGVyKS5qc1ZhbHVlKCk7Ci0gICAgSlNW
YWx1ZSBzZXR0ZXIgPSBMTElOVF9PUChieXRlY29kZS5zZXR0ZXIpLmpzVmFsdWUoKTsKKyAgICBK
U1ZhbHVlIGdldHRlciA9IExMSU5UX09QKGJ5dGVjb2RlLm1fZ2V0dGVyKS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSBzZXR0ZXIgPSBMTElOVF9PUChieXRlY29kZS5tX3NldHRlcikuanNWYWx1ZSgp
OwogICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSB8fCBzZXR0ZXIuaXNPYmplY3QoKSk7CiAg
ICAgR2V0dGVyU2V0dGVyKiBhY2Nlc3NvciA9IEdldHRlclNldHRlcjo6Y3JlYXRlKHZtLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGdldHRlciwgc2V0dGVyKTsKIAotICAgIENvbW1vblNs
b3dQYXRoczo6cHV0RGlyZWN0QWNjZXNzb3JXaXRoUmVpZnkodm0sIGV4ZWMsIGJhc2VPYmplY3Qs
IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSwgYWNjZXNz
b3IsIGJ5dGVjb2RlLmF0dHJpYnV0ZXMpOworICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0
QWNjZXNzb3JXaXRoUmVpZnkodm0sIGV4ZWMsIGJhc2VPYmplY3QsIGV4ZWMtPmNvZGVCbG9jaygp
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLCBhY2Nlc3NvciwgYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzKTsKICAgICBMTElOVF9FTkQoKTsKIH0KIApAQCAtMTE1NSwxMyArMTE1NSwxMyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2dldHRlCiB7CiAgICAgTExJTlRf
QkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7
Ci0gICAgQVNTRVJUKExMSU5UX09QKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKS5pc09iamVjdCgp
KTsKLSAgICBKU09iamVjdCogYmFzZU9iaiA9IGFzT2JqZWN0KExMSU5UX09QKGJ5dGVjb2RlLmJh
c2UpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9PUF9DKGJ5dGVj
b2RlLnByb3BlcnR5KS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKExMSU5UX09QKGJ5dGVjb2RlLm1f
YmFzZSkuanNWYWx1ZSgpLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNP
YmplY3QoTExJTlRfT1AoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gTExJTlRfT1BfQyhieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CiAK
LSAgICB1bnNpZ25lZCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0cmlidXRlczsKKyAgICB1bnNpZ25l
ZCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwogCi0gICAgSlNWYWx1ZSBnZXR0ZXIg
PSBMTElOVF9PUChieXRlY29kZS5hY2Nlc3NvcikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgZ2V0
dGVyID0gTExJTlRfT1AoYnl0ZWNvZGUubV9hY2Nlc3NvcikuanNWYWx1ZSgpOwogICAgIEFTU0VS
VChnZXR0ZXIuaXNPYmplY3QoKSk7CiAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRv
UHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xMTc1LDEzICsxMTc1LDEzIEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9wdXRfc2V0dGUKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBBU1NFUlQoTExJ
TlRfT1AoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpLmlzT2JqZWN0KCkpOwotICAgIEpTT2JqZWN0
KiBiYXNlT2JqID0gYXNPYmplY3QoTExJTlRfT1AoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpKTsK
LSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IExMSU5UX09QX0MoYnl0ZWNvZGUucHJvcGVydHkpLmpz
VmFsdWUoKTsKKyAgICBBU1NFUlQoTExJTlRfT1AoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCku
aXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmogPSBhc09iamVjdChMTElOVF9PUChi
eXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElO
VF9PUF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKIAotICAgIHVuc2lnbmVkIG9w
dGlvbnMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOworICAgIHVuc2lnbmVkIG9wdGlvbnMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CiAKLSAgICBKU1ZhbHVlIHNldHRlciA9IExMSU5UX09QKGJ5dGVj
b2RlLmFjY2Vzc29yKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzZXR0ZXIgPSBMTElOVF9PUChi
eXRlY29kZS5tX2FjY2Vzc29yKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHNldHRlci5pc09iamVj
dCgpKTsKIAogICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVj
KTsKQEAgLTExOTUsMTEyICsxMTk1LDExMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfanRydWUpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wSnRydWU+KCk7Ci0gICAgTExJTlRfQlJBTkNIKExMSU5UX09QX0MoYnl0ZWNvZGUuY29u
ZGl0aW9uKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBMTElOVF9CUkFOQ0goTExJ
TlRfT1BfQyhieXRlY29kZS5tX2NvbmRpdGlvbikuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7
CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qZmFsc2UpCiB7CiAgICAgTExJ
TlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSmZhbHNlPigpOwotICAg
IExMSU5UX0JSQU5DSCghTExJTlRfT1BfQyhieXRlY29kZS5jb25kaXRpb24pLmpzVmFsdWUoKS50
b0Jvb2xlYW4oZXhlYykpOworICAgIExMSU5UX0JSQU5DSCghTExJTlRfT1BfQyhieXRlY29kZS5t
X2NvbmRpdGlvbikuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7CiB9CiAKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9qbGVzcykKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKbGVzcz4oKTsKLSAgICBMTElOVF9CUkFOQ0goanNMZXNz
PHRydWU+KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09Q
X0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goanNMZXNzPHRy
dWU+KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgTExJTlRfT1Bf
QyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9qbmxlc3MpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wSm5sZXNzPigpOwotICAgIExMSU5UX0JSQU5DSCghanNMZXNzPHRydWU+
KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0
ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goIWpzTGVzczx0cnVlPihl
eGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0
ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfamdyZWF0ZXIpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wSmdyZWF0ZXI+KCk7Ci0gICAgTExJTlRfQlJBTkNIKGpzTGVzczxmYWxzZT4o
ZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRl
Y29kZS5saHMpLmpzVmFsdWUoKSkpOworICAgIExMSU5UX0JSQU5DSChqc0xlc3M8ZmFsc2U+KGV4
ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRl
Y29kZS5tX2xocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9qbmdyZWF0ZXIpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wSm5ncmVhdGVyPigpOwotICAgIExMSU5UX0JSQU5DSCghanNMZXNzPGZhbHNl
PihleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5
dGVjb2RlLmxocykuanNWYWx1ZSgpKSk7CisgICAgTExJTlRfQlJBTkNIKCFqc0xlc3M8ZmFsc2U+
KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhi
eXRlY29kZS5tX2xocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9qbGVzc2VxKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcEpsZXNzZXE+KCk7Ci0gICAgTExJTlRfQlJBTkNIKGpzTGVzc0VxPHRydWU+
KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0
ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goanNMZXNzRXE8dHJ1ZT4o
ZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5
dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2pubGVzc2VxKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcEpubGVzc2VxPigpOwotICAgIExMSU5UX0JSQU5DSCghanNMZXNzRXE8dHJ1
ZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhi
eXRlY29kZS5yaHMpLmpzVmFsdWUoKSkpOworICAgIExMSU5UX0JSQU5DSCghanNMZXNzRXE8dHJ1
ZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBMTElOVF9PUF9D
KGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2pncmVhdGVyZXEpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wSmdyZWF0ZXJlcT4oKTsKLSAgICBMTElOVF9CUkFOQ0goanNMZXNz
RXE8ZmFsc2U+KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCksIExMSU5U
X09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goanNMZXNz
RXE8ZmFsc2U+KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSwgTExJ
TlRfT1BfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9qbmdyZWF0ZXJlcSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKbmdyZWF0ZXJlcT4oKTsKLSAgICBMTElOVF9CUkFO
Q0goIWpzTGVzc0VxPGZhbHNlPihleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1
ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpKSk7CisgICAgTExJTlRfQlJB
TkNIKCFqc0xlc3NFcTxmYWxzZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX3JocykuanNW
YWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2plcSkKIHsKICAgICBMTElOVF9CRUdJTigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKZXE+KCk7Ci0gICAgTExJTlRfQlJBTkNIKEpT
VmFsdWU6OmVxdWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExM
SU5UX09QX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goSlNW
YWx1ZTo6ZXF1YWwoZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBM
TElOVF9PUF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2puZXEpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wSm5lcT4oKTsKLSAgICBMTElOVF9CUkFOQ0goIUpTVmFsdWU6
OmVxdWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09Q
X0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goIUpTVmFsdWU6
OmVxdWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgTExJTlRf
T1BfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9qc3RyaWN0ZXEpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wSnN0cmljdGVxPigpOwotICAgIExMSU5UX0JSQU5DSChKU1Zh
bHVlOjpzdHJpY3RFcXVhbChleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgp
LCBMTElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpKSk7CisgICAgTExJTlRfQlJBTkNI
KEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9saHMpLmpz
VmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSk7CiB9CiAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qbnN0cmljdGVxKQogewogICAgIExMSU5UX0JF
R0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEpuc3RyaWN0ZXE+KCk7Ci0gICAg
TExJTlRfQlJBTkNIKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBMTElOVF9PUF9DKGJ5dGVj
b2RlLmxocykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpKSk7
CisgICAgTExJTlRfQlJBTkNIKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBMTElOVF9PUF9D
KGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpz
VmFsdWUoKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3dpdGNoX2lt
bSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BT
d2l0Y2hJbW0+KCk7Ci0gICAgSlNWYWx1ZSBzY3J1dGluZWUgPSBMTElOVF9PUF9DKGJ5dGVjb2Rl
LnNjcnV0aW5lZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc2NydXRpbmVlID0gTExJTlRfT1Bf
QyhieXRlY29kZS5tX3NjcnV0aW5lZSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChzY3J1dGluZWUu
aXNEb3VibGUoKSk7CiAgICAgZG91YmxlIHZhbHVlID0gc2NydXRpbmVlLmFzRG91YmxlKCk7CiAg
ICAgaW50MzJfdCBpbnRWYWx1ZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKTsKLSAgICBp
bnQgZGVmYXVsdE9mZnNldCA9IEpVTVBfT0ZGU0VUKGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOwor
ICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gSlVNUF9PRkZTRVQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zm
c2V0KTsKICAgICBpZiAodmFsdWUgPT0gaW50VmFsdWUpIHsKICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgSlVNUF9UTyhjb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZShieXRlY29kZS50YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZShpbnRW
YWx1ZSwgZGVmYXVsdE9mZnNldCkpOworICAgICAgICBKVU1QX1RPKGNvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKGJ5dGVjb2RlLm1fdGFibGVJbmRleCkub2Zmc2V0Rm9yVmFsdWUoaW50VmFsdWUs
IGRlZmF1bHRPZmZzZXQpKTsKICAgICB9IGVsc2UKICAgICAgICAgSlVNUF9UTyhkZWZhdWx0T2Zm
c2V0KTsKICAgICBMTElOVF9FTkQoKTsKQEAgLTEzMTAsMTQgKzEzMTAsMTQgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3N3aXRjaF9jaAogewogICAgIExMSU5UX0JFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFN3aXRjaENoYXI+KCk7Ci0gICAgSlNWYWx1ZSBz
Y3J1dGluZWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnNjcnV0aW5lZSkuanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgc2NydXRpbmVlID0gTExJTlRfT1BfQyhieXRlY29kZS5tX3NjcnV0aW5lZSkuanNW
YWx1ZSgpOwogICAgIEFTU0VSVChzY3J1dGluZWUuaXNTdHJpbmcoKSk7CiAgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGFzU3RyaW5nKHNjcnV0aW5lZSk7CiAgICAgQVNTRVJUKHN0cmluZy0+bGVuZ3Ro
KCkgPT0gMSk7Ci0gICAgaW50IGRlZmF1bHRPZmZzZXQgPSBKVU1QX09GRlNFVChieXRlY29kZS5k
ZWZhdWx0T2Zmc2V0KTsKKyAgICBpbnQgZGVmYXVsdE9mZnNldCA9IEpVTVBfT0ZGU0VUKGJ5dGVj
b2RlLm1fZGVmYXVsdE9mZnNldCk7CiAgICAgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmluZy0+dmFs
dWUoZXhlYykuaW1wbCgpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJs
b2NrKCk7Ci0gICAgSlVNUF9UTyhjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShieXRlY29kZS50
YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZSgoKmltcGwpWzBdLCBkZWZhdWx0T2Zmc2V0KSk7Cisg
ICAgSlVNUF9UTyhjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShieXRlY29kZS5tX3RhYmxlSW5k
ZXgpLm9mZnNldEZvclZhbHVlKCgqaW1wbClbMF0sIGRlZmF1bHRPZmZzZXQpKTsKICAgICBMTElO
VF9FTkQoKTsKIH0KIApAQCAtMTMyNSwxMyArMTMyNSwxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfc3dpdGNoX3N0CiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wU3dpdGNoU3RyaW5nPigpOwotICAgIEpTVmFsdWUgc2NydXRpbmVl
ID0gTExJTlRfT1BfQyhieXRlY29kZS5zY3J1dGluZWUpLmpzVmFsdWUoKTsKLSAgICBpbnQgZGVm
YXVsdE9mZnNldCA9IEpVTVBfT0ZGU0VUKGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOworICAgIEpT
VmFsdWUgc2NydXRpbmVlID0gTExJTlRfT1BfQyhieXRlY29kZS5tX3NjcnV0aW5lZSkuanNWYWx1
ZSgpOworICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gSlVNUF9PRkZTRVQoYnl0ZWNvZGUubV9kZWZh
dWx0T2Zmc2V0KTsKICAgICBpZiAoIXNjcnV0aW5lZS5pc1N0cmluZygpKQogICAgICAgICBKVU1Q
X1RPKGRlZmF1bHRPZmZzZXQpOwogICAgIGVsc2UgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICBKVU1QX1RPKGNvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGJ5dGVjb2RlLnRhYmxlSW5kZXgpLm9mZnNldEZvclZhbHVlKGFz
U3RyaW5nKHNjcnV0aW5lZSktPnZhbHVlKGV4ZWMpLmltcGwoKSwgZGVmYXVsdE9mZnNldCkpOwor
ICAgICAgICBKVU1QX1RPKGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGJ5dGVjb2Rl
Lm1fdGFibGVJbmRleCkub2Zmc2V0Rm9yVmFsdWUoYXNTdHJpbmcoc2NydXRpbmVlKS0+dmFsdWUo
ZXhlYykuaW1wbCgpLCBkZWZhdWx0T2Zmc2V0KSk7CiAgICAgfQogICAgIExMSU5UX0VORCgpOwog
fQpAQCAtMTM0MSw5ICsxMzQxLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25l
d19mdW5jKQogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cE5ld0Z1bmM+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUuc2NvcGUp
LlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2Vk
UihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBzbG93UGF0aExvZ0Yo
IkNyZWF0aW5nIGZ1bmN0aW9uIVxuIik7Ci0gICAgTExJTlRfUkVUVVJOKEpTRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUuZnVuY3Rpb25EZWNsKSwg
c2NvcGUpKTsKKyAgICBMTElOVF9SRVRVUk4oSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxv
Y2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCksIHNjb3BlKSk7CiB9CiAK
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCkBAIC0x
MzUxLDkgKzEzNTEsOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2dlbmVy
CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3R2Vu
ZXJhdG9yRnVuYz4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5zY29w
ZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNr
ZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIHNsb3dQYXRoTG9n
RigiQ3JlYXRpbmcgZnVuY3Rpb24hXG4iKTsKLSAgICBMTElOVF9SRVRVUk4oSlNHZW5lcmF0b3JG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5mdW5j
dGlvbkRlY2wpLCBzY29wZSkpOworICAgIExMSU5UX1JFVFVSTihKU0dlbmVyYXRvckZ1bmN0aW9u
OjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKSwgc2NvcGUpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19h
c3luY19mdW5jKQpAQCAtMTM2MSw5ICsxMzYxLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX25ld19hc3luYwogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcE5ld0FzeW5jRnVuYz4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4
ZWMtPmNvZGVCbG9jaygpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihi
eXRlY29kZS5zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBl
eGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAg
IHNsb3dQYXRoTG9nRigiQ3JlYXRpbmcgYXN5bmMgZnVuY3Rpb24hXG4iKTsKLSAgICBMTElOVF9S
RVRVUk4oSlNBc3luY0Z1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNs
KGJ5dGVjb2RlLmZ1bmN0aW9uRGVjbCksIHNjb3BlKSk7CisgICAgTExJTlRfUkVUVVJOKEpTQXN5
bmNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5t
X2Z1bmN0aW9uRGVjbCksIHNjb3BlKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmMpCkBAIC0xMzcxLDkgKzEzNzEsOSBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FzeW5jCiAgICAgTExJTlRfQkVHSU4oKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXN5bmNHZW5lcmF0b3JGdW5jPigpOwog
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29w
ZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3BlKS5SZWdpc3Rlcjo6c2Nv
cGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9z
Y29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgc2xvd1BhdGhMb2dGKCJDcmVhdGluZyBhc3lu
YyBnZW5lcmF0b3IgZnVuY3Rpb24hXG4iKTsKLSAgICBMTElOVF9SRVRVUk4oSlNBc3luY0dlbmVy
YXRvckZ1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2Rl
LmZ1bmN0aW9uRGVjbCksIHNjb3BlKSk7CisgICAgTExJTlRfUkVUVVJOKEpTQXN5bmNHZW5lcmF0
b3JGdW5jdGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5t
X2Z1bmN0aW9uRGVjbCksIHNjb3BlKSk7CiB9CiAgICAgCiBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfbmV3X2Z1bmNfZXhwKQpAQCAtMTM4Miw4ICsxMzgyLDggQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX25ld19mdW5jXwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BOZXdGdW5jRXhwPigpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVj
b2RlLnNjb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBjb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5mdW5jdGlvbkRlY2wp
OworICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3Bl
KS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBjb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAg
CiAgICAgTExJTlRfUkVUVVJOKEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZXhlY3V0YWJsZSwgc2Nv
cGUpKTsKIH0KQEAgLTEzOTQsOCArMTM5NCw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9uZXdfZ2VuZXIKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdHZW5lcmF0
b3JGdW5jRXhwPigpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2Nr
KCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3Bl
KS5SZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBjb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5mdW5jdGlvbkRlY2wpOworICAgIEpT
U2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rl
cjo6c2NvcGUoKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjb2RlQmxv
Y2stPmZ1bmN0aW9uRXhwcihieXRlY29kZS5tX2Z1bmN0aW9uRGVjbCk7CiAKICAgICBMTElOVF9S
RVRVUk4oSlNHZW5lcmF0b3JGdW5jdGlvbjo6Y3JlYXRlKHZtLCBleGVjdXRhYmxlLCBzY29wZSkp
OwogfQpAQCAtMTQwNiw4ICsxNDA2LDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X25ld19hc3luYwogICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBc3luY0Z1
bmNFeHA+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUuc2NvcGUpLlJl
Z2lzdGVyOjpzY29wZSgpOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNv
ZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLmZ1bmN0aW9uRGVjbCk7CisgICAgSlNTY29w
ZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpz
Y29wZSgpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+
ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICAKICAgICBMTElOVF9S
RVRVUk4oSlNBc3luY0Z1bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWN1dGFibGUsIHNjb3BlKSk7CiB9
CkBAIC0xNDE4LDggKzE0MTgsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3
X2FzeW5jCiAgICAgICAgIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBc3luY0dl
bmVyYXRvckZ1bmNFeHA+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
c2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGNvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLmZ1bmN0aW9uRGVjbCk7Cisg
ICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJl
Z2lzdGVyOjpzY29wZSgpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNv
ZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKICAgICAgICAg
CiAgICAgTExJTlRfUkVUVVJOKEpTQXN5bmNHZW5lcmF0b3JGdW5jdGlvbjo6Y3JlYXRlKHZtLCBl
eGVjdXRhYmxlLCBzY29wZSkpOwogfQpAQCAtMTQyOCw4ICsxNDI4LDggQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3NldF9mdW5jdAogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICBKU0Z1bmN0
aW9uKiBmdW5jID0ganNDYXN0PEpTRnVuY3Rpb24qPihMTElOVF9PUChieXRlY29kZS5mdW5jdGlv
bikuUmVnaXN0ZXI6OnVuYm94ZWRDZWxsKCkpOwotICAgIEpTVmFsdWUgbmFtZSA9IExMSU5UX09Q
X0MoYnl0ZWNvZGUubmFtZSkuUmVnaXN0ZXI6OmpzVmFsdWUoKTsKKyAgICBKU0Z1bmN0aW9uKiBm
dW5jID0ganNDYXN0PEpTRnVuY3Rpb24qPihMTElOVF9PUChieXRlY29kZS5tX2Z1bmN0aW9uKS5S
ZWdpc3Rlcjo6dW5ib3hlZENlbGwoKSk7CisgICAgSlNWYWx1ZSBuYW1lID0gTExJTlRfT1BfQyhi
eXRlY29kZS5tX25hbWUpLlJlZ2lzdGVyOjpqc1ZhbHVlKCk7CiAgICAgZnVuYy0+c2V0RnVuY3Rp
b25OYW1lKGV4ZWMsIG5hbWUpOwogICAgIExMSU5UX0VORCgpOwogfQpAQCAtMTU3OSwxNiArMTU3
OSwxNiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIGdlbmVyaWNDYWxsKEV4CiAgICAgLy8g
LSBJZiBwb3NzaWJsZSwgbGluayB0aGUgY2FsbCdzIGlubGluZSBjYWNoZS4KICAgICAvLyAtIFJl
dHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcg
Y2FsbCBmcmFtZS4KICAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUF9D
KGJ5dGVjb2RlLmNhbGxlZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9
IExMSU5UX09QX0MoYnl0ZWNvZGUubV9jYWxsZWUpLmpzVmFsdWUoKTsKICAgICAKLSAgICBFeGVj
U3RhdGUqIGV4ZWNDYWxsZWUgPSBleGVjIC0gYnl0ZWNvZGUuYXJndjsKKyAgICBFeGVjU3RhdGUq
IGV4ZWNDYWxsZWUgPSBleGVjIC0gYnl0ZWNvZGUubV9hcmd2OwogICAgIAotICAgIGV4ZWNDYWxs
ZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLmFyZ2MpOworICAgIGV4
ZWNDYWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7
CiAgICAgZXhlY0NhbGxlZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2Fs
bGVlQXNWYWx1ZTsKICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZXJGcmFtZShleGVjKTsKICAgICAK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgIHJldHVy
biBzZXRVcENhbGwoZXhlY0NhbGxlZSwga2luZCwgY2FsbGVlQXNWYWx1ZSwgJm1ldGFkYXRhLmNh
bGxMaW5rSW5mbyk7CisgICAgcmV0dXJuIHNldFVwQ2FsbChleGVjQ2FsbGVlLCBraW5kLCBjYWxs
ZWVBc1ZhbHVlLCAmbWV0YWRhdGEubV9jYWxsTGlua0luZm8pOwogfQogCiBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY2FsbCkKQEAgLTE2MjEsMjMgKzE2MjEsMjMgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3NpemVfZnJhbQogICAgIHN3aXRjaCAocGMtPm9wY29kZUlE
KCkpIHsKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogewogICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wQ2FsbFZhcmFyZ3M+KCk7Ci0gICAgICAgIG51bVVzZWRTdGFja1Nsb3RzID0g
LWJ5dGVjb2RlLmZpcnN0RnJlZS5vZmZzZXQoKTsKLSAgICAgICAgYXJndW1lbnRzID0gTExJTlRf
T1BfQyhieXRlY29kZS5hcmd1bWVudHMpLmpzVmFsdWUoKTsKLSAgICAgICAgZmlyc3RWYXJBcmcg
PSBieXRlY29kZS5maXJzdFZhckFyZzsKKyAgICAgICAgbnVtVXNlZFN0YWNrU2xvdHMgPSAtYnl0
ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgICAgIGFyZ3VtZW50cyA9IExMSU5UX09Q
X0MoYnl0ZWNvZGUubV9hcmd1bWVudHMpLmpzVmFsdWUoKTsKKyAgICAgICAgZmlyc3RWYXJBcmcg
PSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfdmFyYXJnczogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wVGFpbENhbGxWYXJhcmdzPigpOwotICAgICAgICBudW1Vc2VkU3RhY2tTbG90cyA9IC1ieXRl
Y29kZS5maXJzdEZyZWUub2Zmc2V0KCk7Ci0gICAgICAgIGFyZ3VtZW50cyA9IExMSU5UX09QX0Mo
Ynl0ZWNvZGUuYXJndW1lbnRzKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGZpcnN0VmFyQXJnID0gYnl0
ZWNvZGUuZmlyc3RWYXJBcmc7CisgICAgICAgIG51bVVzZWRTdGFja1Nsb3RzID0gLWJ5dGVjb2Rl
Lm1fZmlyc3RGcmVlLm9mZnNldCgpOworICAgICAgICBhcmd1bWVudHMgPSBMTElOVF9PUF9DKGJ5
dGVjb2RlLm1fYXJndW1lbnRzKS5qc1ZhbHVlKCk7CisgICAgICAgIGZpcnN0VmFyQXJnID0gYnl0
ZWNvZGUubV9maXJzdFZhckFyZzsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZhcmFyZ3M6IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENv
bnN0cnVjdFZhcmFyZ3M+KCk7Ci0gICAgICAgIG51bVVzZWRTdGFja1Nsb3RzID0gLWJ5dGVjb2Rl
LmZpcnN0RnJlZS5vZmZzZXQoKTsKLSAgICAgICAgYXJndW1lbnRzID0gTExJTlRfT1BfQyhieXRl
Y29kZS5hcmd1bWVudHMpLmpzVmFsdWUoKTsKLSAgICAgICAgZmlyc3RWYXJBcmcgPSBieXRlY29k
ZS5maXJzdFZhckFyZzsKKyAgICAgICAgbnVtVXNlZFN0YWNrU2xvdHMgPSAtYnl0ZWNvZGUubV9m
aXJzdEZyZWUub2Zmc2V0KCk7CisgICAgICAgIGFyZ3VtZW50cyA9IExMSU5UX09QX0MoYnl0ZWNv
ZGUubV9hcmd1bWVudHMpLmpzVmFsdWUoKTsKKyAgICAgICAgZmlyc3RWYXJBcmcgPSBieXRlY29k
ZS5tX2ZpcnN0VmFyQXJnOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKQEAg
LTE2NjAsNyArMTY2MCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zaXplX2Zy
YW0KICAgICAvLyAtIFNldCB1cCBhIGNhbGwgZnJhbWUgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMg
YXMgdGhlIGN1cnJlbnQgZnJhbWUuCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVGFp
bENhbGxGb3J3YXJkQXJndW1lbnRzPigpOwotICAgIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3Rz
ID0gLWJ5dGVjb2RlLmZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBudW1Vc2VkU3Rh
Y2tTbG90cyA9IC1ieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsKIAogICAgIHVuc2lnbmVk
IGFyZ3VtZW50cyA9IHNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHMoZXhlYywgdm0sIG51bVVz
ZWRTdGFja1Nsb3RzKTsKICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihleGVjLCBleGVj
KTsKQEAgLTE2ODcsMTUgKzE2ODcsMTUgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJh
cmdzU2V0dXAoRQogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJl
c3MgdG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgogCiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcD4oKTsKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUF9DKGJ5
dGVjb2RlLmNhbGxlZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExM
SU5UX09QX0MoYnl0ZWNvZGUubV9jYWxsZWUpLmpzVmFsdWUoKTsKIAogICAgIEV4ZWNTdGF0ZSog
ZXhlY0NhbGxlZSA9IHZtLm5ld0NhbGxGcmFtZVJldHVyblZhbHVlOwogCiAgICAgaWYgKHNldCA9
PSBTZXRBcmd1bWVudHNXaXRoOjpPYmplY3QpIHsKLSAgICAgICAgc2V0dXBWYXJhcmdzRnJhbWVB
bmRTZXRUaGlzKGV4ZWMsIGV4ZWNDYWxsZWUsIExMSU5UX09QX0MoYnl0ZWNvZGUudGhpc1ZhbHVl
KS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUuYXJndW1lbnRzKS5qc1ZhbHVlKCksIGJ5
dGVjb2RlLmZpcnN0VmFyQXJnLCB2bS52YXJhcmdzTGVuZ3RoKTsKKyAgICAgICAgc2V0dXBWYXJh
cmdzRnJhbWVBbmRTZXRUaGlzKGV4ZWMsIGV4ZWNDYWxsZWUsIExMSU5UX09QX0MoYnl0ZWNvZGUu
bV90aGlzVmFsdWUpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5tX2FyZ3VtZW50cyku
anNWYWx1ZSgpLCBieXRlY29kZS5tX2ZpcnN0VmFyQXJnLCB2bS52YXJhcmdzTGVuZ3RoKTsKICAg
ICAgICAgTExJTlRfQ0FMTF9DSEVDS19FWENFUFRJT04oZXhlYywgZXhlYyk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIHNldHVwRm9yd2FyZEFyZ3VtZW50c0ZyYW1lQW5kU2V0VGhpcyhleGVjLCBleGVj
Q2FsbGVlLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnRoaXNWYWx1ZSkuanNWYWx1ZSgpLCB2bS52YXJh
cmdzTGVuZ3RoKTsKKyAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVBbmRTZXRUaGlz
KGV4ZWMsIGV4ZWNDYWxsZWUsIExMSU5UX09QX0MoYnl0ZWNvZGUubV90aGlzVmFsdWUpLmpzVmFs
dWUoKSwgdm0udmFyYXJnc0xlbmd0aCk7CiAKICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZXJGcmFt
ZShleGVjKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkgPSBjYWxsZWVBc1ZhbHVlOwpAQCAtMTcyOCwxMSArMTcyOCwxMSBAQCBpbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIGNvbW1vbkNhbGxFdmFsCiB7CiAgICAgTExJTlRfQkVHSU5fTk9fU0VUX1BD
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcENhbGxFdmFsPigpOwotICAgIEpTVmFs
dWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5UX09QKGJ5dGVjb2RlLmNhbGxlZSkuanNWYWx1ZSgpOwor
ICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5UX09QKGJ5dGVjb2RlLm1fY2FsbGVlKS5q
c1ZhbHVlKCk7CiAgICAgCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyAtIGJ5dGVj
b2RlLmFyZ3Y7CisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyAtIGJ5dGVjb2RlLm1f
YXJndjsKICAgICAKLSAgICBleGVjQ2FsbGVlLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhieXRlY29kZS5hcmdjKTsKKyAgICBleGVjQ2FsbGVlLT5zZXRBcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyhieXRlY29kZS5tX2FyZ2MpOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlckZyYW1l
KGV4ZWMpOwogICAgIGV4ZWNDYWxsZWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVl
KSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgZXhlY0NhbGxlZS0+c2V0UmV0dXJuUEMocmV0dXJuUG9p
bnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBAIC0xNzYwLDIxICsxNzYwLDIxIEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wU3RyY2F0PigpOwotICAgIExMSU5UX1JFVFVSTihq
c1N0cmluZ0Zyb21SZWdpc3RlckFycmF5KGV4ZWMsICZMTElOVF9PUChieXRlY29kZS5zcmMpLCBi
eXRlY29kZS5jb3VudCkpOworICAgIExMSU5UX1JFVFVSTihqc1N0cmluZ0Zyb21SZWdpc3RlckFy
cmF5KGV4ZWMsICZMTElOVF9PUChieXRlY29kZS5tX3NyYyksIGJ5dGVjb2RlLm1fY291bnQpKTsK
IH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKIHsKICAg
ICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUb1ByaW1pdGl2
ZT4oKTsKLSAgICBMTElOVF9SRVRVUk4oTExJTlRfT1BfQyhieXRlY29kZS5zcmMpLmpzVmFsdWUo
KS50b1ByaW1pdGl2ZShleGVjKSk7CisgICAgTExJTlRfUkVUVVJOKExMSU5UX09QX0MoYnl0ZWNv
ZGUubV9zcmMpLmpzVmFsdWUoKS50b1ByaW1pdGl2ZShleGVjKSk7CiB9CiAKIExMSU5UX1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF90aHJvdykKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUaHJvdz4oKTsKLSAgICBMTElOVF9USFJPVyhMTElOVF9P
UF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCkpOworICAgIExMSU5UX1RIUk9XKExMSU5UX09Q
X0MoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2hhbmRsZV90cmFwcykKQEAgLTE3OTAsNyArMTc5MCw3IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWJ1ZykKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BEZWJ1Zz4oKTsKLSAgICB2bS5pbnRlcnByZXRlci0+
ZGVidWcoZXhlYywgYnl0ZWNvZGUuZGVidWdIb29rVHlwZSk7CisgICAgdm0uaW50ZXJwcmV0ZXIt
PmRlYnVnKGV4ZWMsIGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSk7CiAgICAgCiAgICAgTExJTlRf
RU5EKCk7CiB9CkBAIC0xODA4LDE1ICsxODA4LDE1IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9nZXRfZnJvbV8KICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShleGVjKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnZhcik7Ci0gICAgSlNPYmplY3QqIHNjb3Bl
ID0ganNDYXN0PEpTT2JqZWN0Kj4oTExJTlRfT1AoYnl0ZWNvZGUuc2NvcGUpLmpzVmFsdWUoKSk7
CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Zhcik7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2Jq
ZWN0Kj4oTExJTlRfT1AoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKIAogICAgIC8vIE1v
ZHVsZVZhciBpcyBhbHdheXMgY29udmVydGVkIHRvIENsb3N1cmVWYXIgZm9yIGdldF9mcm9tX3Nj
b3BlLgotICAgIEFTU0VSVChtZXRhZGF0YS5nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgIT0gTW9k
dWxlVmFyKTsKKyAgICBBU1NFUlQobWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkg
IT0gTW9kdWxlVmFyKTsKIAogICAgIExMSU5UX1JFVFVSTihzY29wZS0+Z2V0UHJvcGVydHlTbG90
KGV4ZWMsIGlkZW50LCBbJl0gKGJvb2wgZm91bmQsIFByb3BlcnR5U2xvdCYgc2xvdCkgLT4gSlNW
YWx1ZSB7CiAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgIGlmIChtZXRhZGF0YS5n
ZXRQdXRJbmZvLnJlc29sdmVNb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kKQorICAgICAgICAgICAg
aWYgKG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpID09IFRocm93SWZOb3RGb3Vu
ZCkKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29w
ZSwgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpOwogICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KQEAgLTE4NDQsMTggKzE4NDQsMTgg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zYwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BQdXRUb1Njb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEoZXhlYyk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS52YXIpOwotICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09i
amVjdCo+KExMSU5UX09QKGJ5dGVjb2RlLnNjb3BlKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUg
dmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKG1l
dGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKKyAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Zhcik7CisgICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oTExJTlRf
T1AoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gTExJ
TlRfT1BfQyhieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CisgICAgaWYgKG1ldGFkYXRhLm1f
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICBK
U0xleGljYWxFbnZpcm9ubWVudCogZW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJv
bm1lbnQqPihzY29wZSk7Ci0gICAgICAgIGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zm
c2V0KG1ldGFkYXRhLm9wZXJhbmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7CisgICAg
ICAgIGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0KG1ldGFkYXRhLm1fb3BlcmFu
ZCkpLnNldCh2bSwgZW52aXJvbm1lbnQsIHZhbHVlKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhh
dmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIHRoZSB3cml0ZSwgYmVjYXVzZSBpZiB0aGlzIHB1dHMgdGhl
IHNldCBpbnRvIElzV2F0Y2hlZCwgdGhlbiB3ZSBuZWVkCiAgICAgICAgIC8vIHRvIGhhdmUgYWxy
ZWFkeSBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE90aGVyd2lzZSB3ZSBtaWdo
dCB3YXRjaCBhbmQgY29uc3RhbnQtZm9sZAogICAgICAgICAvLyB0byB0aGUgVW5kZWZpbmVkIHZh
bHVlIGZyb20gYmVmb3JlIHRoZSBhc3NpZ25tZW50LgotICAgICAgICBpZiAobWV0YWRhdGEud2F0
Y2hwb2ludFNldCkKLSAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQtPnRvdWNoKHZt
LCAiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKKyAgICAgICAgaWYg
KG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0Y2hw
b2ludFNldC0+dG91Y2godm0sICJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFy
PiIpOwogICAgICAgICBMTElOVF9FTkQoKTsKICAgICB9CiAKQEAgLTE4NjMsNyArMTg2Myw3IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2MKICAgICBMTElOVF9DSEVD
S19FWENFUFRJT04oKTsKICAgICBpZiAoaGFzUHJvcGVydHkKICAgICAgICAgJiYgc2NvcGUtPmlz
R2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkKLSAgICAgICAgJiYgIWlzSW5pdGlhbGl6YXRpb24o
bWV0YWRhdGEuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpIHsKKyAgICAgICAgJiYg
IWlzSW5pdGlhbGl6YXRpb24obWV0YWRhdGEubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSkgewogICAgICAgICAvLyBXaGVuIHdlIGNhbid0IHN0YXRpY2FsbHkgcHJvdmUgd2UgbmVl
ZCBhIFREWiBjaGVjaywgd2UgbXVzdCBwZXJmb3JtIHRoZSBjaGVjayBvbiB0aGUgc2xvdyBwYXRo
LgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSwgUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OkdldCk7CiAgICAgICAgIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3Qoc2NvcGUsIGV4ZWMsIGlkZW50LCBzbG90KTsKQEAgLTE4NzEsMTAg
KzE4NzEsMTAgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zYwogICAg
ICAgICAgICAgTExJTlRfVEhST1coY3JlYXRlVERaRXJyb3IoZXhlYykpOwogICAgIH0KIAotICAg
IGlmIChtZXRhZGF0YS5nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5k
ICYmICFoYXNQcm9wZXJ0eSkKKyAgICBpZiAobWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVN
b2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kICYmICFoYXNQcm9wZXJ0eSkKICAgICAgICAgTExJTlRf
VEhST1coY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpOwogCi0gICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIFB1
dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24obWV0YWRhdGEu
Z2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOworICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KHNjb3BlLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBQdXRQcm9wZXJ0eVNsb3Q6OlVu
a25vd25Db250ZXh0LCBpc0luaXRpYWxpemF0aW9uKG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5pbml0
aWFsaXphdGlvbk1vZGUoKSkpOwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSh2bSktPnB1dChzY29w
ZSwgZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAgICBDb21tb25TbG93UGF0aHM6
OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVjLCBjb2RlQmxvY2ssIGJ5dGVjb2RlLCBzY29w
ZSwgc2xvdCwgaWRlbnQpOwpAQCAtMTg5Nyw3ICsxODk3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2xvZ19zaGFkbwogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgCiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKLSAgICBK
U1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUuc2NvcGUpLlJlZ2lzdGVy
OjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICB2bS5zaGFkb3dDaGlja2VuKCkubG9n
KHZtLCBleGVjLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnByb2xvZ3VlKGV4ZWMtPmpzQ2FsbGVl
KCksIGV4ZWMsIGV4ZWMtPmNhbGxlckZyYW1lKCksIHNjb3BlKSk7CiAgICAgCiAgICAgTExJTlRf
RU5EKCk7CkBAIC0xOTA4LDggKzE5MDgsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfbG9nX3NoYWRvCiAgICAgTExJTlRfQkVHSU4oKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BMb2dTaGFkb3dDaGlja2VuVGFpbD4oKTsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IExMSU5UX09QKGJ5dGVjb2RlLnRoaXNWYWx1ZSkuanNWYWx1ZSgpOwotICAgIEpTU2NvcGUqIHNj
b3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7
CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBMTElOVF9PUChieXRlY29kZS5tX3RoaXNWYWx1ZSku
anNWYWx1ZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29k
ZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleChleGVjLT5jb2RlQmxvY2soKS0+Ynl0ZWNv
ZGVPZmZzZXQocGMpKTsKQEAgLTE5MjksNyArMTkyOSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wcm9maWxlX2MKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDYXRj
aD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAg
IG1ldGFkYXRhLmJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHBy
b2ZpbGUpIHsKKyAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJvZmls
ZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKICAgICAgICAgcHJvZmlsZS5tX3Byb2ZpbGUubV9idWNr
ZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGV4ZWMtPnVuY2hlY2tlZFIocHJvZmlsZS5tX29wZXJh
bmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lv
biAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0
IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDI3ICszNSwyNyBAQCBtYWNybyBuZXh0SW5zdHJ1
Y3Rpb25XaWRlKCkKICAgICBqbXAgW3QxLCB0MCwgNF0sIEJ5dGVjb2RlUHRyVGFnCiBlbmQKIAot
bWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3AsIGZpZWxkLCBkc3QpCi0gICAgbG9hZGIgY29uc3Rl
eHByICVvcCVfJWZpZWxkJV9pbmRleFtQQ10sIGRzdAorbWFjcm8gZ2V0dU9wZXJhbmROYXJyb3co
b3AsIGZpZWxkTmFtZSwgZHN0KQorICAgIGxvYWRiIGNvbnN0ZXhwciAlb3AlXyVmaWVsZE5hbWUl
X2luZGV4W1BDXSwgZHN0CiBlbmQKIAotbWFjcm8gZ2V0T3BlcmFuZE5hcnJvdyhvcCwgZmllbGQs
IGRzdCkKLSAgICBsb2FkYnNwIGNvbnN0ZXhwciAlb3AlXyVmaWVsZCVfaW5kZXhbUENdLCBkc3QK
K21hY3JvIGdldE9wZXJhbmROYXJyb3cob3AsIGZpZWxkTmFtZSwgZHN0KQorICAgIGxvYWRic3Ag
Y29uc3RleHByICVvcCVfJWZpZWxkTmFtZSVfaW5kZXhbUENdLCBkc3QKIGVuZAogCi1tYWNybyBn
ZXR1T3BlcmFuZFdpZGUob3AsIGZpZWxkLCBkc3QpCi0gICAgbG9hZGkgY29uc3RleHByICVvcCVf
JWZpZWxkJV9pbmRleCAqIDQgKyAxW1BDXSwgZHN0CittYWNybyBnZXR1T3BlcmFuZFdpZGUob3As
IGZpZWxkTmFtZSwgZHN0KQorICAgIGxvYWRpIGNvbnN0ZXhwciAlb3AlXyVmaWVsZE5hbWUlX2lu
ZGV4ICogNCArIDFbUENdLCBkc3QKIGVuZAogCi1tYWNybyBnZXRPcGVyYW5kV2lkZShvcCwgZmll
bGQsIGRzdCkKLSAgICBsb2FkaXMgY29uc3RleHByICVvcCVfJWZpZWxkJV9pbmRleCAqIDQgKyAx
W1BDXSwgZHN0CittYWNybyBnZXRPcGVyYW5kV2lkZShvcCwgZmllbGROYW1lLCBkc3QpCisgICAg
bG9hZGlzIGNvbnN0ZXhwciAlb3AlXyVmaWVsZE5hbWUlX2luZGV4ICogNCArIDFbUENdLCBkc3QK
IGVuZAogCiBtYWNybyBtYWtlUmV0dXJuKGdldCwgZGlzcGF0Y2gsIGZuKQogICAgIGZuKG1hY3Jv
KHRhZywgcGF5bG9hZCkKICAgICAgICAgbW92ZSB0YWcsIHQ1CiAgICAgICAgIG1vdmUgcGF5bG9h
ZCwgdDMKLSAgICAgICAgZ2V0KGRzdCwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAg
ICAgIHN0b3JlaSB0NSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCiAgICAgICAgIHN0b3JlaSB0Mywg
UGF5bG9hZE9mZnNldFtjZnIsIHQyLCA4XQogICAgICAgICBkaXNwYXRjaCgpCkBAIC02OSw3ICs2
OSw3IEBAIG1hY3JvIG1ha2VSZXR1cm5Qcm9maWxlZChvcCwgZ2V0LCBtZXRhZGEKIAogICAgICAg
ICBtZXRhZGF0YSh0NSwgdDIpCiAgICAgICAgIHZhbHVlUHJvZmlsZShvcCwgdDUsIHQxLCB0MCkK
LSAgICAgICAgZ2V0KGRzdCwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIHN0
b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCiAgICAgICAgIHN0b3JlaSB0MCwgUGF5bG9h
ZE9mZnNldFtjZnIsIHQyLCA4XQogICAgICAgICBkaXNwYXRjaCgpCkBAIC03OSw3ICs3OSw3IEBA
IGVuZAogCiBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChzaXplLCBvcCwgZGlzcGF0Y2gpCiAgICAg
bG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwotICAgIGdldChzaXplLCBv
cCwgZHN0LCB0MykKKyAgICBnZXQoc2l6ZSwgb3AsIG1fZHN0LCB0MykKICAgICBzdG9yZWkgcjEs
IFRhZ09mZnNldFtjZnIsIHQzLCA4XQogICAgIHN0b3JlaSByMCwgUGF5bG9hZE9mZnNldFtjZnIs
IHQzLCA4XQogICAgIG1ldGFkYXRhKHNpemUsIG9wLCB0MiwgdDMpCkBAIC00MzgsMTAgKzQzOCwx
MCBAQCBtYWNybyBjaGVja1N3aXRjaFRvSklURm9yTG9vcCgpCiAgICAgICAgIGVuZCkKIGVuZAog
Ci1tYWNybyBsb2FkVmFyaWFibGUoZ2V0LCBvcGVyYW5kLCBpbmRleCwgdGFnLCBwYXlsb2FkKQot
ICAgIGdldChvcGVyYW5kLCBpbmRleCkKLSAgICBsb2FkaSBUYWdPZmZzZXRbY2ZyLCBpbmRleCwg
OF0sIHRhZwotICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbY2ZyLCBpbmRleCwgOF0sIHBheWxvYWQK
K21hY3JvIGxvYWRWYXJpYWJsZShnZXQsIGZpZWxkTmFtZSwgaW5kZXhSZWcsIHRhZ1JlZywgcGF5
bG9hZFJlZykKKyAgICBnZXQoZmllbGROYW1lLCBpbmRleFJlZykKKyAgICBsb2FkaSBUYWdPZmZz
ZXRbY2ZyLCBpbmRleFJlZywgOF0sIHRhZ1JlZworICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbY2Zy
LCBpbmRleFJlZywgOF0sIHBheWxvYWRSZWcKIGVuZAogCiAjIEluZGV4LCB0YWcsIGFuZCBwYXls
b2FkIG11c3QgYmUgZGlmZmVyZW50IHJlZ2lzdGVycy4gSW5kZXggaXMgbm90CkBAIC01MzIsOCAr
NTMyLDggQEAgbWFjcm8gbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWRVbmNoZQogICAgICAg
ICBwYXlsb2FkKQogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZChzaXplLCBnZXQs
IGNlbGxPcGVyYW5kKQotICAgIGdldChjZWxsT3BlcmFuZCwgdDEpCittYWNybyB3cml0ZUJhcnJp
ZXJPbk9wZXJhbmQoc2l6ZSwgZ2V0LCBjZWxsRmllbGROYW1lKQorICAgIGdldChjZWxsRmllbGRO
YW1lLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXplLCB0MSwgQ2Vs
bFRhZywgdDIsIC53cml0ZUJhcnJpZXJEb25lKQogICAgIHNraXBJZklzUmVtZW1iZXJlZE9ySW5F
ZGVuKAogICAgICAgICB0MiwgCkBAIC01NTAsMjEgKzU1MCwyMSBAQCBtYWNybyB3cml0ZUJhcnJp
ZXJPbk9wZXJhbmQoc2l6ZSwgZ2V0LCBjCiAud3JpdGVCYXJyaWVyRG9uZToKIGVuZAogCi1tYWNy
byB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgY2VsbE9wZXJhbmQsIHZhbHVlT3Bl
cmFuZCkKLSAgICBnZXQodmFsdWVPcGVyYW5kLCB0MSkKK21hY3JvIHdyaXRlQmFycmllck9uT3Bl
cmFuZHMoc2l6ZSwgZ2V0LCBjZWxsRmllbGROYW1lLCB2YWx1ZUZpZWxkTmFtZSkKKyAgICBnZXQo
dmFsdWVGaWVsZE5hbWUsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVUYWcoc2l6ZSwg
dDEsIHQwKQogICAgIGJpbmVxIHQwLCBDZWxsVGFnLCAud3JpdGVCYXJyaWVyRG9uZQogCi0gICAg
d3JpdGVCYXJyaWVyT25PcGVyYW5kKHNpemUsIGdldCwgY2VsbE9wZXJhbmQpCisgICAgd3JpdGVC
YXJyaWVyT25PcGVyYW5kKHNpemUsIGdldCwgY2VsbEZpZWxkTmFtZSkKIC53cml0ZUJhcnJpZXJE
b25lOgogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmFsdWVP
cGVyYW5kLCBsb2FkSGVscGVyKQotICAgIGdldCh2YWx1ZU9wZXJhbmQsIHQxKQorbWFjcm8gd3Jp
dGVCYXJyaWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSwgbG9hZE1hY3JvKQor
ICAgIGdldCh2YWx1ZUZpZWxkTmFtZSwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVRh
ZyhzaXplLCB0MSwgdDApCiAgICAgYmluZXEgdDAsIENlbGxUYWcsIC53cml0ZUJhcnJpZXJEb25l
CiAKLSAgICBsb2FkSGVscGVyKHQzKQorICAgIGxvYWRNYWNybyh0MykKIAogICAgIHNraXBJZklz
UmVtZW1iZXJlZE9ySW5FZGVuKAogICAgICAgICB0MywKQEAgLTU4MSwxNiArNTgxLDE2IEBAIG1h
Y3JvIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmEKIC53cml0ZUJhcnJpZXJEb25l
OgogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsT2JqZWN0KHNpemUsIGdldCwgdmFs
dWVPcGVyYW5kKQotICAgIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmFsdWVPcGVy
YW5kLAorbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qoc2l6ZSwgZ2V0LCB2YWx1ZUZp
ZWxkTmFtZSkKKyAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZhbHVlRmllbGRO
YW1lLAogICAgICAgICBtYWNybyhyZWdpc3RlclRvU3RvcmVHbG9iYWwpCiAgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2tbY2ZyXSwgcmVnaXN0ZXJUb1N0b3JlR2xvYmFsCiAgICAgICAgICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3JlZ2lzdGVyVG9TdG9yZUdsb2JhbF0sIHJl
Z2lzdGVyVG9TdG9yZUdsb2JhbAogICAgICAgICBlbmQpCiBlbmQKIAotbWFjcm8gd3JpdGVCYXJy
aWVyT25HbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoc2l6ZSwgZ2V0LCB2YWx1ZU9wZXJhbmQpCi0g
ICAgd3JpdGVCYXJyaWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2YWx1ZU9wZXJhbmQsCittYWNybyB3
cml0ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9ubWVudChzaXplLCBnZXQsIHZhbHVlRmll
bGROYW1lKQorICAgIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmFsdWVGaWVsZE5h
bWUsCiAgICAgICAgIG1hY3JvKHJlZ2lzdGVyVG9TdG9yZUdsb2JhbCkKICAgICAgICAgICAgIGxv
YWRwIENvZGVCbG9ja1tjZnJdLCByZWdpc3RlclRvU3RvcmVHbG9iYWwKICAgICAgICAgICAgIGxv
YWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbcmVnaXN0ZXJUb1N0b3JlR2xvYmFsXSwgcmVn
aXN0ZXJUb1N0b3JlR2xvYmFsCkBAIC01OTksOCArNTk5LDggQEAgbWFjcm8gd3JpdGVCYXJyaWVy
T25HbG9iYWxMZXhpY2FsRW52aXJvbgogZW5kCiAKIG1hY3JvIHZhbHVlUHJvZmlsZShvcCwgbWV0
YWRhdGEsIHRhZywgcGF5bG9hZCkKLSAgICBzdG9yZWkgdGFnLCAlb3AlOjpNZXRhZGF0YTo6cHJv
ZmlsZS5tX2J1Y2tldHMgKyBUYWdPZmZzZXRbbWV0YWRhdGFdCi0gICAgc3RvcmVpIHBheWxvYWQs
ICVvcCU6Ok1ldGFkYXRhOjpwcm9maWxlLm1fYnVja2V0cyArIFBheWxvYWRPZmZzZXRbbWV0YWRh
dGFdCisgICAgc3RvcmVpIHRhZywgJW9wJTo6TWV0YWRhdGE6Om1fcHJvZmlsZS5tX2J1Y2tldHMg
KyBUYWdPZmZzZXRbbWV0YWRhdGFdCisgICAgc3RvcmVpIHBheWxvYWQsICVvcCU6Ok1ldGFkYXRh
OjptX3Byb2ZpbGUubV9idWNrZXRzICsgUGF5bG9hZE9mZnNldFttZXRhZGF0YV0KIGVuZAogCiAK
QEAgLTcxMyw3ICs3MTMsNyBAQCBfbGxpbnRfb3BfZW50ZXI6CiAKIAogbGxpbnRPcFdpdGhQcm9m
aWxlKG9wX2dldF9hcmd1bWVudCwgT3BHZXRBcmd1bWVudCwgbWFjcm8gKHNpemUsIGdldCwgZGlz
cGF0Y2gsIHJldHVybikKLSAgICBnZXQoaW5kZXgsIHQyKQorICAgIGdldChtX2luZGV4LCB0MikK
ICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudFtjZnJdLCB0MAogICAgIGJp
bHRlcSB0MCwgdDIsIC5vcEdldEFyZ3VtZW50T3V0T2ZCb3VuZHMKICAgICBsb2FkaSBUaGlzQXJn
dW1lbnRPZmZzZXQgKyBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0sIHQwCkBAIC03NDAsMTIgKzc0MCwx
MiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF90b190aGlzLCBPcFRvVGhpcywg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgZ2V0KHNy
Y0RzdCwgdDApCisgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICBiaW5lcSBUYWdPZmZzZXRbY2Zy
LCB0MCwgOF0sIENlbGxUYWcsIC5vcFRvVGhpc1Nsb3cKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0
W2NmciwgdDAsIDhdLCB0MAogICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgRmluYWxPYmpl
Y3RUeXBlLCAub3BUb1RoaXNTbG93CiAgICAgbWV0YWRhdGEodDIsIHQzKQotICAgIGxvYWRwIE9w
VG9UaGlzOjpNZXRhZGF0YTo6Y2FjaGVkU3RydWN0dXJlW3QyXSwgdDIKKyAgICBsb2FkcCBPcFRv
VGhpczo6TWV0YWRhdGE6Om1fY2FjaGVkU3RydWN0dXJlW3QyXSwgdDIKICAgICBicG5lcSBKU0Nl
bGw6Om1fc3RydWN0dXJlSURbdDBdLCB0MiwgLm9wVG9UaGlzU2xvdwogICAgIGRpc3BhdGNoKCkK
IApAQCAtNzU2LDcgKzc1Niw3IEBAIGVuZCkKIAogCiBsbGludE9wKG9wX2NoZWNrX3RkeiwgT3BD
aGVja1RkeiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZ2V0KHRhcmdldCwgdDAp
CisgICAgZ2V0KG1fdGFyZ2V0LCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlVGFnKHNp
emUsIHQwLCB0MSkKICAgICBiaW5lcSB0MSwgRW1wdHlWYWx1ZVRhZywgLm9wTm90VERaCiAgICAg
Y2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfdGhyb3dfdGR6X2Vycm9yKQpAQCAtNzY3LDE0ICs3Njcs
MTQgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX21vdiwgT3BNb3YsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KHNyYywgdDEpCisgICAgZ2V0KG1f
c3JjLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MiwgdDMpCiAg
ICAgcmV0dXJuKHQyLCB0MykKIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9ub3QsIE9w
Tm90LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5k
LCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQwLCB0MiwgdDMpCiAgICAgYmluZXEgdDIsIEJvb2xlYW5UYWcsIC5vcE5vdFNsb3cK
ICAgICB4b3JpIDEsIHQzCkBAIC03ODgsOCArNzg4LDggQEAgZW5kKQogCiBtYWNybyBlcXVhbGl0
eUNvbXBhcmlzb25PcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmlzb24pCiAgICAgbGxpbnRPcFdp
dGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVy
bikKLSAgICAgICAgZ2V0KHJocywgdDIpCi0gICAgICAgIGdldChsaHMsIHQwKQorICAgICAgICBn
ZXQobV9yaHMsIHQyKQorICAgICAgICBnZXQobV9saHMsIHQwKQogICAgICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MywgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCB0MywgLm9wRXFT
bG93CkBAIC04MDcsOCArODA3LDggQEAgZW5kCiAKIG1hY3JvIGVxdWFsaXR5SnVtcE9wKG5hbWUs
IG9wLCBpbnRlZ2VyQ29tcGFyaXNvbikKICAgICBsbGludE9wV2l0aEp1bXAob3BfJW5hbWUlLCBv
cCwgbWFjcm8gKHNpemUsIGdldCwganVtcCwgZGlzcGF0Y2gpCi0gICAgICAgIGdldChyaHMsIHQy
KQotICAgICAgICBnZXQobGhzLCB0MCkKKyAgICAgICAgZ2V0KG1fcmhzLCB0MikKKyAgICAgICAg
Z2V0KG1fbGhzLCB0MCkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0Miwg
dDMsIHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIs
IHQwKQogICAgICAgICBiaW5lcSB0MiwgdDMsIC5zbG93CkBAIC04MTgsNyArODE4LDcgQEAgbWFj
cm8gZXF1YWxpdHlKdW1wT3AobmFtZSwgb3AsIGludGVnZXJDbwogICAgICAgICBkaXNwYXRjaCgp
CiAKICAgICAuanVtcFRhcmdldDoKLSAgICAgICAganVtcCh0YXJnZXQpCisgICAgICAgIGp1bXAo
bV90YXJnZXQpCiAKICAgICAuc2xvdzoKICAgICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfJW5hbWUlKQpAQCAtODI5LDcgKzgyOSw3IEBAIGVuZAogCiBtYWNybyBlcXVhbE51bGxD
b21wYXJpc29uT3AobmFtZSwgb3AsIGZuKQogICAgIGxsaW50T3BXaXRoUmV0dXJuKG5hbWUsIG9w
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgICAgICBnZXQob3BlcmFu
ZCwgdDApCisgICAgICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgICAgICBhc3NlcnROb3RDb25z
dGFudChzaXplLCB0MCkKICAgICAgICAgbG9hZGkgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCB0MQog
ICAgICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MApAQCAtODYwLDcgKzg2
MCw3IEBAIGVxdWFsTnVsbENvbXBhcmlzb25PcChvcF9uZXFfbnVsbCwgT3BOZXEKIAogCiBsbGlu
dE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWRfb3JfbnVsbCwgT3BJc1VuZGVmaW5lZE9yTnVs
bCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQob3BlcmFuZCwg
dDApCisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgYXNzZXJ0Tm90Q29uc3RhbnQoc2l6ZSwg
dDApCiAgICAgbG9hZGkgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCB0MQogICAgIG9yaSAxLCB0MQpA
QCAtODcxLDggKzg3MSw4IEBAIGVuZCkKIAogbWFjcm8gc3RyaWN0RXFPcChuYW1lLCBvcCwgZXF1
YWxpdHlPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KHJocywgdDIpCi0g
ICAgICAgIGdldChsaHMsIHQwKQorICAgICAgICBnZXQobV9yaHMsIHQyKQorICAgICAgICBnZXQo
bV9saHMsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0Mywg
dDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDAp
CiAgICAgICAgIGJpbmVxIHQyLCB0MywgLnNsb3cKQEAgLTg5Myw4ICs4OTMsOCBAQCBlbmQKIAog
bWFjcm8gc3RyaWN0RXF1YWxpdHlKdW1wT3AobmFtZSwgb3AsIGVxdWFsaXR5T3BlcmF0aW9uKQog
ICAgIGxsaW50T3BXaXRoSnVtcChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1w
LCBkaXNwYXRjaCkKLSAgICAgICAgZ2V0KHJocywgdDIpCi0gICAgICAgIGdldChsaHMsIHQwKQor
ICAgICAgICBnZXQobV9yaHMsIHQyKQorICAgICAgICBnZXQobV9saHMsIHQwKQogICAgICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MywgdDEpCiAgICAgICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCB0
MywgLnNsb3cKQEAgLTkwNyw3ICs5MDcsNyBAQCBtYWNybyBzdHJpY3RFcXVhbGl0eUp1bXBPcChu
YW1lLCBvcCwgZXF1CiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAg
ICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKIAogICAgIC5zbG93Ogog
ICAgICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC05MzQsNyAr
OTM0LDcgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNy
byBwcmVPcChuYW1lLCBvcCwgb3BlcmF0aW9uKQogICAgIGxsaW50T3Aob3BfJW5hbWUlLCBvcCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgICAgIGdldChzcmNEc3QsIHQwKQorICAg
ICAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgICAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwg
OF0sIEludDMyVGFnLCAuc2xvdwogICAgICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAs
IDhdLCB0MQogICAgICAgICBvcGVyYXRpb24odDEsIC5zbG93KQpAQCAtOTQ5LDcgKzk0OSw3IEBA
IGVuZAogCiAKIGxsaW50T3BXaXRoUHJvZmlsZShvcF90b19udW1iZXIsIE9wVG9OdW1iZXIsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQwKQor
ICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDAsIHQyLCB0MykKICAgICBiaWVxIHQyLCBJbnQzMlRhZywgLm9wVG9OdW1iZXJJc0ludAogICAg
IGJpYWVxIHQyLCBMb3dlc3RUYWcsIC5vcFRvTnVtYmVyU2xvdwpAQCAtOTYzLDcgKzk2Myw3IEBA
IGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF90b19zdHJpbmcsIE9wVG9TdHJpbmcsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQwKQor
ICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwg
dDAsIHQyLCB0MykKICAgICBiaW5lcSB0MiwgQ2VsbFRhZywgLm9wVG9TdHJpbmdTbG93CiAgICAg
YmJuZXEgSlNDZWxsOjptX3R5cGVbdDNdLCBTdHJpbmdUeXBlLCAub3BUb1N0cmluZ1Nsb3cKQEAg
LTk3Nyw3ICs5NzcsNyBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhQcm9maWxlKG9wX3RvX29iamVj
dCwgT3BUb09iamVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBn
ZXQob3BlcmFuZCwgdDApCisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZShzaXplLCB0MCwgdDIsIHQzKQogICAgIGJpbmVxIHQyLCBDZWxsVGFnLCAub3BU
b09iamVjdFNsb3cKICAgICBiYmIgSlNDZWxsOjptX3R5cGVbdDNdLCBPYmplY3RUeXBlLCAub3BU
b09iamVjdFNsb3cKQEAgLTk5MiwxMSArOTkyLDExIEBAIGVuZCkKIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfbmVnYXRlLCBPcE5lZ2F0ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCiAKICAgICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgb3Jp
IHR5cGUsIE9wTmVnYXRlOjpNZXRhZGF0YTo6YXJpdGhQcm9maWxlW3Q1XQorICAgICAgICBvcmkg
dHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVt0NV0KICAgICBlbmQKIAog
ICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBnZXQob3BlcmFuZCwgdDApCisgICAgZ2V0KG1fb3Bl
cmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEsIHQyKQog
ICAgIGJpbmVxIHQxLCBJbnQzMlRhZywgLm9wTmVnYXRlU3JjTm90SW50CiAgICAgYnRpeiB0Miwg
MHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwpAQCAtMTAxOCwxOCArMTAxOCwxOCBAQCBlbmQpCiBt
YWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG5hbWUsIG9wLCBpbnRlZ2VyT3BlcmF0aW9uQW5kU3Rv
cmUsIGRvdWJsZU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG9wXyVuYW1lJSwg
b3AsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAg
ICBtYWNybyBhcml0aFByb2ZpbGUodHlwZSkKLSAgICAgICAgICAgIG9yaSB0eXBlLCAlb3AlOjpN
ZXRhZGF0YTo6YXJpdGhQcm9maWxlW3Q1XQorICAgICAgICAgICAgb3JpIHR5cGUsICVvcCU6Ok1l
dGFkYXRhOjptX2FyaXRoUHJvZmlsZVt0NV0KICAgICAgICAgZW5kCiAKICAgICAgICAgbWV0YWRh
dGEodDUsIHQyKQotICAgICAgICBnZXQocmhzLCB0MikKLSAgICAgICAgZ2V0KGxocywgdDApCisg
ICAgICAgIGdldChtX3JocywgdDIpCisgICAgICAgIGdldChtX2xocywgdDApCiAgICAgICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQzLCB0MSkKICAgICAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIElu
dDMyVGFnLCAub3AxTm90SW50CiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLm9wMk5vdElu
dAogICAgICAgICBhcml0aFByb2ZpbGUoQXJpdGhQcm9maWxlSW50SW50KQotICAgICAgICBnZXQo
ZHN0LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgaW50ZWdlck9wZXJhdGlv
bkFuZFN0b3JlKHQzLCB0MSwgdDAsIC5zbG93LCB0MikKICAgICAgICAgZGlzcGF0Y2goKQogCkBA
IC0xMDQ1LDcgKzEwNDUsNyBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG5hbWUsIG9wLCBp
bnRlCiAgICAgICAgIGZpaTJkIHQxLCB0MywgZnQxCiAgICAgICAgIGFyaXRoUHJvZmlsZShBcml0
aFByb2ZpbGVOdW1iZXJOdW1iZXIpCiAgICAgLm9wMU5vdEludFJlYWR5OgotICAgICAgICBnZXQo
ZHN0LCB0MSkKKyAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgZmlpMmQgdDAsIHQyLCBm
dDAKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQogICAgICAgICBzdG9yZWQgZnQw
LCBbY2ZyLCB0MSwgOF0KQEAgLTEwNTMsNyArMTA1Myw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9t
U3RvcmUobmFtZSwgb3AsIGludGUKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qg
b3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBvcGVyYW5kIGlzIGRlZmlu
aXRlbHkgbm90LgotICAgICAgICBnZXQoZHN0LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikK
ICAgICAgICAgYmlhIHQzLCBMb3dlc3RUYWcsIC5zbG93CiAgICAgICAgIGFyaXRoUHJvZmlsZShB
cml0aFByb2ZpbGVJbnROdW1iZXIpCiAgICAgICAgIGNpMmQgdDAsIGZ0MApAQCAtMTEyMCw3ICsx
MTIwLDcgQEAgYmluYXJ5T3BDdXN0b21TdG9yZShkaXYsIE9wRGl2LAogCiAKIGxsaW50T3BXaXRo
UmV0dXJuKG9wX3Vuc2lnbmVkLCBPcFVuc2lnbmVkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MSkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkK
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXplLCB0MSwgSW50MzJUYWcsIHQy
LCAub3BVbnNpZ25lZFNsb3cpCiAgICAgYmlsdCB0MiwgMCwgLm9wVW5zaWduZWRTbG93CiAgICAg
cmV0dXJuIChJbnQzMlRhZywgdDIpCkBAIC0xMTMyLDggKzExMzIsOCBAQCBlbmQpCiAKIG1hY3Jv
IGNvbW1vbkJpdE9wKG9wS2luZCwgbmFtZSwgb3AsIG9wZXJhdGlvbikKICAgICBvcEtpbmQob3Bf
JW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAg
Z2V0KHJocywgdDIpCi0gICAgICAgIGdldChsaHMsIHQwKQorICAgICAgICBnZXQobV9yaHMsIHQy
KQorICAgICAgICBnZXQobV9saHMsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQyLCB0MywgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNp
emUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQzLCBJbnQzMlRhZywgLnNsb3cKQEAgLTEx
NzcsNyArMTE3Nyw3IEBAIGJpdE9wUHJvZmlsZWQoYml0b3IsIE9wQml0b3IsCiAgICAgbWFjcm8g
KGxlZnQsIHJpZ2h0KSBvcmkgbGVmdCwgcmlnaHQgZW5kKQogCiBsbGludE9wV2l0aFByb2ZpbGUo
b3BfYml0bm90LCBPcEJpdG5vdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikK
LSAgICBnZXQob3BlcmFuZCwgdDApCisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDIsIHQzKQogICAgIGJpbmVxIHQyLCBJbnQzMlRh
ZywgLm9wQml0Tm90U2xvdwogICAgIG5vdGkgdDMKQEAgLTExODksMTEgKzExODksMTEgQEAgbGxp
bnRPcFdpdGhQcm9maWxlKG9wX2JpdG5vdCwgT3BCaXRub3QsIAogZW5kKQogCiBsbGludE9wKG9w
X292ZXJyaWRlc19oYXNfaW5zdGFuY2UsIE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoKQotICAgIGdldChkc3QsIHQzKQorICAgIGdldChtX2RzdCwgdDMp
CiAgICAgc3RvcmVpIEJvb2xlYW5UYWcsIFRhZ09mZnNldFtjZnIsIHQzLCA4XQogCiAgICAgIyBG
aXJzdCBjaGVjayBpZiBoYXNJbnN0YW5jZVZhbHVlIGlzIHRoZSBvbmUgb24gRnVuY3Rpb24ucHJv
dG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0KLSAgICBnZXQoaGFzSW5zdGFuY2VWYWx1ZSwgdDAp
CisgICAgZ2V0KG1faGFzSW5zdGFuY2VWYWx1ZSwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQyLCAub3BPdmVycmlkZXNoYXNJbnN0YW5j
ZVZhbHVlTm90Q2VsbCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwg
dDIpCiAgICAgYmluZXEgdDEsIENlbGxUYWcsIC5vcE92ZXJyaWRlc2hhc0luc3RhbmNlVmFsdWVO
b3RDZWxsCkBAIC0xMjA1LDcgKzEyMDUsNyBAQCBsbGludE9wKG9wX292ZXJyaWRlc19oYXNfaW5z
dGFuY2UsIE9wT3ZlCiAgICAgYmluZXEgdDEsIHQyLCAub3BPdmVycmlkZXNoYXNJbnN0YW5jZVZh
bHVlTm90RGVmYXVsdAogCiAgICAgIyBXZSBrbm93IHRoZSBjb25zdHJ1Y3RvciBpcyBhIGNlbGwu
Ci0gICAgZ2V0KGNvbnN0cnVjdG9yLCB0MCkKKyAgICBnZXQobV9jb25zdHJ1Y3RvciwgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWRVbmNoZWNrZWQoc2l6ZSwgdDAsIHQxKQog
ICAgIHRieiBKU0NlbGw6Om1fZmxhZ3NbdDFdLCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
LCB0MAogICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XQpAQCAtMTIxOSw3
ICsxMjE5LDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX2VtcHR5LCBPcElz
RW1wdHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJh
bmQsIHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDEsIHQyLCB0MykKICAgICBjaWVxIHQyLCBFbXB0eVZhbHVlVGFnLCB0MwogICAg
IHJldHVybihCb29sZWFuVGFnLCB0MykKQEAgLTEyMjcsNyArMTIyNyw3IEBAIGVuZCkKIAogCiBs
bGludE9wV2l0aFJldHVybihvcF9pc191bmRlZmluZWQsIE9wSXNVbmRlZmluZWQsIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdl
dChtX29wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQy
LCB0MykKICAgICBiaWVxIHQyLCBDZWxsVGFnLCAub3BJc1VuZGVmaW5lZENlbGwKICAgICBjaWVx
IHQyLCBVbmRlZmluZWRUYWcsIHQzCkBAIC0xMjQ1LDcgKzEyNDUsNyBAQCBlbmQpCiAKIAogbGxp
bnRPcFdpdGhSZXR1cm4ob3BfaXNfYm9vbGVhbiwgT3BJc0Jvb2xlYW4sIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29w
ZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVUYWcoc2l6ZSwgdDEsIHQwKQog
ICAgIGNpZXEgdDAsIEJvb2xlYW5UYWcsIHQwCiAgICAgcmV0dXJuKEJvb2xlYW5UYWcsIHQwKQpA
QCAtMTI1Myw3ICsxMjUzLDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX251
bWJlciwgT3BJc051bWJlciwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAg
ICBnZXQob3BlcmFuZCwgdDEpCisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZVRhZyhzaXplLCB0MSwgdDApCiAgICAgYWRkaSAxLCB0MAogICAgIGNpYiB0
MCwgTG93ZXN0VGFnICsgMSwgdDEKQEAgLTEyNjIsMTAgKzEyNjIsMTAgQEAgZW5kKQogCiAKIGxs
aW50T3BXaXRoUmV0dXJuKG9wX2lzX2NlbGxfd2l0aF90eXBlLCBPcElzQ2VsbFdpdGhUeXBlLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MSkK
KyAgICBnZXQobV9vcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQxLCB0MCwgdDMpCiAgICAgYmluZXEgdDAsIENlbGxUYWcsIC5ub3RDZWxsQ2FzZQotICAgIGdl
dHUoc2l6ZSwgT3BJc0NlbGxXaXRoVHlwZSwgdHlwZSwgdDApCisgICAgZ2V0dShzaXplLCBPcElz
Q2VsbFdpdGhUeXBlLCBtX3R5cGUsIHQwKQogICAgIGNiZXEgSlNDZWxsOjptX3R5cGVbdDNdLCB0
MCwgdDEKICAgICByZXR1cm4oQm9vbGVhblRhZywgdDEpCiAubm90Q2VsbENhc2U6CkBAIC0xMjc0
LDcgKzEyNzQsNyBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfb2JqZWN0LCBP
cElzT2JqZWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChv
cGVyYW5kLCB0MSkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQxLCB0MCwgdDMpCiAgICAgYmluZXEgdDAsIENlbGxUYWcsIC5vcElzT2Jq
ZWN0Tm90Q2VsbAogICAgIGNiYWVxIEpTQ2VsbDo6bV90eXBlW3QzXSwgT2JqZWN0VHlwZSwgdDEK
QEAgLTEzMjcsMTAgKzEzMjcsMTAgQEAgZW5kCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0
X2J5X2lkX2RpcmVjdCwgT3BHZXRCeUlkRGlyZWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgbWV0YWRhdGEsIHJldHVybikKICAgICBtZXRhZGF0YSh0NSwgdDApCi0gICAgZ2V0KGJhc2Us
IHQwKQotICAgIGxvYWRpIE9wR2V0QnlJZERpcmVjdDo6TWV0YWRhdGE6OnN0cnVjdHVyZVt0NV0s
IHQxCisgICAgZ2V0KG1fYmFzZSwgdDApCisgICAgbG9hZGkgT3BHZXRCeUlkRGlyZWN0OjpNZXRh
ZGF0YTo6bV9zdHJ1Y3R1cmVbdDVdLCB0MQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXls
b2FkKHNpemUsIHQwLCBDZWxsVGFnLCB0MywgLm9wR2V0QnlJZERpcmVjdFNsb3cpCi0gICAgbG9h
ZGkgT3BHZXRCeUlkRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0W3Q1XSwgdDIKKyAgICBsb2FkaSBP
cEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjptX29mZnNldFt0NV0sIHQyCiAgICAgYmluZXEgSlND
ZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgdDEsIC5vcEdldEJ5SWREaXJlY3RTbG93CiAgICAgbG9h
ZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MiwgdDMsIHQwLCB0MSkKICAgICB2YWx1ZVByb2Zp
bGUoT3BHZXRCeUlkRGlyZWN0LCB0NSwgdDAsIHQxKQpAQCAtMTM0NCwxNiArMTM0NCwxNiBAQCBl
bmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEJ5SWQsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIG1ldGFkYXRhKHQ1
LCB0MCkKLSAgICBsb2FkYiBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlW3Q1XSwgdDEKLSAgICBn
ZXQoYmFzZSwgdDApCisgICAgbG9hZGIgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlW3Q1XSwg
dDEKKyAgICBnZXQobV9iYXNlLCB0MCkKIAogLm9wR2V0QnlJZFByb3RvTG9hZDoKICAgICBiYm5l
cSB0MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpQcm90b0xvYWQsIC5vcEdldEJ5SWRBcnJheUxl
bmd0aAotICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5wcm90b0xv
YWRNb2RlLnN0cnVjdHVyZVt0NV0sIHQxCisgICAgbG9hZGkgT3BHZXRCeUlkOjpNZXRhZGF0YTo6
bV9tb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5zdHJ1Y3R1cmVbdDVdLCB0MQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNpemUsIHQwLCBDZWxsVGFnLCB0MywgLm9wR2V0QnlJ
ZFNsb3cpCi0gICAgbG9hZGlzIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5wcm90
b0xvYWRNb2RlLmNhY2hlZE9mZnNldFt0NV0sIHQyCisgICAgbG9hZGlzIE9wR2V0QnlJZDo6TWV0
YWRhdGE6Om1fbW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkT2Zmc2V0W3Q1XSwgdDIK
ICAgICBiaW5lcSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDNdLCB0MSwgLm9wR2V0QnlJZFNsb3cK
LSAgICBsb2FkcCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9k
ZS5jYWNoZWRTbG90W3Q1XSwgdDMKKyAgICBsb2FkcCBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21v
ZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLmNhY2hlZFNsb3RbdDVdLCB0MwogICAgIGxvYWRQcm9w
ZXJ0eUF0VmFyaWFibGVPZmZzZXQodDIsIHQzLCB0MCwgdDEpCiAgICAgdmFsdWVQcm9maWxlKE9w
R2V0QnlJZCwgdDUsIHQwLCB0MSkKICAgICByZXR1cm4odDAsIHQxKQpAQCAtMTM2Miw3ICsxMzYy
LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QgogICAgIGJibmVx
IHQxLCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoLCAub3BHZXRCeUlkVW5zZXQK
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXplLCB0MCwgQ2VsbFRhZywgdDMs
IC5vcEdldEJ5SWRTbG93KQogICAgIG1vdmUgdDMsIHQyCi0gICAgYXJyYXlQcm9maWxlKE9wR2V0
QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxl
LCB0MiwgdDUsIHQwKQorICAgIGFycmF5UHJvZmlsZShPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21v
ZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLCB0MiwgdDUsIHQwKQogICAg
IGJ0aXogdDIsIElzQXJyYXksIC5vcEdldEJ5SWRTbG93CiAgICAgYnRpeiB0MiwgSW5kZXhpbmdT
aGFwZU1hc2ssIC5vcEdldEJ5SWRTbG93CiAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5
W3QzXSwgdDAKQEAgLTEzNzMsMTYgKzEzNzMsMTYgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9n
ZXRfYnlfaWQsIE9wR2V0QgogCiAub3BHZXRCeUlkVW5zZXQ6CiAgICAgYmJuZXEgdDEsIGNvbnN0
ZXhwciBHZXRCeUlkTW9kZTo6VW5zZXQsIC5vcEdldEJ5SWREZWZhdWx0Ci0gICAgbG9hZGkgT3BH
ZXRCeUlkOjpNZXRhZGF0YTo6bW9kZU1ldGFkYXRhLnVuc2V0TW9kZS5zdHJ1Y3R1cmVbdDVdLCB0
MQorICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fbW9kZU1ldGFkYXRhLnVuc2V0TW9k
ZS5zdHJ1Y3R1cmVbdDVdLCB0MQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNp
emUsIHQwLCBDZWxsVGFnLCB0MywgLm9wR2V0QnlJZFNsb3cpCiAgICAgYmluZXEgSlNDZWxsOjpt
X3N0cnVjdHVyZUlEW3QzXSwgdDEsIC5vcEdldEJ5SWRTbG93CiAgICAgdmFsdWVQcm9maWxlKE9w
R2V0QnlJZCwgdDUsIFVuZGVmaW5lZFRhZywgMCkKICAgICByZXR1cm4oVW5kZWZpbmVkVGFnLCAw
KQogCiAub3BHZXRCeUlkRGVmYXVsdDoKLSAgICBsb2FkaSBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjpt
b2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlW3Q1XSwgdDEKKyAgICBsb2FkaSBPcEdl
dEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmVbdDVd
LCB0MQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNpemUsIHQwLCBDZWxsVGFn
LCB0MywgLm9wR2V0QnlJZFNsb3cpCi0gICAgbG9hZGlzIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1v
ZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5jYWNoZWRPZmZzZXRbdDVdLCB0MgorICAgIGxvYWRpcyBP
cEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5jYWNoZWRPZmZz
ZXRbdDVdLCB0MgogICAgIGJpbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIHQxLCAub3BH
ZXRCeUlkU2xvdwogICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDIsIHQzLCB0MCwg
dDEpCiAgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgdDUsIHQwLCB0MSkKQEAgLTEzOTUsMTIg
KzEzOTUsMTIgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0X2J5X2lkLCBP
cFB1dEJ5SWQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQot
ICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBiYXNlLCB2YWx1ZSkKKyAgICB3
cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9iYXNlLCBtX3ZhbHVlKQogICAgIG1l
dGFkYXRhKHQ1LCB0MykKLSAgICBnZXQoYmFzZSwgdDMpCisgICAgZ2V0KG1fYmFzZSwgdDMpCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDMsIENlbGxUYWcsIHQwLCAu
b3BQdXRCeUlkU2xvdykKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDBdLCB0Mgot
ICAgIGJpbmVxIHQyLCBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpvbGRTdHJ1Y3R1cmVbdDVdLCAub3BQ
dXRCeUlkU2xvdworICAgIGJpbmVxIHQyLCBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjptX29sZFN0cnVj
dHVyZVt0NV0sIC5vcFB1dEJ5SWRTbG93CiAKICAgICAjIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmU6
CiAgICAgIyB0NSAtPiBtZXRhZGF0YQpAQCAtMTQwOCw5ICsxNDA4LDkgQEAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9wdXRfYnlfaWQsIE9wUHV0QgogICAgICMgdDAgLT4gb2JqZWN0IGJhc2UKICAg
ICAjIFdlIHdpbGwgbG9zZSBjdXJyZW50U3RydWN0dXJlSUQgaW4gdGhlIHNoZW5hbmlnYW5zIGJl
bG93LgogCi0gICAgZ2V0KHZhbHVlLCB0MSkKKyAgICBnZXQobV92YWx1ZSwgdDEpCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIsIHQzKQotICAgIGxvYWRpIE9wUHV0QnlJ
ZDo6TWV0YWRhdGE6OmZsYWdzW3Q1XSwgdDEKKyAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRh
OjptX2ZsYWdzW3Q1XSwgdDEKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKICAgICAj
IHQwIC0+IG9iamVjdCBiYXNlCkBAIC0xNDg1LDE2ICsxNDg1LDE2IEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKIAogLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5cGVz
OgotICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om5ld1N0cnVjdHVyZVt0NV0sIHQxCisg
ICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bV9uZXdTdHJ1Y3R1cmVbdDVdLCB0MQogCiAg
ICAgYnRpeiB0MSwgLm9wUHV0QnlJZE5vdFRyYW5zaXRpb24KIAogICAgICMgVGhpcyBpcyB0aGUg
dHJhbnNpdGlvbiBjYXNlLiB0MSBob2xkcyB0aGUgbmV3IFN0cnVjdHVyZSouIElmIHdlIGhhdmUg
YSBjaGFpbiwgd2UgbmVlZCB0bwogICAgICMgY2hlY2sgaXQuIHQwIGlzIHRoZSBiYXNlLiBXZSBt
YXkgY2xvYmJlciB0MSB0byB1c2UgaXQgYXMgc2NyYXRjaC4KLSAgICBsb2FkcCBPcFB1dEJ5SWQ6
Ok1ldGFkYXRhOjpzdHJ1Y3R1cmVDaGFpblt0NV0sIHQzCisgICAgbG9hZHAgT3BQdXRCeUlkOjpN
ZXRhZGF0YTo6bV9zdHJ1Y3R1cmVDaGFpblt0NV0sIHQzCiAgICAgYnRweiB0MywgLm9wUHV0QnlJ
ZFRyYW5zaXRpb25EaXJlY3QKIAotICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om9sZFN0
cnVjdHVyZVt0NV0sIHQyICMgTmVlZCBvbGQgc3RydWN0dXJlIGFnYWluLgorICAgIGxvYWRpIE9w
UHV0QnlJZDo6TWV0YWRhdGE6Om1fb2xkU3RydWN0dXJlW3Q1XSwgdDIgIyBOZWVkIG9sZCBzdHJ1
Y3R1cmUgYWdhaW4uCiAgICAgbG9hZHAgU3RydWN0dXJlQ2hhaW46Om1fdmVjdG9yW3QzXSwgdDMK
ICAgICBhc3NlcnQobWFjcm8gKG9rKSBidHBueiB0Mywgb2sgZW5kKQogCkBAIC0xNTA4LDIyICsx
NTA4LDIyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICBi
dHBueiB0MiwgLm9wUHV0QnlJZFRyYW5zaXRpb25DaGFpbkxvb3AKIAogLm9wUHV0QnlJZFRyYW5z
aXRpb25DaGFpbkRvbmU6Ci0gICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bmV3U3RydWN0
dXJlW3Q1XSwgdDEKKyAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjptX25ld1N0cnVjdHVy
ZVt0NV0sIHQxCiAKIC5vcFB1dEJ5SWRUcmFuc2l0aW9uRGlyZWN0OgogICAgIHN0b3JlaSB0MSwg
SlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXQotICAgIGdldCh2YWx1ZSwgdDEpCisgICAgZ2V0KG1f
dmFsdWUsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyLCB0MykK
LSAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRbdDVdLCB0MQorICAgIGxvYWRp
IE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1fb2Zmc2V0W3Q1XSwgdDEKICAgICBzdG9yZVByb3BlcnR5
QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0MykKLSAgICB3cml0ZUJhcnJpZXJPbk9wZXJh
bmQoc2l6ZSwgZ2V0LCBiYXNlKQorICAgIHdyaXRlQmFycmllck9uT3BlcmFuZChzaXplLCBnZXQs
IG1fYmFzZSkKICAgICBkaXNwYXRjaCgpCiAKIC5vcFB1dEJ5SWROb3RUcmFuc2l0aW9uOgogICAg
ICMgVGhlIG9ubHkgdGhpbmcgbGl2ZSByaWdodCBub3cgaXMgdDAsIHdoaWNoIGhvbGRzIHRoZSBi
YXNlLgotICAgIGdldCh2YWx1ZSwgdDEpCisgICAgZ2V0KG1fdmFsdWUsIHQxKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyLCB0MykKLSAgICBsb2FkaSBPcFB1dEJ5SWQ6
Ok1ldGFkYXRhOjpvZmZzZXRbdDVdLCB0MQorICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6
Om1fb2Zmc2V0W3Q1XSwgdDEKICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwg
dDAsIHQyLCB0MykKICAgICBkaXNwYXRjaCgpCiAKQEAgLTE1MzUsMTEgKzE1MzUsMTEgQEAgZW5k
KQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0QnlWYWwsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIG1ldGFkYXRhKHQ1
LCB0MikKLSAgICBnZXQoYmFzZSwgdDIpCisgICAgZ2V0KG1fYmFzZSwgdDIpCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDIsIENlbGxUYWcsIHQwLCAub3BHZXRCeVZh
bFNsb3cpCiAgICAgbW92ZSB0MCwgdDIKLSAgICBhcnJheVByb2ZpbGUoT3BHZXRCeVZhbDo6TWV0
YWRhdGE6OmFycmF5UHJvZmlsZSwgdDIsIHQ1LCB0MSkKLSAgICBnZXQocHJvcGVydHksIHQzKQor
ICAgIGFycmF5UHJvZmlsZShPcEdldEJ5VmFsOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIHQy
LCB0NSwgdDEpCisgICAgZ2V0KG1fcHJvcGVydHksIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGVQYXlsb2FkKHNpemUsIHQzLCBJbnQzMlRhZywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAg
ICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbdDBdLCB0MwogICAgIGFuZGkgSW5kZXhpbmdT
aGFwZU1hc2ssIHQyCkBAIC0xNTU5LDcgKzE1NTksNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X2dldF9ieV92YWwsIE9wR2V0CiAgICAgYmRuZXF1biBmdDAsIGZ0MCwgLm9wR2V0QnlWYWxTbG93
CiAgICAgIyBGSVhNRTogVGhpcyBjb3VsZCBiZSBtYXNzaXZlbHkgb3B0aW1pemVkLgogICAgIGZk
MmlpIGZ0MCwgdDEsIHQyCi0gICAgZ2V0KGRzdCwgdDApCisgICAgZ2V0KG1fZHN0LCB0MCkKICAg
ICBqbXAgLm9wR2V0QnlWYWxOb3RFbXB0eQogCiAub3BHZXRCeVZhbE5vdERvdWJsZToKQEAgLTE1
NzAsNyArMTU3MCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQK
ICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgUGF5bG9hZE9mZnNldFt0MywgdDEs
IDhdLCB0MQogCiAub3BHZXRCeVZhbERvbmU6Ci0gICAgZ2V0KGRzdCwgdDApCisgICAgZ2V0KG1f
ZHN0LCB0MCkKICAgICBiaWVxIHQyLCBFbXB0eVZhbHVlVGFnLCAub3BHZXRCeVZhbFNsb3cKIC5v
cEdldEJ5VmFsTm90RW1wdHk6CiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0K
QEAgLTE1ODksMjUgKzE1ODksMjUgQEAgbWFjcm8gcHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAg
ICAgbWFjcm8gY29udGlndW91c1B1dEJ5VmFsKHN0b3JlQ2FsbGJhY2spCiAgICAgICAgICAgICBi
aWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0
aHMucHVibGljTGVuZ3RoW3QwXSwgLm91dE9mQm91bmRzCiAgICAgICAgIC5zdG9yZVJlc3VsdDoK
LSAgICAgICAgICAgIGdldCh2YWx1ZSwgdDIpCisgICAgICAgICAgICBnZXQobV92YWx1ZSwgdDIp
CiAgICAgICAgICAgICBzdG9yZUNhbGxiYWNrKHQyLCB0MSwgdDAsIHQzKQogICAgICAgICAgICAg
ZGlzcGF0Y2goKQogCiAgICAgICAgIC5vdXRPZkJvdW5kczoKICAgICAgICAgICAgIGJpYWVxIHQz
LCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy52ZWN0
b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbE91dE9mQm91bmRzCi0gICAgICAgICAgICBzdG9yZWIg
MSwgJW9wJTo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQorICAg
ICAgICAgICAgc3RvcmViIDEsICVvcCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX21heVN0
b3JlVG9Ib2xlW3Q1XQogICAgICAgICAgICAgYWRkaSAxLCB0MywgdDIKICAgICAgICAgICAgIHN0
b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0
aHMucHVibGljTGVuZ3RoW3QwXQogICAgICAgICAgICAgam1wIC5zdG9yZVJlc3VsdAogICAgICAg
ICBlbmQKIAotICAgICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwg
dmFsdWUpCisgICAgICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX2Jhc2Us
IG1fdmFsdWUpCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICAgICAgZ2V0KGJhc2UsIHQw
KQorICAgICAgICBnZXQobV9iYXNlLCB0MCkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQxLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgICAg
IG1vdmUgdDEsIHQyCi0gICAgICAgIGFycmF5UHJvZmlsZSglb3AlOjpNZXRhZGF0YTo6YXJyYXlQ
cm9maWxlLCB0MiwgdDUsIHQwKQotICAgICAgICBnZXQocHJvcGVydHksIHQwKQorICAgICAgICBh
cnJheVByb2ZpbGUoJW9wJTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLCB0MiwgdDUsIHQwKQor
ICAgICAgICBnZXQobV9wcm9wZXJ0eSwgdDApCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGVQYXlsb2FkKHNpemUsIHQwLCBJbnQzMlRhZywgdDMsIC5vcFB1dEJ5VmFsU2xvdykKICAgICAg
ICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAKICAgICAgICAgYnRpbnogdDIs
IENvcHlPbldyaXRlLCAub3BQdXRCeVZhbFNsb3cKQEAgLTE2NTMsMTQgKzE2NTMsMTQgQEAgbWFj
cm8gcHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhp
bmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnZlY3Rvckxlbmd0aFt0MF0sIC5v
cFB1dEJ5VmFsT3V0T2ZCb3VuZHMKICAgICAgICAgYmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9y
ICsgVGFnT2Zmc2V0W3QwLCB0MywgOF0sIEVtcHR5VmFsdWVUYWcsIC5vcFB1dEJ5VmFsQXJyYXlT
dG9yYWdlRW1wdHkKICAgICAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0OgotICAg
ICAgICBnZXQodmFsdWUsIHQyKQorICAgICAgICBnZXQobV92YWx1ZSwgdDIpCiAgICAgICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQyLCB0MSwgdDIpCiAgICAgICAgIHN0b3Jl
aSB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFRhZ09mZnNldFt0MCwgdDMsIDhdCiAgICAg
ICAgIHN0b3JlaSB0MiwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciArIFBheWxvYWRPZmZzZXRbdDAs
IHQzLCA4XQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAub3BQdXRCeVZhbEFycmF5U3RvcmFn
ZUVtcHR5OgotICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZS5t
X21heVN0b3JlVG9Ib2xlW3Q1XQorICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6Om1f
YXJyYXlQcm9maWxlLm1fbWF5U3RvcmVUb0hvbGVbdDVdCiAgICAgICAgIGFkZGkgMSwgQXJyYXlT
dG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3QwXQogICAgICAgICBiaWIgdDMsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0
MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKICAgICAgICAgYWRkaSAxLCB0
MywgdDEKQEAgLTE2NjgsNyArMTY2OCw3IEBAIG1hY3JvIHB1dEJ5VmFsT3AobmFtZSwgb3ApCiAg
ICAgICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAKICAgICAub3BQ
dXRCeVZhbE91dE9mQm91bmRzOgotICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6OmFy
cmF5UHJvZmlsZS5tX291dE9mQm91bmRzW3Q1XQorICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0
YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fb3V0T2ZCb3VuZHNbdDVdCiAgICAgLm9wUHV0QnlWYWxT
bG93OgogICAgICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF8lbmFtZSUpCiAgICAg
ICAgIGRpc3BhdGNoKCkKQEAgLTE2ODMsMTMgKzE2ODMsMTMgQEAgcHV0QnlWYWxPcChwdXRfYnlf
dmFsX2RpcmVjdCwgT3BQdXRCeVZhbAogCiBtYWNybyBsbGludEp1bXBUcnVlT3JGYWxzZU9wKG5h
bWUsIG9wLCBjb25kaXRpb25PcCkKICAgICBsbGludE9wV2l0aEp1bXAob3BfJW5hbWUlLCBvcCwg
bWFjcm8gKHNpemUsIGdldCwganVtcCwgZGlzcGF0Y2gpCi0gICAgICAgIGdldChjb25kaXRpb24s
IHQxKQorICAgICAgICBnZXQobV9jb25kaXRpb24sIHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlUGF5bG9hZChzaXplLCB0MSwgQm9vbGVhblRhZywgdDAsIC5zbG93KQogICAgICAg
ICBjb25kaXRpb25PcCh0MCwgLnRhcmdldCkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnRh
cmdldDoKLSAgICAgICAganVtcCh0YXJnZXQpCisgICAgICAgIGp1bXAobV90YXJnZXQpCiAKICAg
ICAuc2xvdzoKICAgICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfJW5hbWUlKQpA
QCAtMTcwMCw3ICsxNzAwLDcgQEAgZW5kCiAKIG1hY3JvIGVxdWFsTnVsbEp1bXBPcChuYW1lLCBv
cCwgY2VsbEhhbmRsZXIsIGltbWVkaWF0ZUhhbmRsZXIpCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9w
XyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBn
ZXQodmFsdWUsIHQwKQorICAgICAgICBnZXQobV92YWx1ZSwgdDApCiAgICAgICAgIGFzc2VydE5v
dENvbnN0YW50KHNpemUsIHQwKQogICAgICAgICBsb2FkaSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0s
IHQxCiAgICAgICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0sIHQwCkBAIC0xNzEw
LDcgKzE3MTAsNyBAQCBtYWNybyBlcXVhbE51bGxKdW1wT3AobmFtZSwgb3AsIGNlbGxIYW5kCiAg
ICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC50YXJnZXQ6Ci0gICAgICAgIGp1bXAodGFyZ2V0KQor
ICAgICAgICBqdW1wKG1fdGFyZ2V0KQogCiAgICAgLmltbWVkaWF0ZToKICAgICAgICAgb3JpIDEs
IHQxCkBAIC0xNzQxLDggKzE3NDEsOCBAQCBlcXVhbE51bGxKdW1wT3Aoam5lcV9udWxsLCBPcEpu
ZXFOdWxsLAogCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bfam5lcV9wdHIsIE9wSm5lcVB0ciwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCi0gICAgZ2V0KHZh
bHVlLCB0MCkKLSAgICBnZXQoc3BlY2lhbFBvaW50ZXIsIHQxKQorICAgIGdldChtX3ZhbHVlLCB0
MCkKKyAgICBnZXQobV9zcGVjaWFsUG9pbnRlciwgdDEpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nm
cl0sIHQyCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0Ml0sIHQyCiAgICAg
YmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBDZWxsVGFnLCAub3BKbmVxUHRyQnJhbmNoCkBA
IC0xNzUwLDggKzE3NTAsOCBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2puZXFfcHRyLCBPcEpu
ZXFQCiAgICAgYnBlcSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MSwgLm9wSm5lcVB0ckZh
bGxUaHJvdWdoCiAub3BKbmVxUHRyQnJhbmNoOgogICAgIG1ldGFkYXRhKHQ1LCB0MikKLSAgICBz
dG9yZWIgMSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6aGFzSnVtcGVkW3Q1XQotICAgIGdldCh0YXJn
ZXQsIHQwKQorICAgIHN0b3JlYiAxLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjptX2hhc0p1bXBlZFt0
NV0KKyAgICBnZXQobV90YXJnZXQsIHQwKQogICAgIGp1bXBJbXBsKHQwKQogLm9wSm5lcVB0ckZh
bGxUaHJvdWdoOgogICAgIGRpc3BhdGNoKCkKQEAgLTE3NjAsMjMgKzE3NjAsMjMgQEAgZW5kKQog
CiBtYWNybyBjb21wYXJlVW5zaWduZWRKdW1wT3AobmFtZSwgb3AsIGludGVnZXJDb21wYXJlKQog
ICAgIGxsaW50T3BXaXRoSnVtcChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1w
LCBkaXNwYXRjaCkKLSAgICAgICAgZ2V0KGxocywgdDIpCi0gICAgICAgIGdldChyaHMsIHQzKQor
ICAgICAgICBnZXQobV9saHMsIHQyKQorICAgICAgICBnZXQobV9yaHMsIHQzKQogICAgICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MCwgdDEpCiAgICAgICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQzLCB0MiwgdDMpCiAgICAgICAgIGludGVnZXJDb21w
YXJlKHQxLCB0MywgLmp1bXBUYXJnZXQpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1w
VGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKICAg
ICBlbmQpCiBlbmQKIAogCiBtYWNybyBjb21wYXJlVW5zaWduZWRPcChuYW1lLCBvcCwgaW50ZWdl
ckNvbXBhcmVBbmRTZXQpCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KHJocywgdDIpCi0g
ICAgICAgIGdldChsaHMsIHQwKQorICAgICAgICBnZXQobV9yaHMsIHQyKQorICAgICAgICBnZXQo
bV9saHMsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0Mywg
dDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDAp
CiAgICAgICAgIGludGVnZXJDb21wYXJlQW5kU2V0KHQwLCB0MSwgdDApCkBAIC0xNzg3LDggKzE3
ODcsOCBAQCBlbmQKIAogbWFjcm8gY29tcGFyZUp1bXBPcChuYW1lLCBvcCwgaW50ZWdlckNvbXBh
cmUsIGRvdWJsZUNvbXBhcmUpCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1h
Y3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQobGhzLCB0MikKLSAg
ICAgICAgZ2V0KHJocywgdDMpCisgICAgICAgIGdldChtX2xocywgdDIpCisgICAgICAgIGdldCht
X3JocywgdDMpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQwLCB0
MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDMsIHQyLCB0MykK
ICAgICAgICAgYmluZXEgdDAsIEludDMyVGFnLCAub3AxTm90SW50CkBAIC0xODE3LDcgKzE4MTcs
NyBAQCBtYWNybyBjb21wYXJlSnVtcE9wKG5hbWUsIG9wLCBpbnRlZ2VyQ29tCiAgICAgICAgIGRp
c3BhdGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAg
ICAganVtcChtX3RhcmdldCkKIAogICAgIC5zbG93OgogICAgICAgICBjYWxsU2xvd1BhdGgoX2xs
aW50X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC0xODI3LDggKzE4MjcsOCBAQCBlbmQKIAogCiBsbGlu
dE9wV2l0aEp1bXAob3Bfc3dpdGNoX2ltbSwgT3BTd2l0Y2hJbW0sIG1hY3JvIChzaXplLCBnZXQs
IGp1bXAsIGRpc3BhdGNoKQotICAgIGdldChzY3J1dGluZWUsIHQyKQotICAgIGdldCh0YWJsZUlu
ZGV4LCB0MykKKyAgICBnZXQobV9zY3J1dGluZWUsIHQyKQorICAgIGdldChtX3RhYmxlSW5kZXgs
IHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQxLCB0MCkKICAgICBs
b2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fcmFyZURhdGFb
dDJdLCB0MgpAQCAtMTg0Niw3ICsxODQ2LDcgQEAgbGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRjaF9p
bW0sIE9wU3dpdGNoSQogLm9wU3dpdGNoSW1tTm90SW50OgogICAgIGJpYiB0MSwgTG93ZXN0VGFn
LCAub3BTd2l0Y2hJbW1TbG93ICAjIEdvIHRvIHNsb3cgcGF0aCBpZiBpdCdzIGEgZG91YmxlLgog
Lm9wU3dpdGNoSW1tRmFsbFRocm91Z2g6Ci0gICAganVtcChkZWZhdWx0T2Zmc2V0KQorICAgIGp1
bXAobV9kZWZhdWx0T2Zmc2V0KQogCiAub3BTd2l0Y2hJbW1TbG93OgogICAgIGNhbGxTbG93UGF0
aChfbGxpbnRfc2xvd19wYXRoX3N3aXRjaF9pbW0pCkBAIC0xODU1LDggKzE4NTUsOCBAQCBlbmQp
CiAKIAogbGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRjaF9jaGFyLCBPcFN3aXRjaENoYXIsIG1hY3Jv
IChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgIGdldChzY3J1dGluZWUsIHQyKQotICAg
IGdldCh0YWJsZUluZGV4LCB0MykKKyAgICBnZXQobV9zY3J1dGluZWUsIHQyKQorICAgIGdldCht
X3RhYmxlSW5kZXgsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQx
LCB0MCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIKICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1fcmFyZURhdGFbdDJdLCB0MgpAQCAtMTg4Myw3ICsxODgzLDcgQEAgbGxpbnRPcFdpdGhKdW1w
KG9wX3N3aXRjaF9jaGFyLCBPcFN3aXRjaAogICAgIGRpc3BhdGNoSW5kaXJlY3QodDEpCiAKIC5v
cFN3aXRjaENoYXJGYWxsVGhyb3VnaDoKLSAgICBqdW1wKGRlZmF1bHRPZmZzZXQpCisgICAganVt
cChtX2RlZmF1bHRPZmZzZXQpCiAKIC5vcFN3aXRjaE9uUm9wZToKICAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9zd2l0Y2hfY2hhcikKQEAgLTE4OTIsMTIgKzE4OTIsMTIgQEAgZW5k
KQogCiAKIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwob3AsIGdldHUpCi0gICAgZ2V0dShhcmd2
LCB0MykKKyAgICBnZXR1KG1fYXJndiwgdDMpCiAgICAgbmVnaSB0MwogICAgIGJpbmVxIFRoaXNB
cmd1bWVudE9mZnNldCArIFRhZ09mZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAg
ICBsb2FkaSBUaGlzQXJndW1lbnRPZmZzZXQgKyBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0
MAogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVwIHQw
LCAlb3AlOjpNZXRhZGF0YTo6YXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0K
KyAgICBzdG9yZXAgdDAsICVvcCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVu
U3RydWN0dXJlSURbdDVdCiAuZG9uZToKIGVuZAogCkBAIC0xOTA1LDI2ICsxOTA1LDI2IEBAIG1h
Y3JvIGNvbW1vbkNhbGxPcChuYW1lLCBzbG93UGF0aCwgb3AsIHAKICAgICBsbGludE9wV2l0aE1l
dGFkYXRhKG5hbWUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJl
dHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIHByb2xvZ3VlKG1hY3Jv
IChmaWVsZCwgZHN0KQotICAgICAgICAgICAgZ2V0dShzaXplLCBvcCwgZmllbGQsIGRzdCkKKyAg
ICAgICAgcHJvbG9ndWUobWFjcm8gKGZpZWxkTmFtZSwgZHN0KQorICAgICAgICAgICAgZ2V0dShz
aXplLCBvcCwgZmllbGROYW1lLCBkc3QpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKLSAgICAg
ICAgZ2V0KGNhbGxlZSwgdDApCi0gICAgICAgIGxvYWRwICVvcCU6Ok1ldGFkYXRhOjpjYWxsTGlu
a0luZm8uY2FsbGVlW3Q1XSwgdDIKKyAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAg
bG9hZHAgJW9wJTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLmNhbGxlZVt0NV0sIHQyCiAgICAg
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNpemUsIHQwLCBDZWxsVGFnLCB0Mywg
Lm9wQ2FsbFNsb3cpCiAgICAgICAgIGJpbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKLSAgICAgICAg
Z2V0dShzaXplLCBvcCwgYXJndiwgdDMpCisgICAgICAgIGdldHUoc2l6ZSwgb3AsIG1fYXJndiwg
dDMpCiAgICAgICAgIGxzaGlmdGkgMywgdDMKICAgICAgICAgbmVnaSB0MwogICAgICAgICBhZGRw
IGNmciwgdDMgICMgdDMgY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiBjZnIKICAgICAgICAgc3Rv
cmVpIHQyLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W3QzXQotICAgICAgICBnZXR1KHNpemUsIG9w
LCBhcmdjLCB0MikKKyAgICAgICAgZ2V0dShzaXplLCBvcCwgbV9hcmdjLCB0MikKICAgICAgICAg
c3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KICAgICAgICAgc3RvcmVp
IHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAgICAgc3RvcmVpIENl
bGxUYWcsIENhbGxlZSArIFRhZ09mZnNldFt0M10KICAgICAgICAgbW92ZSB0Mywgc3AKLSAgICAg
ICAgcHJlcGFyZUNhbGwoJW9wJTo6TWV0YWRhdGE6OmNhbGxMaW5rSW5mby5tYWNoaW5lQ29kZVRh
cmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCi0gICAgICAgIGNhbGxUYXJnZXRG
dW5jdGlvbihzaXplLCBvcCwgZGlzcGF0Y2gsICVvcCU6Ok1ldGFkYXRhOjpjYWxsTGlua0luZm8u
bWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQorICAgICAgICBwcmVwYXJlQ2Fs
bCglb3AlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0
MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQorICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oc2l6
ZSwgb3AsIGRpc3BhdGNoLCAlb3AlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8ubWFjaGluZUNv
ZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQogCiAgICAgLm9wQ2FsbFNsb3c6CiAgICAgICAg
IHNsb3dQYXRoRm9yQ2FsbChzaXplLCBvcCwgZGlzcGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2Fs
bCkKQEAgLTE5MzMsMTQgKzE5MzMsMTQgQEAgZW5kCiAKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxv
Z3VlKCkKLSAgICBnZXQodmFsdWUsIHQyKQorICAgIGdldChtX3ZhbHVlLCB0MikKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MSwgdDApCiAgICAgZG9SZXR1cm4oKQogZW5k
KQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX3RvX3ByaW1pdGl2ZSwgT3BUb1ByaW1pdGl2ZSwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQoc3JjLCB0MikKKyAg
ICBnZXQobV9zcmMsIHQyKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQx
LCB0MCkKICAgICBiaW5lcSB0MSwgQ2VsbFRhZywgLm9wVG9QcmltaXRpdmVJc0ltbQogICAgIGJi
YWVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0VHlwZSwgLm9wVG9QcmltaXRpdmVTbG93Q2Fz
ZQpAQCAtMTk4NCwxMyArMTk4NCwxMyBAQCBjb21tb25PcChsbGludF9vcF9jYXRjaCwgbWFjcm8o
KSBlbmQsIG1hCiAKICAgICBsb2FkaSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAogICAgIHN0b3Jl
aSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCi0gICAgZ2V0KHNpemUsIE9wQ2F0Y2gsIGV4Y2VwdGlv
biwgdDIpCisgICAgZ2V0KHNpemUsIE9wQ2F0Y2gsIG1fZXhjZXB0aW9uLCB0MikKICAgICBzdG9y
ZWkgdDAsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MiwgOF0KICAgICBzdG9yZWkgQ2VsbFRhZywgVGFn
T2Zmc2V0W2NmciwgdDIsIDhdCiAKICAgICBsb2FkaSBFeGNlcHRpb246Om1fdmFsdWUgKyBUYWdP
ZmZzZXRbdDBdLCB0MQogICAgIGxvYWRpIEV4Y2VwdGlvbjo6bV92YWx1ZSArIFBheWxvYWRPZmZz
ZXRbdDBdLCB0MAotICAgIGdldChzaXplLCBPcENhdGNoLCB0aHJvd25WYWx1ZSwgdDIpCisgICAg
Z2V0KHNpemUsIE9wQ2F0Y2gsIG1fdGhyb3duVmFsdWUsIHQyKQogICAgIHN0b3JlaSB0MCwgUGF5
bG9hZE9mZnNldFtjZnIsIHQyLCA4XQogICAgIHN0b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIs
IDhdCiAKQEAgLTIwMDMsNyArMjAwMyw3IEBAIGVuZCkKIAogbGxpbnRPcChvcF9lbmQsIE9wRW5k
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBp
bG9ndWUoKQotICAgIGdldCh2YWx1ZSwgdDApCisgICAgZ2V0KG1fdmFsdWUsIHQwKQogICAgIGFz
c2VydE5vdENvbnN0YW50KHNpemUsIHQwKQogICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIHQwLCA4
XSwgdDEKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MApAQCAtMjE3MCwx
MyArMjE3MCwxMyBAQCBlbmQKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcmVzb2x2ZV9zY29wZSwg
T3BSZXNvbHZlU2NvcGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0
dXJuKQogCiAgICAgbWFjcm8gZ2V0Q29uc3RhbnRTY29wZSgpCi0gICAgICAgIGxvYWRwIE9wUmVz
b2x2ZVNjb3BlOjpNZXRhZGF0YTo6Y29uc3RhbnRTY29wZVt0NV0sICB0MAorICAgICAgICBsb2Fk
cCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om1fY29uc3RhbnRTY29wZVt0NV0sICB0MAogICAg
ICAgICByZXR1cm4oQ2VsbFRhZywgdDApCiAgICAgZW5kCiAKICAgICBtYWNybyByZXNvbHZlU2Nv
cGUoKQotICAgICAgICBsb2FkaSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6OmxvY2FsU2NvcGVE
ZXB0aFt0NV0sIHQyCi0gICAgICAgIGdldChzY29wZSwgdDApCisgICAgICAgIGxvYWRpIE9wUmVz
b2x2ZVNjb3BlOjpNZXRhZGF0YTo6bV9sb2NhbFNjb3BlRGVwdGhbdDVdLCB0MgorICAgICAgICBn
ZXQobV9zY29wZSwgdDApCiAgICAgICAgIGxvYWRwIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0s
IHQwCiAgICAgICAgIGJ0aXogdDIsIC5yZXNvbHZlU2NvcGVMb29wRW5kCiAKQEAgLTIxOTAsNyAr
MjE5MCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcmVzb2x2ZV9zY29wZSwgT3AKICAgICBl
bmQKIAogICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBsb2FkcCBPcFJlc29sdmVTY29wZTo6TWV0
YWRhdGE6OnJlc29sdmVUeXBlW3Q1XSwgdDAKKyAgICBsb2FkcCBPcFJlc29sdmVTY29wZTo6TWV0
YWRhdGE6Om1fcmVzb2x2ZVR5cGVbdDVdLCB0MAogCiAjckdsb2JhbFByb3BlcnR5OgogICAgIGJp
bmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJHbG9iYWxWYXIKQEAgLTIyMzksMjMgKzIyMzksMjMg
QEAgZW5kKQogCiAKIG1hY3JvIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2sob3AsIGdldCwgb3BlcmFu
ZCwgc2xvd1BhdGgpCi0gICAgZ2V0KHNjb3BlLCB0MCkKKyAgICBnZXQobV9zY29wZSwgdDApCiAg
ICAgbG9hZHAgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XSwgdDAKLSAgICBsb2FkcCAlb3AlOjpN
ZXRhZGF0YTo6c3RydWN0dXJlW3Q1XSwgdDEKKyAgICBsb2FkcCAlb3AlOjpNZXRhZGF0YTo6bV9z
dHJ1Y3R1cmVbdDVdLCB0MQogICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQx
LCBzbG93UGF0aAogZW5kCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29w
ZSwgT3BHZXRGcm9tU2NvcGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQogICAgIG1hY3JvIGdldFByb3BlcnR5KCkKLSAgICAgICAgbG9hZHAgT3BHZXRGcm9t
U2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDMKKyAgICAgICAgbG9hZHAgT3BHZXRGcm9t
U2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MwogICAgICAgICBsb2FkUHJvcGVydHlB
dFZhcmlhYmxlT2Zmc2V0KHQzLCB0MCwgdDEsIHQyKQogICAgICAgICB2YWx1ZVByb2ZpbGUoT3BH
ZXRGcm9tU2NvcGUsIHQ1LCB0MSwgdDIpCiAgICAgICAgIHJldHVybih0MSwgdDIpCiAgICAgZW5k
CiAKICAgICBtYWNybyBnZXRHbG9iYWxWYXIodGR6Q2hlY2tJZk5lY2Vzc2FyeSkKLSAgICAgICAg
bG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDAKKyAgICAgICAg
bG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MAogICAgICAg
ICBsb2FkcCBUYWdPZmZzZXRbdDBdLCB0MQogICAgICAgICBsb2FkcCBQYXlsb2FkT2Zmc2V0W3Qw
XSwgdDIKICAgICAgICAgdGR6Q2hlY2tJZk5lY2Vzc2FyeSh0MSkKQEAgLTIyNjQsNyArMjI2NCw3
IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2Zyb21fc2NvcGUsIE8KICAgICBlbmQKIAog
ICAgIG1hY3JvIGdldENsb3N1cmVWYXIoKQotICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6
TWV0YWRhdGE6Om9wZXJhbmRbdDVdLCB0MworICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6
TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQzCiAgICAgICAgIGxvYWRwIEpTTGV4aWNhbEVudmly
b25tZW50X3ZhcmlhYmxlcyArIFRhZ09mZnNldFt0MCwgdDMsIDhdLCB0MQogICAgICAgICBsb2Fk
cCBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXMgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0Mywg
OF0sIHQyCiAgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwgdDUsIHQxLCB0MikK
QEAgLTIyNzIsNyArMjI3Miw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2Zyb21fc2Nv
cGUsIE8KICAgICBlbmQKIAogICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBsb2FkaSBPcEdldEZy
b21TY29wZTo6TWV0YWRhdGE6OmdldFB1dEluZm9bdDVdLCB0MAorICAgIGxvYWRpIE9wR2V0RnJv
bVNjb3BlOjpNZXRhZGF0YTo6bV9nZXRQdXRJbmZvW3Q1XSwgdDAKICAgICBhbmRpIFJlc29sdmVU
eXBlTWFzaywgdDAKIAogI2dHbG9iYWxQcm9wZXJ0eToKQEAgLTIyOTMsNyArMjI5Myw3IEBAIGxs
aW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2Zyb21fc2NvcGUsIE8KIAogLmdDbG9zdXJlVmFyOgog
ICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAuZ0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcwotICAgIGxvYWRWYXJpYWJsZShnZXQsIHNjb3BlLCB0MiwgdDEsIHQwKQorICAgIGxv
YWRWYXJpYWJsZShnZXQsIG1fc2NvcGUsIHQyLCB0MSwgdDApCiAgICAgZ2V0Q2xvc3VyZVZhcigp
CiAKIC5nR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgpAQCAtMjMxNyw3ICsy
MzE3LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogLmdDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MsIC5nRHluYW1pYwogICAgIHZhckluamVjdGlvbkNoZWNrKC5n
RHluYW1pYykKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAgICBs
b2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MiwgdDEsIHQwKQogICAgIGdldENsb3N1cmVWYXIo
KQogCiAuZ0R5bmFtaWM6CkBAIC0yMzI4LDEwNyArMjMyOCwxMDcgQEAgZW5kKQogCiBsbGludE9w
V2l0aE1ldGFkYXRhKG9wX3B1dF90b19zY29wZSwgT3BQdXRUb1Njb3BlLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBtYWNybyBwdXRQcm9wZXJ0eSgp
Ci0gICAgICAgIGdldCh2YWx1ZSwgdDEpCisgICAgICAgIGdldChtX3ZhbHVlLCB0MSkKICAgICAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIsIHQzKQotICAgICAgICBsb2Fk
aXMgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b3BlcmFuZFt0NV0sIHQxCisgICAgICAgIGxvYWRp
cyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQogICAgICAgICBzdG9y
ZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0MykKICAgICBlbmQKIAogICAg
IG1hY3JvIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICAgICAgZ2V0KHZhbHVlLCB0MCkKKyAgICAg
ICAgZ2V0KG1fdmFsdWUsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQwLCB0MSwgdDIpCi0gICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6OndhdGNo
cG9pbnRTZXRbdDVdLCB0MworICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpt
X3dhdGNocG9pbnRTZXRbdDVdLCB0MwogICAgICAgICBub3RpZnlXcml0ZSh0MywgLnBEeW5hbWlj
KQotICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDAK
KyAgICAgICAgbG9hZHAgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6bV9vcGVyYW5kW3Q1XSwgdDAK
ICAgICAgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbdDBdCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5
bG9hZE9mZnNldFt0MF0KICAgICBlbmQKIAogICAgIG1hY3JvIHB1dENsb3N1cmVWYXIoKQotICAg
ICAgICBnZXQodmFsdWUsIHQxKQorICAgICAgICBnZXQobV92YWx1ZSwgdDEpCiAgICAgICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyLCB0MykKLSAgICAgICAgbG9hZGlzIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6Om9wZXJhbmRbdDVdLCB0MQorICAgICAgICBsb2FkaXMgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6bV9vcGVyYW5kW3Q1XSwgdDEKICAgICAgICAgc3RvcmVpIHQy
LCBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXMgKyBUYWdPZmZzZXRbdDAsIHQxLCA4XQog
ICAgICAgICBzdG9yZWkgdDMsIEpTTGV4aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlcyArIFBheWxv
YWRPZmZzZXRbdDAsIHQxLCA4XQogICAgIGVuZAogCiAgICAgbWFjcm8gcHV0TG9jYWxDbG9zdXJl
VmFyKCkKLSAgICAgICAgZ2V0KHZhbHVlLCB0MSkKKyAgICAgICAgZ2V0KG1fdmFsdWUsIHQxKQog
ICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MiwgdDMpCi0gICAgICAg
IGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6OndhdGNocG9pbnRTZXRbdDVdLCB0MQorICAg
ICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX3dhdGNocG9pbnRTZXRbdDVdLCB0
MQogICAgICAgICBidHB6IHQxLCAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQKICAgICAgICAgbm90
aWZ5V3JpdGUodDEsIC5wRHluYW1pYykKICAgICAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6Ci0g
ICAgICAgIGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAg
ICAgICAgbG9hZGlzIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQxCiAg
ICAgICAgIHN0b3JlaSB0MiwgSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzICsgVGFnT2Zm
c2V0W3QwLCB0MSwgOF0KICAgICAgICAgc3RvcmVpIHQzLCBKU0xleGljYWxFbnZpcm9ubWVudF92
YXJpYWJsZXMgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0KICAgICBlbmQKIAogCiAgICAgbWV0
YWRhdGEodDUsIHQwKQotICAgIGxvYWRpIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6OmdldFB1dElu
Zm9bdDVdLCB0MAorICAgIGxvYWRpIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om1fZ2V0UHV0SW5m
b1t0NV0sIHQwCiAgICAgYW5kaSBSZXNvbHZlVHlwZU1hc2ssIHQwCiAKICNwTG9jYWxDbG9zdXJl
VmFyOgogICAgIGJpbmVxIHQwLCBMb2NhbENsb3N1cmVWYXIsIC5wR2xvYmFsUHJvcGVydHkKLSAg
ICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAgICBsb2FkVmFyaWFibGUo
Z2V0LCBtX3Njb3BlLCB0MiwgdDEsIHQwKQogICAgIHB1dExvY2FsQ2xvc3VyZVZhcigpCi0gICAg
d3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIHNjb3BlLCB2YWx1ZSkKKyAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9zY29wZSwgbV92YWx1ZSkKICAgICBkaXNw
YXRjaCgpCiAKIC5wR2xvYmFsUHJvcGVydHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5
LCAucEdsb2JhbFZhcgogICAgIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2soT3BQdXRUb1Njb3BlLCBn
ZXQsIHNjb3BlLCAucER5bmFtaWMpCiAgICAgcHV0UHJvcGVydHkoKQotICAgIHdyaXRlQmFycmll
ck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25P
cGVyYW5kcyhzaXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAu
cEdsb2JhbFZhcjoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFyLCAucEdsb2JhbExleGljYWxWYXIK
ICAgICBwdXRHbG9iYWxWYXJpYWJsZSgpCi0gICAgd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qo
c2l6ZSwgZ2V0LCB2YWx1ZSkKKyAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBn
ZXQsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEdsb2JhbExleGljYWxWYXI6CiAgICAg
YmluZXEgdDAsIEdsb2JhbExleGljYWxWYXIsIC5wQ2xvc3VyZVZhcgogICAgIHB1dEdsb2JhbFZh
cmlhYmxlKCkKLSAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9ubWVudChzaXpl
LCBnZXQsIHZhbHVlKQorICAgIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
KHNpemUsIGdldCwgbV92YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wQ2xvc3VyZVZhcjoKICAg
ICBiaW5lcSB0MCwgQ2xvc3VyZVZhciwgLnBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3MKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAgICBsb2Fk
VmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MiwgdDEsIHQwKQogICAgIHB1dENsb3N1cmVWYXIoKQot
ICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAg
d3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAg
ZGlzcGF0Y2goKQogCiAucEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAg
ICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucEdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKE9w
UHV0VG9TY29wZSwgZ2V0LCBzY29wZSwgLnBEeW5hbWljKQogICAgIHB1dFByb3BlcnR5KCkKLSAg
ICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgc2NvcGUsIHZhbHVlKQorICAgIHdy
aXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX3Njb3BlLCBtX3ZhbHVlKQogICAgIGRp
c3BhdGNoKCkKIAogLnBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVx
IHQwLCBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnBEeW5hbWljKQog
ICAgIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChz
aXplLCBnZXQsIHZhbHVlKQorICAgIHdyaXRlQmFycmllck9uR2xvYmFsT2JqZWN0KHNpemUsIGdl
dCwgbV92YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCAucENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFy
SW5qZWN0aW9uQ2hlY2soLnBEeW5hbWljKQogICAgIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3
cml0ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9ubWVudChzaXplLCBnZXQsIHZhbHVlKQor
ICAgIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KHNpemUsIGdldCwgbV92
YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucE1v
ZHVsZVZhcgogICAgIHZhckluamVjdGlvbkNoZWNrKC5wRHluYW1pYykKLSAgICBsb2FkVmFyaWFi
bGUoZ2V0LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3Bl
LCB0MiwgdDEsIHQwKQogICAgIHB1dENsb3N1cmVWYXIoKQotICAgIHdyaXRlQmFycmllck9uT3Bl
cmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5k
cyhzaXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucE1vZHVs
ZVZhcjoKQEAgLTI0NDMsOSArMjQ0Myw5IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFByb2ZpbGUo
b3BfZ2V0X2Zyb21fYXJndW1lbnRzLCBPcEdldEZyb21Bcmd1bWVudHMsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KGFyZ3VtZW50cywgdDApCisgICAgZ2V0KG1f
YXJndW1lbnRzLCB0MCkKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MAot
ICAgIGdldChpbmRleCwgdDEpCisgICAgZ2V0KG1faW5kZXgsIHQxKQogICAgIGxvYWRpIERpcmVj
dEFyZ3VtZW50c19zdG9yYWdlICsgVGFnT2Zmc2V0W3QwLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkg
RGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MSwgOF0sIHQzCiAg
ICAgcmV0dXJuKHQyLCB0MykKQEAgLTI0NTMsMTIgKzI0NTMsMTIgQEAgZW5kKQogCiAKIGxsaW50
T3Aob3BfcHV0X3RvX2FyZ3VtZW50cywgT3BQdXRUb0FyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gpCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIGFyZ3Vt
ZW50cywgdmFsdWUpCi0gICAgZ2V0KGFyZ3VtZW50cywgdDApCisgICAgd3JpdGVCYXJyaWVyT25P
cGVyYW5kcyhzaXplLCBnZXQsIG1fYXJndW1lbnRzLCBtX3ZhbHVlKQorICAgIGdldChtX2FyZ3Vt
ZW50cywgdDApCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XSwgdDAKLSAgICBn
ZXQodmFsdWUsIHQxKQorICAgIGdldChtX3ZhbHVlLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQxLCB0MiwgdDMpCi0gICAgZ2V0KGluZGV4LCB0MSkKKyAgICBnZXQobV9p
bmRleCwgdDEpCiAgICAgc3RvcmVpIHQyLCBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSArIFRhZ09m
ZnNldFt0MCwgdDEsIDhdCiAgICAgc3RvcmVpIHQzLCBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSAr
IFBheWxvYWRPZmZzZXRbdDAsIHQxLCA4XQogICAgIGRpc3BhdGNoKCkKQEAgLTI0NjYsNyArMjQ2
Niw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9nZXRfcGFyZW50X3Njb3BlLCBP
cEdldFBhcmVudFNjb3BlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAg
IGdldChzY29wZSwgdDApCisgICAgZ2V0KG1fc2NvcGUsIHQwKQogICAgIGxvYWRwIFBheWxvYWRP
ZmZzZXRbY2ZyLCB0MCwgOF0sIHQwCiAgICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3QwXSwgdDAK
ICAgICByZXR1cm4oQ2VsbFRhZywgdDApCkBAIC0yNDgxLDcgKzI0ODEsNyBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX3Byb2ZpbGVfdHlwZSwgT3BQCiAgICAgbG9hZHAgVk06Om1fdHlwZVByb2Zp
bGVyTG9nW3QxXSwgdDEKIAogICAgICMgdDAgaXMgaG9sZGluZyB0aGUgcGF5bG9hZCwgdDUgaXMg
aG9sZGluZyB0aGUgdGFnLgotICAgIGdldCh0YXJnZXQsIHQyKQorICAgIGdldChtX3RhcmdldCwg
dDIpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDUsIHQwKQogCiAgICAg
YmllcSB0NSwgRW1wdHlWYWx1ZVRhZywgLm9wUHJvZmlsZVR5cGVEb25lCkBAIC0yNDk1LDcgKzI0
OTUsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3Byb2ZpbGVfdHlwZSwgT3BQCiAgICAgc3Rv
cmVpIHQwLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZSArIFBheWxvYWRPZmZzZXRb
dDJdCiAKICAgICAjIFN0b3JlIHRoZSBUeXBlTG9jYXRpb24gb250byB0aGUgbG9nIGVudHJ5Lgot
ICAgIGxvYWRwIE9wUHJvZmlsZVR5cGU6Ok1ldGFkYXRhOjp0eXBlTG9jYXRpb25bdDNdLCB0Mwor
ICAgIGxvYWRwIE9wUHJvZmlsZVR5cGU6Ok1ldGFkYXRhOjptX3R5cGVMb2NhdGlvblt0M10sIHQz
CiAgICAgc3RvcmVwIHQzLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvblt0Ml0K
IAogICAgIGJpZXEgdDUsIENlbGxUYWcsIC5vcFByb2ZpbGVUeXBlSXNDZWxsCkBAIC0yNTIxLDcg
KzI1MjEsNyBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHJvZmlsZV9jb250cm9s
X2Zsb3csIE9wUHJvZmlsZUNvbnRyb2xGbG93LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKICAgICBtZXRhZGF0YSh0NSwgdDApCi0gICAgbG9hZHAgT3BQcm9m
aWxlQ29udHJvbEZsb3c6Ok1ldGFkYXRhOjpiYXNpY0Jsb2NrTG9jYXRpb25bdDVdLCB0MAorICAg
IGxvYWRwIE9wUHJvZmlsZUNvbnRyb2xGbG93OjpNZXRhZGF0YTo6bV9iYXNpY0Jsb2NrTG9jYXRp
b25bdDVdLCB0MAogICAgIGxvYWRpIEJhc2ljQmxvY2tMb2NhdGlvbjo6bV9leGVjdXRpb25Db3Vu
dFt0MF0sIHQxCiAgICAgYmFkZGlvIDEsIHQxLCAuZG9uZQogICAgIHN0b3JlaSB0MSwgQmFzaWNC
bG9ja0xvY2F0aW9uOjptX2V4ZWN1dGlvbkNvdW50W3QwXQpAQCAtMjUzMyw3ICsyNTMzLDcgQEAg
ZW5kKQogbGxpbnRPcFdpdGhSZXR1cm4ob3BfZ2V0X3Jlc3RfbGVuZ3RoLCBPcEdldFJlc3RMZW5n
dGgsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCiAgICAgbG9hZGkgUGF5bG9h
ZE9mZnNldCArIEFyZ3VtZW50Q291bnRbY2ZyXSwgdDAKICAgICBzdWJpIDEsIHQwCi0gICAgZ2V0
KG51bVBhcmFtZXRlcnNUb1NraXAsIHQxKQorICAgIGdldChtX251bVBhcmFtZXRlcnNUb1NraXAs
IHQxKQogICAgIGJpbHRlcSB0MCwgdDEsIC5zdG9yZVplcm8KICAgICBzdWJpIHQxLCB0MAogICAg
IGptcCAuZmluaXNoCkBAIC0yNTUxLDcgKzI1NTEsNyBAQCBsbGludE9wKG9wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZSwgCiAgICAgc3RvcmVwIHQxLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6
OmNhbGxlckZyYW1lW3QwXQogICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwg
dDEKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6Y2FsbGVlW3QwXQotICAg
IGdldChzY29wZSwgdDEpCisgICAgZ2V0KG1fc2NvcGUsIHQxKQogICAgIGxvYWRpIFBheWxvYWRP
ZmZzZXRbY2ZyLCB0MSwgOF0sIHQxCiAgICAgc3RvcmVwIHQxLCBTaGFkb3dDaGlja2VuOjpQYWNr
ZXQ6OnNjb3BlW3QwXQogICAgIGRpc3BhdGNoKCkKQEAgLTI1NjUsMTAgKzI1NjUsMTAgQEAgbGxp
bnRPcChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCwgT3BMbwogICAgIGFjcXVpcmVTaGFkb3dD
aGlja2VuUGFja2V0KC5vcExvZ1NoYWRvd0NoaWNrZW5UYWlsU2xvdykKICAgICBzdG9yZXAgY2Zy
LCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OmZyYW1lW3QwXQogICAgIHN0b3JlcCBTaGFkb3dDaGlj
a2VuVGFpbE1hcmtlciwgU2hhZG93Q2hpY2tlbjo6UGFja2V0OjpjYWxsZWVbdDBdCi0gICAgbG9h
ZFZhcmlhYmxlKGdldCwgdGhpc1ZhbHVlLCB0MywgdDIsIHQxKQorICAgIGxvYWRWYXJpYWJsZShn
ZXQsIG1fdGhpc1ZhbHVlLCB0MywgdDIsIHQxKQogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0ICsg
U2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aGlzVmFsdWVbdDBdCiAgICAgc3RvcmVpIHQxLCBQYXls
b2FkT2Zmc2V0ICsgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aGlzVmFsdWVbdDBdCi0gICAgZ2V0
KHNjb3BlLCB0MSkKKyAgICBnZXQobV9zY29wZSwgdDEpCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNl
dFtjZnIsIHQxLCA4XSwgdDEKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6
c2NvcGVbdDBdCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMjQwMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw0IEBACi0KLSMgQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAj
CiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDI2ICszNiwyNiBAQCBtYWNybyBuZXh0
SW5zdHJ1Y3Rpb25XaWRlKCkKICAgICBqbXAgW3QxLCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRy
VGFnCiBlbmQKIAotbWFjcm8gZ2V0dU9wZXJhbmROYXJyb3cob3AsIGZpZWxkLCBkc3QpCi0gICAg
bG9hZGIgY29uc3RleHByICVvcCVfJWZpZWxkJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKK21hY3Jv
IGdldHVPcGVyYW5kTmFycm93KG9wLCBmaWVsZE5hbWUsIGRzdCkKKyAgICBsb2FkYiBjb25zdGV4
cHIgJW9wJV8lZmllbGROYW1lJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKIGVuZAogCi1tYWNybyBn
ZXRPcGVyYW5kTmFycm93KG9wLCBmaWVsZCwgZHN0KQotICAgIGxvYWRic3AgY29uc3RleHByICVv
cCVfJWZpZWxkJV9pbmRleFtQQiwgUEMsIDFdLCBkc3QKK21hY3JvIGdldE9wZXJhbmROYXJyb3co
b3AsIGZpZWxkTmFtZSwgZHN0KQorICAgIGxvYWRic3AgY29uc3RleHByICVvcCVfJWZpZWxkTmFt
ZSVfaW5kZXhbUEIsIFBDLCAxXSwgZHN0CiBlbmQKIAotbWFjcm8gZ2V0dU9wZXJhbmRXaWRlKG9w
LCBmaWVsZCwgZHN0KQotICAgIGxvYWRpIGNvbnN0ZXhwciAlb3AlXyVmaWVsZCVfaW5kZXggKiA0
ICsgMVtQQiwgUEMsIDFdLCBkc3QKK21hY3JvIGdldHVPcGVyYW5kV2lkZShvcCwgZmllbGROYW1l
LCBkc3QpCisgICAgbG9hZGkgY29uc3RleHByICVvcCVfJWZpZWxkTmFtZSVfaW5kZXggKiA0ICsg
MVtQQiwgUEMsIDFdLCBkc3QKIGVuZAogCi1tYWNybyBnZXRPcGVyYW5kV2lkZShvcCwgZmllbGQs
IGRzdCkKLSAgICBsb2FkaXMgY29uc3RleHByICVvcCVfJWZpZWxkJV9pbmRleCAqIDQgKyAxW1BC
LCBQQywgMV0sIGRzdAorbWFjcm8gZ2V0T3BlcmFuZFdpZGUob3AsIGZpZWxkTmFtZSwgZHN0KQor
ICAgIGxvYWRpcyBjb25zdGV4cHIgJW9wJV8lZmllbGROYW1lJV9pbmRleCAqIDQgKyAxW1BCLCBQ
QywgMV0sIGRzdAogZW5kCiAKIG1hY3JvIG1ha2VSZXR1cm4oZ2V0LCBkaXNwYXRjaCwgZm4pCiAg
ICAgZm4obWFjcm8gKHZhbHVlKQogICAgICAgICBtb3ZlIHZhbHVlLCB0MgotICAgICAgICBnZXQo
ZHN0LCB0MSkKKyAgICAgICAgZ2V0KG1fZHN0LCB0MSkKICAgICAgICAgc3RvcmVxIHQyLCBbY2Zy
LCB0MSwgOF0KICAgICAgICAgZGlzcGF0Y2goKQogICAgIGVuZCkKQEAgLTY3LDE0ICs2NiwxNCBA
QCBtYWNybyBtYWtlUmV0dXJuUHJvZmlsZWQob3AsIGdldCwgbWV0YWRhCiAgICAgICAgIG1vdmUg
dmFsdWUsIHQzCiAgICAgICAgIG1ldGFkYXRhKHQxLCB0MikKICAgICAgICAgdmFsdWVQcm9maWxl
KG9wLCB0MSwgdDMpCi0gICAgICAgIGdldChkc3QsIHQxKQorICAgICAgICBnZXQobV9kc3QsIHQx
KQogICAgICAgICBzdG9yZXEgdDMsIFtjZnIsIHQxLCA4XQogICAgICAgICBkaXNwYXRjaCgpCiAg
ICAgZW5kKQogZW5kCiAKIG1hY3JvIHZhbHVlUHJvZmlsZShvcCwgbWV0YWRhdGEsIHZhbHVlKQot
ICAgIHN0b3JlcSB2YWx1ZSwgJW9wJTo6TWV0YWRhdGE6OnByb2ZpbGUubV9idWNrZXRzW21ldGFk
YXRhXQorICAgIHN0b3JlcSB2YWx1ZSwgJW9wJTo6TWV0YWRhdGE6Om1fcHJvZmlsZS5tX2J1Y2tl
dHNbbWV0YWRhdGFdCiBlbmQKIAogbWFjcm8gZGlzcGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3AsIGRp
c3BhdGNoKQpAQCAtODIsNyArODEsNyBAQCBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbChzaXplLCBv
cCwgZGlzcGF0CiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJs
b2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJbUEJdLCBQQgogICAgIHVucG9pc29uKF9nX0Nv
ZGVCbG9ja1BvaXNvbiwgUEIsIHQxKQotICAgIGdldChzaXplLCBvcCwgZHN0LCB0MSkKKyAgICBn
ZXQoc2l6ZSwgb3AsIG1fZHN0LCB0MSkKICAgICBzdG9yZXEgcjAsIFtjZnIsIHQxLCA4XQogICAg
IG1ldGFkYXRhKHNpemUsIG9wLCB0MiwgdDEpCiAgICAgdmFsdWVQcm9maWxlKG9wLCB0MiwgcjAp
CkBAIC00MjUsOSArNDI0LDkgQEAgbWFjcm8gbG9hZENhZ2VkKGJhc2VQdHIsIG1hc2ssIHNvdXJj
ZSwgZAogICAgIHVuY2FnZShiYXNlUHRyLCBtYXNrLCBkZXN0LCBzY3JhdGNoKQogZW5kCiAKLW1h
Y3JvIGxvYWRWYXJpYWJsZShnZXQsIGZpZWxkLCB2YWx1ZSkKLSAgICBnZXQoZmllbGQsIHZhbHVl
KQotICAgIGxvYWRxIFtjZnIsIHZhbHVlLCA4XSwgdmFsdWUKK21hY3JvIGxvYWRWYXJpYWJsZShn
ZXQsIGZpZWxkTmFtZSwgdmFsdWVSZWcpCisgICAgZ2V0KGZpZWxkTmFtZSwgdmFsdWVSZWcpCisg
ICAgbG9hZHEgW2NmciwgdmFsdWVSZWcsIDhdLCB2YWx1ZVJlZwogZW5kCiAKICMgSW5kZXggYW5k
IHZhbHVlIG11c3QgYmUgZGlmZmVyZW50IHJlZ2lzdGVycy4gSW5kZXggbWF5IGJlIGNsb2JiZXJl
ZC4KQEAgLTQ2OCw4ICs0NjcsOCBAQCBtYWNybyBsb2FkQ29uc3RhbnRPclZhcmlhYmxlQ2VsbChz
aXplLCBpCiAgICAgYnRxbnogdmFsdWUsIHRhZ01hc2ssIHNsb3cKIGVuZAogCi1tYWNybyB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRXaXRoUmVsb2FkKHNpemUsIGdldCwgY2VsbE9wZXJhbmQsIHJlbG9h
ZEFmdGVyU2xvd1BhdGgpCi0gICAgZ2V0KGNlbGxPcGVyYW5kLCB0MSkKK21hY3JvIHdyaXRlQmFy
cmllck9uT3BlcmFuZFdpdGhSZWxvYWQoc2l6ZSwgZ2V0LCBjZWxsRmllbGROYW1lLCByZWxvYWRB
ZnRlclNsb3dQYXRoKQorICAgIGdldChjZWxsRmllbGROYW1lLCB0MSkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlQ2VsbChzaXplLCB0MSwgdDIsIC53cml0ZUJhcnJpZXJEb25lKQogICAgIHNr
aXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKAogICAgICAgICB0MiwKQEAgLTQ4NCwyNSArNDgzLDI1
IEBAIG1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZFdpdGhSZWxvYWQoc2kKIC53cml0ZUJhcnJp
ZXJEb25lOgogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZChzaXplLCBnZXQsIGNl
bGxPcGVyYW5kKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFuZFdpdGhSZWxvYWQoc2l6ZSwgZ2V0
LCBjZWxsT3BlcmFuZCwgbWFjcm8gKCkgZW5kKQorbWFjcm8gd3JpdGVCYXJyaWVyT25PcGVyYW5k
KHNpemUsIGdldCwgY2VsbEZpZWxkTmFtZSkKKyAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRXaXRo
UmVsb2FkKHNpemUsIGdldCwgY2VsbEZpZWxkTmFtZSwgbWFjcm8gKCkgZW5kKQogZW5kCiAKLW1h
Y3JvIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBjZWxsT3BlcmFuZCwgdmFsdWVP
cGVyYW5kKQotICAgIGdldCh2YWx1ZU9wZXJhbmQsIHQxKQorbWFjcm8gd3JpdGVCYXJyaWVyT25P
cGVyYW5kcyhzaXplLCBnZXQsIGNlbGxGaWVsZE5hbWUsIHZhbHVlRmllbGROYW1lKQorICAgIGdl
dCh2YWx1ZUZpZWxkTmFtZSwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6
ZSwgdDEsIHQwLCAud3JpdGVCYXJyaWVyRG9uZSkKICAgICBidHB6IHQwLCAud3JpdGVCYXJyaWVy
RG9uZQogCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kKHNpemUsIGdldCwgY2VsbE9wZXJhbmQp
CisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kKHNpemUsIGdldCwgY2VsbEZpZWxkTmFtZSkKIC53
cml0ZUJhcnJpZXJEb25lOgogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUs
IGdldCwgdmFsdWVPcGVyYW5kLCBsb2FkSGVscGVyKQotICAgIGdldCh2YWx1ZU9wZXJhbmQsIHQx
KQorbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSwg
bG9hZE1hY3JvKQorICAgIGdldCh2YWx1ZUZpZWxkTmFtZSwgdDEpCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDEsIHQwLCAud3JpdGVCYXJyaWVyRG9uZSkKICAgICBidHB6
IHQwLCAud3JpdGVCYXJyaWVyRG9uZQogCi0gICAgbG9hZEhlbHBlcih0MykKKyAgICBsb2FkTWFj
cm8odDMpCiAgICAgc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oCiAgICAgICAgIHQzLAogICAg
ICAgICBtYWNybygpCkBAIC01MTUsMTYgKzUxNCwxNiBAQCBtYWNybyB3cml0ZUJhcnJpZXJPbkds
b2JhbChzaXplLCBnZXQsIHZhCiAud3JpdGVCYXJyaWVyRG9uZToKIGVuZAogCi1tYWNybyB3cml0
ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBnZXQsIHZhbHVlT3BlcmFuZCkKLSAgICB3cml0
ZUJhcnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZhbHVlT3BlcmFuZCwKK21hY3JvIHdyaXRlQmFy
cmllck9uR2xvYmFsT2JqZWN0KHNpemUsIGdldCwgdmFsdWVGaWVsZE5hbWUpCisgICAgd3JpdGVC
YXJyaWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSwKICAgICAgICAgbWFjcm8o
cmVnaXN0ZXJUb1N0b3JlR2xvYmFsKQogICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0s
IHJlZ2lzdGVyVG9TdG9yZUdsb2JhbAogICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2ds
b2JhbE9iamVjdFtyZWdpc3RlclRvU3RvcmVHbG9iYWxdLCByZWdpc3RlclRvU3RvcmVHbG9iYWwK
ICAgICAgICAgZW5kKQogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50KHNpemUsIGdldCwgdmFsdWVPcGVyYW5kKQotICAgIHdyaXRlQmFycmllck9uR2xv
YmFsKHNpemUsIGdldCwgdmFsdWVPcGVyYW5kLAorbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQoc2l6ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSkKKyAgICB3cml0ZUJh
cnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZhbHVlRmllbGROYW1lLAogICAgICAgICBtYWNybyhy
ZWdpc3RlclRvU3RvcmVHbG9iYWwpCiAgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwg
cmVnaXN0ZXJUb1N0b3JlR2xvYmFsCiAgICAgICAgICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xv
YmFsT2JqZWN0W3JlZ2lzdGVyVG9TdG9yZUdsb2JhbF0sIHJlZ2lzdGVyVG9TdG9yZUdsb2JhbApA
QCAtNjY3LDcgKzY2Niw3IEBAIF9sbGludF9vcF9lbnRlcjoKIAogCiBsbGludE9wV2l0aFByb2Zp
bGUob3BfZ2V0X2FyZ3VtZW50LCBPcEdldEFyZ3VtZW50LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgcmV0dXJuKQotICAgIGdldChpbmRleCwgdDIpCisgICAgZ2V0KG1faW5kZXgsIHQyKQog
ICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50W2Nmcl0sIHQwCiAgICAgYmls
dGVxIHQwLCB0MiwgLm9wR2V0QXJndW1lbnRPdXRPZkJvdW5kcwogICAgIGxvYWRxIFRoaXNBcmd1
bWVudE9mZnNldFtjZnIsIHQyLCA4XSwgdDAKQEAgLTY5NCwxMyArNjkzLDEzIEBAIGVuZCkKIAog
CiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RvX3RoaXMsIE9wVG9UaGlzLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICBnZXQoc3JjRHN0LCB0MCkKKyAg
ICBnZXQobV9zcmNEc3QsIHQwKQogICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDAKICAgICBidHFu
eiB0MCwgdGFnTWFzaywgLm9wVG9UaGlzU2xvdwogICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3Qw
XSwgRmluYWxPYmplY3RUeXBlLCAub3BUb1RoaXNTbG93CiAgICAgbG9hZFN0cnVjdHVyZVdpdGhT
Y3JhdGNoKHQwLCB0MSwgdDIsIHQzKQogICAgIG1ldGFkYXRhKHQyLCB0MykKLSAgICBsb2FkcCBP
cFRvVGhpczo6TWV0YWRhdGE6OmNhY2hlZFN0cnVjdHVyZVt0Ml0sIHQyCisgICAgbG9hZHAgT3BU
b1RoaXM6Ok1ldGFkYXRhOjptX2NhY2hlZFN0cnVjdHVyZVt0Ml0sIHQyCiAgICAgYnBuZXEgdDEs
IHQyLCAub3BUb1RoaXNTbG93CiAgICAgZGlzcGF0Y2goKQogCkBAIC03MTEsNyArNzEwLDcgQEAg
ZW5kKQogCiAKIGxsaW50T3Aob3BfY2hlY2tfdGR6LCBPcENoZWNrVGR6LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCkKLSAgICBnZXQodGFyZ2V0LCB0MCkKKyAgICBnZXQobV90YXJnZXQsIHQw
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQogICAgIGJxbmVxIHQx
LCBWYWx1ZUVtcHR5LCAub3BOb3RURFoKICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90aHJv
d190ZHpfZXJyb3IpCkBAIC03MjIsMTQgKzcyMSwxNCBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhS
ZXR1cm4ob3BfbW92LCBPcE1vdiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikK
LSAgICBnZXQoc3JjLCB0MSkKKyAgICBnZXQobV9zcmMsIHQxKQogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUoc2l6ZSwgdDEsIHQyKQogICAgIHJldHVybih0MikKIGVuZCkKIAogCiBsbGludE9w
V2l0aFJldHVybihvcF9ub3QsIE9wTm90LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0
dXJuKQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MikKICAgICB4b3JxIFZhbHVlRmFsc2Us
IHQyCiAgICAgYnRxbnogdDIsIH4xLCAub3BOb3RTbG93CkBAIC03NDQsOCArNzQzLDggQEAgZW5k
KQogCiBtYWNybyBlcXVhbGl0eUNvbXBhcmlzb25PcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmlz
b24pCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KHJocywgdDApCi0gICAgICAgIGdldChs
aHMsIHQyKQorICAgICAgICBnZXQobV9yaHMsIHQwKQorICAgICAgICBnZXQobV9saHMsIHQyKQog
ICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6ZSwgdDAsIHQxLCAuc2xvdykK
ICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQyLCB0MCwgLnNsb3cp
CiAgICAgICAgIGludGVnZXJDb21wYXJpc29uKHQwLCB0MSwgdDApCkBAIC03NjEsNyArNzYwLDcg
QEAgZW5kCiAKIG1hY3JvIGVxdWFsTnVsbENvbXBhcmlzb25PcChuYW1lLCBvcCwgZm4pCiAgICAg
bGxpbnRPcFdpdGhSZXR1cm4obmFtZSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBy
ZXR1cm4pCi0gICAgICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICAgICAgZ2V0KG1fb3BlcmFuZCwg
dDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDAKICAgICAgICAgYnRxbnogdDAsIHRh
Z01hc2ssIC5pbW1lZGlhdGUKICAgICAgICAgYnRibnogSlNDZWxsOjptX2ZsYWdzW3QwXSwgTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQKQEAgLTc5MSw3ICs3
OTAsNyBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Aob3BfbmVxX251bGwsIE9wTmVxCiAKIAogbGxp
bnRPcFdpdGhSZXR1cm4ob3BfaXNfdW5kZWZpbmVkX29yX251bGwsIE9wSXNVbmRlZmluZWRPck51
bGwsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQs
IHQwKQorICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDAK
ICAgICBhbmRxIH5UYWdCaXRVbmRlZmluZWQsIHQwCiAgICAgY3FlcSB0MCwgVmFsdWVOdWxsLCB0
MApAQCAtODAyLDggKzgwMSw4IEBAIGVuZCkKIAogbWFjcm8gc3RyaWN0RXFPcChuYW1lLCBvcCwg
ZXF1YWxpdHlPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KHJocywgdDAp
Ci0gICAgICAgIGdldChsaHMsIHQyKQorICAgICAgICBnZXQobV9yaHMsIHQwKQorICAgICAgICBn
ZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0
MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDApCiAgICAgICAg
IG1vdmUgdDAsIHQyCkBAIC04MzYsOCArODM1LDggQEAgc3RyaWN0RXFPcChuc3RyaWN0ZXEsIE9w
TnN0cmljdGVxLAogCiBtYWNybyBzdHJpY3RFcXVhbGl0eUp1bXBPcChuYW1lLCBvcCwgZXF1YWxp
dHlPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChz
aXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQobGhzLCB0MikKLSAgICAgICAg
Z2V0KHJocywgdDMpCisgICAgICAgIGdldChtX2xocywgdDIpCisgICAgICAgIGdldChtX3Jocywg
dDMpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQwKQogICAgICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQzLCB0MSkKICAgICAgICAgbW92ZSB0MCwg
dDIKQEAgLTg1Myw3ICs4NTIsNyBAQCBtYWNybyBzdHJpY3RFcXVhbGl0eUp1bXBPcChuYW1lLCBv
cCwgZXF1CiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBq
dW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKIAogICAgIC5zbG93OgogICAgICAg
ICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC04NzIsNyArODcxLDcg
QEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJpY3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVP
cChuYW1lLCBvcCwgYXJpdGhtZXRpY09wZXJhdGlvbikKICAgICBsbGludE9wKG9wXyVuYW1lJSwg
b3AsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAgICAgICBnZXQoc3JjRHN0LCB0MCkK
KyAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0
MQogICAgICAgICBicWIgdDEsIHRhZ1R5cGVOdW1iZXIsIC5zbG93CiAgICAgICAgIGFyaXRobWV0
aWNPcGVyYXRpb24odDEsIC5zbG93KQpAQCAtODg2LDcgKzg4NSw3IEBAIG1hY3JvIHByZU9wKG5h
bWUsIG9wLCBhcml0aG1ldGljT3BlcmF0aW8KIGVuZAogCiBsbGludE9wV2l0aFByb2ZpbGUob3Bf
dG9fbnVtYmVyLCBPcFRvTnVtYmVyLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJu
KQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MikKICAgICBicWFlcSB0MiwgdGFnVHlwZU51
bWJlciwgLm9wVG9OdW1iZXJJc0ltbWVkaWF0ZQogICAgIGJ0cXogdDIsIHRhZ1R5cGVOdW1iZXIs
IC5vcFRvTnVtYmVyU2xvdwpAQCAtOTAwLDcgKzg5OSw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0
aFJldHVybihvcF90b19zdHJpbmcsIE9wVG9TdHJpbmcsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29wZXJhbmQsIHQx
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQogICAgIGJ0cW56IHQw
LCB0YWdNYXNrLCAub3BUb1N0cmluZ1Nsb3cKICAgICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0s
IFN0cmluZ1R5cGUsIC5vcFRvU3RyaW5nU2xvdwpAQCAtOTE0LDcgKzkxMyw3IEBAIGVuZCkKIAog
CiBsbGludE9wV2l0aFByb2ZpbGUob3BfdG9fb2JqZWN0LCBPcFRvT2JqZWN0LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQo
bV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MikK
ICAgICBidHFueiB0MiwgdGFnTWFzaywgLm9wVG9PYmplY3RTbG93CiAgICAgYmJiIEpTQ2VsbDo6
bV90eXBlW3QyXSwgT2JqZWN0VHlwZSwgLm9wVG9PYmplY3RTbG93CkBAIC05MjcsMjIgKzkyNiwy
MiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICBnZXQob3Bl
cmFuZCwgdDApCisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRhdGEodDEsIHQyKQotICAgIGxvYWRpcyBPcE5l
Z2F0ZTo6TWV0YWRhdGE6OmFyaXRoUHJvZmlsZVt0MV0sIHQyCisgICAgbG9hZGlzIE9wTmVnYXRl
OjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbdDFdLCB0MgogICAgIGJxYiB0MywgdGFnVHlwZU51
bWJlciwgLm9wTmVnYXRlTm90SW50CiAgICAgYnRpeiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRl
U2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgdGFnVHlwZU51bWJlciwgdDMKICAgICBvcmkgQXJp
dGhQcm9maWxlSW50LCB0MgotICAgIHN0b3JlaSB0MiwgT3BOZWdhdGU6Ok1ldGFkYXRhOjphcml0
aFByb2ZpbGVbdDFdCisgICAgc3RvcmVpIHQyLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQ
cm9maWxlW3QxXQogICAgIHJldHVybih0MykKIC5vcE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQz
LCB0YWdUeXBlTnVtYmVyLCAub3BOZWdhdGVTbG93CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAw
MDAsIHQzCiAgICAgb3JpIEFyaXRoUHJvZmlsZU51bWJlciwgdDIKLSAgICBzdG9yZWkgdDIsIE9w
TmVnYXRlOjpNZXRhZGF0YTo6YXJpdGhQcm9maWxlW3QxXQorICAgIHN0b3JlaSB0MiwgT3BOZWdh
dGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVt0MV0KICAgICByZXR1cm4odDMpCiAKIC5vcE5l
Z2F0ZVNsb3c6CkBAIC05NTYsMTYgKzk1NSwxNiBAQCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3Jl
KG5hbWUsIG9wLCBpbnRlCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAogICAgICAgICBtYWNy
byBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBvcmkgdHlwZSwgJW9wJTo6TWV0YWRhdGE6OmFy
aXRoUHJvZmlsZVt0NV0KKyAgICAgICAgICAgIG9yaSB0eXBlLCAlb3AlOjpNZXRhZGF0YTo6bV9h
cml0aFByb2ZpbGVbdDVdCiAgICAgICAgIGVuZAogCi0gICAgICAgIGdldChyaHMsIHQwKQotICAg
ICAgICBnZXQobGhzLCB0MikKKyAgICAgICAgZ2V0KG1fcmhzLCB0MCkKKyAgICAgICAgZ2V0KG1f
bGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCiAg
ICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQwKQogICAgICAgICBicWIg
dDAsIHRhZ1R5cGVOdW1iZXIsIC5vcDFOb3RJbnQKICAgICAgICAgYnFiIHQxLCB0YWdUeXBlTnVt
YmVyLCAub3AyTm90SW50Ci0gICAgICAgIGdldChkc3QsIHQyKQorICAgICAgICBnZXQobV9kc3Qs
IHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIp
CiAKICAgICAgICAgcHJvZmlsZShBcml0aFByb2ZpbGVJbnRJbnQpCkBAIC05ODQsNyArOTgzLDcg
QEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShuYW1lLCBvcCwgaW50ZQogICAgICAgICBwcm9m
aWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKICAgICAgICAgY2kyZCB0MSwgZnQxCiAgICAgLm9w
MU5vdEludFJlYWR5OgotICAgICAgICBnZXQoZHN0LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0
MikKICAgICAgICAgYWRkcSB0YWdUeXBlTnVtYmVyLCB0MAogICAgICAgICBmcTJkIHQwLCBmdDAK
ICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwgZnQwKQpAQCAtOTk1LDcgKzk5NCw3IEBAIG1h
Y3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUobmFtZSwgb3AsIGludGUKIAogICAgIC5vcDJOb3RJbnQ6
CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBkZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29u
ZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAgZ2V0KGRzdCwgdDIpCisgICAgICAgIGdldCht
X2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIHRhZ1R5cGVOdW1iZXIsIC5zbG93CiAgICAgICAg
IHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVyKQogICAgICAgICBjaTJkIHQwLCBmdDAKQEAg
LTEwNzQsNyArMTA3Myw3IEBAIGJpbmFyeU9wKHN1YiwgT3BTdWIsCiAKIAogbGxpbnRPcFdpdGhS
ZXR1cm4ob3BfdW5zaWduZWQsIE9wVW5zaWduZWQsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyKQogICAgIGJpbHQgdDIsIDAs
IC5vcFVuc2lnbmVkU2xvdwogICAgIHJldHVybih0MikKQEAgLTEwODYsOCArMTA4NSw4IEBAIGVu
ZCkKIAogbWFjcm8gY29tbW9uQml0T3Aob3BLaW5kLCBuYW1lLCBvcCwgb3BlcmF0aW9uKQogICAg
IG9wS2luZChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJu
KQotICAgICAgICBnZXQocmhzLCB0MCkKLSAgICAgICAgZ2V0KGxocywgdDIpCisgICAgICAgIGdl
dChtX3JocywgdDApCisgICAgICAgIGdldChtX2xocywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQyLCB0MCkKICAgICAgICAgYnFiIHQwLCB0YWdUeXBlTnVtYmVyLCAuc2xvdwpAQCAt
MTEzMSw3ICsxMTMwLDcgQEAgYml0T3BQcm9maWxlZChiaXR4b3IsIE9wQml0eG9yLAogICAgIG1h
Y3JvIChsZWZ0LCByaWdodCkgeG9yaSBsZWZ0LCByaWdodCBlbmQpCiAKIGxsaW50T3BXaXRoUHJv
ZmlsZShvcF9iaXRub3QsIE9wQml0bm90LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0
dXJuKQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6ZSwgdDAsIHQzLCAub3BCaXROb3RTbG93KQog
ICAgIG5vdGkgdDMKICAgICBvcnEgdGFnVHlwZU51bWJlciwgdDMKQEAgLTExNDMsMTYgKzExNDIs
MTYgQEAgZW5kKQogCiAKIGxsaW50T3Aob3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSwgT3BPdmVy
cmlkZXNIYXNJbnN0YW5jZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZ2V0KGRz
dCwgdDMpCisgICAgZ2V0KG1fZHN0LCB0MykKIAotICAgIGdldChoYXNJbnN0YW5jZVZhbHVlLCB0
MSkKKyAgICBnZXQobV9oYXNJbnN0YW5jZVZhbHVlLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQxLCB0MCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIKICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QyXSwgdDIKICAgICBsb2FkcCBKU0dsb2Jh
bE9iamVjdDo6bV9mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvblt0Ml0sIHQy
CiAgICAgYnFuZXEgdDAsIHQyLCAub3BPdmVycmlkZXNIYXNJbnN0YW5jZU5vdERlZmF1bHRTeW1i
b2wKIAotICAgIGdldChjb25zdHJ1Y3RvciwgdDEpCisgICAgZ2V0KG1fY29uc3RydWN0b3IsIHQx
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQogICAgIHRieiBKU0Nl
bGw6Om1fZmxhZ3NbdDBdLCBJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlLCB0MQogICAgIG9y
cSBWYWx1ZUZhbHNlLCB0MQpAQCAtMTE2Niw3ICsxMTY1LDcgQEAgZW5kKQogCiAKIGxsaW50T3BX
aXRoUmV0dXJuKG9wX2lzX2VtcHR5LCBPcElzRW1wdHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29wZXJhbmQsIHQx
KQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwKQogICAgIGNxZXEgdDAs
IFZhbHVlRW1wdHksIHQzCiAgICAgb3JxIFZhbHVlRmFsc2UsIHQzCkBAIC0xMTc1LDcgKzExNzQs
NyBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfdW5kZWZpbmVkLCBPcElzVW5k
ZWZpbmVkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVy
YW5kLCB0MSkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHNpemUsIHQxLCB0MCkKICAgICBidHF6IHQwLCB0YWdNYXNrLCAub3BJc1VuZGVmaW5lZENl
bGwKICAgICBjcWVxIHQwLCBWYWx1ZVVuZGVmaW5lZCwgdDMKQEAgLTExOTYsNyArMTE5NSw3IEBA
IGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc19ib29sZWFuLCBPcElzQm9vbGVhbiwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQob3BlcmFuZCwgdDEp
CisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MSwgdDApCiAgICAgeG9ycSBWYWx1ZUZhbHNlLCB0MAogICAgIHRxeiB0MCwgfjEsIHQwCkBA
IC0xMjA2LDcgKzEyMDUsNyBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfbnVt
YmVyLCBPcElzTnVtYmVyLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAg
IGdldChvcGVyYW5kLCB0MSkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkKICAgICB0cW56IHQwLCB0YWdUeXBlTnVtYmVyLCB0
MQogICAgIG9ycSBWYWx1ZUZhbHNlLCB0MQpAQCAtMTIxNSw4ICsxMjE0LDggQEAgZW5kKQogCiAK
IGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX2NlbGxfd2l0aF90eXBlLCBPcElzQ2VsbFdpdGhUeXBl
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldHUoc2l6ZSwgT3BJ
c0NlbGxXaXRoVHlwZSwgdHlwZSwgdDApCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldHUo
c2l6ZSwgT3BJc0NlbGxXaXRoVHlwZSwgbV90eXBlLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0
MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MykKICAgICBidHFueiB0
MywgdGFnTWFzaywgLm5vdENlbGxDYXNlCiAgICAgY2JlcSBKU0NlbGw6Om1fdHlwZVt0M10sIHQw
LCB0MQpAQCAtMTIyOCw3ICsxMjI3LDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9w
X2lzX29iamVjdCwgT3BJc09iamVjdCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVy
bikKLSAgICBnZXQob3BlcmFuZCwgdDEpCisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDApCiAgICAgYnRxbnogdDAsIHRhZ01hc2ss
IC5vcElzT2JqZWN0Tm90Q2VsbAogICAgIGNiYWVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0
VHlwZSwgdDEKQEAgLTEyNjcsMTIgKzEyNjYsMTIgQEAgZW5kCiAKIGxsaW50T3BXaXRoTWV0YWRh
dGEob3BfZ2V0X2J5X2lkX2RpcmVjdCwgT3BHZXRCeUlkRGlyZWN0LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBtZXRhZGF0YSh0MiwgdDApCi0gICAg
Z2V0KGJhc2UsIHQwKQorICAgIGdldChtX2Jhc2UsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0QnlJZERpcmVjdFNsb3cpCiAgICAgbG9hZGkg
SlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgdDEKLSAgICBsb2FkaSBPcEdldEJ5SWREaXJlY3Q6
Ok1ldGFkYXRhOjpzdHJ1Y3R1cmVbdDJdLCB0MAorICAgIGxvYWRpIE9wR2V0QnlJZERpcmVjdDo6
TWV0YWRhdGE6Om1fc3RydWN0dXJlW3QyXSwgdDAKICAgICBiaW5lcSB0MCwgdDEsIC5vcEdldEJ5
SWREaXJlY3RTbG93Ci0gICAgbG9hZGkgT3BHZXRCeUlkRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0
W3QyXSwgdDEKKyAgICBsb2FkaSBPcEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjptX29mZnNldFt0
Ml0sIHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDMsIHQwKQogICAg
IHZhbHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3QsIHQyLCB0MCkKICAgICByZXR1cm4odDApCkBA
IC0xMjg1LDE2ICsxMjg0LDE2IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRf
YnlfaWQsIE9wR2V0QnlJZCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCBy
ZXR1cm4pCiAgICAgbWV0YWRhdGEodDIsIHQxKQotICAgIGxvYWRiIE9wR2V0QnlJZDo6TWV0YWRh
dGE6Om1vZGVbdDJdLCB0MQotICAgIGdldChiYXNlLCB0MCkKKyAgICBsb2FkYiBPcEdldEJ5SWQ6
Ok1ldGFkYXRhOjptX21vZGVbdDJdLCB0MQorICAgIGdldChtX2Jhc2UsIHQwKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0QnlJZFNsb3cpCiAKIC5v
cEdldEJ5SWREZWZhdWx0OgogICAgIGJibmVxIHQxLCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6OkRl
ZmF1bHQsIC5vcEdldEJ5SWRQcm90b0xvYWQKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJl
SURbdDNdLCB0MQotICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5k
ZWZhdWx0TW9kZS5zdHJ1Y3R1cmVbdDJdLCB0MAorICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRh
dGE6Om1fbW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0cnVjdHVyZVt0Ml0sIHQwCiAgICAgYmlu
ZXEgdDAsIHQxLCAub3BHZXRCeUlkU2xvdwotICAgIGxvYWRpcyBPcEdldEJ5SWQ6Ok1ldGFkYXRh
Ojptb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0W3QyXSwgdDEKKyAgICBsb2Fk
aXMgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuY2FjaGVk
T2Zmc2V0W3QyXSwgdDEKICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0Mywg
dDApCiAgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgdDIsIHQwKQogICAgIHJldHVybih0MCkK
QEAgLTEzMDIsMTAgKzEzMDEsMTAgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQs
IE9wR2V0QgogLm9wR2V0QnlJZFByb3RvTG9hZDoKICAgICBiYm5lcSB0MSwgY29uc3RleHByIEdl
dEJ5SWRNb2RlOjpQcm90b0xvYWQsIC5vcEdldEJ5SWRBcnJheUxlbmd0aAogICAgIGxvYWRpIEpT
Q2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIHQxCi0gICAgbG9hZGkgT3BHZXRCeUlkOjpNZXRhZGF0
YTo6bW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuc3RydWN0dXJlW3QyXSwgdDMKKyAgICBsb2Fk
aSBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVj
dHVyZVt0Ml0sIHQzCiAgICAgYmluZXEgdDMsIHQxLCAub3BHZXRCeUlkU2xvdwotICAgIGxvYWRp
cyBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5jYWNoZWRP
ZmZzZXRbdDJdLCB0MQotICAgIGxvYWRwIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0
YS5wcm90b0xvYWRNb2RlLmNhY2hlZFNsb3RbdDJdLCB0MworICAgIGxvYWRpcyBPcEdldEJ5SWQ6
Ok1ldGFkYXRhOjptX21vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLmNhY2hlZE9mZnNldFt0Ml0s
IHQxCisgICAgbG9hZHAgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEucHJvdG9M
b2FkTW9kZS5jYWNoZWRTbG90W3QyXSwgdDMKICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zm
c2V0KHQxLCB0MywgdDApCiAgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJZCwgdDIsIHQwKQogICAg
IHJldHVybih0MCkKQEAgLTEzMTMsNyArMTMxMiw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
Z2V0X2J5X2lkLCBPcEdldEIKIC5vcEdldEJ5SWRBcnJheUxlbmd0aDoKICAgICBiYm5lcSB0MSwg
Y29uc3RleHByIEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aCwgLm9wR2V0QnlJZFVuc2V0CiAgICAg
bW92ZSB0MywgdDAKLSAgICBhcnJheVByb2ZpbGUoT3BHZXRCeUlkOjpNZXRhZGF0YTo6bW9kZU1l
dGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHQwLCB0MiwgdDUpCisgICAgYXJy
YXlQcm9maWxlKE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3Ro
TW9kZS5hcnJheVByb2ZpbGUsIHQwLCB0MiwgdDUpCiAgICAgYnRpeiB0MCwgSXNBcnJheSwgLm9w
R2V0QnlJZFNsb3cKICAgICBidGl6IHQwLCBJbmRleGluZ1NoYXBlTWFzaywgLm9wR2V0QnlJZFNs
b3cKICAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRy
czo6anNWYWx1ZSwgY29uc3RleHByIEpTVkFMVUVfR0lHQUNBR0VfTUFTSywgSlNPYmplY3Q6Om1f
YnV0dGVyZmx5W3QzXSwgdDAsIHQxKQpAQCAtMTMyNSw3ICsxMzI0LDcgQEAgbGxpbnRPcFdpdGhN
ZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QgogCiAub3BHZXRCeUlkVW5zZXQ6CiAgICAgbG9h
ZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgdDEKLSAgICBsb2FkaSBPcEdldEJ5SWQ6Ok1l
dGFkYXRhOjptb2RlTWV0YWRhdGEudW5zZXRNb2RlLnN0cnVjdHVyZVt0Ml0sIHQwCisgICAgbG9h
ZGkgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEudW5zZXRNb2RlLnN0cnVjdHVy
ZVt0Ml0sIHQwCiAgICAgYmluZXEgdDAsIHQxLCAub3BHZXRCeUlkU2xvdwogICAgIHZhbHVlUHJv
ZmlsZShPcEdldEJ5SWQsIHQyLCBWYWx1ZVVuZGVmaW5lZCkKICAgICByZXR1cm4oVmFsdWVVbmRl
ZmluZWQpCkBAIC0xMzM3LDEwICsxMzM2LDEwIEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFk
YXRhKG9wX3B1dF9ieV9pZCwgT3BQdXRCeUlkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
bWV0YWRhdGEsIHJldHVybikKLSAgICBnZXQoYmFzZSwgdDMpCisgICAgZ2V0KG1fYmFzZSwgdDMp
CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDMsIHQwLCAub3BQdXRCeUlk
U2xvdykKICAgICBtZXRhZGF0YSh0NSwgdDIpCi0gICAgbG9hZGlzIE9wUHV0QnlJZDo6TWV0YWRh
dGE6Om9sZFN0cnVjdHVyZVt0NV0sIHQyCisgICAgbG9hZGlzIE9wUHV0QnlJZDo6TWV0YWRhdGE6
Om1fb2xkU3RydWN0dXJlW3Q1XSwgdDIKICAgICBiaW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVy
ZUlEW3QwXSwgLm9wUHV0QnlJZFNsb3cKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToK
QEAgLTEzNDgsMTAgKzEzNDcsMTAgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9wdXRfYnlfaWQs
IE9wUHV0QgogICAgICMgdDIgLT4gY3VycmVudCBzdHJ1Y3R1cmUgSUQKICAgICAjIHQwIC0+IG9i
amVjdCBiYXNlCiAKLSAgICBnZXQodmFsdWUsIHQxKQorICAgIGdldChtX3ZhbHVlLCB0MSkKICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MykKIAotICAgIGxvYWRpIE9wUHV0
QnlJZDo6TWV0YWRhdGE6OmZsYWdzW3Q1XSwgdDEKKyAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFk
YXRhOjptX2ZsYWdzW3Q1XSwgdDEKIAogICAgICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKICAg
ICAjIHQwIC0+IG9iamVjdCBiYXNlCkBAIC0xNDI4LDIwICsxNDI3LDIwIEBAIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICBiaW5lcSB0MSwgSlNDZWxsOjptX3N0
cnVjdHVyZUlEW3QzXSwgLm9wUHV0QnlJZFNsb3cKIAogLm9wUHV0QnlJZERvbmVDaGVja2luZ1R5
cGVzOgotICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om5ld1N0cnVjdHVyZVt0NV0sIHQx
CisgICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bV9uZXdTdHJ1Y3R1cmVbdDVdLCB0MQog
ICAgIAogICAgIGJ0aXogdDEsIC5vcFB1dEJ5SWROb3RUcmFuc2l0aW9uCiAKICAgICAjIFRoaXMg
aXMgdGhlIHRyYW5zaXRpb24gY2FzZS4gdDEgaG9sZHMgdGhlIG5ldyBzdHJ1Y3R1cmVJRC4gdDIg
aG9sZHMgdGhlIG9sZCBzdHJ1Y3R1cmUgSUQuCiAgICAgIyBJZiB3ZSBoYXZlIGEgY2hhaW4sIHdl
IG5lZWQgdG8gY2hlY2sgaXQuIHQwIGlzIHRoZSBiYXNlLiBXZSBtYXkgY2xvYmJlciB0MSB0byB1
c2UgaXQgYXMKICAgICAjIHNjcmF0Y2guCi0gICAgbG9hZHAgT3BQdXRCeUlkOjpNZXRhZGF0YTo6
c3RydWN0dXJlQ2hhaW5bdDVdLCB0MworICAgIGxvYWRwIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1f
c3RydWN0dXJlQ2hhaW5bdDVdLCB0MwogICAgIGJ0cHogdDMsIC5vcFB1dEJ5SWRUcmFuc2l0aW9u
RGlyZWN0CiAKICAgICBzdHJ1Y3R1cmVJRFRvU3RydWN0dXJlV2l0aFNjcmF0Y2godDIsIHQxLCB0
MykKIAogICAgICMgcmVsb2FkIHRoZSBTdHJ1Y3R1cmVDaGFpbiBzaW5jZSB3ZSB1c2VkIHQzIGFz
IGEgc2NyYXRjaCBhYm92ZQotICAgIGxvYWRwIE9wUHV0QnlJZDo6TWV0YWRhdGE6OnN0cnVjdHVy
ZUNoYWluW3Q1XSwgdDMKKyAgICBsb2FkcCBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjptX3N0cnVjdHVy
ZUNoYWluW3Q1XSwgdDMKIAogICAgIGxvYWRwIFN0cnVjdHVyZUNoYWluOjptX3ZlY3Rvclt0M10s
IHQzCiAgICAgYXNzZXJ0KG1hY3JvIChvaykgYnRwbnogdDMsIG9rIGVuZCkKQEAgLTE0NjIsMjUg
KzE0NjEsMjUgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9wdXRfYnlfaWQsIE9wUHV0QgogCiAu
b3BQdXRCeUlkVHJhbnNpdGlvbkNoYWluRG9uZToKICAgICAjIFJlbG9hZCB0aGUgbmV3IHN0cnVj
dHVyZSwgc2luY2Ugd2UgY2xvYmJlcmVkIGl0IGFib3ZlLgotICAgIGxvYWRpIE9wUHV0QnlJZDo6
TWV0YWRhdGE6Om5ld1N0cnVjdHVyZVt0NV0sIHQxCisgICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRh
ZGF0YTo6bV9uZXdTdHJ1Y3R1cmVbdDVdLCB0MQogCiAub3BQdXRCeUlkVHJhbnNpdGlvbkRpcmVj
dDoKICAgICBzdG9yZWkgdDEsIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0KLSAgICB3cml0ZUJh
cnJpZXJPbk9wZXJhbmRXaXRoUmVsb2FkKHNpemUsIGdldCwgYmFzZSwgbWFjcm8gKCkKKyAgICB3
cml0ZUJhcnJpZXJPbk9wZXJhbmRXaXRoUmVsb2FkKHNpemUsIGdldCwgbV9iYXNlLCBtYWNybyAo
KQogICAgICAgICAjIFJlbG9hZCBtZXRhZGF0YSBpbnRvIHQ1CiAgICAgICAgIG1ldGFkYXRhKHQ1
LCB0MSkKICAgICAgICAgIyBSZWxvYWQgYmFzZSBpbnRvIHQwCi0gICAgICAgIGdldChiYXNlLCB0
MSkKKyAgICAgICAgZ2V0KG1fYmFzZSwgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDEsIHQwKQogICAgIGVuZCkKIAogLm9wUHV0QnlJZE5vdFRyYW5zaXRpb246CiAg
ICAgIyBUaGUgb25seSB0aGluZyBsaXZlIHJpZ2h0IG5vdyBpcyB0MCwgd2hpY2ggaG9sZHMgdGhl
IGJhc2UuCi0gICAgZ2V0KHZhbHVlLCB0MSkKKyAgICBnZXQobV92YWx1ZSwgdDEpCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIpCi0gICAgbG9hZGkgT3BQdXRCeUlkOjpN
ZXRhZGF0YTo6b2Zmc2V0W3Q1XSwgdDEKKyAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpt
X29mZnNldFt0NV0sIHQxCiAgICAgc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQw
LCB0MikKLSAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwgdmFsdWUp
CisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1fYmFzZSwgbV92YWx1ZSkK
ICAgICBkaXNwYXRjaCgpCiAKIC5vcFB1dEJ5SWRTbG93OgpAQCAtMTQ5MSw3ICsxNDkwLDcgQEAg
ZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0QnlWYWwsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIG1hY3JvIGZp
bmlzaEdldEJ5VmFsKHJlc3VsdCwgc2NyYXRjaCkKLSAgICAgICAgZ2V0KGRzdCwgc2NyYXRjaCkK
KyAgICAgICAgZ2V0KG1fZHN0LCBzY3JhdGNoKQogICAgICAgICBzdG9yZXEgcmVzdWx0LCBbY2Zy
LCBzY3JhdGNoLCA4XQogICAgICAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeVZhbCwgdDUsIHJlc3Vs
dCkKICAgICAgICAgZGlzcGF0Y2goKQpAQCAtMTUxMCwxMyArMTUwOSwxMyBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAKICAgICBtZXRhZGF0YSh0NSwgdDIpCiAK
LSAgICBnZXQoYmFzZSwgdDIpCisgICAgZ2V0KG1fYmFzZSwgdDIpCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDIsIHQwLCAub3BHZXRCeVZhbFNsb3cpCiAKICAgICBtb3Zl
IHQwLCB0MgotICAgIGFycmF5UHJvZmlsZShPcEdldEJ5VmFsOjpNZXRhZGF0YTo6YXJyYXlQcm9m
aWxlLCB0MiwgdDUsIHQxKQorICAgIGFycmF5UHJvZmlsZShPcEdldEJ5VmFsOjpNZXRhZGF0YTo6
bV9hcnJheVByb2ZpbGUsIHQyLCB0NSwgdDEpCiAKLSAgICBnZXQocHJvcGVydHksIHQzKQorICAg
IGdldChtX3Byb3BlcnR5LCB0MykKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6
ZSwgdDMsIHQxLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgc3hpMnEgdDEsIHQxCiAKQEAgLTE1Mjks
NyArMTUyOCw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKIAog
Lm9wR2V0QnlWYWxJc0NvbnRpZ3VvdXM6CiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdI
ZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0M10sIC5vcEdl
dEJ5VmFsU2xvdwotICAgIGdldChkc3QsIHQwKQorICAgIGdldChtX2RzdCwgdDApCiAgICAgbG9h
ZHEgW3QzLCB0MSwgOF0sIHQyCiAgICAgYnRxeiB0MiwgLm9wR2V0QnlWYWxTbG93CiAgICAgam1w
IC5vcEdldEJ5VmFsRG9uZQpAQCAtMTUzNyw3ICsxNTM2LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9nZXRfYnlfdmFsLCBPcEdldAogLm9wR2V0QnlWYWxOb3RDb250aWd1b3VzOgogICAgIGJp
bmVxIHQyLCBEb3VibGVTaGFwZSwgLm9wR2V0QnlWYWxOb3REb3VibGUKICAgICBiaWFlcSB0MSwg
LXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGlj
TGVuZ3RoW3QzXSwgLm9wR2V0QnlWYWxTbG93Ci0gICAgZ2V0KGRzdCwgdDApCisgICAgZ2V0KG1f
ZHN0LCB0MCkKICAgICBsb2FkZCBbdDMsIHQxLCA4XSwgZnQwCiAgICAgYmRuZXF1biBmdDAsIGZ0
MCwgLm9wR2V0QnlWYWxTbG93CiAgICAgZmQycSBmdDAsIHQyCkBAIC0xNTQ4LDcgKzE1NDcsNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAgICAgc3ViaSBBcnJh
eVN0b3JhZ2VTaGFwZSwgdDIKICAgICBiaWEgdDIsIFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAt
IEFycmF5U3RvcmFnZVNoYXBlLCAub3BHZXRCeVZhbE5vdEluZGV4ZWRTdG9yYWdlCiAgICAgYmlh
ZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhz
LnZlY3Rvckxlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwotICAgIGdldChkc3QsIHQwKQorICAg
IGdldChtX2RzdCwgdDApCiAgICAgbG9hZHEgQXJyYXlTdG9yYWdlOjptX3ZlY3Rvclt0MywgdDEs
IDhdLCB0MgogICAgIGJ0cXogdDIsIC5vcEdldEJ5VmFsU2xvdwogCkBAIC0xNjYxLDI0ICsxNjYw
LDI0IEBAIG1hY3JvIHB1dEJ5VmFsT3AobmFtZSwgb3ApCiAgICAgICAgIG1hY3JvIGNvbnRpZ3Vv
dXNQdXRCeVZhbChzdG9yZUNhbGxiYWNrKQogICAgICAgICAgICAgYmlhZXEgdDMsIC1zaXplb2Yg
SW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0
MF0sIC5vdXRPZkJvdW5kcwogICAgICAgICAuc3RvcmVSZXN1bHQ6Ci0gICAgICAgICAgICBnZXQo
dmFsdWUsIHQyKQorICAgICAgICAgICAgZ2V0KG1fdmFsdWUsIHQyKQogICAgICAgICAgICAgc3Rv
cmVDYWxsYmFjayh0MiwgdDEsIFt0MCwgdDMsIDhdKQogICAgICAgICAgICAgZGlzcGF0Y2goKQog
CiAgICAgICAgIC5vdXRPZkJvdW5kczoKICAgICAgICAgICAgIGJpYWVxIHQzLCAtc2l6ZW9mIElu
ZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy52ZWN0b3JMZW5ndGhbdDBd
LCAub3BQdXRCeVZhbE91dE9mQm91bmRzCi0gICAgICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0
YWRhdGE6OmFycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQorICAgICAgICAgICAgc3Rv
cmViIDEsICVvcCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1
XQogICAgICAgICAgICAgYWRkaSAxLCB0MywgdDIKICAgICAgICAgICAgIHN0b3JlaSB0MiwgLXNp
emVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVu
Z3RoW3QwXQogICAgICAgICAgICAgam1wIC5zdG9yZVJlc3VsdAogICAgICAgICBlbmQKIAotICAg
ICAgICBnZXQoYmFzZSwgdDApCisgICAgICAgIGdldChtX2Jhc2UsIHQwKQogICAgICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlQ2VsbChzaXplLCB0MCwgdDEsIC5vcFB1dEJ5VmFsU2xvdykKICAg
ICAgICAgbW92ZSB0MSwgdDIKICAgICAgICAgbWV0YWRhdGEodDUsIHQwKQotICAgICAgICBhcnJh
eVByb2ZpbGUoJW9wJTo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZSwgdDIsIHQ1LCB0MCkKLSAgICAg
ICAgZ2V0KHByb3BlcnR5LCB0MCkKKyAgICAgICAgYXJyYXlQcm9maWxlKCVvcCU6Ok1ldGFkYXRh
OjptX2FycmF5UHJvZmlsZSwgdDIsIHQ1LCB0MCkKKyAgICAgICAgZ2V0KG1fcHJvcGVydHksIHQw
KQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6ZSwgdDAsIHQzLCAub3BQ
dXRCeVZhbFNsb3cpCiAgICAgICAgIHN4aTJxIHQzLCB0MwogICAgICAgICBsb2FkQ2FnZWQoX2df
Z2lnYWNhZ2VCYXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6anNWYWx1ZSwgY29uc3RleHBy
IEpTVkFMVUVfR0lHQUNBR0VfTUFTSywgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QxXSwgdDAsIHRh
Z1R5cGVOdW1iZXIpCkBAIC0xNjkxLDcgKzE2OTAsNyBAQCBtYWNybyBwdXRCeVZhbE9wKG5hbWUs
IG9wKQogICAgICAgICAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgb3BlcmFu
ZCwgc2NyYXRjaCkKICAgICAgICAgICAgICAgICBicWIgc2NyYXRjaCwgdGFnVHlwZU51bWJlciwg
Lm9wUHV0QnlWYWxTbG93CiAgICAgICAgICAgICAgICAgc3RvcmVxIHNjcmF0Y2gsIGFkZHJlc3MK
LSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwg
dmFsdWUpCisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQs
IG1fYmFzZSwgbV92YWx1ZSkKICAgICAgICAgICAgIGVuZCkKIAogICAgIC5vcFB1dEJ5VmFsTm90
SW50MzI6CkBAIC0xNzA4LDcgKzE3MDcsNyBAQCBtYWNybyBwdXRCeVZhbE9wKG5hbWUsIG9wKQog
ICAgICAgICAgICAgICAgIGJkbmVxdW4gZnQwLCBmdDAsIC5vcFB1dEJ5VmFsU2xvdwogICAgICAg
ICAgICAgLnJlYWR5OgogICAgICAgICAgICAgICAgIHN0b3JlZCBmdDAsIGFkZHJlc3MKLSAgICAg
ICAgICAgICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwgdmFsdWUp
CisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1fYmFz
ZSwgbV92YWx1ZSkKICAgICAgICAgICAgIGVuZCkKIAogICAgIC5vcFB1dEJ5VmFsTm90RG91Ymxl
OgpAQCAtMTcxNyw3ICsxNzE2LDcgQEAgbWFjcm8gcHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAg
ICAgICAgIG1hY3JvIChvcGVyYW5kLCBzY3JhdGNoLCBhZGRyZXNzKQogICAgICAgICAgICAgICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgb3BlcmFuZCwgc2NyYXRjaCkKICAgICAgICAg
ICAgICAgICBzdG9yZXEgc2NyYXRjaCwgYWRkcmVzcwotICAgICAgICAgICAgICAgIHdyaXRlQmFy
cmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBiYXNlLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICB3
cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9iYXNlLCBtX3ZhbHVlKQogICAgICAg
ICAgICAgZW5kKQogCiAgICAgLm9wUHV0QnlWYWxOb3RDb250aWd1b3VzOgpAQCAtMTcyNSwxNCAr
MTcyNCwxNCBAQCBtYWNybyBwdXRCeVZhbE9wKG5hbWUsIG9wKQogICAgICAgICBiaWFlcSB0Mywg
LXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMudmVjdG9y
TGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxPdXRPZkJvdW5kcwogICAgICAgICBidHF6IEFycmF5U3Rv
cmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XSwgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VFbXB0eQog
ICAgIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQ6Ci0gICAgICAgIGdldCh2YWx1
ZSwgdDIpCisgICAgICAgIGdldChtX3ZhbHVlLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MiwgdDEpCiAgICAgICAgIHN0b3JlcSB0MSwgQXJyYXlTdG9yYWdlOjpt
X3ZlY3Rvclt0MCwgdDMsIDhdCi0gICAgICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwg
Z2V0LCBiYXNlLCB2YWx1ZSkKKyAgICAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBn
ZXQsIG1fYmFzZSwgbV92YWx1ZSkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLm9wUHV0QnlW
YWxBcnJheVN0b3JhZ2VFbXB0eToKLSAgICAgICAgc3RvcmViIDEsICVvcCU6Ok1ldGFkYXRhOjph
cnJheVByb2ZpbGUubV9tYXlTdG9yZVRvSG9sZVt0NV0KKyAgICAgICAgc3RvcmViIDEsICVvcCU6
Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQogICAgICAgICBh
ZGRpIDEsIEFycmF5U3RvcmFnZTo6bV9udW1WYWx1ZXNJblZlY3Rvclt0MF0KICAgICAgICAgYmli
IHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy5w
dWJsaWNMZW5ndGhbdDBdLCAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3JlUmVzdWx0CiAgICAg
ICAgIGFkZGkgMSwgdDMsIHQxCkBAIC0xNzQwLDcgKzE3MzksNyBAQCBtYWNybyBwdXRCeVZhbE9w
KG5hbWUsIG9wKQogICAgICAgICBqbXAgLm9wUHV0QnlWYWxBcnJheVN0b3JhZ2VTdG9yZVJlc3Vs
dAogCiAgICAgLm9wUHV0QnlWYWxPdXRPZkJvdW5kczoKLSAgICAgICAgc3RvcmViIDEsICVvcCU6
Ok1ldGFkYXRhOjphcnJheVByb2ZpbGUubV9vdXRPZkJvdW5kc1t0NV0KKyAgICAgICAgc3RvcmVi
IDEsICVvcCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX291dE9mQm91bmRzW3Q1XQogICAg
IC5vcFB1dEJ5VmFsU2xvdzoKICAgICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhf
JW5hbWUlKQogICAgICAgICBkaXNwYXRjaCgpCkBAIC0xNzU0LDE0ICsxNzUzLDE0IEBAIHB1dEJ5
VmFsT3AocHV0X2J5X3ZhbF9kaXJlY3QsIE9wUHV0QnlWYWwKIAogbWFjcm8gbGxpbnRKdW1wVHJ1
ZU9yRmFsc2VPcChuYW1lLCBvcCwgY29uZGl0aW9uT3ApCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9w
XyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBn
ZXQoY29uZGl0aW9uLCB0MSkKKyAgICAgICAgZ2V0KG1fY29uZGl0aW9uLCB0MSkKICAgICAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDApCiAgICAgICAgIGJ0cW56IHQwLCB+
MHhmLCAuc2xvdwogICAgICAgICBjb25kaXRpb25PcCh0MCwgLnRhcmdldCkKICAgICAgICAgZGlz
cGF0Y2goKQogCiAgICAgLnRhcmdldDoKLSAgICAgICAganVtcCh0YXJnZXQpCisgICAgICAgIGp1
bXAobV90YXJnZXQpCiAKICAgICAuc2xvdzoKICAgICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9z
bG93X3BhdGhfJW5hbWUlKQpAQCAtMTc3Miw3ICsxNzcxLDcgQEAgZW5kCiAKIG1hY3JvIGVxdWFs
TnVsbEp1bXBPcChuYW1lLCBvcCwgY2VsbEhhbmRsZXIsIGltbWVkaWF0ZUhhbmRsZXIpCiAgICAg
bGxpbnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRp
c3BhdGNoKQotICAgICAgICBnZXQodmFsdWUsIHQwKQorICAgICAgICBnZXQobV92YWx1ZSwgdDAp
CiAgICAgICAgIGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQogICAgICAgICBsb2FkcSBbY2Zy
LCB0MCwgOF0sIHQwCiAgICAgICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAuaW1tZWRpYXRlCkBAIC0x
NzgxLDcgKzE3ODAsNyBAQCBtYWNybyBlcXVhbE51bGxKdW1wT3AobmFtZSwgb3AsIGNlbGxIYW5k
CiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC50YXJnZXQ6Ci0gICAgICAgIGp1bXAodGFyZ2V0
KQorICAgICAgICBqdW1wKG1fdGFyZ2V0KQogCiAgICAgLmltbWVkaWF0ZToKICAgICAgICAgYW5k
cSB+VGFnQml0VW5kZWZpbmVkLCB0MApAQCAtMTgxMiw4ICsxODExLDggQEAgZXF1YWxOdWxsSnVt
cE9wKGpuZXFfbnVsbCwgT3BKbmVxTnVsbCwKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2pu
ZXFfcHRyLCBPcEpuZXFQdHIsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwg
cmV0dXJuKQotICAgIGdldCh2YWx1ZSwgdDApCi0gICAgZ2V0KHNwZWNpYWxQb2ludGVyLCB0MSkK
KyAgICBnZXQobV92YWx1ZSwgdDApCisgICAgZ2V0KG1fc3BlY2lhbFBvaW50ZXIsIHQxKQogICAg
IGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxP
YmplY3RbdDJdLCB0MgogICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX3NwZWNpYWxQb2ludGVy
c1t0MiwgdDEsIFB0clNpemVdLCB0MQpAQCAtMTgyMiwxNiArMTgyMSwxNiBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX2puZXFfcHRyLCBPcEpuZXFQCiAKIC5vcEpuZXFQdHJUYXJnZXQ6CiAgICAg
bWV0YWRhdGEodDUsIHQwKQotICAgIHN0b3JlYiAxLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjpoYXNK
dW1wZWRbdDVdCi0gICAgZ2V0KHRhcmdldCwgdDApCisgICAgc3RvcmViIDEsIE9wSm5lcVB0cjo6
TWV0YWRhdGE6Om1faGFzSnVtcGVkW3Q1XQorICAgIGdldChtX3RhcmdldCwgdDApCiAgICAganVt
cEltcGwodDApCiBlbmQpCiAKIAogbWFjcm8gY29tcGFyZUp1bXBPcChuYW1lLCBvcCwgaW50ZWdl
ckNvbXBhcmUsIGRvdWJsZUNvbXBhcmUpCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwg
b3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQobGhzLCB0
MikKLSAgICAgICAgZ2V0KHJocywgdDMpCisgICAgICAgIGdldChtX2xocywgdDIpCisgICAgICAg
IGdldChtX3JocywgdDMpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIs
IHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQzLCB0MSkKICAgICAg
ICAgYnFiIHQwLCB0YWdUeXBlTnVtYmVyLCAub3AxTm90SW50CkBAIC0xODYzLDcgKzE4NjIsNyBA
QCBtYWNybyBjb21wYXJlSnVtcE9wKG5hbWUsIG9wLCBpbnRlZ2VyQ29tCiAgICAgICAgIGRpc3Bh
dGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAg
anVtcChtX3RhcmdldCkKIAogICAgIC5zbG93OgogICAgICAgICBjYWxsU2xvd1BhdGgoX2xsaW50
X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC0xODc0LDE1ICsxODczLDE1IEBAIGVuZAogCiBtYWNybyBl
cXVhbGl0eUp1bXBPcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmlzb24pCiAgICAgbGxpbnRPcFdp
dGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQot
ICAgICAgICBnZXQobGhzLCB0MikKLSAgICAgICAgZ2V0KHJocywgdDMpCisgICAgICAgIGdldCht
X2xocywgdDIpCisgICAgICAgIGdldChtX3JocywgdDMpCiAgICAgICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGVJbnQzMihzaXplLCB0MiwgdDAsIC5zbG93KQogICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlSW50MzIoc2l6ZSwgdDMsIHQxLCAuc2xvdykKICAgICAgICAgaW50ZWdlckNvbXBh
cmlzb24odDAsIHQxLCAuanVtcFRhcmdldCkKICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgLmp1
bXBUYXJnZXQ6Ci0gICAgICAgIGp1bXAodGFyZ2V0KQorICAgICAgICBqdW1wKG1fdGFyZ2V0KQog
CiAgICAgLnNsb3c6CiAgICAgICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoXyVuYW1l
JSkKQEAgLTE4OTEsMjUgKzE4OTAsMjUgQEAgbWFjcm8gZXF1YWxpdHlKdW1wT3AobmFtZSwgb3As
IGludGVnZXJDbwogZW5kCiAKIAotbWFjcm8gY29tcGFyZVVuc2lnbmVkSnVtcE9wKG5hbWUsIG9w
LCBpbnRlZ2VyQ29tcGFyZSkKK21hY3JvIGNvbXBhcmVVbnNpZ25lZEp1bXBPcChuYW1lLCBvcCwg
aW50ZWdlckNvbXBhcmVNYWNybykKICAgICBsbGludE9wV2l0aEp1bXAob3BfJW5hbWUlLCBvcCwg
bWFjcm8gKHNpemUsIGdldCwganVtcCwgZGlzcGF0Y2gpCi0gICAgICAgIGdldChsaHMsIHQyKQot
ICAgICAgICBnZXQocmhzLCB0MykKKyAgICAgICAgZ2V0KG1fbGhzLCB0MikKKyAgICAgICAgZ2V0
KG1fcmhzLCB0MykKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDAp
CiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDMsIHQxKQotICAgICAgICBp
bnRlZ2VyQ29tcGFyZSh0MCwgdDEsIC5qdW1wVGFyZ2V0KQorICAgICAgICBpbnRlZ2VyQ29tcGFy
ZU1hY3JvKHQwLCB0MSwgLmp1bXBUYXJnZXQpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5q
dW1wVGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkK
ICAgICBlbmQpCiBlbmQKIAogCiBtYWNybyBjb21wYXJlVW5zaWduZWRPcChuYW1lLCBvcCwgaW50
ZWdlckNvbXBhcmVBbmRTZXQpCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAgZ2V0KGxocywgdDIp
Ci0gICAgICAgIGdldChyaHMsICB0MCkKKyAgICAgICAgZ2V0KG1fbGhzLCB0MikKKyAgICAgICAg
Z2V0KG1fcmhzLCAgdDApCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAs
IHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MCkKICAgICAg
ICAgaW50ZWdlckNvbXBhcmVBbmRTZXQodDAsIHQxLCB0MCkKQEAgLTE5MjAsOCArMTkxOSw4IEBA
IGVuZAogCiAKIGxsaW50T3BXaXRoSnVtcChvcF9zd2l0Y2hfaW1tLCBPcFN3aXRjaEltbSwgbWFj
cm8gKHNpemUsIGdldCwganVtcCwgZGlzcGF0Y2gpCi0gICAgZ2V0KHNjcnV0aW5lZSwgdDIpCi0g
ICAgZ2V0KHRhYmxlSW5kZXgsIHQzKQorICAgIGdldChtX3NjcnV0aW5lZSwgdDIpCisgICAgZ2V0
KG1fdGFibGVJbmRleCwgdDMpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0Miwg
dDEpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCiAgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X3JhcmVEYXRhW3QyXSwgdDIKQEAgLTE5MzksNyArMTkzOCw3IEBAIGxsaW50T3BXaXRoSnVtcChv
cF9zd2l0Y2hfaW1tLCBPcFN3aXRjaEkKIC5vcFN3aXRjaEltbU5vdEludDoKICAgICBidHFueiB0
MSwgdGFnVHlwZU51bWJlciwgLm9wU3dpdGNoSW1tU2xvdyAgICMgR28gc2xvdyBpZiBpdCdzIGEg
ZG91YmxlLgogLm9wU3dpdGNoSW1tRmFsbFRocm91Z2g6Ci0gICAganVtcChkZWZhdWx0T2Zmc2V0
KQorICAgIGp1bXAobV9kZWZhdWx0T2Zmc2V0KQogCiAub3BTd2l0Y2hJbW1TbG93OgogICAgIGNh
bGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3N3aXRjaF9pbW0pCkBAIC0xOTQ4LDggKzE5NDcs
OCBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRjaF9jaGFyLCBPcFN3aXRjaENo
YXIsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgIGdldChzY3J1dGluZWUs
IHQyKQotICAgIGdldCh0YWJsZUluZGV4LCB0MykKKyAgICBnZXQobV9zY3J1dGluZWUsIHQyKQor
ICAgIGdldChtX3RhYmxlSW5kZXgsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDIsIHQxKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MgogICAgIGxvYWRwIENvZGVC
bG9jazo6bV9yYXJlRGF0YVt0Ml0sIHQyCkBAIC0xOTc2LDcgKzE5NzUsNyBAQCBsbGludE9wV2l0
aEp1bXAob3Bfc3dpdGNoX2NoYXIsIE9wU3dpdGNoCiAgICAgZGlzcGF0Y2hJbmRpcmVjdCh0MSkK
IAogLm9wU3dpdGNoQ2hhckZhbGxUaHJvdWdoOgotICAgIGp1bXAoZGVmYXVsdE9mZnNldCkKKyAg
ICBqdW1wKG1fZGVmYXVsdE9mZnNldCkKIAogLm9wU3dpdGNoT25Sb3BlOgogICAgIGNhbGxTbG93
UGF0aChfbGxpbnRfc2xvd19wYXRoX3N3aXRjaF9jaGFyKQpAQCAtMTk4NiwxMiArMTk4NSwxMiBA
QCBlbmQpCiAKICMgd2UgYXNzdW1lIHQ1IGNvbnRhaW5zIHRoZSBtZXRhZGF0YSwgYW5kIHdlIHNo
b3VsZCBub3Qgc2NyYXRjaCB0aGF0CiBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKG9wLCBnZXR1
KQotICAgIGdldHUoYXJndiwgdDMpCisgICAgZ2V0dShtX2FyZ3YsIHQzKQogICAgIG5lZ3AgdDMK
ICAgICBsb2FkcSBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgYnRxbnog
dDAsIHRhZ01hc2ssIC5kb25lCiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwg
dDMKLSAgICBzdG9yZWkgdDMsICVvcCU6Ok1ldGFkYXRhOjphcnJheVByb2ZpbGUubV9sYXN0U2Vl
blN0cnVjdHVyZUlEW3Q1XQorICAgIHN0b3JlaSB0MywgJW9wJTo6TWV0YWRhdGE6Om1fYXJyYXlQ
cm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KIC5kb25lOgogZW5kCiAKQEAgLTE5OTks
MzEgKzE5OTgsMzEgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG5hbWUsIHNsb3dQYXRoLCBvcCwgcAog
ICAgIGxsaW50T3BXaXRoTWV0YWRhdGEobmFtZSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgICAgICBtZXRhZGF0YSh0NSwgdDApCiAKLSAgICAg
ICAgcHJvbG9ndWUobWFjcm8gKGZpZWxkLCBkc3QpCi0gICAgICAgICAgICBnZXR1KHNpemUsIG9w
LCBmaWVsZCwgZHN0KQorICAgICAgICBwcm9sb2d1ZShtYWNybyAoZmllbGROYW1lLCBkc3QpCisg
ICAgICAgICAgICBnZXR1KHNpemUsIG9wLCBmaWVsZE5hbWUsIGRzdCkKICAgICAgICAgZW5kLCBt
ZXRhZGF0YSkKIAotICAgICAgICBnZXQoY2FsbGVlLCB0MCkKLSAgICAgICAgbG9hZHAgJW9wJTo6
TWV0YWRhdGE6OmNhbGxMaW5rSW5mby5jYWxsZWVbdDVdLCB0MgorICAgICAgICBnZXQobV9jYWxs
ZWUsIHQwKQorICAgICAgICBsb2FkcCAlb3AlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0luZm8uY2Fs
bGVlW3Q1XSwgdDIKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMp
CiAgICAgICAgIGJxbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKLSAgICAgICAgZ2V0dShzaXplLCBv
cCwgYXJndiwgdDMpCisgICAgICAgIGdldHUoc2l6ZSwgb3AsIG1fYXJndiwgdDMpCiAgICAgICAg
IGxzaGlmdGkgMywgdDMKICAgICAgICAgbmVncCB0MwogICAgICAgICBhZGRwIGNmciwgdDMKICAg
ICAgICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCi0gICAgICAgIGdldHUoc2l6ZSwgb3AsIGFyZ2Ms
IHQyKQorICAgICAgICBnZXR1KHNpemUsIG9wLCBtX2FyZ2MsIHQyKQogICAgICAgICBzdG9yZWkg
UEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQogICAgICAgICBzdG9yZWkgdDIsIEFy
Z3VtZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgICAgICBtb3ZlIHQzLCBzcAogICAg
ICAgICBpZiBQT0lTT04KICAgICAgICAgICAgIGxvYWRwIF9nX0pJVENvZGVQb2lzb24sIHQyCi0g
ICAgICAgICAgICB4b3JwICVvcCU6Ok1ldGFkYXRhOjpjYWxsTGlua0luZm8ubWFjaGluZUNvZGVU
YXJnZXRbdDVdLCB0MgorICAgICAgICAgICAgeG9ycCAlb3AlOjpNZXRhZGF0YTo6bV9jYWxsTGlu
a0luZm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MgogICAgICAgICAgICAgcHJlcGFyZUNhbGwo
dDIsIHQxLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCiAgICAgICAgICAgICBjYWxsVGFyZ2V0RnVu
Y3Rpb24oc2l6ZSwgb3AsIGRpc3BhdGNoLCB0MiwgSlNFbnRyeVB0clRhZykKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcHJlcGFyZUNhbGwoJW9wJTo6TWV0YWRhdGE6OmNhbGxMaW5rSW5mby5t
YWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCi0gICAgICAg
ICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oc2l6ZSwgb3AsIGRpc3BhdGNoLCAlb3AlOjpNZXRhZGF0
YTo6Y2FsbExpbmtJbmZvLm1hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgSlNFbnRyeVB0clRhZykKKyAg
ICAgICAgICAgIHByZXBhcmVDYWxsKCVvcCU6Ok1ldGFkYXRhOjptX2NhbGxMaW5rSW5mby5tYWNo
aW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAg
ICBjYWxsVGFyZ2V0RnVuY3Rpb24oc2l6ZSwgb3AsIGRpc3BhdGNoLCAlb3AlOjpNZXRhZGF0YTo6
bV9jYWxsTGlua0luZm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQogICAg
ICAgICBlbmQKIAogICAgIC5vcENhbGxTbG93OgpAQCAtMjAzMywxNCArMjAzMiwxNCBAQCBlbmQK
IAogbGxpbnRPcChvcF9yZXQsIE9wUmV0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKICAg
ICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQotICAgIGdldCh2YWx1ZSwgdDIpCisgICAg
Z2V0KG1fdmFsdWUsIHQyKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHIw
KQogICAgIGRvUmV0dXJuKCkKIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF90b19wcmlt
aXRpdmUsIE9wVG9QcmltaXRpdmUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4p
Ci0gICAgZ2V0KHNyYywgdDIpCisgICAgZ2V0KG1fc3JjLCB0MikKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQyLCB0MCkKICAgICBidHFueiB0MCwgdGFnTWFzaywgLm9wVG9Qcmlt
aXRpdmVJc0ltbQogICAgIGJiYWVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0VHlwZSwgLm9w
VG9QcmltaXRpdmVTbG93Q2FzZQpAQCAtMjA4NSwxMSArMjA4NCwxMSBAQCBjb21tb25PcChsbGlu
dF9vcF9jYXRjaCwgbWFjcm8oKSBlbmQsIG1hCiAKICAgICBsb2FkcCBWTTo6bV9leGNlcHRpb25b
dDNdLCB0MAogICAgIHN0b3JlcCAwLCBWTTo6bV9leGNlcHRpb25bdDNdCi0gICAgZ2V0KHNpemUs
IE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdDIpCisgICAgZ2V0KHNpemUsIE9wQ2F0Y2gsIG1fZXhjZXB0
aW9uLCB0MikKICAgICBzdG9yZXEgdDAsIFtjZnIsIHQyLCA4XQogCiAgICAgbG9hZHEgRXhjZXB0
aW9uOjptX3ZhbHVlW3QwXSwgdDMKLSAgICBnZXQoc2l6ZSwgT3BDYXRjaCwgdGhyb3duVmFsdWUs
IHQyKQorICAgIGdldChzaXplLCBPcENhdGNoLCBtX3Rocm93blZhbHVlLCB0MikKICAgICBzdG9y
ZXEgdDMsIFtjZnIsIHQyLCA4XQogCiAgICAgdHJhY2VFeGVjdXRpb24oKQpAQCAtMjEwMiw3ICsy
MTAxLDcgQEAgZW5kKQogCiBsbGludE9wKG9wX2VuZCwgT3BFbmQsIG1hY3JvIChzaXplLCBnZXQs
IGRpc3BhdGNoKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCi0gICAgZ2V0KHZh
bHVlLCB0MCkKKyAgICBnZXQobV92YWx1ZSwgdDApCiAgICAgYXNzZXJ0Tm90Q29uc3RhbnQoc2l6
ZSwgdDApCiAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCByMAogICAgIGRvUmV0dXJuKCkKQEAgLTIy
MzMsMTMgKzIyMzIsMTMgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9yZXNvbHZlX3Njb3BlLCBP
cAogICAgIG1ldGFkYXRhKHQ1LCB0MCkKIAogICAgIG1hY3JvIGdldENvbnN0YW50U2NvcGUoKQot
ICAgICAgICBsb2FkcCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6OmNvbnN0YW50U2NvcGVbdDVd
LCAgdDAKKyAgICAgICAgbG9hZHAgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjptX2NvbnN0YW50
U2NvcGVbdDVdLCAgdDAKICAgICAgICAgcmV0dXJuKHQwKQogICAgIGVuZAogCiAgICAgbWFjcm8g
cmVzb2x2ZVNjb3BlKCkKLSAgICAgICAgbG9hZGkgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjps
b2NhbFNjb3BlRGVwdGhbdDVdLCB0MgotICAgICAgICBnZXQoc2NvcGUsIHQwKQorICAgICAgICBs
b2FkaSBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om1fbG9jYWxTY29wZURlcHRoW3Q1XSwgdDIK
KyAgICAgICAgZ2V0KG1fc2NvcGUsIHQwKQogICAgICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQw
CiAgICAgICAgIGJ0aXogdDIsIC5yZXNvbHZlU2NvcGVMb29wRW5kCiAKQEAgLTIyNTIsNyArMjI1
MSw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcmVzb2x2ZV9zY29wZSwgT3AKICAgICAgICAg
cmV0dXJuKHQwKQogICAgIGVuZAogCi0gICAgbG9hZHAgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OjpyZXNvbHZlVHlwZVt0NV0sIHQwCisgICAgbG9hZHAgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRh
OjptX3Jlc29sdmVUeXBlW3Q1XSwgdDAKIAogI3JHbG9iYWxQcm9wZXJ0eToKICAgICBiaW5lcSB0
MCwgR2xvYmFsUHJvcGVydHksIC5yR2xvYmFsVmFyCkBAIC0yMzAxLDEwICsyMzAwLDEwIEBAIGVu
ZCkKIAogCiBtYWNybyBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9wLCBnZXQsIHNsb3dQYXRoKQot
ICAgIGdldChzY29wZSwgdDApCisgICAgZ2V0KG1fc2NvcGUsIHQwKQogICAgIGxvYWRxIFtjZnIs
IHQwLCA4XSwgdDAKICAgICBsb2FkU3RydWN0dXJlV2l0aFNjcmF0Y2godDAsIHQyLCB0MSwgdDMp
Ci0gICAgbG9hZHAgJW9wJTo6TWV0YWRhdGE6OnN0cnVjdHVyZVt0NV0sIHQxCisgICAgbG9hZHAg
JW9wJTo6TWV0YWRhdGE6Om1fc3RydWN0dXJlW3Q1XSwgdDEKICAgICBicG5lcSB0MiwgdDEsIHNs
b3dQYXRoCiBlbmQKIApAQCAtMjMxMiwxNCArMjMxMSwxNCBAQCBsbGludE9wV2l0aE1ldGFkYXRh
KG9wX2dldF9mcm9tX3Njb3BlLCBPCiAgICAgbWV0YWRhdGEodDUsIHQwKQogCiAgICAgbWFjcm8g
Z2V0UHJvcGVydHkoKQotICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9w
ZXJhbmRbdDVdLCB0MQorICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om1f
b3BlcmFuZFt0NV0sIHQxCiAgICAgICAgIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEs
IHQwLCB0MikKICAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCB0NSwgdDIpCiAg
ICAgICAgIHJldHVybih0MikKICAgICBlbmQKIAogICAgIG1hY3JvIGdldEdsb2JhbFZhcih0ZHpD
aGVja0lmTmVjZXNzYXJ5KQotICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6
Om9wZXJhbmRbdDVdLCB0MAorICAgICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6
Om1fb3BlcmFuZFt0NV0sIHQwCiAgICAgICAgIGxvYWRxIFt0MF0sIHQwCiAgICAgICAgIHRkekNo
ZWNrSWZOZWNlc3NhcnkodDApCiAgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZyb21TY29wZSwg
dDUsIHQwKQpAQCAtMjMyNywxMyArMjMyNiwxMyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dl
dF9mcm9tX3Njb3BlLCBPCiAgICAgZW5kCiAKICAgICBtYWNybyBnZXRDbG9zdXJlVmFyKCkKLSAg
ICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAg
ICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQog
ICAgICAgICBsb2FkcSBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXNbdDAsIHQxLCA4XSwg
dDAKICAgICAgICAgdmFsdWVQcm9maWxlKE9wR2V0RnJvbVNjb3BlLCB0NSwgdDApCiAgICAgICAg
IHJldHVybih0MCkKICAgICBlbmQKIAotICAgIGxvYWRpIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0
YTo6Z2V0UHV0SW5mb1t0NV0sIHQwCisgICAgbG9hZGkgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRh
OjptX2dldFB1dEluZm9bdDVdLCB0MAogICAgIGFuZGkgUmVzb2x2ZVR5cGVNYXNrLCB0MAogCiAj
Z0dsb2JhbFByb3BlcnR5OgpAQCAtMjM1NCw3ICsyMzUzLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0
YShvcF9nZXRfZnJvbV9zY29wZSwgTwogCiAuZ0Nsb3N1cmVWYXI6CiAgICAgYmluZXEgdDAsIENs
b3N1cmVWYXIsIC5nR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCi0gICAgbG9h
ZFZhcmlhYmxlKGdldCwgc2NvcGUsIHQwKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fc2NvcGUs
IHQwKQogICAgIGdldENsb3N1cmVWYXIoKQogCiAuZ0dsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczoKQEAgLTIzNzgsNyArMjM3Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3Bf
Z2V0X2Zyb21fc2NvcGUsIE8KIC5nQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAg
ICAgYmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuZ0R5bmFtaWMK
ICAgICB2YXJJbmplY3Rpb25DaGVjayguZ0R5bmFtaWMsIHQyKQotICAgIGxvYWRWYXJpYWJsZShn
ZXQsIHNjb3BlLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MCkKICAgICBn
ZXRDbG9zdXJlVmFyKCkKIAogLmdEeW5hbWljOgpAQCAtMjM4OSwxMDAgKzIzODgsMTAwIEBAIGVu
ZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9wdXRfdG9fc2NvcGUsIE9wUHV0VG9TY29wZSwg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgbWFjcm8g
cHV0UHJvcGVydHkoKQotICAgICAgICBnZXQodmFsdWUsIHQxKQorICAgICAgICBnZXQobV92YWx1
ZSwgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyKQotICAg
ICAgICBsb2FkaXMgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b3BlcmFuZFt0NV0sIHQxCisgICAg
ICAgIGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQogICAg
ICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyKQogICAgIGVuZAog
CiAgICAgbWFjcm8gcHV0R2xvYmFsVmFyaWFibGUoKQotICAgICAgICBnZXQodmFsdWUsIHQwKQor
ICAgICAgICBnZXQobV92YWx1ZSwgdDApCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDAsIHQxKQotICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjp3YXRj
aHBvaW50U2V0W3Q1XSwgdDIKLSAgICAgICAgbG9hZHAgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6
b3BlcmFuZFt0NV0sIHQwCisgICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om1f
d2F0Y2hwb2ludFNldFt0NV0sIHQyCisgICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om1fb3BlcmFuZFt0NV0sIHQwCiAgICAgICAgIG5vdGlmeVdyaXRlKHQyLCAucER5bmFtaWMp
CiAgICAgICAgIHN0b3JlcSB0MSwgW3QwXQogICAgIGVuZAogCiAgICAgbWFjcm8gcHV0Q2xvc3Vy
ZVZhcigpCi0gICAgICAgIGdldCh2YWx1ZSwgdDEpCisgICAgICAgIGdldChtX3ZhbHVlLCB0MSkK
ICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIpCi0gICAgICAgIGxv
YWRpcyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAgICAgICAgbG9h
ZGlzIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQxCiAgICAgICAgIHN0
b3JlcSB0MiwgSlNMZXhpY2FsRW52aXJvbm1lbnRfdmFyaWFibGVzW3QwLCB0MSwgOF0KICAgICBl
bmQKIAogICAgIG1hY3JvIHB1dExvY2FsQ2xvc3VyZVZhcigpCi0gICAgICAgIGdldCh2YWx1ZSwg
dDEpCisgICAgICAgIGdldChtX3ZhbHVlLCB0MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MSwgdDIpCi0gICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6
OndhdGNocG9pbnRTZXRbdDVdLCB0MworICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFk
YXRhOjptX3dhdGNocG9pbnRTZXRbdDVdLCB0MwogICAgICAgICBidHB6IHQzLCAubm9WYXJpYWJs
ZVdhdGNocG9pbnRTZXQKICAgICAgICAgbm90aWZ5V3JpdGUodDMsIC5wRHluYW1pYykKICAgICAu
bm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6Ci0gICAgICAgIGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAgICAgICAgbG9hZGlzIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQxCiAgICAgICAgIHN0b3JlcSB0MiwgSlNMZXhpY2FsRW52
aXJvbm1lbnRfdmFyaWFibGVzW3QwLCB0MSwgOF0KICAgICBlbmQKIAogICAgIG1hY3JvIGNoZWNr
VERaSW5HbG9iYWxQdXRUb1Njb3BlSWZOZWNlc3NhcnkoKQotICAgICAgICBsb2FkaXMgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6Z2V0UHV0SW5mb1t0NV0sIHQwCisgICAgICAgIGxvYWRpcyBPcFB1
dFRvU2NvcGU6Ok1ldGFkYXRhOjptX2dldFB1dEluZm9bdDVdLCB0MAogICAgICAgICBhbmRpIElu
aXRpYWxpemF0aW9uTW9kZU1hc2ssIHQwCiAgICAgICAgIHJzaGlmdGkgSW5pdGlhbGl6YXRpb25N
b2RlU2hpZnQsIHQwCiAgICAgICAgIGJpbmVxIHQwLCBOb3RJbml0aWFsaXphdGlvbiwgLm5vTmVl
ZEZvclREWkNoZWNrCi0gICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9wZXJh
bmRbdDVdLCB0MAorICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJh
bmRbdDVdLCB0MAogICAgICAgICBsb2FkcSBbdDBdLCB0MAogICAgICAgICBicWVxIHQwLCBWYWx1
ZUVtcHR5LCAucER5bmFtaWMKICAgICAubm9OZWVkRm9yVERaQ2hlY2s6CiAgICAgZW5kCiAKICAg
ICBtZXRhZGF0YSh0NSwgdDApCi0gICAgbG9hZGkgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6Z2V0
UHV0SW5mb1t0NV0sIHQwCisgICAgbG9hZGkgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6bV9nZXRQ
dXRJbmZvW3Q1XSwgdDAKICAgICBhbmRpIFJlc29sdmVUeXBlTWFzaywgdDAKIAogI3BMb2NhbENs
b3N1cmVWYXI6CiAgICAgYmluZXEgdDAsIExvY2FsQ2xvc3VyZVZhciwgLnBHbG9iYWxQcm9wZXJ0
eQotICAgIGxvYWRWYXJpYWJsZShnZXQsIHNjb3BlLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0
LCBtX3Njb3BlLCB0MCkKICAgICBwdXRMb2NhbENsb3N1cmVWYXIoKQotICAgIHdyaXRlQmFycmll
ck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25P
cGVyYW5kcyhzaXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAu
cEdsb2JhbFByb3BlcnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnBHbG9iYWxW
YXIKICAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKE9wUHV0VG9TY29wZSwgZ2V0LCAucER5bmFt
aWMpCiAgICAgcHV0UHJvcGVydHkoKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwg
Z2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQs
IG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEdsb2JhbFZhcjoKICAgICBi
aW5lcSB0MCwgR2xvYmFsVmFyLCAucEdsb2JhbExleGljYWxWYXIKICAgICBwdXRHbG9iYWxWYXJp
YWJsZSgpCi0gICAgd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qoc2l6ZSwgZ2V0LCB2YWx1ZSkK
KyAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBnZXQsIG1fdmFsdWUpCiAgICAg
ZGlzcGF0Y2goKQogCiAucEdsb2JhbExleGljYWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2JhbExl
eGljYWxWYXIsIC5wQ2xvc3VyZVZhcgogICAgIGNoZWNrVERaSW5HbG9iYWxQdXRUb1Njb3BlSWZO
ZWNlc3NhcnkoKQogICAgIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3cml0ZUJhcnJpZXJPbkds
b2JhbExleGljYWxFbnZpcm9ubWVudChzaXplLCBnZXQsIHZhbHVlKQorICAgIHdyaXRlQmFycmll
ck9uR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KHNpemUsIGdldCwgbV92YWx1ZSkKICAgICBkaXNw
YXRjaCgpCiAKIC5wQ2xvc3VyZVZhcjoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhciwgLnBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBz
Y29wZSwgdDApCisgICAgbG9hZFZhcmlhYmxlKGdldCwgbV9zY29wZSwgdDApCiAgICAgcHV0Q2xv
c3VyZVZhcigpCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIHNjb3BlLCB2
YWx1ZSkKKyAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9zY29wZSwgbV92
YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3MsIC5wR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIGxvYWRXaXRoU3RydWN0
dXJlQ2hlY2soT3BQdXRUb1Njb3BlLCBnZXQsIC5wRHluYW1pYykKICAgICBwdXRQcm9wZXJ0eSgp
Ci0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIHNjb3BlLCB2YWx1ZSkKKyAg
ICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9zY29wZSwgbV92YWx1ZSkKICAg
ICBkaXNwYXRjaCgpCiAKIC5wR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBi
aW5lcSB0MCwgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5wRHluYW1p
YywgdDIpCiAgICAgcHV0R2xvYmFsVmFyaWFibGUoKQotICAgIHdyaXRlQmFycmllck9uR2xvYmFs
T2JqZWN0KHNpemUsIGdldCwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qo
c2l6ZSwgZ2V0LCBtX3ZhbHVlKQogICAgIGRpc3BhdGNoKCkKIAogLnBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKQEAgLTI0OTAsMTUgKzI0ODksMTUgQEAgbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9wdXRfdG9fc2NvcGUsIE9wUAogICAgIHZhckluamVjdGlvbkNoZWNrKC5w
RHluYW1pYywgdDIpCiAgICAgY2hlY2tURFpJbkdsb2JhbFB1dFRvU2NvcGVJZk5lY2Vzc2FyeSgp
CiAgICAgcHV0R2xvYmFsVmFyaWFibGUoKQotICAgIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KHNpemUsIGdldCwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25HbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQoc2l6ZSwgZ2V0LCBtX3ZhbHVlKQogICAgIGRpc3BhdGNoKCkKIAog
LnBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5wTW9kdWxlVmFyCiAgICAgdmFySW5qZWN0aW9u
Q2hlY2soLnBEeW5hbWljLCB0MikKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDApCisg
ICAgbG9hZFZhcmlhYmxlKGdldCwgbV9zY29wZSwgdDApCiAgICAgcHV0Q2xvc3VyZVZhcigpCi0g
ICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIHNjb3BlLCB2YWx1ZSkKKyAgICB3
cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9zY29wZSwgbV92YWx1ZSkKICAgICBk
aXNwYXRjaCgpCiAKIC5wTW9kdWxlVmFyOgpAQCAtMjUxMywyNiArMjUxMiwyNiBAQCBlbmQpCiAK
IAogbGxpbnRPcFdpdGhQcm9maWxlKG9wX2dldF9mcm9tX2FyZ3VtZW50cywgT3BHZXRGcm9tQXJn
dW1lbnRzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGxvYWRWYXJp
YWJsZShnZXQsIGFyZ3VtZW50cywgdDApCi0gICAgZ2V0dShzaXplLCBPcEdldEZyb21Bcmd1bWVu
dHMsIGluZGV4LCB0MSkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX2FyZ3VtZW50cywgdDApCisg
ICAgZ2V0dShzaXplLCBPcEdldEZyb21Bcmd1bWVudHMsIG1faW5kZXgsIHQxKQogICAgIGxvYWRx
IERpcmVjdEFyZ3VtZW50c19zdG9yYWdlW3QwLCB0MSwgOF0sIHQwCiAgICAgcmV0dXJuKHQwKQog
ZW5kKQogCiAKIGxsaW50T3Aob3BfcHV0X3RvX2FyZ3VtZW50cywgT3BQdXRUb0FyZ3VtZW50cywg
bWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgbG9hZFZhcmlhYmxlKGdldCwgYXJndW1l
bnRzLCB0MCkKLSAgICBnZXR1KHNpemUsIE9wUHV0VG9Bcmd1bWVudHMsIGluZGV4LCB0MSkKLSAg
ICBnZXQodmFsdWUsIHQzKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fYXJndW1lbnRzLCB0MCkK
KyAgICBnZXR1KHNpemUsIE9wUHV0VG9Bcmd1bWVudHMsIG1faW5kZXgsIHQxKQorICAgIGdldCht
X3ZhbHVlLCB0MykKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQzLCB0MikKICAg
ICBzdG9yZXEgdDIsIERpcmVjdEFyZ3VtZW50c19zdG9yYWdlW3QwLCB0MSwgOF0KLSAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYXJndW1lbnRzLCB2YWx1ZSkKKyAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgbV9hcmd1bWVudHMsIG1fdmFsdWUpCiAgICAg
ZGlzcGF0Y2goKQogZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2dldF9wYXJlbnRfc2Nv
cGUsIE9wR2V0UGFyZW50U2NvcGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4p
Ci0gICAgbG9hZFZhcmlhYmxlKGdldCwgc2NvcGUsIHQwKQorICAgIGxvYWRWYXJpYWJsZShnZXQs
IG1fc2NvcGUsIHQwKQogICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFt0MF0sIHQwCiAgICAgcmV0
dXJuKHQwKQogZW5kKQpAQCAtMjU0OCw3ICsyNTQ3LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9wcm9maWxlX3R5cGUsIE9wUAogICAgIGxvYWRwIFR5cGVQcm9maWxlckxvZzo6bV9jdXJyZW50
TG9nRW50cnlQdHJbdDFdLCB0MgogCiAgICAgIyB0MCBpcyBob2xkaW5nIHRoZSBKU1ZhbHVlIGFy
Z3VtZW50LgotICAgIGdldCh0YXJnZXQsIHQzKQorICAgIGdldChtX3RhcmdldCwgdDMpCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MywgdDApCiAKICAgICBicWVxIHQwLCBWYWx1
ZUVtcHR5LCAub3BQcm9maWxlVHlwZURvbmUKQEAgLTI1NTcsNyArMjU1Niw3IEBAIGxsaW50T3BX
aXRoTWV0YWRhdGEob3BfcHJvZmlsZV90eXBlLCBPcFAKICAgICAKICAgICAjIFN0b3JlIHRoZSBU
eXBlTG9jYXRpb24gb250byB0aGUgbG9nIGVudHJ5LgogICAgIG1ldGFkYXRhKHQ1LCB0MykKLSAg
ICBsb2FkcCBPcFByb2ZpbGVUeXBlOjpNZXRhZGF0YTo6dHlwZUxvY2F0aW9uW3Q1XSwgdDMKKyAg
ICBsb2FkcCBPcFByb2ZpbGVUeXBlOjpNZXRhZGF0YTo6bV90eXBlTG9jYXRpb25bdDVdLCB0Mwog
ICAgIHN0b3JlcCB0MywgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25bdDJdCiAK
ICAgICBidHF6IHQwLCB0YWdNYXNrLCAub3BQcm9maWxlVHlwZUlzQ2VsbApAQCAtMjU4Myw3ICsy
NTgyLDcgQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3Byb2ZpbGVfY29udHJvbF9m
bG93LCBPcFByb2ZpbGVDb250cm9sRmxvdywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCiAgICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGxvYWRwIE9wUHJvZmls
ZUNvbnRyb2xGbG93OjpNZXRhZGF0YTo6YmFzaWNCbG9ja0xvY2F0aW9uW3Q1XSwgdDAKKyAgICBs
b2FkcCBPcFByb2ZpbGVDb250cm9sRmxvdzo6TWV0YWRhdGE6Om1fYmFzaWNCbG9ja0xvY2F0aW9u
W3Q1XSwgdDAKICAgICBhZGRxIDEsIEJhc2ljQmxvY2tMb2NhdGlvbjo6bV9leGVjdXRpb25Db3Vu
dFt0MF0KICAgICBkaXNwYXRjaCgpCiBlbmQpCkBAIC0yNTkyLDcgKzI1OTEsNyBAQCBlbmQpCiBs
bGludE9wV2l0aFJldHVybihvcF9nZXRfcmVzdF9sZW5ndGgsIE9wR2V0UmVzdExlbmd0aCwgbWFj
cm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0
ICsgQXJndW1lbnRDb3VudFtjZnJdLCB0MAogICAgIHN1YmkgMSwgdDAKLSAgICBnZXR1KHNpemUs
IE9wR2V0UmVzdExlbmd0aCwgbnVtUGFyYW1ldGVyc1RvU2tpcCwgdDEpCisgICAgZ2V0dShzaXpl
LCBPcEdldFJlc3RMZW5ndGgsIG1fbnVtUGFyYW1ldGVyc1RvU2tpcCwgdDEpCiAgICAgYmlsdGVx
IHQwLCB0MSwgLnN0b3JlWmVybwogICAgIHN1YmkgdDEsIHQwCiAgICAgam1wIC5ib3hVcApAQCAt
MjYxMSw3ICsyNjEwLDcgQEAgbGxpbnRPcChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUs
IAogICAgIHN0b3JlcCB0MSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0OjpjYWxsZXJGcmFtZVt0MF0K
ICAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDEKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNrZW46
OlBhY2tldDo6Y2FsbGVlW3QwXQotICAgIGxvYWRWYXJpYWJsZShnZXQsIHNjb3BlLCB0MSkKKyAg
ICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MSkKICAgICBzdG9yZXAgdDEsIFNoYWRvd0No
aWNrZW46OlBhY2tldDo6c2NvcGVbdDBdCiAgICAgZGlzcGF0Y2goKQogLm9wTG9nU2hhZG93Q2hp
Y2tlblByb2xvZ3VlU2xvdzoKQEAgLTI2MjQsOSArMjYyMyw5IEBAIGxsaW50T3Aob3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWwsIE9wTG8KICAgICBhY3F1aXJlU2hhZG93Q2hpY2tlblBhY2tldCgu
b3BMb2dTaGFkb3dDaGlja2VuVGFpbFNsb3cpCiAgICAgc3RvcmVwIGNmciwgU2hhZG93Q2hpY2tl
bjo6UGFja2V0OjpmcmFtZVt0MF0KICAgICBzdG9yZXAgU2hhZG93Q2hpY2tlblRhaWxNYXJrZXIs
IFNoYWRvd0NoaWNrZW46OlBhY2tldDo6Y2FsbGVlW3QwXQotICAgIGxvYWRWYXJpYWJsZShnZXQs
IHRoaXNWYWx1ZSwgdDEpCisgICAgbG9hZFZhcmlhYmxlKGdldCwgbV90aGlzVmFsdWUsIHQxKQog
ICAgIHN0b3JlcCB0MSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aGlzVmFsdWVbdDBdCi0gICAg
bG9hZFZhcmlhYmxlKGdldCwgc2NvcGUsIHQxKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fc2Nv
cGUsIHQxKQogICAgIHN0b3JlcCB0MSwgU2hhZG93Q2hpY2tlbjo6UGFja2V0OjpzY29wZVt0MF0K
ICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDEKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNr
ZW46OlBhY2tldDo6Y29kZUJsb2NrW3QwXQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjQwMDE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIzLDE1ICszMjMsMTUgQEAgbWFjcm8gZGlzcGF0Y2hPcChzaXplLCBvcCkKICAg
ICBzaXplKGRpc3BhdGNoTmFycm93LCBkaXNwYXRjaFdpZGUsIG1hY3JvIChkaXNwYXRjaCkgZGlz
cGF0Y2goKSBlbmQpCiBlbmQKIAotbWFjcm8gZ2V0dShzaXplLCBvcCwgZmllbGQsIGRzdCkKK21h
Y3JvIGdldHUoc2l6ZSwgb3AsIGZpZWxkTmFtZSwgZHN0KQogICAgIHNpemUoZ2V0dU9wZXJhbmRO
YXJyb3csIGdldHVPcGVyYW5kV2lkZSwgbWFjcm8gKGdldHUpCi0gICAgICAgIGdldHUob3AsIGZp
ZWxkLCBkc3QpCisgICAgICAgIGdldHUob3AsIGZpZWxkTmFtZSwgZHN0KQogICAgIGVuZCkKIGVu
ZAogCi1tYWNybyBnZXQoc2l6ZSwgb3AsIGZpZWxkLCBkc3QpCittYWNybyBnZXQoc2l6ZSwgb3As
IGZpZWxkTmFtZSwgZHN0KQogICAgIHNpemUoZ2V0T3BlcmFuZE5hcnJvdywgZ2V0T3BlcmFuZFdp
ZGUsIG1hY3JvIChnZXQpCi0gICAgICAgIGdldChvcCwgZmllbGQsIGRzdCkKKyAgICAgICAgZ2V0
KG9wLCBmaWVsZE5hbWUsIGRzdCkKICAgICBlbmQpCiBlbmQKIApAQCAtMzQ1LDcgKzM0NSw3IEBA
IGVuZAogCiBtYWNybyBtZXRhZGF0YShzaXplLCBvcGNvZGUsIGRzdCwgc2NyYXRjaCkKICAgICBs
b2FkaSBjb25zdGV4cHIgJW9wY29kZSU6Om9wY29kZUlEICogNFttZXRhZGF0YVRhYmxlXSwgZHN0
ICMgb2Zmc2V0ID0gbWV0YWRhdGFUYWJsZTx1bnNpZ25lZCo+W29wY29kZUlEXQotICAgIGdldHUo
c2l6ZSwgb3Bjb2RlLCBtZXRhZGF0YUlELCBzY3JhdGNoKSAjIHNjcmF0Y2ggPSBieXRlY29kZS5t
ZXRhZGF0YUlECisgICAgZ2V0dShzaXplLCBvcGNvZGUsIG1fbWV0YWRhdGFJRCwgc2NyYXRjaCkg
IyBzY3JhdGNoID0gYnl0ZWNvZGUubV9tZXRhZGF0YUlECiAgICAgbXVsaSBzaXplb2YgJW9wY29k
ZSU6Ok1ldGFkYXRhLCBzY3JhdGNoICMgc2NyYXRjaCAqPSBzaXplb2YoT3A6Ok1ldGFkYXRhKQog
ICAgIGFkZGkgc2NyYXRjaCwgZHN0ICMgb2Zmc2V0ICs9IHNjcmF0Y2gKICAgICBhZGRwIG1ldGFk
YXRhVGFibGUsIGRzdCAjIHJldHVybiAmbWV0YWRhdGFUYWJsZVtvZmZzZXRdCkBAIC0zNzcsOCAr
Mzc3LDggQEAgZW5kCiAKIG1hY3JvIGxsaW50T3AobmFtZSwgb3AsIGZuKQogICAgIGNvbW1vbk9w
KGxsaW50XyVuYW1lJSwgdHJhY2VFeGVjdXRpb24sIG1hY3JvKHNpemUpCi0gICAgICAgIG1hY3Jv
IGdldEltcGwoZmllbGQsIGRzdCkKLSAgICAgICAgICAgIGdldChzaXplLCBvcCwgZmllbGQsIGRz
dCkKKyAgICAgICAgbWFjcm8gZ2V0SW1wbChmaWVsZE5hbWUsIGRzdCkKKyAgICAgICAgICAgIGdl
dChzaXplLCBvcCwgZmllbGROYW1lLCBkc3QpCiAgICAgICAgIGVuZAogCiAgICAgICAgIG1hY3Jv
IGRpc3BhdGNoSW1wbCgpCkBAIC00MDgsOCArNDA4LDggQEAgZW5kCiAKIG1hY3JvIGxsaW50T3BX
aXRoSnVtcChuYW1lLCBvcCwgaW1wbCkKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG5hbWUsIG9w
LCBtYWNybyhzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQotICAgICAgICBt
YWNybyBqdW1wKGZpZWxkKQotICAgICAgICAgICAgZ2V0KGZpZWxkLCB0MCkKKyAgICAgICAgbWFj
cm8ganVtcChmaWVsZE5hbWUpCisgICAgICAgICAgICBnZXQoZmllbGROYW1lLCB0MCkKICAgICAg
ICAgICAgIGp1bXBJbXBsKHQwKQogICAgICAgICBlbmQKIApAQCAtODU0LDEwICs4NTQsMTAgQEAg
bWFjcm8gcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKGRlcwogICAgIGVuZAogZW5kCiAK
LW1hY3JvIHVucG9pc29uKHBvaXNvbiwgZmllbGQsIHNjcmF0Y2gpCittYWNybyB1bnBvaXNvbihw
b2lzb24sIGZpZWxkUmVnLCBzY3JhdGNoKQogICAgIGlmIFBPSVNPTgogICAgICAgICBsb2FkcCBw
b2lzb24sIHNjcmF0Y2gKLSAgICAgICAgeG9ycCBzY3JhdGNoLCBmaWVsZAorICAgICAgICB4b3Jw
IHNjcmF0Y2gsIGZpZWxkUmVnCiAgICAgZW5kCiBlbmQKIApAQCAtMTU1NSw3ICsxNTU1LDcgQEAg
Y29tcGFyZVVuc2lnbmVkT3AoYmVsb3dlcSwgT3BCZWxvd2VxLAogCiAKIGxsaW50T3BXaXRoSnVt
cChvcF9qbXAsIE9wSm1wLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1wLCBkaXNwYXRjaCkKLSAgICBq
dW1wKHRhcmdldCkKKyAgICBqdW1wKG1fdGFyZ2V0KQogZW5kKQogCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMjQwMDE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNSw4ICsxMjUsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBiQ29uZGl0aW9uID0gKGNvbmRpdGlvbik7ICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKGJDb25kaXRpb24pICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHBjID0gYnl0ZWNvZGUudGFy
Z2V0IFwKLSAgICAgICAgICAgICAgICA/IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rp
b24qPihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwYykgKyBieXRlY29kZS50YXJn
ZXQpIFwKKyAgICAgICAgICAgIHBjID0gYnl0ZWNvZGUubV90YXJnZXQgXAorICAgICAgICAgICAg
ICAgID8gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHBjKSArIGJ5dGVjb2RlLm1fdGFyZ2V0KSBcCiAgICAgICAgICAg
ICAgICAgOiBleGVjLT5jb2RlQmxvY2soKS0+b3V0T2ZMaW5lSnVtcFRhcmdldChwYyk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcGMgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4ocGMpICsgcGMtPnNpemUoKSk7IFwKQEAgLTE0MSw3ICsxNDEsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgRU5EX0lNUEwoKTsgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIH0gd2hpbGUgKGZhbHNlKQogCi0jZGVmaW5lIFJFVFVSTl9XSVRIX1BST0ZJTElORyh2
YWx1ZV9fLCBwcm9maWxpbmdBY3Rpb25fXykgUkVUVVJOX1dJVEhfUFJPRklMSU5HX0NVU1RPTShi
eXRlY29kZS5kc3QsIHZhbHVlX18sIHByb2ZpbGluZ0FjdGlvbl9fKQorI2RlZmluZSBSRVRVUk5f
V0lUSF9QUk9GSUxJTkcodmFsdWVfXywgcHJvZmlsaW5nQWN0aW9uX18pIFJFVFVSTl9XSVRIX1BS
T0ZJTElOR19DVVNUT00oYnl0ZWNvZGUubV9kc3QsIHZhbHVlX18sIHByb2ZpbGluZ0FjdGlvbl9f
KQogCiAjZGVmaW5lIFJFVFVSTih2YWx1ZSkgXAogICAgIFJFVFVSTl9XSVRIX1BST0ZJTElORyh2
YWx1ZSwgeyB9KQpAQCAtMTUwLDcgKzE1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIFJFVFVS
Tl9XSVRIX1BST0ZJTElORyh2YWx1ZV9fLCBQUk9GSUxFX1ZBTFVFKHJldHVyblZhbHVlX18pKQog
CiAjZGVmaW5lIFBST0ZJTEVfVkFMVUUodmFsdWUpIGRvIHsgXAotICAgICAgICBieXRlY29kZS5t
ZXRhZGF0YShleGVjKS5wcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSk7IFwKKyAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEoZXhlYykubV9wcm9maWxlLm1fYnVja2V0
c1swXSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAog
I2RlZmluZSBDQUxMX0VORF9JTVBMKGV4ZWMsIGNhbGxUYXJnZXQsIGNhbGxUYXJnZXRUYWcpIFwK
QEAgLTIxNSw3ICsyMTUsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3Njb3Bl
ZF9hCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRl
U2NvcGVkQXJndW1lbnRzPigpOwotICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBzY29wZSA9IGpz
Q2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KEdFVChieXRlY29kZS5zY29wZSkuanNWYWx1ZSgp
KTsKKyAgICBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52
aXJvbm1lbnQqPihHRVQoYnl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKICAgICBTY29wZWRB
cmd1bWVudHNUYWJsZSogdGFibGUgPSBzY29wZS0+c3ltYm9sVGFibGUoKS0+YXJndW1lbnRzKCk7
CiAgICAgUkVUVVJOKFNjb3BlZEFyZ3VtZW50czo6Y3JlYXRlQnlDb3B5aW5nKGV4ZWMsIHRhYmxl
LCBzY29wZSkpOwogfQpAQCAtMjMyLDE2ICsyMzIsMTYgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2NyZWF0ZV90aGlzKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcENyZWF0ZVRoaXM+KCk7CiAgICAgSlNPYmplY3QqIHJlc3VsdDsKLSAgICBKU09iamVjdCog
Y29uc3RydWN0b3JBc09iamVjdCA9IGFzT2JqZWN0KEdFVChieXRlY29kZS5jYWxsZWUpLmpzVmFs
dWUoKSk7CisgICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yQXNPYmplY3QgPSBhc09iamVjdChHRVQo
Ynl0ZWNvZGUubV9jYWxsZWUpLmpzVmFsdWUoKSk7CiAgICAgaWYgKGNvbnN0cnVjdG9yQXNPYmpl
Y3QtPnR5cGUoKSA9PSBKU0Z1bmN0aW9uVHlwZSAmJiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0
cnVjdG9yQXNPYmplY3QpLT5jYW5Vc2VBbGxvY2F0aW9uUHJvZmlsZSgpKSB7CiAgICAgICAgIEpT
RnVuY3Rpb24qIGNvbnN0cnVjdG9yID0ganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvckFz
T2JqZWN0KTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4mIGNhY2hlZENhbGxlZSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGV4ZWMpLmNhY2hlZENhbGxlZTsKKyAgICAgICAgV3JpdGVCYXJyaWVy
PEpTQ2VsbD4mIGNhY2hlZENhbGxlZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpLm1fY2FjaGVk
Q2FsbGVlOwogICAgICAgICBpZiAoIWNhY2hlZENhbGxlZSkKICAgICAgICAgICAgIGNhY2hlZENh
bGxlZS5zZXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgIGVs
c2UgaWYgKGNhY2hlZENhbGxlZS51bnZhbGlkYXRlZEdldCgpICE9IEpTQ2VsbDo6c2Vlbk11bHRp
cGxlQ2FsbGVlT2JqZWN0cygpICYmIGNhY2hlZENhbGxlZS5nZXQoKSAhPSBjb25zdHJ1Y3RvcikK
ICAgICAgICAgICAgIGNhY2hlZENhbGxlZS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTQ2VsbDo6
c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKTsKIAotICAgICAgICBzaXplX3QgaW5saW5lQ2Fw
YWNpdHkgPSBieXRlY29kZS5pbmxpbmVDYXBhY2l0eTsKKyAgICAgICAgc2l6ZV90IGlubGluZUNh
cGFjaXR5ID0gYnl0ZWNvZGUubV9pbmxpbmVDYXBhY2l0eTsKICAgICAgICAgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUqIGFsbG9jYXRpb25Qcm9maWxlID0gY29uc3RydWN0b3ItPmVuc3VyZVJhcmVE
YXRhQW5kQWxsb2NhdGlvblByb2ZpbGUoZXhlYywgaW5saW5lQ2FwYWNpdHkpLT5vYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFsbG9jYXRp
b25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYywgc3RydWN0dXJlKTsKQEAgLTI2OSwxOCArMjY5LDE4IEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF90b190aGlzKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGV4ZWMpOwotICAgIEpTVmFsdWUgdjEgPSBHRVQoYnl0ZWNvZGUuc3JjRHN0KS5qc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSB2MSA9IEdFVChieXRlY29kZS5tX3NyY0RzdCkuanNWYWx1ZSgpOwog
ICAgIGlmICh2MS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIG15U3RydWN0dXJlID0g
djEuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIFN0cnVjdHVyZSogb3RoZXJTdHJ1
Y3R1cmUgPSBtZXRhZGF0YS5jYWNoZWRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIFN0cnVjdHVy
ZSogb3RoZXJTdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZS5nZXQoKTsKICAg
ICAgICAgaWYgKG15U3RydWN0dXJlICE9IG90aGVyU3RydWN0dXJlKSB7CiAgICAgICAgICAgICBp
ZiAob3RoZXJTdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEudG9UaGlzU3RhdHVz
ID0gVG9UaGlzQ29uZmxpY3RlZDsKLSAgICAgICAgICAgIG1ldGFkYXRhLmNhY2hlZFN0cnVjdHVy
ZS5zZXQodm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBteVN0cnVjdHVyZSk7CisgICAgICAgICAgICAg
ICAgbWV0YWRhdGEubV90b1RoaXNTdGF0dXMgPSBUb1RoaXNDb25mbGljdGVkOworICAgICAgICAg
ICAgbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmUuc2V0KHZtLCBleGVjLT5jb2RlQmxvY2soKSwg
bXlTdHJ1Y3R1cmUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbWV0YWRhdGEu
dG9UaGlzU3RhdHVzID0gVG9UaGlzQ29uZmxpY3RlZDsKLSAgICAgICAgbWV0YWRhdGEuY2FjaGVk
U3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1ldGFkYXRhLm1fdG9UaGlzU3RhdHVzID0gVG9U
aGlzQ29uZmxpY3RlZDsKKyAgICAgICAgbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmUuY2xlYXIo
KTsKICAgICB9CiAgICAgLy8gTm90ZTogV2Ugb25seSBuZWVkIHRvIGRvIHRoaXMgdmFsdWUgcHJv
ZmlsaW5nIGhlcmUgb24gdGhlIHNsb3cgcGF0aC4gVGhlIGZhc3QgcGF0aAogICAgIC8vIGp1c3Qg
cmV0dXJucyB0aGUgaW5wdXQgdG8gdG9fdGhpcyBpZiB0aGUgc3RydWN0dXJlIGNoZWNrIHN1Y2Nl
ZWRzLiBJZiB0aGUgc3RydWN0dXJlCkBAIC0yODksNyArMjg5LDcgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3RvX3RoaXMpCiAgICAgLy8gdGhlIHNhbWUgU3BlY3VsYXRlZFR5cGUuIFRoZXJl
Zm9yZSwgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB2YWx1ZSBwcm9maWxpbmcgb24gdGhl
CiAgICAgLy8gZmFzdCBwYXRoLgogICAgIGF1dG8gdmFsdWUgPSB2MS50b1RoaXMoZXhlYywgZXhl
Yy0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0cmljdE1v
ZGUpOwotICAgIFJFVFVSTl9XSVRIX1BST0ZJTElOR19DVVNUT00oYnl0ZWNvZGUuc3JjRHN0LCB2
YWx1ZSwgUFJPRklMRV9WQUxVRSh2YWx1ZSkpOworICAgIFJFVFVSTl9XSVRIX1BST0ZJTElOR19D
VVNUT00oYnl0ZWNvZGUubV9zcmNEc3QsIHZhbHVlLCBQUk9GSUxFX1ZBTFVFKHZhbHVlKSk7CiB9
CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90aHJvd190ZHpfZXJyb3IpCkBAIC0zMTQsOTAg
KzMxNCw5MCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbm90KQogewogICAgIEJFR0lOKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5vdD4oKTsKLSAgICBSRVRVUk4oanNCb29s
ZWFuKCFHRVRfQyhieXRlY29kZS5vcGVyYW5kKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKSk7
CisgICAgUkVUVVJOKGpzQm9vbGVhbighR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVl
KCkudG9Cb29sZWFuKGV4ZWMpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9lcSkK
IHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFcT4oKTsKLSAg
ICBSRVRVUk4oanNCb29sZWFuKEpTVmFsdWU6OmVxdWFsKGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLmxo
cykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSkpKTsKKyAgICBSRVRV
Uk4oanNCb29sZWFuKEpTVmFsdWU6OmVxdWFsKGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5q
c1ZhbHVlKCksIEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKSk7CiB9CiAKIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9uZXEpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wTmVxPigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oIUpTVmFsdWU6OmVx
dWFsKGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5y
aHMpLmpzVmFsdWUoKSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKCFKU1ZhbHVlOjplcXVhbChl
eGVjLCBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3Jo
cykuanNWYWx1ZSgpKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3RyaWN0ZXEp
CiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wU3RyaWN0ZXE+
KCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBHRVRf
QyhieXRlY29kZS5saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkp
KSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBHRVRf
QyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1
ZSgpKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbnN0cmljdGVxKQogewogICAg
IEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5zdHJpY3RlcT4oKTsKLSAg
ICBSRVRVUk4oanNCb29sZWFuKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBHRVRfQyhieXRl
Y29kZS5saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKSk7Cisg
ICAgUkVUVVJOKGpzQm9vbGVhbighSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgR0VUX0MoYnl0
ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkp
KTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xlc3MpCiB7CiAgICAgQkVHSU4oKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTGVzcz4oKTsKLSAgICBSRVRVUk4oanNCb29s
ZWFuKGpzTGVzczx0cnVlPihleGVjLCBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKSwgR0VU
X0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihqc0xl
c3M8dHJ1ZT4oZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0
ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2xlc3NlcSkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BM
ZXNzZXE+KCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihqc0xlc3NFcTx0cnVlPihleGVjLCBHRVRf
QyhieXRlY29kZS5saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkp
KSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihqc0xlc3NFcTx0cnVlPihleGVjLCBHRVRfQyhieXRl
Y29kZS5tX2xocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSkp
OwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ3JlYXRlcikKIHsKICAgICBCRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHcmVhdGVyPigpOwotICAgIFJFVFVSTihq
c0Jvb2xlYW4oanNMZXNzPGZhbHNlPihleGVjLCBHRVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUo
KSwgR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCkpKSk7CisgICAgUkVUVVJOKGpzQm9vbGVh
bihqc0xlc3M8ZmFsc2U+KGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCksIEdF
VF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9ncmVhdGVyZXEpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wR3JlYXRlcmVxPigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oanNMZXNzRXE8ZmFs
c2U+KGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5s
aHMpLmpzVmFsdWUoKSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGpzTGVzc0VxPGZhbHNlPihl
eGVjLCBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX2xo
cykuanNWYWx1ZSgpKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW5jKQogewog
ICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEluYz4oKTsKLSAgICBS
RVRVUk5fV0lUSF9QUk9GSUxJTkdfQ1VTVE9NKGJ5dGVjb2RlLnNyY0RzdCwganNOdW1iZXIoR0VU
KGJ5dGVjb2RlLnNyY0RzdCkuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpICsgMSksIHsgfSk7Cisg
ICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HX0NVU1RPTShieXRlY29kZS5tX3NyY0RzdCwganNOdW1i
ZXIoR0VUKGJ5dGVjb2RlLm1fc3JjRHN0KS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYykgKyAxKSwg
eyB9KTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlYykKIHsKICAgICBCRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BEZWM+KCk7Ci0gICAgUkVUVVJOX1dJVEhf
UFJPRklMSU5HX0NVU1RPTShieXRlY29kZS5zcmNEc3QsIGpzTnVtYmVyKEdFVChieXRlY29kZS5z
cmNEc3QpLmpzVmFsdWUoKS50b051bWJlcihleGVjKSAtIDEpLCB7IH0pOworICAgIFJFVFVSTl9X
SVRIX1BST0ZJTElOR19DVVNUT00oYnl0ZWNvZGUubV9zcmNEc3QsIGpzTnVtYmVyKEdFVChieXRl
Y29kZS5tX3NyY0RzdCkuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpIC0gMSksIHsgfSk7CiB9CiAK
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19zdHJpbmcpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgUkVUVVJOKEdFVF9D
KGJ5dGVjb2RlLm9wZXJhbmQpLmpzVmFsdWUoKS50b1N0cmluZyhleGVjKSk7CisgICAgUkVUVVJO
KEdFVF9DKGJ5dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpLnRvU3RyaW5nKGV4ZWMpKTsKIH0K
IAogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgdm9pZCB1cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFy
eUFyaXRoT3AoT3BOZWdhdGU6Ok1ldGFkYXRhJiBtZXRhZGF0YSwgSlNWYWx1ZSByZXN1bHQsIEpT
VmFsdWUgb3BlcmFuZCkKIHsKLSAgICBBcml0aFByb2ZpbGUmIHByb2ZpbGUgPSBtZXRhZGF0YS5h
cml0aFByb2ZpbGU7CisgICAgQXJpdGhQcm9maWxlJiBwcm9maWxlID0gbWV0YWRhdGEubV9hcml0
aFByb2ZpbGU7CiAgICAgcHJvZmlsZS5vYnNlcnZlTEhTKG9wZXJhbmQpOwogICAgIEFTU0VSVChy
ZXN1bHQuaXNOdW1iZXIoKSB8fCByZXN1bHQuaXNCaWdJbnQoKSk7CiAgICAgaWYgKHJlc3VsdC5p
c051bWJlcigpKSB7CkBAIC00MzQsNyArNDM0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X25lZ2F0ZSkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZWdh
dGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAg
ICBKU1ZhbHVlIG9wZXJhbmQgPSBHRVRfQyhieXRlY29kZS5vcGVyYW5kKS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSBvcGVyYW5kID0gR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7
CiAgICAgSlNWYWx1ZSBwcmltVmFsdWUgPSBvcGVyYW5kLnRvUHJpbWl0aXZlKGV4ZWMsIFByZWZl
ck51bWJlcik7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKQEAgLTQ5MSw3ICs0OTEsNyBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fbnVtYmVyKQogewogICAgIEJFR0lOKCk7CiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRvTnVtYmVyPigpOwotICAgIEpTVmFsdWUgYXJndW1l
bnQgPSBHRVRfQyhieXRlY29kZS5vcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBhcmd1
bWVudCA9IEdFVF9DKGJ5dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoYXJndW1lbnQudG9OdW1iZXIoZXhlYykpOwogICAgIFJFVFVSTl9Q
Uk9GSUxFRChyZXN1bHQpOwogfQpAQCAtNTAwLDkgKzUwMCw5IEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF90b19vYmplY3QpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAgSlNWYWx1ZSBhcmd1bWVudCA9IEdFVF9DKGJ5dGVj
b2RlLm9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gR0VUX0MoYnl0
ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgaWYgKFVOTElLRUxZKGFyZ3VtZW50Lmlz
VW5kZWZpbmVkT3JOdWxsKCkpKSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
ZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUubWVzc2FnZSk7CisgICAgICAg
IGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9tZXNzYWdlKTsKICAgICAgICAgaWYgKCFpZGVudC5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBUSFJPVyhjcmVhdGVUeXBlRXJyb3IoZXhlYywgaWRlbnQuaW1wbCgpKSk7CiAgICAg
fQpAQCAtNTE0LDggKzUxNCw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9hZGQpCiB7CiAg
ICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQWRkPigpOwotICAgIEpT
VmFsdWUgdjEgPSBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHYy
ID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2MSA9IEdFVF9D
KGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2MiA9IEdFVF9DKGJ5dGVj
b2RlLm1fcmhzKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAKICAgICBBcml0aFBy
b2ZpbGUmIGFyaXRoUHJvZmlsZSA9ICpleGVjLT5jb2RlQmxvY2soKS0+YXJpdGhQcm9maWxlRm9y
UEMocGMpOwpAQCAtNTQzLDggKzU0Myw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9tdWwp
CiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTXVsPigpOwot
ICAgIEpTVmFsdWUgbGVmdCA9IEdFVF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpOwotICAgIEpT
VmFsdWUgcmlnaHQgPSBHRVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IGxlZnQgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcmln
aHQgPSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcmVzdWx0
ID0ganNNdWwoZXhlYywgbGVmdCwgcmlnaHQpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAg
IFJFVFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKQEAgLTU1Niw4ICs1NTYsOCBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfc3ViKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcFN1Yj4oKTsKLSAgICBKU1ZhbHVlIGxlZnQgPSBHRVRfQyhieXRlY29k
ZS5saHMpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUucmhz
KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpz
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFs
dWUoKTsKICAgICBhdXRvIGxlZnROdW1lcmljID0gbGVmdC50b051bWVyaWMoZXhlYyk7CiAgICAg
Q0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgYXV0byByaWdodE51bWVyaWMgPSByaWdodC50b051bWVy
aWMoZXhlYyk7CkBAIC01ODUsOCArNTg1LDggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Rp
dikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BEaXY+KCk7
Ci0gICAgSlNWYWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCk7Ci0gICAg
SlNWYWx1ZSByaWdodCA9IEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpOworICAgIEpTVmFs
dWUgbGVmdCA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBy
aWdodCA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCk7CiAgICAgYXV0byBsZWZ0TnVt
ZXJpYyA9IGxlZnQudG9OdW1lcmljKGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAg
IGF1dG8gcmlnaHROdW1lcmljID0gcmlnaHQudG9OdW1lcmljKGV4ZWMpOwpAQCAtNjE2LDggKzYx
Niw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9tb2QpCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTW9kPigpOwotICAgIEpTVmFsdWUgbGVmdCA9IEdF
VF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgcmlnaHQgPSBHRVRfQyhi
eXRlY29kZS5yaHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGxlZnQgPSBHRVRfQyhieXRlY29k
ZS5tX2xocykuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcmlnaHQgPSBHRVRfQyhieXRlY29kZS5t
X3JocykuanNWYWx1ZSgpOwogICAgIGF1dG8gbGVmdE51bWVyaWMgPSBsZWZ0LnRvTnVtZXJpYyhl
eGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IHJp
Z2h0LnRvTnVtZXJpYyhleGVjKTsKQEAgLTY0MiwxMCArNjQyLDEwIEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wb3cpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wUG93PigpOwotICAgIGRvdWJsZSBhID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVl
KCkudG9OdW1iZXIoZXhlYyk7CisgICAgZG91YmxlIGEgPSBHRVRfQyhieXRlY29kZS5tX2xocyku
anNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7Ci0gICAgZG91YmxlIGIgPSBH
RVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKS50b051bWJlcihleGVjKTsKKyAgICBkb3VibGUg
YiA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYyk7CiAgICAg
aWYgKFVOTElLRUxZKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNW
YWx1ZSgpKTsKICAgICBSRVRVUk4oanNOdW1iZXIob3BlcmF0aW9uTWF0aFBvdyhhLCBiKSkpOwpA
QCAtNjU1LDggKzY1NSw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sc2hpZnQpCiB7CiAg
ICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTHNoaWZ0PigpOwotICAg
IEpTVmFsdWUgbGVmdCA9IEdFVF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpOwotICAgIEpTVmFs
dWUgcmlnaHQgPSBHRVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGxl
ZnQgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcmlnaHQg
PSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpOwogICAgIGF1dG8gbGVmdE51bWVyaWMg
PSBsZWZ0LnRvQmlnSW50T3JJbnQzMihleGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAg
ICBhdXRvIHJpZ2h0TnVtZXJpYyA9IHJpZ2h0LnRvQmlnSW50T3JJbnQzMihleGVjKTsKQEAgLTY3
OSw4ICs2NzksOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcnNoaWZ0KQogewogICAgIEJF
R0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJzaGlmdD4oKTsKLSAgICBKU1Zh
bHVlIGxlZnQgPSBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHJp
Z2h0ID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBsZWZ0ID0g
R0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VU
X0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKTsKICAgICBhdXRvIGxlZnROdW1lcmljID0gbGVm
dC50b0JpZ0ludE9ySW50MzIoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgYXV0
byByaWdodE51bWVyaWMgPSByaWdodC50b0JpZ0ludE9ySW50MzIoZXhlYyk7CkBAIC03MDMsMTAg
KzcwMywxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdXJzaGlmdCkKIHsKICAgICBCRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BVcnNoaWZ0PigpOwotICAgIHVpbnQz
Ml90IGEgPSBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKKyAg
ICB1aW50MzJfdCBhID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKS50b1VJbnQzMihl
eGVjKTsKICAgICBpZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAg
IFJFVFVSTihKU1ZhbHVlKCkpOwotICAgIHVpbnQzMl90IGIgPSBHRVRfQyhieXRlY29kZS5yaHMp
LmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKKyAgICB1aW50MzJfdCBiID0gR0VUX0MoYnl0ZWNv
ZGUubV9yaHMpLmpzVmFsdWUoKS50b1VJbnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oYSA+PiAoYiAmIDMxKSkpKTsKIH0KIApAQCAtNzE0LDcgKzcx
NCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF91bnNpZ25lZCkKIHsKICAgICBCRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BVbnNpZ25lZD4oKTsKLSAgICB1aW50MzJf
dCBhID0gR0VUX0MoYnl0ZWNvZGUub3BlcmFuZCkuanNWYWx1ZSgpLnRvVUludDMyKGV4ZWMpOwor
ICAgIHVpbnQzMl90IGEgPSBHRVRfQyhieXRlY29kZS5tX29wZXJhbmQpLmpzVmFsdWUoKS50b1VJ
bnQzMihleGVjKTsKICAgICBSRVRVUk4oanNOdW1iZXIoYSkpOwogfQogCkBAIC03MjIsNyArNzIy
LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2JpdG5vdCkKIHsKICAgICBCRUdJTigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BCaXRub3Q+KCk7Ci0gICAgaW50MzJfdCBvcGVy
YW5kID0gR0VUX0MoYnl0ZWNvZGUub3BlcmFuZCkuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7Cisg
ICAgaW50MzJfdCBvcGVyYW5kID0gR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCku
dG9JbnQzMihleGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBSRVRVUk5fUFJPRklM
RUQoanNOdW1iZXIofm9wZXJhbmQpKTsKIH0KQEAgLTczMSw5ICs3MzEsOSBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfYml0YW5kKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcEJpdGFuZD4oKTsKLSAgICBhdXRvIGxlZnROdW1lcmljID0gR0VUX0MoYnl0
ZWNvZGUubGhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGV4ZWMpOworICAgIGF1dG8gbGVm
dE51bWVyaWMgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQz
MihleGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9
IEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVjKTsKKyAg
ICBhdXRvIHJpZ2h0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9C
aWdJbnRPckludDMyKGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVmdE51bWVyaWMpIHx8IFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSB7CiAgICAgICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVmdE51bWVyaWMpICYmIFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVyaWMpKSB7CkBAIC03NTIsOSArNzUyLDkg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2JpdG9yKQogewogICAgIEJFR0lOKCk7CiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcEJpdG9yPigpOwotICAgIGF1dG8gbGVmdE51bWVyaWMg
PSBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKS50b0JpZ0ludE9ySW50MzIoZXhlYyk7Cisg
ICAgYXV0byBsZWZ0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkudG9C
aWdJbnRPckludDMyKGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIGF1dG8gcmln
aHROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMy
KGV4ZWMpOworICAgIGF1dG8gcmlnaHROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpz
VmFsdWUoKS50b0JpZ0ludE9ySW50MzIoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAg
ICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgfHwg
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAgICAg
ICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykgJiYg
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKQEAgLTc3
Myw5ICs3NzMsOSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfYml0eG9yKQogewogICAgIEJF
R0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEJpdHhvcj4oKTsKLSAgICBhdXRv
IGxlZnROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPcklu
dDMyKGV4ZWMpOworICAgIGF1dG8gbGVmdE51bWVyaWMgPSBHRVRfQyhieXRlY29kZS5tX2xocyku
anNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsK
LSAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpLnRv
QmlnSW50T3JJbnQzMihleGVjKTsKKyAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IEdFVF9DKGJ5dGVj
b2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGV4ZWMpOwogICAgIENIRUNLX0VY
Q0VQVElPTigpOwogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVm
dE51bWVyaWMpIHx8IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVy
aWMpKSB7CiAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4obGVm
dE51bWVyaWMpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihyaWdodE51bWVy
aWMpKSB7CkBAIC03OTQsMjEgKzc5NCwyMSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdHlw
ZW9mKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFR5cGVv
Zj4oKTsKLSAgICBSRVRVUk4oanNUeXBlU3RyaW5nRm9yVmFsdWUoZXhlYywgR0VUX0MoYnl0ZWNv
ZGUudmFsdWUpLmpzVmFsdWUoKSkpOworICAgIFJFVFVSTihqc1R5cGVTdHJpbmdGb3JWYWx1ZShl
eGVjLCBHRVRfQyhieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCkpKTsKIH0KIAogU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2lzX29iamVjdF9vcl9udWxsKQogewogICAgIEJFR0lOKCk7CiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcElzT2JqZWN0T3JOdWxsPigpOwotICAgIFJFVFVSTihq
c0Jvb2xlYW4oanNJc09iamVjdFR5cGVPck51bGwoZXhlYywgR0VUX0MoYnl0ZWNvZGUub3BlcmFu
ZCkuanNWYWx1ZSgpKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oanNJc09iamVjdFR5cGVPck51
bGwoZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkpKSk7CiB9CiAKIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pc19mdW5jdGlvbikKIHsKICAgICBCRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJc0Z1bmN0aW9uPigpOwotICAgIFJFVFVSTihqc0Jv
b2xlYW4oR0VUX0MoYnl0ZWNvZGUub3BlcmFuZCkuanNWYWx1ZSgpLmlzRnVuY3Rpb24odm0pKSk7
CisgICAgUkVUVVJOKGpzQm9vbGVhbihHRVRfQyhieXRlY29kZS5tX29wZXJhbmQpLmpzVmFsdWUo
KS5pc0Z1bmN0aW9uKHZtKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW5fYnlf
dmFsKQpAQCAtODE2LDcgKzgxNiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pbl9ieV92
YWwpCiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSW5CeVZhbD4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgIFJF
VFVSTihqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZXhlYywgR0VUX0MoYnl0
ZWNvZGUuYmFzZSkuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgp
LCAmbWV0YWRhdGEuYXJyYXlQcm9maWxlKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29tbW9u
U2xvd1BhdGhzOjpvcEluQnlWYWwoZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVl
KCksIEdFVF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKSwgJm1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW5fYnlfaWQpCkBA
IC04MjQsMjIgKzgyNCwyMiBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaW5fYnlfaWQpCiAg
ICAgQkVHSU4oKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJbkJ5SWQ+KCk7Ci0g
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsK
ICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVjdCgpKQogICAgICAgICBUSFJPVyhjcmVhdGVJbnZh
bGlkSW5QYXJhbWV0ZXJFcnJvcihleGVjLCBiYXNlVmFsdWUpKTsKIAotICAgIFJFVFVSTihqc0Jv
b2xlYW4oYXNPYmplY3QoYmFzZVZhbHVlKS0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+Y29kZUJs
b2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKSkpOworICAgIFJFVFVSTihqc0Jv
b2xlYW4oYXNPYmplY3QoYmFzZVZhbHVlKS0+aGFzUHJvcGVydHkoZXhlYywgZXhlYy0+Y29kZUJs
b2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpKSk7CiB9CiAKIFNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9kZWxfYnlfdmFsKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcERlbEJ5VmFsPigpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
R0VUX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
R0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmpl
Y3QgPSBiYXNlVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAg
ICAgCi0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBHRVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNW
YWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gR0VUX0MoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuanNWYWx1ZSgpOwogICAgIAogICAgIGJvb2wgY291bGREZWxldGU7CiAgICAgCkBAIC04NjMs
MTQgKzg2MywxNCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3RyY2F0KQogewogICAgIEJF
R0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFN0cmNhdD4oKTsKLSAgICBSRVRV
Uk4oanNTdHJpbmdGcm9tUmVnaXN0ZXJBcnJheShleGVjLCAmR0VUKGJ5dGVjb2RlLnNyYyksIGJ5
dGVjb2RlLmNvdW50KSk7CisgICAgUkVUVVJOKGpzU3RyaW5nRnJvbVJlZ2lzdGVyQXJyYXkoZXhl
YywgJkdFVChieXRlY29kZS5tX3NyYyksIGJ5dGVjb2RlLm1fY291bnQpKTsKIH0KIAogU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSkKIHsKICAgICBCRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUb1ByaW1pdGl2ZT4oKTsKLSAgICBSRVRVUk4oR0VUX0Mo
Ynl0ZWNvZGUuc3JjKS5qc1ZhbHVlKCkudG9QcmltaXRpdmUoZXhlYykpOworICAgIFJFVFVSTihH
RVRfQyhieXRlY29kZS5tX3NyYykuanNWYWx1ZSgpLnRvUHJpbWl0aXZlKGV4ZWMpKTsKIH0KIAog
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2VudGVyKQpAQCAtODg1LDcgKzg4NSw3IEBAIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV8KIHsKICAgICBCRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpOwotICAgIEpT
VmFsdWUgZW51bWVyYXRvclZhbHVlID0gR0VUKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKKyAg
ICBKU1ZhbHVlIGVudW1lcmF0b3JWYWx1ZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUo
KTsKICAgICBpZiAoZW51bWVyYXRvclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAg
IFJFVFVSTihqc051bWJlcigwKSk7CiAKQEAgLTg5OSwxMCArODk5LDEwIEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9oYXNfaW5kZXhlZF9wcm8KICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVChi
eXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGJh
c2UgPSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAg
Q0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5w
cm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIG1ldGFkYXRhLmFycmF5UHJvZmlsZS5vYnNlcnZlU3Ry
dWN0dXJlKGJhc2UtPnN0cnVjdHVyZSh2bSkpOworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOworICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlLm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+c3RydWN0dXJlKHZtKSk7CiAgICAgQVNTRVJUKHBy
b3BlcnR5LmlzVUludDMyKCkpOwogICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVy
dHlHZW5lcmljKGV4ZWMsIHByb3BlcnR5LmFzVUludDMyKCksIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXRPd25Qcm9wZXJ0eSkpKTsKIH0KQEAgLTkxMSwxMSArOTExLDExIEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9oYXNfc3RydWN0dXJlX3AKIHsKICAgICBCRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsK
LSAgICBKU09iamVjdCogYmFzZSA9IEdFVChieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkudG9PYmpl
Y3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5qc1Zh
bHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1
ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOworICAgIEpTVmFs
dWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwogICAgIEFT
U0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVj
b2RlLmVudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+
KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgaWYg
KGJhc2UtPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJl
SUQoKSkKICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAgICAgSlNTdHJpbmcqIHN0
cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKQEAgLTkyOCw5ICs5MjgsOSBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfaGFzX2dlbmVyaWNfcHJvCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzR2VuZXJpY1Byb3BlcnR5PigpOwotICAgIEpTT2JqZWN0
KiBiYXNlID0gR0VUKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKS50b09iamVjdChleGVjKTsKKyAg
ICBKU09iamVjdCogYmFzZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVj
dChleGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0g
R0VUKGJ5dGVjb2RlLnByb3BlcnR5KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9
IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHByb3BlcnR5
LmlzU3RyaW5nKCkpOwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7
CiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihleGVjKTsKQEAg
LTk0Miw4ICs5NDIsOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFt
CiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RGlyZWN0
UG5hbWU+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5iYXNlKS5q
c1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5wcm9wZXJ0eSku
anNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNl
KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3Bl
cnR5KS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwogICAgIEpT
U3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7CiAgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihleGVjKTsKQEAgLTk1NSw3ICs5NTUsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2VuCiB7CiAgICAgQkVHSU4oKTsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpOwotICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKICAgICBp
ZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIFJFVFVSTihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSkpOwogCkBAIC05NjksOCArOTY5LDggQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydQogewogICAgIEJFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsK
LSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLmVudW1lcmF0b3IpLmpzVmFsdWUoKS5h
c0NlbGwoKSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUuaW5kZXgpLmpzVmFs
dWUoKS5hc1VJbnQzMigpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRv
ciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIHVpbnQzMl90IGluZGV4ID0gR0VUKGJ5
dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpOwogCiAgICAgSlNTdHJpbmcqIHBy
b3BlcnR5TmFtZSA9IG51bGxwdHI7CiAgICAgaWYgKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3Ry
dWN0dXJlUHJvcGVydHlJbmRleCgpKQpAQCAtOTgyLDggKzk4Miw4IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dlbmUKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqPihHRVQoYnl0ZWNvZGUuZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAg
ICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5pbmRleCkuanNWYWx1ZSgpLmFzVUludDMy
KCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFs
dWUoKS5hc0NlbGwoKSk7CisgICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRl
eCkuanNWYWx1ZSgpLmFzVUludDMyKCk7CiAKICAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0g
bnVsbHB0cjsKICAgICBpZiAoZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgp
IDw9IGluZGV4ICYmIGluZGV4IDwgZW51bWVyYXRvci0+ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgo
KSkKQEAgLTk5NSw3ICs5OTUsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9faW5kZXhf
c3RyaW5nCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9J
bmRleFN0cmluZz4oKTsKLSAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywgSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBHRVQoYnl0ZWNvZGUuaW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpKS5zdHJpbmco
KSkpOworICAgIFJFVFVSTihqc1N0cmluZyhleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIEdF
VChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkuc3RyaW5nKCkpKTsKIH0K
IAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfdHlwZV9jbGVhcl9sb2cpCkBAIC0x
MDE2LDEwICsxMDE2LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNh
bF8KIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCk7Ci0gICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUuc2NvcGUu
b2Zmc2V0KCk7CisgICAgaW50IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsK
ICAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKLSAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8
U3ltYm9sVGFibGUqPihHRVRfQyhieXRlY29kZS5zeW1ib2xUYWJsZSkuanNWYWx1ZSgpKTsKLSAg
ICBKU1ZhbHVlIGluaXRpYWxWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLmluaXRpYWxWYWx1ZSkuanNW
YWx1ZSgpOworICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJs
ZSo+KEdFVF9DKGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1
ZSBpbml0aWFsVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2luaXRpYWxWYWx1ZSkuanNWYWx1ZSgp
OwogICAgIEFTU0VSVChpbml0aWFsVmFsdWUgPT0ganNVbmRlZmluZWQoKSB8fCBpbml0aWFsVmFs
dWUgPT0ganNURFpWYWx1ZSgpKTsKICAgICBKU1Njb3BlKiBuZXdTY29wZSA9IEpTTGV4aWNhbEVu
dmlyb25tZW50OjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY3VycmVu
dFNjb3BlLCBzeW1ib2xUYWJsZSwgaW5pdGlhbFZhbHVlKTsKICAgICBSRVRVUk4obmV3U2NvcGUp
OwpAQCAtMTAyOSwxMCArMTAyOSwxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHVzaF93
aXRoX3Njb3BlCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
UHVzaFdpdGhTY29wZT4oKTsKLSAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRlY29k
ZS5uZXdTY29wZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBuZXdT
Y29wZSA9IEdFVF9DKGJ5dGVjb2RlLm1fbmV3U2NvcGUpLmpzVmFsdWUoKS50b09iamVjdChleGVj
KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKIAotICAgIGludCBzY29wZVJlZyA9IGJ5dGVjb2Rl
LmN1cnJlbnRTY29wZS5vZmZzZXQoKTsKKyAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1
cnJlbnRTY29wZS5vZmZzZXQoKTsKICAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBleGVjLT51
bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBSRVRVUk4oSlNXaXRo
U2NvcGU6OmNyZWF0ZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjdXJyZW50U2Nv
cGUsIG5ld1Njb3BlKSk7CiB9CkBAIC0xMDQxLDggKzEwNDEsOCBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcmVzb2x2ZV9zY29wZV9mCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKTsK
LSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hl
Y2tlZFIoYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0
ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRS
KGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIEpTVmFs
dWUgcmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0Rl
Y2xJbkV2YWwoZXhlYywgc2NvcGUsIGlkZW50KTsKIAogICAgIENIRUNLX0VYQ0VQVElPTigpOwpA
QCAtMTA1NSwxMyArMTA1NSwxMyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9z
Y29wZSkKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZl
U2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsK
LSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLnZhcik7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRS
KGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
Lm1fdmFyKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZS5vZmZzZXQoKSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNPYmplY3QqIHJlc29s
dmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNvbHZlKGV4ZWMsIHNjb3BlLCBpZGVudCk7CiAgICAgLy8g
UHJveHkgY2FuIHRocm93IGFuIGVycm9yIGhlcmUsIGUuZy4gUHJveHkgaW4gd2l0aCBzdGF0ZW1l
bnQncyBAdW5zY29wYWJsZXMuCiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLnJlc29sdmVUeXBlOworICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKIAogICAgIC8vIE1vZHVsZVZh
ciBkb2VzIG5vdCBrZWVwIHRoZSBzY29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCiAg
ICAgQVNTRVJUKHJlc29sdmVUeXBlICE9IE1vZHVsZVZhcik7CkBAIC0xMDc0LDIwICsxMDc0LDIw
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgICAgICAgICAg
aWYgKGhhc1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxv
Y2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gVW5yZXNvbHZlZFByb3BlcnR5KQotICAgICAgICAgICAgICAgICAgICBtZXRh
ZGF0YS5yZXNvbHZlVHlwZSA9IEdsb2JhbFByb3BlcnR5OworICAgICAgICAgICAgICAgICAgICBt
ZXRhZGF0YS5tX3Jlc29sdmVUeXBlID0gR2xvYmFsUHJvcGVydHk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS5yZXNvbHZlVHlwZSA9IEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRh
dGEubV9yZXNvbHZlVHlwZSA9IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczsK
IAotICAgICAgICAgICAgICAgIG1ldGFkYXRhLmdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsK
KyAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX2dsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlZFNjb3BlLT5pc0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudCgpKSB7CiAgICAgICAgICAgICBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudCogZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50ID0ganNDYXN0PEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50Kj4ocmVzb2x2ZWRTY29wZSk7CiAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICAgICAgaWYg
KHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICBtZXRh
ZGF0YS5yZXNvbHZlVHlwZSA9IEdsb2JhbExleGljYWxWYXI7CisgICAgICAgICAgICAgICAgbWV0
YWRhdGEubV9yZXNvbHZlVHlwZSA9IEdsb2JhbExleGljYWxWYXI7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGEucmVzb2x2ZVR5cGUgPSBHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczsKLSAgICAgICAgICAgIG1ldGFkYXRhLmdsb2JhbExleGlj
YWxFbnZpcm9ubWVudCA9IGdsb2JhbExleGljYWxFbnZpcm9ubWVudDsKKyAgICAgICAgICAgICAg
ICBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlID0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2dsb2JhbExleGljYWxFbnZpcm9ubWVu
dCA9IGdsb2JhbExleGljYWxFbnZpcm9ubWVudDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTA5
OCwxMCArMTA5OCwxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3Jlc3QpCiB7
CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlUmVzdD4o
KTsKLSAgICB1bnNpZ25lZCBhcnJheVNpemUgPSBHRVRfQyhieXRlY29kZS5hcnJheVNpemUpLmpz
VmFsdWUoKS5hc1VJbnQzMigpOworICAgIHVuc2lnbmVkIGFycmF5U2l6ZSA9IEdFVF9DKGJ5dGVj
b2RlLm1fYXJyYXlTaXplKS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5yZXN0UGFyYW1ldGVyU3RydWN0dXJlKCk7
Ci0gICAgdW5zaWduZWQgbnVtUGFyYW1zVG9Ta2lwID0gYnl0ZWNvZGUubnVtUGFyYW1ldGVyc1Rv
U2tpcDsKKyAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRlY29kZS5tX251bVBhcmFt
ZXRlcnNUb1NraXA7CiAgICAgSlNWYWx1ZSogYXJndW1lbnRzVG9Db3B5UmVnaW9uID0gZXhlYy0+
YWRkcmVzc09mQXJndW1lbnRzU3RhcnQoKSArIG51bVBhcmFtc1RvU2tpcDsKICAgICBSRVRVUk4o
Y29uc3RydWN0QXJyYXkoZXhlYywgc3RydWN0dXJlLCBhcmd1bWVudHNUb0NvcHlSZWdpb24sIGFy
cmF5U2l6ZSkpOwogfQpAQCAtMTExMCw5ICsxMTEwLDkgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX2dldF9ieV9pZF93aXRoXwogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKLSAg
ICBKU1ZhbHVlIHRoaXNWYWwgPSBHRVRfQyhieXRlY29kZS50aGlzVmFsdWUpLmpzVmFsdWUoKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0Mo
Ynl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsID0gR0VUX0Mo
Ynl0ZWNvZGUubV90aGlzVmFsdWUpLmpzVmFsdWUoKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzVmFsLCBQcm9wZXJ0eVNsb3Q6OlByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpH
ZXQpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xv
dCk7CiAgICAgUkVUVVJOX1BST0ZJTEVEKHJlc3VsdCk7CkBAIC0xMTIzLDkgKzExMjMsOSBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X3ZhbF93aXRoCiAgICAgQkVHSU4oKTsKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRCeVZhbFdpdGhUaGlzPigpOwotICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOwotICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gR0VUX0MoYnl0ZWNvZGUudGhpc1ZhbHVlKS5qc1ZhbHVlKCk7Ci0g
ICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBHRVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgp
OworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX3RoaXNWYWx1ZSku
anNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gR0VUX0MoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuanNWYWx1ZSgpOwogCiAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkgJiYg
c3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7CiAgICAgICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0g
KmJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKQEAgLTExNTgsMTAgKzExNTgsMTAg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZF93aXRoXwogICAgIEJFR0lOKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1dEJ5SWRXaXRoVGhpcz4oKTsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KTsK
LSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsK
LSAgICBKU1ZhbHVlIHRoaXNWYWwgPSBHRVRfQyhieXRlY29kZS50aGlzVmFsdWUpLmpzVmFsdWUo
KTsKLSAgICBKU1ZhbHVlIHB1dFZhbHVlID0gR0VUX0MoYnl0ZWNvZGUudmFsdWUpLmpzVmFsdWUo
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVj
b2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbCA9IEdFVF9DKGJ5dGVj
b2RlLm1fdGhpc1ZhbHVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBwdXRWYWx1ZSA9IEdFVF9D
KGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzVmFsLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBjb2RlQmxvY2stPnB1dEJ5SWRDb250
ZXh0KCkpOwogICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIHB1dFZhbHVlLCBz
bG90KTsKICAgICBFTkQoKTsKQEAgLTExNzEsMTAgKzExNzEsMTAgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX3B1dF9ieV92YWxfd2l0aAogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcFB1dEJ5VmFsV2l0aFRoaXM+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBHRVRfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBHRVRfQyhieXRlY29kZS50aGlzVmFsdWUpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IEdFVF9DKGJ5dGVjb2RlLnByb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1
ZSB2YWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKS5qc1ZhbHVlKCk7CisgICAg
SlNWYWx1ZSBzdWJzY3JpcHQgPSBHRVRfQyhieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsK
ICAgICAKICAgICBhdXRvIHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7
CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC0xMTg3LDEwICsxMTg3LDEwIEBAIFNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9kZWZpbmVfZGF0YV9wcm8KIHsKICAgICBCRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BEZWZpbmVEYXRhUHJvcGVydHk+KCk7Ci0gICAgSlNPYmpl
Y3QqIGJhc2UgPSBhc09iamVjdChHRVRfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkpOwotICAg
IEpTVmFsdWUgcHJvcGVydHkgPSBHRVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOwot
ICAgIEpTVmFsdWUgdmFsdWUgPSBHRVRfQyhieXRlY29kZS52YWx1ZSkuanNWYWx1ZSgpOwotICAg
IEpTVmFsdWUgYXR0cmlidXRlcyA9IEdFVF9DKGJ5dGVjb2RlLmF0dHJpYnV0ZXMpLmpzVmFsdWUo
KTsKKyAgICBKU09iamVjdCogYmFzZSA9IGFzT2JqZWN0KEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSku
anNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUX0MoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX3Zh
bHVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBhdHRyaWJ1dGVzID0gR0VUX0MoYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGF0dHJpYnV0ZXMuaXNJbnQzMigp
KTsKIAogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gcHJvcGVydHkudG9Qcm9wZXJ0eUtleShleGVj
KTsKQEAgLTEyMDUsMTEgKzEyMDUsMTEgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlZmlu
ZV9hY2Nlc3NvcgogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cERlZmluZUFjY2Vzc29yUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBhc09iamVj
dChHRVRfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgcHJvcGVydHkg
PSBHRVRfQyhieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgZ2V0dGVy
ID0gR0VUX0MoYnl0ZWNvZGUuZ2V0dGVyKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzZXR0ZXIg
PSBHRVRfQyhieXRlY29kZS5zZXR0ZXIpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIGF0dHJpYnV0
ZXMgPSBHRVRfQyhieXRlY29kZS5hdHRyaWJ1dGVzKS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3Qq
IGJhc2UgPSBhc09iamVjdChHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKSk7CisgICAg
SlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIGdldHRlciA9IEdFVF9DKGJ5dGVjb2RlLm1fZ2V0dGVyKS5qc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSBzZXR0ZXIgPSBHRVRfQyhieXRlY29kZS5tX3NldHRlcikuanNWYWx1ZSgp
OworICAgIEpTVmFsdWUgYXR0cmlidXRlcyA9IEdFVF9DKGJ5dGVjb2RlLm1fYXR0cmlidXRlcyku
anNWYWx1ZSgpOwogICAgIEFTU0VSVChhdHRyaWJ1dGVzLmlzSW50MzIoKSk7CiAKICAgICBhdXRv
IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xMjI0LDEw
ICsxMjI0LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90aHJvd19zdGF0aWNfZXIKIHsK
ICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUaHJvd1N0YXRpY0Vy
cm9yPigpOwotICAgIEpTVmFsdWUgZXJyb3JNZXNzYWdlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5t
ZXNzYWdlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBlcnJvck1lc3NhZ2VWYWx1ZSA9IEdFVF9D
KGJ5dGVjb2RlLm1fbWVzc2FnZSkuanNWYWx1ZSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGVycm9y
TWVzc2FnZVZhbHVlLmlzU3RyaW5nKCkpOwogICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBhc1N0
cmluZyhlcnJvck1lc3NhZ2VWYWx1ZSktPnZhbHVlKGV4ZWMpOwotICAgIEVycm9yVHlwZSBlcnJv
clR5cGUgPSBieXRlY29kZS5lcnJvclR5cGU7CisgICAgRXJyb3JUeXBlIGVycm9yVHlwZSA9IGJ5
dGVjb2RlLm1fZXJyb3JUeXBlOwogICAgIFRIUk9XKGNyZWF0ZUVycm9yKGV4ZWMsIGVycm9yVHlw
ZSwgZXJyb3JNZXNzYWdlKSk7CiB9CiAKQEAgLTEyMzUsMTEgKzEyMzUsMTEgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25ld19hcnJheV93aXRoXwogewogICAgIEJFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5V2l0aFNwcmVhZD4oKTsKLSAgICBpbnQgbnVt
SXRlbXMgPSBieXRlY29kZS5hcmdjOworICAgIGludCBudW1JdGVtcyA9IGJ5dGVjb2RlLm1fYXJn
YzsKICAgICBBU1NFUlQobnVtSXRlbXMgPj0gMCk7Ci0gICAgY29uc3QgQml0VmVjdG9yJiBiaXRW
ZWN0b3IgPSBleGVjLT5jb2RlQmxvY2soKS0+dW5saW5rZWRDb2RlQmxvY2soKS0+Yml0VmVjdG9y
KGJ5dGVjb2RlLmJpdFZlY3Rvcik7CisgICAgY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0b3IgPSBl
eGVjLT5jb2RlQmxvY2soKS0+dW5saW5rZWRDb2RlQmxvY2soKS0+Yml0VmVjdG9yKGJ5dGVjb2Rl
Lm1fYml0VmVjdG9yKTsKIAotICAgIEpTVmFsdWUqIHZhbHVlcyA9IGJpdHdpc2VfY2FzdDxKU1Zh
bHVlKj4oJkdFVChieXRlY29kZS5hcmd2KSk7CisgICAgSlNWYWx1ZSogdmFsdWVzID0gYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigmR0VUKGJ5dGVjb2RlLm1fYXJndikpOwogCiAgICAgQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRBcnJheVNpemUgPSAwOwogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtSXRlbXM7IGkrKykgewpAQCAtMTI4OSw5ICsxMjg5LDkgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9idWZmZQogewogICAgIEJFR0lOKCk7CiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5QnVmZmVyPigpOwotICAgIEFTU0VS
VChleGVjLT5jb2RlQmxvY2soKS0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoYnl0ZWNvZGUuaW1t
dXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7Ci0gICAgSlNJbW11dGFibGVCdXR0ZXJmbHkqIGlt
bXV0YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KEdF
VF9DKGJ5dGVjb2RlLmltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAg
ICBhdXRvJiBwcm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoZXhlYykuYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZTsKKyAgICBBU1NFUlQoZXhlYy0+Y29kZUJsb2NrKCktPmlzQ29uc3RhbnRSZWdpc3Rl
ckluZGV4KGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKSk7CisgICAgSlNJ
bW11dGFibGVCdXR0ZXJmbHkqIGltbXV0YWJsZUJ1dHRlcmZseSA9IGJpdHdpc2VfY2FzdDxKU0lt
bXV0YWJsZUJ1dHRlcmZseSo+KEdFVF9DKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5q
c1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIGF1dG8mIHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0
YShleGVjKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAKICAgICBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdNb2RlID0gcHJvZmlsZS5zZWxlY3RJbmRleGluZ1R5cGUoKTsKICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nTW9kZSk7CkBAIC0xMzA5LDcg
KzEzMDksNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlCiAgICAg
ICAgIC8vIFdlIGFsc28gY2Fubm90IGFsbG9jYXRlIGEgbmV3IGJ1dHRlcmZseSBmcm9tIGNvbXBp
bGF0aW9uIHRocmVhZHMgc2luY2UgaXQncyBpbnZhbGlkIHRvIGFsbG9jYXRlIGNlbGxzIGZyb20K
ICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihieXRlY29kZS5p
bW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFibGVC
dXR0ZXJmbHkpOworICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUu
bV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpLnNldCh2bSwgY29kZUJsb2NrLCBpbW11dGFi
bGVCdXR0ZXJmbHkpOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KIApA
QCAtMTMyNCw3ICsxMzI0LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3NwcmVhZCkKICAg
ICBCRUdJTigpOwogCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFNwcmVhZD4oKTsKLSAg
ICBKU1ZhbHVlIGl0ZXJhYmxlID0gR0VUX0MoYnl0ZWNvZGUuYXJndW1lbnQpLmpzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gR0VUX0MoYnl0ZWNvZGUubV9hcmd1bWVudCkuanNWYWx1
ZSgpOwogCiAgICAgaWYgKGl0ZXJhYmxlLmlzQ2VsbCgpICYmIGlzSlNBcnJheShpdGVyYWJsZS5h
c0NlbGwoKSkpIHsKICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGl0
ZXJhYmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oCShyZXZpc2lvbiAyNDAwMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMyw3ICsxMjMs
NyBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoCiB7CiAgICAgLy8gQ292
ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBm
aXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxl
IHRpbWUuCiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpOwogICAgIGlmIChyZXNvbHZlVHlwZSAhPSBHbG9iYWxQcm9wZXJ0eSAm
JiByZXNvbHZlVHlwZSAhPSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MgCiAg
ICAgICAgICYmIHJlc29sdmVUeXBlICE9IFVucmVzb2x2ZWRQcm9wZXJ0eSAmJiByZXNvbHZlVHlw
ZSAhPSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMzMsMTYgKzEzMywxNiBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZVB1dFRvU2Nv
cGVHbG9iYWwoCiAgICAgICAgICAgICBSZXNvbHZlVHlwZSBuZXdSZXNvbHZlVHlwZSA9IHJlc29s
dmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSA/IEdsb2JhbFByb3BlcnR5IDogR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOwogICAgICAgICAgICAgcmVzb2x2ZVR5cGUgPSBu
ZXdSZXNvbHZlVHlwZTsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgbWV0YWRhdGEuZ2V0UHV0SW5mbyA9IEdldFB1
dEluZm8obWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwg
bWV0YWRhdGEuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAgICBt
ZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5y
ZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRhdGEubV9nZXRQdXRJbmZvLmluaXRp
YWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChzY29wZS0+aXNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQoKSkgewogICAgICAgICAgICAgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQqIGdsb2JhbExleGljYWxFbnZpcm9ubWVudCA9IGpzQ2FzdDxKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudCo+KHNjb3BlKTsKICAgICAgICAgICAgIFJlc29sdmVUeXBlIG5ld1Jlc29sdmVUeXBl
ID0gcmVzb2x2ZVR5cGUgPT0gVW5yZXNvbHZlZFByb3BlcnR5ID8gR2xvYmFsTGV4aWNhbFZhciA6
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOwotICAgICAgICAgICAgbWV0
YWRhdGEuZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8obWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZl
TW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRhdGEuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZv
KG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0
YWRhdGEubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRh
YmxlKCktPmdldChpZGVudC5pbXBsKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051
bGwoKSk7CiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRj
aHBvaW50U2V0KCk7Ci0gICAgICAgICAgICBtZXRhZGF0YS5vcGVyYW5kID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGdsb2JhbExleGljYWxFbnZpcm9ubWVudC0+dmFyaWFibGVBdChlbnRy
eS5zY29wZU9mZnNldCgpKS5zbG90KCkpOworICAgICAgICAgICAgbWV0YWRhdGEubV93YXRjaHBv
aW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAgbWV0YWRhdGEubV9v
cGVyYW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGdsb2JhbExleGljYWxFbnZpcm9u
bWVudC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKS5zbG90KCkpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtMTY1LDggKzE2NSw4IEBAIGlubGluZSB2b2lkIHRyeUNhY2hlUHV0
VG9TY29wZUdsb2JhbCgKICAgICAgICAgc2NvcGUtPnN0cnVjdHVyZSh2bSktPmRpZENhY2hlUHJv
cGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIG1ldGFk
YXRhLnN0cnVjdHVyZS5zZXQodm0sIGNvZGVCbG9jaywgc2NvcGUtPnN0cnVjdHVyZSh2bSkpOwot
ICAgICAgICBtZXRhZGF0YS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAg
bWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2V0KHZtLCBjb2RlQmxvY2ssIHNjb3BlLT5zdHJ1Y3R1cmUo
dm0pKTsKKyAgICAgICAgbWV0YWRhdGEubV9vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsK
ICAgICB9CiB9CiAKQEAgLTE3NCwyMyArMTc0LDIzIEBAIGlubGluZSB2b2lkIHRyeUNhY2hlR2V0
RnJvbVNjb3BlR2xvYmFsKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBPcEdldEZyb21T
Y29wZSYgYnl0ZWNvZGUsIEpTT2JqZWN0KiBzY29wZSwgUHJvcGVydHlTbG90JiBzbG90LCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGV4ZWMpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEuZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0
YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAKICAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gVW5yZXNvbHZlZFByb3BlcnR5IHx8IHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAgICAgaWYgKHNjb3BlLT5pc0dsb2JhbE9i
amVjdCgpKSB7CiAgICAgICAgICAgICBSZXNvbHZlVHlwZSBuZXdSZXNvbHZlVHlwZSA9IHJlc29s
dmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSA/IEdsb2JhbFByb3BlcnR5IDogR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOwogICAgICAgICAgICAgcmVzb2x2ZVR5cGUgPSBu
ZXdSZXNvbHZlVHlwZTsgLy8gQWxsb3cgYmVsb3cgY2FjaGluZyBtZWNoYW5pc20gdG8ga2ljayBp
bi4KICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2Nr
KCktPm1fbG9jayk7Ci0gICAgICAgICAgICBtZXRhZGF0YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5m
byhtZXRhZGF0YS5nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG5ld1Jlc29sdmVUeXBlLCBtZXRh
ZGF0YS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgIG1ldGFk
YXRhLm1fZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8obWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29s
dmVNb2RlKCksIG5ld1Jlc29sdmVUeXBlLCBtZXRhZGF0YS5tX2dldFB1dEluZm8uaW5pdGlhbGl6
YXRpb25Nb2RlKCkpOwogICAgICAgICB9IGVsc2UgaWYgKHNjb3BlLT5pc0dsb2JhbExleGljYWxF
bnZpcm9ubWVudCgpKSB7CiAgICAgICAgICAgICBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCog
Z2xvYmFsTGV4aWNhbEVudmlyb25tZW50ID0ganNDYXN0PEpTR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50Kj4oc2NvcGUpOwogICAgICAgICAgICAgUmVzb2x2ZVR5cGUgbmV3UmVzb2x2ZVR5cGUgPSBy
ZXNvbHZlVHlwZSA9PSBVbnJlc29sdmVkUHJvcGVydHkgPyBHbG9iYWxMZXhpY2FsVmFyIDogR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M7CiAgICAgICAgICAgICBTeW1ib2xU
YWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgp
LT5nZXQoaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkp
OwogICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2so
KS0+bV9sb2NrKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLmdldFB1dEluZm8gPSBHZXRQdXRJbmZv
KG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgbmV3UmVzb2x2ZVR5cGUsIG1ldGFk
YXRhLmdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwotICAgICAgICAgICAgbWV0YWRh
dGEud2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgICAgIG1l
dGFkYXRhLm9wZXJhbmQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpLnNsb3QoKSk7Cisg
ICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1ldGFkYXRhLm1f
Z2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0
Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgIG1ldGFkYXRh
Lm1fb3BlcmFuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihnbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuc2xvdCgpKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMjAzLDggKzIwMyw4IEBAIGlubGluZSB2b2lkIHRyeUNhY2hlR2V0
RnJvbVNjb3BlR2xvYmFsKAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzY29w
ZS0+c3RydWN0dXJlKHZtKTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBt
ZXRhZGF0YS5zdHJ1Y3R1cmUuc2V0KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgbWV0YWRhdGEub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAg
ICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2V0KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAg
ICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359243</attachid>
            <date>2019-01-15 19:07:57 -0800</date>
            <delta_ts>2019-01-15 19:07:57 -0800</delta_ts>
            <desc>patch for landing.</desc>
            <filename>bug-193467.patch</filename>
            <type>text/plain</type>
            <size>531726</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQwMDI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0MiBA
QAorMjAxOS0wMS0xNSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVmYWN0b3IgbmV3IGJ5dGVjb2RlIHN0cnVjdHMgc28gdGhhdCB0aGUgZmllbGRzIGFyZSBwcmVm
aXhlZCB3aXRoICJtXyIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTM0NjcKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAg
ICAgICBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBkbyBhIG1hbnVhbCBhdWRpdCBvZiB0eXBlIGNv
cnJlY3RuZXNzIG9mIHRoZSBMTEludAorICAgICAgICBpbnN0cnVjdGlvbnMgdXNlZCB0byBhY2Nl
c3MgdGhlc2UgZmllbGRzLiAgV2l0aG91dCB0aGlzIGNoYW5nZSwgaXQgd291bGQgYmUKKyAgICAg
ICAgZGlmZmljdWx0IChhbmQgZXJyb3IgcHJvbmUpIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gZmllbGQgbmFtZXMgYW5kCisgICAgICAgIG1hY3JvIHZhcmlhYmxlcy4gIFRo
aXMgYXVkaXQgd2lsbCBiZSBkb25lIGFmdGVyIHRoaXMgcGF0Y2ggbGFuZHMuCisKKyAgICAgICAg
KiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHA6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbik6
CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTElu
dCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJvcGFn
YXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplTExJbnRJ
bmxpbmVDYWNoZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3VyZUNhdGNoTGl2ZW5l
c3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmVuc3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93KToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6Om5vdGlmeUxleGljYWxCaW5kaW5nU2hhZG93aW5nKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp0cnlHZXRWYWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6YXJpdGhQcm9maWxlRm9yUEMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcik6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmZvckVhY2hWYWx1ZVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmZvckVhY2hBcnJheVByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVhY2hB
cnJheUFsbG9jYXRpb25Qcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmb3JFYWNo
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZvckVh
Y2hMTEludENhbGxMaW5rSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5j
cHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHA6CisgICAgICAgIChKU0M6OkxMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0
dXJlV2F0Y2hwb2ludDo6Y2xlYXJMTEludEdldEJ5SWRDYWNoZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpqdW1wVGFyZ2V0
Rm9ySW5zdHJ1Y3Rpb24pOgorICAgICAgICAoSlNDOjpleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNG
b3JJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OnVwZGF0ZVN0b3JlZEp1bXBUYXJnZXRzRm9y
SW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKiBi
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OmR1bXBMaW5lQ29s
dW1uRW50cnkpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmdXNlQ29tcGFyZUFuZEp1bXApOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZnVzZVRlc3RBbmRKbXApOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3ApOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW5kU3dpdGNoKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QWNjZXNzb3JCeUlkKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QWNjZXNzb3JCeVZhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU5ld0Z1bmMpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVOZXdGdW5jRXhwKToKKyAgICAgICAgKiBkZmcvREZHT1NS
RW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVDYXRjaE9TUkVudHJ5KToKKyAg
ICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6b3BlcmF0
aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik6CisgICAgICAgICogZ2VuZXJhdG9yL0FyZ3VtZW50
LnJiOgorICAgICAgICAqIGdlbmVyYXRvci9NZXRhZGF0YS5yYjoKKyAgICAgICAgKiBnZW5lcmF0
b3IvT3Bjb2RlLnJiOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQXJp
dGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25lZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNs
b3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5jKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Qml0
QmluYXJ5T3BGYXN0UGF0aCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9iaXRub3QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDRmFzdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ1Nsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZGl2KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211bCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29t
cGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Vuc2lnbmVkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZVNldHVwRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZh
bFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlVGFpbENhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwRnJh
bWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bj
b2RlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKToKKyAgICAg
ICAgKEpTQzo6SklUOjpjb3BpZWRHZXRQdXRJbmZvKToKKyAgICAgICAgKEpTQzo6SklUOjpjb3Bp
ZWRBcml0aFByb2ZpbGUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbmQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam1wKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19v
YmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5j
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2VtcHR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2lzX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dp
dGhfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rv
X3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFt
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9ub3QpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9qbmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGhyb3cp
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rv
X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2No
YXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
cV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9udWxsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3Rkeik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0TmV3RnVuY0NvbW1vbik6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19h
cnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250
cm9sX2Zsb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Jlc3RfbGVuZ3RoKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9hcmd1bWVudCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2ptcCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292
ZXJyaWRlc19oYXNfaW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9v
cl9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfbm90KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJp
Y3RFcUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25lcV9u
dWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19z
dHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2RlYnVnKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3Rkeik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
ICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJ
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2Fj
aGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVj
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21f
YXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbCk6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9k
ZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQ
dXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5
X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9i
eV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2lu
X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyk6
CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTElu
dDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0dXBHZXRC
eUlkUHJvdG90eXBlQ2FjaGUpOgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0QnlWYWwpOgorICAg
ICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6dmFy
YXJnc1NldHVwKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OmNvbW1vbkNhbGxFdmFsKToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAg
ICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OnVwZGF0ZUFyaXRoUHJv
ZmlsZUZvclVuYXJ5QXJpdGhPcCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
aDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9i
YWwpOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlR2V0RnJvbVNjb3Bl
R2xvYmFsKToKKwogMjAxOS0wMS0xNSAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93
c3RhcnQub3JnPgogCiAgICAgICAgIFtKU0NdIFVzZSBLbm93blN0cmluZ1VzZSBmb3IgR2V0QnlW
YWwoQXJyYXk6OlN0cmluZykgc2luY2UgQUkgd291bGQgb2ZmZXIgd2lkZXIgdHlwZSBpbmZvcm1h
dGlvbiBhbmQgb2ZmZXIgbm9uLXN0cmluZyB0eXBlIGFmdGVyIHJlbW92aW5nIENoZWNrKFN0cmlu
ZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRv
cmlmaWNhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAkocmV2aXNpb24gMjQwMDI0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsMTIgKzc0LDEyIEBAIHB1YmxpYzoKIAogICAgICAg
ICAgICAgICAgIGNhc2Ugb3BfeWllbGQ6IHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGluc3RydWN0aW9uLT5hczxPcFlpZWxkPigpOwotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsaXZlQ2FsbGVlTG9jYWxzSW5kZXggPSBieXRlY29kZS55aWVsZFBvaW50OworICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaXZlQ2FsbGVlTG9jYWxzSW5kZXggPSBieXRlY29k
ZS5tX3lpZWxkUG9pbnQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsaXZlQ2FsbGVlTG9jYWxz
SW5kZXggPj0gbV95aWVsZHMuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV95aWVs
ZHMucmVzaXplKGxpdmVDYWxsZWVMb2NhbHNJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAg
ICBZaWVsZERhdGEmIGRhdGEgPSBtX3lpZWxkc1tsaXZlQ2FsbGVlTG9jYWxzSW5kZXhdOwogICAg
ICAgICAgICAgICAgICAgICBkYXRhLnBvaW50ID0gaW5zdHJ1Y3Rpb24ub2Zmc2V0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRhdGEuYXJndW1lbnQgPSBieXRlY29kZS5hcmd1bWVudDsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YS5hcmd1bWVudCA9IGJ5dGVjb2RlLm1fYXJndW1lbnQ7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9u
IDI0MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNyArMzIsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
ICNkZWZpbmUgQ0FMTF9GVU5DVE9SKF9fYXJnKSBcCi0gICAgZnVuY3RvcihfX2J5dGVjb2RlLl9f
YXJnKTsKKyAgICBmdW5jdG9yKF9fYnl0ZWNvZGUubV8jI19fYXJnKTsKIAogI2RlZmluZSBVU0VT
X09SX0RFRlMoX19vcGNvZGUsIC4uLikgXAogICAgIGNhc2UgX19vcGNvZGU6Om9wY29kZUlEOiB7
IFwKQEAgLTUxLDE1ICs1MSwxNSBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQo
QmxvY2sqCiAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkpOwogCiAg
ICAgYXV0byBoYW5kbGVOZXdBcnJheUxpa2UgPSBbJl0oYXV0byBvcCkgewotICAgICAgICBpbnQg
YmFzZSA9IG9wLmFyZ3Yub2Zmc2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Rh
dGljX2Nhc3Q8aW50PihvcC5hcmdjKTsgaSsrKQorICAgICAgICBpbnQgYmFzZSA9IG9wLm1fYXJn
di5vZmZzZXQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+
KG9wLm1fYXJnYyk7IGkrKykKICAgICAgICAgICAgIGZ1bmN0b3IoVmlydHVhbFJlZ2lzdGVyIHsg
YmFzZSAtIGkgfSk7CiAgICAgfTsKIAogICAgIGF1dG8gaGFuZGxlT3BDYWxsTGlrZSA9IFsmXShh
dXRvIG9wKSB7Ci0gICAgICAgIGZ1bmN0b3Iob3AuY2FsbGVlKTsKLSAgICAgICAgaW50IGxhc3RB
cmcgPSAtc3RhdGljX2Nhc3Q8aW50PihvcC5hcmd2KSArIENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50
T2Zmc2V0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50Pihv
cC5hcmdjKTsgaSsrKQorICAgICAgICBmdW5jdG9yKG9wLm1fY2FsbGVlKTsKKyAgICAgICAgaW50
IGxhc3RBcmcgPSAtc3RhdGljX2Nhc3Q8aW50PihvcC5tX2FyZ3YpICsgQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2Fz
dDxpbnQ+KG9wLm1fYXJnYyk7IGkrKykKICAgICAgICAgICAgIGZ1bmN0b3IoVmlydHVhbFJlZ2lz
dGVyIHsgbGFzdEFyZyArIGkgfSk7CiAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2
YWwpCiAgICAgICAgICAgICBmdW5jdG9yKGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKTsKQEAg
LTI1OCw4ICsyNTgsOCBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQmxvY2sq
CiAKICAgICBjYXNlIG9wX3N0cmNhdDogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wU3RyY2F0PigpOwotICAgICAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLnNyYy5v
ZmZzZXQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlY29kZS5jb3VudDsgaSsr
KQorICAgICAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fY291bnQ7IGkrKykKICAgICAgICAgICAgIGZ1
bmN0b3IoVmlydHVhbFJlZ2lzdGVyIHsgYmFzZSAtIGkgfSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5jcHAJKHJldmlzaW9uIDI0MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MywxMyArNzMs
MTMgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogICAgIExMSW50
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2Ug
b3BfY2FsbDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcENhbGw+
KCkubWV0YWRhdGEocHJvZmlsZWRCbG9jaykuY2FsbExpbmtJbmZvOworICAgICAgICBjYWxsTGlu
a0luZm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2Nr
KS5tX2NhbGxMaW5rSW5mbzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6
Ci0gICAgICAgIGNhbGxMaW5rSW5mbyA9ICZpbnN0cnVjdGlvbi0+YXM8T3BDb25zdHJ1Y3Q+KCku
bWV0YWRhdGEocHJvZmlsZWRCbG9jaykuY2FsbExpbmtJbmZvOworICAgICAgICBjYWxsTGlua0lu
Zm8gPSAmaW5zdHJ1Y3Rpb24tPmFzPE9wQ29uc3RydWN0PigpLm1ldGFkYXRhKHByb2ZpbGVkQmxv
Y2spLm1fY2FsbExpbmtJbmZvOwogICAgICAgICBicmVhazsKICAgICBjYXNlIG9wX3RhaWxfY2Fs
bDoKLSAgICAgICAgY2FsbExpbmtJbmZvID0gJmluc3RydWN0aW9uLT5hczxPcFRhaWxDYWxsPigp
Lm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spLmNhbGxMaW5rSW5mbzsKKyAgICAgICAgY2FsbExpbmtJ
bmZvID0gJmluc3RydWN0aW9uLT5hczxPcFRhaWxDYWxsPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxv
Y2spLm1fY2FsbExpbmtJbmZvOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyNDAwMjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNo
IDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTA3LDIzICs1
MDcsMjMgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogCiAgICAg
YXV0byBsaW5rX3Byb2ZpbGUgPSBbJl0oY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24sIGF1dG8gLypi
eXRlY29kZSovLCBhdXRvJiBtZXRhZGF0YSkgewogICAgICAgICBtX251bWJlck9mTm9uQXJndW1l
bnRWYWx1ZVByb2ZpbGVzKys7Ci0gICAgICAgIG1ldGFkYXRhLnByb2ZpbGUubV9ieXRlY29kZU9m
ZnNldCA9IGluc3RydWN0aW9uLm9mZnNldCgpOworICAgICAgICBtZXRhZGF0YS5tX3Byb2ZpbGUu
bV9ieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uLm9mZnNldCgpOwogICAgIH07CiAKICAgICBh
dXRvIGxpbmtfYXJyYXlQcm9maWxlID0gWyZdKGNvbnN0IGF1dG8mIGluc3RydWN0aW9uLCBhdXRv
IC8qYnl0ZWNvZGUqLywgYXV0byYgbWV0YWRhdGEpIHsKLSAgICAgICAgbWV0YWRhdGEuYXJyYXlQ
cm9maWxlLm1fYnl0ZWNvZGVPZmZzZXQgPSBpbnN0cnVjdGlvbi5vZmZzZXQoKTsKKyAgICAgICAg
bWV0YWRhdGEubV9hcnJheVByb2ZpbGUubV9ieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uLm9m
ZnNldCgpOwogICAgIH07CiAKICAgICBhdXRvIGxpbmtfb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUg
PSBbJl0oY29uc3QgYXV0byYgLyppbnN0cnVjdGlvbiovLCBhdXRvIGJ5dGVjb2RlLCBhdXRvJiBt
ZXRhZGF0YSkgewotICAgICAgICBtZXRhZGF0YS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5pbml0
aWFsaXplUHJvZmlsZSh2bSwgbV9nbG9iYWxPYmplY3QuZ2V0KCksIHRoaXMsIG1fZ2xvYmFsT2Jq
ZWN0LT5vYmplY3RQcm90b3R5cGUoKSwgYnl0ZWNvZGUuaW5saW5lQ2FwYWNpdHkpOworICAgICAg
ICBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLmluaXRpYWxpemVQcm9maWxlKHZt
LCBtX2dsb2JhbE9iamVjdC5nZXQoKSwgdGhpcywgbV9nbG9iYWxPYmplY3QtPm9iamVjdFByb3Rv
dHlwZSgpLCBieXRlY29kZS5tX2lubGluZUNhcGFjaXR5KTsKICAgICB9OwogCiAgICAgYXV0byBs
aW5rX2FycmF5QWxsb2NhdGlvblByb2ZpbGUgPSBbJl0oY29uc3QgYXV0byYgLyppbnN0cnVjdGlv
biovLCBhdXRvIGJ5dGVjb2RlLCBhdXRvJiBtZXRhZGF0YSkgewotICAgICAgICBtZXRhZGF0YS5h
cnJheUFsbG9jYXRpb25Qcm9maWxlLmluaXRpYWxpemVJbmRleGluZ01vZGUoYnl0ZWNvZGUucmVj
b21tZW5kZWRJbmRleGluZ1R5cGUpOworICAgICAgICBtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlv
blByb2ZpbGUuaW5pdGlhbGl6ZUluZGV4aW5nTW9kZShieXRlY29kZS5tX3JlY29tbWVuZGVkSW5k
ZXhpbmdUeXBlKTsKICAgICB9OwogCiAgICAgYXV0byBsaW5rX2hpdENvdW50Rm9yTExJbnRDYWNo
aW5nID0gWyZdKGNvbnN0IGF1dG8mIC8qaW5zdHJ1Y3Rpb24qLywgYXV0byAvKmJ5dGVjb2RlKi8s
IGF1dG8mIG1ldGFkYXRhKSB7Ci0gICAgICAgIG1ldGFkYXRhLmhpdENvdW50Rm9yTExJbnRDYWNo
aW5nID0gT3B0aW9uczo6cHJvdG90eXBlSGl0Q291bnRGb3JMTEludENhY2hpbmcoKTsKKyAgICAg
ICAgbWV0YWRhdGEubV9oaXRDb3VudEZvckxMSW50Q2FjaGluZyA9IE9wdGlvbnM6OnByb3RvdHlw
ZUhpdENvdW50Rm9yTExJbnRDYWNoaW5nKCk7CiAgICAgfTsKIAogI2RlZmluZSBMSU5LX0ZJRUxE
KF9fZmllbGQpIFwKQEAgLTYwNywyOCArNjA3LDI4IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7CiAgICAg
ICAgICAgICBJTklUSUFMSVpFX01FVEFEQVRBKE9wUmVzb2x2ZVNjb3BlKQogCi0gICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUudmFyKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJ5dGVjb2RlLnJlc29sdmVUeXBlICE9IExvY2FsQ2xv
c3VyZVZhcik7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZp
ZXIoYnl0ZWNvZGUubV92YXIpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYnl0ZWNvZGUu
bV9yZXNvbHZlVHlwZSAhPSBMb2NhbENsb3N1cmVWYXIpOwogCi0gICAgICAgICAgICBSZXNvbHZl
T3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSwgYnl0ZWNvZGUubG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgYnl0ZWNv
ZGUucmVzb2x2ZVR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRpb24pOwor
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2RlLm1fbG9jYWxTY29wZURlcHRoLCBzY29w
ZSwgaWRlbnQsIEdldCwgYnl0ZWNvZGUubV9yZXNvbHZlVHlwZSwgSW5pdGlhbGl6YXRpb25Nb2Rl
OjpOb3RJbml0aWFsaXphdGlvbik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGZhbHNlKTsKIAotICAgICAgICAgICAgbWV0YWRhdGEucmVzb2x2ZVR5cGUgPSBv
cC50eXBlOwotICAgICAgICAgICAgbWV0YWRhdGEubG9jYWxTY29wZURlcHRoID0gb3AuZGVwdGg7
CisgICAgICAgICAgICBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlID0gb3AudHlwZTsKKyAgICAgICAg
ICAgIG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoID0gb3AuZGVwdGg7CiAgICAgICAgICAgICBp
ZiAob3AubGV4aWNhbEVudmlyb25tZW50KSB7CiAgICAgICAgICAgICAgICAgaWYgKG9wLnR5cGUg
PT0gTW9kdWxlVmFyKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGxpbmtlZCBt
b2R1bGUgZW52aXJvbm1lbnQgc3Ryb25nbHkgcmVmZXJlbmNlZC4KICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0cm9uZ2x5UmVmZXJlbmNlZE1vZHVsZUVudmlyb25tZW50cy5hZGQoanNDYXN0PEpT
TW9kdWxlRW52aXJvbm1lbnQqPihvcC5sZXhpY2FsRW52aXJvbm1lbnQpKS5pc05ld0VudHJ5KQog
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29uc3RhbnQob3AubGV4aWNhbEVudmlyb25tZW50
KTsKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubGV4aWNhbEVudmlyb25tZW50LnNldCh2
bSwgdGhpcywgb3AubGV4aWNhbEVudmlyb25tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbWV0
YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJv
bm1lbnQpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtZXRh
ZGF0YS5zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZpcm9ubWVudC0+c3lt
Ym9sVGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fc3ltYm9sVGFibGUu
c2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhvcC50eXBlLCB0aGlzKSkgewotICAgICAgICAgICAgICAg
IG1ldGFkYXRhLmNvbnN0YW50U2NvcGUuc2V0KHZtLCB0aGlzLCBjb25zdGFudFNjb3BlKTsKKyAg
ICAgICAgICAgICAgICBtZXRhZGF0YS5tX2NvbnN0YW50U2NvcGUuc2V0KHZtLCB0aGlzLCBjb25z
dGFudFNjb3BlKTsKICAgICAgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mp
Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmxvY2FsU2NvcGVEZXB0aCA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fbG9jYWxTY29wZURlcHRoID0gMDsKICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1ldGFkYXRhLmdsb2JhbE9iamVjdCA9IG51bGxw
dHI7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9nbG9iYWxPYmplY3QgPSBudWxscHRyOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNjM2LDYxICs2MzYsNjEgQEAgYm9v
bCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICAgICAgSU5JVElB
TElaRV9NRVRBREFUQShPcEdldEZyb21TY29wZSkKIAogICAgICAgICAgICAgbGlua19wcm9maWxl
KGluc3RydWN0aW9uLCBieXRlY29kZSwgbWV0YWRhdGEpOwotICAgICAgICAgICAgbWV0YWRhdGEu
d2F0Y2hwb2ludFNldCA9IG51bGxwdHI7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3dhdGNocG9p
bnRTZXQgPSBudWxscHRyOwogCi0gICAgICAgICAgICBBU1NFUlQoIWlzSW5pdGlhbGl6YXRpb24o
Ynl0ZWNvZGUuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwotICAgICAgICAgICAg
aWYgKGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIp
IHsKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhieXRl
Y29kZS5nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVWYXIsIGJ5dGVjb2RlLmdldFB1
dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOworICAgICAgICAgICAgQVNTRVJUKCFpc0luaXRp
YWxpemF0aW9uKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkpOwor
ICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExv
Y2FsQ2xvc3VyZVZhcikgeworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2V0UHV0SW5mbyA9
IEdldFB1dEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIENsb3N1cmVW
YXIsIGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IElkZW50
aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS52YXIpOwotICAgICAgICAgICAgUmVz
b2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIGJ5dGVjb2RlLmxvY2FsU2NvcGVEZXB0aCwgc2NvcGUsIGlkZW50LCBHZXQsIGJ5
dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJ
bml0aWFsaXphdGlvbik7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlk
ZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOworICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNT
Y29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVj
b2RlLm1fbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQsIEdldCwgYnl0ZWNvZGUubV9nZXRQ
dXRJbmZvLnJlc29sdmVUeXBlKCksIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlhbGl6YXRp
b24pOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxzZSk7
CiAKLSAgICAgICAgICAgIG1ldGFkYXRhLmdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGJ5dGVjb2Rl
LmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgb3AudHlwZSwgYnl0ZWNvZGUuZ2V0UHV0SW5mby5p
bml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8g
PSBHZXRQdXRJbmZvKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBvcC50eXBl
LCBieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwogICAgICAgICAg
ICAgaWYgKG9wLnR5cGUgPT0gTW9kdWxlVmFyKQotICAgICAgICAgICAgICAgIG1ldGFkYXRhLmdl
dFB1dEluZm8gPSBHZXRQdXRJbmZvKGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwg
Q2xvc3VyZVZhciwgYnl0ZWNvZGUuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7Cisg
ICAgICAgICAgICAgICAgbWV0YWRhdGEubV9nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhieXRlY29k
ZS5tX2dldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgQ2xvc3VyZVZhciwgYnl0ZWNvZGUubV9nZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgICAgIGlmIChvcC50eXBlID09
IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Mg
fHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEud2F0
Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEu
bV93YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKICAgICAgICAgICAgIGVsc2UgaWYg
KG9wLnN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5zdHJ1Y3R1cmUuc2V0KHZt
LCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOwotICAgICAgICAgICAgbWV0YWRhdGEub3BlcmFuZCA9IG9w
Lm9wZXJhbmQ7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2V0KHZtLCB0
aGlzLCBvcC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAgbWV0YWRhdGEubV9vcGVyYW5kID0gb3Au
b3BlcmFuZDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBv
cF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgICAgIElOSVRJQUxJWkVfTUVUQURBVEEoT3BQdXRU
b1Njb3BlKQogCi0gICAgICAgICAgICBpZiAoYnl0ZWNvZGUuZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpID09IExvY2FsQ2xvc3VyZVZhcikgeworICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICAgICAg
ICAgIC8vIE9ubHkgZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcgdG8g
aXMgbm90IGFub255bW91cy4KLSAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUudmFyICE9IFVJ
TlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9
IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLnN5bWJvbFRhYmxlT3JT
Y29wZURlcHRoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gaWRlbnRpZmllcihieXRlY29kZS52YXIpOworICAgICAgICAgICAgICAgIGlmIChieXRlY29k
ZS5tX3ZhciAhPSBVSU5UX01BWCkgeworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihnZXRDb25zdGFudChieXRlY29kZS5t
X3N5bWJvbFRhYmxlT3JTY29wZURlcHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7CiAgICAgICAgICAg
ICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7
CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IHN5bWJvbFRhYmxlLT5maW5kKGxvY2tl
ciwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gc3lt
Ym9sVGFibGUtPmVuZChsb2NrZXIpKTsKICAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUu
cHJlcGFyZVRvV2F0Y2goKTsKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEud2F0Y2hwb2lu
dFNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
bWV0YWRhdGEubV93YXRjaHBvaW50U2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS53YXRj
aHBvaW50U2V0ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5
dGVjb2RlLnZhcik7Ci0gICAgICAgICAgICBtZXRhZGF0YS53YXRjaHBvaW50U2V0ID0gbnVsbHB0
cjsKLSAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZSht
X2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5zeW1ib2xUYWJsZU9yU2NvcGVE
ZXB0aCwgc2NvcGUsIGlkZW50LCBQdXQsIGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KSwgYnl0ZWNvZGUuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwor
ICAgICAgICAgICAgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoLCBzY29w
ZSwgaWRlbnQsIFB1dCwgYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCksIGJ5dGVj
b2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKIAotICAgICAgICAgICAgbWV0YWRh
dGEuZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oYnl0ZWNvZGUuZ2V0UHV0SW5mby5yZXNvbHZlTW9k
ZSgpLCBvcC50eXBlLCBieXRlY29kZS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsK
KyAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oYnl0ZWNvZGUu
bV9nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIG9wLnR5cGUsIGJ5dGVjb2RlLm1fZ2V0UHV0SW5m
by5pbml0aWFsaXphdGlvbk1vZGUoKSk7CiAgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9i
YWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9w
LnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9p
bnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fd2F0
Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CiAgICAgICAgICAgICBlbHNlIGlmIChvcC50
eXBlID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykgewogICAgICAgICAgICAgICAgIGlmIChvcC53YXRjaHBvaW50U2V0KQogICAgICAg
ICAgICAgICAgICAgICBvcC53YXRjaHBvaW50U2V0LT5pbnZhbGlkYXRlKHZtLCBQdXRUb1Njb3Bl
RmlyZURldGFpbCh0aGlzLCBpZGVudCkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5zdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlLnNldCh2bSwgdGhpcywg
b3Auc3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLm9wZXJhbmQgPSBvcC5vcGVyYW5k
OworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3Au
c3RydWN0dXJlKTsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fb3BlcmFuZCA9IG9wLm9wZXJhbmQ7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC03MDYsMTMgKzcwNiwxMyBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTCiAgICAgICAgICAgICBib29s
IHNob3VsZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+dHlwZVByb2ZpbGVyRXhwcmVzc2lvbklu
Zm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RTdGFydCwgZGl2b3RF
bmQpOwogICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKIAot
ICAgICAgICAgICAgc3dpdGNoIChieXRlY29kZS5mbGFnKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KGJ5dGVjb2RlLm1fZmxhZykgewogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5dGVjb2Rl
Q2xvc3VyZVZhcjogewotICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0g
aWRlbnRpZmllcihieXRlY29kZS5pZGVudGlmaWVyKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb2NhbFNjb3BlRGVwdGggPSBieXRlY29kZS5zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aDsKKyAg
ICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9pZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2NhbFNjb3BlRGVw
dGggPSBieXRlY29kZS5tX3N5bWJvbFRhYmxlT3JTY29wZURlcHRoOwogICAgICAgICAgICAgICAg
IC8vIEV2ZW4gdGhvdWdoIHR5cGUgcHJvZmlsaW5nIG1heSBiZSBwcm9maWxpbmcgZWl0aGVyIGEg
R2V0IG9yIGEgUHV0LCB3ZSBjYW4gYWx3YXlzIGNsYWltIGEgR2V0IGJlY2F1c2UKICAgICAgICAg
ICAgICAgICAvLyB3ZSdyZSBhYnN0cmFjdGx5ICJyZWFkImluZyBmcm9tIGEgSlNTY29wZS4KLSAg
ICAgICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9n
bG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbG9jYWxTY29wZURlcHRoLCBzY29wZSwgaWRlbnQs
IEdldCwgYnl0ZWNvZGUucmVzb2x2ZVR5cGUsIEluaXRpYWxpemF0aW9uTW9kZTo6Tm90SW5pdGlh
bGl6YXRpb24pOworICAgICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBsb2NhbFNjb3BlRGVwdGgs
IHNjb3BlLCBpZGVudCwgR2V0LCBieXRlY29kZS5tX3Jlc29sdmVUeXBlLCBJbml0aWFsaXphdGlv
bk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGZhbHNlKTsKIAogICAgICAgICAgICAgICAgIGlmIChvcC50eXBl
ID09IENsb3N1cmVWYXIgfHwgb3AudHlwZSA9PSBNb2R1bGVWYXIpCkBAIC03MzMsOSArNzMzLDkg
QEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZUJ5
dGVjb2RlTG9jYWxseVJlc29sdmVkOiB7Ci0gICAgICAgICAgICAgICAgaW50IHN5bWJvbFRhYmxl
SW5kZXggPSBieXRlY29kZS5zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aDsKKyAgICAgICAgICAgICAg
ICBpbnQgc3ltYm9sVGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVw
dGg7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5
bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoc3ltYm9sVGFibGVJbmRleCkpOwotICAgICAgICAgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS5pZGVudGlm
aWVyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9pZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElm
IG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxl
ZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KICAgICAgICAg
ICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFi
bGUobG9ja2VyLCBpZGVudC5pbXBsKCksIHZtKTsKQEAgLTc3MCwyNCArNzcwLDI0IEBAIGJvb2wg
Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFMKICAgICAgICAgICAgIFR5cGVMb2Nh
dGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7CiAgICAgICAgICAgICBib29sIGlz
TmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOwogCi0gICAgICAgICAgICBpZiAoYnl0
ZWNvZGUuZmxhZyA9PSBQcm9maWxlVHlwZUJ5dGVjb2RlRnVuY3Rpb25SZXR1cm5TdGF0ZW1lbnQp
CisgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV9mbGFnID09IFByb2ZpbGVUeXBlQnl0ZWNvZGVG
dW5jdGlvblJldHVyblN0YXRlbWVudCkKICAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZv
dEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgPSBvd25lckV4ZWN1dGFibGUtPnR5
cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOwogCiAgICAgICAgICAgICBpZiAoc2hvdWxkQW5hbHl6
ZSAmJiBpc05ld0xvY2F0aW9uKQogICAgICAgICAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpLT5p
bnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7CiAKLSAgICAgICAgICAgIG1ldGFkYXRhLnR5cGVM
b2NhdGlvbiA9IGxvY2F0aW9uOworICAgICAgICAgICAgbWV0YWRhdGEubV90eXBlTG9jYXRpb24g
PSBsb2NhdGlvbjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9kZWJ1ZzogewotICAgICAgICAgICAgaWYgKGluc3RydWN0aW9uLT5hczxPcERlYnVnPigp
LmRlYnVnSG9va1R5cGUgPT0gRGlkUmVhY2hCcmVha3BvaW50KQorICAgICAgICAgICAgaWYgKGlu
c3RydWN0aW9uLT5hczxPcERlYnVnPigpLm1fZGVidWdIb29rVHlwZSA9PSBEaWRSZWFjaEJyZWFr
cG9pbnQpCiAgICAgICAgICAgICAgICAgbV9oYXNEZWJ1Z2dlclN0YXRlbWVudCA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jl
c3Q6IHsKLSAgICAgICAgICAgIGludCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGluc3RydWN0
aW9uLT5hczxPcENyZWF0ZVJlc3Q+KCkubnVtUGFyYW1ldGVyc1RvU2tpcDsKKyAgICAgICAgICAg
IGludCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGluc3RydWN0aW9uLT5hczxPcENyZWF0ZVJl
c3Q+KCkubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChu
dW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPj0gMCk7CiAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiByZW1hdGVyaWFsaXppbmcgdGhlIHJlc3Qg
cGFyYW1ldGVyIGR1cmluZyBPU1IgZXhpdCBpbiB0aGUgRlRMIEpJVC4iKTsKICAgICAgICAgICAg
IG1fbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcDsKQEAg
LTEwOTUsOCArMTA5NSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpwcm9wYWdhdGVUcmFuc2l0aW9ucyhj
b24KICAgICAgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBtX2luc3RydWN0aW9ucy0+YXQocHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV0pOwogICAgICAgICAgICAgaWYgKGluc3RydWN0aW9u
LT5pczxPcFB1dEJ5SWQ+KCkpIHsKICAgICAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGlu
c3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCkubWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICAg
ICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5vbGRTdHJ1Y3R1cmU7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5uZXdT
dHJ1Y3R1cmU7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBt
ZXRhZGF0YS5tX29sZFN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBuZXdT
dHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlOwogICAgICAgICAgICAgICAgIGlm
ICghb2xkU3RydWN0dXJlSUQgfHwgIW5ld1N0cnVjdHVyZUlEKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9CkBA
IC0xMjA3LDExICsxMjA3LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5l
Q2FjaGUKICAgICBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4mIHByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zID0gbV91bmxpbmtlZENvZGUtPnByb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25zKCk7CiAKICAgICBhdXRvIGhhbmRsZUdldFB1dEZyb21TY29wZSA9IFtdKGF1dG8m
IG1ldGFkYXRhKSB7Ci0gICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLmdl
dFB1dEluZm87CisgICAgICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IG1ldGFkYXRhLm1fZ2V0
UHV0SW5mbzsKICAgICAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxW
YXIgfHwgZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MgCiAgICAgICAgICAgICB8fCBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9j
YWxDbG9zdXJlVmFyIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxMZXhpY2Fs
VmFyIHx8IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxTdHJ1Y3R1cmU+JiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5zdHJ1Y3R1cmU7CisgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiYgc3RydWN0dXJlID0gbWV0YWRhdGEubV9z
dHJ1Y3R1cmU7CiAgICAgICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVj
dHVyZS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCkBAIC0xMjI0LDkgKzEyMjQsOSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVMTEludElubGluZUNhY2hlCiAgICAgICAgIHN3aXRjaCAoY3VySW5zdHJ1Y3Rpb24tPm9wY29k
ZUlEKCkpIHsKICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsKICAgICAgICAgICAgIGF1dG8m
IG1ldGFkYXRhID0gY3VySW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKS5tZXRhZGF0YSh0aGlz
KTsKLSAgICAgICAgICAgIGlmIChtZXRhZGF0YS5tb2RlICE9IEdldEJ5SWRNb2RlOjpEZWZhdWx0
KQorICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1fbW9kZSAhPSBHZXRCeUlkTW9kZTo6RGVmYXVs
dCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0
cnVjdHVyZUlEID0gbWV0YWRhdGEubW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0cnVjdHVyZTsK
KyAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9tb2Rl
TWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlOwogICAgICAgICAgICAgaWYgKCFvbGRTdHJ1
Y3R1cmVJRCB8fCBIZWFwOjppc01hcmtlZCh2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQo
b2xkU3RydWN0dXJlSUQpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCkBAIC0xMjM2LDMwICsxMjM2LDMwIEBAIHZvaWQgQ29k
ZUJsb2NrOjpmaW5hbGl6ZUxMSW50SW5saW5lQ2FjaGUKICAgICAgICAgfQogICAgICAgICBjYXNl
IG9wX2dldF9ieV9pZF9kaXJlY3Q6IHsKICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gY3Vy
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKS5tZXRhZGF0YSh0aGlzKTsKLSAgICAg
ICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEuc3RydWN0dXJlOwor
ICAgICAgICAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX3N0cnVj
dHVyZTsKICAgICAgICAgICAgIGlmICghb2xkU3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQo
dm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKSkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQog
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBwcm9wZXJ0eSBhY2Nlc3Mu
XG4iKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLnN0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBt
ZXRhZGF0YS5vZmZzZXQgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmUgPSAw
OworICAgICAgICAgICAgbWV0YWRhdGEubV9vZmZzZXQgPSAwOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKICAgICAgICAgICAgIGF1
dG8mIG1ldGFkYXRhID0gY3VySW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKS5tZXRhZGF0YSh0
aGlzKTsKLSAgICAgICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEu
b2xkU3RydWN0dXJlOwotICAgICAgICAgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBt
ZXRhZGF0YS5uZXdTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4g
PSBtZXRhZGF0YS5zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZUlE
IG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmU7CisgICAgICAgICAgICBT
dHJ1Y3R1cmVJRCBuZXdTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlOworICAg
ICAgICAgICAgU3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmVDaGFp
bi5nZXQoKTsKICAgICAgICAgICAgIGlmICgoIW9sZFN0cnVjdHVyZUlEIHx8IEhlYXA6OmlzTWFy
a2VkKHZtLmhlYXAuc3RydWN0dXJlSURUYWJsZSgpLmdldChvbGRTdHJ1Y3R1cmVJRCkpKQogICAg
ICAgICAgICAgICAgICYmICghbmV3U3RydWN0dXJlSUQgfHwgSGVhcDo6aXNNYXJrZWQodm0uaGVh
cC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG5ld1N0cnVjdHVyZUlEKSkpCiAgICAgICAgICAgICAg
ICAgJiYgKCFjaGFpbiB8fCBIZWFwOjppc01hcmtlZChjaGFpbikpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAg
ICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgcHV0IHRyYW5zaXRpb24uXG4iKTsKLSAg
ICAgICAgICAgIG1ldGFkYXRhLm9sZFN0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBtZXRhZGF0
YS5vZmZzZXQgPSAwOwotICAgICAgICAgICAgbWV0YWRhdGEubmV3U3RydWN0dXJlID0gMDsKLSAg
ICAgICAgICAgIG1ldGFkYXRhLnN0cnVjdHVyZUNoYWluLmNsZWFyKCk7CisgICAgICAgICAgICBt
ZXRhZGF0YS5tX29sZFN0cnVjdHVyZSA9IDA7CisgICAgICAgICAgICBtZXRhZGF0YS5tX29mZnNl
dCA9IDA7CisgICAgICAgICAgICBtZXRhZGF0YS5tX25ld1N0cnVjdHVyZSA9IDA7CisgICAgICAg
ICAgICBtZXRhZGF0YS5tX3N0cnVjdHVyZUNoYWluLmNsZWFyKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjQxOApAQCAtMTI2OCwxNyArMTI2OCwxNyBAQCB2b2lkIENvZGVC
bG9jazo6ZmluYWxpemVMTEludElubGluZUNhY2hlCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBvcF90b190aGlzOiB7CiAgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGN1cklu
c3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKS5tZXRhZGF0YSh0aGlzKTsKLSAgICAgICAgICAgIGlm
ICghbWV0YWRhdGEuY2FjaGVkU3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKG1ldGFkYXRhLmNh
Y2hlZFN0cnVjdHVyZS5nZXQoKSkpCisgICAgICAgICAgICBpZiAoIW1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlLmdl
dCgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHRv
X3RoaXMgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBtZXRhZGF0YS5jYWNoZWRTdHJ1Y3R1cmUuZ2V0
KCkpOwotICAgICAgICAgICAgbWV0YWRhdGEuY2FjaGVkU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAg
ICAgICAgICBtZXRhZGF0YS50b1RoaXNTdGF0dXMgPSBtZXJnZShtZXRhZGF0YS50b1RoaXNTdGF0
dXMsIFRvVGhpc0NsZWFyZWRCeUdDKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJp
bmcgTExJbnQgdG9fdGhpcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIG1ldGFkYXRhLm1fY2FjaGVk
U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJl
LmNsZWFyKCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX3RvVGhpc1N0YXR1cyA9IG1lcmdlKG1l
dGFkYXRhLm1fdG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOiB7CiAgICAgICAg
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGN1ckluc3RydWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCku
bWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBhdXRvJiBjYWNoZVdyaXRlQmFycmllciA9IG1l
dGFkYXRhLmNhY2hlZENhbGxlZTsKKyAgICAgICAgICAgIGF1dG8mIGNhY2hlV3JpdGVCYXJyaWVy
ID0gbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgICAgICAgICBpZiAoIWNhY2hlV3JpdGVC
YXJyaWVyIHx8IGNhY2hlV3JpdGVCYXJyaWVyLnVudmFsaWRhdGVkR2V0KCkgPT0gSlNDZWxsOjpz
ZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBKU0NlbGwqIGNhY2hlZEZ1bmN0aW9uID0gY2FjaGVXcml0ZUJhcnJpZXIuZ2V0KCk7
CkBAIC0xMjk0LDcgKzEyOTQsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGlu
ZUNhY2hlCiAgICAgICAgICAgICAvLyBhcmUgZm9yIG91dGVyIGZ1bmN0aW9ucywgYW5kIHdlIHJl
ZmVyIHRvIHRob3NlIGZ1bmN0aW9ucyBzdHJvbmdseSwgYW5kIHRoZXkgcmVmZXIKICAgICAgICAg
ICAgIC8vIHRvIHRoZSBzeW1ib2wgdGFibGUgc3Ryb25nbHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUg
b24gdGhlIHNhZmUgc2lkZS4KICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gY3VySW5zdHJ1
Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlPigpLm1ldGFkYXRhKHRoaXMpOwotICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxTeW1ib2xUYWJsZT4mIHN5bWJvbFRhYmxlID0gbWV0YWRhdGEuc3lt
Ym9sVGFibGU7CisgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN5bWJvbFRhYmxlPiYgc3lt
Ym9sVGFibGUgPSBtZXRhZGF0YS5tX3N5bWJvbFRhYmxlOwogICAgICAgICAgICAgaWYgKCFzeW1i
b2xUYWJsZSB8fCBIZWFwOjppc01hcmtlZChzeW1ib2xUYWJsZS5nZXQoKSkpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQpAQCAt
MTY2NSwxMiArMTY2NSwxMiBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lz
Q29tCiAgICAgYXV0byBpbnN0cnVjdGlvbiA9IG1faW5zdHJ1Y3Rpb25zLT5hdChieXRlY29kZU9m
ZnNldCk7CiAgICAgT3BDYXRjaCBvcCA9IGluc3RydWN0aW9uLT5hczxPcENhdGNoPigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gb3AubWV0YWRhdGEodGhpcyk7Ci0gICAgaWYgKCEhbWV0YWRhdGEu
YnVmZmVyKSB7CisgICAgaWYgKCEhbWV0YWRhdGEubV9idWZmZXIpIHsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICBmb3IgKGF1dG8mIHByb2ZpbGUgOiBtX2Nh
dGNoUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIGlmIChwcm9maWxlLmdldCgpID09IG1ldGFkYXRh
LmJ1ZmZlcikgeworICAgICAgICAgICAgaWYgKHByb2ZpbGUuZ2V0KCkgPT0gbWV0YWRhdGEubV9i
dWZmZXIpIHsKICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNzEzLDcgKzE3MTMsNyBAQCB2b2lkIENvZGVCbG9j
azo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tCiAgICAgLy8gdGhlIGNvbXBpbGVyIHRocmVhZCBy
ZWFkcyBmdWxseSBpbml0aWFsaXplZCBkYXRhLgogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
IAogCi0gICAgb3AubWV0YWRhdGEodGhpcykuYnVmZmVyID0gcHJvZmlsZXMuZ2V0KCk7CisgICAg
b3AubWV0YWRhdGEodGhpcykubV9idWZmZXIgPSBwcm9maWxlcy5nZXQoKTsKIAogICAgIHsKICAg
ICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwpAQCAtMjQ5MSw3ICsyNDkx
LDcgQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZQogICAgIHN3aXRj
aCAoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkpIHsKICNkZWZpbmUgQ0FTRShPcCkgXAogICAgIGNh
c2UgT3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24tPmFzPE9wPigp
Lm1ldGFkYXRhKHRoaXMpLmFycmF5UHJvZmlsZTsKKyAgICAgICAgcmV0dXJuICZpbnN0cnVjdGlv
bi0+YXM8T3A+KCkubWV0YWRhdGEodGhpcykubV9hcnJheVByb2ZpbGU7CiAKICAgICBGT1JfRUFD
SF9PUENPREVfV0lUSF9BUlJBWV9QUk9GSUxFKENBU0UpCiAjdW5kZWYgQ0FTRQpAQCAtMjQ5OSw4
ICsyNDk5LDggQEAgQXJyYXlQcm9maWxlKiBDb2RlQmxvY2s6OmdldEFycmF5UHJvZmlsZQogICAg
IGNhc2UgT3BHZXRCeUlkOjpvcGNvZGVJRDogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YSh0aGlzKTsKLSAgICAgICAgaWYgKG1ldGFkYXRhLm1vZGUgPT0gR2V0QnlJ
ZE1vZGU6OkFycmF5TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuICZtZXRhZGF0YS5tb2RlTWV0
YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZTsKKyAgICAgICAgaWYgKG1ldGFkYXRh
Lm1fbW9kZSA9PSBHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4g
Jm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtMjY4NiwyMiArMjY4NiwyMiBA
QCB2b2lkIENvZGVCbG9jazo6bm90aWZ5TGV4aWNhbEJpbmRpbmdTaGFkCiAgICAgICAgIGNhc2Ug
b3BfcmVzb2x2ZV9zY29wZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0
aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBSZXNvbHZlVHlwZSBvcmlnaW5h
bFJlc29sdmVUeXBlID0gbWV0YWRhdGEucmVzb2x2ZVR5cGU7CisgICAgICAgICAgICBSZXNvbHZl
VHlwZSBvcmlnaW5hbFJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKICAgICAg
ICAgICAgIGlmIChvcmlnaW5hbFJlc29sdmVUeXBlID09IEdsb2JhbFByb3BlcnR5IHx8IG9yaWdp
bmFsUmVzb2x2ZVR5cGUgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBpZGVudGlmaWVyKGJ5
dGVjb2RlLnZhcik7CisgICAgICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBp
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRh
aW5zKGlkZW50LmltcGwoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcGFzcyBKU0ds
b2JhbExleGljYWxTY29wZSBhcyBhIHN0YXJ0IHBvaW50IG9mIHRoZSBzY29wZSBjaGFpbi4KICAg
ICAgICAgICAgICAgICAgICAgLy8gSXQgc2hvdWxkIGltbWVkaWF0ZWx5IGZpbmQgdGhlIGxleGlj
YWwgYmluZGluZyBiZWNhdXNlIHRoYXQncyB0aGUgcmVhc29uIHdoeSB3ZSBwZXJmb3JtIHRoaXMg
cmV3cml0aW5nIG5vdy4KLSAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29w
ZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2Rl
LmxvY2FsU2NvcGVEZXB0aCwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpLCBpZGVudCwgR2V0
LCBieXRlY29kZS5yZXNvbHZlVHlwZSwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXph
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5tX2xvY2Fs
U2NvcGVEZXB0aCwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxTY29wZSgpLCBpZGVudCwgR2V0LCBieXRl
Y29kZS5tX3Jlc29sdmVUeXBlLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9u
KTsKICAgICAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFzc2VydE5vRXhjZXB0aW9uKCk7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvcC50eXBlID09IEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcik7Ci0g
ICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnJlc29sdmVUeXBlID0gbmVlZHNWYXJJbmplY3Rp
b25DaGVja3Mob3JpZ2luYWxSZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXI7Ci0gICAgICAgICAgICAgICAgICAgIG1l
dGFkYXRhLmxvY2FsU2NvcGVEZXB0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRh
Lm1fcmVzb2x2ZVR5cGUgPSBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhvcmlnaW5hbFJlc29sdmVU
eXBlKSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4
aWNhbFZhcjsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGgg
PSAwOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW9wLmxleGljYWxFbnZpcm9ubWVudCk7
Ci0gICAgICAgICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKG1ldGFkYXRhLnJlc29sdmVUeXBlLCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0
YW50U2NvcGVGb3JDb2RlQmxvY2sobWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgdGhpcyk7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChjb25zdGFudFNjb3BlID09IGdsb2JhbE9iamVjdC0+Z2xv
YmFsU2NvcGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmNvbnN0YW50U2NvcGUu
c2V0KHZtLCB0aGlzLCBjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoQ29kZUJsb2NrSW50ZXJuYWw6OnZlcmJvc2UsICJSZXdyaXRlIG9wX3Jlc29sdmVfc2Nv
cGUgZnJvbSAiLCBvcmlnaW5hbFJlc29sdmVUeXBlLCAiIHRvICIsIG1ldGFkYXRhLnJlc29sdmVU
eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9jb25zdGFudFNjb3BlLnNldCh2
bSwgdGhpcywgY29uc3RhbnRTY29wZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklm
KENvZGVCbG9ja0ludGVybmFsOjp2ZXJib3NlLCAiUmV3cml0ZSBvcF9yZXNvbHZlX3Njb3BlIGZy
b20gIiwgb3JpZ2luYWxSZXNvbHZlVHlwZSwgIiB0byAiLCBtZXRhZGF0YS5tX3Jlc29sdmVUeXBl
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
QEAgLTI3MTAsMTkgKzI3MTAsMTkgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGlmeUxleGljYWxCaW5k
aW5nU2hhZAogICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7CiAgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgICAg
ICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSh0aGlzKTsKLSAgICAgICAg
ICAgIFJlc29sdmVUeXBlIG9yaWdpbmFsUmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5nZXRQdXRJbmZv
LnJlc29sdmVUeXBlKCk7CisgICAgICAgICAgICBSZXNvbHZlVHlwZSBvcmlnaW5hbFJlc29sdmVU
eXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgICAgICAgICBp
ZiAob3JpZ2luYWxSZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBvcmlnaW5hbFJlc29s
dmVUeXBlID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgewotICAgICAg
ICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmllcihieXRlY29kZS52
YXIpOworICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRlbnRpZmll
cihieXRlY29kZS5tX3Zhcik7CiAgICAgICAgICAgICAgICAgaWYgKHNldC5jb250YWlucyhpZGVu
dC5pbXBsKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHBhc3MgSlNHbG9iYWxMZXhp
Y2FsU2NvcGUgYXMgYSBzdGFydCBwb2ludCBvZiB0aGUgc2NvcGUgY2hhaW4uCiAgICAgICAgICAg
ICAgICAgICAgIC8vIEl0IHNob3VsZCBpbW1lZGlhdGVseSBmaW5kIHRoZSBsZXhpY2FsIGJpbmRp
bmcgYmVjYXVzZSB0aGF0J3MgdGhlIHJlYXNvbiB3aHkgd2UgcGVyZm9ybSB0aGlzIHJld3JpdGlu
ZyBub3cuCi0gICAgICAgICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBieXRlY29kZS5sb2NhbFNj
b3BlRGVwdGgsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGUoKSwgaWRlbnQsIEdldCwgYnl0ZWNv
ZGUuZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpLCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRp
YWxpemF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6
YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2RlLm1f
bG9jYWxTY29wZURlcHRoLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNjb3BlKCksIGlkZW50LCBHZXQs
IGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpLCBJbml0aWFsaXphdGlvbk1vZGU6
Ok5vdEluaXRpYWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgc2NvcGUucmVsZWFzZUFz
c2VydE5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChvcC50eXBlID09
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9wLnR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcik7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmdldFB1dEluZm8g
PSBHZXRQdXRJbmZvKGJ5dGVjb2RlLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgbmVlZHNWYXJJ
bmplY3Rpb25DaGVja3Mob3JpZ2luYWxSZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIGJ5dGVjb2RlLmdldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS53
YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKLSAgICAgICAgICAgICAgICAgICAgbWV0
YWRhdGEub3BlcmFuZCA9IG9wLm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dM
bklmKENvZGVCbG9ja0ludGVybmFsOjp2ZXJib3NlLCAiUmV3cml0ZSBvcF9nZXRfZnJvbV9zY29w
ZSBmcm9tICIsIG9yaWdpbmFsUmVzb2x2ZVR5cGUsICIgdG8gIiwgbWV0YWRhdGEuZ2V0UHV0SW5m
by5yZXNvbHZlVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9nZXRQdXRJ
bmZvID0gR2V0UHV0SW5mbyhieXRlY29kZS5tX2dldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3Mob3JpZ2luYWxSZXNvbHZlVHlwZSkgPyBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyA6IEdsb2JhbExleGljYWxWYXIsIGJ5dGVjb2RlLm1f
Z2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1l
dGFkYXRhLm1fd2F0Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CisgICAgICAgICAgICAg
ICAgICAgIG1ldGFkYXRhLm1fb3BlcmFuZCA9IG9wLm9wZXJhbmQ7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKENvZGVCbG9ja0ludGVybmFsOjp2ZXJib3NlLCAiUmV3cml0ZSBvcF9n
ZXRfZnJvbV9zY29wZSBmcm9tICIsIG9yaWdpbmFsUmVzb2x2ZVR5cGUsICIgdG8gIiwgbWV0YWRh
dGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjczMSwyNSArMjczMSwyNSBAQCB2b2lk
IENvZGVCbG9jazo6bm90aWZ5TGV4aWNhbEJpbmRpbmdTaGFkCiAgICAgICAgIGNhc2Ugb3BfcHV0
X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0VG9TY29wZT4oKTsKICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEodGhpcyk7Ci0gICAgICAgICAgICBSZXNvbHZlVHlwZSBvcmlnaW5hbFJlc29sdmVU
eXBlID0gbWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgICAgICAgICAgUmVz
b2x2ZVR5cGUgb3JpZ2luYWxSZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOwogICAgICAgICAgICAgaWYgKG9yaWdpbmFsUmVzb2x2ZVR5cGUgPT0gR2xvYmFs
UHJvcGVydHkgfHwgb3JpZ2luYWxSZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUudmFyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwogICAgICAgICAgICAg
ICAgIGlmIChzZXQuY29udGFpbnMoaWRlbnQuaW1wbCgpKSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBwYXNzIEpTR2xvYmFsTGV4aWNhbFNjb3BlIGFzIGEgc3RhcnQgcG9pbnQgb2YgdGhl
IHNjb3BlIGNoYWluLgogICAgICAgICAgICAgICAgICAgICAvLyBJdCBzaG91bGQgaW1tZWRpYXRl
bHkgZmluZCB0aGUgbGV4aWNhbCBiaW5kaW5nIGJlY2F1c2UgdGhhdCdzIHRoZSByZWFzb24gd2h5
IHdlIHBlcmZvcm0gdGhpcyByZXdyaXRpbmcgbm93LgotICAgICAgICAgICAgICAgICAgICBSZXNv
bHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2Jh
bEV4ZWMoKSwgYnl0ZWNvZGUuc3ltYm9sVGFibGVPclNjb3BlRGVwdGgsIGdsb2JhbE9iamVjdC0+
Z2xvYmFsU2NvcGUoKSwgaWRlbnQsIFB1dCwgYnl0ZWNvZGUuZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpLCBieXRlY29kZS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVw
dGgsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGUoKSwgaWRlbnQsIFB1dCwgYnl0ZWNvZGUubV9n
ZXRQdXRJbmZvLnJlc29sdmVUeXBlKCksIGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5pbml0aWFsaXph
dGlvbk1vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4
Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQob3AudHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyB8fCBvcC50eXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgb3AudHlwZSA9PSBEeW5hbWljKTsKIAogICAgICAgICAgICAgICAgICAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG9wLnR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIG1ldGFk
YXRhLndhdGNocG9pbnRTZXQgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBtZXRhZGF0
YS5tX3dhdGNocG9pbnRTZXQgPSBudWxscHRyOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgcmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcikgewogICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZVR5cGUgPSBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhvcmlnaW5hbFJlc29sdmVUeXBl
KSA/IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIDogR2xvYmFsTGV4aWNh
bFZhcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQgPSBv
cC53YXRjaHBvaW50U2V0OworICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV93YXRj
aHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBtZXRhZGF0YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhieXRlY29k
ZS5nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIHJlc29sdmVUeXBlLCBieXRlY29kZS5nZXRQdXRJ
bmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEu
b3BlcmFuZCA9IG9wLm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKENv
ZGVCbG9ja0ludGVybmFsOjp2ZXJib3NlLCAiUmV3cml0ZSBvcF9wdXRfdG9fc2NvcGUgZnJvbSAi
LCBvcmlnaW5hbFJlc29sdmVUeXBlLCAiIHRvICIsIG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZ2V0UHV0SW5mbyA9IEdl
dFB1dEluZm8oYnl0ZWNvZGUubV9nZXRQdXRJbmZvLnJlc29sdmVNb2RlKCksIHJlc29sdmVUeXBl
LCBieXRlY29kZS5tX2dldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOworICAgICAgICAg
ICAgICAgICAgICBtZXRhZGF0YS5tX29wZXJhbmQgPSBvcC5vcGVyYW5kOworICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG5JZihDb2RlQmxvY2tJbnRlcm5hbDo6dmVyYm9zZSwgIlJld3JpdGUg
b3BfcHV0X3RvX3Njb3BlIGZyb20gIiwgb3JpZ2luYWxSZXNvbHZlVHlwZSwgIiB0byAiLCBtZXRh
ZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yODc5LDcgKzI4NzksNyBAQCBWYWx1
ZVByb2ZpbGUqIENvZGVCbG9jazo6dHJ5R2V0VmFsdWVQcm9mCiAKICNkZWZpbmUgQ0FTRShPcCkg
XAogICAgIGNhc2UgT3A6Om9wY29kZUlEOiBcCi0gICAgICAgIHJldHVybiAmaW5zdHJ1Y3Rpb24t
PmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLnByb2ZpbGU7CisgICAgICAgIHJldHVybiAmaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpLm1ldGFkYXRhKHRoaXMpLm1fcHJvZmlsZTsKIAogICAgICAgICBGT1Jf
RUFDSF9PUENPREVfV0lUSF9WQUxVRV9QUk9GSUxFKENBU0UpCiAKQEAgLTMwMTgsMTUgKzMwMTgs
MTUgQEAgQXJpdGhQcm9maWxlKiBDb2RlQmxvY2s6OmFyaXRoUHJvZmlsZUZvcgogewogICAgIHN3
aXRjaCAocGMtPm9wY29kZUlEKCkpIHsKICAgICBjYXNlIG9wX25lZ2F0ZToKLSAgICAgICAgcmV0
dXJuICZwYy0+YXM8T3BOZWdhdGU+KCkubWV0YWRhdGEodGhpcykuYXJpdGhQcm9maWxlOworICAg
ICAgICByZXR1cm4gJnBjLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJv
ZmlsZTsKICAgICBjYXNlIG9wX2FkZDoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BBZGQ+KCku
bWV0YWRhdGEodGhpcykuYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gJnBjLT5hczxPcEFk
ZD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX211bDoKLSAg
ICAgICAgcmV0dXJuICZwYy0+YXM8T3BNdWw+KCkubWV0YWRhdGEodGhpcykuYXJpdGhQcm9maWxl
OworICAgICAgICByZXR1cm4gJnBjLT5hczxPcE11bD4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRo
UHJvZmlsZTsKICAgICBjYXNlIG9wX3N1YjoKLSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BTdWI+
KCkubWV0YWRhdGEodGhpcykuYXJpdGhQcm9maWxlOworICAgICAgICByZXR1cm4gJnBjLT5hczxP
cFN1Yj4oKS5tZXRhZGF0YSh0aGlzKS5tX2FyaXRoUHJvZmlsZTsKICAgICBjYXNlIG9wX2RpdjoK
LSAgICAgICAgcmV0dXJuICZwYy0+YXM8T3BEaXY+KCkubWV0YWRhdGEodGhpcykuYXJpdGhQcm9m
aWxlOworICAgICAgICByZXR1cm4gJnBjLT5hczxPcERpdj4oKS5tZXRhZGF0YSh0aGlzKS5tX2Fy
aXRoUHJvZmlsZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zMDY2
LDEzICszMDY2LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNpY0Jsb2NrQm91bmRhcmkK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3cpOwogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24t
PmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93PigpOwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKHRoaXMpOwotICAgICAgICBpbnQgYmFzaWNCbG9ja1N0YXJ0T2Zmc2V0
ID0gYnl0ZWNvZGUudGV4dE9mZnNldDsKKyAgICAgICAgaW50IGJhc2ljQmxvY2tTdGFydE9mZnNl
dCA9IGJ5dGVjb2RlLm1fdGV4dE9mZnNldDsKICAgICAgICAgaW50IGJhc2ljQmxvY2tFbmRPZmZz
ZXQ7CiAgICAgICAgIGlmIChpICsgMSA8IG9mZnNldHNMZW5ndGgpIHsKICAgICAgICAgICAgIHNp
emVfdCBlbmRJZHggPSBieXRlY29kZU9mZnNldHNbaSArIDFdOwogICAgICAgICAgICAgYXV0byBl
bmRJbnN0cnVjdGlvbiA9IG1faW5zdHJ1Y3Rpb25zLT5hdChlbmRJZHgpOwogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZW5kSW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0gb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3cpOwotICAgICAgICAgICAgYmFzaWNCbG9ja0VuZE9mZnNldCA9IGVuZEluc3Ry
dWN0aW9uLT5hczxPcFByb2ZpbGVDb250cm9sRmxvdz4oKS50ZXh0T2Zmc2V0IC0gMTsKKyAgICAg
ICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBlbmRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxl
Q29udHJvbEZsb3c+KCkubV90ZXh0T2Zmc2V0IC0gMTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGJhc2ljQmxvY2tFbmRPZmZzZXQgPSBtX3NvdXJjZU9mZnNldCArIG93bmVyU2NyaXB0
RXhlY3V0YWJsZSgpLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDE7IC8vIE9mZnNldCBiZWZvcmUgdGhl
IGNsb3NpbmcgYnJhY2UuCiAgICAgICAgICAgICBiYXNpY0Jsb2NrU3RhcnRPZmZzZXQgPSBzdGQ6
Om1pbihiYXNpY0Jsb2NrU3RhcnRPZmZzZXQsIGJhc2ljQmxvY2tFbmRPZmZzZXQpOyAvLyBTb21l
IHN0YXJ0IG9mZnNldHMgbWF5IGJlIGF0IHRoZSBjbG9zaW5nIGJyYWNlLCBlbnN1cmUgaXQgaXMg
dGhlIG9mZnNldCBiZWZvcmUuCkBAIC0zMDk4LDcgKzMwOTgsNyBAQCB2b2lkIENvZGVCbG9jazo6
aW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpCiAgICAgICAgIC8vIG06IG9wX3Byb2ZpbGVfY29udHJv
bF9mbG93CiAgICAgICAgIGlmIChiYXNpY0Jsb2NrRW5kT2Zmc2V0IDwgYmFzaWNCbG9ja1N0YXJ0
T2Zmc2V0KSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpICsgMSA8IG9mZnNldHNMZW5n
dGgpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZW5jb3VudGVyIGR1bW15IGJsb2NrcyBhdCB0aGUgZW5k
IG9mIGEgQ29kZUJsb2NrLgotICAgICAgICAgICAgbWV0YWRhdGEuYmFzaWNCbG9ja0xvY2F0aW9u
ID0gdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpLT5kdW1teUJhc2ljQmxvY2soKTsKKyAgICAg
ICAgICAgIG1ldGFkYXRhLm1fYmFzaWNCbG9ja0xvY2F0aW9uID0gdm0oKS0+Y29udHJvbEZsb3dQ
cm9maWxlcigpLT5kdW1teUJhc2ljQmxvY2soKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKQEAgLTMxMjIsNyArMzEyMiw3IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNp
Y0Jsb2NrQm91bmRhcmkKICAgICAgICAgZm9yIChjb25zdCBXcml0ZUJhcnJpZXI8RnVuY3Rpb25F
eGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA6IG1fZnVuY3Rpb25FeHBycykKICAgICAgICAgICAgIGlu
c2VydEZ1bmN0aW9uR2FwcyhleGVjdXRhYmxlKTsKIAotICAgICAgICBtZXRhZGF0YS5iYXNpY0Js
b2NrTG9jYXRpb24gPSBiYXNpY0Jsb2NrTG9jYXRpb247CisgICAgICAgIG1ldGFkYXRhLm1fYmFz
aWNCbG9ja0xvY2F0aW9uID0gYmFzaWNCbG9ja0xvY2F0aW9uOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9ja0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrSW5saW5lcy5o
CShyZXZpc2lvbiAyNDAwMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpmb3JFYWNoVmFsdWVQcm9maWxlKGNvbnMKIAogICAgIGlmIChtX21ldGFkYXRhKSB7
CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKLSAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsm
XSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0YS5wcm9maWxlKTsgfSk7CisgICAgbV9t
ZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRh
dGEubV9wcm9maWxlKTsgfSk7CiAKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfVkFMVUVf
UFJPRklMRShWSVNJVCkKIApAQCAtNTMsMTIgKzUzLDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpmb3JF
YWNoQXJyYXlQcm9maWxlKGNvbnMKIHsKICAgICBpZiAobV9tZXRhZGF0YSkgewogICAgICAgICBt
X21ldGFkYXRhLT5mb3JFYWNoPE9wR2V0QnlJZD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgewotICAg
ICAgICAgICAgaWYgKG1ldGFkYXRhLm1vZGUgPT0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKQot
ICAgICAgICAgICAgICAgIGZ1bmMobWV0YWRhdGEubW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9k
ZS5hcnJheVByb2ZpbGUpOworICAgICAgICAgICAgaWYgKG1ldGFkYXRhLm1fbW9kZSA9PSBHZXRC
eUlkTW9kZTo6QXJyYXlMZW5ndGgpCisgICAgICAgICAgICAgICAgZnVuYyhtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKTsKICAgICAgICAgfSk7CiAK
ICNkZWZpbmUgVklTSVQoX19vcCkgXAotICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZd
IChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLmFycmF5UHJvZmlsZSk7IH0pOworICAg
IG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlKTsgfSk7CiAKICAgICAgICAgRk9SX0VBQ0hfT1BDT0RFX1dJ
VEhfQVJSQVlfUFJPRklMRShWSVNJVCkKIApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIENvZGVCbG9j
azo6Zm9yRWFjaEFycmF5QWxsb2NhdGlvblByCiB7CiAgICAgaWYgKG1fbWV0YWRhdGEpIHsKICNk
ZWZpbmUgVklTSVQoX19vcCkgXAotICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8X19vcD4oWyZdIChh
dXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLmFycmF5QWxsb2NhdGlvblByb2ZpbGUpOyB9
KTsKKyAgICBtX21ldGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsg
ZnVuYyhtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUpOyB9KTsKIAogICAgICAgICBG
T1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUoVklTSVQpCiAKQEAg
LTg0LDcgKzg0LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZvckVhY2hPYmplY3RBbGxvY2F0aW9uUAog
ewogICAgIGlmIChtX21ldGFkYXRhKSB7CiAjZGVmaW5lIFZJU0lUKF9fb3ApIFwKLSAgICBtX21l
dGFkYXRhLT5mb3JFYWNoPF9fb3A+KFsmXSAoYXV0byYgbWV0YWRhdGEpIHsgZnVuYyhtZXRhZGF0
YS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSk7IH0pOworICAgIG1fbWV0YWRhdGEtPmZvckVhY2g8
X19vcD4oWyZdIChhdXRvJiBtZXRhZGF0YSkgeyBmdW5jKG1ldGFkYXRhLm1fb2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUpOyB9KTsKIAogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lUSF9PQkpFQ1Rf
QUxMT0NBVElPTl9QUk9GSUxFKFZJU0lUKQogCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpmb3JFYWNoTExJbnRDYWxsTGlua0luZm8KIHsKICAgICBpZiAobV9tZXRhZGF0YSkgewog
I2RlZmluZSBWSVNJVChfX29wKSBcCi0gICAgbV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0g
KGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0YWRhdGEuY2FsbExpbmtJbmZvKTsgfSk7CisgICAg
bV9tZXRhZGF0YS0+Zm9yRWFjaDxfX29wPihbJl0gKGF1dG8mIG1ldGFkYXRhKSB7IGZ1bmMobWV0
YWRhdGEubV9jYWxsTGlua0luZm8pOyB9KTsKIAogICAgICAgICBGT1JfRUFDSF9PUENPREVfV0lU
SF9MTElOVF9DQUxMX0xJTktfSU5GTyhWSVNJVCkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMjQwMDI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjQsMTMgKzY0LDEzIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZyb20KICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBpbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpLm1ldGFkYXRhKHByb2ZpbGVkQmxvY2spOwogICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIG5vdCBqdXN0IGJhaWwgaWYgd2Ugc2VlIGEgZ2V0X2J5X2lkX3Byb3RvX2xvYWQu
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgw
MzkKLSAgICAgICAgaWYgKG1ldGFkYXRhLm1vZGUgIT0gR2V0QnlJZE1vZGU6OkRlZmF1bHQpCisg
ICAgICAgIGlmIChtZXRhZGF0YS5tX21vZGUgIT0gR2V0QnlJZE1vZGU6OkRlZmF1bHQpCiAgICAg
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7Ci0gICAg
ICAgIHN0cnVjdHVyZUlEID0gbWV0YWRhdGEubW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0cnVj
dHVyZTsKKyAgICAgICAgc3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5kZWZh
dWx0TW9kZS5zdHJ1Y3R1cmU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIG9wX2dl
dF9ieV9pZF9kaXJlY3Q6Ci0gICAgICAgIHN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZERpcmVjdD4oKS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKS5zdHJ1Y3R1cmU7CisgICAg
ICAgIHN0cnVjdHVyZUlEID0gaW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKS5tZXRh
ZGF0YShwcm9maWxlZEJsb2NrKS5tX3N0cnVjdHVyZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBvcF90cnlfZ2V0X2J5X2lkOiB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IGp1
c3QgYmFpbCBpZiB3ZSBzZWUgYSB0cnlfZ2V0X2J5X2lkLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0xMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xM
SW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9u
IDI0MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludFByb3RvdHlw
ZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTksOSArNTksOSBAQCB2b2lkIExMSW50UHJvdG90eXBlTG9hZEFkYXB0aXZlU3RydWN0dXJlCiAK
IHZvaWQgTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50OjpjbGVh
ckxMSW50R2V0QnlJZENhY2hlKE9wR2V0QnlJZDo6TWV0YWRhdGEmIG1ldGFkYXRhKQogewotICAg
IG1ldGFkYXRhLm1vZGUgPSBHZXRCeUlkTW9kZTo6RGVmYXVsdDsKLSAgICBtZXRhZGF0YS5tb2Rl
TWV0YWRhdGEuZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0ID0gMDsKLSAgICBtZXRhZGF0YS5tb2Rl
TWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlID0gMDsKKyAgICBtZXRhZGF0YS5tX21vZGUg
PSBHZXRCeUlkTW9kZTo6RGVmYXVsdDsKKyAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5kZWZh
dWx0TW9kZS5jYWNoZWRPZmZzZXQgPSAwOworICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmRl
ZmF1bHRNb2RlLnN0cnVjdHVyZSA9IDA7CiB9CiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5o
CShyZXZpc2lvbiAyNDAwMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
Y2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTgsNyArNTgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBDQVNFX09QKE9wSmJlbG93ZXEpIFwKICAgICBjYXNlIG9w
X3N3aXRjaF9pbW06IHsgXAogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wU3dpdGNoSW1tPigpOyBcCi0gICAgICAgIGF1dG8mIHRhYmxlID0gY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUoYnl0ZWNvZGUudGFibGVJbmRleCk7IFwKKyAgICAgICAgYXV0byYgdGFibGUg
PSBjb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZShieXRlY29kZS5tX3RhYmxlSW5kZXgpOyBcCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyBpLS07
KSBcCiAgICAgICAgICAgICBTV0lUQ0hfQ0FTRSh0YWJsZS5icmFuY2hPZmZzZXRzW2ldKTsgXAog
ICAgICAgICBTV0lUQ0hfREVGQVVMVF9PRkZTRVQoT3BTd2l0Y2hJbW0pOyBcCkBAIC02Niw3ICs2
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0gXAogICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6
IHsgXAogICAgICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hh
cj4oKTsgXAotICAgICAgICBhdXRvJiB0YWJsZSA9IGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KGJ5dGVjb2RlLnRhYmxlSW5kZXgpOyBcCisgICAgICAgIGF1dG8mIHRhYmxlID0gY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUoYnl0ZWNvZGUubV90YWJsZUluZGV4KTsgXAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSB0YWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKTsgaS0tOykgXAogICAgICAg
ICAgICAgU1dJVENIX0NBU0UodGFibGUuYnJhbmNoT2Zmc2V0c1tpXSk7IFwKICAgICAgICAgU1dJ
VENIX0RFRkFVTFRfT0ZGU0VUKE9wU3dpdGNoQ2hhcik7IFwKQEAgLTc0LDcgKzc0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgfSBcCiAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7IFwKICAg
ICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4oKTsg
XAotICAgICAgICBhdXRvJiB0YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KGJ5dGVjb2RlLnRhYmxlSW5kZXgpOyBcCisgICAgICAgIGF1dG8mIHRhYmxlID0gY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoYnl0ZWNvZGUubV90YWJsZUluZGV4KTsgXAogICAgICAg
ICBhdXRvIGl0ZXIgPSB0YWJsZS5vZmZzZXRUYWJsZS5iZWdpbigpOyBcCiAgICAgICAgIGF1dG8g
ZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCk7IFwKICAgICAgICAgZm9yICg7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIFwKQEAgLTEwOCw3ICsxMDgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwg
dHlwZW5hbWUgQmxvY2s+CiBpbmxpbmUgaW50IGp1bXBUYXJnZXRGb3JJbnN0cnVjdGlvbihCbG9j
ayYmIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICByZXR1
cm4ganVtcFRhcmdldEZvckluc3RydWN0aW9uKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLnRhcmdldCk7CisgICAgcmV0dXJuIGp1bXBUYXJnZXRGb3JJbnN0cnVjdGlvbihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEJsb2NrLCB0eXBlbmFtZSBGdW5jdGlvbj4KQEAgLTEyMyw3ICsxMjMsNyBAQCBpbmxpbmUg
dm9pZCBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JJCiAgICAgZnVuY3Rpb24oX190YXJnZXQp
CiAKICNkZWZpbmUgU1dJVENIX0RFRkFVTFRfT0ZGU0VUKF9fb3ApIFwKLSAgICBmdW5jdGlvbihq
dW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
ZGVmYXVsdE9mZnNldCkpIFwKKyAgICBmdW5jdGlvbihqdW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24o
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSkgXAogCiBT
V0lUQ0hfSk1QKENBU0VfT1AsIFNXSVRDSF9DQVNFLCBTV0lUQ0hfREVGQVVMVF9PRkZTRVQpCiAK
QEAgLTE1NCw3ICsxNTQsNyBAQCBpbmxpbmUgdm9pZCB1cGRhdGVTdG9yZWRKdW1wVGFyZ2V0c0Zv
ckluCiAKICNkZWZpbmUgU1dJVENIX0RFRkFVTFRfT0ZGU0VUKF9fb3ApIFwKICAgICBkbyB7IFwK
LSAgICAgICAgaW50MzJfdCB0YXJnZXQgPSBqdW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24oY29kZUJs
b2NrT3JIYXNoTWFwLCBpbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCk7IFwKKyAg
ICAgICAgaW50MzJfdCB0YXJnZXQgPSBqdW1wVGFyZ2V0Rm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2Nr
T3JIYXNoTWFwLCBpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsgXAogICAg
ICAgICBpbnQzMl90IG5ld1RhcmdldCA9IGZ1bmN0aW9uKHRhcmdldCk7IFwKICAgICAgICAgaW5z
dHJ1Y3Rpb24tPmNhc3Q8X19vcD4oKS0+c2V0RGVmYXVsdE9mZnNldChCb3VuZExhYmVsKG5ld1Rh
cmdldCksIFsmXSgpIHsgXAogICAgICAgICAgICAgY29kZUJsb2NrLT5hZGRPdXRPZkxpbmVKdW1w
VGFyZ2V0KGZpbmFsT2Zmc2V0ICsgaW5zdHJ1Y3Rpb24ub2Zmc2V0KCksIG5ld1RhcmdldCk7IFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAJKHJldmlzaW9uIDI0MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDEzICs1NSwxMyBAQCBQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgYXV0byBieXRlY29k
ZSA9IGluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShwcm9maWxlZEJsb2NrKTsKIAotICAgIFN0cnVjdHVyZUlEIHN0cnVj
dHVyZUlEID0gbWV0YWRhdGEub2xkU3RydWN0dXJlOworICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmU7CiAgICAgaWYgKCFzdHJ1Y3R1cmVJRCkKICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCiAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0
dXJlSUQpOwogCi0gICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5uZXdT
dHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlSUQgbmV3U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX25l
d1N0cnVjdHVyZTsKICAgICBpZiAoIW5ld1N0cnVjdHVyZUlEKSB7CiAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQpAQCAtNzksNyArNzksNyBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAogICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGNvbmRpdGlvblNldDsKLSAgICBpZiAoIShieXRlY29kZS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVj
dCkpIHsKKyAgICBpZiAoIShieXRlY29kZS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0KSkgewog
ICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvcGVydHlTZXR0ZXJNaXNzQ29uY3VycmVudGx5KAogICAgICAgICAgICAgICAgIHZtLCBwcm9m
aWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgc3RydWN0dXJlLCB1aWQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAyNDAwMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5s
aW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDcgKzE0NSw3IEBAIHN0
YXRpYyB2b2lkIGR1bXBMaW5lQ29sdW1uRW50cnkoc2l6ZV90IGkKICAgICBjb25zdCBhdXRvIGlu
c3RydWN0aW9uID0gaW5zdHJ1Y3Rpb25TdHJlYW0uYXQoaW5zdHJ1Y3Rpb25PZmZzZXQpOwogICAg
IGNvbnN0IGNoYXIqIGV2ZW50ID0gIiI7CiAgICAgaWYgKGluc3RydWN0aW9uLT5pczxPcERlYnVn
PigpKSB7Ci0gICAgICAgIHN3aXRjaCAoaW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCkuZGVidWdI
b29rVHlwZSkgeworICAgICAgICBzd2l0Y2ggKGluc3RydWN0aW9uLT5hczxPcERlYnVnPigpLm1f
ZGVidWdIb29rVHlwZSkgewogICAgICAgICBjYXNlIFdpbGxFeGVjdXRlUHJvZ3JhbTogZXZlbnQg
PSAiIFdpbGxFeGVjdXRlUHJvZ3JhbSI7IGJyZWFrOwogICAgICAgICBjYXNlIERpZEV4ZWN1dGVQ
cm9ncmFtOiBldmVudCA9ICIgRGlkRXhlY3V0ZVByb2dyYW0iOyBicmVhazsKICAgICAgICAgY2Fz
ZSBEaWRFbnRlckNhbGxGcmFtZTogZXZlbnQgPSAiIERpZEVudGVyQ2FsbEZyYW1lIjsgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjQwMDI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEsIFMuTC4KICAqCkBAIC0xMzg5LDEzICsxMzg5LDEzIEBAIHRlbXBsYXRlPHR5cGVu
YW1lIEJpbk9wLCB0eXBlbmFtZSBKbXBPcD4KIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmZ1c2VD
b21wYXJlQW5kSnVtcChSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0LCBib29sIHN3YXBP
cGVyYW5kcykKIHsKICAgICBhdXRvIGJpbm9wID0gbV9sYXN0SW5zdHJ1Y3Rpb24tPmFzPEJpbk9w
PigpOwotICAgIGlmIChjb25kLT5pbmRleCgpID09IGJpbm9wLmRzdC5vZmZzZXQoKSAmJiBjb25k
LT5pc1RlbXBvcmFyeSgpICYmICFjb25kLT5yZWZDb3VudCgpKSB7CisgICAgaWYgKGNvbmQtPmlu
ZGV4KCkgPT0gYmlub3AubV9kc3Qub2Zmc2V0KCkgJiYgY29uZC0+aXNUZW1wb3JhcnkoKSAmJiAh
Y29uZC0+cmVmQ291bnQoKSkgewogICAgICAgICByZXdpbmQoKTsKIAogICAgICAgICBpZiAoc3dh
cE9wZXJhbmRzKQotICAgICAgICAgICAgc3RkOjpzd2FwKGJpbm9wLmxocywgYmlub3AucmhzKTsK
KyAgICAgICAgICAgIHN0ZDo6c3dhcChiaW5vcC5tX2xocywgYmlub3AubV9yaHMpOwogCi0gICAg
ICAgIEptcE9wOjplbWl0KHRoaXMsIGJpbm9wLmxocywgYmlub3AucmhzLCB0YXJnZXQuYmluZCh0
aGlzKSk7CisgICAgICAgIEptcE9wOjplbWl0KHRoaXMsIGJpbm9wLm1fbGhzLCBiaW5vcC5tX3Jo
cywgdGFyZ2V0LmJpbmQodGhpcykpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTQwNSwxMCArMTQwNSwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBV
bmFyeU9wLCB0eXBlbmFtZSBKbXBPCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpmdXNlVGVzdEFu
ZEptcChSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KQogewogICAgIGF1dG8gdW5vcCA9
IG1fbGFzdEluc3RydWN0aW9uLT5hczxVbmFyeU9wPigpOwotICAgIGlmIChjb25kLT5pbmRleCgp
ID09IHVub3AuZHN0Lm9mZnNldCgpICYmIGNvbmQtPmlzVGVtcG9yYXJ5KCkgJiYgIWNvbmQtPnJl
ZkNvdW50KCkpIHsKKyAgICBpZiAoY29uZC0+aW5kZXgoKSA9PSB1bm9wLm1fZHN0Lm9mZnNldCgp
ICYmIGNvbmQtPmlzVGVtcG9yYXJ5KCkgJiYgIWNvbmQtPnJlZkNvdW50KCkpIHsKICAgICAgICAg
cmV3aW5kKCk7CiAKLSAgICAgICAgSm1wT3A6OmVtaXQodGhpcywgdW5vcC5vcGVyYW5kLCB0YXJn
ZXQuYmluZCh0aGlzKSk7CisgICAgICAgIEptcE9wOjplbWl0KHRoaXMsIHVub3AubV9vcGVyYW5k
LCB0YXJnZXQuYmluZCh0aGlzKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNzA5LDQ5ICsxNzA5LDQ5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0RXF1YWwKIHsKICAgICBpZiAobV9sYXN0SW5zdHJ1Y3Rpb24tPmlzPE9w
VHlwZW9mPigpKSB7CiAgICAgICAgIGF1dG8gb3AgPSBtX2xhc3RJbnN0cnVjdGlvbi0+YXM8T3BU
eXBlb2Y+KCk7Ci0gICAgICAgIGlmIChzcmMxLT5pbmRleCgpID09IG9wLmRzdC5vZmZzZXQoKQor
ICAgICAgICBpZiAoc3JjMS0+aW5kZXgoKSA9PSBvcC5tX2RzdC5vZmZzZXQoKQogICAgICAgICAg
ICAgJiYgc3JjMS0+aXNUZW1wb3JhcnkoKQogICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzItPmluZGV4KCkpCiAgICAgICAgICAgICAmJiBtX2Nv
ZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT5pbmRleCgpKS5nZXQoKS5pc1N0cmluZygp
KSB7CiAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxv
Y2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgp
OwogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAg
ICAgcmV3aW5kKCk7Ci0gICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBk
c3QsIG9wLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBPcElzVW5kZWZpbmVkOjplbWl0KHRoaXMs
IGRzdCwgb3AubV92YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAg
ICAgICByZXdpbmQoKTsKLSAgICAgICAgICAgICAgICBPcElzQm9vbGVhbjo6ZW1pdCh0aGlzLCBk
c3QsIG9wLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBPcElzQm9vbGVhbjo6ZW1pdCh0aGlzLCBk
c3QsIG9wLm1fdmFsdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gIm51bWJlciIpIHsKICAgICAgICAgICAgICAg
ICByZXdpbmQoKTsKLSAgICAgICAgICAgICAgICBPcElzTnVtYmVyOjplbWl0KHRoaXMsIGRzdCwg
b3AudmFsdWUpOworICAgICAgICAgICAgICAgIE9wSXNOdW1iZXI6OmVtaXQodGhpcywgZHN0LCBv
cC5tX3ZhbHVlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKHZhbHVlID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgcmV3
aW5kKCk7Ci0gICAgICAgICAgICAgICAgT3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3Qs
IG9wLnZhbHVlLCBTdHJpbmdUeXBlKTsKKyAgICAgICAgICAgICAgICBPcElzQ2VsbFdpdGhUeXBl
OjplbWl0KHRoaXMsIGRzdCwgb3AubV92YWx1ZSwgU3RyaW5nVHlwZSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGRzdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAi
c3ltYm9sIikgewogICAgICAgICAgICAgICAgIHJld2luZCgpOwotICAgICAgICAgICAgICAgIE9w
SXNDZWxsV2l0aFR5cGU6OmVtaXQodGhpcywgZHN0LCBvcC52YWx1ZSwgU3ltYm9sVHlwZSk7Cisg
ICAgICAgICAgICAgICAgT3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIG9wLm1fdmFs
dWUsIFN5bWJvbFR5cGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dXNlQmlnSW50KCkgJiYgdmFsdWUgPT0gImJp
Z2ludCIpIHsKICAgICAgICAgICAgICAgICByZXdpbmQoKTsKLSAgICAgICAgICAgICAgICBPcElz
Q2VsbFdpdGhUeXBlOjplbWl0KHRoaXMsIGRzdCwgb3AudmFsdWUsIEJpZ0ludFR5cGUpOworICAg
ICAgICAgICAgICAgIE9wSXNDZWxsV2l0aFR5cGU6OmVtaXQodGhpcywgZHN0LCBvcC5tX3ZhbHVl
LCBCaWdJbnRUeXBlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZHN0OwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKHZhbHVlID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgICAgICAg
cmV3aW5kKCk7Ci0gICAgICAgICAgICAgICAgT3BJc09iamVjdE9yTnVsbDo6ZW1pdCh0aGlzLCBk
c3QsIG9wLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBPcElzT2JqZWN0T3JOdWxsOjplbWl0KHRo
aXMsIGRzdCwgb3AubV92YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRzdDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAg
ICAgICAgICAgcmV3aW5kKCk7Ci0gICAgICAgICAgICAgICAgT3BJc0Z1bmN0aW9uOjplbWl0KHRo
aXMsIGRzdCwgb3AudmFsdWUpOworICAgICAgICAgICAgICAgIE9wSXNGdW5jdGlvbjo6ZW1pdCh0
aGlzLCBkc3QsIG9wLm1fdmFsdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM4ODksNyArMzg4OSw3IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVuZFN3aXRjaCh1aW50MzIKICAgICAgICAgICAgIHJldHVybiBCb3VuZExhYmVs
KCk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1w
VGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGJ5dGVjb2RlLnRhYmxlSW5kZXgp
OworICAgICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZShieXRlY29kZS5tX3RhYmxlSW5kZXgpOwogICAgICAgICBwcmVw
YXJlSnVtcFRhYmxlRm9yU3dpdGNoKAogICAgICAgICAgICAganVtcFRhYmxlLCBzd2l0Y2hJbmZv
LmJ5dGVjb2RlT2Zmc2V0LCBjbGF1c2VDb3VudCwgbGFiZWxzLCBub2RlcywgbWluLCBtYXgsCiAg
ICAgICAgICAgICBzd2l0Y2hJbmZvLnN3aXRjaFR5cGUgPT0gU3dpdGNoSW5mbzo6U3dpdGNoSW1t
ZWRpYXRlCkBAIC0zOTE0LDcgKzM5MTQsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbmRT
d2l0Y2godWludDMyCiAgICAgICAgICAgICByZXR1cm4gQm91bmRMYWJlbCgpOwogICAgICAgICB9
KTsKIAotICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShyZWYtPmFzPE9wU3dpdGNoU3RyaW5nPigpLnRh
YmxlSW5kZXgpOworICAgICAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlID0g
bV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShyZWYtPmFzPE9wU3dpdGNoU3RyaW5n
PigpLm1fdGFibGVJbmRleCk7CiAgICAgICAgIHByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdTd2l0
Y2goanVtcFRhYmxlLCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBjbGF1c2VDb3VudCwgbGFi
ZWxzLCBub2Rlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ4NjAsNyArNDg2MCw3IEBA
IHZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXQKICAgICAgICAgLy8gMS4g
ZHN0IHN0YXlzIHRoZSBzYW1lLgogICAgICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgog
ICAgICAgICAvLyAzLiBwcm9wZXJ0eSBnZXRzIHN3aXRjaGVkIHRvIHRoZSBvcmlnaW5hbCBwcm9w
ZXJ0eS4KLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlPigmZ2VuZXJh
dG9yLCBieXRlY29kZS5kc3QsIGJ5dGVjb2RlLmJhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eVJlZ0luZGV4KSk7CisgICAgICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZT4o
JmdlbmVyYXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5UmVnSW5kZXgpKTsKIAogICAgICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1h
aW5pbmcgYnl0ZXMKICAgICAgICAgd2hpbGUgKGdlbmVyYXRvci5tX3dyaXRlci5wb3NpdGlvbigp
IDwgZW5kKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDI0MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTIzMSw4ICsxMjMx
LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbE9wPgogQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFs
aXR5IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBwYywgTm9k
ZVR5cGUgb3AsIENhbGxNb2RlIGNhbGxNb2RlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8Q2FsbE9wPigpOwotICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoYnl0ZWNvZGUuY2FsbGVl
KTsKLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5h
cmd2KTsKKyAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KGJ5dGVjb2RlLm1fY2FsbGVlKTsKKyAg
ICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3Yp
OwogCiAgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZvcigKICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBj
dXJyZW50Q29kZU9yaWdpbigpLApAQCAtMTI0MCw4ICsxMjQwLDggQEAgQnl0ZUNvZGVQYXJzZXI6
OlRlcm1pbmFsaXR5IEJ5dGVDb2RlUGFycwogCiAgICAgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtp
bmQgPSBJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3IoY2FsbE1vZGUpOwogCi0gICAgcmV0dXJuIGhh
bmRsZUNhbGwoYnl0ZWNvZGUuZHN0LCBvcCwga2luZCwgcGMtPnNpemUoKSwgY2FsbFRhcmdldCwK
LSAgICAgICAgYnl0ZWNvZGUuYXJnYywgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzLCBn
ZXRQcmVkaWN0aW9uKCkpOworICAgIHJldHVybiBoYW5kbGVDYWxsKGJ5dGVjb2RlLm1fZHN0LCBv
cCwga2luZCwgcGMtPnNpemUoKSwgY2FsbFRhcmdldCwKKyAgICAgICAgYnl0ZWNvZGUubV9hcmdj
LCByZWdpc3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMsIGdldFByZWRpY3Rpb24oKSk7CiB9CiAK
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnJlZmluZVN0YXRpY2FsbHkoQ2FsbExpbmtTdGF0dXMmIGNh
bGxMaW5rU3RhdHVzLCBOb2RlKiBjYWxsVGFyZ2V0KQpAQCAtMTI4NywxMiArMTI4NywxMiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsT3A+CiBCeXRlQ29kZVBhcnNlcjo6VGVybWluYWxpdHkgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBwYywgTm9k
ZVR5cGUgb3AsIENhbGxNb2RlIGNhbGxNb2RlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8Q2FsbE9wPigpOwotICAgIGludCBmaXJzdEZyZWVSZWcgPSBieXRlY29kZS5maXJzdEZyZWUu
b2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0ID0gYnl0ZWNvZGUuZmlyc3RWYXJB
cmc7CisgICAgaW50IGZpcnN0RnJlZVJlZyA9IGJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNldCgp
OworICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmc7CiAg
ICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAg
ICAKLSAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KGJ5dGVjb2RlLmNhbGxlZSk7CisgICAgTm9k
ZSogY2FsbFRhcmdldCA9IGdldChieXRlY29kZS5tX2NhbGxlZSk7CiAgICAgCiAgICAgQ2FsbExp
bmtTdGF0dXMgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdp
bigpLApAQCAtMTMwNCw4ICsxMzA0LDggQEAgQnl0ZUNvZGVQYXJzZXI6OlRlcm1pbmFsaXR5IEJ5
dGVDb2RlUGFycwogICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CiAgICAg
ICAgIGFkZFRvR3JhcGgoRmlsdGVyQ2FsbExpbmtTdGF0dXMsIE9wSW5mbyhtX2dyYXBoLm1fcGxh
bi5yZWNvcmRlZFN0YXR1c2VzKCkuYWRkQ2FsbExpbmtTdGF0dXMoY3VycmVudENvZGVPcmlnaW4o
KSwgY2FsbExpbmtTdGF0dXMpKSwgY2FsbFRhcmdldCk7CiAKLSAgICAgICAgaWYgKGhhbmRsZVZh
cmFyZ3NJbmxpbmluZyhjYWxsVGFyZ2V0LCBieXRlY29kZS5kc3QsCi0gICAgICAgICAgICBjYWxs
TGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBieXRlY29kZS50aGlzVmFsdWUsIGJ5dGVjb2RlLmFy
Z3VtZW50cywKKyAgICAgICAgaWYgKGhhbmRsZVZhcmFyZ3NJbmxpbmluZyhjYWxsVGFyZ2V0LCBi
eXRlY29kZS5tX2RzdCwKKyAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzLCBmaXJzdEZyZWVSZWcs
IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLCBieXRlY29kZS5tX2FyZ3VtZW50cywKICAgICAgICAgICAg
IGZpcnN0VmFyQXJnT2Zmc2V0LCBvcCwKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZTo6dmFy
YXJnc0tpbmRGb3IoY2FsbE1vZGUpKSkgewogICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSkpCkBAIC0xMzE3LDEwICsxMzE3LDEwIEBAIEJ5dGVDb2RlUGFyc2Vy
OjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnMKICAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBt
X2dyYXBoLm1fY2FsbFZhcmFyZ3NEYXRhLmFkZCgpOwogICAgIGRhdGEtPmZpcnN0VmFyQXJnT2Zm
c2V0ID0gZmlyc3RWYXJBcmdPZmZzZXQ7CiAgICAgCi0gICAgTm9kZSogdGhpc0NoaWxkID0gZ2V0
KGJ5dGVjb2RlLnRoaXNWYWx1ZSk7CisgICAgTm9kZSogdGhpc0NoaWxkID0gZ2V0KGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlKTsKICAgICBOb2RlKiBhcmd1bWVudHNDaGlsZCA9IG51bGxwdHI7CiAgICAg
aWYgKG9wICE9IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgIGFyZ3VtZW50c0NoaWxk
ID0gZ2V0KGJ5dGVjb2RlLmFyZ3VtZW50cyk7CisgICAgICAgIGFyZ3VtZW50c0NoaWxkID0gZ2V0
KGJ5dGVjb2RlLm1fYXJndW1lbnRzKTsKIAogICAgIGlmIChvcCA9PSBUYWlsQ2FsbFZhcmFyZ3Mg
fHwgb3AgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykgewogICAgICAgICBpZiAoYWxsSW5saW5l
RnJhbWVzQXJlVGFpbENhbGxzKCkpIHsKQEAgLTEzMzEsOCArMTMzMSw4IEBAIEJ5dGVDb2RlUGFy
c2VyOjpUZXJtaW5hbGl0eSBCeXRlQ29kZVBhcnMKICAgICB9CiAKICAgICBOb2RlKiBjYWxsID0g
YWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJlZGljdGlvbiksIGNhbGxUYXJn
ZXQsIHRoaXNDaGlsZCwgYXJndW1lbnRzQ2hpbGQpOwotICAgIGlmIChieXRlY29kZS5kc3QuaXNW
YWxpZCgpKQotICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBjYWxsKTsKKyAgICBpZiAoYnl0ZWNv
ZGUubV9kc3QuaXNWYWxpZCgpKQorICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGNhbGwpOwog
ICAgIHJldHVybiBOb25UZXJtaW5hbDsKIH0KIApAQCAtNDU3OSw4ICs0NTc5LDggQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKGNvbnN0IAogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgCi0gICAgTm9kZSogYmFzZSA9IGdldChieXRlY29k
ZS5iYXNlKTsKLSAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUucHJvcGVydHldOworICAgIE5vZGUqIGJhc2Ug
PSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUubV9wcm9wZXJ0eV07
CiAgICAgCiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtpZGVudGlmaWVyTnVtYmVyXTsKICAgICBHZXRCeUlkU3RhdHVzIGdldEJ5SWRTdGF0dXMgPSBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKApAQCAtNDU5Niw3ICs0NTk2LDcgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VHZXRCeUlkKGNvbnN0IAogICAgICAgICB0eXBlID0gQWNjZXNzVHlw
ZTo6R2V0RGlyZWN0OwogCiAgICAgaGFuZGxlR2V0QnlJZCgKLSAgICAgICAgYnl0ZWNvZGUuZHN0
LCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeUlkU3RhdHVzLCB0eXBl
LCBvcGNvZGVMZW5ndGgpOworICAgICAgICBieXRlY29kZS5tX2RzdCwgcHJlZGljdGlvbiwgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgZ2V0QnlJZFN0YXR1cywgdHlwZSwgb3Bjb2RlTGVuZ3RoKTsK
IAogfQogCkBAIC00NzMzLDggKzQ3MzMsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUaGlzKCk7CiAgICAgICAg
ICAgICBpZiAob3AxLT5vcCgpICE9IFRvVGhpcykgewogICAgICAgICAgICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKS5tZXRhZGF0YShjb2Rl
QmxvY2spOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogY2FjaGVkU3RydWN0dXJlID0gbWV0
YWRhdGEuY2FjaGVkU3RydWN0dXJlLmdldCgpOwotICAgICAgICAgICAgICAgIGlmIChtZXRhZGF0
YS50b1RoaXNTdGF0dXMgIT0gVG9UaGlzT0sKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGNh
Y2hlZFN0cnVjdHVyZSA9IG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlLmdldCgpOworICAgICAg
ICAgICAgICAgIGlmIChtZXRhZGF0YS5tX3RvVGhpc1N0YXR1cyAhPSBUb1RoaXNPSwogICAgICAg
ICAgICAgICAgICAgICB8fCAhY2FjaGVkU3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgIHx8
IGNhY2hlZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLnRvVGhpcyAhPSBKU09i
amVjdDo6aW5mbygpLT5tZXRob2RUYWJsZS50b1RoaXMKICAgICAgICAgICAgICAgICAgICAgfHwg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1
cnJlbnRJbmRleCkKQEAgLTQ3NTMsMTEgKzQ3NTMsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRl
VGhpcz4oKTsKLSAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIo
Ynl0ZWNvZGUuY2FsbGVlKSk7CisgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY2FsbGVlKSk7CiAKICAgICAgICAgICAgIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uID0gY2FsbGVlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTRnVuY3Rpb24qPigqbV92
bSk7CiAgICAgICAgICAgICBpZiAoIWZ1bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxs
KiBjYWNoZWRGdW5jdGlvbiA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykuY2FjaGVkQ2Fs
bGVlLnVudmFsaWRhdGVkR2V0KCk7CisgICAgICAgICAgICAgICAgSlNDZWxsKiBjYWNoZWRGdW5j
dGlvbiA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9jYWNoZWRDYWxsZWUudW52YWxp
ZGF0ZWRHZXQoKTsKICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkRnVuY3Rpb24KICAgICAgICAg
ICAgICAgICAgICAgJiYgY2FjaGVkRnVuY3Rpb24gIT0gSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxs
ZWVPYmplY3RzKCkKICAgICAgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENlbGwpKSB7CkBAIC00
NzkzLDY2ICs0NzkzLDY2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSW5saW5lT2Zmc2V0
KGtub3duUG9seVByb3RvT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgb2JqZWN0LCBvYmplY3QsIHdl
YWtKU0NvbnN0YW50KHByb3RvdHlwZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
LmRzdCksIG9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdCksIG9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWxyZWFkeUVtaXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKCFhbHJlYWR5RW1pdHRlZCkgewotICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZHN0KSwKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChDcmVhdGVUaGlzLCBPcEluZm8oYnl0ZWNvZGUuaW5saW5lQ2FwYWNpdHkpLCBjYWxsZWUp
KTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0KSwK
KyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDcmVhdGVUaGlzLCBPcEluZm8oYnl0ZWNv
ZGUubV9pbmxpbmVDYXBhY2l0eSksIGNhbGxlZSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY3JlYXRlX3RoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9uZXdfb2JqZWN0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5k
c3QsCisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsCiAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChOZXdPYmplY3QsCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLnJl
Z2lzdGVyU3RydWN0dXJlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykub2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuc3RydWN0dXJlKCkpKSkpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8o
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1f
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCkpKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfbmV3X29iamVjdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIG9wX25ld19hcnJheTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKLSAgICAgICAgICAgIGludCBzdGFydE9w
ZXJhbmQgPSBieXRlY29kZS5hcmd2Lm9mZnNldCgpOwotICAgICAgICAgICAgaW50IG51bU9wZXJh
bmRzID0gYnl0ZWNvZGUuYXJnYzsKLSAgICAgICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUm
IHByb2ZpbGUgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLmFycmF5QWxsb2NhdGlvblBy
b2ZpbGU7CisgICAgICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0gYnl0ZWNvZGUubV9hcmd2Lm9m
ZnNldCgpOworICAgICAgICAgICAgaW50IG51bU9wZXJhbmRzID0gYnl0ZWNvZGUubV9hcmdjOwor
ICAgICAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jaykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlOwogICAgICAgICAgICAg
Zm9yIChpbnQgb3BlcmFuZElkeCA9IHN0YXJ0T3BlcmFuZDsgb3BlcmFuZElkeCA+IHN0YXJ0T3Bl
cmFuZCAtIG51bU9wZXJhbmRzOyAtLW9wZXJhbmRJZHgpCiAgICAgICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kSWR4KSkpOwogICAgICAgICAgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoSGludCA9IHN0ZDo6bWF4PHVuc2lnbmVkPihwcm9maWxlLnZl
Y3Rvckxlbmd0aEhpbnQoKSwgbnVtT3BlcmFuZHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
LmRzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIE5ld0FycmF5LCBPcEluZm8ocHJvZmlsZS5z
ZWxlY3RJbmRleGluZ1R5cGUoKSksIE9wSW5mbyh2ZWN0b3JMZW5ndGhIaW50KSkpOworICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgTmV3QXJy
YXksIE9wSW5mbyhwcm9maWxlLnNlbGVjdEluZGV4aW5nVHlwZSgpKSwgT3BJbmZvKHZlY3Rvckxl
bmd0aEhpbnQpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfYXJyYXkpOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zcHJlYWQ6IHsKICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXlX
aXRoU3ByZWFkPigpOwotICAgICAgICAgICAgaW50IHN0YXJ0T3BlcmFuZCA9IGJ5dGVjb2RlLmFy
Z3Yub2Zmc2V0KCk7Ci0gICAgICAgICAgICBpbnQgbnVtT3BlcmFuZHMgPSBieXRlY29kZS5hcmdj
OwotICAgICAgICAgICAgY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0b3IgPSBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCktPmJpdFZlY3RvcihieXRl
Y29kZS5iaXRWZWN0b3IpOworICAgICAgICAgICAgaW50IHN0YXJ0T3BlcmFuZCA9IGJ5dGVjb2Rl
Lm1fYXJndi5vZmZzZXQoKTsKKyAgICAgICAgICAgIGludCBudW1PcGVyYW5kcyA9IGJ5dGVjb2Rl
Lm1fYXJnYzsKKyAgICAgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5iaXRWZWN0
b3IoYnl0ZWNvZGUubV9iaXRWZWN0b3IpOwogICAgICAgICAgICAgZm9yIChpbnQgb3BlcmFuZElk
eCA9IHN0YXJ0T3BlcmFuZDsgb3BlcmFuZElkeCA+IHN0YXJ0T3BlcmFuZCAtIG51bU9wZXJhbmRz
OyAtLW9wZXJhbmRJZHgpCiAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kSWR4KSkpOwogCiAgICAgICAgICAgICBCaXRWZWN0b3IqIGNvcHkg
PSBtX2dyYXBoLm1fYml0VmVjdG9ycy5hZGQoYml0VmVjdG9yKTsKICAgICAgICAgICAgIEFTU0VS
VCgqY29weSA9PSBiaXRWZWN0b3IpOwogCi0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LAor
ICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LAogICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBOZXdBcnJheVdpdGhTcHJlYWQsIE9wSW5mbyhjb3B5KSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X2FycmF5X3dpdGhfc3ByZWFkKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3Bfc3ByZWFkOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNwcmVhZD4oKTsKLSAgICAgICAgICAgIHNldChi
eXRlY29kZS5kc3QsCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChTcHJlYWQsIGdldChieXRl
Y29kZS5hcmd1bWVudCkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwKKyAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFNwcmVhZCwgZ2V0KGJ5dGVjb2RlLm1fYXJndW1lbnQpKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zcHJlYWQpOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOiB7CiAgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld0FycmF5V2l0aFNp
emU+KCk7Ci0gICAgICAgICAgICBBcnJheUFsbG9jYXRpb25Qcm9maWxlJiBwcm9maWxlID0gYnl0
ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5hcnJheUFsbG9jYXRpb25Qcm9maWxlOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChOZXdBcnJheVdpdGhTaXplLCBPcElu
Zm8ocHJvZmlsZS5zZWxlY3RJbmRleGluZ1R5cGUoKSksIGdldChieXRlY29kZS5sZW5ndGgpKSk7
CisgICAgICAgICAgICBBcnJheUFsbG9jYXRpb25Qcm9maWxlJiBwcm9maWxlID0gYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZv
KHByb2ZpbGUuc2VsZWN0SW5kZXhpbmdUeXBlKCkpLCBnZXQoYnl0ZWNvZGUubV9sZW5ndGgpKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfYXJyYXlfd2l0aF9zaXplKTsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC00ODYxLDIyICs0ODYxLDIyIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHks
IHdlIGNhbid0IGFsbG9jYXRlIGEgbmV3IEpTSW1tdXRhYmxlQnV0dGVyZmx5IGlmIHRoZSBwcm9m
aWxlIHRlbGxzIHVzIG5ldyBpbmZvcm1hdGlvbiBiZWNhdXNlIHdlCiAgICAgICAgICAgICAvLyBj
YW5ub3QgYWxsb2NhdGUgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzLgogICAgICAgICAgICAgV1RG
Ojpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gZ2V0
KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5pbW11dGFibGVCdXR0ZXJmbHkpKS0+Y29uc3RhbnQo
KTsKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5KSktPmNvbnN0YW50KCk7CiAgICAgICAgICAg
ICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICAgICAgICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5
KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBmcm96ZW4tPmNhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkq
PigpOwogICAgICAgICAgICAgTmV3QXJyYXlCdWZmZXJEYXRhIGRhdGEgeyB9OwogICAgICAgICAg
ICAgZGF0YS5pbmRleGluZ01vZGUgPSBpbW11dGFibGVCdXR0ZXJmbHktPmluZGV4aW5nTW9kZSgp
OwogICAgICAgICAgICAgZGF0YS52ZWN0b3JMZW5ndGhIaW50ID0gaW1tdXRhYmxlQnV0dGVyZmx5
LT50b0J1dHRlcmZseSgpLT52ZWN0b3JMZW5ndGgoKTsKIAotICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5kc3QpLCBhZGRUb0dyYXBoKE5ld0FycmF5QnVmZmVyLCBPcElu
Zm8oZnJvemVuKSwgT3BJbmZvKGRhdGEuYXNRdWFkV29yZCkpKTsKKyAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QpLCBhZGRUb0dyYXBoKE5ld0FycmF5QnVmZmVy
LCBPcEluZm8oZnJvemVuKSwgT3BJbmZvKGRhdGEuYXNRdWFkV29yZCkpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX25ld19hcnJheV9idWZmZXIpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld1JlZ2V4cD4oKTsKLSAgICAgICAgICAg
IEFTU0VSVChieXRlY29kZS5yZWdleHAuaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgIEZyb3pl
blZhbHVlKiBmcm96ZW5SZWdFeHAgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUucmVnZXhwLm9mZnNldCgpKSk7
Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKE5ld1JlZ2V4cCwgT3BJ
bmZvKGZyb3plblJlZ0V4cCksIGpzQ29uc3RhbnQoanNOdW1iZXIoMCkpKSk7CisgICAgICAgICAg
ICBBU1NFUlQoYnl0ZWNvZGUubV9yZWdleHAuaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIEZy
b3plblZhbHVlKiBmcm96ZW5SZWdFeHAgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9yZWdleHAub2Zmc2V0
KCkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOZXdSZWdl
eHAsIE9wSW5mbyhmcm96ZW5SZWdFeHApLCBqc0NvbnN0YW50KGpzTnVtYmVyKDApKSkpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X3JlZ2V4cCk7CiAgICAgICAgIH0KIApAQCAtNDg4
NywyNCArNDg4NywyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzTGVuZ3RoID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CiAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSByZXN0TGVuZ3RoOwotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVu
dHNMZW5ndGggPD0gYnl0ZWNvZGUubnVtUGFyYW1ldGVyc1RvU2tpcCkKKyAgICAgICAgICAgICAg
ICBpZiAoYXJndW1lbnRzTGVuZ3RoIDw9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcCkK
ICAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aCA9IGpzTnVtYmVyKDApOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVzdExlbmd0aCA9IGpzTnVtYmVyKGFy
Z3VtZW50c0xlbmd0aCAtIGJ5dGVjb2RlLm51bVBhcmFtZXRlcnNUb1NraXApOworICAgICAgICAg
ICAgICAgICAgICByZXN0TGVuZ3RoID0ganNOdW1iZXIoYXJndW1lbnRzTGVuZ3RoIC0gYnl0ZWNv
ZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwKTsKIAogICAgICAgICAgICAgICAgIGxlbmd0aCA9IGpz
Q29uc3RhbnQocmVzdExlbmd0aCk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBsZW5ndGggPSBhZGRUb0dyYXBoKEdldFJlc3RMZW5ndGgsIE9wSW5mbyhieXRlY29kZS5udW1Q
YXJhbWV0ZXJzVG9Ta2lwKSk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBsZW5ndGgp
OworICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFkZFRvR3JhcGgoR2V0UmVzdExlbmd0aCwgT3BJ
bmZvKGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVyc1RvU2tpcCkpOworICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLm1fZHN0LCBsZW5ndGgpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Jl
c3RfbGVuZ3RoKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6IHsK
ICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlUmVzdD4oKTsKICAgICAgICAgICAgIG5vdGljZUFyZ3VtZW50c1VzZSgpOwotICAgICAgICAg
ICAgTm9kZSogYXJyYXlMZW5ndGggPSBnZXQoYnl0ZWNvZGUuYXJyYXlTaXplKTsKLSAgICAgICAg
ICAgIHNldChieXRlY29kZS5kc3QsCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDcmVhdGVS
ZXN0LCBPcEluZm8oYnl0ZWNvZGUubnVtUGFyYW1ldGVyc1RvU2tpcCksIGFycmF5TGVuZ3RoKSk7
CisgICAgICAgICAgICBOb2RlKiBhcnJheUxlbmd0aCA9IGdldChieXRlY29kZS5tX2FycmF5U2l6
ZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChDcmVhdGVSZXN0LCBPcEluZm8oYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lw
KSwgYXJyYXlMZW5ndGgpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9yZXN0
KTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC00OTEyLDc0ICs0OTEyLDc0IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2Jp
dG5vdDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BCaXRub3Q+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUub3Bl
cmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0
Tm90LCBvcDEpKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX29wZXJh
bmQpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0
Tm90LCBvcDEpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2JpdG5vdCk7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIG9wX2JpdGFuZDogewogICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BCaXRhbmQ+KCk7CiAgICAgICAgICAgICBTcGVj
dWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwotICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQo
Ynl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xo
cyk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAg
ICAgICAgaWYgKG9wMS0+aGFzTnVtYmVyT3JBbnlJbnRSZXN1bHQoKSAmJiBvcDItPmhhc051bWJl
ck9yQW55SW50UmVzdWx0KCkpCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRk
VG9HcmFwaChBcml0aEJpdEFuZCwgb3AxLCBvcDIpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoQXJpdGhCaXRBbmQsIG9wMSwgb3AyKSk7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChW
YWx1ZUJpdEFuZCwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgb3AxLCBvcDIpKTsKKyAg
ICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoVmFsdWVCaXRBbmQs
IE9wSW5mbygpLCBPcEluZm8ocHJlZGljdGlvbiksIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9iaXRhbmQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9iaXRv
cjogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BCaXRvcj4oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQ
cmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsK
LSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAgICAg
Tm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9
IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBpZiAob3AxLT5oYXNOdW1iZXJPckFu
eUludFJlc3VsdCgpICYmIG9wMi0+aGFzTnVtYmVyT3JBbnlJbnRSZXN1bHQoKSkKLSAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0T3IsIG9wMSwgb3Ay
KSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEFyaXRo
Qml0T3IsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChWYWx1ZUJpdE9yLCBPcEluZm8oKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBvcDEsIG9wMikpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChWYWx1ZUJpdE9yLCBPcEluZm8oKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBv
cDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0b3IpOwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQml0eG9yPigpOwogICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIE5vZGUq
IG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5
dGVjb2RlLnJocyk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMp
OworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAg
ICAgIGlmIChvcDEtPmhhc051bWJlck9yQW55SW50UmVzdWx0KCkgJiYgb3AyLT5oYXNOdW1iZXJP
ckFueUludFJlc3VsdCgpKQotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRv
R3JhcGgoQXJpdGhCaXRYb3IsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKEFyaXRoQml0WG9yLCBvcDEsIG9wMikpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoVmFs
dWVCaXRYb3IsIE9wSW5mbygpLCBPcEluZm8ocHJlZGljdGlvbiksIG9wMSwgb3AyKSk7Ci0gICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9iaXRvcik7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKFZhbHVlQml0WG9yLCBPcEluZm8oKSwgT3BJbmZvKHByZWRp
Y3Rpb24pLCBvcDEsIG9wMikpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfYml0eG9yKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CiAgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJzaGlmdD4oKTsKLSAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGJ5dGVjb2RlLnJocyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRU
b0dyYXBoKEJpdFJTaGlmdCwgb3AxLCBvcDIpKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChieXRlY29kZS5tX2xocyk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUu
bV9yaHMpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEJpdFJT
aGlmdCwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3JzaGlmdCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2xzaGlmdDogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMc2hpZnQ+KCk7Ci0gICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9
IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9H
cmFwaChCaXRMU2hpZnQsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Ynl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1f
cmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChCaXRMU2hp
ZnQsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9sc2hpZnQpOwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBvcF91cnNoaWZ0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVyc2hpZnQ+KCk7Ci0gICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9
IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9H
cmFwaChCaXRVUlNoaWZ0LCBvcDEsIG9wMikpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5t
X3Jocyk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoQml0VVJT
aGlmdCwgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Vyc2hpZnQpOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF91bnNpZ25lZDogewogICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25l
ZD4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgo
VUludDMyVG9OdW1iZXIsIGdldChieXRlY29kZS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgIHNl
dChieXRlY29kZS5tX2RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChVSW50MzJUb051bWJlciwgZ2V0
KGJ5dGVjb2RlLm1fb3BlcmFuZCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF91bnNp
Z25lZCk7CiAgICAgICAgIH0KIApAQCAtNDk4NywxNSArNDk4NywxNSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9pbmM6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigp
OwotICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoYnl0ZWNvZGUuc3JjRHN0KTsKLSAgICAgICAg
ICAgIHNldChieXRlY29kZS5zcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9w
LCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CisgICAg
ICAgICAgICBOb2RlKiBvcCA9IGdldChieXRlY29kZS5tX3NyY0RzdCk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9zcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBh
ZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9pbmMpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9k
ZWM6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRGVjPigpOwotICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoYnl0ZWNvZGUuc3JjRHN0KTsK
LSAgICAgICAgICAgIHNldChieXRlY29kZS5zcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJp
dGhTdWIsIG9wLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkp
KSk7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChieXRlY29kZS5tX3NyY0RzdCk7CisgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9zcmNEc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhT
dWIsIG9wLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kZWMpOwogICAgICAgICB9CiAKQEAgLTUwMDMs
NTMgKzUwMDMsNTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
CiAgICAgICAgIGNhc2Ugb3BfYWRkOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEFkZD4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJo
cyk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAg
ICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIGlmIChv
cDEtPmhhc051bWJlclJlc3VsdCgpICYmIG9wMi0+aGFzTnVtYmVyUmVzdWx0KCkpCi0gICAgICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwg
b3AxLCBvcDIpKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKFZhbHVl
QWRkLCBvcDEsIG9wMikpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIG1h
a2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVBZGQsIG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfYWRkKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3Bfc3ViOiB7CiAg
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN1Yj4o
KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAg
ICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAgICBOb2RlKiBvcDEg
PSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLm1fcmhzKTsKICAgICAgICAgICAgIGlmIChvcDEtPmhhc051bWJlclJlc3VsdCgpICYmIG9w
Mi0+aGFzTnVtYmVyUmVzdWx0KCkpCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwg
bWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcDEs
IG9wMikpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
ZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKFZhbHVlU3ViLCBvcDEsIG9wMikpKTsKKyAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVTdWIs
IG9wMSwgb3AyKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfc3ViKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3BfbmVnYXRlOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKTsKLSAgICAgICAgICAgIE5vZGUq
IG9wMSA9IGdldChieXRlY29kZS5vcGVyYW5kKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdl
dChieXRlY29kZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgaWYgKG9wMS0+aGFzTnVtYmVyUmVz
dWx0KCkpCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9H
cmFwaChBcml0aE5lZ2F0ZSwgb3AxKSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE5lZ2F0ZSwgb3AxKSkpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VTYWZlKGFkZFRv
R3JhcGgoVmFsdWVOZWdhdGUsIG9wMSkpKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVOZWdhdGUsIG9wMSkpKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX25lZ2F0ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X211bDogewogICAgICAgICAgICAgLy8gTXVsdGlwbHkgcmVxdWlyZXMgdGhhdCB0aGUgaW5wdXRz
IGFyZSBub3QgdHJ1bmNhdGVkLCB1bmZvcnR1bmF0ZWx5LgogICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCk7Ci0gICAgICAgICAgICBOb2Rl
KiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChi
eXRlY29kZS5yaHMpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAgICAgICAg
ICAgICBpZiAob3AxLT5oYXNOdW1iZXJSZXN1bHQoKSAmJiBvcDItPmhhc051bWJlclJlc3VsdCgp
KQotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VTYWZlKGFkZFRvR3JhcGgo
QXJpdGhNdWwsIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE11bCwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9H
cmFwaChWYWx1ZU11bCwgb3AxLCBvcDIpKSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKFZhbHVlTXVsLCBvcDEsIG9wMikpKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX211bCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X21vZDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BNb2Q+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsK
LSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLmRzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIp
KSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAg
ICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aE1vZCwgb3AxLCBvcDIpKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9tb2QpOwogICAgICAgICB9CiAKQEAgLTUwNTcs
MjAgKzUwNTcsMjAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgLy8gRklYTUU6IEFyaXRoUG93KFVudHlwZWQsIFVudHlwZWQpIHNob3VsZCBi
ZSBzdXBwb3J0ZWQgYXMgdGhlIHNhbWUgdG8gQXJpdGhNdWwsIEFyaXRoU3ViIGV0Yy4KICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAwMTIK
ICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUG93
PigpOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAg
ICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKLSAgICAgICAgICAgIHNldChieXRl
Y29kZS5kc3QsIGFkZFRvR3JhcGgoQXJpdGhQb3csIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRk
VG9HcmFwaChBcml0aFBvdywgb3AxLCBvcDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Bvdyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2RpdjogewogICAgICAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEaXY+KCk7Ci0gICAgICAg
ICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9w
MiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVj
b2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7
CiAgICAgICAgICAgICBpZiAob3AxLT5oYXNOdW1iZXJSZXN1bHQoKSAmJiBvcDItPmhhc051bWJl
clJlc3VsdCgpKQotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1ha2VEaXZTYWZl
KGFkZFRvR3JhcGgoQXJpdGhEaXYsIG9wMSwgb3AyKSkpOworICAgICAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgbWFrZURpdlNhZmUoYWRkVG9HcmFwaChBcml0aERpdiwgb3AxLCBvcDIp
KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwg
bWFrZURpdlNhZmUoYWRkVG9HcmFwaChWYWx1ZURpdiwgb3AxLCBvcDIpKSk7CisgICAgICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBtYWtlRGl2U2FmZShhZGRUb0dyYXBoKFZhbHVlRGl2
LCBvcDEsIG9wMikpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Rpdik7CiAgICAgICAg
IH0KIApAQCAtNTA4NSwxNCArNTA4NSwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9tb3Y6IHsKICAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgICAgICAgICAg
Tm9kZSogb3AgPSBnZXQoYnl0ZWNvZGUuc3JjKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5k
c3QsIG9wKTsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KGJ5dGVjb2RlLm1fc3JjKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfbW92KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY2hlY2tfdGR6OiB7CiAg
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENoZWNr
VGR6PigpOwotICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja05vdEVtcHR5LCBnZXQoYnl0ZWNv
ZGUudGFyZ2V0KSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrTm90RW1wdHksIGdldChi
eXRlY29kZS5tX3RhcmdldCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2hlY2tfdGR6
KTsKICAgICAgICAgfQogCkBAIC01MTAwLDE4ICs1MTAwLDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7CiAgICAgICAgICAg
ICBKU0Z1bmN0aW9uKiBkZWZhdWx0SGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbiA9IG1faW5saW5l
U3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3IoY3VycmVudENvZGVPcmlnaW4o
KSktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCk7CiAKLSAgICAgICAg
ICAgIE5vZGUqIGNvbnN0cnVjdG9yID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5jb25z
dHJ1Y3RvcikpOwotICAgICAgICAgICAgTm9kZSogaGFzSW5zdGFuY2VWYWx1ZSA9IGdldChWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZSkpOworICAgICAgICAgICAgTm9k
ZSogY29uc3RydWN0b3IgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uc3RydWN0
b3IpKTsKKyAgICAgICAgICAgIE5vZGUqIGhhc0luc3RhbmNlVmFsdWUgPSBnZXQoVmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZSkpOwogCi0gICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCksIGFkZFRvR3JhcGgoT3ZlcnJpZGVzSGFzSW5z
dGFuY2UsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShkZWZhdWx0SGFzSW5zdGFuY2VTeW1ib2xGdW5j
dGlvbikpLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkpOworICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCksIGFkZFRvR3JhcGgoT3ZlcnJpZGVzSGFz
SW5zdGFuY2UsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShkZWZhdWx0SGFzSW5zdGFuY2VTeW1ib2xG
dW5jdGlvbikpLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkpOwogICAgICAgICAgICAg
TkVYVF9PUENPREUob3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX2lkZW50aXR5X3dpdGhfcHJvZmlsZTogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJZGVudGl0eVdpdGhQcm9maWxlPigp
OwotICAgICAgICAgICAgTm9kZSogc3JjRHN0ID0gZ2V0KGJ5dGVjb2RlLnNyY0RzdCk7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IHN0YXRpY19jYXN0PFNwZWN1bGF0
ZWRUeXBlPihieXRlY29kZS50b3BQcm9maWxlKSA8PCAzMiB8IHN0YXRpY19jYXN0PFNwZWN1bGF0
ZWRUeXBlPihieXRlY29kZS5ib3R0b21Qcm9maWxlKTsKLSAgICAgICAgICAgIHNldChieXRlY29k
ZS5zcmNEc3QsIGFkZFRvR3JhcGgoSWRlbnRpdHlXaXRoUHJvZmlsZSwgT3BJbmZvKHNwZWN1bGF0
aW9uKSwgc3JjRHN0KSk7CisgICAgICAgICAgICBOb2RlKiBzcmNEc3QgPSBnZXQoYnl0ZWNvZGUu
bV9zcmNEc3QpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBzdGF0
aWNfY2FzdDxTcGVjdWxhdGVkVHlwZT4oYnl0ZWNvZGUubV90b3BQcm9maWxlKSA8PCAzMiB8IHN0
YXRpY19jYXN0PFNwZWN1bGF0ZWRUeXBlPihieXRlY29kZS5tX2JvdHRvbVByb2ZpbGUpOworICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fc3JjRHN0LCBhZGRUb0dyYXBoKElkZW50aXR5V2l0aFBy
b2ZpbGUsIE9wSW5mbyhzcGVjdWxhdGlvbiksIHNyY0RzdCkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKTsKICAgICAgICAgfQogCkBAIC01MTIyLDgg
KzUxMjIsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2lubGluZVN0
YWNrVG9wLT5tX2Jhc2VsaW5lTWFwLAogICAgICAgICAgICAgICAgIG1fY3VycmVudEluZGV4KTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUudmFs
dWUpOwotICAgICAgICAgICAgTm9kZSogcHJvdG90eXBlID0gZ2V0KGJ5dGVjb2RlLnByb3RvdHlw
ZSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKKyAg
ICAgICAgICAgIE5vZGUqIHByb3RvdHlwZSA9IGdldChieXRlY29kZS5tX3Byb3RvdHlwZSk7CiAK
ICAgICAgICAgICAgIC8vIE9ubHkgaW5saW5lIGl0IGlmIGl0J3MgU2ltcGxlIHdpdGggYSBjb21t
b25Qcm90b3R5cGU7IGJvdHRvbS90b3Agb3IgdmFyaWFibGUKICAgICAgICAgICAgIC8vIHByb3Rv
dHlwZXMgYm90aCBnZXQgaGFuZGxlZCBieSB0aGUgSUMuIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIGJv
dHRvbSAodW5wcm9maWxlZCkKQEAgLTUxNTEsMTAyICs1MTUxLDEwMiBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgaWYgKGFsbE9LKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG1hdGNoID0gYWRk
VG9HcmFwaChNYXRjaFN0cnVjdHVyZSwgT3BJbmZvKGRhdGEpLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIG1hdGNoKTsKKyAgICAgICAgICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fZHN0LCBtYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2luc3RhbmNlb2YpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChJbnN0
YW5jZU9mLCB2YWx1ZSwgcHJvdG90eXBlKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoSW5zdGFuY2VPZiwgdmFsdWUsIHByb3RvdHlwZSkpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfaW5zdGFuY2VvZik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX2luc3RhbmNlb2ZfY3VzdG9tOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0gICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS52YWx1ZSk7Ci0gICAgICAgICAgICBOb2RlKiBjb25z
dHJ1Y3RvciA9IGdldChieXRlY29kZS5jb25zdHJ1Y3Rvcik7Ci0gICAgICAgICAgICBOb2RlKiBo
YXNJbnN0YW5jZVZhbHVlID0gZ2V0KGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUpOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChJbnN0YW5jZU9mQ3VzdG9tLCB2YWx1
ZSwgY29uc3RydWN0b3IsIGhhc0luc3RhbmNlVmFsdWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOworICAgICAgICAgICAgTm9kZSogY29uc3RydWN0
b3IgPSBnZXQoYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICBOb2RlKiBoYXNJ
bnN0YW5jZVZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5zdGFuY2VPZkN1c3RvbSwgdmFs
dWUsIGNvbnN0cnVjdG9yLCBoYXNJbnN0YW5jZVZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9pbnN0YW5jZW9mX2N1c3RvbSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9p
c19lbXB0eTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJc0VtcHR5PigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNv
ZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElz
RW1wdHksIHZhbHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5t
X29wZXJhbmQpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKElz
RW1wdHksIHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19lbXB0eSk7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+KCk7Ci0g
ICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoSXNVbmRlZmluZWQsIHZhbHVlKSk7Cisg
ICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKElzVW5kZWZpbmVkLCB2YWx1ZSkp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfdW5kZWZpbmVkKTsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZF9vcl9udWxsOiB7CiAgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigp
OwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzVW5kZWZpbmVkT3JOdWxsLCB2
YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5k
KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc1VuZGVmaW5l
ZE9yTnVsbCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX3VuZGVmaW5l
ZF9vcl9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjogewog
ICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jv
b2xlYW4+KCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoSXNCb29sZWFuLCB2
YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5k
KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc0Jvb2xlYW4s
IHZhbHVlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19ib29sZWFuKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfbnVtYmVyOiB7CiAgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzTnVtYmVyPigpOwotICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzTnVtYmVyLCB2YWx1ZSkpOworICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJc051bWJlciwgdmFsdWUpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2lzX251bWJlcik7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2lzX2NlbGxfd2l0aF90eXBlOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcElzQ2VsbFdpdGhUeXBlPigpOwotICAgICAgICAgICAgTm9kZSog
dmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
ZHN0LCBhZGRUb0dyYXBoKElzQ2VsbFdpdGhUeXBlLCBPcEluZm8oYnl0ZWNvZGUudHlwZSksIHZh
bHVlKSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQp
OworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKElzQ2VsbFdpdGhU
eXBlLCBPcEluZm8oYnl0ZWNvZGUubV90eXBlKSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2lzX2NlbGxfd2l0aF90eXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfaXNfb2JqZWN0OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzT2JqZWN0PigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQo
Ynl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dy
YXBoKElzT2JqZWN0LCB2YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0
ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9H
cmFwaChJc09iamVjdCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX29i
amVjdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2lzX29iamVjdF9vcl9udWxsOiB7
CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
T2JqZWN0T3JOdWxsPigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKElzT2Jq
ZWN0T3JOdWxsLCB2YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNv
ZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFw
aChJc09iamVjdE9yTnVsbCwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lz
X29iamVjdF9vcl9udWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaXNfZnVuY3Rp
b246IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNGdW5jdGlvbj4oKTsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2Rl
Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChJc0Z1
bmN0aW9uLCB2YWx1ZSkpOworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUu
bV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJ
c0Z1bmN0aW9uLCB2YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfZnVuY3Rp
b24pOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9ub3Q6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwotICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7CisgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOworICAgICAgICAgICAgc2V0
KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIHZhbHVlKSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9ub3QpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF90b19wcmltaXRpdmU6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChieXRlY29kZS5zcmMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRz
dCwgYWRkVG9HcmFwaChUb1ByaW1pdGl2ZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGJ5dGVjb2RlLm1fc3JjKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChUb1ByaW1pdGl2ZSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3RvX3ByaW1pdGl2ZSk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIG9wX3N0cmNhdDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTdHJjYXQ+KCk7Ci0gICAgICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0g
Ynl0ZWNvZGUuc3JjLm9mZnNldCgpOwotICAgICAgICAgICAgaW50IG51bU9wZXJhbmRzID0gYnl0
ZWNvZGUuY291bnQ7CisgICAgICAgICAgICBpbnQgc3RhcnRPcGVyYW5kID0gYnl0ZWNvZGUubV9z
cmMub2Zmc2V0KCk7CisgICAgICAgICAgICBpbnQgbnVtT3BlcmFuZHMgPSBieXRlY29kZS5tX2Nv
dW50OwogI2lmIENQVShYODYpCiAgICAgICAgICAgICAvLyBYODYgZG9lc24ndCBoYXZlIGVub3Vn
aCByZWdpc3RlcnMgdG8gY29tcGlsZSBNYWtlUm9wZSB3aXRoIHRocmVlIGFyZ3VtZW50cy4gVGhl
CiAgICAgICAgICAgICAvLyBTdHJDYXQgd2UgZW1pdCBoZXJlIG1heSBiZSB0dXJuZWQgaW50byBh
IE1ha2VSb3BlLiBSYXRoZXIgdGhhbiB0cnkgdG8gYmUgY2xldmVyLApAQCAtNTI3MSwxMDUgKzUy
NzEsMTA1IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgICAgICBBU1NFUlQoaW5kZXhJbk9wZXJhbmRzIDwgbWF4QXJndW1lbnRzKTsKICAgICAg
ICAgICAgICAgICBvcGVyYW5kc1tpbmRleEluT3BlcmFuZHMrK10gPSBnZXQoVmlydHVhbFJlZ2lz
dGVyKHN0YXJ0T3BlcmFuZCAtIG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoU3RyQ2F0LCBvcGVyYW5kc1swXSwgb3Bl
cmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoU3RyQ2F0LCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJd
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdHJjYXQpOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9sZXNzOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExlc3M+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Ynl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlTGVzcywg
b3AxLCBvcDIpKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7
CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOworICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBvcDEsIG9wMikp
OwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbGVzcyk7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX2xlc3NlcTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BMZXNzZXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Ynl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlTGVzc0Vx
LCBvcDEsIG9wMikpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhz
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CisgICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUxlc3NFcSwgb3AxLCBv
cDIpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xlc3NlcSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2dyZWF0ZXI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR3JlYXRlcj4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLnJocyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKENvbXBh
cmVHcmVhdGVyLCBvcDEsIG9wMikpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVj
b2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0
ZXIsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9ncmVhdGVyKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOiB7CiAgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdyZWF0ZXJlcT4oKTsKLSAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBh
ZGRUb0dyYXBoKENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2Rl
KiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0
KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9H
cmFwaChDb21wYXJlR3JlYXRlckVxLCBvcDEsIG9wMikpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfZ3JlYXRlcmVxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfYmVsb3c6IHsK
ICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQmVs
b3c+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAg
ICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlQmVsb3csIG9wMSwgb3AyKSk7CisgICAgICAg
ICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChDb21wYXJlQmVsb3csIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9iZWxvdyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2JlbG93ZXE6
IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
QmVsb3dlcT4oKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwot
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7Ci0gICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKENvbXBhcmVCZWxvd0VxLCBvcDEsIG9wMikpOwor
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAg
IE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUJlbG93RXEsIG9wMSwgb3AyKSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9iZWxvd2VxKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfZXE6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsK
LSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKSk7CisgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9lcSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2VxX251bGw6IHsK
ICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFO
dWxsPigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7
CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX29wZXJhbmQpOwogICAg
ICAgICAgICAgTm9kZSogbnVsbENvbnN0YW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcElu
Zm8obV9jb25zdGFudE51bGwpKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRv
R3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50KSk7CisgICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lcV9udWxsKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3RyaWN0ZXE+KCk7Ci0gICAgICAgICAgICBOb2RlKiBv
cDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRl
Y29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChDb21w
YXJlU3RyaWN0RXEsIG9wMSwgb3AyKSk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0
ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhz
KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChDb21wYXJlU3Ry
aWN0RXEsIG9wMSwgb3AyKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdHJpY3RlcSk7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX25lcTogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdl
dChieXRlY29kZS5yaHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFw
aChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIpKSk7CisgICAgICAg
ICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBvcDIp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXEpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9uZXFfbnVsbDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChi
eXRlY29kZS5tX29wZXJhbmQpOwogICAgICAgICAgICAgTm9kZSogbnVsbENvbnN0YW50ID0gYWRk
VG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKTsKLSAgICAgICAgICAg
IHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21w
YXJlRXEsIHZhbHVlLCBudWxsQ29uc3RhbnQpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXEsIHZhbHVl
LCBudWxsQ29uc3RhbnQpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX25zdHJpY3RlcTogewogICAgICAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOc3RyaWN0ZXE+KCk7Ci0g
ICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5v
ZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0
KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5t
X3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBpbnZlcnRlZFJlc3VsdDsKICAgICAgICAgICAgIGlu
dmVydGVkUmVzdWx0ID0gYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKTsKLSAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgaW52ZXJ0
ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChM
b2dpY2FsTm90LCBpbnZlcnRlZFJlc3VsdCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
bnN0cmljdGVxKTsKICAgICAgICAgfQogCkBAIC01Mzc5LDggKzUzNzksOCBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOwog
Ci0gICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgICAgICAg
ICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUucHJvcGVydHkpOworICAgICAgICAgICAg
Tm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogcHJv
cGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBib29sIGNvbXBp
bGVkQXNHZXRCeUlkID0gZmFsc2U7CiAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIGdldEJ5SWRT
dGF0dXM7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gMDsKQEAgLTU0
MTQsOSArNTQxNCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNvbXBpbGVkQXNHZXRCeUlkKQotICAg
ICAgICAgICAgICAgIGhhbmRsZUdldEJ5SWQoYnl0ZWNvZGUuZHN0LCBwcmVkaWN0aW9uLCBiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeUlkU3RhdHVzLCBBY2Nlc3NUeXBlOjpHZXQsIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVHZXRCeUlkKGJ5
dGVjb2RlLm1fZHN0LCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBnZXRCeUlk
U3RhdHVzLCBBY2Nlc3NUeXBlOjpHZXQsIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBn
ZXRBcnJheU1vZGUoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5hcnJheVByb2ZpbGUsIEFy
cmF5OjpSZWFkKTsKKyAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJy
YXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5
OjpSZWFkKTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgY29uc2lkZXIgbWFr
aW5nIHRoaXMgbm90IHZhcmFyZywgc2luY2UgaXQgb25seSB1c2VzIHRocmVlIGNoaWxkCiAgICAg
ICAgICAgICAgICAgLy8gc2xvdHMuCiAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NDE5MgpAQCAtNTQyNSw3ICs1NDI1LDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKDApOyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgogICAg
ICAgICAgICAgICAgIE5vZGUqIGdldEJ5VmFsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEdl
dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsK
ICAgICAgICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBHZXRCeVZhbCBtdXN0IGJlIHRy
ZWF0ZWQgYXMgaWYgaXQgY2xvYmJlcnMgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkg
bWFrZSBpdCBnZW5lcmljLgotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGdldEJ5
VmFsKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGdldEJ5VmFsKTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CkBA
IC01NDM1LDExICs1NDM1LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlWYWxXaXRoVGhpcz4oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQo
Ynl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICBOb2RlKiB0aGlzVmFsdWUgPSBnZXQoYnl0ZWNv
ZGUudGhpc1ZhbHVlKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2Rl
LnByb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNl
KTsKKyAgICAgICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS5tX3RoaXNWYWx1
ZSk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5
KTsKICAgICAgICAgICAgIE5vZGUqIGdldEJ5VmFsV2l0aFRoaXMgPSBhZGRUb0dyYXBoKEdldEJ5
VmFsV2l0aFRoaXMsIE9wSW5mbygpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UsIHRoaXNWYWx1
ZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgZ2V0QnlWYWxXaXRo
VGhpcyk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGdldEJ5VmFsV2l0aFRoaXMp
OwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlfdmFsX3dpdGhfdGhpcyk7CiAg
ICAgICAgIH0KQEAgLTU0NTUsMTAgKzU0NTUsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF93aXRoX3RoaXM6
IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0QnlWYWxXaXRoVGhpcz4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNv
ZGUuYmFzZSk7Ci0gICAgICAgICAgICBOb2RlKiB0aGlzVmFsdWUgPSBnZXQoYnl0ZWNvZGUudGhp
c1ZhbHVlKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3Bl
cnR5KTsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKKyAg
ICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAg
IE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAg
ICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogCiAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChiYXNlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHRoaXNWYWx1ZSk7
CkBAIC01NDcxLDEwICs1NDcxLDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2RlZmluZV9kYXRhX3Byb3BlcnR5OiB7CiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlZmluZURh
dGFQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFz
ZSk7Ci0gICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5wcm9wZXJ0eSk7
Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS52YWx1ZSk7Ci0gICAgICAg
ICAgICBOb2RlKiBhdHRyaWJ1dGVzID0gZ2V0KGJ5dGVjb2RlLmF0dHJpYnV0ZXMpOworICAgICAg
ICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9k
ZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIE5vZGUqIGF0dHJp
YnV0ZXMgPSBnZXQoYnl0ZWNvZGUubV9hdHRyaWJ1dGVzKTsKIAogICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoYmFzZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CkBA
IC01NDg3LDExICs1NDg3LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKIAogICAgICAgICBjYXNlIG9wX2RlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eTogewogICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWZpbmVB
Y2Nlc3NvclByb3BlcnR5PigpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29k
ZS5iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3Bl
cnR5KTsKLSAgICAgICAgICAgIE5vZGUqIGdldHRlciA9IGdldChieXRlY29kZS5nZXR0ZXIpOwot
ICAgICAgICAgICAgTm9kZSogc2V0dGVyID0gZ2V0KGJ5dGVjb2RlLnNldHRlcik7Ci0gICAgICAg
ICAgICBOb2RlKiBhdHRyaWJ1dGVzID0gZ2V0KGJ5dGVjb2RlLmF0dHJpYnV0ZXMpOworICAgICAg
ICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9k
ZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgICAgICAgICBOb2Rl
KiBnZXR0ZXIgPSBnZXQoYnl0ZWNvZGUubV9nZXR0ZXIpOworICAgICAgICAgICAgTm9kZSogc2V0
dGVyID0gZ2V0KGJ5dGVjb2RlLm1fc2V0dGVyKTsKKyAgICAgICAgICAgIE5vZGUqIGF0dHJpYnV0
ZXMgPSBnZXQoYnl0ZWNvZGUubV9hdHRyaWJ1dGVzKTsKIAogICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoYmFzZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CkBAIC01
NTE5LDIxICs1NTE5LDIxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9u
KCk7CiAKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRl
Y29kZS5iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS50
aGlzVmFsdWUpOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5s
aW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLnByb3BlcnR5XTsKKyAgICAg
ICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5v
ZGUqIHRoaXNWYWx1ZSA9IGdldChieXRlY29kZS5tX3RoaXNWYWx1ZSk7CisgICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVy
UmVtYXBbYnl0ZWNvZGUubV9wcm9wZXJ0eV07CiAKLSAgICAgICAgICAgIHNldChieXRlY29kZS5k
c3QsCisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsCiAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChHZXRCeUlkV2l0aFRoaXMsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBiYXNlLCB0aGlzVmFsdWUpKTsKIAogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9w
dXRfYnlfaWQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVj
b2RlLnZhbHVlKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUucHJvcGVydHldOwotICAgICAgICAgICAgYm9v
bCBkaXJlY3QgPSAhIShieXRlY29kZS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7CisgICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKKyAgICAgICAgICAgIE5v
ZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRl
Y29kZS5tX3Byb3BlcnR5XTsKKyAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gISEoYnl0ZWNvZGUu
bV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7CiAKICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMg
cHV0QnlJZFN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLApAQCAtNTU0NiwxMCArNTU0Niwx
MCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAg
Y2FzZSBvcF9wdXRfYnlfaWRfd2l0aF90aGlzOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWRXaXRoVGhpcz4oKTsKLSAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICBOb2RlKiB0
aGlzVmFsdWUgPSBnZXQoYnl0ZWNvZGUudGhpc1ZhbHVlKTsKLSAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KGJ5dGVjb2RlLnZhbHVlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5w
cm9wZXJ0eV07CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7
CisgICAgICAgICAgICBOb2RlKiB0aGlzVmFsdWUgPSBnZXQoYnl0ZWNvZGUubV90aGlzVmFsdWUp
OworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9p
ZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUubV9wcm9wZXJ0eV07CiAKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUHV0QnlJZFdpdGhUaGlzLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UsIHRo
aXNWYWx1ZSwgdmFsdWUpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkX3dp
dGhfdGhpcyk7CkBAIC01NTY1LDExICs1NTY1LDExIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0
KGJ5dGVjb2RlLmJhc2UpOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9
IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLnByb3BlcnR5XTsK
LSAgICAgICAgICAgIE5vZGUqIGdldHRlciA9IGdldChieXRlY29kZS5nZXR0ZXIpOwotICAgICAg
ICAgICAgTm9kZSogc2V0dGVyID0gZ2V0KGJ5dGVjb2RlLnNldHRlcik7Ci0gICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEdldHRlclNldHRlckJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwg
T3BJbmZvKGJ5dGVjb2RlLmF0dHJpYnV0ZXMpLCBiYXNlLCBnZXR0ZXIsIHNldHRlcik7CisgICAg
ICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVy
UmVtYXBbYnl0ZWNvZGUubV9wcm9wZXJ0eV07CisgICAgICAgICAgICBOb2RlKiBnZXR0ZXIgPSBn
ZXQoYnl0ZWNvZGUubV9nZXR0ZXIpOworICAgICAgICAgICAgTm9kZSogc2V0dGVyID0gZ2V0KGJ5
dGVjb2RlLm1fc2V0dGVyKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0R2V0dGVyU2V0dGVy
QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8oYnl0ZWNvZGUubV9hdHRyaWJ1
dGVzKSwgYmFzZSwgZ2V0dGVyLCBzZXR0ZXIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOwogICAgICAgICB9CiAKQEAgLTU1ODMsMzEgKzU1ODMs
MzEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAg
IGNhc2Ugb3BfZGVsX2J5X2lkOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7Ci0gICAgICAgICAgICBOb2RlKiBiYXNlID0g
Z2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLnByb3BlcnR5
XTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoRGVsZXRlQnlJZCwg
T3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBiYXNlKSk7CisgICAgICAgICAgICBOb2RlKiBiYXNl
ID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUubV9w
cm9wZXJ0eV07CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoRGVs
ZXRlQnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBiYXNlKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9kZWxfYnlfaWQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9k
ZWxfYnlfdmFsOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcERlbEJ5VmFsPigpOwotICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRl
Y29kZS5iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldChieXRlY29kZS5wcm9wZXJ0
eSk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKERlbGV0ZUJ5VmFs
LCBiYXNlLCBrZXkpKTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9i
YXNlKTsKKyAgICAgICAgICAgIE5vZGUqIGtleSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsK
KyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChEZWxldGVCeVZhbCwg
YmFzZSwga2V5KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kZWxfYnlfdmFsKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOiB7CiAgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwog
ICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OwotICAgICAgICAgICAgTm9kZSogdmFsdWVUb1Byb2ZpbGUgPSBnZXQoYnl0ZWNvZGUudGFyZ2V0
KTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoUHJvZmlsZVR5cGUsIE9wSW5mbyhtZXRhZGF0YS50
eXBlTG9jYXRpb24pLCB2YWx1ZVRvUHJvZmlsZSk7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZVRv
UHJvZmlsZSA9IGdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBhZGRUb0dyYXBo
KFByb2ZpbGVUeXBlLCBPcEluZm8obWV0YWRhdGEubV90eXBlTG9jYXRpb24pLCB2YWx1ZVRvUHJv
ZmlsZSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcm9maWxlX3R5cGUpOwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzogewogICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlQ29udHJv
bEZsb3c+KCk7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrTG9jYXRpb24qIGJhc2ljQmxvY2tMb2Nh
dGlvbiA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykuYmFzaWNCbG9ja0xvY2F0aW9uOwor
ICAgICAgICAgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYmFzaWNCbG9ja0xvY2F0aW9uOwogICAgICAgICAg
ICAgYWRkVG9HcmFwaChQcm9maWxlQ29udHJvbEZsb3csIE9wSW5mbyhiYXNpY0Jsb2NrTG9jYXRp
b24pKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Byb2ZpbGVfY29udHJvbF9mbG93KTsK
ICAgICAgICAgfQpAQCAtNTYxNyw3ICs1NjE3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2ptcDogewogICAgICAgICAgICAgQVNT
RVJUKCFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSk7CiAgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEptcD4oKTsKLSAgICAgICAgICAgIGludCBy
ZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICAgICAgICAg
IGludCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOwogICAg
ICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2
ZU9mZnNldCkpOwogICAgICAgICAgICAgaWYgKHJlbGF0aXZlT2Zmc2V0IDw9IDApCiAgICAgICAg
ICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbCgpOwpAQCAtNTYyNiwyNCArNTYyNiwyNCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9q
dHJ1ZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKdHJ1ZT4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVt
cFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0g
Z2V0KGJ5dGVjb2RlLmNvbmRpdGlvbik7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gZ2V0KGJ5dGVjb2RlLm1fY29uZGl0aW9uKTsKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZl
T2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNv
bmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX2pmYWxzZTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAg
ICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChieXRlY29kZS5jb25kaXRpb24pOworICAgICAgICAg
ICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0
KTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGdldChieXRlY29kZS5tX2NvbmRpdGlv
bik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9j
dXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXgg
KyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3BfamZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfamVxX251bGw6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVs
bD4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChi
eXRlY29kZS50YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUu
dmFsdWUpOworICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0
KGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KGJ5dGVj
b2RlLm1fdmFsdWUpOwogICAgICAgICAgICAgTm9kZSogbnVsbENvbnN0YW50ID0gYWRkVG9HcmFw
aChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKTsKICAgICAgICAgICAgIE5vZGUq
IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCB2YWx1ZSwgbnVsbENvbnN0YW50KTsK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJl
bnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVj
dGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7CkBAIC01NjUyLDggKzU2NTIsOCBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbmVx
X251bGw6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSm5lcU51bGw+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9
IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KGJ5dGVjb2RlLnZhbHVlKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0
ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBOb2RlKiB2YWx1
ZSA9IGdldChieXRlY29kZS5tX3ZhbHVlKTsKICAgICAgICAgICAgIE5vZGUqIG51bGxDb25zdGFu
dCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSk7CiAgICAg
ICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcSwgdmFsdWUsIG51
bGxDb25zdGFudCk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5j
aERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJy
ZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwpAQCAtNTY2Miw5ICs1NjYy
LDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAg
IGNhc2Ugb3Bfamxlc3M6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSmxlc3M+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUqIG9w
MSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVj
b2RlLnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJn
ZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVj
b2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7
CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNzLCBv
cDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERh
dGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3Bfamxlc3MpOwpAQCAtNTY3Miw5ICs1NjcyLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3Bfamxlc3NlcTogewogICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbGVzc2Vx
PigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5
dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhz
KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAg
ICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0
KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAg
ICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSog
Y29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlTGVzc0VxLCBvcDEsIG9wMik7CiAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXgg
KyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNp
emUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfamxlc3NlcSk7
CkBAIC01NjgyLDkgKzU2ODIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcjogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZ3JlYXRlcj4oKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQp
OwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAg
ICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJl
bGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAg
ICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFk
ZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXIsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zm
c2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRp
dGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZ3JlYXRlcik7CkBAIC01NjkyLDkg
KzU2OTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAg
ICAgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpncmVhdGVyZXE+KCk7Ci0gICAgICAgICAgICB1bnNp
Z25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAg
ICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSog
b3AyID0gZ2V0KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSog
b3AxID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChi
eXRlY29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBo
KENvbXBhcmVHcmVhdGVyRXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0LCBt
X2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKSksIGNvbmRpdGlvbik7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZ3JlYXRlcmVxKTsKQEAgLTU3MDIsOSArNTcw
Miw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAg
ICBjYXNlIG9wX2plcTogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNl
dCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUqIG9wMSA9
IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2Rl
LnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQo
Ynl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2Rl
Lm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jocyk7CiAg
ICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcSwgb3AxLCBv
cDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1f
Y3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2plcSk7CkBAIC01NzEyLDkgKzU3MTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qc3RyaWN0ZXE6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigp
OwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVj
b2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubGhzKTsK
LSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAgICAgICAg
dW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0KTsK
KyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAgICAgICAg
ICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9kZSogY29u
ZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlU3RyaWN0RXEsIG9wMSwgb3AyKTsKICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCAr
IHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6
ZSgpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qc3RyaWN0ZXEp
OwpAQCAtNTcyMiw5ICs1NzIyLDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7CiAgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpubGVzcz4oKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwot
ICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBO
b2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0g
Z2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRv
R3JhcGgoQ29tcGFyZUxlc3MsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlv
bi0+c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbmxlc3MpOwpAQCAtNTczMiw5ICs1NzMyLDkg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNh
c2Ugb3Bfam5sZXNzZXE6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSm5sZXNzZXE+KCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2
ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAgICAgIE5vZGUq
IG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5
dGVjb2RlLnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBU
YXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5
dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5tX3Jo
cyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVMZXNz
RXEsIG9wMSwgb3AyKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJh
bmNoRGF0YShtX2N1cnJlbnRJbmRleCArIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpLCBtX2N1
cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBM
QVNUX09QQ09ERShvcF9qbmxlc3NlcSk7CkBAIC01NzQyLDkgKzU3NDIsOSBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbmdyZWF0
ZXI6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm5ncmVhdGVyPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBq
dW1wVGFyZ2V0KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQo
Ynl0ZWNvZGUubGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMp
OworICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVj
b2RlLm1fdGFyZ2V0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xo
cyk7CisgICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAg
ICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlR3JlYXRlciwgb3AxLCBv
cDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1f
Y3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4
ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2puZ3JlYXRlcik7CkBAIC01NzUyLDkgKzU3NTIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcTogewog
ICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmdy
ZWF0ZXJlcT4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRh
cmdldChieXRlY29kZS50YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVj
b2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5t
X3RhcmdldCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOwor
ICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAg
IE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUdyZWF0ZXJFcSwgb3AxLCBvcDIp
OwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3Vy
cmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCksIG1fY3VycmVudEluZGV4ICsg
cmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2puZ3JlYXRlcmVxKTsKQEAgLTU3NjIsOSArNTc2Miw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2puZXE6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS50
YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAg
ICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdldChieXRlY29kZS5tX3RhcmdldCk7CisgICAg
ICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUubV9saHMpOworICAgICAgICAgICAgTm9k
ZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsKICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlv
biA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxLCBvcDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5z
dHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25k
aXRpb24pOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcSk7CkBAIC01NzcyLDkgKzU3
NzIsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAg
ICAgY2FzZSBvcF9qbnN0cmljdGVxOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCByZWxhdGl2ZU9mZnNldCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICAgICAg
ICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5saHMpOwotICAgICAgICAgICAgTm9kZSogb3Ay
ID0gZ2V0KGJ5dGVjb2RlLnJocyk7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNl
dCA9IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGJ5dGVjb2RlLm1fbGhzKTsKKyAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRl
Y29kZS5tX3Jocyk7CiAgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVTdHJpY3RFcSwgb3AxLCBvcDIpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gs
IE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5z
aXplKCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puc3RyaWN0ZXEpOwpAQCAtNTc4Miw5ICs1NzgyLDkg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNh
c2Ugb3BfamJlbG93OiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpiZWxvdz4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zm
c2V0ID0ganVtcFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogb3Ax
ID0gZ2V0KGJ5dGVjb2RlLmxocyk7Ci0gICAgICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNv
ZGUucmhzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVtcFRhcmdl
dChieXRlY29kZS5tX3RhcmdldCk7CisgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNv
ZGUubV9saHMpOworICAgICAgICAgICAgTm9kZSogb3AyID0gZ2V0KGJ5dGVjb2RlLm1fcmhzKTsK
ICAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUJlbG93LCBv
cDEsIG9wMik7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERh
dGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXggKyBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3BfamJlbG93KTsKQEAgLTU3OTIsOSArNTc5Miw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2piZWxvd2VxOiB7CiAg
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpiZWxv
d2VxPigpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0
KGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXQoYnl0ZWNvZGUu
bGhzKTsKLSAgICAgICAgICAgIE5vZGUqIG9wMiA9IGdldChieXRlY29kZS5yaHMpOworICAgICAg
ICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFy
Z2V0KTsKKyAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldChieXRlY29kZS5tX2xocyk7CisgICAg
ICAgICAgICBOb2RlKiBvcDIgPSBnZXQoYnl0ZWNvZGUubV9yaHMpOwogICAgICAgICAgICAgTm9k
ZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlQmVsb3dFcSwgb3AxLCBvcDIpOwogICAg
ICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudElu
ZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgY3VycmVudEluc3RydWN0aW9u
LT5zaXplKCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2piZWxv
d2VxKTsKQEAgLTU4MDQsOCArNTgwNCw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3dpdGNoSW1tPigpOwogICAgICAgICAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICpt
X2dyYXBoLm1fc3dpdGNoRGF0YS5hZGQoKTsKICAgICAgICAgICAgIGRhdGEua2luZCA9IFN3aXRj
aEltbTsKLSAgICAgICAgICAgIGRhdGEuc3dpdGNoVGFibGVJbmRleCA9IG1faW5saW5lU3RhY2tU
b3AtPm1fc3dpdGNoUmVtYXBbYnl0ZWNvZGUudGFibGVJbmRleF07Ci0gICAgICAgICAgICBkYXRh
LmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXggKyBqdW1wVGFyZ2V0
KGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpKTsKKyAgICAgICAgICAgIGRhdGEuc3dpdGNoVGFibGVJ
bmRleCA9IG1faW5saW5lU3RhY2tUb3AtPm1fc3dpdGNoUmVtYXBbYnl0ZWNvZGUubV90YWJsZUlu
ZGV4XTsKKyAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1
cnJlbnRJbmRleCArIGp1bXBUYXJnZXQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSk7CiAgICAg
ICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCkBAIC01ODE1LDcgKzU4MTUsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENh
c2U6OndpdGhCeXRlY29kZUluZGV4KG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKHN0YXRpY19jYXN0
PGludDMyX3Q+KHRhYmxlLm1pbiArIGkpKSksIHRhcmdldCkpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmZGF0YSksIGdldChieXRlY29kZS5z
Y3J1dGluZWUpKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEp
LCBnZXQoYnl0ZWNvZGUubV9zY3J1dGluZWUpKTsKICAgICAgICAgICAgIGZsdXNoSWZUZXJtaW5h
bChkYXRhKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3N3aXRjaF9pbW0pOwogICAgICAg
ICB9CkBAIC01ODI0LDggKzU4MjQsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN3aXRjaENoYXI+KCk7CiAgICAgICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKm1f
Z3JhcGgubV9zd2l0Y2hEYXRhLmFkZCgpOwogICAgICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNo
Q2hhcjsKLSAgICAgICAgICAgIGRhdGEuc3dpdGNoVGFibGVJbmRleCA9IG1faW5saW5lU3RhY2tU
b3AtPm1fc3dpdGNoUmVtYXBbYnl0ZWNvZGUudGFibGVJbmRleF07Ci0gICAgICAgICAgICBkYXRh
LmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXggKyBqdW1wVGFyZ2V0
KGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpKTsKKyAgICAgICAgICAgIGRhdGEuc3dpdGNoVGFibGVJ
bmRleCA9IG1faW5saW5lU3RhY2tUb3AtPm1fc3dpdGNoUmVtYXBbYnl0ZWNvZGUubV90YWJsZUlu
ZGV4XTsKKyAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1
cnJlbnRJbmRleCArIGp1bXBUYXJnZXQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KSk7CiAgICAg
ICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCkBAIC01ODM2LDcgKzU4MzYsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
ZGF0YS5jYXNlcy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIFN3aXRjaENhc2U6OndpdGhC
eXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodGFibGUubWlu
ICsgaSksIHRhcmdldCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYWRkVG9HcmFwaChT
d2l0Y2gsIE9wSW5mbygmZGF0YSksIGdldChieXRlY29kZS5zY3J1dGluZWUpKTsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoYnl0ZWNvZGUubV9zY3J1
dGluZWUpKTsKICAgICAgICAgICAgIGZsdXNoSWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAg
IExBU1RfT1BDT0RFKG9wX3N3aXRjaF9jaGFyKTsKICAgICAgICAgfQpAQCAtNTg0NSw4ICs1ODQ1
LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+
KCk7CiAgICAgICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKm1fZ3JhcGgubV9zd2l0Y2hEYXRh
LmFkZCgpOwogICAgICAgICAgICAgZGF0YS5raW5kID0gU3dpdGNoU3RyaW5nOwotICAgICAgICAg
ICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsKLSAgICAgICAg
ICAgIGRhdGEuZmFsbFRocm91Z2guc2V0Qnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRleCArIGp1
bXBUYXJnZXQoYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCkpOworICAgICAgICAgICAgZGF0YS5zd2l0
Y2hUYWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OworICAgICAgICAgICAgZGF0YS5m
YWxsVGhyb3VnaC5zZXRCeXRlY29kZUluZGV4KG1fY3VycmVudEluZGV4ICsganVtcFRhcmdldChi
eXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpKTsKICAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYg
dGFibGUgPSBtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFi
bGVJbmRleCk7CiAgICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxl
OjppdGVyYXRvciBpdGVyOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZz
ZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCk7CkBAIC01ODU3
LDcgKzU4NTcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgIFN3
aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KExhenlKU1ZhbHVlOjprbm93blN0cmluZ0ltcGwo
aXRlci0+a2V5LmdldCgpKSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBh
ZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0KGJ5dGVjb2RlLnNjcnV0aW5lZSkp
OworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmZGF0YSksIGdldChieXRl
Y29kZS5tX3NjcnV0aW5lZSkpOwogICAgICAgICAgICAgZmx1c2hJZlRlcm1pbmFsKGRhdGEpOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX3N0cmluZyk7CiAgICAgICAgIH0KQEAg
LTU4NjcsMTQgKzU4NjcsMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSk7CiAg
ICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
U2ltcGxlIGNhc2U6IHdlIGFyZSBqdXN0IHByb2R1Y2luZyBhIHJldHVybgotICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBnZXQoYnl0ZWNvZGUudmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpKTsKICAgICAgICAg
ICAgICAgICBmbHVzaEZvclJldHVybigpOwogICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X3JldCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAg
ICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZS5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFs
dWUsIGdldChieXRlY29kZS52YWx1ZSksIEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7CisgICAgICAg
ICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChi
eXRlY29kZS5tX3ZhbHVlKSwgSW1tZWRpYXRlU2V0V2l0aEZsdXNoKTsKIAogICAgICAgICAgICAg
aWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2NvbnRpbnVhdGlvbkJsb2NrICYmIG1fY3VycmVudElu
ZGV4ICsgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkgIT0gbV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSkgewogICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgYW4gZWFybHkgcmV0dXJuIGZyb20gYW4gaW5saW5lZCBmdW5jdGlvbiBhbmQgd2UgZG8g
bm90IGhhdmUgYSBjb250aW51YXRpb24gYmxvY2ssIHNvIHdlIG11c3QgYWxsb2NhdGUgb25lLgpA
QCAtNTg5MywxOCArNTg5MywxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9lbmQ6CiAgICAgICAgICAgICBBU1NF
UlQoIWlubGluZUNhbGxGcmFtZSgpKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBn
ZXQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVuZD4oKS52YWx1ZSkpOworICAgICAgICAgICAg
YWRkVG9HcmFwaChSZXR1cm4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpLm1f
dmFsdWUpKTsKICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9lbmQpOwogCiAgICAgICAgIGNhc2Ugb3BfdGhyb3c6Ci0gICAgICAgICAgICBh
ZGRUb0dyYXBoKFRocm93LCBnZXQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpLnZh
bHVlKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFRocm93LCBnZXQoY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRocm93PigpLm1fdmFsdWUpKTsKICAgICAgICAgICAgIGZsdXNoRm9yVGVybWlu
YWwoKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3Rocm93KTsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjogewogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvd1N0YXRpY0Vycm9yPigpOwot
ICAgICAgICAgICAgYWRkVG9HcmFwaChUaHJvd1N0YXRpY0Vycm9yLCBPcEluZm8oYnl0ZWNvZGUu
ZXJyb3JUeXBlKSwgZ2V0KGJ5dGVjb2RlLm1lc3NhZ2UpKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoVGhyb3dTdGF0aWNFcnJvciwgT3BJbmZvKGJ5dGVjb2RlLm1fZXJyb3JUeXBlKSwgZ2V0KGJ5
dGVjb2RlLm1fbWVzc2FnZSkpOwogICAgICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbCgpOwogICAg
ICAgICAgICAgTEFTVF9PUENPREUob3BfdGhyb3dfc3RhdGljX2Vycm9yKTsKICAgICAgICAgfQpA
QCAtNTkyNCw3ICs1OTI0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPnNpemUo
KSB8fCAobV9ncmFwaC5jb21waWxhdGlvbigpICYmIG1fY3VycmVudEJsb2NrLT5zaXplKCkgPT0g
MSAmJiBtX2N1cnJlbnRCbG9jay0+YXQoMCktPm9wKCkgPT0gQ291bnRFeGVjdXRpb24pKTsKIAot
ICAgICAgICAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gYnl0ZWNv
ZGUubWV0YWRhdGEoY29kZUJsb2NrKS5idWZmZXI7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGVB
bmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1f
YnVmZmVyOwogCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikgewogICAgICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2NhdGNoKTsgLy8gVGhpcyBjYXRjaCBoYXMgeWV0IHRvIGV4ZWN1dGUuIE5v
dGU6IHRoaXMgbG9hZCBjYW4gYmUgcmFjeSB3aXRoIHRoZSBtYWluIHRocmVhZC4KQEAgLTYwOTcs
MjEgKzYwOTcsMjEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CiAgICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENhbGxFdmFsPigpOwotICAg
ICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLmFyZ3Y7Ci0gICAgICAgICAg
ICBhZGRDYWxsKGJ5dGVjb2RlLmRzdCwgQ2FsbEV2YWwsIG51bGxwdHIsIGdldChieXRlY29kZS5j
YWxsZWUpLCBieXRlY29kZS5hcmdjLCByZWdpc3Rlck9mZnNldCwgZ2V0UHJlZGljdGlvbigpKTsK
KyAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CisgICAg
ICAgICAgICBhZGRDYWxsKGJ5dGVjb2RlLm1fZHN0LCBDYWxsRXZhbCwgbnVsbHB0ciwgZ2V0KGJ5
dGVjb2RlLm1fY2FsbGVlKSwgYnl0ZWNvZGUubV9hcmdjLCByZWdpc3Rlck9mZnNldCwgZ2V0UHJl
ZGljdGlvbigpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfZXZhbCk7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRyOiB7CiAgICAgICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7
Ci0gICAgICAgICAgICBTcGVjaWFsOjpQb2ludGVyIHNwZWNpYWxQb2ludGVyID0gYnl0ZWNvZGUu
c3BlY2lhbFBvaW50ZXI7CisgICAgICAgICAgICBTcGVjaWFsOjpQb2ludGVyIHNwZWNpYWxQb2lu
dGVyID0gYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlcjsKICAgICAgICAgICAgIEFTU0VSVChwb2lu
dGVySXNDZWxsKHNwZWNpYWxQb2ludGVyKSk7CiAgICAgICAgICAgICBKU0NlbGwqIGFjdHVhbFBv
aW50ZXIgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPigKICAgICAgICAgICAgICAgICBhY3R1YWxQb2lu
dGVyRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLCBzcGVjaWFsUG9pbnRlcikpOwog
ICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZyZWV6ZShh
Y3R1YWxQb2ludGVyKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0ganVt
cFRhcmdldChieXRlY29kZS50YXJnZXQpOwotICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBnZXQo
Ynl0ZWNvZGUudmFsdWUpOwotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVC
bG9jaykuaGFzSnVtcGVkKSB7CisgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9
IGp1bXBUYXJnZXQoYnl0ZWNvZGUubV90YXJnZXQpOworICAgICAgICAgICAgTm9kZSogY2hpbGQg
PSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CisgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKS5tX2hhc0p1bXBlZCkgewogICAgICAgICAgICAgICAgIE5vZGUqIGNvbmRp
dGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxUHRyLCBPcEluZm8oZnJvemVuUG9pbnRlciksIGNo
aWxkKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERh
dGEobV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSwgbV9jdXJyZW50
SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX2puZXFfcHRyKTsKQEAgLTYxMzEsOCArNjEzMSw4IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IG51bGxwdHI7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5yZXNvbHZl
VHlwZTsKLSAgICAgICAgICAgICAgICBkZXB0aCA9IG1ldGFkYXRhLmxvY2FsU2NvcGVEZXB0aDsK
KyAgICAgICAgICAgICAgICByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7Cisg
ICAgICAgICAgICAgICAgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKICAgICAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTYxNDAs
MTUgKzYxNDAsMTUgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAg
ICAgICAgICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3RhbnRTY29wZSA9IG1ldGFkYXRhLmNvbnN0YW50U2NvcGUuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50U2NvcGUgPSBtZXRhZGF0YS5tX2NvbnN0YW50U2NvcGUu
Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
TW9kdWxlVmFyOgotICAgICAgICAgICAgICAgICAgICBsZXhpY2FsRW52aXJvbm1lbnQgPSBtZXRh
ZGF0YS5sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGxleGlj
YWxFbnZpcm9ubWVudCA9IG1ldGFkYXRhLm1fbGV4aWNhbEVudmlyb25tZW50LmdldCgpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIExvY2FsQ2xvc3Vy
ZVZhcjoKICAgICAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgICAgICAg
ICAgc3ltYm9sVGFibGUgPSBtZXRhZGF0YS5zeW1ib2xUYWJsZS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgc3ltYm9sVGFibGUgPSBtZXRhZGF0YS5tX3N5bWJvbFRhYmxlLmdldCgpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTYxNTYsOCArNjE1Niw4IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKG5lZWRzRHluYW1pY0xvb2t1cChyZXNvbHZlVHlwZSwgb3BfcmVzb2x2ZV9zY29wZSkpIHsK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUudmFyXTsKLSAgICAgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKFJlc29sdmVTY29wZSwgT3BJbmZvKGlkZW50aWZp
ZXJOdW1iZXIpLCBnZXQoYnl0ZWNvZGUuc2NvcGUpKSk7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFw
W2J5dGVjb2RlLm1fdmFyXTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoUmVzb2x2ZVNjb3BlLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGdldChieXRl
Y29kZS5tX3Njb3BlKSkpOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29sdmVf
c2NvcGUpOwogICAgICAgICAgICAgfQogCkBAIC02MTY5LDcgKzYxNjksNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMzQ3CiAgICAgICAgICAgICBpZiAobV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnNjcmlwdE1vZGUoKSAhPSBKU1BhcnNlclNjcmlw
dE1vZGU6Ok1vZHVsZSkgewogICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxQcm9wZXJ0eSB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLnZhcl07Cisg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0
YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3Zhcl07CiAgICAgICAgICAgICAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
Z2xvYmFsUHJvcGVydGllcygpLmFkZExhemlseShEZXNpcmVkR2xvYmFsUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBpZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE4NCwy
MSArNjE4NCwyMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CiAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSA9PSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jaykpOwotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIHdlYWtKU0NvbnN0YW50
KGNvbnN0YW50U2NvcGUpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdl
dChieXRlY29kZS5zY29wZSkpOworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
d2Vha0pTQ29uc3RhbnQoY29uc3RhbnRTY29wZSkpOworICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgTW9kdWxlVmFyOiB7CiAgICAgICAg
ICAgICAgICAgLy8gU2luY2UgdGhlIHZhbHVlIG9mIHRoZSAic2NvcGUiIHZpcnR1YWwgcmVnaXN0
ZXIgaXMgbm90IHVzZWQgaW4gTExJbnQgLyBiYXNlbGluZSBvcF9yZXNvbHZlX3Njb3BlIHdpdGgg
TW9kdWxlVmFyLAogICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgbm90IHRvIGtlZXAgaXQgYWxp
dmUgYnkgdGhlIFBoYW50b20gbm9kZS4KICAgICAgICAgICAgICAgICAvLyBNb2R1bGUgZW52aXJv
bm1lbnQgaXMgYWxyZWFkeSBzdHJvbmdseSByZWZlcmVuY2VkIGJ5IHRoZSBDb2RlQmxvY2suCi0g
ICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgd2Vha0pTQ29uc3RhbnQobGV4aWNhbEVu
dmlyb25tZW50KSk7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCB3ZWFrSlND
b25zdGFudChsZXhpY2FsRW52aXJvbm1lbnQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgICAgIE5vZGUqIGxvY2FsQmFzZSA9IGdldChi
eXRlY29kZS5zY29wZSk7CisgICAgICAgICAgICAgICAgTm9kZSogbG9jYWxCYXNlID0gZ2V0KGJ5
dGVjb2RlLm1fc2NvcGUpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgbG9j
YWxCYXNlKTsgLy8gT1NSIGV4aXQgY2Fubm90IGhhbmRsZSByZXNvbHZlX3Njb3BlIG9uIGEgRENF
J2Qgc2NvcGUuCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB2
YXJpb3VzIGZvcm1zIG9mIGNvbnN0YW50IGZvbGRpbmcgaGVyZS4gVGhpcyBpcyBuZWNlc3Nhcnkg
dG8gYXZvaWQKQEAgLTYyMDcsMjYgKzYyMDcsMjYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBJbmZlcnJlZFZhbHVlKiBzaW5n
bGV0b24gPSBzeW1ib2xUYWJsZS0+c2luZ2xldG9uU2NvcGUoKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzaW5nbGV0b24tPmluZmVycmVkVmFsdWUoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShzaW5n
bGV0b24pOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgd2Vha0pT
Q29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgd2Vha0pTQ29uc3RhbnQodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGlmIChKU1Njb3BlKiBzY29wZSA9IGxvY2FsQmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFu
dDxKU1Njb3BlKj4oKm1fdm0pKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
biA9IGRlcHRoOyBuLS07KQogICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUgPSBzY29wZS0+
bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCB3ZWFrSlNDb25z
dGFudChzY29wZSkpOworICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIHdl
YWtKU0NvbnN0YW50KHNjb3BlKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSBkZXB0aDsgbi0t
OykKICAgICAgICAgICAgICAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9HcmFwaChTa2lwU2NvcGUs
IGxvY2FsQmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbG9jYWxCYXNl
KTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGxvY2FsQmFzZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
Z2V0KGJ5dGVjb2RlLnNjb3BlKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9t
LCBnZXQoYnl0ZWNvZGUubV9zY29wZSkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
Y2VPU1JFeGl0KTsKLSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBo
KEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpKTsKKyAgICAgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3Rh
bnROdWxsKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY2FzZSBEeW5hbWljOgpAQCAtNjIzNyw5ICs2MjM3LDkgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcmVz
b2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWw6IHsKICAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmVzb2x2ZVNjb3BlRm9y
SG9pc3RpbmdGdW5jRGVjbEluRXZhbD4oKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5w
cm9wZXJ0eV07CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUubV9wcm9wZXJ0eV07CiAKLSAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoUmVzb2x2ZVNjb3BlRm9ySG9p
c3RpbmdGdW5jRGVjbEluRXZhbCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBnZXQoYnl0ZWNv
ZGUuc2NvcGUpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgo
UmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbCwgT3BJbmZvKGlkZW50aWZpZXJO
dW1iZXIpLCBnZXQoYnl0ZWNvZGUubV9zY29wZSkpKTsKIAogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfcmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpOwogICAg
ICAgICB9CkBAIC02MjQ3LDcgKzYyNDcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6IHsKICAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3Bl
PigpOwogICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spOwotICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5l
U3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2J5dGVjb2RlLnZhcl07CisgICAgICAgICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVy
UmVtYXBbYnl0ZWNvZGUubV92YXJdOwogICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKIAogICAgICAgICAg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGU7CkBAIC02MjU3LDIwICs2MjU3LDIwIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVpbnRwdHJf
dCBvcGVyYW5kOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xv
Y2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwot
ICAgICAgICAgICAgICAgIGdldFB1dEluZm8gPSBtZXRhZGF0YS5nZXRQdXRJbmZvOworICAgICAg
ICAgICAgICAgIGdldFB1dEluZm8gPSBtZXRhZGF0YS5tX2dldFB1dEluZm87CiAgICAgICAgICAg
ICAgICAgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGlj
YWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpCi0gICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRzID0gbWV0YWRhdGEud2F0Y2hw
b2ludFNldDsKKyAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2ludHMgPSBtZXRhZGF0YS5tX3dh
dGNocG9pbnRTZXQ7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzb2x2ZVR5cGUgIT0gVW5y
ZXNvbHZlZFByb3BlcnR5ICYmIHJlc29sdmVUeXBlICE9IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLnN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBvcGVyYW5kID0gbWV0YWRhdGEu
b3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gbWV0YWRhdGEubV9zdHJ1
Y3R1cmUuZ2V0KCk7CisgICAgICAgICAgICAgICAgb3BlcmFuZCA9IG1ldGFkYXRhLm1fb3BlcmFu
ZDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5lZWRzRHluYW1pY0xvb2t1cChy
ZXNvbHZlVHlwZSwgb3BfZ2V0X2Zyb21fc2NvcGUpKSB7CiAgICAgICAgICAgICAgICAgdWludDY0
X3Qgb3BJbmZvMSA9IG1ha2VEeW5hbWljVmFyT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIsIGdldFB1
dEluZm8ub3BlcmFuZCgpKTsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gZ2V0UHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3Qs
Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0RHluYW1pY1ZhciwgT3BJbmZvKG9w
SW5mbzEpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChieXRlY29kZS5zY29wZSkpKTsKKyAgICAg
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsCisgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoR2V0RHluYW1pY1ZhciwgT3BJbmZvKG9wSW5mbzEpLCBPcEluZm8ocHJlZGljdGlvbiks
IGdldChieXRlY29kZS5tX3Njb3BlKSkpOwogICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2dldF9mcm9tX3Njb3BlKTsKICAgICAgICAgICAgIH0KIApAQCAtNjI5MiwyMSArNjI5MiwyMSBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgaWYgKHN0YXR1cy5zdGF0ZSgpICE9IEdldEJ5SWRTdGF0dXM6OlNpbXBsZQogICAgICAgICAg
ICAgICAgICAgICB8fCBzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxCiAgICAgICAgICAgICAgICAg
ICAgIHx8IHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgIT0gMSkgewotICAgICAgICAg
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEdldEJ5SWRGbHVzaCwgT3BJ
bmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChieXRlY29kZS5z
Y29wZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dy
YXBoKEdldEJ5SWRGbHVzaCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGdldChieXRlY29kZS5tX3Njb3BlKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gd2Vh
a0pTQ29uc3RhbnQoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgICAgICBOb2RlKiByZXN1bHQg
PSBsb2FkKHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHN0YXR1c1swXSk7Ci0g
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUuc2NvcGUpKTsK
LSAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCByZXN1bHQpOworICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKKyAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAg
ICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIGdldChieXRlY29kZS5zY29wZSkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKICAgICAgICAgICAgICAgICBXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50U2V0OwogICAgICAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsK
ICAgICAgICAgICAgICAgICBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KiBzY29wZU9iamVjdCA9
IGpzQ2FzdDxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Kj4oSlNTY29wZTo6Y29uc3RhbnRTY29w
ZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2sp
KTsKQEAgLTYzNjIsNyArNjM2Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHBvaW50ZXItPmdl
dCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkod2F0Y2hwb2ludFNldCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCB3ZWFrSlNDb25zdGFudCh2
YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCB3ZWFr
SlNDb25zdGFudCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC02Mzc2LDEzICs2Mzc2LDEz
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICBOb2RlKiB2YWx1ZSA9IGFkZFRvR3JhcGgobm9kZVR5cGUsIE9wSW5mbyhvcGVyYW5kKSwg
T3BJbmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcykKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja05v
dEVtcHR5LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgdmFsdWUp
OworICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBMb2NhbENsb3N1
cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
c2NvcGVOb2RlID0gZ2V0KGJ5dGVjb2RlLnNjb3BlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBz
Y29wZU5vZGUgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMgUGhhbnRv
bS4gQnV0OgogICAgICAgICAgICAgICAgIC8vCkBAIC02Mzk4LDExICs2Mzk4LDExIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAvLyBw
cmVkaWN0aW9uLCB3ZSdkIG90aGVyd2lzZSB0aGluayB0aGF0IGl0IGhhcyB0byBleGl0LiBUaGVu
IHdoZW4gaXQgZGlkIGV4ZWN1dGUsIHdlCiAgICAgICAgICAgICAgICAgLy8gd291bGQgcmVjb21w
aWxlLiBCdXQgaWYgd2UgY2FuIGZvbGQgaXQgaGVyZSwgd2UgYXZvaWQgdGhlIGV4aXQuCiAgICAg
ICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50Q2xv
c3VyZVZhcihzY29wZU5vZGUsIFNjb3BlT2Zmc2V0KG9wZXJhbmQpKSkgewotICAgICAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOworICAgICAg
ICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIHdlYWtKU0NvbnN0YW50KHZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwotICAg
ICAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsCisgICAgICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LAogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldENsb3N1cmVWYXIs
IE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBzY29wZU5vZGUpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTY0MTksNyArNjQxOSw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9w
dXRfdG9fc2NvcGU6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIgPSBieXRlY29kZS52YXI7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyID0gYnl0ZWNvZGUubV92YXI7CiAgICAgICAgICAgICBpZiAoaWRlbnRpZmllck51
bWJlciAhPSBVSU5UX01BWCkKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyTnVtYmVyID0gbV9p
bmxpbmVTdGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbaWRlbnRpZmllck51bWJlcl07CiAgICAg
ICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkOwpAQCAtNjQzNSwxMyArNjQzNSwxMyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICB1aW50
cHRyX3Qgb3BlcmFuZDsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgICAgICAgICBnZXRQdXRJbmZvID0gbWV0YWRhdGEuZ2V0UHV0SW5mbzsKKyAg
ICAgICAgICAgICAgICBnZXRQdXRJbmZvID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvOwogICAgICAg
ICAgICAgICAgIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwogICAgICAg
ICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcyB8fCByZXNvbHZlVHlwZSA9PSBMb2NhbENs
b3N1cmVWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKLSAgICAgICAgICAg
ICAgICAgICAgd2F0Y2hwb2ludHMgPSBtZXRhZGF0YS53YXRjaHBvaW50U2V0OworICAgICAgICAg
ICAgICAgICAgICB3YXRjaHBvaW50cyA9IG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldDsKICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChyZXNvbHZlVHlwZSAhPSBVbnJlc29sdmVkUHJvcGVydHkgJiYg
cmVzb2x2ZVR5cGUgIT0gVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykK
LSAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gbWV0YWRhdGEuc3RydWN0dXJlLmdldCgp
OwotICAgICAgICAgICAgICAgIG9wZXJhbmQgPSBtZXRhZGF0YS5vcGVyYW5kOworICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICBvcGVyYW5kID0gbWV0YWRhdGEubV9vcGVyYW5kOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwpAQCAtNjQ0OSw3ICs2NDQ5LDcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaWYg
KG5lZWRzRHluYW1pY0xvb2t1cChyZXNvbHZlVHlwZSwgb3BfcHV0X3RvX3Njb3BlKSkgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChpZGVudGlmaWVyTnVtYmVyICE9IFVJTlRfTUFYKTsKICAgICAg
ICAgICAgICAgICB1aW50NjRfdCBvcEluZm8xID0gbWFrZUR5bmFtaWNWYXJPcEluZm8oaWRlbnRp
Zmllck51bWJlciwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwotICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUHV0RHluYW1pY1ZhciwgT3BJbmZvKG9wSW5mbzEpLCBPcEluZm8oKSwgZ2V0KGJ5dGVj
b2RlLnNjb3BlKSwgZ2V0KGJ5dGVjb2RlLnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXREeW5hbWljVmFyLCBPcEluZm8ob3BJbmZvMSksIE9wSW5mbygpLCBnZXQoYnl0ZWNv
ZGUubV9zY29wZSksIGdldChieXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfcHV0X3RvX3Njb3BlKTsKICAgICAgICAgICAgIH0KIApAQCAtNjQ2OSwxMyAr
NjQ2OSwxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEKICAgICAgICAgICAgICAg
ICAgICAgfHwgc3RhdHVzWzBdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZQogICAg
ICAgICAgICAgICAgICAgICB8fCBzdGF0dXNbMF0uc3RydWN0dXJlKCkuc2l6ZSgpICE9IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIGdldChieXRlY29kZS5zY29wZSksIGdldChieXRlY29kZS52YWx1ZSkpOworICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVt
YmVyKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpLCBnZXQoYnl0ZWNvZGUubV92YWx1ZSkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgTm9kZSogYmFzZSA9IHdlYWtKU0NvbnN0YW50KGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAg
ICAgICAgc3RvcmUoYmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdHVzWzBdLCBnZXQoYnl0ZWNv
ZGUudmFsdWUpKTsKKyAgICAgICAgICAgICAgICBzdG9yZShiYXNlLCBpZGVudGlmaWVyTnVtYmVy
LCBzdGF0dXNbMF0sIGdldChieXRlY29kZS5tX3ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgLy8g
S2VlcCBzY29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCi0gICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBnZXQoYnl0ZWNvZGUuc2NvcGUpKTsKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20sIGdldChieXRlY29kZS5tX3Njb3BlKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6
CkBAIC02NDkzLDIxICs2NDkzLDIxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IHNj
b3BlT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChlbnRyeSwgd2F0Y2hwb2ludHMgPT0gZW50cnkud2F0Y2hwb2ludFNldCgp
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTm9kZSogdmFsdWVOb2RlID0g
Z2V0KGJ5dGVjb2RlLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZU5vZGUgPSBn
ZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9i
YWxWYXJpYWJsZSwgT3BJbmZvKG9wZXJhbmQpLCB3ZWFrSlNDb25zdGFudChzY29wZU9iamVjdCks
IHZhbHVlTm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9p
bnRzLT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
TXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHN0b3JlLiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFy
LgogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0
Y2hwb2ludHMpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBz
Y29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQ
aGFudG9tLCBnZXQoYnl0ZWNvZGUuc2NvcGUpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIGdldChieXRlY29kZS5tX3Njb3BlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBn
ZXQoYnl0ZWNvZGUuc2NvcGUpOwotICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlTm9kZSA9IGdl
dChieXRlY29kZS52YWx1ZSk7CisgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVOb2RlID0gZ2V0
KGJ5dGVjb2RlLm1fc2NvcGUpOworICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlTm9kZSA9IGdl
dChieXRlY29kZS5tX3ZhbHVlKTsKIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0Q2xv
c3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBzY29wZU5vZGUsIHZhbHVlTm9kZSk7CiAKQEAgLTY1
NzEsMjggKzY1NzEsMjggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsKICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50PigpOwotICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLnN5bWJvbFRh
YmxlLmlzQ29uc3RhbnQoKSAmJiBieXRlY29kZS5pbml0aWFsVmFsdWUuaXNDb25zdGFudCgpKTsK
LSAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJlZXplU3Ry
b25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRlY29kZS5z
eW1ib2xUYWJsZS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxW
YWx1ZSA9IG1fZ3JhcGguZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChieXRlY29kZS5pbml0aWFsVmFsdWUub2Zmc2V0KCkpKTsKLSAgICAgICAg
ICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2RlLnNjb3BlKTsKKyAgICAgICAgICAgIEFTU0VS
VChieXRlY29kZS5tX3N5bWJvbFRhYmxlLmlzQ29uc3RhbnQoKSAmJiBieXRlY29kZS5tX2luaXRp
YWxWYWx1ZS5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIHN5bWJvbFRh
YmxlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2st
PmdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGUub2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgIEZyb3plblZhbHVlKiBpbml0aWFsVmFsdWUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9pbml0aWFs
VmFsdWUub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2Rl
Lm1fc2NvcGUpOwogICAgICAgICAgICAgTm9kZSogbGV4aWNhbEVudmlyb25tZW50ID0gYWRkVG9H
cmFwaChDcmVhdGVBY3RpdmF0aW9uLCBPcEluZm8oc3ltYm9sVGFibGUpLCBPcEluZm8oaW5pdGlh
bFZhbHVlKSwgc2NvcGUpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgbGV4aWNhbEVu
dmlyb25tZW50KTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgbGV4aWNhbEVudmly
b25tZW50KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9sZXhpY2FsX2Vudmly
b25tZW50KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOiB7
CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
c2hXaXRoU2NvcGU+KCk7Ci0gICAgICAgICAgICBOb2RlKiBjdXJyZW50U2NvcGUgPSBnZXQoYnl0
ZWNvZGUuY3VycmVudFNjb3BlKTsKLSAgICAgICAgICAgIE5vZGUqIG9iamVjdCA9IGdldChieXRl
Y29kZS5uZXdTY29wZSk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBo
KFB1c2hXaXRoU2NvcGUsIGN1cnJlbnRTY29wZSwgb2JqZWN0KSk7CisgICAgICAgICAgICBOb2Rl
KiBjdXJyZW50U2NvcGUgPSBnZXQoYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUpOworICAgICAgICAg
ICAgTm9kZSogb2JqZWN0ID0gZ2V0KGJ5dGVjb2RlLm1fbmV3U2NvcGUpOworICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKFB1c2hXaXRoU2NvcGUsIGN1cnJlbnRTY29w
ZSwgb2JqZWN0KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXNoX3dpdGhfc2NvcGUp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOiB7CiAgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVu
dFNjb3BlPigpOwotICAgICAgICAgICAgTm9kZSogY3VycmVudFNjb3BlID0gZ2V0KGJ5dGVjb2Rl
LnNjb3BlKTsKKyAgICAgICAgICAgIE5vZGUqIGN1cnJlbnRTY29wZSA9IGdldChieXRlY29kZS5t
X3Njb3BlKTsKICAgICAgICAgICAgIE5vZGUqIG5ld1Njb3BlID0gYWRkVG9HcmFwaChTa2lwU2Nv
cGUsIGN1cnJlbnRTY29wZSk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBuZXdTY29w
ZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIG5ld1Njb3BlKTsKICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY3VycmVudFNjb3BlKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2dldF9wYXJlbnRfc2NvcGUpOwogICAgICAgICB9CkBAIC02NjA5LDE0ICs2NjA5
LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSB3ZWFrSlNDb25zdGFudChmdW5jdGlvbi0+c2NvcGUoKSk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChHZXRTY29w
ZSwgY2FsbGVlKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIHJlc3VsdCk7CisgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdCk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9nZXRfc2NvcGUpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9hcmd1bWVu
dF9jb3VudDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BBcmd1bWVudENvdW50PigpOwogICAgICAgICAgICAgTm9kZSogc3ViID0gYWRkVG9H
cmFwaChBcml0aFN1YiwgT3BJbmZvKEFyaXRoOjpVbmNoZWNrZWQpLCBPcEluZm8oU3BlY0ludDMy
T25seSksIGdldEFyZ3VtZW50Q291bnQoKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8o
bV9jb25zdGFudE9uZSkpKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIHN1Yik7Cisg
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIHN1Yik7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9hcmd1bWVudF9jb3VudCk7CiAgICAgICAgIH0KIApAQCAtNjYyNCwxNSArNjYyNCwx
NSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENyZWF0ZURpcmVjdEFy
Z3VtZW50cz4oKTsKICAgICAgICAgICAgIG5vdGljZUFyZ3VtZW50c1VzZSgpOwogICAgICAgICAg
ICAgTm9kZSogY3JlYXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVEaXJlY3RBcmd1bWVu
dHMpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgY3JlYXRlQXJndW1lbnRzKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgY3JlYXRlQXJndW1lbnRzKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKTsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6IHsK
ICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3Jl
YXRlU2NvcGVkQXJndW1lbnRzPigpOwogICAgICAgICAgICAgbm90aWNlQXJndW1lbnRzVXNlKCk7
Ci0gICAgICAgICAgICBOb2RlKiBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZVNj
b3BlZEFyZ3VtZW50cywgZ2V0KGJ5dGVjb2RlLnNjb3BlKSk7Ci0gICAgICAgICAgICBzZXQoYnl0
ZWNvZGUuZHN0LCBjcmVhdGVBcmd1bWVudHMpOworICAgICAgICAgICAgTm9kZSogY3JlYXRlQXJn
dW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVTY29wZWRBcmd1bWVudHMsIGdldChieXRlY29kZS5t
X3Njb3BlKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGNyZWF0ZUFyZ3VtZW50
cyk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyk7
CiAgICAgICAgIH0KIApAQCAtNjY0MCwxOCArNjY0MCwxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENyZWF0ZUNsb25lZEFyZ3VtZW50cz4oKTsKICAgICAgICAgICAg
IG5vdGljZUFyZ3VtZW50c1VzZSgpOwogICAgICAgICAgICAgTm9kZSogY3JlYXRlQXJndW1lbnRz
ID0gYWRkVG9HcmFwaChDcmVhdGVDbG9uZWRBcmd1bWVudHMpOwotICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLmRzdCwgY3JlYXRlQXJndW1lbnRzKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgY3JlYXRlQXJndW1lbnRzKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NyZWF0
ZV9jbG9uZWRfYXJndW1lbnRzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCk7Ci0gICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUuZHN0LAorICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LAogICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgICAgIEdldEZyb21Bcmd1
bWVudHMsCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhieXRlY29kZS5pbmRleCksCisgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhieXRlY29kZS5tX2luZGV4KSwKICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCi0gICAgICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5hcmd1bWVudHMpKSk7CisgICAgICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5t
X2FyZ3VtZW50cykpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9mcm9tX2FyZ3Vt
ZW50cyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNjY1OSw5ICs2NjU5LDkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgUHV0VG9Bcmd1bWVudHMsCi0g
ICAgICAgICAgICAgICAgT3BJbmZvKGJ5dGVjb2RlLmluZGV4KSwKLSAgICAgICAgICAgICAgICBn
ZXQoYnl0ZWNvZGUuYXJndW1lbnRzKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUudmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBPcEluZm8oYnl0ZWNvZGUubV9pbmRleCksCisgICAgICAg
ICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fYXJndW1lbnRzKSwKKyAgICAgICAgICAgICAgICBnZXQo
Ynl0ZWNvZGUubV92YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X3RvX2Fy
Z3VtZW50cyk7CiAgICAgICAgIH0KIApAQCAtNjY2OSw3ICs2NjY5LDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKICAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gdGhpcy0+aW5saW5lQ2FsbEZyYW1lKCk7
CiAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudDsKLSAgICAgICAgICAgIGludDMyX3QgYXJndW1l
bnRJbmRleEluY2x1ZGluZ1RoaXMgPSBieXRlY29kZS5pbmRleDsKKyAgICAgICAgICAgIGludDMy
X3QgYXJndW1lbnRJbmRleEluY2x1ZGluZ1RoaXMgPSBieXRlY29kZS5tX2luZGV4OwogICAgICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3Mo
KSkgewogICAgICAgICAgICAgICAgIGludDMyX3QgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXNX
aXRoRml4dXAgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1dpdGhGaXh1cC5zaXplKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SW5kZXhJbmNsdWRpbmdUaGlzIDwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXNXaXRoRml4dXApCkBAIC02Njc4LDcgKzY2NzgsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudFVuZGVmaW5l
ZCkpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgYXJndW1lbnQgPSBhZGRU
b0dyYXBoKEdldEFyZ3VtZW50LCBPcEluZm8oYXJndW1lbnRJbmRleEluY2x1ZGluZ1RoaXMpLCBP
cEluZm8oZ2V0UHJlZGljdGlvbigpKSk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBh
cmd1bWVudCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFyZ3VtZW50KTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9hcmd1bWVudCk7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmM6CkBAIC02NzA5LDUzICs2NzA5LDUz
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBj
YXNlIG9wX3NldF9mdW5jdGlvbl9uYW1lOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsKLSAgICAgICAgICAg
IE5vZGUqIGZ1bmMgPSBnZXQoYnl0ZWNvZGUuZnVuY3Rpb24pOwotICAgICAgICAgICAgTm9kZSog
bmFtZSA9IGdldChieXRlY29kZS5uYW1lKTsKKyAgICAgICAgICAgIE5vZGUqIGZ1bmMgPSBnZXQo
Ynl0ZWNvZGUubV9mdW5jdGlvbik7CisgICAgICAgICAgICBOb2RlKiBuYW1lID0gZ2V0KGJ5dGVj
b2RlLm1fbmFtZSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFNldEZ1bmN0aW9uTmFtZSwgZnVu
YywgbmFtZSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zZXRfZnVuY3Rpb25fbmFtZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3R5cGVvZjogewogICAgICAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKFR5cGVPZiwgZ2V0KGJ5dGVjb2RlLnZh
bHVlKSkpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKFR5cGVP
ZiwgZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF90
eXBlb2YpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF90b19udW1iZXI6IHsKICAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+
KCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlv
bigpOwotICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKFRvTnVtYmVyLCBPcEluZm8o
MCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVl
ID0gZ2V0KGJ5dGVjb2RlLm1fb3BlcmFuZCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoVG9OdW1iZXIsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCB2
YWx1ZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG9fbnVtYmVyKTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3BfdG9fc3RyaW5nOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvU3RyaW5nPigpOwotICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUub3BlcmFuZCk7Ci0gICAgICAgICAgICBzZXQoYnl0
ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKFRvU3RyaW5nLCB2YWx1ZSkpOworICAgICAgICAgICAgTm9k
ZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHNldChieXRl
Y29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb1N0cmluZywgdmFsdWUpKTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3RvX3N0cmluZyk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3Rv
X29iamVjdDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUb09iamVjdD4oKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChieXRl
Y29kZS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBt
X2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tZXNzYWdlXTsKLSAg
ICAgICAgICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoVG9PYmplY3QsIE9wSW5mbyhp
ZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCB2YWx1ZSkpOworICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoYnl0ZWNvZGUubV9vcGVyYW5kKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJS
ZW1hcFtieXRlY29kZS5tX21lc3NhZ2VdOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0
LCBhZGRUb0dyYXBoKFRvT2JqZWN0LCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgdmFsdWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX29iamVj
dCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2luX2J5X3ZhbDogewogICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5VmFsPigpOwot
ICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spLmFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwotICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChJbkJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgZ2V0KGJ5dGVjb2RlLmJhc2UpLCBnZXQoYnl0ZWNvZGUucHJvcGVydHkpKSk7
CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAg
ICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChJbkJ5VmFsLCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksIGdldChieXRlY29kZS5tX3By
b3BlcnR5KSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5fYnlfdmFsKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfaW5fYnlfaWQ6IHsKICAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgICAgICAgICAg
Tm9kZSogYmFzZSA9IGdldChieXRlY29kZS5iYXNlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRl
Y29kZS5wcm9wZXJ0eV07CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1f
YmFzZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbYnl0ZWNvZGUubV9wcm9wZXJ0eV07CiAgICAgICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdOwogCiAgICAgICAgICAgICBJbkJ5SWRTdGF0dXMgc3RhdHVzID0gSW5CeUlk
U3RhdHVzOjpjb21wdXRlRm9yKApAQCAtNjc4NCw0MyArNjc4NCw0MyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoRmlsdGVySW5CeUlkU3RhdHVzLCBPcEluZm8obV9ncmFwaC5tX3BsYW4ucmVjb3JkZWRTdGF0
dXNlcygpLmFkZEluQnlJZFN0YXR1cyhjdXJyZW50Q29kZU9yaWdpbigpLCBzdGF0dXMpKSwgYmFz
ZSk7CiAKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNo
U3RydWN0dXJlLCBPcEluZm8oZGF0YSksIGJhc2UpOwotICAgICAgICAgICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUuZHN0LCBtYXRjaCk7CisgICAgICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgbWF0Y2gpOwogICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbl9ieV9p
ZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEluQnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIp
LCBiYXNlKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5C
eUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2luX2J5X2lkKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCk7Ci0gICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmFibGVMZW5ndGgsIGdldChieXRlY29k
ZS5iYXNlKSkpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdl
dEVudW1lcmFibGVMZW5ndGgsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eTogewogICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNHZW5lcmljUHJvcGVydHk+KCk7Ci0g
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEhhc0dlbmVyaWNQcm9wZXJ0
eSwgZ2V0KGJ5dGVjb2RlLmJhc2UpLCBnZXQoYnl0ZWNvZGUucHJvcGVydHkpKSk7CisgICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzR2VuZXJpY1Byb3BlcnR5LCBn
ZXQoYnl0ZWNvZGUubV9iYXNlKSwgZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpKSk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9oYXNfZ2VuZXJpY19wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHk6IHsKICAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVy
dHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKEhhc1N0cnVj
dHVyZVByb3BlcnR5LCAKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUuYmFzZSksCi0gICAg
ICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQo
Ynl0ZWNvZGUuZW51bWVyYXRvcikpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9iYXNlKSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSks
CisgICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBvcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eTogewogICAgICAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+
KCk7Ci0gICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgICAg
ICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spLmFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwotICAgICAgICAgICAgTm9k
ZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUucHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSog
YmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5
TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spLm1fYXJyYXlQ
cm9maWxlLCBBcnJheTo6UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChi
eXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAgICAgIE5vZGUqIGhhc0l0ZXJhYmxlUHJvcGVy
dHkgPSBhZGRUb0dyYXBoKEhhc0luZGV4ZWRQcm9wZXJ0eSwgT3BJbmZvKGFycmF5TW9kZS5hc1dv
cmQoKSksIE9wSW5mbyhzdGF0aWNfY2FzdDx1aW50MzJfdD4oUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OkdldE93blByb3BlcnR5KSksIGJhc2UsIHByb3BlcnR5KTsKLSAgICAgICAg
ICAgIHNldChieXRlY29kZS5kc3QsIGhhc0l0ZXJhYmxlUHJvcGVydHkpOworICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fZHN0LCBoYXNJdGVyYWJsZVByb3BlcnR5KTsKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2hhc19pbmRleGVkX3Byb3BlcnR5KTsKICAgICAgICAgfQogCkBAIC02ODI4
LDUyICs2ODI4LDUyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RGlyZWN0UG5hbWU+KCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7Ci0gICAgICAgICAgICBOb2RlKiBwcm9w
ZXJ0eSA9IGdldChieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgICAgICAgICBOb2RlKiBpbmRleCA9
IGdldChieXRlY29kZS5pbmRleCk7Ci0gICAgICAgICAgICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0
KGJ5dGVjb2RlLmVudW1lcmF0b3IpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRl
Y29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSk7CisgICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdldChieXRlY29kZS5tX2lu
ZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yKTsKIAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CiAgICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChp
bmRleCk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVtZXJhdG9yKTsKLSAgICAgICAg
ICAgIHNldChieXRlY29kZS5kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQ
bmFtZSwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikpKTsKKyAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEdldERpcmVjdFBuYW1lLCBP
cEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOwogCiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9nZXRfZGlyZWN0X3BuYW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpOwotICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGdl
dChieXRlY29kZS5iYXNlKSkpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKEdldFByb3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6IHsKICAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRk
VG9HcmFwaChHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsCi0gICAgICAgICAgICAgICAgZ2V0
KGJ5dGVjb2RlLmVudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5pbmRl
eCkpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChHZXRFbnVt
ZXJhdG9yU3RydWN0dXJlUG5hbWUsCisgICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51
bWVyYXRvciksCisgICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZTogewogICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2VuZXJpY1BuYW1lPigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9H
cmFwaChHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLAotICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5lbnVtZXJhdG9yKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUuaW5kZXgpKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0RW51bWVyYXRv
ckdlbmVyaWNQbmFtZSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9y
KSwKKyAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9pbmRleCkpKTsKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzogewogICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5n
PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChUb0luZGV4U3Ry
aW5nLCBnZXQoYnl0ZWNvZGUuaW5kZXgpKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoVG9JbmRleFN0cmluZywgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWU6
IHsKICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwogICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0
YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKExv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZSwgZ2V0KGJ5dGVjb2RlLnNjb3BlKSk7CisgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUsIGdldChieXRlY29kZS5t
X3Njb3BlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9sb2dfc2hhZG93X2NoaWNrZW5f
cHJvbG9ndWUpOwogICAgICAgICB9CiAKQEAgLTY4ODMsNyArNjg4Myw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhlIHJpZ2h0IHNvbHV0aW9uIGZvciBpbmxpbmluZyBpcyB0byBlbGlkZSB0aGVzZSB3aGVuZXZl
ciB0aGUgdGFpbCBjYWxsCiAgICAgICAgICAgICAgICAgLy8gZW5kcyB1cCBiZWluZyBpbmxpbmVk
LgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTU2ODYKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKExvZ1NoYWRvd0NoaWNrZW5U
YWlsLCBnZXQoYnl0ZWNvZGUudGhpc1ZhbHVlKSwgZ2V0KGJ5dGVjb2RlLnNjb3BlKSk7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChMb2dTaGFkb3dDaGlja2VuVGFpbCwgZ2V0KGJ5dGVjb2Rl
Lm1fdGhpc1ZhbHVlKSwgZ2V0KGJ5dGVjb2RlLm1fc2NvcGUpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKTsKICAgICAg
ICAgfQpAQCAtNzE0Nyw5ICs3MTQ3LDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2Rl
QmxvY2soKQogdGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlUHV0QnlWYWwoQnl0ZWNvZGUgYnl0ZWNvZGUsIHVuc2lnbmVkIGluc3RydWN0aW9u
U2l6ZSkKIHsKLSAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgIE5vZGUq
IHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICBOb2RlKiB2YWx1ZSA9IGdl
dChieXRlY29kZS52YWx1ZSk7CisgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2Up
OworICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgIE5v
ZGUqIHZhbHVlID0gZ2V0KGJ5dGVjb2RlLm1fdmFsdWUpOwogICAgIGJvb2wgaXNEaXJlY3QgPSBC
eXRlY29kZTo6b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgYm9vbCBjb21w
aWxlZEFzUHV0QnlJZCA9IGZhbHNlOwogICAgIHsKQEAgLTcxOTAsNyArNzE5MCw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5VmFsKEJ5dGUKICAgICB9CiAKICAgICBpZiAoIWNv
bXBpbGVkQXNQdXRCeUlkKSB7Ci0gICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJh
eU1vZGUoYnl0ZWNvZGUubWV0YWRhdGEobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2spLmFy
cmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9
IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jaykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSk7CiAKICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoYmFzZSk7CiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKQEAgLTcyMDQs
MjggKzcyMDQsMjggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlWYWwoQnl0ZQog
dGVtcGxhdGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0QWNjZXNzb3JCeUlkKE5vZGVUeXBlIG9wLCBCeXRlY29kZSBieXRlY29kZSkKIHsKLSAgICBO
b2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLmJhc2UpOwotICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5wcm9w
ZXJ0eV07Ci0gICAgTm9kZSogYWNjZXNzb3IgPSBnZXQoYnl0ZWNvZGUuYWNjZXNzb3IpOwotICAg
IGFkZFRvR3JhcGgob3AsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKGJ5dGVjb2Rl
LmF0dHJpYnV0ZXMpLCBiYXNlLCBhY2Nlc3Nvcik7CisgICAgTm9kZSogYmFzZSA9IGdldChieXRl
Y29kZS5tX2Jhc2UpOworICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0
YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtieXRlY29kZS5tX3Byb3BlcnR5XTsKKyAgICBOb2Rl
KiBhY2Nlc3NvciA9IGdldChieXRlY29kZS5tX2FjY2Vzc29yKTsKKyAgICBhZGRUb0dyYXBoKG9w
LCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhieXRlY29kZS5tX2F0dHJpYnV0ZXMp
LCBiYXNlLCBhY2Nlc3Nvcik7CiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEFjY2Vzc29yQnlWYWwoTm9kZVR5cGUgb3AsIEJ5
dGVjb2RlIGJ5dGVjb2RlKQogewotICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUuYmFzZSk7
Ci0gICAgTm9kZSogc3Vic2NyaXB0ID0gZ2V0KGJ5dGVjb2RlLnByb3BlcnR5KTsKLSAgICBOb2Rl
KiBhY2Nlc3NvciA9IGdldChieXRlY29kZS5hY2Nlc3Nvcik7Ci0gICAgYWRkVG9HcmFwaChvcCwg
T3BJbmZvKGJ5dGVjb2RlLmF0dHJpYnV0ZXMpLCBiYXNlLCBzdWJzY3JpcHQsIGFjY2Vzc29yKTsK
KyAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgTm9kZSogc3Vic2Ny
aXB0ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgIE5vZGUqIGFjY2Vzc29yID0gZ2V0
KGJ5dGVjb2RlLm1fYWNjZXNzb3IpOworICAgIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhieXRlY29k
ZS5tX2F0dHJpYnV0ZXMpLCBiYXNlLCBzdWJzY3JpcHQsIGFjY2Vzc29yKTsKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIEJ5dGVjb2RlPgogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTmV3RnVu
YyhOb2RlVHlwZSBvcCwgQnl0ZWNvZGUgYnl0ZWNvZGUpCiB7Ci0gICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBkZWNsID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5mdW5jdGlvbkRl
Y2woYnl0ZWNvZGUuZnVuY3Rpb25EZWNsKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGRlY2wg
PSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29k
ZS5tX2Z1bmN0aW9uRGVjbCk7CiAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKGRlY2wpOwotICAgIE5vZGUqIHNjb3BlID0gZ2V0KGJ5dGVjb2RlLnNjb3BlKTsK
LSAgICBzZXQoYnl0ZWNvZGUuZHN0LCBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZnJvemVuKSwgc2Nv
cGUpKTsKKyAgICBOb2RlKiBzY29wZSA9IGdldChieXRlY29kZS5tX3Njb3BlKTsKKyAgICBzZXQo
Ynl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhmcm96ZW4pLCBzY29wZSkpOwog
ICAgIC8vIElkZWFsbHkgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzIFBoYW50b20uIEJ1dDoK
ICAgICAvLwogICAgIC8vIEZvciB0aGUgY29uc3RhbnQgY2FzZTogd2UgbXVzdCBkbyBpdCBiZWNh
dXNlIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIG5vIHdheSBvZiBrbm93aW5nCkBAIC03MjM5LDEw
ICs3MjM5LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU5ld0Z1bmMoTm9kZVQKIHRl
bXBsYXRlIDx0eXBlbmFtZSBCeXRlY29kZT4KIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU5l
d0Z1bmNFeHAoTm9kZVR5cGUgb3AsIEJ5dGVjb2RlIGJ5dGVjb2RlKQogewotICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhwciA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+ZnVu
Y3Rpb25FeHByKGJ5dGVjb2RlLmZ1bmN0aW9uRGVjbCk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBleHByID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5mdW5jdGlvbkV4cHIo
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpOwogICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dy
YXBoLmZyZWV6ZVN0cm9uZyhleHByKTsKLSAgICBOb2RlKiBzY29wZSA9IGdldChieXRlY29kZS5z
Y29wZSk7Ci0gICAgc2V0KGJ5dGVjb2RlLmRzdCwgYWRkVG9HcmFwaChvcCwgT3BJbmZvKGZyb3pl
biksIHNjb3BlKSk7CisgICAgTm9kZSogc2NvcGUgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7Cisg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZnJvemVuKSwgc2Nv
cGUpKTsKICAgICAvLyBJZGVhbGx5IHdlIHdvdWxkbid0IGhhdmUgdG8gZG8gdGhpcyBQaGFudG9t
LiBCdXQ6CiAgICAgLy8KICAgICAvLyBGb3IgdGhlIGNvbnN0YW50IGNhc2U6IHdlIG11c3QgZG8g
aXQgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSBubyB3YXkgb2Yga25vd2luZwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDI0
MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzkyLDcgKzM5Miw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxFeGNl
cHRpb25IYW5kbGVyUHQKIAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBleGVjLT5jb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhlYy0+Ynl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgQVNTRVJU
KGluc3RydWN0aW9uLT5pczxPcENhdGNoPigpKTsKLSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShleGVj
KS5idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoZXhlYykubV9idWZmZXI7CiAgICAgSlNW
YWx1ZSogZGF0YUJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KGRmZ0NvbW1vbi0+
Y2F0Y2hPU1JFbnRyeUJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKICAgICB1bnNpZ25lZCBpbmRleCA9
IDA7CiAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJv
ZmlsZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyNDAwMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDc3LDcgKzQ3Nyw3IEBAIGV4dGVybiAi
QyIgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQobWF0
ZXJpYWxpemF0aW9uLT5vcmlnaW4oKS5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY3VycmVudEluc3RydWN0aW9uLT5pczxPcE5ld0FycmF5QnVmZmVyPigpKTsK
ICAgICAgICAgYXV0byBuZXdBcnJheUJ1ZmZlciA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BO
ZXdBcnJheUJ1ZmZlcj4oKTsKLSAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmls
ZSA9ICZuZXdBcnJheUJ1ZmZlci5tZXRhZGF0YShjb2RlQmxvY2spLmFycmF5QWxsb2NhdGlvblBy
b2ZpbGU7CisgICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUgPSAmbmV3QXJy
YXlCdWZmZXIubWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAK
ICAgICAgICAgLy8gRklYTUU6IFNoYXJlIHRoZSBjb2RlIHdpdGggQ29tbW9uU2xvd1BhdGhzLiBD
dXJyZW50bHksIGNvZGVCbG9jayBldGMuIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQuCiAgICAgICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ01vZGUgPSBwcm9maWxlLT5zZWxlY3RJbmRleGluZ1R5cGUo
KTsKQEAgLTQ5NSw3ICs0OTUsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpCiAgICAgICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBhIG5ldyBidXR0
ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxpZCB0byBhbGxv
Y2F0ZSBjZWxscyBmcm9tCiAgICAgICAgICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVhZC4KICAg
ICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgICAgICBjb2RlQmxvY2st
PmNvbnN0YW50UmVnaXN0ZXIobmV3QXJyYXlCdWZmZXIuaW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNl
dCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAg
IGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1
dHRlcmZseS5vZmZzZXQoKSkuc2V0KHZtLCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7
CiAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQXJndW1lbnQucmIKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9Bcmd1bWVudC5yYgkocmV2aXNpb24g
MjQwMDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9Bcmd1bWVudC5yYgko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNSwxMyArMzUsMTcgQEAgY2xhc3MgQXJndW1lbnQKICAgICBlbmQKIAogICAgIGRlZiBm
aWVsZAotICAgICAgICAiI3tAdHlwZS50b19zfSAje0BuYW1lfTsiCisgICAgICAgICIje0B0eXBl
LnRvX3N9IG1fI3tAbmFtZX07IgogICAgIGVuZAogCiAgICAgZGVmIGNyZWF0ZV9wYXJhbQogICAg
ICAgICAiI3tAdHlwZS50b19zfSAje0BuYW1lfSIKICAgICBlbmQKIAorICAgIGRlZiBmaWVsZF9u
YW1lCisgICAgICAgICJtXyN7QG5hbWV9IgorICAgIGVuZAorCiAgICAgZGVmIGZpdHNfY2hlY2so
c2l6ZSkKICAgICAgICAgRml0czo6Y2hlY2sgc2l6ZSwgQG5hbWUsIEB0eXBlCiAgICAgZW5kCkBA
IC01NSw3ICs1OSw3IEBAIGNsYXNzIEFyZ3VtZW50CiAgICAgZW5kCiAKICAgICBkZWYgbG9hZF9m
cm9tX3N0cmVhbShpbmRleCwgc2l6ZSkKLSAgICAgICAgIiN7QG5hbWV9KCN7Rml0czo6Y29udmVy
dChzaXplLCAic3RyZWFtWyN7aW5kZXh9XSIsIEB0eXBlKX0pIgorICAgICAgICAiI3tmaWVsZF9u
YW1lfSgje0ZpdHM6OmNvbnZlcnQoc2l6ZSwgInN0cmVhbVsje2luZGV4fV0iLCBAdHlwZSl9KSIK
ICAgICBlbmQKIAogICAgIGRlZiBzZXR0ZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvTWV0YWRhdGEucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9NZXRhZGF0YS5yYgkocmV2aXNpb24gMjQwMDI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9NZXRhZGF0YS5yYgkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNz
IE1ldGFkYXRhCiAgICAgICAgICAgICAgICAgaWYgdHlwZS5raW5kX29mPyBIYXNoCiAgICAgICAg
ICAgICAgICAgICAgICIje3ByZWZpeH11bmlvbiB7XG4je2NvbnZlcnRGaWVsZHMocHJlZml4ICsg
JyAgICAnLCB0eXBlKX1cbiN7cHJlZml4fX07IgogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSAje2ZpZWxkLnRvX3N9OyIKKyAg
ICAgICAgICAgICAgICAgICAgIiN7cHJlZml4fSN7dHlwZS50b19zfSBtXyN7ZmllbGQudG9fc307
IgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgZW5kLmpvaW4oIlxuIikKICAgICAg
ICAgZW5kCkBAIC01Nyw3ICs1Nyw3IEBAIGNsYXNzIE1ldGFkYXRhCiAgICAgICAgIGluaXRzID0g
bmlsCiAgICAgICAgIGlmIEBpbml0aWFsaXplcnMgJiYgKG5vdCBAaW5pdGlhbGl6ZXJzLmVtcHR5
PykKICAgICAgICAgICAgIGluaXRzID0gIlxuICAgICAgICAgICAgOiAiICsgQGluaXRpYWxpemVy
cy5tYXAgZG8gfG1ldGFkYXRhLCBhcmd8Ci0gICAgICAgICAgICAgICAgIiN7bWV0YWRhdGF9KF9f
b3AuI3thcmd9KSIKKyAgICAgICAgICAgICAgICAibV8je21ldGFkYXRhfShfX29wLm1fI3thcmd9
KSIKICAgICAgICAgICAgIGVuZC5qb2luKCJcbiAgICAgICAgICAgICwgIikuY29uY2F0KCJcbiAg
ICAgICAiKTsKICAgICAgICAgZW5kCiAKQEAgLTEyMSw2ICsxMjEsNiBAQCBFT0YKICAgICBlbmQK
IAogICAgIGRlZiBzZWxmLmZpZWxkX25hbWUKLSAgICAgICAgIm1ldGFkYXRhSUQiCisgICAgICAg
ICJtX21ldGFkYXRhSUQiCiAgICAgZW5kCiBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCShyZXZpc2lvbiAyNDAwMjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQg
QEAKLSMgQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw2ICs4MCwxMiBAQCBjbGFzcyBP
cGNvZGUKICAgICAgICAgQGFyZ3MubWFwKCY6bmFtZSkudW5zaGlmdCgiIikuam9pbigiLCAiKQog
ICAgIGVuZAogCisgICAgZGVmIHVudHlwZWRfcGFyYW1zCisgICAgICAgIHJldHVybiBpZiBAYXJn
cy5uaWw/CisKKyAgICAgICAgQGFyZ3MubWFwKCY6ZmllbGRfbmFtZSkudW5zaGlmdCgiIikuam9p
bigiLCAiKQorICAgIGVuZAorCiAgICAgZGVmIG1hcF9maWVsZHNfd2l0aF9zaXplKHByZWZpeCwg
c2l6ZSwgJmJsb2NrKQogICAgICAgICBhcmdzID0gW0FyZ3VtZW50Lm5ldygib3Bjb2RlSUQiLCA6
dW5zaWduZWQsIDApXQogICAgICAgICBhcmdzICs9IEBhcmdzLmR1cCBpZiBAYXJncwpAQCAtMTY0
LDcgKzE3MCw3IEBAIEVPRgogICAgICAgICBkdW1wZXItPnByaW50TG9jYXRpb25BbmRPcChfX2xv
Y2F0aW9uLCAmIioje0BuYW1lfSJbIV9faXNXaWRlXSk7CiAje3ByaW50X2FyZ3MgeyB8YXJnfAog
PDwtRU9GLmNob21wCi0gICAgICAgIGR1bXBlci0+ZHVtcE9wZXJhbmQoI3thcmcubmFtZX0sICN7
YXJnLmluZGV4ID09IDF9KTsKKyAgICAgICAgZHVtcGVyLT5kdW1wT3BlcmFuZCgje2FyZy5maWVs
ZF9uYW1lfSwgI3thcmcuaW5kZXggPT0gMX0pOwogRU9GCiAgICAgfX0KICAgICB9CkBAIC0yMjUs
NyArMjMxLDcgQEAgRU9GCiAKICAgICBkZWYgc3RydWN0X2luZGljZXMKICAgICAgICAgb3V0ID0g
W10KLSAgICAgICAgb3V0ICs9IEBhcmdzLm1hcCgmOm5hbWUpIHVubGVzcyBAYXJncy5uaWw/Cisg
ICAgICAgIG91dCArPSBAYXJncy5tYXAoJjpmaWVsZF9uYW1lKSB1bmxlc3MgQGFyZ3MubmlsPwog
ICAgICAgICBvdXQgPDwgTWV0YWRhdGEuZmllbGRfbmFtZSB1bmxlc3MgQG1ldGFkYXRhLmVtcHR5
PwogICAgICAgICBvdXQubWFwLndpdGhfaW5kZXggZG8gfG5hbWUsIGluZGV4fAogICAgICAgICAg
ICAgImNvbnN0IHVuc2lnbmVkICN7Y2FwaXRhbGl6ZWRfbmFtZX1fI3tuYW1lfV9pbmRleCA9ICN7
aW5kZXggKyAxfTsiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDI0MDAy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2MSw3ICszNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWV0YWRhdGE+IHZvaWQgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShNZXRhZGF0YSYpOwogICAg
ICAgICB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVkT3Bjb2RlKC4uLik7CiAg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgotICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6OnByb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+
Ojp2YWx1ZSwgdm9pZD4KKyAgICAgICAgc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8ZGVj
bHR5cGUoT3A6Ok1ldGFkYXRhOjptX3Byb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9p
ZD4KICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZUlmUHJvZmlsZWRPcGNvZGUoT3AgYnl0
ZWNvZGUpOwogCiAgICAgICAgIHZvaWQgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJl
Z2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIEFycmF5UHJvZmlsZSopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0
LmNwcAkocmV2aXNpb24gMjQwMDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRB
cml0aG1ldGljMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00OCw5ICs0OCw5IEBAIHZvaWQgSklU
OjplbWl0X2NvbXBhcmVBbmRKdW1wKGNvbnN0IEluc3QKICAgICBKdW1wTGlzdCBub3RJbnQzMk9w
MjsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50
IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhz
Lm9mZnNldCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgp
OworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAKICAg
ICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkp
IHsKQEAgLTEwMiw5ICsxMDIsOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6
ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNl
dCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBp
bnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2Rl
Lm1fcmhzLm9mZnNldCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKIAogICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKQEAgLTEyMiw5
ICsxMjIsOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9
IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNl
dCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3Ax
ID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhz
Lm9mZnNldCgpOwogCiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKICAgICAg
ICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwpAQCAtMTQzLDkgKzE0Myw5IEBAIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25z
dCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRf
T1BFUkFUSU9OICpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAg
aW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
cmhzLm9mZnNldCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCkBAIC0xNTgsOCArMTU4LDggQEAgdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfdW5z
aWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVkPigpOwotICAgIGlu
dCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2Rl
Lm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAg
ICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwogICAgIApAQCAtMTcxLDcgKzE3MSw3IEBA
IHZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWMKIHZvaWQgSklUOjplbWl0
X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGludCBz
cmNEc3QgPSBieXRlY29kZS5zcmNEc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyY0RzdCA9IGJ5dGVj
b2RlLm1fc3JjRHN0Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjRHN0LCByZWdUMSwgcmVn
VDApOwogCkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IElu
c3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BEZWM+KCk7Ci0gICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLnNyY0RzdC5vZmZzZXQo
KTsKKyAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBl
bWl0TG9hZChzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTE5OSw5ICsxOTksOSBAQCB2b2lk
IEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RyCiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwogICAgIGludCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKLSAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFy
Z2V0KTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBvcDIg
PSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IHRhcmdldCA9IGp1bXBUYXJnZXQoaW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9s
aHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAg
ICAgaWYgKCFub3RJbnQzMk9wMS5lbXB0eSgpKSB7CiAgICAgICAgIC8vIERvdWJsZSBjYXNlIDE6
IE9wMSBpcyBub3QgaW50MzI7IE9wMiBpcyB1bmtub3duLgpAQCAtMzM2LDkgKzMzNiw5IEBAIHZv
aWQgSklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbioKIHsKICNpZiBDUFUoWDg2KQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BNb2Q+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9m
ZnNldCgpOwotICAgIGludCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAg
ICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVj
dGlvbnMuCiAgICAgQVNTRVJUKHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNpb24gMjQw
MDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE1Nyw4ICsxNTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dl
cShjb25zdCBJbnN0cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wVW5zaWduZWQ+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
CkBAIC0xNzYsOSArMTc2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3Qg
SW5zdAogICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29k
ZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS50YXJn
ZXQpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3Ay
ID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogICAgIGlmIChpc09wZXJhbmRD
b25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwg
cmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKQEAg
LTIyMyw5ICsyMjMsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0X2Nv
bXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBvcDEg
PSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMu
b2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUubV90YXJnZXQpOwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7
CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgICAgIGlu
dDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7CkBAIC0yNDQsOSArMjQ0
LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVj
b2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3AxID0gYnl0
ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNl
dCgpOwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CiAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CiAgICAgICAgIGludDMyX3Qgb3AyaW1tID0g
Z2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7CkBAIC0yNjcsOSArMjY3LDkgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uLCBzaXplX3Qg
KEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
LSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBvcDIgPSBieXRl
Y29kZS5yaHMub2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMu
b2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOworICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0
KTsKIAogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUgZm9sbG93aW5nIGNh
c2VzIGluIHRoZSBzbG93IHBhdGg6CiAgICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8g
Y29uc3RhbnQgaW50IGltbWVkaWF0ZQpAQCAtMzY1LDcgKzM2NSw3IEBAIHZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIGludCBzcmNEc3QgPSBieXRlY29k
ZS5zcmNEc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Lm9m
ZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29w
X2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOwotICAgIGludCBzcmNE
c3QgPSBieXRlY29kZS5zcmNEc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyY0RzdCA9IGJ5dGVjb2Rl
Lm1fc3JjRHN0Lm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtMzkzLDkg
KzM5Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQg
SklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW9kPigpOwot
ICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5
dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgp
OworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3Ax
ID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhz
Lm9mZnNldCgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3Ig
eDg2IElESVYgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6
OmVheCk7CkBAIC00NTEsNyArNDUxLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25z
dCBJbnN0cnVjdAogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZWdhdGUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
ICZjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVnYXRlPigpLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KS5hcml0aFByb2ZpbGU7CisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcE5lZ2F0ZT4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0
aFByb2ZpbGU7CiAgICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5l
Z0lDKGFyaXRoUHJvZmlsZSwgY3VycmVudEluc3RydWN0aW9uKTsKICAgICBtX2luc3RydWN0aW9u
VG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwogICAgIGVtaXRNYXRo
SUNGYXN0PE9wTmVnYXRlPihuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CkBAIC00NjksOSArNDY5
LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIFNuaXBwZXRHZQogdm9pZCBKSVQ6
OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGluZ1BvbGljeSBwcm9maWxpbmdQb2xpY3kpCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5
dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgp
OwotICAgIGludCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5v
ZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDApOwpAQCAtNTE2LDggKzUxNiw4IEBAIHZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0
aChjb25zdCAKIHZvaWQgSklUOjplbWl0X29wX2JpdG5vdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wQml0bm90PigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0
KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTc3LDkgKzU3Nyw5IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6
U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBv
cDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAg
ICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNjM5
LDcgKzYzOSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIE9wZXJhbmRUeXBlcyBnZXRPcGUKIAog
dm9pZCBKSVQ6OmVtaXRfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEFkZD4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykuYXJpdGhQcm9maWxlOworICAg
IEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BB
ZGQ+KCkubWV0YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJ
bnN0cnVjdGlvbik7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGFkZElDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcEFkZD4oYWRkSUMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQp
OwpAQCAtNjU3LDggKzY1Nyw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2Vu
ZXJhdG8KIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiBtYXRoSUMsIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFByb2ZpbGVk
RnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBub25Qcm9maWxl
ZEZ1bmN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50
IG9wZXJhbmQgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCByZXN1bHQgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3BlcmFuZCA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgLy8gQXJpdGhOZWdhdGUg
YmVuZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KQEAg
LTcwOCw5ICs3MDgsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElD
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAg
ICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVzKGNvcGllZEFyaXRoUHJvZmls
ZShieXRlY29kZSkpOwotICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0g
ICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQgb3AyID0gYnl0ZWNv
ZGUucmhzLm9mZnNldCgpOworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9
IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTc4Myw3ICs3ODMsNyBA
QCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8CiAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IHJlc3VsdCA9IGJ5dGVj
b2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CkBAIC04MzAsOSArODMwLDkgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNT
bG93KEpJVEJpbmFyeU1hdGhJQwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CiAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVz
KGNvcGllZEFyaXRoUHJvZmlsZShieXRlY29kZSkpOwotICAgIGludCByZXN1bHQgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAg
ICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAgIGludCByZXN1bHQgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0
KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsK
QEAgLTg5MiwxOCArODkyLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVj
dGlvbioKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERp
dj4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBvcDEg
PSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZz
ZXQoKTsKKyAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50
IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5t
X3Jocy5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgT3BlcmFuZFR5cGVzIHR5
cGVzID0gZ2V0T3BlcmFuZFR5cGVzKG1ldGFkYXRhLmFyaXRoUHJvZmlsZSk7CisgICAgT3BlcmFu
ZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVzKG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlKTsK
ICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IGxlZnRSZWdzOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CiAj
ZWxzZQotICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhtZXRhZGF0YS5h
cml0aFByb2ZpbGUpOworICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyht
ZXRhZGF0YS5tX2FyaXRoUHJvZmlsZSk7CiAgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOwogICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7CiAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOwpAQCAtOTEzLDcgKzkxMyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0
cnVjdGlvbioKIAogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVsbHB0cjsKICAg
ICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykuYXJpdGhQ
cm9maWxlOworICAgICAgICBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERpdj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9hcml0aFByb2ZpbGU7CiAKICAgICBTbmlw
cGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCh0eXBlcy5maXJzdCgpKTsKICAgICBTbmlwcGV0T3BlcmFu
ZCByaWdodE9wZXJhbmQodHlwZXMuc2Vjb25kKCkpOwpAQCAtOTU4LDcgKzk1OCw3IEBAIHZvaWQg
SklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bXVsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxPcE11bD4oKS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykuYXJpdGhQcm9maWxlOworICAgIEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNdWw+KCkubWV0YWRhdGEobV9j
b2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJs
b2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAg
bV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAg
ICBlbWl0TWF0aElDRmFzdDxPcE11bD4obXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwpAQCAtOTc0LDcgKzk3NCw3
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tdWwoY29uc3QgSW5zdHJ1Y3QKIAogdm9pZCBKSVQ6
OmVtaXRfb3Bfc3ViKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSAmY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFN1Yj4oKS5tZXRhZGF0YShtX2NvZGVCbG9jaykuYXJpdGhQcm9maWxlOworICAgIEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gJmN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTdWI+KCkubWV0
YWRhdGEobV9jb2RlQmxvY2spLm1fYXJpdGhQcm9maWxlOwogICAgIEpJVFN1YklDKiBzdWJJQyA9
IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAgICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1
YklDKTsKICAgICBlbWl0TWF0aElDRmFzdDxPcFN1Yj4oc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMjQw
MDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDksMTMgKzQ5LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9p
ZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KGNvbnN0IE9wJiBieXRlY29kZSkKIHsKICAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Ci0gICAg
ZW1pdFN0b3JlKGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0
U3RvcmUoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlZ1QxLCByZWdUMCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3JldChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEs
IHJlZ1QwKTsKIApAQCAtMTUzLDE0ICsxNTMsMTQgQEAgc3RkOjplbmFibGVfaWZfdDwKIEpJVDo6
Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qKQogewog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IGludCBhcmdDb3VudCA9IGJ5dGVjb2RlLmFyZ2M7Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
LXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUuYXJndik7CisgICAgaW50IGFyZ0NvdW50ID0gYnl0
ZWNvZGUubV9hcmdjOworICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+
KGJ5dGVjb2RlLm1fYXJndik7CiAKICAgICBpZiAoT3A6Om9wY29kZUlEID09IG9wX2NhbGwgJiYg
c2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAgIGVtaXRMb2FkKHJlZ2lzdGVyT2Zmc2V0
ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwLCByZWdU
MSk7CiAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDEsIG1ldGFkYXRhLmFycmF5UHJvZmlsZS5hZGRyZXNz
T2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICBzdG9yZTMyKHJlZ1QxLCBtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZS5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgICAg
ICBkb25lLmxpbmsodGhpcyk7CiAgICAgfQogCkBAIC0xNzYsMTAgKzE3NiwxMCBAQCBzdGQ6OmVu
YWJsZV9pZl90PAogSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENh
bGxMaW5rSW5mbyogaW5mbykKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJ
RDsKLSAgICBpbnQgdGhpc1ZhbHVlID0gYnl0ZWNvZGUudGhpc1ZhbHVlLm9mZnNldCgpOwotICAg
IGludCBhcmd1bWVudHMgPSBieXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZp
cnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUuZmlyc3RGcmVlLm9mZnNldCgpOwotICAgIGludCBm
aXJzdFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLmZpcnN0VmFyQXJnOworICAgIGludCB0aGlzVmFs
dWUgPSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRzID0g
Ynl0ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVy
ID0gYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zm
c2V0ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRMb2FkKGFyZ3VtZW50cywg
cmVnVDEsIHJlZ1QwKTsKICAgICBaX0pJVE9wZXJhdGlvbl9FSlpaIHNpemVPcGVyYXRpb247CkBA
IC0yNDgsOCArMjQ4LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGNvbnN0
IAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8o
KTsKICAgICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7CiAKLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0
ZWNvZGUuYXJndjsKLSAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUuY2FsbGVlLm9mZnNldCgpOwor
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRlY29kZS5tX2FyZ3Y7CisgICAgaW50IGNhbGxl
ZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC0y
NjgsNyArMjY4LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1Y3Rpbwog
ewogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLmNh
bGxlZS5vZmZzZXQoKTsKKyAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0
KCk7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1l
UmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMjQwMDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5
dGVjb2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgpAQCAtNjIsMTQgKzYyLDE0IEBAIHN0
ZDo6ZW5hYmxlX2lmX3Q8CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgQ2FsbExpbmtJbmZvKikKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYXJnQ291bnQgPSBieXRlY29kZS5hcmdjOwotICAg
IGludCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLmFyZ3YpOwor
ICAgIGludCBhcmdDb3VudCA9IGJ5dGVjb2RlLm1fYXJnYzsKKyAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2FyZ3YpOwogCiAgICAgaWYgKE9wOjpv
cGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKICAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgc3RvcmUzMihyZWdUMCwg
bWV0YWRhdGEuYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Cisg
ICAgICAgIHN0b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxh
c3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAgICB9CiAK
QEAgLTg1LDEwICs4NSwxMCBAQCBzdGQ6OmVuYWJsZV9pZl90PAogLCB2b2lkPgogSklUOjpjb21w
aWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyogaW5mbykKIHsK
LSAgICBpbnQgdGhpc1ZhbHVlID0gYnl0ZWNvZGUudGhpc1ZhbHVlLm9mZnNldCgpOwotICAgIGlu
dCBhcmd1bWVudHMgPSBieXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50IGZpcnN0
RnJlZVJlZ2lzdGVyID0gYnl0ZWNvZGUuZmlyc3RGcmVlLm9mZnNldCgpOwotICAgIGludCBmaXJz
dFZhckFyZ09mZnNldCA9IGJ5dGVjb2RlLmZpcnN0VmFyQXJnOworICAgIGludCB0aGlzVmFsdWUg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRzID0gYnl0
ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0g
Ynl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0
ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMSk7CiAgICAgWl9KSVRPcGVyYXRpb25fRUpaWiBzaXplT3BlcmF0aW9u
OwpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShj
b25zdCAKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJ
bmZvKCk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOwogCi0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
LWJ5dGVjb2RlLmFyZ3Y7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWJ5dGVjb2RlLm1fYXJn
djsKIAogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKIApAQCAtMTgxLDE1ICsxODEsMTUgQEAgdGVtcGxhdGU8Pgog
Ym9vbCBKSVQ6OmNvbXBpbGVUYWlsQ2FsbChjb25zdCBPcFRhaWxDYWxsJiBieXRlY29kZSwgQ2Fs
bExpbmtJbmZvKiBpbmZvLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBDYWxs
RnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKLSAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRB
cmdzID0gYnl0ZWNvZGUuYXJnYzsKKyAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gYnl0
ZWNvZGUubV9hcmdjOwogICAgIHNodWZmbGVEYXRhLnRhZ1R5cGVOdW1iZXIgPSBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXI7CiAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KLSAgICAg
ICAgYnl0ZWNvZGUuYXJndiAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdp
c3Rlcik7Ci0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUoYnl0ZWNvZGUuYXJnYyk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLmFyZ2M7ICsraSkgeworICAgICAgICBi
eXRlY29kZS5tX2FyZ3YgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0
ZXIpOworICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGJ5dGVjb2RlLm1fYXJnYyk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ5dGVjb2RlLm1fYXJnYzsgKytpKSB7CiAgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3NbaV0gPQogICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKAotICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpIC0gYnl0ZWNvZGUuYXJndiwKKyAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChpKSAtIGJ5dGVjb2RlLm1fYXJndiwKICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0
SlMpOwogICAgIH0KICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQpAQCAtMjA2LDcgKzIwNiw3IEBA
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW8KIHsKICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOwotICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5jYWxsZWUub2Zmc2V0KCk7
CisgICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLm1fY2FsbGVlLm9mZnNldCgpOwogCiAgICAgLyog
Q2FsbGVyIGFsd2F5czoKICAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFtZVJlZ2lzdGVyIHRvIGNh
bGxlZSBjYWxsRnJhbWUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAkocmV2aXNpb24gMjQwMDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMjksNyArMzI5LDcgQEAgaW5saW5lIHZvaWQgSklU
OjplbWl0VmFsdWVQcm9maWxpbmdTaXRlKAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KLWlu
bGluZSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6
OnByb2ZpbGUpLCBWYWx1ZVByb2ZpbGU+Ojp2YWx1ZSwgdm9pZD4gSklUOjplbWl0VmFsdWVQcm9m
aWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZShPcCBieXRlY29kZSkKK2lubGluZSBzdGQ6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShPcDo6TWV0YWRhdGE6Om1fcHJvZmlsZSksIFZh
bHVlUHJvZmlsZT46OnZhbHVlLCB2b2lkPiBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlBy
b2ZpbGVkT3Bjb2RlKE9wIGJ5dGVjb2RlKQogewogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKIH0KQEAgLTM0MSw3ICszNDEsNyBAQCBp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoCiB7CiAgICAgaWYgKCFzaG91
bGRFbWl0UHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLnByb2ZpbGUpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0
YWRhdGEubV9wcm9maWxlKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwg
QXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUpCkBAIC03MTAsMTEgKzcxMCwxMSBAQCBBTFdBWVNf
SU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgCiAKIEFMV0FZU19JTkxJTkUgR2V0UHV0
SW5mbyBKSVQ6OmNvcGllZEdldFB1dEluZm8oT3BQdXRUb1Njb3BlIGJ5dGVjb2RlKQogewotICAg
IHVuc2lnbmVkIGtleSA9IGJ5dGVjb2RlLm1ldGFkYXRhSUQgKyAxOyAvLyBIYXNoTWFwIGRvZXNu
J3QgbGlrZSAwIGFzIGEga2V5CisgICAgdW5zaWduZWQga2V5ID0gYnl0ZWNvZGUubV9tZXRhZGF0
YUlEICsgMTsgLy8gSGFzaE1hcCBkb2Vzbid0IGxpa2UgMCBhcyBhIGtleQogICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2NvcGllZEdldFB1dEluZm9zLmZpbmQoa2V5KTsKICAgICBpZiAoaXRlcmF0b3Ig
IT0gbV9jb3BpZWRHZXRQdXRJbmZvcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIEdldFB1dEluZm8o
aXRlcmF0b3ItPnZhbHVlKTsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykuZ2V0UHV0SW5mbzsKKyAgICBHZXRQdXRJbmZvIGdldFB1dElu
Zm8gPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykubV9nZXRQdXRJbmZvOwogICAgIG1f
Y29waWVkR2V0UHV0SW5mb3MuYWRkKGtleSwgZ2V0UHV0SW5mby5vcGVyYW5kKCkpOwogICAgIHJl
dHVybiBnZXRQdXRJbmZvOwogfQpAQCAtNzIyLDExICs3MjIsMTEgQEAgQUxXQVlTX0lOTElORSBH
ZXRQdXRJbmZvIEpJVDo6Y29waWVkR2V0UAogdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5T3A+CiBB
TFdBWVNfSU5MSU5FIEFyaXRoUHJvZmlsZSBKSVQ6OmNvcGllZEFyaXRoUHJvZmlsZShCaW5hcnlP
cCBieXRlY29kZSkKIHsKLSAgICB1aW50NjRfdCBrZXkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
QmluYXJ5T3A6Om9wY29kZUlEKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29k
ZS5tZXRhZGF0YUlEKTsKKyAgICB1aW50NjRfdCBrZXkgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
QmluYXJ5T3A6Om9wY29kZUlEKSA8PCAzMiB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihieXRlY29k
ZS5tX21ldGFkYXRhSUQpOwogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2NvcGllZEFyaXRoUHJvZmls
ZXMuZmluZChrZXkpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX2NvcGllZEFyaXRoUHJvZmlsZXMu
ZW5kKCkpCiAgICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Ci0gICAgQXJpdGhQcm9maWxl
IGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKS5hcml0aFByb2Zp
bGU7CisgICAgQXJpdGhQcm9maWxlIGFyaXRoUHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKS5tX2FyaXRoUHJvZmlsZTsKICAgICBtX2NvcGllZEFyaXRoUHJvZmlsZXMuYWRk
KGtleSwgYXJpdGhQcm9maWxlKTsKICAgICByZXR1cm4gYXJpdGhQcm9maWxlOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNp
b24gMjQwMDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC01MCw4ICs1MCw4IEBAIG5hbWVzcGFjZSBKU0Mgewogdm9pZCBKSVQ6OmVt
aXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUuc3Jj
Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CiAgICAgCiAgICAgaWYgKG1fY29kZUJs
b2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKQogICAgICAgICBlbWl0U3RvcmUoZHN0
LCBnZXRDb25zdGFudE9wZXJhbmQoc3JjKSk7CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbioKIHsKICAgICBBU1NFUlQocmV0dXJuVmFsdWVH
UFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwotICAgIGVtaXRMb2FkKGJ5dGVjb2RlLnZhbHVlLm9mZnNl
dCgpLCByZWdUMSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRMb2FkKGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCksIHJlZ1QxLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CkBAIC03
NCw3ICs3NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJbnN0cnVjdGlvbioKIHZv
aWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm1wPigp
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7CiB9CiAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVj
dChjb25zdCBJbnN0cgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEub2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAg
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCkBA
IC05OCw3ICs5OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHIK
ICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNv
bnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUp
LCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
CiAgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRTdG9yZUNlbGwo
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpLCByZXN1bHRSZWcpOworICAgICAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXN1bHRSZWcpOwogICAgIH0KIH0KIApAQCAtMTA4
LDggKzEwOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEkKIAog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0Pigp
OwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtZXRhZGF0YS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKKyAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBzdHJ1Y3R1cmUpOwogICAgIGVt
aXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CkBAIC0xMTcsOSArMTE3LDkgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
T3ZlcnJpZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5jb25zdHJ1Y3Rvci5vZmZzZXQo
KTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUu
b2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGlu
dCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7CisgICAgaW50
IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUub2Zmc2V0KCk7
CiAKICAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogICAgIC8v
IFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBk
by4KQEAgLTE0NSw5ICsxNDUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50
IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9m
ZnNldCgpOworICAgIGludCBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlLm9mZnNldCgpOwog
CiAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgaW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNl
IHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3Qs
IGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCkBAIC0xODIsOSArMTgyLDkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSQogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0gICAgaW50
IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9m
ZnNldCgpOworICAgIGludCBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBlLm9mZnNldCgpOwog
ICAgIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9p
bnN0YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0yMDAsMTAgKzIwMCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFu
Y2VvZkN1c3RvbT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIGludCBjb25zdHJ1Y3Rv
ciA9IGJ5dGVjb2RlLmNvbnN0cnVjdG9yLm9mZnNldCgpOwotICAgIGludCBoYXNJbnN0YW5jZVZh
bHVlID0gYnl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKKyAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9y
Lm9mZnNldCgpOworICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0
YW5jZVZhbHVlLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CkBAIC0yMTUsOCArMjE1
LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CiAgICAgCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgY29tcGFyZTMy
KEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCByZWdU
MCk7CkBAIC0yMjcsOCArMjI3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3Qg
SW5zdHJ1Ywogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVn
VDEsIHJlZ1QwKTsKICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMSk7CkBAIC0y
NTUsOCArMjU1LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IElucwog
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQo
KTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRUYWcodmFsdWUs
IHJlZ1QwKTsKICAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09
IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIpOwpAQCAt
MjY4LDggKzI2OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGMK
IHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzQm9vbGVhbj4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwogICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFn
KSwgcmVnVDApOwpAQCAtMjc5LDggKzI3OSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xl
YW4oY29uc3QgSW5zdHIKIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdExvYWRUYWcodmFsdWUs
IHJlZ1QwKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKQEAgLTI5MSw5ICsy
OTEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiB2b2lkIEpJ
VDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNDZWxsV2l0aFR5cGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwotICAgIGludCB0
eXBlID0gYnl0ZWNvZGUudHlwZTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOworICAgIGlu
dCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCBy
ZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwpAQCAt
MzExLDggKzMxMSw4IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnMK
IHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSXNPYmplY3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJh
bmQub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CkBAIC0zMzAsOCArMzMwLDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydQogdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1ByaW1p
dGl2ZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBz
cmMgPSBieXRlY29kZS5zcmMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX3NyYy5vZmZzZXQoKTsKIAogICAg
IGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzQ2LDggKzM0Niw4IEBAIHZvaWQg
SklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnMKIHZvaWQgSklUOjplbWl0X29wX3Nl
dF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTZXRGdW5jdGlv
bk5hbWU+KCk7Ci0gICAgaW50IGZ1bmMgPSBieXRlY29kZS5mdW5jdGlvbi5vZmZzZXQoKTsKLSAg
ICBpbnQgbmFtZSA9IGJ5dGVjb2RlLm5hbWUub2Zmc2V0KCk7CisgICAgaW50IGZ1bmMgPSBieXRl
Y29kZS5tX2Z1bmN0aW9uLm9mZnNldCgpOworICAgIGludCBuYW1lID0gYnl0ZWNvZGUubV9uYW1l
Lm9mZnNldCgpOwogICAgIGVtaXRMb2FkUGF5bG9hZChmdW5jLCByZWdUMSk7CiAgICAgZW1pdExv
YWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1
bmN0aW9uTmFtZSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwpAQCAtMzU2LDgg
KzM1Niw4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnMKIHZvaWQg
SklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVj
b2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBl
bWl0TG9hZFRhZyhzcmMsIHJlZ1QwKTsKIApAQCAtMzcxLDggKzM3MSw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwotICAgIGludCBjb25kID0g
Ynl0ZWNvZGUuY29uZGl0aW9uLm9mZnNldCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBjb25k
ID0gYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKIAogICAg
IGVtaXRMb2FkKGNvbmQsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM4Niw4ICszODYsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qZmFsc2UoY29uc3QgSW5zdHJ1Y3RpCiB2b2lkIEpJVDo6ZW1pdF9vcF9q
dHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7Ci0gICAgaW50IGNv
bmQgPSBieXRlY29kZS5jb25kaXRpb24ub2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50
IGNvbmQgPSBieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwog
CiAgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKICAgICBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CkBAIC00MDAsOCArNDAwLDggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpbwogdm9pZCBKSVQ6OmVtaXRfb3BfamVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcU51bGw+KCk7Ci0gICAgaW50
IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBz
cmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAKICAgICBl
bWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTQyNiw4ICs0MjYsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOwotICAgIGlu
dCBzcmMgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQg
c3JjID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAg
ZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogCkBAIC00NTMsMTUgKzQ1MywxNSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBzcmMgPSBieXRl
Y29kZS52YWx1ZS5vZmZzZXQoKTsKLSAgICBTcGVjaWFsOjpQb2ludGVyIHB0ciA9IGJ5dGVjb2Rl
LnNwZWNpYWxQb2ludGVyOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBzcmMgPSBieXRlY29kZS5t
X3ZhbHVlLm9mZnNldCgpOworICAgIFNwZWNpYWw6OlBvaW50ZXIgcHRyID0gYnl0ZWNvZGUubV9z
cGVjaWFsUG9pbnRlcjsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdU
MSwgcmVnVDApOwogICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CiAg
ICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoYWN0
dWFsUG9pbnRlckZvcihtX2NvZGVCbG9jaywgcHRyKSkpOwogICAgIG5vdENlbGwubGluayh0aGlz
KTsKLSAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEuaGFzSnVtcGVkKTsKKyAg
ICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEubV9oYXNKdW1wZWQpOwogICAgIGFk
ZEp1bXAoanVtcCgpLCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhpcyk7CiB9CkBAIC00NzAs
OSArNDcwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIAogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CiAKLSAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNv
ZGUubGhzLm9mZnNldCgpOwotICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5
dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCk7CiAKICAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywg
cmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMp
KTsKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVj
dGlvbiogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOwogCiAgICAgSnVtcExpc3Qgc3RvcmVSZXN1bHQ7CiAgICAgSnVtcExp
c3QgZ2VuZXJpY0Nhc2U7CkBAIC01MTQsOSArNTE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2VxKGNvbnN0IEluc3RydWN0aQogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgaW50IHNyYzEgPSBi
eXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0
KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAgICBlbWl0
TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKQEAgLTU1NCwxNiArNTU0
LDE2IEBAIHZvaWQgSklUOjpjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG8KIHZvaWQgSklU
OjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV90YXJnZXQpOwogICAgIGNvbXBpbGVPcEVxSnVtcFNsb3coaXRlciwgQ29tcGlsZU9wRXFU
eXBlOjpFcSwgdGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAgICBpbnQg
c3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAg
ICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQyKHNy
YzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC01NzgsNyArNTc4LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKgogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogCiAgICAg
SnVtcExpc3Qgc3RvcmVSZXN1bHQ7CiAgICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7CkBAIC02MDYs
OSArNjA2LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJbnN0cnVjdAogdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4o
KTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwg
Ynl0ZWNvZGUudGFyZ2V0KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsK
LSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwor
ICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBi
eXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVn
VDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMykpOwpAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgSklUOjplbWl0X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24KIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgY29t
cGlsZU9wRXFKdW1wU2xvdyhpdGVyLCBDb21waWxlT3BFcVR5cGU6Ok5FcSwgdGFyZ2V0KTsKIH0K
IApAQCAtNjI5LDkgKzYyOSw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpj
b21waWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBD
b21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNl
dCgpOwotICAgIGludCBzcmMxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOwotICAgIGludCBzcmMy
ID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGlu
dCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZDIoc3JjMSwg
cmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwogCkBAIC02NjksOSArNjY5LDkgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlw
ZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
PigpOwotICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUudGFyZ2V0KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKLSAg
ICBpbnQgc3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgdGFyZ2V0ID0ganVt
cFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICBpbnQg
c3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMy
LCByZWdUMywgcmVnVDIpOwogCkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsK
LSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUudGFyZ2V0KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZVN0cmljdEVxLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9u
WmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNzE4LDcgKzcxOCw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKbnN0cmljdGVxPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC03MjYs
OCArNzI2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSQogdm9p
ZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFO
dWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNy
YyA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CiAKICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAgICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CkBAIC03NTgsOCArNzU4LDggQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNy
YywgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QxKTsKQEAgLTc5Miw3ICs3OTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhjb25z
dCBJbnN0cnVjdGlvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUaHJvdz4oKTsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAgIGNv
cHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5
RnJhbWUpOwotICAgIGVtaXRMb2FkKGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpLCByZWdUMSwgcmVn
VDApOworICAgIGVtaXRMb2FkKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QxLCByZWdU
MCk7CiAgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KCkpOwogfQpAQCAtODAwLDggKzgwMCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Rocm93KGNvbnN0
IEluc3RydWN0aW8KIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsK
IApAQCAtODE3LDggKzgxNyw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJ
bnN0cnUKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fb3Bl
cmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKIApAQCAt
ODMyLDggKzgzMiw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnUK
IHZvaWQgSklUOjplbWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wVG9PYmplY3Q+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKIApAQCAtODcxLDEz
ICs4NzEsMTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3RpbwogCiAg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25P
ZmZzZXQoKSkpOwogCi0gICAgdW5zaWduZWQgZXhjZXB0aW9uID0gYnl0ZWNvZGUuZXhjZXB0aW9u
Lm9mZnNldCgpOworICAgIHVuc2lnbmVkIGV4Y2VwdGlvbiA9IGJ5dGVjb2RlLm1fZXhjZXB0aW9u
Lm9mZnNldCgpOwogICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMik7CiAKICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwogICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKIAotICAgIHVuc2lnbmVkIHRocm93
blZhbHVlID0gYnl0ZWNvZGUudGhyb3duVmFsdWUub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGhy
b3duVmFsdWUgPSBieXRlY29kZS5tX3Rocm93blZhbHVlLm9mZnNldCgpOwogICAgIGVtaXRTdG9y
ZSh0aHJvd25WYWx1ZSwgcmVnVDEsIHJlZ1QwKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAt
ODg2LDcgKzg4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW8K
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBtZXRhZGF0YS5idWZmZXI7
CisgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEubV9i
dWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgbV9ieXRlY29kZU9m
ZnNldCk7CiAgICAgZWxzZQpAQCAtOTEzLDE4ICs5MTMsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aWRlbnRpdHlfd2l0aF9wcm9maWxlKAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7Ci0gICAg
aW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOworICAgIGludCBjdXJy
ZW50U2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwogICAgIGVtaXRMb2FkUGF5bG9h
ZChjdXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2Nv
cGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKSwgcmVnVDApOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7Ci0gICAgc2l6ZV90IHRhYmxl
SW5kZXggPSBieXRlY29kZS50YWJsZUluZGV4OwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCk7
Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUuc2NydXRpbmVlLm9mZnNldCgpOwor
ICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUubV90YWJsZUluZGV4OworICAgIHVuc2ln
bmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUubV9kZWZhdWx0T2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5t
X3NjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU2ltcGxl
SnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KTsKQEAgLTkzOSw5ICs5MzksOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1t
KGNvbnN0IEluc3RyCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4oKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9
IGJ5dGVjb2RlLnRhYmxlSW5kZXg7Ci0gICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5kZWZhdWx0T2Zmc2V0KTsKLSAgICB1
bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgc2l6
ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CisgICAgdW5zaWduZWQgZGVm
YXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2Rl
ZmF1bHRPZmZzZXQpOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRp
bmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0
aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFi
bGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgp
OwpAQCAtOTU2LDkgKzk1Niw5IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0
IEluc3QKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4oKTsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5
dGVjb2RlLnRhYmxlSW5kZXg7Ci0gICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5kZWZhdWx0T2Zmc2V0KTsKLSAgICB1bnNp
Z25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5zY3J1dGluZWUub2Zmc2V0KCk7CisgICAgc2l6ZV90
IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CisgICAgdW5zaWduZWQgZGVmYXVs
dE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1
bHRPZmZzZXQpOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVl
Lm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5h
dGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTdHJpbmdKdW1wVGFibGUq
IGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwpAQCAtOTc0LDcgKzk3NCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IElu
c3RydWN0aW8KICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERl
YnVnPigpOwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3Mo
KSwgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBzdGF0aWNfY2Fz
dDxpbnQ+KGJ5dGVjb2RlLmRlYnVnSG9va1R5cGUpKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlYnVnLCBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLm1fZGVidWdIb29rVHlwZSkpOwog
ICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwogfQogCkBAIC05OTYsNyArOTk2LDcg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3QgSW5zdHJ1Y3Rpbwogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRTY29wZT4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRT
dG9yZUNlbGwoZHN0LCByZWdUMCk7CkBAIC0xMDA2LDggKzEwMDYsOCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBjYWxsZWUgPSBieXRlY29k
ZS5jYWxsZWUub2Zmc2V0KCk7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRG
dW5jdGlvbiA9ICZtZXRhZGF0YS5jYWNoZWRDYWxsZWU7CisgICAgaW50IGNhbGxlZSA9IGJ5dGVj
b2RlLm1fY2FsbGVlLm9mZnNldCgpOworICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2Fj
aGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEubV9jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBj
YWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAg
ICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTEwMzYsMTUgKzEwMzYsMTUgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogICAgIGxvYWQzMihBZGRy
ZXNzKHNjcmF0Y2hSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZklubGluZUNhcGFj
aXR5KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVz
dWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIGVt
aXRTdG9yZUNlbGwoYnl0ZWNvZGUuZHN0Lm9mZnNldCgpLCByZXN1bHRSZWcpOworICAgIGVtaXRT
dG9yZUNlbGwoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCksIHJlc3VsdFJlZyk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhp
cz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4qIGNhY2hlZFN0cnVjdHVyZSA9ICZt
ZXRhZGF0YS5jYWNoZWRTdHJ1Y3R1cmU7Ci0gICAgaW50IHRoaXNSZWdpc3RlciA9IGJ5dGVjb2Rl
LnNyY0RzdC5vZmZzZXQoKTsKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4qIGNhY2hl
ZFN0cnVjdHVyZSA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZTsKKyAgICBpbnQgdGhpc1Jl
Z2lzdGVyID0gYnl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZCh0aGlz
UmVnaXN0ZXIsIHJlZ1QzLCByZWdUMik7CiAKQEAgLTEwNTgsMTYgKzEwNTgsMTYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25zdCBJbnN0cnVjdAogdm9pZCBKSVQ6OmVtaXRfb3BfY2hl
Y2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKLSAgICBl
bWl0TG9hZFRhZyhieXRlY29kZS50YXJnZXQub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0TG9h
ZFRhZyhieXRlY29kZS5tX3RhcmdldC5vZmZzZXQoKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJl
UHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBi
eXRlY29kZS5lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAg
ICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKIAogICAg
IGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2UpOwpAQCAtMTExMiwxMCArMTExMiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShjCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQo
KTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7
CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7
CiAgICAgCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKQEAgLTExNTksOSArMTE1
OSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXIKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zm
c2V0KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBMYWJlbCBzbG93UGF0
aCA9IGxhYmVsKCk7CkBAIC0xMTc4LDEwICsxMTc4LDEwIEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5i
YXNlLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLmluZGV4Lm9mZnNldCgpOwot
ICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZz
ZXQoKTsKKyAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQo
KTsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKICAgICBlbWl0TG9hZFBheWxv
YWQoYmFzZSwgcmVnVDApOwpAQCAtMTIxOSw5ICsxMjE5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZShjb25zdAogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1
Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1
Y3R1cmVQbmFtZT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAg
IGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsKLSAgICBpbnQg
aW5kZXggPSBieXRlY29kZS5pbmRleC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3Iub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsK
IAogICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9h
ZChlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjQ0LDkgKzEyNDQsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JH
ZW5lcmljUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAg
ICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVudW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXgub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0Lm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yLm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7
CiAKICAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxv
YWQoZW51bWVyYXRvciwgcmVnVDEpOwpAQCAtMTI3MCw4ICsxMjcwLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IElucwogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVHlwZUxvY2F0aW9uKiBjYWNo
ZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS50eXBlTG9jYXRpb247Ci0gICAgaW50IHZhbHVlVG9Q
cm9maWxlID0gYnl0ZWNvZGUudGFyZ2V0Lm9mZnNldCgpOworICAgIFR5cGVMb2NhdGlvbiogY2Fj
aGVkVHlwZUxvY2F0aW9uID0gbWV0YWRhdGEubV90eXBlTG9jYXRpb247CisgICAgaW50IHZhbHVl
VG9Qcm9maWxlID0gYnl0ZWNvZGUubV90YXJnZXQub2Zmc2V0KCk7CiAKICAgICAvLyBMb2FkIHBh
eWxvYWQgaW4gVDAuIExvYWQgdGFnIGluIFQzLgogICAgIGVtaXRMb2FkUGF5bG9hZCh2YWx1ZVRv
UHJvZmlsZSwgcmVnVDApOwpAQCAtMTM0NCw3ICsxMzQ0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3BybwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZt
KCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAgIHNj
cmF0Y2gxUmVnID0gcmVnVDQ7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLnNjb3BlLm9m
ZnNldCgpLCByZWdUMyk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zm
c2V0KCksIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoc2hhZG93
UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQogCkBAIC0xMzU3LDEwICsxMzU3LDEw
IEBAIHZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBHUFJSZWcg
c2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQg
cmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2Ny
YXRjaDJSZWcpOwotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS50aGlzVmFsdWUub2Zmc2V0
KCksIHJlZ1QyKTsKLSAgICBlbWl0TG9hZFRhZyhieXRlY29kZS50aGlzVmFsdWUub2Zmc2V0KCks
IHJlZ1QxKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0
KCksIHJlZ1QyKTsKKyAgICBlbWl0TG9hZFRhZyhieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQo
KSwgcmVnVDEpOwogICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7Ci0gICAg
ZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpLCByZWdUMyk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKICAgICBsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywg
bV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjQw
MDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
UGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2EuY29tPgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApA
QCAtNTYsOCArNTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIHZvaWQgSklUOjplbWl0X29wX21vdihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYyA9IGJ5dGVjb2RlLnNyYy5vZmZzZXQoKTsK
KyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5
dGVjb2RlLm1fc3JjLm9mZnNldCgpOwogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50
UmVnaXN0ZXJJbmRleChzcmMpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKTsKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW5kKGNvbnN0IEluc3RydWN0aW9uKgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRW5kPigpOwogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BS
ICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLnZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CiAgICAg
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAg
ICAgcmV0KCk7CkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VuZChjb25zdCBJ
bnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm1wPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldCk7CiAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CiB9CiAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbWV0YWRhdGEub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CisgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5tX29iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0
cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9y
SWZFeGlzdHMpOwogCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdChjb25zdCBJbnN0cgogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcs
IEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVk
SW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAg
ICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5kc3Qub2Zmc2V0KCkpOworICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsKICAgICB9
CiB9CiAKQEAgLTEyMCw4ICsxMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVj
dChjb25zdCBJCiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cE5ld09iamVjdD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3Ry
dWN0dXJlKCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5z
dHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgc3RydWN0
dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTI5
LDkgKzEyOSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KGNvbnN0IEkKIHZv
aWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3Ry
dWN0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5oYXNJ
bnN0YW5jZVZhbHVlLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5tX2NvbnN0cnVjdG9yLm9mZnNl
dCgpOworICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZh
bHVlLm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZh
bHVlLCByZWdUMCk7CiAKQEAgLTE1NSw5ICsxNTUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVy
cmlkZXNfaGFzX2luc3RhbmNlCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOwotICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0
KCk7Ci0gICAgaW50IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlLm9mZnNldCgpOworICAgIGlu
dCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIGludCBwcm90byA9IGJ5dGVjb2RlLm1fcHJvdG90eXBl
Lm9mZnNldCgpOwogCiAgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgKGJhc2VWYWwsIHByb3RvLCBh
bmQgdmFsdWUgcmVzcGVjdGl2ZWx5KSBpbnRvIHJlZ2lzdGVycy4KICAgICAvLyBXZSB1c2UgcmVn
VDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5k
IHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KQEAgLTE4Niw3ICsxODYsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
ICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3RhbmNlT2ZzW21f
aW5zdGFuY2VPZkluZGV4KytdOwogICAgIApAQCAtMjA0LDggKzIwNCw4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0VtcHR5PigpOwotICAgIGludCBkc3Qg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFu
ZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKQEAgLTIx
Nyw4ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVjCiB2
b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzVW5kZWZpbmVkPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7
Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUs
IHJlZ1QwKTsKICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMCk7CkBAIC0yNDYs
OCArMjQ2LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IElucwogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkX29yX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcElzVW5kZWZpbmVkT3JOdWxsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsK
KyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOwogCkBAIC0yNjEsOCArMjYxLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfdW5kZWZpbmVkX29yX251bGwoYwogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5v
ZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICB4b3I2NChUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZWdUMCk7CkBAIC0yNzQsOCArMjc0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cgogdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4o
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsK
ICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgdGVz
dDY0KE5vblplcm8sIHJlZ1QwLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4
Niw5ICsyODYsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1CiB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwotICAg
IGludCB0eXBlID0gYnl0ZWNvZGUudHlwZTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwor
ICAgIGludCB0eXBlID0gYnl0ZWNvZGUubV90eXBlOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKQEAgLTMwNyw4ICszMDcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dp
dGhfdHlwZShjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcElzT2JqZWN0PigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KTsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1
Y3Rpb24qCiAKICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0PigpOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCksIHJldHVy
blZhbHVlR1BSKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtMzQzLDggKzM0Myw4IEBAIHZvaWQgSklUOjplbWl0
X29wX3JldChjb25zdCBJbnN0cnVjdGlvbioKIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUuc3Jj
Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwogICAgIApAQCAtMzYwLDE1ICszNjAsMTUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IElucwogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1
bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFt
ZT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmZ1bmN0aW9uLm9mZnNl
dCgpLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5uYW1lLm9m
ZnNldCgpLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Z1
bmN0aW9uLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRl
Y29kZS5tX25hbWUub2Zmc2V0KCksIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blNldEZ1bmN0aW9uTmFtZSwgcmVnVDAsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCksIHJlZ1QwKTsK
IAogICAgIC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2Fz
IHRhZ2dlZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQogICAgIC8vIGNsZWFy
IG90aGVyIHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBv
ciB0cnVlIGlucHV0cyByZXNwZWN0aXZlbHkpLgpAQCAtMzc3LDI4ICszNzcsMjggQEAgdm9pZCBK
SVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKgogICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKSk7CiAgICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlVHJ1ZSkpLCByZWdUMCk7CiAKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmZhbHNlPigpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dCk7CiAKICAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDEgPSBy
ZWdUMTsKICAgICBHUFJSZWcgc2NyYXRjaDIgPSByZWdUMjsKICAgICBib29sIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CiAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLmNvbmRpdGlvbi5vZmZzZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKICAgICBh
ZGRKdW1wKGJyYW5jaElmRmFsc2V5KCp2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gx
LCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lk
IEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
TnVsbD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0gICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRh
cmdldCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
dGFyZ2V0KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC00MjEsOCArNDIx
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Ywogdm9pZCBKSVQ6
OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVs
bD4oKTsKLSAgICBpbnQgc3JjID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7Ci0gICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdl
dCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAgSnVt
cCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CkBAIC00NDYsMTMgKzQ0Niwx
MyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwogICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBz
cmMgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKLSAgICBTcGVjaWFsOjpQb2ludGVyIHB0ciA9
IGJ5dGVjb2RlLnNwZWNpYWxQb2ludGVyOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBzcmMgPSBi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIFNwZWNpYWw6OlBvaW50ZXIgcHRyID0gYnl0
ZWNvZGUubV9zcGVjaWFsUG9pbnRlcjsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogICAgIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVx
dWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihhY3R1YWxQb2ludGVy
Rm9yKG1fY29kZUJsb2NrLCBwdHIpKSk7Ci0gICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1l
dGFkYXRhLmhhc0p1bXBlZCk7CisgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRh
Lm1faGFzSnVtcGVkKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5s
aW5rKHRoaXMpOwogfQpAQCAtNDYwLDE4ICs0NjAsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5l
cV9wdHIoY29uc3QgSW5zdHJ1Ywogdm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVj
b2RlLmxocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLnJocy5vZmZzZXQoKSwgcmVnVDEpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdU
MCwgYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDAsIHJlZ1QxLCByZWdUMik7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdU
MSwgcmVnVDAsIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZHN0Lm9mZnNldCgp
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BKZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0
ZWNvZGUubGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUucmhzLm9mZnNldCgpLCByZWdUMSk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fdGFyZ2V0KTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5t
X2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CiAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFk
ZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC00Nzks
MzIgKzQ3OSwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qCiB2
b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRy
dWU+KCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKIAogICAgIEdQUlJlZyB2YWx1
ZSA9IHJlZ1QwOwogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJlZyBzY3Jh
dGNoMiA9IHJlZ1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmNvbmRpdGlvbi5v
ZmZzZXQoKSwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9j
b25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5KCp2
bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBS
ZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpLCB0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVycyhieXRlY29kZS5saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5yaHMub2Zmc2V0KCks
IHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZz
ZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNvbXBhcmUzMihO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUuZHN0Lm9mZnNldCgpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhieXRlY29kZS5saHMub2Zmc2V0KCksIHJlZ1QwLCBieXRlY29kZS5yaHMu
b2Zmc2V0KCksIHJlZ1QxKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QxKSwg
dGFyZ2V0KTsKIH0KQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhj
b25zdCBJbnN0cnVjdGlvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUaHJvdz4oKTsKICAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAg
IGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVu
dHJ5RnJhbWUpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUudmFsdWUub2Zm
c2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCksIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhv
cGVyYXRpb25UaHJvdywgcmVnVDApOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkp
OwogfQpAQCAtNTIzLDkgKzUyMyw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Ci0gICAgaW50IHNy
YzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAg
aW50IHNyYzIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CiAgICAgCkBAIC01NjYsOSArNTY2
LDkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFK
dW1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmlj
dEVxVHlwZSB0eXBlKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wPigpOwotICAgIGludCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUudGFyZ2V0KTsKLSAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQo
KTsKLSAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICBpbnQgdGFyZ2V0
ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKKyAg
ICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0
ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMx
LCByZWdUMCwgc3JjMiwgcmVnVDEpOwogCkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3Rl
cT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXQpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMCwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9
CkBAIC02MTcsNyArNjE3LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoY29u
c3QgSQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuc3RyaWN0ZXE+KCk7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7Cisg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RF
cSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtNjI1LDggKzYyNSw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEkKIHZvaWQgSklUOjplbWl0X29wX3Rv
X251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+KCk7Ci0gICAg
aW50IGRzdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBi
eXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3RWUmVnID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CisgICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0
KCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CiAgICAgCiAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKQEAgLTYzOSwyMCArNjM5
LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnUKIHZvaWQgSklU
OjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJp
bmc+KCk7Ci0gICAgaW50IHNyY1ZSZWcgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOworICAg
IGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RTdHJpbmcocmVn
VDApKTsKIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZHN0Lm9mZnNldCgp
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BUb09iamVjdD4oKTsKLSAgICBpbnQgZHN0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKTsKLSAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CisgICAg
aW50IGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjVlJlZyA9
IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY1ZSZWcsIHJlZ1QwKTsKIAogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwpAQCAtNjgzLDEwICs2ODMsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3Qg
SW5zdHJ1Y3RpbwogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwogICAgIGxv
YWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CiAgICAg
c3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNz
KHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLmV4Y2VwdGlvbi5vZmZzZXQoKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2V4Y2VwdGlvbi5vZmZzZXQoKSk7CiAKICAgICBsb2FkNjQoQWRkcmVz
cyhyZWdUMCwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpKSwgcmVnVDApOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUudGhyb3duVmFsdWUub2Zmc2V0KCkpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aHJvd25WYWx1ZS5vZmZzZXQoKSk7CiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcg
dGhlIHByb2Nlc3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKQEAgLTY5NCw3ICs2OTQs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAogCiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmFsdWVQcm9m
aWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEuYnVmZmVyOworICAgIFZhbHVl
UHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRhLm1fYnVmZmVyOwogICAg
IGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsIG1fYnl0ZWNvZGVPZmZzZXQpOwogICAg
IGVsc2UKQEAgLTcyMSwxOCArNzIxLDE4IEBAIHZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dp
dGhfcHJvZmlsZSgKIHZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldFBhcmVudFNjb3BlPigpOwotICAgIGludCBjdXJyZW50
U2NvcGUgPSBieXRlY29kZS5zY29wZS5vZmZzZXQoKTsKKyAgICBpbnQgY3VycmVudFNjb3BlID0g
Ynl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6
b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5kc3Qu
b2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKLSAgICBzaXplX3QgdGFibGVJbmRl
eCA9IGJ5dGVjb2RlLnRhYmxlSW5kZXg7Ci0gICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5kZWZhdWx0T2Zmc2V0KTsKLSAg
ICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29kZS5zY3J1dGluZWUub2Zmc2V0KCk7CisgICAg
c2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5kZXg7CisgICAgdW5zaWduZWQg
ZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5t
X2RlZmF1bHRPZmZzZXQpOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2Ny
dXRpbmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBk
ZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1w
VGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpOwpAQCAtNzQ3LDkgKzc0Nyw5IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29u
c3QgSW5zdHIKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOwotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0
ZWNvZGUudGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOwotICAgIHVuc2ln
bmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLnNjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBzaXplX3Qg
dGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKKyAgICB1bnNpZ25lZCBkZWZhdWx0
T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVs
dE9mZnNldCk7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUu
b2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0
aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSog
anVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBA
IC03NjQsOSArNzY0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5z
dAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wU3dpdGNoU3RyaW5nPigpOwotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNv
ZGUudGFibGVJbmRleDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOwotICAgIHVuc2lnbmVk
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLnNjcnV0aW5lZS5vZmZzZXQoKTsKKyAgICBzaXplX3QgdGFi
bGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKKyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zm
c2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fZGVmYXVsdE9m
ZnNldCk7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUubV9zY3J1dGluZWUub2Zm
c2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVt
cFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
CkBAIC03ODIsMTUgKzc4MiwxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1Zyhjb25zdCBJbnN0
cnVjdGlvCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1
Zz4oKTsKICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCks
IHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1Zywgc3RhdGljX2Nhc3Q8
aW50PihieXRlY29kZS5kZWJ1Z0hvb2tUeXBlKSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25EZWJ1Zywgc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5tX2RlYnVnSG9va1R5cGUpKTsKICAg
ICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5v
cGVyYW5kLm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsK
KyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtODIyLDggKzgyMiw4IEBAIHZvaWQgSklUOjplbWl0
X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3QKIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNyYzEgPSBieXRlY29kZS5vcGVyYW5kLm9m
ZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
c3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5v
dENlbGwocmVnVDApOwpAQCAtODY4LDcgKzg2OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVy
KGNvbnN0IEluc3RydWN0aW8KIHZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0U2NvcGU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CiAg
ICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBy
ZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwpAQCAt
ODc4LDggKzg3OCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3QgSW5zdHJ1Y3QK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4o
KTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4qIGNhY2hlZFN0cnVjdHVyZSA9ICZtZXRh
ZGF0YS5jYWNoZWRTdHJ1Y3R1cmU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5zcmNEc3Qub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVy
ZT4qIGNhY2hlZFN0cnVjdHVyZSA9ICZtZXRhZGF0YS5tX2NhY2hlZFN0cnVjdHVyZTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0Lm9mZnNldCgpLCByZWdUMSk7
CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwogCkBAIC04OTQsOCAr
ODk0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdAogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUuY2FsbGVlLm9mZnNldCgpOwotICAgIFdyaXRlQmFycmll
ckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEuY2FjaGVkQ2FsbGVlOwor
ICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZS5vZmZzZXQoKTsKKyAgICBXcml0ZUJh
cnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJm1ldGFkYXRhLm1fY2FjaGVkQ2Fs
bGVlOwogICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCBy
YXJlRGF0YVJlZyA9IHJlZ1Q0OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBA
IC05MjYsMTMgKzkyNiwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJ
bnN0CiAgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5kc3Qub2Zm
c2V0KCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0
KCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENoZWNrVGR6PigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUudGFyZ2V0Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX3RhcmdldC5vZmZzZXQoKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDApKTsKIH0KIApAQCAtOTQ2LDcgKzk0Niw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9lcShjb25zdCBJbnN0cnVjdGkKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVxPigpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZUVxLCByZWdUMCwgcmVnVDEpOwogICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpT
VmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CiB9
CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTk1
Nyw3ICs5NTcsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QwLCByZWdUMSk7CiAgICAg
eG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZh
bHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUuZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CisgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSwgcmV0dXJuVmFs
dWVHUFIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCkBAIC05NjUsNyArOTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShjb25zdCBJ
bnN0cnVjdAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUu
bV90YXJnZXQpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMCwg
cmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CkBAIC05NzUsNyArOTc1LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1YwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7
Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLnRhcmdldCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgcmVnVDAsIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQpAQCAtOTg1LDEwICs5
ODUsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKAogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsK
LSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKLSAg
ICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUub2Zmc2V0
KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50IGNvbnN0cnVjdG9yID0gYnl0
ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKKyAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9
IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNv
bnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMDY1LDggKzEwNjUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdSZWdleHA+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgcmVnZXhwID0gYnl0ZWNvZGUucmVnZXhw
Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgcmVnZXhwID0gYnl0ZWNvZGUubV9yZWdleHAub2Zmc2V0KCk7CiAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25OZXdSZWdleHAsIGpzQ2FzdDxSZWdFeHAqPihtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQocmVnZXhwKSkpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiB9CkBAIC0xMDc2LDE0ICsxMDc2LDE0IEBAIHZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihj
b25zdCBJbnN0cnUKIHsKICAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLnNjb3Bl
Lm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5t
X3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CiAjZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRl
Y29kZS5zY29wZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29k
ZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CiAjZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5mdW5jdGlv
bkRlY2wpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2NvZGVCbG9jay0+
ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKIAogICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gT3A6Om9wY29kZUlEOwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVuYykK
QEAgLTExMjIsMTQgKzExMjIsMTQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6
ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CiAjZWxz
ZQotICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5zY29wZS5vZmZzZXQoKSwgcmVnVDApOwor
ICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CiAj
ZW5kaWYKIAotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+
ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLmZ1bmN0aW9uRGVjbCk7CisgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpOwogICAgIE9wY29kZUlEIG9wY29kZUlEID0gT3A6Om9wY29kZUlEOwogCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKQEAgLTExNjgsMjggKzExNjgsMjggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3QXJyYXk+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWVzSW5kZXggPSBieXRlY29kZS5h
cmd2Lm9mZnNldCgpOwotICAgIGludCBzaXplID0gYnl0ZWNvZGUuYXJnYzsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlc0luZGV4ID0gYnl0ZWNv
ZGUubV9hcmd2Lm9mZnNldCgpOworICAgIGludCBzaXplID0gYnl0ZWNvZGUubV9hcmdjOwogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFByb2ZpbGUsIGRzdCwKLSAgICAgICAgJm1ldGFkYXRhLmFycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHJlZ1QwLCBzaXplKTsKKyAgICAgICAgJm1ldGFkYXRhLm1fYXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSwgcmVnVDAsIHNpemUpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
d2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdpdGhTaXpl
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IHNpemVJbmRl
eCA9IGJ5dGVjb2RlLmxlbmd0aC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CisgICAgaW50IHNpemVJbmRleCA9IGJ5dGVjb2RlLm1fbGVuZ3RoLm9mZnNl
dCgpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXpl
SW5kZXgsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emVBbmRQcm9maWxlLCBkc3QsCi0gICAgICAgICZtZXRhZGF0YS5hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCByZWdUMCk7CisgICAgICAgICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUs
IHJlZ1QwKTsKICNlbHNlCiAgICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRz
dCwKLSAgICAgICAgJm1ldGFkYXRhLmFycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOworICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKICNlbmRpZgogfQogCkBAIC0xMTk3LDkg
KzExOTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvCiB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsK
LSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yLm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0x
MjQzLDEwICsxMjQzLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KGMKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0lu
ZGV4ZWRQcm9wZXJ0eT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAg
IGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEuYXJyYXlQcm9maWxlOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsKQEAgLTEyODks
OSArMTI4OSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXIKICAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0
KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHkub2Zmc2V0KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7CkBAIC0xMzA4LDEwICsxMzA4LDEwIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXIKIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3Rf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwot
ICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRl
Y29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLmluZGV4Lm9mZnNl
dCgpOwotICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsK
KyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eC5vZmZzZXQoKTsKKyAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5v
ZmZzZXQoKTsKIAogICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEzNDksOSArMTM0OSw5IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QKIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVudW1lcmF0b3Iub2Zmc2V0
KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXgub2Zmc2V0KCk7CisgICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXgub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMzcz
LDkgKzEzNzMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wCiB2
b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVu
dW1lcmF0b3Iub2Zmc2V0KCk7Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXgub2Zmc2V0
KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIGludCBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBy
ZWdUMSk7CkBAIC0xMzk4LDggKzEzOTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5
cGUoY29uc3QgSW5zCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQcm9maWxlVHlwZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKLSAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9
IG1ldGFkYXRhLnR5cGVMb2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29k
ZS50YXJnZXQub2Zmc2V0KCk7CisgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24g
PSBtZXRhZGF0YS5tX3R5cGVMb2NhdGlvbjsKKyAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRl
Y29kZS5tX3RhcmdldC5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTQ2Nyw3ICsxNDY3LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3BybwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5v
bkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAgICBH
UFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0
KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5zY29wZS5vZmZzZXQoKSwgcmVnVDMpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVn
VDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcs
IHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKQEAgLTE0ODAsOCArMTQ4MCw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWkKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcg
PSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAg
ICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUudGhpc1ZhbHVlLm9mZnNldCgpLCBy
ZWdUMik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5zY29wZS5vZmZzZXQo
KSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV90aGlzVmFs
dWUub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tl
dChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2Nr
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpKTsKIH0KIApAQCAtMTQ5MSw3ICsxNDkx
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zsb3coYwogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZUNvbnRyb2xGbG93
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OwotICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xvY2F0aW9uID0gbWV0YWRhdGEu
YmFzaWNCbG9ja0xvY2F0aW9uOworICAgIEJhc2ljQmxvY2tMb2NhdGlvbiogYmFzaWNCbG9ja0xv
Y2F0aW9uID0gbWV0YWRhdGEubV9iYXNpY0Jsb2NrTG9jYXRpb247CiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7CiAjZWxz
ZQpAQCAtMTUwMiw3ICsxNTAyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9s
X2Zsb3coYwogdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CiAg
ICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1Qw
KTsKICAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHQgPSBKU1ZhbHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsK
QEAgLTE1MTMsOCArMTUxMyw4IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNv
bnN0IEkKIHZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0UmVzdExlbmd0aD4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpOwotICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm51
bVBhcmFtZXRlcnNUb1NraXA7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGJ5dGVjb2RlLm1fbnVtUGFyYW1ldGVy
c1RvU2tpcDsKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50KSwgcmVnVDApOwogICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwogICAgIEp1
bXAgemVyb0xlbmd0aCA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDAsIEltbTMyKG51
bVBhcmFtc1RvU2tpcCkpOwpAQCAtMTU0Myw4ICsxNTQzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3Jlc3RfbGVuZ3RoKGNvbnN0IAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRBcmd1bWVudD4oKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLmluZGV4
OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyhyZWdUMCk7CiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNDAwMjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTY2MSw3
ICsxNjYxLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25UcnlPU1JFbnRlcgogICAg
IGNvZGVCbG9jay0+ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZU9mZnNl
dChieXRlY29kZUluZGV4KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChieXRlY29kZUluZGV4KS0+YXM8T3BDYXRjaD4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgbWV0YWRhdGEuYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1l
dGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJv
ZmlsZSkgewogICAgICAgICBwcm9maWxlLm1fcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVl
OjplbmNvZGUoZXhlYy0+dW5jaGVja2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsK
ICAgICB9KTsKIApAQCAtMjI5Miw5ICsyMjkyLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJs
b2NrKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RnJvbVNjb3BlPigpOwot
ICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLnZhcik7Ci0gICAgSlNPYmplY3QqIHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oZXhlYy0+
dW5jaGVja2VkUihieXRlY29kZS5zY29wZS5vZmZzZXQoKSkuanNWYWx1ZSgpKTsKLSAgICBHZXRQ
dXRJbmZvJiBnZXRQdXRJbmZvID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5nZXRQdXRJ
bmZvOworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLm1fdmFyKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLmpzVmFsdWUoKSk7
CisgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
aykubV9nZXRQdXRJbmZvOwogCiAgICAgLy8gTW9kdWxlVmFyIGlzIGFsd2F5cyBjb252ZXJ0ZWQg
dG8gQ2xvc3VyZVZhciBmb3IgZ2V0X2Zyb21fc2NvcGUuCiAgICAgQVNTRVJUKGdldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKSAhPSBNb2R1bGVWYXIpOwpAQCAtMjMzNCwxOCArMjMzNCwxOCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spOwogCi0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUudmFyKTsKLSAgICBKU09iamVjdCogc2NvcGUgPSBq
c0Nhc3Q8SlNPYmplY3QqPihleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgp
KS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5yKGJ5dGVjb2RlLnZhbHVl
Lm9mZnNldCgpKS5qc1ZhbHVlKCk7Ci0gICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFk
YXRhLmdldFB1dEluZm87CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOworICAgIEpTT2JqZWN0KiBzY29wZSA9IGpzQ2Fz
dDxKU09iamVjdCo+KGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSku
anNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+cihieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpKS5qc1ZhbHVlKCk7CisgICAgR2V0UHV0SW5mbyYgZ2V0UHV0SW5mbyA9IG1ldGFk
YXRhLm1fZ2V0UHV0SW5mbzsKIAogICAgIC8vIE1vZHVsZVZhciBkb2VzIG5vdCBrZWVwIHRoZSBz
Y29wZSByZWdpc3RlciB2YWx1ZSBhbGl2ZSBpbiBERkcuCiAgICAgQVNTRVJUKGdldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKSAhPSBNb2R1bGVWYXIpOwogCiAgICAgaWYgKGdldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1l
bnQqIGVudmlyb25tZW50ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oc2NvcGUpOwot
ICAgICAgICBlbnZpcm9ubWVudC0+dmFyaWFibGVBdChTY29wZU9mZnNldChtZXRhZGF0YS5vcGVy
YW5kKSkuc2V0KHZtLCBlbnZpcm9ubWVudCwgdmFsdWUpOwotICAgICAgICBpZiAoV2F0Y2hwb2lu
dFNldCogc2V0ID0gbWV0YWRhdGEud2F0Y2hwb2ludFNldCkKKyAgICAgICAgZW52aXJvbm1lbnQt
PnZhcmlhYmxlQXQoU2NvcGVPZmZzZXQobWV0YWRhdGEubV9vcGVyYW5kKSkuc2V0KHZtLCBlbnZp
cm9ubWVudCwgdmFsdWUpOworICAgICAgICBpZiAoV2F0Y2hwb2ludFNldCogc2V0ID0gbWV0YWRh
dGEubV93YXRjaHBvaW50U2V0KQogICAgICAgICAgICAgc2V0LT50b3VjaCh2bSwgIkV4ZWN1dGVk
IG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDI0MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwx
MCArNTAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwot
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkg
PSBieXRlY29kZS5wcm9wZXJ0eTsKLSAgICBpbnQgb3B0aW9ucyA9IGJ5dGVjb2RlLmF0dHJpYnV0
ZXM7Ci0gICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLmFjY2Vzc29yLm9mZnNldCgpOworICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7CisgICAgaW50IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0
ZXM7CisgICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCk7CiAKICAg
ICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0
ZXIsIHJlZ1QzKTsKQEAgLTYzLDEwICs2MywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X2lkKGNvbnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5w
cm9wZXJ0eTsKLSAgICBpbnQgb3B0aW9ucyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7Ci0gICAgaW50
IHNldHRlciA9IGJ5dGVjb2RlLmFjY2Vzc29yLm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHk7CisgICAgaW50IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgaW50
IHNldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3Iub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZFBh
eWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsK
QEAgLTc2LDExICs3NiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKGNv
bnN0CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBpbnQgYmFz
ZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUu
cHJvcGVydHk7Ci0gICAgaW50IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOwotICAg
IGludCBnZXR0ZXIgPSBieXRlY29kZS5nZXR0ZXIub2Zmc2V0KCk7Ci0gICAgaW50IHNldHRlciA9
IGJ5dGVjb2RlLnNldHRlci5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAg
IGludCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgIGludCBnZXR0ZXIg
PSBieXRlY29kZS5tX2dldHRlci5vZmZzZXQoKTsKKyAgICBpbnQgc2V0dGVyID0gYnl0ZWNvZGUu
bV9zZXR0ZXIub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwog
ICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKQEAgLTkxLDEwICs5MSwxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pCiB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0
dGVyQnlWYWw+KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwotICAgIGludDMyX3Qg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7Ci0gICAgaW50IGdldHRlciA9IGJ5dGVj
b2RlLmFjY2Vzc29yLm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7
CisgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgIGlu
dCBnZXR0ZXIgPSBieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQ
YXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1Qw
KTsKQEAgLTEwNSwxMCArMTA1LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlf
dmFsKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZhbD4oKTsKLSAgICBpbnQgYmFzZSA9IGJ5
dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVy
dHkub2Zmc2V0KCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUuYXR0cmlidXRl
czsKLSAgICBpbnQgc2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCk7CisgICAgaW50
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRl
Y29kZS5tX2F0dHJpYnV0ZXM7CisgICAgaW50IHNldHRlciA9IGJ5dGVjb2RlLm1fYWNjZXNzb3Iu
b2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRM
b2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOwpAQCAtMTE5LDkgKzExOSw5IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFz
ZS5vZmZzZXQoKTsKLSAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eTsKKyAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0
eTsKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCkpOwogfQpAQCAtMTI5
LDkgKzEyOSw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBp
bnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwogICAgIGVtaXRMb2Fk
MihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIH0KQEAgLTE0MCwxMCAr
MTQwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHIKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29k
ZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9m
ZnNldCgpOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2Zp
bGU7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxv
Y2stPmFkZEJ5VmFsSW5mbygpOwogCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwg
cHJvcGVydHksIHJlZ1QzLCByZWdUMik7CkBAIC0yMDAsNyArMjAwLDcgQEAgSklUR2V0QnlJZEdl
bmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdAogICAgIC8vIHByb3BlcnR5OiB0YWcocmVnVDMp
LCBwYXlsb2FkKHJlZ1QyKQogICAgIC8vIHNjcmF0Y2g6IHJlZ1Q0CiAKLSAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QzKSk7CiAg
ICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDIsIHJlZ1Q0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC0yMjYsOSArMjI2LDkgQEAgSklUR2V0QnlJZEdlbmVy
YXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5v
ZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgp
OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawpAQCAtMjcxLDkgKzI3MSw5IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHIKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVj
b2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHku
b2Zmc2V0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJv
ZmlsZTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOworICAgIEFycmF5UHJvZmls
ZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKICAgICBlbWl0TG9h
ZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKQEAgLTMyMSw5
ICszMjEsOSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQogewogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQo
KTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEuYXJyYXlQcm9maWxlOwor
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAg
IApAQCAtMzgyLDkgKzM4Miw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExp
c3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwotICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CisgICAgaW50IGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZz
ZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2Zp
bGU7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgCkBAIC00MjMsOCArNDIzLDggQEAg
SklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8vIGJhc2U6IHRh
ZyhyZWdUMSksIHBheWxvYWQocmVnVDApCiAgICAgLy8gcHJvcGVydHk6IHRhZyhyZWdUMyksIHBh
eWxvYWQocmVnVDIpCiAKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qz
KSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDIsIHJlZ1Qy
LCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC00NjMsOSArNDYzLDkgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSQogICAgIGludCB2YWx1ZTsKIAogICAgIGF1
dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5i
YXNlLm9mZnNldCgpOwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNl
dCgpOwotICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgICAgICBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1
ZS5vZmZzZXQoKTsKICAgICB9OwogCiAgICAgaWYgKGlzRGlyZWN0KQpAQCAtNDkzLDkgKzQ5Myw5
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEkKIHZvaWQgSklUOjpl
bWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdl
dEJ5SWQ+KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9h
ZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlLCByZWdUMSk7CkBAIC01MTYsOCArNTE2LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Ry
eV9nZXRfYnlfaWQoY29ucwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7Ci0gICAg
aW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5
KSk7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIApAQCAtNTMyLDkgKzUzMiw5IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9IGJ5
dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCBy
ZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CkBAIC01NTUsOCArNTU1LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9k
aXJlY3QoYwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgaW50IHJl
c3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7Cisg
ICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKIApAQCAtNTcyLDE2ICs1NzIsMTYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9m
ZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
cHJvcGVydHkpKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CiAKICAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgSnVtcCBub3RBcnJheUxlbmd0aE1vZGUgPSBicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhf
dD4oR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoKSkpOwotICAgICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCAmbWV0YWRhdGEubW9kZU1ldGFkYXRhLmFycmF5
TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpOworICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9k
ZSA9IGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9tb2RlKSwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0
aCkpKTsKKyAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdU
MiwgJm1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUp
OwogICAgICAgICBub3RBcnJheUxlbmd0aE1vZGUubGluayh0aGlzKTsKICAgICB9CiAKQEAgLTYw
MSw4ICs2MDEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluCiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVj
b2RlLmRzdC5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAg
ICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4Kytd
OwogICAgIApAQCAtNjE2LDEwICs2MTYsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV9pZChjb25zdCBJbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNl
Lm9mZnNldCgpOwotICAgIGludCB0aGlzVlJlZyA9IGJ5dGVjb2RlLnRoaXNWYWx1ZS5vZmZzZXQo
KTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50
IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zmc2V0KCk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKTsKICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVt
aXRMb2FkKHRoaXNWUmVnLCByZWdUNCwgcmVnVDMpOwpAQCAtNjQyLDggKzY0Miw4IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJ
ZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0
aFRoaXNJbmRleCsrXTsKICAgICAKQEAgLTY2MSw5ICs2NjEsOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1CiAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUg
JiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCiAgICAg
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigp
OwotICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKLSAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2Rl
LmZsYWdzICYgUHV0QnlJZElzRGlyZWN0KTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFz
ZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwor
ICAgIGJvb2wgZGlyZWN0ID0gISEoYnl0ZWNvZGUubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCk7
CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1QzLCBy
ZWdUMik7CiAgICAgCkBAIC02ODcsOCArNjg3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbgogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7Ci0gICAgaW50
IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAg
IGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogCkBAIC03MDYsOSArNzA2LDkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChjb25zdCBJbgogdm9pZCBKSVQ6OmVt
aXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsK
LSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlID0gYnl0
ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJl
Z1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1Qx
KTsKQEAgLTcyOCw4ICs3MjgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29u
c3QgSW5zCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOwotICAgIGludCByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCBy
ZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkp
KTsKIAogICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5k
ZXgrK107CiAKQEAgLTc2MSwxMCArNzYxLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgp
OwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOwotICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEucmVzb2x2ZVR5cGU7Ci0gICAgdW5zaWduZWQgZGVw
dGggPSBtZXRhZGF0YS5sb2NhbFNjb3BlRGVwdGg7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7
CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX3Jlc29sdmVUeXBlOwor
ICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubV9sb2NhbFNjb3BlRGVwdGg7CiAKICAgICBh
dXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBz
d2l0Y2ggKHJlc29sdmVUeXBlKSB7CkBAIC03ODgsNyArNzg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTW9kdWxlVmFyOgogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5s
ZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CiAg
ICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoKQEAgLTgwNCw3ICs4MDQsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICAvLyBTaW5jZSB0aGVzZSBHbG9iYWxQcm9wZXJ0eSBjYW4gYmUgY2hhbmdlZCB0byBHbG9iYWxM
ZXhpY2FsVmFyLCB3ZSBzaG91bGQgbG9hZCB0aGUgdmFsdWUgZnJvbSBtZXRhZGF0YS4KLSAgICAg
ICAgSlNTY29wZSoqIGNvbnN0YW50U2NvcGVTbG90ID0gbWV0YWRhdGEuY29uc3RhbnRTY29wZS5z
bG90KCk7CisgICAgICAgIEpTU2NvcGUqKiBjb25zdGFudFNjb3BlU2xvdCA9IG1ldGFkYXRhLm1f
Y29uc3RhbnRTY29wZS5zbG90KCk7CiAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwogICAgICAgICBsb2FkUHRyKGNvbnN0YW50
U2NvcGVTbG90LCByZWdUMCk7CkBAIC04MTQsNyArODE0LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbgogICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgogICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAg
ICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEucmVzb2x2ZVR5
cGUsIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX3Jlc29sdmVUeXBlLCByZWdU
MCk7CiAKICAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CiAgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5KTsKQEAgLTg3OCwxMSArODc4LDExIEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOwotICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZlVHlw
ZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5zdHJ1Y3R1cmUu
c2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5vcGVyYW5kKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CisgICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsK
KyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOworICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0
cnVjdHVyZS5zbG90KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAgICAgCiAgICAgYXV0byBl
bWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CkBAIC05MzksNyAr
OTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
Jm1ldGFkYXRhLmdldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5t
X2dldFB1dEluZm8sIHJlZ1QwKTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dElu
Zm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAg
ICAgICBKdW1wIGlzTm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihyZXNvbHZlVHlwZSkpOwpAQCAtOTU0LDcgKzk1NCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRh
LmdldFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dElu
Zm8sIHJlZ1QwKTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVC
aXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1w
IGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihH
bG9iYWxQcm9wZXJ0eSkpOwpAQCAtOTkzLDcgKzk5Myw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfZnJvbV9zY29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7
Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGN1
cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKQEAgLTEwMjksMTIgKzEwMjksMTIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IElucwogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBieXRl
Y29kZS5zY29wZS5vZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZz
ZXQoKTsKKyAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIGlu
dCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAgICAgR2V0UHV0SW5mbyBnZXRQ
dXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CiAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCA9IG1ldGFkYXRhLnN0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBv
cGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm9wZXJh
bmQpOworICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVy
ZS5zbG90KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Kj4oJm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAgICAgCiAgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CkBAIC0xMDY4LDkgKzEwNjgs
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAgICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCB2YWx1ZSwgJm1ldGFkYXRhLndhdGNocG9pbnRTZXQpOworICAgICAgICAgICAg
ICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS53YXRjaHBvaW50
U2V0KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9z
dXJlVmFyOgpAQCAtMTA3OCw3ICsxMDc4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKGNvbnN0IElucwogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVW
YXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLndhdGNocG9pbnRTZXQpOwor
ICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUs
IG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKQEAgLTEwOTQsNyArMTA5NCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZtZXRh
ZGF0YS5nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9nZXRQ
dXRJbmZvLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0
eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCiAKICAgICAgICAg
SnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIocmVzb2x2ZVR5cGUpKTsKQEAgLTExMTMsNyArMTExMyw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAg
ICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLmdldFB1dElu
Zm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1Qw
KTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwpAQCAtMTE2MSw5ICsxMTYxLDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOwotICAgIGludCBk
c3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2Rl
LmFyZ3VtZW50cy5vZmZzZXQoKTsKLSAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleDsKKyAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGFyZ3VtZW50cyA9
IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CiAgICAgCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwog
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZzZXQpLCBy
ZWdUMSk7CkBAIC0xMTc1LDkgKzExNzUsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9h
cmd1bWVudHMoY29uCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKLSAgICBpbnQgYXJndW1l
bnRzID0gYnl0ZWNvZGUuYXJndW1lbnRzLm9mZnNldCgpOwotICAgIGludCBpbmRleCA9IGJ5dGVj
b2RlLmluZGV4OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAg
IGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBpbnQg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjQwMDI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01NSwxMCArNTUsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cgogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlWYWw+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQg
YmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNv
ZGUucHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLmFycmF5UHJvZmlsZTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3Bl
cnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCBKSVRHZXRCeUlkR2VuZXJh
dG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0CiAgICAgLy8gcHJvcGVydHk6IHJlZ1QxCiAgICAgLy8g
c2NyYXRjaDogcmVnVDMKIAotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogCiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKICAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hl
Y2soYnlWYWxJbmZvLCByZWdUMSwgcmVnVDMsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKQEAg
LTE1OSw5ICsxNTksOSBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0
CiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9
IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJv
cGVydHkub2Zmc2V0KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwor
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CiAgICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZh
bEluZm87CiAgICAgCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8v
IGJhc2UgY2VsbCBjaGVjawpAQCAtMjA1LDkgKzIwNSw5IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV92YWwoY29uc3QgSW5zdHIKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0g
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKKyAgICBpbnQgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5t
X3Byb3BlcnR5Lm9mZnNldCgpOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRCeVZhbEluZm8oKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOwpAQCAtMjY1LDggKzI2NSw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKIHsKICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEuYXJyYXlQcm9maWxlOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1f
dmFsdWUub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwogICAgIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKIApAQCAtMjk2LDcg
KzI5Niw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXMKICAgICB9
CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0b3JlNjQocmVnVDMsIEJhc2VJ
bmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmll
cihieXRlY29kZS5iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
Q1JBU0goKTsKQEAgLTMyMyw4ICszMjMsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0
KCk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsK
KyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CiAgICAgCkBAIC0zMzcsNyArMzM3LDcgQEAgSklUOjpKdW1wTGlzdCBK
SVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeQogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBzdG9yZTY0KHJl
Z1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5iYXNlLm9mZnNl
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0
ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgIEp1
bXAgZW5kID0ganVtcCgpOwogICAgIAogICAgIGVtcHR5LmxpbmsodGhpcyk7CkBAIC0zNjIsOCAr
MzYyLDggQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdAogICAgIC8v
IHByb3BlcnR5OiByZWdUMQogICAgIC8vIHNjcmF0Y2g6IHJlZ1QyCiAKLSAgICBpbnQgYmFzZSA9
IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUu
b2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKIAogICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNo
ZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBA
IC0zOTcsOSArMzk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3Qg
SQogICAgIGludCB2YWx1ZTsKIAogICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7
Ci0gICAgICAgIGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgICAgICBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwotICAgICAgICB2YWx1ZSA9IGJ5dGVjb2Rl
LnZhbHVlLm9mZnNldCgpOworICAgICAgICBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
OworICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHkub2Zmc2V0KCk7CisgICAg
ICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKICAgICB9OwogCiAgICAgaWYg
KGlzRGlyZWN0KQpAQCAtNDI1LDU3ICs0MjUsNTcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoY29uc3QgSQogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBpbnQz
Ml90IG9wdGlvbnMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKKyAgICBp
bnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdUMCwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0gICAgaW50MzJfdCBvcHRpb25zID0g
Ynl0ZWNvZGUuYXR0cmlidXRlczsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
LmFjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAgaW50MzJfdCBvcHRpb25z
ID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0
ZWNvZGUubV9hY2Nlc3Nvci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLm1fcHJvcGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9
IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLnNldHRlci5vZmZzZXQoKSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUucHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVnVDIpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7CisgICAg
aW50MzJfdCBhdHRyaWJ1dGUgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2dldHRlci5vZmZzZXQoKSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zZXR0ZXIub2Zmc2V0KCksIHJlZ1QyKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDAsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRl
LCByZWdUMSwgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5iYXNlLm9mZnNldCgpLCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKSwgcmVn
VDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7Ci0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5hY2Nlc3NvciwgcmVnVDIpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCByZWdUMCk7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpLCBy
ZWdUMSk7CisgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRyaWJ1dGVzOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3NvciwgcmVnVDIpOwog
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QwLCByZWdUMSwg
YXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5iYXNlLm9mZnNldCgpLCByZWdUMCk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKSwg
cmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5hY2Nlc3Nvci5vZmZzZXQoKSwgcmVn
VDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgp
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5
Lm9mZnNldCgpLCByZWdUMSk7CisgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9h
dHRyaWJ1dGVzOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nv
ci5vZmZzZXQoKSwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVy
QnlWYWwsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+
KCk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgYmFzZSA9
IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJv
cGVydHk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1bHQsIGRzdCwgcmVn
VDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCkpOwogfQpAQCAtNDgz
LDkgKzQ4Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnUKIHZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cERlbEJ5VmFsPigpOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAg
aW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwotICAgIGludCBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBp
bnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
cHJvcGVydHksIHJlZ1QxKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFs
SlNSZXN1bHQsIGRzdCwgcmVnVDAsIHJlZ1QxKTsKQEAgLTQ5NCw5ICs0OTQsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RyCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlf
Z2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwot
ICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNl
VlJlZyA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAg
aW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZVZS
ZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKIApAQCAtNTE4LDgg
KzUxOCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnMKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUuZHN0Lm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCByZXN1bHRWUmVn
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107
CiAKQEAgLTUzMyw5ICs1MzMsOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZChjb25zCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLmJhc2Uu
b2Zmc2V0KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uu
b2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKIApAQCAtNTU3LDggKzU1Nyw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGMKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
RGlyZWN0PigpOwotICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKQEAgLTU3MywxNyArNTcz
LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnUKIHsKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0g
Ynl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlVlJlZyA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwogICAgIAogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogICAgIAogICAgIGlmICgqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewotICAgICAgICBKdW1wIG5vdEFycmF5TGVuZ3RoTW9kZSA9IGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubW9kZSksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDx1aW50OF90PihHZXRCeUlkTW9kZTo6QXJyYXlMZW5ndGgpKSk7Ci0gICAgICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsICZtZXRhZGF0YS5tb2RlTWV0YWRh
dGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5UHJvZmlsZSk7CisgICAgICAgIEp1bXAgbm90QXJyYXlM
ZW5ndGhNb2RlID0gYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5t
X21vZGUpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDhfdD4oR2V0QnlJZE1vZGU6OkFy
cmF5TGVuZ3RoKSkpOworICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHJlZ1QxLCAmbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuYXJyYXlMZW5ndGhNb2RlLmFycmF5
UHJvZmlsZSk7CiAgICAgICAgIG5vdEFycmF5TGVuZ3RoTW9kZS5saW5rKHRoaXMpOwogICAgIH0K
IApAQCAtNjAxLDEwICs2MDEsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0
IEluc3RydQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGludCBiYXNlVlJlZyA9IGJ5dGVjb2Rl
LmJhc2Uub2Zmc2V0KCk7Ci0gICAgaW50IHRoaXNWUmVnID0gYnl0ZWNvZGUudGhpc1ZhbHVlLm9m
ZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9m
ZnNldCgpOworICAgIGludCB0aGlzVlJlZyA9IGJ5dGVjb2RlLm1fdGhpc1ZhbHVlLm9mZnNldCgp
OworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2VWUmVnLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywgcmVn
VDEpOwpAQCAtNjI3LDggKzYyNyw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIGludCByZXN1bHRW
UmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGlu
dCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRC
eUlkSW5kZXgrK107CiAgICAgCkBAIC02NDQsOCArNjQ0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhp
cz4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNv
ZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5l
cmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4Kytd
OwogICAgIApAQCAtNjU5LDkgKzY1OSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfd2l0aF90aGkKIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0QnlJZD4oKTsKLSAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5i
YXNlLm9mZnNldCgpOwotICAgIGludCB2YWx1ZVZSZWcgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQo
KTsKLSAgICBib29sIGRpcmVjdCA9ICEhKGJ5dGVjb2RlLmZsYWdzICYgUHV0QnlJZElzRGlyZWN0
KTsKKyAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50
IHZhbHVlVlJlZyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgYm9vbCBkaXJlY3Qg
PSAhIShieXRlY29kZS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0KTsKIAogICAgIC8vIEluIG9y
ZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVj
dCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhl
IGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4n
LCBhbmQgd2UgZ2VuZXJhdGUgY29kZQpAQCAtNjg5LDcgKzY4OSw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwog
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigp
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogICAgIApAQCAtNzAzLDkgKzcwMyw5IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSW4KIHZvaWQgSklUOjplbWl0X29wX2luX2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgaW50IHJl
c3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Ci0gICAgaW50IGJhc2VWUmVnID0gYnl0
ZWNvZGUuYmFzZS5vZmZzZXQoKTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlVlJlZyA9IGJ5dGVj
b2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwogCkBAIC03MjYsOCArNzI2LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElucwogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEluQnlJZD4oKTsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5l
cmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwogCkBAIC03NTgsMTAgKzc1
OCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKLSAgICBpbnQgc2NvcGUgPSBieXRl
Y29kZS5zY29wZS5vZmZzZXQoKTsKLSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFk
YXRhLnJlc29sdmVUeXBlOwotICAgIHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubG9jYWxTY29w
ZURlcHRoOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
c2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIFJlc29sdmVUeXBlIHJlc29s
dmVUeXBlID0gbWV0YWRhdGEubV9yZXNvbHZlVHlwZTsKKyAgICB1bnNpZ25lZCBkZXB0aCA9IG1l
dGFkYXRhLm1fbG9jYWxTY29wZURlcHRoOwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewpA
QCAtNzgzLDcgKzc4Myw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3Qg
SW4KICAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
ZXRhZGF0YS5sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobWV0YWRhdGEubV9sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpLCBy
ZWdUMCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtODAwLDcgKzgwMCw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW4KICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgogICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
CiAgICAgICAgIC8vIFNpbmNlIHRoZXNlIEdsb2JhbFByb3BlcnR5IGNhbiBiZSBjaGFuZ2VkIHRv
IEdsb2JhbExleGljYWxWYXIsIHdlIHNob3VsZCBsb2FkIHRoZSB2YWx1ZSBmcm9tIG1ldGFkYXRh
LgotICAgICAgICBKU1Njb3BlKiogY29uc3RhbnRTY29wZVNsb3QgPSBtZXRhZGF0YS5jb25zdGFu
dFNjb3BlLnNsb3QoKTsKKyAgICAgICAgSlNTY29wZSoqIGNvbnN0YW50U2NvcGVTbG90ID0gbWV0
YWRhdGEubV9jb25zdGFudFNjb3BlLnNsb3QoKTsKICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgIGxvYWRQ
dHIoY29uc3RhbnRTY29wZVNsb3QsIHJlZ1QwKTsKICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwpAQCAtODA5LDcgKzgwOSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW4KICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLnJlc29sdmVUeXBlLCByZWdU
MCk7CisgICAgICAgIGxvYWQzMigmbWV0YWRhdGEubV9yZXNvbHZlVHlwZSwgcmVnVDApOwogCiAg
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwogICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSk7CkBAIC04NzIsMTEgKzg3MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5zY29wZS5vZmZzZXQoKTsKLSAgICBSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKLSAg
ICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEuc3RydWN0dXJlLnNsb3QoKTsK
LSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Qq
PigmbWV0YWRhdGEub3BlcmFuZCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKyAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUu
c2xvdCgpOworICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZtZXRhZGF0YS5tX29wZXJhbmQpOwogCiAgICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
ewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CkBAIC05MzYsNyArOTM2LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSQogICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLmdl
dFB1dEluZm8sIHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8s
IHJlZ1QwKTsKICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRz
KSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlz
Tm90R2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihyZXNvbHZlVHlwZSkpOwpAQCAtOTUyLDcgKzk1Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX2dl
dF9mcm9tX3Njb3BlKGNvbnN0IEkKICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKICAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAg
SnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJm1ldGFkYXRhLmdldFB1dEluZm8s
IHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKCZtZXRhZGF0YS5tX2dldFB1dEluZm8sIHJlZ1QwKTsK
ICAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDAp
OyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKIAogICAgICAgICBKdW1wIGlzR2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0
eSkpOwpAQCAtOTkxLDcgKzk5MSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9z
Y29wZShjb24KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGN1cnJlbnRJbnN0cnVj
dGlvbik7CiB9CiAKQEAgLTEwMjIsMTIgKzEwMjIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKGNvbnN0IElucwogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5zY29wZS5v
ZmZzZXQoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBp
bnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gY29w
aWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CiAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBn
ZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9
IG1ldGFkYXRhLnN0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm9wZXJhbmQpOworICAgIFN0
cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5tX3N0cnVjdHVyZS5zbG90KCk7Cisg
ICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4o
Jm1ldGFkYXRhLm1fb3BlcmFuZCk7CiAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZl
VHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKQEAgLTEwNjMsOSArMTA2Myw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
aW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVl
LCAmbWV0YWRhdGEud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2
YWx1ZSwgJm1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgdmFsdWUsIG1ldGFkYXRhLndhdGNocG9pbnRTZXQpOworICAgICAgICAg
ICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVy
YW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQpOwogICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEwNzMsNyArMTA3Myw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnMKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgog
ICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9w
ZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBl
bWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEubV93
YXRjaHBvaW50U2V0KTsKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBN
b2R1bGVWYXI6CkBAIC0xMDkxLDcgKzEwOTEsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoY29uc3QgSW5zCiAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmbWV0YWRhdGEuZ2V0UHV0SW5mbywgcmVnVDApOworICAg
ICAgICBsb2FkMzIoJm1ldGFkYXRhLm1fZ2V0UHV0SW5mbywgcmVnVDApOwogICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAogCiAgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKHJlc29sdmVUeXBlKSk7CkBAIC0xMTEwLDcg
KzExMTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zCiAgICAg
Y2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CiAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAg
ICAgbG9hZDMyKCZtZXRhZGF0YS5nZXRQdXRJbmZvLCByZWdUMCk7CisgICAgICAgIGxvYWQzMigm
bWV0YWRhdGEubV9nZXRQdXRJbmZvLCByZWdUMCk7CiAgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCiAKICAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKQEAgLTExNTgsOSArMTE1OCw5IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QKIHZvaWQgSklUOjplbWl0
X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RnJvbUFyZ3VtZW50cz4oKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwot
ICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7Ci0gICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXg7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9m
ZnNldCgpOworICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5tX2FyZ3VtZW50cy5vZmZzZXQo
KTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogICAgIAogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDY0KEFkZHJlc3MocmVn
VDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKQEAgLTExNzEsOSArMTE3MSw5IEBAIHZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhjb24KIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1l
bnRzPigpOwotICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7
Ci0gICAgaW50IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXg7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUudmFsdWUub2Zmc2V0KCk7CisgICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1l
bnRzLm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QxKTsKQEAgLTE3MzcsMTAgKzE3MzcsMTAgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBi
eXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEuYXJyYXlQcm9maWxlOworICAgIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICBBU1NF
UlQoaXNJbnQodHlwZSkpOwogICAgIAotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9m
ZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpAQCAtMTgxMiwx
MCArMTgxMiwxMCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwogICAgIAot
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNDAwMjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTMzLDcgKzEzMyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogICAgICAg
ICBib29sIF9fYl9jb25kaXRpb24gPSAoY29uZGl0aW9uKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoX19iX2NvbmRpdGlvbikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgSlVNUF9UTyhKVU1QX09G
RlNFVChieXRlY29kZS50YXJnZXQpKTsgXAorICAgICAgICAgICAgSlVNUF9UTyhKVU1QX09GRlNF
VChieXRlY29kZS5tX3RhcmdldCkpOyBcCiAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBKVU1QX1RP
KHBjLT5zaXplKCkpOyBcCiAgICAgICAgIExMSU5UX0VORF9JTVBMKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNDIsMjAgKzE0MiwyMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIExMSW50IHsKICNkZWZpbmUgTExJTlRfUkVUVVJOKHZhbHVlKSBk
byB7ICAgICAgICAgICAgICAgIFwKICAgICAgICAgSlNWYWx1ZSBfX3JfcmV0dXJuVmFsdWUgPSAo
dmFsdWUpOyAgICAgIFwKICAgICAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7ICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgTExJTlRfT1AoYnl0ZWNvZGUuZHN0KSA9IF9fcl9yZXR1cm5WYWx1
ZTsgICAgICAgICAgXAorICAgICAgICBMTElOVF9PUChieXRlY29kZS5tX2RzdCkgPSBfX3JfcmV0
dXJuVmFsdWU7ICAgICAgICAgIFwKICAgICAgICAgTExJTlRfRU5EX0lNUEwoKTsgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBMTElOVF9SRVRV
Uk5fUFJPRklMRUQodmFsdWUpIGRvIHsgICAgICAgICAgICAgICBcCiAgICAgICAgIEpTVmFsdWUg
X19ycF9yZXR1cm5WYWx1ZSA9ICh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICBMTElOVF9DSEVDS19FWENFUFRJT04oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgTExJTlRfT1AoYnl0ZWNvZGUuZHN0KSA9IF9fcnBfcmV0dXJuVmFsdWU7ICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTExJTlRfT1AoYnl0ZWNvZGUubV9kc3Qp
ID0gX19ycF9yZXR1cm5WYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBM
TElOVF9QUk9GSUxFX1ZBTFVFKF9fcnBfcmV0dXJuVmFsdWUpOyAgICAgICAgICBcCiAgICAgICAg
IExMSU5UX0VORF9JTVBMKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIExMSU5UX1BST0ZJTEVfVkFMVUUodmFs
dWUpIGRvIHsgXAotICAgICAgICBieXRlY29kZS5tZXRhZGF0YShleGVjKS5wcm9maWxlLm1fYnVj
a2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7IFwKKyAgICAgICAgYnl0ZWNvZGUubWV0
YWRhdGEoZXhlYykubV9wcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSk7IFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBMTElOVF9DQUxMX0VORF9JTVBM
KGV4ZWMsIGNhbGxUYXJnZXQsIGNhbGxUYXJnZXRUYWcpIFwKQEAgLTU3MSw3ICs1NzEsNyBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X29iamVjCiAgICAgTExJTlRfQkVHSU4o
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3T2JqZWN0PigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoZXhlYyk7Ci0gICAgTExJTlRfUkVUVVJOKGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIG1ldGFkYXRhLm9iamVjdEFsbG9jYXRpb25Qcm9maWxl
LnN0cnVjdHVyZSgpKSk7CisgICAgTExJTlRfUkVUVVJOKGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMsIG1ldGFkYXRhLm1fb2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCkpKTsKIH0K
IAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheSkKQEAgLTU3OSw3ICs1
NzksNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5CiAgICAgTExJ
TlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXJyYXk+KCk7CiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBMTElOVF9S
RVRVUk4oY29uc3RydWN0QXJyYXlOZWdhdGl2ZUluZGV4ZWQoZXhlYywgJm1ldGFkYXRhLmFycmF5
QWxsb2NhdGlvblByb2ZpbGUsIGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJkxMSU5UX09QKGJ5dGVj
b2RlLmFyZ3YpKSwgYnl0ZWNvZGUuYXJnYykpOworICAgIExMSU5UX1JFVFVSTihjb25zdHJ1Y3RB
cnJheU5lZ2F0aXZlSW5kZXhlZChleGVjLCAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9m
aWxlLCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZMTElOVF9PUChieXRlY29kZS5tX2FyZ3YpKSwg
Ynl0ZWNvZGUubV9hcmdjKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9u
ZXdfYXJyYXlfd2l0aF9zaXplKQpAQCAtNTg3LDE0ICs1ODcsMTQgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25ld19hcnJheQogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcE5ld0FycmF5V2l0aFNpemU+KCk7CiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBMTElOVF9SRVRVUk4oY29uc3RydWN0
QXJyYXlXaXRoU2l6ZVF1aXJrKGV4ZWMsICZtZXRhZGF0YS5hcnJheUFsbG9jYXRpb25Qcm9maWxl
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIExMSU5UX09QX0MoYnl0ZWNvZGUubGVuZ3Ro
KS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9SRVRVUk4oY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1
aXJrKGV4ZWMsICZtZXRhZGF0YS5tX2FycmF5QWxsb2NhdGlvblByb2ZpbGUsIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSwgTExJTlRfT1BfQyhieXRlY29kZS5tX2xlbmd0aCkuanNWYWx1ZSgp
KSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfcmVnZXhwKQogewog
ICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld1JlZ2V4
cD4oKTsKLSAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxSZWdFeHAqPihMTElOVF9PUF9DKGJ5
dGVjb2RlLnJlZ2V4cCkuanNWYWx1ZSgpKTsKKyAgICBSZWdFeHAqIHJlZ0V4cCA9IGpzQ2FzdDxS
ZWdFeHAqPihMTElOVF9PUF9DKGJ5dGVjb2RlLm1fcmVnZXhwKS5qc1ZhbHVlKCkpOwogICAgIEFT
U0VSVChyZWdFeHAtPmlzVmFsaWQoKSk7CiAgICAgTExJTlRfUkVUVVJOKFJlZ0V4cE9iamVjdDo6
Y3JlYXRlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgp
LCByZWdFeHApKTsKIH0KQEAgLTYwMyw4ICs2MDMsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfaW5zdGFuY2VvCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wSW5zdGFuY2VvZj4oKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gTExJTlRf
T1BfQyhieXRlY29kZS52YWx1ZSkuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgcHJvdG8gPSBMTElO
VF9PUF9DKGJ5dGVjb2RlLnByb3RvdHlwZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUg
PSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHBy
b3RvID0gTExJTlRfT1BfQyhieXRlY29kZS5tX3Byb3RvdHlwZSkuanNWYWx1ZSgpOwogICAgIExM
SU5UX1JFVFVSTihqc0Jvb2xlYW4oSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShleGVjLCB2
YWx1ZSwgcHJvdG8pKSk7CiB9CiAKQEAgLTYxMyw5ICs2MTMsOSBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfaW5zdGFuY2VvCiAgICAgTExJTlRfQkVHSU4oKTsKIAogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIEpTVmFsdWUgdmFs
dWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBj
b25zdHJ1Y3RvciA9IExMSU5UX09QX0MoYnl0ZWNvZGUuY29uc3RydWN0b3IpLmpzVmFsdWUoKTsK
LSAgICBKU1ZhbHVlIGhhc0luc3RhbmNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLmhhc0lu
c3RhbmNlVmFsdWUpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gTExJTlRfT1BfQyhi
eXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvciA9IExM
SU5UX09QX0MoYnl0ZWNvZGUubV9jb25zdHJ1Y3RvcikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUg
aGFzSW5zdGFuY2VWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV9oYXNJbnN0YW5jZVZhbHVl
KS5qc1ZhbHVlKCk7CiAKICAgICBBU1NFUlQoY29uc3RydWN0b3IuaXNPYmplY3QoKSk7CiAgICAg
QVNTRVJUKGhhc0luc3RhbmNlVmFsdWUgIT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5m
dW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpIHx8ICFjb25zdHJ1Y3Rvci5n
ZXRPYmplY3QoKS0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbXBsZW1lbnRzRGVmYXVsdEhh
c0luc3RhbmNlKCkpOwpAQCAtNjI5LDggKzYyOSw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF90cnlfZ2V0X2IKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BUcnlHZXRCeUlkPigpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2st
PmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
TExJTlRfT1BfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Cisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1
ZSgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgUHJvcGVydHlTbG90OjpQcm9w
ZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KTsKIAogICAgIGJhc2VWYWx1
ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwpAQCAtNjQ0LDggKzY0NCw4IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICBMTElOVF9CRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkp
OwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5iYXNlKS5qc1Zh
bHVlKCk7CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9P
UF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgUHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
R2V0T3duUHJvcGVydHkpOwogCiAgICAgYm9vbCBmb3VuZCA9IGJhc2VWYWx1ZS5nZXRPd25Qcm9w
ZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwpAQCAtNjU2LDcgKzY1Niw3IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICBpZiAoIUxMSU5UX0FMV0FZU19B
Q0NFU1NfU0xPVyAmJiBzbG90LmlzQ2FjaGVhYmxlKCkpIHsKICAgICAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKICAgICAgICAgewotICAgICAgICAgICAgU3Ry
dWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5zdHJ1Y3R1cmU7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlOwogICAg
ICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZUlEKSB7CiAgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBhID0gdm0uaGVhcC5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KG9sZFN0cnVjdHVyZUlEKTsKICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGIgPSBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSh2bSk7CkBAIC02NzIsOCArNjcyLDggQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2dldF9ieV9pZAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1
Y3R1cmUodm0pOwogICAgICAgICBpZiAoc2xvdC5pc1ZhbHVlKCkpIHsKICAgICAgICAgICAgIC8v
IFN0YXJ0IG91dCBieSBjbGVhcmluZyBvdXQgdGhlIG9sZCBjYWNoZS4KLSAgICAgICAgICAgIG1l
dGFkYXRhLnN0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBtZXRhZGF0YS5vZmZzZXQgPSAwOwor
ICAgICAgICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgbWV0YWRh
dGEubV9vZmZzZXQgPSAwOwogCiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkKICAgICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVk
SW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKQEAgLTY4MSw4ICs2ODEsOCBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAKICAgICAgICAgICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICAgICAg
ICAgIG1ldGFkYXRhLnN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+aWQoKTsKLSAgICAgICAgICAgICAg
ICBtZXRhZGF0YS5vZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgICAg
IG1ldGFkYXRhLm1fc3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgpOworICAgICAgICAgICAgICAg
IG1ldGFkYXRhLm1fb2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTczNSwxOSArNzM1LDE5IEBAIHN0YXRpYyB2b2lkIHNldHVw
R2V0QnlJZFByb3RvdHlwZUNhY2hlKEUKICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKIAogICAgIGlmIChzbG90LmlzVW5zZXQoKSkgewotICAgICAgICBt
ZXRhZGF0YS5tb2RlID0gR2V0QnlJZE1vZGU6OlVuc2V0OwotICAgICAgICBtZXRhZGF0YS5tb2Rl
TWV0YWRhdGEudW5zZXRNb2RlLnN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+aWQoKTsKKyAgICAgICAg
bWV0YWRhdGEubV9tb2RlID0gR2V0QnlJZE1vZGU6OlVuc2V0OworICAgICAgICBtZXRhZGF0YS5t
X21vZGVNZXRhZGF0YS51bnNldE1vZGUuc3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChzbG90LmlzVmFsdWUoKSk7CiAKLSAgICBt
ZXRhZGF0YS5tb2RlID0gR2V0QnlJZE1vZGU6OlByb3RvTG9hZDsKLSAgICBtZXRhZGF0YS5tb2Rl
TWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0gICAg
bWV0YWRhdGEubW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkT2Zmc2V0ID0gb2Zmc2V0
OwotICAgIG1ldGFkYXRhLm1vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLmNhY2hlZFNsb3QgPSBz
bG90LnNsb3RCYXNlKCk7CisgICAgbWV0YWRhdGEubV9tb2RlID0gR2V0QnlJZE1vZGU6OlByb3Rv
TG9hZDsKKyAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVjdHVy
ZSA9IHN0cnVjdHVyZS0+aWQoKTsKKyAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5wcm90b0xv
YWRNb2RlLmNhY2hlZE9mZnNldCA9IG9mZnNldDsKKyAgICBtZXRhZGF0YS5tX21vZGVNZXRhZGF0
YS5wcm90b0xvYWRNb2RlLmNhY2hlZFNsb3QgPSBzbG90LnNsb3RCYXNlKCk7CiAgICAgLy8gV2Ug
a25vdyB0aGF0IHRoaXMgcG9pbnRlciB3aWxsIHJlbWFpbiB2YWxpZCBiZWNhdXNlIGl0IHdpbGwg
YmUgY2xlYXJlZCBieSBlaXRoZXIgYSB3YXRjaHBvaW50IGZpcmUgb3IKICAgICAvLyBkdXJpbmcg
R0Mgd2hlbiB3ZSBjbGVhciB0aGUgTExJbnQgY2FjaGVzLgotICAgIG1ldGFkYXRhLm1vZGVNZXRh
ZGF0YS5wcm90b0xvYWRNb2RlLmNhY2hlZFNsb3QgPSBzbG90LnNsb3RCYXNlKCk7CisgICAgbWV0
YWRhdGEubV9tb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5jYWNoZWRTbG90ID0gc2xvdC5zbG90
QmFzZSgpOwogfQogCiAKQEAgLTc1NywyOSArNzU3LDI5IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0QnlJ
ZD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkp
OwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5iYXNlKS5qc1Zh
bHVlKCk7CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9P
UF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgUHJvcGVydHlTbG90OjpQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6
R2V0KTsKIAogICAgIEpTVmFsdWUgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwg
c2xvdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgTExJTlRfT1AoYnl0ZWNv
ZGUuZHN0KSA9IHJlc3VsdDsKKyAgICBMTElOVF9PUChieXRlY29kZS5tX2RzdCkgPSByZXN1bHQ7
CiAgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cKICAgICAgICAgJiYgYmFz
ZVZhbHVlLmlzQ2VsbCgpCiAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGUoKSkgewogICAgICAg
ICB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAg
IGF1dG8gbW9kZSA9IG1ldGFkYXRhLm1vZGU7CisgICAgICAgICAgICBhdXRvIG1vZGUgPSBtZXRh
ZGF0YS5tX21vZGU7CiAgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICAgICAgICAgIGNh
c2UgR2V0QnlJZE1vZGU6OkRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlSUQg
PSBtZXRhZGF0YS5tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlOworICAgICAgICAg
ICAgICAgIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuZGVmYXVsdE1v
ZGUuc3RydWN0dXJlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBH
ZXRCeUlkTW9kZTo6VW5zZXQ6Ci0gICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlSUQgPSBtZXRh
ZGF0YS5tb2RlTWV0YWRhdGEudW5zZXRNb2RlLnN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICBv
bGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLnVuc2V0TW9kZS5zdHJ1Y3R1
cmU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEdldEJ5SWRNb2Rl
OjpQcm90b0xvYWQ6Ci0gICAgICAgICAgICAgICAgb2xkU3RydWN0dXJlSUQgPSBtZXRhZGF0YS5t
b2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5zdHJ1Y3R1cmU7CisgICAgICAgICAgICAgICAgb2xk
U3RydWN0dXJlSUQgPSBtZXRhZGF0YS5tX21vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVj
dHVyZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgb2xkU3RydWN0dXJlSUQgPSAwOwpAQCAtNzk5LDEyICs3OTksMTIgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICBpZiAoc2xvdC5p
c1ZhbHVlKCkgJiYgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkgewogICAgICAgICAgICAg
Ly8gU3RhcnQgb3V0IGJ5IGNsZWFyaW5nIG91dCB0aGUgb2xkIGNhY2hlLgotICAgICAgICAgICAg
bWV0YWRhdGEubW9kZSA9IEdldEJ5SWRNb2RlOjpEZWZhdWx0OwotICAgICAgICAgICAgbWV0YWRh
dGEubW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBt
ZXRhZGF0YS5tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0ID0gMDsKKyAgICAg
ICAgICAgIG1ldGFkYXRhLm1fbW9kZSA9IEdldEJ5SWRNb2RlOjpEZWZhdWx0OworICAgICAgICAg
ICAgbWV0YWRhdGEubV9tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuc3RydWN0dXJlID0gMDsKKyAg
ICAgICAgICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLmNhY2hlZE9mZnNl
dCA9IDA7CiAKICAgICAgICAgICAgIC8vIFByZXZlbnQgdGhlIHByb3RvdHlwZSBjYWNoZSBmcm9t
IGV2ZXIgaGFwcGVuaW5nLgotICAgICAgICAgICAgbWV0YWRhdGEuaGl0Q291bnRGb3JMTEludENh
Y2hpbmcgPSAwOworICAgICAgICAgICAgbWV0YWRhdGEubV9oaXRDb3VudEZvckxMSW50Q2FjaGlu
ZyA9IDA7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpCiAgICAgICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CkBAIC04MTIsMjQgKzgxMiwyNCBAQCBMTElOVF9T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
CiAKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5tb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuc3Ry
dWN0dXJlID0gc3RydWN0dXJlLT5pZCgpOwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1vZGVN
ZXRhZGF0YS5kZWZhdWx0TW9kZS5jYWNoZWRPZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwor
ICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fbW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLnN0cnVj
dHVyZSA9IHN0cnVjdHVyZS0+aWQoKTsKKyAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX21vZGVN
ZXRhZGF0YS5kZWZhdWx0TW9kZS5jYWNoZWRPZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKFVOTElLRUxZKG1ldGFkYXRhLmhpdENv
dW50Rm9yTExJbnRDYWNoaW5nICYmIChzbG90LmlzVmFsdWUoKSB8fCBzbG90LmlzVW5zZXQoKSkp
KSB7CisgICAgICAgIH0gZWxzZSBpZiAoVU5MSUtFTFkobWV0YWRhdGEubV9oaXRDb3VudEZvckxM
SW50Q2FjaGluZyAmJiAoc2xvdC5pc1ZhbHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpKSkgewogICAg
ICAgICAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpOwogCi0gICAgICAg
ICAgICBpZiAoISgtLW1ldGFkYXRhLmhpdENvdW50Rm9yTExJbnRDYWNoaW5nKSkKKyAgICAgICAg
ICAgIGlmICghKC0tbWV0YWRhdGEubV9oaXRDb3VudEZvckxMSW50Q2FjaGluZykpCiAgICAgICAg
ICAgICAgICAgc2V0dXBHZXRCeUlkUHJvdG90eXBlQ2FjaGUoZXhlYywgdm0sIHBjLCBtZXRhZGF0
YSwgYmFzZUNlbGwsIHNsb3QsIGlkZW50KTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIUxM
SU5UX0FMV0FZU19BQ0NFU1NfU0xPVwogICAgICAgICAmJiBpc0pTQXJyYXkoYmFzZVZhbHVlKQog
ICAgICAgICAmJiBpZGVudCA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKLSAgICAgICAg
bWV0YWRhdGEubW9kZSA9IEdldEJ5SWRNb2RlOjpBcnJheUxlbmd0aDsKLSAgICAgICAgbmV3ICgm
bWV0YWRhdGEubW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUpIEFycmF5
UHJvZmlsZShjb2RlQmxvY2stPmJ5dGVjb2RlT2Zmc2V0KHBjKSk7Ci0gICAgICAgIG1ldGFkYXRh
Lm1vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1
cmUoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pKTsKKyAgICAgICAgbWV0YWRhdGEu
bV9tb2RlID0gR2V0QnlJZE1vZGU6OkFycmF5TGVuZ3RoOworICAgICAgICBuZXcgKCZtZXRhZGF0
YS5tX21vZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlKSBBcnJheVByb2Zp
bGUoY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChwYykpOworICAgICAgICBtZXRhZGF0YS5tX21v
ZGVNZXRhZGF0YS5hcnJheUxlbmd0aE1vZGUuYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmUo
YmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pKTsKIAogICAgICAgICAvLyBQcmV2ZW50
IHRoZSBwcm90b3R5cGUgY2FjaGUgZnJvbSBldmVyIGhhcHBlbmluZy4KLSAgICAgICAgbWV0YWRh
dGEuaGl0Q291bnRGb3JMTEludENhY2hpbmcgPSAwOworICAgICAgICBtZXRhZGF0YS5tX2hpdENv
dW50Rm9yTExJbnRDYWNoaW5nID0gMDsKICAgICB9CiAKICAgICBMTElOVF9QUk9GSUxFX1ZBTFVF
KHJlc3VsdCk7CkBAIC04NDIsMTQgKzg0MiwxNCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcHV0X2J5X2lkCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1dEJ5SWQ+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KTsKKyAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5tX3Byb3BlcnR5KTsKICAgICAKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IExMSU5UX09QX0Mo
Ynl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRf
T1BfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIGNvZGVCbG9jay0+cHV0QnlJ
ZENvbnRleHQoKSk7Ci0gICAgaWYgKGJ5dGVjb2RlLmZsYWdzICYgUHV0QnlJZElzRGlyZWN0KQot
ICAgICAgICBDb21tb25TbG93UGF0aHM6OnB1dERpcmVjdFdpdGhSZWlmeSh2bSwgZXhlYywgYXNP
YmplY3QoYmFzZVZhbHVlKSwgaWRlbnQsIExMSU5UX09QX0MoYnl0ZWNvZGUudmFsdWUpLmpzVmFs
dWUoKSwgc2xvdCk7CisgICAgaWYgKGJ5dGVjb2RlLm1fZmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Qp
CisgICAgICAgIENvbW1vblNsb3dQYXRoczo6cHV0RGlyZWN0V2l0aFJlaWZ5KHZtLCBleGVjLCBh
c09iamVjdChiYXNlVmFsdWUpLCBpZGVudCwgTExJTlRfT1BfQyhieXRlY29kZS5tX3ZhbHVlKS5q
c1ZhbHVlKCksIHNsb3QpOwogICAgIGVsc2UKLSAgICAgICAgYmFzZVZhbHVlLnB1dElubGluZShl
eGVjLCBpZGVudCwgTExJTlRfT1BfQyhieXRlY29kZS52YWx1ZSkuanNWYWx1ZSgpLCBzbG90KTsK
KyAgICAgICAgYmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwgTExJTlRfT1BfQyhieXRl
Y29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCksIHNsb3QpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElP
TigpOwogICAgIAogICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XCkBAIC04NTcsNyAr
ODU3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAg
ICAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkpIHsKIAogICAgICAgICB7Ci0gICAgICAgICAgICBT
dHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IG1ldGFkYXRhLm9sZFN0cnVjdHVyZTsKKyAgICAg
ICAgICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0gbWV0YWRhdGEubV9vbGRTdHJ1Y3R1
cmU7CiAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlSUQpIHsKICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIGEgPSB2bS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5nZXQob2xkU3RydWN0dXJl
SUQpOwogICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogYiA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKHZtKTsKQEAgLTg3MiwxMCArODcyLDEwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgfQogCiAgICAgICAgIC8vIFN0YXJ0IG91dCBi
eSBjbGVhcmluZyBvdXQgdGhlIG9sZCBjYWNoZS4KLSAgICAgICAgbWV0YWRhdGEub2xkU3RydWN0
dXJlID0gMDsKLSAgICAgICAgbWV0YWRhdGEub2Zmc2V0ID0gMDsKLSAgICAgICAgbWV0YWRhdGEu
bmV3U3RydWN0dXJlID0gMDsKLSAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlQ2hhaW4uY2xlYXIo
KTsKKyAgICAgICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmUgPSAwOworICAgICAgICBtZXRhZGF0
YS5tX29mZnNldCA9IDA7CisgICAgICAgIG1ldGFkYXRhLm1fbmV3U3RydWN0dXJlID0gMDsKKyAg
ICAgICAgbWV0YWRhdGEubV9zdHJ1Y3R1cmVDaGFpbi5jbGVhcigpOwogICAgICAgICAKICAgICAg
ICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKQEAgLTg5NiwyMCArODk2
LDIwIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAg
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbihleGVjLCBi
YXNlQ2VsbCwgc2F3UG9seVByb3RvKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSBJbnZhbGlkUHJvdG90eXBlQ2hhaW4gJiYgIXNhd1BvbHlQcm90bykgewogICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpLT5pc09iamVjdCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9sZFN0cnVjdHVyZSA9IHN0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpLT5pZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEu
b2Zmc2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1l
dGFkYXRhLm5ld1N0cnVjdHVyZSA9IHN0cnVjdHVyZS0+aWQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghKGJ5dGVjb2RlLmZsYWdzICYgUHV0QnlJZElzRGlyZWN0KSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnBy
ZXZpb3VzSUQoKS0+aWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2Zm
c2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFk
YXRhLm1fbmV3U3RydWN0dXJlID0gc3RydWN0dXJlLT5pZCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCEoYnl0ZWNvZGUubV9mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMsIGFzT2JqZWN0KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGNoYWluKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtZXRhZGF0YS5zdHJ1Y3R1cmVDaGFpbi5zZXQodm0sIGNvZGVCbG9jaywgY2hhaW4pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlQ2hhaW4uc2V0KHZt
LCBjb2RlQmxvY2ssIGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0s
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9sZFN0cnVj
dHVyZSA9IHN0cnVjdHVyZS0+aWQoKTsKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5vZmZzZXQg
PSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2xkU3Ry
dWN0dXJlID0gc3RydWN0dXJlLT5pZCgpOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fb2Zm
c2V0ID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTkyMiw5ICs5MjIsOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVs
X2J5X2lkCiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
RGVsQnlJZD4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gTExJTlRfT1BfQyhieXRlY29kZS5iYXNlKS5q
c1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBMTElO
VF9PUF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOwogICAgIExM
SU5UX0NIRUNLX0VYQ0VQVElPTigpOwotICAgIGJvb2wgY291bGREZWxldGUgPSBiYXNlT2JqZWN0
LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmplY3QsIGV4ZWMsIGNvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOworICAgIGJvb2wgY291bGREZWxl
dGUgPSBiYXNlT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5KGJhc2VPYmpl
Y3QsIGV4ZWMsIGNvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAg
ICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgaWYgKCFjb3VsZERlbGV0ZSAmJiBjb2Rl
QmxvY2stPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVUeXBlRXJy
b3IoZXhlYywgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKSk7CkBAIC05MzMsOCArOTMzLDgg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlbF9ieV9pZAogCiBzdGF0aWMgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGdldEJ5VmFsKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBPcEdl
dEJ5VmFsIGJ5dGVjb2RlKQogewotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhi
eXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9P
UF9DKGJ5dGVjb2RlLnByb3BlcnR5KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vi
c2NyaXB0ID0gTExJTlRfT1BfQyhieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKExJS0VMWShi
YXNlVmFsdWUuaXNDZWxsKCkgJiYgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7CkBAIC05NTAsNyAr
OTUwLDcgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRCeVZhbChWTQogICAgIGlm
IChzdWJzY3JpcHQuaXNVSW50MzIoKSkgewogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0
LmFzVUludDMyKCk7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
ZXhlYyk7Ci0gICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gJm1ldGFkYXRhLmFy
cmF5UHJvZmlsZTsKKyAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CiAKICAgICAgICAgaWYgKGlzSlNTdHJpbmcoYmFzZVZhbHVlKSkg
ewogICAgICAgICAgICAgaWYgKGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7
CkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X2J5X3ZhCiAgICAgTExJTlRfQkVHSU4oKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wUHV0QnlWYWw+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5
dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IExMSU5UX09Q
X0MoYnl0ZWNvZGUucHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gTExJ
TlRfT1BfQyhieXRlY29kZS52YWx1ZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsK
ICAgICBib29sIGlzU3RyaWN0TW9kZSA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUo
KTsKICAgICAKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewpAQCAtMTAz
MSw5ICsxMDMxLDkgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YQog
ICAgIExMSU5UX0JFR0lOKCk7CiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1
dEJ5VmFsRGlyZWN0PigpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhieXRl
Y29kZS5iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9PUF9D
KGJ5dGVjb2RlLnByb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5U
X09QX0MoYnl0ZWNvZGUudmFsdWUpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IExMSU5UX09QX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzdWJz
Y3JpcHQgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAg
ICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlzT2JqZWN0KCkpOwogICAgIEpTT2JqZWN0KiBi
YXNlT2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKICAgICBib29sIGlzU3RyaWN0TW9kZSA9
IGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKTsKQEAgLTEwNzEsMTEgKzEwNzEsMTEg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlbF9ieV92YQogewogICAgIExMSU5U
X0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcERlbEJ5VmFsPigpOwotICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNW
YWx1ZSgpOwogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4
ZWMpOwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgSlNWYWx1ZSBzdWJzY3Jp
cHQgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnByb3BlcnR5KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSBzdWJzY3JpcHQgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsK
ICAgICAKICAgICBib29sIGNvdWxkRGVsZXRlOwogICAgIApAQCAtMTEwMCwxNSArMTEwMCwxNSBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2dldHRlCiB7CiAgICAgTExJTlRf
QkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wUHV0R2V0dGVyQnlJZD4oKTsK
LSAgICBBU1NFUlQoTExJTlRfT1AoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpLmlzT2JqZWN0KCkp
OwotICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3QoTExJTlRfT1AoYnl0ZWNvZGUuYmFz
ZSkuanNWYWx1ZSgpKTsKKyAgICBBU1NFUlQoTExJTlRfT1AoYnl0ZWNvZGUubV9iYXNlKS5qc1Zh
bHVlKCkuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIGJhc2VPYmogPSBhc09iamVjdChMTElO
VF9PUChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKSk7CiAKLSAgICB1bnNpZ25lZCBvcHRpb25z
ID0gYnl0ZWNvZGUuYXR0cmlidXRlczsKKyAgICB1bnNpZ25lZCBvcHRpb25zID0gYnl0ZWNvZGUu
bV9hdHRyaWJ1dGVzOwogCi0gICAgSlNWYWx1ZSBnZXR0ZXIgPSBMTElOVF9PUChieXRlY29kZS5h
Y2Nlc3NvcikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgZ2V0dGVyID0gTExJTlRfT1AoYnl0ZWNv
ZGUubV9hY2Nlc3NvcikuanNWYWx1ZSgpOwogICAgIEFTU0VSVChnZXR0ZXIuaXNPYmplY3QoKSk7
CiAKLSAgICBiYXNlT2JqLT5wdXRHZXR0ZXIoZXhlYywgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50
aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpLCBhc09iamVjdChnZXR0ZXIpLCBvcHRpb25zKTsKKyAg
ICBiYXNlT2JqLT5wdXRHZXR0ZXIoZXhlYywgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSksIGFzT2JqZWN0KGdldHRlciksIG9wdGlvbnMpOwogICAgIExM
SU5UX0VORCgpOwogfQogCkBAIC0xMTE2LDE1ICsxMTE2LDE1IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wdXRfc2V0dGUKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOwotICAgIEFTU0VSVChMTElOVF9P
UChieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkuaXNPYmplY3QoKSk7Ci0gICAgSlNPYmplY3QqIGJh
c2VPYmogPSBhc09iamVjdChMTElOVF9PUChieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkpOworICAg
IEFTU0VSVChMTElOVF9PUChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsK
KyAgICBKU09iamVjdCogYmFzZU9iaiA9IGFzT2JqZWN0KExMSU5UX09QKGJ5dGVjb2RlLm1fYmFz
ZSkuanNWYWx1ZSgpKTsKIAotICAgIHVuc2lnbmVkIG9wdGlvbnMgPSBieXRlY29kZS5hdHRyaWJ1
dGVzOworICAgIHVuc2lnbmVkIG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAKLSAg
ICBKU1ZhbHVlIHNldHRlciA9IExMSU5UX09QKGJ5dGVjb2RlLmFjY2Vzc29yKS5qc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSBzZXR0ZXIgPSBMTElOVF9PUChieXRlY29kZS5tX2FjY2Vzc29yKS5qc1Zh
bHVlKCk7CiAgICAgQVNTRVJUKHNldHRlci5pc09iamVjdCgpKTsKIAotICAgIGJhc2VPYmotPnB1
dFNldHRlcihleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihieXRlY29kZS5wcm9w
ZXJ0eSksIGFzT2JqZWN0KHNldHRlciksIG9wdGlvbnMpOworICAgIGJhc2VPYmotPnB1dFNldHRl
cihleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5
KSwgYXNPYmplY3Qoc2V0dGVyKSwgb3B0aW9ucyk7CiAgICAgTExJTlRfRU5EKCk7CiB9CiAKQEAg
LTExMzIsMTUgKzExMzIsMTUgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9n
ZXR0ZQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cFB1dEdldHRlclNldHRlckJ5SWQ+KCk7Ci0gICAgQVNTRVJUKExMSU5UX09QKGJ5dGVjb2RlLmJh
c2UpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKLSAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFz
T2JqZWN0KExMSU5UX09QKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKSk7CisgICAgQVNTRVJUKExM
SU5UX09QKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLmlzT2JqZWN0KCkpOworICAgIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoTExJTlRfT1AoYnl0ZWNvZGUubV9iYXNlKS5qc1Zh
bHVlKCkpOwogCi0gICAgSlNWYWx1ZSBnZXR0ZXIgPSBMTElOVF9PUChieXRlY29kZS5nZXR0ZXIp
LmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHNldHRlciA9IExMSU5UX09QKGJ5dGVjb2RlLnNldHRl
cikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgZ2V0dGVyID0gTExJTlRfT1AoYnl0ZWNvZGUubV9n
ZXR0ZXIpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHNldHRlciA9IExMSU5UX09QKGJ5dGVjb2Rl
Lm1fc2V0dGVyKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKGdldHRlci5pc09iamVjdCgpIHx8IHNl
dHRlci5pc09iamVjdCgpKTsKICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0gR2V0dGVyU2V0
dGVyOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgZ2V0dGVyLCBzZXR0
ZXIpOwogCi0gICAgQ29tbW9uU2xvd1BhdGhzOjpwdXREaXJlY3RBY2Nlc3NvcldpdGhSZWlmeSh2
bSwgZXhlYywgYmFzZU9iamVjdCwgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0ZWNv
ZGUucHJvcGVydHkpLCBhY2Nlc3NvciwgYnl0ZWNvZGUuYXR0cmlidXRlcyk7CisgICAgQ29tbW9u
U2xvd1BhdGhzOjpwdXREaXJlY3RBY2Nlc3NvcldpdGhSZWlmeSh2bSwgZXhlYywgYmFzZU9iamVj
dCwgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSksIGFj
Y2Vzc29yLCBieXRlY29kZS5tX2F0dHJpYnV0ZXMpOwogICAgIExMSU5UX0VORCgpOwogfQogCkBA
IC0xMTQ4LDEzICsxMTQ4LDEzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRf
Z2V0dGUKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BQdXRHZXR0ZXJCeVZhbD4oKTsKLSAgICBBU1NFUlQoTExJTlRfT1AoYnl0ZWNvZGUuYmFzZSku
anNWYWx1ZSgpLmlzT2JqZWN0KCkpOwotICAgIEpTT2JqZWN0KiBiYXNlT2JqID0gYXNPYmplY3Qo
TExJTlRfT1AoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHN1YnNjcmlw
dCA9IExMSU5UX09QX0MoYnl0ZWNvZGUucHJvcGVydHkpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQo
TExJTlRfT1AoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkuaXNPYmplY3QoKSk7CisgICAgSlNP
YmplY3QqIGJhc2VPYmogPSBhc09iamVjdChMTElOVF9PUChieXRlY29kZS5tX2Jhc2UpLmpzVmFs
dWUoKSk7CisgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmpzVmFsdWUoKTsKIAotICAgIHVuc2lnbmVkIG9wdGlvbnMgPSBieXRlY29kZS5hdHRy
aWJ1dGVzOworICAgIHVuc2lnbmVkIG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7CiAK
LSAgICBKU1ZhbHVlIGdldHRlciA9IExMSU5UX09QKGJ5dGVjb2RlLmFjY2Vzc29yKS5qc1ZhbHVl
KCk7CisgICAgSlNWYWx1ZSBnZXR0ZXIgPSBMTElOVF9PUChieXRlY29kZS5tX2FjY2Vzc29yKS5q
c1ZhbHVlKCk7CiAgICAgQVNTRVJUKGdldHRlci5pc09iamVjdCgpKTsKIAogICAgIGF1dG8gcHJv
cGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKQEAgLTExNjgsMTMgKzExNjgs
MTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9zZXR0ZQogewogICAgIExM
SU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1dFNldHRlckJ5VmFs
PigpOwotICAgIEFTU0VSVChMTElOVF9PUChieXRlY29kZS5iYXNlKS5qc1ZhbHVlKCkuaXNPYmpl
Y3QoKSk7Ci0gICAgSlNPYmplY3QqIGJhc2VPYmogPSBhc09iamVjdChMTElOVF9PUChieXRlY29k
ZS5iYXNlKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gTExJTlRfT1BfQyhi
eXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgpOworICAgIEFTU0VSVChMTElOVF9PUChieXRlY29k
ZS5tX2Jhc2UpLmpzVmFsdWUoKS5pc09iamVjdCgpKTsKKyAgICBKU09iamVjdCogYmFzZU9iaiA9
IGFzT2JqZWN0KExMSU5UX09QKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpKTsKKyAgICBKU1Zh
bHVlIHN1YnNjcmlwdCA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgp
OwogCi0gICAgdW5zaWduZWQgb3B0aW9ucyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7CisgICAgdW5z
aWduZWQgb3B0aW9ucyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKIAotICAgIEpTVmFsdWUgc2V0
dGVyID0gTExJTlRfT1AoYnl0ZWNvZGUuYWNjZXNzb3IpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHNldHRlciA9IExMSU5UX09QKGJ5dGVjb2RlLm1fYWNjZXNzb3IpLmpzVmFsdWUoKTsKICAgICBB
U1NFUlQoc2V0dGVyLmlzT2JqZWN0KCkpOwogCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlw
dC50b1Byb3BlcnR5S2V5KGV4ZWMpOwpAQCAtMTE4OCwxMTIgKzExODgsMTEyIEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qdHJ1ZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKdHJ1ZT4oKTsKLSAgICBMTElOVF9CUkFOQ0goTExJ
TlRfT1BfQyhieXRlY29kZS5jb25kaXRpb24pLmpzVmFsdWUoKS50b0Jvb2xlYW4oZXhlYykpOwor
ICAgIExMSU5UX0JSQU5DSChMTElOVF9PUF9DKGJ5dGVjb2RlLm1fY29uZGl0aW9uKS5qc1ZhbHVl
KCkudG9Cb29sZWFuKGV4ZWMpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2pmYWxzZSkKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BKZmFsc2U+KCk7Ci0gICAgTExJTlRfQlJBTkNIKCFMTElOVF9PUF9DKGJ5dGVjb2RlLmNv
bmRpdGlvbikuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSk7CisgICAgTExJTlRfQlJBTkNIKCFM
TElOVF9PUF9DKGJ5dGVjb2RlLm1fY29uZGl0aW9uKS5qc1ZhbHVlKCkudG9Cb29sZWFuKGV4ZWMp
KTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2psZXNzKQogewogICAgIExM
SU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEpsZXNzPigpOwotICAg
IExMSU5UX0JSQU5DSChqc0xlc3M8dHJ1ZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5saHMp
LmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSkpOworICAgIExM
SU5UX0JSQU5DSChqc0xlc3M8dHJ1ZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX2xocyku
anNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKTsKIH0KIAog
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pubGVzcykKIHsKICAgICBMTElOVF9CRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKbmxlc3M+KCk7Ci0gICAgTExJTlRf
QlJBTkNIKCFqc0xlc3M8dHJ1ZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5saHMpLmpzVmFs
dWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSkpOworICAgIExMSU5UX0JS
QU5DSCghanNMZXNzPHRydWU+KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFs
dWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5U
X1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qZ3JlYXRlcikKIHsKICAgICBMTElOVF9CRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKZ3JlYXRlcj4oKTsKLSAgICBMTElOVF9C
UkFOQ0goanNMZXNzPGZhbHNlPihleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1
ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpKSk7CisgICAgTExJTlRfQlJB
TkNIKGpzTGVzczxmYWxzZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX3JocykuanNWYWx1
ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2puZ3JlYXRlcikKIHsKICAgICBMTElOVF9CRUdJTigp
OwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKbmdyZWF0ZXI+KCk7Ci0gICAgTExJTlRf
QlJBTkNIKCFqc0xlc3M8ZmFsc2U+KGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUucmhzKS5qc1Zh
bHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9C
UkFOQ0goIWpzTGVzczxmYWxzZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX3JocykuanNW
YWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkpKTsKIH0KIAogTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2psZXNzZXEpCiB7CiAgICAgTExJTlRfQkVHSU4o
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSmxlc3NlcT4oKTsKLSAgICBMTElOVF9C
UkFOQ0goanNMZXNzRXE8dHJ1ZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5saHMpLmpzVmFs
dWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSkpOworICAgIExMSU5UX0JS
QU5DSChqc0xlc3NFcTx0cnVlPihleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1Zh
bHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpOwogfQogCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfam5sZXNzZXEpCiB7CiAgICAgTExJTlRfQkVHSU4o
KTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSm5sZXNzZXE+KCk7Ci0gICAgTExJTlRf
QlJBTkNIKCFqc0xlc3NFcTx0cnVlPihleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLmxocykuanNW
YWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpKSk7CisgICAgTExJTlRf
QlJBTkNIKCFqc0xlc3NFcTx0cnVlPihleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbGhzKS5q
c1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpOwogfQogCiBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfamdyZWF0ZXJlcSkKIHsKICAgICBMTElOVF9C
RUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKZ3JlYXRlcmVxPigpOwotICAg
IExMSU5UX0JSQU5DSChqc0xlc3NFcTxmYWxzZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5y
aHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKSkpOworICAg
IExMSU5UX0JSQU5DSChqc0xlc3NFcTxmYWxzZT4oZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5t
X3JocykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCkpKTsK
IH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2puZ3JlYXRlcmVxKQogewogICAg
IExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEpuZ3JlYXRlcmVx
PigpOwotICAgIExMSU5UX0JSQU5DSCghanNMZXNzRXE8ZmFsc2U+KGV4ZWMsIExMSU5UX09QX0Mo
Ynl0ZWNvZGUucmhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVl
KCkpKTsKKyAgICBMTElOVF9CUkFOQ0goIWpzTGVzc0VxPGZhbHNlPihleGVjLCBMTElOVF9PUF9D
KGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUubV9saHMpLmpz
VmFsdWUoKSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfamVxKQogewog
ICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEplcT4oKTsK
LSAgICBMTElOVF9CUkFOQ0goSlNWYWx1ZTo6ZXF1YWwoZXhlYywgTExJTlRfT1BfQyhieXRlY29k
ZS5saHMpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSkpOwor
ICAgIExMSU5UX0JSQU5DSChKU1ZhbHVlOjplcXVhbChleGVjLCBMTElOVF9PUF9DKGJ5dGVjb2Rl
Lm1fbGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkp
OwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfam5lcSkKIHsKICAgICBMTElO
VF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKbmVxPigpOwotICAgIExM
SU5UX0JSQU5DSCghSlNWYWx1ZTo6ZXF1YWwoZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5saHMp
LmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKSkpOworICAgIExM
SU5UX0JSQU5DSCghSlNWYWx1ZTo6ZXF1YWwoZXhlYywgTExJTlRfT1BfQyhieXRlY29kZS5tX2xo
cykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKTsKIH0K
IAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pzdHJpY3RlcSkKIHsKICAgICBMTElO
VF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BKc3RyaWN0ZXE+KCk7Ci0g
ICAgTExJTlRfQlJBTkNIKEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0
ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkp
KTsKKyAgICBMTElOVF9CUkFOQ0goSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgTExJTlRfT1Bf
QyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fcmhzKS5q
c1ZhbHVlKCkpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2puc3RyaWN0
ZXEpCiB7CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
Sm5zdHJpY3RlcT4oKTsKLSAgICBMTElOVF9CUkFOQ0goIUpTVmFsdWU6OnN0cmljdEVxdWFsKGV4
ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIExMSU5UX09QX0MoYnl0ZWNv
ZGUucmhzKS5qc1ZhbHVlKCkpKTsKKyAgICBMTElOVF9CUkFOQ0goIUpTVmFsdWU6OnN0cmljdEVx
dWFsKGV4ZWMsIExMSU5UX09QX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgTExJTlRfT1Bf
QyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpKSk7CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9zd2l0Y2hfaW1tKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcFN3aXRjaEltbT4oKTsKLSAgICBKU1ZhbHVlIHNjcnV0aW5lZSA9
IExMSU5UX09QX0MoYnl0ZWNvZGUuc2NydXRpbmVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBz
Y3J1dGluZWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fc2NydXRpbmVlKS5qc1ZhbHVlKCk7CiAg
ICAgQVNTRVJUKHNjcnV0aW5lZS5pc0RvdWJsZSgpKTsKICAgICBkb3VibGUgdmFsdWUgPSBzY3J1
dGluZWUuYXNEb3VibGUoKTsKICAgICBpbnQzMl90IGludFZhbHVlID0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4odmFsdWUpOwotICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gSlVNUF9PRkZTRVQoYnl0ZWNv
ZGUuZGVmYXVsdE9mZnNldCk7CisgICAgaW50IGRlZmF1bHRPZmZzZXQgPSBKVU1QX09GRlNFVChi
eXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwogICAgIGlmICh2YWx1ZSA9PSBpbnRWYWx1ZSkgewog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAg
ICBKVU1QX1RPKGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGJ5dGVjb2RlLnRhYmxlSW5kZXgp
Lm9mZnNldEZvclZhbHVlKGludFZhbHVlLCBkZWZhdWx0T2Zmc2V0KSk7CisgICAgICAgIEpVTVBf
VE8oY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUoYnl0ZWNvZGUubV90YWJsZUluZGV4KS5vZmZz
ZXRGb3JWYWx1ZShpbnRWYWx1ZSwgZGVmYXVsdE9mZnNldCkpOwogICAgIH0gZWxzZQogICAgICAg
ICBKVU1QX1RPKGRlZmF1bHRPZmZzZXQpOwogICAgIExMSU5UX0VORCgpOwpAQCAtMTMwMywxNCAr
MTMwMywxNCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc3dpdGNoX2NoCiB7CiAg
ICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wU3dpdGNoQ2hh
cj4oKTsKLSAgICBKU1ZhbHVlIHNjcnV0aW5lZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUuc2NydXRp
bmVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBzY3J1dGluZWUgPSBMTElOVF9PUF9DKGJ5dGVj
b2RlLm1fc2NydXRpbmVlKS5qc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHNjcnV0aW5lZS5pc1N0cmlu
ZygpKTsKICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoc2NydXRpbmVlKTsKICAgICBB
U1NFUlQoc3RyaW5nLT5sZW5ndGgoKSA9PSAxKTsKLSAgICBpbnQgZGVmYXVsdE9mZnNldCA9IEpV
TVBfT0ZGU0VUKGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOworICAgIGludCBkZWZhdWx0T2Zmc2V0
ID0gSlVNUF9PRkZTRVQoYnl0ZWNvZGUubV9kZWZhdWx0T2Zmc2V0KTsKICAgICBTdHJpbmdJbXBs
KiBpbXBsID0gc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCk7CiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKVU1QX1RPKGNvZGVCbG9jay0+c3dpdGNo
SnVtcFRhYmxlKGJ5dGVjb2RlLnRhYmxlSW5kZXgpLm9mZnNldEZvclZhbHVlKCgqaW1wbClbMF0s
IGRlZmF1bHRPZmZzZXQpKTsKKyAgICBKVU1QX1RPKGNvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KGJ5dGVjb2RlLm1fdGFibGVJbmRleCkub2Zmc2V0Rm9yVmFsdWUoKCppbXBsKVswXSwgZGVmYXVs
dE9mZnNldCkpOwogICAgIExMSU5UX0VORCgpOwogfQogCkBAIC0xMzE4LDEzICsxMzE4LDEzIEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9zd2l0Y2hfc3QKIHsKICAgICBMTElOVF9C
RUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7Ci0g
ICAgSlNWYWx1ZSBzY3J1dGluZWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLnNjcnV0aW5lZSkuanNW
YWx1ZSgpOwotICAgIGludCBkZWZhdWx0T2Zmc2V0ID0gSlVNUF9PRkZTRVQoYnl0ZWNvZGUuZGVm
YXVsdE9mZnNldCk7CisgICAgSlNWYWx1ZSBzY3J1dGluZWUgPSBMTElOVF9PUF9DKGJ5dGVjb2Rl
Lm1fc2NydXRpbmVlKS5qc1ZhbHVlKCk7CisgICAgaW50IGRlZmF1bHRPZmZzZXQgPSBKVU1QX09G
RlNFVChieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwogICAgIGlmICghc2NydXRpbmVlLmlzU3Ry
aW5nKCkpCiAgICAgICAgIEpVTVBfVE8oZGVmYXVsdE9mZnNldCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgICAgIEpV
TVBfVE8oY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoYnl0ZWNvZGUudGFibGVJbmRl
eCkub2Zmc2V0Rm9yVmFsdWUoYXNTdHJpbmcoc2NydXRpbmVlKS0+dmFsdWUoZXhlYykuaW1wbCgp
LCBkZWZhdWx0T2Zmc2V0KSk7CisgICAgICAgIEpVTVBfVE8oY29kZUJsb2NrLT5zdHJpbmdTd2l0
Y2hKdW1wVGFibGUoYnl0ZWNvZGUubV90YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1ZShhc1N0cmlu
ZyhzY3J1dGluZWUpLT52YWx1ZShleGVjKS5pbXBsKCksIGRlZmF1bHRPZmZzZXQpKTsKICAgICB9
CiAgICAgTExJTlRfRU5EKCk7CiB9CkBAIC0xMzM0LDkgKzEzMzQsOSBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfbmV3X2Z1bmMpCiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3RnVuYz4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVj
a2VkUihieXRlY29kZS5zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2Nv
cGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgp
OwogICAgIHNsb3dQYXRoTG9nRigiQ3JlYXRpbmcgZnVuY3Rpb24hXG4iKTsKLSAgICBMTElOVF9S
RVRVUk4oSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBjb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRl
Y29kZS5mdW5jdGlvbkRlY2wpLCBzY29wZSkpOworICAgIExMSU5UX1JFVFVSTihKU0Z1bmN0aW9u
OjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKSwgc2NvcGUpKTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19n
ZW5lcmF0b3JfZnVuYykKQEAgLTEzNDQsOSArMTM0NCw5IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9uZXdfZ2VuZXIKICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BOZXdHZW5lcmF0b3JGdW5jPigpOwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNo
ZWNrZWRSKGJ5dGVjb2RlLnNjb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBz
Y29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3Bl
KCk7CiAgICAgc2xvd1BhdGhMb2dGKCJDcmVhdGluZyBmdW5jdGlvbiFcbiIpOwotICAgIExMSU5U
X1JFVFVSTihKU0dlbmVyYXRvckZ1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rp
b25EZWNsKGJ5dGVjb2RlLmZ1bmN0aW9uRGVjbCksIHNjb3BlKSk7CisgICAgTExJTlRfUkVUVVJO
KEpTR2VuZXJhdG9yRnVuY3Rpb246OmNyZWF0ZSh2bSwgY29kZUJsb2NrLT5mdW5jdGlvbkRlY2wo
Ynl0ZWNvZGUubV9mdW5jdGlvbkRlY2wpLCBzY29wZSkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfbmV3X2FzeW5jX2Z1bmMpCkBAIC0xMzU0LDkgKzEzNTQsOSBAQCBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FzeW5jCiAgICAgTExJTlRfQkVHSU4oKTsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3QXN5bmNGdW5jPigpOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgSlNTY29wZSogc2NvcGUg
PSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAg
ICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVn
aXN0ZXI6OnNjb3BlKCk7CiAgICAgc2xvd1BhdGhMb2dGKCJDcmVhdGluZyBhc3luYyBmdW5jdGlv
biFcbiIpOwotICAgIExMSU5UX1JFVFVSTihKU0FzeW5jRnVuY3Rpb246OmNyZWF0ZSh2bSwgY29k
ZUJsb2NrLT5mdW5jdGlvbkRlY2woYnl0ZWNvZGUuZnVuY3Rpb25EZWNsKSwgc2NvcGUpKTsKKyAg
ICBMTElOVF9SRVRVUk4oSlNBc3luY0Z1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVu
Y3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSwgc2NvcGUpKTsKIH0KIAogTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hc3luY19nZW5lcmF0b3JfZnVuYykKQEAgLTEz
NjQsOSArMTM2NCw5IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmMK
ICAgICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBc3lu
Y0dlbmVyYXRvckZ1bmM+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
c2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5j
aGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBzbG93UGF0
aExvZ0YoIkNyZWF0aW5nIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiFcbiIpOwotICAgIExMSU5U
X1JFVFVSTihKU0FzeW5jR2VuZXJhdG9yRnVuY3Rpb246OmNyZWF0ZSh2bSwgY29kZUJsb2NrLT5m
dW5jdGlvbkRlY2woYnl0ZWNvZGUuZnVuY3Rpb25EZWNsKSwgc2NvcGUpKTsKKyAgICBMTElOVF9S
RVRVUk4oSlNBc3luY0dlbmVyYXRvckZ1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVu
Y3Rpb25EZWNsKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKSwgc2NvcGUpKTsKIH0KICAgICAKIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfZnVuY19leHApCkBAIC0xMzc1LDggKzEz
NzUsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2Z1bmNfCiAgICAgCiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5ld0Z1bmNFeHA+KCk7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4
ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUuc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5
dGVjb2RlLmZ1bmN0aW9uRGVjbCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNr
ZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1f
ZnVuY3Rpb25EZWNsKTsKICAgICAKICAgICBMTElOVF9SRVRVUk4oSlNGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBleGVjdXRhYmxlLCBzY29wZSkpOwogfQpAQCAtMTM4Nyw4ICsxMzg3LDggQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19nZW5lcgogCiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcE5ld0dlbmVyYXRvckZ1bmNFeHA+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hl
Y2tlZFIoYnl0ZWNvZGUuc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwotICAgIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLmZ1
bmN0aW9uRGVjbCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVj
b2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25E
ZWNsKTsKIAogICAgIExMSU5UX1JFVFVSTihKU0dlbmVyYXRvckZ1bmN0aW9uOjpjcmVhdGUodm0s
IGV4ZWN1dGFibGUsIHNjb3BlKSk7CiB9CkBAIC0xMzk5LDggKzEzOTksOCBAQCBMTElOVF9TTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FzeW5jCiAgICAgCiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcE5ld0FzeW5jRnVuY0V4cD4oKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2Vk
UihieXRlY29kZS5zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUuZnVuY3Rp
b25EZWNsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIoYnl0ZWNvZGUu
bV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5jdGlvbkRlY2wp
OwogICAgIAogICAgIExMSU5UX1JFVFVSTihKU0FzeW5jRnVuY3Rpb246OmNyZWF0ZSh2bSwgZXhl
Y3V0YWJsZSwgc2NvcGUpKTsKIH0KQEAgLTE0MTEsOCArMTQxMSw4IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9uZXdfYXN5bmMKICAgICAgICAgCiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcE5ld0FzeW5jR2VuZXJhdG9yRnVuY0V4cD4oKTsKICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+
dW5jaGVja2VkUihieXRlY29kZS5zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNv
ZGUuZnVuY3Rpb25EZWNsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGV4ZWMtPnVuY2hlY2tlZFIo
Ynl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoYnl0ZWNvZGUubV9mdW5j
dGlvbkRlY2wpOwogICAgICAgICAKICAgICBMTElOVF9SRVRVUk4oSlNBc3luY0dlbmVyYXRvckZ1
bmN0aW9uOjpjcmVhdGUodm0sIGV4ZWN1dGFibGUsIHNjb3BlKSk7CiB9CkBAIC0xNDIxLDggKzE0
MjEsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2V0X2Z1bmN0CiB7CiAgICAg
TExJTlRfQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wU2V0RnVuY3Rpb25O
YW1lPigpOwotICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KExMSU5U
X09QKGJ5dGVjb2RlLmZ1bmN0aW9uKS5SZWdpc3Rlcjo6dW5ib3hlZENlbGwoKSk7Ci0gICAgSlNW
YWx1ZSBuYW1lID0gTExJTlRfT1BfQyhieXRlY29kZS5uYW1lKS5SZWdpc3Rlcjo6anNWYWx1ZSgp
OworICAgIEpTRnVuY3Rpb24qIGZ1bmMgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KExMSU5UX09QKGJ5
dGVjb2RlLm1fZnVuY3Rpb24pLlJlZ2lzdGVyOjp1bmJveGVkQ2VsbCgpKTsKKyAgICBKU1ZhbHVl
IG5hbWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fbmFtZSkuUmVnaXN0ZXI6OmpzVmFsdWUoKTsK
ICAgICBmdW5jLT5zZXRGdW5jdGlvbk5hbWUoZXhlYywgbmFtZSk7CiAgICAgTExJTlRfRU5EKCk7
CiB9CkBAIC0xNTcyLDE2ICsxNTcyLDE2IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2Vu
ZXJpY0NhbGwoRXgKICAgICAvLyAtIElmIHBvc3NpYmxlLCBsaW5rIHRoZSBjYWxsJ3MgaW5saW5l
IGNhY2hlLgogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3Mg
dG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgogICAgIAotICAgIEpTVmFsdWUgY2FsbGVl
QXNWYWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUuY2FsbGVlKS5qc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2NhbGxlZSkuanNWYWx1
ZSgpOwogICAgIAotICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSA9IGV4ZWMgLSBieXRlY29kZS5h
cmd2OworICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSA9IGV4ZWMgLSBieXRlY29kZS5tX2FyZ3Y7
CiAgICAgCi0gICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYnl0
ZWNvZGUuYXJnYyk7CisgICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoYnl0ZWNvZGUubV9hcmdjKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxl
ckZyYW1lKGV4ZWMpOwogICAgIAogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoZXhlYyk7Ci0gICAgcmV0dXJuIHNldFVwQ2FsbChleGVjQ2FsbGVlLCBraW5kLCBjYWxsZWVB
c1ZhbHVlLCAmbWV0YWRhdGEuY2FsbExpbmtJbmZvKTsKKyAgICByZXR1cm4gc2V0VXBDYWxsKGV4
ZWNDYWxsZWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUsICZtZXRhZGF0YS5tX2NhbGxMaW5rSW5mbyk7
CiB9CiAKIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsKQpAQCAtMTYxNCwyMyAr
MTYxNCwyMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfc2l6ZV9mcmFtCiAgICAg
c3dpdGNoIChwYy0+b3Bjb2RlSUQoKSkgewogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDYWxsVmFyYXJncz4oKTsKLSAgICAgICAg
bnVtVXNlZFN0YWNrU2xvdHMgPSAtYnl0ZWNvZGUuZmlyc3RGcmVlLm9mZnNldCgpOwotICAgICAg
ICBhcmd1bWVudHMgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLmFyZ3VtZW50cykuanNWYWx1ZSgpOwot
ICAgICAgICBmaXJzdFZhckFyZyA9IGJ5dGVjb2RlLmZpcnN0VmFyQXJnOworICAgICAgICBudW1V
c2VkU3RhY2tTbG90cyA9IC1ieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICAgICAg
YXJndW1lbnRzID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpOwor
ICAgICAgICBmaXJzdFZhckFyZyA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmc7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUYWlsQ2FsbFZhcmFyZ3M+KCk7Ci0gICAgICAgIG51bVVz
ZWRTdGFja1Nsb3RzID0gLWJ5dGVjb2RlLmZpcnN0RnJlZS5vZmZzZXQoKTsKLSAgICAgICAgYXJn
dW1lbnRzID0gTExJTlRfT1BfQyhieXRlY29kZS5hcmd1bWVudHMpLmpzVmFsdWUoKTsKLSAgICAg
ICAgZmlyc3RWYXJBcmcgPSBieXRlY29kZS5maXJzdFZhckFyZzsKKyAgICAgICAgbnVtVXNlZFN0
YWNrU2xvdHMgPSAtYnl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CisgICAgICAgIGFyZ3Vt
ZW50cyA9IExMSU5UX09QX0MoYnl0ZWNvZGUubV9hcmd1bWVudHMpLmpzVmFsdWUoKTsKKyAgICAg
ICAgZmlyc3RWYXJBcmcgPSBieXRlY29kZS5tX2ZpcnN0VmFyQXJnOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogewogICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKTsKLSAgICAgICAgbnVtVXNlZFN0
YWNrU2xvdHMgPSAtYnl0ZWNvZGUuZmlyc3RGcmVlLm9mZnNldCgpOwotICAgICAgICBhcmd1bWVu
dHMgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLmFyZ3VtZW50cykuanNWYWx1ZSgpOwotICAgICAgICBm
aXJzdFZhckFyZyA9IGJ5dGVjb2RlLmZpcnN0VmFyQXJnOworICAgICAgICBudW1Vc2VkU3RhY2tT
bG90cyA9IC1ieXRlY29kZS5tX2ZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICAgICAgYXJndW1lbnRz
ID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpOworICAgICAgICBm
aXJzdFZhckFyZyA9IGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmc7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBkZWZhdWx0OgpAQCAtMTY1Myw3ICsxNjUzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3NpemVfZnJhbQogICAgIC8vIC0gU2V0IHVwIGEgY2FsbCBmcmFtZSB3aXRo
IHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgY3VycmVudCBmcmFtZS4KIAogICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHM+KCk7Ci0gICAgdW5zaWdu
ZWQgbnVtVXNlZFN0YWNrU2xvdHMgPSAtYnl0ZWNvZGUuZmlyc3RGcmVlLm9mZnNldCgpOworICAg
IHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzID0gLWJ5dGVjb2RlLm1fZmlyc3RGcmVlLm9mZnNl
dCgpOwogCiAgICAgdW5zaWduZWQgYXJndW1lbnRzID0gc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3Vt
ZW50cyhleGVjLCB2bSwgbnVtVXNlZFN0YWNrU2xvdHMpOwogICAgIExMSU5UX0NBTExfQ0hFQ0tf
RVhDRVBUSU9OKGV4ZWMsIGV4ZWMpOwpAQCAtMTY4MCwxNSArMTY4MCwxNSBAQCBpbmxpbmUgU2xv
d1BhdGhSZXR1cm5UeXBlIHZhcmFyZ3NTZXR1cChFCiAgICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBv
ZiBtYWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCiAK
ICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wPigpOwotICAgIEpTVmFsdWUgY2FsbGVlQXNW
YWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUuY2FsbGVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1BfQyhieXRlY29kZS5tX2NhbGxlZSkuanNWYWx1ZSgp
OwogCiAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gdm0ubmV3Q2FsbEZyYW1lUmV0dXJuVmFs
dWU7CiAKICAgICBpZiAoc2V0ID09IFNldEFyZ3VtZW50c1dpdGg6Ok9iamVjdCkgewotICAgICAg
ICBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoZXhlYywgZXhlY0NhbGxlZSwgTExJTlRfT1Bf
QyhieXRlY29kZS50aGlzVmFsdWUpLmpzVmFsdWUoKSwgTExJTlRfT1BfQyhieXRlY29kZS5hcmd1
bWVudHMpLmpzVmFsdWUoKSwgYnl0ZWNvZGUuZmlyc3RWYXJBcmcsIHZtLnZhcmFyZ3NMZW5ndGgp
OworICAgICAgICBzZXR1cFZhcmFyZ3NGcmFtZUFuZFNldFRoaXMoZXhlYywgZXhlY0NhbGxlZSwg
TExJTlRfT1BfQyhieXRlY29kZS5tX3RoaXNWYWx1ZSkuanNWYWx1ZSgpLCBMTElOVF9PUF9DKGJ5
dGVjb2RlLm1fYXJndW1lbnRzKS5qc1ZhbHVlKCksIGJ5dGVjb2RlLm1fZmlyc3RWYXJBcmcsIHZt
LnZhcmFyZ3NMZW5ndGgpOwogICAgICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElPTihleGVj
LCBleGVjKTsKICAgICB9IGVsc2UKLSAgICAgICAgc2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWVB
bmRTZXRUaGlzKGV4ZWMsIGV4ZWNDYWxsZWUsIExMSU5UX09QX0MoYnl0ZWNvZGUudGhpc1ZhbHVl
KS5qc1ZhbHVlKCksIHZtLnZhcmFyZ3NMZW5ndGgpOworICAgICAgICBzZXR1cEZvcndhcmRBcmd1
bWVudHNGcmFtZUFuZFNldFRoaXMoZXhlYywgZXhlY0NhbGxlZSwgTExJTlRfT1BfQyhieXRlY29k
ZS5tX3RoaXNWYWx1ZSkuanNWYWx1ZSgpLCB2bS52YXJhcmdzTGVuZ3RoKTsKIAogICAgIGV4ZWND
YWxsZWUtPnNldENhbGxlckZyYW1lKGV4ZWMpOwogICAgIGV4ZWNDYWxsZWUtPnVuY2hlY2tlZFIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CkBAIC0xNzIxLDExICsxNzIx
LDExIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwKIHsKICAgICBM
TElOVF9CRUdJTl9OT19TRVRfUEMoKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQ2Fs
bEV2YWw+KCk7Ci0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1AoYnl0ZWNvZGUu
Y2FsbGVlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1Ao
Ynl0ZWNvZGUubV9jYWxsZWUpLmpzVmFsdWUoKTsKICAgICAKLSAgICBFeGVjU3RhdGUqIGV4ZWND
YWxsZWUgPSBleGVjIC0gYnl0ZWNvZGUuYXJndjsKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUg
PSBleGVjIC0gYnl0ZWNvZGUubV9hcmd2OwogICAgIAotICAgIGV4ZWNDYWxsZWUtPnNldEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLmFyZ2MpOworICAgIGV4ZWNDYWxsZWUtPnNl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAgICAgZXhlY0Nh
bGxlZS0+c2V0Q2FsbGVyRnJhbWUoZXhlYyk7CiAgICAgZXhlY0NhbGxlZS0+dW5jaGVja2VkUihD
YWxsRnJhbWVTbG90OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBleGVjQ2FsbGVlLT5z
ZXRSZXR1cm5QQyhyZXR1cm5Qb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKTsKQEAgLTE3NTMsMjEg
KzE3NTMsMjEgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3N0cmNhdCkKIHsKICAg
ICBMTElOVF9CRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BTdHJjYXQ+KCk7
Ci0gICAgTExJTlRfUkVUVVJOKGpzU3RyaW5nRnJvbVJlZ2lzdGVyQXJyYXkoZXhlYywgJkxMSU5U
X09QKGJ5dGVjb2RlLnNyYyksIGJ5dGVjb2RlLmNvdW50KSk7CisgICAgTExJTlRfUkVUVVJOKGpz
U3RyaW5nRnJvbVJlZ2lzdGVyQXJyYXkoZXhlYywgJkxMSU5UX09QKGJ5dGVjb2RlLm1fc3JjKSwg
Ynl0ZWNvZGUubV9jb3VudCkpOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dG9fcHJpbWl0aXZlKQogewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcFRvUHJpbWl0aXZlPigpOwotICAgIExMSU5UX1JFVFVSTihMTElOVF9PUF9DKGJ5
dGVjb2RlLnNyYykuanNWYWx1ZSgpLnRvUHJpbWl0aXZlKGV4ZWMpKTsKKyAgICBMTElOVF9SRVRV
Uk4oTExJTlRfT1BfQyhieXRlY29kZS5tX3NyYykuanNWYWx1ZSgpLnRvUHJpbWl0aXZlKGV4ZWMp
KTsKIH0KIAogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Rocm93KQogewogICAgIExM
SU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRocm93PigpOwotICAg
IExMSU5UX1RIUk9XKExMSU5UX09QX0MoYnl0ZWNvZGUudmFsdWUpLmpzVmFsdWUoKSk7CisgICAg
TExJTlRfVEhST1coTExJTlRfT1BfQyhieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCkpOwogfQog
CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaGFuZGxlX3RyYXBzKQpAQCAtMTc4Myw3
ICsxNzgzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlYnVnKQogewogICAg
IExMSU5UX0JFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcERlYnVnPigpOwot
ICAgIHZtLmludGVycHJldGVyLT5kZWJ1ZyhleGVjLCBieXRlY29kZS5kZWJ1Z0hvb2tUeXBlKTsK
KyAgICB2bS5pbnRlcnByZXRlci0+ZGVidWcoZXhlYywgYnl0ZWNvZGUubV9kZWJ1Z0hvb2tUeXBl
KTsKICAgICAKICAgICBMTElOVF9FTkQoKTsKIH0KQEAgLTE4MDEsMTUgKzE4MDEsMTUgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tXwogICAgIExMSU5UX0JFR0lOKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEZyb21TY29wZT4oKTsKICAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGV4ZWMpOwotICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIoYnl0ZWNvZGUudmFyKTsK
LSAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihMTElOVF9PUChieXRlY29k
ZS5zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKKyAgICBKU09iamVjdCog
c2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihMTElOVF9PUChieXRlY29kZS5tX3Njb3BlKS5qc1Zh
bHVlKCkpOwogCiAgICAgLy8gTW9kdWxlVmFyIGlzIGFsd2F5cyBjb252ZXJ0ZWQgdG8gQ2xvc3Vy
ZVZhciBmb3IgZ2V0X2Zyb21fc2NvcGUuCi0gICAgQVNTRVJUKG1ldGFkYXRhLmdldFB1dEluZm8u
cmVzb2x2ZVR5cGUoKSAhPSBNb2R1bGVWYXIpOworICAgIEFTU0VSVChtZXRhZGF0YS5tX2dldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKSAhPSBNb2R1bGVWYXIpOwogCiAgICAgTExJTlRfUkVUVVJOKHNj
b3BlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIFsmXSAoYm9vbCBmb3VuZCwgUHJvcGVy
dHlTbG90JiBzbG90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAg
ICAgICAgaWYgKG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSA9PSBUaHJvd0lmTm90
Rm91bmQpCisgICAgICAgICAgICBpZiAobWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVNb2Rl
KCkgPT0gVGhyb3dJZk5vdEZvdW5kKQogICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2Vw
dGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMs
IGlkZW50KSk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQpA
QCAtMTgzNywxOCArMTgzNywxOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X3RvX3NjCiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnZhcik7Ci0gICAgSlNPYmplY3Qq
IHNjb3BlID0ganNDYXN0PEpTT2JqZWN0Kj4oTExJTlRfT1AoYnl0ZWNvZGUuc2NvcGUpLmpzVmFs
dWUoKSk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IExMSU5UX09QX0MoYnl0ZWNvZGUudmFsdWUpLmpz
VmFsdWUoKTsKLSAgICBpZiAobWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpID09IExv
Y2FsQ2xvc3VyZVZhcikgeworICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nh
c3Q8SlNPYmplY3QqPihMTElOVF9PUChieXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBMTElOVF9PUF9DKGJ5dGVjb2RlLm1fdmFsdWUpLmpzVmFsdWUoKTsK
KyAgICBpZiAobWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCkgPT0gTG9jYWxDbG9z
dXJlVmFyKSB7CiAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVudCA9IGpz
Q2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KHNjb3BlKTsKLSAgICAgICAgZW52aXJvbm1lbnQt
PnZhcmlhYmxlQXQoU2NvcGVPZmZzZXQobWV0YWRhdGEub3BlcmFuZCkpLnNldCh2bSwgZW52aXJv
bm1lbnQsIHZhbHVlKTsKKyAgICAgICAgZW52aXJvbm1lbnQtPnZhcmlhYmxlQXQoU2NvcGVPZmZz
ZXQobWV0YWRhdGEubV9vcGVyYW5kKSkuc2V0KHZtLCBlbnZpcm9ubWVudCwgdmFsdWUpOwogICAg
ICAgICAKICAgICAgICAgLy8gSGF2ZSB0byBkbyB0aGlzICphZnRlciogdGhlIHdyaXRlLCBiZWNh
dXNlIGlmIHRoaXMgcHV0cyB0aGUgc2V0IGludG8gSXNXYXRjaGVkLCB0aGVuIHdlIG5lZWQKICAg
ICAgICAgLy8gdG8gaGF2ZSBhbHJlYWR5IGNoYW5nZWQgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJs
ZS4gT3RoZXJ3aXNlIHdlIG1pZ2h0IHdhdGNoIGFuZCBjb25zdGFudC1mb2xkCiAgICAgICAgIC8v
IHRvIHRoZSBVbmRlZmluZWQgdmFsdWUgZnJvbSBiZWZvcmUgdGhlIGFzc2lnbm1lbnQuCi0gICAg
ICAgIGlmIChtZXRhZGF0YS53YXRjaHBvaW50U2V0KQotICAgICAgICAgICAgbWV0YWRhdGEud2F0
Y2hwb2ludFNldC0+dG91Y2godm0sICJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJl
VmFyPiIpOworICAgICAgICBpZiAobWV0YWRhdGEubV93YXRjaHBvaW50U2V0KQorICAgICAgICAg
ICAgbWV0YWRhdGEubV93YXRjaHBvaW50U2V0LT50b3VjaCh2bSwgIkV4ZWN1dGVkIG9wX3B1dF9z
Y29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAgICAgIExMSU5UX0VORCgpOwogICAgIH0KIApA
QCAtMTg1Niw3ICsxODU2LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90
b19zYwogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIGlmIChoYXNQcm9wZXJ0eQog
ICAgICAgICAmJiBzY29wZS0+aXNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKQotICAgICAgICAm
JiAhaXNJbml0aWFsaXphdGlvbihtZXRhZGF0YS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSkgeworICAgICAgICAmJiAhaXNJbml0aWFsaXphdGlvbihtZXRhZGF0YS5tX2dldFB1dElu
Zm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpKSB7CiAgICAgICAgIC8vIFdoZW4gd2UgY2FuJ3Qgc3Rh
dGljYWxseSBwcm92ZSB3ZSBuZWVkIGEgVERaIGNoZWNrLCB3ZSBtdXN0IHBlcmZvcm0gdGhlIGNo
ZWNrIG9uIHRoZSBzbG93IHBhdGguCiAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICAgICAgSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQ6OmdldE93blByb3BlcnR5U2xvdChzY29wZSwgZXhlYywgaWRlbnQs
IHNsb3QpOwpAQCAtMTg2NCwxMCArMTg2NCwxMCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcHV0X3RvX3NjCiAgICAgICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVURFpFcnJvcihl
eGVjKSk7CiAgICAgfQogCi0gICAgaWYgKG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUo
KSA9PSBUaHJvd0lmTm90Rm91bmQgJiYgIWhhc1Byb3BlcnR5KQorICAgIGlmIChtZXRhZGF0YS5t
X2dldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQgJiYgIWhhc1Byb3Bl
cnR5KQogICAgICAgICBMTElOVF9USFJPVyhjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4
ZWMsIGlkZW50KSk7CiAKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSwgY29kZUJsb2Nr
LT5pc1N0cmljdE1vZGUoKSwgUHV0UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCwgaXNJbml0
aWFsaXphdGlvbihtZXRhZGF0YS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSk7Cisg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCks
IFB1dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQsIGlzSW5pdGlhbGl6YXRpb24obWV0YWRh
dGEubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSk7CiAgICAgc2NvcGUtPm1ldGhv
ZFRhYmxlKHZtKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAog
ICAgIENvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKGV4ZWMsIGNvZGVC
bG9jaywgYnl0ZWNvZGUsIHNjb3BlLCBzbG90LCBpZGVudCk7CkBAIC0xODkwLDcgKzE4OTAsNyBA
QCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbG9nX3NoYWRvCiAgICAgTExJTlRfQkVH
SU4oKTsKICAgICAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTG9nU2hhZG93Q2hpY2tl
blByb2xvZ3VlPigpOwotICAgIEpTU2NvcGUqIHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRl
Y29kZS5zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBleGVj
LT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIHZt
LnNoYWRvd0NoaWNrZW4oKS5sb2codm0sIGV4ZWMsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6cHJv
bG9ndWUoZXhlYy0+anNDYWxsZWUoKSwgZXhlYywgZXhlYy0+Y2FsbGVyRnJhbWUoKSwgc2NvcGUp
KTsKICAgICAKICAgICBMTElOVF9FTkQoKTsKQEAgLTE5MDEsOCArMTkwMSw4IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sb2dfc2hhZG8KICAgICBMTElOVF9CRUdJTigpOwogCiAg
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwotICAg
IEpTVmFsdWUgdGhpc1ZhbHVlID0gTExJTlRfT1AoYnl0ZWNvZGUudGhpc1ZhbHVlKS5qc1ZhbHVl
KCk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3Bl
KS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IExMSU5UX09QKGJ5
dGVjb2RlLm1fdGhpc1ZhbHVlKS5qc1ZhbHVlKCk7CisgICAgSlNTY29wZSogc2NvcGUgPSBleGVj
LT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIAog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KGV4ZWMt
PmNvZGVCbG9jaygpLT5ieXRlY29kZU9mZnNldChwYykpOwpAQCAtMTkyMiw3ICsxOTIyLDcgQEAg
TExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Byb2ZpbGVfYwogCiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEoZXhlYyk7Ci0gICAgbWV0YWRhdGEuYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQ
cm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewogICAgICAgICBwcm9m
aWxlLm1fcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dW5jaGVj
a2VkUihwcm9maWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20JKHJldmlzaW9uIDI0MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQg
KzEsNCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMjcgKzM1LDI3
IEBAIG1hY3JvIG5leHRJbnN0cnVjdGlvbldpZGUoKQogICAgIGptcCBbdDEsIHQwLCA0XSwgQnl0
ZWNvZGVQdHJUYWcKIGVuZAogCi1tYWNybyBnZXR1T3BlcmFuZE5hcnJvdyhvcCwgZmllbGQsIGRz
dCkKLSAgICBsb2FkYiBjb25zdGV4cHIgJW9wJV8lZmllbGQlX2luZGV4W1BDXSwgZHN0CittYWNy
byBnZXR1T3BlcmFuZE5hcnJvdyhvcCwgZmllbGROYW1lLCBkc3QpCisgICAgbG9hZGIgY29uc3Rl
eHByICVvcCVfJWZpZWxkTmFtZSVfaW5kZXhbUENdLCBkc3QKIGVuZAogCi1tYWNybyBnZXRPcGVy
YW5kTmFycm93KG9wLCBmaWVsZCwgZHN0KQotICAgIGxvYWRic3AgY29uc3RleHByICVvcCVfJWZp
ZWxkJV9pbmRleFtQQ10sIGRzdAorbWFjcm8gZ2V0T3BlcmFuZE5hcnJvdyhvcCwgZmllbGROYW1l
LCBkc3QpCisgICAgbG9hZGJzcCBjb25zdGV4cHIgJW9wJV8lZmllbGROYW1lJV9pbmRleFtQQ10s
IGRzdAogZW5kCiAKLW1hY3JvIGdldHVPcGVyYW5kV2lkZShvcCwgZmllbGQsIGRzdCkKLSAgICBs
b2FkaSBjb25zdGV4cHIgJW9wJV8lZmllbGQlX2luZGV4ICogNCArIDFbUENdLCBkc3QKK21hY3Jv
IGdldHVPcGVyYW5kV2lkZShvcCwgZmllbGROYW1lLCBkc3QpCisgICAgbG9hZGkgY29uc3RleHBy
ICVvcCVfJWZpZWxkTmFtZSVfaW5kZXggKiA0ICsgMVtQQ10sIGRzdAogZW5kCiAKLW1hY3JvIGdl
dE9wZXJhbmRXaWRlKG9wLCBmaWVsZCwgZHN0KQotICAgIGxvYWRpcyBjb25zdGV4cHIgJW9wJV8l
ZmllbGQlX2luZGV4ICogNCArIDFbUENdLCBkc3QKK21hY3JvIGdldE9wZXJhbmRXaWRlKG9wLCBm
aWVsZE5hbWUsIGRzdCkKKyAgICBsb2FkaXMgY29uc3RleHByICVvcCVfJWZpZWxkTmFtZSVfaW5k
ZXggKiA0ICsgMVtQQ10sIGRzdAogZW5kCiAKIG1hY3JvIG1ha2VSZXR1cm4oZ2V0LCBkaXNwYXRj
aCwgZm4pCiAgICAgZm4obWFjcm8odGFnLCBwYXlsb2FkKQogICAgICAgICBtb3ZlIHRhZywgdDUK
ICAgICAgICAgbW92ZSBwYXlsb2FkLCB0MwotICAgICAgICBnZXQoZHN0LCB0MikKKyAgICAgICAg
Z2V0KG1fZHN0LCB0MikKICAgICAgICAgc3RvcmVpIHQ1LCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0K
ICAgICAgICAgc3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCiAgICAgICAgIGRp
c3BhdGNoKCkKQEAgLTY5LDcgKzY5LDcgQEAgbWFjcm8gbWFrZVJldHVyblByb2ZpbGVkKG9wLCBn
ZXQsIG1ldGFkYQogCiAgICAgICAgIG1ldGFkYXRhKHQ1LCB0MikKICAgICAgICAgdmFsdWVQcm9m
aWxlKG9wLCB0NSwgdDEsIHQwKQotICAgICAgICBnZXQoZHN0LCB0MikKKyAgICAgICAgZ2V0KG1f
ZHN0LCB0MikKICAgICAgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0KICAgICAg
ICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDIsIDhdCiAgICAgICAgIGRpc3BhdGNo
KCkKQEAgLTc5LDcgKzc5LDcgQEAgZW5kCiAKIG1hY3JvIGRpc3BhdGNoQWZ0ZXJDYWxsKHNpemUs
IG9wLCBkaXNwYXRjaCkKICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0s
IFBDCi0gICAgZ2V0KHNpemUsIG9wLCBkc3QsIHQzKQorICAgIGdldChzaXplLCBvcCwgbV9kc3Qs
IHQzKQogICAgIHN0b3JlaSByMSwgVGFnT2Zmc2V0W2NmciwgdDMsIDhdCiAgICAgc3RvcmVpIHIw
LCBQYXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdCiAgICAgbWV0YWRhdGEoc2l6ZSwgb3AsIHQyLCB0
MykKQEAgLTQzOCwxMCArNDM4LDEwIEBAIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVRGb3JMb29wKCkK
ICAgICAgICAgZW5kKQogZW5kCiAKLW1hY3JvIGxvYWRWYXJpYWJsZShnZXQsIG9wZXJhbmQsIGlu
ZGV4LCB0YWcsIHBheWxvYWQpCi0gICAgZ2V0KG9wZXJhbmQsIGluZGV4KQotICAgIGxvYWRpIFRh
Z09mZnNldFtjZnIsIGluZGV4LCA4XSwgdGFnCi0gICAgbG9hZGkgUGF5bG9hZE9mZnNldFtjZnIs
IGluZGV4LCA4XSwgcGF5bG9hZAorbWFjcm8gbG9hZFZhcmlhYmxlKGdldCwgZmllbGROYW1lLCBp
bmRleFJlZywgdGFnUmVnLCBwYXlsb2FkUmVnKQorICAgIGdldChmaWVsZE5hbWUsIGluZGV4UmVn
KQorICAgIGxvYWRpIFRhZ09mZnNldFtjZnIsIGluZGV4UmVnLCA4XSwgdGFnUmVnCisgICAgbG9h
ZGkgUGF5bG9hZE9mZnNldFtjZnIsIGluZGV4UmVnLCA4XSwgcGF5bG9hZFJlZwogZW5kCiAKICMg
SW5kZXgsIHRhZywgYW5kIHBheWxvYWQgbXVzdCBiZSBkaWZmZXJlbnQgcmVnaXN0ZXJzLiBJbmRl
eCBpcyBub3QKQEAgLTUzMiw4ICs1MzIsOCBAQCBtYWNybyBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
UGF5bG9hZFVuY2hlCiAgICAgICAgIHBheWxvYWQpCiBlbmQKIAotbWFjcm8gd3JpdGVCYXJyaWVy
T25PcGVyYW5kKHNpemUsIGdldCwgY2VsbE9wZXJhbmQpCi0gICAgZ2V0KGNlbGxPcGVyYW5kLCB0
MSkKK21hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZChzaXplLCBnZXQsIGNlbGxGaWVsZE5hbWUp
CisgICAgZ2V0KGNlbGxGaWVsZE5hbWUsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQ
YXlsb2FkKHNpemUsIHQxLCBDZWxsVGFnLCB0MiwgLndyaXRlQmFycmllckRvbmUpCiAgICAgc2tp
cElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oCiAgICAgICAgIHQyLCAKQEAgLTU1MCwyMSArNTUwLDIx
IEBAIG1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZChzaXplLCBnZXQsIGMKIC53cml0ZUJhcnJp
ZXJEb25lOgogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBj
ZWxsT3BlcmFuZCwgdmFsdWVPcGVyYW5kKQotICAgIGdldCh2YWx1ZU9wZXJhbmQsIHQxKQorbWFj
cm8gd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIGNlbGxGaWVsZE5hbWUsIHZhbHVl
RmllbGROYW1lKQorICAgIGdldCh2YWx1ZUZpZWxkTmFtZSwgdDEpCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZVRhZyhzaXplLCB0MSwgdDApCiAgICAgYmluZXEgdDAsIENlbGxUYWcsIC53cml0
ZUJhcnJpZXJEb25lCiAKLSAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmQoc2l6ZSwgZ2V0LCBjZWxs
T3BlcmFuZCkKKyAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmQoc2l6ZSwgZ2V0LCBjZWxsRmllbGRO
YW1lKQogLndyaXRlQmFycmllckRvbmU6CiBlbmQKIAotbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9i
YWwoc2l6ZSwgZ2V0LCB2YWx1ZU9wZXJhbmQsIGxvYWRIZWxwZXIpCi0gICAgZ2V0KHZhbHVlT3Bl
cmFuZCwgdDEpCittYWNybyB3cml0ZUJhcnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZhbHVlRmll
bGROYW1lLCBsb2FkTWFjcm8pCisgICAgZ2V0KHZhbHVlRmllbGROYW1lLCB0MSkKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlVGFnKHNpemUsIHQxLCB0MCkKICAgICBiaW5lcSB0MCwgQ2VsbFRh
ZywgLndyaXRlQmFycmllckRvbmUKIAotICAgIGxvYWRIZWxwZXIodDMpCisgICAgbG9hZE1hY3Jv
KHQzKQogCiAgICAgc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oCiAgICAgICAgIHQzLApAQCAt
NTgxLDE2ICs1ODEsMTYgQEAgbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2
YQogLndyaXRlQmFycmllckRvbmU6CiBlbmQKIAotbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWxP
YmplY3Qoc2l6ZSwgZ2V0LCB2YWx1ZU9wZXJhbmQpCi0gICAgd3JpdGVCYXJyaWVyT25HbG9iYWwo
c2l6ZSwgZ2V0LCB2YWx1ZU9wZXJhbmQsCittYWNybyB3cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVj
dChzaXplLCBnZXQsIHZhbHVlRmllbGROYW1lKQorICAgIHdyaXRlQmFycmllck9uR2xvYmFsKHNp
emUsIGdldCwgdmFsdWVGaWVsZE5hbWUsCiAgICAgICAgIG1hY3JvKHJlZ2lzdGVyVG9TdG9yZUds
b2JhbCkKICAgICAgICAgICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCByZWdpc3RlclRvU3RvcmVH
bG9iYWwKICAgICAgICAgICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbcmVnaXN0
ZXJUb1N0b3JlR2xvYmFsXSwgcmVnaXN0ZXJUb1N0b3JlR2xvYmFsCiAgICAgICAgIGVuZCkKIGVu
ZAogCi1tYWNybyB3cml0ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9ubWVudChzaXplLCBn
ZXQsIHZhbHVlT3BlcmFuZCkKLSAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZh
bHVlT3BlcmFuZCwKK21hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
KHNpemUsIGdldCwgdmFsdWVGaWVsZE5hbWUpCisgICAgd3JpdGVCYXJyaWVyT25HbG9iYWwoc2l6
ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSwKICAgICAgICAgbWFjcm8ocmVnaXN0ZXJUb1N0b3JlR2xv
YmFsKQogICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHJlZ2lzdGVyVG9TdG9yZUds
b2JhbAogICAgICAgICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFtyZWdpc3Rl
clRvU3RvcmVHbG9iYWxdLCByZWdpc3RlclRvU3RvcmVHbG9iYWwKQEAgLTU5OSw4ICs1OTksOCBA
QCBtYWNybyB3cml0ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9uCiBlbmQKIAogbWFjcm8g
dmFsdWVQcm9maWxlKG9wLCBtZXRhZGF0YSwgdGFnLCBwYXlsb2FkKQotICAgIHN0b3JlaSB0YWcs
ICVvcCU6Ok1ldGFkYXRhOjpwcm9maWxlLm1fYnVja2V0cyArIFRhZ09mZnNldFttZXRhZGF0YV0K
LSAgICBzdG9yZWkgcGF5bG9hZCwgJW9wJTo6TWV0YWRhdGE6OnByb2ZpbGUubV9idWNrZXRzICsg
UGF5bG9hZE9mZnNldFttZXRhZGF0YV0KKyAgICBzdG9yZWkgdGFnLCAlb3AlOjpNZXRhZGF0YTo6
bV9wcm9maWxlLm1fYnVja2V0cyArIFRhZ09mZnNldFttZXRhZGF0YV0KKyAgICBzdG9yZWkgcGF5
bG9hZCwgJW9wJTo6TWV0YWRhdGE6Om1fcHJvZmlsZS5tX2J1Y2tldHMgKyBQYXlsb2FkT2Zmc2V0
W21ldGFkYXRhXQogZW5kCiAKIApAQCAtNzEzLDcgKzcxMyw3IEBAIF9sbGludF9vcF9lbnRlcjoK
IAogCiBsbGludE9wV2l0aFByb2ZpbGUob3BfZ2V0X2FyZ3VtZW50LCBPcEdldEFyZ3VtZW50LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChpbmRleCwgdDIpCisg
ICAgZ2V0KG1faW5kZXgsIHQyKQogICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENv
dW50W2Nmcl0sIHQwCiAgICAgYmlsdGVxIHQwLCB0MiwgLm9wR2V0QXJndW1lbnRPdXRPZkJvdW5k
cwogICAgIGxvYWRpIFRoaXNBcmd1bWVudE9mZnNldCArIFRhZ09mZnNldFtjZnIsIHQyLCA4XSwg
dDAKQEAgLTc0MCwxMiArNzQwLDEyIEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X3RvX3RoaXMsIE9wVG9UaGlzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEs
IHJldHVybikKLSAgICBnZXQoc3JjRHN0LCB0MCkKKyAgICBnZXQobV9zcmNEc3QsIHQwKQogICAg
IGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgQ2VsbFRhZywgLm9wVG9UaGlzU2xvdwogICAg
IGxvYWRpIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0sIHQwCiAgICAgYmJuZXEgSlNDZWxsOjpt
X3R5cGVbdDBdLCBGaW5hbE9iamVjdFR5cGUsIC5vcFRvVGhpc1Nsb3cKICAgICBtZXRhZGF0YSh0
MiwgdDMpCi0gICAgbG9hZHAgT3BUb1RoaXM6Ok1ldGFkYXRhOjpjYWNoZWRTdHJ1Y3R1cmVbdDJd
LCB0MgorICAgIGxvYWRwIE9wVG9UaGlzOjpNZXRhZGF0YTo6bV9jYWNoZWRTdHJ1Y3R1cmVbdDJd
LCB0MgogICAgIGJwbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQyLCAub3BUb1RoaXNT
bG93CiAgICAgZGlzcGF0Y2goKQogCkBAIC03NTYsNyArNzU2LDcgQEAgZW5kKQogCiAKIGxsaW50
T3Aob3BfY2hlY2tfdGR6LCBPcENoZWNrVGR6LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkK
LSAgICBnZXQodGFyZ2V0LCB0MCkKKyAgICBnZXQobV90YXJnZXQsIHQwKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGVUYWcoc2l6ZSwgdDAsIHQxKQogICAgIGJpbmVxIHQxLCBFbXB0eVZhbHVl
VGFnLCAub3BOb3RURFoKICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90aHJvd190ZHpfZXJy
b3IpCkBAIC03NjcsMTQgKzc2NywxNCBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3Bf
bW92LCBPcE1vdiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQo
c3JjLCB0MSkKKyAgICBnZXQobV9zcmMsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDEsIHQyLCB0MykKICAgICByZXR1cm4odDIsIHQzKQogZW5kKQogCiAKIGxsaW50T3BX
aXRoUmV0dXJuKG9wX25vdCwgT3BOb3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1
cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQwKQorICAgIGdldChtX29wZXJhbmQsIHQwKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQyLCB0MykKICAgICBiaW5lcSB0MiwgQm9v
bGVhblRhZywgLm9wTm90U2xvdwogICAgIHhvcmkgMSwgdDMKQEAgLTc4OCw4ICs3ODgsOCBAQCBl
bmQpCiAKIG1hY3JvIGVxdWFsaXR5Q29tcGFyaXNvbk9wKG5hbWUsIG9wLCBpbnRlZ2VyQ29tcGFy
aXNvbikKICAgICBsbGludE9wV2l0aFJldHVybihvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgICAgICBnZXQocmhzLCB0MikKLSAgICAgICAgZ2V0
KGxocywgdDApCisgICAgICAgIGdldChtX3JocywgdDIpCisgICAgICAgIGdldChtX2xocywgdDAp
CiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQzLCB0MSkKICAgICAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAg
YmluZXEgdDIsIHQzLCAub3BFcVNsb3cKQEAgLTgwNyw4ICs4MDcsOCBAQCBlbmQKIAogbWFjcm8g
ZXF1YWxpdHlKdW1wT3AobmFtZSwgb3AsIGludGVnZXJDb21wYXJpc29uKQogICAgIGxsaW50T3BX
aXRoSnVtcChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1wLCBkaXNwYXRjaCkK
LSAgICAgICAgZ2V0KHJocywgdDIpCi0gICAgICAgIGdldChsaHMsIHQwKQorICAgICAgICBnZXQo
bV9yaHMsIHQyKQorICAgICAgICBnZXQobV9saHMsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQyLCB0MywgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGJpbmVxIHQyLCB0MywgLnNsb3cKQEAg
LTgxOCw3ICs4MTgsNyBAQCBtYWNybyBlcXVhbGl0eUp1bXBPcChuYW1lLCBvcCwgaW50ZWdlckNv
CiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBqdW1wKHRh
cmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKIAogICAgIC5zbG93OgogICAgICAgICBjYWxs
U2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC04MjksNyArODI5LDcgQEAgZW5k
CiAKIG1hY3JvIGVxdWFsTnVsbENvbXBhcmlzb25PcChuYW1lLCBvcCwgZm4pCiAgICAgbGxpbnRP
cFdpdGhSZXR1cm4obmFtZSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4p
Ci0gICAgICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAg
ICAgICAgIGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQogICAgICAgICBsb2FkaSBUYWdPZmZz
ZXRbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwg
OF0sIHQwCkBAIC04NjAsNyArODYwLDcgQEAgZXF1YWxOdWxsQ29tcGFyaXNvbk9wKG9wX25lcV9u
dWxsLCBPcE5lcQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX3VuZGVmaW5lZF9vcl9udWxs
LCBPcElzVW5kZWZpbmVkT3JOdWxsLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJu
KQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBhc3Nl
cnROb3RDb25zdGFudChzaXplLCB0MCkKICAgICBsb2FkaSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0s
IHQxCiAgICAgb3JpIDEsIHQxCkBAIC04NzEsOCArODcxLDggQEAgZW5kKQogCiBtYWNybyBzdHJp
Y3RFcU9wKG5hbWUsIG9wLCBlcXVhbGl0eU9wZXJhdGlvbikKICAgICBsbGludE9wV2l0aFJldHVy
bihvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAg
ICAgICBnZXQocmhzLCB0MikKLSAgICAgICAgZ2V0KGxocywgdDApCisgICAgICAgIGdldChtX3Jo
cywgdDIpCisgICAgICAgIGdldChtX2xocywgdDApCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUoc2l6ZSwgdDIsIHQzLCB0MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJS
ZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDIsIHQzLCAuc2xvdwpAQCAtODkz
LDggKzg5Myw4IEBAIGVuZAogCiBtYWNybyBzdHJpY3RFcXVhbGl0eUp1bXBPcChuYW1lLCBvcCwg
ZXF1YWxpdHlPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1h
Y3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQocmhzLCB0MikKLSAg
ICAgICAgZ2V0KGxocywgdDApCisgICAgICAgIGdldChtX3JocywgdDIpCisgICAgICAgIGdldCht
X2xocywgdDApCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQzLCB0
MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkK
ICAgICAgICAgYmluZXEgdDIsIHQzLCAuc2xvdwpAQCAtOTA3LDcgKzkwNyw3IEBAIG1hY3JvIHN0
cmljdEVxdWFsaXR5SnVtcE9wKG5hbWUsIG9wLCBlcXUKICAgICAgICAgZGlzcGF0Y2goKQogCiAg
ICAgLmp1bXBUYXJnZXQ6Ci0gICAgICAgIGp1bXAodGFyZ2V0KQorICAgICAgICBqdW1wKG1fdGFy
Z2V0KQogCiAgICAgLnNsb3c6CiAgICAgICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRo
XyVuYW1lJSkKQEAgLTkzNCw3ICs5MzQsNyBAQCBzdHJpY3RFcXVhbGl0eUp1bXBPcChqbnN0cmlj
dGVxLCBPcEpuc3RyCiAKIG1hY3JvIHByZU9wKG5hbWUsIG9wLCBvcGVyYXRpb24pCiAgICAgbGxp
bnRPcChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICAgICAg
Z2V0KHNyY0RzdCwgdDApCisgICAgICAgIGdldChtX3NyY0RzdCwgdDApCiAgICAgICAgIGJpbmVx
IFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgSW50MzJUYWcsIC5zbG93CiAgICAgICAgIGxvYWRpIFBh
eWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIG9wZXJhdGlvbih0MSwgLnNsb3cp
CkBAIC05NDksNyArOTQ5LDcgQEAgZW5kCiAKIAogbGxpbnRPcFdpdGhQcm9maWxlKG9wX3RvX251
bWJlciwgT3BUb051bWJlciwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAg
ICBnZXQob3BlcmFuZCwgdDApCisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDIsIHQzKQogICAgIGJpZXEgdDIsIEludDMyVGFnLCAu
b3BUb051bWJlcklzSW50CiAgICAgYmlhZXEgdDIsIExvd2VzdFRhZywgLm9wVG9OdW1iZXJTbG93
CkBAIC05NjMsNyArOTYzLDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX3RvX3N0
cmluZywgT3BUb1N0cmluZywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAg
ICBnZXQob3BlcmFuZCwgdDApCisgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDIsIHQzKQogICAgIGJpbmVxIHQyLCBDZWxsVGFnLCAu
b3BUb1N0cmluZ1Nsb3cKICAgICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0M10sIFN0cmluZ1R5cGUs
IC5vcFRvU3RyaW5nU2xvdwpAQCAtOTc3LDcgKzk3Nyw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0
aFByb2ZpbGUob3BfdG9fb2JqZWN0LCBPcFRvT2JqZWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0
MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MiwgdDMpCiAgICAgYmlu
ZXEgdDIsIENlbGxUYWcsIC5vcFRvT2JqZWN0U2xvdwogICAgIGJiYiBKU0NlbGw6Om1fdHlwZVt0
M10sIE9iamVjdFR5cGUsIC5vcFRvT2JqZWN0U2xvdwpAQCAtOTkyLDExICs5OTIsMTEgQEAgZW5k
KQogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKIAogICAgIG1hY3JvIGFyaXRoUHJvZmls
ZSh0eXBlKQotICAgICAgICBvcmkgdHlwZSwgT3BOZWdhdGU6Ok1ldGFkYXRhOjphcml0aFByb2Zp
bGVbdDVdCisgICAgICAgIG9yaSB0eXBlLCBPcE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9m
aWxlW3Q1XQogICAgIGVuZAogCiAgICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGdldChvcGVyYW5k
LCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQwLCB0MSwgdDIpCiAgICAgYmluZXEgdDEsIEludDMyVGFnLCAub3BOZWdhdGVTcmNO
b3RJbnQKICAgICBidGl6IHQyLCAweDdmZmZmZmZmLCAub3BOZWdhdGVTbG93CkBAIC0xMDE4LDE4
ICsxMDE4LDE4IEBAIGVuZCkKIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUobmFtZSwgb3AsIGlu
dGVnZXJPcGVyYXRpb25BbmRTdG9yZSwgZG91YmxlT3BlcmF0aW9uKQogICAgIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfJW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFk
YXRhLCByZXR1cm4pCiAgICAgICAgIG1hY3JvIGFyaXRoUHJvZmlsZSh0eXBlKQotICAgICAgICAg
ICAgb3JpIHR5cGUsICVvcCU6Ok1ldGFkYXRhOjphcml0aFByb2ZpbGVbdDVdCisgICAgICAgICAg
ICBvcmkgdHlwZSwgJW9wJTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW3Q1XQogICAgICAgICBl
bmQKIAogICAgICAgICBtZXRhZGF0YSh0NSwgdDIpCi0gICAgICAgIGdldChyaHMsIHQyKQotICAg
ICAgICBnZXQobGhzLCB0MCkKKyAgICAgICAgZ2V0KG1fcmhzLCB0MikKKyAgICAgICAgZ2V0KG1f
bGhzLCB0MCkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDMsIHQx
KQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlMlJlZyhzaXplLCB0MCwgdDIsIHQwKQog
ICAgICAgICBiaW5lcSB0MiwgSW50MzJUYWcsIC5vcDFOb3RJbnQKICAgICAgICAgYmluZXEgdDMs
IEludDMyVGFnLCAub3AyTm90SW50CiAgICAgICAgIGFyaXRoUHJvZmlsZShBcml0aFByb2ZpbGVJ
bnRJbnQpCi0gICAgICAgIGdldChkc3QsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAg
ICAgICBpbnRlZ2VyT3BlcmF0aW9uQW5kU3RvcmUodDMsIHQxLCB0MCwgLnNsb3csIHQyKQogICAg
ICAgICBkaXNwYXRjaCgpCiAKQEAgLTEwNDUsNyArMTA0NSw3IEBAIG1hY3JvIGJpbmFyeU9wQ3Vz
dG9tU3RvcmUobmFtZSwgb3AsIGludGUKICAgICAgICAgZmlpMmQgdDEsIHQzLCBmdDEKICAgICAg
ICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlck51bWJlcikKICAgICAub3AxTm90SW50
UmVhZHk6Ci0gICAgICAgIGdldChkc3QsIHQxKQorICAgICAgICBnZXQobV9kc3QsIHQxKQogICAg
ICAgICBmaWkyZCB0MCwgdDIsIGZ0MAogICAgICAgICBkb3VibGVPcGVyYXRpb24oZnQxLCBmdDAp
CiAgICAgICAgIHN0b3JlZCBmdDAsIFtjZnIsIHQxLCA4XQpAQCAtMTA1Myw3ICsxMDUzLDcgQEAg
bWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShuYW1lLCBvcCwgaW50ZQogCiAgICAgLm9wMk5vdElu
dDoKICAgICAgICAgIyBGaXJzdCBvcGVyYW5kIGlzIGRlZmluaXRlbHkgYW4gaW50LCB0aGUgc2Vj
b25kIG9wZXJhbmQgaXMgZGVmaW5pdGVseSBub3QuCi0gICAgICAgIGdldChkc3QsIHQyKQorICAg
ICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBiaWEgdDMsIExvd2VzdFRhZywgLnNsb3cKICAg
ICAgICAgYXJpdGhQcm9maWxlKEFyaXRoUHJvZmlsZUludE51bWJlcikKICAgICAgICAgY2kyZCB0
MCwgZnQwCkBAIC0xMTIwLDcgKzExMjAsNyBAQCBiaW5hcnlPcEN1c3RvbVN0b3JlKGRpdiwgT3BE
aXYsCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfdW5zaWduZWQsIE9wVW5zaWduZWQsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAg
IGdldChtX29wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNp
emUsIHQxLCBJbnQzMlRhZywgdDIsIC5vcFVuc2lnbmVkU2xvdykKICAgICBiaWx0IHQyLCAwLCAu
b3BVbnNpZ25lZFNsb3cKICAgICByZXR1cm4gKEludDMyVGFnLCB0MikKQEAgLTExMzIsOCArMTEz
Miw4IEBAIGVuZCkKIAogbWFjcm8gY29tbW9uQml0T3Aob3BLaW5kLCBuYW1lLCBvcCwgb3BlcmF0
aW9uKQogICAgIG9wS2luZChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRj
aCwgcmV0dXJuKQotICAgICAgICBnZXQocmhzLCB0MikKLSAgICAgICAgZ2V0KGxocywgdDApCisg
ICAgICAgIGdldChtX3JocywgdDIpCisgICAgICAgIGdldChtX2xocywgdDApCiAgICAgICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQzLCB0MSkKICAgICAgICAgbG9hZENvbnN0
YW50T3JWYXJpYWJsZTJSZWcoc2l6ZSwgdDAsIHQyLCB0MCkKICAgICAgICAgYmluZXEgdDMsIElu
dDMyVGFnLCAuc2xvdwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAgYml0T3BQcm9maWxlZChiaXRvciwg
T3BCaXRvciwKICAgICBtYWNybyAobGVmdCwgcmlnaHQpIG9yaSBsZWZ0LCByaWdodCBlbmQpCiAK
IGxsaW50T3BXaXRoUHJvZmlsZShvcF9iaXRub3QsIE9wQml0bm90LCBtYWNybyAoc2l6ZSwgZ2V0
LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVy
YW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MiwgdDMpCiAg
ICAgYmluZXEgdDIsIEludDMyVGFnLCAub3BCaXROb3RTbG93CiAgICAgbm90aSB0MwpAQCAtMTE4
OSwxMSArMTE4OSwxMSBAQCBsbGludE9wV2l0aFByb2ZpbGUob3BfYml0bm90LCBPcEJpdG5vdCwg
CiBlbmQpCiAKIGxsaW50T3Aob3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSwgT3BPdmVycmlkZXNI
YXNJbnN0YW5jZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgZ2V0KGRzdCwgdDMp
CisgICAgZ2V0KG1fZHN0LCB0MykKICAgICBzdG9yZWkgQm9vbGVhblRhZywgVGFnT2Zmc2V0W2Nm
ciwgdDMsIDhdCiAKICAgICAjIEZpcnN0IGNoZWNrIGlmIGhhc0luc3RhbmNlVmFsdWUgaXMgdGhl
IG9uZSBvbiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXQotICAgIGdldCho
YXNJbnN0YW5jZVZhbHVlLCB0MCkKKyAgICBnZXQobV9oYXNJbnN0YW5jZVZhbHVlLCB0MCkKICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXplLCB0MCwgQ2VsbFRhZywgdDIsIC5v
cE92ZXJyaWRlc2hhc0luc3RhbmNlVmFsdWVOb3RDZWxsKQogICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUoc2l6ZSwgdDAsIHQxLCB0MikKICAgICBiaW5lcSB0MSwgQ2VsbFRhZywgLm9wT3ZlcnJp
ZGVzaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwKQEAgLTEyMDUsNyArMTIwNSw3IEBAIGxsaW50T3Ao
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSwgT3BPdmUKICAgICBiaW5lcSB0MSwgdDIsIC5vcE92
ZXJyaWRlc2hhc0luc3RhbmNlVmFsdWVOb3REZWZhdWx0CiAKICAgICAjIFdlIGtub3cgdGhlIGNv
bnN0cnVjdG9yIGlzIGEgY2VsbC4KLSAgICBnZXQoY29uc3RydWN0b3IsIHQwKQorICAgIGdldCht
X2NvbnN0cnVjdG9yLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZFVuY2hl
Y2tlZChzaXplLCB0MCwgdDEpCiAgICAgdGJ6IEpTQ2VsbDo6bV9mbGFnc1t0MV0sIEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UsIHQwCiAgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zmc2V0W2Nm
ciwgdDMsIDhdCkBAIC0xMjE5LDcgKzEyMTksNyBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1
cm4ob3BfaXNfZW1wdHksIE9wSXNFbXB0eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybikKLSAgICBnZXQob3BlcmFuZCwgdDEpCisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDIsIHQzKQogICAgIGNpZXEgdDIsIEVt
cHR5VmFsdWVUYWcsIHQzCiAgICAgcmV0dXJuKEJvb2xlYW5UYWcsIHQzKQpAQCAtMTIyNyw3ICsx
MjI3LDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX3VuZGVmaW5lZCwgT3BJ
c1VuZGVmaW5lZCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQo
b3BlcmFuZCwgdDEpCisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MSwgdDIsIHQzKQogICAgIGJpZXEgdDIsIENlbGxUYWcsIC5vcElzVW5k
ZWZpbmVkQ2VsbAogICAgIGNpZXEgdDIsIFVuZGVmaW5lZFRhZywgdDMKQEAgLTEyNDUsNyArMTI0
NSw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9pc19ib29sZWFuLCBPcElzQm9v
bGVhbiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQob3BlcmFu
ZCwgdDEpCisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZVRhZyhzaXplLCB0MSwgdDApCiAgICAgY2llcSB0MCwgQm9vbGVhblRhZywgdDAKICAgICByZXR1
cm4oQm9vbGVhblRhZywgdDApCkBAIC0xMjUzLDcgKzEyNTMsNyBAQCBlbmQpCiAKIAogbGxpbnRP
cFdpdGhSZXR1cm4ob3BfaXNfbnVtYmVyLCBPcElzTnVtYmVyLCBtYWNybyAoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MSkKKyAgICBnZXQobV9vcGVyYW5k
LCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlVGFnKHNpemUsIHQxLCB0MCkKICAgICBh
ZGRpIDEsIHQwCiAgICAgY2liIHQwLCBMb3dlc3RUYWcgKyAxLCB0MQpAQCAtMTI2MiwxMCArMTI2
MiwxMCBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfY2VsbF93aXRoX3R5cGUs
IE9wSXNDZWxsV2l0aFR5cGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0g
ICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwLCB0MykKICAgICBiaW5lcSB0MCwgQ2VsbFRhZywg
Lm5vdENlbGxDYXNlCi0gICAgZ2V0dShzaXplLCBPcElzQ2VsbFdpdGhUeXBlLCB0eXBlLCB0MCkK
KyAgICBnZXR1KHNpemUsIE9wSXNDZWxsV2l0aFR5cGUsIG1fdHlwZSwgdDApCiAgICAgY2JlcSBK
U0NlbGw6Om1fdHlwZVt0M10sIHQwLCB0MQogICAgIHJldHVybihCb29sZWFuVGFnLCB0MSkKIC5u
b3RDZWxsQ2FzZToKQEAgLTEyNzQsNyArMTI3NCw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFJl
dHVybihvcF9pc19vYmplY3QsIE9wSXNPYmplY3QsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQwLCB0MykKICAgICBiaW5lcSB0
MCwgQ2VsbFRhZywgLm9wSXNPYmplY3ROb3RDZWxsCiAgICAgY2JhZXEgSlNDZWxsOjptX3R5cGVb
dDNdLCBPYmplY3RUeXBlLCB0MQpAQCAtMTMyNywxMCArMTMyNywxMCBAQCBlbmQKIAogbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWRfZGlyZWN0LCBPcEdldEJ5SWREaXJlY3QsIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIG1ldGFkYXRhKHQ1
LCB0MCkKLSAgICBnZXQoYmFzZSwgdDApCi0gICAgbG9hZGkgT3BHZXRCeUlkRGlyZWN0OjpNZXRh
ZGF0YTo6c3RydWN0dXJlW3Q1XSwgdDEKKyAgICBnZXQobV9iYXNlLCB0MCkKKyAgICBsb2FkaSBP
cEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjptX3N0cnVjdHVyZVt0NV0sIHQxCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQzLCAub3BHZXRCeUlk
RGlyZWN0U2xvdykKLSAgICBsb2FkaSBPcEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjpvZmZzZXRb
dDVdLCB0MgorICAgIGxvYWRpIE9wR2V0QnlJZERpcmVjdDo6TWV0YWRhdGE6Om1fb2Zmc2V0W3Q1
XSwgdDIKICAgICBiaW5lcSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDNdLCB0MSwgLm9wR2V0QnlJ
ZERpcmVjdFNsb3cKICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQyLCB0MywgdDAs
IHQxKQogICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3QsIHQ1LCB0MCwgdDEpCkBAIC0x
MzQ0LDE2ICsxMzQ0LDE2IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlf
aWQsIE9wR2V0QnlJZCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1
cm4pCiAgICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGxvYWRiIE9wR2V0QnlJZDo6TWV0YWRhdGE6
Om1vZGVbdDVdLCB0MQotICAgIGdldChiYXNlLCB0MCkKKyAgICBsb2FkYiBPcEdldEJ5SWQ6Ok1l
dGFkYXRhOjptX21vZGVbdDVdLCB0MQorICAgIGdldChtX2Jhc2UsIHQwKQogCiAub3BHZXRCeUlk
UHJvdG9Mb2FkOgogICAgIGJibmVxIHQxLCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6OlByb3RvTG9h
ZCwgLm9wR2V0QnlJZEFycmF5TGVuZ3RoCi0gICAgbG9hZGkgT3BHZXRCeUlkOjpNZXRhZGF0YTo6
bW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuc3RydWN0dXJlW3Q1XSwgdDEKKyAgICBsb2FkaSBP
cEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVjdHVy
ZVt0NV0sIHQxCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDAsIENl
bGxUYWcsIHQzLCAub3BHZXRCeUlkU2xvdykKLSAgICBsb2FkaXMgT3BHZXRCeUlkOjpNZXRhZGF0
YTo6bW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkT2Zmc2V0W3Q1XSwgdDIKKyAgICBs
b2FkaXMgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5j
YWNoZWRPZmZzZXRbdDVdLCB0MgogICAgIGJpbmVxIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10s
IHQxLCAub3BHZXRCeUlkU2xvdwotICAgIGxvYWRwIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVN
ZXRhZGF0YS5wcm90b0xvYWRNb2RlLmNhY2hlZFNsb3RbdDVdLCB0MworICAgIGxvYWRwIE9wR2V0
QnlJZDo6TWV0YWRhdGE6Om1fbW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUuY2FjaGVkU2xvdFt0
NV0sIHQzCiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MiwgdDMsIHQwLCB0MSkK
ICAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeUlkLCB0NSwgdDAsIHQxKQogICAgIHJldHVybih0MCwg
dDEpCkBAIC0xMzYyLDcgKzEzNjIsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9p
ZCwgT3BHZXRCCiAgICAgYmJuZXEgdDEsIGNvbnN0ZXhwciBHZXRCeUlkTW9kZTo6QXJyYXlMZW5n
dGgsIC5vcEdldEJ5SWRVbnNldAogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNp
emUsIHQwLCBDZWxsVGFnLCB0MywgLm9wR2V0QnlJZFNsb3cpCiAgICAgbW92ZSB0MywgdDIKLSAg
ICBhcnJheVByb2ZpbGUoT3BHZXRCeUlkOjpNZXRhZGF0YTo6bW9kZU1ldGFkYXRhLmFycmF5TGVu
Z3RoTW9kZS5hcnJheVByb2ZpbGUsIHQyLCB0NSwgdDApCisgICAgYXJyYXlQcm9maWxlKE9wR2V0
QnlJZDo6TWV0YWRhdGE6Om1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2Zp
bGUsIHQyLCB0NSwgdDApCiAgICAgYnRpeiB0MiwgSXNBcnJheSwgLm9wR2V0QnlJZFNsb3cKICAg
ICBidGl6IHQyLCBJbmRleGluZ1NoYXBlTWFzaywgLm9wR2V0QnlJZFNsb3cKICAgICBsb2FkcCBK
U09iamVjdDo6bV9idXR0ZXJmbHlbdDNdLCB0MApAQCAtMTM3MywxNiArMTM3MywxNiBAQCBsbGlu
dE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV9pZCwgT3BHZXRCCiAKIC5vcEdldEJ5SWRVbnNldDoK
ICAgICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpVbnNldCwgLm9wR2V0QnlJZERl
ZmF1bHQKLSAgICBsb2FkaSBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlTWV0YWRhdGEudW5zZXRN
b2RlLnN0cnVjdHVyZVt0NV0sIHQxCisgICAgbG9hZGkgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9t
b2RlTWV0YWRhdGEudW5zZXRNb2RlLnN0cnVjdHVyZVt0NV0sIHQxCiAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQzLCAub3BHZXRCeUlkU2xvdykK
ICAgICBiaW5lcSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDNdLCB0MSwgLm9wR2V0QnlJZFNsb3cK
ICAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeUlkLCB0NSwgVW5kZWZpbmVkVGFnLCAwKQogICAgIHJl
dHVybihVbmRlZmluZWRUYWcsIDApCiAKIC5vcEdldEJ5SWREZWZhdWx0OgotICAgIGxvYWRpIE9w
R2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmVbdDVd
LCB0MQorICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fbW9kZU1ldGFkYXRhLmRlZmF1
bHRNb2RlLnN0cnVjdHVyZVt0NV0sIHQxCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxv
YWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQzLCAub3BHZXRCeUlkU2xvdykKLSAgICBsb2FkaXMgT3BH
ZXRCeUlkOjpNZXRhZGF0YTo6bW9kZU1ldGFkYXRhLmRlZmF1bHRNb2RlLmNhY2hlZE9mZnNldFt0
NV0sIHQyCisgICAgbG9hZGlzIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fbW9kZU1ldGFkYXRhLmRl
ZmF1bHRNb2RlLmNhY2hlZE9mZnNldFt0NV0sIHQyCiAgICAgYmluZXEgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW3QzXSwgdDEsIC5vcEdldEJ5SWRTbG93CiAgICAgbG9hZFByb3BlcnR5QXRWYXJpYWJs
ZU9mZnNldCh0MiwgdDMsIHQwLCB0MSkKICAgICB2YWx1ZVByb2ZpbGUoT3BHZXRCeUlkLCB0NSwg
dDAsIHQxKQpAQCAtMTM5NSwxMiArMTM5NSwxMiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9wdXRfYnlfaWQsIE9wUHV0QnlJZCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gs
IG1ldGFkYXRhLCByZXR1cm4pCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQs
IGJhc2UsIHZhbHVlKQorICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX2Jh
c2UsIG1fdmFsdWUpCiAgICAgbWV0YWRhdGEodDUsIHQzKQotICAgIGdldChiYXNlLCB0MykKKyAg
ICBnZXQobV9iYXNlLCB0MykKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXpl
LCB0MywgQ2VsbFRhZywgdDAsIC5vcFB1dEJ5SWRTbG93KQogICAgIGxvYWRpIEpTQ2VsbDo6bV9z
dHJ1Y3R1cmVJRFt0MF0sIHQyCi0gICAgYmluZXEgdDIsIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om9s
ZFN0cnVjdHVyZVt0NV0sIC5vcFB1dEJ5SWRTbG93CisgICAgYmluZXEgdDIsIE9wUHV0QnlJZDo6
TWV0YWRhdGE6Om1fb2xkU3RydWN0dXJlW3Q1XSwgLm9wUHV0QnlJZFNsb3cKIAogICAgICMgQXQg
dGhpcyBwb2ludCwgd2UgaGF2ZToKICAgICAjIHQ1IC0+IG1ldGFkYXRhCkBAIC0xNDA4LDE2ICsx
NDA4LDE2IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICAj
IHQwIC0+IG9iamVjdCBiYXNlCiAgICAgIyBXZSB3aWxsIGxvc2UgY3VycmVudFN0cnVjdHVyZUlE
IGluIHRoZSBzaGVuYW5pZ2FucyBiZWxvdy4KIAotICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRh
dGE6Om5ld1N0cnVjdHVyZVt0NV0sIHQxCisgICAgbG9hZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6
bV9uZXdTdHJ1Y3R1cmVbdDVdLCB0MQogCiAgICAgYnRpeiB0MSwgLm9wUHV0QnlJZE5vdFRyYW5z
aXRpb24KIAogICAgICMgVGhpcyBpcyB0aGUgdHJhbnNpdGlvbiBjYXNlLiB0MSBob2xkcyB0aGUg
bmV3IFN0cnVjdHVyZSouIElmIHdlIGhhdmUgYSBjaGFpbiwgd2UgbmVlZCB0bwogICAgICMgY2hl
Y2sgaXQuIHQwIGlzIHRoZSBiYXNlLiBXZSBtYXkgY2xvYmJlciB0MSB0byB1c2UgaXQgYXMgc2Ny
YXRjaC4KLSAgICBsb2FkcCBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpzdHJ1Y3R1cmVDaGFpblt0NV0s
IHQzCisgICAgbG9hZHAgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bV9zdHJ1Y3R1cmVDaGFpblt0NV0s
IHQzCiAgICAgYnRweiB0MywgLm9wUHV0QnlJZFRyYW5zaXRpb25EaXJlY3QKIAotICAgIGxvYWRp
IE9wUHV0QnlJZDo6TWV0YWRhdGE6Om9sZFN0cnVjdHVyZVt0NV0sIHQyICMgTmVlZCBvbGQgc3Ry
dWN0dXJlIGFnYWluLgorICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1fb2xkU3RydWN0
dXJlW3Q1XSwgdDIgIyBOZWVkIG9sZCBzdHJ1Y3R1cmUgYWdhaW4uCiAgICAgbG9hZHAgU3RydWN0
dXJlQ2hhaW46Om1fdmVjdG9yW3QzXSwgdDMKICAgICBhc3NlcnQobWFjcm8gKG9rKSBidHBueiB0
Mywgb2sgZW5kKQogCkBAIC0xNDMxLDIyICsxNDMxLDIyIEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfcHV0X2J5X2lkLCBPcFB1dEIKICAgICBidHBueiB0MiwgLm9wUHV0QnlJZFRyYW5zaXRpb25D
aGFpbkxvb3AKIAogLm9wUHV0QnlJZFRyYW5zaXRpb25DaGFpbkRvbmU6Ci0gICAgbG9hZGkgT3BQ
dXRCeUlkOjpNZXRhZGF0YTo6bmV3U3RydWN0dXJlW3Q1XSwgdDEKKyAgICBsb2FkaSBPcFB1dEJ5
SWQ6Ok1ldGFkYXRhOjptX25ld1N0cnVjdHVyZVt0NV0sIHQxCiAKIC5vcFB1dEJ5SWRUcmFuc2l0
aW9uRGlyZWN0OgogICAgIHN0b3JlaSB0MSwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXQotICAg
IGdldCh2YWx1ZSwgdDEpCisgICAgZ2V0KG1fdmFsdWUsIHQxKQogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUoc2l6ZSwgdDEsIHQyLCB0MykKLSAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRh
OjpvZmZzZXRbdDVdLCB0MQorICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1fb2Zmc2V0
W3Q1XSwgdDEKICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0
MykKLSAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmQoc2l6ZSwgZ2V0LCBiYXNlKQorICAgIHdyaXRl
QmFycmllck9uT3BlcmFuZChzaXplLCBnZXQsIG1fYmFzZSkKICAgICBkaXNwYXRjaCgpCiAKIC5v
cFB1dEJ5SWROb3RUcmFuc2l0aW9uOgogICAgICMgVGhlIG9ubHkgdGhpbmcgbGl2ZSByaWdodCBu
b3cgaXMgdDAsIHdoaWNoIGhvbGRzIHRoZSBiYXNlLgotICAgIGdldCh2YWx1ZSwgdDEpCisgICAg
Z2V0KG1fdmFsdWUsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQy
LCB0MykKLSAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpvZmZzZXRbdDVdLCB0MQorICAg
IGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1fb2Zmc2V0W3Q1XSwgdDEKICAgICBzdG9yZVBy
b3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0MykKICAgICBkaXNwYXRjaCgpCiAK
QEAgLTE0NTgsMTEgKzE0NTgsMTEgQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dl
dF9ieV92YWwsIE9wR2V0QnlWYWwsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0
YSwgcmV0dXJuKQogICAgIG1ldGFkYXRhKHQ1LCB0MikKLSAgICBnZXQoYmFzZSwgdDIpCisgICAg
Z2V0KG1fYmFzZSwgdDIpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwg
dDIsIENlbGxUYWcsIHQwLCAub3BHZXRCeVZhbFNsb3cpCiAgICAgbW92ZSB0MCwgdDIKLSAgICBh
cnJheVByb2ZpbGUoT3BHZXRCeVZhbDo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZSwgdDIsIHQ1LCB0
MSkKLSAgICBnZXQocHJvcGVydHksIHQzKQorICAgIGFycmF5UHJvZmlsZShPcEdldEJ5VmFsOjpN
ZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIHQyLCB0NSwgdDEpCisgICAgZ2V0KG1fcHJvcGVydHks
IHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNpemUsIHQzLCBJbnQzMlRh
ZywgdDEsIC5vcEdldEJ5VmFsU2xvdykKICAgICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlb
dDBdLCB0MwogICAgIGFuZGkgSW5kZXhpbmdTaGFwZU1hc2ssIHQyCkBAIC0xNDgyLDcgKzE0ODIs
NyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9ieV92YWwsIE9wR2V0CiAgICAgYmRuZXF1
biBmdDAsIGZ0MCwgLm9wR2V0QnlWYWxTbG93CiAgICAgIyBGSVhNRTogVGhpcyBjb3VsZCBiZSBt
YXNzaXZlbHkgb3B0aW1pemVkLgogICAgIGZkMmlpIGZ0MCwgdDEsIHQyCi0gICAgZ2V0KGRzdCwg
dDApCisgICAgZ2V0KG1fZHN0LCB0MCkKICAgICBqbXAgLm9wR2V0QnlWYWxOb3RFbXB0eQogCiAu
b3BHZXRCeVZhbE5vdERvdWJsZToKQEAgLTE0OTMsNyArMTQ5Myw3IEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKICAgICBsb2FkaSBBcnJheVN0b3JhZ2U6Om1fdmVj
dG9yICsgUGF5bG9hZE9mZnNldFt0MywgdDEsIDhdLCB0MQogCiAub3BHZXRCeVZhbERvbmU6Ci0g
ICAgZ2V0KGRzdCwgdDApCisgICAgZ2V0KG1fZHN0LCB0MCkKICAgICBiaWVxIHQyLCBFbXB0eVZh
bHVlVGFnLCAub3BHZXRCeVZhbFNsb3cKIC5vcEdldEJ5VmFsTm90RW1wdHk6CiAgICAgc3RvcmVp
IHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KQEAgLTE1MTIsMjUgKzE1MTIsMjUgQEAgbWFjcm8g
cHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAgICAgbWFjcm8gY29udGlndW91c1B1dEJ5VmFsKHN0
b3JlQ2FsbGJhY2spCiAgICAgICAgICAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwgLm91dE9mQm91
bmRzCiAgICAgICAgIC5zdG9yZVJlc3VsdDoKLSAgICAgICAgICAgIGdldCh2YWx1ZSwgdDIpCisg
ICAgICAgICAgICBnZXQobV92YWx1ZSwgdDIpCiAgICAgICAgICAgICBzdG9yZUNhbGxiYWNrKHQy
LCB0MSwgdDAsIHQzKQogICAgICAgICAgICAgZGlzcGF0Y2goKQogCiAgICAgICAgIC5vdXRPZkJv
dW5kczoKICAgICAgICAgICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5k
ZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy52ZWN0b3JMZW5ndGhbdDBdLCAub3BQdXRCeVZhbE91dE9m
Qm91bmRzCi0gICAgICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6OmFycmF5UHJvZmls
ZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQorICAgICAgICAgICAgc3RvcmViIDEsICVvcCU6Ok1ldGFk
YXRhOjptX2FycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQogICAgICAgICAgICAgYWRk
aSAxLCB0MywgdDIKICAgICAgICAgICAgIHN0b3JlaSB0MiwgLXNpemVvZiBJbmRleGluZ0hlYWRl
ciArIEluZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXQogICAgICAgICAg
ICAgam1wIC5zdG9yZVJlc3VsdAogICAgICAgICBlbmQKIAotICAgICAgICB3cml0ZUJhcnJpZXJP
bk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwgdmFsdWUpCisgICAgICAgIHdyaXRlQmFycmllck9u
T3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX2Jhc2UsIG1fdmFsdWUpCiAgICAgICAgIG1ldGFkYXRhKHQ1
LCB0MCkKLSAgICAgICAgZ2V0KGJhc2UsIHQwKQorICAgICAgICBnZXQobV9iYXNlLCB0MCkKICAg
ICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZVBheWxvYWQoc2l6ZSwgdDAsIENlbGxUYWcsIHQx
LCAub3BQdXRCeVZhbFNsb3cpCiAgICAgICAgIG1vdmUgdDEsIHQyCi0gICAgICAgIGFycmF5UHJv
ZmlsZSglb3AlOjpNZXRhZGF0YTo6YXJyYXlQcm9maWxlLCB0MiwgdDUsIHQwKQotICAgICAgICBn
ZXQocHJvcGVydHksIHQwKQorICAgICAgICBhcnJheVByb2ZpbGUoJW9wJTo6TWV0YWRhdGE6Om1f
YXJyYXlQcm9maWxlLCB0MiwgdDUsIHQwKQorICAgICAgICBnZXQobV9wcm9wZXJ0eSwgdDApCiAg
ICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXlsb2FkKHNpemUsIHQwLCBJbnQzMlRhZywg
dDMsIC5vcFB1dEJ5VmFsU2xvdykKICAgICAgICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5
W3QxXSwgdDAKICAgICAgICAgYnRpbnogdDIsIENvcHlPbldyaXRlLCAub3BQdXRCeVZhbFNsb3cK
QEAgLTE1NzYsMTQgKzE1NzYsMTQgQEAgbWFjcm8gcHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAg
ICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRlcjo6dS5s
ZW5ndGhzLnZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsT3V0T2ZCb3VuZHMKICAgICAgICAg
YmllcSBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yICsgVGFnT2Zmc2V0W3QwLCB0MywgOF0sIEVtcHR5
VmFsdWVUYWcsIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKICAgICAub3BQdXRCeVZhbEFy
cmF5U3RvcmFnZVN0b3JlUmVzdWx0OgotICAgICAgICBnZXQodmFsdWUsIHQyKQorICAgICAgICBn
ZXQobV92YWx1ZSwgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUs
IHQyLCB0MSwgdDIpCiAgICAgICAgIHN0b3JlaSB0MSwgQXJyYXlTdG9yYWdlOjptX3ZlY3RvciAr
IFRhZ09mZnNldFt0MCwgdDMsIDhdCiAgICAgICAgIHN0b3JlaSB0MiwgQXJyYXlTdG9yYWdlOjpt
X3ZlY3RvciArIFBheWxvYWRPZmZzZXRbdDAsIHQzLCA4XQogICAgICAgICBkaXNwYXRjaCgpCiAK
ICAgICAub3BQdXRCeVZhbEFycmF5U3RvcmFnZUVtcHR5OgotICAgICAgICBzdG9yZWIgMSwgJW9w
JTo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZS5tX21heVN0b3JlVG9Ib2xlW3Q1XQorICAgICAgICBz
dG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fbWF5U3RvcmVUb0hvbGVb
dDVdCiAgICAgICAgIGFkZGkgMSwgQXJyYXlTdG9yYWdlOjptX251bVZhbHVlc0luVmVjdG9yW3Qw
XQogICAgICAgICBiaWIgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hlYWRl
cjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlU3Rv
cmVSZXN1bHQKICAgICAgICAgYWRkaSAxLCB0MywgdDEKQEAgLTE1OTEsNyArMTU5MSw3IEBAIG1h
Y3JvIHB1dEJ5VmFsT3AobmFtZSwgb3ApCiAgICAgICAgIGptcCAub3BQdXRCeVZhbEFycmF5U3Rv
cmFnZVN0b3JlUmVzdWx0CiAKICAgICAub3BQdXRCeVZhbE91dE9mQm91bmRzOgotICAgICAgICBz
dG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZS5tX291dE9mQm91bmRzW3Q1XQor
ICAgICAgICBzdG9yZWIgMSwgJW9wJTo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLm1fb3V0T2ZC
b3VuZHNbdDVdCiAgICAgLm9wUHV0QnlWYWxTbG93OgogICAgICAgICBjYWxsU2xvd1BhdGgoX2xs
aW50X3Nsb3dfcGF0aF8lbmFtZSUpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTE2MDYsMTMgKzE2
MDYsMTMgQEAgcHV0QnlWYWxPcChwdXRfYnlfdmFsX2RpcmVjdCwgT3BQdXRCeVZhbAogCiBtYWNy
byBsbGludEp1bXBUcnVlT3JGYWxzZU9wKG5hbWUsIG9wLCBjb25kaXRpb25PcCkKICAgICBsbGlu
dE9wV2l0aEp1bXAob3BfJW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwganVtcCwgZGlzcGF0
Y2gpCi0gICAgICAgIGdldChjb25kaXRpb24sIHQxKQorICAgICAgICBnZXQobV9jb25kaXRpb24s
IHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZChzaXplLCB0MSwgQm9v
bGVhblRhZywgdDAsIC5zbG93KQogICAgICAgICBjb25kaXRpb25PcCh0MCwgLnRhcmdldCkKICAg
ICAgICAgZGlzcGF0Y2goKQogCiAgICAgLnRhcmdldDoKLSAgICAgICAganVtcCh0YXJnZXQpCisg
ICAgICAgIGp1bXAobV90YXJnZXQpCiAKICAgICAuc2xvdzoKICAgICAgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfJW5hbWUlKQpAQCAtMTYyMyw3ICsxNjIzLDcgQEAgZW5kCiAKIG1h
Y3JvIGVxdWFsTnVsbEp1bXBPcChuYW1lLCBvcCwgY2VsbEhhbmRsZXIsIGltbWVkaWF0ZUhhbmRs
ZXIpCiAgICAgbGxpbnRPcFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQs
IGp1bXAsIGRpc3BhdGNoKQotICAgICAgICBnZXQodmFsdWUsIHQwKQorICAgICAgICBnZXQobV92
YWx1ZSwgdDApCiAgICAgICAgIGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQogICAgICAgICBs
b2FkaSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIHQxCiAgICAgICAgIGxvYWRpIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MCwgOF0sIHQwCkBAIC0xNjMzLDcgKzE2MzMsNyBAQCBtYWNybyBlcXVhbE51bGxK
dW1wT3AobmFtZSwgb3AsIGNlbGxIYW5kCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC50YXJn
ZXQ6Ci0gICAgICAgIGp1bXAodGFyZ2V0KQorICAgICAgICBqdW1wKG1fdGFyZ2V0KQogCiAgICAg
LmltbWVkaWF0ZToKICAgICAgICAgb3JpIDEsIHQxCkBAIC0xNjY0LDggKzE2NjQsOCBAQCBlcXVh
bE51bGxKdW1wT3Aoam5lcV9udWxsLCBPcEpuZXFOdWxsLAogCiAKIGxsaW50T3BXaXRoTWV0YWRh
dGEob3Bfam5lcV9wdHIsIE9wSm5lcVB0ciwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIG1l
dGFkYXRhLCByZXR1cm4pCi0gICAgZ2V0KHZhbHVlLCB0MCkKLSAgICBnZXQoc3BlY2lhbFBvaW50
ZXIsIHQxKQorICAgIGdldChtX3ZhbHVlLCB0MCkKKyAgICBnZXQobV9zcGVjaWFsUG9pbnRlciwg
dDEpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQyCiAgICAgbG9hZHAgQ29kZUJsb2NrOjpt
X2dsb2JhbE9iamVjdFt0Ml0sIHQyCiAgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDAsIDhdLCBD
ZWxsVGFnLCAub3BKbmVxUHRyQnJhbmNoCkBAIC0xNjczLDggKzE2NzMsOCBAQCBsbGludE9wV2l0
aE1ldGFkYXRhKG9wX2puZXFfcHRyLCBPcEpuZXFQCiAgICAgYnBlcSBQYXlsb2FkT2Zmc2V0W2Nm
ciwgdDAsIDhdLCB0MSwgLm9wSm5lcVB0ckZhbGxUaHJvdWdoCiAub3BKbmVxUHRyQnJhbmNoOgog
ICAgIG1ldGFkYXRhKHQ1LCB0MikKLSAgICBzdG9yZWIgMSwgT3BKbmVxUHRyOjpNZXRhZGF0YTo6
aGFzSnVtcGVkW3Q1XQotICAgIGdldCh0YXJnZXQsIHQwKQorICAgIHN0b3JlYiAxLCBPcEpuZXFQ
dHI6Ok1ldGFkYXRhOjptX2hhc0p1bXBlZFt0NV0KKyAgICBnZXQobV90YXJnZXQsIHQwKQogICAg
IGp1bXBJbXBsKHQwKQogLm9wSm5lcVB0ckZhbGxUaHJvdWdoOgogICAgIGRpc3BhdGNoKCkKQEAg
LTE2ODMsMjMgKzE2ODMsMjMgQEAgZW5kKQogCiBtYWNybyBjb21wYXJlVW5zaWduZWRKdW1wT3Ao
bmFtZSwgb3AsIGludGVnZXJDb21wYXJlKQogICAgIGxsaW50T3BXaXRoSnVtcChvcF8lbmFtZSUs
IG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1wLCBkaXNwYXRjaCkKLSAgICAgICAgZ2V0KGxocywg
dDIpCi0gICAgICAgIGdldChyaHMsIHQzKQorICAgICAgICBnZXQobV9saHMsIHQyKQorICAgICAg
ICBnZXQobV9yaHMsIHQzKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQy
LCB0MCwgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUyUmVnKHNpemUsIHQzLCB0
MiwgdDMpCiAgICAgICAgIGludGVnZXJDb21wYXJlKHQxLCB0MywgLmp1bXBUYXJnZXQpCiAgICAg
ICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkK
KyAgICAgICAganVtcChtX3RhcmdldCkKICAgICBlbmQpCiBlbmQKIAogCiBtYWNybyBjb21wYXJl
VW5zaWduZWRPcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmVBbmRTZXQpCiAgICAgbGxpbnRPcFdp
dGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVy
bikKLSAgICAgICAgZ2V0KHJocywgdDIpCi0gICAgICAgIGdldChsaHMsIHQwKQorICAgICAgICBn
ZXQobV9yaHMsIHQyKQorICAgICAgICBnZXQobV9saHMsIHQwKQogICAgICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MywgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUyUmVnKHNpemUsIHQwLCB0MiwgdDApCiAgICAgICAgIGludGVnZXJDb21wYXJlQW5kU2V0
KHQwLCB0MSwgdDApCkBAIC0xNzEwLDggKzE3MTAsOCBAQCBlbmQKIAogbWFjcm8gY29tcGFyZUp1
bXBPcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmUsIGRvdWJsZUNvbXBhcmUpCiAgICAgbGxpbnRP
cFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNo
KQotICAgICAgICBnZXQobGhzLCB0MikKLSAgICAgICAgZ2V0KHJocywgdDMpCisgICAgICAgIGdl
dChtX2xocywgdDIpCisgICAgICAgIGdldChtX3JocywgdDMpCiAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQwLCB0MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZTJSZWcoc2l6ZSwgdDMsIHQyLCB0MykKICAgICAgICAgYmluZXEgdDAsIEludDMyVGFnLCAu
b3AxTm90SW50CkBAIC0xNzQwLDcgKzE3NDAsNyBAQCBtYWNybyBjb21wYXJlSnVtcE9wKG5hbWUs
IG9wLCBpbnRlZ2VyQ29tCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0Ogot
ICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKIAogICAgIC5zbG93
OgogICAgICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC0xNzUw
LDggKzE3NTAsOCBAQCBlbmQKIAogCiBsbGludE9wV2l0aEp1bXAob3Bfc3dpdGNoX2ltbSwgT3BT
d2l0Y2hJbW0sIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAgIGdldChzY3J1
dGluZWUsIHQyKQotICAgIGdldCh0YWJsZUluZGV4LCB0MykKKyAgICBnZXQobV9zY3J1dGluZWUs
IHQyKQorICAgIGdldChtX3RhYmxlSW5kZXgsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUoc2l6ZSwgdDIsIHQxLCB0MCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIKICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fcmFyZURhdGFbdDJdLCB0MgpAQCAtMTc2OSw3ICsxNzY5LDcgQEAg
bGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRjaF9pbW0sIE9wU3dpdGNoSQogLm9wU3dpdGNoSW1tTm90
SW50OgogICAgIGJpYiB0MSwgTG93ZXN0VGFnLCAub3BTd2l0Y2hJbW1TbG93ICAjIEdvIHRvIHNs
b3cgcGF0aCBpZiBpdCdzIGEgZG91YmxlLgogLm9wU3dpdGNoSW1tRmFsbFRocm91Z2g6Ci0gICAg
anVtcChkZWZhdWx0T2Zmc2V0KQorICAgIGp1bXAobV9kZWZhdWx0T2Zmc2V0KQogCiAub3BTd2l0
Y2hJbW1TbG93OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3N3aXRjaF9pbW0p
CkBAIC0xNzc4LDggKzE3NzgsOCBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRj
aF9jaGFyLCBPcFN3aXRjaENoYXIsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQot
ICAgIGdldChzY3J1dGluZWUsIHQyKQotICAgIGdldCh0YWJsZUluZGV4LCB0MykKKyAgICBnZXQo
bV9zY3J1dGluZWUsIHQyKQorICAgIGdldChtX3RhYmxlSW5kZXgsIHQzKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQxLCB0MCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgdDIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fcmFyZURhdGFbdDJdLCB0MgpAQCAtMTgwNiw3
ICsxODA2LDcgQEAgbGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRjaF9jaGFyLCBPcFN3aXRjaAogICAg
IGRpc3BhdGNoSW5kaXJlY3QodDEpCiAKIC5vcFN3aXRjaENoYXJGYWxsVGhyb3VnaDoKLSAgICBq
dW1wKGRlZmF1bHRPZmZzZXQpCisgICAganVtcChtX2RlZmF1bHRPZmZzZXQpCiAKIC5vcFN3aXRj
aE9uUm9wZToKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9zd2l0Y2hfY2hhcikK
QEAgLTE4MTUsMTIgKzE4MTUsMTIgQEAgZW5kKQogCiAKIG1hY3JvIGFycmF5UHJvZmlsZUZvckNh
bGwob3AsIGdldHUpCi0gICAgZ2V0dShhcmd2LCB0MykKKyAgICBnZXR1KG1fYXJndiwgdDMpCiAg
ICAgbmVnaSB0MwogICAgIGJpbmVxIFRoaXNBcmd1bWVudE9mZnNldCArIFRhZ09mZnNldFtjZnIs
IHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAgICBsb2FkaSBUaGlzQXJndW1lbnRPZmZzZXQgKyBQ
YXlsb2FkT2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgIGxvYWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1
cmVJRFt0MF0sIHQwCi0gICAgc3RvcmVwIHQwLCAlb3AlOjpNZXRhZGF0YTo6YXJyYXlQcm9maWxl
Lm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZXAgdDAsICVvcCU6Ok1ldGFkYXRh
OjptX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVdCiAuZG9uZToKIGVuZAog
CkBAIC0xODI4LDI2ICsxODI4LDI2IEBAIG1hY3JvIGNvbW1vbkNhbGxPcChuYW1lLCBzbG93UGF0
aCwgb3AsIHAKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG5hbWUsIG9wLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAgbWV0YWRhdGEodDUsIHQw
KQogCi0gICAgICAgIHByb2xvZ3VlKG1hY3JvIChmaWVsZCwgZHN0KQotICAgICAgICAgICAgZ2V0
dShzaXplLCBvcCwgZmllbGQsIGRzdCkKKyAgICAgICAgcHJvbG9ndWUobWFjcm8gKGZpZWxkTmFt
ZSwgZHN0KQorICAgICAgICAgICAgZ2V0dShzaXplLCBvcCwgZmllbGROYW1lLCBkc3QpCiAgICAg
ICAgIGVuZCwgbWV0YWRhdGEpCiAKLSAgICAgICAgZ2V0KGNhbGxlZSwgdDApCi0gICAgICAgIGxv
YWRwICVvcCU6Ok1ldGFkYXRhOjpjYWxsTGlua0luZm8uY2FsbGVlW3Q1XSwgdDIKKyAgICAgICAg
Z2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAgbG9hZHAgJW9wJTo6TWV0YWRhdGE6Om1fY2FsbExp
bmtJbmZvLmNhbGxlZVt0NV0sIHQyCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVQYXls
b2FkKHNpemUsIHQwLCBDZWxsVGFnLCB0MywgLm9wQ2FsbFNsb3cpCiAgICAgICAgIGJpbmVxIHQz
LCB0MiwgLm9wQ2FsbFNsb3cKLSAgICAgICAgZ2V0dShzaXplLCBvcCwgYXJndiwgdDMpCisgICAg
ICAgIGdldHUoc2l6ZSwgb3AsIG1fYXJndiwgdDMpCiAgICAgICAgIGxzaGlmdGkgMywgdDMKICAg
ICAgICAgbmVnaSB0MwogICAgICAgICBhZGRwIGNmciwgdDMgICMgdDMgY29udGFpbnMgdGhlIG5l
dyB2YWx1ZSBvZiBjZnIKICAgICAgICAgc3RvcmVpIHQyLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0
W3QzXQotICAgICAgICBnZXR1KHNpemUsIG9wLCBhcmdjLCB0MikKKyAgICAgICAgZ2V0dShzaXpl
LCBvcCwgbV9hcmdjLCB0MikKICAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFn
T2Zmc2V0W2Nmcl0KICAgICAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9m
ZnNldFt0M10KICAgICAgICAgc3RvcmVpIENlbGxUYWcsIENhbGxlZSArIFRhZ09mZnNldFt0M10K
ICAgICAgICAgbW92ZSB0Mywgc3AKLSAgICAgICAgcHJlcGFyZUNhbGwoJW9wJTo6TWV0YWRhdGE6
OmNhbGxMaW5rSW5mby5tYWNoaW5lQ29kZVRhcmdldFt0NV0sIHQyLCB0MywgdDQsIEpTRW50cnlQ
dHJUYWcpCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihzaXplLCBvcCwgZGlzcGF0Y2gsICVv
cCU6Ok1ldGFkYXRhOjpjYWxsTGlua0luZm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5
UHRyVGFnKQorICAgICAgICBwcmVwYXJlQ2FsbCglb3AlOjpNZXRhZGF0YTo6bV9jYWxsTGlua0lu
Zm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQorICAg
ICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oc2l6ZSwgb3AsIGRpc3BhdGNoLCAlb3AlOjpNZXRhZGF0
YTo6bV9jYWxsTGlua0luZm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCBKU0VudHJ5UHRyVGFnKQog
CiAgICAgLm9wQ2FsbFNsb3c6CiAgICAgICAgIHNsb3dQYXRoRm9yQ2FsbChzaXplLCBvcCwgZGlz
cGF0Y2gsIHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKQEAgLTE4NTYsMTQgKzE4NTYsMTQgQEAgZW5k
CiAKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCiAg
ICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkKLSAgICBnZXQodmFsdWUsIHQyKQorICAg
IGdldChtX3ZhbHVlLCB0MikKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0
MSwgdDApCiAgICAgZG9SZXR1cm4oKQogZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX3Rv
X3ByaW1pdGl2ZSwgT3BUb1ByaW1pdGl2ZSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybikKLSAgICBnZXQoc3JjLCB0MikKKyAgICBnZXQobV9zcmMsIHQyKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQxLCB0MCkKICAgICBiaW5lcSB0MSwgQ2VsbFRhZywg
Lm9wVG9QcmltaXRpdmVJc0ltbQogICAgIGJiYWVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0
VHlwZSwgLm9wVG9QcmltaXRpdmVTbG93Q2FzZQpAQCAtMTkwNywxMyArMTkwNywxMyBAQCBjb21t
b25PcChsbGludF9vcF9jYXRjaCwgbWFjcm8oKSBlbmQsIG1hCiAKICAgICBsb2FkaSBWTTo6bV9l
eGNlcHRpb25bdDNdLCB0MAogICAgIHN0b3JlaSAwLCBWTTo6bV9leGNlcHRpb25bdDNdCi0gICAg
Z2V0KHNpemUsIE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdDIpCisgICAgZ2V0KHNpemUsIE9wQ2F0Y2gs
IG1fZXhjZXB0aW9uLCB0MikKICAgICBzdG9yZWkgdDAsIFBheWxvYWRPZmZzZXRbY2ZyLCB0Miwg
OF0KICAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCiAKICAgICBsb2Fk
aSBFeGNlcHRpb246Om1fdmFsdWUgKyBUYWdPZmZzZXRbdDBdLCB0MQogICAgIGxvYWRpIEV4Y2Vw
dGlvbjo6bV92YWx1ZSArIFBheWxvYWRPZmZzZXRbdDBdLCB0MAotICAgIGdldChzaXplLCBPcENh
dGNoLCB0aHJvd25WYWx1ZSwgdDIpCisgICAgZ2V0KHNpemUsIE9wQ2F0Y2gsIG1fdGhyb3duVmFs
dWUsIHQyKQogICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQyLCA4XQogICAgIHN0
b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCiAKQEAgLTE5MjYsNyArMTkyNiw3IEBAIGVu
ZCkKIAogbGxpbnRPcChvcF9lbmQsIE9wRW5kLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkK
ICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQotICAgIGdldCh2YWx1ZSwgdDApCisg
ICAgZ2V0KG1fdmFsdWUsIHQwKQogICAgIGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQogICAg
IGxvYWRpIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgdDEKICAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0
W2NmciwgdDAsIDhdLCB0MApAQCAtMjA5MywxMyArMjA5MywxMyBAQCBlbmQKIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfcmVzb2x2ZV9zY29wZSwgT3BSZXNvbHZlU2NvcGUsIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogCiAgICAgbWFjcm8gZ2V0Q29uc3RhbnRT
Y29wZSgpCi0gICAgICAgIGxvYWRwIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6Y29uc3RhbnRT
Y29wZVt0NV0sICB0MAorICAgICAgICBsb2FkcCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om1f
Y29uc3RhbnRTY29wZVt0NV0sICB0MAogICAgICAgICByZXR1cm4oQ2VsbFRhZywgdDApCiAgICAg
ZW5kCiAKICAgICBtYWNybyByZXNvbHZlU2NvcGUoKQotICAgICAgICBsb2FkaSBPcFJlc29sdmVT
Y29wZTo6TWV0YWRhdGE6OmxvY2FsU2NvcGVEZXB0aFt0NV0sIHQyCi0gICAgICAgIGdldChzY29w
ZSwgdDApCisgICAgICAgIGxvYWRpIE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6bV9sb2NhbFNj
b3BlRGVwdGhbdDVdLCB0MgorICAgICAgICBnZXQobV9zY29wZSwgdDApCiAgICAgICAgIGxvYWRw
IFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0sIHQwCiAgICAgICAgIGJ0aXogdDIsIC5yZXNvbHZl
U2NvcGVMb29wRW5kCiAKQEAgLTIxMTMsNyArMjExMyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfcmVzb2x2ZV9zY29wZSwgT3AKICAgICBlbmQKIAogICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAg
ICBsb2FkcCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6OnJlc29sdmVUeXBlW3Q1XSwgdDAKKyAg
ICBsb2FkcCBPcFJlc29sdmVTY29wZTo6TWV0YWRhdGE6Om1fcmVzb2x2ZVR5cGVbdDVdLCB0MAog
CiAjckdsb2JhbFByb3BlcnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJHbG9i
YWxWYXIKQEAgLTIxNjIsMjMgKzIxNjIsMjMgQEAgZW5kKQogCiAKIG1hY3JvIGxvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2sob3AsIGdldCwgb3BlcmFuZCwgc2xvd1BhdGgpCi0gICAgZ2V0KHNjb3BlLCB0
MCkKKyAgICBnZXQobV9zY29wZSwgdDApCiAgICAgbG9hZHAgUGF5bG9hZE9mZnNldFtjZnIsIHQw
LCA4XSwgdDAKLSAgICBsb2FkcCAlb3AlOjpNZXRhZGF0YTo6c3RydWN0dXJlW3Q1XSwgdDEKKyAg
ICBsb2FkcCAlb3AlOjpNZXRhZGF0YTo6bV9zdHJ1Y3R1cmVbdDVdLCB0MQogICAgIGJwbmVxIEpT
Q2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQxLCBzbG93UGF0aAogZW5kCiAKIAogbGxpbnRPcFdp
dGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgT3BHZXRGcm9tU2NvcGUsIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIG1hY3JvIGdldFByb3BlcnR5
KCkKLSAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwg
dDMKKyAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVd
LCB0MwogICAgICAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQzLCB0MCwgdDEsIHQy
KQogICAgICAgICB2YWx1ZVByb2ZpbGUoT3BHZXRGcm9tU2NvcGUsIHQ1LCB0MSwgdDIpCiAgICAg
ICAgIHJldHVybih0MSwgdDIpCiAgICAgZW5kCiAKICAgICBtYWNybyBnZXRHbG9iYWxWYXIodGR6
Q2hlY2tJZk5lY2Vzc2FyeSkKLSAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRh
OjpvcGVyYW5kW3Q1XSwgdDAKKyAgICAgICAgbG9hZHAgT3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRh
OjptX29wZXJhbmRbdDVdLCB0MAogICAgICAgICBsb2FkcCBUYWdPZmZzZXRbdDBdLCB0MQogICAg
ICAgICBsb2FkcCBQYXlsb2FkT2Zmc2V0W3QwXSwgdDIKICAgICAgICAgdGR6Q2hlY2tJZk5lY2Vz
c2FyeSh0MSkKQEAgLTIxODcsNyArMjE4Nyw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0
X2Zyb21fc2NvcGUsIE8KICAgICBlbmQKIAogICAgIG1hY3JvIGdldENsb3N1cmVWYXIoKQotICAg
ICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om9wZXJhbmRbdDVdLCB0MworICAg
ICAgICBsb2FkcCBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQzCiAg
ICAgICAgIGxvYWRwIEpTTGV4aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlcyArIFRhZ09mZnNldFt0
MCwgdDMsIDhdLCB0MQogICAgICAgICBsb2FkcCBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJs
ZXMgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0MywgOF0sIHQyCiAgICAgICAgIHZhbHVlUHJvZmlsZShP
cEdldEZyb21TY29wZSwgdDUsIHQxLCB0MikKQEAgLTIxOTUsNyArMjE5NSw3IEBAIGxsaW50T3BX
aXRoTWV0YWRhdGEob3BfZ2V0X2Zyb21fc2NvcGUsIE8KICAgICBlbmQKIAogICAgIG1ldGFkYXRh
KHQ1LCB0MCkKLSAgICBsb2FkaSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6OmdldFB1dEluZm9b
dDVdLCB0MAorICAgIGxvYWRpIE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6bV9nZXRQdXRJbmZv
W3Q1XSwgdDAKICAgICBhbmRpIFJlc29sdmVUeXBlTWFzaywgdDAKIAogI2dHbG9iYWxQcm9wZXJ0
eToKQEAgLTIyMTYsNyArMjIxNiw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2Zyb21f
c2NvcGUsIE8KIAogLmdDbG9zdXJlVmFyOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAuZ0ds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcwotICAgIGxvYWRWYXJpYWJsZShnZXQs
IHNjb3BlLCB0MiwgdDEsIHQwKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fc2NvcGUsIHQyLCB0
MSwgdDApCiAgICAgZ2V0Q2xvc3VyZVZhcigpCiAKIC5nR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgpAQCAtMjI0MCw3ICsyMjQwLDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShv
cF9nZXRfZnJvbV9zY29wZSwgTwogLmdDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
ICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5nRHluYW1p
YwogICAgIHZhckluamVjdGlvbkNoZWNrKC5nRHluYW1pYykKLSAgICBsb2FkVmFyaWFibGUoZ2V0
LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0Miwg
dDEsIHQwKQogICAgIGdldENsb3N1cmVWYXIoKQogCiAuZ0R5bmFtaWM6CkBAIC0yMjUxLDEwNyAr
MjI1MSwxMDcgQEAgZW5kKQogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3B1dF90b19zY29wZSwg
T3BQdXRUb1Njb3BlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKICAgICBtYWNybyBwdXRQcm9wZXJ0eSgpCi0gICAgICAgIGdldCh2YWx1ZSwgdDEpCisgICAg
ICAgIGdldChtX3ZhbHVlLCB0MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXpl
LCB0MSwgdDIsIHQzKQotICAgICAgICBsb2FkaXMgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b3Bl
cmFuZFt0NV0sIHQxCisgICAgICAgIGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29w
ZXJhbmRbdDVdLCB0MQogICAgICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwg
dDAsIHQyLCB0MykKICAgICBlbmQKIAogICAgIG1hY3JvIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAg
ICAgICAgZ2V0KHZhbHVlLCB0MCkKKyAgICAgICAgZ2V0KG1fdmFsdWUsIHQwKQogICAgICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSwgdDIpCi0gICAgICAgIGxvYWRwIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6OndhdGNocG9pbnRTZXRbdDVdLCB0MworICAgICAgICBsb2Fk
cCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX3dhdGNocG9pbnRTZXRbdDVdLCB0MwogICAgICAg
ICBub3RpZnlXcml0ZSh0MywgLnBEeW5hbWljKQotICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6
Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDAKKyAgICAgICAgbG9hZHAgT3BQdXRUb1Njb3BlOjpN
ZXRhZGF0YTo6bV9vcGVyYW5kW3Q1XSwgdDAKICAgICAgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRb
dDBdCiAgICAgICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFt0MF0KICAgICBlbmQKIAogICAg
IG1hY3JvIHB1dENsb3N1cmVWYXIoKQotICAgICAgICBnZXQodmFsdWUsIHQxKQorICAgICAgICBn
ZXQobV92YWx1ZSwgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEs
IHQyLCB0MykKLSAgICAgICAgbG9hZGlzIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9wZXJhbmRb
dDVdLCB0MQorICAgICAgICBsb2FkaXMgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6bV9vcGVyYW5k
W3Q1XSwgdDEKICAgICAgICAgc3RvcmVpIHQyLCBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJs
ZXMgKyBUYWdPZmZzZXRbdDAsIHQxLCA4XQogICAgICAgICBzdG9yZWkgdDMsIEpTTGV4aWNhbEVu
dmlyb25tZW50X3ZhcmlhYmxlcyArIFBheWxvYWRPZmZzZXRbdDAsIHQxLCA4XQogICAgIGVuZAog
CiAgICAgbWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFyKCkKLSAgICAgICAgZ2V0KHZhbHVlLCB0MSkK
KyAgICAgICAgZ2V0KG1fdmFsdWUsIHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQxLCB0MiwgdDMpCi0gICAgICAgIGxvYWRwIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6
OndhdGNocG9pbnRTZXRbdDVdLCB0MQorICAgICAgICBsb2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFk
YXRhOjptX3dhdGNocG9pbnRTZXRbdDVdLCB0MQogICAgICAgICBidHB6IHQxLCAubm9WYXJpYWJs
ZVdhdGNocG9pbnRTZXQKICAgICAgICAgbm90aWZ5V3JpdGUodDEsIC5wRHluYW1pYykKICAgICAu
bm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6Ci0gICAgICAgIGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1l
dGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAgICAgICAgbG9hZGlzIE9wUHV0VG9TY29wZTo6TWV0
YWRhdGE6Om1fb3BlcmFuZFt0NV0sIHQxCiAgICAgICAgIHN0b3JlaSB0MiwgSlNMZXhpY2FsRW52
aXJvbm1lbnRfdmFyaWFibGVzICsgVGFnT2Zmc2V0W3QwLCB0MSwgOF0KICAgICAgICAgc3RvcmVp
IHQzLCBKU0xleGljYWxFbnZpcm9ubWVudF92YXJpYWJsZXMgKyBQYXlsb2FkT2Zmc2V0W3QwLCB0
MSwgOF0KICAgICBlbmQKIAogCiAgICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGxvYWRpIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6OmdldFB1dEluZm9bdDVdLCB0MAorICAgIGxvYWRpIE9wUHV0VG9T
Y29wZTo6TWV0YWRhdGE6Om1fZ2V0UHV0SW5mb1t0NV0sIHQwCiAgICAgYW5kaSBSZXNvbHZlVHlw
ZU1hc2ssIHQwCiAKICNwTG9jYWxDbG9zdXJlVmFyOgogICAgIGJpbmVxIHQwLCBMb2NhbENsb3N1
cmVWYXIsIC5wR2xvYmFsUHJvcGVydHkKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDIs
IHQxLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MiwgdDEsIHQwKQogICAg
IHB1dExvY2FsQ2xvc3VyZVZhcigpCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBn
ZXQsIHNjb3BlLCB2YWx1ZSkKKyAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwg
bV9zY29wZSwgbV92YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wR2xvYmFsUHJvcGVydHk6CiAg
ICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAucEdsb2JhbFZhcgogICAgIGxvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soT3BQdXRUb1Njb3BlLCBnZXQsIHNjb3BlLCAucER5bmFtaWMpCiAgICAgcHV0
UHJvcGVydHkoKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwg
dmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1fc2NvcGUsIG1f
dmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEdsb2JhbFZhcjoKICAgICBiaW5lcSB0MCwgR2xv
YmFsVmFyLCAucEdsb2JhbExleGljYWxWYXIKICAgICBwdXRHbG9iYWxWYXJpYWJsZSgpCi0gICAg
d3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qoc2l6ZSwgZ2V0LCB2YWx1ZSkKKyAgICB3cml0ZUJh
cnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBnZXQsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQog
CiAucEdsb2JhbExleGljYWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2JhbExleGljYWxWYXIsIC5w
Q2xvc3VyZVZhcgogICAgIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3cml0ZUJhcnJpZXJPbkds
b2JhbExleGljYWxFbnZpcm9ubWVudChzaXplLCBnZXQsIHZhbHVlKQorICAgIHdyaXRlQmFycmll
ck9uR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KHNpemUsIGdldCwgbV92YWx1ZSkKICAgICBkaXNw
YXRjaCgpCiAKIC5wQ2xvc3VyZVZhcjoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhciwgLnBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBz
Y29wZSwgdDIsIHQxLCB0MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MiwgdDEs
IHQwKQogICAgIHB1dENsb3N1cmVWYXIoKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6
ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBn
ZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCAucEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAg
ICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKE9wUHV0VG9TY29wZSwgZ2V0LCBzY29wZSwgLnBEeW5h
bWljKQogICAgIHB1dFByb3BlcnR5KCkKLSAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUs
IGdldCwgc2NvcGUsIHZhbHVlKQorICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0
LCBtX3Njb3BlLCBtX3ZhbHVlKQogICAgIGRpc3BhdGNoKCkKIAogLnBHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzLCAucEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFy
SW5qZWN0aW9uQ2hlY2soLnBEeW5hbWljKQogICAgIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3
cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBnZXQsIHZhbHVlKQorICAgIHdyaXRlQmFy
cmllck9uR2xvYmFsT2JqZWN0KHNpemUsIGdldCwgbV92YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAK
IC5wR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAs
IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucENsb3N1cmVWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnBEeW5hbWljKQogICAg
IHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZp
cm9ubWVudChzaXplLCBnZXQsIHZhbHVlKQorICAgIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50KHNpemUsIGdldCwgbV92YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucE1vZHVsZVZhcgogICAgIHZhckluamVjdGlvbkNoZWNr
KC5wRHluYW1pYykKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDIsIHQxLCB0MCkKKyAg
ICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MiwgdDEsIHQwKQogICAgIHB1dENsb3N1cmVW
YXIoKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUp
CisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUp
CiAgICAgZGlzcGF0Y2goKQogCiAucE1vZHVsZVZhcjoKQEAgLTIzNjYsOSArMjM2Niw5IEBAIGVu
ZCkKIAogCiBsbGludE9wV2l0aFByb2ZpbGUob3BfZ2V0X2Zyb21fYXJndW1lbnRzLCBPcEdldEZy
b21Bcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0
KGFyZ3VtZW50cywgdDApCisgICAgZ2V0KG1fYXJndW1lbnRzLCB0MCkKICAgICBsb2FkaSBQYXls
b2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MAotICAgIGdldChpbmRleCwgdDEpCisgICAgZ2V0KG1f
aW5kZXgsIHQxKQogICAgIGxvYWRpIERpcmVjdEFyZ3VtZW50c19zdG9yYWdlICsgVGFnT2Zmc2V0
W3QwLCB0MSwgOF0sIHQyCiAgICAgbG9hZGkgRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UgKyBQYXls
b2FkT2Zmc2V0W3QwLCB0MSwgOF0sIHQzCiAgICAgcmV0dXJuKHQyLCB0MykKQEAgLTIzNzYsMTIg
KzIzNzYsMTIgQEAgZW5kKQogCiAKIGxsaW50T3Aob3BfcHV0X3RvX2FyZ3VtZW50cywgT3BQdXRU
b0FyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gpCi0gICAgd3JpdGVCYXJyaWVy
T25PcGVyYW5kcyhzaXplLCBnZXQsIGFyZ3VtZW50cywgdmFsdWUpCi0gICAgZ2V0KGFyZ3VtZW50
cywgdDApCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1fYXJndW1lbnRz
LCBtX3ZhbHVlKQorICAgIGdldChtX2FyZ3VtZW50cywgdDApCiAgICAgbG9hZGkgUGF5bG9hZE9m
ZnNldFtjZnIsIHQwLCA4XSwgdDAKLSAgICBnZXQodmFsdWUsIHQxKQorICAgIGdldChtX3ZhbHVl
LCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MiwgdDMpCi0gICAg
Z2V0KGluZGV4LCB0MSkKKyAgICBnZXQobV9pbmRleCwgdDEpCiAgICAgc3RvcmVpIHQyLCBEaXJl
Y3RBcmd1bWVudHNfc3RvcmFnZSArIFRhZ09mZnNldFt0MCwgdDEsIDhdCiAgICAgc3RvcmVpIHQz
LCBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSArIFBheWxvYWRPZmZzZXRbdDAsIHQxLCA4XQogICAg
IGRpc3BhdGNoKCkKQEAgLTIzODksNyArMjM4OSw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFJl
dHVybihvcF9nZXRfcGFyZW50X3Njb3BlLCBPcEdldFBhcmVudFNjb3BlLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChzY29wZSwgdDApCisgICAgZ2V0KG1fc2Nv
cGUsIHQwKQogICAgIGxvYWRwIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0sIHQwCiAgICAgbG9h
ZHAgSlNTY29wZTo6bV9uZXh0W3QwXSwgdDAKICAgICByZXR1cm4oQ2VsbFRhZywgdDApCkBAIC0y
NDA0LDcgKzI0MDQsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3Byb2ZpbGVfdHlwZSwgT3BQ
CiAgICAgbG9hZHAgVk06Om1fdHlwZVByb2ZpbGVyTG9nW3QxXSwgdDEKIAogICAgICMgdDAgaXMg
aG9sZGluZyB0aGUgcGF5bG9hZCwgdDUgaXMgaG9sZGluZyB0aGUgdGFnLgotICAgIGdldCh0YXJn
ZXQsIHQyKQorICAgIGdldChtX3RhcmdldCwgdDIpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZShzaXplLCB0MiwgdDUsIHQwKQogCiAgICAgYmllcSB0NSwgRW1wdHlWYWx1ZVRhZywgLm9wUHJv
ZmlsZVR5cGVEb25lCkBAIC0yNDE4LDcgKzI0MTgsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9w
X3Byb2ZpbGVfdHlwZSwgT3BQCiAgICAgc3RvcmVpIHQwLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0Vu
dHJ5Ojp2YWx1ZSArIFBheWxvYWRPZmZzZXRbdDJdCiAKICAgICAjIFN0b3JlIHRoZSBUeXBlTG9j
YXRpb24gb250byB0aGUgbG9nIGVudHJ5LgotICAgIGxvYWRwIE9wUHJvZmlsZVR5cGU6Ok1ldGFk
YXRhOjp0eXBlTG9jYXRpb25bdDNdLCB0MworICAgIGxvYWRwIE9wUHJvZmlsZVR5cGU6Ok1ldGFk
YXRhOjptX3R5cGVMb2NhdGlvblt0M10sIHQzCiAgICAgc3RvcmVwIHQzLCBUeXBlUHJvZmlsZXJM
b2c6OkxvZ0VudHJ5Ojpsb2NhdGlvblt0Ml0KIAogICAgIGJpZXEgdDUsIENlbGxUYWcsIC5vcFBy
b2ZpbGVUeXBlSXNDZWxsCkBAIC0yNDQ0LDcgKzI0NDQsNyBAQCBlbmQpCiAKIGxsaW50T3BXaXRo
TWV0YWRhdGEob3BfcHJvZmlsZV9jb250cm9sX2Zsb3csIE9wUHJvZmlsZUNvbnRyb2xGbG93LCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICBtZXRhZGF0
YSh0NSwgdDApCi0gICAgbG9hZHAgT3BQcm9maWxlQ29udHJvbEZsb3c6Ok1ldGFkYXRhOjpiYXNp
Y0Jsb2NrTG9jYXRpb25bdDVdLCB0MAorICAgIGxvYWRwIE9wUHJvZmlsZUNvbnRyb2xGbG93OjpN
ZXRhZGF0YTo6bV9iYXNpY0Jsb2NrTG9jYXRpb25bdDVdLCB0MAogICAgIGxvYWRpIEJhc2ljQmxv
Y2tMb2NhdGlvbjo6bV9leGVjdXRpb25Db3VudFt0MF0sIHQxCiAgICAgYmFkZGlvIDEsIHQxLCAu
ZG9uZQogICAgIHN0b3JlaSB0MSwgQmFzaWNCbG9ja0xvY2F0aW9uOjptX2V4ZWN1dGlvbkNvdW50
W3QwXQpAQCAtMjQ1Niw3ICsyNDU2LDcgQEAgZW5kKQogbGxpbnRPcFdpdGhSZXR1cm4ob3BfZ2V0
X3Jlc3RfbGVuZ3RoLCBPcEdldFJlc3RMZW5ndGgsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCByZXR1cm4pCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRbY2ZyXSwg
dDAKICAgICBzdWJpIDEsIHQwCi0gICAgZ2V0KG51bVBhcmFtZXRlcnNUb1NraXAsIHQxKQorICAg
IGdldChtX251bVBhcmFtZXRlcnNUb1NraXAsIHQxKQogICAgIGJpbHRlcSB0MCwgdDEsIC5zdG9y
ZVplcm8KICAgICBzdWJpIHQxLCB0MAogICAgIGptcCAuZmluaXNoCkBAIC0yNDc0LDcgKzI0NzQs
NyBAQCBsbGludE9wKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSwgCiAgICAgc3RvcmVw
IHQxLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OmNhbGxlckZyYW1lW3QwXQogICAgIGxvYWRwIENh
bGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDEKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNr
ZW46OlBhY2tldDo6Y2FsbGVlW3QwXQotICAgIGdldChzY29wZSwgdDEpCisgICAgZ2V0KG1fc2Nv
cGUsIHQxKQogICAgIGxvYWRpIFBheWxvYWRPZmZzZXRbY2ZyLCB0MSwgOF0sIHQxCiAgICAgc3Rv
cmVwIHQxLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnNjb3BlW3QwXQogICAgIGRpc3BhdGNoKCkK
QEAgLTI0ODgsMTAgKzI0ODgsMTAgQEAgbGxpbnRPcChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bCwgT3BMbwogICAgIGFjcXVpcmVTaGFkb3dDaGlja2VuUGFja2V0KC5vcExvZ1NoYWRvd0NoaWNr
ZW5UYWlsU2xvdykKICAgICBzdG9yZXAgY2ZyLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OmZyYW1l
W3QwXQogICAgIHN0b3JlcCBTaGFkb3dDaGlja2VuVGFpbE1hcmtlciwgU2hhZG93Q2hpY2tlbjo6
UGFja2V0OjpjYWxsZWVbdDBdCi0gICAgbG9hZFZhcmlhYmxlKGdldCwgdGhpc1ZhbHVlLCB0Mywg
dDIsIHQxKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fdGhpc1ZhbHVlLCB0MywgdDIsIHQxKQog
ICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0ICsgU2hhZG93Q2hpY2tlbjo6UGFja2V0Ojp0aGlzVmFs
dWVbdDBdCiAgICAgc3RvcmVpIHQxLCBQYXlsb2FkT2Zmc2V0ICsgU2hhZG93Q2hpY2tlbjo6UGFj
a2V0Ojp0aGlzVmFsdWVbdDBdCi0gICAgZ2V0KHNjb3BlLCB0MSkKKyAgICBnZXQobV9zY29wZSwg
dDEpCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldFtjZnIsIHQxLCA4XSwgdDEKICAgICBzdG9yZXAg
dDEsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6c2NvcGVbdDBdCiAgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIHQxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjQwMDI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw0IEBACi0KLSMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM3LDI2ICszNiwyNiBAQCBtYWNybyBuZXh0SW5zdHJ1Y3Rpb25XaWRlKCkKICAgICBqbXAgW3Qx
LCB0MCwgUHRyU2l6ZV0sIEJ5dGVjb2RlUHRyVGFnCiBlbmQKIAotbWFjcm8gZ2V0dU9wZXJhbmRO
YXJyb3cob3AsIGZpZWxkLCBkc3QpCi0gICAgbG9hZGIgY29uc3RleHByICVvcCVfJWZpZWxkJV9p
bmRleFtQQiwgUEMsIDFdLCBkc3QKK21hY3JvIGdldHVPcGVyYW5kTmFycm93KG9wLCBmaWVsZE5h
bWUsIGRzdCkKKyAgICBsb2FkYiBjb25zdGV4cHIgJW9wJV8lZmllbGROYW1lJV9pbmRleFtQQiwg
UEMsIDFdLCBkc3QKIGVuZAogCi1tYWNybyBnZXRPcGVyYW5kTmFycm93KG9wLCBmaWVsZCwgZHN0
KQotICAgIGxvYWRic3AgY29uc3RleHByICVvcCVfJWZpZWxkJV9pbmRleFtQQiwgUEMsIDFdLCBk
c3QKK21hY3JvIGdldE9wZXJhbmROYXJyb3cob3AsIGZpZWxkTmFtZSwgZHN0KQorICAgIGxvYWRi
c3AgY29uc3RleHByICVvcCVfJWZpZWxkTmFtZSVfaW5kZXhbUEIsIFBDLCAxXSwgZHN0CiBlbmQK
IAotbWFjcm8gZ2V0dU9wZXJhbmRXaWRlKG9wLCBmaWVsZCwgZHN0KQotICAgIGxvYWRpIGNvbnN0
ZXhwciAlb3AlXyVmaWVsZCVfaW5kZXggKiA0ICsgMVtQQiwgUEMsIDFdLCBkc3QKK21hY3JvIGdl
dHVPcGVyYW5kV2lkZShvcCwgZmllbGROYW1lLCBkc3QpCisgICAgbG9hZGkgY29uc3RleHByICVv
cCVfJWZpZWxkTmFtZSVfaW5kZXggKiA0ICsgMVtQQiwgUEMsIDFdLCBkc3QKIGVuZAogCi1tYWNy
byBnZXRPcGVyYW5kV2lkZShvcCwgZmllbGQsIGRzdCkKLSAgICBsb2FkaXMgY29uc3RleHByICVv
cCVfJWZpZWxkJV9pbmRleCAqIDQgKyAxW1BCLCBQQywgMV0sIGRzdAorbWFjcm8gZ2V0T3BlcmFu
ZFdpZGUob3AsIGZpZWxkTmFtZSwgZHN0KQorICAgIGxvYWRpcyBjb25zdGV4cHIgJW9wJV8lZmll
bGROYW1lJV9pbmRleCAqIDQgKyAxW1BCLCBQQywgMV0sIGRzdAogZW5kCiAKIG1hY3JvIG1ha2VS
ZXR1cm4oZ2V0LCBkaXNwYXRjaCwgZm4pCiAgICAgZm4obWFjcm8gKHZhbHVlKQogICAgICAgICBt
b3ZlIHZhbHVlLCB0MgotICAgICAgICBnZXQoZHN0LCB0MSkKKyAgICAgICAgZ2V0KG1fZHN0LCB0
MSkKICAgICAgICAgc3RvcmVxIHQyLCBbY2ZyLCB0MSwgOF0KICAgICAgICAgZGlzcGF0Y2goKQog
ICAgIGVuZCkKQEAgLTY3LDE0ICs2NiwxNCBAQCBtYWNybyBtYWtlUmV0dXJuUHJvZmlsZWQob3As
IGdldCwgbWV0YWRhCiAgICAgICAgIG1vdmUgdmFsdWUsIHQzCiAgICAgICAgIG1ldGFkYXRhKHQx
LCB0MikKICAgICAgICAgdmFsdWVQcm9maWxlKG9wLCB0MSwgdDMpCi0gICAgICAgIGdldChkc3Qs
IHQxKQorICAgICAgICBnZXQobV9kc3QsIHQxKQogICAgICAgICBzdG9yZXEgdDMsIFtjZnIsIHQx
LCA4XQogICAgICAgICBkaXNwYXRjaCgpCiAgICAgZW5kKQogZW5kCiAKIG1hY3JvIHZhbHVlUHJv
ZmlsZShvcCwgbWV0YWRhdGEsIHZhbHVlKQotICAgIHN0b3JlcSB2YWx1ZSwgJW9wJTo6TWV0YWRh
dGE6OnByb2ZpbGUubV9idWNrZXRzW21ldGFkYXRhXQorICAgIHN0b3JlcSB2YWx1ZSwgJW9wJTo6
TWV0YWRhdGE6Om1fcHJvZmlsZS5tX2J1Y2tldHNbbWV0YWRhdGFdCiBlbmQKIAogbWFjcm8gZGlz
cGF0Y2hBZnRlckNhbGwoc2l6ZSwgb3AsIGRpc3BhdGNoKQpAQCAtODIsNyArODEsNyBAQCBtYWNy
byBkaXNwYXRjaEFmdGVyQ2FsbChzaXplLCBvcCwgZGlzcGF0CiAgICAgbG9hZHAgQ29kZUJsb2Nr
W2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1Jhd1BvaW50ZXJb
UEJdLCBQQgogICAgIHVucG9pc29uKF9nX0NvZGVCbG9ja1BvaXNvbiwgUEIsIHQxKQotICAgIGdl
dChzaXplLCBvcCwgZHN0LCB0MSkKKyAgICBnZXQoc2l6ZSwgb3AsIG1fZHN0LCB0MSkKICAgICBz
dG9yZXEgcjAsIFtjZnIsIHQxLCA4XQogICAgIG1ldGFkYXRhKHNpemUsIG9wLCB0MiwgdDEpCiAg
ICAgdmFsdWVQcm9maWxlKG9wLCB0MiwgcjApCkBAIC00MjUsOSArNDI0LDkgQEAgbWFjcm8gbG9h
ZENhZ2VkKGJhc2VQdHIsIG1hc2ssIHNvdXJjZSwgZAogICAgIHVuY2FnZShiYXNlUHRyLCBtYXNr
LCBkZXN0LCBzY3JhdGNoKQogZW5kCiAKLW1hY3JvIGxvYWRWYXJpYWJsZShnZXQsIGZpZWxkLCB2
YWx1ZSkKLSAgICBnZXQoZmllbGQsIHZhbHVlKQotICAgIGxvYWRxIFtjZnIsIHZhbHVlLCA4XSwg
dmFsdWUKK21hY3JvIGxvYWRWYXJpYWJsZShnZXQsIGZpZWxkTmFtZSwgdmFsdWVSZWcpCisgICAg
Z2V0KGZpZWxkTmFtZSwgdmFsdWVSZWcpCisgICAgbG9hZHEgW2NmciwgdmFsdWVSZWcsIDhdLCB2
YWx1ZVJlZwogZW5kCiAKICMgSW5kZXggYW5kIHZhbHVlIG11c3QgYmUgZGlmZmVyZW50IHJlZ2lz
dGVycy4gSW5kZXggbWF5IGJlIGNsb2JiZXJlZC4KQEAgLTQ2OCw4ICs0NjcsOCBAQCBtYWNybyBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlQ2VsbChzaXplLCBpCiAgICAgYnRxbnogdmFsdWUsIHRhZ01h
c2ssIHNsb3cKIGVuZAogCi1tYWNybyB3cml0ZUJhcnJpZXJPbk9wZXJhbmRXaXRoUmVsb2FkKHNp
emUsIGdldCwgY2VsbE9wZXJhbmQsIHJlbG9hZEFmdGVyU2xvd1BhdGgpCi0gICAgZ2V0KGNlbGxP
cGVyYW5kLCB0MSkKK21hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZFdpdGhSZWxvYWQoc2l6ZSwg
Z2V0LCBjZWxsRmllbGROYW1lLCByZWxvYWRBZnRlclNsb3dQYXRoKQorICAgIGdldChjZWxsRmll
bGROYW1lLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlQ2VsbChzaXplLCB0MSwgdDIs
IC53cml0ZUJhcnJpZXJEb25lKQogICAgIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKAogICAg
ICAgICB0MiwKQEAgLTQ4NCwyNSArNDgzLDI1IEBAIG1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFu
ZFdpdGhSZWxvYWQoc2kKIC53cml0ZUJhcnJpZXJEb25lOgogZW5kCiAKLW1hY3JvIHdyaXRlQmFy
cmllck9uT3BlcmFuZChzaXplLCBnZXQsIGNlbGxPcGVyYW5kKQotICAgIHdyaXRlQmFycmllck9u
T3BlcmFuZFdpdGhSZWxvYWQoc2l6ZSwgZ2V0LCBjZWxsT3BlcmFuZCwgbWFjcm8gKCkgZW5kKQor
bWFjcm8gd3JpdGVCYXJyaWVyT25PcGVyYW5kKHNpemUsIGdldCwgY2VsbEZpZWxkTmFtZSkKKyAg
ICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRXaXRoUmVsb2FkKHNpemUsIGdldCwgY2VsbEZpZWxkTmFt
ZSwgbWFjcm8gKCkgZW5kKQogZW5kCiAKLW1hY3JvIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6
ZSwgZ2V0LCBjZWxsT3BlcmFuZCwgdmFsdWVPcGVyYW5kKQotICAgIGdldCh2YWx1ZU9wZXJhbmQs
IHQxKQorbWFjcm8gd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIGNlbGxGaWVsZE5h
bWUsIHZhbHVlRmllbGROYW1lKQorICAgIGdldCh2YWx1ZUZpZWxkTmFtZSwgdDEpCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDEsIHQwLCAud3JpdGVCYXJyaWVyRG9uZSkK
ICAgICBidHB6IHQwLCAud3JpdGVCYXJyaWVyRG9uZQogCi0gICAgd3JpdGVCYXJyaWVyT25PcGVy
YW5kKHNpemUsIGdldCwgY2VsbE9wZXJhbmQpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kKHNp
emUsIGdldCwgY2VsbEZpZWxkTmFtZSkKIC53cml0ZUJhcnJpZXJEb25lOgogZW5kCiAKLW1hY3Jv
IHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmFsdWVPcGVyYW5kLCBsb2FkSGVscGVy
KQotICAgIGdldCh2YWx1ZU9wZXJhbmQsIHQxKQorbWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWwo
c2l6ZSwgZ2V0LCB2YWx1ZUZpZWxkTmFtZSwgbG9hZE1hY3JvKQorICAgIGdldCh2YWx1ZUZpZWxk
TmFtZSwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDEsIHQwLCAu
d3JpdGVCYXJyaWVyRG9uZSkKICAgICBidHB6IHQwLCAud3JpdGVCYXJyaWVyRG9uZQogCi0gICAg
bG9hZEhlbHBlcih0MykKKyAgICBsb2FkTWFjcm8odDMpCiAgICAgc2tpcElmSXNSZW1lbWJlcmVk
T3JJbkVkZW4oCiAgICAgICAgIHQzLAogICAgICAgICBtYWNybygpCkBAIC01MTUsMTYgKzUxNCwx
NiBAQCBtYWNybyB3cml0ZUJhcnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZhCiAud3JpdGVCYXJy
aWVyRG9uZToKIGVuZAogCi1tYWNybyB3cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBn
ZXQsIHZhbHVlT3BlcmFuZCkKLSAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZh
bHVlT3BlcmFuZCwKK21hY3JvIHdyaXRlQmFycmllck9uR2xvYmFsT2JqZWN0KHNpemUsIGdldCwg
dmFsdWVGaWVsZE5hbWUpCisgICAgd3JpdGVCYXJyaWVyT25HbG9iYWwoc2l6ZSwgZ2V0LCB2YWx1
ZUZpZWxkTmFtZSwKICAgICAgICAgbWFjcm8ocmVnaXN0ZXJUb1N0b3JlR2xvYmFsKQogICAgICAg
ICAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHJlZ2lzdGVyVG9TdG9yZUdsb2JhbAogICAgICAg
ICAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFtyZWdpc3RlclRvU3RvcmVHbG9i
YWxdLCByZWdpc3RlclRvU3RvcmVHbG9iYWwKICAgICAgICAgZW5kKQogZW5kCiAKLW1hY3JvIHdy
aXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KHNpemUsIGdldCwgdmFsdWVPcGVy
YW5kKQotICAgIHdyaXRlQmFycmllck9uR2xvYmFsKHNpemUsIGdldCwgdmFsdWVPcGVyYW5kLAor
bWFjcm8gd3JpdGVCYXJyaWVyT25HbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoc2l6ZSwgZ2V0LCB2
YWx1ZUZpZWxkTmFtZSkKKyAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbChzaXplLCBnZXQsIHZhbHVl
RmllbGROYW1lLAogICAgICAgICBtYWNybyhyZWdpc3RlclRvU3RvcmVHbG9iYWwpCiAgICAgICAg
ICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgcmVnaXN0ZXJUb1N0b3JlR2xvYmFsCiAgICAgICAg
ICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3JlZ2lzdGVyVG9TdG9yZUdsb2Jh
bF0sIHJlZ2lzdGVyVG9TdG9yZUdsb2JhbApAQCAtNjY3LDcgKzY2Niw3IEBAIF9sbGludF9vcF9l
bnRlcjoKIAogCiBsbGludE9wV2l0aFByb2ZpbGUob3BfZ2V0X2FyZ3VtZW50LCBPcEdldEFyZ3Vt
ZW50LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChpbmRleCwg
dDIpCisgICAgZ2V0KG1faW5kZXgsIHQyKQogICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1
bWVudENvdW50W2Nmcl0sIHQwCiAgICAgYmlsdGVxIHQwLCB0MiwgLm9wR2V0QXJndW1lbnRPdXRP
ZkJvdW5kcwogICAgIGxvYWRxIFRoaXNBcmd1bWVudE9mZnNldFtjZnIsIHQyLCA4XSwgdDAKQEAg
LTY5NCwxMyArNjkzLDEzIEBAIGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3RvX3Ro
aXMsIE9wVG9UaGlzLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVy
bikKLSAgICBnZXQoc3JjRHN0LCB0MCkKKyAgICBnZXQobV9zcmNEc3QsIHQwKQogICAgIGxvYWRx
IFtjZnIsIHQwLCA4XSwgdDAKICAgICBidHFueiB0MCwgdGFnTWFzaywgLm9wVG9UaGlzU2xvdwog
ICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgRmluYWxPYmplY3RUeXBlLCAub3BUb1RoaXNT
bG93CiAgICAgbG9hZFN0cnVjdHVyZVdpdGhTY3JhdGNoKHQwLCB0MSwgdDIsIHQzKQogICAgIG1l
dGFkYXRhKHQyLCB0MykKLSAgICBsb2FkcCBPcFRvVGhpczo6TWV0YWRhdGE6OmNhY2hlZFN0cnVj
dHVyZVt0Ml0sIHQyCisgICAgbG9hZHAgT3BUb1RoaXM6Ok1ldGFkYXRhOjptX2NhY2hlZFN0cnVj
dHVyZVt0Ml0sIHQyCiAgICAgYnBuZXEgdDEsIHQyLCAub3BUb1RoaXNTbG93CiAgICAgZGlzcGF0
Y2goKQogCkBAIC03MTEsNyArNzEwLDcgQEAgZW5kKQogCiAKIGxsaW50T3Aob3BfY2hlY2tfdGR6
LCBPcENoZWNrVGR6LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKLSAgICBnZXQodGFyZ2V0
LCB0MCkKKyAgICBnZXQobV90YXJnZXQsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDAsIHQxKQogICAgIGJxbmVxIHQxLCBWYWx1ZUVtcHR5LCAub3BOb3RURFoKICAgICBj
YWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90aHJvd190ZHpfZXJyb3IpCkBAIC03MjIsMTQgKzcyMSwx
NCBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfbW92LCBPcE1vdiwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQoc3JjLCB0MSkKKyAgICBnZXQobV9z
cmMsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyKQogICAgIHJl
dHVybih0MikKIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF9ub3QsIE9wTm90LCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAg
ICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQw
LCB0MikKICAgICB4b3JxIFZhbHVlRmFsc2UsIHQyCiAgICAgYnRxbnogdDIsIH4xLCAub3BOb3RT
bG93CkBAIC03NDQsOCArNzQzLDggQEAgZW5kKQogCiBtYWNybyBlcXVhbGl0eUNvbXBhcmlzb25P
cChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmlzb24pCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4ob3Bf
JW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICAgICAg
Z2V0KHJocywgdDApCi0gICAgICAgIGdldChsaHMsIHQyKQorICAgICAgICBnZXQobV9yaHMsIHQw
KQorICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
SW50MzIoc2l6ZSwgdDAsIHQxLCAuc2xvdykKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZUludDMyKHNpemUsIHQyLCB0MCwgLnNsb3cpCiAgICAgICAgIGludGVnZXJDb21wYXJpc29uKHQw
LCB0MSwgdDApCkBAIC03NjEsNyArNzYwLDcgQEAgZW5kCiAKIG1hY3JvIGVxdWFsTnVsbENvbXBh
cmlzb25PcChuYW1lLCBvcCwgZm4pCiAgICAgbGxpbnRPcFdpdGhSZXR1cm4obmFtZSwgb3AsIG1h
Y3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgICAgIGdldChvcGVyYW5kLCB0
MCkKKyAgICAgICAgZ2V0KG1fb3BlcmFuZCwgdDApCiAgICAgICAgIGxvYWRxIFtjZnIsIHQwLCA4
XSwgdDAKICAgICAgICAgYnRxbnogdDAsIHRhZ01hc2ssIC5pbW1lZGlhdGUKICAgICAgICAgYnRi
bnogSlNDZWxsOjptX2ZsYWdzW3QwXSwgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgLm1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQKQEAgLTc5MSw3ICs3OTAsNyBAQCBlcXVhbE51bGxDb21wYXJpc29uT3Ao
b3BfbmVxX251bGwsIE9wTmVxCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfdW5kZWZpbmVk
X29yX251bGwsIE9wSXNVbmRlZmluZWRPck51bGwsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
LCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQwKQorICAgIGdldChtX29wZXJhbmQsIHQwKQog
ICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwgdDAKICAgICBhbmRxIH5UYWdCaXRVbmRlZmluZWQsIHQw
CiAgICAgY3FlcSB0MCwgVmFsdWVOdWxsLCB0MApAQCAtODAyLDggKzgwMSw4IEBAIGVuZCkKIAog
bWFjcm8gc3RyaWN0RXFPcChuYW1lLCBvcCwgZXF1YWxpdHlPcGVyYXRpb24pCiAgICAgbGxpbnRP
cFdpdGhSZXR1cm4ob3BfJW5hbWUlLCBvcCwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybikKLSAgICAgICAgZ2V0KHJocywgdDApCi0gICAgICAgIGdldChsaHMsIHQyKQorICAgICAg
ICBnZXQobV9yaHMsIHQwKQorICAgICAgICBnZXQobV9saHMsIHQyKQogICAgICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MiwgdDApCiAgICAgICAgIG1vdmUgdDAsIHQyCkBAIC04MzYsOCArODM1LDgg
QEAgc3RyaWN0RXFPcChuc3RyaWN0ZXEsIE9wTnN0cmljdGVxLAogCiBtYWNybyBzdHJpY3RFcXVh
bGl0eUp1bXBPcChuYW1lLCBvcCwgZXF1YWxpdHlPcGVyYXRpb24pCiAgICAgbGxpbnRPcFdpdGhK
dW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQotICAg
ICAgICBnZXQobGhzLCB0MikKLSAgICAgICAgZ2V0KHJocywgdDMpCisgICAgICAgIGdldChtX2xo
cywgdDIpCisgICAgICAgIGdldChtX3JocywgdDMpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFy
aWFibGUoc2l6ZSwgdDIsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUs
IHQzLCB0MSkKICAgICAgICAgbW92ZSB0MCwgdDIKQEAgLTg1Myw3ICs4NTIsNyBAQCBtYWNybyBz
dHJpY3RFcXVhbGl0eUp1bXBPcChuYW1lLCBvcCwgZXF1CiAgICAgICAgIGRpc3BhdGNoKCkKIAog
ICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3Rh
cmdldCkKIAogICAgIC5zbG93OgogICAgICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF8lbmFtZSUpCkBAIC04NzIsNyArODcxLDcgQEAgc3RyaWN0RXF1YWxpdHlKdW1wT3Aoam5zdHJp
Y3RlcSwgT3BKbnN0cgogCiBtYWNybyBwcmVPcChuYW1lLCBvcCwgYXJpdGhtZXRpY09wZXJhdGlv
bikKICAgICBsbGludE9wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNo
KQotICAgICAgICBnZXQoc3JjRHN0LCB0MCkKKyAgICAgICAgZ2V0KG1fc3JjRHN0LCB0MCkKICAg
ICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MQogICAgICAgICBicWIgdDEsIHRhZ1R5cGVOdW1i
ZXIsIC5zbG93CiAgICAgICAgIGFyaXRobWV0aWNPcGVyYXRpb24odDEsIC5zbG93KQpAQCAtODg2
LDcgKzg4NSw3IEBAIG1hY3JvIHByZU9wKG5hbWUsIG9wLCBhcml0aG1ldGljT3BlcmF0aW8KIGVu
ZAogCiBsbGludE9wV2l0aFByb2ZpbGUob3BfdG9fbnVtYmVyLCBPcFRvTnVtYmVyLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAgICBn
ZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0
MikKICAgICBicWFlcSB0MiwgdGFnVHlwZU51bWJlciwgLm9wVG9OdW1iZXJJc0ltbWVkaWF0ZQog
ICAgIGJ0cXogdDIsIHRhZ1R5cGVOdW1iZXIsIC5vcFRvTnVtYmVyU2xvdwpAQCAtOTAwLDcgKzg5
OSw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihvcF90b19zdHJpbmcsIE9wVG9TdHJp
bmcsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQs
IHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDEsIHQwKQogICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAub3BUb1N0cmluZ1Nsb3cKICAg
ICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIFN0cmluZ1R5cGUsIC5vcFRvU3RyaW5nU2xvdwpA
QCAtOTE0LDcgKzkxMyw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFByb2ZpbGUob3BfdG9fb2Jq
ZWN0LCBPcFRvT2JqZWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAg
IGdldChvcGVyYW5kLCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MikKICAgICBidHFueiB0MiwgdGFnTWFzaywgLm9wVG9P
YmplY3RTbG93CiAgICAgYmJiIEpTQ2VsbDo6bV90eXBlW3QyXSwgT2JqZWN0VHlwZSwgLm9wVG9P
YmplY3RTbG93CkBAIC05MjcsMjIgKzkyNiwyMiBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9uZWdhdGUsIE9wTmVnYXRlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKLSAgICBnZXQob3BlcmFuZCwgdDApCisgICAgZ2V0KG1fb3BlcmFuZCwg
dDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDMpCiAgICAgbWV0YWRh
dGEodDEsIHQyKQotICAgIGxvYWRpcyBPcE5lZ2F0ZTo6TWV0YWRhdGE6OmFyaXRoUHJvZmlsZVt0
MV0sIHQyCisgICAgbG9hZGlzIE9wTmVnYXRlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbdDFd
LCB0MgogICAgIGJxYiB0MywgdGFnVHlwZU51bWJlciwgLm9wTmVnYXRlTm90SW50CiAgICAgYnRp
eiB0MywgMHg3ZmZmZmZmZiwgLm9wTmVnYXRlU2xvdwogICAgIG5lZ2kgdDMKICAgICBvcnEgdGFn
VHlwZU51bWJlciwgdDMKICAgICBvcmkgQXJpdGhQcm9maWxlSW50LCB0MgotICAgIHN0b3JlaSB0
MiwgT3BOZWdhdGU6Ok1ldGFkYXRhOjphcml0aFByb2ZpbGVbdDFdCisgICAgc3RvcmVpIHQyLCBP
cE5lZ2F0ZTo6TWV0YWRhdGE6Om1fYXJpdGhQcm9maWxlW3QxXQogICAgIHJldHVybih0MykKIC5v
cE5lZ2F0ZU5vdEludDoKICAgICBidHF6IHQzLCB0YWdUeXBlTnVtYmVyLCAub3BOZWdhdGVTbG93
CiAgICAgeG9ycSAweDgwMDAwMDAwMDAwMDAwMDAsIHQzCiAgICAgb3JpIEFyaXRoUHJvZmlsZU51
bWJlciwgdDIKLSAgICBzdG9yZWkgdDIsIE9wTmVnYXRlOjpNZXRhZGF0YTo6YXJpdGhQcm9maWxl
W3QxXQorICAgIHN0b3JlaSB0MiwgT3BOZWdhdGU6Ok1ldGFkYXRhOjptX2FyaXRoUHJvZmlsZVt0
MV0KICAgICByZXR1cm4odDMpCiAKIC5vcE5lZ2F0ZVNsb3c6CkBAIC05NTYsMTYgKzk1NSwxNiBA
QCBtYWNybyBiaW5hcnlPcEN1c3RvbVN0b3JlKG5hbWUsIG9wLCBpbnRlCiAgICAgICAgIG1ldGFk
YXRhKHQ1LCB0MCkKIAogICAgICAgICBtYWNybyBwcm9maWxlKHR5cGUpCi0gICAgICAgICAgICBv
cmkgdHlwZSwgJW9wJTo6TWV0YWRhdGE6OmFyaXRoUHJvZmlsZVt0NV0KKyAgICAgICAgICAgIG9y
aSB0eXBlLCAlb3AlOjpNZXRhZGF0YTo6bV9hcml0aFByb2ZpbGVbdDVdCiAgICAgICAgIGVuZAog
Ci0gICAgICAgIGdldChyaHMsIHQwKQotICAgICAgICBnZXQobGhzLCB0MikKKyAgICAgICAgZ2V0
KG1fcmhzLCB0MCkKKyAgICAgICAgZ2V0KG1fbGhzLCB0MikKICAgICAgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDIsIHQwKQogICAgICAgICBicWIgdDAsIHRhZ1R5cGVOdW1iZXIsIC5vcDFOb3RJbnQK
ICAgICAgICAgYnFiIHQxLCB0YWdUeXBlTnVtYmVyLCAub3AyTm90SW50Ci0gICAgICAgIGdldChk
c3QsIHQyKQorICAgICAgICBnZXQobV9kc3QsIHQyKQogICAgICAgICBpbnRlZ2VyT3BlcmF0aW9u
QW5kU3RvcmUodDEsIHQwLCAuc2xvdywgdDIpCiAKICAgICAgICAgcHJvZmlsZShBcml0aFByb2Zp
bGVJbnRJbnQpCkBAIC05ODQsNyArOTgzLDcgQEAgbWFjcm8gYmluYXJ5T3BDdXN0b21TdG9yZShu
YW1lLCBvcCwgaW50ZQogICAgICAgICBwcm9maWxlKEFyaXRoUHJvZmlsZU51bWJlckludCkKICAg
ICAgICAgY2kyZCB0MSwgZnQxCiAgICAgLm9wMU5vdEludFJlYWR5OgotICAgICAgICBnZXQoZHN0
LCB0MikKKyAgICAgICAgZ2V0KG1fZHN0LCB0MikKICAgICAgICAgYWRkcSB0YWdUeXBlTnVtYmVy
LCB0MAogICAgICAgICBmcTJkIHQwLCBmdDAKICAgICAgICAgZG91YmxlT3BlcmF0aW9uKGZ0MSwg
ZnQwKQpAQCAtOTk1LDcgKzk5NCw3IEBAIG1hY3JvIGJpbmFyeU9wQ3VzdG9tU3RvcmUobmFtZSwg
b3AsIGludGUKIAogICAgIC5vcDJOb3RJbnQ6CiAgICAgICAgICMgRmlyc3Qgb3BlcmFuZCBpcyBk
ZWZpbml0ZWx5IGFuIGludCwgdGhlIHNlY29uZCBpcyBkZWZpbml0ZWx5IG5vdC4KLSAgICAgICAg
Z2V0KGRzdCwgdDIpCisgICAgICAgIGdldChtX2RzdCwgdDIpCiAgICAgICAgIGJ0cXogdDEsIHRh
Z1R5cGVOdW1iZXIsIC5zbG93CiAgICAgICAgIHByb2ZpbGUoQXJpdGhQcm9maWxlSW50TnVtYmVy
KQogICAgICAgICBjaTJkIHQwLCBmdDAKQEAgLTEwNzQsNyArMTA3Myw3IEBAIGJpbmFyeU9wKHN1
YiwgT3BTdWIsCiAKIAogbGxpbnRPcFdpdGhSZXR1cm4ob3BfdW5zaWduZWQsIE9wVW5zaWduZWQs
IG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQsIHQx
KQorICAgIGdldChtX29wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDEsIHQyKQogICAgIGJpbHQgdDIsIDAsIC5vcFVuc2lnbmVkU2xvdwogICAgIHJldHVybih0
MikKQEAgLTEwODYsOCArMTA4NSw4IEBAIGVuZCkKIAogbWFjcm8gY29tbW9uQml0T3Aob3BLaW5k
LCBuYW1lLCBvcCwgb3BlcmF0aW9uKQogICAgIG9wS2luZChvcF8lbmFtZSUsIG9wLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgICAgICBnZXQocmhzLCB0MCkKLSAgICAg
ICAgZ2V0KGxocywgdDIpCisgICAgICAgIGdldChtX3JocywgdDApCisgICAgICAgIGdldChtX2xo
cywgdDIpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQogICAg
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MCkKICAgICAgICAgYnFiIHQw
LCB0YWdUeXBlTnVtYmVyLCAuc2xvdwpAQCAtMTEzMSw3ICsxMTMwLDcgQEAgYml0T3BQcm9maWxl
ZChiaXR4b3IsIE9wQml0eG9yLAogICAgIG1hY3JvIChsZWZ0LCByaWdodCkgeG9yaSBsZWZ0LCBy
aWdodCBlbmQpCiAKIGxsaW50T3BXaXRoUHJvZmlsZShvcF9iaXRub3QsIE9wQml0bm90LCBtYWNy
byAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MCkKKyAg
ICBnZXQobV9vcGVyYW5kLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6
ZSwgdDAsIHQzLCAub3BCaXROb3RTbG93KQogICAgIG5vdGkgdDMKICAgICBvcnEgdGFnVHlwZU51
bWJlciwgdDMKQEAgLTExNDMsMTYgKzExNDIsMTYgQEAgZW5kKQogCiAKIGxsaW50T3Aob3Bfb3Zl
cnJpZGVzX2hhc19pbnN0YW5jZSwgT3BPdmVycmlkZXNIYXNJbnN0YW5jZSwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gpCi0gICAgZ2V0KGRzdCwgdDMpCisgICAgZ2V0KG1fZHN0LCB0MykKIAot
ICAgIGdldChoYXNJbnN0YW5jZVZhbHVlLCB0MSkKKyAgICBnZXQobV9oYXNJbnN0YW5jZVZhbHVl
LCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkKICAgICBsb2Fk
cCBDb2RlQmxvY2tbY2ZyXSwgdDIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0
W3QyXSwgdDIKICAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9mdW5jdGlvblByb3RvSGFzSW5z
dGFuY2VTeW1ib2xGdW5jdGlvblt0Ml0sIHQyCiAgICAgYnFuZXEgdDAsIHQyLCAub3BPdmVycmlk
ZXNIYXNJbnN0YW5jZU5vdERlZmF1bHRTeW1ib2wKIAotICAgIGdldChjb25zdHJ1Y3RvciwgdDEp
CisgICAgZ2V0KG1fY29uc3RydWN0b3IsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDEsIHQwKQogICAgIHRieiBKU0NlbGw6Om1fZmxhZ3NbdDBdLCBJbXBsZW1lbnRzRGVm
YXVsdEhhc0luc3RhbmNlLCB0MQogICAgIG9ycSBWYWx1ZUZhbHNlLCB0MQpAQCAtMTE2Niw3ICsx
MTY1LDcgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX2VtcHR5LCBPcElzRW1w
dHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgZ2V0KG9wZXJhbmQs
IHQxKQorICAgIGdldChtX29wZXJhbmQsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDEsIHQwKQogICAgIGNxZXEgdDAsIFZhbHVlRW1wdHksIHQzCiAgICAgb3JxIFZhbHVl
RmFsc2UsIHQzCkBAIC0xMTc1LDcgKzExNzQsNyBAQCBlbmQpCiAKIAogbGxpbnRPcFdpdGhSZXR1
cm4ob3BfaXNfdW5kZWZpbmVkLCBPcElzVW5kZWZpbmVkLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MSkKKyAgICBnZXQobV9vcGVyYW5kLCB0
MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkKICAgICBidHF6IHQw
LCB0YWdNYXNrLCAub3BJc1VuZGVmaW5lZENlbGwKICAgICBjcWVxIHQwLCBWYWx1ZVVuZGVmaW5l
ZCwgdDMKQEAgLTExOTYsNyArMTE5NSw3IEBAIGVuZCkKIAogCiBsbGludE9wV2l0aFJldHVybihv
cF9pc19ib29sZWFuLCBPcElzQm9vbGVhbiwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybikKLSAgICBnZXQob3BlcmFuZCwgdDEpCisgICAgZ2V0KG1fb3BlcmFuZCwgdDEpCiAgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwgdDApCiAgICAgeG9ycSBWYWx1ZUZhbHNl
LCB0MAogICAgIHRxeiB0MCwgfjEsIHQwCkBAIC0xMjA2LDcgKzEyMDUsNyBAQCBlbmQpCiAKIAog
bGxpbnRPcFdpdGhSZXR1cm4ob3BfaXNfbnVtYmVyLCBPcElzTnVtYmVyLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChvcGVyYW5kLCB0MSkKKyAgICBnZXQobV9v
cGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkKICAg
ICB0cW56IHQwLCB0YWdUeXBlTnVtYmVyLCB0MQogICAgIG9ycSBWYWx1ZUZhbHNlLCB0MQpAQCAt
MTIxNSw4ICsxMjE0LDggQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX2NlbGxf
d2l0aF90eXBlLCBPcElzQ2VsbFdpdGhUeXBlLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwg
cmV0dXJuKQotICAgIGdldHUoc2l6ZSwgT3BJc0NlbGxXaXRoVHlwZSwgdHlwZSwgdDApCi0gICAg
Z2V0KG9wZXJhbmQsIHQxKQorICAgIGdldHUoc2l6ZSwgT3BJc0NlbGxXaXRoVHlwZSwgbV90eXBl
LCB0MCkKKyAgICBnZXQobV9vcGVyYW5kLCB0MSkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQxLCB0MykKICAgICBidHFueiB0MywgdGFnTWFzaywgLm5vdENlbGxDYXNlCiAgICAg
Y2JlcSBKU0NlbGw6Om1fdHlwZVt0M10sIHQwLCB0MQpAQCAtMTIyOCw3ICsxMjI3LDcgQEAgZW5k
KQogCiAKIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX29iamVjdCwgT3BJc09iamVjdCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBnZXQob3BlcmFuZCwgdDEpCisgICAg
Z2V0KG1fb3BlcmFuZCwgdDEpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MSwg
dDApCiAgICAgYnRxbnogdDAsIHRhZ01hc2ssIC5vcElzT2JqZWN0Tm90Q2VsbAogICAgIGNiYWVx
IEpTQ2VsbDo6bV90eXBlW3QwXSwgT2JqZWN0VHlwZSwgdDEKQEAgLTEyNjcsMTIgKzEyNjYsMTIg
QEAgZW5kCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkX2RpcmVjdCwgT3BHZXRC
eUlkRGlyZWN0LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikK
ICAgICBtZXRhZGF0YSh0MiwgdDApCi0gICAgZ2V0KGJhc2UsIHQwKQorICAgIGdldChtX2Jhc2Us
IHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQwLCB0MywgLm9wR2V0
QnlJZERpcmVjdFNsb3cpCiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwgdDEK
LSAgICBsb2FkaSBPcEdldEJ5SWREaXJlY3Q6Ok1ldGFkYXRhOjpzdHJ1Y3R1cmVbdDJdLCB0MAor
ICAgIGxvYWRpIE9wR2V0QnlJZERpcmVjdDo6TWV0YWRhdGE6Om1fc3RydWN0dXJlW3QyXSwgdDAK
ICAgICBiaW5lcSB0MCwgdDEsIC5vcEdldEJ5SWREaXJlY3RTbG93Ci0gICAgbG9hZGkgT3BHZXRC
eUlkRGlyZWN0OjpNZXRhZGF0YTo6b2Zmc2V0W3QyXSwgdDEKKyAgICBsb2FkaSBPcEdldEJ5SWRE
aXJlY3Q6Ok1ldGFkYXRhOjptX29mZnNldFt0Ml0sIHQxCiAgICAgbG9hZFByb3BlcnR5QXRWYXJp
YWJsZU9mZnNldCh0MSwgdDMsIHQwKQogICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWREaXJlY3Qs
IHQyLCB0MCkKICAgICByZXR1cm4odDApCkBAIC0xMjg1LDE2ICsxMjg0LDE2IEBAIGVuZCkKIAog
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QnlJZCwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIG1ldGFkYXRhLCByZXR1cm4pCiAgICAgbWV0YWRhdGEodDIsIHQxKQot
ICAgIGxvYWRiIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1vZGVbdDJdLCB0MQotICAgIGdldChiYXNl
LCB0MCkKKyAgICBsb2FkYiBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVbdDJdLCB0MQorICAg
IGdldChtX2Jhc2UsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQw
LCB0MywgLm9wR2V0QnlJZFNsb3cpCiAKIC5vcEdldEJ5SWREZWZhdWx0OgogICAgIGJibmVxIHQx
LCBjb25zdGV4cHIgR2V0QnlJZE1vZGU6OkRlZmF1bHQsIC5vcEdldEJ5SWRQcm90b0xvYWQKICAg
ICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDNdLCB0MQotICAgIGxvYWRpIE9wR2V0QnlJ
ZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5kZWZhdWx0TW9kZS5zdHJ1Y3R1cmVbdDJdLCB0MAor
ICAgIGxvYWRpIE9wR2V0QnlJZDo6TWV0YWRhdGE6Om1fbW9kZU1ldGFkYXRhLmRlZmF1bHRNb2Rl
LnN0cnVjdHVyZVt0Ml0sIHQwCiAgICAgYmluZXEgdDAsIHQxLCAub3BHZXRCeUlkU2xvdwotICAg
IGxvYWRpcyBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlTWV0YWRhdGEuZGVmYXVsdE1vZGUuY2Fj
aGVkT2Zmc2V0W3QyXSwgdDEKKyAgICBsb2FkaXMgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2Rl
TWV0YWRhdGEuZGVmYXVsdE1vZGUuY2FjaGVkT2Zmc2V0W3QyXSwgdDEKICAgICBsb2FkUHJvcGVy
dHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MywgdDApCiAgICAgdmFsdWVQcm9maWxlKE9wR2V0QnlJ
ZCwgdDIsIHQwKQogICAgIHJldHVybih0MCkKQEAgLTEzMDIsMTAgKzEzMDEsMTAgQEAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0QgogLm9wR2V0QnlJZFByb3RvTG9hZDoK
ICAgICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpQcm90b0xvYWQsIC5vcEdldEJ5
SWRBcnJheUxlbmd0aAogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0M10sIHQxCi0g
ICAgbG9hZGkgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bW9kZU1ldGFkYXRhLnByb3RvTG9hZE1vZGUu
c3RydWN0dXJlW3QyXSwgdDMKKyAgICBsb2FkaSBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVN
ZXRhZGF0YS5wcm90b0xvYWRNb2RlLnN0cnVjdHVyZVt0Ml0sIHQzCiAgICAgYmluZXEgdDMsIHQx
LCAub3BHZXRCeUlkU2xvdwotICAgIGxvYWRpcyBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlTWV0
YWRhdGEucHJvdG9Mb2FkTW9kZS5jYWNoZWRPZmZzZXRbdDJdLCB0MQotICAgIGxvYWRwIE9wR2V0
QnlJZDo6TWV0YWRhdGE6Om1vZGVNZXRhZGF0YS5wcm90b0xvYWRNb2RlLmNhY2hlZFNsb3RbdDJd
LCB0MworICAgIGxvYWRpcyBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptX21vZGVNZXRhZGF0YS5wcm90
b0xvYWRNb2RlLmNhY2hlZE9mZnNldFt0Ml0sIHQxCisgICAgbG9hZHAgT3BHZXRCeUlkOjpNZXRh
ZGF0YTo6bV9tb2RlTWV0YWRhdGEucHJvdG9Mb2FkTW9kZS5jYWNoZWRTbG90W3QyXSwgdDMKICAg
ICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MywgdDApCiAgICAgdmFsdWVQcm9m
aWxlKE9wR2V0QnlJZCwgdDIsIHQwKQogICAgIHJldHVybih0MCkKQEAgLTEzMTMsNyArMTMxMiw3
IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X2lkLCBPcEdldEIKIC5vcEdldEJ5SWRB
cnJheUxlbmd0aDoKICAgICBiYm5lcSB0MSwgY29uc3RleHByIEdldEJ5SWRNb2RlOjpBcnJheUxl
bmd0aCwgLm9wR2V0QnlJZFVuc2V0CiAgICAgbW92ZSB0MywgdDAKLSAgICBhcnJheVByb2ZpbGUo
T3BHZXRCeUlkOjpNZXRhZGF0YTo6bW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVBy
b2ZpbGUsIHQwLCB0MiwgdDUpCisgICAgYXJyYXlQcm9maWxlKE9wR2V0QnlJZDo6TWV0YWRhdGE6
Om1fbW9kZU1ldGFkYXRhLmFycmF5TGVuZ3RoTW9kZS5hcnJheVByb2ZpbGUsIHQwLCB0MiwgdDUp
CiAgICAgYnRpeiB0MCwgSXNBcnJheSwgLm9wR2V0QnlJZFNsb3cKICAgICBidGl6IHQwLCBJbmRl
eGluZ1NoYXBlTWFzaywgLm9wR2V0QnlJZFNsb3cKICAgICBsb2FkQ2FnZWQoX2dfZ2lnYWNhZ2VC
YXNlUHRycyArIEdpZ2FjYWdlOjpCYXNlUHRyczo6anNWYWx1ZSwgY29uc3RleHByIEpTVkFMVUVf
R0lHQUNBR0VfTUFTSywgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W3QzXSwgdDAsIHQxKQpAQCAtMTMy
NSw3ICsxMzI0LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfaWQsIE9wR2V0Qgog
CiAub3BHZXRCeUlkVW5zZXQ6CiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QzXSwg
dDEKLSAgICBsb2FkaSBPcEdldEJ5SWQ6Ok1ldGFkYXRhOjptb2RlTWV0YWRhdGEudW5zZXRNb2Rl
LnN0cnVjdHVyZVt0Ml0sIHQwCisgICAgbG9hZGkgT3BHZXRCeUlkOjpNZXRhZGF0YTo6bV9tb2Rl
TWV0YWRhdGEudW5zZXRNb2RlLnN0cnVjdHVyZVt0Ml0sIHQwCiAgICAgYmluZXEgdDAsIHQxLCAu
b3BHZXRCeUlkU2xvdwogICAgIHZhbHVlUHJvZmlsZShPcEdldEJ5SWQsIHQyLCBWYWx1ZVVuZGVm
aW5lZCkKICAgICByZXR1cm4oVmFsdWVVbmRlZmluZWQpCkBAIC0xMzM3LDEwICsxMzM2LDEwIEBA
IGVuZCkKIAogCiBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3B1dF9ieV9pZCwgT3BQdXRCeUlkLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICBnZXQoYmFz
ZSwgdDMpCisgICAgZ2V0KG1fYmFzZSwgdDMpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNl
bGwoc2l6ZSwgdDMsIHQwLCAub3BQdXRCeUlkU2xvdykKICAgICBtZXRhZGF0YSh0NSwgdDIpCi0g
ICAgbG9hZGlzIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om9sZFN0cnVjdHVyZVt0NV0sIHQyCisgICAg
bG9hZGlzIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1fb2xkU3RydWN0dXJlW3Q1XSwgdDIKICAgICBi
aW5lcSB0MiwgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QwXSwgLm9wUHV0QnlJZFNsb3cKIAogICAg
ICMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZToKQEAgLTEzNDgsMTkgKzEzNDcsMTkgQEAgbGxpbnRP
cFdpdGhNZXRhZGF0YShvcF9wdXRfYnlfaWQsIE9wUHV0QgogICAgICMgdDIgLT4gY3VycmVudCBz
dHJ1Y3R1cmUgSUQKICAgICAjIHQ1IC0+IG1ldGFkYXRhCiAKLSAgICBsb2FkaSBPcFB1dEJ5SWQ6
Ok1ldGFkYXRhOjpuZXdTdHJ1Y3R1cmVbdDVdLCB0MQorICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0
YWRhdGE6Om1fbmV3U3RydWN0dXJlW3Q1XSwgdDEKICAgICBidGl6IHQxLCAub3BQdXRCeUlkTm90
VHJhbnNpdGlvbgogCiAgICAgIyBUaGlzIGlzIHRoZSB0cmFuc2l0aW9uIGNhc2UuIHQxIGhvbGRz
IHRoZSBuZXcgc3RydWN0dXJlSUQuIHQyIGhvbGRzIHRoZSBvbGQgc3RydWN0dXJlIElELgogICAg
ICMgSWYgd2UgaGF2ZSBhIGNoYWluLCB3ZSBuZWVkIHRvIGNoZWNrIGl0LiB0MCBpcyB0aGUgYmFz
ZS4gV2UgbWF5IGNsb2JiZXIgdDEgdG8gdXNlIGl0IGFzCiAgICAgIyBzY3JhdGNoLgotICAgIGxv
YWRwIE9wUHV0QnlJZDo6TWV0YWRhdGE6OnN0cnVjdHVyZUNoYWluW3Q1XSwgdDMKKyAgICBsb2Fk
cCBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjptX3N0cnVjdHVyZUNoYWluW3Q1XSwgdDMKICAgICBidHB6
IHQzLCAub3BQdXRCeUlkVHJhbnNpdGlvbkRpcmVjdAogCiAgICAgc3RydWN0dXJlSURUb1N0cnVj
dHVyZVdpdGhTY3JhdGNoKHQyLCB0MSwgdDMpCiAKICAgICAjIHJlbG9hZCB0aGUgU3RydWN0dXJl
Q2hhaW4gc2luY2Ugd2UgdXNlZCB0MyBhcyBhIHNjcmF0Y2ggYWJvdmUKLSAgICBsb2FkcCBPcFB1
dEJ5SWQ6Ok1ldGFkYXRhOjpzdHJ1Y3R1cmVDaGFpblt0NV0sIHQzCisgICAgbG9hZHAgT3BQdXRC
eUlkOjpNZXRhZGF0YTo6bV9zdHJ1Y3R1cmVDaGFpblt0NV0sIHQzCiAKICAgICBsb2FkcCBTdHJ1
Y3R1cmVDaGFpbjo6bV92ZWN0b3JbdDNdLCB0MwogICAgIGFzc2VydChtYWNybyAob2spIGJ0cG56
IHQzLCBvayBlbmQpCkBAIC0xMzgxLDI1ICsxMzgwLDI1IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEo
b3BfcHV0X2J5X2lkLCBPcFB1dEIKIAogLm9wUHV0QnlJZFRyYW5zaXRpb25DaGFpbkRvbmU6CiAg
ICAgIyBSZWxvYWQgdGhlIG5ldyBzdHJ1Y3R1cmUsIHNpbmNlIHdlIGNsb2JiZXJlZCBpdCBhYm92
ZS4KLSAgICBsb2FkaSBPcFB1dEJ5SWQ6Ok1ldGFkYXRhOjpuZXdTdHJ1Y3R1cmVbdDVdLCB0MQor
ICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om1fbmV3U3RydWN0dXJlW3Q1XSwgdDEKIAog
Lm9wUHV0QnlJZFRyYW5zaXRpb25EaXJlY3Q6CiAgICAgc3RvcmVpIHQxLCBKU0NlbGw6Om1fc3Ry
dWN0dXJlSURbdDBdCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kV2l0aFJlbG9hZChzaXplLCBn
ZXQsIGJhc2UsIG1hY3JvICgpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kV2l0aFJlbG9hZChz
aXplLCBnZXQsIG1fYmFzZSwgbWFjcm8gKCkKICAgICAgICAgIyBSZWxvYWQgbWV0YWRhdGEgaW50
byB0NQogICAgICAgICBtZXRhZGF0YSh0NSwgdDEpCiAgICAgICAgICMgUmVsb2FkIGJhc2UgaW50
byB0MAotICAgICAgICBnZXQoYmFzZSwgdDEpCisgICAgICAgIGdldChtX2Jhc2UsIHQxKQogICAg
ICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQxLCB0MCkKICAgICBlbmQpCiAKIC5v
cFB1dEJ5SWROb3RUcmFuc2l0aW9uOgogICAgICMgVGhlIG9ubHkgdGhpbmcgbGl2ZSByaWdodCBu
b3cgaXMgdDAsIHdoaWNoIGhvbGRzIHRoZSBiYXNlLgotICAgIGdldCh2YWx1ZSwgdDEpCisgICAg
Z2V0KG1fdmFsdWUsIHQxKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQy
KQotICAgIGxvYWRpIE9wUHV0QnlJZDo6TWV0YWRhdGE6Om9mZnNldFt0NV0sIHQxCisgICAgbG9h
ZGkgT3BQdXRCeUlkOjpNZXRhZGF0YTo6bV9vZmZzZXRbdDVdLCB0MQogICAgIHN0b3JlUHJvcGVy
dHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIpCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5k
cyhzaXplLCBnZXQsIGJhc2UsIHZhbHVlKQorICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6
ZSwgZ2V0LCBtX2Jhc2UsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAub3BQdXRCeUlkU2xv
dzoKQEAgLTE0MTAsNyArMTQwOSw3IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9n
ZXRfYnlfdmFsLCBPcEdldEJ5VmFsLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRh
dGEsIHJldHVybikKICAgICBtYWNybyBmaW5pc2hHZXRCeVZhbChyZXN1bHQsIHNjcmF0Y2gpCi0g
ICAgICAgIGdldChkc3QsIHNjcmF0Y2gpCisgICAgICAgIGdldChtX2RzdCwgc2NyYXRjaCkKICAg
ICAgICAgc3RvcmVxIHJlc3VsdCwgW2Nmciwgc2NyYXRjaCwgOF0KICAgICAgICAgdmFsdWVQcm9m
aWxlKE9wR2V0QnlWYWwsIHQ1LCByZXN1bHQpCiAgICAgICAgIGRpc3BhdGNoKCkKQEAgLTE0Mjks
MTMgKzE0MjgsMTMgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlfdmFsLCBPcEdldAog
CiAgICAgbWV0YWRhdGEodDUsIHQyKQogCi0gICAgZ2V0KGJhc2UsIHQyKQorICAgIGdldChtX2Jh
c2UsIHQyKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGVDZWxsKHNpemUsIHQyLCB0MCwgLm9w
R2V0QnlWYWxTbG93KQogCiAgICAgbW92ZSB0MCwgdDIKLSAgICBhcnJheVByb2ZpbGUoT3BHZXRC
eVZhbDo6TWV0YWRhdGE6OmFycmF5UHJvZmlsZSwgdDIsIHQ1LCB0MSkKKyAgICBhcnJheVByb2Zp
bGUoT3BHZXRCeVZhbDo6TWV0YWRhdGE6Om1fYXJyYXlQcm9maWxlLCB0MiwgdDUsIHQxKQogCi0g
ICAgZ2V0KHByb3BlcnR5LCB0MykKKyAgICBnZXQobV9wcm9wZXJ0eSwgdDMpCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQzLCB0MSwgLm9wR2V0QnlWYWxTbG93KQogICAg
IHN4aTJxIHQxLCB0MQogCkBAIC0xNDQ4LDcgKzE0NDcsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRh
KG9wX2dldF9ieV92YWwsIE9wR2V0CiAKIC5vcEdldEJ5VmFsSXNDb250aWd1b3VzOgogICAgIGJp
YWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Ro
cy5wdWJsaWNMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNsb3cKLSAgICBnZXQoZHN0LCB0MCkKKyAg
ICBnZXQobV9kc3QsIHQwKQogICAgIGxvYWRxIFt0MywgdDEsIDhdLCB0MgogICAgIGJ0cXogdDIs
IC5vcEdldEJ5VmFsU2xvdwogICAgIGptcCAub3BHZXRCeVZhbERvbmUKQEAgLTE0NTYsNyArMTQ1
NSw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2J5X3ZhbCwgT3BHZXQKIC5vcEdldEJ5
VmFsTm90Q29udGlndW91czoKICAgICBiaW5lcSB0MiwgRG91YmxlU2hhcGUsIC5vcEdldEJ5VmFs
Tm90RG91YmxlCiAgICAgYmlhZXEgdDEsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0M10sIC5vcEdldEJ5VmFsU2xvdwotICAg
IGdldChkc3QsIHQwKQorICAgIGdldChtX2RzdCwgdDApCiAgICAgbG9hZGQgW3QzLCB0MSwgOF0s
IGZ0MAogICAgIGJkbmVxdW4gZnQwLCBmdDAsIC5vcEdldEJ5VmFsU2xvdwogICAgIGZkMnEgZnQw
LCB0MgpAQCAtMTQ2Nyw3ICsxNDY2LDcgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfYnlf
dmFsLCBPcEdldAogICAgIHN1YmkgQXJyYXlTdG9yYWdlU2hhcGUsIHQyCiAgICAgYmlhIHQyLCBT
bG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgLSBBcnJheVN0b3JhZ2VTaGFwZSwgLm9wR2V0QnlWYWxO
b3RJbmRleGVkU3RvcmFnZQogICAgIGJpYWVxIHQxLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsg
SW5kZXhpbmdIZWFkZXI6OnUubGVuZ3Rocy52ZWN0b3JMZW5ndGhbdDNdLCAub3BHZXRCeVZhbFNs
b3cKLSAgICBnZXQoZHN0LCB0MCkKKyAgICBnZXQobV9kc3QsIHQwKQogICAgIGxvYWRxIEFycmF5
U3RvcmFnZTo6bV92ZWN0b3JbdDMsIHQxLCA4XSwgdDIKICAgICBidHF6IHQyLCAub3BHZXRCeVZh
bFNsb3cKIApAQCAtMTU4MCwyNCArMTU3OSwyNCBAQCBtYWNybyBwdXRCeVZhbE9wKG5hbWUsIG9w
KQogICAgICAgICBtYWNybyBjb250aWd1b3VzUHV0QnlWYWwoc3RvcmVDYWxsYmFjaykKICAgICAg
ICAgICAgIGJpYWVxIHQzLCAtc2l6ZW9mIEluZGV4aW5nSGVhZGVyICsgSW5kZXhpbmdIZWFkZXI6
OnUubGVuZ3Rocy5wdWJsaWNMZW5ndGhbdDBdLCAub3V0T2ZCb3VuZHMKICAgICAgICAgLnN0b3Jl
UmVzdWx0OgotICAgICAgICAgICAgZ2V0KHZhbHVlLCB0MikKKyAgICAgICAgICAgIGdldChtX3Zh
bHVlLCB0MikKICAgICAgICAgICAgIHN0b3JlQ2FsbGJhY2sodDIsIHQxLCBbdDAsIHQzLCA4XSkK
ICAgICAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgICAgICAub3V0T2ZCb3VuZHM6CiAgICAgICAg
ICAgICBiaWFlcSB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIEluZGV4aW5nSGVhZGVyOjp1
Lmxlbmd0aHMudmVjdG9yTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxPdXRPZkJvdW5kcwotICAgICAg
ICAgICAgc3RvcmViIDEsICVvcCU6Ok1ldGFkYXRhOjphcnJheVByb2ZpbGUubV9tYXlTdG9yZVRv
SG9sZVt0NV0KKyAgICAgICAgICAgIHN0b3JlYiAxLCAlb3AlOjpNZXRhZGF0YTo6bV9hcnJheVBy
b2ZpbGUubV9tYXlTdG9yZVRvSG9sZVt0NV0KICAgICAgICAgICAgIGFkZGkgMSwgdDMsIHQyCiAg
ICAgICAgICAgICBzdG9yZWkgdDIsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGluZ0hl
YWRlcjo6dS5sZW5ndGhzLnB1YmxpY0xlbmd0aFt0MF0KICAgICAgICAgICAgIGptcCAuc3RvcmVS
ZXN1bHQKICAgICAgICAgZW5kCiAKLSAgICAgICAgZ2V0KGJhc2UsIHQwKQorICAgICAgICBnZXQo
bV9iYXNlLCB0MCkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUNlbGwoc2l6ZSwgdDAs
IHQxLCAub3BQdXRCeVZhbFNsb3cpCiAgICAgICAgIG1vdmUgdDEsIHQyCiAgICAgICAgIG1ldGFk
YXRhKHQ1LCB0MCkKLSAgICAgICAgYXJyYXlQcm9maWxlKCVvcCU6Ok1ldGFkYXRhOjphcnJheVBy
b2ZpbGUsIHQyLCB0NSwgdDApCi0gICAgICAgIGdldChwcm9wZXJ0eSwgdDApCisgICAgICAgIGFy
cmF5UHJvZmlsZSglb3AlOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUsIHQyLCB0NSwgdDApCisg
ICAgICAgIGdldChtX3Byb3BlcnR5LCB0MCkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZUludDMyKHNpemUsIHQwLCB0MywgLm9wUHV0QnlWYWxTbG93KQogICAgICAgICBzeGkycSB0Mywg
dDMKICAgICAgICAgbG9hZENhZ2VkKF9nX2dpZ2FjYWdlQmFzZVB0cnMgKyBHaWdhY2FnZTo6QmFz
ZVB0cnM6OmpzVmFsdWUsIGNvbnN0ZXhwciBKU1ZBTFVFX0dJR0FDQUdFX01BU0ssIEpTT2JqZWN0
OjptX2J1dHRlcmZseVt0MV0sIHQwLCB0YWdUeXBlTnVtYmVyKQpAQCAtMTYxMCw3ICsxNjA5LDcg
QEAgbWFjcm8gcHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAgICAgICAgICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIG9wZXJhbmQsIHNjcmF0Y2gpCiAgICAgICAgICAgICAgICAgYnFi
IHNjcmF0Y2gsIHRhZ1R5cGVOdW1iZXIsIC5vcFB1dEJ5VmFsU2xvdwogICAgICAgICAgICAgICAg
IHN0b3JlcSBzY3JhdGNoLCBhZGRyZXNzCi0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyT25P
cGVyYW5kcyhzaXplLCBnZXQsIGJhc2UsIHZhbHVlKQorICAgICAgICAgICAgICAgIHdyaXRlQmFy
cmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX2Jhc2UsIG1fdmFsdWUpCiAgICAgICAgICAgICBl
bmQpCiAKICAgICAub3BQdXRCeVZhbE5vdEludDMyOgpAQCAtMTYyNyw3ICsxNjI2LDcgQEAgbWFj
cm8gcHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAgICAgICAgICAgICBiZG5lcXVuIGZ0MCwgZnQw
LCAub3BQdXRCeVZhbFNsb3cKICAgICAgICAgICAgIC5yZWFkeToKICAgICAgICAgICAgICAgICBz
dG9yZWQgZnQwLCBhZGRyZXNzCi0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5k
cyhzaXplLCBnZXQsIGJhc2UsIHZhbHVlKQorICAgICAgICAgICAgICAgIHdyaXRlQmFycmllck9u
T3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX2Jhc2UsIG1fdmFsdWUpCiAgICAgICAgICAgICBlbmQpCiAK
ICAgICAub3BQdXRCeVZhbE5vdERvdWJsZToKQEAgLTE2MzYsNyArMTYzNSw3IEBAIG1hY3JvIHB1
dEJ5VmFsT3AobmFtZSwgb3ApCiAgICAgICAgICAgICBtYWNybyAob3BlcmFuZCwgc2NyYXRjaCwg
YWRkcmVzcykKICAgICAgICAgICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIG9w
ZXJhbmQsIHNjcmF0Y2gpCiAgICAgICAgICAgICAgICAgc3RvcmVxIHNjcmF0Y2gsIGFkZHJlc3MK
LSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwg
dmFsdWUpCisgICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQs
IG1fYmFzZSwgbV92YWx1ZSkKICAgICAgICAgICAgIGVuZCkKIAogICAgIC5vcFB1dEJ5VmFsTm90
Q29udGlndW91czoKQEAgLTE2NDQsMTQgKzE2NDMsMTQgQEAgbWFjcm8gcHV0QnlWYWxPcChuYW1l
LCBvcCkKICAgICAgICAgYmlhZXEgdDMsIC1zaXplb2YgSW5kZXhpbmdIZWFkZXIgKyBJbmRleGlu
Z0hlYWRlcjo6dS5sZW5ndGhzLnZlY3Rvckxlbmd0aFt0MF0sIC5vcFB1dEJ5VmFsT3V0T2ZCb3Vu
ZHMKICAgICAgICAgYnRxeiBBcnJheVN0b3JhZ2U6Om1fdmVjdG9yW3QwLCB0MywgOF0sIC5vcFB1
dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHkKICAgICAub3BQdXRCeVZhbEFycmF5U3RvcmFnZVN0b3Jl
UmVzdWx0OgotICAgICAgICBnZXQodmFsdWUsIHQyKQorICAgICAgICBnZXQobV92YWx1ZSwgdDIp
CiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQxKQogICAgICAgICBz
dG9yZXEgdDEsIEFycmF5U3RvcmFnZTo6bV92ZWN0b3JbdDAsIHQzLCA4XQotICAgICAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgYmFzZSwgdmFsdWUpCisgICAgICAgIHdyaXRl
QmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX2Jhc2UsIG1fdmFsdWUpCiAgICAgICAgIGRp
c3BhdGNoKCkKIAogICAgIC5vcFB1dEJ5VmFsQXJyYXlTdG9yYWdlRW1wdHk6Ci0gICAgICAgIHN0
b3JlYiAxLCAlb3AlOjpNZXRhZGF0YTo6YXJyYXlQcm9maWxlLm1fbWF5U3RvcmVUb0hvbGVbdDVd
CisgICAgICAgIHN0b3JlYiAxLCAlb3AlOjpNZXRhZGF0YTo6bV9hcnJheVByb2ZpbGUubV9tYXlT
dG9yZVRvSG9sZVt0NV0KICAgICAgICAgYWRkaSAxLCBBcnJheVN0b3JhZ2U6Om1fbnVtVmFsdWVz
SW5WZWN0b3JbdDBdCiAgICAgICAgIGJpYiB0MywgLXNpemVvZiBJbmRleGluZ0hlYWRlciArIElu
ZGV4aW5nSGVhZGVyOjp1Lmxlbmd0aHMucHVibGljTGVuZ3RoW3QwXSwgLm9wUHV0QnlWYWxBcnJh
eVN0b3JhZ2VTdG9yZVJlc3VsdAogICAgICAgICBhZGRpIDEsIHQzLCB0MQpAQCAtMTY1OSw3ICsx
NjU4LDcgQEAgbWFjcm8gcHV0QnlWYWxPcChuYW1lLCBvcCkKICAgICAgICAgam1wIC5vcFB1dEJ5
VmFsQXJyYXlTdG9yYWdlU3RvcmVSZXN1bHQKIAogICAgIC5vcFB1dEJ5VmFsT3V0T2ZCb3VuZHM6
Ci0gICAgICAgIHN0b3JlYiAxLCAlb3AlOjpNZXRhZGF0YTo6YXJyYXlQcm9maWxlLm1fb3V0T2ZC
b3VuZHNbdDVdCisgICAgICAgIHN0b3JlYiAxLCAlb3AlOjpNZXRhZGF0YTo6bV9hcnJheVByb2Zp
bGUubV9vdXRPZkJvdW5kc1t0NV0KICAgICAub3BQdXRCeVZhbFNsb3c6CiAgICAgICAgIGNhbGxT
bG93UGF0aChfbGxpbnRfc2xvd19wYXRoXyVuYW1lJSkKICAgICAgICAgZGlzcGF0Y2goKQpAQCAt
MTY3MywxNCArMTY3MiwxNCBAQCBwdXRCeVZhbE9wKHB1dF9ieV92YWxfZGlyZWN0LCBPcFB1dEJ5
VmFsCiAKIG1hY3JvIGxsaW50SnVtcFRydWVPckZhbHNlT3AobmFtZSwgb3AsIGNvbmRpdGlvbk9w
KQogICAgIGxsaW50T3BXaXRoSnVtcChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBq
dW1wLCBkaXNwYXRjaCkKLSAgICAgICAgZ2V0KGNvbmRpdGlvbiwgdDEpCisgICAgICAgIGdldCht
X2NvbmRpdGlvbiwgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEs
IHQwKQogICAgICAgICBidHFueiB0MCwgfjB4ZiwgLnNsb3cKICAgICAgICAgY29uZGl0aW9uT3Ao
dDAsIC50YXJnZXQpCiAgICAgICAgIGRpc3BhdGNoKCkKIAogICAgIC50YXJnZXQ6Ci0gICAgICAg
IGp1bXAodGFyZ2V0KQorICAgICAgICBqdW1wKG1fdGFyZ2V0KQogCiAgICAgLnNsb3c6CiAgICAg
ICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoXyVuYW1lJSkKQEAgLTE2OTEsNyArMTY5
MCw3IEBAIGVuZAogCiBtYWNybyBlcXVhbE51bGxKdW1wT3AobmFtZSwgb3AsIGNlbGxIYW5kbGVy
LCBpbW1lZGlhdGVIYW5kbGVyKQogICAgIGxsaW50T3BXaXRoSnVtcChvcF8lbmFtZSUsIG9wLCBt
YWNybyAoc2l6ZSwgZ2V0LCBqdW1wLCBkaXNwYXRjaCkKLSAgICAgICAgZ2V0KHZhbHVlLCB0MCkK
KyAgICAgICAgZ2V0KG1fdmFsdWUsIHQwKQogICAgICAgICBhc3NlcnROb3RDb25zdGFudChzaXpl
LCB0MCkKICAgICAgICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MAogICAgICAgICBidHFueiB0MCwg
dGFnTWFzaywgLmltbWVkaWF0ZQpAQCAtMTcwMCw3ICsxNjk5LDcgQEAgbWFjcm8gZXF1YWxOdWxs
SnVtcE9wKG5hbWUsIG9wLCBjZWxsSGFuZAogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAudGFy
Z2V0OgotICAgICAgICBqdW1wKHRhcmdldCkKKyAgICAgICAganVtcChtX3RhcmdldCkKIAogICAg
IC5pbW1lZGlhdGU6CiAgICAgICAgIGFuZHEgflRhZ0JpdFVuZGVmaW5lZCwgdDAKQEAgLTE3MzEs
OCArMTczMCw4IEBAIGVxdWFsTnVsbEp1bXBPcChqbmVxX251bGwsIE9wSm5lcU51bGwsCiAKIAog
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9qbmVxX3B0ciwgT3BKbmVxUHRyLCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKLSAgICBnZXQodmFsdWUsIHQwKQotICAg
IGdldChzcGVjaWFsUG9pbnRlciwgdDEpCisgICAgZ2V0KG1fdmFsdWUsIHQwKQorICAgIGdldCht
X3NwZWNpYWxQb2ludGVyLCB0MSkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDIKICAgICBs
b2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QyXSwgdDIKICAgICBsb2FkcCBKU0dsb2Jh
bE9iamVjdDo6bV9zcGVjaWFsUG9pbnRlcnNbdDIsIHQxLCBQdHJTaXplXSwgdDEKQEAgLTE3NDEs
MTYgKzE3NDAsMTYgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9qbmVxX3B0ciwgT3BKbmVxUAog
CiAub3BKbmVxUHRyVGFyZ2V0OgogICAgIG1ldGFkYXRhKHQ1LCB0MCkKLSAgICBzdG9yZWIgMSwg
T3BKbmVxUHRyOjpNZXRhZGF0YTo6aGFzSnVtcGVkW3Q1XQotICAgIGdldCh0YXJnZXQsIHQwKQor
ICAgIHN0b3JlYiAxLCBPcEpuZXFQdHI6Ok1ldGFkYXRhOjptX2hhc0p1bXBlZFt0NV0KKyAgICBn
ZXQobV90YXJnZXQsIHQwKQogICAgIGp1bXBJbXBsKHQwKQogZW5kKQogCiAKIG1hY3JvIGNvbXBh
cmVKdW1wT3AobmFtZSwgb3AsIGludGVnZXJDb21wYXJlLCBkb3VibGVDb21wYXJlKQogICAgIGxs
aW50T3BXaXRoSnVtcChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1wLCBkaXNw
YXRjaCkKLSAgICAgICAgZ2V0KGxocywgdDIpCi0gICAgICAgIGdldChyaHMsIHQzKQorICAgICAg
ICBnZXQobV9saHMsIHQyKQorICAgICAgICBnZXQobV9yaHMsIHQzKQogICAgICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MCkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MywgdDEpCiAgICAgICAgIGJxYiB0MCwgdGFnVHlwZU51bWJlciwgLm9wMU5v
dEludApAQCAtMTc4Miw3ICsxNzgxLDcgQEAgbWFjcm8gY29tcGFyZUp1bXBPcChuYW1lLCBvcCwg
aW50ZWdlckNvbQogICAgICAgICBkaXNwYXRjaCgpCiAKICAgICAuanVtcFRhcmdldDoKLSAgICAg
ICAganVtcCh0YXJnZXQpCisgICAgICAgIGp1bXAobV90YXJnZXQpCiAKICAgICAuc2xvdzoKICAg
ICAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfJW5hbWUlKQpAQCAtMTc5MywxNSAr
MTc5MiwxNSBAQCBlbmQKIAogbWFjcm8gZXF1YWxpdHlKdW1wT3AobmFtZSwgb3AsIGludGVnZXJD
b21wYXJpc29uKQogICAgIGxsaW50T3BXaXRoSnVtcChvcF8lbmFtZSUsIG9wLCBtYWNybyAoc2l6
ZSwgZ2V0LCBqdW1wLCBkaXNwYXRjaCkKLSAgICAgICAgZ2V0KGxocywgdDIpCi0gICAgICAgIGdl
dChyaHMsIHQzKQorICAgICAgICBnZXQobV9saHMsIHQyKQorICAgICAgICBnZXQobV9yaHMsIHQz
KQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlSW50MzIoc2l6ZSwgdDIsIHQwLCAuc2xv
dykKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZUludDMyKHNpemUsIHQzLCB0MSwgLnNs
b3cpCiAgICAgICAgIGludGVnZXJDb21wYXJpc29uKHQwLCB0MSwgLmp1bXBUYXJnZXQpCiAgICAg
ICAgIGRpc3BhdGNoKCkKIAogICAgIC5qdW1wVGFyZ2V0OgotICAgICAgICBqdW1wKHRhcmdldCkK
KyAgICAgICAganVtcChtX3RhcmdldCkKIAogICAgIC5zbG93OgogICAgICAgICBjYWxsU2xvd1Bh
dGgoX2xsaW50X3Nsb3dfcGF0aF8lbmFtZSUpCkBAIC0xODEwLDI1ICsxODA5LDI1IEBAIG1hY3Jv
IGVxdWFsaXR5SnVtcE9wKG5hbWUsIG9wLCBpbnRlZ2VyQ28KIGVuZAogCiAKLW1hY3JvIGNvbXBh
cmVVbnNpZ25lZEp1bXBPcChuYW1lLCBvcCwgaW50ZWdlckNvbXBhcmUpCittYWNybyBjb21wYXJl
VW5zaWduZWRKdW1wT3AobmFtZSwgb3AsIGludGVnZXJDb21wYXJlTWFjcm8pCiAgICAgbGxpbnRP
cFdpdGhKdW1wKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNo
KQotICAgICAgICBnZXQobGhzLCB0MikKLSAgICAgICAgZ2V0KHJocywgdDMpCisgICAgICAgIGdl
dChtX2xocywgdDIpCisgICAgICAgIGdldChtX3JocywgdDMpCiAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQwKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxl
KHNpemUsIHQzLCB0MSkKLSAgICAgICAgaW50ZWdlckNvbXBhcmUodDAsIHQxLCAuanVtcFRhcmdl
dCkKKyAgICAgICAgaW50ZWdlckNvbXBhcmVNYWNybyh0MCwgdDEsIC5qdW1wVGFyZ2V0KQogICAg
ICAgICBkaXNwYXRjaCgpCiAKICAgICAuanVtcFRhcmdldDoKLSAgICAgICAganVtcCh0YXJnZXQp
CisgICAgICAgIGp1bXAobV90YXJnZXQpCiAgICAgZW5kKQogZW5kCiAKIAogbWFjcm8gY29tcGFy
ZVVuc2lnbmVkT3AobmFtZSwgb3AsIGludGVnZXJDb21wYXJlQW5kU2V0KQogICAgIGxsaW50T3BX
aXRoUmV0dXJuKG9wXyVuYW1lJSwgb3AsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1
cm4pCi0gICAgICAgIGdldChsaHMsIHQyKQotICAgICAgICBnZXQocmhzLCAgdDApCisgICAgICAg
IGdldChtX2xocywgdDIpCisgICAgICAgIGdldChtX3JocywgIHQwKQogICAgICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKICAgICAgICAgbG9hZENvbnN0YW50T3JWYXJp
YWJsZShzaXplLCB0MiwgdDApCiAgICAgICAgIGludGVnZXJDb21wYXJlQW5kU2V0KHQwLCB0MSwg
dDApCkBAIC0xODM5LDggKzE4MzgsOCBAQCBlbmQKIAogCiBsbGludE9wV2l0aEp1bXAob3Bfc3dp
dGNoX2ltbSwgT3BTd2l0Y2hJbW0sIG1hY3JvIChzaXplLCBnZXQsIGp1bXAsIGRpc3BhdGNoKQot
ICAgIGdldChzY3J1dGluZWUsIHQyKQotICAgIGdldCh0YWJsZUluZGV4LCB0MykKKyAgICBnZXQo
bV9zY3J1dGluZWUsIHQyKQorICAgIGdldChtX3RhYmxlSW5kZXgsIHQzKQogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUoc2l6ZSwgdDIsIHQxKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0
MgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9yYXJlRGF0YVt0Ml0sIHQyCkBAIC0xODU4LDcgKzE4
NTcsNyBAQCBsbGludE9wV2l0aEp1bXAob3Bfc3dpdGNoX2ltbSwgT3BTd2l0Y2hJCiAub3BTd2l0
Y2hJbW1Ob3RJbnQ6CiAgICAgYnRxbnogdDEsIHRhZ1R5cGVOdW1iZXIsIC5vcFN3aXRjaEltbVNs
b3cgICAjIEdvIHNsb3cgaWYgaXQncyBhIGRvdWJsZS4KIC5vcFN3aXRjaEltbUZhbGxUaHJvdWdo
OgotICAgIGp1bXAoZGVmYXVsdE9mZnNldCkKKyAgICBqdW1wKG1fZGVmYXVsdE9mZnNldCkKIAog
Lm9wU3dpdGNoSW1tU2xvdzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9zd2l0
Y2hfaW1tKQpAQCAtMTg2Nyw4ICsxODY2LDggQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoSnVtcChv
cF9zd2l0Y2hfY2hhciwgT3BTd2l0Y2hDaGFyLCBtYWNybyAoc2l6ZSwgZ2V0LCBqdW1wLCBkaXNw
YXRjaCkKLSAgICBnZXQoc2NydXRpbmVlLCB0MikKLSAgICBnZXQodGFibGVJbmRleCwgdDMpCisg
ICAgZ2V0KG1fc2NydXRpbmVlLCB0MikKKyAgICBnZXQobV90YWJsZUluZGV4LCB0MykKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQyLCB0MSkKICAgICBsb2FkcCBDb2RlQmxvY2tb
Y2ZyXSwgdDIKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fcmFyZURhdGFbdDJdLCB0MgpAQCAtMTg5
NSw3ICsxODk0LDcgQEAgbGxpbnRPcFdpdGhKdW1wKG9wX3N3aXRjaF9jaGFyLCBPcFN3aXRjaAog
ICAgIGRpc3BhdGNoSW5kaXJlY3QodDEpCiAKIC5vcFN3aXRjaENoYXJGYWxsVGhyb3VnaDoKLSAg
ICBqdW1wKGRlZmF1bHRPZmZzZXQpCisgICAganVtcChtX2RlZmF1bHRPZmZzZXQpCiAKIC5vcFN3
aXRjaE9uUm9wZToKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9zd2l0Y2hfY2hh
cikKQEAgLTE5MDUsMTIgKzE5MDQsMTIgQEAgZW5kKQogCiAjIHdlIGFzc3VtZSB0NSBjb250YWlu
cyB0aGUgbWV0YWRhdGEsIGFuZCB3ZSBzaG91bGQgbm90IHNjcmF0Y2ggdGhhdAogbWFjcm8gYXJy
YXlQcm9maWxlRm9yQ2FsbChvcCwgZ2V0dSkKLSAgICBnZXR1KGFyZ3YsIHQzKQorICAgIGdldHUo
bV9hcmd2LCB0MykKICAgICBuZWdwIHQzCiAgICAgbG9hZHEgVGhpc0FyZ3VtZW50T2Zmc2V0W2Nm
ciwgdDMsIDhdLCB0MAogICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAuZG9uZQogICAgIGxvYWRpIEpT
Q2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MF0sIHQzCi0gICAgc3RvcmVpIHQzLCAlb3AlOjpNZXRhZGF0
YTo6YXJyYXlQcm9maWxlLm1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFt0NV0KKyAgICBzdG9yZWkgdDMs
ICVvcCU6Ok1ldGFkYXRhOjptX2FycmF5UHJvZmlsZS5tX2xhc3RTZWVuU3RydWN0dXJlSURbdDVd
CiAuZG9uZToKIGVuZAogCkBAIC0xOTE4LDMxICsxOTE3LDMxIEBAIG1hY3JvIGNvbW1vbkNhbGxP
cChuYW1lLCBzbG93UGF0aCwgb3AsIHAKICAgICBsbGludE9wV2l0aE1ldGFkYXRhKG5hbWUsIG9w
LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0YWRhdGEsIHJldHVybikKICAgICAgICAg
bWV0YWRhdGEodDUsIHQwKQogCi0gICAgICAgIHByb2xvZ3VlKG1hY3JvIChmaWVsZCwgZHN0KQot
ICAgICAgICAgICAgZ2V0dShzaXplLCBvcCwgZmllbGQsIGRzdCkKKyAgICAgICAgcHJvbG9ndWUo
bWFjcm8gKGZpZWxkTmFtZSwgZHN0KQorICAgICAgICAgICAgZ2V0dShzaXplLCBvcCwgZmllbGRO
YW1lLCBkc3QpCiAgICAgICAgIGVuZCwgbWV0YWRhdGEpCiAKLSAgICAgICAgZ2V0KGNhbGxlZSwg
dDApCi0gICAgICAgIGxvYWRwICVvcCU6Ok1ldGFkYXRhOjpjYWxsTGlua0luZm8uY2FsbGVlW3Q1
XSwgdDIKKyAgICAgICAgZ2V0KG1fY2FsbGVlLCB0MCkKKyAgICAgICAgbG9hZHAgJW9wJTo6TWV0
YWRhdGE6Om1fY2FsbExpbmtJbmZvLmNhbGxlZVt0NV0sIHQyCiAgICAgICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQzKQogICAgICAgICBicW5lcSB0MywgdDIsIC5vcENhbGxT
bG93Ci0gICAgICAgIGdldHUoc2l6ZSwgb3AsIGFyZ3YsIHQzKQorICAgICAgICBnZXR1KHNpemUs
IG9wLCBtX2FyZ3YsIHQzKQogICAgICAgICBsc2hpZnRpIDMsIHQzCiAgICAgICAgIG5lZ3AgdDMK
ICAgICAgICAgYWRkcCBjZnIsIHQzCiAgICAgICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQotICAg
ICAgICBnZXR1KHNpemUsIG9wLCBhcmdjLCB0MikKKyAgICAgICAgZ2V0dShzaXplLCBvcCwgbV9h
cmdjLCB0MikKICAgICAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nm
cl0KICAgICAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10K
ICAgICAgICAgbW92ZSB0Mywgc3AKICAgICAgICAgaWYgUE9JU09OCiAgICAgICAgICAgICBsb2Fk
cCBfZ19KSVRDb2RlUG9pc29uLCB0MgotICAgICAgICAgICAgeG9ycCAlb3AlOjpNZXRhZGF0YTo6
Y2FsbExpbmtJbmZvLm1hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIKKyAgICAgICAgICAgIHhvcnAg
JW9wJTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIK
ICAgICAgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MSwgdDMsIHQ0LCBKU0VudHJ5UHRyVGFnKQog
ICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKHNpemUsIG9wLCBkaXNwYXRjaCwgdDIsIEpT
RW50cnlQdHJUYWcpCiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByZXBhcmVDYWxsKCVvcCU6
Ok1ldGFkYXRhOjpjYWxsTGlua0luZm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0
LCBKU0VudHJ5UHRyVGFnKQotICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKHNpemUsIG9w
LCBkaXNwYXRjaCwgJW9wJTo6TWV0YWRhdGE6OmNhbGxMaW5rSW5mby5tYWNoaW5lQ29kZVRhcmdl
dFt0NV0sIEpTRW50cnlQdHJUYWcpCisgICAgICAgICAgICBwcmVwYXJlQ2FsbCglb3AlOjpNZXRh
ZGF0YTo6bV9jYWxsTGlua0luZm8ubWFjaGluZUNvZGVUYXJnZXRbdDVdLCB0MiwgdDMsIHQ0LCBK
U0VudHJ5UHRyVGFnKQorICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKHNpemUsIG9wLCBk
aXNwYXRjaCwgJW9wJTo6TWV0YWRhdGE6Om1fY2FsbExpbmtJbmZvLm1hY2hpbmVDb2RlVGFyZ2V0
W3Q1XSwgSlNFbnRyeVB0clRhZykKICAgICAgICAgZW5kCiAKICAgICAub3BDYWxsU2xvdzoKQEAg
LTE5NTIsMTQgKzE5NTEsMTQgQEAgZW5kCiAKIGxsaW50T3Aob3BfcmV0LCBPcFJldCwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZvckVwaWxvZ3VlKCkK
LSAgICBnZXQodmFsdWUsIHQyKQorICAgIGdldChtX3ZhbHVlLCB0MikKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQyLCByMCkKICAgICBkb1JldHVybigpCiBlbmQpCiAKIAogbGxp
bnRPcFdpdGhSZXR1cm4ob3BfdG9fcHJpbWl0aXZlLCBPcFRvUHJpbWl0aXZlLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGdldChzcmMsIHQyKQorICAgIGdldChtX3Ny
YywgdDIpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MiwgdDApCiAgICAgYnRx
bnogdDAsIHRhZ01hc2ssIC5vcFRvUHJpbWl0aXZlSXNJbW0KICAgICBiYmFlcSBKU0NlbGw6Om1f
dHlwZVt0MF0sIE9iamVjdFR5cGUsIC5vcFRvUHJpbWl0aXZlU2xvd0Nhc2UKQEAgLTIwMDQsMTEg
KzIwMDMsMTEgQEAgY29tbW9uT3AobGxpbnRfb3BfY2F0Y2gsIG1hY3JvKCkgZW5kLCBtYQogCiAg
ICAgbG9hZHAgVk06Om1fZXhjZXB0aW9uW3QzXSwgdDAKICAgICBzdG9yZXAgMCwgVk06Om1fZXhj
ZXB0aW9uW3QzXQotICAgIGdldChzaXplLCBPcENhdGNoLCBleGNlcHRpb24sIHQyKQorICAgIGdl
dChzaXplLCBPcENhdGNoLCBtX2V4Y2VwdGlvbiwgdDIpCiAgICAgc3RvcmVxIHQwLCBbY2ZyLCB0
MiwgOF0KIAogICAgIGxvYWRxIEV4Y2VwdGlvbjo6bV92YWx1ZVt0MF0sIHQzCi0gICAgZ2V0KHNp
emUsIE9wQ2F0Y2gsIHRocm93blZhbHVlLCB0MikKKyAgICBnZXQoc2l6ZSwgT3BDYXRjaCwgbV90
aHJvd25WYWx1ZSwgdDIpCiAgICAgc3RvcmVxIHQzLCBbY2ZyLCB0MiwgOF0KIAogICAgIHRyYWNl
RXhlY3V0aW9uKCkKQEAgLTIwMjEsNyArMjAyMCw3IEBAIGVuZCkKIAogbGxpbnRPcChvcF9lbmQs
IE9wRW5kLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCkKICAgICBjaGVja1N3aXRjaFRvSklU
Rm9yRXBpbG9ndWUoKQotICAgIGdldCh2YWx1ZSwgdDApCisgICAgZ2V0KG1fdmFsdWUsIHQwKQog
ICAgIGFzc2VydE5vdENvbnN0YW50KHNpemUsIHQwKQogICAgIGxvYWRxIFtjZnIsIHQwLCA4XSwg
cjAKICAgICBkb1JldHVybigpCkBAIC0yMTUyLDEzICsyMTUxLDEzIEBAIGxsaW50T3BXaXRoTWV0
YWRhdGEob3BfcmVzb2x2ZV9zY29wZSwgT3AKICAgICBtZXRhZGF0YSh0NSwgdDApCiAKICAgICBt
YWNybyBnZXRDb25zdGFudFNjb3BlKCkKLSAgICAgICAgbG9hZHAgT3BSZXNvbHZlU2NvcGU6Ok1l
dGFkYXRhOjpjb25zdGFudFNjb3BlW3Q1XSwgIHQwCisgICAgICAgIGxvYWRwIE9wUmVzb2x2ZVNj
b3BlOjpNZXRhZGF0YTo6bV9jb25zdGFudFNjb3BlW3Q1XSwgIHQwCiAgICAgICAgIHJldHVybih0
MCkKICAgICBlbmQKIAogICAgIG1hY3JvIHJlc29sdmVTY29wZSgpCi0gICAgICAgIGxvYWRpIE9w
UmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6bG9jYWxTY29wZURlcHRoW3Q1XSwgdDIKLSAgICAgICAg
Z2V0KHNjb3BlLCB0MCkKKyAgICAgICAgbG9hZGkgT3BSZXNvbHZlU2NvcGU6Ok1ldGFkYXRhOjpt
X2xvY2FsU2NvcGVEZXB0aFt0NV0sIHQyCisgICAgICAgIGdldChtX3Njb3BlLCB0MCkKICAgICAg
ICAgbG9hZHEgW2NmciwgdDAsIDhdLCB0MAogICAgICAgICBidGl6IHQyLCAucmVzb2x2ZVNjb3Bl
TG9vcEVuZAogCkBAIC0yMTcxLDcgKzIxNzAsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3Jl
c29sdmVfc2NvcGUsIE9wCiAgICAgICAgIHJldHVybih0MCkKICAgICBlbmQKIAotICAgIGxvYWRw
IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6cmVzb2x2ZVR5cGVbdDVdLCB0MAorICAgIGxvYWRw
IE9wUmVzb2x2ZVNjb3BlOjpNZXRhZGF0YTo6bV9yZXNvbHZlVHlwZVt0NV0sIHQwCiAKICNyR2xv
YmFsUHJvcGVydHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuckdsb2JhbFZhcgpA
QCAtMjIyMCwxMCArMjIxOSwxMCBAQCBlbmQpCiAKIAogbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhvcCwgZ2V0LCBzbG93UGF0aCkKLSAgICBnZXQoc2NvcGUsIHQwKQorICAgIGdldChtX3Nj
b3BlLCB0MCkKICAgICBsb2FkcSBbY2ZyLCB0MCwgOF0sIHQwCiAgICAgbG9hZFN0cnVjdHVyZVdp
dGhTY3JhdGNoKHQwLCB0MiwgdDEsIHQzKQotICAgIGxvYWRwICVvcCU6Ok1ldGFkYXRhOjpzdHJ1
Y3R1cmVbdDVdLCB0MQorICAgIGxvYWRwICVvcCU6Ok1ldGFkYXRhOjptX3N0cnVjdHVyZVt0NV0s
IHQxCiAgICAgYnBuZXEgdDIsIHQxLCBzbG93UGF0aAogZW5kCiAKQEAgLTIyMzEsMTQgKzIyMzAs
MTQgQEAgbGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogICAgIG1ldGFk
YXRhKHQ1LCB0MCkKIAogICAgIG1hY3JvIGdldFByb3BlcnR5KCkKLSAgICAgICAgbG9hZHAgT3BH
ZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDEKKyAgICAgICAgbG9hZHAgT3BH
ZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQogICAgICAgICBsb2FkUHJv
cGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIpCiAgICAgICAgIHZhbHVlUHJvZmlsZShP
cEdldEZyb21TY29wZSwgdDUsIHQyKQogICAgICAgICByZXR1cm4odDIpCiAgICAgZW5kCiAKICAg
ICBtYWNybyBnZXRHbG9iYWxWYXIodGR6Q2hlY2tJZk5lY2Vzc2FyeSkKLSAgICAgICAgbG9hZHAg
T3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDAKKyAgICAgICAgbG9hZHAg
T3BHZXRGcm9tU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MAogICAgICAgICBsb2Fk
cSBbdDBdLCB0MAogICAgICAgICB0ZHpDaGVja0lmTmVjZXNzYXJ5KHQwKQogICAgICAgICB2YWx1
ZVByb2ZpbGUoT3BHZXRGcm9tU2NvcGUsIHQ1LCB0MCkKQEAgLTIyNDYsMTMgKzIyNDUsMTMgQEAg
bGxpbnRPcFdpdGhNZXRhZGF0YShvcF9nZXRfZnJvbV9zY29wZSwgTwogICAgIGVuZAogCiAgICAg
bWFjcm8gZ2V0Q2xvc3VyZVZhcigpCi0gICAgICAgIGxvYWRwIE9wR2V0RnJvbVNjb3BlOjpNZXRh
ZGF0YTo6b3BlcmFuZFt0NV0sIHQxCisgICAgICAgIGxvYWRwIE9wR2V0RnJvbVNjb3BlOjpNZXRh
ZGF0YTo6bV9vcGVyYW5kW3Q1XSwgdDEKICAgICAgICAgbG9hZHEgSlNMZXhpY2FsRW52aXJvbm1l
bnRfdmFyaWFibGVzW3QwLCB0MSwgOF0sIHQwCiAgICAgICAgIHZhbHVlUHJvZmlsZShPcEdldEZy
b21TY29wZSwgdDUsIHQwKQogICAgICAgICByZXR1cm4odDApCiAgICAgZW5kCiAKLSAgICBsb2Fk
aSBPcEdldEZyb21TY29wZTo6TWV0YWRhdGE6OmdldFB1dEluZm9bdDVdLCB0MAorICAgIGxvYWRp
IE9wR2V0RnJvbVNjb3BlOjpNZXRhZGF0YTo6bV9nZXRQdXRJbmZvW3Q1XSwgdDAKICAgICBhbmRp
IFJlc29sdmVUeXBlTWFzaywgdDAKIAogI2dHbG9iYWxQcm9wZXJ0eToKQEAgLTIyNzMsNyArMjI3
Miw3IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfZ2V0X2Zyb21fc2NvcGUsIE8KIAogLmdDbG9z
dXJlVmFyOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAuZ0dsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcwotICAgIGxvYWRWYXJpYWJsZShnZXQsIHNjb3BlLCB0MCkKKyAgICBs
b2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MCkKICAgICBnZXRDbG9zdXJlVmFyKCkKIAogLmdH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CkBAIC0yMjk3LDcgKzIyOTYsNyBA
QCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX2dldF9mcm9tX3Njb3BlLCBPCiAuZ0Nsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcywgLmdEeW5hbWljCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLmdEeW5hbWlj
LCB0MikKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwgdDApCisgICAgbG9hZFZhcmlhYmxl
KGdldCwgbV9zY29wZSwgdDApCiAgICAgZ2V0Q2xvc3VyZVZhcigpCiAKIC5nRHluYW1pYzoKQEAg
LTIzMDgsMTAwICsyMzA3LDEwMCBAQCBlbmQpCiAKIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0
X3RvX3Njb3BlLCBPcFB1dFRvU2NvcGUsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRh
ZGF0YSwgcmV0dXJuKQogICAgIG1hY3JvIHB1dFByb3BlcnR5KCkKLSAgICAgICAgZ2V0KHZhbHVl
LCB0MSkKKyAgICAgICAgZ2V0KG1fdmFsdWUsIHQxKQogICAgICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHNpemUsIHQxLCB0MikKLSAgICAgICAgbG9hZGlzIE9wUHV0VG9TY29wZTo6TWV0YWRh
dGE6Om9wZXJhbmRbdDVdLCB0MQorICAgICAgICBsb2FkaXMgT3BQdXRUb1Njb3BlOjpNZXRhZGF0
YTo6bV9vcGVyYW5kW3Q1XSwgdDEKICAgICAgICAgc3RvcmVQcm9wZXJ0eUF0VmFyaWFibGVPZmZz
ZXQodDEsIHQwLCB0MikKICAgICBlbmQKIAogICAgIG1hY3JvIHB1dEdsb2JhbFZhcmlhYmxlKCkK
LSAgICAgICAgZ2V0KHZhbHVlLCB0MCkKKyAgICAgICAgZ2V0KG1fdmFsdWUsIHQwKQogICAgICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKLSAgICAgICAgbG9hZHAgT3BQ
dXRUb1Njb3BlOjpNZXRhZGF0YTo6d2F0Y2hwb2ludFNldFt0NV0sIHQyCi0gICAgICAgIGxvYWRw
IE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6Om9wZXJhbmRbdDVdLCB0MAorICAgICAgICBsb2FkcCBP
cFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX3dhdGNocG9pbnRTZXRbdDVdLCB0MgorICAgICAgICBs
b2FkcCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MAogICAgICAgICBu
b3RpZnlXcml0ZSh0MiwgLnBEeW5hbWljKQogICAgICAgICBzdG9yZXEgdDEsIFt0MF0KICAgICBl
bmQKIAogICAgIG1hY3JvIHB1dENsb3N1cmVWYXIoKQotICAgICAgICBnZXQodmFsdWUsIHQxKQor
ICAgICAgICBnZXQobV92YWx1ZSwgdDEpCiAgICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUo
c2l6ZSwgdDEsIHQyKQotICAgICAgICBsb2FkaXMgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b3Bl
cmFuZFt0NV0sIHQxCisgICAgICAgIGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29w
ZXJhbmRbdDVdLCB0MQogICAgICAgICBzdG9yZXEgdDIsIEpTTGV4aWNhbEVudmlyb25tZW50X3Zh
cmlhYmxlc1t0MCwgdDEsIDhdCiAgICAgZW5kCiAKICAgICBtYWNybyBwdXRMb2NhbENsb3N1cmVW
YXIoKQotICAgICAgICBnZXQodmFsdWUsIHQxKQorICAgICAgICBnZXQobV92YWx1ZSwgdDEpCiAg
ICAgICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDEsIHQyKQotICAgICAgICBsb2Fk
cCBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjp3YXRjaHBvaW50U2V0W3Q1XSwgdDMKKyAgICAgICAg
bG9hZHAgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6bV93YXRjaHBvaW50U2V0W3Q1XSwgdDMKICAg
ICAgICAgYnRweiB0MywgLm5vVmFyaWFibGVXYXRjaHBvaW50U2V0CiAgICAgICAgIG5vdGlmeVdy
aXRlKHQzLCAucER5bmFtaWMpCiAgICAgLm5vVmFyaWFibGVXYXRjaHBvaW50U2V0OgotICAgICAg
ICBsb2FkaXMgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6b3BlcmFuZFt0NV0sIHQxCisgICAgICAg
IGxvYWRpcyBPcFB1dFRvU2NvcGU6Ok1ldGFkYXRhOjptX29wZXJhbmRbdDVdLCB0MQogICAgICAg
ICBzdG9yZXEgdDIsIEpTTGV4aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlc1t0MCwgdDEsIDhdCiAg
ICAgZW5kCiAKICAgICBtYWNybyBjaGVja1REWkluR2xvYmFsUHV0VG9TY29wZUlmTmVjZXNzYXJ5
KCkKLSAgICAgICAgbG9hZGlzIE9wUHV0VG9TY29wZTo6TWV0YWRhdGE6OmdldFB1dEluZm9bdDVd
LCB0MAorICAgICAgICBsb2FkaXMgT3BQdXRUb1Njb3BlOjpNZXRhZGF0YTo6bV9nZXRQdXRJbmZv
W3Q1XSwgdDAKICAgICAgICAgYW5kaSBJbml0aWFsaXphdGlvbk1vZGVNYXNrLCB0MAogICAgICAg
ICByc2hpZnRpIEluaXRpYWxpemF0aW9uTW9kZVNoaWZ0LCB0MAogICAgICAgICBiaW5lcSB0MCwg
Tm90SW5pdGlhbGl6YXRpb24sIC5ub05lZWRGb3JURFpDaGVjawotICAgICAgICBsb2FkcCBPcFB1
dFRvU2NvcGU6Ok1ldGFkYXRhOjpvcGVyYW5kW3Q1XSwgdDAKKyAgICAgICAgbG9hZHAgT3BQdXRU
b1Njb3BlOjpNZXRhZGF0YTo6bV9vcGVyYW5kW3Q1XSwgdDAKICAgICAgICAgbG9hZHEgW3QwXSwg
dDAKICAgICAgICAgYnFlcSB0MCwgVmFsdWVFbXB0eSwgLnBEeW5hbWljCiAgICAgLm5vTmVlZEZv
clREWkNoZWNrOgogICAgIGVuZAogCiAgICAgbWV0YWRhdGEodDUsIHQwKQotICAgIGxvYWRpIE9w
UHV0VG9TY29wZTo6TWV0YWRhdGE6OmdldFB1dEluZm9bdDVdLCB0MAorICAgIGxvYWRpIE9wUHV0
VG9TY29wZTo6TWV0YWRhdGE6Om1fZ2V0UHV0SW5mb1t0NV0sIHQwCiAgICAgYW5kaSBSZXNvbHZl
VHlwZU1hc2ssIHQwCiAKICNwTG9jYWxDbG9zdXJlVmFyOgogICAgIGJpbmVxIHQwLCBMb2NhbENs
b3N1cmVWYXIsIC5wR2xvYmFsUHJvcGVydHkKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBzY29wZSwg
dDApCisgICAgbG9hZFZhcmlhYmxlKGdldCwgbV9zY29wZSwgdDApCiAgICAgcHV0TG9jYWxDbG9z
dXJlVmFyKCkKLSAgICB3cml0ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgc2NvcGUsIHZh
bHVlKQorICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX3Njb3BlLCBtX3Zh
bHVlKQogICAgIGRpc3BhdGNoKCkKIAogLnBHbG9iYWxQcm9wZXJ0eToKICAgICBiaW5lcSB0MCwg
R2xvYmFsUHJvcGVydHksIC5wR2xvYmFsVmFyCiAgICAgbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhP
cFB1dFRvU2NvcGUsIGdldCwgLnBEeW5hbWljKQogICAgIHB1dFByb3BlcnR5KCkKLSAgICB3cml0
ZUJhcnJpZXJPbk9wZXJhbmRzKHNpemUsIGdldCwgc2NvcGUsIHZhbHVlKQorICAgIHdyaXRlQmFy
cmllck9uT3BlcmFuZHMoc2l6ZSwgZ2V0LCBtX3Njb3BlLCBtX3ZhbHVlKQogICAgIGRpc3BhdGNo
KCkKIAogLnBHbG9iYWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhciwgLnBHbG9iYWxMZXhp
Y2FsVmFyCiAgICAgcHV0R2xvYmFsVmFyaWFibGUoKQotICAgIHdyaXRlQmFycmllck9uR2xvYmFs
T2JqZWN0KHNpemUsIGdldCwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25HbG9iYWxPYmplY3Qo
c2l6ZSwgZ2V0LCBtX3ZhbHVlKQogICAgIGRpc3BhdGNoKCkKIAogLnBHbG9iYWxMZXhpY2FsVmFy
OgogICAgIGJpbmVxIHQwLCBHbG9iYWxMZXhpY2FsVmFyLCAucENsb3N1cmVWYXIKICAgICBjaGVj
a1REWkluR2xvYmFsUHV0VG9TY29wZUlmTmVjZXNzYXJ5KCkKICAgICBwdXRHbG9iYWxWYXJpYWJs
ZSgpCi0gICAgd3JpdGVCYXJyaWVyT25HbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoc2l6ZSwgZ2V0
LCB2YWx1ZSkKKyAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9ubWVudChzaXpl
LCBnZXQsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucENsb3N1cmVWYXI6CiAgICAgYmlu
ZXEgdDAsIENsb3N1cmVWYXIsIC5wR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
Ci0gICAgbG9hZFZhcmlhYmxlKGdldCwgc2NvcGUsIHQwKQorICAgIGxvYWRWYXJpYWJsZShnZXQs
IG1fc2NvcGUsIHQwKQogICAgIHB1dENsb3N1cmVWYXIoKQotICAgIHdyaXRlQmFycmllck9uT3Bl
cmFuZHMoc2l6ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5k
cyhzaXplLCBnZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MKICAgICBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKE9wUHV0VG9TY29wZSwgZ2V0LCAucER5
bmFtaWMpCiAgICAgcHV0UHJvcGVydHkoKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6
ZSwgZ2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBn
ZXQsIG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsIC5wR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2
YXJJbmplY3Rpb25DaGVjaygucER5bmFtaWMsIHQyKQogICAgIHB1dEdsb2JhbFZhcmlhYmxlKCkK
LSAgICB3cml0ZUJhcnJpZXJPbkdsb2JhbE9iamVjdChzaXplLCBnZXQsIHZhbHVlKQorICAgIHdy
aXRlQmFycmllck9uR2xvYmFsT2JqZWN0KHNpemUsIGdldCwgbV92YWx1ZSkKICAgICBkaXNwYXRj
aCgpCiAKIC5wR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CkBAIC0yNDA5
LDE1ICsyNDA4LDE1IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHV0X3RvX3Njb3BlLCBPcFAK
ICAgICB2YXJJbmplY3Rpb25DaGVjaygucER5bmFtaWMsIHQyKQogICAgIGNoZWNrVERaSW5HbG9i
YWxQdXRUb1Njb3BlSWZOZWNlc3NhcnkoKQogICAgIHB1dEdsb2JhbFZhcmlhYmxlKCkKLSAgICB3
cml0ZUJhcnJpZXJPbkdsb2JhbExleGljYWxFbnZpcm9ubWVudChzaXplLCBnZXQsIHZhbHVlKQor
ICAgIHdyaXRlQmFycmllck9uR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KHNpemUsIGdldCwgbV92
YWx1ZSkKICAgICBkaXNwYXRjaCgpCiAKIC5wQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAucE1v
ZHVsZVZhcgogICAgIHZhckluamVjdGlvbkNoZWNrKC5wRHluYW1pYywgdDIpCi0gICAgbG9hZFZh
cmlhYmxlKGdldCwgc2NvcGUsIHQwKQorICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fc2NvcGUsIHQw
KQogICAgIHB1dENsb3N1cmVWYXIoKQotICAgIHdyaXRlQmFycmllck9uT3BlcmFuZHMoc2l6ZSwg
Z2V0LCBzY29wZSwgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQs
IG1fc2NvcGUsIG1fdmFsdWUpCiAgICAgZGlzcGF0Y2goKQogCiAucE1vZHVsZVZhcjoKQEAgLTI0
MzIsMjYgKzI0MzEsMjYgQEAgZW5kKQogCiAKIGxsaW50T3BXaXRoUHJvZmlsZShvcF9nZXRfZnJv
bV9hcmd1bWVudHMsIE9wR2V0RnJvbUFyZ3VtZW50cywgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0
Y2gsIHJldHVybikKLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBhcmd1bWVudHMsIHQwKQotICAgIGdl
dHUoc2l6ZSwgT3BHZXRGcm9tQXJndW1lbnRzLCBpbmRleCwgdDEpCisgICAgbG9hZFZhcmlhYmxl
KGdldCwgbV9hcmd1bWVudHMsIHQwKQorICAgIGdldHUoc2l6ZSwgT3BHZXRGcm9tQXJndW1lbnRz
LCBtX2luZGV4LCB0MSkKICAgICBsb2FkcSBEaXJlY3RBcmd1bWVudHNfc3RvcmFnZVt0MCwgdDEs
IDhdLCB0MAogICAgIHJldHVybih0MCkKIGVuZCkKIAogCiBsbGludE9wKG9wX3B1dF90b19hcmd1
bWVudHMsIE9wUHV0VG9Bcmd1bWVudHMsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoKQotICAg
IGxvYWRWYXJpYWJsZShnZXQsIGFyZ3VtZW50cywgdDApCi0gICAgZ2V0dShzaXplLCBPcFB1dFRv
QXJndW1lbnRzLCBpbmRleCwgdDEpCi0gICAgZ2V0KHZhbHVlLCB0MykKKyAgICBsb2FkVmFyaWFi
bGUoZ2V0LCBtX2FyZ3VtZW50cywgdDApCisgICAgZ2V0dShzaXplLCBPcFB1dFRvQXJndW1lbnRz
LCBtX2luZGV4LCB0MSkKKyAgICBnZXQobV92YWx1ZSwgdDMpCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZShzaXplLCB0MywgdDIpCiAgICAgc3RvcmVxIHQyLCBEaXJlY3RBcmd1bWVudHNfc3Rv
cmFnZVt0MCwgdDEsIDhdCi0gICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIGFy
Z3VtZW50cywgdmFsdWUpCisgICAgd3JpdGVCYXJyaWVyT25PcGVyYW5kcyhzaXplLCBnZXQsIG1f
YXJndW1lbnRzLCBtX3ZhbHVlKQogICAgIGRpc3BhdGNoKCkKIGVuZCkKIAogCiBsbGludE9wV2l0
aFJldHVybihvcF9nZXRfcGFyZW50X3Njb3BlLCBPcEdldFBhcmVudFNjb3BlLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGxvYWRWYXJpYWJsZShnZXQsIHNjb3BlLCB0
MCkKKyAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MCkKICAgICBsb2FkcCBKU1Njb3Bl
OjptX25leHRbdDBdLCB0MAogICAgIHJldHVybih0MCkKIGVuZCkKQEAgLTI0NjcsNyArMjQ2Niw3
IEBAIGxsaW50T3BXaXRoTWV0YWRhdGEob3BfcHJvZmlsZV90eXBlLCBPcFAKICAgICBsb2FkcCBU
eXBlUHJvZmlsZXJMb2c6Om1fY3VycmVudExvZ0VudHJ5UHRyW3QxXSwgdDIKIAogICAgICMgdDAg
aXMgaG9sZGluZyB0aGUgSlNWYWx1ZSBhcmd1bWVudC4KLSAgICBnZXQodGFyZ2V0LCB0MykKKyAg
ICBnZXQobV90YXJnZXQsIHQzKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDMs
IHQwKQogCiAgICAgYnFlcSB0MCwgVmFsdWVFbXB0eSwgLm9wUHJvZmlsZVR5cGVEb25lCkBAIC0y
NDc2LDcgKzI0NzUsNyBAQCBsbGludE9wV2l0aE1ldGFkYXRhKG9wX3Byb2ZpbGVfdHlwZSwgT3BQ
CiAgICAgCiAgICAgIyBTdG9yZSB0aGUgVHlwZUxvY2F0aW9uIG9udG8gdGhlIGxvZyBlbnRyeS4K
ICAgICBtZXRhZGF0YSh0NSwgdDMpCi0gICAgbG9hZHAgT3BQcm9maWxlVHlwZTo6TWV0YWRhdGE6
OnR5cGVMb2NhdGlvblt0NV0sIHQzCisgICAgbG9hZHAgT3BQcm9maWxlVHlwZTo6TWV0YWRhdGE6
Om1fdHlwZUxvY2F0aW9uW3Q1XSwgdDMKICAgICBzdG9yZXAgdDMsIFR5cGVQcm9maWxlckxvZzo6
TG9nRW50cnk6OmxvY2F0aW9uW3QyXQogCiAgICAgYnRxeiB0MCwgdGFnTWFzaywgLm9wUHJvZmls
ZVR5cGVJc0NlbGwKQEAgLTI1MDIsNyArMjUwMSw3IEBAIGVuZCkKIAogbGxpbnRPcFdpdGhNZXRh
ZGF0YShvcF9wcm9maWxlX2NvbnRyb2xfZmxvdywgT3BQcm9maWxlQ29udHJvbEZsb3csIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCBtZXRhZGF0YSwgcmV0dXJuKQogICAgIG1ldGFkYXRhKHQ1
LCB0MCkKLSAgICBsb2FkcCBPcFByb2ZpbGVDb250cm9sRmxvdzo6TWV0YWRhdGE6OmJhc2ljQmxv
Y2tMb2NhdGlvblt0NV0sIHQwCisgICAgbG9hZHAgT3BQcm9maWxlQ29udHJvbEZsb3c6Ok1ldGFk
YXRhOjptX2Jhc2ljQmxvY2tMb2NhdGlvblt0NV0sIHQwCiAgICAgYWRkcSAxLCBCYXNpY0Jsb2Nr
TG9jYXRpb246Om1fZXhlY3V0aW9uQ291bnRbdDBdCiAgICAgZGlzcGF0Y2goKQogZW5kKQpAQCAt
MjUxMSw3ICsyNTEwLDcgQEAgZW5kKQogbGxpbnRPcFdpdGhSZXR1cm4ob3BfZ2V0X3Jlc3RfbGVu
Z3RoLCBPcEdldFJlc3RMZW5ndGgsIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4p
CiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRbY2ZyXSwgdDAKICAgICBz
dWJpIDEsIHQwCi0gICAgZ2V0dShzaXplLCBPcEdldFJlc3RMZW5ndGgsIG51bVBhcmFtZXRlcnNU
b1NraXAsIHQxKQorICAgIGdldHUoc2l6ZSwgT3BHZXRSZXN0TGVuZ3RoLCBtX251bVBhcmFtZXRl
cnNUb1NraXAsIHQxKQogICAgIGJpbHRlcSB0MCwgdDEsIC5zdG9yZVplcm8KICAgICBzdWJpIHQx
LCB0MAogICAgIGptcCAuYm94VXAKQEAgLTI1MzAsNyArMjUyOSw3IEBAIGxsaW50T3Aob3BfbG9n
X3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlLCAKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNrZW46
OlBhY2tldDo6Y2FsbGVyRnJhbWVbdDBdCiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQxCiAgICAg
c3RvcmVwIHQxLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OmNhbGxlZVt0MF0KLSAgICBsb2FkVmFy
aWFibGUoZ2V0LCBzY29wZSwgdDEpCisgICAgbG9hZFZhcmlhYmxlKGdldCwgbV9zY29wZSwgdDEp
CiAgICAgc3RvcmVwIHQxLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OnNjb3BlW3QwXQogICAgIGRp
c3BhdGNoKCkKIC5vcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVNsb3c6CkBAIC0yNTQzLDkgKzI1
NDIsOSBAQCBsbGludE9wKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsLCBPcExvCiAgICAgYWNx
dWlyZVNoYWRvd0NoaWNrZW5QYWNrZXQoLm9wTG9nU2hhZG93Q2hpY2tlblRhaWxTbG93KQogICAg
IHN0b3JlcCBjZnIsIFNoYWRvd0NoaWNrZW46OlBhY2tldDo6ZnJhbWVbdDBdCiAgICAgc3RvcmVw
IFNoYWRvd0NoaWNrZW5UYWlsTWFya2VyLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OmNhbGxlZVt0
MF0KLSAgICBsb2FkVmFyaWFibGUoZ2V0LCB0aGlzVmFsdWUsIHQxKQorICAgIGxvYWRWYXJpYWJs
ZShnZXQsIG1fdGhpc1ZhbHVlLCB0MSkKICAgICBzdG9yZXAgdDEsIFNoYWRvd0NoaWNrZW46OlBh
Y2tldDo6dGhpc1ZhbHVlW3QwXQotICAgIGxvYWRWYXJpYWJsZShnZXQsIHNjb3BlLCB0MSkKKyAg
ICBsb2FkVmFyaWFibGUoZ2V0LCBtX3Njb3BlLCB0MSkKICAgICBzdG9yZXAgdDEsIFNoYWRvd0No
aWNrZW46OlBhY2tldDo6c2NvcGVbdDBdCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCiAg
ICAgc3RvcmVwIHQxLCBTaGFkb3dDaGlja2VuOjpQYWNrZXQ6OmNvZGVCbG9ja1t0MF0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHJldmlzaW9uIDI0MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMg
Q29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwNiwxNSArMzA2LDE1IEBAIG1hY3Jv
IGRpc3BhdGNoT3Aoc2l6ZSwgb3ApCiAgICAgc2l6ZShkaXNwYXRjaE5hcnJvdywgZGlzcGF0Y2hX
aWRlLCBtYWNybyAoZGlzcGF0Y2gpIGRpc3BhdGNoKCkgZW5kKQogZW5kCiAKLW1hY3JvIGdldHUo
c2l6ZSwgb3AsIGZpZWxkLCBkc3QpCittYWNybyBnZXR1KHNpemUsIG9wLCBmaWVsZE5hbWUsIGRz
dCkKICAgICBzaXplKGdldHVPcGVyYW5kTmFycm93LCBnZXR1T3BlcmFuZFdpZGUsIG1hY3JvIChn
ZXR1KQotICAgICAgICBnZXR1KG9wLCBmaWVsZCwgZHN0KQorICAgICAgICBnZXR1KG9wLCBmaWVs
ZE5hbWUsIGRzdCkKICAgICBlbmQpCiBlbmQKIAotbWFjcm8gZ2V0KHNpemUsIG9wLCBmaWVsZCwg
ZHN0KQorbWFjcm8gZ2V0KHNpemUsIG9wLCBmaWVsZE5hbWUsIGRzdCkKICAgICBzaXplKGdldE9w
ZXJhbmROYXJyb3csIGdldE9wZXJhbmRXaWRlLCBtYWNybyAoZ2V0KQotICAgICAgICBnZXQob3As
IGZpZWxkLCBkc3QpCisgICAgICAgIGdldChvcCwgZmllbGROYW1lLCBkc3QpCiAgICAgZW5kKQog
ZW5kCiAKQEAgLTMyOCw3ICszMjgsNyBAQCBlbmQKIAogbWFjcm8gbWV0YWRhdGEoc2l6ZSwgb3Bj
b2RlLCBkc3QsIHNjcmF0Y2gpCiAgICAgbG9hZGkgY29uc3RleHByICVvcGNvZGUlOjpvcGNvZGVJ
RCAqIDRbbWV0YWRhdGFUYWJsZV0sIGRzdCAjIG9mZnNldCA9IG1ldGFkYXRhVGFibGU8dW5zaWdu
ZWQqPltvcGNvZGVJRF0KLSAgICBnZXR1KHNpemUsIG9wY29kZSwgbWV0YWRhdGFJRCwgc2NyYXRj
aCkgIyBzY3JhdGNoID0gYnl0ZWNvZGUubWV0YWRhdGFJRAorICAgIGdldHUoc2l6ZSwgb3Bjb2Rl
LCBtX21ldGFkYXRhSUQsIHNjcmF0Y2gpICMgc2NyYXRjaCA9IGJ5dGVjb2RlLm1fbWV0YWRhdGFJ
RAogICAgIG11bGkgc2l6ZW9mICVvcGNvZGUlOjpNZXRhZGF0YSwgc2NyYXRjaCAjIHNjcmF0Y2gg
Kj0gc2l6ZW9mKE9wOjpNZXRhZGF0YSkKICAgICBhZGRpIHNjcmF0Y2gsIGRzdCAjIG9mZnNldCAr
PSBzY3JhdGNoCiAgICAgYWRkcCBtZXRhZGF0YVRhYmxlLCBkc3QgIyByZXR1cm4gJm1ldGFkYXRh
VGFibGVbb2Zmc2V0XQpAQCAtMzYwLDggKzM2MCw4IEBAIGVuZAogCiBtYWNybyBsbGludE9wKG5h
bWUsIG9wLCBmbikKICAgICBjb21tb25PcChsbGludF8lbmFtZSUsIHRyYWNlRXhlY3V0aW9uLCBt
YWNybyhzaXplKQotICAgICAgICBtYWNybyBnZXRJbXBsKGZpZWxkLCBkc3QpCi0gICAgICAgICAg
ICBnZXQoc2l6ZSwgb3AsIGZpZWxkLCBkc3QpCisgICAgICAgIG1hY3JvIGdldEltcGwoZmllbGRO
YW1lLCBkc3QpCisgICAgICAgICAgICBnZXQoc2l6ZSwgb3AsIGZpZWxkTmFtZSwgZHN0KQogICAg
ICAgICBlbmQKIAogICAgICAgICBtYWNybyBkaXNwYXRjaEltcGwoKQpAQCAtMzkxLDggKzM5MSw4
IEBAIGVuZAogCiBtYWNybyBsbGludE9wV2l0aEp1bXAobmFtZSwgb3AsIGltcGwpCiAgICAgbGxp
bnRPcFdpdGhNZXRhZGF0YShuYW1lLCBvcCwgbWFjcm8oc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgbWV0
YWRhdGEsIHJldHVybikKLSAgICAgICAgbWFjcm8ganVtcChmaWVsZCkKLSAgICAgICAgICAgIGdl
dChmaWVsZCwgdDApCisgICAgICAgIG1hY3JvIGp1bXAoZmllbGROYW1lKQorICAgICAgICAgICAg
Z2V0KGZpZWxkTmFtZSwgdDApCiAgICAgICAgICAgICBqdW1wSW1wbCh0MCkKICAgICAgICAgZW5k
CiAKQEAgLTgzNywxMCArODM3LDEwIEBAIG1hY3JvIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVy
Q2FsbChkZXMKICAgICBlbmQKIGVuZAogCi1tYWNybyB1bnBvaXNvbihwb2lzb24sIGZpZWxkLCBz
Y3JhdGNoKQorbWFjcm8gdW5wb2lzb24ocG9pc29uLCBmaWVsZFJlZywgc2NyYXRjaCkKICAgICBp
ZiBQT0lTT04KICAgICAgICAgbG9hZHAgcG9pc29uLCBzY3JhdGNoCi0gICAgICAgIHhvcnAgc2Ny
YXRjaCwgZmllbGQKKyAgICAgICAgeG9ycCBzY3JhdGNoLCBmaWVsZFJlZwogICAgIGVuZAogZW5k
CiAKQEAgLTE1MzgsNyArMTUzOCw3IEBAIGNvbXBhcmVVbnNpZ25lZE9wKGJlbG93ZXEsIE9wQmVs
b3dlcSwKIAogCiBsbGludE9wV2l0aEp1bXAob3Bfam1wLCBPcEptcCwgbWFjcm8gKHNpemUsIGdl
dCwganVtcCwgZGlzcGF0Y2gpCi0gICAganVtcCh0YXJnZXQpCisgICAganVtcChtX3RhcmdldCkK
IGVuZCkKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI0MDAyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjUs
OCArMTI1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgYkNvbmRpdGlvbiA9IChj
b25kaXRpb24pOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIENIRUNLX0VYQ0VQ
VElPTigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChi
Q29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBwYyA9IGJ5dGVjb2RlLnRhcmdldCBcCi0gICAgICAgICAgICAgICAgPyByZWludGVy
cHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4ocGMpICsgYnl0ZWNvZGUudGFyZ2V0KSBcCisgICAgICAgICAgICBwYyA9IGJ5dGVjb2Rl
Lm1fdGFyZ2V0IFwKKyAgICAgICAgICAgICAgICA/IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5z
dHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwYykgKyBieXRlY29k
ZS5tX3RhcmdldCkgXAogICAgICAgICAgICAgICAgIDogZXhlYy0+Y29kZUJsb2NrKCktPm91dE9m
TGluZUp1bXBUYXJnZXQocGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
ICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgIHBjID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlv
bio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBjKSArIHBjLT5zaXplKCkpOyBc
CkBAIC0xNDEsNyArMTQxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEVORF9JTVBMKCk7
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAotI2RlZmlu
ZSBSRVRVUk5fV0lUSF9QUk9GSUxJTkcodmFsdWVfXywgcHJvZmlsaW5nQWN0aW9uX18pIFJFVFVS
Tl9XSVRIX1BST0ZJTElOR19DVVNUT00oYnl0ZWNvZGUuZHN0LCB2YWx1ZV9fLCBwcm9maWxpbmdB
Y3Rpb25fXykKKyNkZWZpbmUgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHZhbHVlX18sIHByb2ZpbGlu
Z0FjdGlvbl9fKSBSRVRVUk5fV0lUSF9QUk9GSUxJTkdfQ1VTVE9NKGJ5dGVjb2RlLm1fZHN0LCB2
YWx1ZV9fLCBwcm9maWxpbmdBY3Rpb25fXykKIAogI2RlZmluZSBSRVRVUk4odmFsdWUpIFwKICAg
ICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcodmFsdWUsIHsgfSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcodmFsdWVfXywgUFJPRklM
RV9WQUxVRShyZXR1cm5WYWx1ZV9fKSkKIAogI2RlZmluZSBQUk9GSUxFX1ZBTFVFKHZhbHVlKSBk
byB7IFwKLSAgICAgICAgYnl0ZWNvZGUubWV0YWRhdGEoZXhlYykucHJvZmlsZS5tX2J1Y2tldHNb
MF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOyBcCisgICAgICAgIGJ5dGVjb2RlLm1ldGFkYXRh
KGV4ZWMpLm1fcHJvZmlsZS5tX2J1Y2tldHNbMF0gPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOyBc
CiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgQ0FMTF9FTkRfSU1QTChleGVjLCBjYWxs
VGFyZ2V0LCBjYWxsVGFyZ2V0VGFnKSBcCkBAIC0yMTUsNyArMjE1LDcgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2NyZWF0ZV9zY29wZWRfYQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcENyZWF0ZVNjb3BlZEFyZ3VtZW50cz4oKTsKLSAgICBKU0xleGlj
YWxFbnZpcm9ubWVudCogc2NvcGUgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihHRVQo
Ynl0ZWNvZGUuc2NvcGUpLmpzVmFsdWUoKSk7CisgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNj
b3BlID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oR0VUKGJ5dGVjb2RlLm1fc2NvcGUp
LmpzVmFsdWUoKSk7CiAgICAgU2NvcGVkQXJndW1lbnRzVGFibGUqIHRhYmxlID0gc2NvcGUtPnN5
bWJvbFRhYmxlKCktPmFyZ3VtZW50cygpOwogICAgIFJFVFVSTihTY29wZWRBcmd1bWVudHM6OmNy
ZWF0ZUJ5Q29weWluZyhleGVjLCB0YWJsZSwgc2NvcGUpKTsKIH0KQEAgLTIzMiwxNiArMjMyLDE2
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcykKICAgICBCRUdJTigpOwog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVhdGVUaGlzPigpOwogICAgIEpTT2JqZWN0
KiByZXN1bHQ7Ci0gICAgSlNPYmplY3QqIGNvbnN0cnVjdG9yQXNPYmplY3QgPSBhc09iamVjdChH
RVQoYnl0ZWNvZGUuY2FsbGVlKS5qc1ZhbHVlKCkpOworICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3Rv
ckFzT2JqZWN0ID0gYXNPYmplY3QoR0VUKGJ5dGVjb2RlLm1fY2FsbGVlKS5qc1ZhbHVlKCkpOwog
ICAgIGlmIChjb25zdHJ1Y3RvckFzT2JqZWN0LT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUgJiYg
anNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvckFzT2JqZWN0KS0+Y2FuVXNlQWxsb2NhdGlv
blByb2ZpbGUoKSkgewogICAgICAgICBKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvciA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY29uc3RydWN0b3JBc09iamVjdCk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxK
U0NlbGw+JiBjYWNoZWRDYWxsZWUgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKS5jYWNoZWRDYWxs
ZWU7CisgICAgICAgIFdyaXRlQmFycmllcjxKU0NlbGw+JiBjYWNoZWRDYWxsZWUgPSBieXRlY29k
ZS5tZXRhZGF0YShleGVjKS5tX2NhY2hlZENhbGxlZTsKICAgICAgICAgaWYgKCFjYWNoZWRDYWxs
ZWUpCiAgICAgICAgICAgICBjYWNoZWRDYWxsZWUuc2V0KHZtLCBleGVjLT5jb2RlQmxvY2soKSwg
Y29uc3RydWN0b3IpOwogICAgICAgICBlbHNlIGlmIChjYWNoZWRDYWxsZWUudW52YWxpZGF0ZWRH
ZXQoKSAhPSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSAmJiBjYWNoZWRDYWxs
ZWUuZ2V0KCkgIT0gY29uc3RydWN0b3IpCiAgICAgICAgICAgICBjYWNoZWRDYWxsZWUuc2V0V2l0
aG91dFdyaXRlQmFycmllcihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSk7CiAK
LSAgICAgICAgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gYnl0ZWNvZGUuaW5saW5lQ2FwYWNpdHk7
CisgICAgICAgIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IGJ5dGVjb2RlLm1faW5saW5lQ2FwYWNp
dHk7CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBhbGxvY2F0aW9uUHJvZmlsZSA9
IGNvbnN0cnVjdG9yLT5lbnN1cmVSYXJlRGF0YUFuZEFsbG9jYXRpb25Qcm9maWxlKGV4ZWMsIGlu
bGluZUNhcGFjaXR5KS0+b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKTsKICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBhbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgICAg
IHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CkBAIC0yNjks
MTggKzI2OSwxOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhpcykKICAgICBCRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBKU1ZhbHVlIHYxID0gR0VU
KGJ5dGVjb2RlLnNyY0RzdCkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdjEgPSBHRVQoYnl0ZWNv
ZGUubV9zcmNEc3QpLmpzVmFsdWUoKTsKICAgICBpZiAodjEuaXNDZWxsKCkpIHsKICAgICAgICAg
U3RydWN0dXJlKiBteVN0cnVjdHVyZSA9IHYxLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwotICAg
ICAgICBTdHJ1Y3R1cmUqIG90aGVyU3RydWN0dXJlID0gbWV0YWRhdGEuY2FjaGVkU3RydWN0dXJl
LmdldCgpOworICAgICAgICBTdHJ1Y3R1cmUqIG90aGVyU3RydWN0dXJlID0gbWV0YWRhdGEubV9j
YWNoZWRTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgIGlmIChteVN0cnVjdHVyZSAhPSBvdGhlclN0
cnVjdHVyZSkgewogICAgICAgICAgICAgaWYgKG90aGVyU3RydWN0dXJlKQotICAgICAgICAgICAg
ICAgIG1ldGFkYXRhLnRvVGhpc1N0YXR1cyA9IFRvVGhpc0NvbmZsaWN0ZWQ7Ci0gICAgICAgICAg
ICBtZXRhZGF0YS5jYWNoZWRTdHJ1Y3R1cmUuc2V0KHZtLCBleGVjLT5jb2RlQmxvY2soKSwgbXlT
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fdG9UaGlzU3RhdHVzID0gVG9U
aGlzQ29uZmxpY3RlZDsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fY2FjaGVkU3RydWN0dXJlLnNl
dCh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG15U3RydWN0dXJlKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1ldGFkYXRhLnRvVGhpc1N0YXR1cyA9IFRvVGhpc0NvbmZsaWN0ZWQ7
Ci0gICAgICAgIG1ldGFkYXRhLmNhY2hlZFN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtZXRh
ZGF0YS5tX3RvVGhpc1N0YXR1cyA9IFRvVGhpc0NvbmZsaWN0ZWQ7CisgICAgICAgIG1ldGFkYXRh
Lm1fY2FjaGVkU3RydWN0dXJlLmNsZWFyKCk7CiAgICAgfQogICAgIC8vIE5vdGU6IFdlIG9ubHkg
bmVlZCB0byBkbyB0aGlzIHZhbHVlIHByb2ZpbGluZyBoZXJlIG9uIHRoZSBzbG93IHBhdGguIFRo
ZSBmYXN0IHBhdGgKICAgICAvLyBqdXN0IHJldHVybnMgdGhlIGlucHV0IHRvIHRvX3RoaXMgaWYg
dGhlIHN0cnVjdHVyZSBjaGVjayBzdWNjZWVkcy4gSWYgdGhlIHN0cnVjdHVyZQpAQCAtMjg5LDcg
KzI4OSw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b190aGlzKQogICAgIC8vIHRoZSBz
YW1lIFNwZWN1bGF0ZWRUeXBlLiBUaGVyZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJv
dXQgdmFsdWUgcHJvZmlsaW5nIG9uIHRoZQogICAgIC8vIGZhc3QgcGF0aC4KICAgICBhdXRvIHZh
bHVlID0gdjEudG9UaGlzKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/
IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlKTsKLSAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkdf
Q1VTVE9NKGJ5dGVjb2RlLnNyY0RzdCwgdmFsdWUsIFBST0ZJTEVfVkFMVUUodmFsdWUpKTsKKyAg
ICBSRVRVUk5fV0lUSF9QUk9GSUxJTkdfQ1VTVE9NKGJ5dGVjb2RlLm1fc3JjRHN0LCB2YWx1ZSwg
UFJPRklMRV9WQUxVRSh2YWx1ZSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdGhy
b3dfdGR6X2Vycm9yKQpAQCAtMzE0LDkwICszMTQsOTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25vdCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BO
b3Q+KCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbighR0VUX0MoYnl0ZWNvZGUub3BlcmFuZCkuanNW
YWx1ZSgpLnRvQm9vbGVhbihleGVjKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oIUdFVF9DKGJ5
dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihleGVjKSkpOwogfQogCiBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfZXEpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wRXE+KCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihKU1ZhbHVlOjplcXVh
bChleGVjLCBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUucmhz
KS5qc1ZhbHVlKCkpKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihKU1ZhbHVlOjplcXVhbChleGVj
LCBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3Jocyku
anNWYWx1ZSgpKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmVxKQogewogICAg
IEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE5lcT4oKTsKLSAgICBSRVRV
Uk4oanNCb29sZWFuKCFKU1ZhbHVlOjplcXVhbChleGVjLCBHRVRfQyhieXRlY29kZS5saHMpLmpz
VmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkpKSk7CisgICAgUkVUVVJOKGpz
Qm9vbGVhbighSlNWYWx1ZTo6ZXF1YWwoZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFs
dWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3N0cmljdGVxKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcFN0cmljdGVxPigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oSlNWYWx1
ZTo6c3RyaWN0RXF1YWwoZXhlYywgR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIEdFVF9D
KGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oSlNWYWx1
ZTo6c3RyaWN0RXF1YWwoZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgR0VU
X0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX25zdHJpY3RlcSkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BOc3RyaWN0ZXE+KCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbighSlNWYWx1ZTo6c3Ry
aWN0RXF1YWwoZXhlYywgR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIEdFVF9DKGJ5dGVj
b2RlLnJocykuanNWYWx1ZSgpKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oIUpTVmFsdWU6OnN0
cmljdEVxdWFsKGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCksIEdFVF9DKGJ5
dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0
aF9sZXNzKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcExl
c3M+KCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihqc0xlc3M8dHJ1ZT4oZXhlYywgR0VUX0MoYnl0
ZWNvZGUubGhzKS5qc1ZhbHVlKCksIEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpKSkpOwor
ICAgIFJFVFVSTihqc0Jvb2xlYW4oanNMZXNzPHRydWU+KGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLm1f
bGhzKS5qc1ZhbHVlKCksIEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkpKSk7CiB9CiAK
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9sZXNzZXEpCiB7CiAgICAgQkVHSU4oKTsKICAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTGVzc2VxPigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4o
anNMZXNzRXE8dHJ1ZT4oZXhlYywgR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCksIEdFVF9D
KGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oanNMZXNz
RXE8dHJ1ZT4oZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSwgR0VUX0MoYnl0
ZWNvZGUubV9yaHMpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2dyZWF0ZXIpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
R3JlYXRlcj4oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGpzTGVzczxmYWxzZT4oZXhlYywgR0VU
X0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCksIEdFVF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgp
KSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oanNMZXNzPGZhbHNlPihleGVjLCBHRVRfQyhieXRl
Y29kZS5tX3JocykuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpKSkp
OwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ3JlYXRlcmVxKQogewogICAgIEJFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdyZWF0ZXJlcT4oKTsKLSAgICBSRVRV
Uk4oanNCb29sZWFuKGpzTGVzc0VxPGZhbHNlPihleGVjLCBHRVRfQyhieXRlY29kZS5yaHMpLmpz
VmFsdWUoKSwgR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCkpKSk7CisgICAgUkVUVVJOKGpz
Qm9vbGVhbihqc0xlc3NFcTxmYWxzZT4oZXhlYywgR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFs
dWUoKSwgR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKSkpKTsKIH0KIAogU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX2luYykKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BJbmM+KCk7Ci0gICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HX0NVU1RPTShieXRl
Y29kZS5zcmNEc3QsIGpzTnVtYmVyKEdFVChieXRlY29kZS5zcmNEc3QpLmpzVmFsdWUoKS50b051
bWJlcihleGVjKSArIDEpLCB7IH0pOworICAgIFJFVFVSTl9XSVRIX1BST0ZJTElOR19DVVNUT00o
Ynl0ZWNvZGUubV9zcmNEc3QsIGpzTnVtYmVyKEdFVChieXRlY29kZS5tX3NyY0RzdCkuanNWYWx1
ZSgpLnRvTnVtYmVyKGV4ZWMpICsgMSksIHsgfSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9kZWMpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
RGVjPigpOwotICAgIFJFVFVSTl9XSVRIX1BST0ZJTElOR19DVVNUT00oYnl0ZWNvZGUuc3JjRHN0
LCBqc051bWJlcihHRVQoYnl0ZWNvZGUuc3JjRHN0KS5qc1ZhbHVlKCkudG9OdW1iZXIoZXhlYykg
LSAxKSwgeyB9KTsKKyAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkdfQ1VTVE9NKGJ5dGVjb2RlLm1f
c3JjRHN0LCBqc051bWJlcihHRVQoYnl0ZWNvZGUubV9zcmNEc3QpLmpzVmFsdWUoKS50b051bWJl
cihleGVjKSAtIDEpLCB7IH0pOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fc3Ry
aW5nKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRvU3Ry
aW5nPigpOwotICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5vcGVyYW5kKS5qc1ZhbHVlKCkudG9T
dHJpbmcoZXhlYykpOworICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5tX29wZXJhbmQpLmpzVmFs
dWUoKS50b1N0cmluZyhleGVjKSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQogc3RhdGljIHZvaWQg
dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKE9wTmVnYXRlOjpNZXRhZGF0YSYgbWV0
YWRhdGEsIEpTVmFsdWUgcmVzdWx0LCBKU1ZhbHVlIG9wZXJhbmQpCiB7Ci0gICAgQXJpdGhQcm9m
aWxlJiBwcm9maWxlID0gbWV0YWRhdGEuYXJpdGhQcm9maWxlOworICAgIEFyaXRoUHJvZmlsZSYg
cHJvZmlsZSA9IG1ldGFkYXRhLm1fYXJpdGhQcm9maWxlOwogICAgIHByb2ZpbGUub2JzZXJ2ZUxI
UyhvcGVyYW5kKTsKICAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkgfHwgcmVzdWx0LmlzQmln
SW50KCkpOwogICAgIGlmIChyZXN1bHQuaXNOdW1iZXIoKSkgewpAQCAtNDM0LDcgKzQzNCw3IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZWdhdGUpCiAgICAgQkVHSU4oKTsKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wTmVnYXRlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEoZXhlYyk7Ci0gICAgSlNWYWx1ZSBvcGVyYW5kID0gR0VUX0MoYnl0ZWNv
ZGUub3BlcmFuZCkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgb3BlcmFuZCA9IEdFVF9DKGJ5dGVj
b2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwogICAgIEpTVmFsdWUgcHJpbVZhbHVlID0gb3BlcmFu
ZC50b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJOdW1iZXIpOwogICAgIENIRUNLX0VYQ0VQVElPTigp
OwogCkBAIC00OTEsNyArNDkxLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX251bWJl
cikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUb051bWJl
cj4oKTsKLSAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gR0VUX0MoYnl0ZWNvZGUub3BlcmFuZCkuanNW
YWx1ZSgpOworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBHRVRfQyhieXRlY29kZS5tX29wZXJhbmQp
LmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGFyZ3VtZW50LnRvTnVt
YmVyKGV4ZWMpKTsKICAgICBSRVRVUk5fUFJPRklMRUQocmVzdWx0KTsKIH0KQEAgLTUwMCw5ICs1
MDAsOSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fb2JqZWN0KQogewogICAgIEJFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRvT2JqZWN0PigpOwotICAgIEpTVmFs
dWUgYXJndW1lbnQgPSBHRVRfQyhieXRlY29kZS5vcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSBhcmd1bWVudCA9IEdFVF9DKGJ5dGVjb2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpOwogICAg
IGlmIChVTkxJS0VMWShhcmd1bWVudC5pc1VuZGVmaW5lZE9yTnVsbCgpKSkgewotICAgICAgICBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1lc3NhZ2UpOworICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMt
PmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fbWVzc2FnZSk7CiAgICAgICAgIGlm
ICghaWRlbnQuaXNFbXB0eSgpKQogICAgICAgICAgICAgVEhST1coY3JlYXRlVHlwZUVycm9yKGV4
ZWMsIGlkZW50LmltcGwoKSkpOwogICAgIH0KQEAgLTUxNCw4ICs1MTQsOCBAQCBTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfYWRkKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcEFkZD4oKTsKLSAgICBKU1ZhbHVlIHYxID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5q
c1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB2MiA9IEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgp
OworICAgIEpTVmFsdWUgdjEgPSBHRVRfQyhieXRlY29kZS5tX2xocykuanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgdjIgPSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpOwogICAgIEpTVmFs
dWUgcmVzdWx0OwogCiAgICAgQXJpdGhQcm9maWxlJiBhcml0aFByb2ZpbGUgPSAqZXhlYy0+Y29k
ZUJsb2NrKCktPmFyaXRoUHJvZmlsZUZvclBDKHBjKTsKQEAgLTU0Myw4ICs1NDMsOCBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfbXVsKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcE11bD4oKTsKLSAgICBKU1ZhbHVlIGxlZnQgPSBHRVRfQyhieXRlY29k
ZS5saHMpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUucmhz
KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpz
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFs
dWUoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTXVsKGV4ZWMsIGxlZnQsIHJpZ2h0KTsKICAg
ICBDSEVDS19FWENFUFRJT04oKTsKICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcocmVzdWx0LCB7
CkBAIC01NTYsOCArNTU2LDggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3N1YikKIHsKICAg
ICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BTdWI+KCk7Ci0gICAgSlNW
YWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBy
aWdodCA9IEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgbGVmdCA9
IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSByaWdodCA9IEdF
VF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCk7CiAgICAgYXV0byBsZWZ0TnVtZXJpYyA9IGxl
ZnQudG9OdW1lcmljKGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIGF1dG8gcmln
aHROdW1lcmljID0gcmlnaHQudG9OdW1lcmljKGV4ZWMpOwpAQCAtNTg1LDggKzU4NSw4IEBAIFNM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kaXYpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wRGl2PigpOwotICAgIEpTVmFsdWUgbGVmdCA9IEdFVF9DKGJ5dGVj
b2RlLmxocykuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgcmlnaHQgPSBHRVRfQyhieXRlY29kZS5y
aHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGxlZnQgPSBHRVRfQyhieXRlY29kZS5tX2xocyku
anNWYWx1ZSgpOworICAgIEpTVmFsdWUgcmlnaHQgPSBHRVRfQyhieXRlY29kZS5tX3JocykuanNW
YWx1ZSgpOwogICAgIGF1dG8gbGVmdE51bWVyaWMgPSBsZWZ0LnRvTnVtZXJpYyhleGVjKTsKICAg
ICBDSEVDS19FWENFUFRJT04oKTsKICAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IHJpZ2h0LnRvTnVt
ZXJpYyhleGVjKTsKQEAgLTYxNiw4ICs2MTYsOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
bW9kKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcE1vZD4o
KTsKLSAgICBKU1ZhbHVlIGxlZnQgPSBHRVRfQyhieXRlY29kZS5saHMpLmpzVmFsdWUoKTsKLSAg
ICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVl
IHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUoKTsKICAgICBhdXRvIGxlZnRO
dW1lcmljID0gbGVmdC50b051bWVyaWMoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAg
ICAgYXV0byByaWdodE51bWVyaWMgPSByaWdodC50b051bWVyaWMoZXhlYyk7CkBAIC02NDIsMTAg
KzY0MiwxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcG93KQogewogICAgIEJFR0lOKCk7
CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFBvdz4oKTsKLSAgICBkb3VibGUgYSA9IEdF
VF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpLnRvTnVtYmVyKGV4ZWMpOworICAgIGRvdWJsZSBh
ID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKS50b051bWJlcihleGVjKTsKICAgICBp
ZiAoVU5MSUtFTFkodGhyb3dTY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIFJFVFVSTihKU1Zh
bHVlKCkpOwotICAgIGRvdWJsZSBiID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkudG9O
dW1iZXIoZXhlYyk7CisgICAgZG91YmxlIGIgPSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1
ZSgpLnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChVTkxJS0VMWSh0aHJvd1Njb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgUkVUVVJOKEpTVmFsdWUoKSk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKG9w
ZXJhdGlvbk1hdGhQb3coYSwgYikpKTsKQEAgLTY1NSw4ICs2NTUsOCBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfbHNoaWZ0KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcExzaGlmdD4oKTsKLSAgICBKU1ZhbHVlIGxlZnQgPSBHRVRfQyhieXRlY29kZS5s
aHMpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5q
c1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFs
dWUoKTsKKyAgICBKU1ZhbHVlIHJpZ2h0ID0gR0VUX0MoYnl0ZWNvZGUubV9yaHMpLmpzVmFsdWUo
KTsKICAgICBhdXRvIGxlZnROdW1lcmljID0gbGVmdC50b0JpZ0ludE9ySW50MzIoZXhlYyk7CiAg
ICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgYXV0byByaWdodE51bWVyaWMgPSByaWdodC50b0Jp
Z0ludE9ySW50MzIoZXhlYyk7CkBAIC02NzksOCArNjc5LDggQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3JzaGlmdCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BSc2hpZnQ+KCk7Ci0gICAgSlNWYWx1ZSBsZWZ0ID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5q
c1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSByaWdodCA9IEdFVF9DKGJ5dGVjb2RlLnJocykuanNWYWx1
ZSgpOworICAgIEpTVmFsdWUgbGVmdCA9IEdFVF9DKGJ5dGVjb2RlLm1fbGhzKS5qc1ZhbHVlKCk7
CisgICAgSlNWYWx1ZSByaWdodCA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCk7CiAg
ICAgYXV0byBsZWZ0TnVtZXJpYyA9IGxlZnQudG9CaWdJbnRPckludDMyKGV4ZWMpOwogICAgIENI
RUNLX0VYQ0VQVElPTigpOwogICAgIGF1dG8gcmlnaHROdW1lcmljID0gcmlnaHQudG9CaWdJbnRP
ckludDMyKGV4ZWMpOwpAQCAtNzAzLDEwICs3MDMsMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX3Vyc2hpZnQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wVXJzaGlmdD4oKTsKLSAgICB1aW50MzJfdCBhID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1Zh
bHVlKCkudG9VSW50MzIoZXhlYyk7CisgICAgdWludDMyX3QgYSA9IEdFVF9DKGJ5dGVjb2RlLm1f
bGhzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhlYyk7CiAgICAgaWYgKFVOTElLRUxZKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpKQogICAgICAgICBSRVRVUk4oSlNWYWx1ZSgpKTsKLSAgICB1aW50MzJf
dCBiID0gR0VUX0MoYnl0ZWNvZGUucmhzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhlYyk7CisgICAg
dWludDMyX3QgYiA9IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhl
Yyk7CiAgICAgUkVUVVJOKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGEgPj4gKGIgJiAz
MSkpKSk7CiB9CiAKQEAgLTcxNCw3ICs3MTQsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dW5zaWduZWQpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
VW5zaWduZWQ+KCk7Ci0gICAgdWludDMyX3QgYSA9IEdFVF9DKGJ5dGVjb2RlLm9wZXJhbmQpLmpz
VmFsdWUoKS50b1VJbnQzMihleGVjKTsKKyAgICB1aW50MzJfdCBhID0gR0VUX0MoYnl0ZWNvZGUu
bV9vcGVyYW5kKS5qc1ZhbHVlKCkudG9VSW50MzIoZXhlYyk7CiAgICAgUkVUVVJOKGpzTnVtYmVy
KGEpKTsKIH0KIApAQCAtNzIyLDcgKzcyMiw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9i
aXRub3QpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wQml0
bm90PigpOwotICAgIGludDMyX3Qgb3BlcmFuZCA9IEdFVF9DKGJ5dGVjb2RlLm9wZXJhbmQpLmpz
VmFsdWUoKS50b0ludDMyKGV4ZWMpOworICAgIGludDMyX3Qgb3BlcmFuZCA9IEdFVF9DKGJ5dGVj
b2RlLm1fb3BlcmFuZCkuanNWYWx1ZSgpLnRvSW50MzIoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBU
SU9OKCk7CiAgICAgUkVUVVJOX1BST0ZJTEVEKGpzTnVtYmVyKH5vcGVyYW5kKSk7CiB9CkBAIC03
MzEsOSArNzMxLDkgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2JpdGFuZCkKIHsKICAgICBC
RUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BCaXRhbmQ+KCk7Ci0gICAgYXV0
byBsZWZ0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLmxocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJ
bnQzMihleGVjKTsKKyAgICBhdXRvIGxlZnROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUubV9saHMp
LmpzVmFsdWUoKS50b0JpZ0ludE9ySW50MzIoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
Ci0gICAgYXV0byByaWdodE51bWVyaWMgPSBHRVRfQyhieXRlY29kZS5yaHMpLmpzVmFsdWUoKS50
b0JpZ0ludE9ySW50MzIoZXhlYyk7CisgICAgYXV0byByaWdodE51bWVyaWMgPSBHRVRfQyhieXRl
Y29kZS5tX3JocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVjKTsKICAgICBDSEVDS19F
WENFUFRJT04oKTsKICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KGxl
ZnROdW1lcmljKSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4ocmlnaHROdW1l
cmljKSkgewogICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KGxl
ZnROdW1lcmljKSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpTQmlnSW50Kj4ocmlnaHROdW1l
cmljKSkgewpAQCAtNzUyLDkgKzc1Miw5IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9iaXRv
cikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BCaXRvcj4o
KTsKLSAgICBhdXRvIGxlZnROdW1lcmljID0gR0VUX0MoYnl0ZWNvZGUubGhzKS5qc1ZhbHVlKCku
dG9CaWdJbnRPckludDMyKGV4ZWMpOworICAgIGF1dG8gbGVmdE51bWVyaWMgPSBHRVRfQyhieXRl
Y29kZS5tX2xocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVjKTsKICAgICBDSEVDS19F
WENFUFRJT04oKTsKLSAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLnJocyku
anNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVjKTsKKyAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9
IEdFVF9DKGJ5dGVjb2RlLm1fcmhzKS5qc1ZhbHVlKCkudG9CaWdJbnRPckludDMyKGV4ZWMpOwog
ICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpT
QmlnSW50Kj4obGVmdE51bWVyaWMpIHx8IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQq
PihyaWdodE51bWVyaWMpKSB7CiAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEpT
QmlnSW50Kj4obGVmdE51bWVyaWMpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQq
PihyaWdodE51bWVyaWMpKSB7CkBAIC03NzMsOSArNzczLDkgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2JpdHhvcikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BCaXR4b3I+KCk7Ci0gICAgYXV0byBsZWZ0TnVtZXJpYyA9IEdFVF9DKGJ5dGVjb2RlLmxo
cykuanNWYWx1ZSgpLnRvQmlnSW50T3JJbnQzMihleGVjKTsKKyAgICBhdXRvIGxlZnROdW1lcmlj
ID0gR0VUX0MoYnl0ZWNvZGUubV9saHMpLmpzVmFsdWUoKS50b0JpZ0ludE9ySW50MzIoZXhlYyk7
CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgYXV0byByaWdodE51bWVyaWMgPSBHRVRfQyhi
eXRlY29kZS5yaHMpLmpzVmFsdWUoKS50b0JpZ0ludE9ySW50MzIoZXhlYyk7CisgICAgYXV0byBy
aWdodE51bWVyaWMgPSBHRVRfQyhieXRlY29kZS5tX3JocykuanNWYWx1ZSgpLnRvQmlnSW50T3JJ
bnQzMihleGVjKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKICAgICBpZiAoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPEpTQmlnSW50Kj4ocmlnaHROdW1lcmljKSkgewogICAgICAgICBpZiAoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxKU0JpZ0ludCo+KGxlZnROdW1lcmljKSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPEpTQmlnSW50Kj4ocmlnaHROdW1lcmljKSkgewpAQCAtNzk0LDIxICs3OTQsMjEgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3R5cGVvZikKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BUeXBlb2Y+KCk7Ci0gICAgUkVUVVJOKGpzVHlwZVN0cmluZ0Zv
clZhbHVlKGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCkpKTsKKyAgICBSRVRV
Uk4oanNUeXBlU3RyaW5nRm9yVmFsdWUoZXhlYywgR0VUX0MoYnl0ZWNvZGUubV92YWx1ZSkuanNW
YWx1ZSgpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9pc19vYmplY3Rfb3JfbnVs
bCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BJc09iamVj
dE9yTnVsbD4oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGpzSXNPYmplY3RUeXBlT3JOdWxsKGV4
ZWMsIEdFVF9DKGJ5dGVjb2RlLm9wZXJhbmQpLmpzVmFsdWUoKSkpKTsKKyAgICBSRVRVUk4oanNC
b29sZWFuKGpzSXNPYmplY3RUeXBlT3JOdWxsKGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLm1fb3BlcmFu
ZCkuanNWYWx1ZSgpKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaXNfZnVuY3Rp
b24pCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSXNGdW5j
dGlvbj4oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKEdFVF9DKGJ5dGVjb2RlLm9wZXJhbmQpLmpz
VmFsdWUoKS5pc0Z1bmN0aW9uKHZtKSkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oR0VUX0MoYnl0
ZWNvZGUubV9vcGVyYW5kKS5qc1ZhbHVlKCkuaXNGdW5jdGlvbih2bSkpKTsKIH0KIAogU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2luX2J5X3ZhbCkKQEAgLTgxNiw3ICs4MTYsNyBAQCBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfaW5fYnlfdmFsKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcEluQnlWYWw+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShleGVjKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6
b3BJbkJ5VmFsKGV4ZWMsIEdFVF9DKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKSwgR0VUX0MoYnl0
ZWNvZGUucHJvcGVydHkpLmpzVmFsdWUoKSwgJm1ldGFkYXRhLmFycmF5UHJvZmlsZSkpKTsKKyAg
ICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGV4ZWMsIEdFVF9D
KGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLCBHRVRfQyhieXRlY29kZS5tX3Byb3BlcnR5KS5q
c1ZhbHVlKCksICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSkpKTsKIH0KIAogU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2luX2J5X2lkKQpAQCAtODI0LDIyICs4MjQsMjIgQEAgU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2luX2J5X2lkKQogICAgIEJFR0lOKCk7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wSW5CeUlkPigpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0
ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgaWYgKCFiYXNlVmFsdWUuaXNPYmplY3QoKSkK
ICAgICAgICAgVEhST1coY3JlYXRlSW52YWxpZEluUGFyYW1ldGVyRXJyb3IoZXhlYywgYmFzZVZh
bHVlKSk7CiAKLSAgICBSRVRVUk4oanNCb29sZWFuKGFzT2JqZWN0KGJhc2VWYWx1ZSktPmhhc1By
b3BlcnR5KGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3Bl
cnR5KSkpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKGFzT2JqZWN0KGJhc2VWYWx1ZSktPmhhc1By
b3BlcnR5KGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJv
cGVydHkpKSkpOwogfQogCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCkKIHsK
ICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BEZWxCeVZhbD4oKTsK
LSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLmJhc2UpLmpzVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgp
OwogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYmFzZVZhbHVlLnRvT2JqZWN0KGV4ZWMpOwog
ICAgIENIRUNLX0VYQ0VQVElPTigpOwogICAgIAotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gR0VU
X0MoYnl0ZWNvZGUucHJvcGVydHkpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9
IEdFVF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKICAgICAKICAgICBib29sIGNv
dWxkRGVsZXRlOwogICAgIApAQCAtODYzLDE0ICs4NjMsMTQgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3N0cmNhdCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BTdHJjYXQ+KCk7Ci0gICAgUkVUVVJOKGpzU3RyaW5nRnJvbVJlZ2lzdGVyQXJyYXkoZXhl
YywgJkdFVChieXRlY29kZS5zcmMpLCBieXRlY29kZS5jb3VudCkpOworICAgIFJFVFVSTihqc1N0
cmluZ0Zyb21SZWdpc3RlckFycmF5KGV4ZWMsICZHRVQoYnl0ZWNvZGUubV9zcmMpLCBieXRlY29k
ZS5tX2NvdW50KSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUp
CiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9QcmltaXRp
dmU+KCk7Ci0gICAgUkVUVVJOKEdFVF9DKGJ5dGVjb2RlLnNyYykuanNWYWx1ZSgpLnRvUHJpbWl0
aXZlKGV4ZWMpKTsKKyAgICBSRVRVUk4oR0VUX0MoYnl0ZWNvZGUubV9zcmMpLmpzVmFsdWUoKS50
b1ByaW1pdGl2ZShleGVjKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9lbnRlcikK
QEAgLTg4NSw3ICs4ODUsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2VudW1lcmFi
bGVfCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RW51
bWVyYWJsZUxlbmd0aD4oKTsKLSAgICBKU1ZhbHVlIGVudW1lcmF0b3JWYWx1ZSA9IEdFVChieXRl
Y29kZS5iYXNlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBlbnVtZXJhdG9yVmFsdWUgPSBHRVQo
Ynl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgaWYgKGVudW1lcmF0b3JWYWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBSRVRVUk4oanNOdW1iZXIoMCkpOwogCkBAIC04OTks
MTAgKzg5OSwxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaGFzX2luZGV4ZWRfcHJvCiAg
ICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzSW5kZXhlZFByb3Bl
cnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoZXhlYyk7Ci0g
ICAgSlNPYmplY3QqIGJhc2UgPSBHRVQoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0
KGV4ZWMpOworICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1
ZSgpLnRvT2JqZWN0KGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUg
cHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUucHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBtZXRhZGF0
YS5hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlLT5zdHJ1Y3R1cmUodm0pKTsKKyAg
ICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsK
KyAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlKGJhc2UtPnN0cnVj
dHVyZSh2bSkpOwogICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMigpKTsKICAgICBSRVRVUk4o
anNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5R2VuZXJpYyhleGVjLCBwcm9wZXJ0eS5hc1VJbnQz
MigpLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0T3duUHJvcGVydHkpKSk7
CiB9CkBAIC05MTEsMTEgKzkxMSwxMSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfaGFzX3N0
cnVjdHVyZV9wCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
SGFzU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVQoYnl0ZWNv
ZGUuYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0KiBiYXNlID0g
R0VUKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGV4ZWMpOwogICAgIENIRUNL
X0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUucHJvcGVy
dHkpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxs
KCkpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1Zh
bHVlKCkuYXNDZWxsKCkpOwogICAgIGlmIChiYXNlLT5zdHJ1Y3R1cmUodm0pLT5pZCgpID09IGVu
dW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCiAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4o
dHJ1ZSkpOwogICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7CkBAIC05
MjgsOSArOTI4LDkgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2hhc19nZW5lcmljX3Bybwog
ewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0dlbmVyaWNQ
cm9wZXJ0eT4oKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVChieXRlY29kZS5iYXNlKS5qc1Zh
bHVlKCkudG9PYmplY3QoZXhlYyk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBHRVQoYnl0ZWNvZGUu
bV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5wcm9wZXJ0eSkuanNWYWx1ZSgp
OworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1
ZSgpOwogICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKICAgICBKU1N0cmluZyogc3Ry
aW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5n
LT50b0lkZW50aWZpZXIoZXhlYyk7CkBAIC05NDIsOCArOTQyLDggQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gR0VUX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgcHJvcGVydHkg
PSBHRVQoYnl0ZWNvZGUucHJvcGVydHkpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgcHJvcGVy
dHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwogICAgIEFTU0VSVChwcm9w
ZXJ0eS5pc1N0cmluZygpKTsKICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVy
dHkpOwogICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZXhlYyk7
CkBAIC05NTUsNyArOTU1LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9wcm9wZXJ0
eV9lbgogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldFBy
b3BlcnR5RW51bWVyYXRvcj4oKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVChieXRlY29k
ZS5iYXNlKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVQoYnl0ZWNvZGUu
bV9iYXNlKS5qc1ZhbHVlKCk7CiAgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQogICAgICAgICBSRVRVUk4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0pKTsK
IApAQCAtOTY5LDggKzk2OSw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9lbnVtZXJhdG9y
X3N0cnUKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVt
ZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29k
ZS5lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIHVpbnQzMl90IGluZGV4ID0g
R0VUKGJ5dGVjb2RlLmluZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKKyAgICBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAg
ICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50
MzIoKTsKIAogICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBudWxscHRyOwogICAgIGlmIChp
bmRleCA8IGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSkKQEAgLTk4Miw4
ICs5ODIsOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZW51bWVyYXRvcl9nZW5lCiB7CiAg
ICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdlbmVy
aWNQbmFtZT4oKTsKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBq
c0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLmVudW1lcmF0b3Ip
LmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUu
aW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0
ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworICAgIHVpbnQzMl90IGlu
ZGV4ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpOwogCiAgICAg
SlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IG51bGxwdHI7CiAgICAgaWYgKGVudW1lcmF0b3ItPmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSA8PSBpbmRleCAmJiBpbmRleCA8IGVudW1lcmF0b3It
PmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCkpCkBAIC05OTUsNyArOTk1LDcgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZwogewogICAgIEJFR0lOKCk7CiAgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgUkVUVVJOKGpzU3Ry
aW5nKGV4ZWMsIElkZW50aWZpZXI6OmZyb20oZXhlYywgR0VUKGJ5dGVjb2RlLmluZGV4KS5qc1Zh
bHVlKCkuYXNVSW50MzIoKSkuc3RyaW5nKCkpKTsKKyAgICBSRVRVUk4oanNTdHJpbmcoZXhlYywg
SWRlbnRpZmllcjo6ZnJvbShleGVjLCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFz
VUludDMyKCkpLnN0cmluZygpKSk7CiB9CiAKIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wcm9m
aWxlX3R5cGVfY2xlYXJfbG9nKQpAQCAtMTAxNiwxMCArMTAxNiwxMCBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50PigpOwotICAgIGludCBz
Y29wZVJlZyA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOworICAgIGludCBzY29wZVJlZyA9IGJ5
dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CiAgICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gZXhl
Yy0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNjb3BlKCk7Ci0gICAgU3ltYm9sVGFi
bGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5bWJvbFRhYmxlKj4oR0VUX0MoYnl0ZWNvZGUuc3lt
Ym9sVGFibGUpLmpzVmFsdWUoKSk7Ci0gICAgSlNWYWx1ZSBpbml0aWFsVmFsdWUgPSBHRVRfQyhi
eXRlY29kZS5pbml0aWFsVmFsdWUpLmpzVmFsdWUoKTsKKyAgICBTeW1ib2xUYWJsZSogc3ltYm9s
VGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPihHRVRfQyhieXRlY29kZS5tX3N5bWJvbFRhYmxl
KS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgaW5pdGlhbFZhbHVlID0gR0VUX0MoYnl0ZWNvZGUu
bV9pbml0aWFsVmFsdWUpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoaW5pdGlhbFZhbHVlID09IGpz
VW5kZWZpbmVkKCkgfHwgaW5pdGlhbFZhbHVlID09IGpzVERaVmFsdWUoKSk7CiAgICAgSlNTY29w
ZSogbmV3U2NvcGUgPSBKU0xleGljYWxFbnZpcm9ubWVudDo6Y3JlYXRlKHZtLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIGN1cnJlbnRTY29wZSwgc3ltYm9sVGFibGUsIGluaXRpYWxWYWx1
ZSk7CiAgICAgUkVUVVJOKG5ld1Njb3BlKTsKQEAgLTEwMjksMTAgKzEwMjksMTAgQEAgU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX3B1c2hfd2l0aF9zY29wZQogewogICAgIEJFR0lOKCk7CiAgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcFB1c2hXaXRoU2NvcGU+KCk7Ci0gICAgSlNPYmplY3Qq
IG5ld1Njb3BlID0gR0VUX0MoYnl0ZWNvZGUubmV3U2NvcGUpLmpzVmFsdWUoKS50b09iamVjdChl
eGVjKTsKKyAgICBKU09iamVjdCogbmV3U2NvcGUgPSBHRVRfQyhieXRlY29kZS5tX25ld1Njb3Bl
KS5qc1ZhbHVlKCkudG9PYmplY3QoZXhlYyk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAg
ICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5jdXJyZW50U2NvcGUub2Zmc2V0KCk7CisgICAgaW50
IHNjb3BlUmVnID0gYnl0ZWNvZGUubV9jdXJyZW50U2NvcGUub2Zmc2V0KCk7CiAgICAgSlNTY29w
ZSogY3VycmVudFNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihzY29wZVJlZykuUmVnaXN0ZXI6OnNj
b3BlKCk7CiAgICAgUkVUVVJOKEpTV2l0aFNjb3BlOjpjcmVhdGUodm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgY3VycmVudFNjb3BlLCBuZXdTY29wZSkpOwogfQpAQCAtMTA0MSw4ICsx
MDQxLDggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGVfZgogewogICAg
IEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZUZvckhv
aXN0aW5nRnVuY0RlY2xJbkV2YWw+KCk7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBl
eGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgSlNT
Y29wZSogc2NvcGUgPSBleGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpKS5S
ZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGV4ZWMtPmNv
ZGVCbG9jaygpLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgIEpTU2NvcGUq
IHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdp
c3Rlcjo6c2NvcGUoKTsKICAgICBKU1ZhbHVlIHJlc29sdmVkU2NvcGUgPSBKU1Njb3BlOjpyZXNv
bHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsKGV4ZWMsIHNjb3BlLCBpZGVudCk7CiAK
ICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTEwNTUsMTMgKzEwNTUsMTMgQEAgU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wUmVzb2x2ZVNjb3BlPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoZXhlYyk7Ci0gICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBl
eGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihieXRlY29kZS52YXIpOwotICAgIEpTU2NvcGUq
IHNjb3BlID0gZXhlYy0+dW5jaGVja2VkUihieXRlY29kZS5zY29wZS5vZmZzZXQoKSkuUmVnaXN0
ZXI6OnNjb3BlKCk7CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBleGVjLT5jb2RlQmxv
Y2soKS0+aWRlbnRpZmllcihieXRlY29kZS5tX3Zhcik7CisgICAgSlNTY29wZSogc2NvcGUgPSBl
eGVjLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29w
ZSgpOwogICAgIEpTT2JqZWN0KiByZXNvbHZlZFNjb3BlID0gSlNTY29wZTo6cmVzb2x2ZShleGVj
LCBzY29wZSwgaWRlbnQpOwogICAgIC8vIFByb3h5IGNhbiB0aHJvdyBhbiBlcnJvciBoZXJlLCBl
LmcuIFByb3h5IGluIHdpdGggc3RhdGVtZW50J3MgQHVuc2NvcGFibGVzLgogICAgIENIRUNLX0VY
Q0VQVElPTigpOwogCi0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5yZXNv
bHZlVHlwZTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2
ZVR5cGU7CiAKICAgICAvLyBNb2R1bGVWYXIgZG9lcyBub3Qga2VlcCB0aGUgc2NvcGUgcmVnaXN0
ZXIgdmFsdWUgYWxpdmUgaW4gREZHLgogICAgIEFTU0VSVChyZXNvbHZlVHlwZSAhPSBNb2R1bGVW
YXIpOwpAQCAtMTA3NCwyMCArMTA3NCwyMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVz
b2x2ZV9zY29wZSkKICAgICAgICAgICAgIGlmIChoYXNQcm9wZXJ0eSkgewogICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7
CiAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSkK
LSAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEucmVzb2x2ZVR5cGUgPSBHbG9iYWxQcm9wZXJ0
eTsKKyAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9yZXNvbHZlVHlwZSA9IEdsb2JhbFBy
b3BlcnR5OwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWV0YWRh
dGEucmVzb2x2ZVR5cGUgPSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M7Cisg
ICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUgPSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M7CiAKLSAgICAgICAgICAgICAgICBtZXRhZGF0YS5nbG9i
YWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9nbG9i
YWxPYmplY3QgPSBnbG9iYWxPYmplY3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAocmVzb2x2ZWRTY29wZS0+aXNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSkgewogICAgICAg
ICAgICAgSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQqIGdsb2JhbExleGljYWxFbnZpcm9ubWVu
dCA9IGpzQ2FzdDxKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCo+KHJlc29sdmVkU2NvcGUpOwog
ICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+
bV9sb2NrKTsKICAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBVbnJlc29sdmVkUHJvcGVy
dHkpCi0gICAgICAgICAgICAgICAgbWV0YWRhdGEucmVzb2x2ZVR5cGUgPSBHbG9iYWxMZXhpY2Fs
VmFyOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGUgPSBHbG9iYWxMZXhp
Y2FsVmFyOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1ldGFkYXRhLnJlc29s
dmVUeXBlID0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M7Ci0gICAgICAg
ICAgICBtZXRhZGF0YS5nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBnbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQ7CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9yZXNvbHZlVHlwZSA9IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOworICAgICAgICAgICAgbWV0YWRhdGEu
bV9nbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQ7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTEwOTgsMTAgKzEwOTgsMTAgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2NyZWF0ZV9yZXN0KQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcENyZWF0ZVJlc3Q+KCk7Ci0gICAgdW5zaWduZWQgYXJyYXlTaXplID0gR0VU
X0MoYnl0ZWNvZGUuYXJyYXlTaXplKS5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKKyAgICB1bnNpZ25l
ZCBhcnJheVNpemUgPSBHRVRfQyhieXRlY29kZS5tX2FycmF5U2l6ZSkuanNWYWx1ZSgpLmFzVUlu
dDMyKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+
cmVzdFBhcmFtZXRlclN0cnVjdHVyZSgpOwotICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9
IGJ5dGVjb2RlLm51bVBhcmFtZXRlcnNUb1NraXA7CisgICAgdW5zaWduZWQgbnVtUGFyYW1zVG9T
a2lwID0gYnl0ZWNvZGUubV9udW1QYXJhbWV0ZXJzVG9Ta2lwOwogICAgIEpTVmFsdWUqIGFyZ3Vt
ZW50c1RvQ29weVJlZ2lvbiA9IGV4ZWMtPmFkZHJlc3NPZkFyZ3VtZW50c1N0YXJ0KCkgKyBudW1Q
YXJhbXNUb1NraXA7CiAgICAgUkVUVVJOKGNvbnN0cnVjdEFycmF5KGV4ZWMsIHN0cnVjdHVyZSwg
YXJndW1lbnRzVG9Db3B5UmVnaW9uLCBhcnJheVNpemUpKTsKIH0KQEAgLTExMTAsOSArMTExMCw5
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWRfd2l0aF8KIHsKICAgICBCRUdJ
TigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmll
cihieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRl
Y29kZS5iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsID0gR0VUX0MoYnl0ZWNv
ZGUudGhpc1ZhbHVlKS5qc1ZhbHVlKCk7CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBl
eGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgdGhpc1ZhbCA9IEdFVF9DKGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKS5qc1ZhbHVlKCk7
CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhpc1ZhbCwgUHJvcGVydHlTbG90OjpQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGJhc2VW
YWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpOwogICAgIFJFVFVSTl9QUk9GSUxFRChyZXN1bHQp
OwpAQCAtMTEyMyw5ICsxMTIzLDkgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV92
YWxfd2l0aAogICAgIEJFR0lOKCk7CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0
QnlWYWxXaXRoVGhpcz4oKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2Rl
LmJhc2UpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IEdFVF9DKGJ5dGVjb2Rl
LnRoaXNWYWx1ZSkuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gR0VUX0MoYnl0
ZWNvZGUucHJvcGVydHkpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9D
KGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gR0VU
X0MoYnl0ZWNvZGUubV90aGlzVmFsdWUpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlw
dCA9IEdFVF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKIAogICAgIGlmIChMSUtF
TFkoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIHN1YnNjcmlwdC5pc1N0cmluZygpKSkgewogICAgICAg
ICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSh2
bSk7CkBAIC0xMTU4LDEwICsxMTU4LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRf
YnlfaWRfd2l0aF8KICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQ
dXRCeUlkV2l0aFRoaXM+KCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGNvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5wcm9wZXJ0eSk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhi
eXRlY29kZS5iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsID0gR0VUX0MoYnl0
ZWNvZGUudGhpc1ZhbHVlKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBwdXRWYWx1ZSA9IEdFVF9D
KGJ5dGVjb2RlLnZhbHVlKS5qc1ZhbHVlKCk7CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBKU1Zh
bHVlIHRoaXNWYWwgPSBHRVRfQyhieXRlY29kZS5tX3RoaXNWYWx1ZSkuanNWYWx1ZSgpOworICAg
IEpTVmFsdWUgcHV0VmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpc1ZhbCwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUo
KSwgY29kZUJsb2NrLT5wdXRCeUlkQ29udGV4dCgpKTsKICAgICBiYXNlVmFsdWUucHV0SW5saW5l
KGV4ZWMsIGlkZW50LCBwdXRWYWx1ZSwgc2xvdCk7CiAgICAgRU5EKCk7CkBAIC0xMTcxLDEwICsx
MTcxLDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmFsX3dpdGgKIHsKICAg
ICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BQdXRCeVZhbFdpdGhUaGlz
PigpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1
ZSgpOwotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gR0VUX0MoYnl0ZWNvZGUudGhpc1ZhbHVlKS5q
c1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBHRVRfQyhieXRlY29kZS5wcm9wZXJ0
eSkuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBHRVRfQyhieXRlY29kZS52YWx1ZSku
anNWYWx1ZSgpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNl
KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX3Ro
aXNWYWx1ZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0ID0gR0VUX0MoYnl0ZWNv
ZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWUgPSBHRVRfQyhieXRl
Y29kZS5tX3ZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgCiAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNj
cmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwpAQCAtMTE4
NywxMCArMTE4NywxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVmaW5lX2RhdGFfcHJv
CiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRGVmaW5lRGF0
YVByb3BlcnR5PigpOwotICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoR0VUX0MoYnl0ZWNv
ZGUuYmFzZSkuanNWYWx1ZSgpKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUX0MoYnl0ZWNv
ZGUucHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gR0VUX0MoYnl0ZWNv
ZGUudmFsdWUpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIGF0dHJpYnV0ZXMgPSBHRVRfQyhieXRl
Y29kZS5hdHRyaWJ1dGVzKS5qc1ZhbHVlKCk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBhc09iamVj
dChHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSBwcm9wZXJ0
eSA9IEdFVF9DKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZh
bHVlID0gR0VUX0MoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgYXR0
cmlidXRlcyA9IEdFVF9DKGJ5dGVjb2RlLm1fYXR0cmlidXRlcykuanNWYWx1ZSgpOwogICAgIEFT
U0VSVChhdHRyaWJ1dGVzLmlzSW50MzIoKSk7CiAKICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHBy
b3BlcnR5LnRvUHJvcGVydHlLZXkoZXhlYyk7CkBAIC0xMjA1LDExICsxMjA1LDExIEBAIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9kZWZpbmVfYWNjZXNzb3IKIHsKICAgICBCRUdJTigpOwogICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BEZWZpbmVBY2Nlc3NvclByb3BlcnR5PigpOwotICAg
IEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoR0VUX0MoYnl0ZWNvZGUuYmFzZSkuanNWYWx1ZSgp
KTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUX0MoYnl0ZWNvZGUucHJvcGVydHkpLmpzVmFs
dWUoKTsKLSAgICBKU1ZhbHVlIGdldHRlciA9IEdFVF9DKGJ5dGVjb2RlLmdldHRlcikuanNWYWx1
ZSgpOwotICAgIEpTVmFsdWUgc2V0dGVyID0gR0VUX0MoYnl0ZWNvZGUuc2V0dGVyKS5qc1ZhbHVl
KCk7Ci0gICAgSlNWYWx1ZSBhdHRyaWJ1dGVzID0gR0VUX0MoYnl0ZWNvZGUuYXR0cmlidXRlcyku
anNWYWx1ZSgpOworICAgIEpTT2JqZWN0KiBiYXNlID0gYXNPYmplY3QoR0VUX0MoYnl0ZWNvZGUu
bV9iYXNlKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVRfQyhieXRlY29k
ZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBnZXR0ZXIgPSBHRVRfQyhieXRl
Y29kZS5tX2dldHRlcikuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgc2V0dGVyID0gR0VUX0MoYnl0
ZWNvZGUubV9zZXR0ZXIpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGF0dHJpYnV0ZXMgPSBHRVRf
QyhieXRlY29kZS5tX2F0dHJpYnV0ZXMpLmpzVmFsdWUoKTsKICAgICBBU1NFUlQoYXR0cmlidXRl
cy5pc0ludDMyKCkpOwogCiAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOwpAQCAtMTIyNCwxMCArMTIyNCwxMCBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfdGhyb3dfc3RhdGljX2VyCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wVGhyb3dTdGF0aWNFcnJvcj4oKTsKLSAgICBKU1ZhbHVlIGVycm9yTWVzc2Fn
ZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubWVzc2FnZSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUg
ZXJyb3JNZXNzYWdlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX21lc3NhZ2UpLmpzVmFsdWUoKTsK
ICAgICBSRUxFQVNFX0FTU0VSVChlcnJvck1lc3NhZ2VWYWx1ZS5pc1N0cmluZygpKTsKICAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlID0gYXNTdHJpbmcoZXJyb3JNZXNzYWdlVmFsdWUpLT52YWx1ZShl
eGVjKTsKLSAgICBFcnJvclR5cGUgZXJyb3JUeXBlID0gYnl0ZWNvZGUuZXJyb3JUeXBlOworICAg
IEVycm9yVHlwZSBlcnJvclR5cGUgPSBieXRlY29kZS5tX2Vycm9yVHlwZTsKICAgICBUSFJPVyhj
cmVhdGVFcnJvcihleGVjLCBlcnJvclR5cGUsIGVycm9yTWVzc2FnZSkpOwogfQogCkBAIC0xMjM1
LDExICsxMjM1LDExIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlfd2l0aF8K
IHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdBcnJheVdp
dGhTcHJlYWQ+KCk7Ci0gICAgaW50IG51bUl0ZW1zID0gYnl0ZWNvZGUuYXJnYzsKKyAgICBpbnQg
bnVtSXRlbXMgPSBieXRlY29kZS5tX2FyZ2M7CiAgICAgQVNTRVJUKG51bUl0ZW1zID49IDApOwot
ICAgIGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yID0gZXhlYy0+Y29kZUJsb2NrKCktPnVubGlu
a2VkQ29kZUJsb2NrKCktPmJpdFZlY3RvcihieXRlY29kZS5iaXRWZWN0b3IpOworICAgIGNvbnN0
IEJpdFZlY3RvciYgYml0VmVjdG9yID0gZXhlYy0+Y29kZUJsb2NrKCktPnVubGlua2VkQ29kZUJs
b2NrKCktPmJpdFZlY3RvcihieXRlY29kZS5tX2JpdFZlY3Rvcik7CiAKLSAgICBKU1ZhbHVlKiB2
YWx1ZXMgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZHRVQoYnl0ZWNvZGUuYXJndikpOworICAg
IEpTVmFsdWUqIHZhbHVlcyA9IGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oJkdFVChieXRlY29kZS5t
X2FyZ3YpKTsKIAogICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBjaGVja2Vk
QXJyYXlTaXplID0gMDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZW1zOyBpKyspIHsK
QEAgLTEyODksOSArMTI4OSw5IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZXdfYXJyYXlf
YnVmZmUKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BOZXdB
cnJheUJ1ZmZlcj4oKTsKLSAgICBBU1NFUlQoZXhlYy0+Y29kZUJsb2NrKCktPmlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGJ5dGVjb2RlLmltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkpOwotICAg
IEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8
SlNJbW11dGFibGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29kZS5pbW11dGFibGVCdXR0ZXJmbHkp
LmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGV4ZWMpLmFycmF5QWxsb2NhdGlvblByb2ZpbGU7CisgICAgQVNTRVJUKGV4ZWMtPmNvZGVC
bG9jaygpLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChieXRlY29kZS5tX2ltbXV0YWJsZUJ1dHRl
cmZseS5vZmZzZXQoKSkpOworICAgIEpTSW1tdXRhYmxlQnV0dGVyZmx5KiBpbW11dGFibGVCdXR0
ZXJmbHkgPSBiaXR3aXNlX2Nhc3Q8SlNJbW11dGFibGVCdXR0ZXJmbHkqPihHRVRfQyhieXRlY29k
ZS5tX2ltbXV0YWJsZUJ1dHRlcmZseSkuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBhdXRvJiBw
cm9maWxlID0gYnl0ZWNvZGUubWV0YWRhdGEoZXhlYykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
OwogCiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nTW9kZSA9IHByb2ZpbGUuc2VsZWN0SW5kZXhp
bmdUeXBlKCk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihp
bmRleGluZ01vZGUpOwpAQCAtMTMwOSw3ICsxMzA5LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25ld19hcnJheV9idWZmZQogICAgICAgICAvLyBXZSBhbHNvIGNhbm5vdCBhbGxvY2F0ZSBh
IG5ldyBidXR0ZXJmbHkgZnJvbSBjb21waWxhdGlvbiB0aHJlYWRzIHNpbmNlIGl0J3MgaW52YWxp
ZCB0byBhbGxvY2F0ZSBjZWxscyBmcm9tCiAgICAgICAgIC8vIGEgY29tcGlsYXRpb24gdGhyZWFk
LgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICBjb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIoYnl0ZWNvZGUuaW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQo
dm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5Lm9mZnNldCgpKS5z
ZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsKICAgICAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKICAgICB9CiAKQEAgLTEzMjQsNyArMTMyNCw3IEBAIFNMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9zcHJlYWQpCiAgICAgQkVHSU4oKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BTcHJlYWQ+KCk7Ci0gICAgSlNWYWx1ZSBpdGVyYWJsZSA9IEdFVF9DKGJ5dGVj
b2RlLmFyZ3VtZW50KS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IEdFVF9DKGJ5
dGVjb2RlLm1fYXJndW1lbnQpLmpzVmFsdWUoKTsKIAogICAgIGlmIChpdGVyYWJsZS5pc0NlbGwo
KSAmJiBpc0pTQXJyYXkoaXRlcmFibGUuYXNDZWxsKCkpKSB7CiAgICAgICAgIEpTQXJyYXkqIGFy
cmF5ID0ganNDYXN0PEpTQXJyYXkqPihpdGVyYWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMjQwMDI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjMsNyArMTIzLDcgQEAgaW5saW5lIHZvaWQgdHJ5Q2FjaGVQdXRUb1Nj
b3BlR2xvYmFsKAogewogICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5
IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0IGtub3cgaG93
IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEoZXhlYyk7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRh
ZGF0YS5nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBpZiAocmVzb2x2
ZVR5cGUgIT0gR2xvYmFsUHJvcGVydHkgJiYgcmVzb2x2ZVR5cGUgIT0gR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIAogICAgICAgICAmJiByZXNvbHZlVHlwZSAhPSBVbnJlc29s
dmVkUHJvcGVydHkgJiYgcmVzb2x2ZVR5cGUgIT0gVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTMzLDE2ICsxMzMsMTYgQEAgaW5s
aW5lIHZvaWQgdHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKAogICAgICAgICAgICAgUmVzb2x2ZVR5
cGUgbmV3UmVzb2x2ZVR5cGUgPSByZXNvbHZlVHlwZSA9PSBVbnJlc29sdmVkUHJvcGVydHkgPyBH
bG9iYWxQcm9wZXJ0eSA6IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczsKICAg
ICAgICAgICAgIHJlc29sdmVUeXBlID0gbmV3UmVzb2x2ZVR5cGU7CiAgICAgICAgICAgICBDb25j
dXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIG1l
dGFkYXRhLmdldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2
ZU1vZGUoKSwgbmV3UmVzb2x2ZVR5cGUsIG1ldGFkYXRhLmdldFB1dEluZm8uaW5pdGlhbGl6YXRp
b25Nb2RlKCkpOworICAgICAgICAgICAgbWV0YWRhdGEubV9nZXRQdXRJbmZvID0gR2V0UHV0SW5m
byhtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgbmV3UmVzb2x2ZVR5cGUsIG1l
dGFkYXRhLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoc2NvcGUtPmlzR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KCkpIHsKICAgICAgICAgICAg
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KiBnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQgPSBq
c0Nhc3Q8SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQqPihzY29wZSk7CiAgICAgICAgICAgICBS
ZXNvbHZlVHlwZSBuZXdSZXNvbHZlVHlwZSA9IHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9w
ZXJ0eSA/IEdsb2JhbExleGljYWxWYXIgOiBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczsKLSAgICAgICAgICAgIG1ldGFkYXRhLmdldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1l
dGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgbmV3UmVzb2x2ZVR5cGUsIG1ldGFkYXRh
LmdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpOworICAgICAgICAgICAgbWV0YWRhdGEu
bV9nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZU1v
ZGUoKSwgbmV3UmVzb2x2ZVR5cGUsIG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlv
bk1vZGUoKSk7CiAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsTGV4
aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwogICAgICAgICAgICAgQ29uY3VycmVudEpT
TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBtZXRhZGF0YS53
YXRjaHBvaW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOwotICAgICAgICAgICAgbWV0YWRh
dGEub3BlcmFuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihnbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSkuc2xvdCgpKTsKKyAgICAg
ICAgICAgIG1ldGFkYXRhLm1fd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsK
KyAgICAgICAgICAgIG1ldGFkYXRhLm1fb3BlcmFuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihnbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZz
ZXQoKSkuc2xvdCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE2NSw4ICsxNjUsOCBA
QCBpbmxpbmUgdm9pZCB0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoCiAgICAgICAgIHNjb3BlLT5z
dHJ1Y3R1cmUodm0pLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogCiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICBtZXRhZGF0YS5zdHJ1Y3R1cmUuc2V0KHZtLCBjb2RlQmxvY2ss
IHNjb3BlLT5zdHJ1Y3R1cmUodm0pKTsKLSAgICAgICAgbWV0YWRhdGEub3BlcmFuZCA9IHNsb3Qu
Y2FjaGVkT2Zmc2V0KCk7CisgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlLnNldCh2bSwgY29k
ZUJsb2NrLCBzY29wZS0+c3RydWN0dXJlKHZtKSk7CisgICAgICAgIG1ldGFkYXRhLm1fb3BlcmFu
ZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgfQogfQogCkBAIC0xNzQsMjMgKzE3NCwyMyBA
QCBpbmxpbmUgdm9pZCB0cnlDYWNoZUdldEZyb21TY29wZUdsb2JhbCgKICAgICBFeGVjU3RhdGUq
IGV4ZWMsIFZNJiB2bSwgT3BHZXRGcm9tU2NvcGUmIGJ5dGVjb2RlLCBKU09iamVjdCogc2NvcGUs
IFByb3BlcnR5U2xvdCYgc2xvdCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShleGVjKTsKLSAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgp
OwogCiAgICAgaWYgKHJlc29sdmVUeXBlID09IFVucmVzb2x2ZWRQcm9wZXJ0eSB8fCByZXNvbHZl
VHlwZSA9PSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAg
ICAgIGlmIChzY29wZS0+aXNHbG9iYWxPYmplY3QoKSkgewogICAgICAgICAgICAgUmVzb2x2ZVR5
cGUgbmV3UmVzb2x2ZVR5cGUgPSByZXNvbHZlVHlwZSA9PSBVbnJlc29sdmVkUHJvcGVydHkgPyBH
bG9iYWxQcm9wZXJ0eSA6IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczsKICAg
ICAgICAgICAgIHJlc29sdmVUeXBlID0gbmV3UmVzb2x2ZVR5cGU7IC8vIEFsbG93IGJlbG93IGNh
Y2hpbmcgbWVjaGFuaXNtIHRvIGtpY2sgaW4uCiAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOwotICAgICAgICAgICAgbWV0YWRh
dGEuZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8obWV0YWRhdGEuZ2V0UHV0SW5mby5yZXNvbHZlTW9k
ZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRhdGEuZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1v
ZGUoKSk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2dldFB1dEluZm8gPSBHZXRQdXRJbmZvKG1l
dGFkYXRhLm1fZ2V0UHV0SW5mby5yZXNvbHZlTW9kZSgpLCBuZXdSZXNvbHZlVHlwZSwgbWV0YWRh
dGEubV9nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKTsKICAgICAgICAgfSBlbHNlIGlm
IChzY29wZS0+aXNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQoKSkgewogICAgICAgICAgICAgSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQqIGdsb2JhbExleGljYWxFbnZpcm9ubWVudCA9IGpzQ2Fz
dDxKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudCo+KHNjb3BlKTsKICAgICAgICAgICAgIFJlc29s
dmVUeXBlIG5ld1Jlc29sdmVUeXBlID0gcmVzb2x2ZVR5cGUgPT0gVW5yZXNvbHZlZFByb3BlcnR5
ID8gR2xvYmFsTGV4aWNhbFZhciA6IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOwogICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbExleGljYWxF
bnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50LmltcGwoKSk7CiAgICAgICAgICAg
ICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7Ci0gICAgICAgICAgICBtZXRhZGF0
YS5nZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhtZXRhZGF0YS5nZXRQdXRJbmZvLnJlc29sdmVNb2Rl
KCksIG5ld1Jlc29sdmVUeXBlLCBtZXRhZGF0YS5nZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKTsKLSAgICAgICAgICAgIG1ldGFkYXRhLndhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBv
aW50U2V0KCk7Ci0gICAgICAgICAgICBtZXRhZGF0YS5vcGVyYW5kID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGdsb2JhbExleGljYWxFbnZpcm9ubWVudC0+dmFyaWFibGVBdChlbnRyeS5z
Y29wZU9mZnNldCgpKS5zbG90KCkpOworICAgICAgICAgICAgbWV0YWRhdGEubV9nZXRQdXRJbmZv
ID0gR2V0UHV0SW5mbyhtZXRhZGF0YS5tX2dldFB1dEluZm8ucmVzb2x2ZU1vZGUoKSwgbmV3UmVz
b2x2ZVR5cGUsIG1ldGFkYXRhLm1fZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSk7Cisg
ICAgICAgICAgICBtZXRhZGF0YS5tX3dhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0
KCk7CisgICAgICAgICAgICBtZXRhZGF0YS5tX29wZXJhbmQgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oZ2xvYmFsTGV4aWNhbEVudmlyb25tZW50LT52YXJpYWJsZUF0KGVudHJ5LnNjb3Bl
T2Zmc2V0KCkpLnNsb3QoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwMyw4ICsyMDMsOCBA
QCBpbmxpbmUgdm9pZCB0cnlDYWNoZUdldEZyb21TY29wZUdsb2JhbCgKICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gc2NvcGUtPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgICAgICAgICAgbWV0YWRhdGEuc3RydWN0dXJlLnNldCh2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLm9wZXJhbmQgPSBzbG90
LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fc3RydWN0dXJlLnNl
dCh2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1f
b3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>