<?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>124599</bug_id>
          
          <creation_ts>2013-11-19 12:42:07 -0800</creation_ts>
          <short_desc>[Mac] 10X slower than Chrome when drawing a video into a canvas</short_desc>
          <delta_ts>2014-02-15 10:43:32 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>aloisio.almeida</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>philn</cc>
    
    <cc>thiago.lacerda</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>952189</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-19 12:42:07 -0800</bug_when>
    <thetext>[Mac] 10X slower than Chrome when drawing a video into a canvas</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952194</commentid>
    <comment_count>1</comment_count>
      <attachid>217320</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-19 12:51:37 -0800</bug_when>
    <thetext>Created attachment 217320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952200</commentid>
    <comment_count>2</comment_count>
      <attachid>217322</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-19 13:04:40 -0800</bug_when>
    <thetext>Created attachment 217322
Patch

Fix the GTK bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952202</commentid>
    <comment_count>3</comment_count>
      <attachid>217322</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2013-11-19 13:08:51 -0800</bug_when>
    <thetext>Comment on attachment 217322
Patch

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

&gt; Source/WebCore/html/HTMLVideoElement.h:74
&gt;  
&gt; +
&gt; +
&gt;      bool shouldDisplayPosterImage() const { return displayMode() == Poster || displayMode() == PosterWaitingForVideo; }

Why so spacey?

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1351
&gt; +    // pixelBuffer will be of type kCVPixelFormatType_32BGRA

Nit: Ending .

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1360
&gt; +    CFRetain(pixelBuffer); // Balanced by CVPixelBufferReleaseInfoCallback in providerCallbacks

Ditto.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1412
&gt; +    // Wait for 1 second

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952210</commentid>
    <comment_count>4</comment_count>
      <attachid>217325</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-19 13:32:11 -0800</bug_when>
    <thetext>Created attachment 217325
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952211</commentid>
    <comment_count>5</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-19 13:34:50 -0800</bug_when>
    <thetext>Committed r159518: &lt;http://trac.webkit.org/changeset/159518&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952218</commentid>
    <comment_count>6</comment_count>
      <attachid>217325</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-11-19 13:43:24 -0800</bug_when>
    <thetext>Comment on attachment 217325
Patch

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

&gt; Source/WebCore/html/HTMLVideoElement.cpp:274
&gt; +        return 0;

nullptr

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:1454
&gt; +    if (PassNativeImagePtr image = video-&gt;nativeImageForCurrentTime()) {

Shouldn’t this be NativeImagePtr, not PassnNativeImagePtr?

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:1457
&gt; +        if (rectContainsCanvas(dstRect))
&gt; +            didDrawEntireCanvas();

Why is this needed? Shouldn’t didDraw do this check?

&gt; Source/WebCore/platform/graphics/MediaPlayerPrivate.h:124
&gt; +    virtual PassNativeImagePtr nativeImageForCurrentTime() { return 0; }

nullptr

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:200
&gt; +    MediaPlayerPrivateAVFoundationObjC* m_callback;
&gt; +    dispatch_semaphore_t m_semaphore;

Missing space before “*” here. Strange to use the m_member syntax in an Objective-C class.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:202
&gt; +- (id)initWithCallback:(MediaPlayerPrivateAVFoundationObjC*)callback;

Missing space before “*” here.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:270
&gt; +    , m_videoOutputDelegate(adoptNS([[WebCoreAVFPullDelegate alloc] initWithCallback:this]))

I believe we need to clear out the callback pointer when this is deleted, in case someone has retained the delegate. Maybe in dealloc.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:271
&gt; +    , m_videoOutputSemaphore(0)

nullptr

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1332
&gt; +    CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)info;

static_cast

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1337
&gt; +static void CVPixelBufferReleaseBytePointerCallback(void *info, const void *)

Misplaced “*” here.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1339
&gt; +    CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)info;

static_cast

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1345
&gt; +    CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)info;

static_cast

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1378
&gt; +void MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput(GraphicsContext* context, const IntRect&amp; rect)

Should be GraphicsContext&amp; on any new function.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1408
&gt; +        m_videoOutputSemaphore = dispatch_semaphore_create(0);

nullptr ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952227</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-19 14:02:11 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 217325 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=217325&amp;action=review

Darin, I didn&apos;t see your review before landing this patch.  I&apos;ll address these in  a follow up.

&gt; &gt; Source/WebCore/html/HTMLVideoElement.cpp:274
&gt; &gt; +        return 0;
&gt; 
&gt; nullptr

Changed.

&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:1454
&gt; &gt; +    if (PassNativeImagePtr image = video-&gt;nativeImageForCurrentTime()) {
&gt; 
&gt; Shouldn’t this be NativeImagePtr, not PassnNativeImagePtr?

For CG, these are identical, but I&apos;ll change the local variable to a NativeImagePtr.

&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:1457
&gt; &gt; +        if (rectContainsCanvas(dstRect))
&gt; &gt; +            didDrawEntireCanvas();
&gt; 
&gt; Why is this needed?

didDrawEntireCanvas() clips the sourceRect to the canvas&apos;s, then calls didDraw().

&gt; Shouldn’t didDraw do this check?

Perhaps, but from the other places where didDrawEntireCanvas() is called, there are some optimizations which would be lost.

&gt; &gt; Source/WebCore/platform/graphics/MediaPlayerPrivate.h:124
&gt; &gt; +    virtual PassNativeImagePtr nativeImageForCurrentTime() { return 0; }
&gt; 
&gt; nullptr

Changed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:200
&gt; &gt; +    MediaPlayerPrivateAVFoundationObjC* m_callback;
&gt; &gt; +    dispatch_semaphore_t m_semaphore;
&gt; 
&gt; Missing space before “*” here.

Added.

&gt; Strange to use the m_member syntax in an Objective-C class.

Agreed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:202
&gt; &gt; +- (id)initWithCallback:(MediaPlayerPrivateAVFoundationObjC*)callback;
&gt; 
&gt; Missing space before “*” here.

Added. 

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:270
&gt; &gt; +    , m_videoOutputDelegate(adoptNS([[WebCoreAVFPullDelegate alloc] initWithCallback:this]))
&gt; 
&gt; I believe we need to clear out the callback pointer when this is deleted, in case someone has retained the delegate. Maybe in dealloc.

Added.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:271
&gt; &gt; +    , m_videoOutputSemaphore(0)
&gt; 
&gt; nullptr

Changed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1332
&gt; &gt; +    CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)info;
&gt; 
&gt; static_cast

Changed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1337
&gt; &gt; +static void CVPixelBufferReleaseBytePointerCallback(void *info, const void *)
&gt; 
&gt; Misplaced “*” here.

Moved.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1339
&gt; &gt; +    CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)info;
&gt; 
&gt; static_cast

Changed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1345
&gt; &gt; +    CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)info;
&gt; 
&gt; static_cast

Changed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1378
&gt; &gt; +void MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput(GraphicsContext* context, const IntRect&amp; rect)
&gt; 
&gt; Should be GraphicsContext&amp; on any new function.

This is an old function; the diff just got confused.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:1408
&gt; &gt; +        m_videoOutputSemaphore = dispatch_semaphore_create(0);
&gt; 
&gt; nullptr ?

No, this is a count.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952258</commentid>
    <comment_count>8</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-19 15:12:13 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952259</commentid>
    <comment_count>9</comment_count>
      <attachid>217339</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2013-11-19 15:12:16 -0800</bug_when>
    <thetext>Created attachment 217339
Follow up patch to address Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952527</commentid>
    <comment_count>10</comment_count>
      <attachid>217325</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2013-11-20 03:25:23 -0800</bug_when>
    <thetext>Comment on attachment 217325
Patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:247
&gt; +        globalQueue = dispatch_queue_create(&quot;WebCoreAVFPullDelegate queue&quot;, DISPATCH_QUEUE_SERIAL);

Dispatch queue names are conventionally reverse-DNS. This should be something like com.apple.WebCore.AVFPullDelegate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953422</commentid>
    <comment_count>11</comment_count>
      <attachid>217339</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-11-21 20:03:09 -0800</bug_when>
    <thetext>Comment on attachment 217339
Follow up patch to address Darin&apos;s comments

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

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:203
&gt; +- (void)setCallback:(MediaPlayerPrivateAVFoundationObjC*)callback;

Funny that you added this without a &quot;*&quot;. I also think we probably could just have a clearCallback method instead of one that takes a pointer.

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:302
&gt; +    [m_videoOutputDelegate setCallback:0];

nullptr

&gt; Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:303
&gt; +    [m_videoOutput setDelegate:nil queue:0];

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981121</commentid>
    <comment_count>12</comment_count>
      <attachid>217339</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-15 00:18:49 -0800</bug_when>
    <thetext>Comment on attachment 217339
Follow up patch to address Darin&apos;s comments

Clearing flags on attachment: 217339

Committed r164160: &lt;http://trac.webkit.org/changeset/164160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981122</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-15 00:18:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981185</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-15 10:43:32 -0800</bug_when>
    <thetext>&lt;rdar://problem/15382272&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217320</attachid>
            <date>2013-11-19 12:51:37 -0800</date>
            <delta_ts>2013-11-19 13:04:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124599-20131119125137.patch</filename>
            <type>text/plain</type>
            <size>20209</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzgzMWYwYTQ4ZjIyZTc3
