<?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>134616</bug_id>
          <alias>profile_types</alias>
          <creation_ts>2014-07-03 16:14:29 -0700</creation_ts>
          <short_desc>Add more coverage for the profile_types_with_high_fidelity op code</short_desc>
          <delta_ts>2014-07-06 21:49:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fpizlo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1020397</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-03 16:14:29 -0700</bug_when>
    <thetext>For more types to be profiled, we need better coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020422</commentid>
    <comment_count>1</comment_count>
      <attachid>234384</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-03 17:55:20 -0700</bug_when>
    <thetext>Created attachment 234384
patch

More operations are now being recorded by the profile_types_with_high_fidelity 
opcode. Specifically: function parameters, function return values,
function &apos;this&apos; value, get_by_id, get_by_value, resolve nodes, function return 
values at the call site. Added more flags to the profile_types_with_high_fidelity
opcode so more focused tasks can take place when the instruction is
being linked in CodeBlock. Re-worked the type profiler to search 
through character offset ranges when asked for the type of an expression
at a given offset. Removed redundant calls to Structure::toStructureShape
in HighFidelityLog and TypeSet by caching calls based on StructureID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020754</commentid>
    <comment_count>2</comment_count>
      <attachid>234384</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-06 20:41:38 -0700</bug_when>
    <thetext>Comment on attachment 234384
patch

I will land it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020762</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-06 21:49:42 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/170836</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234384</attachid>
            <date>2014-07-03 17:55:20 -0700</date>
            <delta_ts>2014-07-06 20:41:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>81928</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNzc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBA
QAorMjAxNC0wNy0wMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgbW9yZSBjb3ZlcmFnZSBmb3IgdGhlIHByb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5IG9wIGNvZGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzQ2MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3JlIG9wZXJhdGlvbnMgYXJlIG5vdyBiZWluZyByZWNvcmRlZCBieSB0aGUgcHJvZmls
ZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkgCisgICAgICAgIG9wY29kZS4gU3BlY2lmaWNhbGx5
OiBmdW5jdGlvbiBwYXJhbWV0ZXJzLCBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLAorICAgICAgICBm
dW5jdGlvbiAndGhpcycgdmFsdWUsIGdldF9ieV9pZCwgZ2V0X2J5X3ZhbHVlLCByZXNvbHZlIG5v
ZGVzLCBmdW5jdGlvbiByZXR1cm4gCisgICAgICAgIHZhbHVlcyBhdCB0aGUgY2FsbCBzaXRlLiBB
ZGRlZCBtb3JlIGZsYWdzIHRvIHRoZSBwcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9maWRlbGl0eQor
ICAgICAgICBvcGNvZGUgc28gbW9yZSBmb2N1c2VkIHRhc2tzIGNhbiB0YWtlIHBsYWNlIHdoZW4g
dGhlIGluc3RydWN0aW9uIGlzCisgICAgICAgIGJlaW5nIGxpbmtlZCBpbiBDb2RlQmxvY2suIFJl
LXdvcmtlZCB0aGUgdHlwZSBwcm9maWxlciB0byBzZWFyY2ggCisgICAgICAgIHRocm91Z2ggY2hh
cmFjdGVyIG9mZnNldCByYW5nZXMgd2hlbiBhc2tlZCBmb3IgdGhlIHR5cGUgb2YgYW4gZXhwcmVz
c2lvbgorICAgICAgICBhdCBhIGdpdmVuIG9mZnNldC4gUmVtb3ZlZCByZWR1bmRhbnQgY2FsbHMg
dG8gU3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlCisgICAgICAgIGluIEhpZ2hGaWRlbGl0eUxv
ZyBhbmQgVHlwZVNldCBieSBjYWNoaW5nIGNhbGxzIGJhc2VkIG9uIFN0cnVjdHVyZUlELgorCisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9m
ZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2NvcGVEZXBlbmRlbnRQcm9maWxlKToK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpyZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KToKKyAgICAgICAgKiBieXRlY29kZS9UeXBlTG9jYXRp
b24uaDoKKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpoaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4cHJlc3Np
b25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6YWRkSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNzaW9uSW5mbyk6CisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dE1vdmUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEdldEZyb21TY29wZVdpdGhQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRQdXRUb1Njb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRQdXRUb1Njb3BlV2l0aFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1
dEJ5VmFsKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nRXhwcmVzc2lvbkluZm8pOgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwOgorICAgICAgICAoSlNDOjpSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
RG90QWNjZXNzb3JOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNh
bGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJl
c29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsRG90Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToK
KyAgICAgICAgKEpTQzo6UG9zdGZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAgKEpTQzo6
UG9zdGZpeE5vZGU6OmVtaXREb3QpOgorICAgICAgICAoSlNDOjpQcmVmaXhOb2RlOjplbWl0UmVz
b2x2ZSk6CisgICAgICAgIChKU0M6OlByZWZpeE5vZGU6OmVtaXRCcmFja2V0KToKKyAgICAgICAg
KEpTQzo6UHJlZml4Tm9kZTo6ZW1pdERvdCk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlSZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnbkRvdE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6UmVhZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpS
ZXR1cm5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRSdW50aW1lVHlwZUZvclZhcmlhYmxlQXRPZmZzZXQpOgorICAgICAgICAoSW5zcGVjdG9y
OjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlRm9yVmFyaWFibGVJblRleHRS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50
aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uOgor
ICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OmdldEZyb21TY29wZUNvbW1vbik6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuaDoKKyAgICAgICAgKiBs
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRl
bGl0eUxvZy5jcHA6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vzc0hpZ2hG
aWRlbGl0eUxvZyk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6YWN0dWFsbHlQcm9j
ZXNzTG9nVGhyZWFkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OnJl
Y29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0hpZ2hGaWRlbGl0eUxvZy5oOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OnJl
Y29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxlcjo6Z2V0VHlwZXNGb3JWYXJpYWJsZUluQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpI
aWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmdldEdsb2JhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNl
dCk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0TG9jYWxUeXBl
c0ZvclZhcmlhYmxlQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXI6Omluc2VydE5ld0xvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVyOjpmaW5kTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXI6OmdldFR5cGVzRm9yVmFyaWFibGVJblJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRHbG9iYWxUeXBlc0ZvclZhcmlhYmxl
SW5SYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
cjo6Z2V0TG9jYWxUeXBlc0ZvclZhcmlhYmxlSW5SYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0TG9jYXRpb25CYXNlZEhhc2gpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmg6CisgICAg
ICAgIChKU0M6OkxvY2F0aW9uS2V5OjpMb2NhdGlvbktleSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkxvY2F0aW9uS2V5OjpoYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TG9jYXRpb25L
ZXk6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNw
cDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlKToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5jcHA6Cisg
ICAgICAgIChKU0M6OlR5cGVTZXQ6OlR5cGVTZXQpOgorICAgICAgICAoSlNDOjpUeXBlU2V0Ojph
ZGRUeXBlRm9yVmFsdWUpOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpzZWVuVHlwZXMpOgorICAg
ICAgICAoSlNDOjpUeXBlU2V0OjpyZW1vdmVEdXBsaWNhdGVzSW5TdHJ1Y3R1cmVIaXN0b3J5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuaDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU2hhcGU6OnNldENvbnN0cnVjdG9yTmFtZSk6CisgICAgICAgICogcnVudGltZS9WTS5j
cHA6CisgICAgICAgIChKU0M6OlZNOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpWTTo6ZHVtcEhpZ2hGaWRlbGl0eVByb2ZpbGluZ1R5cGVzKToKKyAgICAgICAg
KEpTQzo6Vk06OmdldFR5cGVzRm9yVmFyaWFibGVJblJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisKIDIwMTQtMDctMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBBbGxvY2F0ZSBhIG5ldyBHZXR0ZXJTZXR0ZXIgaWYg
d2UgY2hhbmdlIHRoZSB2YWx1ZSBvZiBhbnkgb2YgaXRzIGVudHJpZXMgb3RoZXIgdGhhbiB3aGVu
IHRoZXkgd2VyZSBwcmV2aW91c2x5IG51bGwsIHNvIHRoYXQgaWYgd2UgY29uc3RhbnQtaW5mZXIg
YW4gYWNjZXNzb3Igc2xvdCB0aGVuIHdlIGltbWVkaWF0ZWx5IGdldCB0aGUgZnVuY3Rpb24gY29u
c3RhbnQgZm9yIGZyZWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpc3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDE3MDc3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTEy
LDYgKzExMiw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9uZXh0X3BuYW1lIiwgImxl
bmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwg
Imxlbmd0aCIgOiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29w
ZSIsICJsZW5ndGgiIDogOCB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2Zyb21f
c2NvcGVfd2l0aF9wcm9maWxlIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF9wdXRfdG9fc2NvcGUiLCAibGVuZ3RoIiA6IDcgfSwKICAgICAgICAgICAgIHsgIm5h
bWUiIDogIm9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUiLCAibGVuZ3RoIiA6IDggfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1c2hfd2l0aF9zY29wZSIsICJsZW5ndGgiIDogMiB9
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNl
RGVmLmgJKHJldmlzaW9uIDE3MDc3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZVVzZURlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDcgQEAgdm9p
ZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxf
Y29uc3Rfbm9wOgogICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CiAgICAgY2FzZSBvcF9w
dXNoX25hbWVfc2NvcGU6CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6
CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToK
ICAgICBjYXNlIG9wX2dldF9ieV9pZDoKQEAgLTMxMyw2ICszMTQsNyBAQCB2b2lkIGNvbXB1dGVE
ZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CiAg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoK
KyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICBjYXNlIG9wX2dl
dF9mcm9tX3Njb3BlOgogICAgIGNhc2Ugb3BfY2FsbDoKICAgICBjYXNlIG9wX2NhbGxfZXZhbDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNzA3NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2NSw2ICsxNjY1LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9vc3JFeGl0Q291bnRlcigwKQog
ICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKICAgICAsIG1fcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIoMCkKKyAgICAsIG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldChudWxscHRy
KQogI2lmIEVOQUJMRShKSVQpCiAgICAgLCBtX2NhcGFiaWxpdHlMZXZlbFN0YXRlKERGRzo6Q2Fw
YWJpbGl0eUxldmVsTm90U2V0KQogI2VuZGlmCkBAIC0xODk4LDExICsxODk5LDEzIEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGU6
CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6IHsKLSAgICAgICAgICAgIFZhbHVlUHJv
ZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbb3BMZW5ndGggLSAxXS51Lm9wZXJh
bmRdOworICAgICAgICAgICAgaW50IG9mZnNldCA9IChwY1swXS51Lm9wY29kZSA9PSBvcF9nZXRf
ZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUgPyAyIDogMSk7CisgICAgICAgICAgICBWYWx1ZVByb2Zp
bGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3BjW29wTGVuZ3RoIC0gb2Zmc2V0XS51Lm9w
ZXJhbmRdOwogICAgICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0g
LTEpOwogICAgICAgICAgICAgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9IGk7Ci0gICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSBwcm9maWxlOworICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIG9mZnNldF0gPSBwcm9maWxlOwogCiAgICAg
ICAgICAgICAvLyBnZXRfZnJvbV9zY29wZSBkc3QsIHNjb3BlLCBpZCwgUmVzb2x2ZU1vZGVBbmRU
eXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50ID0gaWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpOwpAQCAtMTkxNSw2ICsxOTE4LDE0IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGVs
c2UgaWYgKG9wLnN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVd
LnUuc3RydWN0dXJlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5zdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKKworICAgICAgICAgICAgaWYgKHBjWzBdLnUub3Bjb2Rl
ID09IG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSkgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjdGlvbiBpczogZ2V0X2Zyb21fc2NvcGVfd2l0aF9w
cm9maWxlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVyZSwgT3Bl
cmFuZCwgLi4uLCBUeXBlTG9jYXRpb24KKyAgICAgICAgICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rp
b25PZmZzZXQgPSBpICsgb3BMZW5ndGggLSAxOworICAgICAgICAgICAgICAgIFR5cGVMb2NhdGlv
biogbG9jYXRpb24gPSB2bSgpLT5uZXh0TG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICBzY29w
ZURlcGVuZGVudFByb2ZpbGUob3AsIGlkZW50LCBpbnN0cnVjdGlvbk9mZnNldCwgbG9jYXRpb24p
OworICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgOF0udS5sb2NhdGlvbiA9IGxvY2F0
aW9uOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
MTkzNyw2NSArMTk0OCw1OSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvCiAKICAgICAgICAgICAgIGlmIChwY1swXS51Lm9wY29kZSA9PSBvcF9wdXRfdG9fc2NvcGVf
d2l0aF9wcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGlu
c3RydWN0aW9uIGlzOiBwdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlIHNjb3BlLCBpZCwgdmFsdWUs
IFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kLCBUeXBlTG9jYXRpb24qCi0g
ICAgICAgICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHZtKCktPm5leHRMb2NhdGlv
bigpOwogICAgICAgICAgICAgICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExl
bmd0aCAtIDE7Ci0gICAgICAgICAgICAgICAgaW50IGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0OyAKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW5lID0gMCwgY29sdW1uID0gMDsKLSAg
ICAgICAgICAgICAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlv
bk9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7Ci0K
LSAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9saW5lID0gbGluZTsKLSAgICAgICAgICAgICAg
ICBsb2NhdGlvbi0+bV9jb2x1bW4gPSBjb2x1bW47Ci0gICAgICAgICAgICAgICAgbG9jYXRpb24t
Pm1fc291cmNlSUQgPSBtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKTsKLQotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgb3RoZXIgdmFsdWVzIGZvciBvcC50eXBlIGhlcmUsIGFu
ZCBhbHNvIGNvbnNpZGVyIHdoYXQgdG8gZG8gd2hlbiB3ZSBjYW4ndCBzdGF0aWNhbGx5IGRldGVy
bWluZSB0aGUgZ2xvYmFsSUQKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUgPSAwOwotICAgICAgICAgICAgICAgIGlmIChvcC50eXBlID09IENsb3N1cmVWYXIpIAotICAg
ICAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZSA9IG9wLmFjdGl2YXRpb24tPnN5bWJvbFRhYmxl
KCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIpCi0gICAg
ICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlID0gbV9nbG9iYWxPYmplY3QuZ2V0KCktPnN5bWJv
bFRhYmxlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN5bWJvbFRh
YmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5
bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9nbG9i
YWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBp
ZGVudC5pbXBsKCksICp2bSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xv
YmFsVHlwZVNldCA9c3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIs
IGlkZW50LmltcGwoKSwgKnZtKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9H
bG9iYWxJREV4aXN0czsKLQotICAgICAgICAgICAgICAgIHZtKCktPmhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihsb2NhdGlvbik7CisgICAgICAgICAgICAgICAg
VHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHZtKCktPm5leHRMb2NhdGlvbigpOworICAgICAgICAg
ICAgICAgIHNjb3BlRGVwZW5kZW50UHJvZmlsZShvcCwgaWRlbnQsIGluc3RydWN0aW9uT2Zmc2V0
LCBsb2NhdGlvbik7CiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA3XS51LmxvY2F0
aW9uID0gbG9jYXRpb247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHk6
IHsKLQorICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3Ro
IC0gMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90RW5kOworICAgICAg
ICAgICAgYm9vbCBzaG91bGRBbmFseXplID0gbV91bmxpbmtlZENvZGUtPmhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxlRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbk9mZnNl
dCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcihwY1sxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgU3ltYm9sVGFibGUq
IHN5bWJvbFRhYmxlID0gbV9zeW1ib2xUYWJsZS5nZXQoKTsKICAgICAgICAgICAgIFR5cGVMb2Nh
dGlvbiogbG9jYXRpb24gPSB2bSgpLT5uZXh0TG9jYXRpb24oKTsKLSAgICAgICAgICAgIHNpemVf
dCBpbnN0cnVjdGlvbk9mZnNldCA9IGkgKyBvcExlbmd0aCAtIDE7Ci0gICAgICAgICAgICBpbnQg
ZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQ7IAotICAgICAgICAgICAgdW5zaWduZWQgbGlu
ZSA9IDAsIGNvbHVtbiA9IDA7Ci0gICAgICAgICAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29k
ZU9mZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQs
IGxpbmUsIGNvbHVtbik7CisgICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0ID0gZGl2
b3RTdGFydDsKKyAgICAgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90RW5kID0gZGl2b3RFbmQ7Cisg
ICAgICAgICAgICBsb2NhdGlvbi0+bV9zb3VyY2VJRCA9IG1fb3duZXJFeGVjdXRhYmxlLT5zb3Vy
Y2VJRCgpOwogCi0gICAgICAgICAgICBpbnQgaGFzR2xvYmFsSURGbGFnID0gcGNbM10udS5vcGVy
YW5kOwotICAgICAgICAgICAgaWYgKGhhc0dsb2JhbElERmxhZykgeworICAgICAgICAgICAgUHJv
ZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBmbGFnID0gc3RhdGljX2Nhc3Q8
UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZz4ocGNbM10udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZmxhZykgeworICAgICAgICAgICAgY2FzZSBQcm9maWxl
VHlwZXNCeXRlY29kZUhhc0dsb2JhbElEOiB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgbG9j
YXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclJlZ2lz
dGVyKGxvY2tlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7CiAgICAgICAgICAg
ICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBl
U2V0Rm9yUmVnaXN0ZXIobG9ja2VyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsK
LSAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFs
SUQ6IAorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uQXJndW1l
bnQ6CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25UaGlzT2Jq
ZWN0OiB7CiAgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9IEhp
Z2hGaWRlbGl0eU5vR2xvYmFsSURFeGlzdHM7Ci0gICAgICAgICAgICAKLQotICAgICAgICAgICAg
bG9jYXRpb24tPm1fbGluZSA9IGxpbmU7Ci0gICAgICAgICAgICBsb2NhdGlvbi0+bV9jb2x1bW4g
PSBjb2x1bW47Ci0gICAgICAgICAgICBsb2NhdGlvbi0+bV9zb3VyY2VJRCA9IG1fb3duZXJFeGVj
dXRhYmxlLT5zb3VyY2VJRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3Rh
dGVtZW50OiB7CisgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCA9IHJl
dHVyblN0YXRlbWVudFR5cGVTZXQoKTsKKyAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9nbG9i
YWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50OworICAgICAgICAgICAg
ICAgIGxvY2F0aW9uLT5tX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9
IG1fc291cmNlT2Zmc2V0OyAKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZEFuYWx5emUpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQmVjYXVzZSBzb21lIHJldHVybiBzdGF0ZW1lbnRzIGFy
ZSBhZGRlZCBpbXBsaWNpdGx5ICh0byByZXR1cm4gdW5kZWZpbmVkIGF0IHRoZSBlbmQgb2YgYSBm
dW5jdGlvbiksIGFuZCB0aGVzZSBub2RlcyBkb24ndCBlbWl0IGV4cHJlc3Npb24gcmFuZ2VzLCBn
aXZlIHRoZW0gc29tZSByYW5nZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5LCB0
aGlzIGRpdm90IGlzIG9uIHRoZSBvcGVuIGJyYWNlIG9mIHRoZSBmdW5jdGlvbi4gCisgICAgICAg
ICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQgPSBsb2NhdGlvbi0+bV9kaXZvdEVu
ZCA9IGxvY2F0aW9uLT5tX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudDsK
KyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQW5hbHl6ZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+aW5zZXJ0
TmV3TG9jYXRpb24obG9jYXRpb24pOworICAgICAgICAgICAgaWYgKHNob3VsZEFuYWx5emUpCisg
ICAgICAgICAgICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmluc2VydE5l
d0xvY2F0aW9uKGxvY2F0aW9uKTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMl0udS5s
b2NhdGlvbiA9IGxvY2F0aW9uOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotCiAg
ICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgogICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJl
ZF9mdW5jOiB7CiAgICAgICAgICAgICBpZiAocGNbM10udS5pbmRleCA9PSBVSU5UX01BWCkgewpA
QCAtMjQ2Niw2ICsyNDcxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KAogICAgICAgICAgICAgICAgIGFjdGl2YXRpb24uY2xlYXIoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGVfd2l0aF9wcm9maWxlOgogICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAg
ICAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICAgICAgICAg
IGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CkBAIC0zODc3LDQgKzM4ODMsMzAgQEAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjYXBhYmlsaQogfQogI2VuZGlmCiAKK3ZvaWQgQ29kZUJs
b2NrOjpzY29wZURlcGVuZGVudFByb2ZpbGUoUmVzb2x2ZU9wIG9wLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCwgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0LCBUeXBlTG9jYXRpb24qIGxvY2F0aW9u
KQoreworICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90RW5kOworICAgIGJvb2wgc2hvdWxk
QW5hbHl6ZSA9IG1fdW5saW5rZWRDb2RlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4cHJlc3Np
b25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90U3RhcnQsIGRp
dm90RW5kKTsKKyAgICBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0ID0gZGl2b3RTdGFydDsKKyAgICBs
b2NhdGlvbi0+bV9kaXZvdEVuZCA9IGRpdm90RW5kOworICAgIGxvY2F0aW9uLT5tX3NvdXJjZUlE
ID0gbV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCk7CisKKyAgICAvLyBGSVhNRTogaGFuZGxl
IG90aGVyIHZhbHVlcyBmb3Igb3AudHlwZSBoZXJlLCBhbmQgYWxzbyBjb25zaWRlciB3aGF0IHRv
IGRvIHdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBkZXRlcm1pbmUgdGhlIGdsb2JhbElECisgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0cjsKKyAgICBpZiAob3AudHlwZSA9PSBD
bG9zdXJlVmFyKSAKKyAgICAgICAgc3ltYm9sVGFibGUgPSBvcC5hY3RpdmF0aW9uLT5zeW1ib2xU
YWJsZSgpOworICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyKQorICAgICAgICBzeW1i
b2xUYWJsZSA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpLT5zeW1ib2xUYWJsZSgpOworICAgIAorICAg
IGlmIChzeW1ib2xUYWJsZSkgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihz
eW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJ
RCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgp
LCAqdm0oKSk7CisgICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJs
ZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7
CisgICAgfSBlbHNlCisgICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPSBIaWdo
RmlkZWxpdHlOb0dsb2JhbElERXhpc3RzOworCisgICAgaWYgKHNob3VsZEFuYWx5emUpCisgICAg
ICAgIHZtKCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT5pbnNlcnROZXdMb2NhdGlvbihs
b2NhdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTcwNzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIgogI2luY2x1
ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5j
bHVkZSAiVHlwZVNldC5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNp
bmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKQEAg
LTk0Miw2ICs5NDMsMTMgQEAgcHVibGljOgogICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9p
ZCBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOwogCiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJp
bmdHQygpOyAvLyBXaWxsIG9ubHkgcmV0dXJuIHZhbGlkIHJlc3VsdHMgd2hlbiBjYWxsZWQgZHVy
aW5nIEdDLiBBc3N1bWVzIHRoYXQgeW91J3ZlIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCB0aGUg
b3duZXIgZXhlY3V0YWJsZSBpcyBsaXZlLgorICAgIFJlZlB0cjxUeXBlU2V0PiByZXR1cm5TdGF0
ZW1lbnRUeXBlU2V0KCkgCisgICAgeworICAgICAgICBpZiAoIW1fcmV0dXJuU3RhdGVtZW50VHlw
ZVNldCkKKyAgICAgICAgICAgIG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldCA9IFR5cGVTZXQ6OmNy
ZWF0ZSgpOworCisgICAgICAgIHJldHVybiBtX3JldHVyblN0YXRlbWVudFR5cGVTZXQ7CisgICAg
fQogCiAKIHByb3RlY3RlZDoKQEAgLTEwMTIsNiArMTAyMCw4IEBAIHByaXZhdGU6CiAgICAgICAg
IGlmICghbV9yYXJlRGF0YSkKICAgICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcg
UmFyZURhdGEpOwogICAgIH0KKworICAgIHZvaWQgc2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlc29s
dmVPcCwgY29uc3QgSWRlbnRpZmllciYsIHNpemVfdCwgVHlwZUxvY2F0aW9uKik7CiAgICAgCiAj
aWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIHJlc2V0U3R1YkludGVybmFsKFJlcGF0Y2hCdWZmZXIm
LCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpAQCAtMTA5NCw2ICsxMTA0LDggQEAgcHJpdmF0ZToKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3NB
bmFseXNpczsKIAorICAgIFJlZlB0cjxUeXBlU2V0PiBtX3JldHVyblN0YXRlbWVudFR5cGVTZXQ7
CisKICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlw
ZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1R5cGVMb2NhdGlvbi5oCShyZXZpc2lvbiAxNzA3NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVHlwZUxvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwx
MSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBIaWdoRmlkZWxpdHlHbG9iYWxJREZsYWdzIHsK
ICAgICBIaWdoRmlkZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbiA9IC0xLAotICAgIEhpZ2hG
aWRlbGl0eU5vR2xvYmFsSURFeGlzdHMgPSAtMgorICAgIEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURF
eGlzdHMgPSAtMiwKKyAgICBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQgPSAtMwogfTsKIAog
Y2xhc3MgVHlwZUxvY2F0aW9uIHsKLSAgICAgICAgICAgICAgICAgICAgICAgCiBwdWJsaWM6CiAg
ICAgVHlwZUxvY2F0aW9uKCkgCiAgICAgICAgIDogbV9pbnN0cnVjdGlvblR5cGVTZXQoVHlwZVNl
dDo6Y3JlYXRlKCkpCkBAIC00Niw4ICs0Niw5IEBAIHB1YmxpYzoKIAogICAgIGludDY0X3QgbV9n
bG9iYWxWYXJpYWJsZUlEOwogICAgIGludHB0cl90IG1fc291cmNlSUQ7Ci0gICAgdW5zaWduZWQg
bV9saW5lOwotICAgIHVuc2lnbmVkIG1fY29sdW1uOworICAgIHVuc2lnbmVkIG1fZGl2b3RTdGFy
dDsKKyAgICB1bnNpZ25lZCBtX2Rpdm90RW5kOworICAgIHVuc2lnbmVkIG1fZGl2b3RGb3JGdW5j
dGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50OwogICAgIFJlZlB0cjxUeXBlU2V0PiBtX2luc3Ry
dWN0aW9uVHlwZVNldDsKICAgICBSZWZQdHI8VHlwZVNldD4gbV9nbG9iYWxUeXBlU2V0OwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTcwNzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDYg
KzQwNSwzMiBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mCiAgICAg
bV9leHByZXNzaW9uSW5mby5hcHBlbmQoaW5mbyk7CiB9CiAKK2Jvb2wgVW5saW5rZWRDb2RlQmxv
Y2s6OmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNl
dCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5zaWduZWQmIHN0YXJ0RGl2b3QsIHVuc2lnbmVk
JiBlbmREaXZvdCkKK3sKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cisg
ICAgYXV0byBpdGVyID0gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUluZm9NYXAuZmluZChieXRl
Y29kZU9mZnNldCk7CisgICAgaWYgKGl0ZXIgPT0gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUlu
Zm9NYXAuZW5kKCkpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
RigiRG9uJ3QgaGF2ZSBhc3NpZ25tZW50IGluZm8gZm9yIG9mZnNldDoldVxuIiwgYnl0ZWNvZGVP
ZmZzZXQpOworICAgICAgICBzdGFydERpdm90ID0gVUlOVF9NQVg7CisgICAgICAgIGVuZERpdm90
ID0gVUlOVF9NQVg7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgSGln
aEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNzaW9uUmFuZ2UmIHJhbmdlID0gaXRlci0+dmFsdWU7
CisgICAgc3RhcnREaXZvdCA9IHJhbmdlLm1fc3RhcnREaXZvdDsKKyAgICBlbmREaXZvdCA9IHJh
bmdlLm1fZW5kRGl2b3Q7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OmFkZEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvbkluZm8odW5zaWduZWQg
aW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90
KQoreworICAgIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvblJhbmdlIHJhbmdlOwor
ICAgIHJhbmdlLm1fc3RhcnREaXZvdCA9IHN0YXJ0RGl2b3Q7CisgICAgcmFuZ2UubV9lbmREaXZv
dCA9IGVuZERpdm90OworICAgIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVJbmZvTWFwLnNldChp
bnN0cnVjdGlvbk9mZnNldCwgcmFuZ2UpOyAgCit9CisKIHZvaWQgVW5saW5rZWRQcm9ncmFtQ29k
ZUJsb2NrOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7CiAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB0aGlzT2JqZWN0ID0ganNDYXN0PFVu
bGlua2VkUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE3MDc3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNiArMjczLDggQEAgcHVibGljOgogICAgIHZvaWQgYWRk
RXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIGludCBkaXZvdCwKICAg
ICAgICAgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNp
Z25lZCBjb2x1bW4pOwogCisgICAgdm9pZCBhZGRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4cHJl
c3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90
LCB1bnNpZ25lZCBlbmREaXZvdCk7CisKICAgICBib29sIGhhc0V4cHJlc3Npb25JbmZvKCkgeyBy
ZXR1cm4gbV9leHByZXNzaW9uSW5mby5zaXplKCk7IH0KIAogICAgIC8vIFNwZWNpYWwgcmVnaXN0
ZXJzCkBAIC00NjUsNiArNDY3LDggQEAgcHVibGljOgogICAgIHZvaWQgZXhwcmVzc2lvblJhbmdl
Rm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCYgZGl2b3QsCiAg
ICAgICAgIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0LCB1bnNpZ25lZCYgbGluZSwg
dW5zaWduZWQmIGNvbHVtbik7CiAKKyAgICBib29sIGhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhw
cmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgdW5z
aWduZWQmIHN0YXJ0RGl2b3QsIHVuc2lnbmVkJiBlbmREaXZvdCk7CisKICAgICB2b2lkIHJlY29y
ZFBhcnNlKENvZGVGZWF0dXJlcyBmZWF0dXJlcywgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcywg
dW5zaWduZWQgZmlyc3RMaW5lLCB1bnNpZ25lZCBsaW5lQ291bnQsIHVuc2lnbmVkIGVuZENvbHVt
bikKICAgICB7CiAgICAgICAgIG1fZmVhdHVyZXMgPSBmZWF0dXJlczsKQEAgLTU3Niw2ICs1ODAs
MTEgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBPd25QdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7
CiAgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87CisgICAg
c3RydWN0IEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvblJhbmdlIHsKKyAgICAgICAg
dW5zaWduZWQgbV9zdGFydERpdm90OworICAgICAgICB1bnNpZ25lZCBtX2VuZERpdm90OworICAg
IH07CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNz
aW9uUmFuZ2U+IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVJbmZvTWFwOwogCiBwcm90ZWN0ZWQ6
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzA3NzYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAwNSw3ICsxMDA1LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRNb3ZlKAogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFyaWFi
bGUoZHN0LT5pbmRleCgpKSk7CiAKICAgICBpZiAoIWRzdC0+aXNUZW1wb3JhcnkoKSAmJiBpc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICBlbWl0UHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eShkc3QsIHRydWUpOworICAgICAgICBlbWl0UHJvZmlsZVR5cGVzV2l0
aEhpZ2hGaWRlbGl0eShkc3QsIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQpOwogCiAg
ICAgcmV0dXJuIGRzdDsKIH0KQEAgLTExMTYsMTYgKzExMTYsMTIgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVhbAogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVy
SUQqIHJlZ2lzdGVyVG9Qcm9maWxlLCBib29sIGhhc0dsb2JhbElEKQordm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoUmVnaXN0ZXJJRCogcmVn
aXN0ZXJUb1Byb2ZpbGUsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29kZUZsYWcg
ZmxhZykKIHsKICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2ZpZGVs
aXR5KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVnaXN0ZXJUb1Byb2ZpbGUtPmluZGV4
KCkpOwotICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gcGxhY2Vob2xkZXIgZm9yIFR5
cGVMb2NhdGlvbgotICAgIC8vIFRoaXMgaXMgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB3ZSBz
aG91bGQgdHJhY2sgdGhpcyB2YWx1ZSB0byBpdHMgZ2xvYmFsSUQgb3Igbm90LgotICAgIGlmICho
YXNHbG9iYWxJRCkKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDEpOwotICAgIGVsc2UK
LSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCgwKTsgLy8gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgVHlwZUxvY2F0aW9uIG9i
amVjdCBwb2ludGVyLgorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmbGFnKTsKIH0KIAogUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwgYm9v
bCBiKQpAQCAtMTI2NywyMyArMTI2Myw0OSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEdldEZyCiAgICAgcmV0dXJuIGRzdDsKIH0KIAorUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRGcm9tU2NvcGVXaXRoUHJvZmlsZShSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBSZXNvbHZlTW9k
ZSByZXNvbHZlTW9kZSkKK3sKKyAgICBtX2NvZGVCbG9jay0+YWRkUHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOworCisgICAgVW5saW5rZWRWYWx1ZVByb2Zp
bGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9nZXRfZnJvbV9zY29wZV93aXRoX3By
b2ZpbGUpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOworICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChzY29wZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
UmVzb2x2ZU1vZGVBbmRUeXBlKHJlc29sdmVNb2RlLCByZXNvbHZlVHlwZSgpKS5vcGVyYW5kKCkp
OworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCgwKTsgLy8gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIFR5cGVMb2Nh
dGlvbiBwb2ludGVyLgorICAgIHJldHVybiBkc3Q7Cit9CisKIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlIHJlc29sdmVN
b2RlKQogewogICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGlu
c3RydWN0aW9ucygpLnNpemUoKSk7CiAKICAgICAvLyBwdXRfdG9fc2NvcGUgc2NvcGUsIGlkLCB2
YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQKLSAgICBpZiAoaXNQ
cm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgZW1pdE9wY29kZShvcF9w
dXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKTsKLSAgICBlbHNlCi0gICAgICAgIGVtaXRPcGNvZGUo
b3BfcHV0X3RvX3Njb3BlKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3B1dF90b19zY29wZSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNjb3BlLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCh2YWx1ZS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFJlc29sdmVN
b2RlQW5kVHlwZShyZXNvbHZlTW9kZSwgcmVzb2x2ZVR5cGUoKSkub3BlcmFuZCgpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwot
ICAgIGlmIChpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoMCk7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShSZWdpc3RlcklE
KiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUmVnaXN0ZXJJRCogdmFsdWUs
IFJlc29sdmVNb2RlIHJlc29sdmVNb2RlKQoreworICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7CisKKyAgICBlbWl0T3Bj
b2RlKG9wX3B1dF90b19zY29wZV93aXRoX3Byb2ZpbGUpOworICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChzY29wZS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0
YW50KGlkZW50aWZpZXIpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4
KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChSZXNvbHZlTW9kZUFuZFR5cGUocmVzb2x2
ZU1vZGUsIHJlc29sdmVUeXBlKCkpLm9wZXJhbmQoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKDApOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7IC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgYSBUeXBlTG9jYXRpb24g
cG9pbnRlci4KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTEzNTEsOSArMTM3Myw2IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0QnkKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogCi0gICAgaWYgKGlz
UHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgIGVtaXRQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLCBmYWxzZSk7Ci0KICAgICByZXR1cm4gdmFsdWU7CiB9
CiAKQEAgLTE0NTEsOSArMTQ3MCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0UHV0QnkKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhcnJheVByb2ZpbGUpOwogCi0gICAgaWYgKGlzUHJvZmls
aW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgIGVtaXRQcm9maWxlVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KHZhbHVlLCBmYWxzZSk7Ci0KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE3MDc3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1
LDYgKzE1NSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVHJ5RGF0YSogdHJ5RGF0YTsK
ICAgICB9OwogCisgICAgZW51bSBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVG
bGFnIHsgCisgICAgICAgIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQsCisgICAgICAg
IFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCwKKyAgICAgICAgUHJvZmls
ZVR5cGVzQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50LAorICAgICAgICBQcm9maWxlVHlwZXNCeXRl
Y29kZUZ1bmN0aW9uVGhpc09iamVjdCwKKyAgICAgICAgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5j
dGlvblJldHVyblN0YXRlbWVudCAgCisgICAgfTsKKwogICAgIGNsYXNzIEJ5dGVjb2RlR2VuZXJh
dG9yIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgpAQCAt
MzE2LDYgKzMyNCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICBtX2NvZGVC
bG9jay0+YWRkRXhwcmVzc2lvbkluZm8oaW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90T2Zmc2V0LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwogICAgICAgICB9CiAKKyAgICAg
ICAgdm9pZCBlbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5kRGl2
b3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RhcnREaXZvdC5v
ZmZzZXQgKyAxOyAvLyBSYW5nZXMgYXJlIGluY2x1c2l2ZSBvZiB0aGVpciBlbmRwb2ludHMsIEFO
RCAxIGluZGV4ZWQuCisgICAgICAgICAgICB1bnNpZ25lZCBlbmQgPSBlbmREaXZvdC5vZmZzZXQ7
IC8vIEVuZCBSYW5nZXMgYWxyZWFkeSBnbyBvbmUgcGFzdCB0aGUgaW5jbHVzaXZlIHJhbmdlLCBz
byBubyBuZWVkIHRvIGRvICsgMSAtIDEuCisgICAgICAgICAgICB1bnNpZ25lZCBpbnN0cnVjdGlv
bk9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKSAtIDE7CisgICAgICAgICAgICBtX2NvZGVC
bG9jay0+YWRkSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNzaW9uSW5mbyhpbnN0cnVjdGlv
bk9mZnNldCwgc3RhcnQsIGVuZCk7CisgICAgICAgIH0KKwogICAgICAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgbGVmdEhhbmRTaWRlTmVlZHNDb3B5KGJvb2wgcmlnaHRIYXNBc3NpZ25tZW50cywgYm9v
bCByaWdodElzUHVyZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIChtX2NvZGVUeXBl
ICE9IEZ1bmN0aW9uQ29kZSB8fCBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8
IHJpZ2h0SGFzQXNzaWdubWVudHMpICYmICFyaWdodElzUHVyZTsKQEAgLTMzMiw3ICszNDgsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlbWl0Tm9kZShuKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZvaWQgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoUmVn
aXN0ZXJJRCogZHN0LCBib29sKTsKKyAgICAgICAgdm9pZCBlbWl0UHJvZmlsZVR5cGVzV2l0aEhp
Z2hGaWRlbGl0eShSZWdpc3RlcklEKiBkc3QsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlC
eXRlY29kZUZsYWcpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQq
IGRzdCwgYm9vbCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRz
dCwgZG91YmxlKTsKQEAgLTM5OSw3ICs0MTUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
UmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUoKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJlc29s
dmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEdldEZyb21TY29wZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNj
b3BlLCBjb25zdCBJZGVudGlmaWVyJiwgUmVzb2x2ZU1vZGUpOworICAgICAgICBSZWdpc3RlcklE
KiBlbWl0R2V0RnJvbVNjb3BlV2l0aFByb2ZpbGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYsIFJlc29sdmVNb2RlKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdFB1dFRvU2NvcGUoUmVnaXN0ZXJJRCogc2NvcGUsIGNvbnN0IElkZW50aWZpZXIm
LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUpOworICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKFJlZ2lzdGVySUQqIHNjb3BlLCBjb25zdCBJZGVudGlm
aWVyJiwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlc29sdmVNb2RlKTsKIAogICAgICAgICBQYXNzUmVm
UHRyPExhYmVsPiBlbWl0TGFiZWwoTGFiZWwqKTsKICAgICAgICAgdm9pZCBlbWl0TG9vcEhpbnQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE3MDc3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDEz
ICsxNTIsMjMgQEAgUmVnaXN0ZXJJRCogUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeQogICAg
IGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChtX2lkZW50KSkgewogICAgICAgICBp
ZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0
eSgpKSB7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlk
ZWxpdHkobG9jYWwuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlSGFzR2xvYmFsSUQpOworICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lv
bkluZm8obV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24oLTEsIG1fcG9zaXRpb24ub2Zmc2V0ICsg
bV9pZGVudC5sZW5ndGgoKSwgLTEpKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gZ2VuZXJh
dG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbC5nZXQoKSk7CiAgICAgfQog
ICAgIAogICAgIEpTVGV4dFBvc2l0aW9uIGRpdm90ID0gbV9zdGFydCArIG1faWRlbnQubGVuZ3Ro
KCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgbV9zdGFydCwgZGl2
b3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2
ZVNjb3BlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbV9pZGVudCk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIHNjb3BlLmdldCgpLCBtX2lkZW50LCBUaHJvd0lmTm90Rm91bmQpOworICAgIFJlZ2lz
dGVySUQqIHJldDsKKyAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KCkpIHsKKyAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGVXaXRo
UHJvZmlsZShnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBzY29wZS5nZXQoKSwgbV9p
ZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8obV9wb3NpdGlvbiwgSlNUZXh0UG9zaXRpb24o
LTEsIG1fcG9zaXRpb24ub2Zmc2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRHZXRGcm9tU2NvcGUoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KSwgc2NvcGUuZ2V0KCksIG1faWRlbnQsIFRocm93SWZOb3RGb3Vu
ZCk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIEFycmF5Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3
NCw3ICszODQsMTMgQEAgUmVnaXN0ZXJJRCogQnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1pdEJ5dAog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlRm9yTGVmdEhh
bmRTaWRlKG1fYmFzZSwgbV9zdWJzY3JpcHRIYXNBc3NpZ25tZW50cywgbV9zdWJzY3JpcHQtPmlz
UHVyZShnZW5lcmF0b3IpKTsKICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCks
IHByb3BlcnR5KTsKKyAgICBSZWdpc3RlcklEKiBmaW5hbERlc3QgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0R2V0
QnlWYWwoZmluYWxEZXN0LCBiYXNlLmdldCgpLCBwcm9wZXJ0eSk7CisgICAgaWYgKGdlbmVyYXRv
ci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShmaW5hbERlc3QsIFByb2ZpbGVUeXBl
c0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CisgICAgfQorICAgIHJldHVybiByZXQ7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBEb3RBY2Nlc3Nvck5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KQEAgLTM5NCw3ICs0MTAsMTMgQEAgUmVnaXN0ZXJJRCogRG90QWNjZXNzb3JOb2RlOjpl
bWl0Qnl0ZWNvZAogbm9uQXJndW1lbnRzUGF0aDoKICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwotICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgYmFzZSwgbV9p
ZGVudCk7CisgICAgUmVnaXN0ZXJJRCogZmluYWxEZXN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQo
ZmluYWxEZXN0LCBiYXNlLCBtX2lkZW50KTsKKyAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZpbmFsRGVzdCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2Vz
Tm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICB9
CisgICAgcmV0dXJuIHJldDsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEFyZ3VtZW50TGlzdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ3Myw3
ICs0OTUsMTIgQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0QgogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdl
bmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgIFJl
Z2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVu
Yy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBl
c1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
RG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Cisg
ICAgfQorICAgIHJldHVybiByZXQ7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC00ODksNyArNTE2LDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29s
dmVOb2RlOjplbWkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhp
c1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAvLyBUaGlzIHBhc3NlcyBOb0V4
cGVjdGVkRnVuY3Rpb24gYmVjYXVzZSB3ZSBleHBlY3QgdGhhdCBpZiB0aGUgZnVuY3Rpb24gaXMg
aW4gYQogICAgICAgICAvLyBsb2NhbCB2YXJpYWJsZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Ygb3Vy
IGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgICAgICBS
ZWdpc3RlcklEKiByZXQgPSBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1
bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGlu
Z1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBl
c0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRp
dm90RW5kKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCiAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CkBAIC01
MDAsNyArNTMyLDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkK
ICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG5ld0Rpdm90LCBkaXZvdFN0YXJ0KCks
IG5ld0Rpdm90KTsKICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsKICAgICBnZW5lcmF0b3IuZW1pdEdldEZyb21TY29w
ZShmdW5jLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50LCBUaHJv
d0lmTm90Rm91bmQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUu
Z2V0KCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgUmVnaXN0ZXJJRCogcmV0ID0gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1
bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OworICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkg
eworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0
dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgfQorICAgIHJldHVybiByZXQ7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxCcmFj
a2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MTQsNyArNTUx
LDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2Vu
ZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxs
KHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgIFJl
Z2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVu
Y3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdldCgpLCBQcm9maWxlVHlwZXNCeXRl
Y29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OworICAgIH0KKyAgICByZXR1cm4gcmV0OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRnVuY3Rpb25DYWxsRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC01MjcsNyArNTY5LDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OmVtaXRCeXQKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgbV9iYXNlKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4
cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgp
KTsKICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAg
UmVnaXN0ZXJJRCogcmV0ID0gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBm
dW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgp
LCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxp
bmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5
dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CisgICAgfQorICAgIHJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBSZWdpc3RlcklEKiBnZXRB
cmd1bWVudEJ5VmFsKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIEV4cHJlc3Npb25Ob2Rl
KiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogZHN0LCBKU1RleHRQb3Np
dGlvbiBkaXZvdCwgSlNUZXh0UG9zaXRpb24gZGl2b3RTdGFydCwgSlNUZXh0UG9zaXRpb24gZGl2
b3RFbmQpCkBAIC01OTcsNiArNjQ0LDEwIEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxE
b3ROb2RlOjplbWkKICAgICAgICAgfQogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5n
ZXQoKSk7CiAgICAgfQorICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdo
RmlkZWxpdHkoKSkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdo
RmlkZWxpdHkocmV0dXJuVmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhh
dmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgfQogICAg
IHJldHVybiByZXR1cm5WYWx1ZS5nZXQoKTsKIH0KIApAQCAtNzA3LDYgKzc1OCwxMCBAQCBSZWdp
c3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIH0KKyAgICBpZiAo
Z2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblZhbHVlLmdl
dCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZv
dFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgIH0KICAgICByZXR1cm4gcmV0dXJuVmFsdWUuZ2V0
KCk7CiB9CiAKQEAgLTc0Nyw5ICs4MDIsOSBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1p
dFJlc29sdmUoQnl0CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFRvTnVtYmVyKHRlbXBEc3Qu
Z2V0KCksIGxvY2FsUmVnKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZSh0ZW1wRHN0
U3JjLmdldCgpLCBsb2NhbFJlZyk7CiAgICAgICAgICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9y
LCB0ZW1wRHN0U3JjLmdldCgpLCBtX29wZXJhdG9yKTsKLSAgICAgICAgICAgIGlmIChnZW5lcmF0
b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWxSZWcsIHRlbXBEc3RT
cmMuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0
aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7
CiAgICAgICAgICAgICByZXR1cm4gdGVtcERzdC5nZXQoKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGxvY2FsUmVnLCBtX29wZXJhdG9yKTsKQEAgLTc1OSw3ICs4MTQsMTIgQEAgUmVn
aXN0ZXJJRCogUG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dAogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzY29wZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVNjb3BlKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgaWRlbnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRv
ci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0KCks
IGlkZW50LCBUaHJvd0lmTm90Rm91bmQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBvbGRWYWx1
ZSA9IGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpLCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRU
b1Njb3BlKHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7
CisgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgp
LCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRv
ci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9T
Y29wZShzY29wZS5nZXQoKSwgaWRlbnQsIHZhbHVlLmdldCgpLCBUaHJvd0lmTm90Rm91bmQpOwor
CiAgICAgcmV0dXJuIG9sZFZhbHVlLmdldCgpOwogfQogCkBAIC03ODEsNiArODQxLDEwIEBAIFJl
Z2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0QnJhY2tldChCeXQKICAgICBSZWdpc3RlcklEKiBv
bGRWYWx1ZSA9IGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIHZhbHVlLmdldCgpLCBtX29wZXJhdG9yKTsKICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdmFsdWUu
Z2V0KCkpOworICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoKSkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgfQogICAgIHJldHVybiBnZW5l
cmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVlKTsKIH0KIApAQCAt
ODAxLDYgKzg2NSwxMCBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdERvdChCeXRlY29k
CiAgICAgUmVnaXN0ZXJJRCogb2xkVmFsdWUgPSBlbWl0UG9zdEluY09yRGVjKGdlbmVyYXRvciwg
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBpZGVu
dCwgdmFsdWUuZ2V0KCkpOworICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHkodmFsdWUuZ2V0KCksIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVH
bG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgfQogICAgIHJl
dHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIG9sZFZhbHVlKTsK
IH0KIApAQCAtOTIxLDkgKzk4OSw5IEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXRSZXNv
bHZlKEJ5dGUKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0ID0gZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KHRlbXBEc3QuZ2V0KCksIGxvY2FsUmVnKTsKICAgICAgICAgICAgIGVtaXRJbmNPckRlYyhnZW5l
cmF0b3IsIHRlbXBEc3QuZ2V0KCksIG1fb3BlcmF0b3IpOwotICAgICAgICAgICAgaWYgKGdlbmVy
YXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZv
dEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbFJlZywgdGVtcERz
dC5nZXQoKSk7CisgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsK
ICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChk
c3QsIHRlbXBEc3QuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGVtaXRJbmNPckRlYyhnZW5l
cmF0b3IsIGxvY2FsUmVnLCBtX29wZXJhdG9yKTsKQEAgLTkzNCw3ICsxMDAyLDExIEBAIFJlZ2lz
dGVySUQqIFByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dGUKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIGlkZW50KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5l
cmF0b3IuZW1pdEdldEZyb21TY29wZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNjb3BlLmdl
dCgpLCBpZGVudCwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9y
LCB2YWx1ZS5nZXQoKSwgbV9vcGVyYXRvcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3Bl
KHNjb3BlLmdldCgpLCBpZGVudCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAg
aWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgpLCBpZGVu
dCwgdmFsdWUuZ2V0KCksIFRocm93SWZOb3RGb3VuZCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2
b3RFbmQoKSk7CisgICAgfSBlbHNlIAorICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUo
c2NvcGUuZ2V0KCksIGlkZW50LCB2YWx1ZS5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB2YWx1ZS5nZXQo
KSk7CiB9CiAKQEAgLTk1NCw2ICsxMDI2LDEwIEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVt
aXRCcmFja2V0KEJ5dGUKICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB2YWx1ZSwgbV9vcGVy
YXRvcik7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0
YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQo
KSwgcHJvcGVydHkuZ2V0KCksIHZhbHVlKTsKKyAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KHZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgIH0KICAg
ICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0
LmdldCgpKTsKIH0KIApAQCAtOTcyLDYgKzEwNDgsMTAgQEAgUmVnaXN0ZXJJRCogUHJlZml4Tm9k
ZTo6ZW1pdERvdChCeXRlY29kZQogICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIHZhbHVlLCBt
X29wZXJhdG9yKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2Uu
Z2V0KCksIGlkZW50LCB2YWx1ZSk7CisgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVz
V2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVz
V2l0aEhpZ2hGaWRlbGl0eSh2YWx1ZSwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUds
b2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
RXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICB9CiAgICAgcmV0
dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQo
KSk7CiB9CiAKQEAgLTE0MjQsOSArMTUwNCw5IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNv
bHZlTm9kZTo6ZW1pdEIKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUo
cmVzdWx0LmdldCgpLCBsb2NhbC5nZXQoKSk7CiAgICAgICAgICAgICBlbWl0UmVhZE1vZGlmeUFz
c2lnbm1lbnQoZ2VuZXJhdG9yLCByZXN1bHQuZ2V0KCksIHJlc3VsdC5nZXQoKSwgbV9yaWdodCwg
bV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmln
aHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwotICAgICAgICAgICAgaWYgKGdlbmVyYXRvci5pc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8obmV3RGl2b3QsIGRpdm90U3RhcnQoKSwgbmV3RGl2b3QpOwog
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCByZXN1bHQuZ2V0KCkp
OworICAgICAgICAgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKQorICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1
bHQuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTQzOCw3ICsxNTE4LDEzIEBAIFJl
Z2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gc2NvcGUgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVTY29wZShnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIG1faWRlbnQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVy
YXRvci5lbWl0R2V0RnJvbVNjb3BlKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc2NvcGUuZ2V0
KCksIG1faWRlbnQsIFRocm93SWZOb3RGb3VuZCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
c3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0KCkpLCB2YWx1ZS5nZXQoKSwgbV9yaWdodCwgbV9v
cGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQt
PnJlc3VsdERlc2NyaXB0b3IoKSksIHRoaXMpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1
dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZv
dW5kKTsKKyAgICBSZWdpc3RlcklEKiByZXQ7IAorICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxp
bmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgeworICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1p
dFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29wZS5nZXQoKSwgbV9pZGVudCwgcmVzdWx0LmdldCgp
LCBUaHJvd0lmTm90Rm91bmQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAg
IH0gZWxzZQorICAgICAgICByZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0
KCksIG1faWRlbnQsIHJlc3VsdC5nZXQoKSwgVGhyb3dJZk5vdEZvdW5kKTsKKyAgICByZXR1cm4g
cmV0OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXNzaWduUmVzb2x2
ZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0NTMsOSArMTUz
OSw5IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWMKICAgICAgICAg
aWYgKGxvY2FsLmlzQ2FwdHVyZWQoKSB8fCBnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhI
aWdoRmlkZWxpdHkoKSkgewogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBEc3Qg
PSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdE5vZGUodGVtcERzdC5nZXQoKSwgbV9yaWdodCk7Ci0gICAgICAgICAgICBpZiAoZ2VuZXJh
dG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90
RW5kKCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCB0ZW1w
RHN0LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dp
dGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkp
OwogICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVk
KGRzdCwgdGVtcERzdC5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgUmVnaXN0ZXJJRCogcmVz
dWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGxvY2FsLmdldCgpLCBtX3JpZ2h0KTsKQEAgLTE0Njks
NyArMTU1NSwxMyBAQCBSZWdpc3RlcklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjCiAg
ICAgICAgIGRzdCA9IDA7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKLSAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0KCksIGdl
bmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5v
dEZvdW5kKTsKKyAgICBSZWdpc3RlcklEKiByZXQ7CisgICAgaWYgKGdlbmVyYXRvci5pc1Byb2Zp
bGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7CisgICAgICAgIHJldCA9IGdlbmVyYXRvci5l
bWl0UHV0VG9TY29wZVdpdGhQcm9maWxlKHNjb3BlLmdldCgpLCBtX2lkZW50LCByZXN1bHQuZ2V0
KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhy
b3dJZk5vdEZvdW5kKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcmV0ID0gZ2VuZXJhdG9yLmVtaXRQdXRUb1Njb3BlKHNjb3BlLmdldCgpLCBt
X2lkZW50LCByZXN1bHQuZ2V0KCksIGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSA/IFRocm93SWZO
b3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXNzaWduRG90Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQ4Miw2ICsxNTc0LDEwIEBAIFJlZ2lzdGVy
SUQqIEFzc2lnbkRvdE5vZGU6OmVtaXRCeXRlY29kZSgKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgUmVnaXN0
ZXJJRCogZm9yd2FyZFJlc3VsdCA9IChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkg
PyByZXN1bHQgOiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChnZW5lcmF0b3Iu
dGVtcERlc3RpbmF0aW9uKHJlc3VsdCksIHJlc3VsdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRC
eUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIGZvcndhcmRSZXN1bHQpOworICAgIGlmIChnZW5lcmF0
b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgeworICAgICAgICBnZW5lcmF0
b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZm9yd2FyZFJlc3VsdCwgUHJvZmls
ZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBk
aXZvdEVuZCgpKTsKKyAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlv
bklmTmVlZGVkKGRzdCwgZm9yd2FyZFJlc3VsdCk7CiB9CiAKQEAgLTE0OTYsNyArMTU5MiwxMiBA
QCBSZWdpc3RlcklEKiBSZWFkTW9kaWZ5RG90Tm9kZTo6ZW1pdEJ5dGVjCiAgICAgUmVnaXN0ZXJJ
RCogdXBkYXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdldCgpLCBt
X3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUo
KSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Ci0gICAgcmV0
dXJuIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB1cGRhdGVkVmFs
dWUpOworICAgIFJlZ2lzdGVySUQqIHJldCA9IGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdl
dCgpLCBtX2lkZW50LCB1cGRhdGVkVmFsdWUpOworICAgIGlmIChnZW5lcmF0b3IuaXNQcm9maWxp
bmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgeworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkodXBkYXRlZFZhbHVlLCBQcm9maWxlVHlwZXNCeXRlY29k
ZURvZXNOb3RIYXZlR2xvYmFsSUQpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5mbyhkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gcmV0OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gQXNzaWduRXJyb3JOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CkBAIC0xNTE4LDYgKzE2MTksMTAgQEAgUmVnaXN0ZXJJRCogQXNzaWduQnJhY2tldE5vZGU6OmVt
aXRCeXRlYwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICBSZWdpc3RlcklEKiBmb3J3YXJkUmVzdWx0ID0gKGRz
dCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKSA/IHJlc3VsdCA6IGdlbmVyYXRvci5tb3Zl
VG9EZXN0aW5hdGlvbklmTmVlZGVkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24ocmVzdWx0KSwg
cmVzdWx0KTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3BlcnR5
LmdldCgpLCBmb3J3YXJkUmVzdWx0KTsKKyAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlVHlw
ZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9l
c05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAg
fQogICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGZv
cndhcmRSZXN1bHQpOwogfQogCkBAIC0xNTM0LDYgKzE2MzksMTAgQEAgUmVnaXN0ZXJJRCogUmVh
ZE1vZGlmeUJyYWNrZXROb2RlOjplbWl0QgogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwogICAgIGdlbmVyYXRvci5l
bWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCksIHVwZGF0ZWRWYWx1ZSk7Cisg
ICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKSB7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSh1cGRhdGVk
VmFsdWUsIFByb2ZpbGVUeXBlc0J5dGVjb2RlRG9lc05vdEhhdmVHbG9iYWxJRCk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHVwZGF0ZWRWYWx1
ZTsKIH0KQEAgLTIwMjIsNiArMjEzMSwxMCBAQCB2b2lkIFJldHVybk5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlCiAgICAgICAgIGRzdCA9IDA7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cmV0dXJuUmVnaXN0ZXIgPSBtX3ZhbHVlID8gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV92YWx1
ZSkgOiBnZW5lcmF0b3IuZW1pdExvYWQoZHN0LCBqc1VuZGVmaW5lZCgpKTsKKyAgICBpZiAoZ2Vu
ZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KHJldHVyblJlZ2lzdGVyLmdl
dCgpLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50KTsKKyAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8o
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICB9CiAgICAgaWYgKGdlbmVyYXRvci5zY29w
ZURlcHRoKCkpIHsKICAgICAgICAgcmV0dXJuUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdE1vdmUo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCByZXR1cm5SZWdpc3Rlci5nZXQoKSk7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0UG9wU2NvcGVzKDApOwpAQCAtMjM0OSw2ICsyNDYyLDIyIEBAIHZvaWQg
RXZhbE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmUKIAogdm9pZCBGdW5jdGlvbkJvZHlO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCopCiB7CisgICAgaWYgKGdlbmVyYXRvci5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0
eSgpKSB7CisgICAgICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0KC0xLCBtX3N0YXJ0U3RhcnRPZmZz
ZXQsIC0xKTsgLy8gVGhpcyBkaXZvdCBpcyBhdCB0aGUgb3BlbiBicmFjZSBvZiB0aGUgZnVuY3Rp
b24uCisgICAgICAgIEpTVGV4dFBvc2l0aW9uIGVuZCgtMSwgbV9zdGFydFN0YXJ0T2Zmc2V0ICsg
MSwgLTEpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpLCBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9u
VGhpc09iamVjdCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ0V4cHJlc3Npb25JbmZvKHN0YXJ0LCBlbmQpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fcGFyYW1ldGVycy0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBIYW5kbGUgRGVzdHJ1Y3R1cmluZyBhc3NpZ25tZW50cyBpbnRvIGFyZ3VtZW50cy4KKyAgICAg
ICAgICAgIGlmICghbV9wYXJhbWV0ZXJzLT5hdChpKS0+aXNCaW5kaW5nTm9kZSgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQmluZGluZ05vZGUqIHBhcmFtZXRlciA9
IHN0YXRpY19jYXN0PEJpbmRpbmdOb2RlKj4obV9wYXJhbWV0ZXJzLT5hdChpKSk7CisgICAgICAg
ICAgICBSZWdpc3RlcklEIHJlZyhDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGkpKTsKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eSgmcmVnLCBQ
cm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQpOworICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8ocGFyYW1ldGVy
LT5kaXZvdFN0YXJ0KCksIHBhcmFtZXRlci0+ZGl2b3RFbmQoKSk7CisgICAgICAgIH0KKyAgICB9
CisKICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRFbnRlckNhbGxGcmFtZSwgc3RhcnRM
aW5lKCksIHN0YXJ0U3RhcnRPZmZzZXQoKSwgc3RhcnRMaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAg
ZW1pdFN0YXRlbWVudHNCeXRlY29kZShnZW5lcmF0b3IsIGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0
KCkpOwogCkBAIC0yMzY1LDYgKzI0OTQsOCBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmVtaXRC
eXRlY29kZShCeXRlCiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gcmV0dXJuIHdlIG11c3QgYXV0b21h
dGljYWxseSBpbnNlcnQgb25lLgogICAgIGlmICghcmV0dXJuTm9kZSkgewogICAgICAgICBSZWdp
c3RlcklEKiByMCA9IGdlbmVyYXRvci5pc0NvbnN0cnVjdG9yKCkgPyBnZW5lcmF0b3IudGhpc1Jl
Z2lzdGVyKCkgOiBnZW5lcmF0b3IuZW1pdExvYWQoMCwganNVbmRlZmluZWQoKSk7CisgICAgICAg
IGlmIChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShyMCwgUHJv
ZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCk7IC8vIERvIG5vdCBlbWl0
IGV4cHJlc3Npb24gaW5mbyBmb3IgdGhpcyBwcm9maWxlIGJlY2F1c2UgaXQncyBub3QgaW4gdGhl
IHVzZXIncyBzb3VyY2UgY29kZS4KICAgICAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0KCkgPj0gbGlu
ZVN0YXJ0T2Zmc2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsTGVh
dmVDYWxsRnJhbWUsIGxhc3RMaW5lKCksIHN0YXJ0T2Zmc2V0KCksIGxpbmVTdGFydE9mZnNldCgp
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXR1cm4ocjApOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JSdW50aW1lQWdlbnQuY3BwCShyZXZpc2lvbiAxNzA3NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTEsMTAgKzE5MSwxMCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
cnVuKEVycm9yU3RyCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50
aW1lVHlwZUZvclZhcmlhYmxlSW5UZXh0UmFuZ2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IGluX3ZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9pZCwgaW50IGluX3N0YXJ0TGluZSwg
aW50IGluX3N0YXJ0Q29sdW1uLCBpbnQgaW5fZW5kTGluZSwgaW50IGluX2VuZENvbHVtbiwgU3Ry
aW5nKiBvdXRfdHlwZXMpIAordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVU
eXBlRm9yVmFyaWFibGVBdE9mZnNldChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdmFy
aWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGluX2lkLCBpbnQgaW5fZGl2b3QsIFN0cmluZyogb3V0
X3R5cGVzKSAKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwotICAgIFN0cmluZyB0eXBlcyh2
bS5nZXRUeXBlc0ZvclZhcmlhYmxlSW5SYW5nZShpbl9zdGFydExpbmUsIGluX3N0YXJ0Q29sdW1u
LCBpbl9lbmRMaW5lLCBpbl9lbmRDb2x1bW4sIGluX3ZhcmlhYmxlTmFtZSwgaW5faWQpKTsKKyAg
ICBTdHJpbmcgdHlwZXModm0uZ2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KGluX2Rpdm90LCBp
bl92YXJpYWJsZU5hbWUsIGluX2lkKSk7CiAgICAgKm91dF90eXBlcyA9IHR5cGVzOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50
aW1lQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAkocmV2aXNpb24gMTcwNzc2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwg
Y29uc3QgYm9vbCogb3duUHJvcGVydGllcywgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+JiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBp
bnRlcm5hbFByb3BlcnRpZXMpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBv
dmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcnVuKEVycm9yU3RyaW5nKikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlRm9yVmFyaWFibGVJblRleHRSYW5n
ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdmFyaWFibGVOYW1lLCBjb25zdCBTdHJp
bmcmIGluX2lkLCBpbnQgaW5fc3RhcnRMaW5lLCBpbnQgaW5fc3RhcnRDb2x1bW4sIGludCBpbl9l
bmRMaW5lLCBpbnQgaW5fZW5kQ29sdW1uLCBTdHJpbmcqIG91dF90eXBlcykgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlRm9yVmFyaWFibGVBdE9mZnNldChFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGluX2lk
LCBpbnQgaW5fZGl2b3QsIFN0cmluZyogb3V0X3R5cGVzKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
c2V0U2NyaXB0RGVidWdTZXJ2ZXIoU2NyaXB0RGVidWdTZXJ2ZXIqIHNjcmlwdERlYnVnU2VydmVy
KSB7IG1fc2NyaXB0RGVidWdTZXJ2ZXIgPSBzY3JpcHREZWJ1Z1NlcnZlcjsgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRp
bWUuanNvbgkocmV2aXNpb24gMTcwNzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTE5OCwxNCArMTk4
LDExIEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGlzYWJsZXMgcmVwb3J0aW5nIG9m
IGV4ZWN1dGlvbiBjb250ZXh0cyBjcmVhdGlvbi4iCiAgICAgICAgIH0sCiAgICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImdldFJ1bnRpbWVUeXBlRm9yVmFyaWFibGVJblRleHRSYW5nZSIs
CisgICAgICAgICAgICAibmFtZSI6ICJnZXRSdW50aW1lVHlwZUZvclZhcmlhYmxlQXRPZmZzZXQi
LAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YXJpYWJsZU5hbWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiVmFyaWFi
bGUgd2Ugd2FudCB0eXBlIGluZnJvbWF0aW9uIGZvci4iIH0sCiAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzb3VyY2VJRCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJzb3Vy
Y2VJRCB1bmlxdWVseSBpZGVudGlmeWluZyBhIHNjcmlwdCIgfSwKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInN0YXJ0TGluZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAi
c3RhcnQgbGluZSBmb3IgdmFyaWFibGUgbmFtZSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInN0YXJ0Q29sdW1uIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJzdGFy
dCBjb2x1bW4gZm9yIHZhcmlhYmxlIG5hbWUiIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJlbmRMaW5lIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJlbmQgbGluZSBm
b3IgdmFyaWFibGUgbmFtZSIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVuZENvbHVt
biIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiZW5kIGNvbHVtbiBmb3IgdmFy
aWFibGUgbmFtZSIgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGl2b3QiLCAidHlwZSI6
ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogImNoYXJhY3RlciBvZmZzZXQgZm9yIGFzc2lnbm1l
bnQgcmFuZ2UiIH0KICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGVzIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2Ny
aXB0aW9uIjogIlR5cGVzIGZvciByZXF1ZXN0ZWQgdmFyaWFibGUuIiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3
MDc3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MDgsOSArMTQwOCw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9yZXNvbHZlX3MKICAgICBMTElOVF9SRVRVUk4oSlNTY29wZTo6cmVzb2x2ZShl
eGVjLCBleGVjLT5zY29wZSgpLCBpZGVudCkpOwogfQogCi1MTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfZ2V0X2Zyb21fc2NvcGUpCitzdGF0aWMgSlNWYWx1ZSBnZXRGcm9tU2NvcGVDb21t
b24oRXhlY1N0YXRlKiBleGVjLCBJbnN0cnVjdGlvbiogcGMsIFZNJiB2bSkKIHsKLSAgICBMTElO
VF9CRUdJTigpOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZXhlYy0+Y29kZUJsb2Nr
KCktPmlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKTsKICAgICBKU09iamVjdCogc2NvcGUgPSBq
c0Nhc3Q8SlNPYmplY3QqPihMTElOVF9PUCgyKS5qc1ZhbHVlKCkpOwogICAgIFJlc29sdmVNb2Rl
QW5kVHlwZSBtb2RlQW5kVHlwZShwY1s0XS51Lm9wZXJhbmQpOwpAQCAtMTQxOCw4ICsxNDE3LDgg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tXwogICAgIFByb3BlcnR5
U2xvdCBzbG90KHNjb3BlKTsKICAgICBpZiAoIXNjb3BlLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywg
aWRlbnQsIHNsb3QpKSB7CiAgICAgICAgIGlmIChtb2RlQW5kVHlwZS5tb2RlKCkgPT0gVGhyb3dJ
Zk5vdEZvdW5kKQotICAgICAgICAgICAgTExJTlRfUkVUVVJOKGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCkpKTsK
LSAgICAgICAgTExJTlRfUkVUVVJOKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVF
cnJvcihleGVjLCBpZGVudCkpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9
CiAKICAgICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4gU2luY2UgdGhleSBkb24ndCBleGlz
dCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4ndCBrbm93IGhvdyB0byBjYWNoZSB0
aGVtIGF0IGNvbXBpbGUgdGltZS4KQEAgLTE0MzIsNyArMTQzMSwyMyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBMTElO
VF9SRVRVUk4oc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudCkpOworICAgIHJldHVybiBzbG90Lmdl
dFZhbHVlKGV4ZWMsIGlkZW50KTsKK30KKworTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X2dldF9mcm9tX3Njb3BlKQoreworICAgIExMSU5UX0JFR0lOKCk7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IGdldEZyb21TY29wZUNvbW1vbihleGVjLCBwYywgdm0pOworICAgIExMSU5UX1JFVFVSTih2
YWx1ZSk7Cit9CisKK0xMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfZnJvbV9zY29w
ZV93aXRoX3Byb2ZpbGUpCit7CisgICAgTExJTlRfQkVHSU4oKTsKKyAgICBKU1ZhbHVlIHZhbHVl
ID0gZ2V0RnJvbVNjb3BlQ29tbW9uKGV4ZWMsIHBjLCB2bSk7CisgICAgVHlwZUxvY2F0aW9uKiBs
b2NhdGlvbiA9IHBjWzhdLnUubG9jYXRpb247CisgICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnJl
Y29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKHZhbHVlLCBsb2NhdGlvbik7CisgICAgTExJ
TlRfUkVUVVJOKHZhbHVlKTsKIH0KIAogc3RhdGljIEpTT2JqZWN0KiBwdXRUb1Njb3BlQ29tbW9u
KEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjLCBWTSYgdm0pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAkocmV2aXNpb24gMTcwNzc2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMyw2ICsxMjMsNyBAQCBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX3ByCiBMTElOVF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2hhbmRs
ZV9leGNlcHRpb24pOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yZXNv
bHZlX3Njb3BlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2Zy
b21fc2NvcGUpOworTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfZnJv
bV9zY29wZV93aXRoX3Byb2ZpbGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9wdXRfdG9fc2NvcGUpOwogTExJTlRfU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKTsKIExMSU5UX1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxpdHkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkocmV2aXNpb24gMTcwNzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQwLDMgKzEyNDAsOCBAQCBf
bGxpbnRfb3BfcHV0X3RvX3Njb3BlX3dpdGhfcHJvZmlsZToKICAgICB0cmFjZUV4ZWN1dGlvbigp
CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcHV0X3RvX3Njb3BlX3dpdGhfcHJv
ZmlsZSkKICAgICBkaXNwYXRjaCg4KQorCitfbGxpbnRfb3BfZ2V0X2Zyb21fc2NvcGVfd2l0aF9w
cm9maWxlOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Ns
b3dfcGF0aF9nZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUpCisgICAgZGlzcGF0Y2goOSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9n
LmNwcAkocmV2aXNpb24gMTcwNzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGlnaEZpZGVsaXR5TG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMjIgKzUzLDYgQEAgSGln
aEZpZGVsaXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKCkKICAgICBkZWxldGVbXSBtX25leHRCdWZm
ZXI7CiB9CiAKLXZvaWQgSGlnaEZpZGVsaXR5TG9nOjpyZWNvcmRUeXBlSW5mb3JtYXRpb25Gb3JM
b2NhdGlvbihKU1ZhbHVlIHYsIFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCi17Ci0gICAgQVNTRVJU
KG1fbG9nU3RhcnRQdHIpOwotICAgIEFTU0VSVChtX2N1cnJlbnRPZmZzZXQgPCBtX2hpZ2hGaWRl
bGl0eUxvZ1NpemUpOwotCi0gICAgTG9nRW50cnkqIGVudHJ5ID0gbV9sb2dTdGFydFB0ciArIG1f
Y3VycmVudE9mZnNldDsKLQotICAgIGVudHJ5LT5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgIGVu
dHJ5LT52YWx1ZSA9IHY7Ci0gICAgZW50cnktPnN0cnVjdHVyZSA9ICh2LmlzQ2VsbCgpID8gdi5h
c0NlbGwoKS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKLQotICAgIG1fY3VycmVudE9mZnNldCAr
PSAxOwotICAgIGlmIChtX2N1cnJlbnRPZmZzZXQgPT0gbV9oaWdoRmlkZWxpdHlMb2dTaXplKQot
ICAgICAgICBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKHRydWUsICJMb2cgRnVsbCIpOwotfQotCiB2
b2lkIEhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhib29sIGFzeW5jaHJv
bm91c2x5LCBTdHJpbmcgcmVhc29uKQogewogICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGZyb20gdGhlIG1haW4gZXhlY3V0aW9uIHRocmVhZC4KQEAgLTg1LDkgKzY5LDcgQEAgdm9p
ZCBIaWdoRmlkZWxpdHlMb2c6OnByb2Nlc3NIaWdoRmlkZWxpdAogICAgIGRhdGEtPm1fbG9ja2Vy
ID0gbG9ja2VyOwogCiAgICAgbV9jdXJyZW50T2Zmc2V0ID0gMDsKLSAgICBMb2dFbnRyeSogdGVt
cCA9IG1fbG9nU3RhcnRQdHI7Ci0gICAgbV9sb2dTdGFydFB0ciA9IG1fbmV4dEJ1ZmZlcjsKLSAg
ICBtX25leHRCdWZmZXIgPSB0ZW1wOworICAgIHN0ZDo6c3dhcChtX2xvZ1N0YXJ0UHRyLCBtX25l
eHRCdWZmZXIpOwogICAgIAogICAgIGlmIChhc3luY2hyb25vdXNseSkKICAgICAgICAgY3JlYXRl
VGhyZWFkKGFjdHVhbGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0aW9uLCBkYXRhLCAiUHJvY2Vzc0hp
Z2hGaWRlbGl0eUxvZyIpOwpAQCAtOTcsMTkgKzc5LDI4IEBAIHZvaWQgSGlnaEZpZGVsaXR5TG9n
Ojpwcm9jZXNzSGlnaEZpZGVsaXQKIAogdm9pZCBIaWdoRmlkZWxpdHlMb2c6OmFjdHVhbGx5UHJv
Y2Vzc0xvZ1RocmVhZEZ1bmN0aW9uKHZvaWQqIGFyZykKIHsKLSAgICBkb3VibGUgYmVmb3JlICA9
IGN1cnJlbnRUaW1lTVMoKTsKKyAgICBkb3VibGUgYmVmb3JlID0gY3VycmVudFRpbWVNUygpOwog
ICAgIFRocmVhZERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxUaHJlYWREYXRhKj4oYXJnKTsKICAg
ICBMb2dFbnRyeSogZW50cnkgPSBkYXRhLT5tX3Byb2Nlc3NMb2dQdHI7CisgICAgSGFzaE1hcDxT
dHJ1Y3R1cmVJRCwgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4gc2VlblNoYXBlczsKICAgICBzaXpl
X3QgcHJvY2Vzc0xvZ1RvT2Zmc2V0ID0gZGF0YS0+bV9wcm9jY2Vzc0xvZ1RvT2Zmc2V0OyAKICAg
ICBzaXplX3QgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCBwcm9jZXNzTG9nVG9PZmZzZXQpIHsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBlbnRyeS0+c3RydWN0dXJlID8gZW50cnktPnN0
cnVjdHVyZSA6IG51bGxwdHI7CisgICAgICAgIFN0cnVjdHVyZUlEIGlkID0gZW50cnktPnN0cnVj
dHVyZUlEOwogICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlOyAKLSAgICAgICAg
aWYgKHN0cnVjdHVyZSkKLSAgICAgICAgICAgIHNoYXBlID0gc3RydWN0dXJlLT50b1N0cnVjdHVy
ZVNoYXBlKCk7CisgICAgICAgIGlmIChpZCkgeworICAgICAgICAgICAgYXV0byBpdGVyID0gc2Vl
blNoYXBlcy5maW5kKGlkKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IHNlZW5TaGFwZXMuZW5k
KCkpIHsKKyAgICAgICAgICAgICAgICBzaGFwZSA9IGVudHJ5LT52YWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCktPnRvU3RydWN0dXJlU2hhcGUoKTsKKyAgICAgICAgICAgICAgICBzZWVuU2hhcGVz
LnNldChpZCwgc2hhcGUpOworICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgICAgIHNo
YXBlID0gaXRlci0+dmFsdWU7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoZW50cnktPmxvY2F0
aW9uLT5tX2dsb2JhbFR5cGVTZXQpCi0gICAgICAgICAgICBlbnRyeS0+bG9jYXRpb24tPm1fZ2xv
YmFsVHlwZVNldC0+YWRkVHlwZUZvclZhbHVlKGVudHJ5LT52YWx1ZSwgc2hhcGUpOwotICAgICAg
ICBlbnRyeS0+bG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hZGRUeXBlRm9yVmFsdWUo
ZW50cnktPnZhbHVlLCBzaGFwZSk7CisgICAgICAgICAgICBlbnRyeS0+bG9jYXRpb24tPm1fZ2xv
YmFsVHlwZVNldC0+YWRkVHlwZUZvclZhbHVlKGVudHJ5LT52YWx1ZSwgc2hhcGUsIGlkKTsKKyAg
ICAgICAgZW50cnktPmxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWRkVHlwZUZvclZh
bHVlKGVudHJ5LT52YWx1ZSwgc2hhcGUsIGlkKTsKKwogICAgICAgICBlbnRyeSsrOwogICAgICAg
ICBpKys7CiAgICAgfQpAQCAtMTE4LDcgKzEwOSw3IEBAIHZvaWQgSGlnaEZpZGVsaXR5TG9nOjph
Y3R1YWxseVByb2Nlc3NMb2cKICAgICBkZWxldGUgZGF0YTsKICAgICBkb3VibGUgYWZ0ZXIgPSBj
dXJyZW50VGltZU1TKCk7CiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJQcm9j
ZXNzaW5nIHRoZSBsb2cgdG9vazogJyVmJyBtc1xuIiwgYWZ0ZXIgLSBiZWZvcmUpOworICAgICAg
ICBkYXRhTG9nRigiIFByb2Nlc3NpbmcgdGhlIGxvZyB0b29rOiAnJWYnIG1zXG4iLCBhZnRlciAt
IGJlZm9yZSk7CiB9CiAKIH0gLy9uYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuaAkocmV2aXNpb24gMTcwNzc2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICBwdWJsaWM6CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWU7CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb247IAotICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJl
SUQ7CiAgICAgfTsKIAogICAgIEhpZ2hGaWRlbGl0eUxvZygpCkBAIC01Niw3ICs1NiwyMiBAQCBw
dWJsaWM6CiAKICAgICB+SGlnaEZpZGVsaXR5TG9nKCk7CiAKLSAgICB2b2lkIHJlY29yZFR5cGVJ
bmZvcm1hdGlvbkZvckxvY2F0aW9uKEpTVmFsdWUgdiwgVHlwZUxvY2F0aW9uKik7CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHJlY29yZFR5cGVJbmZvcm1hdGlvbkZvckxvY2F0aW9uKEpTVmFsdWUg
dmFsdWUsIFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQobV9s
b2dTdGFydFB0cik7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnRPZmZzZXQgPCBtX2hpZ2hGaWRl
bGl0eUxvZ1NpemUpOworICAgIAorICAgICAgICBMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0
UHRyICsgbV9jdXJyZW50T2Zmc2V0OworICAgIAorICAgICAgICBlbnRyeS0+bG9jYXRpb24gPSBs
b2NhdGlvbjsKKyAgICAgICAgZW50cnktPnZhbHVlID0gdmFsdWU7CisgICAgICAgIGVudHJ5LT5z
dHJ1Y3R1cmVJRCA9ICh2YWx1ZS5pc0NlbGwoKSA/IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJ
RCgpIDogMCk7CisgICAgCisgICAgICAgIG1fY3VycmVudE9mZnNldCArPSAxOworICAgICAgICBp
ZiAobV9jdXJyZW50T2Zmc2V0ID09IG1faGlnaEZpZGVsaXR5TG9nU2l6ZSkKKyAgICAgICAgICAg
IHByb2Nlc3NIaWdoRmlkZWxpdHlMb2codHJ1ZSwgIkxvZyBGdWxsIik7CisgICAgfQorCiAgICAg
dm9pZCBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGJvb2wgYXN5bmNocm9ub3VzbHkgPSBmYWxzZSwg
U3RyaW5nID0gIiIpOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuY3BwCShyZXZp
c2lvbiAxNzA3NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxp
dHlUeXBlUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1NyArMzIsNjcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAotU3Ry
aW5nIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0VHlwZXNGb3JWYXJpYWJsZUluUmFuZ2Uo
dW5zaWduZWQgc3RhcnRMaW5lLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kTGlu
ZSAsIHVuc2lnbmVkIGVuZENvbHVtbiwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUsIGludHB0
cl90IHNvdXJjZUlEKQorU3RyaW5nIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0VHlwZXNG
b3JWYXJpYWJsZUluQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFi
bGVOYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCkKIHsKLSAgICBTdHJpbmcgZ2xvYmFsID0gZ2V0R2xv
YmFsVHlwZXNGb3JWYXJpYWJsZUluUmFuZ2Uoc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGlu
ZSwgZW5kQ29sdW1uLCB2YXJpYWJsZU5hbWUsIHNvdXJjZUlEKTsKKyAgICBTdHJpbmcgZ2xvYmFs
ID0gZ2V0R2xvYmFsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KGRpdm90LCB2YXJpYWJsZU5hbWUs
IHNvdXJjZUlEKTsKICAgICBpZiAoIWdsb2JhbC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBn
bG9iYWw7CiAgICAgCi0gICAgcmV0dXJuIGdldExvY2FsVHlwZXNGb3JWYXJpYWJsZUluUmFuZ2Uo
c3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSwgZW5kQ29sdW1uLCB2YXJpYWJsZU5hbWUs
IHNvdXJjZUlEKTsKKyAgICByZXR1cm4gZ2V0TG9jYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQo
ZGl2b3QsIHZhcmlhYmxlTmFtZSwgc291cmNlSUQpOwogfQogCi1XVEY6OlN0cmluZyBIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsZXI6OmdldEdsb2JhbFR5cGVzRm9yVmFyaWFibGVJblJhbmdlKHVuc2ln
bmVkIHN0YXJ0TGluZSwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgV1RGOjpT
dHJpbmcmLCBpbnRwdHJfdCBzb3VyY2VJRCkKK1N0cmluZyBIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXI6OmdldEdsb2JhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29u
c3QgU3RyaW5nJiAsIGludHB0cl90IHNvdXJjZUlEKQogewotICAgIGF1dG8gaXRlckxvY2F0aW9u
TWFwID0gbV9nbG9iYWxMb2NhdGlvblRvR2xvYmFsSURNYXAuZmluZChnZXRMb2NhdGlvbkJhc2Vk
SGFzaChzb3VyY2VJRCwgc3RhcnRMaW5lKSk7Ci0gICAgaWYgKGl0ZXJMb2NhdGlvbk1hcCA9PSBt
X2dsb2JhbExvY2F0aW9uVG9HbG9iYWxJRE1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICIiOwor
ICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBmaW5kTG9jYXRpb24oZGl2b3QsIHNvdXJjZUlE
KTsKKyAgICBpZiAoIWxvY2F0aW9uKQorICAgICAgICByZXR1cm4gICIiOwogCi0gICAgYXV0byBp
dGVySURNYXAgPSBtX2dsb2JhbElETWFwLmZpbmQoaXRlckxvY2F0aW9uTWFwLT5zZWNvbmQpOwot
ICAgIGlmIChpdGVySURNYXAgPT0gbV9nbG9iYWxJRE1hcC5lbmQoKSkKKyAgICBpZiAobG9jYXRp
b24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzKQog
ICAgICAgICByZXR1cm4gIiI7CiAKLSAgICByZXR1cm4gaXRlcklETWFwLT5zZWNvbmQtPnNlZW5U
eXBlcygpOworICAgIHJldHVybiBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5zZWVuVHlwZXMo
KTsKIH0KIAotV1RGOjpTdHJpbmcgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRMb2NhbFR5
cGVzRm9yVmFyaWFibGVJblJhbmdlKHVuc2lnbmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgLCB1bnNp
Z25lZCAsIHVuc2lnbmVkICwgY29uc3QgV1RGOjpTdHJpbmcmICwgaW50cHRyX3Qgc291cmNlSUQp
CitTdHJpbmcgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRMb2NhbFR5cGVzRm9yVmFyaWFi
bGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiAsIGludHB0cl90IHNvdXJj
ZUlEKQogewotICAgIGF1dG8gaXRlciA9IG1fZ2xvYmFsTG9jYXRpb25NYXAuZmluZChnZXRMb2Nh
dGlvbkJhc2VkSGFzaChzb3VyY2VJRCwgc3RhcnRMaW5lKSk7Ci0gICAgYXV0byBlbmQgPSBtX2ds
b2JhbExvY2F0aW9uTWFwLmVuZCgpOwotICAgIGlmIChpdGVyID09IGVuZCkKKyAgICBUeXBlTG9j
YXRpb24qIGxvY2F0aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3VyY2VJRCk7CisgICAgaWYg
KCFsb2NhdGlvbikKICAgICAgICAgcmV0dXJuICAiIjsKIAotICAgIHJldHVybiBpdGVyLT5zZWNv
bmQtPnNlZW5UeXBlcygpOworICAgIHJldHVybiBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVT
ZXQtPnNlZW5UeXBlcygpOwogfQogCiB2b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6aW5z
ZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikKIHsKICAgICBpZiAodmVyYm9z
ZSkKLSAgICAgICAgZGF0YUxvZ0YoIlJlZ2lzdGVyaW5nIGxvY2F0aW9uOjogbGluZToldSwgY29s
dW1uOiV1XG4iLCBsb2NhdGlvbi0+bV9saW5lLCBsb2NhdGlvbi0+bV9jb2x1bW4pOwotCi0gICAg
TG9jYXRpb25LZXkga2V5KGdldExvY2F0aW9uQmFzZWRIYXNoKGxvY2F0aW9uLT5tX3NvdXJjZUlE
LCBsb2NhdGlvbi0+bV9saW5lKSk7CisgICAgICAgIGRhdGFMb2dGKCJSZWdpc3RlcmluZyBsb2Nh
dGlvbjo6IGRpdm90U3RhcnQ6JXUsIGRpdm90RW5kOiV1XG4iLCBsb2NhdGlvbi0+bV9kaXZvdFN0
YXJ0LCBsb2NhdGlvbi0+bV9kaXZvdEVuZCk7CiAKLSAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFs
VmFyaWFibGVJRCAhPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzKSB7IAotICAgICAgICAv
LyBCdWlsZCB0aGUgbWFwcGluZyByZWxhdGlvbnNoaXBzIE1hcDE6a2V5PT5nbG9iYWxJZCwgTWFw
MjpnbG9iYWxJRD0+VHlwZVNldCAKLSAgICAgICAgbV9nbG9iYWxMb2NhdGlvblRvR2xvYmFsSURN
YXBba2V5XSA9IGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQ7Ci0gICAgICAgIG1fZ2xvYmFs
SURNYXBbbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRF0gPSBsb2NhdGlvbi0+bV9nbG9iYWxU
eXBlU2V0OworICAgIGlmICghbV9idWNrZXRNYXAuY29udGFpbnMobG9jYXRpb24tPm1fc291cmNl
SUQpKSB7CisgICAgICAgIFZlY3RvcjxUeXBlTG9jYXRpb24qPiBidWNrZXQ7CisgICAgICAgIG1f
YnVja2V0TWFwLnNldChsb2NhdGlvbi0+bV9zb3VyY2VJRCwgYnVja2V0KTsKICAgICB9CiAKLSAg
ICBtX2dsb2JhbExvY2F0aW9uTWFwW2tleV0gPSBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVT
ZXQ7CisgICAgVmVjdG9yPFR5cGVMb2NhdGlvbio+JiBidWNrZXQgPSBtX2J1Y2tldE1hcC5maW5k
KGxvY2F0aW9uLT5tX3NvdXJjZUlEKS0+dmFsdWU7CisgICAgYnVja2V0LmFwcGVuZChsb2NhdGlv
bik7CiB9CiAKLUxvY2F0aW9uS2V5IEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0TG9jYXRp
b25CYXNlZEhhc2goaW50cHRyX3QgaWQsIHVuc2lnbmVkIGxpbmUpCitUeXBlTG9jYXRpb24qIEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKHVuc2lnbmVkIGRpdm90LCBpbnRw
dHJfdCBzb3VyY2VJRCkKIHsKLSAgICByZXR1cm4gTG9jYXRpb25LZXkoaWQsIGxpbmUsIDEpOwor
ICAgIEFTU0VSVChtX2J1Y2tldE1hcC5jb250YWlucyhzb3VyY2VJRCkpOyAKKworICAgIFZlY3Rv
cjxUeXBlTG9jYXRpb24qPiYgYnVja2V0ID0gbV9idWNrZXRNYXAuZmluZChzb3VyY2VJRCktPnZh
bHVlOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gVUlOVF9NQVg7IC8vIEJlY2F1c2UgYXNzaWdu
bWVudHMgbWF5IGJlIG5lc3RlZCwgbWFrZSBzdXJlIHdlIGZpbmQgdGhlIGNsb3Nlc3QgZW5jbG9z
aW5nIGFzc2lnbm1lbnQgdG8gdGhpcyBjaGFyYWN0ZXIgb2Zmc2V0LgorICAgIFR5cGVMb2NhdGlv
biogYmVzdE1hdGNoID0gbnVsbHB0cjsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGJ1
Y2tldC5zaXplKCk7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2Nh
dGlvbiA9IGJ1Y2tldC5hdChpKTsKKyAgICAgICAgaWYgKGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQg
PD0gZGl2b3QgJiYgZGl2b3QgPD0gbG9jYXRpb24tPm1fZGl2b3RFbmQgJiYgbG9jYXRpb24tPm1f
ZGl2b3RFbmQgLSBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0IDw9IGRpc3RhbmNlKSB7CisgICAgICAg
ICAgICBkaXN0YW5jZSA9IGxvY2F0aW9uLT5tX2Rpdm90RW5kIC0gbG9jYXRpb24tPm1fZGl2b3RT
dGFydDsKKyAgICAgICAgICAgIGJlc3RNYXRjaCA9IGxvY2F0aW9uOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gRklYTUU6IEJlc3RNYXRjaCBzaG91bGQgbmV2ZXIgYmUgbnVsbC4gVGhpcyBk
b2Vzbid0IGhvbGQgY3VycmVudGx5IGJlY2F1c2Ugd2UgaWdub3JlIHNvbWUgRXZhbC9XaXRoL1Zh
ckluamVjdGlvbiB2YXJpYWJsZSBhc3NpZ25tZW50cy4KKyAgICByZXR1cm4gYmVzdE1hdGNoOwog
fQogCiB9IC8vbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgJKHJldmlzaW9uIDE3
MDc3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw1NyArMzEsMjUgQEAKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWV0aG9kLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgVHlwZUxvY2F0aW9uOwogCi1zdHJ1Y3QgTG9jYXRpb25LZXkgewotCi1w
dWJsaWM6Ci0gICAgTG9jYXRpb25LZXkoaW50cHRyX3Qgc291cmNlSUQsIHVuc2lnbmVkIGxpbmUs
IHVuc2lnbmVkIGNvbHVtbikgCi0gICAgICAgIDogbV9zb3VyY2VJRChzb3VyY2VJRCkKLSAgICAg
ICAgLCBtX2xpbmUobGluZSkKLSAgICAgICAgLCBtX2NvbHVtbihjb2x1bW4pCi0KLSAgICB7Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9saW5lICsgbV9zb3VyY2VJRDsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogRm9yIG5vdywgdGhp
cyBpcyBhIGhhY2suIFdlIGRvIHRoZSBmb2xsb3dpbmc6IE1hcDoiSUQ6TGluZSIgPT4gVHlwZVNl
dC4gT2J2aW91c2x5LCB0aGlzIGFzc3VtZXMgYWxsIGFzc2lnbm1lbnRzIGFyZSBvbiBkaXNjcmV0
ZSBsaW5lcywgd2hpY2ggaXMgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24uCi0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IExvY2F0aW9uS2V5JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3NvdXJjZUlEID09IG90aGVyLm1fc291cmNlSUQKLSAgICAgICAgICAgICAgICYmIG1f
bGluZSA9PSBvdGhlci5tX2xpbmU7Ci0gICAgfQotCi0gICAgaW50cHRyX3QgbV9zb3VyY2VJRDsK
LSAgICB1bnNpZ25lZCBtX2xpbmU7Ci0gICAgdW5zaWduZWQgbV9jb2x1bW47Ci19OwotCiBjbGFz
cyBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIgewogCiBwdWJsaWM6Ci0gICAgU3RyaW5nIGdldFR5
cGVzRm9yVmFyaWFibGVJblJhbmdlKHVuc2lnbmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgc3RhcnRD
b2x1bW4sIHVuc2lnbmVkIGVuZExpbmUsIHVuc2lnbmVkIGVuZENvbHVtbiwgY29uc3QgU3RyaW5n
JiB2YXJpYWJsZU5hbWUsIGludHB0cl90IHNvdXJjZUlEKTsKLSAgICBTdHJpbmcgZ2V0R2xvYmFs
VHlwZXNGb3JWYXJpYWJsZUluUmFuZ2UodW5zaWduZWQgc3RhcnRMaW5lLCB1bnNpZ25lZCBzdGFy
dENvbHVtbiwgdW5zaWduZWQgZW5kTGluZSwgdW5zaWduZWQgZW5kQ29sdW1uLCBjb25zdCBTdHJp
bmcmIHZhcmlhYmxlTmFtZSwgaW50cHRyX3Qgc291cmNlSUQpOwotICAgIFN0cmluZyBnZXRMb2Nh
bFR5cGVzRm9yVmFyaWFibGVJblJhbmdlKHVuc2lnbmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgc3Rh
cnRDb2x1bW4sIHVuc2lnbmVkIGVuZExpbmUsIHVuc2lnbmVkIGVuZENvbHVtbiwgY29uc3QgU3Ry
aW5nJiB2YXJpYWJsZU5hbWUsIGludHB0cl90IHNvdXJjZUlEKTsKKyAgICBTdHJpbmcgZ2V0VHlw
ZXNGb3JWYXJpYWJsZUluQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFy
aWFibGVOYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCk7CisgICAgU3RyaW5nIGdldEdsb2JhbFR5cGVz
Rm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiB2YXJpYWJs
ZU5hbWUsIGludHB0cl90IHNvdXJjZUlEKTsKKyAgICBTdHJpbmcgZ2V0TG9jYWxUeXBlc0ZvclZh
cmlhYmxlQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1l
LCBpbnRwdHJfdCBzb3VyY2VJRCk7CiAgICAgdm9pZCBpbnNlcnROZXdMb2NhdGlvbihUeXBlTG9j
YXRpb24qKTsKICAgICAKIHByaXZhdGU6Ci0gICAgc3RhdGljIExvY2F0aW9uS2V5IGdldExvY2F0
aW9uQmFzZWRIYXNoKGludHB0cl90LCB1bnNpZ25lZCk7CisgICAgVHlwZUxvY2F0aW9uKiBmaW5k
TG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlEKTsKIAotICAgIHR5cGVk
ZWYgc3RkOjp1bm9yZGVyZWRfbWFwPExvY2F0aW9uS2V5LCBSZWZQdHI8VHlwZVNldD4sIEhhc2hN
ZXRob2Q8TG9jYXRpb25LZXk+PiBHbG9iYWxMb2NhdGlvbk1hcDsgCi0gICAgdHlwZWRlZiBzdGQ6
OnVub3JkZXJlZF9tYXA8aW50NjRfdCwgUmVmUHRyPFR5cGVTZXQ+PiBHbG9iYWxJRE1hcDsgCi0g
ICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8TG9jYXRpb25LZXksIGludDY0X3QsIEhhc2hN
ZXRob2Q8TG9jYXRpb25LZXk+PiBHbG9iYWxMb2NhdGlvblRvR2xvYmFsSURNYXA7Ci0KLSAgICBH
bG9iYWxJRE1hcCBtX2dsb2JhbElETWFwOwotICAgIEdsb2JhbExvY2F0aW9uTWFwIG1fZ2xvYmFs
TG9jYXRpb25NYXA7Ci0gICAgR2xvYmFsTG9jYXRpb25Ub0dsb2JhbElETWFwIG1fZ2xvYmFsTG9j
YXRpb25Ub0dsb2JhbElETWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgVmVjdG9y
PFR5cGVMb2NhdGlvbio+PiBTb3VyY2VJRFRvTG9jYXRpb25CdWNrZXRNYXA7CisgICAgU291cmNl
SURUb0xvY2F0aW9uQnVja2V0TWFwIG1fYnVja2V0TWFwOwogfTsKIAogfSAvL25hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMTcwNzc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyNCw3ICsxMTI0LDYgQEAgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmVTaGFwZT4gU3RydWN0dXJlOjp0bwogICAgIH0KIAogICAgIHNoYXBlLT5tYXJrQXNG
aW5hbCgpOwotCiAgICAgcmV0dXJuIHNoYXBlLnJlbGVhc2UoKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDE3MDc3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw3IEBAIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogY2xhc3MgUHJvcGVy
dHlOYW1lQXJyYXlEYXRhOwogY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVjdHVyZUNo
YWluOworY2xhc3MgU3RydWN0dXJlU2hhcGU7CiBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIEpT
U3RyaW5nOwogc3RydWN0IER1bXBDb250ZXh0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE3MDc3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogVHlwZVNldDo6VHlwZVNldCgpCiAgICAgOiBtX3NlZW5UeXBl
cyhUeXBlTm90aGluZykKICAgICAsIG1fc3RydWN0dXJlSGlzdG9yeShuZXcgVmVjdG9yPFJlZlB0
cjxTdHJ1Y3R1cmVTaGFwZT4+KQotICAgICwgbV9taWdodEhhdmVEdXBsaWNhdGVzSW5TdHJ1Y3R1
cmVIaXN0b3J5KGZhbHNlKQogewogfQogCkBAIC02OSwzNCArNjgsMzEgQEAgUnVudGltZVR5cGUg
VHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYQogICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQg
VHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVT
aGFwZT4gc2hhcGUpIAordm9pZCBUeXBlU2V0OjphZGRUeXBlRm9yVmFsdWUoSlNWYWx1ZSB2LCBQ
YXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZSwgU3RydWN0dXJlSUQgaWQpIAogewogICAg
IFJ1bnRpbWVUeXBlIHQgPSBnZXRSdW50aW1lVHlwZUZvclZhbHVlKHYpOwogICAgIG1fc2VlblR5
cGVzID0gbV9zZWVuVHlwZXMgfCB0OwogCi0gICAgaWYgKHNoYXBlKSB7Ci0gICAgICAgIG1fc3Ry
dWN0dXJlSGlzdG9yeS0+YXBwZW5kKHNoYXBlKTsKLSAgICAgICAgbV9taWdodEhhdmVEdXBsaWNh
dGVzSW5TdHJ1Y3R1cmVIaXN0b3J5ID0gdHJ1ZTsKLSAgICB9Ci19CisgICAgaWYgKGlkICYmIHNo
YXBlKSB7CisgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZUlESGlzdG9yeS5pc1ZhbGlkS2V5KGlk
KSk7CisgICAgICAgIGF1dG8gaXRlciA9IG1fc3RydWN0dXJlSURIaXN0b3J5LmZpbmQoaWQpOwor
ICAgICAgICBpZiAoaXRlciA9PSBtX3N0cnVjdHVyZUlESGlzdG9yeS5lbmQoKSkgeworICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmVJREhpc3Rvcnkuc2V0KGlkLCAxKTsKKyAgICAgICAgICAgIC8vIE1h
a2Ugb25lIG1vcmUgcGFzcyBtYWtpbmcgc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIHNhbWUg
c2hhcGUuIChTYW1lIHNoYXBlcyBtYXkgaGF2ZSBkaWZmZXJlbnQgU3RydWN0dXJlSURzKS4KKyAg
ICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIFN0cmluZyBoYXNoID0g
c2hhcGUtPnByb3BlcnR5SGFzaCgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPiBvYmogPSBtX3N0cnVjdHVyZUhpc3RvcnktPmF0KGkpOworICAg
ICAgICAgICAgICAgIGlmIChvYmotPnByb3BlcnR5SGFzaCgpID09IGhhc2gpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLXZvaWQgVHlwZVNldDo6cmVtb3ZlRHVw
bGljYXRlc0luU3RydWN0dXJlSGlzdG9yeSgpIAotewotICAgIFZlY3RvcjxSZWZQdHI8U3RydWN0
dXJlU2hhcGU+PiogbmV3SGlzdG9yeSA9IG5ldyBWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBl
Pj47Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGJvb2w+IGNvbnRhaW5lcjsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fc3RydWN0dXJlSGlzdG9yeS0+c2l6ZSgpOyBpKyspIHsKLSAgICAgICAg
UmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBhID0gbV9zdHJ1Y3R1cmVIaXN0b3J5LT5hdChpKTsKLSAg
ICAgICAgU3RyaW5nIGhhc2ggPSBhLT5wcm9wZXJ0eUhhc2goKTsKLSAgICAgICAgYXV0byBpdGVy
ID0gY29udGFpbmVyLmZpbmQoaGFzaCk7Ci0gICAgICAgIGlmIChpdGVyID09IGNvbnRhaW5lci5l
bmQoKSkgewotICAgICAgICAgICAgY29udGFpbmVyLmFkZChoYXNoLCB0cnVlKTsKLSAgICAgICAg
ICAgIG5ld0hpc3RvcnktPmFwcGVuZChhKTsKKyAgICAgICAgICAgIGlmICghZm91bmQpCisgICAg
ICAgICAgICAgICAgbV9zdHJ1Y3R1cmVIaXN0b3J5LT5hcHBlbmQoc2hhcGUpOwogICAgICAgICB9
CiAgICAgfQotCi0gICAgZGVsZXRlIG1fc3RydWN0dXJlSGlzdG9yeTsKLSAgICBtX3N0cnVjdHVy
ZUhpc3RvcnkgPSBuZXdIaXN0b3J5OwotICAgIG1fbWlnaHRIYXZlRHVwbGljYXRlc0luU3RydWN0
dXJlSGlzdG9yeSA9IGZhbHNlOwogfQogCiBTdHJpbmcgVHlwZVNldDo6c2VlblR5cGVzKCkgCkBA
IC0xMDQsOSArMTAwLDYgQEAgU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIAogICAgIGlmICht
X3NlZW5UeXBlcyA9PSBUeXBlTm90aGluZykKICAgICAgICAgcmV0dXJuICIoVW5yZWFjaGVkIFN0
YXRlbWVudCkiOwogCi0gICAgaWYgKG1fbWlnaHRIYXZlRHVwbGljYXRlc0luU3RydWN0dXJlSGlz
dG9yeSkKLSAgICAgICAgcmVtb3ZlRHVwbGljYXRlc0luU3RydWN0dXJlSGlzdG9yeSgpOwotCiAg
ICAgU3RyaW5nQnVpbGRlciBzZWVuOwogCiAgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZUZ1bmN0
aW9uKQpAQCAtMTI4LDYgKzEyMSwxNCBAQCBTdHJpbmcgVHlwZVNldDo6c2VlblR5cGVzKCkgCiAg
ICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZU9iamVjdCkKICAgICAgICAgIHNlZW4uYXBwZW5kKCJP
YmplY3QgIik7CiAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlSGlzdG9y
eS0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZSA9
IG1fc3RydWN0dXJlSGlzdG9yeS0+YXQoaSk7CisgICAgICAgIGlmICghc2hhcGUtPm1fY29uc3Ry
dWN0b3JOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgc2Vlbi5hcHBlbmQoc2hhcGUtPm1f
Y29uc3RydWN0b3JOYW1lKTsKKyAgICAgICAgICAgIHNlZW4uYXBwZW5kKCIgIik7CisgICAgICAg
IH0KKyAgICB9CisKICAgICBpZiAobV9zdHJ1Y3R1cmVIaXN0b3J5LT5zaXplKCkpIAogICAgICAg
ICBzZWVuLmFwcGVuZCgiXG5TdHJ1Y3R1cmVzOlsgIik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKTsgaSsrKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCShyZXZpc2lvbiAxNzA3NzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgVHlwZVNldF9oCiAjZGVmaW5lIFR5cGVTZXRfaAogCisjaW5jbHVk
ZSAiU3RydWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAg
LTYwLDEwICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRQcm9wZXJ0eShSZWZQdHI8U3Ry
aW5nSW1wbD4pOwogICAgIHN0YXRpYyBTdHJpbmcgbGVhc3RVcHBlckJvdW5kKFZlY3RvcjxSZWZQ
dHI8U3RydWN0dXJlU2hhcGU+PiopOwogICAgIFN0cmluZyBzdHJpbmdSZXByZXNlbnRhdGlvbigp
OworICAgIHZvaWQgc2V0Q29uc3RydWN0b3JOYW1lKFN0cmluZyBuYW1lKSB7IG1fY29uc3RydWN0
b3JOYW1lID0gbmFtZTsgfQogCiBwcml2YXRlOgogICAgIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0lt
cGw+LCBib29sPiBtX2ZpZWxkczsgICAgICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RyaW5n
PiBtX3Byb3BlcnR5SGFzaDsKKyAgICBTdHJpbmcgbV9jb25zdHJ1Y3Rvck5hbWU7CiAgICAgYm9v
bCBtX2ZpbmFsOwogfTsKIApAQCAtNzIsNyArNzUsNyBAQCBjbGFzcyBUeXBlU2V0IDogcHVibGlj
IFJlZkNvdW50ZWQ8VHlwZVNlCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8VHlwZVNl
dD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFR5cGVTZXQpOyB9CiAgICAgVHlwZVNl
dCgpOwotICAgIHZvaWQgYWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVTaGFwZT4pOworICAgIHZvaWQgYWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT4sIFN0cnVjdHVyZUlEKTsKICAgICBzdGF0aWMgUnVudGltZVR5
cGUgZ2V0UnVudGltZVR5cGVGb3JWYWx1ZShKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBTdHJpbmcgc2VlblR5cGVzKCk7CiAKQEAgLTgwLDkgKzgzLDcgQEAgcHJpdmF0ZToKICAgICB1
aW50MzJfdCBtX3NlZW5UeXBlczsKICAgICB2b2lkIGR1bXBTZWVuVHlwZXMoKTsKICAgICBWZWN0
b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qIG1fc3RydWN0dXJlSGlzdG9yeTsKLSAgICBib29s
IG1fbWlnaHRIYXZlRHVwbGljYXRlc0luU3RydWN0dXJlSGlzdG9yeTsKLSAgICB2b2lkIHJlbW92
ZUR1cGxpY2F0ZXNJblN0cnVjdHVyZUhpc3RvcnkoKTsKLQorICAgIEhhc2hNYXA8U3RydWN0dXJl
SUQsIHVpbnQ4X3Q+IG1fc3RydWN0dXJlSURIaXN0b3J5OwogfTsKIAogfSAvL25hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3MDc3
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTI2LDcgKzkyNiw3IEBAIHZvaWQgVk06OnNldEVuYWJsZWRQcm9maWxlcihMZWdhY3lQ
cm9maWwKICAgICB9CiB9CiAKLVN0cmluZyBWTTo6Z2V0VHlwZXNGb3JWYXJpYWJsZUluUmFuZ2Uo
dW5zaWduZWQgc3RhcnRMaW5lLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kTGlu
ZSwgdW5zaWduZWQgZW5kQ29sdW1uLCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2VJREFzU3RyaW5nKQorU3RyaW5nIFZNOjpnZXRUeXBlc0ZvclZhcmlhYmxl
QXRPZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VJREFzU3RyaW5nKQogewogICAgIGlmICghaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSkKICAgICAgICAgcmV0dXJuICIoTm90IFByb2ZpbGluZykiOwpA
QCAtOTM3LDcgKzkzNyw3IEBAIFN0cmluZyBWTTo6Z2V0VHlwZXNGb3JWYXJpYWJsZUluUmFuZ2Uo
dW4KICAgICAgICAgQ1JBU0goKTsKIAogICAgIHVwZGF0ZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
U3RhdGUoKTsKLSAgICByZXR1cm4gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXItPmdldFR5cGVz
Rm9yVmFyaWFibGVJblJhbmdlKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGVuZExpbmUsIGVuZENv
bHVtbiwgdmFyaWFibGVOYW1lLCBzb3VyY2VJRCk7CisgICAgcmV0dXJuIG1faGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyLT5nZXRUeXBlc0ZvclZhcmlhYmxlSW5BdE9mZnNldChvZmZzZXQsIHZhcmlh
YmxlTmFtZSwgc291cmNlSUQpOwogfQogCiB2b2lkIFZNOjp1cGRhdGVIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZVN0YXRlKCkKQEAgLTk1NywxMSArOTU3LDExIEBAIHZvaWQgVk06OmR1bXBIaWdoRmlk
ZWxpdHlQcm9maWxpbmdUeXBlcygKICAgICBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIqIHByb2Zp
bGVyID0gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuZ2V0KCk7CiAgICAgZm9yIChCYWc8VHlw
ZUxvY2F0aW9uPjo6aXRlcmF0b3IgaXRlciA9IG1fbG9jYXRpb25JbmZvLmJlZ2luKCk7ICEhaXRl
cjsgKytpdGVyKSB7CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSAqaXRlcjsKLSAg
ICAgICAgZGF0YUxvZ0YoIltMaW5lLCBDb2x1bW5dOjpbJXUsICV1XSAiLCBsb2NhdGlvbi0+bV9s
aW5lLCBsb2NhdGlvbi0+bV9jb2x1bW4pOworICAgICAgICBkYXRhTG9nRigiW1N0YXJ0LCBFbmRd
OjpbJXUsICV1XSAiLCBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+bV9kaXZvdEVu
ZCk7CiAgICAgICAgIGRhdGFMb2coIlxuXHRcdCNMb2NhbCNcblx0XHQiLAotICAgICAgICAgICAg
ICAgIHByb2ZpbGVyLT5nZXRMb2NhbFR5cGVzRm9yVmFyaWFibGVJblJhbmdlKGxvY2F0aW9uLT5t
X2xpbmUsIGxvY2F0aW9uLT5tX2NvbHVtbiwgbG9jYXRpb24tPm1fbGluZSwgbG9jYXRpb24tPm1f
Y29sdW1uLCAiIiwgbG9jYXRpb24tPm1fc291cmNlSUQpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIp
LAorICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5nZXRMb2NhbFR5cGVzRm9yVmFyaWFibGVBdE9m
ZnNldChsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCAiIiwgbG9jYXRpb24tPm1fc291cmNlSUQpLnJl
cGxhY2UoIlxuIiwgIlxuXHRcdCIpLAogICAgICAgICAgICAgICAgICJcblx0XHQjR2xvYmFsI1xu
XHRcdCIsCi0gICAgICAgICAgICAgICAgcHJvZmlsZXItPmdldEdsb2JhbFR5cGVzRm9yVmFyaWFi
bGVJblJhbmdlKGxvY2F0aW9uLT5tX2xpbmUsIGxvY2F0aW9uLT5tX2NvbHVtbiwgbG9jYXRpb24t
Pm1fbGluZSwgbG9jYXRpb24tPm1fY29sdW1uLCAiIiwgbG9jYXRpb24tPm1fc291cmNlSUQpLnJl
cGxhY2UoIlxuIiwgIlxuXHRcdCIpLAorICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5nZXRHbG9i
YWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQobG9jYXRpb24tPm1fZGl2b3RTdGFydCwgIiIsIGxv
Y2F0aW9uLT5tX3NvdXJjZUlEKS5yZXBsYWNlKCJcbiIsICJcblx0XHQiKSwKICAgICAgICAgICAg
ICAgICAiXG4iKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHJldmlzaW9uIDE3MDc3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxNSw3ICs1MTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgQnVpbHRpbkV4ZWN1dGFibGVzKiBidWlsdGluRXhlY3V0YWJsZXMoKSB7IHJldHVybiBtX2J1
aWx0aW5FeGVjdXRhYmxlcy5nZXQoKTsgfQogCiAgICAgICAgIGJvb2wgaXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkoKSB7IHJldHVybiAhIW1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
OyB9Ci0gICAgICAgIFN0cmluZyBnZXRUeXBlc0ZvclZhcmlhYmxlSW5SYW5nZSh1bnNpZ25lZCBz
dGFydExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25lZCBlbmRMaW5lLCB1bnNpZ25l
ZCBlbmRDb2x1bW4sIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUlEKTsKKyAgICAgICAgU3RyaW5nIGdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNp
Z25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgc291
cmNlSUQpOwogICAgICAgICBIaWdoRmlkZWxpdHlMb2cqIGhpZ2hGaWRlbGl0eUxvZygpIHsgcmV0
dXJuIG1faGlnaEZpZGVsaXR5TG9nLmdldCgpOyB9CiAgICAgICAgIEhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxlciogaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCkgeyByZXR1cm4gbV9oaWdoRmlkZWxp
dHlUeXBlUHJvZmlsZXIuZ2V0KCk7IH0KICAgICAgICAgdm9pZCB1cGRhdGVIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZVN0YXRlKCk7Cg==
</data>
<flag name="review"
          id="258920"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>