<?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>131180</bug_id>
          
          <creation_ts>2014-04-03 12:50:26 -0700</creation_ts>
          <short_desc>Merge ShapeInfo &amp; ShapeOutsideInfo now that ShapeInsideInfo is no more</short_desc>
          <delta_ts>2014-04-03 16:05:24 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>98664</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Bem Jones-Bey">bjonesbe</reporter>
          <assigned_to name="Bem Jones-Bey">bjonesbe</assigned_to>
          <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mkwst</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>997271</commentid>
    <comment_count>0</comment_count>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2014-04-03 12:50:26 -0700</bug_when>
    <thetext>Merge ShapeInfo &amp; ShapeOutsideInfo now that ShapeInsideInfo is no more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997274</commentid>
    <comment_count>1</comment_count>
      <attachid>228533</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2014-04-03 12:57:05 -0700</bug_when>
    <thetext>Created attachment 228533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997276</commentid>
    <comment_count>2</comment_count>
      <attachid>228533</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2014-04-03 13:22:50 -0700</bug_when>
    <thetext>Comment on attachment 228533
Patch

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

&gt; Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp:123
&gt; +bool checkShapeImageOrigin(Document&amp; document, CachedImage&amp; cachedImage)

This function is only used by ShapeOutsideInfo::isEnabledFor. Can we just make it static?

&gt; Source/WebCore/rendering/shapes/ShapeOutsideInfo.h:125
&gt; +bool checkShapeImageOrigin(Document&amp;, CachedImage&amp;);

...and we won&apos;t need this.

&gt; Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp:197
&gt; +inline LayoutUnit borderBeforeInWritingMode(const RenderBox&amp; renderer, WritingMode writingMode)

We have some inlines like this, would it make sense to make it inline statics?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997313</commentid>
    <comment_count>3</comment_count>
      <attachid>228545</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2014-04-03 14:40:13 -0700</bug_when>
    <thetext>Created attachment 228545
Patch

Updated for comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997323</commentid>
    <comment_count>4</comment_count>
      <attachid>228545</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-04-03 15:07:08 -0700</bug_when>
    <thetext>Comment on attachment 228545
Patch

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

r=me

&gt; Source/WebCore/rendering/shapes/ShapeOutsideInfo.h:93
&gt; +        InfoMap::AddResult result = infoMap.add(&amp;key, std::make_unique&lt;ShapeOutsideInfo&gt;(key));

I&apos;d use &quot;auto&quot; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997330</commentid>
    <comment_count>5</comment_count>
      <attachid>228548</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2014-04-03 15:25:59 -0700</bug_when>
    <thetext>Created attachment 228548
Patch

Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997352</commentid>
    <comment_count>6</comment_count>
      <attachid>228548</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-03 16:05:17 -0700</bug_when>
    <thetext>Comment on attachment 228548
Patch

Clearing flags on attachment: 228548

Committed r166752: &lt;http://trac.webkit.org/changeset/166752&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997353</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-03 16:05:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228533</attachid>
            <date>2014-04-03 12:57:05 -0700</date>
            <delta_ts>2014-04-03 14:40:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131180-20140403125918.patch</filename>
            <type>text/plain</type>
            <size>45592</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2NzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODJmMDBiMjMzYjEyZmMz
NGYxMjZlMGU4MWE2N2U0NGI0MjI3ZmVhZS4uZjQwNDk4ZTQ1ZDMzNTY4Y2ZhYjA0MTliNGE4MWMx
MWQ0ODhhY2QxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTA0LTAzICBCZW0g
Sm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgorCisgICAgICAgIE1lcmdlIFNoYXBlSW5m
byAmIFNoYXBlT3V0c2lkZUluZm8gbm93IHRoYXQgU2hhcGVJbnNpZGVJbmZvIGlzIG5vIG1vcmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTE4MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0
IFNoYXBlSW5zaWRlSW5mbyBpcyBnb25lLCBoYXZpbmcgYSBjbGFzcyBoaWVhcmFjaHkgYW5kCisg
ICAgICAgIHRlbXBsYXRlcyBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLiBBcyBhIGZpcnN0IHN0ZXAg
dG8gY2xlYW5pbmcgdXAgdGhlCisgICAgICAgIGNvZGUsIHRoaXMgcmVtb3ZlIFNoYXBlSW5mbyBh
bmQgcHV0cyBhbGwgb2YgaXRzIGZ1bmN0aW9uYWxpdHkgaW50bworICAgICAgICBTaGFwZU91dHNp
ZGVJbmZvLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZp
bHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZU91dHNpZGVJbmZvOjpjb21wdXRlZFNoYXBlUGh5c2ljYWxCb3VuZGluZ0JveCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpzaGFwZVRvUmVuZGVyZXJQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpzaGFwZVRvUmVuZGVyZXJTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJlZmVyZW5jZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91
dHNpZGVJbmZvOjpzZXRSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjaGVja1NoYXBlSW1hZ2VPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhcGVJbWFn
ZUFuZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhcGVJbWFnZU1hcmdpblJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZWRTaGFwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpib3JkZXJCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJvcmRlckFuZFBhZGRpbmdCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlT3V0c2lkZUluZm86OmxvZ2ljYWxUb3BPZmZzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Ym9yZGVyU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpib3JkZXJBbmRQYWRkaW5nU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpsb2dpY2FsTGVmdE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjb21wdXRlU2VnbWVudHNGb3JMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5p
bmdCbG9ja0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6c2hhcGVW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpzdHls
ZUZvcldyaXRpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1No
YXBlT3V0c2lkZUluZm8uaDoKKwogMjAxNC0wNC0wMyAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ29udGludWF0aW9ucyBjYXN0aW5nIGlzc3VlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCAzYjVkNjNiMDNmODljMmRkNDFlMmI4NmI1MTc1YmY2NjJhNDY2ZGMwLi43
M2UyYjRkZDg2ODVhOGZjN2EwMjEzMWI2MzQ1MGMwZjk1OWI4YzZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMjIyMSw3ICsyMjIxLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRl
cmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuY3BwCiAgICAgcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5n
bGVTaGFwZS5jcHAKICAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAotICAgIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbmZvLmNwcAogICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRl
SW5mby5jcHAKIAogICAgIHJlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IGRjMjM4OTU4
NzIyZGQ5ZWNkZDA5NTczNDI1MmJiMWZmMWJhZWQ3MjkuLjg2MTJkNzQzYjlmNWE0OGYyNjY0NzA1
OTExNGI3ZWVhMmEzZDcwN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvagpAQCAtMTEzMTEsNyArMTEzMTEsNiBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSYXN0ZXJTaGFwZS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUlu
Zm8uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xT
aGFwZU91dHNpZGVJbmZvLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzdmdcU1ZHUGF0aERhdGEuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0yMDA1OCw3ICsyMDA1Nyw2IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJhc3RlclNoYXBlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5m
by5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFw
ZUludGVydmFsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hh
cGVzXFNoYXBlT3V0c2lkZUluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzdmdcUmVuZGVyU1ZHQmxvY2suaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBjY2IzNWY1
NWIyMjZkMGI2N2U2ZWI0N2U3NmI5Mzg5MWNlZjU0ZjZlLi4yNDM1NGFiZWQ0YzVmNmRkNmE3ZTg1
ZDY4YjBjMDFmNTc4MzJlMzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC02ODAyLDkgKzY4MDIsNiBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5jcHAiPgog
ICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc2hhcGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5mby5j
cHAiPgotICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc2hhcGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBl
SW5zaWRlSW5mby5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc2hhcGVzPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xNDY0Myw5ICsxNDY0MCw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmgiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmdcc2hhcGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5mby5oIj4KLSAgICAgIDxGaWx0
ZXI+cmVuZGVyaW5nXHNoYXBlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8uaCI+CiAg
ICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzaGFwZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAwMWUyY2VkYzYyMmM1NWNjNmQ0ZTFmYjAxYTAyZWZlNzI0Mzc1YTg0Li5iZTJjYTk2ZmFj
MTAxN2Q0Njc2ODMyYTU1MDdlYzAwMWY0OWRiMWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzkyLDEwICs2MzkyLDggQEAK
IAkJRkQzNTkxOEYxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDM1OTE4RDEzOERC
MjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCAqLzsgfTsKIAkJRkQzNTkxOTAx
MzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzNTkxOEUxMzhEQjIyMDAwRTFFQkVDIC8q
IEF1ZGlvUGFyYW1UaW1lbGluZS5oICovOyB9OwogCQlGRDQ1QTk0RjE3NUQzRjNFMDBDMjFFQzgg
LyogU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZEMDhBODdGMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZENDVBOTUwMTc1RDNGM0UwMEMyMUVDOCAv
KiBTaGFwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEMDhBODgxMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRDQ1QTk1MjE3NUQzRjNFMDBD
MjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lk
ZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRDQ1QTk1MzE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0UxNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlLmNwcCAqLzsgfTsKLQkJRkQ0NUE5NTQxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5m
by5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4
QTg4MDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmNwcCAqLzsgfTsKIAkJRkQ0NUE5NTYx
NzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlT3V0c2lkZUluZm8uY3BwICovOyB9OwogCQlGRDQ1QTk1NzE3NUQ0MTRDMDBDMjFFQzgg
LyogUG9seWdvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRDA4QTg3QjE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkQ0NUE5NTgxNzVE
NDE0QzAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFu
Z2xlU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTM3MDYsOCArMTM3MDQsNiBAQAogCQlGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyog
UmVjdGFuZ2xlU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVjdGFu
Z2xlU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwOEE4N0UxNzVEMzky
NjAwMkNEMzYwIC8qIFNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwOEE4N0YxNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZEMDhBODgwMTc1RDM5MjYw
MDJDRDM2MCAvKiBTaGFwZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2hhcGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQwOEE4
ODExNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaGFwZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQw
OEE4ODUxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2hhcGVJbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRDA4QTg4NjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZU91dHNpZGVJbmZvLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlT3V0c2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2hhcGVPdXRzaWRlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI1NDAs
OCArMjI1MzYsNiBAQAogCQkJCUZEMDhBODdEMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVT
aGFwZS5oICovLAogCQkJCUZEMDhBODdFMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5jcHAgKi8s
CiAJCQkJRkQwOEE4N0YxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi8sCi0JCQkJRkQwOEE4
ODAxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5jcHAgKi8sCi0JCQkJRkQwOEE4ODExNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovLAogCQkJCUZEMDhBODg1MTc1RDM5MjYwMDJD
RDM2MCAvKiBTaGFwZUludGVydmFsLmggKi8sCiAJCQkJRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwICovLAogCQkJCUZEMDhBODg3MTc1RDM5MjYwMDJDRDM2
MCAvKiBTaGFwZU91dHNpZGVJbmZvLmggKi8sCkBAIC0yNTQ5MSw3ICsyNTQ4NSw2IEBACiAJCQkJ
QkM1RUI4QzQwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE2RDE2OTY0MTM0NkI0QzEwMDBFQjc3MCAvKiBTaGFkb3dSb290LmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRDQ1QTk0RjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCUZENDVBOTUwMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZUluZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZENDVBOTVCMTc1RDQxRUUwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1MjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRl
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNo
YXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtMjg4NjQsNyArMjg4NTcsNiBAQAogCQkJCUJD
NUVCOEMzMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE2RDE2OTYyMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZENDVBOTUzMTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlGRDQ1QTk1NDE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZENDVBOTU2MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNEE5NTREMEI0RURDQ0IwMDJEOEMzQyAvKiBT
aGFyZWRCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RTMwRDkxRTJCNDAwMEY4
OUVFIC8qIFNoYXJlZEJ1ZmZlckNGLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxOWRkZGEzZThjYjQzMTcwOWZkZTY4ZGFjZjgxMDI4MDk3Nzc3YzkzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0g
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTaGFwZUluZm8uaCIKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVk
ZSAiQm94U2hhcGUuaCIKLSNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlcklt
YWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJTaGFwZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRl
PGNsYXNzIFJlbmRlclR5cGU+Ci12b2lkIFNoYXBlSW5mbzxSZW5kZXJUeXBlPjo6c2V0UmVmZXJl
bmNlQm94TG9naWNhbFNpemUoTGF5b3V0U2l6ZSBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSkK
LXsKLSAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gdGhpcy0+c3R5bGVGb3JXcml0
aW5nTW9kZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgc3dpdGNoIChyZWZlcmVu
Y2VCb3goKSkgewotICAgIGNhc2UgTWFyZ2luQm94OgotICAgICAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUpCi0gICAgICAgICAgICBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5leHBh
bmQobV9yZW5kZXJlci5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCksIG1fcmVuZGVyZXIudmVydGlj
YWxNYXJnaW5FeHRlbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1JlZmVyZW5j
ZUJveExvZ2ljYWxTaXplLmV4cGFuZChtX3JlbmRlcmVyLnZlcnRpY2FsTWFyZ2luRXh0ZW50KCks
IG1fcmVuZGVyZXIuaG9yaXpvbnRhbE1hcmdpbkV4dGVudCgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBCb3JkZXJCb3g6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGFkZGluZ0JveDoK
LSAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICAgICAgbmV3UmVm
ZXJlbmNlQm94TG9naWNhbFNpemUuc2hyaW5rKG1fcmVuZGVyZXIuaG9yaXpvbnRhbEJvcmRlckV4
dGVudCgpLCBtX3JlbmRlcmVyLnZlcnRpY2FsQm9yZGVyRXh0ZW50KCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5zaHJpbmsobV9yZW5kZXJl
ci52ZXJ0aWNhbEJvcmRlckV4dGVudCgpLCBtX3JlbmRlcmVyLmhvcml6b250YWxCb3JkZXJFeHRl
bnQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29udGVudEJveDoKLSAgICAgICAgaWYg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICAgICAgbmV3UmVmZXJlbmNlQm94TG9n
aWNhbFNpemUuc2hyaW5rKG1fcmVuZGVyZXIuaG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRl
bnQoKSwgbV9yZW5kZXJlci52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1JlZmVyZW5jZUJveExvZ2ljYWxTaXplLnNocmluayht
X3JlbmRlcmVyLnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBtX3JlbmRlcmVyLmhv
cml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZpbGw6Ci0gICAgY2FzZSBTdHJva2U6Ci0gICAgY2FzZSBWaWV3Qm94OgotICAgIGNhc2Ug
Qm94TWlzc2luZzoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGlmIChtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXplID09IG5ld1JlZmVy
ZW5jZUJveExvZ2ljYWxTaXplKQotICAgICAgICByZXR1cm47Ci0gICAgbWFya1NoYXBlQXNEaXJ0
eSgpOwotICAgIG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemUgPSBuZXdSZWZlcmVuY2VCb3hMb2dp
Y2FsU2l6ZTsKLX0KLQotYm9vbCBjaGVja1NoYXBlSW1hZ2VPcmlnaW4oRG9jdW1lbnQmIGRvY3Vt
ZW50LCBDYWNoZWRJbWFnZSYgY2FjaGVkSW1hZ2UpCi17Ci0gICAgaWYgKGNhY2hlZEltYWdlLmlz
T3JpZ2luQ2xlYW4oZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgY29uc3QgVVJMJiB1cmwgPSBjYWNoZWRJbWFnZS51cmwoKTsKLSAgICBTdHJp
bmcgdXJsU3RyaW5nID0gdXJsLmlzTnVsbCgpID8gIicnIiA6IHVybC5zdHJpbmdDZW50ZXJFbGxp
cHNpemVkVG9MZW5ndGgoKTsKLSAgICBkb2N1bWVudC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgIlVuc2FmZSBhdHRlbXB0IHRv
IGxvYWQgVVJMICIgKyB1cmxTdHJpbmcgKyAiLiIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1zdGF0aWMgdm9pZCBnZXRTaGFwZUltYWdlQW5kUmVjdChjb25zdCBTaGFwZVZhbHVlKiBzaGFw
ZVZhbHVlLCBjb25zdCBSZW5kZXJCb3gqIHJlbmRlckJveCwgY29uc3QgTGF5b3V0U2l6ZSYgcmVm
ZXJlbmNlQm94U2l6ZSwgSW1hZ2UqJiBpbWFnZSwgTGF5b3V0UmVjdCYgcmVjdCkKLXsKLSAgICBB
U1NFUlQoc2hhcGVWYWx1ZS0+aXNJbWFnZVZhbGlkKCkpOwotICAgIFN0eWxlSW1hZ2UqIHN0eWxl
SW1hZ2UgPSBzaGFwZVZhbHVlLT5pbWFnZSgpOwotCi0gICAgY29uc3QgSW50U2l6ZSYgaW1hZ2VT
aXplID0gcmVuZGVyQm94LT5jYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoc3R5bGVJ
bWFnZSwgcm91bmRlZEludFNpemUocmVmZXJlbmNlQm94U2l6ZSksIFJlbmRlckltYWdlOjpTY2Fs
ZUJ5RWZmZWN0aXZlWm9vbSk7Ci0gICAgc3R5bGVJbWFnZS0+c2V0Q29udGFpbmVyU2l6ZUZvclJl
bmRlcmVyKHJlbmRlckJveCwgaW1hZ2VTaXplLCByZW5kZXJCb3gtPnN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpKTsKLQotICAgIGltYWdlID0gc3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VG
b3JSZW5kZXJlcihyZW5kZXJCb3gpOwotICAgIGlmIChyZW5kZXJCb3gtPmlzUmVuZGVySW1hZ2Uo
KSkKLSAgICAgICAgcmVjdCA9IHRvUmVuZGVySW1hZ2UocmVuZGVyQm94KS0+cmVwbGFjZWRDb250
ZW50UmVjdChyZW5kZXJCb3gtPmludHJpbnNpY1NpemUoKSk7Ci0gICAgZWxzZQotICAgICAgICBy
ZWN0ID0gTGF5b3V0UmVjdChMYXlvdXRQb2ludCgpLCBpbWFnZVNpemUpOwotfQotCi1zdGF0aWMg
TGF5b3V0UmVjdCBnZXRTaGFwZUltYWdlTWFyZ2luUmVjdChjb25zdCBSZW5kZXJCb3gmIHJlbmRl
ckJveCwgY29uc3QgTGF5b3V0U2l6ZSYgcmVmZXJlbmNlQm94TG9naWNhbFNpemUpCi17Ci0gICAg
TGF5b3V0UG9pbnQgbWFyZ2luQm94T3JpZ2luKC1yZW5kZXJCb3gubWFyZ2luTG9naWNhbExlZnQo
KSAtIHJlbmRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbExlZnQoKSwgLXJlbmRlckJveC5t
YXJnaW5CZWZvcmUoKSAtIHJlbmRlckJveC5ib3JkZXJCZWZvcmUoKSAtIHJlbmRlckJveC5wYWRk
aW5nQmVmb3JlKCkpOwotICAgIExheW91dFNpemUgbWFyZ2luQm94U2l6ZURlbHRhKHJlbmRlckJv
eC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSArIHJlbmRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9naWNh
bFdpZHRoKCksIHJlbmRlckJveC5tYXJnaW5Mb2dpY2FsSGVpZ2h0KCkgKyByZW5kZXJCb3guYm9y
ZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgcmV0dXJuIExheW91dFJlY3QobWFy
Z2luQm94T3JpZ2luLCByZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSArIG1hcmdpbkJveFNpemVEZWx0
YSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGU+Ci1jb25zdCBTaGFwZSYgU2hhcGVJ
bmZvPFJlbmRlclR5cGU+Ojpjb21wdXRlZFNoYXBlKCkgY29uc3QKLXsKLSAgICBpZiAoU2hhcGUq
IHNoYXBlID0gbV9zaGFwZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuICpzaGFwZTsKLQotICAgIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlID0gdGhpcy0+c3R5bGVGb3JXcml0aW5nTW9kZSgpLndyaXRp
bmdNb2RlKCk7Ci0gICAgTGVuZ3RoIG1hcmdpbiA9IG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU1h
cmdpbigpOwotICAgIGZsb2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQgPSBtX3JlbmRlcmVyLnN0eWxl
KCkuc2hhcGVJbWFnZVRocmVzaG9sZCgpOwotICAgIGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlVmFs
dWUgPSB0aGlzLT5zaGFwZVZhbHVlKCk7Ci0gICAgQVNTRVJUKHNoYXBlVmFsdWUpOwotCi0gICAg
c3dpdGNoIChzaGFwZVZhbHVlLT50eXBlKCkpIHsKLSAgICBjYXNlIFNoYXBlVmFsdWU6OlNoYXBl
OgotICAgICAgICBBU1NFUlQoc2hhcGVWYWx1ZS0+c2hhcGUoKSk7Ci0gICAgICAgIG1fc2hhcGUg
PSBTaGFwZTo6Y3JlYXRlU2hhcGUoc2hhcGVWYWx1ZS0+c2hhcGUoKSwgbV9yZWZlcmVuY2VCb3hM
b2dpY2FsU2l6ZSwgd3JpdGluZ01vZGUsIG1hcmdpbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU2hhcGVWYWx1ZTo6SW1hZ2U6IHsKLSAgICAgICAgSW1hZ2UqIGltYWdlOwotICAgICAgICBM
YXlvdXRSZWN0IGltYWdlUmVjdDsKLSAgICAgICAgZ2V0U2hhcGVJbWFnZUFuZFJlY3Qoc2hhcGVW
YWx1ZSwgJm1fcmVuZGVyZXIsIG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemUsIGltYWdlLCBpbWFn
ZVJlY3QpOwotICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBtYXJnaW5SZWN0ID0gZ2V0U2hhcGVJ
bWFnZU1hcmdpblJlY3QobV9yZW5kZXJlciwgbV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSk7Ci0g
ICAgICAgIG1fc2hhcGUgPSBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUoaW1hZ2UsIHNoYXBlSW1h
Z2VUaHJlc2hvbGQsIGltYWdlUmVjdCwgbWFyZ2luUmVjdCwgd3JpdGluZ01vZGUsIG1hcmdpbik7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFNoYXBlVmFsdWU6OkJveDogewotICAg
ICAgICBSb3VuZGVkUmVjdCBzaGFwZVJlY3QgPSBjb21wdXRlUm91bmRlZFJlY3RGb3JCb3hTaGFw
ZShyZWZlcmVuY2VCb3goKSwgbV9yZW5kZXJlcik7Ci0gICAgICAgIGlmICghdGhpcy0+c3R5bGVG
b3JXcml0aW5nTW9kZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBz
aGFwZVJlY3QgPSBzaGFwZVJlY3QudHJhbnNwb3NlZFJlY3QoKTsKLSAgICAgICAgbV9zaGFwZSA9
IFNoYXBlOjpjcmVhdGVCb3hTaGFwZShzaGFwZVJlY3QsIHdyaXRpbmdNb2RlLCBtYXJnaW4pOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBTaGFwZVZhbHVlOjpPdXRzaWRlOgotICAg
ICAgICAvLyBPdXRzaWRlIHNob3VsZCBoYXZlIGFscmVhZHkgcmVzb2x2ZWQgdG8gYSBkaWZmZXJl
bnQgc2hhcGUgdmFsdWUKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0g
ICAgQVNTRVJUKG1fc2hhcGUpOwotICAgIHJldHVybiAqbV9zaGFwZTsKLX0KLQotdGVtcGxhdGU8
Y2xhc3MgUmVuZGVyVHlwZT4KLVNlZ21lbnRMaXN0IFNoYXBlSW5mbzxSZW5kZXJUeXBlPjo6Y29t
cHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhl
aWdodCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGluZUhlaWdodCA+PSAwKTsKLSAgICBTZWdtZW50
TGlzdCBzZWdtZW50czsKLQotICAgIGdldEludGVydmFscygobGluZVRvcCAtIGxvZ2ljYWxUb3BP
ZmZzZXQoKSksIHN0ZDo6bWluKGxpbmVIZWlnaHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gbGlu
ZVRvcCksIHNlZ21lbnRzKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VnbWVudHMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc2VnbWVudHNbaV0ubG9naWNhbExlZnQgKz0gbG9naWNh
bExlZnRPZmZzZXQoKTsKLSAgICAgICAgc2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0ICs9IGxvZ2lj
YWxMZWZ0T2Zmc2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNlZ21lbnRzOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBSZW5kZXJUeXBlPgotaW5saW5lIExheW91dFVuaXQgYm9yZGVyQmVmb3JlSW5X
cml0aW5nTW9kZShjb25zdCBSZW5kZXJUeXBlJiByZW5kZXJlciwgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUpCi17Ci0gICAgc3dpdGNoICh3cml0aW5nTW9kZSkgewotICAgIGNhc2UgVG9wVG9Cb3R0
b21Xcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpOwotICAgIGNhc2UgQm90
dG9tVG9Ub3BXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckJvdHRvbSgpOwotICAg
IGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQo
KTsKLSAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6IHJldHVybiByZW5kZXJlci5ib3Jk
ZXJSaWdodCgpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biByZW5kZXJlci5ib3JkZXJCZWZvcmUoKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlw
ZT4KLWlubGluZSBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdCZWZvcmVJbldyaXRpbmdNb2Rl
KGNvbnN0IFJlbmRlclR5cGUmIHJlbmRlcmVyLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsK
LSAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdN
b2RlOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyVG9wKCkgKyByZW5kZXJlci5wYWRkaW5nVG9wKCk7
Ci0gICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVy
Qm90dG9tKCkgKyByZW5kZXJlci5wYWRkaW5nQm90dG9tKCk7Ci0gICAgY2FzZSBMZWZ0VG9SaWdo
dFdyaXRpbmdNb2RlOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFk
ZGluZ0xlZnQoKTsKLSAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6IHJldHVybiByZW5k
ZXJlci5ib3JkZXJSaWdodCgpICsgcmVuZGVyZXIucGFkZGluZ1JpZ2h0KCk7Ci0gICAgfQotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUoKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZT4KLUxheW91dFVu
aXQgU2hhcGVJbmZvPFJlbmRlclR5cGU+Ojpsb2dpY2FsVG9wT2Zmc2V0KCkgY29uc3QKLXsKLSAg
ICBzd2l0Y2ggKHJlZmVyZW5jZUJveCgpKSB7Ci0gICAgY2FzZSBNYXJnaW5Cb3g6IHJldHVybiAt
bV9yZW5kZXJlci5tYXJnaW5CZWZvcmUoJnN0eWxlRm9yV3JpdGluZ01vZGUoKSk7Ci0gICAgY2Fz
ZSBCb3JkZXJCb3g6IHJldHVybiBMYXlvdXRVbml0KCk7Ci0gICAgY2FzZSBQYWRkaW5nQm94OiBy
ZXR1cm4gYm9yZGVyQmVmb3JlSW5Xcml0aW5nTW9kZShtX3JlbmRlcmVyLCBzdHlsZUZvcldyaXRp
bmdNb2RlKCkud3JpdGluZ01vZGUoKSk7Ci0gICAgY2FzZSBDb250ZW50Qm94OiByZXR1cm4gYm9y
ZGVyQW5kUGFkZGluZ0JlZm9yZUluV3JpdGluZ01vZGUobV9yZW5kZXJlciwgc3R5bGVGb3JXcml0
aW5nTW9kZSgpLndyaXRpbmdNb2RlKCkpOwotICAgIGNhc2UgRmlsbDogYnJlYWs7Ci0gICAgY2Fz
ZSBTdHJva2U6IGJyZWFrOwotICAgIGNhc2UgVmlld0JveDogYnJlYWs7Ci0gICAgY2FzZSBCb3hN
aXNzaW5nOiBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gTGF5b3V0VW5pdCgpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlPgotaW5s
aW5lIExheW91dFVuaXQgYm9yZGVyU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZShjb25zdCBS
ZW5kZXJUeXBlJiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIGlm
IChzdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIuYm9y
ZGVyTGVmdCgpOwotCi0gICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgpOwotICAg
IH0KLSAgICBpZiAoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICByZXR1
cm4gcmVuZGVyZXIuYm9yZGVyVG9wKCk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90
dG9tKCk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGU+Ci1pbmxpbmUgTGF5b3V0VW5p
dCBib3JkZXJBbmRQYWRkaW5nU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZShjb25zdCBSZW5k
ZXJUeXBlJiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIGlmIChz
dHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVy
TGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKTsKLQotICAgICAgICByZXR1cm4gcmVuZGVy
ZXIuYm9yZGVyUmlnaHQoKSArIHJlbmRlcmVyLnBhZGRpbmdSaWdodCgpOwotICAgIH0KLSAgICBp
ZiAoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICByZXR1cm4gcmVuZGVy
ZXIuYm9yZGVyVG9wKCkgKyByZW5kZXJlci5wYWRkaW5nVG9wKCk7Ci0KLSAgICByZXR1cm4gcmVu
ZGVyZXIuYm9yZGVyQm90dG9tKCkgKyByZW5kZXJlci5wYWRkaW5nQm90dG9tKCk7Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIFJlbmRlclR5cGU+Ci1MYXlvdXRVbml0IFNoYXBlSW5mbzxSZW5kZXJUeXBl
Pjo6bG9naWNhbExlZnRPZmZzZXQoKSBjb25zdAotewotICAgIGlmIChtX3JlbmRlcmVyLmlzUmVu
ZGVyUmVnaW9uKCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7Ci0KLSAgICBzd2l0Y2gg
KHJlZmVyZW5jZUJveCgpKSB7Ci0gICAgY2FzZSBNYXJnaW5Cb3g6IHJldHVybiAtbV9yZW5kZXJl
ci5tYXJnaW5TdGFydCgmc3R5bGVGb3JXcml0aW5nTW9kZSgpKTsKLSAgICBjYXNlIEJvcmRlckJv
eDogcmV0dXJuIExheW91dFVuaXQoKTsKLSAgICBjYXNlIFBhZGRpbmdCb3g6IHJldHVybiBib3Jk
ZXJTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKG1fcmVuZGVyZXIsIHN0eWxlRm9yV3JpdGlu
Z01vZGUoKSk7Ci0gICAgY2FzZSBDb250ZW50Qm94OiByZXR1cm4gYm9yZGVyQW5kUGFkZGluZ1N0
YXJ0V2l0aFN0eWxlRm9yV3JpdGluZ01vZGUobV9yZW5kZXJlciwgc3R5bGVGb3JXcml0aW5nTW9k
ZSgpKTsKLSAgICBjYXNlIEZpbGw6IGJyZWFrOwotICAgIGNhc2UgU3Ryb2tlOiBicmVhazsKLSAg
ICBjYXNlIFZpZXdCb3g6IGJyZWFrOwotICAgIGNhc2UgQm94TWlzc2luZzogYnJlYWs7Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoKTsK
LX0KLQotdGVtcGxhdGUgY2xhc3MgU2hhcGVJbmZvPFJlbmRlckJsb2NrPjsKLXRlbXBsYXRlIGNs
YXNzIFNoYXBlSW5mbzxSZW5kZXJCb3g+OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjYzNlMzQzNDM3NjdmYzY3YWUxMWRjNzQxODhmZGJiMDM2ZGNmYWIxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoK
LSogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0q
Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKLSogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKLSogICAgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSogICAgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotKiBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0qIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SCi0qIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRgotKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qLwotCi0j
aWZuZGVmIFNoYXBlSW5mb19oCi0jZGVmaW5lIFNoYXBlSW5mb19oCi0KLSNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNoYXBlLmgiCi0jaW5jbHVk
ZSAiU2hhcGVWYWx1ZS5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwgY2xh
c3MgSW5mb1R5cGU+Ci1jbGFzcyBNYXBwZWRJbmZvIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgSW5m
b1R5cGUmIGVuc3VyZUluZm8oY29uc3QgS2V5VHlwZSYga2V5KQotICAgIHsKLSAgICAgICAgSW5m
b01hcCYgaW5mb01hcCA9IE1hcHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZvTWFwKCk7
Ci0gICAgICAgIGlmIChJbmZvVHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KCZrZXkpKQotICAgICAg
ICAgICAgcmV0dXJuICppbmZvOwotICAgICAgICB0eXBlbmFtZSBJbmZvTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gaW5mb01hcC5hZGQoJmtleSwgc3RkOjptYWtlX3VuaXF1ZTxJbmZvVHlwZT4oa2V5
KSk7Ci0gICAgICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICB9Ci0gICAg
c3RhdGljIHZvaWQgcmVtb3ZlSW5mbyhjb25zdCBLZXlUeXBlJiBrZXkpIHsgaW5mb01hcCgpLnJl
bW92ZSgma2V5KTsgfQotICAgIHN0YXRpYyBJbmZvVHlwZSogaW5mbyhjb25zdCBLZXlUeXBlJiBr
ZXkpIHsgcmV0dXJuIGluZm9NYXAoKS5nZXQoJmtleSk7IH0KLQotcHJpdmF0ZToKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8Y29uc3QgS2V5VHlwZSosIHN0ZDo6dW5pcXVlX3B0cjxJbmZvVHlwZT4+IElu
Zm9NYXA7Ci0gICAgc3RhdGljIEluZm9NYXAmIGluZm9NYXAoKQotICAgIHsKLSAgICAgICAgREVQ
UkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEluZm9NYXAsIHN0YXRpY0luZm9NYXAsICgpKTsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY0luZm9NYXA7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Y2xh
c3MgUmVuZGVyVHlwZT4KLWNsYXNzIFNoYXBlSW5mbyB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U2hhcGVJbmZvKCkgeyB9Ci0KLSAgICB2b2lk
IHNldFJlZmVyZW5jZUJveExvZ2ljYWxTaXplKExheW91dFNpemUpOwotCi0gICAgU2VnbWVudExp
c3QgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUhlaWdodCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkgKyBsb2dp
Y2FsVG9wT2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkgKyBs
b2dpY2FsVG9wT2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbExlZnQoKSBj
b25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9n
aWNhbExlZnRPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBj
b25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpICsg
bG9naWNhbExlZnRPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsV2lkdGgo
KSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkud2lkdGgo
KTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
Y29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9Ci0KLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VCb3hMaW5l
VG9wICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZUJv
dHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlQm94TGluZVRvcCArIG1fbGluZUhlaWdo
dCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbExpbmVCb3R0
b20oTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBjb25zdCB7IHJldHVybiBtX3JlZmVyZW5jZUJveExp
bmVUb3AgKyBsaW5lSGVpZ2h0ICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0KLSAgICBMYXlvdXRV
bml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuICht
X3JlbmRlcmVyLnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpID8gKG1fcmVmZXJl
bmNlQm94TG9naWNhbFNpemUuaGVpZ2h0KCkgKyBtX3JlbmRlcmVyLmJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCkpIDogbV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5oZWlnaHQoKTsgfQot
Ci0gICAgdmlydHVhbCBib29sIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgY29uc3QgPSAwOwot
Ci0gICAgdm9pZCBtYXJrU2hhcGVBc0RpcnR5KCkgeyBtX3NoYXBlID0gbnVsbHB0cjsgfQotICAg
IGJvb2wgaXNTaGFwZURpcnR5KCkgeyByZXR1cm4gIW1fc2hhcGU7IH0KLSAgICBjb25zdCBSZW5k
ZXJUeXBlJiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KLSAgICBMYXlvdXRT
aXplIHJlZmVyZW5jZUJveExvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VC
b3hMb2dpY2FsU2l6ZTsgfQotCi0gICAgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlUGh5c2ljYWxC
b3VuZGluZ0JveCgpIGNvbnN0Ci0gICAgewotICAgICAgICBMYXlvdXRSZWN0IHBoeXNpY2FsQm91
bmRpbmdCb3ggPSBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIHBo
eXNpY2FsQm91bmRpbmdCb3guc2V0WChwaHlzaWNhbEJvdW5kaW5nQm94LngoKSArIGxvZ2ljYWxM
ZWZ0T2Zmc2V0KCkpOwotICAgICAgICBwaHlzaWNhbEJvdW5kaW5nQm94LnNldFkocGh5c2ljYWxC
b3VuZGluZ0JveC55KCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCkpOwotICAgICAgICBpZiAobV9yZW5k
ZXJlci5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBw
aHlzaWNhbEJvdW5kaW5nQm94LnNldFkobV9yZW5kZXJlci5sb2dpY2FsSGVpZ2h0KCkgLSBwaHlz
aWNhbEJvdW5kaW5nQm94Lm1heFkoKSk7Ci0gICAgICAgIGlmICghbV9yZW5kZXJlci5zdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBwaHlzaWNhbEJvdW5kaW5n
Qm94ID0gcGh5c2ljYWxCb3VuZGluZ0JveC50cmFuc3Bvc2VkUmVjdCgpOwotICAgICAgICByZXR1
cm4gcGh5c2ljYWxCb3VuZGluZ0JveDsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IHNoYXBlVG9S
ZW5kZXJlclBvaW50KEZsb2F0UG9pbnQgcG9pbnQpIGNvbnN0Ci0gICAgewotICAgICAgICBGbG9h
dFBvaW50IHJlc3VsdCA9IEZsb2F0UG9pbnQocG9pbnQueCgpICsgbG9naWNhbExlZnRPZmZzZXQo
KSwgcG9pbnQueSgpICsgbG9naWNhbFRvcE9mZnNldCgpKTsKLSAgICAgICAgaWYgKG1fcmVuZGVy
ZXIuc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmVz
dWx0LnNldFkobV9yZW5kZXJlci5sb2dpY2FsSGVpZ2h0KCkgLSByZXN1bHQueSgpKTsKLSAgICAg
ICAgaWYgKCFtX3JlbmRlcmVyLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAg
ICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50cmFuc3Bvc2VkUG9pbnQoKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBGbG9hdFNpemUgc2hhcGVUb1JlbmRlcmVyU2l6ZShG
bG9hdFNpemUgc2l6ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9yZW5kZXJlci5zdHls
ZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gc2l6ZS50
cmFuc3Bvc2VkU2l6ZSgpOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBjb25z
dCBTaGFwZSYgY29tcHV0ZWRTaGFwZSgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGlj
aXQgU2hhcGVJbmZvKGNvbnN0IFJlbmRlclR5cGUmIHJlbmRlcmVyKQotICAgICAgICA6IG1fcmVu
ZGVyZXIocmVuZGVyZXIpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgQ1NTQm94VHlwZSBy
ZWZlcmVuY2VCb3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVk
U2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTaGFwZVZh
bHVlKiBzaGFwZVZhbHVlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlcnZh
bHMoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdCA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZUZvcldyaXRpbmdNb2RlKCkgY29uc3Qg
PSAwOwotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0KCkgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5pdCBtX3Jl
ZmVyZW5jZUJveExpbmVUb3A7Ci0gICAgTGF5b3V0VW5pdCBtX2xpbmVIZWlnaHQ7Ci0KLSAgICBj
b25zdCBSZW5kZXJUeXBlJiBtX3JlbmRlcmVyOwotCi1wcml2YXRlOgotICAgIG11dGFibGUgc3Rk
Ojp1bmlxdWVfcHRyPFNoYXBlPiBtX3NoYXBlOwotICAgIExheW91dFNpemUgbV9yZWZlcmVuY2VC
b3hMb2dpY2FsU2l6ZTsKLX07Ci0KLWJvb2wgY2hlY2tTaGFwZUltYWdlT3JpZ2luKERvY3VtZW50
JiwgQ2FjaGVkSW1hZ2UmKTsKLQotfQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCmluZGV4IGJmOWRm
ODk2OGQ0MjhlNGM5MzIzN2NlY2QyZmI3NTM5YWVmM2Y4ZjUuLjRmYTNiZGY2ZjkzOWVhY2U5ODUy
M2VmMjVlYzVhMDdiMGE1YmI2YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcApAQCAtMzMsMTIgKzMzLDI1OCBAQAogCiAj
aW5jbHVkZSAiU2hhcGVPdXRzaWRlSW5mby5oIgogCisjaW5jbHVkZSAiQm94U2hhcGUuaCIKICNp
bmNsdWRlICJGbG9hdGluZ09iamVjdHMuaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNp
bmNsdWRlICJSZW5kZXJJbWFnZS5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK0xheW91dFJlY3QgU2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZWRT
aGFwZVBoeXNpY2FsQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIExheW91dFJlY3QgcGh5c2lj
YWxCb3VuZGluZ0JveCA9IGNvbXB1dGVkU2hhcGUoKS5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGlu
Z0JveCgpOworICAgIHBoeXNpY2FsQm91bmRpbmdCb3guc2V0WChwaHlzaWNhbEJvdW5kaW5nQm94
LngoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCkpOworICAgIHBoeXNpY2FsQm91bmRpbmdCb3guc2V0
WShwaHlzaWNhbEJvdW5kaW5nQm94LnkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKSk7CisgICAgaWYg
KG1fcmVuZGVyZXIuc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQorICAgICAg
ICBwaHlzaWNhbEJvdW5kaW5nQm94LnNldFkobV9yZW5kZXJlci5sb2dpY2FsSGVpZ2h0KCkgLSBw
aHlzaWNhbEJvdW5kaW5nQm94Lm1heFkoKSk7CisgICAgaWYgKCFtX3JlbmRlcmVyLnN0eWxlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcGh5c2ljYWxCb3VuZGluZ0JveCA9
IHBoeXNpY2FsQm91bmRpbmdCb3gudHJhbnNwb3NlZFJlY3QoKTsKKyAgICByZXR1cm4gcGh5c2lj
YWxCb3VuZGluZ0JveDsKK30KKworRmxvYXRQb2ludCBTaGFwZU91dHNpZGVJbmZvOjpzaGFwZVRv
UmVuZGVyZXJQb2ludChGbG9hdFBvaW50IHBvaW50KSBjb25zdAoreworICAgIEZsb2F0UG9pbnQg
cmVzdWx0ID0gRmxvYXRQb2ludChwb2ludC54KCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpLCBwb2lu
dC55KCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCkpOworICAgIGlmIChtX3JlbmRlcmVyLnN0eWxlKCku
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcmVzdWx0LnNldFkobV9yZW5k
ZXJlci5sb2dpY2FsSGVpZ2h0KCkgLSByZXN1bHQueSgpKTsKKyAgICBpZiAoIW1fcmVuZGVyZXIu
c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZXN1bHQgPSByZXN1
bHQudHJhbnNwb3NlZFBvaW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRmxvYXRTaXpl
IFNoYXBlT3V0c2lkZUluZm86OnNoYXBlVG9SZW5kZXJlclNpemUoRmxvYXRTaXplIHNpemUpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3JlbmRlcmVyLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIHNpemUudHJhbnNwb3NlZFNpemUoKTsKKyAgICByZXR1cm4g
c2l6ZTsKK30KKworc3RhdGljIGlubGluZSBDU1NCb3hUeXBlIHJlZmVyZW5jZUJveChTaGFwZVZh
bHVlKiBzaGFwZVZhbHVlKQoreworICAgIGlmIChzaGFwZVZhbHVlLT5jc3NCb3goKSA9PSBCb3hN
aXNzaW5nKSB7CisgICAgICAgIGlmIChzaGFwZVZhbHVlLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6
SW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gQ29udGVudEJveDsKKyAgICAgICAgcmV0dXJuIE1h
cmdpbkJveDsKKyAgICB9CisgICAgcmV0dXJuIHNoYXBlVmFsdWUtPmNzc0JveCgpOworfQorCit2
b2lkIFNoYXBlT3V0c2lkZUluZm86OnNldFJlZmVyZW5jZUJveExvZ2ljYWxTaXplKExheW91dFNp
emUgbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUpCit7CisgICAgYm9vbCBpc0hvcml6b250YWxX
cml0aW5nTW9kZSA9IG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKTsKKyAgICBzd2l0Y2ggKHJlZmVyZW5jZUJveChtX3JlbmRlcmVy
LnN0eWxlKCkuc2hhcGVPdXRzaWRlKCkpKSB7CisgICAgY2FzZSBNYXJnaW5Cb3g6CisgICAgICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgICAgIG5ld1JlZmVyZW5jZUJv
eExvZ2ljYWxTaXplLmV4cGFuZChtX3JlbmRlcmVyLmhvcml6b250YWxNYXJnaW5FeHRlbnQoKSwg
bV9yZW5kZXJlci52ZXJ0aWNhbE1hcmdpbkV4dGVudCgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUuZXhwYW5kKG1fcmVuZGVyZXIudmVydGlj
YWxNYXJnaW5FeHRlbnQoKSwgbV9yZW5kZXJlci5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEJvcmRlckJveDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQYWRkaW5nQm94OgorICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCisg
ICAgICAgICAgICBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5zaHJpbmsobV9yZW5kZXJlci5o
b3Jpem9udGFsQm9yZGVyRXh0ZW50KCksIG1fcmVuZGVyZXIudmVydGljYWxCb3JkZXJFeHRlbnQo
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1JlZmVyZW5jZUJveExvZ2ljYWxTaXpl
LnNocmluayhtX3JlbmRlcmVyLnZlcnRpY2FsQm9yZGVyRXh0ZW50KCksIG1fcmVuZGVyZXIuaG9y
aXpvbnRhbEJvcmRlckV4dGVudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250ZW50
Qm94OgorICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgICAgICBu
ZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5zaHJpbmsobV9yZW5kZXJlci5ob3Jpem9udGFsQm9y
ZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBtX3JlbmRlcmVyLnZlcnRpY2FsQm9yZGVyQW5kUGFkZGlu
Z0V4dGVudCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3UmVmZXJlbmNlQm94TG9n
aWNhbFNpemUuc2hyaW5rKG1fcmVuZGVyZXIudmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50
KCksIG1fcmVuZGVyZXIuaG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRmlsbDoKKyAgICBjYXNlIFN0cm9rZToKKyAgICBjYXNlIFZp
ZXdCb3g6CisgICAgY2FzZSBCb3hNaXNzaW5nOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG1fcmVmZXJlbmNlQm94TG9naWNh
bFNpemUgPT0gbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUpCisgICAgICAgIHJldHVybjsKKyAg
ICBtYXJrU2hhcGVBc0RpcnR5KCk7CisgICAgbV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSA9IG5l
d1JlZmVyZW5jZUJveExvZ2ljYWxTaXplOworfQorCitib29sIGNoZWNrU2hhcGVJbWFnZU9yaWdp
bihEb2N1bWVudCYgZG9jdW1lbnQsIENhY2hlZEltYWdlJiBjYWNoZWRJbWFnZSkKK3sKKyAgICBp
ZiAoY2FjaGVkSW1hZ2UuaXNPcmlnaW5DbGVhbihkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBVUkwmIHVybCA9IGNhY2hlZEltYWdl
LnVybCgpOworICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1cmwuaXNOdWxsKCkgPyAiJyciIDogdXJs
LnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpOworICAgIGRvY3VtZW50LmFkZENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAi
VW5zYWZlIGF0dGVtcHQgdG8gbG9hZCBVUkwgIiArIHVybFN0cmluZyArICIuIik7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGdldFNoYXBlSW1hZ2VBbmRSZWN0KGNvbnN0
IFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUsIGNvbnN0IFJlbmRlckJveCogcmVuZGVyQm94LCBjb25z
dCBMYXlvdXRTaXplJiByZWZlcmVuY2VCb3hTaXplLCBJbWFnZSomIGltYWdlLCBMYXlvdXRSZWN0
JiByZWN0KQoreworICAgIEFTU0VSVChzaGFwZVZhbHVlLT5pc0ltYWdlVmFsaWQoKSk7CisgICAg
U3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IHNoYXBlVmFsdWUtPmltYWdlKCk7CisKKyAgICBjb25z
dCBJbnRTaXplJiBpbWFnZVNpemUgPSByZW5kZXJCb3gtPmNhbGN1bGF0ZUltYWdlSW50cmluc2lj
RGltZW5zaW9ucyhzdHlsZUltYWdlLCByb3VuZGVkSW50U2l6ZShyZWZlcmVuY2VCb3hTaXplKSwg
UmVuZGVySW1hZ2U6OlNjYWxlQnlFZmZlY3RpdmVab29tKTsKKyAgICBzdHlsZUltYWdlLT5zZXRD
b250YWluZXJTaXplRm9yUmVuZGVyZXIocmVuZGVyQm94LCBpbWFnZVNpemUsIHJlbmRlckJveC0+
c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOworCisgICAgaW1hZ2UgPSBzdHlsZUltYWdlLT5jYWNo
ZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlckJveCk7CisgICAgaWYgKHJlbmRlckJv
eC0+aXNSZW5kZXJJbWFnZSgpKQorICAgICAgICByZWN0ID0gdG9SZW5kZXJJbWFnZShyZW5kZXJC
b3gpLT5yZXBsYWNlZENvbnRlbnRSZWN0KHJlbmRlckJveC0+aW50cmluc2ljU2l6ZSgpKTsKKyAg
ICBlbHNlCisgICAgICAgIHJlY3QgPSBMYXlvdXRSZWN0KExheW91dFBvaW50KCksIGltYWdlU2l6
ZSk7Cit9CisKK3N0YXRpYyBMYXlvdXRSZWN0IGdldFNoYXBlSW1hZ2VNYXJnaW5SZWN0KGNvbnN0
IFJlbmRlckJveCYgcmVuZGVyQm94LCBjb25zdCBMYXlvdXRTaXplJiByZWZlcmVuY2VCb3hMb2dp
Y2FsU2l6ZSkKK3sKKyAgICBMYXlvdXRQb2ludCBtYXJnaW5Cb3hPcmlnaW4oLXJlbmRlckJveC5t
YXJnaW5Mb2dpY2FsTGVmdCgpIC0gcmVuZGVyQm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsTGVm
dCgpLCAtcmVuZGVyQm94Lm1hcmdpbkJlZm9yZSgpIC0gcmVuZGVyQm94LmJvcmRlckJlZm9yZSgp
IC0gcmVuZGVyQm94LnBhZGRpbmdCZWZvcmUoKSk7CisgICAgTGF5b3V0U2l6ZSBtYXJnaW5Cb3hT
aXplRGVsdGEocmVuZGVyQm94Lm1hcmdpbkxvZ2ljYWxXaWR0aCgpICsgcmVuZGVyQm94LmJvcmRl
ckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSwgcmVuZGVyQm94Lm1hcmdpbkxvZ2ljYWxIZWlnaHQo
KSArIHJlbmRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpKTsKKyAgICByZXR1
cm4gTGF5b3V0UmVjdChtYXJnaW5Cb3hPcmlnaW4sIHJlZmVyZW5jZUJveExvZ2ljYWxTaXplICsg
bWFyZ2luQm94U2l6ZURlbHRhKTsKK30KKworY29uc3QgU2hhcGUmIFNoYXBlT3V0c2lkZUluZm86
OmNvbXB1dGVkU2hhcGUoKSBjb25zdAoreworICAgIGlmIChTaGFwZSogc2hhcGUgPSBtX3NoYXBl
LmdldCgpKQorICAgICAgICByZXR1cm4gKnNoYXBlOworCisgICAgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUgPSBtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLndyaXRpbmdNb2Rl
KCk7CisgICAgTGVuZ3RoIG1hcmdpbiA9IG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU1hcmdpbigp
OworICAgIGZsb2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQgPSBtX3JlbmRlcmVyLnN0eWxlKCkuc2hh
cGVJbWFnZVRocmVzaG9sZCgpOworICAgIGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUgPSB0
aGlzLT5tX3JlbmRlcmVyLnN0eWxlKCkuc2hhcGVPdXRzaWRlKCk7CisgICAgQVNTRVJUKHNoYXBl
VmFsdWUpOworCisgICAgc3dpdGNoIChzaGFwZVZhbHVlLT50eXBlKCkpIHsKKyAgICBjYXNlIFNo
YXBlVmFsdWU6OlNoYXBlOgorICAgICAgICBBU1NFUlQoc2hhcGVWYWx1ZS0+c2hhcGUoKSk7Cisg
ICAgICAgIG1fc2hhcGUgPSBTaGFwZTo6Y3JlYXRlU2hhcGUoc2hhcGVWYWx1ZS0+c2hhcGUoKSwg
bV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSwgd3JpdGluZ01vZGUsIG1hcmdpbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgU2hhcGVWYWx1ZTo6SW1hZ2U6IHsKKyAgICAgICAgSW1hZ2UqIGlt
YWdlOworICAgICAgICBMYXlvdXRSZWN0IGltYWdlUmVjdDsKKyAgICAgICAgZ2V0U2hhcGVJbWFn
ZUFuZFJlY3Qoc2hhcGVWYWx1ZSwgJm1fcmVuZGVyZXIsIG1fcmVmZXJlbmNlQm94TG9naWNhbFNp
emUsIGltYWdlLCBpbWFnZVJlY3QpOworICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBtYXJnaW5S
ZWN0ID0gZ2V0U2hhcGVJbWFnZU1hcmdpblJlY3QobV9yZW5kZXJlciwgbV9yZWZlcmVuY2VCb3hM
b2dpY2FsU2l6ZSk7CisgICAgICAgIG1fc2hhcGUgPSBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUo
aW1hZ2UsIHNoYXBlSW1hZ2VUaHJlc2hvbGQsIGltYWdlUmVjdCwgbWFyZ2luUmVjdCwgd3JpdGlu
Z01vZGUsIG1hcmdpbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNoYXBlVmFs
dWU6OkJveDogeworICAgICAgICBSb3VuZGVkUmVjdCBzaGFwZVJlY3QgPSBjb21wdXRlUm91bmRl
ZFJlY3RGb3JCb3hTaGFwZShyZWZlcmVuY2VCb3gobV9yZW5kZXJlci5zdHlsZSgpLnNoYXBlT3V0
c2lkZSgpKSwgbV9yZW5kZXJlcik7CisgICAgICAgIGlmICghbV9yZW5kZXJlci5jb250YWluaW5n
QmxvY2soKS0+c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAg
c2hhcGVSZWN0ID0gc2hhcGVSZWN0LnRyYW5zcG9zZWRSZWN0KCk7CisgICAgICAgIG1fc2hhcGUg
PSBTaGFwZTo6Y3JlYXRlQm94U2hhcGUoc2hhcGVSZWN0LCB3cml0aW5nTW9kZSwgbWFyZ2luKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU2hhcGVWYWx1ZTo6T3V0c2lkZToKKyAg
ICAgICAgLy8gT3V0c2lkZSBzaG91bGQgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRvIGEgZGlmZmVy
ZW50IHNoYXBlIHZhbHVlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIEFTU0VSVChtX3NoYXBlKTsKKyAgICByZXR1cm4gKm1fc2hhcGU7Cit9CisKK2lubGluZSBM
YXlvdXRVbml0IGJvcmRlckJlZm9yZUluV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyQm94JiByZW5k
ZXJlciwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAgc3dpdGNoICh3cml0aW5nTW9k
ZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJv
cmRlclRvcCgpOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRl
cmVyLmJvcmRlckJvdHRvbSgpOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZTogcmV0
dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQoKTsKKyAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01v
ZGU6IHJldHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgpOworICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJCZWZvcmUoKTsKK30KKwor
aW5saW5lIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZUluV3JpdGluZ01vZGUoY29u
c3QgUmVuZGVyQm94JiByZW5kZXJlciwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7CisgICAg
c3dpdGNoICh3cml0aW5nTW9kZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9kZTog
cmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGluZ1RvcCgpOworICAg
IGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckJvdHRv
bSgpICsgcmVuZGVyZXIucGFkZGluZ0JvdHRvbSgpOworICAgIGNhc2UgTGVmdFRvUmlnaHRXcml0
aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLnBhZGRpbmdM
ZWZ0KCk7CisgICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOiByZXR1cm4gcmVuZGVyZXIu
Ym9yZGVyUmlnaHQoKSArIHJlbmRlcmVyLnBhZGRpbmdSaWdodCgpOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJBbmRQYWRkaW5n
QmVmb3JlKCk7Cit9CisKK0xheW91dFVuaXQgU2hhcGVPdXRzaWRlSW5mbzo6bG9naWNhbFRvcE9m
ZnNldCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWZlcmVuY2VCb3gobV9yZW5kZXJlci5zdHls
ZSgpLnNoYXBlT3V0c2lkZSgpKSkgeworICAgIGNhc2UgTWFyZ2luQm94OiByZXR1cm4gLW1fcmVu
ZGVyZXIubWFyZ2luQmVmb3JlKCZtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgp
KTsKKyAgICBjYXNlIEJvcmRlckJveDogcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICBjYXNlIFBh
ZGRpbmdCb3g6IHJldHVybiBib3JkZXJCZWZvcmVJbldyaXRpbmdNb2RlKG1fcmVuZGVyZXIsIG1f
cmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkud3JpdGluZ01vZGUoKSk7CisgICAg
Y2FzZSBDb250ZW50Qm94OiByZXR1cm4gYm9yZGVyQW5kUGFkZGluZ0JlZm9yZUluV3JpdGluZ01v
ZGUobV9yZW5kZXJlciwgbV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS53cml0
aW5nTW9kZSgpKTsKKyAgICBjYXNlIEZpbGw6IGJyZWFrOworICAgIGNhc2UgU3Ryb2tlOiBicmVh
azsKKyAgICBjYXNlIFZpZXdCb3g6IGJyZWFrOworICAgIGNhc2UgQm94TWlzc2luZzogYnJlYWs7
CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBMYXlv
dXRVbml0KCk7Cit9CisKK2lubGluZSBMYXlvdXRVbml0IGJvcmRlclN0YXJ0V2l0aFN0eWxlRm9y
V3JpdGluZ01vZGUoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKQoreworICAgIGlmIChzdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Cisg
ICAgICAgIGlmIChzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVuZGVyZXIuYm9yZGVyTGVmdCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJl
bmRlcmVyLmJvcmRlclJpZ2h0KCk7CisgICAgfQorICAgIGlmIChzdHlsZS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJUb3AoKTsKKyAgICAK
KyAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90dG9tKCk7Cit9CisKK2lubGluZSBMYXlvdXRV
bml0IGJvcmRlckFuZFBhZGRpbmdTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKGNvbnN0IFJl
bmRlckJveCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBpZiAo
c3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICBpZiAoc3R5bGUuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRl
ckxlZnQoKSArIHJlbmRlcmVyLnBhZGRpbmdMZWZ0KCk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gcmVuZGVyZXIuYm9yZGVyUmlnaHQoKSArIHJlbmRlcmVyLnBhZGRpbmdSaWdodCgpOworICAg
IH0KKyAgICBpZiAoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICByZXR1
cm4gcmVuZGVyZXIuYm9yZGVyVG9wKCkgKyByZW5kZXJlci5wYWRkaW5nVG9wKCk7CisgICAgCisg
ICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRlckJvdHRvbSgpICsgcmVuZGVyZXIucGFkZGluZ0JvdHRv
bSgpOworfQorCitMYXlvdXRVbml0IFNoYXBlT3V0c2lkZUluZm86OmxvZ2ljYWxMZWZ0T2Zmc2V0
KCkgY29uc3QKK3sKKyAgICBpZiAobV9yZW5kZXJlci5pc1JlbmRlclJlZ2lvbigpKQorICAgICAg
ICByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgIAorICAgIHN3aXRjaCAocmVmZXJlbmNlQm94KG1f
cmVuZGVyZXIuc3R5bGUoKS5zaGFwZU91dHNpZGUoKSkpIHsKKyAgICBjYXNlIE1hcmdpbkJveDog
cmV0dXJuIC1tX3JlbmRlcmVyLm1hcmdpblN0YXJ0KCZtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9j
aygpLT5zdHlsZSgpKTsKKyAgICBjYXNlIEJvcmRlckJveDogcmV0dXJuIExheW91dFVuaXQoKTsK
KyAgICBjYXNlIFBhZGRpbmdCb3g6IHJldHVybiBib3JkZXJTdGFydFdpdGhTdHlsZUZvcldyaXRp
bmdNb2RlKG1fcmVuZGVyZXIsIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkp
OworICAgIGNhc2UgQ29udGVudEJveDogcmV0dXJuIGJvcmRlckFuZFBhZGRpbmdTdGFydFdpdGhT
dHlsZUZvcldyaXRpbmdNb2RlKG1fcmVuZGVyZXIsIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2Nr
KCktPnN0eWxlKCkpOworICAgIGNhc2UgRmlsbDogYnJlYWs7CisgICAgY2FzZSBTdHJva2U6IGJy
ZWFrOworICAgIGNhc2UgVmlld0JveDogYnJlYWs7CisgICAgY2FzZSBCb3hNaXNzaW5nOiBicmVh
azsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIExh
eW91dFVuaXQoKTsKK30KKwogYm9vbCBTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29u
c3QgUmVuZGVyQm94JiBib3gpCiB7CiAgICAgU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IGJveC5z
dHlsZSgpLnNoYXBlT3V0c2lkZSgpOwpAQCAtNTksNiArMzA1LDIxIEBAIGJvb2wgU2hhcGVPdXRz
aWRlSW5mbzo6aXNFbmFibGVkRm9yKGNvbnN0IFJlbmRlckJveCYgYm94KQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorU2VnbWVudExpc3QgU2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNlZ21lbnRz
Rm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkgY29uc3QK
K3sKKyAgICBBU1NFUlQobGluZUhlaWdodCA+PSAwKTsKKyAgICBTZWdtZW50TGlzdCBzZWdtZW50
czsKKworICAgIGNvbXB1dGVkU2hhcGUoKS5nZXRFeGNsdWRlZEludGVydmFscygobGluZVRvcCAt
IGxvZ2ljYWxUb3BPZmZzZXQoKSksIHN0ZDo6bWluKGxpbmVIZWlnaHQsIHNoYXBlTG9naWNhbEJv
dHRvbSgpIC0gbGluZVRvcCksIHNlZ21lbnRzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2VnbWVudHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgc2VnbWVudHNbaV0ubG9naWNhbExl
ZnQgKz0gbG9naWNhbExlZnRPZmZzZXQoKTsKKyAgICAgICAgc2VnbWVudHNbaV0ubG9naWNhbFJp
Z2h0ICs9IGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBzZWdt
ZW50czsKK30KKwogdm9pZCBTaGFwZU91dHNpZGVJbmZvOjp1cGRhdGVEZWx0YXNGb3JDb250YWlu
aW5nQmxvY2tMaW5lKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgY29udGFpbmluZ0Jsb2NrLCBjb25z
dCBGbG9hdGluZ09iamVjdCYgZmxvYXRpbmdPYmplY3QsIExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lSGVpZ2h0KQogewogICAgIExheW91dFVuaXQgYm9yZGVyQm94VG9wID0gY29u
dGFpbmluZ0Jsb2NrLmxvZ2ljYWxUb3BGb3JGbG9hdCgmZmxvYXRpbmdPYmplY3QpICsgY29udGFp
bmluZ0Jsb2NrLm1hcmdpbkJlZm9yZUZvckNoaWxkKG1fcmVuZGVyZXIpOwpAQCAtNzEsNyArMzMy
LDcgQEAgdm9pZCBTaGFwZU91dHNpZGVJbmZvOjp1cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxv
Y2tMaW5lKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYKIAogICAgICAgICBMYXlvdXRVbml0IGZsb2F0
TWFyZ2luQm94V2lkdGggPSBjb250YWluaW5nQmxvY2subG9naWNhbFdpZHRoRm9yRmxvYXQoJmZs
b2F0aW5nT2JqZWN0KTsKIAotICAgICAgICBpZiAobGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkg
eworICAgICAgICBpZiAoY29tcHV0ZWRTaGFwZSgpLmxpbmVPdmVybGFwc1NoYXBlTWFyZ2luQm91
bmRzKG1fcmVmZXJlbmNlQm94TGluZVRvcCwgbV9saW5lSGVpZ2h0KSkgewogICAgICAgICAgICAg
U2VnbWVudExpc3Qgc2VnbWVudHMgPSBjb21wdXRlU2VnbWVudHNGb3JMaW5lKGJvcmRlckJveExp
bmVUb3AsIGxpbmVIZWlnaHQpOwogICAgICAgICAgICAgaWYgKHNlZ21lbnRzLnNpemUoKSkgewog
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExlZnRNYXJnaW4gPSBjb250YWluaW5n
QmxvY2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb250YWluaW5nQmxvY2su
bWFyZ2luU3RhcnRGb3JDaGlsZChtX3JlbmRlcmVyKSA6IGNvbnRhaW5pbmdCbG9jay5tYXJnaW5F
bmRGb3JDaGlsZChtX3JlbmRlcmVyKTsKQEAgLTk1LDE3ICszNTYsNiBAQCB2b2lkIFNoYXBlT3V0
c2lkZUluZm86OnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUoY29uc3QgUmVuZGVy
QmxvY2tGbG93JgogICAgIH0KIH0KIAotU2hhcGVWYWx1ZSogU2hhcGVPdXRzaWRlSW5mbzo6c2hh
cGVWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU91
dHNpZGUoKTsKLX0KLQotY29uc3QgUmVuZGVyU3R5bGUmIFNoYXBlT3V0c2lkZUluZm86OnN0eWxl
Rm9yV3JpdGluZ01vZGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyLmNvbnRhaW5p
bmdCbG9jaygpKTsKLSAgICByZXR1cm4gbV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5
bGUoKTsKLX0KLQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKaW5kZXggNDg4MWUwNmFiMGVhZmFiYTcxNjEzNjkx
NmRjZmEyY2VmYjc1YmExOS4uZTJlZjkyYTQ1M2Y2N2Q2MTlmMGU1OGI4MTk0MzBmNzg0MzkwMDRl
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNp
ZGVJbmZvLmgKQEAgLTMyLDggKzMyLDEzIEBACiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKIAor
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFNpemUuaCIKLSNpbmNsdWRl
ICJTaGFwZUluZm8uaCIKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTaGFwZS5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKKyNp
bmNsdWRlIDxtZW1vcnk+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMTAgKzQ2LDEx
IEBAIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIEZsb2F0
aW5nT2JqZWN0OwogCi1jbGFzcyBTaGFwZU91dHNpZGVJbmZvIGZpbmFsIDogcHVibGljIFNoYXBl
SW5mbzxSZW5kZXJCb3g+LCBwdWJsaWMgTWFwcGVkSW5mbzxSZW5kZXJCb3gsIFNoYXBlT3V0c2lk
ZUluZm8+IHsKK2NsYXNzIFNoYXBlT3V0c2lkZUluZm8gZmluYWwgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFNoYXBlT3V0c2lkZUluZm8oY29uc3QgUmVuZGVy
Qm94JiByZW5kZXJlcikKLSAgICAgICAgOiBTaGFwZUluZm88UmVuZGVyQm94PihyZW5kZXJlcikK
KyAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQogICAgICAgICAsIG1fbGluZU92ZXJsYXBz
U2hhcGUoZmFsc2UpCiAgICAgewogICAgIH0KQEAgLTU3LDMxICs2Myw1OCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUoY29uc3QgUmVuZGVy
QmxvY2tGbG93JiwgY29uc3QgRmxvYXRpbmdPYmplY3QmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUhlaWdodCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbGluZU92ZXJsYXBzU2hh
cGVCb3VuZHMoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVk
U2hhcGUoKS5saW5lT3ZlcmxhcHNTaGFwZU1hcmdpbkJvdW5kcyhtX3JlZmVyZW5jZUJveExpbmVU
b3AsIG1fbGluZUhlaWdodCk7Ci0gICAgfQorICAgIHZvaWQgc2V0UmVmZXJlbmNlQm94TG9naWNh
bFNpemUoTGF5b3V0U2l6ZSk7CisKKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0Jv
eCgpLnkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dp
Y2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLnNoYXBlTWFyZ2luTG9n
aWNhbEJvdW5kaW5nQm94KCkubWF4WSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5
b3V0VW5pdCBzaGFwZUxvZ2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgp
LnNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9naWNhbExlZnRPZmZzZXQo
KTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBj
b21wdXRlZFNoYXBlKCkuc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKS5tYXhYKCkgKyBs
b2dpY2FsTGVmdE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxXaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGlu
Z0JveCgpLndpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0Jv
eCgpLmhlaWdodCgpOyB9CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lVG9wKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWZlcmVuY2VCb3hMaW5lVG9wICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Cisg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZUJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJl
bmNlQm94TGluZVRvcCArIG1fbGluZUhlaWdodCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorICAg
IExheW91dFVuaXQgbG9naWNhbExpbmVCb3R0b20oTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBjb25z
dCB7IHJldHVybiBtX3JlZmVyZW5jZUJveExpbmVUb3AgKyBsaW5lSGVpZ2h0ICsgbG9naWNhbFRv
cE9mZnNldCgpOyB9CisKKyAgICB2b2lkIG1hcmtTaGFwZUFzRGlydHkoKSB7IG1fc2hhcGUgPSBu
dWxscHRyOyB9CisgICAgYm9vbCBpc1NoYXBlRGlydHkoKSB7IHJldHVybiAhbV9zaGFwZTsgfQor
CisgICAgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlUGh5c2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0
OworICAgIEZsb2F0UG9pbnQgc2hhcGVUb1JlbmRlcmVyUG9pbnQoRmxvYXRQb2ludCkgY29uc3Q7
CisgICAgRmxvYXRTaXplIHNoYXBlVG9SZW5kZXJlclNpemUoRmxvYXRTaXplKSBjb25zdDsKIAot
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgQ1NTQm94VHlwZSByZWZlcmVuY2VCb3goKSBjb25zdCBv
dmVycmlkZQorICAgIGNvbnN0IFNoYXBlJiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7CisKKyAgICBz
dGF0aWMgU2hhcGVPdXRzaWRlSW5mbyYgZW5zdXJlSW5mbyhjb25zdCBSZW5kZXJCb3gmIGtleSkK
ICAgICB7Ci0gICAgICAgIGlmIChzaGFwZVZhbHVlKCktPmNzc0JveCgpID09IEJveE1pc3Npbmcp
IHsKLSAgICAgICAgICAgIGlmIChzaGFwZVZhbHVlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpJ
bWFnZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29udGVudEJveDsKLSAgICAgICAgICAgIHJl
dHVybiBNYXJnaW5Cb3g7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNoYXBlVmFsdWUoKS0+
Y3NzQm94KCk7CisgICAgICAgIEluZm9NYXAmIGluZm9NYXAgPSBTaGFwZU91dHNpZGVJbmZvOjpp
bmZvTWFwKCk7CisgICAgICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBpbmZvID0gaW5mb01hcC5n
ZXQoJmtleSkpCisgICAgICAgICAgICByZXR1cm4gKmluZm87CisgICAgICAgIHR5cGVuYW1lIElu
Zm9NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbmZvTWFwLmFkZCgma2V5LCBzdGQ6Om1ha2VfdW5p
cXVlPFNoYXBlT3V0c2lkZUluZm8+KGtleSkpOworICAgICAgICByZXR1cm4gKnJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CiAgICAgfQorICAgIHN0YXRpYyB2b2lkIHJlbW92ZUluZm8oY29uc3QgUmVu
ZGVyQm94JiBrZXkpIHsgaW5mb01hcCgpLnJlbW92ZSgma2V5KTsgfQorICAgIHN0YXRpYyBTaGFw
ZU91dHNpZGVJbmZvKiBpbmZvKGNvbnN0IFJlbmRlckJveCYga2V5KSB7IHJldHVybiBpbmZvTWFw
KCkuZ2V0KCZrZXkpOyB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjb21w
dXRlZFNoYXBlKCkuc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKTsgfQotICAgIHZpcnR1
YWwgU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBnZXRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWln
aHQsIFNlZ21lbnRMaXN0JiBzZWdtZW50cykgY29uc3Qgb3ZlcnJpZGUKKyAgICBTZWdtZW50TGlz
dCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBs
aW5lSGVpZ2h0KSBjb25zdDsKKworICAgIExheW91dFVuaXQgbG9naWNhbFRvcE9mZnNldCgpIGNv
bnN0OworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQoKSBjb25zdDsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGVPdXRz
aWRlSW5mbz4+IEluZm9NYXA7CisgICAgc3RhdGljIEluZm9NYXAmIGluZm9NYXAoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS5nZXRFeGNsdWRlZEludGVydmFscyhsaW5l
VG9wLCBsaW5lSGVpZ2h0LCBzZWdtZW50cyk7CisgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChJbmZvTWFwLCBzdGF0aWNJbmZvTWFwLCAoKSk7CisgICAgICAgIHJldHVybiBz
dGF0aWNJbmZvTWFwOwogICAgIH0KIAotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlRm9yV3JpdGluZ01vZGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBSZW5kZXJCb3gm
IG1fcmVuZGVyZXI7CisKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gbV9zaGFw
ZTsKKyAgICBMYXlvdXRTaXplIG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemU7CisgICAgTGF5b3V0
VW5pdCBtX3JlZmVyZW5jZUJveExpbmVUb3A7CisgICAgTGF5b3V0VW5pdCBtX2xpbmVIZWlnaHQ7
CiAKICAgICBMYXlvdXRVbml0IG1fbGVmdE1hcmdpbkJveERlbHRhOwogICAgIExheW91dFVuaXQg
bV9yaWdodE1hcmdpbkJveERlbHRhOwpAQCAtODksNiArMTIyLDggQEAgcHJpdmF0ZToKICAgICBi
b29sIG1fbGluZU92ZXJsYXBzU2hhcGU7CiB9OwogCitib29sIGNoZWNrU2hhcGVJbWFnZU9yaWdp
bihEb2N1bWVudCYsIENhY2hlZEltYWdlJik7CisKIH0KICNlbmRpZgogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228545</attachid>
            <date>2014-04-03 14:40:13 -0700</date>
            <delta_ts>2014-04-03 15:25:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131180-20140403144228.patch</filename>
            <type>text/plain</type>
            <size>45485</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2NzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODJmMDBiMjMzYjEyZmMz
NGYxMjZlMGU4MWE2N2U0NGI0MjI3ZmVhZS4uZjQwNDk4ZTQ1ZDMzNTY4Y2ZhYjA0MTliNGE4MWMx
MWQ0ODhhY2QxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTA0LTAzICBCZW0g
Sm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgorCisgICAgICAgIE1lcmdlIFNoYXBlSW5m
byAmIFNoYXBlT3V0c2lkZUluZm8gbm93IHRoYXQgU2hhcGVJbnNpZGVJbmZvIGlzIG5vIG1vcmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTE4MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0
IFNoYXBlSW5zaWRlSW5mbyBpcyBnb25lLCBoYXZpbmcgYSBjbGFzcyBoaWVhcmFjaHkgYW5kCisg
ICAgICAgIHRlbXBsYXRlcyBkb2Vzbid0IG1ha2UgYW55IHNlbnNlLiBBcyBhIGZpcnN0IHN0ZXAg
dG8gY2xlYW5pbmcgdXAgdGhlCisgICAgICAgIGNvZGUsIHRoaXMgcmVtb3ZlIFNoYXBlSW5mbyBh
bmQgcHV0cyBhbGwgb2YgaXRzIGZ1bmN0aW9uYWxpdHkgaW50bworICAgICAgICBTaGFwZU91dHNp
ZGVJbmZvLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZp
bHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFw
ZU91dHNpZGVJbmZvOjpjb21wdXRlZFNoYXBlUGh5c2ljYWxCb3VuZGluZ0JveCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpzaGFwZVRvUmVuZGVyZXJQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpzaGFwZVRvUmVuZGVyZXJTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJlZmVyZW5jZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91
dHNpZGVJbmZvOjpzZXRSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjaGVja1NoYXBlSW1hZ2VPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhcGVJbWFn
ZUFuZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhcGVJbWFnZU1hcmdpblJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZWRTaGFwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpib3JkZXJCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJvcmRlckFuZFBhZGRpbmdCZWZvcmVJbldyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXBlT3V0c2lkZUluZm86OmxvZ2ljYWxUb3BPZmZzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Ym9yZGVyU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpib3JkZXJBbmRQYWRkaW5nU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpsb2dpY2FsTGVmdE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjb21wdXRlU2VnbWVudHNGb3JMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5p
bmdCbG9ja0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6c2hhcGVW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpzdHls
ZUZvcldyaXRpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1No
YXBlT3V0c2lkZUluZm8uaDoKKwogMjAxNC0wNC0wMyAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBs
ZS5jb20+CiAKICAgICAgICAgQ29udGludWF0aW9ucyBjYXN0aW5nIGlzc3VlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCAzYjVkNjNiMDNmODljMmRkNDFlMmI4NmI1MTc1YmY2NjJhNDY2ZGMwLi43
M2UyYjRkZDg2ODVhOGZjN2EwMjEzMWI2MzQ1MGMwZjk1OWI4YzZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMjIyMSw3ICsyMjIxLDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRl
cmluZy9zaGFwZXMvUmFzdGVyU2hhcGUuY3BwCiAgICAgcmVuZGVyaW5nL3NoYXBlcy9SZWN0YW5n
bGVTaGFwZS5jcHAKICAgICByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAotICAgIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbmZvLmNwcAogICAgIHJlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRl
SW5mby5jcHAKIAogICAgIHJlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCmluZGV4IGRjMjM4OTU4
NzIyZGQ5ZWNkZDA5NTczNDI1MmJiMWZmMWJhZWQ3MjkuLjg2MTJkNzQzYjlmNWE0OGYyNjY0NzA1
OTExNGI3ZWVhMmEzZDcwN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvagpAQCAtMTEzMTEsNyArMTEzMTEsNiBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xSYXN0ZXJTaGFwZS5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUlu
Zm8uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xT
aGFwZU91dHNpZGVJbmZvLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRl
cmluZ1xzdmdcU1ZHUGF0aERhdGEuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0yMDA1OCw3ICsyMDA1Nyw2IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJhc3RlclNoYXBlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFJlY3RhbmdsZVNoYXBlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5m
by5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFw
ZUludGVydmFsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hh
cGVzXFNoYXBlT3V0c2lkZUluZm8uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzdmdcUmVuZGVyU1ZHQmxvY2suaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBjY2IzNWY1
NWIyMjZkMGI2N2U2ZWI0N2U3NmI5Mzg5MWNlZjU0ZjZlLi4yNDM1NGFiZWQ0YzVmNmRkNmE3ZTg1
ZDY4YjBjMDFmNTc4MzJlMzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
eHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC02ODAyLDkgKzY4MDIsNiBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5jcHAiPgog
ICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc2hhcGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5mby5j
cHAiPgotICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc2hhcGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBl
SW5zaWRlSW5mby5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc2hhcGVzPC9GaWx0ZXI+
CiAgICAgPC9DbENvbXBpbGU+CkBAIC0xNDY0Myw5ICsxNDY0MCw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmgiPgogICAgICAgPEZpbHRlcj5y
ZW5kZXJpbmdcc2hhcGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5mby5oIj4KLSAgICAgIDxGaWx0
ZXI+cmVuZGVyaW5nXHNoYXBlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZUluc2lkZUluZm8uaCI+CiAg
ICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzaGFwZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAwMWUyY2VkYzYyMmM1NWNjNmQ0ZTFmYjAxYTAyZWZlNzI0Mzc1YTg0Li5iZTJjYTk2ZmFj
MTAxN2Q0Njc2ODMyYTU1MDdlYzAwMWY0OWRiMWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MzkyLDEwICs2MzkyLDggQEAK
IAkJRkQzNTkxOEYxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDM1OTE4RDEzOERC
MjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCAqLzsgfTsKIAkJRkQzNTkxOTAx
MzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQzNTkxOEUxMzhEQjIyMDAwRTFFQkVDIC8q
IEF1ZGlvUGFyYW1UaW1lbGluZS5oICovOyB9OwogCQlGRDQ1QTk0RjE3NUQzRjNFMDBDMjFFQzgg
LyogU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZEMDhBODdGMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZENDVBOTUwMTc1RDNGM0UwMEMyMUVDOCAv
KiBTaGFwZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEMDhBODgxMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZUluZm8uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRDQ1QTk1MjE3NUQzRjNFMDBD
MjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lk
ZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlGRDQ1QTk1MzE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0UxNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlLmNwcCAqLzsgfTsKLQkJRkQ0NUE5NTQxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlSW5m
by5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4
QTg4MDE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVJbmZvLmNwcCAqLzsgfTsKIAkJRkQ0NUE5NTYx
NzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYwIC8q
IFNoYXBlT3V0c2lkZUluZm8uY3BwICovOyB9OwogCQlGRDQ1QTk1NzE3NUQ0MTRDMDBDMjFFQzgg
LyogUG9seWdvblNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRDA4QTg3QjE3NUQzOTI2MDAyQ0QzNjAgLyogUG9seWdvblNoYXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkQ0NUE5NTgxNzVE
NDE0QzAwQzIxRUM4IC8qIFJlY3RhbmdsZVNoYXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyogUmVjdGFu
Z2xlU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTM3MDYsOCArMTM3MDQsNiBAQAogCQlGRDA4QTg3RDE3NUQzOTI2MDAyQ0QzNjAgLyog
UmVjdGFuZ2xlU2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVjdGFu
Z2xlU2hhcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwOEE4N0UxNzVEMzky
NjAwMkNEMzYwIC8qIFNoYXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNoYXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwOEE4N0YxNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNoYXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZEMDhBODgwMTc1RDM5MjYw
MDJDRDM2MCAvKiBTaGFwZUluZm8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2hhcGVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQwOEE4
ODExNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaGFwZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQw
OEE4ODUxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50ZXJ2YWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2hhcGVJbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGRDA4QTg4NjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZU91dHNpZGVJbmZvLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlT3V0c2lkZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2hhcGVPdXRzaWRlSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI1NDAs
OCArMjI1MzYsNiBAQAogCQkJCUZEMDhBODdEMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVT
aGFwZS5oICovLAogCQkJCUZEMDhBODdFMTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZS5jcHAgKi8s
CiAJCQkJRkQwOEE4N0YxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmggKi8sCi0JCQkJRkQwOEE4
ODAxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5jcHAgKi8sCi0JCQkJRkQwOEE4ODExNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovLAogCQkJCUZEMDhBODg1MTc1RDM5MjYwMDJD
RDM2MCAvKiBTaGFwZUludGVydmFsLmggKi8sCiAJCQkJRkQwOEE4ODYxNzVEMzkyNjAwMkNEMzYw
IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwICovLAogCQkJCUZEMDhBODg3MTc1RDM5MjYwMDJDRDM2
MCAvKiBTaGFwZU91dHNpZGVJbmZvLmggKi8sCkBAIC0yNTQ5MSw3ICsyNTQ4NSw2IEBACiAJCQkJ
QkM1RUI4QzQwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE2RDE2OTY0MTM0NkI0QzEwMDBFQjc3MCAvKiBTaGFkb3dSb290LmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRDQ1QTk0RjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCUZENDVBOTUwMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZUluZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZENDVBOTVCMTc1RDQxRUUwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1MjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRl
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIFNo
YXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLApAQCAtMjg4NjQsNyArMjg4NTcsNiBAQAogCQkJCUJD
NUVCOEMzMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE2RDE2OTYyMTM0NkI0OUIwMDBFQjc3MCAvKiBTaGFkb3dSb290LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZENDVBOTUzMTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlGRDQ1QTk1NDE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZENDVBOTU2MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNEE5NTREMEI0RURDQ0IwMDJEOEMzQyAvKiBT
aGFyZWRCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RTMwRDkxRTJCNDAwMEY4
OUVFIC8qIFNoYXJlZEJ1ZmZlckNGLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxOWRkZGEzZThjYjQzMTcwOWZkZTY4ZGFjZjgxMDI4MDk3Nzc3YzkzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI3NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0g
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJTaGFwZUluZm8uaCIKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5jbHVk
ZSAiQm94U2hhcGUuaCIKLSNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlcklt
YWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKLSNpbmNsdWRlICJTaGFwZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRl
PGNsYXNzIFJlbmRlclR5cGU+Ci12b2lkIFNoYXBlSW5mbzxSZW5kZXJUeXBlPjo6c2V0UmVmZXJl
bmNlQm94TG9naWNhbFNpemUoTGF5b3V0U2l6ZSBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSkK
LXsKLSAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gdGhpcy0+c3R5bGVGb3JXcml0
aW5nTW9kZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Ci0gICAgc3dpdGNoIChyZWZlcmVu
Y2VCb3goKSkgewotICAgIGNhc2UgTWFyZ2luQm94OgotICAgICAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUpCi0gICAgICAgICAgICBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5leHBh
bmQobV9yZW5kZXJlci5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCksIG1fcmVuZGVyZXIudmVydGlj
YWxNYXJnaW5FeHRlbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1JlZmVyZW5j
ZUJveExvZ2ljYWxTaXplLmV4cGFuZChtX3JlbmRlcmVyLnZlcnRpY2FsTWFyZ2luRXh0ZW50KCks
IG1fcmVuZGVyZXIuaG9yaXpvbnRhbE1hcmdpbkV4dGVudCgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBCb3JkZXJCb3g6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUGFkZGluZ0JveDoK
LSAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICAgICAgbmV3UmVm
ZXJlbmNlQm94TG9naWNhbFNpemUuc2hyaW5rKG1fcmVuZGVyZXIuaG9yaXpvbnRhbEJvcmRlckV4
dGVudCgpLCBtX3JlbmRlcmVyLnZlcnRpY2FsQm9yZGVyRXh0ZW50KCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5zaHJpbmsobV9yZW5kZXJl
ci52ZXJ0aWNhbEJvcmRlckV4dGVudCgpLCBtX3JlbmRlcmVyLmhvcml6b250YWxCb3JkZXJFeHRl
bnQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29udGVudEJveDoKLSAgICAgICAgaWYg
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICAgICAgbmV3UmVmZXJlbmNlQm94TG9n
aWNhbFNpemUuc2hyaW5rKG1fcmVuZGVyZXIuaG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRl
bnQoKSwgbV9yZW5kZXJlci52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1JlZmVyZW5jZUJveExvZ2ljYWxTaXplLnNocmluayht
X3JlbmRlcmVyLnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBtX3JlbmRlcmVyLmhv
cml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZpbGw6Ci0gICAgY2FzZSBTdHJva2U6Ci0gICAgY2FzZSBWaWV3Qm94OgotICAgIGNhc2Ug
Qm94TWlzc2luZzoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGlmIChtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXplID09IG5ld1JlZmVy
ZW5jZUJveExvZ2ljYWxTaXplKQotICAgICAgICByZXR1cm47Ci0gICAgbWFya1NoYXBlQXNEaXJ0
eSgpOwotICAgIG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemUgPSBuZXdSZWZlcmVuY2VCb3hMb2dp
Y2FsU2l6ZTsKLX0KLQotYm9vbCBjaGVja1NoYXBlSW1hZ2VPcmlnaW4oRG9jdW1lbnQmIGRvY3Vt
ZW50LCBDYWNoZWRJbWFnZSYgY2FjaGVkSW1hZ2UpCi17Ci0gICAgaWYgKGNhY2hlZEltYWdlLmlz
T3JpZ2luQ2xlYW4oZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgY29uc3QgVVJMJiB1cmwgPSBjYWNoZWRJbWFnZS51cmwoKTsKLSAgICBTdHJp
bmcgdXJsU3RyaW5nID0gdXJsLmlzTnVsbCgpID8gIicnIiA6IHVybC5zdHJpbmdDZW50ZXJFbGxp
cHNpemVkVG9MZW5ndGgoKTsKLSAgICBkb2N1bWVudC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgIlVuc2FmZSBhdHRlbXB0IHRv
IGxvYWQgVVJMICIgKyB1cmxTdHJpbmcgKyAiLiIpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1zdGF0aWMgdm9pZCBnZXRTaGFwZUltYWdlQW5kUmVjdChjb25zdCBTaGFwZVZhbHVlKiBzaGFw
ZVZhbHVlLCBjb25zdCBSZW5kZXJCb3gqIHJlbmRlckJveCwgY29uc3QgTGF5b3V0U2l6ZSYgcmVm
ZXJlbmNlQm94U2l6ZSwgSW1hZ2UqJiBpbWFnZSwgTGF5b3V0UmVjdCYgcmVjdCkKLXsKLSAgICBB
U1NFUlQoc2hhcGVWYWx1ZS0+aXNJbWFnZVZhbGlkKCkpOwotICAgIFN0eWxlSW1hZ2UqIHN0eWxl
SW1hZ2UgPSBzaGFwZVZhbHVlLT5pbWFnZSgpOwotCi0gICAgY29uc3QgSW50U2l6ZSYgaW1hZ2VT
aXplID0gcmVuZGVyQm94LT5jYWxjdWxhdGVJbWFnZUludHJpbnNpY0RpbWVuc2lvbnMoc3R5bGVJ
bWFnZSwgcm91bmRlZEludFNpemUocmVmZXJlbmNlQm94U2l6ZSksIFJlbmRlckltYWdlOjpTY2Fs
ZUJ5RWZmZWN0aXZlWm9vbSk7Ci0gICAgc3R5bGVJbWFnZS0+c2V0Q29udGFpbmVyU2l6ZUZvclJl
bmRlcmVyKHJlbmRlckJveCwgaW1hZ2VTaXplLCByZW5kZXJCb3gtPnN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpKTsKLQotICAgIGltYWdlID0gc3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VG
b3JSZW5kZXJlcihyZW5kZXJCb3gpOwotICAgIGlmIChyZW5kZXJCb3gtPmlzUmVuZGVySW1hZ2Uo
KSkKLSAgICAgICAgcmVjdCA9IHRvUmVuZGVySW1hZ2UocmVuZGVyQm94KS0+cmVwbGFjZWRDb250
ZW50UmVjdChyZW5kZXJCb3gtPmludHJpbnNpY1NpemUoKSk7Ci0gICAgZWxzZQotICAgICAgICBy
ZWN0ID0gTGF5b3V0UmVjdChMYXlvdXRQb2ludCgpLCBpbWFnZVNpemUpOwotfQotCi1zdGF0aWMg
TGF5b3V0UmVjdCBnZXRTaGFwZUltYWdlTWFyZ2luUmVjdChjb25zdCBSZW5kZXJCb3gmIHJlbmRl
ckJveCwgY29uc3QgTGF5b3V0U2l6ZSYgcmVmZXJlbmNlQm94TG9naWNhbFNpemUpCi17Ci0gICAg
TGF5b3V0UG9pbnQgbWFyZ2luQm94T3JpZ2luKC1yZW5kZXJCb3gubWFyZ2luTG9naWNhbExlZnQo
KSAtIHJlbmRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbExlZnQoKSwgLXJlbmRlckJveC5t
YXJnaW5CZWZvcmUoKSAtIHJlbmRlckJveC5ib3JkZXJCZWZvcmUoKSAtIHJlbmRlckJveC5wYWRk
aW5nQmVmb3JlKCkpOwotICAgIExheW91dFNpemUgbWFyZ2luQm94U2l6ZURlbHRhKHJlbmRlckJv
eC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSArIHJlbmRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9naWNh
bFdpZHRoKCksIHJlbmRlckJveC5tYXJnaW5Mb2dpY2FsSGVpZ2h0KCkgKyByZW5kZXJCb3guYm9y
ZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgcmV0dXJuIExheW91dFJlY3QobWFy
Z2luQm94T3JpZ2luLCByZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSArIG1hcmdpbkJveFNpemVEZWx0
YSk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGU+Ci1jb25zdCBTaGFwZSYgU2hhcGVJ
bmZvPFJlbmRlclR5cGU+Ojpjb21wdXRlZFNoYXBlKCkgY29uc3QKLXsKLSAgICBpZiAoU2hhcGUq
IHNoYXBlID0gbV9zaGFwZS5nZXQoKSkKLSAgICAgICAgcmV0dXJuICpzaGFwZTsKLQotICAgIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlID0gdGhpcy0+c3R5bGVGb3JXcml0aW5nTW9kZSgpLndyaXRp
bmdNb2RlKCk7Ci0gICAgTGVuZ3RoIG1hcmdpbiA9IG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU1h
cmdpbigpOwotICAgIGZsb2F0IHNoYXBlSW1hZ2VUaHJlc2hvbGQgPSBtX3JlbmRlcmVyLnN0eWxl
KCkuc2hhcGVJbWFnZVRocmVzaG9sZCgpOwotICAgIGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlVmFs
dWUgPSB0aGlzLT5zaGFwZVZhbHVlKCk7Ci0gICAgQVNTRVJUKHNoYXBlVmFsdWUpOwotCi0gICAg
c3dpdGNoIChzaGFwZVZhbHVlLT50eXBlKCkpIHsKLSAgICBjYXNlIFNoYXBlVmFsdWU6OlNoYXBl
OgotICAgICAgICBBU1NFUlQoc2hhcGVWYWx1ZS0+c2hhcGUoKSk7Ci0gICAgICAgIG1fc2hhcGUg
PSBTaGFwZTo6Y3JlYXRlU2hhcGUoc2hhcGVWYWx1ZS0+c2hhcGUoKSwgbV9yZWZlcmVuY2VCb3hM
b2dpY2FsU2l6ZSwgd3JpdGluZ01vZGUsIG1hcmdpbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgU2hhcGVWYWx1ZTo6SW1hZ2U6IHsKLSAgICAgICAgSW1hZ2UqIGltYWdlOwotICAgICAgICBM
YXlvdXRSZWN0IGltYWdlUmVjdDsKLSAgICAgICAgZ2V0U2hhcGVJbWFnZUFuZFJlY3Qoc2hhcGVW
YWx1ZSwgJm1fcmVuZGVyZXIsIG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemUsIGltYWdlLCBpbWFn
ZVJlY3QpOwotICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBtYXJnaW5SZWN0ID0gZ2V0U2hhcGVJ
bWFnZU1hcmdpblJlY3QobV9yZW5kZXJlciwgbV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSk7Ci0g
ICAgICAgIG1fc2hhcGUgPSBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUoaW1hZ2UsIHNoYXBlSW1h
Z2VUaHJlc2hvbGQsIGltYWdlUmVjdCwgbWFyZ2luUmVjdCwgd3JpdGluZ01vZGUsIG1hcmdpbik7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFNoYXBlVmFsdWU6OkJveDogewotICAg
ICAgICBSb3VuZGVkUmVjdCBzaGFwZVJlY3QgPSBjb21wdXRlUm91bmRlZFJlY3RGb3JCb3hTaGFw
ZShyZWZlcmVuY2VCb3goKSwgbV9yZW5kZXJlcik7Ci0gICAgICAgIGlmICghdGhpcy0+c3R5bGVG
b3JXcml0aW5nTW9kZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBz
aGFwZVJlY3QgPSBzaGFwZVJlY3QudHJhbnNwb3NlZFJlY3QoKTsKLSAgICAgICAgbV9zaGFwZSA9
IFNoYXBlOjpjcmVhdGVCb3hTaGFwZShzaGFwZVJlY3QsIHdyaXRpbmdNb2RlLCBtYXJnaW4pOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBTaGFwZVZhbHVlOjpPdXRzaWRlOgotICAg
ICAgICAvLyBPdXRzaWRlIHNob3VsZCBoYXZlIGFscmVhZHkgcmVzb2x2ZWQgdG8gYSBkaWZmZXJl
bnQgc2hhcGUgdmFsdWUKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0g
ICAgQVNTRVJUKG1fc2hhcGUpOwotICAgIHJldHVybiAqbV9zaGFwZTsKLX0KLQotdGVtcGxhdGU8
Y2xhc3MgUmVuZGVyVHlwZT4KLVNlZ21lbnRMaXN0IFNoYXBlSW5mbzxSZW5kZXJUeXBlPjo6Y29t
cHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhl
aWdodCkgY29uc3QKLXsKLSAgICBBU1NFUlQobGluZUhlaWdodCA+PSAwKTsKLSAgICBTZWdtZW50
TGlzdCBzZWdtZW50czsKLQotICAgIGdldEludGVydmFscygobGluZVRvcCAtIGxvZ2ljYWxUb3BP
ZmZzZXQoKSksIHN0ZDo6bWluKGxpbmVIZWlnaHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gbGlu
ZVRvcCksIHNlZ21lbnRzKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VnbWVudHMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgc2VnbWVudHNbaV0ubG9naWNhbExlZnQgKz0gbG9naWNh
bExlZnRPZmZzZXQoKTsKLSAgICAgICAgc2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0ICs9IGxvZ2lj
YWxMZWZ0T2Zmc2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNlZ21lbnRzOwotfQotCi10ZW1w
bGF0ZTxjbGFzcyBSZW5kZXJUeXBlPgotaW5saW5lIExheW91dFVuaXQgYm9yZGVyQmVmb3JlSW5X
cml0aW5nTW9kZShjb25zdCBSZW5kZXJUeXBlJiByZW5kZXJlciwgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUpCi17Ci0gICAgc3dpdGNoICh3cml0aW5nTW9kZSkgewotICAgIGNhc2UgVG9wVG9Cb3R0
b21Xcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpOwotICAgIGNhc2UgQm90
dG9tVG9Ub3BXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckJvdHRvbSgpOwotICAg
IGNhc2UgTGVmdFRvUmlnaHRXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQo
KTsKLSAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6IHJldHVybiByZW5kZXJlci5ib3Jk
ZXJSaWdodCgpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biByZW5kZXJlci5ib3JkZXJCZWZvcmUoKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlw
ZT4KLWlubGluZSBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRpbmdCZWZvcmVJbldyaXRpbmdNb2Rl
KGNvbnN0IFJlbmRlclR5cGUmIHJlbmRlcmVyLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsK
LSAgICBzd2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdN
b2RlOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyVG9wKCkgKyByZW5kZXJlci5wYWRkaW5nVG9wKCk7
Ci0gICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVy
Qm90dG9tKCkgKyByZW5kZXJlci5wYWRkaW5nQm90dG9tKCk7Ci0gICAgY2FzZSBMZWZ0VG9SaWdo
dFdyaXRpbmdNb2RlOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFk
ZGluZ0xlZnQoKTsKLSAgICBjYXNlIFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6IHJldHVybiByZW5k
ZXJlci5ib3JkZXJSaWdodCgpICsgcmVuZGVyZXIucGFkZGluZ1JpZ2h0KCk7Ci0gICAgfQotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRlckFuZFBh
ZGRpbmdCZWZvcmUoKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlwZT4KLUxheW91dFVu
aXQgU2hhcGVJbmZvPFJlbmRlclR5cGU+Ojpsb2dpY2FsVG9wT2Zmc2V0KCkgY29uc3QKLXsKLSAg
ICBzd2l0Y2ggKHJlZmVyZW5jZUJveCgpKSB7Ci0gICAgY2FzZSBNYXJnaW5Cb3g6IHJldHVybiAt
bV9yZW5kZXJlci5tYXJnaW5CZWZvcmUoJnN0eWxlRm9yV3JpdGluZ01vZGUoKSk7Ci0gICAgY2Fz
ZSBCb3JkZXJCb3g6IHJldHVybiBMYXlvdXRVbml0KCk7Ci0gICAgY2FzZSBQYWRkaW5nQm94OiBy
ZXR1cm4gYm9yZGVyQmVmb3JlSW5Xcml0aW5nTW9kZShtX3JlbmRlcmVyLCBzdHlsZUZvcldyaXRp
bmdNb2RlKCkud3JpdGluZ01vZGUoKSk7Ci0gICAgY2FzZSBDb250ZW50Qm94OiByZXR1cm4gYm9y
ZGVyQW5kUGFkZGluZ0JlZm9yZUluV3JpdGluZ01vZGUobV9yZW5kZXJlciwgc3R5bGVGb3JXcml0
aW5nTW9kZSgpLndyaXRpbmdNb2RlKCkpOwotICAgIGNhc2UgRmlsbDogYnJlYWs7Ci0gICAgY2Fz
ZSBTdHJva2U6IGJyZWFrOwotICAgIGNhc2UgVmlld0JveDogYnJlYWs7Ci0gICAgY2FzZSBCb3hN
aXNzaW5nOiBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gTGF5b3V0VW5pdCgpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlPgotaW5s
aW5lIExheW91dFVuaXQgYm9yZGVyU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZShjb25zdCBS
ZW5kZXJUeXBlJiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIGlm
IChzdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIuYm9y
ZGVyTGVmdCgpOwotCi0gICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgpOwotICAg
IH0KLSAgICBpZiAoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICByZXR1
cm4gcmVuZGVyZXIuYm9yZGVyVG9wKCk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90
dG9tKCk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGU+Ci1pbmxpbmUgTGF5b3V0VW5p
dCBib3JkZXJBbmRQYWRkaW5nU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZShjb25zdCBSZW5k
ZXJUeXBlJiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIGlmIChz
dHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGlmIChzdHlsZS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVy
TGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQoKTsKLQotICAgICAgICByZXR1cm4gcmVuZGVy
ZXIuYm9yZGVyUmlnaHQoKSArIHJlbmRlcmVyLnBhZGRpbmdSaWdodCgpOwotICAgIH0KLSAgICBp
ZiAoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICByZXR1cm4gcmVuZGVy
ZXIuYm9yZGVyVG9wKCkgKyByZW5kZXJlci5wYWRkaW5nVG9wKCk7Ci0KLSAgICByZXR1cm4gcmVu
ZGVyZXIuYm9yZGVyQm90dG9tKCkgKyByZW5kZXJlci5wYWRkaW5nQm90dG9tKCk7Ci19Ci0KLXRl
bXBsYXRlPGNsYXNzIFJlbmRlclR5cGU+Ci1MYXlvdXRVbml0IFNoYXBlSW5mbzxSZW5kZXJUeXBl
Pjo6bG9naWNhbExlZnRPZmZzZXQoKSBjb25zdAotewotICAgIGlmIChtX3JlbmRlcmVyLmlzUmVu
ZGVyUmVnaW9uKCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7Ci0KLSAgICBzd2l0Y2gg
KHJlZmVyZW5jZUJveCgpKSB7Ci0gICAgY2FzZSBNYXJnaW5Cb3g6IHJldHVybiAtbV9yZW5kZXJl
ci5tYXJnaW5TdGFydCgmc3R5bGVGb3JXcml0aW5nTW9kZSgpKTsKLSAgICBjYXNlIEJvcmRlckJv
eDogcmV0dXJuIExheW91dFVuaXQoKTsKLSAgICBjYXNlIFBhZGRpbmdCb3g6IHJldHVybiBib3Jk
ZXJTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKG1fcmVuZGVyZXIsIHN0eWxlRm9yV3JpdGlu
Z01vZGUoKSk7Ci0gICAgY2FzZSBDb250ZW50Qm94OiByZXR1cm4gYm9yZGVyQW5kUGFkZGluZ1N0
YXJ0V2l0aFN0eWxlRm9yV3JpdGluZ01vZGUobV9yZW5kZXJlciwgc3R5bGVGb3JXcml0aW5nTW9k
ZSgpKTsKLSAgICBjYXNlIEZpbGw6IGJyZWFrOwotICAgIGNhc2UgU3Ryb2tlOiBicmVhazsKLSAg
ICBjYXNlIFZpZXdCb3g6IGJyZWFrOwotICAgIGNhc2UgQm94TWlzc2luZzogYnJlYWs7Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIExheW91dFVuaXQoKTsK
LX0KLQotdGVtcGxhdGUgY2xhc3MgU2hhcGVJbmZvPFJlbmRlckJsb2NrPjsKLXRlbXBsYXRlIGNs
YXNzIFNoYXBlSW5mbzxSZW5kZXJCb3g+OwotCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjYzNlMzQzNDM3NjdmYzY3YWUxMWRjNzQxODhmZGJiMDM2ZGNmYWIxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVJbmZvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoK
LSogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0q
Ci0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKLSogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKLSogICAgZGlzY2xhaW1lci4KLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotKiAgICBkaXNjbGFp
bWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSogICAgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotKiBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0qIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SCi0qIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRgotKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qLwotCi0j
aWZuZGVmIFNoYXBlSW5mb19oCi0jZGVmaW5lIFNoYXBlSW5mb19oCi0KLSNpZiBFTkFCTEUoQ1NT
X1NIQVBFUykKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkxheW91dFVuaXQu
aCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNoYXBlLmgiCi0jaW5jbHVk
ZSAiU2hhcGVWYWx1ZS5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8Y2xhc3MgS2V5VHlwZSwgY2xh
c3MgSW5mb1R5cGU+Ci1jbGFzcyBNYXBwZWRJbmZvIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgSW5m
b1R5cGUmIGVuc3VyZUluZm8oY29uc3QgS2V5VHlwZSYga2V5KQotICAgIHsKLSAgICAgICAgSW5m
b01hcCYgaW5mb01hcCA9IE1hcHBlZEluZm88S2V5VHlwZSwgSW5mb1R5cGU+OjppbmZvTWFwKCk7
Ci0gICAgICAgIGlmIChJbmZvVHlwZSogaW5mbyA9IGluZm9NYXAuZ2V0KCZrZXkpKQotICAgICAg
ICAgICAgcmV0dXJuICppbmZvOwotICAgICAgICB0eXBlbmFtZSBJbmZvTWFwOjpBZGRSZXN1bHQg
cmVzdWx0ID0gaW5mb01hcC5hZGQoJmtleSwgc3RkOjptYWtlX3VuaXF1ZTxJbmZvVHlwZT4oa2V5
KSk7Ci0gICAgICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICB9Ci0gICAg
c3RhdGljIHZvaWQgcmVtb3ZlSW5mbyhjb25zdCBLZXlUeXBlJiBrZXkpIHsgaW5mb01hcCgpLnJl
bW92ZSgma2V5KTsgfQotICAgIHN0YXRpYyBJbmZvVHlwZSogaW5mbyhjb25zdCBLZXlUeXBlJiBr
ZXkpIHsgcmV0dXJuIGluZm9NYXAoKS5nZXQoJmtleSk7IH0KLQotcHJpdmF0ZToKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8Y29uc3QgS2V5VHlwZSosIHN0ZDo6dW5pcXVlX3B0cjxJbmZvVHlwZT4+IElu
Zm9NYXA7Ci0gICAgc3RhdGljIEluZm9NYXAmIGluZm9NYXAoKQotICAgIHsKLSAgICAgICAgREVQ
UkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEluZm9NYXAsIHN0YXRpY0luZm9NYXAsICgpKTsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY0luZm9NYXA7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Y2xh
c3MgUmVuZGVyVHlwZT4KLWNsYXNzIFNoYXBlSW5mbyB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+U2hhcGVJbmZvKCkgeyB9Ci0KLSAgICB2b2lk
IHNldFJlZmVyZW5jZUJveExvZ2ljYWxTaXplKExheW91dFNpemUpOwotCi0gICAgU2VnbWVudExp
c3QgY29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUhlaWdodCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS55KCkgKyBsb2dp
Y2FsVG9wT2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkgKyBs
b2dpY2FsVG9wT2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbExlZnQoKSBj
b25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9n
aWNhbExlZnRPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBj
b25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpICsg
bG9naWNhbExlZnRPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsV2lkdGgo
KSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkud2lkdGgo
KTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
Y29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9Ci0KLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxMaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VCb3hMaW5l
VG9wICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZUJv
dHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlQm94TGluZVRvcCArIG1fbGluZUhlaWdo
dCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbExpbmVCb3R0
b20oTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBjb25zdCB7IHJldHVybiBtX3JlZmVyZW5jZUJveExp
bmVUb3AgKyBsaW5lSGVpZ2h0ICsgbG9naWNhbFRvcE9mZnNldCgpOyB9Ci0KLSAgICBMYXlvdXRV
bml0IHNoYXBlQ29udGFpbmluZ0Jsb2NrTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuICht
X3JlbmRlcmVyLnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpID8gKG1fcmVmZXJl
bmNlQm94TG9naWNhbFNpemUuaGVpZ2h0KCkgKyBtX3JlbmRlcmVyLmJvcmRlckFuZFBhZGRpbmdM
b2dpY2FsSGVpZ2h0KCkpIDogbV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5oZWlnaHQoKTsgfQot
Ci0gICAgdmlydHVhbCBib29sIGxpbmVPdmVybGFwc1NoYXBlQm91bmRzKCkgY29uc3QgPSAwOwot
Ci0gICAgdm9pZCBtYXJrU2hhcGVBc0RpcnR5KCkgeyBtX3NoYXBlID0gbnVsbHB0cjsgfQotICAg
IGJvb2wgaXNTaGFwZURpcnR5KCkgeyByZXR1cm4gIW1fc2hhcGU7IH0KLSAgICBjb25zdCBSZW5k
ZXJUeXBlJiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KLSAgICBMYXlvdXRT
aXplIHJlZmVyZW5jZUJveExvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VC
b3hMb2dpY2FsU2l6ZTsgfQotCi0gICAgTGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlUGh5c2ljYWxC
b3VuZGluZ0JveCgpIGNvbnN0Ci0gICAgewotICAgICAgICBMYXlvdXRSZWN0IHBoeXNpY2FsQm91
bmRpbmdCb3ggPSBjb21wdXRlZFNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCk7Ci0gICAgICAgIHBo
eXNpY2FsQm91bmRpbmdCb3guc2V0WChwaHlzaWNhbEJvdW5kaW5nQm94LngoKSArIGxvZ2ljYWxM
ZWZ0T2Zmc2V0KCkpOwotICAgICAgICBwaHlzaWNhbEJvdW5kaW5nQm94LnNldFkocGh5c2ljYWxC
b3VuZGluZ0JveC55KCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCkpOwotICAgICAgICBpZiAobV9yZW5k
ZXJlci5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBw
aHlzaWNhbEJvdW5kaW5nQm94LnNldFkobV9yZW5kZXJlci5sb2dpY2FsSGVpZ2h0KCkgLSBwaHlz
aWNhbEJvdW5kaW5nQm94Lm1heFkoKSk7Ci0gICAgICAgIGlmICghbV9yZW5kZXJlci5zdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBwaHlzaWNhbEJvdW5kaW5n
Qm94ID0gcGh5c2ljYWxCb3VuZGluZ0JveC50cmFuc3Bvc2VkUmVjdCgpOwotICAgICAgICByZXR1
cm4gcGh5c2ljYWxCb3VuZGluZ0JveDsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IHNoYXBlVG9S
ZW5kZXJlclBvaW50KEZsb2F0UG9pbnQgcG9pbnQpIGNvbnN0Ci0gICAgewotICAgICAgICBGbG9h
dFBvaW50IHJlc3VsdCA9IEZsb2F0UG9pbnQocG9pbnQueCgpICsgbG9naWNhbExlZnRPZmZzZXQo
KSwgcG9pbnQueSgpICsgbG9naWNhbFRvcE9mZnNldCgpKTsKLSAgICAgICAgaWYgKG1fcmVuZGVy
ZXIuc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmVz
dWx0LnNldFkobV9yZW5kZXJlci5sb2dpY2FsSGVpZ2h0KCkgLSByZXN1bHQueSgpKTsKLSAgICAg
ICAgaWYgKCFtX3JlbmRlcmVyLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAg
ICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50cmFuc3Bvc2VkUG9pbnQoKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBGbG9hdFNpemUgc2hhcGVUb1JlbmRlcmVyU2l6ZShG
bG9hdFNpemUgc2l6ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9yZW5kZXJlci5zdHls
ZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gc2l6ZS50
cmFuc3Bvc2VkU2l6ZSgpOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9Ci0KLSAgICBjb25z
dCBTaGFwZSYgY29tcHV0ZWRTaGFwZSgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGlj
aXQgU2hhcGVJbmZvKGNvbnN0IFJlbmRlclR5cGUmIHJlbmRlcmVyKQotICAgICAgICA6IG1fcmVu
ZGVyZXIocmVuZGVyZXIpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgQ1NTQm94VHlwZSBy
ZWZlcmVuY2VCb3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVk
U2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTaGFwZVZh
bHVlKiBzaGFwZVZhbHVlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlcnZh
bHMoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCwgU2VnbWVudExpc3QmKSBjb25zdCA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZUZvcldyaXRpbmdNb2RlKCkgY29uc3Qg
PSAwOwotCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0KCkgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0OwotCi0gICAgTGF5b3V0VW5pdCBtX3Jl
ZmVyZW5jZUJveExpbmVUb3A7Ci0gICAgTGF5b3V0VW5pdCBtX2xpbmVIZWlnaHQ7Ci0KLSAgICBj
b25zdCBSZW5kZXJUeXBlJiBtX3JlbmRlcmVyOwotCi1wcml2YXRlOgotICAgIG11dGFibGUgc3Rk
Ojp1bmlxdWVfcHRyPFNoYXBlPiBtX3NoYXBlOwotICAgIExheW91dFNpemUgbV9yZWZlcmVuY2VC
b3hMb2dpY2FsU2l6ZTsKLX07Ci0KLWJvb2wgY2hlY2tTaGFwZUltYWdlT3JpZ2luKERvY3VtZW50
JiwgQ2FjaGVkSW1hZ2UmKTsKLQotfQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCmluZGV4IGJmOWRm
ODk2OGQ0MjhlNGM5MzIzN2NlY2QyZmI3NTM5YWVmM2Y4ZjUuLjA0ZTY0NjZiMTRiNDAyOTYyOTFj
ZDgyMjBlOGY1MTRkZTEzZWMyYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcApAQCAtMzMsMTIgKzMzLDI1OCBAQAogCiAj
aW5jbHVkZSAiU2hhcGVPdXRzaWRlSW5mby5oIgogCisjaW5jbHVkZSAiQm94U2hhcGUuaCIKICNp
bmNsdWRlICJGbG9hdGluZ09iamVjdHMuaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIK
ICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNp
bmNsdWRlICJSZW5kZXJJbWFnZS5oIgorI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK0xheW91dFJlY3QgU2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZWRT
aGFwZVBoeXNpY2FsQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIExheW91dFJlY3QgcGh5c2lj
YWxCb3VuZGluZ0JveCA9IGNvbXB1dGVkU2hhcGUoKS5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGlu
Z0JveCgpOworICAgIHBoeXNpY2FsQm91bmRpbmdCb3guc2V0WChwaHlzaWNhbEJvdW5kaW5nQm94
LngoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCkpOworICAgIHBoeXNpY2FsQm91bmRpbmdCb3guc2V0
WShwaHlzaWNhbEJvdW5kaW5nQm94LnkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKSk7CisgICAgaWYg
KG1fcmVuZGVyZXIuc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQorICAgICAg
ICBwaHlzaWNhbEJvdW5kaW5nQm94LnNldFkobV9yZW5kZXJlci5sb2dpY2FsSGVpZ2h0KCkgLSBw
aHlzaWNhbEJvdW5kaW5nQm94Lm1heFkoKSk7CisgICAgaWYgKCFtX3JlbmRlcmVyLnN0eWxlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcGh5c2ljYWxCb3VuZGluZ0JveCA9
IHBoeXNpY2FsQm91bmRpbmdCb3gudHJhbnNwb3NlZFJlY3QoKTsKKyAgICByZXR1cm4gcGh5c2lj
YWxCb3VuZGluZ0JveDsKK30KKworRmxvYXRQb2ludCBTaGFwZU91dHNpZGVJbmZvOjpzaGFwZVRv
UmVuZGVyZXJQb2ludChGbG9hdFBvaW50IHBvaW50KSBjb25zdAoreworICAgIEZsb2F0UG9pbnQg
cmVzdWx0ID0gRmxvYXRQb2ludChwb2ludC54KCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpLCBwb2lu
dC55KCkgKyBsb2dpY2FsVG9wT2Zmc2V0KCkpOworICAgIGlmIChtX3JlbmRlcmVyLnN0eWxlKCku
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKKyAgICAgICAgcmVzdWx0LnNldFkobV9yZW5k
ZXJlci5sb2dpY2FsSGVpZ2h0KCkgLSByZXN1bHQueSgpKTsKKyAgICBpZiAoIW1fcmVuZGVyZXIu
c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICByZXN1bHQgPSByZXN1
bHQudHJhbnNwb3NlZFBvaW50KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRmxvYXRTaXpl
IFNoYXBlT3V0c2lkZUluZm86OnNoYXBlVG9SZW5kZXJlclNpemUoRmxvYXRTaXplIHNpemUpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3JlbmRlcmVyLnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIHNpemUudHJhbnNwb3NlZFNpemUoKTsKKyAgICByZXR1cm4g
c2l6ZTsKK30KKworc3RhdGljIGlubGluZSBDU1NCb3hUeXBlIHJlZmVyZW5jZUJveChTaGFwZVZh
bHVlKiBzaGFwZVZhbHVlKQoreworICAgIGlmIChzaGFwZVZhbHVlLT5jc3NCb3goKSA9PSBCb3hN
aXNzaW5nKSB7CisgICAgICAgIGlmIChzaGFwZVZhbHVlLT50eXBlKCkgPT0gU2hhcGVWYWx1ZTo6
SW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gQ29udGVudEJveDsKKyAgICAgICAgcmV0dXJuIE1h
cmdpbkJveDsKKyAgICB9CisgICAgcmV0dXJuIHNoYXBlVmFsdWUtPmNzc0JveCgpOworfQorCit2
b2lkIFNoYXBlT3V0c2lkZUluZm86OnNldFJlZmVyZW5jZUJveExvZ2ljYWxTaXplKExheW91dFNp
emUgbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUpCit7CisgICAgYm9vbCBpc0hvcml6b250YWxX
cml0aW5nTW9kZSA9IG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkuaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKTsKKyAgICBzd2l0Y2ggKHJlZmVyZW5jZUJveChtX3JlbmRlcmVy
LnN0eWxlKCkuc2hhcGVPdXRzaWRlKCkpKSB7CisgICAgY2FzZSBNYXJnaW5Cb3g6CisgICAgICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgICAgIG5ld1JlZmVyZW5jZUJv
eExvZ2ljYWxTaXplLmV4cGFuZChtX3JlbmRlcmVyLmhvcml6b250YWxNYXJnaW5FeHRlbnQoKSwg
bV9yZW5kZXJlci52ZXJ0aWNhbE1hcmdpbkV4dGVudCgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUuZXhwYW5kKG1fcmVuZGVyZXIudmVydGlj
YWxNYXJnaW5FeHRlbnQoKSwgbV9yZW5kZXJlci5ob3Jpem9udGFsTWFyZ2luRXh0ZW50KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEJvcmRlckJveDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQYWRkaW5nQm94OgorICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCisg
ICAgICAgICAgICBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5zaHJpbmsobV9yZW5kZXJlci5o
b3Jpem9udGFsQm9yZGVyRXh0ZW50KCksIG1fcmVuZGVyZXIudmVydGljYWxCb3JkZXJFeHRlbnQo
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1JlZmVyZW5jZUJveExvZ2ljYWxTaXpl
LnNocmluayhtX3JlbmRlcmVyLnZlcnRpY2FsQm9yZGVyRXh0ZW50KCksIG1fcmVuZGVyZXIuaG9y
aXpvbnRhbEJvcmRlckV4dGVudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250ZW50
Qm94OgorICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCisgICAgICAgICAgICBu
ZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5zaHJpbmsobV9yZW5kZXJlci5ob3Jpem9udGFsQm9y
ZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBtX3JlbmRlcmVyLnZlcnRpY2FsQm9yZGVyQW5kUGFkZGlu
Z0V4dGVudCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3UmVmZXJlbmNlQm94TG9n
aWNhbFNpemUuc2hyaW5rKG1fcmVuZGVyZXIudmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50
KCksIG1fcmVuZGVyZXIuaG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRmlsbDoKKyAgICBjYXNlIFN0cm9rZToKKyAgICBjYXNlIFZp
ZXdCb3g6CisgICAgY2FzZSBCb3hNaXNzaW5nOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG1fcmVmZXJlbmNlQm94TG9naWNh
bFNpemUgPT0gbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUpCisgICAgICAgIHJldHVybjsKKyAg
ICBtYXJrU2hhcGVBc0RpcnR5KCk7CisgICAgbV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSA9IG5l
d1JlZmVyZW5jZUJveExvZ2ljYWxTaXplOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tT
aGFwZUltYWdlT3JpZ2luKERvY3VtZW50JiBkb2N1bWVudCwgQ2FjaGVkSW1hZ2UmIGNhY2hlZElt
YWdlKQoreworICAgIGlmIChjYWNoZWRJbWFnZS5pc09yaWdpbkNsZWFuKGRvY3VtZW50LnNlY3Vy
aXR5T3JpZ2luKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFVSTCYgdXJs
ID0gY2FjaGVkSW1hZ2UudXJsKCk7CisgICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5pc051bGwo
KSA/ICInJyIgOiB1cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCk7CisgICAgZG9j
dW1lbnQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsICJVbnNhZmUgYXR0ZW1wdCB0byBsb2FkIFVSTCAiICsgdXJsU3RyaW5nICsg
Ii4iKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgZ2V0U2hhcGVJbWFn
ZUFuZFJlY3QoY29uc3QgU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSwgY29uc3QgUmVuZGVyQm94KiBy
ZW5kZXJCb3gsIGNvbnN0IExheW91dFNpemUmIHJlZmVyZW5jZUJveFNpemUsIEltYWdlKiYgaW1h
Z2UsIExheW91dFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKHNoYXBlVmFsdWUtPmlzSW1hZ2VW
YWxpZCgpKTsKKyAgICBTdHlsZUltYWdlKiBzdHlsZUltYWdlID0gc2hhcGVWYWx1ZS0+aW1hZ2Uo
KTsKKworICAgIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSA9IHJlbmRlckJveC0+Y2FsY3VsYXRl
SW1hZ2VJbnRyaW5zaWNEaW1lbnNpb25zKHN0eWxlSW1hZ2UsIHJvdW5kZWRJbnRTaXplKHJlZmVy
ZW5jZUJveFNpemUpLCBSZW5kZXJJbWFnZTo6U2NhbGVCeUVmZmVjdGl2ZVpvb20pOworICAgIHN0
eWxlSW1hZ2UtPnNldENvbnRhaW5lclNpemVGb3JSZW5kZXJlcihyZW5kZXJCb3gsIGltYWdlU2l6
ZSwgcmVuZGVyQm94LT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CisKKyAgICBpbWFnZSA9IHN0
eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIocmVuZGVyQm94KTsKKyAg
ICBpZiAocmVuZGVyQm94LT5pc1JlbmRlckltYWdlKCkpCisgICAgICAgIHJlY3QgPSB0b1JlbmRl
ckltYWdlKHJlbmRlckJveCktPnJlcGxhY2VkQ29udGVudFJlY3QocmVuZGVyQm94LT5pbnRyaW5z
aWNTaXplKCkpOworICAgIGVsc2UKKyAgICAgICAgcmVjdCA9IExheW91dFJlY3QoTGF5b3V0UG9p
bnQoKSwgaW1hZ2VTaXplKTsKK30KKworc3RhdGljIExheW91dFJlY3QgZ2V0U2hhcGVJbWFnZU1h
cmdpblJlY3QoY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gsIGNvbnN0IExheW91dFNpemUmIHJl
ZmVyZW5jZUJveExvZ2ljYWxTaXplKQoreworICAgIExheW91dFBvaW50IG1hcmdpbkJveE9yaWdp
bigtcmVuZGVyQm94Lm1hcmdpbkxvZ2ljYWxMZWZ0KCkgLSByZW5kZXJCb3guYm9yZGVyQW5kUGFk
ZGluZ0xvZ2ljYWxMZWZ0KCksIC1yZW5kZXJCb3gubWFyZ2luQmVmb3JlKCkgLSByZW5kZXJCb3gu
Ym9yZGVyQmVmb3JlKCkgLSByZW5kZXJCb3gucGFkZGluZ0JlZm9yZSgpKTsKKyAgICBMYXlvdXRT
aXplIG1hcmdpbkJveFNpemVEZWx0YShyZW5kZXJCb3gubWFyZ2luTG9naWNhbFdpZHRoKCkgKyBy
ZW5kZXJCb3guYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpLCByZW5kZXJCb3gubWFyZ2lu
TG9naWNhbEhlaWdodCgpICsgcmVuZGVyQm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0
KCkpOworICAgIHJldHVybiBMYXlvdXRSZWN0KG1hcmdpbkJveE9yaWdpbiwgcmVmZXJlbmNlQm94
TG9naWNhbFNpemUgKyBtYXJnaW5Cb3hTaXplRGVsdGEpOworfQorCitjb25zdCBTaGFwZSYgU2hh
cGVPdXRzaWRlSW5mbzo6Y29tcHV0ZWRTaGFwZSgpIGNvbnN0Cit7CisgICAgaWYgKFNoYXBlKiBz
aGFwZSA9IG1fc2hhcGUuZ2V0KCkpCisgICAgICAgIHJldHVybiAqc2hhcGU7CisKKyAgICBXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSA9IG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxl
KCkud3JpdGluZ01vZGUoKTsKKyAgICBMZW5ndGggbWFyZ2luID0gbV9yZW5kZXJlci5zdHlsZSgp
LnNoYXBlTWFyZ2luKCk7CisgICAgZmxvYXQgc2hhcGVJbWFnZVRocmVzaG9sZCA9IG1fcmVuZGVy
ZXIuc3R5bGUoKS5zaGFwZUltYWdlVGhyZXNob2xkKCk7CisgICAgY29uc3QgU2hhcGVWYWx1ZSog
c2hhcGVWYWx1ZSA9IHRoaXMtPm1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU91dHNpZGUoKTsKKyAg
ICBBU1NFUlQoc2hhcGVWYWx1ZSk7CisKKyAgICBzd2l0Y2ggKHNoYXBlVmFsdWUtPnR5cGUoKSkg
eworICAgIGNhc2UgU2hhcGVWYWx1ZTo6U2hhcGU6CisgICAgICAgIEFTU0VSVChzaGFwZVZhbHVl
LT5zaGFwZSgpKTsKKyAgICAgICAgbV9zaGFwZSA9IFNoYXBlOjpjcmVhdGVTaGFwZShzaGFwZVZh
bHVlLT5zaGFwZSgpLCBtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXplLCB3cml0aW5nTW9kZSwgbWFy
Z2luKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTaGFwZVZhbHVlOjpJbWFnZTogeworICAg
ICAgICBJbWFnZSogaW1hZ2U7CisgICAgICAgIExheW91dFJlY3QgaW1hZ2VSZWN0OworICAgICAg
ICBnZXRTaGFwZUltYWdlQW5kUmVjdChzaGFwZVZhbHVlLCAmbV9yZW5kZXJlciwgbV9yZWZlcmVu
Y2VCb3hMb2dpY2FsU2l6ZSwgaW1hZ2UsIGltYWdlUmVjdCk7CisgICAgICAgIGNvbnN0IExheW91
dFJlY3QmIG1hcmdpblJlY3QgPSBnZXRTaGFwZUltYWdlTWFyZ2luUmVjdChtX3JlbmRlcmVyLCBt
X3JlZmVyZW5jZUJveExvZ2ljYWxTaXplKTsKKyAgICAgICAgbV9zaGFwZSA9IFNoYXBlOjpjcmVh
dGVSYXN0ZXJTaGFwZShpbWFnZSwgc2hhcGVJbWFnZVRocmVzaG9sZCwgaW1hZ2VSZWN0LCBtYXJn
aW5SZWN0LCB3cml0aW5nTW9kZSwgbWFyZ2luKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgU2hhcGVWYWx1ZTo6Qm94OiB7CisgICAgICAgIFJvdW5kZWRSZWN0IHNoYXBlUmVjdCA9
IGNvbXB1dGVSb3VuZGVkUmVjdEZvckJveFNoYXBlKHJlZmVyZW5jZUJveChtX3JlbmRlcmVyLnN0
eWxlKCkuc2hhcGVPdXRzaWRlKCkpLCBtX3JlbmRlcmVyKTsKKyAgICAgICAgaWYgKCFtX3JlbmRl
cmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
CisgICAgICAgICAgICBzaGFwZVJlY3QgPSBzaGFwZVJlY3QudHJhbnNwb3NlZFJlY3QoKTsKKyAg
ICAgICAgbV9zaGFwZSA9IFNoYXBlOjpjcmVhdGVCb3hTaGFwZShzaGFwZVJlY3QsIHdyaXRpbmdN
b2RlLCBtYXJnaW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTaGFwZVZhbHVl
OjpPdXRzaWRlOgorICAgICAgICAvLyBPdXRzaWRlIHNob3VsZCBoYXZlIGFscmVhZHkgcmVzb2x2
ZWQgdG8gYSBkaWZmZXJlbnQgc2hhcGUgdmFsdWUKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisgICAgQVNTRVJUKG1fc2hhcGUpOworICAgIHJldHVybiAqbV9zaGFwZTsK
K30KKworc3RhdGljIGlubGluZSBMYXlvdXRVbml0IGJvcmRlckJlZm9yZUluV3JpdGluZ01vZGUo
Y29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCit7Cisg
ICAgc3dpdGNoICh3cml0aW5nTW9kZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21Xcml0aW5nTW9k
ZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0
aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckJvdHRvbSgpOworICAgIGNhc2UgTGVmdFRv
UmlnaHRXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQoKTsKKyAgICBjYXNl
IFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGU6IHJldHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgpOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiByZW5kZXJlci5i
b3JkZXJCZWZvcmUoKTsKK30KKworc3RhdGljIGlubGluZSBMYXlvdXRVbml0IGJvcmRlckFuZFBh
ZGRpbmdCZWZvcmVJbldyaXRpbmdNb2RlKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIsIFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlKQoreworICAgIHN3aXRjaCAod3JpdGluZ01vZGUpIHsKKyAgICBj
YXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6IHJldHVybiByZW5kZXJlci5ib3JkZXJUb3AoKSAr
IHJlbmRlcmVyLnBhZGRpbmdUb3AoKTsKKyAgICBjYXNlIEJvdHRvbVRvVG9wV3JpdGluZ01vZGU6
IHJldHVybiByZW5kZXJlci5ib3JkZXJCb3R0b20oKSArIHJlbmRlcmVyLnBhZGRpbmdCb3R0b20o
KTsKKyAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6IHJldHVybiByZW5kZXJlci5ib3Jk
ZXJMZWZ0KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpOworICAgIGNhc2UgUmlnaHRUb0xlZnRX
cml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclJpZ2h0KCkgKyByZW5kZXJlci5wYWRk
aW5nUmlnaHQoKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gcmVuZGVyZXIuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOworfQorCitMYXlvdXRVbml0IFNo
YXBlT3V0c2lkZUluZm86OmxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdAoreworICAgIHN3aXRjaCAo
cmVmZXJlbmNlQm94KG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU91dHNpZGUoKSkpIHsKKyAgICBj
YXNlIE1hcmdpbkJveDogcmV0dXJuIC1tX3JlbmRlcmVyLm1hcmdpbkJlZm9yZSgmbV9yZW5kZXJl
ci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKSk7CisgICAgY2FzZSBCb3JkZXJCb3g6IHJldHVy
biBMYXlvdXRVbml0KCk7CisgICAgY2FzZSBQYWRkaW5nQm94OiByZXR1cm4gYm9yZGVyQmVmb3Jl
SW5Xcml0aW5nTW9kZShtX3JlbmRlcmVyLCBtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5z
dHlsZSgpLndyaXRpbmdNb2RlKCkpOworICAgIGNhc2UgQ29udGVudEJveDogcmV0dXJuIGJvcmRl
ckFuZFBhZGRpbmdCZWZvcmVJbldyaXRpbmdNb2RlKG1fcmVuZGVyZXIsIG1fcmVuZGVyZXIuY29u
dGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkud3JpdGluZ01vZGUoKSk7CisgICAgY2FzZSBGaWxsOiBi
cmVhazsKKyAgICBjYXNlIFN0cm9rZTogYnJlYWs7CisgICAgY2FzZSBWaWV3Qm94OiBicmVhazsK
KyAgICBjYXNlIEJveE1pc3Npbmc6IGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworfQorCitzdGF0aWMgaW5saW5l
IExheW91dFVuaXQgYm9yZGVyU3RhcnRXaXRoU3R5bGVGb3JXcml0aW5nTW9kZShjb25zdCBSZW5k
ZXJCb3gmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgaWYgKHN0
eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJM
ZWZ0KCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyUmlnaHQoKTsK
KyAgICB9CisgICAgaWYgKHN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAg
cmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpOworICAgIAorICAgIHJldHVybiByZW5kZXJlci5i
b3JkZXJCb3R0b20oKTsKK30KKworc3RhdGljIGlubGluZSBMYXlvdXRVbml0IGJvcmRlckFuZFBh
ZGRpbmdTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKGNvbnN0IFJlbmRlckJveCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBpZiAoc3R5bGUuaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkgeworICAgICAgICBpZiAoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRl
cmVyLnBhZGRpbmdMZWZ0KCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVuZGVyZXIuYm9y
ZGVyUmlnaHQoKSArIHJlbmRlcmVyLnBhZGRpbmdSaWdodCgpOworICAgIH0KKyAgICBpZiAoc3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIuYm9y
ZGVyVG9wKCkgKyByZW5kZXJlci5wYWRkaW5nVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHJlbmRl
cmVyLmJvcmRlckJvdHRvbSgpICsgcmVuZGVyZXIucGFkZGluZ0JvdHRvbSgpOworfQorCitMYXlv
dXRVbml0IFNoYXBlT3V0c2lkZUluZm86OmxvZ2ljYWxMZWZ0T2Zmc2V0KCkgY29uc3QKK3sKKyAg
ICBpZiAobV9yZW5kZXJlci5pc1JlbmRlclJlZ2lvbigpKQorICAgICAgICByZXR1cm4gTGF5b3V0
VW5pdCgpOworICAgIAorICAgIHN3aXRjaCAocmVmZXJlbmNlQm94KG1fcmVuZGVyZXIuc3R5bGUo
KS5zaGFwZU91dHNpZGUoKSkpIHsKKyAgICBjYXNlIE1hcmdpbkJveDogcmV0dXJuIC1tX3JlbmRl
cmVyLm1hcmdpblN0YXJ0KCZtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpKTsK
KyAgICBjYXNlIEJvcmRlckJveDogcmV0dXJuIExheW91dFVuaXQoKTsKKyAgICBjYXNlIFBhZGRp
bmdCb3g6IHJldHVybiBib3JkZXJTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKG1fcmVuZGVy
ZXIsIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkpOworICAgIGNhc2UgQ29u
dGVudEJveDogcmV0dXJuIGJvcmRlckFuZFBhZGRpbmdTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdN
b2RlKG1fcmVuZGVyZXIsIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkpOwor
ICAgIGNhc2UgRmlsbDogYnJlYWs7CisgICAgY2FzZSBTdHJva2U6IGJyZWFrOworICAgIGNhc2Ug
Vmlld0JveDogYnJlYWs7CisgICAgY2FzZSBCb3hNaXNzaW5nOiBicmVhazsKKyAgICB9CisgICAg
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIExheW91dFVuaXQoKTsKK30K
KwogYm9vbCBTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94JiBi
b3gpCiB7CiAgICAgU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IGJveC5zdHlsZSgpLnNoYXBlT3V0
c2lkZSgpOwpAQCAtNTksNiArMzA1LDIxIEBAIGJvb2wgU2hhcGVPdXRzaWRlSW5mbzo6aXNFbmFi
bGVkRm9yKGNvbnN0IFJlbmRlckJveCYgYm94KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorU2Vn
bWVudExpc3QgU2hhcGVPdXRzaWRlSW5mbzo6Y29tcHV0ZVNlZ21lbnRzRm9yTGluZShMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bGluZUhlaWdodCA+PSAwKTsKKyAgICBTZWdtZW50TGlzdCBzZWdtZW50czsKKworICAgIGNvbXB1
dGVkU2hhcGUoKS5nZXRFeGNsdWRlZEludGVydmFscygobGluZVRvcCAtIGxvZ2ljYWxUb3BPZmZz
ZXQoKSksIHN0ZDo6bWluKGxpbmVIZWlnaHQsIHNoYXBlTG9naWNhbEJvdHRvbSgpIC0gbGluZVRv
cCksIHNlZ21lbnRzKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2VnbWVudHMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgc2VnbWVudHNbaV0ubG9naWNhbExlZnQgKz0gbG9naWNhbExl
ZnRPZmZzZXQoKTsKKyAgICAgICAgc2VnbWVudHNbaV0ubG9naWNhbFJpZ2h0ICs9IGxvZ2ljYWxM
ZWZ0T2Zmc2V0KCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBzZWdtZW50czsKK30KKwogdm9p
ZCBTaGFwZU91dHNpZGVJbmZvOjp1cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgY29udGFpbmluZ0Jsb2NrLCBjb25zdCBGbG9hdGluZ09iamVj
dCYgZmxvYXRpbmdPYmplY3QsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVp
Z2h0KQogewogICAgIExheW91dFVuaXQgYm9yZGVyQm94VG9wID0gY29udGFpbmluZ0Jsb2NrLmxv
Z2ljYWxUb3BGb3JGbG9hdCgmZmxvYXRpbmdPYmplY3QpICsgY29udGFpbmluZ0Jsb2NrLm1hcmdp
bkJlZm9yZUZvckNoaWxkKG1fcmVuZGVyZXIpOwpAQCAtNzEsNyArMzMyLDcgQEAgdm9pZCBTaGFw
ZU91dHNpZGVJbmZvOjp1cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYKIAogICAgICAgICBMYXlvdXRVbml0IGZsb2F0TWFyZ2luQm94V2lkdGgg
PSBjb250YWluaW5nQmxvY2subG9naWNhbFdpZHRoRm9yRmxvYXQoJmZsb2F0aW5nT2JqZWN0KTsK
IAotICAgICAgICBpZiAobGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSkgeworICAgICAgICBpZiAo
Y29tcHV0ZWRTaGFwZSgpLmxpbmVPdmVybGFwc1NoYXBlTWFyZ2luQm91bmRzKG1fcmVmZXJlbmNl
Qm94TGluZVRvcCwgbV9saW5lSGVpZ2h0KSkgewogICAgICAgICAgICAgU2VnbWVudExpc3Qgc2Vn
bWVudHMgPSBjb21wdXRlU2VnbWVudHNGb3JMaW5lKGJvcmRlckJveExpbmVUb3AsIGxpbmVIZWln
aHQpOwogICAgICAgICAgICAgaWYgKHNlZ21lbnRzLnNpemUoKSkgewogICAgICAgICAgICAgICAg
IExheW91dFVuaXQgbG9naWNhbExlZnRNYXJnaW4gPSBjb250YWluaW5nQmxvY2suc3R5bGUoKS5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBjb250YWluaW5nQmxvY2subWFyZ2luU3RhcnRGb3JD
aGlsZChtX3JlbmRlcmVyKSA6IGNvbnRhaW5pbmdCbG9jay5tYXJnaW5FbmRGb3JDaGlsZChtX3Jl
bmRlcmVyKTsKQEAgLTk1LDE3ICszNTYsNiBAQCB2b2lkIFNoYXBlT3V0c2lkZUluZm86OnVwZGF0
ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93JgogICAg
IH0KIH0KIAotU2hhcGVWYWx1ZSogU2hhcGVPdXRzaWRlSW5mbzo6c2hhcGVWYWx1ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU91dHNpZGUoKTsKLX0KLQot
Y29uc3QgUmVuZGVyU3R5bGUmIFNoYXBlT3V0c2lkZUluZm86OnN0eWxlRm9yV3JpdGluZ01vZGUo
KSBjb25zdAotewotICAgIEFTU0VSVChtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpKTsKLSAg
ICByZXR1cm4gbV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKTsKLX0KLQogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGVPdXRzaWRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91
dHNpZGVJbmZvLmgKaW5kZXggNDg4MWUwNmFiMGVhZmFiYTcxNjEzNjkxNmRjZmEyY2VmYjc1YmEx
OS4uZGNmYmJlYWYwNDFiZTY4ZDNmNDVjNTk0ZDA1ZjA1NDUxYzllOWE2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgKQEAgLTMy
LDggKzMyLDEzIEBACiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKIAorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFNpemUuaCIKLSNpbmNsdWRlICJTaGFwZUluZm8uaCIK
KyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNs
dWRlICJTaGFwZS5oIgorI2luY2x1ZGUgIlNoYXBlVmFsdWUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMTAgKzQ2LDExIEBAIGNsYXNzIFJlbmRl
ckJsb2NrRmxvdzsKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIEZsb2F0aW5nT2JqZWN0OwogCi1j
bGFzcyBTaGFwZU91dHNpZGVJbmZvIGZpbmFsIDogcHVibGljIFNoYXBlSW5mbzxSZW5kZXJCb3g+
LCBwdWJsaWMgTWFwcGVkSW5mbzxSZW5kZXJCb3gsIFNoYXBlT3V0c2lkZUluZm8+IHsKK2NsYXNz
IFNoYXBlT3V0c2lkZUluZm8gZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgogICAgIFNoYXBlT3V0c2lkZUluZm8oY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikK
LSAgICAgICAgOiBTaGFwZUluZm88UmVuZGVyQm94PihyZW5kZXJlcikKKyAgICAgICAgOiBtX3Jl
bmRlcmVyKHJlbmRlcmVyKQogICAgICAgICAsIG1fbGluZU92ZXJsYXBzU2hhcGUoZmFsc2UpCiAg
ICAgewogICAgIH0KQEAgLTU3LDMxICs2Myw1OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0
ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93JiwgY29u
c3QgRmxvYXRpbmdPYmplY3QmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhl
aWdodCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS5saW5lT3Zl
cmxhcHNTaGFwZU1hcmdpbkJvdW5kcyhtX3JlZmVyZW5jZUJveExpbmVUb3AsIG1fbGluZUhlaWdo
dCk7Ci0gICAgfQorICAgIHZvaWQgc2V0UmVmZXJlbmNlQm94TG9naWNhbFNpemUoTGF5b3V0U2l6
ZSk7CisKKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIGNv
bXB1dGVkU2hhcGUoKS5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpLnkoKSArIGxvZ2lj
YWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsQm90dG9tKCkgY29u
c3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLnNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94
KCkubWF4WSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxv
Z2ljYWxMZWZ0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLnNoYXBlTWFyZ2luTG9n
aWNhbEJvdW5kaW5nQm94KCkueCgpICsgbG9naWNhbExlZnRPZmZzZXQoKTsgfQorICAgIExheW91
dFVuaXQgc2hhcGVMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlKCku
c2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKS5tYXhYKCkgKyBsb2dpY2FsTGVmdE9mZnNl
dCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IGNvbXB1dGVkU2hhcGUoKS5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpLndpZHRoKCk7
IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNv
bXB1dGVkU2hhcGUoKS5zaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0JveCgpLmhlaWdodCgpOyB9
CisKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lVG9wKCkgY29uc3QgeyByZXR1cm4gbV9yZWZl
cmVuY2VCb3hMaW5lVG9wICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsTGluZUJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlQm94TGluZVRvcCAr
IG1fbGluZUhlaWdodCArIGxvZ2ljYWxUb3BPZmZzZXQoKTsgfQorICAgIExheW91dFVuaXQgbG9n
aWNhbExpbmVCb3R0b20oTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBjb25zdCB7IHJldHVybiBtX3Jl
ZmVyZW5jZUJveExpbmVUb3AgKyBsaW5lSGVpZ2h0ICsgbG9naWNhbFRvcE9mZnNldCgpOyB9CisK
KyAgICB2b2lkIG1hcmtTaGFwZUFzRGlydHkoKSB7IG1fc2hhcGUgPSBudWxscHRyOyB9CisgICAg
Ym9vbCBpc1NoYXBlRGlydHkoKSB7IHJldHVybiAhbV9zaGFwZTsgfQogCi1wcm90ZWN0ZWQ6Ci0g
ICAgdmlydHVhbCBDU1NCb3hUeXBlIHJlZmVyZW5jZUJveCgpIGNvbnN0IG92ZXJyaWRlCisgICAg
TGF5b3V0UmVjdCBjb21wdXRlZFNoYXBlUGh5c2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0OworICAg
IEZsb2F0UG9pbnQgc2hhcGVUb1JlbmRlcmVyUG9pbnQoRmxvYXRQb2ludCkgY29uc3Q7CisgICAg
RmxvYXRTaXplIHNoYXBlVG9SZW5kZXJlclNpemUoRmxvYXRTaXplKSBjb25zdDsKKworICAgIGNv
bnN0IFNoYXBlJiBjb21wdXRlZFNoYXBlKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgU2hhcGVPdXRz
aWRlSW5mbyYgZW5zdXJlSW5mbyhjb25zdCBSZW5kZXJCb3gmIGtleSkKICAgICB7Ci0gICAgICAg
IGlmIChzaGFwZVZhbHVlKCktPmNzc0JveCgpID09IEJveE1pc3NpbmcpIHsKLSAgICAgICAgICAg
IGlmIChzaGFwZVZhbHVlKCktPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpJbWFnZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gQ29udGVudEJveDsKLSAgICAgICAgICAgIHJldHVybiBNYXJnaW5Cb3g7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNoYXBlVmFsdWUoKS0+Y3NzQm94KCk7CisgICAg
ICAgIEluZm9NYXAmIGluZm9NYXAgPSBTaGFwZU91dHNpZGVJbmZvOjppbmZvTWFwKCk7CisgICAg
ICAgIGlmIChTaGFwZU91dHNpZGVJbmZvKiBpbmZvID0gaW5mb01hcC5nZXQoJmtleSkpCisgICAg
ICAgICAgICByZXR1cm4gKmluZm87CisgICAgICAgIEluZm9NYXA6OkFkZFJlc3VsdCByZXN1bHQg
PSBpbmZvTWFwLmFkZCgma2V5LCBzdGQ6Om1ha2VfdW5pcXVlPFNoYXBlT3V0c2lkZUluZm8+KGtl
eSkpOworICAgICAgICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgfQorICAg
IHN0YXRpYyB2b2lkIHJlbW92ZUluZm8oY29uc3QgUmVuZGVyQm94JiBrZXkpIHsgaW5mb01hcCgp
LnJlbW92ZSgma2V5KTsgfQorICAgIHN0YXRpYyBTaGFwZU91dHNpZGVJbmZvKiBpbmZvKGNvbnN0
IFJlbmRlckJveCYga2V5KSB7IHJldHVybiBpbmZvTWFwKCkuZ2V0KCZrZXkpOyB9CiAKIHByaXZh
dGU6Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdC
b3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjb21wdXRlZFNoYXBlKCkuc2hhcGVNYXJnaW5M
b2dpY2FsQm91bmRpbmdCb3goKTsgfQotICAgIHZpcnR1YWwgU2hhcGVWYWx1ZSogc2hhcGVWYWx1
ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRJbnRlcnZhbHMoTGF5b3V0
VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQsIFNlZ21lbnRMaXN0JiBzZWdtZW50
cykgY29uc3Qgb3ZlcnJpZGUKKyAgICBTZWdtZW50TGlzdCBjb21wdXRlU2VnbWVudHNGb3JMaW5l
KExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBjb25zdDsKKworICAg
IExheW91dFVuaXQgbG9naWNhbFRvcE9mZnNldCgpIGNvbnN0OworICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnRPZmZzZXQoKSBjb25zdDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5k
ZXJCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGVPdXRzaWRlSW5mbz4+IEluZm9NYXA7CisgICAg
c3RhdGljIEluZm9NYXAmIGluZm9NYXAoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVk
U2hhcGUoKS5nZXRFeGNsdWRlZEludGVydmFscyhsaW5lVG9wLCBsaW5lSGVpZ2h0LCBzZWdtZW50
cyk7CisgICAgICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChJbmZvTWFwLCBzdGF0
aWNJbmZvTWFwLCAoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNJbmZvTWFwOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlRm9yV3JpdGluZ01vZGUoKSBjb25z
dCBvdmVycmlkZTsKKyAgICBjb25zdCBSZW5kZXJCb3gmIG1fcmVuZGVyZXI7CisKKyAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gbV9zaGFwZTsKKyAgICBMYXlvdXRTaXplIG1fcmVm
ZXJlbmNlQm94TG9naWNhbFNpemU7CisgICAgTGF5b3V0VW5pdCBtX3JlZmVyZW5jZUJveExpbmVU
b3A7CisgICAgTGF5b3V0VW5pdCBtX2xpbmVIZWlnaHQ7CiAKICAgICBMYXlvdXRVbml0IG1fbGVm
dE1hcmdpbkJveERlbHRhOwogICAgIExheW91dFVuaXQgbV9yaWdodE1hcmdpbkJveERlbHRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228548</attachid>
            <date>2014-04-03 15:25:59 -0700</date>
            <delta_ts>2014-04-03 16:05:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131180-20140403152815.patch</filename>
            <type>text/plain</type>
            <size>45512</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2NzQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGNiNjllZGU2MzRiMmY4