YmE3MzAyNjUyZGMzYzU1MTlmOGJjZGFjOC4uZTc5ZWI5OGYzN2IxZmNiZjcxMjhhYTU0MWJlNzA4
ZDQyMDM5ZjIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTExLTE5ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIDEwWCBzbG93ZXIg
dGhhbiBDaHJvbWUgd2hlbiBkcmF3aW5nIGEgdmlkZW8gaW50byBhIGNhbnZhcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NTk5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wcm92ZSBwZXJmb3JtYW5j
ZSBieSBjcmVhdGluZyBhIENHSW1hZ2VSZWYgd2hpY2ggZGlyZWN0bHkgcmVmZXJlbmNlcyB0aGUg
Q1ZQaXhlbEJ1ZmZlciBwcm92aWRlZAorICAgICAgICBieSBBVlBsYXllckl0ZW1WaWRlb091dHB1
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkNWUGl4ZWxCdWZmZXJHZXRCeXRlUG9pbnRlckNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNWUGl4ZWxCdWZmZXJSZWxlYXNlQnl0ZVBvaW50ZXJDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDVlBpeGVsQnVmZmVyUmVsZWFzZUluZm9DYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbWFnZUZyb21QaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVM
YXN0SW1hZ2UpOgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgd2hlbiBhc2tlZCB0byBwYWludCB3
aXRoIGFuIEFWUGxheWVySXRlbVZpZGVvT3V0cHV0LCBibG9jayB1bnRpbCB0aGUgb3V0cHV0IG5v
dGlmaWVzCisgICAgICAgIGl0cyBkZWxlZ2F0ZSB0aGF0IGEgcGl4ZWwgYnVmZmVyIGlzIGF2YWls
YWJsZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFB1bGxEZWxlZ2F0ZVF1ZXVlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlVmlkZW9PdXRwdXQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRoVmlk
ZW9PdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3YWl0Rm9yVmlkZW9PdXRwdXRNZWRp
YURhdGFXaWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6Om91dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2UpOgorICAgICAgICAoLVtX
ZWJDb3JlQVZGUHVsbERlbGVnYXRlIGluaXRXaXRoQ2FsbGJhY2s6XSk6CisgICAgICAgICgtW1dl
YkNvcmVBVkZQdWxsRGVsZWdhdGUgb3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZTpdKToKKyAgICAg
ICAgKC1bV2ViQ29yZUFWRlB1bGxEZWxlZ2F0ZSBvdXRwdXRTZXF1ZW5jZVdhc0ZsdXNoZWQ6XSk6
CisgICAgICAgIAorICAgICAgICBUbyBmdXJ0aGVyIG9wdGltaXplIHZpZGVvIC0+IGNhbnZhcyBk
cmF3aW5nLCBhZGQgYSBtZXRob2Qgd2hpY2ggY2FuIHJldHVybiBhIFBhc3NOYXRpdmVJbWFnZSB0
byBiZQorICAgICAgICBkcmF3biBkaXJlY3RseSBvbnRvIHRoZSBjYW52YXMsIHJhdGhlciB0aGFu
IHJlbmRlcmluZyBpbnRvIGFuIGludGVybWVkaWFyeSBjb250ZXh0OgorICAgICAgICAqIGh0bWwv
SFRNTFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKToKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKToKKwog
MjAxMy0xMS0xOSAgRnLDqWTDqXJpYyBXYW5nICA8ZnJlZC53YW5nQGZyZWUuZnI+CiAKICAgICAg
ICAgTWFwIHRoZSBkaXIgYXR0cmlidXRlIHRvIHRoZSBDU1MgZGlyZWN0aW9uIHByb3BlcnR5Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5kZXggMDkzMTViNGI0MDM4
ZWQzM2M1OGVjMGI0NzA0ZGQ3YTlhNWYzOWFlOS4uY2E3MjE1MDQwNTMwMTBhNTBlZjk2NzY0YTQz
N2QwOWQxMDAyNzI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3Bw
CkBAIC0yNjgsNiArMjY4LDE0IEBAIGJvb2wgSFRNTFZpZGVvRWxlbWVudDo6aGFzQXZhaWxhYmxl
VmlkZW9GcmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXllcigpLT5oYXNWaWRlbygpICYmIHBs
YXllcigpLT5oYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCk7CiB9CiAKK1Bhc3NOYXRpdmVJbWFnZVB0
ciBIVE1MVmlkZW9FbGVtZW50OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkKK3sKKyAgICBp
ZiAoIXBsYXllcigpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwbGF5ZXIoKS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpOworfQorCiB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6
OndlYmtpdEVudGVyRnVsbHNjcmVlbihFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoaXNG
dWxsc2NyZWVuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCmluZGV4IGVm
NTdmMWQ4M2QxYzhjMmMyMmI1OTQ3ZTNkZDQ2N2U3ODk3ZmU5YTMuLmUyMjEwZDQyODQ2M2FiMDk3
OTc4ZWZlZDU4Y2E5MGRmMmI4NGMwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5oCkBAIC02MywxMCArNjMsMTQgQEAgcHVibGljOgogICAgIC8vIFVzZWQgYnkgY2FudmFz
IHRvIGdhaW4gcmF3IHBpeGVsIGFjY2VzcwogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCisgICAgUGFzc05hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKTsKKwogICAgIC8vIFVzZWQgYnkg
V2ViR0wgdG8gZG8gR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IGlmIHBvc3NpYmxlLgogICAgIC8vIFNl
ZSBtb3JlIGRldGFpbHMgYXQgTWVkaWFQbGF5ZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3Jt
VGV4dHVyZSgpIGRlZmluZWQgaW4gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaC4KICAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gdHlwZSwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBmbGlwWSk7CiAKKworCiAgICAgYm9vbCBzaG91bGREaXNwbGF5UG9zdGVy
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBkaXNwbGF5TW9kZSgpID09IFBvc3RlciB8fCBkaXNwbGF5
TW9kZSgpID09IFBvc3RlcldhaXRpbmdGb3JWaWRlbzsgfQogCiAgICAgVVJMIHBvc3RlckltYWdl
VVJMKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA1YmE3OGEwYmVjN2M5OWQ3MjJkMDFhZmUw
YmMxY2UwMjY5YTQyNWE4Li5mZjlhMDNjMmY5MDFjMGRiZWYyMjQyZjFkNjIwNzQxY2ZkZjBiNDYw
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKQEAgLTE0NTAsNiArMTQ1MCwxNiBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBjb25zdCBG
bG9hdFJlYwogCiAgICAgY2hlY2tPcmlnaW4odmlkZW8pOwogCisgICAgaWYgKFBhc3NOYXRpdmVJ
bWFnZVB0ciBpbWFnZSA9IHZpZGVvLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkpIHsKKyAg
ICAgICAgYy0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLCBGbG9hdFNpemUodmlkZW8tPnZpZGVvV2lk
dGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3RSZWN0
LCBzcmNSZWN0KTsKKyAgICAgICAgaWYgKHJlY3RDb250YWluc0NhbnZhcyhkc3RSZWN0KSkKKyAg
ICAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZGlkRHJhdyhkc3RSZWN0KTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjKTsKICAgICBjLT5jbGlwKGRzdFJl
Y3QpOwogICAgIGMtPnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCmluZGV4IGM0
OGZiOGFjMGYwZDQwNGEyNWQ0MmI3ZWQyM2EwMTJiNTM1ZmQ1OTguLjZhODhlNDNmMWMyNDU3ZDdk
YWIzMDM0ODhkOTg3Zjg1NTY2M2I0MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTc1MSw2ICs3NTEsMTEgQEAgYm9vbCBNZWRp
YVBsYXllcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LAogICAgIHJldHVybiBtX3ByaXZhdGUtPmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlLCBsZXZlbCwgdHlwZSwgaW50ZXJuYWxGb3Jt
YXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKIH0KIAorUGFzc05hdGl2ZUltYWdlUHRyIE1l
ZGlhUGxheWVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCk7Cit9CisKIE1lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1
cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBNZWRpYVBsYXllclN1cHBvcnRzVHlw
ZUNsaWVudCogY2xpZW50KQogewogICAgIC8vIDQuOC4xMC4zIE1JTUUgdHlwZXMgLSBUaGUgY2Fu
UGxheVR5cGUodHlwZSkgbWV0aG9kIG11c3QgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdHlw
ZSBpcyBhIHR5cGUgdGhhdCB0aGUgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuaAppbmRleCBmNjNlZWIxZDE5MDNmMjg1Yzg4NWEwMmI1Y2MxYTVlNDYx
MWUxOTgyLi4yYTY5NmYyM2ZjNmZhMmU4NGFjMzlkNzc0YmVjNmUwNWI4NGVjYmNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZS5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvVWludDhBcnJheS5oPgpAQCAtMzc2LDYgKzM3Nyw4IEBAIHB1YmxpYzoKICAgICAvLyBodHRw
Oi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3RydW5rL3NyYy9ncHUvY29tbWFuZF9i
dWZmZXIvc2VydmljZS9nbGVzMl9jbWRfY29weV90ZXh0dXJlX2Nocm9taXVtLmNjIHZpYSBzaGFk
ZXJzLgogICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSB0eXBlLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sIGZsaXBZKTsKIAorICAgIFBhc3NOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1
cnJlbnRUaW1lKCk7CisKICAgICBlbnVtIE5ldHdvcmtTdGF0ZSB7IEVtcHR5LCBJZGxlLCBMb2Fk
aW5nLCBMb2FkZWQsIEZvcm1hdEVycm9yLCBOZXR3b3JrRXJyb3IsIERlY29kZUVycm9yIH07CiAg
ICAgTmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCmluZGV4IDRmOThiNTYx
YmFhMWQyNTM1ZTZiNmI2NWIxY2FmMjI3M2UzMTU4MGIuLjNkMzFhNDUwNDJmOWJkNzU3NTZjOGVh
OTk0ZTkyMGFkYTRiMjZiNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCkBAIC0xMjEsNiArMTIxLDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNz
Q29udGV4dCogYywgY29uc3QgSW50UmVjdCYgcikgeyBwYWludChjLCByKTsgfQogICAgIHZpcnR1
YWwgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0sIGJvb2ws
IGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBQYXNzTmF0aXZlSW1hZ2VQdHIg
bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkKSB7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQy5oCmluZGV4IGY1YTc4YzhmNzNlZWM0YzU3ZGRkOWM2YzU5MTlhMDcwOWU2NWJhNWYuLjE1
NjI5NDRlZDZjM2Q3OTE1NTgxOWRiNTJmMjMxNjJmNGMwNDY4NTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDLmgKQEAgLTQzLDYgKzQzLDcgQEAgT0JKQ19DTEFTUyBBVlBsYXllckxheWVyOwogT0JKQ19D
TEFTUyBBVlVSTEFzc2V0OwogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBXZWJDb3Jl
QVZGTW92aWVPYnNlcnZlcjsKK09CSkNfQ0xBU1MgV2ViQ29yZUFWRlB1bGxEZWxlZ2F0ZTsKIAog
dHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QqIGlkOwogCkBAIC0xMDYsNiArMTA3LDEwIEBAIHB1
YmxpYzoKICAgICB2b2lkIGR1cmF0aW9uRGlkQ2hhbmdlKGRvdWJsZSk7CiAgICAgdm9pZCByYXRl
RGlkQ2hhbmdlKGRvdWJsZSk7CiAKKyNpZiBIQVZFKEFWRk9VTkRBVElPTl9WSURFT19PVVRQVVQp
CisgICAgdm9pZCBvdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKEFWUGxheWVySXRlbVZpZGVvT3V0
cHV0Kik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDKE1lZGlhUGxheWVyKik7CiAKQEAgLTE3Niw4ICsxODEsMTEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNyZWF0ZVZpZGVvT3V0cHV0KCk7CiAgICAgdm9pZCBkZXN0cm95VmlkZW9PdXRw
dXQoKTsKICAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gY3JlYXRlUGl4ZWxCdWZmZXIo
KTsKKyAgICB2b2lkIHVwZGF0ZUxhc3RJbWFnZSgpOwogICAgIGJvb2wgdmlkZW9PdXRwdXRIYXNB
dmFpbGFibGVGcmFtZSgpOwogICAgIHZvaWQgcGFpbnRXaXRoVmlkZW9PdXRwdXQoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgUGFzc05hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKSBPVkVSUklERTsKKyAgICB2b2lkIHdhaXRGb3JW
aWRlb091dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2UoKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQSkKQEAgLTIxOCw3ICsyMjYsOSBAQCBwcml2YXRlOgogICAgIFJldGFpblB0
cjxBVkFzc2V0SW1hZ2VHZW5lcmF0b3I+IG1faW1hZ2VHZW5lcmF0b3I7CiAjaWYgSEFWRShBVkZP
VU5EQVRJT05fVklERU9fT1VUUFVUKQogICAgIFJldGFpblB0cjxBVlBsYXllckl0ZW1WaWRlb091
dHB1dD4gbV92aWRlb091dHB1dDsKLSAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9s
YXN0SW1hZ2U7CisgICAgUmV0YWluUHRyPFdlYkNvcmVBVkZQdWxsRGVsZWdhdGU+IG1fdmlkZW9P
dXRwdXREZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gbV9sYXN0SW1hZ2U7Cisg
ICAgZGlzcGF0Y2hfc2VtYXBob3JlX3QgbV92aWRlb091dHB1dFNlbWFwaG9yZTsKICNlbmRpZgog
CiAjaWYgVVNFKFZJREVPVE9PTEJPWCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCmluZGV4IDFkYmJi
M2E0NzcyM2FlNDE0MmI5ODBlNjkwYzdmOTE2NjIwYWM1MTAuLmY0OTA5YTJhYjI1M2Y4MTYxMjM4
NzJmOWE5ZDFmMDYwMjQ5MWUzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQpAQCAtMTE1LDcg
KzExNSw2IEBAIFNPRlRfTElOS19DT05TVEFOVChDb3JlTWVkaWEsIGtDTVRpbWVaZXJvLCBDTVRp
bWUpCiAKICNkZWZpbmUgQVZQbGF5ZXIgZ2V0QVZQbGF5ZXJDbGFzcygpCiAjZGVmaW5lIEFWUGxh
eWVySXRlbSBnZXRBVlBsYXllckl0ZW1DbGFzcygpCi0jZGVmaW5lIEFWUGxheWVySXRlbVZpZGVv
T3V0cHV0IGdldEFWUGxheWVySXRlbVZpZGVvT3V0cHV0Q2xhc3MoKQogI2RlZmluZSBBVlBsYXll
ckxheWVyIGdldEFWUGxheWVyTGF5ZXJDbGFzcygpCiAjZGVmaW5lIEFWVVJMQXNzZXQgZ2V0QVZV
UkxBc3NldENsYXNzKCkKICNkZWZpbmUgQVZBc3NldEltYWdlR2VuZXJhdG9yIGdldEFWQXNzZXRJ
bWFnZUdlbmVyYXRvckNsYXNzKCkKQEAgLTE5NSw2ICsxOTQsMTcgQEAgZW51bSBNZWRpYVBsYXll
ckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dCB7CiBAZW5kCiAjZW5kaWYKIAorI2lmIEhB
VkUoQVZGT1VOREFUSU9OX1ZJREVPX09VVFBVVCkKK0BpbnRlcmZhY2UgV2ViQ29yZUFWRlB1bGxE
ZWxlZ2F0ZSA6IE5TT2JqZWN0PEFWUGxheWVySXRlbU91dHB1dFB1bGxEZWxlZ2F0ZT4geworICAg
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMqIG1fY2FsbGJhY2s7CisgICAgZGlz
cGF0Y2hfc2VtYXBob3JlX3QgbV9zZW1hcGhvcmU7Cit9CistIChpZClpbml0V2l0aENhbGxiYWNr
OihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDKiljYWxsYmFjazsKKy0gKHZvaWQp
b3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZTooQVZQbGF5ZXJJdGVtT3V0cHV0ICopc2VuZGVyOwor
LSAodm9pZClvdXRwdXRTZXF1ZW5jZVdhc0ZsdXNoZWQ6KEFWUGxheWVySXRlbU91dHB1dCAqKW91
dHB1dDsKK0BlbmQKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBOU0Fy
cmF5ICphc3NldE1ldGFkYXRhS2V5TmFtZXMoKTsKQEAgLTIyOCw2ICsyMzgsMTggQEAgc3RhdGlj
IGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFsTG9hZGVyRGVsZWdhdGVRdWV1ZSgpCiB9CiAjZW5kaWYK
IAorI2lmIEhBVkUoQVZGT1VOREFUSU9OX1ZJREVPX09VVFBVVCkKK3N0YXRpYyBkaXNwYXRjaF9x
dWV1ZV90IGdsb2JhbFB1bGxEZWxlZ2F0ZVF1ZXVlKCkKK3sKKyAgICBzdGF0aWMgZGlzcGF0Y2hf
cXVldWVfdCBnbG9iYWxRdWV1ZTsKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tl
bjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGdsb2JhbFF1ZXVl
ID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJDb3JlQVZGUHVsbERlbGVnYXRlIHF1ZXVlIiwg
RElTUEFUQ0hfUVVFVUVfU0VSSUFMKTsKKyAgICB9KTsKKyAgICByZXR1cm4gZ2xvYmFsUXVldWU7
Cit9CisjZW5kaWYKKwogUGFzc093blB0cjxNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U+IE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZShNZWRpYVBsYXllciogcGxh
eWVyKQogeyAKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMocGxheWVyKSk7CkBAIC0yNDQsNiArMjY2LDEwIEBAIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMo
TWVkaWFQbGF5CiAgICAgLCBtX29iamNPYnNlcnZlcihhZG9wdE5TKFtbV2ViQ29yZUFWRk1vdmll
T2JzZXJ2ZXIgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhpc10pKQogICAgICwgbV92aWRlb0Zy
YW1lSGFzRHJhd24oZmFsc2UpCiAgICAgLCBtX2hhdmVDaGVja2VkUGxheWFiaWxpdHkoZmFsc2Up
CisjaWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9fT1VUUFVUKQorICAgICwgbV92aWRlb091dHB1
dERlbGVnYXRlKGFkb3B0TlMoW1tXZWJDb3JlQVZGUHVsbERlbGVnYXRlIGFsbG9jXSBpbml0V2l0
aENhbGxiYWNrOnRoaXNdKSkKKyAgICAsIG1fdmlkZW9PdXRwdXRTZW1hcGhvcmUoMCkKKyNlbmRp
ZgogI2lmIEhBVkUoQVZGT1VOREFUSU9OX0xPQURFUl9ERUxFR0FURSkKICAgICAsIG1fbG9hZGVy
RGVsZWdhdGUoYWRvcHROUyhbW1dlYkNvcmVBVkZMb2FkZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdp
dGhDYWxsYmFjazp0aGlzXSkpCiAjZW5kaWYKQEAgLTEyMjIsMTEgKzEyNDgsMTUgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVhdGVWaWRlb091dHB1dCgpCiAg
ICAgTlNEaWN0aW9uYXJ5KiBhdHRyaWJ1dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6a0NWUGl4ZWxG
b3JtYXRUeXBlXzMyQkdSQV0sIGtDVlBpeGVsQnVmZmVyUGl4ZWxGb3JtYXRUeXBlS2V5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWxdOwogI2VuZGlmCi0gICAgbV92aWRlb091
dHB1dCA9IGFkb3B0TlMoW1tBVlBsYXllckl0ZW1WaWRlb091dHB1dCBhbGxvY10gaW5pdFdpdGhQ
aXhlbEJ1ZmZlckF0dHJpYnV0ZXM6YXR0cmlidXRlc10pOworICAgIG1fdmlkZW9PdXRwdXQgPSBh
ZG9wdE5TKFtbZ2V0QVZQbGF5ZXJJdGVtVmlkZW9PdXRwdXRDbGFzcygpIGFsbG9jXSBpbml0V2l0
aFBpeGVsQnVmZmVyQXR0cmlidXRlczphdHRyaWJ1dGVzXSk7CiAgICAgQVNTRVJUKG1fdmlkZW9P
dXRwdXQpOwogCisgICAgW21fdmlkZW9PdXRwdXQgc2V0RGVsZWdhdGU6bV92aWRlb091dHB1dERl
bGVnYXRlLmdldCgpIHF1ZXVlOmdsb2JhbFB1bGxEZWxlZ2F0ZVF1ZXVlKCldOworCiAgICAgW21f
YXZQbGF5ZXJJdGVtLmdldCgpIGFkZE91dHB1dDptX3ZpZGVvT3V0cHV0LmdldCgpXTsKIAorICAg
IHdhaXRGb3JWaWRlb091dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2UoKTsKKwogICAgIExPRyhNZWRp
YSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVZpZGVvT3V0cHV0
KCVwKSAtIHJldHVybmluZyAlcCIsIHRoaXMsIG1fdmlkZW9PdXRwdXQuZ2V0KCkpOwogfQogCkBA
IC0xMjk3LDcgKzEzMjcsNDQgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOjp2aWRlb091dHB1dEhhc0F2YWlsYWJsZUZyYW1lKCkKICAgICByZXR1cm4gW21fdmlkZW9P
dXRwdXQgaGFzTmV3UGl4ZWxCdWZmZXJGb3JJdGVtVGltZTpbbV9hdlBsYXllckl0ZW0gY3VycmVu
dFRpbWVdXTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpw
YWludFdpdGhWaWRlb091dHB1dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCitzdGF0aWMgY29uc3Qgdm9pZCogQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVQb2ludGVy
Q2FsbGJhY2sodm9pZCogaW5mbykKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVy
ID0gKENWUGl4ZWxCdWZmZXJSZWYpaW5mbzsKKyAgICBDVlBpeGVsQnVmZmVyTG9ja0Jhc2VBZGRy
ZXNzKHBpeGVsQnVmZmVyLCBrQ1ZQaXhlbEJ1ZmZlckxvY2tfUmVhZE9ubHkpOworICAgIHJldHVy
biBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIpOworfQorCitzdGF0aWMg
dm9pZCBDVlBpeGVsQnVmZmVyUmVsZWFzZUJ5dGVQb2ludGVyQ2FsbGJhY2sodm9pZCAqaW5mbywg
Y29uc3Qgdm9pZCAqKQoreworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIgPSAoQ1ZQ
aXhlbEJ1ZmZlclJlZilpbmZvOworICAgIENWUGl4ZWxCdWZmZXJVbmxvY2tCYXNlQWRkcmVzcyhw
aXhlbEJ1ZmZlciwga0NWUGl4ZWxCdWZmZXJMb2NrX1JlYWRPbmx5KTsKK30KKworc3RhdGljIHZv
aWQgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2VJbmZvQ2FsbGJhY2sodm9pZCAqaW5mbykKK3sKKyAgICBD
VlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gKENWUGl4ZWxCdWZmZXJSZWYpaW5mbzsKKyAg
ICBDRlJlbGVhc2UocGl4ZWxCdWZmZXIpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNyZWF0ZUltYWdlRnJvbVBpeGVsQnVmZmVyKENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZm
ZXIpCit7CisgICAgLy8gcGl4ZWxCdWZmZXIgd2lsbCBiZSBvZiB0eXBlIGtDVlBpeGVsRm9ybWF0
VHlwZV8zMkJHUkEKKyAgICBBU1NFUlQoQ1ZQaXhlbEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShw
aXhlbEJ1ZmZlcikgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQSk7CisKKyAgICBzaXplX3Qg
d2lkdGggPSBDVlBpeGVsQnVmZmVyR2V0V2lkdGgocGl4ZWxCdWZmZXIpOworICAgIHNpemVfdCBo
ZWlnaHQgPSBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVsQnVmZmVyKTsKKyAgICBzaXplX3Qg
Ynl0ZXNQZXJSb3cgPSBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQZXJSb3cocGl4ZWxCdWZmZXIpOwor
ICAgIHNpemVfdCBieXRlTGVuZ3RoID0gQ1ZQaXhlbEJ1ZmZlckdldERhdGFTaXplKHBpeGVsQnVm
ZmVyKTsKKyAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRlcjMy
TGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0OworCisgICAgQ0ZSZXRhaW4ocGl4ZWxCdWZmZXIp
OyAvLyBCYWxhbmNlZCBieSBDVlBpeGVsQnVmZmVyUmVsZWFzZUluZm9DYWxsYmFjayBpbiBwcm92
aWRlckNhbGxiYWNrcworICAgIENHRGF0YVByb3ZpZGVyRGlyZWN0Q2FsbGJhY2tzIHByb3ZpZGVy
Q2FsbGJhY2tzID0geyAwLCBDVlBpeGVsQnVmZmVyR2V0Qnl0ZVBvaW50ZXJDYWxsYmFjaywgQ1ZQ
aXhlbEJ1ZmZlclJlbGVhc2VCeXRlUG9pbnRlckNhbGxiYWNrLCAwLCBDVlBpeGVsQnVmZmVyUmVs
ZWFzZUluZm9DYWxsYmFjayB9OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJv
dmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlRGlyZWN0KHBpeGVsQnVmZmVyLCBi
eXRlTGVuZ3RoLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKKworICAgIHJldHVybiBhZG9wdENGKENH
SW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgOCwgMzIsIGJ5dGVzUGVyUm93LCBkZXZpY2VSR0JD
b2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8sIHByb3ZpZGVyLmdldCgpLCBOVUxMLCBmYWxzZSwg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZUxhc3RJbWFnZSgpCiB7CiAgICAgUmV0YWluUHRyPENW
UGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVmZmVyID0gY3JlYXRlUGl4ZWxCdWZmZXIoKTsKIApAQCAt
MTMwNSw3ICsxMzcyLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6cGFpbnRXaXRoVmlkZW9PdXRwdXQoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgLy8gZm9yIHRo
ZSByZXF1ZXN0ZWQgdGltZSBoYXMgYWxyZWFkeSBiZWVuIHJldHJpZXZlZC4gSW4gdGhpcyBjYXNl
LCB0aGUgbGFzdCB2YWxpZCBpbWFnZSAoaWYgYW55KQogICAgIC8vIHNob3VsZCBiZSBkaXNwbGF5
ZWQuCiAgICAgaWYgKHBpeGVsQnVmZmVyKQotICAgICAgICBtX2xhc3RJbWFnZSA9IHBpeGVsQnVm
ZmVyOworICAgICAgICBtX2xhc3RJbWFnZSA9IGNyZWF0ZUltYWdlRnJvbVBpeGVsQnVmZmVyKHBp
eGVsQnVmZmVyLmdldCgpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgdXBkYXRlTGFzdEltYWdlKCk7CiAKICAgICBpZiAo
bV9sYXN0SW1hZ2UpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpjb250ZXh0KTsKQEAgLTEzMTMsMjIgKzEzODUsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVvT3V0cHV0KEdyYXBoaWNzQ29udGV4
dCogYwogICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMS4wZiwgLTEuMGYpKTsKIAog
ICAgICAgICBDR1JlY3Qgb3V0cHV0UmVjdCA9IHsgQ0dQb2ludFplcm8sIHJlY3Quc2l6ZSgpIH07
Ci0gICAgICAgIENHUmVjdCBpbWFnZVJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIENWUGl4ZWxCdWZm
ZXJHZXRXaWR0aChtX2xhc3RJbWFnZS5nZXQoKSksIENWUGl4ZWxCdWZmZXJHZXRIZWlnaHQobV9s
YXN0SW1hZ2UuZ2V0KCkpKTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAgICAgIC8vIGNpQ29udGV4
dCBkb2VzIG5vdCB1c2UgYSBSZXRhaW5QdHIgZm9yIHJlc3VsdHMgb2YgY29udGV4dFdpdGhDR0Nv
bnRleHQ6LCBhcyB0aGUgcmV0dXJuZWQgdmFsdWUKLSAgICAgICAgLy8gaXMgYXV0b3JlbGVhc2Vk
LCBhbmQgdGhlcmUgaXMgbm8gbm9uLWF1dG9yZWxlYXNlZCB2ZXJzaW9uIG9mIHRoYXQgZnVuY3Rp
b24uCi0gICAgICAgIENJQ29udGV4dCogY2lDb250ZXh0ID0gW2dldENJQ29udGV4dENsYXNzKCkg
Y29udGV4dFdpdGhPcHRpb25zOm5pbF07Ci0gICAgICAgIFJldGFpblB0cjxDSUltYWdlPiBpbWFn
ZSA9IGFkb3B0TlMoW1tnZXRDSUltYWdlQ2xhc3MoKSBhbGxvY10gaW5pdFdpdGhDVlBpeGVsQnVm
ZmVyOm1fbGFzdEltYWdlLmdldCgpXSk7Ci0gICAgICAgIFJldGFpblB0cjxDR0ltYWdlPiBjZ0lt
YWdlID0gYWRvcHRDRihbY2lDb250ZXh0IGNyZWF0ZUNHSW1hZ2U6aW1hZ2UuZ2V0KCkgZnJvbVJl
Y3Q6aW1hZ2VSZWN0XSk7Ci0gICAgICAgIGNvbnRleHQtPmRyYXdOYXRpdmVJbWFnZShjZ0ltYWdl
LmdldCgpLCBGbG9hdFNpemUoaW1hZ2VSZWN0LnNpemUpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBG
bG9hdFJlY3Qob3V0cHV0UmVjdCksIEZsb2F0UmVjdChpbWFnZVJlY3QpLCAxKTsKLSNlbHNlCisg
ICAgICAgIENHUmVjdCBpbWFnZVJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIENHSW1hZ2VHZXRXaWR0
aChtX2xhc3RJbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQobV9sYXN0SW1hZ2UuZ2V0KCkp
KTsKIAotICAgICAgICAvLyBjaUNvbnRleHQgZG9lcyBub3QgdXNlIGEgUmV0YWluUHRyIGZvciBy
ZXN1bHRzIG9mIGNvbnRleHRXaXRoQ0dDb250ZXh0OiwgYXMgdGhlIHJldHVybmVkIHZhbHVlCi0g
ICAgICAgIC8vIGlzIGF1dG9yZWxlYXNlZCwgYW5kIHRoZXJlIGlzIG5vIG5vbi1hdXRvcmVsZWFz
ZWQgdmVyc2lvbiBvZiB0aGF0IGZ1bmN0aW9uLgotICAgICAgICBDSUNvbnRleHQqIGNpQ29udGV4
dCA9IFtDSUNvbnRleHQgY29udGV4dFdpdGhDR0NvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCkgb3B0aW9uczpuaWxdOwotICAgICAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2UgPSBh
ZG9wdE5TKFtbQ0lJbWFnZSBhbGxvY10gaW5pdFdpdGhDVkltYWdlQnVmZmVyOm1fbGFzdEltYWdl
LmdldCgpIG9wdGlvbnM6QHsga0NJSW1hZ2VDb2xvclNwYWNlOiAoaWQpZGV2aWNlUkdCQ29sb3JT
cGFjZVJlZigpIH1dKTsKLSAgICAgICAgW2NpQ29udGV4dCBkcmF3SW1hZ2U6aW1hZ2UuZ2V0KCkg
aW5SZWN0Om91dHB1dFJlY3QgZnJvbVJlY3Q6aW1hZ2VSZWN0XTsKLSNlbmRpZgorICAgICAgICBj
b250ZXh0LT5kcmF3TmF0aXZlSW1hZ2UobV9sYXN0SW1hZ2UuZ2V0KCksIEZsb2F0U2l6ZShpbWFn
ZVJlY3Quc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdChvdXRwdXRSZWN0KSwg
RmxvYXRSZWN0KGltYWdlUmVjdCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgY3JlYXRlZCBh
biBBVkFzc2V0SW1hZ2VHZW5lcmF0b3IgaW4gdGhlIHBhc3QgZHVlIHRvIG1fdmlkZW9PdXRwdXQg
bm90IGhhdmluZyBhbiBhdmFpbGFibGUKICAgICAgICAgLy8gdmlkZW8gZnJhbWUsIGRlc3Ryb3kg
aXQgbm93IHRoYXQgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KQEAgLTEzMzYsNiArMTM5NSwzMSBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVv
T3V0cHV0KEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICAgICAgZGVzdHJveUltYWdlR2VuZXJh
dG9yKCk7CiAgICAgfQogfQorCitQYXNzTmF0aXZlSW1hZ2VQdHIgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpCit7CisgICAgdXBk
YXRlTGFzdEltYWdlKCk7CisgICAgcmV0dXJuIG1fbGFzdEltYWdlLmdldCgpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OndhaXRGb3JWaWRlb091dHB1dE1l
ZGlhRGF0YVdpbGxDaGFuZ2UoKQoreworICAgIGlmICghbV92aWRlb091dHB1dFNlbWFwaG9yZSkK
KyAgICAgICAgbV92aWRlb091dHB1dFNlbWFwaG9yZSA9IGRpc3BhdGNoX3NlbWFwaG9yZV9jcmVh
dGUoMCk7CisKKyAgICBbbV92aWRlb091dHB1dCByZXF1ZXN0Tm90aWZpY2F0aW9uT2ZNZWRpYURh
dGFDaGFuZ2VXaXRoQWR2YW5jZUludGVydmFsOjBdOworCisgICAgLy8gV2FpdCBmb3IgMSBzZWNv
bmQKKyAgICBsb25nIHJlc3VsdCA9IGRpc3BhdGNoX3NlbWFwaG9yZV93YWl0KG1fdmlkZW9PdXRw
dXRTZW1hcGhvcmUsIGRpc3BhdGNoX3RpbWUoMCwgMSAqIE5TRUNfUEVSX1NFQykpOworCisgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6d2FpdEZvclZpZGVvT3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZSglcCkgdGlt
ZWQgb3V0IiwgdGhpcyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6b3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZShBVlBsYXllckl0ZW1WaWRlb091dHB1dCop
Cit7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbChtX3ZpZGVvT3V0cHV0U2VtYXBob3Jl
KTsKK30KICNlbmRpZgogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgfHwgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQV9WMikKQEAgLTE5ODcsNCArMjA3MSwyNyBAQCBOU0FycmF5KiBpdGVtS1ZP
UHJvcGVydGllcygpCiBAZW5kCiAjZW5kaWYKIAorI2lmIEhBVkUoQVZGT1VOREFUSU9OX1ZJREVP
X09VVFBVVCkKK0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlQVZGUHVsbERlbGVnYXRlCistIChpZClp
bml0V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDKiljYWxs
YmFjaworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKHNlbGYpCisgICAgICAg
IG1fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClv
dXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlOihBVlBsYXllckl0ZW1WaWRlb091dHB1dCAqKW91dHB1
dAoreworICAgIG1fY2FsbGJhY2stPm91dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2Uob3V0cHV0KTsK
K30KKworLSAodm9pZClvdXRwdXRTZXF1ZW5jZVdhc0ZsdXNoZWQ6KEFWUGxheWVySXRlbVZpZGVv
T3V0cHV0ICopb3V0cHV0Cit7CisgICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7CisgICAgLy8gTm8t
b3AuCit9CitAZW5kCisjZW5kaWYKKwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217322</attachid>
            <date>2013-11-19 13:04:40 -0800</date>
            <delta_ts>2013-11-19 13:32:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124599-20131119130440.patch</filename>
            <type>text/plain</type>
            <size>20230</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzgzMWYwYTQ4ZjIyZTc3
