<?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>161715</bug_id>
          
          <creation_ts>2016-09-07 14:58:24 -0700</creation_ts>
          <short_desc>[MediaStream] applyConstraints pt. 2 - advanced constraints</short_desc>
          <delta_ts>2016-10-30 13:19:58 -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>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>160579</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1227367</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-09-07 14:58:24 -0700</bug_when>
    <thetext>Add advanced constraint support to MediaStreamTrack.applyConstraints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227368</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-09-07 14:59:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/28195461&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227379</commentid>
    <comment_count>2</comment_count>
      <attachid>288194</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-09-07 15:29:46 -0700</bug_when>
    <thetext>Created attachment 288194
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227391</commentid>
    <comment_count>3</comment_count>
      <attachid>288194</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-09-07 16:02:27 -0700</bug_when>
    <thetext>Comment on attachment 288194
Proposed patch.

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

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:196
&gt; +    // 2. If the constraint is required (&apos;min&apos;, &apos;max&apos;, or &apos;exact&apos;), and the settings
&gt; +    //    dictionary&apos;s value for the constraint does not satisfy the constraint, the
&gt; +    //    fitness distance is positive infinity.
&gt; +    if (!m_exact.isEmpty() &amp;&amp; m_exact.find(value) == notFound)
&gt; +        return std::numeric_limits&lt;double&gt;::infinity();

So there is no concept of min or max on a StringConstraint?

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:217
&gt; +        double distance = fitnessDistance(value);
&gt; +        if (distance &lt; minimumDistance)
&gt; +            minimumDistance = distance;

Maybe just minimumDistance = std::min(minimumDistance, fitnessDistance(value)); ?

&gt; Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp:447
&gt; +    // 4. If candidates is empty, return undefined as the result of the SelectSettings() algorithm.
&gt; +    if (candidates.isEmpty())
&gt; +        return true;

How is true == undefined? Does this mean it is a valid but empty result?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227399</commentid>
    <comment_count>4</comment_count>
      <attachid>288194</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-09-07 16:30:43 -0700</bug_when>
    <thetext>Comment on attachment 288194
Proposed patch.

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

&gt;&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:196
&gt;&gt; +        return std::numeric_limits&lt;double&gt;::infinity();
&gt; 
&gt; So there is no concept of min or max on a StringConstraint?

No, only exact and idea.

&gt;&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:217
&gt;&gt; +            minimumDistance = distance;
&gt; 
&gt; Maybe just minimumDistance = std::min(minimumDistance, fitnessDistance(value)); ?

good idea, thanks!

&gt;&gt; Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp:447
&gt;&gt; +        return true;
&gt; 
&gt; How is true == undefined? Does this mean it is a valid but empty result?

Correct, there are no valid constraints and none are impossible to support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227400</commentid>
    <comment_count>5</comment_count>
      <attachid>288202</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-09-07 16:31:18 -0700</bug_when>
    <thetext>Created attachment 288202
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227422</commentid>
    <comment_count>6</comment_count>
      <attachid>288202</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-07 17:03:29 -0700</bug_when>
    <thetext>Comment on attachment 288202
Patch for landing.

Clearing flags on attachment: 288202

Committed r205574: &lt;http://trac.webkit.org/changeset/205574&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288194</attachid>
            <date>2016-09-07 15:29:46 -0700</date>
            <delta_ts>2016-09-07 16:02:27 -0700</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>apply_advanced_constraints_patch_7.txt</filename>
            <type>text/plain</type>
            <size>48367</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTU2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE2LTA5LTA3ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVhbV0g
