<?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>165065</bug_id>
          
          <creation_ts>2016-11-24 08:30:11 -0800</creation_ts>
          <short_desc>[css-grid] Move attributes from RenderGrid to the new Grid class</short_desc>
          <delta_ts>2016-11-28 03:29:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>165007</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jfernandez</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1253594</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-24 08:30:11 -0800</bug_when>
    <thetext>[css-grid] Move attributes from RenderGrid to the new Grid class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253596</commentid>
    <comment_count>1</comment_count>
      <attachid>295414</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-24 08:37:13 -0800</bug_when>
    <thetext>Created attachment 295414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253602</commentid>
    <comment_count>2</comment_count>
      <attachid>295414</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2016-11-24 09:43:37 -0800</bug_when>
    <thetext>Comment on attachment 295414
Patch

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

&gt; Source/WebCore/rendering/RenderGrid.cpp:65
&gt; +void RenderGrid::Grid::insert(RenderBox&amp; child, const GridArea&amp; area, bool isOrthogonalChild)

Not a huge fan of boolean arguments to change the behavior of the function. We could, perhaps, cache the grid&apos;s writing mode so we can determine inside the function whether the item is orthogonal or not.

&gt; Source/WebCore/rendering/RenderGrid.cpp:77
&gt; +    m_hasAnyOrthogonalChildren = m_hasAnyOrthogonalChildren || isOrthogonalChild;

We can determine the value of m_hasAnyOrthogonalChildren as part of the LayoutGrid instance logic, perhaps just before calling the &apos;insert&apos; function.

&gt; Source/WebCore/rendering/RenderGrid.cpp:1715
&gt; +        m_grid.insert(*child, { area.rows, area.columns }, isOrthogonalChild(*child));

I&apos;d rather avoid to pass the child&apos;s orthogonality as parameter.

&gt; Source/WebCore/rendering/RenderGrid.cpp:1815
&gt; +        m_grid.insert(*autoGridItem, *emptyGridArea, isOrthogonalChild(*autoGridItem));

Ditto.

&gt; Source/WebCore/rendering/RenderGrid.cpp:1887
&gt; +    m_grid.insert(gridItem, *emptyGridArea, isOrthogonalChild(gridItem));

Ditto.

&gt; Source/WebCore/rendering/RenderGrid.h:212
&gt; +        bool hasInFlowGridItems() const { return !m_gridItemArea.isEmpty(); }

I really don&apos;t get the &quot;InFlow&quot; term here. Gird containers are supposed to have only InFlow elements.
  - https://github.com/w3c/csswg-drafts/issues/639#issuecomment-256254195</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253604</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-24 11:54:57 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Not a huge fan of boolean arguments to change the behavior of the function.

Yeah, we don&apos;t want to add more of these to WebKit anymore. The easiest way to avoid this is to use an enum with two values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253608</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-11-24 12:16:43 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Yeah, we don&apos;t want to add more of these to WebKit anymore. The easiest way
&gt; to avoid this is to use an enum with two values.

Like Carlos does in bug #164917.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253642</commentid>
    <comment_count>5</comment_count>
      <attachid>295414</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-25 06:56:00 -0800</bug_when>
    <thetext>Comment on attachment 295414
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:65
&gt;&gt; +void RenderGrid::Grid::insert(RenderBox&amp; child, const GridArea&amp; area, bool isOrthogonalChild)
&gt; 
&gt; Not a huge fan of boolean arguments to change the behavior of the function. We could, perhaps, cache the grid&apos;s writing mode so we can determine inside the function whether the item is orthogonal or not.

Caching it would mean listening to style changes, something that we don&apos;t want to do at Grid&apos;s level. But yeah I should not have used a boolean there.

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:77
&gt;&gt; +    m_hasAnyOrthogonalChildren = m_hasAnyOrthogonalChildren || isOrthogonalChild;
&gt; 
&gt; We can determine the value of m_hasAnyOrthogonalChildren as part of the LayoutGrid instance logic, perhaps just before calling the &apos;insert&apos; function.

Not sure what you mean. We were doing it in LayoutGrid. The point is that I now want to store it in Grid.

&gt;&gt; Source/WebCore/rendering/RenderGrid.h:212
&gt;&gt; +        bool hasInFlowGridItems() const { return !m_gridItemArea.isEmpty(); }
&gt; 
&gt; I really don&apos;t get the &quot;InFlow&quot; term here. Gird containers are supposed to have only InFlow elements.
&gt;   - https://github.com/w3c/csswg-drafts/issues/639#issuecomment-256254195

Right, so all the grid items are in flow children. But there are some children that might be out of flow like absolutely positioned children, but you&apos;re right that they are not technically grid items but just children of the grid container.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253646</commentid>
    <comment_count>6</comment_count>
      <attachid>295414</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2016-11-25 07:31:41 -0800</bug_when>
    <thetext>Comment on attachment 295414
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:65
&gt;&gt;&gt; +void RenderGrid::Grid::insert(RenderBox&amp; child, const GridArea&amp; area, bool isOrthogonalChild)
&gt;&gt; 
&gt;&gt; Not a huge fan of boolean arguments to change the behavior of the function. We could, perhaps, cache the grid&apos;s writing mode so we can determine inside the function whether the item is orthogonal or not.
&gt; 
&gt; Caching it would mean listening to style changes, something that we don&apos;t want to do at Grid&apos;s level. But yeah I should not have used a boolean there.

A change in grid&apos;s writing mode will trigger the execution of the LayoutGrid layout logic, so I think we will create again the Grid internal structure after updating the cached grid&apos;s writing mode. The grid items will be inserted again, so we will check out their orthogonality again.

&gt;&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:77
&gt;&gt;&gt; +    m_hasAnyOrthogonalChildren = m_hasAnyOrthogonalChildren || isOrthogonalChild;
&gt;&gt; 
&gt;&gt; We can determine the value of m_hasAnyOrthogonalChildren as part of the LayoutGrid instance logic, perhaps just before calling the &apos;insert&apos; function.
&gt; 
&gt; Not sure what you mean. We were doing it in LayoutGrid. The point is that I now want to store it in Grid.

Sure, sorry. I didn&apos;t realize that this field is not part of the Grid internal class.

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:1715
&gt;&gt; +        m_grid.insert(*child, { area.rows, area.columns }, isOrthogonalChild(*child));
&gt; 
&gt; I&apos;d rather avoid to pass the child&apos;s orthogonality as parameter.

Another option is to determine orthogonality and assign the value to the &quot;anyOrthogonalItem&quot; internal grid&apos;s attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253652</commentid>
    <comment_count>7</comment_count>
      <attachid>295425</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-25 08:19:21 -0800</bug_when>
    <thetext>Created attachment 295425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253824</commentid>
    <comment_count>8</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-28 03:29:06 -0800</bug_when>
    <thetext>Committed r208995: &lt;http://trac.webkit.org/changeset/208995&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295414</attachid>
            <date>2016-11-24 08:37:13 -0800</date>
            <delta_ts>2016-11-25 08:19:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165065-20161124173655.patch</filename>
            <type>text/plain</type>
            <size>18314</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJkZjlkNDk1YjEzODU3