YmE3MzAyNjUyZGMzYzU1MTlmOGJjZGFjOC4uZTc5ZWI5OGYzN2IxZmNiZjcxMjhhYTU0MWJlNzA4
ZDQyMDM5ZjIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTExLTE5ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIDEwWCBzbG93ZXIg
dGhhbiBDaHJvbWUgd2hlbiBkcmF3aW5nIGEgdmlkZW8gaW50byBhIGNhbnZhcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NTk5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wcm92ZSBwZXJmb3JtYW5j
ZSBieSBjcmVhdGluZyBhIENHSW1hZ2VSZWYgd2hpY2ggZGlyZWN0bHkgcmVmZXJlbmNlcyB0aGUg
Q1ZQaXhlbEJ1ZmZlciBwcm92aWRlZAorICAgICAgICBieSBBVlBsYXllckl0ZW1WaWRlb091dHB1
dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkNWUGl4ZWxCdWZmZXJHZXRCeXRlUG9pbnRlckNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNWUGl4ZWxCdWZmZXJSZWxlYXNlQnl0ZVBvaW50ZXJDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDVlBpeGVsQnVmZmVyUmVsZWFzZUluZm9DYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJbWFnZUZyb21QaXhlbEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVM
YXN0SW1hZ2UpOgorCisgICAgICAgIEFkZGl0aW9uYWxseSwgd2hlbiBhc2tlZCB0byBwYWludCB3
aXRoIGFuIEFWUGxheWVySXRlbVZpZGVvT3V0cHV0LCBibG9jayB1bnRpbCB0aGUgb3V0cHV0IG5v
dGlmaWVzCisgICAgICAgIGl0cyBkZWxlZ2F0ZSB0aGF0IGEgcGl4ZWwgYnVmZmVyIGlzIGF2YWls
YWJsZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFB1bGxEZWxlZ2F0ZVF1ZXVlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlVmlkZW9PdXRwdXQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRoVmlk
ZW9PdXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3YWl0Rm9yVmlkZW9PdXRwdXRNZWRp
YURhdGFXaWxsQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbk9iakM6Om91dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2UpOgorICAgICAgICAoLVtX
ZWJDb3JlQVZGUHVsbERlbGVnYXRlIGluaXRXaXRoQ2FsbGJhY2s6XSk6CisgICAgICAgICgtW1dl
YkNvcmVBVkZQdWxsRGVsZWdhdGUgb3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZTpdKToKKyAgICAg
ICAgKC1bV2ViQ29yZUFWRlB1bGxEZWxlZ2F0ZSBvdXRwdXRTZXF1ZW5jZVdhc0ZsdXNoZWQ6XSk6
CisgICAgICAgIAorICAgICAgICBUbyBmdXJ0aGVyIG9wdGltaXplIHZpZGVvIC0+IGNhbnZhcyBk
cmF3aW5nLCBhZGQgYSBtZXRob2Qgd2hpY2ggY2FuIHJldHVybiBhIFBhc3NOYXRpdmVJbWFnZSB0
byBiZQorICAgICAgICBkcmF3biBkaXJlY3RseSBvbnRvIHRoZSBjYW52YXMsIHJhdGhlciB0aGFu
IHJlbmRlcmluZyBpbnRvIGFuIGludGVybWVkaWFyeSBjb250ZXh0OgorICAgICAgICAqIGh0bWwv
SFRNTFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKToKKyAgICAgICAgKiBodG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1h
Z2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKToKKwog
MjAxMy0xMS0xOSAgRnLDqWTDqXJpYyBXYW5nICA8ZnJlZC53YW5nQGZyZWUuZnI+CiAKICAgICAg
ICAgTWFwIHRoZSBkaXIgYXR0cmlidXRlIHRvIHRoZSBDU1MgZGlyZWN0aW9uIHByb3BlcnR5Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5kZXggMDkzMTViNGI0MDM4
ZWQzM2M1OGVjMGI0NzA0ZGQ3YTlhNWYzOWFlOS4uY2E3MjE1MDQwNTMwMTBhNTBlZjk2NzY0YTQz
N2QwOWQxMDAyNzI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3Bw
CkBAIC0yNjgsNiArMjY4LDE0IEBAIGJvb2wgSFRNTFZpZGVvRWxlbWVudDo6aGFzQXZhaWxhYmxl
VmlkZW9GcmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBsYXllcigpLT5oYXNWaWRlbygpICYmIHBs
YXllcigpLT5oYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCk7CiB9CiAKK1Bhc3NOYXRpdmVJbWFnZVB0
ciBIVE1MVmlkZW9FbGVtZW50OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkKK3sKKyAgICBp
ZiAoIXBsYXllcigpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwbGF5ZXIoKS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpOworfQorCiB2b2lkIEhUTUxWaWRlb0VsZW1lbnQ6
OndlYmtpdEVudGVyRnVsbHNjcmVlbihFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoaXNG
dWxsc2NyZWVuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5oCmluZGV4IGVm
NTdmMWQ4M2QxYzhjMmMyMmI1OTQ3ZTNkZDQ2N2U3ODk3ZmU5YTMuLmUyMjEwZDQyODQ2M2FiMDk3
OTc4ZWZlZDU4Y2E5MGRmMmI4NGMwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFZpZGVvRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5oCkBAIC02MywxMCArNjMsMTQgQEAgcHVibGljOgogICAgIC8vIFVzZWQgYnkgY2FudmFz
IHRvIGdhaW4gcmF3IHBpeGVsIGFjY2VzcwogICAgIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCisgICAgUGFzc05hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKTsKKwogICAgIC8vIFVzZWQgYnkg
V2ViR0wgdG8gZG8gR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IGlmIHBvc3NpYmxlLgogICAgIC8vIFNl
ZSBtb3JlIGRldGFpbHMgYXQgTWVkaWFQbGF5ZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3Jt
VGV4dHVyZSgpIGRlZmluZWQgaW4gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaC4KICAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gdHlwZSwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQsIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBmbGlwWSk7CiAKKworCiAgICAgYm9vbCBzaG91bGREaXNwbGF5UG9zdGVy
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBkaXNwbGF5TW9kZSgpID09IFBvc3RlciB8fCBkaXNwbGF5
TW9kZSgpID09IFBvc3RlcldhaXRpbmdGb3JWaWRlbzsgfQogCiAgICAgVVJMIHBvc3RlckltYWdl
VVJMKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA1YmE3OGEwYmVjN2M5OWQ3MjJkMDFhZmUw
YmMxY2UwMjY5YTQyNWE4Li43ODkwZWI4YWJhZDc4MzY1YzNkNzM3ZTdhMDVhODJmOGE3NmQ2NTVh
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKQEAgLTE0NTAsNiArMTQ1MCwxOCBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBjb25zdCBG
bG9hdFJlYwogCiAgICAgY2hlY2tPcmlnaW4odmlkZW8pOwogCisjaWYgVVNFKENHKQorICAgIGlm
IChQYXNzTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSB2aWRlby0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
VGltZSgpKSB7CisgICAgICAgIGMtPmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgRmxvYXRTaXplKHZp
ZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgZHN0UmVjdCwgc3JjUmVjdCk7CisgICAgICAgIGlmIChyZWN0Q29udGFpbnNDYW52YXMo
ZHN0UmVjdCkpCisgICAgICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGRpZERyYXcoZHN0UmVjdCk7CisKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyNlbmRpZgorCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpj
KTsKICAgICBjLT5jbGlwKGRzdFJlY3QpOwogICAgIGMtPnRyYW5zbGF0ZShkc3RSZWN0LngoKSwg
ZHN0UmVjdC55KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuY3BwCmluZGV4IGM0OGZiOGFjMGYwZDQwNGEyNWQ0MmI3ZWQyM2EwMTJiNTM1ZmQ1
OTguLjZhODhlNDNmMWMyNDU3ZDdkYWIzMDM0ODhkOTg3Zjg1NTY2M2I0MTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTc1MSw2
ICs3NTEsMTEgQEAgYm9vbCBNZWRpYVBsYXllcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAogICAgIHJldHVybiBtX3ByaXZhdGUt
PmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShjb250ZXh0LCB0ZXh0dXJlLCBsZXZl
bCwgdHlwZSwgaW50ZXJuYWxGb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKIH0KIAor
UGFzc05hdGl2ZUltYWdlUHRyIE1lZGlhUGxheWVyOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1l
KCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCk7
Cit9CisKIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlw
ZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBN
ZWRpYVBsYXllclN1cHBvcnRzVHlwZUNsaWVudCogY2xpZW50KQogewogICAgIC8vIDQuOC4xMC4z
IE1JTUUgdHlwZXMgLSBUaGUgY2FuUGxheVR5cGUodHlwZSkgbWV0aG9kIG11c3QgcmV0dXJuIHRo
ZSBlbXB0eSBzdHJpbmcgaWYgdHlwZSBpcyBhIHR5cGUgdGhhdCB0aGUgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCBmNjNlZWIxZDE5MDNm
Mjg1Yzg4NWEwMmI1Y2MxYTVlNDYxMWUxOTgyLi4yYTY5NmYyM2ZjNmZhMmU4NGFjMzlkNzc0YmVj
NmUwNWI4NGVjYmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhUGxheWVyLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiVVJMLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlUHRyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0
ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvVWludDhBcnJheS5oPgpAQCAtMzc2LDYgKzM3Nyw4IEBA
IHB1YmxpYzoKICAgICAvLyBodHRwOi8vc3JjLmNocm9taXVtLm9yZy92aWV3dmMvY2hyb21lL3Ry
dW5rL3NyYy9ncHUvY29tbWFuZF9idWZmZXIvc2VydmljZS9nbGVzMl9jbWRfY29weV90ZXh0dXJl
X2Nocm9taXVtLmNjIHZpYSBzaGFkZXJzLgogICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJl
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSB0eXBlLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKTsKIAorICAgIFBhc3NOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCk7CisKICAgICBlbnVtIE5ldHdvcmtTdGF0
ZSB7IEVtcHR5LCBJZGxlLCBMb2FkaW5nLCBMb2FkZWQsIEZvcm1hdEVycm9yLCBOZXR3b3JrRXJy
b3IsIERlY29kZUVycm9yIH07CiAgICAgTmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJp
dmF0ZS5oCmluZGV4IDRmOThiNTYxYmFhMWQyNTM1ZTZiNmI2NWIxY2FmMjI3M2UzMTU4MGIuLjNk
MzFhNDUwNDJmOWJkNzU3NTZjOGVhOTk0ZTkyMGFkYTRiMjZiNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCkBAIC0x
MjEsNiArMTIxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q3VycmVudEZy
YW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4dCogYywgY29uc3QgSW50UmVjdCYgcikgeyBwYWlu
dChjLCByKTsgfQogICAgIHZpcnR1YWwgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNE
ZW51bSwgR0MzRGVudW0sIGJvb2wsIGJvb2wpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBQYXNzTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIHsgcmV0dXJu
IDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2Fk
KSB7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCmluZGV4IGY1YTc4YzhmNzNlZWM0YzU3ZGRkOWM2
YzU5MTlhMDcwOWU2NWJhNWYuLjE1NjI5NDRlZDZjM2Q3OTE1NTgxOWRiNTJmMjMxNjJmNGMwNDY4
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKQEAgLTQzLDYgKzQzLDcgQEAgT0JKQ19DTEFTUyBB
VlBsYXllckxheWVyOwogT0JKQ19DTEFTUyBBVlVSTEFzc2V0OwogT0JKQ19DTEFTUyBOU0FycmF5
OwogT0JKQ19DTEFTUyBXZWJDb3JlQVZGTW92aWVPYnNlcnZlcjsKK09CSkNfQ0xBU1MgV2ViQ29y
ZUFWRlB1bGxEZWxlZ2F0ZTsKIAogdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QqIGlkOwogCkBA
IC0xMDYsNiArMTA3LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1cmF0aW9uRGlkQ2hhbmdlKGRv
dWJsZSk7CiAgICAgdm9pZCByYXRlRGlkQ2hhbmdlKGRvdWJsZSk7CiAKKyNpZiBIQVZFKEFWRk9V
TkRBVElPTl9WSURFT19PVVRQVVQpCisgICAgdm9pZCBvdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdl
KEFWUGxheWVySXRlbVZpZGVvT3V0cHV0Kik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDKE1lZGlhUGxheWVyKik7CiAKQEAgLTE3Niw4
ICsxODEsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZVZpZGVvT3V0cHV0KCk7CiAgICAg
dm9pZCBkZXN0cm95VmlkZW9PdXRwdXQoKTsKICAgICBSZXRhaW5QdHI8Q1ZQaXhlbEJ1ZmZlclJl
Zj4gY3JlYXRlUGl4ZWxCdWZmZXIoKTsKKyAgICB2b2lkIHVwZGF0ZUxhc3RJbWFnZSgpOwogICAg
IGJvb2wgdmlkZW9PdXRwdXRIYXNBdmFpbGFibGVGcmFtZSgpOwogICAgIHZvaWQgcGFpbnRXaXRo
VmlkZW9PdXRwdXQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgUGFzc05hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKSBPVkVSUklE
RTsKKyAgICB2b2lkIHdhaXRGb3JWaWRlb091dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2UoKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKQEAgLTIxOCw3ICsyMjYsOSBAQCBw
cml2YXRlOgogICAgIFJldGFpblB0cjxBVkFzc2V0SW1hZ2VHZW5lcmF0b3I+IG1faW1hZ2VHZW5l
cmF0b3I7CiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9fT1VUUFVUKQogICAgIFJldGFpblB0
cjxBVlBsYXllckl0ZW1WaWRlb091dHB1dD4gbV92aWRlb091dHB1dDsKLSAgICBSZXRhaW5QdHI8
Q1ZQaXhlbEJ1ZmZlclJlZj4gbV9sYXN0SW1hZ2U7CisgICAgUmV0YWluUHRyPFdlYkNvcmVBVkZQ
dWxsRGVsZWdhdGU+IG1fdmlkZW9PdXRwdXREZWxlZ2F0ZTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gbV9sYXN0SW1hZ2U7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3QgbV92aWRlb091dHB1
dFNlbWFwaG9yZTsKICNlbmRpZgogCiAjaWYgVVNFKFZJREVPVE9PTEJPWCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLm1tCmluZGV4IDFkYmJiM2E0NzcyM2FlNDE0MmI5ODBlNjkwYzdmOTE2NjIwYWM1MTAu
LmY0OTA5YTJhYjI1M2Y4MTYxMjM4NzJmOWE5ZDFmMDYwMjQ5MWUzM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5tbQpAQCAtMTE1LDcgKzExNSw2IEBAIFNPRlRfTElOS19DT05TVEFOVChDb3JlTWVk
aWEsIGtDTVRpbWVaZXJvLCBDTVRpbWUpCiAKICNkZWZpbmUgQVZQbGF5ZXIgZ2V0QVZQbGF5ZXJD
bGFzcygpCiAjZGVmaW5lIEFWUGxheWVySXRlbSBnZXRBVlBsYXllckl0ZW1DbGFzcygpCi0jZGVm
aW5lIEFWUGxheWVySXRlbVZpZGVvT3V0cHV0IGdldEFWUGxheWVySXRlbVZpZGVvT3V0cHV0Q2xh
c3MoKQogI2RlZmluZSBBVlBsYXllckxheWVyIGdldEFWUGxheWVyTGF5ZXJDbGFzcygpCiAjZGVm
aW5lIEFWVVJMQXNzZXQgZ2V0QVZVUkxBc3NldENsYXNzKCkKICNkZWZpbmUgQVZBc3NldEltYWdl
R2VuZXJhdG9yIGdldEFWQXNzZXRJbWFnZUdlbmVyYXRvckNsYXNzKCkKQEAgLTE5NSw2ICsxOTQs
MTcgQEAgZW51bSBNZWRpYVBsYXllckFWRm91bmRhdGlvbk9ic2VydmF0aW9uQ29udGV4dCB7CiBA
ZW5kCiAjZW5kaWYKIAorI2lmIEhBVkUoQVZGT1VOREFUSU9OX1ZJREVPX09VVFBVVCkKK0BpbnRl
cmZhY2UgV2ViQ29yZUFWRlB1bGxEZWxlZ2F0ZSA6IE5TT2JqZWN0PEFWUGxheWVySXRlbU91dHB1
dFB1bGxEZWxlZ2F0ZT4geworICAgIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMq
IG1fY2FsbGJhY2s7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3QgbV9zZW1hcGhvcmU7Cit9Cist
IChpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
KiljYWxsYmFjazsKKy0gKHZvaWQpb3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZTooQVZQbGF5ZXJJ
dGVtT3V0cHV0ICopc2VuZGVyOworLSAodm9pZClvdXRwdXRTZXF1ZW5jZVdhc0ZsdXNoZWQ6KEFW
UGxheWVySXRlbU91dHB1dCAqKW91dHB1dDsKK0BlbmQKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyBOU0FycmF5ICphc3NldE1ldGFkYXRhS2V5TmFtZXMoKTsKQEAgLTIy
OCw2ICsyMzgsMTggQEAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFsTG9hZGVyRGVsZWdh
dGVRdWV1ZSgpCiB9CiAjZW5kaWYKIAorI2lmIEhBVkUoQVZGT1VOREFUSU9OX1ZJREVPX09VVFBV
VCkKK3N0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IGdsb2JhbFB1bGxEZWxlZ2F0ZVF1ZXVlKCkKK3sK
KyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxRdWV1ZTsKKyAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57
CisgICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJDb3JlQVZG
UHVsbERlbGVnYXRlIHF1ZXVlIiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKTsKKyAgICB9KTsKKyAg
ICByZXR1cm4gZ2xvYmFsUXVldWU7Cit9CisjZW5kaWYKKwogUGFzc093blB0cjxNZWRpYVBsYXll
clByaXZhdGVJbnRlcmZhY2U+IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNy
ZWF0ZShNZWRpYVBsYXllciogcGxheWVyKQogeyAKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMocGxheWVyKSk7CkBAIC0yNDQsNiArMjY2
LDEwIEBAIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMoTWVkaWFQbGF5CiAgICAgLCBtX29iamNPYnNlcnZlcihhZG9w
dE5TKFtbV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhp
c10pKQogICAgICwgbV92aWRlb0ZyYW1lSGFzRHJhd24oZmFsc2UpCiAgICAgLCBtX2hhdmVDaGVj
a2VkUGxheWFiaWxpdHkoZmFsc2UpCisjaWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9fT1VUUFVU
KQorICAgICwgbV92aWRlb091dHB1dERlbGVnYXRlKGFkb3B0TlMoW1tXZWJDb3JlQVZGUHVsbERl
bGVnYXRlIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKSkKKyAgICAsIG1fdmlkZW9PdXRw
dXRTZW1hcGhvcmUoMCkKKyNlbmRpZgogI2lmIEhBVkUoQVZGT1VOREFUSU9OX0xPQURFUl9ERUxF
R0FURSkKICAgICAsIG1fbG9hZGVyRGVsZWdhdGUoYWRvcHROUyhbW1dlYkNvcmVBVkZMb2FkZXJE
ZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhDYWxsYmFjazp0aGlzXSkpCiAjZW5kaWYKQEAgLTEyMjIs
MTEgKzEyNDgsMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpj
cmVhdGVWaWRlb091dHB1dCgpCiAgICAgTlNEaWN0aW9uYXJ5KiBhdHRyaWJ1dGVzID0gW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJXaXRo
VW5zaWduZWRJbnQ6a0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQV0sIGtDVlBpeGVsQnVmZmVyUGl4
ZWxGb3JtYXRUeXBlS2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWxdOwog
I2VuZGlmCi0gICAgbV92aWRlb091dHB1dCA9IGFkb3B0TlMoW1tBVlBsYXllckl0ZW1WaWRlb091
dHB1dCBhbGxvY10gaW5pdFdpdGhQaXhlbEJ1ZmZlckF0dHJpYnV0ZXM6YXR0cmlidXRlc10pOwor
ICAgIG1fdmlkZW9PdXRwdXQgPSBhZG9wdE5TKFtbZ2V0QVZQbGF5ZXJJdGVtVmlkZW9PdXRwdXRD
bGFzcygpIGFsbG9jXSBpbml0V2l0aFBpeGVsQnVmZmVyQXR0cmlidXRlczphdHRyaWJ1dGVzXSk7
CiAgICAgQVNTRVJUKG1fdmlkZW9PdXRwdXQpOwogCisgICAgW21fdmlkZW9PdXRwdXQgc2V0RGVs
ZWdhdGU6bV92aWRlb091dHB1dERlbGVnYXRlLmdldCgpIHF1ZXVlOmdsb2JhbFB1bGxEZWxlZ2F0
ZVF1ZXVlKCldOworCiAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFkZE91dHB1dDptX3ZpZGVv
T3V0cHV0LmdldCgpXTsKIAorICAgIHdhaXRGb3JWaWRlb091dHB1dE1lZGlhRGF0YVdpbGxDaGFu
Z2UoKTsKKwogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNyZWF0ZVZpZGVvT3V0cHV0KCVwKSAtIHJldHVybmluZyAlcCIsIHRoaXMsIG1fdmlkZW9P
dXRwdXQuZ2V0KCkpOwogfQogCkBAIC0xMjk3LDcgKzEzMjcsNDQgQEAgYm9vbCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp2aWRlb091dHB1dEhhc0F2YWlsYWJsZUZyYW1lKCkK
ICAgICByZXR1cm4gW21fdmlkZW9PdXRwdXQgaGFzTmV3UGl4ZWxCdWZmZXJGb3JJdGVtVGltZTpb
bV9hdlBsYXllckl0ZW0gY3VycmVudFRpbWVdXTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCitzdGF0aWMgY29uc3Qgdm9pZCogQ1ZQaXhl
bEJ1ZmZlckdldEJ5dGVQb2ludGVyQ2FsbGJhY2sodm9pZCogaW5mbykKK3sKKyAgICBDVlBpeGVs
QnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gKENWUGl4ZWxCdWZmZXJSZWYpaW5mbzsKKyAgICBDVlBp
eGVsQnVmZmVyTG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCBrQ1ZQaXhlbEJ1ZmZlckxvY2tf
UmVhZE9ubHkpOworICAgIHJldHVybiBDVlBpeGVsQnVmZmVyR2V0QmFzZUFkZHJlc3MocGl4ZWxC
dWZmZXIpOworfQorCitzdGF0aWMgdm9pZCBDVlBpeGVsQnVmZmVyUmVsZWFzZUJ5dGVQb2ludGVy
Q2FsbGJhY2sodm9pZCAqaW5mbywgY29uc3Qgdm9pZCAqKQoreworICAgIENWUGl4ZWxCdWZmZXJS
ZWYgcGl4ZWxCdWZmZXIgPSAoQ1ZQaXhlbEJ1ZmZlclJlZilpbmZvOworICAgIENWUGl4ZWxCdWZm
ZXJVbmxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwga0NWUGl4ZWxCdWZmZXJMb2NrX1JlYWRP
bmx5KTsKK30KKworc3RhdGljIHZvaWQgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2VJbmZvQ2FsbGJhY2so
dm9pZCAqaW5mbykKK3sKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gKENWUGl4
ZWxCdWZmZXJSZWYpaW5mbzsKKyAgICBDRlJlbGVhc2UocGl4ZWxCdWZmZXIpOworfQorCitzdGF0
aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUltYWdlRnJvbVBpeGVsQnVmZmVyKENWUGl4
ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIpCit7CisgICAgLy8gcGl4ZWxCdWZmZXIgd2lsbCBiZSBv
ZiB0eXBlIGtDVlBpeGVsRm9ybWF0VHlwZV8zMkJHUkEKKyAgICBBU1NFUlQoQ1ZQaXhlbEJ1ZmZl
ckdldFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlcikgPT0ga0NWUGl4ZWxGb3JtYXRUeXBlXzMy
QkdSQSk7CisKKyAgICBzaXplX3Qgd2lkdGggPSBDVlBpeGVsQnVmZmVyR2V0V2lkdGgocGl4ZWxC
dWZmZXIpOworICAgIHNpemVfdCBoZWlnaHQgPSBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KHBpeGVs
QnVmZmVyKTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDVlBpeGVsQnVmZmVyR2V0Qnl0ZXNQ
ZXJSb3cocGl4ZWxCdWZmZXIpOworICAgIHNpemVfdCBieXRlTGVuZ3RoID0gQ1ZQaXhlbEJ1ZmZl
ckdldERhdGFTaXplKHBpeGVsQnVmZmVyKTsKKyAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbyA9
IGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0OworCisgICAg
Q0ZSZXRhaW4ocGl4ZWxCdWZmZXIpOyAvLyBCYWxhbmNlZCBieSBDVlBpeGVsQnVmZmVyUmVsZWFz
ZUluZm9DYWxsYmFjayBpbiBwcm92aWRlckNhbGxiYWNrcworICAgIENHRGF0YVByb3ZpZGVyRGly
ZWN0Q2FsbGJhY2tzIHByb3ZpZGVyQ2FsbGJhY2tzID0geyAwLCBDVlBpeGVsQnVmZmVyR2V0Qnl0
ZVBvaW50ZXJDYWxsYmFjaywgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2VCeXRlUG9pbnRlckNhbGxiYWNr
LCAwLCBDVlBpeGVsQnVmZmVyUmVsZWFzZUluZm9DYWxsYmFjayB9OworICAgIFJldGFpblB0cjxD
R0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
RGlyZWN0KHBpeGVsQnVmZmVyLCBieXRlTGVuZ3RoLCAmcHJvdmlkZXJDYWxsYmFja3MpKTsKKwor
ICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgOCwgMzIsIGJ5
dGVzUGVyUm93LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8sIHByb3ZpZGVy
LmdldCgpLCBOVUxMLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworfQorCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnVwZGF0ZUxhc3RJbWFnZSgp
CiB7CiAgICAgUmV0YWluUHRyPENWUGl4ZWxCdWZmZXJSZWY+IHBpeGVsQnVmZmVyID0gY3JlYXRl
UGl4ZWxCdWZmZXIoKTsKIApAQCAtMTMwNSw3ICsxMzcyLDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRoVmlkZW9PdXRwdXQoR3JhcGhpY3NDb250
ZXh0KiBjCiAgICAgLy8gZm9yIHRoZSByZXF1ZXN0ZWQgdGltZSBoYXMgYWxyZWFkeSBiZWVuIHJl
dHJpZXZlZC4gSW4gdGhpcyBjYXNlLCB0aGUgbGFzdCB2YWxpZCBpbWFnZSAoaWYgYW55KQogICAg
IC8vIHNob3VsZCBiZSBkaXNwbGF5ZWQuCiAgICAgaWYgKHBpeGVsQnVmZmVyKQotICAgICAgICBt
X2xhc3RJbWFnZSA9IHBpeGVsQnVmZmVyOworICAgICAgICBtX2xhc3RJbWFnZSA9IGNyZWF0ZUlt
YWdlRnJvbVBpeGVsQnVmZmVyKHBpeGVsQnVmZmVyLmdldCgpKTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgdXBkYXRlTGFz
dEltYWdlKCk7CiAKICAgICBpZiAobV9sYXN0SW1hZ2UpIHsKICAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKQEAgLTEzMTMsMjIgKzEzODUsOSBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVv
T3V0cHV0KEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNp
emUoMS4wZiwgLTEuMGYpKTsKIAogICAgICAgICBDR1JlY3Qgb3V0cHV0UmVjdCA9IHsgQ0dQb2lu
dFplcm8sIHJlY3Quc2l6ZSgpIH07Ci0gICAgICAgIENHUmVjdCBpbWFnZVJlY3QgPSBDR1JlY3RN
YWtlKDAsIDAsIENWUGl4ZWxCdWZmZXJHZXRXaWR0aChtX2xhc3RJbWFnZS5nZXQoKSksIENWUGl4
ZWxCdWZmZXJHZXRIZWlnaHQobV9sYXN0SW1hZ2UuZ2V0KCkpKTsKLSNpZiBQTEFURk9STShJT1Mp
Ci0gICAgICAgIC8vIGNpQ29udGV4dCBkb2VzIG5vdCB1c2UgYSBSZXRhaW5QdHIgZm9yIHJlc3Vs
dHMgb2YgY29udGV4dFdpdGhDR0NvbnRleHQ6LCBhcyB0aGUgcmV0dXJuZWQgdmFsdWUKLSAgICAg
ICAgLy8gaXMgYXV0b3JlbGVhc2VkLCBhbmQgdGhlcmUgaXMgbm8gbm9uLWF1dG9yZWxlYXNlZCB2
ZXJzaW9uIG9mIHRoYXQgZnVuY3Rpb24uCi0gICAgICAgIENJQ29udGV4dCogY2lDb250ZXh0ID0g
W2dldENJQ29udGV4dENsYXNzKCkgY29udGV4dFdpdGhPcHRpb25zOm5pbF07Ci0gICAgICAgIFJl
dGFpblB0cjxDSUltYWdlPiBpbWFnZSA9IGFkb3B0TlMoW1tnZXRDSUltYWdlQ2xhc3MoKSBhbGxv
Y10gaW5pdFdpdGhDVlBpeGVsQnVmZmVyOm1fbGFzdEltYWdlLmdldCgpXSk7Ci0gICAgICAgIFJl
dGFpblB0cjxDR0ltYWdlPiBjZ0ltYWdlID0gYWRvcHRDRihbY2lDb250ZXh0IGNyZWF0ZUNHSW1h
Z2U6aW1hZ2UuZ2V0KCkgZnJvbVJlY3Q6aW1hZ2VSZWN0XSk7Ci0gICAgICAgIGNvbnRleHQtPmRy
YXdOYXRpdmVJbWFnZShjZ0ltYWdlLmdldCgpLCBGbG9hdFNpemUoaW1hZ2VSZWN0LnNpemUpLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBGbG9hdFJlY3Qob3V0cHV0UmVjdCksIEZsb2F0UmVjdChpbWFn
ZVJlY3QpLCAxKTsKLSNlbHNlCisgICAgICAgIENHUmVjdCBpbWFnZVJlY3QgPSBDR1JlY3RNYWtl
KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChtX2xhc3RJbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWln
aHQobV9sYXN0SW1hZ2UuZ2V0KCkpKTsKIAotICAgICAgICAvLyBjaUNvbnRleHQgZG9lcyBub3Qg
dXNlIGEgUmV0YWluUHRyIGZvciByZXN1bHRzIG9mIGNvbnRleHRXaXRoQ0dDb250ZXh0OiwgYXMg
dGhlIHJldHVybmVkIHZhbHVlCi0gICAgICAgIC8vIGlzIGF1dG9yZWxlYXNlZCwgYW5kIHRoZXJl
IGlzIG5vIG5vbi1hdXRvcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGF0IGZ1bmN0aW9uLgotICAgICAg
ICBDSUNvbnRleHQqIGNpQ29udGV4dCA9IFtDSUNvbnRleHQgY29udGV4dFdpdGhDR0NvbnRleHQ6
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgb3B0aW9uczpuaWxdOwotICAgICAgICBSZXRhaW5Q
dHI8Q0lJbWFnZT4gaW1hZ2UgPSBhZG9wdE5TKFtbQ0lJbWFnZSBhbGxvY10gaW5pdFdpdGhDVklt
YWdlQnVmZmVyOm1fbGFzdEltYWdlLmdldCgpIG9wdGlvbnM6QHsga0NJSW1hZ2VDb2xvclNwYWNl
OiAoaWQpZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpIH1dKTsKLSAgICAgICAgW2NpQ29udGV4dCBk
cmF3SW1hZ2U6aW1hZ2UuZ2V0KCkgaW5SZWN0Om91dHB1dFJlY3QgZnJvbVJlY3Q6aW1hZ2VSZWN0
XTsKLSNlbmRpZgorICAgICAgICBjb250ZXh0LT5kcmF3TmF0aXZlSW1hZ2UobV9sYXN0SW1hZ2Uu
Z2V0KCksIEZsb2F0U2l6ZShpbWFnZVJlY3Quc2l6ZSksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEZs
b2F0UmVjdChvdXRwdXRSZWN0KSwgRmxvYXRSZWN0KGltYWdlUmVjdCkpOwogCiAgICAgICAgIC8v
IElmIHdlIGhhdmUgY3JlYXRlZCBhbiBBVkFzc2V0SW1hZ2VHZW5lcmF0b3IgaW4gdGhlIHBhc3Qg
ZHVlIHRvIG1fdmlkZW9PdXRwdXQgbm90IGhhdmluZyBhbiBhdmFpbGFibGUKICAgICAgICAgLy8g
dmlkZW8gZnJhbWUsIGRlc3Ryb3kgaXQgbm93IHRoYXQgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4K
QEAgLTEzMzYsNiArMTM5NSwzMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6OnBhaW50V2l0aFZpZGVvT3V0cHV0KEdyYXBoaWNzQ29udGV4dCogYwogICAgICAgICAg
ICAgZGVzdHJveUltYWdlR2VuZXJhdG9yKCk7CiAgICAgfQogfQorCitQYXNzTmF0aXZlSW1hZ2VQ
dHIgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50VGltZSgpCit7CisgICAgdXBkYXRlTGFzdEltYWdlKCk7CisgICAgcmV0dXJuIG1fbGFzdElt
YWdlLmdldCgpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OndhaXRGb3JWaWRlb091dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2UoKQoreworICAgIGlmICghbV92
aWRlb091dHB1dFNlbWFwaG9yZSkKKyAgICAgICAgbV92aWRlb091dHB1dFNlbWFwaG9yZSA9IGRp
c3BhdGNoX3NlbWFwaG9yZV9jcmVhdGUoMCk7CisKKyAgICBbbV92aWRlb091dHB1dCByZXF1ZXN0
Tm90aWZpY2F0aW9uT2ZNZWRpYURhdGFDaGFuZ2VXaXRoQWR2YW5jZUludGVydmFsOjBdOworCisg
ICAgLy8gV2FpdCBmb3IgMSBzZWNvbmQKKyAgICBsb25nIHJlc3VsdCA9IGRpc3BhdGNoX3NlbWFw
aG9yZV93YWl0KG1fdmlkZW9PdXRwdXRTZW1hcGhvcmUsIGRpc3BhdGNoX3RpbWUoMCwgMSAqIE5T
RUNfUEVSX1NFQykpOworCisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2FpdEZvclZpZGVvT3V0cHV0TWVkaWFE
YXRhV2lsbENoYW5nZSglcCkgdGltZWQgb3V0IiwgdGhpcyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6b3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZShBVlBs
YXllckl0ZW1WaWRlb091dHB1dCopCit7CisgICAgZGlzcGF0Y2hfc2VtYXBob3JlX3NpZ25hbCht
X3ZpZGVvT3V0cHV0U2VtYXBob3JlKTsKK30KICNlbmRpZgogCiAjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkgfHwgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKQEAgLTE5ODcsNCArMjA3MSwy
NyBAQCBOU0FycmF5KiBpdGVtS1ZPUHJvcGVydGllcygpCiBAZW5kCiAjZW5kaWYKIAorI2lmIEhB
VkUoQVZGT1VOREFUSU9OX1ZJREVPX09VVFBVVCkKK0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlQVZG
UHVsbERlbGVnYXRlCistIChpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDKiljYWxsYmFjaworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKHNlbGYpCisgICAgICAgIG1fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClvdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlOihBVlBsYXllckl0
ZW1WaWRlb091dHB1dCAqKW91dHB1dAoreworICAgIG1fY2FsbGJhY2stPm91dHB1dE1lZGlhRGF0
YVdpbGxDaGFuZ2Uob3V0cHV0KTsKK30KKworLSAodm9pZClvdXRwdXRTZXF1ZW5jZVdhc0ZsdXNo
ZWQ6KEFWUGxheWVySXRlbVZpZGVvT3V0cHV0ICopb3V0cHV0Cit7CisgICAgVU5VU0VEX1BBUkFN
KG91dHB1dCk7CisgICAgLy8gTm8tb3AuCit9CitAZW5kCisjZW5kaWYKKwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217325</attachid>
            <date>2013-11-19 13:32:11 -0800</date>
            <delta_ts>2013-11-20 03:25:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-124599-20131119133211.patch</filename>
            <type>text/plain</type>
            <size>20067</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzgzMWYwYTQ4ZjIyZTc3