YXBwbHlDb25zdHJhaW50cyBwdC4gMiAtIGFkdmFuY2VkIGNvbnN0cmFpbnRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3MTUKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI4MTk1NDYxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3RyYWludHMt
YWR2YW5jZWQuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25z
dHJhaW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6OmNyZWF0ZSk6
IFJldHVybiBSZWY8Piwgbm90IFJlZlB0cjw+LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25z
dHJhaW50Ojpjb3B5KTogTmV3CisgICAgICAgIChXZWJDb3JlOjpJbnRDb25zdHJhaW50Ojpjb3B5
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb3VibGVDb25zdHJhaW50Ojpjb3B5KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpCb29sZWFuQ29uc3RyYWludDo6Y29weSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ29uc3RyYWludDo6Y29weSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6U3RyaW5nQ29uc3RyYWludDo6Zml0bmVzc0Rpc3RhbmNlKTogTmV3LCBjb21w
dXRlIHRoZSBmaXRuZXNzIGRpc3RhbmNlIGJldHdlZW4gdGhlCisgICAgICAgICAgY29uc3RyYWlu
dCBhbmQgdGhlIHNwZWNpZmllZCB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0
cmFpbnQ6Om1lcmdlKTogTmV3LCBtZXJnZSB2YWx1ZSBpbnRvIGNvbnN0cmFpbnQuCisgICAgICAg
IChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjpzZXQpOiBOZXcsIGFkZCBvciByZXBsYWNl
IGEgY29uc3RyYWludC4KKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6Om1l
cmdlKTogTmV3LCBtZXJnZSBvciBhZGQgYSBjb25zdHJhaW50LgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
Q29uc3RyYWludDo6Zml0bmVzc0Rpc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29u
c3RyYWludDo6bWVyZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6Om5l
YXJseUVxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6OmlzRW1w
dHkpOgorICAgICAgICAoV2ViQ29yZTo6RmxhdHRlbmVkQ29uc3RyYWludDo6YmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RmxhdHRlbmVkQ29uc3RyYWludDo6ZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29uc3RyYWludDo6fk1lZGlhQ29uc3RyYWludCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpNZWRpYUNvbnN0cmFpbnQ6OmZpbmQpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFDb25zdHJhaW50OjpnZXRJZGVhbCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U6OmZpdG5lc3NEaXN0YW5jZSk6IFJldHVybiB0aGUg
Zml0bmVzcyBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBzb3VyY2UKKyAgICAgICAgICBjYXBhYmlsaXRp
ZXMgYW5kIGEgY29uc3RyYWludC4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5TnVtZXJpY0NvbnN0
cmFpbnQpOiBOZXcsIGFwcGx5IGEgbnVtZXJpYyBjb25zdHJhaW50LgorICAgICAgICAoV2ViQ29y
ZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6YXBwbHlDb25zdHJhaW50KTogVXNlIGFwcGx5TnVtZXJp
Y0NvbnN0cmFpbnQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlOjpzZWxl
Y3RTZXR0aW5ncyk6IE5ldywgaW1wbGVtZW50IHRoZSBTZWxlY3RTZXR0aW5ncyBhbGdvcml0aG0K
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U6OmFwcGx5Q29uc3RyYWludHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6c3VwcG9ydHNDb25zdHJh
aW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmg6CisKIDIwMTYt
MDktMDcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaGFu
ZGxpbmcgb2YgbmVnYXRpdmUgcmFkaXVzIGluIEhUTUxBcmVhRWxlbWVudCdzIGNvb3JkcyB3aGVu
IGluIGNpcmNsZSBzdGF0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFDb25zdHJhaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAJKHJldmlzaW9uIDIwNTM0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUmVmUHRyPE1lZGlhQ29uc3RyYWludD4gTWVkaWFDb25zdHJhaW50OjpjcmVhdGUoY29u
c3QgU3RyaW5nJiBuYW1lKQorUmVmPE1lZGlhQ29uc3RyYWludD4gTWVkaWFDb25zdHJhaW50Ojpj
cmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIE1lZGlhQ29uc3RyYWludFR5cGUgY29u
c3RyYWludFR5cGUgPSBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHM6OmNv
bnN0cmFpbnRGcm9tTmFtZShuYW1lKTsKIApAQCAtNjIsNiArNjIsNTEgQEAgUmVmUHRyPE1lZGlh
Q29uc3RyYWludD4gTWVkaWFDb25zdHJhaW50OgogICAgIH0KIH0KIAorUmVmPE1lZGlhQ29uc3Ry
YWludD4gTWVkaWFDb25zdHJhaW50Ojpjb3B5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWVkaWFD
b25zdHJhaW50OjpjcmVhdGUobmFtZSgpKTsKK30KKworUmVmPE1lZGlhQ29uc3RyYWludD4gSW50
Q29uc3RyYWludDo6Y29weSgpIGNvbnN0Cit7CisgICAgYXV0byBjb3B5ID0gSW50Q29uc3RyYWlu
dDo6Y3JlYXRlKG5hbWUoKSwgdHlwZSgpKTsKKyAgICBjb3B5LT5tX21pbiA9IG1fbWluOworICAg
IGNvcHktPm1fbWF4ID0gbV9tYXg7CisgICAgY29weS0+bV9leGFjdCA9IG1fZXhhY3Q7CisgICAg
Y29weS0+bV9pZGVhbCA9IG1faWRlYWw7CisKKyAgICByZXR1cm4gY29weS5sZWFrUmVmKCk7Cit9
CisKK1JlZjxNZWRpYUNvbnN0cmFpbnQ+IERvdWJsZUNvbnN0cmFpbnQ6OmNvcHkoKSBjb25zdAor
eworICAgIGF1dG8gY29weSA9IERvdWJsZUNvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKCksIHR5cGUo
KSk7CisgICAgY29weS0+bV9taW4gPSBtX21pbjsKKyAgICBjb3B5LT5tX21heCA9IG1fbWF4Owor
ICAgIGNvcHktPm1fZXhhY3QgPSBtX2V4YWN0OworICAgIGNvcHktPm1faWRlYWwgPSBtX2lkZWFs
OworICAgIAorICAgIHJldHVybiBjb3B5LmxlYWtSZWYoKTsKK30KKworUmVmPE1lZGlhQ29uc3Ry
YWludD4gQm9vbGVhbkNvbnN0cmFpbnQ6OmNvcHkoKSBjb25zdAoreworICAgIGF1dG8gY29weSA9
IEJvb2xlYW5Db25zdHJhaW50OjpjcmVhdGUobmFtZSgpLCB0eXBlKCkpOworICAgIGNvcHktPm1f
ZXhhY3QgPSBtX2V4YWN0OworICAgIGNvcHktPm1faWRlYWwgPSBtX2lkZWFsOworCisgICAgcmV0
dXJuIGNvcHkubGVha1JlZigpOworfQorCitSZWY8TWVkaWFDb25zdHJhaW50PiBTdHJpbmdDb25z
dHJhaW50Ojpjb3B5KCkgY29uc3QKK3sKKyAgICBhdXRvIGNvcHkgPSBTdHJpbmdDb25zdHJhaW50
OjpjcmVhdGUobmFtZSgpLCB0eXBlKCkpOworICAgIGNvcHktPm1fZXhhY3QgPSBtX2V4YWN0Owor
ICAgIGNvcHktPm1faWRlYWwgPSBtX2lkZWFsOworCisgICAgcmV0dXJuIGNvcHkubGVha1JlZigp
OworfQorCiBib29sIEJvb2xlYW5Db25zdHJhaW50OjpnZXRFeGFjdChib29sJiBleGFjdCkgY29u
c3QKIHsKICAgICBpZiAoIW1fZXhhY3QpCkBAIC0xMzYsNiArMTgxLDk4IEBAIGNvbnN0IFN0cmlu
ZyYgU3RyaW5nQ29uc3RyYWludDo6ZmluZChzdGQKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
IH0KIAorZG91YmxlIFN0cmluZ0NvbnN0cmFpbnQ6OmZpdG5lc3NEaXN0YW5jZShjb25zdCBTdHJp
bmcmIHZhbHVlKSBjb25zdAoreworICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9tZWRpYWNh
cHR1cmUtbWFpbi8jZGZuLWFwcGx5Y29uc3RyYWludHMKKworICAgIC8vIDEuIElmIHRoZSBjb25z
dHJhaW50IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIsIHRoZSBmaXRuZXNzIGRpc3Rh
bmNlIGlzIDAuCisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAv
LyAyLiBJZiB0aGUgY29uc3RyYWludCBpcyByZXF1aXJlZCAoJ21pbicsICdtYXgnLCBvciAnZXhh
Y3QnKSwgYW5kIHRoZSBzZXR0aW5ncworICAgIC8vICAgIGRpY3Rpb25hcnkncyB2YWx1ZSBmb3Ig
dGhlIGNvbnN0cmFpbnQgZG9lcyBub3Qgc2F0aXNmeSB0aGUgY29uc3RyYWludCwgdGhlCisgICAg
Ly8gICAgZml0bmVzcyBkaXN0YW5jZSBpcyBwb3NpdGl2ZSBpbmZpbml0eS4KKyAgICBpZiAoIW1f
ZXhhY3QuaXNFbXB0eSgpICYmIG1fZXhhY3QuZmluZCh2YWx1ZSkgPT0gbm90Rm91bmQpCisgICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisKKyAg
ICAvLyAzLiBJZiBubyBpZGVhbCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBmaXRuZXNzIGRpc3Rh
bmNlIGlzIDAuCisgICAgaWYgKG1fZXhhY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIC8vIDUuIEZvciBhbGwgc3RyaW5nIGFuZCBlbnVtIG5vbi1yZXF1aXJlZCBjb25zdHJh
aW50cyAoZGV2aWNlSWQsIGdyb3VwSWQsIGZhY2luZ01vZGUsCisgICAgLy8gZWNob0NhbmNlbGxh
dGlvbiksIHRoZSBmaXRuZXNzIGRpc3RhbmNlIGlzIHRoZSByZXN1bHQgb2YgdGhlIGZvcm11bGEK
KyAgICAvLyAgICAgICAgKGFjdHVhbCA9PSBpZGVhbCkgPyAwIDogMQorICAgIHJldHVybiBtX2lk
ZWFsLmZpbmQodmFsdWUpICE9IG5vdEZvdW5kID8gMCA6IDE7Cit9CisKK2RvdWJsZSBTdHJpbmdD
b25zdHJhaW50OjpmaXRuZXNzRGlzdGFuY2UoY29uc3QgVmVjdG9yPFN0cmluZz4mIHZhbHVlcykg
Y29uc3QKK3sKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGRv
dWJsZSBtaW5pbXVtRGlzdGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmlu
aXR5KCk7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBkb3VibGUg
ZGlzdGFuY2UgPSBmaXRuZXNzRGlzdGFuY2UodmFsdWUpOworICAgICAgICBpZiAoZGlzdGFuY2Ug
PCBtaW5pbXVtRGlzdGFuY2UpCisgICAgICAgICAgICBtaW5pbXVtRGlzdGFuY2UgPSBkaXN0YW5j
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbWluaW11bURpc3RhbmNlOworfQorCit2b2lkIFN0cmlu
Z0NvbnN0cmFpbnQ6Om1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYgb3RoZXIpCit7CisgICAg
aWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFN0cmlu
Zz4gdmFsdWVzOworICAgIGlmIChvdGhlci5nZXRFeGFjdCh2YWx1ZXMpKSB7CisgICAgICAgIGlm
IChtX2V4YWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fZXhhY3QgPSB2YWx1ZXM7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgeworICAg
ICAgICAgICAgICAgIGlmIChtX2V4YWN0LmZpbmQodmFsdWUpID09IG5vdEZvdW5kKQorICAgICAg
ICAgICAgICAgICAgICBtX2V4YWN0LmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAob3RoZXIuZ2V0SWRlYWwodmFsdWVzKSkgeworICAgICAg
ICBpZiAobV9pZGVhbC5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2lkZWFsID0gdmFsdWVzOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9pZGVhbC5maW5kKHZhbHVlKSA9PSBub3RGb3VuZCkKKyAg
ICAgICAgICAgICAgICAgICAgbV9pZGVhbC5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEZsYXR0ZW5lZENvbnN0cmFpbnQ6OnNldChjb25z
dCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCit7CisgICAgZm9yIChhdXRvIGV4aXN0aW5n
Q29uc3RyYWludCA6IG1fY29uc3RyYWludHMpIHsKKyAgICAgICAgaWYgKGV4aXN0aW5nQ29uc3Ry
YWludC0+dHlwZSgpID09IGNvbnN0cmFpbnQudHlwZSgpKSB7CisgICAgICAgICAgICBleGlzdGlu
Z0NvbnN0cmFpbnQgPSBjb25zdHJhaW50LmNvcHkoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1fY29uc3RyYWludHMuYXBwZW5kKGNvbnN0cmFpbnQuY29w
eSgpKTsKK30KKwordm9pZCBGbGF0dGVuZWRDb25zdHJhaW50OjptZXJnZShjb25zdCBNZWRpYUNv
bnN0cmFpbnQmIGNvbnN0cmFpbnQpCit7CisgICAgZm9yIChhdXRvIGV4aXN0aW5nQ29uc3RyYWlu
dCA6IG1fY29uc3RyYWludHMpIHsKKyAgICAgICAgaWYgKGV4aXN0aW5nQ29uc3RyYWludC0+dHlw
ZSgpID09IGNvbnN0cmFpbnQudHlwZSgpKSB7CisgICAgICAgICAgICBleGlzdGluZ0NvbnN0cmFp
bnQtPm1lcmdlKGNvbnN0cmFpbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorCisgICAgbV9jb25zdHJhaW50cy5hcHBlbmQoY29uc3RyYWludC5jb3B5KCkpOworfQor
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAko
cmV2aXNpb24gMjA1MzQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
TWVkaWFDb25zdHJhaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxOSArMzUsMjMgQEAKICNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVN1
cHBvcnRlZENvbnN0cmFpbnRzLmgiCisjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1lZGlhQ29uc3RyYWludCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE1lZGlhQ29uc3RyYWludD4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFD
b25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBzdGF0aWMgUmVmPE1l
ZGlhQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgZW51bSBjbGFzcyBD
b25zdHJhaW50VHlwZSB7IEV4YWN0Q29uc3RyYWludCwgSWRlYWxDb25zdHJhaW50LCBNaW5Db25z
dHJhaW50LCBNYXhDb25zdHJhaW50IH07CiAKICAgICB2aXJ0dWFsIH5NZWRpYUNvbnN0cmFpbnQo
KSB7IH07CisKKyAgICB2aXJ0dWFsIFJlZjxNZWRpYUNvbnN0cmFpbnQ+IGNvcHkoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
aXNNYW5kYXRvcnkoKSBjb25zdCA9IDA7CiAKQEAgLTU3LDYgKzYxLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBnZXRJZGVhbChpbnQmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgdmFsaWRGb3JSYW5nZShpbnQsIGlu
dCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBpbnQgZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIGludCk+KSBj
b25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91
YmxlIGZpdG5lc3NEaXN0YW5jZShpbnQsIGludCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBnZXRNaW4oZG91YmxlJikgY29uc3Qg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGdldE1heChkb3VibGUmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFs
c2U7IH0KQEAgLTY0LDExICs2OSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGdldElk
ZWFsKGRvdWJsZSYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCB2YWxpZEZvclJhbmdlKGRvdWJsZSwgZG91YmxlKSBjb25zdCB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGRvdWJs
ZSBmaW5kKHN0ZDo6ZnVuY3Rpb248Ym9vbChDb25zdHJhaW50VHlwZSwgZG91YmxlKT4pIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3VibGUg
Zml0bmVzc0Rpc3RhbmNlKGRvdWJsZSwgZG91YmxlKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBib29sIGdldE1pbihib29sJikgY29uc3Qg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGdldE1heChib29sJikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGdldEV4YWN0KGJvb2wmKSBjb25zdCB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZ2V0SWRlYWwoYm9v
bCYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgZG91YmxlIGZpdG5lc3NEaXN0YW5jZShib29sKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBib29sIGdldE1pbihWZWN0b3I8U3Ry
aW5nPiYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBnZXRNYXgoVmVjdG9yPFN0cmluZz4mKSBjb25zdCB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KQEAgLTc2LDYgKzgzLDExIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SWRlYWwoVmVjdG9yPFN0cmluZz4mKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYg
ZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIGNvbnN0IFN0cmluZyYpPikg
Y29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KIAor
ICAgIHZpcnR1YWwgZG91YmxlIGZpdG5lc3NEaXN0YW5jZShjb25zdCBTdHJpbmcmKSBjb25zdCB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGZp
dG5lc3NEaXN0YW5jZShjb25zdCBWZWN0b3I8U3RyaW5nPiYpIGNvbnN0IHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbWVyZ2UoY29uc3QgTWVk
aWFDb25zdHJhaW50JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCiAgICAgTWVkaWFDb25z
dHJhaW50VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKQEAgLTEzNCwxOSArMTQ2LDk5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCB2YWxp
ZEZvclJhbmdlKFZhbHVlVHlwZSByYW5nZU1pbiwgVmFsdWVUeXBlIHJhbmdlTWF4KSBjb25zdCBm
aW5hbCB7CisgICAgYm9vbCBuZWFybHlFcXVhbChkb3VibGUgYSwgZG91YmxlIGIpIGNvbnN0Cisg
ICAgeworICAgICAgICAvLyBEb24ndCByZXF1aXJlIHN0cmljdCBlcXVhbGl0eSB3aGVuIGNvbXBh
cmluZyBjb25zdHJhaW50cywgb3IgbWFueSBmbG9hdGluZyBwb2ludCBjb25zdHJhaW50IHZhbHVl
cywKKyAgICAgICAgLy8gZS5nLiAiYXNwZWN0UmF0aW86IDEuMzMzIiwgd2lsbCBuZXZlciBtYXRj
aC4KKyAgICAgICAgY29uc3QgZG91YmxlIGVwc2lsb24gPSAwLjAwMDAxOworICAgICAgICByZXR1
cm4gc3RkOjphYnMoYSAtIGIpIDw9IGVwc2lsb247CisgICAgfQorCisgICAgZG91YmxlIGZpdG5l
c3NEaXN0YW5jZShWYWx1ZVR5cGUgcmFuZ2VNaW4sIFZhbHVlVHlwZSByYW5nZU1heCkgY29uc3Qg
ZmluYWwgeworICAgICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLW1h
aW4vI2Rmbi1hcHBseWNvbnN0cmFpbnRzCisgICAgICAgIC8vIDEuIElmIHRoZSBjb25zdHJhaW50
IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIsIHRoZSBmaXRuZXNzIGRpc3RhbmNlIGlz
IDAuCiAgICAgICAgIGlmIChpc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBpZiAobV9leGFjdCAmJiAobV9leGFjdC52
YWx1ZSgpIDwgcmFuZ2VNaW4gfHwgbV9leGFjdC52YWx1ZSgpID4gcmFuZ2VNYXgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyAyLiBJZiB0aGUgY29uc3RyYWludCBpcyBy
ZXF1aXJlZCAoJ21pbicsICdtYXgnLCBvciAnZXhhY3QnKSwgYW5kIHRoZSBzZXR0aW5ncworICAg
ICAgICAvLyAgICBkaWN0aW9uYXJ5J3MgdmFsdWUgZm9yIHRoZSBjb25zdHJhaW50IGRvZXMgbm90
IHNhdGlzZnkgdGhlIGNvbnN0cmFpbnQsIHRoZQorICAgICAgICAvLyAgICBmaXRuZXNzIGRpc3Rh
bmNlIGlzIHBvc2l0aXZlIGluZmluaXR5LgorICAgICAgICBib29sIHZhbGlkID0gdmFsaWRGb3JS
YW5nZShyYW5nZU1pbiwgcmFuZ2VNYXgpOworICAgICAgICBpZiAobV9leGFjdCAmJiAhdmFsaWQp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpOwogCi0gICAgICAgIGlmIChtX21pbiAmJiBtX21pbi52YWx1ZSgpID4gcmFuZ2VNYXgpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX21pbiAmJiAhdmFsaWQpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgp
OworCisgICAgICAgIGlmIChtX21heCAmJiAhdmFsaWQpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwogCi0gICAgICAgIGlmIChtX21h
eCAmJiBtX21heC52YWx1ZSgpIDwgcmFuZ2VNaW4pCisgICAgICAgIC8vIDMuIElmIG5vIGlkZWFs
IHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGZpdG5lc3MgZGlzdGFuY2UgaXMgMC4KKyAgICAgICAg
aWYgKCFtX2lkZWFsKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gNC4gRm9y
IGFsbCBwb3NpdGl2ZSBudW1lcmljIG5vbi1yZXF1aXJlZCBjb25zdHJhaW50cyAoc3VjaCBhcyBo
ZWlnaHQsIHdpZHRoLCBmcmFtZVJhdGUsCisgICAgICAgIC8vICAgIGFzcGVjdFJhdGlvLCBzYW1w
bGVSYXRlIGFuZCBzYW1wbGVTaXplKSwgdGhlIGZpdG5lc3MgZGlzdGFuY2UgaXMgdGhlIHJlc3Vs
dCBvZiB0aGUgZm9ybXVsYQorICAgICAgICAvLworICAgICAgICAvLyAgICAgICAgIChhY3R1YWwg
PT0gaWRlYWwpID8gMCA6IHxhY3R1YWwgLSBpZGVhbHwgLyBtYXgofGFjdHVhbHwsfGlkZWFsfCkK
KyAgICAgICAgVmFsdWVUeXBlIGlkZWFsID0gbV9pZGVhbC52YWx1ZSgpOworICAgICAgICBpZiAo
aWRlYWwgPj0gcmFuZ2VNaW4gJiYgaWRlYWwgPD0gcmFuZ2VNYXgpCisgICAgICAgICAgICByZXR1
cm4gMDsKKworICAgICAgICBpZGVhbCA9IGlkZWFsID4gc3RkOjptYXgocmFuZ2VNaW4sIHJhbmdl
TWF4KSA/IHJhbmdlTWF4IDogcmFuZ2VNaW47CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxk
b3VibGU+KHN0ZDo6YWJzKGlkZWFsIC0gbV9pZGVhbC52YWx1ZSgpKSkgLyBzdGQ6Om1heChzdGQ6
OmFicyhpZGVhbCksIHN0ZDo6YWJzKG1faWRlYWwudmFsdWUoKSkpOworICAgIH0KKworICAgIHZv
aWQgbWVyZ2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBvdGhlcikgZmluYWwgeworICAgICAgICBp
ZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZhbHVl
VHlwZSB2YWx1ZTsKKyAgICAgICAgaWYgKG90aGVyLmdldEV4YWN0KHZhbHVlKSkKKyAgICAgICAg
ICAgIG1fZXhhY3QgPSB2YWx1ZTsKKworICAgICAgICBpZiAob3RoZXIuZ2V0TWluKHZhbHVlKSkK
KyAgICAgICAgICAgIG1fbWluID0gdmFsdWU7CisKKyAgICAgICAgaWYgKG90aGVyLmdldE1heCh2
YWx1ZSkpCisgICAgICAgICAgICBtX21heCA9IHZhbHVlOworCisgICAgICAgIC8vIGh0dHBzOi8v
dzNjLmdpdGh1Yi5pby9tZWRpYWNhcHR1cmUtbWFpbi8jY29uc3RyYWluYWJsZS1pbnRlcmZhY2UK
KyAgICAgICAgLy8gV2hlbiBwcm9jZXNzaW5nIGFkdmFuY2VkIGNvbnN0cmFpbnRzOgorICAgICAg
ICAvLyAgIC4uLiB0aGUgVXNlciBBZ2VudCBtdXN0IGF0dGVtcHQgdG8gYXBwbHksIGluZGl2aWR1
YWxseSwgYW55ICdpZGVhbCcgY29uc3RyYWludHMgb3IKKyAgICAgICAgLy8gICBhIGNvbnN0cmFp
bnQgZ2l2ZW4gYXMgYSBiYXJlIHZhbHVlIGZvciB0aGUgcHJvcGVydHkuIE9mIHRoZXNlIHByb3Bl
cnRpZXMsIGl0IG11c3QKKyAgICAgICAgLy8gICBzYXRpc2Z5IHRoZSBsYXJnZXN0IG51bWJlciB0
aGF0IGl0IGNhbiwgaW4gYW55IG9yZGVyLgorICAgICAgICBpZiAob3RoZXIuZ2V0SWRlYWwodmFs
dWUpKSB7CisgICAgICAgICAgICBpZiAoIW1faWRlYWwgfHwgdmFsdWUgPiBtX2lkZWFsLnZhbHVl
KCkpCisgICAgICAgICAgICAgICAgbV9pZGVhbCA9IHZhbHVlOworICAgICAgICB9CisgICAgfQor
CisgICAgYm9vbCB2YWxpZEZvclJhbmdlKFZhbHVlVHlwZSByYW5nZU1pbiwgVmFsdWVUeXBlIHJh
bmdlTWF4KSBjb25zdCBmaW5hbCB7CisgICAgICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgaWYgKG1fZXhhY3QpIHsKKyAgICAgICAgICAgIGNv
bnN0IFZhbHVlVHlwZSBleGFjdCA9IG1fZXhhY3QudmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChl
eGFjdCA8IHJhbmdlTWluICYmICFuZWFybHlFcXVhbChleGFjdCwgcmFuZ2VNaW4pKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChleGFjdCA+IHJhbmdlTWF4
ICYmICFuZWFybHlFcXVhbChleGFjdCwgcmFuZ2VNYXgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX21pbikgeworICAgICAgICAgICAg
Y29uc3QgVmFsdWVUeXBlIGNvbnN0cmFpbnRNaW4gPSBtX21pbi52YWx1ZSgpOworICAgICAgICAg
ICAgaWYgKGNvbnN0cmFpbnRNaW4gPiByYW5nZU1heCAmJiAhbmVhcmx5RXF1YWwoY29uc3RyYWlu
dE1pbiwgcmFuZ2VNYXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisKKyAgICAgICAgaWYgKG1fbWF4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVR5cGUg
Y29uc3RyYWludE1heCA9IG1fbWF4LnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoY29uc3RyYWlu
dE1heCA8IHJhbmdlTWluICYmICFuZWFybHlFcXVhbChjb25zdHJhaW50TWF4LCByYW5nZU1pbikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNzMsNyArMjY1LDYgQEAgcHJvdGVjdGVkOgogICAgIHsK
ICAgICB9CiAKLXByaXZhdGU6CiAgICAgT3B0aW9uYWw8VmFsdWVUeXBlPiBtX21pbjsKICAgICBP
cHRpb25hbDxWYWx1ZVR5cGU+IG1fbWF4OwogICAgIE9wdGlvbmFsPFZhbHVlVHlwZT4gbV9leGFj
dDsKQEAgLTE4NCw2ICsyNzUsOCBAQCBjbGFzcyBJbnRDb25zdHJhaW50IGZpbmFsIDogcHVibGlj
IE51bWVyCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxJbnRDb25zdHJhaW50PiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSW50Q29uc3RyYWludChuYW1lLCB0eXBlKSk7IH0KIAorICAgIFJlZjxNZWRpYUNv
bnN0cmFpbnQ+IGNvcHkoKSBjb25zdCBmaW5hbDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJ
bnRDb25zdHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBl
KQogICAgICAgICA6IE51bWVyaWNDb25zdHJhaW50PGludD4obmFtZSwgdHlwZSkKQEAgLTE5NSw2
ICsyODgsOCBAQCBjbGFzcyBEb3VibGVDb25zdHJhaW50IGZpbmFsIDogcHVibGljIE51CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxEb3VibGVDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RG91YmxlQ29uc3RyYWludChuYW1lLCB0eXBlKSk7IH0KIAorICAgIFJlZjxNZWRpYUNvbnN0cmFp
bnQ+IGNvcHkoKSBjb25zdCBmaW5hbDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBEb3VibGVD
b25zdHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQog
ICAgICAgICA6IE51bWVyaWNDb25zdHJhaW50PGRvdWJsZT4obmFtZSwgdHlwZSkKQEAgLTIwNiw2
ICszMDEsOCBAQCBjbGFzcyBCb29sZWFuQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBNCiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxCb29sZWFuQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IEJvb2xlYW5Db25zdHJhaW50KG5hbWUsIHR5cGUpKTsgfQogCisgICAgUmVmPE1lZGlhQ29uc3Ry
YWludD4gY29weSgpIGNvbnN0IGZpbmFsOworCiAgICAgdm9pZCBzZXRFeGFjdChib29sIHZhbHVl
KSB7IG1fZXhhY3QgPSB2YWx1ZTsgfQogICAgIHZvaWQgc2V0SWRlYWwoYm9vbCB2YWx1ZSkgeyBt
X2lkZWFsID0gdmFsdWU7IH0KIApAQCAtMjE1LDYgKzMxMiw0MiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIW1fZXhhY3QgJiYgIW1faWRlYWw7IH07
CiAgICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2wobV9leGFj
dCk7IH0KIAorICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoYm9vbCB2YWx1ZSkgY29uc3QgZmlu
YWwgeworICAgICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLW1haW4v
I2Rmbi1hcHBseWNvbnN0cmFpbnRzCisgICAgICAgIC8vIDEuIElmIHRoZSBjb25zdHJhaW50IGlz
IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIsIHRoZSBmaXRuZXNzIGRpc3RhbmNlIGlzIDAu
CisgICAgICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg
ICAvLyAyLiBJZiB0aGUgY29uc3RyYWludCBpcyByZXF1aXJlZCAoJ21pbicsICdtYXgnLCBvciAn
ZXhhY3QnKSwgYW5kIHRoZSBzZXR0aW5ncworICAgICAgICAvLyAgICBkaWN0aW9uYXJ5J3MgdmFs
dWUgZm9yIHRoZSBjb25zdHJhaW50IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbnN0cmFpbnQsIHRo
ZQorICAgICAgICAvLyAgICBmaXRuZXNzIGRpc3RhbmNlIGlzIHBvc2l0aXZlIGluZmluaXR5Lgor
ICAgICAgICBpZiAobV9leGFjdCAmJiB2YWx1ZSAhPSBtX2V4YWN0LnZhbHVlKCkpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworCisg
ICAgICAgIC8vIDMuIElmIG5vIGlkZWFsIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGZpdG5lc3Mg
ZGlzdGFuY2UgaXMgMC4KKyAgICAgICAgaWYgKCFtX2lkZWFsIHx8IG1faWRlYWwudmFsdWUoKSA9
PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIC8vIDUuIEZvciBhbGwg
c3RyaW5nIGFuZCBlbnVtIG5vbi1yZXF1aXJlZCBjb25zdHJhaW50cyAoZGV2aWNlSWQsIGdyb3Vw
SWQsIGZhY2luZ01vZGUsCisgICAgICAgIC8vIGVjaG9DYW5jZWxsYXRpb24pLCB0aGUgZml0bmVz
cyBkaXN0YW5jZSBpcyB0aGUgcmVzdWx0IG9mIHRoZSBmb3JtdWxhCisgICAgICAgIC8vICAgICAg
ICAoYWN0dWFsID09IGlkZWFsKSA/IDAgOiAxCisgICAgICAgIHJldHVybiAxOworICAgIH0KKwor
ICAgIHZvaWQgbWVyZ2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBvdGhlcikgZmluYWwgeworICAg
ICAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGJvb2wgdmFsdWU7CisgICAgICAgIGlmIChvdGhlci5nZXRFeGFjdCh2YWx1ZSkpCisgICAgICAg
ICAgICBtX2V4YWN0ID0gdmFsdWU7CisKKyAgICAgICAgaWYgKG90aGVyLmdldElkZWFsKHZhbHVl
KSkgeworICAgICAgICAgICAgaWYgKCFtX2lkZWFsIHx8ICh2YWx1ZSAmJiAhbV9pZGVhbC52YWx1
ZSgpKSkKKyAgICAgICAgICAgICAgICBtX2lkZWFsID0gdmFsdWU7CisgICAgICAgIH0KKyAgICB9
CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQm9vbGVhbkNvbnN0cmFpbnQoY29uc3QgU3RyaW5n
JiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCiAgICAgICAgIDogTWVkaWFDb25zdHJh
aW50KG5hbWUsIHR5cGUpCkBAIC0yMjksNiArMzYyLDggQEAgY2xhc3MgU3RyaW5nQ29uc3RyYWlu
dCBmaW5hbCA6IHB1YmxpYyBNZQogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U3RyaW5nQ29uc3Ry
YWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBl
KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFN0cmluZ0NvbnN0cmFpbnQobmFtZSwgdHlwZSkpOyB9
CiAKKyAgICBSZWY8TWVkaWFDb25zdHJhaW50PiBjb3B5KCkgY29uc3QgZmluYWw7CisKICAgICB2
b2lkIHNldEV4YWN0KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kRXhhY3QoY29uc3Qg
U3RyaW5nJik7CiAgICAgdm9pZCBzZXRJZGVhbChjb25zdCBTdHJpbmcmKTsKQEAgLTI0MCw3ICsz
NzUsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fZXhhY3QuaXNFbXB0eSgpICYmIG1faWRlYWwuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBpc01h
bmRhdG9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICFtX2V4YWN0LmlzRW1wdHkoKTsgfQogCi0g
ICAgY29uc3QgU3RyaW5nJiBmaW5kKHN0ZDo6ZnVuY3Rpb248Ym9vbChDb25zdHJhaW50VHlwZSwg
Y29uc3QgU3RyaW5nJik+KSBjb25zdCBvdmVycmlkZTsKKyAgICBkb3VibGUgZml0bmVzc0Rpc3Rh
bmNlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFu
Y2UoY29uc3QgVmVjdG9yPFN0cmluZz4mKSBjb25zdCBmaW5hbDsKKworICAgIGNvbnN0IFN0cmlu
ZyYgZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIGNvbnN0IFN0cmluZyYp
PikgY29uc3QgZmluYWw7CisgICAgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmKSBm
aW5hbDsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTdHJpbmdDb25zdHJhaW50KGNvbnN0IFN0
cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQpAQCAtMjY4LDYgKzQwNywyMiBA
QCBwcml2YXRlOgogCiB1c2luZyBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcCA9IEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8TWVkaWFDb25zdHJhaW50Pj47CiAKK2NsYXNzIEZsYXR0ZW5lZENvbnN0
cmFpbnQgeworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxNZWRpYUNvbnN0cmFp
bnQ+Pjo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICB2b2lkIHNldChjb25z
dCBNZWRpYUNvbnN0cmFpbnQmKTsKKyAgICB2b2lkIG1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWlu
dCYpOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RyYWludHMuaXNF
bXB0eSgpOyB9CisKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RyYWludHMuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RyYWludHMuZW5kKCk7IH0KKworcHJpdmF0ZToKKworICAgIFZlY3RvcjxS
ZWZQdHI8TWVkaWFDb25zdHJhaW50Pj4gbV9jb25zdHJhaW50czsKK307CisKIGNsYXNzIE1lZGlh
Q29uc3RyYWludHMgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYUNvbnN0cmFpbnRzPiB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB+TWVkaWFDb25zdHJhaW50cygpIHsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZS5jcHAJKHJldmlzaW9uIDIwNTM0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTAsMTQ0ICsxNTAsMTA5IEBAIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6cmVxdWVzdFN0b3Ao
T2IKICAgICBzdG9wKGNhbGxpbmdPYnNlcnZlcik7CiB9CiAKLVJlYWx0aW1lTWVkaWFTb3VyY2U6
OkNvbnN0cmFpbnRTdXBwb3J0IFJlYWx0aW1lTWVkaWFTb3VyY2U6OnN1cHBvcnRzQ29uc3RyYWlu
dChjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCitkb3VibGUgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6Zml0bmVzc0Rpc3RhbmNlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWlu
dCkKIHsKICAgICBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMg
PSAqdGhpcy0+Y2FwYWJpbGl0aWVzKCk7CiAKICAgICBzd2l0Y2ggKGNvbnN0cmFpbnQudHlwZSgp
KSB7CiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDogewogICAgICAgICBpZiAo
IWNhcGFiaWxpdGllcy5zdXBwb3J0c1dpZHRoKCkpCi0gICAgICAgICAgICByZXR1cm4gQ29uc3Ry
YWludFN1cHBvcnQ6Oklnbm9yZWQ7CisgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBh
dXRvIHdpZHRoUmFuZ2UgPSBjYXBhYmlsaXRpZXMud2lkdGgoKTsKLSAgICAgICAgcmV0dXJuIGNv
bnN0cmFpbnQudmFsaWRGb3JSYW5nZSh3aWR0aFJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHdpZHRo
UmFuZ2UucmFuZ2VNYXgoKS5hc0ludCkgPyBDb25zdHJhaW50U3VwcG9ydDo6U3VwcG9ydGVkIDog
Q29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVkOworICAgICAgICBhdXRvIHJhbmdlID0gY2Fw
YWJpbGl0aWVzLndpZHRoKCk7CisgICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0
YW5jZShyYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWln
aHQ6IHsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNIZWlnaHQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBDb25zdHJhaW50U3VwcG9ydDo6SWdub3JlZDsKKyAgICAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgICAgIGF1dG8gaGVpZ2h0UmFuZ2UgPSBjYXBhYmlsaXRpZXMuaGVpZ2h0
KCk7Ci0gICAgICAgIHJldHVybiBjb25zdHJhaW50LnZhbGlkRm9yUmFuZ2UoaGVpZ2h0UmFuZ2Uu
cmFuZ2VNaW4oKS5hc0ludCwgaGVpZ2h0UmFuZ2UucmFuZ2VNYXgoKS5hc0ludCkgPyBDb25zdHJh
aW50U3VwcG9ydDo6U3VwcG9ydGVkIDogQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVkOwor
ICAgICAgICBhdXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLmhlaWdodCgpOworICAgICAgICByZXR1
cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0ludCwgcmFu
Z2UucmFuZ2VNYXgoKS5hc0ludCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2Ug
TWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVSYXRlOiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0
aWVzLnN1cHBvcnRzRnJhbWVSYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gQ29uc3RyYWludFN1
cHBvcnQ6Oklnbm9yZWQ7CisgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBhdXRvIHJh
dGVSYW5nZSA9IGNhcGFiaWxpdGllcy5mcmFtZVJhdGUoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0
cmFpbnQudmFsaWRGb3JSYW5nZShyYXRlUmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmF0ZVJh
bmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpID8gQ29uc3RyYWludFN1cHBvcnQ6OlN1cHBvcnRlZCA6
IENvbnN0cmFpbnRTdXBwb3J0OjpVbnN1cHBvcnRlZDsKKyAgICAgICAgYXV0byByYW5nZSA9IGNh
cGFiaWxpdGllcy5mcmFtZVJhdGUoKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVz
c0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNE
b3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkFzcGVjdFJhdGlvOiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRz
QXNwZWN0UmF0aW8oKSkKLSAgICAgICAgICAgIHJldHVybiBDb25zdHJhaW50U3VwcG9ydDo6SWdu
b3JlZDsKKyAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBh
YmlsaXRpZXMuYXNwZWN0UmF0aW8oKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQudmFsaWRG
b3JSYW5nZShyYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91
YmxlKSA/IENvbnN0cmFpbnRTdXBwb3J0OjpTdXBwb3J0ZWQgOiBDb25zdHJhaW50U3VwcG9ydDo6
VW5zdXBwb3J0ZWQ7CisgICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShy
YW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpWb2x1
bWU6IHsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNWb2x1bWUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBDb25zdHJhaW50U3VwcG9ydDo6SWdub3JlZDsKKyAgICAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMudm9sdW1lKCk7Ci0g
ICAgICAgIHJldHVybiBjb25zdHJhaW50LnZhbGlkRm9yUmFuZ2UocmFuZ2UucmFuZ2VNaW4oKS5h
c0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSkgPyBDb25zdHJhaW50U3VwcG9ydDo6
U3VwcG9ydGVkIDogQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVkOworICAgICAgICByZXR1
cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwg
cmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlUmF0ZTogewogICAgICAgICBpZiAoIWNh
cGFiaWxpdGllcy5zdXBwb3J0c1NhbXBsZVJhdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBDb25z
dHJhaW50U3VwcG9ydDo6SWdub3JlZDsKKyAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAg
IGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuc2FtcGxlUmF0ZSgpOwotICAgICAgICByZXR1cm4g
Y29uc3RyYWludC52YWxpZEZvclJhbmdlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdl
LnJhbmdlTWF4KCkuYXNEb3VibGUpID8gQ29uc3RyYWludFN1cHBvcnQ6OlN1cHBvcnRlZCA6IENv
bnN0cmFpbnRTdXBwb3J0OjpVbnN1cHBvcnRlZDsKKyAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQu
Zml0bmVzc0Rpc3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4
KCkuYXNEb3VibGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29u
c3RyYWludFR5cGU6OlNhbXBsZVNpemU6IHsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3Vw
cG9ydHNTYW1wbGVTaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gQ29uc3RyYWludFN1cHBvcnQ6
Oklnbm9yZWQ7CisgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBhdXRvIHJhbmdlID0g
Y2FwYWJpbGl0aWVzLnNhbXBsZVNpemUoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQudmFs
aWRGb3JSYW5nZShyYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFz
RG91YmxlKSA/IENvbnN0cmFpbnRTdXBwb3J0OjpTdXBwb3J0ZWQgOiBDb25zdHJhaW50U3VwcG9y
dDo6VW5zdXBwb3J0ZWQ7CisgICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5j
ZShyYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpG
YWNpbmdNb2RlOiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRmFjaW5nTW9k
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRTdXBwb3J0OjpJZ25vcmVkOworICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgQ29uc3RyYWludFN1cHBvcnQgc3VwcG9ydCA9
IENvbnN0cmFpbnRTdXBwb3J0OjpJZ25vcmVkOwotICAgICAgICBhdXRvJiBzdXBwb3J0ZWRNb2Rl
cyA9IGNhcGFiaWxpdGllcy5mYWNpbmdNb2RlKCk7Ci0gICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9v
bChNZWRpYUNvbnN0cmFpbnQ6OkNvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmKT4gZmlsdGVy
ID0gW3N1cHBvcnRlZE1vZGVzLCAmc3VwcG9ydF0oTWVkaWFDb25zdHJhaW50OjpDb25zdHJhaW50
VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG1vZGVTdHJpbmcpIHsKLSAgICAgICAgICAgIGlmICh0
eXBlID09IE1lZGlhQ29uc3RyYWludDo6Q29uc3RyYWludFR5cGU6OkV4YWN0Q29uc3RyYWludCkK
LSAgICAgICAgICAgICAgICBzdXBwb3J0ID0gQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVk
OwotCi0gICAgICAgICAgICBhdXRvIG1vZGUgPSBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6
OnZpZGVvRmFjaW5nTW9kZUVudW0obW9kZVN0cmluZyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHN1cHBvcnRlZE1vZGUgOiBzdXBwb3J0ZWRNb2RlcykgewotICAgICAgICAgICAgICAgIGlmIChz
dXBwb3J0ZWRNb2RlID09IG1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCA9IENv
bnN0cmFpbnRTdXBwb3J0OjpTdXBwb3J0ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHR5
cGUgPT0gTWVkaWFDb25zdHJhaW50OjpDb25zdHJhaW50VHlwZTo6RXhhY3RDb25zdHJhaW50ID8g
dHJ1ZSA6IGZhbHNlOwotICAgICAgICB9OwotCi0gICAgICAgIGNvbnN0cmFpbnQuZmluZChmaWx0
ZXIpOwotICAgICAgICByZXR1cm4gc3VwcG9ydDsKKyAgICAgICAgYXV0byYgbW9kZXMgPSBjYXBh
YmlsaXRpZXMuZmFjaW5nTW9kZSgpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRN
b2RlczsKKyAgICAgICAgc3VwcG9ydGVkTW9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtb2Rl
cy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIG1vZGUgOiBtb2RlcykKKyAgICAgICAgICAg
IHN1cHBvcnRlZE1vZGVzLmFwcGVuZChSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OmZhY2lu
Z01vZGUobW9kZSkpOworICAgICAgICByZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2Uo
c3VwcG9ydGVkTW9kZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIE1lZGlh
Q29uc3RyYWludFR5cGU6OkVjaG9DYW5jZWxsYXRpb246CisgICAgY2FzZSBNZWRpYUNvbnN0cmFp
bnRUeXBlOjpFY2hvQ2FuY2VsbGF0aW9uOiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1
cHBvcnRzRWNob0NhbmNlbGxhdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRT
dXBwb3J0OjpJZ25vcmVkOworICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgaWYgKGNh
cGFiaWxpdGllcy5lY2hvQ2FuY2VsbGF0aW9uKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllczo6RWNob0NhbmNlbGxhdGlvbjo6UmVhZE9ubHkpCi0gICAgICAgICAgICByZXR1cm4g
Y29uc3RyYWludC5pc01hbmRhdG9yeSgpID8gQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVk
IDogQ29uc3RyYWludFN1cHBvcnQ6Oklnbm9yZWQ7Ci0KLSAgICAgICAgcmV0dXJuIENvbnN0cmFp
bnRTdXBwb3J0OjpTdXBwb3J0ZWQ7CisgICAgICAgIGJvb2wgZWNob0NhbmNlbGxhdGlvblJlYWRX
cml0ZSA9IGNhcGFiaWxpdGllcy5lY2hvQ2FuY2VsbGF0aW9uKCkgPT0gUmVhbHRpbWVNZWRpYVNv
dXJjZUNhcGFiaWxpdGllczo6RWNob0NhbmNlbGxhdGlvbjo6UmVhZFdyaXRlOworICAgICAgICBy
ZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2UoZWNob0NhbmNlbGxhdGlvblJlYWRXcml0
ZSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlw
ZTo6RGV2aWNlSWQ6IHsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNEZXZpY2VJ
ZCgpKQotICAgICAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRTdXBwb3J0OjpJZ25vcmVkOwotCi0g
ICAgICAgIENvbnN0cmFpbnRTdXBwb3J0IHN1cHBvcnQgPSBDb25zdHJhaW50U3VwcG9ydDo6SWdu
b3JlZDsKLSAgICAgICAgc3RkOjpmdW5jdGlvbjxib29sKE1lZGlhQ29uc3RyYWludDo6Q29uc3Ry
YWludFR5cGUsIGNvbnN0IFN0cmluZyYpPiBmaWx0ZXIgPSBbdGhpcywgJnN1cHBvcnRdKE1lZGlh
Q29uc3RyYWludDo6Q29uc3RyYWludFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBpZFN0cmluZykg
ewotICAgICAgICAgICAgaWYgKHR5cGUgIT0gTWVkaWFDb25zdHJhaW50OjpDb25zdHJhaW50VHlw
ZTo6RXhhY3RDb25zdHJhaW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gS2Vl
cCBsb29raW5nLgorICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHN1cHBvcnQg
PSBpZFN0cmluZyA9PSBtX2lkID8gQ29uc3RyYWludFN1cHBvcnQ6OlN1cHBvcnRlZCA6IENvbnN0
cmFpbnRTdXBwb3J0OjpVbnN1cHBvcnRlZDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfTsKLQotICAgICAgICBjb25zdHJhaW50LmZpbmQoZmlsdGVyKTsKLSAgICAgICAgcmV0
dXJuIHN1cHBvcnQ7CisgICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZSht
X2lkKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRU
eXBlOjpHcm91cElkOiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRGV2aWNl
SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBDb25zdHJhaW50U3VwcG9ydDo6SWdub3JlZDsKLQot
ICAgICAgICBDb25zdHJhaW50U3VwcG9ydCBzdXBwb3J0ID0gQ29uc3RyYWludFN1cHBvcnQ6Okln
bm9yZWQ7Ci0gICAgICAgIFN0cmluZyBncm91cElkID0gc2V0dGluZ3MoKS5ncm91cElkKCk7Ci0g
ICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChNZWRpYUNvbnN0cmFpbnQ6OkNvbnN0cmFpbnRUeXBl
LCBjb25zdCBTdHJpbmcmKT4gZmlsdGVyID0gW2dyb3VwSWQsICZzdXBwb3J0XShNZWRpYUNvbnN0
cmFpbnQ6OkNvbnN0cmFpbnRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgaWRTdHJpbmcpIHsKLSAg
ICAgICAgICAgIGlmICh0eXBlICE9IE1lZGlhQ29uc3RyYWludDo6Q29uc3RyYWludFR5cGU6OkV4
YWN0Q29uc3RyYWludCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEtlZXAgbG9v
a2luZy4KLQotICAgICAgICAgICAgc3VwcG9ydCA9IGlkU3RyaW5nID09IGdyb3VwSWQgPyBDb25z
dHJhaW50U3VwcG9ydDo6U3VwcG9ydGVkIDogQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVk
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9OworICAgICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICAgICAgY29uc3RyYWludC5maW5kKGZpbHRlcik7Ci0gICAgICAgIHJldHVy
biBzdXBwb3J0OworICAgICAgICByZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2Uoc2V0
dGluZ3MoKS5ncm91cElkKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI5NiwzOCAr
MjYxLDQ5IEBAIFJlYWx0aW1lTWVkaWFTb3VyY2U6OkNvbnN0cmFpbnRTdXBwb3J0IFIKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIENvbnN0cmFpbnRTdXBwb3J0OjpJZ25vcmVk
OworICAgIHJldHVybiAwOwogfQogCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotVCB2YWx1ZShj
b25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQsIFQgcmFuZ2VNaW4sIFQgcmFuZ2VNYXgp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgorc3RhdGljIHZvaWQgYXBwbHlOdW1lcmlj
Q29uc3RyYWludChjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQsIFZhbHVlVHlwZSBj
dXJyZW50LCBWYWx1ZVR5cGUgY2FwYWJpbGl0eU1pbiwgVmFsdWVUeXBlIGNhcGFiaWxpdHlNYXgs
IFJlYWx0aW1lTWVkaWFTb3VyY2UqIHNvdXJjZSwgdm9pZCAoUmVhbHRpbWVNZWRpYVNvdXJjZTo6
KmZ1bmN0aW9uKShWYWx1ZVR5cGUpKQogewotICAgIFQgcmVzdWx0OworICAgIFZhbHVlVHlwZSB2
YWx1ZTsKKyAgICBWYWx1ZVR5cGUgbWluID0gY2FwYWJpbGl0eU1pbjsKKyAgICBWYWx1ZVR5cGUg
bWF4ID0gY2FwYWJpbGl0eU1heDsKIAotICAgIGlmIChjb25zdHJhaW50LmdldEV4YWN0KHJlc3Vs
dCkpIHsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA+PSByYW5nZU1pbiAmJiByZXN1bHQgPD0gcmFu
Z2VNYXgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChjb25zdHJhaW50LmdldEV4
YWN0KHZhbHVlKSkgeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC52YWxpZEZvclJhbmdlKGNh
cGFiaWxpdHlNaW4sIGNhcGFiaWxpdHlNYXgpKTsKKyAgICAgICAgKHNvdXJjZS0+KmZ1bmN0aW9u
KSh2YWx1ZSk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoY29uc3RyYWludC5n
ZXRJZGVhbChyZXN1bHQpKSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPCByYW5nZU1pbikKLSAgICAg
ICAgICAgIHJlc3VsdCA9IHJhbmdlTWluOwotICAgICAgICBlbHNlIGlmIChyZXN1bHQgPiByYW5n
ZU1heCkKLSAgICAgICAgICAgIHJlc3VsdCA9IHJhbmdlTWF4OworICAgIGlmIChjb25zdHJhaW50
LmdldE1pbih2YWx1ZSkpIHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQudmFsaWRGb3JSYW5n
ZSh2YWx1ZSwgY2FwYWJpbGl0eU1heCkpOworICAgICAgICBpZiAodmFsdWUgPiBtaW4pCisgICAg
ICAgICAgICBtaW4gPSB2YWx1ZTsKIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAv
LyBJZiB0aGVyZSBpcyBubyBpZGVhbCwgZG9uJ3QgY2hhbmdlIGlmIG1pbmltdW0gaXMgc21hbGxl
ciB0aGFuIGN1cnJlbnQuCisgICAgICAgIFZhbHVlVHlwZSBpZGVhbDsKKyAgICAgICAgaWYgKCFj
b25zdHJhaW50LmdldElkZWFsKGlkZWFsKSAmJiB2YWx1ZSA8IGN1cnJlbnQpCisgICAgICAgICAg
ICB2YWx1ZSA9IGN1cnJlbnQ7CiAgICAgfQogCi0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0TWluKHJl
c3VsdCkgJiYgcmVzdWx0ID4gcmFuZ2VNYXgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoY29uc3RyYWludC5nZXRNYXgodmFsdWUpKSB7CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50
LnZhbGlkRm9yUmFuZ2UoY2FwYWJpbGl0eU1pbiwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVl
IDwgbWF4KQorICAgICAgICAgICAgbWF4ID0gdmFsdWU7CisgICAgfQogCi0gICAgaWYgKGNvbnN0
cmFpbnQuZ2V0TWF4KHJlc3VsdCkgJiYgcmVzdWx0IDwgcmFuZ2VNaW4pCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQorICAgIGlmIChjb25zdHJhaW50
LmdldElkZWFsKHZhbHVlKSkgeworICAgICAgICBpZiAodmFsdWUgPCBtaW4pCisgICAgICAgICAg
ICB2YWx1ZSA9IG1pbjsKKyAgICAgICAgaWYgKHZhbHVlID4gbWF4KQorICAgICAgICAgICAgdmFs
dWUgPSBtYXg7CisgICAgfQogCisgICAgaWYgKHZhbHVlICE9IGN1cnJlbnQpCisgICAgICAgIChz
b3VyY2UtPipmdW5jdGlvbikodmFsdWUpOworfQogCiB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OmFwcGx5Q29uc3RyYWludChjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CkBA
IC0zMzcsOCArMzEzLDggQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFp
bgogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c1dpZHRoKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgYXV0byB3aWR0aFJhbmdlID0gY2FwYWJpbGl0aWVzLndpZHRo
KCk7Ci0gICAgICAgIHNldFdpZHRoKHZhbHVlKGNvbnN0cmFpbnQsIHdpZHRoUmFuZ2UucmFuZ2VN
aW4oKS5hc0ludCwgd2lkdGhSYW5nZS5yYW5nZU1heCgpLmFzSW50KSk7CisgICAgICAgIGF1dG8g
cmFuZ2UgPSBjYXBhYmlsaXRpZXMud2lkdGgoKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3Ry
YWludChjb25zdHJhaW50LCBzaXplKCkud2lkdGgoKSwgcmFuZ2UucmFuZ2VNaW4oKS5hc0ludCwg
cmFuZ2UucmFuZ2VNYXgoKS5hc0ludCwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldFdp
ZHRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNDYsOCArMzIyLDggQEAgdm9pZCBS
ZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAgICBpZiAoIWNhcGFiaWxp
dGllcy5zdXBwb3J0c0hlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGF1
dG8gaGVpZ2h0UmFuZ2UgPSBjYXBhYmlsaXRpZXMuaGVpZ2h0KCk7Ci0gICAgICAgIHNldEhlaWdo
dCh2YWx1ZShjb25zdHJhaW50LCBoZWlnaHRSYW5nZS5yYW5nZU1pbigpLmFzSW50LCBoZWlnaHRS
YW5nZS5yYW5nZU1heCgpLmFzSW50KSk7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRp
ZXMuaGVpZ2h0KCk7CisgICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3RyYWludCwg
c2l6ZSgpLmhlaWdodCgpLCByYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgp
LmFzSW50LCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0SGVpZ2h0KTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0zNTUsOCArMzMxLDggQEAgdm9pZCBSZWFsdGltZU1lZGlhU291
cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0Zy
YW1lUmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGF1dG8gcmF0ZVJhbmdl
ID0gY2FwYWJpbGl0aWVzLmZyYW1lUmF0ZSgpOwotICAgICAgICBzZXRGcmFtZVJhdGUodmFsdWUo
Y29uc3RyYWludCwgcmF0ZVJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhdGVSYW5nZS5yYW5n
ZU1heCgpLmFzRG91YmxlKSk7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuZnJh
bWVSYXRlKCk7CisgICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3RyYWludCwgZnJh
bWVSYXRlKCksIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNE
b3VibGUsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRGcmFtZVJhdGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTM2NSw3ICszNDEsNyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OmFwcGx5Q29uc3RyYWluCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0
byByYW5nZSA9IGNhcGFiaWxpdGllcy5hc3BlY3RSYXRpbygpOwotICAgICAgICBzZXRBc3BlY3RS
YXRpbyh2YWx1ZShjb25zdHJhaW50LCByYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5y
YW5nZU1heCgpLmFzRG91YmxlKSk7CisgICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29u
c3RyYWludCwgYXNwZWN0UmF0aW8oKSwgcmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2Uu
cmFuZ2VNYXgoKS5hc0RvdWJsZSwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldEFzcGVj
dFJhdGlvKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNzQsOCArMzUwLDcgQEAgdm9p
ZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMudm9sdW1lKCk7Ci0gICAgICAg
IC8vIHN0ZDo6cGFpcjxULCBUPiB2YWx1ZXNGb3JSYW5nZShjb25zdHJhaW50LCByYW5nZS5yYW5n
ZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKQotICAgICAgICBzZXRW
b2x1bWUodmFsdWUoY29uc3RyYWludCwgcmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2Uu
cmFuZ2VNYXgoKS5hc0RvdWJsZSkpOworICAgICAgICBhcHBseU51bWVyaWNDb25zdHJhaW50KGNv
bnN0cmFpbnQsIHZvbHVtZSgpLCByYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5n
ZU1heCgpLmFzRG91YmxlLCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0Vm9sdW1lKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zODQsNyArMzU5LDcgQEAgdm9pZCBSZWFsdGlt
ZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuc2FtcGxlUmF0ZSgpOwotICAgICAgICBzZXRT
YW1wbGVSYXRlKHZhbHVlKGNvbnN0cmFpbnQsIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJh
bmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWlu
dChjb25zdHJhaW50LCBzYW1wbGVSYXRlKCksIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJh
bmdlLnJhbmdlTWF4KCkuYXNEb3VibGUsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRT
YW1wbGVSYXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zOTMsNyArMzY4LDcgQEAg
dm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuc2FtcGxlU2l6ZSgpOwot
ICAgICAgICBzZXRTYW1wbGVTaXplKHZhbHVlKGNvbnN0cmFpbnQsIHJhbmdlLnJhbmdlTWluKCku
YXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpKTsKKyAgICAgICAgYXBwbHlOdW1l
cmljQ29uc3RyYWludChjb25zdHJhaW50LCBzYW1wbGVTaXplKCksIHJhbmdlLnJhbmdlTWluKCku
YXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUsIHRoaXMsICZSZWFsdGltZU1lZGlh
U291cmNlOjpzZXRTYW1wbGVTaXplKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MzYs
MjEgKzQxMSwxMDAgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgog
ICAgIH0KIH0KIAotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbnRzKGNv
bnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzLCBTdWNjZXNzSGFuZGxlciBzdWNjZXNz
SGFuZGxlciwgRmFpbHVyZUhhbmRsZXIgZmFpbHVyZUhhbmRsZXIpCitib29sIFJlYWx0aW1lTWVk
aWFTb3VyY2U6OnNlbGVjdFNldHRpbmdzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFp
bnRzLCBGbGF0dGVuZWRDb25zdHJhaW50JiBjYW5kaWRhdGVzLCBTdHJpbmcmIGZhaWxlZENvbnN0
cmFpbnQpCiB7Ci0gICAgQVNTRVJUKGNvbnN0cmFpbnRzLmlzVmFsaWQoKSk7Ci0KKyAgICAvLyBo
dHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLW1haW4vI2Rmbi1zZWxlY3RzZXR0aW5n
cworICAgIC8vCisgICAgLy8gMS4gRWFjaCBjb25zdHJhaW50IHNwZWNpZmllcyBvbmUgb3IgbW9y
ZSB2YWx1ZXMgKG9yIGEgcmFuZ2Ugb2YgdmFsdWVzKSBmb3IgaXRzIHByb3BlcnR5LgorICAgIC8v
ICAgIEEgcHJvcGVydHkgbWF5IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiB0aGUgbGlzdCBvZiAn
YWR2YW5jZWQnIENvbnN0cmFpbnRTZXRzLiBJZiBhbgorICAgIC8vICAgIGVtcHR5IG9iamVjdCBv
ciBsaXN0IGhhcyBiZWVuIGdpdmVuIGFzIHRoZSB2YWx1ZSBmb3IgYSBjb25zdHJhaW50LCBpdCBt
dXN0IGJlIGludGVycHJldGVkCisgICAgLy8gICAgYXMgaWYgdGhlIGNvbnN0cmFpbnQgd2VyZSBu
b3Qgc3BlY2lmaWVkIChpbiBvdGhlciB3b3JkcywgYW4gZW1wdHkgY29uc3RyYWludCA9PSBubyBj
b25zdHJhaW50KS4KKyAgICAvLworICAgIC8vICAgIE5vdGUgdGhhdCB1bmtub3duIHByb3BlcnRp
ZXMgYXJlIGRpc2NhcmRlZCBieSBXZWJJREwsIHdoaWNoIG1lYW5zIHRoYXQgdW5rbm93bi91bnN1
cHBvcnRlZCByZXF1aXJlZAorICAgIC8vICAgIGNvbnN0cmFpbnRzIHdpbGwgc2lsZW50bHkgZGlz
YXBwZWFyLiBUbyBhdm9pZCB0aGlzIGJlaW5nIGEgc3VycHJpc2UsIGFwcGxpY2F0aW9uIGF1dGhv
cnMgYXJlCisgICAgLy8gICAgZXhwZWN0ZWQgdG8gZmlyc3QgdXNlIHRoZSBnZXRTdXBwb3J0ZWRD
b25zdHJhaW50cygpIG1ldGhvZCBhcyBzaG93biBpbiB0aGUgRXhhbXBsZXMgYmVsb3cuCisKKyAg
ICAvLyAyLiBMZXQgb2JqZWN0IGJlIHRoZSBDb25zdHJhaW5hYmxlUGF0dGVybiBvYmplY3Qgb24g
d2hpY2ggdGhpcyBhbGdvcml0aG0gaXMgYXBwbGllZC4gTGV0IGNvcHkgYmUgYW4KKyAgICAvLyAg
ICB1bmNvbnN0cmFpbmVkIGNvcHkgb2Ygb2JqZWN0IChpLmUuLCBjb3B5IHNob3VsZCBiZWhhdmUg
YXMgaWYgaXQgd2VyZSBvYmplY3Qgd2l0aCBhbGwgQ29uc3RyYWludFNldHMKKyAgICAvLyAgICBy
ZW1vdmVkLikKKworICAgIC8vIDMuIEZvciBldmVyeSBwb3NzaWJsZSBzZXR0aW5ncyBkaWN0aW9u
YXJ5IG9mIGNvcHkgY29tcHV0ZSBpdHMgZml0bmVzcyBkaXN0YW5jZSwgdHJlYXRpbmcgYmFyZSB2
YWx1ZXMgb2YKKyAgICAvLyAgICBwcm9wZXJ0aWVzIGFzIGlkZWFsIHZhbHVlcy4gTGV0IGNhbmRp
ZGF0ZXMgYmUgdGhlIHNldCBvZiBzZXR0aW5ncyBkaWN0aW9uYXJpZXMgZm9yIHdoaWNoIHRoZSBm
aXRuZXNzCisgICAgLy8gICAgZGlzdGFuY2UgaXMgZmluaXRlLgogICAgIGF1dG8mIG1hbmRhdG9y
eUNvbnN0cmFpbnRzID0gY29uc3RyYWludHMubWFuZGF0b3J5Q29uc3RyYWludHMoKTsKICAgICBm
b3IgKGF1dG8mIG5hbWVDb25zdHJhaW50UGFpciA6IG1hbmRhdG9yeUNvbnN0cmFpbnRzKSB7Ci0g
ICAgICAgIGF1dG8mIGNvbnN0cmFpbnQgPSAqbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVlOwotICAg
ICAgICBpZiAoc3VwcG9ydHNDb25zdHJhaW50KGNvbnN0cmFpbnQpID09IENvbnN0cmFpbnRTdXBw
b3J0OjpVbnN1cHBvcnRlZCkgewotICAgICAgICAgICAgZmFpbHVyZUhhbmRsZXIoY29uc3RyYWlu
dC5uYW1lKCksICJDb25zdHJhaW50IG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY29uc3QgYXV0byYgY29uc3RyYWludCA9IG5hbWVDb25zdHJhaW50UGFpci52
YWx1ZTsKKyAgICAgICAgaWYgKGZpdG5lc3NEaXN0YW5jZSgqY29uc3RyYWludCkgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSB7CisgICAgICAgICAgICBmYWlsZWRD
b25zdHJhaW50ID0gY29uc3RyYWludC0+bmFtZSgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgY2FuZGlkYXRlcy5zZXQoKmNvbnN0cmFpbnQpOworICAg
IH0KKworICAgIC8vIDQuIElmIGNhbmRpZGF0ZXMgaXMgZW1wdHksIHJldHVybiB1bmRlZmluZWQg
YXMgdGhlIHJlc3VsdCBvZiB0aGUgU2VsZWN0U2V0dGluZ3MoKSBhbGdvcml0aG0uCisgICAgaWYg
KGNhbmRpZGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDUu
IEl0ZXJhdGUgb3ZlciB0aGUgJ2FkdmFuY2VkJyBDb25zdHJhaW50U2V0cyBpbiBuZXdDb25zdHJh
aW50cyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHNwZWNpZmllZC4KKyAgICAvLyAg
ICBGb3IgZWFjaCBDb25zdHJhaW50U2V0OgorCisgICAgLy8gNS4xIGNvbXB1dGUgdGhlIGZpdG5l
c3MgZGlzdGFuY2UgYmV0d2VlbiBpdCBhbmQgZWFjaCBzZXR0aW5ncyBkaWN0aW9uYXJ5IGluIGNh
bmRpZGF0ZXMsIHRyZWF0aW5nIGJhcmUKKyAgICAvLyAgICAgdmFsdWVzIG9mIHByb3BlcnRpZXMg
YXMgZXhhY3QuCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIE1lZGlhVHJhY2tDb25zdHJh
aW50U2V0TWFwPj4gc3VwcG9ydGVkQ29uc3RyYWludHM7CisgICAgZG91YmxlIG1pbmltdW1EaXN0
YW5jZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGFkdmFuY2VkQ29uc3RyYWludCA6IGNvbnN0cmFpbnRzLmFkdmFuY2VkQ29u
c3RyYWludHMoKSkgeworICAgICAgICBkb3VibGUgY29uc3RyYWludERpc3RhbmNlID0gMDsKKyAg
ICAgICAgYm9vbCBzdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiBuYW1lQ29u
c3RyYWludFBhaXIgOiBhZHZhbmNlZENvbnN0cmFpbnQpIHsKKyAgICAgICAgICAgIGRvdWJsZSBk
aXN0YW5jZSA9IGZpdG5lc3NEaXN0YW5jZSgqbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVlKTsKKyAg
ICAgICAgICAgIGNvbnN0cmFpbnREaXN0YW5jZSArPSBkaXN0YW5jZTsKKyAgICAgICAgICAgIGlm
IChkaXN0YW5jZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCisg
ICAgICAgICAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChjb25zdHJhaW50RGlzdGFuY2UgPCBtaW5pbXVtRGlzdGFuY2UpCisgICAgICAgICAgICBtaW5p
bXVtRGlzdGFuY2UgPSBjb25zdHJhaW50RGlzdGFuY2U7CisKKyAgICAgICAgLy8gNS4yIElmIHRo
ZSBmaXRuZXNzIGRpc3RhbmNlIGlzIGZpbml0ZSBmb3Igb25lIG9yIG1vcmUgc2V0dGluZ3MgZGlj
dGlvbmFyaWVzIGluIGNhbmRpZGF0ZXMsIGtlZXAgdGhvc2UKKyAgICAgICAgLy8gICAgIHNldHRp
bmdzIGRpY3Rpb25hcmllcyBpbiBjYW5kaWRhdGVzLCBkaXNjYXJkaW5nIG90aGVycy4KKyAgICAg
ICAgLy8gICAgIElmIHRoZSBmaXRuZXNzIGRpc3RhbmNlIGlzIGluZmluaXRlIGZvciBhbGwgc2V0
dGluZ3MgZGljdGlvbmFyaWVzIGluIGNhbmRpZGF0ZXMsIGlnbm9yZSB0aGlzIENvbnN0cmFpbnRT
ZXQuCisgICAgICAgIGlmIChzdXBwb3J0ZWQpCisgICAgICAgICAgICBzdXBwb3J0ZWRDb25zdHJh
aW50cy5hcHBlbmQoe2NvbnN0cmFpbnREaXN0YW5jZSwgYWR2YW5jZWRDb25zdHJhaW50fSk7Cisg
ICAgfQorCisgICAgLy8gNi4gU2VsZWN0IG9uZSBzZXR0aW5ncyBkaWN0aW9uYXJ5IGZyb20gY2Fu
ZGlkYXRlcywgYW5kIHJldHVybiBpdCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBTZWxlY3RTZXR0aW5n
cygpIGFsZ29yaXRobS4KKyAgICAvLyAgICBUaGUgVUEgc2hvdWxkIHVzZSB0aGUgb25lIHdpdGgg
dGhlIHNtYWxsZXN0IGZpdG5lc3MgZGlzdGFuY2UsIGFzIGNhbGN1bGF0ZWQgaW4gc3RlcCAzLgor
ICAgIGlmIChtaW5pbXVtRGlzdGFuY2UgIT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpKSB7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnJlbW92ZUFsbE1hdGNo
aW5nKCBbJl0gKHN0ZDo6cGFpcjxkb3VibGUsIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwPiBw
YWlyKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBwYWlyLmZpcnN0ID4gbWluaW11bURp
c3RhbmNlOworICAgICAgICB9KTsKKworICAgICAgICBpZiAoIXN1cHBvcnRlZENvbnN0cmFpbnRz
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byYgYWR2YW5jZWRDb25zdHJhaW50ID0gc3Vw
cG9ydGVkQ29uc3RyYWludHNbMF0uc2Vjb25kOworICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1l
Q29uc3RyYWludFBhaXIgOiBhZHZhbmNlZENvbnN0cmFpbnQpCisgICAgICAgICAgICAgICAgY2Fu
ZGlkYXRlcy5tZXJnZSgqbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVlKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIGZvciAoYXV0byYgbmFtZUNvbnN0cmFpbnRQYWlyIDogbWFuZGF0b3J5Q29uc3Ry
YWludHMpCi0gICAgICAgIGFwcGx5Q29uc3RyYWludCgqbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmFw
cGx5Q29uc3RyYWludHMoY29uc3QgTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMsIFN1Y2Nl
c3NIYW5kbGVyIHN1Y2Nlc3NIYW5kbGVyLCBGYWlsdXJlSGFuZGxlciBmYWlsdXJlSGFuZGxlcikK
K3sKKyAgICBBU1NFUlQoY29uc3RyYWludHMuaXNWYWxpZCgpKTsKKworICAgIEZsYXR0ZW5lZENv
bnN0cmFpbnQgY2FuZGlkYXRlczsKKworICAgIFN0cmluZyBmYWlsZWRDb25zdHJhaW50OworICAg
IGlmICghc2VsZWN0U2V0dGluZ3MoY29uc3RyYWludHMsIGNhbmRpZGF0ZXMsIGZhaWxlZENvbnN0
cmFpbnQpKSB7CisgICAgICAgIGZhaWx1cmVIYW5kbGVyKGZhaWxlZENvbnN0cmFpbnQsICJDb25z
dHJhaW50IG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZv
ciAoYXV0byBjb25zdHJhaW50IDogY2FuZGlkYXRlcykKKyAgICAgICAgYXBwbHlDb25zdHJhaW50
KCpjb25zdHJhaW50KTsKIAogICAgIHN1Y2Nlc3NIYW5kbGVyKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRp
YVNvdXJjZS5oCShyZXZpc2lvbiAyMDUzNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcg
KzQyLDYgQEAKICNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5
ZXIuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgiCi0jaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTcxLDEzICsxNzAs
MTIgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBXZWFrUHRyPFJlYWx0aW1lTWVkaWFTb3Vy
Y2U+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQ
dHIoKTsgfQogCi0gICAgZW51bSBDb25zdHJhaW50U3VwcG9ydCB7IElnbm9yZWQsIFN1cHBvcnRl
ZCwgVW5zdXBwb3J0ZWQgfTsKLSAgICBDb25zdHJhaW50U3VwcG9ydCBzdXBwb3J0c0NvbnN0cmFp
bnQoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7CisgICAgYm9vbCBzdXBwb3J0c0NvbnN0cmFpbnRz
KGNvbnN0IE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwJik7CisgICAgYm9vbCBzZWxlY3RTZXR0
aW5ncyhjb25zdCBNZWRpYUNvbnN0cmFpbnRzJiwgRmxhdHRlbmVkQ29uc3RyYWludCYsIFN0cmlu
ZyYpOworICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7
CiAgICAgdm9pZCBhcHBseUNvbnN0cmFpbnQoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7CiAKICAg
ICBXZWFrUHRyRmFjdG9yeTxSZWFsdGltZU1lZGlhU291cmNlPiBtX3dlYWtQdHJGYWN0b3J5Owot
ICAgIExvY2sgbV9sb2NrOwotCiAgICAgU3RyaW5nIG1faWQ7CiAgICAgU3RyaW5nIG1fcGVyc2lz
dGVudElEOwogICAgIFR5cGUgbV90eXBlOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1MzQ4KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTYtMDktMDcgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgW01lZGlhU3RyZWFtXSBhcHBseUNvbnN0cmFpbnRzIHB0LiAyIC0gYWR2YW5jZWQgY29uc3Ry
YWludHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MTcxNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjgxOTU0NjE+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL2FwcGx5
LWNvbnN0cmFpbnRzLWFkdmFuY2VkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy1hZHZhbmNlZC5odG1sOiBBZGRlZC4KKwog
MjAxNi0wOS0wMiAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbTWVkaWFTdHJlYW1dIGFwcGx5Q29uc3RyYWludHMgcHQuIDEgLSBtYW5kYXRvcnkgY29u
c3RyYWludHMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3Ry
YWludHMtYWR2YW5jZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3RyYWludHMtYWR2YW5jZWQtZXhwZWN0ZWQudHh0CShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3Ry
YWludHMtYWR2YW5jZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDgg
QEAKK1Rlc3RzIGFwcGx5Q29uc3RyYWludHMgb24gYSB2aWRlbyBzdHJlYW0gdHJhY2suCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHN0cmVhbS5nZXRWaWRlb1RyYWNrcygp
Lmxlbmd0aCBpcyAxCitQQVNTIHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmxlbmd0aCBpcyAwCitQ
QVNTIHZpZGVvLnZpZGVvVHJhY2tzLmxlbmd0aCBpcyAxCitQQVNTIHZpZGVvLmF1ZGlvVHJhY2tz
Lmxlbmd0aCBpcyAwCisKKyoqIENvbnN0cmFpbnQ6IHsid2lkdGgiOjY0MCwiaGVpZ2h0Ijo0ODB9
IC0gc2V0dXAgd2lkdGggYW5kIGhlaWdodC4KK1BBU1Mgc2V0dGluZ3NbJ3dpZHRoJ10gaXMgNjQw
CitQQVNTIHNldHRpbmdzWydoZWlnaHQnXSBpcyA0ODAKKworKiogQ29uc3RyYWludDogeyJ3aWR0
aCI6eyJtaW4iOjMyMH0sImhlaWdodCI6eyJtaW4iOjI0MH0sImFkdmFuY2VkIjpbeyJ3aWR0aCI6
MTkyMCwiaGVpZ2h0IjoxMjgwfV19IC0gYWR2YW5jZWQgd2lkdGggYW5kIGhlaWdodCBhcmUgdG9v
IGJpZywgbWluaW11bXMgYXJlIGxlc3MgdGhhbiBjdXJyZW50LCBub3RoaW5nIGlzIGNoYW5nZWQu
CitQQVNTIHNldHRpbmdzWyd3aWR0aCddIGlzIDY0MAorUEFTUyBzZXR0aW5nc1snaGVpZ2h0J10g
aXMgNDgwCisKKyoqIENvbnN0cmFpbnQ6IHsid2lkdGgiOnsibWluIjo2NDB9LCJoZWlnaHQiOnsi
bWluIjo0ODB9LCJhZHZhbmNlZCI6W3sid2lkdGgiOjE5MjAsImhlaWdodCI6MTI4MH0seyJ3aWR0
aCI6OTYwLCJoZWlnaHQiOjcyMH1dfSAtIGZpcnN0IHdpZHRoIGFuZCBoZWlnaHQgaW4gYWR2YW5j
ZWQgYXJlIHRvbyBiaWcsIHNlY29uZCBpcyB1c2VkLgorUEFTUyBzZXR0aW5nc1snd2lkdGgnXSBp
cyA5NjAKK1BBU1Mgc2V0dGluZ3NbJ2hlaWdodCddIGlzIDcyMAorCisqKiBDb25zdHJhaW50OiB7
IndpZHRoIjozMjAsImhlaWdodCI6MjQwfSAtIHJlc2V0IHdpZHRoIGFuZCBoZWlnaHQuCitQQVNT
IHNldHRpbmdzWyd3aWR0aCddIGlzIDMyMAorUEFTUyBzZXR0aW5nc1snaGVpZ2h0J10gaXMgMjQw
CisKKyoqIENvbnN0cmFpbnQ6IHsid2lkdGgiOnsibWluIjo2NDB9LCJoZWlnaHQiOnsibWluIjo0
ODB9LCJhZHZhbmNlZCI6W3sid2lkdGgiOjE5MjAsImhlaWdodCI6MTI4MH1dfSAtIGFkdmFuY2Vk
IHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRvbyBiaWcsIGZhbGwgYmFjayB0byByZXF1aXJlZCBtaW5p
bXVtcy4KK1BBU1Mgc2V0dGluZ3NbJ3dpZHRoJ10gaXMgNjQwCitQQVNTIHNldHRpbmdzWydoZWln
aHQnXSBpcyA0ODAKKworKiogQ29uc3RyYWludDogeyJ3aWR0aCI6MzIwLCJoZWlnaHQiOjI0MH0g
LSByZXNldCB3aWR0aCBhbmQgaGVpZ2h0LgorUEFTUyBzZXR0aW5nc1snd2lkdGgnXSBpcyAzMjAK
K1BBU1Mgc2V0dGluZ3NbJ2hlaWdodCddIGlzIDI0MAorCisqKiBDb25zdHJhaW50OiB7IndpZHRo
Ijp7Im1pbiI6NjQwfSwiaGVpZ2h0Ijp7Im1pbiI6NDgwfSwiYWR2YW5jZWQiOlt7IndpZHRoIjox
OTIwLCJoZWlnaHQiOjEyODB9LHsiYXNwZWN0UmF0aW8iOjEuNzc3Nzc3fV19IC0gYWR2YW5jZWQg
d2lkdGggYW5kIGhlaWdodCBhcmUgdG9vIGJpZywgYXNwZWN0UmF0aW8gaXMgdXNlZC4KK1BBU1Mg
c2V0dGluZ3NbJ3dpZHRoJ10gaXMgNjQwCitQQVNTIHNldHRpbmdzWydoZWlnaHQnXSBpcyAzNjAK
KworKiogQ29uc3RyYWludDogeyJhZHZhbmNlZCI6W3siZmFjaW5nTW9kZSI6ImxlZnQifSx7ImZh
Y2luZ01vZGUiOiJyaWdodCJ9LHsiZmFjaW5nTW9kZSI6ImVudmlyb25tZW50In0seyJmYWNpbmdN
b2RlIjoidXNlciJ9XX0gLSBubyByZXF1aXJlZCBjb25zdHJhaW50cywgYWR2YW5jZWQgY29uc3Ry
YWludHMgYXJlIGlnbm9yZWQuCitQQVNTIHNldHRpbmdzWydmYWNpbmdNb2RlJ10gaXMgInVzZXIi
CisKKyoqIENvbnN0cmFpbnQ6IHsid2lkdGgiOnsibWluIjo2NDB9LCJhZHZhbmNlZCI6W3siZmFj
aW5nTW9kZSI6ImxlZnQifSx7ImZhY2luZ01vZGUiOiJyaWdodCJ9LHsiZmFjaW5nTW9kZSI6ImVu
dmlyb25tZW50In0seyJmYWNpbmdNb2RlIjoidXNlciJ9XX0gLSBmaXJzdCB0d28gYWR2YW5jZWQg
ZmFjaW5nTW9kZXMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoaXJkIGlzIHVzZWQuCitQQVNTIHNldHRp
bmdzWydmYWNpbmdNb2RlJ10gaXMgImVudmlyb25tZW50IgorCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9t
ZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50cy1hZHZhbmNlZC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vYXBwbHktY29uc3RyYWludHMtYWR2YW5jZWQu
aHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2FwcGx5
LWNvbnN0cmFpbnRzLWFkdmFuY2VkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgICAgICA8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2FwcGx5LWNvbnN0cmFpbnRzLXV0aWxzLmpzIj48L3Njcmlw
dD4KKyAgICAgICAgPHNjcmlwdD4KKworICAgICAgICAgICAgbGV0IHRlc3RzID0gWworICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogInNldHVwIHdpZHRoIGFu
ZCBoZWlnaHQuIiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludDogeyB3aWR0aDogNjQw
LCBoZWlnaHQ6IDQ4MCB9LCAKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHsgd2lkdGg6
IDY0MCwgaGVpZ2h0OiA0ODAgfSwgCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJhZHZhbmNlZCB3aWR0aCBhbmQgaGVp
Z2h0IGFyZSB0b28gYmlnLCBtaW5pbXVtcyBhcmUgbGVzcyB0aGFuIGN1cnJlbnQsIG5vdGhpbmcg
aXMgY2hhbmdlZC4iLAorICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50OiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogeyBtaW46IDMyMCB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB7IG1pbjogMjQwIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZDogWworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IDE5MjAsIGhlaWdodDogMTI4MCB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogeyB3aWR0
aDogNjQwLCBoZWlnaHQ6IDQ4MCB9LCAKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogImZpcnN0IHdpZHRoIGFuZCBoZWln
aHQgaW4gYWR2YW5jZWQgYXJlIHRvbyBiaWcsIHNlY29uZCBpcyB1c2VkLiIsCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0cmFpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZHRoOiB7IG1pbjogNjQwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQ6IHsgbWluOiA0ODAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkdmFuY2VkOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyB3aWR0aDogMTkyMCwgaGVpZ2h0OiAxMjgwIH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyB3aWR0aDogOTYwLCBoZWlnaHQ6IDcyMCB9LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHsgd2lkdGg6IDk2MCwgaGVp
Z2h0OiA3MjAgfSwgCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJyZXNldCB3aWR0aCBhbmQgaGVpZ2h0LiIsCisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IHsgd2lkdGg6IDMyMCwgaGVpZ2h0OiAyNDAgfSwg
CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB7IHdpZHRoOiAzMjAsIGhlaWdodDogMjQw
IH0sIAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlOiAiYWR2YW5jZWQgd2lkdGggYW5kIGhlaWdodCBhcmUgdG9vIGJpZywg
ZmFsbCBiYWNrIHRvIHJlcXVpcmVkIG1pbmltdW1zLiIsCisgICAgICAgICAgICAgICAgICAgIGNv
bnN0cmFpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB7
IG1pbjogNjQwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6
IHsgIG1pbjogNDgwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlZDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6
IDE5MjAsIGhlaWdodDogMTI4MCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICBleHBlY3RlZDogeyB3aWR0aDogNjQwLCBoZWlnaHQ6IDQ4MCB9LCAKKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTog
InJlc2V0IHdpZHRoIGFuZCBoZWlnaHQuIiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3RyYWlu
dDogeyB3aWR0aDogMzIwLCBoZWlnaHQ6IDI0MCB9LCAKKyAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQ6IHsgd2lkdGg6IDMyMCwgaGVpZ2h0OiAyNDAgfSwgCisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJhZHZhbmNl
ZCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSB0b28gYmlnLCBhc3BlY3RSYXRpbyBpcyB1c2VkLiIsCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoOiB7IG1pbjogNjQwIH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQ6IHsgbWluOiA0ODAgfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkdmFuY2VkOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyB3aWR0aDogMTkyMCwgaGVpZ2h0OiAxMjgwIH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhc3BlY3RSYXRpbzogMS43Nzc3NzcgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogeyB3aWR0aDogNjQw
LCBoZWlnaHQ6IDM2MCB9LCAKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIm5vIHJlcXVpcmVkIGNvbnN0cmFpbnRzLCBh
ZHZhbmNlZCBjb25zdHJhaW50cyBhcmUgaWdub3JlZC4iLAorICAgICAgICAgICAgICAgICAgICBj
b25zdHJhaW50OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNl
ZDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmFjaW5nTW9k
ZTogImxlZnQiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBm
YWNpbmdNb2RlOiAicmlnaHQiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyBmYWNpbmdNb2RlOiAiZW52aXJvbm1lbnQiIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyBmYWNpbmdNb2RlOiAidXNlciIgfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHsgZmFjaW5nTW9kZTogInVzZXIi
IH0sIAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlOiAiZmlyc3QgdHdvIGFkdmFuY2VkIGZhY2luZ01vZGVzIGFyZSBub3Qg
c3VwcG9ydGVkLCB0aGlyZCBpcyB1c2VkLiIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFp
bnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB7IG1pbjog
NjQwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZDogWwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmFjaW5nTW9kZTogImxl
ZnQiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBmYWNpbmdN
b2RlOiAicmlnaHQiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyBmYWNpbmdNb2RlOiAiZW52aXJvbm1lbnQiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyBmYWNpbmdNb2RlOiAidXNlciIgfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHsgZmFjaW5nTW9kZTogImVudmlyb25tZW50
IiB9LCAKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgXTsKKworICAgICAgICAgICAg
bGV0IHRlc3RlciA9IG5ldyBDb25zdHJhaW50c1Rlc3QoeyB2aWRlbzogdHJ1ZSB9LCB0ZXN0cywg
IlRlc3RzIGFwcGx5Q29uc3RyYWludHMgb24gYSB2aWRlbyBzdHJlYW0gdHJhY2suIikKKyAgICAg
ICAgICAgICAgICAub25TdHJlYW1SZWFkeSgocykgPT4geworICAgICAgICAgICAgICAgICAgICBz
dHJlYW0gPSBzOworICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgnc3RyZWFtLmdldFZpZGVv
VHJhY2tzKCkubGVuZ3RoJywgJzEnKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoJ3N0
cmVhbS5nZXRBdWRpb1RyYWNrcygpLmxlbmd0aCcsICcwJyk7CisgICAgICAgICAgICAgICAgICAg
IHRlc3Rlci5zZXRTdHJlYW1UcmFjayhzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKVswXSk7CisgICAg
ICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAub25WaWRlb1JlYWR5KCh2KSA9PiB7Cisg
ICAgICAgICAgICAgICAgICAgIHZpZGVvID0gdjsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxk
QmUoJ3ZpZGVvLnZpZGVvVHJhY2tzLmxlbmd0aCcsICcxJyk7CisgICAgICAgICAgICAgICAgICAg
IHNob3VsZEJlKCd2aWRlby5hdWRpb1RyYWNrcy5sZW5ndGgnLCAnMCcpOworICAgICAgICAgICAg
ICAgIH0pCisgICAgICAgICAgICAgICAgLnN0YXJ0KCk7CisKKyAgICAgICAgPC9zY3JpcHQ+Cisg
ICAgICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHk+CisgICAgICAgIDx2aWRlbyBjb250cm9scyBp
ZD0idmlkZW8iPC92aWRlbz4KKyAgICAgICAgPGJyPgorICAgICAgICA8ZGl2IGlkPSJkaXYiPjwv
ZGl2PgorCisgICAgPC9ib2R5PgorPC9odG1sPgorCg==
</data>
<flag name="review"
          id="311575"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288202</attachid>
            <date>2016-09-07 16:31:18 -0700</date>
            <delta_ts>2016-09-07 17:03:29 -0700</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>apply_advanced_constraints_patch_8.txt</filename>
            <type>text/plain</type>
            <size>48299</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTU2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE2LTA5LTA3ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNZWRpYVN0cmVhbV0g
