<?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>165793</bug_id>
          
          <creation_ts>2016-12-13 01:35:01 -0800</creation_ts>
          <short_desc>[GStreamer] use FastMalloc-based GstAllocator</short_desc>
          <delta_ts>2018-01-08 01:36:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>eocanha</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1259354</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-12-13 01:35:01 -0800</bug_when>
    <thetext>With large amounts of memory being allocated via GStreamer, it should be interesting to see what improvements could be achieved by diverting those allocations to bmalloc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259355</commentid>
    <comment_count>1</comment_count>
      <attachid>296994</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-12-13 01:35:55 -0800</bug_when>
    <thetext>Created attachment 296994
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259371</commentid>
    <comment_count>2</comment_count>
      <attachid>296994</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-12-13 03:38:29 -0800</bug_when>
    <thetext>Comment on attachment 296994
WIP

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:161
&gt; +        fprintf(stderr, &quot;initializeGStreamer(): using FastMalloc allocator %p\n&quot;, allocator);

I would GST_INFO this, though it would require to add a debug category for this.

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:36
&gt; +    auto* mem = reinterpret_cast&lt;GstMemoryFastMalloc*&gt;(fastAlignedMalloc(alignment + 1, headerSize + allocationSize));

I prefer typed things when they are non-trivial, which IMHO is  the case.

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:40
&gt; +    mem-&gt;data = reinterpret_cast&lt;guint8*&gt;(mem) + headerSize;

uint8_t

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:53
&gt; +static void gst_allocator_fast_malloc_free(GstAllocator*, GstMemory* mem)

I would ASSERT here if the allocator is right.

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:82
&gt; +    auto* copy = reinterpret_cast&lt;GstMemoryFastMalloc*&gt;(fastAlignedMalloc(alignment + 1, headerSize + allocationSize));

Proper typing?

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:89
&gt; +    copy-&gt;data = reinterpret_cast&lt;guint8*&gt;(copy) + headerSize;

uint8_t

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:104
&gt; +    auto* sharedMem = reinterpret_cast&lt;GstMemoryFastMalloc*&gt;(fastMalloc(sizeof(GstMemoryFastMalloc)));

Proper typing?

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:118
&gt; +        auto* parent = reinterpret_cast&lt;GstMemoryFastMalloc*&gt;(mem1-&gt;base.parent);

Proper typing?

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:135
&gt; +    auto* gobjectClass = G_OBJECT_CLASS(klass);
&gt; +    gobjectClass-&gt;finalize = gst_allocator_fast_malloc_finalize;
&gt; +
&gt; +    auto* gstAllocatorClass = GST_ALLOCATOR_CLASS(klass);

Proper typing?

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.h:29
&gt; +    guint8* data;

uint8_t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259378</commentid>
    <comment_count>3</comment_count>
      <attachid>296994</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-12-13 04:25:36 -0800</bug_when>
    <thetext>Comment on attachment 296994
WIP

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:161
&gt;&gt; +        fprintf(stderr, &quot;initializeGStreamer(): using FastMalloc allocator %p\n&quot;, allocator);
&gt; 
&gt; I would GST_INFO this, though it would require to add a debug category for this.

It&apos;s a debugging leftover, can be removed.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:36
&gt;&gt; +    auto* mem = reinterpret_cast&lt;GstMemoryFastMalloc*&gt;(fastAlignedMalloc(alignment + 1, headerSize + allocationSize));
&gt; 
&gt; I prefer typed things when they are non-trivial, which IMHO is  the case.

This is typed like anything else, but it removes the duplicated information.

Also, static_cast&lt;&gt; can be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259379</commentid>
    <comment_count>4</comment_count>
      <attachid>296994</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-12-13 04:42:29 -0800</bug_when>
    <thetext>Comment on attachment 296994
WIP

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:162
&gt; +        gst_allocator_set_default(allocator);

This could be moved before gst_init(), maybe? Seems to work (tm).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259380</commentid>
    <comment_count>5</comment_count>
      <attachid>297004</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-12-13 04:46:01 -0800</bug_when>
    <thetext>Created attachment 297004
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259381</commentid>
    <comment_count>6</comment_count>
      <attachid>297004</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-12-13 05:05:16 -0800</bug_when>
    <thetext>Comment on attachment 297004
WIP

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

&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:28
&gt; +#define WEBKIT_IS_VIDEO_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_VIDEO_SINK))

This seems a leftover from the original code you used as template. Maybe you&apos;d like it to be GST_IS_ALLOCATOR_FAST_MALLOC(), or maybe you&apos;re like to remove it if it&apos;s not used anywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259399</commentid>
    <comment_count>7</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-12-13 08:15:57 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:161
&gt; &gt;&gt; +        fprintf(stderr, &quot;initializeGStreamer(): using FastMalloc allocator %p\n&quot;, allocator);
&gt; &gt; 
&gt; &gt; I would GST_INFO this, though it would require to add a debug category for this.
&gt; 
&gt; It&apos;s a debugging leftover, can be removed.

I think it is useful information to see in a GStreamer log.

Which brings another question to me: if we change the default allocator, we would be affecting other GStreamer multimedia playback outside WebKit. I&apos;m beginning to wonder about the consequences of this.

&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:36
&gt; &gt;&gt; +    auto* mem = reinterpret_cast&lt;GstMemoryFastMalloc*&gt;(fastAlignedMalloc(alignment + 1, headerSize + allocationSize));
&gt; &gt; 
&gt; &gt; I prefer typed things when they are non-trivial, which IMHO is  the case.
&gt; 
&gt; This is typed like anything else, but it removes the duplicated information.

I know it is typed and I still prefer to see the explicit types at the code.