YmE3MzAyNjUyZGMzYzU1MTlmOGJjZGFjOC4uYjczY2UzZmY2MDhkYzdlOTlkOWQyOWQwNmY0OWRm
NWQ4OGFiZTczMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTExLTE5ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIDEwWCBzbG93ZXIg
dGhhbiBDaHJvbWUgd2hlbiBkcmF3aW5nIGEgdmlkZW8gaW50byBhIGNhbnZhcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NTk5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgIEltcHJvdmUgcGVyZm9ybWFuY2Ug
YnkgY3JlYXRpbmcgYSBDR0ltYWdlUmVmIHdoaWNoIGRpcmVjdGx5IHJlZmVyZW5jZXMgdGhlIENW
UGl4ZWxCdWZmZXIgcHJvdmlkZWQKKyAgICAgICAgYnkgQVZQbGF5ZXJJdGVtVmlkZW9PdXRwdXQ6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW06
CisgICAgICAgIChXZWJDb3JlOjpDVlBpeGVsQnVmZmVyR2V0Qnl0ZVBvaW50ZXJDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpDVlBpeGVsQnVmZmVyUmVsZWFzZUJ5dGVQb2ludGVyQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6Q1ZQaXhlbEJ1ZmZlclJlbGVhc2VJbmZvQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW1hZ2VGcm9tUGl4ZWxCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6dXBkYXRlTGFz
dEltYWdlKToKKworICAgICAgICBBZGRpdGlvbmFsbHksIHdoZW4gYXNrZWQgdG8gcGFpbnQgd2l0
aCBhbiBBVlBsYXllckl0ZW1WaWRlb091dHB1dCwgYmxvY2sgdW50aWwgdGhlIG91dHB1dCBub3Rp
ZmllcworICAgICAgICBpdHMgZGVsZWdhdGUgdGhhdCBhIHBpeGVsIGJ1ZmZlciBpcyBhdmFpbGFi
bGU6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW06CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxQdWxsRGVsZWdhdGVRdWV1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0ZVZpZGVvT3V0cHV0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVv
T3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6Om5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6d2FpdEZvclZpZGVvT3V0cHV0TWVkaWFE
YXRhV2lsbENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpvdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKToKKyAgICAgICAgKC1bV2Vi
Q29yZUFWRlB1bGxEZWxlZ2F0ZSBpbml0V2l0aENhbGxiYWNrOl0pOgorICAgICAgICAoLVtXZWJD
b3JlQVZGUHVsbERlbGVnYXRlIG91dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2U6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVBVkZQdWxsRGVsZWdhdGUgb3V0cHV0U2VxdWVuY2VXYXNGbHVzaGVkOl0pOgor
ICAgICAgICAKKyAgICAgICAgVG8gZnVydGhlciBvcHRpbWl6ZSB2aWRlbyAtPiBjYW52YXMgZHJh
d2luZywgYWRkIGEgbWV0aG9kIHdoaWNoIGNhbiByZXR1cm4gYSBQYXNzTmF0aXZlSW1hZ2UgdG8g
YmUKKyAgICAgICAgZHJhd24gZGlyZWN0bHkgb250byB0aGUgY2FudmFzLCByYXRoZXIgdGhhbiBy
ZW5kZXJpbmcgaW50byBhbiBpbnRlcm1lZGlhcnkgY29udGV4dDoKKyAgICAgICAgKiBodG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZGVvRWxlbWVudDo6
bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6CisgICAgICAgICogaHRtbC9IVE1MVmlkZW9FbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSk6CisKIDIw
MTMtMTEtMTkgIEZyw6lkw6lyaWMgV2FuZyAgPGZyZWQud2FuZ0BmcmVlLmZyPgogCiAgICAgICAg
IE1hcCB0aGUgZGlyIGF0dHJpYnV0ZSB0byB0aGUgQ1NTIGRpcmVjdGlvbiBwcm9wZXJ0eS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IDA5MzE1YjRiNDAzOGVk
MzNjNThlYzBiNDcwNGRkN2E5YTVmMzlhZTkuLmNhNzIxNTA0MDUzMDEwYTUwZWY5Njc2NGE0Mzdk
MDlkMTAwMjcyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApA
QCAtMjY4LDYgKzI2OCwxNCBAQCBib29sIEhUTUxWaWRlb0VsZW1lbnQ6Omhhc0F2YWlsYWJsZVZp
ZGVvRnJhbWUoKSBjb25zdAogICAgIHJldHVybiBwbGF5ZXIoKS0+aGFzVmlkZW8oKSAmJiBwbGF5
ZXIoKS0+aGFzQXZhaWxhYmxlVmlkZW9GcmFtZSgpOwogfQogCitQYXNzTmF0aXZlSW1hZ2VQdHIg
SFRNTFZpZGVvRWxlbWVudDo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpCit7CisgICAgaWYg
KCFwbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcGxheWVyKCktPm5h
dGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKTsKK30KKwogdm9pZCBIVE1MVmlkZW9FbGVtZW50Ojp3
ZWJraXRFbnRlckZ1bGxzY3JlZW4oRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGlzRnVs
bHNjcmVlbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuaAppbmRleCBlZjU3
ZjFkODNkMWM4YzJjMjJiNTk0N2UzZGQ0NjdlNzg5N2ZlOWEzLi4yODQ1NDRlMTJiZDdlNzc0YjRl
NjNmYTI3YjI0ZWE2MWYyZjg5MzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxWaWRlb0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1l
bnQuaApAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgLy8gVXNlZCBieSBjYW52YXMgdG8g
Z2FpbiByYXcgcGl4ZWwgYWNjZXNzCiAgICAgdm9pZCBwYWludEN1cnJlbnRGcmFtZUluQ29udGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKKyAgICBQYXNzTmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpOworCiAgICAgLy8gVXNlZCBieSBXZWJH
TCB0byBkbyBHUFUtR1BVIHRleHR1cmVzIGNvcHkgaWYgcG9zc2libGUuCiAgICAgLy8gU2VlIG1v
cmUgZGV0YWlscyBhdCBNZWRpYVBsYXllcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKCkgZGVmaW5lZCBpbiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5oLgogICAgIGJvb2wgY29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSB0eXBlLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGZsaXBZKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDViYTc4YTBiZWM3Yzk5ZDcyMmQw
MWFmZTBiYzFjZTAyNjlhNDI1YTguLjc4OTBlYjhhYmFkNzgzNjVjM2Q3MzdlN2EwNWE4MmY4YTc2
ZDY1NWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMTQ1MCw2ICsxNDUwLDE4IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIGNv
bnN0IEZsb2F0UmVjCiAKICAgICBjaGVja09yaWdpbih2aWRlbyk7CiAKKyNpZiBVU0UoQ0cpCisg
ICAgaWYgKFBhc3NOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IHZpZGVvLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRUaW1lKCkpIHsKKyAgICAgICAgYy0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLCBGbG9hdFNp
emUodmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCkpLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBkc3RSZWN0LCBzcmNSZWN0KTsKKyAgICAgICAgaWYgKHJlY3RDb250YWluc0Nh
bnZhcyhkc3RSZWN0KSkKKyAgICAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZGlkRHJhdyhkc3RSZWN0KTsKKworICAgICAgICByZXR1cm47
CisgICAgfQorI2VuZGlmCisKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmMpOwogICAgIGMtPmNsaXAoZHN0UmVjdCk7CiAgICAgYy0+dHJhbnNsYXRlKGRzdFJlY3Qu
eCgpLCBkc3RSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKaW5kZXggYzQ4ZmI4YWMwZjBkNDA0YTI1ZDQyYjdlZDIzYTAxMmI1
MzVmZDU5OC4uNmE4OGU0M2YxYzI0NTdkN2RhYjMwMzQ4OGQ5ODdmODU1NjYzYjQxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAt
NzUxLDYgKzc1MSwxMSBAQCBib29sIE1lZGlhUGxheWVyOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0
Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsCiAgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKGNvbnRleHQsIHRleHR1cmUs
IGxldmVsLCB0eXBlLCBpbnRlcm5hbEZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOwog
fQogCitQYXNzTmF0aXZlSW1hZ2VQdHIgTWVkaWFQbGF5ZXI6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dFRpbWUoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm5hdGl2ZUltYWdlRm9yQ3VycmVudFRp
bWUoKTsKK30KKwogTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllcjo6c3VwcG9y
dHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGNv
bnN0IE1lZGlhUGxheWVyU3VwcG9ydHNUeXBlQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgLy8gNC44
LjEwLjMgTUlNRSB0eXBlcyAtIFRoZSBjYW5QbGF5VHlwZSh0eXBlKSBtZXRob2QgbXVzdCByZXR1
cm4gdGhlIGVtcHR5IHN0cmluZyBpZiB0eXBlIGlzIGEgdHlwZSB0aGF0IHRoZSAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmluZGV4IGY2M2VlYjFk
MTkwM2YyODVjODg1YTAyYjVjYzFhNWU0NjExZTE5ODIuLjJhNjk2ZjIzZmM2ZmEyZTg0YWMzOWQ3
NzRiZWM2ZTA1Yjg0ZWNiY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCisjaW5jbHVkZSAiTmF0
aXZlSW1hZ2VQdHIuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQ
cml2YXRlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CkBAIC0zNzYsNiArMzc3
LDggQEAgcHVibGljOgogICAgIC8vIGh0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9jaHJv
bWUvdHJ1bmsvc3JjL2dwdS9jb21tYW5kX2J1ZmZlci9zZXJ2aWNlL2dsZXMyX2NtZF9jb3B5X3Rl
eHR1cmVfY2hyb21pdW0uY2MgdmlhIHNoYWRlcnMuCiAgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJl
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIHR5cGUsIEdDM0RlbnVtIGludGVybmFsRm9y
bWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpOwogCisgICAgUGFzc05hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKTsKKwogICAgIGVudW0gTmV0d29y
a1N0YXRlIHsgRW1wdHksIElkbGUsIExvYWRpbmcsIExvYWRlZCwgRm9ybWF0RXJyb3IsIE5ldHdv
cmtFcnJvciwgRGVjb2RlRXJyb3IgfTsKICAgICBOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5
ZXJQcml2YXRlLmgKaW5kZXggNGY5OGI1NjFiYWExZDI1MzVlNmI2YjY1YjFjYWYyMjczZTMxNTgw
Yi4uM2QzMWE0NTA0MmY5YmQ3NTc1NmM4ZWE5OTRlOTIwYWRhNGIyNmI0MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgK
QEAgLTEyMSw2ICsxMjEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXJy
ZW50RnJhbWVJbkNvbnRleHQoR3JhcGhpY3NDb250ZXh0KiBjLCBjb25zdCBJbnRSZWN0JiByKSB7
IHBhaW50KGMsIHIpOyB9CiAgICAgdmlydHVhbCBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRm
b3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQs
IEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIFBhc3NOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkgeyBy
ZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlBy
ZWxvYWQpIHsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLmgKaW5kZXggZjVhNzhjOGY3M2VlYzRjNTdk
ZGQ5YzZjNTkxOWEwNzA5ZTY1YmE1Zi4uMTU2Mjk0NGVkNmMzZDc5MTU1ODE5ZGI1MmYyMzE2MmY0
YzA0Njg1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMuaApAQCAtNDMsNiArNDMsNyBAQCBPQkpDX0NM
QVNTIEFWUGxheWVyTGF5ZXI7CiBPQkpDX0NMQVNTIEFWVVJMQXNzZXQ7CiBPQkpDX0NMQVNTIE5T
QXJyYXk7CiBPQkpDX0NMQVNTIFdlYkNvcmVBVkZNb3ZpZU9ic2VydmVyOworT0JKQ19DTEFTUyBX
ZWJDb3JlQVZGUHVsbERlbGVnYXRlOwogCiB0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCogaWQ7
CiAKQEAgLTEwNiw2ICsxMDcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVyYXRpb25EaWRDaGFu
Z2UoZG91YmxlKTsKICAgICB2b2lkIHJhdGVEaWRDaGFuZ2UoZG91YmxlKTsKIAorI2lmIEhBVkUo
QVZGT1VOREFUSU9OX1ZJREVPX09VVFBVVCkKKyAgICB2b2lkIG91dHB1dE1lZGlhRGF0YVdpbGxD
aGFuZ2UoQVZQbGF5ZXJJdGVtVmlkZW9PdXRwdXQqKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMoTWVkaWFQbGF5ZXIqKTsKIApAQCAt
MTc2LDggKzE4MSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlVmlkZW9PdXRwdXQoKTsK
ICAgICB2b2lkIGRlc3Ryb3lWaWRlb091dHB1dCgpOwogICAgIFJldGFpblB0cjxDVlBpeGVsQnVm
ZmVyUmVmPiBjcmVhdGVQaXhlbEJ1ZmZlcigpOworICAgIHZvaWQgdXBkYXRlTGFzdEltYWdlKCk7
CiAgICAgYm9vbCB2aWRlb091dHB1dEhhc0F2YWlsYWJsZUZyYW1lKCk7CiAgICAgdm9pZCBwYWlu
dFdpdGhWaWRlb091dHB1dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBQYXNzTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIE9W
RVJSSURFOworICAgIHZvaWQgd2FpdEZvclZpZGVvT3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZSgp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQpAQCAtMjE4LDcgKzIyNiw5
IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPEFWQXNzZXRJbWFnZUdlbmVyYXRvcj4gbV9pbWFn
ZUdlbmVyYXRvcjsKICNpZiBIQVZFKEFWRk9VTkRBVElPTl9WSURFT19PVVRQVVQpCiAgICAgUmV0
YWluUHRyPEFWUGxheWVySXRlbVZpZGVvT3V0cHV0PiBtX3ZpZGVvT3V0cHV0OwotICAgIFJldGFp
blB0cjxDVlBpeGVsQnVmZmVyUmVmPiBtX2xhc3RJbWFnZTsKKyAgICBSZXRhaW5QdHI8V2ViQ29y
ZUFWRlB1bGxEZWxlZ2F0ZT4gbV92aWRlb091dHB1dERlbGVnYXRlOworICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBtX2xhc3RJbWFnZTsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfdCBtX3ZpZGVv
T3V0cHV0U2VtYXBob3JlOwogI2VuZGlmCiAKICNpZiBVU0UoVklERU9UT09MQk9YKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0KaW5kZXggMWRiYmIzYTQ3NzIzYWU0MTQyYjk4MGU2OTBjN2Y5MTY2MjBh
YzUxMC4uZWMwN2M5OWRmOWE2YzYxMzI3NmFmZWFiNTVmYmQxMGFjZjBjMDE0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDLm1tCkBAIC0xMTUsNyArMTE1LDYgQEAgU09GVF9MSU5LX0NPTlNUQU5UKENv
cmVNZWRpYSwga0NNVGltZVplcm8sIENNVGltZSkKIAogI2RlZmluZSBBVlBsYXllciBnZXRBVlBs
YXllckNsYXNzKCkKICNkZWZpbmUgQVZQbGF5ZXJJdGVtIGdldEFWUGxheWVySXRlbUNsYXNzKCkK
LSNkZWZpbmUgQVZQbGF5ZXJJdGVtVmlkZW9PdXRwdXQgZ2V0QVZQbGF5ZXJJdGVtVmlkZW9PdXRw
dXRDbGFzcygpCiAjZGVmaW5lIEFWUGxheWVyTGF5ZXIgZ2V0QVZQbGF5ZXJMYXllckNsYXNzKCkK
ICNkZWZpbmUgQVZVUkxBc3NldCBnZXRBVlVSTEFzc2V0Q2xhc3MoKQogI2RlZmluZSBBVkFzc2V0
SW1hZ2VHZW5lcmF0b3IgZ2V0QVZBc3NldEltYWdlR2VuZXJhdG9yQ2xhc3MoKQpAQCAtMTk1LDYg
KzE5NCwxNyBAQCBlbnVtIE1lZGlhUGxheWVyQVZGb3VuZGF0aW9uT2JzZXJ2YXRpb25Db250ZXh0
IHsKIEBlbmQKICNlbmRpZgogCisjaWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9fT1VUUFVUKQor
QGludGVyZmFjZSBXZWJDb3JlQVZGUHVsbERlbGVnYXRlIDogTlNPYmplY3Q8QVZQbGF5ZXJJdGVt
T3V0cHV0UHVsbERlbGVnYXRlPiB7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQyogbV9jYWxsYmFjazsKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVfdCBtX3NlbWFwaG9yZTsK
K30KKy0gKGlkKWluaXRXaXRoQ2FsbGJhY2s6KE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMqKWNhbGxiYWNrOworLSAodm9pZClvdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlOihBVlBs
YXllckl0ZW1PdXRwdXQgKilzZW5kZXI7CistICh2b2lkKW91dHB1dFNlcXVlbmNlV2FzRmx1c2hl
ZDooQVZQbGF5ZXJJdGVtT3V0cHV0ICopb3V0cHV0OworQGVuZAorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RhdGljIE5TQXJyYXkgKmFzc2V0TWV0YWRhdGFLZXlOYW1lcygpOwpA
QCAtMjI4LDYgKzIzOCwxOCBAQCBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxMb2FkZXJE
ZWxlZ2F0ZVF1ZXVlKCkKIH0KICNlbmRpZgogCisjaWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9f
T1VUUFVUKQorc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFsUHVsbERlbGVnYXRlUXVldWUo
KQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IGdsb2JhbFF1ZXVlOworICAgIHN0YXRp
YyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tl
biwgXnsKKyAgICAgICAgZ2xvYmFsUXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoIldlYkNv
cmVBVkZQdWxsRGVsZWdhdGUgcXVldWUiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpOworICAgIH0p
OworICAgIHJldHVybiBnbG9iYWxRdWV1ZTsKK30KKyNlbmRpZgorCiBQYXNzT3duUHRyPE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZT4gTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qzo6Y3JlYXRlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiB7IAogICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyhwbGF5ZXIpKTsKQEAgLTI0NCw2
ICsyNjYsMTAgQEAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6TWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyhNZWRpYVBsYXkKICAgICAsIG1fb2JqY09ic2VydmVy
KGFkb3B0TlMoW1tXZWJDb3JlQVZGTW92aWVPYnNlcnZlciBhbGxvY10gaW5pdFdpdGhDYWxsYmFj
azp0aGlzXSkpCiAgICAgLCBtX3ZpZGVvRnJhbWVIYXNEcmF3bihmYWxzZSkKICAgICAsIG1faGF2
ZUNoZWNrZWRQbGF5YWJpbGl0eShmYWxzZSkKKyNpZiBIQVZFKEFWRk9VTkRBVElPTl9WSURFT19P
VVRQVVQpCisgICAgLCBtX3ZpZGVvT3V0cHV0RGVsZWdhdGUoYWRvcHROUyhbW1dlYkNvcmVBVkZQ
dWxsRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhpc10pKQorICAgICwgbV92aWRl
b091dHB1dFNlbWFwaG9yZSgwKQorI2VuZGlmCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fTE9BREVS
X0RFTEVHQVRFKQogICAgICwgbV9sb2FkZXJEZWxlZ2F0ZShhZG9wdE5TKFtbV2ViQ29yZUFWRkxv
YWRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aENhbGxiYWNrOnRoaXNdKSkKICNlbmRpZgpAQCAt
MTIyMiwxMSArMTI0OCwxNSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6OmNyZWF0ZVZpZGVvT3V0cHV0KCkKICAgICBOU0RpY3Rpb25hcnkqIGF0dHJpYnV0ZXMgPSBb
TlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVtYmVyIG51bWJl
cldpdGhVbnNpZ25lZEludDprQ1ZQaXhlbEZvcm1hdFR5cGVfMzJCR1JBXSwga0NWUGl4ZWxCdWZm
ZXJQaXhlbEZvcm1hdFR5cGVLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5p
bF07CiAjZW5kaWYKLSAgICBtX3ZpZGVvT3V0cHV0ID0gYWRvcHROUyhbW0FWUGxheWVySXRlbVZp
ZGVvT3V0cHV0IGFsbG9jXSBpbml0V2l0aFBpeGVsQnVmZmVyQXR0cmlidXRlczphdHRyaWJ1dGVz
XSk7CisgICAgbV92aWRlb091dHB1dCA9IGFkb3B0TlMoW1tnZXRBVlBsYXllckl0ZW1WaWRlb091
dHB1dENsYXNzKCkgYWxsb2NdIGluaXRXaXRoUGl4ZWxCdWZmZXJBdHRyaWJ1dGVzOmF0dHJpYnV0
ZXNdKTsKICAgICBBU1NFUlQobV92aWRlb091dHB1dCk7CiAKKyAgICBbbV92aWRlb091dHB1dCBz
ZXREZWxlZ2F0ZTptX3ZpZGVvT3V0cHV0RGVsZWdhdGUuZ2V0KCkgcXVldWU6Z2xvYmFsUHVsbERl
bGVnYXRlUXVldWUoKV07CisKICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1f
dmlkZW9PdXRwdXQuZ2V0KCldOwogCisgICAgd2FpdEZvclZpZGVvT3V0cHV0TWVkaWFEYXRhV2ls
bENoYW5nZSgpOworCiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQzo6Y3JlYXRlVmlkZW9PdXRwdXQoJXApIC0gcmV0dXJuaW5nICVwIiwgdGhpcywgbV92
aWRlb091dHB1dC5nZXQoKSk7CiB9CiAKQEAgLTEyOTcsNyArMTMyNyw0NCBAQCBib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnZpZGVvT3V0cHV0SGFzQXZhaWxhYmxlRnJh
bWUoKQogICAgIHJldHVybiBbbV92aWRlb091dHB1dCBoYXNOZXdQaXhlbEJ1ZmZlckZvckl0ZW1U
aW1lOlttX2F2UGxheWVySXRlbSBjdXJyZW50VGltZV1dOwogfQogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVvT3V0cHV0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3N0YXRpYyBjb25zdCB2b2lkKiBD
VlBpeGVsQnVmZmVyR2V0Qnl0ZVBvaW50ZXJDYWxsYmFjayh2b2lkKiBpbmZvKQoreworICAgIENW
UGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIgPSAoQ1ZQaXhlbEJ1ZmZlclJlZilpbmZvOworICAg
IENWUGl4ZWxCdWZmZXJMb2NrQmFzZUFkZHJlc3MocGl4ZWxCdWZmZXIsIGtDVlBpeGVsQnVmZmVy
TG9ja19SZWFkT25seSk7CisgICAgcmV0dXJuIENWUGl4ZWxCdWZmZXJHZXRCYXNlQWRkcmVzcyhw
aXhlbEJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkIENWUGl4ZWxCdWZmZXJSZWxlYXNlQnl0ZVBv
aW50ZXJDYWxsYmFjayh2b2lkICppbmZvLCBjb25zdCB2b2lkICopCit7CisgICAgQ1ZQaXhlbEJ1
ZmZlclJlZiBwaXhlbEJ1ZmZlciA9IChDVlBpeGVsQnVmZmVyUmVmKWluZm87CisgICAgQ1ZQaXhl
bEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVsQnVmZmVyLCBrQ1ZQaXhlbEJ1ZmZlckxvY2tf
UmVhZE9ubHkpOworfQorCitzdGF0aWMgdm9pZCBDVlBpeGVsQnVmZmVyUmVsZWFzZUluZm9DYWxs
YmFjayh2b2lkICppbmZvKQoreworICAgIENWUGl4ZWxCdWZmZXJSZWYgcGl4ZWxCdWZmZXIgPSAo
Q1ZQaXhlbEJ1ZmZlclJlZilpbmZvOworICAgIENGUmVsZWFzZShwaXhlbEJ1ZmZlcik7Cit9CisK
K3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlSW1hZ2VGcm9tUGl4ZWxCdWZmZXIo
Q1ZQaXhlbEJ1ZmZlclJlZiBwaXhlbEJ1ZmZlcikKK3sKKyAgICAvLyBwaXhlbEJ1ZmZlciB3aWxs
IGJlIG9mIHR5cGUga0NWUGl4ZWxGb3JtYXRUeXBlXzMyQkdSQS4KKyAgICBBU1NFUlQoQ1ZQaXhl
bEJ1ZmZlckdldFBpeGVsRm9ybWF0VHlwZShwaXhlbEJ1ZmZlcikgPT0ga0NWUGl4ZWxGb3JtYXRU
eXBlXzMyQkdSQSk7CisKKyAgICBzaXplX3Qgd2lkdGggPSBDVlBpeGVsQnVmZmVyR2V0V2lkdGgo
cGl4ZWxCdWZmZXIpOworICAgIHNpemVfdCBoZWlnaHQgPSBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0
KHBpeGVsQnVmZmVyKTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDVlBpeGVsQnVmZmVyR2V0
Qnl0ZXNQZXJSb3cocGl4ZWxCdWZmZXIpOworICAgIHNpemVfdCBieXRlTGVuZ3RoID0gQ1ZQaXhl
bEJ1ZmZlckdldERhdGFTaXplKHBpeGVsQnVmZmVyKTsKKyAgICBDR0JpdG1hcEluZm8gYml0bWFw
SW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0Owor
CisgICAgQ0ZSZXRhaW4ocGl4ZWxCdWZmZXIpOyAvLyBCYWxhbmNlZCBieSBDVlBpeGVsQnVmZmVy
UmVsZWFzZUluZm9DYWxsYmFjayBpbiBwcm92aWRlckNhbGxiYWNrcy4KKyAgICBDR0RhdGFQcm92
aWRlckRpcmVjdENhbGxiYWNrcyBwcm92aWRlckNhbGxiYWNrcyA9IHsgMCwgQ1ZQaXhlbEJ1ZmZl
ckdldEJ5dGVQb2ludGVyQ2FsbGJhY2ssIENWUGl4ZWxCdWZmZXJSZWxlYXNlQnl0ZVBvaW50ZXJD
YWxsYmFjaywgMCwgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2VJbmZvQ2FsbGJhY2sgfTsKKyAgICBSZXRh
aW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRl
ckNyZWF0ZURpcmVjdChwaXhlbEJ1ZmZlciwgYnl0ZUxlbmd0aCwgJnByb3ZpZGVyQ2FsbGJhY2tz
KSk7CisKKyAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIDgs
IDMyLCBieXRlc1BlclJvdywgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvLCBw
cm92aWRlci5nZXQoKSwgTlVMTCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp1cGRhdGVMYXN0
SW1hZ2UoKQogewogICAgIFJldGFpblB0cjxDVlBpeGVsQnVmZmVyUmVmPiBwaXhlbEJ1ZmZlciA9
IGNyZWF0ZVBpeGVsQnVmZmVyKCk7CiAKQEAgLTEzMDUsNyArMTM3MiwxMiBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnBhaW50V2l0aFZpZGVvT3V0cHV0KEdyYXBo
aWNzQ29udGV4dCogYwogICAgIC8vIGZvciB0aGUgcmVxdWVzdGVkIHRpbWUgaGFzIGFscmVhZHkg
YmVlbiByZXRyaWV2ZWQuIEluIHRoaXMgY2FzZSwgdGhlIGxhc3QgdmFsaWQgaW1hZ2UgKGlmIGFu
eSkKICAgICAvLyBzaG91bGQgYmUgZGlzcGxheWVkLgogICAgIGlmIChwaXhlbEJ1ZmZlcikKLSAg
ICAgICAgbV9sYXN0SW1hZ2UgPSBwaXhlbEJ1ZmZlcjsKKyAgICAgICAgbV9sYXN0SW1hZ2UgPSBj
cmVhdGVJbWFnZUZyb21QaXhlbEJ1ZmZlcihwaXhlbEJ1ZmZlci5nZXQoKSk7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cGFpbnRXaXRoVmlkZW9PdXRwdXQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHVw
ZGF0ZUxhc3RJbWFnZSgpOwogCiAgICAgaWYgKG1fbGFzdEltYWdlKSB7CiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CkBAIC0xMzEzLDIyICsx
Mzg1LDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwYWludFdp
dGhWaWRlb091dHB1dChHcmFwaGljc0NvbnRleHQqIGMKICAgICAgICAgY29udGV4dC0+c2NhbGUo
RmxvYXRTaXplKDEuMGYsIC0xLjBmKSk7CiAKICAgICAgICAgQ0dSZWN0IG91dHB1dFJlY3QgPSB7
IENHUG9pbnRaZXJvLCByZWN0LnNpemUoKSB9OwotICAgICAgICBDR1JlY3QgaW1hZ2VSZWN0ID0g
Q0dSZWN0TWFrZSgwLCAwLCBDVlBpeGVsQnVmZmVyR2V0V2lkdGgobV9sYXN0SW1hZ2UuZ2V0KCkp
LCBDVlBpeGVsQnVmZmVyR2V0SGVpZ2h0KG1fbGFzdEltYWdlLmdldCgpKSk7Ci0jaWYgUExBVEZP
Uk0oSU9TKQotICAgICAgICAvLyBjaUNvbnRleHQgZG9lcyBub3QgdXNlIGEgUmV0YWluUHRyIGZv
ciByZXN1bHRzIG9mIGNvbnRleHRXaXRoQ0dDb250ZXh0OiwgYXMgdGhlIHJldHVybmVkIHZhbHVl
Ci0gICAgICAgIC8vIGlzIGF1dG9yZWxlYXNlZCwgYW5kIHRoZXJlIGlzIG5vIG5vbi1hdXRvcmVs
ZWFzZWQgdmVyc2lvbiBvZiB0aGF0IGZ1bmN0aW9uLgotICAgICAgICBDSUNvbnRleHQqIGNpQ29u
dGV4dCA9IFtnZXRDSUNvbnRleHRDbGFzcygpIGNvbnRleHRXaXRoT3B0aW9uczpuaWxdOwotICAg
ICAgICBSZXRhaW5QdHI8Q0lJbWFnZT4gaW1hZ2UgPSBhZG9wdE5TKFtbZ2V0Q0lJbWFnZUNsYXNz
KCkgYWxsb2NdIGluaXRXaXRoQ1ZQaXhlbEJ1ZmZlcjptX2xhc3RJbWFnZS5nZXQoKV0pOwotICAg
ICAgICBSZXRhaW5QdHI8Q0dJbWFnZT4gY2dJbWFnZSA9IGFkb3B0Q0YoW2NpQ29udGV4dCBjcmVh
dGVDR0ltYWdlOmltYWdlLmdldCgpIGZyb21SZWN0OmltYWdlUmVjdF0pOwotICAgICAgICBjb250
ZXh0LT5kcmF3TmF0aXZlSW1hZ2UoY2dJbWFnZS5nZXQoKSwgRmxvYXRTaXplKGltYWdlUmVjdC5z
aXplKSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxvYXRSZWN0KG91dHB1dFJlY3QpLCBGbG9hdFJl
Y3QoaW1hZ2VSZWN0KSwgMSk7Ci0jZWxzZQorICAgICAgICBDR1JlY3QgaW1hZ2VSZWN0ID0gQ0dS
ZWN0TWFrZSgwLCAwLCBDR0ltYWdlR2V0V2lkdGgobV9sYXN0SW1hZ2UuZ2V0KCkpLCBDR0ltYWdl
R2V0SGVpZ2h0KG1fbGFzdEltYWdlLmdldCgpKSk7CiAKLSAgICAgICAgLy8gY2lDb250ZXh0IGRv
ZXMgbm90IHVzZSBhIFJldGFpblB0ciBmb3IgcmVzdWx0cyBvZiBjb250ZXh0V2l0aENHQ29udGV4
dDosIGFzIHRoZSByZXR1cm5lZCB2YWx1ZQotICAgICAgICAvLyBpcyBhdXRvcmVsZWFzZWQsIGFu
ZCB0aGVyZSBpcyBubyBub24tYXV0b3JlbGVhc2VkIHZlcnNpb24gb2YgdGhhdCBmdW5jdGlvbi4K
LSAgICAgICAgQ0lDb250ZXh0KiBjaUNvbnRleHQgPSBbQ0lDb250ZXh0IGNvbnRleHRXaXRoQ0dD
b250ZXh0OmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIG9wdGlvbnM6bmlsXTsKLSAgICAgICAg
UmV0YWluUHRyPENJSW1hZ2U+IGltYWdlID0gYWRvcHROUyhbW0NJSW1hZ2UgYWxsb2NdIGluaXRX
aXRoQ1ZJbWFnZUJ1ZmZlcjptX2xhc3RJbWFnZS5nZXQoKSBvcHRpb25zOkB7IGtDSUltYWdlQ29s
b3JTcGFjZTogKGlkKWRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSB9XSk7Ci0gICAgICAgIFtjaUNv
bnRleHQgZHJhd0ltYWdlOmltYWdlLmdldCgpIGluUmVjdDpvdXRwdXRSZWN0IGZyb21SZWN0Omlt
YWdlUmVjdF07Ci0jZW5kaWYKKyAgICAgICAgY29udGV4dC0+ZHJhd05hdGl2ZUltYWdlKG1fbGFz
dEltYWdlLmdldCgpLCBGbG9hdFNpemUoaW1hZ2VSZWN0LnNpemUpLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBGbG9hdFJlY3Qob3V0cHV0UmVjdCksIEZsb2F0UmVjdChpbWFnZVJlY3QpKTsKIAogICAg
ICAgICAvLyBJZiB3ZSBoYXZlIGNyZWF0ZWQgYW4gQVZBc3NldEltYWdlR2VuZXJhdG9yIGluIHRo
ZSBwYXN0IGR1ZSB0byBtX3ZpZGVvT3V0cHV0IG5vdCBoYXZpbmcgYW4gYXZhaWxhYmxlCiAgICAg
ICAgIC8vIHZpZGVvIGZyYW1lLCBkZXN0cm95IGl0IG5vdyB0aGF0IGl0IGlzIG5vIGxvbmdlciBu
ZWVkZWQuCkBAIC0xMzM2LDYgKzEzOTUsMzEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb25PYmpDOjpwYWludFdpdGhWaWRlb091dHB1dChHcmFwaGljc0NvbnRleHQqIGMKICAg
ICAgICAgICAgIGRlc3Ryb3lJbWFnZUdlbmVyYXRvcigpOwogICAgIH0KIH0KKworUGFzc05hdGl2
ZUltYWdlUHRyIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6Om5hdGl2ZUltYWdl
Rm9yQ3VycmVudFRpbWUoKQoreworICAgIHVwZGF0ZUxhc3RJbWFnZSgpOworICAgIHJldHVybiBt
X2xhc3RJbWFnZS5nZXQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOjp3YWl0Rm9yVmlkZW9PdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKCkKK3sKKyAgICBp
ZiAoIW1fdmlkZW9PdXRwdXRTZW1hcGhvcmUpCisgICAgICAgIG1fdmlkZW9PdXRwdXRTZW1hcGhv
cmUgPSBkaXNwYXRjaF9zZW1hcGhvcmVfY3JlYXRlKDApOworCisgICAgW21fdmlkZW9PdXRwdXQg
cmVxdWVzdE5vdGlmaWNhdGlvbk9mTWVkaWFEYXRhQ2hhbmdlV2l0aEFkdmFuY2VJbnRlcnZhbDow
XTsKKworICAgIC8vIFdhaXQgZm9yIDEgc2Vjb25kLgorICAgIGxvbmcgcmVzdWx0ID0gZGlzcGF0
Y2hfc2VtYXBob3JlX3dhaXQobV92aWRlb091dHB1dFNlbWFwaG9yZSwgZGlzcGF0Y2hfdGltZSgw
LCAxICogTlNFQ19QRVJfU0VDKSk7CisKKyAgICBpZiAocmVzdWx0KQorICAgICAgICBMT0coTWVk
aWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp3YWl0Rm9yVmlkZW9PdXRw
dXRNZWRpYURhdGFXaWxsQ2hhbmdlKCVwKSB0aW1lZCBvdXQiLCB0aGlzKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpvdXRwdXRNZWRpYURhdGFXaWxsQ2hh
bmdlKEFWUGxheWVySXRlbVZpZGVvT3V0cHV0KikKK3sKKyAgICBkaXNwYXRjaF9zZW1hcGhvcmVf
c2lnbmFsKG1fdmlkZW9PdXRwdXRTZW1hcGhvcmUpOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
RU5DUllQVEVEX01FRElBKSB8fCBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQpAQCAtMTk4Nyw0
ICsyMDcxLDI3IEBAIE5TQXJyYXkqIGl0ZW1LVk9Qcm9wZXJ0aWVzKCkKIEBlbmQKICNlbmRpZgog
CisjaWYgSEFWRShBVkZPVU5EQVRJT05fVklERU9fT1VUUFVUKQorQGltcGxlbWVudGF0aW9uIFdl
YkNvcmVBVkZQdWxsRGVsZWdhdGUKKy0gKGlkKWluaXRXaXRoQ2FsbGJhY2s6KE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMqKWNhbGxiYWNrCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoc2VsZikKKyAgICAgICAgbV9jYWxsYmFjayA9IGNhbGxiYWNrOworICAg
IHJldHVybiBzZWxmOworfQorCistICh2b2lkKW91dHB1dE1lZGlhRGF0YVdpbGxDaGFuZ2U6KEFW
UGxheWVySXRlbVZpZGVvT3V0cHV0ICopb3V0cHV0Cit7CisgICAgbV9jYWxsYmFjay0+b3V0cHV0
TWVkaWFEYXRhV2lsbENoYW5nZShvdXRwdXQpOworfQorCistICh2b2lkKW91dHB1dFNlcXVlbmNl
V2FzRmx1c2hlZDooQVZQbGF5ZXJJdGVtVmlkZW9PdXRwdXQgKilvdXRwdXQKK3sKKyAgICBVTlVT
RURfUEFSQU0ob3V0cHV0KTsKKyAgICAvLyBOby1vcC4KK30KK0BlbmQKKyNlbmRpZgorCiAjZW5k
aWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217339</attachid>
            <date>2013-11-19 15:12:16 -0800</date>
            <delta_ts>2014-02-15 00:18:49 -0800</delta_ts>
            <desc>Follow up patch to address Darin&apos;s comments</desc>
            <filename>bug-124599-20131119151216.patch</filename>
            <type>text/plain</type>
            <size>7025</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU5NTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGFiODVlMmZjYmU2OTcx
NDRmMGExNTViZTUzZjU5YjZiODc0YjIxMy4uMTJjZTQ0OTYzZGJkYzgzY2JkZjA5ZDc5NDE4MDY0
NTQzOGU0YTcxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDEzLTExLTE5ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCisgICAgICAgIFtNYWNdIDEwWCBzbG93ZXIg
dGhhbiBDaHJvbWUgd2hlbiBkcmF3aW5nIGEgdmlkZW8gaW50byBhIGNhbnZhcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NTk5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9sbG93IHVwIHBhdGNoIHRv
IHIxNTk1MTggdG8gYWRkcmVzcyBEYXJpbidzIHBvc3QtY29tbWl0IHJldmlldy4KKworICAgICAg
ICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlk
ZW9FbGVtZW50OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKTogVXNlIG51bGxwdHIuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dFRpbWUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6TWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6fk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMpOiBDbGVhciB0aGUKKyAgICAgICAgICAgICAgICBBVlBsYXllckl0ZW1WaWRlb091dHB1
dCdzIGRlbGVnYXRlIGNhbGxiYWNrLgorICAgICAgICAoV2ViQ29yZTo6Q1ZQaXhlbEJ1ZmZlckdl
dEJ5dGVQb2ludGVyQ2FsbGJhY2spOiBVc2Ugc3RhdGljX2Nhc3QuCisgICAgICAgIChXZWJDb3Jl
OjpDVlBpeGVsQnVmZmVyUmVsZWFzZUJ5dGVQb2ludGVyQ2FsbGJhY2spOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNWUGl4ZWxCdWZmZXJSZWxlYXNlSW5mb0NhbGxiYWNrKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkNvcmVBVkZQdWxsRGVsZWdhdGUgaW5pdFdpdGhDYWxsYmFjazpdKTogU3Bh
Y2UgY2hhbmdlcy4KKyAgICAgICAgKC1bV2ViQ29yZUFWRlB1bGxEZWxlZ2F0ZSBzZXRDYWxsYmFj
azpdKTogQWRkZWQuCisgICAgICAgICgtW1dlYkNvcmVBVkZQdWxsRGVsZWdhdGUgb3V0cHV0TWVk
aWFEYXRhV2lsbENoYW5nZTpdKTogQ2hlY2sgdGhlIHZhbHVlIG9mIG1fY2FsbGJhY2suCisKKzIw
MTMtMTEtMTkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKICAgICAgICAgW01h
Y10gOSBXZWJHTCBjb25mb3JtYW5jZSBmYWlsdXJlcyBhZnRlciByMTU5NTE4LgogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NjA4CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCmluZGV4IGNhNzIxNTA0MDUzMDEwYTUwZWY5
Njc2NGE0MzdkMDlkMTAwMjcyODEuLjdhYWE1NjlmYWIyOWVhYWE5OTg2ODU5Mzc3NTQ1YTE0MTQy
M2Y2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApAQCAtMjcx
LDcgKzI3MSw3IEBAIGJvb2wgSFRNTFZpZGVvRWxlbWVudDo6aGFzQXZhaWxhYmxlVmlkZW9GcmFt
ZSgpIGNvbnN0CiBQYXNzTmF0aXZlSW1hZ2VQdHIgSFRNTFZpZGVvRWxlbWVudDo6bmF0aXZlSW1h
Z2VGb3JDdXJyZW50VGltZSgpCiB7CiAgICAgaWYgKCFwbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIHBsYXllcigpLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRUaW1lKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCmluZGV4IDNkMzFhNDUwNDJmOWJk
NzU3NTZjOGVhOTk0ZTkyMGFkYTRiMjZiNDMuLjUzZTQwZWM3MTk1ZGE5ZGRhOGMxMTA0ZjVjODJj
NWQwYTJhZDVjOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCkBAIC0xMjEsNyArMTIxLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KEdyYXBoaWNzQ29udGV4
dCogYywgY29uc3QgSW50UmVjdCYgcikgeyBwYWludChjLCByKTsgfQogICAgIHZpcnR1YWwgYm9v
bCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0sIGJvb2wsIGJvb2wp
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBQYXNzTmF0aXZlSW1hZ2VQdHIgbmF0aXZl
SW1hZ2VGb3JDdXJyZW50VGltZSgpIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbnVsbHB0cjsg
fQogCiAgICAgdmlydHVhbCB2b2lkIHNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlByZWxvYWQpIHsg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQppbmRleCAzNjNhZDg0MDBhMjliZmY4NGU1ZmY4MWI1
MDUxNDM3NzhlNDQwODU5Li41ZDg2NjM4OTZmMTFhYmIyZDYxNDkxMmFmMmIxMDkyZDRkYWRkMzAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KQEAgLTE5NiwxMCArMTk2LDExIEBAIGVudW0gTWVk
aWFQbGF5ZXJBVkZvdW5kYXRpb25PYnNlcnZhdGlvbkNvbnRleHQgewogCiAjaWYgSEFWRShBVkZP
VU5EQVRJT05fVklERU9fT1VUUFVUKQogQGludGVyZmFjZSBXZWJDb3JlQVZGUHVsbERlbGVnYXRl
IDogTlNPYmplY3Q8QVZQbGF5ZXJJdGVtT3V0cHV0UHVsbERlbGVnYXRlPiB7Ci0gICAgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyogbV9jYWxsYmFjazsKKyAgICBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDICptX2NhbGxiYWNrOwogICAgIGRpc3BhdGNoX3NlbWFw
aG9yZV90IG1fc2VtYXBob3JlOwogfQotLSAoaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyopY2FsbGJhY2s7CistIChpZClpbml0V2l0aENhbGxi
YWNrOihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDICopY2FsbGJhY2s7CistICh2
b2lkKXNldENhbGxiYWNrOihNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDKiljYWxs
YmFjazsKIC0gKHZvaWQpb3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZTooQVZQbGF5ZXJJdGVtT3V0
cHV0ICopc2VuZGVyOwogLSAodm9pZClvdXRwdXRTZXF1ZW5jZVdhc0ZsdXNoZWQ6KEFWUGxheWVy
SXRlbU91dHB1dCAqKW91dHB1dDsKIEBlbmQKQEAgLTI2OCw3ICsyNjksNyBAQCBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDKE1lZGlhUGxheQogICAgICwgbV9oYXZlQ2hlY2tlZFBsYXlhYmlsaXR5KGZhbHNlKQogI2lm
IEhBVkUoQVZGT1VOREFUSU9OX1ZJREVPX09VVFBVVCkKICAgICAsIG1fdmlkZW9PdXRwdXREZWxl
Z2F0ZShhZG9wdE5TKFtbV2ViQ29yZUFWRlB1bGxEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhDYWxs
YmFjazp0aGlzXSkpCi0gICAgLCBtX3ZpZGVvT3V0cHV0U2VtYXBob3JlKDApCisgICAgLCBtX3Zp
ZGVvT3V0cHV0U2VtYXBob3JlKG51bGxwdHIpCiAjZW5kaWYKICNpZiBIQVZFKEFWRk9VTkRBVElP
Tl9MT0FERVJfREVMRUdBVEUpCiAgICAgLCBtX2xvYWRlckRlbGVnYXRlKGFkb3B0TlMoW1tXZWJD
b3JlQVZGTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoQ2FsbGJhY2s6dGhpc10pKQpAQCAt
Mjk3LDYgKzI5OCwxMCBAQCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp+TWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQygpCiAgICAgW21fbG9hZGVyRGVsZWdhdGUu
Z2V0KCkgc2V0Q2FsbGJhY2s6MF07CiAgICAgW1ttX2F2QXNzZXQuZ2V0KCkgcmVzb3VyY2VMb2Fk
ZXJdIHNldERlbGVnYXRlOm5pbCBxdWV1ZTowXTsKICNlbmRpZgorI2lmIEhBVkUoQVZGT1VOREFU
SU9OX1ZJREVPX09VVFBVVCkKKyAgICBbbV92aWRlb091dHB1dERlbGVnYXRlIHNldENhbGxiYWNr
OjBdOworICAgIFttX3ZpZGVvT3V0cHV0IHNldERlbGVnYXRlOm5pbCBxdWV1ZTowXTsKKyNlbmRp
ZgogICAgIGNhbmNlbExvYWQoKTsKIH0KIApAQCAtMTMyOSwyMCArMTMzNCwyMCBAQCBib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnZpZGVvT3V0cHV0SGFzQXZhaWxhYmxl
RnJhbWUoKQogCiBzdGF0aWMgY29uc3Qgdm9pZCogQ1ZQaXhlbEJ1ZmZlckdldEJ5dGVQb2ludGVy
Q2FsbGJhY2sodm9pZCogaW5mbykKIHsKLSAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVy
ID0gKENWUGl4ZWxCdWZmZXJSZWYpaW5mbzsKKyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVm
ZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJlZj4oaW5mbyk7CiAgICAgQ1ZQaXhlbEJ1
ZmZlckxvY2tCYXNlQWRkcmVzcyhwaXhlbEJ1ZmZlciwga0NWUGl4ZWxCdWZmZXJMb2NrX1JlYWRP
bmx5KTsKICAgICByZXR1cm4gQ1ZQaXhlbEJ1ZmZlckdldEJhc2VBZGRyZXNzKHBpeGVsQnVmZmVy
KTsKIH0KIAotc3RhdGljIHZvaWQgQ1ZQaXhlbEJ1ZmZlclJlbGVhc2VCeXRlUG9pbnRlckNhbGxi
YWNrKHZvaWQgKmluZm8sIGNvbnN0IHZvaWQgKikKK3N0YXRpYyB2b2lkIENWUGl4ZWxCdWZmZXJS
ZWxlYXNlQnl0ZVBvaW50ZXJDYWxsYmFjayh2b2lkKiBpbmZvLCBjb25zdCB2b2lkKikKIHsKLSAg
ICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gKENWUGl4ZWxCdWZmZXJSZWYpaW5mbzsK
KyAgICBDVlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1
ZmZlclJlZj4oaW5mbyk7CiAgICAgQ1ZQaXhlbEJ1ZmZlclVubG9ja0Jhc2VBZGRyZXNzKHBpeGVs
QnVmZmVyLCBrQ1ZQaXhlbEJ1ZmZlckxvY2tfUmVhZE9ubHkpOwogfQogCi1zdGF0aWMgdm9pZCBD
VlBpeGVsQnVmZmVyUmVsZWFzZUluZm9DYWxsYmFjayh2b2lkICppbmZvKQorc3RhdGljIHZvaWQg
Q1ZQaXhlbEJ1ZmZlclJlbGVhc2VJbmZvQ2FsbGJhY2sodm9pZCogaW5mbykKIHsKLSAgICBDVlBp
eGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gKENWUGl4ZWxCdWZmZXJSZWYpaW5mbzsKKyAgICBD
VlBpeGVsQnVmZmVyUmVmIHBpeGVsQnVmZmVyID0gc3RhdGljX2Nhc3Q8Q1ZQaXhlbEJ1ZmZlclJl
Zj4oaW5mbyk7CiAgICAgQ0ZSZWxlYXNlKHBpeGVsQnVmZmVyKTsKIH0KIApAQCAtMjA3MCw3ICsy
MDc1LDcgQEAgTlNBcnJheSogaXRlbUtWT1Byb3BlcnRpZXMoKQogCiAjaWYgSEFWRShBVkZPVU5E
QVRJT05fVklERU9fT1VUUFVUKQogQGltcGxlbWVudGF0aW9uIFdlYkNvcmVBVkZQdWxsRGVsZWdh
dGUKLS0gKGlkKWluaXRXaXRoQ2FsbGJhY2s6KE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakMqKWNhbGxiYWNrCistIChpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb25PYmpDICopY2FsbGJhY2sKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRd
OwogICAgIGlmIChzZWxmKQpAQCAtMjA3OCw5ICsyMDgzLDE1IEBAIE5TQXJyYXkqIGl0ZW1LVk9Q
cm9wZXJ0aWVzKCkKICAgICByZXR1cm4gc2VsZjsKIH0KIAorLSAodm9pZClzZXRDYWxsYmFjazoo
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQyAqKWNhbGxiYWNrCit7CisgICAgbV9j
YWxsYmFjayA9IGNhbGxiYWNrOworfQorCiAtICh2b2lkKW91dHB1dE1lZGlhRGF0YVdpbGxDaGFu
Z2U6KEFWUGxheWVySXRlbVZpZGVvT3V0cHV0ICopb3V0cHV0CiB7Ci0gICAgbV9jYWxsYmFjay0+
b3V0cHV0TWVkaWFEYXRhV2lsbENoYW5nZShvdXRwdXQpOworICAgIGlmIChtX2NhbGxiYWNrKQor
ICAgICAgICBtX2NhbGxiYWNrLT5vdXRwdXRNZWRpYURhdGFXaWxsQ2hhbmdlKG91dHB1dCk7CiB9
CiAKIC0gKHZvaWQpb3V0cHV0U2VxdWVuY2VXYXNGbHVzaGVkOihBVlBsYXllckl0ZW1WaWRlb091
dHB1dCAqKW91dHB1dAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>