<?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>201534</bug_id>
          
          <creation_ts>2019-09-05 21:13:49 -0700</creation_ts>
          <short_desc>PathDirect2D Cleanups</short_desc>
          <delta_ts>2019-09-06 19:40:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</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="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>pvollan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1568380</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-05 21:13:49 -0700</bug_when>
    <thetext>The initial PathDirect2D implementation had a few shortcomings:

1. COMPtr&lt;&gt; had no move operator, therefore the Path implementation couldn&apos;t move content.
2. Paths (ID2D1GeometryGroups) are frequently built up of ID2D1Geometry elements. But the append operation required retrieving the existing geometries, adding the new item, then loading back into an overall path object. By keeping track of the elements ourselves, we can avoid copying the elements into a temporary vector before building the appended ID2D1GeometryGroup.
3. There are rules about using ID2D1GeometrySink and ID2D1PathGeometry. After calling &apos;Close&apos; on an ID2D1GeometrySink supplied by a ID2D1PathGeometry, neither should be reused. Nothing prevented this mistake in the PathDirect2D implementation.

This patch cleans up these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568383</commentid>
    <comment_count>1</comment_count>
      <attachid>378158</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-05 21:28:00 -0700</bug_when>
    <thetext>Created attachment 378158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568384</commentid>
    <comment_count>2</comment_count>
      <attachid>378159</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-05 21:35:26 -0700</bug_when>
    <thetext>Created attachment 378159
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568415</commentid>
    <comment_count>3</comment_count>
      <attachid>378159</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-06 00:13:09 -0700</bug_when>
    <thetext>Comment on attachment 378159
Patch

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

&gt; Source/WebCore/platform/graphics/Path.h:199
&gt;          void drawDidComplete();

Path::drawDidComplete is not used anywhere in WebKit. It should be removed.

&gt; Source/WebCore/platform/graphics/Path.h:215
&gt;          COMPtr&lt;ID2D1PathGeometry&gt; m_activePathGeometry;

m_activePathGeometry is not needed because it is stored in m_geometries and the active path sync is stored in m_activePath.

&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:498
&gt; +    const_cast&lt;Path&amp;&gt;(path).closeAnyOpenGeometries(D2D1_FIGURE_END_OPEN);

Can you remove `const_cast` by making closeAnyOpenGeometries a mutable method?

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:118
&gt; +    HRESULT hr = GraphicsContext::systemFactory()-&gt;CreateGeometryGroup(fillMode, m_geometries.data(), m_geometries.size(), &amp;m_path);

