<?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>152663</bug_id>
          
          <creation_ts>2016-01-03 08:39:35 -0800</creation_ts>
          <short_desc>AX: incorrect accessible name from multiple label elements</short_desc>
          <delta_ts>2023-07-19 07:12:59 -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>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zoë Bijl">webkit</reporter>
          <assigned_to name="Tyler Wilcock">tyler_w</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>giacomo.petri</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>samuel_white</cc>
    
    <cc>thibaudcolas</cc>
    
    <cc>tyler_w</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1152106</commentid>
    <comment_count>0</comment_count>
      <attachid>268138</attachid>
    <who name="Zoë Bijl">webkit</who>
    <bug_when>2016-01-03 08:39:35 -0800</bug_when>
    <thetext>Created attachment 268138
Error message mechanism with multiple labels

When multiple &lt;label&gt; elements are associated with a label-able element, the accessible name should be the product of the text content of each of the labels concatenated by DOM source order and space separated.

Expected result:
All associated label elements are used, in DOM order, for name calculation.

Actual result:
Only the first associated label element that is encountered in the DOM is used for name calculation.

Code example courtesy of Steve Faulkner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1152107</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-01-03 08:39:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/24033482&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770108</commentid>
    <comment_count>2</comment_count>
    <who name="Thibaud Colas">thibaudcolas</who>
    <bug_when>2021-06-16 01:28:28 -0700</bug_when>
    <thetext>The report is pretty clear as it is but I’ve had to discover and research this bug myself so adding the details here.

Relevant specification on accessible name computation: https://www.w3.org/TR/html-aam-1.0/#input-type-text-input-type-password-input-type-search-input-type-tel-input-type-url-and-textarea-element

Extract (matching what Zoë has reported):

&gt; Otherwise use the associated label element(s) accessible name(s) - if more than one label is associated; concatenate by DOM order, delimited by spaces.

Real-world example of this bug if it helps: https://github.com/django/django/pull/14389, https://code.djangoproject.com/ticket/32338</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966926</commentid>
    <comment_count>3</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2023-07-15 15:52:59 -0700</bug_when>
    <thetext>*** Bug 254812 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966927</commentid>
    <comment_count>4</comment_count>
      <attachid>467052</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2023-07-15 15:57:25 -0700</bug_when>
    <thetext>Created attachment 467052
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1966938</commentid>
    <comment_count>5</comment_count>
      <attachid>467053</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2023-07-15 18:36:03 -0700</bug_when>
    <thetext>Created attachment 467053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1967238</commentid>
    <comment_count>6</comment_count>
      <attachid>467053</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2023-07-18 14:19:45 -0700</bug_when>
    <thetext>Comment on attachment 467053
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:248
&gt; +    return labels.isEmpty() ? nullptr : labels.first();