YXBwbHlDb25zdHJhaW50cyBwdC4gMiAtIGFkdmFuY2VkIGNvbnN0cmFpbnRzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3MTUKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzI4MTk1NDYxPgorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nv
bi4KKworICAgICAgICBUZXN0OiBmYXN0L21lZGlhc3RyZWFtL2FwcGx5LWNvbnN0cmFpbnRzLWFk
dmFuY2VkLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3Ry
YWludHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb25zdHJhaW50OjpjcmVhdGUpOiBS
ZXR1cm4gUmVmPD4sIG5vdCBSZWZQdHI8Pi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29uc3Ry
YWludDo6Y29weSk6IE5ldworICAgICAgICAoV2ViQ29yZTo6SW50Q29uc3RyYWludDo6Y29weSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6Y29weSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Qm9vbGVhbkNvbnN0cmFpbnQ6OmNvcHkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFpbnQ6OmNvcHkpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFpbnQ6OmZpdG5lc3NEaXN0YW5jZSk6IE5ldywgY29tcHV0
ZSB0aGUgZml0bmVzcyBkaXN0YW5jZSBiZXR3ZWVuIHRoZQorICAgICAgICAgIGNvbnN0cmFpbnQg
YW5kIHRoZSBzcGVjaWZpZWQgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJh
aW50OjptZXJnZSk6IE5ldywgbWVyZ2UgdmFsdWUgaW50byBjb25zdHJhaW50LgorICAgICAgICAo
V2ViQ29yZTo6RmxhdHRlbmVkQ29uc3RyYWludDo6c2V0KTogTmV3LCBhZGQgb3IgcmVwbGFjZSBh
IGNvbnN0cmFpbnQuCisgICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50OjptZXJn
ZSk6IE5ldywgbWVyZ2Ugb3IgYWRkIGEgY29uc3RyYWludC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnN0cmFpbnQ6OmZpdG5lc3NEaXN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnN0
cmFpbnQ6Om1lcmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpuZWFy
bHlFcXVhbCk6CisgICAgICAgIChXZWJDb3JlOjpGbGF0dGVuZWRDb25zdHJhaW50Ojppc0VtcHR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6OmJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZsYXR0ZW5lZENvbnN0cmFpbnQ6OmVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUNvbnN0cmFpbnQ6On5NZWRpYUNvbnN0cmFpbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb25zdHJhaW50OjpmaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhQ29uc3RyYWludDo6Z2V0SWRlYWwpOiBEZWxldGVkLgorCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU1lZGlhU291cmNlOjpmaXRuZXNzRGlzdGFuY2UpOiBSZXR1cm4gdGhlIGZp
dG5lc3MgZGlzdGFuY2UgYmV0d2VlbiB0aGUgc291cmNlCisgICAgICAgICAgY2FwYWJpbGl0aWVz
IGFuZCBhIGNvbnN0cmFpbnQuCisgICAgICAgIChXZWJDb3JlOjphcHBseU51bWVyaWNDb25zdHJh
aW50KTogTmV3LCBhcHBseSBhIG51bWVyaWMgY29uc3RyYWludC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lTWVkaWFTb3VyY2U6OmFwcGx5Q29uc3RyYWludCk6IFVzZSBhcHBseU51bWVyaWND
b25zdHJhaW50LgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZTo6c2VsZWN0
U2V0dGluZ3MpOiBOZXcsIGltcGxlbWVudCB0aGUgU2VsZWN0U2V0dGluZ3MgYWxnb3JpdGhtCisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2U6OnN1cHBvcnRzQ29uc3RyYWlu
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5oOgorCiAyMDE2LTA5
LTA3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGhhbmRs
aW5nIG9mIG5lZ2F0aXZlIHJhZGl1cyBpbiBIVE1MQXJlYUVsZW1lbnQncyBjb29yZHMgd2hlbiBp
biBjaXJjbGUgc3RhdGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhQ29uc3RyYWludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwCShyZXZpc2lvbiAyMDUzNDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVJlZlB0cjxNZWRpYUNvbnN0cmFpbnQ+IE1lZGlhQ29uc3RyYWludDo6Y3JlYXRlKGNvbnN0
IFN0cmluZyYgbmFtZSkKK1JlZjxNZWRpYUNvbnN0cmFpbnQ+IE1lZGlhQ29uc3RyYWludDo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBNZWRpYUNvbnN0cmFpbnRUeXBlIGNvbnN0
cmFpbnRUeXBlID0gUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzOjpjb25z
dHJhaW50RnJvbU5hbWUobmFtZSk7CiAKQEAgLTYyLDYgKzYyLDUxIEBAIFJlZlB0cjxNZWRpYUNv
bnN0cmFpbnQ+IE1lZGlhQ29uc3RyYWludDoKICAgICB9CiB9CiAKK1JlZjxNZWRpYUNvbnN0cmFp
bnQ+IE1lZGlhQ29uc3RyYWludDo6Y29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1lZGlhQ29u
c3RyYWludDo6Y3JlYXRlKG5hbWUoKSk7Cit9CisKK1JlZjxNZWRpYUNvbnN0cmFpbnQ+IEludENv
bnN0cmFpbnQ6OmNvcHkoKSBjb25zdAoreworICAgIGF1dG8gY29weSA9IEludENvbnN0cmFpbnQ6
OmNyZWF0ZShuYW1lKCksIHR5cGUoKSk7CisgICAgY29weS0+bV9taW4gPSBtX21pbjsKKyAgICBj
b3B5LT5tX21heCA9IG1fbWF4OworICAgIGNvcHktPm1fZXhhY3QgPSBtX2V4YWN0OworICAgIGNv
cHktPm1faWRlYWwgPSBtX2lkZWFsOworCisgICAgcmV0dXJuIGNvcHkubGVha1JlZigpOworfQor
CitSZWY8TWVkaWFDb25zdHJhaW50PiBEb3VibGVDb25zdHJhaW50Ojpjb3B5KCkgY29uc3QKK3sK
KyAgICBhdXRvIGNvcHkgPSBEb3VibGVDb25zdHJhaW50OjpjcmVhdGUobmFtZSgpLCB0eXBlKCkp
OworICAgIGNvcHktPm1fbWluID0gbV9taW47CisgICAgY29weS0+bV9tYXggPSBtX21heDsKKyAg
ICBjb3B5LT5tX2V4YWN0ID0gbV9leGFjdDsKKyAgICBjb3B5LT5tX2lkZWFsID0gbV9pZGVhbDsK
KyAgICAKKyAgICByZXR1cm4gY29weS5sZWFrUmVmKCk7Cit9CisKK1JlZjxNZWRpYUNvbnN0cmFp
bnQ+IEJvb2xlYW5Db25zdHJhaW50Ojpjb3B5KCkgY29uc3QKK3sKKyAgICBhdXRvIGNvcHkgPSBC
b29sZWFuQ29uc3RyYWludDo6Y3JlYXRlKG5hbWUoKSwgdHlwZSgpKTsKKyAgICBjb3B5LT5tX2V4
YWN0ID0gbV9leGFjdDsKKyAgICBjb3B5LT5tX2lkZWFsID0gbV9pZGVhbDsKKworICAgIHJldHVy
biBjb3B5LmxlYWtSZWYoKTsKK30KKworUmVmPE1lZGlhQ29uc3RyYWludD4gU3RyaW5nQ29uc3Ry
YWludDo6Y29weSgpIGNvbnN0Cit7CisgICAgYXV0byBjb3B5ID0gU3RyaW5nQ29uc3RyYWludDo6
Y3JlYXRlKG5hbWUoKSwgdHlwZSgpKTsKKyAgICBjb3B5LT5tX2V4YWN0ID0gbV9leGFjdDsKKyAg
ICBjb3B5LT5tX2lkZWFsID0gbV9pZGVhbDsKKworICAgIHJldHVybiBjb3B5LmxlYWtSZWYoKTsK
K30KKwogYm9vbCBCb29sZWFuQ29uc3RyYWludDo6Z2V0RXhhY3QoYm9vbCYgZXhhY3QpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2V4YWN0KQpAQCAtMTM2LDYgKzE4MSw5NSBAQCBjb25zdCBTdHJpbmcm
IFN0cmluZ0NvbnN0cmFpbnQ6OmZpbmQoc3RkCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9
CiAKK2RvdWJsZSBTdHJpbmdDb25zdHJhaW50OjpmaXRuZXNzRGlzdGFuY2UoY29uc3QgU3RyaW5n
JiB2YWx1ZSkgY29uc3QKK3sKKyAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0
dXJlLW1haW4vI2Rmbi1hcHBseWNvbnN0cmFpbnRzCisKKyAgICAvLyAxLiBJZiB0aGUgY29uc3Ry
YWludCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLCB0aGUgZml0bmVzcyBkaXN0YW5j
ZSBpcyAwLgorICAgIGlmIChpc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8g
Mi4gSWYgdGhlIGNvbnN0cmFpbnQgaXMgcmVxdWlyZWQgKCdtaW4nLCAnbWF4Jywgb3IgJ2V4YWN0
JyksIGFuZCB0aGUgc2V0dGluZ3MKKyAgICAvLyAgICBkaWN0aW9uYXJ5J3MgdmFsdWUgZm9yIHRo
ZSBjb25zdHJhaW50IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbnN0cmFpbnQsIHRoZQorICAgIC8v
ICAgIGZpdG5lc3MgZGlzdGFuY2UgaXMgcG9zaXRpdmUgaW5maW5pdHkuCisgICAgaWYgKCFtX2V4
YWN0LmlzRW1wdHkoKSAmJiBtX2V4YWN0LmZpbmQodmFsdWUpID09IG5vdEZvdW5kKQorICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworCisgICAg
Ly8gMy4gSWYgbm8gaWRlYWwgdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZml0bmVzcyBkaXN0YW5j
ZSBpcyAwLgorICAgIGlmIChtX2V4YWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAvLyA1LiBGb3IgYWxsIHN0cmluZyBhbmQgZW51bSBub24tcmVxdWlyZWQgY29uc3RyYWlu
dHMgKGRldmljZUlkLCBncm91cElkLCBmYWNpbmdNb2RlLAorICAgIC8vIGVjaG9DYW5jZWxsYXRp
b24pLCB0aGUgZml0bmVzcyBkaXN0YW5jZSBpcyB0aGUgcmVzdWx0IG9mIHRoZSBmb3JtdWxhCisg
ICAgLy8gICAgICAgIChhY3R1YWwgPT0gaWRlYWwpID8gMCA6IDEKKyAgICByZXR1cm4gbV9pZGVh
bC5maW5kKHZhbHVlKSAhPSBub3RGb3VuZCA/IDAgOiAxOworfQorCitkb3VibGUgU3RyaW5nQ29u
c3RyYWludDo6Zml0bmVzc0Rpc3RhbmNlKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2YWx1ZXMpIGNv
bnN0Cit7CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBkb3Vi
bGUgbWluaW11bURpc3RhbmNlID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpOworICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIG1pbmltdW1EaXN0
YW5jZSA9IHN0ZDo6bWluKG1pbmltdW1EaXN0YW5jZSwgZml0bmVzc0Rpc3RhbmNlKHZhbHVlKSk7
CisKKyAgICByZXR1cm4gbWluaW11bURpc3RhbmNlOworfQorCit2b2lkIFN0cmluZ0NvbnN0cmFp
bnQ6Om1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYgb3RoZXIpCit7CisgICAgaWYgKG90aGVy
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVz
OworICAgIGlmIChvdGhlci5nZXRFeGFjdCh2YWx1ZXMpKSB7CisgICAgICAgIGlmIChtX2V4YWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fZXhhY3QgPSB2YWx1ZXM7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICAgICAg
ICAgIGlmIChtX2V4YWN0LmZpbmQodmFsdWUpID09IG5vdEZvdW5kKQorICAgICAgICAgICAgICAg
ICAgICBtX2V4YWN0LmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAob3RoZXIuZ2V0SWRlYWwodmFsdWVzKSkgeworICAgICAgICBpZiAobV9p
ZGVhbC5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2lkZWFsID0gdmFsdWVzOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9pZGVhbC5maW5kKHZhbHVlKSA9PSBub3RGb3VuZCkKKyAgICAgICAgICAg
ICAgICAgICAgbV9pZGVhbC5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIEZsYXR0ZW5lZENvbnN0cmFpbnQ6OnNldChjb25zdCBNZWRpYUNv
bnN0cmFpbnQmIGNvbnN0cmFpbnQpCit7CisgICAgZm9yIChhdXRvIGV4aXN0aW5nQ29uc3RyYWlu
dCA6IG1fY29uc3RyYWludHMpIHsKKyAgICAgICAgaWYgKGV4aXN0aW5nQ29uc3RyYWludC0+dHlw
ZSgpID09IGNvbnN0cmFpbnQudHlwZSgpKSB7CisgICAgICAgICAgICBleGlzdGluZ0NvbnN0cmFp
bnQgPSBjb25zdHJhaW50LmNvcHkoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1fY29uc3RyYWludHMuYXBwZW5kKGNvbnN0cmFpbnQuY29weSgpKTsKK30K
Kwordm9pZCBGbGF0dGVuZWRDb25zdHJhaW50OjptZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQm
IGNvbnN0cmFpbnQpCit7CisgICAgZm9yIChhdXRvIGV4aXN0aW5nQ29uc3RyYWludCA6IG1fY29u
c3RyYWludHMpIHsKKyAgICAgICAgaWYgKGV4aXN0aW5nQ29uc3RyYWludC0+dHlwZSgpID09IGNv
bnN0cmFpbnQudHlwZSgpKSB7CisgICAgICAgICAgICBleGlzdGluZ0NvbnN0cmFpbnQtPm1lcmdl
KGNvbnN0cmFpbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgbV9jb25zdHJhaW50cy5hcHBlbmQoY29uc3RyYWludC5jb3B5KCkpOworfQorCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAkocmV2aXNpb24g
MjA1MzQ4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25z
dHJhaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxOSArMzUsMjMgQEAKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQogCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENv
bnN0cmFpbnRzLmgiCisjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIE1lZGlhQ29uc3RyYWludCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlh
Q29uc3RyYWludD4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFDb25zdHJhaW50
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBzdGF0aWMgUmVmPE1lZGlhQ29uc3Ry
YWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgZW51bSBjbGFzcyBDb25zdHJhaW50
VHlwZSB7IEV4YWN0Q29uc3RyYWludCwgSWRlYWxDb25zdHJhaW50LCBNaW5Db25zdHJhaW50LCBN
YXhDb25zdHJhaW50IH07CiAKICAgICB2aXJ0dWFsIH5NZWRpYUNvbnN0cmFpbnQoKSB7IH07CisK
KyAgICB2aXJ0dWFsIFJlZjxNZWRpYUNvbnN0cmFpbnQ+IGNvcHkoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5kYXRv
cnkoKSBjb25zdCA9IDA7CiAKQEAgLTU3LDYgKzYxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBnZXRJZGVhbChpbnQmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgdmFsaWRGb3JSYW5nZShpbnQsIGludCkgY29uc3Qg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBpbnQg
ZmluZChzdGQ6OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIGludCk+KSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGZpdG5l
c3NEaXN0YW5jZShpbnQsIGludCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJu
IDA7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBnZXRNaW4oZG91YmxlJikgY29uc3QgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldE1heChk
b3VibGUmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KQEAg
LTY0LDExICs2OSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGdldElkZWFsKGRvdWJs
ZSYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCB2YWxpZEZvclJhbmdlKGRvdWJsZSwgZG91YmxlKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSBmaW5kKHN0
ZDo6ZnVuY3Rpb248Ym9vbChDb25zdHJhaW50VHlwZSwgZG91YmxlKT4pIGNvbnN0IHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBkb3VibGUgZml0bmVzc0Rp
c3RhbmNlKGRvdWJsZSwgZG91YmxlKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gMDsgfQogCiAgICAgdmlydHVhbCBib29sIGdldE1pbihib29sJikgY29uc3QgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdldE1heChi
b29sJikgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGdldEV4YWN0KGJvb2wmKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgZ2V0SWRlYWwoYm9vbCYpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgZG91
YmxlIGZpdG5lc3NEaXN0YW5jZShib29sKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBib29sIGdldE1pbihWZWN0b3I8U3RyaW5nPiYpIGNv
bnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBnZXRNYXgoVmVjdG9yPFN0cmluZz4mKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyByZXR1cm4gZmFsc2U7IH0KQEAgLTc2LDYgKzgzLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0SWRlYWwoVmVjdG9yPFN0cmluZz4mKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgZmluZChzdGQ6
OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIGNvbnN0IFN0cmluZyYpPikgY29uc3QgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IH0KIAorICAgIHZpcnR1
YWwgZG91YmxlIGZpdG5lc3NEaXN0YW5jZShjb25zdCBTdHJpbmcmKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgZG91YmxlIGZpdG5lc3NEaXN0
YW5jZShjb25zdCBWZWN0b3I8U3RyaW5nPiYpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbWVyZ2UoY29uc3QgTWVkaWFDb25zdHJh
aW50JikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCiAgICAgTWVkaWFDb25zdHJhaW50VHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgY29uc3QgU3RyaW5nJiBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKQEAgLTEzNCwxOSArMTQ2LDk5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCB2YWxpZEZvclJhbmdl
KFZhbHVlVHlwZSByYW5nZU1pbiwgVmFsdWVUeXBlIHJhbmdlTWF4KSBjb25zdCBmaW5hbCB7Cisg
ICAgYm9vbCBuZWFybHlFcXVhbChkb3VibGUgYSwgZG91YmxlIGIpIGNvbnN0CisgICAgeworICAg
ICAgICAvLyBEb24ndCByZXF1aXJlIHN0cmljdCBlcXVhbGl0eSB3aGVuIGNvbXBhcmluZyBjb25z
dHJhaW50cywgb3IgbWFueSBmbG9hdGluZyBwb2ludCBjb25zdHJhaW50IHZhbHVlcywKKyAgICAg
ICAgLy8gZS5nLiAiYXNwZWN0UmF0aW86IDEuMzMzIiwgd2lsbCBuZXZlciBtYXRjaC4KKyAgICAg
ICAgY29uc3QgZG91YmxlIGVwc2lsb24gPSAwLjAwMDAxOworICAgICAgICByZXR1cm4gc3RkOjph
YnMoYSAtIGIpIDw9IGVwc2lsb247CisgICAgfQorCisgICAgZG91YmxlIGZpdG5lc3NEaXN0YW5j
ZShWYWx1ZVR5cGUgcmFuZ2VNaW4sIFZhbHVlVHlwZSByYW5nZU1heCkgY29uc3QgZmluYWwgewor
ICAgICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLW1haW4vI2Rmbi1h
cHBseWNvbnN0cmFpbnRzCisgICAgICAgIC8vIDEuIElmIHRoZSBjb25zdHJhaW50IGlzIG5vdCBz
dXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIsIHRoZSBmaXRuZXNzIGRpc3RhbmNlIGlzIDAuCiAgICAg
ICAgIGlmIChpc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gMDsKIAotICAgICAgICBpZiAobV9leGFjdCAmJiAobV9leGFjdC52YWx1ZSgpIDwg
cmFuZ2VNaW4gfHwgbV9leGFjdC52YWx1ZSgpID4gcmFuZ2VNYXgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAvLyAyLiBJZiB0aGUgY29uc3RyYWludCBpcyByZXF1aXJlZCAo
J21pbicsICdtYXgnLCBvciAnZXhhY3QnKSwgYW5kIHRoZSBzZXR0aW5ncworICAgICAgICAvLyAg
ICBkaWN0aW9uYXJ5J3MgdmFsdWUgZm9yIHRoZSBjb25zdHJhaW50IGRvZXMgbm90IHNhdGlzZnkg
dGhlIGNvbnN0cmFpbnQsIHRoZQorICAgICAgICAvLyAgICBmaXRuZXNzIGRpc3RhbmNlIGlzIHBv
c2l0aXZlIGluZmluaXR5LgorICAgICAgICBib29sIHZhbGlkID0gdmFsaWRGb3JSYW5nZShyYW5n
ZU1pbiwgcmFuZ2VNYXgpOworICAgICAgICBpZiAobV9leGFjdCAmJiAhdmFsaWQpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwogCi0g
ICAgICAgIGlmIChtX21pbiAmJiBtX21pbi52YWx1ZSgpID4gcmFuZ2VNYXgpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX21pbiAmJiAhdmFsaWQpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworCisgICAg
ICAgIGlmIChtX21heCAmJiAhdmFsaWQpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwogCi0gICAgICAgIGlmIChtX21heCAmJiBtX21h
eC52YWx1ZSgpIDwgcmFuZ2VNaW4pCisgICAgICAgIC8vIDMuIElmIG5vIGlkZWFsIHZhbHVlIGlz
IHNwZWNpZmllZCwgdGhlIGZpdG5lc3MgZGlzdGFuY2UgaXMgMC4KKyAgICAgICAgaWYgKCFtX2lk
ZWFsKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgLy8gNC4gRm9yIGFsbCBwb3Np
dGl2ZSBudW1lcmljIG5vbi1yZXF1aXJlZCBjb25zdHJhaW50cyAoc3VjaCBhcyBoZWlnaHQsIHdp
ZHRoLCBmcmFtZVJhdGUsCisgICAgICAgIC8vICAgIGFzcGVjdFJhdGlvLCBzYW1wbGVSYXRlIGFu
ZCBzYW1wbGVTaXplKSwgdGhlIGZpdG5lc3MgZGlzdGFuY2UgaXMgdGhlIHJlc3VsdCBvZiB0aGUg
Zm9ybXVsYQorICAgICAgICAvLworICAgICAgICAvLyAgICAgICAgIChhY3R1YWwgPT0gaWRlYWwp
ID8gMCA6IHxhY3R1YWwgLSBpZGVhbHwgLyBtYXgofGFjdHVhbHwsfGlkZWFsfCkKKyAgICAgICAg
VmFsdWVUeXBlIGlkZWFsID0gbV9pZGVhbC52YWx1ZSgpOworICAgICAgICBpZiAoaWRlYWwgPj0g
cmFuZ2VNaW4gJiYgaWRlYWwgPD0gcmFuZ2VNYXgpCisgICAgICAgICAgICByZXR1cm4gMDsKKwor
ICAgICAgICBpZGVhbCA9IGlkZWFsID4gc3RkOjptYXgocmFuZ2VNaW4sIHJhbmdlTWF4KSA/IHJh
bmdlTWF4IDogcmFuZ2VNaW47CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHN0
ZDo6YWJzKGlkZWFsIC0gbV9pZGVhbC52YWx1ZSgpKSkgLyBzdGQ6Om1heChzdGQ6OmFicyhpZGVh
bCksIHN0ZDo6YWJzKG1faWRlYWwudmFsdWUoKSkpOworICAgIH0KKworICAgIHZvaWQgbWVyZ2Uo
Y29uc3QgTWVkaWFDb25zdHJhaW50JiBvdGhlcikgZmluYWwgeworICAgICAgICBpZiAob3RoZXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZhbHVlVHlwZSB2YWx1
ZTsKKyAgICAgICAgaWYgKG90aGVyLmdldEV4YWN0KHZhbHVlKSkKKyAgICAgICAgICAgIG1fZXhh
Y3QgPSB2YWx1ZTsKKworICAgICAgICBpZiAob3RoZXIuZ2V0TWluKHZhbHVlKSkKKyAgICAgICAg
ICAgIG1fbWluID0gdmFsdWU7CisKKyAgICAgICAgaWYgKG90aGVyLmdldE1heCh2YWx1ZSkpCisg
ICAgICAgICAgICBtX21heCA9IHZhbHVlOworCisgICAgICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1
Yi5pby9tZWRpYWNhcHR1cmUtbWFpbi8jY29uc3RyYWluYWJsZS1pbnRlcmZhY2UKKyAgICAgICAg
Ly8gV2hlbiBwcm9jZXNzaW5nIGFkdmFuY2VkIGNvbnN0cmFpbnRzOgorICAgICAgICAvLyAgIC4u
LiB0aGUgVXNlciBBZ2VudCBtdXN0IGF0dGVtcHQgdG8gYXBwbHksIGluZGl2aWR1YWxseSwgYW55
ICdpZGVhbCcgY29uc3RyYWludHMgb3IKKyAgICAgICAgLy8gICBhIGNvbnN0cmFpbnQgZ2l2ZW4g
YXMgYSBiYXJlIHZhbHVlIGZvciB0aGUgcHJvcGVydHkuIE9mIHRoZXNlIHByb3BlcnRpZXMsIGl0
IG11c3QKKyAgICAgICAgLy8gICBzYXRpc2Z5IHRoZSBsYXJnZXN0IG51bWJlciB0aGF0IGl0IGNh
biwgaW4gYW55IG9yZGVyLgorICAgICAgICBpZiAob3RoZXIuZ2V0SWRlYWwodmFsdWUpKSB7Cisg
ICAgICAgICAgICBpZiAoIW1faWRlYWwgfHwgdmFsdWUgPiBtX2lkZWFsLnZhbHVlKCkpCisgICAg
ICAgICAgICAgICAgbV9pZGVhbCA9IHZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCB2YWxpZEZvclJhbmdlKFZhbHVlVHlwZSByYW5nZU1pbiwgVmFsdWVUeXBlIHJhbmdlTWF4KSBj
b25zdCBmaW5hbCB7CisgICAgICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICAgICAgaWYgKG1fZXhhY3QpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVl
VHlwZSBleGFjdCA9IG1fZXhhY3QudmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChleGFjdCA8IHJh
bmdlTWluICYmICFuZWFybHlFcXVhbChleGFjdCwgcmFuZ2VNaW4pKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChleGFjdCA+IHJhbmdlTWF4ICYmICFuZWFy
bHlFcXVhbChleGFjdCwgcmFuZ2VNYXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtX21pbikgeworICAgICAgICAgICAgY29uc3QgVmFs
dWVUeXBlIGNvbnN0cmFpbnRNaW4gPSBtX21pbi52YWx1ZSgpOworICAgICAgICAgICAgaWYgKGNv
bnN0cmFpbnRNaW4gPiByYW5nZU1heCAmJiAhbmVhcmx5RXF1YWwoY29uc3RyYWludE1pbiwgcmFu
Z2VNYXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisKKyAg
ICAgICAgaWYgKG1fbWF4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVR5cGUgY29uc3RyYWlu
dE1heCA9IG1fbWF4LnZhbHVlKCk7CisgICAgICAgICAgICBpZiAoY29uc3RyYWludE1heCA8IHJh
bmdlTWluICYmICFuZWFybHlFcXVhbChjb25zdHJhaW50TWF4LCByYW5nZU1pbikpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC0xNzMsNyArMjY1LDYgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICB9CiAK
LXByaXZhdGU6CiAgICAgT3B0aW9uYWw8VmFsdWVUeXBlPiBtX21pbjsKICAgICBPcHRpb25hbDxW
YWx1ZVR5cGU+IG1fbWF4OwogICAgIE9wdGlvbmFsPFZhbHVlVHlwZT4gbV9leGFjdDsKQEAgLTE4
NCw2ICsyNzUsOCBAQCBjbGFzcyBJbnRDb25zdHJhaW50IGZpbmFsIDogcHVibGljIE51bWVyCiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxJbnRDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBuYW1lLCBNZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SW50Q29uc3RyYWludChuYW1lLCB0eXBlKSk7IH0KIAorICAgIFJlZjxNZWRpYUNvbnN0cmFpbnQ+
IGNvcHkoKSBjb25zdCBmaW5hbDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnRDb25zdHJh
aW50KGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQogICAgICAg
ICA6IE51bWVyaWNDb25zdHJhaW50PGludD4obmFtZSwgdHlwZSkKQEAgLTE5NSw2ICsyODgsOCBA
QCBjbGFzcyBEb3VibGVDb25zdHJhaW50IGZpbmFsIDogcHVibGljIE51CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxEb3VibGVDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBN
ZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG91YmxlQ29u
c3RyYWludChuYW1lLCB0eXBlKSk7IH0KIAorICAgIFJlZjxNZWRpYUNvbnN0cmFpbnQ+IGNvcHko
KSBjb25zdCBmaW5hbDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBEb3VibGVDb25zdHJhaW50
KGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQogICAgICAgICA6
IE51bWVyaWNDb25zdHJhaW50PGRvdWJsZT4obmFtZSwgdHlwZSkKQEAgLTIwNiw2ICszMDEsOCBA
QCBjbGFzcyBCb29sZWFuQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBNCiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxCb29sZWFuQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwg
TWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEJvb2xlYW5D
b25zdHJhaW50KG5hbWUsIHR5cGUpKTsgfQogCisgICAgUmVmPE1lZGlhQ29uc3RyYWludD4gY29w
eSgpIGNvbnN0IGZpbmFsOworCiAgICAgdm9pZCBzZXRFeGFjdChib29sIHZhbHVlKSB7IG1fZXhh
Y3QgPSB2YWx1ZTsgfQogICAgIHZvaWQgc2V0SWRlYWwoYm9vbCB2YWx1ZSkgeyBtX2lkZWFsID0g
dmFsdWU7IH0KIApAQCAtMjE1LDYgKzMxMiw0MiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gIW1fZXhhY3QgJiYgIW1faWRlYWw7IH07CiAgICAgYm9v
bCBpc01hbmRhdG9yeSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGJvb2wobV9leGFjdCk7IH0KIAor
ICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoYm9vbCB2YWx1ZSkgY29uc3QgZmluYWwgeworICAg
ICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLW1haW4vI2Rmbi1hcHBs
eWNvbnN0cmFpbnRzCisgICAgICAgIC8vIDEuIElmIHRoZSBjb25zdHJhaW50IGlzIG5vdCBzdXBw
b3J0ZWQgYnkgdGhlIGJyb3dzZXIsIHRoZSBmaXRuZXNzIGRpc3RhbmNlIGlzIDAuCisgICAgICAg
IGlmIChpc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAvLyAyLiBJ
ZiB0aGUgY29uc3RyYWludCBpcyByZXF1aXJlZCAoJ21pbicsICdtYXgnLCBvciAnZXhhY3QnKSwg
YW5kIHRoZSBzZXR0aW5ncworICAgICAgICAvLyAgICBkaWN0aW9uYXJ5J3MgdmFsdWUgZm9yIHRo
ZSBjb25zdHJhaW50IGRvZXMgbm90IHNhdGlzZnkgdGhlIGNvbnN0cmFpbnQsIHRoZQorICAgICAg
ICAvLyAgICBmaXRuZXNzIGRpc3RhbmNlIGlzIHBvc2l0aXZlIGluZmluaXR5LgorICAgICAgICBp
ZiAobV9leGFjdCAmJiB2YWx1ZSAhPSBtX2V4YWN0LnZhbHVlKCkpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworCisgICAgICAgIC8v
IDMuIElmIG5vIGlkZWFsIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGZpdG5lc3MgZGlzdGFuY2Ug
aXMgMC4KKyAgICAgICAgaWYgKCFtX2lkZWFsIHx8IG1faWRlYWwudmFsdWUoKSA9PSB2YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIC8vIDUuIEZvciBhbGwgc3RyaW5nIGFu
ZCBlbnVtIG5vbi1yZXF1aXJlZCBjb25zdHJhaW50cyAoZGV2aWNlSWQsIGdyb3VwSWQsIGZhY2lu
Z01vZGUsCisgICAgICAgIC8vIGVjaG9DYW5jZWxsYXRpb24pLCB0aGUgZml0bmVzcyBkaXN0YW5j
ZSBpcyB0aGUgcmVzdWx0IG9mIHRoZSBmb3JtdWxhCisgICAgICAgIC8vICAgICAgICAoYWN0dWFs
ID09IGlkZWFsKSA/IDAgOiAxCisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHZvaWQg
bWVyZ2UoY29uc3QgTWVkaWFDb25zdHJhaW50JiBvdGhlcikgZmluYWwgeworICAgICAgICBpZiAo
b3RoZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJvb2wgdmFs
dWU7CisgICAgICAgIGlmIChvdGhlci5nZXRFeGFjdCh2YWx1ZSkpCisgICAgICAgICAgICBtX2V4
YWN0ID0gdmFsdWU7CisKKyAgICAgICAgaWYgKG90aGVyLmdldElkZWFsKHZhbHVlKSkgeworICAg
ICAgICAgICAgaWYgKCFtX2lkZWFsIHx8ICh2YWx1ZSAmJiAhbV9pZGVhbC52YWx1ZSgpKSkKKyAg
ICAgICAgICAgICAgICBtX2lkZWFsID0gdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZh
dGU6CiAgICAgZXhwbGljaXQgQm9vbGVhbkNvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBN
ZWRpYUNvbnN0cmFpbnRUeXBlIHR5cGUpCiAgICAgICAgIDogTWVkaWFDb25zdHJhaW50KG5hbWUs
IHR5cGUpCkBAIC0yMjksNiArMzYyLDggQEAgY2xhc3MgU3RyaW5nQ29uc3RyYWludCBmaW5hbCA6
IHB1YmxpYyBNZQogcHVibGljOgogICAgIHN0YXRpYyBSZWY8U3RyaW5nQ29uc3RyYWludD4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IFN0cmluZ0NvbnN0cmFpbnQobmFtZSwgdHlwZSkpOyB9CiAKKyAgICBS
ZWY8TWVkaWFDb25zdHJhaW50PiBjb3B5KCkgY29uc3QgZmluYWw7CisKICAgICB2b2lkIHNldEV4
YWN0KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kRXhhY3QoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBzZXRJZGVhbChjb25zdCBTdHJpbmcmKTsKQEAgLTI0MCw3ICszNzUsMTEgQEAg
cHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fZXhhY3Qu
aXNFbXB0eSgpICYmIG1faWRlYWwuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBpc01hbmRhdG9yeSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICFtX2V4YWN0LmlzRW1wdHkoKTsgfQogCi0gICAgY29uc3Qg
U3RyaW5nJiBmaW5kKHN0ZDo6ZnVuY3Rpb248Ym9vbChDb25zdHJhaW50VHlwZSwgY29uc3QgU3Ry
aW5nJik+KSBjb25zdCBvdmVycmlkZTsKKyAgICBkb3VibGUgZml0bmVzc0Rpc3RhbmNlKGNvbnN0
IFN0cmluZyYpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoY29uc3Qg
VmVjdG9yPFN0cmluZz4mKSBjb25zdCBmaW5hbDsKKworICAgIGNvbnN0IFN0cmluZyYgZmluZChz
dGQ6OmZ1bmN0aW9uPGJvb2woQ29uc3RyYWludFR5cGUsIGNvbnN0IFN0cmluZyYpPikgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBtZXJnZShjb25zdCBNZWRpYUNvbnN0cmFpbnQmKSBmaW5hbDsKIAog
cHJpdmF0ZToKICAgICBleHBsaWNpdCBTdHJpbmdDb25zdHJhaW50KGNvbnN0IFN0cmluZyYgbmFt
ZSwgTWVkaWFDb25zdHJhaW50VHlwZSB0eXBlKQpAQCAtMjY4LDYgKzQwNywyMiBAQCBwcml2YXRl
OgogCiB1c2luZyBNZWRpYVRyYWNrQ29uc3RyYWludFNldE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8TWVkaWFDb25zdHJhaW50Pj47CiAKK2NsYXNzIEZsYXR0ZW5lZENvbnN0cmFpbnQgewor
cHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxNZWRpYUNvbnN0cmFpbnQ+Pjo6Y29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICB2b2lkIHNldChjb25zdCBNZWRpYUNv
bnN0cmFpbnQmKTsKKyAgICB2b2lkIG1lcmdlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYpOworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RyYWludHMuaXNFbXB0eSgpOyB9
CisKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RyYWlu
dHMuYmVnaW4oKTsgfQorICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RyYWludHMuZW5kKCk7IH0KKworcHJpdmF0ZToKKworICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFDb25zdHJhaW50Pj4gbV9jb25zdHJhaW50czsKK307CisKIGNsYXNzIE1lZGlhQ29uc3RyYWlu
dHMgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYUNvbnN0cmFpbnRzPiB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+TWVkaWFDb25zdHJhaW50cygpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5j
cHAJKHJldmlzaW9uIDIwNTM0OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL1JlYWx0aW1lTWVkaWFTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsMTQ0ICsx
NTAsMTA5IEBAIHZvaWQgUmVhbHRpbWVNZWRpYVNvdXJjZTo6cmVxdWVzdFN0b3AoT2IKICAgICBz
dG9wKGNhbGxpbmdPYnNlcnZlcik7CiB9CiAKLVJlYWx0aW1lTWVkaWFTb3VyY2U6OkNvbnN0cmFp
bnRTdXBwb3J0IFJlYWx0aW1lTWVkaWFTb3VyY2U6OnN1cHBvcnRzQ29uc3RyYWludChjb25zdCBN
ZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCitkb3VibGUgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
Zml0bmVzc0Rpc3RhbmNlKGNvbnN0IE1lZGlhQ29uc3RyYWludCYgY29uc3RyYWludCkKIHsKICAg
ICBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMgPSAqdGhpcy0+
Y2FwYWJpbGl0aWVzKCk7CiAKICAgICBzd2l0Y2ggKGNvbnN0cmFpbnQudHlwZSgpKSB7CiAgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDogewogICAgICAgICBpZiAoIWNhcGFiaWxp
dGllcy5zdXBwb3J0c1dpZHRoKCkpCi0gICAgICAgICAgICByZXR1cm4gQ29uc3RyYWludFN1cHBv
cnQ6Oklnbm9yZWQ7CisgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBhdXRvIHdpZHRo
UmFuZ2UgPSBjYXBhYmlsaXRpZXMud2lkdGgoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQu
dmFsaWRGb3JSYW5nZSh3aWR0aFJhbmdlLnJhbmdlTWluKCkuYXNJbnQsIHdpZHRoUmFuZ2UucmFu
Z2VNYXgoKS5hc0ludCkgPyBDb25zdHJhaW50U3VwcG9ydDo6U3VwcG9ydGVkIDogQ29uc3RyYWlu
dFN1cHBvcnQ6OlVuc3VwcG9ydGVkOworICAgICAgICBhdXRvIHJhbmdlID0gY2FwYWJpbGl0aWVz
LndpZHRoKCk7CisgICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShyYW5n
ZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50KTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpIZWlnaHQ6IHsKICAg
ICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNIZWlnaHQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBDb25zdHJhaW50U3VwcG9ydDo6SWdub3JlZDsKKyAgICAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgICAgIGF1dG8gaGVpZ2h0UmFuZ2UgPSBjYXBhYmlsaXRpZXMuaGVpZ2h0KCk7Ci0gICAg
ICAgIHJldHVybiBjb25zdHJhaW50LnZhbGlkRm9yUmFuZ2UoaGVpZ2h0UmFuZ2UucmFuZ2VNaW4o
KS5hc0ludCwgaGVpZ2h0UmFuZ2UucmFuZ2VNYXgoKS5hc0ludCkgPyBDb25zdHJhaW50U3VwcG9y
dDo6U3VwcG9ydGVkIDogQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVkOworICAgICAgICBh
dXRvIHJhbmdlID0gY2FwYWJpbGl0aWVzLmhlaWdodCgpOworICAgICAgICByZXR1cm4gY29uc3Ry
YWludC5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0ludCwgcmFuZ2UucmFuZ2VN
YXgoKS5hc0ludCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTWVkaWFDb25z
dHJhaW50VHlwZTo6RnJhbWVSYXRlOiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBv
cnRzRnJhbWVSYXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gQ29uc3RyYWludFN1cHBvcnQ6Okln
bm9yZWQ7CisgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBhdXRvIHJhdGVSYW5nZSA9
IGNhcGFiaWxpdGllcy5mcmFtZVJhdGUoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQudmFs
aWRGb3JSYW5nZShyYXRlUmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmF0ZVJhbmdlLnJhbmdl
TWF4KCkuYXNEb3VibGUpID8gQ29uc3RyYWludFN1cHBvcnQ6OlN1cHBvcnRlZCA6IENvbnN0cmFp
bnRTdXBwb3J0OjpVbnN1cHBvcnRlZDsKKyAgICAgICAgYXV0byByYW5nZSA9IGNhcGFiaWxpdGll
cy5mcmFtZVJhdGUoKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rpc3RhbmNl
KHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkFz
cGVjdFJhdGlvOiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzQXNwZWN0UmF0
aW8oKSkKLSAgICAgICAgICAgIHJldHVybiBDb25zdHJhaW50U3VwcG9ydDo6SWdub3JlZDsKKyAg
ICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMu
YXNwZWN0UmF0aW8oKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQudmFsaWRGb3JSYW5nZShy
YW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKSA/IENv
bnN0cmFpbnRTdXBwb3J0OjpTdXBwb3J0ZWQgOiBDb25zdHJhaW50U3VwcG9ydDo6VW5zdXBwb3J0
ZWQ7CisgICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShyYW5nZS5yYW5n
ZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpWb2x1bWU6IHsKICAg
ICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNWb2x1bWUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBDb25zdHJhaW50U3VwcG9ydDo6SWdub3JlZDsKKyAgICAgICAgICAgIHJldHVybiAwOwog
CiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMudm9sdW1lKCk7Ci0gICAgICAgIHJl
dHVybiBjb25zdHJhaW50LnZhbGlkRm9yUmFuZ2UocmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwg
cmFuZ2UucmFuZ2VNYXgoKS5hc0RvdWJsZSkgPyBDb25zdHJhaW50U3VwcG9ydDo6U3VwcG9ydGVk
IDogQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVkOworICAgICAgICByZXR1cm4gY29uc3Ry
YWludC5maXRuZXNzRGlzdGFuY2UocmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFu
Z2VNYXgoKS5hc0RvdWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTWVk
aWFDb25zdHJhaW50VHlwZTo6U2FtcGxlUmF0ZTogewogICAgICAgICBpZiAoIWNhcGFiaWxpdGll
cy5zdXBwb3J0c1NhbXBsZVJhdGUoKSkKLSAgICAgICAgICAgIHJldHVybiBDb25zdHJhaW50U3Vw
cG9ydDo6SWdub3JlZDsKKyAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGF1dG8gcmFu
Z2UgPSBjYXBhYmlsaXRpZXMuc2FtcGxlUmF0ZSgpOwotICAgICAgICByZXR1cm4gY29uc3RyYWlu
dC52YWxpZEZvclJhbmdlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4
KCkuYXNEb3VibGUpID8gQ29uc3RyYWludFN1cHBvcnQ6OlN1cHBvcnRlZCA6IENvbnN0cmFpbnRT
dXBwb3J0OjpVbnN1cHBvcnRlZDsKKyAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQuZml0bmVzc0Rp
c3RhbmNlKHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3Vi
bGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OlNhbXBsZVNpemU6IHsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNTYW1w
bGVTaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gQ29uc3RyYWludFN1cHBvcnQ6Oklnbm9yZWQ7
CisgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBhdXRvIHJhbmdlID0gY2FwYWJpbGl0
aWVzLnNhbXBsZVNpemUoKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnQudmFsaWRGb3JSYW5n
ZShyYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKSA/
IENvbnN0cmFpbnRTdXBwb3J0OjpTdXBwb3J0ZWQgOiBDb25zdHJhaW50U3VwcG9ydDo6VW5zdXBw
b3J0ZWQ7CisgICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShyYW5nZS5y
YW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2Rl
OiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRmFjaW5nTW9kZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRTdXBwb3J0OjpJZ25vcmVkOworICAgICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICAgICAgQ29uc3RyYWludFN1cHBvcnQgc3VwcG9ydCA9IENvbnN0cmFp
bnRTdXBwb3J0OjpJZ25vcmVkOwotICAgICAgICBhdXRvJiBzdXBwb3J0ZWRNb2RlcyA9IGNhcGFi
aWxpdGllcy5mYWNpbmdNb2RlKCk7Ci0gICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChNZWRpYUNv
bnN0cmFpbnQ6OkNvbnN0cmFpbnRUeXBlLCBjb25zdCBTdHJpbmcmKT4gZmlsdGVyID0gW3N1cHBv
cnRlZE1vZGVzLCAmc3VwcG9ydF0oTWVkaWFDb25zdHJhaW50OjpDb25zdHJhaW50VHlwZSB0eXBl
LCBjb25zdCBTdHJpbmcmIG1vZGVTdHJpbmcpIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IE1l
ZGlhQ29uc3RyYWludDo6Q29uc3RyYWludFR5cGU6OkV4YWN0Q29uc3RyYWludCkKLSAgICAgICAg
ICAgICAgICBzdXBwb3J0ID0gQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVkOwotCi0gICAg
ICAgICAgICBhdXRvIG1vZGUgPSBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OnZpZGVvRmFj
aW5nTW9kZUVudW0obW9kZVN0cmluZyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHN1cHBvcnRl
ZE1vZGUgOiBzdXBwb3J0ZWRNb2RlcykgewotICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRN
b2RlID09IG1vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCA9IENvbnN0cmFpbnRT
dXBwb3J0OjpTdXBwb3J0ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gTWVk
aWFDb25zdHJhaW50OjpDb25zdHJhaW50VHlwZTo6RXhhY3RDb25zdHJhaW50ID8gdHJ1ZSA6IGZh
bHNlOwotICAgICAgICB9OwotCi0gICAgICAgIGNvbnN0cmFpbnQuZmluZChmaWx0ZXIpOwotICAg
ICAgICByZXR1cm4gc3VwcG9ydDsKKyAgICAgICAgYXV0byYgbW9kZXMgPSBjYXBhYmlsaXRpZXMu
ZmFjaW5nTW9kZSgpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdXBwb3J0ZWRNb2RlczsKKyAg
ICAgICAgc3VwcG9ydGVkTW9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtb2Rlcy5zaXplKCkp
OworICAgICAgICBmb3IgKGF1dG8mIG1vZGUgOiBtb2RlcykKKyAgICAgICAgICAgIHN1cHBvcnRl
ZE1vZGVzLmFwcGVuZChSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OmZhY2luZ01vZGUobW9k
ZSkpOworICAgICAgICByZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2Uoc3VwcG9ydGVk
TW9kZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkVjaG9DYW5jZWxsYXRpb246CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpF
Y2hvQ2FuY2VsbGF0aW9uOiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRWNo
b0NhbmNlbGxhdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRTdXBwb3J0OjpJ
Z25vcmVkOworICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgaWYgKGNhcGFiaWxpdGll
cy5lY2hvQ2FuY2VsbGF0aW9uKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6
RWNob0NhbmNlbGxhdGlvbjo6UmVhZE9ubHkpCi0gICAgICAgICAgICByZXR1cm4gY29uc3RyYWlu
dC5pc01hbmRhdG9yeSgpID8gQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVkIDogQ29uc3Ry
YWludFN1cHBvcnQ6Oklnbm9yZWQ7Ci0KLSAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRTdXBwb3J0
OjpTdXBwb3J0ZWQ7CisgICAgICAgIGJvb2wgZWNob0NhbmNlbGxhdGlvblJlYWRXcml0ZSA9IGNh
cGFiaWxpdGllcy5lY2hvQ2FuY2VsbGF0aW9uKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllczo6RWNob0NhbmNlbGxhdGlvbjo6UmVhZFdyaXRlOworICAgICAgICByZXR1cm4gY29u
c3RyYWludC5maXRuZXNzRGlzdGFuY2UoZWNob0NhbmNlbGxhdGlvblJlYWRXcml0ZSk7CiAgICAg
ICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RGV2aWNl
SWQ6IHsKICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuc3VwcG9ydHNEZXZpY2VJZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIENvbnN0cmFpbnRTdXBwb3J0OjpJZ25vcmVkOwotCi0gICAgICAgIENv
bnN0cmFpbnRTdXBwb3J0IHN1cHBvcnQgPSBDb25zdHJhaW50U3VwcG9ydDo6SWdub3JlZDsKLSAg
ICAgICAgc3RkOjpmdW5jdGlvbjxib29sKE1lZGlhQ29uc3RyYWludDo6Q29uc3RyYWludFR5cGUs
IGNvbnN0IFN0cmluZyYpPiBmaWx0ZXIgPSBbdGhpcywgJnN1cHBvcnRdKE1lZGlhQ29uc3RyYWlu
dDo6Q29uc3RyYWludFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBpZFN0cmluZykgewotICAgICAg
ICAgICAgaWYgKHR5cGUgIT0gTWVkaWFDb25zdHJhaW50OjpDb25zdHJhaW50VHlwZTo6RXhhY3RD
b25zdHJhaW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gS2VlcCBsb29raW5n
LgorICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHN1cHBvcnQgPSBpZFN0cmlu
ZyA9PSBtX2lkID8gQ29uc3RyYWludFN1cHBvcnQ6OlN1cHBvcnRlZCA6IENvbnN0cmFpbnRTdXBw
b3J0OjpVbnN1cHBvcnRlZDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfTsK
LQotICAgICAgICBjb25zdHJhaW50LmZpbmQoZmlsdGVyKTsKLSAgICAgICAgcmV0dXJuIHN1cHBv
cnQ7CisgICAgICAgIHJldHVybiBjb25zdHJhaW50LmZpdG5lc3NEaXN0YW5jZShtX2lkKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91
cElkOiB7CiAgICAgICAgIGlmICghY2FwYWJpbGl0aWVzLnN1cHBvcnRzRGV2aWNlSWQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBDb25zdHJhaW50U3VwcG9ydDo6SWdub3JlZDsKLQotICAgICAgICBD
b25zdHJhaW50U3VwcG9ydCBzdXBwb3J0ID0gQ29uc3RyYWludFN1cHBvcnQ6Oklnbm9yZWQ7Ci0g
ICAgICAgIFN0cmluZyBncm91cElkID0gc2V0dGluZ3MoKS5ncm91cElkKCk7Ci0gICAgICAgIHN0
ZDo6ZnVuY3Rpb248Ym9vbChNZWRpYUNvbnN0cmFpbnQ6OkNvbnN0cmFpbnRUeXBlLCBjb25zdCBT
dHJpbmcmKT4gZmlsdGVyID0gW2dyb3VwSWQsICZzdXBwb3J0XShNZWRpYUNvbnN0cmFpbnQ6OkNv
bnN0cmFpbnRUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgaWRTdHJpbmcpIHsKLSAgICAgICAgICAg
IGlmICh0eXBlICE9IE1lZGlhQ29uc3RyYWludDo6Q29uc3RyYWludFR5cGU6OkV4YWN0Q29uc3Ry
YWludCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEtlZXAgbG9va2luZy4KLQot
ICAgICAgICAgICAgc3VwcG9ydCA9IGlkU3RyaW5nID09IGdyb3VwSWQgPyBDb25zdHJhaW50U3Vw
cG9ydDo6U3VwcG9ydGVkIDogQ29uc3RyYWludFN1cHBvcnQ6OlVuc3VwcG9ydGVkOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9OworICAgICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICAgICAgY29uc3RyYWludC5maW5kKGZpbHRlcik7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0
OworICAgICAgICByZXR1cm4gY29uc3RyYWludC5maXRuZXNzRGlzdGFuY2Uoc2V0dGluZ3MoKS5n
cm91cElkKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI5NiwzOCArMjYxLDQ5IEBA
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OkNvbnN0cmFpbnRTdXBwb3J0IFIKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgcmV0dXJuIENvbnN0cmFpbnRTdXBwb3J0OjpJZ25vcmVkOworICAgIHJl
dHVybiAwOwogfQogCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotVCB2YWx1ZShjb25zdCBNZWRp
YUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQsIFQgcmFuZ2VNaW4sIFQgcmFuZ2VNYXgpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVmFsdWVUeXBlPgorc3RhdGljIHZvaWQgYXBwbHlOdW1lcmljQ29uc3RyYWlu
dChjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQsIFZhbHVlVHlwZSBjdXJyZW50LCBW
YWx1ZVR5cGUgY2FwYWJpbGl0eU1pbiwgVmFsdWVUeXBlIGNhcGFiaWxpdHlNYXgsIFJlYWx0aW1l
TWVkaWFTb3VyY2UqIHNvdXJjZSwgdm9pZCAoUmVhbHRpbWVNZWRpYVNvdXJjZTo6KmZ1bmN0aW9u
KShWYWx1ZVR5cGUpKQogewotICAgIFQgcmVzdWx0OworICAgIFZhbHVlVHlwZSB2YWx1ZTsKKyAg
ICBWYWx1ZVR5cGUgbWluID0gY2FwYWJpbGl0eU1pbjsKKyAgICBWYWx1ZVR5cGUgbWF4ID0gY2Fw
YWJpbGl0eU1heDsKIAotICAgIGlmIChjb25zdHJhaW50LmdldEV4YWN0KHJlc3VsdCkpIHsKLSAg
ICAgICAgQVNTRVJUKHJlc3VsdCA+PSByYW5nZU1pbiAmJiByZXN1bHQgPD0gcmFuZ2VNYXgpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChjb25zdHJhaW50LmdldEV4YWN0KHZhbHVl
KSkgeworICAgICAgICBBU1NFUlQoY29uc3RyYWludC52YWxpZEZvclJhbmdlKGNhcGFiaWxpdHlN
aW4sIGNhcGFiaWxpdHlNYXgpKTsKKyAgICAgICAgKHNvdXJjZS0+KmZ1bmN0aW9uKSh2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoY29uc3RyYWludC5nZXRJZGVhbChy
ZXN1bHQpKSB7Ci0gICAgICAgIGlmIChyZXN1bHQgPCByYW5nZU1pbikKLSAgICAgICAgICAgIHJl
c3VsdCA9IHJhbmdlTWluOwotICAgICAgICBlbHNlIGlmIChyZXN1bHQgPiByYW5nZU1heCkKLSAg
ICAgICAgICAgIHJlc3VsdCA9IHJhbmdlTWF4OworICAgIGlmIChjb25zdHJhaW50LmdldE1pbih2
YWx1ZSkpIHsKKyAgICAgICAgQVNTRVJUKGNvbnN0cmFpbnQudmFsaWRGb3JSYW5nZSh2YWx1ZSwg
Y2FwYWJpbGl0eU1heCkpOworICAgICAgICBpZiAodmFsdWUgPiBtaW4pCisgICAgICAgICAgICBt
aW4gPSB2YWx1ZTsKIAotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBubyBpZGVhbCwgZG9uJ3QgY2hhbmdlIGlmIG1pbmltdW0gaXMgc21hbGxlciB0aGFuIGN1
cnJlbnQuCisgICAgICAgIFZhbHVlVHlwZSBpZGVhbDsKKyAgICAgICAgaWYgKCFjb25zdHJhaW50
LmdldElkZWFsKGlkZWFsKSAmJiB2YWx1ZSA8IGN1cnJlbnQpCisgICAgICAgICAgICB2YWx1ZSA9
IGN1cnJlbnQ7CiAgICAgfQogCi0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0TWluKHJlc3VsdCkgJiYg
cmVzdWx0ID4gcmFuZ2VNYXgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoY29uc3Ry
YWludC5nZXRNYXgodmFsdWUpKSB7CisgICAgICAgIEFTU0VSVChjb25zdHJhaW50LnZhbGlkRm9y
UmFuZ2UoY2FwYWJpbGl0eU1pbiwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHZhbHVlIDwgbWF4KQor
ICAgICAgICAgICAgbWF4ID0gdmFsdWU7CisgICAgfQogCi0gICAgaWYgKGNvbnN0cmFpbnQuZ2V0
TWF4KHJlc3VsdCkgJiYgcmVzdWx0IDwgcmFuZ2VNaW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQorICAgIGlmIChjb25zdHJhaW50LmdldElkZWFs
KHZhbHVlKSkgeworICAgICAgICBpZiAodmFsdWUgPCBtaW4pCisgICAgICAgICAgICB2YWx1ZSA9
IG1pbjsKKyAgICAgICAgaWYgKHZhbHVlID4gbWF4KQorICAgICAgICAgICAgdmFsdWUgPSBtYXg7
CisgICAgfQogCisgICAgaWYgKHZhbHVlICE9IGN1cnJlbnQpCisgICAgICAgIChzb3VyY2UtPipm
dW5jdGlvbikodmFsdWUpOworfQogCiB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmFwcGx5Q29u
c3RyYWludChjb25zdCBNZWRpYUNvbnN0cmFpbnQmIGNvbnN0cmFpbnQpCiB7CkBAIC0zMzcsOCAr
MzEzLDggQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAg
ICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c1dpZHRoKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgYXV0byB3aWR0aFJhbmdlID0gY2FwYWJpbGl0aWVzLndpZHRoKCk7Ci0gICAg
ICAgIHNldFdpZHRoKHZhbHVlKGNvbnN0cmFpbnQsIHdpZHRoUmFuZ2UucmFuZ2VNaW4oKS5hc0lu
dCwgd2lkdGhSYW5nZS5yYW5nZU1heCgpLmFzSW50KSk7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBj
YXBhYmlsaXRpZXMud2lkdGgoKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChjb25z
dHJhaW50LCBzaXplKCkud2lkdGgoKSwgcmFuZ2UucmFuZ2VNaW4oKS5hc0ludCwgcmFuZ2UucmFu
Z2VNYXgoKS5hc0ludCwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldFdpZHRoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNDYsOCArMzIyLDggQEAgdm9pZCBSZWFsdGltZU1l
ZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBw
b3J0c0hlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGF1dG8gaGVpZ2h0
UmFuZ2UgPSBjYXBhYmlsaXRpZXMuaGVpZ2h0KCk7Ci0gICAgICAgIHNldEhlaWdodCh2YWx1ZShj
b25zdHJhaW50LCBoZWlnaHRSYW5nZS5yYW5nZU1pbigpLmFzSW50LCBoZWlnaHRSYW5nZS5yYW5n
ZU1heCgpLmFzSW50KSk7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuaGVpZ2h0
KCk7CisgICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3RyYWludCwgc2l6ZSgpLmhl
aWdodCgpLCByYW5nZS5yYW5nZU1pbigpLmFzSW50LCByYW5nZS5yYW5nZU1heCgpLmFzSW50LCB0
aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0SGVpZ2h0KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkBAIC0zNTUsOCArMzMxLDggQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBs
eUNvbnN0cmFpbgogICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5zdXBwb3J0c0ZyYW1lUmF0ZSgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGF1dG8gcmF0ZVJhbmdlID0gY2FwYWJp
bGl0aWVzLmZyYW1lUmF0ZSgpOwotICAgICAgICBzZXRGcmFtZVJhdGUodmFsdWUoY29uc3RyYWlu
dCwgcmF0ZVJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhdGVSYW5nZS5yYW5nZU1heCgpLmFz
RG91YmxlKSk7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuZnJhbWVSYXRlKCk7
CisgICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3RyYWludCwgZnJhbWVSYXRlKCks
IHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUsIHRo
aXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRGcmFtZVJhdGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKQEAgLTM2NSw3ICszNDEsNyBAQCB2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmFw
cGx5Q29uc3RyYWluCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byByYW5nZSA9
IGNhcGFiaWxpdGllcy5hc3BlY3RSYXRpbygpOwotICAgICAgICBzZXRBc3BlY3RSYXRpbyh2YWx1
ZShjb25zdHJhaW50LCByYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgp
LmFzRG91YmxlKSk7CisgICAgICAgIGFwcGx5TnVtZXJpY0NvbnN0cmFpbnQoY29uc3RyYWludCwg
YXNwZWN0UmF0aW8oKSwgcmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgo
KS5hc0RvdWJsZSwgdGhpcywgJlJlYWx0aW1lTWVkaWFTb3VyY2U6OnNldEFzcGVjdFJhdGlvKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNzQsOCArMzUwLDcgQEAgdm9pZCBSZWFsdGlt
ZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMudm9sdW1lKCk7Ci0gICAgICAgIC8vIHN0ZDo6
cGFpcjxULCBUPiB2YWx1ZXNGb3JSYW5nZShjb25zdHJhaW50LCByYW5nZS5yYW5nZU1pbigpLmFz
RG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFzRG91YmxlKQotICAgICAgICBzZXRWb2x1bWUodmFs
dWUoY29uc3RyYWludCwgcmFuZ2UucmFuZ2VNaW4oKS5hc0RvdWJsZSwgcmFuZ2UucmFuZ2VNYXgo
KS5hc0RvdWJsZSkpOworICAgICAgICBhcHBseU51bWVyaWNDb25zdHJhaW50KGNvbnN0cmFpbnQs
IHZvbHVtZSgpLCByYW5nZS5yYW5nZU1pbigpLmFzRG91YmxlLCByYW5nZS5yYW5nZU1heCgpLmFz
RG91YmxlLCB0aGlzLCAmUmVhbHRpbWVNZWRpYVNvdXJjZTo6c2V0Vm9sdW1lKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0zODQsNyArMzU5LDcgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291
cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8g
cmFuZ2UgPSBjYXBhYmlsaXRpZXMuc2FtcGxlUmF0ZSgpOwotICAgICAgICBzZXRTYW1wbGVSYXRl
KHZhbHVlKGNvbnN0cmFpbnQsIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdl
TWF4KCkuYXNEb3VibGUpKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3RyYWludChjb25zdHJh
aW50LCBzYW1wbGVSYXRlKCksIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUsIHJhbmdlLnJhbmdl
TWF4KCkuYXNEb3VibGUsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpzZXRTYW1wbGVSYXRl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zOTMsNyArMzY4LDcgQEAgdm9pZCBSZWFs
dGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIGF1dG8gcmFuZ2UgPSBjYXBhYmlsaXRpZXMuc2FtcGxlU2l6ZSgpOwotICAgICAgICBz
ZXRTYW1wbGVTaXplKHZhbHVlKGNvbnN0cmFpbnQsIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUs
IHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUpKTsKKyAgICAgICAgYXBwbHlOdW1lcmljQ29uc3Ry
YWludChjb25zdHJhaW50LCBzYW1wbGVTaXplKCksIHJhbmdlLnJhbmdlTWluKCkuYXNEb3VibGUs
IHJhbmdlLnJhbmdlTWF4KCkuYXNEb3VibGUsIHRoaXMsICZSZWFsdGltZU1lZGlhU291cmNlOjpz
ZXRTYW1wbGVTaXplKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MzYsMjEgKzQxMSwx
MDAgQEAgdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbgogICAgIH0KIH0K
IAotdm9pZCBSZWFsdGltZU1lZGlhU291cmNlOjphcHBseUNvbnN0cmFpbnRzKGNvbnN0IE1lZGlh
Q29uc3RyYWludHMmIGNvbnN0cmFpbnRzLCBTdWNjZXNzSGFuZGxlciBzdWNjZXNzSGFuZGxlciwg
RmFpbHVyZUhhbmRsZXIgZmFpbHVyZUhhbmRsZXIpCitib29sIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OnNlbGVjdFNldHRpbmdzKGNvbnN0IE1lZGlhQ29uc3RyYWludHMmIGNvbnN0cmFpbnRzLCBGbGF0
dGVuZWRDb25zdHJhaW50JiBjYW5kaWRhdGVzLCBTdHJpbmcmIGZhaWxlZENvbnN0cmFpbnQpCiB7
Ci0gICAgQVNTRVJUKGNvbnN0cmFpbnRzLmlzVmFsaWQoKSk7Ci0KKyAgICAvLyBodHRwczovL3cz
Yy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLW1haW4vI2Rmbi1zZWxlY3RzZXR0aW5ncworICAgIC8v
CisgICAgLy8gMS4gRWFjaCBjb25zdHJhaW50IHNwZWNpZmllcyBvbmUgb3IgbW9yZSB2YWx1ZXMg
KG9yIGEgcmFuZ2Ugb2YgdmFsdWVzKSBmb3IgaXRzIHByb3BlcnR5LgorICAgIC8vICAgIEEgcHJv
cGVydHkgbWF5IGFwcGVhciBtb3JlIHRoYW4gb25jZSBpbiB0aGUgbGlzdCBvZiAnYWR2YW5jZWQn
IENvbnN0cmFpbnRTZXRzLiBJZiBhbgorICAgIC8vICAgIGVtcHR5IG9iamVjdCBvciBsaXN0IGhh
cyBiZWVuIGdpdmVuIGFzIHRoZSB2YWx1ZSBmb3IgYSBjb25zdHJhaW50LCBpdCBtdXN0IGJlIGlu
dGVycHJldGVkCisgICAgLy8gICAgYXMgaWYgdGhlIGNvbnN0cmFpbnQgd2VyZSBub3Qgc3BlY2lm
aWVkIChpbiBvdGhlciB3b3JkcywgYW4gZW1wdHkgY29uc3RyYWludCA9PSBubyBjb25zdHJhaW50
KS4KKyAgICAvLworICAgIC8vICAgIE5vdGUgdGhhdCB1bmtub3duIHByb3BlcnRpZXMgYXJlIGRp
c2NhcmRlZCBieSBXZWJJREwsIHdoaWNoIG1lYW5zIHRoYXQgdW5rbm93bi91bnN1cHBvcnRlZCBy
ZXF1aXJlZAorICAgIC8vICAgIGNvbnN0cmFpbnRzIHdpbGwgc2lsZW50bHkgZGlzYXBwZWFyLiBU
byBhdm9pZCB0aGlzIGJlaW5nIGEgc3VycHJpc2UsIGFwcGxpY2F0aW9uIGF1dGhvcnMgYXJlCisg
ICAgLy8gICAgZXhwZWN0ZWQgdG8gZmlyc3QgdXNlIHRoZSBnZXRTdXBwb3J0ZWRDb25zdHJhaW50
cygpIG1ldGhvZCBhcyBzaG93biBpbiB0aGUgRXhhbXBsZXMgYmVsb3cuCisKKyAgICAvLyAyLiBM
ZXQgb2JqZWN0IGJlIHRoZSBDb25zdHJhaW5hYmxlUGF0dGVybiBvYmplY3Qgb24gd2hpY2ggdGhp
cyBhbGdvcml0aG0gaXMgYXBwbGllZC4gTGV0IGNvcHkgYmUgYW4KKyAgICAvLyAgICB1bmNvbnN0
cmFpbmVkIGNvcHkgb2Ygb2JqZWN0IChpLmUuLCBjb3B5IHNob3VsZCBiZWhhdmUgYXMgaWYgaXQg
d2VyZSBvYmplY3Qgd2l0aCBhbGwgQ29uc3RyYWludFNldHMKKyAgICAvLyAgICByZW1vdmVkLikK
KworICAgIC8vIDMuIEZvciBldmVyeSBwb3NzaWJsZSBzZXR0aW5ncyBkaWN0aW9uYXJ5IG9mIGNv
cHkgY29tcHV0ZSBpdHMgZml0bmVzcyBkaXN0YW5jZSwgdHJlYXRpbmcgYmFyZSB2YWx1ZXMgb2YK
KyAgICAvLyAgICBwcm9wZXJ0aWVzIGFzIGlkZWFsIHZhbHVlcy4gTGV0IGNhbmRpZGF0ZXMgYmUg
dGhlIHNldCBvZiBzZXR0aW5ncyBkaWN0aW9uYXJpZXMgZm9yIHdoaWNoIHRoZSBmaXRuZXNzCisg
ICAgLy8gICAgZGlzdGFuY2UgaXMgZmluaXRlLgogICAgIGF1dG8mIG1hbmRhdG9yeUNvbnN0cmFp
bnRzID0gY29uc3RyYWludHMubWFuZGF0b3J5Q29uc3RyYWludHMoKTsKICAgICBmb3IgKGF1dG8m
IG5hbWVDb25zdHJhaW50UGFpciA6IG1hbmRhdG9yeUNvbnN0cmFpbnRzKSB7Ci0gICAgICAgIGF1
dG8mIGNvbnN0cmFpbnQgPSAqbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVlOwotICAgICAgICBpZiAo
c3VwcG9ydHNDb25zdHJhaW50KGNvbnN0cmFpbnQpID09IENvbnN0cmFpbnRTdXBwb3J0OjpVbnN1
cHBvcnRlZCkgewotICAgICAgICAgICAgZmFpbHVyZUhhbmRsZXIoY29uc3RyYWludC5uYW1lKCks
ICJDb25zdHJhaW50IG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgY29uc3QgYXV0byYgY29uc3RyYWludCA9IG5hbWVDb25zdHJhaW50UGFpci52YWx1ZTsKKyAg
ICAgICAgaWYgKGZpdG5lc3NEaXN0YW5jZSgqY29uc3RyYWludCkgPT0gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKSB7CisgICAgICAgICAgICBmYWlsZWRDb25zdHJhaW50
ID0gY29uc3RyYWludC0+bmFtZSgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgY2FuZGlkYXRlcy5zZXQoKmNvbnN0cmFpbnQpOworICAgIH0KKworICAg
IC8vIDQuIElmIGNhbmRpZGF0ZXMgaXMgZW1wdHksIHJldHVybiB1bmRlZmluZWQgYXMgdGhlIHJl
c3VsdCBvZiB0aGUgU2VsZWN0U2V0dGluZ3MoKSBhbGdvcml0aG0uCisgICAgaWYgKGNhbmRpZGF0
ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIDUuIEl0ZXJhdGUg
b3ZlciB0aGUgJ2FkdmFuY2VkJyBDb25zdHJhaW50U2V0cyBpbiBuZXdDb25zdHJhaW50cyBpbiB0
aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHNwZWNpZmllZC4KKyAgICAvLyAgICBGb3IgZWFj
aCBDb25zdHJhaW50U2V0OgorCisgICAgLy8gNS4xIGNvbXB1dGUgdGhlIGZpdG5lc3MgZGlzdGFu
Y2UgYmV0d2VlbiBpdCBhbmQgZWFjaCBzZXR0aW5ncyBkaWN0aW9uYXJ5IGluIGNhbmRpZGF0ZXMs
IHRyZWF0aW5nIGJhcmUKKyAgICAvLyAgICAgdmFsdWVzIG9mIHByb3BlcnRpZXMgYXMgZXhhY3Qu
CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxkb3VibGUsIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFw
Pj4gc3VwcG9ydGVkQ29uc3RyYWludHM7CisgICAgZG91YmxlIG1pbmltdW1EaXN0YW5jZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGFkdmFuY2VkQ29uc3RyYWludCA6IGNvbnN0cmFpbnRzLmFkdmFuY2VkQ29uc3RyYWludHMo
KSkgeworICAgICAgICBkb3VibGUgY29uc3RyYWludERpc3RhbmNlID0gMDsKKyAgICAgICAgYm9v
bCBzdXBwb3J0ZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiBuYW1lQ29uc3RyYWludFBh
aXIgOiBhZHZhbmNlZENvbnN0cmFpbnQpIHsKKyAgICAgICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9
IGZpdG5lc3NEaXN0YW5jZSgqbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVlKTsKKyAgICAgICAgICAg
IGNvbnN0cmFpbnREaXN0YW5jZSArPSBkaXN0YW5jZTsKKyAgICAgICAgICAgIGlmIChkaXN0YW5j
ZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCisgICAgICAgICAg
ICAgICAgc3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25zdHJh
aW50RGlzdGFuY2UgPCBtaW5pbXVtRGlzdGFuY2UpCisgICAgICAgICAgICBtaW5pbXVtRGlzdGFu
Y2UgPSBjb25zdHJhaW50RGlzdGFuY2U7CisKKyAgICAgICAgLy8gNS4yIElmIHRoZSBmaXRuZXNz
IGRpc3RhbmNlIGlzIGZpbml0ZSBmb3Igb25lIG9yIG1vcmUgc2V0dGluZ3MgZGljdGlvbmFyaWVz
IGluIGNhbmRpZGF0ZXMsIGtlZXAgdGhvc2UKKyAgICAgICAgLy8gICAgIHNldHRpbmdzIGRpY3Rp
b25hcmllcyBpbiBjYW5kaWRhdGVzLCBkaXNjYXJkaW5nIG90aGVycy4KKyAgICAgICAgLy8gICAg
IElmIHRoZSBmaXRuZXNzIGRpc3RhbmNlIGlzIGluZmluaXRlIGZvciBhbGwgc2V0dGluZ3MgZGlj
dGlvbmFyaWVzIGluIGNhbmRpZGF0ZXMsIGlnbm9yZSB0aGlzIENvbnN0cmFpbnRTZXQuCisgICAg
ICAgIGlmIChzdXBwb3J0ZWQpCisgICAgICAgICAgICBzdXBwb3J0ZWRDb25zdHJhaW50cy5hcHBl
bmQoe2NvbnN0cmFpbnREaXN0YW5jZSwgYWR2YW5jZWRDb25zdHJhaW50fSk7CisgICAgfQorCisg
ICAgLy8gNi4gU2VsZWN0IG9uZSBzZXR0aW5ncyBkaWN0aW9uYXJ5IGZyb20gY2FuZGlkYXRlcywg
YW5kIHJldHVybiBpdCBhcyB0aGUgcmVzdWx0IG9mIHRoZSBTZWxlY3RTZXR0aW5ncygpIGFsZ29y
aXRobS4KKyAgICAvLyAgICBUaGUgVUEgc2hvdWxkIHVzZSB0aGUgb25lIHdpdGggdGhlIHNtYWxs
ZXN0IGZpdG5lc3MgZGlzdGFuY2UsIGFzIGNhbGN1bGF0ZWQgaW4gc3RlcCAzLgorICAgIGlmICht
aW5pbXVtRGlzdGFuY2UgIT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgp
KSB7CisgICAgICAgIHN1cHBvcnRlZENvbnN0cmFpbnRzLnJlbW92ZUFsbE1hdGNoaW5nKCBbJl0g
KHN0ZDo6cGFpcjxkb3VibGUsIE1lZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwPiBwYWlyKSAtPiBi
b29sIHsKKyAgICAgICAgICAgIHJldHVybiBwYWlyLmZpcnN0ID4gbWluaW11bURpc3RhbmNlOwor
ICAgICAgICB9KTsKKworICAgICAgICBpZiAoIXN1cHBvcnRlZENvbnN0cmFpbnRzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgYXV0byYgYWR2YW5jZWRDb25zdHJhaW50ID0gc3VwcG9ydGVkQ29u
c3RyYWludHNbMF0uc2Vjb25kOworICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1lQ29uc3RyYWlu
dFBhaXIgOiBhZHZhbmNlZENvbnN0cmFpbnQpCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5t
ZXJnZSgqbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IGZvciAoYXV0byYgbmFtZUNvbnN0cmFpbnRQYWlyIDogbWFuZGF0b3J5Q29uc3RyYWludHMpCi0g
ICAgICAgIGFwcGx5Q29uc3RyYWludCgqbmFtZUNvbnN0cmFpbnRQYWlyLnZhbHVlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworCit2b2lkIFJlYWx0aW1lTWVkaWFTb3VyY2U6OmFwcGx5Q29uc3Ry
YWludHMoY29uc3QgTWVkaWFDb25zdHJhaW50cyYgY29uc3RyYWludHMsIFN1Y2Nlc3NIYW5kbGVy
IHN1Y2Nlc3NIYW5kbGVyLCBGYWlsdXJlSGFuZGxlciBmYWlsdXJlSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoY29uc3RyYWludHMuaXNWYWxpZCgpKTsKKworICAgIEZsYXR0ZW5lZENvbnN0cmFpbnQg
Y2FuZGlkYXRlczsKKworICAgIFN0cmluZyBmYWlsZWRDb25zdHJhaW50OworICAgIGlmICghc2Vs
ZWN0U2V0dGluZ3MoY29uc3RyYWludHMsIGNhbmRpZGF0ZXMsIGZhaWxlZENvbnN0cmFpbnQpKSB7
CisgICAgICAgIGZhaWx1cmVIYW5kbGVyKGZhaWxlZENvbnN0cmFpbnQsICJDb25zdHJhaW50IG5v
dCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoYXV0byBj
b25zdHJhaW50IDogY2FuZGlkYXRlcykKKyAgICAgICAgYXBwbHlDb25zdHJhaW50KCpjb25zdHJh
aW50KTsKIAogICAgIHN1Y2Nlc3NIYW5kbGVyKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9SZWFsdGltZU1lZGlhU291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vUmVhbHRpbWVNZWRpYVNvdXJjZS5o
CShyZXZpc2lvbiAyMDUzNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9SZWFsdGltZU1lZGlhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAK
ICNpbmNsdWRlICJNZWRpYVNhbXBsZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNp
bmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzLmgiCi0jaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTcxLDEzICsxNzAsMTIgQEAgcHJv
dGVjdGVkOgogcHJpdmF0ZToKICAgICBXZWFrUHRyPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0
ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQog
Ci0gICAgZW51bSBDb25zdHJhaW50U3VwcG9ydCB7IElnbm9yZWQsIFN1cHBvcnRlZCwgVW5zdXBw
b3J0ZWQgfTsKLSAgICBDb25zdHJhaW50U3VwcG9ydCBzdXBwb3J0c0NvbnN0cmFpbnQoY29uc3Qg
TWVkaWFDb25zdHJhaW50Jik7CisgICAgYm9vbCBzdXBwb3J0c0NvbnN0cmFpbnRzKGNvbnN0IE1l
ZGlhVHJhY2tDb25zdHJhaW50U2V0TWFwJik7CisgICAgYm9vbCBzZWxlY3RTZXR0aW5ncyhjb25z
dCBNZWRpYUNvbnN0cmFpbnRzJiwgRmxhdHRlbmVkQ29uc3RyYWludCYsIFN0cmluZyYpOworICAg
IGRvdWJsZSBmaXRuZXNzRGlzdGFuY2UoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7CiAgICAgdm9p
ZCBhcHBseUNvbnN0cmFpbnQoY29uc3QgTWVkaWFDb25zdHJhaW50Jik7CiAKICAgICBXZWFrUHRy
RmFjdG9yeTxSZWFsdGltZU1lZGlhU291cmNlPiBtX3dlYWtQdHJGYWN0b3J5OwotICAgIExvY2sg
bV9sb2NrOwotCiAgICAgU3RyaW5nIG1faWQ7CiAgICAgU3RyaW5nIG1fcGVyc2lzdGVudElEOwog
ICAgIFR5cGUgbV90eXBlOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1MzQ4KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDktMDcg
IEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW01lZGlh
U3RyZWFtXSBhcHBseUNvbnN0cmFpbnRzIHB0LiAyIC0gYWR2YW5jZWQgY29uc3RyYWludHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTcxNQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMjgxOTU0NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVh
biBKYWNrc29uLgorCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50
cy1hZHZhbmNlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJl
YW0vYXBwbHktY29uc3RyYWludHMtYWR2YW5jZWQuaHRtbDogQWRkZWQuCisKIDIwMTYtMDktMDIg
IEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01lZGlh
U3RyZWFtXSBhcHBseUNvbnN0cmFpbnRzIHB0LiAxIC0gbWFuZGF0b3J5IGNvbnN0cmFpbnRzCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2FwcGx5LWNvbnN0cmFpbnRzLWFkdmFu
Y2VkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL2FwcGx5LWNvbnN0cmFpbnRzLWFkdmFuY2VkLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2FwcGx5LWNvbnN0cmFpbnRzLWFkdmFu
Y2VkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACitUZXN0cyBh
cHBseUNvbnN0cmFpbnRzIG9uIGEgdmlkZW8gc3RyZWFtIHRyYWNrLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBzdHJlYW0uZ2V0VmlkZW9UcmFja3MoKS5sZW5ndGggaXMg
MQorUEFTUyBzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5sZW5ndGggaXMgMAorUEFTUyB2aWRlby52
aWRlb1RyYWNrcy5sZW5ndGggaXMgMQorUEFTUyB2aWRlby5hdWRpb1RyYWNrcy5sZW5ndGggaXMg
MAorCisqKiBDb25zdHJhaW50OiB7IndpZHRoIjo2NDAsImhlaWdodCI6NDgwfSAtIHNldHVwIHdp
ZHRoIGFuZCBoZWlnaHQuCitQQVNTIHNldHRpbmdzWyd3aWR0aCddIGlzIDY0MAorUEFTUyBzZXR0
aW5nc1snaGVpZ2h0J10gaXMgNDgwCisKKyoqIENvbnN0cmFpbnQ6IHsid2lkdGgiOnsibWluIjoz
MjB9LCJoZWlnaHQiOnsibWluIjoyNDB9LCJhZHZhbmNlZCI6W3sid2lkdGgiOjE5MjAsImhlaWdo
dCI6MTI4MH1dfSAtIGFkdmFuY2VkIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRvbyBiaWcsIG1pbmlt
dW1zIGFyZSBsZXNzIHRoYW4gY3VycmVudCwgbm90aGluZyBpcyBjaGFuZ2VkLgorUEFTUyBzZXR0
aW5nc1snd2lkdGgnXSBpcyA2NDAKK1BBU1Mgc2V0dGluZ3NbJ2hlaWdodCddIGlzIDQ4MAorCisq
KiBDb25zdHJhaW50OiB7IndpZHRoIjp7Im1pbiI6NjQwfSwiaGVpZ2h0Ijp7Im1pbiI6NDgwfSwi
YWR2YW5jZWQiOlt7IndpZHRoIjoxOTIwLCJoZWlnaHQiOjEyODB9LHsid2lkdGgiOjk2MCwiaGVp
Z2h0Ijo3MjB9XX0gLSBmaXJzdCB3aWR0aCBhbmQgaGVpZ2h0IGluIGFkdmFuY2VkIGFyZSB0b28g
YmlnLCBzZWNvbmQgaXMgdXNlZC4KK1BBU1Mgc2V0dGluZ3NbJ3dpZHRoJ10gaXMgOTYwCitQQVNT
IHNldHRpbmdzWydoZWlnaHQnXSBpcyA3MjAKKworKiogQ29uc3RyYWludDogeyJ3aWR0aCI6MzIw
LCJoZWlnaHQiOjI0MH0gLSByZXNldCB3aWR0aCBhbmQgaGVpZ2h0LgorUEFTUyBzZXR0aW5nc1sn
d2lkdGgnXSBpcyAzMjAKK1BBU1Mgc2V0dGluZ3NbJ2hlaWdodCddIGlzIDI0MAorCisqKiBDb25z
dHJhaW50OiB7IndpZHRoIjp7Im1pbiI6NjQwfSwiaGVpZ2h0Ijp7Im1pbiI6NDgwfSwiYWR2YW5j
ZWQiOlt7IndpZHRoIjoxOTIwLCJoZWlnaHQiOjEyODB9XX0gLSBhZHZhbmNlZCB3aWR0aCBhbmQg
aGVpZ2h0IGFyZSB0b28gYmlnLCBmYWxsIGJhY2sgdG8gcmVxdWlyZWQgbWluaW11bXMuCitQQVNT
IHNldHRpbmdzWyd3aWR0aCddIGlzIDY0MAorUEFTUyBzZXR0aW5nc1snaGVpZ2h0J10gaXMgNDgw
CisKKyoqIENvbnN0cmFpbnQ6IHsid2lkdGgiOjMyMCwiaGVpZ2h0IjoyNDB9IC0gcmVzZXQgd2lk
dGggYW5kIGhlaWdodC4KK1BBU1Mgc2V0dGluZ3NbJ3dpZHRoJ10gaXMgMzIwCitQQVNTIHNldHRp
bmdzWydoZWlnaHQnXSBpcyAyNDAKKworKiogQ29uc3RyYWludDogeyJ3aWR0aCI6eyJtaW4iOjY0
MH0sImhlaWdodCI6eyJtaW4iOjQ4MH0sImFkdmFuY2VkIjpbeyJ3aWR0aCI6MTkyMCwiaGVpZ2h0
IjoxMjgwfSx7ImFzcGVjdFJhdGlvIjoxLjc3Nzc3N31dfSAtIGFkdmFuY2VkIHdpZHRoIGFuZCBo
ZWlnaHQgYXJlIHRvbyBiaWcsIGFzcGVjdFJhdGlvIGlzIHVzZWQuCitQQVNTIHNldHRpbmdzWyd3
aWR0aCddIGlzIDY0MAorUEFTUyBzZXR0aW5nc1snaGVpZ2h0J10gaXMgMzYwCisKKyoqIENvbnN0
cmFpbnQ6IHsiYWR2YW5jZWQiOlt7ImZhY2luZ01vZGUiOiJsZWZ0In0seyJmYWNpbmdNb2RlIjoi
cmlnaHQifSx7ImZhY2luZ01vZGUiOiJlbnZpcm9ubWVudCJ9LHsiZmFjaW5nTW9kZSI6InVzZXIi
fV19IC0gbm8gcmVxdWlyZWQgY29uc3RyYWludHMsIGFkdmFuY2VkIGNvbnN0cmFpbnRzIGFyZSBp
Z25vcmVkLgorUEFTUyBzZXR0aW5nc1snZmFjaW5nTW9kZSddIGlzICJ1c2VyIgorCisqKiBDb25z
dHJhaW50OiB7IndpZHRoIjp7Im1pbiI6NjQwfSwiYWR2YW5jZWQiOlt7ImZhY2luZ01vZGUiOiJs
ZWZ0In0seyJmYWNpbmdNb2RlIjoicmlnaHQifSx7ImZhY2luZ01vZGUiOiJlbnZpcm9ubWVudCJ9
LHsiZmFjaW5nTW9kZSI6InVzZXIifV19IC0gZmlyc3QgdHdvIGFkdmFuY2VkIGZhY2luZ01vZGVz
IGFyZSBub3Qgc3VwcG9ydGVkLCB0aGlyZCBpcyB1c2VkLgorUEFTUyBzZXR0aW5nc1snZmFjaW5n
TW9kZSddIGlzICJlbnZpcm9ubWVudCIKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0v
YXBwbHktY29uc3RyYWludHMtYWR2YW5jZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L21lZGlhc3RyZWFtL2FwcGx5LWNvbnN0cmFpbnRzLWFkdmFuY2VkLmh0bWwJKG5vbmV4
aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9hcHBseS1jb25zdHJhaW50
cy1hZHZhbmNlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9
InJlc291cmNlcy9hcHBseS1jb25zdHJhaW50cy11dGlscy5qcyI+PC9zY3JpcHQ+CisgICAgICAg
IDxzY3JpcHQ+CisKKyAgICAgICAgICAgIGxldCB0ZXN0cyA9IFsKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJzZXR1cCB3aWR0aCBhbmQgaGVpZ2h0LiIs
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IHsgd2lkdGg6IDY0MCwgaGVpZ2h0OiA0
ODAgfSwgCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB7IHdpZHRoOiA2NDAsIGhlaWdo
dDogNDgwIH0sIAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlOiAiYWR2YW5jZWQgd2lkdGggYW5kIGhlaWdodCBhcmUgdG9v
IGJpZywgbWluaW11bXMgYXJlIGxlc3MgdGhhbiBjdXJyZW50LCBub3RoaW5nIGlzIGNoYW5nZWQu
IiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludDogeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGg6IHsgbWluOiAzMjAgfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlaWdodDogeyBtaW46IDI0MCB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWQ6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7IHdpZHRoOiAxOTIwLCBoZWlnaHQ6IDEyODAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHsgd2lkdGg6IDY0MCwgaGVp
Z2h0OiA0ODAgfSwgCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJmaXJzdCB3aWR0aCBhbmQgaGVpZ2h0IGluIGFkdmFu
Y2VkIGFyZSB0b28gYmlnLCBzZWNvbmQgaXMgdXNlZC4iLAorICAgICAgICAgICAgICAgICAgICBj
b25zdHJhaW50OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDog
eyBtaW46IDY0MCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
OiB7IG1pbjogNDgwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlZDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6
IDE5MjAsIGhlaWdodDogMTI4MCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgd2lkdGg6IDk2MCwgaGVpZ2h0OiA3MjAgfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB7IHdpZHRoOiA5NjAsIGhlaWdodDogNzIwIH0s
IAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlOiAicmVzZXQgd2lkdGggYW5kIGhlaWdodC4iLAorICAgICAgICAgICAgICAg
ICAgICBjb25zdHJhaW50OiB7IHdpZHRoOiAzMjAsIGhlaWdodDogMjQwIH0sIAorICAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZDogeyB3aWR0aDogMzIwLCBoZWlnaHQ6IDI0MCB9LCAKKyAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZTogImFkdmFuY2VkIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHRvbyBiaWcsIGZhbGwgYmFjayB0
byByZXF1aXJlZCBtaW5pbXVtcy4iLAorICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50OiB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogeyBtaW46IDY0MCB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB7ICBtaW46IDQ4
MCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWQ6IFsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiAxOTIwLCBoZWln
aHQ6IDEyODAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0
ZWQ6IHsgd2lkdGg6IDY0MCwgaGVpZ2h0OiA0ODAgfSwgCisgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICJyZXNldCB3aWR0
aCBhbmQgaGVpZ2h0LiIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IHsgd2lkdGg6
IDMyMCwgaGVpZ2h0OiAyNDAgfSwgCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB7IHdp
ZHRoOiAzMjAsIGhlaWdodDogMjQwIH0sIAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAiYWR2YW5jZWQgd2lkdGggYW5k
IGhlaWdodCBhcmUgdG9vIGJpZywgYXNwZWN0UmF0aW8gaXMgdXNlZC4iLAorICAgICAgICAgICAg
ICAgICAgICBjb25zdHJhaW50OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aDogeyBtaW46IDY0MCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0OiB7IG1pbjogNDgwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhZHZhbmNlZDogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgd2lkdGg6IDE5MjAsIGhlaWdodDogMTI4MCB9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgYXNwZWN0UmF0aW86IDEuNzc3Nzc3IH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHsgd2lkdGg6IDY0MCwgaGVpZ2h0OiAz
NjAgfSwgCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2U6ICJubyByZXF1aXJlZCBjb25zdHJhaW50cywgYWR2YW5jZWQgY29u
c3RyYWludHMgYXJlIGlnbm9yZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludDog
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWQ6IFsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZhY2luZ01vZGU6ICJsZWZ0IiB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmFjaW5nTW9kZTog
InJpZ2h0IiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmFj
aW5nTW9kZTogImVudmlyb25tZW50IiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgZmFjaW5nTW9kZTogInVzZXIiIH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB7IGZhY2luZ01vZGU6ICJ1c2VyIiB9LCAKKyAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZTogImZpcnN0IHR3byBhZHZhbmNlZCBmYWNpbmdNb2RlcyBhcmUgbm90IHN1cHBvcnRlZCwg
dGhpcmQgaXMgdXNlZC4iLAorICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50OiB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogeyBtaW46IDY0MCB9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWQ6IFsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGZhY2luZ01vZGU6ICJsZWZ0IiB9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmFjaW5nTW9kZTogInJpZ2h0
IiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZmFjaW5nTW9k
ZTogImVudmlyb25tZW50IiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsgZmFjaW5nTW9kZTogInVzZXIiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgIGV4cGVjdGVkOiB7IGZhY2luZ01vZGU6ICJlbnZpcm9ubWVudCIgfSwgCisgICAg
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF07CisKKyAgICAgICAgICAgIGxldCB0ZXN0ZXIg
PSBuZXcgQ29uc3RyYWludHNUZXN0KHsgdmlkZW86IHRydWUgfSwgdGVzdHMsICJUZXN0cyBhcHBs
eUNvbnN0cmFpbnRzIG9uIGEgdmlkZW8gc3RyZWFtIHRyYWNrLiIpCisgICAgICAgICAgICAgICAg
Lm9uU3RyZWFtUmVhZHkoKHMpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gczsK
KyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoJ3N0cmVhbS5nZXRWaWRlb1RyYWNrcygpLmxl
bmd0aCcsICcxJyk7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCdzdHJlYW0uZ2V0QXVk
aW9UcmFja3MoKS5sZW5ndGgnLCAnMCcpOworICAgICAgICAgICAgICAgICAgICB0ZXN0ZXIuc2V0
U3RyZWFtVHJhY2soc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF0pOworICAgICAgICAgICAgICAg
IH0pCisgICAgICAgICAgICAgICAgLm9uVmlkZW9SZWFkeSgodikgPT4geworICAgICAgICAgICAg
ICAgICAgICB2aWRlbyA9IHY7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCd2aWRlby52
aWRlb1RyYWNrcy5sZW5ndGgnLCAnMScpOworICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgn
dmlkZW8uYXVkaW9UcmFja3MubGVuZ3RoJywgJzAnKTsKKyAgICAgICAgICAgICAgICB9KQorICAg
ICAgICAgICAgICAgIC5zdGFydCgpOworCisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICA8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgICAg
PC9oZWFkPgorICAgIDxib2R5PgorICAgICAgICA8dmlkZW8gY29udHJvbHMgaWQ9InZpZGVvIjwv
dmlkZW8+CisgICAgICAgIDxicj4KKyAgICAgICAgPGRpdiBpZD0iZGl2Ij48L2Rpdj4KKworICAg
IDwvYm9keT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>