<?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>158715</bug_id>
          
          <creation_ts>2016-06-13 18:08:14 -0700</creation_ts>
          <short_desc>[iOS] PDFDocumentImage should cache only a sub image of the PDF when caching the whole image is expensive</short_desc>
          <delta_ts>2016-07-18 15:47:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=157857</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1202031</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-13 18:08:14 -0700</bug_when>
    <thetext>This is a follow up for the bug https://bugs.webkit.org/show_bug.cgi?id=157857.

This bug was partially fixed in http://trac.webkit.org/changeset/201629 for low end devices whose ram sizes are less than 1GB ram. The bug was not addressed for higher end devices which larger ram sizes.

We need to use some heuristic than can work for all ram sizes. We can say, for every 1GB of ram we allow 16MB memory increase in the PDF cachedImage size. Or more formally, the PDF cachedImage will be created only:

    if (ramSize() / PDF_cachedImage_size &gt; 1GB / 16MB)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1202032</commentid>
    <comment_count>1</comment_count>
      <attachid>281219</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-06-13 18:09:47 -0700</bug_when>
    <thetext>Created attachment 281219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1203929</commentid>
    <comment_count>2</comment_count>
      <attachid>281219</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-06-20 16:15:15 -0700</bug_when>
    <thetext>Comment on attachment 281219