does labels.first() return nil if it&apos;s empty anyway? or does it crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1967241</commentid>
    <comment_count>7</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2023-07-18 14:25:11 -0700</bug_when>
    <thetext>(In reply to chris fleizach from comment #6)
&gt; Comment on attachment 467053 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=467053&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:248
&gt; &gt; +    return labels.isEmpty() ? nullptr : labels.first();
&gt; 
&gt; does labels.first() return nil if it&apos;s empty anyway? or does it crash
It would crash, as Vector::first() does an unchecked access into the vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1967294</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-07-18 19:03:31 -0700</bug_when>
    <thetext>Committed 266151@main (3c4dcc0a6eb0): &lt;https://commits.webkit.org/266151@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 467053.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1967353</commentid>
    <comment_count>9</comment_count>
    <who name="Zoë Bijl">webkit</who>
    <bug_when>2023-07-19 07:12:59 -0700</bug_when>
    <thetext>Woohoo, thank you!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>268138</attachid>
            <date>2016-01-03 08:39:35 -0800</date>
            <delta_ts>2016-01-03 08:39:35 -0800</delta_ts>
            <desc>Error message mechanism with multiple labels</desc>
            <filename>Multiple labels.html</filename>
            <type>text/html</type>
            <size>1274</size>
            <attacher name="Zoë Bijl">webkit</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgoK
ICA8dGl0bGU+U2ltcGxlIGVycm9yIG1lc3NhZ2Ugd2l0aCBtdWx0aXBsZSBsYWJlbHM8L3RpdGxl
PgoKICA8c3R5bGU+CiAgICBib2R5IHsKICAgICAgZm9udC1mYW1pbHk6IFRhaG9tYSwgR2VuZXZh
LCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgIH0KCiAgICAjZXJyb3IxIHsKICAgICAgZGlzcGxheTog
bm9uZTsKICAgICAgY29sb3I6ICM1NTU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAg
Zm9udC1mYW1pbHk6IFRhaG9tYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgZm9u
dC1zaXplOiAuOGVtOwogICAgICBwYWRkaW5nOiA1cHggNXB4IDVweCAzMHB4OwogICAgICBtYXJn
aW46IDVweCA1cHggNXB4IDM1cHg7CiAgICAgIHdpZHRoOiA3ZW07CiAgICAgIGJhY2tncm91bmQ6
ICNmZmVjZWMgdXJsKCdodHRwOi8vd3d3Lmh0bWw1YWNjZXNzaWJpbGl0eS5jb20vaW1hZ2VzL2Ny
b3NzLnBuZycpIG5vLXJlcGVhdCAxMHB4IDUwJTsKICAgICAgYm9yZGVyOiAycHggc29saWQgI2Y1
YWNhNjsKICAgIH0KICA8L3N0eWxlPgo8L2hlYWQ+CgogIDxib2R5PgoKICAgIDxoMT5BIHByZXR0
eSBzaW1wbGUgaW5saW5lIGVycm9yIG1lc3NhZ2U8L2gxPgoKICAgIDxsYWJlbCBpZD0iZXJyb3Ix
IiBmb3I9InRlc3QiPjwvbGFiZWw+CiAgICA8bGFiZWwgaWQ9ImxhYmVsMSIgZm9yPSJ0ZXN0Ij5w
b290PC9sYWJlbD4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0idGVzdCI+CgogICAgPGRpdj4K
ICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJkb2l0Ij5zdWJtaXQ8L2J1dHRvbj4KICAg
IDwvZGl2PgoKICAgICAgPHNjcmlwdD4KICAgICAgICBmdW5jdGlvbiBzaG93RXJyb3IoKSB7CiAg
ICAgICAgICB2YXIgZTEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXJyb3IxIik7CiAgICAg
ICAgICBlMS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgImRpc3BsYXk6YmxvY2s7Iik7CiAgICAgICAg
ICBlMS5zZXRBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIsICJ0cnVlIik7CiAgICAgICAgICBlMS5p
bm5lckhUTUwgPSAiJm5ic3A7ZmlsbCBpdCBpbiBzdWNrZXIhIjsKICAgICAgICB9CgogICAgICAg
IHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkb2l0Iik7CgogICAgICAgIGVsLmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgc2hvd0Vycm9yLCBmYWxzZSk7CiAgICAgIDwvc2NyaXB0
PgogIDwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>467052</attachid>
            <date>2023-07-15 15:57:25 -0700</date>
            <delta_ts>2023-07-15 19:00:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152663-20230715155725.patch</filename>
            <type>text/plain</type>
            <size>36019</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSA5OTJjODMwODg0ODdmNDUwZjY4YWQzZTUxMTU3NmMwZWFjNGRjY2FiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU2F0LCAxNSBKdWwgMjAyMyAxNTo1Mzo0NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFYOiBp
bmNvcnJlY3QgYWNjZXNzaWJsZSBuYW1lIGZyb20gbXVsdGlwbGUgbGFiZWwgZWxlbWVudHMKIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI2NjMgcmRhcjovL3Byb2Js
ZW0vMjQwMzM0ODIKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKUGVyIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9odG1sLWFhbS0xLjAvI2lucHV0LXR5cGUtdGV4dC1pbnB1dC10eXBlLXBhc3N3
b3JkLWlucHV0LXR5cGUtbnVtYmVyLWlucHV0LXR5cGUtc2VhcmNoLWlucHV0LXR5cGUtdGVsLWlu
cHV0LXR5cGUtZW1haWwtaW5wdXQtdHlwZS11cmwtYW5kLXRleHRhcmVhLWVsZW1lbnQtYWNjZXNz
aWJsZS1uYW1lLWNvbXB1dGF0aW9uOgoKPiBPdGhlcndpc2UgdXNlIHRoZSBhc3NvY2lhdGVkIGxh
YmVsIGVsZW1lbnQocykgYWNjZXNzaWJsZSBuYW1lKHMpIC0gaWYgbW9yZSB0aGFuIG9uZSBsYWJl
bCBpcyBhc3NvY2lhdGVkOyBjb25jYXRlbmF0ZSBieSBET00gb3JkZXIsIGRlbGltaXRlZCBieSBz
cGFjZXMuCgpQcmlvciB0byB0aGlzIHBhdGNoLCB3ZSBvbmx5IHVzZWQgYWNjZXNzaWJsZSB0ZXh0
IGZyb20gdGhlIGZpcnN0IGFzc29jaWF0ZWQgbGFiZWwgZWxlbWVudC4KCiogTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS1pc29sYXRlZC10cmVlL1Rlc3RFeHBlY3RhdGlvbnM6CiogTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1dC1leHBlY3RlZC50eHQ6IEFkZGVk
LgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFiZWwtaW5wdXQuaHRtbDog
QWRkZWQuCiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJl
Y3RuZXNzLWV4cGVjdGVkLnR4dDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbDoKKiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvYWNj
ZXNzaWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1dC1leHBlY3RlZC50eHQ6IEFkZGVkLgoqIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgoo
V2ViQ29yZTo6bGFiZWxGb3JOb2RlKToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjpjaGVja2JveE9yUmFkaW9SZWN0IGNvbnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojpjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCBjb25zdCk6CihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4dEZvckxhYmVsRWxlbWVudHMgY29uc3Qp
OgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlRWxlbWVudFRleHQgY29u
c3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlVUlFbGVtZW50IGNv
bnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpleHBvc2VzVGl0bGVVSUVs
ZW1lbnQgY29uc3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlIGNv
bnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpsYWJlbEZvckVsZW1lbnQg
Y29uc3QpOiBEZWxldGVkLgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHRG
b3JMYWJlbEVsZW1lbnQgY29uc3QpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2NvY29hL0FjY2Vzc2liaWxpdHlPYmplY3RDb2NvYS5tbToKKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmRlc2NyaXB0aW9uQXR0cmlidXRlVmFsdWUgY29uc3QpOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGVscFRleHRBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6Ciog
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHA6CihXZWJDb3JlOjpUcmVlU2NvcGU6Omxh
YmVsRWxlbWVudEZvcklkKTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
Lmg6CiogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuY3BwOgooV2ViQ29y
ZTo6IGNvbnN0KToKKFdlYkNvcmU6OlRyZWVTY29wZU9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxh
YmVsRm9yQXR0cmlidXRlIGNvbnN0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlT3JkZXJlZE1hcC5oOgotLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcCB8IDE0NCArKysrKysrKysrKy0tLS0tLS0KIC4uLi9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmggICB8ICAgMyArLQogLi4uL2NvY29hL0FjY2Vzc2li
aWxpdHlPYmplY3RDb2NvYS5tbSAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9kb20v
VHJlZVNjb3BlLmNwcCAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaCAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL1dlYkNvcmUvZG9tL1Ry
ZWVTY29wZU9yZGVyZWRNYXAuY3BwICAgIHwgIDU0ICsrKystLS0KIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UcmVlU2NvcGVPcmRlcmVkTWFwLmggICAgICB8ICAgNCArLQogLi4uL1Rlc3RFeHBlY3RhdGlv
bnMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiAuLi4vbXVsdGlwbGUtbGFiZWwt
aW5wdXQtZXhwZWN0ZWQudHh0ICAgICAgICAgfCAgMTkgKysrCiAuLi4vYWNjZXNzaWJpbGl0eS9t
dWx0aXBsZS1sYWJlbC1pbnB1dC5odG1sICAgfCAgNDYgKysrKysrCiAuLi4vdGl0bGUtdWktZWxl
bWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQgfCAgMzUgKysrLS0KIC4uLi90aXRsZS11aS1l
bGVtZW50LWNvcnJlY3RuZXNzLmh0bWwgICAgICAgICB8ICA4MiArKysrKy0tLS0tCiAuLi4vbXVs
dGlwbGUtbGFiZWwtaW5wdXQtZXhwZWN0ZWQudHh0ICAgICAgICAgfCAgMTMgKysKIDEzIGZpbGVz
IGNoYW5nZWQsIDI3MCBpbnNlcnRpb25zKCspLCAxNDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1dC1l
eHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L211bHRpcGxlLWxhYmVsLWlucHV0Lmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9pb3MvYWNjZXNzaWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1dC1leHBlY3Rl
ZC50eHQKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuY3BwCmluZGV4IDk4MjA0N2I0OWFiOS4uMzNmMzMyOTYzM2VlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcApAQCAtMjE2LDEwICsyMTYsNDIgQEAgQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnBhcmVudE9iamVjdCgpIGNvbnN0CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKK3N0YXRpYyBWZWN0b3I8SFRNTExhYmVsRWxlbWVudCo+IGxhYmVs
c0Zvck5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0gZHluYW1pY0Rvd25j
YXN0PEhUTUxFbGVtZW50Pihub2RlKTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmlz
TGFiZWxhYmxlKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjb25zdCBhdXRvJiBpZCA9
IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7CisgICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIHRyZWVTY29wZUxhYmVscyA9IGVsZW1lbnQtPnRyZWVTY29wZSgpLmxh
YmVsRWxlbWVudHNGb3JJZChpZCk7IHRyZWVTY29wZUxhYmVscyAmJiAhdHJlZVNjb3BlTGFiZWxz
LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxIVE1MTGFiZWxFbGVtZW50Kj4gbGFi
ZWxzOworICAgICAgICAgICAgbGFiZWxzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodHJlZVNjb3Bl
TGFiZWxzLT5zaXplKCkpOworICAgICAgICAgICAgZm9yIChhdXRvKiBsYWJlbCA6ICp0cmVlU2Nv
cGVMYWJlbHMpCisgICAgICAgICAgICAgICAgbGFiZWxzLnVuY2hlY2tlZEFwcGVuZCgmKmR5bmFt
aWNEb3duY2FzdDxIVE1MTGFiZWxFbGVtZW50PihsYWJlbCkpOworICAgICAgICAgICAgcmV0dXJu
IGxhYmVsczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhdXRvKiBuZWFyZXN0TGFiZWwg
PSBhbmNlc3RvcnNPZlR5cGU8SFRNTExhYmVsRWxlbWVudD4oKmVsZW1lbnQpLmZpcnN0KCkpIHsK
KyAgICAgICAgLy8gT25seSB1c2UgdGhlIG5lYXJlc3QgbGFiZWwgaWYgaXQgaXNuJ3QgcG9pbnRp
bmcgYXQgc29tZXRoaW5nIGVsc2UuCisgICAgICAgIGNvbnN0IGF1dG8mIGZvckF0dHJpYnV0ZSA9
IG5lYXJlc3RMYWJlbC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihmb3JBdHRyKTsK
KyAgICAgICAgaWYgKGZvckF0dHJpYnV0ZS5pc0VtcHR5KCkgfHwgZm9yQXR0cmlidXRlID09IGlk
KQorICAgICAgICAgICAgcmV0dXJuIHsgbmVhcmVzdExhYmVsIH07CisgICAgfQorICAgIHJldHVy
biB7IH07Cit9CisKK3N0YXRpYyBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbEZvck5vZGUoTm9kZSog
bm9kZSkKK3sKKyAgICBhdXRvIGxhYmVscyA9IGxhYmVsc0Zvck5vZGUobm9kZSk7CisgICAgcmV0
dXJuIGxhYmVscy5pc0VtcHR5KCkgPyBudWxscHRyIDogbGFiZWxzLmZpcnN0KCk7Cit9CisKIExh
eW91dFJlY3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1JlY3QoKSBj
b25zdAogewotICAgIGF1dG8qIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KGR5bmFtaWNEb3duY2Fz
dDxFbGVtZW50Pihub2RlKCkpKTsKLSAgICBpZiAoIWxhYmVsIHx8ICFsYWJlbC0+cmVuZGVyZXIo
KSkKKyAgICBhdXRvIGxhYmVscyA9IGxhYmVsc0Zvck5vZGUobm9kZSgpKTsKKyAgICBpZiAobGFi
ZWxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94UmVjdCgpOwogCiAgICAg
YXV0byogY2FjaGUgPSBheE9iamVjdENhY2hlKCk7CkBAIC0yMjcsOSArMjU5LDE0IEBAIExheW91
dFJlY3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1JlY3QoKSBjb25z
dAogICAgICAgICByZXR1cm4gYm91bmRpbmdCb3hSZWN0KCk7CiAKICAgICAvLyBBIGNoZWNrYm94
IG9yIHJhZGlvIGJ1dHRvbiBzaG91bGQgZW5jb21wYXNzIGl0cyBsYWJlbC4KLSAgICBhdXRvIGxh
YmVsUmVjdCA9IGNhY2hlLT5nZXRPckNyZWF0ZShsYWJlbCktPmVsZW1lbnRSZWN0KCk7Ci0gICAg
bGFiZWxSZWN0LnVuaXRlKGJvdW5kaW5nQm94UmVjdCgpKTsKLSAgICByZXR1cm4gbGFiZWxSZWN0
OworICAgIGF1dG8gc2VsZlJlY3QgPSBib3VuZGluZ0JveFJlY3QoKTsKKyAgICBmb3IgKGF1dG8q
IGxhYmVsIDogbGFiZWxzKSB7CisgICAgICAgIGlmIChsYWJlbC0+cmVuZGVyZXIoKSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8qIGF4TGFiZWwgPSBjYWNoZS0+Z2V0T3JDcmVhdGUobGFiZWwpKQor
ICAgICAgICAgICAgICAgIHNlbGZSZWN0LnVuaXRlKGF4TGFiZWwtPmVsZW1lbnRSZWN0KCkpOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzZWxmUmVjdDsKIH0KIAogTGF5b3V0UmVjdCBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZWxlbWVudFJlY3QoKSBjb25zdApAQCAtMTYxMSwzMSAr
MTY0OCw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpj
b3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVuCiAgICAgaWYgKGhhc1RleHRBbHRlcm5h
dGl2ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gZHluYW1pY0Rvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKCkpKSB7Ci0gICAgICAgIGlmIChh
dXRvKiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgICAgIHJldHVy
biBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGxhYmVsKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLUhUTUxMYWJlbEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjpsYWJlbEZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBpZiAoIWlz
PEhUTUxFbGVtZW50PihlbGVtZW50KSB8fCAhZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVsZW1lbnQp
LT5pc0xhYmVsYWJsZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGNvbnN0IEF0
b21TdHJpbmcmIGlkID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICBpZiAoIWlkLmlz
RW1wdHkoKSkgewotICAgICAgICBpZiAoSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBlbGVtZW50
LT50cmVlU2NvcGUoKS5sYWJlbEVsZW1lbnRGb3JJZChpZCkpCi0gICAgICAgICAgICByZXR1cm4g
bGFiZWw7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8qIG5lYXJlc3RMYWJlbCA9IGFuY2VzdG9yc09m
VHlwZTxIVE1MTGFiZWxFbGVtZW50PigqZWxlbWVudCkuZmlyc3QoKSkgewotICAgICAgICAvLyBP
bmx5IHVzZSB0aGUgbmVhcmVzdCBsYWJlbCBpZiBpdCBpc24ndCBwb2ludGluZyBhdCBzb21ldGhp
bmcgZWxzZS4KLSAgICAgICAgY29uc3QgYXV0byYgZm9yQXR0cmlidXRlID0gbmVhcmVzdExhYmVs
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGZvckF0dHIpOwotICAgICAgICBpZiAo
Zm9yQXR0cmlidXRlLmlzRW1wdHkoKSB8fCBmb3JBdHRyaWJ1dGUgPT0gaWQpCi0gICAgICAgICAg
ICByZXR1cm4gbmVhcmVzdExhYmVsOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShsYWJlbEZvck5vZGUobm9kZSgpKSk7
CiB9CiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YXJpYUFjY2Vzc2liaWxpdHlE
ZXNjcmlwdGlvbigpIGNvbnN0CkBAIC0xNzQyLDIyICsxNzU1LDM0IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmlzTGFiZWxhYmxlKCkgY29uc3QKICAgICByZXR1cm4gaXM8SFRNTElu
cHV0RWxlbWVudD4oKm5vZGUpIHx8IGlzQ29udHJvbCgpIHx8IGlzUHJvZ3Jlc3NJbmRpY2F0b3Io
KSB8fCBpc01ldGVyKCk7CiB9CiAKLVN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4
dEZvckxhYmVsRWxlbWVudChFbGVtZW50KiBlbGVtZW50KSBjb25zdAorU3RyaW5nIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojp0ZXh0Rm9yTGFiZWxFbGVtZW50cyhWZWN0b3I8SFRNTExhYmVsRWxl
bWVudCo+JiYgbGFiZWxFbGVtZW50cykgY29uc3QKIHsKLSAgICBTdHJpbmcgcmVzdWx0ID0gU3Ry
aW5nKCk7Ci0gICAgaWYgKCFpczxIVE1MTGFiZWxFbGVtZW50PigqZWxlbWVudCkpCi0gICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgYXV0byogY2FjaGUgPSBheE9iamVjdENhY2hlKCk7CisgICAg
Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWwtYWFtLTEuMC8jaW5wdXQtdHlwZS10ZXh0LWlu
cHV0LXR5cGUtcGFzc3dvcmQtaW5wdXQtdHlwZS1udW1iZXItaW5wdXQtdHlwZS1zZWFyY2gtaW5w
dXQtdHlwZS10ZWwtaW5wdXQtdHlwZS1lbWFpbC1pbnB1dC10eXBlLXVybC1hbmQtdGV4dGFyZWEt
ZWxlbWVudC1hY2Nlc3NpYmxlLW5hbWUtY29tcHV0YXRpb24KKyAgICAvLyAiLi4uaWYgbW9yZSB0
aGFuIG9uZSBsYWJlbCBpcyBhc3NvY2lhdGVkOyBjb25jYXRlbmF0ZSBieSBET00gb3JkZXIsIGRl
bGltaXRlZCBieSBzcGFjZXMuIgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIGZvciAo
YXV0byogbGFiZWxFbGVtZW50IDogbGFiZWxFbGVtZW50cykgeworICAgICAgICBpZiAoIWxhYmVs
RWxlbWVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgYXV0byBvYmplY3RDYWNoZSA9
IGF4T2JqZWN0Q2FjaGUoKTsKLSAgICBpZiAoIW9iamVjdENhY2hlKQotICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBhdXRvIGFwcGVuZExhYmVsID0gWyZdIChTdHJpbmcmJiBzdHJpbmcp
IHsKKyAgICAgICAgICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gZG93bmNhc3Q8SFRNTExhYmVs
RWxlbWVudD4oZWxlbWVudCk7Ci0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYXJpYS1s
YWJlbGxlZGJ5IGF0dHJpYnV0ZSBvbiB0aGUgbGFiZWwgZWxlbWVudC4KLSAgICBpZiAoQWNjZXNz
aWJpbGl0eU9iamVjdCogbGFiZWxPYmplY3QgPSBvYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUobGFi
ZWwpKQotICAgICAgICByZXN1bHQgPSBsYWJlbE9iamVjdC0+YXJpYUxhYmVsZWRCeUF0dHJpYnV0
ZSgpOwotICAgIAotICAgIHJldHVybiAhcmVzdWx0LmlzRW1wdHkoKSA/IHJlc3VsdCA6IGFjY2Vz
c2libGVOYW1lRm9yTm9kZShsYWJlbCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiICIpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOworICAgICAgICB9OworCisgICAgICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgb24gdGhlIGxh
YmVsIGVsZW1lbnQuCisgICAgICAgIGF1dG8qIGF4TGFiZWwgPSBjYWNoZSA/IGNhY2hlLT5nZXRP
ckNyZWF0ZShsYWJlbEVsZW1lbnQpIDogbnVsbHB0cjsKKyAgICAgICAgYXV0byBhcmlhTGFiZWxl
ZEJ5VGV4dCA9IGF4TGFiZWwgPyBheExhYmVsLT5hcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkgOiBT
dHJpbmcoKTsKKyAgICAgICAgaWYgKCFhcmlhTGFiZWxlZEJ5VGV4dC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBhcHBlbmRMYWJlbChXVEZNb3ZlKGFyaWFMYWJlbGVkQnlUZXh0KSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGFwcGVuZExhYmVsKGFjY2Vzc2libGVOYW1lRm9yTm9kZShsYWJl
bEVsZW1lbnQpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCiBI
VE1MTGFiZWxFbGVtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFiZWxFbGVtZW50Q29u
dGFpbmVyKCkgY29uc3QKQEAgLTE3NzYsMjQgKzE4MDEsMjAgQEAgSFRNTExhYmVsRWxlbWVudCog
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmxhYmVsRWxlbWVudENvbnRhaW5lcigpIGNvbnN0CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlRWxlbWVudFRleHQoVmVjdG9yPEFj
Y2Vzc2liaWxpdHlUZXh0PiYgdGV4dE9yZGVyKSBjb25zdAogewotICAgIE5vZGUqIG5vZGUgPSB0
aGlzLT5ub2RlKCk7CisgICAgUmVmUHRyIG5vZGUgPSB0aGlzLT5ub2RlKCk7CiAgICAgaWYgKCFu
b2RlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKGlzTGFiZWxhYmxlKCkpIHsKLSAg
ICAgICAgaWYgKEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGUpKSkgewotICAgICAgICAgICAgU3RyaW5nIGlubmVyVGV4dCA9IHRl
eHRGb3JMYWJlbEVsZW1lbnQobGFiZWwpOwotCi0gICAgICAgICAgICBhdXRvIG9iamVjdENhY2hl
ID0gYXhPYmplY3RDYWNoZSgpOwotICAgICAgICAgICAgLy8gT25seSB1c2UgdGhlIDxsYWJlbD4g
dGV4dCBpZiB0aGVyZSdzIG5vIEFSSUEgb3ZlcnJpZGUuCi0gICAgICAgICAgICBpZiAob2JqZWN0
Q2FjaGUgJiYgIWlubmVyVGV4dC5pc0VtcHR5KCkgJiYgIWFyaWFBY2Nlc3NpYmlsaXR5RGVzY3Jp
cHRpb24oKSkKLSAgICAgICAgICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlU
ZXh0KGlubmVyVGV4dCwgaXNNZXRlcigpID8gQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6OkFsdGVy
bmF0aXZlIDogQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6OkxhYmVsQnlFbGVtZW50KSk7CisgICAg
Ly8gT25seSB1c2UgPGxhYmVsPiB0ZXh0IGlmIHRoZXJlJ3Mgbm8gQVJJQSBvdmVycmlkZS4KKyAg
ICBpZiAoaXNMYWJlbGFibGUoKSAmJiAhYXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpKSB7
CisgICAgICAgIFN0cmluZyBsYWJlbFRleHQgPSB0ZXh0Rm9yTGFiZWxFbGVtZW50cyhsYWJlbHNG
b3JOb2RlKG5vZGUuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFsYWJlbFRleHQuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICB0ZXh0T3JkZXIuYXBwZW5kKEFjY2Vzc2liaWxpdHlUZXh0KFdURk1vdmUo
bGFiZWxUZXh0KSwgaXNNZXRlcigpID8gQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6OkFsdGVybmF0
aXZlIDogQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6OkxhYmVsQnlFbGVtZW50KSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eU9i
amVjdCogdGl0bGVVSUVsZW1lbnQgPSB0aGlzLT50aXRsZVVJRWxlbWVudCgpOwotICAgIGlmICh0
aXRsZVVJRWxlbWVudCkKKyAgICBpZiAodGl0bGVVSUVsZW1lbnQoKSkKICAgICAgICAgdGV4dE9y
ZGVyLmFwcGVuZChBY2Nlc3NpYmlsaXR5VGV4dChTdHJpbmcoKSwgQWNjZXNzaWJpbGl0eVRleHRT
b3VyY2U6OkxhYmVsQnlFbGVtZW50KSk7CiB9CiAKQEAgLTE4MDUsNyArMTgyNiw3IEBAIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0aXRsZVVJRWxlbWVudCgp
IGNvbnN0CiAgICAgaWYgKGlzRmlndXJlRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gY2FwdGlv
bkZvckZpZ3VyZSgpOwogCi0gICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
bGFiZWxGb3JFbGVtZW50KGR5bmFtaWNEb3duY2FzdDxFbGVtZW50Pihub2RlKCkpKSk7CisgICAg
cmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobGFiZWxGb3JOb2RlKG5vZGUoKSkp
OwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpleHBvc2VzVGl0bGVVSUVsZW1l
bnQoKSBjb25zdApAQCAtMTgyNSw3ICsxODQ2LDEyIEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmV4cG9zZXNUaXRsZVVJRWxlbWVudCgpIGNvbnN0CiAgICAgLy8gV2hlbiA8bGFiZWw+
IGVsZW1lbnQgaGFzIGFyaWEtbGFiZWwgb3IgYXJpYS1sYWJlbGxlZGJ5IG9uIGl0LCB3ZSBzaG91
bGRuJ3QgZXhwb3NlIGl0IGFzIHRoZQogICAgIC8vIHRpdGxlVUlFbGVtZW50LCBvdGhlcndpc2Ug
aXRzIGlubmVyIHRleHQgd2lsbCBiZSBhbm5vdW5jZWQgYnkgYSBzY3JlZW5yZWFkZXIuCiAgICAg
aWYgKGlzTGFiZWxhYmxlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGxhYmVsID0gbGFiZWxGb3JF
bGVtZW50KGR5bmFtaWNEb3duY2FzdDxFbGVtZW50Pihub2RlKCkpKSkgeworICAgICAgICBhdXRv
IGxhYmVscyA9IGxhYmVsc0Zvck5vZGUobm9kZSgpKTsKKyAgICAgICAgLy8gSWYgdGhpcyBlbGVt
ZW50IGlzIGFzc29jaWF0ZWQgd2l0aCBtdWx0aXBsZSBsYWJlbHMgKHRpdGxlIFVJIGVsZW1lbnRz
KSwgdGhlbiBjbGFpbWluZyB0byBleHBvc2UKKyAgICAgICAgLy8gYSBzaW5nbGUgdGl0bGUgVUkg
ZWxlbWVudCBpcyBub3QgY29ycmVjdCBhbmQgd2lsbCByZXN1bHQgaW4gc29tZSBBVHMgb3V0cHV0
dGluZyB0aGUgd3JvbmcgdGhpbmcuCisgICAgICAgIGlmIChsYWJlbHMuc2l6ZSgpID49IDIpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChhdXRvKiBsYWJlbCA9IGxhYmVs
cy5pc0VtcHR5KCkgPyBudWxscHRyIDogbGFiZWxzWzBdKSB7CiAgICAgICAgICAgICBpZiAoIWxh
YmVsLT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFfbGFiZWxBdHRyKS5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgaWYgKEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGxhYmVsT2JqZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNy
ZWF0ZShsYWJlbCkpIHsKQEAgLTIzNzcsMTAgKzI0MDMsMTAgQEAgU3RyaW5nIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojp0aXRsZSgpIGNvbnN0CiAgICAgfQogCiAgICAgaWYgKGlzTGFiZWxhYmxl
KCkpIHsKLSAgICAgICAgUmVmUHRyIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KGRvd25jYXN0PEVs
ZW1lbnQ+KG5vZGUuZ2V0KCkpKTsKKyAgICAgICAgYXV0byBsYWJlbHMgPSBsYWJlbHNGb3JOb2Rl
KG5vZGUuZ2V0KCkpOwogICAgICAgICAvLyBVc2UgdGhlIGxhYmVsIHRleHQgYXMgdGhlIHRpdGxl
IGlmIDEpIHRoZSB0aXRsZSBlbGVtZW50IGlzIE5PVCBhbiBleHBvc2VkIGVsZW1lbnQgYW5kIDIp
IHRoZXJlJ3Mgbm8gQVJJQSBvdmVycmlkZS4KLSAgICAgICAgaWYgKGxhYmVsICYmICFleHBvc2Vz
VGl0bGVVSUVsZW1lbnQoKSAmJiAhYXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpLmxlbmd0
aCgpKQotICAgICAgICAgICAgcmV0dXJuIHRleHRGb3JMYWJlbEVsZW1lbnQobGFiZWwuZ2V0KCkp
OworICAgICAgICBpZiAoIWxhYmVscy5pc0VtcHR5KCkgJiYgIWV4cG9zZXNUaXRsZVVJRWxlbWVu
dCgpICYmICFhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkubGVuZ3RoKCkpCisgICAgICAg
ICAgICByZXR1cm4gdGV4dEZvckxhYmVsRWxlbWVudHMoV1RGTW92ZShsYWJlbHMpKTsKICAgICB9
CiAKICAgICAvLyBGb3IgPHNlbGVjdD4gZWxlbWVudHMsIHRpdGxlIHNob3VsZCBiZSBlbXB0eSBp
ZiB0aGV5IGFyZSBub3QgcmVuZGVyZWQgb3IgaGF2ZSByb2xlIFBvcFVwQnV0dG9uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5oCmluZGV4IGJjMzQ0Mzg1MWMxYS4uZDFjMmI0MzRiNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCkBAIC0x
OTUsOCArMTk1LDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaXNMYWJlbGFibGUoKSBjb25zdDsK
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JyZXNwb25kaW5nQ29udHJvbEZvckxhYmVsRWxl
bWVudCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcnJlc3Bv
bmRpbmdMYWJlbEZvckNvbnRyb2xFbGVtZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgSFRNTExh
YmVsRWxlbWVudCogbGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqKSBjb25zdDsKLSAgICBTdHJpbmcg
dGV4dEZvckxhYmVsRWxlbWVudChFbGVtZW50KikgY29uc3Q7CisgICAgU3RyaW5nIHRleHRGb3JM
YWJlbEVsZW1lbnRzKFZlY3RvcjxIVE1MTGFiZWxFbGVtZW50Kj4mJikgY29uc3Q7CiAgICAgSFRN
TExhYmVsRWxlbWVudCogbGFiZWxFbGVtZW50Q29udGFpbmVyKCkgY29uc3Q7CiAKICAgICBTdHJp
bmcgYXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2NvY29hL0FjY2Vzc2liaWxpdHlPYmpl
Y3RDb2NvYS5tbQppbmRleCBiZTA4YjkyNDQ2NzguLmZhYmVkZmYxNjI0NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9jb2NvYS9BY2Nlc3NpYmls
aXR5T2JqZWN0Q29jb2EubW0KQEAgLTEwNSw3ICsxMDUsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0
eU9iamVjdDo6ZGVzY3JpcHRpb25BdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiAgICAgLy8gRGV0ZXJt
aW5lIGlmIGFueSB2aXNpYmxlIHRleHQgaXMgYXZhaWxhYmxlLCB3aGljaCBpbmZsdWVuY2VzIG91
ciB1c2FnZSBvZiB0aXRsZSB0YWcuCiAgICAgYm9vbCB2aXNpYmxlVGV4dEF2YWlsYWJsZSA9IGZh
bHNlOwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dCA6IHRleHRPcmRlcikgewotICAgICAgICBp
ZiAoaXNWaXNpYmxlVGV4dCh0ZXh0LnRleHRTb3VyY2UpKSB7CisgICAgICAgIGlmIChpc1Zpc2li
bGVUZXh0KHRleHQudGV4dFNvdXJjZSkgJiYgIXRleHQudGV4dC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgIHZpc2libGVUZXh0QXZhaWxhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0xODgsNyArMTg4LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OmhlbHBUZXh0QXR0cmlidXRlVmFsdWUoKSBjb25zdAogICAgIC8vIERldGVybWluZSBpZiBhbnkg
ZGVzY3JpcHRpdmUgdGV4dCBpcyBhdmFpbGFibGUsIHdoaWNoIGluZmx1ZW5jZXMgb3VyIHVzYWdl
IG9mIHRpdGxlIHRhZy4KICAgICBib29sIGRlc2NyaXB0aXZlVGV4dEF2YWlsYWJsZSA9IGZhbHNl
OwogICAgIGZvciAoY29uc3QgYXV0byYgdGV4dCA6IHRleHRPcmRlcikgewotICAgICAgICBpZiAo
aXNEZXNjcmlwdGl2ZVRleHQodGV4dC50ZXh0U291cmNlKSkgeworICAgICAgICBpZiAoaXNEZXNj
cmlwdGl2ZVRleHQodGV4dC50ZXh0U291cmNlKSAmJiAhdGV4dC50ZXh0LmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgZGVzY3JpcHRpdmVUZXh0QXZhaWxhYmxlID0gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCmluZGV4IGNlYzNlOTA2
Yjc2My4uNjg1MzgzMjY2ZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcApAQCAtMzAxLDcg
KzMwMSw3IEBAIHZvaWQgVHJlZVNjb3BlOjpyZW1vdmVMYWJlbChjb25zdCBBdG9tU3RyaW5nSW1w
bCYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsCiAgICAgbV9sYWJlbHNCeUZvckF0dHJp
YnV0ZS0+cmVtb3ZlKGZvckF0dHJpYnV0ZVZhbHVlLCBlbGVtZW50KTsKIH0KIAotSFRNTExhYmVs
RWxlbWVudCogVHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZChjb25zdCBBdG9tU3RyaW5nJiBm
b3JBdHRyaWJ1dGVWYWx1ZSkKK2NvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIFRyZWVTY29wZTo6bGFi
ZWxFbGVtZW50c0ZvcklkKGNvbnN0IEF0b21TdHJpbmcmIGZvckF0dHJpYnV0ZVZhbHVlKQogewog
ICAgIGlmIChmb3JBdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMzE3LDcgKzMxNyw3IEBAIEhUTUxMYWJlbEVsZW1lbnQqIFRyZWVTY29wZTo6bGFi
ZWxFbGVtZW50Rm9ySWQoY29uc3QgQXRvbVN0cmluZyYgZm9yQXR0cmlidXRlVmFsCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICByZXR1cm4gbV9sYWJlbHNCeUZvckF0dHJpYnV0ZS0+Z2V0RWxlbWVu
dEJ5TGFiZWxGb3JBdHRyaWJ1dGUoKmZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgKnRoaXMpOwor
ICAgIHJldHVybiBtX2xhYmVsc0J5Rm9yQXR0cmlidXRlLT5nZXRFbGVtZW50c0J5TGFiZWxGb3JB
dHRyaWJ1dGUoKmZvckF0dHJpYnV0ZVZhbHVlLmltcGwoKSwgKnRoaXMpOwogfQogCiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxMYXlvdXRQb2ludD4gYWJzb2x1dGVQb2ludElmTm90Q2xpcHBlZChEb2N1
bWVudCYgZG9jdW1lbnQsIGNvbnN0IExheW91dFBvaW50JiBjbGllbnRQb2ludCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaAppbmRleCA1ODZlNDRkNDY1ZGIuLjFhYTg2OTcwMWVlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaApAQCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZENh
Y2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiAhIW1fbGFiZWxzQnlGb3JB
dHRyaWJ1dGU7IH0KICAgICB2b2lkIGFkZExhYmVsKGNvbnN0IEF0b21TdHJpbmdJbXBsJiBmb3JB
dHRyaWJ1dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCYpOwogICAgIHZvaWQgcmVtb3ZlTGFiZWwo
Y29uc3QgQXRvbVN0cmluZ0ltcGwmIGZvckF0dHJpYnV0ZVZhbHVlLCBIVE1MTGFiZWxFbGVtZW50
Jik7Ci0gICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWxFbGVtZW50Rm9ySWQoY29uc3QgQXRvbVN0
cmluZyYgZm9yQXR0cmlidXRlVmFsdWUpOworICAgIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIGxh
YmVsRWxlbWVudHNGb3JJZChjb25zdCBBdG9tU3RyaW5nJiBmb3JBdHRyaWJ1dGVWYWx1ZSk7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8RWxlbWVudD4gZWxlbWVudEZyb21Qb2ludChkb3Vi
bGUgY2xpZW50WCwgZG91YmxlIGNsaWVudFkpOwogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxS
ZWZQdHI8RWxlbWVudD4+IGVsZW1lbnRzRnJvbVBvaW50KGRvdWJsZSBjbGllbnRYLCBkb3VibGUg
Y2xpZW50WSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlT3JkZXJl
ZE1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlT3JkZXJlZE1hcC5jcHAKaW5k
ZXggNWI3NjkxZTBmZTg2Li42NjEzYWQ3MTkzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGVPcmRlcmVkTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlT3JkZXJlZE1hcC5jcHAKQEAgLTE0NSw2ICsxNDUsMzEgQEAgaW5saW5lIEVsZW1lbnQq
IFRyZWVTY29wZU9yZGVyZWRNYXA6OmdldChjb25zdCBBdG9tU3RyaW5nSW1wbCYga2V5LCBjb25z
dCBUcmVlU2MKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIEtl
eU1hdGNoaW5nRnVuY3Rpb24+CitpbmxpbmUgVmVjdG9yPEVsZW1lbnQqPiogVHJlZVNjb3BlT3Jk
ZXJlZE1hcDo6Z2V0QWxsKGNvbnN0IEF0b21TdHJpbmdJbXBsJiBrZXksIGNvbnN0IFRyZWVTY29w
ZSYgc2NvcGUsIGNvbnN0IEtleU1hdGNoaW5nRnVuY3Rpb24mIGtleU1hdGNoZXMpIGNvbnN0Cit7
CisgICAgbV9tYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgYXV0byBtYXBJdGVyYXRvciA9
IG1fbWFwLmZpbmQoJmtleSk7CisgICAgaWYgKG1hcEl0ZXJhdG9yID09IG1fbWFwLmVuZCgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8mIGVudHJ5ID0gbWFwSXRlcmF0b3It
PnZhbHVlOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oZW50
cnkuY291bnQpOworCisgICAgaWYgKGVudHJ5Lm9yZGVyZWRMaXN0LmlzRW1wdHkoKSkgeworICAg
ICAgICBlbnRyeS5vcmRlcmVkTGlzdC5yZXNlcnZlQ2FwYWNpdHkoZW50cnkuY291bnQpOworICAg
ICAgICBhdXRvIGVsZW1lbnREZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+
KHNjb3BlLnJvb3ROb2RlKCkpOworICAgICAgICBmb3IgKGF1dG8gaXQgPSBlbnRyeS5lbGVtZW50
ID8gZWxlbWVudERlc2NlbmRhbnRzLmJlZ2luQXQoKmVudHJ5LmVsZW1lbnQpIDogZWxlbWVudERl
c2NlbmRhbnRzLmJlZ2luKCk7IGl0OyArK2l0KSB7CisgICAgICAgICAgICBpZiAoa2V5TWF0Y2hl
cyhrZXksICppdCkpCisgICAgICAgICAgICAgICAgZW50cnkub3JkZXJlZExpc3QuYXBwZW5kKCYq
aXQpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oZW50cnkub3JkZXJlZExpc3Quc2l6ZSgpID09IGVudHJ5LmNvdW50KTsKKyAgICB9
CisKKyAgICByZXR1cm4gJmVudHJ5Lm9yZGVyZWRMaXN0OworfQorCiBFbGVtZW50KiBUcmVlU2Nv
cGVPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlJZChjb25zdCBBdG9tU3RyaW5nSW1wbCYga2V5LCBj
b25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewogICAgIHJldHVybiBnZXQoa2V5LCBzY29w
ZSwgW10gKGNvbnN0IEF0b21TdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
IHsKQEAgLTE3NCwxMSArMTk5LDExIEBAIEhUTUxJbWFnZUVsZW1lbnQqIFRyZWVTY29wZU9yZGVy
ZWRNYXA6OmdldEVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9tU3RyaW5nSW1wbCYKICAgICB9KSk7
CiB9CiAKLUhUTUxMYWJlbEVsZW1lbnQqIFRyZWVTY29wZU9yZGVyZWRNYXA6OmdldEVsZW1lbnRC
eUxhYmVsRm9yQXR0cmlidXRlKGNvbnN0IEF0b21TdHJpbmdJbXBsJiBrZXksIGNvbnN0IFRyZWVT
Y29wZSYgc2NvcGUpIGNvbnN0Citjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBUcmVlU2NvcGVPcmRl
cmVkTWFwOjpnZXRFbGVtZW50c0J5TGFiZWxGb3JBdHRyaWJ1dGUoY29uc3QgQXRvbVN0cmluZ0lt
cGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsKLSAgICByZXR1cm4gZG93
bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4oZ2V0KGtleSwgc2NvcGUsIFtdIChjb25zdCBBdG9tU3Ry
aW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7CisgICAgcmV0dXJuIGdldEFs
bChrZXksIHNjb3BlLCBbXSAoY29uc3QgQXRvbVN0cmluZ0ltcGwmIGtleSwgY29uc3QgRWxlbWVu
dCYgZWxlbWVudCkgewogICAgICAgICByZXR1cm4gaXM8SFRNTExhYmVsRWxlbWVudD4oZWxlbWVu
dCkgJiYgZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGZvckF0dHIpLmlt
cGwoKSA9PSAma2V5OwotICAgIH0pKTsKKyAgICB9KTsKIH0KIAogRWxlbWVudCogVHJlZVNjb3Bl
T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVtKGNvbnN0IEF0b21TdHJpbmdJ
bXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUpIGNvbnN0CkBAIC0xOTcsMjYgKzIyMiw5
IEBAIEVsZW1lbnQqIFRyZWVTY29wZU9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeURvY3VtZW50TmFt
ZWRJdGVtKGNvbnN0IEF0b21TdHJpbmdJbXBsCiAKIGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIFRy
ZWVTY29wZU9yZGVyZWRNYXA6OmdldEFsbEVsZW1lbnRzQnlJZChjb25zdCBBdG9tU3RyaW5nSW1w
bCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAogewotICAgIG1fbWFwLmNoZWNr
Q29uc2lzdGVuY3koKTsKLQotICAgIGF1dG8gbWFwSXRlcmF0b3IgPSBtX21hcC5maW5kKCZrZXkp
OwotICAgIGlmIChtYXBJdGVyYXRvciA9PSBtX21hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvJiBlbnRyeSA9IG1hcEl0ZXJhdG9yLT52YWx1ZTsKLSAgICBSRUxF
QVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGVudHJ5LmNvdW50KTsKLQotICAg
IGlmIChlbnRyeS5vcmRlcmVkTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZW50cnkub3JkZXJl
ZExpc3QucmVzZXJ2ZUNhcGFjaXR5KGVudHJ5LmNvdW50KTsKLSAgICAgICAgYXV0byBlbGVtZW50
RGVzY2VuZGFudHMgPSBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihzY29wZS5yb290Tm9kZSgp
KTsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gZW50cnkuZWxlbWVudCA/IGVsZW1lbnREZXNjZW5k
YW50cy5iZWdpbkF0KCplbnRyeS5lbGVtZW50KSA6IGVsZW1lbnREZXNjZW5kYW50cy5iZWdpbigp
OyBpdDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT5nZXRJZEF0dHJpYnV0ZSgpLmltcGwo
KSA9PSAma2V5KQotICAgICAgICAgICAgICAgIGVudHJ5Lm9yZGVyZWRMaXN0LmFwcGVuZCgmKml0
KTsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGVudHJ5Lm9yZGVyZWRMaXN0LnNpemUoKSA9PSBlbnRyeS5jb3VudCk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuICZlbnRyeS5vcmRlcmVkTGlzdDsKKyAgICByZXR1cm4gZ2V0QWxsKGtleSwg
c2NvcGUsIFtdIChjb25zdCBBdG9tU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW50JiBlbGVt
ZW50KSB7CisgICAgICAgIHJldHVybiBlbGVtZW50LmdldElkQXR0cmlidXRlKCkuaW1wbCgpID09
ICZrZXk7CisgICAgfSk7CiB9CiAKIGNvbnN0IFZlY3RvcjxBdG9tU3RyaW5nPiBUcmVlU2NvcGVP
cmRlcmVkTWFwOjprZXlzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGVPcmRlcmVkTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlT3JkZXJl
ZE1hcC5oCmluZGV4IDM2YzY4N2EwMzdmYy4uYTRlNjcxYzI2ZTRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlT3JkZXJlZE1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGVPcmRlcmVkTWFwLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAg
IEVsZW1lbnQqIGdldEVsZW1lbnRCeU5hbWUoY29uc3QgQXRvbVN0cmluZ0ltcGwmLCBjb25zdCBU
cmVlU2NvcGUmKSBjb25zdDsKICAgICBIVE1MTWFwRWxlbWVudCogZ2V0RWxlbWVudEJ5TWFwTmFt
ZShjb25zdCBBdG9tU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogICAgIEhU
TUxJbWFnZUVsZW1lbnQqIGdldEVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9tU3RyaW5nSW1wbCYs
IGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwotICAgIEhUTUxMYWJlbEVsZW1lbnQqIGdldEVsZW1l
bnRCeUxhYmVsRm9yQXR0cmlidXRlKGNvbnN0IEF0b21TdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNj
b3BlJikgY29uc3Q7CisgICAgY29uc3QgVmVjdG9yPEVsZW1lbnQqPiogZ2V0RWxlbWVudHNCeUxh
YmVsRm9yQXR0cmlidXRlKGNvbnN0IEF0b21TdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikg
Y29uc3Q7CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVtKGNvbnN0IEF0
b21TdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7CiAgICAgRWxlbWVudCogZ2V0
RWxlbWVudEJ5RG9jdW1lbnROYW1lZEl0ZW0oY29uc3QgQXRvbVN0cmluZ0ltcGwmLCBjb25zdCBU
cmVlU2NvcGUmKSBjb25zdDsKIApAQCAtNzAsNiArNzAsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBLZXlNYXRjaGluZ0Z1bmN0aW9uPgogICAgIEVsZW1lbnQq
IGdldChjb25zdCBBdG9tU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYsIGNvbnN0IEtleU1h
dGNoaW5nRnVuY3Rpb24mKSBjb25zdDsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5TWF0Y2hp
bmdGdW5jdGlvbj4KKyAgICBWZWN0b3I8RWxlbWVudCo+KiBnZXRBbGwoY29uc3QgQXRvbVN0cmlu
Z0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmLCBjb25zdCBLZXlNYXRjaGluZ0Z1bmN0aW9uJikgY29u
c3Q7CiAKICAgICBzdHJ1Y3QgTWFwRW50cnkgewogICAgICAgICBNYXBFbnRyeSgpIHsgfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS1pc29sYXRlZC10cmVlL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5LWlzb2xhdGVkLXRyZWUvVGVzdEV4
cGVjdGF0aW9ucwppbmRleCBiZmIyNjU2NDc1ZWYuLjAwMjQ4YWIzNWJhYyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS1pc29sYXRlZC10cmVlL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS1pc29sYXRlZC10cmVlL1Rlc3RFeHBlY3Rh
dGlvbnMKQEAgLTksNiArOSw5IEBAIGFjY2Vzc2liaWxpdHkvc2xpZGVyLXdpdGgtbG9zdC1yZW5k
ZXJlci5odG1sIFsgVGltZW91dCBdCiBhY2Nlc3NpYmlsaXR5L21hYy9jb21ib2JveC1hY3RpdmVk
ZXNjZW5kYW50LW5vdGlmaWNhdGlvbnMuaHRtbCBbIFRpbWVvdXQgXQogYWNjZXNzaWJpbGl0eS9t
YWMvcmVsYXRpb25zaGlwcy1pbi1mcmFtZXMuaHRtbCBbIFRpbWVvdXQgXQogCisjIFRpbWVzIG91
dCBiZWNhdXNlIGBpbm5lclRleHRgIGNoYW5nZXMgb24gbGlua2VkIDxsYWJlbD5zIGRvbid0IHVw
ZGF0ZSBjYWNoZWQgQVhUaXRsZSB2YWx1ZS4KK2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFiZWwt
aW5wdXQuaHRtbCBbIFRpbWVvdXQgXQorCiAjIFRleHQgZmFpbHVyZXMKIGFjY2Vzc2liaWxpdHkv
YXJpYS1jdXJyZW50Lmh0bWwgWyBGYWlsdXJlIF0KIGFjY2Vzc2liaWxpdHkvYXJpYS1sYWJlbGxl
ZGJ5LW92ZXJyaWRlcy1hcmlhLWxhYmVsLmh0bWwgWyBGYWlsdXJlIF0KQEAgLTUxLDcgKzU0LDYg
QEAgYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLW5lc3RlZC5odG1sIFsgRmFp
bHVyZSBdCiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtd2l0aC1zdWJmb2N1
cy5odG1sIFsgRmFpbHVyZSBdCiBhY2Nlc3NpYmlsaXR5L3NsaWRlci13aXRoLWxvc3QtcmVuZGVy
ZXIuaHRtbCBbIEZhaWx1cmUgXQogYWNjZXNzaWJpbGl0eS90ZXh0YXJlYS1pbnNlcnRpb24tcG9p
bnQtbGluZS1udW1iZXIuaHRtbCBbIEZhaWx1cmUgXQotYWNjZXNzaWJpbGl0eS90aXRsZS11aS1l
bGVtZW50LWNvcnJlY3RuZXNzLmh0bWwgWyBGYWlsdXJlIF0KIGFjY2Vzc2liaWxpdHkvdGV4dC1h
bHRlcm5hdGl2ZS1jYWxjdWxhdGlvbi1oaWRkZW4tbm9kZXMuaHRtbCBbIEZhaWx1cmUgXQogYWNj
ZXNzaWJpbGl0eS9tYXRoLW11bHRpc2NyaXB0LWF0dHJpYnV0ZXMuaHRtbCBbIEZhaWx1cmUgXQog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L211bHRpcGxlLWxhYmVsLWlu
cHV0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFi
ZWwtaW5wdXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uMGViMjc1MWUxZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBA
QAorVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCBpbnB1dHMgd2l0aCBtdWx0aXBsZSBsYWJlbHMgaGF2
ZSB0aGUgY29ycmVjdCBhY2Nlc3NpYmlsaXR5IHRleHQgZXhwb3NlZC4KKworSW5pdGlhbCBBWCB0
ZXh0OgorCUFYVGl0bGU6IEVudGVyIHlvdXIgY29sb3IKKwlBWERlc2NyaXB0aW9uOgorCUFYSGVs
cDoKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDInKS5yZW1vdmUoKTsKKwlBWFRpdGxl
OiBFbnRlciBjb2xvcgorCUFYRGVzY3JpcHRpb246CisJQVhIZWxwOgorZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2xhYmVsMycpLmlubmVyVGV4dCA9ICdjaG9pY2UnOworCUFYVGl0bGU6IEVudGVy
IGNob2ljZQorCUFYRGVzY3JpcHRpb246CisJQVhIZWxwOgorCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyBFbnRlciBjaG9pY2UKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFiZWwtaW5wdXQuaHRtbCBiL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFiZWwtaW5wdXQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU5MjRkYmUxYWJlOQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFiZWwtaW5wdXQu
aHRtbApAQCAtMCwwICsxLDQ2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9h
Y2Nlc3NpYmlsaXR5LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxpbnB1dCBpZD0i
aW5wdXQiIHR5cGU9InRleHQiPgorPGxhYmVsIGZvcj0iaW5wdXQiPkVudGVyPC9sYWJlbD4KKzxs
YWJlbCBpZD0ibGFiZWwyIiBmb3I9ImlucHV0Ij55b3VyPC9sYWJlbD4KKzxsYWJlbCBpZD0ibGFi
ZWwzIiBmb3I9ImlucHV0Ij5jb2xvcjwvbGFiZWw+CisKKzxzY3JpcHQ+Cit2YXIgb3V0cHV0ID0g
IlRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgaW5wdXRzIHdpdGggbXVsdGlwbGUgbGFiZWxzIGhhdmUg
dGhlIGNvcnJlY3QgYWNjZXNzaWJpbGl0eSB0ZXh0IGV4cG9zZWQuXG5cbiI7CisKK2lmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9
IHRydWU7CisKKyAgICB2YXIgaW5wdXQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoImlucHV0Iik7CisgICAgb3V0cHV0ICs9IGBJbml0aWFsIEFYIHRleHQ6
IFxuJHtwbGF0Zm9ybVRleHRBbHRlcm5hdGl2ZXMoaW5wdXQpfVxuYDsKKworICAgIG91dHB1dCAr
PSBldmFsQW5kUmV0dXJuKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWwyJykucmVtb3Zl
KCk7Iik7CisgICAgdmFyIG5ld1RleHQ7CisgICAgc2V0VGltZW91dChhc3luYyBmdW5jdGlvbigp
IHsKKyAgICAgICAgYXdhaXQgd2FpdEZvcigoKSA9PiB7CisgICAgICAgICAgICBuZXdUZXh0ID0g
cGxhdGZvcm1UZXh0QWx0ZXJuYXRpdmVzKGlucHV0KTsKKyAgICAgICAgICAgIHJldHVybiAhbmV3
VGV4dC5pbmNsdWRlcygieW91ciIpOworICAgICAgICB9KTsKKyAgICAgICAgb3V0cHV0ICs9IGAk
e25ld1RleHR9XG5gOworCisgICAgICAgIG91dHB1dCArPSBldmFsQW5kUmV0dXJuKCJkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbGFiZWwzJykuaW5uZXJUZXh0ID0gJ2Nob2ljZSc7Iik7CisgICAg
ICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4geworICAgICAgICAgICAgbmV3VGV4dCA9IHBsYXRmb3Jt
VGV4dEFsdGVybmF0aXZlcyhpbnB1dCk7CisgICAgICAgICAgICByZXR1cm4gIW5ld1RleHQuaW5j
bHVkZXMoImNvbG9yIik7CisgICAgICAgIH0pOworICAgICAgICBvdXRwdXQgKz0gYCR7bmV3VGV4
dH1cbmA7CisKKyAgICAgICAgZGVidWcob3V0cHV0KTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7
CisgICAgfSwgMCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVu
dC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQKaW5kZXggYmQ4MmEzM2E4ZWVjLi5mNDNiZmIyNzQ2
ZjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVu
dC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS90aXRsZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dApAQCAtMSwyMiArMSwy
NSBAQAogVGhpcyB0ZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IHdvcmtzIGNvcnJlY3RseSBldmVu
IHdoZW4gdGhpbmdzIGNoYW5nZSBkeW5hbWljYWxseS4KIAotT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorUEFTUzogYXhFbGVtZW50KCdjb250cm9sMScpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVh
bChheEVsZW1lbnQoJ2xhYmVsMScpKSA9PT0gdHJ1ZQorUEFTUzogYXhFbGVtZW50KCdjb250cm9s
MicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMicpKSA9PT0gdHJ1
ZQorUEFTUzogaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sMycpKSA9PT0gZmFs
c2UKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDMnKS5zZXRBdHRyaWJ1dGUoJ2Zvcics
ICdjb250cm9sMycpOworUEFTUzogYXhFbGVtZW50KCdjb250cm9sMycpLnRpdGxlVUlFbGVtZW50
KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMycpKSA9PT0gdHJ1ZQorbGFiZWw0RWxlbWVudCA9
IGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmlidXRlKCdsYWJlbDQnLCAnY29udHJvbDQnKTsK
K1BBU1M6IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDQnKSkgPT09IGZhbHNl
Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQobGFiZWw0
RWxlbWVudCk7CitQQVNTOiBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0Jykp
ID09PSB0cnVlCitQQVNTOiBheEVsZW1lbnQoJ2NvbnRyb2w0JykudGl0bGVVSUVsZW1lbnQoKS5p
c0VxdWFsKGF4RWxlbWVudCgnbGFiZWw0JykpID09PSB0cnVlCitsYWJlbDRFbGVtZW50LnBhcmVu
dEVsZW1lbnQucmVtb3ZlQ2hpbGQobGFiZWw0RWxlbWVudCk7CitQQVNTOiBoYXNUaXRsZVVJRWxl
bWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpID09PSBmYWxzZQorUEFTUzogaGFzVGl0bGVVSUVs
ZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNScpKSA9PT0gZmFsc2UKK3JlcGFyZW50Tm9kZUludG9D
b250YWluZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyb2w1JyksIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdsYWJlbDUnKSk7CitQQVNTOiBheEVsZW1lbnQoJ2NvbnRyb2w1JykudGl0
bGVVSUVsZW1lbnQoKSAhPSBudWxsID09PSB0cnVlCitQQVNTOiBheEVsZW1lbnQoJ2NvbnRyb2w1
JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw1JykpID09PSB0cnVl
CitQQVNTOiBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w2JykpID09PSBmYWxz
ZQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNmMnKS5yZW1vdmUoKQorUEFTUzogYXhF
bGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xh
YmVsNmInKSkgPT09IHRydWUKIAotCi1QQVNTIGF4RWxlbWVudCgnY29udHJvbDEnKS50aXRsZVVJ
RWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDEnKSkgaXMgdHJ1ZQotUEFTUyBheEVs
ZW1lbnQoJ2NvbnRyb2wyJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFi
ZWwyJykpIGlzIHRydWUKLVBBU1MgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9s
MycpKSBpcyBmYWxzZQotUEFTUyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWwzJykuc2V0
QXR0cmlidXRlKCdmb3InLCAnY29udHJvbDMnKTsgYXhFbGVtZW50KCdjb250cm9sMycpLnRpdGxl
VUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMycpKSBpcyB0cnVlCi1QQVNTIHZh
ciBsYWJlbDRFbGVtZW50ID0gY3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1dGUoJ2xhYmVs
NCcsICdjb250cm9sNCcpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0Jykp
IGlzIGZhbHNlCi1QQVNTIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBl
bmRDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250
cm9sNCcpKSBpcyB0cnVlCi1QQVNTIGF4RWxlbWVudCgnY29udHJvbDQnKS50aXRsZVVJRWxlbWVu
dCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDQnKSkgaXMgdHJ1ZQotUEFTUyBsYWJlbDRFbGVt
ZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxlVUlF
bGVtZW50KGF4RWxlbWVudCgnY29udHJvbDQnKSkgaXMgZmFsc2UKLVBBU1MgaGFzVGl0bGVVSUVs
ZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNScpKSBpcyBmYWxzZQotUEFTUyByZXBhcmVudE5vZGVJ
bnRvQ29udGFpbmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9sNScpLCBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbGFiZWw1JykpOyBheEVsZW1lbnQoJ2NvbnRyb2w1JykudGl0bGVV
SUVsZW1lbnQoKSAhPSBudWxsIGlzIHRydWUKLVBBU1MgYXhFbGVtZW50KCdjb250cm9sNScpLnRp
dGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNScpKSBpcyB0cnVlCi1QQVNT
IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50
KCdsYWJlbDZiJykpIGlzIHRydWUKLVBBU1MgbmV3TGFiZWw2RWxlbWVudCA9IGNyZWF0ZUxhYmVs
V2l0aElkQW5kRm9yQXR0cmlidXRlKCdsYWJlbDZhJywgJ2NvbnRyb2w2Jyk7IGRvY3VtZW50LmJv
ZHkuaW5zZXJ0QmVmb3JlKG5ld0xhYmVsNkVsZW1lbnQsIGRvY3VtZW50LmJvZHkuZmlyc3RDaGls
ZCk7IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVt
ZW50KCdsYWJlbDZhJykpIGlzIHRydWUKLVBBU1MgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChu
ZXdMYWJlbDZFbGVtZW50KTsgYXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCku
aXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNmInKSkgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbCBiL0xheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sCmluZGV4
IGI1MTZiMmExNjg3Ni4uYTk3MmE5MGQzOGIxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbApAQCAt
MSwxMCArMSwxMiBAQAotPCFET0NUWVBFIEhUTUw+Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+CiA8aHRtbD4KLTxib2R5PgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KIAogPGRpdiBpZD0iY29udGFpbmVyIj4KLQogICA8ZGl2PgogICAgIDxsYWJlbCBpZD0ibGFi
ZWwxIiBmb3I9ImNvbnRyb2wxIj5MYWJlbCAxPC9sYWJlbD4KICAgICA8aW5wdXQgaWQ9ImNvbnRy
b2wxIiB0eXBlPSJ0ZXh0Ij4KQEAgLTQwLDExICs0MiwxMiBAQAogICA8L2Rpdj4KIDwvZGl2Pgog
Ci08ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KIDxzY3JpcHQ+Ci1kZXNjcmlwdGlvbigiVGhpcyB0
ZXN0cyB0aGF0IHRpdGxlVUlFbGVtZW50IHdvcmtzIGNvcnJlY3RseSBldmVuIHdoZW4gdGhpbmdz
IGNoYW5nZSBkeW5hbWljYWxseS4iKTsKK3ZhciBvdXRwdXQgPSAiVGhpcyB0ZXN0cyB0aGF0IHRp
dGxlVUlFbGVtZW50IHdvcmtzIGNvcnJlY3RseSBldmVuIHdoZW4gdGhpbmdzIGNoYW5nZSBkeW5h
bWljYWxseS5cblxuIjsKKworaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgewor
ICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKIAotaWYgKHdpbmRvdy50ZXN0UnVubmVy
ICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgewogICAgIGZ1bmN0aW9uIGhhc1Rp
dGxlVUlFbGVtZW50KGF4RWxlbWVudCkgewogICAgICAgICB2YXIgbGFiZWwxID0gYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJsYWJlbDEiKTsKICAgICAgICAg
dmFyIHRpdGxlVUlFbGVtZW50ID0gYXhFbGVtZW50LnRpdGxlVUlFbGVtZW50KCk7CkBAIC03MCw0
MCArNzMsNDUgQEAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgewogICAgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKGlkKTsKICAgICB9CiAKLSAgICBzaG91bGRCZSgiYXhFbGVtZW50
KCdjb250cm9sMScpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMScp
KSIsICJ0cnVlIik7Ci0KLSAgICBzaG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sMicpLnRpdGxl
VUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMicpKSIsICJ0cnVlIik7CisgICAg
b3V0cHV0ICs9IGV4cGVjdCgiYXhFbGVtZW50KCdjb250cm9sMScpLnRpdGxlVUlFbGVtZW50KCku
aXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMScpKSIsICJ0cnVlIik7CisgICAgb3V0cHV0ICs9IGV4
cGVjdCgiYXhFbGVtZW50KCdjb250cm9sMicpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVs
ZW1lbnQoJ2xhYmVsMicpKSIsICJ0cnVlIik7CiAKKyAgICB2YXIgbGFiZWw0RWxlbWVudDsKICAg
ICAvLyBUZXN0IGNoYW5naW5nIHRoZSAiZm9yIiBhdHRyaWJ1dGUgZHluYW1pY2FsbHkuCi0gICAg
c2hvdWxkQmUoImhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDMnKSkiLCAiZmFs
c2UiKTsKLSAgICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsMycpLnNl
dEF0dHJpYnV0ZSgnZm9yJywgJ2NvbnRyb2wzJyk7IGF4RWxlbWVudCgnY29udHJvbDMnKS50aXRs
ZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDMnKSkiLCAidHJ1ZSIpOwotCi0g
ICAgLy8gVGVzdCB1bmF0dGFjaGVkIGxhYmVsIGVsZW1lbnQgdGhhdCdzIHN1YnNlcXVlbnRseSBh
dHRhY2hlZC4KLSAgICB2YXIgbGFiZWw0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImxhYmVsIik7Ci0gICAgbGFiZWw0RWxlbWVudC5pZCA9ICJsYWJlbDQiOwotICAgIGxhYmVsNEVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJmb3IiLCAiY29udHJvbDQiKTsKLSAgICBsYWJlbDRFbGVtZW50
LmlubmVyVGV4dCA9ICJMYWJlbCA0IjsKLSAgICBzaG91bGRCZSgidmFyIGxhYmVsNEVsZW1lbnQg
PSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0ZSgnbGFiZWw0JywgJ2NvbnRyb2w0Jyk7
IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDQnKSkiLCAiZmFsc2UiKTsKLSAg
ICBzaG91bGRCZSgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENo
aWxkKGxhYmVsNEVsZW1lbnQpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0
JykpIiwgInRydWUiKTsKLSAgICBzaG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sNCcpLnRpdGxl
VUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNCcpKSIsICJ0cnVlIik7Ci0KLSAg
ICAvLyBUZXN0IHdoYXQgaGFwcGVucyB3aGVuIHRoZSBsYWJlbCBpcyBkZXRhY2hlZC4KLSAgICBz
aG91bGRCZSgibGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxhYmVsNEVs
ZW1lbnQpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIiwgImZhbHNl
Iik7Ci0KLSAgICAvLyBUZXN0IGxhYmVsIHRoYXQgZ2V0cyBhIGNvbnRyb2wgcmVwYXJlbnRlZCBp
bnRvIGl0LgotICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRy
b2w1JykpIiwgImZhbHNlIik7Ci0KLSAgICBzaG91bGRCZSgicmVwYXJlbnROb2RlSW50b0NvbnRh
aW5lcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udHJvbDUnKSwgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2xhYmVsNScpKTsgYXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50
KCkgIT0gbnVsbCIsICJ0cnVlIik7Ci0gICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJvbDUn
KS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDUnKSkiLCAidHJ1ZSIp
OwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBmaXJzdCBsYWJlbCBpcyByZXR1cm5lZCwgZXZlbiBh
cyBsYWJlbHMgYXJlIGFkZGVkIGFuZCByZW1vdmVkLgotICAgIHNob3VsZEJlKCJheEVsZW1lbnQo
J2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2Yicp
KSIsICJ0cnVlIik7Ci0gICAgc2hvdWxkQmUoIm5ld0xhYmVsNkVsZW1lbnQgPSBjcmVhdGVMYWJl
bFdpdGhJZEFuZEZvckF0dHJpYnV0ZSgnbGFiZWw2YScsICdjb250cm9sNicpOyBkb2N1bWVudC5i
b2R5Lmluc2VydEJlZm9yZShuZXdMYWJlbDZFbGVtZW50LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hp
bGQpOyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxl
bWVudCgnbGFiZWw2YScpKSIsICJ0cnVlIik7Ci0gICAgc2hvdWxkQmUoImRvY3VtZW50LmJvZHku
cmVtb3ZlQ2hpbGQobmV3TGFiZWw2RWxlbWVudCk7IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRs
ZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykpIiwgInRydWUiKTsKLQot
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOworICAgIG91dHB1dCArPSBleHBlY3QoImhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVu
dCgnY29udHJvbDMnKSkiLCAiZmFsc2UiKTsKKyAgICBvdXRwdXQgKz0gZXZhbEFuZFJldHVybigi
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsMycpLnNldEF0dHJpYnV0ZSgnZm9yJywgJ2Nv
bnRyb2wzJyk7Iik7CisgICAgc2V0VGltZW91dChhc3luYyBmdW5jdGlvbigpIHsKKyAgICAgICAg
b3V0cHV0ICs9IGF3YWl0IGV4cGVjdEFzeW5jKCJheEVsZW1lbnQoJ2NvbnRyb2wzJykudGl0bGVV
SUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWwzJykpIiwgInRydWUiKTsKKworICAg
ICAgICAvLyBUZXN0IHVuYXR0YWNoZWQgbGFiZWwgZWxlbWVudCB0aGF0J3Mgc3Vic2VxdWVudGx5
IGF0dGFjaGVkLgorICAgICAgICBvdXRwdXQgKz0gZXZhbEFuZFJldHVybigibGFiZWw0RWxlbWVu
dCA9IGNyZWF0ZUxhYmVsV2l0aElkQW5kRm9yQXR0cmlidXRlKCdsYWJlbDQnLCAnY29udHJvbDQn
KTsiKTsKKyAgICAgICAgb3V0cHV0ICs9IGF3YWl0IGV4cGVjdEFzeW5jKCJoYXNUaXRsZVVJRWxl
bWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIiwgImZhbHNlIik7CisgICAgICAgIG91dHB1dCAr
PSBldmFsQW5kUmV0dXJuKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBw
ZW5kQ2hpbGQobGFiZWw0RWxlbWVudCk7Iik7CisgICAgICAgIG91dHB1dCArPSBhd2FpdCBleHBl
Y3RBc3luYygiaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSIsICJ0cnVl
Iik7CisgICAgICAgIG91dHB1dCArPSBhd2FpdCBleHBlY3RBc3luYygiYXhFbGVtZW50KCdjb250
cm9sNCcpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNCcpKSIsICJ0
cnVlIik7CisKKyAgICAgICAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgbGFiZWwgaXMg
ZGV0YWNoZWQuCisgICAgICAgIG91dHB1dCArPSBldmFsQW5kUmV0dXJuKCJsYWJlbDRFbGVtZW50
LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGFiZWw0RWxlbWVudCk7Iik7CisgICAgICAgIG91
dHB1dCArPSBhd2FpdCBleHBlY3RBc3luYygiaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdj
b250cm9sNCcpKSIsICJmYWxzZSIpOworCisgICAgICAgIC8vIFRlc3QgbGFiZWwgdGhhdCBnZXRz
IGEgY29udHJvbCByZXBhcmVudGVkIGludG8gaXQuCisgICAgICAgIG91dHB1dCArPSBleHBlY3Qo
Imhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDUnKSkiLCAiZmFsc2UiKTsKKyAg
ICAgICAgb3V0cHV0ICs9IGV2YWxBbmRSZXR1cm4oInJlcGFyZW50Tm9kZUludG9Db250YWluZXIo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRyb2w1JyksIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdsYWJlbDUnKSk7Iik7CisgICAgICAgIG91dHB1dCArPSBhd2FpdCBleHBlY3RBc3luYygi
YXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCIsICJ0cnVlIik7
CisgICAgICAgIG91dHB1dCArPSBhd2FpdCBleHBlY3RBc3luYygiYXhFbGVtZW50KCdjb250cm9s
NScpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNScpKSIsICJ0cnVl
Iik7CisKKyAgICAgICAgLy8gV2hlbiB0aGVyZSBpcyBubyBzaW5ndWxhciB0aXRsZSBVSSBlbGVt
ZW50IGZvciBhbiBlbGVtZW50IChlLmcuIG11bHRpcGxlIDxsYWJlbCBmb3I9InNvbWUtaWQiPiks
IG5vbmUgc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZpcnN0
IGxhYmVsIGlzIHJldHVybmVkLCBldmVuIGFzIGxhYmVscyBhcmUgYWRkZWQgYW5kIHJlbW92ZWQu
CisgICAgICAgIG91dHB1dCArPSBleHBlY3QoImhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgn
Y29udHJvbDYnKSkiLCAiZmFsc2UiKTsKKyAgICAgICAgb3V0cHV0ICs9IGV2YWxBbmRSZXR1cm4o
ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDZjJykucmVtb3ZlKCkiKTsKKyAgICAgICAg
b3V0cHV0ICs9IGF3YWl0IGV4cGVjdEFzeW5jKCJheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVV
SUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YicpKSIsICJ0cnVlIik7CisgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOworCisgICAgICAgIGRlYnVnKG91dHB1dCk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgIH0sIDApOwogfQotCiA8L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4KKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFi
ZWwtaW5wdXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2li
aWxpdHkvbXVsdGlwbGUtbGFiZWwtaW5wdXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2ZiNjRiYmRjYzViCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFiZWwtaW5w
dXQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHRoYXQg
aW5wdXRzIHdpdGggbXVsdGlwbGUgbGFiZWxzIGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzaWJpbGl0
eSB0ZXh0IGV4cG9zZWQuCisKK0luaXRpYWwgQVggdGV4dDoKKwlBWExhYmVsOiBFbnRlciB5b3Vy
IGNvbG9yCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWwyJykucmVtb3ZlKCk7CisJQVhM
YWJlbDogRW50ZXIgY29sb3IKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDMnKS5pbm5l
clRleHQgPSAnY2hvaWNlJzsKKwlBWExhYmVsOiBFbnRlciBjaG9pY2UKKworUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisgRW50ZXIgY2hvaWNlCg==
</data>
<flag name="commit-queue"
          id="494472"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>467053</attachid>
            <date>2023-07-15 18:36:03 -0700</date>
            <delta_ts>2023-07-18 19:03:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152663-20230715183602.patch</filename>
            <type>text/plain</type>
            <size>38966</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSAwYTQ2ZDkzZGMyZDBlMWE2NDAyOWJhNDEzYzhmNWZkMDBlZjA4NDVmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU2F0LCAxNSBKdWwgMjAyMyAxNTo1Mzo0NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEFYOiBp
bmNvcnJlY3QgYWNjZXNzaWJsZSBuYW1lIGZyb20gbXVsdGlwbGUgbGFiZWwgZWxlbWVudHMKIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI2NjMgcmRhcjovL3Byb2Js
ZW0vMjQwMzM0ODIKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKUGVyIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9odG1sLWFhbS0xLjAvI2lucHV0LXR5cGUtdGV4dC1pbnB1dC10eXBlLXBhc3N3
b3JkLWlucHV0LXR5cGUtbnVtYmVyLWlucHV0LXR5cGUtc2VhcmNoLWlucHV0LXR5cGUtdGVsLWlu
cHV0LXR5cGUtZW1haWwtaW5wdXQtdHlwZS11cmwtYW5kLXRleHRhcmVhLWVsZW1lbnQtYWNjZXNz
aWJsZS1uYW1lLWNvbXB1dGF0aW9uOgoKPiBPdGhlcndpc2UgdXNlIHRoZSBhc3NvY2lhdGVkIGxh
YmVsIGVsZW1lbnQocykgYWNjZXNzaWJsZSBuYW1lKHMpIC0gaWYgbW9yZSB0aGFuIG9uZSBsYWJl
bCBpcyBhc3NvY2lhdGVkOyBjb25jYXRlbmF0ZSBieSBET00gb3JkZXIsIGRlbGltaXRlZCBieSBz
cGFjZXMuCgpQcmlvciB0byB0aGlzIHBhdGNoLCB3ZSBvbmx5IHVzZWQgYWNjZXNzaWJsZSB0ZXh0
IGZyb20gdGhlIGZpcnN0IGFzc29jaWF0ZWQgbGFiZWwgZWxlbWVudC4KCiogTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS1pc29sYXRlZC10cmVlL1Rlc3RFeHBlY3RhdGlvbnM6CiogTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1dC1leHBlY3RlZC50eHQ6IEFkZGVk
LgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFiZWwtaW5wdXQuaHRtbDog
QWRkZWQuCiogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJl
Y3RuZXNzLWV4cGVjdGVkLnR4dDoKKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MuaHRtbDoKKiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvYWNj
ZXNzaWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1dC1leHBlY3RlZC50eHQ6IEFkZGVkLgoqIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwOgoo
V2ViQ29yZTo6bGFiZWxGb3JOb2RlKToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjpjaGVja2JveE9yUmFkaW9SZWN0IGNvbnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Ojpjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCBjb25zdCk6CihXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4dEZvckxhYmVsRWxlbWVudHMgY29uc3Qp
OgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlRWxlbWVudFRleHQgY29u
c3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlVUlFbGVtZW50IGNv
bnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpleHBvc2VzVGl0bGVVSUVs
ZW1lbnQgY29uc3QpOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRpdGxlIGNv
bnN0KToKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpsYWJlbEZvckVsZW1lbnQg
Y29uc3QpOiBEZWxldGVkLgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHRG
b3JMYWJlbEVsZW1lbnQgY29uc3QpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaDoKKiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2NvY29hL0FjY2Vzc2liaWxpdHlPYmplY3RDb2NvYS5tbToKKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmRlc2NyaXB0aW9uQXR0cmlidXRlVmFsdWUgY29uc3QpOgooV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGVscFRleHRBdHRyaWJ1dGVWYWx1ZSBjb25zdCk6Ciog
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHA6CihXZWJDb3JlOjpUcmVlU2NvcGU6Omxh
YmVsRWxlbWVudEZvcklkKTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
Lmg6CiogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuY3BwOgooV2ViQ29y
ZTo6IGNvbnN0KToKKFdlYkNvcmU6OlRyZWVTY29wZU9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxh
YmVsRm9yQXR0cmlidXRlIGNvbnN0KTogRGVsZXRlZC4KKiBTb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlT3JkZXJlZE1hcC5oOgotLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcCB8IDE0NCArKysrKysrKysrKy0tLS0tLS0KIC4uLi9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmggICB8ICAgMyArLQogLi4uL2NvY29hL0FjY2Vzc2li
aWxpdHlPYmplY3RDb2NvYS5tbSAgICAgICAgIHwgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9kb20v
VHJlZVNjb3BlLmNwcCAgICAgICAgICAgICAgfCAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaCAgICAgICAgICAgICAgICB8ICAgMiArLQogU291cmNlL1dlYkNvcmUvZG9tL1Ry
ZWVTY29wZU9yZGVyZWRNYXAuY3BwICAgIHwgIDU0ICsrKystLS0KIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UcmVlU2NvcGVPcmRlcmVkTWFwLmggICAgICB8ICAgNCArLQogLi4uL1Rlc3RFeHBlY3RhdGlv
bnMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiAuLi4vbXVsdGlwbGUtbGFiZWwt
aW5wdXQtZXhwZWN0ZWQudHh0ICAgICAgICAgfCAgMTkgKysrCiAuLi4vYWNjZXNzaWJpbGl0eS9t
dWx0aXBsZS1sYWJlbC1pbnB1dC5odG1sICAgfCAgNDYgKysrKysrCiAuLi4vdGl0bGUtdWktZWxl
bWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQgfCAgMzUgKysrLS0KIC4uLi90aXRsZS11aS1l
bGVtZW50LWNvcnJlY3RuZXNzLmh0bWwgICAgICAgICB8ICA4MyArKysrKy0tLS0tCiAuLi4vbXVs
dGlwbGUtbGFiZWwtaW5wdXQtZXhwZWN0ZWQudHh0ICAgICAgICAgfCAgMTYgKysKIC4uLi90aXRs
ZS11aS1lbGVtZW50LWNvcnJlY3RuZXNzLWV4cGVjdGVkLnR4dCB8ICAyNiArKysrCiAuLi4vbXVs
dGlwbGUtbGFiZWwtaW5wdXQtZXhwZWN0ZWQudHh0ICAgICAgICAgfCAgMTMgKysKIDE1IGZpbGVz
IGNoYW5nZWQsIDMxMyBpbnNlcnRpb25zKCspLCAxNDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1dC1l
eHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L211bHRpcGxlLWxhYmVsLWlucHV0Lmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFiZWwtaW5wdXQtZXhwZWN0
ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9hY2Nl
c3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0CiBjcmVh
dGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2liaWxpdHkvbXVs
dGlwbGUtbGFiZWwtaW5wdXQtZXhwZWN0ZWQudHh0CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCA5ODIw
NDdiNDlhYjkuLjMzZjMzMjk2MzNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAgLTIxNiwxMCArMjE2
LDQyIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwYXJl
bnRPYmplY3QoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCitzdGF0aWMgVmVjdG9y
PEhUTUxMYWJlbEVsZW1lbnQqPiBsYWJlbHNGb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgYXV0
byogZWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSk7CisgICAgaWYg
KCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0xhYmVsYWJsZSgpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgY29uc3QgYXV0byYgaWQgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOworICAg
IGlmICghaWQuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChhdXRvKiB0cmVlU2NvcGVMYWJlbHMg
PSBlbGVtZW50LT50cmVlU2NvcGUoKS5sYWJlbEVsZW1lbnRzRm9ySWQoaWQpOyB0cmVlU2NvcGVM
YWJlbHMgJiYgIXRyZWVTY29wZUxhYmVscy0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBWZWN0
b3I8SFRNTExhYmVsRWxlbWVudCo+IGxhYmVsczsKKyAgICAgICAgICAgIGxhYmVscy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHRyZWVTY29wZUxhYmVscy0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGZv
ciAoYXV0byogbGFiZWwgOiAqdHJlZVNjb3BlTGFiZWxzKQorICAgICAgICAgICAgICAgIGxhYmVs
cy51bmNoZWNrZWRBcHBlbmQoJipkeW5hbWljRG93bmNhc3Q8SFRNTExhYmVsRWxlbWVudD4obGFi
ZWwpKTsKKyAgICAgICAgICAgIHJldHVybiBsYWJlbHM7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoYXV0byogbmVhcmVzdExhYmVsID0gYW5jZXN0b3JzT2ZUeXBlPEhUTUxMYWJlbEVsZW1l
bnQ+KCplbGVtZW50KS5maXJzdCgpKSB7CisgICAgICAgIC8vIE9ubHkgdXNlIHRoZSBuZWFyZXN0
IGxhYmVsIGlmIGl0IGlzbid0IHBvaW50aW5nIGF0IHNvbWV0aGluZyBlbHNlLgorICAgICAgICBj
b25zdCBhdXRvJiBmb3JBdHRyaWJ1dGUgPSBuZWFyZXN0TGFiZWwtPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oZm9yQXR0cik7CisgICAgICAgIGlmIChmb3JBdHRyaWJ1dGUuaXNFbXB0
eSgpIHx8IGZvckF0dHJpYnV0ZSA9PSBpZCkKKyAgICAgICAgICAgIHJldHVybiB7IG5lYXJlc3RM
YWJlbCB9OworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCitzdGF0aWMgSFRNTExhYmVsRWxl
bWVudCogbGFiZWxGb3JOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgYXV0byBsYWJlbHMgPSBsYWJl
bHNGb3JOb2RlKG5vZGUpOworICAgIHJldHVybiBsYWJlbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6
IGxhYmVscy5maXJzdCgpOworfQorCiBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjpjaGVja2JveE9yUmFkaW9SZWN0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBsYWJlbCA9IGxhYmVs
Rm9yRWxlbWVudChkeW5hbWljRG93bmNhc3Q8RWxlbWVudD4obm9kZSgpKSk7Ci0gICAgaWYgKCFs
YWJlbCB8fCAhbGFiZWwtPnJlbmRlcmVyKCkpCisgICAgYXV0byBsYWJlbHMgPSBsYWJlbHNGb3JO
b2RlKG5vZGUoKSk7CisgICAgaWYgKGxhYmVscy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBi
b3VuZGluZ0JveFJlY3QoKTsKIAogICAgIGF1dG8qIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpOwpA
QCAtMjI3LDkgKzI1OSwxNCBAQCBMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpj
aGVja2JveE9yUmFkaW9SZWN0KCkgY29uc3QKICAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94UmVj
dCgpOwogCiAgICAgLy8gQSBjaGVja2JveCBvciByYWRpbyBidXR0b24gc2hvdWxkIGVuY29tcGFz
cyBpdHMgbGFiZWwuCi0gICAgYXV0byBsYWJlbFJlY3QgPSBjYWNoZS0+Z2V0T3JDcmVhdGUobGFi
ZWwpLT5lbGVtZW50UmVjdCgpOwotICAgIGxhYmVsUmVjdC51bml0ZShib3VuZGluZ0JveFJlY3Qo
KSk7Ci0gICAgcmV0dXJuIGxhYmVsUmVjdDsKKyAgICBhdXRvIHNlbGZSZWN0ID0gYm91bmRpbmdC
b3hSZWN0KCk7CisgICAgZm9yIChhdXRvKiBsYWJlbCA6IGxhYmVscykgeworICAgICAgICBpZiAo
bGFiZWwtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBheExhYmVsID0gY2Fj
aGUtPmdldE9yQ3JlYXRlKGxhYmVsKSkKKyAgICAgICAgICAgICAgICBzZWxmUmVjdC51bml0ZShh
eExhYmVsLT5lbGVtZW50UmVjdCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2Vs
ZlJlY3Q7CiB9CiAKIExheW91dFJlY3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmVsZW1lbnRS
ZWN0KCkgY29uc3QKQEAgLTE2MTEsMzEgKzE2NDgsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y29ycmVzcG9uZGluZ0xhYmVsRm9yQ29udHJvbEVsZW1l
bgogICAgIGlmIChoYXNUZXh0QWx0ZXJuYXRpdmUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IGR5bmFtaWNEb3duY2FzdDxIVE1MRWxlbWVudD4o
bm9kZSgpKSkgewotICAgICAgICBpZiAoYXV0byogbGFiZWwgPSBsYWJlbEZvckVsZW1lbnQoZWxl
bWVudCkpCi0gICAgICAgICAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShs
YWJlbCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1IVE1MTGFiZWxFbGVtZW50
KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZWxlbWVudCkgfHwgIWRvd25j
YXN0PEhUTUxFbGVtZW50PihlbGVtZW50KS0+aXNMYWJlbGFibGUoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBpZCA9IGVsZW1lbnQtPmdldElkQXR0
cmlidXRlKCk7Ci0gICAgaWYgKCFpZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKEhUTUxMYWJl
bEVsZW1lbnQqIGxhYmVsID0gZWxlbWVudC0+dHJlZVNjb3BlKCkubGFiZWxFbGVtZW50Rm9ySWQo
aWQpKQotICAgICAgICAgICAgcmV0dXJuIGxhYmVsOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBu
ZWFyZXN0TGFiZWwgPSBhbmNlc3RvcnNPZlR5cGU8SFRNTExhYmVsRWxlbWVudD4oKmVsZW1lbnQp
LmZpcnN0KCkpIHsKLSAgICAgICAgLy8gT25seSB1c2UgdGhlIG5lYXJlc3QgbGFiZWwgaWYgaXQg
aXNuJ3QgcG9pbnRpbmcgYXQgc29tZXRoaW5nIGVsc2UuCi0gICAgICAgIGNvbnN0IGF1dG8mIGZv
ckF0dHJpYnV0ZSA9IG5lYXJlc3RMYWJlbC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihmb3JBdHRyKTsKLSAgICAgICAgaWYgKGZvckF0dHJpYnV0ZS5pc0VtcHR5KCkgfHwgZm9yQXR0
cmlidXRlID09IGlkKQotICAgICAgICAgICAgcmV0dXJuIG5lYXJlc3RMYWJlbDsKLSAgICB9Ci0g
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUobGFiZWxGb3JOb2RlKG5vZGUoKSkpOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OmFyaWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25zdApAQCAtMTc0MiwyMiAr
MTc1NSwzNCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0xhYmVsYWJsZSgpIGNv
bnN0CiAgICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVsZW1lbnQ+KCpub2RlKSB8fCBpc0NvbnRyb2wo
KSB8fCBpc1Byb2dyZXNzSW5kaWNhdG9yKCkgfHwgaXNNZXRlcigpOwogfQogCi1TdHJpbmcgQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnRleHRGb3JMYWJlbEVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkgY29uc3QKK1N0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGV4dEZvckxhYmVsRWxl
bWVudHMoVmVjdG9yPEhUTUxMYWJlbEVsZW1lbnQqPiYmIGxhYmVsRWxlbWVudHMpIGNvbnN0CiB7
Ci0gICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZygpOwotICAgIGlmICghaXM8SFRNTExhYmVsRWxl
bWVudD4oKmVsZW1lbnQpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGF1dG8qIGNhY2hl
ID0gYXhPYmplY3RDYWNoZSgpOworICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sLWFh
bS0xLjAvI2lucHV0LXR5cGUtdGV4dC1pbnB1dC10eXBlLXBhc3N3b3JkLWlucHV0LXR5cGUtbnVt
YmVyLWlucHV0LXR5cGUtc2VhcmNoLWlucHV0LXR5cGUtdGVsLWlucHV0LXR5cGUtZW1haWwtaW5w
dXQtdHlwZS11cmwtYW5kLXRleHRhcmVhLWVsZW1lbnQtYWNjZXNzaWJsZS1uYW1lLWNvbXB1dGF0
aW9uCisgICAgLy8gIi4uLmlmIG1vcmUgdGhhbiBvbmUgbGFiZWwgaXMgYXNzb2NpYXRlZDsgY29u
Y2F0ZW5hdGUgYnkgRE9NIG9yZGVyLCBkZWxpbWl0ZWQgYnkgc3BhY2VzLiIKKyAgICBTdHJpbmdC
dWlsZGVyIHJlc3VsdDsKKyAgICBmb3IgKGF1dG8qIGxhYmVsRWxlbWVudCA6IGxhYmVsRWxlbWVu
dHMpIHsKKyAgICAgICAgaWYgKCFsYWJlbEVsZW1lbnQpCisgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgIGF1dG8gb2JqZWN0Q2FjaGUgPSBheE9iamVjdENhY2hlKCk7Ci0gICAgaWYgKCFvYmpl
Y3RDYWNoZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgYXV0byBhcHBlbmRMYWJl
bCA9IFsmXSAoU3RyaW5nJiYgc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICBIVE1MTGFiZWxFbGVtZW50KiBs
YWJlbCA9IGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KGVsZW1lbnQpOwotICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB0aGVyZSdzIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgb24gdGhlIGxhYmVs
IGVsZW1lbnQuCi0gICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIGxhYmVsT2JqZWN0ID0gb2Jq
ZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKGxhYmVsKSkKLSAgICAgICAgcmVzdWx0ID0gbGFiZWxPYmpl
Y3QtPmFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKTsKLSAgICAKLSAgICByZXR1cm4gIXJlc3VsdC5p
c0VtcHR5KCkgPyByZXN1bHQgOiBhY2Nlc3NpYmxlTmFtZUZvck5vZGUobGFiZWwpOworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoIiAiKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShzdHJpbmcpKTsKKyAg
ICAgICAgfTsKKworICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlcmUncyBhcmlhLWxhYmVs
bGVkYnkgYXR0cmlidXRlIG9uIHRoZSBsYWJlbCBlbGVtZW50LgorICAgICAgICBhdXRvKiBheExh
YmVsID0gY2FjaGUgPyBjYWNoZS0+Z2V0T3JDcmVhdGUobGFiZWxFbGVtZW50KSA6IG51bGxwdHI7
CisgICAgICAgIGF1dG8gYXJpYUxhYmVsZWRCeVRleHQgPSBheExhYmVsID8gYXhMYWJlbC0+YXJp
YUxhYmVsZWRCeUF0dHJpYnV0ZSgpIDogU3RyaW5nKCk7CisgICAgICAgIGlmICghYXJpYUxhYmVs
ZWRCeVRleHQuaXNFbXB0eSgpKQorICAgICAgICAgICAgYXBwZW5kTGFiZWwoV1RGTW92ZShhcmlh
TGFiZWxlZEJ5VGV4dCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcHBlbmRMYWJlbChh
Y2Nlc3NpYmxlTmFtZUZvck5vZGUobGFiZWxFbGVtZW50KSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogSFRNTExhYmVsRWxlbWVudCogQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmxhYmVsRWxlbWVudENvbnRhaW5lcigpIGNvbnN0CkBAIC0xNzc2LDI0ICsxODAx
LDIwIEBAIEhUTUxMYWJlbEVsZW1lbnQqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpsYWJlbEVs
ZW1lbnRDb250YWluZXIoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0
aXRsZUVsZW1lbnRUZXh0KFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4mIHRleHRPcmRlcikgY29u
c3QKIHsKLSAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOworICAgIFJlZlB0ciBub2RlID0g
dGhpcy0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IGlmIChpc0xhYmVsYWJsZSgpKSB7Ci0gICAgICAgIGlmIChIVE1MTGFiZWxFbGVtZW50KiBsYWJl
bCA9IGxhYmVsRm9yRWxlbWVudChkb3duY2FzdDxFbGVtZW50Pihub2RlKSkpIHsKLSAgICAgICAg
ICAgIFN0cmluZyBpbm5lclRleHQgPSB0ZXh0Rm9yTGFiZWxFbGVtZW50KGxhYmVsKTsKLQotICAg
ICAgICAgICAgYXV0byBvYmplY3RDYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgICAg
IC8vIE9ubHkgdXNlIHRoZSA8bGFiZWw+IHRleHQgaWYgdGhlcmUncyBubyBBUklBIG92ZXJyaWRl
LgotICAgICAgICAgICAgaWYgKG9iamVjdENhY2hlICYmICFpbm5lclRleHQuaXNFbXB0eSgpICYm
ICFhcmlhQWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgdGV4dE9y
ZGVyLmFwcGVuZChBY2Nlc3NpYmlsaXR5VGV4dChpbm5lclRleHQsIGlzTWV0ZXIoKSA/IEFjY2Vz
c2liaWxpdHlUZXh0U291cmNlOjpBbHRlcm5hdGl2ZSA6IEFjY2Vzc2liaWxpdHlUZXh0U291cmNl
OjpMYWJlbEJ5RWxlbWVudCkpOworICAgIC8vIE9ubHkgdXNlIDxsYWJlbD4gdGV4dCBpZiB0aGVy
ZSdzIG5vIEFSSUEgb3ZlcnJpZGUuCisgICAgaWYgKGlzTGFiZWxhYmxlKCkgJiYgIWFyaWFBY2Nl
c3NpYmlsaXR5RGVzY3JpcHRpb24oKSkgeworICAgICAgICBTdHJpbmcgbGFiZWxUZXh0ID0gdGV4
dEZvckxhYmVsRWxlbWVudHMobGFiZWxzRm9yTm9kZShub2RlLmdldCgpKSk7CisgICAgICAgIGlm
ICghbGFiZWxUZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGV4dE9yZGVyLmFwcGVuZChB
Y2Nlc3NpYmlsaXR5VGV4dChXVEZNb3ZlKGxhYmVsVGV4dCksIGlzTWV0ZXIoKSA/IEFjY2Vzc2li
aWxpdHlUZXh0U291cmNlOjpBbHRlcm5hdGl2ZSA6IEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpM
YWJlbEJ5RWxlbWVudCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQog
ICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHRpdGxlVUlFbGVtZW50ID0gdGhpcy0+dGl0
bGVVSUVsZW1lbnQoKTsKLSAgICBpZiAodGl0bGVVSUVsZW1lbnQpCisgICAgaWYgKHRpdGxlVUlF
bGVtZW50KCkpCiAgICAgICAgIHRleHRPcmRlci5hcHBlbmQoQWNjZXNzaWJpbGl0eVRleHQoU3Ry
aW5nKCksIEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpMYWJlbEJ5RWxlbWVudCkpOwogfQogCkBA
IC0xODA1LDcgKzE4MjYsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6dGl0bGVVSUVsZW1lbnQoKSBjb25zdAogICAgIGlmIChpc0ZpZ3VyZUVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIGNhcHRpb25Gb3JGaWd1cmUoKTsKIAotICAgIHJldHVybiBheE9i
amVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGxhYmVsRm9yRWxlbWVudChkeW5hbWljRG93bmNhc3Q8
RWxlbWVudD4obm9kZSgpKSkpOworICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKGxhYmVsRm9yTm9kZShub2RlKCkpKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6ZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkgY29uc3QKQEAgLTE4MjUsNyArMTg0NiwxMiBA
QCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpleHBvc2VzVGl0bGVVSUVsZW1lbnQoKSBj
b25zdAogICAgIC8vIFdoZW4gPGxhYmVsPiBlbGVtZW50IGhhcyBhcmlhLWxhYmVsIG9yIGFyaWEt
bGFiZWxsZWRieSBvbiBpdCwgd2Ugc2hvdWxkbid0IGV4cG9zZSBpdCBhcyB0aGUKICAgICAvLyB0
aXRsZVVJRWxlbWVudCwgb3RoZXJ3aXNlIGl0cyBpbm5lciB0ZXh0IHdpbGwgYmUgYW5ub3VuY2Vk
IGJ5IGEgc2NyZWVucmVhZGVyLgogICAgIGlmIChpc0xhYmVsYWJsZSgpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChkeW5hbWljRG93bmNhc3Q8RWxlbWVudD4o
bm9kZSgpKSkpIHsKKyAgICAgICAgYXV0byBsYWJlbHMgPSBsYWJlbHNGb3JOb2RlKG5vZGUoKSk7
CisgICAgICAgIC8vIElmIHRoaXMgZWxlbWVudCBpcyBhc3NvY2lhdGVkIHdpdGggbXVsdGlwbGUg
bGFiZWxzICh0aXRsZSBVSSBlbGVtZW50cyksIHRoZW4gY2xhaW1pbmcgdG8gZXhwb3NlCisgICAg
ICAgIC8vIGEgc2luZ2xlIHRpdGxlIFVJIGVsZW1lbnQgaXMgbm90IGNvcnJlY3QgYW5kIHdpbGwg
cmVzdWx0IGluIHNvbWUgQVRzIG91dHB1dHRpbmcgdGhlIHdyb25nIHRoaW5nLgorICAgICAgICBp
ZiAobGFiZWxzLnNpemUoKSA+PSAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoYXV0byogbGFiZWwgPSBsYWJlbHMuaXNFbXB0eSgpID8gbnVsbHB0ciA6IGxhYmVsc1sw
XSkgewogICAgICAgICAgICAgaWYgKCFsYWJlbC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbihhcmlhX2xhYmVsQXR0cikuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYWJlbE9iamVjdCA9
IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobGFiZWwpKSB7CkBAIC0yMzc3LDEwICsyNDAz
LDEwIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGUoKSBjb25zdAogICAg
IH0KIAogICAgIGlmIChpc0xhYmVsYWJsZSgpKSB7Ci0gICAgICAgIFJlZlB0ciBsYWJlbCA9IGxh
YmVsRm9yRWxlbWVudChkb3duY2FzdDxFbGVtZW50Pihub2RlLmdldCgpKSk7CisgICAgICAgIGF1
dG8gbGFiZWxzID0gbGFiZWxzRm9yTm9kZShub2RlLmdldCgpKTsKICAgICAgICAgLy8gVXNlIHRo
ZSBsYWJlbCB0ZXh0IGFzIHRoZSB0aXRsZSBpZiAxKSB0aGUgdGl0bGUgZWxlbWVudCBpcyBOT1Qg
YW4gZXhwb3NlZCBlbGVtZW50IGFuZCAyKSB0aGVyZSdzIG5vIEFSSUEgb3ZlcnJpZGUuCi0gICAg
ICAgIGlmIChsYWJlbCAmJiAhZXhwb3Nlc1RpdGxlVUlFbGVtZW50KCkgJiYgIWFyaWFBY2Nlc3Np
YmlsaXR5RGVzY3JpcHRpb24oKS5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiB0ZXh0Rm9y
TGFiZWxFbGVtZW50KGxhYmVsLmdldCgpKTsKKyAgICAgICAgaWYgKCFsYWJlbHMuaXNFbXB0eSgp
ICYmICFleHBvc2VzVGl0bGVVSUVsZW1lbnQoKSAmJiAhYXJpYUFjY2Vzc2liaWxpdHlEZXNjcmlw
dGlvbigpLmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHRleHRGb3JMYWJlbEVsZW1lbnRz
KFdURk1vdmUobGFiZWxzKSk7CiAgICAgfQogCiAgICAgLy8gRm9yIDxzZWxlY3Q+IGVsZW1lbnRz
LCB0aXRsZSBzaG91bGQgYmUgZW1wdHkgaWYgdGhleSBhcmUgbm90IHJlbmRlcmVkIG9yIGhhdmUg
cm9sZSBQb3BVcEJ1dHRvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAppbmRleCBiYzM0NDM4NTFjMWEuLmQxYzJiNDM0
YjcyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QuaApAQCAtMTk1LDggKzE5NSw3IEBAIHByb3RlY3RlZDoKICAgICBi
b29sIGlzTGFiZWxhYmxlKCkgY29uc3Q7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29ycmVz
cG9uZGluZ0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBjb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsRm9yRWxlbWVudChFbGVt
ZW50KikgY29uc3Q7Ci0gICAgU3RyaW5nIHRleHRGb3JMYWJlbEVsZW1lbnQoRWxlbWVudCopIGNv
bnN0OworICAgIFN0cmluZyB0ZXh0Rm9yTGFiZWxFbGVtZW50cyhWZWN0b3I8SFRNTExhYmVsRWxl
bWVudCo+JiYpIGNvbnN0OwogICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsRWxlbWVudENvbnRh
aW5lcigpIGNvbnN0OwogCiAgICAgU3RyaW5nIGFyaWFBY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24o
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29jb2Ev
QWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9jb2NvYS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29jb2EubW0KaW5kZXggYmUwOGI5MjQ0Njc4Li5m
YWJlZGZmMTYyNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvY29j
b2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvY29jb2EvQWNjZXNzaWJpbGl0eU9iamVjdENvY29hLm1tCkBAIC0xMDUsNyArMTA1
LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRlc2NyaXB0aW9uQXR0cmlidXRlVmFs
dWUoKSBjb25zdAogICAgIC8vIERldGVybWluZSBpZiBhbnkgdmlzaWJsZSB0ZXh0IGlzIGF2YWls
YWJsZSwgd2hpY2ggaW5mbHVlbmNlcyBvdXIgdXNhZ2Ugb2YgdGl0bGUgdGFnLgogICAgIGJvb2wg
dmlzaWJsZVRleHRBdmFpbGFibGUgPSBmYWxzZTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHQg
OiB0ZXh0T3JkZXIpIHsKLSAgICAgICAgaWYgKGlzVmlzaWJsZVRleHQodGV4dC50ZXh0U291cmNl
KSkgeworICAgICAgICBpZiAoaXNWaXNpYmxlVGV4dCh0ZXh0LnRleHRTb3VyY2UpICYmICF0ZXh0
LnRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB2aXNpYmxlVGV4dEF2YWlsYWJsZSA9IHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTg4LDcgKzE4OCw3IEBAIFN0
cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoZWxwVGV4dEF0dHJpYnV0ZVZhbHVlKCkgY29uc3QK
ICAgICAvLyBEZXRlcm1pbmUgaWYgYW55IGRlc2NyaXB0aXZlIHRleHQgaXMgYXZhaWxhYmxlLCB3
aGljaCBpbmZsdWVuY2VzIG91ciB1c2FnZSBvZiB0aXRsZSB0YWcuCiAgICAgYm9vbCBkZXNjcmlw
dGl2ZVRleHRBdmFpbGFibGUgPSBmYWxzZTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHQgOiB0
ZXh0T3JkZXIpIHsKLSAgICAgICAgaWYgKGlzRGVzY3JpcHRpdmVUZXh0KHRleHQudGV4dFNvdXJj
ZSkpIHsKKyAgICAgICAgaWYgKGlzRGVzY3JpcHRpdmVUZXh0KHRleHQudGV4dFNvdXJjZSkgJiYg
IXRleHQudGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRlc2NyaXB0aXZlVGV4dEF2YWls
YWJsZSA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlLmNwcAppbmRleCBjZWMzZTkwNmI3NjMuLjY4NTM4MzI2NmYwYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZS5jcHAKQEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIFRyZWVTY29wZTo6cmVtb3Zl
TGFiZWwoY29uc3QgQXRvbVN0cmluZ0ltcGwmIGZvckF0dHJpYnV0ZVZhbHVlLCBIVE1MTGFiZWxF
bAogICAgIG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUtPnJlbW92ZShmb3JBdHRyaWJ1dGVWYWx1ZSwg
ZWxlbWVudCk7CiB9CiAKLUhUTUxMYWJlbEVsZW1lbnQqIFRyZWVTY29wZTo6bGFiZWxFbGVtZW50
Rm9ySWQoY29uc3QgQXRvbVN0cmluZyYgZm9yQXR0cmlidXRlVmFsdWUpCitjb25zdCBWZWN0b3I8
RWxlbWVudCo+KiBUcmVlU2NvcGU6OmxhYmVsRWxlbWVudHNGb3JJZChjb25zdCBBdG9tU3RyaW5n
JiBmb3JBdHRyaWJ1dGVWYWx1ZSkKIHsKICAgICBpZiAoZm9yQXR0cmlidXRlVmFsdWUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMxNyw3ICszMTcsNyBAQCBIVE1MTGFi
ZWxFbGVtZW50KiBUcmVlU2NvcGU6OmxhYmVsRWxlbWVudEZvcklkKGNvbnN0IEF0b21TdHJpbmcm
IGZvckF0dHJpYnV0ZVZhbAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIG1fbGFiZWxz
QnlGb3JBdHRyaWJ1dGUtPmdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKCpmb3JBdHRyaWJ1
dGVWYWx1ZS5pbXBsKCksICp0aGlzKTsKKyAgICByZXR1cm4gbV9sYWJlbHNCeUZvckF0dHJpYnV0
ZS0+Z2V0RWxlbWVudHNCeUxhYmVsRm9yQXR0cmlidXRlKCpmb3JBdHRyaWJ1dGVWYWx1ZS5pbXBs
KCksICp0aGlzKTsKIH0KIAogc3RhdGljIHN0ZDo6b3B0aW9uYWw8TGF5b3V0UG9pbnQ+IGFic29s
dXRlUG9pbnRJZk5vdENsaXBwZWQoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBMYXlvdXRQb2lu
dCYgY2xpZW50UG9pbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKaW5kZXggNTg2ZTQ0ZDQ2NWRiLi4x
YWE4Njk3MDFlZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKQEAgLTEwNiw3ICsxMDYsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzaG91bGRDYWNoZUxhYmVsc0J5Rm9yQXR0cmlidXRlKCkgY29uc3Qg
eyByZXR1cm4gISFtX2xhYmVsc0J5Rm9yQXR0cmlidXRlOyB9CiAgICAgdm9pZCBhZGRMYWJlbChj
b25zdCBBdG9tU3RyaW5nSW1wbCYgZm9yQXR0cmlidXRlVmFsdWUsIEhUTUxMYWJlbEVsZW1lbnQm
KTsKICAgICB2b2lkIHJlbW92ZUxhYmVsKGNvbnN0IEF0b21TdHJpbmdJbXBsJiBmb3JBdHRyaWJ1
dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCYpOwotICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVs
RWxlbWVudEZvcklkKGNvbnN0IEF0b21TdHJpbmcmIGZvckF0dHJpYnV0ZVZhbHVlKTsKKyAgICBj
b25zdCBWZWN0b3I8RWxlbWVudCo+KiBsYWJlbEVsZW1lbnRzRm9ySWQoY29uc3QgQXRvbVN0cmlu
ZyYgZm9yQXR0cmlidXRlVmFsdWUpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEVsZW1l
bnQ+IGVsZW1lbnRGcm9tUG9pbnQoZG91YmxlIGNsaWVudFgsIGRvdWJsZSBjbGllbnRZKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVmUHRyPEVsZW1lbnQ+PiBlbGVtZW50c0Zyb21Qb2lu
dChkb3VibGUgY2xpZW50WCwgZG91YmxlIGNsaWVudFkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Ry
ZWVTY29wZU9yZGVyZWRNYXAuY3BwCmluZGV4IDViNzY5MWUwZmU4Ni4uNjYxM2FkNzE5MzZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlT3JkZXJlZE1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuY3BwCkBAIC0xNDUsNiAr
MTQ1LDMxIEBAIGlubGluZSBFbGVtZW50KiBUcmVlU2NvcGVPcmRlcmVkTWFwOjpnZXQoY29uc3Qg
QXRvbVN0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXlNYXRjaGluZ0Z1bmN0aW9uPgoraW5saW5lIFZlY3Rv
cjxFbGVtZW50Kj4qIFRyZWVTY29wZU9yZGVyZWRNYXA6OmdldEFsbChjb25zdCBBdG9tU3RyaW5n
SW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlLCBjb25zdCBLZXlNYXRjaGluZ0Z1bmN0
aW9uJiBrZXlNYXRjaGVzKSBjb25zdAoreworICAgIG1fbWFwLmNoZWNrQ29uc2lzdGVuY3koKTsK
KworICAgIGF1dG8gbWFwSXRlcmF0b3IgPSBtX21hcC5maW5kKCZrZXkpOworICAgIGlmIChtYXBJ
dGVyYXRvciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBh
dXRvJiBlbnRyeSA9IG1hcEl0ZXJhdG9yLT52YWx1ZTsKKyAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGVudHJ5LmNvdW50KTsKKworICAgIGlmIChlbnRyeS5vcmRl
cmVkTGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZW50cnkub3JkZXJlZExpc3QucmVzZXJ2ZUNh
cGFjaXR5KGVudHJ5LmNvdW50KTsKKyAgICAgICAgYXV0byBlbGVtZW50RGVzY2VuZGFudHMgPSBk
ZXNjZW5kYW50c09mVHlwZTxFbGVtZW50PihzY29wZS5yb290Tm9kZSgpKTsKKyAgICAgICAgZm9y
IChhdXRvIGl0ID0gZW50cnkuZWxlbWVudCA/IGVsZW1lbnREZXNjZW5kYW50cy5iZWdpbkF0KCpl
bnRyeS5lbGVtZW50KSA6IGVsZW1lbnREZXNjZW5kYW50cy5iZWdpbigpOyBpdDsgKytpdCkgewor
ICAgICAgICAgICAgaWYgKGtleU1hdGNoZXMoa2V5LCAqaXQpKQorICAgICAgICAgICAgICAgIGVu
dHJ5Lm9yZGVyZWRMaXN0LmFwcGVuZCgmKml0KTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGVudHJ5Lm9yZGVyZWRMaXN0LnNpemUo
KSA9PSBlbnRyeS5jb3VudCk7CisgICAgfQorCisgICAgcmV0dXJuICZlbnRyeS5vcmRlcmVkTGlz
dDsKK30KKwogRWxlbWVudCogVHJlZVNjb3BlT3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5SWQoY29u
c3QgQXRvbVN0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gZ2V0KGtleSwgc2NvcGUsIFtdIChjb25zdCBBdG9tU3RyaW5nSW1wbCYga2V5
LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KSB7CkBAIC0xNzQsMTEgKzE5OSwxMSBAQCBIVE1MSW1h
Z2VFbGVtZW50KiBUcmVlU2NvcGVPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlVc2VtYXAoY29uc3Qg
QXRvbVN0cmluZ0ltcGwmCiAgICAgfSkpOwogfQogCi1IVE1MTGFiZWxFbGVtZW50KiBUcmVlU2Nv
cGVPcmRlcmVkTWFwOjpnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShjb25zdCBBdG9tU3Ry
aW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3BlKSBjb25zdAorY29uc3QgVmVjdG9y
PEVsZW1lbnQqPiogVHJlZVNjb3BlT3JkZXJlZE1hcDo6Z2V0RWxlbWVudHNCeUxhYmVsRm9yQXR0
cmlidXRlKGNvbnN0IEF0b21TdHJpbmdJbXBsJiBrZXksIGNvbnN0IFRyZWVTY29wZSYgc2NvcGUp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRvd25jYXN0PEhUTUxMYWJlbEVsZW1lbnQ+KGdldChrZXks
IHNjb3BlLCBbXSAoY29uc3QgQXRvbVN0cmluZ0ltcGwmIGtleSwgY29uc3QgRWxlbWVudCYgZWxl
bWVudCkgeworICAgIHJldHVybiBnZXRBbGwoa2V5LCBzY29wZSwgW10gKGNvbnN0IEF0b21TdHJp
bmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIHsKICAgICAgICAgcmV0dXJuIGlz
PEhUTUxMYWJlbEVsZW1lbnQ+KGVsZW1lbnQpICYmIGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihmb3JBdHRyKS5pbXBsKCkgPT0gJmtleTsKLSAgICB9KSk7CisgICAgfSk7
CiB9CiAKIEVsZW1lbnQqIFRyZWVTY29wZU9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeVdpbmRvd05h
bWVkSXRlbShjb25zdCBBdG9tU3RyaW5nSW1wbCYga2V5LCBjb25zdCBUcmVlU2NvcGUmIHNjb3Bl
KSBjb25zdApAQCAtMTk3LDI2ICsyMjIsOSBAQCBFbGVtZW50KiBUcmVlU2NvcGVPcmRlcmVkTWFw
OjpnZXRFbGVtZW50QnlEb2N1bWVudE5hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nSW1wbAogCiBj
b25zdCBWZWN0b3I8RWxlbWVudCo+KiBUcmVlU2NvcGVPcmRlcmVkTWFwOjpnZXRBbGxFbGVtZW50
c0J5SWQoY29uc3QgQXRvbVN0cmluZ0ltcGwmIGtleSwgY29uc3QgVHJlZVNjb3BlJiBzY29wZSkg
Y29uc3QKIHsKLSAgICBtX21hcC5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBhdXRvIG1hcEl0
ZXJhdG9yID0gbV9tYXAuZmluZCgma2V5KTsKLSAgICBpZiAobWFwSXRlcmF0b3IgPT0gbV9tYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgZW50cnkgPSBtYXBJ
dGVyYXRvci0+dmFsdWU7Ci0gICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTihlbnRyeS5jb3VudCk7Ci0KLSAgICBpZiAoZW50cnkub3JkZXJlZExpc3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGVudHJ5Lm9yZGVyZWRMaXN0LnJlc2VydmVDYXBhY2l0eShlbnRyeS5jb3Vu
dCk7Ci0gICAgICAgIGF1dG8gZWxlbWVudERlc2NlbmRhbnRzID0gZGVzY2VuZGFudHNPZlR5cGU8
RWxlbWVudD4oc2NvcGUucm9vdE5vZGUoKSk7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IGVudHJ5
LmVsZW1lbnQgPyBlbGVtZW50RGVzY2VuZGFudHMuYmVnaW5BdCgqZW50cnkuZWxlbWVudCkgOiBl
bGVtZW50RGVzY2VuZGFudHMuYmVnaW4oKTsgaXQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChp
dC0+Z2V0SWRBdHRyaWJ1dGUoKS5pbXBsKCkgPT0gJmtleSkKLSAgICAgICAgICAgICAgICBlbnRy
eS5vcmRlcmVkTGlzdC5hcHBlbmQoJippdCk7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihlbnRyeS5vcmRlcmVkTGlzdC5zaXplKCkg
PT0gZW50cnkuY291bnQpOwotICAgIH0KLQotICAgIHJldHVybiAmZW50cnkub3JkZXJlZExpc3Q7
CisgICAgcmV0dXJuIGdldEFsbChrZXksIHNjb3BlLCBbXSAoY29uc3QgQXRvbVN0cmluZ0ltcGwm
IGtleSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkgeworICAgICAgICByZXR1cm4gZWxlbWVudC5n
ZXRJZEF0dHJpYnV0ZSgpLmltcGwoKSA9PSAma2V5OworICAgIH0pOwogfQogCiBjb25zdCBWZWN0
b3I8QXRvbVN0cmluZz4gVHJlZVNjb3BlT3JkZXJlZE1hcDo6a2V5cygpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlT3JkZXJlZE1hcC5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZU9yZGVyZWRNYXAuaAppbmRleCAzNmM2ODdhMDM3ZmMuLmE0ZTY3
MWMyNmU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZU9yZGVyZWRN
YXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlT3JkZXJlZE1hcC5oCkBAIC01
OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlOYW1lKGNvbnN0
IEF0b21TdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7CiAgICAgSFRNTE1hcEVs
ZW1lbnQqIGdldEVsZW1lbnRCeU1hcE5hbWUoY29uc3QgQXRvbVN0cmluZ0ltcGwmLCBjb25zdCBU
cmVlU2NvcGUmKSBjb25zdDsKICAgICBIVE1MSW1hZ2VFbGVtZW50KiBnZXRFbGVtZW50QnlVc2Vt
YXAoY29uc3QgQXRvbVN0cmluZ0ltcGwmLCBjb25zdCBUcmVlU2NvcGUmKSBjb25zdDsKLSAgICBI
VE1MTGFiZWxFbGVtZW50KiBnZXRFbGVtZW50QnlMYWJlbEZvckF0dHJpYnV0ZShjb25zdCBBdG9t
U3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OworICAgIGNvbnN0IFZlY3RvcjxF
bGVtZW50Kj4qIGdldEVsZW1lbnRzQnlMYWJlbEZvckF0dHJpYnV0ZShjb25zdCBBdG9tU3RyaW5n
SW1wbCYsIGNvbnN0IFRyZWVTY29wZSYpIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRC
eVdpbmRvd05hbWVkSXRlbShjb25zdCBBdG9tU3RyaW5nSW1wbCYsIGNvbnN0IFRyZWVTY29wZSYp
IGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeURvY3VtZW50TmFtZWRJdGVtKGNvbnN0
IEF0b21TdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJikgY29uc3Q7CiAKQEAgLTcwLDYgKzcw
LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5TWF0Y2hp
bmdGdW5jdGlvbj4KICAgICBFbGVtZW50KiBnZXQoY29uc3QgQXRvbVN0cmluZ0ltcGwmLCBjb25z
dCBUcmVlU2NvcGUmLCBjb25zdCBLZXlNYXRjaGluZ0Z1bmN0aW9uJikgY29uc3Q7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEtleU1hdGNoaW5nRnVuY3Rpb24+CisgICAgVmVjdG9yPEVsZW1lbnQq
PiogZ2V0QWxsKGNvbnN0IEF0b21TdHJpbmdJbXBsJiwgY29uc3QgVHJlZVNjb3BlJiwgY29uc3Qg
S2V5TWF0Y2hpbmdGdW5jdGlvbiYpIGNvbnN0OwogCiAgICAgc3RydWN0IE1hcEVudHJ5IHsKICAg
ICAgICAgTWFwRW50cnkoKSB7IH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHktaXNvbGF0ZWQtdHJlZS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS1pc29sYXRlZC10cmVlL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYmZiMjY1NjQ3NWVmLi4w
MDI0OGFiMzViYWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHktaXNvbGF0
ZWQtdHJlZS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkt
aXNvbGF0ZWQtdHJlZS9UZXN0RXhwZWN0YXRpb25zCkBAIC05LDYgKzksOSBAQCBhY2Nlc3NpYmls
aXR5L3NsaWRlci13aXRoLWxvc3QtcmVuZGVyZXIuaHRtbCBbIFRpbWVvdXQgXQogYWNjZXNzaWJp
bGl0eS9tYWMvY29tYm9ib3gtYWN0aXZlZGVzY2VuZGFudC1ub3RpZmljYXRpb25zLmh0bWwgWyBU
aW1lb3V0IF0KIGFjY2Vzc2liaWxpdHkvbWFjL3JlbGF0aW9uc2hpcHMtaW4tZnJhbWVzLmh0bWwg
WyBUaW1lb3V0IF0KIAorIyBUaW1lcyBvdXQgYmVjYXVzZSBgaW5uZXJUZXh0YCBjaGFuZ2VzIG9u
IGxpbmtlZCA8bGFiZWw+cyBkb24ndCB1cGRhdGUgY2FjaGVkIEFYVGl0bGUgdmFsdWUuCithY2Nl
c3NpYmlsaXR5L211bHRpcGxlLWxhYmVsLWlucHV0Lmh0bWwgWyBUaW1lb3V0IF0KKwogIyBUZXh0
IGZhaWx1cmVzCiBhY2Nlc3NpYmlsaXR5L2FyaWEtY3VycmVudC5odG1sIFsgRmFpbHVyZSBdCiBh
Y2Nlc3NpYmlsaXR5L2FyaWEtbGFiZWxsZWRieS1vdmVycmlkZXMtYXJpYS1sYWJlbC5odG1sIFsg
RmFpbHVyZSBdCkBAIC01MSw3ICs1NCw2IEBAIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2Ut
dmlzaWJsZS1uZXN0ZWQuaHRtbCBbIEZhaWx1cmUgXQogYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8t
bWFrZS12aXNpYmxlLXdpdGgtc3ViZm9jdXMuaHRtbCBbIEZhaWx1cmUgXQogYWNjZXNzaWJpbGl0
eS9zbGlkZXItd2l0aC1sb3N0LXJlbmRlcmVyLmh0bWwgWyBGYWlsdXJlIF0KIGFjY2Vzc2liaWxp
dHkvdGV4dGFyZWEtaW5zZXJ0aW9uLXBvaW50LWxpbmUtbnVtYmVyLmh0bWwgWyBGYWlsdXJlIF0K
LWFjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy5odG1sIFsgRmFpbHVy
ZSBdCiBhY2Nlc3NpYmlsaXR5L3RleHQtYWx0ZXJuYXRpdmUtY2FsY3VsYXRpb24taGlkZGVuLW5v
ZGVzLmh0bWwgWyBGYWlsdXJlIF0KIGFjY2Vzc2liaWxpdHkvbWF0aC1tdWx0aXNjcmlwdC1hdHRy
aWJ1dGVzLmh0bWwgWyBGYWlsdXJlIF0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L211bHRpcGxlLWxhYmVsLWlucHV0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBlYjI3NTFlMWU1OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbXVsdGlwbGUtbGFiZWwtaW5wdXQtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHRoYXQgaW5wdXRz
IHdpdGggbXVsdGlwbGUgbGFiZWxzIGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzaWJpbGl0eSB0ZXh0
IGV4cG9zZWQuCisKK0luaXRpYWwgQVggdGV4dDoKKwlBWFRpdGxlOiBFbnRlciB5b3VyIGNvbG9y
CisJQVhEZXNjcmlwdGlvbjoKKwlBWEhlbHA6Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFi
ZWwyJykucmVtb3ZlKCk7CisJQVhUaXRsZTogRW50ZXIgY29sb3IKKwlBWERlc2NyaXB0aW9uOgor
CUFYSGVscDoKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDMnKS5pbm5lclRleHQgPSAn
Y2hvaWNlJzsKKwlBWFRpdGxlOiBFbnRlciBjaG9pY2UKKwlBWERlc2NyaXB0aW9uOgorCUFYSGVs
cDoKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisg
RW50ZXIgY2hvaWNlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L211bHRp
cGxlLWxhYmVsLWlucHV0Lmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L211bHRpcGxl
LWxhYmVsLWlucHV0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li5lOTI0ZGJlMWFiZTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L211bHRpcGxlLWxhYmVsLWlucHV0Lmh0bWwKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1oZWxwZXIuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorCis8aW5wdXQgaWQ9ImlucHV0IiB0eXBlPSJ0ZXh0Ij4KKzxsYWJlbCBmb3I9
ImlucHV0Ij5FbnRlcjwvbGFiZWw+Cis8bGFiZWwgaWQ9ImxhYmVsMiIgZm9yPSJpbnB1dCI+eW91
cjwvbGFiZWw+Cis8bGFiZWwgaWQ9ImxhYmVsMyIgZm9yPSJpbnB1dCI+Y29sb3I8L2xhYmVsPgor
Cis8c2NyaXB0PgordmFyIG91dHB1dCA9ICJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGlucHV0cyB3
aXRoIG11bHRpcGxlIGxhYmVscyBoYXZlIHRoZSBjb3JyZWN0IGFjY2Vzc2liaWxpdHkgdGV4dCBl
eHBvc2VkLlxuXG4iOworCitpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7Cisg
ICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgdmFyIGlucHV0ID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJpbnB1dCIpOworICAgIG91
dHB1dCArPSBgSW5pdGlhbCBBWCB0ZXh0OiBcbiR7cGxhdGZvcm1UZXh0QWx0ZXJuYXRpdmVzKGlu
cHV0KX1cbmA7CisKKyAgICBvdXRwdXQgKz0gZXZhbEFuZFJldHVybigiZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2xhYmVsMicpLnJlbW92ZSgpOyIpOworICAgIHZhciBuZXdUZXh0OworICAgIHNl
dFRpbWVvdXQoYXN5bmMgZnVuY3Rpb24oKSB7CisgICAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4g
eworICAgICAgICAgICAgbmV3VGV4dCA9IHBsYXRmb3JtVGV4dEFsdGVybmF0aXZlcyhpbnB1dCk7
CisgICAgICAgICAgICByZXR1cm4gIW5ld1RleHQuaW5jbHVkZXMoInlvdXIiKTsKKyAgICAgICAg
fSk7CisgICAgICAgIG91dHB1dCArPSBgJHtuZXdUZXh0fVxuYDsKKworICAgICAgICBvdXRwdXQg
Kz0gZXZhbEFuZFJldHVybigiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsMycpLmlubmVy
VGV4dCA9ICdjaG9pY2UnOyIpOworICAgICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHsKKyAgICAg
ICAgICAgIG5ld1RleHQgPSBwbGF0Zm9ybVRleHRBbHRlcm5hdGl2ZXMoaW5wdXQpOworICAgICAg
ICAgICAgcmV0dXJuICFuZXdUZXh0LmluY2x1ZGVzKCJjb2xvciIpOworICAgICAgICB9KTsKKyAg
ICAgICAgb3V0cHV0ICs9IGAke25ld1RleHR9XG5gOworCisgICAgICAgIGRlYnVnKG91dHB1dCk7
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0sIDApOworfQorPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0
bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0CmluZGV4
IGJkODJhMzNhOGVlYy4uZjQzYmZiMjc0NmY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGl0bGUtdWktZWxlbWVudC1jb3JyZWN0bmVzcy1l
eHBlY3RlZC50eHQKQEAgLTEsMjIgKzEsMjUgQEAKIFRoaXMgdGVzdHMgdGhhdCB0aXRsZVVJRWxl
bWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoaW5ncyBjaGFuZ2UgZHluYW1pY2FsbHku
CiAKLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KK1BBU1M6IGF4RWxlbWVudCgnY29udHJvbDEn
KS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDEnKSkgPT09IHRydWUK
K1BBU1M6IGF4RWxlbWVudCgnY29udHJvbDInKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhF
bGVtZW50KCdsYWJlbDInKSkgPT09IHRydWUKK1BBU1M6IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxl
bWVudCgnY29udHJvbDMnKSkgPT09IGZhbHNlCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFi
ZWwzJykuc2V0QXR0cmlidXRlKCdmb3InLCAnY29udHJvbDMnKTsKK1BBU1M6IGF4RWxlbWVudCgn
Y29udHJvbDMnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDMnKSkg
PT09IHRydWUKK2xhYmVsNEVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0
ZSgnbGFiZWw0JywgJ2NvbnRyb2w0Jyk7CitQQVNTOiBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1l
bnQoJ2NvbnRyb2w0JykpID09PSBmYWxzZQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRh
aW5lcicpLmFwcGVuZENoaWxkKGxhYmVsNEVsZW1lbnQpOworUEFTUzogaGFzVGl0bGVVSUVsZW1l
bnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSA9PT0gdHJ1ZQorUEFTUzogYXhFbGVtZW50KCdjb250
cm9sNCcpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNCcpKSA9PT0g
dHJ1ZQorbGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxhYmVsNEVsZW1l
bnQpOworUEFTUzogaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSA9PT0g
ZmFsc2UKK1BBU1M6IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDUnKSkgPT09
IGZhbHNlCityZXBhcmVudE5vZGVJbnRvQ29udGFpbmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb250cm9sNScpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWw1JykpOworUEFTUzog
YXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCA9PT0gdHJ1ZQor
UEFTUzogYXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVs
ZW1lbnQoJ2xhYmVsNScpKSA9PT0gdHJ1ZQorUEFTUzogaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVt
ZW50KCdjb250cm9sNicpKSA9PT0gZmFsc2UKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJl
bDZjJykucmVtb3ZlKCkKK1BBU1M6IGF4RWxlbWVudCgnY29udHJvbDYnKS50aXRsZVVJRWxlbWVu
dCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykpID09PSB0cnVlCiAKLQotUEFTUyBheEVs
ZW1lbnQoJ2NvbnRyb2wxJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFi
ZWwxJykpIGlzIHRydWUKLVBBU1MgYXhFbGVtZW50KCdjb250cm9sMicpLnRpdGxlVUlFbGVtZW50
KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsMicpKSBpcyB0cnVlCi1QQVNTIGhhc1RpdGxlVUlF
bGVtZW50KGF4RWxlbWVudCgnY29udHJvbDMnKSkgaXMgZmFsc2UKLVBBU1MgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2xhYmVsMycpLnNldEF0dHJpYnV0ZSgnZm9yJywgJ2NvbnRyb2wzJyk7IGF4
RWxlbWVudCgnY29udHJvbDMnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCds
YWJlbDMnKSkgaXMgdHJ1ZQotUEFTUyB2YXIgbGFiZWw0RWxlbWVudCA9IGNyZWF0ZUxhYmVsV2l0
aElkQW5kRm9yQXR0cmlidXRlKCdsYWJlbDQnLCAnY29udHJvbDQnKTsgaGFzVGl0bGVVSUVsZW1l
bnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSBpcyBmYWxzZQotUEFTUyBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQobGFiZWw0RWxlbWVudCk7IGhhc1RpdGxl
VUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDQnKSkgaXMgdHJ1ZQotUEFTUyBheEVsZW1lbnQo
J2NvbnRyb2w0JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw0Jykp
IGlzIHRydWUKLVBBU1MgbGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxh
YmVsNEVsZW1lbnQpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2w0JykpIGlz
IGZhbHNlCi1QQVNTIGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDUnKSkgaXMg
ZmFsc2UKLVBBU1MgcmVwYXJlbnROb2RlSW50b0NvbnRhaW5lcihkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29udHJvbDUnKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNScpKTsgYXhF
bGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCBpcyB0cnVlCi1QQVNT
IGF4RWxlbWVudCgnY29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50
KCdsYWJlbDUnKSkgaXMgdHJ1ZQotUEFTUyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVs
ZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YicpKSBpcyB0cnVlCi1QQVNTIG5ld0xh
YmVsNkVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0ZSgnbGFiZWw2YScs
ICdjb250cm9sNicpOyBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShuZXdMYWJlbDZFbGVtZW50
LCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpOyBheEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVV
SUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgnbGFiZWw2YScpKSBpcyB0cnVlCi1QQVNTIGRv
Y3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobmV3TGFiZWw2RWxlbWVudCk7IGF4RWxlbWVudCgnY29u
dHJvbDYnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDZiJykpIGlz
IHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNv
cnJlY3RuZXNzLmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1l
bnQtY29ycmVjdG5lc3MuaHRtbAppbmRleCBiNTE2YjJhMTY4NzYuLjQ1YzJiMjk5ZDY4NCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVtZW50LWNvcnJl
Y3RuZXNzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90aXRsZS11aS1lbGVt
ZW50LWNvcnJlY3RuZXNzLmh0bWwKQEAgLTEsMTAgKzEsMTIgQEAKLTwhRE9DVFlQRSBIVE1MPgor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgogPGh0bWw+Ci08
Ym9keT4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9hY2Nlc3NpYmlsaXR5LWhl
bHBlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CiAKIDxkaXYgaWQ9ImNvbnRhaW5lciI+Ci0KICAg
PGRpdj4KICAgICA8bGFiZWwgaWQ9ImxhYmVsMSIgZm9yPSJjb250cm9sMSI+TGFiZWwgMTwvbGFi
ZWw+CiAgICAgPGlucHV0IGlkPSJjb250cm9sMSIgdHlwZT0idGV4dCI+CkBAIC00MCwxMSArNDIs
MTIgQEAKICAgPC9kaXY+CiA8L2Rpdj4KIAotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CiA8c2Ny
aXB0PgotZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCB3b3JrcyBj
b3JyZWN0bHkgZXZlbiB3aGVuIHRoaW5ncyBjaGFuZ2UgZHluYW1pY2FsbHkuIik7Cit2YXIgb3V0
cHV0ID0gIlRoaXMgdGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZl
biB3aGVuIHRoaW5ncyBjaGFuZ2UgZHluYW1pY2FsbHkuXG5cbiI7CisKK2lmICh3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
CiAKLWlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIpIHsKICAgICBmdW5jdGlvbiBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQpIHsKICAgICAg
ICAgdmFyIGxhYmVsMSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50
QnlJZCgibGFiZWwxIik7CiAgICAgICAgIHZhciB0aXRsZVVJRWxlbWVudCA9IGF4RWxlbWVudC50
aXRsZVVJRWxlbWVudCgpOwpAQCAtNzAsNDAgKzczLDQ2IEBAIGlmICh3aW5kb3cudGVzdFJ1bm5l
ciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKICAgICAgICAgcmV0dXJuIGFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZChpZCk7CiAgICAgfQog
Ci0gICAgc2hvdWxkQmUoImF4RWxlbWVudCgnY29udHJvbDEnKS50aXRsZVVJRWxlbWVudCgpLmlz
RXF1YWwoYXhFbGVtZW50KCdsYWJlbDEnKSkiLCAidHJ1ZSIpOwotCi0gICAgc2hvdWxkQmUoImF4
RWxlbWVudCgnY29udHJvbDInKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCds
YWJlbDInKSkiLCAidHJ1ZSIpOworICAgIG91dHB1dCArPSBleHBlY3QoImF4RWxlbWVudCgnY29u
dHJvbDEnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDEnKSkiLCAi
dHJ1ZSIpOworICAgIG91dHB1dCArPSBleHBlY3QoImF4RWxlbWVudCgnY29udHJvbDInKS50aXRs
ZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDInKSkiLCAidHJ1ZSIpOwogCisg
ICAgdmFyIGxhYmVsNEVsZW1lbnQ7CiAgICAgLy8gVGVzdCBjaGFuZ2luZyB0aGUgImZvciIgYXR0
cmlidXRlIGR5bmFtaWNhbGx5LgotICAgIHNob3VsZEJlKCJoYXNUaXRsZVVJRWxlbWVudChheEVs
ZW1lbnQoJ2NvbnRyb2wzJykpIiwgImZhbHNlIik7Ci0gICAgc2hvdWxkQmUoImRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdsYWJlbDMnKS5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdjb250cm9sMycpOyBh
eEVsZW1lbnQoJ2NvbnRyb2wzJykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgn
bGFiZWwzJykpIiwgInRydWUiKTsKLQotICAgIC8vIFRlc3QgdW5hdHRhY2hlZCBsYWJlbCBlbGVt
ZW50IHRoYXQncyBzdWJzZXF1ZW50bHkgYXR0YWNoZWQuCi0gICAgdmFyIGxhYmVsNEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwotICAgIGxhYmVsNEVsZW1lbnQuaWQg
PSAibGFiZWw0IjsKLSAgICBsYWJlbDRFbGVtZW50LnNldEF0dHJpYnV0ZSgiZm9yIiwgImNvbnRy
b2w0Iik7Ci0gICAgbGFiZWw0RWxlbWVudC5pbm5lclRleHQgPSAiTGFiZWwgNCI7Ci0gICAgc2hv
dWxkQmUoInZhciBsYWJlbDRFbGVtZW50ID0gY3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1
dGUoJ2xhYmVsNCcsICdjb250cm9sNCcpOyBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2Nv
bnRyb2w0JykpIiwgImZhbHNlIik7Ci0gICAgc2hvdWxkQmUoImRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVs
ZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSIsICJ0cnVlIik7Ci0gICAgc2hvdWxkQmUoImF4
RWxlbWVudCgnY29udHJvbDQnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCds
YWJlbDQnKSkiLCAidHJ1ZSIpOwotCi0gICAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUg
bGFiZWwgaXMgZGV0YWNoZWQuCi0gICAgc2hvdWxkQmUoImxhYmVsNEVsZW1lbnQucGFyZW50RWxl
bWVudC5yZW1vdmVDaGlsZChsYWJlbDRFbGVtZW50KTsgaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVt
ZW50KCdjb250cm9sNCcpKSIsICJmYWxzZSIpOwotCi0gICAgLy8gVGVzdCBsYWJlbCB0aGF0IGdl
dHMgYSBjb250cm9sIHJlcGFyZW50ZWQgaW50byBpdC4KLSAgICBzaG91bGRCZSgiaGFzVGl0bGVV
SUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNScpKSIsICJmYWxzZSIpOwotCi0gICAgc2hvdWxk
QmUoInJlcGFyZW50Tm9kZUludG9Db250YWluZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nv
bnRyb2w1JyksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDUnKSk7IGF4RWxlbWVudCgn
Y29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgpICE9IG51bGwiLCAidHJ1ZSIpOwotICAgIHNob3Vs
ZEJlKCJheEVsZW1lbnQoJ2NvbnRyb2w1JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxl
bWVudCgnbGFiZWw1JykpIiwgInRydWUiKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlyc3Qg
bGFiZWwgaXMgcmV0dXJuZWQsIGV2ZW4gYXMgbGFiZWxzIGFyZSBhZGRlZCBhbmQgcmVtb3ZlZC4K
LSAgICBzaG91bGRCZSgiYXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNF
cXVhbChheEVsZW1lbnQoJ2xhYmVsNmInKSkiLCAidHJ1ZSIpOwotICAgIHNob3VsZEJlKCJuZXdM
YWJlbDZFbGVtZW50ID0gY3JlYXRlTGFiZWxXaXRoSWRBbmRGb3JBdHRyaWJ1dGUoJ2xhYmVsNmEn
LCAnY29udHJvbDYnKTsgZG9jdW1lbnQuYm9keS5pbnNlcnRCZWZvcmUobmV3TGFiZWw2RWxlbWVu
dCwgZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKTsgYXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxl
VUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNmEnKSkiLCAidHJ1ZSIpOwotICAg
IHNob3VsZEJlKCJkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG5ld0xhYmVsNkVsZW1lbnQpOyBh
eEVsZW1lbnQoJ2NvbnRyb2w2JykudGl0bGVVSUVsZW1lbnQoKS5pc0VxdWFsKGF4RWxlbWVudCgn
bGFiZWw2YicpKSIsICJ0cnVlIik7Ci0KLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
dGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICBvdXRwdXQgKz0gZXhwZWN0KCJo
YXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2NvbnRyb2wzJykpIiwgImZhbHNlIik7CisgICAg
b3V0cHV0ICs9IGV2YWxBbmRSZXR1cm4oImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYWJlbDMn
KS5zZXRBdHRyaWJ1dGUoJ2ZvcicsICdjb250cm9sMycpOyIpOworICAgIHNldFRpbWVvdXQoYXN5
bmMgZnVuY3Rpb24oKSB7CisgICAgICAgIG91dHB1dCArPSBhd2FpdCBleHBlY3RBc3luYygiYXhF
bGVtZW50KCdjb250cm9sMycpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xh
YmVsMycpKSIsICJ0cnVlIik7CisKKyAgICAgICAgLy8gVGVzdCB1bmF0dGFjaGVkIGxhYmVsIGVs
ZW1lbnQgdGhhdCdzIHN1YnNlcXVlbnRseSBhdHRhY2hlZC4KKyAgICAgICAgb3V0cHV0ICs9IGV2
YWxBbmRSZXR1cm4oImxhYmVsNEVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJp
YnV0ZSgnbGFiZWw0JywgJ2NvbnRyb2w0Jyk7Iik7CisgICAgICAgIG91dHB1dCArPSBhd2FpdCBl
eHBlY3RBc3luYygiaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSIsICJm
YWxzZSIpOworICAgICAgICBvdXRwdXQgKz0gZXZhbEFuZFJldHVybigiZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKGxhYmVsNEVsZW1lbnQpOyIpOworICAg
ICAgICBvdXRwdXQgKz0gYXdhaXQgZXhwZWN0QXN5bmMoImhhc1RpdGxlVUlFbGVtZW50KGF4RWxl
bWVudCgnY29udHJvbDQnKSkiLCAidHJ1ZSIpOworICAgICAgICBvdXRwdXQgKz0gYXdhaXQgZXhw
ZWN0QXN5bmMoImF4RWxlbWVudCgnY29udHJvbDQnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwo
YXhFbGVtZW50KCdsYWJlbDQnKSkiLCAidHJ1ZSIpOworCisgICAgICAgIC8vIFRlc3Qgd2hhdCBo
YXBwZW5zIHdoZW4gdGhlIGxhYmVsIGlzIGRldGFjaGVkLgorICAgICAgICBvdXRwdXQgKz0gZXZh
bEFuZFJldHVybigibGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxhYmVs
NEVsZW1lbnQpOyIpOworICAgICAgICBvdXRwdXQgKz0gYXdhaXQgZXhwZWN0QXN5bmMoImhhc1Rp
dGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDQnKSkiLCAiZmFsc2UiKTsKKworICAgICAg
ICAvLyBUZXN0IGxhYmVsIHRoYXQgZ2V0cyBhIGNvbnRyb2wgcmVwYXJlbnRlZCBpbnRvIGl0Lgor
ICAgICAgICBvdXRwdXQgKz0gZXhwZWN0KCJoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2Nv
bnRyb2w1JykpIiwgImZhbHNlIik7CisgICAgICAgIG91dHB1dCArPSBldmFsQW5kUmV0dXJuKCJy
ZXBhcmVudE5vZGVJbnRvQ29udGFpbmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250cm9s
NScpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWw1JykpOyIpOworICAgICAgICBvdXRw
dXQgKz0gYXdhaXQgZXhwZWN0QXN5bmMoImF4RWxlbWVudCgnY29udHJvbDUnKS50aXRsZVVJRWxl
bWVudCgpICE9IG51bGwiLCAidHJ1ZSIpOworICAgICAgICBvdXRwdXQgKz0gYXdhaXQgZXhwZWN0
QXN5bmMoImF4RWxlbWVudCgnY29udHJvbDUnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhF
bGVtZW50KCdsYWJlbDUnKSkiLCAidHJ1ZSIpOworCisgICAgICAgIC8vIE9uIENvY29hIHBsYXRm
b3Jtcywgd2hlbiB0aGVyZSBpcyBubyBzaW5ndWxhciB0aXRsZSBVSSBlbGVtZW50IGZvciBhbiBl
bGVtZW50IChlLmcuIG11bHRpcGxlIDxsYWJlbCBmb3I9InNvbWUtaWQiPiksIG5vbmUgc2hvdWxk
IGJlIHJldHVybmVkLgorICAgICAgICBjb25zdCBwbGF0Zm9ybSA9IGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLnBsYXRmb3JtTmFtZTsKKyAgICAgICAgY29uc3QgaXNDb2NvYSA9IHBsYXRmb3JtID09
PSAiaW9zIiB8fCBwbGF0Zm9ybSA9PT0gIm1hYyI7CisgICAgICAgIG91dHB1dCArPSBleHBlY3Qo
Imhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDYnKSkiLCBpc0NvY29hID8gImZh
bHNlIiA6ICJ0cnVlIik7CisgICAgICAgIG91dHB1dCArPSBldmFsQW5kUmV0dXJuKCJkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnbGFiZWw2YycpLnJlbW92ZSgpIik7CisgICAgICAgIG91dHB1dCAr
PSBhd2FpdCBleHBlY3RBc3luYygiYXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50
KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNmInKSkiLCAidHJ1ZSIpOworICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsK
KworICAgICAgICBkZWJ1ZyhvdXRwdXQpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9
LCAwKTsKIH0KLQogPC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvYWNjZXNzaWJpbGl0eS9tdWx0aXBsZS1sYWJlbC1pbnB1
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2FjY2Vzc2liaWxpdHkv
bXVsdGlwbGUtbGFiZWwtaW5wdXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uMmZmM2FmZmE5YzkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ2xpYi9hY2Nlc3NpYmlsaXR5L211bHRpcGxlLWxhYmVsLWlucHV0LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGlucHV0
cyB3aXRoIG11bHRpcGxlIGxhYmVscyBoYXZlIHRoZSBjb3JyZWN0IGFjY2Vzc2liaWxpdHkgdGV4
dCBleHBvc2VkLgorCitJbml0aWFsIEFYIHRleHQ6CisJQVhUaXRsZTogRW50ZXIgeW91ciBjb2xv
cgorCUFYRGVzY3JpcHRpb246Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWwyJykucmVt
b3ZlKCk7CisJQVhUaXRsZTogRW50ZXIgY29sb3IKKwlBWERlc2NyaXB0aW9uOgorZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xhYmVsMycpLmlubmVyVGV4dCA9ICdjaG9pY2UnOworCUFYVGl0bGU6
IEVudGVyIGNob2ljZQorCUFYRGVzY3JpcHRpb246CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorIEVudGVyIGNob2ljZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29y
cmVjdG5lc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9hY2Nlc3Np
YmlsaXR5L3RpdGxlLXVpLWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjUyYjc1N2RlNWYyCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9hY2Nlc3NpYmlsaXR5L3RpdGxlLXVp
LWVsZW1lbnQtY29ycmVjdG5lc3MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAKK1RoaXMg
dGVzdHMgdGhhdCB0aXRsZVVJRWxlbWVudCB3b3JrcyBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoaW5n
cyBjaGFuZ2UgZHluYW1pY2FsbHkuCisKK1BBU1M6IGF4RWxlbWVudCgnY29udHJvbDEnKS50aXRs
ZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDEnKSkgPT09IHRydWUKK1BBU1M6
IGF4RWxlbWVudCgnY29udHJvbDInKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50
KCdsYWJlbDInKSkgPT09IHRydWUKK1BBU1M6IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgn
Y29udHJvbDMnKSkgPT09IGZhbHNlCitkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWwzJyku
c2V0QXR0cmlidXRlKCdmb3InLCAnY29udHJvbDMnKTsKK1BBU1M6IGF4RWxlbWVudCgnY29udHJv
bDMnKS50aXRsZVVJRWxlbWVudCgpLmlzRXF1YWwoYXhFbGVtZW50KCdsYWJlbDMnKSkgPT09IHRy
dWUKK2xhYmVsNEVsZW1lbnQgPSBjcmVhdGVMYWJlbFdpdGhJZEFuZEZvckF0dHJpYnV0ZSgnbGFi
ZWw0JywgJ2NvbnRyb2w0Jyk7CitQQVNTOiBoYXNUaXRsZVVJRWxlbWVudChheEVsZW1lbnQoJ2Nv
bnRyb2w0JykpID09PSBmYWxzZQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicp
LmFwcGVuZENoaWxkKGxhYmVsNEVsZW1lbnQpOworUEFTUzogaGFzVGl0bGVVSUVsZW1lbnQoYXhF
bGVtZW50KCdjb250cm9sNCcpKSA9PT0gdHJ1ZQorUEFTUzogYXhFbGVtZW50KCdjb250cm9sNCcp
LnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQoJ2xhYmVsNCcpKSA9PT0gdHJ1ZQor
bGFiZWw0RWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxhYmVsNEVsZW1lbnQpOwor
UEFTUzogaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdjb250cm9sNCcpKSA9PT0gZmFsc2UK
K1BBU1M6IGhhc1RpdGxlVUlFbGVtZW50KGF4RWxlbWVudCgnY29udHJvbDUnKSkgPT09IGZhbHNl
CityZXBhcmVudE5vZGVJbnRvQ29udGFpbmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250
cm9sNScpLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWw1JykpOworUEFTUzogYXhFbGVt
ZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkgIT0gbnVsbCA9PT0gdHJ1ZQorUEFTUzog
YXhFbGVtZW50KCdjb250cm9sNScpLnRpdGxlVUlFbGVtZW50KCkuaXNFcXVhbChheEVsZW1lbnQo
J2xhYmVsNScpKSA9PT0gdHJ1ZQorUEFTUzogaGFzVGl0bGVVSUVsZW1lbnQoYXhFbGVtZW50KCdj
b250cm9sNicpKSA9PT0gdHJ1ZQorZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhYmVsNmMnKS5y
ZW1vdmUoKQorUEFTUzogYXhFbGVtZW50KCdjb250cm9sNicpLnRpdGxlVUlFbGVtZW50KCkuaXNF
cXVhbChheEVsZW1lbnQoJ2xhYmVsNmInKSkgPT09IHRydWUKKworUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L211bHRpcGxlLWxhYmVsLWlucHV0LWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L211bHRpcGxlLWxh
YmVsLWlucHV0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAuLjdmYjY0YmJkY2M1YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2lvcy9hY2Nlc3NpYmlsaXR5L211bHRpcGxlLWxhYmVsLWlucHV0LWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDEzIEBACitUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IGlucHV0cyB3aXRoIG11bHRp
cGxlIGxhYmVscyBoYXZlIHRoZSBjb3JyZWN0IGFjY2Vzc2liaWxpdHkgdGV4dCBleHBvc2VkLgor
CitJbml0aWFsIEFYIHRleHQ6CisJQVhMYWJlbDogRW50ZXIgeW91ciBjb2xvcgorZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xhYmVsMicpLnJlbW92ZSgpOworCUFYTGFiZWw6IEVudGVyIGNvbG9y
Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGFiZWwzJykuaW5uZXJUZXh0ID0gJ2Nob2ljZSc7
CisJQVhMYWJlbDogRW50ZXIgY2hvaWNlCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorIEVudGVyIGNob2ljZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>