<?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>156123</bug_id>
          
          <creation_ts>2016-04-01 17:53:30 -0700</creation_ts>
          <short_desc>Migrate BidiRunList and BidiRun to automatic memory management</short_desc>
          <delta_ts>2016-04-04 12:41:25 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1179994</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-01 17:53:30 -0700</bug_when>
    <thetext>Migrate BidiRunList and BidiRun to automatic memory management</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179995</commentid>
    <comment_count>1</comment_count>
      <attachid>275451</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-01 17:55:00 -0700</bug_when>
    <thetext>Created attachment 275451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179996</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-01 18:06:09 -0700</bug_when>
    <thetext>This is fixing a problem that has been around since r3627 (February 2003)!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179997</commentid>
    <comment_count>3</comment_count>
      <attachid>275452</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-01 18:13:08 -0700</bug_when>
    <thetext>Created attachment 275452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1179999</commentid>
    <comment_count>4</comment_count>
      <attachid>275453</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-01 18:19:47 -0700</bug_when>
    <thetext>Created attachment 275453
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180021</commentid>
    <comment_count>5</comment_count>
      <attachid>275453</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-04-01 20:39:55 -0700</bug_when>
    <thetext>Comment on attachment 275453
Patch

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

&gt; Source/WebCore/platform/text/BidiResolver.h:160
&gt; +        , m_override(context-&gt;override())

Why isn&apos;t m_level initialized here?

&gt; Source/WebCore/platform/text/BidiResolver.h:197
&gt; -    // Do not add anything apart from bitfields until after m_next. See https://bugs.webkit.org/show_bug.cgi?id=100173
&gt; -    bool m_override : 1;
&gt; -    bool m_hasHyphen : 1; // Used by BidiRun subclass which is a layering violation but enables us to save 8 bytes per object on 64-bit.
&gt; -    unsigned char m_level;
&gt; -    BidiCharacterRun* m_next;
&gt; +private:
&gt; +    std::unique_ptr&lt;BidiCharacterRun&gt; m_next;
&gt; +
&gt; +public:
&gt;      int m_start;
&gt;      int m_stop;
&gt; +    unsigned char m_level;
&gt; +    bool m_override : 1;
&gt; +    bool m_hasHyphen : 1; // Used by BidiRun subclass which is a layering violation but enables us to save 8 bytes per object on 64-bit.

What is the size change after these changes?

&gt; Source/WebCore/platform/text/BidiRunList.h:67
&gt;      Run* m_lastRun;
&gt;      Run* m_logicallyLastRun;

Would be nice to have comments saying who owns these raw pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180037</commentid>
    <comment_count>6</comment_count>
      <attachid>275453</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-01 23:23:27 -0700</bug_when>
    <thetext>Comment on attachment 275453
Patch

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

&gt;&gt; Source/WebCore/platform/text/BidiResolver.h:160
&gt;&gt; +        , m_override(context-&gt;override())
&gt; 
&gt; Why isn&apos;t m_level initialized here?

It is initialized on line 166 / 165 below.

&gt;&gt; Source/WebCore/platform/text/BidiResolver.h:197
&gt;&gt; +    bool m_hasHyphen : 1; // Used by BidiRun subclass which is a layering violation but enables us to save 8 bytes per object on 64-bit.
&gt; 
&gt; What is the size change after these changes?

It stays 24 bytes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180039</commentid>
    <comment_count>7</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-02 00:01:41 -0700</bug_when>
    <thetext>Committed r198970: &lt;http://trac.webkit.org/changeset/198970&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180137</commentid>
    <comment_count>8</comment_count>
      <attachid>275453</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-02 20:34:01 -0700</bug_when>
    <thetext>Comment on attachment 275453
Patch

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

&gt; Source/WebCore/platform/text/BidiRunList.h:182
&gt; +    m_firstRun = nullptr;

There’s one significant difference from the old algorithm for deleting the linked list and the new one. This new algorithm uses recursion to delete the linked list, using stack proportional to the length of the list. The old algorithm used iteration instead. I don’t think that change is an improvement. This can be fixed in a couple ways. One way is to add this implementation of ~BidiCharacterRun instead of letting the compiler generate the default implementation:

    ~BidiCharacterRun()
    {
        // Delete the linked list in a loop to prevent destructor recursion.
        auto next = WTFMove(m_next);
        while (next)
            next = WTFMove(next-&gt;m_next);
    }

On the other hand, it’s possible that the recursive algorithm is acceptable, or even that the compiler is clever enough to turn this into tail recursion and optimize that to not use stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180425</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-04 11:22:10 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180426</commentid>
    <comment_count>10</comment_count>
      <attachid>275561</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-04 11:22:13 -0700</bug_when>
    <thetext>Created attachment 275561
Addressing Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180448</commentid>
    <comment_count>11</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-04-04 12:41:25 -0700</bug_when>
    <thetext>Committed r199015: &lt;http://trac.webkit.org/changeset/199015&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275451</attachid>
            <date>2016-04-01 17:55:00 -0700</date>
            <delta_ts>2016-04-01 18:13:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156123-20160401175505.patch</filename>
            <type>text/plain</type>
            <size>20494</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4OTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZjMmQyNjcwOWYzZWYw
NzZiMTlmOGE4NWQzNTcyMGJhOTEwMDkwMS4uZTY2ODExMThkZDRiZDY0MzlmYzZlNzRiZDExMzVi
YzU0N2NkY2M3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE2LTA0LTAxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWlncmF0ZSBC
aWRpUnVuTGlzdCBhbmQgQmlkaVJ1biB0byBhdXRvbWF0aWMgbWVtb3J5IG1hbmFnZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjEyMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJpZGlSdW5MaXN0
LCBCaWRpUnVuLCBhbmQgQmlkaUNoYXJhY3RlclJ1biBoYXZlIGFsbCBiZWVuIGRvaW5nIG1hbnVh
bAorICAgICAgICAibmV3InMgYW5kICJkZWxldGUicyBmb3IgeWVhcnMuIFRoaXMgcGF0Y2ggbWln
cmF0ZXMgdGhvc2UgY2xhc3NlcyB0bworICAgICAgICB1c2luZyBzdGQ6OnVuaXF1ZV9wdHIuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdl
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaUNo
YXJhY3RlclJ1bjo6QmlkaUNoYXJhY3RlclJ1bik6CisgICAgICAgIChXZWJDb3JlOjpCaWRpQ2hh
cmFjdGVyUnVuOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlDaGFyYWN0ZXJSdW46OnRh
a2VOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlDaGFyYWN0ZXJSdW46OnNldE5leHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3ViY2xhc3M+OjphcHBlbmRSdW5JbnRlcm5hbCk6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1
bkxpc3Q6OkJpZGlSdW5MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlSdW5MaXN0OjpmaXJz
dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuTGlzdDxSdW4+OjphZGRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bik6CisgICAgICAgIChX
ZWJDb3JlOjpCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9FbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlkaVJ1bkxpc3Q8UnVuPjo6bW92ZVJ1blRvQmVnaW5uaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZGlSdW5MaXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyk6CisgICAgICAgIChXZWJD
b3JlOjpCaWRpUnVuTGlzdDxSdW4+OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVu
TGlzdDxSdW4+OjpyZXZlcnNlUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuTGlzdDxS
dW4+OjpjbGVhcldpdGhvdXREZXN0cm95aW5nUnVucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaWRpUnVuTGlzdDxSdW4+OjpkZWxldGVSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQmlkaVJ1bi5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1bjo6bmV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaWRpUnVuOjp0YWtlTmV4dCk6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZUl0ZXJhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjphZGRQbGFjZWhvbGRlclJ1bkZv
cklzb2xhdGVkSW5saW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVJ1bik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okxp
bmVCcmVha2VyOjpza2lwTGVhZGluZ1doaXRlc3BhY2UpOgorCiAyMDE2LTAzLTMxICBBbnRvbmlv
IEdvbWVzICA8dG9uaWtpdG9vQHdlYmtpdC5vcmc+CiAKICAgICAgICAgZXZlbnRNYXlTdGFydERy
YWcoKSBkb2VzIG5vdCBjaGVjayBmb3Igc2hpZnRLZXkgb3IgaXNPdmVyTGluawpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5k
ZXggZmJlYThkNzUzZGYzNDVkNDFhN2I2YmQ2ZGJiYzI0OWM4MDhlYjEyMi4uYjkwODVjMzM3OTgz
MWU5ZjlkODM1NzdkNmUwNjExYmEzMTE5ZDhjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC02OTcsNyArNjk3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICBiaWRpUnVuID0gYmlkaVJ1bi0+bmV4
dCgpOwogICAgIH0KIAotICAgIGJpZGlSdW5zLmRlbGV0ZVJ1bnMoKTsKKyAgICBiaWRpUnVucy5j
bGVhcigpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBpbWFnZVBhaW50aW5nT3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L0JpZGlSZXNvbHZlci5oCmluZGV4IDI3YzAzYTFmYmY0ZWY5MjVmOTcxZDRmYjk0MGNiNDBhNmJi
MTVkMzcuLmI1NTZhMTJkYTk0NTAyZjg2N2EwYjQwMDkwMDE0YTc1ZTZhZjMxNDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaApAQCAtMTU1LDEwICsxNTUs
OSBAQCBzdHJ1Y3QgQmlkaUNoYXJhY3RlclJ1biB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgQmlkaUNoYXJhY3RlclJ1bihpbnQgc3RhcnQsIGludCBzdG9wLCBC
aWRpQ29udGV4dCogY29udGV4dCwgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uKQotICAgICAgICA6
IG1fb3ZlcnJpZGUoY29udGV4dC0+b3ZlcnJpZGUoKSkKLSAgICAgICAgLCBtX25leHQoMCkKLSAg
ICAgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICAgICA6IG1fc3RhcnQoc3RhcnQpCiAgICAgICAg
ICwgbV9zdG9wKHN0b3ApCisgICAgICAgICwgbV9vdmVycmlkZShjb250ZXh0LT5vdmVycmlkZSgp
KQogICAgIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBVX09USEVSX05FVVRSQUwpCiAgICAg
ICAgICAgICBkaXJlY3Rpb24gPSBjb250ZXh0LT5kaXIoKTsKQEAgLTE4MywxNiArMTgyLDE5IEBA
IHB1YmxpYzoKICAgICBib29sIHJldmVyc2VkKGJvb2wgdmlzdWFsbHlPcmRlcmVkKSB7IHJldHVy
biBtX2xldmVsICUgMiAmJiAhdmlzdWFsbHlPcmRlcmVkOyB9CiAgICAgYm9vbCBkaXJPdmVycmlk
ZShib29sIHZpc3VhbGx5T3JkZXJlZCkgeyByZXR1cm4gbV9vdmVycmlkZSB8fCB2aXN1YWxseU9y
ZGVyZWQ7IH0KIAotICAgIEJpZGlDaGFyYWN0ZXJSdW4qIG5leHQoKSBjb25zdCB7IHJldHVybiBt
X25leHQ7IH0KLSAgICB2b2lkIHNldE5leHQoQmlkaUNoYXJhY3RlclJ1biogbmV4dCkgeyBtX25l
eHQgPSBuZXh0OyB9CisgICAgQmlkaUNoYXJhY3RlclJ1biogbmV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fbmV4dC5nZXQoKTsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiYm
IHRha2VOZXh0KCkgeyByZXR1cm4gV1RGTW92ZShtX25leHQpOyB9CisgICAgdm9pZCBzZXROZXh0
KHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiYmIG5leHQpIHsgbV9uZXh0ID0gV1RG
TW92ZShuZXh0KTsgfQogCi0gICAgLy8gRG8gbm90IGFkZCBhbnl0aGluZyBhcGFydCBmcm9tIGJp
dGZpZWxkcyB1bnRpbCBhZnRlciBtX25leHQuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAwMTczCi0gICAgYm9vbCBtX292ZXJyaWRlIDogMTsKLSAgICBib29s
IG1faGFzSHlwaGVuIDogMTsgLy8gVXNlZCBieSBCaWRpUnVuIHN1YmNsYXNzIHdoaWNoIGlzIGEg
bGF5ZXJpbmcgdmlvbGF0aW9uIGJ1dCBlbmFibGVzIHVzIHRvIHNhdmUgOCBieXRlcyBwZXIgb2Jq
ZWN0IG9uIDY0LWJpdC4KLSAgICB1bnNpZ25lZCBjaGFyIG1fbGV2ZWw7Ci0gICAgQmlkaUNoYXJh
Y3RlclJ1biogbV9uZXh0OworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJh
Y3RlclJ1bj4gbV9uZXh0OworCitwdWJsaWM6CiAgICAgaW50IG1fc3RhcnQ7CiAgICAgaW50IG1f
c3RvcDsKKyAgICB1bnNpZ25lZCBjaGFyIG1fbGV2ZWw7CisgICAgYm9vbCBtX292ZXJyaWRlIDog
MTsKKyAgICBib29sIG1faGFzSHlwaGVuIDogMTsgLy8gVXNlZCBieSBCaWRpUnVuIHN1YmNsYXNz
IHdoaWNoIGlzIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIGJ1dCBlbmFibGVzIHVzIHRvIHNhdmUgOCBi
eXRlcyBwZXIgb2JqZWN0IG9uIDY0LWJpdC4KIH07CiAKIGVudW0gVmlzdWFsRGlyZWN0aW9uT3Zl
cnJpZGUgewpAQCAtMzQxLDcgKzM0Myw3IEBAIHZvaWQgQmlkaVJlc29sdmVyQmFzZTxJdGVyYXRv
ciwgUnVuLCBTdWJjbGFzcz46OmFwcGVuZFJ1bkludGVybmFsKCkKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChlbmRPZmZzZXQgPj0gc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICBtX3J1bnMuYWRk
UnVuKG5ldyBSdW4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCArIDEsIGNvbnRleHQoKSwgbV9kaXJl
Y3Rpb24pKTsKKyAgICAgICAgICAgIG1fcnVucy5hZGRSdW4oc3RkOjptYWtlX3VuaXF1ZTxSdW4+
KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgKyAxLCBjb250ZXh0KCksIG1fZGlyZWN0aW9uKSk7CiAK
ICAgICAgICAgbV9lb3IuaW5jcmVtZW50KCk7CiAgICAgICAgIG1fc29yID0gbV9lb3I7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmgKaW5kZXggZmRiY2M1NjgxNzNk
YjdkZjhjOGY1ZWNmY2FiMzIzZTk2OTNmMzdhMy4uYzQ1NzhkMGFlNTcyNGY3Mzk1NThkMGVjMGVh
Njg5OTc4OWViNDRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9C
aWRpUnVuTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1bkxp
c3QuaApAQCAtMzIsOSArMzIsOCBAQCBjbGFzcyBCaWRpUnVuTGlzdCB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQmlkaVJ1bkxpc3QpOwogcHVibGljOgogICAgIEJpZGlSdW5MaXN0KCkKLSAg
ICAgICAgOiBtX2ZpcnN0UnVuKDApCi0gICAgICAgICwgbV9sYXN0UnVuKDApCi0gICAgICAgICwg
bV9sb2dpY2FsbHlMYXN0UnVuKDApCisgICAgICAgIDogbV9sYXN0UnVuKG51bGxwdHIpCisgICAg
ICAgICwgbV9sb2dpY2FsbHlMYXN0UnVuKG51bGxwdHIpCiAgICAgICAgICwgbV9ydW5Db3VudCgw
KQogICAgIHsKICAgICB9CkBAIC00MiwxOCArNDEsMTggQEAgcHVibGljOgogICAgIC8vIEZJWE1F
OiBPbmNlIEJpZGlSZXNvbHZlciBubyBsb25nZXIgb3ducyB0aGUgQmlkaVJ1bkxpc3QsCiAgICAg
Ly8gdGhlbiB+QmlkaVJ1bkxpc3Qgc2hvdWxkIGNhbGwgZGVsZXRlUnVucygpIGF1dG9tYXRpY2Fs
bHkuCiAKLSAgICBSdW4qIGZpcnN0UnVuKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFJ1bjsgfQor
ICAgIFJ1biogZmlyc3RSdW4oKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UnVuLmdldCgpOyB9CiAg
ICAgUnVuKiBsYXN0UnVuKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuOyB9CiAgICAgUnVuKiBs
b2dpY2FsbHlMYXN0UnVuKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsbHlMYXN0UnVuOyB9CiAg
ICAgdW5zaWduZWQgcnVuQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3J1bkNvdW50OyB9CiAKLSAg
ICB2b2lkIGFkZFJ1bihSdW4qKTsKLSAgICB2b2lkIHByZXBlbmRSdW4oUnVuKik7CisgICAgdm9p
ZCBhZGRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJik7CisgICAgdm9pZCBwcmVwZW5kUnVuKHN0
ZDo6dW5pcXVlX3B0cjxSdW4+JiYpOwogCiAgICAgdm9pZCBtb3ZlUnVuVG9FbmQoUnVuKik7CiAg
ICAgdm9pZCBtb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKik7CiAKLSAgICB2b2lkIGRlbGV0ZVJ1bnMo
KTsKKyAgICB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZXZlcnNlUnVucyh1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kKTsKICAgICB2b2lkIHJlb3JkZXJSdW5zRnJvbUxldmVscygpOwogCkBA
IC02MiwzNSArNjEsMzYgQEAgcHVibGljOgogICAgIHZvaWQgcmVwbGFjZVJ1bldpdGhSdW5zKFJ1
biogdG9SZXBsYWNlLCBCaWRpUnVuTGlzdDxSdW4+JiBuZXdSdW5zKTsKIAogcHJpdmF0ZToKLSAg
ICB2b2lkIGNsZWFyV2l0aG91dERlc3Ryb3lpbmdSdW5zKCk7CiAKLSAgICBSdW4qIG1fZmlyc3RS
dW47CisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gbV9maXJzdFJ1bjsKICAgICBSdW4qIG1fbGFz
dFJ1bjsKICAgICBSdW4qIG1fbG9naWNhbGx5TGFzdFJ1bjsKICAgICB1bnNpZ25lZCBtX3J1bkNv
dW50OwogfTsKIAogdGVtcGxhdGUgPGNsYXNzIFJ1bj4KLWlubGluZSB2b2lkIEJpZGlSdW5MaXN0
PFJ1bj46OmFkZFJ1bihSdW4qIHJ1bikKK2lubGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmFk
ZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8UnVuPiYmIHJ1bikKIHsKLSAgICBpZiAoIW1fZmlyc3RSdW4p
Ci0gICAgICAgIG1fZmlyc3RSdW4gPSBydW47Ci0gICAgZWxzZQotICAgICAgICBtX2xhc3RSdW4t
Pm1fbmV4dCA9IHJ1bjsKLSAgICBtX2xhc3RSdW4gPSBydW47CisgICAgaWYgKCFtX2ZpcnN0UnVu
KSB7CisgICAgICAgIG1fZmlyc3RSdW4gPSBXVEZNb3ZlKHJ1bik7CisgICAgICAgIG1fbGFzdFJ1
biA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9sYXN0UnVuLT5z
ZXROZXh0KFdURk1vdmUocnVuKSk7CisgICAgICAgIG1fbGFzdFJ1biA9IG1fbGFzdFJ1bi0+bmV4
dCgpOworICAgIH0KICAgICBtX3J1bkNvdW50Kys7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBSdW4+
Ci1pbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+OjpwcmVwZW5kUnVuKFJ1biogcnVuKQoraW5s
aW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8UnVu
PiYmIHJ1bikKIHsKLSAgICBBU1NFUlQoIXJ1bi0+bV9uZXh0KTsKKyAgICBBU1NFUlQoIXJ1bi0+
bmV4dCgpKTsKIAogICAgIGlmICghbV9sYXN0UnVuKQotICAgICAgICBtX2xhc3RSdW4gPSBydW47
CisgICAgICAgIG1fbGFzdFJ1biA9IHJ1bi5nZXQoKTsKICAgICBlbHNlCi0gICAgICAgIHJ1bi0+
bV9uZXh0ID0gbV9maXJzdFJ1bjsKLSAgICBtX2ZpcnN0UnVuID0gcnVuOworICAgICAgICBydW4t
PnNldE5leHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7CisgICAgbV9maXJzdFJ1biA9IFdURk1vdmUo
cnVuKTsKICAgICBtX3J1bkNvdW50Kys7CiB9CiAKQEAgLTk5LDIzICs5OSwyNSBAQCBpbmxpbmUg
dm9pZCBCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9FbmQoUnVuKiBydW4pCiB7CiAgICAgQVNT
RVJUKG1fZmlyc3RSdW4pOwogICAgIEFTU0VSVChtX2xhc3RSdW4pOwotICAgIEFTU0VSVChydW4t
Pm1fbmV4dCk7CisgICAgQVNTRVJUKHJ1bi0+bmV4dCgpKTsKIAotICAgIFJ1biogY3VycmVudCA9
IDA7Ci0gICAgUnVuKiBuZXh0ID0gbV9maXJzdFJ1bjsKLSAgICB3aGlsZSAobmV4dCAhPSBydW4p
IHsKLSAgICAgICAgY3VycmVudCA9IG5leHQ7Ci0gICAgICAgIG5leHQgPSBjdXJyZW50LT5uZXh0
KCk7CisgICAgUnVuKiBwcmV2aW91cyA9IG51bGxwdHI7CisgICAgUnVuKiBjdXJyZW50ID0gbV9m
aXJzdFJ1bi5nZXQoKTsKKyAgICB3aGlsZSAoY3VycmVudCAhPSBydW4pIHsKKyAgICAgICAgcHJl
dmlvdXMgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50ID0gcHJldmlvdXMtPm5leHQoKTsKICAg
ICB9CiAKLSAgICBpZiAoIWN1cnJlbnQpCi0gICAgICAgIG1fZmlyc3RSdW4gPSBydW4tPm5leHQo
KTsKLSAgICBlbHNlCi0gICAgICAgIGN1cnJlbnQtPm1fbmV4dCA9IHJ1bi0+bV9uZXh0OwotCi0g
ICAgcnVuLT5tX25leHQgPSAwOwotICAgIG1fbGFzdFJ1bi0+bV9uZXh0ID0gcnVuOwotICAgIG1f
bGFzdFJ1biA9IHJ1bjsKKyAgICBpZiAoIXByZXZpb3VzKSB7CisgICAgICAgIEFTU0VSVChtX2Zp
cnN0UnVuLmdldCgpID09IHJ1bik7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IG9yaWdp
bmFsRmlyc3RSdW4gPSBXVEZNb3ZlKG1fZmlyc3RSdW4pOworICAgICAgICBtX2ZpcnN0UnVuID0g
b3JpZ2luYWxGaXJzdFJ1bi0+dGFrZU5leHQoKTsKKyAgICAgICAgbV9sYXN0UnVuLT5zZXROZXh0
KFdURk1vdmUob3JpZ2luYWxGaXJzdFJ1bikpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3VzLT50YWtlTmV4dCgpOworICAgICAgICBw
cmV2aW91cy0+c2V0TmV4dChjdXJyZW50LT50YWtlTmV4dCgpKTsKKyAgICAgICAgbV9sYXN0UnVu
LT5zZXROZXh0KFdURk1vdmUodGFyZ2V0KSk7CisgICAgfQogfQogCiB0ZW1wbGF0ZSA8Y2xhc3Mg
UnVuPgpAQCAtMTIzLDIxICsxMjUsMjIgQEAgaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6
bW92ZVJ1blRvQmVnaW5uaW5nKFJ1biogcnVuKQogewogICAgIEFTU0VSVChtX2ZpcnN0UnVuKTsK
ICAgICBBU1NFUlQobV9sYXN0UnVuKTsKLSAgICBBU1NFUlQocnVuICE9IG1fZmlyc3RSdW4pOwor
ICAgIEFTU0VSVChydW4gIT0gbV9maXJzdFJ1bi5nZXQoKSk7CiAKLSAgICBSdW4qIGN1cnJlbnQg
PSBtX2ZpcnN0UnVuOwotICAgIFJ1biogbmV4dCA9IGN1cnJlbnQtPm5leHQoKTsKLSAgICB3aGls
ZSAobmV4dCAhPSBydW4pIHsKLSAgICAgICAgY3VycmVudCA9IG5leHQ7Ci0gICAgICAgIG5leHQg
PSBjdXJyZW50LT5uZXh0KCk7CisgICAgUnVuKiBwcmV2aW91cyA9IG1fZmlyc3RSdW4uZ2V0KCk7
CisgICAgUnVuKiBjdXJyZW50ID0gcHJldmlvdXMtPm5leHQoKTsKKyAgICB3aGlsZSAoY3VycmVu
dCAhPSBydW4pIHsKKyAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gcHJldmlvdXMtPm5leHQoKTsKICAgICB9CiAKLSAgICBjdXJyZW50LT5tX25leHQgPSBydW4t
Pm1fbmV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91cy0+dGFr
ZU5leHQoKTsKKyAgICBwcmV2aW91cy0+c2V0TmV4dChydW4tPnRha2VOZXh0KCkpOwogICAgIGlm
IChydW4gPT0gbV9sYXN0UnVuKQotICAgICAgICBtX2xhc3RSdW4gPSBjdXJyZW50OworICAgICAg
ICBtX2xhc3RSdW4gPSBwcmV2aW91czsKIAotICAgIHJ1bi0+bV9uZXh0ID0gbV9maXJzdFJ1bjsK
LSAgICBtX2ZpcnN0UnVuID0gcnVuOworICAgIHRhcmdldC0+c2V0TmV4dChXVEZNb3ZlKG1fZmly
c3RSdW4pKTsKKyAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZSh0YXJnZXQpOwogfQogCiB0ZW1wbGF0
ZSA8Y2xhc3MgUnVuPgpAQCAtMTQ3LDUzICsxNTAsMzkgQEAgdm9pZCBCaWRpUnVuTGlzdDxSdW4+
OjpyZXBsYWNlUnVuV2l0aFJ1bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5l
d1IKICAgICBBU1NFUlQobV9maXJzdFJ1bik7CiAgICAgQVNTRVJUKHRvUmVwbGFjZSk7CiAKLSAg
ICBpZiAobV9maXJzdFJ1biA9PSB0b1JlcGxhY2UpCi0gICAgICAgIG1fZmlyc3RSdW4gPSBuZXdS
dW5zLmZpcnN0UnVuKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIHJ1biBqdXN0
IGJlZm9yZSAidG9SZXBsYWNlIiBpbiB0aGUgbGlzdCBvZiBydW5zLgotICAgICAgICBSdW4qIHBy
ZXZpb3VzUnVuID0gbV9maXJzdFJ1bjsKLSAgICAgICAgd2hpbGUgKHByZXZpb3VzUnVuLT5uZXh0
KCkgIT0gdG9SZXBsYWNlKQotICAgICAgICAgICAgcHJldmlvdXNSdW4gPSBwcmV2aW91c1J1bi0+
bmV4dCgpOwotICAgICAgICBBU1NFUlQocHJldmlvdXNSdW4pOwotICAgICAgICBwcmV2aW91c1J1
bi0+c2V0TmV4dChuZXdSdW5zLmZpcnN0UnVuKCkpOwotICAgIH0KLQotICAgIG5ld1J1bnMubGFz
dFJ1bigpLT5zZXROZXh0KHRvUmVwbGFjZS0+bmV4dCgpKTsKKyAgICBtX3J1bkNvdW50ICs9IG5l
d1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFyZSBhZGRpbmcgdGhlIG5ldyBydW5zIGFuZCBy
ZW1vdmluZyB0b1JlcGxhY2UuCiAKLSAgICAvLyBGaXggdXAgYW55IG9mIG90aGVyIHBvaW50ZXJz
IHdoaWNoIG1heSBub3cgYmUgc3RhbGUuCisgICAgLy8gRml4IHVwIGFueSBwb2ludGVycyB3aGlj
aCBtYXkgZW5kIHVwIHN0YWxlLgogICAgIGlmIChtX2xhc3RSdW4gPT0gdG9SZXBsYWNlKQogICAg
ICAgICBtX2xhc3RSdW4gPSBuZXdSdW5zLmxhc3RSdW4oKTsKICAgICBpZiAobV9sb2dpY2FsbHlM
YXN0UnVuID09IHRvUmVwbGFjZSkKICAgICAgICAgbV9sb2dpY2FsbHlMYXN0UnVuID0gbmV3UnVu
cy5sb2dpY2FsbHlMYXN0UnVuKCk7Ci0gICAgbV9ydW5Db3VudCArPSBuZXdSdW5zLnJ1bkNvdW50
KCkgLSAxOyAvLyBXZSBhZGRlZCB0aGUgbmV3IHJ1bnMgYW5kIHJlbW92ZWQgdG9SZXBsYWNlLgog
Ci0gICAgZGVsZXRlIHRvUmVwbGFjZTsKLSAgICBuZXdSdW5zLmNsZWFyV2l0aG91dERlc3Ryb3lp
bmdSdW5zKCk7Ci19CisgICAgaWYgKG1fZmlyc3RSdW4uZ2V0KCkgPT0gdG9SZXBsYWNlKSB7Cisg
ICAgICAgIG5ld1J1bnMubV9sYXN0UnVuLT5zZXROZXh0KG1fZmlyc3RSdW4tPnRha2VOZXh0KCkp
OworICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShuZXdSdW5zLm1fZmlyc3RSdW4pOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIEZpbmQgdGhlIHJ1biBqdXN0IGJlZm9yZSAidG9SZXBsYWNl
IiBpbiB0aGUgbGlzdCBvZiBydW5zLgorICAgICAgICBSdW4qIHByZXZpb3VzUnVuID0gbV9maXJz
dFJ1bi5nZXQoKTsKKyAgICAgICAgd2hpbGUgKHByZXZpb3VzUnVuLT5uZXh0KCkgIT0gdG9SZXBs
YWNlKQorICAgICAgICAgICAgcHJldmlvdXNSdW4gPSBwcmV2aW91c1J1bi0+bmV4dCgpOworICAg
ICAgICBBU1NFUlQocHJldmlvdXNSdW4pOwogCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotdm9pZCBC
aWRpUnVuTGlzdDxSdW4+OjpjbGVhcldpdGhvdXREZXN0cm95aW5nUnVucygpCi17Ci0gICAgbV9m
aXJzdFJ1biA9IDA7Ci0gICAgbV9sYXN0UnVuID0gMDsKLSAgICBtX2xvZ2ljYWxseUxhc3RSdW4g
PSAwOwotICAgIG1fcnVuQ291bnQgPSAwOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0
YXJnZXQgPSBwcmV2aW91c1J1bi0+dGFrZU5leHQoKTsKKyAgICAgICAgcHJldmlvdXNSdW4tPnNl
dE5leHQoV1RGTW92ZShuZXdSdW5zLm1fZmlyc3RSdW4pKTsKKyAgICAgICAgbmV3UnVucy5tX2xh
c3RSdW4tPnNldE5leHQodGFyZ2V0LT50YWtlTmV4dCgpKTsKKyAgICB9CisKKyAgICBuZXdSdW5z
LmNsZWFyKCk7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBSdW4+Ci12b2lkIEJpZGlSdW5MaXN0PFJ1
bj46OmRlbGV0ZVJ1bnMoKQordm9pZCBCaWRpUnVuTGlzdDxSdW4+OjpjbGVhcigpCiB7Ci0gICAg
aWYgKCFtX2ZpcnN0UnVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSdW4qIGN1cnIgPSBtX2Zp
cnN0UnVuOwotICAgIHdoaWxlIChjdXJyKSB7Ci0gICAgICAgIFJ1biogcyA9IGN1cnItPm5leHQo
KTsKLSAgICAgICAgZGVsZXRlIGN1cnI7Ci0gICAgICAgIGN1cnIgPSBzOwotICAgIH0KLQotICAg
IGNsZWFyV2l0aG91dERlc3Ryb3lpbmdSdW5zKCk7CisgICAgbV9maXJzdFJ1biA9IG51bGxwdHI7
CisgICAgbV9sYXN0UnVuID0gbnVsbHB0cjsKKyAgICBtX2xvZ2ljYWxseUxhc3RSdW4gPSBudWxs
cHRyOworICAgIG1fcnVuQ291bnQgPSAwOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUnVuPgpAQCAt
MjA2LDQ0ICsxOTUsMzUgQEAgdm9pZCBCaWRpUnVuTGlzdDxSdW4+OjpyZXZlcnNlUnVucyh1bnNp
Z25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQogCiAgICAgLy8gR2V0IHRoZSBpdGVtIGJlZm9yZSB0
aGUgc3RhcnQgb2YgdGhlIHJ1bnMgdG8gcmV2ZXJzZSBhbmQgcHV0IGl0IGluCiAgICAgLy8gfGJl
Zm9yZVN0YXJ0fC4gfGN1cnJ8IHNob3VsZCBwb2ludCB0byB0aGUgZmlyc3QgcnVuIHRvIHJldmVy
c2UuCi0gICAgUnVuKiBjdXJyID0gbV9maXJzdFJ1bjsKLSAgICBSdW4qIGJlZm9yZVN0YXJ0ID0g
MDsKKyAgICBSdW4qIGN1cnIgPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIFJ1biogYmVmb3JlU3Rh
cnQgPSBudWxscHRyOwogICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIHdoaWxlIChpIDwgc3RhcnQp
IHsKLSAgICAgICAgaSsrOworICAgIGZvciAoOyBpIDwgc3RhcnQ7ICsraSkgewogICAgICAgICBi
ZWZvcmVTdGFydCA9IGN1cnI7CiAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0KCk7CiAgICAgfQot
CiAgICAgUnVuKiBzdGFydFJ1biA9IGN1cnI7Ci0gICAgd2hpbGUgKGkgPCBlbmQpIHsKLSAgICAg
ICAgaSsrOworCisgICAgZm9yICg7IGkgPCBlbmQ7ICsraSkKICAgICAgICAgY3VyciA9IGN1cnIt
Pm5leHQoKTsKLSAgICB9Ci0gICAgUnVuKiBlbmRSdW4gPSBjdXJyOwotICAgIFJ1biogYWZ0ZXJF
bmQgPSBjdXJyLT5uZXh0KCk7Ci0KLSAgICBpID0gc3RhcnQ7Ci0gICAgY3VyciA9IHN0YXJ0UnVu
OwotICAgIFJ1biogbmV3TmV4dCA9IGFmdGVyRW5kOwotICAgIHdoaWxlIChpIDw9IGVuZCkgewot
ICAgICAgICAvLyBEbyB0aGUgcmV2ZXJzYWwuCi0gICAgICAgIFJ1biogbmV4dCA9IGN1cnItPm5l
eHQoKTsKLSAgICAgICAgY3Vyci0+bV9uZXh0ID0gbmV3TmV4dDsKLSAgICAgICAgbmV3TmV4dCA9
IGN1cnI7Ci0gICAgICAgIGN1cnIgPSBuZXh0OwotICAgICAgICBpKys7CisKKyAgICBpZiAoIWN1
cnItPm5leHQoKSkKKyAgICAgICAgbV9sYXN0UnVuID0gc3RhcnRSdW47CisKKyAgICAvLyBTdGFu
ZGFyZCAic2xpZGluZyB3aW5kb3ciIG9mIDMgcG9pbnRlcnMKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
UnVuPiBwcmV2aW91cyA9IGN1cnItPnRha2VOZXh0KCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1
bj4gY3VycmVudCA9IGJlZm9yZVN0YXJ0ID8gYmVmb3JlU3RhcnQtPnRha2VOZXh0KCkgOiBXVEZN
b3ZlKG1fZmlyc3RSdW4pOworICAgIHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxSdW4+IG5leHQgPSBjdXJyZW50LT50YWtlTmV4dCgpOworICAgICAgICBjdXJyZW50
LT5zZXROZXh0KFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgcHJldmlvdXMgPSBXVEZNb3Zl
KGN1cnJlbnQpOworICAgICAgICBjdXJyZW50ID0gV1RGTW92ZShuZXh0KTsKICAgICB9CiAKLSAg
ICAvLyBOb3cgaG9vayB1cCBiZWZvcmVTdGFydCBhbmQgYWZ0ZXJFbmQgdG8gdGhlIHN0YXJ0UnVu
IGFuZCBlbmRSdW4uCiAgICAgaWYgKGJlZm9yZVN0YXJ0KQotICAgICAgICBiZWZvcmVTdGFydC0+
bV9uZXh0ID0gZW5kUnVuOworICAgICAgICBiZWZvcmVTdGFydC0+c2V0TmV4dChXVEZNb3ZlKHBy
ZXZpb3VzKSk7CiAgICAgZWxzZQotICAgICAgICBtX2ZpcnN0UnVuID0gZW5kUnVuOwotCi0gICAg
c3RhcnRSdW4tPm1fbmV4dCA9IGFmdGVyRW5kOwotICAgIGlmICghYWZ0ZXJFbmQpCi0gICAgICAg
IG1fbGFzdFJ1biA9IHN0YXJ0UnVuOworICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShwcmV2
aW91cyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlk
aVJ1bi5oCmluZGV4IGE2NjMxNDNlNjNmZGIwMmNmMjdkZjI0OTc3Zjk3ZjBmYjMyMzY4YjcuLmJl
OTk5NTU2NDdhMzQ5ZGIwN2NmYjFlZDQ0M2I2NzY4YTVjMzg2MzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0JpZGlSdW4uaApAQCAtMzcsNyArMzcsOCBAQCBzdHJ1Y3QgQmlkaVJ1biA6IEJpZGlDaGFy
YWN0ZXJSdW4gewogICAgIEJpZGlSdW4oaW50IHN0YXJ0LCBpbnQgc3RvcCwgUmVuZGVyT2JqZWN0
JiwgQmlkaUNvbnRleHQqLCBVQ2hhckRpcmVjdGlvbik7CiAgICAgfkJpZGlSdW4oKTsKIAotICAg
IEJpZGlSdW4qIG5leHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCaWRpUnVuKj4obV9uZXh0KTsg
fQorICAgIEJpZGlSdW4qIG5leHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCaWRpUnVuKj4oQmlk
aUNoYXJhY3RlclJ1bjo6bmV4dCgpKTsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPiYm
IHRha2VOZXh0KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxzdGQ6OnVuaXF1ZV9wdHI8Qmlk
aVJ1bj4mJj4oQmlkaUNoYXJhY3RlclJ1bjo6dGFrZU5leHQoKSk7IH0KICAgICBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyKCkgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQogICAgIElubGluZUJveCogYm94
KCkgeyByZXR1cm4gbV9ib3g7IH0KICAgICB2b2lkIHNldEJveChJbmxpbmVCb3gmIGJveCkgeyBt
X2JveCA9ICZib3g7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgK
aW5kZXggMGM4ZmIzODI3OTVlODMzNzc0NDU4OWM3OThmYzUxOWU3ZWFlODJlOC4uZWE3ZWRiNGJm
NjQ5NWJhZDI0NWQ4ZjhiYThhYjc0ZmUxMDkyNjcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUl0ZXJhdG9yLmgKQEAgLTQ5MiwxMiArNDkyLDEyIEBAIHN0YXRpYyBpbmxpbmUg
dW5zaWduZWQgbnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKGNvbnN0IElubGluZUl0ZXJhdG9yJiBp
dGVyKQogLy8gb2YgQmlkaVJlc29sdmVyIHdoaWNoIGtub3dzIG5vdGhpbmcgYWJvdXQgUmVuZGVy
T2JqZWN0cy4KIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRQbGFjZWhvbGRlclJ1bkZvcklzb2xhdGVk
SW5saW5lKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFJlbmRlck9iamVjdCYgb2JqLCB1
bnNpZ25lZCBwb3MsIFJlbmRlckVsZW1lbnQmIHJvb3QpCiB7Ci0gICAgQmlkaVJ1biogaXNvbGF0
ZWRSdW4gPSBuZXcgQmlkaVJ1bihwb3MsIDAsIG9iaiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNv
bHZlci5kaXIoKSk7Ci0gICAgcmVzb2x2ZXIucnVucygpLmFkZFJ1bihpc29sYXRlZFJ1bik7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IGlzb2xhdGVkUnVuID0gc3RkOjptYWtlX3VuaXF1
ZTxCaWRpUnVuPihwb3MsIDAsIG9iaiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIo
KSk7CiAgICAgLy8gRklYTUU6IGlzb2xhdGVkUnVucygpIGNvdWxkIGJlIGEgaGFzaCBvZiBvYmpl
Y3QtPnJ1biBhbmQgdGhlbiB3ZSBjb3VsZCBjaGVhcGx5CiAgICAgLy8gQVNTRVJUIGhlcmUgdGhh
dCB3ZSBkaWRuJ3QgY3JlYXRlIG11bHRpcGxlIG9iamVjdHMgZm9yIHRoZSBzYW1lIGlubGluZS4K
ICAgICByZXNvbHZlci5zZXRNaWRwb2ludEZvcklzb2xhdGVkUnVuKCppc29sYXRlZFJ1biwgcmVz
b2x2ZXIubWlkcG9pbnRTdGF0ZSgpLmN1cnJlbnRNaWRwb2ludCgpKTsKICAgICByZXNvbHZlci5p
c29sYXRlZFJ1bnMoKS5hcHBlbmQoQmlkaUlzb2xhdGVkUnVuKG9iaiwgcG9zLCByb290LCAqaXNv
bGF0ZWRSdW4pKTsKKyAgICByZXNvbHZlci5ydW5zKCkuYWRkUnVuKFdURk1vdmUoaXNvbGF0ZWRS
dW4pKTsKIH0KIAogY2xhc3MgSXNvbGF0ZVRyYWNrZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCAwZTE4NTI0MWQ1MzFl
YzVkZjRlMzY4MmE2ZmYxNTk2MjEyNjk0MjcxLi4zODlhMjI4MDdjN2RlNTBhZGY5N2JmNjRlNjZj
M2Y3NDJjYzU5NjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtNzEsOSArNzEsOSBAQCBzdGF0aWMgdm9pZCBkZXRlcm1p
bmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0aW9uJiBkaXIsIElubGluZUl0ZXJhdG9yIGl0ZXIp
CiAgICAgfQogfQogCi1pbmxpbmUgQmlkaVJ1biogY3JlYXRlUnVuKGludCBzdGFydCwgaW50IGVu
ZCwgUmVuZGVyT2JqZWN0JiBvYmosIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCitpbmxp
bmUgc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IGNyZWF0ZVJ1bihpbnQgc3RhcnQsIGludCBlbmQs
IFJlbmRlck9iamVjdCYgb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQogewotICAg
IHJldHVybiBuZXcgQmlkaVJ1bihzdGFydCwgZW5kLCBvYmosIHJlc29sdmVyLmNvbnRleHQoKSwg
cmVzb2x2ZXIuZGlyKCkpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpZGlSdW4+KHN0
YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIoKSk7CiB9CiAK
IHZvaWQgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJp
ZGlSdW4+KiBydW5zLCBpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCYgb2JqLCBJbmxp
bmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQpAQCAtMTAzNiwxMyArMTAzNiwxMyBAQCBpbmxpbmUg
QmlkaVJ1biogUmVuZGVyQmxvY2tGbG93OjpoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlz
dDxCaWRpUnVuPiYgYmlkaQogICAgICAgICB3aGlsZSAoQmlkaUNvbnRleHQqIHBhcmVudCA9IGJh
c2VDb250ZXh0LT5wYXJlbnQoKSkKICAgICAgICAgICAgIGJhc2VDb250ZXh0ID0gcGFyZW50Owog
Ci0gICAgICAgIEJpZGlSdW4qIG5ld1RyYWlsaW5nUnVuID0gbmV3IEJpZGlSdW4oZmlyc3RTcGFj
ZSwgdHJhaWxpbmdTcGFjZVJ1bi0+bV9zdG9wLCB0cmFpbGluZ1NwYWNlUnVuLT5yZW5kZXJlcigp
LCBiYXNlQ29udGV4dCwgVV9PVEhFUl9ORVVUUkFMKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEJpZGlSdW4+IG5ld1RyYWlsaW5nUnVuID0gc3RkOjptYWtlX3VuaXF1ZTxCaWRpUnVuPihmaXJz
dFNwYWNlLCB0cmFpbGluZ1NwYWNlUnVuLT5tX3N0b3AsIHRyYWlsaW5nU3BhY2VSdW4tPnJlbmRl
cmVyKCksIGJhc2VDb250ZXh0LCBVX09USEVSX05FVVRSQUwpOwogICAgICAgICB0cmFpbGluZ1Nw
YWNlUnVuLT5tX3N0b3AgPSBmaXJzdFNwYWNlOworICAgICAgICB0cmFpbGluZ1NwYWNlUnVuID0g
bmV3VHJhaWxpbmdSdW4uZ2V0KCk7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKQotICAg
ICAgICAgICAgYmlkaVJ1bnMuYWRkUnVuKG5ld1RyYWlsaW5nUnVuKTsKKyAgICAgICAgICAgIGJp
ZGlSdW5zLmFkZFJ1bihXVEZNb3ZlKG5ld1RyYWlsaW5nUnVuKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGJpZGlSdW5zLnByZXBlbmRSdW4obmV3VHJhaWxpbmdSdW4pOwotICAgICAgICB0
cmFpbGluZ1NwYWNlUnVuID0gbmV3VHJhaWxpbmdSdW47CisgICAgICAgICAgICBiaWRpUnVucy5w
cmVwZW5kUnVuKFdURk1vdmUobmV3VHJhaWxpbmdSdW4pKTsKICAgICAgICAgcmV0dXJuIHRyYWls
aW5nU3BhY2VSdW47CiAgICAgfQogICAgIGlmICghc2hvdWxkUmVvcmRlcikKQEAgLTEzMjEsNyAr
MTMyMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5n
ZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJCiAgICAgICAgIGlmIChyZXNvbHZlci5w
b3NpdGlvbigpLmF0RW5kKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
YmUgY3JlYXRpbmcgYW55IHJ1bnMgaW4gbmV4dExpbmVCcmVhayB0byBiZWdpbiB3aXRoIQogICAg
ICAgICAgICAgLy8gT25jZSBCaWRpUnVuTGlzdCBpcyBzZXBhcmF0ZWQgZnJvbSBCaWRpUmVzb2x2
ZXIgdGhpcyB3aWxsIG5vdCBiZSBuZWVkZWQuCi0gICAgICAgICAgICByZXNvbHZlci5ydW5zKCku
ZGVsZXRlUnVucygpOworICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmNsZWFyKCk7CiAgICAg
ICAgICAgICByZXNvbHZlci5tYXJrQ3VycmVudFJ1bkVtcHR5KCk7IC8vIEZJWE1FOiBUaGlzIGNh
biBwcm9iYWJseSBiZSByZXBsYWNlZCBieSBhbiBBU1NFUlQgKG9yIGp1c3QgcmVtb3ZlZCkuCiAg
ICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRDaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSh0cnVl
KTsKICAgICAgICAgICAgIHJlc29sdmVyLnNldFBvc2l0aW9uKElubGluZUl0ZXJhdG9yKHJlc29s
dmVyLnBvc2l0aW9uKCkucm9vdCgpLCAwLCAwKSwgMCk7CkBAIC0xMzYyLDcgKzEzNjIsNyBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSQogICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2Fs
SGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgUm9vdElubGluZUJveCogbGlu
ZUJveCA9IGNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyhyZXNvbHZlci5zdGF0dXMoKS5jb250
ZXh0LT5sZXZlbCgpLCBiaWRpUnVucywgZW5kLCBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLCB2ZXJ0
aWNhbFBvc2l0aW9uQ2FjaGUsIHRyYWlsaW5nU3BhY2VSdW4sIHdvcmRNZWFzdXJlbWVudHMpOwog
Ci0gICAgICAgICAgICBiaWRpUnVucy5kZWxldGVSdW5zKCk7CisgICAgICAgICAgICBiaWRpUnVu
cy5jbGVhcigpOwogICAgICAgICAgICAgcmVzb2x2ZXIubWFya0N1cnJlbnRSdW5FbXB0eSgpOyAv
LyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYmUgcmVwbGFjZWQgYnkgYW4gQVNTRVJUIChvciBq
dXN0IHJlbW92ZWQpLgogCiAgICAgICAgICAgICBpZiAobGluZUJveCkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwCmluZGV4IDZlYWZhMjkwNjkzYWZi
YjNmMTRkN2E4ZjA2YTdkY2ZkNTc3MzE2YmYuLmY2ZWI5ZTMwNTIzZmVhOTZhZTdjNWRlYTNkMjMz
MTk2YTU4NmJjZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xp
bmVCcmVha2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJl
YWtlci5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdX
aGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmVJbmZvJgogICAgICAg
ICBpZiAob2JqZWN0LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICBzZXRT
dGF0aWNQb3NpdGlvbnMobV9ibG9jaywgZG93bmNhc3Q8UmVuZGVyQm94PihvYmplY3QpLCB3aWR0
aC5zaG91bGRJbmRlbnRUZXh0KCkpOwogICAgICAgICAgICAgaWYgKG9iamVjdC5zdHlsZSgpLmlz
T3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZXIu
cnVucygpLmFkZFJ1bihuZXcgQmlkaVJ1bigwLCAxLCBvYmplY3QsIHJlc29sdmVyLmNvbnRleHQo
KSwgcmVzb2x2ZXIuZGlyKCkpKTsKKyAgICAgICAgICAgICAgICByZXNvbHZlci5ydW5zKCkuYWRk
UnVuKHN0ZDo6bWFrZV91bmlxdWU8QmlkaVJ1bj4oMCwgMSwgb2JqZWN0LCByZXNvbHZlci5jb250
ZXh0KCksIHJlc29sdmVyLmRpcigpKSk7CiAgICAgICAgICAgICAgICAgbGluZUluZm8uaW5jcmVt
ZW50UnVuc0Zyb21MZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgaWYgKG9iamVjdC5pc0Zsb2F0aW5nKCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275452</attachid>
            <date>2016-04-01 18:13:08 -0700</date>
            <delta_ts>2016-04-01 18:19:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156123-20160401181313.patch</filename>
            <type>text/plain</type>
            <size>21106</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4OTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZjMmQyNjcwOWYzZWYw
NzZiMTlmOGE4NWQzNTcyMGJhOTEwMDkwMS4uYmZhMTRiZjhhNWFiMjBlYTgzYzU5ODA3M2Y1OTll
OTY0YzU0NDMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE2LTA0LTAxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWlncmF0ZSBC
aWRpUnVuTGlzdCBhbmQgQmlkaVJ1biB0byBhdXRvbWF0aWMgbWVtb3J5IG1hbmFnZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjEyMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJpZGlSdW5MaXN0
LCBCaWRpUnVuLCBhbmQgQmlkaUNoYXJhY3RlclJ1biBoYXZlIGFsbCBiZWVuIGRvaW5nIG1hbnVh
bAorICAgICAgICAibmV3InMgYW5kICJkZWxldGUicyBmb3IgeWVhcnMuIFRoaXMgcGF0Y2ggbWln
cmF0ZXMgdGhvc2UgY2xhc3NlcyB0bworICAgICAgICB1c2luZyBzdGQ6OnVuaXF1ZV9wdHIuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdl
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaUNo
YXJhY3RlclJ1bjo6QmlkaUNoYXJhY3RlclJ1bik6CisgICAgICAgIChXZWJDb3JlOjpCaWRpQ2hh
cmFjdGVyUnVuOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlDaGFyYWN0ZXJSdW46OnRh
a2VOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlDaGFyYWN0ZXJSdW46OnNldE5leHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3ViY2xhc3M+OjphcHBlbmRSdW5JbnRlcm5hbCk6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1
bkxpc3Q6OkJpZGlSdW5MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlSdW5MaXN0OjpmaXJz
dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuTGlzdDxSdW4+OjphZGRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bik6CisgICAgICAgIChX
ZWJDb3JlOjpCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9FbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlkaVJ1bkxpc3Q8UnVuPjo6bW92ZVJ1blRvQmVnaW5uaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZGlSdW5MaXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyk6CisgICAgICAgIChXZWJD
b3JlOjpCaWRpUnVuTGlzdDxSdW4+OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVu
TGlzdDxSdW4+OjpyZXZlcnNlUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuTGlzdDxS
dW4+OjpjbGVhcldpdGhvdXREZXN0cm95aW5nUnVucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaWRpUnVuTGlzdDxSdW4+OjpkZWxldGVSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQmlkaVJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuOjp0YWtlTmV4
dCk6CisgICAgICAgICogcmVuZGVyaW5nL0JpZGlSdW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZGlSdW46Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1bjo6dGFrZU5leHQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRk
UGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoYW5kbGVUcmFpbGluZ1NwYWNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdHNJ
blJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKToKKwogMjAx
Ni0wMy0zMSAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAgICAgICAg
IGV2ZW50TWF5U3RhcnREcmFnKCkgZG9lcyBub3QgY2hlY2sgZm9yIHNoaWZ0S2V5IG9yIGlzT3Zl
ckxpbmsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IGZiZWE4ZDc1M2RmMzQ1ZDQxYTdiNmJkNmRiYmMyNDljODA4ZWIx
MjIuLmI5MDg1YzMzNzk4MzFlOWY5ZDgzNTc3ZDZlMDYxMWJhMzExOWQ4YzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgYmlkaVJ1
biA9IGJpZGlSdW4tPm5leHQoKTsKICAgICB9CiAKLSAgICBiaWRpUnVucy5kZWxldGVSdW5zKCk7
CisgICAgYmlkaVJ1bnMuY2xlYXIoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaAppbmRleCAyN2MwM2ExZmJmNGVmOTI1Zjk3
MWQ0ZmI5NDBjYjQwYTZiYjE1ZDM3Li5iNTU2YTEyZGE5NDUwMmY4NjdhMGI0MDA5MDAxNGE3NWU2
YWYzMTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNv
bHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgK
QEAgLTE1NSwxMCArMTU1LDkgQEAgc3RydWN0IEJpZGlDaGFyYWN0ZXJSdW4gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEJpZGlDaGFyYWN0ZXJSdW4oaW50IHN0
YXJ0LCBpbnQgc3RvcCwgQmlkaUNvbnRleHQqIGNvbnRleHQsIFVDaGFyRGlyZWN0aW9uIGRpcmVj
dGlvbikKLSAgICAgICAgOiBtX292ZXJyaWRlKGNvbnRleHQtPm92ZXJyaWRlKCkpCi0gICAgICAg
ICwgbV9uZXh0KDApCi0gICAgICAgICwgbV9zdGFydChzdGFydCkKKyAgICAgICAgOiBtX3N0YXJ0
KHN0YXJ0KQogICAgICAgICAsIG1fc3RvcChzdG9wKQorICAgICAgICAsIG1fb3ZlcnJpZGUoY29u
dGV4dC0+b3ZlcnJpZGUoKSkKICAgICB7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVV9PVEhF
Ul9ORVVUUkFMKQogICAgICAgICAgICAgZGlyZWN0aW9uID0gY29udGV4dC0+ZGlyKCk7CkBAIC0x
ODMsMTYgKzE4MiwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCByZXZlcnNlZChib29sIHZpc3VhbGx5
T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAlIDIgJiYgIXZpc3VhbGx5T3JkZXJlZDsgfQogICAg
IGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1YWxseU9yZGVyZWQpIHsgcmV0dXJuIG1fb3ZlcnJp
ZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9CiAKLSAgICBCaWRpQ2hhcmFjdGVyUnVuKiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0OyB9Ci0gICAgdm9pZCBzZXROZXh0KEJpZGlDaGFyYWN0ZXJS
dW4qIG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorICAgIEJpZGlDaGFyYWN0ZXJSdW4qIG5leHQo
KSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qmlk
aUNoYXJhY3RlclJ1bj4mJiB0YWtlTmV4dCgpIHsgcmV0dXJuIFdURk1vdmUobV9uZXh0KTsgfQor
ICAgIHZvaWQgc2V0TmV4dChzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJhY3RlclJ1bj4mJiBuZXh0
KSB7IG1fbmV4dCA9IFdURk1vdmUobmV4dCk7IH0KIAotICAgIC8vIERvIG5vdCBhZGQgYW55dGhp
bmcgYXBhcnQgZnJvbSBiaXRmaWVsZHMgdW50aWwgYWZ0ZXIgbV9uZXh0LiBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDE3MwotICAgIGJvb2wgbV9vdmVycmlk
ZSA6IDE7Ci0gICAgYm9vbCBtX2hhc0h5cGhlbiA6IDE7IC8vIFVzZWQgYnkgQmlkaVJ1biBzdWJj
bGFzcyB3aGljaCBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbiBidXQgZW5hYmxlcyB1cyB0byBzYXZl
IDggYnl0ZXMgcGVyIG9iamVjdCBvbiA2NC1iaXQuCi0gICAgdW5zaWduZWQgY2hhciBtX2xldmVs
OwotICAgIEJpZGlDaGFyYWN0ZXJSdW4qIG1fbmV4dDsKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlx
dWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+IG1fbmV4dDsKKworcHVibGljOgogICAgIGludCBtX3N0
YXJ0OwogICAgIGludCBtX3N0b3A7CisgICAgdW5zaWduZWQgY2hhciBtX2xldmVsOworICAgIGJv
b2wgbV9vdmVycmlkZSA6IDE7CisgICAgYm9vbCBtX2hhc0h5cGhlbiA6IDE7IC8vIFVzZWQgYnkg
QmlkaVJ1biBzdWJjbGFzcyB3aGljaCBpcyBhIGxheWVyaW5nIHZpb2xhdGlvbiBidXQgZW5hYmxl
cyB1cyB0byBzYXZlIDggYnl0ZXMgcGVyIG9iamVjdCBvbiA2NC1iaXQuCiB9OwogCiBlbnVtIFZp
c3VhbERpcmVjdGlvbk92ZXJyaWRlIHsKQEAgLTM0MSw3ICszNDMsNyBAQCB2b2lkIEJpZGlSZXNv
bHZlckJhc2U8SXRlcmF0b3IsIFJ1biwgU3ViY2xhc3M+OjphcHBlbmRSdW5JbnRlcm5hbCgpCiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoZW5kT2Zmc2V0ID49IHN0YXJ0T2Zmc2V0KQotICAgICAg
ICAgICAgbV9ydW5zLmFkZFJ1bihuZXcgUnVuKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgKyAxLCBj
b250ZXh0KCksIG1fZGlyZWN0aW9uKSk7CisgICAgICAgICAgICBtX3J1bnMuYWRkUnVuKHN0ZDo6
bWFrZV91bmlxdWU8UnVuPihzdGFydE9mZnNldCwgZW5kT2Zmc2V0ICsgMSwgY29udGV4dCgpLCBt
X2RpcmVjdGlvbikpOwogCiAgICAgICAgIG1fZW9yLmluY3JlbWVudCgpOwogICAgICAgICBtX3Nv
ciA9IG1fZW9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRp
UnVuTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oCmlu
ZGV4IGZkYmNjNTY4MTczZGI3ZGY4YzhmNWVjZmNhYjMyM2U5NjkzZjM3YTMuLmM0NTc4ZDBhZTU3
MjRmNzM5NTU4ZDBlYzBlYTY4OTk3ODllYjQ0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQmlkaVJ1bkxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0JpZGlSdW5MaXN0LmgKQEAgLTMyLDkgKzMyLDggQEAgY2xhc3MgQmlkaVJ1bkxpc3Qg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJpZGlSdW5MaXN0KTsKIHB1YmxpYzoKICAgICBC
aWRpUnVuTGlzdCgpCi0gICAgICAgIDogbV9maXJzdFJ1bigwKQotICAgICAgICAsIG1fbGFzdFJ1
bigwKQotICAgICAgICAsIG1fbG9naWNhbGx5TGFzdFJ1bigwKQorICAgICAgICA6IG1fbGFzdFJ1
bihudWxscHRyKQorICAgICAgICAsIG1fbG9naWNhbGx5TGFzdFJ1bihudWxscHRyKQogICAgICAg
ICAsIG1fcnVuQ291bnQoMCkKICAgICB7CiAgICAgfQpAQCAtNDIsMTggKzQxLDE4IEBAIHB1Ymxp
YzoKICAgICAvLyBGSVhNRTogT25jZSBCaWRpUmVzb2x2ZXIgbm8gbG9uZ2VyIG93bnMgdGhlIEJp
ZGlSdW5MaXN0LAogICAgIC8vIHRoZW4gfkJpZGlSdW5MaXN0IHNob3VsZCBjYWxsIGRlbGV0ZVJ1
bnMoKSBhdXRvbWF0aWNhbGx5LgogCi0gICAgUnVuKiBmaXJzdFJ1bigpIGNvbnN0IHsgcmV0dXJu
IG1fZmlyc3RSdW47IH0KKyAgICBSdW4qIGZpcnN0UnVuKCkgY29uc3QgeyByZXR1cm4gbV9maXJz
dFJ1bi5nZXQoKTsgfQogICAgIFJ1biogbGFzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1
bjsgfQogICAgIFJ1biogbG9naWNhbGx5TGFzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bGx5TGFzdFJ1bjsgfQogICAgIHVuc2lnbmVkIHJ1bkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9y
dW5Db3VudDsgfQogCi0gICAgdm9pZCBhZGRSdW4oUnVuKik7Ci0gICAgdm9pZCBwcmVwZW5kUnVu
KFJ1biopOworICAgIHZvaWQgYWRkUnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYpOworICAgIHZv
aWQgcHJlcGVuZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8UnVuPiYmKTsKIAogICAgIHZvaWQgbW92ZVJ1
blRvRW5kKFJ1biopOwogICAgIHZvaWQgbW92ZVJ1blRvQmVnaW5uaW5nKFJ1biopOwogCi0gICAg
dm9pZCBkZWxldGVSdW5zKCk7CisgICAgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmV2ZXJzZVJ1
bnModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7CiAgICAgdm9pZCByZW9yZGVyUnVuc0Zy
b21MZXZlbHMoKTsKIApAQCAtNjIsMzUgKzYxLDM2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcGxh
Y2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwgQmlkaVJ1bkxpc3Q8UnVuPiYgbmV3UnVucyk7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjbGVhcldpdGhvdXREZXN0cm95aW5nUnVucygpOwogCi0g
ICAgUnVuKiBtX2ZpcnN0UnVuOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IG1fZmlyc3RSdW47
CiAgICAgUnVuKiBtX2xhc3RSdW47CiAgICAgUnVuKiBtX2xvZ2ljYWxseUxhc3RSdW47CiAgICAg
dW5zaWduZWQgbV9ydW5Db3VudDsKIH07CiAKIHRlbXBsYXRlIDxjbGFzcyBSdW4+Ci1pbmxpbmUg
dm9pZCBCaWRpUnVuTGlzdDxSdW4+OjphZGRSdW4oUnVuKiBydW4pCitpbmxpbmUgdm9pZCBCaWRp
UnVuTGlzdDxSdW4+OjphZGRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJiBydW4pCiB7Ci0gICAg
aWYgKCFtX2ZpcnN0UnVuKQotICAgICAgICBtX2ZpcnN0UnVuID0gcnVuOwotICAgIGVsc2UKLSAg
ICAgICAgbV9sYXN0UnVuLT5tX25leHQgPSBydW47Ci0gICAgbV9sYXN0UnVuID0gcnVuOworICAg
IGlmICghbV9maXJzdFJ1bikgeworICAgICAgICBtX2ZpcnN0UnVuID0gV1RGTW92ZShydW4pOwor
ICAgICAgICBtX2xhc3RSdW4gPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1fbGFzdFJ1bi0+c2V0TmV4dChXVEZNb3ZlKHJ1bikpOworICAgICAgICBtX2xhc3RSdW4g
PSBtX2xhc3RSdW4tPm5leHQoKTsKKyAgICB9CiAgICAgbV9ydW5Db3VudCsrOwogfQogCiB0ZW1w
bGF0ZSA8Y2xhc3MgUnVuPgotaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1
bihSdW4qIHJ1bikKK2lubGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnByZXBlbmRSdW4oc3Rk
Ojp1bmlxdWVfcHRyPFJ1bj4mJiBydW4pCiB7Ci0gICAgQVNTRVJUKCFydW4tPm1fbmV4dCk7Cisg
ICAgQVNTRVJUKCFydW4tPm5leHQoKSk7CiAKICAgICBpZiAoIW1fbGFzdFJ1bikKLSAgICAgICAg
bV9sYXN0UnVuID0gcnVuOworICAgICAgICBtX2xhc3RSdW4gPSBydW4uZ2V0KCk7CiAgICAgZWxz
ZQotICAgICAgICBydW4tPm1fbmV4dCA9IG1fZmlyc3RSdW47Ci0gICAgbV9maXJzdFJ1biA9IHJ1
bjsKKyAgICAgICAgcnVuLT5zZXROZXh0KFdURk1vdmUobV9maXJzdFJ1bikpOworICAgIG1fZmly
c3RSdW4gPSBXVEZNb3ZlKHJ1bik7CiAgICAgbV9ydW5Db3VudCsrOwogfQogCkBAIC05OSwyMyAr
OTksMjUgQEAgaW5saW5lIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6bW92ZVJ1blRvRW5kKFJ1biog
cnVuKQogewogICAgIEFTU0VSVChtX2ZpcnN0UnVuKTsKICAgICBBU1NFUlQobV9sYXN0UnVuKTsK
LSAgICBBU1NFUlQocnVuLT5tX25leHQpOworICAgIEFTU0VSVChydW4tPm5leHQoKSk7CiAKLSAg
ICBSdW4qIGN1cnJlbnQgPSAwOwotICAgIFJ1biogbmV4dCA9IG1fZmlyc3RSdW47Ci0gICAgd2hp
bGUgKG5leHQgIT0gcnVuKSB7Ci0gICAgICAgIGN1cnJlbnQgPSBuZXh0OwotICAgICAgICBuZXh0
ID0gY3VycmVudC0+bmV4dCgpOworICAgIFJ1biogcHJldmlvdXMgPSBudWxscHRyOworICAgIFJ1
biogY3VycmVudCA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgd2hpbGUgKGN1cnJlbnQgIT0gcnVu
KSB7CisgICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKKyAgICAgICAgY3VycmVudCA9IHByZXZp
b3VzLT5uZXh0KCk7CiAgICAgfQogCi0gICAgaWYgKCFjdXJyZW50KQotICAgICAgICBtX2ZpcnN0
UnVuID0gcnVuLT5uZXh0KCk7Ci0gICAgZWxzZQotICAgICAgICBjdXJyZW50LT5tX25leHQgPSBy
dW4tPm1fbmV4dDsKLQotICAgIHJ1bi0+bV9uZXh0ID0gMDsKLSAgICBtX2xhc3RSdW4tPm1fbmV4
dCA9IHJ1bjsKLSAgICBtX2xhc3RSdW4gPSBydW47CisgICAgaWYgKCFwcmV2aW91cykgeworICAg
ICAgICBBU1NFUlQobV9maXJzdFJ1bi5nZXQoKSA9PSBydW4pOworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UnVuPiBvcmlnaW5hbEZpcnN0UnVuID0gV1RGTW92ZShtX2ZpcnN0UnVuKTsKKyAgICAg
ICAgbV9maXJzdFJ1biA9IG9yaWdpbmFsRmlyc3RSdW4tPnRha2VOZXh0KCk7CisgICAgICAgIG1f
bGFzdFJ1bi0+c2V0TmV4dChXVEZNb3ZlKG9yaWdpbmFsRmlyc3RSdW4pKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiB0YXJnZXQgPSBwcmV2aW91cy0+dGFrZU5l
eHQoKTsKKyAgICAgICAgcHJldmlvdXMtPnNldE5leHQoY3VycmVudC0+dGFrZU5leHQoKSk7Cisg
ICAgICAgIG1fbGFzdFJ1bi0+c2V0TmV4dChXVEZNb3ZlKHRhcmdldCkpOworICAgIH0KIH0KIAog
dGVtcGxhdGUgPGNsYXNzIFJ1bj4KQEAgLTEyMywyMSArMTI1LDIyIEBAIGlubGluZSB2b2lkIEJp
ZGlSdW5MaXN0PFJ1bj46Om1vdmVSdW5Ub0JlZ2lubmluZyhSdW4qIHJ1bikKIHsKICAgICBBU1NF
UlQobV9maXJzdFJ1bik7CiAgICAgQVNTRVJUKG1fbGFzdFJ1bik7Ci0gICAgQVNTRVJUKHJ1biAh
PSBtX2ZpcnN0UnVuKTsKKyAgICBBU1NFUlQocnVuICE9IG1fZmlyc3RSdW4uZ2V0KCkpOwogCi0g
ICAgUnVuKiBjdXJyZW50ID0gbV9maXJzdFJ1bjsKLSAgICBSdW4qIG5leHQgPSBjdXJyZW50LT5u
ZXh0KCk7Ci0gICAgd2hpbGUgKG5leHQgIT0gcnVuKSB7Ci0gICAgICAgIGN1cnJlbnQgPSBuZXh0
OwotICAgICAgICBuZXh0ID0gY3VycmVudC0+bmV4dCgpOworICAgIFJ1biogcHJldmlvdXMgPSBt
X2ZpcnN0UnVuLmdldCgpOworICAgIFJ1biogY3VycmVudCA9IHByZXZpb3VzLT5uZXh0KCk7Cisg
ICAgd2hpbGUgKGN1cnJlbnQgIT0gcnVuKSB7CisgICAgICAgIHByZXZpb3VzID0gY3VycmVudDsK
KyAgICAgICAgY3VycmVudCA9IHByZXZpb3VzLT5uZXh0KCk7CiAgICAgfQogCi0gICAgY3VycmVu
dC0+bV9uZXh0ID0gcnVuLT5tX25leHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0
ID0gcHJldmlvdXMtPnRha2VOZXh0KCk7CisgICAgcHJldmlvdXMtPnNldE5leHQocnVuLT50YWtl
TmV4dCgpKTsKICAgICBpZiAocnVuID09IG1fbGFzdFJ1bikKLSAgICAgICAgbV9sYXN0UnVuID0g
Y3VycmVudDsKKyAgICAgICAgbV9sYXN0UnVuID0gcHJldmlvdXM7CiAKLSAgICBydW4tPm1fbmV4
dCA9IG1fZmlyc3RSdW47Ci0gICAgbV9maXJzdFJ1biA9IHJ1bjsKKyAgICB0YXJnZXQtPnNldE5l
eHQoV1RGTW92ZShtX2ZpcnN0UnVuKSk7CisgICAgbV9maXJzdFJ1biA9IFdURk1vdmUodGFyZ2V0
KTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFJ1bj4KQEAgLTE0Nyw1MyArMTUwLDM5IEBAIHZvaWQg
QmlkaVJ1bkxpc3Q8UnVuPjo6cmVwbGFjZVJ1bldpdGhSdW5zKFJ1biogdG9SZXBsYWNlLCBCaWRp
UnVuTGlzdDxSdW4+JiBuZXdSCiAgICAgQVNTRVJUKG1fZmlyc3RSdW4pOwogICAgIEFTU0VSVCh0
b1JlcGxhY2UpOwogCi0gICAgaWYgKG1fZmlyc3RSdW4gPT0gdG9SZXBsYWNlKQotICAgICAgICBt
X2ZpcnN0UnVuID0gbmV3UnVucy5maXJzdFJ1bigpOwotICAgIGVsc2UgewotICAgICAgICAvLyBG
aW5kIHRoZSBydW4ganVzdCBiZWZvcmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4K
LSAgICAgICAgUnVuKiBwcmV2aW91c1J1biA9IG1fZmlyc3RSdW47Ci0gICAgICAgIHdoaWxlIChw
cmV2aW91c1J1bi0+bmV4dCgpICE9IHRvUmVwbGFjZSkKLSAgICAgICAgICAgIHByZXZpb3VzUnVu
ID0gcHJldmlvdXNSdW4tPm5leHQoKTsKLSAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKLSAg
ICAgICAgcHJldmlvdXNSdW4tPnNldE5leHQobmV3UnVucy5maXJzdFJ1bigpKTsKLSAgICB9Ci0K
LSAgICBuZXdSdW5zLmxhc3RSdW4oKS0+c2V0TmV4dCh0b1JlcGxhY2UtPm5leHQoKSk7CisgICAg
bV9ydW5Db3VudCArPSBuZXdSdW5zLnJ1bkNvdW50KCkgLSAxOyAvLyBXZSBhcmUgYWRkaW5nIHRo
ZSBuZXcgcnVucyBhbmQgcmVtb3ZpbmcgdG9SZXBsYWNlLgogCi0gICAgLy8gRml4IHVwIGFueSBv
ZiBvdGhlciBwb2ludGVycyB3aGljaCBtYXkgbm93IGJlIHN0YWxlLgorICAgIC8vIEZpeCB1cCBh
bnkgcG9pbnRlcnMgd2hpY2ggbWF5IGVuZCB1cCBzdGFsZS4KICAgICBpZiAobV9sYXN0UnVuID09
IHRvUmVwbGFjZSkKICAgICAgICAgbV9sYXN0UnVuID0gbmV3UnVucy5sYXN0UnVuKCk7CiAgICAg
aWYgKG1fbG9naWNhbGx5TGFzdFJ1biA9PSB0b1JlcGxhY2UpCiAgICAgICAgIG1fbG9naWNhbGx5
TGFzdFJ1biA9IG5ld1J1bnMubG9naWNhbGx5TGFzdFJ1bigpOwotICAgIG1fcnVuQ291bnQgKz0g
bmV3UnVucy5ydW5Db3VudCgpIC0gMTsgLy8gV2UgYWRkZWQgdGhlIG5ldyBydW5zIGFuZCByZW1v
dmVkIHRvUmVwbGFjZS4KIAotICAgIGRlbGV0ZSB0b1JlcGxhY2U7Ci0gICAgbmV3UnVucy5jbGVh
cldpdGhvdXREZXN0cm95aW5nUnVucygpOwotfQorICAgIGlmIChtX2ZpcnN0UnVuLmdldCgpID09
IHRvUmVwbGFjZSkgeworICAgICAgICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0TmV4dChtX2ZpcnN0
UnVuLT50YWtlTmV4dCgpKTsKKyAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUobmV3UnVucy5t
X2ZpcnN0UnVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGaW5kIHRoZSBydW4ganVzdCBi
ZWZvcmUgInRvUmVwbGFjZSIgaW4gdGhlIGxpc3Qgb2YgcnVucy4KKyAgICAgICAgUnVuKiBwcmV2
aW91c1J1biA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAgICAgIHdoaWxlIChwcmV2aW91c1J1bi0+
bmV4dCgpICE9IHRvUmVwbGFjZSkKKyAgICAgICAgICAgIHByZXZpb3VzUnVuID0gcHJldmlvdXNS
dW4tPm5leHQoKTsKKyAgICAgICAgQVNTRVJUKHByZXZpb3VzUnVuKTsKIAotdGVtcGxhdGUgPGNs
YXNzIFJ1bj4KLXZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6Y2xlYXJXaXRob3V0RGVzdHJveWluZ1J1
bnMoKQotewotICAgIG1fZmlyc3RSdW4gPSAwOwotICAgIG1fbGFzdFJ1biA9IDA7Ci0gICAgbV9s
b2dpY2FsbHlMYXN0UnVuID0gMDsKLSAgICBtX3J1bkNvdW50ID0gMDsKKyAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXNSdW4tPnRha2VOZXh0KCk7CisgICAgICAg
IHByZXZpb3VzUnVuLT5zZXROZXh0KFdURk1vdmUobmV3UnVucy5tX2ZpcnN0UnVuKSk7CisgICAg
ICAgIG5ld1J1bnMubV9sYXN0UnVuLT5zZXROZXh0KHRhcmdldC0+dGFrZU5leHQoKSk7CisgICAg
fQorCisgICAgbmV3UnVucy5jbGVhcigpOwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotdm9p
ZCBCaWRpUnVuTGlzdDxSdW4+OjpkZWxldGVSdW5zKCkKK3ZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6
Y2xlYXIoKQogewotICAgIGlmICghbV9maXJzdFJ1bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UnVuKiBjdXJyID0gbV9maXJzdFJ1bjsKLSAgICB3aGlsZSAoY3VycikgewotICAgICAgICBSdW4q
IHMgPSBjdXJyLT5uZXh0KCk7Ci0gICAgICAgIGRlbGV0ZSBjdXJyOwotICAgICAgICBjdXJyID0g
czsKLSAgICB9Ci0KLSAgICBjbGVhcldpdGhvdXREZXN0cm95aW5nUnVucygpOworICAgIG1fZmly
c3RSdW4gPSBudWxscHRyOworICAgIG1fbGFzdFJ1biA9IG51bGxwdHI7CisgICAgbV9sb2dpY2Fs
bHlMYXN0UnVuID0gbnVsbHB0cjsKKyAgICBtX3J1bkNvdW50ID0gMDsKIH0KIAogdGVtcGxhdGUg
PGNsYXNzIFJ1bj4KQEAgLTIwNiw0NCArMTk1LDM1IEBAIHZvaWQgQmlkaVJ1bkxpc3Q8UnVuPjo6
cmV2ZXJzZVJ1bnModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKIAogICAgIC8vIEdldCB0
aGUgaXRlbSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBydW5zIHRvIHJldmVyc2UgYW5kIHB1dCBp
dCBpbgogICAgIC8vIHxiZWZvcmVTdGFydHwuIHxjdXJyfCBzaG91bGQgcG9pbnQgdG8gdGhlIGZp
cnN0IHJ1biB0byByZXZlcnNlLgotICAgIFJ1biogY3VyciA9IG1fZmlyc3RSdW47Ci0gICAgUnVu
KiBiZWZvcmVTdGFydCA9IDA7CisgICAgUnVuKiBjdXJyID0gbV9maXJzdFJ1bi5nZXQoKTsKKyAg
ICBSdW4qIGJlZm9yZVN0YXJ0ID0gbnVsbHB0cjsKICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICB3
aGlsZSAoaSA8IHN0YXJ0KSB7Ci0gICAgICAgIGkrKzsKKyAgICBmb3IgKDsgaSA8IHN0YXJ0OyAr
K2kpIHsKICAgICAgICAgYmVmb3JlU3RhcnQgPSBjdXJyOwogICAgICAgICBjdXJyID0gY3Vyci0+
bmV4dCgpOwogICAgIH0KLQogICAgIFJ1biogc3RhcnRSdW4gPSBjdXJyOwotICAgIHdoaWxlIChp
IDwgZW5kKSB7Ci0gICAgICAgIGkrKzsKKworICAgIGZvciAoOyBpIDwgZW5kOyArK2kpCiAgICAg
ICAgIGN1cnIgPSBjdXJyLT5uZXh0KCk7Ci0gICAgfQotICAgIFJ1biogZW5kUnVuID0gY3VycjsK
LSAgICBSdW4qIGFmdGVyRW5kID0gY3Vyci0+bmV4dCgpOwotCi0gICAgaSA9IHN0YXJ0OwotICAg
IGN1cnIgPSBzdGFydFJ1bjsKLSAgICBSdW4qIG5ld05leHQgPSBhZnRlckVuZDsKLSAgICB3aGls
ZSAoaSA8PSBlbmQpIHsKLSAgICAgICAgLy8gRG8gdGhlIHJldmVyc2FsLgotICAgICAgICBSdW4q
IG5leHQgPSBjdXJyLT5uZXh0KCk7Ci0gICAgICAgIGN1cnItPm1fbmV4dCA9IG5ld05leHQ7Ci0g
ICAgICAgIG5ld05leHQgPSBjdXJyOwotICAgICAgICBjdXJyID0gbmV4dDsKLSAgICAgICAgaSsr
OworCisgICAgaWYgKCFjdXJyLT5uZXh0KCkpCisgICAgICAgIG1fbGFzdFJ1biA9IHN0YXJ0UnVu
OworCisgICAgLy8gU3RhbmRhcmQgInNsaWRpbmcgd2luZG93IiBvZiAzIHBvaW50ZXJzCisgICAg
c3RkOjp1bmlxdWVfcHRyPFJ1bj4gcHJldmlvdXMgPSBjdXJyLT50YWtlTmV4dCgpOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxSdW4+IGN1cnJlbnQgPSBiZWZvcmVTdGFydCA/IGJlZm9yZVN0YXJ0LT50
YWtlTmV4dCgpIDogV1RGTW92ZShtX2ZpcnN0UnVuKTsKKyAgICB3aGlsZSAoY3VycmVudCkgewor
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBuZXh0ID0gY3VycmVudC0+dGFrZU5leHQoKTsK
KyAgICAgICAgY3VycmVudC0+c2V0TmV4dChXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgIHBy
ZXZpb3VzID0gV1RGTW92ZShjdXJyZW50KTsKKyAgICAgICAgY3VycmVudCA9IFdURk1vdmUobmV4
dCk7CiAgICAgfQogCi0gICAgLy8gTm93IGhvb2sgdXAgYmVmb3JlU3RhcnQgYW5kIGFmdGVyRW5k
IHRvIHRoZSBzdGFydFJ1biBhbmQgZW5kUnVuLgogICAgIGlmIChiZWZvcmVTdGFydCkKLSAgICAg
ICAgYmVmb3JlU3RhcnQtPm1fbmV4dCA9IGVuZFJ1bjsKKyAgICAgICAgYmVmb3JlU3RhcnQtPnNl
dE5leHQoV1RGTW92ZShwcmV2aW91cykpOwogICAgIGVsc2UKLSAgICAgICAgbV9maXJzdFJ1biA9
IGVuZFJ1bjsKLQotICAgIHN0YXJ0UnVuLT5tX25leHQgPSBhZnRlckVuZDsKLSAgICBpZiAoIWFm
dGVyRW5kKQotICAgICAgICBtX2xhc3RSdW4gPSBzdGFydFJ1bjsKKyAgICAgICAgbV9maXJzdFJ1
biA9IFdURk1vdmUocHJldmlvdXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5jcHAKaW5kZXggZmQzZTAyMjFhM2ZmNDA3NTJhZDljNjVh
NGU3ZDc1ODM3NzQ2MmVjNS4uZjMzMDY3MWNjZTVhZmYyNDM1YmJjZTdhMTBiNjIyZTRjM2E2Y2Iy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmNwcApAQCAtNTMsNCArNTMsMTIgQEAg
QmlkaVJ1bjo6fkJpZGlSdW4oKQogI2VuZGlmCiB9CiAKK3N0ZDo6dW5pcXVlX3B0cjxCaWRpUnVu
PiYmIEJpZGlSdW46OnRha2VOZXh0KCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaUNoYXJh
Y3RlclJ1bj4gbmV4dCA9IEJpZGlDaGFyYWN0ZXJSdW46OnRha2VOZXh0KCk7CisgICAgQmlkaUNo
YXJhY3RlclJ1biogcmF3ID0gbmV4dC5yZWxlYXNlKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJp
ZGlSdW4+IHJlc3VsdCA9IHN0ZDo6dW5pcXVlX3B0cjxCaWRpUnVuPihzdGF0aWNfY2FzdDxCaWRp
UnVuKj4ocmF3KSk7CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKK30KKwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9CaWRpUnVuLmgKaW5kZXggYTY2MzE0M2U2M2ZkYjAyY2YyN2RmMjQ5NzdmOTdm
MGZiMzIzNjhiNy4uY2JmYjFlNzg1YzcwOThiYjhhNGE1YzlhY2EzNDU4MGNmNWQzNjBmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5oCkBAIC0zNyw3ICszNyw4IEBAIHN0cnVjdCBCaWRp
UnVuIDogQmlkaUNoYXJhY3RlclJ1biB7CiAgICAgQmlkaVJ1bihpbnQgc3RhcnQsIGludCBzdG9w
LCBSZW5kZXJPYmplY3QmLCBCaWRpQ29udGV4dCosIFVDaGFyRGlyZWN0aW9uKTsKICAgICB+Qmlk
aVJ1bigpOwogCi0gICAgQmlkaVJ1biogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpZGlS
dW4qPihtX25leHQpOyB9CisgICAgQmlkaVJ1biogbmV4dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PEJpZGlSdW4qPihCaWRpQ2hhcmFjdGVyUnVuOjpuZXh0KCkpOyB9CisgICAgc3RkOjp1bmlxdWVf
cHRyPEJpZGlSdW4+JiYgdGFrZU5leHQoKTsKICAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKCkg
eyByZXR1cm4gbV9yZW5kZXJlcjsgfQogICAgIElubGluZUJveCogYm94KCkgeyByZXR1cm4gbV9i
b3g7IH0KICAgICB2b2lkIHNldEJveChJbmxpbmVCb3gmIGJveCkgeyBtX2JveCA9ICZib3g7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKaW5kZXggMGM4ZmIzODI3
OTVlODMzNzc0NDU4OWM3OThmYzUxOWU3ZWFlODJlOC4uZWE3ZWRiNGJmNjQ5NWJhZDI0NWQ4Zjhi
YThhYjc0ZmUxMDkyNjcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJh
dG9yLmgKQEAgLTQ5MiwxMiArNDkyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbnVtYmVy
T2ZJc29sYXRlQW5jZXN0b3JzKGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdGVyKQogLy8gb2YgQmlk
aVJlc29sdmVyIHdoaWNoIGtub3dzIG5vdGhpbmcgYWJvdXQgUmVuZGVyT2JqZWN0cy4KIHN0YXRp
YyBpbmxpbmUgdm9pZCBhZGRQbGFjZWhvbGRlclJ1bkZvcklzb2xhdGVkSW5saW5lKElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFJlbmRlck9iamVjdCYgb2JqLCB1bnNpZ25lZCBwb3MsIFJl
bmRlckVsZW1lbnQmIHJvb3QpCiB7Ci0gICAgQmlkaVJ1biogaXNvbGF0ZWRSdW4gPSBuZXcgQmlk
aVJ1bihwb3MsIDAsIG9iaiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIoKSk7Ci0g
ICAgcmVzb2x2ZXIucnVucygpLmFkZFJ1bihpc29sYXRlZFJ1bik7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEJpZGlSdW4+IGlzb2xhdGVkUnVuID0gc3RkOjptYWtlX3VuaXF1ZTxCaWRpUnVuPihwb3Ms
IDAsIG9iaiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIoKSk7CiAgICAgLy8gRklY
TUU6IGlzb2xhdGVkUnVucygpIGNvdWxkIGJlIGEgaGFzaCBvZiBvYmplY3QtPnJ1biBhbmQgdGhl
biB3ZSBjb3VsZCBjaGVhcGx5CiAgICAgLy8gQVNTRVJUIGhlcmUgdGhhdCB3ZSBkaWRuJ3QgY3Jl
YXRlIG11bHRpcGxlIG9iamVjdHMgZm9yIHRoZSBzYW1lIGlubGluZS4KICAgICByZXNvbHZlci5z
ZXRNaWRwb2ludEZvcklzb2xhdGVkUnVuKCppc29sYXRlZFJ1biwgcmVzb2x2ZXIubWlkcG9pbnRT
dGF0ZSgpLmN1cnJlbnRNaWRwb2ludCgpKTsKICAgICByZXNvbHZlci5pc29sYXRlZFJ1bnMoKS5h
cHBlbmQoQmlkaUlzb2xhdGVkUnVuKG9iaiwgcG9zLCByb290LCAqaXNvbGF0ZWRSdW4pKTsKKyAg
ICByZXNvbHZlci5ydW5zKCkuYWRkUnVuKFdURk1vdmUoaXNvbGF0ZWRSdW4pKTsKIH0KIAogY2xh
c3MgSXNvbGF0ZVRyYWNrZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCAwZTE4NTI0MWQ1MzFlYzVkZjRlMzY4MmE2ZmYx
NTk2MjEyNjk0MjcxLi4zODlhMjI4MDdjN2RlNTBhZGY5N2JmNjRlNjZjM2Y3NDJjYzU5NjE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0
LmNwcApAQCAtNzEsOSArNzEsOSBAQCBzdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0
eShUZXh0RGlyZWN0aW9uJiBkaXIsIElubGluZUl0ZXJhdG9yIGl0ZXIpCiAgICAgfQogfQogCi1p
bmxpbmUgQmlkaVJ1biogY3JlYXRlUnVuKGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0
JiBvYmosIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCitpbmxpbmUgc3RkOjp1bmlxdWVf
cHRyPEJpZGlSdW4+IGNyZWF0ZVJ1bihpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCYg
b2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQogewotICAgIHJldHVybiBuZXcgQmlk
aVJ1bihzdGFydCwgZW5kLCBvYmosIHJlc29sdmVyLmNvbnRleHQoKSwgcmVzb2x2ZXIuZGlyKCkp
OworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpZGlSdW4+KHN0YXJ0LCBlbmQsIG9iaiwg
cmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIoKSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxv
Y2tGbG93OjphcHBlbmRSdW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+KiBydW5zLCBp
bnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCYgb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXIm
IHJlc29sdmVyKQpAQCAtMTAzNiwxMyArMTAzNiwxMyBAQCBpbmxpbmUgQmlkaVJ1biogUmVuZGVy
QmxvY2tGbG93OjpoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlk
aQogICAgICAgICB3aGlsZSAoQmlkaUNvbnRleHQqIHBhcmVudCA9IGJhc2VDb250ZXh0LT5wYXJl
bnQoKSkKICAgICAgICAgICAgIGJhc2VDb250ZXh0ID0gcGFyZW50OwogCi0gICAgICAgIEJpZGlS
dW4qIG5ld1RyYWlsaW5nUnVuID0gbmV3IEJpZGlSdW4oZmlyc3RTcGFjZSwgdHJhaWxpbmdTcGFj
ZVJ1bi0+bV9zdG9wLCB0cmFpbGluZ1NwYWNlUnVuLT5yZW5kZXJlcigpLCBiYXNlQ29udGV4dCwg
VV9PVEhFUl9ORVVUUkFMKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IG5ld1Ry
YWlsaW5nUnVuID0gc3RkOjptYWtlX3VuaXF1ZTxCaWRpUnVuPihmaXJzdFNwYWNlLCB0cmFpbGlu
Z1NwYWNlUnVuLT5tX3N0b3AsIHRyYWlsaW5nU3BhY2VSdW4tPnJlbmRlcmVyKCksIGJhc2VDb250
ZXh0LCBVX09USEVSX05FVVRSQUwpOwogICAgICAgICB0cmFpbGluZ1NwYWNlUnVuLT5tX3N0b3Ag
PSBmaXJzdFNwYWNlOworICAgICAgICB0cmFpbGluZ1NwYWNlUnVuID0gbmV3VHJhaWxpbmdSdW4u
Z2V0KCk7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKQotICAgICAgICAgICAgYmlkaVJ1
bnMuYWRkUnVuKG5ld1RyYWlsaW5nUnVuKTsKKyAgICAgICAgICAgIGJpZGlSdW5zLmFkZFJ1bihX
VEZNb3ZlKG5ld1RyYWlsaW5nUnVuKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJpZGlS
dW5zLnByZXBlbmRSdW4obmV3VHJhaWxpbmdSdW4pOwotICAgICAgICB0cmFpbGluZ1NwYWNlUnVu
ID0gbmV3VHJhaWxpbmdSdW47CisgICAgICAgICAgICBiaWRpUnVucy5wcmVwZW5kUnVuKFdURk1v
dmUobmV3VHJhaWxpbmdSdW4pKTsKICAgICAgICAgcmV0dXJuIHRyYWlsaW5nU3BhY2VSdW47CiAg
ICAgfQogICAgIGlmICghc2hvdWxkUmVvcmRlcikKQEAgLTEzMjEsNyArMTMyMSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBJCiAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5k
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgY3JlYXRpbmcgYW55
IHJ1bnMgaW4gbmV4dExpbmVCcmVhayB0byBiZWdpbiB3aXRoIQogICAgICAgICAgICAgLy8gT25j
ZSBCaWRpUnVuTGlzdCBpcyBzZXBhcmF0ZWQgZnJvbSBCaWRpUmVzb2x2ZXIgdGhpcyB3aWxsIG5v
dCBiZSBuZWVkZWQuCi0gICAgICAgICAgICByZXNvbHZlci5ydW5zKCkuZGVsZXRlUnVucygpOwor
ICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmNsZWFyKCk7CiAgICAgICAgICAgICByZXNvbHZl
ci5tYXJrQ3VycmVudFJ1bkVtcHR5KCk7IC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSBy
ZXBsYWNlZCBieSBhbiBBU1NFUlQgKG9yIGp1c3QgcmVtb3ZlZCkuCiAgICAgICAgICAgICBsYXlv
dXRTdGF0ZS5zZXRDaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSh0cnVlKTsKICAgICAgICAgICAg
IHJlc29sdmVyLnNldFBvc2l0aW9uKElubGluZUl0ZXJhdG9yKHJlc29sdmVyLnBvc2l0aW9uKCku
cm9vdCgpLCAwLCAwKSwgMCk7CkBAIC0xMzYyLDcgKzEzNjIsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6bGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgSQogICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNh
bEhlaWdodCgpOwogICAgICAgICAgICAgUm9vdElubGluZUJveCogbGluZUJveCA9IGNyZWF0ZUxp
bmVCb3hlc0Zyb21CaWRpUnVucyhyZXNvbHZlci5zdGF0dXMoKS5jb250ZXh0LT5sZXZlbCgpLCBi
aWRpUnVucywgZW5kLCBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLCB2ZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUsIHRyYWlsaW5nU3BhY2VSdW4sIHdvcmRNZWFzdXJlbWVudHMpOwogCi0gICAgICAgICAgICBi
aWRpUnVucy5kZWxldGVSdW5zKCk7CisgICAgICAgICAgICBiaWRpUnVucy5jbGVhcigpOwogICAg
ICAgICAgICAgcmVzb2x2ZXIubWFya0N1cnJlbnRSdW5FbXB0eSgpOyAvLyBGSVhNRTogVGhpcyBj
YW4gcHJvYmFibHkgYmUgcmVwbGFjZWQgYnkgYW4gQVNTRVJUIChvciBqdXN0IHJlbW92ZWQpLgog
CiAgICAgICAgICAgICBpZiAobGluZUJveCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvTGluZUJyZWFrZXIuY3BwCmluZGV4IDZlYWZhMjkwNjkzYWZiYjNmMTRkN2E4ZjA2YTdk
Y2ZkNTc3MzE2YmYuLmY2ZWI5ZTMwNTIzZmVhOTZhZTdjNWRlYTNkMjMzMTk2YTU4NmJjZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAKQEAgLTYy
LDcgKzYyLDcgQEAgdm9pZCBMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGlu
ZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIExpbmVJbmZvJgogICAgICAgICBpZiAob2JqZWN0Lmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICBzZXRTdGF0aWNQb3NpdGlvbnMo
bV9ibG9jaywgZG93bmNhc3Q8UmVuZGVyQm94PihvYmplY3QpLCB3aWR0aC5zaG91bGRJbmRlbnRU
ZXh0KCkpOwogICAgICAgICAgICAgaWYgKG9iamVjdC5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5
SW5saW5lVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmFkZFJ1bihu
ZXcgQmlkaVJ1bigwLCAxLCBvYmplY3QsIHJlc29sdmVyLmNvbnRleHQoKSwgcmVzb2x2ZXIuZGly
KCkpKTsKKyAgICAgICAgICAgICAgICByZXNvbHZlci5ydW5zKCkuYWRkUnVuKHN0ZDo6bWFrZV91
bmlxdWU8QmlkaVJ1bj4oMCwgMSwgb2JqZWN0LCByZXNvbHZlci5jb250ZXh0KCksIHJlc29sdmVy
LmRpcigpKSk7CiAgICAgICAgICAgICAgICAgbGluZUluZm8uaW5jcmVtZW50UnVuc0Zyb21MZWFk
aW5nV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG9iamVj
dC5pc0Zsb2F0aW5nKCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275453</attachid>
            <date>2016-04-01 18:19:47 -0700</date>
            <delta_ts>2016-04-01 20:39:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156123-20160401181951.patch</filename>
            <type>text/plain</type>
            <size>21091</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4OTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZjMmQyNjcwOWYzZWYw
NzZiMTlmOGE4NWQzNTcyMGJhOTEwMDkwMS4uYmZhMTRiZjhhNWFiMjBlYTgzYzU5ODA3M2Y1OTll
OTY0YzU0NDMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE2LTA0LTAxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWlncmF0ZSBC
aWRpUnVuTGlzdCBhbmQgQmlkaVJ1biB0byBhdXRvbWF0aWMgbWVtb3J5IG1hbmFnZW1lbnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjEyMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJpZGlSdW5MaXN0
LCBCaWRpUnVuLCBhbmQgQmlkaUNoYXJhY3RlclJ1biBoYXZlIGFsbCBiZWVuIGRvaW5nIG1hbnVh
bAorICAgICAgICAibmV3InMgYW5kICJkZWxldGUicyBmb3IgeWVhcnMuIFRoaXMgcGF0Y2ggbWln
cmF0ZXMgdGhvc2UgY2xhc3NlcyB0bworICAgICAgICB1c2luZyBzdGQ6OnVuaXF1ZV9wdHIuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdl
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaUNo
YXJhY3RlclJ1bjo6QmlkaUNoYXJhY3RlclJ1bik6CisgICAgICAgIChXZWJDb3JlOjpCaWRpQ2hh
cmFjdGVyUnVuOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlDaGFyYWN0ZXJSdW46OnRh
a2VOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlDaGFyYWN0ZXJSdW46OnNldE5leHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U3ViY2xhc3M+OjphcHBlbmRSdW5JbnRlcm5hbCk6CisgICAgICAg
ICogcGxhdGZvcm0vdGV4dC9CaWRpUnVuTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1
bkxpc3Q6OkJpZGlSdW5MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpZGlSdW5MaXN0OjpmaXJz
dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuTGlzdDxSdW4+OjphZGRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6QmlkaVJ1bkxpc3Q8UnVuPjo6cHJlcGVuZFJ1bik6CisgICAgICAgIChX
ZWJDb3JlOjpCaWRpUnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9FbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlkaVJ1bkxpc3Q8UnVuPjo6bW92ZVJ1blRvQmVnaW5uaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpZGlSdW5MaXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyk6CisgICAgICAgIChXZWJD
b3JlOjpCaWRpUnVuTGlzdDxSdW4+OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVu
TGlzdDxSdW4+OjpyZXZlcnNlUnVucyk6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuTGlzdDxS
dW4+OjpjbGVhcldpdGhvdXREZXN0cm95aW5nUnVucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpCaWRpUnVuTGlzdDxSdW4+OjpkZWxldGVSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvQmlkaVJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaWRpUnVuOjp0YWtlTmV4
dCk6CisgICAgICAgICogcmVuZGVyaW5nL0JpZGlSdW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OkJp
ZGlSdW46Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6QmlkaVJ1bjo6dGFrZU5leHQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6YWRk
UGxhY2Vob2xkZXJSdW5Gb3JJc29sYXRlZElubGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpoYW5kbGVUcmFpbGluZ1NwYWNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdHNJ
blJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKToKKwogMjAx
Ni0wMy0zMSAgQW50b25pbyBHb21lcyAgPHRvbmlraXRvb0B3ZWJraXQub3JnPgogCiAgICAgICAg
IGV2ZW50TWF5U3RhcnREcmFnKCkgZG9lcyBub3QgY2hlY2sgZm9yIHNoaWZ0S2V5IG9yIGlzT3Zl
ckxpbmsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IGZiZWE4ZDc1M2RmMzQ1ZDQxYTdiNmJkNmRiYmMyNDljODA4ZWIx
MjIuLmI5MDg1YzMzNzk4MzFlOWY5ZDgzNTc3ZDZlMDYxMWJhMzExOWQ4YzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICAgICAgYmlkaVJ1
biA9IGJpZGlSdW4tPm5leHQoKTsKICAgICB9CiAKLSAgICBiaWRpUnVucy5kZWxldGVSdW5zKCk7
CisgICAgYmlkaVJ1bnMuY2xlYXIoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaAppbmRleCAyN2MwM2ExZmJmNGVmOTI1Zjk3
MWQ0ZmI5NDBjYjQwYTZiYjE1ZDM3Li4wYTFmNDYxYzYzNGY0NTJjMWRlZTc5MGQ5ZTgxYzE4N2Ew
Y2UzNWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNv
bHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJlc29sdmVyLmgK
QEAgLTE1NSwxMCArMTU1LDkgQEAgc3RydWN0IEJpZGlDaGFyYWN0ZXJSdW4gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEJpZGlDaGFyYWN0ZXJSdW4oaW50IHN0
YXJ0LCBpbnQgc3RvcCwgQmlkaUNvbnRleHQqIGNvbnRleHQsIFVDaGFyRGlyZWN0aW9uIGRpcmVj
dGlvbikKLSAgICAgICAgOiBtX292ZXJyaWRlKGNvbnRleHQtPm92ZXJyaWRlKCkpCi0gICAgICAg
ICwgbV9uZXh0KDApCi0gICAgICAgICwgbV9zdGFydChzdGFydCkKKyAgICAgICAgOiBtX3N0YXJ0
KHN0YXJ0KQogICAgICAgICAsIG1fc3RvcChzdG9wKQorICAgICAgICAsIG1fb3ZlcnJpZGUoY29u
dGV4dC0+b3ZlcnJpZGUoKSkKICAgICB7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVV9PVEhF
Ul9ORVVUUkFMKQogICAgICAgICAgICAgZGlyZWN0aW9uID0gY29udGV4dC0+ZGlyKCk7CkBAIC0x
ODMsMTYgKzE4MiwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCByZXZlcnNlZChib29sIHZpc3VhbGx5
T3JkZXJlZCkgeyByZXR1cm4gbV9sZXZlbCAlIDIgJiYgIXZpc3VhbGx5T3JkZXJlZDsgfQogICAg
IGJvb2wgZGlyT3ZlcnJpZGUoYm9vbCB2aXN1YWxseU9yZGVyZWQpIHsgcmV0dXJuIG1fb3ZlcnJp
ZGUgfHwgdmlzdWFsbHlPcmRlcmVkOyB9CiAKLSAgICBCaWRpQ2hhcmFjdGVyUnVuKiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0OyB9Ci0gICAgdm9pZCBzZXROZXh0KEJpZGlDaGFyYWN0ZXJS
dW4qIG5leHQpIHsgbV9uZXh0ID0gbmV4dDsgfQorICAgIEJpZGlDaGFyYWN0ZXJSdW4qIG5leHQo
KSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qmlk
aUNoYXJhY3RlclJ1bj4gdGFrZU5leHQoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmV4dCk7IH0KKyAg
ICB2b2lkIHNldE5leHQoc3RkOjp1bmlxdWVfcHRyPEJpZGlDaGFyYWN0ZXJSdW4+JiYgbmV4dCkg
eyBtX25leHQgPSBXVEZNb3ZlKG5leHQpOyB9CiAKLSAgICAvLyBEbyBub3QgYWRkIGFueXRoaW5n
IGFwYXJ0IGZyb20gYml0ZmllbGRzIHVudGlsIGFmdGVyIG1fbmV4dC4gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAxNzMKLSAgICBib29sIG1fb3ZlcnJpZGUg
OiAxOwotICAgIGJvb2wgbV9oYXNIeXBoZW4gOiAxOyAvLyBVc2VkIGJ5IEJpZGlSdW4gc3ViY2xh
c3Mgd2hpY2ggaXMgYSBsYXllcmluZyB2aW9sYXRpb24gYnV0IGVuYWJsZXMgdXMgdG8gc2F2ZSA4
IGJ5dGVzIHBlciBvYmplY3Qgb24gNjQtYml0LgotICAgIHVuc2lnbmVkIGNoYXIgbV9sZXZlbDsK
LSAgICBCaWRpQ2hhcmFjdGVyUnVuKiBtX25leHQ7Citwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxCaWRpQ2hhcmFjdGVyUnVuPiBtX25leHQ7CisKK3B1YmxpYzoKICAgICBpbnQgbV9zdGFy
dDsKICAgICBpbnQgbV9zdG9wOworICAgIHVuc2lnbmVkIGNoYXIgbV9sZXZlbDsKKyAgICBib29s
IG1fb3ZlcnJpZGUgOiAxOworICAgIGJvb2wgbV9oYXNIeXBoZW4gOiAxOyAvLyBVc2VkIGJ5IEJp
ZGlSdW4gc3ViY2xhc3Mgd2hpY2ggaXMgYSBsYXllcmluZyB2aW9sYXRpb24gYnV0IGVuYWJsZXMg
dXMgdG8gc2F2ZSA4IGJ5dGVzIHBlciBvYmplY3Qgb24gNjQtYml0LgogfTsKIAogZW51bSBWaXN1
YWxEaXJlY3Rpb25PdmVycmlkZSB7CkBAIC0zNDEsNyArMzQzLDcgQEAgdm9pZCBCaWRpUmVzb2x2
ZXJCYXNlPEl0ZXJhdG9yLCBSdW4sIFN1YmNsYXNzPjo6YXBwZW5kUnVuSW50ZXJuYWwoKQogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGVuZE9mZnNldCA+PSBzdGFydE9mZnNldCkKLSAgICAgICAg
ICAgIG1fcnVucy5hZGRSdW4obmV3IFJ1bihzdGFydE9mZnNldCwgZW5kT2Zmc2V0ICsgMSwgY29u
dGV4dCgpLCBtX2RpcmVjdGlvbikpOworICAgICAgICAgICAgbV9ydW5zLmFkZFJ1bihzdGQ6Om1h
a2VfdW5pcXVlPFJ1bj4oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCArIDEsIGNvbnRleHQoKSwgbV9k
aXJlY3Rpb24pKTsKIAogICAgICAgICBtX2Vvci5pbmNyZW1lbnQoKTsKICAgICAgICAgbV9zb3Ig
PSBtX2VvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1
bkxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaVJ1bkxpc3QuaAppbmRl
eCBmZGJjYzU2ODE3M2RiN2RmOGM4ZjVlY2ZjYWIzMjNlOTY5M2YzN2EzLi5jNDU3OGQwYWU1NzI0
ZjczOTU1OGQwZWMwZWE2ODk5Nzg5ZWI0NGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0JpZGlSdW5MaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9CaWRpUnVuTGlzdC5oCkBAIC0zMiw5ICszMiw4IEBAIGNsYXNzIEJpZGlSdW5MaXN0IHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCaWRpUnVuTGlzdCk7CiBwdWJsaWM6CiAgICAgQmlk
aVJ1bkxpc3QoKQotICAgICAgICA6IG1fZmlyc3RSdW4oMCkKLSAgICAgICAgLCBtX2xhc3RSdW4o
MCkKLSAgICAgICAgLCBtX2xvZ2ljYWxseUxhc3RSdW4oMCkKKyAgICAgICAgOiBtX2xhc3RSdW4o
bnVsbHB0cikKKyAgICAgICAgLCBtX2xvZ2ljYWxseUxhc3RSdW4obnVsbHB0cikKICAgICAgICAg
LCBtX3J1bkNvdW50KDApCiAgICAgewogICAgIH0KQEAgLTQyLDE4ICs0MSwxOCBAQCBwdWJsaWM6
CiAgICAgLy8gRklYTUU6IE9uY2UgQmlkaVJlc29sdmVyIG5vIGxvbmdlciBvd25zIHRoZSBCaWRp
UnVuTGlzdCwKICAgICAvLyB0aGVuIH5CaWRpUnVuTGlzdCBzaG91bGQgY2FsbCBkZWxldGVSdW5z
KCkgYXV0b21hdGljYWxseS4KIAotICAgIFJ1biogZmlyc3RSdW4oKSBjb25zdCB7IHJldHVybiBt
X2ZpcnN0UnVuOyB9CisgICAgUnVuKiBmaXJzdFJ1bigpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RS
dW4uZ2V0KCk7IH0KICAgICBSdW4qIGxhc3RSdW4oKSBjb25zdCB7IHJldHVybiBtX2xhc3RSdW47
IH0KICAgICBSdW4qIGxvZ2ljYWxseUxhc3RSdW4oKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxs
eUxhc3RSdW47IH0KICAgICB1bnNpZ25lZCBydW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVu
Q291bnQ7IH0KIAotICAgIHZvaWQgYWRkUnVuKFJ1biopOwotICAgIHZvaWQgcHJlcGVuZFJ1bihS
dW4qKTsKKyAgICB2b2lkIGFkZFJ1bihzdGQ6OnVuaXF1ZV9wdHI8UnVuPiYmKTsKKyAgICB2b2lk
IHByZXBlbmRSdW4oc3RkOjp1bmlxdWVfcHRyPFJ1bj4mJik7CiAKICAgICB2b2lkIG1vdmVSdW5U
b0VuZChSdW4qKTsKICAgICB2b2lkIG1vdmVSdW5Ub0JlZ2lubmluZyhSdW4qKTsKIAotICAgIHZv
aWQgZGVsZXRlUnVucygpOworICAgIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHJldmVyc2VSdW5z
KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOwogICAgIHZvaWQgcmVvcmRlclJ1bnNGcm9t
TGV2ZWxzKCk7CiAKQEAgLTYyLDM1ICs2MSwzNiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBsYWNl
UnVuV2l0aFJ1bnMoUnVuKiB0b1JlcGxhY2UsIEJpZGlSdW5MaXN0PFJ1bj4mIG5ld1J1bnMpOwog
CiBwcml2YXRlOgotICAgIHZvaWQgY2xlYXJXaXRob3V0RGVzdHJveWluZ1J1bnMoKTsKIAotICAg
IFJ1biogbV9maXJzdFJ1bjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVuPiBtX2ZpcnN0UnVuOwog
ICAgIFJ1biogbV9sYXN0UnVuOwogICAgIFJ1biogbV9sb2dpY2FsbHlMYXN0UnVuOwogICAgIHVu
c2lnbmVkIG1fcnVuQ291bnQ7CiB9OwogCiB0ZW1wbGF0ZSA8Y2xhc3MgUnVuPgotaW5saW5lIHZv
aWQgQmlkaVJ1bkxpc3Q8UnVuPjo6YWRkUnVuKFJ1biogcnVuKQoraW5saW5lIHZvaWQgQmlkaVJ1
bkxpc3Q8UnVuPjo6YWRkUnVuKHN0ZDo6dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQogewotICAgIGlm
ICghbV9maXJzdFJ1bikKLSAgICAgICAgbV9maXJzdFJ1biA9IHJ1bjsKLSAgICBlbHNlCi0gICAg
ICAgIG1fbGFzdFJ1bi0+bV9uZXh0ID0gcnVuOwotICAgIG1fbGFzdFJ1biA9IHJ1bjsKKyAgICBp
ZiAoIW1fZmlyc3RSdW4pIHsKKyAgICAgICAgbV9maXJzdFJ1biA9IFdURk1vdmUocnVuKTsKKyAg
ICAgICAgbV9sYXN0UnVuID0gbV9maXJzdFJ1bi5nZXQoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZShydW4pKTsKKyAgICAgICAgbV9sYXN0UnVuID0g
bV9sYXN0UnVuLT5uZXh0KCk7CisgICAgfQogICAgIG1fcnVuQ291bnQrKzsKIH0KIAogdGVtcGxh
dGUgPGNsYXNzIFJ1bj4KLWlubGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnByZXBlbmRSdW4o
UnVuKiBydW4pCitpbmxpbmUgdm9pZCBCaWRpUnVuTGlzdDxSdW4+OjpwcmVwZW5kUnVuKHN0ZDo6
dW5pcXVlX3B0cjxSdW4+JiYgcnVuKQogewotICAgIEFTU0VSVCghcnVuLT5tX25leHQpOworICAg
IEFTU0VSVCghcnVuLT5uZXh0KCkpOwogCiAgICAgaWYgKCFtX2xhc3RSdW4pCi0gICAgICAgIG1f
bGFzdFJ1biA9IHJ1bjsKKyAgICAgICAgbV9sYXN0UnVuID0gcnVuLmdldCgpOwogICAgIGVsc2UK
LSAgICAgICAgcnVuLT5tX25leHQgPSBtX2ZpcnN0UnVuOwotICAgIG1fZmlyc3RSdW4gPSBydW47
CisgICAgICAgIHJ1bi0+c2V0TmV4dChXVEZNb3ZlKG1fZmlyc3RSdW4pKTsKKyAgICBtX2ZpcnN0
UnVuID0gV1RGTW92ZShydW4pOwogICAgIG1fcnVuQ291bnQrKzsKIH0KIApAQCAtOTksMjMgKzk5
LDI1IEBAIGlubGluZSB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46Om1vdmVSdW5Ub0VuZChSdW4qIHJ1
bikKIHsKICAgICBBU1NFUlQobV9maXJzdFJ1bik7CiAgICAgQVNTRVJUKG1fbGFzdFJ1bik7Ci0g
ICAgQVNTRVJUKHJ1bi0+bV9uZXh0KTsKKyAgICBBU1NFUlQocnVuLT5uZXh0KCkpOwogCi0gICAg
UnVuKiBjdXJyZW50ID0gMDsKLSAgICBSdW4qIG5leHQgPSBtX2ZpcnN0UnVuOwotICAgIHdoaWxl
IChuZXh0ICE9IHJ1bikgewotICAgICAgICBjdXJyZW50ID0gbmV4dDsKLSAgICAgICAgbmV4dCA9
IGN1cnJlbnQtPm5leHQoKTsKKyAgICBSdW4qIHByZXZpb3VzID0gbnVsbHB0cjsKKyAgICBSdW4q
IGN1cnJlbnQgPSBtX2ZpcnN0UnVuLmdldCgpOworICAgIHdoaWxlIChjdXJyZW50ICE9IHJ1bikg
eworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgIGN1cnJlbnQgPSBwcmV2aW91
cy0+bmV4dCgpOwogICAgIH0KIAotICAgIGlmICghY3VycmVudCkKLSAgICAgICAgbV9maXJzdFJ1
biA9IHJ1bi0+bmV4dCgpOwotICAgIGVsc2UKLSAgICAgICAgY3VycmVudC0+bV9uZXh0ID0gcnVu
LT5tX25leHQ7Ci0KLSAgICBydW4tPm1fbmV4dCA9IDA7Ci0gICAgbV9sYXN0UnVuLT5tX25leHQg
PSBydW47Ci0gICAgbV9sYXN0UnVuID0gcnVuOworICAgIGlmICghcHJldmlvdXMpIHsKKyAgICAg
ICAgQVNTRVJUKG1fZmlyc3RSdW4uZ2V0KCkgPT0gcnVuKTsKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFJ1bj4gb3JpZ2luYWxGaXJzdFJ1biA9IFdURk1vdmUobV9maXJzdFJ1bik7CisgICAgICAg
IG1fZmlyc3RSdW4gPSBvcmlnaW5hbEZpcnN0UnVuLT50YWtlTmV4dCgpOworICAgICAgICBtX2xh
c3RSdW4tPnNldE5leHQoV1RGTW92ZShvcmlnaW5hbEZpcnN0UnVuKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gdGFyZ2V0ID0gcHJldmlvdXMtPnRha2VOZXh0
KCk7CisgICAgICAgIHByZXZpb3VzLT5zZXROZXh0KGN1cnJlbnQtPnRha2VOZXh0KCkpOworICAg
ICAgICBtX2xhc3RSdW4tPnNldE5leHQoV1RGTW92ZSh0YXJnZXQpKTsKKyAgICB9CiB9CiAKIHRl
bXBsYXRlIDxjbGFzcyBSdW4+CkBAIC0xMjMsMjEgKzEyNSwyMiBAQCBpbmxpbmUgdm9pZCBCaWRp
UnVuTGlzdDxSdW4+Ojptb3ZlUnVuVG9CZWdpbm5pbmcoUnVuKiBydW4pCiB7CiAgICAgQVNTRVJU
KG1fZmlyc3RSdW4pOwogICAgIEFTU0VSVChtX2xhc3RSdW4pOwotICAgIEFTU0VSVChydW4gIT0g
bV9maXJzdFJ1bik7CisgICAgQVNTRVJUKHJ1biAhPSBtX2ZpcnN0UnVuLmdldCgpKTsKIAotICAg
IFJ1biogY3VycmVudCA9IG1fZmlyc3RSdW47Ci0gICAgUnVuKiBuZXh0ID0gY3VycmVudC0+bmV4
dCgpOwotICAgIHdoaWxlIChuZXh0ICE9IHJ1bikgewotICAgICAgICBjdXJyZW50ID0gbmV4dDsK
LSAgICAgICAgbmV4dCA9IGN1cnJlbnQtPm5leHQoKTsKKyAgICBSdW4qIHByZXZpb3VzID0gbV9m
aXJzdFJ1bi5nZXQoKTsKKyAgICBSdW4qIGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOworICAg
IHdoaWxlIChjdXJyZW50ICE9IHJ1bikgeworICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7Cisg
ICAgICAgIGN1cnJlbnQgPSBwcmV2aW91cy0+bmV4dCgpOwogICAgIH0KIAotICAgIGN1cnJlbnQt
Pm1fbmV4dCA9IHJ1bi0+bV9uZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW4+IHRhcmdldCA9
IHByZXZpb3VzLT50YWtlTmV4dCgpOworICAgIHByZXZpb3VzLT5zZXROZXh0KHJ1bi0+dGFrZU5l
eHQoKSk7CiAgICAgaWYgKHJ1biA9PSBtX2xhc3RSdW4pCi0gICAgICAgIG1fbGFzdFJ1biA9IGN1
cnJlbnQ7CisgICAgICAgIG1fbGFzdFJ1biA9IHByZXZpb3VzOwogCi0gICAgcnVuLT5tX25leHQg
PSBtX2ZpcnN0UnVuOwotICAgIG1fZmlyc3RSdW4gPSBydW47CisgICAgdGFyZ2V0LT5zZXROZXh0
KFdURk1vdmUobV9maXJzdFJ1bikpOworICAgIG1fZmlyc3RSdW4gPSBXVEZNb3ZlKHRhcmdldCk7
CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBSdW4+CkBAIC0xNDcsNTMgKzE1MCwzOSBAQCB2b2lkIEJp
ZGlSdW5MaXN0PFJ1bj46OnJlcGxhY2VSdW5XaXRoUnVucyhSdW4qIHRvUmVwbGFjZSwgQmlkaVJ1
bkxpc3Q8UnVuPiYgbmV3UgogICAgIEFTU0VSVChtX2ZpcnN0UnVuKTsKICAgICBBU1NFUlQodG9S
ZXBsYWNlKTsKIAotICAgIGlmIChtX2ZpcnN0UnVuID09IHRvUmVwbGFjZSkKLSAgICAgICAgbV9m
aXJzdFJ1biA9IG5ld1J1bnMuZmlyc3RSdW4oKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gRmlu
ZCB0aGUgcnVuIGp1c3QgYmVmb3JlICJ0b1JlcGxhY2UiIGluIHRoZSBsaXN0IG9mIHJ1bnMuCi0g
ICAgICAgIFJ1biogcHJldmlvdXNSdW4gPSBtX2ZpcnN0UnVuOwotICAgICAgICB3aGlsZSAocHJl
dmlvdXNSdW4tPm5leHQoKSAhPSB0b1JlcGxhY2UpCi0gICAgICAgICAgICBwcmV2aW91c1J1biA9
IHByZXZpb3VzUnVuLT5uZXh0KCk7Ci0gICAgICAgIEFTU0VSVChwcmV2aW91c1J1bik7Ci0gICAg
ICAgIHByZXZpb3VzUnVuLT5zZXROZXh0KG5ld1J1bnMuZmlyc3RSdW4oKSk7Ci0gICAgfQotCi0g
ICAgbmV3UnVucy5sYXN0UnVuKCktPnNldE5leHQodG9SZXBsYWNlLT5uZXh0KCkpOworICAgIG1f
cnVuQ291bnQgKz0gbmV3UnVucy5ydW5Db3VudCgpIC0gMTsgLy8gV2UgYXJlIGFkZGluZyB0aGUg
bmV3IHJ1bnMgYW5kIHJlbW92aW5nIHRvUmVwbGFjZS4KIAotICAgIC8vIEZpeCB1cCBhbnkgb2Yg
b3RoZXIgcG9pbnRlcnMgd2hpY2ggbWF5IG5vdyBiZSBzdGFsZS4KKyAgICAvLyBGaXggdXAgYW55
IHBvaW50ZXJzIHdoaWNoIG1heSBlbmQgdXAgc3RhbGUuCiAgICAgaWYgKG1fbGFzdFJ1biA9PSB0
b1JlcGxhY2UpCiAgICAgICAgIG1fbGFzdFJ1biA9IG5ld1J1bnMubGFzdFJ1bigpOwogICAgIGlm
IChtX2xvZ2ljYWxseUxhc3RSdW4gPT0gdG9SZXBsYWNlKQogICAgICAgICBtX2xvZ2ljYWxseUxh
c3RSdW4gPSBuZXdSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKLSAgICBtX3J1bkNvdW50ICs9IG5l
d1J1bnMucnVuQ291bnQoKSAtIDE7IC8vIFdlIGFkZGVkIHRoZSBuZXcgcnVucyBhbmQgcmVtb3Zl
ZCB0b1JlcGxhY2UuCiAKLSAgICBkZWxldGUgdG9SZXBsYWNlOwotICAgIG5ld1J1bnMuY2xlYXJX
aXRob3V0RGVzdHJveWluZ1J1bnMoKTsKLX0KKyAgICBpZiAobV9maXJzdFJ1bi5nZXQoKSA9PSB0
b1JlcGxhY2UpIHsKKyAgICAgICAgbmV3UnVucy5tX2xhc3RSdW4tPnNldE5leHQobV9maXJzdFJ1
bi0+dGFrZU5leHQoKSk7CisgICAgICAgIG1fZmlyc3RSdW4gPSBXVEZNb3ZlKG5ld1J1bnMubV9m
aXJzdFJ1bik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRmluZCB0aGUgcnVuIGp1c3QgYmVm
b3JlICJ0b1JlcGxhY2UiIGluIHRoZSBsaXN0IG9mIHJ1bnMuCisgICAgICAgIFJ1biogcHJldmlv
dXNSdW4gPSBtX2ZpcnN0UnVuLmdldCgpOworICAgICAgICB3aGlsZSAocHJldmlvdXNSdW4tPm5l
eHQoKSAhPSB0b1JlcGxhY2UpCisgICAgICAgICAgICBwcmV2aW91c1J1biA9IHByZXZpb3VzUnVu
LT5uZXh0KCk7CisgICAgICAgIEFTU0VSVChwcmV2aW91c1J1bik7CiAKLXRlbXBsYXRlIDxjbGFz
cyBSdW4+Ci12b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmNsZWFyV2l0aG91dERlc3Ryb3lpbmdSdW5z
KCkKLXsKLSAgICBtX2ZpcnN0UnVuID0gMDsKLSAgICBtX2xhc3RSdW4gPSAwOwotICAgIG1fbG9n
aWNhbGx5TGFzdFJ1biA9IDA7Ci0gICAgbV9ydW5Db3VudCA9IDA7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxSdW4+IHRhcmdldCA9IHByZXZpb3VzUnVuLT50YWtlTmV4dCgpOworICAgICAgICBw
cmV2aW91c1J1bi0+c2V0TmV4dChXVEZNb3ZlKG5ld1J1bnMubV9maXJzdFJ1bikpOworICAgICAg
ICBuZXdSdW5zLm1fbGFzdFJ1bi0+c2V0TmV4dCh0YXJnZXQtPnRha2VOZXh0KCkpOworICAgIH0K
KworICAgIG5ld1J1bnMuY2xlYXIoKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFJ1bj4KLXZvaWQg
QmlkaVJ1bkxpc3Q8UnVuPjo6ZGVsZXRlUnVucygpCit2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OmNs
ZWFyKCkKIHsKLSAgICBpZiAoIW1fZmlyc3RSdW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIFJ1
biogY3VyciA9IG1fZmlyc3RSdW47Ci0gICAgd2hpbGUgKGN1cnIpIHsKLSAgICAgICAgUnVuKiBz
ID0gY3Vyci0+bmV4dCgpOwotICAgICAgICBkZWxldGUgY3VycjsKLSAgICAgICAgY3VyciA9IHM7
Ci0gICAgfQotCi0gICAgY2xlYXJXaXRob3V0RGVzdHJveWluZ1J1bnMoKTsKKyAgICBtX2ZpcnN0
UnVuID0gbnVsbHB0cjsKKyAgICBtX2xhc3RSdW4gPSBudWxscHRyOworICAgIG1fbG9naWNhbGx5
TGFzdFJ1biA9IG51bGxwdHI7CisgICAgbV9ydW5Db3VudCA9IDA7CiB9CiAKIHRlbXBsYXRlIDxj
bGFzcyBSdW4+CkBAIC0yMDYsNDQgKzE5NSwzNSBAQCB2b2lkIEJpZGlSdW5MaXN0PFJ1bj46OnJl
dmVyc2VSdW5zKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCiAKICAgICAvLyBHZXQgdGhl
IGl0ZW0gYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgcnVucyB0byByZXZlcnNlIGFuZCBwdXQgaXQg
aW4KICAgICAvLyB8YmVmb3JlU3RhcnR8LiB8Y3Vycnwgc2hvdWxkIHBvaW50IHRvIHRoZSBmaXJz
dCBydW4gdG8gcmV2ZXJzZS4KLSAgICBSdW4qIGN1cnIgPSBtX2ZpcnN0UnVuOwotICAgIFJ1biog
YmVmb3JlU3RhcnQgPSAwOworICAgIFJ1biogY3VyciA9IG1fZmlyc3RSdW4uZ2V0KCk7CisgICAg
UnVuKiBiZWZvcmVTdGFydCA9IG51bGxwdHI7CiAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgd2hp
bGUgKGkgPCBzdGFydCkgewotICAgICAgICBpKys7CisgICAgZm9yICg7IGkgPCBzdGFydDsgKytp
KSB7CiAgICAgICAgIGJlZm9yZVN0YXJ0ID0gY3VycjsKICAgICAgICAgY3VyciA9IGN1cnItPm5l
eHQoKTsKICAgICB9Ci0KICAgICBSdW4qIHN0YXJ0UnVuID0gY3VycjsKLSAgICB3aGlsZSAoaSA8
IGVuZCkgewotICAgICAgICBpKys7CisKKyAgICBmb3IgKDsgaSA8IGVuZDsgKytpKQogICAgICAg
ICBjdXJyID0gY3Vyci0+bmV4dCgpOwotICAgIH0KLSAgICBSdW4qIGVuZFJ1biA9IGN1cnI7Ci0g
ICAgUnVuKiBhZnRlckVuZCA9IGN1cnItPm5leHQoKTsKLQotICAgIGkgPSBzdGFydDsKLSAgICBj
dXJyID0gc3RhcnRSdW47Ci0gICAgUnVuKiBuZXdOZXh0ID0gYWZ0ZXJFbmQ7Ci0gICAgd2hpbGUg
KGkgPD0gZW5kKSB7Ci0gICAgICAgIC8vIERvIHRoZSByZXZlcnNhbC4KLSAgICAgICAgUnVuKiBu
ZXh0ID0gY3Vyci0+bmV4dCgpOwotICAgICAgICBjdXJyLT5tX25leHQgPSBuZXdOZXh0OwotICAg
ICAgICBuZXdOZXh0ID0gY3VycjsKLSAgICAgICAgY3VyciA9IG5leHQ7Ci0gICAgICAgIGkrKzsK
KworICAgIGlmICghY3Vyci0+bmV4dCgpKQorICAgICAgICBtX2xhc3RSdW4gPSBzdGFydFJ1bjsK
KworICAgIC8vIFN0YW5kYXJkICJzbGlkaW5nIHdpbmRvdyIgb2YgMyBwb2ludGVycworICAgIHN0
ZDo6dW5pcXVlX3B0cjxSdW4+IHByZXZpb3VzID0gY3Vyci0+dGFrZU5leHQoKTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UnVuPiBjdXJyZW50ID0gYmVmb3JlU3RhcnQgPyBiZWZvcmVTdGFydC0+dGFr
ZU5leHQoKSA6IFdURk1vdmUobV9maXJzdFJ1bik7CisgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFJ1bj4gbmV4dCA9IGN1cnJlbnQtPnRha2VOZXh0KCk7Cisg
ICAgICAgIGN1cnJlbnQtPnNldE5leHQoV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICBwcmV2
aW91cyA9IFdURk1vdmUoY3VycmVudCk7CisgICAgICAgIGN1cnJlbnQgPSBXVEZNb3ZlKG5leHQp
OwogICAgIH0KIAotICAgIC8vIE5vdyBob29rIHVwIGJlZm9yZVN0YXJ0IGFuZCBhZnRlckVuZCB0
byB0aGUgc3RhcnRSdW4gYW5kIGVuZFJ1bi4KICAgICBpZiAoYmVmb3JlU3RhcnQpCi0gICAgICAg
IGJlZm9yZVN0YXJ0LT5tX25leHQgPSBlbmRSdW47CisgICAgICAgIGJlZm9yZVN0YXJ0LT5zZXRO
ZXh0KFdURk1vdmUocHJldmlvdXMpKTsKICAgICBlbHNlCi0gICAgICAgIG1fZmlyc3RSdW4gPSBl
bmRSdW47Ci0KLSAgICBzdGFydFJ1bi0+bV9uZXh0ID0gYWZ0ZXJFbmQ7Ci0gICAgaWYgKCFhZnRl
ckVuZCkKLSAgICAgICAgbV9sYXN0UnVuID0gc3RhcnRSdW47CisgICAgICAgIG1fZmlyc3RSdW4g
PSBXVEZNb3ZlKHByZXZpb3VzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0JpZGlSdW4uY3BwCmluZGV4IGZkM2UwMjIxYTNmZjQwNzUyYWQ5YzY1YTRl
N2Q3NTgzNzc0NjJlYzUuLmM0YmI0N2FlMTEzNDU4NTg3MzVmOTY4MWE0YmE3MzdiOTdhYTlkY2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9CaWRpUnVuLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5jcHAKQEAgLTUzLDQgKzUzLDEyIEBAIEJp
ZGlSdW46On5CaWRpUnVuKCkKICNlbmRpZgogfQogCitzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4g
QmlkaVJ1bjo6dGFrZU5leHQoKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCaWRpQ2hhcmFjdGVy
UnVuPiBuZXh0ID0gQmlkaUNoYXJhY3RlclJ1bjo6dGFrZU5leHQoKTsKKyAgICBCaWRpQ2hhcmFj
dGVyUnVuKiByYXcgPSBuZXh0LnJlbGVhc2UoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1
bj4gcmVzdWx0ID0gc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+KHN0YXRpY19jYXN0PEJpZGlSdW4q
PihyYXcpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Jp
ZGlSdW4uaAppbmRleCBhNjYzMTQzZTYzZmRiMDJjZjI3ZGYyNDk3N2Y5N2YwZmIzMjM2OGI3Li5i
YjkzODk1ZGZlMDg2OGE3YmQzZGU2ODJhOGE3YTE3Yzk5OGZlNGIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQmlkaVJ1bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9CaWRpUnVuLmgKQEAgLTM3LDcgKzM3LDggQEAgc3RydWN0IEJpZGlSdW4gOiBCaWRpQ2hh
cmFjdGVyUnVuIHsKICAgICBCaWRpUnVuKGludCBzdGFydCwgaW50IHN0b3AsIFJlbmRlck9iamVj
dCYsIEJpZGlDb250ZXh0KiwgVUNoYXJEaXJlY3Rpb24pOwogICAgIH5CaWRpUnVuKCk7CiAKLSAg
ICBCaWRpUnVuKiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlkaVJ1bio+KG1fbmV4dCk7
IH0KKyAgICBCaWRpUnVuKiBuZXh0KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlkaVJ1bio+KEJp
ZGlDaGFyYWN0ZXJSdW46Om5leHQoKSk7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4g
dGFrZU5leHQoKTsKICAgICBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKCkgeyByZXR1cm4gbV9yZW5k
ZXJlcjsgfQogICAgIElubGluZUJveCogYm94KCkgeyByZXR1cm4gbV9ib3g7IH0KICAgICB2b2lk
IHNldEJveChJbmxpbmVCb3gmIGJveCkgeyBtX2JveCA9ICZib3g7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKaW5kZXggMGM4ZmIzODI3OTVlODMzNzc0NDU4OWM3
OThmYzUxOWU3ZWFlODJlOC4uZWE3ZWRiNGJmNjQ5NWJhZDI0NWQ4ZjhiYThhYjc0ZmUxMDkyNjcx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKQEAgLTQ5Miwx
MiArNDkyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbnVtYmVyT2ZJc29sYXRlQW5jZXN0
b3JzKGNvbnN0IElubGluZUl0ZXJhdG9yJiBpdGVyKQogLy8gb2YgQmlkaVJlc29sdmVyIHdoaWNo
IGtub3dzIG5vdGhpbmcgYWJvdXQgUmVuZGVyT2JqZWN0cy4KIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRQbGFjZWhvbGRlclJ1bkZvcklzb2xhdGVkSW5saW5lKElubGluZUJpZGlSZXNvbHZlciYgcmVz
b2x2ZXIsIFJlbmRlck9iamVjdCYgb2JqLCB1bnNpZ25lZCBwb3MsIFJlbmRlckVsZW1lbnQmIHJv
b3QpCiB7Ci0gICAgQmlkaVJ1biogaXNvbGF0ZWRSdW4gPSBuZXcgQmlkaVJ1bihwb3MsIDAsIG9i
aiwgcmVzb2x2ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIoKSk7Ci0gICAgcmVzb2x2ZXIucnVu
cygpLmFkZFJ1bihpc29sYXRlZFJ1bik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IGlz
b2xhdGVkUnVuID0gc3RkOjptYWtlX3VuaXF1ZTxCaWRpUnVuPihwb3MsIDAsIG9iaiwgcmVzb2x2
ZXIuY29udGV4dCgpLCByZXNvbHZlci5kaXIoKSk7CiAgICAgLy8gRklYTUU6IGlzb2xhdGVkUnVu
cygpIGNvdWxkIGJlIGEgaGFzaCBvZiBvYmplY3QtPnJ1biBhbmQgdGhlbiB3ZSBjb3VsZCBjaGVh
cGx5CiAgICAgLy8gQVNTRVJUIGhlcmUgdGhhdCB3ZSBkaWRuJ3QgY3JlYXRlIG11bHRpcGxlIG9i
amVjdHMgZm9yIHRoZSBzYW1lIGlubGluZS4KICAgICByZXNvbHZlci5zZXRNaWRwb2ludEZvcklz
b2xhdGVkUnVuKCppc29sYXRlZFJ1biwgcmVzb2x2ZXIubWlkcG9pbnRTdGF0ZSgpLmN1cnJlbnRN
aWRwb2ludCgpKTsKICAgICByZXNvbHZlci5pc29sYXRlZFJ1bnMoKS5hcHBlbmQoQmlkaUlzb2xh
dGVkUnVuKG9iaiwgcG9zLCByb290LCAqaXNvbGF0ZWRSdW4pKTsKKyAgICByZXNvbHZlci5ydW5z
KCkuYWRkUnVuKFdURk1vdmUoaXNvbGF0ZWRSdW4pKTsKIH0KIAogY2xhc3MgSXNvbGF0ZVRyYWNr
ZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAppbmRleCAwZTE4NTI0MWQ1MzFlYzVkZjRlMzY4MmE2ZmYxNTk2MjEyNjk0MjcxLi4z
ODlhMjI4MDdjN2RlNTBhZGY5N2JmNjRlNjZjM2Y3NDJjYzU5NjE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtNzEsOSAr
NzEsOSBAQCBzdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0aW9u
JiBkaXIsIElubGluZUl0ZXJhdG9yIGl0ZXIpCiAgICAgfQogfQogCi1pbmxpbmUgQmlkaVJ1biog
Y3JlYXRlUnVuKGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosIElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIpCitpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IGNy
ZWF0ZVJ1bihpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCYgb2JqLCBJbmxpbmVCaWRp
UmVzb2x2ZXImIHJlc29sdmVyKQogewotICAgIHJldHVybiBuZXcgQmlkaVJ1bihzdGFydCwgZW5k
LCBvYmosIHJlc29sdmVyLmNvbnRleHQoKSwgcmVzb2x2ZXIuZGlyKCkpOworICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEJpZGlSdW4+KHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIuY29udGV4
dCgpLCByZXNvbHZlci5kaXIoKSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphcHBlbmRS
dW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+KiBydW5zLCBpbnQgc3RhcnQsIGludCBl
bmQsIFJlbmRlck9iamVjdCYgb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQpAQCAt
MTAzNiwxMyArMTAzNiwxMyBAQCBpbmxpbmUgQmlkaVJ1biogUmVuZGVyQmxvY2tGbG93OjpoYW5k
bGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaQogICAgICAgICB3aGls
ZSAoQmlkaUNvbnRleHQqIHBhcmVudCA9IGJhc2VDb250ZXh0LT5wYXJlbnQoKSkKICAgICAgICAg
ICAgIGJhc2VDb250ZXh0ID0gcGFyZW50OwogCi0gICAgICAgIEJpZGlSdW4qIG5ld1RyYWlsaW5n
UnVuID0gbmV3IEJpZGlSdW4oZmlyc3RTcGFjZSwgdHJhaWxpbmdTcGFjZVJ1bi0+bV9zdG9wLCB0
cmFpbGluZ1NwYWNlUnVuLT5yZW5kZXJlcigpLCBiYXNlQ29udGV4dCwgVV9PVEhFUl9ORVVUUkFM
KTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpZGlSdW4+IG5ld1RyYWlsaW5nUnVuID0gc3Rk
OjptYWtlX3VuaXF1ZTxCaWRpUnVuPihmaXJzdFNwYWNlLCB0cmFpbGluZ1NwYWNlUnVuLT5tX3N0
b3AsIHRyYWlsaW5nU3BhY2VSdW4tPnJlbmRlcmVyKCksIGJhc2VDb250ZXh0LCBVX09USEVSX05F
VVRSQUwpOwogICAgICAgICB0cmFpbGluZ1NwYWNlUnVuLT5tX3N0b3AgPSBmaXJzdFNwYWNlOwor
ICAgICAgICB0cmFpbGluZ1NwYWNlUnVuID0gbmV3VHJhaWxpbmdSdW4uZ2V0KCk7CiAgICAgICAg
IGlmIChkaXJlY3Rpb24gPT0gTFRSKQotICAgICAgICAgICAgYmlkaVJ1bnMuYWRkUnVuKG5ld1Ry
YWlsaW5nUnVuKTsKKyAgICAgICAgICAgIGJpZGlSdW5zLmFkZFJ1bihXVEZNb3ZlKG5ld1RyYWls
aW5nUnVuKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJpZGlSdW5zLnByZXBlbmRSdW4o
bmV3VHJhaWxpbmdSdW4pOwotICAgICAgICB0cmFpbGluZ1NwYWNlUnVuID0gbmV3VHJhaWxpbmdS
dW47CisgICAgICAgICAgICBiaWRpUnVucy5wcmVwZW5kUnVuKFdURk1vdmUobmV3VHJhaWxpbmdS
dW4pKTsKICAgICAgICAgcmV0dXJuIHRyYWlsaW5nU3BhY2VSdW47CiAgICAgfQogICAgIGlmICgh
c2hvdWxkUmVvcmRlcikKQEAgLTEzMjEsNyArMTMyMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
LCBJCiAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0RW5kKCkpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgY3JlYXRpbmcgYW55IHJ1bnMgaW4gbmV4dExp
bmVCcmVhayB0byBiZWdpbiB3aXRoIQogICAgICAgICAgICAgLy8gT25jZSBCaWRpUnVuTGlzdCBp
cyBzZXBhcmF0ZWQgZnJvbSBCaWRpUmVzb2x2ZXIgdGhpcyB3aWxsIG5vdCBiZSBuZWVkZWQuCi0g
ICAgICAgICAgICByZXNvbHZlci5ydW5zKCkuZGVsZXRlUnVucygpOworICAgICAgICAgICAgcmVz
b2x2ZXIucnVucygpLmNsZWFyKCk7CiAgICAgICAgICAgICByZXNvbHZlci5tYXJrQ3VycmVudFJ1
bkVtcHR5KCk7IC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSByZXBsYWNlZCBieSBhbiBB
U1NFUlQgKG9yIGp1c3QgcmVtb3ZlZCkuCiAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRDaGVj
a0ZvckZsb2F0c0Zyb21MYXN0TGluZSh0cnVlKTsKICAgICAgICAgICAgIHJlc29sdmVyLnNldFBv
c2l0aW9uKElubGluZUl0ZXJhdG9yKHJlc29sdmVyLnBvc2l0aW9uKCkucm9vdCgpLCAwLCAwKSwg
MCk7CkBAIC0xMzYyLDcgKzEzNjIsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0UnVu
c0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSQogICAgICAg
ICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAg
ICAgICAgICAgUm9vdElubGluZUJveCogbGluZUJveCA9IGNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRp
UnVucyhyZXNvbHZlci5zdGF0dXMoKS5jb250ZXh0LT5sZXZlbCgpLCBiaWRpUnVucywgZW5kLCBs
YXlvdXRTdGF0ZS5saW5lSW5mbygpLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIHRyYWlsaW5nU3Bh
Y2VSdW4sIHdvcmRNZWFzdXJlbWVudHMpOwogCi0gICAgICAgICAgICBiaWRpUnVucy5kZWxldGVS
dW5zKCk7CisgICAgICAgICAgICBiaWRpUnVucy5jbGVhcigpOwogICAgICAgICAgICAgcmVzb2x2
ZXIubWFya0N1cnJlbnRSdW5FbXB0eSgpOyAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYmUg
cmVwbGFjZWQgYnkgYW4gQVNTRVJUIChvciBqdXN0IHJlbW92ZWQpLgogCiAgICAgICAgICAgICBp
ZiAobGluZUJveCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUv
TGluZUJyZWFrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFr
ZXIuY3BwCmluZGV4IDZlYWZhMjkwNjkzYWZiYjNmMTRkN2E4ZjA2YTdkY2ZkNTc3MzE2YmYuLmY2
ZWI5ZTMwNTIzZmVhOTZhZTdjNWRlYTNkMjMzMTk2YTU4NmJjZGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdm9p
ZCBMaW5lQnJlYWtlcjo6c2tpcExlYWRpbmdXaGl0ZXNwYWNlKElubGluZUJpZGlSZXNvbHZlciYg
cmVzb2x2ZXIsIExpbmVJbmZvJgogICAgICAgICBpZiAob2JqZWN0LmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpKSB7CiAgICAgICAgICAgICBzZXRTdGF0aWNQb3NpdGlvbnMobV9ibG9jaywgZG93bmNh
c3Q8UmVuZGVyQm94PihvYmplY3QpLCB3aWR0aC5zaG91bGRJbmRlbnRUZXh0KCkpOwogICAgICAg
ICAgICAgaWYgKG9iamVjdC5zdHlsZSgpLmlzT3JpZ2luYWxEaXNwbGF5SW5saW5lVHlwZSgpKSB7
Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmFkZFJ1bihuZXcgQmlkaVJ1bigwLCAx
LCBvYmplY3QsIHJlc29sdmVyLmNvbnRleHQoKSwgcmVzb2x2ZXIuZGlyKCkpKTsKKyAgICAgICAg
ICAgICAgICByZXNvbHZlci5ydW5zKCkuYWRkUnVuKHN0ZDo6bWFrZV91bmlxdWU8QmlkaVJ1bj4o
MCwgMSwgb2JqZWN0LCByZXNvbHZlci5jb250ZXh0KCksIHJlc29sdmVyLmRpcigpKSk7CiAgICAg
ICAgICAgICAgICAgbGluZUluZm8uaW5jcmVtZW50UnVuc0Zyb21MZWFkaW5nV2hpdGVzcGFjZSgp
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC5pc0Zsb2F0aW5nKCkp
Cg==
</data>
<flag name="review"
          id="299798"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275561</attachid>
            <date>2016-04-04 11:22:13 -0700</date>
            <delta_ts>2016-04-04 11:22:13 -0700</delta_ts>
            <desc>Addressing Darin&apos;s comments</desc>
            <filename>bug-156123-20160404112218.patch</filename>
            <type>text/plain</type>
            <size>1414</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGY0NmU5MzgxNTgzY2Iz