ZTUyYTg5ZTI4Y2RkZmUwNWE2NjI0M2U4Mi4uYzg5ZWRmMzc0ZjUxYzA1MjgwNzE0NWZmODc1Mzgy
MTZiM2M4OWMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTA0LTAzICBCZW0g
Sm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgorCisgICAgICAgIE1lcmdlIFNoYXBlSW5m
byAmIFNoYXBlT3V0c2lkZUluZm8gbm93IHRoYXQgU2hhcGVJbnNpZGVJbmZvIGlzIG5vIG1vcmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTE4MAor
CisgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCisKKyAgICAgICAgTm93IHRoYXQg
U2hhcGVJbnNpZGVJbmZvIGlzIGdvbmUsIGhhdmluZyBhIGNsYXNzIGhpZWFyYWNoeSBhbmQKKyAg
ICAgICAgdGVtcGxhdGVzIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UuIEFzIGEgZmlyc3Qgc3RlcCB0
byBjbGVhbmluZyB1cCB0aGUKKyAgICAgICAgY29kZSwgdGhpcyByZW1vdmUgU2hhcGVJbmZvIGFu
ZCBwdXRzIGFsbCBvZiBpdHMgZnVuY3Rpb25hbGl0eSBpbnRvCisgICAgICAgIFNoYXBlT3V0c2lk
ZUluZm8uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmls
dGVyczoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUluZm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHJlbmRlcmluZy9zaGFwZXMvU2hhcGVJbmZvLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBl
T3V0c2lkZUluZm86OmNvbXB1dGVkU2hhcGVQaHlzaWNhbEJvdW5kaW5nQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OnNoYXBlVG9SZW5kZXJlclBvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OnNoYXBlVG9SZW5kZXJlclNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVmZXJlbmNlQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0
c2lkZUluZm86OnNldFJlZmVyZW5jZUJveExvZ2ljYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OmNoZWNrU2hhcGVJbWFnZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRTaGFwZUltYWdl
QW5kUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRTaGFwZUltYWdlTWFyZ2luUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpjb21wdXRlZFNoYXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmJvcmRlckJlZm9yZUluV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Ym9yZGVyQW5kUGFkZGluZ0JlZm9yZUluV3JpdGluZ01vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcGVPdXRzaWRlSW5mbzo6bG9naWNhbFRvcE9mZnNldCk6CisgICAgICAgIChXZWJDb3Jl
Ojpib3JkZXJTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OmJvcmRlckFuZFBhZGRpbmdTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OmxvZ2ljYWxMZWZ0T2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OmNvbXB1dGVTZWdtZW50c0ZvckxpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6dXBkYXRlRGVsdGFzRm9yQ29udGFpbmlu
Z0Jsb2NrTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZU91dHNpZGVJbmZvOjpzaGFwZVZh
bHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlT3V0c2lkZUluZm86OnN0eWxl
Rm9yV3JpdGluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hh
cGVPdXRzaWRlSW5mby5oOgorCiAyMDE0LTA0LTAzICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW0NHXSBDYW52YXMgbGluZURhc2hPZmZzZXQgZG9lcyBub3QgaGFu
ZGxlIG5lZ2F0aXZlIG51bWJlcnMgY29ycmVjdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDNi
NWQ2M2IwM2Y4OWMyZGQ0MWUyYjg2YjUxNzViZjY2MmE0NjZkYzAuLjczZTJiNGRkODY4NWE4ZmM3
YTAyMTMxYjYzNDUwYzBmOTU5YjhjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjIxLDcg
KzIyMjEsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL3NoYXBlcy9SYXN0
ZXJTaGFwZS5jcHAKICAgICByZW5kZXJpbmcvc2hhcGVzL1JlY3RhbmdsZVNoYXBlLmNwcAogICAg
IHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCi0gICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
Zm8uY3BwCiAgICAgcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcAogCiAgICAg
cmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggZGMyMzg5NTg3MjJkZDllY2RkMDk1NzM0
MjUyYmIxZmYxYmFlZDcyOS4uODYxMmQ3NDNiOWY1YTQ4ZjI2NjQ3MDU5MTE0YjdlZWEyYTNkNzA3
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CkBAIC0xMTMxMSw3ICsxMTMxMSw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcc2hhcGVzXFJhc3RlclNoYXBlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hhcGUuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHNoYXBlc1xTaGFwZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5mby5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlT3V0c2lkZUluZm8u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdQYXRo
RGF0YS5jcHAiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KQEAgLTIwMDU4LDcgKzIwMDU3LDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xzaGFwZXNcUmFzdGVyU2hhcGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcUmVjdGFuZ2xlU2hhcGUuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGUuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbmZvLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW50ZXJ2YWwuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVPdXRzaWRl
SW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXHN2Z1xSZW5k
ZXJTVkdCbG9jay5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGNjYjM1ZjU1YjIyNmQwYjY3ZTZlYjQ3
ZTc2YjkzODkxY2VmNTRmNmUuLjI0MzU0YWJlZDRjNWY2ZGQ2YTdlODVkNjhiMGMwMWY1NzgzMmUz
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZj
eHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTY4MDIsOSArNjgwMiw2IEBACiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlLmNwcCI+CiAgICAgICA8RmlsdGVyPnJl
bmRlcmluZ1xzaGFwZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbmZvLmNwcCI+Ci0gICAgICA8Rmls
dGVyPnJlbmRlcmluZ1xzaGFwZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xzaGFwZXNcU2hhcGVJbnNpZGVJbmZvLmNwcCI+
CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzaGFwZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KQEAgLTE0NjQzLDkgKzE0NjQwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzaGFwZXNcU2hhcGUuaCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZ1xzaGFwZXM8
L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJl
bmRlcmluZ1xzaGFwZXNcU2hhcGVJbmZvLmgiPgotICAgICAgPEZpbHRlcj5yZW5kZXJpbmdcc2hh
cGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcc2hhcGVzXFNoYXBlSW5zaWRlSW5mby5oIj4KICAgICAgIDxGaWx0ZXI+cmVu
ZGVyaW5nXHNoYXBlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDAxZTJjZWRjNjIy
YzU1Y2M2ZDRlMWZiMDFhMDJlZmU3MjQzNzVhODQuLmJlMmNhOTZmYWMxMDE3ZDQ2NzY4MzJhNTUw
N2VjMDAxZjQ5ZGIxYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTYzOTIsMTAgKzYzOTIsOCBAQAogCQlGRDM1OTE4RjEzOERC
MjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMzU5MThEMTM4REIyMjAwMEUxRUJFQyAvKiBB
dWRpb1BhcmFtVGltZWxpbmUuY3BwICovOyB9OwogCQlGRDM1OTE5MDEzOERCMjIwMDBFMUVCRUMg
LyogQXVkaW9QYXJhbVRpbWVsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDM1OTE4RTEzOERCMjIwMDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVs
aW5lLmggKi87IH07CiAJCUZENDVBOTRGMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4N0YxNzVEMzky
NjAwMkNEMzYwIC8qIFNoYXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJRkQ0NUE5NTAxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQwOEE4ODExNzVE
MzkyNjAwMkNEMzYwIC8qIFNoYXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZENDVBOTUyMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZU91
dHNpZGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDA4QTg4NzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5mby5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZENDVBOTUzMTc1RDNG
QjgwMEMyMUVDOCAvKiBTaGFwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDA4QTg3RTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuY3BwICovOyB9
OwotCQlGRDQ1QTk1NDE3NUQzRkI4MDBDMjFFQzggLyogU2hhcGVJbmZvLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODgwMTc1RDM5MjYwMDJD
RDM2MCAvKiBTaGFwZUluZm8uY3BwICovOyB9OwogCQlGRDQ1QTk1NjE3NUQzRkI4MDBDMjFFQzgg
LyogU2hhcGVPdXRzaWRlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDA4QTg4NjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRlSW5m
by5jcHAgKi87IH07CiAJCUZENDVBOTU3MTc1RDQxNEMwMEMyMUVDOCAvKiBQb2x5Z29uU2hhcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMDhBODdC
MTc1RDM5MjYwMDJDRDM2MCAvKiBQb2x5Z29uU2hhcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRDQ1QTk1ODE3NUQ0MTRDMDBDMjFFQzggLyog
UmVjdGFuZ2xlU2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZEMDhBODdEMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzcwNiw4ICsx
MzcwNCw2IEBACiAJCUZEMDhBODdEMTc1RDM5MjYwMDJDRDM2MCAvKiBSZWN0YW5nbGVTaGFwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN0YW5nbGVTaGFwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDA4QTg3RTE3NUQzOTI2MDAyQ0QzNjAgLyogU2hh
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDA4QTg3RjE3NUQzOTI2MDAyQ0QzNjAgLyog
U2hhcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQwOEE4ODAxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBl
SW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFwZUluZm8u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRDA4QTg4MTE3NUQzOTI2MDAyQ0Qz
NjAgLyogU2hhcGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXBl
SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDA4QTg4NTE3NUQzOTI2MDAy
Q0QzNjAgLyogU2hhcGVJbnRlcnZhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaGFwZUludGVydmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMDhBODg2
MTc1RDM5MjYwMDJDRDM2MCAvKiBTaGFwZU91dHNpZGVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYXBlT3V0c2lkZUluZm8uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRDA4QTg4NzE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRl
SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFwZU91dHNpZGVJbmZv
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjU0MCw4ICsyMjUzNiw2IEBACiAJ
CQkJRkQwOEE4N0QxNzVEMzkyNjAwMkNEMzYwIC8qIFJlY3RhbmdsZVNoYXBlLmggKi8sCiAJCQkJ
RkQwOEE4N0UxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlLmNwcCAqLywKIAkJCQlGRDA4QTg3RjE3
NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGUuaCAqLywKLQkJCQlGRDA4QTg4MDE3NUQzOTI2MDAyQ0Qz
NjAgLyogU2hhcGVJbmZvLmNwcCAqLywKLQkJCQlGRDA4QTg4MTE3NUQzOTI2MDAyQ0QzNjAgLyog
U2hhcGVJbmZvLmggKi8sCiAJCQkJRkQwOEE4ODUxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlSW50
ZXJ2YWwuaCAqLywKIAkJCQlGRDA4QTg4NjE3NUQzOTI2MDAyQ0QzNjAgLyogU2hhcGVPdXRzaWRl
SW5mby5jcHAgKi8sCiAJCQkJRkQwOEE4ODcxNzVEMzkyNjAwMkNEMzYwIC8qIFNoYXBlT3V0c2lk
ZUluZm8uaCAqLywKQEAgLTI1NDkxLDcgKzI1NDg1LDYgQEAKIAkJCQlCQzVFQjhDNDBFODIwMzFC
MDBCMjU5NjUgLyogU2hhZG93RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTZEMTY5NjQxMzQ2
QjRDMTAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENDVBOTRG
MTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkQ0NUE5NTAx
NzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ0NUE5
NUIxNzVENDFFRTAwQzIxRUM4IC8qIFNoYXBlSW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZENDVBOTUyMTc1RDNGM0UwMEMyMUVDOCAvKiBTaGFwZU91dHNpZGVJbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0RjcgLyogU2hhcGVWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yODg2NCw3ICsyODg1Nyw2IEBACiAJCQkJQkM1RUI4QzMwRTgyMDMxQjAw
QjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTZEMTY5NjIxMzQ2
QjQ5QjAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ0NUE5
NTMxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZENDVB
OTU0MTc1RDNGQjgwMEMyMUVDOCAvKiBTaGFwZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkQ0NUE5NTYxNzVEM0ZCODAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUluZm8uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE0QTk1NEQwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTJERDhFMzBEOTFFMkI0MDAwRjg5RUUgLyogU2hhcmVkQnVm
ZmVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlSW5mby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZGRkYTNl
OGNiNDMxNzA5ZmRlNjhkYWNmODEwMjgwOTc3NzdjOTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZUluZm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAg
ICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNoYXBlSW5m
by5oIgotCi0jaWYgRU5BQkxFKENTU19TSEFQRVMpCi0KLSNpbmNsdWRlICJCb3hTaGFwZS5oIgot
I2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0j
aW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRl
ICJSZW5kZXJSZWdpb24uaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNo
YXBlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVtcGxhdGU8Y2xhc3MgUmVuZGVyVHlw
ZT4KLXZvaWQgU2hhcGVJbmZvPFJlbmRlclR5cGU+OjpzZXRSZWZlcmVuY2VCb3hMb2dpY2FsU2l6
ZShMYXlvdXRTaXplIG5ld1JlZmVyZW5jZUJveExvZ2ljYWxTaXplKQotewotICAgIGJvb2wgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUgPSB0aGlzLT5zdHlsZUZvcldyaXRpbmdNb2RlKCkuaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKTsKLSAgICBzd2l0Y2ggKHJlZmVyZW5jZUJveCgpKSB7Ci0gICAg
Y2FzZSBNYXJnaW5Cb3g6Ci0gICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkKLSAg
ICAgICAgICAgIG5ld1JlZmVyZW5jZUJveExvZ2ljYWxTaXplLmV4cGFuZChtX3JlbmRlcmVyLmhv
cml6b250YWxNYXJnaW5FeHRlbnQoKSwgbV9yZW5kZXJlci52ZXJ0aWNhbE1hcmdpbkV4dGVudCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUu
ZXhwYW5kKG1fcmVuZGVyZXIudmVydGljYWxNYXJnaW5FeHRlbnQoKSwgbV9yZW5kZXJlci5ob3Jp
em9udGFsTWFyZ2luRXh0ZW50KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJvcmRlckJv
eDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQYWRkaW5nQm94OgotICAgICAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICBuZXdSZWZlcmVuY2VCb3hMb2dpY2Fs
U2l6ZS5zaHJpbmsobV9yZW5kZXJlci5ob3Jpem9udGFsQm9yZGVyRXh0ZW50KCksIG1fcmVuZGVy
ZXIudmVydGljYWxCb3JkZXJFeHRlbnQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5l
d1JlZmVyZW5jZUJveExvZ2ljYWxTaXplLnNocmluayhtX3JlbmRlcmVyLnZlcnRpY2FsQm9yZGVy
RXh0ZW50KCksIG1fcmVuZGVyZXIuaG9yaXpvbnRhbEJvcmRlckV4dGVudCgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDb250ZW50Qm94OgotICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUpCi0gICAgICAgICAgICBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5zaHJpbmso
bV9yZW5kZXJlci5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpLCBtX3JlbmRlcmVy
LnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUuc2hyaW5rKG1fcmVuZGVyZXIudmVydGlj
YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCksIG1fcmVuZGVyZXIuaG9yaXpvbnRhbEJvcmRlckFu
ZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsbDoKLSAgICBj
YXNlIFN0cm9rZToKLSAgICBjYXNlIFZpZXdCb3g6Ci0gICAgY2FzZSBCb3hNaXNzaW5nOgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
aWYgKG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemUgPT0gbmV3UmVmZXJlbmNlQm94TG9naWNhbFNp
emUpCi0gICAgICAgIHJldHVybjsKLSAgICBtYXJrU2hhcGVBc0RpcnR5KCk7Ci0gICAgbV9yZWZl
cmVuY2VCb3hMb2dpY2FsU2l6ZSA9IG5ld1JlZmVyZW5jZUJveExvZ2ljYWxTaXplOwotfQotCi1i
b29sIGNoZWNrU2hhcGVJbWFnZU9yaWdpbihEb2N1bWVudCYgZG9jdW1lbnQsIENhY2hlZEltYWdl
JiBjYWNoZWRJbWFnZSkKLXsKLSAgICBpZiAoY2FjaGVkSW1hZ2UuaXNPcmlnaW5DbGVhbihkb2N1
bWVudC5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjb25z
dCBVUkwmIHVybCA9IGNhY2hlZEltYWdlLnVybCgpOwotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1
cmwuaXNOdWxsKCkgPyAiJyciIDogdXJsLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgp
OwotICAgIGRvY3VtZW50LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5
LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiVW5zYWZlIGF0dGVtcHQgdG8gbG9hZCBVUkwgIiArIHVy
bFN0cmluZyArICIuIik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIGdl
dFNoYXBlSW1hZ2VBbmRSZWN0KGNvbnN0IFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUsIGNvbnN0IFJl
bmRlckJveCogcmVuZGVyQm94LCBjb25zdCBMYXlvdXRTaXplJiByZWZlcmVuY2VCb3hTaXplLCBJ
bWFnZSomIGltYWdlLCBMYXlvdXRSZWN0JiByZWN0KQotewotICAgIEFTU0VSVChzaGFwZVZhbHVl
LT5pc0ltYWdlVmFsaWQoKSk7Ci0gICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IHNoYXBlVmFs
dWUtPmltYWdlKCk7Ci0KLSAgICBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUgPSByZW5kZXJCb3gt
PmNhbGN1bGF0ZUltYWdlSW50cmluc2ljRGltZW5zaW9ucyhzdHlsZUltYWdlLCByb3VuZGVkSW50
U2l6ZShyZWZlcmVuY2VCb3hTaXplKSwgUmVuZGVySW1hZ2U6OlNjYWxlQnlFZmZlY3RpdmVab29t
KTsKLSAgICBzdHlsZUltYWdlLT5zZXRDb250YWluZXJTaXplRm9yUmVuZGVyZXIocmVuZGVyQm94
LCBpbWFnZVNpemUsIHJlbmRlckJveC0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwotCi0gICAg
aW1hZ2UgPSBzdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRl
ckJveCk7Ci0gICAgaWYgKHJlbmRlckJveC0+aXNSZW5kZXJJbWFnZSgpKQotICAgICAgICByZWN0
ID0gdG9SZW5kZXJJbWFnZShyZW5kZXJCb3gpLT5yZXBsYWNlZENvbnRlbnRSZWN0KHJlbmRlckJv
eC0+aW50cmluc2ljU2l6ZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHJlY3QgPSBMYXlvdXRSZWN0
KExheW91dFBvaW50KCksIGltYWdlU2l6ZSk7Ci19Ci0KLXN0YXRpYyBMYXlvdXRSZWN0IGdldFNo
YXBlSW1hZ2VNYXJnaW5SZWN0KGNvbnN0IFJlbmRlckJveCYgcmVuZGVyQm94LCBjb25zdCBMYXlv
dXRTaXplJiByZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSkKLXsKLSAgICBMYXlvdXRQb2ludCBtYXJn
aW5Cb3hPcmlnaW4oLXJlbmRlckJveC5tYXJnaW5Mb2dpY2FsTGVmdCgpIC0gcmVuZGVyQm94LmJv
cmRlckFuZFBhZGRpbmdMb2dpY2FsTGVmdCgpLCAtcmVuZGVyQm94Lm1hcmdpbkJlZm9yZSgpIC0g
cmVuZGVyQm94LmJvcmRlckJlZm9yZSgpIC0gcmVuZGVyQm94LnBhZGRpbmdCZWZvcmUoKSk7Ci0g
ICAgTGF5b3V0U2l6ZSBtYXJnaW5Cb3hTaXplRGVsdGEocmVuZGVyQm94Lm1hcmdpbkxvZ2ljYWxX
aWR0aCgpICsgcmVuZGVyQm94LmJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSwgcmVuZGVy
Qm94Lm1hcmdpbkxvZ2ljYWxIZWlnaHQoKSArIHJlbmRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9n
aWNhbEhlaWdodCgpKTsKLSAgICByZXR1cm4gTGF5b3V0UmVjdChtYXJnaW5Cb3hPcmlnaW4sIHJl
ZmVyZW5jZUJveExvZ2ljYWxTaXplICsgbWFyZ2luQm94U2l6ZURlbHRhKTsKLX0KLQotdGVtcGxh
dGU8Y2xhc3MgUmVuZGVyVHlwZT4KLWNvbnN0IFNoYXBlJiBTaGFwZUluZm88UmVuZGVyVHlwZT46
OmNvbXB1dGVkU2hhcGUoKSBjb25zdAotewotICAgIGlmIChTaGFwZSogc2hhcGUgPSBtX3NoYXBl
LmdldCgpKQotICAgICAgICByZXR1cm4gKnNoYXBlOwotCi0gICAgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUgPSB0aGlzLT5zdHlsZUZvcldyaXRpbmdNb2RlKCkud3JpdGluZ01vZGUoKTsKLSAgICBM
ZW5ndGggbWFyZ2luID0gbV9yZW5kZXJlci5zdHlsZSgpLnNoYXBlTWFyZ2luKCk7Ci0gICAgZmxv
YXQgc2hhcGVJbWFnZVRocmVzaG9sZCA9IG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZUltYWdlVGhy
ZXNob2xkKCk7Ci0gICAgY29uc3QgU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSA9IHRoaXMtPnNoYXBl
VmFsdWUoKTsKLSAgICBBU1NFUlQoc2hhcGVWYWx1ZSk7Ci0KLSAgICBzd2l0Y2ggKHNoYXBlVmFs
dWUtPnR5cGUoKSkgewotICAgIGNhc2UgU2hhcGVWYWx1ZTo6U2hhcGU6Ci0gICAgICAgIEFTU0VS
VChzaGFwZVZhbHVlLT5zaGFwZSgpKTsKLSAgICAgICAgbV9zaGFwZSA9IFNoYXBlOjpjcmVhdGVT
aGFwZShzaGFwZVZhbHVlLT5zaGFwZSgpLCBtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXplLCB3cml0
aW5nTW9kZSwgbWFyZ2luKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTaGFwZVZhbHVlOjpJ
bWFnZTogewotICAgICAgICBJbWFnZSogaW1hZ2U7Ci0gICAgICAgIExheW91dFJlY3QgaW1hZ2VS
ZWN0OwotICAgICAgICBnZXRTaGFwZUltYWdlQW5kUmVjdChzaGFwZVZhbHVlLCAmbV9yZW5kZXJl
ciwgbV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSwgaW1hZ2UsIGltYWdlUmVjdCk7Ci0gICAgICAg
IGNvbnN0IExheW91dFJlY3QmIG1hcmdpblJlY3QgPSBnZXRTaGFwZUltYWdlTWFyZ2luUmVjdCht
X3JlbmRlcmVyLCBtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXplKTsKLSAgICAgICAgbV9zaGFwZSA9
IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShpbWFnZSwgc2hhcGVJbWFnZVRocmVzaG9sZCwgaW1h
Z2VSZWN0LCBtYXJnaW5SZWN0LCB3cml0aW5nTW9kZSwgbWFyZ2luKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgU2hhcGVWYWx1ZTo6Qm94OiB7Ci0gICAgICAgIFJvdW5kZWRSZWN0
IHNoYXBlUmVjdCA9IGNvbXB1dGVSb3VuZGVkUmVjdEZvckJveFNoYXBlKHJlZmVyZW5jZUJveCgp
LCBtX3JlbmRlcmVyKTsKLSAgICAgICAgaWYgKCF0aGlzLT5zdHlsZUZvcldyaXRpbmdNb2RlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHNoYXBlUmVjdCA9IHNoYXBl
UmVjdC50cmFuc3Bvc2VkUmVjdCgpOwotICAgICAgICBtX3NoYXBlID0gU2hhcGU6OmNyZWF0ZUJv
eFNoYXBlKHNoYXBlUmVjdCwgd3JpdGluZ01vZGUsIG1hcmdpbik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIFNoYXBlVmFsdWU6Ok91dHNpZGU6Ci0gICAgICAgIC8vIE91dHNpZGUg
c2hvdWxkIGhhdmUgYWxyZWFkeSByZXNvbHZlZCB0byBhIGRpZmZlcmVudCBzaGFwZSB2YWx1ZQot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9zaGFw
ZSk7Ci0gICAgcmV0dXJuICptX3NoYXBlOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBl
PgotU2VnbWVudExpc3QgU2hhcGVJbmZvPFJlbmRlclR5cGU+Ojpjb21wdXRlU2VnbWVudHNGb3JM
aW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBjb25zdAotewot
ICAgIEFTU0VSVChsaW5lSGVpZ2h0ID49IDApOwotICAgIFNlZ21lbnRMaXN0IHNlZ21lbnRzOwot
Ci0gICAgZ2V0SW50ZXJ2YWxzKChsaW5lVG9wIC0gbG9naWNhbFRvcE9mZnNldCgpKSwgc3RkOjpt
aW4obGluZUhlaWdodCwgc2hhcGVMb2dpY2FsQm90dG9tKCkgLSBsaW5lVG9wKSwgc2VnbWVudHMp
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWdtZW50cy5zaXplKCk7IGkrKykgewot
ICAgICAgICBzZWdtZW50c1tpXS5sb2dpY2FsTGVmdCArPSBsb2dpY2FsTGVmdE9mZnNldCgpOwot
ICAgICAgICBzZWdtZW50c1tpXS5sb2dpY2FsUmlnaHQgKz0gbG9naWNhbExlZnRPZmZzZXQoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gc2VnbWVudHM7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFJlbmRl
clR5cGU+Ci1pbmxpbmUgTGF5b3V0VW5pdCBib3JkZXJCZWZvcmVJbldyaXRpbmdNb2RlKGNvbnN0
IFJlbmRlclR5cGUmIHJlbmRlcmVyLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKLXsKLSAgICBz
d2l0Y2ggKHdyaXRpbmdNb2RlKSB7Ci0gICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOiBy
ZXR1cm4gcmVuZGVyZXIuYm9yZGVyVG9wKCk7Ci0gICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdN
b2RlOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90dG9tKCk7Ci0gICAgY2FzZSBMZWZ0VG9SaWdo
dFdyaXRpbmdNb2RlOiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyTGVmdCgpOwotICAgIGNhc2UgUmln
aHRUb0xlZnRXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclJpZ2h0KCk7Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRl
ckJlZm9yZSgpOwotfQotCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlPgotaW5saW5lIExheW91
dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZUluV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyVHlw
ZSYgcmVuZGVyZXIsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotewotICAgIHN3aXRjaCAod3Jp
dGluZ01vZGUpIHsKLSAgICBjYXNlIFRvcFRvQm90dG9tV3JpdGluZ01vZGU6IHJldHVybiByZW5k
ZXJlci5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLnBhZGRpbmdUb3AoKTsKLSAgICBjYXNlIEJvdHRv
bVRvVG9wV3JpdGluZ01vZGU6IHJldHVybiByZW5kZXJlci5ib3JkZXJCb3R0b20oKSArIHJlbmRl
cmVyLnBhZGRpbmdCb3R0b20oKTsKLSAgICBjYXNlIExlZnRUb1JpZ2h0V3JpdGluZ01vZGU6IHJl
dHVybiByZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci5wYWRkaW5nTGVmdCgpOwotICAg
IGNhc2UgUmlnaHRUb0xlZnRXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclJpZ2h0
KCkgKyByZW5kZXJlci5wYWRkaW5nUmlnaHQoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpOwot
fQotCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlPgotTGF5b3V0VW5pdCBTaGFwZUluZm88UmVu
ZGVyVHlwZT46OmxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdAotewotICAgIHN3aXRjaCAocmVmZXJl
bmNlQm94KCkpIHsKLSAgICBjYXNlIE1hcmdpbkJveDogcmV0dXJuIC1tX3JlbmRlcmVyLm1hcmdp
bkJlZm9yZSgmc3R5bGVGb3JXcml0aW5nTW9kZSgpKTsKLSAgICBjYXNlIEJvcmRlckJveDogcmV0
dXJuIExheW91dFVuaXQoKTsKLSAgICBjYXNlIFBhZGRpbmdCb3g6IHJldHVybiBib3JkZXJCZWZv
cmVJbldyaXRpbmdNb2RlKG1fcmVuZGVyZXIsIHN0eWxlRm9yV3JpdGluZ01vZGUoKS53cml0aW5n
TW9kZSgpKTsKLSAgICBjYXNlIENvbnRlbnRCb3g6IHJldHVybiBib3JkZXJBbmRQYWRkaW5nQmVm
b3JlSW5Xcml0aW5nTW9kZShtX3JlbmRlcmVyLCBzdHlsZUZvcldyaXRpbmdNb2RlKCkud3JpdGlu
Z01vZGUoKSk7Ci0gICAgY2FzZSBGaWxsOiBicmVhazsKLSAgICBjYXNlIFN0cm9rZTogYnJlYWs7
Ci0gICAgY2FzZSBWaWV3Qm94OiBicmVhazsKLSAgICBjYXNlIEJveE1pc3Npbmc6IGJyZWFrOwot
ICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBMYXlvdXRVbml0
KCk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFJlbmRlclR5cGU+Ci1pbmxpbmUgTGF5b3V0VW5pdCBi
b3JkZXJTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKGNvbnN0IFJlbmRlclR5cGUmIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgaWYgKHN0eWxlLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKLSAgICAgICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJMZWZ0KCk7Ci0KLSAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRlclJpZ2h0KCk7Ci0gICAgfQotICAgIGlmIChzdHls
ZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlci5ib3Jk
ZXJUb3AoKTsKLQotICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJCb3R0b20oKTsKLX0KLQotdGVt
cGxhdGU8Y2xhc3MgUmVuZGVyVHlwZT4KLWlubGluZSBMYXlvdXRVbml0IGJvcmRlckFuZFBhZGRp
bmdTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKGNvbnN0IFJlbmRlclR5cGUmIHJlbmRlcmVy
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgaWYgKHN0eWxlLmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJMZWZ0KCkgKyByZW5kZXJl
ci5wYWRkaW5nTGVmdCgpOwotCi0gICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgp
ICsgcmVuZGVyZXIucGFkZGluZ1JpZ2h0KCk7Ci0gICAgfQotICAgIGlmIChzdHlsZS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJUb3AoKSAr
IHJlbmRlcmVyLnBhZGRpbmdUb3AoKTsKLQotICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJCb3R0
b20oKSArIHJlbmRlcmVyLnBhZGRpbmdCb3R0b20oKTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgUmVu
ZGVyVHlwZT4KLUxheW91dFVuaXQgU2hhcGVJbmZvPFJlbmRlclR5cGU+Ojpsb2dpY2FsTGVmdE9m
ZnNldCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmVuZGVyZXIuaXNSZW5kZXJSZWdpb24oKSkKLSAg
ICAgICAgcmV0dXJuIExheW91dFVuaXQoKTsKLQotICAgIHN3aXRjaCAocmVmZXJlbmNlQm94KCkp
IHsKLSAgICBjYXNlIE1hcmdpbkJveDogcmV0dXJuIC1tX3JlbmRlcmVyLm1hcmdpblN0YXJ0KCZz
dHlsZUZvcldyaXRpbmdNb2RlKCkpOwotICAgIGNhc2UgQm9yZGVyQm94OiByZXR1cm4gTGF5b3V0
VW5pdCgpOwotICAgIGNhc2UgUGFkZGluZ0JveDogcmV0dXJuIGJvcmRlclN0YXJ0V2l0aFN0eWxl
Rm9yV3JpdGluZ01vZGUobV9yZW5kZXJlciwgc3R5bGVGb3JXcml0aW5nTW9kZSgpKTsKLSAgICBj
YXNlIENvbnRlbnRCb3g6IHJldHVybiBib3JkZXJBbmRQYWRkaW5nU3RhcnRXaXRoU3R5bGVGb3JX
cml0aW5nTW9kZShtX3JlbmRlcmVyLCBzdHlsZUZvcldyaXRpbmdNb2RlKCkpOwotICAgIGNhc2Ug
RmlsbDogYnJlYWs7Ci0gICAgY2FzZSBTdHJva2U6IGJyZWFrOwotICAgIGNhc2UgVmlld0JveDog
YnJlYWs7Ci0gICAgY2FzZSBCb3hNaXNzaW5nOiBicmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdCgpOwotfQotCi10ZW1wbGF0ZSBj
bGFzcyBTaGFwZUluZm88UmVuZGVyQmxvY2s+OwotdGVtcGxhdGUgY2xhc3MgU2hhcGVJbmZvPFJl
bmRlckJveD47Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
U2hhcGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjM2UzNDM0Mzc2N2Zj
NjdhZTExZGM3NDE4OGZkYmIwMzZkY2ZhYjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUlu
Zm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0q
Ci0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotKiAg
ICBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0qICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0qICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotKiAgICBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0qIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0qIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBCRQotKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksCi0qIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSogVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GCi0qIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSovCi0KLSNpZm5kZWYgU2hhcGVJbmZv
X2gKLSNkZWZpbmUgU2hhcGVJbmZvX2gKLQotI2lmIEVOQUJMRShDU1NfU0hBUEVTKQotCi0jaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU2hhcGUuaCIKLSNpbmNsdWRlICJTaGFwZVZhbHVlLmgi
Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi10ZW1wbGF0ZTxjbGFzcyBLZXlUeXBlLCBjbGFzcyBJbmZvVHlwZT4KLWNs
YXNzIE1hcHBlZEluZm8gewotcHVibGljOgotICAgIHN0YXRpYyBJbmZvVHlwZSYgZW5zdXJlSW5m
byhjb25zdCBLZXlUeXBlJiBrZXkpCi0gICAgewotICAgICAgICBJbmZvTWFwJiBpbmZvTWFwID0g
TWFwcGVkSW5mbzxLZXlUeXBlLCBJbmZvVHlwZT46OmluZm9NYXAoKTsKLSAgICAgICAgaWYgKElu
Zm9UeXBlKiBpbmZvID0gaW5mb01hcC5nZXQoJmtleSkpCi0gICAgICAgICAgICByZXR1cm4gKmlu
Zm87Ci0gICAgICAgIHR5cGVuYW1lIEluZm9NYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBpbmZvTWFw
LmFkZCgma2V5LCBzdGQ6Om1ha2VfdW5pcXVlPEluZm9UeXBlPihrZXkpKTsKLSAgICAgICAgcmV0
dXJuICpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCByZW1v
dmVJbmZvKGNvbnN0IEtleVR5cGUmIGtleSkgeyBpbmZvTWFwKCkucmVtb3ZlKCZrZXkpOyB9Ci0g
ICAgc3RhdGljIEluZm9UeXBlKiBpbmZvKGNvbnN0IEtleVR5cGUmIGtleSkgeyByZXR1cm4gaW5m
b01hcCgpLmdldCgma2V5KTsgfQotCi1wcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxjb25z
dCBLZXlUeXBlKiwgc3RkOjp1bmlxdWVfcHRyPEluZm9UeXBlPj4gSW5mb01hcDsKLSAgICBzdGF0
aWMgSW5mb01hcCYgaW5mb01hcCgpCi0gICAgewotICAgICAgICBERVBSRUNBVEVEX0RFRklORV9T
VEFUSUNfTE9DQUwoSW5mb01hcCwgc3RhdGljSW5mb01hcCwgKCkpOwotICAgICAgICByZXR1cm4g
c3RhdGljSW5mb01hcDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBSZW5kZXJUeXBlPgot
Y2xhc3MgU2hhcGVJbmZvIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5TaGFwZUluZm8oKSB7IH0KLQotICAgIHZvaWQgc2V0UmVmZXJlbmNlQm94
TG9naWNhbFNpemUoTGF5b3V0U2l6ZSk7Ci0KLSAgICBTZWdtZW50TGlzdCBjb21wdXRlU2VnbWVu
dHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KSBjb25z
dDsKLQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gY29t
cHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLnkoKSArIGxvZ2ljYWxUb3BPZmZzZXQoKTsg
fQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gY29t
cHV0ZWRTaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLm1heFkoKSArIGxvZ2ljYWxUb3BPZmZzZXQo
KTsgfQotICAgIExheW91dFVuaXQgc2hhcGVMb2dpY2FsTGVmdCgpIGNvbnN0IHsgcmV0dXJuIGNv
bXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS54KCkgKyBsb2dpY2FsTGVmdE9mZnNldCgp
OyB9Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNv
bXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS5tYXhYKCkgKyBsb2dpY2FsTGVmdE9mZnNl
dCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IGNvbXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS53aWR0aCgpOyB9Ci0gICAgTGF5b3V0
VW5pdCBzaGFwZUxvZ2ljYWxIZWlnaHQoKSBjb25zdCB7IHJldHVybiBjb21wdXRlZFNoYXBlTG9n
aWNhbEJvdW5kaW5nQm94KCkuaGVpZ2h0KCk7IH0KLQotICAgIExheW91dFVuaXQgbG9naWNhbExp
bmVUb3AoKSBjb25zdCB7IHJldHVybiBtX3JlZmVyZW5jZUJveExpbmVUb3AgKyBsb2dpY2FsVG9w
T2Zmc2V0KCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lQm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWZlcmVuY2VCb3hMaW5lVG9wICsgbV9saW5lSGVpZ2h0ICsgbG9naWNhbFRvcE9m
ZnNldCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZUJvdHRvbShMYXlvdXRVbml0IGxp
bmVIZWlnaHQpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlQm94TGluZVRvcCArIGxpbmVIZWln
aHQgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KLQotICAgIExheW91dFVuaXQgc2hhcGVDb250YWlu
aW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gKG1fcmVuZGVyZXIuc3R5bGUo
KS5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCkgPyAobV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6
ZS5oZWlnaHQoKSArIG1fcmVuZGVyZXIuYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSkg
OiBtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXplLmhlaWdodCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgbGluZU92ZXJsYXBzU2hhcGVCb3VuZHMoKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lkIG1hcmtT
aGFwZUFzRGlydHkoKSB7IG1fc2hhcGUgPSBudWxscHRyOyB9Ci0gICAgYm9vbCBpc1NoYXBlRGly
dHkoKSB7IHJldHVybiAhbV9zaGFwZTsgfQotICAgIGNvbnN0IFJlbmRlclR5cGUmIG93bmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJlcjsgfQotICAgIExheW91dFNpemUgcmVmZXJlbmNlQm94
TG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXplOyB9
Ci0KLSAgICBMYXlvdXRSZWN0IGNvbXB1dGVkU2hhcGVQaHlzaWNhbEJvdW5kaW5nQm94KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIExheW91dFJlY3QgcGh5c2ljYWxCb3VuZGluZ0JveCA9IGNvbXB1
dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKTsKLSAgICAgICAgcGh5c2ljYWxCb3VuZGluZ0Jv
eC5zZXRYKHBoeXNpY2FsQm91bmRpbmdCb3gueCgpICsgbG9naWNhbExlZnRPZmZzZXQoKSk7Ci0g
ICAgICAgIHBoeXNpY2FsQm91bmRpbmdCb3guc2V0WShwaHlzaWNhbEJvdW5kaW5nQm94LnkoKSAr
IGxvZ2ljYWxUb3BPZmZzZXQoKSk7Ci0gICAgICAgIGlmIChtX3JlbmRlcmVyLnN0eWxlKCkuaXNG
bGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHBoeXNpY2FsQm91bmRpbmdC
b3guc2V0WShtX3JlbmRlcmVyLmxvZ2ljYWxIZWlnaHQoKSAtIHBoeXNpY2FsQm91bmRpbmdCb3gu
bWF4WSgpKTsKLSAgICAgICAgaWYgKCFtX3JlbmRlcmVyLnN0eWxlKCkuaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkKLSAgICAgICAgICAgIHBoeXNpY2FsQm91bmRpbmdCb3ggPSBwaHlzaWNhbEJv
dW5kaW5nQm94LnRyYW5zcG9zZWRSZWN0KCk7Ci0gICAgICAgIHJldHVybiBwaHlzaWNhbEJvdW5k
aW5nQm94OwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgc2hhcGVUb1JlbmRlcmVyUG9pbnQoRmxv
YXRQb2ludCBwb2ludCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEZsb2F0UG9pbnQgcmVzdWx0ID0g
RmxvYXRQb2ludChwb2ludC54KCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpLCBwb2ludC55KCkgKyBs
b2dpY2FsVG9wT2Zmc2V0KCkpOwotICAgICAgICBpZiAobV9yZW5kZXJlci5zdHlsZSgpLmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXN1bHQuc2V0WShtX3JlbmRl
cmVyLmxvZ2ljYWxIZWlnaHQoKSAtIHJlc3VsdC55KCkpOwotICAgICAgICBpZiAoIW1fcmVuZGVy
ZXIuc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmVzdWx0
ID0gcmVzdWx0LnRyYW5zcG9zZWRQb2ludCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLQotICAgIEZsb2F0U2l6ZSBzaGFwZVRvUmVuZGVyZXJTaXplKEZsb2F0U2l6ZSBzaXplKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3JlbmRlcmVyLnN0eWxlKCkuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBzaXplLnRyYW5zcG9zZWRTaXplKCk7
Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLQotICAgIGNvbnN0IFNoYXBlJiBjb21wdXRl
ZFNoYXBlKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBTaGFwZUluZm8oY29u
c3QgUmVuZGVyVHlwZSYgcmVuZGVyZXIpCi0gICAgICAgIDogbV9yZW5kZXJlcihyZW5kZXJlcikK
LSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCBDU1NCb3hUeXBlIHJlZmVyZW5jZUJveCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29tcHV0ZWRTaGFwZUxvZ2ljYWxCb3Vu
ZGluZ0JveCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEludGVydmFscyhMYXlvdXRVbml0LCBM
YXlvdXRVbml0LCBTZWdtZW50TGlzdCYpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlRm9yV3JpdGluZ01vZGUoKSBjb25zdCA9IDA7Ci0KLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0T2Zmc2V0KCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0IG1fcmVmZXJlbmNlQm94TGluZVRv
cDsKLSAgICBMYXlvdXRVbml0IG1fbGluZUhlaWdodDsKLQotICAgIGNvbnN0IFJlbmRlclR5cGUm
IG1fcmVuZGVyZXI7Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8U2hh
cGU+IG1fc2hhcGU7Ci0gICAgTGF5b3V0U2l6ZSBtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXplOwot
fTsKLQotYm9vbCBjaGVja1NoYXBlSW1hZ2VPcmlnaW4oRG9jdW1lbnQmLCBDYWNoZWRJbWFnZSYp
OwotCi19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKaW5kZXggYmY5ZGY4OTY4ZDQyOGU0YzkzMjM3
Y2VjZDJmYjc1MzlhZWYzZjhmNS4uMDRlNjQ2NmIxNGI0MDI5NjI5MWNkODIyMGU4ZjUxNGRlMTNl
YzJhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91
dHNpZGVJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
T3V0c2lkZUluZm8uY3BwCkBAIC0zMywxMiArMzMsMjU4IEBACiAKICNpbmNsdWRlICJTaGFwZU91
dHNpZGVJbmZvLmgiCiAKKyNpbmNsdWRlICJCb3hTaGFwZS5oIgogI2luY2x1ZGUgIkZsb2F0aW5n
T2JqZWN0cy5oIgorI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlJlbmRl
ckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlcklt
YWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorTGF5b3V0UmVjdCBTaGFwZU91dHNpZGVJbmZvOjpjb21wdXRlZFNoYXBlUGh5c2ljYWxCb3Vu
ZGluZ0JveCgpIGNvbnN0Cit7CisgICAgTGF5b3V0UmVjdCBwaHlzaWNhbEJvdW5kaW5nQm94ID0g
Y29tcHV0ZWRTaGFwZSgpLnNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCk7CisgICAgcGh5
c2ljYWxCb3VuZGluZ0JveC5zZXRYKHBoeXNpY2FsQm91bmRpbmdCb3gueCgpICsgbG9naWNhbExl
ZnRPZmZzZXQoKSk7CisgICAgcGh5c2ljYWxCb3VuZGluZ0JveC5zZXRZKHBoeXNpY2FsQm91bmRp
bmdCb3gueSgpICsgbG9naWNhbFRvcE9mZnNldCgpKTsKKyAgICBpZiAobV9yZW5kZXJlci5zdHls
ZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCisgICAgICAgIHBoeXNpY2FsQm91bmRp
bmdCb3guc2V0WShtX3JlbmRlcmVyLmxvZ2ljYWxIZWlnaHQoKSAtIHBoeXNpY2FsQm91bmRpbmdC
b3gubWF4WSgpKTsKKyAgICBpZiAoIW1fcmVuZGVyZXIuc3R5bGUoKS5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQorICAgICAgICBwaHlzaWNhbEJvdW5kaW5nQm94ID0gcGh5c2ljYWxCb3VuZGlu
Z0JveC50cmFuc3Bvc2VkUmVjdCgpOworICAgIHJldHVybiBwaHlzaWNhbEJvdW5kaW5nQm94Owor
fQorCitGbG9hdFBvaW50IFNoYXBlT3V0c2lkZUluZm86OnNoYXBlVG9SZW5kZXJlclBvaW50KEZs
b2F0UG9pbnQgcG9pbnQpIGNvbnN0Cit7CisgICAgRmxvYXRQb2ludCByZXN1bHQgPSBGbG9hdFBv
aW50KHBvaW50LngoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCksIHBvaW50LnkoKSArIGxvZ2ljYWxU
b3BPZmZzZXQoKSk7CisgICAgaWYgKG1fcmVuZGVyZXIuc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKQorICAgICAgICByZXN1bHQuc2V0WShtX3JlbmRlcmVyLmxvZ2ljYWxIZWln
aHQoKSAtIHJlc3VsdC55KCkpOworICAgIGlmICghbV9yZW5kZXJlci5zdHlsZSgpLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50cmFuc3Bvc2VkUG9p
bnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitGbG9hdFNpemUgU2hhcGVPdXRzaWRlSW5m
bzo6c2hhcGVUb1JlbmRlcmVyU2l6ZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAo
IW1fcmVuZGVyZXIuc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICBy
ZXR1cm4gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOworICAgIHJldHVybiBzaXplOworfQorCitzdGF0
aWMgaW5saW5lIENTU0JveFR5cGUgcmVmZXJlbmNlQm94KFNoYXBlVmFsdWUqIHNoYXBlVmFsdWUp
Cit7CisgICAgaWYgKHNoYXBlVmFsdWUtPmNzc0JveCgpID09IEJveE1pc3NpbmcpIHsKKyAgICAg
ICAgaWYgKHNoYXBlVmFsdWUtPnR5cGUoKSA9PSBTaGFwZVZhbHVlOjpJbWFnZSkKKyAgICAgICAg
ICAgIHJldHVybiBDb250ZW50Qm94OworICAgICAgICByZXR1cm4gTWFyZ2luQm94OworICAgIH0K
KyAgICByZXR1cm4gc2hhcGVWYWx1ZS0+Y3NzQm94KCk7Cit9CisKK3ZvaWQgU2hhcGVPdXRzaWRl
SW5mbzo6c2V0UmVmZXJlbmNlQm94TG9naWNhbFNpemUoTGF5b3V0U2l6ZSBuZXdSZWZlcmVuY2VC
b3hMb2dpY2FsU2l6ZSkKK3sKKyAgICBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gbV9y
ZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpOworICAgIHN3aXRjaCAocmVmZXJlbmNlQm94KG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU91
dHNpZGUoKSkpIHsKKyAgICBjYXNlIE1hcmdpbkJveDoKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUuZXhw
YW5kKG1fcmVuZGVyZXIuaG9yaXpvbnRhbE1hcmdpbkV4dGVudCgpLCBtX3JlbmRlcmVyLnZlcnRp
Y2FsTWFyZ2luRXh0ZW50KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdSZWZlcmVu
Y2VCb3hMb2dpY2FsU2l6ZS5leHBhbmQobV9yZW5kZXJlci52ZXJ0aWNhbE1hcmdpbkV4dGVudCgp
LCBtX3JlbmRlcmVyLmhvcml6b250YWxNYXJnaW5FeHRlbnQoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQm9yZGVyQm94OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhZGRpbmdCb3g6
CisgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgICAgIG5ld1Jl
ZmVyZW5jZUJveExvZ2ljYWxTaXplLnNocmluayhtX3JlbmRlcmVyLmhvcml6b250YWxCb3JkZXJF
eHRlbnQoKSwgbV9yZW5kZXJlci52ZXJ0aWNhbEJvcmRlckV4dGVudCgpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbmV3UmVmZXJlbmNlQm94TG9naWNhbFNpemUuc2hyaW5rKG1fcmVuZGVy
ZXIudmVydGljYWxCb3JkZXJFeHRlbnQoKSwgbV9yZW5kZXJlci5ob3Jpem9udGFsQm9yZGVyRXh0
ZW50KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnRlbnRCb3g6CisgICAgICAgIGlm
IChpc0hvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgICAgIG5ld1JlZmVyZW5jZUJveExv
Z2ljYWxTaXplLnNocmluayhtX3JlbmRlcmVyLmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0
ZW50KCksIG1fcmVuZGVyZXIudmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBuZXdSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZS5zaHJpbmso
bV9yZW5kZXJlci52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSwgbV9yZW5kZXJlci5o
b3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGaWxsOgorICAgIGNhc2UgU3Ryb2tlOgorICAgIGNhc2UgVmlld0JveDoKKyAgICBjYXNl
IEJveE1pc3Npbmc6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBpZiAobV9yZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSA9PSBuZXdSZWZl
cmVuY2VCb3hMb2dpY2FsU2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1hcmtTaGFwZUFzRGly
dHkoKTsKKyAgICBtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXplID0gbmV3UmVmZXJlbmNlQm94TG9n
aWNhbFNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjaGVja1NoYXBlSW1hZ2VPcmlnaW4o
RG9jdW1lbnQmIGRvY3VtZW50LCBDYWNoZWRJbWFnZSYgY2FjaGVkSW1hZ2UpCit7CisgICAgaWYg
KGNhY2hlZEltYWdlLmlzT3JpZ2luQ2xlYW4oZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgVVJMJiB1cmwgPSBjYWNoZWRJbWFnZS51
cmwoKTsKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXJsLmlzTnVsbCgpID8gIicnIiA6IHVybC5z
dHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKTsKKyAgICBkb2N1bWVudC5hZGRDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgIlVu
c2FmZSBhdHRlbXB0IHRvIGxvYWQgVVJMICIgKyB1cmxTdHJpbmcgKyAiLiIpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBnZXRTaGFwZUltYWdlQW5kUmVjdChjb25zdCBT
aGFwZVZhbHVlKiBzaGFwZVZhbHVlLCBjb25zdCBSZW5kZXJCb3gqIHJlbmRlckJveCwgY29uc3Qg
TGF5b3V0U2l6ZSYgcmVmZXJlbmNlQm94U2l6ZSwgSW1hZ2UqJiBpbWFnZSwgTGF5b3V0UmVjdCYg
cmVjdCkKK3sKKyAgICBBU1NFUlQoc2hhcGVWYWx1ZS0+aXNJbWFnZVZhbGlkKCkpOworICAgIFN0
eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBzaGFwZVZhbHVlLT5pbWFnZSgpOworCisgICAgY29uc3Qg
SW50U2l6ZSYgaW1hZ2VTaXplID0gcmVuZGVyQm94LT5jYWxjdWxhdGVJbWFnZUludHJpbnNpY0Rp
bWVuc2lvbnMoc3R5bGVJbWFnZSwgcm91bmRlZEludFNpemUocmVmZXJlbmNlQm94U2l6ZSksIFJl
bmRlckltYWdlOjpTY2FsZUJ5RWZmZWN0aXZlWm9vbSk7CisgICAgc3R5bGVJbWFnZS0+c2V0Q29u
dGFpbmVyU2l6ZUZvclJlbmRlcmVyKHJlbmRlckJveCwgaW1hZ2VTaXplLCByZW5kZXJCb3gtPnN0
eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKKworICAgIGltYWdlID0gc3R5bGVJbWFnZS0+Y2FjaGVk
SW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihyZW5kZXJCb3gpOworICAgIGlmIChyZW5kZXJCb3gt
PmlzUmVuZGVySW1hZ2UoKSkKKyAgICAgICAgcmVjdCA9IHRvUmVuZGVySW1hZ2UocmVuZGVyQm94
KS0+cmVwbGFjZWRDb250ZW50UmVjdChyZW5kZXJCb3gtPmludHJpbnNpY1NpemUoKSk7CisgICAg
ZWxzZQorICAgICAgICByZWN0ID0gTGF5b3V0UmVjdChMYXlvdXRQb2ludCgpLCBpbWFnZVNpemUp
OworfQorCitzdGF0aWMgTGF5b3V0UmVjdCBnZXRTaGFwZUltYWdlTWFyZ2luUmVjdChjb25zdCBS
ZW5kZXJCb3gmIHJlbmRlckJveCwgY29uc3QgTGF5b3V0U2l6ZSYgcmVmZXJlbmNlQm94TG9naWNh
bFNpemUpCit7CisgICAgTGF5b3V0UG9pbnQgbWFyZ2luQm94T3JpZ2luKC1yZW5kZXJCb3gubWFy
Z2luTG9naWNhbExlZnQoKSAtIHJlbmRlckJveC5ib3JkZXJBbmRQYWRkaW5nTG9naWNhbExlZnQo
KSwgLXJlbmRlckJveC5tYXJnaW5CZWZvcmUoKSAtIHJlbmRlckJveC5ib3JkZXJCZWZvcmUoKSAt
IHJlbmRlckJveC5wYWRkaW5nQmVmb3JlKCkpOworICAgIExheW91dFNpemUgbWFyZ2luQm94U2l6
ZURlbHRhKHJlbmRlckJveC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSArIHJlbmRlckJveC5ib3JkZXJB
bmRQYWRkaW5nTG9naWNhbFdpZHRoKCksIHJlbmRlckJveC5tYXJnaW5Mb2dpY2FsSGVpZ2h0KCkg
KyByZW5kZXJCb3guYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxIZWlnaHQoKSk7CisgICAgcmV0dXJu
IExheW91dFJlY3QobWFyZ2luQm94T3JpZ2luLCByZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZSArIG1h
cmdpbkJveFNpemVEZWx0YSk7Cit9CisKK2NvbnN0IFNoYXBlJiBTaGFwZU91dHNpZGVJbmZvOjpj
b21wdXRlZFNoYXBlKCkgY29uc3QKK3sKKyAgICBpZiAoU2hhcGUqIHNoYXBlID0gbV9zaGFwZS5n
ZXQoKSkKKyAgICAgICAgcmV0dXJuICpzaGFwZTsKKworICAgIFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlID0gbV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS53cml0aW5nTW9kZSgp
OworICAgIExlbmd0aCBtYXJnaW4gPSBtX3JlbmRlcmVyLnN0eWxlKCkuc2hhcGVNYXJnaW4oKTsK
KyAgICBmbG9hdCBzaGFwZUltYWdlVGhyZXNob2xkID0gbV9yZW5kZXJlci5zdHlsZSgpLnNoYXBl
SW1hZ2VUaHJlc2hvbGQoKTsKKyAgICBjb25zdCBTaGFwZVZhbHVlKiBzaGFwZVZhbHVlID0gdGhp
cy0+bV9yZW5kZXJlci5zdHlsZSgpLnNoYXBlT3V0c2lkZSgpOworICAgIEFTU0VSVChzaGFwZVZh
bHVlKTsKKworICAgIHN3aXRjaCAoc2hhcGVWYWx1ZS0+dHlwZSgpKSB7CisgICAgY2FzZSBTaGFw
ZVZhbHVlOjpTaGFwZToKKyAgICAgICAgQVNTRVJUKHNoYXBlVmFsdWUtPnNoYXBlKCkpOworICAg
ICAgICBtX3NoYXBlID0gU2hhcGU6OmNyZWF0ZVNoYXBlKHNoYXBlVmFsdWUtPnNoYXBlKCksIG1f
cmVmZXJlbmNlQm94TG9naWNhbFNpemUsIHdyaXRpbmdNb2RlLCBtYXJnaW4pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFNoYXBlVmFsdWU6OkltYWdlOiB7CisgICAgICAgIEltYWdlKiBpbWFn
ZTsKKyAgICAgICAgTGF5b3V0UmVjdCBpbWFnZVJlY3Q7CisgICAgICAgIGdldFNoYXBlSW1hZ2VB
bmRSZWN0KHNoYXBlVmFsdWUsICZtX3JlbmRlcmVyLCBtX3JlZmVyZW5jZUJveExvZ2ljYWxTaXpl
LCBpbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgbWFyZ2luUmVj
dCA9IGdldFNoYXBlSW1hZ2VNYXJnaW5SZWN0KG1fcmVuZGVyZXIsIG1fcmVmZXJlbmNlQm94TG9n
aWNhbFNpemUpOworICAgICAgICBtX3NoYXBlID0gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKGlt
YWdlLCBzaGFwZUltYWdlVGhyZXNob2xkLCBpbWFnZVJlY3QsIG1hcmdpblJlY3QsIHdyaXRpbmdN
b2RlLCBtYXJnaW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBTaGFwZVZhbHVl
OjpCb3g6IHsKKyAgICAgICAgUm91bmRlZFJlY3Qgc2hhcGVSZWN0ID0gY29tcHV0ZVJvdW5kZWRS
ZWN0Rm9yQm94U2hhcGUocmVmZXJlbmNlQm94KG1fcmVuZGVyZXIuc3R5bGUoKS5zaGFwZU91dHNp
ZGUoKSksIG1fcmVuZGVyZXIpOworICAgICAgICBpZiAoIW1fcmVuZGVyZXIuY29udGFpbmluZ0Js
b2NrKCktPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHNo
YXBlUmVjdCA9IHNoYXBlUmVjdC50cmFuc3Bvc2VkUmVjdCgpOworICAgICAgICBtX3NoYXBlID0g
U2hhcGU6OmNyZWF0ZUJveFNoYXBlKHNoYXBlUmVjdCwgd3JpdGluZ01vZGUsIG1hcmdpbik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNoYXBlVmFsdWU6Ok91dHNpZGU6CisgICAg
ICAgIC8vIE91dHNpZGUgc2hvdWxkIGhhdmUgYWxyZWFkeSByZXNvbHZlZCB0byBhIGRpZmZlcmVu
dCBzaGFwZSB2YWx1ZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICBBU1NFUlQobV9zaGFwZSk7CisgICAgcmV0dXJuICptX3NoYXBlOworfQorCitzdGF0aWMgaW5s
aW5lIExheW91dFVuaXQgYm9yZGVyQmVmb3JlSW5Xcml0aW5nTW9kZShjb25zdCBSZW5kZXJCb3gm
IHJlbmRlcmVyLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKK3sKKyAgICBzd2l0Y2ggKHdyaXRp
bmdNb2RlKSB7CisgICAgY2FzZSBUb3BUb0JvdHRvbVdyaXRpbmdNb2RlOiByZXR1cm4gcmVuZGVy
ZXIuYm9yZGVyVG9wKCk7CisgICAgY2FzZSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlOiByZXR1cm4g
cmVuZGVyZXIuYm9yZGVyQm90dG9tKCk7CisgICAgY2FzZSBMZWZ0VG9SaWdodFdyaXRpbmdNb2Rl
OiByZXR1cm4gcmVuZGVyZXIuYm9yZGVyTGVmdCgpOworICAgIGNhc2UgUmlnaHRUb0xlZnRXcml0
aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclJpZ2h0KCk7CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRlckJlZm9yZSgpOwor
fQorCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ0JlZm9yZUluV3Jp
dGluZ01vZGUoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpCit7CisgICAgc3dpdGNoICh3cml0aW5nTW9kZSkgeworICAgIGNhc2UgVG9wVG9Cb3R0b21X
cml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlclRvcCgpICsgcmVuZGVyZXIucGFkZGlu
Z1RvcCgpOworICAgIGNhc2UgQm90dG9tVG9Ub3BXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVy
LmJvcmRlckJvdHRvbSgpICsgcmVuZGVyZXIucGFkZGluZ0JvdHRvbSgpOworICAgIGNhc2UgTGVm
dFRvUmlnaHRXcml0aW5nTW9kZTogcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQoKSArIHJlbmRl
cmVyLnBhZGRpbmdMZWZ0KCk7CisgICAgY2FzZSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlOiByZXR1
cm4gcmVuZGVyZXIuYm9yZGVyUmlnaHQoKSArIHJlbmRlcmVyLnBhZGRpbmdSaWdodCgpOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiByZW5kZXJlci5ib3Jk
ZXJBbmRQYWRkaW5nQmVmb3JlKCk7Cit9CisKK0xheW91dFVuaXQgU2hhcGVPdXRzaWRlSW5mbzo6
bG9naWNhbFRvcE9mZnNldCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWZlcmVuY2VCb3gobV9y
ZW5kZXJlci5zdHlsZSgpLnNoYXBlT3V0c2lkZSgpKSkgeworICAgIGNhc2UgTWFyZ2luQm94OiBy
ZXR1cm4gLW1fcmVuZGVyZXIubWFyZ2luQmVmb3JlKCZtX3JlbmRlcmVyLmNvbnRhaW5pbmdCbG9j
aygpLT5zdHlsZSgpKTsKKyAgICBjYXNlIEJvcmRlckJveDogcmV0dXJuIExheW91dFVuaXQoKTsK
KyAgICBjYXNlIFBhZGRpbmdCb3g6IHJldHVybiBib3JkZXJCZWZvcmVJbldyaXRpbmdNb2RlKG1f
cmVuZGVyZXIsIG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkud3JpdGluZ01v
ZGUoKSk7CisgICAgY2FzZSBDb250ZW50Qm94OiByZXR1cm4gYm9yZGVyQW5kUGFkZGluZ0JlZm9y
ZUluV3JpdGluZ01vZGUobV9yZW5kZXJlciwgbV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+
c3R5bGUoKS53cml0aW5nTW9kZSgpKTsKKyAgICBjYXNlIEZpbGw6IGJyZWFrOworICAgIGNhc2Ug
U3Ryb2tlOiBicmVhazsKKyAgICBjYXNlIFZpZXdCb3g6IGJyZWFrOworICAgIGNhc2UgQm94TWlz
c2luZzogYnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBMYXlvdXRVbml0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGF5b3V0VW5pdCBib3Jk
ZXJTdGFydFdpdGhTdHlsZUZvcldyaXRpbmdNb2RlKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBpZiAoc3R5bGUuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkgeworICAgICAgICBpZiAoc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRlckxlZnQoKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgpOworICAgIH0KKyAgICBpZiAo
c3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICByZXR1cm4gcmVuZGVyZXIu
Ym9yZGVyVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHJlbmRlcmVyLmJvcmRlckJvdHRvbSgpOwor
fQorCitzdGF0aWMgaW5saW5lIExheW91dFVuaXQgYm9yZGVyQW5kUGFkZGluZ1N0YXJ0V2l0aFN0
eWxlRm9yV3JpdGluZ01vZGUoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlciwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQoreworICAgIGlmIChzdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSB7CisgICAgICAgIGlmIChzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyTGVmdCgpICsgcmVuZGVyZXIucGFkZGluZ0xlZnQo
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJSaWdodCgpICsgcmVu
ZGVyZXIucGFkZGluZ1JpZ2h0KCk7CisgICAgfQorICAgIGlmIChzdHlsZS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci5ib3JkZXJUb3AoKSArIHJlbmRl
cmVyLnBhZGRpbmdUb3AoKTsKKyAgICAKKyAgICByZXR1cm4gcmVuZGVyZXIuYm9yZGVyQm90dG9t
KCkgKyByZW5kZXJlci5wYWRkaW5nQm90dG9tKCk7Cit9CisKK0xheW91dFVuaXQgU2hhcGVPdXRz
aWRlSW5mbzo6bG9naWNhbExlZnRPZmZzZXQoKSBjb25zdAoreworICAgIGlmIChtX3JlbmRlcmVy
LmlzUmVuZGVyUmVnaW9uKCkpCisgICAgICAgIHJldHVybiBMYXlvdXRVbml0KCk7CisgICAgCisg
ICAgc3dpdGNoIChyZWZlcmVuY2VCb3gobV9yZW5kZXJlci5zdHlsZSgpLnNoYXBlT3V0c2lkZSgp
KSkgeworICAgIGNhc2UgTWFyZ2luQm94OiByZXR1cm4gLW1fcmVuZGVyZXIubWFyZ2luU3RhcnQo
Jm1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkpOworICAgIGNhc2UgQm9yZGVy
Qm94OiByZXR1cm4gTGF5b3V0VW5pdCgpOworICAgIGNhc2UgUGFkZGluZ0JveDogcmV0dXJuIGJv
cmRlclN0YXJ0V2l0aFN0eWxlRm9yV3JpdGluZ01vZGUobV9yZW5kZXJlciwgbV9yZW5kZXJlci5j
b250YWluaW5nQmxvY2soKS0+c3R5bGUoKSk7CisgICAgY2FzZSBDb250ZW50Qm94OiByZXR1cm4g
Ym9yZGVyQW5kUGFkZGluZ1N0YXJ0V2l0aFN0eWxlRm9yV3JpdGluZ01vZGUobV9yZW5kZXJlciwg
bV9yZW5kZXJlci5jb250YWluaW5nQmxvY2soKS0+c3R5bGUoKSk7CisgICAgY2FzZSBGaWxsOiBi
cmVhazsKKyAgICBjYXNlIFN0cm9rZTogYnJlYWs7CisgICAgY2FzZSBWaWV3Qm94OiBicmVhazsK
KyAgICBjYXNlIEJveE1pc3Npbmc6IGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gTGF5b3V0VW5pdCgpOworfQorCiBib29sIFNoYXBlT3V0
c2lkZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gmIGJveCkKIHsKICAgICBTaGFw
ZVZhbHVlKiBzaGFwZVZhbHVlID0gYm94LnN0eWxlKCkuc2hhcGVPdXRzaWRlKCk7CkBAIC01OSw2
ICszMDUsMjEgQEAgYm9vbCBTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3QgUmVu
ZGVyQm94JiBib3gpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitTZWdtZW50TGlzdCBTaGFwZU91
dHNpZGVJbmZvOjpjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5
b3V0VW5pdCBsaW5lSGVpZ2h0KSBjb25zdAoreworICAgIEFTU0VSVChsaW5lSGVpZ2h0ID49IDAp
OworICAgIFNlZ21lbnRMaXN0IHNlZ21lbnRzOworCisgICAgY29tcHV0ZWRTaGFwZSgpLmdldEV4
Y2x1ZGVkSW50ZXJ2YWxzKChsaW5lVG9wIC0gbG9naWNhbFRvcE9mZnNldCgpKSwgc3RkOjptaW4o
bGluZUhlaWdodCwgc2hhcGVMb2dpY2FsQm90dG9tKCkgLSBsaW5lVG9wKSwgc2VnbWVudHMpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzZWdtZW50cy5zaXplKCk7IGkrKykgeworICAg
ICAgICBzZWdtZW50c1tpXS5sb2dpY2FsTGVmdCArPSBsb2dpY2FsTGVmdE9mZnNldCgpOworICAg
ICAgICBzZWdtZW50c1tpXS5sb2dpY2FsUmlnaHQgKz0gbG9naWNhbExlZnRPZmZzZXQoKTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIHNlZ21lbnRzOworfQorCiB2b2lkIFNoYXBlT3V0c2lkZUlu
Zm86OnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBjb250YWluaW5nQmxvY2ssIGNvbnN0IEZsb2F0aW5nT2JqZWN0JiBmbG9hdGluZ09iamVj
dCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpCiB7CiAgICAgTGF5
b3V0VW5pdCBib3JkZXJCb3hUb3AgPSBjb250YWluaW5nQmxvY2subG9naWNhbFRvcEZvckZsb2F0
KCZmbG9hdGluZ09iamVjdCkgKyBjb250YWluaW5nQmxvY2subWFyZ2luQmVmb3JlRm9yQ2hpbGQo
bV9yZW5kZXJlcik7CkBAIC03MSw3ICszMzIsNyBAQCB2b2lkIFNoYXBlT3V0c2lkZUluZm86OnVw
ZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9ja0xpbmUoY29uc3QgUmVuZGVyQmxvY2tGbG93Jgog
CiAgICAgICAgIExheW91dFVuaXQgZmxvYXRNYXJnaW5Cb3hXaWR0aCA9IGNvbnRhaW5pbmdCbG9j
ay5sb2dpY2FsV2lkdGhGb3JGbG9hdCgmZmxvYXRpbmdPYmplY3QpOwogCi0gICAgICAgIGlmIChs
aW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpKSB7CisgICAgICAgIGlmIChjb21wdXRlZFNoYXBlKCku
bGluZU92ZXJsYXBzU2hhcGVNYXJnaW5Cb3VuZHMobV9yZWZlcmVuY2VCb3hMaW5lVG9wLCBtX2xp
bmVIZWlnaHQpKSB7CiAgICAgICAgICAgICBTZWdtZW50TGlzdCBzZWdtZW50cyA9IGNvbXB1dGVT
ZWdtZW50c0ZvckxpbmUoYm9yZGVyQm94TGluZVRvcCwgbGluZUhlaWdodCk7CiAgICAgICAgICAg
ICBpZiAoc2VnbWVudHMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdE1hcmdpbiA9IGNvbnRhaW5pbmdCbG9jay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IGNvbnRhaW5pbmdCbG9jay5tYXJnaW5TdGFydEZvckNoaWxkKG1fcmVuZGVyZXIp
IDogY29udGFpbmluZ0Jsb2NrLm1hcmdpbkVuZEZvckNoaWxkKG1fcmVuZGVyZXIpOwpAQCAtOTUs
MTcgKzM1Niw2IEBAIHZvaWQgU2hhcGVPdXRzaWRlSW5mbzo6dXBkYXRlRGVsdGFzRm9yQ29udGFp
bmluZ0Jsb2NrTGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmCiAgICAgfQogfQogCi1TaGFwZVZh
bHVlKiBTaGFwZU91dHNpZGVJbmZvOjpzaGFwZVZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9yZW5kZXJlci5zdHlsZSgpLnNoYXBlT3V0c2lkZSgpOwotfQotCi1jb25zdCBSZW5kZXJTdHls
ZSYgU2hhcGVPdXRzaWRlSW5mbzo6c3R5bGVGb3JXcml0aW5nTW9kZSgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKG1fcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCkpOwotICAgIHJldHVybiBtX3JlbmRl
cmVyLmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpOwotfQotCiB9CiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaAppbmRl
eCA0ODgxZTA2YWIwZWFmYWJhNzE2MTM2OTE2ZGNmYTJjZWZiNzViYTE5Li5kZDczMjFlZTAzMDdi
ZTI5OGVkYjk3YzQzZmYzNTk1ZDI5Y2YyNDk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaApAQCAtMzIsOCArMzIsMTMgQEAKIAog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiTGF5b3V0U2l6ZS5oIgotI2luY2x1ZGUgIlNoYXBlSW5mby5oIgorI2luY2x1ZGUgIkxheW91
dFVuaXQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNoYXBlLmgiCisj
aW5jbHVkZSAiU2hhcGVWYWx1ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00MSwxMCArNDYsMTEgQEAgY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogY2xh
c3MgUmVuZGVyQm94OwogY2xhc3MgRmxvYXRpbmdPYmplY3Q7CiAKLWNsYXNzIFNoYXBlT3V0c2lk
ZUluZm8gZmluYWwgOiBwdWJsaWMgU2hhcGVJbmZvPFJlbmRlckJveD4sIHB1YmxpYyBNYXBwZWRJ
bmZvPFJlbmRlckJveCwgU2hhcGVPdXRzaWRlSW5mbz4geworY2xhc3MgU2hhcGVPdXRzaWRlSW5m
byBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgU2hh
cGVPdXRzaWRlSW5mbyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKQotICAgICAgICA6IFNoYXBl
SW5mbzxSZW5kZXJCb3g+KHJlbmRlcmVyKQorICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIp
CiAgICAgICAgICwgbV9saW5lT3ZlcmxhcHNTaGFwZShmYWxzZSkKICAgICB7CiAgICAgfQpAQCAt
NTcsMzEgKzYzLDU4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlRGVsdGFzRm9yQ29udGFp
bmluZ0Jsb2NrTGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBGbG9hdGluZ09iamVj
dCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KTsKIAotICAgIHZp
cnR1YWwgYm9vbCBsaW5lT3ZlcmxhcHNTaGFwZUJvdW5kcygpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLmxpbmVPdmVybGFwc1NoYXBlTWFyZ2lu
Qm91bmRzKG1fcmVmZXJlbmNlQm94TGluZVRvcCwgbV9saW5lSGVpZ2h0KTsKLSAgICB9CisgICAg
dm9pZCBzZXRSZWZlcmVuY2VCb3hMb2dpY2FsU2l6ZShMYXlvdXRTaXplKTsKKworICAgIExheW91
dFVuaXQgc2hhcGVMb2dpY2FsVG9wKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLnNo
YXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkueSgpICsgbG9naWNhbFRvcE9mZnNldCgpOyB9
CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2ljYWxCb3R0b20oKSBjb25zdCB7IHJldHVybiBjb21w
dXRlZFNoYXBlKCkuc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKS5tYXhZKCkgKyBsb2dp
Y2FsVG9wT2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IHNoYXBlTG9naWNhbExlZnQoKSBjb25z
dCB7IHJldHVybiBjb21wdXRlZFNoYXBlKCkuc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3go
KS54KCkgKyBsb2dpY2FsTGVmdE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBzaGFwZUxvZ2lj
YWxSaWdodCgpIGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS5zaGFwZU1hcmdpbkxvZ2lj
YWxCb3VuZGluZ0JveCgpLm1heFgoKSArIGxvZ2ljYWxMZWZ0T2Zmc2V0KCk7IH0KKyAgICBMYXlv
dXRVbml0IHNoYXBlTG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgp
LnNoYXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkud2lkdGgoKTsgfQorICAgIExheW91dFVu
aXQgc2hhcGVMb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZWRTaGFwZSgpLnNo
YXBlTWFyZ2luTG9naWNhbEJvdW5kaW5nQm94KCkuaGVpZ2h0KCk7IH0KKworICAgIExheW91dFVu
aXQgbG9naWNhbExpbmVUb3AoKSBjb25zdCB7IHJldHVybiBtX3JlZmVyZW5jZUJveExpbmVUb3Ag
KyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMaW5lQm90dG9t
KCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVuY2VCb3hMaW5lVG9wICsgbV9saW5lSGVpZ2h0ICsg
bG9naWNhbFRvcE9mZnNldCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGluZUJvdHRvbShM
YXlvdXRVbml0IGxpbmVIZWlnaHQpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlQm94TGluZVRv
cCArIGxpbmVIZWlnaHQgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7IH0KKworICAgIHZvaWQgbWFya1No
YXBlQXNEaXJ0eSgpIHsgbV9zaGFwZSA9IG51bGxwdHI7IH0KKyAgICBib29sIGlzU2hhcGVEaXJ0
eSgpIHsgcmV0dXJuICFtX3NoYXBlOyB9CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTU0Jv
eFR5cGUgcmVmZXJlbmNlQm94KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBMYXlvdXRSZWN0IGNvbXB1
dGVkU2hhcGVQaHlzaWNhbEJvdW5kaW5nQm94KCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBzaGFw
ZVRvUmVuZGVyZXJQb2ludChGbG9hdFBvaW50KSBjb25zdDsKKyAgICBGbG9hdFNpemUgc2hhcGVU
b1JlbmRlcmVyU2l6ZShGbG9hdFNpemUpIGNvbnN0OworCisgICAgY29uc3QgU2hhcGUmIGNvbXB1
dGVkU2hhcGUoKSBjb25zdDsKKworICAgIHN0YXRpYyBTaGFwZU91dHNpZGVJbmZvJiBlbnN1cmVJ
bmZvKGNvbnN0IFJlbmRlckJveCYga2V5KQogICAgIHsKLSAgICAgICAgaWYgKHNoYXBlVmFsdWUo
KS0+Y3NzQm94KCkgPT0gQm94TWlzc2luZykgewotICAgICAgICAgICAgaWYgKHNoYXBlVmFsdWUo
KS0+dHlwZSgpID09IFNoYXBlVmFsdWU6OkltYWdlKQotICAgICAgICAgICAgICAgIHJldHVybiBD
b250ZW50Qm94OwotICAgICAgICAgICAgcmV0dXJuIE1hcmdpbkJveDsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gc2hhcGVWYWx1ZSgpLT5jc3NCb3goKTsKKyAgICAgICAgSW5mb01hcCYgaW5m
b01hcCA9IFNoYXBlT3V0c2lkZUluZm86OmluZm9NYXAoKTsKKyAgICAgICAgaWYgKFNoYXBlT3V0
c2lkZUluZm8qIGluZm8gPSBpbmZvTWFwLmdldCgma2V5KSkKKyAgICAgICAgICAgIHJldHVybiAq
aW5mbzsKKyAgICAgICAgYXV0byByZXN1bHQgPSBpbmZvTWFwLmFkZCgma2V5LCBzdGQ6Om1ha2Vf
dW5pcXVlPFNoYXBlT3V0c2lkZUluZm8+KGtleSkpOworICAgICAgICByZXR1cm4gKnJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAgICAgfQorICAgIHN0YXRpYyB2b2lkIHJlbW92ZUluZm8oY29uc3Qg
UmVuZGVyQm94JiBrZXkpIHsgaW5mb01hcCgpLnJlbW92ZSgma2V5KTsgfQorICAgIHN0YXRpYyBT
aGFwZU91dHNpZGVJbmZvKiBpbmZvKGNvbnN0IFJlbmRlckJveCYga2V5KSB7IHJldHVybiBpbmZv
TWFwKCkuZ2V0KCZrZXkpOyB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNv
bXB1dGVkU2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBj
b21wdXRlZFNoYXBlKCkuc2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKTsgfQotICAgIHZp
cnR1YWwgU2hhcGVWYWx1ZSogc2hhcGVWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBnZXRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVI
ZWlnaHQsIFNlZ21lbnRMaXN0JiBzZWdtZW50cykgY29uc3Qgb3ZlcnJpZGUKKyAgICBTZWdtZW50
TGlzdCBjb21wdXRlU2VnbWVudHNGb3JMaW5lKExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lSGVpZ2h0KSBjb25zdDsKKworICAgIExheW91dFVuaXQgbG9naWNhbFRvcE9mZnNldCgp
IGNvbnN0OworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQoKSBjb25zdDsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCb3gqLCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGVP
dXRzaWRlSW5mbz4+IEluZm9NYXA7CisgICAgc3RhdGljIEluZm9NYXAmIGluZm9NYXAoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkU2hhcGUoKS5nZXRFeGNsdWRlZEludGVydmFscyhs
aW5lVG9wLCBsaW5lSGVpZ2h0LCBzZWdtZW50cyk7CisgICAgICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChJbmZvTWFwLCBzdGF0aWNJbmZvTWFwLCAoKSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNJbmZvTWFwOwogICAgIH0KIAotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlRm9yV3JpdGluZ01vZGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICBjb25zdCBSZW5kZXJC
b3gmIG1fcmVuZGVyZXI7CisKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gbV9z
aGFwZTsKKyAgICBMYXlvdXRTaXplIG1fcmVmZXJlbmNlQm94TG9naWNhbFNpemU7CisgICAgTGF5
b3V0VW5pdCBtX3JlZmVyZW5jZUJveExpbmVUb3A7CisgICAgTGF5b3V0VW5pdCBtX2xpbmVIZWln
aHQ7CiAKICAgICBMYXlvdXRVbml0IG1fbGVmdE1hcmdpbkJveERlbHRhOwogICAgIExheW91dFVu
aXQgbV9yaWdodE1hcmdpbkJveERlbHRhOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>