<?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>141017</bug_id>
          
          <creation_ts>2015-01-28 16:29:37 -0800</creation_ts>
          <short_desc>Add a trivial code generator for the DFA</short_desc>
          <delta_ts>2015-03-21 12:31:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>141757</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1065062</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-28 16:29:37 -0800</bug_when>
    <thetext>Add a trivial code generator for the DFA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065065</commentid>
    <comment_count>1</comment_count>
      <attachid>245577</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-28 16:30:54 -0800</bug_when>
    <thetext>Created attachment 245577
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065081</commentid>
    <comment_count>2</comment_count>
      <attachid>245584</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-28 16:53:21 -0800</bug_when>
    <thetext>Created attachment 245584
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065691</commentid>
    <comment_count>3</comment_count>
      <attachid>245584</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-30 15:59:40 -0800</bug_when>
    <thetext>Comment on attachment 245584
Patch

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

I don&apos;t feel confident reviewing, someone else should take a look but I made a few (minor) comments.

&gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:141
&gt; +        PotentialPageLoadDescriptor potentialPageLoadDescriptor;

PotentialPageLoadDescriptor potentialPageLoadDescriptor{urlCString.data(), urlCString.length()};

&gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:145
&gt; +        HashSet&lt;unsigned, DefaultHash&lt;unsigned&gt;::Hash, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned&gt;&gt; triggeredActions;

&quot;TriggeredActionSet triggeredActions;&quot; ?

&gt; Source/WebCore/contentextensions/DFA.h:50
&gt; +    const DFANode&amp; nodeAt(unsigned i) const

nit: Could be on a single line.

&gt; Source/WebCore/contentextensions/DFA.h:59
&gt; +

extra line?

&gt; Source/WebCore/contentextensions/DFACompiler.cpp:48
&gt; +    DFACodeGenerator(const DFA&amp;);

explicit?

&gt; Source/WebCore/contentextensions/DFACompiler.cpp:55
&gt; +    void getNextCharacter(Assembler::JumpList&amp; failureCases, LocalRegister&amp; output);

&quot;get&quot; prefix?

&gt; Source/WebCore/contentextensions/DFACompiler.cpp:64
&gt; +    JSC::MacroAssembler::RegisterID m_urlBufferOffsetRegister = InvalidGPRReg;

Assembler::RegisterID ?

&gt; Source/WebCore/contentextensions/DFACompiler.cpp:140
&gt; +        callAddActionFunction(static_cast&lt;unsigned&gt;(actionId));

Why is this safe?

&gt; Source/WebCore/contentextensions/DFACompiler.cpp:145
&gt; +    for (const auto transition : dfaNode.transitions) {

auto&amp; transition ? It probably doesn&apos;t matter for this particular underlying type if we&apos;re copying it but I still like to use auto&amp; in range loops. I would omit the const but this may be a matter of taste.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065884</commentid>
    <comment_count>4</comment_count>
      <attachid>245584</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2015-01-31 16:32:30 -0800</bug_when>
    <thetext>Comment on attachment 245584
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:129
&gt; +    reinterpret_cast&lt;TriggeredActionSet*&gt;(data)-&gt;add(actionId);

Could we avoid the reinterpret cast by changing the signature of this function &amp; the AddActionFunction typedef?

&gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:140
&gt; +        CString urlCString = urlString.utf8();

Is converting to Cstring efficient here? – may be good to add a fixme &amp; bugzilla number to remember to revisit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065905</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-31 18:29:07 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:129
&gt; &gt; +    reinterpret_cast&lt;TriggeredActionSet*&gt;(data)-&gt;add(actionId);
&gt; 
&gt; Could we avoid the reinterpret cast by changing the signature of this
&gt; function &amp; the AddActionFunction typedef?

Yes, I should do that :)

&gt; &gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:140
&gt; &gt; +        CString urlCString = urlString.utf8();
&gt; 
&gt; Is converting to Cstring efficient here? – may be good to add a fixme &amp;
&gt; bugzilla number to remember to revisit.

I don&apos;t expect this to be a big problem. The valid URLS are already ASCII so there is no encoding cost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069738</commentid>
    <comment_count>6</comment_count>
      <attachid>245584</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-02-16 20:16:47 -0800</bug_when>
    <thetext>Comment on attachment 245584
Patch

r+ to move this forward, though please consider the feedback given by Gavin &amp; Chris. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070072</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-18 00:57:53 -0800</bug_when>
    <thetext>Committed r180260: &lt;http://trac.webkit.org/changeset/180260&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070077</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-02-18 01:06:27 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Committed r180260: &lt;http://trac.webkit.org/changeset/180260&gt;

Seems this broke 32-bit builds?
https://build.webkit.org/builders/Apple%20Yosemite%20Release%20%2832-bit%20Build%29/builds/685
https://build.webkit.org/builders/Apple%20Yosemite%20Release%20%2832-bit%20Build%29/builds/685/steps/compile-webkit/logs/errors

&gt; Source/WebCore/contentextensions/DFACompiler.cpp:55:69: error: unknown type name &apos;LocalRegister&apos;
&gt; Source/WebCore/contentextensions/DFACompiler.cpp:61:5: error: unknown type name &apos;RegisterAllocator&apos;
&gt; Source/WebCore/contentextensions/DFACompiler.cpp:62:5: error: unknown type name &apos;StackAllocator&apos;; did you mean &apos;JSC::BlockAllocator&apos;?
&gt; Source/WebCore/contentextensions/DFACompiler.cpp:77:7: error: no matching constructor for initialization of &apos;JSC::BlockAllocator&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070120</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-18 09:04:05 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 141757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070478</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-02-19 12:28:29 -0800</bug_when>
    <thetext>This works on ARM64 with the same prolog and epilog as the cssjit.  That code could be shared, but DFACodeGenerator would also need a m_prologueStackReferences.  I imagine it would work on ARMv7, too, but I haven&apos;t checked that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079089</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-21 12:31:08 -0700</bug_when>
    <thetext>We&apos;ll use an interpreter instead.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245577</attachid>
            <date>2015-01-28 16:30:54 -0800</date>
            <delta_ts>2015-01-28 16:53:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141017-20150128163059.patch</filename>
            <type>text/plain</type>
            <size>24316</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODc3MTA5MzVjZWU4YWY4