NDY5MGQ3OWQwM2M3Mjk5NTVjMDhjMzZkOC4uZWFlZTRjYzg3MzkyYmJhYmExMDUzNDJhMjNhM2Qx
NTYyOGIwMTViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA0LTA0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkcmVzc2lu
ZyBwb3N0LXJldmlldyBmZWVkYmFjayBvbiByMTk4OTcwCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYxMjMKKworICAgICAgICBVbnJldmlld2VkLgor
CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkJpZGlDaGFyYWN0ZXJSdW46On5CaWRpQ2hhcmFjdGVyUnVuKToKKwogMjAxNi0wNC0wNCAg
QWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNT
SU9OKHIxOTg0OTIpOiBbR1RLXSBUaGUgV0VCX1JUQyBmbGFnIHdhcyBub3QgY29ycmVjdGx5IGFk
ZGVkIGluIHNvbWUgc2l0dWF0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlk
aVJlc29sdmVyLmgKaW5kZXggZDM3ZDJmZjQ1YzgxZWYzM2NhNzY5NWUxZWE4ZTE5OWIzMjdkOWRl
Mi4uMzgzNDNlOGU4Y2RhMzJkMDA2NzcyNGU4YjM2NGMzYjQ1YTMxNWI2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0JpZGlSZXNvbHZlci5oCkBAIC0xNzYsNiArMTc2LDE0IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIH5CaWRpQ2hhcmFjdGVyUnVuKCkKKyAg
ICB7CisgICAgICAgIC8vIERlbGV0ZSB0aGUgbGlua2VkIGxpc3QgaW4gYSBsb29wIHRvIHByZXZl
bnQgZGVzdHJ1Y3RvciByZWN1cnNpb24uCisgICAgICAgIGF1dG8gbmV4dCA9IFdURk1vdmUobV9u
ZXh0KTsKKyAgICAgICAgd2hpbGUgKG5leHQpCisgICAgICAgICAgICBuZXh0ID0gV1RGTW92ZShu
ZXh0LT5tX25leHQpOworICAgIH0KKwogICAgIGludCBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnQ7IH0KICAgICBpbnQgc3RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcDsgfQogICAgIHVu
c2lnbmVkIGNoYXIgbGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2xldmVsOyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>