<?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>164789</bug_id>
          
          <creation_ts>2016-11-15 13:51:06 -0800</creation_ts>
          <short_desc>Implement WebPlaybackControlsManager</short_desc>
          <delta_ts>2020-08-26 16:41:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215873</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mitz</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1251607</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-15 13:51:06 -0800</bug_when>
    <thetext>Implement WebPlaybackControlsManager</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251611</commentid>
    <comment_count>1</comment_count>
      <attachid>294876</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-15 13:53:23 -0800</bug_when>
    <thetext>Created attachment 294876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251614</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-15 13:55:58 -0800</bug_when>
    <thetext>Attachment 294876 did not pass style-queue:


ERROR: Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:108:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:242:  The parameter name &quot;playing&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251793</commentid>
    <comment_count>3</comment_count>
      <attachid>294876</attachid>
    <who name="">mitz</who>
    <bug_when>2016-11-15 20:52:52 -0800</bug_when>
    <thetext>Comment on attachment 294876
Patch

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

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:29
&gt; +#import &quot;AVKitSPI.h&quot;

Since this is a framework header, it should import other WebCore headers using &lt;WebCore/ syntax.

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:42
&gt; +@interface WebPlaybackControlsManager : NSObject&lt;AVFunctionBarPlaybackControlsControlling&gt; {

Missing space before the &lt;.

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:65
&gt; +@property NSTimeInterval seekToTime;

This could probably be nonatomic (as could may other properties here).

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:68
&gt; +@property BOOL hasEnabledAudio;
&gt; +@property BOOL hasEnabledVideo;

Can be nonatomic.

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:70
&gt; +@property (nonatomic, retain, readwrite) NSArray&lt;AVFunctionBarMediaSelectionOption *&gt; *audioFunctionBarMediaSelectionOptions;
&gt; +@property (nonatomic, retain, readwrite) NSArray&lt;AVFunctionBarMediaSelectionOption *&gt; *legibleFunctionBarMediaSelectionOptions;

We normally omit “readwrite” when possible. It’s a little unusual for a property whose value is NSArray to be “retain” rather than “copy”.

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:98
&gt; +    completionHandler(@[], nil);

Missing space between the brackets.

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:104
&gt; +    completionHandler(@[], nil);

Ditto.

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:132
&gt; +    _audioFunctionBarMediaSelectionOptions = audioOptions;

I’d make a copy of audioOptions here (and change the property from “retain” to “copy”.

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:149
&gt; +    if (audioMediaSelectionOption &amp;&amp; self.audioFunctionBarMediaSelectionOptions)

We normally don’t use trivial accessors from within a class’s own implementation, but just use the ivar directly.

&gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:162
&gt; +    _legibleFunctionBarMediaSelectionOptions = legibleOptions;

I’d make a copy of legibleOptions here (and change the property from “retain” to “copy”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251955</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-16 12:21:57 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 294876 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294876&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:29
&gt; &gt; +#import &quot;AVKitSPI.h&quot;
&gt; 
&gt; Since this is a framework header, it should import other WebCore headers
&gt; using &lt;WebCore/ syntax.
&gt; 
Okay!

&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:42
&gt; &gt; +@interface WebPlaybackControlsManager : NSObject&lt;AVFunctionBarPlaybackControlsControlling&gt; {
&gt; 
&gt; Missing space before the &lt;.
&gt; 

Fixed!

&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:65
&gt; &gt; +@property NSTimeInterval seekToTime;
&gt; 
&gt; This could probably be nonatomic (as could may other properties here).
&gt; 
&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:68
&gt; &gt; +@property BOOL hasEnabledAudio;
&gt; &gt; +@property BOOL hasEnabledVideo;
&gt; 
&gt; Can be nonatomic.
&gt; 

Added nonatomic.

&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.h:70
&gt; &gt; +@property (nonatomic, retain, readwrite) NSArray&lt;AVFunctionBarMediaSelectionOption *&gt; *audioFunctionBarMediaSelectionOptions;
&gt; &gt; +@property (nonatomic, retain, readwrite) NSArray&lt;AVFunctionBarMediaSelectionOption *&gt; *legibleFunctionBarMediaSelectionOptions;
&gt; 
&gt; We normally omit “readwrite” when possible. It’s a little unusual for a
&gt; property whose value is NSArray to be “retain” rather than “copy”.
&gt; 

We discussed this on irc and agreed that this can be removed from the header because it&apos;s a part of the protocol.

&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:98
&gt; &gt; +    completionHandler(@[], nil);
&gt; 
&gt; Missing space between the brackets.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:104
&gt; &gt; +    completionHandler(@[], nil);
&gt; 
&gt; Ditto.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:132
&gt; &gt; +    _audioFunctionBarMediaSelectionOptions = audioOptions;
&gt; 
&gt; I’d make a copy of audioOptions here (and change the property from “retain”
&gt; to “copy”.
&gt; 

See above.

&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:149
&gt; &gt; +    if (audioMediaSelectionOption &amp;&amp; self.audioFunctionBarMediaSelectionOptions)
&gt; 
&gt; We normally don’t use trivial accessors from within a class’s own
&gt; implementation, but just use the ivar directly.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/platform/mac/WebPlaybackControlsManager.mm:162
&gt; &gt; +    _legibleFunctionBarMediaSelectionOptions = legibleOptions;
&gt; 
&gt; I’d make a copy of legibleOptions here (and change the property from
&gt; “retain” to “copy”.


See above.

Thank you!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251956</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-16 12:24:21 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/208802</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251975</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-11-16 12:50:31 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; https://trac.webkit.org/changeset/208802

It broke the Sierra build, see build.webkit.org for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251980</commentid>
    <comment_count>7</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-16 12:59:05 -0800</bug_when>
    <thetext>Build fix: https://trac.webkit.org/changeset/208805</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251991</commentid>
    <comment_count>8</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2016-11-16 13:10:45 -0800</bug_when>
    <thetext>Another fix: https://trac.webkit.org/changeset/208809</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294876</attachid>
            <date>2016-11-15 13:53:23 -0800</date>
            <delta_ts>2016-11-15 20:52:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>19273</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODc1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTExLTE1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgV2ViUGxheWJhY2tD
b250cm9sc01hbmFnZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDc4OQorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzI5Mjc1MDgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW06Cisg
ICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGRlYWxsb2NdKToKKyAgICAgICAg
KC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgY2FuY2VsVGh1bWJuYWlsQW5kQXVkaW9BbXBs
aXR1ZGVTYW1wbGVHZW5lcmF0aW9uXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyIGdlbmVyYXRlRnVuY3Rpb25CYXJUaHVtYm5haWxzRm9yVGltZXM6c2l6ZTpjb21wbGV0
aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgZ2Vu
ZXJhdGVGdW5jdGlvbkJhckF1ZGlvQW1wbGl0dWRlU2FtcGxlczpjb21wbGV0aW9uSGFuZGxlcjpd
KToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgY2FuQmVnaW5GdW5jdGlv
bkJhclNjcnViYmluZ10pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBi
ZWdpbkZ1bmN0aW9uQmFyU2NydWJiaW5nXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJv
bHNNYW5hZ2VyIGVuZEZ1bmN0aW9uQmFyU2NydWJiaW5nXSk6CisgICAgICAgICgtW1dlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyIGF1ZGlvRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnNd
KToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0QXVkaW9GdW5jdGlv
bkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uczpdKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250
cm9sc01hbmFnZXIgY3VycmVudEF1ZGlvRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbl0p
OgorICAgICAgICAoLVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRDdXJyZW50QXVkaW9G
dW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOl0pOgorICAgICAgICAoLVtXZWJQbGF5YmFj
a0NvbnRyb2xzTWFuYWdlciBsZWdpYmxlRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnNd
KToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0TGVnaWJsZUZ1bmN0
aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zOl0pOgorICAgICAgICAoLVtXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciBjdXJyZW50TGVnaWJsZUZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRp
b25dKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgc2V0Q3VycmVudExl
Z2libGVGdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOl0pOgorICAgICAgICAobWVkaWFT
ZWxlY3Rpb25PcHRpb25zKToKKyAgICAgICAgKC1bV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIg
c2V0QXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbnM6d2l0aFNlbGVjdGVkSW5kZXg6XSk6CisgICAg
ICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldExlZ2libGVNZWRpYVNlbGVjdGlv
bk9wdGlvbnM6d2l0aFNlbGVjdGVkSW5kZXg6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyIHdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hY10pOgorICAgICAgICAo
LVtXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciBzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHRvZ2dsZVBs
YXliYWNrXSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIHNldFBsYXlp
bmc6XSk6CisgICAgICAgICgtW1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyIGlzUGxheWluZ10p
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpk
dXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTWFjOjpjdXJyZW50VGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViUGxh
eWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpyYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OnBsYXlCYWNrQ29udHJvbHNNYW5hZ2Vy
KToKKwogMjAxNi0xMS0xNSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZvbGxvd3VwIHBhdGNoIGZvciByMjA4NzM3CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaAko
cmV2aXNpb24gMjA4NzQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDM0ICsyNiwzMSBAQAog
I2lmbmRlZiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlcl9oCiAjZGVmaW5lIFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyX2gKIAorI2ltcG9ydCAiQVZLaXRTUEkuaCIKKyNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KKwogI2lmIFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CiB9CiAKLSNpZiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
Ci0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViUGxheWJhY2tDb250cm9sc0NvbnRyb2xsZXJB
ZGRpdGlvbnMuaD4KLSNlbHNlCi0jaW1wb3J0IDxXZWJDb3JlL0FWS2l0U1BJLmg+Ci0jaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvVmVjdG9yLmg+Ci0KLU9CSkNfQ0xBU1Mg
QVZWYWx1ZVRpbWluZzsKKyNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
CiAKIFdFQkNPUkVfRVhQT1JUCi1AaW50ZXJmYWNlIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2Vy
IDogTlNPYmplY3QKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCi0g
ICAgPEFWRnVuY3Rpb25CYXJQbGF5YmFja0NvbnRyb2xzQ29udHJvbGxpbmc+Ci0jZW5kaWYKLXsK
K0BpbnRlcmZhY2UgV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIgOiBOU09iamVjdDxBVkZ1bmN0
aW9uQmFyUGxheWJhY2tDb250cm9sc0NvbnRyb2xsaW5nPiB7CiAgICAgTlNUaW1lSW50ZXJ2YWwg
X2NvbnRlbnREdXJhdGlvbjsKLQogICAgIFJldGFpblB0cjxBVlZhbHVlVGltaW5nPiBfdGltaW5n
OwogICAgIE5TVGltZUludGVydmFsIF9zZWVrVG9UaW1lOwogICAgIFJldGFpblB0cjxOU0FycmF5
PiBfc2Vla2FibGVUaW1lUmFuZ2VzOwogICAgIEJPT0wgX2hhc0VuYWJsZWRBdWRpbzsKICAgICBC
T09MIF9oYXNFbmFibGVkVmlkZW87CisgICAgUmV0YWluUHRyPE5TQXJyYXk8QVZGdW5jdGlvbkJh
ck1lZGlhU2VsZWN0aW9uT3B0aW9uICo+PiBfYXVkaW9GdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9u
T3B0aW9uczsKKyAgICBSZXRhaW5QdHI8QVZGdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9u
PiBfY3VycmVudEF1ZGlvRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbjsKKyAgICBSZXRh
aW5QdHI8TlNBcnJheTxBVkZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb24gKj4+IF9sZWdp
YmxlRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbnM7CisgICAgUmV0YWluUHRyPEFWRnVu
Y3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbj4gX2N1cnJlbnRMZWdpYmxlRnVuY3Rpb25CYXJN
ZWRpYVNlbGVjdGlvbk9wdGlvbjsKKwogICAgIGZsb2F0IF9yYXRlOwogICAgIEJPT0wgX3BsYXlp
bmc7CiAgICAgQk9PTCBfY2FuVG9nZ2xlUGxheWJhY2s7CkBAIC02NSwxOCArNjIsMjYgQEAgQGlu
dGVyZmFjZSBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciA6IAogQHByb3BlcnR5IChhc3NpZ24p
IFdlYkNvcmU6OldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyogd2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjOwogQHByb3BlcnR5IChyZWFkd3JpdGUpIE5TVGltZUludGVydmFsIGNv
bnRlbnREdXJhdGlvbjsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHJlYWR3cml0ZSkg
QVZWYWx1ZVRpbWluZyAqdGltaW5nOworQHByb3BlcnR5IE5TVGltZUludGVydmFsIHNlZWtUb1Rp
bWU7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmV0YWluLCByZWFkd3JpdGUpIE5TQXJyYXkgKnNl
ZWthYmxlVGltZVJhbmdlczsKLUBwcm9wZXJ0eSAocmVhZHdyaXRlKSBCT09MIGhhc0VuYWJsZWRB
dWRpbzsKLUBwcm9wZXJ0eSAocmVhZHdyaXRlKSBCT09MIGhhc0VuYWJsZWRWaWRlbzsKLUBwcm9w
ZXJ0eSAobm9uYXRvbWljKSBmbG9hdCByYXRlOworQHByb3BlcnR5IEJPT0wgaGFzRW5hYmxlZEF1
ZGlvOworQHByb3BlcnR5IEJPT0wgaGFzRW5hYmxlZFZpZGVvOworQHByb3BlcnR5IChub25hdG9t
aWMsIHJldGFpbiwgcmVhZHdyaXRlKSBOU0FycmF5PEFWRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlv
bk9wdGlvbiAqPiAqYXVkaW9GdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uczsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZXRhaW4sIHJlYWR3cml0ZSkgTlNBcnJheTxBVkZ1bmN0aW9uQmFy
TWVkaWFTZWxlY3Rpb25PcHRpb24gKj4gKmxlZ2libGVGdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9u
T3B0aW9uczsKIEBwcm9wZXJ0eSAoZ2V0dGVyPWlzUGxheWluZykgQk9PTCBwbGF5aW5nOwogQHBy
b3BlcnR5IEJPT0wgY2FuVG9nZ2xlUGxheWJhY2s7CiAKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBm
bG9hdCByYXRlOworCistIChBVkZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb24gKiljdXJy
ZW50QXVkaW9GdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOworLSAodm9pZClzZXRDdXJy
ZW50QXVkaW9GdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOihBVkZ1bmN0aW9uQmFyTWVk
aWFTZWxlY3Rpb25PcHRpb24gKilvcHRpb247CistIChBVkZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rp
b25PcHRpb24gKiljdXJyZW50TGVnaWJsZUZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb247
CistICh2b2lkKXNldEN1cnJlbnRMZWdpYmxlRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlv
bjooQVZGdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uICopb3B0aW9uOwogLSAodm9pZClz
ZXRBdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uczooY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYp
b3B0aW9ucyB3aXRoU2VsZWN0ZWRJbmRleDooTlNVSW50ZWdlcilzZWxlY3RlZEluZGV4OwogLSAo
dm9pZClzZXRMZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zOihjb25zdCBWZWN0b3I8V1RGOjpT
dHJpbmc+JilvcHRpb25zIHdpdGhTZWxlY3RlZEluZGV4OihOU1VJbnRlZ2VyKXNlbGVjdGVkSW5k
ZXg7Ci0KIEBlbmQKLSNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBFTkFCTEUo
V0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1BM
QVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVO
QUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1dlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5tbQko
cmV2aXNpb24gMjA4NzQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXli
YWNrQ29udHJvbHNNYW5hZ2VyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwzNiArMjYsMzMgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
ci5oIgogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9OX01P
REUpCi0KLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCi0jaW1wb3J0IDxXZWJLaXRBZGRpdGlvbnMvV2ViUGxheWJhY2tD
b250cm9sc0NvbnRyb2xsZXJBZGRpdGlvbnMubW0+Ci0jZWxzZQorI2lmIFBMQVRGT1JNKE1BQykg
JiYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RFKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNL
X0NPTlRST0xTX01BTkFHRVIpCiAKICNpbXBvcnQgIldlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZU1hYy5oIgogCi1AaW1wbGVtZW50YXRpb24gV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIKKyNp
bXBvcnQgIlNvZnRMaW5raW5nLmgiCisjaW1wb3J0ICJXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbC5o
IgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdudWxsYWJpbGl0
eS1jb21wbGV0ZW5lc3MiCitTT0ZUX0xJTktfRlJBTUVXT1JLKEFWS2l0KQorU09GVF9MSU5LX0NM
QVNTX09QVElPTkFMKEFWS2l0LCBBVkZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb24pCiAK
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworQGltcGxlbWVudGF0aW9uIFdlYlBsYXliYWNrQ29u
dHJvbHNNYW5hZ2VyCiAKIEBzeW50aGVzaXplIGNvbnRlbnREdXJhdGlvbj1fY29udGVudER1cmF0
aW9uOworQHN5bnRoZXNpemUgc2Vla1RvVGltZT1fc2Vla1RvVGltZTsKIEBzeW50aGVzaXplIGhh
c0VuYWJsZWRBdWRpbz1faGFzRW5hYmxlZEF1ZGlvOwogQHN5bnRoZXNpemUgaGFzRW5hYmxlZFZp
ZGVvPV9oYXNFbmFibGVkVmlkZW87CiBAc3ludGhlc2l6ZSByYXRlPV9yYXRlOwotQHN5bnRoZXNp
emUgcGxheWluZz1fcGxheWluZzsKIEBzeW50aGVzaXplIGNhblRvZ2dsZVBsYXliYWNrPV9jYW5U
b2dnbGVQbGF5YmFjazsKLSNpZiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIp
Ci1Ac3ludGhlc2l6ZSBzZWVrVG9UaW1lPV9zZWVrVG9UaW1lOwotI2VuZGlmCiAKLS0gKFdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFj
CistICh2b2lkKWRlYWxsb2MKIHsKLSAgICByZXR1cm4gX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy5nZXQoKTsKLX0KLQotLSAodm9pZClzZXRXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZh
Y2VNYWM6KFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyopd2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjCi17Ci0gICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYyA9IHdl
YlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzsKKyAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYykKKyAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+
c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIobnVsbHB0cik7CisgICAgW3N1cGVyIGRlYWxsb2Nd
OwogfQogCiAtIChBVlZhbHVlVGltaW5nICopdGltaW5nCkBAIC05MCwyMCArODcsMTc1IEBAIC0g
KHZvaWQpc2Vla1RvVGltZTooTlNUaW1lSW50ZXJ2YWwpdGltZSAKICAgICBfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWVrVG9UaW1l
KHRpbWUpOwogfQogCistICh2b2lkKWNhbmNlbFRodW1ibmFpbEFuZEF1ZGlvQW1wbGl0dWRlU2Ft
cGxlR2VuZXJhdGlvbgoreworfQorCistICh2b2lkKWdlbmVyYXRlRnVuY3Rpb25CYXJUaHVtYm5h
aWxzRm9yVGltZXM6KE5TQXJyYXk8TlNOdW1iZXIgKj4gKil0aHVtYm5haWxUaW1lcyBzaXplOihO
U1NpemUpc2l6ZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxBVlRodW1ibmFp
bCAqPiAqdGh1bWJuYWlscywgTlNFcnJvciAqZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHRodW1ibmFpbFRpbWVzKTsKKyAgICBVTlVTRURfUEFSQU0oc2l6ZSk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIoQFtdLCBuaWwpOworfQorCistICh2b2lkKWdlbmVyYXRl
RnVuY3Rpb25CYXJBdWRpb0FtcGxpdHVkZVNhbXBsZXM6KE5TSW50ZWdlciludW1iZXJPZlNhbXBs
ZXMgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8TlNOdW1iZXIgKj4gKmF1ZGlv
QW1wbGl0dWRlU2FtcGxlcywgIE5TRXJyb3IgKmVycm9yKSljb21wbGV0aW9uSGFuZGxlcgorewor
ICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZlNhbXBsZXMpOworICAgIGNvbXBsZXRpb25IYW5kbGVy
KEBbXSwgbmlsKTsKK30KKworLShCT09MKWNhbkJlZ2luRnVuY3Rpb25CYXJTY3J1YmJpbmcKK3sK
KyAgICAvLyBJdCdzIG5vdCBpZGVhbCB0byByZXR1cm4gWUVTIGFsbCB0aGUgdGltZSBoZXJlLiBU
aGUgaW50ZW50IG9mIHRoZSBBUEkgaXMgdGhhdCB3ZSByZXR1cm4gTk8gd2hlbiB0aGUKKyAgICAv
LyBtZWRpYSBpcyBiZWluZyBzY3J1YmJlZCB2aWEgdGhlIG9uLXNjcmVlbiBzY3J1YmJlci4gQnV0
IHdlIGNhbiBvbmx5IHBvc3NpYmx5IGdldCB0aGUgcmlnaHQgYW5zd2VyIGZvcgorICAgIC8vIG1l
ZGlhIHRoYXQgdXNlcyB0aGUgZGVmYXVsdCBjb250cm9scy4KKyAgICByZXR1cm4gWUVTOworfQor
CistICh2b2lkKWJlZ2luRnVuY3Rpb25CYXJTY3J1YmJpbmcKK3sKKyAgICBfd2ViUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTWFjLT5iZWdpblNjcnViYmluZygpOworfQorCistICh2b2lkKWVuZEZ1
bmN0aW9uQmFyU2NydWJiaW5nCit7CisgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
Yy0+ZW5kU2NydWJiaW5nKCk7Cit9CisKKy0gKE5TQXJyYXk8QVZGdW5jdGlvbkJhck1lZGlhU2Vs
ZWN0aW9uT3B0aW9uICo+ICopYXVkaW9GdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucwor
eworICAgIHJldHVybiBfYXVkaW9GdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucy5nZXQo
KTsKK30KKworLSAodm9pZClzZXRBdWRpb0Z1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25z
OihOU0FycmF5PEFWRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbiAqPiAqKWF1ZGlvT3B0
aW9ucworeworICAgIF9hdWRpb0Z1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zID0gYXVk
aW9PcHRpb25zOworfQorCistIChBVkZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb24gKilj
dXJyZW50QXVkaW9GdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uCit7CisgICAgcmV0dXJu
IF9jdXJyZW50QXVkaW9GdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uLmdldCgpOworfQor
CistICh2b2lkKXNldEN1cnJlbnRBdWRpb0Z1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb246
KEFWRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbiAqKWF1ZGlvTWVkaWFTZWxlY3Rpb25P
cHRpb24KK3sKKyAgICBpZiAoYXVkaW9NZWRpYVNlbGVjdGlvbk9wdGlvbiA9PSBfY3VycmVudEF1
ZGlvRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgX2N1cnJlbnRBdWRpb0Z1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb24gPSBhdWRpb01l
ZGlhU2VsZWN0aW9uT3B0aW9uOworCisgICAgTlNJbnRlZ2VyIGluZGV4ID0gTlNOb3RGb3VuZDsK
KworICAgIGlmIChhdWRpb01lZGlhU2VsZWN0aW9uT3B0aW9uICYmIHNlbGYuYXVkaW9GdW5jdGlv
bkJhck1lZGlhU2VsZWN0aW9uT3B0aW9ucykKKyAgICAgICAgaW5kZXggPSBbc2VsZi5hdWRpb0Z1
bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zIGluZGV4T2ZPYmplY3Q6YXVkaW9NZWRpYVNl
bGVjdGlvbk9wdGlvbl07CisKKyAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53
ZWJQbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5zZWxlY3RBdWRpb01lZGlhT3B0aW9uKGluZGV4ICE9
IE5TTm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOworfQorCistIChOU0FycmF5PEFWRnVu
Y3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbiAqPiAqKWxlZ2libGVGdW5jdGlvbkJhck1lZGlh
U2VsZWN0aW9uT3B0aW9ucworeworICAgIHJldHVybiBfbGVnaWJsZUZ1bmN0aW9uQmFyTWVkaWFT
ZWxlY3Rpb25PcHRpb25zLmdldCgpOworfQorCistICh2b2lkKXNldExlZ2libGVGdW5jdGlvbkJh
ck1lZGlhU2VsZWN0aW9uT3B0aW9uczooTlNBcnJheTxBVkZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rp
b25PcHRpb24gKj4gKilsZWdpYmxlT3B0aW9ucworeworICAgIF9sZWdpYmxlRnVuY3Rpb25CYXJN
ZWRpYVNlbGVjdGlvbk9wdGlvbnMgPSBsZWdpYmxlT3B0aW9uczsKK30KKworLSAoQVZGdW5jdGlv
bkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uICopY3VycmVudExlZ2libGVGdW5jdGlvbkJhck1lZGlh
U2VsZWN0aW9uT3B0aW9uCit7CisgICAgcmV0dXJuIF9jdXJyZW50TGVnaWJsZUZ1bmN0aW9uQmFy
TWVkaWFTZWxlY3Rpb25PcHRpb24uZ2V0KCk7Cit9CisKKy0gKHZvaWQpc2V0Q3VycmVudExlZ2li
bGVGdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOihBVkZ1bmN0aW9uQmFyTWVkaWFTZWxl
Y3Rpb25PcHRpb24gKilsZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb24KK3sKKyAgICBpZiAobGVn
aWJsZU1lZGlhU2VsZWN0aW9uT3B0aW9uID09IF9jdXJyZW50TGVnaWJsZUZ1bmN0aW9uQmFyTWVk
aWFTZWxlY3Rpb25PcHRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIF9jdXJyZW50TGVnaWJs
ZUZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb24gPSBsZWdpYmxlTWVkaWFTZWxlY3Rpb25P
cHRpb247CisKKyAgICBOU0ludGVnZXIgaW5kZXggPSBOU05vdEZvdW5kOworCisgICAgaWYgKGxl
Z2libGVNZWRpYVNlbGVjdGlvbk9wdGlvbiAmJiBzZWxmLmxlZ2libGVGdW5jdGlvbkJhck1lZGlh
U2VsZWN0aW9uT3B0aW9ucykKKyAgICAgICAgaW5kZXggPSBbc2VsZi5sZWdpYmxlRnVuY3Rpb25C
YXJNZWRpYVNlbGVjdGlvbk9wdGlvbnMgaW5kZXhPZk9iamVjdDpsZWdpYmxlTWVkaWFTZWxlY3Rp
b25PcHRpb25dOworCisgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxh
eWJhY2tTZXNzaW9uTW9kZWwoKS0+c2VsZWN0TGVnaWJsZU1lZGlhT3B0aW9uKGluZGV4ICE9IE5T
Tm90Rm91bmQgPyBpbmRleCA6IFVJTlQ2NF9NQVgpOworfQorCitzdGF0aWMgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiBtZWRpYVNlbGVjdGlvbk9wdGlvbnMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IG9wdGlvbnMpCit7CisgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0g
YWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5Om9wdGlvbnMu
c2l6ZSgpXSk7CisgICAgZm9yIChhdXRvJiBuYW1lIDogb3B0aW9ucykgeworICAgICAgICBpZiAo
UmV0YWluUHRyPEFWRnVuY3Rpb25CYXJNZWRpYVNlbGVjdGlvbk9wdGlvbj4gd2ViT3B0aW9uID0g
YWRvcHROUyhbYWxsb2NBVkZ1bmN0aW9uQmFyTWVkaWFTZWxlY3Rpb25PcHRpb25JbnN0YW5jZSgp
IGluaXRXaXRoVGl0bGU6bmFtZV0pKQorICAgICAgICAgICAgW3dlYk9wdGlvbnMgYWRkT2JqZWN0
OndlYk9wdGlvbi5nZXQoKV07CisgICAgfQorICAgIHJldHVybiB3ZWJPcHRpb25zOworfQorCiAt
ICh2b2lkKXNldEF1ZGlvTWVkaWFTZWxlY3Rpb25PcHRpb25zOihjb25zdCBWZWN0b3I8V1RGOjpT
dHJpbmc+JilvcHRpb25zIHdpdGhTZWxlY3RlZEluZGV4OihOU1VJbnRlZ2VyKXNlbGVjdGVkSW5k
ZXgKIHsKLSAgICBVTlVTRURfUEFSQU0ob3B0aW9ucyk7Ci0gICAgVU5VU0VEX1BBUkFNKHNlbGVj
dGVkSW5kZXgpOworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheT4gd2ViT3B0aW9ucyA9IG1l
ZGlhU2VsZWN0aW9uT3B0aW9ucyhvcHRpb25zKTsKKyAgICBbc2VsZiBzZXRBdWRpb0Z1bmN0aW9u
QmFyTWVkaWFTZWxlY3Rpb25PcHRpb25zOndlYk9wdGlvbnMuZ2V0KCldOworICAgIGlmIChzZWxl
Y3RlZEluZGV4IDwgW3dlYk9wdGlvbnMgY291bnRdKQorICAgICAgICBbc2VsZiBzZXRDdXJyZW50
QXVkaW9GdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0
SW5kZXg6c2VsZWN0ZWRJbmRleF1dOwogfQogCiAtICh2b2lkKXNldExlZ2libGVNZWRpYVNlbGVj
dGlvbk9wdGlvbnM6KGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mKW9wdGlvbnMgd2l0aFNlbGVj
dGVkSW5kZXg6KE5TVUludGVnZXIpc2VsZWN0ZWRJbmRleAogewotICAgIFVOVVNFRF9QQVJBTShv
cHRpb25zKTsKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0ZWRJbmRleCk7CisgICAgUmV0YWluUHRy
PE5TTXV0YWJsZUFycmF5PiB3ZWJPcHRpb25zID0gbWVkaWFTZWxlY3Rpb25PcHRpb25zKG9wdGlv
bnMpOworICAgIFtzZWxmIHNldExlZ2libGVGdW5jdGlvbkJhck1lZGlhU2VsZWN0aW9uT3B0aW9u
czp3ZWJPcHRpb25zLmdldCgpXTsKKyAgICBpZiAoc2VsZWN0ZWRJbmRleCA8IFt3ZWJPcHRpb25z
IGNvdW50XSkKKyAgICAgICAgW3NlbGYgc2V0Q3VycmVudExlZ2libGVGdW5jdGlvbkJhck1lZGlh
U2VsZWN0aW9uT3B0aW9uOlt3ZWJPcHRpb25zIG9iamVjdEF0SW5kZXg6c2VsZWN0ZWRJbmRleF1d
OwogfQogCistIChXZWJDb3JlOjpXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMqKXdlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYworeworICAgIHJldHVybiBfd2ViUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlTWFjLmdldCgpOworfQorCistICh2b2lkKXNldFdlYlBsYXliYWNrU2Vzc2lv
bkludGVyZmFjZU1hYzooV2ViQ29yZTo6V2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKil3
ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMKK3sKKyAgICBpZiAoX3dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYyA9PSB3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKQor
ICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT5zZXRQbGF5QmFja0NvbnRy
b2xzTWFuYWdlcihudWxscHRyKTsKKworICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMgPSB3ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM7CisKKyAgICBpZiAoX3dlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYykKKyAgICAgICAgX3dlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYy0+c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoc2VsZik7Cit9CisKKy0gKHZvaWQp
dG9nZ2xlUGxheWJhY2sKK3sKKyAgICBpZiAoX3dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1h
YyAmJiBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5YmFja1Nlc3Npb25N
b2RlbCgpKQorICAgICAgICBfd2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLT53ZWJQbGF5
YmFja1Nlc3Npb25Nb2RlbCgpLT50b2dnbGVQbGF5U3RhdGUoKTsKK30KKworLSAodm9pZClzZXRQ
bGF5aW5nOihCT09MKXBsYXlpbmcKK3sKKyAgICBpZiAoIV93ZWJQbGF5YmFja1Nlc3Npb25JbnRl
cmZhY2VNYWMgfHwgIV93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJPT0wgaXNDdXJyZW50bHlQ
bGF5aW5nID0gc2VsZi5wbGF5aW5nOworICAgIGlmICghaXNDdXJyZW50bHlQbGF5aW5nICYmIHBs
YXlpbmcpCisgICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXli
YWNrU2Vzc2lvbk1vZGVsKCktPnBsYXkoKTsKKyAgICBlbHNlIGlmIChpc0N1cnJlbnRseVBsYXlp
bmcgJiYgIXBsYXlpbmcpCisgICAgICAgIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMt
PndlYlBsYXliYWNrU2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7Cit9CisKKy0gKEJPT0wpaXNQbGF5
aW5nCit7CisgICAgaWYgKF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMgJiYgX3dlYlBs
YXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy0+d2ViUGxheWJhY2tTZXNzaW9uTW9kZWwoKSkKKyAg
ICAgICAgcmV0dXJuIF93ZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWMtPndlYlBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPmlzUGxheWluZygpOworCisgICAgcmV0dXJuIE5POworfQorCisjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisKIEBlbmQKLSNlbmRpZiAvLyBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKSAmJiBFTkFCTEUoV0VCX1BMQVlCQUNLX0NPTlRST0xTX01BTkFHRVIpCiAKLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkK
KyNlbmRpZiAvLyBQTEFURk9STShNQUMpICYmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9E
RSkgJiYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZU1hYy5oCShyZXZpc2lvbiAyMDg3NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDE3ICs2MiwyMiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBs
ZWdpYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zQ2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5nPiYg
LypvcHRpb25zKi8sIHVpbnQ2NF90IC8qc2VsZWN0ZWRJbmRleCovKSBmaW5hbDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGludmFsaWRhdGUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVu
c3VyZUNvbnRyb2xzTWFuYWdlcigpOworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNf
TUFOQUdFUikKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBsYXlCYWNrQ29udHJvbHNNYW5h
Z2VyKFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICopOworICAgIFdFQkNPUkVfRVhQT1JUIFdl
YlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICpwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOworI2Vu
ZGlmCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblNjcnViYmluZygpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgZW5kU2NydWJiaW5nKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgV2ViUGxh
eWJhY2tDb250cm9sc01hbmFnZXIgKnBsYXlCYWNrQ29udHJvbHNNYW5hZ2VyKCk7CiAKIHByaXZh
dGU6CiAgICAgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjKFdlYlBsYXliYWNrU2Vzc2lv
bk1vZGVsJik7CiAgICAgV2ViUGxheWJhY2tTZXNzaW9uTW9kZWwqIG1fcGxheWJhY2tTZXNzaW9u
TW9kZWwgeyBudWxscHRyIH07CisjaWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5B
R0VSKQogICAgIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyICptX3BsYXliYWNrQ29udHJvbHNN
YW5hZ2VyICB7IG51bGxwdHIgfTsKIAogICAgIHZvaWQgdXBkYXRlUGxheWJhY2tDb250cm9sc01h
bmFnZXJUaW1pbmcoZG91YmxlIGN1cnJlbnRUaW1lLCBkb3VibGUgYW5jaG9yVGltZSwgZG91Ymxl
IHBsYXliYWNrUmF0ZSwgYm9vbCBpc1BsYXlpbmcpOworI2VuZGlmCisKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXli
YWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbQkocmV2aXNpb24gMjA4NzQ2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VN
YWM6On5XZWJQbGF5CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpkdXJh
dGlvbkNoYW5nZWQoZG91YmxlIGR1cmF0aW9uKQogeworI2lmIEVOQUJMRShXRUJfUExBWUJBQ0tf
Q09OVFJPTFNfTUFOQUdFUikKICAgICBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlciogY29udHJv
bHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsKIAogICAgIGNvbnRyb2xzTWFu
YWdlci5jb250ZW50RHVyYXRpb24gPSBkdXJhdGlvbjsKQEAgLTcxLDIwICs3MiwyNSBAQCB2b2lk
IFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6ZHVyCiAgICAgLy8gRklYTUU6IFdlIHRh
a2UgdGhpcyBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgcGxheWJhY2sgaXMgcmVhZHksIGJ1dCB0aGF0
IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlLgogICAgIGNvbnRyb2xzTWFuYWdlci5oYXNFbmFibGVk
QXVkaW8gPSBZRVM7CiAgICAgY29udHJvbHNNYW5hZ2VyLmhhc0VuYWJsZWRWaWRlbyA9IFlFUzsK
KyNlbmRpZgogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYzo6Y3VycmVu
dFRpbWVDaGFuZ2VkKGRvdWJsZSBjdXJyZW50VGltZSwgZG91YmxlIGFuY2hvclRpbWUpCiB7Cisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQogICAgIFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyKiBjb250cm9sc01hbmFnZXIgPSBwbGF5QmFja0NvbnRyb2xzTWFuYWdl
cigpOwogICAgIHVwZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKGN1cnJlbnRUaW1l
LCBhbmNob3JUaW1lLCBjb250cm9sc01hbmFnZXIucmF0ZSwgY29udHJvbHNNYW5hZ2VyLnBsYXlp
bmcpOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpy
YXRlQ2hhbmdlZChib29sIGlzUGxheWluZywgZmxvYXQgcGxheWJhY2tSYXRlKQogeworI2lmIEVO
QUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKICAgICBXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlciogY29udHJvbHNNYW5hZ2VyID0gcGxheUJhY2tDb250cm9sc01hbmFnZXIoKTsK
ICAgICBbY29udHJvbHNNYW5hZ2VyIHNldFJhdGU6aXNQbGF5aW5nID8gcGxheWJhY2tSYXRlIDog
MC5dOwogICAgIFtjb250cm9sc01hbmFnZXIgc2V0UGxheWluZzppc1BsYXlpbmddOwogICAgIHVw
ZGF0ZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVGltaW5nKG1fcGxheWJhY2tTZXNzaW9uTW9kZWwg
PyBtX3BsYXliYWNrU2Vzc2lvbk1vZGVsLT5jdXJyZW50VGltZSgpIDogMCwgW1tOU1Byb2Nlc3NJ
bmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdLCBwbGF5YmFja1JhdGUsIGlzUGxheWluZyk7
CisjZW5kaWYKIH0KIAogdm9pZCBXZWJQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VNYWM6OmJlZ2lu
U2NydWJiaW5nKCkKQEAgLTE0MCwxMyArMTQ2LDExIEBAIHZvaWQgV2ViUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlTWFjOjplbnMKICAgICBwbGF5QmFja0NvbnRyb2xzTWFuYWdlcigpOwogfQogCisj
aWYgRU5BQkxFKFdFQl9QTEFZQkFDS19DT05UUk9MU19NQU5BR0VSKQorCiBXZWJQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlciAqV2ViUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTWFjOjpwbGF5QmFja0Nv
bnRyb2xzTWFuYWdlcigpCiB7Ci0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDEyMDAKICAgICByZXR1cm4gbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlcjsKLSNlbHNlCi0g
ICAgcmV0dXJuIG5pbDsKLSNlbmRpZgogfQogCiB2b2lkIFdlYlBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZU1hYzo6c2V0UGxheUJhY2tDb250cm9sc01hbmFnZXIoV2ViUGxheWJhY2tDb250cm9sc01h
bmFnZXIgKm1hbmFnZXIpCkBAIC0xOTEsNiArMTk1LDggQEAgdm9pZCBXZWJQbGF5YmFja1Nlc3Np
b25JbnRlcmZhY2VNYWM6OnVwZAogICAgIG1hbmFnZXIudGltaW5nID0gW2dldEFWVmFsdWVUaW1p
bmdDbGFzcygpIHZhbHVlVGltaW5nV2l0aEFuY2hvclZhbHVlOmN1cnJlbnRUaW1lIGFuY2hvclRp
bWVTdGFtcDplZmZlY3RpdmVBbmNob3JUaW1lIHJhdGU6ZWZmZWN0aXZlUGxheWJhY2tSYXRlXTsK
IH0KIAorI2VuZGlmIC8vIEVOQUJMRShXRUJfUExBWUJBQ0tfQ09OVFJPTFNfTUFOQUdFUikKKwog
fQogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSAmJiBFTkFCTEUoVklERU9fUFJFU0VOVEFUSU9O
X01PREUpCg==
</data>
<flag name="review"
          id="317530"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>