ZjM5OTZjNmZkMzk5OGE5Y2IyNWRkNTZjNS4uMDg2ZTgxZDcyYmU1ZDg4YWZiZWQxNTE1MWNmMDk4
NGVkYzRmYzQzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAxLTI4ICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSB0cml2
aWFsIGNvZGUgZ2VuZXJhdG9yIGZvciB0aGUgREZBCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBOb3RoaW5nIGZhbmN5IHlldCwgdGhpcyBpcyBqdXN0IGRv
aW5nIGEgbGl0ZXJhbCB0cmFuc2xhdGlvbiBmcm9tIHRoZSBERkEKKyAgICAgICAgdG8gbWFjaGlu
ZSBjb2RlLiBJdCBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQgYXQgdGhlIG1vbWVudC4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6Q29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnNldFJ1bGVMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjphZGRBY3Rpb25Ub0hhc2hTZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2hvdWxk
QmxvY2tVUkwpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25z
QmFja2VuZC5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjpuZXh0U3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6YWN0aW9ucyk6IERlbGV0
ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkE6Om5vZGVBdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
REZBQ29tcGlsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpjb21waWxlREZBKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFDb2RlR2VuZXJhdG9yOjpERkFDb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFDb2RlR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFDb2RlR2VuZXJhdG9yOjpsb3dlclN0YXRlTWFj
aGluZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQ29kZUdlbmVy
YXRvcjo6bG93ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFDb2RlR2VuZXJhdG9yOjpnZXROZXh0Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFDb2RlR2VuZXJhdG9yOjpjYWxsQWRkQWN0aW9uRnVuY3Rpb24p
OgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUNvbXBpbGVyLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oLgorCiAyMDE1LTAxLTI2ICBC
ZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ1NT
IFNlbGVjdG9yJ3MgdGFnIG5hbWUgbWF0Y2hpbmcgd2hlbiBtaXhpbmcgSFRNTCBhbmQgWE1MCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMTk3OGNhMThlNjNjOTQzMWMyOWJiMGE3MTllNjY2ZjUzMTk5OTI1My4uMmMwZGE3YTk3NDgz
YTc2NGEwMDhjOTJkMjQ1M2Q4YjQ5MGE5OTU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA0Myw2ICsxMDQzLDggQEAKIAkJ
MjZDMTVDRjcxODU3RTE1RTAwRjE1QzAzIC8qIFJlc291cmNlSGFuZGxlQ0ZVUkxDb25uZWN0aW9u
RGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE1Q0Y1MTg1N0UxNUQwMEYxNUMwMyAvKiBSZXNvdXJjZUhh
bmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmggKi87IH07CiAJ
CTI2QzE3QTNFMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkMxN0EzQzE0OTFEMkQ0MDBEMTJC
QTIgLyogRmlsZVN5c3RlbUlPUy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTI2QzE3QTNGMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZDMTdB
M0QxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gKi87IH07CisJCTI2QzU2MEQz
MUE3ODNFQkIwMDg2ODJFNCAvKiBERkFDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkM1NjBEMTFBNzgzRUJCMDA4NjgyRTQgLyogREZB
Q29tcGlsZXIuY3BwICovOyB9OworCQkyNkM1NjBENDFBNzgzRUJCMDA4NjgyRTQgLyogREZBQ29t
cGlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2
QzU2MEQyMUE3ODNFQkIwMDg2ODJFNCAvKiBERkFDb21waWxlci5oICovOyB9OwogCQkyNkU5OEEx
MDEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZFOThBMEYxMzBBOUZDQTAwOEVC
N0IyIC8qIFRleHRDb2RlY0FTQ0lJRmFzdFBhdGguaCAqLzsgfTsKIAkJMjZGMEM4OTcxQTJFNzI0
QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkYwQzg5NTFBMkU3MjRCMDAyNzk0Rjgg
LyogQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJMjZGMEM4OTgxQTJFNzI0
QjAwMjc5NEY4IC8qIENvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZGMEM4OTYxQTJFNzI0QjAwMjc5NEY4IC8q
IENvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC04MDczLDYgKzgwNzUsOCBAQAogCQkyNkMxNUNGNTE4NTdF
MTVEMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25EZWxlZ2F0ZVdpdGhP
cGVyYXRpb25RdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJj
ZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9wZXJhdGlvblF1ZXVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2QzE3QTNDMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxl
U3lzdGVtSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVTeXN0ZW1J
T1MuaDsgcGF0aCA9IGlvcy9GaWxlU3lzdGVtSU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI2QzE3QTNEMTQ5MUQyRDQwMEQxMkJBMiAvKiBGaWxlU3lzdGVtSU9TLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRmlsZVN5c3RlbUlPUy5tbTsgcGF0
aCA9IGlvcy9GaWxlU3lzdGVtSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
NkM1NjBEMTFBNzgzRUJCMDA4NjgyRTQgLyogREZBQ29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZBQ29tcGlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyNkM1NjBEMjFBNzgzRUJCMDA4NjgyRTQgLyogREZBQ29tcGlsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZBQ29tcGlsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZFOThBMEYxMzBBOUZDQTAwOEVCN0IyIC8qIFRleHRDb2Rl
Y0FTQ0lJRmFzdFBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENv
ZGVjQVNDSUlGYXN0UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNkYwQzg5
NTFBMkU3MjRCMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2RjBDODk2MUEyRTcyNEIwMDI3OTRG
OCAvKiBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNTM4OSw2ICsxNTM5Myw4IEBACiAJCQkJMjZGMEM4OTYxQTJFNzI0QjAwMjc5
NEY4IC8qIENvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5oICovLAogCQkJCTI2NzcyNUY2MUE1QjNB
RDkwMDNDMjRERCAvKiBERkEuY3BwICovLAogCQkJCTI2NzcyNUY3MUE1QjNBRDkwMDNDMjRERCAv
KiBERkEuaCAqLywKKwkJCQkyNkM1NjBEMTFBNzgzRUJCMDA4NjgyRTQgLyogREZBQ29tcGlsZXIu
Y3BwICovLAorCQkJCTI2QzU2MEQyMUE3ODNFQkIwMDg2ODJFNCAvKiBERkFDb21waWxlci5oICov
LAogCQkJCTI2NzcyNUY5MUE1QjNBRDkwMDNDMjRERCAvKiBERkFOb2RlLmggKi8sCiAJCQkJMjY5
Mzk3MjUxQTRBNUZCRDAwRTgzNDlEIC8qIE5GQS5jcHAgKi8sCiAJCQkJMjY5Mzk3MjMxQTRBNUI2
NDAwRTgzNDlEIC8qIE5GQS5oICovLApAQCAtMjYzMDAsNiArMjYzMDYsNyBAQAogCQkJCUIyMjI3
OUMyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3OUM1MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlDODBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVC
bGVuZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTI2QzU2MEQ0MUE3ODNFQkIwMDg2ODJF
NCAvKiBERkFDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5Q0IwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MjIyNzlDRTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUQxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk1NTIsNiArMjk1NTksNyBAQAog
CQkJCUM1QTFFQTdDMTUyQkNGMDQwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkQwMEQ3QTQxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNh
bXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEzMjdENjExMUEzM0EyQjAwNEY5RDY1IC8q
IFNpbmtEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkM1NjBEMzFBNzgzRUJCMDA4
NjgyRTQgLyogREZBQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFOTExQ0MwRUY4
NkQ0NzAwOUQwQ0FGIC8qIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDE1MEY5RjIxMkI2RTBFNzAwMDhDODYwIC8qIFNsaWRlclRodW1iRWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQzA5MzlFQTFBMTNFMTI5MDBCNzg4RTUgLyogQ2FjaGVkU1ZH
Rm9udC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCmluZGV4IDFh
ZTVjOWU1OTI1OWY2ZGM2NDlmMDhjZDJiY2VhOTNiNTEzMzIxYzUuLjAyMThmYTgwMjk2MDFlZTQy
MTAwNjlkZTQ0Y2U2NTM2OTY0ZjFjYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcApAQCAt
MjksNiArMjksNyBAQAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKICNpbmNsdWRl
ICJDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oIgorI2luY2x1ZGUgIkRGQUNvbXBpbGVyLmgi
CiAjaW5jbHVkZSAiTkZBLmgiCiAjaW5jbHVkZSAiTkZBVG9ERkEuaCIKICNpbmNsdWRlICJVUkwu
aCIKQEAgLTQyLDYgKzQzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIENv
bnRlbnRFeHRlbnNpb25zIHsKIAorQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpDb250ZW50RXh0
ZW5zaW9uc0JhY2tlbmQoKQorICAgIDogbV92bShKU0M6OlZNOjpzaGFyZWRJbnN0YW5jZSgpKQor
eworfQorCiB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2V0UnVsZUxpc3QoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+JiBy
dWxlTGlzdCkKIHsKICAgICBBU1NFUlQoIWlkZW50aWZpZXIuaXNFbXB0eSgpKTsKQEAgLTg1LDE5
ICs5MSwyNCBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2V0UnVsZUxpc3QoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBWZWN0bwogICAgIGRvdWJsZSBkZmFCdWlsZFRp
bWVTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogI2VuZGlmCiAKLSAgICBD
b21waWxlZENvbnRlbnRFeHRlbnNpb24gY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0geyBORkFU
b0RGQTo6Y29udmVydChuZmEpLCBydWxlTGlzdCB9OworICAgIGNvbnN0IERGQSBkZmEgPSBORkFU
b0RGQTo6Y29udmVydChuZmEpOwogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNF
X1JFUE9SVElORwogICAgIGRvdWJsZSBkZmFCdWlsZFRpbWVFbmQgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKICAgICBXVEZMb2dBbHdheXMoIiAgICBUaW1lIHNwZW50IGJ1aWxkaW5n
IHRoZSBERkE6ICVmXG4iLCAoZGZhQnVpbGRUaW1lRW5kIC0gZGZhQnVpbGRUaW1lU3RhcnQpKTsK
ICNlbmRpZgogCi0gICAgLy8gRklYTUU6IG5ldmVyIGFkZCBhIERGQSB0aGF0IG9ubHkgbWF0Y2hl
cyB0aGUgZW1wdHkgc2V0LgorICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBpbGVk
RGZhOworICAgIHsKKyAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0uZ2V0KCkp
OworICAgICAgICBjb21waWxlZERmYSA9IGNvbXBpbGVERkEoZGZhLCBtX3ZtLmdldCgpKTsKKyAg
ICB9CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfU1RBVEVfTUFDSElORV9ERUJVR0dJTkcKLSAg
ICBjb21waWxlZENvbnRlbnRFeHRlbnNpb24uZGZhLmRlYnVnUHJpbnREb3QoKTsKKyAgICBkZmEu
ZGVidWdQcmludERvdCgpOwogI2VuZGlmCiAKKyAgICBDb21waWxlZENvbnRlbnRFeHRlbnNpb24g
Y29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0geyBjb21waWxlZERmYSwgcnVsZUxpc3QgfTsKICAg
ICBtX3J1bGVMaXN0cy5zZXQoaWRlbnRpZmllciwgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKTsK
IH0KIApAQCAtMTExLDYgKzEyMiwxMyBAQCB2b2lkIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6
cmVtb3ZlQWxsUnVsZUxpc3RzKCkKICAgICBtX3J1bGVMaXN0cy5jbGVhcigpOwogfQogCit0eXBl
ZGVmIEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IFRyaWdnZXJlZEFjdGlvblNl
dDsKKworc3RhdGljIHZvaWQgYWRkQWN0aW9uVG9IYXNoU2V0KHZvaWQqIGRhdGEsIHVuc2lnbmVk
IGFjdGlvbklkKQoreworICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VHJpZ2dlcmVkQWN0aW9uU2V0Kj4o
ZGF0YSktPmFkZChhY3Rpb25JZCk7Cit9CisKIGJvb2wgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5k
OjpzaG91bGRCbG9ja1VSTChjb25zdCBVUkwmIHVybCkKIHsKICAgICBjb25zdCBTdHJpbmcmIHVy
bFN0cmluZyA9IHVybC5zdHJpbmcoKTsKQEAgLTExOCwyMSArMTM2LDE3IEBAIGJvb2wgQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kOjpzaG91bGRCbG9ja1VSTChjb25zdCBVUkwmIHVybCkKIAogICAg
IGZvciAoYXV0byYgcnVsZUxpc3RTbG90IDogbV9ydWxlTGlzdHMpIHsKICAgICAgICAgQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBydWxlTGlzdFNs
b3QudmFsdWU7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXRlID0gY29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmRmYS5yb290KCk7CiAKLSAgICAgICAgSGFzaFNldDx1aW50NjRfdCwgRGVmYXVsdEhhc2g8
dWludDY0X3Q+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2
NF90Pj4gdHJpZ2dlcmVkQWN0aW9uczsKKyAgICAgICAgQ1N0cmluZyB1cmxDU3RyaW5nID0gdXJs
U3RyaW5nLnV0ZjgoKTsKKyAgICAgICAgUG90ZW50aWFsUGFnZUxvYWREZXNjcmlwdG9yIHBvdGVu
dGlhbFBhZ2VMb2FkRGVzY3JpcHRvcjsKKyAgICAgICAgcG90ZW50aWFsUGFnZUxvYWREZXNjcmlw
dG9yLnVybEJ1ZmZlciA9IHVybENTdHJpbmcuZGF0YSgpOworICAgICAgICBwb3RlbnRpYWxQYWdl
TG9hZERlc2NyaXB0b3IudXJsQnVmZmVyU2l6ZSA9IHVybENTdHJpbmcubGVuZ3RoKCk7CiAKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVybFN0cmluZy5sZW5ndGgoKTsgKytpKSB7
Ci0gICAgICAgICAgICBjaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PGNoYXI+KHVybFN0cmlu
Z1tpXSk7Ci0gICAgICAgICAgICBib29sIG9rOwotICAgICAgICAgICAgc3RhdGUgPSBjb21waWxl
ZENvbnRlbnRFeHRlbnNpb24uZGZhLm5leHRTdGF0ZShzdGF0ZSwgY2hhcmFjdGVyLCBvayk7Ci0g
ICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBIYXNo
U2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiB0cmlnZ2VyZWRBY3Rpb25zOworCisgICAg
ICAgIHZvaWQqIGNvbXBpbGVkTWF0Y2hlciA9IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jb21w
aWxlZE1hdGNoZXIuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Q29tcGlsZWRSdWxlTWF0Y2hlcj4oY29tcGlsZWRNYXRjaGVyKSgmcG90ZW50aWFs
UGFnZUxvYWREZXNjcmlwdG9yLCBhZGRBY3Rpb25Ub0hhc2hTZXQsICZ0cmlnZ2VyZWRBY3Rpb25z
KTsKIAotICAgICAgICAgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgYWN0aW9ucyA9IGNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbi5kZmEuYWN0aW9ucyhzdGF0ZSk7Ci0gICAgICAgICAgICBpZiAo
IWFjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRyaWdnZXJlZEFjdGlvbnMuYWRk
KGFjdGlvbnMuYmVnaW4oKSwgYWN0aW9ucy5lbmQoKSk7Ci0gICAgICAgIH0KICAgICAgICAgaWYg
KCF0cmlnZ2VyZWRBY3Rpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgVmVjdG9yPHVpbnQ2
NF90PiBzb3J0ZWRBY3Rpb25zOwogICAgICAgICAgICAgY29weVRvVmVjdG9yKHRyaWdnZXJlZEFj
dGlvbnMsIHNvcnRlZEFjdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaAppbmRleCA0YzRhYjAw
N2Q0MzA5OGViNTg2ZGY4ZDBmYzdiOTdkOTAzYTM2YzhjLi40MzE1N2QxODcyOGFhNzM4NGEwMDVl
ODY4YzZlZTZlYTU2MTk4YzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaApAQCAtMzAsNiArMzAs
OCBAQAogCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUuaCIKICNpbmNsdWRlICJERkEu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WTS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgpAQCAtNDcsNiArNDksOCBAQCBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewog
Ly8gMikgSXQgcHJvdmlkZXMgQVBJcyBmb3IgdGhlIFdlYkNvcmUgaW50ZXJmYWNlcyB0byB1c2Ug
dGhvc2UgcnVsZXMgZWZmaWNpZW50bHkuCiBjbGFzcyBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQg
ewogcHVibGljOgorICAgIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZCgpOworCiAgICAgLy8gLSBS
dWxlIG1hbmFnZW1lbnQgaW50ZXJmYWNlLiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHVwcGVyIGxheWVy
LgogCiAgICAgLy8gU2V0IGEgbGlzdCBvZiBydWxlcyBmb3IgYSBnaXZlbiBuYW1lLiBJZiB0aGVy
ZSB3ZXJlIGV4aXN0aW5nIHJ1bGVzIGZvciB0aGUgbmFtZSwgdGhleSBhcmUgb3ZlcnJpZGVuLgpA
QCAtNjAsMTAgKzY0LDExIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uIHsKLSAgICAgICAgREZBIGRmYTsKKyAgICAgICAgSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY29tcGlsZWRNYXRjaGVyOwogICAgICAgICBWZWN0b3I8Q29udGVu
dEV4dGVuc2lvblJ1bGU+IHJ1bGVMaXN0OwogICAgIH07CiAKKyAgICBSZWY8SlNDOjpWTT4gbV92
bTsKICAgICBIYXNoTWFwPFN0cmluZywgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBtX3J1bGVM
aXN0czsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0RGQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuY3BwCmluZGV4
IDRmNDNlNDQzMTQwNmQxODA4M2IwZDY1YzdmODg1ZjM5MmNkYTZkY2QuLjIzYzYyMjFjYzVkZDU5
OTZjNTMyMDFkNjJhYjRlNzc1ZWRiNGJjN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0RGQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBLmNwcApAQCAtNTksMzEgKzU5LDYgQEAgREZBJiBERkE6Om9wZXJhdG9yPShjb25z
dCBERkEmIGRmYSkKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXVuc2lnbmVkIERGQTo6bmV4dFN0
YXRlKHVuc2lnbmVkIGN1cnJlbnRTdGF0ZSwgY2hhciBjaGFyYWN0ZXIsIGJvb2wmIG9rKSBjb25z
dAotewotICAgIEFTU0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVzLnNpemUoKSk7Ci0KLSAgICBj
b25zdCBERkFOb2RlJiBub2RlID0gbV9ub2Rlc1tjdXJyZW50U3RhdGVdOwotICAgIGF1dG8gbmV4
dE5vZGUgPSBub2RlLnRyYW5zaXRpb25zLmZpbmQoY2hhcmFjdGVyKTsKLSAgICBpZiAobmV4dE5v
ZGUgIT0gbm9kZS50cmFuc2l0aW9ucy5lbmQoKSkgewotICAgICAgICBvayA9IHRydWU7Ci0gICAg
ICAgIHJldHVybiBuZXh0Tm9kZS0+dmFsdWU7Ci0gICAgfQotICAgIGlmIChub2RlLmhhc0ZhbGxi
YWNrVHJhbnNpdGlvbikgewotICAgICAgICBvayA9IHRydWU7Ci0gICAgICAgIHJldHVybiBub2Rl
LmZhbGxiYWNrVHJhbnNpdGlvbjsKLSAgICB9Ci0gICAgb2sgPSBmYWxzZTsKLSAgICByZXR1cm4g
MDsKLQotfQotCi1jb25zdCBWZWN0b3I8dWludDY0X3Q+JiBERkE6OmFjdGlvbnModW5zaWduZWQg
Y3VycmVudFN0YXRlKSBjb25zdAotewotICAgIEFTU0VSVChjdXJyZW50U3RhdGUgPCBtX25vZGVz
LnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fbm9kZXNbY3VycmVudFN0YXRlXS5hY3Rpb25zOwotfQot
CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiBzdGF0aWMg
dm9pZCBwcmludFJhbmdlKGJvb2wgZmlyc3RSYW5nZSwgY2hhciByYW5nZVN0YXJ0LCBjaGFyIHJh
bmdlRW5kKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBLmggYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEuaAppbmRleCBjYzgw
ZDg2NjI1YmUxZTU2ZmY5MWVjZWJmNGQzNGY2YzU3ODAzZWMzLi44OWY3NDcwYzNhM2UyMTNhMmY1
Njc1N2E2ZWY4MTg2ZDlkYTUzNTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkEuaApAQCAtNDYsMTUgKzQ2LDE3IEBAIHB1YmxpYzoKICAgICBERkEmIG9wZXJhdG9yPShjb25z
dCBERkEmKTsKIAogICAgIHVuc2lnbmVkIHJvb3QoKSBjb25zdCB7IHJldHVybiBtX3Jvb3Q7IH0K
LSAgICAvLyBJZiB0aGVyZSBpcyBhIHRyYW5zaXRpb24gdG8gYSB2YWxpZCBzdGF0ZSBvbiAiY2hh
cmFjdGVyIiwgcmV0dXJuIHRoYXQgc3RhdGUgYW5kIHNldCBvayB0byB0cnVlLgotICAgIC8vIE90
aGVyd2lzZSwgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kIG9rIGlzIGZhbHNlLgot
ICAgIHVuc2lnbmVkIG5leHRTdGF0ZSh1bnNpZ25lZCBjdXJyZW50U3RhdGUsIGNoYXIgY2hhcmFj
dGVyLCBib29sJiBvaykgY29uc3Q7Ci0gICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgYWN0aW9u
cyh1bnNpZ25lZCBjdXJyZW50U3RhdGUpIGNvbnN0OworICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQorICAgIGNvbnN0IERGQU5vZGUmIG5vZGVBdCh1
bnNpZ25lZCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbm9kZXNbaV07CisgICAg
fQogCiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCiAgICAg
dm9pZCBkZWJ1Z1ByaW50RG90KCkgY29uc3Q7CiAjZW5kaWYKIAorCiBwcml2YXRlOgogICAgIFZl
Y3RvcjxERkFOb2RlPiBtX25vZGVzOwogICAgIHVuc2lnbmVkIG1fcm9vdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUNvbXBpbGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUNvbXBpbGVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
YTg0NjY2OTZmYWNmMDg4MDdhMzBhZDBlYmM1MGNiZjg3MDhmOWFhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQ29tcGlsZXIuY3BwCkBAIC0w
LDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGQUNvbXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5j
bHVkZSAiREZBLmgiCisjaW5jbHVkZSAiREZBTm9kZS5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyQWxs
b2NhdG9yLmgiCisjaW5jbHVkZSAiU3RhY2tBbGxvY2F0b3IuaCIKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9HUFJJbmZvLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTGlua0J1ZmZlci5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01hY3JvQXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVk0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
Q29udGVudEV4dGVuc2lvbnMgeworCit0eXBlZGVmIEpTQzo6TWFjcm9Bc3NlbWJsZXIgQXNzZW1i
bGVyOworCitjbGFzcyBERkFDb2RlR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBERkFDb2RlR2Vu
ZXJhdG9yKGNvbnN0IERGQSYpOworICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBp
bGUoSlNDOjpWTSYpOworCitwcml2YXRlOgorICAgIHZvaWQgbG93ZXJTdGF0ZU1hY2hpbmUoKTsK
KyAgICB2b2lkIGxvd2VyTm9kZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IERGQU5vZGUmKTsKKworICAgIHZvaWQgZ2V0TmV4dENoYXJhY3RlcihBc3NlbWJsZXI6Okp1
bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIExvY2FsUmVnaXN0ZXImIG91dHB1dCk7CisgICAgdm9pZCBj
YWxsQWRkQWN0aW9uRnVuY3Rpb24odW5zaWduZWQgYXJndW1lbnQpOworCisgICAgY29uc3QgREZB
JiBtX2RmYTsKKworICAgIEFzc2VtYmxlciBtX2Fzc2VtYmxlcjsKKyAgICBSZWdpc3RlckFsbG9j
YXRvciBtX3JlZ2lzdGVyQWxsb2NhdG9yOworICAgIFN0YWNrQWxsb2NhdG9yIG1fc3RhY2tBbGxv
Y2F0b3I7CisKKyAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIG1fdXJsQnVmZmVy
T2Zmc2V0UmVnaXN0ZXIgPSBJbnZhbGlkR1BSUmVnOworICAgIFZlY3RvcjxBc3NlbWJsZXI6Okxh
YmVsPiBtX3N0YXRlRW50cnlMYWJlbHM7CisgICAgVmVjdG9yPEFzc2VtYmxlcjo6SnVtcExpc3Q+
IG1fanVtcHNQZXJTdGF0ZTsKK307CisKK0pTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBp
bGVERkEoY29uc3QgREZBJiBkZmEsIEpTQzo6Vk0mIHZtKQoreworICAgIERGQUNvZGVHZW5lcmF0
b3IgY29kZUdlbmVyYXRvcihkZmEpOworICAgIHJldHVybiBjb2RlR2VuZXJhdG9yLmNvbXBpbGUo
dm0pOworfQorCitERkFDb2RlR2VuZXJhdG9yOjpERkFDb2RlR2VuZXJhdG9yKGNvbnN0IERGQSYg
ZGZhKQorICAgIDogbV9kZmEoZGZhKQorICAgICwgbV9zdGFja0FsbG9jYXRvcihtX2Fzc2VtYmxl
cikKK3sKK30KKworSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYgREZBQ29kZUdlbmVyYXRvcjo6
Y29tcGlsZShKU0M6OlZNJiB2bSkKK3sKKyAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLnJlc2VydmVD
YWxsZXJTYXZlZFJlZ2lzdGVycyhXVEZfQVJSQVlfTEVOR1RIKGNhbGxlclNhdmVkUmVnaXN0ZXJz
KSk7CisKKyAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoSlNDOjpHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVSZWdp
c3RlcihKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgbV9yZWdpc3RlckFsbG9jYXRv
ci5hbGxvY2F0ZVJlZ2lzdGVyKEpTQzo6R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKworICAgIG1f
dXJsQnVmZmVyT2Zmc2V0UmVnaXN0ZXIgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVn
aXN0ZXIoKTsKKyAgICBtX2Fzc2VtYmxlci5tb3ZlKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
LCBtX3VybEJ1ZmZlck9mZnNldFJlZ2lzdGVyKTsKKworICAgIGxvd2VyU3RhdGVNYWNoaW5lKCk7
CisKKyAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3RlcihtX3VybEJ1ZmZl
ck9mZnNldFJlZ2lzdGVyKTsKKyAgICBtX3VybEJ1ZmZlck9mZnNldFJlZ2lzdGVyID0gSW52YWxp
ZEdQUlJlZzsKKworICAgIG1fYXNzZW1ibGVyLnJldCgpOworCisgICAgbV9yZWdpc3RlckFsbG9j
YXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIoSlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
IG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVhbGxvY2F0ZVJlZ2lzdGVyKEpTQzo6R1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3RlcihK
U0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMik7CisKKyAgICBKU0M6OkxpbmtCdWZmZXIgbGlua0J1
ZmZlcih2bSwgbV9hc3NlbWJsZXIsIEdMT0JBTF9USFVOS19JRCk7CisjaWYgQ09OVEVOVF9FWFRF
TlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCisgICAgcmV0dXJuIGxpbmtCdWZmZXIuZmlu
YWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KCJDb21waWxlZCBFeHRlbnNpb24iKTsKKyNlbHNlCisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJDb21waWxlZCBFeHRlbnNpb24i
KSk7CisjZW5kaWYKK30KKwordm9pZCBERkFDb2RlR2VuZXJhdG9yOjpsb3dlclN0YXRlTWFjaGlu
ZSgpCit7CisgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisKKyAgICB1bnNp
Z25lZCBkZmFTaXplID0gbV9kZmEuc2l6ZSgpOworCisgICAgbV9zdGF0ZUVudHJ5TGFiZWxzLnJl
c2l6ZShkZmFTaXplKTsKKyAgICBtX2p1bXBzUGVyU3RhdGUucmVzaXplKGRmYVNpemUpOworCisg
ICAgdW5zaWduZWQgcm9vdCA9IG1fZGZhLnJvb3QoKTsKKyAgICBtX3N0YXRlRW50cnlMYWJlbHNb
cm9vdF0gPSBtX2Fzc2VtYmxlci5sYWJlbCgpOworICAgIGxvd2VyTm9kZShmYWlsdXJlQ2FzZXMs
IG1fZGZhLm5vZGVBdChyb290KSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZh
U2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChpID09IHJvb3QpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgbV9zdGF0ZUVudHJ5TGFiZWxzW2ldID0gbV9hc3NlbWJsZXIubGFiZWwoKTsK
KyAgICAgICAgbG93ZXJOb2RlKGZhaWx1cmVDYXNlcywgbV9kZmEubm9kZUF0KGkpKTsKKyAgICB9
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGZhU2l6ZTsgKytpKQorICAgICAgICBt
X2p1bXBzUGVyU3RhdGVbaV0ubGlua1RvKG1fc3RhdGVFbnRyeUxhYmVsc1tpXSwgJm1fYXNzZW1i
bGVyKTsKKworICAgIGZhaWx1cmVDYXNlcy5saW5rKCZtX2Fzc2VtYmxlcik7Cit9CisKK3ZvaWQg
REZBQ29kZUdlbmVyYXRvcjo6bG93ZXJOb2RlKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVD
YXNlcywgY29uc3QgREZBTm9kZSYgZGZhTm9kZSkKK3sKKyAgICBmb3IgKHVpbnQ2NF90IGFjdGlv
bklkIDogZGZhTm9kZS5hY3Rpb25zKQorICAgICAgICBjYWxsQWRkQWN0aW9uRnVuY3Rpb24oc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGFjdGlvbklkKSk7CisKKyAgICBMb2NhbFJlZ2lzdGVyIGNoYXJh
Y3RlclJlZ2lzdGVyKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOworICAgIGdldE5leHRDaGFyYWN0ZXIo
ZmFpbHVyZUNhc2VzLCBjaGFyYWN0ZXJSZWdpc3Rlcik7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8g
dHJhbnNpdGlvbiA6IGRmYU5vZGUudHJhbnNpdGlvbnMpIHsKKyAgICAgICAgQXNzZW1ibGVyOjpK
dW1wIGp1bXBPbkNoYXJhY3RlciA9IG1fYXNzZW1ibGVyLmJyYW5jaDMyKEFzc2VtYmxlcjo6RXF1
YWwsIGNoYXJhY3RlclJlZ2lzdGVyLCBBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0cmFuc2l0aW9u
LmtleSkpOworICAgICAgICBtX2p1bXBzUGVyU3RhdGVbdHJhbnNpdGlvbi52YWx1ZV0uYXBwZW5k
KGp1bXBPbkNoYXJhY3Rlcik7CisgICAgfQorCisgICAgaWYgKGRmYU5vZGUuaGFzRmFsbGJhY2tU
cmFuc2l0aW9uKQorICAgICAgICBtX2p1bXBzUGVyU3RhdGVbZGZhTm9kZS5mYWxsYmFja1RyYW5z
aXRpb25dLmFwcGVuZChtX2Fzc2VtYmxlci5qdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5qdW1wKCkpOworfQorCit2b2lkIERGQUNvZGVH
ZW5lcmF0b3I6OmdldE5leHRDaGFyYWN0ZXIoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNh
c2VzLCBMb2NhbFJlZ2lzdGVyJiBjaGFyYWN0ZXIpCit7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVu
ZChtX2Fzc2VtYmxlci5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCBBc3NlbWJsZXI6OkFkZHJl
c3MoSlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjAsIE9CSkVDVF9PRkZTRVRPRihQb3RlbnRpYWxQ
YWdlTG9hZERlc2NyaXB0b3IsIHVybEJ1ZmZlclNpemUpKSwgbV91cmxCdWZmZXJPZmZzZXRSZWdp
c3RlcikpOworCisgICAgTG9jYWxSZWdpc3RlciBidWZmZXJQb2ludGVyKG1fcmVnaXN0ZXJBbGxv
Y2F0b3IpOworICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKEpTQzo6
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBPQkpFQ1RfT0ZGU0VUT0YoUG90ZW50aWFsUGFnZUxvYWRE
ZXNjcmlwdG9yLCB1cmxCdWZmZXIpKSwgYnVmZmVyUG9pbnRlcik7CisgICAgbV9hc3NlbWJsZXIu
bG9hZDgoQXNzZW1ibGVyOjpCYXNlSW5kZXgoYnVmZmVyUG9pbnRlciwgbV91cmxCdWZmZXJPZmZz
ZXRSZWdpc3RlciwgQXNzZW1ibGVyOjpUaW1lc09uZSksIGNoYXJhY3Rlcik7CisKKyAgICBtX2Fz
c2VtYmxlci5hZGQzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgbV91cmxCdWZmZXJPZmZz
ZXRSZWdpc3Rlcik7Cit9CisKK3ZvaWQgREZBQ29kZUdlbmVyYXRvcjo6Y2FsbEFkZEFjdGlvbkZ1
bmN0aW9uKHVuc2lnbmVkIGFyZ3VtZW50KQoreworICAgIGNvbnN0IFJlZ2lzdGVyVmVjdG9yJiBh
bGxvY2F0ZWRSZWdpc3RlcnMgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlZFJlZ2lzdGVy
cygpOworICAgIFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZVZlY3RvciBzYXZlZFJlZ2lz
dGVyU3RhY2tSZWZlcmVuY2VzID0gbV9zdGFja0FsbG9jYXRvci5wdXNoKGFsbG9jYXRlZFJlZ2lz
dGVycyk7CisKKyAgICBtX3N0YWNrQWxsb2NhdG9yLmFsaWduU3RhY2tQcmVGdW5jdGlvbkNhbGwo
KTsKKworICAgIHsKKyAgICAgICAgTG9jYWxSZWdpc3RlciBmdW5jdGlvbkFkZHJlc3MobV9yZWdp
c3RlckFsbG9jYXRvcik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUoSlNDOjpHUFJJbmZvOjph
cmd1bWVudEdQUjEsIGZ1bmN0aW9uQWRkcmVzcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUo
SlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjIsIEpTQzo6R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhcmd1bWVu
dCksIEpTQzo6R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKworICAgICAgICBtX2Fzc2VtYmxlci5j
YWxsKGZ1bmN0aW9uQWRkcmVzcyk7CisgICAgfQorCisgICAgbV9zdGFja0FsbG9jYXRvci51bmFs
aWduU3RhY2tQb3N0RnVuY3Rpb25DYWxsKCk7CisKKyAgICBtX3N0YWNrQWxsb2NhdG9yLnBvcChz
YXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLCBhbGxvY2F0ZWRSZWdpc3RlcnMpOworfQorCit9
IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQ29tcGlsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUNvbXBpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTFiY2FhODJm
MjhhOTk0YjMyNzRkYWJhYzdjYjU4OTE0YWQwZjE0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUNvbXBpbGVyLmgKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgREZBQ29tcGlsZXJfaAorI2RlZmluZSBERkFDb21waWxl
cl9oCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKworY2xhc3MgREZBOworCitzdHJ1Y3Qg
UG90ZW50aWFsUGFnZUxvYWREZXNjcmlwdG9yIHsKKyAgICBjb25zdCBjaGFyKiB1cmxCdWZmZXI7
CisgICAgdW5zaWduZWQgdXJsQnVmZmVyU2l6ZTsKK307CisKK3R5cGVkZWYgdm9pZCAoKkFkZEFj
dGlvbkZ1bmN0aW9uKSh2b2lkKiwgdW5zaWduZWQpOwordHlwZWRlZiB2b2lkICgqQ29tcGlsZWRS
dWxlTWF0Y2hlcikoUG90ZW50aWFsUGFnZUxvYWREZXNjcmlwdG9yKiwgQWRkQWN0aW9uRnVuY3Rp
b24sIHZvaWQqKTsKKworSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29tcGlsZURGQShjb25z
dCBERkEmLCBKU0M6OlZNJik7CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisKKyNlbmRpZiAvLyBERkFDb21waWxlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245584</attachid>
            <date>2015-01-28 16:53:21 -0800</date>
            <delta_ts>2015-02-16 20:16:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141017-20150128165326.patch</filename>
            <type>text/plain</type>
            <size>24311</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MzE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBlNWYzZjM2NmY2NDk4
