<?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>193498</bug_id>
          
          <creation_ts>2019-01-16 10:45:37 -0800</creation_ts>
          <short_desc>clang-tidy: Fix unnecessary copy/ref churn of for loop variables in libwebrtc</short_desc>
          <delta_ts>2019-01-16 14:45:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebRTC</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.chromium.org/p/webrtc/issues/detail?id=10215</see_also>
          <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="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="David Kilzer (:ddkilzer)">ddkilzer</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1495114</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-01-16 10:45:37 -0800</bug_when>
    <thetext>Running clang-tidy on libwebrtc resulted in these potential performance improvements to prevent object copies or reference churn in for loops:

Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/filerotatingstream.cc:331:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto file_name : file_names_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/jseptransportcontroller.cc:632:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto content_name : new_bundle_group-&gt;content_names()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/jseptransportcontroller.cc:648:17: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
      for (auto content_name : new_bundle_group-&gt;content_names()) {
                ^
           const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/jseptransportcontroller.cc:659:17: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
      for (auto content_name : bundle_group_-&gt;content_names()) {
                ^
           const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/jseptransportcontroller.cc:707:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto content_name : bundle_group_-&gt;content_names()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/jseptransportcontroller.cc:742:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto content_name : bundle_group_-&gt;content_names()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/jseptransportcontroller.cc:848:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto extension : content_desc-&gt;rtp_header_extensions()) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/modules/bitrate_controller/loss_based_bandwidth_estimation.cc:127:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto pkt : packet_results) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/mdns_message.cc:356:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto rr : section) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/mdns_message.cc:364:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto question : question_section_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/opensslsessioncache.cc:25:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto it : sessions_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:846:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:882:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:887:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:1625:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto sender : GetSendersInternal()) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:1635:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:1657:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:1670:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:1881:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : GetReceivingTransceiversOfType(media_type)) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:1915:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2108:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto transceiver : transceivers_) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2136:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto transceiver : remove_list) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2139:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto stream : removed_streams) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2181:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto transceiver : transceivers_) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2461:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto transceiver : transceivers_) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2543:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto transceiver : now_receiving_transceivers) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2549:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto stream : added_streams) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2552:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto transceiver : remove_list) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2555:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto stream : removed_streams) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:2662:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto stream : media_streams) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:3384:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:4047:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:4817:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:4829:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:4841:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:5001:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:5116:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:5453:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:5630:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc:6367:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : transceivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/port.cc:951:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto kv : connections_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/video/receive_statistics_proxy.cc:278:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto it : content_specific_stats_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/video/receive_statistics_proxy.cc:300:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto it : aggregated_stats) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc:440:32: warning: the loop variable&apos;s type is not a reference type; this creates a copy in each iteration; consider making this a reference [performance-for-range-copy]
  for (const rtcp::ReportBlock report_block : sender_report.report_blocks())
                               ^
                              &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtcstatscollector.cc:537:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto sender : senders) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtcstatscollector.cc:605:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto receiver : receivers) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtcstatscollector.cc:1119:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto sender : stats.transceiver-&gt;senders()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtcstatscollector.cc:1127:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto receiver : stats.transceiver-&gt;receivers()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtcstatscollector.cc:1153:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto sender : stats.transceiver-&gt;senders()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtcstatscollector.cc:1160:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto receiver : stats.transceiver-&gt;receivers()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtcstatscollector.cc:1423:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : pc_-&gt;GetTransceiversInternal()) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtcstatscollector.cc:1496:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto sender : transceiver-&gt;senders()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtcstatscollector.cc:1500:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto receiver : transceiver-&gt;receivers()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpreceiver.cc:210:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto existing_stream : streams_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpreceiver.cc:212:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto stream : streams) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpreceiver.cc:224:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto stream : streams) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpreceiver.cc:226:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto existing_stream : streams_) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpreceiver.cc:409:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto existing_stream : streams_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpreceiver.cc:411:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto stream : streams) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpreceiver.cc:423:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto stream : streams) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpreceiver.cc:425:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto existing_stream : streams_) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtptransceiver.cc:62:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto sender : senders_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtptransceiver.cc:67:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto receiver : receivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtptransceiver.cc:150:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto receiver : receivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtptransceiver.cc:215:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto sender : senders_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtptransceiver.cc:218:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto receiver : receivers_) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/statscollector.cc:871:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto transceiver : pc_-&gt;GetTransceiversInternal()) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/statscollector.cc:912:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
    for (auto transceiver : pc_-&gt;GetTransceiversInternal()) {
              ^
         const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stunrequest.cc:72:19: warning: the loop variable&apos;s type is not a reference type; this creates a copy in each iteration; consider making this a reference [performance-for-range-copy]
  for (const auto kv : requests_) {
                  ^
                 &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stunrequest.cc:82:19: warning: the loop variable&apos;s type is not a reference type; this creates a copy in each iteration; consider making this a reference [performance-for-range-copy]
  for (const auto kv : requests_) {
                  ^
                 &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/trackmediainfomap.cc:50:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto rtp_sender : rtp_senders) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/trackmediainfomap.cc:75:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto rtp_receiver : rtp_receivers) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/trackmediainfomap.cc:129:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto sender : rtp_senders) {
            ^
       const  &amp;
--
Source/ThirdParty/libwebrtc/Source/webrtc/pc/trackmediainfomap.cc:132:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy]
  for (auto receiver : rtp_receivers) {
            ^
       const  &amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495127</commentid>
    <comment_count>1</comment_count>
      <attachid>359283</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-01-16 11:19:50 -0800</bug_when>
    <thetext>Created attachment 359283
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495130</commentid>
    <comment_count>2</comment_count>
      <attachid>359283</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-01-16 11:24:41 -0800</bug_when>
    <thetext>Comment on attachment 359283
Patch v1

Can we try upstreaming these changes?

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

&gt; Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc:440
&gt; +  for (const rtcp::ReportBlock&amp; report_block : sender_report.report_blocks())

Could use auto here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495138</commentid>
    <comment_count>3</comment_count>
      <attachid>359283</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-01-16 11:40:35 -0800</bug_when>
    <thetext>Comment on attachment 359283
Patch v1

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

&gt;&gt; Source/ThirdParty/libwebrtc/Source/webrtc/modules/rtp_rtcp/source/rtcp_receiver.cc:440
&gt;&gt; +  for (const rtcp::ReportBlock&amp; report_block : sender_report.report_blocks())
&gt; 
&gt; Could use auto here.

I debated doing that, but went with principle of least change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495229</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-16 14:19:52 -0800</bug_when>
    <thetext>&lt;rdar://problem/47329598&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495230</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-16 14:19:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/47329608&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495243</commentid>
    <comment_count>6</comment_count>
      <attachid>359283</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-16 14:45:00 -0800</bug_when>
    <thetext>Comment on attachment 359283
Patch v1

Clearing flags on attachment: 359283

Committed r240053: &lt;https://trac.webkit.org/changeset/240053&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495244</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-01-16 14:45:02 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359283</attachid>
            <date>2019-01-16 11:19:50 -0800</date>
            <delta_ts>2019-01-16 14:45:00 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-193498-20190116111949.patch</filename>
            <type>text/plain</type>
            <size>68370</size>
            <attacher name="David Kilzer (:ddkilzer)">ddkilzer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQwMDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCBjNzFiZjExNTkxMWZlZTMxMDFjZWY3YWRmOTVjNGE3MWQ2MTM5MmQ4Li5kZDc0
OWVlMzBlMjRlYmE3ZDIzYjE1OTM0YjE5YzcxZDlmOGRkZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxOS0wMS0xNiAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgorCisgICAgICAgIGNsYW5nLXRpZHk6IEZpeCB1bm5l
Y2Vzc2FyeSBjb3B5L3JlZiBjaHVybiBvZiBmb3IgbG9vcCB2YXJpYWJsZXMgaW4gbGlid2VicnRj
CisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xOTM0OTg+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHVud2FudGVkIGNvcHlpbmcvcmVm
IGNodXJuIG9mIGxvb3AgdmFyaWFibGVzIGJ5IG1ha2luZyB0aGVtCisgICAgICAgIGNvbnN0IHJl
ZmVyZW5jZXMuCisKKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYml0cmF0ZV9jb250
cm9sbGVyL2xvc3NfYmFzZWRfYmFuZHdpZHRoX2VzdGltYXRpb24uY2M6CisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL3J0cF9ydGNwL3NvdXJjZS9ydGNwX3JlY2VpdmVyLmNjOgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvcDJwL2Jhc2UvbWRuc19tZXNzYWdlLmNjOgorICAgICAgICAq
IFNvdXJjZS93ZWJydGMvcDJwL2Jhc2UvcG9ydC5jYzoKKyAgICAgICAgKiBTb3VyY2Uvd2VicnRj
L3AycC9iYXNlL3N0dW5yZXF1ZXN0LmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvcGMvanNl
cHRyYW5zcG9ydGNvbnRyb2xsZXIuY2M6CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9wYy9wZWVy
Y29ubmVjdGlvbi5jYzoKKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL3BjL3J0Y3N0YXRzY29sbGVj
dG9yLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvcGMvcnRwcmVjZWl2ZXIuY2M6CisgICAg
ICAgICogU291cmNlL3dlYnJ0Yy9wYy9ydHB0cmFuc2NlaXZlci5jYzoKKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL3BjL3N0YXRzY29sbGVjdG9yLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMv
cGMvdHJhY2ttZWRpYWluZm9tYXAuY2M6CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9ydGNfYmFz
ZS9maWxlcm90YXRpbmdzdHJlYW0uY2M6CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9ydGNfYmFz
ZS9vcGVuc3Nsc2Vzc2lvbmNhY2hlLmNjOgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvdmlkZW8v
cmVjZWl2ZV9zdGF0aXN0aWNzX3Byb3h5LmNjOgorICAgICAgICAqIFdlYktpdC8wMDAyLWxpYndl
YnJ0Yy1maXgtdW5uZWNlc3NhcnktY29weS1vZi1mb3ItbG9vcC12YXJpYWJsZXMuZGlmZjogQWRk
ZWQuCisKIDIwMTktMDEtMTUgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OIChyMjM5NTEwKTogUmVtb3ZlIGR1cGxpY2F0ZSBjb3B5IG9mIHNy
dHBzZXNzaW9uLmNjIGZyb20gJ3dlYnJ0Y3BjcnRjJyB0YXJnZXQgaW4gWGNvZGUgcHJvamVjdApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9iaXRyYXRlX2NvbnRyb2xsZXIvbG9zc19iYXNlZF9iYW5kd2lkdGhfZXN0aW1hdGlvbi5j
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYml0
cmF0ZV9jb250cm9sbGVyL2xvc3NfYmFzZWRfYmFuZHdpZHRoX2VzdGltYXRpb24uY2MKaW5kZXgg
NWQ3ZjhhYTJjMzZkN2ZkNjZkNTYyYWFjYjg2ZGU2Y2U3NjY2Y2U0Ny4uN2E4MjY2NmU4MTIwMzI4
NmM5Y2YwYTE4ZjA0Yzg3ZmRkMDZiZmQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9iaXRyYXRlX2NvbnRyb2xsZXIvbG9zc19i
YXNlZF9iYW5kd2lkdGhfZXN0aW1hdGlvbi5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2JpdHJhdGVfY29udHJvbGxlci9sb3NzX2Jhc2Vk
X2JhbmR3aWR0aF9lc3RpbWF0aW9uLmNjCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBMb3NzQmFz
ZWRCYW5kd2lkdGhFc3RpbWF0aW9uOjpVcGRhdGVMb3NzU3RhdGlzdGljcygKICAgICByZXR1cm47
CiAgIH0KICAgaW50IGxvc3NfY291bnQgPSAwOwotICBmb3IgKGF1dG8gcGt0IDogcGFja2V0X3Jl
c3VsdHMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBwa3QgOiBwYWNrZXRfcmVzdWx0cykgewogICAg
IGxvc3NfY291bnQgKz0gcGt0LnJlY2VpdmVfdGltZS5Jc0luZmluaXRlKCkgPyAxIDogMDsKICAg
fQogICBsYXN0X2xvc3NfcmF0aW9fID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihsb3NzX2NvdW50KSAv
IHBhY2tldF9yZXN1bHRzLnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvcnRwX3J0Y3Avc291cmNlL3J0Y3BfcmVjZWl2
ZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L3J0cF9ydGNwL3NvdXJjZS9ydGNwX3JlY2VpdmVyLmNjCmluZGV4IDM4M2Y3ODVkZmVhODIwNjIy
NTFkMGE0ZmNhNzFlNmZhYjlhMjc4YTcuLjA4NDA1MDQ2NTI4YzU3ZDIwOWZmNWQyZWJhYTRkMTVh
YTA2MjJkYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL21vZHVsZXMvcnRwX3J0Y3Avc291cmNlL3J0Y3BfcmVjZWl2ZXIuY2MKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9ydHBfcnRjcC9z
b3VyY2UvcnRjcF9yZWNlaXZlci5jYwpAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgUlRDUFJlY2Vp
dmVyOjpIYW5kbGVTZW5kZXJSZXBvcnQoY29uc3QgQ29tbW9uSGVhZGVyJiBydGNwX2Jsb2NrLAog
ICAgIHBhY2tldF9pbmZvcm1hdGlvbi0+cGFja2V0X3R5cGVfZmxhZ3MgfD0ga1J0Y3BScjsKICAg
fQogCi0gIGZvciAoY29uc3QgcnRjcDo6UmVwb3J0QmxvY2sgcmVwb3J0X2Jsb2NrIDogc2VuZGVy
X3JlcG9ydC5yZXBvcnRfYmxvY2tzKCkpCisgIGZvciAoY29uc3QgcnRjcDo6UmVwb3J0QmxvY2sm
IHJlcG9ydF9ibG9jayA6IHNlbmRlcl9yZXBvcnQucmVwb3J0X2Jsb2NrcygpKQogICAgIEhhbmRs
ZVJlcG9ydEJsb2NrKHJlcG9ydF9ibG9jaywgcGFja2V0X2luZm9ybWF0aW9uLCByZW1vdGVfc3Ny
Yyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3AycC9iYXNlL21kbnNfbWVzc2FnZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3AycC9iYXNlL21kbnNfbWVzc2FnZS5jYwppbmRleCBmMTRhMGQx
MTdlMzVlYTM5YzIyMWVlMWZmZjBjZjc4MjNkOTk0ZjgxLi4zMjFkMjFkMzViZDU4MjM0YzI3YjRk
NWI4ZWViMDkyY2I0MzYwNGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9wMnAvYmFzZS9tZG5zX21lc3NhZ2UuY2MKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcDJwL2Jhc2UvbWRuc19tZXNzYWdlLmNj
CkBAIC0zNTMsNyArMzUzLDcgQEAgYm9vbCBNZG5zTWVzc2FnZTo6V3JpdGUocnRjOjpCeXRlQnVm
ZmVyV3JpdGVyKiBidWYpIGNvbnN0IHsKICAgaGVhZGVyXy5Xcml0ZShidWYpOwogCiAgIGF1dG8g
d3JpdGVfcnIgPSBbJmJ1Zl0oY29uc3Qgc3RkOjp2ZWN0b3I8TWRuc1Jlc291cmNlUmVjb3JkPiYg
c2VjdGlvbikgewotICAgIGZvciAoYXV0byByciA6IHNlY3Rpb24pIHsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHJyIDogc2VjdGlvbikgewogICAgICAgaWYgKCFyci5Xcml0ZShidWYpKSB7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KQEAgLTM2MSw3ICszNjEsNyBAQCBib29sIE1kbnNN
ZXNzYWdlOjpXcml0ZShydGM6OkJ5dGVCdWZmZXJXcml0ZXIqIGJ1ZikgY29uc3QgewogICAgIHJl
dHVybiB0cnVlOwogICB9OwogCi0gIGZvciAoYXV0byBxdWVzdGlvbiA6IHF1ZXN0aW9uX3NlY3Rp
b25fKSB7CisgIGZvciAoY29uc3QgYXV0byYgcXVlc3Rpb24gOiBxdWVzdGlvbl9zZWN0aW9uXykg
ewogICAgIGlmICghcXVlc3Rpb24uV3JpdGUoYnVmKSkgewogICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3AycC9iYXNlL3BvcnQuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9wMnAvYmFzZS9wb3J0LmNjCmluZGV4IGJiMjBhNGQ1ZGEzOWVkOTBlMjRkZGJjNDFj
YjNkYjQ2YzQ0NWI2YjkuLmExODAxODBiOTFkNmE3NWMzYTFlMDMyMTg5MTEyNzkxMGU0OWI0NzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Ay
cC9iYXNlL3BvcnQuY2MKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvcDJwL2Jhc2UvcG9ydC5jYwpAQCAtOTQ4LDcgKzk0OCw3IEBAIHZvaWQgUG9ydDo6VXBk
YXRlTmV0d29ya0Nvc3QoKSB7CiAgIC8vIE5ldHdvcmsgY29zdCBjaGFuZ2Ugd2lsbCBhZmZlY3Qg
dGhlIGNvbm5lY3Rpb24gc2VsZWN0aW9uIGNyaXRlcmlhLgogICAvLyBTaWduYWwgdGhlIGNvbm5l
Y3Rpb24gc3RhdGUgY2hhbmdlIG9uIGVhY2ggY29ubmVjdGlvbiB0byBmb3JjZSBhCiAgIC8vIHJl
LXNvcnQgaW4gUDJQVHJhbnNwb3J0Q2hhbm5lbC4KLSAgZm9yIChhdXRvIGt2IDogY29ubmVjdGlv
bnNfKSB7CisgIGZvciAoY29uc3QgYXV0byYga3YgOiBjb25uZWN0aW9uc18pIHsKICAgICBDb25u
ZWN0aW9uKiBjb25uID0ga3Yuc2Vjb25kOwogICAgIGNvbm4tPlNpZ25hbFN0YXRlQ2hhbmdlKGNv
bm4pOwogICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9wMnAvYmFzZS9zdHVucmVxdWVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3AycC9iYXNlL3N0dW5yZXF1ZXN0LmNjCmluZGV4IGVkYmE0ZDY4
ZTU0YmMyMGEwZWYzZmQ0NjZhODRlNWM5ZDM2MzJmY2UuLmRmYjI3ZmNjYjE3N2Q4YTRlNDdjYzNk
ZTY3MmNhODdlYWRkNGQwNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL3AycC9iYXNlL3N0dW5yZXF1ZXN0LmNjCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3AycC9iYXNlL3N0dW5yZXF1ZXN0LmNjCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgU3R1blJlcXVlc3RNYW5hZ2VyOjpTZW5kRGVsYXllZChTdHVu
UmVxdWVzdCogcmVxdWVzdCwgaW50IGRlbGF5KSB7CiB9CiAKIHZvaWQgU3R1blJlcXVlc3RNYW5h
Z2VyOjpGbHVzaChpbnQgbXNnX3R5cGUpIHsKLSAgZm9yIChjb25zdCBhdXRvIGt2IDogcmVxdWVz
dHNfKSB7CisgIGZvciAoY29uc3QgYXV0byYga3YgOiByZXF1ZXN0c18pIHsKICAgICBTdHVuUmVx
dWVzdCogcmVxdWVzdCA9IGt2LnNlY29uZDsKICAgICBpZiAobXNnX3R5cGUgPT0ga0FsbFJlcXVl
c3RzIHx8IG1zZ190eXBlID09IHJlcXVlc3QtPnR5cGUoKSkgewogICAgICAgdGhyZWFkXy0+Q2xl
YXIocmVxdWVzdCwgTVNHX1NUVU5fU0VORCk7CkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgU3R1blJl
cXVlc3RNYW5hZ2VyOjpGbHVzaChpbnQgbXNnX3R5cGUpIHsKIH0KIAogYm9vbCBTdHVuUmVxdWVz
dE1hbmFnZXI6Okhhc1JlcXVlc3QoaW50IG1zZ190eXBlKSB7Ci0gIGZvciAoY29uc3QgYXV0byBr
diA6IHJlcXVlc3RzXykgeworICBmb3IgKGNvbnN0IGF1dG8mIGt2IDogcmVxdWVzdHNfKSB7CiAg
ICAgU3R1blJlcXVlc3QqIHJlcXVlc3QgPSBrdi5zZWNvbmQ7CiAgICAgaWYgKG1zZ190eXBlID09
IGtBbGxSZXF1ZXN0cyB8fCBtc2dfdHlwZSA9PSByZXF1ZXN0LT50eXBlKCkpIHsKICAgICAgIHJl
dHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvcGMvanNlcHRyYW5zcG9ydGNvbnRyb2xsZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9qc2VwdHJhbnNwb3J0Y29udHJvbGxlci5jYwpp
bmRleCA3OGVjYWYzMWRlYWM0ZTQxZThkYjQ4OGEwZGY2Y2E4MTUwNGQyY2I3Li4zMjhlM2NhNDJi
MThmYWQyOWQwODY3OGMxYzJkMDEyMDIzMTM5MWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9qc2VwdHJhbnNwb3J0Y29udHJvbGxlci5j
YworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9qc2Vw
dHJhbnNwb3J0Y29udHJvbGxlci5jYwpAQCAtNjI5LDcgKzYyOSw3IEBAIFJUQ0Vycm9yIEpzZXBU
cmFuc3BvcnRDb250cm9sbGVyOjpWYWxpZGF0ZUFuZE1heWJlVXBkYXRlQnVuZGxlR3JvdXAoCiAK
ICAgLy8gVGhlIEJVTkRMRSBncm91cCBjb250YWluaW5nIGEgTUlEIHRoYXQgbm8gbT0gc2VjdGlv
biBoYXMgaXMgaW52YWxpZC4KICAgaWYgKG5ld19idW5kbGVfZ3JvdXApIHsKLSAgICBmb3IgKGF1
dG8gY29udGVudF9uYW1lIDogbmV3X2J1bmRsZV9ncm91cC0+Y29udGVudF9uYW1lcygpKSB7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBjb250ZW50X25hbWUgOiBuZXdfYnVuZGxlX2dyb3VwLT5jb250
ZW50X25hbWVzKCkpIHsKICAgICAgIGlmICghZGVzY3JpcHRpb24tPkdldENvbnRlbnRCeU5hbWUo
Y29udGVudF9uYW1lKSkgewogICAgICAgICByZXR1cm4gUlRDRXJyb3IoUlRDRXJyb3JUeXBlOjpJ
TlZBTElEX1BBUkFNRVRFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgQlVORExFIGdy
b3VwIGNvbnRhaW5zIE1JRDoiICsgY29udGVudF9uYW1lICsKQEAgLTY0NSw3ICs2NDUsNyBAQCBS
VENFcnJvciBKc2VwVHJhbnNwb3J0Q29udHJvbGxlcjo6VmFsaWRhdGVBbmRNYXliZVVwZGF0ZUJ1
bmRsZUdyb3VwKAogCiAgICAgaWYgKG5ld19idW5kbGVfZ3JvdXApIHsKICAgICAgIC8vIFRoZSBC
VU5ETEUgZ3JvdXAgaW4gYW5zd2VyIHNob3VsZCBiZSBhIHN1YnNldCBvZiBvZmZlcmVkIGdyb3Vw
LgotICAgICAgZm9yIChhdXRvIGNvbnRlbnRfbmFtZSA6IG5ld19idW5kbGVfZ3JvdXAtPmNvbnRl
bnRfbmFtZXMoKSkgeworICAgICAgZm9yIChjb25zdCBhdXRvJiBjb250ZW50X25hbWUgOiBuZXdf
YnVuZGxlX2dyb3VwLT5jb250ZW50X25hbWVzKCkpIHsKICAgICAgICAgaWYgKCFvZmZlcmVkX2J1
bmRsZV9ncm91cCB8fAogICAgICAgICAgICAgIW9mZmVyZWRfYnVuZGxlX2dyb3VwLT5IYXNDb250
ZW50TmFtZShjb250ZW50X25hbWUpKSB7CiAgICAgICAgICAgcmV0dXJuIFJUQ0Vycm9yKFJUQ0Vy
cm9yVHlwZTo6SU5WQUxJRF9QQVJBTUVURVIsCkBAIC02NTYsNyArNjU2LDcgQEAgUlRDRXJyb3Ig
SnNlcFRyYW5zcG9ydENvbnRyb2xsZXI6OlZhbGlkYXRlQW5kTWF5YmVVcGRhdGVCdW5kbGVHcm91
cCgKICAgICB9CiAKICAgICBpZiAoYnVuZGxlX2dyb3VwXykgewotICAgICAgZm9yIChhdXRvIGNv
bnRlbnRfbmFtZSA6IGJ1bmRsZV9ncm91cF8tPmNvbnRlbnRfbmFtZXMoKSkgeworICAgICAgZm9y
IChjb25zdCBhdXRvJiBjb250ZW50X25hbWUgOiBidW5kbGVfZ3JvdXBfLT5jb250ZW50X25hbWVz
KCkpIHsKICAgICAgICAgLy8gQW4gYW5zd2VyIHRoYXQgcmVtb3ZlcyBtPSBzZWN0aW9ucyBmcm9t
IHByZS1uZWdvdGlhdGVkIEJVTkRMRSBncm91cAogICAgICAgICAvLyB3aXRob3V0IHJlamVjdGlu
ZyBpdCwgaXMgaW52YWxpZC4KICAgICAgICAgaWYgKCFuZXdfYnVuZGxlX2dyb3VwIHx8CkBAIC03
MDQsNyArNzA0LDcgQEAgUlRDRXJyb3IgSnNlcFRyYW5zcG9ydENvbnRyb2xsZXI6OlZhbGlkYXRl
QW5kTWF5YmVVcGRhdGVCdW5kbGVHcm91cCgKICAgLy8gSWYgdGhlIHxidW5kbGVkX2NvbnRlbnR8
IGlzIHJlamVjdGVkLCBvdGhlciBjb250ZW50cyBpbiB0aGUgYnVuZGxlIGdyb3VwCiAgIC8vIHNo
b3VsZCBiZSByZWplY3RlZC4KICAgaWYgKGJ1bmRsZWRfY29udGVudC0+cmVqZWN0ZWQpIHsKLSAg
ICBmb3IgKGF1dG8gY29udGVudF9uYW1lIDogYnVuZGxlX2dyb3VwXy0+Y29udGVudF9uYW1lcygp
KSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb250ZW50X25hbWUgOiBidW5kbGVfZ3JvdXBfLT5j
b250ZW50X25hbWVzKCkpIHsKICAgICAgIGF1dG8gb3RoZXJfY29udGVudCA9IGRlc2NyaXB0aW9u
LT5HZXRDb250ZW50QnlOYW1lKGNvbnRlbnRfbmFtZSk7CiAgICAgICBpZiAoIW90aGVyX2NvbnRl
bnQtPnJlamVjdGVkKSB7CiAgICAgICAgIHJldHVybiBSVENFcnJvcigKQEAgLTczOSw3ICs3Mzks
NyBAQCB2b2lkIEpzZXBUcmFuc3BvcnRDb250cm9sbGVyOjpIYW5kbGVSZWplY3RlZENvbnRlbnQo
CiAgIC8vIHRoZW4gZGVzdHJveSB0aGUgY3JpY2tldDo6SnNlcFRyYW5zcG9ydC4KICAgUmVtb3Zl
VHJhbnNwb3J0Rm9yTWlkKGNvbnRlbnRfaW5mby5uYW1lKTsKICAgaWYgKGNvbnRlbnRfaW5mby5u
YW1lID09IGJ1bmRsZWRfbWlkKCkpIHsKLSAgICBmb3IgKGF1dG8gY29udGVudF9uYW1lIDogYnVu
ZGxlX2dyb3VwXy0+Y29udGVudF9uYW1lcygpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBjb250
ZW50X25hbWUgOiBidW5kbGVfZ3JvdXBfLT5jb250ZW50X25hbWVzKCkpIHsKICAgICAgIFJlbW92
ZVRyYW5zcG9ydEZvck1pZChjb250ZW50X25hbWUpOwogICAgIH0KICAgICBidW5kbGVfZ3JvdXBf
LnJlc2V0KCk7CkBAIC04NDUsNyArODQ1LDcgQEAgc3RkOjp2ZWN0b3I8aW50PiBKc2VwVHJhbnNw
b3J0Q29udHJvbGxlcjo6R2V0RW5jcnlwdGVkSGVhZGVyRXh0ZW5zaW9uSWRzKAogICB9CiAKICAg
c3RkOjp2ZWN0b3I8aW50PiBlbmNyeXB0ZWRfaGVhZGVyX2V4dGVuc2lvbl9pZHM7Ci0gIGZvciAo
YXV0byBleHRlbnNpb24gOiBjb250ZW50X2Rlc2MtPnJ0cF9oZWFkZXJfZXh0ZW5zaW9ucygpKSB7
CisgIGZvciAoY29uc3QgYXV0byYgZXh0ZW5zaW9uIDogY29udGVudF9kZXNjLT5ydHBfaGVhZGVy
X2V4dGVuc2lvbnMoKSkgewogICAgIGlmICghZXh0ZW5zaW9uLmVuY3J5cHQpIHsKICAgICAgIGNv
bnRpbnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3BjL3BlZXJjb25uZWN0aW9uLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvcGMvcGVlcmNvbm5lY3Rpb24uY2MKaW5kZXggNGYwYThlYTAx
MTI3NjIyNzIwZDBjYmRkYzJlMWUxN2NjOTQwMjI1Yy4uZWU4YTkwOWUwM2U4NmZkZmMzMGIyMzlj
Y2I1NDAxMjNhMTRhMzU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvcGMvcGVlcmNvbm5lY3Rpb24uY2MKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvcGVlcmNvbm5lY3Rpb24uY2MKQEAgLTgzMiw3
ICs4MzIsNyBAQCBQZWVyQ29ubmVjdGlvbjo6flBlZXJDb25uZWN0aW9uKCkgewogICAvLyBOZWVk
IHRvIHN0b3AgdHJhbnNjZWl2ZXJzIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBzdGF0cyBjb2xsZWN0
b3IgYmVjYXVzZQogICAvLyBBdWRpb1J0cFNlbmRlciBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIFN0
YXRzQ29sbGVjdG9yIGl0IHdpbGwgdXBkYXRlIHdoZW4KICAgLy8gc3RvcHBpbmcuCi0gIGZvciAo
YXV0byB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0
cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKICAgICB0cmFuc2NlaXZlci0+U3RvcCgpOwog
ICB9CiAKQEAgLTg2OCwxMiArODY4LDEyIEBAIFBlZXJDb25uZWN0aW9uOjp+UGVlckNvbm5lY3Rp
b24oKSB7CiB2b2lkIFBlZXJDb25uZWN0aW9uOjpEZXN0cm95QWxsQ2hhbm5lbHMoKSB7CiAgIC8v
IERlc3Ryb3kgdmlkZW8gY2hhbm5lbHMgZmlyc3Qgc2luY2UgdGhleSBtYXkgaGF2ZSBhIHBvaW50
ZXIgdG8gYSB2b2ljZQogICAvLyBjaGFubmVsLgotICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIgOiB0
cmFuc2NlaXZlcnNfKSB7CisgIGZvciAoY29uc3QgYXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2Nl
aXZlcnNfKSB7CiAgICAgaWYgKHRyYW5zY2VpdmVyLT5tZWRpYV90eXBlKCkgPT0gY3JpY2tldDo6
TUVESUFfVFlQRV9WSURFTykgewogICAgICAgRGVzdHJveVRyYW5zY2VpdmVyQ2hhbm5lbCh0cmFu
c2NlaXZlcik7CiAgICAgfQogICB9Ci0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5zY2Vp
dmVyc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18p
IHsKICAgICBpZiAodHJhbnNjZWl2ZXItPm1lZGlhX3R5cGUoKSA9PSBjcmlja2V0OjpNRURJQV9U
WVBFX0FVRElPKSB7CiAgICAgICBEZXN0cm95VHJhbnNjZWl2ZXJDaGFubmVsKHRyYW5zY2VpdmVy
KTsKICAgICB9CkBAIC0xNjExLDcgKzE2MTEsNyBAQCBydGM6OnNjb3BlZF9yZWZwdHI8UnRwU2Vu
ZGVySW50ZXJmYWNlPiBQZWVyQ29ubmVjdGlvbjo6Q3JlYXRlU2VuZGVyKAogc3RkOjp2ZWN0b3I8
cnRjOjpzY29wZWRfcmVmcHRyPFJ0cFNlbmRlckludGVyZmFjZT4+IFBlZXJDb25uZWN0aW9uOjpH
ZXRTZW5kZXJzKCkKICAgICBjb25zdCB7CiAgIHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0
cjxSdHBTZW5kZXJJbnRlcmZhY2U+PiByZXQ7Ci0gIGZvciAoYXV0byBzZW5kZXIgOiBHZXRTZW5k
ZXJzSW50ZXJuYWwoKSkgeworICBmb3IgKGNvbnN0IGF1dG8mIHNlbmRlciA6IEdldFNlbmRlcnNJ
bnRlcm5hbCgpKSB7CiAgICAgcmV0LnB1c2hfYmFjayhzZW5kZXIpOwogICB9CiAgIHJldHVybiBy
ZXQ7CkBAIC0xNjIxLDcgKzE2MjEsNyBAQCBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8
UnRwU2VuZGVyUHJveHlXaXRoSW50ZXJuYWw8UnRwU2VuZGVySW50ZXJuYWw+Pj4KIFBlZXJDb25u
ZWN0aW9uOjpHZXRTZW5kZXJzSW50ZXJuYWwoKSBjb25zdCB7CiAgIHN0ZDo6dmVjdG9yPHJ0Yzo6
c2NvcGVkX3JlZnB0cjxSdHBTZW5kZXJQcm94eVdpdGhJbnRlcm5hbDxSdHBTZW5kZXJJbnRlcm5h
bD4+PgogICAgICAgYWxsX3NlbmRlcnM7Ci0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5z
Y2VpdmVyc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVy
c18pIHsKICAgICBhdXRvIHNlbmRlcnMgPSB0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+c2VuZGVy
cygpOwogICAgIGFsbF9zZW5kZXJzLmluc2VydChhbGxfc2VuZGVycy5lbmQoKSwgc2VuZGVycy5i
ZWdpbigpLCBzZW5kZXJzLmVuZCgpKTsKICAgfQpAQCAtMTY0Myw3ICsxNjQzLDcgQEAgUGVlckNv
bm5lY3Rpb246OkdldFJlY2VpdmVyc0ludGVybmFsKCkgY29uc3QgewogICBzdGQ6OnZlY3RvcjwK
ICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxSdHBSZWNlaXZlclByb3h5V2l0aEludGVybmFsPFJ0
cFJlY2VpdmVySW50ZXJuYWw+Pj4KICAgICAgIGFsbF9yZWNlaXZlcnM7Ci0gIGZvciAoYXV0byB0
cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2Nl
aXZlciA6IHRyYW5zY2VpdmVyc18pIHsKICAgICBhdXRvIHJlY2VpdmVycyA9IHRyYW5zY2VpdmVy
LT5pbnRlcm5hbCgpLT5yZWNlaXZlcnMoKTsKICAgICBhbGxfcmVjZWl2ZXJzLmluc2VydChhbGxf
cmVjZWl2ZXJzLmVuZCgpLCByZWNlaXZlcnMuYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWNlaXZlcnMuZW5kKCkpOwpAQCAtMTY1Niw3ICsxNjU2LDcgQEAgUGVlckNvbm5lY3Rp
b246OkdldFRyYW5zY2VpdmVycygpIGNvbnN0IHsKICAgUlRDX0NIRUNLKElzVW5pZmllZFBsYW4o
KSkKICAgICAgIDw8ICJHZXRUcmFuc2NlaXZlcnMgaXMgb25seSBzdXBwb3J0ZWQgd2l0aCBVbmlm
aWVkIFBsYW4gU2RwU2VtYW50aWNzLiI7CiAgIHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0
cjxSdHBUcmFuc2NlaXZlckludGVyZmFjZT4+IGFsbF90cmFuc2NlaXZlcnM7Ci0gIGZvciAoYXV0
byB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0cmFu
c2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKICAgICBhbGxfdHJhbnNjZWl2ZXJzLnB1c2hfYmFj
ayh0cmFuc2NlaXZlcik7CiAgIH0KICAgcmV0dXJuIGFsbF90cmFuc2NlaXZlcnM7CkBAIC0xODY3
LDcgKzE4NjcsNyBAQCBSVENFcnJvciBQZWVyQ29ubmVjdGlvbjo6SGFuZGxlTGVnYWN5T2ZmZXJP
cHRpb25zKAogCiB2b2lkIFBlZXJDb25uZWN0aW9uOjpSZW1vdmVSZWN2RGlyZWN0aW9uRnJvbVJl
Y2VpdmluZ1RyYW5zY2VpdmVyc09mVHlwZSgKICAgICBjcmlja2V0OjpNZWRpYVR5cGUgbWVkaWFf
dHlwZSkgewotICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIgOiBHZXRSZWNlaXZpbmdUcmFuc2NlaXZl
cnNPZlR5cGUobWVkaWFfdHlwZSkpIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6
IEdldFJlY2VpdmluZ1RyYW5zY2VpdmVyc09mVHlwZShtZWRpYV90eXBlKSkgewogICAgIFJ0cFRy
YW5zY2VpdmVyRGlyZWN0aW9uIG5ld19kaXJlY3Rpb24gPQogICAgICAgICBSdHBUcmFuc2NlaXZl
ckRpcmVjdGlvbldpdGhSZWN2U2V0KHRyYW5zY2VpdmVyLT5kaXJlY3Rpb24oKSwgZmFsc2UpOwog
ICAgIGlmIChuZXdfZGlyZWN0aW9uICE9IHRyYW5zY2VpdmVyLT5kaXJlY3Rpb24oKSkgewpAQCAt
MTkwMSw3ICsxOTAxLDcgQEAgUGVlckNvbm5lY3Rpb246OkdldFJlY2VpdmluZ1RyYW5zY2VpdmVy
c09mVHlwZShjcmlja2V0OjpNZWRpYVR5cGUgbWVkaWFfdHlwZSkgewogICBzdGQ6OnZlY3RvcjwK
ICAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxSdHBUcmFuc2NlaXZlclByb3h5V2l0aEludGVybmFs
PFJ0cFRyYW5zY2VpdmVyPj4+CiAgICAgICByZWNlaXZpbmdfdHJhbnNjZWl2ZXJzOwotICBmb3Ig
KGF1dG8gdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisgIGZvciAoY29uc3QgYXV0byYg
dHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CiAgICAgaWYgKCF0cmFuc2NlaXZlci0+c3Rv
cHBlZCgpICYmIHRyYW5zY2VpdmVyLT5tZWRpYV90eXBlKCkgPT0gbWVkaWFfdHlwZSAmJgogICAg
ICAgICBSdHBUcmFuc2NlaXZlckRpcmVjdGlvbkhhc1JlY3YodHJhbnNjZWl2ZXItPmRpcmVjdGlv
bigpKSkgewogICAgICAgcmVjZWl2aW5nX3RyYW5zY2VpdmVycy5wdXNoX2JhY2sodHJhbnNjZWl2
ZXIpOwpAQCAtMjA5NCw3ICsyMDk0LDcgQEAgUlRDRXJyb3IgUGVlckNvbm5lY3Rpb246OkFwcGx5
TG9jYWxEZXNjcmlwdGlvbigKICAgICB9CiAgICAgc3RkOjp2ZWN0b3I8cnRjOjpzY29wZWRfcmVm
cHRyPFJ0cFRyYW5zY2VpdmVySW50ZXJmYWNlPj4gcmVtb3ZlX2xpc3Q7CiAgICAgc3RkOjp2ZWN0
b3I8cnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPj4gcmVtb3ZlZF9zdHJl
YW1zOwotICAgIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgewogICAgICAgY29u
c3QgQ29udGVudEluZm8qIGNvbnRlbnQgPQogICAgICAgICAgIEZpbmRNZWRpYVNlY3Rpb25Gb3JU
cmFuc2NlaXZlcih0cmFuc2NlaXZlciwgbG9jYWxfZGVzY3JpcHRpb24oKSk7CiAgICAgICBpZiAo
IWNvbnRlbnQpIHsKQEAgLTIxMjIsMTAgKzIxMjIsMTAgQEAgUlRDRXJyb3IgUGVlckNvbm5lY3Rp
b246OkFwcGx5TG9jYWxEZXNjcmlwdGlvbigKICAgICAgIH0KICAgICB9CiAgICAgYXV0byBvYnNl
cnZlciA9IE9ic2VydmVyKCk7Ci0gICAgZm9yIChhdXRvIHRyYW5zY2VpdmVyIDogcmVtb3ZlX2xp
c3QpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zY2VpdmVyIDogcmVtb3ZlX2xpc3QpIHsK
ICAgICAgIG9ic2VydmVyLT5PblJlbW92ZVRyYWNrKHRyYW5zY2VpdmVyLT5yZWNlaXZlcigpKTsK
ICAgICB9Ci0gICAgZm9yIChhdXRvIHN0cmVhbSA6IHJlbW92ZWRfc3RyZWFtcykgeworICAgIGZv
ciAoY29uc3QgYXV0byYgc3RyZWFtIDogcmVtb3ZlZF9zdHJlYW1zKSB7CiAgICAgICBvYnNlcnZl
ci0+T25SZW1vdmVTdHJlYW0oc3RyZWFtKTsKICAgICB9CiAgIH0gZWxzZSB7CkBAIC0yMTY3LDcg
KzIxNjcsNyBAQCBSVENFcnJvciBQZWVyQ29ubmVjdGlvbjo6QXBwbHlMb2NhbERlc2NyaXB0aW9u
KAogICB9CiAKICAgaWYgKElzVW5pZmllZFBsYW4oKSkgewotICAgIGZvciAoYXV0byB0cmFuc2Nl
aXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zY2VpdmVy
IDogdHJhbnNjZWl2ZXJzXykgewogICAgICAgY29uc3QgQ29udGVudEluZm8qIGNvbnRlbnQgPQog
ICAgICAgICAgIEZpbmRNZWRpYVNlY3Rpb25Gb3JUcmFuc2NlaXZlcih0cmFuc2NlaXZlciwgbG9j
YWxfZGVzY3JpcHRpb24oKSk7CiAgICAgICBpZiAoIWNvbnRlbnQpIHsKQEAgLTI0NDcsNyArMjQ0
Nyw3IEBAIFJUQ0Vycm9yIFBlZXJDb25uZWN0aW9uOjpBcHBseVJlbW90ZURlc2NyaXB0aW9uKAog
ICAgIHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0cjxSdHBUcmFuc2NlaXZlckludGVyZmFj
ZT4+IHJlbW92ZV9saXN0OwogICAgIHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRp
YVN0cmVhbUludGVyZmFjZT4+IGFkZGVkX3N0cmVhbXM7CiAgICAgc3RkOjp2ZWN0b3I8cnRjOjpz
Y29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPj4gcmVtb3ZlZF9zdHJlYW1zOwotICAg
IGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgewogICAgICAgY29uc3QgQ29udGVu
dEluZm8qIGNvbnRlbnQgPQogICAgICAgICAgIEZpbmRNZWRpYVNlY3Rpb25Gb3JUcmFuc2NlaXZl
cih0cmFuc2NlaXZlciwgcmVtb3RlX2Rlc2NyaXB0aW9uKCkpOwogICAgICAgaWYgKCFjb250ZW50
KSB7CkBAIC0yNTQxLDE5ICsyNTQxLDE5IEBAIFJUQ0Vycm9yIFBlZXJDb25uZWN0aW9uOjpBcHBs
eVJlbW90ZURlc2NyaXB0aW9uKAogICAgIH0KICAgICAvLyBPbmNlIGFsbCBwcm9jZXNzaW5nIGhh
cyBmaW5pc2hlZCwgZmlyZSBvZmYgY2FsbGJhY2tzLgogICAgIGF1dG8gb2JzZXJ2ZXIgPSBPYnNl
cnZlcigpOwotICAgIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IG5vd19yZWNlaXZpbmdfdHJhbnNj
ZWl2ZXJzKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IG5vd19yZWNlaXZp
bmdfdHJhbnNjZWl2ZXJzKSB7CiAgICAgICBzdGF0c18tPkFkZFRyYWNrKHRyYW5zY2VpdmVyLT5y
ZWNlaXZlcigpLT50cmFjaygpKTsKICAgICAgIG9ic2VydmVyLT5PblRyYWNrKHRyYW5zY2VpdmVy
KTsKICAgICAgIG9ic2VydmVyLT5PbkFkZFRyYWNrKHRyYW5zY2VpdmVyLT5yZWNlaXZlcigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNjZWl2ZXItPnJlY2VpdmVyKCktPnN0cmVh
bXMoKSk7CiAgICAgfQotICAgIGZvciAoYXV0byBzdHJlYW0gOiBhZGRlZF9zdHJlYW1zKSB7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW0gOiBhZGRlZF9zdHJlYW1zKSB7CiAgICAgICBvYnNl
cnZlci0+T25BZGRTdHJlYW0oc3RyZWFtKTsKICAgICB9Ci0gICAgZm9yIChhdXRvIHRyYW5zY2Vp
dmVyIDogcmVtb3ZlX2xpc3QpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zY2VpdmVyIDog
cmVtb3ZlX2xpc3QpIHsKICAgICAgIG9ic2VydmVyLT5PblJlbW92ZVRyYWNrKHRyYW5zY2VpdmVy
LT5yZWNlaXZlcigpKTsKICAgICB9Ci0gICAgZm9yIChhdXRvIHN0cmVhbSA6IHJlbW92ZWRfc3Ry
ZWFtcykgeworICAgIGZvciAoY29uc3QgYXV0byYgc3RyZWFtIDogcmVtb3ZlZF9zdHJlYW1zKSB7
CiAgICAgICBvYnNlcnZlci0+T25SZW1vdmVTdHJlYW0oc3RyZWFtKTsKICAgICB9CiAgIH0KQEAg
LTI2NjAsNyArMjY2MCw3IEBAIHZvaWQgUGVlckNvbm5lY3Rpb246OlByb2Nlc3NSZW1vdmFsT2ZS
ZW1vdGVUcmFjaygKICAgLy8gVE9ETyhodHRwczovL2NyYnVnLmNvbS93ZWJydGMvOTQ4MCk6IFdo
ZW4gd2UgdXNlIHN0cmVhbSBJRHMgaW5zdGVhZAogICAvLyBvZiBzdHJlYW1zLCBzZWUgaWYgdGhl
IHN0cmVhbSB3YXMgcmVtb3ZlZCBieSBjaGVja2luZyBpZiB0aGlzIHdhcyB0aGUKICAgLy8gbGFz
dCByZWNlaXZlciB3aXRoIHRoYXQgc3RyZWFtIElELgotICBmb3IgKGF1dG8gc3RyZWFtIDogbWVk
aWFfc3RyZWFtcykgeworICBmb3IgKGNvbnN0IGF1dG8mIHN0cmVhbSA6IG1lZGlhX3N0cmVhbXMp
IHsKICAgICBpZiAoc3RyZWFtLT5HZXRBdWRpb1RyYWNrcygpLmVtcHR5KCkgJiYgc3RyZWFtLT5H
ZXRWaWRlb1RyYWNrcygpLmVtcHR5KCkpIHsKICAgICAgIHJlbW90ZV9zdHJlYW1zXy0+UmVtb3Zl
U3RyZWFtKHN0cmVhbSk7CiAgICAgICByZW1vdmVkX3N0cmVhbXMtPnB1c2hfYmFjayhzdHJlYW0p
OwpAQCAtMzM4Miw3ICszMzgyLDcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6Q2xvc2UoKSB7CiAg
IENoYW5nZVNpZ25hbGluZ1N0YXRlKFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprQ2xvc2VkKTsK
ICAgTm90ZVVzYWdlRXZlbnQoVXNhZ2VFdmVudDo6Q0xPU0VfQ0FMTEVEKTsKIAotICBmb3IgKGF1
dG8gdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisgIGZvciAoY29uc3QgYXV0byYgdHJh
bnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CiAgICAgdHJhbnNjZWl2ZXItPlN0b3AoKTsKICAg
fQogCkBAIC00MDQ1LDcgKzQwNDUsNyBAQCB2b2lkIFBlZXJDb25uZWN0aW9uOjpHZXRPcHRpb25z
Rm9yVW5pZmllZFBsYW5PZmZlcigKICAgLy8gYW5kIG5vdCBhc3NvY2lhdGVkKS4gUmV1c2UgbWVk
aWEgc2VjdGlvbnMgbWFya2VkIGFzIHJlY3ljbGFibGUgZmlyc3QsCiAgIC8vIG90aGVyd2lzZSBh
cHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgb2ZmZXIuIE5ldyBtZWRpYSBzZWN0aW9ucyBzaG91bGQg
YmUKICAgLy8gYWRkZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBhZGRlZCB0byB0aGUgUGVlckNv
bm5lY3Rpb24uCi0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAg
Zm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKICAgICBpZiAo
dHJhbnNjZWl2ZXItPm1pZCgpIHx8IHRyYW5zY2VpdmVyLT5zdG9wcGVkKCkpIHsKICAgICAgIGNv
bnRpbnVlOwogICAgIH0KQEAgLTQ4MTUsNyArNDgxNSw3IEBAIGJvb2wgUGVlckNvbm5lY3Rpb246
Okhhc1J0cFNlbmRlcihjcmlja2V0OjpNZWRpYVR5cGUgdHlwZSkgY29uc3QgewogCiBydGM6OnNj
b3BlZF9yZWZwdHI8UnRwU2VuZGVyUHJveHlXaXRoSW50ZXJuYWw8UnRwU2VuZGVySW50ZXJuYWw+
PgogUGVlckNvbm5lY3Rpb246OkZpbmRTZW5kZXJGb3JUcmFjayhNZWRpYVN0cmVhbVRyYWNrSW50
ZXJmYWNlKiB0cmFjaykgY29uc3QgewotICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIgOiB0cmFuc2Nl
aXZlcnNfKSB7CisgIGZvciAoY29uc3QgYXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNf
KSB7CiAgICAgZm9yIChhdXRvIHNlbmRlciA6IHRyYW5zY2VpdmVyLT5pbnRlcm5hbCgpLT5zZW5k
ZXJzKCkpIHsKICAgICAgIGlmIChzZW5kZXItPnRyYWNrKCkgPT0gdHJhY2spIHsKICAgICAgICAg
cmV0dXJuIHNlbmRlcjsKQEAgLTQ4MjcsNyArNDgyNyw3IEBAIFBlZXJDb25uZWN0aW9uOjpGaW5k
U2VuZGVyRm9yVHJhY2soTWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZSogdHJhY2spIGNvbnN0IHsK
IAogcnRjOjpzY29wZWRfcmVmcHRyPFJ0cFNlbmRlclByb3h5V2l0aEludGVybmFsPFJ0cFNlbmRl
ckludGVybmFsPj4KIFBlZXJDb25uZWN0aW9uOjpGaW5kU2VuZGVyQnlJZChjb25zdCBzdGQ6OnN0
cmluZyYgc2VuZGVyX2lkKSBjb25zdCB7Ci0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5z
Y2VpdmVyc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVy
c18pIHsKICAgICBmb3IgKGF1dG8gc2VuZGVyIDogdHJhbnNjZWl2ZXItPmludGVybmFsKCktPnNl
bmRlcnMoKSkgewogICAgICAgaWYgKHNlbmRlci0+aWQoKSA9PSBzZW5kZXJfaWQpIHsKICAgICAg
ICAgcmV0dXJuIHNlbmRlcjsKQEAgLTQ4MzksNyArNDgzOSw3IEBAIFBlZXJDb25uZWN0aW9uOjpG
aW5kU2VuZGVyQnlJZChjb25zdCBzdGQ6OnN0cmluZyYgc2VuZGVyX2lkKSBjb25zdCB7CiAKIHJ0
Yzo6c2NvcGVkX3JlZnB0cjxSdHBSZWNlaXZlclByb3h5V2l0aEludGVybmFsPFJ0cFJlY2VpdmVy
SW50ZXJuYWw+PgogUGVlckNvbm5lY3Rpb246OkZpbmRSZWNlaXZlckJ5SWQoY29uc3Qgc3RkOjpz
dHJpbmcmIHJlY2VpdmVyX2lkKSBjb25zdCB7Ci0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRy
YW5zY2VpdmVyc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2Vp
dmVyc18pIHsKICAgICBmb3IgKGF1dG8gcmVjZWl2ZXIgOiB0cmFuc2NlaXZlci0+aW50ZXJuYWwo
KS0+cmVjZWl2ZXJzKCkpIHsKICAgICAgIGlmIChyZWNlaXZlci0+aWQoKSA9PSByZWNlaXZlcl9p
ZCkgewogICAgICAgICByZXR1cm4gcmVjZWl2ZXI7CkBAIC00OTk5LDcgKzQ5OTksNyBAQCB2b2lk
IFBlZXJDb25uZWN0aW9uOjpTdG9wUnRjRXZlbnRMb2dfdygpIHsKIAogY3JpY2tldDo6Q2hhbm5l
bEludGVyZmFjZSogUGVlckNvbm5lY3Rpb246OkdldENoYW5uZWwoCiAgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIGNvbnRlbnRfbmFtZSkgewotICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIgOiB0cmFuc2Nl
aXZlcnNfKSB7CisgIGZvciAoY29uc3QgYXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNf
KSB7CiAgICAgY3JpY2tldDo6Q2hhbm5lbEludGVyZmFjZSogY2hhbm5lbCA9IHRyYW5zY2VpdmVy
LT5pbnRlcm5hbCgpLT5jaGFubmVsKCk7CiAgICAgaWYgKGNoYW5uZWwgJiYgY2hhbm5lbC0+Y29u
dGVudF9uYW1lKCkgPT0gY29udGVudF9uYW1lKSB7CiAgICAgICByZXR1cm4gY2hhbm5lbDsKQEAg
LTUxMTQsNyArNTExNCw3IEBAIFJUQ0Vycm9yIFBlZXJDb25uZWN0aW9uOjpQdXNoZG93bk1lZGlh
RGVzY3JpcHRpb24oCiAgIFJUQ19EQ0hFQ0soc2Rlc2MpOwogCiAgIC8vIFB1c2ggZG93biB0aGUg
bmV3IFNEUCBtZWRpYSBzZWN0aW9uIGZvciBlYWNoIGF1ZGlvL3ZpZGVvIHRyYW5zY2VpdmVyLgot
ICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisgIGZvciAoY29uc3Qg
YXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CiAgICAgY29uc3QgQ29udGVudElu
Zm8qIGNvbnRlbnRfaW5mbyA9CiAgICAgICAgIEZpbmRNZWRpYVNlY3Rpb25Gb3JUcmFuc2NlaXZl
cih0cmFuc2NlaXZlciwgc2Rlc2MpOwogICAgIGNyaWNrZXQ6OkNoYW5uZWxJbnRlcmZhY2UqIGNo
YW5uZWwgPSB0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+Y2hhbm5lbCgpOwpAQCAtNTQ2Myw3ICs1
NDYzLDcgQEAgY3JpY2tldDo6Q2FuZGlkYXRlU3RhdHNMaXN0IFBlZXJDb25uZWN0aW9uOjpHZXRQ
b29sZWRDYW5kaWRhdGVTdGF0cygpIGNvbnN0IHsKIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6
OnN0cmluZz4gUGVlckNvbm5lY3Rpb246OkdldFRyYW5zcG9ydE5hbWVzQnlNaWQoKQogICAgIGNv
bnN0IHsKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiB0cmFuc3BvcnRfbmFt
ZXNfYnlfbWlkOwotICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7Cisg
IGZvciAoY29uc3QgYXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CiAgICAgY3Jp
Y2tldDo6Q2hhbm5lbEludGVyZmFjZSogY2hhbm5lbCA9IHRyYW5zY2VpdmVyLT5pbnRlcm5hbCgp
LT5jaGFubmVsKCk7CiAgICAgaWYgKGNoYW5uZWwpIHsKICAgICAgIHRyYW5zcG9ydF9uYW1lc19i
eV9taWRbY2hhbm5lbC0+Y29udGVudF9uYW1lKCldID0KQEAgLTU2NDAsNyArNTY0MCw3IEBAIHZv
aWQgUGVlckNvbm5lY3Rpb246Ok9uVHJhbnNwb3J0Q29udHJvbGxlckR0bHNIYW5kc2hha2VFcnJv
cigKIH0KIAogdm9pZCBQZWVyQ29ubmVjdGlvbjo6RW5hYmxlU2VuZGluZygpIHsKLSAgZm9yIChh
dXRvIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworICBmb3IgKGNvbnN0IGF1dG8mIHRy
YW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgewogICAgIGNyaWNrZXQ6OkNoYW5uZWxJbnRlcmZh
Y2UqIGNoYW5uZWwgPSB0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+Y2hhbm5lbCgpOwogICAgIGlm
IChjaGFubmVsICYmICFjaGFubmVsLT5lbmFibGVkKCkpIHsKICAgICAgIGNoYW5uZWwtPkVuYWJs
ZSh0cnVlKTsKQEAgLTYzNzcsNyArNjM3Nyw3IEBAIHZvaWQgUGVlckNvbm5lY3Rpb246Ok9uVHJh
bnNwb3J0Q29udHJvbGxlckdhdGhlcmluZ1N0YXRlKAogdm9pZCBQZWVyQ29ubmVjdGlvbjo6UmVw
b3J0VHJhbnNwb3J0U3RhdHMoKSB7CiAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnNldDxj
cmlja2V0OjpNZWRpYVR5cGU+PgogICAgICAgbWVkaWFfdHlwZXNfYnlfdHJhbnNwb3J0X25hbWU7
Ci0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgZm9yIChjb25z
dCBhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKICAgICBpZiAodHJhbnNjZWl2
ZXItPmludGVybmFsKCktPmNoYW5uZWwoKSkgewogICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHRy
YW5zcG9ydF9uYW1lID0KICAgICAgICAgICB0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+Y2hhbm5l
bCgpLT50cmFuc3BvcnRfbmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvcGMvcnRjc3RhdHNjb2xsZWN0b3IuY2MgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9ydGNzdGF0c2NvbGxlY3Rvci5jYwpp
bmRleCBkNDhlY2MwMWYzNTllNTFiOTAwMjU5ODI4YzA4NWM4YjVlMTYxN2YyLi42ZmM0MTE4ZDk3
OTk0NmQxYjgyNGM5MjZjMDM5ZmE2ZmI5ZDNhNGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9ydGNzdGF0c2NvbGxlY3Rvci5jYworKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9ydGNzdGF0c2Nv
bGxlY3Rvci5jYwpAQCAtNTM0LDcgKzUzNCw3IEBAIHZvaWQgUHJvZHVjZVNlbmRlck1lZGlhVHJh
Y2tTdGF0cygKICAgLy8gVE9ETyhoYm9zKTogUmV0dXJuIHN0YXRzIG9mIGRldGFjaGVkIHRyYWNr
cy4gV2UgaGF2ZSB0byBwZXJmb3JtIHN0YXRzCiAgIC8vIGdhdGhlcmluZyBhdCB0aGUgdGltZSBv
ZiBkZXRhY2htZW50IHRvIGdldCBhY2N1cmF0ZSBzdGF0cyBhbmQgdGltZXN0YW1wcy4KICAgLy8g
aHR0cHM6Ly9jcmJ1Zy5jb20vNjU5MTM3Ci0gIGZvciAoYXV0byBzZW5kZXIgOiBzZW5kZXJzKSB7
CisgIGZvciAoY29uc3QgYXV0byYgc2VuZGVyIDogc2VuZGVycykgewogICAgIGlmIChzZW5kZXIt
Pm1lZGlhX3R5cGUoKSA9PSBjcmlja2V0OjpNRURJQV9UWVBFX0FVRElPKSB7CiAgICAgICBBdWRp
b1RyYWNrSW50ZXJmYWNlKiB0cmFjayA9CiAgICAgICAgICAgc3RhdGljX2Nhc3Q8QXVkaW9UcmFj
a0ludGVyZmFjZSo+KHNlbmRlci0+dHJhY2soKS5nZXQoKSk7CkBAIC02MDIsNyArNjAyLDcgQEAg
dm9pZCBQcm9kdWNlUmVjZWl2ZXJNZWRpYVRyYWNrU3RhdHMoCiAgICAgc3RkOjp2ZWN0b3I8cnRj
OjpzY29wZWRfcmVmcHRyPFJ0cFJlY2VpdmVySW50ZXJuYWw+PiByZWNlaXZlcnMsCiAgICAgUlRD
U3RhdHNSZXBvcnQqIHJlcG9ydCkgewogICAvLyBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIg
dGhlIHJlY2VpdmVycyB0byBmaW5kIHRoZSByZW1vdGUgdHJhY2tzLgotICBmb3IgKGF1dG8gcmVj
ZWl2ZXIgOiByZWNlaXZlcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiByZWNlaXZlciA6IHJlY2Vp
dmVycykgewogICAgIGlmIChyZWNlaXZlci0+bWVkaWFfdHlwZSgpID09IGNyaWNrZXQ6Ok1FRElB
X1RZUEVfQVVESU8pIHsKICAgICAgIEF1ZGlvVHJhY2tJbnRlcmZhY2UqIHRyYWNrID0KICAgICAg
ICAgICBzdGF0aWNfY2FzdDxBdWRpb1RyYWNrSW50ZXJmYWNlKj4ocmVjZWl2ZXItPnRyYWNrKCku
Z2V0KCkpOwpAQCAtMTExNiw3ICsxMTE2LDcgQEAgdm9pZCBSVENTdGF0c0NvbGxlY3Rvcjo6UHJv
ZHVjZU1lZGlhU3RyZWFtU3RhdHNfcygKICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPj4gdHJhY2tfaWRzOwogCiAgIGZvciAoY29uc3QgYXV0byYgc3RhdHMg
OiB0cmFuc2NlaXZlcl9zdGF0c19pbmZvc18pIHsKLSAgICBmb3IgKGF1dG8gc2VuZGVyIDogc3Rh
dHMudHJhbnNjZWl2ZXItPnNlbmRlcnMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgc2VuZGVy
IDogc3RhdHMudHJhbnNjZWl2ZXItPnNlbmRlcnMoKSkgewogICAgICAgc3RkOjpzdHJpbmcgdHJh
Y2tfaWQgPQogICAgICAgICAgIFJUQ01lZGlhU3RyZWFtVHJhY2tTdGF0c0lERnJvbURpcmVjdGlv
bkFuZEF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgIGtTZW5kZXIsIHNlbmRlci0+aW50ZXJuYWwo
KS0+QXR0YWNobWVudElkKCkpOwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgdm9pZCBSVENTdGF0c0Nv
bGxlY3Rvcjo6UHJvZHVjZU1lZGlhU3RyZWFtU3RhdHNfcygKICAgICAgICAgdHJhY2tfaWRzW3N0
cmVhbV9pZF0ucHVzaF9iYWNrKHRyYWNrX2lkKTsKICAgICAgIH0KICAgICB9Ci0gICAgZm9yIChh
dXRvIHJlY2VpdmVyIDogc3RhdHMudHJhbnNjZWl2ZXItPnJlY2VpdmVycygpKSB7CisgICAgZm9y
IChjb25zdCBhdXRvJiByZWNlaXZlciA6IHN0YXRzLnRyYW5zY2VpdmVyLT5yZWNlaXZlcnMoKSkg
ewogICAgICAgc3RkOjpzdHJpbmcgdHJhY2tfaWQgPQogICAgICAgICAgIFJUQ01lZGlhU3RyZWFt
VHJhY2tTdGF0c0lERnJvbURpcmVjdGlvbkFuZEF0dGFjaG1lbnQoCiAgICAgICAgICAgICAgIGtS
ZWNlaXZlciwgcmVjZWl2ZXItPmludGVybmFsKCktPkF0dGFjaG1lbnRJZCgpKTsKQEAgLTExNTAs
MTQgKzExNTAsMTQgQEAgdm9pZCBSVENTdGF0c0NvbGxlY3Rvcjo6UHJvZHVjZU1lZGlhU3RyZWFt
VHJhY2tTdGF0c19zKAogICBSVENfRENIRUNLKHNpZ25hbGluZ190aHJlYWRfLT5Jc0N1cnJlbnQo
KSk7CiAgIGZvciAoY29uc3QgUnRwVHJhbnNjZWl2ZXJTdGF0c0luZm8mIHN0YXRzIDogdHJhbnNj
ZWl2ZXJfc3RhdHNfaW5mb3NfKSB7CiAgICAgc3RkOjp2ZWN0b3I8cnRjOjpzY29wZWRfcmVmcHRy
PFJ0cFNlbmRlckludGVybmFsPj4gc2VuZGVyczsKLSAgICBmb3IgKGF1dG8gc2VuZGVyIDogc3Rh
dHMudHJhbnNjZWl2ZXItPnNlbmRlcnMoKSkgeworICAgIGZvciAoY29uc3QgYXV0byYgc2VuZGVy
IDogc3RhdHMudHJhbnNjZWl2ZXItPnNlbmRlcnMoKSkgewogICAgICAgc2VuZGVycy5wdXNoX2Jh
Y2soc2VuZGVyLT5pbnRlcm5hbCgpKTsKICAgICB9CiAgICAgUHJvZHVjZVNlbmRlck1lZGlhVHJh
Y2tTdGF0cyh0aW1lc3RhbXBfdXMsICpzdGF0cy50cmFja19tZWRpYV9pbmZvX21hcCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlcnMsIHJlcG9ydCk7CiAKICAgICBzdGQ6
OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8UnRwUmVjZWl2ZXJJbnRlcm5hbD4+IHJlY2VpdmVy
czsKLSAgICBmb3IgKGF1dG8gcmVjZWl2ZXIgOiBzdGF0cy50cmFuc2NlaXZlci0+cmVjZWl2ZXJz
KCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY2VpdmVyIDogc3RhdHMudHJhbnNjZWl2ZXIt
PnJlY2VpdmVycygpKSB7CiAgICAgICByZWNlaXZlcnMucHVzaF9iYWNrKHJlY2VpdmVyLT5pbnRl
cm5hbCgpKTsKICAgICB9CiAgICAgUHJvZHVjZVJlY2VpdmVyTWVkaWFUcmFja1N0YXRzKHRpbWVz
dGFtcF91cywgKnN0YXRzLnRyYWNrX21lZGlhX2luZm9fbWFwLApAQCAtMTQyMCw3ICsxNDIwLDcg
QEAgUlRDU3RhdHNDb2xsZWN0b3I6OlByZXBhcmVUcmFuc2NlaXZlclN0YXRzSW5mb3NfcygpIGNv
bnN0IHsKICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNyaWNrZXQ6OlZpZGVvTWVkaWFJbmZv
Pj4KICAgICAgIHZpZGVvX3N0YXRzOwogCi0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHBjXy0+
R2V0VHJhbnNjZWl2ZXJzSW50ZXJuYWwoKSkgeworICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zY2Vp
dmVyIDogcGNfLT5HZXRUcmFuc2NlaXZlcnNJbnRlcm5hbCgpKSB7CiAgICAgY3JpY2tldDo6TWVk
aWFUeXBlIG1lZGlhX3R5cGUgPSB0cmFuc2NlaXZlci0+bWVkaWFfdHlwZSgpOwogCiAgICAgLy8g
UHJlcGFyZSBzdGF0cyBlbnRyeS4gVGhlIFRyYWNrTWVkaWFJbmZvTWFwIHdpbGwgYmUgZmlsbGVk
IGluIGFmdGVyIHRoZQpAQCAtMTQ5MywxMSArMTQ5MywxMSBAQCBSVENTdGF0c0NvbGxlY3Rvcjo6
UHJlcGFyZVRyYW5zY2VpdmVyU3RhdHNJbmZvc19zKCkgY29uc3QgewogICAgICAgfQogICAgIH0K
ICAgICBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8UnRwU2VuZGVySW50ZXJuYWw+PiBz
ZW5kZXJzOwotICAgIGZvciAoYXV0byBzZW5kZXIgOiB0cmFuc2NlaXZlci0+c2VuZGVycygpKSB7
CisgICAgZm9yIChjb25zdCBhdXRvJiBzZW5kZXIgOiB0cmFuc2NlaXZlci0+c2VuZGVycygpKSB7
CiAgICAgICBzZW5kZXJzLnB1c2hfYmFjayhzZW5kZXItPmludGVybmFsKCkpOwogICAgIH0KICAg
ICBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8UnRwUmVjZWl2ZXJJbnRlcm5hbD4+IHJl
Y2VpdmVyczsKLSAgICBmb3IgKGF1dG8gcmVjZWl2ZXIgOiB0cmFuc2NlaXZlci0+cmVjZWl2ZXJz
KCkpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY2VpdmVyIDogdHJhbnNjZWl2ZXItPnJlY2Vp
dmVycygpKSB7CiAgICAgICByZWNlaXZlcnMucHVzaF9iYWNrKHJlY2VpdmVyLT5pbnRlcm5hbCgp
KTsKICAgICB9CiAgICAgc3RhdHMudHJhY2tfbWVkaWFfaW5mb19tYXAgPSBhYnNsOjptYWtlX3Vu
aXF1ZTxUcmFja01lZGlhSW5mb01hcD4oCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9ydHByZWNlaXZlci5jYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL3J0cHJlY2VpdmVyLmNjCmluZGV4IDE5MTZh
NzM2NzAzMmM0YmIxZjgxYTY1MTBkMmVlZjExYzQ1YTkyNzkuLmU1YTQzNzMyOTRjZDI1Njc3YTg5
ZmNhNjExODhmMzBlYmE1Y2VjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL3J0cHJlY2VpdmVyLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL3J0cHJlY2VpdmVyLmNjCkBAIC0yMDcsOSAr
MjA3LDkgQEAgdm9pZCBBdWRpb1J0cFJlY2VpdmVyOjpzZXRfc3RyZWFtX2lkcyhzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4gc3RyZWFtX2lkcykgewogdm9pZCBBdWRpb1J0cFJlY2VpdmVyOjpTZXRT
dHJlYW1zKAogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRpYVN0
cmVhbUludGVyZmFjZT4+JiBzdHJlYW1zKSB7CiAgIC8vIFJlbW92ZSByZW1vdGUgdHJhY2sgZnJv
bSBhbnkgc3RyZWFtcyB0aGF0IGFyZSBnb2luZyBhd2F5LgotICBmb3IgKGF1dG8gZXhpc3Rpbmdf
c3RyZWFtIDogc3RyZWFtc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiBleGlzdGluZ19zdHJlYW0g
OiBzdHJlYW1zXykgewogICAgIGJvb2wgcmVtb3ZlZCA9IHRydWU7Ci0gICAgZm9yIChhdXRvIHN0
cmVhbSA6IHN0cmVhbXMpIHsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmVhbSA6IHN0cmVhbXMp
IHsKICAgICAgIGlmIChleGlzdGluZ19zdHJlYW0tPmlkKCkgPT0gc3RyZWFtLT5pZCgpKSB7CiAg
ICAgICAgIFJUQ19EQ0hFQ0tfRVEoZXhpc3Rpbmdfc3RyZWFtLmdldCgpLCBzdHJlYW0uZ2V0KCkp
OwogICAgICAgICByZW1vdmVkID0gZmFsc2U7CkBAIC0yMjEsOSArMjIxLDkgQEAgdm9pZCBBdWRp
b1J0cFJlY2VpdmVyOjpTZXRTdHJlYW1zKAogICAgIH0KICAgfQogICAvLyBBZGQgcmVtb3RlIHRy
YWNrIHRvIGFueSBzdHJlYW1zIHRoYXQgYXJlIG5ldy4KLSAgZm9yIChhdXRvIHN0cmVhbSA6IHN0
cmVhbXMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW0gOiBzdHJlYW1zKSB7CiAgICAgYm9v
bCBhZGRlZCA9IHRydWU7Ci0gICAgZm9yIChhdXRvIGV4aXN0aW5nX3N0cmVhbSA6IHN0cmVhbXNf
KSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBleGlzdGluZ19zdHJlYW0gOiBzdHJlYW1zXykgewog
ICAgICAgaWYgKHN0cmVhbS0+aWQoKSA9PSBleGlzdGluZ19zdHJlYW0tPmlkKCkpIHsKICAgICAg
ICAgUlRDX0RDSEVDS19FUShzdHJlYW0uZ2V0KCksIGV4aXN0aW5nX3N0cmVhbS5nZXQoKSk7CiAg
ICAgICAgIGFkZGVkID0gZmFsc2U7CkBAIC00MDYsOSArNDA2LDkgQEAgdm9pZCBWaWRlb1J0cFJl
Y2VpdmVyOjpzZXRfc3RyZWFtX2lkcyhzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3RyZWFtX2lk
cykgewogdm9pZCBWaWRlb1J0cFJlY2VpdmVyOjpTZXRTdHJlYW1zKAogICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRpYVN0cmVhbUludGVyZmFjZT4+JiBzdHJlYW1z
KSB7CiAgIC8vIFJlbW92ZSByZW1vdGUgdHJhY2sgZnJvbSBhbnkgc3RyZWFtcyB0aGF0IGFyZSBn
b2luZyBhd2F5LgotICBmb3IgKGF1dG8gZXhpc3Rpbmdfc3RyZWFtIDogc3RyZWFtc18pIHsKKyAg
Zm9yIChjb25zdCBhdXRvJiBleGlzdGluZ19zdHJlYW0gOiBzdHJlYW1zXykgewogICAgIGJvb2wg
cmVtb3ZlZCA9IHRydWU7Ci0gICAgZm9yIChhdXRvIHN0cmVhbSA6IHN0cmVhbXMpIHsKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIHN0cmVhbSA6IHN0cmVhbXMpIHsKICAgICAgIGlmIChleGlzdGluZ19z
dHJlYW0tPmlkKCkgPT0gc3RyZWFtLT5pZCgpKSB7CiAgICAgICAgIFJUQ19EQ0hFQ0tfRVEoZXhp
c3Rpbmdfc3RyZWFtLmdldCgpLCBzdHJlYW0uZ2V0KCkpOwogICAgICAgICByZW1vdmVkID0gZmFs
c2U7CkBAIC00MjAsOSArNDIwLDkgQEAgdm9pZCBWaWRlb1J0cFJlY2VpdmVyOjpTZXRTdHJlYW1z
KAogICAgIH0KICAgfQogICAvLyBBZGQgcmVtb3RlIHRyYWNrIHRvIGFueSBzdHJlYW1zIHRoYXQg
YXJlIG5ldy4KLSAgZm9yIChhdXRvIHN0cmVhbSA6IHN0cmVhbXMpIHsKKyAgZm9yIChjb25zdCBh
dXRvJiBzdHJlYW0gOiBzdHJlYW1zKSB7CiAgICAgYm9vbCBhZGRlZCA9IHRydWU7Ci0gICAgZm9y
IChhdXRvIGV4aXN0aW5nX3N0cmVhbSA6IHN0cmVhbXNfKSB7CisgICAgZm9yIChjb25zdCBhdXRv
JiBleGlzdGluZ19zdHJlYW0gOiBzdHJlYW1zXykgewogICAgICAgaWYgKHN0cmVhbS0+aWQoKSA9
PSBleGlzdGluZ19zdHJlYW0tPmlkKCkpIHsKICAgICAgICAgUlRDX0RDSEVDS19FUShzdHJlYW0u
Z2V0KCksIGV4aXN0aW5nX3N0cmVhbS5nZXQoKSk7CiAgICAgICAgIGFkZGVkID0gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9y
dHB0cmFuc2NlaXZlci5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3BjL3J0cHRyYW5zY2VpdmVyLmNjCmluZGV4IDhiNTZiOGI0ZjEwYTUyOWY5YjlhM2IzZTA4
MTQyMTRkMTY2NGI3NjkuLjM2N2E1Mzc4MGM5Y2Y0Mzk2ODkxMWZiYmE2OTY1YzQwMjJmZjQyYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Bj
L3J0cHRyYW5zY2VpdmVyLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3BjL3J0cHRyYW5zY2VpdmVyLmNjCkBAIC01OSwxMiArNTksMTIgQEAgdm9pZCBS
dHBUcmFuc2NlaXZlcjo6U2V0Q2hhbm5lbChjcmlja2V0OjpDaGFubmVsSW50ZXJmYWNlKiBjaGFu
bmVsKSB7CiAgICAgICAgIHRoaXMsICZSdHBUcmFuc2NlaXZlcjo6T25GaXJzdFBhY2tldFJlY2Vp
dmVkKTsKICAgfQogCi0gIGZvciAoYXV0byBzZW5kZXIgOiBzZW5kZXJzXykgeworICBmb3IgKGNv
bnN0IGF1dG8mIHNlbmRlciA6IHNlbmRlcnNfKSB7CiAgICAgc2VuZGVyLT5pbnRlcm5hbCgpLT5T
ZXRNZWRpYUNoYW5uZWwoY2hhbm5lbF8gPyBjaGFubmVsXy0+bWVkaWFfY2hhbm5lbCgpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxscHRyKTsK
ICAgfQogCi0gIGZvciAoYXV0byByZWNlaXZlciA6IHJlY2VpdmVyc18pIHsKKyAgZm9yIChjb25z
dCBhdXRvJiByZWNlaXZlciA6IHJlY2VpdmVyc18pIHsKICAgICBpZiAoIWNoYW5uZWxfKSB7CiAg
ICAgICByZWNlaXZlci0+aW50ZXJuYWwoKS0+U3RvcCgpOwogICAgIH0KQEAgLTE0Nyw3ICsxNDcs
NyBAQCBhYnNsOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gUnRwVHJhbnNjZWl2ZXI6Om1pZCgpIGNv
bnN0IHsKIH0KIAogdm9pZCBSdHBUcmFuc2NlaXZlcjo6T25GaXJzdFBhY2tldFJlY2VpdmVkKGNy
aWNrZXQ6OkNoYW5uZWxJbnRlcmZhY2UqKSB7Ci0gIGZvciAoYXV0byByZWNlaXZlciA6IHJlY2Vp
dmVyc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiByZWNlaXZlciA6IHJlY2VpdmVyc18pIHsKICAg
ICByZWNlaXZlci0+aW50ZXJuYWwoKS0+Tm90aWZ5Rmlyc3RQYWNrZXRSZWNlaXZlZCgpOwogICB9
CiB9CkBAIC0yMTIsMTAgKzIxMiwxMCBAQCBhYnNsOjpvcHRpb25hbDxSdHBUcmFuc2NlaXZlckRp
cmVjdGlvbj4gUnRwVHJhbnNjZWl2ZXI6OmZpcmVkX2RpcmVjdGlvbigpCiB9CiAKIHZvaWQgUnRw
VHJhbnNjZWl2ZXI6OlN0b3AoKSB7Ci0gIGZvciAoYXV0byBzZW5kZXIgOiBzZW5kZXJzXykgewor
ICBmb3IgKGNvbnN0IGF1dG8mIHNlbmRlciA6IHNlbmRlcnNfKSB7CiAgICAgc2VuZGVyLT5pbnRl
cm5hbCgpLT5TdG9wKCk7CiAgIH0KLSAgZm9yIChhdXRvIHJlY2VpdmVyIDogcmVjZWl2ZXJzXykg
eworICBmb3IgKGNvbnN0IGF1dG8mIHJlY2VpdmVyIDogcmVjZWl2ZXJzXykgewogICAgIHJlY2Vp
dmVyLT5pbnRlcm5hbCgpLT5TdG9wKCk7CiAgIH0KICAgc3RvcHBlZF8gPSB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvc3RhdHNj
b2xsZWN0b3IuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9w
Yy9zdGF0c2NvbGxlY3Rvci5jYwppbmRleCAzY2Q4NWU2OWIyM2JmMzY1MTMwNjBkZWJhYWQzOWM3
MTQzNGI4NWYyLi4zZmM5ODhiNDllYjYwOTlmOGFlMmQyZWNkY2ZjMDY2OTU4MmMzY2MzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9zdGF0
c2NvbGxlY3Rvci5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9wYy9zdGF0c2NvbGxlY3Rvci5jYwpAQCAtODcxLDcgKzg3MSw3IEBAIHZvaWQgU3RhdHND
b2xsZWN0b3I6OkV4dHJhY3RCd2VJbmZvKCkgewogCiAgIC8vIEZpbGwgaW4gdGFyZ2V0IGVuY29k
ZXIgYml0cmF0ZSwgYWN0dWFsIGVuY29kZXIgYml0cmF0ZSwgcnR4IGJpdHJhdGUsIGV0Yy4KICAg
Ly8gVE9ETyhob2xtZXIpOiBBbHNvIGZpbGwgdGhpcyBpbiBmb3IgYXVkaW8uCi0gIGZvciAoYXV0
byB0cmFuc2NlaXZlciA6IHBjXy0+R2V0VHJhbnNjZWl2ZXJzSW50ZXJuYWwoKSkgeworICBmb3Ig
KGNvbnN0IGF1dG8mIHRyYW5zY2VpdmVyIDogcGNfLT5HZXRUcmFuc2NlaXZlcnNJbnRlcm5hbCgp
KSB7CiAgICAgaWYgKHRyYW5zY2VpdmVyLT5tZWRpYV90eXBlKCkgIT0gY3JpY2tldDo6TUVESUFf
VFlQRV9WSURFTykgewogICAgICAgY29udGludWU7CiAgICAgfQpAQCAtOTEyLDcgKzkxMiw3IEBA
IHZvaWQgU3RhdHNDb2xsZWN0b3I6OkV4dHJhY3RNZWRpYUluZm8oKSB7CiAKICAgewogICAgIHJ0
Yzo6VGhyZWFkOjpTY29wZWREaXNhbGxvd0Jsb2NraW5nQ2FsbHMgbm9fYmxvY2tpbmdfY2FsbHM7
Ci0gICAgZm9yIChhdXRvIHRyYW5zY2VpdmVyIDogcGNfLT5HZXRUcmFuc2NlaXZlcnNJbnRlcm5h
bCgpKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IHBjXy0+R2V0VHJhbnNj
ZWl2ZXJzSW50ZXJuYWwoKSkgewogICAgICAgaWYgKCF0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+
Y2hhbm5lbCgpKSB7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvdHJhY2ttZWRpYWluZm9t
YXAuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy90cmFj
a21lZGlhaW5mb21hcC5jYwppbmRleCBiNWFiYjdlOTM2NWQ3ZmVkODFiNTU1NjllNjIzYjZjMjA0
MGI4YWI4Li41MTgyNmRmNDVmYzc3YzQ4MDYyZDdlMGU3ZjI5NDIzYjA2M2NhYzcwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy90cmFja21l
ZGlhaW5mb21hcC5jYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9wYy90cmFja21lZGlhaW5mb21hcC5jYwpAQCAtNDcsNyArNDcsNyBAQCB2b2lkIEdldEF1
ZGlvQW5kVmlkZW9UcmFja0J5U3NyYygKICAgLy8gbWVhbnMgb25lIHRocmVhZCBqdW1wIGlmIG9u
IHNpZ25hbGluZyB0aHJlYWQgYW5kIHR3byB0aHJlYWQganVtcHMgaWYgb24gYW55CiAgIC8vIG90
aGVyIHRocmVhZHMpLiBJcyB0aGVyZSBhIHdheSB0byBhdm9pZCB0aHJlYWQganVtcChzKSBvbiBh
IHBlcgogICAvLyBzZW5kZXIvcmVjZWl2ZXIsIHBlciBtZXRob2QgYmFzaXM/Ci0gIGZvciAoYXV0
byBydHBfc2VuZGVyIDogcnRwX3NlbmRlcnMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBydHBfc2Vu
ZGVyIDogcnRwX3NlbmRlcnMpIHsKICAgICBjcmlja2V0OjpNZWRpYVR5cGUgbWVkaWFfdHlwZSA9
IHJ0cF9zZW5kZXItPm1lZGlhX3R5cGUoKTsKICAgICBNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNl
KiB0cmFjayA9IHJ0cF9zZW5kZXItPnRyYWNrKCk7CiAgICAgaWYgKCF0cmFjaykgewpAQCAtNzIs
NyArNzIsNyBAQCB2b2lkIEdldEF1ZGlvQW5kVmlkZW9UcmFja0J5U3NyYygKICAgICAgIH0KICAg
ICB9CiAgIH0KLSAgZm9yIChhdXRvIHJ0cF9yZWNlaXZlciA6IHJ0cF9yZWNlaXZlcnMpIHsKKyAg
Zm9yIChjb25zdCBhdXRvJiBydHBfcmVjZWl2ZXIgOiBydHBfcmVjZWl2ZXJzKSB7CiAgICAgY3Jp
Y2tldDo6TWVkaWFUeXBlIG1lZGlhX3R5cGUgPSBydHBfcmVjZWl2ZXItPm1lZGlhX3R5cGUoKTsK
ICAgICBNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlKiB0cmFjayA9IHJ0cF9yZWNlaXZlci0+dHJh
Y2soKTsKICAgICBSVENfRENIRUNLKHRyYWNrKTsKQEAgLTEyNiwxMCArMTI2LDEwIEBAIFRyYWNr
TWVkaWFJbmZvTWFwOjpUcmFja01lZGlhSW5mb01hcCgKICAgICAgICZyZW1vdGVfdmlkZW9fdHJh
Y2tfYnlfc3NyYywgJnVuc2lnbmFsZWRfYXVkaW9fdHJhY2ssCiAgICAgICAmdW5zaWduYWxlZF92
aWRlb190cmFjayk7CiAKLSAgZm9yIChhdXRvIHNlbmRlciA6IHJ0cF9zZW5kZXJzKSB7CisgIGZv
ciAoY29uc3QgYXV0byYgc2VuZGVyIDogcnRwX3NlbmRlcnMpIHsKICAgICBhdHRhY2htZW50X2lk
X2J5X3RyYWNrX1tzZW5kZXItPnRyYWNrKCldID0gc2VuZGVyLT5BdHRhY2htZW50SWQoKTsKICAg
fQotICBmb3IgKGF1dG8gcmVjZWl2ZXIgOiBydHBfcmVjZWl2ZXJzKSB7CisgIGZvciAoY29uc3Qg
YXV0byYgcmVjZWl2ZXIgOiBydHBfcmVjZWl2ZXJzKSB7CiAgICAgYXR0YWNobWVudF9pZF9ieV90
cmFja19bcmVjZWl2ZXItPnRyYWNrKCldID0gcmVjZWl2ZXItPkF0dGFjaG1lbnRJZCgpOwogICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3J0Y19iYXNlL2ZpbGVyb3RhdGluZ3N0cmVhbS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL2ZpbGVyb3RhdGluZ3N0cmVhbS5jYwppbmRleCBi
MWRjNWZmOTk4MTc4NTFjMWM5NTIxYjRlMDg3YjAyYWJlNTA5MzY5Li4zOGQ4NTJlNTNjZTcyZWQx
YzNiYzg1ZWRmZTk1M2JhYjJmNjkzYjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9ydGNfYmFzZS9maWxlcm90YXRpbmdzdHJlYW0uY2MKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcnRjX2Jhc2UvZmls
ZXJvdGF0aW5nc3RyZWFtLmNjCkBAIC0zMjgsNyArMzI4LDcgQEAgYm9vbCBGaWxlUm90YXRpbmdT
dHJlYW06OkdldFNpemUoc2l6ZV90KiBzaXplKSBjb25zdCB7CiAgIFJUQ19EQ0hFQ0soc2l6ZSk7
CiAgICpzaXplID0gMDsKICAgc2l6ZV90IHRvdGFsX3NpemUgPSAwOwotICBmb3IgKGF1dG8gZmls
ZV9uYW1lIDogZmlsZV9uYW1lc18pIHsKKyAgZm9yIChjb25zdCBhdXRvJiBmaWxlX25hbWUgOiBm
aWxlX25hbWVzXykgewogICAgIHRvdGFsX3NpemUgKz0gR2V0RmlsZVNpemUoZmlsZV9uYW1lKS52
YWx1ZV9vcigwKTsKICAgfQogICAqc2l6ZSA9IHRvdGFsX3NpemU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9ydGNfYmFzZS9vcGVuc3Nsc2Vz
c2lvbmNhY2hlLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
cnRjX2Jhc2Uvb3BlbnNzbHNlc3Npb25jYWNoZS5jYwppbmRleCAyZTM3ZDU1ZGViMWE1ZmYyNTc1
N2IzOTkxYzkwZjU3NmEzNTdjMjQzLi43YjgyMjc2NzI4YjcyMzZkNDIxZjdhODMzMzE3YWY3ZDU0
YjExZDU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9ydGNfYmFzZS9vcGVuc3Nsc2Vzc2lvbmNhY2hlLmNjCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL29wZW5zc2xzZXNzaW9uY2FjaGUu
Y2MKQEAgLTIyLDcgKzIyLDcgQEAgT3BlblNTTFNlc3Npb25DYWNoZTo6T3BlblNTTFNlc3Npb25D
YWNoZShTU0xNb2RlIHNzbF9tb2RlLCBTU0xfQ1RYKiBzc2xfY3R4KQogfQogCiBPcGVuU1NMU2Vz
c2lvbkNhY2hlOjp+T3BlblNTTFNlc3Npb25DYWNoZSgpIHsKLSAgZm9yIChhdXRvIGl0IDogc2Vz
c2lvbnNfKSB7CisgIGZvciAoY29uc3QgYXV0byYgaXQgOiBzZXNzaW9uc18pIHsKICAgICBTU0xf
U0VTU0lPTl9mcmVlKGl0LnNlY29uZCk7CiAgIH0KICAgU1NMX0NUWF9mcmVlKHNzbF9jdHhfKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Zp
ZGVvL3JlY2VpdmVfc3RhdGlzdGljc19wcm94eS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3ZpZGVvL3JlY2VpdmVfc3RhdGlzdGljc19wcm94eS5jYwppbmRl
eCBlMjBiN2QyOTRmZDYyMjQ5NDJjNzc5OGFlNjY0MDNiNWQ4MzU3ZGRkLi5lODJlOTY3Y2Y0ZmMy
OWJhZTQzMWMwMzhmYTEyNTAyM2EzOTYxYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy92aWRlby9yZWNlaXZlX3N0YXRpc3RpY3NfcHJveHku
Y2MKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdmlkZW8v
cmVjZWl2ZV9zdGF0aXN0aWNzX3Byb3h5LmNjCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBSZWNl
aXZlU3RhdGlzdGljc1Byb3h5OjpVcGRhdGVIaXN0b2dyYW1zKCkgewogICAvLyBBZ2dyZWdhdGUg
Y29udGVudF9zcGVjaWZpY19zdGF0c18gYnkgcmVtb3ZpbmcgZXhwZXJpbWVudCBvciBzaW11bGNh
c3QKICAgLy8gaW5mb3JtYXRpb247CiAgIHN0ZDo6bWFwPFZpZGVvQ29udGVudFR5cGUsIENvbnRl
bnRTcGVjaWZpY1N0YXRzPiBhZ2dyZWdhdGVkX3N0YXRzOwotICBmb3IgKGF1dG8gaXQgOiBjb250
ZW50X3NwZWNpZmljX3N0YXRzXykgeworICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogY29udGVudF9z
cGVjaWZpY19zdGF0c18pIHsKICAgICAvLyBDYWxjdWxhdGUgc2ltdWxjYXN0IHNwZWNpZmljIG1l
dHJpY3MgKCIuUzAiIC4uLiAiLlMyIiBzdWZmaXhlcykuCiAgICAgVmlkZW9Db250ZW50VHlwZSBj
b250ZW50X3R5cGUgPSBpdC5maXJzdDsKICAgICBpZiAodmlkZW9jb250ZW50dHlwZWhlbHBlcnM6
OkdldFNpbXVsY2FzdElkKGNvbnRlbnRfdHlwZSkgPiAwKSB7CkBAIC0yOTcsNyArMjk3LDcgQEAg
dm9pZCBSZWNlaXZlU3RhdGlzdGljc1Byb3h5OjpVcGRhdGVIaXN0b2dyYW1zKCkgewogICAgIGFn
Z3JlZ2F0ZWRfc3RhdHNbY29udGVudF90eXBlXS5BZGQoaXQuc2Vjb25kKTsKICAgfQogCi0gIGZv
ciAoYXV0byBpdCA6IGFnZ3JlZ2F0ZWRfc3RhdHMpIHsKKyAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IGFnZ3JlZ2F0ZWRfc3RhdHMpIHsKICAgICAvLyBGb3IgdGhlIG1ldHJpYyBGb28gd2UgcmVwb3J0
IHRoZSBmb2xsb3dpbmcgc2xpY2VzOgogICAgIC8vIFdlYlJUQy5WaWRlby5Gb28sCiAgICAgLy8g
V2ViUlRDLlZpZGVvLlNjcmVlbnNoYXJlLkZvbywKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9XZWJLaXQvMDAwMi1saWJ3ZWJydGMtZml4LXVubmVjZXNzYXJ5LWNvcHkt
b2YtZm9yLWxvb3AtdmFyaWFibGVzLmRpZmYgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
V2ViS2l0LzAwMDItbGlid2VicnRjLWZpeC11bm5lY2Vzc2FyeS1jb3B5LW9mLWZvci1sb29wLXZh
cmlhYmxlcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMyYTFlMjQ1YTlkN2IzMTY1OGY4MTc1ZmMzMGEyZTkw
ZmQ3ZmE2ODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
V2ViS2l0LzAwMDItbGlid2VicnRjLWZpeC11bm5lY2Vzc2FyeS1jb3B5LW9mLWZvci1sb29wLXZh
cmlhYmxlcy5kaWZmCkBAIC0wLDAgKzEsNjY0IEBACitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9iaXRyYXRlX2NvbnRyb2xsZXIv
bG9zc19iYXNlZF9iYW5kd2lkdGhfZXN0aW1hdGlvbi5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYml0cmF0ZV9jb250cm9sbGVyL2xvc3NfYmFz
ZWRfYmFuZHdpZHRoX2VzdGltYXRpb24uY2MKK2luZGV4IDVkN2Y4YWEyYzM2Li43YTgyNjY2ZTgx
MiAxMDA2NDQKKy0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvYml0cmF0ZV9jb250cm9sbGVyL2xvc3NfYmFzZWRfYmFuZHdpZHRoX2VzdGltYXRp
b24uY2MKKysrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYml0cmF0ZV9jb250cm9sbGVyL2xvc3NfYmFzZWRfYmFuZHdpZHRoX2VzdGltYXRpb24u
Y2MKK0BAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBMb3NzQmFzZWRCYW5kd2lkdGhFc3RpbWF0aW9u
OjpVcGRhdGVMb3NzU3RhdGlzdGljcygKKyAgICAgcmV0dXJuOworICAgfQorICAgaW50IGxvc3Nf
Y291bnQgPSAwOworLSAgZm9yIChhdXRvIHBrdCA6IHBhY2tldF9yZXN1bHRzKSB7CisrICBmb3Ig
KGNvbnN0IGF1dG8mIHBrdCA6IHBhY2tldF9yZXN1bHRzKSB7CisgICAgIGxvc3NfY291bnQgKz0g
cGt0LnJlY2VpdmVfdGltZS5Jc0luZmluaXRlKCkgPyAxIDogMDsKKyAgIH0KKyAgIGxhc3RfbG9z
c19yYXRpb18gPSBzdGF0aWNfY2FzdDxkb3VibGU+KGxvc3NfY291bnQpIC8gcGFja2V0X3Jlc3Vs
dHMuc2l6ZSgpOworZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvcnRwX3J0Y3Avc291cmNlL3J0Y3BfcmVjZWl2ZXIuY2MgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL3J0cF9ydGNwL3Nv
dXJjZS9ydGNwX3JlY2VpdmVyLmNjCitpbmRleCAzODNmNzg1ZGZlYS4uMDg0MDUwNDY1MjggMTAw
NjQ0CistLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL3J0cF9ydGNwL3NvdXJjZS9ydGNwX3JlY2VpdmVyLmNjCisrKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL3J0cF9ydGNwL3NvdXJjZS9ydGNw
X3JlY2VpdmVyLmNjCitAQCAtNDM3LDcgKzQzNyw3IEBAIHZvaWQgUlRDUFJlY2VpdmVyOjpIYW5k
bGVTZW5kZXJSZXBvcnQoY29uc3QgQ29tbW9uSGVhZGVyJiBydGNwX2Jsb2NrLAorICAgICBwYWNr
ZXRfaW5mb3JtYXRpb24tPnBhY2tldF90eXBlX2ZsYWdzIHw9IGtSdGNwUnI7CisgICB9CisgCist
ICBmb3IgKGNvbnN0IHJ0Y3A6OlJlcG9ydEJsb2NrIHJlcG9ydF9ibG9jayA6IHNlbmRlcl9yZXBv
cnQucmVwb3J0X2Jsb2NrcygpKQorKyAgZm9yIChjb25zdCBydGNwOjpSZXBvcnRCbG9jayYgcmVw
b3J0X2Jsb2NrIDogc2VuZGVyX3JlcG9ydC5yZXBvcnRfYmxvY2tzKCkpCisgICAgIEhhbmRsZVJl
cG9ydEJsb2NrKHJlcG9ydF9ibG9jaywgcGFja2V0X2luZm9ybWF0aW9uLCByZW1vdGVfc3NyYyk7
CisgfQorIAorZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL3AycC9iYXNlL21kbnNfbWVzc2FnZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3AycC9iYXNlL21kbnNfbWVzc2FnZS5jYworaW5kZXggZjE0YTBk
MTE3ZTMuLjMyMWQyMWQzNWJkIDEwMDY0NAorLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvcDJwL2Jhc2UvbWRuc19tZXNzYWdlLmNjCisrKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wMnAvYmFzZS9tZG5zX21lc3NhZ2Uu
Y2MKK0BAIC0zNTMsNyArMzUzLDcgQEAgYm9vbCBNZG5zTWVzc2FnZTo6V3JpdGUocnRjOjpCeXRl
QnVmZmVyV3JpdGVyKiBidWYpIGNvbnN0IHsKKyAgIGhlYWRlcl8uV3JpdGUoYnVmKTsKKyAKKyAg
IGF1dG8gd3JpdGVfcnIgPSBbJmJ1Zl0oY29uc3Qgc3RkOjp2ZWN0b3I8TWRuc1Jlc291cmNlUmVj
b3JkPiYgc2VjdGlvbikgeworLSAgICBmb3IgKGF1dG8gcnIgOiBzZWN0aW9uKSB7CisrICAgIGZv
ciAoY29uc3QgYXV0byYgcnIgOiBzZWN0aW9uKSB7CisgICAgICAgaWYgKCFyci5Xcml0ZShidWYp
KSB7CisgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgfQorQEAgLTM2MSw3ICszNjEsNyBA
QCBib29sIE1kbnNNZXNzYWdlOjpXcml0ZShydGM6OkJ5dGVCdWZmZXJXcml0ZXIqIGJ1ZikgY29u
c3QgeworICAgICByZXR1cm4gdHJ1ZTsKKyAgIH07CisgCistICBmb3IgKGF1dG8gcXVlc3Rpb24g
OiBxdWVzdGlvbl9zZWN0aW9uXykgeworKyAgZm9yIChjb25zdCBhdXRvJiBxdWVzdGlvbiA6IHF1
ZXN0aW9uX3NlY3Rpb25fKSB7CisgICAgIGlmICghcXVlc3Rpb24uV3JpdGUoYnVmKSkgeworICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQorZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3AycC9iYXNlL3BvcnQuY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wMnAvYmFzZS9wb3J0LmNjCitpbmRleCBiYjIw
YTRkNWRhMy4uYTE4MDE4MGI5MWQgMTAwNjQ0CistLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9wMnAvYmFzZS9wb3J0LmNjCisrKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wMnAvYmFzZS9wb3J0LmNjCitAQCAtOTQ4LDcg
Kzk0OCw3IEBAIHZvaWQgUG9ydDo6VXBkYXRlTmV0d29ya0Nvc3QoKSB7CisgICAvLyBOZXR3b3Jr
IGNvc3QgY2hhbmdlIHdpbGwgYWZmZWN0IHRoZSBjb25uZWN0aW9uIHNlbGVjdGlvbiBjcml0ZXJp
YS4KKyAgIC8vIFNpZ25hbCB0aGUgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2Ugb24gZWFjaCBjb25u
ZWN0aW9uIHRvIGZvcmNlIGEKKyAgIC8vIHJlLXNvcnQgaW4gUDJQVHJhbnNwb3J0Q2hhbm5lbC4K
Ky0gIGZvciAoYXV0byBrdiA6IGNvbm5lY3Rpb25zXykgeworKyAgZm9yIChjb25zdCBhdXRvJiBr
diA6IGNvbm5lY3Rpb25zXykgeworICAgICBDb25uZWN0aW9uKiBjb25uID0ga3Yuc2Vjb25kOwor
ICAgICBjb25uLT5TaWduYWxTdGF0ZUNoYW5nZShjb25uKTsKKyAgIH0KK2RpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wMnAvYmFzZS9zdHVucmVx
dWVzdC5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3AycC9i
YXNlL3N0dW5yZXF1ZXN0LmNjCitpbmRleCBlZGJhNGQ2OGU1NC4uZGZiMjdmY2NiMTcgMTAwNjQ0
CistLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wMnAvYmFz
ZS9zdHVucmVxdWVzdC5jYworKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvcDJwL2Jhc2Uvc3R1bnJlcXVlc3QuY2MKK0BAIC02OSw3ICs2OSw3IEBAIHZvaWQg
U3R1blJlcXVlc3RNYW5hZ2VyOjpTZW5kRGVsYXllZChTdHVuUmVxdWVzdCogcmVxdWVzdCwgaW50
IGRlbGF5KSB7CisgfQorIAorIHZvaWQgU3R1blJlcXVlc3RNYW5hZ2VyOjpGbHVzaChpbnQgbXNn
X3R5cGUpIHsKKy0gIGZvciAoY29uc3QgYXV0byBrdiA6IHJlcXVlc3RzXykgeworKyAgZm9yIChj
b25zdCBhdXRvJiBrdiA6IHJlcXVlc3RzXykgeworICAgICBTdHVuUmVxdWVzdCogcmVxdWVzdCA9
IGt2LnNlY29uZDsKKyAgICAgaWYgKG1zZ190eXBlID09IGtBbGxSZXF1ZXN0cyB8fCBtc2dfdHlw
ZSA9PSByZXF1ZXN0LT50eXBlKCkpIHsKKyAgICAgICB0aHJlYWRfLT5DbGVhcihyZXF1ZXN0LCBN
U0dfU1RVTl9TRU5EKTsKK0BAIC03OSw3ICs3OSw3IEBAIHZvaWQgU3R1blJlcXVlc3RNYW5hZ2Vy
OjpGbHVzaChpbnQgbXNnX3R5cGUpIHsKKyB9CisgCisgYm9vbCBTdHVuUmVxdWVzdE1hbmFnZXI6
Okhhc1JlcXVlc3QoaW50IG1zZ190eXBlKSB7CistICBmb3IgKGNvbnN0IGF1dG8ga3YgOiByZXF1
ZXN0c18pIHsKKysgIGZvciAoY29uc3QgYXV0byYga3YgOiByZXF1ZXN0c18pIHsKKyAgICAgU3R1
blJlcXVlc3QqIHJlcXVlc3QgPSBrdi5zZWNvbmQ7CisgICAgIGlmIChtc2dfdHlwZSA9PSBrQWxs
UmVxdWVzdHMgfHwgbXNnX3R5cGUgPT0gcmVxdWVzdC0+dHlwZSgpKSB7CisgICAgICAgcmV0dXJu
IHRydWU7CitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvcGMvanNlcHRyYW5zcG9ydGNvbnRyb2xsZXIuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9qc2VwdHJhbnNwb3J0Y29udHJvbGxlci5jYworaW5k
ZXggNzhlY2FmMzFkZWEuLjMyOGUzY2E0MmIxIDEwMDY0NAorLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvanNlcHRyYW5zcG9ydGNvbnRyb2xsZXIuY2MK
KysrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL2pzZXB0
cmFuc3BvcnRjb250cm9sbGVyLmNjCitAQCAtNjI5LDcgKzYyOSw3IEBAIFJUQ0Vycm9yIEpzZXBU
cmFuc3BvcnRDb250cm9sbGVyOjpWYWxpZGF0ZUFuZE1heWJlVXBkYXRlQnVuZGxlR3JvdXAoCisg
CisgICAvLyBUaGUgQlVORExFIGdyb3VwIGNvbnRhaW5pbmcgYSBNSUQgdGhhdCBubyBtPSBzZWN0
aW9uIGhhcyBpcyBpbnZhbGlkLgorICAgaWYgKG5ld19idW5kbGVfZ3JvdXApIHsKKy0gICAgZm9y
IChhdXRvIGNvbnRlbnRfbmFtZSA6IG5ld19idW5kbGVfZ3JvdXAtPmNvbnRlbnRfbmFtZXMoKSkg
eworKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRlbnRfbmFtZSA6IG5ld19idW5kbGVfZ3JvdXAt
PmNvbnRlbnRfbmFtZXMoKSkgeworICAgICAgIGlmICghZGVzY3JpcHRpb24tPkdldENvbnRlbnRC
eU5hbWUoY29udGVudF9uYW1lKSkgeworICAgICAgICAgcmV0dXJuIFJUQ0Vycm9yKFJUQ0Vycm9y
VHlwZTo6SU5WQUxJRF9QQVJBTUVURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBC
VU5ETEUgZ3JvdXAgY29udGFpbnMgTUlEOiIgKyBjb250ZW50X25hbWUgKworQEAgLTY0NSw3ICs2
NDUsNyBAQCBSVENFcnJvciBKc2VwVHJhbnNwb3J0Q29udHJvbGxlcjo6VmFsaWRhdGVBbmRNYXli
ZVVwZGF0ZUJ1bmRsZUdyb3VwKAorIAorICAgICBpZiAobmV3X2J1bmRsZV9ncm91cCkgeworICAg
ICAgIC8vIFRoZSBCVU5ETEUgZ3JvdXAgaW4gYW5zd2VyIHNob3VsZCBiZSBhIHN1YnNldCBvZiBv
ZmZlcmVkIGdyb3VwLgorLSAgICAgIGZvciAoYXV0byBjb250ZW50X25hbWUgOiBuZXdfYnVuZGxl
X2dyb3VwLT5jb250ZW50X25hbWVzKCkpIHsKKysgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRl
bnRfbmFtZSA6IG5ld19idW5kbGVfZ3JvdXAtPmNvbnRlbnRfbmFtZXMoKSkgeworICAgICAgICAg
aWYgKCFvZmZlcmVkX2J1bmRsZV9ncm91cCB8fAorICAgICAgICAgICAgICFvZmZlcmVkX2J1bmRs
ZV9ncm91cC0+SGFzQ29udGVudE5hbWUoY29udGVudF9uYW1lKSkgeworICAgICAgICAgICByZXR1
cm4gUlRDRXJyb3IoUlRDRXJyb3JUeXBlOjpJTlZBTElEX1BBUkFNRVRFUiwKK0BAIC02NTYsNyAr
NjU2LDcgQEAgUlRDRXJyb3IgSnNlcFRyYW5zcG9ydENvbnRyb2xsZXI6OlZhbGlkYXRlQW5kTWF5
YmVVcGRhdGVCdW5kbGVHcm91cCgKKyAgICAgfQorIAorICAgICBpZiAoYnVuZGxlX2dyb3VwXykg
eworLSAgICAgIGZvciAoYXV0byBjb250ZW50X25hbWUgOiBidW5kbGVfZ3JvdXBfLT5jb250ZW50
X25hbWVzKCkpIHsKKysgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRlbnRfbmFtZSA6IGJ1bmRs
ZV9ncm91cF8tPmNvbnRlbnRfbmFtZXMoKSkgeworICAgICAgICAgLy8gQW4gYW5zd2VyIHRoYXQg
cmVtb3ZlcyBtPSBzZWN0aW9ucyBmcm9tIHByZS1uZWdvdGlhdGVkIEJVTkRMRSBncm91cAorICAg
ICAgICAgLy8gd2l0aG91dCByZWplY3RpbmcgaXQsIGlzIGludmFsaWQuCisgICAgICAgICBpZiAo
IW5ld19idW5kbGVfZ3JvdXAgfHwKK0BAIC03MDQsNyArNzA0LDcgQEAgUlRDRXJyb3IgSnNlcFRy
YW5zcG9ydENvbnRyb2xsZXI6OlZhbGlkYXRlQW5kTWF5YmVVcGRhdGVCdW5kbGVHcm91cCgKKyAg
IC8vIElmIHRoZSB8YnVuZGxlZF9jb250ZW50fCBpcyByZWplY3RlZCwgb3RoZXIgY29udGVudHMg
aW4gdGhlIGJ1bmRsZSBncm91cAorICAgLy8gc2hvdWxkIGJlIHJlamVjdGVkLgorICAgaWYgKGJ1
bmRsZWRfY29udGVudC0+cmVqZWN0ZWQpIHsKKy0gICAgZm9yIChhdXRvIGNvbnRlbnRfbmFtZSA6
IGJ1bmRsZV9ncm91cF8tPmNvbnRlbnRfbmFtZXMoKSkgeworKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGNvbnRlbnRfbmFtZSA6IGJ1bmRsZV9ncm91cF8tPmNvbnRlbnRfbmFtZXMoKSkgeworICAgICAg
IGF1dG8gb3RoZXJfY29udGVudCA9IGRlc2NyaXB0aW9uLT5HZXRDb250ZW50QnlOYW1lKGNvbnRl
bnRfbmFtZSk7CisgICAgICAgaWYgKCFvdGhlcl9jb250ZW50LT5yZWplY3RlZCkgeworICAgICAg
ICAgcmV0dXJuIFJUQ0Vycm9yKAorQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIEpzZXBUcmFuc3Bv
cnRDb250cm9sbGVyOjpIYW5kbGVSZWplY3RlZENvbnRlbnQoCisgICAvLyB0aGVuIGRlc3Ryb3kg
dGhlIGNyaWNrZXQ6OkpzZXBUcmFuc3BvcnQuCisgICBSZW1vdmVUcmFuc3BvcnRGb3JNaWQoY29u
dGVudF9pbmZvLm5hbWUpOworICAgaWYgKGNvbnRlbnRfaW5mby5uYW1lID09IGJ1bmRsZWRfbWlk
KCkpIHsKKy0gICAgZm9yIChhdXRvIGNvbnRlbnRfbmFtZSA6IGJ1bmRsZV9ncm91cF8tPmNvbnRl
bnRfbmFtZXMoKSkgeworKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbnRlbnRfbmFtZSA6IGJ1bmRs
ZV9ncm91cF8tPmNvbnRlbnRfbmFtZXMoKSkgeworICAgICAgIFJlbW92ZVRyYW5zcG9ydEZvck1p
ZChjb250ZW50X25hbWUpOworICAgICB9CisgICAgIGJ1bmRsZV9ncm91cF8ucmVzZXQoKTsKK0BA
IC04NDUsNyArODQ1LDcgQEAgc3RkOjp2ZWN0b3I8aW50PiBKc2VwVHJhbnNwb3J0Q29udHJvbGxl
cjo6R2V0RW5jcnlwdGVkSGVhZGVyRXh0ZW5zaW9uSWRzKAorICAgfQorIAorICAgc3RkOjp2ZWN0
b3I8aW50PiBlbmNyeXB0ZWRfaGVhZGVyX2V4dGVuc2lvbl9pZHM7CistICBmb3IgKGF1dG8gZXh0
ZW5zaW9uIDogY29udGVudF9kZXNjLT5ydHBfaGVhZGVyX2V4dGVuc2lvbnMoKSkgeworKyAgZm9y
IChjb25zdCBhdXRvJiBleHRlbnNpb24gOiBjb250ZW50X2Rlc2MtPnJ0cF9oZWFkZXJfZXh0ZW5z
aW9ucygpKSB7CisgICAgIGlmICghZXh0ZW5zaW9uLmVuY3J5cHQpIHsKKyAgICAgICBjb250aW51
ZTsKKyAgICAgfQorZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL3BjL3BlZXJjb25uZWN0aW9uLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvcGMvcGVlcmNvbm5lY3Rpb24uY2MKK2luZGV4IDRmMGE4ZWEwMTEy
Li5lZThhOTA5ZTAzZSAxMDA2NDQKKy0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL3BjL3BlZXJjb25uZWN0aW9uLmNjCisrKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9wZWVyY29ubmVjdGlvbi5jYworQEAgLTgzMiw3
ICs4MzIsNyBAQCBQZWVyQ29ubmVjdGlvbjo6flBlZXJDb25uZWN0aW9uKCkgeworICAgLy8gTmVl
ZCB0byBzdG9wIHRyYW5zY2VpdmVycyBiZWZvcmUgZGVzdHJveWluZyB0aGUgc3RhdHMgY29sbGVj
dG9yIGJlY2F1c2UKKyAgIC8vIEF1ZGlvUnRwU2VuZGVyIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUg
U3RhdHNDb2xsZWN0b3IgaXQgd2lsbCB1cGRhdGUgd2hlbgorICAgLy8gc3RvcHBpbmcuCistICBm
b3IgKGF1dG8gdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisrICBmb3IgKGNvbnN0IGF1
dG8mIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworICAgICB0cmFuc2NlaXZlci0+U3Rv
cCgpOworICAgfQorIAorQEAgLTg2OCwxMiArODY4LDEyIEBAIFBlZXJDb25uZWN0aW9uOjp+UGVl
ckNvbm5lY3Rpb24oKSB7Cisgdm9pZCBQZWVyQ29ubmVjdGlvbjo6RGVzdHJveUFsbENoYW5uZWxz
KCkgeworICAgLy8gRGVzdHJveSB2aWRlbyBjaGFubmVscyBmaXJzdCBzaW5jZSB0aGV5IG1heSBo
YXZlIGEgcG9pbnRlciB0byBhIHZvaWNlCisgICAvLyBjaGFubmVsLgorLSAgZm9yIChhdXRvIHRy
YW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworKyAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2Nl
aXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgICAgaWYgKHRyYW5zY2VpdmVyLT5tZWRpYV90eXBl
KCkgPT0gY3JpY2tldDo6TUVESUFfVFlQRV9WSURFTykgeworICAgICAgIERlc3Ryb3lUcmFuc2Nl
aXZlckNoYW5uZWwodHJhbnNjZWl2ZXIpOworICAgICB9CisgICB9CistICBmb3IgKGF1dG8gdHJh
bnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisrICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zY2Vp
dmVyIDogdHJhbnNjZWl2ZXJzXykgeworICAgICBpZiAodHJhbnNjZWl2ZXItPm1lZGlhX3R5cGUo
KSA9PSBjcmlja2V0OjpNRURJQV9UWVBFX0FVRElPKSB7CisgICAgICAgRGVzdHJveVRyYW5zY2Vp
dmVyQ2hhbm5lbCh0cmFuc2NlaXZlcik7CisgICAgIH0KK0BAIC0xNjExLDcgKzE2MTEsNyBAQCBy
dGM6OnNjb3BlZF9yZWZwdHI8UnRwU2VuZGVySW50ZXJmYWNlPiBQZWVyQ29ubmVjdGlvbjo6Q3Jl
YXRlU2VuZGVyKAorIHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0cjxSdHBTZW5kZXJJbnRl
cmZhY2U+PiBQZWVyQ29ubmVjdGlvbjo6R2V0U2VuZGVycygpCisgICAgIGNvbnN0IHsKKyAgIHN0
ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0cjxSdHBTZW5kZXJJbnRlcmZhY2U+PiByZXQ7Cist
ICBmb3IgKGF1dG8gc2VuZGVyIDogR2V0U2VuZGVyc0ludGVybmFsKCkpIHsKKysgIGZvciAoY29u
c3QgYXV0byYgc2VuZGVyIDogR2V0U2VuZGVyc0ludGVybmFsKCkpIHsKKyAgICAgcmV0LnB1c2hf
YmFjayhzZW5kZXIpOworICAgfQorICAgcmV0dXJuIHJldDsKK0BAIC0xNjIxLDcgKzE2MjEsNyBA
QCBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8UnRwU2VuZGVyUHJveHlXaXRoSW50ZXJu
YWw8UnRwU2VuZGVySW50ZXJuYWw+Pj4KKyBQZWVyQ29ubmVjdGlvbjo6R2V0U2VuZGVyc0ludGVy
bmFsKCkgY29uc3QgeworICAgc3RkOjp2ZWN0b3I8cnRjOjpzY29wZWRfcmVmcHRyPFJ0cFNlbmRl
clByb3h5V2l0aEludGVybmFsPFJ0cFNlbmRlckludGVybmFsPj4+CisgICAgICAgYWxsX3NlbmRl
cnM7CistICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisrICBmb3Ig
KGNvbnN0IGF1dG8mIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworICAgICBhdXRvIHNl
bmRlcnMgPSB0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+c2VuZGVycygpOworICAgICBhbGxfc2Vu
ZGVycy5pbnNlcnQoYWxsX3NlbmRlcnMuZW5kKCksIHNlbmRlcnMuYmVnaW4oKSwgc2VuZGVycy5l
bmQoKSk7CisgICB9CitAQCAtMTY0Myw3ICsxNjQzLDcgQEAgUGVlckNvbm5lY3Rpb246OkdldFJl
Y2VpdmVyc0ludGVybmFsKCkgY29uc3QgeworICAgc3RkOjp2ZWN0b3I8CisgICAgICAgcnRjOjpz
Y29wZWRfcmVmcHRyPFJ0cFJlY2VpdmVyUHJveHlXaXRoSW50ZXJuYWw8UnRwUmVjZWl2ZXJJbnRl
cm5hbD4+PgorICAgICAgIGFsbF9yZWNlaXZlcnM7CistICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIg
OiB0cmFuc2NlaXZlcnNfKSB7CisrICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zY2VpdmVyIDogdHJh
bnNjZWl2ZXJzXykgeworICAgICBhdXRvIHJlY2VpdmVycyA9IHRyYW5zY2VpdmVyLT5pbnRlcm5h
bCgpLT5yZWNlaXZlcnMoKTsKKyAgICAgYWxsX3JlY2VpdmVycy5pbnNlcnQoYWxsX3JlY2VpdmVy
cy5lbmQoKSwgcmVjZWl2ZXJzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y2VpdmVycy5lbmQoKSk7CitAQCAtMTY1Niw3ICsxNjU2LDcgQEAgUGVlckNvbm5lY3Rpb246Okdl
dFRyYW5zY2VpdmVycygpIGNvbnN0IHsKKyAgIFJUQ19DSEVDSyhJc1VuaWZpZWRQbGFuKCkpCisg
ICAgICAgPDwgIkdldFRyYW5zY2VpdmVycyBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIFVuaWZpZWQg
UGxhbiBTZHBTZW1hbnRpY3MuIjsKKyAgIHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0cjxS
dHBUcmFuc2NlaXZlckludGVyZmFjZT4+IGFsbF90cmFuc2NlaXZlcnM7CistICBmb3IgKGF1dG8g
dHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisrICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5z
Y2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworICAgICBhbGxfdHJhbnNjZWl2ZXJzLnB1c2hfYmFj
ayh0cmFuc2NlaXZlcik7CisgICB9CisgICByZXR1cm4gYWxsX3RyYW5zY2VpdmVyczsKK0BAIC0x
ODY3LDcgKzE4NjcsNyBAQCBSVENFcnJvciBQZWVyQ29ubmVjdGlvbjo6SGFuZGxlTGVnYWN5T2Zm
ZXJPcHRpb25zKAorIAorIHZvaWQgUGVlckNvbm5lY3Rpb246OlJlbW92ZVJlY3ZEaXJlY3Rpb25G
cm9tUmVjZWl2aW5nVHJhbnNjZWl2ZXJzT2ZUeXBlKAorICAgICBjcmlja2V0OjpNZWRpYVR5cGUg
bWVkaWFfdHlwZSkgeworLSAgZm9yIChhdXRvIHRyYW5zY2VpdmVyIDogR2V0UmVjZWl2aW5nVHJh
bnNjZWl2ZXJzT2ZUeXBlKG1lZGlhX3R5cGUpKSB7CisrICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5z
Y2VpdmVyIDogR2V0UmVjZWl2aW5nVHJhbnNjZWl2ZXJzT2ZUeXBlKG1lZGlhX3R5cGUpKSB7Cisg
ICAgIFJ0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIG5ld19kaXJlY3Rpb24gPQorICAgICAgICAgUnRw
VHJhbnNjZWl2ZXJEaXJlY3Rpb25XaXRoUmVjdlNldCh0cmFuc2NlaXZlci0+ZGlyZWN0aW9uKCks
IGZhbHNlKTsKKyAgICAgaWYgKG5ld19kaXJlY3Rpb24gIT0gdHJhbnNjZWl2ZXItPmRpcmVjdGlv
bigpKSB7CitAQCAtMTkwMSw3ICsxOTAxLDcgQEAgUGVlckNvbm5lY3Rpb246OkdldFJlY2Vpdmlu
Z1RyYW5zY2VpdmVyc09mVHlwZShjcmlja2V0OjpNZWRpYVR5cGUgbWVkaWFfdHlwZSkgeworICAg
c3RkOjp2ZWN0b3I8CisgICAgICAgcnRjOjpzY29wZWRfcmVmcHRyPFJ0cFRyYW5zY2VpdmVyUHJv
eHlXaXRoSW50ZXJuYWw8UnRwVHJhbnNjZWl2ZXI+Pj4KKyAgICAgICByZWNlaXZpbmdfdHJhbnNj
ZWl2ZXJzOworLSAgZm9yIChhdXRvIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworKyAg
Zm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgICAgaWYg
KCF0cmFuc2NlaXZlci0+c3RvcHBlZCgpICYmIHRyYW5zY2VpdmVyLT5tZWRpYV90eXBlKCkgPT0g
bWVkaWFfdHlwZSAmJgorICAgICAgICAgUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb25IYXNSZWN2KHRy
YW5zY2VpdmVyLT5kaXJlY3Rpb24oKSkpIHsKKyAgICAgICByZWNlaXZpbmdfdHJhbnNjZWl2ZXJz
LnB1c2hfYmFjayh0cmFuc2NlaXZlcik7CitAQCAtMjA5NCw3ICsyMDk0LDcgQEAgUlRDRXJyb3Ig
UGVlckNvbm5lY3Rpb246OkFwcGx5TG9jYWxEZXNjcmlwdGlvbigKKyAgICAgfQorICAgICBzdGQ6
OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8UnRwVHJhbnNjZWl2ZXJJbnRlcmZhY2U+PiByZW1v
dmVfbGlzdDsKKyAgICAgc3RkOjp2ZWN0b3I8cnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFt
SW50ZXJmYWNlPj4gcmVtb3ZlZF9zdHJlYW1zOworLSAgICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIg
OiB0cmFuc2NlaXZlcnNfKSB7CisrICAgIGZvciAoY29uc3QgYXV0byYgdHJhbnNjZWl2ZXIgOiB0
cmFuc2NlaXZlcnNfKSB7CisgICAgICAgY29uc3QgQ29udGVudEluZm8qIGNvbnRlbnQgPQorICAg
ICAgICAgICBGaW5kTWVkaWFTZWN0aW9uRm9yVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIsIGxvY2Fs
X2Rlc2NyaXB0aW9uKCkpOworICAgICAgIGlmICghY29udGVudCkgeworQEAgLTIxMjIsMTAgKzIx
MjIsMTAgQEAgUlRDRXJyb3IgUGVlckNvbm5lY3Rpb246OkFwcGx5TG9jYWxEZXNjcmlwdGlvbigK
KyAgICAgICB9CisgICAgIH0KKyAgICAgYXV0byBvYnNlcnZlciA9IE9ic2VydmVyKCk7CistICAg
IGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHJlbW92ZV9saXN0KSB7CisrICAgIGZvciAoY29uc3Qg
YXV0byYgdHJhbnNjZWl2ZXIgOiByZW1vdmVfbGlzdCkgeworICAgICAgIG9ic2VydmVyLT5PblJl
bW92ZVRyYWNrKHRyYW5zY2VpdmVyLT5yZWNlaXZlcigpKTsKKyAgICAgfQorLSAgICBmb3IgKGF1
dG8gc3RyZWFtIDogcmVtb3ZlZF9zdHJlYW1zKSB7CisrICAgIGZvciAoY29uc3QgYXV0byYgc3Ry
ZWFtIDogcmVtb3ZlZF9zdHJlYW1zKSB7CisgICAgICAgb2JzZXJ2ZXItPk9uUmVtb3ZlU3RyZWFt
KHN0cmVhbSk7CisgICAgIH0KKyAgIH0gZWxzZSB7CitAQCAtMjE2Nyw3ICsyMTY3LDcgQEAgUlRD
RXJyb3IgUGVlckNvbm5lY3Rpb246OkFwcGx5TG9jYWxEZXNjcmlwdGlvbigKKyAgIH0KKyAKKyAg
IGlmIChJc1VuaWZpZWRQbGFuKCkpIHsKKy0gICAgZm9yIChhdXRvIHRyYW5zY2VpdmVyIDogdHJh
bnNjZWl2ZXJzXykgeworKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYW5zY2VpdmVyIDogdHJhbnNj
ZWl2ZXJzXykgeworICAgICAgIGNvbnN0IENvbnRlbnRJbmZvKiBjb250ZW50ID0KKyAgICAgICAg
ICAgRmluZE1lZGlhU2VjdGlvbkZvclRyYW5zY2VpdmVyKHRyYW5zY2VpdmVyLCBsb2NhbF9kZXNj
cmlwdGlvbigpKTsKKyAgICAgICBpZiAoIWNvbnRlbnQpIHsKK0BAIC0yNDQ3LDcgKzI0NDcsNyBA
QCBSVENFcnJvciBQZWVyQ29ubmVjdGlvbjo6QXBwbHlSZW1vdGVEZXNjcmlwdGlvbigKKyAgICAg
c3RkOjp2ZWN0b3I8cnRjOjpzY29wZWRfcmVmcHRyPFJ0cFRyYW5zY2VpdmVySW50ZXJmYWNlPj4g
cmVtb3ZlX2xpc3Q7CisgICAgIHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRpYVN0
cmVhbUludGVyZmFjZT4+IGFkZGVkX3N0cmVhbXM7CisgICAgIHN0ZDo6dmVjdG9yPHJ0Yzo6c2Nv
cGVkX3JlZnB0cjxNZWRpYVN0cmVhbUludGVyZmFjZT4+IHJlbW92ZWRfc3RyZWFtczsKKy0gICAg
Zm9yIChhdXRvIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworICAgICAgIGNvbnN0IENvbnRl
bnRJbmZvKiBjb250ZW50ID0KKyAgICAgICAgICAgRmluZE1lZGlhU2VjdGlvbkZvclRyYW5zY2Vp
dmVyKHRyYW5zY2VpdmVyLCByZW1vdGVfZGVzY3JpcHRpb24oKSk7CisgICAgICAgaWYgKCFjb250
ZW50KSB7CitAQCAtMjU0MSwxOSArMjU0MSwxOSBAQCBSVENFcnJvciBQZWVyQ29ubmVjdGlvbjo6
QXBwbHlSZW1vdGVEZXNjcmlwdGlvbigKKyAgICAgfQorICAgICAvLyBPbmNlIGFsbCBwcm9jZXNz
aW5nIGhhcyBmaW5pc2hlZCwgZmlyZSBvZmYgY2FsbGJhY2tzLgorICAgICBhdXRvIG9ic2VydmVy
ID0gT2JzZXJ2ZXIoKTsKKy0gICAgZm9yIChhdXRvIHRyYW5zY2VpdmVyIDogbm93X3JlY2Vpdmlu
Z190cmFuc2NlaXZlcnMpIHsKKysgICAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IG5v
d19yZWNlaXZpbmdfdHJhbnNjZWl2ZXJzKSB7CisgICAgICAgc3RhdHNfLT5BZGRUcmFjayh0cmFu
c2NlaXZlci0+cmVjZWl2ZXIoKS0+dHJhY2soKSk7CisgICAgICAgb2JzZXJ2ZXItPk9uVHJhY2so
dHJhbnNjZWl2ZXIpOworICAgICAgIG9ic2VydmVyLT5PbkFkZFRyYWNrKHRyYW5zY2VpdmVyLT5y
ZWNlaXZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zY2VpdmVyLT5yZWNl
aXZlcigpLT5zdHJlYW1zKCkpOworICAgICB9CistICAgIGZvciAoYXV0byBzdHJlYW0gOiBhZGRl
ZF9zdHJlYW1zKSB7CisrICAgIGZvciAoY29uc3QgYXV0byYgc3RyZWFtIDogYWRkZWRfc3RyZWFt
cykgeworICAgICAgIG9ic2VydmVyLT5PbkFkZFN0cmVhbShzdHJlYW0pOworICAgICB9CistICAg
IGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHJlbW92ZV9saXN0KSB7CisrICAgIGZvciAoY29uc3Qg
YXV0byYgdHJhbnNjZWl2ZXIgOiByZW1vdmVfbGlzdCkgeworICAgICAgIG9ic2VydmVyLT5PblJl
bW92ZVRyYWNrKHRyYW5zY2VpdmVyLT5yZWNlaXZlcigpKTsKKyAgICAgfQorLSAgICBmb3IgKGF1
dG8gc3RyZWFtIDogcmVtb3ZlZF9zdHJlYW1zKSB7CisrICAgIGZvciAoY29uc3QgYXV0byYgc3Ry
ZWFtIDogcmVtb3ZlZF9zdHJlYW1zKSB7CisgICAgICAgb2JzZXJ2ZXItPk9uUmVtb3ZlU3RyZWFt
KHN0cmVhbSk7CisgICAgIH0KKyAgIH0KK0BAIC0yNjYwLDcgKzI2NjAsNyBAQCB2b2lkIFBlZXJD
b25uZWN0aW9uOjpQcm9jZXNzUmVtb3ZhbE9mUmVtb3RlVHJhY2soCisgICAvLyBUT0RPKGh0dHBz
Oi8vY3JidWcuY29tL3dlYnJ0Yy85NDgwKTogV2hlbiB3ZSB1c2Ugc3RyZWFtIElEcyBpbnN0ZWFk
CisgICAvLyBvZiBzdHJlYW1zLCBzZWUgaWYgdGhlIHN0cmVhbSB3YXMgcmVtb3ZlZCBieSBjaGVj
a2luZyBpZiB0aGlzIHdhcyB0aGUKKyAgIC8vIGxhc3QgcmVjZWl2ZXIgd2l0aCB0aGF0IHN0cmVh
bSBJRC4KKy0gIGZvciAoYXV0byBzdHJlYW0gOiBtZWRpYV9zdHJlYW1zKSB7CisrICBmb3IgKGNv
bnN0IGF1dG8mIHN0cmVhbSA6IG1lZGlhX3N0cmVhbXMpIHsKKyAgICAgaWYgKHN0cmVhbS0+R2V0
QXVkaW9UcmFja3MoKS5lbXB0eSgpICYmIHN0cmVhbS0+R2V0VmlkZW9UcmFja3MoKS5lbXB0eSgp
KSB7CisgICAgICAgcmVtb3RlX3N0cmVhbXNfLT5SZW1vdmVTdHJlYW0oc3RyZWFtKTsKKyAgICAg
ICByZW1vdmVkX3N0cmVhbXMtPnB1c2hfYmFjayhzdHJlYW0pOworQEAgLTMzODIsNyArMzM4Miw3
IEBAIHZvaWQgUGVlckNvbm5lY3Rpb246OkNsb3NlKCkgeworICAgQ2hhbmdlU2lnbmFsaW5nU3Rh
dGUoUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtDbG9zZWQpOworICAgTm90ZVVzYWdlRXZlbnQo
VXNhZ2VFdmVudDo6Q0xPU0VfQ0FMTEVEKTsKKyAKKy0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6
IHRyYW5zY2VpdmVyc18pIHsKKysgIGZvciAoY29uc3QgYXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFu
c2NlaXZlcnNfKSB7CisgICAgIHRyYW5zY2VpdmVyLT5TdG9wKCk7CisgICB9CisgCitAQCAtNDA0
NSw3ICs0MDQ1LDcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6R2V0T3B0aW9uc0ZvclVuaWZpZWRQ
bGFuT2ZmZXIoCisgICAvLyBhbmQgbm90IGFzc29jaWF0ZWQpLiBSZXVzZSBtZWRpYSBzZWN0aW9u
cyBtYXJrZWQgYXMgcmVjeWNsYWJsZSBmaXJzdCwKKyAgIC8vIG90aGVyd2lzZSBhcHBlbmQgdG8g
dGhlIGVuZCBvZiB0aGUgb2ZmZXIuIE5ldyBtZWRpYSBzZWN0aW9ucyBzaG91bGQgYmUKKyAgIC8v
IGFkZGVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIFBlZXJDb25uZWN0aW9u
LgorLSAgZm9yIChhdXRvIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworKyAgZm9yIChj
b25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgICAgaWYgKHRyYW5z
Y2VpdmVyLT5taWQoKSB8fCB0cmFuc2NlaXZlci0+c3RvcHBlZCgpKSB7CisgICAgICAgY29udGlu
dWU7CisgICAgIH0KK0BAIC00ODE1LDcgKzQ4MTUsNyBAQCBib29sIFBlZXJDb25uZWN0aW9uOjpI
YXNSdHBTZW5kZXIoY3JpY2tldDo6TWVkaWFUeXBlIHR5cGUpIGNvbnN0IHsKKyAKKyBydGM6OnNj
b3BlZF9yZWZwdHI8UnRwU2VuZGVyUHJveHlXaXRoSW50ZXJuYWw8UnRwU2VuZGVySW50ZXJuYWw+
PgorIFBlZXJDb25uZWN0aW9uOjpGaW5kU2VuZGVyRm9yVHJhY2soTWVkaWFTdHJlYW1UcmFja0lu
dGVyZmFjZSogdHJhY2spIGNvbnN0IHsKKy0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5z
Y2VpdmVyc18pIHsKKysgIGZvciAoY29uc3QgYXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZl
cnNfKSB7CisgICAgIGZvciAoYXV0byBzZW5kZXIgOiB0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+
c2VuZGVycygpKSB7CisgICAgICAgaWYgKHNlbmRlci0+dHJhY2soKSA9PSB0cmFjaykgeworICAg
ICAgICAgcmV0dXJuIHNlbmRlcjsKK0BAIC00ODI3LDcgKzQ4MjcsNyBAQCBQZWVyQ29ubmVjdGlv
bjo6RmluZFNlbmRlckZvclRyYWNrKE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2UqIHRyYWNrKSBj
b25zdCB7CisgCisgcnRjOjpzY29wZWRfcmVmcHRyPFJ0cFNlbmRlclByb3h5V2l0aEludGVybmFs
PFJ0cFNlbmRlckludGVybmFsPj4KKyBQZWVyQ29ubmVjdGlvbjo6RmluZFNlbmRlckJ5SWQoY29u
c3Qgc3RkOjpzdHJpbmcmIHNlbmRlcl9pZCkgY29uc3QgeworLSAgZm9yIChhdXRvIHRyYW5zY2Vp
dmVyIDogdHJhbnNjZWl2ZXJzXykgeworKyAgZm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6
IHRyYW5zY2VpdmVyc18pIHsKKyAgICAgZm9yIChhdXRvIHNlbmRlciA6IHRyYW5zY2VpdmVyLT5p
bnRlcm5hbCgpLT5zZW5kZXJzKCkpIHsKKyAgICAgICBpZiAoc2VuZGVyLT5pZCgpID09IHNlbmRl
cl9pZCkgeworICAgICAgICAgcmV0dXJuIHNlbmRlcjsKK0BAIC00ODM5LDcgKzQ4MzksNyBAQCBQ
ZWVyQ29ubmVjdGlvbjo6RmluZFNlbmRlckJ5SWQoY29uc3Qgc3RkOjpzdHJpbmcmIHNlbmRlcl9p
ZCkgY29uc3QgeworIAorIHJ0Yzo6c2NvcGVkX3JlZnB0cjxSdHBSZWNlaXZlclByb3h5V2l0aElu
dGVybmFsPFJ0cFJlY2VpdmVySW50ZXJuYWw+PgorIFBlZXJDb25uZWN0aW9uOjpGaW5kUmVjZWl2
ZXJCeUlkKGNvbnN0IHN0ZDo6c3RyaW5nJiByZWNlaXZlcl9pZCkgY29uc3QgeworLSAgZm9yIChh
dXRvIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworKyAgZm9yIChjb25zdCBhdXRvJiB0
cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgICAgZm9yIChhdXRvIHJlY2VpdmVyIDog
dHJhbnNjZWl2ZXItPmludGVybmFsKCktPnJlY2VpdmVycygpKSB7CisgICAgICAgaWYgKHJlY2Vp
dmVyLT5pZCgpID09IHJlY2VpdmVyX2lkKSB7CisgICAgICAgICByZXR1cm4gcmVjZWl2ZXI7CitA
QCAtNDk5OSw3ICs0OTk5LDcgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbjo6U3RvcFJ0Y0V2ZW50TG9n
X3coKSB7CisgCisgY3JpY2tldDo6Q2hhbm5lbEludGVyZmFjZSogUGVlckNvbm5lY3Rpb246Okdl
dENoYW5uZWwoCisgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjb250ZW50X25hbWUpIHsKKy0gIGZv
ciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKysgIGZvciAoY29uc3QgYXV0
byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisgICAgIGNyaWNrZXQ6OkNoYW5uZWxJ
bnRlcmZhY2UqIGNoYW5uZWwgPSB0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+Y2hhbm5lbCgpOwor
ICAgICBpZiAoY2hhbm5lbCAmJiBjaGFubmVsLT5jb250ZW50X25hbWUoKSA9PSBjb250ZW50X25h
bWUpIHsKKyAgICAgICByZXR1cm4gY2hhbm5lbDsKK0BAIC01MTE0LDcgKzUxMTQsNyBAQCBSVENF
cnJvciBQZWVyQ29ubmVjdGlvbjo6UHVzaGRvd25NZWRpYURlc2NyaXB0aW9uKAorICAgUlRDX0RD
SEVDSyhzZGVzYyk7CisgCisgICAvLyBQdXNoIGRvd24gdGhlIG5ldyBTRFAgbWVkaWEgc2VjdGlv
biBmb3IgZWFjaCBhdWRpby92aWRlbyB0cmFuc2NlaXZlci4KKy0gIGZvciAoYXV0byB0cmFuc2Nl
aXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKysgIGZvciAoY29uc3QgYXV0byYgdHJhbnNjZWl2ZXIg
OiB0cmFuc2NlaXZlcnNfKSB7CisgICAgIGNvbnN0IENvbnRlbnRJbmZvKiBjb250ZW50X2luZm8g
PQorICAgICAgICAgRmluZE1lZGlhU2VjdGlvbkZvclRyYW5zY2VpdmVyKHRyYW5zY2VpdmVyLCBz
ZGVzYyk7CisgICAgIGNyaWNrZXQ6OkNoYW5uZWxJbnRlcmZhY2UqIGNoYW5uZWwgPSB0cmFuc2Nl
aXZlci0+aW50ZXJuYWwoKS0+Y2hhbm5lbCgpOworQEAgLTU0NjMsNyArNTQ2Myw3IEBAIGNyaWNr
ZXQ6OkNhbmRpZGF0ZVN0YXRzTGlzdCBQZWVyQ29ubmVjdGlvbjo6R2V0UG9vbGVkQ2FuZGlkYXRl
U3RhdHMoKSBjb25zdCB7Cisgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBQZWVy
Q29ubmVjdGlvbjo6R2V0VHJhbnNwb3J0TmFtZXNCeU1pZCgpCisgICAgIGNvbnN0IHsKKyAgIHN0
ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz4gdHJhbnNwb3J0X25hbWVzX2J5X21pZDsK
Ky0gIGZvciAoYXV0byB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKysgIGZvciAoY29u
c3QgYXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisgICAgIGNyaWNrZXQ6OkNo
YW5uZWxJbnRlcmZhY2UqIGNoYW5uZWwgPSB0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+Y2hhbm5l
bCgpOworICAgICBpZiAoY2hhbm5lbCkgeworICAgICAgIHRyYW5zcG9ydF9uYW1lc19ieV9taWRb
Y2hhbm5lbC0+Y29udGVudF9uYW1lKCldID0KK0BAIC01NjQwLDcgKzU2NDAsNyBAQCB2b2lkIFBl
ZXJDb25uZWN0aW9uOjpPblRyYW5zcG9ydENvbnRyb2xsZXJEdGxzSGFuZHNoYWtlRXJyb3IoCisg
fQorIAorIHZvaWQgUGVlckNvbm5lY3Rpb246OkVuYWJsZVNlbmRpbmcoKSB7CistICBmb3IgKGF1
dG8gdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnNfKSB7CisrICBmb3IgKGNvbnN0IGF1dG8mIHRy
YW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworICAgICBjcmlja2V0OjpDaGFubmVsSW50ZXJm
YWNlKiBjaGFubmVsID0gdHJhbnNjZWl2ZXItPmludGVybmFsKCktPmNoYW5uZWwoKTsKKyAgICAg
aWYgKGNoYW5uZWwgJiYgIWNoYW5uZWwtPmVuYWJsZWQoKSkgeworICAgICAgIGNoYW5uZWwtPkVu
YWJsZSh0cnVlKTsKK0BAIC02Mzc3LDcgKzYzNzcsNyBAQCB2b2lkIFBlZXJDb25uZWN0aW9uOjpP
blRyYW5zcG9ydENvbnRyb2xsZXJHYXRoZXJpbmdTdGF0ZSgKKyB2b2lkIFBlZXJDb25uZWN0aW9u
OjpSZXBvcnRUcmFuc3BvcnRTdGF0cygpIHsKKyAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6
OnNldDxjcmlja2V0OjpNZWRpYVR5cGU+PgorICAgICAgIG1lZGlhX3R5cGVzX2J5X3RyYW5zcG9y
dF9uYW1lOworLSAgZm9yIChhdXRvIHRyYW5zY2VpdmVyIDogdHJhbnNjZWl2ZXJzXykgeworKyAg
Zm9yIChjb25zdCBhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVyc18pIHsKKyAgICAgaWYg
KHRyYW5zY2VpdmVyLT5pbnRlcm5hbCgpLT5jaGFubmVsKCkpIHsKKyAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgdHJhbnNwb3J0X25hbWUgPQorICAgICAgICAgICB0cmFuc2NlaXZlci0+aW50ZXJu
YWwoKS0+Y2hhbm5lbCgpLT50cmFuc3BvcnRfbmFtZSgpOworZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL3J0Y3N0YXRzY29sbGVjdG9yLmNj
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvcnRjc3RhdHNj
b2xsZWN0b3IuY2MKK2luZGV4IGQ0OGVjYzAxZjM1Li42ZmM0MTE4ZDk3OSAxMDA2NDQKKy0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL3J0Y3N0YXRzY29s
bGVjdG9yLmNjCisrKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9wYy9ydGNzdGF0c2NvbGxlY3Rvci5jYworQEAgLTUzNCw3ICs1MzQsNyBAQCB2b2lkIFByb2R1
Y2VTZW5kZXJNZWRpYVRyYWNrU3RhdHMoCisgICAvLyBUT0RPKGhib3MpOiBSZXR1cm4gc3RhdHMg
b2YgZGV0YWNoZWQgdHJhY2tzLiBXZSBoYXZlIHRvIHBlcmZvcm0gc3RhdHMKKyAgIC8vIGdhdGhl
cmluZyBhdCB0aGUgdGltZSBvZiBkZXRhY2htZW50IHRvIGdldCBhY2N1cmF0ZSBzdGF0cyBhbmQg
dGltZXN0YW1wcy4KKyAgIC8vIGh0dHBzOi8vY3JidWcuY29tLzY1OTEzNworLSAgZm9yIChhdXRv
IHNlbmRlciA6IHNlbmRlcnMpIHsKKysgIGZvciAoY29uc3QgYXV0byYgc2VuZGVyIDogc2VuZGVy
cykgeworICAgICBpZiAoc2VuZGVyLT5tZWRpYV90eXBlKCkgPT0gY3JpY2tldDo6TUVESUFfVFlQ
RV9BVURJTykgeworICAgICAgIEF1ZGlvVHJhY2tJbnRlcmZhY2UqIHRyYWNrID0KKyAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8QXVkaW9UcmFja0ludGVyZmFjZSo+KHNlbmRlci0+dHJhY2soKS5nZXQo
KSk7CitAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgUHJvZHVjZVJlY2VpdmVyTWVkaWFUcmFja1N0
YXRzKAorICAgICBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8UnRwUmVjZWl2ZXJJbnRl
cm5hbD4+IHJlY2VpdmVycywKKyAgICAgUlRDU3RhdHNSZXBvcnQqIHJlcG9ydCkgeworICAgLy8g
VGhpcyBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIHRoZSByZWNlaXZlcnMgdG8gZmluZCB0aGUgcmVt
b3RlIHRyYWNrcy4KKy0gIGZvciAoYXV0byByZWNlaXZlciA6IHJlY2VpdmVycykgeworKyAgZm9y
IChjb25zdCBhdXRvJiByZWNlaXZlciA6IHJlY2VpdmVycykgeworICAgICBpZiAocmVjZWl2ZXIt
Pm1lZGlhX3R5cGUoKSA9PSBjcmlja2V0OjpNRURJQV9UWVBFX0FVRElPKSB7CisgICAgICAgQXVk
aW9UcmFja0ludGVyZmFjZSogdHJhY2sgPQorICAgICAgICAgICBzdGF0aWNfY2FzdDxBdWRpb1Ry
YWNrSW50ZXJmYWNlKj4ocmVjZWl2ZXItPnRyYWNrKCkuZ2V0KCkpOworQEAgLTExMTYsNyArMTEx
Niw3IEBAIHZvaWQgUlRDU3RhdHNDb2xsZWN0b3I6OlByb2R1Y2VNZWRpYVN0cmVhbVN0YXRzX3Mo
CisgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+PiB0cmFj
a19pZHM7CisgCisgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRzIDogdHJhbnNjZWl2ZXJfc3RhdHNf
aW5mb3NfKSB7CistICAgIGZvciAoYXV0byBzZW5kZXIgOiBzdGF0cy50cmFuc2NlaXZlci0+c2Vu
ZGVycygpKSB7CisrICAgIGZvciAoY29uc3QgYXV0byYgc2VuZGVyIDogc3RhdHMudHJhbnNjZWl2
ZXItPnNlbmRlcnMoKSkgeworICAgICAgIHN0ZDo6c3RyaW5nIHRyYWNrX2lkID0KKyAgICAgICAg
ICAgUlRDTWVkaWFTdHJlYW1UcmFja1N0YXRzSURGcm9tRGlyZWN0aW9uQW5kQXR0YWNobWVudCgK
KyAgICAgICAgICAgICAgIGtTZW5kZXIsIHNlbmRlci0+aW50ZXJuYWwoKS0+QXR0YWNobWVudElk
KCkpOworQEAgLTExMjQsNyArMTEyNCw3IEBAIHZvaWQgUlRDU3RhdHNDb2xsZWN0b3I6OlByb2R1
Y2VNZWRpYVN0cmVhbVN0YXRzX3MoCisgICAgICAgICB0cmFja19pZHNbc3RyZWFtX2lkXS5wdXNo
X2JhY2sodHJhY2tfaWQpOworICAgICAgIH0KKyAgICAgfQorLSAgICBmb3IgKGF1dG8gcmVjZWl2
ZXIgOiBzdGF0cy50cmFuc2NlaXZlci0+cmVjZWl2ZXJzKCkpIHsKKysgICAgZm9yIChjb25zdCBh
dXRvJiByZWNlaXZlciA6IHN0YXRzLnRyYW5zY2VpdmVyLT5yZWNlaXZlcnMoKSkgeworICAgICAg
IHN0ZDo6c3RyaW5nIHRyYWNrX2lkID0KKyAgICAgICAgICAgUlRDTWVkaWFTdHJlYW1UcmFja1N0
YXRzSURGcm9tRGlyZWN0aW9uQW5kQXR0YWNobWVudCgKKyAgICAgICAgICAgICAgIGtSZWNlaXZl
ciwgcmVjZWl2ZXItPmludGVybmFsKCktPkF0dGFjaG1lbnRJZCgpKTsKK0BAIC0xMTUwLDE0ICsx
MTUwLDE0IEBAIHZvaWQgUlRDU3RhdHNDb2xsZWN0b3I6OlByb2R1Y2VNZWRpYVN0cmVhbVRyYWNr
U3RhdHNfcygKKyAgIFJUQ19EQ0hFQ0soc2lnbmFsaW5nX3RocmVhZF8tPklzQ3VycmVudCgpKTsK
KyAgIGZvciAoY29uc3QgUnRwVHJhbnNjZWl2ZXJTdGF0c0luZm8mIHN0YXRzIDogdHJhbnNjZWl2
ZXJfc3RhdHNfaW5mb3NfKSB7CisgICAgIHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3JlZnB0cjxS
dHBTZW5kZXJJbnRlcm5hbD4+IHNlbmRlcnM7CistICAgIGZvciAoYXV0byBzZW5kZXIgOiBzdGF0
cy50cmFuc2NlaXZlci0+c2VuZGVycygpKSB7CisrICAgIGZvciAoY29uc3QgYXV0byYgc2VuZGVy
IDogc3RhdHMudHJhbnNjZWl2ZXItPnNlbmRlcnMoKSkgeworICAgICAgIHNlbmRlcnMucHVzaF9i
YWNrKHNlbmRlci0+aW50ZXJuYWwoKSk7CisgICAgIH0KKyAgICAgUHJvZHVjZVNlbmRlck1lZGlh
VHJhY2tTdGF0cyh0aW1lc3RhbXBfdXMsICpzdGF0cy50cmFja19tZWRpYV9pbmZvX21hcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXJzLCByZXBvcnQpOworIAorICAg
ICBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8UnRwUmVjZWl2ZXJJbnRlcm5hbD4+IHJl
Y2VpdmVyczsKKy0gICAgZm9yIChhdXRvIHJlY2VpdmVyIDogc3RhdHMudHJhbnNjZWl2ZXItPnJl
Y2VpdmVycygpKSB7CisrICAgIGZvciAoY29uc3QgYXV0byYgcmVjZWl2ZXIgOiBzdGF0cy50cmFu
c2NlaXZlci0+cmVjZWl2ZXJzKCkpIHsKKyAgICAgICByZWNlaXZlcnMucHVzaF9iYWNrKHJlY2Vp
dmVyLT5pbnRlcm5hbCgpKTsKKyAgICAgfQorICAgICBQcm9kdWNlUmVjZWl2ZXJNZWRpYVRyYWNr
U3RhdHModGltZXN0YW1wX3VzLCAqc3RhdHMudHJhY2tfbWVkaWFfaW5mb19tYXAsCitAQCAtMTQy
MCw3ICsxNDIwLDcgQEAgUlRDU3RhdHNDb2xsZWN0b3I6OlByZXBhcmVUcmFuc2NlaXZlclN0YXRz
SW5mb3NfcygpIGNvbnN0IHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjcmlja2V0OjpW
aWRlb01lZGlhSW5mbz4+CisgICAgICAgdmlkZW9fc3RhdHM7CisgCistICBmb3IgKGF1dG8gdHJh
bnNjZWl2ZXIgOiBwY18tPkdldFRyYW5zY2VpdmVyc0ludGVybmFsKCkpIHsKKysgIGZvciAoY29u
c3QgYXV0byYgdHJhbnNjZWl2ZXIgOiBwY18tPkdldFRyYW5zY2VpdmVyc0ludGVybmFsKCkpIHsK
KyAgICAgY3JpY2tldDo6TWVkaWFUeXBlIG1lZGlhX3R5cGUgPSB0cmFuc2NlaXZlci0+bWVkaWFf
dHlwZSgpOworIAorICAgICAvLyBQcmVwYXJlIHN0YXRzIGVudHJ5LiBUaGUgVHJhY2tNZWRpYUlu
Zm9NYXAgd2lsbCBiZSBmaWxsZWQgaW4gYWZ0ZXIgdGhlCitAQCAtMTQ5MywxMSArMTQ5MywxMSBA
QCBSVENTdGF0c0NvbGxlY3Rvcjo6UHJlcGFyZVRyYW5zY2VpdmVyU3RhdHNJbmZvc19zKCkgY29u
c3QgeworICAgICAgIH0KKyAgICAgfQorICAgICBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZw
dHI8UnRwU2VuZGVySW50ZXJuYWw+PiBzZW5kZXJzOworLSAgICBmb3IgKGF1dG8gc2VuZGVyIDog
dHJhbnNjZWl2ZXItPnNlbmRlcnMoKSkgeworKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNlbmRlciA6
IHRyYW5zY2VpdmVyLT5zZW5kZXJzKCkpIHsKKyAgICAgICBzZW5kZXJzLnB1c2hfYmFjayhzZW5k
ZXItPmludGVybmFsKCkpOworICAgICB9CisgICAgIHN0ZDo6dmVjdG9yPHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjxSdHBSZWNlaXZlckludGVybmFsPj4gcmVjZWl2ZXJzOworLSAgICBmb3IgKGF1dG8gcmVj
ZWl2ZXIgOiB0cmFuc2NlaXZlci0+cmVjZWl2ZXJzKCkpIHsKKysgICAgZm9yIChjb25zdCBhdXRv
JiByZWNlaXZlciA6IHRyYW5zY2VpdmVyLT5yZWNlaXZlcnMoKSkgeworICAgICAgIHJlY2VpdmVy
cy5wdXNoX2JhY2socmVjZWl2ZXItPmludGVybmFsKCkpOworICAgICB9CisgICAgIHN0YXRzLnRy
YWNrX21lZGlhX2luZm9fbWFwID0gYWJzbDo6bWFrZV91bmlxdWU8VHJhY2tNZWRpYUluZm9NYXA+
KAorZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L3BjL3J0cHJlY2VpdmVyLmNjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvcGMvcnRwcmVjZWl2ZXIuY2MKK2luZGV4IDE5MTZhNzM2NzAzLi5lNWE0MzczMjk0YyAx
MDA2NDQKKy0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3Bj
L3J0cHJlY2VpdmVyLmNjCisrKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9wYy9ydHByZWNlaXZlci5jYworQEAgLTIwNyw5ICsyMDcsOSBAQCB2b2lkIEF1ZGlv
UnRwUmVjZWl2ZXI6OnNldF9zdHJlYW1faWRzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdHJl
YW1faWRzKSB7Cisgdm9pZCBBdWRpb1J0cFJlY2VpdmVyOjpTZXRTdHJlYW1zKAorICAgICBjb25z
dCBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8TWVkaWFTdHJlYW1JbnRlcmZhY2U+PiYg
c3RyZWFtcykgeworICAgLy8gUmVtb3ZlIHJlbW90ZSB0cmFjayBmcm9tIGFueSBzdHJlYW1zIHRo
YXQgYXJlIGdvaW5nIGF3YXkuCistICBmb3IgKGF1dG8gZXhpc3Rpbmdfc3RyZWFtIDogc3RyZWFt
c18pIHsKKysgIGZvciAoY29uc3QgYXV0byYgZXhpc3Rpbmdfc3RyZWFtIDogc3RyZWFtc18pIHsK
KyAgICAgYm9vbCByZW1vdmVkID0gdHJ1ZTsKKy0gICAgZm9yIChhdXRvIHN0cmVhbSA6IHN0cmVh
bXMpIHsKKysgICAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW0gOiBzdHJlYW1zKSB7CisgICAgICAg
aWYgKGV4aXN0aW5nX3N0cmVhbS0+aWQoKSA9PSBzdHJlYW0tPmlkKCkpIHsKKyAgICAgICAgIFJU
Q19EQ0hFQ0tfRVEoZXhpc3Rpbmdfc3RyZWFtLmdldCgpLCBzdHJlYW0uZ2V0KCkpOworICAgICAg
ICAgcmVtb3ZlZCA9IGZhbHNlOworQEAgLTIyMSw5ICsyMjEsOSBAQCB2b2lkIEF1ZGlvUnRwUmVj
ZWl2ZXI6OlNldFN0cmVhbXMoCisgICAgIH0KKyAgIH0KKyAgIC8vIEFkZCByZW1vdGUgdHJhY2sg
dG8gYW55IHN0cmVhbXMgdGhhdCBhcmUgbmV3LgorLSAgZm9yIChhdXRvIHN0cmVhbSA6IHN0cmVh
bXMpIHsKKysgIGZvciAoY29uc3QgYXV0byYgc3RyZWFtIDogc3RyZWFtcykgeworICAgICBib29s
IGFkZGVkID0gdHJ1ZTsKKy0gICAgZm9yIChhdXRvIGV4aXN0aW5nX3N0cmVhbSA6IHN0cmVhbXNf
KSB7CisrICAgIGZvciAoY29uc3QgYXV0byYgZXhpc3Rpbmdfc3RyZWFtIDogc3RyZWFtc18pIHsK
KyAgICAgICBpZiAoc3RyZWFtLT5pZCgpID09IGV4aXN0aW5nX3N0cmVhbS0+aWQoKSkgeworICAg
ICAgICAgUlRDX0RDSEVDS19FUShzdHJlYW0uZ2V0KCksIGV4aXN0aW5nX3N0cmVhbS5nZXQoKSk7
CisgICAgICAgICBhZGRlZCA9IGZhbHNlOworQEAgLTQwNiw5ICs0MDYsOSBAQCB2b2lkIFZpZGVv
UnRwUmVjZWl2ZXI6OnNldF9zdHJlYW1faWRzKHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdHJl
YW1faWRzKSB7Cisgdm9pZCBWaWRlb1J0cFJlY2VpdmVyOjpTZXRTdHJlYW1zKAorICAgICBjb25z
dCBzdGQ6OnZlY3RvcjxydGM6OnNjb3BlZF9yZWZwdHI8TWVkaWFTdHJlYW1JbnRlcmZhY2U+PiYg
c3RyZWFtcykgeworICAgLy8gUmVtb3ZlIHJlbW90ZSB0cmFjayBmcm9tIGFueSBzdHJlYW1zIHRo
YXQgYXJlIGdvaW5nIGF3YXkuCistICBmb3IgKGF1dG8gZXhpc3Rpbmdfc3RyZWFtIDogc3RyZWFt
c18pIHsKKysgIGZvciAoY29uc3QgYXV0byYgZXhpc3Rpbmdfc3RyZWFtIDogc3RyZWFtc18pIHsK
KyAgICAgYm9vbCByZW1vdmVkID0gdHJ1ZTsKKy0gICAgZm9yIChhdXRvIHN0cmVhbSA6IHN0cmVh
bXMpIHsKKysgICAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW0gOiBzdHJlYW1zKSB7CisgICAgICAg
aWYgKGV4aXN0aW5nX3N0cmVhbS0+aWQoKSA9PSBzdHJlYW0tPmlkKCkpIHsKKyAgICAgICAgIFJU
Q19EQ0hFQ0tfRVEoZXhpc3Rpbmdfc3RyZWFtLmdldCgpLCBzdHJlYW0uZ2V0KCkpOworICAgICAg
ICAgcmVtb3ZlZCA9IGZhbHNlOworQEAgLTQyMCw5ICs0MjAsOSBAQCB2b2lkIFZpZGVvUnRwUmVj
ZWl2ZXI6OlNldFN0cmVhbXMoCisgICAgIH0KKyAgIH0KKyAgIC8vIEFkZCByZW1vdGUgdHJhY2sg
dG8gYW55IHN0cmVhbXMgdGhhdCBhcmUgbmV3LgorLSAgZm9yIChhdXRvIHN0cmVhbSA6IHN0cmVh
bXMpIHsKKysgIGZvciAoY29uc3QgYXV0byYgc3RyZWFtIDogc3RyZWFtcykgeworICAgICBib29s
IGFkZGVkID0gdHJ1ZTsKKy0gICAgZm9yIChhdXRvIGV4aXN0aW5nX3N0cmVhbSA6IHN0cmVhbXNf
KSB7CisrICAgIGZvciAoY29uc3QgYXV0byYgZXhpc3Rpbmdfc3RyZWFtIDogc3RyZWFtc18pIHsK
KyAgICAgICBpZiAoc3RyZWFtLT5pZCgpID09IGV4aXN0aW5nX3N0cmVhbS0+aWQoKSkgeworICAg
ICAgICAgUlRDX0RDSEVDS19FUShzdHJlYW0uZ2V0KCksIGV4aXN0aW5nX3N0cmVhbS5nZXQoKSk7
CisgICAgICAgICBhZGRlZCA9IGZhbHNlOworZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL3J0cHRyYW5zY2VpdmVyLmNjIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvcnRwdHJhbnNjZWl2ZXIuY2MKK2lu
ZGV4IDhiNTZiOGI0ZjEwLi4zNjdhNTM3ODBjOSAxMDA2NDQKKy0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL3J0cHRyYW5zY2VpdmVyLmNjCisrKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy9ydHB0cmFuc2NlaXZl
ci5jYworQEAgLTU5LDEyICs1OSwxMiBAQCB2b2lkIFJ0cFRyYW5zY2VpdmVyOjpTZXRDaGFubmVs
KGNyaWNrZXQ6OkNoYW5uZWxJbnRlcmZhY2UqIGNoYW5uZWwpIHsKKyAgICAgICAgIHRoaXMsICZS
dHBUcmFuc2NlaXZlcjo6T25GaXJzdFBhY2tldFJlY2VpdmVkKTsKKyAgIH0KKyAKKy0gIGZvciAo
YXV0byBzZW5kZXIgOiBzZW5kZXJzXykgeworKyAgZm9yIChjb25zdCBhdXRvJiBzZW5kZXIgOiBz
ZW5kZXJzXykgeworICAgICBzZW5kZXItPmludGVybmFsKCktPlNldE1lZGlhQ2hhbm5lbChjaGFu
bmVsXyA/IGNoYW5uZWxfLT5tZWRpYV9jaGFubmVsKCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxscHRyKTsKKyAgIH0KKyAKKy0gIGZvciAo
YXV0byByZWNlaXZlciA6IHJlY2VpdmVyc18pIHsKKysgIGZvciAoY29uc3QgYXV0byYgcmVjZWl2
ZXIgOiByZWNlaXZlcnNfKSB7CisgICAgIGlmICghY2hhbm5lbF8pIHsKKyAgICAgICByZWNlaXZl
ci0+aW50ZXJuYWwoKS0+U3RvcCgpOworICAgICB9CitAQCAtMTQ3LDcgKzE0Nyw3IEBAIGFic2w6
Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBSdHBUcmFuc2NlaXZlcjo6bWlkKCkgY29uc3QgeworIH0K
KyAKKyB2b2lkIFJ0cFRyYW5zY2VpdmVyOjpPbkZpcnN0UGFja2V0UmVjZWl2ZWQoY3JpY2tldDo6
Q2hhbm5lbEludGVyZmFjZSopIHsKKy0gIGZvciAoYXV0byByZWNlaXZlciA6IHJlY2VpdmVyc18p
IHsKKysgIGZvciAoY29uc3QgYXV0byYgcmVjZWl2ZXIgOiByZWNlaXZlcnNfKSB7CisgICAgIHJl
Y2VpdmVyLT5pbnRlcm5hbCgpLT5Ob3RpZnlGaXJzdFBhY2tldFJlY2VpdmVkKCk7CisgICB9Cisg
fQorQEAgLTIxMiwxMCArMjEyLDEwIEBAIGFic2w6Om9wdGlvbmFsPFJ0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uPiBSdHBUcmFuc2NlaXZlcjo6ZmlyZWRfZGlyZWN0aW9uKCkKKyB9CisgCisgdm9pZCBS
dHBUcmFuc2NlaXZlcjo6U3RvcCgpIHsKKy0gIGZvciAoYXV0byBzZW5kZXIgOiBzZW5kZXJzXykg
eworKyAgZm9yIChjb25zdCBhdXRvJiBzZW5kZXIgOiBzZW5kZXJzXykgeworICAgICBzZW5kZXIt
PmludGVybmFsKCktPlN0b3AoKTsKKyAgIH0KKy0gIGZvciAoYXV0byByZWNlaXZlciA6IHJlY2Vp
dmVyc18pIHsKKysgIGZvciAoY29uc3QgYXV0byYgcmVjZWl2ZXIgOiByZWNlaXZlcnNfKSB7Cisg
ICAgIHJlY2VpdmVyLT5pbnRlcm5hbCgpLT5TdG9wKCk7CisgICB9CisgICBzdG9wcGVkXyA9IHRy
dWU7CitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvcGMvc3RhdHNjb2xsZWN0b3IuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9wYy9zdGF0c2NvbGxlY3Rvci5jYworaW5kZXggM2NkODVlNjliMjMuLjNmYzk4
OGI0OWViIDEwMDY0NAorLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvcGMvc3RhdHNjb2xsZWN0b3IuY2MKKysrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL3N0YXRzY29sbGVjdG9yLmNjCitAQCAtODcxLDcgKzg3MSw3
IEBAIHZvaWQgU3RhdHNDb2xsZWN0b3I6OkV4dHJhY3RCd2VJbmZvKCkgeworIAorICAgLy8gRmls
bCBpbiB0YXJnZXQgZW5jb2RlciBiaXRyYXRlLCBhY3R1YWwgZW5jb2RlciBiaXRyYXRlLCBydHgg
Yml0cmF0ZSwgZXRjLgorICAgLy8gVE9ETyhob2xtZXIpOiBBbHNvIGZpbGwgdGhpcyBpbiBmb3Ig
YXVkaW8uCistICBmb3IgKGF1dG8gdHJhbnNjZWl2ZXIgOiBwY18tPkdldFRyYW5zY2VpdmVyc0lu
dGVybmFsKCkpIHsKKysgIGZvciAoY29uc3QgYXV0byYgdHJhbnNjZWl2ZXIgOiBwY18tPkdldFRy
YW5zY2VpdmVyc0ludGVybmFsKCkpIHsKKyAgICAgaWYgKHRyYW5zY2VpdmVyLT5tZWRpYV90eXBl
KCkgIT0gY3JpY2tldDo6TUVESUFfVFlQRV9WSURFTykgeworICAgICAgIGNvbnRpbnVlOworICAg
ICB9CitAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU3RhdHNDb2xsZWN0b3I6OkV4dHJhY3RNZWRp
YUluZm8oKSB7CisgCisgICB7CisgICAgIHJ0Yzo6VGhyZWFkOjpTY29wZWREaXNhbGxvd0Jsb2Nr
aW5nQ2FsbHMgbm9fYmxvY2tpbmdfY2FsbHM7CistICAgIGZvciAoYXV0byB0cmFuc2NlaXZlciA6
IHBjXy0+R2V0VHJhbnNjZWl2ZXJzSW50ZXJuYWwoKSkgeworKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHRyYW5zY2VpdmVyIDogcGNfLT5HZXRUcmFuc2NlaXZlcnNJbnRlcm5hbCgpKSB7CisgICAgICAg
aWYgKCF0cmFuc2NlaXZlci0+aW50ZXJuYWwoKS0+Y2hhbm5lbCgpKSB7CisgICAgICAgICBjb250
aW51ZTsKKyAgICAgICB9CitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvcGMvdHJhY2ttZWRpYWluZm9tYXAuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9wYy90cmFja21lZGlhaW5mb21hcC5jYworaW5kZXgg
YjVhYmI3ZTkzNjUuLjUxODI2ZGY0NWZjIDEwMDY0NAorLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvcGMvdHJhY2ttZWRpYWluZm9tYXAuY2MKKysrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3BjL3RyYWNrbWVkaWFpbmZv
bWFwLmNjCitAQCAtNDcsNyArNDcsNyBAQCB2b2lkIEdldEF1ZGlvQW5kVmlkZW9UcmFja0J5U3Ny
YygKKyAgIC8vIG1lYW5zIG9uZSB0aHJlYWQganVtcCBpZiBvbiBzaWduYWxpbmcgdGhyZWFkIGFu
ZCB0d28gdGhyZWFkIGp1bXBzIGlmIG9uIGFueQorICAgLy8gb3RoZXIgdGhyZWFkcykuIElzIHRo
ZXJlIGEgd2F5IHRvIGF2b2lkIHRocmVhZCBqdW1wKHMpIG9uIGEgcGVyCisgICAvLyBzZW5kZXIv
cmVjZWl2ZXIsIHBlciBtZXRob2QgYmFzaXM/CistICBmb3IgKGF1dG8gcnRwX3NlbmRlciA6IHJ0
cF9zZW5kZXJzKSB7CisrICBmb3IgKGNvbnN0IGF1dG8mIHJ0cF9zZW5kZXIgOiBydHBfc2VuZGVy
cykgeworICAgICBjcmlja2V0OjpNZWRpYVR5cGUgbWVkaWFfdHlwZSA9IHJ0cF9zZW5kZXItPm1l
ZGlhX3R5cGUoKTsKKyAgICAgTWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZSogdHJhY2sgPSBydHBf
c2VuZGVyLT50cmFjaygpOworICAgICBpZiAoIXRyYWNrKSB7CitAQCAtNzIsNyArNzIsNyBAQCB2
b2lkIEdldEF1ZGlvQW5kVmlkZW9UcmFja0J5U3NyYygKKyAgICAgICB9CisgICAgIH0KKyAgIH0K
Ky0gIGZvciAoYXV0byBydHBfcmVjZWl2ZXIgOiBydHBfcmVjZWl2ZXJzKSB7CisrICBmb3IgKGNv
bnN0IGF1dG8mIHJ0cF9yZWNlaXZlciA6IHJ0cF9yZWNlaXZlcnMpIHsKKyAgICAgY3JpY2tldDo6
TWVkaWFUeXBlIG1lZGlhX3R5cGUgPSBydHBfcmVjZWl2ZXItPm1lZGlhX3R5cGUoKTsKKyAgICAg
TWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZSogdHJhY2sgPSBydHBfcmVjZWl2ZXItPnRyYWNrKCk7
CisgICAgIFJUQ19EQ0hFQ0sodHJhY2spOworQEAgLTEyNiwxMCArMTI2LDEwIEBAIFRyYWNrTWVk
aWFJbmZvTWFwOjpUcmFja01lZGlhSW5mb01hcCgKKyAgICAgICAmcmVtb3RlX3ZpZGVvX3RyYWNr
X2J5X3NzcmMsICZ1bnNpZ25hbGVkX2F1ZGlvX3RyYWNrLAorICAgICAgICZ1bnNpZ25hbGVkX3Zp
ZGVvX3RyYWNrKTsKKyAKKy0gIGZvciAoYXV0byBzZW5kZXIgOiBydHBfc2VuZGVycykgeworKyAg
Zm9yIChjb25zdCBhdXRvJiBzZW5kZXIgOiBydHBfc2VuZGVycykgeworICAgICBhdHRhY2htZW50
X2lkX2J5X3RyYWNrX1tzZW5kZXItPnRyYWNrKCldID0gc2VuZGVyLT5BdHRhY2htZW50SWQoKTsK
KyAgIH0KKy0gIGZvciAoYXV0byByZWNlaXZlciA6IHJ0cF9yZWNlaXZlcnMpIHsKKysgIGZvciAo
Y29uc3QgYXV0byYgcmVjZWl2ZXIgOiBydHBfcmVjZWl2ZXJzKSB7CisgICAgIGF0dGFjaG1lbnRf
aWRfYnlfdHJhY2tfW3JlY2VpdmVyLT50cmFjaygpXSA9IHJlY2VpdmVyLT5BdHRhY2htZW50SWQo
KTsKKyAgIH0KKyAKK2RpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9ydGNfYmFzZS9maWxlcm90YXRpbmdzdHJlYW0uY2MgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9ydGNfYmFzZS9maWxlcm90YXRpbmdzdHJlYW0u
Y2MKK2luZGV4IGIxZGM1ZmY5OTgxLi4zOGQ4NTJlNTNjZSAxMDA2NDQKKy0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL2ZpbGVyb3RhdGluZ3N0
cmVhbS5jYworKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
cnRjX2Jhc2UvZmlsZXJvdGF0aW5nc3RyZWFtLmNjCitAQCAtMzI4LDcgKzMyOCw3IEBAIGJvb2wg
RmlsZVJvdGF0aW5nU3RyZWFtOjpHZXRTaXplKHNpemVfdCogc2l6ZSkgY29uc3QgeworICAgUlRD
X0RDSEVDSyhzaXplKTsKKyAgICpzaXplID0gMDsKKyAgIHNpemVfdCB0b3RhbF9zaXplID0gMDsK
Ky0gIGZvciAoYXV0byBmaWxlX25hbWUgOiBmaWxlX25hbWVzXykgeworKyAgZm9yIChjb25zdCBh
dXRvJiBmaWxlX25hbWUgOiBmaWxlX25hbWVzXykgeworICAgICB0b3RhbF9zaXplICs9IEdldEZp
bGVTaXplKGZpbGVfbmFtZSkudmFsdWVfb3IoMCk7CisgICB9CisgICAqc2l6ZSA9IHRvdGFsX3Np
emU7CitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvcnRjX2Jhc2Uvb3BlbnNzbHNlc3Npb25jYWNoZS5jYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL29wZW5zc2xzZXNzaW9uY2FjaGUuY2MKK2lu
ZGV4IDJlMzdkNTVkZWIxLi43YjgyMjc2NzI4YiAxMDA2NDQKKy0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19iYXNlL29wZW5zc2xzZXNzaW9uY2FjaGUu
Y2MKKysrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3J0Y19i
YXNlL29wZW5zc2xzZXNzaW9uY2FjaGUuY2MKK0BAIC0yMiw3ICsyMiw3IEBAIE9wZW5TU0xTZXNz
aW9uQ2FjaGU6Ok9wZW5TU0xTZXNzaW9uQ2FjaGUoU1NMTW9kZSBzc2xfbW9kZSwgU1NMX0NUWCog
c3NsX2N0eCkKKyB9CisgCisgT3BlblNTTFNlc3Npb25DYWNoZTo6fk9wZW5TU0xTZXNzaW9uQ2Fj
aGUoKSB7CistICBmb3IgKGF1dG8gaXQgOiBzZXNzaW9uc18pIHsKKysgIGZvciAoY29uc3QgYXV0
byYgaXQgOiBzZXNzaW9uc18pIHsKKyAgICAgU1NMX1NFU1NJT05fZnJlZShpdC5zZWNvbmQpOwor
ICAgfQorICAgU1NMX0NUWF9mcmVlKHNzbF9jdHhfKTsKK2RpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy92aWRlby9yZWNlaXZlX3N0YXRpc3RpY3Nf
cHJveHkuY2MgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy92aWRl
by9yZWNlaXZlX3N0YXRpc3RpY3NfcHJveHkuY2MKK2luZGV4IGUyMGI3ZDI5NGZkLi5lODJlOTY3
Y2Y0ZiAxMDA2NDQKKy0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL3ZpZGVvL3JlY2VpdmVfc3RhdGlzdGljc19wcm94eS5jYworKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvdmlkZW8vcmVjZWl2ZV9zdGF0aXN0aWNzX3By
b3h5LmNjCitAQCAtMjc1LDcgKzI3NSw3IEBAIHZvaWQgUmVjZWl2ZVN0YXRpc3RpY3NQcm94eTo6
VXBkYXRlSGlzdG9ncmFtcygpIHsKKyAgIC8vIEFnZ3JlZ2F0ZSBjb250ZW50X3NwZWNpZmljX3N0
YXRzXyBieSByZW1vdmluZyBleHBlcmltZW50IG9yIHNpbXVsY2FzdAorICAgLy8gaW5mb3JtYXRp
b247CisgICBzdGQ6Om1hcDxWaWRlb0NvbnRlbnRUeXBlLCBDb250ZW50U3BlY2lmaWNTdGF0cz4g
YWdncmVnYXRlZF9zdGF0czsKKy0gIGZvciAoYXV0byBpdCA6IGNvbnRlbnRfc3BlY2lmaWNfc3Rh
dHNfKSB7CisrICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogY29udGVudF9zcGVjaWZpY19zdGF0c18p
IHsKKyAgICAgLy8gQ2FsY3VsYXRlIHNpbXVsY2FzdCBzcGVjaWZpYyBtZXRyaWNzICgiLlMwIiAu
Li4gIi5TMiIgc3VmZml4ZXMpLgorICAgICBWaWRlb0NvbnRlbnRUeXBlIGNvbnRlbnRfdHlwZSA9
IGl0LmZpcnN0OworICAgICBpZiAodmlkZW9jb250ZW50dHlwZWhlbHBlcnM6OkdldFNpbXVsY2Fz
dElkKGNvbnRlbnRfdHlwZSkgPiAwKSB7CitAQCAtMjk3LDcgKzI5Nyw3IEBAIHZvaWQgUmVjZWl2
ZVN0YXRpc3RpY3NQcm94eTo6VXBkYXRlSGlzdG9ncmFtcygpIHsKKyAgICAgYWdncmVnYXRlZF9z
dGF0c1tjb250ZW50X3R5cGVdLkFkZChpdC5zZWNvbmQpOworICAgfQorIAorLSAgZm9yIChhdXRv
IGl0IDogYWdncmVnYXRlZF9zdGF0cykgeworKyAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGFnZ3Jl
Z2F0ZWRfc3RhdHMpIHsKKyAgICAgLy8gRm9yIHRoZSBtZXRyaWMgRm9vIHdlIHJlcG9ydCB0aGUg
Zm9sbG93aW5nIHNsaWNlczoKKyAgICAgLy8gV2ViUlRDLlZpZGVvLkZvbywKKyAgICAgLy8gV2Vi
UlRDLlZpZGVvLlNjcmVlbnNoYXJlLkZvbywK
</data>

          </attachment>
      

    </bug>

</bugzilla>