OGRkZTllZWQ5ZjI5NzMyY2M0ZDFlYTNmZS4uNWE5ODgxYzJkNWQ2NDIzNzQxNjgzMDI2ZjJkODQ3
ODA2ODcwOWFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTExLTI0ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gTW92ZSBhdHRyaWJ1dGVzIGZyb20gUmVuZGVyR3JpZCB0byB0aGUgbmV3IEdyaWQgY2xhc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTA2NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgbmV3IGNs
YXNzIGNhbGxlZCBHcmlkIHdhcyBhZGRlZCBpbiAyMDg5NzMuIFRoaXMgaXMgdGhlIGZpcnN0IG9m
IGEgY291cGxlIG9mIHBhdGNoZXMgbW92aW5nCisgICAgICAgIHByaXZhdGUgYXR0cmlidXRlcyBm
cm9tIFJlbmRlckdyaWQgdG8gR3JpZC4KKworICAgICAgICBBcGFydCBmcm9tIHRoYXQgdGhpcyBp
cyBhZGRpbmcgYSBjb3VwbGUgb2YgbmV3IGhlbHBlciBmdW5jdGlvbnMgdGhhdCB3aWxsIGRlY291
cGxlIHRoZQorICAgICAgICBleGlzdGVuY2Ugb2YgaW4tZmxvdyBpdGVtcyBmcm9tIHRoZSBhY3R1
YWwgZGF0YSBzdHJ1Y3R1cmVzIHN0b3JpbmcgdGhhdCBpbmZvcm1hdGlvbi4KKworICAgICAgICBM
YXN0IGJ1dCBub3QgbGVhc3QsIHRoZSBHcmlkOjppbnNlcnQoKSBtZXRob2QgZG9lcyBub3Qgb25s
eSBpbnNlcnQgdGhlIGl0ZW0gaW4gdGhlIG1fZ3JpZAorICAgICAgICBkYXRhIHN0cnVjdHVyZSwg
YnV0IGFsc28gc3RvcmVzIHRoZSBHcmlkQXJlYSBhc3NvY2lhdGVkIHRvIHRoYXQgaXRlbSwgc28g
dGhlcmUgaXMgbm8gbmVlZCB0bworICAgICAgICBkbyBpdCBpbiB0d28gZGlmZmVyZW50IGNhbGxz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJlZCBhcyB0aGlzIGlzIGEgcmVmYWN0b3Jp
bmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJHcmlkOjpHcmlkOjppbnNlcnQpOiBBZGRlZCBhIG5ldyBwYXJhbWV0ZXIuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkOjpzZXRTbWFsbGVzdFRyYWNrc1N0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OkdyaWQ6OnNtYWxsZXN0VHJhY2tTdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkOjpncmlkSXRlbUFyZWEpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6R3JpZDo6c2V0R3JpZEl0ZW1BcmVhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OkdyaWQ6OmNsZWFyKTogQ2xlYXIgdGhlIG5ld2x5
IGFkZGVkIGF0dHJpYnV0ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXBlYXRU
cmFja3NTaXppbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb21w
dXRlVXNlZEJyZWFkdGhPZkdyaWRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cmF3R3JpZFRyYWNrU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXNv
bHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25H
cmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0
ZW1PbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y2xlYXJHcmlkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6Om9mZnNldEFuZEJyZWFkdGhGb3JQb3NpdGlvbmVk
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y2FjaGVkR3JpZFNwYW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y2FjaGVkR3JpZEFyZWEpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmg6CisKIDIwMTYtMTEtMjMgIFNlcmdpbyBW
aWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1ncmlkXSBD
b252ZXJ0IGdyaWQgcmVwcmVzZW50YXRpb24gaW50byBhIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggNDc1ZjU5MTRkYzIzOGM4NDA2MzZmYzhmMThmYWY2
OTljNWFhMWJmZi4uZDFkNmIzMDNkOGUxYThmOWFhYWQwODc4MjNmMGIwYTM5NGExMzAwNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2
b2lkIFJlbmRlckdyaWQ6OkdyaWQ6OmVuc3VyZUdyaWRTaXplKHVuc2lnbmVkIG1heGltdW1Sb3dT
aXplLCB1bnNpZ25lZCBtYXhpbXVtQwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJHcmlkOjpHcmlk
OjppbnNlcnQoUmVuZGVyQm94JiBjaGlsZCwgY29uc3QgR3JpZEFyZWEmIGFyZWEpCit2b2lkIFJl
bmRlckdyaWQ6OkdyaWQ6Omluc2VydChSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBHcmlkQXJlYSYg
YXJlYSwgYm9vbCBpc09ydGhvZ29uYWxDaGlsZCkKIHsKICAgICBBU1NFUlQoYXJlYS5yb3dzLmlz
VHJhbnNsYXRlZERlZmluaXRlKCkgJiYgYXJlYS5jb2x1bW5zLmlzVHJhbnNsYXRlZERlZmluaXRl
KCkpOwogICAgIGVuc3VyZUdyaWRTaXplKGFyZWEucm93cy5lbmRMaW5lKCksIGFyZWEuY29sdW1u
cy5lbmRMaW5lKCkpOwpAQCAtNzEsMTEgKzcxLDQxIEBAIHZvaWQgUmVuZGVyR3JpZDo6R3JpZDo6
aW5zZXJ0KFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IEdyaWRBcmVhJiBhcmVhKQogICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGNvbHVtbiA6IGFyZWEuY29sdW1ucykKICAgICAgICAgICAgIG1fZ3Jp
ZFtyb3ddW2NvbHVtbl0uYXBwZW5kKCZjaGlsZCk7CiAgICAgfQorCisgICAgc2V0R3JpZEl0ZW1B
cmVhKGNoaWxkLCBhcmVhKTsKKworICAgIG1faGFzQW55T3J0aG9nb25hbENoaWxkcmVuID0gbV9o
YXNBbnlPcnRob2dvbmFsQ2hpbGRyZW4gfHwgaXNPcnRob2dvbmFsQ2hpbGQ7Cit9CisKK3ZvaWQg
UmVuZGVyR3JpZDo6R3JpZDo6c2V0U21hbGxlc3RUcmFja3NTdGFydChpbnQgcm93U3RhcnQsIGlu
dCBjb2x1bW5TdGFydCkKK3sKKyAgICBtX3NtYWxsZXN0Um93U3RhcnQgPSByb3dTdGFydDsKKyAg
ICBtX3NtYWxsZXN0Q29sdW1uU3RhcnQgPSBjb2x1bW5TdGFydDsKK30KKworaW50IFJlbmRlckdy
aWQ6OkdyaWQ6OnNtYWxsZXN0VHJhY2tTdGFydChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uKSBjb25zdAoreworICAgIHJldHVybiBkaXJlY3Rpb24gPT0gRm9yUm93cyA/IG1fc21h
bGxlc3RSb3dTdGFydCA6IG1fc21hbGxlc3RDb2x1bW5TdGFydDsKK30KKworR3JpZEFyZWEgUmVu
ZGVyR3JpZDo6R3JpZDo6Z3JpZEl0ZW1BcmVhKGNvbnN0IFJlbmRlckJveCYgaXRlbSkgY29uc3QK
K3sKKyAgICBBU1NFUlQobV9ncmlkSXRlbUFyZWEuY29udGFpbnMoJml0ZW0pKTsKKyAgICByZXR1
cm4gbV9ncmlkSXRlbUFyZWEuZ2V0KCZpdGVtKTsKK30KKwordm9pZCBSZW5kZXJHcmlkOjpHcmlk
OjpzZXRHcmlkSXRlbUFyZWEoY29uc3QgUmVuZGVyQm94JiBpdGVtLCBHcmlkQXJlYSBhcmVhKQor
eworICAgIG1fZ3JpZEl0ZW1BcmVhLnNldCgmaXRlbSwgYXJlYSk7CiB9CiAKIHZvaWQgUmVuZGVy
R3JpZDo6R3JpZDo6Y2xlYXIoKQogewogICAgIG1fZ3JpZC5yZXNpemUoMCk7CisgICAgbV9ncmlk
SXRlbUFyZWEuY2xlYXIoKTsKKyAgICBtX2hhc0FueU9ydGhvZ29uYWxDaGlsZHJlbiA9IGZhbHNl
OworICAgIG1fc21hbGxlc3RSb3dTdGFydCA9IDA7CisgICAgbV9zbWFsbGVzdENvbHVtblN0YXJ0
ID0gMDsKIH0KIAogY2xhc3MgR3JpZFRyYWNrIHsKQEAgLTQ2Nyw3ICs0OTcsNyBAQCB2b2lkIFJl
bmRlckdyaWQ6OnJlcGVhdFRyYWNrc1NpemluZ0lmTmVlZGVkKEdyaWRTaXppbmdEYXRhJiBzaXpp
bmdEYXRhLCBMYXlvdXRVbgogICAgIC8vIGEgbmV3IGN5Y2xlIG9mIHRoZSBzaXppbmcgYWxnb3Jp
dGhtOyB0aGVyZSBtYXkgYmUgbW9yZS4gSW4gYWRkaXRpb24sIG5vdCBhbGwgdGhlCiAgICAgLy8g
Y2FzZXMgd2l0aCBvcnRob2dvbmFsIGZsb3dzIHJlcXVpcmUgdGhpcyBleHRyYSBjeWNsZTsgd2Ug
bmVlZCBhIG1vcmUgc3BlY2lmaWMKICAgICAvLyBjb25kaXRpb24gdG8gZGV0ZWN0IHdoZXRoZXIg
Y2hpbGQncyBtaW4tY29udGVudCBjb250cmlidXRpb24gaGFzIGNoYW5nZWQgb3Igbm90LgotICAg
IGlmIChtX2hhc0FueU9ydGhvZ29uYWxDaGlsZCkgeworICAgIGlmIChtX2dyaWQuaGFzQW55T3J0
aG9nb25hbENoaWxkcmVuKCkpIHsKICAgICAgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JEaXJlY3Rp
b24oRm9yQ29sdW1ucywgc2l6aW5nRGF0YSwgYXZhaWxhYmxlU3BhY2VGb3JDb2x1bW5zKTsKICAg
ICAgICAgY29tcHV0ZVRyYWNrU2l6ZXNGb3JEaXJlY3Rpb24oRm9yUm93cywgc2l6aW5nRGF0YSwg
YXZhaWxhYmxlU3BhY2VGb3JSb3dzKTsKICAgICB9CkBAIC04MjEsNyArODUxLDcgQEAgdm9pZCBS
ZW5kZXJHcmlkOjpjb21wdXRlVXNlZEJyZWFkdGhPZkdyaWRUcmFja3MoR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIGRpcmVjdGkKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0cmFja0luZGV4IDog
ZmxleGlibGVTaXplZFRyYWNrc0luZGV4KQogICAgICAgICAgICAgZmxleEZyYWN0aW9uID0gc3Rk
OjptYXgoZmxleEZyYWN0aW9uLCBub3JtYWxpemVkRmxleEZyYWN0aW9uKHRyYWNrc1t0cmFja0lu
ZGV4XSwgZ3JpZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRyYWNrSW5kZXgsIHNpemluZ0RhdGEuc2l6
aW5nT3BlcmF0aW9uKS5tYXhUcmFja0JyZWFkdGgoKS5mbGV4KCkpKTsKIAotICAgICAgICBpZiAo
IW1fZ3JpZEl0ZW1BcmVhLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9ncmlkLmhhc0luRmxv
d0dyaWRJdGVtcygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmxl
eGlibGVTaXplZFRyYWNrc0luZGV4LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgR3Jp
ZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgZGlyZWN0aW9uLCBmbGV4aWJsZVNpemVkVHJhY2tz
SW5kZXhbaV0pOwogICAgICAgICAgICAgICAgIHdoaWxlIChhdXRvKiBncmlkSXRlbSA9IGl0ZXJh
dG9yLm5leHRHcmlkSXRlbSgpKSB7CkBAIC0xMDA3LDcgKzEwMzcsNyBAQCBjb25zdCBHcmlkVHJh
Y2tTaXplJiBSZW5kZXJHcmlkOjpyYXdHcmlkVHJhY2tTaXplKEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiBkaXJlYwogICAgIC8vIGdyaWQtdGVtcGxhdGUtYXJlYXMgaXMgc3BlY2lmaWVkIGZvciBl
eGFtcGxlKS4KICAgICB1bnNpZ25lZCBleHBsaWNpdFRyYWNrc0NvdW50ID0gdHJhY2tTdHlsZXMu
c2l6ZSgpICsgYXV0b1JlcGVhdFRyYWNrc0NvdW50OwogCi0gICAgaW50IHVudHJhbnNsYXRlZElu
ZGV4QXNJbnQgPSB0cmFuc2xhdGVkSW5kZXggKyAoaXNSb3dBeGlzID8gbV9zbWFsbGVzdENvbHVt
blN0YXJ0IDogbV9zbWFsbGVzdFJvd1N0YXJ0KTsKKyAgICBpbnQgdW50cmFuc2xhdGVkSW5kZXhB
c0ludCA9IHRyYW5zbGF0ZWRJbmRleCArIG1fZ3JpZC5zbWFsbGVzdFRyYWNrU3RhcnQoZGlyZWN0
aW9uKTsKICAgICB1bnNpZ25lZCBhdXRvVHJhY2tTdHlsZXNTaXplID0gYXV0b1RyYWNrU3R5bGVz
LnNpemUoKTsKICAgICBpZiAodW50cmFuc2xhdGVkSW5kZXhBc0ludCA8IDApIHsKICAgICAgICAg
aW50IGluZGV4ID0gdW50cmFuc2xhdGVkSW5kZXhBc0ludCAlIHN0YXRpY19jYXN0PGludD4oYXV0
b1RyYWNrU3R5bGVzU2l6ZSk7CkBAIC0xMjIwLDcgKzEyNTAsNyBAQCB2b2lkIFJlbmRlckdyaWQ6
OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9ucyhHcmlkVHJhY2tTaXppbmdE
aXJlY3RpbwogewogICAgIHNpemluZ0RhdGEuaXRlbXNTb3J0ZWRCeUluY3JlYXNpbmdTcGFuLnNo
cmluaygwKTsKICAgICBIYXNoU2V0PFJlbmRlckJveCo+IGl0ZW1zU2V0OwotICAgIGlmICghbV9n
cmlkSXRlbUFyZWEuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fZ3JpZC5oYXNJbkZsb3dHcmlkSXRl
bXMoKSkgewogICAgICAgICBmb3IgKGF1dG8gdHJhY2tJbmRleCA6IHNpemluZ0RhdGEuY29udGVu
dFNpemVkVHJhY2tzSW5kZXgpIHsKICAgICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvciht
X2dyaWQsIGRpcmVjdGlvbiwgdHJhY2tJbmRleCk7CiAgICAgICAgICAgICBHcmlkVHJhY2smIHRy
YWNrID0gKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IHNpemluZ0RhdGEuY29sdW1uVHJhY2tz
W3RyYWNrSW5kZXhdIDogc2l6aW5nRGF0YS5yb3dUcmFja3NbdHJhY2tJbmRleF07CkBAIC0xNjI5
LDEwICsxNjU5LDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJHcmlkOjpPcmRlcmVkVHJhY2tJ
bmRleFNldD4gUmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzCiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IGVtcHR5VHJhY2tJbmRleGVzOwogICAgIHVuc2ln
bmVkIGluc2VydGlvblBvaW50ID0gaXNSb3dBeGlzID8gc3R5bGUoKS5ncmlkQXV0b1JlcGVhdENv
bHVtbnNJbnNlcnRpb25Qb2ludCgpIDogc3R5bGUoKS5ncmlkQXV0b1JlcGVhdFJvd3NJbnNlcnRp
b25Qb2ludCgpOwotICAgIHVuc2lnbmVkIGZpcnN0QXV0b1JlcGVhdFRyYWNrID0gaW5zZXJ0aW9u
UG9pbnQgKyBzdGQ6OmFicyhpc1Jvd0F4aXMgPyBtX3NtYWxsZXN0Q29sdW1uU3RhcnQgOiBtX3Nt
YWxsZXN0Um93U3RhcnQpOworICAgIHVuc2lnbmVkIGZpcnN0QXV0b1JlcGVhdFRyYWNrID0gaW5z
ZXJ0aW9uUG9pbnQgKyBzdGQ6OmFicyhtX2dyaWQuc21hbGxlc3RUcmFja1N0YXJ0KGRpcmVjdGlv
bikpOwogICAgIHVuc2lnbmVkIGxhc3RBdXRvUmVwZWF0VHJhY2sgPSBmaXJzdEF1dG9SZXBlYXRU
cmFjayArIGF1dG9SZXBlYXRDb3VudEZvckRpcmVjdGlvbihkaXJlY3Rpb24pOwogCi0gICAgaWYg
KG1fZ3JpZEl0ZW1BcmVhLmlzRW1wdHkoKSkgeworICAgIGlmICghbV9ncmlkLmhhc0luRmxvd0dy
aWRJdGVtcygpKSB7CiAgICAgICAgIGVtcHR5VHJhY2tJbmRleGVzID0gc3RkOjptYWtlX3VuaXF1
ZTxPcmRlcmVkVHJhY2tJbmRleFNldD4oKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCB0cmFja0lu
ZGV4ID0gZmlyc3RBdXRvUmVwZWF0VHJhY2s7IHRyYWNrSW5kZXggPCBsYXN0QXV0b1JlcGVhdFRy
YWNrOyArK3RyYWNrSW5kZXgpCiAgICAgICAgICAgICBlbXB0eVRyYWNrSW5kZXhlcy0+YWRkKHRy
YWNrSW5kZXgpOwpAQCAtMTY1Miw3ICsxNjgyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckdy
aWQ6Ok9yZGVyZWRUcmFja0luZGV4U2V0PiBSZW5kZXJHcmlkOjpjb21wdXRlRW1wdHlUcmFja3MK
IHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZChTaXppbmdPcGVyYXRpb24gc2l6aW5n
T3BlcmF0aW9uKQogewogICAgIEFTU0VSVChtX2dyaWRJc0RpcnR5KTsKLSAgICBBU1NFUlQobV9n
cmlkSXRlbUFyZWEuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIW1fZ3JpZC5oYXNJbkZsb3dHcmlk
SXRlbXMoKSk7CiAKICAgICBtX2F1dG9SZXBlYXRDb2x1bW5zID0gY29tcHV0ZUF1dG9SZXBlYXRU
cmFja3NDb3VudChGb3JDb2x1bW5zLCBzaXppbmdPcGVyYXRpb24pOwogICAgIG1fYXV0b1JlcGVh
dFJvd3MgPSBjb21wdXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEZvclJvd3MsIHNpemluZ09wZXJh
dGlvbik7CkBAIC0xNjYyLDIxICsxNjkyLDE4IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVt
c09uR3JpZChTaXppbmdPcGVyYXRpb24gc2l6aW5nT3BlcmF0aW9uKQogCiAgICAgVmVjdG9yPFJl
bmRlckJveCo+IGF1dG9NYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwogICAgIFZlY3RvcjxSZW5kZXJC
b3gqPiBzcGVjaWZpZWRNYWpvckF4aXNBdXRvR3JpZEl0ZW1zOwotICAgIG1faGFzQW55T3J0aG9n
b25hbENoaWxkID0gZmFsc2U7CiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkID0gbV9vcmRlckl0
ZXJhdG9yLmZpcnN0KCk7IGNoaWxkOyBjaGlsZCA9IG1fb3JkZXJJdGVyYXRvci5uZXh0KCkpIHsK
ICAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIG1faGFzQW55T3J0aG9nb25hbENoaWxkID0gbV9oYXNBbnlP
cnRob2dvbmFsQ2hpbGQgfHwgaXNPcnRob2dvbmFsQ2hpbGQoKmNoaWxkKTsKLQotICAgICAgICBH
cmlkQXJlYSBhcmVhID0gY2FjaGVkR3JpZEFyZWEoKmNoaWxkKTsKKyAgICAgICAgR3JpZEFyZWEg
YXJlYSA9IG1fZ3JpZC5ncmlkSXRlbUFyZWEoKmNoaWxkKTsKICAgICAgICAgaWYgKCFhcmVhLnJv
d3MuaXNJbmRlZmluaXRlKCkpCi0gICAgICAgICAgICBhcmVhLnJvd3MudHJhbnNsYXRlKHN0ZDo6
YWJzKG1fc21hbGxlc3RSb3dTdGFydCkpOworICAgICAgICAgICAgYXJlYS5yb3dzLnRyYW5zbGF0
ZShzdGQ6OmFicyhtX2dyaWQuc21hbGxlc3RUcmFja1N0YXJ0KEZvclJvd3MpKSk7CiAgICAgICAg
IGlmICghYXJlYS5jb2x1bW5zLmlzSW5kZWZpbml0ZSgpKQotICAgICAgICAgICAgYXJlYS5jb2x1
bW5zLnRyYW5zbGF0ZShzdGQ6OmFicyhtX3NtYWxsZXN0Q29sdW1uU3RhcnQpKTsKLSAgICAgICAg
bV9ncmlkSXRlbUFyZWEuc2V0KGNoaWxkLCBhcmVhKTsKKyAgICAgICAgICAgIGFyZWEuY29sdW1u
cy50cmFuc2xhdGUoc3RkOjphYnMobV9ncmlkLnNtYWxsZXN0VHJhY2tTdGFydChGb3JDb2x1bW5z
KSkpOwogCiAgICAgICAgIGlmIChhcmVhLnJvd3MuaXNJbmRlZmluaXRlKCkgfHwgYXJlYS5jb2x1
bW5zLmlzSW5kZWZpbml0ZSgpKSB7CisgICAgICAgICAgICBtX2dyaWQuc2V0R3JpZEl0ZW1BcmVh
KCpjaGlsZCwgYXJlYSk7CiAgICAgICAgICAgICBib29sIG1ham9yQXhpc0RpcmVjdGlvbklzRm9y
Q29sdW1ucyA9IGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSA9PSBGb3JDb2x1bW5z
OwogICAgICAgICAgICAgaWYgKChtYWpvckF4aXNEaXJlY3Rpb25Jc0ZvckNvbHVtbnMgJiYgYXJl
YS5jb2x1bW5zLmlzSW5kZWZpbml0ZSgpKQogICAgICAgICAgICAgICAgIHx8ICghbWFqb3JBeGlz
RGlyZWN0aW9uSXNGb3JDb2x1bW5zICYmIGFyZWEucm93cy5pc0luZGVmaW5pdGUoKSkpCkBAIC0x
Njg1LDExICsxNzEyLDExIEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZChTaXpp
bmdPcGVyYXRpb24gc2l6aW5nT3BlcmF0aW9uKQogICAgICAgICAgICAgICAgIHNwZWNpZmllZE1h
am9yQXhpc0F1dG9HcmlkSXRlbXMuYXBwZW5kKGNoaWxkKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9Ci0gICAgICAgIG1fZ3JpZC5pbnNlcnQoKmNoaWxkLCB7IGFyZWEucm93cywg
YXJlYS5jb2x1bW5zIH0pOworICAgICAgICBtX2dyaWQuaW5zZXJ0KCpjaGlsZCwgeyBhcmVhLnJv
d3MsIGFyZWEuY29sdW1ucyB9LCBpc09ydGhvZ29uYWxDaGlsZCgqY2hpbGQpKTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoQVNTRVJUKQotICAgIGlmICghbV9ncmlkSXRlbUFyZWEuaXNFbXB0eSgpKSB7
CisgICAgaWYgKG1fZ3JpZC5oYXNJbkZsb3dHcmlkSXRlbXMoKSkgewogICAgICAgICBBU1NFUlQo
Z3JpZFJvd0NvdW50KCkgPj0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRSb3dD
b3VudChzdHlsZSgpLCBtX2F1dG9SZXBlYXRSb3dzKSk7CiAgICAgICAgIEFTU0VSVChncmlkQ29s
dW1uQ291bnQoKSA+PSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENvbHVtbkNv
dW50KHN0eWxlKCksIG1fYXV0b1JlcGVhdENvbHVtbnMpKTsKICAgICB9CkBAIC0xNzA3LDcgKzE3
MzQsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQoU2l6aW5nT3BlcmF0aW9u
IHNpemluZ09wZXJhdGlvbikKICAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEdyaWRBcmVhIGFyZWEgPSBj
YWNoZWRHcmlkQXJlYSgqY2hpbGQpOworICAgICAgICBHcmlkQXJlYSBhcmVhID0gbV9ncmlkLmdy
aWRJdGVtQXJlYSgqY2hpbGQpOwogICAgICAgICBBU1NFUlQoYXJlYS5yb3dzLmlzVHJhbnNsYXRl
ZERlZmluaXRlKCkgJiYgYXJlYS5jb2x1bW5zLmlzVHJhbnNsYXRlZERlZmluaXRlKCkpOwogICAg
IH0KICNlbmRpZgpAQCAtMTcxNiw3ICsxNzQzLDggQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUl0
ZW1zT25HcmlkKFNpemluZ09wZXJhdGlvbiBzaXppbmdPcGVyYXRpb24pCiB2b2lkIFJlbmRlckdy
aWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpCiB7CiAgICAgT3JkZXJJ
dGVyYXRvclBvcHVsYXRvciBwb3B1bGF0b3IobV9vcmRlckl0ZXJhdG9yKTsKLSAgICBtX3NtYWxs
ZXN0Um93U3RhcnQgPSBtX3NtYWxsZXN0Q29sdW1uU3RhcnQgPSAwOworICAgIGludCBzbWFsbGVz
dFJvd1N0YXJ0ID0gMDsKKyAgICBpbnQgc21hbGxlc3RDb2x1bW5TdGFydCA9IDA7CiAgICAgdW5z
aWduZWQgbWF4aW11bVJvd0luZGV4ID0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdy
aWRSb3dDb3VudChzdHlsZSgpLCBtX2F1dG9SZXBlYXRSb3dzKTsKICAgICB1bnNpZ25lZCBtYXhp
bXVtQ29sdW1uSW5kZXggPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENvbHVt
bkNvdW50KHN0eWxlKCksIG1fYXV0b1JlcGVhdENvbHVtbnMpOwogCkBAIC0xNzI4LDcgKzE3NTYs
NyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRv
cigpCiAKICAgICAgICAgR3JpZFNwYW4gcm93UG9zaXRpb25zID0gR3JpZFBvc2l0aW9uc1Jlc29s
dmVyOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQsIEZvclJv
d3MsIG1fYXV0b1JlcGVhdFJvd3MpOwogICAgICAgICBpZiAoIXJvd1Bvc2l0aW9ucy5pc0luZGVm
aW5pdGUoKSkgewotICAgICAgICAgICAgbV9zbWFsbGVzdFJvd1N0YXJ0ID0gc3RkOjptaW4obV9z
bWFsbGVzdFJvd1N0YXJ0LCByb3dQb3NpdGlvbnMudW50cmFuc2xhdGVkU3RhcnRMaW5lKCkpOwor
ICAgICAgICAgICAgc21hbGxlc3RSb3dTdGFydCA9IHN0ZDo6bWluKHNtYWxsZXN0Um93U3RhcnQs
IHJvd1Bvc2l0aW9ucy51bnRyYW5zbGF0ZWRTdGFydExpbmUoKSk7CiAgICAgICAgICAgICBtYXhp
bXVtUm93SW5kZXggPSBzdGQ6Om1heDxpbnQ+KG1heGltdW1Sb3dJbmRleCwgcm93UG9zaXRpb25z
LnVudHJhbnNsYXRlZEVuZExpbmUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBHcm93IHRoZSBncmlkIGZvciBpdGVtcyB3aXRoIGEgZGVmaW5pdGUgcm93IHNwYW4sIGdldHRp
bmcgdGhlIGxhcmdlc3Qgc3VjaCBzcGFuLgpAQCAtMTczOCw3ICsxNzY2LDcgQEAgdm9pZCBSZW5k
ZXJHcmlkOjpwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVySXRlcmF0b3IoKQogCiAgICAgICAg
IEdyaWRTcGFuIGNvbHVtblBvc2l0aW9ucyA9IEdyaWRQb3NpdGlvbnNSZXNvbHZlcjo6cmVzb2x2
ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBGb3JDb2x1bW5zLCBtX2F1
dG9SZXBlYXRDb2x1bW5zKTsKICAgICAgICAgaWYgKCFjb2x1bW5Qb3NpdGlvbnMuaXNJbmRlZmlu
aXRlKCkpIHsKLSAgICAgICAgICAgIG1fc21hbGxlc3RDb2x1bW5TdGFydCA9IHN0ZDo6bWluKG1f
c21hbGxlc3RDb2x1bW5TdGFydCwgY29sdW1uUG9zaXRpb25zLnVudHJhbnNsYXRlZFN0YXJ0TGlu
ZSgpKTsKKyAgICAgICAgICAgIHNtYWxsZXN0Q29sdW1uU3RhcnQgPSBzdGQ6Om1pbihzbWFsbGVz
dENvbHVtblN0YXJ0LCBjb2x1bW5Qb3NpdGlvbnMudW50cmFuc2xhdGVkU3RhcnRMaW5lKCkpOwog
ICAgICAgICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0gc3RkOjptYXg8aW50PihtYXhpbXVtQ29s
dW1uSW5kZXgsIGNvbHVtblBvc2l0aW9ucy51bnRyYW5zbGF0ZWRFbmRMaW5lKCkpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gR3JvdyB0aGUgZ3JpZCBmb3IgaXRlbXMgd2l0aCBh
IGRlZmluaXRlIGNvbHVtbiBzcGFuLCBnZXR0aW5nIHRoZSBsYXJnZXN0IHN1Y2ggc3Bhbi4KQEAg
LTE3NDYsMTAgKzE3NzQsMTEgQEAgdm9pZCBSZW5kZXJHcmlkOjpwb3B1bGF0ZUV4cGxpY2l0R3Jp
ZEFuZE9yZGVySXRlcmF0b3IoKQogICAgICAgICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0gc3Rk
OjptYXgobWF4aW11bUNvbHVtbkluZGV4LCBzcGFuU2l6ZSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBtX2dyaWRJdGVtQXJlYS5zZXQoY2hpbGQsIEdyaWRBcmVhKHJvd1Bvc2l0aW9ucywgY29sdW1u
UG9zaXRpb25zKSk7CisgICAgICAgIG1fZ3JpZC5zZXRHcmlkSXRlbUFyZWEoKmNoaWxkLCB7IHJv
d1Bvc2l0aW9ucywgY29sdW1uUG9zaXRpb25zIH0pOwogICAgIH0KIAotICAgIG1fZ3JpZC5lbnN1
cmVHcmlkU2l6ZShtYXhpbXVtUm93SW5kZXggKyBzdGQ6OmFicyhtX3NtYWxsZXN0Um93U3RhcnQp
LCBtYXhpbXVtQ29sdW1uSW5kZXggKyBzdGQ6OmFicyhtX3NtYWxsZXN0Q29sdW1uU3RhcnQpKTsK
KyAgICBtX2dyaWQuc2V0U21hbGxlc3RUcmFja3NTdGFydChzbWFsbGVzdFJvd1N0YXJ0LCBzbWFs
bGVzdENvbHVtblN0YXJ0KTsKKyAgICBtX2dyaWQuZW5zdXJlR3JpZFNpemUobWF4aW11bVJvd0lu
ZGV4ICsgc3RkOjphYnMoc21hbGxlc3RSb3dTdGFydCksIG1heGltdW1Db2x1bW5JbmRleCArIHN0
ZDo6YWJzKHNtYWxsZXN0Q29sdW1uU3RhcnQpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEdyaWRB
cmVhPiBSZW5kZXJHcmlkOjpjcmVhdGVFbXB0eUdyaWRBcmVhQXRTcGVjaWZpZWRQb3NpdGlvbnNP
dXRzaWRlR3JpZChjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gc3BlY2lmaWVkRGlyZWN0aW9uLCBjb25zdCBHcmlkU3BhbiYgc3BlY2lmaWVkUG9zaXRp
b25zKSBjb25zdApAQCAtMTc4Myw4ICsxODEyLDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZVNw
ZWNpZmllZE1ham9yQXhpc0l0ZW1zT25HcmlkKGNvbnN0IFZlY3RvcjxSZW5kZXJCb3gqPiYgYXUK
ICAgICAgICAgaWYgKCFlbXB0eUdyaWRBcmVhKQogICAgICAgICAgICAgZW1wdHlHcmlkQXJlYSA9
IGNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKCphdXRv
R3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9z
aXRpb25zKTsKIAotICAgICAgICBtX2dyaWRJdGVtQXJlYS5zZXQoYXV0b0dyaWRJdGVtLCAqZW1w
dHlHcmlkQXJlYSk7Ci0gICAgICAgIG1fZ3JpZC5pbnNlcnQoKmF1dG9HcmlkSXRlbSwgKmVtcHR5
R3JpZEFyZWEpOworICAgICAgICBtX2dyaWQuaW5zZXJ0KCphdXRvR3JpZEl0ZW0sICplbXB0eUdy
aWRBcmVhLCBpc09ydGhvZ29uYWxDaGlsZCgqYXV0b0dyaWRJdGVtKSk7CiAKICAgICAgICAgaWYg
KCFpc0dyaWRBdXRvRmxvd0RlbnNlKQogICAgICAgICAgICAgbWlub3JBeGlzQ3Vyc29ycy5zZXQo
bWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uLCBpc0ZvckNvbHVtbnMgPyBlbXB0eUdyaWRBcmVhLT5y
b3dzLnN0YXJ0TGluZSgpIDogZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5zdGFydExpbmUoKSk7CkBA
IC0xODU2LDggKzE4ODQsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0
ZW1PbkdyaWQoUmVuZGVyQm94JiBncmlkSXRlbSwgQXV0b1BsYWNlbWVudAogICAgICAgICAgICAg
ZW1wdHlHcmlkQXJlYSA9IGNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091
dHNpZGVHcmlkKGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCksIEdy
aWRTcGFuOjp0cmFuc2xhdGVkRGVmaW5pdGVHcmlkU3BhbigwLCBtaW5vckF4aXNTcGFuU2l6ZSkp
OwogICAgIH0KIAotICAgIG1fZ3JpZEl0ZW1BcmVhLnNldCgmZ3JpZEl0ZW0sICplbXB0eUdyaWRB
cmVhKTsKLSAgICBtX2dyaWQuaW5zZXJ0KGdyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7CisgICAg
bV9ncmlkLmluc2VydChncmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEsIGlzT3J0aG9nb25hbENoaWxk
KGdyaWRJdGVtKSk7CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5maXJzdCA9IGVtcHR5R3JpZEFy
ZWEtPnJvd3Muc3RhcnRMaW5lKCk7CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5zZWNvbmQgPSBl
bXB0eUdyaWRBcmVhLT5jb2x1bW5zLnN0YXJ0TGluZSgpOwogfQpAQCAtMTg3NSw3ICsxOTAyLDYg
QEAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIFJlbmRlckdyaWQ6OmF1dG9QbGFjZW1lbnRNaW5v
ckF4aXNEaXJlY3Rpb24oKSBjb25zdAogdm9pZCBSZW5kZXJHcmlkOjpjbGVhckdyaWQoKQogewog
ICAgIG1fZ3JpZC5jbGVhcigpOwotICAgIG1fZ3JpZEl0ZW1BcmVhLmNsZWFyKCk7CiAgICAgbV9n
cmlkSXNEaXJ0eSA9IHRydWU7CiB9CiAKQEAgLTIwNTQsNyArMjA4MCw3IEBAIHZvaWQgUmVuZGVy
R3JpZDo6b2Zmc2V0QW5kQnJlYWR0aEZvclBvc2l0aW9uZWRDaGlsZChjb25zdCBSZW5kZXJCb3gm
IGNoaWxkLCBHcmlkCiAgICAgfQogCiAgICAgLy8gRm9yIHBvc2l0aW9uZWQgaXRlbXMgd2UgY2Fu
bm90IHVzZSBHcmlkU3Bhbjo6dHJhbnNsYXRlKCkgYmVjYXVzZSB3ZSBjb3VsZCBlbmQgdXAgd2l0
aCBuZWdhdGl2ZSB2YWx1ZXMsIGFzIHRoZSBwb3NpdGlvbmVkIGl0ZW1zIGRvIG5vdCBjcmVhdGUg
aW1wbGljaXQgdHJhY2tzIHBlciBzcGVjLgotICAgIGludCBzbWFsbGVzdFN0YXJ0ID0gc3RkOjph
YnMoaXNSb3dBeGlzID8gbV9zbWFsbGVzdENvbHVtblN0YXJ0IDogbV9zbWFsbGVzdFJvd1N0YXJ0
KTsKKyAgICBpbnQgc21hbGxlc3RTdGFydCA9IHN0ZDo6YWJzKG1fZ3JpZC5zbWFsbGVzdFRyYWNr
U3RhcnQoZGlyZWN0aW9uKSk7CiAgICAgaW50IHN0YXJ0TGluZSA9IHBvc2l0aW9ucy51bnRyYW5z
bGF0ZWRTdGFydExpbmUoKSArIHNtYWxsZXN0U3RhcnQ7CiAgICAgaW50IGVuZExpbmUgPSBwb3Np
dGlvbnMudW50cmFuc2xhdGVkRW5kTGluZSgpICsgc21hbGxlc3RTdGFydDsKIApAQCAtMjExOSwx
NSArMjE0NSw5IEBAIHZvaWQgUmVuZGVyR3JpZDo6b2Zmc2V0QW5kQnJlYWR0aEZvclBvc2l0aW9u
ZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkCiAgICAgfQogfQogCi1HcmlkQXJl
YSBSZW5kZXJHcmlkOjpjYWNoZWRHcmlkQXJlYShjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtKSBj
b25zdAotewotICAgIEFTU0VSVChtX2dyaWRJdGVtQXJlYS5jb250YWlucygmZ3JpZEl0ZW0pKTsK
LSAgICByZXR1cm4gbV9ncmlkSXRlbUFyZWEuZ2V0KCZncmlkSXRlbSk7Ci19Ci0KIEdyaWRTcGFu
IFJlbmRlckdyaWQ6OmNhY2hlZEdyaWRTcGFuKGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0CiB7Ci0gICAgR3JpZEFyZWEg
YXJlYSA9IGNhY2hlZEdyaWRBcmVhKGdyaWRJdGVtKTsKKyAgICBHcmlkQXJlYSBhcmVhID0gbV9n
cmlkLmdyaWRJdGVtQXJlYShncmlkSXRlbSk7CiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JD
b2x1bW5zID8gYXJlYS5jb2x1bW5zIDogYXJlYS5yb3dzOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckdyaWQuaAppbmRleCBhNzY2NWFjMGMzMTI2ZmZkYjhiOWM5YjQyYmFiZDJmMjJk
ZGM4YzI1Li5kOTgzYWIyMzYxOThmNGQ2ZWMzMjhkZmE3ZGFhZGMzMWZhNWQyNDM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTIwNywxNyArMjA3LDM0IEBAIHByaXZh
dGU6CiAgICAgICAgIHVuc2lnbmVkIG51bVJvd3MoKSBjb25zdCB7IHJldHVybiBtX2dyaWQuc2l6
ZSgpOyB9CiAKICAgICAgICAgdm9pZCBlbnN1cmVHcmlkU2l6ZSh1bnNpZ25lZCBtYXhpbXVtUm93
U2l6ZSwgdW5zaWduZWQgbWF4aW11bUNvbHVtblNpemUpOwotICAgICAgICB2b2lkIGluc2VydChS
ZW5kZXJCb3gmLCBjb25zdCBHcmlkQXJlYSYpOworICAgICAgICB2b2lkIGluc2VydChSZW5kZXJC
b3gmLCBjb25zdCBHcmlkQXJlYSYsIGJvb2wgaXNPcnRob2dvbmFsQ2hpbGQpOworCisgICAgICAg
IGJvb2wgaGFzSW5GbG93R3JpZEl0ZW1zKCkgY29uc3QgeyByZXR1cm4gIW1fZ3JpZEl0ZW1BcmVh
LmlzRW1wdHkoKTsgfQorICAgICAgICBib29sIGhhc0FueU9ydGhvZ29uYWxDaGlsZHJlbigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQW55T3J0aG9nb25hbENoaWxkcmVuOyB9CisKKyAgICAgICAgR3Jp
ZEFyZWEgZ3JpZEl0ZW1BcmVhKGNvbnN0IFJlbmRlckJveCYgaXRlbSkgY29uc3Q7CisgICAgICAg
IHZvaWQgc2V0R3JpZEl0ZW1BcmVhKGNvbnN0IFJlbmRlckJveCYgaXRlbSwgR3JpZEFyZWEpOwog
CiAgICAgICAgIGNvbnN0IEdyaWRDZWxsJiBjZWxsKHVuc2lnbmVkIHJvdywgdW5zaWduZWQgY29s
dW1uKSBjb25zdCB7IHJldHVybiBtX2dyaWRbcm93XVtjb2x1bW5dOyB9CiAKKyAgICAgICAgaW50
IHNtYWxsZXN0VHJhY2tTdGFydChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OworICAg
ICAgICB2b2lkIHNldFNtYWxsZXN0VHJhY2tzU3RhcnQoaW50IHJvd1N0YXJ0LCBpbnQgY29sdW1u
U3RhcnQpOwogICAgICAgICB2b2lkIHNocmlua1RvRml0KCkgeyBtX2dyaWQuc2hyaW5rVG9GaXQo
KTsgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBHcmlkSXRlcmF0b3I7CisKKyAgICAgICAgaW50IG1fc21hbGxlc3RDb2x1bW5T
dGFydCB7IDAgfTsKKyAgICAgICAgaW50IG1fc21hbGxlc3RSb3dTdGFydCB7IDAgfTsKKworICAg
ICAgICBib29sIG1faGFzQW55T3J0aG9nb25hbENoaWxkcmVuIHsgZmFsc2UgfTsKKwogICAgICAg
ICBHcmlkQXNNYXRyaXggbV9ncmlkOworCisgICAgICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyQm94
KiwgR3JpZEFyZWE+IG1fZ3JpZEl0ZW1BcmVhOworICAgICAgICBIYXNoTWFwPGNvbnN0IFJlbmRl
ckJveCosIHNpemVfdD4gbV9ncmlkSXRlbXNJbmRleGVzTWFwOwogICAgIH07CiAgICAgR3JpZCBt
X2dyaWQ7CiAKQEAgLTIyNSwyMCArMjQyLDE0IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPExheW91
dFVuaXQ+IG1fcm93UG9zaXRpb25zOwogICAgIExheW91dFVuaXQgbV9vZmZzZXRCZXR3ZWVuQ29s
dW1uczsKICAgICBMYXlvdXRVbml0IG1fb2Zmc2V0QmV0d2VlblJvd3M7Ci0gICAgSGFzaE1hcDxj
b25zdCBSZW5kZXJCb3gqLCBHcmlkQXJlYT4gbV9ncmlkSXRlbUFyZWE7CiAgICAgT3JkZXJJdGVy
YXRvciBtX29yZGVySXRlcmF0b3I7CiAKICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBtX21pbkNv
bnRlbnRIZWlnaHQ7CiAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbV9tYXhDb250ZW50SGVpZ2h0
OwogCi0gICAgaW50IG1fc21hbGxlc3RDb2x1bW5TdGFydDsKLSAgICBpbnQgbV9zbWFsbGVzdFJv
d1N0YXJ0OwotCiAgICAgdW5zaWduZWQgbV9hdXRvUmVwZWF0Q29sdW1ucyB7IDAgfTsKICAgICB1
bnNpZ25lZCBtX2F1dG9SZXBlYXRSb3dzIHsgMCB9OwogCi0gICAgYm9vbCBtX2hhc0FueU9ydGhv
Z29uYWxDaGlsZDsKLQogICAgIGJvb2wgbV9ncmlkSXNEaXJ0eSB7IHRydWUgfTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJhY2tJbmRleFNldD4gbV9hdXRvUmVwZWF0RW1wdHlDb2x1
bW5zIHsgbnVsbHB0ciB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295425</attachid>
            <date>2016-11-25 08:19:21 -0800</date>
            <delta_ts>2016-11-27 09:51:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165065-20161125171901.patch</filename>
            <type>text/plain</type>
            <size>17739</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJkZjlkNDk1YjEzODU3