Patch

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

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:152
&gt; +    if (ramSize() / ImageBuffer::compatibleBufferSize(dstRect.size(), context).area() &lt; memoryThreshold / maxArea) {

Can compatibleBufferSize return 0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208976</commentid>
    <comment_count>3</comment_count>
      <attachid>283110</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-07 23:01:50 -0700</bug_when>
    <thetext>Created attachment 283110
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209278</commentid>
    <comment_count>4</comment_count>
      <attachid>283201</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-08 15:03:37 -0700</bug_when>
    <thetext>Created attachment 283201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1209739</commentid>
    <comment_count>5</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-11 12:10:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 281219 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=281219&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:152
&gt; &gt; +    if (ramSize() / ImageBuffer::compatibleBufferSize(dstRect.size(), context).area() &lt; memoryThreshold / maxArea) {
&gt; 
&gt; Can compatibleBufferSize return 0?

I changed the patch to allocate memory for a rectangle of the image only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210583</commentid>
    <comment_count>6</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-13 12:23:21 -0700</bug_when>
    <thetext>Can I get this patch reviewed? Any feedback would be also very helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210610</commentid>
    <comment_count>7</comment_count>
      <attachid>283201</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-07-13 13:16:16 -0700</bug_when>
    <thetext>Comment on attachment 283201
Patch

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

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:146
&gt; +    // Moving coordinates to -srcRect.location() =&gt; srcContext(srcRect.x(), srcRect.y()) -&gt; dstContext(0, 0)
&gt; +    // Moving coordinates to dstRect.location() =&gt; srcContext(0, 0) -&gt; dstContext(dstRect.x(), dstRect.y())
&gt; +    // Combining both =&gt; srcContext(srcRect.x(), srcRect.y()) -&gt; dstContext(dstRect.x(), dstRect.y())
&gt; +    context.translate(dstRect.x() - srcRect.x(), dstRect.y() - srcRect.y());

This seems like a bug fix, so can you make a layout test for it?

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:170
&gt; +    FloatRect rect = context.clipBounds();
&gt; +    rect.setX(std::max(rect.center().x() - maxSize.width() / 2, dstRect.x()));
&gt; +    rect.setY(std::max(rect.center().y() - maxSize.height() / 2, dstRect.y()));
&gt; +
&gt; +    // Cover as much as we could from the dstRect.
&gt; +    rect.setWidth(std::min(maxSize.width(), dstRect.width()));
&gt; +    rect.setHeight(std::min(maxSize.height(), dstRect.height()));

It&apos;s hard to follow this logic, and I&apos;m not sure if rect will always cover destRect. Can you rewrite this using shiftXEdgeTo() etc?

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:214
&gt; +    if (s_allDecodedDataSize + m_cachedImageRect.size().area() * 4 - m_cachedBytes &gt; s_maxDecodedDataSize) {
&gt; +        destroyDecodedData();

Should m_cachedImageRect be left as a valid rectangle if we didn&apos;t actually cache anything?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211021</commentid>
    <comment_count>8</comment_count>
      <attachid>283654</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-14 10:04:24 -0700</bug_when>
    <thetext>Created attachment 283654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211025</commentid>
    <comment_count>9</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-14 10:07:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/25876032&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211036</commentid>
    <comment_count>10</comment_count>
      <attachid>283201</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-14 10:27:07 -0700</bug_when>
    <thetext>Comment on attachment 283201
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:146
&gt;&gt; +    context.translate(dstRect.x() - srcRect.x(), dstRect.y() - srcRect.y());
&gt; 
&gt; This seems like a bug fix, so can you make a layout test for it?

Done. But I had to add an internal setting to disable caching the PDF image to expose the bug. The new test fails without this fix.

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:170
&gt;&gt; +    rect.setHeight(std::min(maxSize.height(), dstRect.height()));
&gt; 
&gt; It&apos;s hard to follow this logic, and I&apos;m not sure if rect will always cover destRect. Can you rewrite this using shiftXEdgeTo() etc?

The size of dstRect is always the whole image size. Drawing the image relies on clipping the graphics context to the dirty rectangle. Because we scale the cached image rectangle by the scaling factor, this means we have to allocate memory for imageSize * scaleFator which might exceed the memory limit of the device.

Instead we try to cover the dirty rectangle and get as much as we could around it. So I start from the center of the dirty rectangle and get the maximum rectangle that is smaller than the memory limit. This means rect may not cover dstRect.

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:214
&gt;&gt; +        destroyDecodedData();
&gt; 
&gt; Should m_cachedImageRect be left as a valid rectangle if we didn&apos;t actually cache anything?

destroyDecodedData() now sets m_cachedImageRect to an empty rectangle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211039</commentid>
    <comment_count>11</comment_count>
      <attachid>283658</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-14 10:34:45 -0700</bug_when>
    <thetext>Created attachment 283658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211600</commentid>
    <comment_count>12</comment_count>
      <attachid>283658</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2016-07-15 15:23:49 -0700</bug_when>
    <thetext>Comment on attachment 283658
Patch

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

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:154
&gt; +    // Moving coordinates to -srcRect.location() =&gt; srcContext(srcRect.x(), srcRect.y()) -&gt; dstContext(0, 0)
&gt; +    // Moving coordinates to dstRect.location() =&gt; srcContext(0, 0) -&gt; dstContext(dstRect.x(), dstRect.y())
&gt; +    // Combining both =&gt; srcContext(srcRect.x(), srcRect.y()) -&gt; dstContext(dstRect.x(), dstRect.y())

I don&apos;t understand what these comments mean.

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:163
&gt; +// To avoid the jetsam on iOS, we are going to limit the size of all the PDF cachedImages to be 64MB.
&gt; +static const size_t s_maxCachedImageSide = 4 * KB;
&gt; +static const size_t s_maxCachedImageSize = s_maxCachedImageSide * s_maxCachedImageSide * 4;

Isn&apos;t that 64KB, not 64MB?

Also, maybe we should use Edge rather than Side, because I thought it was a typo :)

&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:224
&gt; +    // Cache the PDF image only if the size of the new image won&apos;t exceed the limit

Nit: missing .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211678</commentid>
    <comment_count>13</comment_count>
      <attachid>283820</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-15 17:05:15 -0700</bug_when>
    <thetext>Created attachment 283820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211692</commentid>
    <comment_count>14</comment_count>
      <attachid>283826</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-15 17:18:58 -0700</bug_when>
    <thetext>Created attachment 283826
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1211693</commentid>
    <comment_count>15</comment_count>
      <attachid>283658</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-15 17:25:42 -0700</bug_when>
    <thetext>Comment on attachment 283658
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:154
&gt;&gt; +    // Combining both =&gt; srcContext(srcRect.x(), srcRect.y()) -&gt; dstContext(dstRect.x(), dstRect.y())
&gt; 
&gt; I don&apos;t understand what these comments mean.

I fixed the comment but here is more explanation I used because the original code confused me:

The following translation 

    context.translate(dstRect.x() - srcRect.x(), dstRect.y() - srcRect.y());

means a src point will be drawn at a dst point according to the following transformation:

| dstX |   | 1  0  dstRect.x() - srcRect.x() | | srcX |   | srcX + dstRect.x() - srcRect.x() |
| dstY | = | 0  1  dstRect.y() - srcRect.y() | | srcY | = | srcY + dstRect.y() - srcRect.y() |
|   1  |   | 0  0             1              | |  1   |   |                1                 |

If we want to get which src point will be drawn at the top-left corner of dstRect we can use the following equality

| dstRect.x() | = | srcX + dstRect.x() - srcRect.x() |                                | srcX |   | srcRect.x() |
| dstRect.y() | = | srcY + dstRect.y() - srcRect.y() |, but this can only happen when | srcY | = | srcRect.y() |
|      1      | = |                1                 |                                |   1  |   |      1      |

This means the top-left corner of the srcRect will be drawn at the top-left corner of dstRect, or:

| srcRect.x() |                  | dstRect.x() |
| srcRect.y() | will be drawn at | dstRect.y() |
|      1      |                  |      1      |

The rest of the points will be mapped the same way such that the srcRect will be drawn in dstRect.

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:163
&gt;&gt; +static const size_t s_maxCachedImageSize = s_maxCachedImageSide * s_maxCachedImageSide * 4;
&gt; 
&gt; Isn&apos;t that 64KB, not 64MB?
&gt; 
&gt; Also, maybe we should use Edge rather than Side, because I thought it was a typo :)

It was wrong to use the macro KB in this definition. What I meant was:

1. The maximum memory size for the cachedPDFImage = 64 MB
2. This means the maximum area of the cachedPDFImage = 64M / 4 = 16M pixels
3. If we choose cachedPDFImage to be square, then the maximum length of the cachedPDFImage side = sqrt(16M) = 4K pixels.

I changed the naming and the definition to remove the confusion.

&gt;&gt; Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp:224
&gt;&gt; +    // Cache the PDF image only if the size of the new image won&apos;t exceed the limit
&gt; 
&gt; Nit: missing .

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212148</commentid>
    <comment_count>16</comment_count>
      <attachid>283826</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-18 15:47:32 -0700</bug_when>
    <thetext>Comment on attachment 283826
Patch

Clearing flags on attachment: 283826

Committed r203378: &lt;http://trac.webkit.org/changeset/203378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212149</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-18 15:47:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>281219</attachid>
            <date>2016-06-13 18:09:47 -0700</date>
            <delta_ts>2016-07-07 23:01:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158715-20160613181122.patch</filename>
            <type>text/plain</type>
            <size>2519</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNjQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDNmMmE0ZTliZWMyOTY4
MDhhMDliMjI1ZWMzOWY1ZDgzNzc3ZmY0OC4uMmRlNjg3M2MzYTBjZTIzNGQ0MDJmOWFlOTdmZDNk
NjAxOTA1OTNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE2LTA2LTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgW2lPU10g
UERGRG9jdW1lbnRJbWFnZSBzaG91bGQgbm90IGNyZWF0ZSBhIGNhY2hlZCBpbWFnZSBsYXJnZXIg
dGhhbiB3aGF0IHRoZSBkZXZpY2UgY2FuIGhhbmRsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIGZvbGxvdyB1cCBmb3IgYnVnIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc4NTcuCisgICAgICAgIFRoZSBi
dWcgd2FzIGZpeGVkIGZvciBsb3cgZW5kIGRldmljZXMgd2hvc2UgcmFtU2l6ZXMgaXMgbGVzcyB0
aGFuIDFHQi4gQnV0CisgICAgICAgIHdlIG5lZWQgdG8gZml4IGluIGdlbmVyYWwgZm9yIGFsbCBy
YW1TaXplcy4gVGhlIGZvbGxvd2luZyBoZXVyaXN0aWMgY2FuIGJlCisgICAgICAgIHVzZWQ6IGlm
IHRoZSByYW1TaXplKCkgcmVsYXRpdmUgdG8gdGhlIGltYWdlIHNpemUgaXMgZ3JlYXRlciB0aGFu
IDFHQi8xNk1CCisgICAgICAgIGNyZWF0ZSB0aGUgUERGIGNhY2hlZEltYWdlLiBPdGhlcndpc2Ug
ZG8gbm90IGNyZWF0ZSBpdCBhbmQgZHJhdyBldmVyeSB0aWxlCisgICAgICAgIGRpcmVjdGx5IGZy
b20gdGhlIFBERkRvY3VtZW50SW1hZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1h
Z2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorCiAyMDE2LTA2LTAzICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXNvdXJjZVJlc3BvbnNlQmFzZSBj
bGVhbnVwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCAzMDYyMmZiMmQyMTZiN2JmOTBhMzBmNTE3NDNm
OWU2MDViOTJlNGU4Li44ZTI2ZTdkNDEwMTUyNmNiNWFhNmI5ZTllNTc5NmMzZjM4YTUyNmY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcApAQCAtMTQ1LDExICsxNDUsMTEgQEAgc3RhdGljIHZvaWQgdHJhbnNm
b3JtQ29udGV4dEZvclBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRSZWMKIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0KQogewogI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBPbiBpT1Ms
IGlmIHRoZSBwaHlzaWNhbCBtZW1vcnkgaXMgbGVzcyB0aGFuIDFHQiwgZG8gbm90IGFsbG9jYXRl
IG1vcmUgdGhhbiAxNk1CIGZvciB0aGUgUERGIGNhY2hlZEltYWdlLgorICAgIC8vIE9uIGlPUywg
YWxsb3cgY3JlYXRpbmcgUERGIGNhY2hlZEltYWdlIG9ubHkgaWYgdGhlIHJhbSBzaXplIHJlbGF0
aXZlIHRvIHRoZSBpbWFnZSBzaXplIGlzIGdyZWF0ZXIgdGhhbiAxR0IvMTZNQgogICAgIGNvbnN0
IHNpemVfdCBtZW1vcnlUaHJlc2hvbGQgPSBXVEY6OkdCOwogICAgIGNvbnN0IHNpemVfdCBtYXhB
cmVhID0gMTYgKiBXVEY6Ok1CIC8gNDsgLy8gMTYgTUIgbWF4aW11bSBzaXplLCBkaXZpZGVkIGJ5
IGEgcm91Z2ggY29zdCBvZiA0IGJ5dGVzIHBlciBwaXhlbCBvZiBhcmVhLgogICAgIAotICAgIGlm
IChyYW1TaXplKCkgPD0gbWVtb3J5VGhyZXNob2xkICYmIEltYWdlQnVmZmVyOjpjb21wYXRpYmxl
QnVmZmVyU2l6ZShkc3RSZWN0LnNpemUoKSwgY29udGV4dCkuYXJlYSgpID49IG1heEFyZWEpIHsK
KyAgICBpZiAocmFtU2l6ZSgpIC8gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGRz
dFJlY3Quc2l6ZSgpLCBjb250ZXh0KS5hcmVhKCkgPCBtZW1vcnlUaHJlc2hvbGQgLyBtYXhBcmVh
KSB7CiAgICAgICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBudWxscHRyOwogICAgICAgICByZXR1
cm47CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283110</attachid>
            <date>2016-07-07 23:01:50 -0700</date>
            <delta_ts>2016-07-08 15:03:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158715-20160707230115.patch</filename>
            <type>text/plain</type>
            <size>9867</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyOTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZjYmQyNGRkMGQwYjM5
OGFhNzQxMWNhMjEwZTFhMDI0OWVlZGYyYS4uYTQ5YzkyOGEzNWMwMmM1ZTY4ODM3YTQxODRlNGIw
MTlhM2MzY2IyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTA3LTA3ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgW2lPU10g
UERGRG9jdW1lbnRJbWFnZSBzaG91bGQgY2FjaGUgb25seSBhIHN1YiBpbWFnZSBvZiB0aGUgUERG
IHdoZW4gY2FjaGluZyB0aGUgd2hvbGUgaW1hZ2UgaXMgZXhwZW5zaXZlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg3MTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb3IgaU9TLCB3ZSBuZWVkIHRvIGVu
c3VyZSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGVkIFBERiBpbWFnZXMgd2lsbCBub3QKKyAgICAgICAg
ZXhjZWVkIHNvbWUgbGltaXQuIEFsc28gd2Ugc2hvdWxkIGJlIGNhY2hpbmcgb25seSBhIHN1YiBp
bWFnZSBvZiB0aGUgUERGCisgICAgICAgIGlmIGNhY2hpbmcgdGhlIHdob2xlIGltYWdlIHdpbGwg
ZXhjZWVkIHRoZSBtZW1vcnkgbGltaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1h
Z2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoKToKKyAgICAgICAgICAgIE1hdGNoIHRoZSBjb250ZXh0
IGRpcnR5IHJlY3RhbmdsZSB3aXRoIHRoZSBjYWNoZWQgaW1hZ2UgcmVjdGFuZ2xlLgorICAgICAg
ICAKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyk6CisgICAg
ICAgICAgICBXaGVuIHByZXBhcmluZyB0aGUgY29udGV4dCBmb3IgZHJhd2luZyB0aGUgUERGLCB0
YWtlIHRoZSBsb2NhdGlvbiAKKyAgICAgICAgICAgIG9mIHRoZSBkZXN0aW5hdGlvbiByZWN0YW5n
bGUgaW50byBhY2NvdW50LiBXZSBkbyBub3QgbmVlZCB0byBzY2FsZQorICAgICAgICAgICAgdGhl
IGxvY2F0aW9uIG9mIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIGJlY2F1c2Ugd2Ugc2NhbGUgdGhlIHNp
emUgb2YKKyAgICAgICAgICAgIHRoZSByZWN0YW5nbGUgYnV0IHdlIGRvbid0IHNjYWxlIHRoZSB3
aG9sZSBjb29yZGluYXRlIHN5c3RlbS4KKworICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkSW1hZ2VS
ZWN0KToKKyAgICAgICAgICAgIENhbGN1bGF0ZSB0aGUgcmVjdGFuZ2xlIG9mIHRoZSBjYWNoZWQg
aW1hZ2Ugc3VjaCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAgICAgICBleGNlZWQgdGhlIGxpbWl0
LiBTdGFydCBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGRpcnR5IHJlY3RhbmdsZSBhbmQKKyAgICAg
ICAgICAgIHRoZW4gZXhwYW5kIGFyb3VuZCBpdC4KKyAgICAgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZGVjb2RlZFNpemVDaGFuZ2VkKToKKyAgICAgICAgICAg
IEluIGFkZGl0aW9uIHRvIG5vdGlmeWluZyB0aGUgSW1hZ2VPYnNlcnZlciwgaXQga2VlcHMgdHJh
Y2sgb2YgdGhlIHNpemUKKyAgICAgICAgICAgIG9mIGFsbCB0aGUgY2FjaGVkIFBERiBpbWFnZXMu
CisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdl
SWZOZWVkZWQpOgorICAgICAgICAgICAgRW5zdXJlIHRoZSBzaXplIG9mIGFsbCB0aGUgY2FjaGVk
IGltYWdlcyBkb2VzIG5vdCBleGNlZWQgdGhlIGxpbWl0CisgICAgICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgorCiAyMDE2LTA3LTA3
ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIy
MDA3NjkpOiBhbmltYXRpb25zIGFyZSBubyBsb25nZXIgb3ZlcnJpZGRlbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cAppbmRleCAzMDYyMmZiMmQyMTZiN2JmOTBhMzBmNTE3NDNmOWU2MDViOTJlNGU4Li40OTJjNTg4
M2JlOWYyNzcxZTFjOTJkYjMyYWI0MzVkZTA5ZDIwN2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAt
MTA4LDYgKzEwOCw5IEBAIGJvb2wgUERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0
Y2goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hCiAgICAgaWYgKHNyY1JlY3Qg
IT0gbV9jYWNoZWRTb3VyY2VSZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
IW1fY2FjaGVkSW1hZ2VSZWN0LmNvbnRhaW5zKGNvbnRleHQuY2xpcEJvdW5kcygpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBk
ZWNvbXBvc2VkVHJhbnNmb3JtOwogICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zv
cm0pOwogCkBAIC0xMzcsMjMgKzE0MCw1NyBAQCBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Db250ZXh0
Rm9yUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlYwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgY29udGV4dC50cmFuc2xhdGUoc3JjUmVjdC54KCkgKiBoU2Nh
bGUsIHNyY1JlY3QueSgpICogdlNjYWxlKTsKLSAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSho
U2NhbGUsIC12U2NhbGUpKTsKKyAgICAvLyBNb3ZpbmcgY29vcmRpbmF0ZXMgdG8gLXNyY1JlY3Qu
bG9jYXRpb24oKSA9PiBzcmNDb250ZXh0KHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSkgLT4gZHN0
Q29udGV4dCgwLCAwKQorICAgIC8vIE1vdmluZyBjb29yZGluYXRlcyB0byBkc3RSZWN0LmxvY2F0
aW9uKCkgPT4gc3JjQ29udGV4dCgwLCAwKSAtPiBkc3RDb250ZXh0KGRzdFJlY3QueCgpLCBkc3RS
ZWN0LnkoKSkKKyAgICAvLyBDb21iaW5pbmcgYm90aCA9PiBzcmNDb250ZXh0KHNyY1JlY3QueCgp
LCBzcmNSZWN0LnkoKSkgLT4gZHN0Q29udGV4dChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpCisg
ICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSwgZHN0UmVjdC55
KCkgLSBzcmNSZWN0LnkoKSk7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoaFNjYWxlLCB2
U2NhbGUpKTsKKyAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogICAgIGNvbnRl
eHQudHJhbnNsYXRlKDAsIC1zcmNSZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBQREZEb2N1bWVu
dEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCisj
aWYgUExBVEZPUk0oSU9TKQorLy8gVG8gYXZvaWQgdGhlIGpldHNhbSBvbiBpT1MsIHdlIGFyZSBn
b2luZyB0byBsaW1pdCB0aGUgc2l6ZSBvZiBhbGwgdGhlIFBERiBjYWNoZWRJbWFnZXMgdG8gYmUg
NjRNQi4KK3N0YXRpYyBjb25zdCBzaXplX3Qgc19tYXhDYWNoZWRJbWFnZVNpZGUgPSA0ICogS0I7
CitzdGF0aWMgY29uc3Qgc2l6ZV90IHNfbWF4Q2FjaGVkSW1hZ2VTaXplID0gc19tYXhDYWNoZWRJ
bWFnZVNpZGUgKiBzX21heENhY2hlZEltYWdlU2lkZSAqIDQ7CisKK3N0YXRpYyBjb25zdCBzaXpl
X3Qgc19tYXhEZWNvZGVkRGF0YVNpemUgPSBzX21heENhY2hlZEltYWdlU2l6ZTsKK3N0YXRpYyBz
aXplX3Qgc19hbGxEZWNvZGVkRGF0YVNpemUgPSAwOworCitzdGF0aWMgRmxvYXRSZWN0IGNhY2hl
ZEltYWdlUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCkKIHsKKyAgICBGbG9hdFNpemUgbWF4U2l6ZSA9IHNfbWF4Q2FjaGVkSW1hZ2VTaWRlIC8g
Y29udGV4dC5zY2FsZUZhY3RvcigpOworCisgICAgLy8gRXhwYW5kIGZyb20gdGhlIGNlbnRlciBv
ZiB0aGUgZGlydHkgcmVjdGFuZ2xlLgorICAgIEZsb2F0UmVjdCByZWN0ID0gY29udGV4dC5jbGlw
Qm91bmRzKCk7CisgICAgcmVjdC5zZXRYKHN0ZDo6bWF4KHJlY3QuY2VudGVyKCkueCgpIC0gbWF4
U2l6ZS53aWR0aCgpIC8gMiwgZHN0UmVjdC54KCkpKTsKKyAgICByZWN0LnNldFkoc3RkOjptYXgo
cmVjdC5jZW50ZXIoKS55KCkgLSBtYXhTaXplLmhlaWdodCgpIC8gMiwgZHN0UmVjdC55KCkpKTsK
KworICAgIC8vIENvdmVyIGFzIG11Y2ggYXMgd2UgY291bGQgZnJvbSB0aGUgZHN0UmVjdC4KKyAg
ICByZWN0LnNldFdpZHRoKHN0ZDo6bWluKG1heFNpemUud2lkdGgoKSwgZHN0UmVjdC53aWR0aCgp
KSk7CisgICAgcmVjdC5zZXRIZWlnaHQoc3RkOjptaW4obWF4U2l6ZS5oZWlnaHQoKSwgZHN0UmVj
dC5oZWlnaHQoKSkpOworICAgIHJldHVybiByZWN0OworfQorI2VuZGlmCisKK3ZvaWQgUERGRG9j
dW1lbnRJbWFnZTo6ZGVjb2RlZFNpemVDaGFuZ2VkKHNpemVfdCBuZXdDYWNoZWRCeXRlcykKK3sK
KyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29k
ZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihtX2NhY2hlZEJ5dGVzKSArIG5ld0Nh
Y2hlZEJ5dGVzKTsKKwogI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBPbiBpT1MsIGlmIHRoZSBw
aHlzaWNhbCBtZW1vcnkgaXMgbGVzcyB0aGFuIDFHQiwgZG8gbm90IGFsbG9jYXRlIG1vcmUgdGhh
biAxNk1CIGZvciB0aGUgUERGIGNhY2hlZEltYWdlLgotICAgIGNvbnN0IHNpemVfdCBtZW1vcnlU
aHJlc2hvbGQgPSBXVEY6OkdCOwotICAgIGNvbnN0IHNpemVfdCBtYXhBcmVhID0gMTYgKiBXVEY6
Ok1CIC8gNDsgLy8gMTYgTUIgbWF4aW11bSBzaXplLCBkaXZpZGVkIGJ5IGEgcm91Z2ggY29zdCBv
ZiA0IGJ5dGVzIHBlciBwaXhlbCBvZiBhcmVhLgotICAgIAotICAgIGlmIChyYW1TaXplKCkgPD0g
bWVtb3J5VGhyZXNob2xkICYmIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShkc3RS
ZWN0LnNpemUoKSwgY29udGV4dCkuYXJlYSgpID49IG1heEFyZWEpIHsKLSAgICAgICAgbV9jYWNo
ZWRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNT
RVJUKHNfYWxsRGVjb2RlZERhdGFTaXplID49IG1fY2FjaGVkQnl0ZXMpOworICAgIC8vIFVwZGF0
ZSB3aXRoIHRoZSBkaWZmZXJlbmNlIGluIHR3byBzdGVwcyB0byBhdm9pZCB1bnNpZ25lZCB1bmRl
cmZsb3cgc3VidHJhY3Rpb24uCisgICAgc19hbGxEZWNvZGVkRGF0YVNpemUgLT0gbV9jYWNoZWRC
eXRlczsKKyAgICBzX2FsbERlY29kZWREYXRhU2l6ZSArPSBuZXdDYWNoZWRCeXRlczsKKyNlbmRp
ZgorCisgICAgbV9jYWNoZWRCeXRlcyA9IG5ld0NhY2hlZEJ5dGVzOworfQogCit2b2lkIFBERkRv
Y3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCkKK3sKKyNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gT24gaU9TLCBzb21lIGNsaWVudHMgdXNl
IGxvdy1xdWFsaXR5IGltYWdlIGludGVycG9sYXRpb24gYWx3YXlzLCB3aGljaCB0aHJvd3Mgb2Zm
IHRoaXMgb3B0aW1pemF0aW9uLAogICAgIC8vIGFzIHdlIG5ldmVyIGdldCB0aGUgc3Vic2VxdWVu
dCBoaWdoLXF1YWxpdHkgcGFpbnQuIFNpbmNlIGxpdmUgcmVzaXplIGlzIHJhcmUgb24gaU9TLCBk
aXNhYmxlIHRoZSBvcHRpbWl6YXRpb24uCiAgICAgLy8gRklYTUUgKDEzNjU5Myk6IEl0J3MgYWxz
byBwb3NzaWJsZSB0byBkbyB0aGUgd3JvbmcgdGhpbmcgaGVyZSBpZiBDU1Mgc3BlY2lmaWVzIGxv
dy1xdWFsaXR5IGludGVycG9sYXRpb24gdmlhIHRoZSAiaW1hZ2UtcmVuZGVyaW5nIgpAQCAtMTY5
LDEzICsyMDYsMjggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlm
TmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKIAogICAgIGlmIChtX2NhY2hl
ZEltYWdlQnVmZmVyICYmICghcmVwYWludElmTmVjZXNzYXJ5IHx8IGNhY2hlUGFyYW1ldGVyc01h
dGNoKGNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3QpKSkKICAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihGbG9hdFJlY3QoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSkuc2l6ZSgpLCBjb250ZXh0
KTsKLSAgICBpZiAoIW1fY2FjaGVkSW1hZ2VCdWZmZXIpCisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgbV9jYWNoZWRJbWFnZVJlY3QgPSBjYWNoZWRJbWFnZVJlY3QoY29udGV4dCwgZHN0UmVjdCk7
CisKKyAgICAvLyBDYWNoZSB0aGUgUERGIGltYWdlIG9ubHkgaWYgdGhlIHNpemUgb2YgdGhlIG5l
dyBpbWFnZSB3b24ndCBleGNlZWQgdGhlIGxpbWl0CisgICAgaWYgKHNfYWxsRGVjb2RlZERhdGFT
aXplICsgbV9jYWNoZWRJbWFnZVJlY3Quc2l6ZSgpLmFyZWEoKSAqIDQgLSBtX2NhY2hlZEJ5dGVz
ID4gc19tYXhEZWNvZGVkRGF0YVNpemUpIHsKKyAgICAgICAgZGVzdHJveURlY29kZWREYXRhKCk7
CiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvJiBidWZmZXJDb250ZXh0ID0gbV9jYWNoZWRJbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpOworICAgIH0KKyNlbHNlCisgICAgbV9jYWNoZWRJbWFnZVJlY3Qg
PSBkc3RSZWN0OworI2VuZGlmCiAKLSAgICB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmcoYnVm
ZmVyQ29udGV4dCwgZHN0UmVjdCwgc3JjUmVjdCk7CisgICAgbV9jYWNoZWRJbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKEZsb2F0UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KG1fY2FjaGVkSW1hZ2VSZWN0KSkuc2l6ZSgpLCBjb250ZXh0KTsKKyAgICBpZiAoIW1f
Y2FjaGVkSW1hZ2VCdWZmZXIpIHsKKyAgICAgICAgZGVjb2RlZFNpemVDaGFuZ2VkKDApOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgYnVmZmVyQ29udGV4dCA9IG1fY2FjaGVk
SW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICAvLyBUaGUgUERGIGNhY2hlZEltYWdlIHNob3Vs
ZCBiZSBkcmF3biBhdCAoMCwgMCkgYWx3YXlzLgorICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWlu
dGluZyhidWZmZXJDb250ZXh0LCBGbG9hdFJlY3QoeyB9LCBkc3RSZWN0LnNpemUoKSksIHNyY1Jl
Y3QpOwogICAgIGRyYXdQREZQYWdlKGJ1ZmZlckNvbnRleHQpOwogCiAgICAgbV9jYWNoZWRUcmFu
c2Zvcm0gPSBjb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRl
RGV2aWNlU2NhbGUpOwpAQCAtMTgzLDExICsyMzUsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6
OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dAogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CiAKICAgICBJbnRTaXplIGludGVy
bmFsU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIHNpemVf
dCBvbGRDYWNoZWRCeXRlcyA9IG1fY2FjaGVkQnl0ZXM7Ci0gICAgbV9jYWNoZWRCeXRlcyA9IHNh
ZmVDYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndpZHRoKCkpICogaW50ZXJuYWxTaXplLmhlaWdo
dCgpICogNDsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2
ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIHNhZmVDYXN0PGludD4obV9jYWNoZWRCeXRl
cykgLSBzYWZlQ2FzdDxpbnQ+KG9sZENhY2hlZEJ5dGVzKSk7CisgICAgZGVjb2RlZFNpemVDaGFu
Z2VkKHNhZmVDYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndpZHRoKCkpICogaW50ZXJuYWxTaXpl
LmhlaWdodCgpICogNCk7CiB9CiAKIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlLCBJbWFnZU9yaWVu
dGF0aW9uRGVzY3JpcHRpb24pCkBAIC0yMTYsMTEgKzI2NCw3IEBAIHZvaWQgUERGRG9jdW1lbnRJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwKIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wpCiB7
CiAgICAgbV9jYWNoZWRJbWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0KLSAgICBpZiAoaW1hZ2VPYnNl
cnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlz
LCAtc2FmZUNhc3Q8aW50PihtX2NhY2hlZEJ5dGVzKSk7Ci0KLSAgICBtX2NhY2hlZEJ5dGVzID0g
MDsKKyAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoMCk7CiB9CiAKICNpZiAhVVNFKFBERktJVF9GT1Jf
UERGRE9DVU1FTlRJTUFHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAppbmRleCAyZjhhM2U2MTU4ZDk0MThkZjgzMzhi
OTQ1NWZiOWYxYjQ2ZjVlZDY5Li43N2I2NzJkZWQxYWYzMmM0MTVhMWQ0NjJmNTQwNmRhNTM2NDdk
OWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5oCkBAIC04MSw2ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgcGFnZUNvdW50KCkgY29uc3Q7CiAgICAgdm9pZCBkcmF3UERGUGFnZShHcmFwaGljc0NvbnRl
eHQmKTsKIAorICAgIHZvaWQgZGVjb2RlZFNpemVDaGFuZ2VkKHNpemVfdCBuZXdDYWNoZWRCeXRl
cyk7CiAgICAgdm9pZCB1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KTsKICAg
ICBib29sIGNhY2hlUGFyYW1ldGVyc01hdGNoKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKIApAQCAtOTEs
NiArOTIsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IG1fY2FjaGVkSW1hZ2VCdWZmZXI7CisgICAgRmxvYXRSZWN0IG1fY2FjaGVkSW1hZ2VS
ZWN0OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2NhY2hlZFRyYW5zZm9ybTsKICAgICBGbG9hdFNp
emUgbV9jYWNoZWREZXN0aW5hdGlvblNpemU7CiAgICAgRmxvYXRSZWN0IG1fY2FjaGVkU291cmNl
UmVjdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283201</attachid>
            <date>2016-07-08 15:03:37 -0700</date>
            <delta_ts>2016-07-14 10:04:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158715-20160708150304.patch</filename>
            <type>text/plain</type>
            <size>9782</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyOTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZjYmQyNGRkMGQwYjM5
OGFhNzQxMWNhMjEwZTFhMDI0OWVlZGYyYS4uYTQ5YzkyOGEzNWMwMmM1ZTY4ODM3YTQxODRlNGIw
MTlhM2MzY2IyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE2LTA3LTA3ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgW2lPU10g
UERGRG9jdW1lbnRJbWFnZSBzaG91bGQgY2FjaGUgb25seSBhIHN1YiBpbWFnZSBvZiB0aGUgUERG
IHdoZW4gY2FjaGluZyB0aGUgd2hvbGUgaW1hZ2UgaXMgZXhwZW5zaXZlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg3MTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb3IgaU9TLCB3ZSBuZWVkIHRvIGVu
c3VyZSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGVkIFBERiBpbWFnZXMgd2lsbCBub3QKKyAgICAgICAg
ZXhjZWVkIHNvbWUgbGltaXQuIEFsc28gd2Ugc2hvdWxkIGJlIGNhY2hpbmcgb25seSBhIHN1YiBp
bWFnZSBvZiB0aGUgUERGCisgICAgICAgIGlmIGNhY2hpbmcgdGhlIHdob2xlIGltYWdlIHdpbGwg
ZXhjZWVkIHRoZSBtZW1vcnkgbGltaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1h
Z2U6OmNhY2hlUGFyYW1ldGVyc01hdGNoKToKKyAgICAgICAgICAgIE1hdGNoIHRoZSBjb250ZXh0
IGRpcnR5IHJlY3RhbmdsZSB3aXRoIHRoZSBjYWNoZWQgaW1hZ2UgcmVjdGFuZ2xlLgorICAgICAg
ICAKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZm9ybUNvbnRleHRGb3JQYWludGluZyk6CisgICAg
ICAgICAgICBXaGVuIHByZXBhcmluZyB0aGUgY29udGV4dCBmb3IgZHJhd2luZyB0aGUgUERGLCB0
YWtlIHRoZSBsb2NhdGlvbiAKKyAgICAgICAgICAgIG9mIHRoZSBkZXN0aW5hdGlvbiByZWN0YW5n
bGUgaW50byBhY2NvdW50LiBXZSBkbyBub3QgbmVlZCB0byBzY2FsZQorICAgICAgICAgICAgdGhl
IGxvY2F0aW9uIG9mIHRoZSBzb3VyY2UgcmVjdGFuZ2xlIGJlY2F1c2Ugd2Ugc2NhbGUgdGhlIHNp
emUgb2YKKyAgICAgICAgICAgIHRoZSByZWN0YW5nbGUgYnV0IHdlIGRvbid0IHNjYWxlIHRoZSB3
aG9sZSBjb29yZGluYXRlIHN5c3RlbS4KKworICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkSW1hZ2VS
ZWN0KToKKyAgICAgICAgICAgIENhbGN1bGF0ZSB0aGUgcmVjdGFuZ2xlIG9mIHRoZSBjYWNoZWQg
aW1hZ2Ugc3VjaCB0aGF0IGl0IGRvZXMgbm90CisgICAgICAgICAgICBleGNlZWQgdGhlIGxpbWl0
LiBTdGFydCBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGRpcnR5IHJlY3RhbmdsZSBhbmQKKyAgICAg
ICAgICAgIHRoZW4gZXhwYW5kIGFyb3VuZCBpdC4KKyAgICAgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZGVjb2RlZFNpemVDaGFuZ2VkKToKKyAgICAgICAgICAg
IEluIGFkZGl0aW9uIHRvIG5vdGlmeWluZyB0aGUgSW1hZ2VPYnNlcnZlciwgaXQga2VlcHMgdHJh
Y2sgb2YgdGhlIHNpemUKKyAgICAgICAgICAgIG9mIGFsbCB0aGUgY2FjaGVkIFBERiBpbWFnZXMu
CisKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdl
SWZOZWVkZWQpOgorICAgICAgICAgICAgRW5zdXJlIHRoZSBzaXplIG9mIGFsbCB0aGUgY2FjaGVk
IGltYWdlcyBkb2VzIG5vdCBleGNlZWQgdGhlIGxpbWl0CisgICAgICAgICAgICAKKyAgICAgICAg
KFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oOgorCiAyMDE2LTA3LTA3
ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIy
MDA3NjkpOiBhbmltYXRpb25zIGFyZSBubyBsb25nZXIgb3ZlcnJpZGRlbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cAppbmRleCAzMDYyMmZiMmQyMTZiN2JmOTBhMzBmNTE3NDNmOWU2MDViOTJlNGU4Li4yNzgzZmZj
NGI4ZTg2ZDZlZGY3MDA0ZTE0YTAzMDgzMGVmM2NhYTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAt
MTA4LDYgKzEwOCw5IEBAIGJvb2wgUERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0
Y2goR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hCiAgICAgaWYgKHNyY1JlY3Qg
IT0gbV9jYWNoZWRTb3VyY2VSZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAo
IW1fY2FjaGVkSW1hZ2VSZWN0LmNvbnRhaW5zKGNvbnRleHQuY2xpcEJvdW5kcygpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBk
ZWNvbXBvc2VkVHJhbnNmb3JtOwogICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zv
cm0pOwogCkBAIC0xMzcsMjMgKzE0MCw1NiBAQCBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Db250ZXh0
Rm9yUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlYwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgY29udGV4dC50cmFuc2xhdGUoc3JjUmVjdC54KCkgKiBoU2Nh
bGUsIHNyY1JlY3QueSgpICogdlNjYWxlKTsKKyAgICAvLyBNb3ZpbmcgY29vcmRpbmF0ZXMgdG8g
LXNyY1JlY3QubG9jYXRpb24oKSA9PiBzcmNDb250ZXh0KHNyY1JlY3QueCgpLCBzcmNSZWN0Lnko
KSkgLT4gZHN0Q29udGV4dCgwLCAwKQorICAgIC8vIE1vdmluZyBjb29yZGluYXRlcyB0byBkc3RS
ZWN0LmxvY2F0aW9uKCkgPT4gc3JjQ29udGV4dCgwLCAwKSAtPiBkc3RDb250ZXh0KGRzdFJlY3Qu
eCgpLCBkc3RSZWN0LnkoKSkKKyAgICAvLyBDb21iaW5pbmcgYm90aCA9PiBzcmNDb250ZXh0KHNy
Y1JlY3QueCgpLCBzcmNSZWN0LnkoKSkgLT4gZHN0Q29udGV4dChkc3RSZWN0LngoKSwgZHN0UmVj
dC55KCkpCisgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSwg
ZHN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSk7CiAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUo
aFNjYWxlLCAtdlNjYWxlKSk7CiAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLXNyY1JlY3QuaGVp
Z2h0KCkpOwogfQogCi12b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZO
ZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkKKyNpZiBQTEFURk9STShJT1MpCisvLyBUbyBhdm9p
ZCB0aGUgamV0c2FtIG9uIGlPUywgd2UgYXJlIGdvaW5nIHRvIGxpbWl0IHRoZSBzaXplIG9mIGFs
bCB0aGUgUERGIGNhY2hlZEltYWdlcyB0byBiZSA2NE1CLgorc3RhdGljIGNvbnN0IHNpemVfdCBz
X21heENhY2hlZEltYWdlU2lkZSA9IDQgKiBLQjsKK3N0YXRpYyBjb25zdCBzaXplX3Qgc19tYXhD
YWNoZWRJbWFnZVNpemUgPSBzX21heENhY2hlZEltYWdlU2lkZSAqIHNfbWF4Q2FjaGVkSW1hZ2VT
aWRlICogNDsKKworc3RhdGljIGNvbnN0IHNpemVfdCBzX21heERlY29kZWREYXRhU2l6ZSA9IHNf
bWF4Q2FjaGVkSW1hZ2VTaXplOworc3RhdGljIHNpemVfdCBzX2FsbERlY29kZWREYXRhU2l6ZSA9
IDA7CisKK3N0YXRpYyBGbG9hdFJlY3QgY2FjaGVkSW1hZ2VSZWN0KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0KQogeworICAgIEZsb2F0U2l6ZSBtYXhT
aXplID0gc19tYXhDYWNoZWRJbWFnZVNpZGUgLyBjb250ZXh0LnNjYWxlRmFjdG9yKCk7CisKKyAg
ICAvLyBFeHBhbmQgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBkaXJ0eSByZWN0YW5nbGUuCisgICAg
RmxvYXRSZWN0IHJlY3QgPSBjb250ZXh0LmNsaXBCb3VuZHMoKTsKKyAgICByZWN0LnNldFgoc3Rk
OjptYXgocmVjdC5jZW50ZXIoKS54KCkgLSBtYXhTaXplLndpZHRoKCkgLyAyLCBkc3RSZWN0Lngo
KSkpOworICAgIHJlY3Quc2V0WShzdGQ6Om1heChyZWN0LmNlbnRlcigpLnkoKSAtIG1heFNpemUu
aGVpZ2h0KCkgLyAyLCBkc3RSZWN0LnkoKSkpOworCisgICAgLy8gQ292ZXIgYXMgbXVjaCBhcyB3
ZSBjb3VsZCBmcm9tIHRoZSBkc3RSZWN0LgorICAgIHJlY3Quc2V0V2lkdGgoc3RkOjptaW4obWF4
U2l6ZS53aWR0aCgpLCBkc3RSZWN0LndpZHRoKCkpKTsKKyAgICByZWN0LnNldEhlaWdodChzdGQ6
Om1pbihtYXhTaXplLmhlaWdodCgpLCBkc3RSZWN0LmhlaWdodCgpKSk7CisgICAgcmV0dXJuIHJl
Y3Q7Cit9CisjZW5kaWYKKwordm9pZCBQREZEb2N1bWVudEltYWdlOjpkZWNvZGVkU2l6ZUNoYW5n
ZWQoc2l6ZV90IG5ld0NhY2hlZEJ5dGVzKQoreworICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisg
ICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIC1zYWZlQ2Fz
dDxpbnQ+KG1fY2FjaGVkQnl0ZXMpICsgbmV3Q2FjaGVkQnl0ZXMpOworCiAjaWYgUExBVEZPUk0o
SU9TKQotICAgIC8vIE9uIGlPUywgaWYgdGhlIHBoeXNpY2FsIG1lbW9yeSBpcyBsZXNzIHRoYW4g
MUdCLCBkbyBub3QgYWxsb2NhdGUgbW9yZSB0aGFuIDE2TUIgZm9yIHRoZSBQREYgY2FjaGVkSW1h
Z2UuCi0gICAgY29uc3Qgc2l6ZV90IG1lbW9yeVRocmVzaG9sZCA9IFdURjo6R0I7Ci0gICAgY29u
c3Qgc2l6ZV90IG1heEFyZWEgPSAxNiAqIFdURjo6TUIgLyA0OyAvLyAxNiBNQiBtYXhpbXVtIHNp
emUsIGRpdmlkZWQgYnkgYSByb3VnaCBjb3N0IG9mIDQgYnl0ZXMgcGVyIHBpeGVsIG9mIGFyZWEu
Ci0gICAgCi0gICAgaWYgKHJhbVNpemUoKSA8PSBtZW1vcnlUaHJlc2hvbGQgJiYgSW1hZ2VCdWZm
ZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGRzdFJlY3Quc2l6ZSgpLCBjb250ZXh0KS5hcmVhKCkg
Pj0gbWF4QXJlYSkgewotICAgICAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0gbnVsbHB0cjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQoc19hbGxEZWNvZGVkRGF0YVNpemUgPj0g
bV9jYWNoZWRCeXRlcyk7CisgICAgLy8gVXBkYXRlIHdpdGggdGhlIGRpZmZlcmVuY2UgaW4gdHdv
IHN0ZXBzIHRvIGF2b2lkIHVuc2lnbmVkIHVuZGVyZmxvdyBzdWJ0cmFjdGlvbi4KKyAgICBzX2Fs
bERlY29kZWREYXRhU2l6ZSAtPSBtX2NhY2hlZEJ5dGVzOworICAgIHNfYWxsRGVjb2RlZERhdGFT
aXplICs9IG5ld0NhY2hlZEJ5dGVzOworI2VuZGlmCisKKyAgICBtX2NhY2hlZEJ5dGVzID0gbmV3
Q2FjaGVkQnl0ZXM7Cit9CiAKK3ZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1h
Z2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQoreworI2lmIFBMQVRGT1JNKElPUykKICAg
ICAvLyBPbiBpT1MsIHNvbWUgY2xpZW50cyB1c2UgbG93LXF1YWxpdHkgaW1hZ2UgaW50ZXJwb2xh
dGlvbiBhbHdheXMsIHdoaWNoIHRocm93cyBvZmYgdGhpcyBvcHRpbWl6YXRpb24sCiAgICAgLy8g
YXMgd2UgbmV2ZXIgZ2V0IHRoZSBzdWJzZXF1ZW50IGhpZ2gtcXVhbGl0eSBwYWludC4gU2luY2Ug
bGl2ZSByZXNpemUgaXMgcmFyZSBvbiBpT1MsIGRpc2FibGUgdGhlIG9wdGltaXphdGlvbi4KICAg
ICAvLyBGSVhNRSAoMTM2NTkzKTogSXQncyBhbHNvIHBvc3NpYmxlIHRvIGRvIHRoZSB3cm9uZyB0
aGluZyBoZXJlIGlmIENTUyBzcGVjaWZpZXMgbG93LXF1YWxpdHkgaW50ZXJwb2xhdGlvbiB2aWEg
dGhlICJpbWFnZS1yZW5kZXJpbmciCkBAIC0xNjksMTMgKzIwNSwyOCBAQCB2b2lkIFBERkRvY3Vt
ZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdAogCiAgICAgaWYgKG1fY2FjaGVkSW1hZ2VCdWZmZXIgJiYgKCFyZXBhaW50SWZO
ZWNlc3NhcnkgfHwgY2FjaGVQYXJhbWV0ZXJzTWF0Y2goY29udGV4dCwgZHN0UmVjdCwgc3JjUmVj
dCkpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jYWNoZWRJbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKEZsb2F0UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KGRzdFJlY3QpKS5zaXplKCksIGNvbnRleHQpOwotICAgIGlmICghbV9jYWNoZWRJbWFnZUJ1
ZmZlcikKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2NhY2hlZEltYWdlUmVjdCA9IGNhY2hl
ZEltYWdlUmVjdChjb250ZXh0LCBkc3RSZWN0KTsKKworICAgIC8vIENhY2hlIHRoZSBQREYgaW1h
Z2Ugb25seSBpZiB0aGUgc2l6ZSBvZiB0aGUgbmV3IGltYWdlIHdvbid0IGV4Y2VlZCB0aGUgbGlt
aXQKKyAgICBpZiAoc19hbGxEZWNvZGVkRGF0YVNpemUgKyBtX2NhY2hlZEltYWdlUmVjdC5zaXpl
KCkuYXJlYSgpICogNCAtIG1fY2FjaGVkQnl0ZXMgPiBzX21heERlY29kZWREYXRhU2l6ZSkgewor
ICAgICAgICBkZXN0cm95RGVjb2RlZERhdGEoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8m
IGJ1ZmZlckNvbnRleHQgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgfQor
I2Vsc2UKKyAgICBtX2NhY2hlZEltYWdlUmVjdCA9IGRzdFJlY3Q7CisjZW5kaWYKIAotICAgIHRy
YW5zZm9ybUNvbnRleHRGb3JQYWludGluZyhidWZmZXJDb250ZXh0LCBkc3RSZWN0LCBzcmNSZWN0
KTsKKyAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoRmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3QobV9jYWNoZWRJbWFnZVJlY3QpKS5z
aXplKCksIGNvbnRleHQpOworICAgIGlmICghbV9jYWNoZWRJbWFnZUJ1ZmZlcikgeworICAgICAg
ICBkZWNvZGVkU2l6ZUNoYW5nZWQoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvJiBidWZmZXJDb250ZXh0ID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgpOworICAg
IC8vIFRoZSBQREYgY2FjaGVkSW1hZ2Ugc2hvdWxkIGJlIGRyYXduIGF0ICgwLCAwKSBhbHdheXMu
CisgICAgdHJhbnNmb3JtQ29udGV4dEZvclBhaW50aW5nKGJ1ZmZlckNvbnRleHQsIEZsb2F0UmVj
dCh7IH0sIGRzdFJlY3Quc2l6ZSgpKSwgc3JjUmVjdCk7CiAgICAgZHJhd1BERlBhZ2UoYnVmZmVy
Q29udGV4dCk7CiAKICAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0Q1RNKEdyYXBo
aWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CkBAIC0xODMsMTEgKzIz
NCw3IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0CiAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0g
c3JjUmVjdDsKIAogICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gbV9jYWNoZWRJbWFnZUJ1ZmZl
ci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgc2l6ZV90IG9sZENhY2hlZEJ5dGVzID0gbV9jYWNoZWRC
eXRlczsKLSAgICBtX2NhY2hlZEJ5dGVzID0gc2FmZUNhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUu
d2lkdGgoKSkgKiBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiA0OwotCi0gICAgaWYgKGltYWdlT2Jz
ZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhp
cywgc2FmZUNhc3Q8aW50PihtX2NhY2hlZEJ5dGVzKSAtIHNhZmVDYXN0PGludD4ob2xkQ2FjaGVk
Qnl0ZXMpKTsKKyAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoc2FmZUNhc3Q8c2l6ZV90PihpbnRlcm5h
bFNpemUud2lkdGgoKSkgKiBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiA0KTsKIH0KIAogdm9pZCBQ
REZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBCbGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbikKQEAgLTIxNiwx
MSArMjYzLDcgQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAogdm9pZCBQREZEb2N1bWVudEltYWdl
OjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkKIHsKICAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0g
bnVsbHB0cjsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2
ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIC1zYWZlQ2FzdDxpbnQ+KG1fY2FjaGVkQnl0
ZXMpKTsKLQotICAgIG1fY2FjaGVkQnl0ZXMgPSAwOworICAgIGRlY29kZWRTaXplQ2hhbmdlZCgw
KTsKIH0KIAogI2lmICFVU0UoUERGS0lUX0ZPUl9QREZET0NVTUVOVElNQUdFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5o
CmluZGV4IDJmOGEzZTYxNThkOTQxOGRmODMzOGI5NDU1ZmI5ZjFiNDZmNWVkNjkuLjc3YjY3MmRl
ZDFhZjMyYzQxNWExZDQ2MmY1NDA2ZGE1MzY0N2Q5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKQEAgLTgxLDYg
KzgxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBwYWdlQ291bnQoKSBjb25zdDsKICAgICB2
b2lkIGRyYXdQREZQYWdlKEdyYXBoaWNzQ29udGV4dCYpOwogCisgICAgdm9pZCBkZWNvZGVkU2l6
ZUNoYW5nZWQoc2l6ZV90IG5ld0NhY2hlZEJ5dGVzKTsKICAgICB2b2lkIHVwZGF0ZUNhY2hlZElt
YWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpOwogICAgIGJvb2wgY2FjaGVQYXJhbWV0ZXJzTWF0Y2go
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QpIGNvbnN0OwogCkBAIC05MSw2ICs5Miw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9jYWNoZWRJbWFnZUJ1ZmZlcjsK
KyAgICBGbG9hdFJlY3QgbV9jYWNoZWRJbWFnZVJlY3Q7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1f
Y2FjaGVkVHJhbnNmb3JtOwogICAgIEZsb2F0U2l6ZSBtX2NhY2hlZERlc3RpbmF0aW9uU2l6ZTsK
ICAgICBGbG9hdFJlY3QgbV9jYWNoZWRTb3VyY2VSZWN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283654</attachid>
            <date>2016-07-14 10:04:24 -0700</date>
            <delta_ts>2016-07-14 10:34:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158715-20160714100337.patch</filename>
            <type>text/plain</type>
            <size>20566</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA3LTE0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgW2lPU10gUERG
RG9jdW1lbnRJbWFnZSBzaG91bGQgY2FjaGUgb25seSBhIHN1YiBpbWFnZSBvZiB0aGUgUERGIHdo
ZW4gY2FjaGluZyB0aGUgd2hvbGUgaW1hZ2UgaXMgZXhwZW5zaXZlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg3MTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2ltYWdlcy9kaXNwbGFj
ZWQtbm9uLWNhY2hlZC1wZGYuaHRtbAorCisgICAgICAgIEZvciBpT1MsIHdlIG5lZWQgdG8gZW5z
dXJlIHRoZSBzaXplIG9mIHRoZSBjYWNoZWQgUERGIGltYWdlcyB3aWxsIG5vdAorICAgICAgICBl
eGNlZWQgc29tZSBsaW1pdC4gQWxzbyB3ZSBzaG91bGQgYmUgY2FjaGluZyBvbmx5IGEgc3ViIGlt
YWdlIG9mIHRoZSBQREYKKyAgICAgICAgaWYgY2FjaGluZyB0aGUgd2hvbGUgaW1hZ2Ugd2lsbCBl
eGNlZWQgdGhlIG1lbW9yeSBsaW1pdC4KKworICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNldHRpbmdzOjpzZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQpOgorICAgICAgICAqIHBhZ2UvU2V0
dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjppc0NhY2hlZFBERkltYWdlRW5h
YmxlZCk6CisgICAgICAgICAgICBBZGQgYW4gb3B0aW9uIHRvIGRpc2FibGUgY2FjaGluZyB0aGUg
UERGIGltYWdlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6c2V0Q2FjaGVk
UERGSW1hZ2VFbmFibGVkKToKKyAgICAgICAgICAgIEFsbG93IHRoZSBjYWxsZXIgb2YgZHJhdygp
IHRvIGRpc2FibGUgY2FjaGluZyB0aGUgUERGIGltYWdlcy4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaCk6CisgICAgICAg
ICAgICBNYXRjaCB0aGUgY29udGV4dCBkaXJ0eSByZWN0YW5nbGUgd2l0aCB0aGUgY2FjaGVkIGlt
YWdlIHJlY3RhbmdsZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1Db250
ZXh0Rm9yUGFpbnRpbmcpOgorICAgICAgICAgICAgV2hlbiBwcmVwYXJpbmcgdGhlIGNvbnRleHQg
Zm9yIGRyYXdpbmcgdGhlIFBERiwgdGFrZSB0aGUgbG9jYXRpb24gCisgICAgICAgICAgICBvZiB0
aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGludG8gYWNjb3VudC4gV2UgZG8gbm90IG5lZWQgdG8g
c2NhbGUKKyAgICAgICAgICAgIHRoZSBsb2NhdGlvbiBvZiB0aGUgc291cmNlIHJlY3RhbmdsZSBi
ZWNhdXNlIHdlIHNjYWxlIHRoZSBzaXplIG9mCisgICAgICAgICAgICB0aGUgcmVjdGFuZ2xlIGJ1
dCB3ZSBkb24ndCBzY2FsZSB0aGUgd2hvbGUgY29vcmRpbmF0ZSBzeXN0ZW0uCisKKyAgICAgICAg
KFdlYkNvcmU6OmNhY2hlZEltYWdlUmVjdCk6CisgICAgICAgICAgICBDYWxjdWxhdGUgdGhlIHJl
Y3RhbmdsZSBvZiB0aGUgY2FjaGVkIGltYWdlIHN1Y2ggdGhhdCBpdCBkb2VzIG5vdAorICAgICAg
ICAgICAgZXhjZWVkIHRoZSBsaW1pdC4gU3RhcnQgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBkaXJ0
eSByZWN0YW5nbGUgYW5kCisgICAgICAgICAgICB0aGVuIGV4cGFuZCBhcm91bmQgaXQuCisgICAg
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRlY29kZWRTaXpl
Q2hhbmdlZCk6CisgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byBub3RpZnlpbmcgdGhlIEltYWdl
T2JzZXJ2ZXIsIGl0IGtlZXBzIHRyYWNrIG9mIHRoZSBzaXplCisgICAgICAgICAgICBvZiBhbGwg
dGhlIGNhY2hlZCBQREYgaW1hZ2VzLgorCisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudElt
YWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToKKyAgICAgICAgICAgIEVuc3VyZSB0aGUg
c2l6ZSBvZiBhbGwgdGhlIGNhY2hlZCBpbWFnZXMgZG9lcyBub3QgZXhjZWVkIHRoZSBsaW1pdAor
ICAgICAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuaDoKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdCk6CisgICAgICAgICAgICBQYXNz
IHRoZSBvcHRpb24gdG8gZGlzYWJsZSBjYWNoaW5nIHRoZSBQREYgaW1hZ2VzIHRvIFBERkRvY3Vt
ZW50SW1hZ2UuCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0aW5nczo6QmFja3VwOjpCYWNrdXApOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0aW5nczo6QmFja3VwOjpyZXN0b3JlVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0aW5nczo6c2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKToK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaDoKKyAgICAgICAgKiB0ZXN0aW5n
L0ludGVybmFsU2V0dGluZ3MuaWRsOgorICAgICAgICAgICAgQWRkIGFuIGludGVybmFsIG9wdGlv
biB0byBkaXNhYmxlIGNhY2hpbmcgdGhlIFBERiBpbWFnZXMuCisKIDIwMTYtMDctMTQgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTGliXSBV
c2UgYSBHU291cmNlIGluc3RlYWQgb2YgYSB0aHJlYWQgdG8gcG9sbCBtZW1vcnkgcHJlc3N1cmUg
ZXZlbnRGRCBpbiBsaW51eCBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAJKHJldmlzaW9uIDIwMzE5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdz
KFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseShmYWxzZSkKICAg
ICAsIG1fYXJlSW1hZ2VzRW5hYmxlZCh0cnVlKQogICAgICwgbV9wcmVmZXJNSU1FVHlwZUZvcklt
YWdlcyhmYWxzZSkKKyAgICAsIG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQodHJ1ZSkKICAgICAs
IG1fYXJlUGx1Z2luc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2lzU2NyaXB0RW5hYmxlZChmYWxz
ZSkKICAgICAsIG1fbmVlZHNBZG9iZUZyYW1lUmVsb2FkaW5nUXVpcmsoZmFsc2UpCkBAIC00MjUs
NiArNDI2LDExIEBAIHZvaWQgU2V0dGluZ3M6OnNldFByZWZlck1JTUVUeXBlRm9ySW1hZ2UKICAg
ICBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzID0gcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXM7CiB9
CiAKK3ZvaWQgU2V0dGluZ3M6OnNldENhY2hlZFBERkltYWdlRW5hYmxlZChib29sIGlzQ2FjaGVk
UERGSW1hZ2VFbmFibGVkKQoreworICAgIG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgPSBpc0Nh
Y2hlZFBERkltYWdlRW5hYmxlZDsKK30KKwogdm9pZCBTZXR0aW5nczo6c2V0Rm9yY2VQZW5kaW5n
V2ViR0xQb2xpY3koYm9vbCBmb3JjZWQpCiB7CiAgICAgbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGlj
eSA9IGZvcmNlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDIwMzE5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2
LDYgKzE0Niw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFByZWZlck1J
TUVUeXBlRm9ySW1hZ2VzKGJvb2wpOwogICAgIGJvb2wgcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMo
KSBjb25zdCB7IHJldHVybiBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzOyB9CiAKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldENhY2hlZFBERkltYWdlRW5hYmxlZChib29sKTsKKyAgICBib29s
IGlzQ2FjaGVkUERGSW1hZ2VFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NhY2hlZFBERklt
YWdlRW5hYmxlZDsgfQorCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbHVnaW5zRW5hYmxl
ZChib29sKTsKICAgICBib29sIGFyZVBsdWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9h
cmVQbHVnaW5zRW5hYmxlZDsgfQogCkBAIC0zMjgsNiArMzMxLDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5IDogMTsKICAgICBib29sIG1fYXJlSW1hZ2Vz
RW5hYmxlZCA6IDE7CiAgICAgYm9vbCBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzIDogMTsKKyAg
ICBib29sIG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgOiAxOwogICAgIGJvb2wgbV9hcmVQbHVn
aW5zRW5hYmxlZCA6IDE7CiAgICAgYm9vbCBtX2lzU2NyaXB0RW5hYmxlZCA6IDE7CiAgICAgYm9v
bCBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCShyZXZpc2lvbiAyMDMxOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwx
NSBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgCiAgICAgcmV0dXJu
IG1fZG9jdW1lbnQ7IC8vIFJldHVybiB0cnVlIGlmIHNpemUgaXMgYXZhaWxhYmxlLgogfQogCit2
b2lkIFBERkRvY3VtZW50SW1hZ2U6OnNldENhY2hlZFBERkltYWdlRW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgaWYgKG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgPT0gZW5hYmxlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCEobV9pc0NhY2hlZFBERkltYWdlRW5hYmxlZCA9IGVu
YWJsZWQpKQorICAgICAgICBkZXN0cm95RGVjb2RlZERhdGEoKTsKK30KKwogYm9vbCBQREZEb2N1
bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAogewogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBtX2NhY2hlZERlc3RpbmF0aW9uU2l6ZSkK
QEAgLTEwOCw2ICsxMTcsOSBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVy
c01hCiAgICAgaWYgKHNyY1JlY3QgIT0gbV9jYWNoZWRTb3VyY2VSZWN0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoIW1fY2FjaGVkSW1hZ2VSZWN0LmNvbnRhaW5zKGNvbnRleHQu
Y2xpcEJvdW5kcygpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgQWZmaW5lVHJhbnNm
b3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHJhbnNmb3JtOwogICAgIGNvbnRleHQuZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21w
b3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0pOwogCkBAIC0xMzcsMjMgKzE0OSw1OSBAQCBzdGF0aWMg
dm9pZCB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmcoCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjb250ZXh0LnRyYW5zbGF0ZShzcmNSZWN0LngoKSAqIGhTY2FsZSwgc3JjUmVjdC55KCkgKiB2
U2NhbGUpOworICAgIC8vIE1vdmluZyBjb29yZGluYXRlcyB0byAtc3JjUmVjdC5sb2NhdGlvbigp
ID0+IHNyY0NvbnRleHQoc3JjUmVjdC54KCksIHNyY1JlY3QueSgpKSAtPiBkc3RDb250ZXh0KDAs
IDApCisgICAgLy8gTW92aW5nIGNvb3JkaW5hdGVzIHRvIGRzdFJlY3QubG9jYXRpb24oKSA9PiBz
cmNDb250ZXh0KDAsIDApIC0+IGRzdENvbnRleHQoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKQor
ICAgIC8vIENvbWJpbmluZyBib3RoID0+IHNyY0NvbnRleHQoc3JjUmVjdC54KCksIHNyY1JlY3Qu
eSgpKSAtPiBkc3RDb250ZXh0KGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSkKKyAgICBjb250ZXh0
LnRyYW5zbGF0ZShkc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpLCBkc3RSZWN0LnkoKSAtIHNyY1Jl
Y3QueSgpKTsKICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShoU2NhbGUsIC12U2NhbGUpKTsK
ICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtc3JjUmVjdC5oZWlnaHQoKSk7CiB9CiAKLXZvaWQg
UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0KQotewogI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBPbiBpT1MsIGlmIHRoZSBwaHlz
aWNhbCBtZW1vcnkgaXMgbGVzcyB0aGFuIDFHQiwgZG8gbm90IGFsbG9jYXRlIG1vcmUgdGhhbiAx
Nk1CIGZvciB0aGUgUERGIGNhY2hlZEltYWdlLgotICAgIGNvbnN0IHNpemVfdCBtZW1vcnlUaHJl
c2hvbGQgPSBXVEY6OkdCOwotICAgIGNvbnN0IHNpemVfdCBtYXhBcmVhID0gMTYgKiBXVEY6Ok1C
IC8gNDsgLy8gMTYgTUIgbWF4aW11bSBzaXplLCBkaXZpZGVkIGJ5IGEgcm91Z2ggY29zdCBvZiA0
IGJ5dGVzIHBlciBwaXhlbCBvZiBhcmVhLgotICAgIAotICAgIGlmIChyYW1TaXplKCkgPD0gbWVt
b3J5VGhyZXNob2xkICYmIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShkc3RSZWN0
LnNpemUoKSwgY29udGV4dCkuYXJlYSgpID49IG1heEFyZWEpIHsKLSAgICAgICAgbV9jYWNoZWRJ
bWFnZUJ1ZmZlciA9IG51bGxwdHI7CisvLyBUbyBhdm9pZCB0aGUgamV0c2FtIG9uIGlPUywgd2Ug
YXJlIGdvaW5nIHRvIGxpbWl0IHRoZSBzaXplIG9mIGFsbCB0aGUgUERGIGNhY2hlZEltYWdlcyB0
byBiZSA2NE1CLgorc3RhdGljIGNvbnN0IHNpemVfdCBzX21heENhY2hlZEltYWdlU2lkZSA9IDQg
KiBLQjsKK3N0YXRpYyBjb25zdCBzaXplX3Qgc19tYXhDYWNoZWRJbWFnZVNpemUgPSBzX21heENh
Y2hlZEltYWdlU2lkZSAqIHNfbWF4Q2FjaGVkSW1hZ2VTaWRlICogNDsKKworc3RhdGljIGNvbnN0
IHNpemVfdCBzX21heERlY29kZWREYXRhU2l6ZSA9IHNfbWF4Q2FjaGVkSW1hZ2VTaXplOworc3Rh
dGljIHNpemVfdCBzX2FsbERlY29kZWREYXRhU2l6ZSA9IDA7CisKK3N0YXRpYyBGbG9hdFJlY3Qg
Y2FjaGVkSW1hZ2VSZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0KQoreworICAgIEZsb2F0U2l6ZSBtYXhTaXplID0gc19tYXhDYWNoZWRJbWFnZVNp
ZGUgLyBjb250ZXh0LnNjYWxlRmFjdG9yKCk7CisKKyAgICAvLyBFeHBhbmQgZnJvbSB0aGUgY2Vu
dGVyIG9mIHRoZSBkaXJ0eSByZWN0YW5nbGUuCisgICAgRmxvYXRSZWN0IHJlY3QgPSBjb250ZXh0
LmNsaXBCb3VuZHMoKTsKKyAgICByZWN0LnNldFgoc3RkOjptYXgocmVjdC5jZW50ZXIoKS54KCkg
LSBtYXhTaXplLndpZHRoKCkgLyAyLCBkc3RSZWN0LngoKSkpOworICAgIHJlY3Quc2V0WShzdGQ6
Om1heChyZWN0LmNlbnRlcigpLnkoKSAtIG1heFNpemUuaGVpZ2h0KCkgLyAyLCBkc3RSZWN0Lnko
KSkpOworCisgICAgLy8gQ292ZXIgYXMgbXVjaCBhcyB3ZSBjb3VsZCBmcm9tIHRoZSBkc3RSZWN0
LgorICAgIHJlY3Quc2V0V2lkdGgoc3RkOjptaW4obWF4U2l6ZS53aWR0aCgpLCBkc3RSZWN0Lndp
ZHRoKCkpKTsKKyAgICByZWN0LnNldEhlaWdodChzdGQ6Om1pbihtYXhTaXplLmhlaWdodCgpLCBk
c3RSZWN0LmhlaWdodCgpKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisjZW5kaWYKKwordm9pZCBQ
REZEb2N1bWVudEltYWdlOjpkZWNvZGVkU2l6ZUNoYW5nZWQoc2l6ZV90IG5ld0NhY2hlZEJ5dGVz
KQoreworICAgIGlmICghbV9jYWNoZWRCeXRlcyAmJiAhbmV3Q2FjaGVkQnl0ZXMpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFn
ZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihtX2Nh
Y2hlZEJ5dGVzKSArIG5ld0NhY2hlZEJ5dGVzKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBB
U1NFUlQoc19hbGxEZWNvZGVkRGF0YVNpemUgPj0gbV9jYWNoZWRCeXRlcyk7CisgICAgLy8gVXBk
YXRlIHdpdGggdGhlIGRpZmZlcmVuY2UgaW4gdHdvIHN0ZXBzIHRvIGF2b2lkIHVuc2lnbmVkIHVu
ZGVyZmxvdyBzdWJ0cmFjdGlvbi4KKyAgICBzX2FsbERlY29kZWREYXRhU2l6ZSAtPSBtX2NhY2hl
ZEJ5dGVzOworICAgIHNfYWxsRGVjb2RlZERhdGFTaXplICs9IG5ld0NhY2hlZEJ5dGVzOworI2Vu
ZGlmCisKKyAgICBtX2NhY2hlZEJ5dGVzID0gbmV3Q2FjaGVkQnl0ZXM7Cit9CisKK3ZvaWQgUERG
RG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0KQoreworI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBPbiBpT1MsIHNvbWUgY2xpZW50cyB1
c2UgbG93LXF1YWxpdHkgaW1hZ2UgaW50ZXJwb2xhdGlvbiBhbHdheXMsIHdoaWNoIHRocm93cyBv
ZmYgdGhpcyBvcHRpbWl6YXRpb24sCiAgICAgLy8gYXMgd2UgbmV2ZXIgZ2V0IHRoZSBzdWJzZXF1
ZW50IGhpZ2gtcXVhbGl0eSBwYWludC4gU2luY2UgbGl2ZSByZXNpemUgaXMgcmFyZSBvbiBpT1Ms
IGRpc2FibGUgdGhlIG9wdGltaXphdGlvbi4KICAgICAvLyBGSVhNRSAoMTM2NTkzKTogSXQncyBh
bHNvIHBvc3NpYmxlIHRvIGRvIHRoZSB3cm9uZyB0aGluZyBoZXJlIGlmIENTUyBzcGVjaWZpZXMg
bG93LXF1YWxpdHkgaW50ZXJwb2xhdGlvbiB2aWEgdGhlICJpbWFnZS1yZW5kZXJpbmciCkBAIC0x
NjcsMTUgKzIxNSwzMCBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdl
CiAgICAgYm9vbCByZXBhaW50SWZOZWNlc3NhcnkgPSBpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBJ
bnRlcnBvbGF0aW9uTm9uZSAmJiBpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBJbnRlcnBvbGF0aW9u
TG93OwogI2VuZGlmCiAKLSAgICBpZiAobV9jYWNoZWRJbWFnZUJ1ZmZlciAmJiAoIXJlcGFpbnRJ
Zk5lY2Vzc2FyeSB8fCBjYWNoZVBhcmFtZXRlcnNNYXRjaChjb250ZXh0LCBkc3RSZWN0LCBzcmNS
ZWN0KSkpCisgICAgaWYgKCFtX2lzQ2FjaGVkUERGSW1hZ2VFbmFibGVkIHx8IChtX2NhY2hlZElt
YWdlQnVmZmVyICYmICghcmVwYWludElmTmVjZXNzYXJ5IHx8IGNhY2hlUGFyYW1ldGVyc01hdGNo
KGNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3QpKSkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBtX2NhY2hlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoRmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3QoZHN0UmVjdCkpLnNpemUoKSwgY29udGV4dCk7
Ci0gICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyKQorCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IG1fY2FjaGVkSW1hZ2VSZWN0ID0gY2FjaGVkSW1hZ2VSZWN0KGNvbnRleHQsIGRzdFJlY3QpOwor
CisgICAgLy8gQ2FjaGUgdGhlIFBERiBpbWFnZSBvbmx5IGlmIHRoZSBzaXplIG9mIHRoZSBuZXcg
aW1hZ2Ugd29uJ3QgZXhjZWVkIHRoZSBsaW1pdAorICAgIGlmIChzX2FsbERlY29kZWREYXRhU2l6
ZSArIG1fY2FjaGVkSW1hZ2VSZWN0LnNpemUoKS5hcmVhKCkgKiA0IC0gbV9jYWNoZWRCeXRlcyA+
IHNfbWF4RGVjb2RlZERhdGFTaXplKSB7CisgICAgICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOwog
ICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgYnVmZmVyQ29udGV4dCA9IG1fY2FjaGVkSW1hZ2VC
dWZmZXItPmNvbnRleHQoKTsKKyAgICB9CisjZWxzZQorICAgIG1fY2FjaGVkSW1hZ2VSZWN0ID0g
ZHN0UmVjdDsKKyNlbmRpZgogCi0gICAgdHJhbnNmb3JtQ29udGV4dEZvclBhaW50aW5nKGJ1ZmZl
ckNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3QpOworICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihGbG9hdFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtX2NhY2hlZEltYWdlUmVjdCkpLnNpemUoKSwgY29udGV4dCk7CisgICAgaWYgKCFtX2Nh
Y2hlZEltYWdlQnVmZmVyKSB7CisgICAgICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgYnVmZmVyQ29udGV4dCA9IG1fY2FjaGVkSW1h
Z2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICAvLyBUaGUgUERGIGNhY2hlZEltYWdlIHNob3VsZCBi
ZSBkcmF3biBhdCAoMCwgMCkgYWx3YXlzLgorICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGlu
ZyhidWZmZXJDb250ZXh0LCBGbG9hdFJlY3QoeyB9LCBkc3RSZWN0LnNpemUoKSksIHNyY1JlY3Qp
OwogICAgIGRyYXdQREZQYWdlKGJ1ZmZlckNvbnRleHQpOwogCiAgICAgbV9jYWNoZWRUcmFuc2Zv
cm0gPSBjb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpOwpAQCAtMTgzLDExICsyNDYsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVw
ZGF0ZUNhY2hlZEltYWdlCiAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVjdDsKIAogICAg
IEludFNpemUgaW50ZXJuYWxTaXplID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXpl
KCk7Ci0gICAgc2l6ZV90IG9sZENhY2hlZEJ5dGVzID0gbV9jYWNoZWRCeXRlczsKLSAgICBtX2Nh
Y2hlZEJ5dGVzID0gc2FmZUNhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUud2lkdGgoKSkgKiBpbnRl
cm5hbFNpemUuaGVpZ2h0KCkgKiA0OwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAg
ICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgc2FmZUNhc3Q8aW50
PihtX2NhY2hlZEJ5dGVzKSAtIHNhZmVDYXN0PGludD4ob2xkQ2FjaGVkQnl0ZXMpKTsKKyAgICBk
ZWNvZGVkU2l6ZUNoYW5nZWQoc2FmZUNhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUud2lkdGgoKSkg
KiBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiA0KTsKIH0KIAogdm9pZCBQREZEb2N1bWVudEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbikKQEAgLTIxNiwxMSArMjc1LDggQEAgdm9p
ZCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udAogdm9pZCBQREZEb2N1bWVudElt
YWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkKIHsKICAgICBtX2NhY2hlZEltYWdlQnVmZmVy
ID0gbnVsbHB0cjsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2Jz
ZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIC1zYWZlQ2FzdDxpbnQ+KG1fY2FjaGVk
Qnl0ZXMpKTsKLQotICAgIG1fY2FjaGVkQnl0ZXMgPSAwOworICAgIG1fY2FjaGVkSW1hZ2VSZWN0
ID0gRmxvYXRSZWN0KCk7CisgICAgZGVjb2RlZFNpemVDaGFuZ2VkKDApOwogfQogCiAjaWYgIVVT
RShQREZLSVRfRk9SX1BERkRPQ1VNRU5USU1BR0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCShyZXZpc2lv
biAyMDMxOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBERkRvY3VtZW50SW1hZ2Uob2JzZXJ2ZXIpKTsKICAg
ICB9CiAKKyAgICB2b2lkIHNldENhY2hlZFBERkltYWdlRW5hYmxlZChib29sKTsKKwogcHJpdmF0
ZToKICAgICBQREZEb2N1bWVudEltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKICAgICB2aXJ0dWFsIH5Q
REZEb2N1bWVudEltYWdlKCk7CkBAIC04MSw5ICs4MywxMiBAQCBwcml2YXRlOgogICAgIHVuc2ln
bmVkIHBhZ2VDb3VudCgpIGNvbnN0OwogICAgIHZvaWQgZHJhd1BERlBhZ2UoR3JhcGhpY3NDb250
ZXh0Jik7CiAKKyAgICB2b2lkIGRlY29kZWRTaXplQ2hhbmdlZChzaXplX3QgbmV3Q2FjaGVkQnl0
ZXMpOwogICAgIHZvaWQgdXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CiAg
ICAgYm9vbCBjYWNoZVBhcmFtZXRlcnNNYXRjaChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CiAKKyAgICBi
b29sIG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgeyB0cnVlIH07CisKICNpZiBVU0UoUERGS0lU
X0ZPUl9QREZET0NVTUVOVElNQUdFKQogICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9kb2N1
bWVudDsKICNlbHNlCkBAIC05MSw2ICs5Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9jYWNoZWRJbWFnZUJ1ZmZlcjsKKyAgICBGbG9h
dFJlY3QgbV9jYWNoZWRJbWFnZVJlY3Q7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fY2FjaGVkVHJh
bnNmb3JtOwogICAgIEZsb2F0U2l6ZSBtX2NhY2hlZERlc3RpbmF0aW9uU2l6ZTsKICAgICBGbG9h
dFJlY3QgbV9jYWNoZWRTb3VyY2VSZWN0OwpAQCAtMTAzLDYgKzEwOSw4IEBAIHByaXZhdGU6CiAK
IH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTUFHRShQREZEb2N1bWVudEltYWdlKQorCiAj
ZW5kaWYgLy8gVVNFKENHKQogCiAjZW5kaWYgLy8gUERGRG9jdW1lbnRJbWFnZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDIwMzE5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDEyICs0NSwxNCBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVk
ZSAiUERGRG9jdW1lbnRJbWFnZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWlu
dEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU1ZHSW1hZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHd0Zi9T
dGFja1N0YXRzLmg+CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC01NDUsNiArNTQ3LDkgQEAgdm9p
ZCBSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdChHcmFwaGljcwogICAgIEltYWdlKiBpbWFnZSA9
IGltYWdlUmVzb3VyY2UoKS5pbWFnZSgpLmdldCgpOwogICAgIEludGVycG9sYXRpb25RdWFsaXR5
IGludGVycG9sYXRpb24gPSBpbWFnZSA/IGNob29zZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRl
eHQsICppbWFnZSwgaW1hZ2UsIExheW91dFNpemUocmVjdC5zaXplKCkpKSA6IEludGVycG9sYXRp
b25EZWZhdWx0OwogCisgICAgaWYgKGlzPFBERkRvY3VtZW50SW1hZ2U+KGltYWdlKSkKKyAgICAg
ICAgZG93bmNhc3Q8UERGRG9jdW1lbnRJbWFnZT4oKmltYWdlKS5zZXRDYWNoZWRQREZJbWFnZUVu
YWJsZWQoZnJhbWUoKS5zZXR0aW5ncygpLmlzQ2FjaGVkUERGSW1hZ2VFbmFibGVkKCkpOworCiAg
ICAgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIG9yaWVudGF0aW9uRGVzY3JpcHRpb24oc2hv
dWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSwgc3R5bGUoKS5pbWFnZU9yaWVudGF0aW9uKCkp
OwogICAgIGNvbnRleHQuZHJhd0ltYWdlKCppbWcsIHJlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25z
KGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGVOb3JtYWwsIG9yaWVudGF0aW9uRGVzY3JpcHRp
b24sIGludGVycG9sYXRpb24pKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxTZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbFNldHRpbmdzLmNwcAkocmV2aXNpb24gMjAzMTkwKQorKysgU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAs
NyBAQCBJbnRlcm5hbFNldHRpbmdzOjpCYWNrdXA6OkJhY2t1cChTZXR0aW5nCiAgICAgLCBtX2xh
bmdBdHRyaWJ1dGVBd2FyZUZvcm1Db250cm9sVUlFbmFibGVkKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkubGFuZ0F0dHJpYnV0ZUF3YXJlRm9ybUNvbnRyb2xVSUVuYWJs
ZWQoKSkKICAgICAsIG1faW1hZ2VzRW5hYmxlZChzZXR0aW5ncy5hcmVJbWFnZXNFbmFibGVkKCkp
CiAgICAgLCBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKHNldHRpbmdzLnByZWZlck1JTUVUeXBl
Rm9ySW1hZ2VzKCkpCisgICAgLCBtX2NhY2hlZFBERkltYWdlRW5hYmxlZChzZXR0aW5ncy5pc0Nh
Y2hlZFBERkltYWdlRW5hYmxlZCgpKQogICAgICwgbV9taW5pbXVtVGltZXJJbnRlcnZhbChzZXR0
aW5ncy5taW5pbXVtRE9NVGltZXJJbnRlcnZhbCgpKQogI2lmIEVOQUJMRShWSURFT19UUkFDSykK
ICAgICAsIG1fc2hvdWxkRGlzcGxheVN1YnRpdGxlcyhzZXR0aW5ncy5zaG91bGREaXNwbGF5U3Vi
dGl0bGVzKCkpCkBAIC0xNTksNiArMTYwLDcgQEAgdm9pZCBJbnRlcm5hbFNldHRpbmdzOjpCYWNr
dXA6OnJlc3RvcmVUbwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkuc2V0TGFuZ0F0dHJpYnV0ZUF3YXJlRm9ybUNvbnRyb2xVSUVuYWJsZWQobV9sYW5nQXR0cmli
dXRlQXdhcmVGb3JtQ29udHJvbFVJRW5hYmxlZCk7CiAgICAgc2V0dGluZ3Muc2V0SW1hZ2VzRW5h
YmxlZChtX2ltYWdlc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLnNldFByZWZlck1JTUVUeXBlRm9y
SW1hZ2VzKG1fcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMpOworICAgIHNldHRpbmdzLnNldENhY2hl
ZFBERkltYWdlRW5hYmxlZChtX2NhY2hlZFBERkltYWdlRW5hYmxlZCk7CiAgICAgc2V0dGluZ3Mu
c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwobV9taW5pbXVtVGltZXJJbnRlcnZhbCk7CiAjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQogICAgIHNldHRpbmdzLnNldFNob3VsZERpc3BsYXlTdWJ0aXRs
ZXMobV9zaG91bGREaXNwbGF5U3VidGl0bGVzKTsKQEAgLTQ4Myw2ICs0ODUsMTIgQEAgdm9pZCBJ
bnRlcm5hbFNldHRpbmdzOjpzZXRJbWFnZXNFbmFibGVkKAogICAgIHNldHRpbmdzKCktPnNldElt
YWdlc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0Q2Fj
aGVkUERGSW1hZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgSW50ZXJuYWxTZXR0aW5nc0d1YXJkRm9yU2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncygpLT5z
ZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQoZW5hYmxlZCk7Cit9CisKIHZvaWQgSW50ZXJuYWxTZXR0
aW5nczo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIGludGVydmFsSW5TZWNvbmRzLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJbnRlcm5hbFNldHRpbmdzR3VhcmRGb3JTZXR0aW5n
cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmgJKHJl
dmlzaW9uIDIwMzE5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5n
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9v
bCBtX2xhbmdBdHRyaWJ1dGVBd2FyZUZvcm1Db250cm9sVUlFbmFibGVkOwogICAgICAgICBib29s
IG1faW1hZ2VzRW5hYmxlZDsKICAgICAgICAgYm9vbCBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2Vz
OworICAgICAgICBib29sIG1fY2FjaGVkUERGSW1hZ2VFbmFibGVkOwogICAgICAgICBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzIG1fbWluaW11bVRpbWVySW50ZXJ2YWw7CiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogICAgICAgICBib29sIG1fc2hvdWxkRGlzcGxheVN1YnRpdGxlczsKQEAgLTE0
MSw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbGxvd3NBaXJQbGF5Rm9yTWVkaWFQ
bGF5YmFjayhib29sKTsKICAgICB2b2lkIHNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBTdHJpbmcm
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRQcmVmZXJNSU1FVHlwZUZvckltYWdlcyhi
b29sLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQo
Ym9vbCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2V0U2hvdWxkRGlzcGxheVRyYWNrS2lu
ZChjb25zdCBTdHJpbmcmIGtpbmQsIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IGJvb2wgc2hvdWxkRGlzcGxheVRyYWNrS2luZChjb25zdCBTdHJpbmcmIGtpbmQsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIHNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShjb25zdCBTdHJpbmcm
LCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
U2V0dGluZ3MuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxTZXR0aW5ncy5pZGwJKHJldmlzaW9uIDIwMzE5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAK
ICAgICAvLyBPdGhlciBzd2l0Y2hlcwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0U3Rv
cmFnZUJsb2NraW5nUG9saWN5KERPTVN0cmluZyBwb2xpY3kpOwogICAgIFtSYWlzZXNFeGNlcHRp
b25dIHZvaWQgc2V0SW1hZ2VzRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOworICAgIFtSYWlzZXNF
eGNlcHRpb25dIHZvaWQgc2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7
CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRVc2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNo
b3J0aGFuZEJlaGF2aW9yKGJvb2xlYW4gZW5hYmxlZCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0g
dm9pZCBzZXRBdXRvc2Nyb2xsRm9yRHJhZ0FuZERyb3BFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7
CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5
b25kUGFnZShib29sZWFuIGhhc0V4dGVuZGVkQmFja2dyb3VuZCk7CkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMDMyMjQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNiBAQAorMjAxNi0wNy0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFBERkRvY3VtZW50SW1hZ2Ugc2hvdWxkIGNhY2hl
IG9ubHkgYSBzdWIgaW1hZ2Ugb2YgdGhlIFBERiB3aGVuIGNhY2hpbmcgdGhlIHdob2xlIGltYWdl
IGlzIGV4cGVuc2l2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTU4NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBNYWtlIHN1cmUgdGhlIFBERiBpbWFnZSB3aWxsIGJlIGRpc3BsYXllZCBh
dCB0aGUgY29ycmVjdCBwb3NpdGlvbiBpZiBjYWNoaW5nCisgICAgICAgIHRoZSBQREYgaW1hZ2Ug
aXMgZGlzYWJsZWQuCisKKyAgICAgICAgKiBmYXN0L2ltYWdlcy9kaXNwbGFjZWQtbm9uLWNhY2hl
ZC1wZGYtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvZGlzcGxh
Y2VkLW5vbi1jYWNoZWQtcGRmLmh0bWw6IEFkZGVkLgorCiAyMDE2LTA3LTE0ICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBET00gdmFsdWUgaXRlcmFibGUgaW50
ZXJmYWNlcyBzaG91bGQgdXNlIEFycmF5IHByb3RvdHlwZSBtZXRob2RzCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ltYWdlcy9kaXNwbGFjZWQtbm9uLWNhY2hlZC1wZGYtZXhwZWN0ZWQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kaXNwbGFjZWQtbm9uLWNhY2hl
ZC1wZGYtZXhwZWN0ZWQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2lt
YWdlcy9kaXNwbGFjZWQtbm9uLWNhY2hlZC1wZGYtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE3IEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgICAg
PHN0eWxlPgorICAgICAgICBkaXYgeworICAgICAgICAgICAgd2lkdGg6IDEwMHB4OworICAgICAg
ICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsK
KyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwLCAxNDMsIDApOworICAgICAgICB9
CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXY+PC9kaXY+CisgICAgPGRp
dj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBkZi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBkZi5odG1sCShub25leGlzdGVudCkK
KysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBkZi5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+
Cis8Ym9keT4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIgJiYg
d2luZG93LmludGVybmFscykKKyAgICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Mu
c2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKyAgICA8aW1n
IHNyYz0icmVzb3VyY2VzL2dyZWVuX3JlY3RhbmdsZS5wZGYiPgorICAgIDxpbWcgc3JjPSJyZXNv
dXJjZXMvZ3JlZW5fcmVjdGFuZ2xlLnBkZiI+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283658</attachid>
            <date>2016-07-14 10:34:45 -0700</date>
            <delta_ts>2016-07-15 17:05:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158715-20160714103358.patch</filename>
            <type>text/plain</type>
            <size>20391</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzIyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA3LTE0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgW2lPU10gUERG
RG9jdW1lbnRJbWFnZSBzaG91bGQgY2FjaGUgb25seSBhIHN1YiBpbWFnZSBvZiB0aGUgUERGIHdo
ZW4gY2FjaGluZyB0aGUgd2hvbGUgaW1hZ2UgaXMgZXhwZW5zaXZlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg3MTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2ltYWdlcy9kaXNwbGFj
ZWQtbm9uLWNhY2hlZC1wZGYuaHRtbAorCisgICAgICAgIEZvciBpT1MsIHdlIG5lZWQgdG8gZW5z
dXJlIHRoZSBzaXplIG9mIHRoZSBjYWNoZWQgUERGIGltYWdlcyB3aWxsIG5vdAorICAgICAgICBl
eGNlZWQgc29tZSBsaW1pdC4gQWxzbyB3ZSBzaG91bGQgYmUgY2FjaGluZyBvbmx5IGEgc3ViIGlt
YWdlIG9mIHRoZSBQREYKKyAgICAgICAgaWYgY2FjaGluZyB0aGUgd2hvbGUgaW1hZ2Ugd2lsbCBl
eGNlZWQgdGhlIG1lbW9yeSBsaW1pdC4KKworICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNldHRpbmdzOjpzZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQpOgorICAgICAgICAqIHBhZ2UvU2V0
dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjppc0NhY2hlZFBERkltYWdlRW5h
YmxlZCk6CisgICAgICAgICAgICBBZGQgYW4gb3B0aW9uIHRvIGRpc2FibGUgY2FjaGluZyB0aGUg
UERGIGltYWdlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6c2V0Q2FjaGVk
UERGSW1hZ2VFbmFibGVkKToKKyAgICAgICAgICAgIEFsbG93IHRoZSBjYWxsZXIgb2YgZHJhdygp
IHRvIGRpc2FibGUgY2FjaGluZyB0aGUgUERGIGltYWdlcy4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaCk6CisgICAgICAg
ICAgICBNYXRjaCB0aGUgY29udGV4dCBkaXJ0eSByZWN0YW5nbGUgd2l0aCB0aGUgY2FjaGVkIGlt
YWdlIHJlY3RhbmdsZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1Db250
ZXh0Rm9yUGFpbnRpbmcpOgorICAgICAgICAgICAgV2hlbiBwcmVwYXJpbmcgdGhlIGNvbnRleHQg
Zm9yIGRyYXdpbmcgdGhlIFBERiwgdGFrZSB0aGUgbG9jYXRpb24gCisgICAgICAgICAgICBvZiB0
aGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIGludG8gYWNjb3VudC4gV2UgZG8gbm90IG5lZWQgdG8g
c2NhbGUKKyAgICAgICAgICAgIHRoZSBsb2NhdGlvbiBvZiB0aGUgc291cmNlIHJlY3RhbmdsZSBi
ZWNhdXNlIHdlIHNjYWxlIHRoZSBzaXplIG9mCisgICAgICAgICAgICB0aGUgcmVjdGFuZ2xlIGJ1
dCB3ZSBkb24ndCBzY2FsZSB0aGUgd2hvbGUgY29vcmRpbmF0ZSBzeXN0ZW0uCisKKyAgICAgICAg
KFdlYkNvcmU6OmNhY2hlZEltYWdlUmVjdCk6CisgICAgICAgICAgICBDYWxjdWxhdGUgdGhlIHJl
Y3RhbmdsZSBvZiB0aGUgY2FjaGVkIGltYWdlIHN1Y2ggdGhhdCBpdCBkb2VzIG5vdAorICAgICAg
ICAgICAgZXhjZWVkIHRoZSBsaW1pdC4gU3RhcnQgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBkaXJ0
eSByZWN0YW5nbGUgYW5kCisgICAgICAgICAgICB0aGVuIGV4cGFuZCBhcm91bmQgaXQuCisgICAg
ICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OmRlY29kZWRTaXpl
Q2hhbmdlZCk6CisgICAgICAgICAgICBJbiBhZGRpdGlvbiB0byBub3RpZnlpbmcgdGhlIEltYWdl
T2JzZXJ2ZXIsIGl0IGtlZXBzIHRyYWNrIG9mIHRoZSBzaXplCisgICAgICAgICAgICBvZiBhbGwg
dGhlIGNhY2hlZCBQREYgaW1hZ2VzLgorCisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudElt
YWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToKKyAgICAgICAgICAgIEVuc3VyZSB0aGUg
c2l6ZSBvZiBhbGwgdGhlIGNhY2hlZCBpbWFnZXMgZG9lcyBub3QgZXhjZWVkIHRoZSBsaW1pdAor
ICAgICAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuaDoKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRJbnRvUmVjdCk6CisgICAgICAgICAgICBQYXNz
IHRoZSBvcHRpb24gdG8gZGlzYWJsZSBjYWNoaW5nIHRoZSBQREYgaW1hZ2VzIHRvIFBERkRvY3Vt
ZW50SW1hZ2UuCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0aW5nczo6QmFja3VwOjpCYWNrdXApOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0aW5nczo6QmFja3VwOjpyZXN0b3JlVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0aW5nczo6c2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKToK
KyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaDoKKyAgICAgICAgKiB0ZXN0aW5n
L0ludGVybmFsU2V0dGluZ3MuaWRsOgorICAgICAgICAgICAgQWRkIGFuIGludGVybmFsIG9wdGlv
biB0byBkaXNhYmxlIGNhY2hpbmcgdGhlIFBERiBpbWFnZXMuCisKIDIwMTYtMDctMTQgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTGliXSBV
c2UgYSBHU291cmNlIGluc3RlYWQgb2YgYSB0aHJlYWQgdG8gcG9sbCBtZW1vcnkgcHJlc3N1cmUg
ZXZlbnRGRCBpbiBsaW51eCBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9TZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAJKHJldmlzaW9uIDIwMzE5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdz
KFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseShmYWxzZSkKICAg
ICAsIG1fYXJlSW1hZ2VzRW5hYmxlZCh0cnVlKQogICAgICwgbV9wcmVmZXJNSU1FVHlwZUZvcklt
YWdlcyhmYWxzZSkKKyAgICAsIG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQodHJ1ZSkKICAgICAs
IG1fYXJlUGx1Z2luc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2lzU2NyaXB0RW5hYmxlZChmYWxz
ZSkKICAgICAsIG1fbmVlZHNBZG9iZUZyYW1lUmVsb2FkaW5nUXVpcmsoZmFsc2UpCkBAIC00MjUs
NiArNDI2LDExIEBAIHZvaWQgU2V0dGluZ3M6OnNldFByZWZlck1JTUVUeXBlRm9ySW1hZ2UKICAg
ICBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzID0gcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXM7CiB9
CiAKK3ZvaWQgU2V0dGluZ3M6OnNldENhY2hlZFBERkltYWdlRW5hYmxlZChib29sIGlzQ2FjaGVk
UERGSW1hZ2VFbmFibGVkKQoreworICAgIG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgPSBpc0Nh
Y2hlZFBERkltYWdlRW5hYmxlZDsKK30KKwogdm9pZCBTZXR0aW5nczo6c2V0Rm9yY2VQZW5kaW5n
V2ViR0xQb2xpY3koYm9vbCBmb3JjZWQpCiB7CiAgICAgbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGlj
eSA9IGZvcmNlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDIwMzE5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2
LDYgKzE0Niw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFByZWZlck1J
TUVUeXBlRm9ySW1hZ2VzKGJvb2wpOwogICAgIGJvb2wgcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMo
KSBjb25zdCB7IHJldHVybiBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzOyB9CiAKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldENhY2hlZFBERkltYWdlRW5hYmxlZChib29sKTsKKyAgICBib29s
IGlzQ2FjaGVkUERGSW1hZ2VFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NhY2hlZFBERklt
YWdlRW5hYmxlZDsgfQorCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbHVnaW5zRW5hYmxl
ZChib29sKTsKICAgICBib29sIGFyZVBsdWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9h
cmVQbHVnaW5zRW5hYmxlZDsgfQogCkBAIC0zMjgsNiArMzMxLDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5IDogMTsKICAgICBib29sIG1fYXJlSW1hZ2Vz
RW5hYmxlZCA6IDE7CiAgICAgYm9vbCBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzIDogMTsKKyAg
ICBib29sIG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgOiAxOwogICAgIGJvb2wgbV9hcmVQbHVn
aW5zRW5hYmxlZCA6IDE7CiAgICAgYm9vbCBtX2lzU2NyaXB0RW5hYmxlZCA6IDE7CiAgICAgYm9v
bCBtX25lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCShyZXZpc2lvbiAyMDMxOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwx
NSBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgCiAgICAgcmV0dXJu
IG1fZG9jdW1lbnQ7IC8vIFJldHVybiB0cnVlIGlmIHNpemUgaXMgYXZhaWxhYmxlLgogfQogCit2
b2lkIFBERkRvY3VtZW50SW1hZ2U6OnNldENhY2hlZFBERkltYWdlRW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgaWYgKG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgPT0gZW5hYmxlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCEobV9pc0NhY2hlZFBERkltYWdlRW5hYmxlZCA9IGVu
YWJsZWQpKQorICAgICAgICBkZXN0cm95RGVjb2RlZERhdGEoKTsKK30KKwogYm9vbCBQREZEb2N1
bWVudEltYWdlOjpjYWNoZVBhcmFtZXRlcnNNYXRjaChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25z
dAogewogICAgIGlmIChkc3RSZWN0LnNpemUoKSAhPSBtX2NhY2hlZERlc3RpbmF0aW9uU2l6ZSkK
QEAgLTEwOCw2ICsxMTcsOSBAQCBib29sIFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVy
c01hCiAgICAgaWYgKHNyY1JlY3QgIT0gbV9jYWNoZWRTb3VyY2VSZWN0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBpZiAoIW1fY2FjaGVkSW1hZ2VSZWN0LmNvbnRhaW5zKGNvbnRleHQu
Y2xpcEJvdW5kcygpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgQWZmaW5lVHJhbnNm
b3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHJhbnNmb3JtOwogICAgIGNvbnRleHQuZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21w
b3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0pOwogCkBAIC0xMzcsMjMgKzE0OSw1OSBAQCBzdGF0aWMg
dm9pZCB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmcoCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBjb250ZXh0LnRyYW5zbGF0ZShzcmNSZWN0LngoKSAqIGhTY2FsZSwgc3JjUmVjdC55KCkgKiB2
U2NhbGUpOworICAgIC8vIE1vdmluZyBjb29yZGluYXRlcyB0byAtc3JjUmVjdC5sb2NhdGlvbigp
ID0+IHNyY0NvbnRleHQoc3JjUmVjdC54KCksIHNyY1JlY3QueSgpKSAtPiBkc3RDb250ZXh0KDAs
IDApCisgICAgLy8gTW92aW5nIGNvb3JkaW5hdGVzIHRvIGRzdFJlY3QubG9jYXRpb24oKSA9PiBz
cmNDb250ZXh0KDAsIDApIC0+IGRzdENvbnRleHQoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKQor
ICAgIC8vIENvbWJpbmluZyBib3RoID0+IHNyY0NvbnRleHQoc3JjUmVjdC54KCksIHNyY1JlY3Qu
eSgpKSAtPiBkc3RDb250ZXh0KGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSkKKyAgICBjb250ZXh0
LnRyYW5zbGF0ZShkc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpLCBkc3RSZWN0LnkoKSAtIHNyY1Jl
Y3QueSgpKTsKICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZShoU2NhbGUsIC12U2NhbGUpKTsK
ICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtc3JjUmVjdC5oZWlnaHQoKSk7CiB9CiAKLXZvaWQg
UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0KQotewogI2lmIFBMQVRGT1JNKElPUykKLSAgICAvLyBPbiBpT1MsIGlmIHRoZSBwaHlz
aWNhbCBtZW1vcnkgaXMgbGVzcyB0aGFuIDFHQiwgZG8gbm90IGFsbG9jYXRlIG1vcmUgdGhhbiAx
Nk1CIGZvciB0aGUgUERGIGNhY2hlZEltYWdlLgotICAgIGNvbnN0IHNpemVfdCBtZW1vcnlUaHJl
c2hvbGQgPSBXVEY6OkdCOwotICAgIGNvbnN0IHNpemVfdCBtYXhBcmVhID0gMTYgKiBXVEY6Ok1C
IC8gNDsgLy8gMTYgTUIgbWF4aW11bSBzaXplLCBkaXZpZGVkIGJ5IGEgcm91Z2ggY29zdCBvZiA0
IGJ5dGVzIHBlciBwaXhlbCBvZiBhcmVhLgotICAgIAotICAgIGlmIChyYW1TaXplKCkgPD0gbWVt
b3J5VGhyZXNob2xkICYmIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShkc3RSZWN0
LnNpemUoKSwgY29udGV4dCkuYXJlYSgpID49IG1heEFyZWEpIHsKLSAgICAgICAgbV9jYWNoZWRJ
bWFnZUJ1ZmZlciA9IG51bGxwdHI7CisvLyBUbyBhdm9pZCB0aGUgamV0c2FtIG9uIGlPUywgd2Ug
YXJlIGdvaW5nIHRvIGxpbWl0IHRoZSBzaXplIG9mIGFsbCB0aGUgUERGIGNhY2hlZEltYWdlcyB0
byBiZSA2NE1CLgorc3RhdGljIGNvbnN0IHNpemVfdCBzX21heENhY2hlZEltYWdlU2lkZSA9IDQg
KiBLQjsKK3N0YXRpYyBjb25zdCBzaXplX3Qgc19tYXhDYWNoZWRJbWFnZVNpemUgPSBzX21heENh
Y2hlZEltYWdlU2lkZSAqIHNfbWF4Q2FjaGVkSW1hZ2VTaWRlICogNDsKKworc3RhdGljIGNvbnN0
IHNpemVfdCBzX21heERlY29kZWREYXRhU2l6ZSA9IHNfbWF4Q2FjaGVkSW1hZ2VTaXplOworc3Rh
dGljIHNpemVfdCBzX2FsbERlY29kZWREYXRhU2l6ZSA9IDA7CisKK3N0YXRpYyBGbG9hdFJlY3Qg
Y2FjaGVkSW1hZ2VSZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0KQoreworICAgIEZsb2F0U2l6ZSBtYXhTaXplID0gc19tYXhDYWNoZWRJbWFnZVNp
ZGUgLyBjb250ZXh0LnNjYWxlRmFjdG9yKCk7CisKKyAgICAvLyBFeHBhbmQgZnJvbSB0aGUgY2Vu
dGVyIG9mIHRoZSBkaXJ0eSByZWN0YW5nbGUuCisgICAgRmxvYXRSZWN0IHJlY3QgPSBjb250ZXh0
LmNsaXBCb3VuZHMoKTsKKyAgICByZWN0LnNldFgoc3RkOjptYXgocmVjdC5jZW50ZXIoKS54KCkg
LSBtYXhTaXplLndpZHRoKCkgLyAyLCBkc3RSZWN0LngoKSkpOworICAgIHJlY3Quc2V0WShzdGQ6
Om1heChyZWN0LmNlbnRlcigpLnkoKSAtIG1heFNpemUuaGVpZ2h0KCkgLyAyLCBkc3RSZWN0Lnko
KSkpOworCisgICAgLy8gQ292ZXIgYXMgbXVjaCBhcyB3ZSBjb3VsZCBmcm9tIHRoZSBkc3RSZWN0
LgorICAgIHJlY3Quc2V0V2lkdGgoc3RkOjptaW4obWF4U2l6ZS53aWR0aCgpLCBkc3RSZWN0Lndp
ZHRoKCkpKTsKKyAgICByZWN0LnNldEhlaWdodChzdGQ6Om1pbihtYXhTaXplLmhlaWdodCgpLCBk
c3RSZWN0LmhlaWdodCgpKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisjZW5kaWYKKwordm9pZCBQ
REZEb2N1bWVudEltYWdlOjpkZWNvZGVkU2l6ZUNoYW5nZWQoc2l6ZV90IG5ld0NhY2hlZEJ5dGVz
KQoreworICAgIGlmICghbV9jYWNoZWRCeXRlcyAmJiAhbmV3Q2FjaGVkQnl0ZXMpCiAgICAgICAg
IHJldHVybjsKLSAgICB9CiAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFn
ZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihtX2Nh
Y2hlZEJ5dGVzKSArIG5ld0NhY2hlZEJ5dGVzKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBB
U1NFUlQoc19hbGxEZWNvZGVkRGF0YVNpemUgPj0gbV9jYWNoZWRCeXRlcyk7CisgICAgLy8gVXBk
YXRlIHdpdGggdGhlIGRpZmZlcmVuY2UgaW4gdHdvIHN0ZXBzIHRvIGF2b2lkIHVuc2lnbmVkIHVu
ZGVyZmxvdyBzdWJ0cmFjdGlvbi4KKyAgICBzX2FsbERlY29kZWREYXRhU2l6ZSAtPSBtX2NhY2hl
ZEJ5dGVzOworICAgIHNfYWxsRGVjb2RlZERhdGFTaXplICs9IG5ld0NhY2hlZEJ5dGVzOworI2Vu
ZGlmCisKKyAgICBtX2NhY2hlZEJ5dGVzID0gbmV3Q2FjaGVkQnl0ZXM7Cit9CisKK3ZvaWQgUERG
RG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0KQoreworI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBPbiBpT1MsIHNvbWUgY2xpZW50cyB1
c2UgbG93LXF1YWxpdHkgaW1hZ2UgaW50ZXJwb2xhdGlvbiBhbHdheXMsIHdoaWNoIHRocm93cyBv
ZmYgdGhpcyBvcHRpbWl6YXRpb24sCiAgICAgLy8gYXMgd2UgbmV2ZXIgZ2V0IHRoZSBzdWJzZXF1
ZW50IGhpZ2gtcXVhbGl0eSBwYWludC4gU2luY2UgbGl2ZSByZXNpemUgaXMgcmFyZSBvbiBpT1Ms
IGRpc2FibGUgdGhlIG9wdGltaXphdGlvbi4KICAgICAvLyBGSVhNRSAoMTM2NTkzKTogSXQncyBh
bHNvIHBvc3NpYmxlIHRvIGRvIHRoZSB3cm9uZyB0aGluZyBoZXJlIGlmIENTUyBzcGVjaWZpZXMg
bG93LXF1YWxpdHkgaW50ZXJwb2xhdGlvbiB2aWEgdGhlICJpbWFnZS1yZW5kZXJpbmciCkBAIC0x
NjcsMTUgKzIxNSwzMCBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdl
CiAgICAgYm9vbCByZXBhaW50SWZOZWNlc3NhcnkgPSBpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBJ
bnRlcnBvbGF0aW9uTm9uZSAmJiBpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBJbnRlcnBvbGF0aW9u
TG93OwogI2VuZGlmCiAKLSAgICBpZiAobV9jYWNoZWRJbWFnZUJ1ZmZlciAmJiAoIXJlcGFpbnRJ
Zk5lY2Vzc2FyeSB8fCBjYWNoZVBhcmFtZXRlcnNNYXRjaChjb250ZXh0LCBkc3RSZWN0LCBzcmNS
ZWN0KSkpCisgICAgaWYgKCFtX2lzQ2FjaGVkUERGSW1hZ2VFbmFibGVkIHx8IChtX2NhY2hlZElt
YWdlQnVmZmVyICYmICghcmVwYWludElmTmVjZXNzYXJ5IHx8IGNhY2hlUGFyYW1ldGVyc01hdGNo
KGNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3QpKSkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBtX2NhY2hlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoRmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3QoZHN0UmVjdCkpLnNpemUoKSwgY29udGV4dCk7
Ci0gICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyKQorCisjaWYgUExBVEZPUk0oSU9TKQorICAg
IG1fY2FjaGVkSW1hZ2VSZWN0ID0gY2FjaGVkSW1hZ2VSZWN0KGNvbnRleHQsIGRzdFJlY3QpOwor
CisgICAgLy8gQ2FjaGUgdGhlIFBERiBpbWFnZSBvbmx5IGlmIHRoZSBzaXplIG9mIHRoZSBuZXcg
aW1hZ2Ugd29uJ3QgZXhjZWVkIHRoZSBsaW1pdAorICAgIGlmIChzX2FsbERlY29kZWREYXRhU2l6
ZSArIG1fY2FjaGVkSW1hZ2VSZWN0LnNpemUoKS5hcmVhKCkgKiA0IC0gbV9jYWNoZWRCeXRlcyA+
IHNfbWF4RGVjb2RlZERhdGFTaXplKSB7CisgICAgICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOwog
ICAgICAgICByZXR1cm47Ci0gICAgYXV0byYgYnVmZmVyQ29udGV4dCA9IG1fY2FjaGVkSW1hZ2VC
dWZmZXItPmNvbnRleHQoKTsKKyAgICB9CisjZWxzZQorICAgIG1fY2FjaGVkSW1hZ2VSZWN0ID0g
ZHN0UmVjdDsKKyNlbmRpZgogCi0gICAgdHJhbnNmb3JtQ29udGV4dEZvclBhaW50aW5nKGJ1ZmZl
ckNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3QpOworICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihGbG9hdFJlY3QoZW5jbG9zaW5nSW50
UmVjdChtX2NhY2hlZEltYWdlUmVjdCkpLnNpemUoKSwgY29udGV4dCk7CisgICAgaWYgKCFtX2Nh
Y2hlZEltYWdlQnVmZmVyKSB7CisgICAgICAgIGRlc3Ryb3lEZWNvZGVkRGF0YSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgYnVmZmVyQ29udGV4dCA9IG1fY2FjaGVkSW1h
Z2VCdWZmZXItPmNvbnRleHQoKTsKKyAgICAvLyBUaGUgUERGIGNhY2hlZEltYWdlIHNob3VsZCBi
ZSBkcmF3biBhdCAoMCwgMCkgYWx3YXlzLgorICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWludGlu
ZyhidWZmZXJDb250ZXh0LCBGbG9hdFJlY3QoeyB9LCBkc3RSZWN0LnNpemUoKSksIHNyY1JlY3Qp
OwogICAgIGRyYXdQREZQYWdlKGJ1ZmZlckNvbnRleHQpOwogCiAgICAgbV9jYWNoZWRUcmFuc2Zv
cm0gPSBjb250ZXh0LmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpOwpAQCAtMTgzLDExICsyNDYsNyBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVw
ZGF0ZUNhY2hlZEltYWdlCiAgICAgbV9jYWNoZWRTb3VyY2VSZWN0ID0gc3JjUmVjdDsKIAogICAg
IEludFNpemUgaW50ZXJuYWxTaXplID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXpl
KCk7Ci0gICAgc2l6ZV90IG9sZENhY2hlZEJ5dGVzID0gbV9jYWNoZWRCeXRlczsKLSAgICBtX2Nh
Y2hlZEJ5dGVzID0gc2FmZUNhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUud2lkdGgoKSkgKiBpbnRl
cm5hbFNpemUuaGVpZ2h0KCkgKiA0OwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAg
ICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgc2FmZUNhc3Q8aW50
PihtX2NhY2hlZEJ5dGVzKSAtIHNhZmVDYXN0PGludD4ob2xkQ2FjaGVkQnl0ZXMpKTsKKyAgICBk
ZWNvZGVkU2l6ZUNoYW5nZWQoc2FmZUNhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUud2lkdGgoKSkg
KiBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiA0KTsKIH0KIAogdm9pZCBQREZEb2N1bWVudEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbikKQEAgLTIxNiwxMSArMjc1LDggQEAgdm9p
ZCBQREZEb2N1bWVudEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udAogdm9pZCBQREZEb2N1bWVudElt
YWdlOjpkZXN0cm95RGVjb2RlZERhdGEoYm9vbCkKIHsKICAgICBtX2NhY2hlZEltYWdlQnVmZmVy
ID0gbnVsbHB0cjsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2Jz
ZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIC1zYWZlQ2FzdDxpbnQ+KG1fY2FjaGVk
Qnl0ZXMpKTsKLQotICAgIG1fY2FjaGVkQnl0ZXMgPSAwOworICAgIG1fY2FjaGVkSW1hZ2VSZWN0
ID0gRmxvYXRSZWN0KCk7CisgICAgZGVjb2RlZFNpemVDaGFuZ2VkKDApOwogfQogCiAjaWYgIVVT
RShQREZLSVRfRk9SX1BERkRPQ1VNRU5USU1BR0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCShyZXZpc2lv
biAyMDMxOTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBERkRvY3VtZW50SW1hZ2Uob2JzZXJ2ZXIpKTsKICAg
ICB9CiAKKyAgICB2b2lkIHNldENhY2hlZFBERkltYWdlRW5hYmxlZChib29sKTsKKwogcHJpdmF0
ZToKICAgICBQREZEb2N1bWVudEltYWdlKEltYWdlT2JzZXJ2ZXIqKTsKICAgICB2aXJ0dWFsIH5Q
REZEb2N1bWVudEltYWdlKCk7CkBAIC04MSw5ICs4MywxMiBAQCBwcml2YXRlOgogICAgIHVuc2ln
bmVkIHBhZ2VDb3VudCgpIGNvbnN0OwogICAgIHZvaWQgZHJhd1BERlBhZ2UoR3JhcGhpY3NDb250
ZXh0Jik7CiAKKyAgICB2b2lkIGRlY29kZWRTaXplQ2hhbmdlZChzaXplX3QgbmV3Q2FjaGVkQnl0
ZXMpOwogICAgIHZvaWQgdXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CiAg
ICAgYm9vbCBjYWNoZVBhcmFtZXRlcnNNYXRjaChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CiAKKyAgICBi
b29sIG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgeyB0cnVlIH07CisKICNpZiBVU0UoUERGS0lU
X0ZPUl9QREZET0NVTUVOVElNQUdFKQogICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9kb2N1
bWVudDsKICNlbHNlCkBAIC05MSw2ICs5Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9jYWNoZWRJbWFnZUJ1ZmZlcjsKKyAgICBGbG9h
dFJlY3QgbV9jYWNoZWRJbWFnZVJlY3Q7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fY2FjaGVkVHJh
bnNmb3JtOwogICAgIEZsb2F0U2l6ZSBtX2NhY2hlZERlc3RpbmF0aW9uU2l6ZTsKICAgICBGbG9h
dFJlY3QgbV9jYWNoZWRTb3VyY2VSZWN0OwpAQCAtMTAzLDYgKzEwOSw4IEBAIHByaXZhdGU6CiAK
IH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTUFHRShQREZEb2N1bWVudEltYWdlKQorCiAj
ZW5kaWYgLy8gVVNFKENHKQogCiAjZW5kaWYgLy8gUERGRG9jdW1lbnRJbWFnZV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDIwMzE5MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDYgKzU4LDExIEBACiAjaW5jbHVkZSAiU2VsZWN0aW9uUmVjdC5oIgogI2VuZGlm
CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiUERGRG9jdW1lbnRJbWFnZS5oIgorI2luY2x1ZGUg
IlNldHRpbmdzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZP
Uk0oSU9TKQpAQCAtNTQ1LDYgKzU1MCwxMSBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludEludG9S
ZWN0KEdyYXBoaWNzCiAgICAgSW1hZ2UqIGltYWdlID0gaW1hZ2VSZXNvdXJjZSgpLmltYWdlKCku
Z2V0KCk7CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvbiA9IGltYWdlID8g
Y2hvb3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwgKmltYWdlLCBpbWFnZSwgTGF5b3V0
U2l6ZShyZWN0LnNpemUoKSkpIDogSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CiAKKyNpZiBVU0UoQ0cp
CisgICAgaWYgKGlzPFBERkRvY3VtZW50SW1hZ2U+KGltYWdlKSkKKyAgICAgICAgZG93bmNhc3Q8
UERGRG9jdW1lbnRJbWFnZT4oKmltYWdlKS5zZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQoZnJhbWUo
KS5zZXR0aW5ncygpLmlzQ2FjaGVkUERGSW1hZ2VFbmFibGVkKCkpOworI2VuZGlmCisKICAgICBJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gb3JpZW50YXRpb25EZXNjcmlwdGlvbihzaG91bGRS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpLCBzdHlsZSgpLmltYWdlT3JpZW50YXRpb24oKSk7CiAg
ICAgY29udGV4dC5kcmF3SW1hZ2UoKmltZywgcmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMoY29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZU5vcm1hbCwgb3JpZW50YXRpb25EZXNjcmlwdGlvbiwg
aW50ZXJwb2xhdGlvbikpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bFNldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFsU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAyMDMxOTApCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBA
IEludGVybmFsU2V0dGluZ3M6OkJhY2t1cDo6QmFja3VwKFNldHRpbmcKICAgICAsIG1fbGFuZ0F0
dHJpYnV0ZUF3YXJlRm9ybUNvbnRyb2xVSUVuYWJsZWQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5sYW5nQXR0cmlidXRlQXdhcmVGb3JtQ29udHJvbFVJRW5hYmxlZCgp
KQogICAgICwgbV9pbWFnZXNFbmFibGVkKHNldHRpbmdzLmFyZUltYWdlc0VuYWJsZWQoKSkKICAg
ICAsIG1fcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoc2V0dGluZ3MucHJlZmVyTUlNRVR5cGVGb3JJ
bWFnZXMoKSkKKyAgICAsIG1fY2FjaGVkUERGSW1hZ2VFbmFibGVkKHNldHRpbmdzLmlzQ2FjaGVk
UERGSW1hZ2VFbmFibGVkKCkpCiAgICAgLCBtX21pbmltdW1UaW1lckludGVydmFsKHNldHRpbmdz
Lm1pbmltdW1ET01UaW1lckludGVydmFsKCkpCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAg
ICwgbV9zaG91bGREaXNwbGF5U3VidGl0bGVzKHNldHRpbmdzLnNob3VsZERpc3BsYXlTdWJ0aXRs
ZXMoKSkKQEAgLTE1OSw2ICsxNjAsNyBAQCB2b2lkIEludGVybmFsU2V0dGluZ3M6OkJhY2t1cDo6
cmVzdG9yZVRvCiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5z
ZXRMYW5nQXR0cmlidXRlQXdhcmVGb3JtQ29udHJvbFVJRW5hYmxlZChtX2xhbmdBdHRyaWJ1dGVB
d2FyZUZvcm1Db250cm9sVUlFbmFibGVkKTsKICAgICBzZXR0aW5ncy5zZXRJbWFnZXNFbmFibGVk
KG1faW1hZ2VzRW5hYmxlZCk7CiAgICAgc2V0dGluZ3Muc2V0UHJlZmVyTUlNRVR5cGVGb3JJbWFn
ZXMobV9wcmVmZXJNSU1FVHlwZUZvckltYWdlcyk7CisgICAgc2V0dGluZ3Muc2V0Q2FjaGVkUERG
SW1hZ2VFbmFibGVkKG1fY2FjaGVkUERGSW1hZ2VFbmFibGVkKTsKICAgICBzZXR0aW5ncy5zZXRN
aW5pbXVtRE9NVGltZXJJbnRlcnZhbChtX21pbmltdW1UaW1lckludGVydmFsKTsKICNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCiAgICAgc2V0dGluZ3Muc2V0U2hvdWxkRGlzcGxheVN1YnRpdGxlcyht
X3Nob3VsZERpc3BsYXlTdWJ0aXRsZXMpOwpAQCAtNDgzLDYgKzQ4NSwxMiBAQCB2b2lkIEludGVy
bmFsU2V0dGluZ3M6OnNldEltYWdlc0VuYWJsZWQoCiAgICAgc2V0dGluZ3MoKS0+c2V0SW1hZ2Vz
RW5hYmxlZChlbmFibGVkKTsKIH0KIAordm9pZCBJbnRlcm5hbFNldHRpbmdzOjpzZXRDYWNoZWRQ
REZJbWFnZUVuYWJsZWQoYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJ
bnRlcm5hbFNldHRpbmdzR3VhcmRGb3JTZXR0aW5ncygpOworICAgIHNldHRpbmdzKCktPnNldENh
Y2hlZFBERkltYWdlRW5hYmxlZChlbmFibGVkKTsKK30KKwogdm9pZCBJbnRlcm5hbFNldHRpbmdz
OjpzZXRNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIEludGVybmFsU2V0dGluZ3NHdWFyZEZvclNldHRpbmdzKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAkocmV2aXNp
b24gMjAzMTkwKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgcHVibGljOgogICAgICAgICBib29sIG1f
bGFuZ0F0dHJpYnV0ZUF3YXJlRm9ybUNvbnRyb2xVSUVuYWJsZWQ7CiAgICAgICAgIGJvb2wgbV9p
bWFnZXNFbmFibGVkOwogICAgICAgICBib29sIG1fcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXM7Cisg
ICAgICAgIGJvb2wgbV9jYWNoZWRQREZJbWFnZUVuYWJsZWQ7CiAgICAgICAgIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHMgbV9taW5pbXVtVGltZXJJbnRlcnZhbDsKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCiAgICAgICAgIGJvb2wgbV9zaG91bGREaXNwbGF5U3VidGl0bGVzOwpAQCAtMTQxLDYg
KzE0Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsbG93c0FpclBsYXlGb3JNZWRpYVBsYXli
YWNrKGJvb2wpOwogICAgIHZvaWQgc2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldFByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKGJvb2ws
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHNldENhY2hlZFBERkltYWdlRW5hYmxlZChib29s
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRTaG91bGREaXNwbGF5VHJhY2tLaW5kKGNv
bnN0IFN0cmluZyYga2luZCwgYm9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9v
bCBzaG91bGREaXNwbGF5VHJhY2tLaW5kKGNvbnN0IFN0cmluZyYga2luZCwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0
aW5ncy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNl
dHRpbmdzLmlkbAkocmV2aXNpb24gMjAzMTkwKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbFNldHRpbmdzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQAogICAg
IC8vIE90aGVyIHN3aXRjaGVzCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRTdG9yYWdl
QmxvY2tpbmdQb2xpY3koRE9NU3RyaW5nIHBvbGljeSk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0g
dm9pZCBzZXRJbWFnZXNFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7CisgICAgW1JhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCBzZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKICAg
ICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFVzZUxlZ2FjeUJhY2tncm91bmRTaXplU2hvcnRo
YW5kQmVoYXZpb3IoYm9vbGVhbiBlbmFibGVkKTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHNldEF1dG9zY3JvbGxGb3JEcmFnQW5kRHJvcEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKICAg
ICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQ
YWdlKGJvb2xlYW4gaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kKTsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIw
MzIyNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDE2LTA3LTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW2lPU10gUERGRG9jdW1lbnRJbWFnZSBzaG91bGQgY2FjaGUgb25s
eSBhIHN1YiBpbWFnZSBvZiB0aGUgUERGIHdoZW4gY2FjaGluZyB0aGUgd2hvbGUgaW1hZ2UgaXMg
ZXhwZW5zaXZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTg3MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIE1ha2Ugc3VyZSB0aGUgUERGIGltYWdlIHdpbGwgYmUgZGlzcGxheWVkIGF0IHRo
ZSBjb3JyZWN0IHBvc2l0aW9uIGlmIGNhY2hpbmcKKyAgICAgICAgdGhlIFBERiBpbWFnZSBpcyBk
aXNhYmxlZC4KKworICAgICAgICAqIGZhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBk
Zi1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9kaXNwbGFjZWQt
bm9uLWNhY2hlZC1wZGYuaHRtbDogQWRkZWQuCisKIDIwMTYtMDctMTQgIFlvdWVubiBGYWJsZXQg
IDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIERPTSB2YWx1ZSBpdGVyYWJsZSBpbnRlcmZh
Y2VzIHNob3VsZCB1c2UgQXJyYXkgcHJvdG90eXBlIG1ldGhvZHMKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBkZi1leHBlY3RlZC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBk
Zi1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBkZi1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c3R5
bGU+CisgICAgICAgIGRpdiB7CisgICAgICAgICAgICB3aWR0aDogMTAwcHg7CisgICAgICAgICAg
ICBoZWlnaHQ6IDEwMHB4OworICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAg
ICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDE0MywgMCk7CisgICAgICAgIH0KKyAg
ICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdj48L2Rpdj4KKyAgICA8ZGl2Pjwv
ZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGlz
cGxhY2VkLW5vbi1jYWNoZWQtcGRmLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9pbWFnZXMvZGlzcGxhY2VkLW5vbi1jYWNoZWQtcGRmLmh0bWwJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGlzcGxhY2VkLW5vbi1jYWNoZWQtcGRmLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxi
b2R5PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5k
b3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5ncy5zZXRD
YWNoZWRQREZJbWFnZUVuYWJsZWQoZmFsc2UpOworICAgIDwvc2NyaXB0PgorICAgIDxpbWcgc3Jj
PSJyZXNvdXJjZXMvZ3JlZW5fcmVjdGFuZ2xlLnBkZiI+CisgICAgPGltZyBzcmM9InJlc291cmNl
cy9ncmVlbl9yZWN0YW5nbGUucGRmIj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283820</attachid>
            <date>2016-07-15 17:05:15 -0700</date>
            <delta_ts>2016-07-15 17:18:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158715-20160715170426.patch</filename>
            <type>text/plain</type>
            <size>21397</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA3LTE1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgW2lPU10gUERG
RG9jdW1lbnRJbWFnZSBzaG91bGQgY2FjaGUgb25seSBhIHN1YiBpbWFnZSBvZiB0aGUgUERGIHdo
ZW4gY2FjaGluZyB0aGUgd2hvbGUgaW1hZ2UgaXMgZXhwZW5zaXZlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg3MTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBEZWFuIEphY2tzb24uCisKKyAgICAgICAgVGVzdDogZmFzdC9pbWFnZXMvZGlzcGxhY2Vk
LW5vbi1jYWNoZWQtcGRmLmh0bWwKKworICAgICAgICBGb3IgaU9TLCB3ZSBuZWVkIHRvIGVuc3Vy
ZSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGVkIFBERiBpbWFnZXMgd2lsbCBub3QKKyAgICAgICAgZXhj
ZWVkIHNvbWUgbGltaXQuIEFsc28gd2Ugc2hvdWxkIGJlIGNhY2hpbmcgb25seSBhIHN1YiBpbWFn
ZSBvZiB0aGUgUERGCisgICAgICAgIGlmIGNhY2hpbmcgdGhlIHdob2xlIGltYWdlIHdpbGwgZXhj
ZWVkIHRoZSBtZW1vcnkgbGltaXQuCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXR0aW5nczo6c2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKToKKyAgICAgICAgKiBwYWdlL1NldHRp
bmdzLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6aXNDYWNoZWRQREZJbWFnZUVuYWJs
ZWQpOgorICAgICAgICAgICAgQWRkIGFuIG9wdGlvbiB0byBkaXNhYmxlIGNhY2hpbmcgdGhlIFBE
RiBpbWFnZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnNldENhY2hlZFBE
RkltYWdlRW5hYmxlZCk6CisgICAgICAgICAgICBBbGxvdyB0aGUgY2FsbGVyIG9mIGRyYXcoKSB0
byBkaXNhYmxlIGNhY2hpbmcgdGhlIFBERiBpbWFnZXMuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2gpOgorICAgICAgICAg
ICAgTWF0Y2ggdGhlIGNvbnRleHQgZGlydHkgcmVjdGFuZ2xlIHdpdGggdGhlIGNhY2hlZCBpbWFn
ZSByZWN0YW5nbGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtQ29udGV4
dEZvclBhaW50aW5nKToKKyAgICAgICAgICAgIFdoZW4gcHJlcGFyaW5nIHRoZSBjb250ZXh0IGZv
ciBkcmF3aW5nIHRoZSBQREYsIHRha2UgdGhlIGxvY2F0aW9uIAorICAgICAgICAgICAgb2YgdGhl
IGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBpbnRvIGFjY291bnQuIFdlIGRvIG5vdCBuZWVkIHRvIHNj
YWxlCisgICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgdGhlIHNvdXJjZSByZWN0YW5nbGUgYmVj
YXVzZSB3ZSBzY2FsZSB0aGUgc2l6ZSBvZgorICAgICAgICAgICAgdGhlIHJlY3RhbmdsZSBidXQg
d2UgZG9uJ3Qgc2NhbGUgdGhlIHdob2xlIGNvb3JkaW5hdGUgc3lzdGVtLgorCisgICAgICAgIChX
ZWJDb3JlOjpjYWNoZWRJbWFnZVJlY3QpOgorICAgICAgICAgICAgQ2FsY3VsYXRlIHRoZSByZWN0
YW5nbGUgb2YgdGhlIGNhY2hlZCBpbWFnZSBzdWNoIHRoYXQgaXQgZG9lcyBub3QKKyAgICAgICAg
ICAgIGV4Y2VlZCB0aGUgbGltaXQuIFN0YXJ0IGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZGlydHkg
cmVjdGFuZ2xlIGFuZAorICAgICAgICAgICAgdGhlbiBleHBhbmQgYXJvdW5kIGl0LgorICAgICAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkZWNvZGVkU2l6ZUNo
YW5nZWQpOgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gbm90aWZ5aW5nIHRoZSBJbWFnZU9i
c2VydmVyLCBpdCBrZWVwcyB0cmFjayBvZiB0aGUgc2l6ZQorICAgICAgICAgICAgb2YgYWxsIHRo
ZSBjYWNoZWQgUERGIGltYWdlcy4KKworICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFn
ZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICAgICBFbnN1cmUgdGhlIHNp
emUgb2YgYWxsIHRoZSBjYWNoZWQgaW1hZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbGltaXQKKyAg
ICAgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZGVzdHJveURl
Y29kZWREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmg6CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAgICAgUGFzcyB0
aGUgb3B0aW9uIHRvIGRpc2FibGUgY2FjaGluZyB0aGUgUERGIGltYWdlcyB0byBQREZEb2N1bWVu
dEltYWdlLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OkJhY2t1cDo6QmFja3VwKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OkJhY2t1cDo6cmVzdG9yZVRvKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OnNldENhY2hlZFBERkltYWdlRW5hYmxlZCk6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmg6CisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbFNldHRpbmdzLmlkbDoKKyAgICAgICAgICAgIEFkZCBhbiBpbnRlcm5hbCBvcHRpb24g
dG8gZGlzYWJsZSBjYWNoaW5nIHRoZSBQREYgaW1hZ2VzLgorCiAyMDE2LTA3LTE1ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkZWQgYSBtYWtlUmVmPFQ+
IGhlbHBlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDIwMzMwNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTMsNiArMTkzLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2xv
YWRzSW1hZ2VzQXV0b21hdGljYWxseShmYWxzZSkKICAgICAsIG1fYXJlSW1hZ2VzRW5hYmxlZCh0
cnVlKQogICAgICwgbV9wcmVmZXJNSU1FVHlwZUZvckltYWdlcyhmYWxzZSkKKyAgICAsIG1faXND
YWNoZWRQREZJbWFnZUVuYWJsZWQodHJ1ZSkKICAgICAsIG1fYXJlUGx1Z2luc0VuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX2lzU2NyaXB0RW5hYmxlZChmYWxzZSkKICAgICAsIG1fbmVlZHNBZG9iZUZy
YW1lUmVsb2FkaW5nUXVpcmsoZmFsc2UpCkBAIC00MjUsNiArNDI2LDExIEBAIHZvaWQgU2V0dGlu
Z3M6OnNldFByZWZlck1JTUVUeXBlRm9ySW1hZ2UKICAgICBtX3ByZWZlck1JTUVUeXBlRm9ySW1h
Z2VzID0gcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXM7CiB9CiAKK3ZvaWQgU2V0dGluZ3M6OnNldENh
Y2hlZFBERkltYWdlRW5hYmxlZChib29sIGlzQ2FjaGVkUERGSW1hZ2VFbmFibGVkKQoreworICAg
IG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgPSBpc0NhY2hlZFBERkltYWdlRW5hYmxlZDsKK30K
Kwogdm9pZCBTZXR0aW5nczo6c2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9vbCBmb3JjZWQp
CiB7CiAgICAgbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeSA9IGZvcmNlZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDIwMzMwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw5IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKGJvb2wpOwog
ICAgIGJvb2wgcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX3ByZWZl
ck1JTUVUeXBlRm9ySW1hZ2VzOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENhY2hl
ZFBERkltYWdlRW5hYmxlZChib29sKTsKKyAgICBib29sIGlzQ2FjaGVkUERGSW1hZ2VFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0NhY2hlZFBERkltYWdlRW5hYmxlZDsgfQorCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sKTsKICAgICBib29sIGFyZVBs
dWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVQbHVnaW5zRW5hYmxlZDsgfQogCkBA
IC0zMjgsNiArMzMxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbG9hZHNJbWFnZXNBdXRvbWF0
aWNhbGx5IDogMTsKICAgICBib29sIG1fYXJlSW1hZ2VzRW5hYmxlZCA6IDE7CiAgICAgYm9vbCBt
X3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzIDogMTsKKyAgICBib29sIG1faXNDYWNoZWRQREZJbWFn
ZUVuYWJsZWQgOiAxOwogICAgIGJvb2wgbV9hcmVQbHVnaW5zRW5hYmxlZCA6IDE7CiAgICAgYm9v
bCBtX2lzU2NyaXB0RW5hYmxlZCA6IDE7CiAgICAgYm9vbCBtX25lZWRzQWRvYmVGcmFtZVJlbG9h
ZGluZ1F1aXJrIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiAyMDMzMDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxNSBAQCBib29sIFBERkRvY3VtZW50SW1h
Z2U6OmRhdGFDaGFuZ2VkKGJvb2wgCiAgICAgcmV0dXJuIG1fZG9jdW1lbnQ7IC8vIFJldHVybiB0
cnVlIGlmIHNpemUgaXMgYXZhaWxhYmxlLgogfQogCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnNl
dENhY2hlZFBERkltYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1faXNDYWNo
ZWRQREZJbWFnZUVuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCEobV9pc0NhY2hlZFBERkltYWdlRW5hYmxlZCA9IGVuYWJsZWQpKQorICAgICAgICBkZXN0cm95
RGVjb2RlZERhdGEoKTsKK30KKwogYm9vbCBQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRl
cnNNYXRjaChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChkc3RSZWN0LnNp
emUoKSAhPSBtX2NhY2hlZERlc3RpbmF0aW9uU2l6ZSkKQEAgLTEwOCw2ICsxMTcsOSBAQCBib29s
IFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hCiAgICAgaWYgKHNyY1JlY3QgIT0g
bV9jYWNoZWRTb3VyY2VSZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIW1f
Y2FjaGVkSW1hZ2VSZWN0LmNvbnRhaW5zKGNvbnRleHQuY2xpcEJvdW5kcygpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNv
bXBvc2VkVHJhbnNmb3JtOwogICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVm
aW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0p
OwogCkBAIC0xMzcsMjMgKzE0OSw3NSBAQCBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Db250ZXh0Rm9y
UGFpbnRpbmcoCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShzcmNS
ZWN0LngoKSAqIGhTY2FsZSwgc3JjUmVjdC55KCkgKiB2U2NhbGUpOworICAgIC8vIFRoZSB0cmFu
c2xhdGlvbiBiZWxvdyBtZWFucyB0aGF0IGEgc3JjIHBvaW50IHdpbGwgYmUgZHJhd24gYXQgYSBk
c3QgcG9pbnQgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdHJhbnNmb3JtYXRpb24KKyAgICAv
LworICAgIC8vIHwgZHN0WCB8ICAgfCAxICAwICBkc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpIHwg
fCBzcmNYIHwgICB8IHNyY1ggKyBkc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpIHwKKyAgICAvLyB8
IGRzdFkgfCA9IHwgMCAgMSAgZHN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSB8IHwgc3JjWSB8ID0g
fCBzcmNZICsgZHN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSB8CisgICAgLy8gfCAgIDEgIHwgICB8
IDAgIDAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgfCB8ICAxICAgfCAgIHwgICAgICAgICAg
ICAgICAgMSAgICAgICAgICAgICAgICAgfAorICAgIC8vCisgICAgLy8gSWYgd2Ugd2FudCB0byBn
ZXQgd2hpY2ggc3JjIHBvaW50IHdpbGwgYmUgZHJhd24gYXQgdGhlIHRvcC1sZWZ0IGNvcm5lciBv
ZiBkc3RSZWN0IHdlIGNhbiB1c2UgdGhlIGZvbGxvd2luZyBlcXVhbGl0eQorICAgIC8vCisgICAg
Ly8gfCBkc3RSZWN0LngoKSB8ID0gfCBzcmNYICsgZHN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNyY1ggfCAgIHwgc3JjUmVjdC54KCkg
fAorICAgIC8vIHwgZHN0UmVjdC55KCkgfCA9IHwgc3JjWSArIGRzdFJlY3QueSgpIC0gc3JjUmVj
dC55KCkgfCwgYnV0IHRoaXMgY2FuIG9ubHkgaGFwcGVuIHdoZW4gfCBzcmNZIHwgPSB8IHNyY1Jl
Y3QueSgpIHwKKyAgICAvLyB8ICAgICAgMSAgICAgIHwgPSB8ICAgICAgICAgICAgICAgIDEgICAg
ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICB8ICAg
fCAgICAgIDEgICAgICB8CisgICAgLy8KKyAgICAvLyBUaGlzIG1lYW5zIHRoZSB0b3AtbGVmdCBj
b3JuZXIgb2YgdGhlIHNyY1JlY3Qgd2lsbCBiZSBkcmF3biBhdCB0aGUgdG9wLWxlZnQgY29ybmVy
IG9mIGRzdFJlY3QsIG9yOgorICAgIC8vCisgICAgLy8gfCBzcmNSZWN0LngoKSB8ICAgICAgICAg
ICAgICAgICAgfCBkc3RSZWN0LngoKSB8CisgICAgLy8gfCBzcmNSZWN0LnkoKSB8IHdpbGwgYmUg
ZHJhd24gYXQgfCBkc3RSZWN0LnkoKSB8CisgICAgLy8gfCAgICAgIDEgICAgICB8ICAgICAgICAg
ICAgICAgICAgfCAgICAgIDEgICAgICB8CisgICAgLy8KKyAgICAvLyBUaGUgcmVzdCBvZiB0aGUg
cG9pbnRzIHdpbGwgYmUgbWFwcGVkIHRoZSBzYW1lIHdheSBzdWNoIHRoYXQgdGhlIHNyY1JlY3Qg
d2lsbCBiZSBkcmF3biBpbiBkc3RSZWN0LgorICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3Qu
eCgpIC0gc3JjUmVjdC54KCksIGRzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkpOwogICAgIGNvbnRl
eHQuc2NhbGUoRmxvYXRTaXplKGhTY2FsZSwgLXZTY2FsZSkpOwogICAgIGNvbnRleHQudHJhbnNs
YXRlKDAsIC1zcmNSZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBQREZEb2N1bWVudEltYWdlOjp1
cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCi17CiAjaWYgUExB
VEZPUk0oSU9TKQotICAgIC8vIE9uIGlPUywgaWYgdGhlIHBoeXNpY2FsIG1lbW9yeSBpcyBsZXNz
IHRoYW4gMUdCLCBkbyBub3QgYWxsb2NhdGUgbW9yZSB0aGFuIDE2TUIgZm9yIHRoZSBQREYgY2Fj
aGVkSW1hZ2UuCi0gICAgY29uc3Qgc2l6ZV90IG1lbW9yeVRocmVzaG9sZCA9IFdURjo6R0I7Ci0g
ICAgY29uc3Qgc2l6ZV90IG1heEFyZWEgPSAxNiAqIFdURjo6TUIgLyA0OyAvLyAxNiBNQiBtYXhp
bXVtIHNpemUsIGRpdmlkZWQgYnkgYSByb3VnaCBjb3N0IG9mIDQgYnl0ZXMgcGVyIHBpeGVsIG9m
IGFyZWEuCi0gICAgCi0gICAgaWYgKHJhbVNpemUoKSA8PSBtZW1vcnlUaHJlc2hvbGQgJiYgSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGRzdFJlY3Quc2l6ZSgpLCBjb250ZXh0KS5h
cmVhKCkgPj0gbWF4QXJlYSkgewotICAgICAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0gbnVsbHB0
cjsKKy8vIFRvIGF2b2lkIHRoZSBqZXRzYW0gb24gaU9TLCB3ZSBhcmUgZ29pbmcgdG8gbGltaXQg
dGhlIHNpemUgb2YgYWxsIHRoZSBQREYgY2FjaGVkSW1hZ2VzIHRvIGJlIDY0TUIuCitzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNfbWF4Q2FjaGVkSW1hZ2VTaWRlID0gNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3Qgc2l6ZV90IHNfbWF4Q2FjaGVkSW1hZ2VBcmVhID0gc19tYXhDYWNoZWRJbWFnZVNpZGUgKiBz
X21heENhY2hlZEltYWdlU2lkZTsKKworc3RhdGljIGNvbnN0IHNpemVfdCBzX21heERlY29kZWRE
YXRhU2l6ZSA9IHNfbWF4Q2FjaGVkSW1hZ2VBcmVhICogNDsKK3N0YXRpYyBzaXplX3Qgc19hbGxE
ZWNvZGVkRGF0YVNpemUgPSAwOworCitzdGF0aWMgRmxvYXRSZWN0IGNhY2hlZEltYWdlUmVjdChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCkKK3sKKyAg
ICBGbG9hdFNpemUgbWF4U2l6ZSA9IHNfbWF4Q2FjaGVkSW1hZ2VTaWRlIC8gY29udGV4dC5zY2Fs
ZUZhY3RvcigpOworCisgICAgLy8gRXhwYW5kIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZGlydHkg
cmVjdGFuZ2xlLgorICAgIEZsb2F0UmVjdCByZWN0ID0gY29udGV4dC5jbGlwQm91bmRzKCk7Cisg
ICAgcmVjdC5zZXRYKHN0ZDo6bWF4KHJlY3QuY2VudGVyKCkueCgpIC0gbWF4U2l6ZS53aWR0aCgp
IC8gMiwgZHN0UmVjdC54KCkpKTsKKyAgICByZWN0LnNldFkoc3RkOjptYXgocmVjdC5jZW50ZXIo
KS55KCkgLSBtYXhTaXplLmhlaWdodCgpIC8gMiwgZHN0UmVjdC55KCkpKTsKKworICAgIC8vIENv
dmVyIGFzIG11Y2ggYXMgd2UgY291bGQgZnJvbSB0aGUgZHN0UmVjdC4KKyAgICByZWN0LnNldFdp
ZHRoKHN0ZDo6bWluKG1heFNpemUud2lkdGgoKSwgZHN0UmVjdC53aWR0aCgpKSk7CisgICAgcmVj
dC5zZXRIZWlnaHQoc3RkOjptaW4obWF4U2l6ZS5oZWlnaHQoKSwgZHN0UmVjdC5oZWlnaHQoKSkp
OworICAgIHJldHVybiByZWN0OworfQorI2VuZGlmCisKK3ZvaWQgUERGRG9jdW1lbnRJbWFnZTo6
ZGVjb2RlZFNpemVDaGFuZ2VkKHNpemVfdCBuZXdDYWNoZWRCeXRlcykKK3sKKyAgICBpZiAoIW1f
Y2FjaGVkQnl0ZXMgJiYgIW5ld0NhY2hlZEJ5dGVzKQogICAgICAgICByZXR1cm47Ci0gICAgfQog
CisgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNv
ZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4obV9jYWNoZWRCeXRlcykgKyBuZXdD
YWNoZWRCeXRlcyk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgQVNTRVJUKHNfYWxsRGVjb2Rl
ZERhdGFTaXplID49IG1fY2FjaGVkQnl0ZXMpOworICAgIC8vIFVwZGF0ZSB3aXRoIHRoZSBkaWZm
ZXJlbmNlIGluIHR3byBzdGVwcyB0byBhdm9pZCB1bnNpZ25lZCB1bmRlcmZsb3cgc3VidHJhY3Rp
b24uCisgICAgc19hbGxEZWNvZGVkRGF0YVNpemUgLT0gbV9jYWNoZWRCeXRlczsKKyAgICBzX2Fs
bERlY29kZWREYXRhU2l6ZSArPSBuZXdDYWNoZWRCeXRlczsKKyNlbmRpZgorCisgICAgbV9jYWNo
ZWRCeXRlcyA9IG5ld0NhY2hlZEJ5dGVzOworfQorCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVw
ZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkKK3sKKyNpZiBQTEFU
Rk9STShJT1MpCiAgICAgLy8gT24gaU9TLCBzb21lIGNsaWVudHMgdXNlIGxvdy1xdWFsaXR5IGlt
YWdlIGludGVycG9sYXRpb24gYWx3YXlzLCB3aGljaCB0aHJvd3Mgb2ZmIHRoaXMgb3B0aW1pemF0
aW9uLAogICAgIC8vIGFzIHdlIG5ldmVyIGdldCB0aGUgc3Vic2VxdWVudCBoaWdoLXF1YWxpdHkg
cGFpbnQuIFNpbmNlIGxpdmUgcmVzaXplIGlzIHJhcmUgb24gaU9TLCBkaXNhYmxlIHRoZSBvcHRp
bWl6YXRpb24uCiAgICAgLy8gRklYTUUgKDEzNjU5Myk6IEl0J3MgYWxzbyBwb3NzaWJsZSB0byBk
byB0aGUgd3JvbmcgdGhpbmcgaGVyZSBpZiBDU1Mgc3BlY2lmaWVzIGxvdy1xdWFsaXR5IGludGVy
cG9sYXRpb24gdmlhIHRoZSAiaW1hZ2UtcmVuZGVyaW5nIgpAQCAtMTY3LDE1ICsyMzEsMzAgQEAg
dm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZQogICAgIGJvb2wgcmVwYWlu
dElmTmVjZXNzYXJ5ID0gaW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gSW50ZXJwb2xhdGlvbk5vbmUg
JiYgaW50ZXJwb2xhdGlvblF1YWxpdHkgIT0gSW50ZXJwb2xhdGlvbkxvdzsKICNlbmRpZgogCi0g
ICAgaWYgKG1fY2FjaGVkSW1hZ2VCdWZmZXIgJiYgKCFyZXBhaW50SWZOZWNlc3NhcnkgfHwgY2Fj
aGVQYXJhbWV0ZXJzTWF0Y2goY29udGV4dCwgZHN0UmVjdCwgc3JjUmVjdCkpKQorICAgIGlmICgh
bV9pc0NhY2hlZFBERkltYWdlRW5hYmxlZCB8fCAobV9jYWNoZWRJbWFnZUJ1ZmZlciAmJiAoIXJl
cGFpbnRJZk5lY2Vzc2FyeSB8fCBjYWNoZVBhcmFtZXRlcnNNYXRjaChjb250ZXh0LCBkc3RSZWN0
LCBzcmNSZWN0KSkpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jYWNoZWRJbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKEZsb2F0UmVjdChlbmNs
b3NpbmdJbnRSZWN0KGRzdFJlY3QpKS5zaXplKCksIGNvbnRleHQpOwotICAgIGlmICghbV9jYWNo
ZWRJbWFnZUJ1ZmZlcikKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBtX2NhY2hlZEltYWdlUmVj
dCA9IGNhY2hlZEltYWdlUmVjdChjb250ZXh0LCBkc3RSZWN0KTsKKworICAgIC8vIENhY2hlIHRo
ZSBQREYgaW1hZ2Ugb25seSBpZiB0aGUgc2l6ZSBvZiB0aGUgbmV3IGltYWdlIHdvbid0IGV4Y2Vl
ZCB0aGUgbGltaXQuCisgICAgaWYgKHNfYWxsRGVjb2RlZERhdGFTaXplICsgbV9jYWNoZWRJbWFn
ZVJlY3Quc2l6ZSgpLmFyZWEoKSAqIDQgLSBtX2NhY2hlZEJ5dGVzID4gc19tYXhEZWNvZGVkRGF0
YVNpemUpIHsKKyAgICAgICAgZGVzdHJveURlY29kZWREYXRhKCk7CiAgICAgICAgIHJldHVybjsK
LSAgICBhdXRvJiBidWZmZXJDb250ZXh0ID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+Y29udGV4dCgp
OworICAgIH0KKyNlbHNlCisgICAgbV9jYWNoZWRJbWFnZVJlY3QgPSBkc3RSZWN0OworI2VuZGlm
CiAKLSAgICB0cmFuc2Zvcm1Db250ZXh0Rm9yUGFpbnRpbmcoYnVmZmVyQ29udGV4dCwgZHN0UmVj
dCwgc3JjUmVjdCk7CisgICAgbV9jYWNoZWRJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKEZsb2F0UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1fY2FjaGVkSW1h
Z2VSZWN0KSkuc2l6ZSgpLCBjb250ZXh0KTsKKyAgICBpZiAoIW1fY2FjaGVkSW1hZ2VCdWZmZXIp
IHsKKyAgICAgICAgZGVzdHJveURlY29kZWREYXRhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvJiBidWZmZXJDb250ZXh0ID0gbV9jYWNoZWRJbWFnZUJ1ZmZlci0+Y29udGV4
dCgpOworICAgIC8vIFRoZSBQREYgY2FjaGVkSW1hZ2Ugc2hvdWxkIGJlIGRyYXduIGF0ICgwLCAw
KSBhbHdheXMuCisgICAgdHJhbnNmb3JtQ29udGV4dEZvclBhaW50aW5nKGJ1ZmZlckNvbnRleHQs
IEZsb2F0UmVjdCh7IH0sIGRzdFJlY3Quc2l6ZSgpKSwgc3JjUmVjdCk7CiAgICAgZHJhd1BERlBh
Z2UoYnVmZmVyQ29udGV4dCk7CiAKICAgICBtX2NhY2hlZFRyYW5zZm9ybSA9IGNvbnRleHQuZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CkBAIC0x
ODMsMTEgKzI2Miw3IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2UK
ICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNSZWN0OwogCiAgICAgSW50U2l6ZSBpbnRlcm5h
bFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBzaXplX3Qg
b2xkQ2FjaGVkQnl0ZXMgPSBtX2NhY2hlZEJ5dGVzOwotICAgIG1fY2FjaGVkQnl0ZXMgPSBzYWZl
Q2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSAqIGludGVybmFsU2l6ZS5oZWlnaHQo
KSAqIDQ7Ci0KLSAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCBzYWZlQ2FzdDxpbnQ+KG1fY2FjaGVkQnl0ZXMp
IC0gc2FmZUNhc3Q8aW50PihvbGRDYWNoZWRCeXRlcykpOworICAgIGRlY29kZWRTaXplQ2hhbmdl
ZChzYWZlQ2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSAqIGludGVybmFsU2l6ZS5o
ZWlnaHQoKSAqIDQpOwogfQogCiB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSwgSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uKQpAQCAtMjE2LDExICsyOTEsOCBAQCB2b2lkIFBERkRvY3VtZW50SW1h
Z2U6OmRyYXcoR3JhcGhpY3NDb250CiB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OmRlc3Ryb3lEZWNv
ZGVkRGF0YShib29sKQogewogICAgIG1fY2FjaGVkSW1hZ2VCdWZmZXIgPSBudWxscHRyOwotCi0g
ICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVk
U2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4obV9jYWNoZWRCeXRlcykpOwotCi0gICAg
bV9jYWNoZWRCeXRlcyA9IDA7CisgICAgbV9jYWNoZWRJbWFnZVJlY3QgPSBGbG9hdFJlY3QoKTsK
KyAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoMCk7CiB9CiAKICNpZiAhVVNFKFBERktJVF9GT1JfUERG
RE9DVU1FTlRJTUFHRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgJKHJldmlzaW9uIDIwMzMwNikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUERGRG9jdW1lbnRJbWFnZShvYnNlcnZlcikpOwogICAgIH0KIAorICAgIHZvaWQg
c2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKGJvb2wpOworCiBwcml2YXRlOgogICAgIFBERkRvY3Vt
ZW50SW1hZ2UoSW1hZ2VPYnNlcnZlciopOwogICAgIHZpcnR1YWwgflBERkRvY3VtZW50SW1hZ2Uo
KTsKQEAgLTgxLDkgKzgzLDEyIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgcGFnZUNvdW50KCkg
Y29uc3Q7CiAgICAgdm9pZCBkcmF3UERGUGFnZShHcmFwaGljc0NvbnRleHQmKTsKIAorICAgIHZv
aWQgZGVjb2RlZFNpemVDaGFuZ2VkKHNpemVfdCBuZXdDYWNoZWRCeXRlcyk7CiAgICAgdm9pZCB1
cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KTsKICAgICBib29sIGNhY2hlUGFy
YW1ldGVyc01hdGNoKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAorICAgIGJvb2wgbV9pc0NhY2hlZFBE
RkltYWdlRW5hYmxlZCB7IHRydWUgfTsKKwogI2lmIFVTRShQREZLSVRfRk9SX1BERkRPQ1VNRU5U
SU1BR0UpCiAgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBtX2RvY3VtZW50OwogI2Vsc2UKQEAg
LTkxLDYgKzk2LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBtX2NhY2hlZEltYWdlQnVmZmVyOworICAgIEZsb2F0UmVjdCBtX2NhY2hlZElt
YWdlUmVjdDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jYWNoZWRUcmFuc2Zvcm07CiAgICAgRmxv
YXRTaXplIG1fY2FjaGVkRGVzdGluYXRpb25TaXplOwogICAgIEZsb2F0UmVjdCBtX2NhY2hlZFNv
dXJjZVJlY3Q7CkBAIC0xMDMsNiArMTA5LDggQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0lNQUdFKFBERkRvY3VtZW50SW1hZ2UpCisKICNlbmRpZiAvLyBVU0UoQ0cp
CiAKICNlbmRpZiAvLyBQREZEb2N1bWVudEltYWdlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMjAzMzA2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgs
MTEgQEAKICNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCiAjZW5kaWYKIAorI2lmIFVTRShDRykK
KyNpbmNsdWRlICJQREZEb2N1bWVudEltYWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShJT1MpCkBAIC01NDUs
NiArNTUwLDExIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QoR3JhcGhpY3MKICAg
ICBJbWFnZSogaW1hZ2UgPSBpbWFnZVJlc291cmNlKCkuaW1hZ2UoKS5nZXQoKTsKICAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uID0gaW1hZ2UgPyBjaG9vc2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShjb250ZXh0LCAqaW1hZ2UsIGltYWdlLCBMYXlvdXRTaXplKHJlY3Quc2l6ZSgp
KSkgOiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKIAorI2lmIFVTRShDRykKKyAgICBpZiAoaXM8UERG
RG9jdW1lbnRJbWFnZT4oaW1hZ2UpKQorICAgICAgICBkb3duY2FzdDxQREZEb2N1bWVudEltYWdl
PigqaW1hZ2UpLnNldENhY2hlZFBERkltYWdlRW5hYmxlZChmcmFtZSgpLnNldHRpbmdzKCkuaXND
YWNoZWRQREZJbWFnZUVuYWJsZWQoKSk7CisjZW5kaWYKKwogICAgIEltYWdlT3JpZW50YXRpb25E
ZXNjcmlwdGlvbiBvcmllbnRhdGlvbkRlc2NyaXB0aW9uKHNob3VsZFJlc3BlY3RJbWFnZU9yaWVu
dGF0aW9uKCksIHN0eWxlKCkuaW1hZ2VPcmllbnRhdGlvbigpKTsKICAgICBjb250ZXh0LmRyYXdJ
bWFnZSgqaW1nLCByZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhjb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlTm9ybWFsLCBvcmllbnRhdGlvbkRlc2NyaXB0aW9uLCBpbnRlcnBvbGF0aW9uKSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAJ
KHJldmlzaW9uIDIwMzMwNikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0
aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAgSW50ZXJuYWxTZXR0aW5n
czo6QmFja3VwOjpCYWNrdXAoU2V0dGluZwogICAgICwgbV9sYW5nQXR0cmlidXRlQXdhcmVGb3Jt
Q29udHJvbFVJRW5hYmxlZChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LmxhbmdBdHRyaWJ1dGVBd2FyZUZvcm1Db250cm9sVUlFbmFibGVkKCkpCiAgICAgLCBtX2ltYWdl
c0VuYWJsZWQoc2V0dGluZ3MuYXJlSW1hZ2VzRW5hYmxlZCgpKQogICAgICwgbV9wcmVmZXJNSU1F
VHlwZUZvckltYWdlcyhzZXR0aW5ncy5wcmVmZXJNSU1FVHlwZUZvckltYWdlcygpKQorICAgICwg
bV9jYWNoZWRQREZJbWFnZUVuYWJsZWQoc2V0dGluZ3MuaXNDYWNoZWRQREZJbWFnZUVuYWJsZWQo
KSkKICAgICAsIG1fbWluaW11bVRpbWVySW50ZXJ2YWwoc2V0dGluZ3MubWluaW11bURPTVRpbWVy
SW50ZXJ2YWwoKSkKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgLCBtX3Nob3VsZERpc3Bs
YXlTdWJ0aXRsZXMoc2V0dGluZ3Muc2hvdWxkRGlzcGxheVN1YnRpdGxlcygpKQpAQCAtMTU5LDYg
KzE2MCw3IEBAIHZvaWQgSW50ZXJuYWxTZXR0aW5nczo6QmFja3VwOjpyZXN0b3JlVG8KICAgICBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldExhbmdBdHRyaWJ1dGVB
d2FyZUZvcm1Db250cm9sVUlFbmFibGVkKG1fbGFuZ0F0dHJpYnV0ZUF3YXJlRm9ybUNvbnRyb2xV
SUVuYWJsZWQpOwogICAgIHNldHRpbmdzLnNldEltYWdlc0VuYWJsZWQobV9pbWFnZXNFbmFibGVk
KTsKICAgICBzZXR0aW5ncy5zZXRQcmVmZXJNSU1FVHlwZUZvckltYWdlcyhtX3ByZWZlck1JTUVU
eXBlRm9ySW1hZ2VzKTsKKyAgICBzZXR0aW5ncy5zZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQobV9j
YWNoZWRQREZJbWFnZUVuYWJsZWQpOwogICAgIHNldHRpbmdzLnNldE1pbmltdW1ET01UaW1lcklu
dGVydmFsKG1fbWluaW11bVRpbWVySW50ZXJ2YWwpOwogI2lmIEVOQUJMRShWSURFT19UUkFDSykK
ICAgICBzZXR0aW5ncy5zZXRTaG91bGREaXNwbGF5U3VidGl0bGVzKG1fc2hvdWxkRGlzcGxheVN1
YnRpdGxlcyk7CkBAIC00ODMsNiArNDg1LDEyIEBAIHZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0
SW1hZ2VzRW5hYmxlZCgKICAgICBzZXR0aW5ncygpLT5zZXRJbWFnZXNFbmFibGVkKGVuYWJsZWQp
OwogfQogCit2b2lkIEludGVybmFsU2V0dGluZ3M6OnNldENhY2hlZFBERkltYWdlRW5hYmxlZChi
b29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEludGVybmFsU2V0dGluZ3NH
dWFyZEZvclNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MoKS0+c2V0Q2FjaGVkUERGSW1hZ2VFbmFi
bGVkKGVuYWJsZWQpOworfQorCiB2b2lkIEludGVybmFsU2V0dGluZ3M6OnNldE1pbmltdW1UaW1l
ckludGVydmFsKGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgSW50ZXJuYWxTZXR0aW5nc0d1YXJkRm9yU2V0dGluZ3MoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCShyZXZpc2lvbiAyMDMzMDYpCisrKyBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpA
QCAtODAsNiArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbV9sYW5nQXR0cmlidXRlQXdh
cmVGb3JtQ29udHJvbFVJRW5hYmxlZDsKICAgICAgICAgYm9vbCBtX2ltYWdlc0VuYWJsZWQ7CiAg
ICAgICAgIGJvb2wgbV9wcmVmZXJNSU1FVHlwZUZvckltYWdlczsKKyAgICAgICAgYm9vbCBtX2Nh
Y2hlZFBERkltYWdlRW5hYmxlZDsKICAgICAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBt
X21pbmltdW1UaW1lckludGVydmFsOwogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAgICAg
Ym9vbCBtX3Nob3VsZERpc3BsYXlTdWJ0aXRsZXM7CkBAIC0xNDEsNiArMTQyLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0QWxsb3dzQWlyUGxheUZvck1lZGlhUGxheWJhY2soYm9vbCk7CiAgICAg
dm9pZCBzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZvaWQgc2V0UHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoYm9vbCwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgc2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKGJvb2wsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2b2lkIHNldFNob3VsZERpc3BsYXlUcmFja0tpbmQoY29uc3QgU3RyaW5nJiBraW5k
LCBib29sIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHNob3VsZERpc3BsYXlU
cmFja0tpbmQoY29uc3QgU3RyaW5nJiBraW5kLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBz
ZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCShyZXZp
c2lvbiAyMDMzMDYpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3Mu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBACiAgICAgLy8gT3RoZXIgc3dpdGNo
ZXMKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShE
T01TdHJpbmcgcG9saWN5KTsKICAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldEltYWdlc0Vu
YWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKKyAgICBbUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHNldENh
Y2hlZFBERkltYWdlRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwogICAgIFtSYWlzZXNFeGNlcHRp
b25dIHZvaWQgc2V0VXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvcihib29s
ZWFuIGVuYWJsZWQpOwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0QXV0b3Njcm9sbEZv
ckRyYWdBbmREcm9wRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwogICAgIFtSYWlzZXNFeGNlcHRp
b25dIHZvaWQgc2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoYm9vbGVhbiBoYXNF
eHRlbmRlZEJhY2tncm91bmQpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMzA2KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDct
MTUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAg
ICBbaU9TXSBQREZEb2N1bWVudEltYWdlIHNob3VsZCBjYWNoZSBvbmx5IGEgc3ViIGltYWdlIG9m
IHRoZSBQREYgd2hlbiBjYWNoaW5nIHRoZSB3aG9sZSBpbWFnZSBpcyBleHBlbnNpdmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODcxNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4KKyAgICAgICAgCisgICAgICAgIE1ha2Ugc3Vy
ZSB0aGUgUERGIGltYWdlIHdpbGwgYmUgZGlzcGxheWVkIGF0IHRoZSBjb3JyZWN0IHBvc2l0aW9u
IGlmIGNhY2hpbmcKKyAgICAgICAgdGhlIFBERiBpbWFnZSBpcyBkaXNhYmxlZC4KKworICAgICAg
ICAqIGZhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBkZi1leHBlY3RlZC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9kaXNwbGFjZWQtbm9uLWNhY2hlZC1wZGYuaHRt
bDogQWRkZWQuCisKIDIwMTYtMDctMTUgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5j
b20+CiAKICAgICAgICAgTWFya2luZyBodHRwL3Rlc3RzL2NhY2hlL2Rpc2stY2FjaGUvZGlzay1j
YWNoZS1yZXF1ZXN0LW1heC1zdGFsZS5odG1sIGFzIGEgZmxha3kgdGltZW91dCBvbiBpb3Mtc2lt
dWxhdG9yIFdLMiBSZWxlYXNlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kaXNwbGFj
ZWQtbm9uLWNhY2hlZC1wZGYtZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2ltYWdlcy9kaXNwbGFjZWQtbm9uLWNhY2hlZC1wZGYtZXhwZWN0ZWQuaHRtbAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9kaXNwbGFjZWQtbm9uLWNhY2hl
ZC1wZGYtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICBkaXYgewor
ICAgICAgICAgICAgd2lkdGg6IDEwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAxMDBweDsKKyAg
ICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICAgICAgICAgIGJhY2tncm91bmQt
Y29sb3I6IHJnYigwLCAxNDMsIDApOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5PgorICAgIDxkaXY+PC9kaXY+CisgICAgPGRpdj48L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBk
Zi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1u
b24tY2FjaGVkLXBkZi5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1h
Z2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBkZi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTEgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8Ym9keT4KKyAgICA8c2NyaXB0Pgor
ICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmludGVybmFscykKKyAgICAg
ICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVk
KGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKyAgICA8aW1nIHNyYz0icmVzb3VyY2VzL2dyZWVuX3Jl
Y3RhbmdsZS5wZGYiPgorICAgIDxpbWcgc3JjPSJyZXNvdXJjZXMvZ3JlZW5fcmVjdGFuZ2xlLnBk
ZiI+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283826</attachid>
            <date>2016-07-15 17:18:58 -0700</date>
            <delta_ts>2016-07-18 15:47:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158715-20160715171809.patch</filename>
            <type>text/plain</type>
            <size>20283</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA3LTE1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgW2lPU10gUERG
RG9jdW1lbnRJbWFnZSBzaG91bGQgY2FjaGUgb25seSBhIHN1YiBpbWFnZSBvZiB0aGUgUERGIHdo
ZW4gY2FjaGluZyB0aGUgd2hvbGUgaW1hZ2UgaXMgZXhwZW5zaXZlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg3MTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBEZWFuIEphY2tzb24uCisKKyAgICAgICAgVGVzdDogZmFzdC9pbWFnZXMvZGlzcGxhY2Vk
LW5vbi1jYWNoZWQtcGRmLmh0bWwKKworICAgICAgICBGb3IgaU9TLCB3ZSBuZWVkIHRvIGVuc3Vy
ZSB0aGUgc2l6ZSBvZiB0aGUgY2FjaGVkIFBERiBpbWFnZXMgd2lsbCBub3QKKyAgICAgICAgZXhj
ZWVkIHNvbWUgbGltaXQuIEFsc28gd2Ugc2hvdWxkIGJlIGNhY2hpbmcgb25seSBhIHN1YiBpbWFn
ZSBvZiB0aGUgUERGCisgICAgICAgIGlmIGNhY2hpbmcgdGhlIHdob2xlIGltYWdlIHdpbGwgZXhj
ZWVkIHRoZSBtZW1vcnkgbGltaXQuCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXR0aW5nczo6c2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKToKKyAgICAgICAgKiBwYWdlL1NldHRp
bmdzLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6aXNDYWNoZWRQREZJbWFnZUVuYWJs
ZWQpOgorICAgICAgICAgICAgQWRkIGFuIG9wdGlvbiB0byBkaXNhYmxlIGNhY2hpbmcgdGhlIFBE
RiBpbWFnZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnNldENhY2hlZFBE
RkltYWdlRW5hYmxlZCk6CisgICAgICAgICAgICBBbGxvdyB0aGUgY2FsbGVyIG9mIGRyYXcoKSB0
byBkaXNhYmxlIGNhY2hpbmcgdGhlIFBERiBpbWFnZXMuCisgICAgICAgIAorICAgICAgICAoV2Vi
Q29yZTo6UERGRG9jdW1lbnRJbWFnZTo6Y2FjaGVQYXJhbWV0ZXJzTWF0Y2gpOgorICAgICAgICAg
ICAgTWF0Y2ggdGhlIGNvbnRleHQgZGlydHkgcmVjdGFuZ2xlIHdpdGggdGhlIGNhY2hlZCBpbWFn
ZSByZWN0YW5nbGUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtQ29udGV4
dEZvclBhaW50aW5nKToKKyAgICAgICAgICAgIFdoZW4gcHJlcGFyaW5nIHRoZSBjb250ZXh0IGZv
ciBkcmF3aW5nIHRoZSBQREYsIHRha2UgdGhlIGxvY2F0aW9uIAorICAgICAgICAgICAgb2YgdGhl
IGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBpbnRvIGFjY291bnQuIFdlIGRvIG5vdCBuZWVkIHRvIHNj
YWxlCisgICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgdGhlIHNvdXJjZSByZWN0YW5nbGUgYmVj
YXVzZSB3ZSBzY2FsZSB0aGUgc2l6ZSBvZgorICAgICAgICAgICAgdGhlIHJlY3RhbmdsZSBidXQg
d2UgZG9uJ3Qgc2NhbGUgdGhlIHdob2xlIGNvb3JkaW5hdGUgc3lzdGVtLgorCisgICAgICAgIChX
ZWJDb3JlOjpjYWNoZWRJbWFnZVJlY3QpOgorICAgICAgICAgICAgQ2FsY3VsYXRlIHRoZSByZWN0
YW5nbGUgb2YgdGhlIGNhY2hlZCBpbWFnZSBzdWNoIHRoYXQgaXQgZG9lcyBub3QKKyAgICAgICAg
ICAgIGV4Y2VlZCB0aGUgbGltaXQuIFN0YXJ0IGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZGlydHkg
cmVjdGFuZ2xlIGFuZAorICAgICAgICAgICAgdGhlbiBleHBhbmQgYXJvdW5kIGl0LgorICAgICAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjpkZWNvZGVkU2l6ZUNo
YW5nZWQpOgorICAgICAgICAgICAgSW4gYWRkaXRpb24gdG8gbm90aWZ5aW5nIHRoZSBJbWFnZU9i
c2VydmVyLCBpdCBrZWVwcyB0cmFjayBvZiB0aGUgc2l6ZQorICAgICAgICAgICAgb2YgYWxsIHRo
ZSBjYWNoZWQgUERGIGltYWdlcy4KKworICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFn
ZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICAgICBFbnN1cmUgdGhlIHNp
emUgb2YgYWxsIHRoZSBjYWNoZWQgaW1hZ2VzIGRvZXMgbm90IGV4Y2VlZCB0aGUgbGltaXQKKyAg
ICAgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6ZGVzdHJveURl
Y29kZWREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmg6CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVySW1hZ2U6OnBhaW50SW50b1JlY3QpOgorICAgICAgICAgICAgUGFzcyB0
aGUgb3B0aW9uIHRvIGRpc2FibGUgY2FjaGluZyB0aGUgUERGIGltYWdlcyB0byBQREZEb2N1bWVu
dEltYWdlLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OkJhY2t1cDo6QmFja3VwKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OkJhY2t1cDo6cmVzdG9yZVRvKToKKyAgICAgICAg
KFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OnNldENhY2hlZFBERkltYWdlRW5hYmxlZCk6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmg6CisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbFNldHRpbmdzLmlkbDoKKyAgICAgICAgICAgIEFkZCBhbiBpbnRlcm5hbCBvcHRpb24g
dG8gZGlzYWJsZSBjYWNoaW5nIHRoZSBQREYgaW1hZ2VzLgorCiAyMDE2LTA3LTE1ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkZWQgYSBtYWtlUmVmPFQ+
IGhlbHBlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJldmlzaW9uIDIwMzMwNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTMsNiArMTkzLDcgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2xv
YWRzSW1hZ2VzQXV0b21hdGljYWxseShmYWxzZSkKICAgICAsIG1fYXJlSW1hZ2VzRW5hYmxlZCh0
cnVlKQogICAgICwgbV9wcmVmZXJNSU1FVHlwZUZvckltYWdlcyhmYWxzZSkKKyAgICAsIG1faXND
YWNoZWRQREZJbWFnZUVuYWJsZWQodHJ1ZSkKICAgICAsIG1fYXJlUGx1Z2luc0VuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX2lzU2NyaXB0RW5hYmxlZChmYWxzZSkKICAgICAsIG1fbmVlZHNBZG9iZUZy
YW1lUmVsb2FkaW5nUXVpcmsoZmFsc2UpCkBAIC00MjUsNiArNDI2LDExIEBAIHZvaWQgU2V0dGlu
Z3M6OnNldFByZWZlck1JTUVUeXBlRm9ySW1hZ2UKICAgICBtX3ByZWZlck1JTUVUeXBlRm9ySW1h
Z2VzID0gcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXM7CiB9CiAKK3ZvaWQgU2V0dGluZ3M6OnNldENh
Y2hlZFBERkltYWdlRW5hYmxlZChib29sIGlzQ2FjaGVkUERGSW1hZ2VFbmFibGVkKQoreworICAg
IG1faXNDYWNoZWRQREZJbWFnZUVuYWJsZWQgPSBpc0NhY2hlZFBERkltYWdlRW5hYmxlZDsKK30K
Kwogdm9pZCBTZXR0aW5nczo6c2V0Rm9yY2VQZW5kaW5nV2ViR0xQb2xpY3koYm9vbCBmb3JjZWQp
CiB7CiAgICAgbV9mb3JjZVBlbmRpbmdXZWJHTFBvbGljeSA9IGZvcmNlZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmgJKHJldmlzaW9uIDIwMzMwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYgKzE0Niw5IEBAIHB1YmxpYzoKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKGJvb2wpOwog
ICAgIGJvb2wgcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoKSBjb25zdCB7IHJldHVybiBtX3ByZWZl
ck1JTUVUeXBlRm9ySW1hZ2VzOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENhY2hl
ZFBERkltYWdlRW5hYmxlZChib29sKTsKKyAgICBib29sIGlzQ2FjaGVkUERGSW1hZ2VFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pc0NhY2hlZFBERkltYWdlRW5hYmxlZDsgfQorCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sKTsKICAgICBib29sIGFyZVBs
dWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVQbHVnaW5zRW5hYmxlZDsgfQogCkBA
IC0zMjgsNiArMzMxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbG9hZHNJbWFnZXNBdXRvbWF0
aWNhbGx5IDogMTsKICAgICBib29sIG1fYXJlSW1hZ2VzRW5hYmxlZCA6IDE7CiAgICAgYm9vbCBt
X3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzIDogMTsKKyAgICBib29sIG1faXNDYWNoZWRQREZJbWFn
ZUVuYWJsZWQgOiAxOwogICAgIGJvb2wgbV9hcmVQbHVnaW5zRW5hYmxlZCA6IDE7CiAgICAgYm9v
bCBtX2lzU2NyaXB0RW5hYmxlZCA6IDE7CiAgICAgYm9vbCBtX25lZWRzQWRvYmVGcmFtZVJlbG9h
ZGluZ1F1aXJrIDogMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCShyZXZpc2lvbiAyMDMzMDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxNSBAQCBib29sIFBERkRvY3VtZW50SW1h
Z2U6OmRhdGFDaGFuZ2VkKGJvb2wgCiAgICAgcmV0dXJuIG1fZG9jdW1lbnQ7IC8vIFJldHVybiB0
cnVlIGlmIHNpemUgaXMgYXZhaWxhYmxlLgogfQogCit2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnNl
dENhY2hlZFBERkltYWdlRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYgKG1faXNDYWNo
ZWRQREZJbWFnZUVuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCEobV9pc0NhY2hlZFBERkltYWdlRW5hYmxlZCA9IGVuYWJsZWQpKQorICAgICAgICBkZXN0cm95
RGVjb2RlZERhdGEoKTsKK30KKwogYm9vbCBQREZEb2N1bWVudEltYWdlOjpjYWNoZVBhcmFtZXRl
cnNNYXRjaChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdAogewogICAgIGlmIChkc3RSZWN0LnNp
emUoKSAhPSBtX2NhY2hlZERlc3RpbmF0aW9uU2l6ZSkKQEAgLTEwOCw2ICsxMTcsOSBAQCBib29s
IFBERkRvY3VtZW50SW1hZ2U6OmNhY2hlUGFyYW1ldGVyc01hCiAgICAgaWYgKHNyY1JlY3QgIT0g
bV9jYWNoZWRTb3VyY2VSZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIW1f
Y2FjaGVkSW1hZ2VSZWN0LmNvbnRhaW5zKGNvbnRleHQuY2xpcEJvdW5kcygpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgQWZmaW5lVHJhbnNmb3JtOjpEZWNvbXBvc2VkVHlwZSBkZWNv
bXBvc2VkVHJhbnNmb3JtOwogICAgIGNvbnRleHQuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVm
aW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSkuZGVjb21wb3NlKGRlY29tcG9zZWRUcmFuc2Zvcm0p
OwogCkBAIC0xMzcsMjMgKzE0OSw1OSBAQCBzdGF0aWMgdm9pZCB0cmFuc2Zvcm1Db250ZXh0Rm9y
UGFpbnRpbmcoCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb250ZXh0LnRyYW5zbGF0ZShzcmNS
ZWN0LngoKSAqIGhTY2FsZSwgc3JjUmVjdC55KCkgKiB2U2NhbGUpOworICAgIC8vIGRyYXdQREZQ
YWdlKCkgcmVsaWVzIG9uIGRyYXdpbmcgdGhlIHdob2xlIFBERiBpbnRvIGEgY29udGV4dCBzdGFy
dGluZyBhdCAoMCwgMCkuIFdlIG5lZWQKKyAgICAvLyB0byB0cmFuc2Zvcm0gdGhlIGRlc3RpbmF0
aW9uIGNvbnRleHQgc3VjaCB0aGF0IHNyY1JlY3Qgb2YgdGhlIHNvdXJjZSBjb250ZXh0IHdpbGwg
YmUgZHJhd24KKyAgICAvLyBpbiBkc3RSZWN0IG9mIGRlc3RpbmF0aW9uIGNvbnRleHQuCisgICAg
Y29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSwgZHN0UmVjdC55KCkg
LSBzcmNSZWN0LnkoKSk7CiAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoaFNjYWxlLCAtdlNj
YWxlKSk7CiAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLXNyY1JlY3QuaGVpZ2h0KCkpOwogfQog
Ci12b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCkKLXsKICNpZiBQTEFURk9STShJT1MpCi0gICAgLy8gT24gaU9TLCBpZiB0
aGUgcGh5c2ljYWwgbWVtb3J5IGlzIGxlc3MgdGhhbiAxR0IsIGRvIG5vdCBhbGxvY2F0ZSBtb3Jl
IHRoYW4gMTZNQiBmb3IgdGhlIFBERiBjYWNoZWRJbWFnZS4KLSAgICBjb25zdCBzaXplX3QgbWVt
b3J5VGhyZXNob2xkID0gV1RGOjpHQjsKLSAgICBjb25zdCBzaXplX3QgbWF4QXJlYSA9IDE2ICog
V1RGOjpNQiAvIDQ7IC8vIDE2IE1CIG1heGltdW0gc2l6ZSwgZGl2aWRlZCBieSBhIHJvdWdoIGNv
c3Qgb2YgNCBieXRlcyBwZXIgcGl4ZWwgb2YgYXJlYS4KLSAgICAKLSAgICBpZiAocmFtU2l6ZSgp
IDw9IG1lbW9yeVRocmVzaG9sZCAmJiBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUo
ZHN0UmVjdC5zaXplKCksIGNvbnRleHQpLmFyZWEoKSA+PSBtYXhBcmVhKSB7Ci0gICAgICAgIG1f
Y2FjaGVkSW1hZ2VCdWZmZXIgPSBudWxscHRyOworLy8gVG8gYXZvaWQgdGhlIGpldHNhbSBvbiBp
T1MsIHdlIGFyZSBnb2luZyB0byBsaW1pdCB0aGUgc2l6ZSBvZiBhbGwgdGhlIFBERiBjYWNoZWRJ
bWFnZXMgdG8gYmUgNjRNQi4KK3N0YXRpYyBjb25zdCBzaXplX3Qgc19tYXhDYWNoZWRJbWFnZVNp
ZGUgPSA0ICogMTAyNDsKK3N0YXRpYyBjb25zdCBzaXplX3Qgc19tYXhDYWNoZWRJbWFnZUFyZWEg
PSBzX21heENhY2hlZEltYWdlU2lkZSAqIHNfbWF4Q2FjaGVkSW1hZ2VTaWRlOworCitzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNfbWF4RGVjb2RlZERhdGFTaXplID0gc19tYXhDYWNoZWRJbWFnZUFyZWEg
KiA0Oworc3RhdGljIHNpemVfdCBzX2FsbERlY29kZWREYXRhU2l6ZSA9IDA7CisKK3N0YXRpYyBG
bG9hdFJlY3QgY2FjaGVkSW1hZ2VSZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0KQoreworICAgIEZsb2F0U2l6ZSBtYXhTaXplID0gc19tYXhDYWNo
ZWRJbWFnZVNpZGUgLyBjb250ZXh0LnNjYWxlRmFjdG9yKCk7CisKKyAgICAvLyBFeHBhbmQgZnJv
bSB0aGUgY2VudGVyIG9mIHRoZSBkaXJ0eSByZWN0YW5nbGUuCisgICAgRmxvYXRSZWN0IHJlY3Qg
PSBjb250ZXh0LmNsaXBCb3VuZHMoKTsKKyAgICByZWN0LnNldFgoc3RkOjptYXgocmVjdC5jZW50
ZXIoKS54KCkgLSBtYXhTaXplLndpZHRoKCkgLyAyLCBkc3RSZWN0LngoKSkpOworICAgIHJlY3Qu
c2V0WShzdGQ6Om1heChyZWN0LmNlbnRlcigpLnkoKSAtIG1heFNpemUuaGVpZ2h0KCkgLyAyLCBk
c3RSZWN0LnkoKSkpOworCisgICAgLy8gQ292ZXIgYXMgbXVjaCBhcyB3ZSBjb3VsZCBmcm9tIHRo
ZSBkc3RSZWN0LgorICAgIHJlY3Quc2V0V2lkdGgoc3RkOjptaW4obWF4U2l6ZS53aWR0aCgpLCBk
c3RSZWN0LndpZHRoKCkpKTsKKyAgICByZWN0LnNldEhlaWdodChzdGQ6Om1pbihtYXhTaXplLmhl
aWdodCgpLCBkc3RSZWN0LmhlaWdodCgpKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisjZW5kaWYK
Kwordm9pZCBQREZEb2N1bWVudEltYWdlOjpkZWNvZGVkU2l6ZUNoYW5nZWQoc2l6ZV90IG5ld0Nh
Y2hlZEJ5dGVzKQoreworICAgIGlmICghbV9jYWNoZWRCeXRlcyAmJiAhbmV3Q2FjaGVkQnl0ZXMp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAg
ICAgICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8
aW50PihtX2NhY2hlZEJ5dGVzKSArIG5ld0NhY2hlZEJ5dGVzKTsKKworI2lmIFBMQVRGT1JNKElP
UykKKyAgICBBU1NFUlQoc19hbGxEZWNvZGVkRGF0YVNpemUgPj0gbV9jYWNoZWRCeXRlcyk7Cisg
ICAgLy8gVXBkYXRlIHdpdGggdGhlIGRpZmZlcmVuY2UgaW4gdHdvIHN0ZXBzIHRvIGF2b2lkIHVu
c2lnbmVkIHVuZGVyZmxvdyBzdWJ0cmFjdGlvbi4KKyAgICBzX2FsbERlY29kZWREYXRhU2l6ZSAt
PSBtX2NhY2hlZEJ5dGVzOworICAgIHNfYWxsRGVjb2RlZERhdGFTaXplICs9IG5ld0NhY2hlZEJ5
dGVzOworI2VuZGlmCisKKyAgICBtX2NhY2hlZEJ5dGVzID0gbmV3Q2FjaGVkQnl0ZXM7Cit9CisK
K3ZvaWQgUERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2FjaGVkSW1hZ2VJZk5lZWRlZChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0KQoreworI2lmIFBMQVRGT1JNKElPUykKICAgICAvLyBPbiBpT1MsIHNvbWUg
Y2xpZW50cyB1c2UgbG93LXF1YWxpdHkgaW1hZ2UgaW50ZXJwb2xhdGlvbiBhbHdheXMsIHdoaWNo
IHRocm93cyBvZmYgdGhpcyBvcHRpbWl6YXRpb24sCiAgICAgLy8gYXMgd2UgbmV2ZXIgZ2V0IHRo
ZSBzdWJzZXF1ZW50IGhpZ2gtcXVhbGl0eSBwYWludC4gU2luY2UgbGl2ZSByZXNpemUgaXMgcmFy
ZSBvbiBpT1MsIGRpc2FibGUgdGhlIG9wdGltaXphdGlvbi4KICAgICAvLyBGSVhNRSAoMTM2NTkz
KTogSXQncyBhbHNvIHBvc3NpYmxlIHRvIGRvIHRoZSB3cm9uZyB0aGluZyBoZXJlIGlmIENTUyBz
cGVjaWZpZXMgbG93LXF1YWxpdHkgaW50ZXJwb2xhdGlvbiB2aWEgdGhlICJpbWFnZS1yZW5kZXJp
bmciCkBAIC0xNjcsMTUgKzIxNSwzMCBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNh
Y2hlZEltYWdlCiAgICAgYm9vbCByZXBhaW50SWZOZWNlc3NhcnkgPSBpbnRlcnBvbGF0aW9uUXVh
bGl0eSAhPSBJbnRlcnBvbGF0aW9uTm9uZSAmJiBpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBJbnRl
cnBvbGF0aW9uTG93OwogI2VuZGlmCiAKLSAgICBpZiAobV9jYWNoZWRJbWFnZUJ1ZmZlciAmJiAo
IXJlcGFpbnRJZk5lY2Vzc2FyeSB8fCBjYWNoZVBhcmFtZXRlcnNNYXRjaChjb250ZXh0LCBkc3RS
ZWN0LCBzcmNSZWN0KSkpCisgICAgaWYgKCFtX2lzQ2FjaGVkUERGSW1hZ2VFbmFibGVkIHx8ICht
X2NhY2hlZEltYWdlQnVmZmVyICYmICghcmVwYWludElmTmVjZXNzYXJ5IHx8IGNhY2hlUGFyYW1l
dGVyc01hdGNoKGNvbnRleHQsIGRzdFJlY3QsIHNyY1JlY3QpKSkpCiAgICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBtX2NhY2hlZEltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoRmxvYXRSZWN0KGVuY2xvc2luZ0ludFJlY3QoZHN0UmVjdCkpLnNpemUoKSwg
Y29udGV4dCk7Ci0gICAgaWYgKCFtX2NhY2hlZEltYWdlQnVmZmVyKQorCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIG1fY2FjaGVkSW1hZ2VSZWN0ID0gY2FjaGVkSW1hZ2VSZWN0KGNvbnRleHQsIGRz
dFJlY3QpOworCisgICAgLy8gQ2FjaGUgdGhlIFBERiBpbWFnZSBvbmx5IGlmIHRoZSBzaXplIG9m
IHRoZSBuZXcgaW1hZ2Ugd29uJ3QgZXhjZWVkIHRoZSBsaW1pdC4KKyAgICBpZiAoc19hbGxEZWNv
ZGVkRGF0YVNpemUgKyBtX2NhY2hlZEltYWdlUmVjdC5zaXplKCkuYXJlYSgpICogNCAtIG1fY2Fj
aGVkQnl0ZXMgPiBzX21heERlY29kZWREYXRhU2l6ZSkgeworICAgICAgICBkZXN0cm95RGVjb2Rl
ZERhdGEoKTsKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8mIGJ1ZmZlckNvbnRleHQgPSBtX2Nh
Y2hlZEltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgfQorI2Vsc2UKKyAgICBtX2NhY2hlZElt
YWdlUmVjdCA9IGRzdFJlY3Q7CisjZW5kaWYKIAotICAgIHRyYW5zZm9ybUNvbnRleHRGb3JQYWlu
dGluZyhidWZmZXJDb250ZXh0LCBkc3RSZWN0LCBzcmNSZWN0KTsKKyAgICBtX2NhY2hlZEltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoRmxvYXRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QobV9jYWNoZWRJbWFnZVJlY3QpKS5zaXplKCksIGNvbnRleHQpOworICAg
IGlmICghbV9jYWNoZWRJbWFnZUJ1ZmZlcikgeworICAgICAgICBkZXN0cm95RGVjb2RlZERhdGEo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8mIGJ1ZmZlckNvbnRleHQgPSBt
X2NhY2hlZEltYWdlQnVmZmVyLT5jb250ZXh0KCk7CisgICAgLy8gVGhlIFBERiBjYWNoZWRJbWFn
ZSBzaG91bGQgYmUgZHJhd24gYXQgKDAsIDApIGFsd2F5cy4KKyAgICB0cmFuc2Zvcm1Db250ZXh0
Rm9yUGFpbnRpbmcoYnVmZmVyQ29udGV4dCwgRmxvYXRSZWN0KHsgfSwgZHN0UmVjdC5zaXplKCkp
LCBzcmNSZWN0KTsKICAgICBkcmF3UERGUGFnZShidWZmZXJDb250ZXh0KTsKIAogICAgIG1fY2Fj
aGVkVHJhbnNmb3JtID0gY29udGV4dC5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5
SW5jbHVkZURldmljZVNjYWxlKTsKQEAgLTE4MywxMSArMjQ2LDcgQEAgdm9pZCBQREZEb2N1bWVu
dEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZQogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1Jl
Y3Q7CiAKICAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmlu
dGVybmFsU2l6ZSgpOwotICAgIHNpemVfdCBvbGRDYWNoZWRCeXRlcyA9IG1fY2FjaGVkQnl0ZXM7
Ci0gICAgbV9jYWNoZWRCeXRlcyA9IHNhZmVDYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndpZHRo
KCkpICogaW50ZXJuYWxTaXplLmhlaWdodCgpICogNDsKLQotICAgIGlmIChpbWFnZU9ic2VydmVy
KCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGVjb2RlZFNpemVDaGFuZ2VkKHRoaXMsIHNh
ZmVDYXN0PGludD4obV9jYWNoZWRCeXRlcykgLSBzYWZlQ2FzdDxpbnQ+KG9sZENhY2hlZEJ5dGVz
KSk7CisgICAgZGVjb2RlZFNpemVDaGFuZ2VkKHNhZmVDYXN0PHNpemVfdD4oaW50ZXJuYWxTaXpl
LndpZHRoKCkpICogaW50ZXJuYWxTaXplLmhlaWdodCgpICogNCk7CiB9CiAKIHZvaWQgUERGRG9j
dW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pCkBAIC0yMTYsMTEgKzI3
NSw4IEBAIHZvaWQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnQKIHZvaWQgUERG
RG9jdW1lbnRJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wpCiB7CiAgICAgbV9jYWNoZWRJ
bWFnZUJ1ZmZlciA9IG51bGxwdHI7Ci0KLSAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAg
ICBpbWFnZU9ic2VydmVyKCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50
PihtX2NhY2hlZEJ5dGVzKSk7Ci0KLSAgICBtX2NhY2hlZEJ5dGVzID0gMDsKKyAgICBtX2NhY2hl
ZEltYWdlUmVjdCA9IEZsb2F0UmVjdCgpOworICAgIGRlY29kZWRTaXplQ2hhbmdlZCgwKTsKIH0K
IAogI2lmICFVU0UoUERGS0lUX0ZPUl9QREZET0NVTUVOVElNQUdFKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
aAkocmV2aXNpb24gMjAzMzA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw4IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQREZEb2N1bWVudEltYWdlKG9ic2Vy
dmVyKSk7CiAgICAgfQogCisgICAgdm9pZCBzZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQoYm9vbCk7
CisKIHByaXZhdGU6CiAgICAgUERGRG9jdW1lbnRJbWFnZShJbWFnZU9ic2VydmVyKik7CiAgICAg
dmlydHVhbCB+UERGRG9jdW1lbnRJbWFnZSgpOwpAQCAtODEsOSArODMsMTIgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBwYWdlQ291bnQoKSBjb25zdDsKICAgICB2b2lkIGRyYXdQREZQYWdlKEdy
YXBoaWNzQ29udGV4dCYpOwogCisgICAgdm9pZCBkZWNvZGVkU2l6ZUNoYW5nZWQoc2l6ZV90IG5l
d0NhY2hlZEJ5dGVzKTsKICAgICB2b2lkIHVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QpOwogICAgIGJvb2wgY2FjaGVQYXJhbWV0ZXJzTWF0Y2goR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0
OwogCisgICAgYm9vbCBtX2lzQ2FjaGVkUERGSW1hZ2VFbmFibGVkIHsgdHJ1ZSB9OworCiAjaWYg
VVNFKFBERktJVF9GT1JfUERGRE9DVU1FTlRJTUFHRSkKICAgICBSZXRhaW5QdHI8UERGRG9jdW1l
bnQ+IG1fZG9jdW1lbnQ7CiAjZWxzZQpAQCAtOTEsNiArOTYsNyBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fY2FjaGVkSW1hZ2VCdWZmZXI7
CisgICAgRmxvYXRSZWN0IG1fY2FjaGVkSW1hZ2VSZWN0OwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X2NhY2hlZFRyYW5zZm9ybTsKICAgICBGbG9hdFNpemUgbV9jYWNoZWREZXN0aW5hdGlvblNpemU7
CiAgICAgRmxvYXRSZWN0IG1fY2FjaGVkU291cmNlUmVjdDsKQEAgLTEwMyw2ICsxMDksOCBAQCBw
cml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfSU1BR0UoUERGRG9jdW1lbnRJ
bWFnZSkKKwogI2VuZGlmIC8vIFVTRShDRykKIAogI2VuZGlmIC8vIFBERkRvY3VtZW50SW1hZ2Vf
aApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lv
biAyMDMzMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxMSBAQAogI2luY2x1ZGUgIlNlbGVjdGlvblJlY3Qu
aCIKICNlbmRpZgogCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIlBERkRvY3VtZW50SW1hZ2UuaCIK
KyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
I2lmIFBMQVRGT1JNKElPUykKQEAgLTU0NSw2ICs1NTAsMTEgQEAgdm9pZCBSZW5kZXJJbWFnZTo6
cGFpbnRJbnRvUmVjdChHcmFwaGljcwogICAgIEltYWdlKiBpbWFnZSA9IGltYWdlUmVzb3VyY2Uo
KS5pbWFnZSgpLmdldCgpOwogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb24g
PSBpbWFnZSA/IGNob29zZUludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQsICppbWFnZSwgaW1h
Z2UsIExheW91dFNpemUocmVjdC5zaXplKCkpKSA6IEludGVycG9sYXRpb25EZWZhdWx0OwogCisj
aWYgVVNFKENHKQorICAgIGlmIChpczxQREZEb2N1bWVudEltYWdlPihpbWFnZSkpCisgICAgICAg
IGRvd25jYXN0PFBERkRvY3VtZW50SW1hZ2U+KCppbWFnZSkuc2V0Q2FjaGVkUERGSW1hZ2VFbmFi
bGVkKGZyYW1lKCkuc2V0dGluZ3MoKS5pc0NhY2hlZFBERkltYWdlRW5hYmxlZCgpKTsKKyNlbmRp
ZgorCiAgICAgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIG9yaWVudGF0aW9uRGVzY3JpcHRp
b24oc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSwgc3R5bGUoKS5pbWFnZU9yaWVudGF0
aW9uKCkpOwogICAgIGNvbnRleHQuZHJhd0ltYWdlKCppbWcsIHJlY3QsIEltYWdlUGFpbnRpbmdP
cHRpb25zKGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGVOb3JtYWwsIG9yaWVudGF0aW9uRGVz
Y3JpcHRpb24sIGludGVycG9sYXRpb24pKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAkocmV2aXNpb24gMjAzMzA2KQorKysgU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAs
NiArODAsNyBAQCBJbnRlcm5hbFNldHRpbmdzOjpCYWNrdXA6OkJhY2t1cChTZXR0aW5nCiAgICAg
LCBtX2xhbmdBdHRyaWJ1dGVBd2FyZUZvcm1Db250cm9sVUlFbmFibGVkKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGFuZ0F0dHJpYnV0ZUF3YXJlRm9ybUNvbnRyb2xV
SUVuYWJsZWQoKSkKICAgICAsIG1faW1hZ2VzRW5hYmxlZChzZXR0aW5ncy5hcmVJbWFnZXNFbmFi
bGVkKCkpCiAgICAgLCBtX3ByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKHNldHRpbmdzLnByZWZlck1J
TUVUeXBlRm9ySW1hZ2VzKCkpCisgICAgLCBtX2NhY2hlZFBERkltYWdlRW5hYmxlZChzZXR0aW5n
cy5pc0NhY2hlZFBERkltYWdlRW5hYmxlZCgpKQogICAgICwgbV9taW5pbXVtVGltZXJJbnRlcnZh
bChzZXR0aW5ncy5taW5pbXVtRE9NVGltZXJJbnRlcnZhbCgpKQogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKICAgICAsIG1fc2hvdWxkRGlzcGxheVN1YnRpdGxlcyhzZXR0aW5ncy5zaG91bGREaXNw
bGF5U3VidGl0bGVzKCkpCkBAIC0xNTksNiArMTYwLDcgQEAgdm9pZCBJbnRlcm5hbFNldHRpbmdz
OjpCYWNrdXA6OnJlc3RvcmVUbwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuc2V0TGFuZ0F0dHJpYnV0ZUF3YXJlRm9ybUNvbnRyb2xVSUVuYWJsZWQobV9sYW5n
QXR0cmlidXRlQXdhcmVGb3JtQ29udHJvbFVJRW5hYmxlZCk7CiAgICAgc2V0dGluZ3Muc2V0SW1h
Z2VzRW5hYmxlZChtX2ltYWdlc0VuYWJsZWQpOwogICAgIHNldHRpbmdzLnNldFByZWZlck1JTUVU
eXBlRm9ySW1hZ2VzKG1fcHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMpOworICAgIHNldHRpbmdzLnNl
dENhY2hlZFBERkltYWdlRW5hYmxlZChtX2NhY2hlZFBERkltYWdlRW5hYmxlZCk7CiAgICAgc2V0
dGluZ3Muc2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwobV9taW5pbXVtVGltZXJJbnRlcnZhbCk7
CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIHNldHRpbmdzLnNldFNob3VsZERpc3BsYXlT
dWJ0aXRsZXMobV9zaG91bGREaXNwbGF5U3VidGl0bGVzKTsKQEAgLTQ4Myw2ICs0ODUsMTIgQEAg
dm9pZCBJbnRlcm5hbFNldHRpbmdzOjpzZXRJbWFnZXNFbmFibGVkKAogICAgIHNldHRpbmdzKCkt
PnNldEltYWdlc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3ZvaWQgSW50ZXJuYWxTZXR0aW5nczo6
c2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgSW50ZXJuYWxTZXR0aW5nc0d1YXJkRm9yU2V0dGluZ3MoKTsKKyAgICBzZXR0aW5n
cygpLT5zZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQoZW5hYmxlZCk7Cit9CisKIHZvaWQgSW50ZXJu
YWxTZXR0aW5nczo6c2V0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91YmxlIGludGVydmFsSW5TZWNv
bmRzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJbnRlcm5hbFNldHRpbmdzR3VhcmRGb3JT
ZXR0aW5ncygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdz
LmgJKHJldmlzaW9uIDIwMzMwNikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgYm9vbCBtX2xhbmdBdHRyaWJ1dGVBd2FyZUZvcm1Db250cm9sVUlFbmFibGVkOwogICAgICAg
ICBib29sIG1faW1hZ2VzRW5hYmxlZDsKICAgICAgICAgYm9vbCBtX3ByZWZlck1JTUVUeXBlRm9y
SW1hZ2VzOworICAgICAgICBib29sIG1fY2FjaGVkUERGSW1hZ2VFbmFibGVkOwogICAgICAgICBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIG1fbWluaW11bVRpbWVySW50ZXJ2YWw7CiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogICAgICAgICBib29sIG1fc2hvdWxkRGlzcGxheVN1YnRpdGxlczsK
QEAgLTE0MSw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbGxvd3NBaXJQbGF5Rm9y
TWVkaWFQbGF5YmFjayhib29sKTsKICAgICB2b2lkIHNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRQcmVmZXJNSU1FVHlwZUZvcklt
YWdlcyhib29sLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRDYWNoZWRQREZJbWFnZUVu
YWJsZWQoYm9vbCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2V0U2hvdWxkRGlzcGxheVRy
YWNrS2luZChjb25zdCBTdHJpbmcmIGtpbmQsIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYp
OwogICAgIGJvb2wgc2hvdWxkRGlzcGxheVRyYWNrS2luZChjb25zdCBTdHJpbmcmIGtpbmQsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFsU2V0dGluZ3MuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5pZGwJKHJldmlzaW9uIDIwMzMwNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4
LDcgQEAKICAgICAvLyBPdGhlciBzd2l0Y2hlcwogICAgIFtSYWlzZXNFeGNlcHRpb25dIHZvaWQg
c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KERPTVN0cmluZyBwb2xpY3kpOwogICAgIFtSYWlzZXNF
eGNlcHRpb25dIHZvaWQgc2V0SW1hZ2VzRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOworICAgIFtS
YWlzZXNFeGNlcHRpb25dIHZvaWQgc2V0Q2FjaGVkUERGSW1hZ2VFbmFibGVkKGJvb2xlYW4gZW5h
YmxlZCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRVc2VMZWdhY3lCYWNrZ3JvdW5k
U2l6ZVNob3J0aGFuZEJlaGF2aW9yKGJvb2xlYW4gZW5hYmxlZCk7CiAgICAgW1JhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCBzZXRBdXRvc2Nyb2xsRm9yRHJhZ0FuZERyb3BFbmFibGVkKGJvb2xlYW4gZW5h
YmxlZCk7CiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gdm9pZCBzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0
ZW5kQmV5b25kUGFnZShib29sZWFuIGhhc0V4dGVuZGVkQmFja2dyb3VuZCk7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMDMzMDYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNiBAQAorMjAxNi0wNy0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhh
bGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIFBERkRvY3VtZW50SW1hZ2Ugc2hvdWxk
IGNhY2hlIG9ubHkgYSBzdWIgaW1hZ2Ugb2YgdGhlIFBERiB3aGVuIGNhY2hpbmcgdGhlIHdob2xl
IGltYWdlIGlzIGV4cGVuc2l2ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU4NzE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgor
ICAgICAgICAKKyAgICAgICAgTWFrZSBzdXJlIHRoZSBQREYgaW1hZ2Ugd2lsbCBiZSBkaXNwbGF5
ZWQgYXQgdGhlIGNvcnJlY3QgcG9zaXRpb24gaWYgY2FjaGluZworICAgICAgICB0aGUgUERGIGlt
YWdlIGlzIGRpc2FibGVkLgorCisgICAgICAgICogZmFzdC9pbWFnZXMvZGlzcGxhY2VkLW5vbi1j
YWNoZWQtcGRmLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2VzL2Rp
c3BsYWNlZC1ub24tY2FjaGVkLXBkZi5odG1sOiBBZGRlZC4KKwogMjAxNi0wNy0xNSAgUnlhbiBI
YWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBNYXJraW5nIGh0dHAvdGVz
dHMvY2FjaGUvZGlzay1jYWNoZS9kaXNrLWNhY2hlLXJlcXVlc3QtbWF4LXN0YWxlLmh0bWwgYXMg
YSBmbGFreSB0aW1lb3V0IG9uIGlvcy1zaW11bGF0b3IgV0syIFJlbGVhc2UKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBkZi1leHBlY3RlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2Fj
aGVkLXBkZi1leHBlY3RlZC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
aW1hZ2VzL2Rpc3BsYWNlZC1ub24tY2FjaGVkLXBkZi1leHBlY3RlZC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8c3R5bGU+CisgICAgICAgIGRpdiB7CisgICAgICAgICAgICB3aWR0aDogMTAwcHg7CisgICAg
ICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAsIDE0MywgMCk7CisgICAgICAg
IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdj48L2Rpdj4KKyAgICA8
ZGl2PjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFn
ZXMvZGlzcGxhY2VkLW5vbi1jYWNoZWQtcGRmLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9pbWFnZXMvZGlzcGxhY2VkLW5vbi1jYWNoZWQtcGRmLmh0bWwJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvZGlzcGxhY2VkLW5vbi1jYWNoZWQtcGRmLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxib2R5PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAm
JiB3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgd2luZG93LmludGVybmFscy5zZXR0aW5n
cy5zZXRDYWNoZWRQREZJbWFnZUVuYWJsZWQoZmFsc2UpOworICAgIDwvc2NyaXB0PgorICAgIDxp
bWcgc3JjPSJyZXNvdXJjZXMvZ3JlZW5fcmVjdGFuZ2xlLnBkZiI+CisgICAgPGltZyBzcmM9InJl
c291cmNlcy9ncmVlbl9yZWN0YW5nbGUucGRmIj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>