<?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>195743</bug_id>
          
          <creation_ts>2019-03-14 05:33:04 -0700</creation_ts>
          <short_desc>Optimize Region for single rectangle case</short_desc>
          <delta_ts>2019-03-15 08:44:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1516487</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-14 05:33:04 -0700</bug_when>
    <thetext>Instrumentation shows vast majority of Region objects consist of a single rectangle. However it always allocates the large Shape data structure. This makes it unsuitable to use as a member in any popular objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516490</commentid>
    <comment_count>1</comment_count>
      <attachid>364656</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-14 06:00:19 -0700</bug_when>
    <thetext>Created attachment 364656
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516502</commentid>
    <comment_count>2</comment_count>
      <attachid>364659</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-14 08:14:27 -0700</bug_when>
    <thetext>Created attachment 364659
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516506</commentid>
    <comment_count>3</comment_count>
      <attachid>364659</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-14 08:57:05 -0700</bug_when>
    <thetext>Comment on attachment 364659
patch

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

&gt; Source/WebCore/platform/graphics/Region.cpp:60
&gt; +Region::~Region()

= default

&gt; Source/WebCore/platform/graphics/Region.cpp:85
&gt; +        if (!m_bounds.isEmpty())
&gt; +            rects.append(m_bounds);
&gt; +        return rects;

Since this is the common case, maybe reserveInitialCapacity(1) and uncheckedAppend here, avoiding wasted vector capacity.

&gt; Source/WebCore/platform/graphics/Region.h:189
&gt; +    return a.m_bounds == b.m_bounds &amp;&amp; arePointingToEqualData(a.m_shape, b.m_shape);

very nice

&gt; Source/WebCore/platform/graphics/Region.h:226
&gt; +    Optional&lt;size_t&gt; segmentIndex;
&gt; +    decoder &gt;&gt; segmentIndex;

I don&apos;t really find this use of Optional&lt;&gt; and decoder &gt;&gt; much clearer than testing for decode success directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516508</commentid>
    <comment_count>4</comment_count>
      <attachid>364659</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-14 08:59:26 -0700</bug_when>
    <thetext>Comment on attachment 364659
patch

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

&gt;&gt; Source/WebCore/platform/graphics/Region.h:226
&gt;&gt; +    decoder &gt;&gt; segmentIndex;
&gt; 
&gt; I don&apos;t really find this use of Optional&lt;&gt; and decoder &gt;&gt; much clearer than testing for decode success directly.

It&apos;s not really about readability though. The reason we changed the way we decode was to not require a default constructor for the classes being decoded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516533</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-14 10:52:52 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #4)

&gt; It&apos;s not really about readability though. The reason we changed the way we
&gt; decode was to not require a default constructor for the classes being
&gt; decoded.

Makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516938</commentid>
    <comment_count>6</comment_count>
      <attachid>364783</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-15 02:27:22 -0700</bug_when>
    <thetext>Created attachment 364783
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516945</commentid>
    <comment_count>7</comment_count>
      <attachid>364785</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-15 03:21:36 -0700</bug_when>
    <thetext>Created attachment 364785
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516951</commentid>
    <comment_count>8</comment_count>
      <attachid>364789</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-15 03:53:44 -0700</bug_when>
    <thetext>Created attachment 364789
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516958</commentid>
    <comment_count>9</comment_count>
      <attachid>364790</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-15 06:17:28 -0700</bug_when>
    <thetext>Created attachment 364790
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516959</commentid>
    <comment_count>10</comment_count>
      <attachid>364791</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-15 06:22:16 -0700</bug_when>
    <thetext>Created attachment 364791
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516961</commentid>
    <comment_count>11</comment_count>
      <attachid>364793</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-15 07:00:54 -0700</bug_when>
    <thetext>Created attachment 364793
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516962</commentid>
    <comment_count>12</comment_count>
      <attachid>364794</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-15 07:23:36 -0700</bug_when>
    <thetext>Created attachment 364794
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516964</commentid>
    <comment_count>13</comment_count>
      <attachid>364795</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-03-15 07:45:37 -0700</bug_when>
    <thetext>Created attachment 364795
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516978</commentid>
    <comment_count>14</comment_count>
      <attachid>364795</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-15 08:43:26 -0700</bug_when>
    <thetext>Comment on attachment 364795
patch

Clearing flags on attachment: 364795

Committed r242995: &lt;https://trac.webkit.org/changeset/242995&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516979</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-15 08:43:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516980</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-15 08:44:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/48925684&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364656</attachid>
            <date>2019-03-14 06:00:19 -0700</date>
            <delta_ts>2019-03-14 08:14:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize.patch</filename>
            <type>text/plain</type>
            <size>27415</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MjgzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uIHNob3dzIHZhc3QgbWFqb3JpdHkgb2YgUmVn
aW9uIG9iamVjdHMgY29uc2lzdCBvZiBhIHNpbmdsZSByZWN0YW5nbGUuIEhvd2V2ZXIgaXQgYWx3
YXlzIGFsbG9jYXRlcworICAgICAgICB0aGUgbGFyZ2UgU2hhcGUgZGF0YSBzdHJ1Y3R1cmUuIFRo
aXMgbWFrZXMgaXQgdW5zdWl0YWJsZSB0byB1c2UgYXMgYSBtZW1iZXIgaW4gYW55IHBvcHVsYXIg
b2JqZWN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIG9wdGltaXplcyB0aGUgc2luZ2xlIHJlY3Rh
bmdsZSBjYXNlIGJ5IHVzaW5nIG9ubHkgdGhlIGJvdW5kcyByZWN0YW5nbGUgdG8gZGVzY3JpYmUg
aXQuCisgICAgICAgIFNoYXBlIGlzIGFsbG9jYXRlZCBvbiBkZW1hbmQuIFRoaXMgbWFrZXMgaXQg
c2FmZSB0byB1c2UgUmVnaW9uIGFzIGEgZGF0YSBtZW1iZXIgd2hlcmUgYSByZWN0YW5nbGUgaXMg
dGhlIGNvbW1vbiBjYXNlLgorCisgICAgICAgIFRoZSBwYXRjaCBhbHNvIG1vZGVybml6ZXMgUmVn
aW9uIGVuY29kaW5nL2RlY29kaW5nIHN1cHBvcnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9SZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpSZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVnaW9uOjp+UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6cmVjdHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OmludGVyc2VjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
OjpTaGFwZTo6U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6YXBwZW5k
U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmR1bXAgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVnaW9uOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjp1
bml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnN1YnRyYWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0
U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6aXNWYWxpZCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpzd2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dXBkYXRlQm91bmRzRnJvbVNoYXBlKTogRGVs
ZXRlZC4KKworICAgICAgICBSZW1vdmUgc29tZSBub3cgdW51c2VkIGZ1bmN0aW9uLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZWdp
b246OmlzUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmdyaWRTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29weVNoYXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTcGFu
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTcGFuOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpb246OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmRlY29kZSk6
CisKKyAgICAgICAgVGhpcyBpcyBub3cgcGFydCBvZiB0eXBlLgorCisgICAgICAgIChXZWJDb3Jl
OjpSZWdpb246OmlzVmFsaWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjpTcGFuOjpTcGFuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2hh
cGVTZWdtZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNo
YXBlU3BhbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzZXRT
aGFwZVNlZ21lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTcGFucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpzZWdt
ZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpz
cGFucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpz
ZXRTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpz
ZXRTcGFucyk6IERlbGV0ZWQuCisKKyAgICAgICAgTm8gbmVlZCB0byBleHBvc2UgdGhlc2UgZm9y
IGVuY29kaW5nIGFueW1vcmUuCisKIDIwMTktMDMtMTIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgogCiAgICAgICAgIENvbXBvc2l0aW5nIGxheWVyIHRoYXQgcmVuZGVycyB0d28g
cG9zaXRpb25lZCBlbGVtZW50cyBzaG91bGQgbm90IGhpdCB0ZXN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAJKHJldmlzaW9uIDI0MjgyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDE5ICs0Miw1NCBAQCBSZWdpb246OlJlZ2lvbigpCiAKIFJlZ2lvbjo6UmVnaW9u
KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgOiBtX2JvdW5kcyhyZWN0KQotICAgICwgbV9zaGFw
ZShyZWN0KQogewogfQogCitSZWdpb246OlJlZ2lvbihjb25zdCBSZWdpb24mIG90aGVyKQorICAg
IDogbV9ib3VuZHMob3RoZXIubV9ib3VuZHMpCisgICAgLCBtX3NoYXBlKG90aGVyLmNvcHlTaGFw
ZSgpKQoreworfQorCitSZWdpb246OlJlZ2lvbihSZWdpb24mJiBvdGhlcikKKyAgICA6IG1fYm91
bmRzKFdURk1vdmUob3RoZXIubV9ib3VuZHMpKQorICAgICwgbV9zaGFwZShXVEZNb3ZlKG90aGVy
Lm1fc2hhcGUpKQoreworfQorCitSZWdpb246On5SZWdpb24oKQoreworfQorCitSZWdpb24mIFJl
Z2lvbjo6b3BlcmF0b3I9KGNvbnN0IFJlZ2lvbiYgb3RoZXIpCit7CisgICAgbV9ib3VuZHMgPSBv
dGhlci5tX2JvdW5kczsKKyAgICBtX3NoYXBlID0gb3RoZXIuY29weVNoYXBlKCk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitSZWdpb24mIFJlZ2lvbjo6b3BlcmF0b3I9KFJlZ2lvbiYmIG90aGVy
KQoreworICAgIG1fYm91bmRzID0gV1RGTW92ZShvdGhlci5tX2JvdW5kcyk7CisgICAgbV9zaGFw
ZSA9IFdURk1vdmUob3RoZXIubV9zaGFwZSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCiBWZWN0
b3I8SW50UmVjdD4gUmVnaW9uOjpyZWN0cygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPEludFJlY3Q+
IHJlY3RzOwogCi0gICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLnNw
YW5zX2JlZ2luKCksIGVuZCA9IG1fc2hhcGUuc3BhbnNfZW5kKCk7IHNwYW4gIT0gZW5kICYmIHNw
YW4gKyAxICE9IGVuZDsgKytzcGFuKSB7CisgICAgaWYgKCFtX3NoYXBlKSB7CisgICAgICAgIGlm
ICghbV9ib3VuZHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmVjdHMuYXBwZW5kKG1fYm91bmRz
KTsKKyAgICAgICAgcmV0dXJuIHJlY3RzOworICAgIH0KKworICAgIGZvciAoU2hhcGU6OlNwYW5J
dGVyYXRvciBzcGFuID0gbV9zaGFwZS0+c3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS0+c3Bh
bnNfZW5kKCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytzcGFuKSB7CiAgICAg
ICAgIGludCB5ID0gc3Bhbi0+eTsKICAgICAgICAgaW50IGhlaWdodCA9IChzcGFuICsgMSktPnkg
LSB5OwogCi0gICAgICAgIGZvciAoU2hhcGU6OlNlZ21lbnRJdGVyYXRvciBzZWdtZW50ID0gbV9z
aGFwZS5zZWdtZW50c19iZWdpbihzcGFuKSwgZW5kID0gbV9zaGFwZS5zZWdtZW50c19lbmQoc3Bh
bik7IHNlZ21lbnQgIT0gZW5kICYmIHNlZ21lbnQgKyAxICE9IGVuZDsgc2VnbWVudCArPSAyKSB7
CisgICAgICAgIGZvciAoU2hhcGU6OlNlZ21lbnRJdGVyYXRvciBzZWdtZW50ID0gbV9zaGFwZS0+
c2VnbWVudHNfYmVnaW4oc3BhbiksIGVuZCA9IG1fc2hhcGUtPnNlZ21lbnRzX2VuZChzcGFuKTsg
c2VnbWVudCAhPSBlbmQgJiYgc2VnbWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKICAg
ICAgICAgICAgIGludCB4ID0gKnNlZ21lbnQ7CiAgICAgICAgICAgICBpbnQgd2lkdGggPSAqKHNl
Z21lbnQgKyAxKSAtIHg7CiAKQEAgLTcwLDcgKzEwNSwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFp
bnMoY29uc3QgUmVnaW9uJiByZWdpCiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhyZWdpb24u
bV9ib3VuZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gU2hhcGU6OmNv
bXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVDb250YWluc09wZXJhdGlvbj4obV9zaGFwZSwgcmVn
aW9uLm1fc2hhcGUpOworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVDb250YWluc09w
ZXJhdGlvbj4oKm1fc2hhcGUsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogU2hh
cGUocmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC03OCw3ICsxMTYsMTAgQEAgYm9vbCBSZWdpb246OmNv
bnRhaW5zKGNvbnN0IEludFBvaW50JiBwbwogICAgIGlmICghbV9ib3VuZHMuY29udGFpbnMocG9p
bnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0
b3Igc3BhbiA9IG1fc2hhcGUuc3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19lbmQo
KTsgc3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAoIW1f
c2hhcGUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJh
dG9yIHNwYW4gPSBtX3NoYXBlLT5zcGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19l
bmQoKTsgc3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAg
aW50IHkgPSBzcGFuLT55OwogICAgICAgICBpbnQgbWF4WSA9IChzcGFuICsgMSktPnk7CiAKQEAg
LTg3LDcgKzEyOCw3IEBAIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG8K
ICAgICAgICAgaWYgKG1heFkgPD0gcG9pbnQueSgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgZm9yIChTaGFwZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNl
Z21lbnRzX2JlZ2luKHNwYW4pLCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2Vn
bWVudCAhPSBlbmQgJiYgc2VnbWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAg
ICAgZm9yIChTaGFwZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50
c19iZWdpbihzcGFuKSwgZW5kID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50
ICE9IGVuZCAmJiBzZWdtZW50ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAg
ICAgaW50IHggPSAqc2VnbWVudDsKICAgICAgICAgICAgIGludCBtYXhYID0gKihzZWdtZW50ICsg
MSk7CiAKQEAgLTEwNiw3ICsxNDcsMTAgQEAgYm9vbCBSZWdpb246OmludGVyc2VjdHMoY29uc3Qg
UmVnaW9uJiByZQogICAgIGlmICghbV9ib3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFw
ZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9z
aGFwZSk7CisgICAgaWYgKCFtX3NoYXBlICYmICFyZWdpb24ubV9zaGFwZSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBh
cmVJbnRlcnNlY3RzT3BlcmF0aW9uPihtX3NoYXBlID8gKm1fc2hhcGUgOiBtX2JvdW5kcywgcmVn
aW9uLm1fc2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiByZWdpb24ubV9ib3VuZHMpOwogfQogCiB1
bnNpZ25lZCBSZWdpb246OnRvdGFsQXJlYSgpIGNvbnN0CkBAIC0yMjYsMTYgKzI3MCwxNCBAQCBS
ZWdpb246OlNoYXBlOjpTaGFwZSgpCiB9CiAKIFJlZ2lvbjo6U2hhcGU6OlNoYXBlKGNvbnN0IElu
dFJlY3QmIHJlY3QpCisgICAgOiBtX3NlZ21lbnRzKHsgcmVjdC54KCksIHJlY3QubWF4WCgpIH0p
CisgICAgLCBtX3NwYW5zKHsgeyByZWN0LnkoKSwgMCB9LCB7IHJlY3QubWF4WSgpLCAyIH0gfSkK
IHsKLSAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QueCgp
KTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgpKTsKLSAgICBhcHBlbmRTcGFuKHJlY3Qu
bWF4WSgpKTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFuKGludCB5KQogewot
ICAgIG1fc3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdtZW50cy5zaXplKCkpKTsKKyAgICBtX3Nw
YW5zLmFwcGVuZCh7IHksIG1fc2VnbWVudHMuc2l6ZSgpIH0pOwogfQogCiBib29sIFJlZ2lvbjo6
U2hhcGU6OmNhbkNvYWxlc2NlKFNlZ21lbnRJdGVyYXRvciBiZWdpbiwgU2VnbWVudEl0ZXJhdG9y
IGVuZCkKQEAgLTMzMSwyNyArMzczLDYgQEAgdm9pZCBSZWdpb246OlNoYXBlOjpkdW1wKCkgY29u
c3QKIH0KICNlbmRpZgogCi1ib29sIFJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQoKSBjb25zdAotewot
ICAgIGZvciAoYXV0byBzcGFuID0gc3BhbnNfYmVnaW4oKSwgZW5kID0gc3BhbnNfZW5kKCk7IHNw
YW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytzcGFuKSB7Ci0gICAgICAgIGludCB5ID0g
c3Bhbi0+eTsKLSAgICAgICAgaW50IGhlaWdodCA9IChzcGFuICsgMSktPnkgLSB5OwotICAgICAg
ICAKLSAgICAgICAgaWYgKGhlaWdodCA8IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgZm9yIChhdXRvIHNlZ21lbnQgPSBzZWdtZW50c19iZWdpbihzcGFuKSwgZW5kID0g
c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsgMSAhPSBlbmQ7
IHNlZ21lbnQgKz0gMikgewotICAgICAgICAgICAgaW50IHggPSAqc2VnbWVudDsKLSAgICAgICAg
ICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogSW50UmVjdCBSZWdpb246OlNo
YXBlOjpib3VuZHMoKSBjb25zdAogewogICAgIGlmIChpc0VtcHR5KCkpCkBAIC0zOTcsMTIgKzQx
OCw2IEBAIHZvaWQgUmVnaW9uOjpTaGFwZTo6dHJhbnNsYXRlKGNvbnN0IEludFMKICAgICAgICAg
bV9zcGFuc1tpXS55ICs9IG9mZnNldC5oZWlnaHQoKTsKIH0KIAotdm9pZCBSZWdpb246OlNoYXBl
Ojpzd2FwKFNoYXBlJiBvdGhlcikKLXsKLSAgICBtX3NlZ21lbnRzLnN3YXAob3RoZXIubV9zZWdt
ZW50cyk7Ci0gICAgbV9zcGFucy5zd2FwKG90aGVyLm1fc3BhbnMpOwotfQotCiBlbnVtIHsKICAg
ICBTaGFwZTEsCiAgICAgU2hhcGUyLApAQCAtNTY3LDcxICs1ODIsODEgQEAgdm9pZCBSZWdpb246
OmR1bXAoKSBjb25zdAogewogICAgIHByaW50ZigiQm91bmRzOiAoJWQsICVkLCAlZCwgJWQpXG4i
LAogICAgICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91bmRzLnkoKSwgbV9ib3VuZHMud2lkdGgo
KSwgbV9ib3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fc2hhcGUuZHVtcCgpOworICAgIGlmIChtX3No
YXBlKQorICAgICAgICBtX3NoYXBlLT5kdW1wKCk7CiB9CiAjZW5kaWYKIAotdm9pZCBSZWdpb246
OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpCi17Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5k
cygpOwotfQotCiB2b2lkIFJlZ2lvbjo6aW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQog
ewogICAgIGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAo
IW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkgewotICAgICAgICBtX3NoYXBl
ID0gU2hhcGUoKTsKKyAgICAgICAgbV9zaGFwZSA9IG51bGxwdHI7CiAgICAgICAgIG1fYm91bmRz
ID0gSW50UmVjdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV9zaGFwZSAm
JiAhcmVnaW9uLm1fc2hhcGUpIHsKKyAgICAgICAgbV9ib3VuZHMgPSBpbnRlcnNlY3Rpb24obV9i
b3VuZHMsIHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBT
aGFwZSBpbnRlcnNlY3RlZFNoYXBlID0gU2hhcGU6OmludGVyc2VjdFNoYXBlcyhtX3NoYXBlLCBy
ZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3YXAoaW50ZXJzZWN0ZWRTaGFwZSk7Ci0g
ICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOworICAgIHNldFNoYXBlKFNoYXBlOjppbnRl
cnNlY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBl
ID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9u
Ojp1bml0ZShjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsKICAgICBpZiAocmVnaW9uLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1JlY3QoKSAmJiBtX2JvdW5kcy5jb250YWlu
cyhyZWdpb24ubV9ib3VuZHMpKQorICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9ib3Vu
ZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1fc2hhcGUgPSByZWdpb24uY29weVNoYXBl
KCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKHJlZ2lvbi5pc1JlY3QoKSAmJiBy
ZWdpb24ubV9ib3VuZHMuY29udGFpbnMobV9ib3VuZHMpKSB7Ci0gICAgICAgIG1fc2hhcGUgPSBy
ZWdpb24ubV9zaGFwZTsKICAgICAgICAgbV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAg
ICAgIG1fc2hhcGUgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIC8vIEZJ
WE1FOiBXZSBtYXkgd2FudCBhbm90aGVyIHdheSB0byBjb25zdHJ1Y3QgYSBSZWdpb24gd2l0aG91
dCBkb2luZyB0aGlzIHRlc3Qgd2hlbiB3ZSBleHBlY3QgaXQgdG8gYmUgZmFsc2UuCi0gICAgaWYg
KCFpc1JlY3QoKSAmJiBjb250YWlucyhyZWdpb24pKQorICAgIGlmIChjb250YWlucyhyZWdpb24p
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFwZSB1bml0ZWRTaGFwZSA9IFNoYXBlOjp1bmlv
blNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3YXAodW5p
dGVkU2hhcGUpOwotICAgIG1fYm91bmRzLnVuaXRlKHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgc2V0
U2hhcGUoU2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUgPyAqbV9zaGFwZSA6IG1fYm91bmRzLCBy
ZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6IHJlZ2lvbi5tX2JvdW5kcykpOwogfQog
CiB2b2lkIFJlZ2lvbjo6c3VidHJhY3QoY29uc3QgUmVnaW9uJiByZWdpb24pCiB7Ci0gICAgaWYg
KG1fYm91bmRzLmlzRW1wdHkoKSkKKyAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKHJlZ2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1f
Ym91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgU2hhcGUgc3VidHJhY3RlZFNoYXBlID0gU2hhcGU6OnN1YnRyYWN0U2hhcGVzKG1fc2hhcGUs
IHJlZ2lvbi5tX3NoYXBlKTsKLQotICAgIG1fc2hhcGUuc3dhcChzdWJ0cmFjdGVkU2hhcGUpOwot
ICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsKKyAgICBzZXRTaGFwZShTaGFwZTo6c3Vi
dHJhY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBl
ID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9u
Ojp0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQogewogICAgIG1fYm91bmRzLm1vdmUo
b2Zmc2V0KTsKLSAgICBtX3NoYXBlLnRyYW5zbGF0ZShvZmZzZXQpOworICAgIGlmIChtX3NoYXBl
KQorICAgICAgICBtX3NoYXBlLT50cmFuc2xhdGUob2Zmc2V0KTsKK30KKwordm9pZCBSZWdpb246
OnNldFNoYXBlKFNoYXBlJiYgc2hhcGUpCit7CisgICAgbV9ib3VuZHMgPSBzaGFwZS5ib3VuZHMo
KTsKKworICAgIGlmIChzaGFwZS5pc1JlY3QoKSkgeworICAgICAgICBtX3NoYXBlID0gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAg
bV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KFdURk1vdmUoc2hhcGUpKTsKKyAgICBl
bHNlCisgICAgICAgICptX3NoYXBlID0gV1RGTW92ZShzaGFwZSk7CiB9CiAKKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVn
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVn
aW9uLmgJKHJldmlzaW9uIDI0MjgyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1JlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFJl
Z2lvbl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21w
YXJpc29uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zOCw5ICszOSwxNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKGNvbnN0IEludFJlY3QmKTsKIAorICAgIFdFQkNP
UkVfRVhQT1JUIFJlZ2lvbihjb25zdCBSZWdpb24mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWdp
b24oUmVnaW9uJiYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgflJlZ2lvbigpOworCisgICAgV0VC
Q09SRV9FWFBPUlQgUmVnaW9uJiBvcGVyYXRvcj0oY29uc3QgUmVnaW9uJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgUmVnaW9uJiBvcGVyYXRvcj0oUmVnaW9uJiYpOworCiAgICAgSW50UmVjdCBib3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fYm91bmRzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaXNSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFwZS5pc1JlY3QoKTsgfQorICAgIGJvb2wgaXNSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gIW1fc2hhcGU7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3RvcjxJbnRSZWN0PiBy
ZWN0cygpIGNvbnN0OwogCkBAIC02MCw0NiArNjksMjkgQEAgcHVibGljOgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdW5zaWduZWQgdG90YWxBcmVhKCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBncmlk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuZ3JpZFNpemUoKTsgfQorICAgIHVuc2lnbmVk
IGdyaWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZSA/IG1fc2hhcGUtPmdyaWRTaXplKCkg
OiAwOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5kaWYK
IAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuaXNWYWxpZCgpOyB9
CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0
OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWdpb24+IGRl
Y29kZShEZWNvZGVyJik7CisgICAgLy8gRklYTUU6IFJlbW92ZSBsZWdhY3kgZGVjb2RlLgorICAg
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgUmVn
aW9uJik7CiAKLSAgICAvLyBUaGlzIGlzIGludGVybmFsIHRvIFJlZ2lvbiwgYnV0IGV4cG9zZWQg
anVzdCBmb3IgZW5jb2RpbmcuCi0gICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5
IHRvIGVuY29kZSBXZWJDb3JlIGNsYXNzZXMuCitwcml2YXRlOgogICAgIHN0cnVjdCBTcGFuIHsK
LSAgICAgICAgU3BhbigpCi0gICAgICAgICAgICA6IHkoMCkKLSAgICAgICAgICAgICwgc2VnbWVu
dEluZGV4KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFNwYW4oaW50IHksIHNp
emVfdCBzZWdtZW50SW5kZXgpCi0gICAgICAgICAgICA6IHkoeSkKLSAgICAgICAgICAgICwgc2Vn
bWVudEluZGV4KHNlZ21lbnRJbmRleCkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIGlu
dCB5IHsgMCB9OworICAgICAgICBzaXplX3Qgc2VnbWVudEluZGV4IHsgMCB9OwogCi0gICAgICAg
IGludCB5OwotICAgICAgICBzaXplX3Qgc2VnbWVudEluZGV4OworICAgICAgICB0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTcGFuPiBkZWNvZGUoRGVjb2RlciYp
OwogICAgIH07CiAKLSAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4KLSAgICBjb25z
dCBWZWN0b3I8aW50LCAzMj4mIHNoYXBlU2VnbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NoYXBl
LnNlZ21lbnRzKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8U3BhbiwgMTY+JiBzaGFwZVNwYW5zKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFwZS5zcGFucygpOyB9Ci0KLSAgICB2b2lkIHNldFNoYXBlU2Vn
bWVudHMoY29uc3QgVmVjdG9yPGludD4mIHNlZ21lbnRzKSB7IG1fc2hhcGUuc2V0U2VnbWVudHMo
c2VnbWVudHMpOyB9Ci0gICAgdm9pZCBzZXRTaGFwZVNwYW5zKGNvbnN0IFZlY3RvcjxTcGFuPiYg
c3BhbnMpIHsgbV9zaGFwZS5zZXRTcGFucyhzcGFucyk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpOwotCi1wcml2YXRlOgotCiAgICAgY2xhc3MgU2hh
cGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2hhcGUoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBP
UlQgU2hhcGUoKTsKICAgICAgICAgU2hhcGUoY29uc3QgSW50UmVjdCYpOwogCiAgICAgICAgIElu
dFJlY3QgYm91bmRzKCkgY29uc3Q7CkBAIC0xMjAsMjIgKzExMiwxNSBAQCBwcml2YXRlOgogICAg
ICAgICBzdGF0aWMgU2hhcGUgc3VidHJhY3RTaGFwZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29u
c3QgU2hhcGUmIHNoYXBlMik7CiAKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cmFuc2xh
dGUoY29uc3QgSW50U2l6ZSYpOwotICAgICAgICB2b2lkIHN3YXAoU2hhcGUmKTsKIAogICAgICAg
ICBzdHJ1Y3QgQ29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uOwogICAgICAgICBzdHJ1Y3QgQ29tcGFy
ZUludGVyc2VjdHNPcGVyYXRpb247CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29tcGFy
ZU9wZXJhdGlvbj4KICAgICAgICAgc3RhdGljIGJvb2wgY29tcGFyZVNoYXBlcyhjb25zdCBTaGFw
ZSYgc2hhcGUxLCBjb25zdCBTaGFwZSYgc2hhcGUyKTsKLSAgICAgICAgCi0gICAgICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwotCi0gICAgICAgIC8vIEZvciBlbmNvZGlu
Zy9kZWNvZGluZyBvbmx5LgotICAgICAgICBjb25zdCBWZWN0b3I8aW50LCAzMj4mIHNlZ21lbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50czsgfQotICAgICAgICBjb25zdCBWZWN0b3I8U3Bh
biwgMTY+JiBzcGFucygpIGNvbnN0IHsgcmV0dXJuIG1fc3BhbnM7IH0KIAotICAgICAgICB2b2lk
IHNldFNlZ21lbnRzKGNvbnN0IFZlY3RvcjxpbnQ+JiBzZWdtZW50cykgeyBtX3NlZ21lbnRzID0g
c2VnbWVudHM7IH0KLSAgICAgICAgdm9pZCBzZXRTcGFucyhjb25zdCBWZWN0b3I8U3Bhbj4mIHNw
YW5zKSB7IG1fc3BhbnMgPSBzcGFuczsgfQorICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFwZT4gZGVjb2RlKERlY29kZXImKTsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgdm9pZCBkdW1wKCkgY29uc3Q7CkBAIC0xNjIsMTIgKzE0NywxNiBA
QCBwcml2YXRlOgogICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXBlJiwg
Y29uc3QgU2hhcGUmKTsKICAgICB9OwogCisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBjb3B5
U2hhcGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlID8gc3RkOjptYWtlX3VuaXF1ZTxTaGFwZT4o
Km1fc2hhcGUpIDogbnVsbHB0cjsgfQorICAgIHZvaWQgc2V0U2hhcGUoU2hhcGUmJik7CisKICAg
ICBJbnRSZWN0IG1fYm91bmRzOwotICAgIFNoYXBlIG1fc2hhcGU7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFNoYXBlPiBtX3NoYXBlOwogCiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBS
ZWdpb24mLCBjb25zdCBSZWdpb24mKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNoYXBlJiwgY29uc3QgU2hhcGUmKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNwYW4mLCBjb25zdCBTcGFuJik7CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBT
cGFuJiwgY29uc3QgU3BhbiYpOwogfTsKIAogc3RhdGljIGlubGluZSBSZWdpb24gaW50ZXJzZWN0
KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQpAQCAtMTc3LDcgKzE2Niw3IEBAIHN0
YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChjb25zdCBSZWcKIAogICAgIHJldHVybiByZXN1
bHQ7CiB9Ci0gICAgCisKIHN0YXRpYyBpbmxpbmUgUmVnaW9uIHN1YnRyYWN0KGNvbnN0IFJlZ2lv
biYgYSwgY29uc3QgUmVnaW9uJiBiKQogewogICAgIFJlZ2lvbiByZXN1bHQoYSk7CkBAIC0xOTYs
NyArMTg1LDcgQEAgc3RhdGljIGlubGluZSBSZWdpb24gdHJhbnNsYXRlKGNvbnN0IFJlZwogCiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQog
ewotICAgIHJldHVybiBhLm1fYm91bmRzID09IGIubV9ib3VuZHMgJiYgYS5tX3NoYXBlID09IGIu
bV9zaGFwZTsKKyAgICByZXR1cm4gYS5tX2JvdW5kcyA9PSBiLm1fYm91bmRzICYmIGFyZVBvaW50
aW5nVG9FcXVhbERhdGEoYS5tX3NoYXBlLCBiLm1fc2hhcGUpOwogfQogaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lvbiYgYikKIHsKQEAgLTIxMiwxMSAr
MjAxLDEwOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lvbjo6U3BhCiB7CiAg
ICAgcmV0dXJuIGEueSA9PSBiLnkgJiYgYS5zZWdtZW50SW5kZXggPT0gYi5zZWdtZW50SW5kZXg7
CiB9CisKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVnaW9uOjpTcGFuJiBhLCBjb25z
dCBSZWdpb246OlNwYW4mIGIpCiB7CiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAordGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVnaW9uOjpTcGFuOjplbmNvZGUoRW5jb2RlciYgZW5j
b2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHkgPDwgc2VnbWVudEluZGV4OworfQorCit0
ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBSZWdpb246OlNw
YW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPGludD4geTsKKyAg
ICBkZWNvZGVyID4+IHk7CisgICAgaWYgKCF5KQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
T3B0aW9uYWw8c2l6ZV90PiBzZWdtZW50SW5kZXg7CisgICAgZGVjb2RlciA+PiBzZWdtZW50SW5k
ZXg7CisgICAgaWYgKCFzZWdtZW50SW5kZXgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBy
ZXR1cm4geyB7ICp5LCAqc2VnbWVudEluZGV4IH0gfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KK3ZvaWQgUmVnaW9uOjpTaGFwZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2RlciA8PCBtX3NlZ21lbnRzOworICAgIGVuY29kZXIgPDwgbV9zcGFuczsK
K30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZ2lvbjo6U2hhcGU+IFJl
Z2lvbjo6U2hhcGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZl
Y3RvcjxpbnQ+PiBzZWdtZW50czsKKyAgICBkZWNvZGVyID4+IHNlZ21lbnRzOworICAgIGlmICgh
c2VnbWVudHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxW
ZWN0b3I8UmVnaW9uOjpTcGFuPj4gc3BhbnM7CisgICAgZGVjb2RlciA+PiBzcGFuczsKKyAgICBp
ZiAoIXNwYW5zKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgU2hhcGUgc2hh
cGU7CisgICAgc2hhcGUubV9zZWdtZW50cyA9IFdURk1vdmUoKnNlZ21lbnRzKTsKKyAgICBzaGFw
ZS5tX3NwYW5zID0gV1RGTW92ZSgqc3BhbnMpOworCisgICAgcmV0dXJuIHsgc2hhcGUgfTsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVnaW9uOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fYm91bmRzOworICAgIGJvb2wgaGFz
U2hhcGUgPSAhIW1fc2hhcGU7CisgICAgZW5jb2RlciA8PCBoYXNTaGFwZTsKKyAgICBpZiAoaGFz
U2hhcGUpCisgICAgICAgIGVuY29kZXIgPDwgKm1fc2hhcGU7Cit9CisKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+CitPcHRpb25hbDxSZWdpb24+IFJlZ2lvbjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCit7CisgICAgT3B0aW9uYWw8SW50UmVjdD4gYm91bmRzOworICAgIGRlY29kZXIgPj4gYm91
bmRzOworICAgIGlmICghYm91bmRzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgT3B0aW9uYWw8Ym9vbD4gaGFzU2hhcGU7CisgICAgZGVjb2RlciA+PiBoYXNTaGFwZTsKKyAg
ICBpZiAoIWhhc1NoYXBlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgUmVn
aW9uIHJlZ2lvbiA9IHsgKmJvdW5kcyB9OworCisgICAgaWYgKCpoYXNTaGFwZSkgeworICAgICAg
ICBPcHRpb25hbDxTaGFwZT4gc2hhcGU7CisgICAgICAgIGRlY29kZXIgPj4gc2hhcGU7CisgICAg
ICAgIGlmICghc2hhcGUpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICByZWdpb24ubV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KFdURk1vdmUoKnNoYXBl
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgcmVnaW9uIH07Cit9CisKK3RlbXBsYXRlPGNsYXNz
IERlY29kZXI+Citib29sIFJlZ2lvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlZ2lvbiYg
cmVnaW9uKQoreworICAgIE9wdGlvbmFsPFJlZ2lvbj4gZGVjb2RlZFJlZ2lvbjsKKyAgICBkZWNv
ZGVyID4+IGRlY29kZWRSZWdpb247CisgICAgaWYgKCFkZWNvZGVkUmVnaW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmVnaW9uID0gV1RGTW92ZSgqZGVjb2RlZFJlZ2lvbik7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJl
Z2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjQyOTQxKQorKysgU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAxOS0wMy0xNCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgT3B0aW1pemUgUmVnaW9u
IGZvciBzaW5nbGUgcmVjdGFuZ2xlIGNhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NTc0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwOgorICAgICAgICAo
SVBDOjpEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6ZGVjb2Rl
KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5oOgorICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9FbmNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6RW5jb2Rlcjo6ZW5jb2RlKToKKworICAg
ICAgICBBZGQgc2l6ZV90IHByaW1pdGl2ZSBzdXBwb3J0LgorCisgICAgICAgICogUGxhdGZvcm0v
SVBDL0VuY29kZXIuaDoKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEV2
ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2Rl
cjxSZWdpb246OlNwYW4+OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVu
dENvZGVyPFJlZ2lvbjo6U3Bhbj46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFy
Z3VtZW50Q29kZXI8UmVnaW9uPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJn
dW1lbnRDb2RlcjxSZWdpb24+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKwogMjAxOS0wMy0xMyAgWmFsYW4gQnVqdGFzICA8emFs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtDb250ZW50Q2hhbmdlT2JzZXJ2ZXJdIFN0b3AgY29u
dGVudCBvYnNlcnZhdGlvbiB3aGVuIGNvbnRlbnQgY2FsbHMgcHJldmVudERlZmF1bHQoKSBvbiB0
b3VjaCBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCShy
ZXZpc2lvbiAyNDI4MjgpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1MCwxMSBAQCBEZWNvZGVyJiBEZWNvZGVyOjpv
cGVyYXRvcj4+KE9wdGlvbmFsPGRvCiAgICAgcmV0dXJuIGdldE9wdGlvbmFsKG9wdGlvbmFsKTsK
IH0KIAorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihPcHRpb25hbDxzaXplX3Q+JiBvcHRp
b25hbCkKK3sKKyAgICByZXR1cm4gZ2V0T3B0aW9uYWwob3B0aW9uYWwpOworfQorCiBib29sIERl
Y29kZXI6OmRlY29kZShib29sJiByZXN1bHQpCiB7CiAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0
aW9uKHNpemVvZihyZXN1bHQpLCBzaXplb2YocmVzdWx0KSkpCkBAIC0zNDAsNiArMzQ1LDE1IEBA
IGJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGRvdWJsZSYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIERlY29kZXI6OmRlY29kZShzaXplX3QmIHJlc3VsdCkKK3sKKyAgICBpZiAoIWFs
aWduQnVmZmVyUG9zaXRpb24oc2l6ZW9mKHJlc3VsdCksIHNpemVvZihyZXN1bHQpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZGVjb2RlVmFsdWVGcm9tQnVmZmVyKHJlc3VsdCwgbV9i
dWZmZXJQb3MpOworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIERlY29kZXI6OnJlbW92ZUF0
dGFjaG1lbnQoQXR0YWNobWVudCYgYXR0YWNobWVudCkKIHsKICAgICBpZiAobV9hdHRhY2htZW50
cy5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZp
c2lvbiAyNDI4MjgpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDggQEAgcHVibGljOgogICAgIERlY29kZXImIG9wZXJh
dG9yPj4oT3B0aW9uYWw8ZmxvYXQ+Jik7CiAgICAgYm9vbCBkZWNvZGUoZG91YmxlJik7CiAgICAg
RGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxkb3VibGU+Jik7CisgICAgYm9vbCBkZWNvZGUo
c2l6ZV90Jik7CisgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxzaXplX3Q+Jik7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPgogICAgIGF1dG8gZGVjb2RlKEUmIGUpIC0+IHN0ZDo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZSwgYm9vbD4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCShyZXZpc2lvbiAyNDI4MjgpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDYg
KzI1NiwxMiBAQCB2b2lkIEVuY29kZXI6OmVuY29kZShkb3VibGUgbikKICAgICBjb3B5VmFsdWVU
b0J1ZmZlcihuLCBidWZmZXIpOwogfQogCit2b2lkIEVuY29kZXI6OmVuY29kZShzaXplX3QgbikK
K3sKKyAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVvZihuKSwgc2l6ZW9mKG4pKTsKKyAg
ICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOworfQorCiB2b2lkIEVuY29kZXI6OmFkZEF0
dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCiB7CiAgICAgbV9hdHRhY2htZW50cy5h
cHBlbmQoV1RGTW92ZShhdHRhY2htZW50KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
RW5jb2Rlci5oCShyZXZpc2lvbiAyNDI4MjgpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZW5jb2RlKGludDY0X3QpOwogICAgIHZvaWQgZW5jb2RlKGZsb2F0KTsKICAgICB2
b2lkIGVuY29kZShkb3VibGUpOworICAgIHZvaWQgZW5jb2RlKHNpemVfdCk7CiAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFPgogICAgIGF1dG8gZW5jb2RlKEUgdmFsdWUpIC0+IHN0ZDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjQyODI4KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY4LDggKzM2OCw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVn
aW9ucz4KIAogYm9vbCBBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIEV2ZW50VHJhY2tpbmdSZWdpb25zJiBldmVudFRyYWNraW5nUmVn
aW9ucykKIHsKLSAgICBSZWdpb24gYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb247Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbikpCisgICAgT3B0aW9u
YWw8UmVnaW9uPiBhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGFz
eW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9uOworICAgIGlmICghYXN5bmNocm9ub3VzRGlzcGF0Y2hS
ZWdpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIYXNoTWFwPFN0cmluZywgUmVnaW9u
PiBldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnM7CiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpKQpAQCAt
Mzc5LDcgKzM4MCw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4K
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRvdWNoQWN0aW9uRGF0YSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICNlbmRpZgotICAgIGV2ZW50VHJhY2tpbmdSZWdpb25zLmFzeW5jaHJvbm91c0Rp
c3BhdGNoUmVnaW9uID0gV1RGTW92ZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbik7CisgICAg
ZXZlbnRUcmFja2luZ1JlZ2lvbnMuYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24gPSBXVEZNb3Zl
KCphc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbik7CiAgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMu
ZXZlbnRTcGVjaWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb25zID0gV1RGTW92ZShldmVudFNw
ZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpOwogI2lmIEVOQUJMRShQT0lOVEVSX0VW
RU5UUykKICAgICBldmVudFRyYWNraW5nUmVnaW9ucy50b3VjaEFjdGlvbkRhdGEgPSBXVEZNb3Zl
KHRvdWNoQWN0aW9uRGF0YSk7CkBAIC05MDMsNjYgKzkwNCw2IEBAIE9wdGlvbmFsPFJlY2VudFNl
YXJjaD4gQXJndW1lbnRDb2RlcjxSZWMKICAgICByZXR1cm4ge3sgV1RGTW92ZSgqc3RyaW5nKSwg
V1RGTW92ZSgqdGltZSkgfX07CiB9CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8
UmVnaW9uOjpTcGFuPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBS
ZWdpb246OlNwYW4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBkZWNvZGUo
RGVjb2RlciYpOwotfTsKLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWdpb246OlNwYW4mIHNwYW4pCi17Ci0gICAgZW5j
b2RlciA8PCBzcGFuLnk7Ci0gICAgZW5jb2RlciA8PCAodWludDY0X3Qpc3Bhbi5zZWdtZW50SW5k
ZXg7Ci19Ci0KLU9wdGlvbmFsPFJlZ2lvbjo6U3Bhbj4gQXJndW1lbnRDb2RlcjxSZWdpb246OlNw
YW4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBSZWdpb246OlNwYW4gc3BhbjsK
LSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNwYW4ueSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgCi0gICAgdWludDY0X3Qgc2VnbWVudEluZGV4OwotICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoc2VnbWVudEluZGV4KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAg
ICAKLSAgICBzcGFuLnNlZ21lbnRJbmRleCA9IHNlZ21lbnRJbmRleDsKLSAgICByZXR1cm4gV1RG
TW92ZShzcGFuKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBlbmNvZGVyLmVuY29k
ZShyZWdpb24uc2hhcGVTZWdtZW50cygpKTsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hh
cGVTcGFucygpKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBWZWN0b3I8aW50PiBzZWdtZW50
czsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNlZ21lbnRzKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgVmVjdG9yPFJlZ2lvbjo6U3Bhbj4gc3BhbnM7Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShzcGFucykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZWdpb24u
c2V0U2hhcGVTZWdtZW50cyhzZWdtZW50cyk7Ci0gICAgcmVnaW9uLnNldFNoYXBlU3BhbnMoc3Bh
bnMpOwotICAgIHJlZ2lvbi51cGRhdGVCb3VuZHNGcm9tU2hhcGUoKTsKLSAgICAKLSAgICBpZiAo
IXJlZ2lvbi5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1PcHRpb25hbDxSZWdpb24+IEFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgUmVnaW9uIHJlZ2lvbjsKLSAgICBpZiAoIWRlY29k
ZShkZWNvZGVyLCByZWdpb24pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAg
cmV0dXJuIHJlZ2lvbjsKLX0KLQogdm9pZCBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBMZW5ndGgmIGxlbmd0aCkKIHsKICAgICBTaW1wbGVBcmd1
bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBsZW5ndGgpOwpAQCAtOTczLDcgKzkx
NCw2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoRGVjb2QKICAgICByZXR1
cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgbGVuZ3RoKTsK
IH0KIAotCiB2b2lkIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYgdmlld3BvcnRBdHRyaWJ1
dGVzKQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5j
b2RlKGVuY29kZXIsIHZpZXdwb3J0QXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjQyODI4KQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyMywxMiArMzIzLDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOgogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpQYXRoPiBkZWNvZGUoRGVjb2RlciYp
OwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZWdpb24+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlJlZ2lv
biYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6UmVnaW9uJik7
Ci0gICAgc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OlJlZ2lvbj4gZGVjb2RlKERlY29kZXImKTsK
LX07Ci0KIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7
CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgm
KTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okxlbmd0aCYpOwpJ
bmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQkocmV2aXNpb24gMjQyODI4
KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTUsMTAgKzUxNSwxMSBAQCBib29s
IFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByCiAgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoaGFzRXZlbnRSZWdpb24pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBpZiAoaGFzRXZlbnRSZWdpb24pIHsKLSAgICAgICAgICAgIGF1dG8gZXZlbnRSZWdpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlJlZ2lvbj4oKTsKLSAgICAgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoKmV2ZW50UmVnaW9uKSkKKyAgICAgICAgICAgIE9wdGlvbmFsPFdlYkNv
cmU6OlJlZ2lvbj4gZXZlbnRSZWdpb247CisgICAgICAgICAgICBkZWNvZGVyID4+IGV2ZW50UmVn
aW9uOworICAgICAgICAgICAgaWYgKCFldmVudFJlZ2lvbikKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQuZXZlbnRSZWdpb24gPSBXVEZNb3ZlKGV2ZW50
UmVnaW9uKTsKKyAgICAgICAgICAgIHJlc3VsdC5ldmVudFJlZ2lvbiA9IHN0ZDo6bWFrZV91bmlx
dWU8UmVnaW9uPihXVEZNb3ZlKCpldmVudFJlZ2lvbikpOwogICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364659</attachid>
            <date>2019-03-14 08:14:27 -0700</date>
            <delta_ts>2019-03-15 02:27:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize-2.patch</filename>
            <type>text/plain</type>
            <size>27436</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW5zdHJ1bWVudGF0aW9uIHNob3dzIHZhc3QgbWFqb3JpdHkgb2YgUmVn
aW9uIG9iamVjdHMgY29uc2lzdCBvZiBhIHNpbmdsZSByZWN0YW5nbGUuIEhvd2V2ZXIgaXQgYWx3
YXlzIGFsbG9jYXRlcworICAgICAgICB0aGUgbGFyZ2UgU2hhcGUgZGF0YSBzdHJ1Y3R1cmUuIFRo
aXMgbWFrZXMgaXQgdW5zdWl0YWJsZSB0byB1c2UgYXMgYSBtZW1iZXIgaW4gYW55IHBvcHVsYXIg
b2JqZWN0cy4KKworICAgICAgICBUaGlzIHBhdGNoIG9wdGltaXplcyB0aGUgc2luZ2xlIHJlY3Rh
bmdsZSBjYXNlIGJ5IHVzaW5nIG9ubHkgdGhlIGJvdW5kcyByZWN0YW5nbGUgdG8gZGVzY3JpYmUg
aXQuCisgICAgICAgIFNoYXBlIGlzIGFsbG9jYXRlZCBvbiBkZW1hbmQuIFRoaXMgbWFrZXMgaXQg
c2FmZSB0byB1c2UgUmVnaW9uIGFzIGEgZGF0YSBtZW1iZXIgd2hlcmUgYSByZWN0YW5nbGUgaXMg
dGhlIGNvbW1vbiBjYXNlLgorCisgICAgICAgIFRoZSBwYXRjaCBhbHNvIG1vZGVybml6ZXMgUmVn
aW9uIGVuY29kaW5nL2RlY29kaW5nIHN1cHBvcnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9SZWdpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpSZWdpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVnaW9uOjp+UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6cmVjdHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OmludGVyc2VjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
OjpTaGFwZTo6U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6YXBwZW5k
U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmR1bXAgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVnaW9uOjppbnRlcnNlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjp1
bml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnN1YnRyYWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0
U2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6aXNWYWxpZCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpzd2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dXBkYXRlQm91bmRzRnJvbVNoYXBlKTogRGVs
ZXRlZC4KKworICAgICAgICBSZW1vdmUgc29tZSBub3cgdW51c2VkIGZ1bmN0aW9uLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZWdp
b246OmlzUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmdyaWRTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29weVNoYXBlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTcGFu
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTcGFuOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpb246OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmRlY29kZSk6
CisKKyAgICAgICAgVGhpcyBpcyBub3cgcGFydCBvZiB0eXBlLgorCisgICAgICAgIChXZWJDb3Jl
OjpSZWdpb246OmlzVmFsaWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjpTcGFuOjpTcGFuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2hh
cGVTZWdtZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNo
YXBlU3BhbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzZXRT
aGFwZVNlZ21lbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTcGFucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpzZWdt
ZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpz
cGFucyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpz
ZXRTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpz
ZXRTcGFucyk6IERlbGV0ZWQuCisKKyAgICAgICAgTm8gbmVlZCB0byBleHBvc2UgdGhlc2UgZm9y
IGVuY29kaW5nIGFueW1vcmUuCisKIDIwMTktMDMtMTQgIERldmluIFJvdXNzbyAgPGRyb3Vzc29A
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEF1ZGl0OiBwcm92aWRlIGEgd2F5
IHRvIGdldCB0aGUgY29udGVudHMgb2YgcmVzb3VyY2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAJKHJldmlzaW9uIDI0Mjk0MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDE5ICs0Miw1NCBAQCBSZWdpb246OlJlZ2lvbigpCiAKIFJlZ2lvbjo6UmVnaW9uKGNvbnN0
IEludFJlY3QmIHJlY3QpCiAgICAgOiBtX2JvdW5kcyhyZWN0KQotICAgICwgbV9zaGFwZShyZWN0
KQogewogfQogCitSZWdpb246OlJlZ2lvbihjb25zdCBSZWdpb24mIG90aGVyKQorICAgIDogbV9i
b3VuZHMob3RoZXIubV9ib3VuZHMpCisgICAgLCBtX3NoYXBlKG90aGVyLmNvcHlTaGFwZSgpKQor
eworfQorCitSZWdpb246OlJlZ2lvbihSZWdpb24mJiBvdGhlcikKKyAgICA6IG1fYm91bmRzKFdU
Rk1vdmUob3RoZXIubV9ib3VuZHMpKQorICAgICwgbV9zaGFwZShXVEZNb3ZlKG90aGVyLm1fc2hh
cGUpKQoreworfQorCitSZWdpb246On5SZWdpb24oKQoreworfQorCitSZWdpb24mIFJlZ2lvbjo6
b3BlcmF0b3I9KGNvbnN0IFJlZ2lvbiYgb3RoZXIpCit7CisgICAgbV9ib3VuZHMgPSBvdGhlci5t
X2JvdW5kczsKKyAgICBtX3NoYXBlID0gb3RoZXIuY29weVNoYXBlKCk7CisgICAgcmV0dXJuICp0
aGlzOworfQorCitSZWdpb24mIFJlZ2lvbjo6b3BlcmF0b3I9KFJlZ2lvbiYmIG90aGVyKQorewor
ICAgIG1fYm91bmRzID0gV1RGTW92ZShvdGhlci5tX2JvdW5kcyk7CisgICAgbV9zaGFwZSA9IFdU
Rk1vdmUob3RoZXIubV9zaGFwZSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCiBWZWN0b3I8SW50
UmVjdD4gUmVnaW9uOjpyZWN0cygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3Rz
OwogCi0gICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLnNwYW5zX2Jl
Z2luKCksIGVuZCA9IG1fc2hhcGUuc3BhbnNfZW5kKCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAx
ICE9IGVuZDsgKytzcGFuKSB7CisgICAgaWYgKCFtX3NoYXBlKSB7CisgICAgICAgIGlmICghbV9i
b3VuZHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmVjdHMuYXBwZW5kKG1fYm91bmRzKTsKKyAg
ICAgICAgcmV0dXJuIHJlY3RzOworICAgIH0KKworICAgIGZvciAoU2hhcGU6OlNwYW5JdGVyYXRv
ciBzcGFuID0gbV9zaGFwZS0+c3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS0+c3BhbnNfZW5k
KCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytzcGFuKSB7CiAgICAgICAgIGlu
dCB5ID0gc3Bhbi0+eTsKICAgICAgICAgaW50IGhlaWdodCA9IChzcGFuICsgMSktPnkgLSB5Owog
Ci0gICAgICAgIGZvciAoU2hhcGU6OlNlZ21lbnRJdGVyYXRvciBzZWdtZW50ID0gbV9zaGFwZS5z
ZWdtZW50c19iZWdpbihzcGFuKSwgZW5kID0gbV9zaGFwZS5zZWdtZW50c19lbmQoc3Bhbik7IHNl
Z21lbnQgIT0gZW5kICYmIHNlZ21lbnQgKyAxICE9IGVuZDsgc2VnbWVudCArPSAyKSB7CisgICAg
ICAgIGZvciAoU2hhcGU6OlNlZ21lbnRJdGVyYXRvciBzZWdtZW50ID0gbV9zaGFwZS0+c2VnbWVu
dHNfYmVnaW4oc3BhbiksIGVuZCA9IG1fc2hhcGUtPnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVu
dCAhPSBlbmQgJiYgc2VnbWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKICAgICAgICAg
ICAgIGludCB4ID0gKnNlZ21lbnQ7CiAgICAgICAgICAgICBpbnQgd2lkdGggPSAqKHNlZ21lbnQg
KyAxKSAtIHg7CiAKQEAgLTcwLDcgKzEwNSwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFpbnMoY29u
c3QgUmVnaW9uJiByZWdpCiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhyZWdpb24ubV9ib3Vu
ZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVT
aGFwZXM8U2hhcGU6OkNvbXBhcmVDb250YWluc09wZXJhdGlvbj4obV9zaGFwZSwgcmVnaW9uLm1f
c2hhcGUpOworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVDb250YWluc09wZXJhdGlv
bj4oKm1fc2hhcGUsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogU2hhcGUocmVn
aW9uLm1fYm91bmRzKSk7CiB9CiAKIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0CkBAIC03OCw3ICsxMTYsMTAgQEAgYm9vbCBSZWdpb246OmNvbnRhaW5z
KGNvbnN0IEludFBvaW50JiBwbwogICAgIGlmICghbV9ib3VuZHMuY29udGFpbnMocG9pbnQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0b3Igc3Bh
biA9IG1fc2hhcGUuc3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19lbmQoKTsgc3Bh
biAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAoIW1fc2hhcGUp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNw
YW4gPSBtX3NoYXBlLT5zcGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19lbmQoKTsg
c3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAgaW50IHkg
PSBzcGFuLT55OwogICAgICAgICBpbnQgbWF4WSA9IChzcGFuICsgMSktPnk7CiAKQEAgLTg3LDcg
KzEyOCw3IEBAIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG8KICAgICAg
ICAgaWYgKG1heFkgPD0gcG9pbnQueSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgZm9yIChTaGFwZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNlZ21lbnRz
X2JlZ2luKHNwYW4pLCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAh
PSBlbmQgJiYgc2VnbWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAgICAgZm9y
IChTaGFwZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50c19iZWdp
bihzcGFuKSwgZW5kID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVu
ZCAmJiBzZWdtZW50ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAgICAgaW50
IHggPSAqc2VnbWVudDsKICAgICAgICAgICAgIGludCBtYXhYID0gKihzZWdtZW50ICsgMSk7CiAK
QEAgLTEwNiw3ICsxNDcsMTAgQEAgYm9vbCBSZWdpb246OmludGVyc2VjdHMoY29uc3QgUmVnaW9u
JiByZQogICAgIGlmICghbV9ib3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hh
cGU6OkNvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7
CisgICAgaWYgKCFtX3NoYXBlICYmICFyZWdpb24ubV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRl
cnNlY3RzT3BlcmF0aW9uPihtX3NoYXBlID8gKm1fc2hhcGUgOiBtX2JvdW5kcywgcmVnaW9uLm1f
c2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiByZWdpb24ubV9ib3VuZHMpOwogfQogCiB1bnNpZ25l
ZCBSZWdpb246OnRvdGFsQXJlYSgpIGNvbnN0CkBAIC0yMjYsMTYgKzI3MCwxNCBAQCBSZWdpb246
OlNoYXBlOjpTaGFwZSgpCiB9CiAKIFJlZ2lvbjo6U2hhcGU6OlNoYXBlKGNvbnN0IEludFJlY3Qm
IHJlY3QpCisgICAgOiBtX3NlZ21lbnRzKHsgcmVjdC54KCksIHJlY3QubWF4WCgpIH0pCisgICAg
LCBtX3NwYW5zKHsgeyByZWN0LnkoKSwgMCB9LCB7IHJlY3QubWF4WSgpLCAyIH0gfSkKIHsKLSAg
ICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QueCgpKTsKLSAg
ICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgpKTsKLSAgICBhcHBlbmRTcGFuKHJlY3QubWF4WSgp
KTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFuKGludCB5KQogewotICAgIG1f
c3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdtZW50cy5zaXplKCkpKTsKKyAgICBtX3NwYW5zLmFw
cGVuZCh7IHksIG1fc2VnbWVudHMuc2l6ZSgpIH0pOwogfQogCiBib29sIFJlZ2lvbjo6U2hhcGU6
OmNhbkNvYWxlc2NlKFNlZ21lbnRJdGVyYXRvciBiZWdpbiwgU2VnbWVudEl0ZXJhdG9yIGVuZCkK
QEAgLTMzMSwyNyArMzczLDYgQEAgdm9pZCBSZWdpb246OlNoYXBlOjpkdW1wKCkgY29uc3QKIH0K
ICNlbmRpZgogCi1ib29sIFJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQoKSBjb25zdAotewotICAgIGZv
ciAoYXV0byBzcGFuID0gc3BhbnNfYmVnaW4oKSwgZW5kID0gc3BhbnNfZW5kKCk7IHNwYW4gIT0g
ZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytzcGFuKSB7Ci0gICAgICAgIGludCB5ID0gc3Bhbi0+
eTsKLSAgICAgICAgaW50IGhlaWdodCA9IChzcGFuICsgMSktPnkgLSB5OwotICAgICAgICAKLSAg
ICAgICAgaWYgKGhlaWdodCA8IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgZm9yIChhdXRvIHNlZ21lbnQgPSBzZWdtZW50c19iZWdpbihzcGFuKSwgZW5kID0gc2VnbWVu
dHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsgMSAhPSBlbmQ7IHNlZ21l
bnQgKz0gMikgewotICAgICAgICAgICAgaW50IHggPSAqc2VnbWVudDsKLSAgICAgICAgICAgIGlu
dCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogSW50UmVjdCBSZWdpb246OlNoYXBlOjpi
b3VuZHMoKSBjb25zdAogewogICAgIGlmIChpc0VtcHR5KCkpCkBAIC0zOTcsMTIgKzQxOCw2IEBA
IHZvaWQgUmVnaW9uOjpTaGFwZTo6dHJhbnNsYXRlKGNvbnN0IEludFMKICAgICAgICAgbV9zcGFu
c1tpXS55ICs9IG9mZnNldC5oZWlnaHQoKTsKIH0KIAotdm9pZCBSZWdpb246OlNoYXBlOjpzd2Fw
KFNoYXBlJiBvdGhlcikKLXsKLSAgICBtX3NlZ21lbnRzLnN3YXAob3RoZXIubV9zZWdtZW50cyk7
Ci0gICAgbV9zcGFucy5zd2FwKG90aGVyLm1fc3BhbnMpOwotfQotCiBlbnVtIHsKICAgICBTaGFw
ZTEsCiAgICAgU2hhcGUyLApAQCAtNTY3LDcxICs1ODIsODEgQEAgdm9pZCBSZWdpb246OmR1bXAo
KSBjb25zdAogewogICAgIHByaW50ZigiQm91bmRzOiAoJWQsICVkLCAlZCwgJWQpXG4iLAogICAg
ICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91bmRzLnkoKSwgbV9ib3VuZHMud2lkdGgoKSwgbV9i
b3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fc2hhcGUuZHVtcCgpOworICAgIGlmIChtX3NoYXBlKQor
ICAgICAgICBtX3NoYXBlLT5kdW1wKCk7CiB9CiAjZW5kaWYKIAotdm9pZCBSZWdpb246OnVwZGF0
ZUJvdW5kc0Zyb21TaGFwZSgpCi17Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOwot
fQotCiB2b2lkIFJlZ2lvbjo6aW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQogewogICAg
IGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91
bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkgewotICAgICAgICBtX3NoYXBlID0gU2hh
cGUoKTsKKyAgICAgICAgbV9zaGFwZSA9IG51bGxwdHI7CiAgICAgICAgIG1fYm91bmRzID0gSW50
UmVjdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV9zaGFwZSAmJiAhcmVn
aW9uLm1fc2hhcGUpIHsKKyAgICAgICAgbV9ib3VuZHMgPSBpbnRlcnNlY3Rpb24obV9ib3VuZHMs
IHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBTaGFwZSBp
bnRlcnNlY3RlZFNoYXBlID0gU2hhcGU6OmludGVyc2VjdFNoYXBlcyhtX3NoYXBlLCByZWdpb24u
bV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3YXAoaW50ZXJzZWN0ZWRTaGFwZSk7Ci0gICAgbV9i
b3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOworICAgIHNldFNoYXBlKFNoYXBlOjppbnRlcnNlY3RT
aGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJl
Z2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp1bml0
ZShjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsKICAgICBpZiAocmVnaW9uLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChpc1JlY3QoKSAmJiBtX2JvdW5kcy5jb250YWlucyhyZWdp
b24ubV9ib3VuZHMpKQorICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgbV9ib3VuZHMgPSBy
ZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1fc2hhcGUgPSByZWdpb24uY29weVNoYXBlKCk7CiAg
ICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKHJlZ2lvbi5pc1JlY3QoKSAmJiByZWdpb24u
bV9ib3VuZHMuY29udGFpbnMobV9ib3VuZHMpKSB7Ci0gICAgICAgIG1fc2hhcGUgPSByZWdpb24u
bV9zaGFwZTsKICAgICAgICAgbV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1f
c2hhcGUgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIC8vIEZJWE1FOiBX
ZSBtYXkgd2FudCBhbm90aGVyIHdheSB0byBjb25zdHJ1Y3QgYSBSZWdpb24gd2l0aG91dCBkb2lu
ZyB0aGlzIHRlc3Qgd2hlbiB3ZSBleHBlY3QgaXQgdG8gYmUgZmFsc2UuCi0gICAgaWYgKCFpc1Jl
Y3QoKSAmJiBjb250YWlucyhyZWdpb24pKQorICAgIGlmIChjb250YWlucyhyZWdpb24pKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBTaGFwZSB1bml0ZWRTaGFwZSA9IFNoYXBlOjp1bmlvblNoYXBl
cyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3YXAodW5pdGVkU2hh
cGUpOwotICAgIG1fYm91bmRzLnVuaXRlKHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgc2V0U2hhcGUo
U2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUgPyAqbV9zaGFwZSA6IG1fYm91bmRzLCByZWdpb24u
bV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6IHJlZ2lvbi5tX2JvdW5kcykpOwogfQogCiB2b2lk
IFJlZ2lvbjo6c3VidHJhY3QoY29uc3QgUmVnaW9uJiByZWdpb24pCiB7Ci0gICAgaWYgKG1fYm91
bmRzLmlzRW1wdHkoKSkKKyAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAg
aWYgKHJlZ2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91bmRz
LmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hh
cGUgc3VidHJhY3RlZFNoYXBlID0gU2hhcGU6OnN1YnRyYWN0U2hhcGVzKG1fc2hhcGUsIHJlZ2lv
bi5tX3NoYXBlKTsKLQotICAgIG1fc2hhcGUuc3dhcChzdWJ0cmFjdGVkU2hhcGUpOwotICAgIG1f
Ym91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsKKyAgICBzZXRTaGFwZShTaGFwZTo6c3VidHJhY3RT
aGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJl
Z2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp0cmFu
c2xhdGUoY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQogewogICAgIG1fYm91bmRzLm1vdmUob2Zmc2V0
KTsKLSAgICBtX3NoYXBlLnRyYW5zbGF0ZShvZmZzZXQpOworICAgIGlmIChtX3NoYXBlKQorICAg
ICAgICBtX3NoYXBlLT50cmFuc2xhdGUob2Zmc2V0KTsKK30KKwordm9pZCBSZWdpb246OnNldFNo
YXBlKFNoYXBlJiYgc2hhcGUpCit7CisgICAgbV9ib3VuZHMgPSBzaGFwZS5ib3VuZHMoKTsKKwor
ICAgIGlmIChzaGFwZS5pc1JlY3QoKSkgeworICAgICAgICBtX3NoYXBlID0gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgbV9zaGFw
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KFdURk1vdmUoc2hhcGUpKTsKKyAgICBlbHNlCisg
ICAgICAgICptX3NoYXBlID0gV1RGTW92ZShzaGFwZSk7CiB9CiAKKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgJ
KHJldmlzaW9uIDI0Mjk0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Jl
Z2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVmaW5lIFJlZ2lvbl9o
CiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICs0MCwxNyBAQCBwdWJsaWM6CiAgICAgV0VC
Q09SRV9FWFBPUlQgUmVnaW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKGNvbnN0IElu
dFJlY3QmKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbihjb25zdCBSZWdpb24mKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBSZWdpb24oUmVnaW9uJiYpOworCisgICAgV0VCQ09SRV9FWFBPUlQg
flJlZ2lvbigpOworCisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uJiBvcGVyYXRvcj0oY29uc3Qg
UmVnaW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uJiBvcGVyYXRvcj0oUmVnaW9uJiYp
OworCiAgICAgSW50UmVjdCBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzLmlzRW1wdHkoKTsgfQotICAg
IGJvb2wgaXNSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5pc1JlY3QoKTsgfQorICAgIGJv
b2wgaXNSZWN0KCkgY29uc3QgeyByZXR1cm4gIW1fc2hhcGU7IH0KIAogICAgIFdFQkNPUkVfRVhQ
T1JUIFZlY3RvcjxJbnRSZWN0PiByZWN0cygpIGNvbnN0OwogCkBAIC02MCw0NiArNzAsMjkgQEAg
cHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgdG90YWxBcmVhKCkgY29uc3Q7
CiAKLSAgICB1bnNpZ25lZCBncmlkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuZ3JpZFNp
emUoKTsgfQorICAgIHVuc2lnbmVkIGdyaWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZSA/
IG1fc2hhcGUtPmdyaWRTaXplKCkgOiAwOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBk
dW1wKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hhcGUuaXNWYWxpZCgpOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBPcHRpb25hbDxSZWdpb24+IGRlY29kZShEZWNvZGVyJik7CisgICAgLy8gRklYTUU6IFJlbW92
ZSBsZWdhY3kgZGVjb2RlLgorICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBib29s
IGRlY29kZShEZWNvZGVyJiwgUmVnaW9uJik7CiAKLSAgICAvLyBUaGlzIGlzIGludGVybmFsIHRv
IFJlZ2lvbiwgYnV0IGV4cG9zZWQganVzdCBmb3IgZW5jb2RpbmcuCi0gICAgLy8gRklYTUU6IGZp
Z3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGVuY29kZSBXZWJDb3JlIGNsYXNzZXMuCitwcml2YXRl
OgogICAgIHN0cnVjdCBTcGFuIHsKLSAgICAgICAgU3BhbigpCi0gICAgICAgICAgICA6IHkoMCkK
LSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KDApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIFNwYW4oaW50IHksIHNpemVfdCBzZWdtZW50SW5kZXgpCi0gICAgICAgICAgICA6IHko
eSkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KHNlZ21lbnRJbmRleCkKLSAgICAgICAgewot
ICAgICAgICB9CisgICAgICAgIGludCB5IHsgMCB9OworICAgICAgICBzaXplX3Qgc2VnbWVudElu
ZGV4IHsgMCB9OwogCi0gICAgICAgIGludCB5OwotICAgICAgICBzaXplX3Qgc2VnbWVudEluZGV4
OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikg
Y29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxT
cGFuPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKLSAgICAvLyBGb3IgZW5jb2RpbmcvZGVj
b2Rpbmcgb25seS4KLSAgICBjb25zdCBWZWN0b3I8aW50LCAzMj4mIHNoYXBlU2VnbWVudHMoKSBj
b25zdCB7IHJldHVybiBtX3NoYXBlLnNlZ21lbnRzKCk7IH0KLSAgICBjb25zdCBWZWN0b3I8U3Bh
biwgMTY+JiBzaGFwZVNwYW5zKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5zcGFucygpOyB9Ci0K
LSAgICB2b2lkIHNldFNoYXBlU2VnbWVudHMoY29uc3QgVmVjdG9yPGludD4mIHNlZ21lbnRzKSB7
IG1fc2hhcGUuc2V0U2VnbWVudHMoc2VnbWVudHMpOyB9Ci0gICAgdm9pZCBzZXRTaGFwZVNwYW5z
KGNvbnN0IFZlY3RvcjxTcGFuPiYgc3BhbnMpIHsgbV9zaGFwZS5zZXRTcGFucyhzcGFucyk7IH0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpOwotCi1wcml2
YXRlOgotCiAgICAgY2xhc3MgU2hhcGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2hhcGUoKTsK
KyAgICAgICAgV0VCQ09SRV9FWFBPUlQgU2hhcGUoKTsKICAgICAgICAgU2hhcGUoY29uc3QgSW50
UmVjdCYpOwogCiAgICAgICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7CkBAIC0xMjAsMjIgKzEx
MywxNSBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWMgU2hhcGUgc3VidHJhY3RTaGFwZXMoY29u
c3QgU2hhcGUmIHNoYXBlMSwgY29uc3QgU2hhcGUmIHNoYXBlMik7CiAKICAgICAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYpOwotICAgICAgICB2b2lkIHN3
YXAoU2hhcGUmKTsKIAogICAgICAgICBzdHJ1Y3QgQ29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uOwog
ICAgICAgICBzdHJ1Y3QgQ29tcGFyZUludGVyc2VjdHNPcGVyYXRpb247CiAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29tcGFyZU9wZXJhdGlvbj4KICAgICAgICAgc3RhdGljIGJvb2wgY29t
cGFyZVNoYXBlcyhjb25zdCBTaGFwZSYgc2hhcGUxLCBjb25zdCBTaGFwZSYgc2hhcGUyKTsKLSAg
ICAgICAgCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwotCi0g
ICAgICAgIC8vIEZvciBlbmNvZGluZy9kZWNvZGluZyBvbmx5LgotICAgICAgICBjb25zdCBWZWN0
b3I8aW50LCAzMj4mIHNlZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50czsgfQotICAg
ICAgICBjb25zdCBWZWN0b3I8U3BhbiwgMTY+JiBzcGFucygpIGNvbnN0IHsgcmV0dXJuIG1fc3Bh
bnM7IH0KIAotICAgICAgICB2b2lkIHNldFNlZ21lbnRzKGNvbnN0IFZlY3RvcjxpbnQ+JiBzZWdt
ZW50cykgeyBtX3NlZ21lbnRzID0gc2VnbWVudHM7IH0KLSAgICAgICAgdm9pZCBzZXRTcGFucyhj
b25zdCBWZWN0b3I8U3Bhbj4mIHNwYW5zKSB7IG1fc3BhbnMgPSBzcGFuczsgfQorICAgICAgICB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAg
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFwZT4gZGVjb2Rl
KERlY29kZXImKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBkdW1wKCkgY29uc3Q7
CkBAIC0xNjIsMTIgKzE0OCwxNiBAQCBwcml2YXRlOgogICAgICAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFNoYXBlJiwgY29uc3QgU2hhcGUmKTsKICAgICB9OwogCisgICAgc3RkOjp1
bmlxdWVfcHRyPFNoYXBlPiBjb3B5U2hhcGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlID8gc3Rk
OjptYWtlX3VuaXF1ZTxTaGFwZT4oKm1fc2hhcGUpIDogbnVsbHB0cjsgfQorICAgIHZvaWQgc2V0
U2hhcGUoU2hhcGUmJik7CisKICAgICBJbnRSZWN0IG1fYm91bmRzOwotICAgIFNoYXBlIG1fc2hh
cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBtX3NoYXBlOwogCiAgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBSZWdpb24mLCBjb25zdCBSZWdpb24mKTsKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXBlJiwgY29uc3QgU2hhcGUmKTsKICAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFNwYW4mLCBjb25zdCBTcGFuJik7CisgICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBTcGFuJiwgY29uc3QgU3BhbiYpOwogfTsKIAogc3RhdGljIGlu
bGluZSBSZWdpb24gaW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQpA
QCAtMTc3LDcgKzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChjb25zdCBS
ZWcKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0gICAgCisKIHN0YXRpYyBpbmxpbmUgUmVnaW9u
IHN1YnRyYWN0KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQogewogICAgIFJlZ2lv
biByZXN1bHQoYSk7CkBAIC0xOTYsNyArMTg2LDcgQEAgc3RhdGljIGlubGluZSBSZWdpb24gdHJh
bnNsYXRlKGNvbnN0IFJlZwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lvbiYg
YSwgY29uc3QgUmVnaW9uJiBiKQogewotICAgIHJldHVybiBhLm1fYm91bmRzID09IGIubV9ib3Vu
ZHMgJiYgYS5tX3NoYXBlID09IGIubV9zaGFwZTsKKyAgICByZXR1cm4gYS5tX2JvdW5kcyA9PSBi
Lm1fYm91bmRzICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoYS5tX3NoYXBlLCBiLm1fc2hhcGUp
OwogfQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lv
biYgYikKIHsKQEAgLTIxMiwxMSArMjAyLDEwOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFJlZ2lvbjo6U3BhCiB7CiAgICAgcmV0dXJuIGEueSA9PSBiLnkgJiYgYS5zZWdtZW50SW5k
ZXggPT0gYi5zZWdtZW50SW5kZXg7CiB9CisKIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UmVnaW9uOjpTcGFuJiBhLCBjb25zdCBSZWdpb246OlNwYW4mIGIpCiB7CiAgICAgcmV0dXJuICEo
YSA9PSBiKTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVnaW9uOjpTcGFu
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHkgPDwg
c2VnbWVudEluZGV4OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVn
aW9uOjpTcGFuPiBSZWdpb246OlNwYW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IE9wdGlvbmFsPGludD4geTsKKyAgICBkZWNvZGVyID4+IHk7CisgICAgaWYgKCF5KQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgT3B0aW9uYWw8c2l6ZV90PiBzZWdtZW50SW5kZXg7CisgICAg
ZGVjb2RlciA+PiBzZWdtZW50SW5kZXg7CisgICAgaWYgKCFzZWdtZW50SW5kZXgpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyB7ICp5LCAqc2VnbWVudEluZGV4IH0gfTsKK30K
KwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVnaW9uOjpTaGFwZTo6ZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3NlZ21lbnRzOworICAg
IGVuY29kZXIgPDwgbV9zcGFuczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlv
bmFsPFJlZ2lvbjo6U2hhcGU+IFJlZ2lvbjo6U2hhcGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQoreworICAgIE9wdGlvbmFsPFZlY3RvcjxpbnQ+PiBzZWdtZW50czsKKyAgICBkZWNvZGVyID4+
IHNlZ21lbnRzOworICAgIGlmICghc2VnbWVudHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBPcHRpb25hbDxWZWN0b3I8UmVnaW9uOjpTcGFuPj4gc3BhbnM7CisgICAgZGVj
b2RlciA+PiBzcGFuczsKKyAgICBpZiAoIXNwYW5zKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgU2hhcGUgc2hhcGU7CisgICAgc2hhcGUubV9zZWdtZW50cyA9IFdURk1vdmUo
KnNlZ21lbnRzKTsKKyAgICBzaGFwZS5tX3NwYW5zID0gV1RGTW92ZSgqc3BhbnMpOworCisgICAg
cmV0dXJuIHsgc2hhcGUgfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVn
aW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1f
Ym91bmRzOworICAgIGJvb2wgaGFzU2hhcGUgPSAhIW1fc2hhcGU7CisgICAgZW5jb2RlciA8PCBo
YXNTaGFwZTsKKyAgICBpZiAoaGFzU2hhcGUpCisgICAgICAgIGVuY29kZXIgPDwgKm1fc2hhcGU7
Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWdpb24+IFJlZ2lvbjo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8SW50UmVjdD4gYm91bmRz
OworICAgIGRlY29kZXIgPj4gYm91bmRzOworICAgIGlmICghYm91bmRzKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzU2hhcGU7CisgICAgZGVj
b2RlciA+PiBoYXNTaGFwZTsKKyAgICBpZiAoIWhhc1NoYXBlKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgUmVnaW9uIHJlZ2lvbiA9IHsgKmJvdW5kcyB9OworCisgICAgaWYg
KCpoYXNTaGFwZSkgeworICAgICAgICBPcHRpb25hbDxTaGFwZT4gc2hhcGU7CisgICAgICAgIGRl
Y29kZXIgPj4gc2hhcGU7CisgICAgICAgIGlmICghc2hhcGUpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICByZWdpb24ubV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8
U2hhcGU+KFdURk1vdmUoKnNoYXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgcmVnaW9uIH07
Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+Citib29sIFJlZ2lvbjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFJlZ2lvbiYgcmVnaW9uKQoreworICAgIE9wdGlvbmFsPFJlZ2lvbj4gZGVj
b2RlZFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGRlY29kZWRSZWdpb247CisgICAgaWYgKCFkZWNv
ZGVkUmVnaW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVnaW9uID0gV1RGTW92ZSgq
ZGVjb2RlZFJlZ2lvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIFJlZ2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjQyOTQx
KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MCBAQAorMjAxOS0wMy0xNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAg
ICAgICAgT3B0aW1pemUgUmVnaW9uIGZvciBzaW5nbGUgcmVjdGFuZ2xlIGNhc2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc0MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm0vSVBDL0Rl
Y29kZXIuY3BwOgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpvcGVyYXRvcj4+KToKKyAgICAgICAg
KElQQzo6RGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRGVjb2Rlci5o
OgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6RW5j
b2Rlcjo6ZW5jb2RlKToKKworICAgICAgICBBZGQgc2l6ZV90IHByaW1pdGl2ZSBzdXBwb3J0Lgor
CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuaDoKKyAgICAgICAgKiBTaGFyZWQvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcm9wZXJ0aWVzOjpkZWNvZGUp
OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAo
SVBDOjpBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2RlKToKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjplbmNvZGUpOiBEZWxldGVkLgor
ICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmRlY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZW5jb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWdpb24+OjpkZWNvZGUpOiBEZWxldGVk
LgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKwogMjAxOS0wMy0x
MyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtDb250ZW50Q2hh
bmdlT2JzZXJ2ZXJdIFN0b3AgY29udGVudCBvYnNlcnZhdGlvbiB3aGVuIGNvbnRlbnQgY2FsbHMg
cHJldmVudERlZmF1bHQoKSBvbiB0b3VjaCBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0RlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL0RlY29kZXIuY3BwCShyZXZpc2lvbiAyNDI5NDEpCisrKyBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1MCwxMSBA
QCBEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGRvCiAgICAgcmV0dXJuIGdl
dE9wdGlvbmFsKG9wdGlvbmFsKTsKIH0KIAorRGVjb2RlciYgRGVjb2Rlcjo6b3BlcmF0b3I+PihP
cHRpb25hbDxzaXplX3Q+JiBvcHRpb25hbCkKK3sKKyAgICByZXR1cm4gZ2V0T3B0aW9uYWwob3B0
aW9uYWwpOworfQorCiBib29sIERlY29kZXI6OmRlY29kZShib29sJiByZXN1bHQpCiB7CiAgICAg
aWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVvZihyZXN1bHQpLCBzaXplb2YocmVzdWx0KSkp
CkBAIC0zNDAsNiArMzQ1LDE1IEBAIGJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGRvdWJsZSYgcmVzdWx0
KQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIERlY29kZXI6OmRlY29kZShzaXplX3QmIHJl
c3VsdCkKK3sKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZW9mKHJlc3VsdCksIHNp
emVvZihyZXN1bHQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZGVjb2RlVmFsdWVG
cm9tQnVmZmVyKHJlc3VsdCwgbV9idWZmZXJQb3MpOworICAgIHJldHVybiB0cnVlOworfQorCiBi
b29sIERlY29kZXI6OnJlbW92ZUF0dGFjaG1lbnQoQXR0YWNobWVudCYgYXR0YWNobWVudCkKIHsK
ICAgICBpZiAobV9hdHRhY2htZW50cy5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvRGVjb2Rlci5oCShyZXZpc2lvbiAyNDI5NDEpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDggQEAgcHVibGlj
OgogICAgIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8ZmxvYXQ+Jik7CiAgICAgYm9vbCBk
ZWNvZGUoZG91YmxlJik7CiAgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxkb3VibGU+
Jik7CisgICAgYm9vbCBkZWNvZGUoc2l6ZV90Jik7CisgICAgRGVjb2RlciYgb3BlcmF0b3I+PihP
cHRpb25hbDxzaXplX3Q+Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPgogICAgIGF1dG8g
ZGVjb2RlKEUmIGUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZSwg
Ym9vbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwCShyZXZpc2lv
biAyNDI5NDEpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU2LDYgKzI1NiwxMiBAQCB2b2lkIEVuY29kZXI6OmVuY29kZShkb3Vi
bGUgbikKICAgICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOwogfQogCit2b2lkIEVuY29k
ZXI6OmVuY29kZShzaXplX3QgbikKK3sKKyAgICB1aW50OF90KiBidWZmZXIgPSBncm93KHNpemVv
ZihuKSwgc2l6ZW9mKG4pKTsKKyAgICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOworfQor
CiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0dGFjaG1lbnQpCiB7
CiAgICAgbV9hdHRhY2htZW50cy5hcHBlbmQoV1RGTW92ZShhdHRhY2htZW50KSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNDI5NDEpCisrKyBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2
ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5jb2RlKGludDY0X3QpOwogICAgIHZvaWQg
ZW5jb2RlKGZsb2F0KTsKICAgICB2b2lkIGVuY29kZShkb3VibGUpOworICAgIHZvaWQgZW5jb2Rl
KHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPgogICAgIGF1dG8gZW5jb2RlKEUg
dmFsdWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2YWx1ZT4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2
aXNpb24gMjQyOTQxKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDggKzM2Nyw5IEBAIHZvaWQgQXJndW1lbnRD
b2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KIAogYm9vbCBBcmd1bWVudENvZGVyPEV2ZW50VHJh
Y2tpbmdSZWdpb25zPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEV2ZW50VHJhY2tpbmdSZWdp
b25zJiBldmVudFRyYWNraW5nUmVnaW9ucykKIHsKLSAgICBSZWdpb24gYXN5bmNocm9ub3VzRGlz
cGF0Y2hSZWdpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShhc3luY2hyb25vdXNEaXNwYXRj
aFJlZ2lvbikpCisgICAgT3B0aW9uYWw8UmVnaW9uPiBhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lv
bjsKKyAgICBkZWNvZGVyID4+IGFzeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9uOworICAgIGlmICgh
YXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBI
YXNoTWFwPFN0cmluZywgUmVnaW9uPiBldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJl
Z2lvbnM7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShldmVudFNwZWNpZmljU3luY2hyb25vdXNE
aXNwYXRjaFJlZ2lvbnMpKQpAQCAtMzc4LDcgKzM3OSw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxF
dmVudFRyYWNraW5nUmVnaW9ucz4KICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRvdWNoQWN0aW9u
RGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgotICAgIGV2ZW50VHJhY2tpbmdS
ZWdpb25zLmFzeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9uID0gV1RGTW92ZShhc3luY2hyb25vdXNE
aXNwYXRjaFJlZ2lvbik7CisgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMuYXN5bmNocm9ub3VzRGlz
cGF0Y2hSZWdpb24gPSBXVEZNb3ZlKCphc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbik7CiAgICAg
ZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVjaWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdp
b25zID0gV1RGTW92ZShldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpOwog
I2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKICAgICBldmVudFRyYWNraW5nUmVnaW9ucy50b3Vj
aEFjdGlvbkRhdGEgPSBXVEZNb3ZlKHRvdWNoQWN0aW9uRGF0YSk7CkBAIC05MDIsNjYgKzkwMyw2
IEBAIE9wdGlvbmFsPFJlY2VudFNlYXJjaD4gQXJndW1lbnRDb2RlcjxSZWMKICAgICByZXR1cm4g
e3sgV1RGTW92ZSgqc3RyaW5nKSwgV1RGTW92ZSgqdGltZSkgfX07CiB9CiAKLXRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8UmVnaW9uOjpTcGFuPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBjb25zdCBSZWdpb246OlNwYW4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8
UmVnaW9uOjpTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdm9pZCBBcmd1bWVudENvZGVy
PFJlZ2lvbjo6U3Bhbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWdpb246OlNw
YW4mIHNwYW4pCi17Ci0gICAgZW5jb2RlciA8PCBzcGFuLnk7Ci0gICAgZW5jb2RlciA8PCAodWlu
dDY0X3Qpc3Bhbi5zZWdtZW50SW5kZXg7Ci19Ci0KLU9wdGlvbmFsPFJlZ2lvbjo6U3Bhbj4gQXJn
dW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBSZWdpb246OlNwYW4gc3BhbjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNwYW4ueSkpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCi0gICAgdWludDY0X3Qgc2VnbWVudElu
ZGV4OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2VnbWVudEluZGV4KSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICBzcGFuLnNlZ21lbnRJbmRleCA9IHNlZ21lbnRJ
bmRleDsKLSAgICByZXR1cm4gV1RGTW92ZShzcGFuKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVy
PFJlZ2lvbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWdpb24mIHJlZ2lvbikK
LXsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hhcGVTZWdtZW50cygpKTsKLSAgICBlbmNv
ZGVyLmVuY29kZShyZWdpb24uc2hhcGVTcGFucygpKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVy
PFJlZ2lvbj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWdpb24mIHJlZ2lvbikKLXsKLSAg
ICBWZWN0b3I8aW50PiBzZWdtZW50czsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNlZ21lbnRz
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFJlZ2lvbjo6U3Bhbj4gc3Bh
bnM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzcGFucykpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICByZWdpb24uc2V0U2hhcGVTZWdtZW50cyhzZWdtZW50cyk7Ci0gICAgcmVn
aW9uLnNldFNoYXBlU3BhbnMoc3BhbnMpOwotICAgIHJlZ2lvbi51cGRhdGVCb3VuZHNGcm9tU2hh
cGUoKTsKLSAgICAKLSAgICBpZiAoIXJlZ2lvbi5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1PcHRpb25hbDxSZWdpb24+IEFyZ3VtZW50
Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgUmVnaW9uIHJl
Z2lvbjsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCByZWdpb24pKQotICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHJlZ2lvbjsKLX0KLQogdm9pZCBBcmd1bWVudENv
ZGVyPExlbmd0aD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBMZW5ndGgmIGxlbmd0
aCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBs
ZW5ndGgpOwpAQCAtOTcyLDcgKzkxMyw2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxMZW5ndGg+Ojpk
ZWNvZGUoRGVjb2QKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNv
ZGUoZGVjb2RlciwgbGVuZ3RoKTsKIH0KIAotCiB2b2lkIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRB
dHRyaWJ1dGVzPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZpZXdwb3J0QXR0cmli
dXRlcyYgdmlld3BvcnRBdHRyaWJ1dGVzKQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Vmll
d3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKGVuY29kZXIsIHZpZXdwb3J0QXR0cmlidXRlcyk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2
aXNpb24gMjQyOTQxKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwxMiArMzI0LDYgQEAgdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpQ
YXRoPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpSZWdpb24+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYs
IGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiwgV2ViQ29yZTo6UmVnaW9uJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFdlYkNvcmU6OlJlZ2lv
bj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6TGVuZ3RoPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpMZW5ndGgmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYs
IFdlYkNvcmU6Okxlbmd0aCYpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bi5tbQkocmV2aXNpb24gMjQyOTQxKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
MTUsMTAgKzUxNSwxMSBAQCBib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclBy
CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzRXZlbnRSZWdpb24pKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoaGFzRXZlbnRSZWdpb24pIHsKLSAgICAgICAg
ICAgIGF1dG8gZXZlbnRSZWdpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlJlZ2lvbj4o
KTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoKmV2ZW50UmVnaW9uKSkKKyAgICAg
ICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OlJlZ2lvbj4gZXZlbnRSZWdpb247CisgICAgICAgICAg
ICBkZWNvZGVyID4+IGV2ZW50UmVnaW9uOworICAgICAgICAgICAgaWYgKCFldmVudFJlZ2lvbikK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQuZXZlbnRS
ZWdpb24gPSBXVEZNb3ZlKGV2ZW50UmVnaW9uKTsKKyAgICAgICAgICAgIHJlc3VsdC5ldmVudFJl
Z2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaW9uPihXVEZNb3ZlKCpldmVudFJlZ2lvbikpOwog
ICAgICAgICB9CiAgICAgfQogCg==
</data>
<flag name="review"
          id="381170"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364783</attachid>
            <date>2019-03-15 02:27:22 -0700</date>
            <delta_ts>2019-03-15 03:21:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize-4.patch</filename>
            <type>text/plain</type>
            <size>30682</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgIEluc3RydW1lbnRhdGlvbiBzaG93cyB2YXN0IG1ham9yaXR5IG9mIFJlZ2lv
biBvYmplY3RzIGNvbnNpc3Qgb2YgYSBzaW5nbGUgcmVjdGFuZ2xlLiBIb3dldmVyIGl0IGFsd2F5
cyBhbGxvY2F0ZXMKKyAgICAgICAgdGhlIGxhcmdlIFNoYXBlIGRhdGEgc3RydWN0dXJlLiBUaGlz
IG1ha2VzIGl0IHVuc3VpdGFibGUgdG8gdXNlIGFzIGEgbWVtYmVyIGluIGFueSBwb3B1bGFyIG9i
amVjdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBvcHRpbWl6ZXMgdGhlIHNpbmdsZSByZWN0YW5n
bGUgY2FzZSBieSB1c2luZyBvbmx5IHRoZSBib3VuZHMgcmVjdGFuZ2xlIHRvIGRlc2NyaWJlIGl0
LgorICAgICAgICBTaGFwZSBpcyBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGlzIG1ha2VzIGl0IHNh
ZmUgdG8gdXNlIFJlZ2lvbiBhcyBhIGRhdGEgbWVtYmVyIHdoZXJlIGEgcmVjdGFuZ2xlIGlzIHRo
ZSBjb21tb24gY2FzZS4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBtb2Rlcm5pemVzIFJlZ2lv
biBlbmNvZGluZy9kZWNvZGluZyBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6UmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6flJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaW9uOjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6
U2hhcGU6OlNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNw
YW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dW5p
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzdWJ0cmFjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3dhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbm93IHVudXNlZCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
Ojppc1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpncmlkU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmNvcHlTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkZWNvZGUpOgor
CisgICAgICAgIFRoaXMgaXMgbm93IHBhcnQgb2YgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6
UmVnaW9uOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6U3Bhbjo6U3Bhbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNoYXBl
U2VnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzaGFw
ZVNwYW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNoYXBl
U3BhbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2VnbWVu
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3Bh
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U2VnbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U3BhbnMpOiBEZWxldGVkLgorCisgICAgICAgIE5vIG5lZWQgdG8gZXhwb3NlIHRoZXNlIGZvciBl
bmNvZGluZyBhbnltb3JlLgorCiAyMDE5LTAzLTE0ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBdWRpdDogcHJvdmlkZSBhIHdheSB0
byBnZXQgdGhlIGNvbnRlbnRzIG9mIHJlc291cmNlcwpJbmRleDogU291cmNlL1dlYkNvcmUvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CShyZXZpc2lvbiAyNDI5NDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CSh3b3JraW5nIGNv
cHkpCkBAIC0zNjMsNiArMzYzLDcgQEAgJChQUk9KRUNUX0RJUikvTW9kdWxlcy93ZWJncHUvV2Vi
R1BVQnVmZgogJChQUk9KRUNUX0RJUikvTW9kdWxlcy93ZWJncHUvV2ViR1BVQnVmZmVyVXNhZ2Uu
aWRsCiAkKFBST0pFQ1RfRElSKS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVDb2xvci5pZGwKICQoUFJP
SkVDVF9ESVIpL01vZHVsZXMvd2ViZ3B1L1dlYkdQVUNvbW1hbmRCdWZmZXIuaWRsCiskKFBST0pF
Q1RfRElSKS9Nb2R1bGVzL3dlYmdwdS9XZWJHUFVDb21tYW5kRW5jb2Rlci5pZGwKICQoUFJPSkVD
VF9ESVIpL01vZHVsZXMvd2ViZ3B1L1dlYkdQVURldmljZS5pZGwKICQoUFJPSkVDVF9ESVIpL01v
ZHVsZXMvd2ViZ3B1L1dlYkdQVUluZGV4Rm9ybWF0LmlkbAogJChQUk9KRUNUX0RJUikvTW9kdWxl
cy93ZWJncHUvV2ViR1BVSW5wdXRTdGF0ZURlc2NyaXB0b3IuaWRsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAkocmV2aXNpb24gMjQy
OTQxKQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MjEsNiArMTkyMSw4IEBAICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTV2ViR1BVQ29sb3IuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNXZWJHUFVDb21tYW5kQnVmZmVyLmNwcAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNXZWJHUFVDb21tYW5kQnVmZmVyLmgKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTV2ViR1BVQ29tbWFu
ZEVuY29kZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU1dlYkdQVUNvbW1hbmRFbmNvZGVyLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTV2ViR1BVRGV2aWNlLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNXZWJHUFVEZXZpY2UuaAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNXZWJHUFVJbmRleEZvcm1hdC5jcHAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAkocmV2aXNp
b24gMjQyOTQxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTkgKzQyLDU0IEBAIFJlZ2lvbjo6UmVnaW9uKCkKIAog
UmVnaW9uOjpSZWdpb24oY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICA6IG1fYm91bmRzKHJlY3Qp
Ci0gICAgLCBtX3NoYXBlKHJlY3QpCiB7CiB9CiAKLVZlY3RvcjxJbnRSZWN0PiBSZWdpb246OnJl
Y3RzKCkgY29uc3QKK1JlZ2lvbjo6UmVnaW9uKGNvbnN0IFJlZ2lvbiYgb3RoZXIpCisgICAgOiBt
X2JvdW5kcyhvdGhlci5tX2JvdW5kcykKKyAgICAsIG1fc2hhcGUob3RoZXIuY29weVNoYXBlKCkp
CiB7Ci0gICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOworfQorCitSZWdpb246OlJlZ2lvbihSZWdp
b24mJiBvdGhlcikKKyAgICA6IG1fYm91bmRzKFdURk1vdmUob3RoZXIubV9ib3VuZHMpKQorICAg
ICwgbV9zaGFwZShXVEZNb3ZlKG90aGVyLm1fc2hhcGUpKQoreworfQorCitSZWdpb246On5SZWdp
b24oKQoreworfQorCitSZWdpb24mIFJlZ2lvbjo6b3BlcmF0b3I9KGNvbnN0IFJlZ2lvbiYgb3Ro
ZXIpCit7CisgICAgbV9ib3VuZHMgPSBvdGhlci5tX2JvdW5kczsKKyAgICBtX3NoYXBlID0gb3Ro
ZXIuY29weVNoYXBlKCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitSZWdpb24mIFJlZ2lvbjo6
b3BlcmF0b3I9KFJlZ2lvbiYmIG90aGVyKQoreworICAgIG1fYm91bmRzID0gV1RGTW92ZShvdGhl
ci5tX2JvdW5kcyk7CisgICAgbV9zaGFwZSA9IFdURk1vdmUob3RoZXIubV9zaGFwZSk7CisgICAg
cmV0dXJuICp0aGlzOworfQorCitWZWN0b3I8SW50UmVjdCwgMT4gUmVnaW9uOjpyZWN0cygpIGNv
bnN0Cit7CisgICAgVmVjdG9yPEludFJlY3QsIDE+IHJlY3RzOwogCi0gICAgZm9yIChTaGFwZTo6
U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLnNwYW5zX2JlZ2luKCksIGVuZCA9IG1fc2hhcGUu
c3BhbnNfZW5kKCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytzcGFuKSB7Cisg
ICAgaWYgKCFtX3NoYXBlKSB7CisgICAgICAgIGlmICghbV9ib3VuZHMuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmVjdHMudW5jaGVja2VkQXBwZW5kKG1fYm91bmRzKTsKKyAgICAgICAgcmV0dXJu
IHJlY3RzOworICAgIH0KKworICAgIGZvciAoU2hhcGU6OlNwYW5JdGVyYXRvciBzcGFuID0gbV9z
aGFwZS0+c3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS0+c3BhbnNfZW5kKCk7IHNwYW4gIT0g
ZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytzcGFuKSB7CiAgICAgICAgIGludCB5ID0gc3Bhbi0+
eTsKICAgICAgICAgaW50IGhlaWdodCA9IChzcGFuICsgMSktPnkgLSB5OwogCi0gICAgICAgIGZv
ciAoU2hhcGU6OlNlZ21lbnRJdGVyYXRvciBzZWdtZW50ID0gbV9zaGFwZS5zZWdtZW50c19iZWdp
bihzcGFuKSwgZW5kID0gbV9zaGFwZS5zZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5k
ICYmIHNlZ21lbnQgKyAxICE9IGVuZDsgc2VnbWVudCArPSAyKSB7CisgICAgICAgIGZvciAoU2hh
cGU6OlNlZ21lbnRJdGVyYXRvciBzZWdtZW50ID0gbV9zaGFwZS0+c2VnbWVudHNfYmVnaW4oc3Bh
biksIGVuZCA9IG1fc2hhcGUtPnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYg
c2VnbWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKICAgICAgICAgICAgIGludCB4ID0g
KnNlZ21lbnQ7CiAgICAgICAgICAgICBpbnQgd2lkdGggPSAqKHNlZ21lbnQgKyAxKSAtIHg7CiAK
QEAgLTcwLDcgKzEwNSwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFpbnMoY29uc3QgUmVnaW9uJiBy
ZWdpCiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhyZWdpb24ubV9ib3VuZHMpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6
OkNvbXBhcmVDb250YWluc09wZXJhdGlvbj4obV9zaGFwZSwgcmVnaW9uLm1fc2hhcGUpOworICAg
IGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gU2hhcGU6
OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVDb250YWluc09wZXJhdGlvbj4oKm1fc2hhcGUs
IHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogU2hhcGUocmVnaW9uLm1fYm91bmRz
KSk7CiB9CiAKIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNv
bnN0CkBAIC03OCw3ICsxMTYsMTAgQEAgYm9vbCBSZWdpb246OmNvbnRhaW5zKGNvbnN0IEludFBv
aW50JiBwbwogICAgIGlmICghbV9ib3VuZHMuY29udGFpbnMocG9pbnQpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0b3Igc3BhbiA9IG1fc2hhcGUu
c3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19lbmQoKTsgc3BhbiAhPSBlbmQgJiYg
c3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAoIW1fc2hhcGUpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBl
LT5zcGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19lbmQoKTsgc3BhbiAhPSBlbmQg
JiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAgaW50IHkgPSBzcGFuLT55Owog
ICAgICAgICBpbnQgbWF4WSA9IChzcGFuICsgMSktPnk7CiAKQEAgLTg3LDcgKzEyOCw3IEBAIGJv
b2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG8KICAgICAgICAgaWYgKG1heFkg
PD0gcG9pbnQueSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgZm9yIChTaGFw
ZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNlZ21lbnRzX2JlZ2luKHNwYW4p
LCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYgc2Vn
bWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAgICAgZm9yIChTaGFwZTo6U2Vn
bWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50c19iZWdpbihzcGFuKSwgZW5k
ID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50
ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAgICAgaW50IHggPSAqc2VnbWVu
dDsKICAgICAgICAgICAgIGludCBtYXhYID0gKihzZWdtZW50ICsgMSk7CiAKQEAgLTEwNiwxOSAr
MTQ3LDE4IEBAIGJvb2wgUmVnaW9uOjppbnRlcnNlY3RzKGNvbnN0IFJlZ2lvbiYgcmUKICAgICBp
ZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIFNoYXBlOjpjb21wYXJlU2hhcGVzPFNoYXBlOjpDb21wYXJl
SW50ZXJzZWN0c09wZXJhdGlvbj4obV9zaGFwZSwgcmVnaW9uLm1fc2hhcGUpOworICAgIGlmICgh
bV9zaGFwZSAmJiAhcmVnaW9uLm1fc2hhcGUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIFNoYXBlOjpjb21wYXJlU2hhcGVzPFNoYXBlOjpDb21wYXJlSW50ZXJzZWN0c09wZXJh
dGlvbj4obV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJl
Z2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKTsKIH0KIAotdW5zaWduZWQgUmVnaW9uOjp0
b3RhbEFyZWEoKSBjb25zdAordWludDY0X3QgUmVnaW9uOjp0b3RhbEFyZWEoKSBjb25zdAogewot
ICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0cyA9IHRoaXMtPnJlY3RzKCk7Ci0gICAgc2l6ZV90IHNp
emUgPSByZWN0cy5zaXplKCk7Ci0gICAgdW5zaWduZWQgdG90YWxBcmVhID0gMDsKKyAgICB1aW50
NjRfdCB0b3RhbEFyZWEgPSAwOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgSW50UmVjdCByZWN0ID0gcmVjdHNbaV07CisgICAgZm9yIChhdXRvJiBy
ZWN0IDogcmVjdHMoKSkKICAgICAgICAgdG90YWxBcmVhICs9IChyZWN0LndpZHRoKCkgKiByZWN0
LmhlaWdodCgpKTsKLSAgICB9CiAKICAgICByZXR1cm4gdG90YWxBcmVhOwogfQpAQCAtMjI2LDE2
ICsyNjYsMTQgQEAgUmVnaW9uOjpTaGFwZTo6U2hhcGUoKQogfQogCiBSZWdpb246OlNoYXBlOjpT
aGFwZShjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIDogbV9zZWdtZW50cyh7IHJlY3QueCgpLCBy
ZWN0Lm1heFgoKSB9KQorICAgICwgbV9zcGFucyh7IHsgcmVjdC55KCksIDAgfSwgeyByZWN0Lm1h
eFkoKSwgMiB9IH0pCiB7Ci0gICAgYXBwZW5kU3BhbihyZWN0LnkoKSk7Ci0gICAgYXBwZW5kU2Vn
bWVudChyZWN0LngoKSk7Ci0gICAgYXBwZW5kU2VnbWVudChyZWN0Lm1heFgoKSk7Ci0gICAgYXBw
ZW5kU3BhbihyZWN0Lm1heFkoKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjpTaGFwZTo6YXBwZW5kU3Bh
bihpbnQgeSkKIHsKLSAgICBtX3NwYW5zLmFwcGVuZChTcGFuKHksIG1fc2VnbWVudHMuc2l6ZSgp
KSk7CisgICAgbV9zcGFucy5hcHBlbmQoeyB5LCBtX3NlZ21lbnRzLnNpemUoKSB9KTsKIH0KIAog
Ym9vbCBSZWdpb246OlNoYXBlOjpjYW5Db2FsZXNjZShTZWdtZW50SXRlcmF0b3IgYmVnaW4sIFNl
Z21lbnRJdGVyYXRvciBlbmQpCkBAIC0zMzEsMjcgKzM2OSw2IEBAIHZvaWQgUmVnaW9uOjpTaGFw
ZTo6ZHVtcCgpIGNvbnN0CiB9CiAjZW5kaWYKIAotYm9vbCBSZWdpb246OlNoYXBlOjppc1ZhbGlk
KCkgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8gc3BhbiA9IHNwYW5zX2JlZ2luKCksIGVuZCA9IHNw
YW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFuICsgMSAhPSBlbmQ7ICsrc3BhbikgewotICAg
ICAgICBpbnQgeSA9IHNwYW4tPnk7Ci0gICAgICAgIGludCBoZWlnaHQgPSAoc3BhbiArIDEpLT55
IC0geTsKLSAgICAgICAgCi0gICAgICAgIGlmIChoZWlnaHQgPCAwKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoYXV0byBzZWdtZW50ID0gc2VnbWVudHNfYmVnaW4o
c3BhbiksIGVuZCA9IHNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYgc2VnbWVu
dCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKLSAgICAgICAgICAgIGludCB4ID0gKnNlZ21l
bnQ7Ci0gICAgICAgICAgICBpbnQgd2lkdGggPSAqKHNlZ21lbnQgKyAxKSAtIHg7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICh3aWR0aCA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIEludFJl
Y3QgUmVnaW9uOjpTaGFwZTo6Ym91bmRzKCkgY29uc3QKIHsKICAgICBpZiAoaXNFbXB0eSgpKQpA
QCAtMzk3LDEyICs0MTQsNiBAQCB2b2lkIFJlZ2lvbjo6U2hhcGU6OnRyYW5zbGF0ZShjb25zdCBJ
bnRTCiAgICAgICAgIG1fc3BhbnNbaV0ueSArPSBvZmZzZXQuaGVpZ2h0KCk7CiB9CiAKLXZvaWQg
UmVnaW9uOjpTaGFwZTo6c3dhcChTaGFwZSYgb3RoZXIpCi17Ci0gICAgbV9zZWdtZW50cy5zd2Fw
KG90aGVyLm1fc2VnbWVudHMpOwotICAgIG1fc3BhbnMuc3dhcChvdGhlci5tX3NwYW5zKTsKLX0K
LQogZW51bSB7CiAgICAgU2hhcGUxLAogICAgIFNoYXBlMiwKQEAgLTU2Nyw3MSArNTc4LDgxIEBA
IHZvaWQgUmVnaW9uOjpkdW1wKCkgY29uc3QKIHsKICAgICBwcmludGYoIkJvdW5kczogKCVkLCAl
ZCwgJWQsICVkKVxuIiwKICAgICAgICAgICAgbV9ib3VuZHMueCgpLCBtX2JvdW5kcy55KCksIG1f
Ym91bmRzLndpZHRoKCksIG1fYm91bmRzLmhlaWdodCgpKTsKLSAgICBtX3NoYXBlLmR1bXAoKTsK
KyAgICBpZiAobV9zaGFwZSkKKyAgICAgICAgbV9zaGFwZS0+ZHVtcCgpOwogfQogI2VuZGlmCiAK
LXZvaWQgUmVnaW9uOjp1cGRhdGVCb3VuZHNGcm9tU2hhcGUoKQotewotICAgIG1fYm91bmRzID0g
bV9zaGFwZS5ib3VuZHMoKTsKLX0KLQogdm9pZCBSZWdpb246OmludGVyc2VjdChjb25zdCBSZWdp
b24mIHJlZ2lvbikKIHsKICAgICBpZiAobV9ib3VuZHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKCFtX2JvdW5kcy5pbnRlcnNlY3RzKHJlZ2lvbi5tX2JvdW5kcykpIHsKLSAg
ICAgICAgbV9zaGFwZSA9IFNoYXBlKCk7CisgICAgICAgIG1fc2hhcGUgPSBudWxscHRyOwogICAg
ICAgICBtX2JvdW5kcyA9IEludFJlY3QoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBp
ZiAoIW1fc2hhcGUgJiYgIXJlZ2lvbi5tX3NoYXBlKSB7CisgICAgICAgIG1fYm91bmRzID0gaW50
ZXJzZWN0aW9uKG1fYm91bmRzLCByZWdpb24ubV9ib3VuZHMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgU2hhcGUgaW50ZXJzZWN0ZWRTaGFwZSA9IFNoYXBlOjppbnRlcnNlY3RTaGFw
ZXMobV9zaGFwZSwgcmVnaW9uLm1fc2hhcGUpOwotCi0gICAgbV9zaGFwZS5zd2FwKGludGVyc2Vj
dGVkU2hhcGUpOwotICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsKKyAgICBzZXRTaGFw
ZShTaGFwZTo6aW50ZXJzZWN0U2hhcGVzKG1fc2hhcGUgPyAqbV9zaGFwZSA6IG1fYm91bmRzLCBy
ZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6IHJlZ2lvbi5tX2JvdW5kcykpOwogfQog
CiB2b2lkIFJlZ2lvbjo6dW5pdGUoY29uc3QgUmVnaW9uJiByZWdpb24pCiB7CiAgICAgaWYgKHJl
Z2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNSZWN0KCkgJiYgbV9i
b3VuZHMuY29udGFpbnMocmVnaW9uLm1fYm91bmRzKSkKKyAgICBpZiAoaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1fYm91bmRzID0gcmVnaW9uLm1fYm91bmRzOworICAgICAgICBtX3NoYXBlID0gcmVn
aW9uLmNvcHlTaGFwZSgpOwogICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmIChyZWdpb24u
aXNSZWN0KCkgJiYgcmVnaW9uLm1fYm91bmRzLmNvbnRhaW5zKG1fYm91bmRzKSkgewotICAgICAg
ICBtX3NoYXBlID0gcmVnaW9uLm1fc2hhcGU7CiAgICAgICAgIG1fYm91bmRzID0gcmVnaW9uLm1f
Ym91bmRzOworICAgICAgICBtX3NoYXBlID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgYW5vdGhlciB3YXkgdG8gY29uc3RydWN0IGEg
UmVnaW9uIHdpdGhvdXQgZG9pbmcgdGhpcyB0ZXN0IHdoZW4gd2UgZXhwZWN0IGl0IHRvIGJlIGZh
bHNlLgotICAgIGlmICghaXNSZWN0KCkgJiYgY29udGFpbnMocmVnaW9uKSkKKyAgICBpZiAoY29u
dGFpbnMocmVnaW9uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhcGUgdW5pdGVkU2hhcGUg
PSBTaGFwZTo6dW5pb25TaGFwZXMobV9zaGFwZSwgcmVnaW9uLm1fc2hhcGUpOwotCi0gICAgbV9z
aGFwZS5zd2FwKHVuaXRlZFNoYXBlKTsKLSAgICBtX2JvdW5kcy51bml0ZShyZWdpb24ubV9ib3Vu
ZHMpOworICAgIHNldFNoYXBlKFNoYXBlOjp1bmlvblNoYXBlcyhtX3NoYXBlID8gKm1fc2hhcGUg
OiBtX2JvdW5kcywgcmVnaW9uLm1fc2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiByZWdpb24ubV9i
b3VuZHMpKTsKIH0KIAogdm9pZCBSZWdpb246OnN1YnRyYWN0KGNvbnN0IFJlZ2lvbiYgcmVnaW9u
KQogewotICAgIGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCisgICAgaWYgKGlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGlmIChyZWdpb24uaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAgICAgaWYgKCFtX2JvdW5kcy5pbnRlcnNlY3RzKHJlZ2lvbi5tX2JvdW5kcykpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFNoYXBlIHN1YnRyYWN0ZWRTaGFwZSA9IFNoYXBlOjpzdWJ0cmFjdFNo
YXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3YXAoc3VidHJh
Y3RlZFNoYXBlKTsKLSAgICBtX2JvdW5kcyA9IG1fc2hhcGUuYm91bmRzKCk7CisgICAgc2V0U2hh
cGUoU2hhcGU6OnN1YnRyYWN0U2hhcGVzKG1fc2hhcGUgPyAqbV9zaGFwZSA6IG1fYm91bmRzLCBy
ZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6IHJlZ2lvbi5tX2JvdW5kcykpOwogfQog
CiB2b2lkIFJlZ2lvbjo6dHJhbnNsYXRlKGNvbnN0IEludFNpemUmIG9mZnNldCkKIHsKICAgICBt
X2JvdW5kcy5tb3ZlKG9mZnNldCk7Ci0gICAgbV9zaGFwZS50cmFuc2xhdGUob2Zmc2V0KTsKKyAg
ICBpZiAobV9zaGFwZSkKKyAgICAgICAgbV9zaGFwZS0+dHJhbnNsYXRlKG9mZnNldCk7Cit9CisK
K3ZvaWQgUmVnaW9uOjpzZXRTaGFwZShTaGFwZSYmIHNoYXBlKQoreworICAgIG1fYm91bmRzID0g
c2hhcGUuYm91bmRzKCk7CisKKyAgICBpZiAoc2hhcGUuaXNSZWN0KCkpIHsKKyAgICAgICAgbV9z
aGFwZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fc2hh
cGUpCisgICAgICAgIG1fc2hhcGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNoYXBlPihXVEZNb3ZlKHNo
YXBlKSk7CisgICAgZWxzZQorICAgICAgICAqbV9zaGFwZSA9IFdURk1vdmUoc2hhcGUpOwogfQog
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlZ2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlZ2lvbi5oCShyZXZpc2lvbiAyNDI5NDEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOCBA
QAogI2RlZmluZSBSZWdpb25faAogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTEgKzQwLDE5
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBSZWdpb24oKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBSZWdpb24oY29uc3QgSW50UmVjdCYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9u
KGNvbnN0IFJlZ2lvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbihSZWdpb24mJik7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCB+UmVnaW9uKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWdp
b24mIG9wZXJhdG9yPShjb25zdCBSZWdpb24mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWdpb24m
IG9wZXJhdG9yPShSZWdpb24mJik7CisKICAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRzOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9ib3Vu
ZHMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBpc1JlY3QoKSBjb25zdCB7IHJldHVybiBtX3NoYXBl
LmlzUmVjdCgpOyB9CisgICAgYm9vbCBpc1JlY3QoKSBjb25zdCB7IHJldHVybiAhbV9zaGFwZTsg
fQogCi0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPEludFJlY3Q+IHJlY3RzKCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPEludFJlY3QsIDE+IHJlY3RzKCkgY29uc3Q7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVuaXRlKGNvbnN0IFJlZ2lvbiYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgaW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYpOwpAQCAtNTgsNDggKzY4LDMxIEBA
IHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXJ5IHJlZ2lvbiBpbnRlcnNl
Y3RzIGFueSBwYXJ0IG9mIHRoaXMgcmVnaW9uLgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaW50
ZXJzZWN0cyhjb25zdCBSZWdpb24mKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHVuc2ln
bmVkIHRvdGFsQXJlYSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvdGFs
QXJlYSgpIGNvbnN0OwogCi0gICAgdW5zaWduZWQgZ3JpZFNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NoYXBlLmdyaWRTaXplKCk7IH0KKyAgICB1bnNpZ25lZCBncmlkU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcGUgPyBtX3NoYXBlLT5ncmlkU2l6ZSgpIDogMDsgfQogCiAjaWZuZGVmIE5ERUJV
RwogICAgIHZvaWQgZHVtcCgpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX3NoYXBlLmlzVmFsaWQoKTsgfQorICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8UmVnaW9uPiBkZWNvZGUoRGVjb2RlciYpOworICAgIC8v
IEZJWE1FOiBSZW1vdmUgbGVnYWN5IGRlY29kZS4KKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFJlZ2lvbiYpOwogCi0gICAgLy8gVGhpcyBp
cyBpbnRlcm5hbCB0byBSZWdpb24sIGJ1dCBleHBvc2VkIGp1c3QgZm9yIGVuY29kaW5nLgotICAg
IC8vIEZJWE1FOiBmaWd1cmUgb3V0IGEgYmV0dGVyIHdheSB0byBlbmNvZGUgV2ViQ29yZSBjbGFz
c2VzLgorcHJpdmF0ZToKICAgICBzdHJ1Y3QgU3BhbiB7Ci0gICAgICAgIFNwYW4oKQotICAgICAg
ICAgICAgOiB5KDApCi0gICAgICAgICAgICAsIHNlZ21lbnRJbmRleCgwKQotICAgICAgICB7Ci0g
ICAgICAgIH0KLQotICAgICAgICBTcGFuKGludCB5LCBzaXplX3Qgc2VnbWVudEluZGV4KQotICAg
ICAgICAgICAgOiB5KHkpCi0gICAgICAgICAgICAsIHNlZ21lbnRJbmRleChzZWdtZW50SW5kZXgp
Ci0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAgICBpbnQgeSB7IDAgfTsKKyAgICAgICAgc2l6
ZV90IHNlZ21lbnRJbmRleCB7IDAgfTsKIAotICAgICAgICBpbnQgeTsKLSAgICAgICAgc2l6ZV90
IHNlZ21lbnRJbmRleDsKKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGUoRW5jb2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0
aWMgT3B0aW9uYWw8U3Bhbj4gZGVjb2RlKERlY29kZXImKTsKICAgICB9OwogCi0gICAgLy8gRm9y
IGVuY29kaW5nL2RlY29kaW5nIG9ubHkuCi0gICAgY29uc3QgVmVjdG9yPGludCwgMzI+JiBzaGFw
ZVNlZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5zZWdtZW50cygpOyB9Ci0gICAgY29u
c3QgVmVjdG9yPFNwYW4sIDE2PiYgc2hhcGVTcGFucygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUu
c3BhbnMoKTsgfQotCi0gICAgdm9pZCBzZXRTaGFwZVNlZ21lbnRzKGNvbnN0IFZlY3RvcjxpbnQ+
JiBzZWdtZW50cykgeyBtX3NoYXBlLnNldFNlZ21lbnRzKHNlZ21lbnRzKTsgfQotICAgIHZvaWQg
c2V0U2hhcGVTcGFucyhjb25zdCBWZWN0b3I8U3Bhbj4mIHNwYW5zKSB7IG1fc2hhcGUuc2V0U3Bh
bnMoc3BhbnMpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVCb3VuZHNGcm9tU2hh
cGUoKTsKLQotcHJpdmF0ZToKLQogICAgIGNsYXNzIFNoYXBlIHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIFNoYXBlKCk7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIFNoYXBlKCk7CiAgICAgICAgIFNo
YXBlKGNvbnN0IEludFJlY3QmKTsKIAogICAgICAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0OwpA
QCAtMTIwLDIyICsxMTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIFNoYXBlIHN1YnRy
YWN0U2hhcGVzKGNvbnN0IFNoYXBlJiBzaGFwZTEsIGNvbnN0IFNoYXBlJiBzaGFwZTIpOwogCiAg
ICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEludFNpemUmKTsKLSAg
ICAgICAgdm9pZCBzd2FwKFNoYXBlJik7CiAKICAgICAgICAgc3RydWN0IENvbXBhcmVDb250YWlu
c09wZXJhdGlvbjsKICAgICAgICAgc3RydWN0IENvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uOwog
CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmVPcGVyYXRpb24+CiAgICAgICAgIHN0
YXRpYyBib29sIGNvbXBhcmVTaGFwZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29uc3QgU2hhcGUm
IHNoYXBlMik7Ci0gICAgICAgIAotICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzVmFsaWQo
KSBjb25zdDsKLQotICAgICAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4KLSAgICAg
ICAgY29uc3QgVmVjdG9yPGludCwgMzI+JiBzZWdtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fc2Vn
bWVudHM7IH0KLSAgICAgICAgY29uc3QgVmVjdG9yPFNwYW4sIDE2PiYgc3BhbnMoKSBjb25zdCB7
IHJldHVybiBtX3NwYW5zOyB9CiAKLSAgICAgICAgdm9pZCBzZXRTZWdtZW50cyhjb25zdCBWZWN0
b3I8aW50PiYgc2VnbWVudHMpIHsgbV9zZWdtZW50cyA9IHNlZ21lbnRzOyB9Ci0gICAgICAgIHZv
aWQgc2V0U3BhbnMoY29uc3QgVmVjdG9yPFNwYW4+JiBzcGFucykgeyBtX3NwYW5zID0gc3BhbnM7
IH0KKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYp
IGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
U2hhcGU+IGRlY29kZShEZWNvZGVyJik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHZvaWQg
ZHVtcCgpIGNvbnN0OwpAQCAtMTYyLDEyICsxNDgsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNoYXBlJik7CiAgICAgfTsK
IAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gY29weVNoYXBlKCkgY29uc3QgeyByZXR1cm4g
bV9zaGFwZSA/IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KCptX3NoYXBlKSA6IG51bGxwdHI7IH0K
KyAgICB2b2lkIHNldFNoYXBlKFNoYXBlJiYpOworCiAgICAgSW50UmVjdCBtX2JvdW5kczsKLSAg
ICBTaGFwZSBtX3NoYXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gbV9zaGFwZTsKIAog
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaW9uJiwgY29uc3QgUmVnaW9uJik7
CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNoYXBlJik7
CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTcGFuJiwgY29uc3QgU3BhbiYpOwor
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgU3BhbiYsIGNvbnN0IFNwYW4mKTsKIH07
CiAKIHN0YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChjb25zdCBSZWdpb24mIGEsIGNvbnN0
IFJlZ2lvbiYgYikKQEAgLTE3Nyw3ICsxNjcsNyBAQCBzdGF0aWMgaW5saW5lIFJlZ2lvbiBpbnRl
cnNlY3QoY29uc3QgUmVnCiAKICAgICByZXR1cm4gcmVzdWx0OwogfQotICAgIAorCiBzdGF0aWMg
aW5saW5lIFJlZ2lvbiBzdWJ0cmFjdChjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lvbiYgYikK
IHsKICAgICBSZWdpb24gcmVzdWx0KGEpOwpAQCAtMTk2LDcgKzE4Niw3IEBAIHN0YXRpYyBpbmxp
bmUgUmVnaW9uIHRyYW5zbGF0ZShjb25zdCBSZWcKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lvbiYgYikKIHsKLSAgICByZXR1cm4gYS5tX2JvdW5k
cyA9PSBiLm1fYm91bmRzICYmIGEubV9zaGFwZSA9PSBiLm1fc2hhcGU7CisgICAgcmV0dXJuIGEu
bV9ib3VuZHMgPT0gYi5tX2JvdW5kcyAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGEubV9zaGFw
ZSwgYi5tX3NoYXBlKTsKIH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVnaW9uJiBh
LCBjb25zdCBSZWdpb24mIGIpCiB7CkBAIC0yMTIsMTEgKzIwMiwxMDggQEAgaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBSZWdpb246OlNwYQogewogICAgIHJldHVybiBhLnkgPT0gYi55ICYm
IGEuc2VnbWVudEluZGV4ID09IGIuc2VnbWVudEluZGV4OwogfQorCiBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFJlZ2lvbjo6U3BhbiYgYSwgY29uc3QgUmVnaW9uOjpTcGFuJiBiKQogewog
ICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lk
IFJlZ2lvbjo6U3Bhbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5j
b2RlciA8PCB5IDw8IHNlZ21lbnRJbmRleDsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
K09wdGlvbmFsPFJlZ2lvbjo6U3Bhbj4gUmVnaW9uOjpTcGFuOjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICBPcHRpb25hbDxpbnQ+IHk7CisgICAgZGVjb2RlciA+PiB5OworICAgIGlm
ICgheSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIE9wdGlvbmFsPHNpemVfdD4gc2VnbWVu
dEluZGV4OworICAgIGRlY29kZXIgPj4gc2VnbWVudEluZGV4OworICAgIGlmICghc2VnbWVudElu
ZGV4KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHsgeyAqeSwgKnNlZ21lbnRJ
bmRleCB9IH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFJlZ2lvbjo6U2hh
cGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9z
ZWdtZW50czsKKyAgICBlbmNvZGVyIDw8IG1fc3BhbnM7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitPcHRpb25hbDxSZWdpb246OlNoYXBlPiBSZWdpb246OlNoYXBlOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxWZWN0b3I8aW50Pj4gc2VnbWVudHM7Cisg
ICAgZGVjb2RlciA+PiBzZWdtZW50czsKKyAgICBpZiAoIXNlZ21lbnRzKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8VmVjdG9yPFJlZ2lvbjo6U3Bhbj4+IHNw
YW5zOworICAgIGRlY29kZXIgPj4gc3BhbnM7CisgICAgaWYgKCFzcGFucykKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFNoYXBlIHNoYXBlOworICAgIHNoYXBlLm1fc2VnbWVu
dHMgPSBXVEZNb3ZlKCpzZWdtZW50cyk7CisgICAgc2hhcGUubV9zcGFucyA9IFdURk1vdmUoKnNw
YW5zKTsKKworICAgIHJldHVybiB7IHNoYXBlIH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29k
ZXI+Cit2b2lkIFJlZ2lvbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2RlciA8PCBtX2JvdW5kczsKKyAgICBib29sIGhhc1NoYXBlID0gISFtX3NoYXBlOworICAg
IGVuY29kZXIgPDwgaGFzU2hhcGU7CisgICAgaWYgKGhhc1NoYXBlKQorICAgICAgICBlbmNvZGVy
IDw8ICptX3NoYXBlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVn
aW9uPiBSZWdpb246OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPElu
dFJlY3Q+IGJvdW5kczsKKyAgICBkZWNvZGVyID4+IGJvdW5kczsKKyAgICBpZiAoIWJvdW5kcykK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPGJvb2w+IGhhc1No
YXBlOworICAgIGRlY29kZXIgPj4gaGFzU2hhcGU7CisgICAgaWYgKCFoYXNTaGFwZSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFJlZ2lvbiByZWdpb24gPSB7ICpib3VuZHMg
fTsKKworICAgIGlmICgqaGFzU2hhcGUpIHsKKyAgICAgICAgT3B0aW9uYWw8U2hhcGU+IHNoYXBl
OworICAgICAgICBkZWNvZGVyID4+IHNoYXBlOworICAgICAgICBpZiAoIXNoYXBlKQorICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmVnaW9uLm1fc2hhcGUgPSBzdGQ6
Om1ha2VfdW5pcXVlPFNoYXBlPihXVEZNb3ZlKCpzaGFwZSkpOworICAgIH0KKworICAgIHJldHVy
biB7IHJlZ2lvbiB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorYm9vbCBSZWdpb246
OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWdpb24mIHJlZ2lvbikKK3sKKyAgICBPcHRpb25h
bDxSZWdpb24+IGRlY29kZWRSZWdpb247CisgICAgZGVjb2RlciA+PiBkZWNvZGVkUmVnaW9uOwor
ICAgIGlmICghZGVjb2RlZFJlZ2lvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlZ2lv
biA9IFdURk1vdmUoKmRlY29kZWRSZWdpb24pOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZWdpb25faApJbmRleDogU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0Mjk0MSkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzAgQEAKKzIwMTktMDMtMTQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBw
bGUuY29tPgorCisgICAgICAgIE9wdGltaXplIFJlZ2lvbiBmb3Igc2luZ2xlIHJlY3RhbmdsZSBj
YXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU3
NDMKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvRGVjb2Rlci5jcHA6CisgICAgICAgIChJUEM6OkRlY29kZXI6Om9wZXJhdG9yPj4p
OgorICAgICAgICAoSVBDOjpEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9EZWNvZGVyLmg6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuY3BwOgorICAgICAg
ICAoSVBDOjpFbmNvZGVyOjplbmNvZGUpOgorCisgICAgICAgIEFkZCBzaXplX3QgcHJpbWl0aXZl
IHN1cHBvcnQuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5oOgorICAgICAgICAq
IFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW06Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByb3BlcnRp
ZXM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6
CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8RXZlbnRUcmFja2luZ1JlZ2lvbnM+OjpkZWNv
ZGUpOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmVuY29kZSk6
IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVnaW9uOjpTcGFuPjo6ZGVj
b2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWdpb24+OjplbmNv
ZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZ2lvbj46OmRlY29k
ZSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgor
CiAyMDE5LTAzLTEzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAg
W0NvbnRlbnRDaGFuZ2VPYnNlcnZlcl0gU3RvcCBjb250ZW50IG9ic2VydmF0aW9uIHdoZW4gY29u
dGVudCBjYWxscyBwcmV2ZW50RGVmYXVsdCgpIG9uIHRvdWNoIGV2ZW50cwpJbmRleDogU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI0Mjk0MSkKKysrIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAs
NiArMjUwLDExIEBAIERlY29kZXImIERlY29kZXI6Om9wZXJhdG9yPj4oT3B0aW9uYWw8ZG8KICAg
ICByZXR1cm4gZ2V0T3B0aW9uYWwob3B0aW9uYWwpOwogfQogCitEZWNvZGVyJiBEZWNvZGVyOjpv
cGVyYXRvcj4+KE9wdGlvbmFsPHNpemVfdD4mIG9wdGlvbmFsKQoreworICAgIHJldHVybiBnZXRP
cHRpb25hbChvcHRpb25hbCk7Cit9CisKIGJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGJvb2wmIHJlc3Vs
dCkKIHsKICAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZW9mKHJlc3VsdCksIHNpemVv
ZihyZXN1bHQpKSkKQEAgLTM0MCw2ICszNDUsMTUgQEAgYm9vbCBEZWNvZGVyOjpkZWNvZGUoZG91
YmxlJiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2Rl
KHNpemVfdCYgcmVzdWx0KQoreworICAgIGlmICghYWxpZ25CdWZmZXJQb3NpdGlvbihzaXplb2Yo
cmVzdWx0KSwgc2l6ZW9mKHJlc3VsdCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBk
ZWNvZGVWYWx1ZUZyb21CdWZmZXIocmVzdWx0LCBtX2J1ZmZlclBvcyk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIGJvb2wgRGVjb2Rlcjo6cmVtb3ZlQXR0YWNobWVudChBdHRhY2htZW50JiBhdHRh
Y2htZW50KQogewogICAgIGlmIChtX2F0dGFjaG1lbnRzLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHJldmlzaW9uIDI0Mjk0MSkKKysrIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcs
OCBAQCBwdWJsaWM6CiAgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRpb25hbDxmbG9hdD4mKTsK
ICAgICBib29sIGRlY29kZShkb3VibGUmKTsKICAgICBEZWNvZGVyJiBvcGVyYXRvcj4+KE9wdGlv
bmFsPGRvdWJsZT4mKTsKKyAgICBib29sIGRlY29kZShzaXplX3QmKTsKKyAgICBEZWNvZGVyJiBv
cGVyYXRvcj4+KE9wdGlvbmFsPHNpemVfdD4mKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+
CiAgICAgYXV0byBkZWNvZGUoRSYgZSkgLT4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08
RT46OnZhbHVlLCBib29sPgpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5j
cHAJKHJldmlzaW9uIDI0Mjk0MSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29k
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNiArMjU2LDEyIEBAIHZvaWQgRW5jb2Rlcjo6
ZW5jb2RlKGRvdWJsZSBuKQogICAgIGNvcHlWYWx1ZVRvQnVmZmVyKG4sIGJ1ZmZlcik7CiB9CiAK
K3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHNpemVfdCBuKQoreworICAgIHVpbnQ4X3QqIGJ1ZmZlciA9
IGdyb3coc2l6ZW9mKG4pLCBzaXplb2YobikpOworICAgIGNvcHlWYWx1ZVRvQnVmZmVyKG4sIGJ1
ZmZlcik7Cit9CisKIHZvaWQgRW5jb2Rlcjo6YWRkQXR0YWNobWVudChBdHRhY2htZW50JiYgYXR0
YWNobWVudCkKIHsKICAgICBtX2F0dGFjaG1lbnRzLmFwcGVuZChXVEZNb3ZlKGF0dGFjaG1lbnQp
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHJldmlzaW9uIDI0Mjk0
MSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDYgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBlbmNvZGUoaW50NjRfdCk7
CiAgICAgdm9pZCBlbmNvZGUoZmxvYXQpOwogICAgIHZvaWQgZW5jb2RlKGRvdWJsZSk7CisgICAg
dm9pZCBlbmNvZGUoc2l6ZV90KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEU+CiAgICAgYXV0
byBlbmNvZGUoRSB2YWx1ZSkgLT4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2VudW08RT46OnZh
bHVlPgpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuY3BwCShyZXZpc2lvbiAyNDI5NDEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsOCArMzY3LDkgQEAgdm9p
ZCBBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPgogCiBib29sIEFyZ3VtZW50Q29k
ZXI8RXZlbnRUcmFja2luZ1JlZ2lvbnM+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgRXZlbnRU
cmFja2luZ1JlZ2lvbnMmIGV2ZW50VHJhY2tpbmdSZWdpb25zKQogewotICAgIFJlZ2lvbiBhc3lu
Y2hyb25vdXNEaXNwYXRjaFJlZ2lvbjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFzeW5jaHJv
bm91c0Rpc3BhdGNoUmVnaW9uKSkKKyAgICBPcHRpb25hbDxSZWdpb24+IGFzeW5jaHJvbm91c0Rp
c3BhdGNoUmVnaW9uOworICAgIGRlY29kZXIgPj4gYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb247
CisgICAgaWYgKCFhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWdpb24+IGV2ZW50U3BlY2lmaWNTeW5jaHJvbm91
c0Rpc3BhdGNoUmVnaW9uczsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGV2ZW50U3BlY2lmaWNT
eW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykpCkBAIC0zNzgsNyArMzc5LDcgQEAgYm9vbCBBcmd1
bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPgogICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
dG91Y2hBY3Rpb25EYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCi0gICAgZXZl
bnRUcmFja2luZ1JlZ2lvbnMuYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24gPSBXVEZNb3ZlKGFz
eW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9uKTsKKyAgICBldmVudFRyYWNraW5nUmVnaW9ucy5hc3lu
Y2hyb25vdXNEaXNwYXRjaFJlZ2lvbiA9IFdURk1vdmUoKmFzeW5jaHJvbm91c0Rpc3BhdGNoUmVn
aW9uKTsKICAgICBldmVudFRyYWNraW5nUmVnaW9ucy5ldmVudFNwZWNpZmljU3luY2hyb25vdXNE
aXNwYXRjaFJlZ2lvbnMgPSBXVEZNb3ZlKGV2ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNo
UmVnaW9ucyk7CiAjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQogICAgIGV2ZW50VHJhY2tpbmdS
ZWdpb25zLnRvdWNoQWN0aW9uRGF0YSA9IFdURk1vdmUodG91Y2hBY3Rpb25EYXRhKTsKQEAgLTkw
Miw2NiArOTAzLDYgQEAgT3B0aW9uYWw8UmVjZW50U2VhcmNoPiBBcmd1bWVudENvZGVyPFJlYwog
ICAgIHJldHVybiB7eyBXVEZNb3ZlKCpzdHJpbmcpLCBXVEZNb3ZlKCp0aW1lKSB9fTsKIH0KIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+IHsKLSAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFJlZ2lvbjo6U3BhbiYpOwotICAgIHN0YXRp
YyBPcHRpb25hbDxSZWdpb246OlNwYW4+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi12b2lkIEFy
Z3VtZW50Q29kZXI8UmVnaW9uOjpTcGFuPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFJlZ2lvbjo6U3BhbiYgc3BhbikKLXsKLSAgICBlbmNvZGVyIDw8IHNwYW4ueTsKLSAgICBlbmNv
ZGVyIDw8ICh1aW50NjRfdClzcGFuLnNlZ21lbnRJbmRleDsKLX0KLQotT3B0aW9uYWw8UmVnaW9u
OjpTcGFuPiBBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQotewotICAgIFJlZ2lvbjo6U3BhbiBzcGFuOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c3Bhbi55KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICB1aW50NjRf
dCBzZWdtZW50SW5kZXg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzZWdtZW50SW5kZXgpKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIAotICAgIHNwYW4uc2VnbWVudEluZGV4
ID0gc2VnbWVudEluZGV4OwotICAgIHJldHVybiBXVEZNb3ZlKHNwYW4pOwotfQotCi12b2lkIEFy
Z3VtZW50Q29kZXI8UmVnaW9uPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJlZ2lv
biYgcmVnaW9uKQotewotICAgIGVuY29kZXIuZW5jb2RlKHJlZ2lvbi5zaGFwZVNlZ21lbnRzKCkp
OwotICAgIGVuY29kZXIuZW5jb2RlKHJlZ2lvbi5zaGFwZVNwYW5zKCkpOwotfQotCi1ib29sIEFy
Z3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlZ2lvbiYgcmVn
aW9uKQotewotICAgIFZlY3RvcjxpbnQ+IHNlZ21lbnRzOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc2VnbWVudHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8UmVnaW9u
OjpTcGFuPiBzcGFuczsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNwYW5zKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJlZ2lvbi5zZXRTaGFwZVNlZ21lbnRzKHNlZ21lbnRz
KTsKLSAgICByZWdpb24uc2V0U2hhcGVTcGFucyhzcGFucyk7Ci0gICAgcmVnaW9uLnVwZGF0ZUJv
dW5kc0Zyb21TaGFwZSgpOwotICAgIAotICAgIGlmICghcmVnaW9uLmlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLU9wdGlvbmFsPFJlZ2lv
bj4gQXJndW1lbnRDb2RlcjxSZWdpb24+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAg
ICBSZWdpb24gcmVnaW9uOwotICAgIGlmICghZGVjb2RlKGRlY29kZXIsIHJlZ2lvbikpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gcmVnaW9uOwotfQotCiB2b2lk
IEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IExl
bmd0aCYgbGVuZ3RoKQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2Rl
KGVuY29kZXIsIGxlbmd0aCk7CkBAIC05NzIsNyArOTEzLDYgQEAgYm9vbCBBcmd1bWVudENvZGVy
PExlbmd0aD46OmRlY29kZShEZWNvZAogICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPExl
bmd0aD46OmRlY29kZShkZWNvZGVyLCBsZW5ndGgpOwogfQogCi0KIHZvaWQgQXJndW1lbnRDb2Rl
cjxWaWV3cG9ydEF0dHJpYnV0ZXM+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgVmll
d3BvcnRBdHRyaWJ1dGVzJiB2aWV3cG9ydEF0dHJpYnV0ZXMpCiB7CiAgICAgU2ltcGxlQXJndW1l
bnRDb2RlcjxWaWV3cG9ydEF0dHJpYnV0ZXM+OjplbmNvZGUoZW5jb2Rlciwgdmlld3BvcnRBdHRy
aWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oCShyZXZpc2lvbiAyNDI5NDEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDEyICszMjQsNiBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiAgICAgc3RhdGljIE9wdGlvbmFs
PFdlYkNvcmU6OlBhdGg+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlZ2lvbj4gewotICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UmVnaW9uJik7Ci0gICAgc3RhdGljIGJvb2wgZGVj
b2RlKERlY29kZXImLCBXZWJDb3JlOjpSZWdpb24mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8V2Vi
Q29yZTo6UmVnaW9uPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQogdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpMZW5ndGg+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6Okxlbmd0aCYpOwogICAgIHN0YXRpYyBib29sIGRlY29k
ZShEZWNvZGVyJiwgV2ViQ29yZTo6TGVuZ3RoJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLm1tCShyZXZpc2lvbiAyNDI5NDEpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1v
dGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI5OCw3ICsyOTgsNyBAQCB2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkcmF3SW5Db250
CiAgICAgLy8gT3RoZXJ3aXNlLCByZXBhaW50IHRoZSBlbnRpcmUgYm91bmRpbmcgYm94IG9mIHRo
ZSBkaXJ0eSByZWdpb24uCiAgICAgV2ViQ29yZTo6SW50UmVjdCBkaXJ0eUJvdW5kcyA9IG1fZGly
dHlSZWdpb24uYm91bmRzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gZGlydHlS
ZWN0cyA9IG1fZGlydHlSZWdpb24ucmVjdHMoKTsKKyAgICBhdXRvIGRpcnR5UmVjdHMgPSBtX2Rp
cnR5UmVnaW9uLnJlY3RzKCk7CiAgICAgaWYgKGRpcnR5UmVjdHMuc2l6ZSgpID4gV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyOjp3ZWJMYXllck1heFJlY3RzVG9QYWludCB8fCBtX2RpcnR5UmVnaW9u
LnRvdGFsQXJlYSgpID4gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjp3ZWJMYXllcldhc3RlZFNw
YWNlVGhyZXNob2xkICogZGlydHlCb3VuZHMud2lkdGgoKSAqIGRpcnR5Qm91bmRzLmhlaWdodCgp
KSB7CiAgICAgICAgIGRpcnR5UmVjdHMuY2xlYXIoKTsKICAgICAgICAgZGlydHlSZWN0cy5hcHBl
bmQoZGlydHlCb3VuZHMpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5t
bQkocmV2aXNpb24gMjQyOTQxKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MTUs
MTAgKzUxNSwxMSBAQCBib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclByCiAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzRXZlbnRSZWdpb24pKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoaGFzRXZlbnRSZWdpb24pIHsKLSAgICAgICAgICAg
IGF1dG8gZXZlbnRSZWdpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlJlZ2lvbj4oKTsK
LSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoKmV2ZW50UmVnaW9uKSkKKyAgICAgICAg
ICAgIE9wdGlvbmFsPFdlYkNvcmU6OlJlZ2lvbj4gZXZlbnRSZWdpb247CisgICAgICAgICAgICBk
ZWNvZGVyID4+IGV2ZW50UmVnaW9uOworICAgICAgICAgICAgaWYgKCFldmVudFJlZ2lvbikKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQuZXZlbnRSZWdp
b24gPSBXVEZNb3ZlKGV2ZW50UmVnaW9uKTsKKyAgICAgICAgICAgIHJlc3VsdC5ldmVudFJlZ2lv
biA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaW9uPihXVEZNb3ZlKCpldmVudFJlZ2lvbikpOwogICAg
ICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364785</attachid>
            <date>2019-03-15 03:21:36 -0700</date>
            <delta_ts>2019-03-15 03:53:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize-5.patch</filename>
            <type>text/plain</type>
            <size>29090</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgIEluc3RydW1lbnRhdGlvbiBzaG93cyB2YXN0IG1ham9yaXR5IG9mIFJlZ2lv
biBvYmplY3RzIGNvbnNpc3Qgb2YgYSBzaW5nbGUgcmVjdGFuZ2xlLiBIb3dldmVyIGl0IGFsd2F5
cyBhbGxvY2F0ZXMKKyAgICAgICAgdGhlIGxhcmdlIFNoYXBlIGRhdGEgc3RydWN0dXJlLiBUaGlz
IG1ha2VzIGl0IHVuc3VpdGFibGUgdG8gdXNlIGFzIGEgbWVtYmVyIGluIGFueSBwb3B1bGFyIG9i
amVjdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBvcHRpbWl6ZXMgdGhlIHNpbmdsZSByZWN0YW5n
bGUgY2FzZSBieSB1c2luZyBvbmx5IHRoZSBib3VuZHMgcmVjdGFuZ2xlIHRvIGRlc2NyaWJlIGl0
LgorICAgICAgICBTaGFwZSBpcyBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGlzIG1ha2VzIGl0IHNh
ZmUgdG8gdXNlIFJlZ2lvbiBhcyBhIGRhdGEgbWVtYmVyIHdoZXJlIGEgcmVjdGFuZ2xlIGlzIHRo
ZSBjb21tb24gY2FzZS4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBtb2Rlcm5pemVzIFJlZ2lv
biBlbmNvZGluZy9kZWNvZGluZyBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6UmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6flJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaW9uOjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6
U2hhcGU6OlNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNw
YW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dW5p
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzdWJ0cmFjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3dhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbm93IHVudXNlZCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
Ojppc1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpncmlkU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmNvcHlTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkZWNvZGUpOgor
CisgICAgICAgIFRoaXMgaXMgbm93IHBhcnQgb2YgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6
UmVnaW9uOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6U3Bhbjo6U3Bhbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNoYXBl
U2VnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzaGFw
ZVNwYW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNoYXBl
U3BhbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2VnbWVu
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3Bh
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U2VnbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U3BhbnMpOiBEZWxldGVkLgorCisgICAgICAgIE5vIG5lZWQgdG8gZXhwb3NlIHRoZXNlIGZvciBl
bmNvZGluZyBhbnltb3JlLgorCiAyMDE5LTAzLTE1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIGEgd2F5IHRvIGNhcHR1
cmUgYSBzY3JlZW5zaG90IG9mIGEgbm9kZSBmcm9tIHdpdGhpbiB0aGUgcGFnZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCShyZXZpc2lvbiAyNDI5
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxOSArNDIsNTQgQEAgUmVnaW9uOjpSZWdpb24oKQogCiBSZWdpb246
OlJlZ2lvbihjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIDogbV9ib3VuZHMocmVjdCkKLSAgICAs
IG1fc2hhcGUocmVjdCkKIHsKIH0KIAotVmVjdG9yPEludFJlY3Q+IFJlZ2lvbjo6cmVjdHMoKSBj
b25zdAorUmVnaW9uOjpSZWdpb24oY29uc3QgUmVnaW9uJiBvdGhlcikKKyAgICA6IG1fYm91bmRz
KG90aGVyLm1fYm91bmRzKQorICAgICwgbV9zaGFwZShvdGhlci5jb3B5U2hhcGUoKSkKIHsKLSAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Cit9CisKK1JlZ2lvbjo6UmVnaW9uKFJlZ2lvbiYmIG90
aGVyKQorICAgIDogbV9ib3VuZHMoV1RGTW92ZShvdGhlci5tX2JvdW5kcykpCisgICAgLCBtX3No
YXBlKFdURk1vdmUob3RoZXIubV9zaGFwZSkpCit7Cit9CisKK1JlZ2lvbjo6flJlZ2lvbigpCit7
Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRvcj0oY29uc3QgUmVnaW9uJiBvdGhlcikKK3sK
KyAgICBtX2JvdW5kcyA9IG90aGVyLm1fYm91bmRzOworICAgIG1fc2hhcGUgPSBvdGhlci5jb3B5
U2hhcGUoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRv
cj0oUmVnaW9uJiYgb3RoZXIpCit7CisgICAgbV9ib3VuZHMgPSBXVEZNb3ZlKG90aGVyLm1fYm91
bmRzKTsKKyAgICBtX3NoYXBlID0gV1RGTW92ZShvdGhlci5tX3NoYXBlKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1ZlY3RvcjxJbnRSZWN0LCAxPiBSZWdpb246OnJlY3RzKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHM7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRl
cmF0b3Igc3BhbiA9IG1fc2hhcGUuc3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19l
bmQoKTsgc3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAo
IW1fc2hhcGUpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZWN0cy51bmNoZWNrZWRBcHBlbmQobV9ib3VuZHMpOworICAgICAgICByZXR1cm4gcmVjdHM7
CisgICAgfQorCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLT5z
cGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19lbmQoKTsgc3BhbiAhPSBlbmQgJiYg
c3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAgaW50IHkgPSBzcGFuLT55OwogICAg
ICAgICBpbnQgaGVpZ2h0ID0gKHNwYW4gKyAxKS0+eSAtIHk7CiAKLSAgICAgICAgZm9yIChTaGFw
ZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNlZ21lbnRzX2JlZ2luKHNwYW4p
LCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYgc2Vn
bWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAgICAgZm9yIChTaGFwZTo6U2Vn
bWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50c19iZWdpbihzcGFuKSwgZW5k
ID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50
ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAgICAgaW50IHggPSAqc2VnbWVu
dDsKICAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKIApAQCAtNzAs
NyArMTA1LDEwIEBAIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBSZWdpb24mIHJlZ2kKICAg
ICBpZiAoIW1fYm91bmRzLmNvbnRhaW5zKHJlZ2lvbi5tX2JvdW5kcykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBTaGFwZTo6Y29tcGFyZVNoYXBlczxTaGFwZTo6Q29tcGFy
ZUNvbnRhaW5zT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFt
X3NoYXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBTaGFwZTo6Y29tcGFy
ZVNoYXBlczxTaGFwZTo6Q29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uPigqbV9zaGFwZSwgcmVnaW9u
Lm1fc2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiBTaGFwZShyZWdpb24ubV9ib3VuZHMpKTsKIH0K
IAogYm9vbCBSZWdpb246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAg
LTc4LDcgKzExNiwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFpbnMoY29uc3QgSW50UG9pbnQmIHBv
CiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGZvciAoU2hhcGU6OlNwYW5JdGVyYXRvciBzcGFuID0gbV9zaGFwZS5zcGFuc19i
ZWdpbigpLCBlbmQgPSBtX3NoYXBlLnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFuICsg
MSAhPSBlbmQ7ICsrc3BhbikgeworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0b3Igc3BhbiA9IG1fc2hhcGUtPnNwYW5z
X2JlZ2luKCksIGVuZCA9IG1fc2hhcGUtPnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFu
ICsgMSAhPSBlbmQ7ICsrc3BhbikgewogICAgICAgICBpbnQgeSA9IHNwYW4tPnk7CiAgICAgICAg
IGludCBtYXhZID0gKHNwYW4gKyAxKS0+eTsKIApAQCAtODcsNyArMTI4LDcgQEAgYm9vbCBSZWdp
b246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwbwogICAgICAgICBpZiAobWF4WSA8PSBwb2lu
dC55KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBmb3IgKFNoYXBlOjpTZWdt
ZW50SXRlcmF0b3Igc2VnbWVudCA9IG1fc2hhcGUuc2VnbWVudHNfYmVnaW4oc3BhbiksIGVuZCA9
IG1fc2hhcGUuc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsg
MSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgeworICAgICAgICBmb3IgKFNoYXBlOjpTZWdtZW50SXRl
cmF0b3Igc2VnbWVudCA9IG1fc2hhcGUtPnNlZ21lbnRzX2JlZ2luKHNwYW4pLCBlbmQgPSBtX3No
YXBlLT5zZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5kICYmIHNlZ21lbnQgKyAxICE9
IGVuZDsgc2VnbWVudCArPSAyKSB7CiAgICAgICAgICAgICBpbnQgeCA9ICpzZWdtZW50OwogICAg
ICAgICAgICAgaW50IG1heFggPSAqKHNlZ21lbnQgKyAxKTsKIApAQCAtMTA2LDE5ICsxNDcsMTgg
QEAgYm9vbCBSZWdpb246OmludGVyc2VjdHMoY29uc3QgUmVnaW9uJiByZQogICAgIGlmICghbV9i
b3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNl
Y3RzT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFtX3NoYXBl
ICYmICFyZWdpb24ubV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
U2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uPiht
X3NoYXBlID8gKm1fc2hhcGUgOiBtX2JvdW5kcywgcmVnaW9uLm1fc2hhcGUgPyAqcmVnaW9uLm1f
c2hhcGUgOiByZWdpb24ubV9ib3VuZHMpOwogfQogCi11bnNpZ25lZCBSZWdpb246OnRvdGFsQXJl
YSgpIGNvbnN0Cit1aW50NjRfdCBSZWdpb246OnRvdGFsQXJlYSgpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEludFJlY3Q+IHJlY3RzID0gdGhpcy0+cmVjdHMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IHJl
Y3RzLnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b3RhbEFyZWEgPSAwOworICAgIHVpbnQ2NF90IHRv
dGFsQXJlYSA9IDA7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBy
ZWN0cygpKQogICAgICAgICB0b3RhbEFyZWEgKz0gKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0
KCkpOwotICAgIH0KIAogICAgIHJldHVybiB0b3RhbEFyZWE7CiB9CkBAIC0yMjYsMTYgKzI2Niwx
NCBAQCBSZWdpb246OlNoYXBlOjpTaGFwZSgpCiB9CiAKIFJlZ2lvbjo6U2hhcGU6OlNoYXBlKGNv
bnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBtX3NlZ21lbnRzKHsgcmVjdC54KCksIHJlY3QubWF4
WCgpIH0pCisgICAgLCBtX3NwYW5zKHsgeyByZWN0LnkoKSwgMCB9LCB7IHJlY3QubWF4WSgpLCAy
IH0gfSkKIHsKLSAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJl
Y3QueCgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgpKTsKLSAgICBhcHBlbmRTcGFu
KHJlY3QubWF4WSgpKTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFuKGludCB5
KQogewotICAgIG1fc3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdtZW50cy5zaXplKCkpKTsKKyAg
ICBtX3NwYW5zLmFwcGVuZCh7IHksIG1fc2VnbWVudHMuc2l6ZSgpIH0pOwogfQogCiBib29sIFJl
Z2lvbjo6U2hhcGU6OmNhbkNvYWxlc2NlKFNlZ21lbnRJdGVyYXRvciBiZWdpbiwgU2VnbWVudEl0
ZXJhdG9yIGVuZCkKQEAgLTMzMSwyNyArMzY5LDYgQEAgdm9pZCBSZWdpb246OlNoYXBlOjpkdW1w
KCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQoKSBjb25z
dAotewotICAgIGZvciAoYXV0byBzcGFuID0gc3BhbnNfYmVnaW4oKSwgZW5kID0gc3BhbnNfZW5k
KCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytzcGFuKSB7Ci0gICAgICAgIGlu
dCB5ID0gc3Bhbi0+eTsKLSAgICAgICAgaW50IGhlaWdodCA9IChzcGFuICsgMSktPnkgLSB5Owot
ICAgICAgICAKLSAgICAgICAgaWYgKGhlaWdodCA8IDApCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgZm9yIChhdXRvIHNlZ21lbnQgPSBzZWdtZW50c19iZWdpbihzcGFuKSwg
ZW5kID0gc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsgMSAh
PSBlbmQ7IHNlZ21lbnQgKz0gMikgewotICAgICAgICAgICAgaW50IHggPSAqc2VnbWVudDsKLSAg
ICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogSW50UmVjdCBSZWdp
b246OlNoYXBlOjpib3VuZHMoKSBjb25zdAogewogICAgIGlmIChpc0VtcHR5KCkpCkBAIC0zOTcs
MTIgKzQxNCw2IEBAIHZvaWQgUmVnaW9uOjpTaGFwZTo6dHJhbnNsYXRlKGNvbnN0IEludFMKICAg
ICAgICAgbV9zcGFuc1tpXS55ICs9IG9mZnNldC5oZWlnaHQoKTsKIH0KIAotdm9pZCBSZWdpb246
OlNoYXBlOjpzd2FwKFNoYXBlJiBvdGhlcikKLXsKLSAgICBtX3NlZ21lbnRzLnN3YXAob3RoZXIu
bV9zZWdtZW50cyk7Ci0gICAgbV9zcGFucy5zd2FwKG90aGVyLm1fc3BhbnMpOwotfQotCiBlbnVt
IHsKICAgICBTaGFwZTEsCiAgICAgU2hhcGUyLApAQCAtNTY3LDcxICs1NzgsODEgQEAgdm9pZCBS
ZWdpb246OmR1bXAoKSBjb25zdAogewogICAgIHByaW50ZigiQm91bmRzOiAoJWQsICVkLCAlZCwg
JWQpXG4iLAogICAgICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91bmRzLnkoKSwgbV9ib3VuZHMu
d2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fc2hhcGUuZHVtcCgpOworICAgIGlm
IChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT5kdW1wKCk7CiB9CiAjZW5kaWYKIAotdm9pZCBS
ZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpCi17Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBl
LmJvdW5kcygpOwotfQotCiB2b2lkIFJlZ2lvbjo6aW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYgcmVn
aW9uKQogewogICAgIGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkgewotICAgICAgICBt
X3NoYXBlID0gU2hhcGUoKTsKKyAgICAgICAgbV9zaGFwZSA9IG51bGxwdHI7CiAgICAgICAgIG1f
Ym91bmRzID0gSW50UmVjdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV9z
aGFwZSAmJiAhcmVnaW9uLm1fc2hhcGUpIHsKKyAgICAgICAgbV9ib3VuZHMgPSBpbnRlcnNlY3Rp
b24obV9ib3VuZHMsIHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBTaGFwZSBpbnRlcnNlY3RlZFNoYXBlID0gU2hhcGU6OmludGVyc2VjdFNoYXBlcyhtX3No
YXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3YXAoaW50ZXJzZWN0ZWRTaGFw
ZSk7Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOworICAgIHNldFNoYXBlKFNoYXBl
OjppbnRlcnNlY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5t
X3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQg
UmVnaW9uOjp1bml0ZShjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsKICAgICBpZiAocmVnaW9uLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1JlY3QoKSAmJiBtX2JvdW5kcy5j
b250YWlucyhyZWdpb24ubV9ib3VuZHMpKQorICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAg
bV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1fc2hhcGUgPSByZWdpb24uY29w
eVNoYXBlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKHJlZ2lvbi5pc1JlY3Qo
KSAmJiByZWdpb24ubV9ib3VuZHMuY29udGFpbnMobV9ib3VuZHMpKSB7Ci0gICAgICAgIG1fc2hh
cGUgPSByZWdpb24ubV9zaGFwZTsKICAgICAgICAgbV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7
CisgICAgICAgIG1fc2hhcGUgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IC8vIEZJWE1FOiBXZSBtYXkgd2FudCBhbm90aGVyIHdheSB0byBjb25zdHJ1Y3QgYSBSZWdpb24g
d2l0aG91dCBkb2luZyB0aGlzIHRlc3Qgd2hlbiB3ZSBleHBlY3QgaXQgdG8gYmUgZmFsc2UuCi0g
ICAgaWYgKCFpc1JlY3QoKSAmJiBjb250YWlucyhyZWdpb24pKQorICAgIGlmIChjb250YWlucyhy
ZWdpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFwZSB1bml0ZWRTaGFwZSA9IFNoYXBl
Ojp1bmlvblNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3
YXAodW5pdGVkU2hhcGUpOwotICAgIG1fYm91bmRzLnVuaXRlKHJlZ2lvbi5tX2JvdW5kcyk7Cisg
ICAgc2V0U2hhcGUoU2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUgPyAqbV9zaGFwZSA6IG1fYm91
bmRzLCByZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6IHJlZ2lvbi5tX2JvdW5kcykp
OwogfQogCiB2b2lkIFJlZ2lvbjo6c3VidHJhY3QoY29uc3QgUmVnaW9uJiByZWdpb24pCiB7Ci0g
ICAgaWYgKG1fYm91bmRzLmlzRW1wdHkoKSkKKyAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKHJlZ2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU2hhcGUgc3VidHJhY3RlZFNoYXBlID0gU2hhcGU6OnN1YnRyYWN0U2hhcGVzKG1f
c2hhcGUsIHJlZ2lvbi5tX3NoYXBlKTsKLQotICAgIG1fc2hhcGUuc3dhcChzdWJ0cmFjdGVkU2hh
cGUpOwotICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsKKyAgICBzZXRTaGFwZShTaGFw
ZTo6c3VidHJhY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5t
X3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQg
UmVnaW9uOjp0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQogewogICAgIG1fYm91bmRz
Lm1vdmUob2Zmc2V0KTsKLSAgICBtX3NoYXBlLnRyYW5zbGF0ZShvZmZzZXQpOworICAgIGlmICht
X3NoYXBlKQorICAgICAgICBtX3NoYXBlLT50cmFuc2xhdGUob2Zmc2V0KTsKK30KKwordm9pZCBS
ZWdpb246OnNldFNoYXBlKFNoYXBlJiYgc2hhcGUpCit7CisgICAgbV9ib3VuZHMgPSBzaGFwZS5i
b3VuZHMoKTsKKworICAgIGlmIChzaGFwZS5pc1JlY3QoKSkgeworICAgICAgICBtX3NoYXBlID0g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9zaGFwZSkKKyAg
ICAgICAgbV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KFdURk1vdmUoc2hhcGUpKTsK
KyAgICBlbHNlCisgICAgICAgICptX3NoYXBlID0gV1RGTW92ZShzaGFwZSk7CiB9CiAKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmgJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVm
aW5lIFJlZ2lvbl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMSArNDAsMTkgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJl
Z2lvbihjb25zdCBJbnRSZWN0Jik7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWdpb24oY29uc3Qg
UmVnaW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKFJlZ2lvbiYmKTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIH5SZWdpb24oKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbiYgb3Bl
cmF0b3I9KGNvbnN0IFJlZ2lvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbiYgb3BlcmF0
b3I9KFJlZ2lvbiYmKTsKKwogICAgIEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9i
b3VuZHM7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kcy5pc0Vt
cHR5KCk7IH0KLSAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuaXNSZWN0
KCk7IH0KKyAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJuICFtX3NoYXBlOyB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4gcmVjdHMoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHMoKSBjb25zdDsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgdW5pdGUoY29uc3QgUmVnaW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBpbnRlcnNlY3QoY29uc3QgUmVnaW9uJik7CkBAIC01OCw0OCArNjgsMzEgQEAgcHVibGlj
OgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgcmVnaW9uIGludGVyc2VjdHMgYW55
IHBhcnQgb2YgdGhpcyByZWdpb24uCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3Rz
KGNvbnN0IFJlZ2lvbiYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgdG90
YWxBcmVhKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG90YWxBcmVhKCkg
Y29uc3Q7CiAKLSAgICB1bnNpZ25lZCBncmlkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUu
Z3JpZFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGdyaWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFwZSA/IG1fc2hhcGUtPmdyaWRTaXplKCkgOiAwOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
dm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcGUuaXNWYWxpZCgpOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWdpb24+IGRlY29kZShEZWNvZGVyJik7CisgICAgLy8gRklYTUU6
IFJlbW92ZSBsZWdhY3kgZGVjb2RlLgorICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiwgUmVnaW9uJik7CiAKLSAgICAvLyBUaGlzIGlzIGludGVy
bmFsIHRvIFJlZ2lvbiwgYnV0IGV4cG9zZWQganVzdCBmb3IgZW5jb2RpbmcuCi0gICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGVuY29kZSBXZWJDb3JlIGNsYXNzZXMuCitw
cml2YXRlOgogICAgIHN0cnVjdCBTcGFuIHsKLSAgICAgICAgU3BhbigpCi0gICAgICAgICAgICA6
IHkoMCkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KDApCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIFNwYW4oaW50IHksIHNpemVfdCBzZWdtZW50SW5kZXgpCi0gICAgICAgICAg
ICA6IHkoeSkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KHNlZ21lbnRJbmRleCkKLSAgICAg
ICAgewotICAgICAgICB9CisgICAgICAgIGludCB5IHsgMCB9OworICAgICAgICBzaXplX3Qgc2Vn
bWVudEluZGV4IHsgMCB9OwogCi0gICAgICAgIGludCB5OwotICAgICAgICBzaXplX3Qgc2VnbWVu
dEluZGV4OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKLSAgICAvLyBGb3IgZW5jb2Rp
bmcvZGVjb2Rpbmcgb25seS4KLSAgICBjb25zdCBWZWN0b3I8aW50LCAzMj4mIHNoYXBlU2VnbWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLnNlZ21lbnRzKCk7IH0KLSAgICBjb25zdCBWZWN0
b3I8U3BhbiwgMTY+JiBzaGFwZVNwYW5zKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5zcGFucygp
OyB9Ci0KLSAgICB2b2lkIHNldFNoYXBlU2VnbWVudHMoY29uc3QgVmVjdG9yPGludD4mIHNlZ21l
bnRzKSB7IG1fc2hhcGUuc2V0U2VnbWVudHMoc2VnbWVudHMpOyB9Ci0gICAgdm9pZCBzZXRTaGFw
ZVNwYW5zKGNvbnN0IFZlY3RvcjxTcGFuPiYgc3BhbnMpIHsgbV9zaGFwZS5zZXRTcGFucyhzcGFu
cyk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpOwot
Ci1wcml2YXRlOgotCiAgICAgY2xhc3MgU2hhcGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2hh
cGUoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgU2hhcGUoKTsKICAgICAgICAgU2hhcGUoY29u
c3QgSW50UmVjdCYpOwogCiAgICAgICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7CkBAIC0xMjAs
MjIgKzExMywxNSBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWMgU2hhcGUgc3VidHJhY3RTaGFw
ZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29uc3QgU2hhcGUmIHNoYXBlMik7CiAKICAgICAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYpOwotICAgICAgICB2
b2lkIHN3YXAoU2hhcGUmKTsKIAogICAgICAgICBzdHJ1Y3QgQ29tcGFyZUNvbnRhaW5zT3BlcmF0
aW9uOwogICAgICAgICBzdHJ1Y3QgQ29tcGFyZUludGVyc2VjdHNPcGVyYXRpb247CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29tcGFyZU9wZXJhdGlvbj4KICAgICAgICAgc3RhdGljIGJv
b2wgY29tcGFyZVNoYXBlcyhjb25zdCBTaGFwZSYgc2hhcGUxLCBjb25zdCBTaGFwZSYgc2hhcGUy
KTsKLSAgICAgICAgCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWYWxpZCgpIGNvbnN0
OwotCi0gICAgICAgIC8vIEZvciBlbmNvZGluZy9kZWNvZGluZyBvbmx5LgotICAgICAgICBjb25z
dCBWZWN0b3I8aW50LCAzMj4mIHNlZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50czsg
fQotICAgICAgICBjb25zdCBWZWN0b3I8U3BhbiwgMTY+JiBzcGFucygpIGNvbnN0IHsgcmV0dXJu
IG1fc3BhbnM7IH0KIAotICAgICAgICB2b2lkIHNldFNlZ21lbnRzKGNvbnN0IFZlY3RvcjxpbnQ+
JiBzZWdtZW50cykgeyBtX3NlZ21lbnRzID0gc2VnbWVudHM7IH0KLSAgICAgICAgdm9pZCBzZXRT
cGFucyhjb25zdCBWZWN0b3I8U3Bhbj4mIHNwYW5zKSB7IG1fc3BhbnMgPSBzcGFuczsgfQorICAg
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFwZT4g
ZGVjb2RlKERlY29kZXImKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBkdW1wKCkg
Y29uc3Q7CkBAIC0xNjIsMTIgKzE0OCwxNiBAQCBwcml2YXRlOgogICAgICAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFNoYXBlJiwgY29uc3QgU2hhcGUmKTsKICAgICB9OwogCisgICAg
c3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBjb3B5U2hhcGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXBl
ID8gc3RkOjptYWtlX3VuaXF1ZTxTaGFwZT4oKm1fc2hhcGUpIDogbnVsbHB0cjsgfQorICAgIHZv
aWQgc2V0U2hhcGUoU2hhcGUmJik7CisKICAgICBJbnRSZWN0IG1fYm91bmRzOwotICAgIFNoYXBl
IG1fc2hhcGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBtX3NoYXBlOwogCiAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpb24mLCBjb25zdCBSZWdpb24mKTsKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXBlJiwgY29uc3QgU2hhcGUmKTsKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNwYW4mLCBjb25zdCBTcGFuJik7CisgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTcGFuJiwgY29uc3QgU3BhbiYpOwogfTsKIAogc3Rh
dGljIGlubGluZSBSZWdpb24gaW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9u
JiBiKQpAQCAtMTc3LDcgKzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChj
b25zdCBSZWcKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0gICAgCisKIHN0YXRpYyBpbmxpbmUg
UmVnaW9uIHN1YnRyYWN0KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQogewogICAg
IFJlZ2lvbiByZXN1bHQoYSk7CkBAIC0xOTYsNyArMTg2LDcgQEAgc3RhdGljIGlubGluZSBSZWdp
b24gdHJhbnNsYXRlKGNvbnN0IFJlZwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJl
Z2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQogewotICAgIHJldHVybiBhLm1fYm91bmRzID09IGIu
bV9ib3VuZHMgJiYgYS5tX3NoYXBlID09IGIubV9zaGFwZTsKKyAgICByZXR1cm4gYS5tX2JvdW5k
cyA9PSBiLm1fYm91bmRzICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoYS5tX3NoYXBlLCBiLm1f
c2hhcGUpOwogfQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWdpb24mIGEsIGNvbnN0
IFJlZ2lvbiYgYikKIHsKQEAgLTIxMiwxMSArMjAyLDEwOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFJlZ2lvbjo6U3BhCiB7CiAgICAgcmV0dXJuIGEueSA9PSBiLnkgJiYgYS5zZWdt
ZW50SW5kZXggPT0gYi5zZWdtZW50SW5kZXg7CiB9CisKIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgUmVnaW9uOjpTcGFuJiBhLCBjb25zdCBSZWdpb246OlNwYW4mIGIpCiB7CiAgICAgcmV0
dXJuICEoYSA9PSBiKTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVnaW9u
OjpTcGFuOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IHkgPDwgc2VnbWVudEluZGV4OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9u
YWw8UmVnaW9uOjpTcGFuPiBSZWdpb246OlNwYW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIE9wdGlvbmFsPGludD4geTsKKyAgICBkZWNvZGVyID4+IHk7CisgICAgaWYgKCF5KQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgT3B0aW9uYWw8c2l6ZV90PiBzZWdtZW50SW5kZXg7
CisgICAgZGVjb2RlciA+PiBzZWdtZW50SW5kZXg7CisgICAgaWYgKCFzZWdtZW50SW5kZXgpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyB7ICp5LCAqc2VnbWVudEluZGV4IH0g
fTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVnaW9uOjpTaGFwZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3NlZ21lbnRz
OworICAgIGVuY29kZXIgPDwgbV9zcGFuczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
K09wdGlvbmFsPFJlZ2lvbjo6U2hhcGU+IFJlZ2lvbjo6U2hhcGU6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZlY3RvcjxpbnQ+PiBzZWdtZW50czsKKyAgICBkZWNv
ZGVyID4+IHNlZ21lbnRzOworICAgIGlmICghc2VnbWVudHMpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxWZWN0b3I8UmVnaW9uOjpTcGFuPj4gc3BhbnM7Cisg
ICAgZGVjb2RlciA+PiBzcGFuczsKKyAgICBpZiAoIXNwYW5zKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgU2hhcGUgc2hhcGU7CisgICAgc2hhcGUubV9zZWdtZW50cyA9IFdU
Rk1vdmUoKnNlZ21lbnRzKTsKKyAgICBzaGFwZS5tX3NwYW5zID0gV1RGTW92ZSgqc3BhbnMpOwor
CisgICAgcmV0dXJuIHsgc2hhcGUgfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3Zv
aWQgUmVnaW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IG1fYm91bmRzOworICAgIGJvb2wgaGFzU2hhcGUgPSAhIW1fc2hhcGU7CisgICAgZW5jb2Rl
ciA8PCBoYXNTaGFwZTsKKyAgICBpZiAoaGFzU2hhcGUpCisgICAgICAgIGVuY29kZXIgPDwgKm1f
c2hhcGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWdpb24+IFJl
Z2lvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8SW50UmVjdD4g
Ym91bmRzOworICAgIGRlY29kZXIgPj4gYm91bmRzOworICAgIGlmICghYm91bmRzKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzU2hhcGU7Cisg
ICAgZGVjb2RlciA+PiBoYXNTaGFwZTsKKyAgICBpZiAoIWhhc1NoYXBlKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgUmVnaW9uIHJlZ2lvbiA9IHsgKmJvdW5kcyB9OworCisg
ICAgaWYgKCpoYXNTaGFwZSkgeworICAgICAgICBPcHRpb25hbDxTaGFwZT4gc2hhcGU7CisgICAg
ICAgIGRlY29kZXIgPj4gc2hhcGU7CisgICAgICAgIGlmICghc2hhcGUpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZWdpb24ubV9zaGFwZSA9IHN0ZDo6bWFrZV91
bmlxdWU8U2hhcGU+KFdURk1vdmUoKnNoYXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgcmVn
aW9uIH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+Citib29sIFJlZ2lvbjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFJlZ2lvbiYgcmVnaW9uKQoreworICAgIE9wdGlvbmFsPFJlZ2lv
bj4gZGVjb2RlZFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGRlY29kZWRSZWdpb247CisgICAgaWYg
KCFkZWNvZGVkUmVnaW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVnaW9uID0gV1RG
TW92ZSgqZGVjb2RlZFJlZ2lvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlZ2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
MjQyOTkzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzMCBAQAorMjAxOS0wMy0xNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgT3B0aW1pemUgUmVnaW9uIGZvciBzaW5nbGUgcmVjdGFuZ2xlIGNhc2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc0MworCisg
ICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICAqIFBsYXRmb3JtL0lQ
Qy9EZWNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6b3BlcmF0b3I+Pik6CisgICAg
ICAgIChJUEM6OkRlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29k
ZXIuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHA6CisgICAgICAgIChJUEM6
OkVuY29kZXI6OmVuY29kZSk6CisKKyAgICAgICAgQWRkIHNpemVfdCBwcmltaXRpdmUgc3VwcG9y
dC4KKworICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICogU2hhcmVk
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6ZGVj
b2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz46OmRlY29kZSk6Cisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVnaW9uOjpTcGFuPjo6ZW5jb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjpkZWNvZGUpOiBE
ZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisKIDIwMTkt
MDMtMTQgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtp
T1NdIFdlYktpdCBjcmFzaGVzIHdoZW4gb3BlbmluZyBwYWdlcyBkb2N1bWVudHMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCShyZXZpc2lvbiAyNDI5OTMpCisrKyBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUwLDYgKzI1MCwxMSBAQCBEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGRv
CiAgICAgcmV0dXJuIGdldE9wdGlvbmFsKG9wdGlvbmFsKTsKIH0KIAorRGVjb2RlciYgRGVjb2Rl
cjo6b3BlcmF0b3I+PihPcHRpb25hbDxzaXplX3Q+JiBvcHRpb25hbCkKK3sKKyAgICByZXR1cm4g
Z2V0T3B0aW9uYWwob3B0aW9uYWwpOworfQorCiBib29sIERlY29kZXI6OmRlY29kZShib29sJiBy
ZXN1bHQpCiB7CiAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVvZihyZXN1bHQpLCBz
aXplb2YocmVzdWx0KSkpCkBAIC0zNDAsNiArMzQ1LDE1IEBAIGJvb2wgRGVjb2Rlcjo6ZGVjb2Rl
KGRvdWJsZSYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIERlY29kZXI6OmRl
Y29kZShzaXplX3QmIHJlc3VsdCkKK3sKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oc2l6
ZW9mKHJlc3VsdCksIHNpemVvZihyZXN1bHQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZGVjb2RlVmFsdWVGcm9tQnVmZmVyKHJlc3VsdCwgbV9idWZmZXJQb3MpOworICAgIHJldHVy
biB0cnVlOworfQorCiBib29sIERlY29kZXI6OnJlbW92ZUF0dGFjaG1lbnQoQXR0YWNobWVudCYg
YXR0YWNobWVudCkKIHsKICAgICBpZiAobV9hdHRhY2htZW50cy5pc0VtcHR5KCkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYg
Kzk3LDggQEAgcHVibGljOgogICAgIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8ZmxvYXQ+
Jik7CiAgICAgYm9vbCBkZWNvZGUoZG91YmxlJik7CiAgICAgRGVjb2RlciYgb3BlcmF0b3I+PihP
cHRpb25hbDxkb3VibGU+Jik7CisgICAgYm9vbCBkZWNvZGUoc2l6ZV90Jik7CisgICAgRGVjb2Rl
ciYgb3BlcmF0b3I+PihPcHRpb25hbDxzaXplX3Q+Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFPgogICAgIGF1dG8gZGVjb2RlKEUmIGUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19l
bnVtPEU+Ojp2YWx1ZSwgYm9vbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0Vu
Y29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29k
ZXIuY3BwCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9F
bmNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDYgKzI1NiwxMiBAQCB2b2lkIEVuY29k
ZXI6OmVuY29kZShkb3VibGUgbikKICAgICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOwog
fQogCit2b2lkIEVuY29kZXI6OmVuY29kZShzaXplX3QgbikKK3sKKyAgICB1aW50OF90KiBidWZm
ZXIgPSBncm93KHNpemVvZihuKSwgc2l6ZW9mKG4pKTsKKyAgICBjb3B5VmFsdWVUb0J1ZmZlcihu
LCBidWZmZXIpOworfQorCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYm
IGF0dGFjaG1lbnQpCiB7CiAgICAgbV9hdHRhY2htZW50cy5hcHBlbmQoV1RGTW92ZShhdHRhY2ht
ZW50KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAy
NDI5OTMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5jb2RlKGludDY0
X3QpOwogICAgIHZvaWQgZW5jb2RlKGZsb2F0KTsKICAgICB2b2lkIGVuY29kZShkb3VibGUpOwor
ICAgIHZvaWQgZW5jb2RlKHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPgogICAg
IGF1dG8gZW5jb2RlKEUgdmFsdWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+
Ojp2YWx1ZT4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDggKzM2Nyw5IEBA
IHZvaWQgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KIAogYm9vbCBBcmd1bWVu
dENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEV2
ZW50VHJhY2tpbmdSZWdpb25zJiBldmVudFRyYWNraW5nUmVnaW9ucykKIHsKLSAgICBSZWdpb24g
YXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShhc3lu
Y2hyb25vdXNEaXNwYXRjaFJlZ2lvbikpCisgICAgT3B0aW9uYWw8UmVnaW9uPiBhc3luY2hyb25v
dXNEaXNwYXRjaFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGFzeW5jaHJvbm91c0Rpc3BhdGNoUmVn
aW9uOworICAgIGlmICghYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBIYXNoTWFwPFN0cmluZywgUmVnaW9uPiBldmVudFNwZWNpZmljU3luY2hy
b25vdXNEaXNwYXRjaFJlZ2lvbnM7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShldmVudFNwZWNp
ZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpKQpAQCAtMzc4LDcgKzM3OSw3IEBAIGJvb2wg
QXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHRvdWNoQWN0aW9uRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgotICAg
IGV2ZW50VHJhY2tpbmdSZWdpb25zLmFzeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9uID0gV1RGTW92
ZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbik7CisgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMu
YXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24gPSBXVEZNb3ZlKCphc3luY2hyb25vdXNEaXNwYXRj
aFJlZ2lvbik7CiAgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVjaWZpY1N5bmNocm9u
b3VzRGlzcGF0Y2hSZWdpb25zID0gV1RGTW92ZShldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNw
YXRjaFJlZ2lvbnMpOwogI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKICAgICBldmVudFRyYWNr
aW5nUmVnaW9ucy50b3VjaEFjdGlvbkRhdGEgPSBXVEZNb3ZlKHRvdWNoQWN0aW9uRGF0YSk7CkBA
IC05MDIsNjYgKzkwMyw2IEBAIE9wdGlvbmFsPFJlY2VudFNlYXJjaD4gQXJndW1lbnRDb2RlcjxS
ZWMKICAgICByZXR1cm4ge3sgV1RGTW92ZSgqc3RyaW5nKSwgV1RGTW92ZSgqdGltZSkgfX07CiB9
CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVnaW9uOjpTcGFuPiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBSZWdpb246OlNwYW4mKTsKLSAgICBz
dGF0aWMgT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdm9p
ZCBBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBj
b25zdCBSZWdpb246OlNwYW4mIHNwYW4pCi17Ci0gICAgZW5jb2RlciA8PCBzcGFuLnk7Ci0gICAg
ZW5jb2RlciA8PCAodWludDY0X3Qpc3Bhbi5zZWdtZW50SW5kZXg7Ci19Ci0KLU9wdGlvbmFsPFJl
Z2lvbjo6U3Bhbj4gQXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKLXsKLSAgICBSZWdpb246OlNwYW4gc3BhbjsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHNwYW4ueSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCi0gICAgdWlu
dDY0X3Qgc2VnbWVudEluZGV4OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2VnbWVudEluZGV4
KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICBzcGFuLnNlZ21lbnRJ
bmRleCA9IHNlZ21lbnRJbmRleDsKLSAgICByZXR1cm4gV1RGTW92ZShzcGFuKTsKLX0KLQotdm9p
ZCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBS
ZWdpb24mIHJlZ2lvbikKLXsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hhcGVTZWdtZW50
cygpKTsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hhcGVTcGFucygpKTsKLX0KLQotYm9v
bCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWdpb24m
IHJlZ2lvbikKLXsKLSAgICBWZWN0b3I8aW50PiBzZWdtZW50czsKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHNlZ21lbnRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFJl
Z2lvbjo6U3Bhbj4gc3BhbnM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzcGFucykpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZWdpb24uc2V0U2hhcGVTZWdtZW50cyhzZWdt
ZW50cyk7Ci0gICAgcmVnaW9uLnNldFNoYXBlU3BhbnMoc3BhbnMpOwotICAgIHJlZ2lvbi51cGRh
dGVCb3VuZHNGcm9tU2hhcGUoKTsKLSAgICAKLSAgICBpZiAoIXJlZ2lvbi5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1PcHRpb25hbDxS
ZWdpb24+IEFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17
Ci0gICAgUmVnaW9uIHJlZ2lvbjsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCByZWdpb24pKQot
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHJlZ2lvbjsKLX0KLQog
dm9pZCBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBMZW5ndGgmIGxlbmd0aCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVyPExlbmd0aD46OmVu
Y29kZShlbmNvZGVyLCBsZW5ndGgpOwpAQCAtOTcyLDcgKzkxMyw2IEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxMZW5ndGg+OjpkZWNvZGUoRGVjb2QKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2Rl
cjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgbGVuZ3RoKTsKIH0KIAotCiB2b2lkIEFyZ3VtZW50
Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IFZpZXdwb3J0QXR0cmlidXRlcyYgdmlld3BvcnRBdHRyaWJ1dGVzKQogewogICAgIFNpbXBsZUFy
Z3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKGVuY29kZXIsIHZpZXdwb3J0
QXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuaAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwxMiArMzI0LDYgQEAg
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRpYyBPcHRp
b25hbDxXZWJDb3JlOjpQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAotdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZWdpb24+IHsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpOwotICAgIHN0YXRpYyBib29s
IGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6UmVnaW9uJik7Ci0gICAgc3RhdGljIE9wdGlvbmFs
PFdlYkNvcmU6OlJlZ2lvbj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KIHRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7CiAgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgmKTsKICAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okxlbmd0aCYpOwpJbmRleDogU291cmNlL1dlYktpdC9T
aGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllckJh
Y2tpbmdTdG9yZS5tbQkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQv
UmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZHJhd0lu
Q29udAogICAgIC8vIE90aGVyd2lzZSwgcmVwYWludCB0aGUgZW50aXJlIGJvdW5kaW5nIGJveCBv
ZiB0aGUgZGlydHkgcmVnaW9uLgogICAgIFdlYkNvcmU6OkludFJlY3QgZGlydHlCb3VuZHMgPSBt
X2RpcnR5UmVnaW9uLmJvdW5kcygpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IGRp
cnR5UmVjdHMgPSBtX2RpcnR5UmVnaW9uLnJlY3RzKCk7CisgICAgYXV0byBkaXJ0eVJlY3RzID0g
bV9kaXJ0eVJlZ2lvbi5yZWN0cygpOwogICAgIGlmIChkaXJ0eVJlY3RzLnNpemUoKSA+IFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQgfHwgbV9kaXJ0eVJl
Z2lvbi50b3RhbEFyZWEoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJXYXN0
ZWRTcGFjZVRocmVzaG9sZCAqIGRpcnR5Qm91bmRzLndpZHRoKCkgKiBkaXJ0eUJvdW5kcy5oZWln
aHQoKSkgewogICAgICAgICBkaXJ0eVJlY3RzLmNsZWFyKCk7CiAgICAgICAgIGRpcnR5UmVjdHMu
YXBwZW5kKGRpcnR5Qm91bmRzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24ubW0JKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAt
NTE1LDEwICs1MTUsMTEgQEAgYm9vbCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQ
cgogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0V2ZW50UmVnaW9uKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGhhc0V2ZW50UmVnaW9uKSB7Ci0gICAgICAg
ICAgICBhdXRvIGV2ZW50UmVnaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpSZWdpb24+
KCk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpldmVudFJlZ2lvbikpCisgICAg
ICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpSZWdpb24+IGV2ZW50UmVnaW9uOworICAgICAgICAg
ICAgZGVjb2RlciA+PiBldmVudFJlZ2lvbjsKKyAgICAgICAgICAgIGlmICghZXZlbnRSZWdpb24p
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmVzdWx0LmV2ZW50
UmVnaW9uID0gV1RGTW92ZShldmVudFJlZ2lvbik7CisgICAgICAgICAgICByZXN1bHQuZXZlbnRS
ZWdpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lvbj4oV1RGTW92ZSgqZXZlbnRSZWdpb24pKTsK
ICAgICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364789</attachid>
            <date>2019-03-15 03:53:44 -0700</date>
            <delta_ts>2019-03-15 06:17:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize-6.patch</filename>
            <type>text/plain</type>
            <size>29714</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgIEluc3RydW1lbnRhdGlvbiBzaG93cyB2YXN0IG1ham9yaXR5IG9mIFJlZ2lv
biBvYmplY3RzIGNvbnNpc3Qgb2YgYSBzaW5nbGUgcmVjdGFuZ2xlLiBIb3dldmVyIGl0IGFsd2F5
cyBhbGxvY2F0ZXMKKyAgICAgICAgdGhlIGxhcmdlIFNoYXBlIGRhdGEgc3RydWN0dXJlLiBUaGlz
IG1ha2VzIGl0IHVuc3VpdGFibGUgdG8gdXNlIGFzIGEgbWVtYmVyIGluIGFueSBwb3B1bGFyIG9i
amVjdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBvcHRpbWl6ZXMgdGhlIHNpbmdsZSByZWN0YW5n
bGUgY2FzZSBieSB1c2luZyBvbmx5IHRoZSBib3VuZHMgcmVjdGFuZ2xlIHRvIGRlc2NyaWJlIGl0
LgorICAgICAgICBTaGFwZSBpcyBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGlzIG1ha2VzIGl0IHNh
ZmUgdG8gdXNlIFJlZ2lvbiBhcyBhIGRhdGEgbWVtYmVyIHdoZXJlIGEgcmVjdGFuZ2xlIGlzIHRo
ZSBjb21tb24gY2FzZS4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBtb2Rlcm5pemVzIFJlZ2lv
biBlbmNvZGluZy9kZWNvZGluZyBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6UmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6flJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaW9uOjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6
U2hhcGU6OlNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNw
YW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dW5p
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzdWJ0cmFjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3dhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbm93IHVudXNlZCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
Ojppc1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpncmlkU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmNvcHlTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkZWNvZGUpOgor
CisgICAgICAgIFRoaXMgaXMgbm93IHBhcnQgb2YgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6
UmVnaW9uOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6U3Bhbjo6U3Bhbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNoYXBl
U2VnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzaGFw
ZVNwYW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNoYXBl
U3BhbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2VnbWVu
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3Bh
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U2VnbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U3BhbnMpOiBEZWxldGVkLgorCisgICAgICAgIE5vIG5lZWQgdG8gZXhwb3NlIHRoZXNlIGZvciBl
bmNvZGluZyBhbnltb3JlLgorCiAyMDE5LTAzLTE1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIGEgd2F5IHRvIGNhcHR1
cmUgYSBzY3JlZW5zaG90IG9mIGEgbm9kZSBmcm9tIHdpdGhpbiB0aGUgcGFnZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCShyZXZpc2lvbiAyNDI5
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxOSArNDIsNTQgQEAgUmVnaW9uOjpSZWdpb24oKQogCiBSZWdpb246
OlJlZ2lvbihjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIDogbV9ib3VuZHMocmVjdCkKLSAgICAs
IG1fc2hhcGUocmVjdCkKIHsKIH0KIAotVmVjdG9yPEludFJlY3Q+IFJlZ2lvbjo6cmVjdHMoKSBj
b25zdAorUmVnaW9uOjpSZWdpb24oY29uc3QgUmVnaW9uJiBvdGhlcikKKyAgICA6IG1fYm91bmRz
KG90aGVyLm1fYm91bmRzKQorICAgICwgbV9zaGFwZShvdGhlci5jb3B5U2hhcGUoKSkKIHsKLSAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Cit9CisKK1JlZ2lvbjo6UmVnaW9uKFJlZ2lvbiYmIG90
aGVyKQorICAgIDogbV9ib3VuZHMoV1RGTW92ZShvdGhlci5tX2JvdW5kcykpCisgICAgLCBtX3No
YXBlKFdURk1vdmUob3RoZXIubV9zaGFwZSkpCit7Cit9CisKK1JlZ2lvbjo6flJlZ2lvbigpCit7
Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRvcj0oY29uc3QgUmVnaW9uJiBvdGhlcikKK3sK
KyAgICBtX2JvdW5kcyA9IG90aGVyLm1fYm91bmRzOworICAgIG1fc2hhcGUgPSBvdGhlci5jb3B5
U2hhcGUoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRv
cj0oUmVnaW9uJiYgb3RoZXIpCit7CisgICAgbV9ib3VuZHMgPSBXVEZNb3ZlKG90aGVyLm1fYm91
bmRzKTsKKyAgICBtX3NoYXBlID0gV1RGTW92ZShvdGhlci5tX3NoYXBlKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1ZlY3RvcjxJbnRSZWN0LCAxPiBSZWdpb246OnJlY3RzKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHM7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRl
cmF0b3Igc3BhbiA9IG1fc2hhcGUuc3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19l
bmQoKTsgc3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAo
IW1fc2hhcGUpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZWN0cy51bmNoZWNrZWRBcHBlbmQobV9ib3VuZHMpOworICAgICAgICByZXR1cm4gcmVjdHM7
CisgICAgfQorCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLT5z
cGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19lbmQoKTsgc3BhbiAhPSBlbmQgJiYg
c3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAgaW50IHkgPSBzcGFuLT55OwogICAg
ICAgICBpbnQgaGVpZ2h0ID0gKHNwYW4gKyAxKS0+eSAtIHk7CiAKLSAgICAgICAgZm9yIChTaGFw
ZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNlZ21lbnRzX2JlZ2luKHNwYW4p
LCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYgc2Vn
bWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAgICAgZm9yIChTaGFwZTo6U2Vn
bWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50c19iZWdpbihzcGFuKSwgZW5k
ID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50
ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAgICAgaW50IHggPSAqc2VnbWVu
dDsKICAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKIApAQCAtNzAs
NyArMTA1LDEwIEBAIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBSZWdpb24mIHJlZ2kKICAg
ICBpZiAoIW1fYm91bmRzLmNvbnRhaW5zKHJlZ2lvbi5tX2JvdW5kcykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBTaGFwZTo6Y29tcGFyZVNoYXBlczxTaGFwZTo6Q29tcGFy
ZUNvbnRhaW5zT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFt
X3NoYXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBTaGFwZTo6Y29tcGFy
ZVNoYXBlczxTaGFwZTo6Q29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uPigqbV9zaGFwZSwgcmVnaW9u
Lm1fc2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiBTaGFwZShyZWdpb24ubV9ib3VuZHMpKTsKIH0K
IAogYm9vbCBSZWdpb246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAg
LTc4LDcgKzExNiwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFpbnMoY29uc3QgSW50UG9pbnQmIHBv
CiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGZvciAoU2hhcGU6OlNwYW5JdGVyYXRvciBzcGFuID0gbV9zaGFwZS5zcGFuc19i
ZWdpbigpLCBlbmQgPSBtX3NoYXBlLnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFuICsg
MSAhPSBlbmQ7ICsrc3BhbikgeworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0b3Igc3BhbiA9IG1fc2hhcGUtPnNwYW5z
X2JlZ2luKCksIGVuZCA9IG1fc2hhcGUtPnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFu
ICsgMSAhPSBlbmQ7ICsrc3BhbikgewogICAgICAgICBpbnQgeSA9IHNwYW4tPnk7CiAgICAgICAg
IGludCBtYXhZID0gKHNwYW4gKyAxKS0+eTsKIApAQCAtODcsNyArMTI4LDcgQEAgYm9vbCBSZWdp
b246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwbwogICAgICAgICBpZiAobWF4WSA8PSBwb2lu
dC55KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBmb3IgKFNoYXBlOjpTZWdt
ZW50SXRlcmF0b3Igc2VnbWVudCA9IG1fc2hhcGUuc2VnbWVudHNfYmVnaW4oc3BhbiksIGVuZCA9
IG1fc2hhcGUuc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsg
MSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgeworICAgICAgICBmb3IgKFNoYXBlOjpTZWdtZW50SXRl
cmF0b3Igc2VnbWVudCA9IG1fc2hhcGUtPnNlZ21lbnRzX2JlZ2luKHNwYW4pLCBlbmQgPSBtX3No
YXBlLT5zZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5kICYmIHNlZ21lbnQgKyAxICE9
IGVuZDsgc2VnbWVudCArPSAyKSB7CiAgICAgICAgICAgICBpbnQgeCA9ICpzZWdtZW50OwogICAg
ICAgICAgICAgaW50IG1heFggPSAqKHNlZ21lbnQgKyAxKTsKIApAQCAtMTA2LDE5ICsxNDcsMTgg
QEAgYm9vbCBSZWdpb246OmludGVyc2VjdHMoY29uc3QgUmVnaW9uJiByZQogICAgIGlmICghbV9i
b3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNl
Y3RzT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFtX3NoYXBl
ICYmICFyZWdpb24ubV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
U2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uPiht
X3NoYXBlID8gKm1fc2hhcGUgOiBtX2JvdW5kcywgcmVnaW9uLm1fc2hhcGUgPyAqcmVnaW9uLm1f
c2hhcGUgOiByZWdpb24ubV9ib3VuZHMpOwogfQogCi11bnNpZ25lZCBSZWdpb246OnRvdGFsQXJl
YSgpIGNvbnN0Cit1aW50NjRfdCBSZWdpb246OnRvdGFsQXJlYSgpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEludFJlY3Q+IHJlY3RzID0gdGhpcy0+cmVjdHMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IHJl
Y3RzLnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b3RhbEFyZWEgPSAwOworICAgIHVpbnQ2NF90IHRv
dGFsQXJlYSA9IDA7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBy
ZWN0cygpKQogICAgICAgICB0b3RhbEFyZWEgKz0gKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0
KCkpOwotICAgIH0KIAogICAgIHJldHVybiB0b3RhbEFyZWE7CiB9CkBAIC0yMjYsMTYgKzI2Niwx
NCBAQCBSZWdpb246OlNoYXBlOjpTaGFwZSgpCiB9CiAKIFJlZ2lvbjo6U2hhcGU6OlNoYXBlKGNv
bnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBtX3NlZ21lbnRzKHsgcmVjdC54KCksIHJlY3QubWF4
WCgpIH0pCisgICAgLCBtX3NwYW5zKHsgeyByZWN0LnkoKSwgMCB9LCB7IHJlY3QubWF4WSgpLCAy
IH0gfSkKIHsKLSAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJl
Y3QueCgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgpKTsKLSAgICBhcHBlbmRTcGFu
KHJlY3QubWF4WSgpKTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFuKGludCB5
KQogewotICAgIG1fc3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdtZW50cy5zaXplKCkpKTsKKyAg
ICBtX3NwYW5zLmFwcGVuZCh7IHksIG1fc2VnbWVudHMuc2l6ZSgpIH0pOwogfQogCiBib29sIFJl
Z2lvbjo6U2hhcGU6OmNhbkNvYWxlc2NlKFNlZ21lbnRJdGVyYXRvciBiZWdpbiwgU2VnbWVudEl0
ZXJhdG9yIGVuZCkKQEAgLTMzMSwyNyArMzY5LDYgQEAgdm9pZCBSZWdpb246OlNoYXBlOjpkdW1w
KCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQoKSBjb25z
dAotewotICAgIGZvciAoYXV0byBzcGFuID0gc3BhbnNfYmVnaW4oKSwgZW5kID0gc3BhbnNfZW5k
KCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytzcGFuKSB7Ci0gICAgICAgIGlu
dCB5ID0gc3Bhbi0+eTsKLSAgICAgICAgaW50IGhlaWdodCA9IChzcGFuICsgMSktPnkgLSB5Owot
ICAgICAgICAKLSAgICAgICAgaWYgKGhlaWdodCA8IDApCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgZm9yIChhdXRvIHNlZ21lbnQgPSBzZWdtZW50c19iZWdpbihzcGFuKSwg
ZW5kID0gc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsgMSAh
PSBlbmQ7IHNlZ21lbnQgKz0gMikgewotICAgICAgICAgICAgaW50IHggPSAqc2VnbWVudDsKLSAg
ICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogSW50UmVjdCBSZWdp
b246OlNoYXBlOjpib3VuZHMoKSBjb25zdAogewogICAgIGlmIChpc0VtcHR5KCkpCkBAIC0zOTcs
MTIgKzQxNCw2IEBAIHZvaWQgUmVnaW9uOjpTaGFwZTo6dHJhbnNsYXRlKGNvbnN0IEludFMKICAg
ICAgICAgbV9zcGFuc1tpXS55ICs9IG9mZnNldC5oZWlnaHQoKTsKIH0KIAotdm9pZCBSZWdpb246
OlNoYXBlOjpzd2FwKFNoYXBlJiBvdGhlcikKLXsKLSAgICBtX3NlZ21lbnRzLnN3YXAob3RoZXIu
bV9zZWdtZW50cyk7Ci0gICAgbV9zcGFucy5zd2FwKG90aGVyLm1fc3BhbnMpOwotfQotCiBlbnVt
IHsKICAgICBTaGFwZTEsCiAgICAgU2hhcGUyLApAQCAtNTY3LDcxICs1NzgsODEgQEAgdm9pZCBS
ZWdpb246OmR1bXAoKSBjb25zdAogewogICAgIHByaW50ZigiQm91bmRzOiAoJWQsICVkLCAlZCwg
JWQpXG4iLAogICAgICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91bmRzLnkoKSwgbV9ib3VuZHMu
d2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fc2hhcGUuZHVtcCgpOworICAgIGlm
IChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT5kdW1wKCk7CiB9CiAjZW5kaWYKIAotdm9pZCBS
ZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpCi17Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBl
LmJvdW5kcygpOwotfQotCiB2b2lkIFJlZ2lvbjo6aW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYgcmVn
aW9uKQogewogICAgIGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkgewotICAgICAgICBt
X3NoYXBlID0gU2hhcGUoKTsKKyAgICAgICAgbV9zaGFwZSA9IG51bGxwdHI7CiAgICAgICAgIG1f
Ym91bmRzID0gSW50UmVjdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV9z
aGFwZSAmJiAhcmVnaW9uLm1fc2hhcGUpIHsKKyAgICAgICAgbV9ib3VuZHMgPSBpbnRlcnNlY3Rp
b24obV9ib3VuZHMsIHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBTaGFwZSBpbnRlcnNlY3RlZFNoYXBlID0gU2hhcGU6OmludGVyc2VjdFNoYXBlcyhtX3No
YXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3YXAoaW50ZXJzZWN0ZWRTaGFw
ZSk7Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOworICAgIHNldFNoYXBlKFNoYXBl
OjppbnRlcnNlY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5t
X3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQg
UmVnaW9uOjp1bml0ZShjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsKICAgICBpZiAocmVnaW9uLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1JlY3QoKSAmJiBtX2JvdW5kcy5j
b250YWlucyhyZWdpb24ubV9ib3VuZHMpKQorICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAg
bV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1fc2hhcGUgPSByZWdpb24uY29w
eVNoYXBlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKHJlZ2lvbi5pc1JlY3Qo
KSAmJiByZWdpb24ubV9ib3VuZHMuY29udGFpbnMobV9ib3VuZHMpKSB7Ci0gICAgICAgIG1fc2hh
cGUgPSByZWdpb24ubV9zaGFwZTsKICAgICAgICAgbV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7
CisgICAgICAgIG1fc2hhcGUgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IC8vIEZJWE1FOiBXZSBtYXkgd2FudCBhbm90aGVyIHdheSB0byBjb25zdHJ1Y3QgYSBSZWdpb24g
d2l0aG91dCBkb2luZyB0aGlzIHRlc3Qgd2hlbiB3ZSBleHBlY3QgaXQgdG8gYmUgZmFsc2UuCi0g
ICAgaWYgKCFpc1JlY3QoKSAmJiBjb250YWlucyhyZWdpb24pKQorICAgIGlmIChjb250YWlucyhy
ZWdpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFwZSB1bml0ZWRTaGFwZSA9IFNoYXBl
Ojp1bmlvblNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3
YXAodW5pdGVkU2hhcGUpOwotICAgIG1fYm91bmRzLnVuaXRlKHJlZ2lvbi5tX2JvdW5kcyk7Cisg
ICAgc2V0U2hhcGUoU2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUgPyAqbV9zaGFwZSA6IG1fYm91
bmRzLCByZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6IHJlZ2lvbi5tX2JvdW5kcykp
OwogfQogCiB2b2lkIFJlZ2lvbjo6c3VidHJhY3QoY29uc3QgUmVnaW9uJiByZWdpb24pCiB7Ci0g
ICAgaWYgKG1fYm91bmRzLmlzRW1wdHkoKSkKKyAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKHJlZ2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU2hhcGUgc3VidHJhY3RlZFNoYXBlID0gU2hhcGU6OnN1YnRyYWN0U2hhcGVzKG1f
c2hhcGUsIHJlZ2lvbi5tX3NoYXBlKTsKLQotICAgIG1fc2hhcGUuc3dhcChzdWJ0cmFjdGVkU2hh
cGUpOwotICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsKKyAgICBzZXRTaGFwZShTaGFw
ZTo6c3VidHJhY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5t
X3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQg
UmVnaW9uOjp0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQogewogICAgIG1fYm91bmRz
Lm1vdmUob2Zmc2V0KTsKLSAgICBtX3NoYXBlLnRyYW5zbGF0ZShvZmZzZXQpOworICAgIGlmICht
X3NoYXBlKQorICAgICAgICBtX3NoYXBlLT50cmFuc2xhdGUob2Zmc2V0KTsKK30KKwordm9pZCBS
ZWdpb246OnNldFNoYXBlKFNoYXBlJiYgc2hhcGUpCit7CisgICAgbV9ib3VuZHMgPSBzaGFwZS5i
b3VuZHMoKTsKKworICAgIGlmIChzaGFwZS5pc1JlY3QoKSkgeworICAgICAgICBtX3NoYXBlID0g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9zaGFwZSkKKyAg
ICAgICAgbV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KFdURk1vdmUoc2hhcGUpKTsK
KyAgICBlbHNlCisgICAgICAgICptX3NoYXBlID0gV1RGTW92ZShzaGFwZSk7CiB9CiAKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmgJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVm
aW5lIFJlZ2lvbl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMSArNDAsMTkgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJl
Z2lvbihjb25zdCBJbnRSZWN0Jik7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWdpb24oY29uc3Qg
UmVnaW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKFJlZ2lvbiYmKTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIH5SZWdpb24oKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbiYgb3Bl
cmF0b3I9KGNvbnN0IFJlZ2lvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbiYgb3BlcmF0
b3I9KFJlZ2lvbiYmKTsKKwogICAgIEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9i
b3VuZHM7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kcy5pc0Vt
cHR5KCk7IH0KLSAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuaXNSZWN0
KCk7IH0KKyAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJuICFtX3NoYXBlOyB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4gcmVjdHMoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHMoKSBjb25zdDsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgdW5pdGUoY29uc3QgUmVnaW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBpbnRlcnNlY3QoY29uc3QgUmVnaW9uJik7CkBAIC01OCw0OCArNjgsMzEgQEAgcHVibGlj
OgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgcmVnaW9uIGludGVyc2VjdHMgYW55
IHBhcnQgb2YgdGhpcyByZWdpb24uCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3Rz
KGNvbnN0IFJlZ2lvbiYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgdG90
YWxBcmVhKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG90YWxBcmVhKCkg
Y29uc3Q7CiAKLSAgICB1bnNpZ25lZCBncmlkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUu
Z3JpZFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGdyaWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFwZSA/IG1fc2hhcGUtPmdyaWRTaXplKCkgOiAwOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
dm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcGUuaXNWYWxpZCgpOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWdpb24+IGRlY29kZShEZWNvZGVyJik7CisgICAgLy8gRklYTUU6
IFJlbW92ZSBsZWdhY3kgZGVjb2RlLgorICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiwgUmVnaW9uJik7CiAKLSAgICAvLyBUaGlzIGlzIGludGVy
bmFsIHRvIFJlZ2lvbiwgYnV0IGV4cG9zZWQganVzdCBmb3IgZW5jb2RpbmcuCi0gICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGVuY29kZSBXZWJDb3JlIGNsYXNzZXMuCitw
cml2YXRlOgogICAgIHN0cnVjdCBTcGFuIHsKLSAgICAgICAgU3BhbigpCi0gICAgICAgICAgICA6
IHkoMCkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KDApCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIFNwYW4oaW50IHksIHNpemVfdCBzZWdtZW50SW5kZXgpCi0gICAgICAgICAg
ICA6IHkoeSkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KHNlZ21lbnRJbmRleCkKLSAgICAg
ICAgewotICAgICAgICB9CisgICAgICAgIGludCB5IHsgMCB9OworICAgICAgICBzaXplX3Qgc2Vn
bWVudEluZGV4IHsgMCB9OwogCi0gICAgICAgIGludCB5OwotICAgICAgICBzaXplX3Qgc2VnbWVu
dEluZGV4OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKLSAgICAvLyBGb3IgZW5jb2Rp
bmcvZGVjb2Rpbmcgb25seS4KLSAgICBjb25zdCBWZWN0b3I8aW50LCAzMj4mIHNoYXBlU2VnbWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLnNlZ21lbnRzKCk7IH0KLSAgICBjb25zdCBWZWN0
b3I8U3BhbiwgMTY+JiBzaGFwZVNwYW5zKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5zcGFucygp
OyB9Ci0KLSAgICB2b2lkIHNldFNoYXBlU2VnbWVudHMoY29uc3QgVmVjdG9yPGludD4mIHNlZ21l
bnRzKSB7IG1fc2hhcGUuc2V0U2VnbWVudHMoc2VnbWVudHMpOyB9Ci0gICAgdm9pZCBzZXRTaGFw
ZVNwYW5zKGNvbnN0IFZlY3RvcjxTcGFuPiYgc3BhbnMpIHsgbV9zaGFwZS5zZXRTcGFucyhzcGFu
cyk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpOwot
Ci1wcml2YXRlOgotCiAgICAgY2xhc3MgU2hhcGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2hh
cGUoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgU2hhcGUoKTsKICAgICAgICAgU2hhcGUoY29u
c3QgSW50UmVjdCYpOwogCiAgICAgICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7CkBAIC0xMjAs
MjIgKzExMywxNSBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWMgU2hhcGUgc3VidHJhY3RTaGFw
ZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29uc3QgU2hhcGUmIHNoYXBlMik7CiAKICAgICAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYpOwotICAgICAgICB2
b2lkIHN3YXAoU2hhcGUmKTsKIAogICAgICAgICBzdHJ1Y3QgQ29tcGFyZUNvbnRhaW5zT3BlcmF0
aW9uOwogICAgICAgICBzdHJ1Y3QgQ29tcGFyZUludGVyc2VjdHNPcGVyYXRpb247CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29tcGFyZU9wZXJhdGlvbj4KICAgICAgICAgc3RhdGljIGJv
b2wgY29tcGFyZVNoYXBlcyhjb25zdCBTaGFwZSYgc2hhcGUxLCBjb25zdCBTaGFwZSYgc2hhcGUy
KTsKLSAgICAgICAgCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWYWxpZCgpIGNvbnN0
OwotCi0gICAgICAgIC8vIEZvciBlbmNvZGluZy9kZWNvZGluZyBvbmx5LgotICAgICAgICBjb25z
dCBWZWN0b3I8aW50LCAzMj4mIHNlZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50czsg
fQotICAgICAgICBjb25zdCBWZWN0b3I8U3BhbiwgMTY+JiBzcGFucygpIGNvbnN0IHsgcmV0dXJu
IG1fc3BhbnM7IH0KIAotICAgICAgICB2b2lkIHNldFNlZ21lbnRzKGNvbnN0IFZlY3RvcjxpbnQ+
JiBzZWdtZW50cykgeyBtX3NlZ21lbnRzID0gc2VnbWVudHM7IH0KLSAgICAgICAgdm9pZCBzZXRT
cGFucyhjb25zdCBWZWN0b3I8U3Bhbj4mIHNwYW5zKSB7IG1fc3BhbnMgPSBzcGFuczsgfQorICAg
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFwZT4g
ZGVjb2RlKERlY29kZXImKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBkdW1wKCkg
Y29uc3Q7CkBAIC0xNjIsMTIgKzE0OCwxNiBAQCBwcml2YXRlOgogICAgICAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFNoYXBlJiwgY29uc3QgU2hhcGUmKTsKICAgICB9OwogCisgICAg
c3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBjb3B5U2hhcGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXBl
ID8gc3RkOjptYWtlX3VuaXF1ZTxTaGFwZT4oKm1fc2hhcGUpIDogbnVsbHB0cjsgfQorICAgIHZv
aWQgc2V0U2hhcGUoU2hhcGUmJik7CisKICAgICBJbnRSZWN0IG1fYm91bmRzOwotICAgIFNoYXBl
IG1fc2hhcGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBtX3NoYXBlOwogCiAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpb24mLCBjb25zdCBSZWdpb24mKTsKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXBlJiwgY29uc3QgU2hhcGUmKTsKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNwYW4mLCBjb25zdCBTcGFuJik7CisgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTcGFuJiwgY29uc3QgU3BhbiYpOwogfTsKIAogc3Rh
dGljIGlubGluZSBSZWdpb24gaW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9u
JiBiKQpAQCAtMTc3LDcgKzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChj
b25zdCBSZWcKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0gICAgCisKIHN0YXRpYyBpbmxpbmUg
UmVnaW9uIHN1YnRyYWN0KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQogewogICAg
IFJlZ2lvbiByZXN1bHQoYSk7CkBAIC0xOTYsNyArMTg2LDcgQEAgc3RhdGljIGlubGluZSBSZWdp
b24gdHJhbnNsYXRlKGNvbnN0IFJlZwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJl
Z2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQogewotICAgIHJldHVybiBhLm1fYm91bmRzID09IGIu
bV9ib3VuZHMgJiYgYS5tX3NoYXBlID09IGIubV9zaGFwZTsKKyAgICByZXR1cm4gYS5tX2JvdW5k
cyA9PSBiLm1fYm91bmRzICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoYS5tX3NoYXBlLCBiLm1f
c2hhcGUpOwogfQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWdpb24mIGEsIGNvbnN0
IFJlZ2lvbiYgYikKIHsKQEAgLTIxMiwxMSArMjAyLDEwOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFJlZ2lvbjo6U3BhCiB7CiAgICAgcmV0dXJuIGEueSA9PSBiLnkgJiYgYS5zZWdt
ZW50SW5kZXggPT0gYi5zZWdtZW50SW5kZXg7CiB9CisKIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgUmVnaW9uOjpTcGFuJiBhLCBjb25zdCBSZWdpb246OlNwYW4mIGIpCiB7CiAgICAgcmV0
dXJuICEoYSA9PSBiKTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVnaW9u
OjpTcGFuOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IHkgPDwgc2VnbWVudEluZGV4OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9u
YWw8UmVnaW9uOjpTcGFuPiBSZWdpb246OlNwYW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIE9wdGlvbmFsPGludD4geTsKKyAgICBkZWNvZGVyID4+IHk7CisgICAgaWYgKCF5KQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgT3B0aW9uYWw8c2l6ZV90PiBzZWdtZW50SW5kZXg7
CisgICAgZGVjb2RlciA+PiBzZWdtZW50SW5kZXg7CisgICAgaWYgKCFzZWdtZW50SW5kZXgpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4geyB7ICp5LCAqc2VnbWVudEluZGV4IH0g
fTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVnaW9uOjpTaGFwZTo6ZW5j
b2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX3NlZ21lbnRz
OworICAgIGVuY29kZXIgPDwgbV9zcGFuczsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4K
K09wdGlvbmFsPFJlZ2lvbjo6U2hhcGU+IFJlZ2lvbjo6U2hhcGU6OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIE9wdGlvbmFsPFZlY3RvcjxpbnQ+PiBzZWdtZW50czsKKyAgICBkZWNv
ZGVyID4+IHNlZ21lbnRzOworICAgIGlmICghc2VnbWVudHMpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxWZWN0b3I8UmVnaW9uOjpTcGFuPj4gc3BhbnM7Cisg
ICAgZGVjb2RlciA+PiBzcGFuczsKKyAgICBpZiAoIXNwYW5zKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgU2hhcGUgc2hhcGU7CisgICAgc2hhcGUubV9zZWdtZW50cyA9IFdU
Rk1vdmUoKnNlZ21lbnRzKTsKKyAgICBzaGFwZS5tX3NwYW5zID0gV1RGTW92ZSgqc3BhbnMpOwor
CisgICAgcmV0dXJuIHsgc2hhcGUgfTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3Zv
aWQgUmVnaW9uOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IG1fYm91bmRzOworICAgIGJvb2wgaGFzU2hhcGUgPSAhIW1fc2hhcGU7CisgICAgZW5jb2Rl
ciA8PCBoYXNTaGFwZTsKKyAgICBpZiAoaGFzU2hhcGUpCisgICAgICAgIGVuY29kZXIgPDwgKm1f
c2hhcGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWdpb24+IFJl
Z2lvbjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8SW50UmVjdD4g
Ym91bmRzOworICAgIGRlY29kZXIgPj4gYm91bmRzOworICAgIGlmICghYm91bmRzKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8Ym9vbD4gaGFzU2hhcGU7Cisg
ICAgZGVjb2RlciA+PiBoYXNTaGFwZTsKKyAgICBpZiAoIWhhc1NoYXBlKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgUmVnaW9uIHJlZ2lvbiA9IHsgKmJvdW5kcyB9OworCisg
ICAgaWYgKCpoYXNTaGFwZSkgeworICAgICAgICBPcHRpb25hbDxTaGFwZT4gc2hhcGU7CisgICAg
ICAgIGRlY29kZXIgPj4gc2hhcGU7CisgICAgICAgIGlmICghc2hhcGUpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZWdpb24ubV9zaGFwZSA9IHN0ZDo6bWFrZV91
bmlxdWU8U2hhcGU+KFdURk1vdmUoKnNoYXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgcmVn
aW9uIH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+Citib29sIFJlZ2lvbjo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFJlZ2lvbiYgcmVnaW9uKQoreworICAgIE9wdGlvbmFsPFJlZ2lv
bj4gZGVjb2RlZFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGRlY29kZWRSZWdpb247CisgICAgaWYg
KCFkZWNvZGVkUmVnaW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVnaW9uID0gV1RG
TW92ZSgqZGVjb2RlZFJlZ2lvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFJlZ2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckxheWVyLmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzNSw3ICszMzUsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRVc2luZ092ZXJs
CiAgICAgfQogCiAgICAgbm9uT3ZlcmxhcFJlZ2lvbi50cmFuc2xhdGUob3B0aW9ucy5vZmZzZXQp
OwotICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0cyA9IG5vbk92ZXJsYXBSZWdpb24ucmVjdHMoKTsK
KyAgICBhdXRvIHJlY3RzID0gbm9uT3ZlcmxhcFJlZ2lvbi5yZWN0cygpOwogCiAgICAgZm9yIChh
dXRvJiByZWN0IDogcmVjdHMpIHsKICAgICAgICAgaWYgKCFyZWN0LmludGVyc2VjdHMob3B0aW9u
cy50ZXh0dXJlTWFwcGVyLmNsaXBCb3VuZHMoKSkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjQy
OTkzKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzMCBAQAorMjAxOS0wMy0xNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgT3B0aW1pemUgUmVnaW9uIGZvciBzaW5nbGUgcmVjdGFuZ2xlIGNhc2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NTc0MworCisgICAg
ICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAgICAqIFBsYXRmb3JtL0lQQy9E
ZWNvZGVyLmNwcDoKKyAgICAgICAgKElQQzo6RGVjb2Rlcjo6b3BlcmF0b3I+Pik6CisgICAgICAg
IChJUEM6OkRlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0RlY29kZXIu
aDoKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvRW5jb2Rlci5jcHA6CisgICAgICAgIChJUEM6OkVu
Y29kZXI6OmVuY29kZSk6CisKKyAgICAgICAgQWRkIHNpemVfdCBwcmltaXRpdmUgc3VwcG9ydC4K
KworICAgICAgICAqIFBsYXRmb3JtL0lQQy9FbmNvZGVyLmg6CisgICAgICAgICogU2hhcmVkL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6ZGVjb2Rl
KToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAg
KElQQzo6QXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz46OmRlY29kZSk6CisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVnaW9uOjpTcGFuPjo6ZW5jb2RlKTogRGVsZXRlZC4K
KyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjpkZWNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZSk6IERlbGV0
ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisKIDIwMTktMDMt
MTQgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1Nd
IFdlYktpdCBjcmFzaGVzIHdoZW4gb3BlbmluZyBwYWdlcyBkb2N1bWVudHMKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0RlY29kZXIuY3BwCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUw
LDYgKzI1MCwxMSBAQCBEZWNvZGVyJiBEZWNvZGVyOjpvcGVyYXRvcj4+KE9wdGlvbmFsPGRvCiAg
ICAgcmV0dXJuIGdldE9wdGlvbmFsKG9wdGlvbmFsKTsKIH0KIAorRGVjb2RlciYgRGVjb2Rlcjo6
b3BlcmF0b3I+PihPcHRpb25hbDxzaXplX3Q+JiBvcHRpb25hbCkKK3sKKyAgICByZXR1cm4gZ2V0
T3B0aW9uYWwob3B0aW9uYWwpOworfQorCiBib29sIERlY29kZXI6OmRlY29kZShib29sJiByZXN1
bHQpCiB7CiAgICAgaWYgKCFhbGlnbkJ1ZmZlclBvc2l0aW9uKHNpemVvZihyZXN1bHQpLCBzaXpl
b2YocmVzdWx0KSkpCkBAIC0zNDAsNiArMzQ1LDE1IEBAIGJvb2wgRGVjb2Rlcjo6ZGVjb2RlKGRv
dWJsZSYgcmVzdWx0KQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIERlY29kZXI6OmRlY29k
ZShzaXplX3QmIHJlc3VsdCkKK3sKKyAgICBpZiAoIWFsaWduQnVmZmVyUG9zaXRpb24oc2l6ZW9m
KHJlc3VsdCksIHNpemVvZihyZXN1bHQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZGVjb2RlVmFsdWVGcm9tQnVmZmVyKHJlc3VsdCwgbV9idWZmZXJQb3MpOworICAgIHJldHVybiB0
cnVlOworfQorCiBib29sIERlY29kZXI6OnJlbW92ZUF0dGFjaG1lbnQoQXR0YWNobWVudCYgYXR0
YWNobWVudCkKIHsKICAgICBpZiAobV9hdHRhY2htZW50cy5pc0VtcHR5KCkpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRGVjb2Rlci5oCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9EZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3
LDggQEAgcHVibGljOgogICAgIERlY29kZXImIG9wZXJhdG9yPj4oT3B0aW9uYWw8ZmxvYXQ+Jik7
CiAgICAgYm9vbCBkZWNvZGUoZG91YmxlJik7CiAgICAgRGVjb2RlciYgb3BlcmF0b3I+PihPcHRp
b25hbDxkb3VibGU+Jik7CisgICAgYm9vbCBkZWNvZGUoc2l6ZV90Jik7CisgICAgRGVjb2RlciYg
b3BlcmF0b3I+PihPcHRpb25hbDxzaXplX3Q+Jik7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
PgogICAgIGF1dG8gZGVjb2RlKEUmIGUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVt
PEU+Ojp2YWx1ZSwgYm9vbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29k
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIu
Y3BwCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDYgKzI1NiwxMiBAQCB2b2lkIEVuY29kZXI6
OmVuY29kZShkb3VibGUgbikKICAgICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBidWZmZXIpOwogfQog
Cit2b2lkIEVuY29kZXI6OmVuY29kZShzaXplX3QgbikKK3sKKyAgICB1aW50OF90KiBidWZmZXIg
PSBncm93KHNpemVvZihuKSwgc2l6ZW9mKG4pKTsKKyAgICBjb3B5VmFsdWVUb0J1ZmZlcihuLCBi
dWZmZXIpOworfQorCiB2b2lkIEVuY29kZXI6OmFkZEF0dGFjaG1lbnQoQXR0YWNobWVudCYmIGF0
dGFjaG1lbnQpCiB7CiAgICAgbV9hdHRhY2htZW50cy5hcHBlbmQoV1RGTW92ZShhdHRhY2htZW50
KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyNDI5
OTMpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOCw2ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5jb2RlKGludDY0X3Qp
OwogICAgIHZvaWQgZW5jb2RlKGZsb2F0KTsKICAgICB2b2lkIGVuY29kZShkb3VibGUpOworICAg
IHZvaWQgZW5jb2RlKHNpemVfdCk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFPgogICAgIGF1
dG8gZW5jb2RlKEUgdmFsdWUpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19lbnVtPEU+Ojp2
YWx1ZT4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDggKzM2Nyw5IEBAIHZv
aWQgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KIAogYm9vbCBBcmd1bWVudENv
ZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEV2ZW50
VHJhY2tpbmdSZWdpb25zJiBldmVudFRyYWNraW5nUmVnaW9ucykKIHsKLSAgICBSZWdpb24gYXN5
bmNocm9ub3VzRGlzcGF0Y2hSZWdpb247Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShhc3luY2hy
b25vdXNEaXNwYXRjaFJlZ2lvbikpCisgICAgT3B0aW9uYWw8UmVnaW9uPiBhc3luY2hyb25vdXNE
aXNwYXRjaFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGFzeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9u
OworICAgIGlmICghYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBIYXNoTWFwPFN0cmluZywgUmVnaW9uPiBldmVudFNwZWNpZmljU3luY2hyb25v
dXNEaXNwYXRjaFJlZ2lvbnM7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShldmVudFNwZWNpZmlj
U3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpKQpAQCAtMzc4LDcgKzM3OSw3IEBAIGJvb2wgQXJn
dW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHRvdWNoQWN0aW9uRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgotICAgIGV2
ZW50VHJhY2tpbmdSZWdpb25zLmFzeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9uID0gV1RGTW92ZShh
c3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbik7CisgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMuYXN5
bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24gPSBXVEZNb3ZlKCphc3luY2hyb25vdXNEaXNwYXRjaFJl
Z2lvbik7CiAgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVjaWZpY1N5bmNocm9ub3Vz
RGlzcGF0Y2hSZWdpb25zID0gV1RGTW92ZShldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRj
aFJlZ2lvbnMpOwogI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKICAgICBldmVudFRyYWNraW5n
UmVnaW9ucy50b3VjaEFjdGlvbkRhdGEgPSBXVEZNb3ZlKHRvdWNoQWN0aW9uRGF0YSk7CkBAIC05
MDIsNjYgKzkwMyw2IEBAIE9wdGlvbmFsPFJlY2VudFNlYXJjaD4gQXJndW1lbnRDb2RlcjxSZWMK
ICAgICByZXR1cm4ge3sgV1RGTW92ZSgqc3RyaW5nKSwgV1RGTW92ZSgqdGltZSkgfX07CiB9CiAK
LXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVnaW9uOjpTcGFuPiB7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBSZWdpb246OlNwYW4mKTsKLSAgICBzdGF0
aWMgT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQotdm9pZCBB
cmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25z
dCBSZWdpb246OlNwYW4mIHNwYW4pCi17Ci0gICAgZW5jb2RlciA8PCBzcGFuLnk7Ci0gICAgZW5j
b2RlciA8PCAodWludDY0X3Qpc3Bhbi5zZWdtZW50SW5kZXg7Ci19Ci0KLU9wdGlvbmFsPFJlZ2lv
bjo6U3Bhbj4gQXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjpkZWNvZGUoRGVjb2RlciYgZGVj
b2RlcikKLXsKLSAgICBSZWdpb246OlNwYW4gc3BhbjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHNwYW4ueSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCi0gICAgdWludDY0
X3Qgc2VnbWVudEluZGV4OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2VnbWVudEluZGV4KSkK
LSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICBzcGFuLnNlZ21lbnRJbmRl
eCA9IHNlZ21lbnRJbmRleDsKLSAgICByZXR1cm4gV1RGTW92ZShzcGFuKTsKLX0KLQotdm9pZCBB
cmd1bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBSZWdp
b24mIHJlZ2lvbikKLXsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hhcGVTZWdtZW50cygp
KTsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hhcGVTcGFucygpKTsKLX0KLQotYm9vbCBB
cmd1bWVudENvZGVyPFJlZ2lvbj46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWdpb24mIHJl
Z2lvbikKLXsKLSAgICBWZWN0b3I8aW50PiBzZWdtZW50czsKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHNlZ21lbnRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFJlZ2lv
bjo6U3Bhbj4gc3BhbnM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzcGFucykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZWdpb24uc2V0U2hhcGVTZWdtZW50cyhzZWdtZW50
cyk7Ci0gICAgcmVnaW9uLnNldFNoYXBlU3BhbnMoc3BhbnMpOwotICAgIHJlZ2lvbi51cGRhdGVC
b3VuZHNGcm9tU2hhcGUoKTsKLSAgICAKLSAgICBpZiAoIXJlZ2lvbi5pc1ZhbGlkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1PcHRpb25hbDxSZWdp
b24+IEFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0g
ICAgUmVnaW9uIHJlZ2lvbjsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVyLCByZWdpb24pKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHJlZ2lvbjsKLX0KLQogdm9p
ZCBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBM
ZW5ndGgmIGxlbmd0aCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29k
ZShlbmNvZGVyLCBsZW5ndGgpOwpAQCAtOTcyLDcgKzkxMyw2IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxMZW5ndGg+OjpkZWNvZGUoRGVjb2QKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxM
ZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgbGVuZ3RoKTsKIH0KIAotCiB2b2lkIEFyZ3VtZW50Q29k
ZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZp
ZXdwb3J0QXR0cmlidXRlcyYgdmlld3BvcnRBdHRyaWJ1dGVzKQogewogICAgIFNpbXBsZUFyZ3Vt
ZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKGVuY29kZXIsIHZpZXdwb3J0QXR0
cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwxMiArMzI0LDYgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAgIHN0YXRpYyBPcHRpb25h
bDxXZWJDb3JlOjpQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZWdpb24+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpOwotICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6UmVnaW9uJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPFdl
YkNvcmU6OlJlZ2lvbj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KIHRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoRGVjb2RlciYsIFdlYkNvcmU6Okxlbmd0aCYpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFy
ZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tp
bmdTdG9yZS5tbQkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTgsNyArMjk4LDcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZHJhd0luQ29u
dAogICAgIC8vIE90aGVyd2lzZSwgcmVwYWludCB0aGUgZW50aXJlIGJvdW5kaW5nIGJveCBvZiB0
aGUgZGlydHkgcmVnaW9uLgogICAgIFdlYkNvcmU6OkludFJlY3QgZGlydHlCb3VuZHMgPSBtX2Rp
cnR5UmVnaW9uLmJvdW5kcygpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IGRpcnR5
UmVjdHMgPSBtX2RpcnR5UmVnaW9uLnJlY3RzKCk7CisgICAgYXV0byBkaXJ0eVJlY3RzID0gbV9k
aXJ0eVJlZ2lvbi5yZWN0cygpOwogICAgIGlmIChkaXJ0eVJlY3RzLnNpemUoKSA+IFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQgfHwgbV9kaXJ0eVJlZ2lv
bi50b3RhbEFyZWEoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJXYXN0ZWRT
cGFjZVRocmVzaG9sZCAqIGRpcnR5Qm91bmRzLndpZHRoKCkgKiBkaXJ0eUJvdW5kcy5oZWlnaHQo
KSkgewogICAgICAgICBkaXJ0eVJlY3RzLmNsZWFyKCk7CiAgICAgICAgIGRpcnR5UmVjdHMuYXBw
ZW5kKGRpcnR5Qm91bmRzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24u
bW0JKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNTE1
LDEwICs1MTUsMTEgQEAgYm9vbCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5ZXJQcgog
ICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0V2ZW50UmVnaW9uKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGhhc0V2ZW50UmVnaW9uKSB7Ci0gICAgICAgICAg
ICBhdXRvIGV2ZW50UmVnaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJDb3JlOjpSZWdpb24+KCk7
Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpldmVudFJlZ2lvbikpCisgICAgICAg
ICAgICBPcHRpb25hbDxXZWJDb3JlOjpSZWdpb24+IGV2ZW50UmVnaW9uOworICAgICAgICAgICAg
ZGVjb2RlciA+PiBldmVudFJlZ2lvbjsKKyAgICAgICAgICAgIGlmICghZXZlbnRSZWdpb24pCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmVzdWx0LmV2ZW50UmVn
aW9uID0gV1RGTW92ZShldmVudFJlZ2lvbik7CisgICAgICAgICAgICByZXN1bHQuZXZlbnRSZWdp
b24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lvbj4oV1RGTW92ZSgqZXZlbnRSZWdpb24pKTsKICAg
ICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364790</attachid>
            <date>2019-03-15 06:17:28 -0700</date>
            <delta_ts>2019-03-15 06:22:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize-8.patch</filename>
            <type>text/plain</type>
            <size>26980</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgIEluc3RydW1lbnRhdGlvbiBzaG93cyB2YXN0IG1ham9yaXR5IG9mIFJlZ2lv
biBvYmplY3RzIGNvbnNpc3Qgb2YgYSBzaW5nbGUgcmVjdGFuZ2xlLiBIb3dldmVyIGl0IGFsd2F5
cyBhbGxvY2F0ZXMKKyAgICAgICAgdGhlIGxhcmdlIFNoYXBlIGRhdGEgc3RydWN0dXJlLiBUaGlz
IG1ha2VzIGl0IHVuc3VpdGFibGUgdG8gdXNlIGFzIGEgbWVtYmVyIGluIGFueSBwb3B1bGFyIG9i
amVjdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBvcHRpbWl6ZXMgdGhlIHNpbmdsZSByZWN0YW5n
bGUgY2FzZSBieSB1c2luZyBvbmx5IHRoZSBib3VuZHMgcmVjdGFuZ2xlIHRvIGRlc2NyaWJlIGl0
LgorICAgICAgICBTaGFwZSBpcyBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGlzIG1ha2VzIGl0IHNh
ZmUgdG8gdXNlIFJlZ2lvbiBhcyBhIGRhdGEgbWVtYmVyIHdoZXJlIGEgcmVjdGFuZ2xlIGlzIHRo
ZSBjb21tb24gY2FzZS4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBtb2Rlcm5pemVzIFJlZ2lv
biBlbmNvZGluZy9kZWNvZGluZyBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6UmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6flJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaW9uOjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6
U2hhcGU6OlNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNw
YW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dW5p
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzdWJ0cmFjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3dhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbm93IHVudXNlZCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
Ojppc1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpncmlkU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmNvcHlTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkZWNvZGUpOgor
CisgICAgICAgIFRoaXMgaXMgbm93IHBhcnQgb2YgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6
UmVnaW9uOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6U3Bhbjo6U3Bhbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNoYXBl
U2VnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzaGFw
ZVNwYW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNoYXBl
U3BhbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2VnbWVu
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3Bh
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U2VnbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U3BhbnMpOiBEZWxldGVkLgorCisgICAgICAgIE5vIG5lZWQgdG8gZXhwb3NlIHRoZXNlIGZvciBl
bmNvZGluZyBhbnltb3JlLgorCiAyMDE5LTAzLTE1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIGEgd2F5IHRvIGNhcHR1
cmUgYSBzY3JlZW5zaG90IG9mIGEgbm9kZSBmcm9tIHdpdGhpbiB0aGUgcGFnZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCShyZXZpc2lvbiAyNDI5
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxOSArNDIsNTQgQEAgUmVnaW9uOjpSZWdpb24oKQogCiBSZWdpb246
OlJlZ2lvbihjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIDogbV9ib3VuZHMocmVjdCkKLSAgICAs
IG1fc2hhcGUocmVjdCkKIHsKIH0KIAotVmVjdG9yPEludFJlY3Q+IFJlZ2lvbjo6cmVjdHMoKSBj
b25zdAorUmVnaW9uOjpSZWdpb24oY29uc3QgUmVnaW9uJiBvdGhlcikKKyAgICA6IG1fYm91bmRz
KG90aGVyLm1fYm91bmRzKQorICAgICwgbV9zaGFwZShvdGhlci5jb3B5U2hhcGUoKSkKIHsKLSAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Cit9CisKK1JlZ2lvbjo6UmVnaW9uKFJlZ2lvbiYmIG90
aGVyKQorICAgIDogbV9ib3VuZHMoV1RGTW92ZShvdGhlci5tX2JvdW5kcykpCisgICAgLCBtX3No
YXBlKFdURk1vdmUob3RoZXIubV9zaGFwZSkpCit7Cit9CisKK1JlZ2lvbjo6flJlZ2lvbigpCit7
Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRvcj0oY29uc3QgUmVnaW9uJiBvdGhlcikKK3sK
KyAgICBtX2JvdW5kcyA9IG90aGVyLm1fYm91bmRzOworICAgIG1fc2hhcGUgPSBvdGhlci5jb3B5
U2hhcGUoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRv
cj0oUmVnaW9uJiYgb3RoZXIpCit7CisgICAgbV9ib3VuZHMgPSBXVEZNb3ZlKG90aGVyLm1fYm91
bmRzKTsKKyAgICBtX3NoYXBlID0gV1RGTW92ZShvdGhlci5tX3NoYXBlKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1ZlY3RvcjxJbnRSZWN0LCAxPiBSZWdpb246OnJlY3RzKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHM7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRl
cmF0b3Igc3BhbiA9IG1fc2hhcGUuc3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19l
bmQoKTsgc3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAo
IW1fc2hhcGUpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZWN0cy51bmNoZWNrZWRBcHBlbmQobV9ib3VuZHMpOworICAgICAgICByZXR1cm4gcmVjdHM7
CisgICAgfQorCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLT5z
cGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19lbmQoKTsgc3BhbiAhPSBlbmQgJiYg
c3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAgaW50IHkgPSBzcGFuLT55OwogICAg
ICAgICBpbnQgaGVpZ2h0ID0gKHNwYW4gKyAxKS0+eSAtIHk7CiAKLSAgICAgICAgZm9yIChTaGFw
ZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNlZ21lbnRzX2JlZ2luKHNwYW4p
LCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYgc2Vn
bWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAgICAgZm9yIChTaGFwZTo6U2Vn
bWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50c19iZWdpbihzcGFuKSwgZW5k
ID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50
ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAgICAgaW50IHggPSAqc2VnbWVu
dDsKICAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKIApAQCAtNzAs
NyArMTA1LDEwIEBAIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBSZWdpb24mIHJlZ2kKICAg
ICBpZiAoIW1fYm91bmRzLmNvbnRhaW5zKHJlZ2lvbi5tX2JvdW5kcykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBTaGFwZTo6Y29tcGFyZVNoYXBlczxTaGFwZTo6Q29tcGFy
ZUNvbnRhaW5zT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFt
X3NoYXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBTaGFwZTo6Y29tcGFy
ZVNoYXBlczxTaGFwZTo6Q29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uPigqbV9zaGFwZSwgcmVnaW9u
Lm1fc2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiBTaGFwZShyZWdpb24ubV9ib3VuZHMpKTsKIH0K
IAogYm9vbCBSZWdpb246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAg
LTc4LDcgKzExNiwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFpbnMoY29uc3QgSW50UG9pbnQmIHBv
CiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGZvciAoU2hhcGU6OlNwYW5JdGVyYXRvciBzcGFuID0gbV9zaGFwZS5zcGFuc19i
ZWdpbigpLCBlbmQgPSBtX3NoYXBlLnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFuICsg
MSAhPSBlbmQ7ICsrc3BhbikgeworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0b3Igc3BhbiA9IG1fc2hhcGUtPnNwYW5z
X2JlZ2luKCksIGVuZCA9IG1fc2hhcGUtPnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFu
ICsgMSAhPSBlbmQ7ICsrc3BhbikgewogICAgICAgICBpbnQgeSA9IHNwYW4tPnk7CiAgICAgICAg
IGludCBtYXhZID0gKHNwYW4gKyAxKS0+eTsKIApAQCAtODcsNyArMTI4LDcgQEAgYm9vbCBSZWdp
b246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwbwogICAgICAgICBpZiAobWF4WSA8PSBwb2lu
dC55KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBmb3IgKFNoYXBlOjpTZWdt
ZW50SXRlcmF0b3Igc2VnbWVudCA9IG1fc2hhcGUuc2VnbWVudHNfYmVnaW4oc3BhbiksIGVuZCA9
IG1fc2hhcGUuc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsg
MSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgeworICAgICAgICBmb3IgKFNoYXBlOjpTZWdtZW50SXRl
cmF0b3Igc2VnbWVudCA9IG1fc2hhcGUtPnNlZ21lbnRzX2JlZ2luKHNwYW4pLCBlbmQgPSBtX3No
YXBlLT5zZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5kICYmIHNlZ21lbnQgKyAxICE9
IGVuZDsgc2VnbWVudCArPSAyKSB7CiAgICAgICAgICAgICBpbnQgeCA9ICpzZWdtZW50OwogICAg
ICAgICAgICAgaW50IG1heFggPSAqKHNlZ21lbnQgKyAxKTsKIApAQCAtMTA2LDE5ICsxNDcsMTgg
QEAgYm9vbCBSZWdpb246OmludGVyc2VjdHMoY29uc3QgUmVnaW9uJiByZQogICAgIGlmICghbV9i
b3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNl
Y3RzT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFtX3NoYXBl
ICYmICFyZWdpb24ubV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
U2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uPiht
X3NoYXBlID8gKm1fc2hhcGUgOiBtX2JvdW5kcywgcmVnaW9uLm1fc2hhcGUgPyAqcmVnaW9uLm1f
c2hhcGUgOiByZWdpb24ubV9ib3VuZHMpOwogfQogCi11bnNpZ25lZCBSZWdpb246OnRvdGFsQXJl
YSgpIGNvbnN0Cit1aW50NjRfdCBSZWdpb246OnRvdGFsQXJlYSgpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEludFJlY3Q+IHJlY3RzID0gdGhpcy0+cmVjdHMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IHJl
Y3RzLnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b3RhbEFyZWEgPSAwOworICAgIHVpbnQ2NF90IHRv
dGFsQXJlYSA9IDA7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBy
ZWN0cygpKQogICAgICAgICB0b3RhbEFyZWEgKz0gKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0
KCkpOwotICAgIH0KIAogICAgIHJldHVybiB0b3RhbEFyZWE7CiB9CkBAIC0yMjYsMTYgKzI2Niwx
NCBAQCBSZWdpb246OlNoYXBlOjpTaGFwZSgpCiB9CiAKIFJlZ2lvbjo6U2hhcGU6OlNoYXBlKGNv
bnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBtX3NlZ21lbnRzKHsgcmVjdC54KCksIHJlY3QubWF4
WCgpIH0pCisgICAgLCBtX3NwYW5zKHsgeyByZWN0LnkoKSwgMCB9LCB7IHJlY3QubWF4WSgpLCAy
IH0gfSkKIHsKLSAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJl
Y3QueCgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgpKTsKLSAgICBhcHBlbmRTcGFu
KHJlY3QubWF4WSgpKTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFuKGludCB5
KQogewotICAgIG1fc3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdtZW50cy5zaXplKCkpKTsKKyAg
ICBtX3NwYW5zLmFwcGVuZCh7IHksIG1fc2VnbWVudHMuc2l6ZSgpIH0pOwogfQogCiBib29sIFJl
Z2lvbjo6U2hhcGU6OmNhbkNvYWxlc2NlKFNlZ21lbnRJdGVyYXRvciBiZWdpbiwgU2VnbWVudEl0
ZXJhdG9yIGVuZCkKQEAgLTMzMSwyNyArMzY5LDYgQEAgdm9pZCBSZWdpb246OlNoYXBlOjpkdW1w
KCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQoKSBjb25z
dAotewotICAgIGZvciAoYXV0byBzcGFuID0gc3BhbnNfYmVnaW4oKSwgZW5kID0gc3BhbnNfZW5k
KCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytzcGFuKSB7Ci0gICAgICAgIGlu
dCB5ID0gc3Bhbi0+eTsKLSAgICAgICAgaW50IGhlaWdodCA9IChzcGFuICsgMSktPnkgLSB5Owot
ICAgICAgICAKLSAgICAgICAgaWYgKGhlaWdodCA8IDApCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgZm9yIChhdXRvIHNlZ21lbnQgPSBzZWdtZW50c19iZWdpbihzcGFuKSwg
ZW5kID0gc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsgMSAh
PSBlbmQ7IHNlZ21lbnQgKz0gMikgewotICAgICAgICAgICAgaW50IHggPSAqc2VnbWVudDsKLSAg
ICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogSW50UmVjdCBSZWdp
b246OlNoYXBlOjpib3VuZHMoKSBjb25zdAogewogICAgIGlmIChpc0VtcHR5KCkpCkBAIC0zOTcs
MTIgKzQxNCw2IEBAIHZvaWQgUmVnaW9uOjpTaGFwZTo6dHJhbnNsYXRlKGNvbnN0IEludFMKICAg
ICAgICAgbV9zcGFuc1tpXS55ICs9IG9mZnNldC5oZWlnaHQoKTsKIH0KIAotdm9pZCBSZWdpb246
OlNoYXBlOjpzd2FwKFNoYXBlJiBvdGhlcikKLXsKLSAgICBtX3NlZ21lbnRzLnN3YXAob3RoZXIu
bV9zZWdtZW50cyk7Ci0gICAgbV9zcGFucy5zd2FwKG90aGVyLm1fc3BhbnMpOwotfQotCiBlbnVt
IHsKICAgICBTaGFwZTEsCiAgICAgU2hhcGUyLApAQCAtNTY3LDcxICs1NzgsODEgQEAgdm9pZCBS
ZWdpb246OmR1bXAoKSBjb25zdAogewogICAgIHByaW50ZigiQm91bmRzOiAoJWQsICVkLCAlZCwg
JWQpXG4iLAogICAgICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91bmRzLnkoKSwgbV9ib3VuZHMu
d2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fc2hhcGUuZHVtcCgpOworICAgIGlm
IChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT5kdW1wKCk7CiB9CiAjZW5kaWYKIAotdm9pZCBS
ZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpCi17Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBl
LmJvdW5kcygpOwotfQotCiB2b2lkIFJlZ2lvbjo6aW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYgcmVn
aW9uKQogewogICAgIGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkgewotICAgICAgICBt
X3NoYXBlID0gU2hhcGUoKTsKKyAgICAgICAgbV9zaGFwZSA9IG51bGxwdHI7CiAgICAgICAgIG1f
Ym91bmRzID0gSW50UmVjdCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV9z
aGFwZSAmJiAhcmVnaW9uLm1fc2hhcGUpIHsKKyAgICAgICAgbV9ib3VuZHMgPSBpbnRlcnNlY3Rp
b24obV9ib3VuZHMsIHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBTaGFwZSBpbnRlcnNlY3RlZFNoYXBlID0gU2hhcGU6OmludGVyc2VjdFNoYXBlcyhtX3No
YXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3YXAoaW50ZXJzZWN0ZWRTaGFw
ZSk7Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOworICAgIHNldFNoYXBlKFNoYXBl
OjppbnRlcnNlY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5t
X3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQg
UmVnaW9uOjp1bml0ZShjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsKICAgICBpZiAocmVnaW9uLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1JlY3QoKSAmJiBtX2JvdW5kcy5j
b250YWlucyhyZWdpb24ubV9ib3VuZHMpKQorICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAg
bV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1fc2hhcGUgPSByZWdpb24uY29w
eVNoYXBlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKHJlZ2lvbi5pc1JlY3Qo
KSAmJiByZWdpb24ubV9ib3VuZHMuY29udGFpbnMobV9ib3VuZHMpKSB7Ci0gICAgICAgIG1fc2hh
cGUgPSByZWdpb24ubV9zaGFwZTsKICAgICAgICAgbV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7
CisgICAgICAgIG1fc2hhcGUgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IC8vIEZJWE1FOiBXZSBtYXkgd2FudCBhbm90aGVyIHdheSB0byBjb25zdHJ1Y3QgYSBSZWdpb24g
d2l0aG91dCBkb2luZyB0aGlzIHRlc3Qgd2hlbiB3ZSBleHBlY3QgaXQgdG8gYmUgZmFsc2UuCi0g
ICAgaWYgKCFpc1JlY3QoKSAmJiBjb250YWlucyhyZWdpb24pKQorICAgIGlmIChjb250YWlucyhy
ZWdpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFwZSB1bml0ZWRTaGFwZSA9IFNoYXBl
Ojp1bmlvblNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3
YXAodW5pdGVkU2hhcGUpOwotICAgIG1fYm91bmRzLnVuaXRlKHJlZ2lvbi5tX2JvdW5kcyk7Cisg
ICAgc2V0U2hhcGUoU2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUgPyAqbV9zaGFwZSA6IG1fYm91
bmRzLCByZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6IHJlZ2lvbi5tX2JvdW5kcykp
OwogfQogCiB2b2lkIFJlZ2lvbjo6c3VidHJhY3QoY29uc3QgUmVnaW9uJiByZWdpb24pCiB7Ci0g
ICAgaWYgKG1fYm91bmRzLmlzRW1wdHkoKSkKKyAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKHJlZ2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBp
ZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRzKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU2hhcGUgc3VidHJhY3RlZFNoYXBlID0gU2hhcGU6OnN1YnRyYWN0U2hhcGVzKG1f
c2hhcGUsIHJlZ2lvbi5tX3NoYXBlKTsKLQotICAgIG1fc2hhcGUuc3dhcChzdWJ0cmFjdGVkU2hh
cGUpOwotICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsKKyAgICBzZXRTaGFwZShTaGFw
ZTo6c3VidHJhY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDogbV9ib3VuZHMsIHJlZ2lvbi5t
X3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91bmRzKSk7CiB9CiAKIHZvaWQg
UmVnaW9uOjp0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQogewogICAgIG1fYm91bmRz
Lm1vdmUob2Zmc2V0KTsKLSAgICBtX3NoYXBlLnRyYW5zbGF0ZShvZmZzZXQpOworICAgIGlmICht
X3NoYXBlKQorICAgICAgICBtX3NoYXBlLT50cmFuc2xhdGUob2Zmc2V0KTsKK30KKwordm9pZCBS
ZWdpb246OnNldFNoYXBlKFNoYXBlJiYgc2hhcGUpCit7CisgICAgbV9ib3VuZHMgPSBzaGFwZS5i
b3VuZHMoKTsKKworICAgIGlmIChzaGFwZS5pc1JlY3QoKSkgeworICAgICAgICBtX3NoYXBlID0g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9zaGFwZSkKKyAg
ICAgICAgbV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KFdURk1vdmUoc2hhcGUpKTsK
KyAgICBlbHNlCisgICAgICAgICptX3NoYXBlID0gV1RGTW92ZShzaGFwZSk7CiB9CiAKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmgJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVm
aW5lIFJlZ2lvbl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29uLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMSArNDAsMTkgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJl
Z2lvbihjb25zdCBJbnRSZWN0Jik7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWdpb24oY29uc3Qg
UmVnaW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKFJlZ2lvbiYmKTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIH5SZWdpb24oKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbiYgb3Bl
cmF0b3I9KGNvbnN0IFJlZ2lvbiYpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbiYgb3BlcmF0
b3I9KFJlZ2lvbiYmKTsKKwogICAgIEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9i
b3VuZHM7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kcy5pc0Vt
cHR5KCk7IH0KLSAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuaXNSZWN0
KCk7IH0KKyAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJuICFtX3NoYXBlOyB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4gcmVjdHMoKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHMoKSBjb25zdDsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgdW5pdGUoY29uc3QgUmVnaW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBpbnRlcnNlY3QoY29uc3QgUmVnaW9uJik7CkBAIC01OCw0OCArNjgsMzEgQEAgcHVibGlj
OgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgcmVnaW9uIGludGVyc2VjdHMgYW55
IHBhcnQgb2YgdGhpcyByZWdpb24uCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpbnRlcnNlY3Rz
KGNvbnN0IFJlZ2lvbiYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgdG90
YWxBcmVhKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG90YWxBcmVhKCkg
Y29uc3Q7CiAKLSAgICB1bnNpZ25lZCBncmlkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUu
Z3JpZFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGdyaWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aGFwZSA/IG1fc2hhcGUtPmdyaWRTaXplKCkgOiAwOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
dm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcGUuaXNWYWxpZCgpOyB9CisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxSZWdpb24+IGRlY29kZShEZWNvZGVyJik7CisgICAgLy8gRklYTUU6
IFJlbW92ZSBsZWdhY3kgZGVjb2RlLgorICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiwgUmVnaW9uJik7CiAKLSAgICAvLyBUaGlzIGlzIGludGVy
bmFsIHRvIFJlZ2lvbiwgYnV0IGV4cG9zZWQganVzdCBmb3IgZW5jb2RpbmcuCi0gICAgLy8gRklY
TUU6IGZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGVuY29kZSBXZWJDb3JlIGNsYXNzZXMuCitw
cml2YXRlOgogICAgIHN0cnVjdCBTcGFuIHsKLSAgICAgICAgU3BhbigpCi0gICAgICAgICAgICA6
IHkoMCkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KDApCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIFNwYW4oaW50IHksIHNpemVfdCBzZWdtZW50SW5kZXgpCi0gICAgICAgICAg
ICA6IHkoeSkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KHNlZ21lbnRJbmRleCkKLSAgICAg
ICAgewotICAgICAgICB9CisgICAgICAgIGludCB5IHsgMCB9OworICAgICAgICBzaXplX3Qgc2Vn
bWVudEluZGV4IHsgMCB9OwogCi0gICAgICAgIGludCB5OwotICAgICAgICBzaXplX3Qgc2VnbWVu
dEluZGV4OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAKLSAgICAvLyBGb3IgZW5jb2Rp
bmcvZGVjb2Rpbmcgb25seS4KLSAgICBjb25zdCBWZWN0b3I8aW50LCAzMj4mIHNoYXBlU2VnbWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLnNlZ21lbnRzKCk7IH0KLSAgICBjb25zdCBWZWN0
b3I8U3BhbiwgMTY+JiBzaGFwZVNwYW5zKCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZS5zcGFucygp
OyB9Ci0KLSAgICB2b2lkIHNldFNoYXBlU2VnbWVudHMoY29uc3QgVmVjdG9yPGludD4mIHNlZ21l
bnRzKSB7IG1fc2hhcGUuc2V0U2VnbWVudHMoc2VnbWVudHMpOyB9Ci0gICAgdm9pZCBzZXRTaGFw
ZVNwYW5zKGNvbnN0IFZlY3RvcjxTcGFuPiYgc3BhbnMpIHsgbV9zaGFwZS5zZXRTcGFucyhzcGFu
cyk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpOwot
Ci1wcml2YXRlOgotCiAgICAgY2xhc3MgU2hhcGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU2hh
cGUoKTsKKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgU2hhcGUoKTsKICAgICAgICAgU2hhcGUoY29u
c3QgSW50UmVjdCYpOwogCiAgICAgICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7CkBAIC0xMjAs
MjIgKzExMywxNSBAQCBwcml2YXRlOgogICAgICAgICBzdGF0aWMgU2hhcGUgc3VidHJhY3RTaGFw
ZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29uc3QgU2hhcGUmIHNoYXBlMik7CiAKICAgICAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCB0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYpOwotICAgICAgICB2
b2lkIHN3YXAoU2hhcGUmKTsKIAogICAgICAgICBzdHJ1Y3QgQ29tcGFyZUNvbnRhaW5zT3BlcmF0
aW9uOwogICAgICAgICBzdHJ1Y3QgQ29tcGFyZUludGVyc2VjdHNPcGVyYXRpb247CiAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29tcGFyZU9wZXJhdGlvbj4KICAgICAgICAgc3RhdGljIGJv
b2wgY29tcGFyZVNoYXBlcyhjb25zdCBTaGFwZSYgc2hhcGUxLCBjb25zdCBTaGFwZSYgc2hhcGUy
KTsKLSAgICAgICAgCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNWYWxpZCgpIGNvbnN0
OwotCi0gICAgICAgIC8vIEZvciBlbmNvZGluZy9kZWNvZGluZyBvbmx5LgotICAgICAgICBjb25z
dCBWZWN0b3I8aW50LCAzMj4mIHNlZ21lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zZWdtZW50czsg
fQotICAgICAgICBjb25zdCBWZWN0b3I8U3BhbiwgMTY+JiBzcGFucygpIGNvbnN0IHsgcmV0dXJu
IG1fc3BhbnM7IH0KIAotICAgICAgICB2b2lkIHNldFNlZ21lbnRzKGNvbnN0IFZlY3RvcjxpbnQ+
JiBzZWdtZW50cykgeyBtX3NlZ21lbnRzID0gc2VnbWVudHM7IH0KLSAgICAgICAgdm9pZCBzZXRT
cGFucyhjb25zdCBWZWN0b3I8U3Bhbj4mIHNwYW5zKSB7IG1fc3BhbnMgPSBzcGFuczsgfQorICAg
ICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7
CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTaGFwZT4g
ZGVjb2RlKERlY29kZXImKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgdm9pZCBkdW1wKCkg
Y29uc3Q7CkBAIC0xNjIsMTIgKzE0OCwxNiBAQCBwcml2YXRlOgogICAgICAgICBmcmllbmQgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFNoYXBlJiwgY29uc3QgU2hhcGUmKTsKICAgICB9OwogCisgICAg
c3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBjb3B5U2hhcGUoKSBjb25zdCB7IHJldHVybiBtX3NoYXBl
ID8gc3RkOjptYWtlX3VuaXF1ZTxTaGFwZT4oKm1fc2hhcGUpIDogbnVsbHB0cjsgfQorICAgIHZv
aWQgc2V0U2hhcGUoU2hhcGUmJik7CisKICAgICBJbnRSZWN0IG1fYm91bmRzOwotICAgIFNoYXBl
IG1fc2hhcGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBtX3NoYXBlOwogCiAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpb24mLCBjb25zdCBSZWdpb24mKTsKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXBlJiwgY29uc3QgU2hhcGUmKTsKICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNwYW4mLCBjb25zdCBTcGFuJik7CisgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTcGFuJiwgY29uc3QgU3BhbiYpOwogfTsKIAogc3Rh
dGljIGlubGluZSBSZWdpb24gaW50ZXJzZWN0KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9u
JiBiKQpAQCAtMTc3LDcgKzE2Nyw3IEBAIHN0YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChj
b25zdCBSZWcKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0gICAgCisKIHN0YXRpYyBpbmxpbmUg
UmVnaW9uIHN1YnRyYWN0KGNvbnN0IFJlZ2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQogewogICAg
IFJlZ2lvbiByZXN1bHQoYSk7CkBAIC0xOTYsNyArMTg2LDcgQEAgc3RhdGljIGlubGluZSBSZWdp
b24gdHJhbnNsYXRlKGNvbnN0IFJlZwogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJl
Z2lvbiYgYSwgY29uc3QgUmVnaW9uJiBiKQogewotICAgIHJldHVybiBhLm1fYm91bmRzID09IGIu
bV9ib3VuZHMgJiYgYS5tX3NoYXBlID09IGIubV9zaGFwZTsKKyAgICByZXR1cm4gYS5tX2JvdW5k
cyA9PSBiLm1fYm91bmRzICYmIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoYS5tX3NoYXBlLCBiLm1f
c2hhcGUpOwogfQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWdpb24mIGEsIGNvbnN0
IFJlZ2lvbiYgYikKIHsKQEAgLTIxMiwxMSArMjAyLDEwOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFJlZ2lvbjo6U3BhCiB7CiAgICAgcmV0dXJuIGEueSA9PSBiLnkgJiYgYS5zZWdt
ZW50SW5kZXggPT0gYi5zZWdtZW50SW5kZXg7CiB9CisKIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgUmVnaW9uOjpTcGFuJiBhLCBjb25zdCBSZWdpb246OlNwYW4mIGIpCiB7CiAgICAgcmV0
dXJuICEoYSA9PSBiKTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgUmVnaW9u
OjpTcGFuOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8
IHkgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNlZ21lbnRJbmRleCk7Cit9CisKK3RlbXBsYXRl
PGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWdpb246OlNwYW4+IFJlZ2lvbjo6U3Bhbjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8aW50PiB5OworICAgIGRlY29k
ZXIgPj4geTsKKyAgICBpZiAoIXkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBPcHRpb25h
bDx1aW50NjRfdD4gc2VnbWVudEluZGV4OworICAgIGRlY29kZXIgPj4gc2VnbWVudEluZGV4Owor
ICAgIGlmICghc2VnbWVudEluZGV4KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJu
IHsgeyAqeSwgKnNlZ21lbnRJbmRleCB9IH07Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIFJlZ2lvbjo6U2hhcGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgbV9zZWdtZW50czsKKyAgICBlbmNvZGVyIDw8IG1fc3BhbnM7Cit9CisK
K3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxSZWdpb246OlNoYXBlPiBSZWdpb246
OlNoYXBlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxWZWN0b3I8
aW50Pj4gc2VnbWVudHM7CisgICAgZGVjb2RlciA+PiBzZWdtZW50czsKKyAgICBpZiAoIXNlZ21l
bnRzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3B0aW9uYWw8VmVjdG9y
PFJlZ2lvbjo6U3Bhbj4+IHNwYW5zOworICAgIGRlY29kZXIgPj4gc3BhbnM7CisgICAgaWYgKCFz
cGFucykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFNoYXBlIHNoYXBlOwor
ICAgIHNoYXBlLm1fc2VnbWVudHMgPSBXVEZNb3ZlKCpzZWdtZW50cyk7CisgICAgc2hhcGUubV9z
cGFucyA9IFdURk1vdmUoKnNwYW5zKTsKKworICAgIHJldHVybiB7IHNoYXBlIH07Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFJlZ2lvbjo6ZW5jb2RlKEVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBtX2JvdW5kczsKKyAgICBib29sIGhhc1NoYXBl
ID0gISFtX3NoYXBlOworICAgIGVuY29kZXIgPDwgaGFzU2hhcGU7CisgICAgaWYgKGhhc1NoYXBl
KQorICAgICAgICBlbmNvZGVyIDw8ICptX3NoYXBlOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorT3B0aW9uYWw8UmVnaW9uPiBSZWdpb246OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIE9wdGlvbmFsPEludFJlY3Q+IGJvdW5kczsKKyAgICBkZWNvZGVyID4+IGJvdW5kczsK
KyAgICBpZiAoIWJvdW5kcykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9w
dGlvbmFsPGJvb2w+IGhhc1NoYXBlOworICAgIGRlY29kZXIgPj4gaGFzU2hhcGU7CisgICAgaWYg
KCFoYXNTaGFwZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFJlZ2lvbiBy
ZWdpb24gPSB7ICpib3VuZHMgfTsKKworICAgIGlmICgqaGFzU2hhcGUpIHsKKyAgICAgICAgT3B0
aW9uYWw8U2hhcGU+IHNoYXBlOworICAgICAgICBkZWNvZGVyID4+IHNoYXBlOworICAgICAgICBp
ZiAoIXNoYXBlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmVn
aW9uLm1fc2hhcGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNoYXBlPihXVEZNb3ZlKCpzaGFwZSkpOwor
ICAgIH0KKworICAgIHJldHVybiB7IHJlZ2lvbiB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgorYm9vbCBSZWdpb246OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWdpb24mIHJlZ2lv
bikKK3sKKyAgICBPcHRpb25hbDxSZWdpb24+IGRlY29kZWRSZWdpb247CisgICAgZGVjb2RlciA+
PiBkZWNvZGVkUmVnaW9uOworICAgIGlmICghZGVjb2RlZFJlZ2lvbikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJlZ2lvbiA9IFdURk1vdmUoKmRlY29kZWRSZWdpb24pOworICAgIHJldHVy
biB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBSZWdpb25f
aApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAJKHJldmlzaW9uIDI0Mjk5MykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyTGF5ZXI6OnBhaW50VXNpbmdPdmVybAogICAgIH0KIAogICAgIG5vbk92ZXJsYXBSZWdpb24u
dHJhbnNsYXRlKG9wdGlvbnMub2Zmc2V0KTsKLSAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBu
b25PdmVybGFwUmVnaW9uLnJlY3RzKCk7CisgICAgYXV0byByZWN0cyA9IG5vbk92ZXJsYXBSZWdp
b24ucmVjdHMoKTsKIAogICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKSB7CiAgICAgICAgIGlm
ICghcmVjdC5pbnRlcnNlY3RzKG9wdGlvbnMudGV4dHVyZU1hcHBlci5jbGlwQm91bmRzKCkpKQpJ
bmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTktMDMtMTQgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIE9wdGltaXplIFJlZ2lvbiBmb3Igc2lu
Z2xlIHJlY3RhbmdsZSBjYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTU3NDMKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisK
KyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6TGF5
ZXJQcm9wZXJ0aWVzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdp
b25zPjo6ZGVjb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+
OjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPFJlZ2lvbjo6
U3Bhbj46OmRlY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8UmVn
aW9uPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxSZWdp
b24+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaDoKKwogMjAxOS0wMy0xNCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgW2lPU10gV2ViS2l0IGNyYXNoZXMgd2hlbiBvcGVuaW5nIHBhZ2VzIGRv
Y3VtZW50cwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsOCArMzY3LDkgQEAg
dm9pZCBBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPgogCiBib29sIEFyZ3VtZW50
Q29kZXI8RXZlbnRUcmFja2luZ1JlZ2lvbnM+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgRXZl
bnRUcmFja2luZ1JlZ2lvbnMmIGV2ZW50VHJhY2tpbmdSZWdpb25zKQogewotICAgIFJlZ2lvbiBh
c3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbjsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFzeW5j
aHJvbm91c0Rpc3BhdGNoUmVnaW9uKSkKKyAgICBPcHRpb25hbDxSZWdpb24+IGFzeW5jaHJvbm91
c0Rpc3BhdGNoUmVnaW9uOworICAgIGRlY29kZXIgPj4gYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdp
b247CisgICAgaWYgKCFhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWdpb24+IGV2ZW50U3BlY2lmaWNTeW5jaHJv
bm91c0Rpc3BhdGNoUmVnaW9uczsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGV2ZW50U3BlY2lm
aWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykpCkBAIC0zNzgsNyArMzc5LDcgQEAgYm9vbCBB
cmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPgogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUodG91Y2hBY3Rpb25EYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCi0gICAg
ZXZlbnRUcmFja2luZ1JlZ2lvbnMuYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24gPSBXVEZNb3Zl
KGFzeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9uKTsKKyAgICBldmVudFRyYWNraW5nUmVnaW9ucy5h
c3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbiA9IFdURk1vdmUoKmFzeW5jaHJvbm91c0Rpc3BhdGNo
UmVnaW9uKTsKICAgICBldmVudFRyYWNraW5nUmVnaW9ucy5ldmVudFNwZWNpZmljU3luY2hyb25v
dXNEaXNwYXRjaFJlZ2lvbnMgPSBXVEZNb3ZlKGV2ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3Bh
dGNoUmVnaW9ucyk7CiAjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQogICAgIGV2ZW50VHJhY2tp
bmdSZWdpb25zLnRvdWNoQWN0aW9uRGF0YSA9IFdURk1vdmUodG91Y2hBY3Rpb25EYXRhKTsKQEAg
LTkwMiw2NiArOTAzLDYgQEAgT3B0aW9uYWw8UmVjZW50U2VhcmNoPiBBcmd1bWVudENvZGVyPFJl
YwogICAgIHJldHVybiB7eyBXVEZNb3ZlKCpzdHJpbmcpLCBXVEZNb3ZlKCp0aW1lKSB9fTsKIH0K
IAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFJlZ2lvbjo6U3BhbiYpOwotICAgIHN0
YXRpYyBPcHRpb25hbDxSZWdpb246OlNwYW4+IGRlY29kZShEZWNvZGVyJik7Ci19OwotCi12b2lk
IEFyZ3VtZW50Q29kZXI8UmVnaW9uOjpTcGFuPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFJlZ2lvbjo6U3BhbiYgc3BhbikKLXsKLSAgICBlbmNvZGVyIDw8IHNwYW4ueTsKLSAgICBl
bmNvZGVyIDw8ICh1aW50NjRfdClzcGFuLnNlZ21lbnRJbmRleDsKLX0KLQotT3B0aW9uYWw8UmVn
aW9uOjpTcGFuPiBBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmRlY29kZShEZWNvZGVyJiBk
ZWNvZGVyKQotewotICAgIFJlZ2lvbjo6U3BhbiBzcGFuOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoc3Bhbi55KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICB1aW50
NjRfdCBzZWdtZW50SW5kZXg7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShzZWdtZW50SW5kZXgp
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIAotICAgIHNwYW4uc2VnbWVudElu
ZGV4ID0gc2VnbWVudEluZGV4OwotICAgIHJldHVybiBXVEZNb3ZlKHNwYW4pOwotfQotCi12b2lk
IEFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFJl
Z2lvbiYgcmVnaW9uKQotewotICAgIGVuY29kZXIuZW5jb2RlKHJlZ2lvbi5zaGFwZVNlZ21lbnRz
KCkpOwotICAgIGVuY29kZXIuZW5jb2RlKHJlZ2lvbi5zaGFwZVNwYW5zKCkpOwotfQotCi1ib29s
IEFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFJlZ2lvbiYg
cmVnaW9uKQotewotICAgIFZlY3RvcjxpbnQ+IHNlZ21lbnRzOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoc2VnbWVudHMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8UmVn
aW9uOjpTcGFuPiBzcGFuczsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNwYW5zKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJlZ2lvbi5zZXRTaGFwZVNlZ21lbnRzKHNlZ21l
bnRzKTsKLSAgICByZWdpb24uc2V0U2hhcGVTcGFucyhzcGFucyk7Ci0gICAgcmVnaW9uLnVwZGF0
ZUJvdW5kc0Zyb21TaGFwZSgpOwotICAgIAotICAgIGlmICghcmVnaW9uLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLU9wdGlvbmFsPFJl
Z2lvbj4gQXJndW1lbnRDb2RlcjxSZWdpb24+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKLXsK
LSAgICBSZWdpb24gcmVnaW9uOwotICAgIGlmICghZGVjb2RlKGRlY29kZXIsIHJlZ2lvbikpCi0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gcmVnaW9uOwotfQotCiB2
b2lkIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0
IExlbmd0aCYgbGVuZ3RoKQogewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5j
b2RlKGVuY29kZXIsIGxlbmd0aCk7CkBAIC05NzIsNyArOTEzLDYgQEAgYm9vbCBBcmd1bWVudENv
ZGVyPExlbmd0aD46OmRlY29kZShEZWNvZAogICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVy
PExlbmd0aD46OmRlY29kZShkZWNvZGVyLCBsZW5ndGgpOwogfQogCi0KIHZvaWQgQXJndW1lbnRD
b2RlcjxWaWV3cG9ydEF0dHJpYnV0ZXM+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
Vmlld3BvcnRBdHRyaWJ1dGVzJiB2aWV3cG9ydEF0dHJpYnV0ZXMpCiB7CiAgICAgU2ltcGxlQXJn
dW1lbnRDb2RlcjxWaWV3cG9ydEF0dHJpYnV0ZXM+OjplbmNvZGUoZW5jb2Rlciwgdmlld3BvcnRB
dHRyaWJ1dGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDEyICszMjQsNiBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6CiAgICAgc3RhdGljIE9wdGlv
bmFsPFdlYkNvcmU6OlBhdGg+IGRlY29kZShEZWNvZGVyJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlJlZ2lvbj4gewotICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6UmVnaW9uJik7Ci0gICAgc3RhdGljIGJvb2wg
ZGVjb2RlKERlY29kZXImLCBXZWJDb3JlOjpSZWdpb24mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8
V2ViQ29yZTo6UmVnaW9uPiBkZWNvZGUoRGVjb2RlciYpOwotfTsKLQogdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpMZW5ndGg+IHsKICAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6Okxlbmd0aCYpOwogICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6TGVuZ3RoJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1No
YXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFj
a2luZ1N0b3JlLm1tCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9S
ZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5OCw3ICsyOTgsNyBAQCB2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkcmF3SW5D
b250CiAgICAgLy8gT3RoZXJ3aXNlLCByZXBhaW50IHRoZSBlbnRpcmUgYm91bmRpbmcgYm94IG9m
IHRoZSBkaXJ0eSByZWdpb24uCiAgICAgV2ViQ29yZTo6SW50UmVjdCBkaXJ0eUJvdW5kcyA9IG1f
ZGlydHlSZWdpb24uYm91bmRzKCk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gZGly
dHlSZWN0cyA9IG1fZGlydHlSZWdpb24ucmVjdHMoKTsKKyAgICBhdXRvIGRpcnR5UmVjdHMgPSBt
X2RpcnR5UmVnaW9uLnJlY3RzKCk7CiAgICAgaWYgKGRpcnR5UmVjdHMuc2l6ZSgpID4gV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyOjp3ZWJMYXllck1heFJlY3RzVG9QYWludCB8fCBtX2RpcnR5UmVn
aW9uLnRvdGFsQXJlYSgpID4gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjp3ZWJMYXllcldhc3Rl
ZFNwYWNlVGhyZXNob2xkICogZGlydHlCb3VuZHMud2lkdGgoKSAqIGRpcnR5Qm91bmRzLmhlaWdo
dCgpKSB7CiAgICAgICAgIGRpcnR5UmVjdHMuY2xlYXIoKTsKICAgICAgICAgZGlydHlSZWN0cy5h
cHBlbmQoZGlydHlCb3VuZHMpOwpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bi5tbQkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
MTUsMTAgKzUxNSwxMSBAQCBib29sIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpMYXllclBy
CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFzRXZlbnRSZWdpb24pKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoaGFzRXZlbnRSZWdpb24pIHsKLSAgICAgICAg
ICAgIGF1dG8gZXZlbnRSZWdpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6OlJlZ2lvbj4o
KTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoKmV2ZW50UmVnaW9uKSkKKyAgICAg
ICAgICAgIE9wdGlvbmFsPFdlYkNvcmU6OlJlZ2lvbj4gZXZlbnRSZWdpb247CisgICAgICAgICAg
ICBkZWNvZGVyID4+IGV2ZW50UmVnaW9uOworICAgICAgICAgICAgaWYgKCFldmVudFJlZ2lvbikK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQuZXZlbnRS
ZWdpb24gPSBXVEZNb3ZlKGV2ZW50UmVnaW9uKTsKKyAgICAgICAgICAgIHJlc3VsdC5ldmVudFJl
Z2lvbiA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaW9uPihXVEZNb3ZlKCpldmVudFJlZ2lvbikpOwog
ICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364791</attachid>
            <date>2019-03-15 06:22:16 -0700</date>
            <delta_ts>2019-03-15 07:00:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize-9.patch</filename>
            <type>text/plain</type>
            <size>27107</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgIEluc3RydW1lbnRhdGlvbiBzaG93cyB2YXN0IG1ham9yaXR5IG9mIFJlZ2lv
biBvYmplY3RzIGNvbnNpc3Qgb2YgYSBzaW5nbGUgcmVjdGFuZ2xlLiBIb3dldmVyIGl0IGFsd2F5
cyBhbGxvY2F0ZXMKKyAgICAgICAgdGhlIGxhcmdlIFNoYXBlIGRhdGEgc3RydWN0dXJlLiBUaGlz
IG1ha2VzIGl0IHVuc3VpdGFibGUgdG8gdXNlIGFzIGEgbWVtYmVyIGluIGFueSBwb3B1bGFyIG9i
amVjdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBvcHRpbWl6ZXMgdGhlIHNpbmdsZSByZWN0YW5n
bGUgY2FzZSBieSB1c2luZyBvbmx5IHRoZSBib3VuZHMgcmVjdGFuZ2xlIHRvIGRlc2NyaWJlIGl0
LgorICAgICAgICBTaGFwZSBpcyBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGlzIG1ha2VzIGl0IHNh
ZmUgdG8gdXNlIFJlZ2lvbiBhcyBhIGRhdGEgbWVtYmVyIHdoZXJlIGEgcmVjdGFuZ2xlIGlzIHRo
ZSBjb21tb24gY2FzZS4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBtb2Rlcm5pemVzIFJlZ2lv
biBlbmNvZGluZy9kZWNvZGluZyBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6UmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6flJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaW9uOjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6
U2hhcGU6OlNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNw
YW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dW5p
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzdWJ0cmFjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3dhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbm93IHVudXNlZCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
Ojppc1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpncmlkU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmNvcHlTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkZWNvZGUpOgor
CisgICAgICAgIFRoaXMgaXMgbm93IHBhcnQgb2YgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6
UmVnaW9uOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6U3Bhbjo6U3Bhbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNoYXBl
U2VnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzaGFw
ZVNwYW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNoYXBl
U3BhbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2VnbWVu
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3Bh
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U2VnbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U3BhbnMpOiBEZWxldGVkLgorCisgICAgICAgIE5vIG5lZWQgdG8gZXhwb3NlIHRoZXNlIGZvciBl
bmNvZGluZyBhbnltb3JlLgorCiAyMDE5LTAzLTE1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIGEgd2F5IHRvIGNhcHR1
cmUgYSBzY3JlZW5zaG90IG9mIGEgbm9kZSBmcm9tIHdpdGhpbiB0aGUgcGFnZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCShyZXZpc2lvbiAyNDI5
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxOSArNDIsNTQgQEAgUmVnaW9uOjpSZWdpb24oKQogCiBSZWdpb246
OlJlZ2lvbihjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIDogbV9ib3VuZHMocmVjdCkKLSAgICAs
IG1fc2hhcGUocmVjdCkKIHsKIH0KIAotVmVjdG9yPEludFJlY3Q+IFJlZ2lvbjo6cmVjdHMoKSBj
b25zdAorUmVnaW9uOjpSZWdpb24oY29uc3QgUmVnaW9uJiBvdGhlcikKKyAgICA6IG1fYm91bmRz
KG90aGVyLm1fYm91bmRzKQorICAgICwgbV9zaGFwZShvdGhlci5jb3B5U2hhcGUoKSkKIHsKLSAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Cit9CisKK1JlZ2lvbjo6UmVnaW9uKFJlZ2lvbiYmIG90
aGVyKQorICAgIDogbV9ib3VuZHMoV1RGTW92ZShvdGhlci5tX2JvdW5kcykpCisgICAgLCBtX3No
YXBlKFdURk1vdmUob3RoZXIubV9zaGFwZSkpCit7Cit9CisKK1JlZ2lvbjo6flJlZ2lvbigpCit7
Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRvcj0oY29uc3QgUmVnaW9uJiBvdGhlcikKK3sK
KyAgICBtX2JvdW5kcyA9IG90aGVyLm1fYm91bmRzOworICAgIG1fc2hhcGUgPSBvdGhlci5jb3B5
U2hhcGUoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRv
cj0oUmVnaW9uJiYgb3RoZXIpCit7CisgICAgbV9ib3VuZHMgPSBXVEZNb3ZlKG90aGVyLm1fYm91
bmRzKTsKKyAgICBtX3NoYXBlID0gV1RGTW92ZShvdGhlci5tX3NoYXBlKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1ZlY3RvcjxJbnRSZWN0LCAxPiBSZWdpb246OnJlY3RzKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHM7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRl
cmF0b3Igc3BhbiA9IG1fc2hhcGUuc3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19l
bmQoKTsgc3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAo
IW1fc2hhcGUpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZWN0cy51bmNoZWNrZWRBcHBlbmQobV9ib3VuZHMpOworICAgICAgICByZXR1cm4gcmVjdHM7
CisgICAgfQorCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLT5z
cGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19lbmQoKTsgc3BhbiAhPSBlbmQgJiYg
c3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAgaW50IHkgPSBzcGFuLT55OwogICAg
ICAgICBpbnQgaGVpZ2h0ID0gKHNwYW4gKyAxKS0+eSAtIHk7CiAKLSAgICAgICAgZm9yIChTaGFw
ZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNlZ21lbnRzX2JlZ2luKHNwYW4p
LCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYgc2Vn
bWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAgICAgZm9yIChTaGFwZTo6U2Vn
bWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50c19iZWdpbihzcGFuKSwgZW5k
ID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50
ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAgICAgaW50IHggPSAqc2VnbWVu
dDsKICAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKIApAQCAtNzAs
NyArMTA1LDEwIEBAIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBSZWdpb24mIHJlZ2kKICAg
ICBpZiAoIW1fYm91bmRzLmNvbnRhaW5zKHJlZ2lvbi5tX2JvdW5kcykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBTaGFwZTo6Y29tcGFyZVNoYXBlczxTaGFwZTo6Q29tcGFy
ZUNvbnRhaW5zT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFt
X3NoYXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBTaGFwZTo6Y29tcGFy
ZVNoYXBlczxTaGFwZTo6Q29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uPigqbV9zaGFwZSwgcmVnaW9u
Lm1fc2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiBTaGFwZShyZWdpb24ubV9ib3VuZHMpKTsKIH0K
IAogYm9vbCBSZWdpb246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAg
LTc4LDcgKzExNiwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFpbnMoY29uc3QgSW50UG9pbnQmIHBv
CiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGZvciAoU2hhcGU6OlNwYW5JdGVyYXRvciBzcGFuID0gbV9zaGFwZS5zcGFuc19i
ZWdpbigpLCBlbmQgPSBtX3NoYXBlLnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFuICsg
MSAhPSBlbmQ7ICsrc3BhbikgeworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0b3Igc3BhbiA9IG1fc2hhcGUtPnNwYW5z
X2JlZ2luKCksIGVuZCA9IG1fc2hhcGUtPnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFu
ICsgMSAhPSBlbmQ7ICsrc3BhbikgewogICAgICAgICBpbnQgeSA9IHNwYW4tPnk7CiAgICAgICAg
IGludCBtYXhZID0gKHNwYW4gKyAxKS0+eTsKIApAQCAtODcsNyArMTI4LDcgQEAgYm9vbCBSZWdp
b246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwbwogICAgICAgICBpZiAobWF4WSA8PSBwb2lu
dC55KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBmb3IgKFNoYXBlOjpTZWdt
ZW50SXRlcmF0b3Igc2VnbWVudCA9IG1fc2hhcGUuc2VnbWVudHNfYmVnaW4oc3BhbiksIGVuZCA9
IG1fc2hhcGUuc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsg
MSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgeworICAgICAgICBmb3IgKFNoYXBlOjpTZWdtZW50SXRl
cmF0b3Igc2VnbWVudCA9IG1fc2hhcGUtPnNlZ21lbnRzX2JlZ2luKHNwYW4pLCBlbmQgPSBtX3No
YXBlLT5zZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5kICYmIHNlZ21lbnQgKyAxICE9
IGVuZDsgc2VnbWVudCArPSAyKSB7CiAgICAgICAgICAgICBpbnQgeCA9ICpzZWdtZW50OwogICAg
ICAgICAgICAgaW50IG1heFggPSAqKHNlZ21lbnQgKyAxKTsKIApAQCAtMTA2LDE5ICsxNDcsMTgg
QEAgYm9vbCBSZWdpb246OmludGVyc2VjdHMoY29uc3QgUmVnaW9uJiByZQogICAgIGlmICghbV9i
b3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNl
Y3RzT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFtX3NoYXBl
ICYmICFyZWdpb24ubV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
U2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uPiht
X3NoYXBlID8gKm1fc2hhcGUgOiBtX2JvdW5kcywgcmVnaW9uLm1fc2hhcGUgPyAqcmVnaW9uLm1f
c2hhcGUgOiByZWdpb24ubV9ib3VuZHMpOwogfQogCi11bnNpZ25lZCBSZWdpb246OnRvdGFsQXJl
YSgpIGNvbnN0Cit1aW50NjRfdCBSZWdpb246OnRvdGFsQXJlYSgpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEludFJlY3Q+IHJlY3RzID0gdGhpcy0+cmVjdHMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IHJl
Y3RzLnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b3RhbEFyZWEgPSAwOworICAgIHVpbnQ2NF90IHRv
dGFsQXJlYSA9IDA7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBy
ZWN0cygpKQogICAgICAgICB0b3RhbEFyZWEgKz0gKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0
KCkpOwotICAgIH0KIAogICAgIHJldHVybiB0b3RhbEFyZWE7CiB9CkBAIC0yMjEsMjEgKzI2MSwx
NSBAQCBzdHJ1Y3QgUmVnaW9uOjpTaGFwZTo6Q29tcGFyZUludGVyc2VjdHNPCiAgICAgaW5saW5l
IHN0YXRpYyBib29sIGFPdmVybGFwc0IoYm9vbCYgcmVzdWx0KSB7IHJlc3VsdCA9IHRydWU7IHJl
dHVybiB0cnVlOyB9CiB9OwogCi1SZWdpb246OlNoYXBlOjpTaGFwZSgpCi17Ci19Ci0KIFJlZ2lv
bjo6U2hhcGU6OlNoYXBlKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBtX3NlZ21lbnRzKHsg
cmVjdC54KCksIHJlY3QubWF4WCgpIH0pCisgICAgLCBtX3NwYW5zKHsgeyByZWN0LnkoKSwgMCB9
LCB7IHJlY3QubWF4WSgpLCAyIH0gfSkKIHsKLSAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKLSAg
ICBhcHBlbmRTZWdtZW50KHJlY3QueCgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgp
KTsKLSAgICBhcHBlbmRTcGFuKHJlY3QubWF4WSgpKTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBl
OjphcHBlbmRTcGFuKGludCB5KQogewotICAgIG1fc3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdt
ZW50cy5zaXplKCkpKTsKKyAgICBtX3NwYW5zLmFwcGVuZCh7IHksIG1fc2VnbWVudHMuc2l6ZSgp
IH0pOwogfQogCiBib29sIFJlZ2lvbjo6U2hhcGU6OmNhbkNvYWxlc2NlKFNlZ21lbnRJdGVyYXRv
ciBiZWdpbiwgU2VnbWVudEl0ZXJhdG9yIGVuZCkKQEAgLTMzMSwyNyArMzY1LDYgQEAgdm9pZCBS
ZWdpb246OlNoYXBlOjpkdW1wKCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFJlZ2lvbjo6U2hh
cGU6OmlzVmFsaWQoKSBjb25zdAotewotICAgIGZvciAoYXV0byBzcGFuID0gc3BhbnNfYmVnaW4o
KSwgZW5kID0gc3BhbnNfZW5kKCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytz
cGFuKSB7Ci0gICAgICAgIGludCB5ID0gc3Bhbi0+eTsKLSAgICAgICAgaW50IGhlaWdodCA9IChz
cGFuICsgMSktPnkgLSB5OwotICAgICAgICAKLSAgICAgICAgaWYgKGhlaWdodCA8IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChhdXRvIHNlZ21lbnQgPSBzZWdt
ZW50c19iZWdpbihzcGFuKSwgZW5kID0gc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVu
ZCAmJiBzZWdtZW50ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewotICAgICAgICAgICAgaW50
IHggPSAqc2VnbWVudDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0g
eDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogSW50UmVjdCBSZWdpb246OlNoYXBlOjpib3VuZHMoKSBjb25zdAogewogICAgIGlmIChp
c0VtcHR5KCkpCkBAIC0zOTcsMTIgKzQxMCw2IEBAIHZvaWQgUmVnaW9uOjpTaGFwZTo6dHJhbnNs
YXRlKGNvbnN0IEludFMKICAgICAgICAgbV9zcGFuc1tpXS55ICs9IG9mZnNldC5oZWlnaHQoKTsK
IH0KIAotdm9pZCBSZWdpb246OlNoYXBlOjpzd2FwKFNoYXBlJiBvdGhlcikKLXsKLSAgICBtX3Nl
Z21lbnRzLnN3YXAob3RoZXIubV9zZWdtZW50cyk7Ci0gICAgbV9zcGFucy5zd2FwKG90aGVyLm1f
c3BhbnMpOwotfQotCiBlbnVtIHsKICAgICBTaGFwZTEsCiAgICAgU2hhcGUyLApAQCAtNTY3LDcx
ICs1NzQsODEgQEAgdm9pZCBSZWdpb246OmR1bXAoKSBjb25zdAogewogICAgIHByaW50ZigiQm91
bmRzOiAoJWQsICVkLCAlZCwgJWQpXG4iLAogICAgICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91
bmRzLnkoKSwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fc2hh
cGUuZHVtcCgpOworICAgIGlmIChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT5kdW1wKCk7CiB9
CiAjZW5kaWYKIAotdm9pZCBSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpCi17Ci0gICAg
bV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOwotfQotCiB2b2lkIFJlZ2lvbjo6aW50ZXJzZWN0
KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQogewogICAgIGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91
bmRzKSkgewotICAgICAgICBtX3NoYXBlID0gU2hhcGUoKTsKKyAgICAgICAgbV9zaGFwZSA9IG51
bGxwdHI7CiAgICAgICAgIG1fYm91bmRzID0gSW50UmVjdCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGlmICghbV9zaGFwZSAmJiAhcmVnaW9uLm1fc2hhcGUpIHsKKyAgICAgICAgbV9i
b3VuZHMgPSBpbnRlcnNlY3Rpb24obV9ib3VuZHMsIHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBTaGFwZSBpbnRlcnNlY3RlZFNoYXBlID0gU2hhcGU6Omlu
dGVyc2VjdFNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3
YXAoaW50ZXJzZWN0ZWRTaGFwZSk7Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOwor
ICAgIHNldFNoYXBlKFNoYXBlOjppbnRlcnNlY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDog
bV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91
bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp1bml0ZShjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsK
ICAgICBpZiAocmVnaW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1Jl
Y3QoKSAmJiBtX2JvdW5kcy5jb250YWlucyhyZWdpb24ubV9ib3VuZHMpKQorICAgIGlmIChpc0Vt
cHR5KCkpIHsKKyAgICAgICAgbV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1f
c2hhcGUgPSByZWdpb24uY29weVNoYXBlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
aWYgKHJlZ2lvbi5pc1JlY3QoKSAmJiByZWdpb24ubV9ib3VuZHMuY29udGFpbnMobV9ib3VuZHMp
KSB7Ci0gICAgICAgIG1fc2hhcGUgPSByZWdpb24ubV9zaGFwZTsKICAgICAgICAgbV9ib3VuZHMg
PSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1fc2hhcGUgPSBudWxscHRyOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIC8vIEZJWE1FOiBXZSBtYXkgd2FudCBhbm90aGVyIHdheSB0byBj
b25zdHJ1Y3QgYSBSZWdpb24gd2l0aG91dCBkb2luZyB0aGlzIHRlc3Qgd2hlbiB3ZSBleHBlY3Qg
aXQgdG8gYmUgZmFsc2UuCi0gICAgaWYgKCFpc1JlY3QoKSAmJiBjb250YWlucyhyZWdpb24pKQor
ICAgIGlmIChjb250YWlucyhyZWdpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFwZSB1
bml0ZWRTaGFwZSA9IFNoYXBlOjp1bmlvblNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7
Ci0KLSAgICBtX3NoYXBlLnN3YXAodW5pdGVkU2hhcGUpOwotICAgIG1fYm91bmRzLnVuaXRlKHJl
Z2lvbi5tX2JvdW5kcyk7CisgICAgc2V0U2hhcGUoU2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUg
PyAqbV9zaGFwZSA6IG1fYm91bmRzLCByZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6
IHJlZ2lvbi5tX2JvdW5kcykpOwogfQogCiB2b2lkIFJlZ2lvbjo6c3VidHJhY3QoY29uc3QgUmVn
aW9uJiByZWdpb24pCiB7Ci0gICAgaWYgKG1fYm91bmRzLmlzRW1wdHkoKSkKKyAgICBpZiAoaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlZ2lvbi5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRz
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhcGUgc3VidHJhY3RlZFNoYXBlID0gU2hhcGU6
OnN1YnRyYWN0U2hhcGVzKG1fc2hhcGUsIHJlZ2lvbi5tX3NoYXBlKTsKLQotICAgIG1fc2hhcGUu
c3dhcChzdWJ0cmFjdGVkU2hhcGUpOwotICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsK
KyAgICBzZXRTaGFwZShTaGFwZTo6c3VidHJhY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDog
bV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91
bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYgb2Zmc2V0
KQogewogICAgIG1fYm91bmRzLm1vdmUob2Zmc2V0KTsKLSAgICBtX3NoYXBlLnRyYW5zbGF0ZShv
ZmZzZXQpOworICAgIGlmIChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT50cmFuc2xhdGUob2Zm
c2V0KTsKIH0KIAordm9pZCBSZWdpb246OnNldFNoYXBlKFNoYXBlJiYgc2hhcGUpCit7CisgICAg
bV9ib3VuZHMgPSBzaGFwZS5ib3VuZHMoKTsKKworICAgIGlmIChzaGFwZS5pc1JlY3QoKSkgewor
ICAgICAgICBtX3NoYXBlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghbV9zaGFwZSkKKyAgICAgICAgbV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+
KFdURk1vdmUoc2hhcGUpKTsKKyAgICBlbHNlCisgICAgICAgICptX3NoYXBlID0gV1RGTW92ZShz
aGFwZSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw4IEBACiAjZGVmaW5lIFJlZ2lvbl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29u
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCwxMSArNDAsMTkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbigpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZ2lvbihjb25zdCBJbnRSZWN0Jik7CiAKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWdpb24oY29uc3QgUmVnaW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKFJl
Z2lvbiYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIH5SZWdpb24oKTsKKworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZ2lvbiYgb3BlcmF0b3I9KGNvbnN0IFJlZ2lvbiYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZ2lvbiYgb3BlcmF0b3I9KFJlZ2lvbiYmKTsKKwogICAgIEludFJlY3QgYm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2JvdW5kcy5pc0VtcHR5KCk7IH0KLSAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcGUuaXNSZWN0KCk7IH0KKyAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3NoYXBlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4gcmVjdHMo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHMoKSBj
b25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5pdGUoY29uc3QgUmVnaW9uJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnRlcnNlY3QoY29uc3QgUmVnaW9uJik7CkBAIC01OCw0
OCArNjgsMzEgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgcmVn
aW9uIGludGVyc2VjdHMgYW55IHBhcnQgb2YgdGhpcyByZWdpb24uCiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFJlZ2lvbiYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdW5zaWduZWQgdG90YWxBcmVhKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdWlu
dDY0X3QgdG90YWxBcmVhKCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBncmlkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcGUuZ3JpZFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGdyaWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFwZSA/IG1fc2hhcGUtPmdyaWRTaXplKCkgOiAwOyB9CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuaXNWYWxpZCgpOyB9CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWdpb24+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgLy8gRklYTUU6IFJlbW92ZSBsZWdhY3kgZGVjb2RlLgorICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgUmVnaW9uJik7CiAKLSAg
ICAvLyBUaGlzIGlzIGludGVybmFsIHRvIFJlZ2lvbiwgYnV0IGV4cG9zZWQganVzdCBmb3IgZW5j
b2RpbmcuCi0gICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGVuY29kZSBX
ZWJDb3JlIGNsYXNzZXMuCitwcml2YXRlOgogICAgIHN0cnVjdCBTcGFuIHsKLSAgICAgICAgU3Bh
bigpCi0gICAgICAgICAgICA6IHkoMCkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFNwYW4oaW50IHksIHNpemVfdCBzZWdtZW50
SW5kZXgpCi0gICAgICAgICAgICA6IHkoeSkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KHNl
Z21lbnRJbmRleCkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIGludCB5IHsgMCB9Owor
ICAgICAgICBzaXplX3Qgc2VnbWVudEluZGV4IHsgMCB9OwogCi0gICAgICAgIGludCB5OwotICAg
ICAgICBzaXplX3Qgc2VnbWVudEluZGV4OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAK
LSAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4KLSAgICBjb25zdCBWZWN0b3I8aW50
LCAzMj4mIHNoYXBlU2VnbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLnNlZ21lbnRzKCk7
IH0KLSAgICBjb25zdCBWZWN0b3I8U3BhbiwgMTY+JiBzaGFwZVNwYW5zKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFwZS5zcGFucygpOyB9Ci0KLSAgICB2b2lkIHNldFNoYXBlU2VnbWVudHMoY29uc3Qg
VmVjdG9yPGludD4mIHNlZ21lbnRzKSB7IG1fc2hhcGUuc2V0U2VnbWVudHMoc2VnbWVudHMpOyB9
Ci0gICAgdm9pZCBzZXRTaGFwZVNwYW5zKGNvbnN0IFZlY3RvcjxTcGFuPiYgc3BhbnMpIHsgbV9z
aGFwZS5zZXRTcGFucyhzcGFucyk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJv
dW5kc0Zyb21TaGFwZSgpOwotCi1wcml2YXRlOgotCiAgICAgY2xhc3MgU2hhcGUgewogICAgIHB1
YmxpYzoKLSAgICAgICAgU2hhcGUoKTsKKyAgICAgICAgU2hhcGUoKSA9IGRlZmF1bHQ7CiAgICAg
ICAgIFNoYXBlKGNvbnN0IEludFJlY3QmKTsKIAogICAgICAgICBJbnRSZWN0IGJvdW5kcygpIGNv
bnN0OwpAQCAtMTIwLDIyICsxMTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIFNoYXBl
IHN1YnRyYWN0U2hhcGVzKGNvbnN0IFNoYXBlJiBzaGFwZTEsIGNvbnN0IFNoYXBlJiBzaGFwZTIp
OwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEludFNpemUm
KTsKLSAgICAgICAgdm9pZCBzd2FwKFNoYXBlJik7CiAKICAgICAgICAgc3RydWN0IENvbXBhcmVD
b250YWluc09wZXJhdGlvbjsKICAgICAgICAgc3RydWN0IENvbXBhcmVJbnRlcnNlY3RzT3BlcmF0
aW9uOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmVPcGVyYXRpb24+CiAgICAg
ICAgIHN0YXRpYyBib29sIGNvbXBhcmVTaGFwZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29uc3Qg
U2hhcGUmIHNoYXBlMik7Ci0gICAgICAgIAotICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
VmFsaWQoKSBjb25zdDsKLQotICAgICAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4K
LSAgICAgICAgY29uc3QgVmVjdG9yPGludCwgMzI+JiBzZWdtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fc2VnbWVudHM7IH0KLSAgICAgICAgY29uc3QgVmVjdG9yPFNwYW4sIDE2PiYgc3BhbnMoKSBj
b25zdCB7IHJldHVybiBtX3NwYW5zOyB9CiAKLSAgICAgICAgdm9pZCBzZXRTZWdtZW50cyhjb25z
dCBWZWN0b3I8aW50PiYgc2VnbWVudHMpIHsgbV9zZWdtZW50cyA9IHNlZ21lbnRzOyB9Ci0gICAg
ICAgIHZvaWQgc2V0U3BhbnMoY29uc3QgVmVjdG9yPFNwYW4+JiBzcGFucykgeyBtX3NwYW5zID0g
c3BhbnM7IH0KKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8U2hhcGU+IGRlY29kZShEZWNvZGVyJik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAg
IHZvaWQgZHVtcCgpIGNvbnN0OwpAQCAtMTYyLDEyICsxNDgsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNoYXBlJik7CiAg
ICAgfTsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gY29weVNoYXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFwZSA/IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KCptX3NoYXBlKSA6IG51bGxw
dHI7IH0KKyAgICB2b2lkIHNldFNoYXBlKFNoYXBlJiYpOworCiAgICAgSW50UmVjdCBtX2JvdW5k
czsKLSAgICBTaGFwZSBtX3NoYXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gbV9zaGFw
ZTsKIAogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaW9uJiwgY29uc3QgUmVn
aW9uJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNo
YXBlJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTcGFuJiwgY29uc3QgU3Bh
biYpOworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgU3BhbiYsIGNvbnN0IFNwYW4m
KTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChjb25zdCBSZWdpb24mIGEs
IGNvbnN0IFJlZ2lvbiYgYikKQEAgLTE3Nyw3ICsxNjcsNyBAQCBzdGF0aWMgaW5saW5lIFJlZ2lv
biBpbnRlcnNlY3QoY29uc3QgUmVnCiAKICAgICByZXR1cm4gcmVzdWx0OwogfQotICAgIAorCiBz
dGF0aWMgaW5saW5lIFJlZ2lvbiBzdWJ0cmFjdChjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lv
biYgYikKIHsKICAgICBSZWdpb24gcmVzdWx0KGEpOwpAQCAtMTk2LDcgKzE4Niw3IEBAIHN0YXRp
YyBpbmxpbmUgUmVnaW9uIHRyYW5zbGF0ZShjb25zdCBSZWcKIAogaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lvbiYgYikKIHsKLSAgICByZXR1cm4gYS5t
X2JvdW5kcyA9PSBiLm1fYm91bmRzICYmIGEubV9zaGFwZSA9PSBiLm1fc2hhcGU7CisgICAgcmV0
dXJuIGEubV9ib3VuZHMgPT0gYi5tX2JvdW5kcyAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGEu
bV9zaGFwZSwgYi5tX3NoYXBlKTsKIH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVn
aW9uJiBhLCBjb25zdCBSZWdpb24mIGIpCiB7CkBAIC0yMTIsMTEgKzIwMiwxMDggQEAgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpb246OlNwYQogewogICAgIHJldHVybiBhLnkgPT0g
Yi55ICYmIGEuc2VnbWVudEluZGV4ID09IGIuc2VnbWVudEluZGV4OwogfQorCiBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lvbjo6U3BhbiYgYSwgY29uc3QgUmVnaW9uOjpTcGFuJiBi
KQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIFJlZ2lvbjo6U3Bhbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCB5IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzZWdtZW50SW5kZXgpOwor
fQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBSZWdp
b246OlNwYW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPGludD4g
eTsKKyAgICBkZWNvZGVyID4+IHk7CisgICAgaWYgKCF5KQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNlZ21lbnRJbmRleDsKKyAgICBkZWNvZGVyID4+IHNl
Z21lbnRJbmRleDsKKyAgICBpZiAoIXNlZ21lbnRJbmRleCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiB7IHsgKnksICpzZWdtZW50SW5kZXggfSB9OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBSZWdpb246OlNoYXBlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fc2VnbWVudHM7CisgICAgZW5jb2RlciA8PCBt
X3NwYW5zOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVnaW9uOjpT
aGFwZT4gUmVnaW9uOjpTaGFwZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0
aW9uYWw8VmVjdG9yPGludD4+IHNlZ21lbnRzOworICAgIGRlY29kZXIgPj4gc2VnbWVudHM7Cisg
ICAgaWYgKCFzZWdtZW50cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9w
dGlvbmFsPFZlY3RvcjxSZWdpb246OlNwYW4+PiBzcGFuczsKKyAgICBkZWNvZGVyID4+IHNwYW5z
OworICAgIGlmICghc3BhbnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBT
aGFwZSBzaGFwZTsKKyAgICBzaGFwZS5tX3NlZ21lbnRzID0gV1RGTW92ZSgqc2VnbWVudHMpOwor
ICAgIHNoYXBlLm1fc3BhbnMgPSBXVEZNb3ZlKCpzcGFucyk7CisKKyAgICByZXR1cm4geyBzaGFw
ZSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBSZWdpb246OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9ib3VuZHM7CisgICAg
Ym9vbCBoYXNTaGFwZSA9ICEhbV9zaGFwZTsKKyAgICBlbmNvZGVyIDw8IGhhc1NoYXBlOworICAg
IGlmIChoYXNTaGFwZSkKKyAgICAgICAgZW5jb2RlciA8PCAqbV9zaGFwZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZ2lvbj4gUmVnaW9uOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxJbnRSZWN0PiBib3VuZHM7CisgICAgZGVjb2Rl
ciA+PiBib3VuZHM7CisgICAgaWYgKCFib3VuZHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBPcHRpb25hbDxib29sPiBoYXNTaGFwZTsKKyAgICBkZWNvZGVyID4+IGhhc1No
YXBlOworICAgIGlmICghaGFzU2hhcGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBSZWdpb24gcmVnaW9uID0geyAqYm91bmRzIH07CisKKyAgICBpZiAoKmhhc1NoYXBlKSB7
CisgICAgICAgIE9wdGlvbmFsPFNoYXBlPiBzaGFwZTsKKyAgICAgICAgZGVjb2RlciA+PiBzaGFw
ZTsKKyAgICAgICAgaWYgKCFzaGFwZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHJlZ2lvbi5tX3NoYXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTaGFwZT4oV1RGTW92
ZSgqc2hhcGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyByZWdpb24gfTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK2Jvb2wgUmVnaW9uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
UmVnaW9uJiByZWdpb24pCit7CisgICAgT3B0aW9uYWw8UmVnaW9uPiBkZWNvZGVkUmVnaW9uOwor
ICAgIGRlY29kZXIgPj4gZGVjb2RlZFJlZ2lvbjsKKyAgICBpZiAoIWRlY29kZWRSZWdpb24pCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZWdpb24gPSBXVEZNb3ZlKCpkZWNvZGVkUmVnaW9u
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gUmVnaW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCShyZXZpc2lv
biAyNDI5OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDcgKzMzNSw3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFVzaW5nT3ZlcmwKICAgICB9CiAKICAgICBub25P
dmVybGFwUmVnaW9uLnRyYW5zbGF0ZShvcHRpb25zLm9mZnNldCk7Ci0gICAgVmVjdG9yPEludFJl
Y3Q+IHJlY3RzID0gbm9uT3ZlcmxhcFJlZ2lvbi5yZWN0cygpOworICAgIGF1dG8gcmVjdHMgPSBu
b25PdmVybGFwUmVnaW9uLnJlY3RzKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykg
ewogICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhvcHRpb25zLnRleHR1cmVNYXBwZXIuY2xp
cEJvdW5kcygpKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE5LTAzLTE0
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBS
ZWdpb24gZm9yIHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2lt
b24gRnJhc2VyLgorCisgICAgICAgICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxFdmVu
dFRyYWNraW5nUmVnaW9ucz46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
UmVnaW9uOjpTcGFuPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxSZWdpb246OlNwYW4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1
bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmg6CisKIDIwMTktMDMtMTQgIFBlciBBcm5lIFZvbGxhbiAgPHB2
b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFdlYktpdCBjcmFzaGVzIHdoZW4gb3Bl
bmluZyBwYWdlcyBkb2N1bWVudHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3
LDggKzM2Nyw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KIAog
Ym9vbCBBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIEV2ZW50VHJhY2tpbmdSZWdpb25zJiBldmVudFRyYWNraW5nUmVnaW9ucykKIHsK
LSAgICBSZWdpb24gYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb247Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbikpCisgICAgT3B0aW9uYWw8UmVnaW9u
PiBhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGFzeW5jaHJvbm91
c0Rpc3BhdGNoUmVnaW9uOworICAgIGlmICghYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIYXNoTWFwPFN0cmluZywgUmVnaW9uPiBldmVudFNw
ZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnM7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpKQpAQCAtMzc4LDcgKzM3
OSw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRvdWNoQWN0aW9uRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgotICAgIGV2ZW50VHJhY2tpbmdSZWdpb25zLmFzeW5jaHJvbm91c0Rpc3BhdGNoUmVn
aW9uID0gV1RGTW92ZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbik7CisgICAgZXZlbnRUcmFj
a2luZ1JlZ2lvbnMuYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24gPSBXVEZNb3ZlKCphc3luY2hy
b25vdXNEaXNwYXRjaFJlZ2lvbik7CiAgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVj
aWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb25zID0gV1RGTW92ZShldmVudFNwZWNpZmljU3lu
Y2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpOwogI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKICAg
ICBldmVudFRyYWNraW5nUmVnaW9ucy50b3VjaEFjdGlvbkRhdGEgPSBXVEZNb3ZlKHRvdWNoQWN0
aW9uRGF0YSk7CkBAIC05MDIsNjYgKzkwMyw2IEBAIE9wdGlvbmFsPFJlY2VudFNlYXJjaD4gQXJn
dW1lbnRDb2RlcjxSZWMKICAgICByZXR1cm4ge3sgV1RGTW92ZSgqc3RyaW5nKSwgV1RGTW92ZSgq
dGltZSkgfX07CiB9CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVnaW9uOjpT
cGFuPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBSZWdpb246OlNw
YW4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBkZWNvZGUoRGVjb2RlciYp
OwotfTsKLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBSZWdpb246OlNwYW4mIHNwYW4pCi17Ci0gICAgZW5jb2RlciA8PCBz
cGFuLnk7Ci0gICAgZW5jb2RlciA8PCAodWludDY0X3Qpc3Bhbi5zZWdtZW50SW5kZXg7Ci19Ci0K
LU9wdGlvbmFsPFJlZ2lvbjo6U3Bhbj4gQXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBSZWdpb246OlNwYW4gc3BhbjsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHNwYW4ueSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgCi0gICAgdWludDY0X3Qgc2VnbWVudEluZGV4OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c2VnbWVudEluZGV4KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICBz
cGFuLnNlZ21lbnRJbmRleCA9IHNlZ21lbnRJbmRleDsKLSAgICByZXR1cm4gV1RGTW92ZShzcGFu
KTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24u
c2hhcGVTZWdtZW50cygpKTsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hhcGVTcGFucygp
KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBWZWN0b3I8aW50PiBzZWdtZW50czsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHNlZ21lbnRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgVmVjdG9yPFJlZ2lvbjo6U3Bhbj4gc3BhbnM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
cGFucykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZWdpb24uc2V0U2hhcGVT
ZWdtZW50cyhzZWdtZW50cyk7Ci0gICAgcmVnaW9uLnNldFNoYXBlU3BhbnMoc3BhbnMpOwotICAg
IHJlZ2lvbi51cGRhdGVCb3VuZHNGcm9tU2hhcGUoKTsKLSAgICAKLSAgICBpZiAoIXJlZ2lvbi5p
c1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1PcHRpb25hbDxSZWdpb24+IEFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgUmVnaW9uIHJlZ2lvbjsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVy
LCByZWdpb24pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHJl
Z2lvbjsKLX0KLQogdm9pZCBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBMZW5ndGgmIGxlbmd0aCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVy
PExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBsZW5ndGgpOwpAQCAtOTcyLDcgKzkxMyw2IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoRGVjb2QKICAgICByZXR1cm4gU2ltcGxl
QXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgbGVuZ3RoKTsKIH0KIAotCiB2
b2lkIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYgdmlld3BvcnRBdHRyaWJ1dGVzKQogewog
ICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKGVuY29k
ZXIsIHZpZXdwb3J0QXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwx
MiArMzI0LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAg
IHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZWdpb24+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6UmVnaW9uJik7Ci0gICAgc3Rh
dGljIE9wdGlvbmFsPFdlYkNvcmU6OlJlZ2lvbj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7CiAgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgmKTsKICAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okxlbmd0aCYpOwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3Jl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdT
dG9yZTo6ZHJhd0luQ29udAogICAgIC8vIE90aGVyd2lzZSwgcmVwYWludCB0aGUgZW50aXJlIGJv
dW5kaW5nIGJveCBvZiB0aGUgZGlydHkgcmVnaW9uLgogICAgIFdlYkNvcmU6OkludFJlY3QgZGly
dHlCb3VuZHMgPSBtX2RpcnR5UmVnaW9uLmJvdW5kcygpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+IGRpcnR5UmVjdHMgPSBtX2RpcnR5UmVnaW9uLnJlY3RzKCk7CisgICAgYXV0byBk
aXJ0eVJlY3RzID0gbV9kaXJ0eVJlZ2lvbi5yZWN0cygpOwogICAgIGlmIChkaXJ0eVJlY3RzLnNp
emUoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQg
fHwgbV9kaXJ0eVJlZ2lvbi50b3RhbEFyZWEoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6
d2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCAqIGRpcnR5Qm91bmRzLndpZHRoKCkgKiBkaXJ0
eUJvdW5kcy5oZWlnaHQoKSkgewogICAgICAgICBkaXJ0eVJlY3RzLmNsZWFyKCk7CiAgICAgICAg
IGRpcnR5UmVjdHMuYXBwZW5kKGRpcnR5Qm91bmRzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubW0JKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTE1LDEwICs1MTUsMTEgQEAgYm9vbCBSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbjo6TGF5ZXJQcgogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0V2ZW50UmVnaW9u
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGhhc0V2ZW50UmVnaW9u
KSB7Ci0gICAgICAgICAgICBhdXRvIGV2ZW50UmVnaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJD
b3JlOjpSZWdpb24+KCk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpldmVudFJl
Z2lvbikpCisgICAgICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpSZWdpb24+IGV2ZW50UmVnaW9u
OworICAgICAgICAgICAgZGVjb2RlciA+PiBldmVudFJlZ2lvbjsKKyAgICAgICAgICAgIGlmICgh
ZXZlbnRSZWdpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
cmVzdWx0LmV2ZW50UmVnaW9uID0gV1RGTW92ZShldmVudFJlZ2lvbik7CisgICAgICAgICAgICBy
ZXN1bHQuZXZlbnRSZWdpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lvbj4oV1RGTW92ZSgqZXZl
bnRSZWdpb24pKTsKICAgICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364793</attachid>
            <date>2019-03-15 07:00:54 -0700</date>
            <delta_ts>2019-03-15 07:23:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize-11.patch</filename>
            <type>text/plain</type>
            <size>27716</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgIEluc3RydW1lbnRhdGlvbiBzaG93cyB2YXN0IG1ham9yaXR5IG9mIFJlZ2lv
biBvYmplY3RzIGNvbnNpc3Qgb2YgYSBzaW5nbGUgcmVjdGFuZ2xlLiBIb3dldmVyIGl0IGFsd2F5
cyBhbGxvY2F0ZXMKKyAgICAgICAgdGhlIGxhcmdlIFNoYXBlIGRhdGEgc3RydWN0dXJlLiBUaGlz
IG1ha2VzIGl0IHVuc3VpdGFibGUgdG8gdXNlIGFzIGEgbWVtYmVyIGluIGFueSBwb3B1bGFyIG9i
amVjdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBvcHRpbWl6ZXMgdGhlIHNpbmdsZSByZWN0YW5n
bGUgY2FzZSBieSB1c2luZyBvbmx5IHRoZSBib3VuZHMgcmVjdGFuZ2xlIHRvIGRlc2NyaWJlIGl0
LgorICAgICAgICBTaGFwZSBpcyBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGlzIG1ha2VzIGl0IHNh
ZmUgdG8gdXNlIFJlZ2lvbiBhcyBhIGRhdGEgbWVtYmVyIHdoZXJlIGEgcmVjdGFuZ2xlIGlzIHRo
ZSBjb21tb24gY2FzZS4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBtb2Rlcm5pemVzIFJlZ2lv
biBlbmNvZGluZy9kZWNvZGluZyBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6UmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6flJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaW9uOjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6
U2hhcGU6OlNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNw
YW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dW5p
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzdWJ0cmFjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3dhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbm93IHVudXNlZCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
Ojppc1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpncmlkU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmNvcHlTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkZWNvZGUpOgor
CisgICAgICAgIFRoaXMgaXMgbm93IHBhcnQgb2YgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6
UmVnaW9uOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6U3Bhbjo6U3Bhbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNoYXBl
U2VnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzaGFw
ZVNwYW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNoYXBl
U3BhbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2VnbWVu
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3Bh
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U2VnbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U3BhbnMpOiBEZWxldGVkLgorCisgICAgICAgIE5vIG5lZWQgdG8gZXhwb3NlIHRoZXNlIGZvciBl
bmNvZGluZyBhbnltb3JlLgorCiAyMDE5LTAzLTE1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIGEgd2F5IHRvIGNhcHR1
cmUgYSBzY3JlZW5zaG90IG9mIGEgbm9kZSBmcm9tIHdpdGhpbiB0aGUgcGFnZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCShyZXZpc2lvbiAyNDI5
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxOSArNDIsNTQgQEAgUmVnaW9uOjpSZWdpb24oKQogCiBSZWdpb246
OlJlZ2lvbihjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIDogbV9ib3VuZHMocmVjdCkKLSAgICAs
IG1fc2hhcGUocmVjdCkKIHsKIH0KIAotVmVjdG9yPEludFJlY3Q+IFJlZ2lvbjo6cmVjdHMoKSBj
b25zdAorUmVnaW9uOjpSZWdpb24oY29uc3QgUmVnaW9uJiBvdGhlcikKKyAgICA6IG1fYm91bmRz
KG90aGVyLm1fYm91bmRzKQorICAgICwgbV9zaGFwZShvdGhlci5jb3B5U2hhcGUoKSkKIHsKLSAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Cit9CisKK1JlZ2lvbjo6UmVnaW9uKFJlZ2lvbiYmIG90
aGVyKQorICAgIDogbV9ib3VuZHMoV1RGTW92ZShvdGhlci5tX2JvdW5kcykpCisgICAgLCBtX3No
YXBlKFdURk1vdmUob3RoZXIubV9zaGFwZSkpCit7Cit9CisKK1JlZ2lvbjo6flJlZ2lvbigpCit7
Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRvcj0oY29uc3QgUmVnaW9uJiBvdGhlcikKK3sK
KyAgICBtX2JvdW5kcyA9IG90aGVyLm1fYm91bmRzOworICAgIG1fc2hhcGUgPSBvdGhlci5jb3B5
U2hhcGUoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRv
cj0oUmVnaW9uJiYgb3RoZXIpCit7CisgICAgbV9ib3VuZHMgPSBXVEZNb3ZlKG90aGVyLm1fYm91
bmRzKTsKKyAgICBtX3NoYXBlID0gV1RGTW92ZShvdGhlci5tX3NoYXBlKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1ZlY3RvcjxJbnRSZWN0LCAxPiBSZWdpb246OnJlY3RzKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHM7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRl
cmF0b3Igc3BhbiA9IG1fc2hhcGUuc3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19l
bmQoKTsgc3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAo
IW1fc2hhcGUpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZWN0cy51bmNoZWNrZWRBcHBlbmQobV9ib3VuZHMpOworICAgICAgICByZXR1cm4gcmVjdHM7
CisgICAgfQorCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLT5z
cGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19lbmQoKTsgc3BhbiAhPSBlbmQgJiYg
c3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAgaW50IHkgPSBzcGFuLT55OwogICAg
ICAgICBpbnQgaGVpZ2h0ID0gKHNwYW4gKyAxKS0+eSAtIHk7CiAKLSAgICAgICAgZm9yIChTaGFw
ZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNlZ21lbnRzX2JlZ2luKHNwYW4p
LCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYgc2Vn
bWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAgICAgZm9yIChTaGFwZTo6U2Vn
bWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50c19iZWdpbihzcGFuKSwgZW5k
ID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50
ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAgICAgaW50IHggPSAqc2VnbWVu
dDsKICAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKIApAQCAtNzAs
NyArMTA1LDEwIEBAIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBSZWdpb24mIHJlZ2kKICAg
ICBpZiAoIW1fYm91bmRzLmNvbnRhaW5zKHJlZ2lvbi5tX2JvdW5kcykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBTaGFwZTo6Y29tcGFyZVNoYXBlczxTaGFwZTo6Q29tcGFy
ZUNvbnRhaW5zT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFt
X3NoYXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBTaGFwZTo6Y29tcGFy
ZVNoYXBlczxTaGFwZTo6Q29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uPigqbV9zaGFwZSwgcmVnaW9u
Lm1fc2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiBTaGFwZShyZWdpb24ubV9ib3VuZHMpKTsKIH0K
IAogYm9vbCBSZWdpb246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAg
LTc4LDcgKzExNiwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFpbnMoY29uc3QgSW50UG9pbnQmIHBv
CiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGZvciAoU2hhcGU6OlNwYW5JdGVyYXRvciBzcGFuID0gbV9zaGFwZS5zcGFuc19i
ZWdpbigpLCBlbmQgPSBtX3NoYXBlLnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFuICsg
MSAhPSBlbmQ7ICsrc3BhbikgeworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0b3Igc3BhbiA9IG1fc2hhcGUtPnNwYW5z
X2JlZ2luKCksIGVuZCA9IG1fc2hhcGUtPnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFu
ICsgMSAhPSBlbmQ7ICsrc3BhbikgewogICAgICAgICBpbnQgeSA9IHNwYW4tPnk7CiAgICAgICAg
IGludCBtYXhZID0gKHNwYW4gKyAxKS0+eTsKIApAQCAtODcsNyArMTI4LDcgQEAgYm9vbCBSZWdp
b246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwbwogICAgICAgICBpZiAobWF4WSA8PSBwb2lu
dC55KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBmb3IgKFNoYXBlOjpTZWdt
ZW50SXRlcmF0b3Igc2VnbWVudCA9IG1fc2hhcGUuc2VnbWVudHNfYmVnaW4oc3BhbiksIGVuZCA9
IG1fc2hhcGUuc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsg
MSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgeworICAgICAgICBmb3IgKFNoYXBlOjpTZWdtZW50SXRl
cmF0b3Igc2VnbWVudCA9IG1fc2hhcGUtPnNlZ21lbnRzX2JlZ2luKHNwYW4pLCBlbmQgPSBtX3No
YXBlLT5zZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5kICYmIHNlZ21lbnQgKyAxICE9
IGVuZDsgc2VnbWVudCArPSAyKSB7CiAgICAgICAgICAgICBpbnQgeCA9ICpzZWdtZW50OwogICAg
ICAgICAgICAgaW50IG1heFggPSAqKHNlZ21lbnQgKyAxKTsKIApAQCAtMTA2LDE5ICsxNDcsMTgg
QEAgYm9vbCBSZWdpb246OmludGVyc2VjdHMoY29uc3QgUmVnaW9uJiByZQogICAgIGlmICghbV9i
b3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNl
Y3RzT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFtX3NoYXBl
ICYmICFyZWdpb24ubV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
U2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uPiht
X3NoYXBlID8gKm1fc2hhcGUgOiBtX2JvdW5kcywgcmVnaW9uLm1fc2hhcGUgPyAqcmVnaW9uLm1f
c2hhcGUgOiByZWdpb24ubV9ib3VuZHMpOwogfQogCi11bnNpZ25lZCBSZWdpb246OnRvdGFsQXJl
YSgpIGNvbnN0Cit1aW50NjRfdCBSZWdpb246OnRvdGFsQXJlYSgpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEludFJlY3Q+IHJlY3RzID0gdGhpcy0+cmVjdHMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IHJl
Y3RzLnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b3RhbEFyZWEgPSAwOworICAgIHVpbnQ2NF90IHRv
dGFsQXJlYSA9IDA7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBy
ZWN0cygpKQogICAgICAgICB0b3RhbEFyZWEgKz0gKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0
KCkpOwotICAgIH0KIAogICAgIHJldHVybiB0b3RhbEFyZWE7CiB9CkBAIC0yMjEsMjEgKzI2MSwx
NSBAQCBzdHJ1Y3QgUmVnaW9uOjpTaGFwZTo6Q29tcGFyZUludGVyc2VjdHNPCiAgICAgaW5saW5l
IHN0YXRpYyBib29sIGFPdmVybGFwc0IoYm9vbCYgcmVzdWx0KSB7IHJlc3VsdCA9IHRydWU7IHJl
dHVybiB0cnVlOyB9CiB9OwogCi1SZWdpb246OlNoYXBlOjpTaGFwZSgpCi17Ci19Ci0KIFJlZ2lv
bjo6U2hhcGU6OlNoYXBlKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBtX3NlZ21lbnRzKHsg
cmVjdC54KCksIHJlY3QubWF4WCgpIH0pCisgICAgLCBtX3NwYW5zKHsgeyByZWN0LnkoKSwgMCB9
LCB7IHJlY3QubWF4WSgpLCAyIH0gfSkKIHsKLSAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKLSAg
ICBhcHBlbmRTZWdtZW50KHJlY3QueCgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgp
KTsKLSAgICBhcHBlbmRTcGFuKHJlY3QubWF4WSgpKTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBl
OjphcHBlbmRTcGFuKGludCB5KQogewotICAgIG1fc3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdt
ZW50cy5zaXplKCkpKTsKKyAgICBtX3NwYW5zLmFwcGVuZCh7IHksIG1fc2VnbWVudHMuc2l6ZSgp
IH0pOwogfQogCiBib29sIFJlZ2lvbjo6U2hhcGU6OmNhbkNvYWxlc2NlKFNlZ21lbnRJdGVyYXRv
ciBiZWdpbiwgU2VnbWVudEl0ZXJhdG9yIGVuZCkKQEAgLTMzMSwyNyArMzY1LDYgQEAgdm9pZCBS
ZWdpb246OlNoYXBlOjpkdW1wKCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFJlZ2lvbjo6U2hh
cGU6OmlzVmFsaWQoKSBjb25zdAotewotICAgIGZvciAoYXV0byBzcGFuID0gc3BhbnNfYmVnaW4o
KSwgZW5kID0gc3BhbnNfZW5kKCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytz
cGFuKSB7Ci0gICAgICAgIGludCB5ID0gc3Bhbi0+eTsKLSAgICAgICAgaW50IGhlaWdodCA9IChz
cGFuICsgMSktPnkgLSB5OwotICAgICAgICAKLSAgICAgICAgaWYgKGhlaWdodCA8IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChhdXRvIHNlZ21lbnQgPSBzZWdt
ZW50c19iZWdpbihzcGFuKSwgZW5kID0gc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVu
ZCAmJiBzZWdtZW50ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewotICAgICAgICAgICAgaW50
IHggPSAqc2VnbWVudDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0g
eDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogSW50UmVjdCBSZWdpb246OlNoYXBlOjpib3VuZHMoKSBjb25zdAogewogICAgIGlmIChp
c0VtcHR5KCkpCkBAIC0zOTcsMTIgKzQxMCw2IEBAIHZvaWQgUmVnaW9uOjpTaGFwZTo6dHJhbnNs
YXRlKGNvbnN0IEludFMKICAgICAgICAgbV9zcGFuc1tpXS55ICs9IG9mZnNldC5oZWlnaHQoKTsK
IH0KIAotdm9pZCBSZWdpb246OlNoYXBlOjpzd2FwKFNoYXBlJiBvdGhlcikKLXsKLSAgICBtX3Nl
Z21lbnRzLnN3YXAob3RoZXIubV9zZWdtZW50cyk7Ci0gICAgbV9zcGFucy5zd2FwKG90aGVyLm1f
c3BhbnMpOwotfQotCiBlbnVtIHsKICAgICBTaGFwZTEsCiAgICAgU2hhcGUyLApAQCAtNTY3LDcx
ICs1NzQsODEgQEAgdm9pZCBSZWdpb246OmR1bXAoKSBjb25zdAogewogICAgIHByaW50ZigiQm91
bmRzOiAoJWQsICVkLCAlZCwgJWQpXG4iLAogICAgICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91
bmRzLnkoKSwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fc2hh
cGUuZHVtcCgpOworICAgIGlmIChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT5kdW1wKCk7CiB9
CiAjZW5kaWYKIAotdm9pZCBSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpCi17Ci0gICAg
bV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOwotfQotCiB2b2lkIFJlZ2lvbjo6aW50ZXJzZWN0
KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQogewogICAgIGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91
bmRzKSkgewotICAgICAgICBtX3NoYXBlID0gU2hhcGUoKTsKKyAgICAgICAgbV9zaGFwZSA9IG51
bGxwdHI7CiAgICAgICAgIG1fYm91bmRzID0gSW50UmVjdCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGlmICghbV9zaGFwZSAmJiAhcmVnaW9uLm1fc2hhcGUpIHsKKyAgICAgICAgbV9i
b3VuZHMgPSBpbnRlcnNlY3Rpb24obV9ib3VuZHMsIHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBTaGFwZSBpbnRlcnNlY3RlZFNoYXBlID0gU2hhcGU6Omlu
dGVyc2VjdFNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3
YXAoaW50ZXJzZWN0ZWRTaGFwZSk7Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOwor
ICAgIHNldFNoYXBlKFNoYXBlOjppbnRlcnNlY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDog
bV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91
bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp1bml0ZShjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsK
ICAgICBpZiAocmVnaW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1Jl
Y3QoKSAmJiBtX2JvdW5kcy5jb250YWlucyhyZWdpb24ubV9ib3VuZHMpKQorICAgIGlmIChpc0Vt
cHR5KCkpIHsKKyAgICAgICAgbV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1f
c2hhcGUgPSByZWdpb24uY29weVNoYXBlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
aWYgKHJlZ2lvbi5pc1JlY3QoKSAmJiByZWdpb24ubV9ib3VuZHMuY29udGFpbnMobV9ib3VuZHMp
KSB7Ci0gICAgICAgIG1fc2hhcGUgPSByZWdpb24ubV9zaGFwZTsKICAgICAgICAgbV9ib3VuZHMg
PSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1fc2hhcGUgPSBudWxscHRyOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIC8vIEZJWE1FOiBXZSBtYXkgd2FudCBhbm90aGVyIHdheSB0byBj
b25zdHJ1Y3QgYSBSZWdpb24gd2l0aG91dCBkb2luZyB0aGlzIHRlc3Qgd2hlbiB3ZSBleHBlY3Qg
aXQgdG8gYmUgZmFsc2UuCi0gICAgaWYgKCFpc1JlY3QoKSAmJiBjb250YWlucyhyZWdpb24pKQor
ICAgIGlmIChjb250YWlucyhyZWdpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFwZSB1
bml0ZWRTaGFwZSA9IFNoYXBlOjp1bmlvblNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7
Ci0KLSAgICBtX3NoYXBlLnN3YXAodW5pdGVkU2hhcGUpOwotICAgIG1fYm91bmRzLnVuaXRlKHJl
Z2lvbi5tX2JvdW5kcyk7CisgICAgc2V0U2hhcGUoU2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUg
PyAqbV9zaGFwZSA6IG1fYm91bmRzLCByZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6
IHJlZ2lvbi5tX2JvdW5kcykpOwogfQogCiB2b2lkIFJlZ2lvbjo6c3VidHJhY3QoY29uc3QgUmVn
aW9uJiByZWdpb24pCiB7Ci0gICAgaWYgKG1fYm91bmRzLmlzRW1wdHkoKSkKKyAgICBpZiAoaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlZ2lvbi5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRz
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhcGUgc3VidHJhY3RlZFNoYXBlID0gU2hhcGU6
OnN1YnRyYWN0U2hhcGVzKG1fc2hhcGUsIHJlZ2lvbi5tX3NoYXBlKTsKLQotICAgIG1fc2hhcGUu
c3dhcChzdWJ0cmFjdGVkU2hhcGUpOwotICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsK
KyAgICBzZXRTaGFwZShTaGFwZTo6c3VidHJhY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDog
bV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91
bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYgb2Zmc2V0
KQogewogICAgIG1fYm91bmRzLm1vdmUob2Zmc2V0KTsKLSAgICBtX3NoYXBlLnRyYW5zbGF0ZShv
ZmZzZXQpOworICAgIGlmIChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT50cmFuc2xhdGUob2Zm
c2V0KTsKIH0KIAordm9pZCBSZWdpb246OnNldFNoYXBlKFNoYXBlJiYgc2hhcGUpCit7CisgICAg
bV9ib3VuZHMgPSBzaGFwZS5ib3VuZHMoKTsKKworICAgIGlmIChzaGFwZS5pc1JlY3QoKSkgewor
ICAgICAgICBtX3NoYXBlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghbV9zaGFwZSkKKyAgICAgICAgbV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+
KFdURk1vdmUoc2hhcGUpKTsKKyAgICBlbHNlCisgICAgICAgICptX3NoYXBlID0gV1RGTW92ZShz
aGFwZSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw4IEBACiAjZGVmaW5lIFJlZ2lvbl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29u
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCwxMSArNDAsMTkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbigpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZ2lvbihjb25zdCBJbnRSZWN0Jik7CiAKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWdpb24oY29uc3QgUmVnaW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKFJl
Z2lvbiYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIH5SZWdpb24oKTsKKworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZ2lvbiYgb3BlcmF0b3I9KGNvbnN0IFJlZ2lvbiYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZ2lvbiYgb3BlcmF0b3I9KFJlZ2lvbiYmKTsKKwogICAgIEludFJlY3QgYm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2JvdW5kcy5pc0VtcHR5KCk7IH0KLSAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcGUuaXNSZWN0KCk7IH0KKyAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3NoYXBlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4gcmVjdHMo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHMoKSBj
b25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5pdGUoY29uc3QgUmVnaW9uJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnRlcnNlY3QoY29uc3QgUmVnaW9uJik7CkBAIC01OCw0
OCArNjgsMzEgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgcmVn
aW9uIGludGVyc2VjdHMgYW55IHBhcnQgb2YgdGhpcyByZWdpb24uCiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFJlZ2lvbiYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdW5zaWduZWQgdG90YWxBcmVhKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdWlu
dDY0X3QgdG90YWxBcmVhKCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBncmlkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcGUuZ3JpZFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGdyaWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFwZSA/IG1fc2hhcGUtPmdyaWRTaXplKCkgOiAwOyB9CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuaXNWYWxpZCgpOyB9CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWdpb24+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgLy8gRklYTUU6IFJlbW92ZSBsZWdhY3kgZGVjb2RlLgorICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgUmVnaW9uJik7CiAKLSAg
ICAvLyBUaGlzIGlzIGludGVybmFsIHRvIFJlZ2lvbiwgYnV0IGV4cG9zZWQganVzdCBmb3IgZW5j
b2RpbmcuCi0gICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGVuY29kZSBX
ZWJDb3JlIGNsYXNzZXMuCitwcml2YXRlOgogICAgIHN0cnVjdCBTcGFuIHsKLSAgICAgICAgU3Bh
bigpCi0gICAgICAgICAgICA6IHkoMCkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFNwYW4oaW50IHksIHNpemVfdCBzZWdtZW50
SW5kZXgpCi0gICAgICAgICAgICA6IHkoeSkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KHNl
Z21lbnRJbmRleCkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIGludCB5IHsgMCB9Owor
ICAgICAgICBzaXplX3Qgc2VnbWVudEluZGV4IHsgMCB9OwogCi0gICAgICAgIGludCB5OwotICAg
ICAgICBzaXplX3Qgc2VnbWVudEluZGV4OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAK
LSAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4KLSAgICBjb25zdCBWZWN0b3I8aW50
LCAzMj4mIHNoYXBlU2VnbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLnNlZ21lbnRzKCk7
IH0KLSAgICBjb25zdCBWZWN0b3I8U3BhbiwgMTY+JiBzaGFwZVNwYW5zKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFwZS5zcGFucygpOyB9Ci0KLSAgICB2b2lkIHNldFNoYXBlU2VnbWVudHMoY29uc3Qg
VmVjdG9yPGludD4mIHNlZ21lbnRzKSB7IG1fc2hhcGUuc2V0U2VnbWVudHMoc2VnbWVudHMpOyB9
Ci0gICAgdm9pZCBzZXRTaGFwZVNwYW5zKGNvbnN0IFZlY3RvcjxTcGFuPiYgc3BhbnMpIHsgbV9z
aGFwZS5zZXRTcGFucyhzcGFucyk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJv
dW5kc0Zyb21TaGFwZSgpOwotCi1wcml2YXRlOgotCiAgICAgY2xhc3MgU2hhcGUgewogICAgIHB1
YmxpYzoKLSAgICAgICAgU2hhcGUoKTsKKyAgICAgICAgU2hhcGUoKSA9IGRlZmF1bHQ7CiAgICAg
ICAgIFNoYXBlKGNvbnN0IEludFJlY3QmKTsKIAogICAgICAgICBJbnRSZWN0IGJvdW5kcygpIGNv
bnN0OwpAQCAtMTIwLDIyICsxMTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIFNoYXBl
IHN1YnRyYWN0U2hhcGVzKGNvbnN0IFNoYXBlJiBzaGFwZTEsIGNvbnN0IFNoYXBlJiBzaGFwZTIp
OwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEludFNpemUm
KTsKLSAgICAgICAgdm9pZCBzd2FwKFNoYXBlJik7CiAKICAgICAgICAgc3RydWN0IENvbXBhcmVD
b250YWluc09wZXJhdGlvbjsKICAgICAgICAgc3RydWN0IENvbXBhcmVJbnRlcnNlY3RzT3BlcmF0
aW9uOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmVPcGVyYXRpb24+CiAgICAg
ICAgIHN0YXRpYyBib29sIGNvbXBhcmVTaGFwZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29uc3Qg
U2hhcGUmIHNoYXBlMik7Ci0gICAgICAgIAotICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
VmFsaWQoKSBjb25zdDsKLQotICAgICAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4K
LSAgICAgICAgY29uc3QgVmVjdG9yPGludCwgMzI+JiBzZWdtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fc2VnbWVudHM7IH0KLSAgICAgICAgY29uc3QgVmVjdG9yPFNwYW4sIDE2PiYgc3BhbnMoKSBj
b25zdCB7IHJldHVybiBtX3NwYW5zOyB9CiAKLSAgICAgICAgdm9pZCBzZXRTZWdtZW50cyhjb25z
dCBWZWN0b3I8aW50PiYgc2VnbWVudHMpIHsgbV9zZWdtZW50cyA9IHNlZ21lbnRzOyB9Ci0gICAg
ICAgIHZvaWQgc2V0U3BhbnMoY29uc3QgVmVjdG9yPFNwYW4+JiBzcGFucykgeyBtX3NwYW5zID0g
c3BhbnM7IH0KKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8U2hhcGU+IGRlY29kZShEZWNvZGVyJik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAg
IHZvaWQgZHVtcCgpIGNvbnN0OwpAQCAtMTYyLDEyICsxNDgsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNoYXBlJik7CiAg
ICAgfTsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gY29weVNoYXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFwZSA/IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KCptX3NoYXBlKSA6IG51bGxw
dHI7IH0KKyAgICB2b2lkIHNldFNoYXBlKFNoYXBlJiYpOworCiAgICAgSW50UmVjdCBtX2JvdW5k
czsKLSAgICBTaGFwZSBtX3NoYXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gbV9zaGFw
ZTsKIAogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaW9uJiwgY29uc3QgUmVn
aW9uJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNo
YXBlJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTcGFuJiwgY29uc3QgU3Bh
biYpOworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgU3BhbiYsIGNvbnN0IFNwYW4m
KTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChjb25zdCBSZWdpb24mIGEs
IGNvbnN0IFJlZ2lvbiYgYikKQEAgLTE3Nyw3ICsxNjcsNyBAQCBzdGF0aWMgaW5saW5lIFJlZ2lv
biBpbnRlcnNlY3QoY29uc3QgUmVnCiAKICAgICByZXR1cm4gcmVzdWx0OwogfQotICAgIAorCiBz
dGF0aWMgaW5saW5lIFJlZ2lvbiBzdWJ0cmFjdChjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lv
biYgYikKIHsKICAgICBSZWdpb24gcmVzdWx0KGEpOwpAQCAtMTk2LDcgKzE4Niw3IEBAIHN0YXRp
YyBpbmxpbmUgUmVnaW9uIHRyYW5zbGF0ZShjb25zdCBSZWcKIAogaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lvbiYgYikKIHsKLSAgICByZXR1cm4gYS5t
X2JvdW5kcyA9PSBiLm1fYm91bmRzICYmIGEubV9zaGFwZSA9PSBiLm1fc2hhcGU7CisgICAgcmV0
dXJuIGEubV9ib3VuZHMgPT0gYi5tX2JvdW5kcyAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGEu
bV9zaGFwZSwgYi5tX3NoYXBlKTsKIH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVn
aW9uJiBhLCBjb25zdCBSZWdpb24mIGIpCiB7CkBAIC0yMTIsMTEgKzIwMiwxMDggQEAgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpb246OlNwYQogewogICAgIHJldHVybiBhLnkgPT0g
Yi55ICYmIGEuc2VnbWVudEluZGV4ID09IGIuc2VnbWVudEluZGV4OwogfQorCiBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lvbjo6U3BhbiYgYSwgY29uc3QgUmVnaW9uOjpTcGFuJiBi
KQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIFJlZ2lvbjo6U3Bhbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCB5IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzZWdtZW50SW5kZXgpOwor
fQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBSZWdp
b246OlNwYW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPGludD4g
eTsKKyAgICBkZWNvZGVyID4+IHk7CisgICAgaWYgKCF5KQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNlZ21lbnRJbmRleDsKKyAgICBkZWNvZGVyID4+IHNl
Z21lbnRJbmRleDsKKyAgICBpZiAoIXNlZ21lbnRJbmRleCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiB7IHsgKnksICpzZWdtZW50SW5kZXggfSB9OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBSZWdpb246OlNoYXBlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fc2VnbWVudHM7CisgICAgZW5jb2RlciA8PCBt
X3NwYW5zOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVnaW9uOjpT
aGFwZT4gUmVnaW9uOjpTaGFwZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0
aW9uYWw8VmVjdG9yPGludD4+IHNlZ21lbnRzOworICAgIGRlY29kZXIgPj4gc2VnbWVudHM7Cisg
ICAgaWYgKCFzZWdtZW50cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9w
dGlvbmFsPFZlY3RvcjxSZWdpb246OlNwYW4+PiBzcGFuczsKKyAgICBkZWNvZGVyID4+IHNwYW5z
OworICAgIGlmICghc3BhbnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBT
aGFwZSBzaGFwZTsKKyAgICBzaGFwZS5tX3NlZ21lbnRzID0gV1RGTW92ZSgqc2VnbWVudHMpOwor
ICAgIHNoYXBlLm1fc3BhbnMgPSBXVEZNb3ZlKCpzcGFucyk7CisKKyAgICByZXR1cm4geyBzaGFw
ZSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBSZWdpb246OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9ib3VuZHM7CisgICAg
Ym9vbCBoYXNTaGFwZSA9ICEhbV9zaGFwZTsKKyAgICBlbmNvZGVyIDw8IGhhc1NoYXBlOworICAg
IGlmIChoYXNTaGFwZSkKKyAgICAgICAgZW5jb2RlciA8PCAqbV9zaGFwZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZ2lvbj4gUmVnaW9uOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxJbnRSZWN0PiBib3VuZHM7CisgICAgZGVjb2Rl
ciA+PiBib3VuZHM7CisgICAgaWYgKCFib3VuZHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBPcHRpb25hbDxib29sPiBoYXNTaGFwZTsKKyAgICBkZWNvZGVyID4+IGhhc1No
YXBlOworICAgIGlmICghaGFzU2hhcGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBSZWdpb24gcmVnaW9uID0geyAqYm91bmRzIH07CisKKyAgICBpZiAoKmhhc1NoYXBlKSB7
CisgICAgICAgIE9wdGlvbmFsPFNoYXBlPiBzaGFwZTsKKyAgICAgICAgZGVjb2RlciA+PiBzaGFw
ZTsKKyAgICAgICAgaWYgKCFzaGFwZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHJlZ2lvbi5tX3NoYXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTaGFwZT4oV1RGTW92
ZSgqc2hhcGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyByZWdpb24gfTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK2Jvb2wgUmVnaW9uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
UmVnaW9uJiByZWdpb24pCit7CisgICAgT3B0aW9uYWw8UmVnaW9uPiBkZWNvZGVkUmVnaW9uOwor
ICAgIGRlY29kZXIgPj4gZGVjb2RlZFJlZ2lvbjsKKyAgICBpZiAoIWRlY29kZWRSZWdpb24pCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZWdpb24gPSBXVEZNb3ZlKCpkZWNvZGVkUmVnaW9u
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gUmVnaW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCShyZXZpc2lv
biAyNDI5OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDcgKzMzNSw3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFVzaW5nT3ZlcmwKICAgICB9CiAKICAgICBub25P
dmVybGFwUmVnaW9uLnRyYW5zbGF0ZShvcHRpb25zLm9mZnNldCk7Ci0gICAgVmVjdG9yPEludFJl
Y3Q+IHJlY3RzID0gbm9uT3ZlcmxhcFJlZ2lvbi5yZWN0cygpOworICAgIGF1dG8gcmVjdHMgPSBu
b25PdmVybGFwUmVnaW9uLnJlY3RzKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykg
ewogICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhvcHRpb25zLnRleHR1cmVNYXBwZXIuY2xp
cEJvdW5kcygpKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE5LTAzLTE0
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBS
ZWdpb24gZm9yIHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2lt
b24gRnJhc2VyLgorCisgICAgICAgICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxFdmVu
dFRyYWNraW5nUmVnaW9ucz46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
UmVnaW9uOjpTcGFuPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxSZWdpb246OlNwYW4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1
bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmg6CisKIDIwMTktMDMtMTQgIFBlciBBcm5lIFZvbGxhbiAgPHB2
b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFdlYktpdCBjcmFzaGVzIHdoZW4gb3Bl
bmluZyBwYWdlcyBkb2N1bWVudHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3
LDggKzM2Nyw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KIAog
Ym9vbCBBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIEV2ZW50VHJhY2tpbmdSZWdpb25zJiBldmVudFRyYWNraW5nUmVnaW9ucykKIHsK
LSAgICBSZWdpb24gYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb247Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbikpCisgICAgT3B0aW9uYWw8UmVnaW9u
PiBhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGFzeW5jaHJvbm91
c0Rpc3BhdGNoUmVnaW9uOworICAgIGlmICghYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIYXNoTWFwPFN0cmluZywgUmVnaW9uPiBldmVudFNw
ZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnM7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpKQpAQCAtMzc4LDcgKzM3
OSw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRvdWNoQWN0aW9uRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgotICAgIGV2ZW50VHJhY2tpbmdSZWdpb25zLmFzeW5jaHJvbm91c0Rpc3BhdGNoUmVn
aW9uID0gV1RGTW92ZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbik7CisgICAgZXZlbnRUcmFj
a2luZ1JlZ2lvbnMuYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24gPSBXVEZNb3ZlKCphc3luY2hy
b25vdXNEaXNwYXRjaFJlZ2lvbik7CiAgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVj
aWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb25zID0gV1RGTW92ZShldmVudFNwZWNpZmljU3lu
Y2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpOwogI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKICAg
ICBldmVudFRyYWNraW5nUmVnaW9ucy50b3VjaEFjdGlvbkRhdGEgPSBXVEZNb3ZlKHRvdWNoQWN0
aW9uRGF0YSk7CkBAIC05MDIsNjYgKzkwMyw2IEBAIE9wdGlvbmFsPFJlY2VudFNlYXJjaD4gQXJn
dW1lbnRDb2RlcjxSZWMKICAgICByZXR1cm4ge3sgV1RGTW92ZSgqc3RyaW5nKSwgV1RGTW92ZSgq
dGltZSkgfX07CiB9CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVnaW9uOjpT
cGFuPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBSZWdpb246OlNw
YW4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBkZWNvZGUoRGVjb2RlciYp
OwotfTsKLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBSZWdpb246OlNwYW4mIHNwYW4pCi17Ci0gICAgZW5jb2RlciA8PCBz
cGFuLnk7Ci0gICAgZW5jb2RlciA8PCAodWludDY0X3Qpc3Bhbi5zZWdtZW50SW5kZXg7Ci19Ci0K
LU9wdGlvbmFsPFJlZ2lvbjo6U3Bhbj4gQXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBSZWdpb246OlNwYW4gc3BhbjsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHNwYW4ueSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgCi0gICAgdWludDY0X3Qgc2VnbWVudEluZGV4OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c2VnbWVudEluZGV4KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICBz
cGFuLnNlZ21lbnRJbmRleCA9IHNlZ21lbnRJbmRleDsKLSAgICByZXR1cm4gV1RGTW92ZShzcGFu
KTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24u
c2hhcGVTZWdtZW50cygpKTsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hhcGVTcGFucygp
KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBWZWN0b3I8aW50PiBzZWdtZW50czsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHNlZ21lbnRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgVmVjdG9yPFJlZ2lvbjo6U3Bhbj4gc3BhbnM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
cGFucykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZWdpb24uc2V0U2hhcGVT
ZWdtZW50cyhzZWdtZW50cyk7Ci0gICAgcmVnaW9uLnNldFNoYXBlU3BhbnMoc3BhbnMpOwotICAg
IHJlZ2lvbi51cGRhdGVCb3VuZHNGcm9tU2hhcGUoKTsKLSAgICAKLSAgICBpZiAoIXJlZ2lvbi5p
c1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1PcHRpb25hbDxSZWdpb24+IEFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgUmVnaW9uIHJlZ2lvbjsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVy
LCByZWdpb24pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHJl
Z2lvbjsKLX0KLQogdm9pZCBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBMZW5ndGgmIGxlbmd0aCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVy
PExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBsZW5ndGgpOwpAQCAtOTcyLDcgKzkxMyw2IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoRGVjb2QKICAgICByZXR1cm4gU2ltcGxl
QXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgbGVuZ3RoKTsKIH0KIAotCiB2
b2lkIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYgdmlld3BvcnRBdHRyaWJ1dGVzKQogewog
ICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKGVuY29k
ZXIsIHZpZXdwb3J0QXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwx
MiArMzI0LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAg
IHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZWdpb24+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6UmVnaW9uJik7Ci0gICAgc3Rh
dGljIE9wdGlvbmFsPFdlYkNvcmU6OlJlZ2lvbj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7CiAgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgmKTsKICAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okxlbmd0aCYpOwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3Jl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdT
dG9yZTo6ZHJhd0luQ29udAogICAgIC8vIE90aGVyd2lzZSwgcmVwYWludCB0aGUgZW50aXJlIGJv
dW5kaW5nIGJveCBvZiB0aGUgZGlydHkgcmVnaW9uLgogICAgIFdlYkNvcmU6OkludFJlY3QgZGly
dHlCb3VuZHMgPSBtX2RpcnR5UmVnaW9uLmJvdW5kcygpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+IGRpcnR5UmVjdHMgPSBtX2RpcnR5UmVnaW9uLnJlY3RzKCk7CisgICAgYXV0byBk
aXJ0eVJlY3RzID0gbV9kaXJ0eVJlZ2lvbi5yZWN0cygpOwogICAgIGlmIChkaXJ0eVJlY3RzLnNp
emUoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQg
fHwgbV9kaXJ0eVJlZ2lvbi50b3RhbEFyZWEoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6
d2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCAqIGRpcnR5Qm91bmRzLndpZHRoKCkgKiBkaXJ0
eUJvdW5kcy5oZWlnaHQoKSkgewogICAgICAgICBkaXJ0eVJlY3RzLmNsZWFyKCk7CiAgICAgICAg
IGRpcnR5UmVjdHMuYXBwZW5kKGRpcnR5Qm91bmRzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubW0JKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTE1LDEwICs1MTUsMTEgQEAgYm9vbCBSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbjo6TGF5ZXJQcgogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0V2ZW50UmVnaW9u
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGhhc0V2ZW50UmVnaW9u
KSB7Ci0gICAgICAgICAgICBhdXRvIGV2ZW50UmVnaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJD
b3JlOjpSZWdpb24+KCk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpldmVudFJl
Z2lvbikpCisgICAgICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpSZWdpb24+IGV2ZW50UmVnaW9u
OworICAgICAgICAgICAgZGVjb2RlciA+PiBldmVudFJlZ2lvbjsKKyAgICAgICAgICAgIGlmICgh
ZXZlbnRSZWdpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
cmVzdWx0LmV2ZW50UmVnaW9uID0gV1RGTW92ZShldmVudFJlZ2lvbik7CisgICAgICAgICAgICBy
ZXN1bHQuZXZlbnRSZWdpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lvbj4oV1RGTW92ZSgqZXZl
bnRSZWdpb24pKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNyArNDc0LDcg
QEAgdm9pZCBXZWJWaWV3OjpwYWludChIREMgaGRjLCBjb25zdCBJbnRSZQogICAgICAgICBjYWly
b19kZXN0cm95KGNvbnRleHQpOwogICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFj
ZSk7CiAKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IHVucGFpbnRlZFJlY3RzID0gdW5wYWludGVk
UmVnaW9uLnJlY3RzKCk7CisgICAgICAgIGF1dG8gdW5wYWludGVkUmVjdHMgPSB1bnBhaW50ZWRS
ZWdpb24ucmVjdHMoKTsKICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogdW5wYWludGVkUmVjdHMp
CiAgICAgICAgICAgICBkcmF3UGFnZUJhY2tncm91bmQoaGRjLCBtX3BhZ2UuZ2V0KCksIHJlY3Qp
OwogICAgIH0gZWxzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364794</attachid>
            <date>2019-03-15 07:23:36 -0700</date>
            <delta_ts>2019-03-15 07:45:37 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize-12.patch</filename>
            <type>text/plain</type>
            <size>28430</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgIEluc3RydW1lbnRhdGlvbiBzaG93cyB2YXN0IG1ham9yaXR5IG9mIFJlZ2lv
biBvYmplY3RzIGNvbnNpc3Qgb2YgYSBzaW5nbGUgcmVjdGFuZ2xlLiBIb3dldmVyIGl0IGFsd2F5
cyBhbGxvY2F0ZXMKKyAgICAgICAgdGhlIGxhcmdlIFNoYXBlIGRhdGEgc3RydWN0dXJlLiBUaGlz
IG1ha2VzIGl0IHVuc3VpdGFibGUgdG8gdXNlIGFzIGEgbWVtYmVyIGluIGFueSBwb3B1bGFyIG9i
amVjdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBvcHRpbWl6ZXMgdGhlIHNpbmdsZSByZWN0YW5n
bGUgY2FzZSBieSB1c2luZyBvbmx5IHRoZSBib3VuZHMgcmVjdGFuZ2xlIHRvIGRlc2NyaWJlIGl0
LgorICAgICAgICBTaGFwZSBpcyBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGlzIG1ha2VzIGl0IHNh
ZmUgdG8gdXNlIFJlZ2lvbiBhcyBhIGRhdGEgbWVtYmVyIHdoZXJlIGEgcmVjdGFuZ2xlIGlzIHRo
ZSBjb21tb24gY2FzZS4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBtb2Rlcm5pemVzIFJlZ2lv
biBlbmNvZGluZy9kZWNvZGluZyBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6UmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6flJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaW9uOjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6
U2hhcGU6OlNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNw
YW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dW5p
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzdWJ0cmFjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3dhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbm93IHVudXNlZCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
Ojppc1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpncmlkU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmNvcHlTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkZWNvZGUpOgor
CisgICAgICAgIFRoaXMgaXMgbm93IHBhcnQgb2YgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6
UmVnaW9uOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6U3Bhbjo6U3Bhbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNoYXBl
U2VnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzaGFw
ZVNwYW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNoYXBl
U3BhbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2VnbWVu
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3Bh
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U2VnbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U3BhbnMpOiBEZWxldGVkLgorCisgICAgICAgIE5vIG5lZWQgdG8gZXhwb3NlIHRoZXNlIGZvciBl
bmNvZGluZyBhbnltb3JlLgorCiAyMDE5LTAzLTE1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIGEgd2F5IHRvIGNhcHR1
cmUgYSBzY3JlZW5zaG90IG9mIGEgbm9kZSBmcm9tIHdpdGhpbiB0aGUgcGFnZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCShyZXZpc2lvbiAyNDI5
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxOSArNDIsNTQgQEAgUmVnaW9uOjpSZWdpb24oKQogCiBSZWdpb246
OlJlZ2lvbihjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIDogbV9ib3VuZHMocmVjdCkKLSAgICAs
IG1fc2hhcGUocmVjdCkKIHsKIH0KIAotVmVjdG9yPEludFJlY3Q+IFJlZ2lvbjo6cmVjdHMoKSBj
b25zdAorUmVnaW9uOjpSZWdpb24oY29uc3QgUmVnaW9uJiBvdGhlcikKKyAgICA6IG1fYm91bmRz
KG90aGVyLm1fYm91bmRzKQorICAgICwgbV9zaGFwZShvdGhlci5jb3B5U2hhcGUoKSkKIHsKLSAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Cit9CisKK1JlZ2lvbjo6UmVnaW9uKFJlZ2lvbiYmIG90
aGVyKQorICAgIDogbV9ib3VuZHMoV1RGTW92ZShvdGhlci5tX2JvdW5kcykpCisgICAgLCBtX3No
YXBlKFdURk1vdmUob3RoZXIubV9zaGFwZSkpCit7Cit9CisKK1JlZ2lvbjo6flJlZ2lvbigpCit7
Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRvcj0oY29uc3QgUmVnaW9uJiBvdGhlcikKK3sK
KyAgICBtX2JvdW5kcyA9IG90aGVyLm1fYm91bmRzOworICAgIG1fc2hhcGUgPSBvdGhlci5jb3B5
U2hhcGUoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRv
cj0oUmVnaW9uJiYgb3RoZXIpCit7CisgICAgbV9ib3VuZHMgPSBXVEZNb3ZlKG90aGVyLm1fYm91
bmRzKTsKKyAgICBtX3NoYXBlID0gV1RGTW92ZShvdGhlci5tX3NoYXBlKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1ZlY3RvcjxJbnRSZWN0LCAxPiBSZWdpb246OnJlY3RzKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHM7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRl
cmF0b3Igc3BhbiA9IG1fc2hhcGUuc3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19l
bmQoKTsgc3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAo
IW1fc2hhcGUpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZWN0cy51bmNoZWNrZWRBcHBlbmQobV9ib3VuZHMpOworICAgICAgICByZXR1cm4gcmVjdHM7
CisgICAgfQorCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLT5z
cGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19lbmQoKTsgc3BhbiAhPSBlbmQgJiYg
c3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAgaW50IHkgPSBzcGFuLT55OwogICAg
ICAgICBpbnQgaGVpZ2h0ID0gKHNwYW4gKyAxKS0+eSAtIHk7CiAKLSAgICAgICAgZm9yIChTaGFw
ZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNlZ21lbnRzX2JlZ2luKHNwYW4p
LCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYgc2Vn
bWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAgICAgZm9yIChTaGFwZTo6U2Vn
bWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50c19iZWdpbihzcGFuKSwgZW5k
ID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50
ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAgICAgaW50IHggPSAqc2VnbWVu
dDsKICAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKIApAQCAtNzAs
NyArMTA1LDEwIEBAIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBSZWdpb24mIHJlZ2kKICAg
ICBpZiAoIW1fYm91bmRzLmNvbnRhaW5zKHJlZ2lvbi5tX2JvdW5kcykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBTaGFwZTo6Y29tcGFyZVNoYXBlczxTaGFwZTo6Q29tcGFy
ZUNvbnRhaW5zT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFt
X3NoYXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBTaGFwZTo6Y29tcGFy
ZVNoYXBlczxTaGFwZTo6Q29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uPigqbV9zaGFwZSwgcmVnaW9u
Lm1fc2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiBTaGFwZShyZWdpb24ubV9ib3VuZHMpKTsKIH0K
IAogYm9vbCBSZWdpb246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAg
LTc4LDcgKzExNiwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFpbnMoY29uc3QgSW50UG9pbnQmIHBv
CiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGZvciAoU2hhcGU6OlNwYW5JdGVyYXRvciBzcGFuID0gbV9zaGFwZS5zcGFuc19i
ZWdpbigpLCBlbmQgPSBtX3NoYXBlLnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFuICsg
MSAhPSBlbmQ7ICsrc3BhbikgeworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0b3Igc3BhbiA9IG1fc2hhcGUtPnNwYW5z
X2JlZ2luKCksIGVuZCA9IG1fc2hhcGUtPnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFu
ICsgMSAhPSBlbmQ7ICsrc3BhbikgewogICAgICAgICBpbnQgeSA9IHNwYW4tPnk7CiAgICAgICAg
IGludCBtYXhZID0gKHNwYW4gKyAxKS0+eTsKIApAQCAtODcsNyArMTI4LDcgQEAgYm9vbCBSZWdp
b246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwbwogICAgICAgICBpZiAobWF4WSA8PSBwb2lu
dC55KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBmb3IgKFNoYXBlOjpTZWdt
ZW50SXRlcmF0b3Igc2VnbWVudCA9IG1fc2hhcGUuc2VnbWVudHNfYmVnaW4oc3BhbiksIGVuZCA9
IG1fc2hhcGUuc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsg
MSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgeworICAgICAgICBmb3IgKFNoYXBlOjpTZWdtZW50SXRl
cmF0b3Igc2VnbWVudCA9IG1fc2hhcGUtPnNlZ21lbnRzX2JlZ2luKHNwYW4pLCBlbmQgPSBtX3No
YXBlLT5zZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5kICYmIHNlZ21lbnQgKyAxICE9
IGVuZDsgc2VnbWVudCArPSAyKSB7CiAgICAgICAgICAgICBpbnQgeCA9ICpzZWdtZW50OwogICAg
ICAgICAgICAgaW50IG1heFggPSAqKHNlZ21lbnQgKyAxKTsKIApAQCAtMTA2LDE5ICsxNDcsMTgg
QEAgYm9vbCBSZWdpb246OmludGVyc2VjdHMoY29uc3QgUmVnaW9uJiByZQogICAgIGlmICghbV9i
b3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNl
Y3RzT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFtX3NoYXBl
ICYmICFyZWdpb24ubV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
U2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uPiht
X3NoYXBlID8gKm1fc2hhcGUgOiBtX2JvdW5kcywgcmVnaW9uLm1fc2hhcGUgPyAqcmVnaW9uLm1f
c2hhcGUgOiByZWdpb24ubV9ib3VuZHMpOwogfQogCi11bnNpZ25lZCBSZWdpb246OnRvdGFsQXJl
YSgpIGNvbnN0Cit1aW50NjRfdCBSZWdpb246OnRvdGFsQXJlYSgpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEludFJlY3Q+IHJlY3RzID0gdGhpcy0+cmVjdHMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IHJl
Y3RzLnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b3RhbEFyZWEgPSAwOworICAgIHVpbnQ2NF90IHRv
dGFsQXJlYSA9IDA7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBy
ZWN0cygpKQogICAgICAgICB0b3RhbEFyZWEgKz0gKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0
KCkpOwotICAgIH0KIAogICAgIHJldHVybiB0b3RhbEFyZWE7CiB9CkBAIC0yMjEsMjEgKzI2MSwx
NSBAQCBzdHJ1Y3QgUmVnaW9uOjpTaGFwZTo6Q29tcGFyZUludGVyc2VjdHNPCiAgICAgaW5saW5l
IHN0YXRpYyBib29sIGFPdmVybGFwc0IoYm9vbCYgcmVzdWx0KSB7IHJlc3VsdCA9IHRydWU7IHJl
dHVybiB0cnVlOyB9CiB9OwogCi1SZWdpb246OlNoYXBlOjpTaGFwZSgpCi17Ci19Ci0KIFJlZ2lv
bjo6U2hhcGU6OlNoYXBlKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBtX3NlZ21lbnRzKHsg
cmVjdC54KCksIHJlY3QubWF4WCgpIH0pCisgICAgLCBtX3NwYW5zKHsgeyByZWN0LnkoKSwgMCB9
LCB7IHJlY3QubWF4WSgpLCAyIH0gfSkKIHsKLSAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKLSAg
ICBhcHBlbmRTZWdtZW50KHJlY3QueCgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgp
KTsKLSAgICBhcHBlbmRTcGFuKHJlY3QubWF4WSgpKTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBl
OjphcHBlbmRTcGFuKGludCB5KQogewotICAgIG1fc3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdt
ZW50cy5zaXplKCkpKTsKKyAgICBtX3NwYW5zLmFwcGVuZCh7IHksIG1fc2VnbWVudHMuc2l6ZSgp
IH0pOwogfQogCiBib29sIFJlZ2lvbjo6U2hhcGU6OmNhbkNvYWxlc2NlKFNlZ21lbnRJdGVyYXRv
ciBiZWdpbiwgU2VnbWVudEl0ZXJhdG9yIGVuZCkKQEAgLTMzMSwyNyArMzY1LDYgQEAgdm9pZCBS
ZWdpb246OlNoYXBlOjpkdW1wKCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFJlZ2lvbjo6U2hh
cGU6OmlzVmFsaWQoKSBjb25zdAotewotICAgIGZvciAoYXV0byBzcGFuID0gc3BhbnNfYmVnaW4o
KSwgZW5kID0gc3BhbnNfZW5kKCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytz
cGFuKSB7Ci0gICAgICAgIGludCB5ID0gc3Bhbi0+eTsKLSAgICAgICAgaW50IGhlaWdodCA9IChz
cGFuICsgMSktPnkgLSB5OwotICAgICAgICAKLSAgICAgICAgaWYgKGhlaWdodCA8IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChhdXRvIHNlZ21lbnQgPSBzZWdt
ZW50c19iZWdpbihzcGFuKSwgZW5kID0gc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVu
ZCAmJiBzZWdtZW50ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewotICAgICAgICAgICAgaW50
IHggPSAqc2VnbWVudDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0g
eDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogSW50UmVjdCBSZWdpb246OlNoYXBlOjpib3VuZHMoKSBjb25zdAogewogICAgIGlmIChp
c0VtcHR5KCkpCkBAIC0zOTcsMTIgKzQxMCw2IEBAIHZvaWQgUmVnaW9uOjpTaGFwZTo6dHJhbnNs
YXRlKGNvbnN0IEludFMKICAgICAgICAgbV9zcGFuc1tpXS55ICs9IG9mZnNldC5oZWlnaHQoKTsK
IH0KIAotdm9pZCBSZWdpb246OlNoYXBlOjpzd2FwKFNoYXBlJiBvdGhlcikKLXsKLSAgICBtX3Nl
Z21lbnRzLnN3YXAob3RoZXIubV9zZWdtZW50cyk7Ci0gICAgbV9zcGFucy5zd2FwKG90aGVyLm1f
c3BhbnMpOwotfQotCiBlbnVtIHsKICAgICBTaGFwZTEsCiAgICAgU2hhcGUyLApAQCAtNTY3LDcx
ICs1NzQsODEgQEAgdm9pZCBSZWdpb246OmR1bXAoKSBjb25zdAogewogICAgIHByaW50ZigiQm91
bmRzOiAoJWQsICVkLCAlZCwgJWQpXG4iLAogICAgICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91
bmRzLnkoKSwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fc2hh
cGUuZHVtcCgpOworICAgIGlmIChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT5kdW1wKCk7CiB9
CiAjZW5kaWYKIAotdm9pZCBSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpCi17Ci0gICAg
bV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOwotfQotCiB2b2lkIFJlZ2lvbjo6aW50ZXJzZWN0
KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQogewogICAgIGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91
bmRzKSkgewotICAgICAgICBtX3NoYXBlID0gU2hhcGUoKTsKKyAgICAgICAgbV9zaGFwZSA9IG51
bGxwdHI7CiAgICAgICAgIG1fYm91bmRzID0gSW50UmVjdCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGlmICghbV9zaGFwZSAmJiAhcmVnaW9uLm1fc2hhcGUpIHsKKyAgICAgICAgbV9i
b3VuZHMgPSBpbnRlcnNlY3Rpb24obV9ib3VuZHMsIHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBTaGFwZSBpbnRlcnNlY3RlZFNoYXBlID0gU2hhcGU6Omlu
dGVyc2VjdFNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3
YXAoaW50ZXJzZWN0ZWRTaGFwZSk7Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOwor
ICAgIHNldFNoYXBlKFNoYXBlOjppbnRlcnNlY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDog
bV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91
bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp1bml0ZShjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsK
ICAgICBpZiAocmVnaW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1Jl
Y3QoKSAmJiBtX2JvdW5kcy5jb250YWlucyhyZWdpb24ubV9ib3VuZHMpKQorICAgIGlmIChpc0Vt
cHR5KCkpIHsKKyAgICAgICAgbV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1f
c2hhcGUgPSByZWdpb24uY29weVNoYXBlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
aWYgKHJlZ2lvbi5pc1JlY3QoKSAmJiByZWdpb24ubV9ib3VuZHMuY29udGFpbnMobV9ib3VuZHMp
KSB7Ci0gICAgICAgIG1fc2hhcGUgPSByZWdpb24ubV9zaGFwZTsKICAgICAgICAgbV9ib3VuZHMg
PSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1fc2hhcGUgPSBudWxscHRyOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIC8vIEZJWE1FOiBXZSBtYXkgd2FudCBhbm90aGVyIHdheSB0byBj
b25zdHJ1Y3QgYSBSZWdpb24gd2l0aG91dCBkb2luZyB0aGlzIHRlc3Qgd2hlbiB3ZSBleHBlY3Qg
aXQgdG8gYmUgZmFsc2UuCi0gICAgaWYgKCFpc1JlY3QoKSAmJiBjb250YWlucyhyZWdpb24pKQor
ICAgIGlmIChjb250YWlucyhyZWdpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFwZSB1
bml0ZWRTaGFwZSA9IFNoYXBlOjp1bmlvblNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7
Ci0KLSAgICBtX3NoYXBlLnN3YXAodW5pdGVkU2hhcGUpOwotICAgIG1fYm91bmRzLnVuaXRlKHJl
Z2lvbi5tX2JvdW5kcyk7CisgICAgc2V0U2hhcGUoU2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUg
PyAqbV9zaGFwZSA6IG1fYm91bmRzLCByZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6
IHJlZ2lvbi5tX2JvdW5kcykpOwogfQogCiB2b2lkIFJlZ2lvbjo6c3VidHJhY3QoY29uc3QgUmVn
aW9uJiByZWdpb24pCiB7Ci0gICAgaWYgKG1fYm91bmRzLmlzRW1wdHkoKSkKKyAgICBpZiAoaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlZ2lvbi5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRz
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhcGUgc3VidHJhY3RlZFNoYXBlID0gU2hhcGU6
OnN1YnRyYWN0U2hhcGVzKG1fc2hhcGUsIHJlZ2lvbi5tX3NoYXBlKTsKLQotICAgIG1fc2hhcGUu
c3dhcChzdWJ0cmFjdGVkU2hhcGUpOwotICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsK
KyAgICBzZXRTaGFwZShTaGFwZTo6c3VidHJhY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDog
bV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91
bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYgb2Zmc2V0
KQogewogICAgIG1fYm91bmRzLm1vdmUob2Zmc2V0KTsKLSAgICBtX3NoYXBlLnRyYW5zbGF0ZShv
ZmZzZXQpOworICAgIGlmIChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT50cmFuc2xhdGUob2Zm
c2V0KTsKIH0KIAordm9pZCBSZWdpb246OnNldFNoYXBlKFNoYXBlJiYgc2hhcGUpCit7CisgICAg
bV9ib3VuZHMgPSBzaGFwZS5ib3VuZHMoKTsKKworICAgIGlmIChzaGFwZS5pc1JlY3QoKSkgewor
ICAgICAgICBtX3NoYXBlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghbV9zaGFwZSkKKyAgICAgICAgbV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+
KFdURk1vdmUoc2hhcGUpKTsKKyAgICBlbHNlCisgICAgICAgICptX3NoYXBlID0gV1RGTW92ZShz
aGFwZSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw4IEBACiAjZGVmaW5lIFJlZ2lvbl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29u
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCwxMSArNDAsMTkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbigpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZ2lvbihjb25zdCBJbnRSZWN0Jik7CiAKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWdpb24oY29uc3QgUmVnaW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKFJl
Z2lvbiYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIH5SZWdpb24oKTsKKworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZ2lvbiYgb3BlcmF0b3I9KGNvbnN0IFJlZ2lvbiYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZ2lvbiYgb3BlcmF0b3I9KFJlZ2lvbiYmKTsKKwogICAgIEludFJlY3QgYm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2JvdW5kcy5pc0VtcHR5KCk7IH0KLSAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcGUuaXNSZWN0KCk7IH0KKyAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3NoYXBlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4gcmVjdHMo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHMoKSBj
b25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5pdGUoY29uc3QgUmVnaW9uJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnRlcnNlY3QoY29uc3QgUmVnaW9uJik7CkBAIC01OCw0
OCArNjgsMzEgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgcmVn
aW9uIGludGVyc2VjdHMgYW55IHBhcnQgb2YgdGhpcyByZWdpb24uCiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFJlZ2lvbiYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdW5zaWduZWQgdG90YWxBcmVhKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdWlu
dDY0X3QgdG90YWxBcmVhKCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBncmlkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcGUuZ3JpZFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGdyaWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFwZSA/IG1fc2hhcGUtPmdyaWRTaXplKCkgOiAwOyB9CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuaXNWYWxpZCgpOyB9CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWdpb24+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgLy8gRklYTUU6IFJlbW92ZSBsZWdhY3kgZGVjb2RlLgorICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgUmVnaW9uJik7CiAKLSAg
ICAvLyBUaGlzIGlzIGludGVybmFsIHRvIFJlZ2lvbiwgYnV0IGV4cG9zZWQganVzdCBmb3IgZW5j
b2RpbmcuCi0gICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGVuY29kZSBX
ZWJDb3JlIGNsYXNzZXMuCitwcml2YXRlOgogICAgIHN0cnVjdCBTcGFuIHsKLSAgICAgICAgU3Bh
bigpCi0gICAgICAgICAgICA6IHkoMCkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFNwYW4oaW50IHksIHNpemVfdCBzZWdtZW50
SW5kZXgpCi0gICAgICAgICAgICA6IHkoeSkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KHNl
Z21lbnRJbmRleCkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIGludCB5IHsgMCB9Owor
ICAgICAgICBzaXplX3Qgc2VnbWVudEluZGV4IHsgMCB9OwogCi0gICAgICAgIGludCB5OwotICAg
ICAgICBzaXplX3Qgc2VnbWVudEluZGV4OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAK
LSAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4KLSAgICBjb25zdCBWZWN0b3I8aW50
LCAzMj4mIHNoYXBlU2VnbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLnNlZ21lbnRzKCk7
IH0KLSAgICBjb25zdCBWZWN0b3I8U3BhbiwgMTY+JiBzaGFwZVNwYW5zKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFwZS5zcGFucygpOyB9Ci0KLSAgICB2b2lkIHNldFNoYXBlU2VnbWVudHMoY29uc3Qg
VmVjdG9yPGludD4mIHNlZ21lbnRzKSB7IG1fc2hhcGUuc2V0U2VnbWVudHMoc2VnbWVudHMpOyB9
Ci0gICAgdm9pZCBzZXRTaGFwZVNwYW5zKGNvbnN0IFZlY3RvcjxTcGFuPiYgc3BhbnMpIHsgbV9z
aGFwZS5zZXRTcGFucyhzcGFucyk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJv
dW5kc0Zyb21TaGFwZSgpOwotCi1wcml2YXRlOgotCiAgICAgY2xhc3MgU2hhcGUgewogICAgIHB1
YmxpYzoKLSAgICAgICAgU2hhcGUoKTsKKyAgICAgICAgU2hhcGUoKSA9IGRlZmF1bHQ7CiAgICAg
ICAgIFNoYXBlKGNvbnN0IEludFJlY3QmKTsKIAogICAgICAgICBJbnRSZWN0IGJvdW5kcygpIGNv
bnN0OwpAQCAtMTIwLDIyICsxMTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIFNoYXBl
IHN1YnRyYWN0U2hhcGVzKGNvbnN0IFNoYXBlJiBzaGFwZTEsIGNvbnN0IFNoYXBlJiBzaGFwZTIp
OwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEludFNpemUm
KTsKLSAgICAgICAgdm9pZCBzd2FwKFNoYXBlJik7CiAKICAgICAgICAgc3RydWN0IENvbXBhcmVD
b250YWluc09wZXJhdGlvbjsKICAgICAgICAgc3RydWN0IENvbXBhcmVJbnRlcnNlY3RzT3BlcmF0
aW9uOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmVPcGVyYXRpb24+CiAgICAg
ICAgIHN0YXRpYyBib29sIGNvbXBhcmVTaGFwZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29uc3Qg
U2hhcGUmIHNoYXBlMik7Ci0gICAgICAgIAotICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
VmFsaWQoKSBjb25zdDsKLQotICAgICAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4K
LSAgICAgICAgY29uc3QgVmVjdG9yPGludCwgMzI+JiBzZWdtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fc2VnbWVudHM7IH0KLSAgICAgICAgY29uc3QgVmVjdG9yPFNwYW4sIDE2PiYgc3BhbnMoKSBj
b25zdCB7IHJldHVybiBtX3NwYW5zOyB9CiAKLSAgICAgICAgdm9pZCBzZXRTZWdtZW50cyhjb25z
dCBWZWN0b3I8aW50PiYgc2VnbWVudHMpIHsgbV9zZWdtZW50cyA9IHNlZ21lbnRzOyB9Ci0gICAg
ICAgIHZvaWQgc2V0U3BhbnMoY29uc3QgVmVjdG9yPFNwYW4+JiBzcGFucykgeyBtX3NwYW5zID0g
c3BhbnM7IH0KKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8U2hhcGU+IGRlY29kZShEZWNvZGVyJik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAg
IHZvaWQgZHVtcCgpIGNvbnN0OwpAQCAtMTYyLDEyICsxNDgsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNoYXBlJik7CiAg
ICAgfTsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gY29weVNoYXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFwZSA/IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KCptX3NoYXBlKSA6IG51bGxw
dHI7IH0KKyAgICB2b2lkIHNldFNoYXBlKFNoYXBlJiYpOworCiAgICAgSW50UmVjdCBtX2JvdW5k
czsKLSAgICBTaGFwZSBtX3NoYXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gbV9zaGFw
ZTsKIAogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaW9uJiwgY29uc3QgUmVn
aW9uJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNo
YXBlJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTcGFuJiwgY29uc3QgU3Bh
biYpOworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgU3BhbiYsIGNvbnN0IFNwYW4m
KTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChjb25zdCBSZWdpb24mIGEs
IGNvbnN0IFJlZ2lvbiYgYikKQEAgLTE3Nyw3ICsxNjcsNyBAQCBzdGF0aWMgaW5saW5lIFJlZ2lv
biBpbnRlcnNlY3QoY29uc3QgUmVnCiAKICAgICByZXR1cm4gcmVzdWx0OwogfQotICAgIAorCiBz
dGF0aWMgaW5saW5lIFJlZ2lvbiBzdWJ0cmFjdChjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lv
biYgYikKIHsKICAgICBSZWdpb24gcmVzdWx0KGEpOwpAQCAtMTk2LDcgKzE4Niw3IEBAIHN0YXRp
YyBpbmxpbmUgUmVnaW9uIHRyYW5zbGF0ZShjb25zdCBSZWcKIAogaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lvbiYgYikKIHsKLSAgICByZXR1cm4gYS5t
X2JvdW5kcyA9PSBiLm1fYm91bmRzICYmIGEubV9zaGFwZSA9PSBiLm1fc2hhcGU7CisgICAgcmV0
dXJuIGEubV9ib3VuZHMgPT0gYi5tX2JvdW5kcyAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGEu
bV9zaGFwZSwgYi5tX3NoYXBlKTsKIH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVn
aW9uJiBhLCBjb25zdCBSZWdpb24mIGIpCiB7CkBAIC0yMTIsMTEgKzIwMiwxMDggQEAgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpb246OlNwYQogewogICAgIHJldHVybiBhLnkgPT0g
Yi55ICYmIGEuc2VnbWVudEluZGV4ID09IGIuc2VnbWVudEluZGV4OwogfQorCiBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lvbjo6U3BhbiYgYSwgY29uc3QgUmVnaW9uOjpTcGFuJiBi
KQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIFJlZ2lvbjo6U3Bhbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCB5IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzZWdtZW50SW5kZXgpOwor
fQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBSZWdp
b246OlNwYW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPGludD4g
eTsKKyAgICBkZWNvZGVyID4+IHk7CisgICAgaWYgKCF5KQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNlZ21lbnRJbmRleDsKKyAgICBkZWNvZGVyID4+IHNl
Z21lbnRJbmRleDsKKyAgICBpZiAoIXNlZ21lbnRJbmRleCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiB7IHsgKnksICpzZWdtZW50SW5kZXggfSB9OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBSZWdpb246OlNoYXBlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fc2VnbWVudHM7CisgICAgZW5jb2RlciA8PCBt
X3NwYW5zOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVnaW9uOjpT
aGFwZT4gUmVnaW9uOjpTaGFwZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0
aW9uYWw8VmVjdG9yPGludD4+IHNlZ21lbnRzOworICAgIGRlY29kZXIgPj4gc2VnbWVudHM7Cisg
ICAgaWYgKCFzZWdtZW50cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9w
dGlvbmFsPFZlY3RvcjxSZWdpb246OlNwYW4+PiBzcGFuczsKKyAgICBkZWNvZGVyID4+IHNwYW5z
OworICAgIGlmICghc3BhbnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBT
aGFwZSBzaGFwZTsKKyAgICBzaGFwZS5tX3NlZ21lbnRzID0gV1RGTW92ZSgqc2VnbWVudHMpOwor
ICAgIHNoYXBlLm1fc3BhbnMgPSBXVEZNb3ZlKCpzcGFucyk7CisKKyAgICByZXR1cm4geyBzaGFw
ZSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBSZWdpb246OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9ib3VuZHM7CisgICAg
Ym9vbCBoYXNTaGFwZSA9ICEhbV9zaGFwZTsKKyAgICBlbmNvZGVyIDw8IGhhc1NoYXBlOworICAg
IGlmIChoYXNTaGFwZSkKKyAgICAgICAgZW5jb2RlciA8PCAqbV9zaGFwZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZ2lvbj4gUmVnaW9uOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxJbnRSZWN0PiBib3VuZHM7CisgICAgZGVjb2Rl
ciA+PiBib3VuZHM7CisgICAgaWYgKCFib3VuZHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBPcHRpb25hbDxib29sPiBoYXNTaGFwZTsKKyAgICBkZWNvZGVyID4+IGhhc1No
YXBlOworICAgIGlmICghaGFzU2hhcGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBSZWdpb24gcmVnaW9uID0geyAqYm91bmRzIH07CisKKyAgICBpZiAoKmhhc1NoYXBlKSB7
CisgICAgICAgIE9wdGlvbmFsPFNoYXBlPiBzaGFwZTsKKyAgICAgICAgZGVjb2RlciA+PiBzaGFw
ZTsKKyAgICAgICAgaWYgKCFzaGFwZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHJlZ2lvbi5tX3NoYXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTaGFwZT4oV1RGTW92
ZSgqc2hhcGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyByZWdpb24gfTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK2Jvb2wgUmVnaW9uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
UmVnaW9uJiByZWdpb24pCit7CisgICAgT3B0aW9uYWw8UmVnaW9uPiBkZWNvZGVkUmVnaW9uOwor
ICAgIGRlY29kZXIgPj4gZGVjb2RlZFJlZ2lvbjsKKyAgICBpZiAoIWRlY29kZWRSZWdpb24pCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZWdpb24gPSBXVEZNb3ZlKCpkZWNvZGVkUmVnaW9u
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gUmVnaW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCShyZXZpc2lv
biAyNDI5OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDcgKzMzNSw3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFVzaW5nT3ZlcmwKICAgICB9CiAKICAgICBub25P
dmVybGFwUmVnaW9uLnRyYW5zbGF0ZShvcHRpb25zLm9mZnNldCk7Ci0gICAgVmVjdG9yPEludFJl
Y3Q+IHJlY3RzID0gbm9uT3ZlcmxhcFJlZ2lvbi5yZWN0cygpOworICAgIGF1dG8gcmVjdHMgPSBu
b25PdmVybGFwUmVnaW9uLnJlY3RzKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykg
ewogICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhvcHRpb25zLnRleHR1cmVNYXBwZXIuY2xp
cEJvdW5kcygpKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE5LTAzLTE0
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBS
ZWdpb24gZm9yIHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2lt
b24gRnJhc2VyLgorCisgICAgICAgICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxFdmVu
dFRyYWNraW5nUmVnaW9ucz46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
UmVnaW9uOjpTcGFuPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxSZWdpb246OlNwYW4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1
bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmg6CisKIDIwMTktMDMtMTQgIFBlciBBcm5lIFZvbGxhbiAgPHB2
b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFdlYktpdCBjcmFzaGVzIHdoZW4gb3Bl
bmluZyBwYWdlcyBkb2N1bWVudHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3
LDggKzM2Nyw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KIAog
Ym9vbCBBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIEV2ZW50VHJhY2tpbmdSZWdpb25zJiBldmVudFRyYWNraW5nUmVnaW9ucykKIHsK
LSAgICBSZWdpb24gYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb247Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbikpCisgICAgT3B0aW9uYWw8UmVnaW9u
PiBhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGFzeW5jaHJvbm91
c0Rpc3BhdGNoUmVnaW9uOworICAgIGlmICghYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIYXNoTWFwPFN0cmluZywgUmVnaW9uPiBldmVudFNw
ZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnM7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpKQpAQCAtMzc4LDcgKzM3
OSw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRvdWNoQWN0aW9uRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgotICAgIGV2ZW50VHJhY2tpbmdSZWdpb25zLmFzeW5jaHJvbm91c0Rpc3BhdGNoUmVn
aW9uID0gV1RGTW92ZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbik7CisgICAgZXZlbnRUcmFj
a2luZ1JlZ2lvbnMuYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24gPSBXVEZNb3ZlKCphc3luY2hy
b25vdXNEaXNwYXRjaFJlZ2lvbik7CiAgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVj
aWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb25zID0gV1RGTW92ZShldmVudFNwZWNpZmljU3lu
Y2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpOwogI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKICAg
ICBldmVudFRyYWNraW5nUmVnaW9ucy50b3VjaEFjdGlvbkRhdGEgPSBXVEZNb3ZlKHRvdWNoQWN0
aW9uRGF0YSk7CkBAIC05MDIsNjYgKzkwMyw2IEBAIE9wdGlvbmFsPFJlY2VudFNlYXJjaD4gQXJn
dW1lbnRDb2RlcjxSZWMKICAgICByZXR1cm4ge3sgV1RGTW92ZSgqc3RyaW5nKSwgV1RGTW92ZSgq
dGltZSkgfX07CiB9CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVnaW9uOjpT
cGFuPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBSZWdpb246OlNw
YW4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBkZWNvZGUoRGVjb2RlciYp
OwotfTsKLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBSZWdpb246OlNwYW4mIHNwYW4pCi17Ci0gICAgZW5jb2RlciA8PCBz
cGFuLnk7Ci0gICAgZW5jb2RlciA8PCAodWludDY0X3Qpc3Bhbi5zZWdtZW50SW5kZXg7Ci19Ci0K
LU9wdGlvbmFsPFJlZ2lvbjo6U3Bhbj4gQXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBSZWdpb246OlNwYW4gc3BhbjsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHNwYW4ueSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgCi0gICAgdWludDY0X3Qgc2VnbWVudEluZGV4OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c2VnbWVudEluZGV4KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICBz
cGFuLnNlZ21lbnRJbmRleCA9IHNlZ21lbnRJbmRleDsKLSAgICByZXR1cm4gV1RGTW92ZShzcGFu
KTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24u
c2hhcGVTZWdtZW50cygpKTsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hhcGVTcGFucygp
KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBWZWN0b3I8aW50PiBzZWdtZW50czsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHNlZ21lbnRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgVmVjdG9yPFJlZ2lvbjo6U3Bhbj4gc3BhbnM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
cGFucykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZWdpb24uc2V0U2hhcGVT
ZWdtZW50cyhzZWdtZW50cyk7Ci0gICAgcmVnaW9uLnNldFNoYXBlU3BhbnMoc3BhbnMpOwotICAg
IHJlZ2lvbi51cGRhdGVCb3VuZHNGcm9tU2hhcGUoKTsKLSAgICAKLSAgICBpZiAoIXJlZ2lvbi5p
c1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1PcHRpb25hbDxSZWdpb24+IEFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgUmVnaW9uIHJlZ2lvbjsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVy
LCByZWdpb24pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHJl
Z2lvbjsKLX0KLQogdm9pZCBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBMZW5ndGgmIGxlbmd0aCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVy
PExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBsZW5ndGgpOwpAQCAtOTcyLDcgKzkxMyw2IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoRGVjb2QKICAgICByZXR1cm4gU2ltcGxl
QXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgbGVuZ3RoKTsKIH0KIAotCiB2
b2lkIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYgdmlld3BvcnRBdHRyaWJ1dGVzKQogewog
ICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKGVuY29k
ZXIsIHZpZXdwb3J0QXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwx
MiArMzI0LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAg
IHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZWdpb24+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6UmVnaW9uJik7Ci0gICAgc3Rh
dGljIE9wdGlvbmFsPFdlYkNvcmU6OlJlZ2lvbj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7CiAgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgmKTsKICAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okxlbmd0aCYpOwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3Jl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdT
dG9yZTo6ZHJhd0luQ29udAogICAgIC8vIE90aGVyd2lzZSwgcmVwYWludCB0aGUgZW50aXJlIGJv
dW5kaW5nIGJveCBvZiB0aGUgZGlydHkgcmVnaW9uLgogICAgIFdlYkNvcmU6OkludFJlY3QgZGly
dHlCb3VuZHMgPSBtX2RpcnR5UmVnaW9uLmJvdW5kcygpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+IGRpcnR5UmVjdHMgPSBtX2RpcnR5UmVnaW9uLnJlY3RzKCk7CisgICAgYXV0byBk
aXJ0eVJlY3RzID0gbV9kaXJ0eVJlZ2lvbi5yZWN0cygpOwogICAgIGlmIChkaXJ0eVJlY3RzLnNp
emUoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQg
fHwgbV9kaXJ0eVJlZ2lvbi50b3RhbEFyZWEoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6
d2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCAqIGRpcnR5Qm91bmRzLndpZHRoKCkgKiBkaXJ0
eUJvdW5kcy5oZWlnaHQoKSkgewogICAgICAgICBkaXJ0eVJlY3RzLmNsZWFyKCk7CiAgICAgICAg
IGRpcnR5UmVjdHMuYXBwZW5kKGRpcnR5Qm91bmRzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubW0JKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTE1LDEwICs1MTUsMTEgQEAgYm9vbCBSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbjo6TGF5ZXJQcgogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0V2ZW50UmVnaW9u
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGhhc0V2ZW50UmVnaW9u
KSB7Ci0gICAgICAgICAgICBhdXRvIGV2ZW50UmVnaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJD
b3JlOjpSZWdpb24+KCk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpldmVudFJl
Z2lvbikpCisgICAgICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpSZWdpb24+IGV2ZW50UmVnaW9u
OworICAgICAgICAgICAgZGVjb2RlciA+PiBldmVudFJlZ2lvbjsKKyAgICAgICAgICAgIGlmICgh
ZXZlbnRSZWdpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
cmVzdWx0LmV2ZW50UmVnaW9uID0gV1RGTW92ZShldmVudFJlZ2lvbik7CisgICAgICAgICAgICBy
ZXN1bHQuZXZlbnRSZWdpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lvbj4oV1RGTW92ZSgqZXZl
bnRSZWdpb24pKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNyArNDc0LDcg
QEAgdm9pZCBXZWJWaWV3OjpwYWludChIREMgaGRjLCBjb25zdCBJbnRSZQogICAgICAgICBjYWly
b19kZXN0cm95KGNvbnRleHQpOwogICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFj
ZSk7CiAKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IHVucGFpbnRlZFJlY3RzID0gdW5wYWludGVk
UmVnaW9uLnJlY3RzKCk7CisgICAgICAgIGF1dG8gdW5wYWludGVkUmVjdHMgPSB1bnBhaW50ZWRS
ZWdpb24ucmVjdHMoKTsKICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogdW5wYWludGVkUmVjdHMp
CiAgICAgICAgICAgICBkcmF3UGFnZUJhY2tncm91bmQoaGRjLCBtX3BhZ2UuZ2V0KCksIHJlY3Qp
OwogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAkocmV2aXNpb24gMjQyOTkz
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MjgsNyArNzI4LDcgQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpcwog
ICAgIGlmICghYml0bWFwLT5jcmVhdGVIYW5kbGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBtX2RpcnR5UmVn
aW9uLnJlY3RzKCk7CisgICAgYXV0byByZWN0cyA9IG1fZGlydHlSZWdpb24ucmVjdHMoKTsKICAg
ICBpZiAoc2hvdWxkUGFpbnRCb3VuZHNSZWN0KGJvdW5kcywgcmVjdHMpKSB7CiAgICAgICAgIHJl
Y3RzLmNsZWFyKCk7CiAgICAgICAgIHJlY3RzLmFwcGVuZChib3VuZHMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364795</attachid>
            <date>2019-03-15 07:45:37 -0700</date>
            <delta_ts>2019-03-15 08:43:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>region-rect-optimize-13.patch</filename>
            <type>text/plain</type>
            <size>28800</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE5LTAzLTE0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBSZWdpb24gZm9y
IHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgIEluc3RydW1lbnRhdGlvbiBzaG93cyB2YXN0IG1ham9yaXR5IG9mIFJlZ2lv
biBvYmplY3RzIGNvbnNpc3Qgb2YgYSBzaW5nbGUgcmVjdGFuZ2xlLiBIb3dldmVyIGl0IGFsd2F5
cyBhbGxvY2F0ZXMKKyAgICAgICAgdGhlIGxhcmdlIFNoYXBlIGRhdGEgc3RydWN0dXJlLiBUaGlz
IG1ha2VzIGl0IHVuc3VpdGFibGUgdG8gdXNlIGFzIGEgbWVtYmVyIGluIGFueSBwb3B1bGFyIG9i
amVjdHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBvcHRpbWl6ZXMgdGhlIHNpbmdsZSByZWN0YW5n
bGUgY2FzZSBieSB1c2luZyBvbmx5IHRoZSBib3VuZHMgcmVjdGFuZ2xlIHRvIGRlc2NyaWJlIGl0
LgorICAgICAgICBTaGFwZSBpcyBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGlzIG1ha2VzIGl0IHNh
ZmUgdG8gdXNlIFJlZ2lvbiBhcyBhIGRhdGEgbWVtYmVyIHdoZXJlIGEgcmVjdGFuZ2xlIGlzIHRo
ZSBjb21tb24gY2FzZS4KKworICAgICAgICBUaGUgcGF0Y2ggYWxzbyBtb2Rlcm5pemVzIFJlZ2lv
biBlbmNvZGluZy9kZWNvZGluZyBzdXBwb3J0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVnaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6UmVnaW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lvbjo6flJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnJlY3RzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVnaW9uOjppbnRlcnNlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6
U2hhcGU6OlNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNw
YW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlZ2lvbjo6aW50ZXJzZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6dW5p
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzdWJ0cmFjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWdpb246OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmlzVmFsaWQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3dhcCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSk6IERlbGV0
ZWQuCisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbm93IHVudXNlZCBmdW5jdGlvbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9u
Ojppc1JlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpncmlkU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OmNvcHlTaGFwZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U3Bhbjo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6U2hhcGU6OmVuY29kZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWdpb246OlNoYXBlOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVn
aW9uOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpkZWNvZGUpOgor
CisgICAgICAgIFRoaXMgaXMgbm93IHBhcnQgb2YgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6
UmVnaW9uOjppc1ZhbGlkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lv
bjo6U3Bhbjo6U3Bhbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNoYXBl
U2VnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpzaGFw
ZVNwYW5zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lvbjo6c2V0U2hh
cGVTZWdtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWdpb246OnNldFNoYXBl
U3BhbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2VnbWVu
dHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c3Bh
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U2VnbWVudHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVnaW9uOjpTaGFwZTo6c2V0
U3BhbnMpOiBEZWxldGVkLgorCisgICAgICAgIE5vIG5lZWQgdG8gZXhwb3NlIHRoZXNlIGZvciBl
bmNvZGluZyBhbnltb3JlLgorCiAyMDE5LTAzLTE1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm92aWRlIGEgd2F5IHRvIGNhcHR1
cmUgYSBzY3JlZW5zaG90IG9mIGEgbm9kZSBmcm9tIHdpdGhpbiB0aGUgcGFnZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCShyZXZpc2lvbiAyNDI5
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxOSArNDIsNTQgQEAgUmVnaW9uOjpSZWdpb24oKQogCiBSZWdpb246
OlJlZ2lvbihjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIDogbV9ib3VuZHMocmVjdCkKLSAgICAs
IG1fc2hhcGUocmVjdCkKIHsKIH0KIAotVmVjdG9yPEludFJlY3Q+IFJlZ2lvbjo6cmVjdHMoKSBj
b25zdAorUmVnaW9uOjpSZWdpb24oY29uc3QgUmVnaW9uJiBvdGhlcikKKyAgICA6IG1fYm91bmRz
KG90aGVyLm1fYm91bmRzKQorICAgICwgbV9zaGFwZShvdGhlci5jb3B5U2hhcGUoKSkKIHsKLSAg
ICBWZWN0b3I8SW50UmVjdD4gcmVjdHM7Cit9CisKK1JlZ2lvbjo6UmVnaW9uKFJlZ2lvbiYmIG90
aGVyKQorICAgIDogbV9ib3VuZHMoV1RGTW92ZShvdGhlci5tX2JvdW5kcykpCisgICAgLCBtX3No
YXBlKFdURk1vdmUob3RoZXIubV9zaGFwZSkpCit7Cit9CisKK1JlZ2lvbjo6flJlZ2lvbigpCit7
Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRvcj0oY29uc3QgUmVnaW9uJiBvdGhlcikKK3sK
KyAgICBtX2JvdW5kcyA9IG90aGVyLm1fYm91bmRzOworICAgIG1fc2hhcGUgPSBvdGhlci5jb3B5
U2hhcGUoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1JlZ2lvbiYgUmVnaW9uOjpvcGVyYXRv
cj0oUmVnaW9uJiYgb3RoZXIpCit7CisgICAgbV9ib3VuZHMgPSBXVEZNb3ZlKG90aGVyLm1fYm91
bmRzKTsKKyAgICBtX3NoYXBlID0gV1RGTW92ZShvdGhlci5tX3NoYXBlKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1ZlY3RvcjxJbnRSZWN0LCAxPiBSZWdpb246OnJlY3RzKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHM7CiAKLSAgICBmb3IgKFNoYXBlOjpTcGFuSXRl
cmF0b3Igc3BhbiA9IG1fc2hhcGUuc3BhbnNfYmVnaW4oKSwgZW5kID0gbV9zaGFwZS5zcGFuc19l
bmQoKTsgc3BhbiAhPSBlbmQgJiYgc3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKKyAgICBpZiAo
IW1fc2hhcGUpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5kcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZWN0cy51bmNoZWNrZWRBcHBlbmQobV9ib3VuZHMpOworICAgICAgICByZXR1cm4gcmVjdHM7
CisgICAgfQorCisgICAgZm9yIChTaGFwZTo6U3Bhbkl0ZXJhdG9yIHNwYW4gPSBtX3NoYXBlLT5z
cGFuc19iZWdpbigpLCBlbmQgPSBtX3NoYXBlLT5zcGFuc19lbmQoKTsgc3BhbiAhPSBlbmQgJiYg
c3BhbiArIDEgIT0gZW5kOyArK3NwYW4pIHsKICAgICAgICAgaW50IHkgPSBzcGFuLT55OwogICAg
ICAgICBpbnQgaGVpZ2h0ID0gKHNwYW4gKyAxKS0+eSAtIHk7CiAKLSAgICAgICAgZm9yIChTaGFw
ZTo6U2VnbWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLnNlZ21lbnRzX2JlZ2luKHNwYW4p
LCBlbmQgPSBtX3NoYXBlLnNlZ21lbnRzX2VuZChzcGFuKTsgc2VnbWVudCAhPSBlbmQgJiYgc2Vn
bWVudCArIDEgIT0gZW5kOyBzZWdtZW50ICs9IDIpIHsKKyAgICAgICAgZm9yIChTaGFwZTo6U2Vn
bWVudEl0ZXJhdG9yIHNlZ21lbnQgPSBtX3NoYXBlLT5zZWdtZW50c19iZWdpbihzcGFuKSwgZW5k
ID0gbV9zaGFwZS0+c2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50
ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewogICAgICAgICAgICAgaW50IHggPSAqc2VnbWVu
dDsKICAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0geDsKIApAQCAtNzAs
NyArMTA1LDEwIEBAIGJvb2wgUmVnaW9uOjpjb250YWlucyhjb25zdCBSZWdpb24mIHJlZ2kKICAg
ICBpZiAoIW1fYm91bmRzLmNvbnRhaW5zKHJlZ2lvbi5tX2JvdW5kcykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBTaGFwZTo6Y29tcGFyZVNoYXBlczxTaGFwZTo6Q29tcGFy
ZUNvbnRhaW5zT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFt
X3NoYXBlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBTaGFwZTo6Y29tcGFy
ZVNoYXBlczxTaGFwZTo6Q29tcGFyZUNvbnRhaW5zT3BlcmF0aW9uPigqbV9zaGFwZSwgcmVnaW9u
Lm1fc2hhcGUgPyAqcmVnaW9uLm1fc2hhcGUgOiBTaGFwZShyZWdpb24ubV9ib3VuZHMpKTsKIH0K
IAogYm9vbCBSZWdpb246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAg
LTc4LDcgKzExNiwxMCBAQCBib29sIFJlZ2lvbjo6Y29udGFpbnMoY29uc3QgSW50UG9pbnQmIHBv
CiAgICAgaWYgKCFtX2JvdW5kcy5jb250YWlucyhwb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGZvciAoU2hhcGU6OlNwYW5JdGVyYXRvciBzcGFuID0gbV9zaGFwZS5zcGFuc19i
ZWdpbigpLCBlbmQgPSBtX3NoYXBlLnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFuICsg
MSAhPSBlbmQ7ICsrc3BhbikgeworICAgIGlmICghbV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBmb3IgKFNoYXBlOjpTcGFuSXRlcmF0b3Igc3BhbiA9IG1fc2hhcGUtPnNwYW5z
X2JlZ2luKCksIGVuZCA9IG1fc2hhcGUtPnNwYW5zX2VuZCgpOyBzcGFuICE9IGVuZCAmJiBzcGFu
ICsgMSAhPSBlbmQ7ICsrc3BhbikgewogICAgICAgICBpbnQgeSA9IHNwYW4tPnk7CiAgICAgICAg
IGludCBtYXhZID0gKHNwYW4gKyAxKS0+eTsKIApAQCAtODcsNyArMTI4LDcgQEAgYm9vbCBSZWdp
b246OmNvbnRhaW5zKGNvbnN0IEludFBvaW50JiBwbwogICAgICAgICBpZiAobWF4WSA8PSBwb2lu
dC55KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBmb3IgKFNoYXBlOjpTZWdt
ZW50SXRlcmF0b3Igc2VnbWVudCA9IG1fc2hhcGUuc2VnbWVudHNfYmVnaW4oc3BhbiksIGVuZCA9
IG1fc2hhcGUuc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVuZCAmJiBzZWdtZW50ICsg
MSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgeworICAgICAgICBmb3IgKFNoYXBlOjpTZWdtZW50SXRl
cmF0b3Igc2VnbWVudCA9IG1fc2hhcGUtPnNlZ21lbnRzX2JlZ2luKHNwYW4pLCBlbmQgPSBtX3No
YXBlLT5zZWdtZW50c19lbmQoc3Bhbik7IHNlZ21lbnQgIT0gZW5kICYmIHNlZ21lbnQgKyAxICE9
IGVuZDsgc2VnbWVudCArPSAyKSB7CiAgICAgICAgICAgICBpbnQgeCA9ICpzZWdtZW50OwogICAg
ICAgICAgICAgaW50IG1heFggPSAqKHNlZ21lbnQgKyAxKTsKIApAQCAtMTA2LDE5ICsxNDcsMTgg
QEAgYm9vbCBSZWdpb246OmludGVyc2VjdHMoY29uc3QgUmVnaW9uJiByZQogICAgIGlmICghbV9i
b3VuZHMuaW50ZXJzZWN0cyhyZWdpb24ubV9ib3VuZHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gU2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNl
Y3RzT3BlcmF0aW9uPihtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7CisgICAgaWYgKCFtX3NoYXBl
ICYmICFyZWdpb24ubV9zaGFwZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
U2hhcGU6OmNvbXBhcmVTaGFwZXM8U2hhcGU6OkNvbXBhcmVJbnRlcnNlY3RzT3BlcmF0aW9uPiht
X3NoYXBlID8gKm1fc2hhcGUgOiBtX2JvdW5kcywgcmVnaW9uLm1fc2hhcGUgPyAqcmVnaW9uLm1f
c2hhcGUgOiByZWdpb24ubV9ib3VuZHMpOwogfQogCi11bnNpZ25lZCBSZWdpb246OnRvdGFsQXJl
YSgpIGNvbnN0Cit1aW50NjRfdCBSZWdpb246OnRvdGFsQXJlYSgpIGNvbnN0CiB7Ci0gICAgVmVj
dG9yPEludFJlY3Q+IHJlY3RzID0gdGhpcy0+cmVjdHMoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IHJl
Y3RzLnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b3RhbEFyZWEgPSAwOworICAgIHVpbnQ2NF90IHRv
dGFsQXJlYSA9IDA7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICBJbnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBy
ZWN0cygpKQogICAgICAgICB0b3RhbEFyZWEgKz0gKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0
KCkpOwotICAgIH0KIAogICAgIHJldHVybiB0b3RhbEFyZWE7CiB9CkBAIC0yMjEsMjEgKzI2MSwx
NSBAQCBzdHJ1Y3QgUmVnaW9uOjpTaGFwZTo6Q29tcGFyZUludGVyc2VjdHNPCiAgICAgaW5saW5l
IHN0YXRpYyBib29sIGFPdmVybGFwc0IoYm9vbCYgcmVzdWx0KSB7IHJlc3VsdCA9IHRydWU7IHJl
dHVybiB0cnVlOyB9CiB9OwogCi1SZWdpb246OlNoYXBlOjpTaGFwZSgpCi17Ci19Ci0KIFJlZ2lv
bjo6U2hhcGU6OlNoYXBlKGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgOiBtX3NlZ21lbnRzKHsg
cmVjdC54KCksIHJlY3QubWF4WCgpIH0pCisgICAgLCBtX3NwYW5zKHsgeyByZWN0LnkoKSwgMCB9
LCB7IHJlY3QubWF4WSgpLCAyIH0gfSkKIHsKLSAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKLSAg
ICBhcHBlbmRTZWdtZW50KHJlY3QueCgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgp
KTsKLSAgICBhcHBlbmRTcGFuKHJlY3QubWF4WSgpKTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBl
OjphcHBlbmRTcGFuKGludCB5KQogewotICAgIG1fc3BhbnMuYXBwZW5kKFNwYW4oeSwgbV9zZWdt
ZW50cy5zaXplKCkpKTsKKyAgICBtX3NwYW5zLmFwcGVuZCh7IHksIG1fc2VnbWVudHMuc2l6ZSgp
IH0pOwogfQogCiBib29sIFJlZ2lvbjo6U2hhcGU6OmNhbkNvYWxlc2NlKFNlZ21lbnRJdGVyYXRv
ciBiZWdpbiwgU2VnbWVudEl0ZXJhdG9yIGVuZCkKQEAgLTMzMSwyNyArMzY1LDYgQEAgdm9pZCBS
ZWdpb246OlNoYXBlOjpkdW1wKCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFJlZ2lvbjo6U2hh
cGU6OmlzVmFsaWQoKSBjb25zdAotewotICAgIGZvciAoYXV0byBzcGFuID0gc3BhbnNfYmVnaW4o
KSwgZW5kID0gc3BhbnNfZW5kKCk7IHNwYW4gIT0gZW5kICYmIHNwYW4gKyAxICE9IGVuZDsgKytz
cGFuKSB7Ci0gICAgICAgIGludCB5ID0gc3Bhbi0+eTsKLSAgICAgICAgaW50IGhlaWdodCA9IChz
cGFuICsgMSktPnkgLSB5OwotICAgICAgICAKLSAgICAgICAgaWYgKGhlaWdodCA8IDApCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChhdXRvIHNlZ21lbnQgPSBzZWdt
ZW50c19iZWdpbihzcGFuKSwgZW5kID0gc2VnbWVudHNfZW5kKHNwYW4pOyBzZWdtZW50ICE9IGVu
ZCAmJiBzZWdtZW50ICsgMSAhPSBlbmQ7IHNlZ21lbnQgKz0gMikgewotICAgICAgICAgICAgaW50
IHggPSAqc2VnbWVudDsKLSAgICAgICAgICAgIGludCB3aWR0aCA9ICooc2VnbWVudCArIDEpIC0g
eDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHdpZHRoIDwgMCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQogSW50UmVjdCBSZWdpb246OlNoYXBlOjpib3VuZHMoKSBjb25zdAogewogICAgIGlmIChp
c0VtcHR5KCkpCkBAIC0zOTcsMTIgKzQxMCw2IEBAIHZvaWQgUmVnaW9uOjpTaGFwZTo6dHJhbnNs
YXRlKGNvbnN0IEludFMKICAgICAgICAgbV9zcGFuc1tpXS55ICs9IG9mZnNldC5oZWlnaHQoKTsK
IH0KIAotdm9pZCBSZWdpb246OlNoYXBlOjpzd2FwKFNoYXBlJiBvdGhlcikKLXsKLSAgICBtX3Nl
Z21lbnRzLnN3YXAob3RoZXIubV9zZWdtZW50cyk7Ci0gICAgbV9zcGFucy5zd2FwKG90aGVyLm1f
c3BhbnMpOwotfQotCiBlbnVtIHsKICAgICBTaGFwZTEsCiAgICAgU2hhcGUyLApAQCAtNTY3LDcx
ICs1NzQsODEgQEAgdm9pZCBSZWdpb246OmR1bXAoKSBjb25zdAogewogICAgIHByaW50ZigiQm91
bmRzOiAoJWQsICVkLCAlZCwgJWQpXG4iLAogICAgICAgICAgICBtX2JvdW5kcy54KCksIG1fYm91
bmRzLnkoKSwgbV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpOwotICAgIG1fc2hh
cGUuZHVtcCgpOworICAgIGlmIChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT5kdW1wKCk7CiB9
CiAjZW5kaWYKIAotdm9pZCBSZWdpb246OnVwZGF0ZUJvdW5kc0Zyb21TaGFwZSgpCi17Ci0gICAg
bV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOwotfQotCiB2b2lkIFJlZ2lvbjo6aW50ZXJzZWN0
KGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQogewogICAgIGlmIChtX2JvdW5kcy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91
bmRzKSkgewotICAgICAgICBtX3NoYXBlID0gU2hhcGUoKTsKKyAgICAgICAgbV9zaGFwZSA9IG51
bGxwdHI7CiAgICAgICAgIG1fYm91bmRzID0gSW50UmVjdCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGlmICghbV9zaGFwZSAmJiAhcmVnaW9uLm1fc2hhcGUpIHsKKyAgICAgICAgbV9i
b3VuZHMgPSBpbnRlcnNlY3Rpb24obV9ib3VuZHMsIHJlZ2lvbi5tX2JvdW5kcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBTaGFwZSBpbnRlcnNlY3RlZFNoYXBlID0gU2hhcGU6Omlu
dGVyc2VjdFNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7Ci0KLSAgICBtX3NoYXBlLnN3
YXAoaW50ZXJzZWN0ZWRTaGFwZSk7Ci0gICAgbV9ib3VuZHMgPSBtX3NoYXBlLmJvdW5kcygpOwor
ICAgIHNldFNoYXBlKFNoYXBlOjppbnRlcnNlY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDog
bV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91
bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp1bml0ZShjb25zdCBSZWdpb24mIHJlZ2lvbikKIHsK
ICAgICBpZiAocmVnaW9uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1Jl
Y3QoKSAmJiBtX2JvdW5kcy5jb250YWlucyhyZWdpb24ubV9ib3VuZHMpKQorICAgIGlmIChpc0Vt
cHR5KCkpIHsKKyAgICAgICAgbV9ib3VuZHMgPSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1f
c2hhcGUgPSByZWdpb24uY29weVNoYXBlKCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
aWYgKHJlZ2lvbi5pc1JlY3QoKSAmJiByZWdpb24ubV9ib3VuZHMuY29udGFpbnMobV9ib3VuZHMp
KSB7Ci0gICAgICAgIG1fc2hhcGUgPSByZWdpb24ubV9zaGFwZTsKICAgICAgICAgbV9ib3VuZHMg
PSByZWdpb24ubV9ib3VuZHM7CisgICAgICAgIG1fc2hhcGUgPSBudWxscHRyOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIC8vIEZJWE1FOiBXZSBtYXkgd2FudCBhbm90aGVyIHdheSB0byBj
b25zdHJ1Y3QgYSBSZWdpb24gd2l0aG91dCBkb2luZyB0aGlzIHRlc3Qgd2hlbiB3ZSBleHBlY3Qg
aXQgdG8gYmUgZmFsc2UuCi0gICAgaWYgKCFpc1JlY3QoKSAmJiBjb250YWlucyhyZWdpb24pKQor
ICAgIGlmIChjb250YWlucyhyZWdpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFwZSB1
bml0ZWRTaGFwZSA9IFNoYXBlOjp1bmlvblNoYXBlcyhtX3NoYXBlLCByZWdpb24ubV9zaGFwZSk7
Ci0KLSAgICBtX3NoYXBlLnN3YXAodW5pdGVkU2hhcGUpOwotICAgIG1fYm91bmRzLnVuaXRlKHJl
Z2lvbi5tX2JvdW5kcyk7CisgICAgc2V0U2hhcGUoU2hhcGU6OnVuaW9uU2hhcGVzKG1fc2hhcGUg
PyAqbV9zaGFwZSA6IG1fYm91bmRzLCByZWdpb24ubV9zaGFwZSA/ICpyZWdpb24ubV9zaGFwZSA6
IHJlZ2lvbi5tX2JvdW5kcykpOwogfQogCiB2b2lkIFJlZ2lvbjo6c3VidHJhY3QoY29uc3QgUmVn
aW9uJiByZWdpb24pCiB7Ci0gICAgaWYgKG1fYm91bmRzLmlzRW1wdHkoKSkKKyAgICBpZiAoaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHJlZ2lvbi5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBpZiAoIW1fYm91bmRzLmludGVyc2VjdHMocmVnaW9uLm1fYm91bmRz
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhcGUgc3VidHJhY3RlZFNoYXBlID0gU2hhcGU6
OnN1YnRyYWN0U2hhcGVzKG1fc2hhcGUsIHJlZ2lvbi5tX3NoYXBlKTsKLQotICAgIG1fc2hhcGUu
c3dhcChzdWJ0cmFjdGVkU2hhcGUpOwotICAgIG1fYm91bmRzID0gbV9zaGFwZS5ib3VuZHMoKTsK
KyAgICBzZXRTaGFwZShTaGFwZTo6c3VidHJhY3RTaGFwZXMobV9zaGFwZSA/ICptX3NoYXBlIDog
bV9ib3VuZHMsIHJlZ2lvbi5tX3NoYXBlID8gKnJlZ2lvbi5tX3NoYXBlIDogcmVnaW9uLm1fYm91
bmRzKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjp0cmFuc2xhdGUoY29uc3QgSW50U2l6ZSYgb2Zmc2V0
KQogewogICAgIG1fYm91bmRzLm1vdmUob2Zmc2V0KTsKLSAgICBtX3NoYXBlLnRyYW5zbGF0ZShv
ZmZzZXQpOworICAgIGlmIChtX3NoYXBlKQorICAgICAgICBtX3NoYXBlLT50cmFuc2xhdGUob2Zm
c2V0KTsKIH0KIAordm9pZCBSZWdpb246OnNldFNoYXBlKFNoYXBlJiYgc2hhcGUpCit7CisgICAg
bV9ib3VuZHMgPSBzaGFwZS5ib3VuZHMoKTsKKworICAgIGlmIChzaGFwZS5pc1JlY3QoKSkgewor
ICAgICAgICBtX3NoYXBlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghbV9zaGFwZSkKKyAgICAgICAgbV9zaGFwZSA9IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+
KFdURk1vdmUoc2hhcGUpKTsKKyAgICBlbHNlCisgICAgICAgICptX3NoYXBlID0gV1RGTW92ZShz
aGFwZSk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgJKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw4IEBACiAjZGVmaW5lIFJlZ2lvbl9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29u
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCwxMSArNDAsMTkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFJlZ2lvbigpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZ2lvbihjb25zdCBJbnRSZWN0Jik7CiAKKyAgICBXRUJDT1JFX0VY
UE9SVCBSZWdpb24oY29uc3QgUmVnaW9uJik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVnaW9uKFJl
Z2lvbiYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIH5SZWdpb24oKTsKKworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZ2lvbiYgb3BlcmF0b3I9KGNvbnN0IFJlZ2lvbiYpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZ2lvbiYgb3BlcmF0b3I9KFJlZ2lvbiYmKTsKKwogICAgIEludFJlY3QgYm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX2JvdW5kcy5pc0VtcHR5KCk7IH0KLSAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhcGUuaXNSZWN0KCk7IH0KKyAgICBib29sIGlzUmVjdCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3NoYXBlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdD4gcmVjdHMo
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8SW50UmVjdCwgMT4gcmVjdHMoKSBj
b25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdW5pdGUoY29uc3QgUmVnaW9uJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnRlcnNlY3QoY29uc3QgUmVnaW9uJik7CkBAIC01OCw0
OCArNjgsMzEgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgcmVn
aW9uIGludGVyc2VjdHMgYW55IHBhcnQgb2YgdGhpcyByZWdpb24uCiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IFJlZ2lvbiYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdW5zaWduZWQgdG90YWxBcmVhKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdWlu
dDY0X3QgdG90YWxBcmVhKCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBncmlkU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcGUuZ3JpZFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGdyaWRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFwZSA/IG1fc2hhcGUtPmdyaWRTaXplKCkgOiAwOyB9CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcGUuaXNWYWxpZCgpOyB9CisgICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxSZWdpb24+IGRlY29kZShEZWNvZGVy
Jik7CisgICAgLy8gRklYTUU6IFJlbW92ZSBsZWdhY3kgZGVjb2RlLgorICAgIHRlbXBsYXRlPGNs
YXNzIERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgUmVnaW9uJik7CiAKLSAg
ICAvLyBUaGlzIGlzIGludGVybmFsIHRvIFJlZ2lvbiwgYnV0IGV4cG9zZWQganVzdCBmb3IgZW5j
b2RpbmcuCi0gICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgYSBiZXR0ZXIgd2F5IHRvIGVuY29kZSBX
ZWJDb3JlIGNsYXNzZXMuCitwcml2YXRlOgogICAgIHN0cnVjdCBTcGFuIHsKLSAgICAgICAgU3Bh
bigpCi0gICAgICAgICAgICA6IHkoMCkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KDApCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFNwYW4oaW50IHksIHNpemVfdCBzZWdtZW50
SW5kZXgpCi0gICAgICAgICAgICA6IHkoeSkKLSAgICAgICAgICAgICwgc2VnbWVudEluZGV4KHNl
Z21lbnRJbmRleCkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIGludCB5IHsgMCB9Owor
ICAgICAgICBzaXplX3Qgc2VnbWVudEluZGV4IHsgMCB9OwogCi0gICAgICAgIGludCB5OwotICAg
ICAgICBzaXplX3Qgc2VnbWVudEluZGV4OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxTcGFuPiBkZWNvZGUoRGVjb2RlciYpOwogICAgIH07CiAK
LSAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4KLSAgICBjb25zdCBWZWN0b3I8aW50
LCAzMj4mIHNoYXBlU2VnbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3NoYXBlLnNlZ21lbnRzKCk7
IH0KLSAgICBjb25zdCBWZWN0b3I8U3BhbiwgMTY+JiBzaGFwZVNwYW5zKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFwZS5zcGFucygpOyB9Ci0KLSAgICB2b2lkIHNldFNoYXBlU2VnbWVudHMoY29uc3Qg
VmVjdG9yPGludD4mIHNlZ21lbnRzKSB7IG1fc2hhcGUuc2V0U2VnbWVudHMoc2VnbWVudHMpOyB9
Ci0gICAgdm9pZCBzZXRTaGFwZVNwYW5zKGNvbnN0IFZlY3RvcjxTcGFuPiYgc3BhbnMpIHsgbV9z
aGFwZS5zZXRTcGFucyhzcGFucyk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZUJv
dW5kc0Zyb21TaGFwZSgpOwotCi1wcml2YXRlOgotCiAgICAgY2xhc3MgU2hhcGUgewogICAgIHB1
YmxpYzoKLSAgICAgICAgU2hhcGUoKTsKKyAgICAgICAgU2hhcGUoKSA9IGRlZmF1bHQ7CiAgICAg
ICAgIFNoYXBlKGNvbnN0IEludFJlY3QmKTsKIAogICAgICAgICBJbnRSZWN0IGJvdW5kcygpIGNv
bnN0OwpAQCAtMTIwLDIyICsxMTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIFNoYXBl
IHN1YnRyYWN0U2hhcGVzKGNvbnN0IFNoYXBlJiBzaGFwZTEsIGNvbnN0IFNoYXBlJiBzaGFwZTIp
OwogCiAgICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEludFNpemUm
KTsKLSAgICAgICAgdm9pZCBzd2FwKFNoYXBlJik7CiAKICAgICAgICAgc3RydWN0IENvbXBhcmVD
b250YWluc09wZXJhdGlvbjsKICAgICAgICAgc3RydWN0IENvbXBhcmVJbnRlcnNlY3RzT3BlcmF0
aW9uOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbXBhcmVPcGVyYXRpb24+CiAgICAg
ICAgIHN0YXRpYyBib29sIGNvbXBhcmVTaGFwZXMoY29uc3QgU2hhcGUmIHNoYXBlMSwgY29uc3Qg
U2hhcGUmIHNoYXBlMik7Ci0gICAgICAgIAotICAgICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
VmFsaWQoKSBjb25zdDsKLQotICAgICAgICAvLyBGb3IgZW5jb2RpbmcvZGVjb2Rpbmcgb25seS4K
LSAgICAgICAgY29uc3QgVmVjdG9yPGludCwgMzI+JiBzZWdtZW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fc2VnbWVudHM7IH0KLSAgICAgICAgY29uc3QgVmVjdG9yPFNwYW4sIDE2PiYgc3BhbnMoKSBj
b25zdCB7IHJldHVybiBtX3NwYW5zOyB9CiAKLSAgICAgICAgdm9pZCBzZXRTZWdtZW50cyhjb25z
dCBWZWN0b3I8aW50PiYgc2VnbWVudHMpIHsgbV9zZWdtZW50cyA9IHNlZ21lbnRzOyB9Ci0gICAg
ICAgIHZvaWQgc2V0U3BhbnMoY29uc3QgVmVjdG9yPFNwYW4+JiBzcGFucykgeyBtX3NwYW5zID0g
c3BhbnM7IH0KKyAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OworICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0
aW9uYWw8U2hhcGU+IGRlY29kZShEZWNvZGVyJik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAg
IHZvaWQgZHVtcCgpIGNvbnN0OwpAQCAtMTYyLDEyICsxNDgsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNoYXBlJik7CiAg
ICAgfTsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gY29weVNoYXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFwZSA/IHN0ZDo6bWFrZV91bmlxdWU8U2hhcGU+KCptX3NoYXBlKSA6IG51bGxw
dHI7IH0KKyAgICB2b2lkIHNldFNoYXBlKFNoYXBlJiYpOworCiAgICAgSW50UmVjdCBtX2JvdW5k
czsKLSAgICBTaGFwZSBtX3NoYXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gbV9zaGFw
ZTsKIAogICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaW9uJiwgY29uc3QgUmVn
aW9uJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaGFwZSYsIGNvbnN0IFNo
YXBlJik7CiAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTcGFuJiwgY29uc3QgU3Bh
biYpOworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3QgU3BhbiYsIGNvbnN0IFNwYW4m
KTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgUmVnaW9uIGludGVyc2VjdChjb25zdCBSZWdpb24mIGEs
IGNvbnN0IFJlZ2lvbiYgYikKQEAgLTE3Nyw3ICsxNjcsNyBAQCBzdGF0aWMgaW5saW5lIFJlZ2lv
biBpbnRlcnNlY3QoY29uc3QgUmVnCiAKICAgICByZXR1cm4gcmVzdWx0OwogfQotICAgIAorCiBz
dGF0aWMgaW5saW5lIFJlZ2lvbiBzdWJ0cmFjdChjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lv
biYgYikKIHsKICAgICBSZWdpb24gcmVzdWx0KGEpOwpAQCAtMTk2LDcgKzE4Niw3IEBAIHN0YXRp
YyBpbmxpbmUgUmVnaW9uIHRyYW5zbGF0ZShjb25zdCBSZWcKIAogaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZWdpb24mIGEsIGNvbnN0IFJlZ2lvbiYgYikKIHsKLSAgICByZXR1cm4gYS5t
X2JvdW5kcyA9PSBiLm1fYm91bmRzICYmIGEubV9zaGFwZSA9PSBiLm1fc2hhcGU7CisgICAgcmV0
dXJuIGEubV9ib3VuZHMgPT0gYi5tX2JvdW5kcyAmJiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGEu
bV9zaGFwZSwgYi5tX3NoYXBlKTsKIH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVn
aW9uJiBhLCBjb25zdCBSZWdpb24mIGIpCiB7CkBAIC0yMTIsMTEgKzIwMiwxMDggQEAgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpb246OlNwYQogewogICAgIHJldHVybiBhLnkgPT0g
Yi55ICYmIGEuc2VnbWVudEluZGV4ID09IGIuc2VnbWVudEluZGV4OwogfQorCiBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFJlZ2lvbjo6U3BhbiYgYSwgY29uc3QgUmVnaW9uOjpTcGFuJiBi
KQogewogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+
Cit2b2lkIFJlZ2lvbjo6U3Bhbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7Cisg
ICAgZW5jb2RlciA8PCB5IDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzZWdtZW50SW5kZXgpOwor
fQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBSZWdp
b246OlNwYW46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE9wdGlvbmFsPGludD4g
eTsKKyAgICBkZWNvZGVyID4+IHk7CisgICAgaWYgKCF5KQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IHNlZ21lbnRJbmRleDsKKyAgICBkZWNvZGVyID4+IHNl
Z21lbnRJbmRleDsKKyAgICBpZiAoIXNlZ21lbnRJbmRleCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiB7IHsgKnksICpzZWdtZW50SW5kZXggfSB9OworfQorCit0ZW1wbGF0ZTxj
bGFzcyBFbmNvZGVyPgordm9pZCBSZWdpb246OlNoYXBlOjplbmNvZGUoRW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IG1fc2VnbWVudHM7CisgICAgZW5jb2RlciA8PCBt
X3NwYW5zOworfQorCit0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgorT3B0aW9uYWw8UmVnaW9uOjpT
aGFwZT4gUmVnaW9uOjpTaGFwZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgT3B0
aW9uYWw8VmVjdG9yPGludD4+IHNlZ21lbnRzOworICAgIGRlY29kZXIgPj4gc2VnbWVudHM7Cisg
ICAgaWYgKCFzZWdtZW50cykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9w
dGlvbmFsPFZlY3RvcjxSZWdpb246OlNwYW4+PiBzcGFuczsKKyAgICBkZWNvZGVyID4+IHNwYW5z
OworICAgIGlmICghc3BhbnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBT
aGFwZSBzaGFwZTsKKyAgICBzaGFwZS5tX3NlZ21lbnRzID0gV1RGTW92ZSgqc2VnbWVudHMpOwor
ICAgIHNoYXBlLm1fc3BhbnMgPSBXVEZNb3ZlKCpzcGFucyk7CisKKyAgICByZXR1cm4geyBzaGFw
ZSB9OworfQorCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBSZWdpb246OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgbV9ib3VuZHM7CisgICAg
Ym9vbCBoYXNTaGFwZSA9ICEhbV9zaGFwZTsKKyAgICBlbmNvZGVyIDw8IGhhc1NoYXBlOworICAg
IGlmIChoYXNTaGFwZSkKKyAgICAgICAgZW5jb2RlciA8PCAqbV9zaGFwZTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFJlZ2lvbj4gUmVnaW9uOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxJbnRSZWN0PiBib3VuZHM7CisgICAgZGVjb2Rl
ciA+PiBib3VuZHM7CisgICAgaWYgKCFib3VuZHMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBPcHRpb25hbDxib29sPiBoYXNTaGFwZTsKKyAgICBkZWNvZGVyID4+IGhhc1No
YXBlOworICAgIGlmICghaGFzU2hhcGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBSZWdpb24gcmVnaW9uID0geyAqYm91bmRzIH07CisKKyAgICBpZiAoKmhhc1NoYXBlKSB7
CisgICAgICAgIE9wdGlvbmFsPFNoYXBlPiBzaGFwZTsKKyAgICAgICAgZGVjb2RlciA+PiBzaGFw
ZTsKKyAgICAgICAgaWYgKCFzaGFwZSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIHJlZ2lvbi5tX3NoYXBlID0gc3RkOjptYWtlX3VuaXF1ZTxTaGFwZT4oV1RGTW92
ZSgqc2hhcGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyByZWdpb24gfTsKK30KKwordGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4KK2Jvb2wgUmVnaW9uOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
UmVnaW9uJiByZWdpb24pCit7CisgICAgT3B0aW9uYWw8UmVnaW9uPiBkZWNvZGVkUmVnaW9uOwor
ICAgIGRlY29kZXIgPj4gZGVjb2RlZFJlZ2lvbjsKKyAgICBpZiAoIWRlY29kZWRSZWdpb24pCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZWdpb24gPSBXVEZNb3ZlKCpkZWNvZGVkUmVnaW9u
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gUmVnaW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwCShyZXZpc2lv
biAyNDI5OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDcgKzMzNSw3IEBAIHZv
aWQgVGV4dHVyZU1hcHBlckxheWVyOjpwYWludFVzaW5nT3ZlcmwKICAgICB9CiAKICAgICBub25P
dmVybGFwUmVnaW9uLnRyYW5zbGF0ZShvcHRpb25zLm9mZnNldCk7Ci0gICAgVmVjdG9yPEludFJl
Y3Q+IHJlY3RzID0gbm9uT3ZlcmxhcFJlZ2lvbi5yZWN0cygpOworICAgIGF1dG8gcmVjdHMgPSBu
b25PdmVybGFwUmVnaW9uLnJlY3RzKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykg
ewogICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhvcHRpb25zLnRleHR1cmVNYXBwZXIuY2xp
cEJvdW5kcygpKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDI5OTMpCisrKyBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE5LTAzLTE0
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBS
ZWdpb24gZm9yIHNpbmdsZSByZWN0YW5nbGUgY2FzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk1NzQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2lt
b24gRnJhc2VyLgorCisgICAgICAgICogU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVUcmFuc2FjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJh
bnNhY3Rpb246OkxheWVyUHJvcGVydGllczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxFdmVu
dFRyYWNraW5nUmVnaW9ucz46OmRlY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8
UmVnaW9uOjpTcGFuPjo6ZW5jb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxSZWdpb246OlNwYW4+OjpkZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAoSVBDOjpBcmd1
bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZSk6IERlbGV0ZWQuCisgICAgICAgIChJUEM6OkFyZ3Vt
ZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmg6CisKIDIwMTktMDMtMTQgIFBlciBBcm5lIFZvbGxhbiAgPHB2
b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFdlYktpdCBjcmFzaGVzIHdoZW4gb3Bl
bmluZyBwYWdlcyBkb2N1bWVudHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3
LDggKzM2Nyw5IEBAIHZvaWQgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KIAog
Ym9vbCBBcmd1bWVudENvZGVyPEV2ZW50VHJhY2tpbmdSZWdpb25zPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIsIEV2ZW50VHJhY2tpbmdSZWdpb25zJiBldmVudFRyYWNraW5nUmVnaW9ucykKIHsK
LSAgICBSZWdpb24gYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb247Ci0gICAgaWYgKCFkZWNvZGVy
LmRlY29kZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbikpCisgICAgT3B0aW9uYWw8UmVnaW9u
PiBhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbjsKKyAgICBkZWNvZGVyID4+IGFzeW5jaHJvbm91
c0Rpc3BhdGNoUmVnaW9uOworICAgIGlmICghYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIYXNoTWFwPFN0cmluZywgUmVnaW9uPiBldmVudFNw
ZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnM7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShldmVudFNwZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpKQpAQCAtMzc4LDcgKzM3
OSw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxFdmVudFRyYWNraW5nUmVnaW9ucz4KICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRvdWNoQWN0aW9uRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgotICAgIGV2ZW50VHJhY2tpbmdSZWdpb25zLmFzeW5jaHJvbm91c0Rpc3BhdGNoUmVn
aW9uID0gV1RGTW92ZShhc3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbik7CisgICAgZXZlbnRUcmFj
a2luZ1JlZ2lvbnMuYXN5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb24gPSBXVEZNb3ZlKCphc3luY2hy
b25vdXNEaXNwYXRjaFJlZ2lvbik7CiAgICAgZXZlbnRUcmFja2luZ1JlZ2lvbnMuZXZlbnRTcGVj
aWZpY1N5bmNocm9ub3VzRGlzcGF0Y2hSZWdpb25zID0gV1RGTW92ZShldmVudFNwZWNpZmljU3lu
Y2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpOwogI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykKICAg
ICBldmVudFRyYWNraW5nUmVnaW9ucy50b3VjaEFjdGlvbkRhdGEgPSBXVEZNb3ZlKHRvdWNoQWN0
aW9uRGF0YSk7CkBAIC05MDIsNjYgKzkwMyw2IEBAIE9wdGlvbmFsPFJlY2VudFNlYXJjaD4gQXJn
dW1lbnRDb2RlcjxSZWMKICAgICByZXR1cm4ge3sgV1RGTW92ZSgqc3RyaW5nKSwgV1RGTW92ZSgq
dGltZSkgfX07CiB9CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVnaW9uOjpT
cGFuPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBSZWdpb246OlNw
YW4mKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8UmVnaW9uOjpTcGFuPiBkZWNvZGUoRGVjb2RlciYp
OwotfTsKLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbjo6U3Bhbj46OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBSZWdpb246OlNwYW4mIHNwYW4pCi17Ci0gICAgZW5jb2RlciA8PCBz
cGFuLnk7Ci0gICAgZW5jb2RlciA8PCAodWludDY0X3Qpc3Bhbi5zZWdtZW50SW5kZXg7Ci19Ci0K
LU9wdGlvbmFsPFJlZ2lvbjo6U3Bhbj4gQXJndW1lbnRDb2RlcjxSZWdpb246OlNwYW4+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBSZWdpb246OlNwYW4gc3BhbjsKLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHNwYW4ueSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgCi0gICAgdWludDY0X3Qgc2VnbWVudEluZGV4OwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c2VnbWVudEluZGV4KSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAKLSAgICBz
cGFuLnNlZ21lbnRJbmRleCA9IHNlZ21lbnRJbmRleDsKLSAgICByZXR1cm4gV1RGTW92ZShzcGFu
KTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24u
c2hhcGVTZWdtZW50cygpKTsKLSAgICBlbmNvZGVyLmVuY29kZShyZWdpb24uc2hhcGVTcGFucygp
KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZ2lvbj46OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyLCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBWZWN0b3I8aW50PiBzZWdtZW50czsKLSAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHNlZ21lbnRzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgVmVjdG9yPFJlZ2lvbjo6U3Bhbj4gc3BhbnM7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
cGFucykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZWdpb24uc2V0U2hhcGVT
ZWdtZW50cyhzZWdtZW50cyk7Ci0gICAgcmVnaW9uLnNldFNoYXBlU3BhbnMoc3BhbnMpOwotICAg
IHJlZ2lvbi51cGRhdGVCb3VuZHNGcm9tU2hhcGUoKTsKLSAgICAKLSAgICBpZiAoIXJlZ2lvbi5p
c1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1PcHRpb25hbDxSZWdpb24+IEFyZ3VtZW50Q29kZXI8UmVnaW9uPjo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCi17Ci0gICAgUmVnaW9uIHJlZ2lvbjsKLSAgICBpZiAoIWRlY29kZShkZWNvZGVy
LCByZWdpb24pKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIHJl
Z2lvbjsKLX0KLQogdm9pZCBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyLCBjb25zdCBMZW5ndGgmIGxlbmd0aCkKIHsKICAgICBTaW1wbGVBcmd1bWVudENvZGVy
PExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBsZW5ndGgpOwpAQCAtOTcyLDcgKzkxMyw2IEBAIGJv
b2wgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoRGVjb2QKICAgICByZXR1cm4gU2ltcGxl
QXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgbGVuZ3RoKTsKIH0KIAotCiB2
b2lkIEFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKEVuY29kZXImIGVu
Y29kZXIsIGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYgdmlld3BvcnRBdHRyaWJ1dGVzKQogewog
ICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8Vmlld3BvcnRBdHRyaWJ1dGVzPjo6ZW5jb2RlKGVuY29k
ZXIsIHZpZXdwb3J0QXR0cmlidXRlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwx
MiArMzI0LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogICAg
IHN0YXRpYyBPcHRpb25hbDxXZWJDb3JlOjpQYXRoPiBkZWNvZGUoRGVjb2RlciYpOwogfTsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpSZWdpb24+IHsKLSAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgV2ViQ29yZTo6UmVnaW9uJik7Ci0gICAgc3Rh
dGljIE9wdGlvbmFsPFdlYkNvcmU6OlJlZ2lvbj4gZGVjb2RlKERlY29kZXImKTsKLX07Ci0KIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TGVuZ3RoPiB7CiAgICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpMZW5ndGgmKTsKICAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6Okxlbmd0aCYpOwpJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3Jl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dl
YktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdT
dG9yZTo6ZHJhd0luQ29udAogICAgIC8vIE90aGVyd2lzZSwgcmVwYWludCB0aGUgZW50aXJlIGJv
dW5kaW5nIGJveCBvZiB0aGUgZGlydHkgcmVnaW9uLgogICAgIFdlYkNvcmU6OkludFJlY3QgZGly
dHlCb3VuZHMgPSBtX2RpcnR5UmVnaW9uLmJvdW5kcygpOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6
OkludFJlY3Q+IGRpcnR5UmVjdHMgPSBtX2RpcnR5UmVnaW9uLnJlY3RzKCk7CisgICAgYXV0byBk
aXJ0eVJlY3RzID0gbV9kaXJ0eVJlZ2lvbi5yZWN0cygpOwogICAgIGlmIChkaXJ0eVJlY3RzLnNp
emUoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6d2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQg
fHwgbV9kaXJ0eVJlZ2lvbi50b3RhbEFyZWEoKSA+IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6
d2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCAqIGRpcnR5Qm91bmRzLndpZHRoKCkgKiBkaXJ0
eUJvdW5kcy5oZWlnaHQoKSkgewogICAgICAgICBkaXJ0eVJlY3RzLmNsZWFyKCk7CiAgICAgICAg
IGRpcnR5UmVjdHMuYXBwZW5kKGRpcnR5Qm91bmRzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubW0JKHJldmlzaW9uIDI0Mjk5MykKKysrIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTE1LDEwICs1MTUsMTEgQEAgYm9vbCBSZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbjo6TGF5ZXJQcgogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc0V2ZW50UmVnaW9u
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGhhc0V2ZW50UmVnaW9u
KSB7Ci0gICAgICAgICAgICBhdXRvIGV2ZW50UmVnaW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJD
b3JlOjpSZWdpb24+KCk7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKCpldmVudFJl
Z2lvbikpCisgICAgICAgICAgICBPcHRpb25hbDxXZWJDb3JlOjpSZWdpb24+IGV2ZW50UmVnaW9u
OworICAgICAgICAgICAgZGVjb2RlciA+PiBldmVudFJlZ2lvbjsKKyAgICAgICAgICAgIGlmICgh
ZXZlbnRSZWdpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
cmVzdWx0LmV2ZW50UmVnaW9uID0gV1RGTW92ZShldmVudFJlZ2lvbik7CisgICAgICAgICAgICBy
ZXN1bHQuZXZlbnRSZWdpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lvbj4oV1RGTW92ZSgqZXZl
bnRSZWdpb24pKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMjQyOTkzKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNyArNDc0LDcg
QEAgdm9pZCBXZWJWaWV3OjpwYWludChIREMgaGRjLCBjb25zdCBJbnRSZQogICAgICAgICBjYWly
b19kZXN0cm95KGNvbnRleHQpOwogICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFj
ZSk7CiAKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IHVucGFpbnRlZFJlY3RzID0gdW5wYWludGVk
UmVnaW9uLnJlY3RzKCk7CisgICAgICAgIGF1dG8gdW5wYWludGVkUmVjdHMgPSB1bnBhaW50ZWRS
ZWdpb24ucmVjdHMoKTsKICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogdW5wYWludGVkUmVjdHMp
CiAgICAgICAgICAgICBkcmF3UGFnZUJhY2tncm91bmQoaGRjLCBtX3BhZ2UuZ2V0KCksIHJlY3Qp
OwogICAgIH0gZWxzZQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAkocmV2aXNpb24gMjQyOTkz
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NzYsNyArNjc2LDcgQEAgdm9pZCBEcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3M6OmRpcwog
ICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlID0gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgc2hv
dWxkUGFpbnRCb3VuZHNSZWN0KGNvbnN0IEludFJlY3QmIGJvdW5kcywgY29uc3QgVmVjdG9yPElu
dFJlY3Q+JiByZWN0cykKK3N0YXRpYyBib29sIHNob3VsZFBhaW50Qm91bmRzUmVjdChjb25zdCBJ
bnRSZWN0JiBib3VuZHMsIGNvbnN0IFZlY3RvcjxJbnRSZWN0LCAxPiYgcmVjdHMpCiB7CiAgICAg
Y29uc3Qgc2l6ZV90IHJlY3RUaHJlc2hvbGQgPSAxMDsKICAgICBjb25zdCBkb3VibGUgd2FzdGVk
U3BhY2VUaHJlc2hvbGQgPSAwLjc1OwpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgRHJhd2luZ0Fy
ZWFDb29yZGluYXRlZEdyYXBoaWNzOjpkaXMKICAgICBpZiAoIWJpdG1hcC0+Y3JlYXRlSGFuZGxl
KHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9y
PEludFJlY3Q+IHJlY3RzID0gbV9kaXJ0eVJlZ2lvbi5yZWN0cygpOworICAgIGF1dG8gcmVjdHMg
PSBtX2RpcnR5UmVnaW9uLnJlY3RzKCk7CiAgICAgaWYgKHNob3VsZFBhaW50Qm91bmRzUmVjdChi
b3VuZHMsIHJlY3RzKSkgewogICAgICAgICByZWN0cy5jbGVhcigpOwogICAgICAgICByZWN0cy5h
cHBlbmQoYm91bmRzKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>