(In reply to comment #4)
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:162
&gt; &gt; +        gst_allocator_set_default(allocator);
&gt; 
&gt; This could be moved before gst_init(), maybe? Seems to work (tm).

I wouldn&apos;t do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262819</commentid>
    <comment_count>8</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-12-27 10:20:23 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Which brings another question to me: if we change the default allocator, we
&gt; would be affecting other GStreamer multimedia playback outside WebKit. I&apos;m
&gt; beginning to wonder about the consequences of this.
&gt; 

Yeah, this could be a bit of a blocker.

Also, Phil commented that our allocator should use the webkit_ prefix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274036</commentid>
    <comment_count>9</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-02-07 09:55:28 -0800</bug_when>
    <thetext>Turns out it&apos;s quite hard to get a GstAllocator implementation right. Instead, let&apos;s use FastMalloc in specific places as required, e.g. what bug #167928 does for MediaSourceClientGStreamerMSE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386103</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-01-05 03:06:02 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #4)
&gt; Comment on attachment 296994 [details]
&gt; WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=296994&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:162
&gt; &gt; +        gst_allocator_set_default(allocator);
&gt; 
&gt; This could be moved before gst_init(), maybe? Seems to work (tm).

No, it can&apos;t. gst_init calls _priv_gst_allocator_initialize() that initializes the allocators hash table and set the system malloc as the default one. So, any custom allocator must be set after gst_init().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386104</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-01-05 03:08:58 -0800</bug_when>
    <thetext>(In reply to Xabier Rodríguez Calvar from comment #7)
&gt; (In reply to comment #3)
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:161
&gt; &gt; &gt;&gt; +        fprintf(stderr, &quot;initializeGStreamer(): using FastMalloc allocator %p\n&quot;, allocator);
&gt; &gt; &gt; 
&gt; &gt; &gt; I would GST_INFO this, though it would require to add a debug category for this.
&gt; &gt; 
&gt; &gt; It&apos;s a debugging leftover, can be removed.
&gt; 
&gt; I think it is useful information to see in a GStreamer log.
&gt; 
&gt; Which brings another question to me: if we change the default allocator, we
&gt; would be affecting other GStreamer multimedia playback outside WebKit. I&apos;m
&gt; beginning to wonder about the consequences of this.

No, this would only affect gst used by the web process. I think we could move the gst initialization to the web process main and do it unconditionally. At least here it&apos;s quite fast.

DBG: gst initialized in 0,012539

&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:36
&gt; &gt; &gt;&gt; +    auto* mem = reinterpret_cast&lt;GstMemoryFastMalloc*&gt;(fastAlignedMalloc(alignment + 1, headerSize + allocationSize));
&gt; &gt; &gt; 
&gt; &gt; &gt; I prefer typed things when they are non-trivial, which IMHO is  the case.
&gt; &gt; 
&gt; &gt; This is typed like anything else, but it removes the duplicated information.
&gt; 
&gt; I know it is typed and I still prefer to see the explicit types at the code.
&gt; 
&gt; 
&gt; (In reply to comment #4)
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp:162
&gt; &gt; &gt; +        gst_allocator_set_default(allocator);
&gt; &gt; 
&gt; &gt; This could be moved before gst_init(), maybe? Seems to work (tm).
&gt; 
&gt; I wouldn&apos;t do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386105</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-01-05 03:10:31 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Which brings another question to me: if we change the default allocator, we
&gt; &gt; would be affecting other GStreamer multimedia playback outside WebKit. I&apos;m
&gt; &gt; beginning to wonder about the consequences of this.
&gt; &gt; 
&gt; 
&gt; Yeah, this could be a bit of a blocker.
&gt; 
&gt; Also, Phil commented that our allocator should use the webkit_ prefix.

Why? it&apos;s a private object not exposed anywhere. I&apos;m fine with using WebKit prefix in any case, but this is not like the web source element that other application might use. This is a private object only instantiated by webkit and set as default allocator in the web process when initializing gst.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386106</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-01-05 03:11:41 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #9)
&gt; Turns out it&apos;s quite hard to get a GstAllocator implementation right.
&gt; Instead, let&apos;s use FastMalloc in specific places as required, e.g. what bug
&gt; #167928 does for MediaSourceClientGStreamerMSE.

I think we can give this another try. I&apos;ve fixed some things in the patch and cleaned up a bit, I&apos;ll upload a new version now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386110</commentid>
    <comment_count>14</comment_count>
      <attachid>330544</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-01-05 03:17:33 -0800</bug_when>
    <thetext>Created attachment 330544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386111</commentid>
    <comment_count>15</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-05 03:19:56 -0800</bug_when>
    <thetext>Attachment 330544 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:138:  gst_allocator_fast_malloc_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:145:  gst_allocator_fast_malloc_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/platform/graphics/gstreamer/GstAllocatorFastMalloc.h:24:  gst_allocator_fast_malloc_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386625</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2018-01-08 01:34:45 -0800</bug_when>
    <thetext>Committed r226504: &lt;https://trac.webkit.org/changeset/226504&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386626</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-08 01:36:53 -0800</bug_when>
    <thetext>&lt;rdar://problem/36345536&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296994</attachid>
            <date>2016-12-13 01:35:55 -0800</date>
            <delta_ts>2016-12-13 04:46:01 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>gstallocator.patch</filename>
            <type>text/plain</type>
            <size>9710</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCA3NmRlMDg1Li40NTQ4
ZGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0zMCw2ICsz
MCw3IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dzdEFsbG9jYXRvckZhc3RNYWxsb2MuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmNwcAppbmRleCBmNzEx
MjNiLi4wMzIzN2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVzLmNwcApAQCAtMjQs
NiArMjQsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdzdEFsbG9jYXRvckZhc3RNYWxsb2MuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCiAKICNpbmNsdWRlIDxnc3QvYXVkaW8vYXVkaW8taW5mby5o
PgpAQCAtMTU1LDEwICsxNTYsMTUgQEAgYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyKCkKICAgICBi
b29sIGdzdEluaXRpYWxpemVkID0gZ3N0X2luaXRfY2hlY2soMCwgMCwgJmVycm9yLm91dFB0cigp
KTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGdzdEluaXRpYWxpemVkLCAiR1N0cmVhbWVyIGlu
aXRpYWxpemF0aW9uIGZhaWxlZDogJXMiLCBlcnJvciA/IGVycm9yLT5tZXNzYWdlIDogInVua25v
d24gZXJyb3Igb2NjdXJyZWQiKTsKIAorICAgIGlmIChnc3RJbml0aWFsaXplZCkgeworICAgICAg
ICBHc3RBbGxvY2F0b3IqIGFsbG9jYXRvciA9IEdTVF9BTExPQ0FUT1IoZ19vYmplY3RfbmV3KGdz
dF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfZ2V0X3R5cGUoKSwgbnVsbHB0cikpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgImluaXRpYWxpemVHU3RyZWFtZXIoKTogdXNpbmcgRmFzdE1hbGxvYyBh
bGxvY2F0b3IgJXBcbiIsIGFsbG9jYXRvcik7CisgICAgICAgIGdzdF9hbGxvY2F0b3Jfc2V0X2Rl
ZmF1bHQoYWxsb2NhdG9yKTsKKwogI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJF
QU1FUl9NUEVHVFMpCi0gICAgaWYgKGdzdEluaXRpYWxpemVkKQogICAgICAgICBnc3RfbXBlZ3Rz
X2luaXRpYWxpemUoKTsKICNlbmRpZgorICAgIH0KIAogICAgIHJldHVybiBnc3RJbml0aWFsaXpl
ZDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9Hc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDYzZDYyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdEFsbG9jYXRvckZhc3RN
YWxsb2MuY3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNiBJ
Z2FsaWEgUy5MCisgKiAgQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUikK
KworR19ERUZJTkVfVFlQRShHc3RBbGxvY2F0b3JGYXN0TWFsbG9jLCBnc3RfYWxsb2NhdG9yX2Zh
c3RfbWFsbG9jLCBHU1RfVFlQRV9BTExPQ0FUT1IpOworCitzdGF0aWMgR3N0TWVtb3J5KiBnc3Rf
YWxsb2NhdG9yX2Zhc3RfbWFsbG9jX2FsbG9jKEdzdEFsbG9jYXRvciogYWxsb2NhdG9yLCBnc2l6
ZSBzaXplLCBHc3RBbGxvY2F0aW9uUGFyYW1zKiBwYXJhbXMpCit7CisgICAgLy8gYWxpZ25tZW50
IHNob3VsZCBiZSBhIChwb3dlci1vZi10d28gLSAxKS4KKyAgICBnc2l6ZSBhbGlnbm1lbnQgPSBw
YXJhbXMtPmFsaWduIHwgZ3N0X21lbW9yeV9hbGlnbm1lbnQ7CisgICAgQVNTRVJUKCEoKGFsaWdu
bWVudCArIDEpICYgYWxpZ25tZW50KSk7CisKKyAgICBnc2l6ZSBoZWFkZXJTaXplID0gKHNpemVv
ZihHc3RNZW1vcnlGYXN0TWFsbG9jKSArIGFsaWdubWVudCkgJiB+YWxpZ25tZW50OworICAgIGdz
aXplIGFsbG9jYXRpb25TaXplID0gcGFyYW1zLT5wcmVmaXggKyBzaXplICsgcGFyYW1zLT5wYWRk
aW5nOworCisgICAgYXV0byogbWVtID0gcmVpbnRlcnByZXRfY2FzdDxHc3RNZW1vcnlGYXN0TWFs
bG9jKj4oZmFzdEFsaWduZWRNYWxsb2MoYWxpZ25tZW50ICsgMSwgaGVhZGVyU2l6ZSArIGFsbG9j
YXRpb25TaXplKSk7CisgICAgaWYgKCFtZW0pCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgbWVtLT5kYXRhID0gcmVpbnRlcnByZXRfY2FzdDxndWludDgqPihtZW0pICsgaGVhZGVyU2l6
ZTsKKworICAgIGlmIChwYXJhbXMtPnByZWZpeCAmJiAocGFyYW1zLT5mbGFncyAmIEdTVF9NRU1P
UllfRkxBR19aRVJPX1BSRUZJWEVEKSkKKyAgICAgICAgc3RkOjptZW1zZXQobWVtLT5kYXRhLCAw
LCBwYXJhbXMtPnByZWZpeCk7CisgICAgaWYgKHBhcmFtcy0+cGFkZGluZyAmJiAocGFyYW1zLT5m
bGFncyAmIEdTVF9NRU1PUllfRkxBR19aRVJPX1BBRERFRCkpCisgICAgICAgIHN0ZDo6bWVtc2V0
KG1lbS0+ZGF0YSArIHBhcmFtcy0+cHJlZml4ICsgc2l6ZSwgMCwgcGFyYW1zLT5wYWRkaW5nKTsK
KworICAgIGdzdF9tZW1vcnlfaW5pdChHU1RfTUVNT1JZX0NBU1QobWVtKSwgcGFyYW1zLT5mbGFn
cywgYWxsb2NhdG9yLCBudWxscHRyLAorICAgICAgICBhbGxvY2F0aW9uU2l6ZSwgYWxpZ25tZW50
LCBwYXJhbXMtPnByZWZpeCwgc2l6ZSk7CisKKyAgICByZXR1cm4gR1NUX01FTU9SWV9DQVNUKG1l
bSk7Cit9CisKK3N0YXRpYyB2b2lkIGdzdF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfZnJlZShHc3RB
bGxvY2F0b3IqLCBHc3RNZW1vcnkqIG1lbSkKK3sKKyAgICBmYXN0RnJlZShtZW0pOworfQorCitz
dGF0aWMgZ3BvaW50ZXIgZ3N0X2FsbG9jYXRvcl9mYXN0X21hbGxvY19tZW1fbWFwKEdzdE1lbW9y
eUZhc3RNYWxsb2MqIG1lbSwgZ3NpemUsIEdzdE1hcEZsYWdzKQoreworICAgIHJldHVybiBtZW0t
PmRhdGE7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBnc3RfYWxsb2NhdG9yX2Zhc3RfbWFsbG9jX21l
bV91bm1hcChHc3RNZW1vcnlGYXN0TWFsbG9jKikKK3sKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
c3RhdGljIEdzdE1lbW9yeUZhc3RNYWxsb2MqIGdzdF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfbWVt
X2NvcHkoR3N0TWVtb3J5RmFzdE1hbGxvYyogbWVtLCBnc3NpemUgb2Zmc2V0LCBnc2l6ZSBzaXpl
KQoreworICAgIGdzaXplIGFsaWdubWVudCA9IG1lbS0+YmFzZS5hbGlnbiB8IGdzdF9tZW1vcnlf
YWxpZ25tZW50OworICAgIEFTU0VSVCghKChhbGlnbm1lbnQgKyAxKSAmIGFsaWdubWVudCkpOwor
CisgICAgZ3NpemUgaGVhZGVyU2l6ZSA9IChzaXplb2YoR3N0TWVtb3J5RmFzdE1hbGxvYykgKyBh
bGlnbm1lbnQpICYgfmFsaWdubWVudDsKKworICAgIGdzaXplIGFsbG9jYXRpb25TaXplID0gc2l6
ZTsKKyAgICBpZiAoYWxsb2NhdGlvblNpemUgPT0gc3RhdGljX2Nhc3Q8Z3NpemU+KC0xKSkgewor
ICAgICAgICBhbGxvY2F0aW9uU2l6ZSA9IDA7CisgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8ICht
ZW0tPmJhc2Uuc2l6ZSA+IHN0YXRpY19jYXN0PGdzaXplPihvZmZzZXQpKSkKKyAgICAgICAgICAg
IGFsbG9jYXRpb25TaXplID0gbWVtLT5iYXNlLnNpemUgLSBvZmZzZXQ7CisgICAgfQorCisgICAg
YXV0byogY29weSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWVtb3J5RmFzdE1hbGxvYyo+KGZhc3RB
bGlnbmVkTWFsbG9jKGFsaWdubWVudCArIDEsIGhlYWRlclNpemUgKyBhbGxvY2F0aW9uU2l6ZSkp
OworICAgIGlmICghY29weSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBnc3RfbWVt
b3J5X2luaXQoR1NUX01FTU9SWV9DQVNUKGNvcHkpLCBzdGF0aWNfY2FzdDxHc3RNZW1vcnlGbGFn
cz4oMCksCisgICAgICAgIG1lbS0+YmFzZS5hbGxvY2F0b3IsIG51bGxwdHIsIGFsbG9jYXRpb25T
aXplLCBhbGlnbm1lbnQsIDAsIGFsbG9jYXRpb25TaXplKTsKKworICAgIGNvcHktPmRhdGEgPSBy
ZWludGVycHJldF9jYXN0PGd1aW50OCo+KGNvcHkpICsgaGVhZGVyU2l6ZTsKKyAgICBzdGQ6Om1l
bWNweShjb3B5LT5kYXRhLCBtZW0tPmRhdGEgKyBtZW0tPmJhc2Uub2Zmc2V0ICsgb2Zmc2V0LCBh
bGxvY2F0aW9uU2l6ZSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEdzdE1l
bW9yeUZhc3RNYWxsb2MqIGdzdF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfbWVtX3NoYXJlKEdzdE1l
bW9yeUZhc3RNYWxsb2MqIG1lbSwgZ3NzaXplIG9mZnNldCwgZ3NpemUgc2l6ZSkKK3sKKyAgICBH
c3RNZW1vcnkqIHBhcmVudCA9IG1lbS0+YmFzZS5wYXJlbnQ7CisgICAgaWYgKCFwYXJlbnQpCisg
ICAgICAgIHBhcmVudCA9IEdTVF9NRU1PUllfQ0FTVChtZW0pOworCisgICAgaWYgKHNpemUgPT0g
c3RhdGljX2Nhc3Q8Z3NpemU+KC0xKSkKKyAgICAgICAgc2l6ZSA9IG1lbS0+YmFzZS5zaXplIC0g
b2Zmc2V0OworCisgICAgYXV0byogc2hhcmVkTWVtID0gcmVpbnRlcnByZXRfY2FzdDxHc3RNZW1v
cnlGYXN0TWFsbG9jKj4oZmFzdE1hbGxvYyhzaXplb2YoR3N0TWVtb3J5RmFzdE1hbGxvYykpKTsK
KyAgICBnc3RfbWVtb3J5X2luaXQoR1NUX01FTU9SWV9DQVNUKHNoYXJlZE1lbSksCisgICAgICAg
IHN0YXRpY19jYXN0PEdzdE1lbW9yeUZsYWdzPihHU1RfTUlOSV9PQkpFQ1RfRkxBR1MocGFyZW50
KSB8IEdTVF9NSU5JX09CSkVDVF9GTEFHX0xPQ0tfUkVBRE9OTFkpLAorICAgICAgICBtZW0tPmJh
c2UuYWxsb2NhdG9yLCBwYXJlbnQsIG1lbS0+YmFzZS5tYXhzaXplLCBtZW0tPmJhc2UuYWxpZ24s
CisgICAgICAgIG1lbS0+YmFzZS5vZmZzZXQgKyBvZmZzZXQsIHNpemUpOworCisgICAgc2hhcmVk
TWVtLT5kYXRhID0gbWVtLT5kYXRhOworCisgICAgcmV0dXJuIHNoYXJlZE1lbTsKK30KKworc3Rh
dGljIGdib29sZWFuIGdzdF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfbWVtX2lzX3NwYW4oR3N0TWVt
b3J5RmFzdE1hbGxvYyogbWVtMSwgR3N0TWVtb3J5RmFzdE1hbGxvYyogbWVtMiwgZ3NpemUqIG9m
ZnNldCkKK3sKKyAgICBpZiAob2Zmc2V0KSB7CisgICAgICAgIGF1dG8qIHBhcmVudCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8R3N0TWVtb3J5RmFzdE1hbGxvYyo+KG1lbTEtPmJhc2UucGFyZW50KTsKKyAg
ICAgICAgQVNTRVJUKHBhcmVudCk7CisgICAgICAgICpvZmZzZXQgPSBtZW0xLT5iYXNlLm9mZnNl
dCAtIHBhcmVudC0+YmFzZS5vZmZzZXQ7CisgICAgfQorCisgICAgcmV0dXJuIG1lbTEtPmRhdGEg
KyBtZW0xLT5iYXNlLm9mZnNldCArIG1lbTEtPmJhc2Uuc2l6ZSA9PSBtZW0yLT5kYXRhICsgbWVt
Mi0+YmFzZS5vZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGdzdF9hbGxvY2F0b3JfZmFzdF9tYWxs
b2NfZmluYWxpemUoR09iamVjdCopCit7Cit9CisKK3N0YXRpYyB2b2lkIGdzdF9hbGxvY2F0b3Jf
ZmFzdF9tYWxsb2NfY2xhc3NfaW5pdChHc3RBbGxvY2F0b3JGYXN0TWFsbG9jQ2xhc3MqIGtsYXNz
KQoreworICAgIGF1dG8qIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gZ3N0X2FsbG9jYXRvcl9mYXN0X21hbGxvY19maW5h
bGl6ZTsKKworICAgIGF1dG8qIGdzdEFsbG9jYXRvckNsYXNzID0gR1NUX0FMTE9DQVRPUl9DTEFT
UyhrbGFzcyk7CisgICAgZ3N0QWxsb2NhdG9yQ2xhc3MtPmFsbG9jID0gZ3N0X2FsbG9jYXRvcl9m
YXN0X21hbGxvY19hbGxvYzsKKyAgICBnc3RBbGxvY2F0b3JDbGFzcy0+ZnJlZSA9IGdzdF9hbGxv
Y2F0b3JfZmFzdF9tYWxsb2NfZnJlZTsKK30KKworc3RhdGljIHZvaWQgZ3N0X2FsbG9jYXRvcl9m
YXN0X21hbGxvY19pbml0KEdzdEFsbG9jYXRvckZhc3RNYWxsb2MqIGFsbG9jYXRvcikKK3sKKyAg
ICBHc3RBbGxvY2F0b3IqIGJhc2VBbGxvY2F0b3IgPSBHU1RfQUxMT0NBVE9SX0NBU1QoYWxsb2Nh
dG9yKTsKKworICAgIGJhc2VBbGxvY2F0b3ItPm1lbV90eXBlID0gIkZhc3RNYWxsb2MiOworICAg
IGJhc2VBbGxvY2F0b3ItPm1lbV9tYXAgPSByZWludGVycHJldF9jYXN0PEdzdE1lbW9yeU1hcEZ1
bmN0aW9uPihnc3RfYWxsb2NhdG9yX2Zhc3RfbWFsbG9jX21lbV9tYXApOworICAgIGJhc2VBbGxv
Y2F0b3ItPm1lbV91bm1hcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWVtb3J5VW5tYXBGdW5jdGlv
bj4oZ3N0X2FsbG9jYXRvcl9mYXN0X21hbGxvY19tZW1fdW5tYXApOworICAgIGJhc2VBbGxvY2F0
b3ItPm1lbV9jb3B5ID0gcmVpbnRlcnByZXRfY2FzdDxHc3RNZW1vcnlDb3B5RnVuY3Rpb24+KGdz
dF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfbWVtX2NvcHkpOworICAgIGJhc2VBbGxvY2F0b3ItPm1l
bV9zaGFyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWVtb3J5U2hhcmVGdW5jdGlvbj4oZ3N0X2Fs
bG9jYXRvcl9mYXN0X21hbGxvY19tZW1fc2hhcmUpOworICAgIGJhc2VBbGxvY2F0b3ItPm1lbV9p
c19zcGFuID0gcmVpbnRlcnByZXRfY2FzdDxHc3RNZW1vcnlJc1NwYW5GdW5jdGlvbj4oZ3N0X2Fs
bG9jYXRvcl9mYXN0X21hbGxvY19tZW1faXNfc3Bhbik7Cit9CisKKyNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dzdEFsbG9jYXRvckZhc3RNYWxsb2MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFlZjJjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RBbGxvY2F0b3JGYXN0TWFs
bG9jLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlh
IFMuTAorICogIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NU
UkVBTUVSKQorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAg
R3N0TWVtb3J5IGJhc2U7CisKKyAgICBndWludDgqIGRhdGE7Cit9IEdzdE1lbW9yeUZhc3RNYWxs
b2M7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBHc3RBbGxvY2F0b3IgcGFyZW50OworfSBHc3RB
bGxvY2F0b3JGYXN0TWFsbG9jOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR3N0QWxsb2NhdG9y
Q2xhc3MgcGFyZW50OworfSBHc3RBbGxvY2F0b3JGYXN0TWFsbG9jQ2xhc3M7CisKK0dUeXBlIGdz
dF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfZ2V0X3R5cGUoKSBHX0dOVUNfQ09OU1Q7CisKKyNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297004</attachid>
            <date>2016-12-13 04:46:01 -0800</date>
            <delta_ts>2018-01-05 03:17:33 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>gstallocator.patch</filename>
            <type>text/plain</type>
            <size>9815</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCA3NmRlMDg1Li5lNzhh
MmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0zMSw2ICsz
MSw3IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5j
cHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdEFsbG9jYXRvckZhc3RN
YWxsb2MuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3Ry
ZWFtZXJVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKaW5kZXggNzZjMDNlZC4uMzcxMmVmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJl
YW1lclV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNs
dWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJHc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmgiCiAjaW5jbHVkZSAiSW50U2l6
ZS5oIgogCiAjaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLWluZm8uaD4KQEAgLTE1MCw2ICsxNTEs
OCBAQCBib29sIGluaXRpYWxpemVHU3RyZWFtZXIoKQogICAgIGlmIChnc3RfaXNfaW5pdGlhbGl6
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKKyAgICBnc3RfYWxsb2NhdG9yX3NldF9kZWZh
dWx0KEdTVF9BTExPQ0FUT1IoZ19vYmplY3RfbmV3KGdzdF9hbGxvY2F0b3JfZmFzdF9tYWxsb2Nf
Z2V0X3R5cGUoKSwgbnVsbHB0cikpKTsKKwogICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJv
cjsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IHBhc3MgdGhlIGFyZ3VtZW50cyBm
cm9tIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgYm9vbCBnc3RJbml0aWFsaXplZCA9IGdzdF9pbml0
X2NoZWNrKDAsIDAsICZlcnJvci5vdXRQdHIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9y
RmFzdE1hbGxvYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYzOTQx
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9Hc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmNwcApAQCAtMCwwICsxLDE2MSBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICogIENvcHlyaWdodCAoQykgMjAx
NiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdzdEFsbG9jYXRvckZhc3RNYWxsb2Mu
aCIKKworI2lmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisKKyNkZWZpbmUgV0VCS0lUX0lTX1ZJREVPX1NJTksob2JqKSAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1ZJREVPX1NJTksp
KQorCitHX0RFRklORV9UWVBFKEdzdEFsbG9jYXRvckZhc3RNYWxsb2MsIGdzdF9hbGxvY2F0b3Jf
ZmFzdF9tYWxsb2MsIEdTVF9UWVBFX0FMTE9DQVRPUik7CisKK3N0YXRpYyBHc3RNZW1vcnkqIGdz
dF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfYWxsb2MoR3N0QWxsb2NhdG9yKiBhbGxvY2F0b3IsIGdz
aXplIHNpemUsIEdzdEFsbG9jYXRpb25QYXJhbXMqIHBhcmFtcykKK3sKKyAgICBBU1NFUlQoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoYWxsb2NhdG9yLCBnc3RfYWxsb2NhdG9yX2Zhc3RfbWFs
bG9jX2dldF90eXBlKCkpKTsKKworICAgIC8vIGFsaWdubWVudCBzaG91bGQgYmUgYSAocG93ZXIt
b2YtdHdvIC0gMSkuCisgICAgZ3NpemUgYWxpZ25tZW50ID0gcGFyYW1zLT5hbGlnbiB8IGdzdF9t
ZW1vcnlfYWxpZ25tZW50OworICAgIEFTU0VSVCghKChhbGlnbm1lbnQgKyAxKSAmIGFsaWdubWVu
dCkpOworCisgICAgZ3NpemUgaGVhZGVyU2l6ZSA9IChzaXplb2YoR3N0TWVtb3J5RmFzdE1hbGxv
YykgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudDsKKyAgICBnc2l6ZSBhbGxvY2F0aW9uU2l6ZSA9
IHBhcmFtcy0+cHJlZml4ICsgc2l6ZSArIHBhcmFtcy0+cGFkZGluZzsKKworICAgIEdzdE1lbW9y
eUZhc3RNYWxsb2MqIG1lbSA9IHN0YXRpY19jYXN0PEdzdE1lbW9yeUZhc3RNYWxsb2MqPihmYXN0
QWxpZ25lZE1hbGxvYyhhbGlnbm1lbnQgKyAxLCBoZWFkZXJTaXplICsgYWxsb2NhdGlvblNpemUp
KTsKKyAgICBpZiAoIW1lbSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBtZW0tPmRh
dGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtZW0pICsgaGVhZGVyU2l6ZTsKKworICAg
IGlmIChwYXJhbXMtPnByZWZpeCAmJiAocGFyYW1zLT5mbGFncyAmIEdTVF9NRU1PUllfRkxBR19a
RVJPX1BSRUZJWEVEKSkKKyAgICAgICAgc3RkOjptZW1zZXQobWVtLT5kYXRhLCAwLCBwYXJhbXMt
PnByZWZpeCk7CisgICAgaWYgKHBhcmFtcy0+cGFkZGluZyAmJiAocGFyYW1zLT5mbGFncyAmIEdT
VF9NRU1PUllfRkxBR19aRVJPX1BBRERFRCkpCisgICAgICAgIHN0ZDo6bWVtc2V0KG1lbS0+ZGF0
YSArIHBhcmFtcy0+cHJlZml4ICsgc2l6ZSwgMCwgcGFyYW1zLT5wYWRkaW5nKTsKKworICAgIGdz
dF9tZW1vcnlfaW5pdChHU1RfTUVNT1JZX0NBU1QobWVtKSwgcGFyYW1zLT5mbGFncywgYWxsb2Nh
dG9yLCBudWxscHRyLAorICAgICAgICBhbGxvY2F0aW9uU2l6ZSwgYWxpZ25tZW50LCBwYXJhbXMt
PnByZWZpeCwgc2l6ZSk7CisKKyAgICByZXR1cm4gR1NUX01FTU9SWV9DQVNUKG1lbSk7Cit9CisK
K3N0YXRpYyB2b2lkIGdzdF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfZnJlZShHc3RBbGxvY2F0b3Iq
LCBHc3RNZW1vcnkqIG1lbSkKK3sKKyAgICBBU1NFUlQoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoYWxsb2NhdG9yLCBnc3RfYWxsb2NhdG9yX2Zhc3RfbWFsbG9jX2dldF90eXBlKCkpKTsKKwor
ICAgIGZhc3RGcmVlKG1lbSk7Cit9CisKK3N0YXRpYyBncG9pbnRlciBnc3RfYWxsb2NhdG9yX2Zh
c3RfbWFsbG9jX21lbV9tYXAoR3N0TWVtb3J5RmFzdE1hbGxvYyogbWVtLCBnc2l6ZSwgR3N0TWFw
RmxhZ3MpCit7CisgICAgcmV0dXJuIG1lbS0+ZGF0YTsKK30KKworc3RhdGljIGdib29sZWFuIGdz
dF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfbWVtX3VubWFwKEdzdE1lbW9yeUZhc3RNYWxsb2MqKQor
eworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgR3N0TWVtb3J5RmFzdE1hbGxvYyogZ3N0
X2FsbG9jYXRvcl9mYXN0X21hbGxvY19tZW1fY29weShHc3RNZW1vcnlGYXN0TWFsbG9jKiBtZW0s
IGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgICAgZ3NpemUgYWxpZ25tZW50ID0gbWVt
LT5iYXNlLmFsaWduIHwgZ3N0X21lbW9yeV9hbGlnbm1lbnQ7CisgICAgQVNTRVJUKCEoKGFsaWdu
bWVudCArIDEpICYgYWxpZ25tZW50KSk7CisKKyAgICBnc2l6ZSBoZWFkZXJTaXplID0gKHNpemVv
ZihHc3RNZW1vcnlGYXN0TWFsbG9jKSArIGFsaWdubWVudCkgJiB+YWxpZ25tZW50OworCisgICAg
Z3NpemUgYWxsb2NhdGlvblNpemUgPSBzaXplOworICAgIGlmIChhbGxvY2F0aW9uU2l6ZSA9PSBz
dGF0aWNfY2FzdDxnc2l6ZT4oLTEpKSB7CisgICAgICAgIGFsbG9jYXRpb25TaXplID0gMDsKKyAg
ICAgICAgaWYgKG9mZnNldCA8IDAgfHwgKG1lbS0+YmFzZS5zaXplID4gc3RhdGljX2Nhc3Q8Z3Np
emU+KG9mZnNldCkpKQorICAgICAgICAgICAgYWxsb2NhdGlvblNpemUgPSBtZW0tPmJhc2Uuc2l6
ZSAtIG9mZnNldDsKKyAgICB9CisKKyAgICBHc3RNZW1vcnlGYXN0TWFsbG9jKiBjb3B5ID0gc3Rh
dGljX2Nhc3Q8R3N0TWVtb3J5RmFzdE1hbGxvYyo+KGZhc3RBbGlnbmVkTWFsbG9jKGFsaWdubWVu
dCArIDEsIGhlYWRlclNpemUgKyBhbGxvY2F0aW9uU2l6ZSkpOworICAgIGlmICghY29weSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBnc3RfbWVtb3J5X2luaXQoR1NUX01FTU9SWV9D
QVNUKGNvcHkpLCBzdGF0aWNfY2FzdDxHc3RNZW1vcnlGbGFncz4oMCksCisgICAgICAgIG1lbS0+
YmFzZS5hbGxvY2F0b3IsIG51bGxwdHIsIGFsbG9jYXRpb25TaXplLCBhbGlnbm1lbnQsIDAsIGFs
bG9jYXRpb25TaXplKTsKKworICAgIGNvcHktPmRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihjb3B5KSArIGhlYWRlclNpemU7CisgICAgc3RkOjptZW1jcHkoY29weS0+ZGF0YSwgbWVt
LT5kYXRhICsgbWVtLT5iYXNlLm9mZnNldCArIG9mZnNldCwgYWxsb2NhdGlvblNpemUpOworCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBHc3RNZW1vcnlGYXN0TWFsbG9jKiBnc3Rf
YWxsb2NhdG9yX2Zhc3RfbWFsbG9jX21lbV9zaGFyZShHc3RNZW1vcnlGYXN0TWFsbG9jKiBtZW0s
IGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgICAgR3N0TWVtb3J5KiBwYXJlbnQgPSBt
ZW0tPmJhc2UucGFyZW50OworICAgIGlmICghcGFyZW50KQorICAgICAgICBwYXJlbnQgPSBHU1Rf
TUVNT1JZX0NBU1QobWVtKTsKKworICAgIGlmIChzaXplID09IHN0YXRpY19jYXN0PGdzaXplPigt
MSkpCisgICAgICAgIHNpemUgPSBtZW0tPmJhc2Uuc2l6ZSAtIG9mZnNldDsKKworICAgIEdzdE1l
bW9yeUZhc3RNYWxsb2MqIHNoYXJlZE1lbSA9IHN0YXRpY19jYXN0PEdzdE1lbW9yeUZhc3RNYWxs
b2MqPihmYXN0TWFsbG9jKHNpemVvZihHc3RNZW1vcnlGYXN0TWFsbG9jKSkpOworICAgIGdzdF9t
ZW1vcnlfaW5pdChHU1RfTUVNT1JZX0NBU1Qoc2hhcmVkTWVtKSwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8R3N0TWVtb3J5RmxhZ3M+KEdTVF9NSU5JX09CSkVDVF9GTEFHUyhwYXJlbnQpIHwgR1NUX01J
TklfT0JKRUNUX0ZMQUdfTE9DS19SRUFET05MWSksCisgICAgICAgIG1lbS0+YmFzZS5hbGxvY2F0
b3IsIHBhcmVudCwgbWVtLT5iYXNlLm1heHNpemUsIG1lbS0+YmFzZS5hbGlnbiwKKyAgICAgICAg
bWVtLT5iYXNlLm9mZnNldCArIG9mZnNldCwgc2l6ZSk7CisKKyAgICBzaGFyZWRNZW0tPmRhdGEg
PSBtZW0tPmRhdGE7CisKKyAgICByZXR1cm4gc2hhcmVkTWVtOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gZ3N0X2FsbG9jYXRvcl9mYXN0X21hbGxvY19tZW1faXNfc3BhbihHc3RNZW1vcnlGYXN0TWFs
bG9jKiBtZW0xLCBHc3RNZW1vcnlGYXN0TWFsbG9jKiBtZW0yLCBnc2l6ZSogb2Zmc2V0KQorewor
ICAgIGlmIChvZmZzZXQpIHsKKyAgICAgICAgYXV0byogcGFyZW50ID0gcmVpbnRlcnByZXRfY2Fz
dDxHc3RNZW1vcnlGYXN0TWFsbG9jKj4obWVtMS0+YmFzZS5wYXJlbnQpOworICAgICAgICBBU1NF
UlQocGFyZW50KTsKKyAgICAgICAgKm9mZnNldCA9IG1lbTEtPmJhc2Uub2Zmc2V0IC0gcGFyZW50
LT5iYXNlLm9mZnNldDsKKyAgICB9CisKKyAgICByZXR1cm4gbWVtMS0+ZGF0YSArIG1lbTEtPmJh
c2Uub2Zmc2V0ICsgbWVtMS0+YmFzZS5zaXplID09IG1lbTItPmRhdGEgKyBtZW0yLT5iYXNlLm9m
ZnNldDsKK30KKworc3RhdGljIHZvaWQgZ3N0X2FsbG9jYXRvcl9mYXN0X21hbGxvY19maW5hbGl6
ZShHT2JqZWN0KikKK3sKK30KKworc3RhdGljIHZvaWQgZ3N0X2FsbG9jYXRvcl9mYXN0X21hbGxv
Y19jbGFzc19pbml0KEdzdEFsbG9jYXRvckZhc3RNYWxsb2NDbGFzcyoga2xhc3MpCit7CisgICAg
YXV0byogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIGdvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSBnc3RfYWxsb2NhdG9yX2Zhc3RfbWFsbG9jX2ZpbmFsaXplOworCisg
ICAgYXV0byogZ3N0QWxsb2NhdG9yQ2xhc3MgPSBHU1RfQUxMT0NBVE9SX0NMQVNTKGtsYXNzKTsK
KyAgICBnc3RBbGxvY2F0b3JDbGFzcy0+YWxsb2MgPSBnc3RfYWxsb2NhdG9yX2Zhc3RfbWFsbG9j
X2FsbG9jOworICAgIGdzdEFsbG9jYXRvckNsYXNzLT5mcmVlID0gZ3N0X2FsbG9jYXRvcl9mYXN0
X21hbGxvY19mcmVlOworfQorCitzdGF0aWMgdm9pZCBnc3RfYWxsb2NhdG9yX2Zhc3RfbWFsbG9j
X2luaXQoR3N0QWxsb2NhdG9yRmFzdE1hbGxvYyogYWxsb2NhdG9yKQoreworICAgIEdzdEFsbG9j
YXRvciogYmFzZUFsbG9jYXRvciA9IEdTVF9BTExPQ0FUT1JfQ0FTVChhbGxvY2F0b3IpOworCisg
ICAgYmFzZUFsbG9jYXRvci0+bWVtX3R5cGUgPSAiRmFzdE1hbGxvYyI7CisgICAgYmFzZUFsbG9j
YXRvci0+bWVtX21hcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWVtb3J5TWFwRnVuY3Rpb24+KGdz
dF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfbWVtX21hcCk7CisgICAgYmFzZUFsbG9jYXRvci0+bWVt
X3VubWFwID0gcmVpbnRlcnByZXRfY2FzdDxHc3RNZW1vcnlVbm1hcEZ1bmN0aW9uPihnc3RfYWxs
b2NhdG9yX2Zhc3RfbWFsbG9jX21lbV91bm1hcCk7CisgICAgYmFzZUFsbG9jYXRvci0+bWVtX2Nv
cHkgPSByZWludGVycHJldF9jYXN0PEdzdE1lbW9yeUNvcHlGdW5jdGlvbj4oZ3N0X2FsbG9jYXRv
cl9mYXN0X21hbGxvY19tZW1fY29weSk7CisgICAgYmFzZUFsbG9jYXRvci0+bWVtX3NoYXJlID0g
cmVpbnRlcnByZXRfY2FzdDxHc3RNZW1vcnlTaGFyZUZ1bmN0aW9uPihnc3RfYWxsb2NhdG9yX2Zh
c3RfbWFsbG9jX21lbV9zaGFyZSk7CisgICAgYmFzZUFsbG9jYXRvci0+bWVtX2lzX3NwYW4gPSBy
ZWludGVycHJldF9jYXN0PEdzdE1lbW9yeUlzU3BhbkZ1bmN0aW9uPihnc3RfYWxsb2NhdG9yX2Zh
c3RfbWFsbG9jX21lbV9pc19zcGFuKTsKK30KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0
QWxsb2NhdG9yRmFzdE1hbGxvYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dzdEFsbG9jYXRvckZhc3RNYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40MzAyOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdEFsbG9jYXRvckZhc3RNYWxsb2MuaApAQCAt
MCwwICsxLDQyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKiAg
Q29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVIpCisK
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBHc3RNZW1vcnkg
YmFzZTsKKworICAgIHVpbnQ4X3QqIGRhdGE7Cit9IEdzdE1lbW9yeUZhc3RNYWxsb2M7CisKK3R5
cGVkZWYgc3RydWN0IHsKKyAgICBHc3RBbGxvY2F0b3IgcGFyZW50OworfSBHc3RBbGxvY2F0b3JG
YXN0TWFsbG9jOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR3N0QWxsb2NhdG9yQ2xhc3MgcGFy
ZW50OworfSBHc3RBbGxvY2F0b3JGYXN0TWFsbG9jQ2xhc3M7CisKK0dUeXBlIGdzdF9hbGxvY2F0
b3JfZmFzdF9tYWxsb2NfZ2V0X3R5cGUoKSBHX0dOVUNfQ09OU1Q7CisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330544</attachid>
            <date>2018-01-05 03:17:33 -0800</date>
            <delta_ts>2018-01-05 05:54:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-gst-fastmalloc.diff</filename>
            <type>text/plain</type>
            <size>10931</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMGZlMTRmMzQwOS4uYmE4ZTVjOTQ0NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxOC0wMS0wNSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+IGFuZCBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1N0cmVhbWVyXSB1c2UgRmFzdE1hbGxvYy1iYXNlZCBHc3RBbGxvY2F0b3IKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTc5MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBHc3RBbGxvY2F0
b3JGYXN0TWFsbG9jLCBhIEdzdEFsbG9jYXRvciBpbXBsZW1lbnRhdGlvbiB1c2luZyBmYXN0IG1h
bGxvYy4gSXQncyBvbmx5IHVzZWQgd2hlbiBmYXN0IG1hbGxvYyBpcworICAgICAgICBlbmFibGVk
IGFuZCBjYW4gYmUgZGlzYWJsZWQgdXNpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGRl
YnVnZ2luZyBwdXJwb3Nlcy4KKworICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVXRpbGl0aWVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVHU3RyZWFtZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmNwcDog
QWRkZWQuCisgICAgICAgIChnc3RNZW1vcnlGYXN0TWFsbG9jTmV3KToKKyAgICAgICAgKGdzdEFs
bG9jYXRvckZhc3RNYWxsb2NBbGxvYyk6CisgICAgICAgIChnc3RBbGxvY2F0b3JGYXN0TWFsbG9j
RnJlZSk6CisgICAgICAgIChnc3RBbGxvY2F0b3JGYXN0TWFsbG9jTWVtTWFwKToKKyAgICAgICAg
KGdzdEFsbG9jYXRvckZhc3RNYWxsb2NNZW1Vbm1hcCk6CisgICAgICAgIChnc3RBbGxvY2F0b3JG
YXN0TWFsbG9jTWVtQ29weSk6CisgICAgICAgIChnc3RBbGxvY2F0b3JGYXN0TWFsbG9jTWVtU2hh
cmUpOgorICAgICAgICAoZ3N0QWxsb2NhdG9yRmFzdE1hbGxvY01lbUlzU3Bhbik6CisgICAgICAg
IChnc3RfYWxsb2NhdG9yX2Zhc3RfbWFsbG9jX2NsYXNzX2luaXQpOgorICAgICAgICAoZ3N0X2Fs
bG9jYXRvcl9mYXN0X21hbGxvY19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5oOiBBZGRlZC4KKwogMjAxOC0wMS0wNSAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NP
VVBdIFdlYlNvY2tldHMgbXVzdCB1c2Ugc3lzdGVtIHByb3h5IHNldHRpbmdzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggOGVlODM3MzliMTAuLmUxZWMyMzNkMGI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC05LDYgKzksNyBA
QCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJVdGlsaXRpZXMuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9Hc3RBbGxvY2F0b3JGYXN0TWFsbG9j
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJVdGlsaXRpZXMuY3BwCmluZGV4IDVkMmJjMjU1YTlmLi40NzYyYWU4ODU1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lclV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dTdHJlYW1lclV0aWxpdGllcy5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNp
bmNsdWRlICJHU3RyZWFtZXJVdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJHc3RBbGxvY2F0b3JGYXN0TWFsbG9jLmgiCiAjaW5jbHVkZSAiSW50
U2l6ZS5oIgogCiAjaW5jbHVkZSA8Z3N0L2F1ZGlvL2F1ZGlvLWluZm8uaD4KQEAgLTE1NCw2ICsx
NTUsMTIgQEAgYm9vbCBpbml0aWFsaXplR1N0cmVhbWVyKCkKICAgICBib29sIGdzdEluaXRpYWxp
emVkID0gZ3N0X2luaXRfY2hlY2sobnVsbHB0ciwgbnVsbHB0ciwgJmVycm9yLm91dFB0cigpKTsK
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGdzdEluaXRpYWxpemVkLCAiR1N0cmVhbWVyIGluaXRp
YWxpemF0aW9uIGZhaWxlZDogJXMiLCBlcnJvciA/IGVycm9yLT5tZXNzYWdlIDogInVua25vd24g
ZXJyb3Igb2NjdXJyZWQiKTsKIAorICAgIGlmIChpc0Zhc3RNYWxsb2NFbmFibGVkKCkpIHsKKyAg
ICAgICAgY29uc3QgY2hhciogZGlzYWJsZUZhc3RNYWxsb2MgPSBnZXRlbnYoIldFQktJVF9HU1Rf
RElTQUJMRV9GQVNUX01BTExPQyIpOworICAgICAgICBpZiAoIWRpc2FibGVGYXN0TWFsbG9jIHx8
ICFzdHJjbXAoZGlzYWJsZUZhc3RNYWxsb2MsICIwIikpCisgICAgICAgICAgICBnc3RfYWxsb2Nh
dG9yX3NldF9kZWZhdWx0KEdTVF9BTExPQ0FUT1IoZ19vYmplY3RfbmV3KGdzdF9hbGxvY2F0b3Jf
ZmFzdF9tYWxsb2NfZ2V0X3R5cGUoKSwgbnVsbHB0cikpKTsKKyAgICB9CisKICNpZiBFTkFCTEUo
VklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQogICAgIGlmIChnc3RJbml0aWFs
aXplZCkKICAgICAgICAgZ3N0X21wZWd0c19pbml0aWFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1h
bGxvYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0
QWxsb2NhdG9yRmFzdE1hbGxvYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjZiY2EyYzliY2FhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdEFsbG9jYXRvckZhc3RNYWxsb2MuY3BwCkBAIC0w
LDAgKzEsMTU1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOCBJZ2FsaWEgUy5MCisgKiAg
Q29weXJpZ2h0IChDKSAyMDE4IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3N0QWxs
b2NhdG9yRmFzdE1hbGxvYy5oIgorCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBHc3RNZW1vcnkgYmFzZTsK
KworICAgIHVpbnQ4X3QqIGRhdGE7Cit9IEdzdE1lbW9yeUZhc3RNYWxsb2M7CisKK3R5cGVkZWYg
c3RydWN0IHsKKyAgICBHc3RBbGxvY2F0b3IgcGFyZW50OworfSBHc3RBbGxvY2F0b3JGYXN0TWFs
bG9jOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR3N0QWxsb2NhdG9yQ2xhc3MgcGFyZW50Owor
fSBHc3RBbGxvY2F0b3JGYXN0TWFsbG9jQ2xhc3M7CisKK0dfREVGSU5FX1RZUEUoR3N0QWxsb2Nh
dG9yRmFzdE1hbGxvYywgZ3N0X2FsbG9jYXRvcl9mYXN0X21hbGxvYywgR1NUX1RZUEVfQUxMT0NB
VE9SKQorCitzdGF0aWMgR3N0TWVtb3J5RmFzdE1hbGxvYyogZ3N0TWVtb3J5RmFzdE1hbGxvY05l
dyhHc3RBbGxvY2F0b3IqIGFsbG9jYXRvciwgZ3NpemUgc2l6ZSwgZ3NpemUgYWxpZ25tZW50LCBn
c2l6ZSBvZmZzZXQsIGdzaXplIHBhZGRpbmcsIEdzdE1lbW9yeUZsYWdzIGZsYWdzKQoreworICAg
IC8vIGFsaWdubWVudCBzaG91bGQgYmUgYSAocG93ZXItb2YtdHdvIC0gMSkuCisgICAgYWxpZ25t
ZW50IHw9IGdzdF9tZW1vcnlfYWxpZ25tZW50OworICAgIEFTU0VSVCghKChhbGlnbm1lbnQgKyAx
KSAmIGFsaWdubWVudCkpOworCisgICAgZ3NpemUgaGVhZGVyU2l6ZSA9IChzaXplb2YoR3N0TWVt
b3J5RmFzdE1hbGxvYykgKyBhbGlnbm1lbnQpICYgfmFsaWdubWVudDsKKyAgICBnc2l6ZSBhbGxv
Y2F0aW9uU2l6ZSA9IG9mZnNldCArIHNpemUgKyBwYWRkaW5nOworICAgIGF1dG8qIG1lbW9yeSA9
IHN0YXRpY19jYXN0PEdzdE1lbW9yeUZhc3RNYWxsb2MqPih0cnlGYXN0QWxpZ25lZE1hbGxvYyhh
bGlnbm1lbnQgKyAxLCBoZWFkZXJTaXplICsgYWxsb2NhdGlvblNpemUpKTsKKyAgICBpZiAoIW1l
bW9yeSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBtZW1vcnktPmRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihtZW1vcnkpICsgaGVhZGVyU2l6ZTsKKworICAgIGlmIChv
ZmZzZXQgJiYgKGZsYWdzICYgR1NUX01FTU9SWV9GTEFHX1pFUk9fUFJFRklYRUQpKQorICAgICAg
ICBzdGQ6Om1lbXNldChtZW1vcnktPmRhdGEsIDAsIG9mZnNldCk7CisgICAgaWYgKHBhZGRpbmcg
JiYgKGZsYWdzICYgR1NUX01FTU9SWV9GTEFHX1pFUk9fUEFEREVEKSkKKyAgICAgICAgc3RkOjpt
ZW1zZXQobWVtb3J5LT5kYXRhICsgb2Zmc2V0ICsgc2l6ZSwgMCwgcGFkZGluZyk7CisKKyAgICBn
c3RfbWVtb3J5X2luaXQoR1NUX01FTU9SWV9DQVNUKG1lbW9yeSksIGZsYWdzLCBhbGxvY2F0b3Is
IG51bGxwdHIsIGFsbG9jYXRpb25TaXplLCBhbGlnbm1lbnQsIG9mZnNldCwgc2l6ZSk7CisKKyAg
ICByZXR1cm4gbWVtb3J5OworfQorCitzdGF0aWMgR3N0TWVtb3J5KiBnc3RBbGxvY2F0b3JGYXN0
TWFsbG9jQWxsb2MoR3N0QWxsb2NhdG9yKiBhbGxvY2F0b3IsIGdzaXplIHNpemUsIEdzdEFsbG9j
YXRpb25QYXJhbXMqIHBhcmFtcykKK3sKKyAgICBBU1NFUlQoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoYWxsb2NhdG9yLCBnc3RfYWxsb2NhdG9yX2Zhc3RfbWFsbG9jX2dldF90eXBlKCkpKTsK
KworICAgIHJldHVybiBHU1RfTUVNT1JZX0NBU1QoZ3N0TWVtb3J5RmFzdE1hbGxvY05ldyhhbGxv
Y2F0b3IsIHNpemUsIHBhcmFtcy0+YWxpZ24sIHBhcmFtcy0+cHJlZml4LCBwYXJhbXMtPnBhZGRp
bmcsIHBhcmFtcy0+ZmxhZ3MpKTsKK30KKworc3RhdGljIHZvaWQgZ3N0QWxsb2NhdG9yRmFzdE1h
bGxvY0ZyZWUoR3N0QWxsb2NhdG9yKiBhbGxvY2F0b3IsIEdzdE1lbW9yeSogbWVtb3J5KQorewor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBBU1NFUlQoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoYWxsb2NhdG9yLCBnc3RfYWxsb2NhdG9yX2Zhc3RfbWFsbG9jX2dldF90eXBlKCkpKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGFsbG9jYXRvcik7CisjZW5kaWYKKworICAgIGZhc3RBbGln
bmVkRnJlZShtZW1vcnkpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgZ3N0QWxsb2NhdG9yRmFzdE1h
bGxvY01lbU1hcChHc3RNZW1vcnlGYXN0TWFsbG9jKiBtZW1vcnksIGdzaXplLCBHc3RNYXBGbGFn
cykKK3sKKyAgICByZXR1cm4gbWVtb3J5LT5kYXRhOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gZ3N0
QWxsb2NhdG9yRmFzdE1hbGxvY01lbVVubWFwKEdzdE1lbW9yeUZhc3RNYWxsb2MqKQoreworICAg
IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgR3N0TWVtb3J5RmFzdE1hbGxvYyogZ3N0QWxsb2Nh
dG9yRmFzdE1hbGxvY01lbUNvcHkoR3N0TWVtb3J5RmFzdE1hbGxvYyogbWVtb3J5LCBnc3NpemUg
b2Zmc2V0LCBnc2l6ZSBzaXplKQoreworICAgIGlmIChzaXplID09IHN0YXRpY19jYXN0PGdzaXpl
PigtMSkpCisgICAgICAgIHNpemUgPSBtZW1vcnktPmJhc2Uuc2l6ZSA+IHN0YXRpY19jYXN0PGdz
aXplPihvZmZzZXQpID8gbWVtb3J5LT5iYXNlLnNpemUgLSBvZmZzZXQgOiAwOworCisgICAgYXV0
byogY29weSA9IGdzdE1lbW9yeUZhc3RNYWxsb2NOZXcobWVtb3J5LT5iYXNlLmFsbG9jYXRvciwg
c2l6ZSwgbWVtb3J5LT5iYXNlLmFsaWduLCAwLCAwLCBzdGF0aWNfY2FzdDxHc3RNZW1vcnlGbGFn
cz4oMCkpOworICAgIGlmICghY29weSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBz
dGQ6Om1lbWNweShjb3B5LT5kYXRhLCBtZW1vcnktPmRhdGEgKyBtZW1vcnktPmJhc2Uub2Zmc2V0
ICsgb2Zmc2V0LCBzaXplKTsKKyAgICByZXR1cm4gY29weTsKK30KKworc3RhdGljIEdzdE1lbW9y
eUZhc3RNYWxsb2MqIGdzdEFsbG9jYXRvckZhc3RNYWxsb2NNZW1TaGFyZShHc3RNZW1vcnlGYXN0
TWFsbG9jKiBtZW1vcnksIGdzc2l6ZSBvZmZzZXQsIGdzaXplIHNpemUpCit7CisgICAgR3N0TWVt
b3J5RmFzdE1hbGxvYyogc2hhcmVkTWVtb3J5OworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhzaXpl
b2YoR3N0TWVtb3J5RmFzdE1hbGxvYykpLmdldFZhbHVlKHNoYXJlZE1lbW9yeSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgc2hhcmVkTWVtb3J5LT5kYXRhID0gbWVtb3J5LT5kYXRh
OworCisgICAgaWYgKHNpemUgPT0gc3RhdGljX2Nhc3Q8Z3NpemU+KC0xKSkKKyAgICAgICAgc2l6
ZSA9IG1lbW9yeS0+YmFzZS5zaXplIC0gb2Zmc2V0OworCisgICAgYXV0byogcGFyZW50ID0gbWVt
b3J5LT5iYXNlLnBhcmVudCA/IG1lbW9yeS0+YmFzZS5wYXJlbnQgOiBHU1RfTUVNT1JZX0NBU1Qo
bWVtb3J5KTsKKyAgICBnc3RfbWVtb3J5X2luaXQoR1NUX01FTU9SWV9DQVNUKHNoYXJlZE1lbW9y
eSksCisgICAgICAgIHN0YXRpY19jYXN0PEdzdE1lbW9yeUZsYWdzPihHU1RfTUlOSV9PQkpFQ1Rf
RkxBR1MocGFyZW50KSB8IEdTVF9NSU5JX09CSkVDVF9GTEFHX0xPQ0tfUkVBRE9OTFkpLAorICAg
ICAgICBtZW1vcnktPmJhc2UuYWxsb2NhdG9yLCBwYXJlbnQsIG1lbW9yeS0+YmFzZS5tYXhzaXpl
LCBtZW1vcnktPmJhc2UuYWxpZ24sCisgICAgICAgIG1lbW9yeS0+YmFzZS5vZmZzZXQgKyBvZmZz
ZXQsIHNpemUpOworCisgICAgcmV0dXJuIHNoYXJlZE1lbW9yeTsKK30KKworc3RhdGljIGdib29s
ZWFuIGdzdEFsbG9jYXRvckZhc3RNYWxsb2NNZW1Jc1NwYW4oR3N0TWVtb3J5RmFzdE1hbGxvYyog
bWVtb3J5LCBHc3RNZW1vcnlGYXN0TWFsbG9jKiBvdGhlciwgZ3NpemUqIG9mZnNldCkKK3sKKyAg
ICBpZiAob2Zmc2V0KSB7CisgICAgICAgIGF1dG8qIHBhcmVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0TWVtb3J5RmFzdE1hbGxvYyo+KG1lbW9yeS0+YmFzZS5wYXJlbnQpOworICAgICAgICBBU1NF
UlQocGFyZW50KTsKKyAgICAgICAgKm9mZnNldCA9IG1lbW9yeS0+YmFzZS5vZmZzZXQgLSBwYXJl
bnQtPmJhc2Uub2Zmc2V0OworICAgIH0KKworICAgIHJldHVybiBtZW1vcnktPmRhdGEgKyBtZW1v
cnktPmJhc2Uub2Zmc2V0ICsgbWVtb3J5LT5iYXNlLnNpemUgPT0gb3RoZXItPmRhdGEgKyBvdGhl
ci0+YmFzZS5vZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGdzdF9hbGxvY2F0b3JfZmFzdF9tYWxs
b2NfY2xhc3NfaW5pdChHc3RBbGxvY2F0b3JGYXN0TWFsbG9jQ2xhc3MqIGtsYXNzKQoreworICAg
IGF1dG8qIGdzdEFsbG9jYXRvckNsYXNzID0gR1NUX0FMTE9DQVRPUl9DTEFTUyhrbGFzcyk7Cisg
ICAgZ3N0QWxsb2NhdG9yQ2xhc3MtPmFsbG9jID0gZ3N0QWxsb2NhdG9yRmFzdE1hbGxvY0FsbG9j
OworICAgIGdzdEFsbG9jYXRvckNsYXNzLT5mcmVlID0gZ3N0QWxsb2NhdG9yRmFzdE1hbGxvY0Zy
ZWU7Cit9CisKK3N0YXRpYyB2b2lkIGdzdF9hbGxvY2F0b3JfZmFzdF9tYWxsb2NfaW5pdChHc3RB
bGxvY2F0b3JGYXN0TWFsbG9jKiBhbGxvY2F0b3IpCit7CisgICAgYXV0byogYmFzZUFsbG9jYXRv
ciA9IEdTVF9BTExPQ0FUT1JfQ0FTVChhbGxvY2F0b3IpOworCisgICAgYmFzZUFsbG9jYXRvci0+
bWVtX3R5cGUgPSAiRmFzdE1hbGxvYyI7CisgICAgYmFzZUFsbG9jYXRvci0+bWVtX21hcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R3N0TWVtb3J5TWFwRnVuY3Rpb24+KGdzdEFsbG9jYXRvckZhc3RNYWxs
b2NNZW1NYXApOworICAgIGJhc2VBbGxvY2F0b3ItPm1lbV91bm1hcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8R3N0TWVtb3J5VW5tYXBGdW5jdGlvbj4oZ3N0QWxsb2NhdG9yRmFzdE1hbGxvY01lbVVubWFw
KTsKKyAgICBiYXNlQWxsb2NhdG9yLT5tZW1fY29weSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0TWVt
b3J5Q29weUZ1bmN0aW9uPihnc3RBbGxvY2F0b3JGYXN0TWFsbG9jTWVtQ29weSk7CisgICAgYmFz
ZUFsbG9jYXRvci0+bWVtX3NoYXJlID0gcmVpbnRlcnByZXRfY2FzdDxHc3RNZW1vcnlTaGFyZUZ1
bmN0aW9uPihnc3RBbGxvY2F0b3JGYXN0TWFsbG9jTWVtU2hhcmUpOworICAgIGJhc2VBbGxvY2F0
b3ItPm1lbV9pc19zcGFuID0gcmVpbnRlcnByZXRfY2FzdDxHc3RNZW1vcnlJc1NwYW5GdW5jdGlv
bj4oZ3N0QWxsb2NhdG9yRmFzdE1hbGxvY01lbUlzU3Bhbik7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1h
bGxvYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dzdEFs
bG9jYXRvckZhc3RNYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uODA4ZDc5MmZiYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR3N0QWxsb2NhdG9yRmFzdE1hbGxvYy5oCkBAIC0wLDAgKzEs
MjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE4IElnYWxpYSBTLkwKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTggTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKwor
R1R5cGUgZ3N0X2FsbG9jYXRvcl9mYXN0X21hbGxvY19nZXRfdHlwZSgpOwo=
</data>
<flag name="review"
          id="349560"
          type_id="1"
          status="+"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>