OGRkZTllZWQ5ZjI5NzMyY2M0ZDFlYTNmZS4uNWE5ODgxYzJkNWQ2NDIzNzQxNjgzMDI2ZjJkODQ3
ODA2ODcwOWFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE2LTExLTI0ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gTW92ZSBhdHRyaWJ1dGVzIGZyb20gUmVuZGVyR3JpZCB0byB0aGUgbmV3IEdyaWQgY2xhc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTA2NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgbmV3IGNs
YXNzIGNhbGxlZCBHcmlkIHdhcyBhZGRlZCBpbiAyMDg5NzMuIFRoaXMgaXMgdGhlIGZpcnN0IG9m
IGEgY291cGxlIG9mIHBhdGNoZXMgbW92aW5nCisgICAgICAgIHByaXZhdGUgYXR0cmlidXRlcyBm
cm9tIFJlbmRlckdyaWQgdG8gR3JpZC4KKworICAgICAgICBBcGFydCBmcm9tIHRoYXQgdGhpcyBp
cyBhZGRpbmcgYSBjb3VwbGUgb2YgbmV3IGhlbHBlciBmdW5jdGlvbnMgdGhhdCB3aWxsIGRlY291
cGxlIHRoZQorICAgICAgICBleGlzdGVuY2Ugb2YgaW4tZmxvdyBpdGVtcyBmcm9tIHRoZSBhY3R1
YWwgZGF0YSBzdHJ1Y3R1cmVzIHN0b3JpbmcgdGhhdCBpbmZvcm1hdGlvbi4KKworICAgICAgICBM
YXN0IGJ1dCBub3QgbGVhc3QsIHRoZSBHcmlkOjppbnNlcnQoKSBtZXRob2QgZG9lcyBub3Qgb25s
eSBpbnNlcnQgdGhlIGl0ZW0gaW4gdGhlIG1fZ3JpZAorICAgICAgICBkYXRhIHN0cnVjdHVyZSwg
YnV0IGFsc28gc3RvcmVzIHRoZSBHcmlkQXJlYSBhc3NvY2lhdGVkIHRvIHRoYXQgaXRlbSwgc28g
dGhlcmUgaXMgbm8gbmVlZCB0bworICAgICAgICBkbyBpdCBpbiB0d28gZGlmZmVyZW50IGNhbGxz
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJlZCBhcyB0aGlzIGlzIGEgcmVmYWN0b3Jp
bmcuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJHcmlkOjpHcmlkOjppbnNlcnQpOiBBZGRlZCBhIG5ldyBwYXJhbWV0ZXIuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkOjpzZXRTbWFsbGVzdFRyYWNrc1N0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OkdyaWQ6OnNtYWxsZXN0VHJhY2tTdGFy
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkOjpncmlkSXRlbUFyZWEpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6R3JpZDo6c2V0R3JpZEl0ZW1BcmVhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OkdyaWQ6OmNsZWFyKTogQ2xlYXIgdGhlIG5ld2x5
IGFkZGVkIGF0dHJpYnV0ZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXBlYXRU
cmFja3NTaXppbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb21w
dXRlVXNlZEJyZWFkdGhPZkdyaWRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cmF3R3JpZFRyYWNrU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpyZXNv
bHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzRm9yQXV0b1JlcGVhdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25H
cmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0
ZW1PbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y2xlYXJHcmlkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6Om9mZnNldEFuZEJyZWFkdGhGb3JQb3NpdGlvbmVk
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y2FjaGVkR3JpZFNwYW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y2FjaGVkR3JpZEFyZWEpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmg6CisKIDIwMTYtMTEtMjMgIFNlcmdpbyBW
aWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1ncmlkXSBD
b252ZXJ0IGdyaWQgcmVwcmVzZW50YXRpb24gaW50byBhIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggNDc1ZjU5MTRkYzIzOGM4NDA2MzZmYzhmMThmYWY2
OTljNWFhMWJmZi4uYzZmMTljZTNhMGIxOWE1ZjJhODc5ZjdiZmY0YTU5NWZmNmEwZmZkMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAtNzEsMTEgKzcxLDM5IEBA
IHZvaWQgUmVuZGVyR3JpZDo6R3JpZDo6aW5zZXJ0KFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IEdy
aWRBcmVhJiBhcmVhKQogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbHVtbiA6IGFyZWEuY29s
dW1ucykKICAgICAgICAgICAgIG1fZ3JpZFtyb3ddW2NvbHVtbl0uYXBwZW5kKCZjaGlsZCk7CiAg
ICAgfQorCisgICAgc2V0R3JpZEl0ZW1BcmVhKGNoaWxkLCBhcmVhKTsKK30KKwordm9pZCBSZW5k
ZXJHcmlkOjpHcmlkOjpzZXRTbWFsbGVzdFRyYWNrc1N0YXJ0KGludCByb3dTdGFydCwgaW50IGNv
bHVtblN0YXJ0KQoreworICAgIG1fc21hbGxlc3RSb3dTdGFydCA9IHJvd1N0YXJ0OworICAgIG1f
c21hbGxlc3RDb2x1bW5TdGFydCA9IGNvbHVtblN0YXJ0OworfQorCitpbnQgUmVuZGVyR3JpZDo6
R3JpZDo6c21hbGxlc3RUcmFja1N0YXJ0KEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rp
b24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JSb3dzID8gbV9zbWFsbGVz
dFJvd1N0YXJ0IDogbV9zbWFsbGVzdENvbHVtblN0YXJ0OworfQorCitHcmlkQXJlYSBSZW5kZXJH
cmlkOjpHcmlkOjpncmlkSXRlbUFyZWEoY29uc3QgUmVuZGVyQm94JiBpdGVtKSBjb25zdAorewor
ICAgIEFTU0VSVChtX2dyaWRJdGVtQXJlYS5jb250YWlucygmaXRlbSkpOworICAgIHJldHVybiBt
X2dyaWRJdGVtQXJlYS5nZXQoJml0ZW0pOworfQorCit2b2lkIFJlbmRlckdyaWQ6OkdyaWQ6OnNl
dEdyaWRJdGVtQXJlYShjb25zdCBSZW5kZXJCb3gmIGl0ZW0sIEdyaWRBcmVhIGFyZWEpCit7Cisg
ICAgbV9ncmlkSXRlbUFyZWEuc2V0KCZpdGVtLCBhcmVhKTsKIH0KIAogdm9pZCBSZW5kZXJHcmlk
OjpHcmlkOjpjbGVhcigpCiB7CiAgICAgbV9ncmlkLnJlc2l6ZSgwKTsKKyAgICBtX2dyaWRJdGVt
QXJlYS5jbGVhcigpOworICAgIG1faGFzQW55T3J0aG9nb25hbEdyaWRJdGVtID0gZmFsc2U7Cisg
ICAgbV9zbWFsbGVzdFJvd1N0YXJ0ID0gMDsKKyAgICBtX3NtYWxsZXN0Q29sdW1uU3RhcnQgPSAw
OwogfQogCiBjbGFzcyBHcmlkVHJhY2sgewpAQCAtNDY3LDcgKzQ5NSw3IEBAIHZvaWQgUmVuZGVy
R3JpZDo6cmVwZWF0VHJhY2tzU2l6aW5nSWZOZWVkZWQoR3JpZFNpemluZ0RhdGEmIHNpemluZ0Rh
dGEsIExheW91dFVuCiAgICAgLy8gYSBuZXcgY3ljbGUgb2YgdGhlIHNpemluZyBhbGdvcml0aG07
IHRoZXJlIG1heSBiZSBtb3JlLiBJbiBhZGRpdGlvbiwgbm90IGFsbCB0aGUKICAgICAvLyBjYXNl
cyB3aXRoIG9ydGhvZ29uYWwgZmxvd3MgcmVxdWlyZSB0aGlzIGV4dHJhIGN5Y2xlOyB3ZSBuZWVk
IGEgbW9yZSBzcGVjaWZpYwogICAgIC8vIGNvbmRpdGlvbiB0byBkZXRlY3Qgd2hldGhlciBjaGls
ZCdzIG1pbi1jb250ZW50IGNvbnRyaWJ1dGlvbiBoYXMgY2hhbmdlZCBvciBub3QuCi0gICAgaWYg
KG1faGFzQW55T3J0aG9nb25hbENoaWxkKSB7CisgICAgaWYgKG1fZ3JpZC5oYXNBbnlPcnRob2dv
bmFsR3JpZEl0ZW0oKSkgewogICAgICAgICBjb21wdXRlVHJhY2tTaXplc0ZvckRpcmVjdGlvbihG
b3JDb2x1bW5zLCBzaXppbmdEYXRhLCBhdmFpbGFibGVTcGFjZUZvckNvbHVtbnMpOwogICAgICAg
ICBjb21wdXRlVHJhY2tTaXplc0ZvckRpcmVjdGlvbihGb3JSb3dzLCBzaXppbmdEYXRhLCBhdmFp
bGFibGVTcGFjZUZvclJvd3MpOwogICAgIH0KQEAgLTgyMSw3ICs4NDksNyBAQCB2b2lkIFJlbmRl
ckdyaWQ6OmNvbXB1dGVVc2VkQnJlYWR0aE9mR3JpZFRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gZGlyZWN0aQogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrSW5kZXggOiBmbGV4
aWJsZVNpemVkVHJhY2tzSW5kZXgpCiAgICAgICAgICAgICBmbGV4RnJhY3Rpb24gPSBzdGQ6Om1h
eChmbGV4RnJhY3Rpb24sIG5vcm1hbGl6ZWRGbGV4RnJhY3Rpb24odHJhY2tzW3RyYWNrSW5kZXhd
LCBncmlkVHJhY2tTaXplKGRpcmVjdGlvbiwgdHJhY2tJbmRleCwgc2l6aW5nRGF0YS5zaXppbmdP
cGVyYXRpb24pLm1heFRyYWNrQnJlYWR0aCgpLmZsZXgoKSkpOwogCi0gICAgICAgIGlmICghbV9n
cmlkSXRlbUFyZWEuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2dyaWQuaGFzR3JpZEl0ZW1z
KCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmbGV4aWJsZVNpemVk
VHJhY2tzSW5kZXguc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBHcmlkSXRlcmF0b3Ig
aXRlcmF0b3IobV9ncmlkLCBkaXJlY3Rpb24sIGZsZXhpYmxlU2l6ZWRUcmFja3NJbmRleFtpXSk7
CiAgICAgICAgICAgICAgICAgd2hpbGUgKGF1dG8qIGdyaWRJdGVtID0gaXRlcmF0b3IubmV4dEdy
aWRJdGVtKCkpIHsKQEAgLTEwMDcsNyArMTAzNSw3IEBAIGNvbnN0IEdyaWRUcmFja1NpemUmIFJl
bmRlckdyaWQ6OnJhd0dyaWRUcmFja1NpemUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
CiAgICAgLy8gZ3JpZC10ZW1wbGF0ZS1hcmVhcyBpcyBzcGVjaWZpZWQgZm9yIGV4YW1wbGUpLgog
ICAgIHVuc2lnbmVkIGV4cGxpY2l0VHJhY2tzQ291bnQgPSB0cmFja1N0eWxlcy5zaXplKCkgKyBh
dXRvUmVwZWF0VHJhY2tzQ291bnQ7CiAKLSAgICBpbnQgdW50cmFuc2xhdGVkSW5kZXhBc0ludCA9
IHRyYW5zbGF0ZWRJbmRleCArIChpc1Jvd0F4aXMgPyBtX3NtYWxsZXN0Q29sdW1uU3RhcnQgOiBt
X3NtYWxsZXN0Um93U3RhcnQpOworICAgIGludCB1bnRyYW5zbGF0ZWRJbmRleEFzSW50ID0gdHJh
bnNsYXRlZEluZGV4ICsgbV9ncmlkLnNtYWxsZXN0VHJhY2tTdGFydChkaXJlY3Rpb24pOwogICAg
IHVuc2lnbmVkIGF1dG9UcmFja1N0eWxlc1NpemUgPSBhdXRvVHJhY2tTdHlsZXMuc2l6ZSgpOwog
ICAgIGlmICh1bnRyYW5zbGF0ZWRJbmRleEFzSW50IDwgMCkgewogICAgICAgICBpbnQgaW5kZXgg
PSB1bnRyYW5zbGF0ZWRJbmRleEFzSW50ICUgc3RhdGljX2Nhc3Q8aW50PihhdXRvVHJhY2tTdHls
ZXNTaXplKTsKQEAgLTEyMjAsNyArMTI0OCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cmVzb2x2ZUNv
bnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVuY3Rpb25zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvCiB7
CiAgICAgc2l6aW5nRGF0YS5pdGVtc1NvcnRlZEJ5SW5jcmVhc2luZ1NwYW4uc2hyaW5rKDApOwog
ICAgIEhhc2hTZXQ8UmVuZGVyQm94Kj4gaXRlbXNTZXQ7Ci0gICAgaWYgKCFtX2dyaWRJdGVtQXJl
YS5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9ncmlkLmhhc0dyaWRJdGVtcygpKSB7CiAgICAgICAg
IGZvciAoYXV0byB0cmFja0luZGV4IDogc2l6aW5nRGF0YS5jb250ZW50U2l6ZWRUcmFja3NJbmRl
eCkgewogICAgICAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwgZGlyZWN0aW9u
LCB0cmFja0luZGV4KTsKICAgICAgICAgICAgIEdyaWRUcmFjayYgdHJhY2sgPSAoZGlyZWN0aW9u
ID09IEZvckNvbHVtbnMpID8gc2l6aW5nRGF0YS5jb2x1bW5UcmFja3NbdHJhY2tJbmRleF0gOiBz
aXppbmdEYXRhLnJvd1RyYWNrc1t0cmFja0luZGV4XTsKQEAgLTE2MjksMTAgKzE2NTcsMTAgQEAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlckdyaWQ6Ok9yZGVyZWRUcmFja0luZGV4U2V0PiBSZW5kZXJH
cmlkOjpjb21wdXRlRW1wdHlUcmFja3MKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxPcmRlcmVkVHJh
Y2tJbmRleFNldD4gZW1wdHlUcmFja0luZGV4ZXM7CiAgICAgdW5zaWduZWQgaW5zZXJ0aW9uUG9p
bnQgPSBpc1Jvd0F4aXMgPyBzdHlsZSgpLmdyaWRBdXRvUmVwZWF0Q29sdW1uc0luc2VydGlvblBv
aW50KCkgOiBzdHlsZSgpLmdyaWRBdXRvUmVwZWF0Um93c0luc2VydGlvblBvaW50KCk7Ci0gICAg
dW5zaWduZWQgZmlyc3RBdXRvUmVwZWF0VHJhY2sgPSBpbnNlcnRpb25Qb2ludCArIHN0ZDo6YWJz
KGlzUm93QXhpcyA/IG1fc21hbGxlc3RDb2x1bW5TdGFydCA6IG1fc21hbGxlc3RSb3dTdGFydCk7
CisgICAgdW5zaWduZWQgZmlyc3RBdXRvUmVwZWF0VHJhY2sgPSBpbnNlcnRpb25Qb2ludCArIHN0
ZDo6YWJzKG1fZ3JpZC5zbWFsbGVzdFRyYWNrU3RhcnQoZGlyZWN0aW9uKSk7CiAgICAgdW5zaWdu
ZWQgbGFzdEF1dG9SZXBlYXRUcmFjayA9IGZpcnN0QXV0b1JlcGVhdFRyYWNrICsgYXV0b1JlcGVh
dENvdW50Rm9yRGlyZWN0aW9uKGRpcmVjdGlvbik7CiAKLSAgICBpZiAobV9ncmlkSXRlbUFyZWEu
aXNFbXB0eSgpKSB7CisgICAgaWYgKCFtX2dyaWQuaGFzR3JpZEl0ZW1zKCkpIHsKICAgICAgICAg
ZW1wdHlUcmFja0luZGV4ZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPE9yZGVyZWRUcmFja0luZGV4U2V0
PigpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRyYWNrSW5kZXggPSBmaXJzdEF1dG9SZXBlYXRU
cmFjazsgdHJhY2tJbmRleCA8IGxhc3RBdXRvUmVwZWF0VHJhY2s7ICsrdHJhY2tJbmRleCkKICAg
ICAgICAgICAgIGVtcHR5VHJhY2tJbmRleGVzLT5hZGQodHJhY2tJbmRleCk7CkBAIC0xNjUyLDMx
ICsxNjgwLDMxIEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJHcmlkOjpPcmRlcmVkVHJhY2tJbmRl
eFNldD4gUmVuZGVyR3JpZDo6Y29tcHV0ZUVtcHR5VHJhY2tzCiB2b2lkIFJlbmRlckdyaWQ6OnBs
YWNlSXRlbXNPbkdyaWQoU2l6aW5nT3BlcmF0aW9uIHNpemluZ09wZXJhdGlvbikKIHsKICAgICBB
U1NFUlQobV9ncmlkSXNEaXJ0eSk7Ci0gICAgQVNTRVJUKG1fZ3JpZEl0ZW1BcmVhLmlzRW1wdHko
KSk7CisgICAgQVNTRVJUKCFtX2dyaWQuaGFzR3JpZEl0ZW1zKCkpOwogCiAgICAgbV9hdXRvUmVw
ZWF0Q29sdW1ucyA9IGNvbXB1dGVBdXRvUmVwZWF0VHJhY2tzQ291bnQoRm9yQ29sdW1ucywgc2l6
aW5nT3BlcmF0aW9uKTsKICAgICBtX2F1dG9SZXBlYXRSb3dzID0gY29tcHV0ZUF1dG9SZXBlYXRU
cmFja3NDb3VudChGb3JSb3dzLCBzaXppbmdPcGVyYXRpb24pOwogCiAgICAgcG9wdWxhdGVFeHBs
aWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yKCk7CiAgICAgbV9ncmlkSXNEaXJ0eSA9IGZhbHNlOwor
ICAgIGJvb2wgaGFzQW55T3J0aG9nb25hbEdyaWRJdGVtID0gZmFsc2U7CiAKICAgICBWZWN0b3I8
UmVuZGVyQm94Kj4gYXV0b01ham9yQXhpc0F1dG9HcmlkSXRlbXM7CiAgICAgVmVjdG9yPFJlbmRl
ckJveCo+IHNwZWNpZmllZE1ham9yQXhpc0F1dG9HcmlkSXRlbXM7Ci0gICAgbV9oYXNBbnlPcnRo
b2dvbmFsQ2hpbGQgPSBmYWxzZTsKICAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBtX29yZGVy
SXRlcmF0b3IuZmlyc3QoKTsgY2hpbGQ7IGNoaWxkID0gbV9vcmRlckl0ZXJhdG9yLm5leHQoKSkg
ewogICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgbV9oYXNBbnlPcnRob2dvbmFsQ2hpbGQgPSBtX2hhc0Fu
eU9ydGhvZ29uYWxDaGlsZCB8fCBpc09ydGhvZ29uYWxDaGlsZCgqY2hpbGQpOworICAgICAgICBo
YXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gPSBoYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gfHwgaXNP
cnRob2dvbmFsQ2hpbGQoKmNoaWxkKTsKIAotICAgICAgICBHcmlkQXJlYSBhcmVhID0gY2FjaGVk
R3JpZEFyZWEoKmNoaWxkKTsKKyAgICAgICAgR3JpZEFyZWEgYXJlYSA9IG1fZ3JpZC5ncmlkSXRl
bUFyZWEoKmNoaWxkKTsKICAgICAgICAgaWYgKCFhcmVhLnJvd3MuaXNJbmRlZmluaXRlKCkpCi0g
ICAgICAgICAgICBhcmVhLnJvd3MudHJhbnNsYXRlKHN0ZDo6YWJzKG1fc21hbGxlc3RSb3dTdGFy
dCkpOworICAgICAgICAgICAgYXJlYS5yb3dzLnRyYW5zbGF0ZShzdGQ6OmFicyhtX2dyaWQuc21h
bGxlc3RUcmFja1N0YXJ0KEZvclJvd3MpKSk7CiAgICAgICAgIGlmICghYXJlYS5jb2x1bW5zLmlz
SW5kZWZpbml0ZSgpKQotICAgICAgICAgICAgYXJlYS5jb2x1bW5zLnRyYW5zbGF0ZShzdGQ6OmFi
cyhtX3NtYWxsZXN0Q29sdW1uU3RhcnQpKTsKLSAgICAgICAgbV9ncmlkSXRlbUFyZWEuc2V0KGNo
aWxkLCBhcmVhKTsKKyAgICAgICAgICAgIGFyZWEuY29sdW1ucy50cmFuc2xhdGUoc3RkOjphYnMo
bV9ncmlkLnNtYWxsZXN0VHJhY2tTdGFydChGb3JDb2x1bW5zKSkpOwogCiAgICAgICAgIGlmIChh
cmVhLnJvd3MuaXNJbmRlZmluaXRlKCkgfHwgYXJlYS5jb2x1bW5zLmlzSW5kZWZpbml0ZSgpKSB7
CisgICAgICAgICAgICBtX2dyaWQuc2V0R3JpZEl0ZW1BcmVhKCpjaGlsZCwgYXJlYSk7CiAgICAg
ICAgICAgICBib29sIG1ham9yQXhpc0RpcmVjdGlvbklzRm9yQ29sdW1ucyA9IGF1dG9QbGFjZW1l
bnRNYWpvckF4aXNEaXJlY3Rpb24oKSA9PSBGb3JDb2x1bW5zOwogICAgICAgICAgICAgaWYgKCht
YWpvckF4aXNEaXJlY3Rpb25Jc0ZvckNvbHVtbnMgJiYgYXJlYS5jb2x1bW5zLmlzSW5kZWZpbml0
ZSgpKQogICAgICAgICAgICAgICAgIHx8ICghbWFqb3JBeGlzRGlyZWN0aW9uSXNGb3JDb2x1bW5z
ICYmIGFyZWEucm93cy5pc0luZGVmaW5pdGUoKSkpCkBAIC0xNjg3LDkgKzE3MTUsMTAgQEAgdm9p
ZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKFNpemluZ09wZXJhdGlvbiBzaXppbmdPcGVy
YXRpb24pCiAgICAgICAgIH0KICAgICAgICAgbV9ncmlkLmluc2VydCgqY2hpbGQsIHsgYXJlYS5y
b3dzLCBhcmVhLmNvbHVtbnMgfSk7CiAgICAgfQorICAgIG1fZ3JpZC5zZXRIYXNBbnlPcnRob2dv
bmFsR3JpZEl0ZW0oaGFzQW55T3J0aG9nb25hbEdyaWRJdGVtKTsKIAogI2lmIEVOQUJMRShBU1NF
UlQpCi0gICAgaWYgKCFtX2dyaWRJdGVtQXJlYS5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9ncmlk
Lmhhc0dyaWRJdGVtcygpKSB7CiAgICAgICAgIEFTU0VSVChncmlkUm93Q291bnQoKSA+PSBHcmlk
UG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZFJvd0NvdW50KHN0eWxlKCksIG1fYXV0b1Jl
cGVhdFJvd3MpKTsKICAgICAgICAgQVNTRVJUKGdyaWRDb2x1bW5Db3VudCgpID49IEdyaWRQb3Np
dGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUoKSwgbV9hdXRvUmVw
ZWF0Q29sdW1ucykpOwogICAgIH0KQEAgLTE3MDcsNyArMTczNiw3IEBAIHZvaWQgUmVuZGVyR3Jp
ZDo6cGxhY2VJdGVtc09uR3JpZChTaXppbmdPcGVyYXRpb24gc2l6aW5nT3BlcmF0aW9uKQogICAg
ICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgR3JpZEFyZWEgYXJlYSA9IGNhY2hlZEdyaWRBcmVhKCpjaGlsZCk7
CisgICAgICAgIEdyaWRBcmVhIGFyZWEgPSBtX2dyaWQuZ3JpZEl0ZW1BcmVhKCpjaGlsZCk7CiAg
ICAgICAgIEFTU0VSVChhcmVhLnJvd3MuaXNUcmFuc2xhdGVkRGVmaW5pdGUoKSAmJiBhcmVhLmNv
bHVtbnMuaXNUcmFuc2xhdGVkRGVmaW5pdGUoKSk7CiAgICAgfQogI2VuZGlmCkBAIC0xNzE2LDcg
KzE3NDUsOCBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQoU2l6aW5nT3BlcmF0
aW9uIHNpemluZ09wZXJhdGlvbikKIHZvaWQgUmVuZGVyR3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdy
aWRBbmRPcmRlckl0ZXJhdG9yKCkKIHsKICAgICBPcmRlckl0ZXJhdG9yUG9wdWxhdG9yIHBvcHVs
YXRvcihtX29yZGVySXRlcmF0b3IpOwotICAgIG1fc21hbGxlc3RSb3dTdGFydCA9IG1fc21hbGxl
c3RDb2x1bW5TdGFydCA9IDA7CisgICAgaW50IHNtYWxsZXN0Um93U3RhcnQgPSAwOworICAgIGlu
dCBzbWFsbGVzdENvbHVtblN0YXJ0ID0gMDsKICAgICB1bnNpZ25lZCBtYXhpbXVtUm93SW5kZXgg
PSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZFJvd0NvdW50KHN0eWxlKCksIG1f
YXV0b1JlcGVhdFJvd3MpOwogICAgIHVuc2lnbmVkIG1heGltdW1Db2x1bW5JbmRleCA9IEdyaWRQ
b3NpdGlvbnNSZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUoKSwgbV9hdXRv
UmVwZWF0Q29sdW1ucyk7CiAKQEAgLTE3MjgsNyArMTc1OCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6
cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9yKCkKIAogICAgICAgICBHcmlkU3Bh
biByb3dQb3NpdGlvbnMgPSBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OnJlc29sdmVHcmlkUG9zaXRp
b25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yUm93cywgbV9hdXRvUmVwZWF0Um93cyk7
CiAgICAgICAgIGlmICghcm93UG9zaXRpb25zLmlzSW5kZWZpbml0ZSgpKSB7Ci0gICAgICAgICAg
ICBtX3NtYWxsZXN0Um93U3RhcnQgPSBzdGQ6Om1pbihtX3NtYWxsZXN0Um93U3RhcnQsIHJvd1Bv
c2l0aW9ucy51bnRyYW5zbGF0ZWRTdGFydExpbmUoKSk7CisgICAgICAgICAgICBzbWFsbGVzdFJv
d1N0YXJ0ID0gc3RkOjptaW4oc21hbGxlc3RSb3dTdGFydCwgcm93UG9zaXRpb25zLnVudHJhbnNs
YXRlZFN0YXJ0TGluZSgpKTsKICAgICAgICAgICAgIG1heGltdW1Sb3dJbmRleCA9IHN0ZDo6bWF4
PGludD4obWF4aW11bVJvd0luZGV4LCByb3dQb3NpdGlvbnMudW50cmFuc2xhdGVkRW5kTGluZSgp
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEdyb3cgdGhlIGdyaWQgZm9yIGl0
ZW1zIHdpdGggYSBkZWZpbml0ZSByb3cgc3BhbiwgZ2V0dGluZyB0aGUgbGFyZ2VzdCBzdWNoIHNw
YW4uCkBAIC0xNzM4LDcgKzE3NjgsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGlj
aXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpCiAKICAgICAgICAgR3JpZFNwYW4gY29sdW1uUG9zaXRp
b25zID0gR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHls
ZShzdHlsZSgpLCAqY2hpbGQsIEZvckNvbHVtbnMsIG1fYXV0b1JlcGVhdENvbHVtbnMpOwogICAg
ICAgICBpZiAoIWNvbHVtblBvc2l0aW9ucy5pc0luZGVmaW5pdGUoKSkgewotICAgICAgICAgICAg
bV9zbWFsbGVzdENvbHVtblN0YXJ0ID0gc3RkOjptaW4obV9zbWFsbGVzdENvbHVtblN0YXJ0LCBj
b2x1bW5Qb3NpdGlvbnMudW50cmFuc2xhdGVkU3RhcnRMaW5lKCkpOworICAgICAgICAgICAgc21h
bGxlc3RDb2x1bW5TdGFydCA9IHN0ZDo6bWluKHNtYWxsZXN0Q29sdW1uU3RhcnQsIGNvbHVtblBv
c2l0aW9ucy51bnRyYW5zbGF0ZWRTdGFydExpbmUoKSk7CiAgICAgICAgICAgICBtYXhpbXVtQ29s
dW1uSW5kZXggPSBzdGQ6Om1heDxpbnQ+KG1heGltdW1Db2x1bW5JbmRleCwgY29sdW1uUG9zaXRp
b25zLnVudHJhbnNsYXRlZEVuZExpbmUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBHcm93IHRoZSBncmlkIGZvciBpdGVtcyB3aXRoIGEgZGVmaW5pdGUgY29sdW1uIHNwYW4s
IGdldHRpbmcgdGhlIGxhcmdlc3Qgc3VjaCBzcGFuLgpAQCAtMTc0NiwxMCArMTc3NiwxMSBAQCB2
b2lkIFJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpCiAg
ICAgICAgICAgICBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1heChtYXhpbXVtQ29sdW1uSW5k
ZXgsIHNwYW5TaXplKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fZ3JpZEl0ZW1BcmVhLnNldChj
aGlsZCwgR3JpZEFyZWEocm93UG9zaXRpb25zLCBjb2x1bW5Qb3NpdGlvbnMpKTsKKyAgICAgICAg
bV9ncmlkLnNldEdyaWRJdGVtQXJlYSgqY2hpbGQsIHsgcm93UG9zaXRpb25zLCBjb2x1bW5Qb3Np
dGlvbnMgfSk7CiAgICAgfQogCi0gICAgbV9ncmlkLmVuc3VyZUdyaWRTaXplKG1heGltdW1Sb3dJ
bmRleCArIHN0ZDo6YWJzKG1fc21hbGxlc3RSb3dTdGFydCksIG1heGltdW1Db2x1bW5JbmRleCAr
IHN0ZDo6YWJzKG1fc21hbGxlc3RDb2x1bW5TdGFydCkpOworICAgIG1fZ3JpZC5zZXRTbWFsbGVz
dFRyYWNrc1N0YXJ0KHNtYWxsZXN0Um93U3RhcnQsIHNtYWxsZXN0Q29sdW1uU3RhcnQpOworICAg
IG1fZ3JpZC5lbnN1cmVHcmlkU2l6ZShtYXhpbXVtUm93SW5kZXggKyBzdGQ6OmFicyhzbWFsbGVz
dFJvd1N0YXJ0KSwgbWF4aW11bUNvbHVtbkluZGV4ICsgc3RkOjphYnMoc21hbGxlc3RDb2x1bW5T
dGFydCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8R3JpZEFyZWE+IFJlbmRlckdyaWQ6OmNyZWF0
ZUVtcHR5R3JpZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKGNvbnN0IFJlbmRl
ckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBzcGVjaWZpZWREaXJlY3Rp
b24sIGNvbnN0IEdyaWRTcGFuJiBzcGVjaWZpZWRQb3NpdGlvbnMpIGNvbnN0CkBAIC0xNzgzLDcg
KzE4MTQsNiBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNP
bkdyaWQoY29uc3QgVmVjdG9yPFJlbmRlckJveCo+JiBhdQogICAgICAgICBpZiAoIWVtcHR5R3Jp
ZEFyZWEpCiAgICAgICAgICAgICBlbXB0eUdyaWRBcmVhID0gY3JlYXRlRW1wdHlHcmlkQXJlYUF0
U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVu
dE1ham9yQXhpc0RpcmVjdGlvbigpLCBtYWpvckF4aXNQb3NpdGlvbnMpOwogCi0gICAgICAgIG1f
Z3JpZEl0ZW1BcmVhLnNldChhdXRvR3JpZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsKICAgICAgICAg
bV9ncmlkLmluc2VydCgqYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7CiAKICAgICAgICAg
aWYgKCFpc0dyaWRBdXRvRmxvd0RlbnNlKQpAQCAtMTg1Niw3ICsxODg2LDYgQEAgdm9pZCBSZW5k
ZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtT25HcmlkKFJlbmRlckJveCYgZ3JpZEl0ZW0s
IEF1dG9QbGFjZW1lbnQKICAgICAgICAgICAgIGVtcHR5R3JpZEFyZWEgPSBjcmVhdGVFbXB0eUdy
aWRBcmVhQXRTcGVjaWZpZWRQb3NpdGlvbnNPdXRzaWRlR3JpZChncmlkSXRlbSwgYXV0b1BsYWNl
bWVudE1pbm9yQXhpc0RpcmVjdGlvbigpLCBHcmlkU3Bhbjo6dHJhbnNsYXRlZERlZmluaXRlR3Jp
ZFNwYW4oMCwgbWlub3JBeGlzU3BhblNpemUpKTsKICAgICB9CiAKLSAgICBtX2dyaWRJdGVtQXJl
YS5zZXQoJmdyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7CiAgICAgbV9ncmlkLmluc2VydChncmlk
SXRlbSwgKmVtcHR5R3JpZEFyZWEpOwogICAgIGF1dG9QbGFjZW1lbnRDdXJzb3IuZmlyc3QgPSBl
bXB0eUdyaWRBcmVhLT5yb3dzLnN0YXJ0TGluZSgpOwogICAgIGF1dG9QbGFjZW1lbnRDdXJzb3Iu
c2Vjb25kID0gZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5zdGFydExpbmUoKTsKQEAgLTE4NzUsNyAr
MTkwNCw2IEBAIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBSZW5kZXJHcmlkOjphdXRvUGxhY2Vt
ZW50TWlub3JBeGlzRGlyZWN0aW9uKCkgY29uc3QKIHZvaWQgUmVuZGVyR3JpZDo6Y2xlYXJHcmlk
KCkKIHsKICAgICBtX2dyaWQuY2xlYXIoKTsKLSAgICBtX2dyaWRJdGVtQXJlYS5jbGVhcigpOwog
ICAgIG1fZ3JpZElzRGlydHkgPSB0cnVlOwogfQogCkBAIC0yMDU0LDcgKzIwODIsNyBAQCB2b2lk
IFJlbmRlckdyaWQ6Om9mZnNldEFuZEJyZWFkdGhGb3JQb3NpdGlvbmVkQ2hpbGQoY29uc3QgUmVu
ZGVyQm94JiBjaGlsZCwgR3JpZAogICAgIH0KIAogICAgIC8vIEZvciBwb3NpdGlvbmVkIGl0ZW1z
IHdlIGNhbm5vdCB1c2UgR3JpZFNwYW46OnRyYW5zbGF0ZSgpIGJlY2F1c2Ugd2UgY291bGQgZW5k
IHVwIHdpdGggbmVnYXRpdmUgdmFsdWVzLCBhcyB0aGUgcG9zaXRpb25lZCBpdGVtcyBkbyBub3Qg
Y3JlYXRlIGltcGxpY2l0IHRyYWNrcyBwZXIgc3BlYy4KLSAgICBpbnQgc21hbGxlc3RTdGFydCA9
IHN0ZDo6YWJzKGlzUm93QXhpcyA/IG1fc21hbGxlc3RDb2x1bW5TdGFydCA6IG1fc21hbGxlc3RS
b3dTdGFydCk7CisgICAgaW50IHNtYWxsZXN0U3RhcnQgPSBzdGQ6OmFicyhtX2dyaWQuc21hbGxl
c3RUcmFja1N0YXJ0KGRpcmVjdGlvbikpOwogICAgIGludCBzdGFydExpbmUgPSBwb3NpdGlvbnMu
dW50cmFuc2xhdGVkU3RhcnRMaW5lKCkgKyBzbWFsbGVzdFN0YXJ0OwogICAgIGludCBlbmRMaW5l
ID0gcG9zaXRpb25zLnVudHJhbnNsYXRlZEVuZExpbmUoKSArIHNtYWxsZXN0U3RhcnQ7CiAKQEAg
LTIxMTksMTUgKzIxNDcsOSBAQCB2b2lkIFJlbmRlckdyaWQ6Om9mZnNldEFuZEJyZWFkdGhGb3JQ
b3NpdGlvbmVkQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZAogICAgIH0KIH0KIAot
R3JpZEFyZWEgUmVuZGVyR3JpZDo6Y2FjaGVkR3JpZEFyZWEoY29uc3QgUmVuZGVyQm94JiBncmlk
SXRlbSkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9ncmlkSXRlbUFyZWEuY29udGFpbnMoJmdyaWRJ
dGVtKSk7Ci0gICAgcmV0dXJuIG1fZ3JpZEl0ZW1BcmVhLmdldCgmZ3JpZEl0ZW0pOwotfQotCiBH
cmlkU3BhbiBSZW5kZXJHcmlkOjpjYWNoZWRHcmlkU3Bhbihjb25zdCBSZW5kZXJCb3gmIGdyaWRJ
dGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAogewotICAgIEdy
aWRBcmVhIGFyZWEgPSBjYWNoZWRHcmlkQXJlYShncmlkSXRlbSk7CisgICAgR3JpZEFyZWEgYXJl
YSA9IG1fZ3JpZC5ncmlkSXRlbUFyZWEoZ3JpZEl0ZW0pOwogICAgIHJldHVybiBkaXJlY3Rpb24g
PT0gRm9yQ29sdW1ucyA/IGFyZWEuY29sdW1ucyA6IGFyZWEucm93czsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKaW5kZXggYTc2NjVhYzBjMzEyNmZmZGI4YjljOWI0MmJh
YmQyZjIyZGRjOGMyNS4uZTc5ZTMyOGVjNjAzMDU4NzZkN2E4OTFlZGZjYmQ2MDIxNjAxM2EyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCkBAIC0yMDksMTUgKzIwOSwzNyBA
QCBwcml2YXRlOgogICAgICAgICB2b2lkIGVuc3VyZUdyaWRTaXplKHVuc2lnbmVkIG1heGltdW1S
b3dTaXplLCB1bnNpZ25lZCBtYXhpbXVtQ29sdW1uU2l6ZSk7CiAgICAgICAgIHZvaWQgaW5zZXJ0
KFJlbmRlckJveCYsIGNvbnN0IEdyaWRBcmVhJik7CiAKKyAgICAgICAgLy8gTm90ZSB0aGF0IGVh
Y2ggaW4gZmxvdyBjaGlsZCBvZiBhIGdyaWQgY29udGFpbmVyIGJlY29tZXMgYSBncmlkIGl0ZW0u
IFRoaXMgbWVhbnMgdGhhdAorICAgICAgICAvLyB0aGlzIG1ldGhvZCB3aWxsIHJldHVybiBmYWxz
ZSBmb3IgYSBncmlkIGNvbnRhaW5lciB3aXRoIG9ubHkgb3V0IG9mIGZsb3cgY2hpbGRyZW4uCisg
ICAgICAgIGJvb2wgaGFzR3JpZEl0ZW1zKCkgY29uc3QgeyByZXR1cm4gIW1fZ3JpZEl0ZW1BcmVh
LmlzRW1wdHkoKTsgfQorCisgICAgICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gU2l6aW5nRGF0
YSBvbmNlIHBsYWNlSXRlbXNPbkdyaWQoKSB0YWtlcyBpdCBhcyBhcmd1bWVudC4KKyAgICAgICAg
Ym9vbCBoYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0oKSBjb25zdCB7IHJldHVybiBtX2hhc0FueU9y
dGhvZ29uYWxHcmlkSXRlbTsgfQorICAgICAgICB2b2lkIHNldEhhc0FueU9ydGhvZ29uYWxHcmlk
SXRlbShib29sIGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSkgeyBtX2hhc0FueU9ydGhvZ29uYWxH
cmlkSXRlbSA9IGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbTsgfQorCisgICAgICAgIEdyaWRBcmVh
IGdyaWRJdGVtQXJlYShjb25zdCBSZW5kZXJCb3gmIGl0ZW0pIGNvbnN0OworICAgICAgICB2b2lk
IHNldEdyaWRJdGVtQXJlYShjb25zdCBSZW5kZXJCb3gmIGl0ZW0sIEdyaWRBcmVhKTsKKwogICAg
ICAgICBjb25zdCBHcmlkQ2VsbCYgY2VsbCh1bnNpZ25lZCByb3csIHVuc2lnbmVkIGNvbHVtbikg
Y29uc3QgeyByZXR1cm4gbV9ncmlkW3Jvd11bY29sdW1uXTsgfQogCisgICAgICAgIGludCBzbWFs
bGVzdFRyYWNrU3RhcnQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKKyAgICAgICAg
dm9pZCBzZXRTbWFsbGVzdFRyYWNrc1N0YXJ0KGludCByb3dTdGFydCwgaW50IGNvbHVtblN0YXJ0
KTsKICAgICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpIHsgbV9ncmlkLnNocmlua1RvRml0KCk7IH0K
IAogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQg
Y2xhc3MgR3JpZEl0ZXJhdG9yOworCisgICAgICAgIGludCBtX3NtYWxsZXN0Q29sdW1uU3RhcnQg
eyAwIH07CisgICAgICAgIGludCBtX3NtYWxsZXN0Um93U3RhcnQgeyAwIH07CisKKyAgICAgICAg
Ym9vbCBtX2hhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSB7IGZhbHNlIH07CisKICAgICAgICAgR3Jp
ZEFzTWF0cml4IG1fZ3JpZDsKKworICAgICAgICBIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIEdy
aWRBcmVhPiBtX2dyaWRJdGVtQXJlYTsKKyAgICAgICAgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gq
LCBzaXplX3Q+IG1fZ3JpZEl0ZW1zSW5kZXhlc01hcDsKICAgICB9OwogICAgIEdyaWQgbV9ncmlk
OwogCkBAIC0yMjUsMjAgKzI0NywxNCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxMYXlvdXRVbml0
PiBtX3Jvd1Bvc2l0aW9uczsKICAgICBMYXlvdXRVbml0IG1fb2Zmc2V0QmV0d2VlbkNvbHVtbnM7
CiAgICAgTGF5b3V0VW5pdCBtX29mZnNldEJldHdlZW5Sb3dzOwotICAgIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyQm94KiwgR3JpZEFyZWE+IG1fZ3JpZEl0ZW1BcmVhOwogICAgIE9yZGVySXRlcmF0b3Ig
bV9vcmRlckl0ZXJhdG9yOwogCiAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gbV9taW5Db250ZW50
SGVpZ2h0OwogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IG1fbWF4Q29udGVudEhlaWdodDsKIAot
ICAgIGludCBtX3NtYWxsZXN0Q29sdW1uU3RhcnQ7Ci0gICAgaW50IG1fc21hbGxlc3RSb3dTdGFy
dDsKLQogICAgIHVuc2lnbmVkIG1fYXV0b1JlcGVhdENvbHVtbnMgeyAwIH07CiAgICAgdW5zaWdu
ZWQgbV9hdXRvUmVwZWF0Um93cyB7IDAgfTsKIAotICAgIGJvb2wgbV9oYXNBbnlPcnRob2dvbmFs
Q2hpbGQ7Ci0KICAgICBib29sIG1fZ3JpZElzRGlydHkgeyB0cnVlIH07CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8T3JkZXJlZFRyYWNrSW5kZXhTZXQ+IG1fYXV0b1JlcGVhdEVtcHR5Q29sdW1ucyB7
IG51bGxwdHIgfTsK
</data>
<flag name="review"
          id="318016"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>