MDMwNTMwMzgxNmE2OTY4MDE0N2I3YWM4Ny4uMTZhNTYzMzZmOWMzOWY5Yjc3ZWVhYTk3OTk1M2Zj
NjZkNTg2NGYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAxLTI4ICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSB0cml2
aWFsIGNvZGUgZ2VuZXJhdG9yIGZvciB0aGUgREZBCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBOb3RoaW5nIGZhbmN5IHlldCwgdGhpcyBpcyBqdXN0IGRv
aW5nIGEgbGl0ZXJhbCB0cmFuc2xhdGlvbiBmcm9tIHRoZSBERkEKKyAgICAgICAgdG8gbWFjaGlu
ZSBjb2RlLiBJdCBpcyBleHRyZW1lbHkgaW5lZmZpY2llbnQgYXQgdGhlIG1vbWVudC4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6Q29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnNldFJ1bGVMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjphZGRBY3Rpb25Ub0hhc2hTZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2hvdWxk
QmxvY2tVUkwpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25z
QmFja2VuZC5oOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjpuZXh0U3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQTo6YWN0aW9ucyk6IERlbGV0
ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6REZBOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpERkE6Om5vZGVBdCk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMv
REZBQ29tcGlsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpjb21waWxlREZBKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFDb2RlR2VuZXJhdG9yOjpERkFDb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFDb2RlR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFDb2RlR2VuZXJhdG9yOjpsb3dlclN0YXRlTWFj
aGluZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQ29kZUdlbmVy
YXRvcjo6bG93ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpE
RkFDb2RlR2VuZXJhdG9yOjpnZXROZXh0Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFDb2RlR2VuZXJhdG9yOjpjYWxsQWRkQWN0aW9uRnVuY3Rpb24p
OgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0RGQUNvbXBpbGVyLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5oLgorCiAyMDE1LTAxLTI4ICBa
YWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2ltcGxlIGxpbmUgbGF5
b3V0OiBEcm9wIHVuY29tbWl0dGVkL2NvbW1pdHRlZCB0ZXJtcyBmcm9tIExpbmVTdGF0ZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA4YmVjODJhNjY2MGFmOTk3NzA5Njg5MjU2MzBkY2Y4ZjZkMmY5MzYyLi41YjQwYmIxOGY2OTdi
YzA3ZDhiODNiZDk1YTAxNTQ2YWI2NTFmZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDQzLDYgKzEwNDMsOCBAQAogCQky
NkMxNUNGNzE4NTdFMTVFMDBGMTVDMDMgLyogUmVzb3VyY2VIYW5kbGVDRlVSTENvbm5lY3Rpb25E
ZWxlZ2F0ZVdpdGhPcGVyYXRpb25RdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjZDMTVDRjUxODU3RTE1RDAwRjE1QzAzIC8qIFJlc291cmNlSGFu
ZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuaCAqLzsgfTsKIAkJ
MjZDMTdBM0UxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzE3QTNDMTQ5MUQyRDQwMEQxMkJB
MiAvKiBGaWxlU3lzdGVtSU9TLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMjZDMTdBM0YxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1Mu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkMxN0Ez
RDE0OTFEMkQ0MDBEMTJCQTIgLyogRmlsZVN5c3RlbUlPUy5tbSAqLzsgfTsKKwkJMjZDNTYwRDMx
QTc4M0VCQjAwODY4MkU0IC8qIERGQUNvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2QzU2MEQxMUE3ODNFQkIwMDg2ODJFNCAvKiBERkFD
b21waWxlci5jcHAgKi87IH07CisJCTI2QzU2MEQ0MUE3ODNFQkIwMDg2ODJFNCAvKiBERkFDb21w
aWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjZD
NTYwRDIxQTc4M0VCQjAwODY4MkU0IC8qIERGQUNvbXBpbGVyLmggKi87IH07CiAJCTI2RTk4QTEw
MTMwQTlGQ0EwMDhFQjdCMiAvKiBUZXh0Q29kZWNBU0NJSUZhc3RQYXRoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkU5OEEwRjEzMEE5RkNBMDA4RUI3
QjIgLyogVGV4dENvZGVjQVNDSUlGYXN0UGF0aC5oICovOyB9OwogCQkyNkYwQzg5NzFBMkU3MjRC
MDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RjBDODk1MUEyRTcyNEIwMDI3OTRGOCAv
KiBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXIuY3BwICovOyB9OwogCQkyNkYwQzg5ODFBMkU3MjRC
MDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNkYwQzg5NjFBMkU3MjRCMDAyNzk0RjggLyog
Q29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgwNzMsNiArODA3NSw4IEBACiAJCTI2QzE1Q0Y1MTg1N0Ux
NUQwMEYxNUMwMyAvKiBSZXNvdXJjZUhhbmRsZUNGVVJMQ29ubmVjdGlvbkRlbGVnYXRlV2l0aE9w
ZXJhdGlvblF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNl
SGFuZGxlQ0ZVUkxDb25uZWN0aW9uRGVsZWdhdGVXaXRoT3BlcmF0aW9uUXVldWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZDMTdBM0MxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVT
eXN0ZW1JT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVN5c3RlbUlP
Uy5oOyBwYXRoID0gaW9zL0ZpbGVTeXN0ZW1JT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjZDMTdBM0QxNDkxRDJENDAwRDEyQkEyIC8qIEZpbGVTeXN0ZW1JT1MubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBGaWxlU3lzdGVtSU9TLm1tOyBwYXRo
ID0gaW9zL0ZpbGVTeXN0ZW1JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI2
QzU2MEQxMUE3ODNFQkIwMDg2ODJFNCAvKiBERkFDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkFDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTI2QzU2MEQyMUE3ODNFQkIwMDg2ODJFNCAvKiBERkFDb21waWxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkFDb21waWxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyNkU5OEEwRjEzMEE5RkNBMDA4RUI3QjIgLyogVGV4dENvZGVj
QVNDSUlGYXN0UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q29k
ZWNBU0NJSUZhc3RQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2RjBDODk1
MUEyRTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjZGMEM4OTYxQTJFNzI0QjAwMjc5NEY4
IC8qIENvbnRlbnRFeHRlbnNpb25zTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uc01hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE1Mzg3LDYgKzE1MzkxLDggQEAKIAkJCQkyNkYwQzg5NjFBMkU3MjRCMDAyNzk0
RjggLyogQ29udGVudEV4dGVuc2lvbnNNYW5hZ2VyLmggKi8sCiAJCQkJMjY3NzI1RjYxQTVCM0FE
OTAwM0MyNEREIC8qIERGQS5jcHAgKi8sCiAJCQkJMjY3NzI1RjcxQTVCM0FEOTAwM0MyNEREIC8q
IERGQS5oICovLAorCQkJCTI2QzU2MEQxMUE3ODNFQkIwMDg2ODJFNCAvKiBERkFDb21waWxlci5j
cHAgKi8sCisJCQkJMjZDNTYwRDIxQTc4M0VCQjAwODY4MkU0IC8qIERGQUNvbXBpbGVyLmggKi8s
CiAJCQkJMjY3NzI1RjkxQTVCM0FEOTAwM0MyNEREIC8qIERGQU5vZGUuaCAqLywKIAkJCQkyNjkz
OTcyNTFBNEE1RkJEMDBFODM0OUQgLyogTkZBLmNwcCAqLywKIAkJCQkyNjkzOTcyMzFBNEE1QjY0
MDBFODM0OUQgLyogTkZBLmggKi8sCkBAIC0yNjMwMCw2ICsyNjMwNiw3IEBACiAJCQkJQjIyMjc5
QzIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0V4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjc5QzUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OUM4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUJs
ZW5kRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjZDNTYwRDQxQTc4M0VCQjAwODY4MkU0
IC8qIERGQUNvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzlDQjBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
MjI3OUNFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5RDEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFQ29t
cG9zaXRlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTU1Miw2ICsyOTU1OSw3IEBACiAJ
CQkJQzVBMUVBN0MxNTJCQ0YwNDAwNEQwMEI2IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDAwRDdBNDE0QTNGNjE5MDA3MzQwMTEgLyogU2luY1Jlc2Ft
cGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTMyN0Q2MTExQTMzQTJCMDA0RjlENjUgLyog
U2lua0RvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI2QzU2MEQzMUE3ODNFQkIwMDg2
ODJFNCAvKiBERkFDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUU5MTFDQzBFRjg2
RDQ3MDA5RDBDQUYgLyogU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0MTUwRjlGMjEyQjZFMEU3MDAwOEM4NjAgLyogU2xpZGVyVGh1bWJFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFDMDkzOUVBMUExM0UxMjkwMEI3ODhFNSAvKiBDYWNoZWRTVkdG
b250LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKaW5kZXggYjAw
MTljOWIzNzRkZDA0MzI3N2I0ZmRjMzRiN2M0MjQxNzM2OGJjYS4uM2JkOTJjOTY5N2ZmZWU4M2Zl
ZmE1MGRiNzAzNTQ4YWE1OGU1YjExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogI2luY2x1ZGUg
IkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCisjaW5jbHVkZSAiREZBQ29tcGlsZXIuaCIK
ICNpbmNsdWRlICJORkEuaCIKICNpbmNsdWRlICJORkFUb0RGQS5oIgogI2luY2x1ZGUgIlVSTC5o
IgpAQCAtNDIsNiArNDMsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgQ29u
dGVudEV4dGVuc2lvbnMgewogCitDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OkNvbnRlbnRFeHRl
bnNpb25zQmFja2VuZCgpCisgICAgOiBtX3ZtKEpTQzo6Vk06OnNoYXJlZEluc3RhbmNlKCkpCit7
Cit9CisKIHZvaWQgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxlTGlzdChjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1
bGVMaXN0KQogewogICAgIEFTU0VSVCghaWRlbnRpZmllci5pc0VtcHR5KCkpOwpAQCAtODUsMTkg
KzkxLDI0IEBAIHZvaWQgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjpzZXRSdWxlTGlzdChjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFZlY3RvCiAgICAgZG91YmxlIGRmYUJ1aWxkVGlt
ZVN0YXJ0ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAjZW5kaWYKIAotICAgIENv
bXBpbGVkQ29udGVudEV4dGVuc2lvbiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSB7IE5GQVRv
REZBOjpjb252ZXJ0KG5mYSksIHJ1bGVMaXN0IH07CisgICAgY29uc3QgREZBIGRmYSA9IE5GQVRv
REZBOjpjb252ZXJ0KG5mYSk7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFOQ0Vf
UkVQT1JUSU5HCiAgICAgZG91YmxlIGRmYUJ1aWxkVGltZUVuZCA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOwogICAgIGRhdGFMb2dGKCIgICAgVGltZSBzcGVudCBidWlsZGluZyB0aGUg
REZBOiAlZlxuIiwgKGRmYUJ1aWxkVGltZUVuZCAtIGRmYUJ1aWxkVGltZVN0YXJ0KSk7CiAjZW5k
aWYKIAotICAgIC8vIEZJWE1FOiBuZXZlciBhZGQgYSBERkEgdGhhdCBvbmx5IG1hdGNoZXMgdGhl
IGVtcHR5IHNldC4KKyAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb21waWxlZERmYTsK
KyAgICB7CisgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtLmdldCgpKTsKKyAg
ICAgICAgY29tcGlsZWREZmEgPSBjb21waWxlREZBKGRmYSwgbV92bS5nZXQoKSk7CisgICAgfQog
CiAjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1NUQVRFX01BQ0hJTkVfREVCVUdHSU5HCi0gICAgY29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uLmRmYS5kZWJ1Z1ByaW50RG90KCk7CisgICAgZGZhLmRlYnVn
UHJpbnREb3QoKTsKICNlbmRpZgogCisgICAgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIGNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbiA9IHsgY29tcGlsZWREZmEsIHJ1bGVMaXN0IH07CiAgICAgbV9y
dWxlTGlzdHMuc2V0KGlkZW50aWZpZXIsIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik7CiB9CiAK
QEAgLTExMSw2ICsxMjIsMTMgQEAgdm9pZCBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ6OnJlbW92
ZUFsbFJ1bGVMaXN0cygpCiAgICAgbV9ydWxlTGlzdHMuY2xlYXIoKTsKIH0KIAordHlwZWRlZiBI
YXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiBUcmlnZ2VyZWRBY3Rpb25TZXQ7CisK
K3N0YXRpYyB2b2lkIGFkZEFjdGlvblRvSGFzaFNldCh2b2lkKiBkYXRhLCB1bnNpZ25lZCBhY3Rp
b25JZCkKK3sKKyAgICByZWludGVycHJldF9jYXN0PFRyaWdnZXJlZEFjdGlvblNldCo+KGRhdGEp
LT5hZGQoYWN0aW9uSWQpOworfQorCiBib29sIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDo6c2hv
dWxkQmxvY2tVUkwoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB1cmxTdHJp
bmcgPSB1cmwuc3RyaW5nKCk7CkBAIC0xMTgsMjEgKzEzNiwxNyBAQCBib29sIENvbnRlbnRFeHRl
bnNpb25zQmFja2VuZDo6c2hvdWxkQmxvY2tVUkwoY29uc3QgVVJMJiB1cmwpCiAKICAgICBmb3Ig
KGF1dG8mIHJ1bGVMaXN0U2xvdCA6IG1fcnVsZUxpc3RzKSB7CiAgICAgICAgIENvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbiYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uID0gcnVsZUxpc3RTbG90LnZh
bHVlOwotICAgICAgICB1bnNpZ25lZCBzdGF0ZSA9IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5k
ZmEucm9vdCgpOwogCi0gICAgICAgIEhhc2hTZXQ8dWludDY0X3QsIERlZmF1bHRIYXNoPHVpbnQ2
NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+
IHRyaWdnZXJlZEFjdGlvbnM7CisgICAgICAgIENTdHJpbmcgdXJsQ1N0cmluZyA9IHVybFN0cmlu
Zy51dGY4KCk7CisgICAgICAgIFBvdGVudGlhbFBhZ2VMb2FkRGVzY3JpcHRvciBwb3RlbnRpYWxQ
YWdlTG9hZERlc2NyaXB0b3I7CisgICAgICAgIHBvdGVudGlhbFBhZ2VMb2FkRGVzY3JpcHRvci51
cmxCdWZmZXIgPSB1cmxDU3RyaW5nLmRhdGEoKTsKKyAgICAgICAgcG90ZW50aWFsUGFnZUxvYWRE
ZXNjcmlwdG9yLnVybEJ1ZmZlclNpemUgPSB1cmxDU3RyaW5nLmxlbmd0aCgpOwogCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1cmxTdHJpbmcubGVuZ3RoKCk7ICsraSkgewotICAg
ICAgICAgICAgY2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxjaGFyPih1cmxTdHJpbmdbaV0p
OwotICAgICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgICAgIHN0YXRlID0gY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLmRmYS5uZXh0U3RhdGUoc3RhdGUsIGNoYXJhY3Rlciwgb2spOwotICAgICAg
ICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgSGFzaFNldDx1
bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFpl
cm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gdHJpZ2dlcmVkQWN0aW9uczsKKworICAgICAgICB2
b2lkKiBjb21waWxlZE1hdGNoZXIgPSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24uY29tcGlsZWRN
YXRjaGVyLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICByZWludGVycHJldF9j
YXN0PENvbXBpbGVkUnVsZU1hdGNoZXI+KGNvbXBpbGVkTWF0Y2hlcikoJnBvdGVudGlhbFBhZ2VM
b2FkRGVzY3JpcHRvciwgYWRkQWN0aW9uVG9IYXNoU2V0LCAmdHJpZ2dlcmVkQWN0aW9ucyk7CiAK
LSAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlvbnMgPSBjb21waWxlZENv
bnRlbnRFeHRlbnNpb24uZGZhLmFjdGlvbnMoc3RhdGUpOwotICAgICAgICAgICAgaWYgKCFhY3Rp
b25zLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0cmlnZ2VyZWRBY3Rpb25zLmFkZChhY3Rp
b25zLmJlZ2luKCksIGFjdGlvbnMuZW5kKCkpOwotICAgICAgICB9CiAgICAgICAgIGlmICghdHJp
Z2dlcmVkQWN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFZlY3Rvcjx1aW50NjRfdD4g
c29ydGVkQWN0aW9uczsKICAgICAgICAgICAgIGNvcHlUb1ZlY3Rvcih0cmlnZ2VyZWRBY3Rpb25z
LCBzb3J0ZWRBY3Rpb25zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgKaW5kZXggNGM0YWIwMDdkNDMw
OThlYjU4NmRmOGQwZmM3Yjk3ZDkwM2EzNmM4Yy4uNDMxNTdkMTg3MjhhYTczODRhMDA1ZTg2OGM2
ZWU2ZWE1NjE5OGMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgKQEAgLTMwLDYgKzMwLDggQEAK
IAogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCiAjaW5jbHVkZSAiREZBLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVk0uaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KQEAgLTQ3LDYgKzQ5LDggQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIC8vIDIp
IEl0IHByb3ZpZGVzIEFQSXMgZm9yIHRoZSBXZWJDb3JlIGludGVyZmFjZXMgdG8gdXNlIHRob3Nl
IHJ1bGVzIGVmZmljaWVudGx5LgogY2xhc3MgQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kIHsKIHB1
YmxpYzoKKyAgICBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQoKTsKKwogICAgIC8vIC0gUnVsZSBt
YW5hZ2VtZW50IGludGVyZmFjZS4gVGhpcyBjYW4gYmUgdXNlZCBieSB1cHBlciBsYXllci4KIAog
ICAgIC8vIFNldCBhIGxpc3Qgb2YgcnVsZXMgZm9yIGEgZ2l2ZW4gbmFtZS4gSWYgdGhlcmUgd2Vy
ZSBleGlzdGluZyBydWxlcyBmb3IgdGhlIG5hbWUsIHRoZXkgYXJlIG92ZXJyaWRlbi4KQEAgLTYw
LDEwICs2NCwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IENvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbiB7Ci0gICAgICAgIERGQSBkZmE7CisgICAgICAgIEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNvbXBpbGVkTWF0Y2hlcjsKICAgICAgICAgVmVjdG9yPENvbnRlbnRFeHRl
bnNpb25SdWxlPiBydWxlTGlzdDsKICAgICB9OwogCisgICAgUmVmPEpTQzo6Vk0+IG1fdm07CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gbV9ydWxlTGlzdHM7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmNwcAppbmRleCA0ZjQz
ZTQ0MzE0MDZkMTgwODNiMGQ2NWM3Zjg4NWYzOTJjZGE2ZGNkLi4yM2M2MjIxY2M1ZGQ1OTk2YzUz
MjAxZDYyYWI0ZTc3NWVkYjRiYzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9ERkEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0RGQS5jcHAKQEAgLTU5LDMxICs1OSw2IEBAIERGQSYgREZBOjpvcGVyYXRvcj0oY29uc3QgREZB
JiBkZmEpCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi11bnNpZ25lZCBERkE6Om5leHRTdGF0ZSh1
bnNpZ25lZCBjdXJyZW50U3RhdGUsIGNoYXIgY2hhcmFjdGVyLCBib29sJiBvaykgY29uc3QKLXsK
LSAgICBBU1NFUlQoY3VycmVudFN0YXRlIDwgbV9ub2Rlcy5zaXplKCkpOwotCi0gICAgY29uc3Qg
REZBTm9kZSYgbm9kZSA9IG1fbm9kZXNbY3VycmVudFN0YXRlXTsKLSAgICBhdXRvIG5leHROb2Rl
ID0gbm9kZS50cmFuc2l0aW9ucy5maW5kKGNoYXJhY3Rlcik7Ci0gICAgaWYgKG5leHROb2RlICE9
IG5vZGUudHJhbnNpdGlvbnMuZW5kKCkpIHsKLSAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICBy
ZXR1cm4gbmV4dE5vZGUtPnZhbHVlOwotICAgIH0KLSAgICBpZiAobm9kZS5oYXNGYWxsYmFja1Ry
YW5zaXRpb24pIHsKLSAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICByZXR1cm4gbm9kZS5mYWxs
YmFja1RyYW5zaXRpb247Ci0gICAgfQotICAgIG9rID0gZmFsc2U7Ci0gICAgcmV0dXJuIDA7Ci0K
LX0KLQotY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgREZBOjphY3Rpb25zKHVuc2lnbmVkIGN1cnJl
bnRTdGF0ZSkgY29uc3QKLXsKLSAgICBBU1NFUlQoY3VycmVudFN0YXRlIDwgbV9ub2Rlcy5zaXpl
KCkpOwotICAgIHJldHVybiBtX25vZGVzW2N1cnJlbnRTdGF0ZV0uYWN0aW9uczsKLX0KLQogI2lm
IENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogc3RhdGljIHZvaWQg
cHJpbnRSYW5nZShib29sIGZpcnN0UmFuZ2UsIGNoYXIgcmFuZ2VTdGFydCwgY2hhciByYW5nZUVu
ZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQS5o
IGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgKaW5kZXggY2M4MGQ4NjYy
NWJlMWU1NmZmOTFlY2ViZjRkMzRmNmM1NzgwM2VjMy4uODlmNzQ3MGMzYTNlMjEzYTJmNTY3NTdh
NmVmODE4NmQ5ZGE1MzU2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvREZBLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBLmgK
QEAgLTQ2LDE1ICs0NiwxNyBAQCBwdWJsaWM6CiAgICAgREZBJiBvcGVyYXRvcj0oY29uc3QgREZB
Jik7CiAKICAgICB1bnNpZ25lZCByb290KCkgY29uc3QgeyByZXR1cm4gbV9yb290OyB9Ci0gICAg
Ly8gSWYgdGhlcmUgaXMgYSB0cmFuc2l0aW9uIHRvIGEgdmFsaWQgc3RhdGUgb24gImNoYXJhY3Rl
ciIsIHJldHVybiB0aGF0IHN0YXRlIGFuZCBzZXQgb2sgdG8gdHJ1ZS4KLSAgICAvLyBPdGhlcndp
c2UsIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBvayBpcyBmYWxzZS4KLSAgICB1
bnNpZ25lZCBuZXh0U3RhdGUodW5zaWduZWQgY3VycmVudFN0YXRlLCBjaGFyIGNoYXJhY3Rlciwg
Ym9vbCYgb2spIGNvbnN0OwotICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGFjdGlvbnModW5z
aWduZWQgY3VycmVudFN0YXRlKSBjb25zdDsKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub2Rlcy5zaXplKCk7IH0KKyAgICBjb25zdCBERkFOb2RlJiBub2RlQXQodW5zaWdu
ZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25vZGVzW2ldOworICAgIH0KIAog
I2lmIENPTlRFTlRfRVhURU5TSU9OU19TVEFURV9NQUNISU5FX0RFQlVHR0lORwogICAgIHZvaWQg
ZGVidWdQcmludERvdCgpIGNvbnN0OwogI2VuZGlmCiAKKwogcHJpdmF0ZToKICAgICBWZWN0b3I8
REZBTm9kZT4gbV9ub2RlczsKICAgICB1bnNpZ25lZCBtX3Jvb3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFDb21waWxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFDb21waWxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmE4NDY2
Njk2ZmFjZjA4ODA3YTMwYWQwZWJjNTBjYmY4NzA4ZjlhYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUNvbXBpbGVyLmNwcApAQCAtMCwwICsx
LDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkFD
b21waWxlci5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUg
IkRGQS5oIgorI2luY2x1ZGUgIkRGQU5vZGUuaCIKKyNpbmNsdWRlICJSZWdpc3RlckFsbG9jYXRv
ci5oIgorI2luY2x1ZGUgIlN0YWNrQWxsb2NhdG9yLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvR1BSSW5mby5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0xpbmtCdWZmZXIuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYWNyb0Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1ZNLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIENvbnRl
bnRFeHRlbnNpb25zIHsKKwordHlwZWRlZiBKU0M6Ok1hY3JvQXNzZW1ibGVyIEFzc2VtYmxlcjsK
KworY2xhc3MgREZBQ29kZUdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgREZBQ29kZUdlbmVyYXRv
cihjb25zdCBERkEmKTsKKyAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb21waWxlKEpT
Qzo6Vk0mKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGxvd2VyU3RhdGVNYWNoaW5lKCk7CisgICAg
dm9pZCBsb3dlck5vZGUoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBE
RkFOb2RlJik7CisKKyAgICB2b2lkIGdldE5leHRDaGFyYWN0ZXIoQXNzZW1ibGVyOjpKdW1wTGlz
dCYgZmFpbHVyZUNhc2VzLCBMb2NhbFJlZ2lzdGVyJiBvdXRwdXQpOworICAgIHZvaWQgY2FsbEFk
ZEFjdGlvbkZ1bmN0aW9uKHVuc2lnbmVkIGFyZ3VtZW50KTsKKworICAgIGNvbnN0IERGQSYgbV9k
ZmE7CisKKyAgICBBc3NlbWJsZXIgbV9hc3NlbWJsZXI7CisgICAgUmVnaXN0ZXJBbGxvY2F0b3Ig
bV9yZWdpc3RlckFsbG9jYXRvcjsKKyAgICBTdGFja0FsbG9jYXRvciBtX3N0YWNrQWxsb2NhdG9y
OworCisgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtX3VybEJ1ZmZlck9mZnNl
dFJlZ2lzdGVyID0gSW52YWxpZEdQUlJlZzsKKyAgICBWZWN0b3I8QXNzZW1ibGVyOjpMYWJlbD4g
bV9zdGF0ZUVudHJ5TGFiZWxzOworICAgIFZlY3RvcjxBc3NlbWJsZXI6Okp1bXBMaXN0PiBtX2p1
bXBzUGVyU3RhdGU7Cit9OworCitKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb21waWxlREZB
KGNvbnN0IERGQSYgZGZhLCBKU0M6OlZNJiB2bSkKK3sKKyAgICBERkFDb2RlR2VuZXJhdG9yIGNv
ZGVHZW5lcmF0b3IoZGZhKTsKKyAgICByZXR1cm4gY29kZUdlbmVyYXRvci5jb21waWxlKHZtKTsK
K30KKworREZBQ29kZUdlbmVyYXRvcjo6REZBQ29kZUdlbmVyYXRvcihjb25zdCBERkEmIGRmYSkK
KyAgICA6IG1fZGZhKGRmYSkKKyAgICAsIG1fc3RhY2tBbGxvY2F0b3IobV9hc3NlbWJsZXIpCit7
Cit9CisKK0pTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIERGQUNvZGVHZW5lcmF0b3I6OmNvbXBp
bGUoSlNDOjpWTSYgdm0pCit7CisgICAgbV9yZWdpc3RlckFsbG9jYXRvci5yZXNlcnZlQ2FsbGVy
U2F2ZWRSZWdpc3RlcnMoV1RGX0FSUkFZX0xFTkdUSChjYWxsZXJTYXZlZFJlZ2lzdGVycykpOwor
CisgICAgbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyKEpTQzo6R1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIo
SlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxs
b2NhdGVSZWdpc3RlcihKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMik7CisKKyAgICBtX3VybEJ1
ZmZlck9mZnNldFJlZ2lzdGVyID0gbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVy
KCk7CisgICAgbV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgbV91
cmxCdWZmZXJPZmZzZXRSZWdpc3Rlcik7CisKKyAgICBsb3dlclN0YXRlTWFjaGluZSgpOworCisg
ICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIobV91cmxCdWZmZXJPZmZz
ZXRSZWdpc3Rlcik7CisgICAgbV91cmxCdWZmZXJPZmZzZXRSZWdpc3RlciA9IEludmFsaWRHUFJS
ZWc7CisKKyAgICBtX2Fzc2VtYmxlci5yZXQoKTsKKworICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3Iu
ZGVhbGxvY2F0ZVJlZ2lzdGVyKEpTQzo6R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBtX3Jl
Z2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3RlcihKU0M6OkdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIoSlNDOjpH
UFJJbmZvOjphcmd1bWVudEdQUjIpOworCisgICAgSlNDOjpMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
dm0sIG1fYXNzZW1ibGVyLCBHTE9CQUxfVEhVTktfSUQpOworI2lmIENPTlRFTlRfRVhURU5TSU9O
U19TVEFURV9NQUNISU5FX0RFQlVHR0lORworICAgIHJldHVybiBsaW5rQnVmZmVyLmZpbmFsaXpl
Q29kZVdpdGhEaXNhc3NlbWJseSgiQ29tcGlsZWQgRXh0ZW5zaW9uIik7CisjZWxzZQorICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQ29tcGlsZWQgRXh0ZW5zaW9uIikpOwor
I2VuZGlmCit9CisKK3ZvaWQgREZBQ29kZUdlbmVyYXRvcjo6bG93ZXJTdGF0ZU1hY2hpbmUoKQor
eworICAgIEFzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworCisgICAgdW5zaWduZWQg
ZGZhU2l6ZSA9IG1fZGZhLnNpemUoKTsKKworICAgIG1fc3RhdGVFbnRyeUxhYmVscy5yZXNpemUo
ZGZhU2l6ZSk7CisgICAgbV9qdW1wc1BlclN0YXRlLnJlc2l6ZShkZmFTaXplKTsKKworICAgIHVu
c2lnbmVkIHJvb3QgPSBtX2RmYS5yb290KCk7CisgICAgbV9zdGF0ZUVudHJ5TGFiZWxzW3Jvb3Rd
ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKKyAgICBsb3dlck5vZGUoZmFpbHVyZUNhc2VzLCBtX2Rm
YS5ub2RlQXQocm9vdCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmYVNpemU7
ICsraSkgeworICAgICAgICBpZiAoaSA9PSByb290KQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIG1fc3RhdGVFbnRyeUxhYmVsc1tpXSA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CisgICAg
ICAgIGxvd2VyTm9kZShmYWlsdXJlQ2FzZXMsIG1fZGZhLm5vZGVBdChpKSk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRmYVNpemU7ICsraSkKKyAgICAgICAgbV9qdW1w
c1BlclN0YXRlW2ldLmxpbmtUbyhtX3N0YXRlRW50cnlMYWJlbHNbaV0sICZtX2Fzc2VtYmxlcik7
CisKKyAgICBmYWlsdXJlQ2FzZXMubGluaygmbV9hc3NlbWJsZXIpOworfQorCit2b2lkIERGQUNv
ZGVHZW5lcmF0b3I6Omxvd2VyTm9kZShBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMs
IGNvbnN0IERGQU5vZGUmIGRmYU5vZGUpCit7CisgICAgZm9yICh1aW50NjRfdCBhY3Rpb25JZCA6
IGRmYU5vZGUuYWN0aW9ucykKKyAgICAgICAgY2FsbEFkZEFjdGlvbkZ1bmN0aW9uKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihhY3Rpb25JZCkpOworCisgICAgTG9jYWxSZWdpc3RlciBjaGFyYWN0ZXJS
ZWdpc3RlcihtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKKyAgICBnZXROZXh0Q2hhcmFjdGVyKGZhaWx1
cmVDYXNlcywgY2hhcmFjdGVyUmVnaXN0ZXIpOworCisgICAgZm9yIChjb25zdCBhdXRvIHRyYW5z
aXRpb24gOiBkZmFOb2RlLnRyYW5zaXRpb25zKSB7CisgICAgICAgIEFzc2VtYmxlcjo6SnVtcCBq
dW1wT25DaGFyYWN0ZXIgPSBtX2Fzc2VtYmxlci5icmFuY2gzMihBc3NlbWJsZXI6OkVxdWFsLCBj
aGFyYWN0ZXJSZWdpc3RlciwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodHJhbnNpdGlvbi5rZXkp
KTsKKyAgICAgICAgbV9qdW1wc1BlclN0YXRlW3RyYW5zaXRpb24udmFsdWVdLmFwcGVuZChqdW1w
T25DaGFyYWN0ZXIpOworICAgIH0KKworICAgIGlmIChkZmFOb2RlLmhhc0ZhbGxiYWNrVHJhbnNp
dGlvbikKKyAgICAgICAgbV9qdW1wc1BlclN0YXRlW2RmYU5vZGUuZmFsbGJhY2tUcmFuc2l0aW9u
XS5hcHBlbmQobV9hc3NlbWJsZXIuanVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGZhaWx1cmVD
YXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuanVtcCgpKTsKK30KKwordm9pZCBERkFDb2RlR2VuZXJh
dG9yOjpnZXROZXh0Q2hhcmFjdGVyKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
TG9jYWxSZWdpc3RlciYgY2hhcmFjdGVyKQoreworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9h
c3NlbWJsZXIuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKEpT
Qzo6R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBPQkpFQ1RfT0ZGU0VUT0YoUG90ZW50aWFsUGFnZUxv
YWREZXNjcmlwdG9yLCB1cmxCdWZmZXJTaXplKSksIG1fdXJsQnVmZmVyT2Zmc2V0UmVnaXN0ZXIp
KTsKKworICAgIExvY2FsUmVnaXN0ZXIgYnVmZmVyUG9pbnRlcihtX3JlZ2lzdGVyQWxsb2NhdG9y
KTsKKyAgICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxlcjo6QWRkcmVzcyhKU0M6OkdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgT0JKRUNUX09GRlNFVE9GKFBvdGVudGlhbFBhZ2VMb2FkRGVzY3Jp
cHRvciwgdXJsQnVmZmVyKSksIGJ1ZmZlclBvaW50ZXIpOworICAgIG1fYXNzZW1ibGVyLmxvYWQ4
KEFzc2VtYmxlcjo6QmFzZUluZGV4KGJ1ZmZlclBvaW50ZXIsIG1fdXJsQnVmZmVyT2Zmc2V0UmVn
aXN0ZXIsIEFzc2VtYmxlcjo6VGltZXNPbmUpLCBjaGFyYWN0ZXIpOworCisgICAgbV9hc3NlbWJs
ZXIuYWRkMzIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIG1fdXJsQnVmZmVyT2Zmc2V0UmVn
aXN0ZXIpOworfQorCit2b2lkIERGQUNvZGVHZW5lcmF0b3I6OmNhbGxBZGRBY3Rpb25GdW5jdGlv
bih1bnNpZ25lZCBhcmd1bWVudCkKK3sKKyAgICBjb25zdCBSZWdpc3RlclZlY3RvciYgYWxsb2Nh
dGVkUmVnaXN0ZXJzID0gbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZWRSZWdpc3RlcnMoKTsK
KyAgICBTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2VWZWN0b3Igc2F2ZWRSZWdpc3RlclN0
YWNrUmVmZXJlbmNlcyA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChhbGxvY2F0ZWRSZWdpc3RlcnMp
OworCisgICAgbV9zdGFja0FsbG9jYXRvci5hbGlnblN0YWNrUHJlRnVuY3Rpb25DYWxsKCk7CisK
KyAgICB7CisgICAgICAgIExvY2FsUmVnaXN0ZXIgZnVuY3Rpb25BZGRyZXNzKG1fcmVnaXN0ZXJB
bGxvY2F0b3IpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKEpTQzo6R1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBmdW5jdGlvbkFkZHJlc3MpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKEpTQzo6
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoYXJndW1lbnQpLCBK
U0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisKKyAgICAgICAgbV9hc3NlbWJsZXIuY2FsbChm
dW5jdGlvbkFkZHJlc3MpOworICAgIH0KKworICAgIG1fc3RhY2tBbGxvY2F0b3IudW5hbGlnblN0
YWNrUG9zdEZ1bmN0aW9uQ2FsbCgpOworCisgICAgbV9zdGFja0FsbG9jYXRvci5wb3Aoc2F2ZWRS
ZWdpc3RlclN0YWNrUmVmZXJlbmNlcywgYWxsb2NhdGVkUmVnaXN0ZXJzKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUNvbXBpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFDb21waWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExYmNhYTgyZjI4YTk5
NGIzMjc0ZGFiYWM3Y2I1ODkxNGFkMGYxNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFDb21waWxlci5oCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIERGQUNvbXBpbGVyX2gKKyNkZWZpbmUgREZBQ29tcGlsZXJfaAor
CisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CisKK2NsYXNzIERGQTsKKworc3RydWN0IFBvdGVu
dGlhbFBhZ2VMb2FkRGVzY3JpcHRvciB7CisgICAgY29uc3QgY2hhciogdXJsQnVmZmVyOworICAg
IHVuc2lnbmVkIHVybEJ1ZmZlclNpemU7Cit9OworCit0eXBlZGVmIHZvaWQgKCpBZGRBY3Rpb25G
dW5jdGlvbikodm9pZCosIHVuc2lnbmVkKTsKK3R5cGVkZWYgdm9pZCAoKkNvbXBpbGVkUnVsZU1h
dGNoZXIpKFBvdGVudGlhbFBhZ2VMb2FkRGVzY3JpcHRvciosIEFkZEFjdGlvbkZ1bmN0aW9uLCB2
b2lkKik7CisKK0pTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbXBpbGVERkEoY29uc3QgREZB
JiwgSlNDOjpWTSYpOworCit9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQorCisjZW5kaWYgLy8gREZBQ29tcGlsZXJfaAo=
</data>
<flag name="review"
          id="270535"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>