Path::appendGeometry always create a GeometryGroup by calling CreateGeometryGroup.
Can it be done in Path::closeAnyOpenGeometries?

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:311
&gt; +        while (m_openFigureCount) {

m_openFigureCount can be 1 or 0. m_openFigureCount can be bool m_isFigureOpened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568417</commentid>
    <comment_count>4</comment_count>
      <attachid>378159</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-06 00:27:37 -0700</bug_when>
    <thetext>Comment on attachment 378159
Patch

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

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:343
&gt; +        closeAnyOpenGeometries(D2D1_FIGURE_END_OPEN);

You are trying to keep a active path still active even after transforming.
Is this really needed? If so, this is not a right way to do it.
You close the active path with D2D1_FIGURE_END_OPEN, and create a new one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568578</commentid>
    <comment_count>5</comment_count>
      <attachid>378205</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-06 10:43:34 -0700</bug_when>
    <thetext>Created attachment 378205
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568742</commentid>
    <comment_count>6</comment_count>
      <attachid>378205</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-06 15:48:48 -0700</bug_when>
    <thetext>Comment on attachment 378205
Patch

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

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:-220
&gt; -    HRESULT hr = const_cast&lt;Path*&gt;(this)-&gt;initializePathState();

Path::initializePathState becomes unused. Remove it.

&gt; Source/WebCore/platform/win/COMPtr.h:175
&gt; +        ptr-&gt;Release();

There is no reason to defer calling Release after assignment. Call Release before the assignment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568756</commentid>
    <comment_count>7</comment_count>
      <attachid>378205</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-06 16:15:59 -0700</bug_when>
    <thetext>Comment on attachment 378205
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:-220
&gt;&gt; -    HRESULT hr = const_cast&lt;Path*&gt;(this)-&gt;initializePathState();
&gt; 
&gt; Path::initializePathState becomes unused. Remove it.

Oh, so it does! Removed.

&gt;&gt; Source/WebCore/platform/win/COMPtr.h:175
&gt;&gt; +        ptr-&gt;Release();
&gt; 
&gt; There is no reason to defer calling Release after assignment. Call Release before the assignment.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568758</commentid>
    <comment_count>8</comment_count>
      <attachid>378250</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-06 16:19:11 -0700</bug_when>
    <thetext>Created attachment 378250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568806</commentid>
    <comment_count>9</comment_count>
      <attachid>378250</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-06 19:39:31 -0700</bug_when>
    <thetext>Comment on attachment 378250
Patch

Clearing flags on attachment: 378250

Committed r249604: &lt;https://trac.webkit.org/changeset/249604&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568807</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-06 19:39:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568808</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-06 19:40:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/55137930&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568809</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-06 19:40:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/55137931&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378158</attachid>
            <date>2019-09-05 21:28:00 -0700</date>
            <delta_ts>2019-09-05 21:35:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201534-20190905212759.patch</filename>
            <type>text/plain</type>
            <size>22783</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE5LTA5LTA1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFBhdGhEaXJlY3QyRCBDbGVh
bnVwcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAx
NTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4g
QWRkIGEgQ09NUHRyPD4gbW92ZSBvcGVyYXRvci4KKyAgICAgICAgMi4gUmVkdWNlIGNvcHlpbmcg
SUQyRDFHZW9tZXRyeSBvYmplY3RzLgorICAgICAgICAzLiBQcm90ZWN0IGFnYWluc3QgdXNpbmcg
dGhlIElEMkQxUGF0aEdlb21ldHJ5IGFmdGVyIHRoZQorICAgICAgICAgICBJRDJEMUdlb21ldHJ5
U2luaydzIENsb3NlIG9wZXJhdGlvbiBpcyB1c2VkLgorICAgICAgICA0LiBBZGQgYSBkZWJ1Zy1v
bmx5ICdyZWZDb3VudCcgZnVuY3Rpb24gdG8gQ09NUHRyIHRvIGhlbHAKKyAgICAgICAgICAgdHJh
Y2sgZG93biBtZW1vcnkgZXJyb3JzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWN0aXZlUGF0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlyZWN0MkQ6OmRyYXdQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0aERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ09NUHRyLmg6CisgICAg
ICAgIChDT01QdHI6OkNPTVB0cik6CisgICAgICAgICg9KToKKyAgICAgICAgKHJlZkNvdW50KToK
KwogMjAxOS0wOS0wNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4K
IAogICAgICAgICBbV2luXSBBZGQgc3VwcG9ydCBmb3IgTW91c2VFdmVudC5idXR0b25zCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiAyNDk0MTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NCwxNCArMTk0LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAj
aWYgVVNFKERJUkVDVDJEKQotICAgICAgICBJRDJEMUdlb21ldHJ5U2luayogYWN0aXZlUGF0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlUGF0aC5nZXQoKTsgfQogICAgICAgICB2b2lkIGFwcGVu
ZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqKTsKICAgICAgICAgdm9pZCBjcmVhdGVHZW9tZXRyeVdp
dGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mKSBjb25zdDsK
ICAgICAgICAgdm9pZCBkcmF3RGlkQ29tcGxldGUoKTsKIAogICAgICAgICBIUkVTVUxUIGluaXRp
YWxpemVQYXRoU3RhdGUoKTsKICAgICAgICAgdm9pZCBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICB2b2lkIGNsb3NlQW55T3Blbkdlb21ldHJpZXMoKTsKKyAg
ICAgICAgdm9pZCBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKHVuc2lnbmVkKTsKKyAgICAgICAgdm9p
ZCBjbGVhckdlb21ldHJpZXMoKTsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjEwLDYg
KzIxMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAjaWYgVVNFKERJ
UkVDVDJEKQorICAgICAgICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+IG1fZ2VvbWV0cmllczsKICAg
ICAgICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gbV9wYXRoOwogICAgICAgICBDT01QdHI8
SUQyRDFQYXRoR2VvbWV0cnk+IG1fYWN0aXZlUGF0aEdlb21ldHJ5OwogICAgICAgICBDT01QdHI8
SUQyRDFHZW9tZXRyeVNpbms+IG1fYWN0aXZlUGF0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyNDk0MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDExICs0
OTUsNyBAQCB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFBsYXRmb3JtQ29udGV4CiAKIHZvaWQg
ZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3Qg
UGF0aCYgcGF0aCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU2hhZG93U3Rh
dGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChwYXRoLmFjdGl2ZVBhdGgoKSkgewotICAgICAg
ICAvLyBNYWtlIHN1cmUgaXQncyBjbG9zZWQuIFRoaXMgbWlnaHQgZmFpbCBpZiB0aGUgcGF0aCB3
YXMgYWxyZWFkeSBjbG9zZWQsIHNvCi0gICAgICAgIC8vIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVl
LgotICAgICAgICBwYXRoLmFjdGl2ZVBhdGgoKS0+Q2xvc2UoKTsKLSAgICB9CisgICAgY29uc3Rf
Y2FzdDxQYXRoJj4ocGF0aCkuY2xvc2VBbnlPcGVuR2VvbWV0cmllcyhEMkQxX0ZJR1VSRV9FTkRf
T1BFTik7CiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCk7CiAKQEAgLTU4Miw4ICs1NzgsNyBAQCB2b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiBwCiB7CiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpOwogCi0gICAgaWYgKHBhdGguYWN0aXZlUGF0aCgpKQotICAgICAgICBwYXRoLmFjdGl2
ZVBhdGgoKS0+Q2xvc2UoKTsKKyAgICBjb25zdF9jYXN0PFBhdGgmPihwYXRoKS5jbG9zZUFueU9w
ZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKIAogICAgIGNvbnRleHQtPlNldFRh
Z3MoMSwgX19MSU5FX18pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGF0aERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5NDE2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02Miw5ICs2Miw5IEBAIFBhdGggUGF0aDo6cG9seWdvblBhdGhGcm9tUG9p
bnRzKGNvbnN0IFYKIAogICAgIHBhdGgubW92ZVRvKHBvaW50cy5maXJzdCgpKTsKIAotICAgIEFT
U0VSVChwYXRoLmFjdGl2ZVBhdGgoKSk7CisgICAgQVNTRVJUKHBhdGgubV9hY3RpdmVQYXRoKTsK
IAotICAgIHBhdGguYWN0aXZlUGF0aCgpLT5BZGRMaW5lcyhkMmRQb2ludHMuZGF0YSgpLCBkMmRQ
b2ludHMuc2l6ZSgpKTsKKyAgICBwYXRoLm1fYWN0aXZlUGF0aC0+QWRkTGluZXMoZDJkUG9pbnRz
LmRhdGEoKSwgZDJkUG9pbnRzLnNpemUoKSk7CiAgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKIAog
ICAgIHJldHVybiBwYXRoOwpAQCAtNzIsNyArNzIsMTAgQEAgUGF0aCBQYXRoOjpwb2x5Z29uUGF0
aEZyb21Qb2ludHMoY29uc3QgVgogCiBQYXRoOjpQYXRoKCkgPSBkZWZhdWx0OwogCi1QYXRoOjp+
UGF0aCgpID0gZGVmYXVsdDsKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBjbGVhckdlb21ldHJpZXMo
KTsKK30KIAogUGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVuc3VyZVBsYXRmb3JtUGF0aCgpCiB7CkBA
IC04MSwzNCArODQsNDEgQEAgUGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVuc3VyZVBsYXRmb3JtUGF0
aAogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgICAgIGlmIChGQUlMRUQoaHIp
KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEFTU0VSVChyZWZDb3VudCht
X3BhdGguZ2V0KCkpID09IDEpOwogICAgIH0KIAogICAgIHJldHVybiBtX3BhdGguZ2V0KCk7CiB9
CiAKK3ZvaWQgUGF0aDo6Y2xlYXJHZW9tZXRyaWVzKCkKK3sKKyAgICAvLyBNYW51YWxseSBjbGVh
biB0aGVzZSB1cCBzbyB0aGF0IHdlIGNhbiB1c2UgdGhpcyB2ZWN0b3Igd2l0aCBEaXJlY3QyRCBB
UElzLgorICAgIGZvciAoYXV0byogZ2VvbWV0cnkgOiBtX2dlb21ldHJpZXMpCisgICAgICAgIGdl
b21ldHJ5LT5SZWxlYXNlKCk7CisgICAgbV9nZW9tZXRyaWVzLmNsZWFyKCk7Cit9CisKIHZvaWQg
UGF0aDo6YXBwZW5kR2VvbWV0cnkoSUQyRDFHZW9tZXRyeSogZ2VvbWV0cnkpCiB7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KGdlb21ldHJ5KTsK
KyNlbmRpZgorCiAgICAgdW5zaWduZWQgZ2VvbWV0cnlDb3VudCA9IG1fcGF0aCA/IG1fcGF0aC0+
R2V0U291cmNlR2VvbWV0cnlDb3VudCgpIDogMDsKLSAgICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+
IGdlb21ldHJpZXMoZ2VvbWV0cnlDb3VudCwgbnVsbHB0cik7CiAKLSAgICAvLyBOb3RlOiAnR2V0
U291cmNlR2VvbWV0cmllcycgcmV0dXJucyBnZW9tZXRyaWVzIHRoYXQgaGF2ZSBhICsxIHJlZiBj
b3VudC4KLSAgICAvLyBzbyB0aGV5IG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHdlIHJldHVybi4K
LSAgICBpZiAoZ2VvbWV0cnlDb3VudCkKLSAgICAgICAgbV9wYXRoLT5HZXRTb3VyY2VHZW9tZXRy
aWVzKGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyeUNvdW50KTsKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2dlb21ldHJpZXMuc2l6ZSgpID09IGdlb21ldHJ5Q291bnQpOwogCiAgICAgZ2VvbWV0cnkt
PkFkZFJlZigpOwotICAgIGdlb21ldHJpZXMuYXBwZW5kKGdlb21ldHJ5KTsKKyAgICBtX2dlb21l
dHJpZXMuYXBwZW5kKGdlb21ldHJ5KTsKIAogICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGggPyBt
X3BhdGgtPkdldEZpbGxNb2RlKCkgOiBEMkQxX0ZJTExfTU9ERV9XSU5ESU5HOwogCi0gICAgQ09N
UHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcHJvdGVjdGVkUGF0aCA9IG1fcGF0aDsKICAgICBtX3Bh
dGggPSBudWxscHRyOwogCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVt
RmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBnZW9tZXRyaWVzLmRhdGEo
KSwgZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOworICAgIEhSRVNVTFQgaHIgPSBHcmFwaGlj
c0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwg
bV9nZW9tZXRyaWVzLmRhdGEoKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICBmb3IgKGF1dG8gZW50cnkgOiBn
ZW9tZXRyaWVzKQotICAgICAgICBlbnRyeS0+UmVsZWFzZSgpOworICAgIEFTU0VSVChyZWZDb3Vu
dChnZW9tZXRyeSkgPT0gYmVmb3JlICsgMSk7CiB9CiAKIHZvaWQgUGF0aDo6Y3JlYXRlR2VvbWV0
cnlXaXRoRmlsbE1vZGUoV2luZFJ1bGUgd2Via2l0RmlsbE1vZGUsIENPTVB0cjxJRDJEMUdlb21l
dHJ5R3JvdXA+JiBwYXRoKSBjb25zdApAQCAtMTI0LDU5ICsxMzQsNjkgQEAgdm9pZCBQYXRoOjpj
cmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaQogCiAgICAgdW5zaWduZWQgZ2VvbWV0cnlDb3Vu
dCA9IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpOwogCi0gICAgVmVjdG9yPElEMkQx
R2VvbWV0cnkqPiBnZW9tZXRyaWVzKGdlb21ldHJ5Q291bnQsIG51bGxwdHIpOwotICAgIEFTU0VS
VChnZW9tZXRyeUNvdW50KTsKLQotICAgIC8vIE5vdGU6ICdHZXRTb3VyY2VHZW9tZXRyaWVzJyBy
ZXR1cm5zIGdlb21ldHJpZXMgdGhhdCBoYXZlIGEgKzEgcmVmIGNvdW50LgotICAgIC8vIHNvIHRo
ZXkgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgd2UgcmV0dXJuLgotICAgIG1fcGF0aC0+R2V0U291
cmNlR2VvbWV0cmllcyhnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cnlDb3VudCk7CisgICAgQVNT
RVJUKG1fZ2VvbWV0cmllcy5zaXplKCkgPT0gZ2VvbWV0cnlDb3VudCk7CiAKLSAgICBIUkVTVUxU
IGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3Jv
dXAoZmlsbE1vZGUsIGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyaWVzLnNpemUoKSwgJnBhdGgp
OworICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3Jl
YXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgY29uc3RfY2FzdDxJRDJEMUdlb21ldHJ5Kio+KG1f
Z2VvbWV0cmllcy5kYXRhKCkpLCBtX2dlb21ldHJpZXMuc2l6ZSgpLCAmcGF0aCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBmb3IgKGF1dG8gZW50cnkgOiBnZW9t
ZXRyaWVzKQotICAgICAgICBlbnRyeS0+UmVsZWFzZSgpOworICAgIEFTU0VSVChyZWZDb3VudChw
YXRoLmdldCgpKSA9PSAxKTsKIH0KIAogUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKIHsK
LSAgICBpZiAob3RoZXIucGxhdGZvcm1QYXRoKCkgJiYgb3RoZXIuYWN0aXZlUGF0aCgpKSB7Ci0g
ICAgICAgIGF1dG8gb3RoZXJQYXRoID0gb3RoZXIucGxhdGZvcm1QYXRoKCk7Ci0KLSAgICAgICAg
dW5zaWduZWQgZ2VvbWV0cnlDb3VudCA9IG90aGVyUGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3Vu
dCgpOwotCi0gICAgICAgIFZlY3RvcjxJRDJEMUdlb21ldHJ5Kj4gZ2VvbWV0cmllcyhnZW9tZXRy
eUNvdW50LCBudWxscHRyKTsKLSAgICAgICAgQVNTRVJUKGdlb21ldHJ5Q291bnQpOwotCi0gICAg
ICAgIC8vIE5vdGU6ICdHZXRTb3VyY2VHZW9tZXRyaWVzJyByZXR1cm5zIGdlb21ldHJpZXMgdGhh
dCBoYXZlIGEgKzEgcmVmIGNvdW50LgotICAgICAgICAvLyBzbyB0aGV5IG11c3QgYmUgcmVsZWFz
ZWQgYmVmb3JlIHdlIHJldHVybi4KLSAgICAgICAgb3RoZXJQYXRoLT5HZXRTb3VyY2VHZW9tZXRy
aWVzKGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyeUNvdW50KTsKLQotICAgICAgICBIUkVTVUxU
IGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3Jv
dXAob3RoZXIubV9wYXRoLT5HZXRGaWxsTW9kZSgpLCBnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0
cnlDb3VudCwgJm1fcGF0aCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwotCi0gICAgICAgIGZvciAoYXV0byBlbnRyeSA6IGdlb21ldHJpZXMpCi0gICAgICAgICAgICBl
bnRyeS0+UmVsZWFzZSgpOwotICAgIH0KKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWdu
ZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgpKTsKKyAgICB1bnNpZ25l
ZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOwor
ICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhHZW9tZXRyeUNvdW50ID0gcmVmQ291bnQob3RoZXIubV9h
Y3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpOworI2VuZGlmCisgICAgbV9wYXRoID0gb3RoZXIubV9w
YXRoOworICAgIG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0aDsKKyAgICBtX2FjdGl2
ZVBhdGhHZW9tZXRyeSA9IG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5OworICAgIG1fZ2VvbWV0
cmllcyA9IG90aGVyLm1fZ2VvbWV0cmllczsKKyAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9n
ZW9tZXRyaWVzKQorICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7CisKKyAgICBBU1NFUlQoIW1f
cGF0aCB8fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOworICAgIEFT
U0VSVCghbV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0
aXZlUGF0aENvdW50ICsgMSk7CisgICAgQVNTRVJUKCFtX2FjdGl2ZVBhdGhHZW9tZXRyeSB8fCBy
ZWZDb3VudChtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSkgPT0gYWN0aXZlUGF0aEdlb21ldHJ5
Q291bnQgKyAyKTsKIH0KICAgICAKIFBhdGg6OlBhdGgoUGF0aCYmIG90aGVyKQogewotICAgIG1f
cGF0aCA9IG90aGVyLm1fcGF0aDsKLSAgICBtX2FjdGl2ZVBhdGggPSBvdGhlci5tX2FjdGl2ZVBh
dGg7Ci0gICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBvdGhlci5tX2FjdGl2ZVBhdGhHZW9tZXRy
eTsKLSAgICBvdGhlci5tX3BhdGggPSBudWxscHRyOwotICAgIG90aGVyLm1fYWN0aXZlUGF0aCA9
IG51bGxwdHI7Ci0gICAgb3RoZXIubV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBudWxscHRyOworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBwYXRoQ291bnQgPSByZWZDb3VudChvdGhl
ci5tX3BhdGguZ2V0KCkpOworICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhDb3VudCA9IHJlZkNvdW50
KG90aGVyLm1fYWN0aXZlUGF0aC5nZXQoKSk7CisgICAgdW5zaWduZWQgYWN0aXZlUGF0aEdlb21l
dHJ5Q291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSk7Cisj
ZW5kaWYKKyAgICBtX3BhdGggPSBXVEZNb3ZlKG90aGVyLm1fcGF0aCk7CisgICAgbV9hY3RpdmVQ
YXRoID0gV1RGTW92ZShvdGhlci5tX2FjdGl2ZVBhdGgpOworICAgIG1fYWN0aXZlUGF0aEdlb21l
dHJ5ID0gV1RGTW92ZShvdGhlci5tX2FjdGl2ZVBhdGhHZW9tZXRyeSk7CisgICAgbV9nZW9tZXRy
aWVzID0gV1RGTW92ZShvdGhlci5tX2dlb21ldHJpZXMpOworCisgICAgQVNTRVJUKHJlZkNvdW50
KG1fcGF0aC5nZXQoKSkgPT0gcGF0aENvdW50KTsKKyAgICBBU1NFUlQocmVmQ291bnQobV9hY3Rp
dmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRoQ291bnQpOworICAgIEFTU0VSVChyZWZDb3VudCht
X2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSkgPT0gYWN0aXZlUGF0aEdlb21ldHJ5Q291bnQpOwog
fQogCiBQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCiB7CiAgICAgaWYg
KHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fcGF0aC5nZXQo
KSk7CisgICAgdW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3Rp
dmVQYXRoLmdldCgpKTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoR2VvbWV0cnlDb3VudCA9IHJl
ZkNvdW50KG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5LmdldCgpKTsKKyNlbmRpZgogICAgIG1f
cGF0aCA9IG90aGVyLm1fcGF0aDsKICAgICBtX2FjdGl2ZVBhdGggPSBvdGhlci5tX2FjdGl2ZVBh
dGg7CiAgICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBvdGhlci5tX2FjdGl2ZVBhdGhHZW9tZXRy
eTsKKyAgICBtX2dlb21ldHJpZXMgPSBvdGhlci5tX2dlb21ldHJpZXM7CisgICAgZm9yIChhdXRv
KiBnZW9tZXRyeSA6IG1fZ2VvbWV0cmllcykKKyAgICAgICAgZ2VvbWV0cnktPkFkZFJlZigpOwor
CisgICAgQVNTRVJUKCFtX3BhdGggfHwgcmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291
bnQgKyAxKTsKKyAgICBBU1NFUlQoIW1fYWN0aXZlUGF0aCB8fCByZWZDb3VudChtX2FjdGl2ZVBh
dGguZ2V0KCkpID09IGFjdGl2ZVBhdGhDb3VudCArIDEpOworICAgIEFTU0VSVCghbV9hY3RpdmVQ
YXRoR2VvbWV0cnkgfHwgcmVmQ291bnQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpID09IGFj
dGl2ZVBhdGhHZW9tZXRyeUNvdW50ICsgMik7CisKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAg
LTE4NCwxMiArMjA0LDIxIEBAIFBhdGgmIFBhdGg6Om9wZXJhdG9yPShQYXRoJiYgb3RoZXIpCiB7
CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgbV9w
YXRoID0gb3RoZXIubV9wYXRoOwotICAgIG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0
aDsKLSAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5
OwotICAgIG90aGVyLm1fcGF0aCA9IG51bGxwdHI7Ci0gICAgb3RoZXIubV9hY3RpdmVQYXRoID0g
bnVsbHB0cjsKLSAgICBvdGhlci5tX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7CisKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3Ro
ZXIubV9wYXRoLmdldCgpKTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3Vu
dChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOworICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhHZW9t
ZXRyeUNvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpOwor
I2VuZGlmCisgICAgbV9wYXRoID0gV1RGTW92ZShvdGhlci5tX3BhdGgpOworICAgIG1fYWN0aXZl
UGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoKTsKKyAgICBtX2FjdGl2ZVBhdGhHZW9t
ZXRyeSA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoR2VvbWV0cnkpOworICAgIG1fZ2VvbWV0
cmllcyA9IFdURk1vdmUob3RoZXIubV9nZW9tZXRyaWVzKTsKKworICAgIEFTU0VSVChyZWZDb3Vu
dChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCk7CisgICAgQVNTRVJUKHJlZkNvdW50KG1fYWN0
aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZlUGF0aENvdW50KTsKKyAgICBBU1NFUlQocmVmQ291bnQo
bV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpID09IGFjdGl2ZVBhdGhHZW9tZXRyeUNvdW50KTsK
KwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTk4LDE3ICsyMjcsMjMgQEAgSFJFU1VMVCBQ
YXRoOjppbml0aWFsaXplUGF0aFN0YXRlKCkKICAgICBtX3BhdGggPSBudWxscHRyOwogICAgIG1f
YWN0aXZlUGF0aCA9IG51bGxwdHI7CiAgICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBudWxscHRy
OworICAgIGNsZWFyR2VvbWV0cmllcygpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1G
YWN0b3J5KCktPkNyZWF0ZVBhdGhHZW9tZXRyeSgmbV9hY3RpdmVQYXRoR2VvbWV0cnkpOworICAg
IEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSkgPT0gMSk7CiAKLSAg
ICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+IGdlb21ldHJpZXM7Ci0gICAgZ2VvbWV0cmllcy5hcHBl
bmQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpOworICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5
LT5BZGRSZWYoKTsKKyAgICBtX2dlb21ldHJpZXMuYXBwZW5kKG1fYWN0aXZlUGF0aEdlb21ldHJ5
LmdldCgpKTsKKyAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkp
ID09IDIpOwogCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKEQyRDFfRklMTF9NT0RFX1dJTkRJTkcsIGdlb21ldHJp
ZXMuZGF0YSgpLCBnZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7CisgICAgSFJFU1VMVCBociA9
IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKEQy
RDFfRklMTF9NT0RFX1dJTkRJTkcsIG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2VvbWV0cmllcy5z
aXplKCksICZtX3BhdGgpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7
CiAKLSAgICByZXR1cm4gbV9hY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCk7
CisgICAgaHIgPSBtX2FjdGl2ZVBhdGhHZW9tZXRyeS0+T3BlbigmbV9hY3RpdmVQYXRoKTsKKyAg
ICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpID09IDIpOworICAg
IEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOworICAgIHJldHVybiBo
cjsKIH0KIAogdm9pZCBQYXRoOjpkcmF3RGlkQ29tcGxldGUoKQpAQCAtMjM3LDcgKzI3Miw3IEBA
IGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG8KICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgQk9PTCBjb250YWluczsKLSAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgt
PkZpbGxDb250YWluc1BvaW50KEQyRDE6OlBvaW50MkYocG9pbnQueCgpLCBwb2ludC55KCkpLCBu
dWxscHRyLCAmY29udGFpbnMpKSkKKyAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgtPkZpbGxDb250
YWluc1BvaW50KHBvaW50LCBudWxscHRyLCAmY29udGFpbnMpKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcmV0dXJuIGNvbnRhaW5zOwpAQCAtMjU0LDI4ICsyODksMzkgQEAgYm9vbCBQ
YXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcAogICAgIEdyYXBoaWNzQ29udGV4dCBz
Y3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgYXBwbGllci0+c3Ryb2tlU3R5
bGUoJnNjcmF0Y2hDb250ZXh0KTsKIAorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25l
ZCBiZWZvcmUgPSByZWZDb3VudChtX3BhdGguZ2V0KCkpOworI2VuZGlmCisKICAgICBCT09MIGNv
bnRhaW5zUG9pbnQgPSBmYWxzZTsKICAgICBIUkVTVUxUIGhyID0gbV9wYXRoLT5TdHJva2VDb250
YWluc1BvaW50KHBvaW50LCBzY3JhdGNoQ29udGV4dC5zdHJva2VUaGlja25lc3MoKSwgc2NyYXRj
aENvbnRleHQucGxhdGZvcm1TdHJva2VTdHlsZSgpLCBudWxscHRyLCAxLjBmLCAmY29udGFpbnNQ
b2ludCk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBiZWZvcmUpOwogICAgIHJldHVy
biBjb250YWluc1BvaW50OwogfQogCi12b2lkIFBhdGg6OmNsb3NlQW55T3Blbkdlb21ldHJpZXMo
KQordm9pZCBQYXRoOjpjbG9zZUFueU9wZW5HZW9tZXRyaWVzKHVuc2lnbmVkIHN0eWxlKQogewot
ICAgIEFTU0VSVChtX2FjdGl2ZVBhdGgpOworICAgIGlmIChtX29wZW5GaWd1cmVDb3VudCkgewor
ICAgICAgICBBU1NFUlQobV9hY3RpdmVQYXRoKTsKIAotICAgIGlmICghbV9vcGVuRmlndXJlQ291
bnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBlbmRTdHlsZSA9IHN0YXRpY19jYXN0
PEQyRDFfRklHVVJFX0VORD4oc3R5bGUpOworICAgICAgICB3aGlsZSAobV9vcGVuRmlndXJlQ291
bnQpIHsKKyAgICAgICAgICAgIG1fYWN0aXZlUGF0aC0+RW5kRmlndXJlKGVuZFN0eWxlKTsKKyAg
ICAgICAgICAgIC0tbV9vcGVuRmlndXJlQ291bnQ7CisgICAgICAgIH0KIAotICAgIHdoaWxlICht
X29wZW5GaWd1cmVDb3VudCkgewotICAgICAgICBtX2FjdGl2ZVBhdGgtPkVuZEZpZ3VyZShEMkQx
X0ZJR1VSRV9FTkRfT1BFTik7Ci0gICAgICAgIC0tbV9vcGVuRmlndXJlQ291bnQ7CisgICAgICAg
IEhSRVNVTFQgaHIgPSBtX2FjdGl2ZVBhdGgtPkNsb3NlKCk7CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKICAgICB9CiAKLSAgICBIUkVTVUxUIGhyID0gbV9hY3RpdmVQYXRoLT5DbG9z
ZSgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBtX2FjdGl2ZVBhdGggPSBudWxs
cHRyOworCisgICAgLy8gSXQgaXMgaWxsZWdhbCB0byB1c2UgYW4gSUQyRDFQYXRoR2VvbWV0cnkg
YWZ0ZXIgY2xvc2luZyBpdHMgc2luaywgc28KKyAgICAvLyBsZXQncyBtYWtlIHRoYXQgaW1wb3Nz
aWJsZS4KKyAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgUGF0
aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKQEAgLTI5NCwzMSArMzQwLDQ0IEBA
IHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm8KIAogICAgIGJvb2wgcGF0
aElzQWN0aXZlID0gZmFsc2U7CiAgICAgaWYgKG1fYWN0aXZlUGF0aCkgewotICAgICAgICBjbG9z
ZUFueU9wZW5HZW9tZXRyaWVzKCk7Ci0gICAgICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7Ci0g
ICAgICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsKKyAgICAgICAgY2xvc2VBbnlP
cGVuR2VvbWV0cmllcyhEMkQxX0ZJR1VSRV9FTkRfT1BFTik7CiAgICAgICAgIHBhdGhJc0FjdGl2
ZSA9IHRydWU7CiAgICAgfQogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIGJl
Zm9yZSA9IHJlZkNvdW50KG1fcGF0aC5nZXQoKSk7CisjZW5kaWYKKwogICAgIENPTVB0cjxJRDJE
MVRyYW5zZm9ybWVkR2VvbWV0cnk+IHRyYW5zZm9ybWVkUGF0aDsKICAgICBpZiAoIVNVQ0NFRURF
RChHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlVHJhbnNmb3JtZWRHZW9t
ZXRyeShtX3BhdGguZ2V0KCksIHRyYW5zZm9ybSwgJnRyYW5zZm9ybWVkUGF0aCkpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+IGdlb21ldHJpZXM7Ci0gICAg
Z2VvbWV0cmllcy5hcHBlbmQodHJhbnNmb3JtZWRQYXRoLmdldCgpKTsKKyAgICBBU1NFUlQocmVm
Q291bnQobV9wYXRoLmdldCgpKSA9PSBiZWZvcmUpOworICAgIEFTU0VSVChyZWZDb3VudCh0cmFu
c2Zvcm1lZFBhdGguZ2V0KCkpID09IDEpOwogCiAgICAgaWYgKHBhdGhJc0FjdGl2ZSkgewogICAg
ICAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5
KCZtX2FjdGl2ZVBhdGhHZW9tZXRyeSk7CiAgICAgICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5LT5P
cGVuKCZtX2FjdGl2ZVBhdGgpOwotICAgICAgICBnZW9tZXRyaWVzLmFwcGVuZChtX2FjdGl2ZVBh
dGhHZW9tZXRyeS5nZXQoKSk7CisgICAgICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGhH
ZW9tZXRyeS5nZXQoKSkgPT0gMSk7CisgICAgICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBh
dGguZ2V0KCkpID09IDEpOwogICAgIH0KIAogICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGgtPkdl
dEZpbGxNb2RlKCk7CiAKICAgICBtX3BhdGggPSBudWxscHRyOwogCi0gICAgSFJFU1VMVCBociA9
IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZp
bGxNb2RlLCBnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOwor
ICAgIGNsZWFyR2VvbWV0cmllcygpOworCisgICAgdHJhbnNmb3JtZWRQYXRoLT5BZGRSZWYoKTsK
KyAgICBtX2dlb21ldHJpZXMuYXBwZW5kKHRyYW5zZm9ybWVkUGF0aC5nZXQoKSk7CisgICAgaWYg
KHBhdGhJc0FjdGl2ZSkgeworICAgICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeS0+QWRkUmVmKCk7
CisgICAgICAgIG1fZ2VvbWV0cmllcy5hcHBlbmQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkp
OworICAgIH0KKworICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rv
cnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgbV9nZW9tZXRyaWVzLmRhdGEoKSwg
bV9nZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7CisgICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gMSk7CiAKICAg
ICBpZiAoIWN1cnJlbnRQb2ludCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzc3LDYgKzQzNiwxNCBA
QCB2b2lkIFBhdGg6Om9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjCiAgICAgaWYgKG1fb3Bl
bkZpZ3VyZUNvdW50KQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1fYWN0aXZlUGF0aCkg
eworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdl
b21ldHJ5KCZtX2FjdGl2ZVBhdGhHZW9tZXRyeSk7CisgICAgICAgIG1fYWN0aXZlUGF0aEdlb21l
dHJ5LT5PcGVuKCZtX2FjdGl2ZVBhdGgpOworICAgICAgICBhcHBlbmRHZW9tZXRyeShtX2FjdGl2
ZVBhdGhHZW9tZXRyeS5nZXQoKSk7CisgICAgICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBh
dGguZ2V0KCkpID09IDEpOworICAgICAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoR2Vv
bWV0cnkuZ2V0KCkpID09IDIpOworICAgIH0KKwogICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1v
ZGUoRDJEMV9GSUxMX01PREVfV0lORElORyk7CiAgICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3Vy
ZShjdXJyZW50UG9pbnQoKSwgRDJEMV9GSUdVUkVfQkVHSU5fRklMTEVEKTsKICAgICArK21fb3Bl
bkZpZ3VyZUNvdW50OwpAQCAtMzg0LDE5ICs0NTEsMTggQEAgdm9pZCBQYXRoOjpvcGVuRmlndXJl
QXRDdXJyZW50UG9pbnRJZk5lYwogCiB2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkKIHsKLSAgICBpZiAobV9hY3RpdmVQYXRoKSB7Ci0gICAgICAgIGNsb3NlQW55T3Bl
bkdlb21ldHJpZXMoKTsKLSAgICAgICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICAgICAg
bV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBudWxscHRyOwotICAgIH0KKyAgICBpZiAobV9hY3RpdmVQ
YXRoKQorICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVO
KTsKIAogICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVQYXRoR2Vv
bWV0cnkoJm1fYWN0aXZlUGF0aEdlb21ldHJ5KTsKLQogICAgIGFwcGVuZEdlb21ldHJ5KG1fYWN0
aXZlUGF0aEdlb21ldHJ5LmdldCgpKTsKKyAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRo
R2VvbWV0cnkuZ2V0KCkpID09IDIpOwogCiAgICAgaWYgKCFTVUNDRUVERUQobV9hY3RpdmVQYXRo
R2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCkpKQogICAgICAgICByZXR1cm47CiAKKyAgICBB
U1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSAxKTsKKwogICAgIG1fYWN0aXZl
UGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElORyk7CiAgICAgbV9hY3RpdmVQ
YXRoLT5CZWdpbkZpZ3VyZShwb2ludCwgRDJEMV9GSUdVUkVfQkVHSU5fRklMTEVEKTsKICAgICBt
X29wZW5GaWd1cmVDb3VudCA9IDE7CkBAIC00MDQsMjQgKzQ3MCwxOCBAQCB2b2lkIFBhdGg6Om1v
dmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2luCiAKIHZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIEFTU0VSVChtX2FjdGl2ZVBhdGguZ2V0KCkpOwot
CiAgICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKICAgICBtX2FjdGl2
ZVBhdGgtPkFkZExpbmUocG9pbnQpOwogfQogCiB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIEFTU0VSVCht
X2FjdGl2ZVBhdGguZ2V0KCkpOwotCiAgICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNl
c3NhcnkoKTsKICAgICBtX2FjdGl2ZVBhdGgtPkFkZFF1YWRyYXRpY0JlemllcihEMkQxOjpRdWFk
cmF0aWNCZXppZXJTZWdtZW50KGNwLCBwKSk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkQmV6aWVyQ3Vy
dmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3Qg
RmxvYXRQb2ludCYgcCkKIHsKLSAgICBBU1NFUlQobV9hY3RpdmVQYXRoLmdldCgpKTsKLQogICAg
IG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7CiAgICAgbV9hY3RpdmVQYXRo
LT5BZGRCZXppZXIoRDJEMTo6QmV6aWVyU2VnbWVudChjcDEsIGNwMiwgcCkpOwogfQpAQCAtNDk1
LDYgKzU1NSw3IEBAIHZvaWQgUGF0aDo6cGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QKICAg
ICAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVh
dGVSb3VuZGVkUmVjdGFuZ2xlR2VvbWV0cnkoRDJEMTo6Um91bmRlZFJlY3QocmVjdFRvRHJhdywg
cmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdodCksICZyb3VuZFJlY3QpOwogICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICAgICAgYXBwZW5kR2VvbWV0cnkocm91bmRSZWN0
LmdldCgpKTsKKyAgICAgICAgQVNTRVJUKHJlZkNvdW50KHJvdW5kUmVjdC5nZXQoKSkgPT0gMik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUwMyw4ICs1NjQsMTEgQEAgdm9pZCBQYXRo
OjpwbGF0Zm9ybUFkZFBhdGhGb3JSb3VuZGVkUmVjdAogCiB2b2lkIFBhdGg6OmNsb3NlU3VicGF0
aCgpCiB7Ci0gICAgaWYgKGlzTnVsbCgpKQorICAgIGlmIChpc051bGwoKSkgeworICAgICAgICBt
X2FjdGl2ZVBhdGggPSBudWxscHRyOworICAgICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51
bGxwdHI7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoIW1fYWN0aXZlUGF0aCkg
ewogICAgICAgICBBU1NFUlQoIW1fb3BlbkZpZ3VyZUNvdW50KTsKQEAgLTUxMiwxOCArNTc2LDcg
QEAgdm9pZCBQYXRoOjpjbG9zZVN1YnBhdGgoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKCFtX29wZW5GaWd1cmVDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hY3Rp
dmVQYXRoLT5FbmRGaWd1cmUoRDJEMV9GSUdVUkVfRU5EX0NMT1NFRCk7Ci0gICAgLS1tX29wZW5G
aWd1cmVDb3VudDsKLSAgICBpZiAobV9vcGVuRmlndXJlQ291bnQgPiAwKSB7Ci0gICAgICAgIEFT
U0VSVChtX2FjdGl2ZVBhdGhHZW9tZXRyeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBIUkVTVUxUIGhyID0gbV9hY3RpdmVQYXRoLT5DbG9zZSgpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKyAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9DTE9T
RUQpOwogfQogCiBzdGF0aWMgRmxvYXRQb2ludCBhcmNTdGFydChjb25zdCBGbG9hdFBvaW50JiBj
ZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSkKQEAgLTYwMCw2ICs2NTMsNyBA
QCB2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQogICAgIEhSRVNVTFQgaHIg
PSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2VvbWV0
cnkociwgJnJlY3RhbmdsZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAg
ICAgYXBwZW5kR2VvbWV0cnkocmVjdGFuZ2xlLmdldCgpKTsKKyAgICBBU1NFUlQocmVmQ291bnQo
cmVjdGFuZ2xlLmdldCgpKSA9PSAyKTsKIH0KIAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0
UG9pbnQgcCwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSwgZmxvYXQgcm90YXRpb24sIGZs
b2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCkBAIC02
MjAsNiArNjc0LDcgQEAgdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcgog
ICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRl
RWxsaXBzZUdlb21ldHJ5KEQyRDE6OkVsbGlwc2Uoci5jZW50ZXIoKSwgMC41ICogci53aWR0aCgp
LCAwLjUgKiByLmhlaWdodCgpKSwgJmVsbGlwc2UpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwogICAgIGFwcGVuZEdlb21ldHJ5KGVsbGlwc2UuZ2V0KCkpOworICAgIEFTU0VS
VChyZWZDb3VudChlbGxpcHNlLmdldCgpKSA9PSAyKTsKIH0KIAogdm9pZCBQYXRoOjphZGRQYXRo
KGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQpAQCAt
NjQyLDYgKzY5Nyw3IEBAIHZvaWQgUGF0aDo6Y2xlYXIoKQogICAgIG1fcGF0aCA9IG51bGxwdHI7
CiAgICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9
IG51bGxwdHI7CisgICAgY2xlYXJHZW9tZXRyaWVzKCk7CiB9CiAKIGJvb2wgUGF0aDo6aXNFbXB0
eSgpIGNvbnN0CkBAIC02NTIsNiArNzA4LDggQEAgYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QK
ICAgICBpZiAoIW1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAorICAgIEFTU0VSVChtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSA9
PSBtX2dlb21ldHJpZXMuc2l6ZSgpKTsKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NPTVB0ci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DT01QdHIuaAkocmV2aXNpb24gMjQ5NDE2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NPTVB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MCArNDYsMTEgQEAgZW51bSBDcmVhdGVUYWcgeyBDcmVhdGUgfTsKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNsYXNzIENPTVB0ciB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUKiBQdHJUeXBlOwotICAg
IENPTVB0cigpIDogbV9wdHIoMCkgeyB9CisgICAgQ09NUHRyKCkgOiBtX3B0cihudWxscHRyKSB7
IH0KICAgICBDT01QdHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyBpZiAobV9wdHIpIG1fcHRyLT5B
ZGRSZWYoKTsgfQogICAgIENPTVB0cihBZG9wdENPTVRhZywgVCogcHRyKSA6IG1fcHRyKHB0cikg
eyB9CiAgICAgQ09NUHRyKGNvbnN0IENPTVB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IGlmIChU
KiBwdHIgPSBtX3B0cikgcHRyLT5BZGRSZWYoKTsgfQorICAgIENPTVB0cihDT01QdHImJiBvKSA6
IG1fcHRyKG8ubGVha1JlZigpKSB7IH0KIAogICAgIENPTVB0cihRdWVyeVRhZywgSVVua25vd24q
IHB0cikgOiBtX3B0cihjb3B5UXVlcnlJbnRlcmZhY2VSZWYocHRyKSkgeyB9CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gQ09NUHRyKFF1ZXJ5VGFnLCBjb25zdCBDT01QdHI8VT4mIHB0cikgOiBt
X3B0cihjb3B5UXVlcnlJbnRlcmZhY2VSZWYocHRyLmdldCgpKSkgeyB9CkBAIC03OSw2ICs4MCw3
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wdHIgPyAmQ09NUHRyOjpnZXQgOiAwOyB9CiAKICAgICBDT01QdHImIG9wZXJhdG9y
PShjb25zdCBDT01QdHImKTsKKyAgICBDT01QdHImIG9wZXJhdG9yPShDT01QdHImJik7CiAgICAg
Q09NUHRyJiBvcGVyYXRvcj0oVCopOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENPTVB0ciYg
b3BlcmF0b3I9KGNvbnN0IENPTVB0cjxVPiYpOwogCkBAIC0xNjUsNiArMTY3LDE1IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBDT01QdHI8VD4mIEMKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBDT01QdHI8VD4mIENPTVB0cjxUPjo6b3Bl
cmF0b3I9KENPTVB0cjxUPiYmIG8pCit7CisgICAgVCogcHRyID0gbV9wdHI7CisgICAgbV9wdHIg
PSBvLmxlYWtSZWYoKTsKKyAgICBpZiAocHRyKQorICAgICAgICBwdHItPlJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVu
YW1lIFU+IGlubGluZSBDT01QdHI8VD4mIENPTVB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IENPTVB0
cjxVPiYgbykKIHsKICAgICBUKiBvcHRyID0gby5nZXQoKTsKQEAgLTIxOCw2ICsyMjksMTkgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lCiAgICAgcmV0dXJuIGEgIT0g
Yi5nZXQoKTsKIH0KIAorI2lmICFBU1NFUlRfRElTQUJMRUQKK2lubGluZSB1bnNpZ25lZCByZWZD
b3VudChJVW5rbm93biogcHRyKQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHVuc2lnbmVkIHRlbXAgPSBwdHItPkFkZFJlZigpOworICAgIHVuc2lnbmVkIHZhbHVl
ID0gcHRyLT5SZWxlYXNlKCk7CisgICAgQVNTRVJUKHRlbXAgPSB2YWx1ZSArIDEpOworICAgIHJl
dHVybiB2YWx1ZTsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlw
ZW5hbWUgUD4gc3RydWN0IElzU21hcnRQdHI8Q09NUHRyPFA+PiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378159</attachid>
            <date>2019-09-05 21:35:26 -0700</date>
            <delta_ts>2019-09-06 10:43:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201534-20190905213524.patch</filename>
            <type>text/plain</type>
            <size>22816</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE5LTA5LTA1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFBhdGhEaXJlY3QyRCBDbGVh
bnVwcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAx
NTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4g
QWRkIGEgQ09NUHRyPD4gbW92ZSBvcGVyYXRvci4KKyAgICAgICAgMi4gUmVkdWNlIGNvcHlpbmcg
SUQyRDFHZW9tZXRyeSBvYmplY3RzLgorICAgICAgICAzLiBQcm90ZWN0IGFnYWluc3QgdXNpbmcg
dGhlIElEMkQxUGF0aEdlb21ldHJ5IGFmdGVyIHRoZQorICAgICAgICAgICBJRDJEMUdlb21ldHJ5
U2luaydzIENsb3NlIG9wZXJhdGlvbiBpcyB1c2VkLgorICAgICAgICA0LiBBZGQgYSBkZWJ1Zy1v
bmx5ICdyZWZDb3VudCcgZnVuY3Rpb24gdG8gQ09NUHRyIHRvIGhlbHAKKyAgICAgICAgICAgdHJh
Y2sgZG93biBtZW1vcnkgZXJyb3JzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWN0aXZlUGF0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlyZWN0MkQ6OmRyYXdQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0aERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ09NUHRyLmg6CisgICAg
ICAgIChDT01QdHI6OkNPTVB0cik6CisgICAgICAgICg9KToKKyAgICAgICAgKHJlZkNvdW50KToK
KwogMjAxOS0wOS0wNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4K
IAogICAgICAgICBbV2luXSBBZGQgc3VwcG9ydCBmb3IgTW91c2VFdmVudC5idXR0b25zCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiAyNDk1NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NCwxNCArMTk0LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAj
aWYgVVNFKERJUkVDVDJEKQotICAgICAgICBJRDJEMUdlb21ldHJ5U2luayogYWN0aXZlUGF0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlUGF0aC5nZXQoKTsgfQogICAgICAgICB2b2lkIGFwcGVu
ZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqKTsKICAgICAgICAgdm9pZCBjcmVhdGVHZW9tZXRyeVdp
dGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mKSBjb25zdDsK
ICAgICAgICAgdm9pZCBkcmF3RGlkQ29tcGxldGUoKTsKIAogICAgICAgICBIUkVTVUxUIGluaXRp
YWxpemVQYXRoU3RhdGUoKTsKICAgICAgICAgdm9pZCBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICB2b2lkIGNsb3NlQW55T3Blbkdlb21ldHJpZXMoKTsKKyAg
ICAgICAgdm9pZCBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKHVuc2lnbmVkIGZpZ3VyZUVuZFN0eWxl
KTsKKyAgICAgICAgdm9pZCBjbGVhckdlb21ldHJpZXMoKTsKICNlbmRpZgogCiAjaWZuZGVmIE5E
RUJVRwpAQCAtMjEwLDYgKzIxMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZh
dGU6CiAjaWYgVVNFKERJUkVDVDJEKQorICAgICAgICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+IG1f
Z2VvbWV0cmllczsKICAgICAgICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gbV9wYXRoOwog
ICAgICAgICBDT01QdHI8SUQyRDFQYXRoR2VvbWV0cnk+IG1fYWN0aXZlUGF0aEdlb21ldHJ5Owog
ICAgICAgICBDT01QdHI8SUQyRDFHZW9tZXRyeVNpbms+IG1fYWN0aXZlUGF0aDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3QyRE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNDk1NjApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDk1LDExICs0OTUsNyBAQCB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFBsYXRmb3Jt
Q29udGV4CiAKIHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwg
Y29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChwYXRoLmFjdGl2ZVBh
dGgoKSkgewotICAgICAgICAvLyBNYWtlIHN1cmUgaXQncyBjbG9zZWQuIFRoaXMgbWlnaHQgZmFp
bCBpZiB0aGUgcGF0aCB3YXMgYWxyZWFkeSBjbG9zZWQsIHNvCi0gICAgICAgIC8vIGlnbm9yZSB0
aGUgcmV0dXJuIHZhbHVlLgotICAgICAgICBwYXRoLmFjdGl2ZVBhdGgoKS0+Q2xvc2UoKTsKLSAg
ICB9CisgICAgY29uc3RfY2FzdDxQYXRoJj4ocGF0aCkuY2xvc2VBbnlPcGVuR2VvbWV0cmllcyhE
MkQxX0ZJR1VSRV9FTkRfT1BFTik7CiAKICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQucmVuZGVyVGFyZ2V0KCk7CiAKQEAgLTU4Miw4ICs1NzgsNyBAQCB2b2lkIGRyYXdQYXRoKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiB7CiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0LnJlbmRlclRhcmdldCgpOwogCi0gICAgaWYgKHBhdGguYWN0aXZlUGF0aCgpKQotICAg
ICAgICBwYXRoLmFjdGl2ZVBhdGgoKS0+Q2xvc2UoKTsKKyAgICBjb25zdF9jYXN0PFBhdGgmPihw
YXRoKS5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKIAogICAg
IGNvbnRleHQtPlNldFRhZ3MoMSwgX19MSU5FX18pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkocmV2aXNp
b24gMjQ5NTYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhE
aXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw5ICs2Miw5IEBAIFBhdGggUGF0aDo6cG9s
eWdvblBhdGhGcm9tUG9pbnRzKGNvbnN0IFYKIAogICAgIHBhdGgubW92ZVRvKHBvaW50cy5maXJz
dCgpKTsKIAotICAgIEFTU0VSVChwYXRoLmFjdGl2ZVBhdGgoKSk7CisgICAgQVNTRVJUKHBhdGgu
bV9hY3RpdmVQYXRoKTsKIAotICAgIHBhdGguYWN0aXZlUGF0aCgpLT5BZGRMaW5lcyhkMmRQb2lu
dHMuZGF0YSgpLCBkMmRQb2ludHMuc2l6ZSgpKTsKKyAgICBwYXRoLm1fYWN0aXZlUGF0aC0+QWRk
TGluZXMoZDJkUG9pbnRzLmRhdGEoKSwgZDJkUG9pbnRzLnNpemUoKSk7CiAgICAgcGF0aC5jbG9z
ZVN1YnBhdGgoKTsKIAogICAgIHJldHVybiBwYXRoOwpAQCAtNzIsNyArNzIsMTAgQEAgUGF0aCBQ
YXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoY29uc3QgVgogCiBQYXRoOjpQYXRoKCkgPSBkZWZh
dWx0OwogCi1QYXRoOjp+UGF0aCgpID0gZGVmYXVsdDsKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBj
bGVhckdlb21ldHJpZXMoKTsKK30KIAogUGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVuc3VyZVBsYXRm
b3JtUGF0aCgpCiB7CkBAIC04MSwzNCArODQsNDEgQEAgUGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVu
c3VyZVBsYXRmb3JtUGF0aAogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgICAg
IGlmIChGQUlMRUQoaHIpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEFT
U0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IDEpOwogICAgIH0KIAogICAgIHJldHVybiBt
X3BhdGguZ2V0KCk7CiB9CiAKK3ZvaWQgUGF0aDo6Y2xlYXJHZW9tZXRyaWVzKCkKK3sKKyAgICAv
LyBNYW51YWxseSBjbGVhbiB0aGVzZSB1cCBzbyB0aGF0IHdlIGNhbiB1c2UgdGhpcyB2ZWN0b3Ig
d2l0aCBEaXJlY3QyRCBBUElzLgorICAgIGZvciAoYXV0byogZ2VvbWV0cnkgOiBtX2dlb21ldHJp
ZXMpCisgICAgICAgIGdlb21ldHJ5LT5SZWxlYXNlKCk7CisgICAgbV9nZW9tZXRyaWVzLmNsZWFy
KCk7Cit9CisKIHZvaWQgUGF0aDo6YXBwZW5kR2VvbWV0cnkoSUQyRDFHZW9tZXRyeSogZ2VvbWV0
cnkpCiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNv
dW50KGdlb21ldHJ5KTsKKyNlbmRpZgorCiAgICAgdW5zaWduZWQgZ2VvbWV0cnlDb3VudCA9IG1f
cGF0aCA/IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpIDogMDsKLSAgICBWZWN0b3I8
SUQyRDFHZW9tZXRyeSo+IGdlb21ldHJpZXMoZ2VvbWV0cnlDb3VudCwgbnVsbHB0cik7CiAKLSAg
ICAvLyBOb3RlOiAnR2V0U291cmNlR2VvbWV0cmllcycgcmV0dXJucyBnZW9tZXRyaWVzIHRoYXQg
aGF2ZSBhICsxIHJlZiBjb3VudC4KLSAgICAvLyBzbyB0aGV5IG11c3QgYmUgcmVsZWFzZWQgYmVm
b3JlIHdlIHJldHVybi4KLSAgICBpZiAoZ2VvbWV0cnlDb3VudCkKLSAgICAgICAgbV9wYXRoLT5H
ZXRTb3VyY2VHZW9tZXRyaWVzKGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyeUNvdW50KTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX2dlb21ldHJpZXMuc2l6ZSgpID09IGdlb21ldHJ5Q291bnQpOwog
CiAgICAgZ2VvbWV0cnktPkFkZFJlZigpOwotICAgIGdlb21ldHJpZXMuYXBwZW5kKGdlb21ldHJ5
KTsKKyAgICBtX2dlb21ldHJpZXMuYXBwZW5kKGdlb21ldHJ5KTsKIAogICAgIGF1dG8gZmlsbE1v
ZGUgPSBtX3BhdGggPyBtX3BhdGgtPkdldEZpbGxNb2RlKCkgOiBEMkQxX0ZJTExfTU9ERV9XSU5E
SU5HOwogCi0gICAgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4gcHJvdGVjdGVkUGF0aCA9IG1f
cGF0aDsKICAgICBtX3BhdGggPSBudWxscHRyOwogCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNz
Q29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBn
ZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOworICAgIEhSRVNV
TFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlH
cm91cChmaWxsTW9kZSwgbV9nZW9tZXRyaWVzLmRhdGEoKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwg
Jm1fcGF0aCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICBmb3Ig
KGF1dG8gZW50cnkgOiBnZW9tZXRyaWVzKQotICAgICAgICBlbnRyeS0+UmVsZWFzZSgpOworICAg
IEFTU0VSVChyZWZDb3VudChnZW9tZXRyeSkgPT0gYmVmb3JlICsgMSk7CiB9CiAKIHZvaWQgUGF0
aDo6Y3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoV2luZFJ1bGUgd2Via2l0RmlsbE1vZGUsIENP
TVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+JiBwYXRoKSBjb25zdApAQCAtMTI0LDU5ICsxMzQsNjkg
QEAgdm9pZCBQYXRoOjpjcmVhdGVHZW9tZXRyeVdpdGhGaWxsTW9kZShXaQogCiAgICAgdW5zaWdu
ZWQgZ2VvbWV0cnlDb3VudCA9IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpOwogCi0g
ICAgVmVjdG9yPElEMkQxR2VvbWV0cnkqPiBnZW9tZXRyaWVzKGdlb21ldHJ5Q291bnQsIG51bGxw
dHIpOwotICAgIEFTU0VSVChnZW9tZXRyeUNvdW50KTsKLQotICAgIC8vIE5vdGU6ICdHZXRTb3Vy
Y2VHZW9tZXRyaWVzJyByZXR1cm5zIGdlb21ldHJpZXMgdGhhdCBoYXZlIGEgKzEgcmVmIGNvdW50
LgotICAgIC8vIHNvIHRoZXkgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgd2UgcmV0dXJuLgotICAg
IG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cmllcyhnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cnlD
b3VudCk7CisgICAgQVNTRVJUKG1fZ2VvbWV0cmllcy5zaXplKCkgPT0gZ2VvbWV0cnlDb3VudCk7
CiAKLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNy
ZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyaWVz
LnNpemUoKSwgJnBhdGgpOworICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgY29uc3RfY2FzdDxJRDJE
MUdlb21ldHJ5Kio+KG1fZ2VvbWV0cmllcy5kYXRhKCkpLCBtX2dlb21ldHJpZXMuc2l6ZSgpLCAm
cGF0aCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBmb3IgKGF1
dG8gZW50cnkgOiBnZW9tZXRyaWVzKQotICAgICAgICBlbnRyeS0+UmVsZWFzZSgpOworICAgIEFT
U0VSVChyZWZDb3VudChwYXRoLmdldCgpKSA9PSAxKTsKIH0KIAogUGF0aDo6UGF0aChjb25zdCBQ
YXRoJiBvdGhlcikKIHsKLSAgICBpZiAob3RoZXIucGxhdGZvcm1QYXRoKCkgJiYgb3RoZXIuYWN0
aXZlUGF0aCgpKSB7Ci0gICAgICAgIGF1dG8gb3RoZXJQYXRoID0gb3RoZXIucGxhdGZvcm1QYXRo
KCk7Ci0KLSAgICAgICAgdW5zaWduZWQgZ2VvbWV0cnlDb3VudCA9IG90aGVyUGF0aC0+R2V0U291
cmNlR2VvbWV0cnlDb3VudCgpOwotCi0gICAgICAgIFZlY3RvcjxJRDJEMUdlb21ldHJ5Kj4gZ2Vv
bWV0cmllcyhnZW9tZXRyeUNvdW50LCBudWxscHRyKTsKLSAgICAgICAgQVNTRVJUKGdlb21ldHJ5
Q291bnQpOwotCi0gICAgICAgIC8vIE5vdGU6ICdHZXRTb3VyY2VHZW9tZXRyaWVzJyByZXR1cm5z
IGdlb21ldHJpZXMgdGhhdCBoYXZlIGEgKzEgcmVmIGNvdW50LgotICAgICAgICAvLyBzbyB0aGV5
IG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHdlIHJldHVybi4KLSAgICAgICAgb3RoZXJQYXRoLT5H
ZXRTb3VyY2VHZW9tZXRyaWVzKGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyeUNvdW50KTsKLQot
ICAgICAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNy
ZWF0ZUdlb21ldHJ5R3JvdXAob3RoZXIubV9wYXRoLT5HZXRGaWxsTW9kZSgpLCBnZW9tZXRyaWVz
LmRhdGEoKSwgZ2VvbWV0cnlDb3VudCwgJm1fcGF0aCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwotCi0gICAgICAgIGZvciAoYXV0byBlbnRyeSA6IGdlb21ldHJpZXMp
Ci0gICAgICAgICAgICBlbnRyeS0+UmVsZWFzZSgpOwotICAgIH0KKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgp
KTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2
ZVBhdGguZ2V0KCkpOworICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhHZW9tZXRyeUNvdW50ID0gcmVm
Q291bnQob3RoZXIubV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpOworI2VuZGlmCisgICAgbV9w
YXRoID0gb3RoZXIubV9wYXRoOworICAgIG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0
aDsKKyAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5
OworICAgIG1fZ2VvbWV0cmllcyA9IG90aGVyLm1fZ2VvbWV0cmllczsKKyAgICBmb3IgKGF1dG8q
IGdlb21ldHJ5IDogbV9nZW9tZXRyaWVzKQorICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7CisK
KyAgICBBU1NFUlQoIW1fcGF0aCB8fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3Vu
dCArIDEpOworICAgIEFTU0VSVCghbV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0
aC5nZXQoKSkgPT0gYWN0aXZlUGF0aENvdW50ICsgMSk7CisgICAgQVNTRVJUKCFtX2FjdGl2ZVBh
dGhHZW9tZXRyeSB8fCByZWZDb3VudChtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSkgPT0gYWN0
aXZlUGF0aEdlb21ldHJ5Q291bnQgKyAyKTsKIH0KICAgICAKIFBhdGg6OlBhdGgoUGF0aCYmIG90
aGVyKQogewotICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKLSAgICBtX2FjdGl2ZVBhdGggPSBv
dGhlci5tX2FjdGl2ZVBhdGg7Ci0gICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBvdGhlci5tX2Fj
dGl2ZVBhdGhHZW9tZXRyeTsKLSAgICBvdGhlci5tX3BhdGggPSBudWxscHRyOwotICAgIG90aGVy
Lm1fYWN0aXZlUGF0aCA9IG51bGxwdHI7Ci0gICAgb3RoZXIubV9hY3RpdmVQYXRoR2VvbWV0cnkg
PSBudWxscHRyOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBwYXRoQ291bnQg
PSByZWZDb3VudChvdGhlci5tX3BhdGguZ2V0KCkpOworICAgIHVuc2lnbmVkIGFjdGl2ZVBhdGhD
b3VudCA9IHJlZkNvdW50KG90aGVyLm1fYWN0aXZlUGF0aC5nZXQoKSk7CisgICAgdW5zaWduZWQg
YWN0aXZlUGF0aEdlb21ldHJ5Q291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGhHZW9t
ZXRyeS5nZXQoKSk7CisjZW5kaWYKKyAgICBtX3BhdGggPSBXVEZNb3ZlKG90aGVyLm1fcGF0aCk7
CisgICAgbV9hY3RpdmVQYXRoID0gV1RGTW92ZShvdGhlci5tX2FjdGl2ZVBhdGgpOworICAgIG1f
YWN0aXZlUGF0aEdlb21ldHJ5ID0gV1RGTW92ZShvdGhlci5tX2FjdGl2ZVBhdGhHZW9tZXRyeSk7
CisgICAgbV9nZW9tZXRyaWVzID0gV1RGTW92ZShvdGhlci5tX2dlb21ldHJpZXMpOworCisgICAg
QVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gcGF0aENvdW50KTsKKyAgICBBU1NFUlQo
cmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgpKSA9PSBhY3RpdmVQYXRoQ291bnQpOworICAgIEFT
U0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSkgPT0gYWN0aXZlUGF0aEdl
b21ldHJ5Q291bnQpOwogfQogCiBQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3Ro
ZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIHBhdGhDb3VudCA9IHJlZkNvdW50KG90
aGVyLm1fcGF0aC5nZXQoKSk7CisgICAgdW5zaWduZWQgYWN0aXZlUGF0aENvdW50ID0gcmVmQ291
bnQob3RoZXIubV9hY3RpdmVQYXRoLmdldCgpKTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoR2Vv
bWV0cnlDb3VudCA9IHJlZkNvdW50KG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5LmdldCgpKTsK
KyNlbmRpZgogICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKICAgICBtX2FjdGl2ZVBhdGggPSBv
dGhlci5tX2FjdGl2ZVBhdGg7CiAgICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBvdGhlci5tX2Fj
dGl2ZVBhdGhHZW9tZXRyeTsKKyAgICBtX2dlb21ldHJpZXMgPSBvdGhlci5tX2dlb21ldHJpZXM7
CisgICAgZm9yIChhdXRvKiBnZW9tZXRyeSA6IG1fZ2VvbWV0cmllcykKKyAgICAgICAgZ2VvbWV0
cnktPkFkZFJlZigpOworCisgICAgQVNTRVJUKCFtX3BhdGggfHwgcmVmQ291bnQobV9wYXRoLmdl
dCgpKSA9PSBwYXRoQ291bnQgKyAxKTsKKyAgICBBU1NFUlQoIW1fYWN0aXZlUGF0aCB8fCByZWZD
b3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IGFjdGl2ZVBhdGhDb3VudCArIDEpOworICAgIEFT
U0VSVCghbV9hY3RpdmVQYXRoR2VvbWV0cnkgfHwgcmVmQ291bnQobV9hY3RpdmVQYXRoR2VvbWV0
cnkuZ2V0KCkpID09IGFjdGl2ZVBhdGhHZW9tZXRyeUNvdW50ICsgMik7CisKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTE4NCwxMiArMjA0LDIxIEBAIFBhdGgmIFBhdGg6Om9wZXJhdG9yPShQ
YXRoJiYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgbV9wYXRoID0gb3RoZXIubV9wYXRoOwotICAgIG1fYWN0aXZlUGF0aCA9IG90
aGVyLm1fYWN0aXZlUGF0aDsKLSAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG90aGVyLm1fYWN0
aXZlUGF0aEdlb21ldHJ5OwotICAgIG90aGVyLm1fcGF0aCA9IG51bGxwdHI7Ci0gICAgb3RoZXIu
bV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX2FjdGl2ZVBhdGhHZW9tZXRyeSA9
IG51bGxwdHI7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgcGF0aENvdW50
ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgpKTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRo
Q291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOworICAgIHVuc2lnbmVk
IGFjdGl2ZVBhdGhHZW9tZXRyeUNvdW50ID0gcmVmQ291bnQob3RoZXIubV9hY3RpdmVQYXRoR2Vv
bWV0cnkuZ2V0KCkpOworI2VuZGlmCisgICAgbV9wYXRoID0gV1RGTW92ZShvdGhlci5tX3BhdGgp
OworICAgIG1fYWN0aXZlUGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoKTsKKyAgICBt
X2FjdGl2ZVBhdGhHZW9tZXRyeSA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoR2VvbWV0cnkp
OworICAgIG1fZ2VvbWV0cmllcyA9IFdURk1vdmUob3RoZXIubV9nZW9tZXRyaWVzKTsKKworICAg
IEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCk7CisgICAgQVNTRVJU
KHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZlUGF0aENvdW50KTsKKyAgICBB
U1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpID09IGFjdGl2ZVBhdGhH
ZW9tZXRyeUNvdW50KTsKKwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTk4LDE3ICsyMjcs
MjMgQEAgSFJFU1VMVCBQYXRoOjppbml0aWFsaXplUGF0aFN0YXRlKCkKICAgICBtX3BhdGggPSBu
dWxscHRyOwogICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7CiAgICAgbV9hY3RpdmVQYXRoR2Vv
bWV0cnkgPSBudWxscHRyOworICAgIGNsZWFyR2VvbWV0cmllcygpOwogCiAgICAgR3JhcGhpY3ND
b250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVBhdGhHZW9tZXRyeSgmbV9hY3RpdmVQYXRo
R2VvbWV0cnkpOworICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQo
KSkgPT0gMSk7CiAKLSAgICBWZWN0b3I8SUQyRDFHZW9tZXRyeSo+IGdlb21ldHJpZXM7Ci0gICAg
Z2VvbWV0cmllcy5hcHBlbmQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpOworICAgIG1fYWN0
aXZlUGF0aEdlb21ldHJ5LT5BZGRSZWYoKTsKKyAgICBtX2dlb21ldHJpZXMuYXBwZW5kKG1fYWN0
aXZlUGF0aEdlb21ldHJ5LmdldCgpKTsKKyAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRo
R2VvbWV0cnkuZ2V0KCkpID09IDIpOwogCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4
dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKEQyRDFfRklMTF9NT0RFX1dJ
TkRJTkcsIGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7Cisg
ICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVH
ZW9tZXRyeUdyb3VwKEQyRDFfRklMTF9NT0RFX1dJTkRJTkcsIG1fZ2VvbWV0cmllcy5kYXRhKCks
IG1fZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAg
ICAgICByZXR1cm4gaHI7CiAKLSAgICByZXR1cm4gbV9hY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4o
Jm1fYWN0aXZlUGF0aCk7CisgICAgaHIgPSBtX2FjdGl2ZVBhdGhHZW9tZXRyeS0+T3BlbigmbV9h
Y3RpdmVQYXRoKTsKKyAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0
KCkpID09IDIpOworICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEp
OworICAgIHJldHVybiBocjsKIH0KIAogdm9pZCBQYXRoOjpkcmF3RGlkQ29tcGxldGUoKQpAQCAt
MjM3LDcgKzI3Miw3IEBAIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG8K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQk9PTCBjb250YWluczsKLSAgICBpZiAoIVNV
Q0NFRURFRChtX3BhdGgtPkZpbGxDb250YWluc1BvaW50KEQyRDE6OlBvaW50MkYocG9pbnQueCgp
LCBwb2ludC55KCkpLCBudWxscHRyLCAmY29udGFpbnMpKSkKKyAgICBpZiAoIVNVQ0NFRURFRCht
X3BhdGgtPkZpbGxDb250YWluc1BvaW50KHBvaW50LCBudWxscHRyLCAmY29udGFpbnMpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGNvbnRhaW5zOwpAQCAtMjU0LDI4ICsy
ODksMzkgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhTdHJva2VTdHlsZUFwcAogICAgIEdy
YXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNz
Q29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgYXBw
bGllci0+c3Ryb2tlU3R5bGUoJnNjcmF0Y2hDb250ZXh0KTsKIAorI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICB1bnNpZ25lZCBiZWZvcmUgPSByZWZDb3VudChtX3BhdGguZ2V0KCkpOworI2VuZGlm
CisKICAgICBCT09MIGNvbnRhaW5zUG9pbnQgPSBmYWxzZTsKICAgICBIUkVTVUxUIGhyID0gbV9w
YXRoLT5TdHJva2VDb250YWluc1BvaW50KHBvaW50LCBzY3JhdGNoQ29udGV4dC5zdHJva2VUaGlj
a25lc3MoKSwgc2NyYXRjaENvbnRleHQucGxhdGZvcm1TdHJva2VTdHlsZSgpLCBudWxscHRyLCAx
LjBmLCAmY29udGFpbnNQb2ludCk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBiZWZv
cmUpOwogICAgIHJldHVybiBjb250YWluc1BvaW50OwogfQogCi12b2lkIFBhdGg6OmNsb3NlQW55
T3Blbkdlb21ldHJpZXMoKQordm9pZCBQYXRoOjpjbG9zZUFueU9wZW5HZW9tZXRyaWVzKHVuc2ln
bmVkIGZpZ3VyZUVuZFN0eWxlKQogewotICAgIEFTU0VSVChtX2FjdGl2ZVBhdGgpOworICAgIGlm
IChtX29wZW5GaWd1cmVDb3VudCkgeworICAgICAgICBBU1NFUlQobV9hY3RpdmVQYXRoKTsKIAot
ICAgIGlmICghbV9vcGVuRmlndXJlQ291bnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0
byBlbmRTdHlsZSA9IHN0YXRpY19jYXN0PEQyRDFfRklHVVJFX0VORD4oZmlndXJlRW5kU3R5bGUp
OworICAgICAgICB3aGlsZSAobV9vcGVuRmlndXJlQ291bnQpIHsKKyAgICAgICAgICAgIG1fYWN0
aXZlUGF0aC0+RW5kRmlndXJlKGVuZFN0eWxlKTsKKyAgICAgICAgICAgIC0tbV9vcGVuRmlndXJl
Q291bnQ7CisgICAgICAgIH0KIAotICAgIHdoaWxlIChtX29wZW5GaWd1cmVDb3VudCkgewotICAg
ICAgICBtX2FjdGl2ZVBhdGgtPkVuZEZpZ3VyZShEMkQxX0ZJR1VSRV9FTkRfT1BFTik7Ci0gICAg
ICAgIC0tbV9vcGVuRmlndXJlQ291bnQ7CisgICAgICAgIEhSRVNVTFQgaHIgPSBtX2FjdGl2ZVBh
dGgtPkNsb3NlKCk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKICAgICB9CiAKLSAg
ICBIUkVTVUxUIGhyID0gbV9hY3RpdmVQYXRoLT5DbG9zZSgpOwotICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKyAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOworCisgICAgLy8gSXQgaXMgaWxs
ZWdhbCB0byB1c2UgYW4gSUQyRDFQYXRoR2VvbWV0cnkgYWZ0ZXIgY2xvc2luZyBpdHMgc2luaywg
c28KKyAgICAvLyBsZXQncyBtYWtlIHRoYXQgaW1wb3NzaWJsZS4KKyAgICBtX2FjdGl2ZVBhdGhH
ZW9tZXRyeSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKQEAgLTI5NCwzMSArMzQwLDQ0IEBAIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNv
bnN0IEFmZmluZVRyYW5zZm8KIAogICAgIGJvb2wgcGF0aElzQWN0aXZlID0gZmFsc2U7CiAgICAg
aWYgKG1fYWN0aXZlUGF0aCkgewotICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKCk7Ci0g
ICAgICAgIG1fYWN0aXZlUGF0aCA9IG51bGxwdHI7Ci0gICAgICAgIG1fYWN0aXZlUGF0aEdlb21l
dHJ5ID0gbnVsbHB0cjsKKyAgICAgICAgY2xvc2VBbnlPcGVuR2VvbWV0cmllcyhEMkQxX0ZJR1VS
RV9FTkRfT1BFTik7CiAgICAgICAgIHBhdGhJc0FjdGl2ZSA9IHRydWU7CiAgICAgfQogCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KG1fcGF0aC5n
ZXQoKSk7CisjZW5kaWYKKwogICAgIENPTVB0cjxJRDJEMVRyYW5zZm9ybWVkR2VvbWV0cnk+IHRy
YW5zZm9ybWVkUGF0aDsKICAgICBpZiAoIVNVQ0NFRURFRChHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKS0+Q3JlYXRlVHJhbnNmb3JtZWRHZW9tZXRyeShtX3BhdGguZ2V0KCksIHRyYW5z
Zm9ybSwgJnRyYW5zZm9ybWVkUGF0aCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8
SUQyRDFHZW9tZXRyeSo+IGdlb21ldHJpZXM7Ci0gICAgZ2VvbWV0cmllcy5hcHBlbmQodHJhbnNm
b3JtZWRQYXRoLmdldCgpKTsKKyAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBi
ZWZvcmUpOworICAgIEFTU0VSVChyZWZDb3VudCh0cmFuc2Zvcm1lZFBhdGguZ2V0KCkpID09IDEp
OwogCiAgICAgaWYgKHBhdGhJc0FjdGl2ZSkgewogICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5KCZtX2FjdGl2ZVBhdGhHZW9tZXRyeSk7
CiAgICAgICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5LT5PcGVuKCZtX2FjdGl2ZVBhdGgpOwotICAg
ICAgICBnZW9tZXRyaWVzLmFwcGVuZChtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSk7CisgICAg
ICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSkgPT0gMSk7Cisg
ICAgICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOwogICAgIH0K
IAogICAgIGF1dG8gZmlsbE1vZGUgPSBtX3BhdGgtPkdldEZpbGxNb2RlKCk7CiAKICAgICBtX3Bh
dGggPSBudWxscHRyOwogCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVt
RmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBnZW9tZXRyaWVzLmRhdGEo
KSwgZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOworICAgIGNsZWFyR2VvbWV0cmllcygpOwor
CisgICAgdHJhbnNmb3JtZWRQYXRoLT5BZGRSZWYoKTsKKyAgICBtX2dlb21ldHJpZXMuYXBwZW5k
KHRyYW5zZm9ybWVkUGF0aC5nZXQoKSk7CisgICAgaWYgKHBhdGhJc0FjdGl2ZSkgeworICAgICAg
ICBtX2FjdGl2ZVBhdGhHZW9tZXRyeS0+QWRkUmVmKCk7CisgICAgICAgIG1fZ2VvbWV0cmllcy5h
cHBlbmQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpOworICAgIH0KKworICAgIEhSRVNVTFQg
aHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91
cChmaWxsTW9kZSwgbV9nZW9tZXRyaWVzLmRhdGEoKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJm1f
cGF0aCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgQVNTRVJUKHJl
ZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gMSk7CiAKICAgICBpZiAoIWN1cnJlbnRQb2ludCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMzc3LDYgKzQzNiwxNCBAQCB2b2lkIFBhdGg6Om9wZW5GaWd1cmVB
dEN1cnJlbnRQb2ludElmTmVjCiAgICAgaWYgKG1fb3BlbkZpZ3VyZUNvdW50KQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBpZiAoIW1fYWN0aXZlUGF0aCkgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5KCZtX2FjdGl2ZVBhdGhHZW9t
ZXRyeSk7CisgICAgICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5LT5PcGVuKCZtX2FjdGl2ZVBhdGgp
OworICAgICAgICBhcHBlbmRHZW9tZXRyeShtX2FjdGl2ZVBhdGhHZW9tZXRyeS5nZXQoKSk7Cisg
ICAgICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOworICAgICAg
ICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpID09IDIpOworICAg
IH0KKwogICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElO
Ryk7CiAgICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50UG9pbnQoKSwgRDJEMV9G
SUdVUkVfQkVHSU5fRklMTEVEKTsKICAgICArK21fb3BlbkZpZ3VyZUNvdW50OwpAQCAtMzg0LDE5
ICs0NTEsMTggQEAgdm9pZCBQYXRoOjpvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJZk5lYwogCiB2
b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAobV9h
Y3RpdmVQYXRoKSB7Ci0gICAgICAgIGNsb3NlQW55T3Blbkdlb21ldHJpZXMoKTsKLSAgICAgICAg
bV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICAgICAgbV9hY3RpdmVQYXRoR2VvbWV0cnkgPSBu
dWxscHRyOwotICAgIH0KKyAgICBpZiAobV9hY3RpdmVQYXRoKQorICAgICAgICBjbG9zZUFueU9w
ZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKIAogICAgIEdyYXBoaWNzQ29udGV4
dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVQYXRoR2VvbWV0cnkoJm1fYWN0aXZlUGF0aEdlb21l
dHJ5KTsKLQogICAgIGFwcGVuZEdlb21ldHJ5KG1fYWN0aXZlUGF0aEdlb21ldHJ5LmdldCgpKTsK
KyAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkpID09IDIpOwog
CiAgICAgaWYgKCFTVUNDRUVERUQobV9hY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZl
UGF0aCkpKQogICAgICAgICByZXR1cm47CiAKKyAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQ
YXRoLmdldCgpKSA9PSAxKTsKKwogICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9G
SUxMX01PREVfV0lORElORyk7CiAgICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShwb2ludCwg
RDJEMV9GSUdVUkVfQkVHSU5fRklMTEVEKTsKICAgICBtX29wZW5GaWd1cmVDb3VudCA9IDE7CkBA
IC00MDQsMjQgKzQ3MCwxOCBAQCB2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBw
b2luCiAKIHZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewot
ICAgIEFTU0VSVChtX2FjdGl2ZVBhdGguZ2V0KCkpOwotCiAgICAgb3BlbkZpZ3VyZUF0Q3VycmVu
dFBvaW50SWZOZWNlc3NhcnkoKTsKICAgICBtX2FjdGl2ZVBhdGgtPkFkZExpbmUocG9pbnQpOwog
fQogCiB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25z
dCBGbG9hdFBvaW50JiBwKQogewotICAgIEFTU0VSVChtX2FjdGl2ZVBhdGguZ2V0KCkpOwotCiAg
ICAgb3BlbkZpZ3VyZUF0Q3VycmVudFBvaW50SWZOZWNlc3NhcnkoKTsKICAgICBtX2FjdGl2ZVBh
dGgtPkFkZFF1YWRyYXRpY0JlemllcihEMkQxOjpRdWFkcmF0aWNCZXppZXJTZWdtZW50KGNwLCBw
KSk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBj
cDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICBB
U1NFUlQobV9hY3RpdmVQYXRoLmdldCgpKTsKLQogICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2lu
dElmTmVjZXNzYXJ5KCk7CiAgICAgbV9hY3RpdmVQYXRoLT5BZGRCZXppZXIoRDJEMTo6QmV6aWVy
U2VnbWVudChjcDEsIGNwMiwgcCkpOwogfQpAQCAtNDk1LDYgKzU1NSw3IEBAIHZvaWQgUGF0aDo6
cGxhdGZvcm1BZGRQYXRoRm9yUm91bmRlZFJlY3QKICAgICAgICAgSFJFU1VMVCBociA9IEdyYXBo
aWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVSb3VuZGVkUmVjdGFuZ2xlR2VvbWV0
cnkoRDJEMTo6Um91bmRlZFJlY3QocmVjdFRvRHJhdywgcmFkaXVzV2lkdGgsIHJhZGl1c0hlaWdo
dCksICZyb3VuZFJlY3QpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsK
ICAgICAgICAgYXBwZW5kR2VvbWV0cnkocm91bmRSZWN0LmdldCgpKTsKKyAgICAgICAgQVNTRVJU
KHJlZkNvdW50KHJvdW5kUmVjdC5nZXQoKSkgPT0gMik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTUwMyw4ICs1NjQsMTEgQEAgdm9pZCBQYXRoOjpwbGF0Zm9ybUFkZFBhdGhGb3JSb3Vu
ZGVkUmVjdAogCiB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCiB7Ci0gICAgaWYgKGlzTnVsbCgp
KQorICAgIGlmIChpc051bGwoKSkgeworICAgICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwor
ICAgICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsK
KyAgICB9CiAKICAgICBpZiAoIW1fYWN0aXZlUGF0aCkgewogICAgICAgICBBU1NFUlQoIW1fb3Bl
bkZpZ3VyZUNvdW50KTsKQEAgLTUxMiwxOCArNTc2LDcgQEAgdm9pZCBQYXRoOjpjbG9zZVN1YnBh
dGgoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX29wZW5GaWd1cmVDb3Vu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoRDJEMV9G
SUdVUkVfRU5EX0NMT1NFRCk7Ci0gICAgLS1tX29wZW5GaWd1cmVDb3VudDsKLSAgICBpZiAobV9v
cGVuRmlndXJlQ291bnQgPiAwKSB7Ci0gICAgICAgIEFTU0VSVChtX2FjdGl2ZVBhdGhHZW9tZXRy
eSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIUkVTVUxUIGhyID0gbV9hY3RpdmVQ
YXRoLT5DbG9zZSgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBjbG9zZUFueU9w
ZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9DTE9TRUQpOwogfQogCiBzdGF0aWMgRmxvYXRQ
b2ludCBhcmNTdGFydChjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0IHJhZGl1cywgZmxv
YXQgc3RhcnRBbmdsZSkKQEAgLTYwMCw2ICs2NTMsNyBAQCB2b2lkIFBhdGg6OmFkZFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByKQogICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnkociwgJnJlY3RhbmdsZSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgYXBwZW5kR2VvbWV0cnkocmVjdGFu
Z2xlLmdldCgpKTsKKyAgICBBU1NFUlQocmVmQ291bnQocmVjdGFuZ2xlLmdldCgpKSA9PSAyKTsK
IH0KIAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0UG9pbnQgcCwgZmxvYXQgcmFkaXVzWCwg
ZmxvYXQgcmFkaXVzWSwgZmxvYXQgcm90YXRpb24sIGZsb2F0IHN0YXJ0QW5nbGUsIGZsb2F0IGVu
ZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCkBAIC02MjAsNiArNjc0LDcgQEAgdm9pZCBQYXRo
OjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcgogICAgIEhSRVNVTFQgaHIgPSBHcmFwaGlj
c0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRWxsaXBzZUdlb21ldHJ5KEQyRDE6OkVs
bGlwc2Uoci5jZW50ZXIoKSwgMC41ICogci53aWR0aCgpLCAwLjUgKiByLmhlaWdodCgpKSwgJmVs
bGlwc2UpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogICAgIGFwcGVuZEdl
b21ldHJ5KGVsbGlwc2UuZ2V0KCkpOworICAgIEFTU0VSVChyZWZDb3VudChlbGxpcHNlLmdldCgp
KSA9PSAyKTsKIH0KIAogdm9pZCBQYXRoOjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQpAQCAtNjQyLDYgKzY5Nyw3IEBAIHZvaWQgUGF0
aDo6Y2xlYXIoKQogICAgIG1fcGF0aCA9IG51bGxwdHI7CiAgICAgbV9hY3RpdmVQYXRoID0gbnVs
bHB0cjsKICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7CisgICAgY2xlYXJHZW9t
ZXRyaWVzKCk7CiB9CiAKIGJvb2wgUGF0aDo6aXNFbXB0eSgpIGNvbnN0CkBAIC02NTIsNiArNzA4
LDggQEAgYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKICAgICBpZiAoIW1fcGF0aC0+R2V0U291
cmNlR2VvbWV0cnlDb3VudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAorICAgIEFTU0VSVCht
X3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSA9PSBtX2dlb21ldHJpZXMuc2l6ZSgpKTsK
KwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0NPTVB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9D
T01QdHIuaAkocmV2aXNpb24gMjQ5NTYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L0NPTVB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsMTEgQEAgZW51bSBDcmVhdGVU
YWcgeyBDcmVhdGUgfTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIENPTVB0ciB7CiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBUKiBQdHJUeXBlOwotICAgIENPTVB0cigpIDogbV9wdHIoMCkgeyB9
CisgICAgQ09NUHRyKCkgOiBtX3B0cihudWxscHRyKSB7IH0KICAgICBDT01QdHIoVCogcHRyKSA6
IG1fcHRyKHB0cikgeyBpZiAobV9wdHIpIG1fcHRyLT5BZGRSZWYoKTsgfQogICAgIENPTVB0cihB
ZG9wdENPTVRhZywgVCogcHRyKSA6IG1fcHRyKHB0cikgeyB9CiAgICAgQ09NUHRyKGNvbnN0IENP
TVB0ciYgbykgOiBtX3B0cihvLm1fcHRyKSB7IGlmIChUKiBwdHIgPSBtX3B0cikgcHRyLT5BZGRS
ZWYoKTsgfQorICAgIENPTVB0cihDT01QdHImJiBvKSA6IG1fcHRyKG8ubGVha1JlZigpKSB7IH0K
IAogICAgIENPTVB0cihRdWVyeVRhZywgSVVua25vd24qIHB0cikgOiBtX3B0cihjb3B5UXVlcnlJ
bnRlcmZhY2VSZWYocHRyKSkgeyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ09NUHRyKFF1
ZXJ5VGFnLCBjb25zdCBDT01QdHI8VT4mIHB0cikgOiBtX3B0cihjb3B5UXVlcnlJbnRlcmZhY2VS
ZWYocHRyLmdldCgpKSkgeyB9CkBAIC03OSw2ICs4MCw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRv
ciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmQ09NUHRyOjpn
ZXQgOiAwOyB9CiAKICAgICBDT01QdHImIG9wZXJhdG9yPShjb25zdCBDT01QdHImKTsKKyAgICBD
T01QdHImIG9wZXJhdG9yPShDT01QdHImJik7CiAgICAgQ09NUHRyJiBvcGVyYXRvcj0oVCopOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENPTVB0ciYgb3BlcmF0b3I9KGNvbnN0IENPTVB0cjxV
PiYpOwogCkBAIC0xNjUsNiArMTY3LDE1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBD
T01QdHI8VD4mIEMKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBDT01QdHI8VD4mIENPTVB0cjxUPjo6b3BlcmF0b3I9KENPTVB0cjxUPiYmIG8pCit7
CisgICAgVCogcHRyID0gbV9wdHI7CisgICAgbV9wdHIgPSBvLmxlYWtSZWYoKTsKKyAgICBpZiAo
cHRyKQorICAgICAgICBwdHItPlJlbGVhc2UoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGluZSBDT01QdHI8VD4m
IENPTVB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IENPTVB0cjxVPiYgbykKIHsKICAgICBUKiBvcHRy
ID0gby5nZXQoKTsKQEAgLTIxOCw2ICsyMjksMTkgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lCiAgICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsKIH0KIAorI2lmICFBU1NF
UlRfRElTQUJMRUQKK2lubGluZSB1bnNpZ25lZCByZWZDb3VudChJVW5rbm93biogcHRyKQorewor
ICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIHRlbXAgPSBw
dHItPkFkZFJlZigpOworICAgIHVuc2lnbmVkIHZhbHVlID0gcHRyLT5SZWxlYXNlKCk7CisgICAg
QVNTRVJUKHRlbXAgPSB2YWx1ZSArIDEpOworICAgIHJldHVybiB2YWx1ZTsKK30KKyNlbmRpZgor
CiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUD4gc3RydWN0IElzU21hcnRQ
dHI8Q09NUHRyPFA+PiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378205</attachid>
            <date>2019-09-06 10:43:34 -0700</date>
            <delta_ts>2019-09-06 16:19:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201534-20190906104330.patch</filename>
            <type>text/plain</type>
            <size>23058</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE5LTA5LTA1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFBhdGhEaXJlY3QyRCBDbGVh
bnVwcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAx
NTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4g
QWRkIGEgQ09NUHRyPD4gbW92ZSBvcGVyYXRvci4KKyAgICAgICAgMi4gUmVkdWNlIGNvcHlpbmcg
SUQyRDFHZW9tZXRyeSBvYmplY3RzLgorICAgICAgICAzLiBQcm90ZWN0IGFnYWluc3QgdXNpbmcg
dGhlIElEMkQxUGF0aEdlb21ldHJ5IGFmdGVyIHRoZQorICAgICAgICAgICBJRDJEMUdlb21ldHJ5
U2luaydzIENsb3NlIG9wZXJhdGlvbiBpcyB1c2VkLgorICAgICAgICA0LiBBZGQgYSBkZWJ1Zy1v
bmx5ICdyZWZDb3VudCcgZnVuY3Rpb24gdG8gQ09NUHRyIHRvIGhlbHAKKyAgICAgICAgICAgdHJh
Y2sgZG93biBtZW1vcnkgZXJyb3JzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWN0aXZlUGF0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlyZWN0MkQ6OmRyYXdQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0aERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ09NUHRyLmg6CisgICAg
ICAgIChDT01QdHI6OkNPTVB0cik6CisgICAgICAgICg9KToKKyAgICAgICAgKHJlZkNvdW50KToK
KwogMjAxOS0wOS0wNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4K
IAogICAgICAgICBbV2luXSBBZGQgc3VwcG9ydCBmb3IgTW91c2VFdmVudC5idXR0b25zCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiAyNDk1NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NCwxNCArMTk0LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAj
aWYgVVNFKERJUkVDVDJEKQotICAgICAgICBJRDJEMUdlb21ldHJ5U2luayogYWN0aXZlUGF0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlUGF0aC5nZXQoKTsgfQogICAgICAgICB2b2lkIGFwcGVu
ZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqKTsKICAgICAgICAgdm9pZCBjcmVhdGVHZW9tZXRyeVdp
dGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mKSBjb25zdDsK
LSAgICAgICAgdm9pZCBkcmF3RGlkQ29tcGxldGUoKTsKIAogICAgICAgICBIUkVTVUxUIGluaXRp
YWxpemVQYXRoU3RhdGUoKTsKICAgICAgICAgdm9pZCBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICB2b2lkIGNsb3NlQW55T3Blbkdlb21ldHJpZXMoKTsKKyAg
ICAgICAgdm9pZCBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKHVuc2lnbmVkIGZpZ3VyZUVuZFN0eWxl
KSBjb25zdDsKKyAgICAgICAgdm9pZCBjbGVhckdlb21ldHJpZXMoKTsKICNlbmRpZgogCiAjaWZu
ZGVmIE5ERUJVRwpAQCAtMjEwLDEwICsyMDksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgcHJpdmF0ZToKICNpZiBVU0UoRElSRUNUMkQpCisgICAgICAgIFZlY3RvcjxJRDJEMUdlb21l
dHJ5Kj4gbV9nZW9tZXRyaWVzOwogICAgICAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBt
X3BhdGg7Ci0gICAgICAgIENPTVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gbV9hY3RpdmVQYXRoR2Vv
bWV0cnk7Ci0gICAgICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5U2luaz4gbV9hY3RpdmVQYXRoOwot
ICAgICAgICBzaXplX3QgbV9vcGVuRmlndXJlQ291bnQgeyAwIH07CisgICAgICAgIG11dGFibGUg
Q09NUHRyPElEMkQxR2VvbWV0cnlTaW5rPiBtX2FjdGl2ZVBhdGg7CisgICAgICAgIG11dGFibGUg
Ym9vbCBtX2ZpZ3VyZUlzT3BlbmVkIHsgZmFsc2UgfTsKICNlbHNlCiAgICAgICAgIFBsYXRmb3Jt
UGF0aFB0ciBtX3BhdGggeyBudWxscHRyIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyNDk1NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDEx
ICs0OTUsNyBAQCB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFBsYXRmb3JtQ29udGV4CiAKIHZv
aWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgUGF0aCYgcGF0aCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU2hhZG93
U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChwYXRoLmFjdGl2ZVBhdGgoKSkgewotICAg
ICAgICAvLyBNYWtlIHN1cmUgaXQncyBjbG9zZWQuIFRoaXMgbWlnaHQgZmFpbCBpZiB0aGUgcGF0
aCB3YXMgYWxyZWFkeSBjbG9zZWQsIHNvCi0gICAgICAgIC8vIGlnbm9yZSB0aGUgcmV0dXJuIHZh
bHVlLgotICAgICAgICBwYXRoLmFjdGl2ZVBhdGgoKS0+Q2xvc2UoKTsKLSAgICB9CisgICAgcGF0
aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKIAogICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIApAQCAtNTgyLDgg
KzU3OCw3IEBAIHZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAKIHsKICAg
ICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAKLSAgICBp
ZiAocGF0aC5hY3RpdmVQYXRoKCkpCi0gICAgICAgIHBhdGguYWN0aXZlUGF0aCgpLT5DbG9zZSgp
OworICAgIHBhdGguY2xvc2VBbnlPcGVuR2VvbWV0cmllcyhEMkQxX0ZJR1VSRV9FTkRfT1BFTik7
CiAKICAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJ
KHJldmlzaW9uIDI0OTU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QYXRoRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsOSArNjIsOSBAQCBQYXRoIFBh
dGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhjb25zdCBWCiAKICAgICBwYXRoLm1vdmVUbyhwb2lu
dHMuZmlyc3QoKSk7CiAKLSAgICBBU1NFUlQocGF0aC5hY3RpdmVQYXRoKCkpOworICAgIEFTU0VS
VChwYXRoLm1fYWN0aXZlUGF0aCk7CiAKLSAgICBwYXRoLmFjdGl2ZVBhdGgoKS0+QWRkTGluZXMo
ZDJkUG9pbnRzLmRhdGEoKSwgZDJkUG9pbnRzLnNpemUoKSk7CisgICAgcGF0aC5tX2FjdGl2ZVBh
dGgtPkFkZExpbmVzKGQyZFBvaW50cy5kYXRhKCksIGQyZFBvaW50cy5zaXplKCkpOwogICAgIHBh
dGguY2xvc2VTdWJwYXRoKCk7CiAKICAgICByZXR1cm4gcGF0aDsKQEAgLTcyLDcgKzcyLDEwIEBA
IFBhdGggUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKGNvbnN0IFYKIAogUGF0aDo6UGF0aCgp
ID0gZGVmYXVsdDsKIAotUGF0aDo6flBhdGgoKSA9IGRlZmF1bHQ7CitQYXRoOjp+UGF0aCgpCit7
CisgICAgY2xlYXJHZW9tZXRyaWVzKCk7Cit9CiAKIFBsYXRmb3JtUGF0aFB0ciBQYXRoOjplbnN1
cmVQbGF0Zm9ybVBhdGgoKQogewpAQCAtODEsMzQgKzg0LDQxIEBAIFBsYXRmb3JtUGF0aFB0ciBQ
YXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwog
ICAgICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSAxKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gbV9wYXRoLmdldCgpOwogfQogCit2b2lkIFBhdGg6OmNsZWFyR2VvbWV0cmllcygpCit7
CisgICAgLy8gTWFudWFsbHkgY2xlYW4gdGhlc2UgdXAgc28gdGhhdCB3ZSBjYW4gdXNlIHRoaXMg
dmVjdG9yIHdpdGggRGlyZWN0MkQgQVBJcy4KKyAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9n
ZW9tZXRyaWVzKQorICAgICAgICBnZW9tZXRyeS0+UmVsZWFzZSgpOworICAgIG1fZ2VvbWV0cmll
cy5jbGVhcigpOworfQorCiB2b2lkIFBhdGg6OmFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkq
IGdlb21ldHJ5KQogeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBiZWZvcmUg
PSByZWZDb3VudChnZW9tZXRyeSk7CisjZW5kaWYKKwogICAgIHVuc2lnbmVkIGdlb21ldHJ5Q291
bnQgPSBtX3BhdGggPyBtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSA6IDA7Ci0gICAg
VmVjdG9yPElEMkQxR2VvbWV0cnkqPiBnZW9tZXRyaWVzKGdlb21ldHJ5Q291bnQsIG51bGxwdHIp
OwogCi0gICAgLy8gTm90ZTogJ0dldFNvdXJjZUdlb21ldHJpZXMnIHJldHVybnMgZ2VvbWV0cmll
cyB0aGF0IGhhdmUgYSArMSByZWYgY291bnQuCi0gICAgLy8gc28gdGhleSBtdXN0IGJlIHJlbGVh
c2VkIGJlZm9yZSB3ZSByZXR1cm4uCi0gICAgaWYgKGdlb21ldHJ5Q291bnQpCi0gICAgICAgIG1f
cGF0aC0+R2V0U291cmNlR2VvbWV0cmllcyhnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cnlDb3Vu
dCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9nZW9tZXRyaWVzLnNpemUoKSA9PSBnZW9tZXRyeUNv
dW50KTsKIAogICAgIGdlb21ldHJ5LT5BZGRSZWYoKTsKLSAgICBnZW9tZXRyaWVzLmFwcGVuZChn
ZW9tZXRyeSk7CisgICAgbV9nZW9tZXRyaWVzLmFwcGVuZChnZW9tZXRyeSk7CiAKICAgICBhdXRv
IGZpbGxNb2RlID0gbV9wYXRoID8gbV9wYXRoLT5HZXRGaWxsTW9kZSgpIDogRDJEMV9GSUxMX01P
REVfV0lORElORzsKIAotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHByb3RlY3RlZFBh
dGggPSBtX3BhdGg7CiAgICAgbV9wYXRoID0gbnVsbHB0cjsKIAotICAgIEhSRVNVTFQgaHIgPSBH
cmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxs
TW9kZSwgZ2VvbWV0cmllcy5kYXRhKCksIGdlb21ldHJpZXMuc2l6ZSgpLCAmbV9wYXRoKTsKKyAg
ICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdl
b21ldHJ5R3JvdXAoZmlsbE1vZGUsIG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2VvbWV0cmllcy5z
aXplKCksICZtX3BhdGgpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCi0g
ICAgZm9yIChhdXRvIGVudHJ5IDogZ2VvbWV0cmllcykKLSAgICAgICAgZW50cnktPlJlbGVhc2Uo
KTsKKyAgICBBU1NFUlQocmVmQ291bnQoZ2VvbWV0cnkpID09IGJlZm9yZSArIDEpOwogfQogCiB2
b2lkIFBhdGg6OmNyZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKFdpbmRSdWxlIHdlYmtpdEZpbGxN
b2RlLCBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiYgcGF0aCkgY29uc3QKQEAgLTEyNCw1OSAr
MTM0LDYwIEBAIHZvaWQgUGF0aDo6Y3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoV2kKIAogICAg
IHVuc2lnbmVkIGdlb21ldHJ5Q291bnQgPSBtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQo
KTsKIAotICAgIFZlY3RvcjxJRDJEMUdlb21ldHJ5Kj4gZ2VvbWV0cmllcyhnZW9tZXRyeUNvdW50
LCBudWxscHRyKTsKLSAgICBBU1NFUlQoZ2VvbWV0cnlDb3VudCk7Ci0KLSAgICAvLyBOb3RlOiAn
R2V0U291cmNlR2VvbWV0cmllcycgcmV0dXJucyBnZW9tZXRyaWVzIHRoYXQgaGF2ZSBhICsxIHJl
ZiBjb3VudC4KLSAgICAvLyBzbyB0aGV5IG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHdlIHJldHVy
bi4KLSAgICBtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJpZXMoZ2VvbWV0cmllcy5kYXRhKCksIGdl
b21ldHJ5Q291bnQpOworICAgIEFTU0VSVChtX2dlb21ldHJpZXMuc2l6ZSgpID09IGdlb21ldHJ5
Q291bnQpOwogCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBnZW9tZXRyaWVzLmRhdGEoKSwgZ2Vv
bWV0cmllcy5zaXplKCksICZwYXRoKTsKKyAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0
OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIGNvbnN0X2Nh
c3Q8SUQyRDFHZW9tZXRyeSoqPihtX2dlb21ldHJpZXMuZGF0YSgpKSwgbV9nZW9tZXRyaWVzLnNp
emUoKSwgJnBhdGgpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
Zm9yIChhdXRvIGVudHJ5IDogZ2VvbWV0cmllcykKLSAgICAgICAgZW50cnktPlJlbGVhc2UoKTsK
KyAgICBBU1NFUlQocmVmQ291bnQocGF0aC5nZXQoKSkgPT0gMSk7CiB9CiAKIFBhdGg6OlBhdGgo
Y29uc3QgUGF0aCYgb3RoZXIpCiB7Ci0gICAgaWYgKG90aGVyLnBsYXRmb3JtUGF0aCgpICYmIG90
aGVyLmFjdGl2ZVBhdGgoKSkgewotICAgICAgICBhdXRvIG90aGVyUGF0aCA9IG90aGVyLnBsYXRm
b3JtUGF0aCgpOwotCi0gICAgICAgIHVuc2lnbmVkIGdlb21ldHJ5Q291bnQgPSBvdGhlclBhdGgt
PkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKTsKLQotICAgICAgICBWZWN0b3I8SUQyRDFHZW9tZXRy
eSo+IGdlb21ldHJpZXMoZ2VvbWV0cnlDb3VudCwgbnVsbHB0cik7Ci0gICAgICAgIEFTU0VSVChn
ZW9tZXRyeUNvdW50KTsKLQotICAgICAgICAvLyBOb3RlOiAnR2V0U291cmNlR2VvbWV0cmllcycg
cmV0dXJucyBnZW9tZXRyaWVzIHRoYXQgaGF2ZSBhICsxIHJlZiBjb3VudC4KLSAgICAgICAgLy8g
c28gdGhleSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSB3ZSByZXR1cm4uCi0gICAgICAgIG90aGVy
UGF0aC0+R2V0U291cmNlR2VvbWV0cmllcyhnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cnlDb3Vu
dCk7Ci0KLSAgICAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKG90aGVyLm1fcGF0aC0+R2V0RmlsbE1vZGUoKSwgZ2Vv
bWV0cmllcy5kYXRhKCksIGdlb21ldHJ5Q291bnQsICZtX3BhdGgpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWdu
ZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgpKTsKKyAgICB1bnNpZ25l
ZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOwor
I2VuZGlmCisgICAgbV9wYXRoID0gb3RoZXIubV9wYXRoOworICAgIG1fYWN0aXZlUGF0aCA9IG90
aGVyLm1fYWN0aXZlUGF0aDsKKyAgICBtX2dlb21ldHJpZXMgPSBvdGhlci5tX2dlb21ldHJpZXM7
CisgICAgZm9yIChhdXRvKiBnZW9tZXRyeSA6IG1fZ2VvbWV0cmllcykKKyAgICAgICAgZ2VvbWV0
cnktPkFkZFJlZigpOwogCi0gICAgICAgIGZvciAoYXV0byBlbnRyeSA6IGdlb21ldHJpZXMpCi0g
ICAgICAgICAgICBlbnRyeS0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBBU1NFUlQoIW1fcGF0aCB8
fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOworICAgIEFTU0VSVCgh
bV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZlUGF0
aENvdW50ICsgMSk7CiB9CiAgICAgCiBQYXRoOjpQYXRoKFBhdGgmJiBvdGhlcikKIHsKLSAgICBt
X3BhdGggPSBvdGhlci5tX3BhdGg7Ci0gICAgbV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3RpdmVQ
YXRoOwotICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gb3RoZXIubV9hY3RpdmVQYXRoR2VvbWV0
cnk7Ci0gICAgb3RoZXIubV9wYXRoID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX2FjdGl2ZVBhdGgg
PSBudWxscHRyOwotICAgIG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3Ro
ZXIubV9wYXRoLmdldCgpKTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3Vu
dChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOworI2VuZGlmCisgICAgbV9wYXRoID0gV1RGTW92
ZShvdGhlci5tX3BhdGgpOworICAgIG1fYWN0aXZlUGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3Rp
dmVQYXRoKTsKKyAgICBtX2dlb21ldHJpZXMgPSBXVEZNb3ZlKG90aGVyLm1fZ2VvbWV0cmllcyk7
CisKKyAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291bnQpOworICAg
IEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IGFjdGl2ZVBhdGhDb3VudCk7
CiB9CiAKIFBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKIHsKICAgICBp
ZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdl
dCgpKTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2Fj
dGl2ZVBhdGguZ2V0KCkpOworI2VuZGlmCiAgICAgbV9wYXRoID0gb3RoZXIubV9wYXRoOwogICAg
IG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0aDsKLSAgICBtX2FjdGl2ZVBhdGhHZW9t
ZXRyeSA9IG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5OworICAgIG1fZ2VvbWV0cmllcyA9IG90
aGVyLm1fZ2VvbWV0cmllczsKKyAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9nZW9tZXRyaWVz
KQorICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7CisKKyAgICBBU1NFUlQoIW1fcGF0aCB8fCBy
ZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOworICAgIEFTU0VSVCghbV9h
Y3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZlUGF0aENv
dW50ICsgMSk7CisKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE4NCwxMiArMTk1LDE4IEBA
IFBhdGgmIFBhdGg6Om9wZXJhdG9yPShQYXRoJiYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0g
Jm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgbV9wYXRoID0gb3RoZXIubV9wYXRo
OwotICAgIG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0aDsKLSAgICBtX2FjdGl2ZVBh
dGhHZW9tZXRyeSA9IG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5OwotICAgIG90aGVyLm1fcGF0
aCA9IG51bGxwdHI7Ci0gICAgb3RoZXIubV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICBvdGhl
ci5tX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
CisgICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgpKTsK
KyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBh
dGguZ2V0KCkpOworI2VuZGlmCisgICAgbV9wYXRoID0gV1RGTW92ZShvdGhlci5tX3BhdGgpOwor
ICAgIG1fYWN0aXZlUGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoKTsKKyAgICBtX2dl
b21ldHJpZXMgPSBXVEZNb3ZlKG90aGVyLm1fZ2VvbWV0cmllcyk7CisKKyAgICBBU1NFUlQocmVm
Q291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291bnQpOworICAgIEFTU0VSVChyZWZDb3VudCht
X2FjdGl2ZVBhdGguZ2V0KCkpID09IGFjdGl2ZVBhdGhDb3VudCk7CisKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKQEAgLTE5NywzNSArMjE0LDIzIEBAIEhSRVNVTFQgUGF0aDo6aW5pdGlhbGl6ZVBh
dGhTdGF0ZSgpCiB7CiAgICAgbV9wYXRoID0gbnVsbHB0cjsKICAgICBtX2FjdGl2ZVBhdGggPSBu
dWxscHRyOwotICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsKKyAgICBjbGVhckdl
b21ldHJpZXMoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVh
dGVQYXRoR2VvbWV0cnkoJm1fYWN0aXZlUGF0aEdlb21ldHJ5KTsKKyAgICBDT01QdHI8SUQyRDFQ
YXRoR2VvbWV0cnk+IGFjdGl2ZVBhdGhHZW9tZXRyeTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnN5
c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5KCZhY3RpdmVQYXRoR2VvbWV0cnkpOwog
Ci0gICAgVmVjdG9yPElEMkQxR2VvbWV0cnkqPiBnZW9tZXRyaWVzOwotICAgIGdlb21ldHJpZXMu
YXBwZW5kKG1fYWN0aXZlUGF0aEdlb21ldHJ5LmdldCgpKTsKKyAgICBhY3RpdmVQYXRoR2VvbWV0
cnktPkFkZFJlZigpOworICAgIG1fZ2VvbWV0cmllcy5hcHBlbmQoYWN0aXZlUGF0aEdlb21ldHJ5
LmdldCgpKTsKKyAgICBBU1NFUlQocmVmQ291bnQoYWN0aXZlUGF0aEdlb21ldHJ5LmdldCgpKSA9
PSAyKTsKIAotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rvcnko
KS0+Q3JlYXRlR2VvbWV0cnlHcm91cChEMkQxX0ZJTExfTU9ERV9XSU5ESU5HLCBnZW9tZXRyaWVz
LmRhdGEoKSwgZ2VvbWV0cmllcy5zaXplKCksICZtX3BhdGgpOworICAgIEhSRVNVTFQgaHIgPSBH
cmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChEMkQx
X0ZJTExfTU9ERV9XSU5ESU5HLCBtX2dlb21ldHJpZXMuZGF0YSgpLCBtX2dlb21ldHJpZXMuc2l6
ZSgpLCAmbV9wYXRoKTsKICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwog
Ci0gICAgcmV0dXJuIG1fYWN0aXZlUGF0aEdlb21ldHJ5LT5PcGVuKCZtX2FjdGl2ZVBhdGgpOwot
fQotCi12b2lkIFBhdGg6OmRyYXdEaWRDb21wbGV0ZSgpCi17Ci0gICAgRmxvYXRQb2ludCBjdXJy
ZW50UG9pbnQgPSB0aGlzLT5jdXJyZW50UG9pbnQoKTsKLQotICAgIC8vIFRvIG1haW50YWluIHBy
b3BlciBzZW1hbnRpY3Mgd2l0aCBDRywgd2UgbmVlZCB0byBjbGVhciBvdXIgRGlyZWN0MkQKLSAg
ICAvLyBwYXRoIG9iamVjdHMgd2hlbiBhIGRyYXcgaGFzIGZpbmlzaGVkLgotICAgIEhSRVNVTFQg
aHIgPSBjb25zdF9jYXN0PFBhdGgqPih0aGlzKS0+aW5pdGlhbGl6ZVBhdGhTdGF0ZSgpOwotCi0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FjdGl2ZVBh
dGgtPlNldEZpbGxNb2RlKEQyRDFfRklMTF9NT0RFX1dJTkRJTkcpOwotCi0gICAgbV9hY3RpdmVQ
YXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50UG9pbnQsIEQyRDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7
Ci0gICAgKyttX29wZW5GaWd1cmVDb3VudDsKKyAgICBociA9IGFjdGl2ZVBhdGhHZW9tZXRyeS0+
T3BlbigmbV9hY3RpdmVQYXRoKTsKKyAgICBBU1NFUlQocmVmQ291bnQoYWN0aXZlUGF0aEdlb21l
dHJ5LmdldCgpKSA9PSAyKTsKKyAgICBBU1NFUlQocmVmQ291bnQobV9hY3RpdmVQYXRoLmdldCgp
KSA9PSAxKTsKKyAgICByZXR1cm4gaHI7CiB9CiAKIGJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CkBAIC0yMzcsNyArMjQyLDcg
QEAgYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwbwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBCT09MIGNvbnRhaW5zOwotICAgIGlmICghU1VDQ0VFREVEKG1fcGF0
aC0+RmlsbENvbnRhaW5zUG9pbnQoRDJEMTo6UG9pbnQyRihwb2ludC54KCksIHBvaW50LnkoKSks
IG51bGxwdHIsICZjb250YWlucykpKQorICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+RmlsbENv
bnRhaW5zUG9pbnQocG9pbnQsIG51bGxwdHIsICZjb250YWlucykpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICByZXR1cm4gY29udGFpbnM7CkBAIC0yNTQsMjggKzI1OSwzMyBAQCBib29s
IFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwCiAgICAgR3JhcGhpY3NDb250ZXh0
IHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRt
YXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKICAgICBhcHBsaWVyLT5zdHJva2VT
dHlsZSgmc2NyYXRjaENvbnRleHQpOwogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2ln
bmVkIGJlZm9yZSA9IHJlZkNvdW50KG1fcGF0aC5nZXQoKSk7CisjZW5kaWYKKwogICAgIEJPT0wg
Y29udGFpbnNQb2ludCA9IGZhbHNlOwogICAgIEhSRVNVTFQgaHIgPSBtX3BhdGgtPlN0cm9rZUNv
bnRhaW5zUG9pbnQocG9pbnQsIHNjcmF0Y2hDb250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBzY3Jh
dGNoQ29udGV4dC5wbGF0Zm9ybVN0cm9rZVN0eWxlKCksIG51bGxwdHIsIDEuMGYsICZjb250YWlu
c1BvaW50KTsKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IGJlZm9yZSk7CiAgICAgcmV0
dXJuIGNvbnRhaW5zUG9pbnQ7CiB9CiAKLXZvaWQgUGF0aDo6Y2xvc2VBbnlPcGVuR2VvbWV0cmll
cygpCit2b2lkIFBhdGg6OmNsb3NlQW55T3Blbkdlb21ldHJpZXModW5zaWduZWQgZmlndXJlRW5k
U3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fYWN0aXZlUGF0aCk7CisgICAgaWYgKG1fZmln
dXJlSXNPcGVuZWQpIHsKKyAgICAgICAgQVNTRVJUKG1fYWN0aXZlUGF0aCk7CiAKLSAgICBpZiAo
IW1fb3BlbkZpZ3VyZUNvdW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gZW5kU3R5
bGUgPSBzdGF0aWNfY2FzdDxEMkQxX0ZJR1VSRV9FTkQ+KGZpZ3VyZUVuZFN0eWxlKTsKKyAgICAg
ICAgbV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoZW5kU3R5bGUpOworICAgICAgICBtX2ZpZ3VyZUlz
T3BlbmVkID0gZmFsc2U7CiAKLSAgICB3aGlsZSAobV9vcGVuRmlndXJlQ291bnQpIHsKLSAgICAg
ICAgbV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwotICAgICAg
ICAtLW1fb3BlbkZpZ3VyZUNvdW50OworICAgICAgICBIUkVTVUxUIGhyID0gbV9hY3RpdmVQYXRo
LT5DbG9zZSgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgfQogCi0gICAg
SFJFU1VMVCBociA9IG1fYWN0aXZlUGF0aC0+Q2xvc2UoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisgICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKIH0KIAogdm9pZCBQYXRoOjp0cmFu
c2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQpAQCAtMjg4LDQ5ICsyOTgsMzIgQEAgdm9pZCBQ
YXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmbwogICAgIGlmICh0cmFuc2Zvcm0uaXNJ
ZGVudGl0eSgpIHx8IGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3B0aW9uYWw8
RmxvYXRQb2ludD4gY3VycmVudFBvaW50OwotICAgIGlmIChoYXNDdXJyZW50UG9pbnQoKSkKLSAg
ICAgICAgY3VycmVudFBvaW50ID0gdGhpcy0+Y3VycmVudFBvaW50KCk7Ci0KLSAgICBib29sIHBh
dGhJc0FjdGl2ZSA9IGZhbHNlOwotICAgIGlmIChtX2FjdGl2ZVBhdGgpIHsKLSAgICAgICAgY2xv
c2VBbnlPcGVuR2VvbWV0cmllcygpOwotICAgICAgICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwot
ICAgICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7Ci0gICAgICAgIHBhdGhJc0Fj
dGl2ZSA9IHRydWU7Ci0gICAgfQorICAgIGlmIChtX2FjdGl2ZVBhdGgpCisgICAgICAgIGNsb3Nl
QW55T3Blbkdlb21ldHJpZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOworCisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KG1fcGF0aC5nZXQoKSk7Cisj
ZW5kaWYKIAogICAgIENPTVB0cjxJRDJEMVRyYW5zZm9ybWVkR2VvbWV0cnk+IHRyYW5zZm9ybWVk
UGF0aDsKICAgICBpZiAoIVNVQ0NFRURFRChHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rvcnko
KS0+Q3JlYXRlVHJhbnNmb3JtZWRHZW9tZXRyeShtX3BhdGguZ2V0KCksIHRyYW5zZm9ybSwgJnRy
YW5zZm9ybWVkUGF0aCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8SUQyRDFHZW9t
ZXRyeSo+IGdlb21ldHJpZXM7Ci0gICAgZ2VvbWV0cmllcy5hcHBlbmQodHJhbnNmb3JtZWRQYXRo
LmdldCgpKTsKLQotICAgIGlmIChwYXRoSXNBY3RpdmUpIHsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVBhdGhHZW9tZXRyeSgmbV9hY3RpdmVQYXRoR2Vv
bWV0cnkpOwotICAgICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeS0+T3BlbigmbV9hY3RpdmVQYXRo
KTsKLSAgICAgICAgZ2VvbWV0cmllcy5hcHBlbmQobV9hY3RpdmVQYXRoR2VvbWV0cnkuZ2V0KCkp
OwotICAgIH0KKyAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBiZWZvcmUpOwor
ICAgIEFTU0VSVChyZWZDb3VudCh0cmFuc2Zvcm1lZFBhdGguZ2V0KCkpID09IDEpOwogCiAgICAg
YXV0byBmaWxsTW9kZSA9IG1fcGF0aC0+R2V0RmlsbE1vZGUoKTsKIAogICAgIG1fcGF0aCA9IG51
bGxwdHI7CiAKLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5
KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIGdlb21ldHJpZXMuZGF0YSgpLCBnZW9t
ZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CisgICAgY2xlYXJHZW9tZXRyaWVzKCk7CiAKLSAgICBpZiAoIWN1cnJlbnRQb2ludCkKLSAg
ICAgICAgcmV0dXJuOworICAgIHRyYW5zZm9ybWVkUGF0aC0+QWRkUmVmKCk7CisgICAgbV9nZW9t
ZXRyaWVzLmFwcGVuZCh0cmFuc2Zvcm1lZFBhdGguZ2V0KCkpOwogCi0gICAgaWYgKCFtX2FjdGl2
ZVBhdGgpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUo
ZmlsbE1vZGUpOwotCi0gICAgYXV0byB0cmFuc2Zvcm1lZFBvaW50ID0gdHJhbnNmb3JtLm1hcFBv
aW50KGN1cnJlbnRQb2ludC52YWx1ZSgpKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkJlZ2luRmlndXJl
KHRyYW5zZm9ybWVkUG9pbnQsIEQyRDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7Ci0gICAgbV9vcGVu
RmlndXJlQ291bnQgPSAxOworICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgbV9nZW9tZXRyaWVzLmRh
dGEoKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CisgICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkgPT0gMSk7
CiB9CiAKIEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdApAQCAtMzc0LDU0ICsz
NjcsNTcgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJvawogCiB2b2lk
IFBhdGg6Om9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCkKIHsKLSAgICBpZiAo
bV9vcGVuRmlndXJlQ291bnQpCisgICAgaWYgKG1fZmlndXJlSXNPcGVuZWQpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGlmICghbV9hY3RpdmVQYXRoKSB7CisgICAgICAgIENPTVB0cjxJRDJEMVBh
dGhHZW9tZXRyeT4gYWN0aXZlUGF0aEdlb21ldHJ5OworICAgICAgICBHcmFwaGljc0NvbnRleHQ6
OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5KCZhY3RpdmVQYXRoR2VvbWV0cnkp
OworICAgICAgICBIUkVTVUxUIGhyID0gYWN0aXZlUGF0aEdlb21ldHJ5LT5PcGVuKCZtX2FjdGl2
ZVBhdGgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICAgICAg
YXBwZW5kR2VvbWV0cnkoYWN0aXZlUGF0aEdlb21ldHJ5LmxlYWtSZWYoKSk7CisgICAgICAgIEFT
U0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOworICAgIH0KKwogICAgIG1f
YWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElORyk7CiAgICAgbV9h
Y3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50UG9pbnQoKSwgRDJEMV9GSUdVUkVfQkVHSU5f
RklMTEVEKTsKLSAgICArK21fb3BlbkZpZ3VyZUNvdW50OworICAgIG1fZmlndXJlSXNPcGVuZWQg
PSB0cnVlOwogfQogCiB2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
IHsKLSAgICBpZiAobV9hY3RpdmVQYXRoKSB7Ci0gICAgICAgIGNsb3NlQW55T3Blbkdlb21ldHJp
ZXMoKTsKLSAgICAgICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICAgICAgbV9hY3RpdmVQ
YXRoR2VvbWV0cnkgPSBudWxscHRyOwotICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4dDo6c3lz
dGVtRmFjdG9yeSgpLT5DcmVhdGVQYXRoR2VvbWV0cnkoJm1fYWN0aXZlUGF0aEdlb21ldHJ5KTsK
KyAgICBpZiAobV9hY3RpdmVQYXRoKQorICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQy
RDFfRklHVVJFX0VORF9PUEVOKTsKIAotICAgIGFwcGVuZEdlb21ldHJ5KG1fYWN0aXZlUGF0aEdl
b21ldHJ5LmdldCgpKTsKKyAgICBDT01QdHI8SUQyRDFQYXRoR2VvbWV0cnk+IGFjdGl2ZVBhdGhH
ZW9tZXRyeTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0
aEdlb21ldHJ5KCZhY3RpdmVQYXRoR2VvbWV0cnkpOwogCi0gICAgaWYgKCFTVUNDRUVERUQobV9h
Y3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCkpKQorICAgIGlmICghU1VDQ0VF
REVEKGFjdGl2ZVBhdGhHZW9tZXRyeS0+T3BlbigmbV9hY3RpdmVQYXRoKSkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGFwcGVuZEdlb21ldHJ5KGFjdGl2ZVBhdGhHZW9tZXRyeS5sZWFrUmVmKCkp
OworCisgICAgQVNTRVJUKHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gMSk7CisKICAg
ICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2RlKEQyRDFfRklMTF9NT0RFX1dJTkRJTkcpOwogICAg
IG1fYWN0aXZlUGF0aC0+QmVnaW5GaWd1cmUocG9pbnQsIEQyRDFfRklHVVJFX0JFR0lOX0ZJTExF
RCk7Ci0gICAgbV9vcGVuRmlndXJlQ291bnQgPSAxOworICAgIG1fZmlndXJlSXNPcGVuZWQgPSB0
cnVlOwogfQogCiB2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
IHsKLSAgICBBU1NFUlQobV9hY3RpdmVQYXRoLmdldCgpKTsKLQogICAgIG9wZW5GaWd1cmVBdEN1
cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7CiAgICAgbV9hY3RpdmVQYXRoLT5BZGRMaW5lKHBvaW50
KTsKIH0KIAogdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwg
Y29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICBBU1NFUlQobV9hY3RpdmVQYXRoLmdldCgpKTsK
LQogICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7CiAgICAgbV9hY3Rp
dmVQYXRoLT5BZGRRdWFkcmF0aWNCZXppZXIoRDJEMTo6UXVhZHJhdGljQmV6aWVyU2VnbWVudChj
cCwgcCkpOwogfQogCiB2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgY3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7Ci0g
ICAgQVNTRVJUKG1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0KICAgICBvcGVuRmlndXJlQXRDdXJyZW50
UG9pbnRJZk5lY2Vzc2FyeSgpOwogICAgIG1fYWN0aXZlUGF0aC0+QWRkQmV6aWVyKEQyRDE6OkJl
emllclNlZ21lbnQoY3AxLCBjcDIsIHApKTsKIH0KQEAgLTQ5NSw2ICs0OTEsNyBAQCB2b2lkIFBh
dGg6OnBsYXRmb3JtQWRkUGF0aEZvclJvdW5kZWRSZWN0CiAgICAgICAgIEhSRVNVTFQgaHIgPSBH
cmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUm91bmRlZFJlY3RhbmdsZUdl
b21ldHJ5KEQyRDE6OlJvdW5kZWRSZWN0KHJlY3RUb0RyYXcsIHJhZGl1c1dpZHRoLCByYWRpdXNI
ZWlnaHQpLCAmcm91bmRSZWN0KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CiAgICAgICAgIGFwcGVuZEdlb21ldHJ5KHJvdW5kUmVjdC5nZXQoKSk7CisgICAgICAgIEFT
U0VSVChyZWZDb3VudChyb3VuZFJlY3QuZ2V0KCkpID09IDIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC01MDMsMjcgKzUwMCwxNyBAQCB2b2lkIFBhdGg6OnBsYXRmb3JtQWRkUGF0aEZv
clJvdW5kZWRSZWN0CiAKIHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKIHsKLSAgICBpZiAoaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9hY3RpdmVQYXRoKSB7Ci0gICAg
ICAgIEFTU0VSVCghbV9vcGVuRmlndXJlQ291bnQpOwotICAgICAgICBBU1NFUlQoIW1fYWN0aXZl
UGF0aEdlb21ldHJ5KTsKKyAgICBpZiAoaXNOdWxsKCkpIHsKKyAgICAgICAgbV9hY3RpdmVQYXRo
ID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9vcGVuRmln
dXJlQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYWN0aXZlUGF0aC0+RW5kRmlndXJl
KEQyRDFfRklHVVJFX0VORF9DTE9TRUQpOwotICAgIC0tbV9vcGVuRmlndXJlQ291bnQ7Ci0gICAg
aWYgKG1fb3BlbkZpZ3VyZUNvdW50ID4gMCkgewotICAgICAgICBBU1NFUlQobV9hY3RpdmVQYXRo
R2VvbWV0cnkpOworICAgIGlmICghbV9hY3RpdmVQYXRoKSB7CisgICAgICAgIEFTU0VSVCghbV9m
aWd1cmVJc09wZW5lZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBIUkVTVUxUIGhy
ID0gbV9hY3RpdmVQYXRoLT5DbG9zZSgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAg
ICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9DTE9TRUQpOwogfQogCiBz
dGF0aWMgRmxvYXRQb2ludCBhcmNTdGFydChjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIsIGZsb2F0
IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSkKQEAgLTYwMCw2ICs1ODcsNyBAQCB2b2lkIFBhdGg6
OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQogICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0Nv
bnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnkociwgJnJlY3Rh
bmdsZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgYXBwZW5kR2Vv
bWV0cnkocmVjdGFuZ2xlLmdldCgpKTsKKyAgICBBU1NFUlQocmVmQ291bnQocmVjdGFuZ2xlLmdl
dCgpKSA9PSAyKTsKIH0KIAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0UG9pbnQgcCwgZmxv
YXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSwgZmxvYXQgcm90YXRpb24sIGZsb2F0IHN0YXJ0QW5n
bGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCkBAIC02MjAsNiArNjA4LDcg
QEAgdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcgogICAgIEhSRVNVTFQg
aHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRWxsaXBzZUdlb21l
dHJ5KEQyRDE6OkVsbGlwc2Uoci5jZW50ZXIoKSwgMC41ICogci53aWR0aCgpLCAwLjUgKiByLmhl
aWdodCgpKSwgJmVsbGlwc2UpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwog
ICAgIGFwcGVuZEdlb21ldHJ5KGVsbGlwc2UuZ2V0KCkpOworICAgIEFTU0VSVChyZWZDb3VudChl
bGxpcHNlLmdldCgpKSA9PSAyKTsKIH0KIAogdm9pZCBQYXRoOjphZGRQYXRoKGNvbnN0IFBhdGgm
IHBhdGgsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQpAQCAtNjQxLDcgKzYzMCw3
IEBAIHZvaWQgUGF0aDo6Y2xlYXIoKQogCiAgICAgbV9wYXRoID0gbnVsbHB0cjsKICAgICBtX2Fj
dGl2ZVBhdGggPSBudWxscHRyOwotICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsK
KyAgICBjbGVhckdlb21ldHJpZXMoKTsKIH0KIAogYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QK
QEAgLTY1Miw2ICs2NDEsOCBAQCBib29sIFBhdGg6OmlzRW1wdHkoKSBjb25zdAogICAgIGlmICgh
bV9wYXRoLT5HZXRTb3VyY2VHZW9tZXRyeUNvdW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CisgICAgQVNTRVJUKG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpID09IG1fZ2VvbWV0
cmllcy5zaXplKCkpOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vQ09NUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0NPTVB0ci5oCShyZXZpc2lvbiAyNDk1NjApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vQ09NUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0NiwxMSBA
QCBlbnVtIENyZWF0ZVRhZyB7IENyZWF0ZSB9OwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3Mg
Q09NUHRyIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQqIFB0clR5cGU7Ci0gICAgQ09NUHRyKCkg
OiBtX3B0cigwKSB7IH0KKyAgICBDT01QdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQogICAgIENP
TVB0cihUKiBwdHIpIDogbV9wdHIocHRyKSB7IGlmIChtX3B0cikgbV9wdHItPkFkZFJlZigpOyB9
CiAgICAgQ09NUHRyKEFkb3B0Q09NVGFnLCBUKiBwdHIpIDogbV9wdHIocHRyKSB7IH0KICAgICBD
T01QdHIoY29uc3QgQ09NUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgaWYgKFQqIHB0ciA9IG1f
cHRyKSBwdHItPkFkZFJlZigpOyB9CisgICAgQ09NUHRyKENPTVB0ciYmIG8pIDogbV9wdHIoby5s
ZWFrUmVmKCkpIHsgfQogCiAgICAgQ09NUHRyKFF1ZXJ5VGFnLCBJVW5rbm93biogcHRyKSA6IG1f
cHRyKGNvcHlRdWVyeUludGVyZmFjZVJlZihwdHIpKSB7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBDT01QdHIoUXVlcnlUYWcsIGNvbnN0IENPTVB0cjxVPiYgcHRyKSA6IG1fcHRyKGNvcHlR
dWVyeUludGVyZmFjZVJlZihwdHIuZ2V0KCkpKSB7IH0KQEAgLTc5LDYgKzgwLDcgQEAgcHVibGlj
OgogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3B0
ciA/ICZDT01QdHI6OmdldCA6IDA7IH0KIAogICAgIENPTVB0ciYgb3BlcmF0b3I9KGNvbnN0IENP
TVB0ciYpOworICAgIENPTVB0ciYgb3BlcmF0b3I9KENPTVB0ciYmKTsKICAgICBDT01QdHImIG9w
ZXJhdG9yPShUKik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ09NUHRyJiBvcGVyYXRvcj0o
Y29uc3QgQ09NUHRyPFU+Jik7CiAKQEAgLTE2NSw2ICsxNjcsMTUgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIENPTVB0cjxUPiYgQwogICAgIHJldHVybiAqdGhpczsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIENPTVB0cjxUPiYgQ09NUHRyPFQ+OjpvcGVyYXRvcj0oQ09N
UHRyPFQ+JiYgbykKK3sKKyAgICBUKiBwdHIgPSBtX3B0cjsKKyAgICBtX3B0ciA9IG8ubGVha1Jl
ZigpOworICAgIGlmIChwdHIpCisgICAgICAgIHB0ci0+UmVsZWFzZSgpOworICAgIHJldHVybiAq
dGhpczsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5s
aW5lIENPTVB0cjxUPiYgQ09NUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgQ09NUHRyPFU+JiBvKQog
ewogICAgIFQqIG9wdHIgPSBvLmdldCgpOwpAQCAtMjE4LDYgKzIyOSwxOSBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUKICAgICByZXR1cm4gYSAhPSBiLmdldCgpOwog
fQogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAoraW5saW5lIHVuc2lnbmVkIHJlZkNvdW50KElVbmtu
b3duKiBwdHIpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5z
aWduZWQgdGVtcCA9IHB0ci0+QWRkUmVmKCk7CisgICAgdW5zaWduZWQgdmFsdWUgPSBwdHItPlJl
bGVhc2UoKTsKKyAgICBBU1NFUlQodGVtcCA9IHZhbHVlICsgMSk7CisgICAgcmV0dXJuIHZhbHVl
OworfQorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQPiBz
dHJ1Y3QgSXNTbWFydFB0cjxDT01QdHI8UD4+IHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378250</attachid>
            <date>2019-09-06 16:19:11 -0700</date>
            <delta_ts>2019-09-06 19:39:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201534-20190906161906.patch</filename>
            <type>text/plain</type>
            <size>22427</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE5LTA5LTA1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFBhdGhEaXJlY3QyRCBDbGVh
bnVwcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAx
NTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4g
QWRkIGEgQ09NUHRyPD4gbW92ZSBvcGVyYXRvci4KKyAgICAgICAgMi4gUmVkdWNlIGNvcHlpbmcg
SUQyRDFHZW9tZXRyeSBvYmplY3RzLgorICAgICAgICAzLiBQcm90ZWN0IGFnYWluc3QgdXNpbmcg
dGhlIElEMkQxUGF0aEdlb21ldHJ5IGFmdGVyIHRoZQorICAgICAgICAgICBJRDJEMUdlb21ldHJ5
U2luaydzIENsb3NlIG9wZXJhdGlvbiBpcyB1c2VkLgorICAgICAgICA0LiBBZGQgYSBkZWJ1Zy1v
bmx5ICdyZWZDb3VudCcgZnVuY3Rpb24gdG8gQ09NUHRyIHRvIGhlbHAKKyAgICAgICAgICAgdHJh
Y2sgZG93biBtZW1vcnkgZXJyb3JzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aC5oOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWN0aXZlUGF0aCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3QyRDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlyZWN0MkQ6OmRyYXdQYXRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0aERpcmVjdDJELmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ09NUHRyLmg6CisgICAg
ICAgIChDT01QdHI6OkNPTVB0cik6CisgICAgICAgICg9KToKKyAgICAgICAgKHJlZkNvdW50KToK
KwogMjAxOS0wOS0wNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4K
IAogICAgICAgICBbV2luXSBBZGQgc3VwcG9ydCBmb3IgTW91c2VFdmVudC5idXR0b25zCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiAyNDk1NjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5NCwxNCArMTk0LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAj
aWYgVVNFKERJUkVDVDJEKQotICAgICAgICBJRDJEMUdlb21ldHJ5U2luayogYWN0aXZlUGF0aCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlUGF0aC5nZXQoKTsgfQogICAgICAgICB2b2lkIGFwcGVu
ZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkqKTsKICAgICAgICAgdm9pZCBjcmVhdGVHZW9tZXRyeVdp
dGhGaWxsTW9kZShXaW5kUnVsZSwgQ09NUHRyPElEMkQxR2VvbWV0cnlHcm91cD4mKSBjb25zdDsK
LSAgICAgICAgdm9pZCBkcmF3RGlkQ29tcGxldGUoKTsKIAotICAgICAgICBIUkVTVUxUIGluaXRp
YWxpemVQYXRoU3RhdGUoKTsKICAgICAgICAgdm9pZCBvcGVuRmlndXJlQXRDdXJyZW50UG9pbnRJ
Zk5lY2Vzc2FyeSgpOwotICAgICAgICB2b2lkIGNsb3NlQW55T3Blbkdlb21ldHJpZXMoKTsKKyAg
ICAgICAgdm9pZCBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKHVuc2lnbmVkIGZpZ3VyZUVuZFN0eWxl
KSBjb25zdDsKKyAgICAgICAgdm9pZCBjbGVhckdlb21ldHJpZXMoKTsKICNlbmRpZgogCiAjaWZu
ZGVmIE5ERUJVRwpAQCAtMjEwLDEwICsyMDgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgcHJpdmF0ZToKICNpZiBVU0UoRElSRUNUMkQpCisgICAgICAgIFZlY3RvcjxJRDJEMUdlb21l
dHJ5Kj4gbV9nZW9tZXRyaWVzOwogICAgICAgICBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiBt
X3BhdGg7Ci0gICAgICAgIENPTVB0cjxJRDJEMVBhdGhHZW9tZXRyeT4gbV9hY3RpdmVQYXRoR2Vv
bWV0cnk7Ci0gICAgICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5U2luaz4gbV9hY3RpdmVQYXRoOwot
ICAgICAgICBzaXplX3QgbV9vcGVuRmlndXJlQ291bnQgeyAwIH07CisgICAgICAgIG11dGFibGUg
Q09NUHRyPElEMkQxR2VvbWV0cnlTaW5rPiBtX2FjdGl2ZVBhdGg7CisgICAgICAgIG11dGFibGUg
Ym9vbCBtX2ZpZ3VyZUlzT3BlbmVkIHsgZmFsc2UgfTsKICNlbHNlCiAgICAgICAgIFBsYXRmb3Jt
UGF0aFB0ciBtX3BhdGggeyBudWxscHRyIH07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyNDk1NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDEx
ICs0OTUsNyBAQCB2b2lkIGZpbGxSZWN0V2l0aEdyYWRpZW50KFBsYXRmb3JtQ29udGV4CiAKIHZv
aWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgUGF0aCYgcGF0aCwgY29uc3QgRmlsbFNvdXJjZSYgZmlsbFNvdXJjZSwgY29uc3QgU2hhZG93
U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChwYXRoLmFjdGl2ZVBhdGgoKSkgewotICAg
ICAgICAvLyBNYWtlIHN1cmUgaXQncyBjbG9zZWQuIFRoaXMgbWlnaHQgZmFpbCBpZiB0aGUgcGF0
aCB3YXMgYWxyZWFkeSBjbG9zZWQsIHNvCi0gICAgICAgIC8vIGlnbm9yZSB0aGUgcmV0dXJuIHZh
bHVlLgotICAgICAgICBwYXRoLmFjdGl2ZVBhdGgoKS0+Q2xvc2UoKTsKLSAgICB9CisgICAgcGF0
aC5jbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKIAogICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKIApAQCAtNTgyLDgg
KzU3OCw3IEBAIHZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAKIHsKICAg
ICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAKLSAgICBp
ZiAocGF0aC5hY3RpdmVQYXRoKCkpCi0gICAgICAgIHBhdGguYWN0aXZlUGF0aCgpLT5DbG9zZSgp
OworICAgIHBhdGguY2xvc2VBbnlPcGVuR2VvbWV0cmllcyhEMkQxX0ZJR1VSRV9FTkRfT1BFTik7
CiAKICAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJ
KHJldmlzaW9uIDI0OTU2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QYXRoRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsOSArNjIsOSBAQCBQYXRoIFBh
dGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhjb25zdCBWCiAKICAgICBwYXRoLm1vdmVUbyhwb2lu
dHMuZmlyc3QoKSk7CiAKLSAgICBBU1NFUlQocGF0aC5hY3RpdmVQYXRoKCkpOworICAgIEFTU0VS
VChwYXRoLm1fYWN0aXZlUGF0aCk7CiAKLSAgICBwYXRoLmFjdGl2ZVBhdGgoKS0+QWRkTGluZXMo
ZDJkUG9pbnRzLmRhdGEoKSwgZDJkUG9pbnRzLnNpemUoKSk7CisgICAgcGF0aC5tX2FjdGl2ZVBh
dGgtPkFkZExpbmVzKGQyZFBvaW50cy5kYXRhKCksIGQyZFBvaW50cy5zaXplKCkpOwogICAgIHBh
dGguY2xvc2VTdWJwYXRoKCk7CiAKICAgICByZXR1cm4gcGF0aDsKQEAgLTcyLDcgKzcyLDEwIEBA
IFBhdGggUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKGNvbnN0IFYKIAogUGF0aDo6UGF0aCgp
ID0gZGVmYXVsdDsKIAotUGF0aDo6flBhdGgoKSA9IGRlZmF1bHQ7CitQYXRoOjp+UGF0aCgpCit7
CisgICAgY2xlYXJHZW9tZXRyaWVzKCk7Cit9CiAKIFBsYXRmb3JtUGF0aFB0ciBQYXRoOjplbnN1
cmVQbGF0Zm9ybVBhdGgoKQogewpAQCAtODEsMzQgKzg0LDQxIEBAIFBsYXRmb3JtUGF0aFB0ciBQ
YXRoOjplbnN1cmVQbGF0Zm9ybVBhdGgKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwog
ICAgICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSAxKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gbV9wYXRoLmdldCgpOwogfQogCit2b2lkIFBhdGg6OmNsZWFyR2VvbWV0cmllcygpCit7
CisgICAgLy8gTWFudWFsbHkgY2xlYW4gdGhlc2UgdXAgc28gdGhhdCB3ZSBjYW4gdXNlIHRoaXMg
dmVjdG9yIHdpdGggRGlyZWN0MkQgQVBJcy4KKyAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9n
ZW9tZXRyaWVzKQorICAgICAgICBnZW9tZXRyeS0+UmVsZWFzZSgpOworICAgIG1fZ2VvbWV0cmll
cy5jbGVhcigpOworfQorCiB2b2lkIFBhdGg6OmFwcGVuZEdlb21ldHJ5KElEMkQxR2VvbWV0cnkq
IGdlb21ldHJ5KQogeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBiZWZvcmUg
PSByZWZDb3VudChnZW9tZXRyeSk7CisjZW5kaWYKKwogICAgIHVuc2lnbmVkIGdlb21ldHJ5Q291
bnQgPSBtX3BhdGggPyBtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKSA6IDA7Ci0gICAg
VmVjdG9yPElEMkQxR2VvbWV0cnkqPiBnZW9tZXRyaWVzKGdlb21ldHJ5Q291bnQsIG51bGxwdHIp
OwogCi0gICAgLy8gTm90ZTogJ0dldFNvdXJjZUdlb21ldHJpZXMnIHJldHVybnMgZ2VvbWV0cmll
cyB0aGF0IGhhdmUgYSArMSByZWYgY291bnQuCi0gICAgLy8gc28gdGhleSBtdXN0IGJlIHJlbGVh
c2VkIGJlZm9yZSB3ZSByZXR1cm4uCi0gICAgaWYgKGdlb21ldHJ5Q291bnQpCi0gICAgICAgIG1f
cGF0aC0+R2V0U291cmNlR2VvbWV0cmllcyhnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cnlDb3Vu
dCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9nZW9tZXRyaWVzLnNpemUoKSA9PSBnZW9tZXRyeUNv
dW50KTsKIAogICAgIGdlb21ldHJ5LT5BZGRSZWYoKTsKLSAgICBnZW9tZXRyaWVzLmFwcGVuZChn
ZW9tZXRyeSk7CisgICAgbV9nZW9tZXRyaWVzLmFwcGVuZChnZW9tZXRyeSk7CiAKICAgICBhdXRv
IGZpbGxNb2RlID0gbV9wYXRoID8gbV9wYXRoLT5HZXRGaWxsTW9kZSgpIDogRDJEMV9GSUxMX01P
REVfV0lORElORzsKIAotICAgIENPTVB0cjxJRDJEMUdlb21ldHJ5R3JvdXA+IHByb3RlY3RlZFBh
dGggPSBtX3BhdGg7CiAgICAgbV9wYXRoID0gbnVsbHB0cjsKIAotICAgIEhSRVNVTFQgaHIgPSBH
cmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxs
TW9kZSwgZ2VvbWV0cmllcy5kYXRhKCksIGdlb21ldHJpZXMuc2l6ZSgpLCAmbV9wYXRoKTsKKyAg
ICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdl
b21ldHJ5R3JvdXAoZmlsbE1vZGUsIG1fZ2VvbWV0cmllcy5kYXRhKCksIG1fZ2VvbWV0cmllcy5z
aXplKCksICZtX3BhdGgpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCi0g
ICAgZm9yIChhdXRvIGVudHJ5IDogZ2VvbWV0cmllcykKLSAgICAgICAgZW50cnktPlJlbGVhc2Uo
KTsKKyAgICBBU1NFUlQocmVmQ291bnQoZ2VvbWV0cnkpID09IGJlZm9yZSArIDEpOwogfQogCiB2
b2lkIFBhdGg6OmNyZWF0ZUdlb21ldHJ5V2l0aEZpbGxNb2RlKFdpbmRSdWxlIHdlYmtpdEZpbGxN
b2RlLCBDT01QdHI8SUQyRDFHZW9tZXRyeUdyb3VwPiYgcGF0aCkgY29uc3QKQEAgLTEyNCw1OSAr
MTM0LDYwIEBAIHZvaWQgUGF0aDo6Y3JlYXRlR2VvbWV0cnlXaXRoRmlsbE1vZGUoV2kKIAogICAg
IHVuc2lnbmVkIGdlb21ldHJ5Q291bnQgPSBtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJ5Q291bnQo
KTsKIAotICAgIFZlY3RvcjxJRDJEMUdlb21ldHJ5Kj4gZ2VvbWV0cmllcyhnZW9tZXRyeUNvdW50
LCBudWxscHRyKTsKLSAgICBBU1NFUlQoZ2VvbWV0cnlDb3VudCk7CisgICAgQVNTRVJUKG1fZ2Vv
bWV0cmllcy5zaXplKCkgPT0gZ2VvbWV0cnlDb3VudCk7CiAKLSAgICAvLyBOb3RlOiAnR2V0U291
cmNlR2VvbWV0cmllcycgcmV0dXJucyBnZW9tZXRyaWVzIHRoYXQgaGF2ZSBhICsxIHJlZiBjb3Vu
dC4KLSAgICAvLyBzbyB0aGV5IG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHdlIHJldHVybi4KLSAg
ICBtX3BhdGgtPkdldFNvdXJjZUdlb21ldHJpZXMoZ2VvbWV0cmllcy5kYXRhKCksIGdlb21ldHJ5
Q291bnQpOwotCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKGZpbGxNb2RlLCBnZW9tZXRyaWVzLmRhdGEoKSwgZ2Vv
bWV0cmllcy5zaXplKCksICZwYXRoKTsKKyAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0
OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIGNvbnN0X2Nh
c3Q8SUQyRDFHZW9tZXRyeSoqPihtX2dlb21ldHJpZXMuZGF0YSgpKSwgbV9nZW9tZXRyaWVzLnNp
emUoKSwgJnBhdGgpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
Zm9yIChhdXRvIGVudHJ5IDogZ2VvbWV0cmllcykKLSAgICAgICAgZW50cnktPlJlbGVhc2UoKTsK
KyAgICBBU1NFUlQocmVmQ291bnQocGF0aC5nZXQoKSkgPT0gMSk7CiB9CiAKIFBhdGg6OlBhdGgo
Y29uc3QgUGF0aCYgb3RoZXIpCiB7Ci0gICAgaWYgKG90aGVyLnBsYXRmb3JtUGF0aCgpICYmIG90
aGVyLmFjdGl2ZVBhdGgoKSkgewotICAgICAgICBhdXRvIG90aGVyUGF0aCA9IG90aGVyLnBsYXRm
b3JtUGF0aCgpOwotCi0gICAgICAgIHVuc2lnbmVkIGdlb21ldHJ5Q291bnQgPSBvdGhlclBhdGgt
PkdldFNvdXJjZUdlb21ldHJ5Q291bnQoKTsKLQotICAgICAgICBWZWN0b3I8SUQyRDFHZW9tZXRy
eSo+IGdlb21ldHJpZXMoZ2VvbWV0cnlDb3VudCwgbnVsbHB0cik7Ci0gICAgICAgIEFTU0VSVChn
ZW9tZXRyeUNvdW50KTsKLQotICAgICAgICAvLyBOb3RlOiAnR2V0U291cmNlR2VvbWV0cmllcycg
cmV0dXJucyBnZW9tZXRyaWVzIHRoYXQgaGF2ZSBhICsxIHJlZiBjb3VudC4KLSAgICAgICAgLy8g
c28gdGhleSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSB3ZSByZXR1cm4uCi0gICAgICAgIG90aGVy
UGF0aC0+R2V0U291cmNlR2VvbWV0cmllcyhnZW9tZXRyaWVzLmRhdGEoKSwgZ2VvbWV0cnlDb3Vu
dCk7Ci0KLSAgICAgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKG90aGVyLm1fcGF0aC0+R2V0RmlsbE1vZGUoKSwgZ2Vv
bWV0cmllcy5kYXRhKCksIGdlb21ldHJ5Q291bnQsICZtX3BhdGgpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWdu
ZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgpKTsKKyAgICB1bnNpZ25l
ZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOwor
I2VuZGlmCisgICAgbV9wYXRoID0gb3RoZXIubV9wYXRoOworICAgIG1fYWN0aXZlUGF0aCA9IG90
aGVyLm1fYWN0aXZlUGF0aDsKKyAgICBtX2dlb21ldHJpZXMgPSBvdGhlci5tX2dlb21ldHJpZXM7
CisgICAgZm9yIChhdXRvKiBnZW9tZXRyeSA6IG1fZ2VvbWV0cmllcykKKyAgICAgICAgZ2VvbWV0
cnktPkFkZFJlZigpOwogCi0gICAgICAgIGZvciAoYXV0byBlbnRyeSA6IGdlb21ldHJpZXMpCi0g
ICAgICAgICAgICBlbnRyeS0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBBU1NFUlQoIW1fcGF0aCB8
fCByZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOworICAgIEFTU0VSVCgh
bV9hY3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZlUGF0
aENvdW50ICsgMSk7CiB9CiAgICAgCiBQYXRoOjpQYXRoKFBhdGgmJiBvdGhlcikKIHsKLSAgICBt
X3BhdGggPSBvdGhlci5tX3BhdGg7Ci0gICAgbV9hY3RpdmVQYXRoID0gb3RoZXIubV9hY3RpdmVQ
YXRoOwotICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gb3RoZXIubV9hY3RpdmVQYXRoR2VvbWV0
cnk7Ci0gICAgb3RoZXIubV9wYXRoID0gbnVsbHB0cjsKLSAgICBvdGhlci5tX2FjdGl2ZVBhdGgg
PSBudWxscHRyOwotICAgIG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVsbHB0cjsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3Ro
ZXIubV9wYXRoLmdldCgpKTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3Vu
dChvdGhlci5tX2FjdGl2ZVBhdGguZ2V0KCkpOworI2VuZGlmCisgICAgbV9wYXRoID0gV1RGTW92
ZShvdGhlci5tX3BhdGgpOworICAgIG1fYWN0aXZlUGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3Rp
dmVQYXRoKTsKKyAgICBtX2dlb21ldHJpZXMgPSBXVEZNb3ZlKG90aGVyLm1fZ2VvbWV0cmllcyk7
CisKKyAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBwYXRoQ291bnQpOworICAg
IEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IGFjdGl2ZVBhdGhDb3VudCk7
CiB9CiAKIFBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKIHsKICAgICBp
ZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdl
dCgpKTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2Fj
dGl2ZVBhdGguZ2V0KCkpOworI2VuZGlmCiAgICAgbV9wYXRoID0gb3RoZXIubV9wYXRoOwogICAg
IG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0aDsKLSAgICBtX2FjdGl2ZVBhdGhHZW9t
ZXRyeSA9IG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5OworICAgIG1fZ2VvbWV0cmllcyA9IG90
aGVyLm1fZ2VvbWV0cmllczsKKyAgICBmb3IgKGF1dG8qIGdlb21ldHJ5IDogbV9nZW9tZXRyaWVz
KQorICAgICAgICBnZW9tZXRyeS0+QWRkUmVmKCk7CisKKyAgICBBU1NFUlQoIW1fcGF0aCB8fCBy
ZWZDb3VudChtX3BhdGguZ2V0KCkpID09IHBhdGhDb3VudCArIDEpOworICAgIEFTU0VSVCghbV9h
Y3RpdmVQYXRoIHx8IHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gYWN0aXZlUGF0aENv
dW50ICsgMSk7CisKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE4NCw0OCArMTk1LDE5IEBA
IFBhdGgmIFBhdGg6Om9wZXJhdG9yPShQYXRoJiYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0g
Jm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgbV9wYXRoID0gb3RoZXIubV9wYXRo
OwotICAgIG1fYWN0aXZlUGF0aCA9IG90aGVyLm1fYWN0aXZlUGF0aDsKLSAgICBtX2FjdGl2ZVBh
dGhHZW9tZXRyeSA9IG90aGVyLm1fYWN0aXZlUGF0aEdlb21ldHJ5OwotICAgIG90aGVyLm1fcGF0
aCA9IG51bGxwdHI7Ci0gICAgb3RoZXIubV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICBvdGhl
ci5tX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1IUkVTVUxUIFBhdGg6OmluaXRpYWxpemVQYXRoU3RhdGUoKQotewotICAgIG1fcGF0aCA9IG51
bGxwdHI7Ci0gICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICBtX2FjdGl2ZVBhdGhHZW9t
ZXRyeSA9IG51bGxwdHI7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+
Q3JlYXRlUGF0aEdlb21ldHJ5KCZtX2FjdGl2ZVBhdGhHZW9tZXRyeSk7Ci0KLSAgICBWZWN0b3I8
SUQyRDFHZW9tZXRyeSo+IGdlb21ldHJpZXM7Ci0gICAgZ2VvbWV0cmllcy5hcHBlbmQobV9hY3Rp
dmVQYXRoR2VvbWV0cnkuZ2V0KCkpOwogCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4
dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVHZW9tZXRyeUdyb3VwKEQyRDFfRklMTF9NT0RFX1dJ
TkRJTkcsIGdlb21ldHJpZXMuZGF0YSgpLCBnZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7Ci0g
ICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgdW5zaWduZWQgcGF0aENvdW50ID0gcmVmQ291bnQob3RoZXIubV9wYXRoLmdldCgp
KTsKKyAgICB1bnNpZ25lZCBhY3RpdmVQYXRoQ291bnQgPSByZWZDb3VudChvdGhlci5tX2FjdGl2
ZVBhdGguZ2V0KCkpOworI2VuZGlmCisgICAgbV9wYXRoID0gV1RGTW92ZShvdGhlci5tX3BhdGgp
OworICAgIG1fYWN0aXZlUGF0aCA9IFdURk1vdmUob3RoZXIubV9hY3RpdmVQYXRoKTsKKyAgICBt
X2dlb21ldHJpZXMgPSBXVEZNb3ZlKG90aGVyLm1fZ2VvbWV0cmllcyk7CiAKLSAgICByZXR1cm4g
bV9hY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCk7Ci19Ci0KLXZvaWQgUGF0
aDo6ZHJhd0RpZENvbXBsZXRlKCkKLXsKLSAgICBGbG9hdFBvaW50IGN1cnJlbnRQb2ludCA9IHRo
aXMtPmN1cnJlbnRQb2ludCgpOwotCi0gICAgLy8gVG8gbWFpbnRhaW4gcHJvcGVyIHNlbWFudGlj
cyB3aXRoIENHLCB3ZSBuZWVkIHRvIGNsZWFyIG91ciBEaXJlY3QyRAotICAgIC8vIHBhdGggb2Jq
ZWN0cyB3aGVuIGEgZHJhdyBoYXMgZmluaXNoZWQuCi0gICAgSFJFU1VMVCBociA9IGNvbnN0X2Nh
c3Q8UGF0aCo+KHRoaXMpLT5pbml0aWFsaXplUGF0aFN0YXRlKCk7Ci0KLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdl
dCgpKSA9PSBwYXRoQ291bnQpOworICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0
KCkpID09IGFjdGl2ZVBhdGhDb3VudCk7CiAKLSAgICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2Rl
KEQyRDFfRklMTF9NT0RFX1dJTkRJTkcpOwotCi0gICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3Vy
ZShjdXJyZW50UG9pbnQsIEQyRDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7Ci0gICAgKyttX29wZW5G
aWd1cmVDb3VudDsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKIGJvb2wgUGF0aDo6Y29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CkBAIC0yMzcsNyAr
MjE5LDcgQEAgYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwbwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBCT09MIGNvbnRhaW5zOwotICAgIGlmICghU1VDQ0VFREVE
KG1fcGF0aC0+RmlsbENvbnRhaW5zUG9pbnQoRDJEMTo6UG9pbnQyRihwb2ludC54KCksIHBvaW50
LnkoKSksIG51bGxwdHIsICZjb250YWlucykpKQorICAgIGlmICghU1VDQ0VFREVEKG1fcGF0aC0+
RmlsbENvbnRhaW5zUG9pbnQocG9pbnQsIG51bGxwdHIsICZjb250YWlucykpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gY29udGFpbnM7CkBAIC0yNTQsMjggKzIzNiwzMyBA
QCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwCiAgICAgR3JhcGhpY3ND
b250ZXh0IHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKICAgICBhcHBsaWVyLT5z
dHJva2VTdHlsZSgmc2NyYXRjaENvbnRleHQpOwogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KG1fcGF0aC5nZXQoKSk7CisjZW5kaWYKKwogICAg
IEJPT0wgY29udGFpbnNQb2ludCA9IGZhbHNlOwogICAgIEhSRVNVTFQgaHIgPSBtX3BhdGgtPlN0
cm9rZUNvbnRhaW5zUG9pbnQocG9pbnQsIHNjcmF0Y2hDb250ZXh0LnN0cm9rZVRoaWNrbmVzcygp
LCBzY3JhdGNoQ29udGV4dC5wbGF0Zm9ybVN0cm9rZVN0eWxlKCksIG51bGxwdHIsIDEuMGYsICZj
b250YWluc1BvaW50KTsKICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIEFTU0VSVChyZWZDb3VudChtX3BhdGguZ2V0KCkpID09IGJlZm9yZSk7CiAg
ICAgcmV0dXJuIGNvbnRhaW5zUG9pbnQ7CiB9CiAKLXZvaWQgUGF0aDo6Y2xvc2VBbnlPcGVuR2Vv
bWV0cmllcygpCit2b2lkIFBhdGg6OmNsb3NlQW55T3Blbkdlb21ldHJpZXModW5zaWduZWQgZmln
dXJlRW5kU3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fYWN0aXZlUGF0aCk7CisgICAgaWYg
KG1fZmlndXJlSXNPcGVuZWQpIHsKKyAgICAgICAgQVNTRVJUKG1fYWN0aXZlUGF0aCk7CiAKLSAg
ICBpZiAoIW1fb3BlbkZpZ3VyZUNvdW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8g
ZW5kU3R5bGUgPSBzdGF0aWNfY2FzdDxEMkQxX0ZJR1VSRV9FTkQ+KGZpZ3VyZUVuZFN0eWxlKTsK
KyAgICAgICAgbV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoZW5kU3R5bGUpOworICAgICAgICBtX2Zp
Z3VyZUlzT3BlbmVkID0gZmFsc2U7CiAKLSAgICB3aGlsZSAobV9vcGVuRmlndXJlQ291bnQpIHsK
LSAgICAgICAgbV9hY3RpdmVQYXRoLT5FbmRGaWd1cmUoRDJEMV9GSUdVUkVfRU5EX09QRU4pOwot
ICAgICAgICAtLW1fb3BlbkZpZ3VyZUNvdW50OworICAgICAgICBIUkVTVUxUIGhyID0gbV9hY3Rp
dmVQYXRoLT5DbG9zZSgpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgfQog
Ci0gICAgSFJFU1VMVCBociA9IG1fYWN0aXZlUGF0aC0+Q2xvc2UoKTsKLSAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7CisgICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKIH0KIAogdm9pZCBQYXRo
Ojp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQpAQCAtMjg4LDQ5ICsyNzUsMzIgQEAg
dm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgQWZmaW5lVHJhbnNmbwogICAgIGlmICh0cmFuc2Zv
cm0uaXNJZGVudGl0eSgpIHx8IGlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgT3B0
aW9uYWw8RmxvYXRQb2ludD4gY3VycmVudFBvaW50OwotICAgIGlmIChoYXNDdXJyZW50UG9pbnQo
KSkKLSAgICAgICAgY3VycmVudFBvaW50ID0gdGhpcy0+Y3VycmVudFBvaW50KCk7Ci0KLSAgICBi
b29sIHBhdGhJc0FjdGl2ZSA9IGZhbHNlOwotICAgIGlmIChtX2FjdGl2ZVBhdGgpIHsKLSAgICAg
ICAgY2xvc2VBbnlPcGVuR2VvbWV0cmllcygpOwotICAgICAgICBtX2FjdGl2ZVBhdGggPSBudWxs
cHRyOwotICAgICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeSA9IG51bGxwdHI7Ci0gICAgICAgIHBh
dGhJc0FjdGl2ZSA9IHRydWU7Ci0gICAgfQorICAgIGlmIChtX2FjdGl2ZVBhdGgpCisgICAgICAg
IGNsb3NlQW55T3Blbkdlb21ldHJpZXMoRDJEMV9GSUdVUkVfRU5EX09QRU4pOworCisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIGJlZm9yZSA9IHJlZkNvdW50KG1fcGF0aC5nZXQo
KSk7CisjZW5kaWYKIAogICAgIENPTVB0cjxJRDJEMVRyYW5zZm9ybWVkR2VvbWV0cnk+IHRyYW5z
Zm9ybWVkUGF0aDsKICAgICBpZiAoIVNVQ0NFRURFRChHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZh
Y3RvcnkoKS0+Q3JlYXRlVHJhbnNmb3JtZWRHZW9tZXRyeShtX3BhdGguZ2V0KCksIHRyYW5zZm9y
bSwgJnRyYW5zZm9ybWVkUGF0aCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8SUQy
RDFHZW9tZXRyeSo+IGdlb21ldHJpZXM7Ci0gICAgZ2VvbWV0cmllcy5hcHBlbmQodHJhbnNmb3Jt
ZWRQYXRoLmdldCgpKTsKLQotICAgIGlmIChwYXRoSXNBY3RpdmUpIHsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZVBhdGhHZW9tZXRyeSgmbV9hY3RpdmVQ
YXRoR2VvbWV0cnkpOwotICAgICAgICBtX2FjdGl2ZVBhdGhHZW9tZXRyeS0+T3BlbigmbV9hY3Rp
dmVQYXRoKTsKLSAgICAgICAgZ2VvbWV0cmllcy5hcHBlbmQobV9hY3RpdmVQYXRoR2VvbWV0cnku
Z2V0KCkpOwotICAgIH0KKyAgICBBU1NFUlQocmVmQ291bnQobV9wYXRoLmdldCgpKSA9PSBiZWZv
cmUpOworICAgIEFTU0VSVChyZWZDb3VudCh0cmFuc2Zvcm1lZFBhdGguZ2V0KCkpID09IDEpOwog
CiAgICAgYXV0byBmaWxsTW9kZSA9IG1fcGF0aC0+R2V0RmlsbE1vZGUoKTsKIAogICAgIG1fcGF0
aCA9IG51bGxwdHI7CiAKLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1G
YWN0b3J5KCktPkNyZWF0ZUdlb21ldHJ5R3JvdXAoZmlsbE1vZGUsIGdlb21ldHJpZXMuZGF0YSgp
LCBnZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICBpZiAoIWN1cnJlbnRQb2ludCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFtX2FjdGl2ZVBhdGgpCi0gICAgICAgIHJldHVybjsKKyAgICBjbGVhckdlb21ldHJp
ZXMoKTsKIAotICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoZmlsbE1vZGUpOworICAgIHRy
YW5zZm9ybWVkUGF0aC0+QWRkUmVmKCk7CisgICAgbV9nZW9tZXRyaWVzLmFwcGVuZCh0cmFuc2Zv
cm1lZFBhdGguZ2V0KCkpOwogCi0gICAgYXV0byB0cmFuc2Zvcm1lZFBvaW50ID0gdHJhbnNmb3Jt
Lm1hcFBvaW50KGN1cnJlbnRQb2ludC52YWx1ZSgpKTsKLSAgICBtX2FjdGl2ZVBhdGgtPkJlZ2lu
RmlndXJlKHRyYW5zZm9ybWVkUG9pbnQsIEQyRDFfRklHVVJFX0JFR0lOX0ZJTExFRCk7Ci0gICAg
bV9vcGVuRmlndXJlQ291bnQgPSAxOworICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6
OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlR2VvbWV0cnlHcm91cChmaWxsTW9kZSwgbV9nZW9tZXRy
aWVzLmRhdGEoKSwgbV9nZW9tZXRyaWVzLnNpemUoKSwgJm1fcGF0aCk7CisgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgQVNTRVJUKHJlZkNvdW50KG1fcGF0aC5nZXQoKSkg
PT0gMSk7CiB9CiAKIEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdApAQCAtMzc0
LDU0ICszNDQsNTcgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJvawog
CiB2b2lkIFBhdGg6Om9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCkKIHsKLSAg
ICBpZiAobV9vcGVuRmlndXJlQ291bnQpCisgICAgaWYgKG1fZmlndXJlSXNPcGVuZWQpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGlmICghbV9hY3RpdmVQYXRoKSB7CisgICAgICAgIENPTVB0cjxJ
RDJEMVBhdGhHZW9tZXRyeT4gYWN0aXZlUGF0aEdlb21ldHJ5OworICAgICAgICBHcmFwaGljc0Nv
bnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUGF0aEdlb21ldHJ5KCZhY3RpdmVQYXRoR2Vv
bWV0cnkpOworICAgICAgICBIUkVTVUxUIGhyID0gYWN0aXZlUGF0aEdlb21ldHJ5LT5PcGVuKCZt
X2FjdGl2ZVBhdGgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAg
ICAgICAgYXBwZW5kR2VvbWV0cnkoYWN0aXZlUGF0aEdlb21ldHJ5LmxlYWtSZWYoKSk7CisgICAg
ICAgIEFTU0VSVChyZWZDb3VudChtX2FjdGl2ZVBhdGguZ2V0KCkpID09IDEpOworICAgIH0KKwog
ICAgIG1fYWN0aXZlUGF0aC0+U2V0RmlsbE1vZGUoRDJEMV9GSUxMX01PREVfV0lORElORyk7CiAg
ICAgbV9hY3RpdmVQYXRoLT5CZWdpbkZpZ3VyZShjdXJyZW50UG9pbnQoKSwgRDJEMV9GSUdVUkVf
QkVHSU5fRklMTEVEKTsKLSAgICArK21fb3BlbkZpZ3VyZUNvdW50OworICAgIG1fZmlndXJlSXNP
cGVuZWQgPSB0cnVlOwogfQogCiB2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKIHsKLSAgICBpZiAobV9hY3RpdmVQYXRoKSB7Ci0gICAgICAgIGNsb3NlQW55T3Blbkdl
b21ldHJpZXMoKTsKLSAgICAgICAgbV9hY3RpdmVQYXRoID0gbnVsbHB0cjsKLSAgICAgICAgbV9h
Y3RpdmVQYXRoR2VvbWV0cnkgPSBudWxscHRyOwotICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4
dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVQYXRoR2VvbWV0cnkoJm1fYWN0aXZlUGF0aEdlb21l
dHJ5KTsKKyAgICBpZiAobV9hY3RpdmVQYXRoKQorICAgICAgICBjbG9zZUFueU9wZW5HZW9tZXRy
aWVzKEQyRDFfRklHVVJFX0VORF9PUEVOKTsKIAotICAgIGFwcGVuZEdlb21ldHJ5KG1fYWN0aXZl
UGF0aEdlb21ldHJ5LmdldCgpKTsKKyAgICBDT01QdHI8SUQyRDFQYXRoR2VvbWV0cnk+IGFjdGl2
ZVBhdGhHZW9tZXRyeTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3Jl
YXRlUGF0aEdlb21ldHJ5KCZhY3RpdmVQYXRoR2VvbWV0cnkpOwogCi0gICAgaWYgKCFTVUNDRUVE
RUQobV9hY3RpdmVQYXRoR2VvbWV0cnktPk9wZW4oJm1fYWN0aXZlUGF0aCkpKQorICAgIGlmICgh
U1VDQ0VFREVEKGFjdGl2ZVBhdGhHZW9tZXRyeS0+T3BlbigmbV9hY3RpdmVQYXRoKSkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGFwcGVuZEdlb21ldHJ5KGFjdGl2ZVBhdGhHZW9tZXRyeS5sZWFr
UmVmKCkpOworCisgICAgQVNTRVJUKHJlZkNvdW50KG1fYWN0aXZlUGF0aC5nZXQoKSkgPT0gMSk7
CisKICAgICBtX2FjdGl2ZVBhdGgtPlNldEZpbGxNb2RlKEQyRDFfRklMTF9NT0RFX1dJTkRJTkcp
OwogICAgIG1fYWN0aXZlUGF0aC0+QmVnaW5GaWd1cmUocG9pbnQsIEQyRDFfRklHVVJFX0JFR0lO
X0ZJTExFRCk7Ci0gICAgbV9vcGVuRmlndXJlQ291bnQgPSAxOworICAgIG1fZmlndXJlSXNPcGVu
ZWQgPSB0cnVlOwogfQogCiB2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkKIHsKLSAgICBBU1NFUlQobV9hY3RpdmVQYXRoLmdldCgpKTsKLQogICAgIG9wZW5GaWd1
cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7CiAgICAgbV9hY3RpdmVQYXRoLT5BZGRMaW5l
KHBvaW50KTsKIH0KIAogdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50
JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICBBU1NFUlQobV9hY3RpdmVQYXRoLmdl
dCgpKTsKLQogICAgIG9wZW5GaWd1cmVBdEN1cnJlbnRQb2ludElmTmVjZXNzYXJ5KCk7CiAgICAg
bV9hY3RpdmVQYXRoLT5BZGRRdWFkcmF0aWNCZXppZXIoRDJEMTo6UXVhZHJhdGljQmV6aWVyU2Vn
bWVudChjcCwgcCkpOwogfQogCiB2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxv
YXRQb2ludCYgY3AxLCBjb25zdCBGbG9hdFBvaW50JiBjcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHAp
CiB7Ci0gICAgQVNTRVJUKG1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0KICAgICBvcGVuRmlndXJlQXRD
dXJyZW50UG9pbnRJZk5lY2Vzc2FyeSgpOwogICAgIG1fYWN0aXZlUGF0aC0+QWRkQmV6aWVyKEQy
RDE6OkJlemllclNlZ21lbnQoY3AxLCBjcDIsIHApKTsKIH0KQEAgLTQ5NSw2ICs0NjgsNyBAQCB2
b2lkIFBhdGg6OnBsYXRmb3JtQWRkUGF0aEZvclJvdW5kZWRSZWN0CiAgICAgICAgIEhSRVNVTFQg
aHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUm91bmRlZFJlY3Rh
bmdsZUdlb21ldHJ5KEQyRDE6OlJvdW5kZWRSZWN0KHJlY3RUb0RyYXcsIHJhZGl1c1dpZHRoLCBy
YWRpdXNIZWlnaHQpLCAmcm91bmRSZWN0KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VF
REVEKGhyKSk7CiAgICAgICAgIGFwcGVuZEdlb21ldHJ5KHJvdW5kUmVjdC5nZXQoKSk7CisgICAg
ICAgIEFTU0VSVChyZWZDb3VudChyb3VuZFJlY3QuZ2V0KCkpID09IDIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC01MDMsMjcgKzQ3NywxNyBAQCB2b2lkIFBhdGg6OnBsYXRmb3JtQWRk
UGF0aEZvclJvdW5kZWRSZWN0CiAKIHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKIHsKLSAgICBp
ZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9hY3RpdmVQYXRoKSB7
Ci0gICAgICAgIEFTU0VSVCghbV9vcGVuRmlndXJlQ291bnQpOwotICAgICAgICBBU1NFUlQoIW1f
YWN0aXZlUGF0aEdlb21ldHJ5KTsKKyAgICBpZiAoaXNOdWxsKCkpIHsKKyAgICAgICAgbV9hY3Rp
dmVQYXRoID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9v
cGVuRmlndXJlQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYWN0aXZlUGF0aC0+RW5k
RmlndXJlKEQyRDFfRklHVVJFX0VORF9DTE9TRUQpOwotICAgIC0tbV9vcGVuRmlndXJlQ291bnQ7
Ci0gICAgaWYgKG1fb3BlbkZpZ3VyZUNvdW50ID4gMCkgewotICAgICAgICBBU1NFUlQobV9hY3Rp
dmVQYXRoR2VvbWV0cnkpOworICAgIGlmICghbV9hY3RpdmVQYXRoKSB7CisgICAgICAgIEFTU0VS
VCghbV9maWd1cmVJc09wZW5lZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBIUkVT
VUxUIGhyID0gbV9hY3RpdmVQYXRoLT5DbG9zZSgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKKyAgICBjbG9zZUFueU9wZW5HZW9tZXRyaWVzKEQyRDFfRklHVVJFX0VORF9DTE9TRUQpOwog
fQogCiBzdGF0aWMgRmxvYXRQb2ludCBhcmNTdGFydChjb25zdCBGbG9hdFBvaW50JiBjZW50ZXIs
IGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSkKQEAgLTYwMCw2ICs1NjQsNyBAQCB2b2lk
IFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQogICAgIEhSRVNVTFQgaHIgPSBHcmFw
aGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnkociwg
JnJlY3RhbmdsZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAgICAgYXBw
ZW5kR2VvbWV0cnkocmVjdGFuZ2xlLmdldCgpKTsKKyAgICBBU1NFUlQocmVmQ291bnQocmVjdGFu
Z2xlLmdldCgpKSA9PSAyKTsKIH0KIAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0UG9pbnQg
cCwgZmxvYXQgcmFkaXVzWCwgZmxvYXQgcmFkaXVzWSwgZmxvYXQgcm90YXRpb24sIGZsb2F0IHN0
YXJ0QW5nbGUsIGZsb2F0IGVuZEFuZ2xlLCBib29sIGFudGljbG9ja3dpc2UpCkBAIC02MjAsNiAr
NTg1LDcgQEAgdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcgogICAgIEhS
RVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRWxsaXBz
ZUdlb21ldHJ5KEQyRDE6OkVsbGlwc2Uoci5jZW50ZXIoKSwgMC41ICogci53aWR0aCgpLCAwLjUg
KiByLmhlaWdodCgpKSwgJmVsbGlwc2UpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwogICAgIGFwcGVuZEdlb21ldHJ5KGVsbGlwc2UuZ2V0KCkpOworICAgIEFTU0VSVChyZWZD
b3VudChlbGxpcHNlLmdldCgpKSA9PSAyKTsKIH0KIAogdm9pZCBQYXRoOjphZGRQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQpAQCAtNjQxLDcg
KzYwNyw3IEBAIHZvaWQgUGF0aDo6Y2xlYXIoKQogCiAgICAgbV9wYXRoID0gbnVsbHB0cjsKICAg
ICBtX2FjdGl2ZVBhdGggPSBudWxscHRyOwotICAgIG1fYWN0aXZlUGF0aEdlb21ldHJ5ID0gbnVs
bHB0cjsKKyAgICBjbGVhckdlb21ldHJpZXMoKTsKIH0KIAogYm9vbCBQYXRoOjppc0VtcHR5KCkg
Y29uc3QKQEAgLTY1Miw2ICs2MTgsOCBAQCBib29sIFBhdGg6OmlzRW1wdHkoKSBjb25zdAogICAg
IGlmICghbV9wYXRoLT5HZXRTb3VyY2VHZW9tZXRyeUNvdW50KCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCisgICAgQVNTRVJUKG1fcGF0aC0+R2V0U291cmNlR2VvbWV0cnlDb3VudCgpID09IG1f
Z2VvbWV0cmllcy5zaXplKCkpOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ09NUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0NPTVB0ci5oCShyZXZpc2lvbiAyNDk1NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vQ09NUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEwICs0
NiwxMSBAQCBlbnVtIENyZWF0ZVRhZyB7IENyZWF0ZSB9OwogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y2xhc3MgQ09NUHRyIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFQqIFB0clR5cGU7Ci0gICAgQ09N
UHRyKCkgOiBtX3B0cigwKSB7IH0KKyAgICBDT01QdHIoKSA6IG1fcHRyKG51bGxwdHIpIHsgfQog
ICAgIENPTVB0cihUKiBwdHIpIDogbV9wdHIocHRyKSB7IGlmIChtX3B0cikgbV9wdHItPkFkZFJl
ZigpOyB9CiAgICAgQ09NUHRyKEFkb3B0Q09NVGFnLCBUKiBwdHIpIDogbV9wdHIocHRyKSB7IH0K
ICAgICBDT01QdHIoY29uc3QgQ09NUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgaWYgKFQqIHB0
ciA9IG1fcHRyKSBwdHItPkFkZFJlZigpOyB9CisgICAgQ09NUHRyKENPTVB0ciYmIG8pIDogbV9w
dHIoby5sZWFrUmVmKCkpIHsgfQogCiAgICAgQ09NUHRyKFF1ZXJ5VGFnLCBJVW5rbm93biogcHRy
KSA6IG1fcHRyKGNvcHlRdWVyeUludGVyZmFjZVJlZihwdHIpKSB7IH0KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPiBDT01QdHIoUXVlcnlUYWcsIGNvbnN0IENPTVB0cjxVPiYgcHRyKSA6IG1fcHRy
KGNvcHlRdWVyeUludGVyZmFjZVJlZihwdHIuZ2V0KCkpKSB7IH0KQEAgLTc5LDYgKzgwLDcgQEAg
cHVibGljOgogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3B0ciA/ICZDT01QdHI6OmdldCA6IDA7IH0KIAogICAgIENPTVB0ciYgb3BlcmF0b3I9KGNv
bnN0IENPTVB0ciYpOworICAgIENPTVB0ciYgb3BlcmF0b3I9KENPTVB0ciYmKTsKICAgICBDT01Q
dHImIG9wZXJhdG9yPShUKik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gQ09NUHRyJiBvcGVy
YXRvcj0oY29uc3QgQ09NUHRyPFU+Jik7CiAKQEAgLTE2NSw2ICsxNjcsMTQgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIENPTVB0cjxUPiYgQwogICAgIHJldHVybiAqdGhpczsKIH0KIAor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIENPTVB0cjxUPiYgQ09NUHRyPFQ+OjpvcGVyYXRv
cj0oQ09NUHRyPFQ+JiYgbykKK3sKKyAgICBpZiAoVCogcHRyID0gbV9wdHIpCisgICAgICAgIHB0
ci0+UmVsZWFzZSgpOworICAgIG1fcHRyID0gby5sZWFrUmVmKCk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUg
Q09NUHRyPFQ+JiBDT01QdHI8VD46Om9wZXJhdG9yPShjb25zdCBDT01QdHI8VT4mIG8pCiB7CiAg
ICAgVCogb3B0ciA9IG8uZ2V0KCk7CkBAIC0yMTgsNiArMjI4LDE5IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZQogICAgIHJldHVybiBhICE9IGIuZ2V0KCk7CiB9CiAK
KyNpZiAhQVNTRVJUX0RJU0FCTEVECitpbmxpbmUgdW5zaWduZWQgcmVmQ291bnQoSVVua25vd24q
IHB0cikKK3sKKyAgICBpZiAoIXB0cikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1bnNpZ25l
ZCB0ZW1wID0gcHRyLT5BZGRSZWYoKTsKKyAgICB1bnNpZ25lZCB2YWx1ZSA9IHB0ci0+UmVsZWFz
ZSgpOworICAgIEFTU0VSVCh0ZW1wID0gdmFsdWUgKyAxKTsKKyAgICByZXR1cm4gdmFsdWU7Cit9
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFA+IHN0cnVj
dCBJc1NtYXJ0UHRyPENPTVB0cjxQPj4gewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>